From: Julian Smart Date: Thu, 31 Mar 2005 19:04:03 +0000 (+0000) Subject: Applied patch [ 1174270 ] small fixes to wxGenericDirCtrl X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/c06dde42fe5dc8c97d0a6dbf1d6e590b198e8fbb Applied patch [ 1174270 ] small fixes to wxGenericDirCtrl Stas Sergeev: 1. CollapseDir() was forgetting to... hrmm, to collapse the dir... It was only removing the child elements, leaving the dir expanded. Missing code added. 2. ReCreateTree(), which, according to the comments, must collapse and re-open the tree, was not re-opening it. Fixed. 3. For those who used the bogus ReCreateTree() behaviour to collapse the tree, I added CollapseTree(). This does visually what the ReCreateTree() wrongly did before the patch. 4. Documentation is updated accordingly. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33223 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/latex/wx/dirctrl.tex b/docs/latex/wx/dirctrl.tex index 950b5c3ef9..9bbd61e576 100644 --- a/docs/latex/wx/dirctrl.tex +++ b/docs/latex/wx/dirctrl.tex @@ -89,6 +89,12 @@ Create function for two-step construction. See \helpref{wxGenericDirCtrl::wxGene Initializes variables. +\membersection{wxGenericDirCtrl::CollapseTree}\label{wxgenericdirctrlcollapsetree} + +\func{void}{CollapseTree}{\void} + +Collapses the entire tree. + \membersection{wxGenericDirCtrl::ExpandPath}\label{wxgenericdirctrlexpandpath} \func{bool}{ExpandPath}{\param{const wxString\& }{path}} @@ -145,6 +151,13 @@ Returns the root id for the tree control. Returns a pointer to the tree control. +\membersection{wxGenericDirCtrl::ReCreateTree}\label{wxgenericdirctrlrecreatetree} + +\func{void}{ReCreateTree}{\void} + +Collapse and expand the tree, thus re-creating it from scratch. +May be used to update the displayed directory content. + \membersection{wxGenericDirCtrl::SetDefaultPath}\label{wxgenericdirctrlsetdefaultpath} \func{void}{SetDefaultPath}{\param{const wxString\& }{path}} diff --git a/include/wx/generic/dirctrlg.h b/include/wx/generic/dirctrlg.h index 66cd52bc62..e554f38182 100644 --- a/include/wx/generic/dirctrlg.h +++ b/include/wx/generic/dirctrlg.h @@ -168,7 +168,11 @@ public: // Collapse & expand the tree, thus re-creating it from scratch: virtual void ReCreateTree(); + // Collapse the entire tree + virtual void CollapseTree(); + protected: + virtual void ExpandRoot(); virtual void ExpandDir(wxTreeItemId parentId); virtual void CollapseDir(wxTreeItemId parentId); virtual const wxTreeItemId AddSection(const wxString& path, const wxString& name, int imageId = 0); diff --git a/src/generic/dirctrlg.cpp b/src/generic/dirctrlg.cpp index ff84d56790..d792d8e4d2 100644 --- a/src/generic/dirctrlg.cpp +++ b/src/generic/dirctrlg.cpp @@ -487,6 +487,26 @@ wxGenericDirCtrl::wxGenericDirCtrl(void) Init(); } +void wxGenericDirCtrl::ExpandRoot() +{ + ExpandDir(m_rootId); // automatically expand first level + + // Expand and select the default path + if (!m_defaultPath.empty()) + { + ExpandPath(m_defaultPath); + } +#ifdef __UNIX__ + else + { + // On Unix, there's only one node under the (hidden) root node. It + // represents the / path, so the user would always have to expand it; + // let's do it ourselves + ExpandPath( wxT("/") ); + } +#endif +} + bool wxGenericDirCtrl::Create(wxWindow *parent, const wxWindowID id, const wxString& dir, @@ -560,22 +580,8 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, m_rootId = m_treeCtrl->AddRoot( rootName, 3, -1, rootData); m_treeCtrl->SetItemHasChildren(m_rootId); - ExpandDir(m_rootId); // automatically expand first level - // Expand and select the default path - if (!m_defaultPath.empty()) - { - ExpandPath(m_defaultPath); - } -#ifdef __UNIX__ - else - { - // On Unix, there's only one node under the (hidden) root node. It - // represents the / path, so the user would always have to expand it; - // let's do it ourselves - ExpandPath( wxT("/") ); - } -#endif + ExpandRoot(); SetBestSize(size); DoResize(); @@ -740,6 +746,8 @@ void wxGenericDirCtrl::CollapseDir(wxTreeItemId parentId) * handle disappearing children! */ child = m_treeCtrl->GetFirstChild(parentId, cookie); } + if (parentId != m_treeCtrl->GetRootItem()) + m_treeCtrl->Collapse(parentId); } void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) @@ -894,7 +902,18 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) void wxGenericDirCtrl::ReCreateTree() { CollapseDir(m_treeCtrl->GetRootItem()); - ExpandDir(m_treeCtrl->GetRootItem()); + ExpandRoot(); +} + +void wxGenericDirCtrl::CollapseTree() +{ + wxTreeItemIdValue cookie; + wxTreeItemId child = m_treeCtrl->GetFirstChild(m_rootId, cookie); + while (child.IsOk()) + { + CollapseDir(child); + child = m_treeCtrl->GetNextChild(m_rootId, cookie); + } } // Find the child that matches the first part of 'path'.