]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/generic/choicdgg.cpp
More TIFF things,
[wxWidgets.git] / src / generic / choicdgg.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: choicdgg.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/button.h"
28 #include "wx/listbox.h"
29 #include "wx/stattext.h"
30 #include "wx/intl.h"
31 #include "wx/sizer.h"
32#endif
33
34#if wxUSE_STATLINE
35 #include "wx/statline.h"
36#endif
37
38#include "wx/generic/choicdgg.h"
39
40#define wxID_LISTBOX 3000
41
42wxString wxGetSingleChoice( const wxString& message, const wxString& caption, int n,
43 const wxString *choices, wxWindow *parent,
44 int WXUNUSED(x), int WXUNUSED(y), bool WXUNUSED(centre),
45 int WXUNUSED(width), int WXUNUSED(height) )
46{
47 wxSingleChoiceDialog dialog(parent, message, caption, n, choices);
48 if ( dialog.ShowModal() == wxID_OK )
49 return dialog.GetStringSelection();
50 else
51 return wxT("");
52}
53
54// Overloaded for backward compatibility
55wxString wxGetSingleChoice( const wxString& message, const wxString& caption, int n,
56 char *choices[], wxWindow *parent,
57 int x, int y, bool centre,
58 int width, int height )
59{
60 wxString *strings = new wxString[n];
61 int i;
62 for ( i = 0; i < n; i++)
63 {
64 strings[i] = choices[i];
65 }
66 wxString ans(wxGetSingleChoice(message, caption, n, (const wxString *)strings, parent,
67 x, y, centre, width, height));
68 delete[] strings;
69 return ans;
70}
71
72int wxGetSingleChoiceIndex( const wxString& message, const wxString& caption, int n,
73 const wxString *choices, wxWindow *parent,
74 int WXUNUSED(x), int WXUNUSED(y), bool WXUNUSED(centre),
75 int WXUNUSED(width), int WXUNUSED(height) )
76{
77 wxSingleChoiceDialog dialog(parent, message, caption, n, choices);
78 if ( dialog.ShowModal() == wxID_OK )
79 return dialog.GetSelection();
80 else
81 return -1;
82}
83
84// Overloaded for backward compatibility
85int wxGetSingleChoiceIndex( const wxString& message, const wxString& caption, int n,
86 wxChar *choices[], wxWindow *parent,
87 int x, int y, bool centre,
88 int width, int height )
89{
90 wxString *strings = new wxString[n];
91 for ( int i = 0; i < n; i++)
92 strings[i] = choices[i];
93 int ans = wxGetSingleChoiceIndex(message, caption, n, (const wxString *)strings, parent,
94 x, y, centre, width, height);
95 delete[] strings;
96 return ans;
97}
98
99void *wxGetSingleChoiceData( const wxString& message, const wxString& caption, int n,
100 const wxString *choices, void **client_data, wxWindow *parent,
101 int WXUNUSED(x), int WXUNUSED(y), bool WXUNUSED(centre),
102 int WXUNUSED(width), int WXUNUSED(height) )
103{
104 wxSingleChoiceDialog dialog(parent, message, caption, n, choices, (char **)client_data);
105 if ( dialog.ShowModal() == wxID_OK )
106 return dialog.GetSelectionClientData();
107 else
108 return NULL;
109}
110
111// Overloaded for backward compatibility
112void *wxGetSingleChoiceData( const wxString& message, const wxString& caption, int n,
113 wxChar *choices[], void **client_data, wxWindow *parent,
114 int x, int y, bool centre,
115 int width, int height )
116{
117 wxString *strings = new wxString[n];
118 int i;
119 for ( i = 0; i < n; i++)
120 {
121 strings[i] = choices[i];
122 }
123 void *data = wxGetSingleChoiceData(message, caption, n, (const wxString *)strings, client_data, parent,
124 x, y, centre, width, height);
125 delete[] strings;
126 return data;
127}
128
129
130/* Multiple choice dialog contributed by Robert Cowell
131 *
132
133The new data passed are in the "int nsel" and "int * selection"
134
135The idea is to make a multiple selection from list of strings.
136The returned value is the total number selected. initialily there
137are nsel selected, with indices stored in
138selection[0],...,selection[nsel-1] which appear highlighted to
139begin with. On exit with value i
140selection[0..i-1] contains the indices of the selected items.
141(Some prior selectecions might be deselected.)
142Thus selection must be as big as choices, in case all items are
143selected.
144
145*/
146/*
147int wxGetMultipleChoice(const wxString& message, const wxString& caption,
148 int n, const wxString *choices,
149 int nsel, int * selection,
150 wxWindow *parent , int x , int y, bool centre,
151 int width, int height)
152{
153 return -1;
154}
155*/
156
157// wxSingleChoiceDialog
158
159#if !USE_SHARED_LIBRARY
160BEGIN_EVENT_TABLE(wxSingleChoiceDialog, wxDialog)
161 EVT_BUTTON(wxID_OK, wxSingleChoiceDialog::OnOK)
162 EVT_LISTBOX_DCLICK(wxID_LISTBOX, wxSingleChoiceDialog::OnListBoxDClick)
163END_EVENT_TABLE()
164
165IMPLEMENT_CLASS(wxSingleChoiceDialog, wxDialog)
166#endif
167
168#if defined(__WXMSW__) || defined(__WXMAC__)
169#define wxCHOICEDLG_DIALOG_STYLE (wxDEFAULT_DIALOG_STYLE | \
170 wxDIALOG_MODAL | \
171 wxTAB_TRAVERSAL)
172#else
173#define wxCHOICEDLG_DIALOG_STYLE (wxDEFAULT_DIALOG_STYLE | \
174 wxDIALOG_MODAL | \
175 wxRESIZE_BORDER | \
176 wxTAB_TRAVERSAL)
177#endif
178
179
180wxSingleChoiceDialog::wxSingleChoiceDialog(wxWindow *parent,
181 const wxString& message,
182 const wxString& caption,
183 int n,
184 const wxString *choices,
185 char **clientData,
186 long style,
187 const wxPoint& pos)
188 : wxDialog(parent, -1, caption, pos, wxDefaultSize,
189 wxCHOICEDLG_DIALOG_STYLE)
190{
191 Create(parent, message, caption, n, choices, clientData, style);
192}
193
194wxSingleChoiceDialog::wxSingleChoiceDialog(wxWindow *parent,
195 const wxString& message,
196 const wxString& caption,
197 const wxStringList& choices,
198 char **clientData,
199 long style,
200 const wxPoint& pos)
201 : wxDialog(parent, -1, caption, pos, wxDefaultSize,
202 wxCHOICEDLG_DIALOG_STYLE)
203{
204 Create(parent, message, caption, choices, clientData, style);
205}
206
207bool wxSingleChoiceDialog::Create(wxWindow *parent,
208 const wxString& message,
209 const wxString& caption,
210 const wxStringList& choices,
211 char **clientData,
212 long style,
213 const wxPoint& pos)
214{
215 wxString *strings = new wxString[choices.Number()];
216 int i;
217 for ( i = 0; i < choices.Number(); i++)
218 {
219 strings[i] = (char *)choices.Nth(i)->Data();
220 }
221 bool ans = Create(parent, message, caption, choices.Number(), strings, clientData, style, pos);
222 delete[] strings;
223 return ans;
224}
225
226bool wxSingleChoiceDialog::Create( wxWindow *WXUNUSED(parent),
227 const wxString& message,
228 const wxString& WXUNUSED(caption),
229 int n,
230 const wxString *choices,
231 char **clientData,
232 long style,
233 const wxPoint& WXUNUSED(pos) )
234{
235 m_selection = 0;
236
237 m_dialogStyle = style;
238
239 wxBeginBusyCursor();
240
241 wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
242
243 // 1) text message
244 topsizer->Add( CreateTextSizer( message ), 0, wxALL, 10 );
245
246 // 2) list box
247 m_listbox = new wxListBox( this, wxID_LISTBOX, wxDefaultPosition, wxSize(160,100) ,
248 n, choices, wxLB_ALWAYS_SB );
249 m_listbox->SetSelection( m_selection );
250 if (clientData)
251 {
252 for (int i = 0; i < n; i++)
253 m_listbox->SetClientData(i, clientData[i]);
254 }
255 topsizer->Add( m_listbox, 1, wxEXPAND | wxLEFT|wxRIGHT, 15 );
256
257#if wxUSE_STATLINE
258 // 3) static line
259 topsizer->Add( new wxStaticLine( this, -1 ), 0, wxEXPAND | wxLEFT|wxRIGHT|wxTOP, 10 );
260#endif
261
262 // 4) buttons
263 topsizer->Add( CreateButtonSizer( wxOK|wxCANCEL ), 0, wxCENTRE | wxALL, 10 );
264
265 SetAutoLayout( TRUE );
266 SetSizer( topsizer );
267
268 topsizer->SetSizeHints( this );
269 topsizer->Fit( this );
270
271 Centre( wxBOTH );
272
273 m_listbox->SetFocus();
274
275 wxEndBusyCursor();
276
277 return TRUE;
278}
279
280// Set the selection
281void wxSingleChoiceDialog::SetSelection(int sel)
282{
283 m_listbox->SetSelection(sel);
284 m_selection = sel;
285}
286
287void wxSingleChoiceDialog::OnOK(wxCommandEvent& WXUNUSED(event))
288{
289 m_selection = m_listbox->GetSelection();
290 m_stringSelection = m_listbox->GetStringSelection();
291 // TODO!
292#ifndef __WXMOTIF__
293 if ( m_listbox->HasClientUntypedData() )
294 SetClientData(m_listbox->GetClientData(m_selection));
295#endif
296 EndModal(wxID_OK);
297}
298
299void wxSingleChoiceDialog::OnListBoxDClick(wxCommandEvent& WXUNUSED(event))
300{
301 m_selection = m_listbox->GetSelection();
302 m_stringSelection = m_listbox->GetStringSelection();
303
304 // TODO!
305#ifndef __WXMOTIF__
306 if ( m_listbox->HasClientUntypedData() )
307 SetClientData(m_listbox->GetClientData(m_selection));
308#endif
309
310 EndModal(wxID_OK);
311}
312