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: choicdgg.h 49563 2007-10-31 20:46:21Z VZ $
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 WXDLLEXPORT wxAnyChoiceDialog : public wxDialog
40 {
41 public:
wxAnyChoiceDialog()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 WXDLLEXPORT wxSingleChoiceDialog : public wxAnyChoiceDialog
97 {
98 public:
wxSingleChoiceDialog()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);
GetSelection()137     int GetSelection() const { return m_selection; }
GetStringSelection()138     wxString GetStringSelection() const { return m_stringSelection; }
139 
140     // obsolete function (NB: no need to make it return wxChar, it's untyped)
GetSelectionClientData()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 WXDLLEXPORT wxMultiChoiceDialog : public wxAnyChoiceDialog
168 {
169 public:
wxMultiChoiceDialog()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);
GetSelections()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 WXDLLEXPORT 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 WXDLLEXPORT 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 WXDLLEXPORT 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 WXDLLEXPORT 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 WXDLLEXPORT 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 WXDLLEXPORT 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 WXDLLEXPORT 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 WXDLLEXPORT 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_
321