/////////////////////////////////////////////////////////////////////////////
// Name: xmlres.cpp
-// Purpose: XML resources
+// Purpose: XRC resources
// Author: Vaclav Slavik
// Created: 2000/03/05
// RCS-ID: $Id$
WX_DEFINE_OBJARRAY(wxXmlResourceDataRecords);
-wxXmlResource::wxXmlResource(bool use_locale)
+wxXmlResource::wxXmlResource(int flags)
{
m_handlers.DeleteContents(TRUE);
- m_useLocale = use_locale;
+ m_flags = flags;
m_version = -1;
}
-wxXmlResource::wxXmlResource(const wxString& filemask, bool use_locale)
+wxXmlResource::wxXmlResource(const wxString& filemask, int flags)
{
- m_useLocale = use_locale;
+ m_flags = flags;
m_version = -1;
m_handlers.DeleteContents(TRUE);
Load(filemask);
}
else if (m_data[i].Doc->GetRoot()->GetName() != wxT("resource"))
{
- wxLogError(_("Invalid XML resource '%s': doesn't have root node 'resource'."), m_data[i].File.c_str());
+ wxLogError(_("Invalid XRC resource '%s': doesn't have root node 'resource'."), m_data[i].File.c_str());
wxDELETE(m_data[i].Doc);
}
else
}
}
- wxLogError(_("XML resource '%s' (class '%s') not found!"),
+ wxLogError(_("XRC resource '%s' (class '%s') not found!"),
name.c_str(), classname.c_str());
return NULL;
}
wxObject *myParent = m_parent, *myInstance = m_instance;
wxWindow *myParentAW = m_parentAsWindow, *myInstanceAW = m_instanceAsWindow;
+ m_instance = instance;
+ if (!m_instance && node->HasProp(wxT("subclass")) &&
+ !(m_resource->GetFlags() & wxXRC_NO_SUBCLASSING))
+ {
+ wxString subclass = node->GetPropVal(wxT("subclass"), wxEmptyString);
+ wxClassInfo* classInfo = wxClassInfo::FindClass(subclass);
+
+ if (classInfo)
+ m_instance = classInfo->CreateObject();
+
+ if (!m_instance)
+ {
+ wxLogError(_("Subclass '%s' not found for resource '%s', not subclassing!"),
+ subclass.c_str(), node->GetPropVal(wxT("name"), wxEmptyString).c_str());
+ }
+
+ m_instance = classInfo->CreateObject();
+ }
+
m_node = node;
m_class = node->GetPropVal(wxT("class"), wxEmptyString);
m_parent = parent;
- m_instance = instance;
m_parentAsWindow = wxDynamicCast(m_parent, wxWindow);
m_instanceAsWindow = wxDynamicCast(m_instance, wxWindow);
void wxXmlResourceHandler::AddWindowStyles()
{
- ADD_STYLE(wxSIMPLE_BORDER);
- ADD_STYLE(wxSUNKEN_BORDER);
- ADD_STYLE(wxDOUBLE_BORDER);
- ADD_STYLE(wxRAISED_BORDER);
- ADD_STYLE(wxSTATIC_BORDER);
- ADD_STYLE(wxNO_BORDER);
- ADD_STYLE(wxTRANSPARENT_WINDOW);
- ADD_STYLE(wxWANTS_CHARS);
- ADD_STYLE(wxNO_FULL_REPAINT_ON_RESIZE);
+ XRC_ADD_STYLE(wxSIMPLE_BORDER);
+ XRC_ADD_STYLE(wxSUNKEN_BORDER);
+ XRC_ADD_STYLE(wxDOUBLE_BORDER);
+ XRC_ADD_STYLE(wxRAISED_BORDER);
+ XRC_ADD_STYLE(wxSTATIC_BORDER);
+ XRC_ADD_STYLE(wxNO_BORDER);
+ XRC_ADD_STYLE(wxTRANSPARENT_WINDOW);
+ XRC_ADD_STYLE(wxWANTS_CHARS);
+ XRC_ADD_STYLE(wxNO_FULL_REPAINT_ON_RESIZE);
}
wxString wxXmlResourceHandler::GetText(const wxString& param)
{
- wxString str1 = GetParamValue(param);
+ wxString str1;
wxString str2;
const wxChar *dt;
wxChar amp_char;
- // VS: First version of XML resources used $ instead of & (which is illegal in XML),
+ if (m_resource->GetFlags() & wxXRC_USE_LOCALE)
+ str1 = wxGetTranslation(GetParamValue(param));
+ else
+ str1 = GetParamValue(param);
+
+ // VS: First version of XRC resources used $ instead of & (which is illegal in XML),
// but later I realized that '_' fits this purpose much better (because
// &File means "File with F underlined").
if (m_resource->CompareVersion(2,3,0,1) < 0)
}
else str2 << *dt;
}
-
- if (m_resource->GetUseLocale())
- return wxGetTranslation(str2);
- else
- return str2;
+
+ return str2;
}
if (v.Length() != 7 || v[0u] != wxT('#') ||
wxSscanf(v.c_str(), wxT("#%lX"), &tmp) != 1)
{
- wxLogError(_("XML resource: Incorrect colour specification '%s' for property '%s'."),
+ wxLogError(_("XRC resource: Incorrect colour specification '%s' for property '%s'."),
v.c_str(), param.c_str());
return wxNullColour;
}
wxFSFile *fsfile = GetCurFileSystem().OpenFile(name);
if (fsfile == NULL)
{
- wxLogError(_("XML resource: Cannot create bitmap from '%s'."), param.c_str());
+ wxLogError(_("XRC resource: Cannot create bitmap from '%s'."), param.c_str());
return wxNullBitmap;
}
wxImage img(*(fsfile->GetStream()));
#endif
if (!img.Ok())
{
- wxLogError(_("XML resource: Cannot create bitmap from '%s'."), param.c_str());
+ wxLogError(_("XRC resource: Cannot create bitmap from '%s'."), param.c_str());
return wxNullBitmap;
}
if (!(size == wxDefaultSize)) img.Rescale(size.x, size.y);