21677c36c9
Corrected makefiles to match git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2046 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
139 lines
2.7 KiB
C++
139 lines
2.7 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: No names yet.
|
|
// Purpose: Contrib. demo
|
|
// Author: Aleksandras Gluchovas
|
|
// Modified by:
|
|
// Created: 23/11/98
|
|
// RCS-ID: $Id$
|
|
// Copyright: 1998 (c) Aleksandras Gluchovas
|
|
// Licence: wxWindows license
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifdef __GNUG__
|
|
#pragma implementation "wxinifo.cpp"
|
|
#pragma interface "wxinifo.cpp"
|
|
#endif
|
|
|
|
// For compilers that support precompilation, includes "wx/wx.h".
|
|
#include "wx/wxprec.h"
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/wx.h"
|
|
#endif
|
|
|
|
#include "wx/hash.h"
|
|
#include "wxinfo.h"
|
|
|
|
inline static void expand_item( wxTreeCtrl* pTree, wxTreeItemId& itemId )
|
|
{
|
|
pTree->Expand( itemId );
|
|
}
|
|
|
|
void wxCreateClassInfoTree( wxTreeCtrl* pTree,
|
|
wxTreeItemId parentBranchId,
|
|
long classImageNo
|
|
)
|
|
{
|
|
expand_item( pTree, parentBranchId );
|
|
|
|
wxHashTable hash;
|
|
|
|
wxList lst;
|
|
|
|
// collect all classes into list
|
|
|
|
{
|
|
wxClassInfo* pCur = wxClassInfo::GetFirst();
|
|
|
|
wxClassInfo::InitializeClasses();
|
|
|
|
while( pCur )
|
|
{
|
|
lst.Append( (wxObject*)pCur );
|
|
|
|
pCur = pCur->GetNext();
|
|
}
|
|
}
|
|
|
|
wxClassInfo::InitializeClasses();
|
|
|
|
// reflect class-hierarchy into the tree nodes
|
|
|
|
int nHanged;
|
|
|
|
do
|
|
{
|
|
nHanged = 0;
|
|
|
|
wxNode* pCur = lst.First();
|
|
|
|
// repeat passes through class list, untill all of
|
|
// the class items are "hanged" onto their parent-items in the tree
|
|
|
|
while( pCur )
|
|
{
|
|
wxClassInfo& info = *((wxClassInfo*)pCur->Data());
|
|
|
|
if ( info.GetBaseClass1() == NULL )
|
|
{
|
|
// parentless classes are put into the root branch
|
|
|
|
wxTreeItemId* pId = new wxTreeItemId();
|
|
*pId = pTree->AppendItem( parentBranchId, info.GetClassName(), classImageNo );
|
|
|
|
expand_item( pTree, *pId );
|
|
|
|
// "remember" it
|
|
hash.Put( long(&info), (wxObject*)pId );
|
|
|
|
// class is "hanged", remove it from the list
|
|
wxNode* pTmp = pCur;
|
|
|
|
pCur = pCur->Next();
|
|
|
|
delete pTmp;
|
|
|
|
++nHanged;
|
|
}
|
|
else
|
|
{
|
|
wxTreeItemId* pParentId = (wxTreeItemId*)hash.Get( (long)info.GetBaseClass1() );
|
|
|
|
if ( pParentId != NULL )
|
|
{
|
|
wxTreeItemId* pId = new wxTreeItemId();
|
|
|
|
*pId = pTree->AppendItem( *pParentId, info.GetClassName(), classImageNo );
|
|
|
|
expand_item( pTree, *pId );
|
|
|
|
hash.Put( long(&info), (wxObject*)pId );
|
|
|
|
wxNode* pTmp = pCur;
|
|
|
|
pCur = pCur->Next();
|
|
|
|
// class is "hanged", remove it from the list
|
|
delete pTmp;
|
|
|
|
++nHanged;
|
|
}
|
|
else
|
|
{
|
|
// otherwise there's a parent, but it's not in the tree yet...
|
|
// hope to "hang" it in the subsequent passes
|
|
|
|
pCur = pCur->Next();
|
|
}
|
|
}
|
|
}
|
|
|
|
} while( nHanged != 0 );
|
|
}
|
|
|
|
|