X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/82c1f2a390cfba80a1942e763efd14de512e76e7..8add533eb22ba0756f5b426f77ee593bc1aa6fcd:/src/generic/dirctrlg.cpp diff --git a/src/generic/dirctrlg.cpp b/src/generic/dirctrlg.cpp index 9b12eb10d1..3394172477 100644 --- a/src/generic/dirctrlg.cpp +++ b/src/generic/dirctrlg.cpp @@ -57,6 +57,7 @@ #ifdef __WXMSW__ #include +#include "wx/msw/winundef.h" // FIXME - Mingw32 1.0 has both _getdrive() and _chdrive(). For now, let's assume // older releases don't, but it should be verified and the checks modified @@ -486,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, @@ -503,8 +524,14 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, Init(); - long treeStyle = wxTR_HAS_BUTTONS | wxTR_HIDE_ROOT; - + long treeStyle = wxTR_HAS_BUTTONS; + + // On Windows CE, if you hide the root, you get a crash when + // attempting to access data for children of the root item. +#ifndef __WXWINCE__ + treeStyle |= wxTR_HIDE_ROOT; +#endif + #ifdef __WXGTK20__ treeStyle |= wxTR_NO_LINES; #endif @@ -532,6 +559,13 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, m_defaultPath = dir; m_filter = filter; + if (m_filter.empty()) +#ifdef __UNIX__ + m_filter = wxT("*"); +#else + m_filter = wxT("*.*"); +#endif + SetFilterIndex(defaultFilter); if (m_filterListCtrl) @@ -552,22 +586,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(); @@ -732,6 +752,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) @@ -755,7 +777,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) wxString dirName(data->m_path); -#if defined(__WINDOWS__) || defined(__DOS__) || defined(__OS2__) +#if (defined(__WINDOWS__) && !defined(__WXWINCE__)) || defined(__DOS__) || defined(__OS2__) // Check if this is a root directory and if so, // whether the drive is avaiable. if (!wxIsDriveAvailable(dirName)) @@ -819,7 +841,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) while(strTok.HasMoreTokens()) { curFilter = strTok.GetNextToken(); - if (d.GetFirst(& eachFilename, m_currentFilterStr, style)) + if (d.GetFirst(& eachFilename, curFilter, style)) { do { @@ -886,7 +908,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'. @@ -1089,7 +1122,11 @@ void wxGenericDirCtrl::SetFilterIndex(int n) if (ExtractWildcard(m_filter, n, f, d)) m_currentFilterStr = f; else +#ifdef __UNIX__ + m_currentFilterStr = wxT("*"); +#else m_currentFilterStr = wxT("*.*"); +#endif } void wxGenericDirCtrl::SetFilter(const wxString& filter) @@ -1100,7 +1137,11 @@ void wxGenericDirCtrl::SetFilter(const wxString& filter) if (ExtractWildcard(m_filter, m_currentFilter, f, d)) m_currentFilterStr = f; else +#ifdef __UNIX__ + m_currentFilterStr = wxT("*"); +#else m_currentFilterStr = wxT("*.*"); +#endif } // Extract description and actual filter from overall filter string @@ -1253,6 +1294,7 @@ void wxDirFilterListCtrl::FillFilterList(const wxString& filter, int defaultFilt // wxFileIconsTable icons // ---------------------------------------------------------------------------- +#ifndef __WXGTK24__ /* Computer */ static const char * file_icons_tbl_computer_xpm[] = { "16 16 7 1", @@ -1279,6 +1321,7 @@ static const char * file_icons_tbl_computer_xpm[] = { " .oXoXoXoXoXo.o ", ".XOXXXXXXXXX.o ", "............o "}; +#endif // GTK+ < 2.4 // ---------------------------------------------------------------------------- // wxFileIconsTable & friends