X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cefd71d783b6a5547d5078c38cd88dc3b928d1af..a619d8c95951074d3accea0d9709b4cad6491c6d:/src/xrc/xh_unkwn.cpp?ds=sidebyside diff --git a/src/xrc/xh_unkwn.cpp b/src/xrc/xh_unkwn.cpp index 143ddefb97..a5e869fb6a 100644 --- a/src/xrc/xh_unkwn.cpp +++ b/src/xrc/xh_unkwn.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: xh_unkwn.cpp -// Purpose: XML resource for unknown widget +// Name: src/xrc/xh_unkwn.cpp +// Purpose: XRC resource for unknown widget // Author: Vaclav Slavik // Created: 2000/09/09 // RCS-ID: $Id$ @@ -8,10 +8,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "xh_unkwn.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -19,11 +15,16 @@ #pragma hdrstop #endif +#if wxUSE_XRC + #include "wx/xrc/xh_unkwn.h" -#include "wx/window.h" -#include "wx/log.h" -#include "wx/sizer.h" -#include "wx/panel.h" + +#ifndef WX_PRECOMP + #include "wx/log.h" + #include "wx/window.h" + #include "wx/panel.h" + #include "wx/sizer.h" +#endif class wxUnknownControlContainer : public wxPanel @@ -31,18 +32,22 @@ class wxUnknownControlContainer : public wxPanel public: wxUnknownControlContainer(wxWindow *parent, const wxString& controlName, - wxWindowID id = -1, + wxWindowID id = wxID_ANY, 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; @@ -52,35 +57,46 @@ protected: void wxUnknownControlContainer::AddChild(wxWindowBase *child) { - wxASSERT_MSG( !m_controlAdded, wxT("Couldn't add two unknown controls to the same container!") ) + 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(wxXmlResource::GetXMLID(m_controlName)); - m_controlAdded = TRUE; + child->SetId(wxXmlResource::GetXRCID(m_controlName)); + m_controlAdded = true; wxSizer *sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add((wxWindow*)child, 1, wxEXPAND); - SetSizer(sizer); - SetAutoLayout(TRUE); - Layout(); + SetSizerAndFit(sizer); } +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()); + GetName(), wxID_ANY, + GetPosition(), GetSize(), + GetStyle(wxT("style"))); SetupWindow(panel); return panel; } @@ -90,3 +106,4 @@ bool wxUnknownWidgetXmlHandler::CanHandle(wxXmlNode *node) return IsOfClass(node, wxT("unknown")); } +#endif // wxUSE_XRC