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:
@@ -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)
|
||||||
|
Reference in New Issue
Block a user