376dc71a2b
2008/03/28 16:01:57 rt 1.6.22.1: #i87441# Change license header to LPGL v3.
609 lines
18 KiB
C++
609 lines
18 KiB
C++
/*************************************************************************
|
|
*
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* Copyright 2008 by Sun Microsystems, Inc.
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* $RCSfile: hd_chlst.cxx,v $
|
|
* $Revision: 1.7 $
|
|
*
|
|
* This file is part of OpenOffice.org.
|
|
*
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
* only, as published by the Free Software Foundation.
|
|
*
|
|
* OpenOffice.org is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License version 3 for more details
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
* <http://www.openoffice.org/license.html>
|
|
* for a copy of the LGPLv3 License.
|
|
*
|
|
************************************************************************/
|
|
|
|
#include <precomp.h>
|
|
#include "hd_chlst.hxx"
|
|
|
|
|
|
// NOT FULLY DEFINED SERVICES
|
|
#include <ary/ceslot.hxx>
|
|
#include <ary/cpp/c_gate.hxx>
|
|
#include <ary/cpp/c_namesp.hxx>
|
|
#include <ary/cpp/c_class.hxx>
|
|
#include <ary/cpp/c_enum.hxx>
|
|
#include <ary/cpp/c_tydef.hxx>
|
|
#include <ary/cpp/c_funct.hxx>
|
|
#include <ary/cpp/c_vari.hxx>
|
|
#include <ary/cpp/c_enuval.hxx>
|
|
#include <ary/loc/loc_file.hxx>
|
|
#include <ary/loc/locp_le.hxx>
|
|
#include <ary/doc/d_oldcppdocu.hxx>
|
|
#include <ary/info/ci_attag.hxx>
|
|
#include <ary/info/ci_text.hxx>
|
|
#include <ary/info/all_dts.hxx>
|
|
#include "hd_docu.hxx"
|
|
#include "opageenv.hxx"
|
|
#include "protarea.hxx"
|
|
#include "strconst.hxx"
|
|
|
|
|
|
using namespace csi;
|
|
using html::Table;
|
|
using html::TableRow;
|
|
using html::TableCell;
|
|
using html::Font;
|
|
using html::SizeAttr;
|
|
using html::BgColorAttr;
|
|
using html::WidthAttr;
|
|
|
|
|
|
const int ixPublic = 0;
|
|
const int ixProtected = 1;
|
|
const int ixPrivate = 2;
|
|
|
|
struct ChildList_Display::S_AreaCo
|
|
{
|
|
public:
|
|
ProtectionArea aArea;
|
|
Area_Result * pResult;
|
|
|
|
S_AreaCo(
|
|
Area_Result & o_rResult,
|
|
const char * i_sLabel,
|
|
const char * i_sTitle );
|
|
S_AreaCo(
|
|
Area_Result & o_rResult,
|
|
const char * i_sLabel,
|
|
const char * i_sTitle_classes,
|
|
const char * i_sTitle_structs,
|
|
const char * i_sTitle_unions );
|
|
~S_AreaCo();
|
|
|
|
void PerformResult();
|
|
|
|
private:
|
|
csi::xml::Element & Out() { return pResult->rOut; }
|
|
};
|
|
|
|
|
|
const ary::info::DocuText &
|
|
ShortDocu( const ary::cpp::CodeEntity & i_rCe )
|
|
{
|
|
static const ary::info::DocuText
|
|
aNull_;
|
|
|
|
const ary::doc::OldCppDocu *
|
|
pInfo = dynamic_cast< const ary::doc::OldCppDocu* >( i_rCe.Docu().Data() );
|
|
if (pInfo == 0)
|
|
return aNull_;
|
|
|
|
return pInfo->Short().CText();
|
|
}
|
|
|
|
|
|
ChildList_Display::ChildList_Display( OuputPage_Environment & io_rEnv )
|
|
: HtmlDisplay_Impl( io_rEnv ),
|
|
pShortDocu_Display( new Docu_Display(io_rEnv) ),
|
|
pActiveParentClass(0),
|
|
pActiveParentEnum(0),
|
|
// pSglArea,
|
|
// aMemberAreas,
|
|
peClassesFilter(0)
|
|
{
|
|
}
|
|
|
|
ChildList_Display::ChildList_Display( OuputPage_Environment & io_rEnv,
|
|
const ary::cpp::Class & i_rClass )
|
|
: HtmlDisplay_Impl( io_rEnv ),
|
|
pShortDocu_Display( new Docu_Display(io_rEnv) ),
|
|
pActiveParentClass(&i_rClass),
|
|
pActiveParentEnum(0),
|
|
// pSglArea,
|
|
// aMemberAreas,
|
|
peClassesFilter(0)
|
|
{
|
|
}
|
|
|
|
ChildList_Display::ChildList_Display( OuputPage_Environment & io_rEnv,
|
|
const ary::cpp::Enum & i_rEnum )
|
|
: HtmlDisplay_Impl( io_rEnv ),
|
|
pShortDocu_Display( new Docu_Display(io_rEnv) ),
|
|
pActiveParentClass(0),
|
|
pActiveParentEnum(&i_rEnum),
|
|
// pSglArea,
|
|
// aMemberAreas,
|
|
peClassesFilter(0)
|
|
{
|
|
}
|
|
|
|
ChildList_Display::~ChildList_Display()
|
|
{
|
|
}
|
|
|
|
void
|
|
ChildList_Display::Run_Simple( Area_Result & o_rResult,
|
|
ary::SlotAccessId i_nSlot,
|
|
const char * i_sListLabel,
|
|
const char * i_sListTitle )
|
|
{
|
|
ary::Slot_AutoPtr
|
|
pSlot( ActiveParent().Create_Slot( i_nSlot ) );
|
|
if ( pSlot->Size() == 0 )
|
|
return;
|
|
|
|
pSglArea = new S_AreaCo( o_rResult,
|
|
i_sListLabel,
|
|
i_sListTitle );
|
|
|
|
pSlot->StoreAt(*this);
|
|
|
|
pSglArea->PerformResult();
|
|
pSglArea = 0;
|
|
}
|
|
|
|
void
|
|
ChildList_Display::Run_GlobalClasses( Area_Result & o_rResult,
|
|
ary::SlotAccessId i_nSlot,
|
|
const char * i_sListLabel,
|
|
const char * i_sListTitle,
|
|
ary::cpp::E_ClassKey i_eFilter )
|
|
{
|
|
ary::Slot_AutoPtr
|
|
pSlot( ActiveParent().Create_Slot( i_nSlot ) );
|
|
if ( pSlot->Size() == 0 )
|
|
return;
|
|
|
|
pSglArea = new S_AreaCo( o_rResult,
|
|
i_sListLabel,
|
|
i_sListTitle );
|
|
|
|
SetClassesFilter(i_eFilter);
|
|
pSlot->StoreAt(*this);
|
|
UnsetClassesFilter();
|
|
|
|
pSglArea->PerformResult();
|
|
pSglArea = 0;
|
|
}
|
|
|
|
void
|
|
ChildList_Display::Run_Members( Area_Result & o_rResult_public,
|
|
Area_Result & o_rResult_protected,
|
|
Area_Result & o_rResult_private,
|
|
ary::SlotAccessId i_nSlot,
|
|
const char * i_sListLabel_public,
|
|
const char * i_sListLabel_protected,
|
|
const char * i_sListLabel_private,
|
|
const char * i_sListTitle )
|
|
{
|
|
ary::Slot_AutoPtr
|
|
pSlot( ActiveParent().Create_Slot(i_nSlot) );
|
|
if ( pSlot->Size() == 0 )
|
|
return;
|
|
|
|
aMemberAreas[ixPublic] = new S_AreaCo( o_rResult_public,
|
|
i_sListLabel_public,
|
|
i_sListTitle );
|
|
aMemberAreas[ixProtected] = new S_AreaCo( o_rResult_protected,
|
|
i_sListLabel_protected,
|
|
i_sListTitle );
|
|
aMemberAreas[ixPrivate] = new S_AreaCo( o_rResult_private,
|
|
i_sListLabel_private,
|
|
i_sListTitle );
|
|
|
|
pSlot->StoreAt(*this);
|
|
|
|
aMemberAreas[ixPublic]->PerformResult();
|
|
aMemberAreas[ixProtected]->PerformResult();
|
|
aMemberAreas[ixPrivate]->PerformResult();
|
|
|
|
aMemberAreas[ixPublic] = 0;
|
|
aMemberAreas[ixProtected] = 0;
|
|
aMemberAreas[ixPrivate] = 0;
|
|
}
|
|
|
|
void
|
|
ChildList_Display::Run_MemberClasses( Area_Result & o_rResult_public,
|
|
Area_Result & o_rResult_protected,
|
|
Area_Result & o_rResult_private,
|
|
ary::SlotAccessId i_nSlot,
|
|
const char * i_sListLabel_public,
|
|
const char * i_sListLabel_protected,
|
|
const char * i_sListLabel_private,
|
|
const char * i_sListTitle,
|
|
ary::cpp::E_ClassKey i_eFilter )
|
|
{
|
|
ary::Slot_AutoPtr
|
|
pSlot( ActiveParent().Create_Slot(i_nSlot) );
|
|
if ( pSlot->Size() == 0 )
|
|
return;
|
|
|
|
aMemberAreas[ixPublic] = new S_AreaCo( o_rResult_public,
|
|
i_sListLabel_public,
|
|
i_sListTitle );
|
|
aMemberAreas[ixProtected] = new S_AreaCo( o_rResult_protected,
|
|
i_sListLabel_protected,
|
|
i_sListTitle );
|
|
aMemberAreas[ixPrivate] = new S_AreaCo( o_rResult_private,
|
|
i_sListLabel_private,
|
|
i_sListTitle );
|
|
|
|
SetClassesFilter(i_eFilter);
|
|
pSlot->StoreAt(*this);
|
|
UnsetClassesFilter();
|
|
|
|
aMemberAreas[ixPublic]->PerformResult();
|
|
aMemberAreas[ixProtected]->PerformResult();
|
|
aMemberAreas[ixPrivate]->PerformResult();
|
|
|
|
aMemberAreas[ixPublic] = 0;
|
|
aMemberAreas[ixProtected] = 0;
|
|
aMemberAreas[ixPrivate] = 0;
|
|
}
|
|
|
|
void
|
|
ChildList_Display::do_Process( const ary::cpp::Namespace & i_rData )
|
|
{
|
|
Write_ListItem( i_rData.LocalName(),
|
|
Path2ChildNamespace(i_rData.LocalName()),
|
|
ShortDocu( i_rData ),
|
|
GetArea().GetTable() );
|
|
}
|
|
|
|
void
|
|
ChildList_Display::do_Process( const ary::cpp::Class & i_rData )
|
|
{
|
|
if ( Ce_IsInternal(i_rData) )
|
|
return;
|
|
|
|
if (peClassesFilter)
|
|
{
|
|
if (*peClassesFilter != i_rData.ClassKey() )
|
|
return;
|
|
}
|
|
|
|
String sLink;
|
|
if ( i_rData.Protection() == ary::cpp::PROTECT_global )
|
|
{
|
|
sLink = ClassFileName(i_rData.LocalName());
|
|
|
|
}
|
|
else
|
|
{
|
|
csv_assert( pActiveParentClass != 0 );
|
|
sLink = Path2Child( ClassFileName(i_rData.LocalName()), pActiveParentClass->LocalName() );
|
|
}
|
|
|
|
if (peClassesFilter)
|
|
{
|
|
Write_ListItem( i_rData.LocalName(),
|
|
sLink,
|
|
ShortDocu( i_rData ),
|
|
GetArea(i_rData.Protection())
|
|
.GetTable() );
|
|
}
|
|
else
|
|
{
|
|
Write_ListItem( i_rData.LocalName(),
|
|
sLink,
|
|
ShortDocu( i_rData ),
|
|
GetArea(i_rData.Protection())
|
|
.GetTable(i_rData.ClassKey()) );
|
|
}
|
|
}
|
|
|
|
void
|
|
ChildList_Display::do_Process( const ary::cpp::Enum & i_rData )
|
|
{
|
|
if ( Ce_IsInternal(i_rData) )
|
|
return;
|
|
|
|
String sLink;
|
|
if ( i_rData.Protection() == ary::cpp::PROTECT_global )
|
|
{
|
|
sLink = EnumFileName(i_rData.LocalName());
|
|
}
|
|
else
|
|
{
|
|
csv_assert( pActiveParentClass != 0 );
|
|
sLink = Path2Child( EnumFileName(i_rData.LocalName()),
|
|
pActiveParentClass->LocalName() );
|
|
}
|
|
|
|
Write_ListItem( i_rData.LocalName(),
|
|
sLink,
|
|
ShortDocu( i_rData ),
|
|
GetArea(i_rData.Protection()).GetTable() );
|
|
}
|
|
|
|
void
|
|
ChildList_Display::do_Process( const ary::cpp::Typedef & i_rData )
|
|
{
|
|
if ( Ce_IsInternal(i_rData) )
|
|
return;
|
|
|
|
String sLink;
|
|
if ( i_rData.Protection() == ary::cpp::PROTECT_global )
|
|
{
|
|
sLink = TypedefFileName(i_rData.LocalName());
|
|
}
|
|
else
|
|
{
|
|
csv_assert( pActiveParentClass != 0 );
|
|
sLink = Path2Child( TypedefFileName(i_rData.LocalName()),
|
|
pActiveParentClass->LocalName() );
|
|
}
|
|
|
|
Write_ListItem( i_rData.LocalName(),
|
|
sLink,
|
|
ShortDocu( i_rData ),
|
|
GetArea(i_rData.Protection()).GetTable() );
|
|
}
|
|
|
|
void
|
|
ChildList_Display::do_Process( const ary::cpp::Function & i_rData )
|
|
{
|
|
if ( Ce_IsInternal(i_rData) )
|
|
return;
|
|
|
|
String sLinkPrePath;
|
|
if ( i_rData.Protection() == ary::cpp::PROTECT_global )
|
|
{
|
|
const ary::loc::File &
|
|
rFile = Env().Gate().Locations().Find_File( i_rData.Location() );
|
|
sLinkPrePath = HtmlFileName( "o-", rFile.LocalName() );
|
|
}
|
|
else
|
|
{
|
|
csv_assert( pActiveParentClass != 0 );
|
|
sLinkPrePath = Path2Child( HtmlFileName( "o", "" ),
|
|
pActiveParentClass->LocalName() );
|
|
}
|
|
|
|
// Out
|
|
Table & rOut = GetArea(i_rData.Protection()).GetTable();
|
|
TableRow * dpRow = new TableRow;
|
|
rOut << dpRow;
|
|
TableCell & rCell1 = dpRow->AddCell();
|
|
|
|
rCell1
|
|
<< SyntaxText_PreName( i_rData, Env().Gate() )
|
|
<< new html::LineBreak;
|
|
rCell1
|
|
>> *new html::Link( OperationLink(
|
|
Env().Gate(),
|
|
i_rData.LocalName(),
|
|
i_rData.CeId(),
|
|
sLinkPrePath) )
|
|
<< i_rData.LocalName();
|
|
rCell1
|
|
<< SyntaxText_PostName( i_rData, Env().Gate() );
|
|
TableCell &
|
|
rCell2 = dpRow->AddCell();
|
|
rCell2
|
|
<< new WidthAttr("50%")
|
|
<< " ";
|
|
|
|
pShortDocu_Display->Assign_Out( rCell2 );
|
|
ShortDocu( i_rData ).StoreAt( *pShortDocu_Display );
|
|
pShortDocu_Display->Unassign_Out();
|
|
}
|
|
|
|
void
|
|
ChildList_Display::do_Process( const ary::cpp::Variable & i_rData )
|
|
{
|
|
if ( Ce_IsInternal(i_rData) )
|
|
return;
|
|
|
|
String sLinkPrePath;
|
|
if ( i_rData.Protection() == ary::cpp::PROTECT_global )
|
|
{
|
|
const ary::loc::File &
|
|
rFile = Env().Gate().Locations().Find_File( i_rData.Location() );
|
|
sLinkPrePath = HtmlFileName( "d-", rFile.LocalName() );
|
|
}
|
|
else
|
|
{
|
|
csv_assert( pActiveParentClass != 0 );
|
|
sLinkPrePath = Path2Child( HtmlFileName( "d", "" ),
|
|
pActiveParentClass->LocalName() );
|
|
}
|
|
|
|
TableRow * dpRow = new TableRow;
|
|
GetArea(i_rData.Protection()).GetTable() << dpRow;
|
|
|
|
*dpRow << new html::BgColorAttr("white");
|
|
csi::xml::Element &
|
|
rCell1 = dpRow->AddCell();
|
|
|
|
dshelp::Get_LinkedTypeText( rCell1, Env(), i_rData.Type() );
|
|
rCell1
|
|
<< " "
|
|
>> *new html::Link( DataLink(i_rData.LocalName(), sLinkPrePath.c_str()) )
|
|
>> *new html::Strong
|
|
<< i_rData.LocalName()
|
|
<< ";";
|
|
|
|
TableCell & rShortDocu = dpRow->AddCell();
|
|
pShortDocu_Display->Assign_Out( rShortDocu );
|
|
ShortDocu( i_rData ).StoreAt( *pShortDocu_Display );
|
|
pShortDocu_Display->Unassign_Out();
|
|
}
|
|
|
|
void
|
|
ChildList_Display::do_Process( const ary::cpp::EnumValue & i_rData )
|
|
{
|
|
if ( Ce_IsInternal(i_rData) )
|
|
return;
|
|
|
|
Table & rOut = GetArea().GetTable();
|
|
|
|
TableRow * dpRow = new TableRow;
|
|
rOut << dpRow;
|
|
|
|
*dpRow << new html::BgColorAttr("white");
|
|
dpRow->AddCell()
|
|
<< new WidthAttr("20%")
|
|
<< new xml::AnAttribute("valign", "top")
|
|
>> *new html::Label(i_rData.LocalName())
|
|
>> *new html::Bold
|
|
<< i_rData.LocalName();
|
|
|
|
TableCell & rValueDocu = dpRow->AddCell();
|
|
pShortDocu_Display->Assign_Out( rValueDocu );
|
|
i_rData.Docu().Accept( *pShortDocu_Display );
|
|
pShortDocu_Display->Unassign_Out();
|
|
}
|
|
|
|
void
|
|
ChildList_Display::do_StartSlot()
|
|
{
|
|
}
|
|
|
|
void
|
|
ChildList_Display::do_FinishSlot()
|
|
{
|
|
}
|
|
|
|
const ary::cpp::Gate *
|
|
ChildList_Display::inq_Get_ReFinder() const
|
|
{
|
|
return & Env().Gate();
|
|
}
|
|
|
|
void
|
|
ChildList_Display::Write_ListItem( const String & i_sLeftText,
|
|
const char * i_sLink,
|
|
const ary::info::DocuText & i_rRightText,
|
|
csi::xml::Element & o_rOut )
|
|
{
|
|
TableRow * dpRow = new TableRow;
|
|
o_rOut << dpRow;
|
|
|
|
*dpRow << new html::BgColorAttr("white");
|
|
dpRow->AddCell()
|
|
<< new WidthAttr("20%")
|
|
>> *new html::Link( i_sLink )
|
|
>> *new html::Bold
|
|
<< i_sLeftText;
|
|
|
|
TableCell & rShortDocu = dpRow->AddCell();
|
|
pShortDocu_Display->Assign_Out( rShortDocu );
|
|
i_rRightText.StoreAt( *pShortDocu_Display );
|
|
pShortDocu_Display->Unassign_Out();
|
|
}
|
|
|
|
const ary::AryGroup &
|
|
ChildList_Display::ActiveParent()
|
|
{
|
|
return pActiveParentClass != 0
|
|
? static_cast< const ary::AryGroup& >(*pActiveParentClass)
|
|
: pActiveParentEnum != 0
|
|
? static_cast< const ary::AryGroup& >(*pActiveParentEnum)
|
|
: static_cast< const ary::AryGroup& >(*Env().CurNamespace());
|
|
}
|
|
|
|
ProtectionArea &
|
|
ChildList_Display::GetArea()
|
|
{
|
|
return pSglArea->aArea;
|
|
}
|
|
|
|
ProtectionArea &
|
|
ChildList_Display::GetArea( ary::cpp::E_Protection i_eProtection )
|
|
{
|
|
switch ( i_eProtection )
|
|
{
|
|
case ary::cpp::PROTECT_public:
|
|
return aMemberAreas[ixPublic]->aArea;
|
|
case ary::cpp::PROTECT_protected:
|
|
return aMemberAreas[ixProtected]->aArea;
|
|
case ary::cpp::PROTECT_private:
|
|
return aMemberAreas[ixPrivate]->aArea;
|
|
default:
|
|
return pSglArea->aArea;
|
|
}
|
|
}
|
|
|
|
|
|
//******************* ********************//
|
|
|
|
ChildList_Display::
|
|
S_AreaCo::S_AreaCo( Area_Result & o_rResult,
|
|
const char * i_sLabel,
|
|
const char * i_sTitle )
|
|
: aArea(i_sLabel, i_sTitle),
|
|
pResult(&o_rResult)
|
|
{
|
|
}
|
|
|
|
ChildList_Display::
|
|
S_AreaCo::S_AreaCo( Area_Result & o_rResult,
|
|
const char * i_sLabel,
|
|
const char * i_sTitle_classes,
|
|
const char * i_sTitle_structs,
|
|
const char * i_sTitle_unions )
|
|
: aArea(i_sLabel, i_sTitle_classes, i_sTitle_structs, i_sTitle_unions ),
|
|
pResult(&o_rResult)
|
|
{
|
|
}
|
|
|
|
ChildList_Display::
|
|
S_AreaCo::~S_AreaCo()
|
|
{
|
|
}
|
|
|
|
void
|
|
ChildList_Display::
|
|
S_AreaCo::PerformResult()
|
|
{
|
|
bool bUsed = aArea.WasUsed_Area();
|
|
pResult->rChildrenExist = bUsed;
|
|
if ( bUsed )
|
|
{
|
|
Create_ChildListLabel( Out(), aArea.Label() );
|
|
|
|
if ( aArea.Size() == 1 )
|
|
{
|
|
Out() << aArea.ReleaseTable();
|
|
}
|
|
else
|
|
{
|
|
Table * pTable = aArea.ReleaseTable( ary::cpp::CK_class );
|
|
if (pTable != 0)
|
|
Out() << pTable;
|
|
pTable = aArea.ReleaseTable( ary::cpp::CK_struct );
|
|
if (pTable != 0)
|
|
Out() << pTable;
|
|
pTable = aArea.ReleaseTable( ary::cpp::CK_union );
|
|
if (pTable != 0)
|
|
Out() << pTable;
|
|
}
|
|
}
|
|
}
|