- wxDir subdir(prefix + dirname);
- if ( subdir.IsOpened() )
- {
- nFiles += subdir.Traverse(sink, filespec, flags);
- }
+ default:
+ wxFAIL_MSG(_T("unexpected OnDir() return value") );
+ // fall through
+
+ 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
+ ;