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'.