From 7d0946bee1cf1d0beb65927fdd51a505a45c7f30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Mon, 2 Dec 2002 18:15:12 +0000 Subject: [PATCH] fix object_ref lookup in case when object_ref node didn't specify class git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@18023 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- contrib/src/xrc/xmlres.cpp | 23 +++++++++++++++++++---- src/xrc/xmlres.cpp | 23 +++++++++++++++++++---- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/contrib/src/xrc/xmlres.cpp b/contrib/src/xrc/xmlres.cpp index 892f21d9c5..859a9eaa10 100644 --- a/contrib/src/xrc/xmlres.cpp +++ b/contrib/src/xrc/xmlres.cpp @@ -407,10 +407,25 @@ wxXmlNode *wxXmlResource::DoFindResource(wxXmlNode *parent, if ( node->GetType() == wxXML_ELEMENT_NODE && (node->GetName() == wxT("object") || node->GetName() == wxT("object_ref")) && - (!classname || - node->GetPropVal(wxT("class"), wxEmptyString) == classname) && - node->GetPropVal(wxT("name"), &dummy) && dummy == name ) - return node; + node->GetPropVal(wxT("name"), &dummy) && dummy == name ) + { + wxString cls(node->GetPropVal(wxT("class"), wxEmptyString)); + if (!classname || cls == classname) + return node; + // object_ref may not have 'class' property: + if (cls.empty() && node->GetName() == wxT("object_ref")) + { + wxString refName = node->GetPropVal(wxT("ref"), wxEmptyString); + if (refName.empty()) + continue; + wxXmlNode* refNode = FindResource(refName, wxEmptyString, TRUE); + if (refNode && + refNode->GetPropVal(wxT("class"), wxEmptyString) == classname) + { + return node; + } + } + } } if ( recursive ) diff --git a/src/xrc/xmlres.cpp b/src/xrc/xmlres.cpp index 892f21d9c5..859a9eaa10 100644 --- a/src/xrc/xmlres.cpp +++ b/src/xrc/xmlres.cpp @@ -407,10 +407,25 @@ wxXmlNode *wxXmlResource::DoFindResource(wxXmlNode *parent, if ( node->GetType() == wxXML_ELEMENT_NODE && (node->GetName() == wxT("object") || node->GetName() == wxT("object_ref")) && - (!classname || - node->GetPropVal(wxT("class"), wxEmptyString) == classname) && - node->GetPropVal(wxT("name"), &dummy) && dummy == name ) - return node; + node->GetPropVal(wxT("name"), &dummy) && dummy == name ) + { + wxString cls(node->GetPropVal(wxT("class"), wxEmptyString)); + if (!classname || cls == classname) + return node; + // object_ref may not have 'class' property: + if (cls.empty() && node->GetName() == wxT("object_ref")) + { + wxString refName = node->GetPropVal(wxT("ref"), wxEmptyString); + if (refName.empty()) + continue; + wxXmlNode* refNode = FindResource(refName, wxEmptyString, TRUE); + if (refNode && + refNode->GetPropVal(wxT("class"), wxEmptyString) == classname) + { + return node; + } + } + } } if ( recursive )