]> git.saurik.com Git - wxWidgets.git/blobdiff - src/xrc/xmlres.cpp
use SubclassWin() insteaf of just wxAssociateWinWithHandle() to make sure we generate...
[wxWidgets.git] / src / xrc / xmlres.cpp
index 1de0a1ddfc8455b65fb9b60335fcf74b8652ad05..238bda8e31bbcdcf27e45433d843cf98cc54344b 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        xmlres.cpp
+// Name:        src/xrc/xmlres.cpp
 // Purpose:     XRC resources
 // Author:      Vaclav Slavik
 // Created:     2000/03/05
 // Purpose:     XRC resources
 // Author:      Vaclav Slavik
 // Created:     2000/03/05
 
 #if wxUSE_XRC
 
 
 #if wxUSE_XRC
 
+#include "wx/xrc/xmlres.h"
+
+#ifndef WX_PRECOMP
+    #include "wx/intl.h"
+    #include "wx/log.h"
+    #include "wx/panel.h"
+    #include "wx/frame.h"
+#endif
+
 #ifndef __WXWINCE__
 #ifndef __WXWINCE__
-#include <locale.h>
+    #include <locale.h>
 #endif
 
 #include "wx/dialog.h"
 #endif
 
 #include "wx/dialog.h"
-#include "wx/panel.h"
-#include "wx/frame.h"
 #include "wx/wfstream.h"
 #include "wx/filesys.h"
 #include "wx/filename.h"
 #include "wx/wfstream.h"
 #include "wx/filesys.h"
 #include "wx/filename.h"
-#include "wx/log.h"
-#include "wx/intl.h"
 #include "wx/tokenzr.h"
 #include "wx/fontenum.h"
 #include "wx/module.h"
 #include "wx/tokenzr.h"
 #include "wx/fontenum.h"
 #include "wx/module.h"
@@ -39,7 +44,6 @@
 #include "wx/settings.h"
 
 #include "wx/xml/xml.h"
 #include "wx/settings.h"
 
 #include "wx/xml/xml.h"
-#include "wx/xrc/xmlres.h"
 
 #include "wx/arrimpl.cpp"
 WX_DEFINE_OBJARRAY(wxXmlResourceDataRecords)
 
 #include "wx/arrimpl.cpp"
 WX_DEFINE_OBJARRAY(wxXmlResourceDataRecords)
@@ -625,7 +629,18 @@ static void MergeNodes(wxXmlNode& dest, wxXmlNode& with)
         }
 
         if ( !dnode )
         }
 
         if ( !dnode )
-            dest.AddChild(new wxXmlNode(*node));
+        {
+            static const wxChar *AT_END = wxT("end");
+            wxString insert_pos = node->GetPropVal(wxT("insert_at"), AT_END);
+            if ( insert_pos == AT_END )
+            {
+                dest.AddChild(new wxXmlNode(*node));
+            }
+            else if ( insert_pos == wxT("begin") )
+            {
+                dest.InsertChild(new wxXmlNode(*node), dest.GetChildren());
+            }
+        }
     }
 
     if ( dest.GetType() == wxXML_TEXT_NODE && with.GetContent().Length() )
     }
 
     if ( dest.GetType() == wxXML_TEXT_NODE && with.GetContent().Length() )
@@ -1030,16 +1045,14 @@ static wxColour GetSystemColour(const wxString& name)
 wxColour wxXmlResourceHandler::GetColour(const wxString& param)
 {
     wxString v = GetParamValue(param);
 wxColour wxXmlResourceHandler::GetColour(const wxString& param)
 {
     wxString v = GetParamValue(param);
+    wxColour clr;
 
 
-    // find colour using HTML syntax (#RRGGBB)
-    unsigned long tmp = 0;
-
-    if (v.Length() != 7 || v[0u] != wxT('#') ||
-        wxSscanf(v.c_str(), wxT("#%lX"), &tmp) != 1)
+    // wxString -> wxColour conversion
+    if (!clr.Set(v))
     {
         // the colour doesn't use #RRGGBB format, check if it is symbolic
         // colour name:
     {
         // the colour doesn't use #RRGGBB format, check if it is symbolic
         // colour name:
-        wxColour clr = GetSystemColour(v);
+        clr = GetSystemColour(v);
         if (clr.Ok())
             return clr;
 
         if (clr.Ok())
             return clr;
 
@@ -1048,9 +1061,7 @@ wxColour wxXmlResourceHandler::GetColour(const wxString& param)
         return wxNullColour;
     }
 
         return wxNullColour;
     }
 
-    return wxColour((unsigned char) ((tmp & 0xFF0000) >> 16) ,
-                    (unsigned char) ((tmp & 0x00FF00) >> 8),
-                    (unsigned char) ((tmp & 0x0000FF)));
+    return clr;
 }
 
 
 }
 
 
