void SymbolTree::AddItem(TagNode* node) { // Get node icon index TagEntry nodeData = node->GetData(); int iconIndex = GetItemIconIndex(nodeData.GetKind(), nodeData.GetAccess()); wxString displayName(nodeData.GetDisplayName()); wxTreeItemId parentHti; if (nodeData.GetName().IsEmpty()) return; wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); if (nodeData.GetKind() == wxT("prototype")) { font.SetStyle(wxFONTSTYLE_ITALIC); } if (nodeData.GetAccess() == wxT("public")) { font.SetWeight(wxFONTWEIGHT_BOLD); } //------------------------------------------------------------------------------- // We gather globals together under special node //------------------------------------------------------------------------------- if ( (nodeData.GetParent() == wxT("<global>")) && // parent is global scope m_globalsKind.find(nodeData.GetKind()) != m_globalsKind.end() ) { //the node kind is one of function, prototype or variable if (nodeData.GetKind() == wxT("prototype")) parentHti = m_prototypesNode; else parentHti = m_globalsNode; } else parentHti = node->GetParent()->GetData().GetTreeItemId(); //--------------------------------------------------------------------------------- // Macros are gathered under the 'Macros' node //--------------------------------------------------------------------------------- if (nodeData.GetKind() == wxT("macro")) { parentHti = m_macrosNode; } //only if parent is valid, we add item to the tree wxTreeItemId hti; if (parentHti.IsOk() == false) { parentHti = GetRootItem(); } if (parentHti.IsOk()) { hti = AppendItem(parentHti, // parent displayName, // display name iconIndex, // item image index iconIndex, // selected item image new MyTreeItemData(node->GetData().GetFile(), node->GetData().GetPattern(), node->GetData().GetLine())); SetItemFont(hti, font); node->GetData().SetTreeItemId( hti ); m_sortItems[parentHti.m_pItem] = true; m_items[nodeData.Key()] = hti.m_pItem; } }
void SymbolTree::UpdateGuiItem(TagEntry& data, const wxString& key) { if (!m_tree) return; TagNode* node = m_tree->Find(key); if ( node ) { // Update the new data with the gui tree item id data.SetTreeItemId( node->GetData().GetTreeItemId() ); node->SetData(data); // Update Icon if needed int iconIndex = GetItemIconIndex(data.GetKind(), data.GetAccess()); int curIconIndex = -1; wxTreeItemId itemId = node->GetData().GetTreeItemId(); if (itemId.IsOk()) { curIconIndex = GetItemImage(itemId); if (curIconIndex != iconIndex ) { // Need to update the image as well SetItemImage(node->GetData().GetTreeItemId(), iconIndex); SetItemImage(node->GetData().GetTreeItemId(), iconIndex, wxTreeItemIcon_Selected); } // if(curIconIndex != iconIndex ) //update the linenumber and file MyTreeItemData *item_data = new MyTreeItemData(data.GetFile(), data.GetPattern()); wxTreeItemData *old_data = GetItemData(itemId); if (old_data) delete old_data; SetItemData(itemId, item_data); } } }