X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e066e2566a4e5db3510fe6a204d66850eaeceade..dd107c50be43e8d4dbdba20df162faf119a3781c:/contrib/src/xml/xh_unkwn.cpp diff --git a/contrib/src/xml/xh_unkwn.cpp b/contrib/src/xml/xh_unkwn.cpp index 7c3f083417..73fcde27e5 100644 --- a/contrib/src/xml/xh_unkwn.cpp +++ b/contrib/src/xml/xh_unkwn.cpp @@ -22,40 +22,70 @@ #include "wx/xml/xh_unkwn.h" #include "wx/window.h" #include "wx/log.h" +#include "wx/sizer.h" + + +class wxUnknownControlContainer : public wxPanel +{ +public: + wxUnknownControlContainer(wxWindow *parent, + const wxString& controlName, + wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize) + : wxPanel(parent, id, pos, size, wxTAB_TRAVERSAL | wxNO_BORDER, + controlName + wxT("_container")), + m_controlName(controlName), m_controlAdded(FALSE) + { + m_bg = GetBackgroundColour(); + SetBackgroundColour(wxColour(255, 0, 255)); + } + + virtual void AddChild(wxWindowBase *child); + +protected: + wxString m_controlName; + bool m_controlAdded; + wxColour m_bg; +}; + +void wxUnknownControlContainer::AddChild(wxWindowBase *child) +{ + wxASSERT_MSG( !m_controlAdded, wxT("Couldn't add two unknown controls to the same container!") ) + + wxPanel::AddChild(child); + + SetBackgroundColour(m_bg); + child->SetName(m_controlName); + child->SetId(XMLID(m_controlName)); + m_controlAdded = TRUE; + + wxSizer *sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add((wxWindow*)child, 1, wxEXPAND); + SetSizer(sizer); + SetAutoLayout(TRUE); + Layout(); +} + wxUnknownWidgetXmlHandler::wxUnknownWidgetXmlHandler() : wxXmlResourceHandler() { - AddWindowStyles(); } wxObject *wxUnknownWidgetXmlHandler::DoCreateResource() { - long id = GetLong(_T("id"), -1); - wxString name = GetParamValue(_T("name")); - - wxWindow *wnd = NULL; - - if (id != -1) - wnd = m_ParentAsWindow->FindWindow(id); - if (wnd == NULL && !name.IsEmpty()) - wnd = m_ParentAsWindow->FindWindow(name); - - if (wnd == NULL) - wxLogError(_T("Cannot find specified window for class 'unknown' (id=%li, name='%s')."), id, name.mb_str()); - else - { - if (wnd->GetParent() != m_ParentAsWindow) - wnd->Reparent(m_ParentAsWindow); - SetupWindow(wnd); - } - - return wnd; + wxPanel *panel = + new wxUnknownControlContainer(m_parentAsWindow, + GetName(), -1, + GetPosition(), GetSize()); + SetupWindow(panel); + return panel; } bool wxUnknownWidgetXmlHandler::CanHandle(wxXmlNode *node) { - return IsOfClass(node, _T("unknown")); + return IsOfClass(node, wxT("unknown")); }