]> git.saurik.com Git - wxWidgets.git/blobdiff - src/xrc/xmlres.cpp
mention ShouldInheritColours() change
[wxWidgets.git] / src / xrc / xmlres.cpp
index dc9a434c95de2545d5db94ffbcca89966bfd0829..d795abd5094c580df9772d7e70314d5b405597e2 100644 (file)
@@ -35,7 +35,7 @@
 #include "wx/fontmap.h"
 #include "wx/artprov.h"
 
 #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"
 #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))
         {
         //     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())
             // change working directory later:
             wxFileName fn(fnd);
             if (fn.IsRelative())
@@ -115,8 +115,11 @@ bool wxXmlResource::Load(const wxString& filemask)
                 fn.MakeAbsolute();
                 fnd = fn.GetFullPath();
             }
                 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")))
 #if wxUSE_FILESYSTEM
         if (fnd.Lower().Matches(wxT("*.zip")) ||
             fnd.Lower().Matches(wxT("*.xrs")))
@@ -138,10 +141,11 @@ bool wxXmlResource::Load(const wxString& filemask)
     }
 #   undef wxXmlFindFirst
 #   undef wxXmlFindNext
     }
 #   undef wxXmlFindFirst
 #   undef wxXmlFindNext
-    return rt;
+    return rt && UpdateResources();
 }
 
 
 }
 
 
+IMPLEMENT_ABSTRACT_CLASS(wxXmlResourceHandler, wxObject)
 
 void wxXmlResource::AddHandler(wxXmlResourceHandler *handler)
 {
 
 void wxXmlResource::AddHandler(wxXmlResourceHandler *handler)
 {
@@ -282,19 +286,20 @@ static void ProcessPlatformProperty(wxXmlNode *node)
             while (tkn.HasMoreTokens())
             {
                 s = tkn.GetNextToken();
             while (tkn.HasMoreTokens())
             {
                 s = tkn.GetNextToken();
-                if (
-#ifdef __WXMSW__
-                    s == wxString(wxT("win"))
+#ifdef __WINDOWS__
+                if (s == wxT("win")) isok = true;
+#endif
+#if defined(__MAC__) || defined(__APPLE__)
+                if (s == wxT("mac")) isok = true;
 #elif defined(__UNIX__)
 #elif defined(__UNIX__)
-                    s == wxString(wxT("unix"))
-#elif defined(__MAC__)
-                    s == wxString(wxT("mac"))
-#elif defined(__OS2__)
-                    s == wxString(wxT("os2"))
-#else
-                    FALSE
+                if (s == wxT("unix")) isok = true;
 #endif
 #endif
-              ) isok = TRUE;
+#ifdef __OS2__
+                if (s == wxT("os2")) isok = true;
+#endif
+
+                if (isok)
+                    break;
             }
         }
 
             }
         }
 
@@ -315,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;
     bool modif;
 #   if wxUSE_FILESYSTEM
     wxFSFile *file = NULL;
@@ -327,9 +333,9 @@ void wxXmlResource::UpdateResources()
 #if !wxUSE_UNICODE && wxUSE_INTL
     if ( (GetFlags() & wxXRC_USE_LOCALE) == 0 )
     {
 #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
         encoding = wxLocale::GetSystemEncodingName();
     }
 #endif
@@ -344,7 +350,10 @@ void wxXmlResource::UpdateResources()
             file = fsys.OpenFile(m_data[i].File);
             modif = file && file->GetModificationTime() > m_data[i].Time;
             if (!file)
             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());
                 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;
             wxDELETE(file);
 #           else
             modif = wxDateTime(wxFileModificationTime(m_data[i].File)) > m_data[i].Time;
@@ -373,11 +382,13 @@ void wxXmlResource::UpdateResources()
                 wxLogError(_("Cannot load resources from file '%s'."),
                            m_data[i].File.c_str());
                 wxDELETE(m_data[i].Doc);
                 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);
             }
             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
                        {
             }
             else
                        {
@@ -393,7 +404,10 @@ void wxXmlResource::UpdateResources()
                 if (m_version == -1)
                     m_version = version;
                 if (m_version != version)
                 if (m_version == -1)
                     m_version = version;
                 if (m_version != version)
+                {
                     wxLogError(_("Resource files must have same version number!"));
                     wxLogError(_("Resource files must have same version number!"));
+                    rt = false;
+                }
 
                 ProcessPlatformProperty(m_data[i].Doc->GetRoot());
                                m_data[i].Time = file->GetModificationTime();
 
                 ProcessPlatformProperty(m_data[i].Doc->GetRoot());
                                m_data[i].Time = file->GetModificationTime();
@@ -406,6 +420,8 @@ void wxXmlResource::UpdateResources()
 #           endif
         }
     }
 #           endif
         }
     }
+
+    return rt;
 }
 
 
 }
 
 
@@ -562,14 +578,14 @@ wxObject *wxXmlResource::CreateResFromNode(wxXmlNode *node, wxObject *parent,
     wxXmlResourceHandler *handler;
 
     if (handlerToUse)
     wxXmlResourceHandler *handler;
 
     if (handlerToUse)
-    {        
+    {
         if (handlerToUse->CanHandle(node))
         {
             return handlerToUse->CreateResource(node, parent, instance);
         }
     }
     else if (node->GetName() == wxT("object"))
         if (handlerToUse->CanHandle(node))
         {
             return handlerToUse->CreateResource(node, parent, instance);
         }
     }
     else if (node->GetName() == wxT("object"))
-    {    
+    {
         wxNode *ND = m_handlers.GetFirst();
         while (ND)
         {
         wxNode *ND = m_handlers.GetFirst();
         while (ND)
         {
@@ -865,7 +881,8 @@ wxBitmap wxXmlResourceHandler::GetBitmap(const wxString& param,
     wxFSFile *fsfile = GetCurFileSystem().OpenFile(name);
     if (fsfile == NULL)
     {
     wxFSFile *fsfile = GetCurFileSystem().OpenFile(name);
     if (fsfile == NULL)
     {
-        wxLogError(_("XRC resource: Cannot create bitmap from '%s'."), param.c_str());
+        wxLogError(_("XRC resource: Cannot create bitmap from '%s'."),
+                   name.c_str());
         return wxNullBitmap;
     }
     wxImage img(*(fsfile->GetStream()));
         return wxNullBitmap;
     }
     wxImage img(*(fsfile->GetStream()));
@@ -1222,7 +1239,10 @@ static void CleanXRCID_Record(XRCID_record *rec)
 static void CleanXRCID_Records()
 {
     for (int i = 0; i < XRCID_TABLE_SIZE; i++)
 static void CleanXRCID_Records()
 {
     for (int i = 0; i < XRCID_TABLE_SIZE; i++)
+    {
         CleanXRCID_Record(XRCID_Records[i]);
         CleanXRCID_Record(XRCID_Records[i]);
+        XRCID_Records[i] = NULL;
+    }
 }
 
 static void AddStdXRCID_Records()
 }
 
 static void AddStdXRCID_Records()
@@ -1282,5 +1302,3 @@ void wxXmlInitResourceModule()
     module->Init();
     wxModule::RegisterModule(module);
 }
     module->Init();
     wxModule::RegisterModule(module);
 }
-
-