1 /////////////////////////////////////////////////////////////////////////////
2 // Name: custompropertydialog.cpp
3 // Purpose: Custom property dialog
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
10 /////////////////////////////////////////////////////////////////////////////
12 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
13 #pragma implementation "custompropertydialog.h"
16 // For compilers that support precompilation, includes "wx/wx.h".
17 #include "wx/wxprec.h"
26 #include "wx/statline.h"
27 #include "wx/splitter.h"
28 #include "wx/scrolwin.h"
29 #include "wx/spinctrl.h"
30 #include "wx/spinbutt.h"
34 #include "wx/cshelp.h"
35 #include "wx/valgen.h"
36 #include "custompropertydialog.h"
42 * ctCustomPropertyDialog type definition
45 IMPLEMENT_CLASS( ctCustomPropertyDialog
, wxDialog
)
48 * ctCustomPropertyDialog event table definition
51 BEGIN_EVENT_TABLE( ctCustomPropertyDialog
, wxDialog
)
53 ////@begin ctCustomPropertyDialog event table entries
54 EVT_UPDATE_UI( ID_PROPERTY_CHOICES
, ctCustomPropertyDialog::OnUpdatePropertyChoices
)
56 EVT_BUTTON( ID_PROPERTY_CHOICE_ADD
, ctCustomPropertyDialog::OnPropertyChoiceAdd
)
57 EVT_UPDATE_UI( ID_PROPERTY_CHOICE_ADD
, ctCustomPropertyDialog::OnUpdatePropertyChoiceAdd
)
59 EVT_BUTTON( ID_PROPERTY_CHOICE_REMOVE
, ctCustomPropertyDialog::OnPropertyChoiceRemove
)
60 EVT_UPDATE_UI( ID_PROPERTY_CHOICE_REMOVE
, ctCustomPropertyDialog::OnUpdatePropertyChoiceRemove
)
62 ////@end ctCustomPropertyDialog event table entries
67 * ctCustomPropertyDialog constructor
70 ctCustomPropertyDialog::ctCustomPropertyDialog( wxWindow
* parent
, wxWindowID id
, const wxString
& caption
)
72 m_type
= wxT("string");
74 wxDialog::Create( parent
, id
, caption
);
80 * Control creation for ctCustomPropertyDialog
83 void ctCustomPropertyDialog::CreateControls()
85 ////@begin ctCustomPropertyDialog content construction
89 ctCustomPropertyDialog
* item1
= this;
91 wxBoxSizer
* item2
= new wxBoxSizer(wxVERTICAL
);
92 item1
->SetSizer(item2
);
94 wxBoxSizer
* item3
= new wxBoxSizer(wxVERTICAL
);
95 item2
->Add(item3
, 1, wxGROW
|wxALL
, 5);
97 wxStaticText
* item4
= new wxStaticText(item1
, wxID_STATIC
, _("&Enter name, type and description for your custom property."), wxDefaultPosition
, wxDefaultSize
, 0);
98 item3
->Add(item4
, 0, wxALIGN_LEFT
|wxALL
|wxADJUST_MINSIZE
, 5);
100 wxStaticText
* item5
= new wxStaticText(item1
, wxID_STATIC
, _("&Name:"), wxDefaultPosition
, wxDefaultSize
, 0);
101 item3
->Add(item5
, 0, wxALIGN_LEFT
|wxALL
|wxADJUST_MINSIZE
, 5);
103 m_customPropertyName
= new wxTextCtrl(item1
, wxID_ANY
);
104 item3
->Add(m_customPropertyName
, 0, wxGROW
|wxALL
, 5);
106 wxBoxSizer
* item7
= new wxBoxSizer(wxHORIZONTAL
);
107 item3
->Add(item7
, 0, wxGROW
, 5);
109 wxBoxSizer
* item8
= new wxBoxSizer(wxVERTICAL
);
110 item7
->Add(item8
, 1, wxGROW
, 5);
112 wxStaticText
* item9
= new wxStaticText(item1
, wxID_STATIC
, _("&Data type:"), wxDefaultPosition
, wxDefaultSize
, 0);
113 item8
->Add(item9
, 0, wxALIGN_LEFT
|wxALL
|wxADJUST_MINSIZE
, 5);
116 items
.Add(_("string"));
117 items
.Add(_("bool"));
118 items
.Add(_("double"));
119 items
.Add(_("long"));
120 m_customPrototype
= new wxChoice(item1
, wxID_ANY
, wxDefaultPosition
, wxDefaultSize
, items
);
121 m_customPrototype
->SetStringSelection(_("string"));
122 item8
->Add(m_customPrototype
, 1, wxGROW
|wxALL
, 5);
124 wxBoxSizer
* item11
= new wxBoxSizer(wxVERTICAL
);
125 item7
->Add(item11
, 0, wxALIGN_CENTER_VERTICAL
, 5);
127 wxStaticText
* item12
= new wxStaticText(item1
, wxID_STATIC
, _("&Editor type:"), wxDefaultPosition
, wxDefaultSize
, 0);
128 item11
->Add(item12
, 0, wxALIGN_LEFT
|wxALL
|wxADJUST_MINSIZE
, 5);
131 items
.Add(_("string"));
132 items
.Add(_("choice"));
133 items
.Add(_("bool"));
134 items
.Add(_("float"));
135 items
.Add(_("integer"));
136 items
.Add(_("configitems"));
137 m_customPropertyEditorType
= new wxChoice(item1
, wxID_ANY
, wxDefaultPosition
, wxDefaultSize
, items
);
138 m_customPropertyEditorType
->SetStringSelection(_("string"));
139 item11
->Add(m_customPropertyEditorType
, 1, wxGROW
|wxALL
, 5);
141 wxStaticBox
* item14Static
= new wxStaticBox(item1
, wxID_ANY
, _("Choices"));
142 wxStaticBoxSizer
* item14
= new wxStaticBoxSizer(item14Static
, wxHORIZONTAL
);
143 item3
->Add(item14
, 0, wxGROW
|wxALL
, 5);
145 wxString
* item15Strings
= NULL
;
146 m_propertyChoices
= new wxListBox(item1
, ID_PROPERTY_CHOICES
, wxDefaultPosition
, wxDefaultSize
, 0, item15Strings
, wxLB_SINGLE
);
147 item14
->Add(m_propertyChoices
, 1, wxALIGN_CENTER_VERTICAL
|wxALL
, 5);
149 wxBoxSizer
* item16
= new wxBoxSizer(wxVERTICAL
);
150 item14
->Add(item16
, 0, wxALIGN_CENTER_VERTICAL
, 5);
152 wxButton
* item17
= new wxButton(item1
, ID_PROPERTY_CHOICE_ADD
, _("&Add..."), wxDefaultPosition
, wxDefaultSize
, 0);
153 item16
->Add(item17
, 0, wxALIGN_CENTER_HORIZONTAL
|wxALL
, 5);
155 wxButton
* item18
= new wxButton(item1
, ID_PROPERTY_CHOICE_REMOVE
, _("&Remove"), wxDefaultPosition
, wxDefaultSize
, 0);
156 item16
->Add(item18
, 0, wxALIGN_CENTER_HORIZONTAL
|wxALL
, 5);
158 wxStaticText
* item19
= new wxStaticText(item1
, wxID_STATIC
, _("&Description:"), wxDefaultPosition
, wxDefaultSize
, 0);
159 item3
->Add(item19
, 0, wxALIGN_LEFT
|wxALL
|wxADJUST_MINSIZE
, 5);
161 m_customPropertyDescription
= new wxTextCtrl(item1
, wxID_ANY
, wxEmptyString
, wxDefaultPosition
, wxDefaultSize
, wxTE_MULTILINE
|wxTE_RICH
);
162 item3
->Add(m_customPropertyDescription
, 1, wxGROW
|wxALL
, 5);
164 wxBoxSizer
* item21
= new wxBoxSizer(wxHORIZONTAL
);
165 item3
->Add(item21
, 0, wxGROW
|wxALL
, 5);
167 item21
->Add(5, 5, 1, wxALIGN_CENTER_VERTICAL
|wxALL
, 5);
169 wxButton
* item23
= new wxButton(item1
, wxID_OK
);
170 item21
->Add(item23
, 0, wxALIGN_CENTER_VERTICAL
|wxALL
, 5);
172 wxButton
* item24
= new wxButton(item1
, wxID_CANCEL
);
173 item21
->Add(item24
, 0, wxALIGN_CENTER_VERTICAL
|wxALL
, 5);
175 wxButton
* item25
= new wxButton(item1
, wxID_HELP
);
176 item21
->Add(item25
, 0, wxALIGN_CENTER_VERTICAL
|wxALL
, 5);
178 GetSizer()->Fit(this);
179 GetSizer()->SetSizeHints(this);
181 ////@end ctCustomPropertyDialog content construction
184 m_customPropertyName
->SetValidator(wxGenericValidator(& m_name
));
185 m_customPrototype
->SetValidator(wxGenericValidator(& m_type
));
186 m_customPropertyEditorType
->SetValidator(wxGenericValidator(& m_editorType
));
187 m_customPropertyDescription
->SetValidator(wxGenericValidator(& m_description
));
191 * Should we show tooltips?
194 bool ctCustomPropertyDialog::ShowToolTips()
200 * Update event handler for ID_PROPERTY_CHOICES
203 void ctCustomPropertyDialog::OnUpdatePropertyChoices( wxUpdateUIEvent
& event
)
205 if(m_customPrototype
)
206 event
.Enable( m_customPrototype
->GetSelection() > -1 && m_customPrototype
->GetStringSelection() == wxT("choice") );
210 * Event handler for ID_PROPERTY_CHOICE_ADD
213 void ctCustomPropertyDialog::OnPropertyChoiceAdd( wxCommandEvent
& WXUNUSED(event
) )
215 if(m_customPrototype
)
217 if ( m_customPropertyEditorType
->GetSelection() > -1 && m_customPropertyEditorType
->GetStringSelection() == wxT("choice") )
219 wxString str
= wxGetTextFromUser(_T("New choice"), _("Add choice"));
220 if (!str
.empty() && m_propertyChoices
)
222 m_propertyChoices
->Append(str
);
230 * Update event handler for ID_PROPERTY_CHOICE_ADD
233 void ctCustomPropertyDialog::OnUpdatePropertyChoiceAdd( wxUpdateUIEvent
& event
)
235 if(m_customPropertyEditorType
)
236 event
.Enable( m_customPropertyEditorType
->GetSelection() > -1 &&
237 m_customPropertyEditorType
->GetStringSelection() == wxT("choice") );
241 * Event handler for ID_PROPERTY_CHOICE_REMOVE
244 void ctCustomPropertyDialog::OnPropertyChoiceRemove( wxCommandEvent
& WXUNUSED(event
) )
246 if (m_propertyChoices
&& m_propertyChoices
->GetSelection() > -1)
248 m_propertyChoices
->Delete(m_propertyChoices
->GetSelection());
249 m_choices
.RemoveAt(m_propertyChoices
->GetSelection());
254 * Update event handler for ID_PROPERTY_CHOICE_REMOVE
257 void ctCustomPropertyDialog::OnUpdatePropertyChoiceRemove( wxUpdateUIEvent
& event
)
259 if (m_customPropertyEditorType
&& m_propertyChoices
)
260 event
.Enable( m_customPropertyEditorType
->GetSelection() > -1 &&
261 m_customPropertyEditorType
->GetStringSelection() == wxT("choice") &&
262 m_propertyChoices
->GetSelection() > -1 );
265 void ctCustomPropertyDialog::SetChoices(const wxArrayString
& choices
)
267 size_t i
, len
= choices
.GetCount();
268 if (m_propertyChoices
)
269 for (i
= 0; i
< len
; i
++)
270 m_propertyChoices
->Append(m_choices
[i
]);