X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/139c5871c91e087972789526ac7e85a5f4e94ece..ea0d8ca6e89a677871a214f5e4e8c50422a0cfb8:/contrib/src/xrc/xmlres.cpp diff --git a/contrib/src/xrc/xmlres.cpp b/contrib/src/xrc/xmlres.cpp index c29959f119..d795abd509 100644 --- a/contrib/src/xrc/xmlres.cpp +++ b/contrib/src/xrc/xmlres.cpp @@ -35,7 +35,7 @@ #include "wx/fontmap.h" #include "wx/artprov.h" -#include "wx/xrc/xml.h" +#include "wx/xml/xml.h" #include "wx/xrc/xmlres.h" #include "wx/arrimpl.cpp" @@ -107,7 +107,7 @@ bool wxXmlResource::Load(const wxString& filemask) // filename and not URL: if (wxFileName::FileExists(fnd)) { - // Make the name absolute filename, because the app may + // Make the name absolute filename, because the app may // change working directory later: wxFileName fn(fnd); if (fn.IsRelative()) @@ -115,14 +115,16 @@ bool wxXmlResource::Load(const wxString& filemask) fn.MakeAbsolute(); fnd = fn.GetFullPath(); } +#if wxUSE_FILESYSTEM + fnd = wxFileSystem::FileNameToURL(fnd); +#endif } - + #if wxUSE_FILESYSTEM if (fnd.Lower().Matches(wxT("*.zip")) || fnd.Lower().Matches(wxT("*.xrs"))) { - wxString url(wxFileSystem::FileNameToURL(fnd)); - rt = rt && Load(url + wxT("#zip:*.xrc")); + rt = rt && Load(fnd + wxT("#zip:*.xrc")); } else #endif @@ -139,10 +141,11 @@ bool wxXmlResource::Load(const wxString& filemask) } # undef wxXmlFindFirst # undef wxXmlFindNext - return rt; + return rt && UpdateResources(); } +IMPLEMENT_ABSTRACT_CLASS(wxXmlResourceHandler, wxObject) void wxXmlResource::AddHandler(wxXmlResourceHandler *handler) { @@ -283,14 +286,13 @@ static void ProcessPlatformProperty(wxXmlNode *node) while (tkn.HasMoreTokens()) { s = tkn.GetNextToken(); -#ifdef __WXMSW__ +#ifdef __WINDOWS__ if (s == wxT("win")) isok = true; #endif -#ifdef __UNIX__ - if (s == wxT("unix")) isok = true; -#endif -#ifdef __MAC__ +#if defined(__MAC__) || defined(__APPLE__) if (s == wxT("mac")) isok = true; +#elif defined(__UNIX__) + if (s == wxT("unix")) isok = true; #endif #ifdef __OS2__ if (s == wxT("os2")) isok = true; @@ -318,8 +320,9 @@ static void ProcessPlatformProperty(wxXmlNode *node) -void wxXmlResource::UpdateResources() +bool wxXmlResource::UpdateResources() { + bool rt = true; bool modif; # if wxUSE_FILESYSTEM wxFSFile *file = NULL; @@ -330,9 +333,9 @@ void wxXmlResource::UpdateResources() #if !wxUSE_UNICODE && wxUSE_INTL if ( (GetFlags() & wxXRC_USE_LOCALE) == 0 ) { - // In case we are not using wxLocale to translate strings, convert the strings - // GUI's charset. This must not be done when wxXRC_USE_LOCALE is on, because - // it could break wxGetTranslation lookup. + // In case we are not using wxLocale to translate strings, convert the + // strings GUI's charset. This must not be done when wxXRC_USE_LOCALE + // is on, because it could break wxGetTranslation lookup. encoding = wxLocale::GetSystemEncodingName(); } #endif @@ -347,7 +350,10 @@ void wxXmlResource::UpdateResources() file = fsys.OpenFile(m_data[i].File); modif = file && file->GetModificationTime() > m_data[i].Time; if (!file) + { wxLogError(_("Cannot open file '%s'."), m_data[i].File.c_str()); + rt = false; + } wxDELETE(file); # else modif = wxDateTime(wxFileModificationTime(m_data[i].File)) > m_data[i].Time; @@ -376,11 +382,13 @@ void wxXmlResource::UpdateResources() wxLogError(_("Cannot load resources from file '%s'."), m_data[i].File.c_str()); wxDELETE(m_data[i].Doc); + rt = false; } else if (m_data[i].Doc->GetRoot()->GetName() != wxT("resource")) { wxLogError(_("Invalid XRC resource '%s': doesn't have root node 'resource'."), m_data[i].File.c_str()); wxDELETE(m_data[i].Doc); + rt = false; } else { @@ -396,7 +404,10 @@ void wxXmlResource::UpdateResources() if (m_version == -1) m_version = version; if (m_version != version) + { wxLogError(_("Resource files must have same version number!")); + rt = false; + } ProcessPlatformProperty(m_data[i].Doc->GetRoot()); m_data[i].Time = file->GetModificationTime(); @@ -409,6 +420,8 @@ void wxXmlResource::UpdateResources() # endif } } + + return rt; } @@ -565,14 +578,14 @@ wxObject *wxXmlResource::CreateResFromNode(wxXmlNode *node, wxObject *parent, wxXmlResourceHandler *handler; if (handlerToUse) - { + { if (handlerToUse->CanHandle(node)) { return handlerToUse->CreateResource(node, parent, instance); } } else if (node->GetName() == wxT("object")) - { + { wxNode *ND = m_handlers.GetFirst(); while (ND) {