| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| #include <precomp.h> |
| #include "navibar.hxx" |
| |
| |
| // NOT FULLY DEFINED SERVICES |
| #include <cosv/tpl/tpltools.hxx> |
| #include "nav_main.hxx" |
| #include "opageenv.hxx" |
| |
| |
| using namespace csi::xml; |
| using namespace csi::html; |
| |
| |
| namespace |
| { |
| |
| //************************ SubRowItem ***************************// |
| |
| class SubRowItem |
| { |
| public: |
| SubRowItem( |
| const char * i_sText, |
| const char * i_sLink, |
| bool i_bActive, |
| bool i_bFirstOfRow = false ); |
| ~SubRowItem(); |
| |
| void Write2( |
| Element & o_rOut ) const; |
| private: |
| String sText; |
| String sLink; |
| bool bIsActive; |
| bool bFirstOfRow; |
| }; |
| |
| SubRowItem::SubRowItem( const char * i_sText, |
| const char * i_sLink, |
| bool i_bActive, |
| bool i_bFirstOfRow ) |
| : sText(i_sText), |
| sLink(i_sLink), |
| bIsActive(i_bActive), |
| bFirstOfRow(i_bFirstOfRow) |
| { |
| csv_assert( NOT csv::no_str(i_sLink) ); |
| } |
| |
| SubRowItem::~SubRowItem() |
| { |
| } |
| |
| void |
| SubRowItem::Write2( Element & o_rOut ) const |
| { |
| o_rOut << new Sbr; |
| if ( NOT bFirstOfRow ) |
| o_rOut << new XmlCode( "| " ); |
| else |
| o_rOut << new XmlCode( " " ); |
| |
| if ( bIsActive ) |
| { |
| o_rOut |
| >> *new Link( sLink.c_str() ) |
| >> *new AnElement( "font" ) |
| << new AnAttribute("size","-2") |
| >> *new Bold |
| << sText.c_str(); |
| } |
| else |
| { |
| o_rOut |
| >> *new AnElement( "font" ) |
| << new AnAttribute("size","-2") |
| << sText.c_str(); |
| } |
| } |
| |
| |
| |
| //************************ SubRow ***************************// |
| |
| class SubRow |
| { |
| public: |
| SubRow( |
| const char * i_sTitle ); |
| ~SubRow(); |
| |
| void AddItem( |
| const char * i_sText, |
| const char * i_sLink, |
| bool i_bActive ); |
| void Write2( |
| Table & o_rOut ) const; |
| private: |
| typedef std::vector< DYN SubRowItem * > List_Items; |
| |
| List_Items aItemList; |
| String sTitle; |
| }; |
| |
| SubRow::SubRow( const char * i_sTitle ) |
| // : // aItemList, |
| // sTitle |
| { |
| StreamStr sUp(i_sTitle,0); |
| sUp.to_upper(); |
| sTitle = sUp.c_str(); |
| } |
| |
| SubRow::~SubRow() |
| { |
| for ( List_Items::iterator it = aItemList.begin(); |
| it != aItemList.end(); |
| ++it ) |
| { |
| delete (*it); |
| } |
| } |
| |
| inline void |
| SubRow::AddItem( const char * i_sText, |
| const char * i_sLink, |
| bool i_bActive ) |
| { |
| aItemList.push_back( new SubRowItem(i_sText, i_sLink, i_bActive, aItemList.empty()) ); |
| } |
| |
| void |
| SubRow::Write2( Table & o_rOut ) const |
| { |
| TableRow * pRow = new TableRow; |
| o_rOut << pRow; |
| |
| if (sTitle.length() > 0) |
| { |
| Element & rCell1 = pRow->AddCell(); |
| rCell1 |
| << new WidthAttr("20%") |
| >> *new AnElement( "font" ) |
| << new AnAttribute("size","-2") |
| << sTitle |
| << ":"; |
| } |
| |
| Element & rCell2 = pRow->AddCell(); |
| for ( List_Items::const_iterator it = aItemList.begin(); |
| it != aItemList.end(); |
| ++it ) |
| { |
| (*it)->Write2( rCell2 ); |
| } |
| } |
| |
| |
| } // anonymous namespace |
| |
| |
| |
| //************************* CheshireCat ***********************// |
| |
| |
| typedef std::vector< DYN SubRow * > List_SubRows; |
| |
| struct NavigationBar::CheshireCat |
| { |
| MainRow aMainRow; |
| List_SubRows aSubRows; |
| const OuputPage_Environment * |
| pEnv; |
| |
| |
| CheshireCat( |
| const OuputPage_Environment & |
| i_rEnv ); |
| ~CheshireCat(); |
| }; |
| |
| NavigationBar:: |
| CheshireCat::CheshireCat( const OuputPage_Environment & i_rEnv ) |
| : aMainRow( i_rEnv ), |
| pEnv( & i_rEnv ) |
| { |
| } |
| |
| NavigationBar:: |
| CheshireCat::~CheshireCat() |
| { |
| csv::erase_container_of_heap_ptrs( aSubRows ); |
| } |
| |
| |
| //************************ NavigationBar *******************// |
| |
| NavigationBar::NavigationBar( const OuputPage_Environment & i_rEnv, |
| E_GlobalLocation i_eLocation ) |
| : pi( new CheshireCat(i_rEnv) ) |
| { |
| switch (i_eLocation) |
| { |
| case LOC_Overview: pi->aMainRow.SetupItems_Overview(); break; |
| case LOC_AllDefs: pi->aMainRow.SetupItems_AllDefs(); break; |
| case LOC_Index: pi->aMainRow.SetupItems_Index(); break; |
| case LOC_Help: pi->aMainRow.SetupItems_Help(); break; |
| default: |
| csv_assert(false); |
| } |
| } |
| |
| NavigationBar::NavigationBar( const OuputPage_Environment & i_rEnv, |
| const ary::cpp::CodeEntity & i_rCe ) |
| : pi( new CheshireCat(i_rEnv) ) |
| { |
| pi->aMainRow.SetupItems_Ce( i_rCe ); |
| } |
| |
| NavigationBar::NavigationBar( const OuputPage_Environment & i_rEnv, |
| E_CeGatheringType i_eCeGatheringType ) |
| : pi( new CheshireCat(i_rEnv) ) |
| { |
| switch (i_eCeGatheringType) |
| { |
| case CEGT_operations: pi->aMainRow.SetupItems_FunctionGroup(); break; |
| case CEGT_data: pi->aMainRow.SetupItems_DataGroup(); break; |
| default: |
| csv_assert(false); |
| } |
| } |
| |
| NavigationBar::~NavigationBar() |
| { |
| csv::erase_container_of_heap_ptrs( pi->aSubRows ); |
| } |
| |
| void |
| NavigationBar::MakeSubRow( const char * i_sTitle ) |
| { |
| pi->aSubRows.push_back( new SubRow(i_sTitle) ); |
| } |
| |
| void |
| NavigationBar::AddItem( const char * i_sName, |
| const char * i_sLink, |
| bool i_bValid ) |
| { |
| csv_assert( pi->aSubRows.size() > 0 ); |
| StreamStr sName(i_sName, 0); |
| sName.to_upper(); |
| |
| StreamLock aSum(100); |
| pi->aSubRows.back()->AddItem( sName.c_str(), |
| aSum() << "#" << i_sLink << c_str, |
| i_bValid ); |
| } |
| |
| void |
| NavigationBar::Write( Element & o_rOut, |
| bool i_bWithSubRows ) const |
| { |
| pi->aMainRow.Write2( o_rOut ); |
| |
| const_cast< NavigationBar* >(this)->pSubRowsTable = new Table; |
| o_rOut << pSubRowsTable; |
| *pSubRowsTable |
| << new AnAttribute( "class", "navisub" ) |
| << new AnAttribute( "cellpadding", "0" ) |
| << new AnAttribute( "cellspacing", "3" ); |
| |
| if (i_bWithSubRows) |
| { |
| Write_SubRows(); |
| } |
| } |
| |
| void |
| NavigationBar::Write_SubRows() const |
| { |
| for ( List_SubRows::const_iterator it = pi->aSubRows.begin(); |
| it != pi->aSubRows.end(); |
| ++it ) |
| { |
| (*it)->Write2( *pSubRowsTable ); |
| } |
| } |