X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1c8ac192c68b3ac8fb6b8c1bca23d9c735de1727..9c9fc51ba750e043fe816d85bf82f15f2468e573:/contrib/src/xml/xh_unkwn.cpp diff --git a/contrib/src/xml/xh_unkwn.cpp b/contrib/src/xml/xh_unkwn.cpp index d9a05b7c52..e71cc914fc 100644 --- a/contrib/src/xml/xh_unkwn.cpp +++ b/contrib/src/xml/xh_unkwn.cpp @@ -22,40 +22,69 @@ #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); + 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 (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(), GetID(), + GetPosition(), GetSize()); + SetupWindow(panel); + return panel; } bool wxUnknownWidgetXmlHandler::CanHandle(wxXmlNode *node) { - return node->GetName() == _T("unknown"); + return IsOfClass(node, wxT("unknown")); }