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

@ -126,6 +126,22 @@ empty) and flags, return TRUE on success.
Continue enumerating files satisfying the criteria specified by the last call
to \helpref{GetFirst}{wxdirgetfirst}.
\membersection{wxDir::HasFiles}\label{wxdirhasfiles}
\func{bool}{HasFiles}{\param{const wxString& }{filespec = wxEmptyString}}
Returns {\tt TRUE} if the directory contains any files matching the given
{\it filespec}. If {\it filespec} is empty, look for any files at all. In any
case, even hidden files are taken into account.
\membersection{wxDir::HasSubDirs}\label{wxdirhassubdirs}
\func{bool}{HasSubDirs}{\param{const wxString& }{dirspec = wxEmptyString}}
Returns {\tt TRUE} if the directory contains any subdirectories (if a non
empty {\it filespec} is given, only check for directories matching it).
The hidden subdirectories are taken into account as well.
\membersection{wxDir::Traverse}\label{wxdirtraverse}
\func{size\_t}{Traverse}{\param{wxDirTraverser& }{sink}, \param{const wxString& }{filespec = wxEmptyString}, \param{int }{flags = wxDIR\_DEFAULT}}

View File

@ -103,10 +103,17 @@ public:
const wxString& filespec = wxEmptyString,
int flags = wxDIR_DEFAULT) const;
// get next file in the enumeration started with either GetFirst() or
// GetFirstNormal()
// get next file in the enumeration started with GetFirst()
bool GetNext(wxString *filename) const;
// return true if this directory has any files in it
bool HasFiles(const wxString& spec = wxEmptyString)
{ wxString s; return GetFirst(&s, spec, wxDIR_FILES | wxDIR_HIDDEN); }
// return true if this directory has any subdirectories
bool HasSubDirs(const wxString& spec = wxEmptyString)
{ wxString s; return GetFirst(&s, spec, wxDIR_DIRS | wxDIR_HIDDEN); }
// enumerate all files in this directory and its subdirectories
//
// return the number of files found

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() );