!wxUSE_TOOLTIPS build fix.
[wxWidgets.git] / src / xrc / xh_radbx.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/xrc/xh_radbx.cpp
3 // Purpose: XRC resource for wxRadioBox
4 // Author: Bob Mitchell
5 // Created: 2000/03/21
6 // RCS-ID: $Id$
7 // Copyright: (c) 2000 Bob Mitchell and Verant Interactive
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
10
11 // For compilers that support precompilation, includes "wx.h".
12 #include "wx/wxprec.h"
13
14 #ifdef __BORLANDC__
15 #pragma hdrstop
16 #endif
17
18 #if wxUSE_XRC && wxUSE_RADIOBOX
19
20 #include "wx/xrc/xh_radbx.h"
21
22 #ifndef WX_PRECOMP
23 #include "wx/intl.h"
24 #endif
25
26 #include "wx/radiobox.h"
27
28 IMPLEMENT_DYNAMIC_CLASS(wxRadioBoxXmlHandler, wxXmlResourceHandler)
29
30 wxRadioBoxXmlHandler::wxRadioBoxXmlHandler()
31 : wxXmlResourceHandler(), m_insideBox(false)
32 {
33 XRC_ADD_STYLE(wxRA_SPECIFY_COLS);
34 XRC_ADD_STYLE(wxRA_HORIZONTAL);
35 XRC_ADD_STYLE(wxRA_SPECIFY_ROWS);
36 XRC_ADD_STYLE(wxRA_VERTICAL);
37 AddWindowStyles();
38 }
39
40 wxObject *wxRadioBoxXmlHandler::DoCreateResource()
41 {
42 if ( m_class == wxT("wxRadioBox"))
43 {
44 // find the selection
45 long selection = GetLong( wxT("selection"), -1 );
46
47 // need to build the list of strings from children
48 m_insideBox = true;
49 CreateChildrenPrivately( NULL, GetParamNode(wxT("content")));
50
51 wxString *strings;
52 if ( !labels.empty() )
53 {
54 strings = new wxString[labels.size()];
55 const unsigned count = labels.size();
56 for( unsigned i = 0; i < count; i++ )
57 strings[i] = labels[i];
58 }
59 else
60 {
61 strings = NULL;
62 }
63
64 XRC_MAKE_INSTANCE(control, wxRadioBox)
65
66 control->Create(m_parentAsWindow,
67 GetID(),
68 GetText(wxT("label")),
69 GetPosition(), GetSize(),
70 labels.size(),
71 strings,
72 GetLong(wxT("dimension"), 1),
73 GetStyle(),
74 wxDefaultValidator,
75 GetName());
76
77 delete[] strings;
78
79 if (selection != -1)
80 control->SetSelection(selection);
81
82 SetupWindow(control);
83
84 #if wxUSE_TOOLTIPS
85 const unsigned count = labels.size();
86 for( unsigned i = 0; i < count; i++ )
87 {
88 if ( !tooltips[i].empty() )
89 control->SetItemToolTip(i, tooltips[i]);
90 }
91 #endif // wxUSE_TOOLTIPS
92
93 labels.clear(); // dump the strings
94 tooltips.clear(); // dump the tooltips
95
96 return control;
97 }
98 else // inside the radiobox element
99 {
100 // we handle <item tooltip="...">Label</item> constructs here
101
102 wxString str = GetNodeContent(m_node);
103 wxString tooltip;
104 m_node->GetPropVal(wxT("tooltip"), &tooltip);
105
106 if (m_resource->GetFlags() & wxXRC_USE_LOCALE)
107 {
108 str = wxGetTranslation(str);
109 if ( !tooltip.empty() )
110 tooltip = wxGetTranslation(tooltip);
111 }
112
113 labels.push_back(str);
114 tooltips.push_back(tooltip);
115
116 return NULL;
117 }
118
119 }
120
121 bool wxRadioBoxXmlHandler::CanHandle(wxXmlNode *node)
122 {
123 return (IsOfClass(node, wxT("wxRadioBox")) ||
124 (m_insideBox && node->GetName() == wxT("item")));
125 }
126
127 #endif // wxUSE_XRC && wxUSE_RADIOBOX