added and documented wxDirTraverser::OnOpenError
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18895 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -43,6 +43,16 @@
|
||||
// implementation
|
||||
// ============================================================================
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxDirTraverser
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
wxDirTraverseResult
|
||||
wxDirTraverser::OnOpenError(const wxString& WXUNUSED(dirname))
|
||||
{
|
||||
return wxDIR_IGNORE;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxDir::HasFiles() and HasSubDirs()
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -88,29 +98,75 @@ size_t wxDir::Traverse(wxDirTraverser& sink,
|
||||
if ( flags & wxDIR_DIRS )
|
||||
{
|
||||
wxString dirname;
|
||||
bool cont = GetFirst(&dirname, _T(""), wxDIR_DIRS | wxDIR_HIDDEN);
|
||||
while ( cont )
|
||||
for ( bool cont = GetFirst(&dirname, _T(""), wxDIR_DIRS | wxDIR_HIDDEN);
|
||||
cont;
|
||||
cont = GetNext(&dirname) )
|
||||
{
|
||||
wxDirTraverseResult res = sink.OnDir(prefix + dirname);
|
||||
const wxString fulldirname = prefix + dirname;
|
||||
|
||||
if ( res == wxDIR_STOP )
|
||||
break;
|
||||
|
||||
if ( res == wxDIR_CONTINUE )
|
||||
switch ( sink.OnDir(fulldirname) )
|
||||
{
|
||||
wxDir subdir(prefix + dirname);
|
||||
if ( subdir.IsOpened() )
|
||||
{
|
||||
nFiles += subdir.Traverse(sink, filespec, flags);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wxASSERT_MSG( res == wxDIR_IGNORE,
|
||||
_T("unexpected OnDir() return value") );
|
||||
}
|
||||
default:
|
||||
wxFAIL_MSG(_T("unexpected OnDir() return value") );
|
||||
// fall through
|
||||
|
||||
cont = GetNext(&dirname);
|
||||
case wxDIR_STOP:
|
||||
cont = false;
|
||||
break;
|
||||
|
||||
case wxDIR_CONTINUE:
|
||||
{
|
||||
wxDir subdir;
|
||||
|
||||
// don't give the error messages for the directories
|
||||
// which we can't open: there can be all sorts of good
|
||||
// reason for this (e.g. insufficient privileges) and
|
||||
// this shouldn't be treated as an error -- instead
|
||||
// let the user code decide what to do
|
||||
bool ok;
|
||||
do
|
||||
{
|
||||
wxLogNull noLog;
|
||||
ok = subdir.Open(fulldirname);
|
||||
if ( !ok )
|
||||
{
|
||||
// ask the user code what to do
|
||||
bool tryagain;
|
||||
switch ( sink.OnOpenError(fulldirname) )
|
||||
{
|
||||
default:
|
||||
wxFAIL_MSG(_T("unexpected OnOpenError() return value") );
|
||||
// fall through
|
||||
|
||||
case wxDIR_STOP:
|
||||
cont = false;
|
||||
// fall through
|
||||
|
||||
case wxDIR_IGNORE:
|
||||
tryagain = false;
|
||||
break;
|
||||
|
||||
case wxDIR_CONTINUE:
|
||||
tryagain = true;
|
||||
}
|
||||
|
||||
if ( !tryagain )
|
||||
break;
|
||||
}
|
||||
}
|
||||
while ( !ok );
|
||||
|
||||
if ( ok )
|
||||
{
|
||||
nFiles += subdir.Traverse(sink, filespec, flags);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case wxDIR_IGNORE:
|
||||
// nothing to do
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user