]> git.saurik.com Git - wxWidgets.git/blame - src/generic/choicdgg.cpp
New wxEventType for event type enum, and corresponding alterations.
[wxWidgets.git] / src / generic / choicdgg.cpp
CommitLineData
c801d85f
KB
1/////////////////////////////////////////////////////////////////////////////
2// Name: choicesg.cpp
3// Purpose: Choice dialogs
4// Author: Julian Smart
5// Modified by:
6// Created: 04/01/98
7// RCS-ID: $Id$
8// Copyright: (c) Julian Smart and Markus Holzem
9// Licence: wxWindows license
10/////////////////////////////////////////////////////////////////////////////
11
12#ifdef __GNUG__
13#pragma implementation "choicdgg.h"
14#endif
15
16// For compilers that support precompilation, includes "wx.h".
17#include "wx/wxprec.h"
18
19#ifdef __BORLANDC__
20#pragma hdrstop
21#endif
22
23#ifndef WX_PRECOMP
24#include <stdio.h>
25#include "wx/utils.h"
26#include "wx/dialog.h"
27#include "wx/listbox.h"
28#include "wx/button.h"
29#include "wx/stattext.h"
30#include "wx/layout.h"
31#include "wx/intl.h"
32#endif
33
34#include "wx/generic/choicdgg.h"
35
36extern void wxSplitMessage2(const char *message, wxList *messageList, wxWindow *parent, wxRowColSizer *sizer);
37
38wxString wxGetSingleChoice( const wxString& message, const wxString& caption, const int n,
39 const wxString *choices, wxWindow *parent,
40 const int WXUNUSED(x), const int WXUNUSED(y), const bool WXUNUSED(centre),
41 const int WXUNUSED(width), const int WXUNUSED(height) )
42{
43 wxSingleChoiceDialog dialog(parent, message, caption, n, choices);
44 if ( dialog.ShowModal() == wxID_OK )
45 {
46 return dialog.GetStringSelection();
47 }
48 else
49 return "";
50}
51
52// Overloaded for backward compatibility
53wxString wxGetSingleChoice( const wxString& message, const wxString& caption, const int n,
54 char *choices[], wxWindow *parent,
55 const int x, const int y, const bool centre,
56 const int width, const int height )
57{
58 wxString *strings = new wxString[n];
59 int i;
60 for ( i = 0; i < n; i++)
61 {
62 strings[i] = choices[i];
63 }
64 wxString ans(wxGetSingleChoice(message, caption, n, (const wxString *)strings, parent,
65 x, y, centre, width, height));
66 delete[] strings;
67 return ans;
68}
69
70int wxGetSingleChoiceIndex( const wxString& message, const wxString& caption, const int n,
71 const wxString *choices, wxWindow *parent,
72 const int WXUNUSED(x), const int WXUNUSED(y), const bool WXUNUSED(centre),
73 const int WXUNUSED(width), const int WXUNUSED(height) )
74{
75 wxSingleChoiceDialog dialog(parent, message, caption, n, choices);
76 if ( dialog.ShowModal() == wxID_OK )
77 {
78 return dialog.GetSelection();
79 }
80 else
81 return -1;
82}
83
84// Overloaded for backward compatibility
85int wxGetSingleChoiceIndex( const wxString& message, const wxString& caption, const int n,
86 char *choices[], wxWindow *parent,
87 const int x, const int y, const bool centre,
88 const int width, const int height )
89{
90 wxString *strings = new wxString[n];
91 int i;
92 for ( i = 0; i < n; i++)
93 {
94 strings[i] = choices[i];
95 }
96 int ans = wxGetSingleChoiceIndex(message, caption, n, (const wxString *)strings, parent,
97 x, y, centre, width, height);
98 delete[] strings;
99 return ans;
100}
101
102char *wxGetSingleChoiceData( const wxString& message, const wxString& caption, const int n,
103 const wxString *choices, char **client_data, wxWindow *parent,
104 const int WXUNUSED(x), const int WXUNUSED(y), const bool WXUNUSED(centre),
105 const int WXUNUSED(width), const int WXUNUSED(height) )
106{
107 wxSingleChoiceDialog dialog(parent, message, caption, n, choices, client_data);
108 if ( dialog.ShowModal() == wxID_OK )
109 {
110 return dialog.GetSelectionClientData();
111 }
112 else
113 return NULL;
114}
115
116// Overloaded for backward compatibility
117char *wxGetSingleChoiceData( const wxString& message, const wxString& caption, const int n,
118 char *choices[], char **client_data, wxWindow *parent,
119 const int x, const int y, const bool centre,
120 const int width, const int height )
121{
122 wxString *strings = new wxString[n];
123 int i;
124 for ( i = 0; i < n; i++)
125 {
126 strings[i] = choices[i];
127 }
128 char *data = wxGetSingleChoiceData(message, caption, n, (const wxString *)strings, client_data, parent,
129 x, y, centre, width, height);
130 delete[] strings;
131 return data;
132}
133
134
135/* Multiple choice dialog contributed by Robert Cowell
136 *
137
138The new data passed are in the "int nsel" and "int * selection"
139
140The idea is to make a multiple selection from list of strings.
141The returned value is the total number selected. initialily there
142are nsel selected, with indices stored in
143selection[0],...,selection[nsel-1] which appear highlighted to
144begin with. On exit with value i
145selection[0..i-1] contains the indices of the selected items.
146(Some prior selectecions might be deselected.)
147Thus selection must be as big as choices, in case all items are
148selected.
149
150*/
151/*
152int wxGetMultipleChoice(const wxString& message, const wxString& caption,
153 const int n, const wxString *choices,
154 const int nsel, int * selection,
155 wxWindow *parent , const int x , const int y, const bool centre,
156 const int width, const int height)
157{
158 return -1;
159}
160*/
161
162// wxSingleChoiceDialog
163
164#if !USE_SHARED_LIBRARY
165BEGIN_EVENT_TABLE(wxSingleChoiceDialog, wxDialog)
166 EVT_BUTTON(wxID_OK, wxSingleChoiceDialog::OnOK)
167END_EVENT_TABLE()
168
169IMPLEMENT_CLASS(wxSingleChoiceDialog, wxDialog)
170#endif
171
172wxSingleChoiceDialog::wxSingleChoiceDialog(wxWindow *parent, const wxString& message, const wxString& caption,
173 const int n, const wxString *choices, char **clientData, long style, const wxPoint& pos):
174 wxDialog(parent, -1, caption, pos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL)
175{
176 Create(parent, message, caption, n, choices, clientData, style);
177}
178
179wxSingleChoiceDialog::wxSingleChoiceDialog(wxWindow *parent, const wxString& message, const wxString& caption,
180 const wxStringList& choices, char **clientData, long style, const wxPoint& pos):
181 wxDialog(parent, -1, caption, pos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL)
182{
183 Create(parent, message, caption, choices, clientData, style);
184}
185
186bool wxSingleChoiceDialog::Create(wxWindow *parent, const wxString& message, const wxString& caption,
187 const wxStringList& choices, char **clientData, long style, const wxPoint& pos)
188{
189 wxString *strings = new wxString[choices.Number()];
190 int i;
191 for ( i = 0; i < choices.Number(); i++)
192 {
193 strings[i] = (char *)choices.Nth(i)->Data();
194 }
195 bool ans = Create(parent, message, caption, choices.Number(), strings, clientData, style, pos);
196 delete[] strings;
197 return ans;
198}
199
200bool wxSingleChoiceDialog::Create( wxWindow *WXUNUSED(parent), const wxString& message,
201 const wxString& WXUNUSED(caption), const int n,
202 const wxString *choices, char **clientData, long style,
203 const wxPoint& WXUNUSED(pos) )
204{
205 m_dialogStyle = style;
206 m_selection = 0;
207 m_stringSelection = "";
208 m_clientData = NULL;
209
210 wxBeginBusyCursor();
211
212 wxSizer *topSizer = new wxSizer(this, wxSizerShrink);
213 topSizer->SetBorder(10, 10);
214
215 wxRowColSizer *messageSizer = new wxRowColSizer(topSizer, wxSIZER_COLS, 100);
216 messageSizer->SetName("messageSizer");
217
218// bool centre = ((style & wxCENTRE) == wxCENTRE);
219
220 wxList messageList;
221 wxSplitMessage2(message, &messageList, this, messageSizer);
222
223 // Insert a spacer
224 wxSpacingSizer *spacingSizer = new wxSpacingSizer(topSizer, wxBelow, messageSizer, 10);
225
226 wxListBox *listBox = new wxListBox(this, wxID_LISTBOX, wxPoint(-1, -1), wxSize(240, 160),
227 n, choices);
ef77f91e 228 listBox->SetSelection(m_selection);
c801d85f
KB
229 if ( clientData )
230 {
231 int i;
232 for ( i = 0; i < n; i++)
233 {
234 listBox->SetClientData(i, clientData[i]);
235 }
236 }
237
238 wxRowColSizer *listBoxSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS);
239 listBoxSizer->AddSizerChild(listBox);
240 listBoxSizer->SetName("listBoxSizer");
241
242 // Create constraints for the text sizer
243 wxLayoutConstraints *textC = new wxLayoutConstraints;
244 textC->left.SameAs (messageSizer, wxLeft);
245 textC->top.Below (spacingSizer);
246 listBoxSizer->SetConstraints(textC);
247
248 // Insert another spacer
249 wxSpacingSizer *spacingSizer2 = new wxSpacingSizer(topSizer, wxBelow, listBoxSizer, 10);
250 spacingSizer->SetName("spacingSizer2");
251
252 // Insert a sizer for the buttons
253 wxRowColSizer *buttonSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS);
254 buttonSizer->SetName("buttonSizer");
255
256 // Specify constraints for the button sizer
257 wxLayoutConstraints *c = new wxLayoutConstraints;
258 c->width.AsIs ();
259 c->height.AsIs ();
260 c->top.Below (spacingSizer2);
261 c->centreX.SameAs (listBoxSizer, wxCentreX);
262 buttonSizer->SetConstraints(c);
263
264 wxButton *ok = NULL;
265 wxButton *cancel = NULL;
266
267 if (style & wxOK) {
268 ok = new wxButton(this, wxID_OK, _("OK"));
269 buttonSizer->AddSizerChild(ok);
270 }
271
272 if (style & wxCANCEL) {
273 cancel = new wxButton(this, wxID_CANCEL, _("Cancel"));
274 buttonSizer->AddSizerChild(cancel);
275 }
276
277 if (ok)
278 {
279 ok->SetDefault();
280 ok->SetFocus();
281 }
282
283 Layout();
284 Centre(wxBOTH);
285
286 wxEndBusyCursor();
287
288 return TRUE;
289}
290
ef77f91e
JS
291// Set the selection
292void wxSingleChoiceDialog::SetSelection(int sel)
293{
294 wxListBox *listBox = (wxListBox *)FindWindow(wxID_LISTBOX);
295 if (listBox)
296 {
297 listBox->SetSelection(sel);
298 }
299 m_selection = sel;
300}
301
c801d85f
KB
302void wxSingleChoiceDialog::OnOK(wxCommandEvent& WXUNUSED(event))
303{
304 wxListBox *listBox = (wxListBox *)FindWindow(wxID_LISTBOX);
305 if ( listBox )
306 {
307 m_selection = listBox->GetSelection();
308 m_stringSelection = listBox->GetStringSelection();
309 m_clientData = listBox->GetClientData(m_selection);
310 }
311
312 EndModal(wxID_OK);
313}
314
315