diff --git a/include/wx/xrc/xmlres.h b/include/wx/xrc/xmlres.h index 0c80dfc9be..c324aec930 100644 --- a/include/wx/xrc/xmlres.h +++ b/include/wx/xrc/xmlres.h @@ -115,6 +115,9 @@ public: // Loads resources from single XRC file. bool LoadFile(const wxFileName& file); + // Loads all XRC files from a directory. + bool LoadAllFiles(const wxString& dirname); + // Unload resource from the given XML file (wildcards not allowed) bool Unload(const wxString& filename); diff --git a/interface/wx/xrc/xmlres.h b/interface/wx/xrc/xmlres.h index 460b7fa714..590b51ac30 100644 --- a/interface/wx/xrc/xmlres.h +++ b/interface/wx/xrc/xmlres.h @@ -204,7 +204,7 @@ public: If you are sure that the argument is name of single XRC file (rather than an URL or a wildcard), use LoadFile() instead. - @see LoadFile() + @see LoadFile(), LoadAllFiles() */ bool Load(const wxString& filemask); @@ -213,10 +213,22 @@ public: @since 2.9.0 - @see Load() + @see Load(), LoadAllFiles() */ bool LoadFile(const wxFileName& file); + /** + Loads all .xrc files from directory @a dirname. + + Tries to load as many files as possible; if there's an error while + loading one file, it still attempts to load other files. + + @since 2.9.0 + + @see LoadFile(), Load() + */ + bool LoadAllFiles(const wxString& dirname); + /** Loads a bitmap resource from a file. */ diff --git a/samples/xrc/xrcdemo.cpp b/samples/xrc/xrcdemo.cpp index 6c93d4b75b..e82ea49d99 100644 --- a/samples/xrc/xrcdemo.cpp +++ b/samples/xrc/xrcdemo.cpp @@ -80,51 +80,9 @@ bool MyApp::OnInit() // Load all of the XRC files that will be used. You can put everything // into one giant XRC file if you wanted, but then they become more // diffcult to manage, and harder to reuse in later projects. - // The menubar - if (!wxXmlResource::Get()->Load(wxT("rc/menu.xrc"))) + if ( !wxXmlResource::Get()->LoadAllFiles("rc") ) return false; - // The toolbar - if (!wxXmlResource::Get()->Load(wxT("rc/toolbar.xrc"))) - return false; - - // Non-derived dialog example - if (!wxXmlResource::Get()->Load(wxT("rc/basicdlg.xrc"))) - return false; - - // Derived dialog example - if (!wxXmlResource::Get()->Load(wxT("rc/derivdlg.xrc"))) - return false; - - // Controls property example - if (!wxXmlResource::Get()->Load(wxT("rc/controls.xrc"))) - return false; - - // Frame example - if (!wxXmlResource::Get()->Load(wxT("rc/frame.xrc"))) - return false; - - // Uncentered example - if (!wxXmlResource::Get()->Load(wxT("rc/uncenter.xrc"))) - return false; - - // Custom class example - if (!wxXmlResource::Get()->Load(wxT("rc/custclas.xrc"))) - return false; - - // wxArtProvider example - if (!wxXmlResource::Get()->Load(wxT("rc/artprov.xrc"))) - return false; - - // Platform property example - if (!wxXmlResource::Get()->Load(wxT("rc/platform.xrc"))) - return false; - - // Variable expansion example - if (!wxXmlResource::Get()->Load(wxT("rc/variable.xrc"))) - return false; - - #if wxUSE_HELP // Use the simple help provider to show the context-sensitive help wxHelpProvider::Set( new wxSimpleHelpProvider ); diff --git a/src/xrc/xmlres.cpp b/src/xrc/xmlres.cpp index 99ae14c44b..6e7e3b9611 100644 --- a/src/xrc/xmlres.cpp +++ b/src/xrc/xmlres.cpp @@ -44,7 +44,7 @@ #include "wx/fontenum.h" #include "wx/fontmap.h" #include "wx/artprov.h" - +#include "wx/dir.h" #include "wx/xml/xml.h" @@ -183,6 +183,22 @@ bool wxXmlResource::LoadFile(const wxFileName& file) return Load(wxFileSystem::FileNameToURL(file)); } +bool wxXmlResource::LoadAllFiles(const wxString& dirname) +{ + bool ok = true; + wxArrayString files; + + wxDir::GetAllFiles(dirname, &files, "*.xrc"); + + for ( wxArrayString::const_iterator i = files.begin(); i != files.end(); ++i ) + { + if ( !LoadFile(*i) ) + ok = false; + } + + return ok; +} + bool wxXmlResource::Load(const wxString& filemask_) { wxString filemask = ConvertFileNameToURL(filemask_);