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:
parent
8f99a08fc0
commit
d9ff0f91fb
@ -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}}
|
||||
|
@ -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
|
||||
|
@ -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() );
|
||||
|
Loading…
Reference in New Issue
Block a user