@@ -1104,11 +1115,7 @@ wxBitmap wxXmlResourceHandler::GetBitmap(const wxString& param,
         return wxNullBitmap;
     }
     if (!(size == wxDefaultSize)) img.Rescale(size.x, size.y);
         return wxNullBitmap;
     }
     if (!(size == wxDefaultSize)) img.Rescale(size.x, size.y);
-#if !defined(__WXMSW__) || wxUSE_WXDIB
     return wxBitmap(img);
     return wxBitmap(img);
-#else
-    return wxBitmap();
-#endif
 }
 
 
 }
 
 
@@ -1176,7 +1183,7 @@ wxSize wxXmlResourceHandler::GetSize(const wxString& param,
     bool is_dlg;
     long sx, sy = 0;
 
     bool is_dlg;
     long sx, sy = 0;
 
-    is_dlg = s[s.Length()-1] == wxT('d');
+    is_dlg = s[s.length()-1] == wxT('d');
     if (is_dlg) s.RemoveLast();
 
     if (!s.BeforeFirst(wxT(',')).ToLong(&sx) ||
     if (is_dlg) s.RemoveLast();
 
     if (!s.BeforeFirst(wxT(',')).ToLong(&sx) ||
@@ -1225,7 +1232,7 @@ wxCoord wxXmlResourceHandler::GetDimension(const wxString& param,
     bool is_dlg;
     long sx;
 
     bool is_dlg;
     long sx;
 
-    is_dlg = s[s.Length()-1] == wxT('d');
+    is_dlg = s[s.length()-1] == wxT('d');
     if (is_dlg) s.RemoveLast();
 
     if (!s.ToLong(&sx))
     if (is_dlg) s.RemoveLast();
 
     if (!s.ToLong(&sx))
@@ -1490,7 +1497,7 @@ struct XRCID_record
 
 static XRCID_record *XRCID_Records[XRCID_TABLE_SIZE] = {NULL};
 
 
 static XRCID_record *XRCID_Records[XRCID_TABLE_SIZE] = {NULL};
 
-static int XRCID_Lookup(const wxChar *str_id, int value_if_not_found = -2)
+static int XRCID_Lookup(const wxChar *str_id, int value_if_not_found = wxID_NONE)
 {
     int index = 0;
 
 {
     int index = 0;
 
@@ -1514,7 +1521,7 @@ static int XRCID_Lookup(const wxChar *str_id, int value_if_not_found = -2)
     (*rec_var)->next = NULL;
 
     wxChar *end;
     (*rec_var)->next = NULL;
 
     wxChar *end;
-    if (value_if_not_found != -2)
+    if (value_if_not_found != wxID_NONE)
         (*rec_var)->id = value_if_not_found;
     else
     {
         (*rec_var)->id = value_if_not_found;
     else
     {
@@ -1535,7 +1542,8 @@ static int XRCID_Lookup(const wxChar *str_id, int value_if_not_found = -2)
 
 static void AddStdXRCID_Records();
 
 
 static void AddStdXRCID_Records();
 
-/*static*/ int wxXmlResource::GetXRCID(const wxChar *str_id)
+/*static*/
+int wxXmlResource::GetXRCID(const wxChar *str_id, int value_if_not_found)
 {
     static bool s_stdIDsAdded = false;
 
 {
     static bool s_stdIDsAdded = false;
 
@@ -1545,7 +1553,7 @@ static void AddStdXRCID_Records();
         AddStdXRCID_Records();
     }
 
         AddStdXRCID_Records();
     }
 
-    return XRCID_Lookup(str_id);
+    return XRCID_Lookup(str_id, value_if_not_found);
 }
 
 
 }