X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/eb085907468d3c3a9912d453647c1ab14b951a7c..fd4bc54da06b4191dff7d4bc6d80ccbba22b2566:/src/generic/dirdlgg.cpp diff --git a/src/generic/dirdlgg.cpp b/src/generic/dirdlgg.cpp index 6158e8d0e6..454b60cc05 100644 --- a/src/generic/dirdlgg.cpp +++ b/src/generic/dirdlgg.cpp @@ -29,6 +29,7 @@ #include "wx/button.h" #include "wx/layout.h" #include "wx/msgdlg.h" +#include "wx/textctrl.h" #include "wx/textdlg.h" #include "wx/filefn.h" #include "wx/cmndata.h" @@ -39,6 +40,7 @@ #include "wx/log.h" #include "wx/sizer.h" #include "wx/tokenzr.h" +#include "wx/dir.h" #if wxUSE_STATLINE #include "wx/statline.h" @@ -147,10 +149,7 @@ void wxDirItemData::SetNewDirName( wxString path ) bool wxDirItemData::HasSubDirs() { - wxString search = m_path + wxT("/*"); - wxLogNull log; - wxString path = wxFindFirstFile( search, wxDIR ); - return (bool)(!path.IsNull()); + return wxDir(m_path).HasSubDirs(); } //----------------------------------------------------------------------------- @@ -313,29 +312,24 @@ void wxDirCtrl::OnExpandItem(wxTreeEvent &event) wxBeginBusyCursor(); wxDirItemData *data = (wxDirItemData *)GetItemData(event.GetItem()); - wxASSERT(data); - - wxString search,path,filename; m_paths.Clear(); m_names.Clear(); -#ifdef __WXMSW__ - search = data->m_path + _T("\\*.*"); -#else - search = data->m_path + _T("/*"); -#endif - for (path = wxFindFirstFile( search, wxDIR ); !path.IsNull(); - path=wxFindNextFile() ) + + wxString path = data->m_path; + + wxDir dir(path); + + path += _T('/'); + + wxString filename; + bool cont = dir.GetFirst(&filename, "", wxDIR_DIRS | wxDIR_HIDDEN); + while ( cont ) { - filename = wxFileNameFromPath( path ); - /* Don't add "." and ".." to the tree. I think wxFindNextFile - * also checks this, but I don't quite understand what happens - * there. Also wxFindNextFile seems to swallow hidden dirs */ - if ( (filename != _T(".")) && (filename != _T("..")) ) - { - m_paths.Add(path); - m_names.Add(filename); - } + m_paths.Add(path + filename); + m_names.Add(filename); + + cont = dir.GetNext(&filename); } CreateItems( event.GetItem() ); @@ -452,7 +446,7 @@ wxDirDialog::wxDirDialog(wxWindow *parent, long cookie = 0; // default to root dir wxTreeItemId item = m_dir->GetFirstChild(m_dir->GetRootItem(), cookie); - + if (!m_path.IsEmpty() && (m_path != wxT("/")) && (m_dir->m_paths.Count() > 1)) { size_t count = m_dir->m_paths.GetCount(); @@ -461,14 +455,14 @@ wxDirDialog::wxDirDialog(wxWindow *parent, if (m_path.Find( m_dir->m_paths[i] ) == 0) { path = m_dir->m_paths[i]; - + for (size_t j = 0; j < i; j++) item = m_dir->GetNextChild(m_dir->GetRootItem(), cookie); - + wxStringTokenizer tk2(path, wxFILE_SEP_PATH, wxTOKEN_STRTOK); for (size_t h = 0; h < tk2.CountTokens(); h++) tk.GetNextToken(); - + break; } }