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:
Vadim Zeitlin
2003-01-24 00:32:17 +00:00
parent d1be6261e3
commit 350777b68f
4 changed files with 112 additions and 28 deletions

View File

@@ -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
;
}
}
}