void DialogDeclBrowser::AddDeclTypeToTree( declType_t type, const char *root, CPathTreeCtrl &tree ) { int i; idList<const idDecl*> decls; idPathTreeStack stack; idStr rootStr, declName; decls.SetNum( declManager->GetNumDecls( type ) ); for ( i = 0; i < decls.Num(); i++ ) { decls[i] = declManager->DeclByIndex( type, i, false ); } decls.Sort( idListDeclSortCompare ); rootStr = root; rootStr += "/"; stack.PushRoot( NULL ); for ( i = 0; i < decls.Num(); i++) { declName = rootStr + decls[i]->GetName(); declName.BackSlashesToSlashes(); declName.Strip(' '); tree.AddPathToTree( declName, GetIdFromTypeAndIndex( type, decls[i]->Index() ), stack ); } }
/* ================ CPathTreeCtrl::SearchTree Search the three using the search string. Adds the matched tree items to the result tree. Returns the number of items added to the result tree. ================ */ int CPathTreeCtrl::SearchTree( treeItemCompare_t compare, void *data, CPathTreeCtrl &result ) { idPathTreeStack stack, searchStack; HTREEITEM item, child; idStr name; int id, numItems; numItems = 0; result.DeleteAllItems(); stack.PushRoot( NULL ); item = GetRootItem(); searchStack.PushRoot( item ); id = 0; while( searchStack.Num() > 0 ) { for ( child = GetChildItem( item ); child; child = GetChildItem( child ) ) { searchStack.Push( item, GetItemText( item ) ); item = child; } name = searchStack.TopName(); name += GetItemText( item ); id = GetItemData( item ); if ( compare( data, item, name ) ) { result.AddPathToTree( name, id, stack ); numItems++; } for ( item = GetNextSiblingItem( item ); item == NULL; ) { item = GetNextSiblingItem( searchStack.TopItem() ); searchStack.Pop(); if ( searchStack.Num() <= 0 ) { return numItems; } } } return numItems; }
/* ================ DialogDeclBrowser::AddGUIsToTree ================ */ void DialogDeclBrowser::AddGUIsToTree( CPathTreeCtrl &tree ) { int i; idPathTreeStack stack; idStr scriptName; idFileList *files; files = fileSystem->ListFilesTree( "guis", ".gui", true ); stack.PushRoot( NULL ); for ( i = 0; i < files->GetNumFiles(); i++) { scriptName = files->GetFile( i ); scriptName.BackSlashesToSlashes(); scriptName.StripFileExtension(); tree.AddPathToTree( scriptName, GetIdFromTypeAndIndex( DECLTYPE_GUI, i ), stack ); } fileSystem->FreeFileList( files ); }