]>
Commit | Line | Data |
---|---|---|
d7463f75 JS |
1 | ///////////////////////////////////////////////////////////////////////////// |
2 | // Name: custompropertydialog.cpp | |
3 | // Purpose: Custom property dialog | |
4 | // Author: Julian Smart | |
5 | // Modified by: | |
6 | // Created: 2003-06-04 | |
7 | // RCS-ID: $Id$ | |
8 | // Copyright: (c) Julian Smart | |
9 | // Licence: | |
10 | ///////////////////////////////////////////////////////////////////////////// | |
11 | ||
d9ab621e WS |
12 | // For compilers that support precompilation, includes "wx/wx.h". |
13 | #include "wx/wxprec.h" | |
d7463f75 | 14 | |
d9ab621e WS |
15 | #ifdef __BORLANDC__ |
16 | #pragma hdrstop | |
17 | #endif | |
18 | ||
19 | #ifndef WX_PRECOMP | |
20 | ||
21 | #include "wx/wx.h" | |
22 | #include "wx/statline.h" | |
23 | #include "wx/splitter.h" | |
24 | #include "wx/scrolwin.h" | |
25 | #include "wx/spinctrl.h" | |
26 | #include "wx/spinbutt.h" | |
27 | ||
28 | #endif | |
29 | ||
30 | #include "wx/cshelp.h" | |
31 | #include "wx/valgen.h" | |
d7463f75 JS |
32 | #include "custompropertydialog.h" |
33 | ||
34 | ////@begin XPM images | |
35 | ////@end XPM images | |
36 | ||
37 | /*! | |
38 | * ctCustomPropertyDialog type definition | |
39 | */ | |
40 | ||
41 | IMPLEMENT_CLASS( ctCustomPropertyDialog, wxDialog ) | |
42 | ||
43 | /*! | |
44 | * ctCustomPropertyDialog event table definition | |
45 | */ | |
46 | ||
47 | BEGIN_EVENT_TABLE( ctCustomPropertyDialog, wxDialog ) | |
48 | ||
49 | ////@begin ctCustomPropertyDialog event table entries | |
50 | EVT_UPDATE_UI( ID_PROPERTY_CHOICES, ctCustomPropertyDialog::OnUpdatePropertyChoices ) | |
51 | ||
52 | EVT_BUTTON( ID_PROPERTY_CHOICE_ADD, ctCustomPropertyDialog::OnPropertyChoiceAdd ) | |
53 | EVT_UPDATE_UI( ID_PROPERTY_CHOICE_ADD, ctCustomPropertyDialog::OnUpdatePropertyChoiceAdd ) | |
54 | ||
55 | EVT_BUTTON( ID_PROPERTY_CHOICE_REMOVE, ctCustomPropertyDialog::OnPropertyChoiceRemove ) | |
56 | EVT_UPDATE_UI( ID_PROPERTY_CHOICE_REMOVE, ctCustomPropertyDialog::OnUpdatePropertyChoiceRemove ) | |
57 | ||
58 | ////@end ctCustomPropertyDialog event table entries | |
59 | ||
60 | END_EVENT_TABLE() | |
61 | ||
62 | /*! | |
63 | * ctCustomPropertyDialog constructor | |
64 | */ | |
65 | ||
d9ab621e | 66 | ctCustomPropertyDialog::ctCustomPropertyDialog( wxWindow* parent, wxWindowID id, const wxString& caption) |
d7463f75 JS |
67 | { |
68 | m_type = wxT("string"); | |
69 | ||
d9ab621e | 70 | wxDialog::Create( parent, id, caption); |
d7463f75 JS |
71 | |
72 | CreateControls(); | |
73 | } | |
74 | ||
75 | /*! | |
76 | * Control creation for ctCustomPropertyDialog | |
77 | */ | |
78 | ||
79 | void ctCustomPropertyDialog::CreateControls() | |
dabbc6a5 | 80 | { |
d7463f75 JS |
81 | ////@begin ctCustomPropertyDialog content construction |
82 | ||
d9ab621e WS |
83 | wxArrayString items; |
84 | ||
d7463f75 JS |
85 | ctCustomPropertyDialog* item1 = this; |
86 | ||
87 | wxBoxSizer* item2 = new wxBoxSizer(wxVERTICAL); | |
88 | item1->SetSizer(item2); | |
d7463f75 JS |
89 | |
90 | wxBoxSizer* item3 = new wxBoxSizer(wxVERTICAL); | |
91 | item2->Add(item3, 1, wxGROW|wxALL, 5); | |
92 | ||
93 | wxStaticText* item4 = new wxStaticText(item1, wxID_STATIC, _("&Enter name, type and description for your custom property."), wxDefaultPosition, wxDefaultSize, 0); | |
94 | item3->Add(item4, 0, wxALIGN_LEFT|wxALL|wxADJUST_MINSIZE, 5); | |
95 | ||
96 | wxStaticText* item5 = new wxStaticText(item1, wxID_STATIC, _("&Name:"), wxDefaultPosition, wxDefaultSize, 0); | |
97 | item3->Add(item5, 0, wxALIGN_LEFT|wxALL|wxADJUST_MINSIZE, 5); | |
98 | ||
d9ab621e WS |
99 | m_customPropertyName = new wxTextCtrl(item1, wxID_ANY); |
100 | item3->Add(m_customPropertyName, 0, wxGROW|wxALL, 5); | |
d7463f75 JS |
101 | |
102 | wxBoxSizer* item7 = new wxBoxSizer(wxHORIZONTAL); | |
103 | item3->Add(item7, 0, wxGROW, 5); | |
104 | ||
105 | wxBoxSizer* item8 = new wxBoxSizer(wxVERTICAL); | |
106 | item7->Add(item8, 1, wxGROW, 5); | |
107 | ||
108 | wxStaticText* item9 = new wxStaticText(item1, wxID_STATIC, _("&Data type:"), wxDefaultPosition, wxDefaultSize, 0); | |
109 | item8->Add(item9, 0, wxALIGN_LEFT|wxALL|wxADJUST_MINSIZE, 5); | |
110 | ||
d9ab621e WS |
111 | items.Empty(); |
112 | items.Add(_("string")); | |
113 | items.Add(_("bool")); | |
114 | items.Add(_("double")); | |
115 | items.Add(_("long")); | |
116 | m_customPrototype = new wxChoice(item1, wxID_ANY, wxDefaultPosition, wxDefaultSize, items); | |
117 | m_customPrototype->SetStringSelection(_("string")); | |
118 | item8->Add(m_customPrototype, 1, wxGROW|wxALL, 5); | |
d7463f75 JS |
119 | |
120 | wxBoxSizer* item11 = new wxBoxSizer(wxVERTICAL); | |
121 | item7->Add(item11, 0, wxALIGN_CENTER_VERTICAL, 5); | |
122 | ||
123 | wxStaticText* item12 = new wxStaticText(item1, wxID_STATIC, _("&Editor type:"), wxDefaultPosition, wxDefaultSize, 0); | |
124 | item11->Add(item12, 0, wxALIGN_LEFT|wxALL|wxADJUST_MINSIZE, 5); | |
125 | ||
d9ab621e WS |
126 | items.Empty(); |
127 | items.Add(_("string")); | |
128 | items.Add(_("choice")); | |
129 | items.Add(_("bool")); | |
130 | items.Add(_("float")); | |
131 | items.Add(_("integer")); | |
132 | items.Add(_("configitems")); | |
133 | m_customPropertyEditorType = new wxChoice(item1, wxID_ANY, wxDefaultPosition, wxDefaultSize, items); | |
134 | m_customPropertyEditorType->SetStringSelection(_("string")); | |
135 | item11->Add(m_customPropertyEditorType, 1, wxGROW|wxALL, 5); | |
d7463f75 | 136 | |
4fe30bce | 137 | wxStaticBox* item14Static = new wxStaticBox(item1, wxID_ANY, _("Choices")); |
d7463f75 JS |
138 | wxStaticBoxSizer* item14 = new wxStaticBoxSizer(item14Static, wxHORIZONTAL); |
139 | item3->Add(item14, 0, wxGROW|wxALL, 5); | |
140 | ||
141 | wxString* item15Strings = NULL; | |
d9ab621e WS |
142 | m_propertyChoices = new wxListBox(item1, ID_PROPERTY_CHOICES, wxDefaultPosition, wxDefaultSize, 0, item15Strings, wxLB_SINGLE); |
143 | item14->Add(m_propertyChoices, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5); | |
d7463f75 JS |
144 | |
145 | wxBoxSizer* item16 = new wxBoxSizer(wxVERTICAL); | |
146 | item14->Add(item16, 0, wxALIGN_CENTER_VERTICAL, 5); | |
147 | ||
148 | wxButton* item17 = new wxButton(item1, ID_PROPERTY_CHOICE_ADD, _("&Add..."), wxDefaultPosition, wxDefaultSize, 0); | |
149 | item16->Add(item17, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); | |
150 | ||
151 | wxButton* item18 = new wxButton(item1, ID_PROPERTY_CHOICE_REMOVE, _("&Remove"), wxDefaultPosition, wxDefaultSize, 0); | |
152 | item16->Add(item18, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); | |
153 | ||
154 | wxStaticText* item19 = new wxStaticText(item1, wxID_STATIC, _("&Description:"), wxDefaultPosition, wxDefaultSize, 0); | |
155 | item3->Add(item19, 0, wxALIGN_LEFT|wxALL|wxADJUST_MINSIZE, 5); | |
156 | ||
d9ab621e WS |
157 | m_customPropertyDescription = new wxTextCtrl(item1, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_RICH); |
158 | item3->Add(m_customPropertyDescription, 1, wxGROW|wxALL, 5); | |
d7463f75 JS |
159 | |
160 | wxBoxSizer* item21 = new wxBoxSizer(wxHORIZONTAL); | |
161 | item3->Add(item21, 0, wxGROW|wxALL, 5); | |
162 | ||
163 | item21->Add(5, 5, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5); | |
164 | ||
677ded95 | 165 | wxButton* item23 = new wxButton(item1, wxID_OK); |
d7463f75 JS |
166 | item21->Add(item23, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); |
167 | ||
677ded95 | 168 | wxButton* item24 = new wxButton(item1, wxID_CANCEL); |
d7463f75 JS |
169 | item21->Add(item24, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); |
170 | ||
677ded95 | 171 | wxButton* item25 = new wxButton(item1, wxID_HELP); |
d7463f75 JS |
172 | item21->Add(item25, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); |
173 | ||
174 | GetSizer()->Fit(this); | |
175 | GetSizer()->SetSizeHints(this); | |
176 | Centre(); | |
177 | ////@end ctCustomPropertyDialog content construction | |
178 | ||
179 | // Add validators | |
d9ab621e WS |
180 | m_customPropertyName->SetValidator(wxGenericValidator(& m_name)); |
181 | m_customPrototype->SetValidator(wxGenericValidator(& m_type)); | |
182 | m_customPropertyEditorType->SetValidator(wxGenericValidator(& m_editorType)); | |
183 | m_customPropertyDescription->SetValidator(wxGenericValidator(& m_description)); | |
d7463f75 JS |
184 | } |
185 | ||
186 | /*! | |
187 | * Should we show tooltips? | |
188 | */ | |
189 | ||
190 | bool ctCustomPropertyDialog::ShowToolTips() | |
191 | { | |
4fe30bce | 192 | return true; |
d7463f75 JS |
193 | } |
194 | ||
195 | /*! | |
196 | * Update event handler for ID_PROPERTY_CHOICES | |
197 | */ | |
198 | ||
199 | void ctCustomPropertyDialog::OnUpdatePropertyChoices( wxUpdateUIEvent& event ) | |
200 | { | |
d9ab621e WS |
201 | if(m_customPrototype) |
202 | event.Enable( m_customPrototype->GetSelection() > -1 && m_customPrototype->GetStringSelection() == wxT("choice") ); | |
d7463f75 JS |
203 | } |
204 | ||
205 | /*! | |
206 | * Event handler for ID_PROPERTY_CHOICE_ADD | |
207 | */ | |
208 | ||
69da0d99 | 209 | void ctCustomPropertyDialog::OnPropertyChoiceAdd( wxCommandEvent& WXUNUSED(event) ) |
d7463f75 | 210 | { |
d9ab621e | 211 | if(m_customPrototype) |
d7463f75 | 212 | { |
d9ab621e | 213 | if ( m_customPropertyEditorType->GetSelection() > -1 && m_customPropertyEditorType->GetStringSelection() == wxT("choice") ) |
d7463f75 | 214 | { |
d9ab621e | 215 | wxString str = wxGetTextFromUser(_T("New choice"), _("Add choice")); |
677ded95 | 216 | if (!str.empty() && m_propertyChoices) |
d9ab621e WS |
217 | { |
218 | m_propertyChoices->Append(str); | |
219 | m_choices.Add(str); | |
220 | } | |
d7463f75 JS |
221 | } |
222 | } | |
223 | } | |
224 | ||
225 | /*! | |
226 | * Update event handler for ID_PROPERTY_CHOICE_ADD | |
227 | */ | |
228 | ||
229 | void ctCustomPropertyDialog::OnUpdatePropertyChoiceAdd( wxUpdateUIEvent& event ) | |
230 | { | |
d9ab621e | 231 | if(m_customPropertyEditorType) |
677ded95 | 232 | event.Enable( m_customPropertyEditorType->GetSelection() > -1 && |
d9ab621e | 233 | m_customPropertyEditorType->GetStringSelection() == wxT("choice") ); |
d7463f75 JS |
234 | } |
235 | ||
236 | /*! | |
237 | * Event handler for ID_PROPERTY_CHOICE_REMOVE | |
238 | */ | |
239 | ||
69da0d99 | 240 | void ctCustomPropertyDialog::OnPropertyChoiceRemove( wxCommandEvent& WXUNUSED(event) ) |
d7463f75 | 241 | { |
d9ab621e | 242 | if (m_propertyChoices && m_propertyChoices->GetSelection() > -1) |
d7463f75 | 243 | { |
d9ab621e WS |
244 | m_propertyChoices->Delete(m_propertyChoices->GetSelection()); |
245 | m_choices.RemoveAt(m_propertyChoices->GetSelection()); | |
d7463f75 JS |
246 | } |
247 | } | |
248 | ||
249 | /*! | |
250 | * Update event handler for ID_PROPERTY_CHOICE_REMOVE | |
251 | */ | |
252 | ||
253 | void ctCustomPropertyDialog::OnUpdatePropertyChoiceRemove( wxUpdateUIEvent& event ) | |
254 | { | |
d9ab621e | 255 | if (m_customPropertyEditorType && m_propertyChoices) |
677ded95 | 256 | event.Enable( m_customPropertyEditorType->GetSelection() > -1 && |
d9ab621e WS |
257 | m_customPropertyEditorType->GetStringSelection() == wxT("choice") && |
258 | m_propertyChoices->GetSelection() > -1 ); | |
d7463f75 JS |
259 | } |
260 | ||
261 | void ctCustomPropertyDialog::SetChoices(const wxArrayString& choices) | |
262 | { | |
d7463f75 | 263 | size_t i, len = choices.GetCount(); |
d9ab621e WS |
264 | if (m_propertyChoices) |
265 | for (i = 0; i < len; i++) | |
266 | m_propertyChoices->Append(m_choices[i]); | |
d7463f75 | 267 | } |