1*0841af79SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*0841af79SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*0841af79SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*0841af79SAndrew Rist * distributed with this work for additional information 6*0841af79SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*0841af79SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*0841af79SAndrew Rist * "License"); you may not use this file except in compliance 9*0841af79SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*0841af79SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*0841af79SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*0841af79SAndrew Rist * software distributed under the License is distributed on an 15*0841af79SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*0841af79SAndrew Rist * KIND, either express or implied. See the License for the 17*0841af79SAndrew Rist * specific language governing permissions and limitations 18*0841af79SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*0841af79SAndrew Rist *************************************************************/ 21cdf0e10cSrcweir 22cdf0e10cSrcweir #include <precomp.h> 23cdf0e10cSrcweir #include "nav_main.hxx" 24cdf0e10cSrcweir 25cdf0e10cSrcweir 26cdf0e10cSrcweir // NOT FULLY DEFINED SERVICES 27cdf0e10cSrcweir #include <cosv/tpl/tpltools.hxx> 28cdf0e10cSrcweir #include <ary/cpp/c_ce.hxx> 29cdf0e10cSrcweir #include <ary/cpp/c_gate.hxx> 30cdf0e10cSrcweir #include <ary/cpp/c_namesp.hxx> 31cdf0e10cSrcweir #include <ary/cpp/c_class.hxx> 32cdf0e10cSrcweir #include <ary/loc/loc_file.hxx> 33cdf0e10cSrcweir #include <udm/html/htmlitem.hxx> 34cdf0e10cSrcweir #include "hdimpl.hxx" 35cdf0e10cSrcweir #include "opageenv.hxx" 36cdf0e10cSrcweir #include "strconst.hxx" 37cdf0e10cSrcweir 38cdf0e10cSrcweir 39cdf0e10cSrcweir using namespace ::csi::html; 40cdf0e10cSrcweir using namespace ::csi::xml; 41cdf0e10cSrcweir 42cdf0e10cSrcweir 43cdf0e10cSrcweir const String sOverview("Overview"); 44cdf0e10cSrcweir const String sNamespace("Namespace"); 45cdf0e10cSrcweir const String sClass("Class"); 46cdf0e10cSrcweir const String sTree("Tree"); 47cdf0e10cSrcweir const String sProject("Project"); 48cdf0e10cSrcweir const String sFile("File"); 49cdf0e10cSrcweir const String sIndex("Index"); 50cdf0e10cSrcweir const String sHelp("Help"); 51cdf0e10cSrcweir 52cdf0e10cSrcweir 53cdf0e10cSrcweir 54cdf0e10cSrcweir //******************** MainItem and derived ones ***************// 55cdf0e10cSrcweir class MainItem 56cdf0e10cSrcweir { 57cdf0e10cSrcweir public: 58cdf0e10cSrcweir virtual ~MainItem() {} 59cdf0e10cSrcweir void Write2( 60cdf0e10cSrcweir TableRow & o_rOut ); 61cdf0e10cSrcweir private: 62cdf0e10cSrcweir virtual void do_Write2( 63cdf0e10cSrcweir TableRow & o_rOut ) = 0; 64cdf0e10cSrcweir }; 65cdf0e10cSrcweir 66cdf0e10cSrcweir inline void 67cdf0e10cSrcweir MainItem::Write2( TableRow & o_rOut ) 68cdf0e10cSrcweir { do_Write2(o_rOut); } 69cdf0e10cSrcweir 70cdf0e10cSrcweir 71cdf0e10cSrcweir namespace 72cdf0e10cSrcweir { 73cdf0e10cSrcweir 74cdf0e10cSrcweir class MainRowItem : public MainItem 75cdf0e10cSrcweir { 76cdf0e10cSrcweir public: 77cdf0e10cSrcweir MainRowItem( 78cdf0e10cSrcweir const String & i_sText, 79cdf0e10cSrcweir const char * i_sLink, 80cdf0e10cSrcweir const char * i_sTip ); 81cdf0e10cSrcweir ~MainRowItem(); 82cdf0e10cSrcweir private: 83cdf0e10cSrcweir enum E_Style { eSelf, eNo, eStd }; 84cdf0e10cSrcweir 85cdf0e10cSrcweir virtual void do_Write2( 86cdf0e10cSrcweir TableRow & o_rOut ); 87cdf0e10cSrcweir String sText; 88cdf0e10cSrcweir String sLink; 89cdf0e10cSrcweir String sTip; 90cdf0e10cSrcweir }; 91cdf0e10cSrcweir 92cdf0e10cSrcweir MainRowItem::MainRowItem( const String & i_sText, 93cdf0e10cSrcweir const char * i_sLink, 94cdf0e10cSrcweir const char * i_sTip ) 95cdf0e10cSrcweir : sText(i_sText), 96cdf0e10cSrcweir sLink(i_sLink), 97cdf0e10cSrcweir sTip(i_sTip) 98cdf0e10cSrcweir { 99cdf0e10cSrcweir } 100cdf0e10cSrcweir 101cdf0e10cSrcweir MainRowItem::~MainRowItem() 102cdf0e10cSrcweir { 103cdf0e10cSrcweir } 104cdf0e10cSrcweir 105cdf0e10cSrcweir void 106cdf0e10cSrcweir MainRowItem::do_Write2( TableRow & o_rOut ) 107cdf0e10cSrcweir { 108cdf0e10cSrcweir TableCell & rCell = o_rOut.AddCell(); 109cdf0e10cSrcweir 110cdf0e10cSrcweir rCell 111cdf0e10cSrcweir << new ClassAttr( "navimain" ) 112cdf0e10cSrcweir << new XmlCode(" ") 113cdf0e10cSrcweir >> *new Link(sLink.c_str()) 114cdf0e10cSrcweir << sText.c_str(); 115cdf0e10cSrcweir rCell 116cdf0e10cSrcweir << new XmlCode(" "); 117cdf0e10cSrcweir } 118cdf0e10cSrcweir 119cdf0e10cSrcweir 120cdf0e10cSrcweir class SelectedItem : public MainItem 121cdf0e10cSrcweir { 122cdf0e10cSrcweir public: 123cdf0e10cSrcweir SelectedItem( 124cdf0e10cSrcweir const String & i_sText ) 125cdf0e10cSrcweir : sText(i_sText) {} 126cdf0e10cSrcweir private: 127cdf0e10cSrcweir virtual void do_Write2( 128cdf0e10cSrcweir TableRow & o_rOut ); 129cdf0e10cSrcweir String sText; 130cdf0e10cSrcweir }; 131cdf0e10cSrcweir 132cdf0e10cSrcweir void 133cdf0e10cSrcweir SelectedItem::do_Write2( TableRow & o_rOut ) 134cdf0e10cSrcweir { 135cdf0e10cSrcweir TableCell & rCell = o_rOut.AddCell(); 136cdf0e10cSrcweir 137cdf0e10cSrcweir rCell 138cdf0e10cSrcweir << new ClassAttr( "navimainself" ) 139cdf0e10cSrcweir << new XmlCode(" ") 140cdf0e10cSrcweir << sText.c_str() 141cdf0e10cSrcweir << new XmlCode(" "); 142cdf0e10cSrcweir } 143cdf0e10cSrcweir 144cdf0e10cSrcweir class UnavailableItem : public MainItem 145cdf0e10cSrcweir { 146cdf0e10cSrcweir public: 147cdf0e10cSrcweir UnavailableItem( 148cdf0e10cSrcweir const String & i_sText ) 149cdf0e10cSrcweir : sText(i_sText) {} 150cdf0e10cSrcweir private: 151cdf0e10cSrcweir virtual void do_Write2( 152cdf0e10cSrcweir TableRow & o_rOut ); 153cdf0e10cSrcweir String sText; 154cdf0e10cSrcweir }; 155cdf0e10cSrcweir 156cdf0e10cSrcweir void 157cdf0e10cSrcweir UnavailableItem::do_Write2( TableRow & o_rOut ) 158cdf0e10cSrcweir { 159cdf0e10cSrcweir TableCell & rCell = o_rOut.AddCell(); 160cdf0e10cSrcweir 161cdf0e10cSrcweir rCell 162cdf0e10cSrcweir << new ClassAttr( "navimainnone" ) 163cdf0e10cSrcweir << new XmlCode(" ") 164cdf0e10cSrcweir << sText.c_str() 165cdf0e10cSrcweir << new XmlCode(" "); 166cdf0e10cSrcweir } 167cdf0e10cSrcweir 168cdf0e10cSrcweir } // anonymous namespace 169cdf0e10cSrcweir 170cdf0e10cSrcweir //************************ MainRow ***************************// 171cdf0e10cSrcweir 172cdf0e10cSrcweir MainRow::MainRow( const OuputPage_Environment & i_rEnv ) 173cdf0e10cSrcweir : // aItems, 174cdf0e10cSrcweir pEnv(&i_rEnv) 175cdf0e10cSrcweir { 176cdf0e10cSrcweir } 177cdf0e10cSrcweir 178cdf0e10cSrcweir MainRow::~MainRow() 179cdf0e10cSrcweir { 180cdf0e10cSrcweir csv::erase_container_of_heap_ptrs(aItems); 181cdf0e10cSrcweir } 182cdf0e10cSrcweir 183cdf0e10cSrcweir void 184cdf0e10cSrcweir MainRow::SetupItems_Overview() 185cdf0e10cSrcweir { 186cdf0e10cSrcweir Create_ItemList_Global( eSelf, eStd, eStd ); 187cdf0e10cSrcweir } 188cdf0e10cSrcweir 189cdf0e10cSrcweir void 190cdf0e10cSrcweir MainRow::SetupItems_AllDefs() 191cdf0e10cSrcweir { 192cdf0e10cSrcweir Create_ItemList_Global( eStd, eStd, eStd ); 193cdf0e10cSrcweir } 194cdf0e10cSrcweir 195cdf0e10cSrcweir void 196cdf0e10cSrcweir MainRow::SetupItems_Index() 197cdf0e10cSrcweir { 198cdf0e10cSrcweir Create_ItemList_Global( eStd, eSelf, eStd ); 199cdf0e10cSrcweir } 200cdf0e10cSrcweir 201cdf0e10cSrcweir void 202cdf0e10cSrcweir MainRow::SetupItems_Help() 203cdf0e10cSrcweir { 204cdf0e10cSrcweir Create_ItemList_Global( eStd, eStd, eSelf ); 205cdf0e10cSrcweir } 206cdf0e10cSrcweir 207cdf0e10cSrcweir void 208cdf0e10cSrcweir MainRow::SetupItems_Ce( const ary::cpp::CodeEntity & i_rCe ) 209cdf0e10cSrcweir { 210cdf0e10cSrcweir csv_assert( pEnv->CurNamespace() != 0 ); 211cdf0e10cSrcweir bool bIsNamespace = i_rCe.Id() == pEnv->CurNamespace()->Id(); 212cdf0e10cSrcweir bool bHasClass = pEnv->CurClass() != 0; 213cdf0e10cSrcweir bool bIsClass = dynamic_cast< const ary::cpp::Class * >(&i_rCe) != 0; 214cdf0e10cSrcweir 215cdf0e10cSrcweir Create_ItemList_InDirTree_Cpp( 216cdf0e10cSrcweir ( bIsNamespace ? eSelf : eStd ), 217cdf0e10cSrcweir ( bIsClass ? eSelf : bHasClass ? eStd : eNo ), 218cdf0e10cSrcweir eNo, 0 ); 219cdf0e10cSrcweir } 220cdf0e10cSrcweir 221cdf0e10cSrcweir void 222cdf0e10cSrcweir MainRow::SetupItems_FunctionGroup() 223cdf0e10cSrcweir { 224cdf0e10cSrcweir Create_ItemList_InDirTree_Cpp( 225cdf0e10cSrcweir eStd, 226cdf0e10cSrcweir (pEnv->CurClass() != 0 ? eStd : eNo), 227cdf0e10cSrcweir eNo, 0 ); 228cdf0e10cSrcweir } 229cdf0e10cSrcweir 230cdf0e10cSrcweir void 231cdf0e10cSrcweir MainRow::SetupItems_DataGroup() 232cdf0e10cSrcweir { 233cdf0e10cSrcweir SetupItems_FunctionGroup(); 234cdf0e10cSrcweir } 235cdf0e10cSrcweir 236cdf0e10cSrcweir void 237cdf0e10cSrcweir MainRow::Write2( csi::xml::Element & o_rOut ) const 238cdf0e10cSrcweir { 239cdf0e10cSrcweir Table * pTable = new Table; 240cdf0e10cSrcweir o_rOut 241cdf0e10cSrcweir >> *pTable 242cdf0e10cSrcweir << new AnAttribute( "class", "navimain" ) 243cdf0e10cSrcweir << new AnAttribute( "border", "0" ) 244cdf0e10cSrcweir << new AnAttribute( "cellpadding", "1" ) 245cdf0e10cSrcweir << new AnAttribute( "cellspacing", "0" ); 246cdf0e10cSrcweir TableRow & rRow = pTable->AddRow(); 247cdf0e10cSrcweir rRow 248cdf0e10cSrcweir << new AnAttribute( "align", "center" ) 249cdf0e10cSrcweir << new AnAttribute( "valign", "top" ); 250cdf0e10cSrcweir for ( ItemList::const_iterator it = aItems.begin(); 251cdf0e10cSrcweir it != aItems.end(); 252cdf0e10cSrcweir ++it ) 253cdf0e10cSrcweir { 254cdf0e10cSrcweir (*it)->Write2( rRow ); 255cdf0e10cSrcweir } 256cdf0e10cSrcweir } 257cdf0e10cSrcweir 258cdf0e10cSrcweir void 259cdf0e10cSrcweir MainRow::Create_ItemList_Global( E_Style i_eOverview, 260cdf0e10cSrcweir E_Style i_eIndex, 261cdf0e10cSrcweir E_Style i_eHelp ) 262cdf0e10cSrcweir { 263cdf0e10cSrcweir if ( i_eOverview == eStd ) 264cdf0e10cSrcweir { 265cdf0e10cSrcweir String sLinkOverview = ( i_eIndex == eSelf 266cdf0e10cSrcweir ? dshelp::PathPerLevelsUp( 267cdf0e10cSrcweir 1, 268cdf0e10cSrcweir C_sHFN_Overview ) 269cdf0e10cSrcweir : C_sHFN_Overview ); 270cdf0e10cSrcweir Add_Item( i_eOverview, sOverview, sLinkOverview.c_str(), "" ); 271cdf0e10cSrcweir } 272cdf0e10cSrcweir else 273cdf0e10cSrcweir { 274cdf0e10cSrcweir Add_Item( i_eOverview, sOverview, "", "" ); 275cdf0e10cSrcweir } 276cdf0e10cSrcweir 277cdf0e10cSrcweir if ( i_eIndex == eSelf ) 278cdf0e10cSrcweir Add_Item( eStd, sNamespace, "../names/index.html", "" ); 279cdf0e10cSrcweir else 280cdf0e10cSrcweir Add_Item( eStd, sNamespace, "names/index.html", "" ); 281cdf0e10cSrcweir 282cdf0e10cSrcweir Add_Item( eNo, sClass, "", "" ); 283cdf0e10cSrcweir 284cdf0e10cSrcweir if ( i_eIndex == eStd ) 285cdf0e10cSrcweir { 286cdf0e10cSrcweir Add_Item( i_eIndex, sIndex, C_sPath_Index, "" ); 287cdf0e10cSrcweir } 288cdf0e10cSrcweir else 289cdf0e10cSrcweir { 290cdf0e10cSrcweir Add_Item( i_eIndex, sIndex, "", "" ); 291cdf0e10cSrcweir } 292cdf0e10cSrcweir 293cdf0e10cSrcweir if ( i_eHelp == eStd ) 294cdf0e10cSrcweir { 295cdf0e10cSrcweir String sLinkHelp = ( i_eIndex == eSelf 296cdf0e10cSrcweir ? PathPerLevelsUp(1,C_sHFN_Help) 297cdf0e10cSrcweir : C_sHFN_Help ); 298cdf0e10cSrcweir Add_Item( i_eHelp, sHelp, sLinkHelp.c_str(), "" ); 299cdf0e10cSrcweir } 300cdf0e10cSrcweir else 301cdf0e10cSrcweir { 302cdf0e10cSrcweir Add_Item( i_eHelp, sHelp, "", "" ); 303cdf0e10cSrcweir } 304cdf0e10cSrcweir } 305cdf0e10cSrcweir 306cdf0e10cSrcweir void 307cdf0e10cSrcweir MainRow::Create_ItemList_InDirTree_Cpp( E_Style i_eNsp, 308cdf0e10cSrcweir E_Style i_eClass, 309cdf0e10cSrcweir E_Style , 310cdf0e10cSrcweir const char * ) 311cdf0e10cSrcweir { 312cdf0e10cSrcweir String 313cdf0e10cSrcweir sLinkOverview = PathPerRoot(*pEnv, C_sHFN_Overview); 314cdf0e10cSrcweir Add_Item( eStd, sOverview, sLinkOverview.c_str(), "" ); 315cdf0e10cSrcweir 316cdf0e10cSrcweir if (i_eNsp == eStd) 317cdf0e10cSrcweir { 318cdf0e10cSrcweir String sLinkNamespace = PathPerNamespace(*pEnv, "index.html"); 319cdf0e10cSrcweir Add_Item( i_eNsp, sNamespace, sLinkNamespace.c_str(), "" ); 320cdf0e10cSrcweir } 321cdf0e10cSrcweir else 322cdf0e10cSrcweir { 323cdf0e10cSrcweir Add_Item( i_eNsp, sNamespace, "", "" ); 324cdf0e10cSrcweir } 325cdf0e10cSrcweir 326cdf0e10cSrcweir if (i_eClass == eStd) 327cdf0e10cSrcweir { 328cdf0e10cSrcweir csv_assert( pEnv->CurClass() != 0 ); 329cdf0e10cSrcweir 330cdf0e10cSrcweir StreamLock sLinkClass(300); 331cdf0e10cSrcweir sLinkClass() << PathPerNamespace(*pEnv, "c-") 332cdf0e10cSrcweir << pEnv->CurClass()->LocalName() 333cdf0e10cSrcweir << ".html"; 334cdf0e10cSrcweir StreamLock sTipClass(300); 335cdf0e10cSrcweir sTipClass() << "Class " 336cdf0e10cSrcweir << pEnv->CurClass()->LocalName(); 337cdf0e10cSrcweir Add_Item( i_eClass, sClass, sLinkClass().c_str(), sTipClass().c_str() ); 338cdf0e10cSrcweir } 339cdf0e10cSrcweir else 340cdf0e10cSrcweir { 341cdf0e10cSrcweir Add_Item( i_eClass, sClass, "", "" ); 342cdf0e10cSrcweir } 343cdf0e10cSrcweir 344cdf0e10cSrcweir 345cdf0e10cSrcweir Add_Item( eStd, sIndex, PathPerRoot(*pEnv, C_sPath_Index), "" ); 346cdf0e10cSrcweir String 347cdf0e10cSrcweir sLinkHelp = PathPerRoot(*pEnv, "help.html"); 348cdf0e10cSrcweir Add_Item( eStd, sHelp, sLinkHelp.c_str(), "" ); 349cdf0e10cSrcweir } 350cdf0e10cSrcweir 351cdf0e10cSrcweir void 352cdf0e10cSrcweir MainRow::Add_Item( E_Style i_eStyle, 353cdf0e10cSrcweir const String & i_sText, 354cdf0e10cSrcweir const char * i_sLink, 355cdf0e10cSrcweir const char * i_sTip ) 356cdf0e10cSrcweir { 357cdf0e10cSrcweir switch (i_eStyle) 358cdf0e10cSrcweir { 359cdf0e10cSrcweir case eStd: aItems.push_back( new MainRowItem(i_sText, i_sLink, i_sTip) ); 360cdf0e10cSrcweir break; 361cdf0e10cSrcweir case eNo: aItems.push_back( new UnavailableItem(i_sText) ); 362cdf0e10cSrcweir break; 363cdf0e10cSrcweir case eSelf: aItems.push_back( new SelectedItem(i_sText) ); 364cdf0e10cSrcweir break; 365cdf0e10cSrcweir default: 366cdf0e10cSrcweir csv_assert(false); 367cdf0e10cSrcweir } 368cdf0e10cSrcweir } 369cdf0e10cSrcweir 370cdf0e10cSrcweir 371cdf0e10cSrcweir 372