X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a977709b11432e05af48e205cc02c0a0ad4ecf16..19e30148e18cc99296b26503c155e5cef59045f4:/src/generic/dirctrlg.cpp diff --git a/src/generic/dirctrlg.cpp b/src/generic/dirctrlg.cpp index 6084a44bd2..38c948fc2c 100644 --- a/src/generic/dirctrlg.cpp +++ b/src/generic/dirctrlg.cpp @@ -502,18 +502,10 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, Init(); - long treeStyle = wxTR_HAS_BUTTONS; -#ifdef __WXMSW__ - // VS: Do **NOT** remove this style, ever. MSW native wxTreeCtrl::EditLabel doesn't - // work without this style and we need it to be able to create new directories. - // Generic wxTreeCtrl can do it even w/o wxTR_EDIT_LABELS, so we only add it - // in case of wxMSW (as it is arguably better to not have the style enabled) - treeStyle |= wxTR_EDIT_LABELS; -#endif -#ifndef __WXMSW__ - // FIXME, doesn't work for some reason - treeStyle |= wxTR_HIDE_ROOT; -#endif + long treeStyle = wxTR_HAS_BUTTONS | wxTR_HIDE_ROOT; + + if (style & wxDIRCTRL_EDIT_LABELS) + treeStyle |= wxTR_EDIT_LABELS; if ((style & wxDIRCTRL_3D_INTERNAL) == 0) treeStyle |= wxNO_BORDER; @@ -559,7 +551,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()) @@ -589,8 +581,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); } @@ -757,9 +748,14 @@ void wxGenericDirCtrl::OnExpandItem(wxTreeEvent &event) void wxGenericDirCtrl::OnCollapseItem(wxTreeEvent &event ) { - wxTreeItemId child, parent = event.GetItem(); + CollapseDir(event.GetItem()); +} - wxDirItemData *data = (wxDirItemData *) m_treeCtrl->GetItemData(event.GetItem()); +void wxGenericDirCtrl::CollapseDir(wxTreeItemId parentId) +{ + wxTreeItemId child; + + wxDirItemData *data = (wxDirItemData *) m_treeCtrl->GetItemData(parentId); if (!data->m_isExpanded) return; @@ -767,13 +763,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); } } @@ -911,6 +907,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. @@ -1249,8 +1251,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);