]>
git.saurik.com Git - wxWidgets.git/blob - src/generic/choicdgg.cpp
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Choice dialogs
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart and Markus Holzem
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
13 #pragma implementation "choicdgg.h"
16 // For compilers that support precompilation, includes "wx.h".
17 #include "wx/wxprec.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"
34 #include "wx/generic/choicdgg.h"
36 extern void wxSplitMessage2(const char *message
, wxList
*messageList
, wxWindow
*parent
, wxRowColSizer
*sizer
);
38 wxString
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
) )
43 wxSingleChoiceDialog
dialog(parent
, message
, caption
, n
, choices
);
44 if ( dialog
.ShowModal() == wxID_OK
)
46 return dialog
.GetStringSelection();
52 // Overloaded for backward compatibility
53 wxString
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
)
58 wxString
*strings
= new wxString
[n
];
60 for ( i
= 0; i
< n
; i
++)
62 strings
[i
] = choices
[i
];
64 wxString
ans(wxGetSingleChoice(message
, caption
, n
, (const wxString
*)strings
, parent
,
65 x
, y
, centre
, width
, height
));
70 int 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
) )
75 wxSingleChoiceDialog
dialog(parent
, message
, caption
, n
, choices
);
76 if ( dialog
.ShowModal() == wxID_OK
)
78 return dialog
.GetSelection();
84 // Overloaded for backward compatibility
85 int 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
)
90 wxString
*strings
= new wxString
[n
];
92 for ( i
= 0; i
< n
; i
++)
94 strings
[i
] = choices
[i
];
96 int ans
= wxGetSingleChoiceIndex(message
, caption
, n
, (const wxString
*)strings
, parent
,
97 x
, y
, centre
, width
, height
);
102 char *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
) )
107 wxSingleChoiceDialog
dialog(parent
, message
, caption
, n
, choices
, client_data
);
108 if ( dialog
.ShowModal() == wxID_OK
)
110 return dialog
.GetSelectionClientData();
116 // Overloaded for backward compatibility
117 char *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
)
122 wxString
*strings
= new wxString
[n
];
124 for ( i
= 0; i
< n
; i
++)
126 strings
[i
] = choices
[i
];
128 char *data
= wxGetSingleChoiceData(message
, caption
, n
, (const wxString
*)strings
, client_data
, parent
,
129 x
, y
, centre
, width
, height
);
135 /* Multiple choice dialog contributed by Robert Cowell
138 The new data passed are in the "int nsel" and "int * selection"
140 The idea is to make a multiple selection from list of strings.
141 The returned value is the total number selected. initialily there
142 are nsel selected, with indices stored in
143 selection[0],...,selection[nsel-1] which appear highlighted to
144 begin with. On exit with value i
145 selection[0..i-1] contains the indices of the selected items.
146 (Some prior selectecions might be deselected.)
147 Thus selection must be as big as choices, in case all items are
152 int 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)
162 // wxSingleChoiceDialog
164 #if !USE_SHARED_LIBRARY
165 BEGIN_EVENT_TABLE(wxSingleChoiceDialog
, wxDialog
)
166 EVT_BUTTON(wxID_OK
, wxSingleChoiceDialog::OnOK
)
169 IMPLEMENT_CLASS(wxSingleChoiceDialog
, wxDialog
)
172 wxSingleChoiceDialog::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
)
176 Create(parent
, message
, caption
, n
, choices
, clientData
, style
);
179 wxSingleChoiceDialog::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
)
183 Create(parent
, message
, caption
, choices
, clientData
, style
);
186 bool wxSingleChoiceDialog::Create(wxWindow
*parent
, const wxString
& message
, const wxString
& caption
,
187 const wxStringList
& choices
, char **clientData
, long style
, const wxPoint
& pos
)
189 wxString
*strings
= new wxString
[choices
.Number()];
191 for ( i
= 0; i
< choices
.Number(); i
++)
193 strings
[i
] = (char *)choices
.Nth(i
)->Data();
195 bool ans
= Create(parent
, message
, caption
, choices
.Number(), strings
, clientData
, style
, pos
);
200 bool 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
) )
205 m_dialogStyle
= style
;
207 m_stringSelection
= "";
212 wxSizer
*topSizer
= new wxSizer(this, wxSizerShrink
);
213 topSizer
->SetBorder(10, 10);
215 wxRowColSizer
*messageSizer
= new wxRowColSizer(topSizer
, wxSIZER_COLS
, 100);
216 messageSizer
->SetName("messageSizer");
218 // bool centre = ((style & wxCENTRE) == wxCENTRE);
221 wxSplitMessage2(message
, &messageList
, this, messageSizer
);
224 wxSpacingSizer
*spacingSizer
= new wxSpacingSizer(topSizer
, wxBelow
, messageSizer
, 10);
226 wxListBox
*listBox
= new wxListBox(this, wxID_LISTBOX
, wxPoint(-1, -1), wxSize(240, 160),
231 for ( i
= 0; i
< n
; i
++)
233 listBox
->SetClientData(i
, clientData
[i
]);
237 wxRowColSizer
*listBoxSizer
= new wxRowColSizer(topSizer
, wxSIZER_ROWS
);
238 listBoxSizer
->AddSizerChild(listBox
);
239 listBoxSizer
->SetName("listBoxSizer");
241 // Create constraints for the text sizer
242 wxLayoutConstraints
*textC
= new wxLayoutConstraints
;
243 textC
->left
.SameAs (messageSizer
, wxLeft
);
244 textC
->top
.Below (spacingSizer
);
245 listBoxSizer
->SetConstraints(textC
);
247 // Insert another spacer
248 wxSpacingSizer
*spacingSizer2
= new wxSpacingSizer(topSizer
, wxBelow
, listBoxSizer
, 10);
249 spacingSizer
->SetName("spacingSizer2");
251 // Insert a sizer for the buttons
252 wxRowColSizer
*buttonSizer
= new wxRowColSizer(topSizer
, wxSIZER_ROWS
);
253 buttonSizer
->SetName("buttonSizer");
255 // Specify constraints for the button sizer
256 wxLayoutConstraints
*c
= new wxLayoutConstraints
;
259 c
->top
.Below (spacingSizer2
);
260 c
->centreX
.SameAs (listBoxSizer
, wxCentreX
);
261 buttonSizer
->SetConstraints(c
);
264 wxButton
*cancel
= NULL
;
267 ok
= new wxButton(this, wxID_OK
, _("OK"));
268 buttonSizer
->AddSizerChild(ok
);
271 if (style
& wxCANCEL
) {
272 cancel
= new wxButton(this, wxID_CANCEL
, _("Cancel"));
273 buttonSizer
->AddSizerChild(cancel
);
290 void wxSingleChoiceDialog::OnOK(wxCommandEvent
& WXUNUSED(event
))
292 wxListBox
*listBox
= (wxListBox
*)FindWindow(wxID_LISTBOX
);
295 m_selection
= listBox
->GetSelection();
296 m_stringSelection
= listBox
->GetStringSelection();
297 m_clientData
= listBox
->GetClientData(m_selection
);