From 08887820a9eae40c5720ed3e374fcb42f60dab09 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Tue, 9 Apr 2002 22:52:07 +0000 Subject: [PATCH] hidden root works in wxGenericDirCtrl again git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15066 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/generic/dirctrlg.h | 4 ++++ src/generic/dirctrlg.cpp | 34 +++++++++++++++++++--------------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/include/wx/generic/dirctrlg.h b/include/wx/generic/dirctrlg.h index 0689956072..23ca798c5a 100644 --- a/include/wx/generic/dirctrlg.h +++ b/include/wx/generic/dirctrlg.h @@ -157,8 +157,12 @@ public: // Resize the components of the control void DoResize(); + // Collapse & expand the tree, thus re-creating it from scratch: + void ReCreateTree(); + protected: void ExpandDir(wxTreeItemId parentId); + void CollapseDir(wxTreeItemId parentId); void AddSection(const wxString& path, const wxString& name, int imageId = 0); //void FindChildFiles(wxTreeItemId id, int dirFlags, wxArrayString& filenames); diff --git a/src/generic/dirctrlg.cpp b/src/generic/dirctrlg.cpp index 8a2826f55a..94e2f41024 100644 --- a/src/generic/dirctrlg.cpp +++ b/src/generic/dirctrlg.cpp @@ -502,18 +502,13 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, Init(); - long treeStyle = wxTR_HAS_BUTTONS; + long treeStyle = wxTR_HAS_BUTTONS | wxTR_HIDE_ROOT; #ifdef __WXMSW__ if (style & wxDIRCTRL_EDITABLE) treeStyle |= wxTR_EDIT_LABELS; #endif -#ifndef __WXMSW__ - // FIXME, doesn't work for some reason - treeStyle |= wxTR_HIDE_ROOT; -#endif - if ((style & wxDIRCTRL_3D_INTERNAL) == 0) treeStyle |= wxNO_BORDER; @@ -558,7 +553,7 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, m_rootId = m_treeCtrl->AddRoot( rootName, 3, -1, rootData); m_treeCtrl->SetItemHasChildren(m_rootId); - m_treeCtrl->Expand(m_rootId); // automatically expand first level + ExpandDir(m_rootId); // automatically expand first level // Expand and select the default path if (!m_defaultPath.IsEmpty()) @@ -588,8 +583,7 @@ void wxGenericDirCtrl::ShowHidden( bool show ) m_showHidden = show; wxString path = GetPath(); - m_treeCtrl->Collapse(m_treeCtrl->GetRootItem()); - m_treeCtrl->Expand(m_treeCtrl->GetRootItem()); + ReCreateTree(); SetPath(path); } @@ -756,9 +750,14 @@ void wxGenericDirCtrl::OnExpandItem(wxTreeEvent &event) void wxGenericDirCtrl::OnCollapseItem(wxTreeEvent &event ) { - wxTreeItemId child, parent = event.GetItem(); + CollapseDir(event.GetItem()); +} + +void wxGenericDirCtrl::CollapseDir(wxTreeItemId parentId) +{ + wxTreeItemId child; - wxDirItemData *data = (wxDirItemData *) m_treeCtrl->GetItemData(event.GetItem()); + wxDirItemData *data = (wxDirItemData *) m_treeCtrl->GetItemData(parentId); if (!data->m_isExpanded) return; @@ -766,13 +765,13 @@ void wxGenericDirCtrl::OnCollapseItem(wxTreeEvent &event ) long cookie; /* Workaround because DeleteChildren has disapeared (why?) and * CollapseAndReset doesn't work as advertised (deletes parent too) */ - child = m_treeCtrl->GetFirstChild(parent, cookie); + child = m_treeCtrl->GetFirstChild(parentId, cookie); while (child.IsOk()) { m_treeCtrl->Delete(child); /* Not GetNextChild below, because the cookie mechanism can't * handle disappearing children! */ - child = m_treeCtrl->GetFirstChild(parent, cookie); + child = m_treeCtrl->GetFirstChild(parentId, cookie); } } @@ -910,6 +909,12 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) } } +void wxGenericDirCtrl::ReCreateTree() +{ + CollapseDir(m_treeCtrl->GetRootItem()); + ExpandDir(m_treeCtrl->GetRootItem()); +} + // Find the child that matches the first part of 'path'. // E.g. if a child path is "/usr" and 'path' is "/usr/include" // then the child for /usr is returned. @@ -1248,8 +1253,7 @@ void wxDirFilterListCtrl::OnSelFilter(wxCommandEvent& WXUNUSED(event)) // If the filter has changed, the view is out of date, so // collapse the tree. - m_dirCtrl->GetTreeCtrl()->Collapse(m_dirCtrl->GetRootId()); - m_dirCtrl->GetTreeCtrl()->Expand(m_dirCtrl->GetRootId()); + m_dirCtrl->ReCreateTree(); // Try to restore the selection, or at least the directory m_dirCtrl->ExpandPath(currentPath); -- 2.47.2