added and documented wxDir::HasFiles/SubDirs(), use the latter in wxDirDialog - it is several orders of magniture faster than wxFindFirstFile!

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11161 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2001-07-23 13:28:39 +00:00
parent 8f99a08fc0
commit d9ff0f91fb
3 changed files with 37 additions and 24 deletions

View File

@@ -39,6 +39,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 +148,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();
}
//-----------------------------------------------------------------------------
@@ -315,27 +313,19 @@ void wxDirCtrl::OnExpandItem(wxTreeEvent &event)
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() )
wxDir dir(data->m_path);
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(data->m_path);
m_names.Add(filename);
cont = dir.GetNext(&filename);
}
CreateItems( event.GetItem() );