" "};
-#define wxID_TREECTRL 7000
-#define wxID_FILTERLISTCTRL 7001
-
#if defined(__DOS__)
bool wxIsDriveAvailable(const wxString& dirName)
Init();
- long treeStyle = wxTR_HAS_BUTTONS ; // | wxTR_EDIT_LABELS ;
+ long treeStyle = wxTR_HAS_BUTTONS | wxTR_HIDE_ROOT;
-#ifndef __WXMSW__
- treeStyle |= wxTR_HIDE_ROOT;
-#endif
+ if (style & wxDIRCTRL_EDIT_LABELS)
+ treeStyle |= wxTR_EDIT_LABELS;
if ((style & wxDIRCTRL_3D_INTERNAL) == 0)
treeStyle |= wxNO_BORDER;
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())
m_showHidden = show;
wxString path = GetPath();
- m_treeCtrl->Collapse(m_treeCtrl->GetRootItem());
- m_treeCtrl->Expand(m_treeCtrl->GetRootItem());
+ ReCreateTree();
SetPath(path);
}
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;
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);
}
}
}
}
+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.
wxSize filterSz ;
if (m_filterListCtrl)
{
+#ifdef __WXMSW__
+ // For some reason, this is required in order for the
+ // correct control height to always be returned, rather
+ // than the drop-down list height which is sometimes returned.
+ wxSize oldSize = m_filterListCtrl->GetSize();
+ m_filterListCtrl->SetSize(-1, -1, oldSize.x+10, -1, wxSIZE_USE_EXISTING);
+ m_filterListCtrl->SetSize(-1, -1, oldSize.x, -1, wxSIZE_USE_EXISTING);
+#endif
filterSz = m_filterListCtrl->GetSize();
sz.y -= (filterSz.y + verticalSpacing);
}
// 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);