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