X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/94245f6df05e758f52c8a3348799cf1ccf24c233..54af24613f3a2f2d5c47b69923c67f660c61bd09:/src/xrc/xmlres.cpp diff --git a/src/xrc/xmlres.cpp b/src/xrc/xmlres.cpp index 6698d8a73c..96a7cd6b5a 100644 --- a/src/xrc/xmlres.cpp +++ b/src/xrc/xmlres.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: xmlres.cpp +// Name: src/xrc/xmlres.cpp // Purpose: XRC resources // Author: Vaclav Slavik // Created: 2000/03/05 @@ -17,29 +17,33 @@ #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" + #include "wx/dialog.h" + #include "wx/settings.h" + #include "wx/bitmap.h" + #include "wx/image.h" +#endif + #ifndef __WXWINCE__ -#include + #include #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/log.h" -#include "wx/intl.h" #include "wx/tokenzr.h" #include "wx/fontenum.h" #include "wx/module.h" -#include "wx/bitmap.h" -#include "wx/image.h" #include "wx/fontmap.h" #include "wx/artprov.h" -#include "wx/settings.h" #include "wx/xml/xml.h" -#include "wx/xrc/xmlres.h" #include "wx/arrimpl.cpp" WX_DEFINE_OBJARRAY(wxXmlResourceDataRecords) @@ -625,10 +629,21 @@ static void MergeNodes(wxXmlNode& dest, wxXmlNode& with) } 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() ) dest.SetContent(with.GetContent()); } @@ -1027,19 +1042,21 @@ static wxColour GetSystemColour(const wxString& name) return wxNullColour; } -wxColour wxXmlResourceHandler::GetColour(const wxString& param) +wxColour wxXmlResourceHandler::GetColour(const wxString& param, const wxColour& defaultv) { wxString v = GetParamValue(param); - // find colour using HTML syntax (#RRGGBB) - unsigned long tmp = 0; + if ( v.empty() ) + return defaultv; + + wxColour clr; - 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: - wxColour clr = GetSystemColour(v); + clr = GetSystemColour(v); if (clr.Ok()) return clr; @@ -1048,9 +1065,7 @@ wxColour wxXmlResourceHandler::GetColour(const wxString& param) return wxNullColour; } - return wxColour((unsigned char) ((tmp & 0xFF0000) >> 16) , - (unsigned char) ((tmp & 0x00FF00) >> 8), - (unsigned char) ((tmp & 0x0000FF))); + return clr; } @@ -1094,21 +1109,17 @@ wxBitmap wxXmlResourceHandler::GetBitmap(const wxString& param, wxImage img(*(fsfile->GetStream())); delete fsfile; #else - wxImage img(GetParamValue(wxT("bitmap"))); + wxImage img(name); #endif if (!img.Ok()) { wxLogError(_("XRC resource: Cannot create bitmap from '%s'."), - param.c_str()); + name.c_str()); return wxNullBitmap; } if (!(size == wxDefaultSize)) img.Rescale(size.x, size.y); -#if !defined(__WXMSW__) || wxUSE_WXDIB return wxBitmap(img); -#else - return wxBitmap(); -#endif } @@ -1140,6 +1151,14 @@ wxXmlNode *wxXmlResourceHandler::GetParamNode(const wxString& param) } + +bool wxXmlResourceHandler::IsOfClass(wxXmlNode *node, const wxString& classname) +{ + return node->GetPropVal(wxT("class"), wxEmptyString) == classname; +} + + + wxString wxXmlResourceHandler::GetNodeContent(wxXmlNode *node) { wxXmlNode *n = node; @@ -1176,7 +1195,7 @@ wxSize wxXmlResourceHandler::GetSize(const wxString& param, 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) || @@ -1225,7 +1244,7 @@ wxCoord wxXmlResourceHandler::GetDimension(const wxString& param, 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)) @@ -1344,15 +1363,14 @@ wxFont wxXmlResourceHandler::GetFont(const wxString& param) if (hasFacename) { wxString faces = GetParamValue(wxT("face")); - wxFontEnumerator enu; - enu.EnumerateFacenames(); + wxArrayString facenames(wxFontEnumerator::GetFacenames()); wxStringTokenizer tk(faces, wxT(",")); while (tk.HasMoreTokens()) { - int index = enu.GetFacenames()->Index(tk.GetNextToken(), false); + int index = facenames.Index(tk.GetNextToken(), false); if (index != wxNOT_FOUND) { - facename = (*enu.GetFacenames())[index]; + facename = facenames[index]; break; } } @@ -1490,7 +1508,7 @@ struct XRCID_record 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; @@ -1514,7 +1532,7 @@ static int XRCID_Lookup(const wxChar *str_id, int value_if_not_found = -2) (*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 { @@ -1535,7 +1553,8 @@ static int XRCID_Lookup(const wxChar *str_id, int value_if_not_found = -2) 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; @@ -1545,7 +1564,7 @@ static void AddStdXRCID_Records(); AddStdXRCID_Records(); } - return XRCID_Lookup(str_id); + return XRCID_Lookup(str_id, value_if_not_found); }