wxWidgets/utils/framelayout/samples/demo/wxinfo.cpp
J. Russell Smyth 21677c36c9 Removed Persistance Framework code/files from FrameLayout
Corrected makefiles to match


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2046 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
1999-04-05 23:55:42 +00:00

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 );
}