X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bc151e848625bde6b087175bb0861b980d249ed0..a1abca322fd7a9a7abe6cc0b144987786faa0f05:/utils/wxrc/wxrc.cpp?ds=inline diff --git a/utils/wxrc/wxrc.cpp b/utils/wxrc/wxrc.cpp index 22177386af..5c6a927501 100644 --- a/utils/wxrc/wxrc.cpp +++ b/utils/wxrc/wxrc.cpp @@ -27,7 +27,9 @@ #include "wx/filename.h" #include "wx/wfstream.h" #include "wx/utils.h" +#include "wx/hashset.h" +WX_DECLARE_HASH_SET(wxString, wxStringHash, wxStringEqual, StringSet); class XRCWidgetData { @@ -50,6 +52,7 @@ class XRCWndClassData private: wxString m_className; wxString m_parentClassName; + StringSet m_ancestorClassNames; ArrayOfXRCWidgetData m_wdata; void BrowseXmlNode(wxXmlNode* node) @@ -73,9 +76,31 @@ private: } 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) { + 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()); } @@ -84,14 +109,17 @@ public: return m_wdata; } - bool IsRealClass(const wxString& name) + bool CanBeUsedWithXRCCTRL(const wxString& name) { if (name == _T("tool") || + name == _T("data") || name == _T("unknown") || name == _T("notebookpage") || name == _T("separator") || name == _T("sizeritem") || - name == _T("wxMenuItem")) + name == _T("wxMenuBar") || + name == _T("wxMenuItem") || + name == _T("wxStaticBoxSizer") ) { return false; } @@ -104,25 +132,25 @@ public: file.Write(_T("class ") + m_className + _T(" : public ") + m_parentClassName + _T(" {\nprotected:\n")); size_t i; - for(i=0;iLoadObject(this,NULL,_T(\"") + file.Write(_T("\nprivate:\n void InitWidgetsFromXRC(wxWindow *parent){\n") + _T(" wxXmlResource::Get()->LoadObject(this,parent,_T(\"") + m_className + _T("\"), _T(\"") + m_parentClassName + _T("\"));\n")); - for(i=0;iGetPropVal(_T("class"), wxEmptyString); - if (klass == _T("wxBitmap") || klass == _T("wxIcon")) + if (klass == _T("wxBitmap") || + klass == _T("wxIcon") || + klass == _T("data") ) return true; } @@ -462,7 +513,7 @@ void XmlResApp::FindFilesInXML(wxXmlNode *node, wxArrayString& flist, const wxSt void XmlResApp::DeleteTempFiles(const wxArrayString& flist) { - for (size_t i = 0; i < flist.Count(); i++) + for (size_t i = 0; i < flist.GetCount(); i++) wxRemoveFile(parOutputPath + wxFILE_SEP_PATH + flist[i]); } @@ -472,7 +523,7 @@ void XmlResApp::MakePackageZIP(const wxArrayString& flist) { wxString files; - for (size_t i = 0; i < flist.Count(); i++) + for (size_t i = 0; i < flist.GetCount(); i++) files += flist[i] + _T(" "); files.RemoveLast(); @@ -563,7 +614,7 @@ _T("#include \n") _T("#include \n") _T("\n")); - for (i = 0; i < flist.Count(); i++) + for (i = 0; i < flist.GetCount(); i++) file.Write( FileToCppArray(parOutputPath + wxFILE_SEP_PATH + flist[i], i)); @@ -582,7 +633,7 @@ _T(" else wxFileSystem::AddHandler(new wxMemoryFSHandler);\n") _T(" }\n") _T("\n")); - for (i = 0; i < flist.Count(); i++) + for (i = 0; i < flist.GetCount(); i++) { wxString s; s.Printf(_T(" wxMemoryFSHandler::AddFile(wxT(\"XRC_resource/") + flist[i] + @@ -590,7 +641,7 @@ _T("\n")); file.Write(s); } - for (i = 0; i < parFiles.Count(); i++) + for (i = 0; i < parFiles.GetCount(); i++) { file.Write(_T(" wxXmlResource::Get()->Load(wxT(\"memory:XRC_resource/") + GetInternalFileName(parFiles[i], flist) + _T("\"));\n")); @@ -614,7 +665,7 @@ _T("//\n\n") _T("#ifndef __") + fileSpec + _T("_h__\n") _T("#define __") + fileSpec + _T("_h__\n") ); - for(size_t i=0;i