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