X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a58804eae1b3d836e7276ab7a84f9e25b27ae2ae..01c226691aabe0eb4bfe86c04b4b9a59d7af367a:/src/xrc/xmlres.cpp diff --git a/src/xrc/xmlres.cpp b/src/xrc/xmlres.cpp index c4b2ae9a2e..5b41a453aa 100644 --- a/src/xrc/xmlres.cpp +++ b/src/xrc/xmlres.cpp @@ -431,14 +431,27 @@ wxIcon wxXmlResource::LoadIcon(const wxString& name) } -wxObject *wxXmlResource::LoadObject(wxWindow *parent, const wxString& name, const wxString& classname) +wxObject * +wxXmlResource::DoLoadObject(wxWindow *parent, + const wxString& name, + const wxString& classname, + bool recursive) { - return CreateResFromNode(FindResource(name, classname), parent, NULL); + wxXmlNode * const node = FindResource(name, classname, recursive); + + return node ? DoCreateResFromNode(*node, parent, NULL) : NULL; } -bool wxXmlResource::LoadObject(wxObject *instance, wxWindow *parent, const wxString& name, const wxString& classname) +bool +wxXmlResource::DoLoadObject(wxObject *instance, + wxWindow *parent, + const wxString& name, + const wxString& classname, + bool recursive) { - return CreateResFromNode(FindResource(name, classname), parent, instance) != NULL; + wxXmlNode * const node = FindResource(name, classname, recursive); + + return node && DoCreateResFromNode(*node, parent, instance) != NULL; } @@ -819,23 +832,23 @@ static void MergeNodesOver(wxXmlNode& dest, wxXmlNode& overwriteWith, dest.SetContent(overwriteWith.GetContent()); } -wxObject *wxXmlResource::CreateResFromNode(wxXmlNode *node, wxObject *parent, - wxObject *instance, - wxXmlResourceHandler *handlerToUse) +wxObject * +wxXmlResource::DoCreateResFromNode(wxXmlNode& node, + wxObject *parent, + wxObject *instance, + wxXmlResourceHandler *handlerToUse) { - if (node == NULL) return NULL; - // handling of referenced resource - if ( node->GetName() == wxT("object_ref") ) + if ( node.GetName() == wxT("object_ref") ) { - wxString refName = node->GetAttribute(wxT("ref"), wxEmptyString); + wxString refName = node.GetAttribute(wxT("ref"), wxEmptyString); wxXmlNode* refNode = FindResource(refName, wxEmptyString, true); if ( !refNode ) { ReportError ( - node, + &node, wxString::Format ( "referenced object node with ref=\"%s\" not found", @@ -845,14 +858,14 @@ wxObject *wxXmlResource::CreateResFromNode(wxXmlNode *node, wxObject *parent, return NULL; } - if ( !node->GetChildren() ) + if ( !node.GetChildren() ) { // In the typical, simple case, is used to link // to another node and doesn't have any content of its own that // would overwrite linked object's properties. In this case, // we can simply create the resource from linked node. - return CreateResFromNode(refNode, parent, instance); + return DoCreateResFromNode(*refNode, parent, instance); } else { @@ -862,42 +875,42 @@ wxObject *wxXmlResource::CreateResFromNode(wxXmlNode *node, wxObject *parent, // load the resource from result of the merge. wxXmlNode copy(*refNode); - MergeNodesOver(copy, *node, GetFileNameFromNode(node, Data())); + MergeNodesOver(copy, node, GetFileNameFromNode(&node, Data())); // remember referenced object's file, see GetFileNameFromNode() copy.AddAttribute(ATTR_INPUT_FILENAME, GetFileNameFromNode(refNode, Data())); - return CreateResFromNode(©, parent, instance); + return DoCreateResFromNode(copy, parent, instance); } } if (handlerToUse) { - if (handlerToUse->CanHandle(node)) + if (handlerToUse->CanHandle(&node)) { - return handlerToUse->CreateResource(node, parent, instance); + return handlerToUse->CreateResource(&node, parent, instance); } } - else if (node->GetName() == wxT("object")) + else if (node.GetName() == wxT("object")) { for ( wxVector::iterator h = m_handlers.begin(); h != m_handlers.end(); ++h ) { wxXmlResourceHandler *handler = *h; - if (handler->CanHandle(node)) - return handler->CreateResource(node, parent, instance); + if (handler->CanHandle(&node)) + return handler->CreateResource(&node, parent, instance); } } ReportError ( - node, + &node, wxString::Format ( "no handler found for XML node \"%s\" (class \"%s\")", - node->GetName(), - node->GetAttribute("class", wxEmptyString) + node.GetName(), + node.GetAttribute("class", wxEmptyString) ) ); return NULL; @@ -1015,7 +1028,8 @@ void wxXmlResourceHandler::AddWindowStyles() // the border styles all have the old and new names, recognize both for now XRC_ADD_STYLE(wxSIMPLE_BORDER); XRC_ADD_STYLE(wxBORDER_SIMPLE); XRC_ADD_STYLE(wxSUNKEN_BORDER); XRC_ADD_STYLE(wxBORDER_SUNKEN); - XRC_ADD_STYLE(wxDOUBLE_BORDER); XRC_ADD_STYLE(wxBORDER_DOUBLE); + XRC_ADD_STYLE(wxDOUBLE_BORDER); XRC_ADD_STYLE(wxBORDER_DOUBLE); // deprecated + XRC_ADD_STYLE(wxBORDER_THEME); XRC_ADD_STYLE(wxRAISED_BORDER); XRC_ADD_STYLE(wxBORDER_RAISED); XRC_ADD_STYLE(wxSTATIC_BORDER); XRC_ADD_STYLE(wxBORDER_STATIC); XRC_ADD_STYLE(wxNO_BORDER); XRC_ADD_STYLE(wxBORDER_NONE); @@ -1793,6 +1807,7 @@ wxFont wxXmlResourceHandler::GetFont(const wxString& param) // encoding wxFontEncoding enc = wxFONTENCODING_DEFAULT; bool hasEncoding = HasParam(wxT("encoding")); +#if wxUSE_FONTMAP if (hasEncoding) { wxString encoding = GetParamValue(wxT("encoding")); @@ -1802,6 +1817,7 @@ wxFont wxXmlResourceHandler::GetFont(const wxString& param) if (enc == wxFONTENCODING_SYSTEM) enc = wxFONTENCODING_DEFAULT; } +#endif // wxUSE_FONTMAP // is this font based on a system font? wxFont font = GetSystemFont(GetParamValue(wxT("sysfont"))); @@ -1881,8 +1897,8 @@ void wxXmlResourceHandler::CreateChildren(wxObject *parent, bool this_hnd_only) { if ( IsObjectNode(n) ) { - m_resource->CreateResFromNode(n, parent, NULL, - this_hnd_only ? this : NULL); + m_resource->DoCreateResFromNode(*n, parent, NULL, + this_hnd_only ? this : NULL); } } }