X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/63fd5f0b273fd2e8d663a671731dec3ee7564f72..1d529ef7eed851db9d007821decb9639e4e7fc16:/contrib/src/xrc/xh_unkwn.cpp?ds=sidebyside diff --git a/contrib/src/xrc/xh_unkwn.cpp b/contrib/src/xrc/xh_unkwn.cpp index 99a514c18f..cad645b68b 100644 --- a/contrib/src/xrc/xh_unkwn.cpp +++ b/contrib/src/xrc/xh_unkwn.cpp @@ -33,16 +33,20 @@ public: const wxString& controlName, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize) - : wxPanel(parent, id, pos, size, wxTAB_TRAVERSAL | wxNO_BORDER, + const wxSize& size = wxDefaultSize, + long style = 0) + // Always add the wxTAB_TRAVERSAL and wxNO_BORDER styles to what comes + // from the XRC if anything. + : wxPanel(parent, id, pos, size, style | wxTAB_TRAVERSAL | wxNO_BORDER, controlName + wxT("_container")), - m_controlName(controlName), m_controlAdded(FALSE) + m_controlName(controlName), m_controlAdded(false) { m_bg = GetBackgroundColour(); SetBackgroundColour(wxColour(255, 0, 255)); } virtual void AddChild(wxWindowBase *child); + virtual void RemoveChild(wxWindowBase *child); protected: wxString m_controlName; @@ -59,28 +63,41 @@ void wxUnknownControlContainer::AddChild(wxWindowBase *child) SetBackgroundColour(m_bg); child->SetName(m_controlName); child->SetId(wxXmlResource::GetXRCID(m_controlName)); - m_controlAdded = TRUE; + m_controlAdded = true; wxSizer *sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add((wxWindow*)child, 1, wxEXPAND); SetSizer(sizer); - SetAutoLayout(TRUE); + SetAutoLayout(true); Layout(); } +void wxUnknownControlContainer::RemoveChild(wxWindowBase *child) +{ + wxPanel::RemoveChild(child); + m_controlAdded = false; + GetSizer()->Detach((wxWindow*)child); +} +IMPLEMENT_DYNAMIC_CLASS(wxUnknownWidgetXmlHandler, wxXmlResourceHandler) + wxUnknownWidgetXmlHandler::wxUnknownWidgetXmlHandler() : wxXmlResourceHandler() { + XRC_ADD_STYLE(wxNO_FULL_REPAINT_ON_RESIZE); } wxObject *wxUnknownWidgetXmlHandler::DoCreateResource() { + wxASSERT_MSG( m_instance == NULL, + _T("'unknown' controls can't be subclassed, use wxXmlResource::AttachUnknownControl") ); + wxPanel *panel = new wxUnknownControlContainer(m_parentAsWindow, GetName(), -1, - GetPosition(), GetSize()); + GetPosition(), GetSize(), + GetStyle(wxT("style"))); SetupWindow(panel); return panel; }