generate ctors with optional parent parameters in C++ code (patch 1238355)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39096 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-05-06 22:53:06 +00:00
parent c01d5de838
commit aac18ec71e

View File

@@ -27,7 +27,9 @@
#include "wx/filename.h" #include "wx/filename.h"
#include "wx/wfstream.h" #include "wx/wfstream.h"
#include "wx/utils.h" #include "wx/utils.h"
#include "wx/hashset.h"
WX_DECLARE_HASH_SET(wxString, wxStringHash, wxStringEqual, StringSet);
class XRCWidgetData class XRCWidgetData
{ {
@@ -50,6 +52,7 @@ class XRCWndClassData
private: private:
wxString m_className; wxString m_className;
wxString m_parentClassName; wxString m_parentClassName;
StringSet m_ancestorClassNames;
ArrayOfXRCWidgetData m_wdata; ArrayOfXRCWidgetData m_wdata;
void BrowseXmlNode(wxXmlNode* node) void BrowseXmlNode(wxXmlNode* node)
@@ -73,9 +76,31 @@ private:
} }
public: public:
XRCWndClassData(const wxString& className,const wxString& parentClassName, const wxXmlNode* node) : XRCWndClassData(const wxString& className,
const wxString& parentClassName,
const wxXmlNode* node) :
m_className(className) , m_parentClassName(parentClassName) m_className(className) , m_parentClassName(parentClassName)
{ {
if ( className == _T("wxMenu") )
{
m_ancestorClassNames.insert(_T("wxMenu"));
m_ancestorClassNames.insert(_T("wxMenuBar"));
}
else if ( className == _T("wxMDIChildFrame") )
{
m_ancestorClassNames.insert(_T("wxMDIParentFrame"));
}
else if( className == _T("wxMenuBar") ||
className == _T("wxStatusBar") ||
className == _T("wxToolBar") )
{
m_ancestorClassNames.insert(_T("wxFrame"));
}
else
{
m_ancestorClassNames.insert(_T("wxWindow"));
}
BrowseXmlNode(node->GetChildren()); BrowseXmlNode(node->GetChildren());
} }
@@ -113,8 +138,8 @@ public:
_T(" ") + w.GetClass() + _T("* ") + w.GetName() _T(" ") + w.GetClass() + _T("* ") + w.GetName()
+ _T(";\n")); + _T(";\n"));
} }
file.Write(_T("\nprivate:\n void InitWidgetsFromXRC(){\n") file.Write(_T("\nprivate:\n void InitWidgetsFromXRC(wxWindow *parent){\n")
_T(" wxXmlResource::Get()->LoadObject(this,NULL,_T(\"") _T(" wxXmlResource::Get()->LoadObject(this,parent,_T(\"")
+ m_className + m_className
+ _T("\"), _T(\"") + _T("\"), _T(\"")
+ m_parentClassName + m_parentClassName
@@ -130,22 +155,43 @@ public:
+ w.GetName() + w.GetName()
+ _T("\",") + _T("\",")
+ w.GetClass() + w.GetClass()
+ _T(");\n") + _T(");\n"));
);
} }
file.Write(_T(" }\n")); file.Write(_T(" }\n"));
file.Write( file.Write( _T("public:\n"));
_T("public:\n")
+ m_className if ( m_ancestorClassNames.size() == 1 )
+ _T("::") {
+ m_className file.Write
+ _T("(){\n") (
+ _T(" InitWidgetsFromXRC();\n") m_className +
_T(" }\n") _T("(") +
_T("};\n") *m_ancestorClassNames.begin() +
); _T(" *parent=NULL){\n") +
}; _T(" InitWidgetsFromXRC((wxWindow *)parent);\n")
_T(" }\n")
_T("};\n")
);
}
else
{
file.Write(m_className + _T("(){\n") +
_T(" InitWidgetsFromXRC(NULL);\n")
_T(" }\n")
_T("};\n"));
for ( StringSet::const_iterator it = m_ancestorClassNames.begin();
it != m_ancestorClassNames.end();
++it )
{
file.Write(m_className + _T("(") + *it + _T(" *parent){\n") +
_T(" InitWidgetsFromXRC((wxWindow *)parent);\n")
_T(" }\n")
_T("};\n"));
}
}
}
}; };
WX_DECLARE_OBJARRAY(XRCWndClassData,ArrayOfXRCWndClassData); WX_DECLARE_OBJARRAY(XRCWndClassData,ArrayOfXRCWndClassData);
WX_DEFINE_OBJARRAY(ArrayOfXRCWndClassData) WX_DEFINE_OBJARRAY(ArrayOfXRCWndClassData)