void wxGxTreeViewBase::OnObjectAdded(wxGxCatalogEvent& event) { wxGxObject* pGxObject = m_pCatalog->GetRegisterObject(event.GetObjectID()); if(!pGxObject) return; wxGxObject* pParentObject = pGxObject->GetParent(); wxTreeItemId ParentTreeItemId = m_TreeMap[pParentObject->GetId()]; if(ParentTreeItemId.IsOk()) { wxGxTreeItemData* pData = (wxGxTreeItemData*)GetItemData(ParentTreeItemId); if(pData != NULL) { wxGxObjectContainer* pGxObjectContainer = wxDynamicCast(pParentObject, wxGxObjectContainer); if(pGxObjectContainer->AreChildrenViewable()) { if(pData->m_bExpandedOnce) { AddTreeItem(pGxObject, ParentTreeItemId); SortChildren(ParentTreeItemId); } else { SetItemHasChildren(ParentTreeItemId, true); } } } } }
void wxGxTreeViewBase::OnObjectRefreshed(wxGxCatalogEvent& event) { wxTreeItemId TreeItemId = m_TreeMap[event.GetObjectID()]; if(TreeItemId.IsOk()) { wxGxTreeItemData* pData = (wxGxTreeItemData*)GetItemData(TreeItemId); if(pData != NULL) { if(pData->m_bExpandedOnce) { //deleted via refresh //DeleteChildren(TreeItemId); pData->m_bExpandedOnce = false; Expand(TreeItemId); } else { wxGxObject* pGxObject = m_pCatalog->GetRegisterObject(event.GetObjectID()); wxGxObjectContainer* pGxObjectContainer = dynamic_cast<wxGxObjectContainer*>(pGxObject); wxBusyCursor wait; if(pGxObjectContainer && pGxObjectContainer->HasChildren() && !ItemHasChildren(TreeItemId)) { SetItemHasChildren(TreeItemId); } } } } }
void wxTreeViewComboPopup::AddTreeItem(wxGxObject* pGxObject, wxTreeItemId hParent) { if(NULL == pGxObject) return; wxGxObjectContainer* pContainer = wxDynamicCast(pGxObject, wxGxObjectContainer); if(NULL == pContainer) return; if (m_TreeMap[pGxObject->GetId()].IsOk()) { return; } IGxObjectUI* pObjUI = dynamic_cast<IGxObjectUI*>(pGxObject); wxIcon icon; if(pObjUI != NULL) icon = pObjUI->GetSmallImage(); int pos(wxNOT_FOUND); if(icon.IsOk()) { for(size_t i = 0; i < m_IconsArray.size(); ++i) { if(m_IconsArray[i].oIcon.IsSameAs(icon)) { pos = m_IconsArray[i].iImageIndex; break; } } if(pos == wxNOT_FOUND) { pos = m_TreeImageList.Add(icon); ICONDATA myicondata = {icon, pos}; m_IconsArray.push_back(myicondata); } } else pos = 0;//0 col img, 1 - col img wxGxTreeItemData* pData = new wxGxTreeItemData(pGxObject->GetId(), pos, false); wxString sName; if(m_pCatalog->GetShowExt()) sName = pGxObject->GetName(); else sName = pGxObject->GetBaseName(); wxTreeItemId NewTreeItem = AppendItem(hParent, sName, pos, -1, pData); m_TreeMap[pGxObject->GetId()] = NewTreeItem; if(pContainer->AreChildrenViewable()) SetItemHasChildren(NewTreeItem); // SortChildren(hParent); wxTreeCtrl::Refresh(); }
void wxGxTreeViewBase::OnItemExpanding(wxTreeEvent& event) { wxTreeItemId item = event.GetItem(); if(!item.IsOk()) return; wxGxTreeItemData* pData = (wxGxTreeItemData*)GetItemData(item); if(pData != NULL) { wxGxObject* pGxObject = m_pCatalog->GetRegisterObject(pData->m_nObjectID); wxGxObjectContainer* pGxObjectContainer = wxDynamicCast(pGxObject, wxGxObjectContainer); if(pGxObjectContainer != NULL) { wxBusyCursor wait; if(pGxObjectContainer->HasChildren() && pGxObjectContainer->AreChildrenViewable()) { if(pData->m_bExpandedOnce == false) { const wxGxObjectList ObjectList = pGxObjectContainer->GetChildren(); wxGxObjectList::const_iterator iter; for (iter = ObjectList.begin(); iter != ObjectList.end(); ++iter) { wxGxObject *current = *iter; AddTreeItem(current, item);//false m_pCatalog->ObjectAdded(current->GetId()); } pData->m_bExpandedOnce = true; SetItemHasChildren(item, GetChildrenCount(item, false) > 0); SortChildren(item); return; } else return; } else { SetItemHasChildren(item, false); return; } } } SetItemHasChildren(item, false); }
// create a new tree item and insert it into the tree RegTreeCtrl::TreeNode *RegTreeCtrl::InsertNewTreeNode( TreeNode *pParent, const wxString& strName, int idImage, const wxString *pstrValue, wxRegKey::WOW64ViewMode viewMode) { // create new item & insert it TreeNode *pNewNode = new TreeNode; pNewNode->m_pTree = this; pNewNode->m_pParent = pParent; pNewNode->m_strName = strName; pNewNode->m_bKey = pstrValue == NULL; pNewNode->m_pKey = NULL; pNewNode->m_viewMode = viewMode; if (pParent) { pNewNode->m_id = AppendItem(pParent->Id(), pNewNode->IsKey() ? strName : *pstrValue, idImage); } else { pNewNode->m_id = AddRoot(strName); } wxASSERT_MSG( pNewNode->m_id, wxT("can't create tree control item!")); // save the pointer in the item SetItemData(pNewNode->m_id, pNewNode); // add it to the list of parent's children if ( pParent != NULL ) { pParent->m_aChildren.Add(pNewNode); } if ( pNewNode->IsKey() ) { SetItemHasChildren(pNewNode->Id()); if ( !pNewNode->IsRoot() ) { // set the expanded icon as well SetItemImage(pNewNode->Id(), RegImageList::OpenedKey, wxTreeItemIcon_Expanded); } } return pNewNode; }
void DirectoryTree::AddChildren(const wxTreeItemId& tid) { if(!tid.IsOk()) { wxLogDebug(wxT("DirectoryTree::AddChildren(): invalid wxTreeItemId %u"), (int) tid); return; } wxString sPath; bool bGotPath = GetItemPath(tid, sPath); if(!bGotPath) { wxLogDebug(wxT("DirectoryTree::AddChildren(): GetItemPath(%u) returned \"\""), (int) tid); return; } wxLogTrace(DIRECTORYTREE_EVENTS, wxT("AddChildren('%s')"), sPath.c_str()); DirectoryTreeItem * dti = (DirectoryTreeItem *) GetItemData(tid); if(dti->IsPopulated()) return; // Tell the tree to stop (falsely) showing the button... SetItemHasChildren(tid, false); dti->SetIsPopulated(); // Can we enter this directory? bool bCanExecute = psn.CanExecute(sPath); if(!bCanExecute) { wxLogDebug(wxT("DirectoryTree::AddChildren(): Cannot enter directory '%s'"), sPath.c_str()); return; } // Enumerate sub-directories wxLogTrace(DIRECTORYTREE_EVENTS, wxT("sPath: %s"), sPath.c_str()); DirectoryEntryArray dea(desFILENAME, 0, m_bShowHidden); dea.AddDirectories(sPath); dea.Sort(); // Add them to the tree int nCount = dea.GetCount(); for(int i = 0; i < nCount; i++) { const DirectoryEntry * dre = dea.GetItem(i); wxString sPathName = dre->GetPathName(); wxTreeItemId tidChild = AddChild(tid, sPathName); } }
void wxGxTreeView::BeginRename(long nObjectID) { if(nObjectID == wxNOT_FOUND) return; wxTreeItemId ItemId = m_TreeMap[nObjectID]; if(!ItemId.IsOk()) { SetItemHasChildren(GetSelection()); Expand(GetSelection()); ItemId = m_TreeMap[nObjectID]; } if(ItemId.IsOk()) { SelectItem(ItemId);//, false SetFocus(); m_pSelection->Select(nObjectID, true, GetId()); EditLabel(GetSelection()); } }
void wxGxTreeView::OnObjectAdded(wxGxCatalogEvent& event) { wxGxObject* pGxObject = m_pCatalog->GetRegisterObject(event.GetObjectID()); if(!pGxObject) return; wxGxObject* pParentObject = pGxObject->GetParent(); wxTreeItemId ParentTreeItemId = m_TreeMap[pParentObject->GetId()]; if(ParentTreeItemId.IsOk()) { wxGxTreeItemData* pData = (wxGxTreeItemData*)GetItemData(ParentTreeItemId); if(pData != NULL) { wxGxAutoRenamer* pGxAutoRenamer = dynamic_cast<wxGxAutoRenamer*>(pParentObject); if(pData->m_bExpandedOnce) { AddTreeItem(pGxObject, ParentTreeItemId); SortChildren(ParentTreeItemId); if(pGxAutoRenamer && pGxAutoRenamer->IsBeginRename(this, pGxObject->GetPath())) { BeginRename(pGxObject->GetId()); } } else { if(pGxAutoRenamer && pGxAutoRenamer->IsBeginRename(this, pGxObject->GetPath())) { Expand(ParentTreeItemId); AddTreeItem(pGxObject, ParentTreeItemId); SortChildren(ParentTreeItemId); BeginRename(pGxObject->GetId()); } else { SetItemHasChildren(ParentTreeItemId, true); } } } } }
wxTreeItemId DirectoryTree::AddChild(const wxTreeItemId& tidParent, const wxString& sPath) { DirectoryTreeItem * dti = new DirectoryTreeItem(sPath); wxTreeItemId tid; if(sPath == FILE_SYSTEM_ROOT) { // TBI: ASSERT tree is empty tid = AddRoot(FILE_SYSTEM_ROOT, 0, 1, dti); } else { if(!tidParent.IsOk()) { wxLogDebug(wxT("DirectoryTree::AddChild(): invalid parent wxTreeItemId %u"), (int) tidParent); return wxTreeItemId(); } #ifdef __WXMSW__ // Treat drives differently wxString sDirectory; if(sPath.Length() == 3) sDirectory = sPath; else { wxFileName fil(sPath); sDirectory = fil.GetFullName(); } #else wxFileName fil(sPath); wxString sDirectory = fil.GetFullName(); #endif // def __WXMSW__ tid = AppendItem(tidParent, sDirectory, 0, 1, dti); } // Show the '+' button SetItemHasChildren(tid, true); return tid; }
void wxGxTreeViewBase::OnObjectChanged(wxGxCatalogEvent& event) { wxTreeItemId TreeItemId = m_TreeMap[event.GetObjectID()]; if(TreeItemId.IsOk()) { wxGxTreeItemData* pData = (wxGxTreeItemData*)GetItemData(TreeItemId); if(pData != NULL) { wxGxObject* pGxObject = m_pCatalog->GetRegisterObject(pData->m_nObjectID); IGxObjectUI* pGxObjectUI = dynamic_cast<IGxObjectUI*>(pGxObject); wxGxObjectContainer* pGxObjectContainer = dynamic_cast<wxGxObjectContainer*>(pGxObject); IGxObjectTreeAttr* pGxObjectAttr = dynamic_cast<IGxObjectTreeAttr*>(pGxObject); if(pGxObjectUI != NULL) { wxString sName; if(m_pCatalog->GetShowExt()) sName = pGxObject->GetName(); else sName = pGxObject->GetBaseName(); if(pGxObjectAttr && pGxObjectAttr->ShowCount()) { sName.Append(wxString::Format(wxT(" [%d]"), pGxObjectAttr->GetCount())); } wxIcon icon = pGxObjectUI->GetSmallImage(); int pos(wxNOT_FOUND); if(icon.IsOk()) { for(size_t i = 0; i < m_IconsArray.size(); ++i) { if(m_IconsArray[i].oIcon.IsSameAs(icon)) { pos = m_IconsArray[i].iImageIndex; break; } } if(pos == wxNOT_FOUND) { pos = m_TreeImageList.Add(icon); ICONDATA myicondata = {icon, pos}; m_IconsArray.push_back(myicondata); } SetItemImage(TreeItemId, pos); //m_TreeImageList.Replace(pData->m_smallimage_index, icon); } SetItemText(TreeItemId, sName); if(pGxObjectContainer != NULL) { wxBusyCursor wait; bool bItemHasChildren = pGxObjectContainer->HasChildren(); if(ItemHasChildren(TreeItemId) && !bItemHasChildren) { CollapseAndReset(TreeItemId); pData->m_bExpandedOnce = false; UpdateGxSelection(); } SetItemHasChildren(TreeItemId, bItemHasChildren && pGxObjectContainer->AreChildrenViewable()); } if(pGxObjectAttr) { SetItemBold(TreeItemId, pGxObjectAttr->IsBold()); SetItemTextColour(TreeItemId, pGxObjectAttr->GetColor()); } //wxTreeCtrl::Refresh(); } } } }
void wxGxTreeViewBase::AddTreeItem(wxGxObject* pGxObject, wxTreeItemId hParent) { if(NULL == pGxObject) return; wxTreeItemId TreeItemId = m_TreeMap[pGxObject->GetId()]; if(TreeItemId.IsOk()) return; IGxObjectUI* pObjUI = dynamic_cast<IGxObjectUI*>(pGxObject); wxIcon icon; if(pObjUI != NULL) icon = pObjUI->GetSmallImage(); int pos(wxNOT_FOUND); if(icon.IsOk()) { for(size_t i = 0; i < m_IconsArray.size(); ++i) { if(m_IconsArray[i].oIcon.IsSameAs(icon)) { pos = m_IconsArray[i].iImageIndex; break; } } if(pos == wxNOT_FOUND) { pos = m_TreeImageList.Add(icon); ICONDATA myicondata = {icon, pos}; m_IconsArray.push_back(myicondata); } } else pos = 0;//m_ImageListSmall.Add(m_ImageListSmall.GetIcon(2));//0 col img, 1 - col img wxGxTreeItemData* pData = new wxGxTreeItemData(pGxObject->GetId(), pos, false); IGxObjectTreeAttr* pGxObjectAttr = dynamic_cast<IGxObjectTreeAttr*>(pGxObject); wxString sName; if(m_pCatalog->GetShowExt()) sName = pGxObject->GetName(); else sName = pGxObject->GetBaseName(); if(pGxObjectAttr && pGxObjectAttr->ShowCount()) { sName.Append(wxString::Format(wxT(" [%d]"), pGxObjectAttr->GetCount())); } wxTreeItemId NewTreeItem = AppendItem(hParent, sName, pos, wxNOT_FOUND, pData); m_TreeMap[pGxObject->GetId()] = NewTreeItem; wxGxObjectContainer* pContainer = wxDynamicCast(pGxObject, wxGxObjectContainer);//dynamic_cast<IGxObjectContainer*>(pGxObject); if(pContainer != NULL) { if(pContainer->AreChildrenViewable()) SetItemHasChildren(NewTreeItem); } if(pGxObjectAttr) { SetItemBold(NewTreeItem, pGxObjectAttr->IsBold()); SetItemTextColour(NewTreeItem, pGxObjectAttr->GetColor()); } //SortChildren(hParent); wxTreeCtrl::Refresh(); }
// ============================================================================ // uwTreeList - Tree // ============================================================================ void uwTreeList::AddPlaceholder( unDataTree& parent ) { if( parent.ShouldExpand() ) SetItemHasChildren( parent.GetTreeID(), true ); }