]> git.saurik.com Git - wxWidgets.git/blame - src/xrc/xh_unkwn.cpp
fixed problems with sometimes processing the events twice introduced in rev 1.170...
[wxWidgets.git] / src / xrc / xh_unkwn.cpp
CommitLineData
78d14f80
VS
1/////////////////////////////////////////////////////////////////////////////
2// Name: xh_unkwn.cpp
b5d6954b 3// Purpose: XRC resource for unknown widget
78d14f80
VS
4// Author: Vaclav Slavik
5// Created: 2000/09/09
6// RCS-ID: $Id$
7// Copyright: (c) 2000 Vaclav Slavik
8// Licence: wxWindows licence
9/////////////////////////////////////////////////////////////////////////////
cefd71d7 10
78d14f80
VS
11// For compilers that support precompilation, includes "wx.h".
12#include "wx/wxprec.h"
13
14#ifdef __BORLANDC__
15 #pragma hdrstop
16#endif
17
621be1ec 18#if wxUSE_XRC
a1e4ec87 19
78d14f80
VS
20#include "wx/xrc/xh_unkwn.h"
21#include "wx/window.h"
22#include "wx/log.h"
23#include "wx/sizer.h"
cefd71d7 24#include "wx/panel.h"
78d14f80
VS
25
26
27class wxUnknownControlContainer : public wxPanel
28{
29public:
30 wxUnknownControlContainer(wxWindow *parent,
31 const wxString& controlName,
f80ea77b 32 wxWindowID id = wxID_ANY,
78d14f80 33 const wxPoint& pos = wxDefaultPosition,
afe06a54 34 const wxSize& size = wxDefaultSize,
d1cc09bb
RD
35 long style = 0)
36 // Always add the wxTAB_TRAVERSAL and wxNO_BORDER styles to what comes
37 // from the XRC if anything.
38 : wxPanel(parent, id, pos, size, style | wxTAB_TRAVERSAL | wxNO_BORDER,
78d14f80 39 controlName + wxT("_container")),
5c451707 40 m_controlName(controlName), m_controlAdded(false)
78d14f80
VS
41 {
42 m_bg = GetBackgroundColour();
43 SetBackgroundColour(wxColour(255, 0, 255));
44 }
45
46 virtual void AddChild(wxWindowBase *child);
5c451707 47 virtual void RemoveChild(wxWindowBase *child);
cefd71d7 48
78d14f80
VS
49protected:
50 wxString m_controlName;
51 bool m_controlAdded;
52 wxColour m_bg;
53};
54
55void wxUnknownControlContainer::AddChild(wxWindowBase *child)
56{
63fd5f0b 57 wxASSERT_MSG( !m_controlAdded, wxT("Couldn't add two unknown controls to the same container!") );
78d14f80
VS
58
59 wxPanel::AddChild(child);
cefd71d7 60
78d14f80
VS
61 SetBackgroundColour(m_bg);
62 child->SetName(m_controlName);
5ed345b7 63 child->SetId(wxXmlResource::GetXRCID(m_controlName));
5c451707 64 m_controlAdded = true;
cefd71d7 65
78d14f80
VS
66 wxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);
67 sizer->Add((wxWindow*)child, 1, wxEXPAND);
68 SetSizer(sizer);
78d14f80
VS
69 Layout();
70}
71
5c451707
VS
72void wxUnknownControlContainer::RemoveChild(wxWindowBase *child)
73{
74 wxPanel::RemoveChild(child);
75 m_controlAdded = false;
76 GetSizer()->Detach((wxWindow*)child);
77}
78d14f80
VS
78
79
854e189f
VS
80IMPLEMENT_DYNAMIC_CLASS(wxUnknownWidgetXmlHandler, wxXmlResourceHandler)
81
cefd71d7
RD
82wxUnknownWidgetXmlHandler::wxUnknownWidgetXmlHandler()
83: wxXmlResourceHandler()
78d14f80 84{
afe06a54 85 XRC_ADD_STYLE(wxNO_FULL_REPAINT_ON_RESIZE);
78d14f80
VS
86}
87
88wxObject *wxUnknownWidgetXmlHandler::DoCreateResource()
cefd71d7 89{
9f01cb29
VS
90 wxASSERT_MSG( m_instance == NULL,
91 _T("'unknown' controls can't be subclassed, use wxXmlResource::AttachUnknownControl") );
92
cefd71d7 93 wxPanel *panel =
78d14f80 94 new wxUnknownControlContainer(m_parentAsWindow,
f80ea77b 95 GetName(), wxID_ANY,
afe06a54 96 GetPosition(), GetSize(),
d1cc09bb 97 GetStyle(wxT("style")));
78d14f80
VS
98 SetupWindow(panel);
99 return panel;
100}
101
102bool wxUnknownWidgetXmlHandler::CanHandle(wxXmlNode *node)
103{
104 return IsOfClass(node, wxT("unknown"));
105}
106
a1e4ec87 107#endif // wxUSE_XRC