]> git.saurik.com Git - wxWidgets.git/blob - include/wx/generic/choicdgg.h
added template wxScopedArray<> too
[wxWidgets.git] / include / wx / generic / choicdgg.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/generic/choicdgg.h
3 // Purpose: Generic choice dialogs
4 // Author: Julian Smart
5 // Modified by: 03.11.00: VZ to add wxArrayString and multiple sel functions
6 // Created: 01/02/97
7 // RCS-ID: $Id$
8 // Copyright: (c) wxWidgets team
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_GENERIC_CHOICDGG_H_
13 #define _WX_GENERIC_CHOICDGG_H_
14
15 #include "wx/dynarray.h"
16 #include "wx/dialog.h"
17
18 class WXDLLIMPEXP_FWD_CORE wxListBoxBase;
19
20 // ----------------------------------------------------------------------------
21 // some (ugly...) constants
22 // ----------------------------------------------------------------------------
23
24 #define wxCHOICE_HEIGHT 150
25 #define wxCHOICE_WIDTH 200
26
27 #ifdef __WXWINCE__
28 #define wxCHOICEDLG_STYLE \
29 (wxDEFAULT_DIALOG_STYLE | wxOK | wxCANCEL | wxCENTRE)
30 #else
31 #define wxCHOICEDLG_STYLE \
32 (wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxOK | wxCANCEL | wxCENTRE)
33 #endif
34
35 // ----------------------------------------------------------------------------
36 // wxAnyChoiceDialog: a base class for dialogs containing a listbox
37 // ----------------------------------------------------------------------------
38
39 class WXDLLIMPEXP_CORE wxAnyChoiceDialog : public wxDialog
40 {
41 public:
42 wxAnyChoiceDialog() { }
43
44 wxAnyChoiceDialog(wxWindow *parent,
45 const wxString& message,
46 const wxString& caption,
47 int n, const wxString *choices,
48 long styleDlg = wxCHOICEDLG_STYLE,
49 const wxPoint& pos = wxDefaultPosition,
50 long styleLbox = wxLB_ALWAYS_SB)
51 {
52 (void)Create(parent, message, caption, n, choices,
53 styleDlg, pos, styleLbox);
54 }
55 wxAnyChoiceDialog(wxWindow *parent,
56 const wxString& message,
57 const wxString& caption,
58 const wxArrayString& choices,
59 long styleDlg = wxCHOICEDLG_STYLE,
60 const wxPoint& pos = wxDefaultPosition,
61 long styleLbox = wxLB_ALWAYS_SB)
62 {
63 (void)Create(parent, message, caption, choices,
64 styleDlg, pos, styleLbox);
65 }
66
67 bool Create(wxWindow *parent,
68 const wxString& message,
69 const wxString& caption,
70 int n, const wxString *choices,
71 long styleDlg = wxCHOICEDLG_STYLE,
72 const wxPoint& pos = wxDefaultPosition,
73 long styleLbox = wxLB_ALWAYS_SB);
74 bool Create(wxWindow *parent,
75 const wxString& message,
76 const wxString& caption,
77 const wxArrayString& choices,
78 long styleDlg = wxCHOICEDLG_STYLE,
79 const wxPoint& pos = wxDefaultPosition,
80 long styleLbox = wxLB_ALWAYS_SB);
81
82 protected:
83 wxListBoxBase *m_listbox;
84
85 virtual wxListBoxBase *CreateList(int n,
86 const wxString *choices,
87 long styleLbox);
88
89 DECLARE_NO_COPY_CLASS(wxAnyChoiceDialog)
90 };
91
92 // ----------------------------------------------------------------------------
93 // wxSingleChoiceDialog: a dialog with single selection listbox
94 // ----------------------------------------------------------------------------
95
96 class WXDLLIMPEXP_CORE wxSingleChoiceDialog : public wxAnyChoiceDialog
97 {
98 public:
99 wxSingleChoiceDialog()
100 {
101 m_selection = -1;
102 }
103
104 wxSingleChoiceDialog(wxWindow *parent,
105 const wxString& message,
106 const wxString& caption,
107 int n,
108 const wxString *choices,
109 char **clientData = (char **)NULL,
110 long style = wxCHOICEDLG_STYLE,
111 const wxPoint& pos = wxDefaultPosition);
112 wxSingleChoiceDialog(wxWindow *parent,
113 const wxString& message,
114 const wxString& caption,
115 const wxArrayString& choices,
116 char **clientData = (char **)NULL,
117 long style = wxCHOICEDLG_STYLE,
118 const wxPoint& pos = wxDefaultPosition);
119
120 bool Create(wxWindow *parent,
121 const wxString& message,
122 const wxString& caption,
123 int n,
124 const wxString *choices,
125 char **clientData = (char **)NULL,
126 long style = wxCHOICEDLG_STYLE,
127 const wxPoint& pos = wxDefaultPosition);
128 bool Create(wxWindow *parent,
129 const wxString& message,
130 const wxString& caption,
131 const wxArrayString& choices,
132 char **clientData = (char **)NULL,
133 long style = wxCHOICEDLG_STYLE,
134 const wxPoint& pos = wxDefaultPosition);
135
136 void SetSelection(int sel);
137 int GetSelection() const { return m_selection; }
138 wxString GetStringSelection() const { return m_stringSelection; }
139
140 // obsolete function (NB: no need to make it return wxChar, it's untyped)
141 char *GetSelectionClientData() const { return (char *)m_clientData; }
142
143 // implementation from now on
144 void OnOK(wxCommandEvent& event);
145 #ifndef __SMARTPHONE__
146 void OnListBoxDClick(wxCommandEvent& event);
147 #endif
148 #ifdef __WXWINCE__
149 void OnJoystickButtonDown(wxJoystickEvent& event);
150 #endif
151
152 protected:
153 int m_selection;
154 wxString m_stringSelection;
155
156 void DoChoice();
157
158 private:
159 DECLARE_DYNAMIC_CLASS_NO_COPY(wxSingleChoiceDialog)
160 DECLARE_EVENT_TABLE()
161 };
162
163 // ----------------------------------------------------------------------------
164 // wxMultiChoiceDialog: a dialog with multi selection listbox
165 // ----------------------------------------------------------------------------
166
167 class WXDLLIMPEXP_CORE wxMultiChoiceDialog : public wxAnyChoiceDialog
168 {
169 public:
170 wxMultiChoiceDialog() { }
171
172 wxMultiChoiceDialog(wxWindow *parent,
173 const wxString& message,
174 const wxString& caption,
175 int n,
176 const wxString *choices,
177 long style = wxCHOICEDLG_STYLE,
178 const wxPoint& pos = wxDefaultPosition)
179 {
180 (void)Create(parent, message, caption, n, choices, style, pos);
181 }
182 wxMultiChoiceDialog(wxWindow *parent,
183 const wxString& message,
184 const wxString& caption,
185 const wxArrayString& choices,
186 long style = wxCHOICEDLG_STYLE,
187 const wxPoint& pos = wxDefaultPosition)
188 {
189 (void)Create(parent, message, caption, choices, style, pos);
190 }
191
192 bool Create(wxWindow *parent,
193 const wxString& message,
194 const wxString& caption,
195 int n,
196 const wxString *choices,
197 long style = wxCHOICEDLG_STYLE,
198 const wxPoint& pos = wxDefaultPosition);
199 bool Create(wxWindow *parent,
200 const wxString& message,
201 const wxString& caption,
202 const wxArrayString& choices,
203 long style = wxCHOICEDLG_STYLE,
204 const wxPoint& pos = wxDefaultPosition);
205
206 void SetSelections(const wxArrayInt& selections);
207 wxArrayInt GetSelections() const { return m_selections; }
208
209 // implementation from now on
210 virtual bool TransferDataFromWindow();
211
212 protected:
213 #if wxUSE_CHECKLISTBOX
214 virtual wxListBoxBase *CreateList(int n,
215 const wxString *choices,
216 long styleLbox);
217 #endif // wxUSE_CHECKLISTBOX
218
219 wxArrayInt m_selections;
220
221 private:
222 DECLARE_DYNAMIC_CLASS_NO_COPY(wxMultiChoiceDialog)
223 };
224
225 // ----------------------------------------------------------------------------
226 // wrapper functions which can be used to get selection(s) from the user
227 // ----------------------------------------------------------------------------
228
229 // get the user selection as a string
230 WXDLLIMPEXP_CORE wxString wxGetSingleChoice(const wxString& message,
231 const wxString& caption,
232 const wxArrayString& choices,
233 wxWindow *parent = NULL,
234 int x = wxDefaultCoord,
235 int y = wxDefaultCoord,
236 bool centre = true,
237 int width = wxCHOICE_WIDTH,
238 int height = wxCHOICE_HEIGHT);
239
240 WXDLLIMPEXP_CORE wxString wxGetSingleChoice(const wxString& message,
241 const wxString& caption,
242 int n, const wxString *choices,
243 wxWindow *parent = NULL,
244 int x = wxDefaultCoord,
245 int y = wxDefaultCoord,
246 bool centre = true,
247 int width = wxCHOICE_WIDTH,
248 int height = wxCHOICE_HEIGHT);
249
250 // Same as above but gets position in list of strings, instead of string,
251 // or -1 if no selection
252 WXDLLIMPEXP_CORE int wxGetSingleChoiceIndex(const wxString& message,
253 const wxString& caption,
254 const wxArrayString& choices,
255 wxWindow *parent = NULL,
256 int x = wxDefaultCoord,
257 int y = wxDefaultCoord,
258 bool centre = true,
259 int width = wxCHOICE_WIDTH,
260 int height = wxCHOICE_HEIGHT);
261
262 WXDLLIMPEXP_CORE int wxGetSingleChoiceIndex(const wxString& message,
263 const wxString& caption,
264 int n, const wxString *choices,
265 wxWindow *parent = NULL,
266 int x = wxDefaultCoord,
267 int y = wxDefaultCoord,
268 bool centre = true,
269 int width = wxCHOICE_WIDTH,
270 int height = wxCHOICE_HEIGHT);
271
272 // Return client data instead or NULL if cancelled
273 WXDLLIMPEXP_CORE void* wxGetSingleChoiceData(const wxString& message,
274 const wxString& caption,
275 const wxArrayString& choices,
276 void **client_data,
277 wxWindow *parent = NULL,
278 int x = wxDefaultCoord,
279 int y = wxDefaultCoord,
280 bool centre = true,
281 int width = wxCHOICE_WIDTH,
282 int height = wxCHOICE_HEIGHT);
283
284 WXDLLIMPEXP_CORE void* wxGetSingleChoiceData(const wxString& message,
285 const wxString& caption,
286 int n, const wxString *choices,
287 void **client_data,
288 wxWindow *parent = NULL,
289 int x = wxDefaultCoord,
290 int y = wxDefaultCoord,
291 bool centre = true,
292 int width = wxCHOICE_WIDTH,
293 int height = wxCHOICE_HEIGHT);
294
295 // fill the array with the indices of the chosen items, it will be empty
296 // if no items were selected or Cancel was pressed - return the number of
297 // selections
298 WXDLLIMPEXP_CORE size_t wxGetMultipleChoices(wxArrayInt& selections,
299 const wxString& message,
300 const wxString& caption,
301 int n, const wxString *choices,
302 wxWindow *parent = NULL,
303 int x = wxDefaultCoord,
304 int y = wxDefaultCoord,
305 bool centre = true,
306 int width = wxCHOICE_WIDTH,
307 int height = wxCHOICE_HEIGHT);
308
309 WXDLLIMPEXP_CORE size_t wxGetMultipleChoices(wxArrayInt& selections,
310 const wxString& message,
311 const wxString& caption,
312 const wxArrayString& choices,
313 wxWindow *parent = NULL,
314 int x = wxDefaultCoord,
315 int y = wxDefaultCoord,
316 bool centre = true,
317 int width = wxCHOICE_WIDTH,
318 int height = wxCHOICE_HEIGHT);
319
320 #endif // _WX_GENERIC_CHOICDGG_H_