]>
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),
228 listBox
->SetSelection(m_selection
);
232 for ( i
= 0; i
< n
; i
++)
234 listBox
->SetClientData(i
, clientData
[i
]);
238 wxRowColSizer
*listBoxSizer
= new wxRowColSizer(topSizer
, wxSIZER_ROWS
);
239 listBoxSizer
->AddSizerChild(listBox
);
240 listBoxSizer
->SetName("listBoxSizer");
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
);
248 // Insert another spacer
249 wxSpacingSizer
*spacingSizer2
= new wxSpacingSizer(topSizer
, wxBelow
, listBoxSizer
, 10);
250 spacingSizer
->SetName("spacingSizer2");
252 // Insert a sizer for the buttons
253 wxRowColSizer
*buttonSizer
= new wxRowColSizer(topSizer
, wxSIZER_ROWS
);
254 buttonSizer
->SetName("buttonSizer");
256 // Specify constraints for the button sizer
257 wxLayoutConstraints
*c
= new wxLayoutConstraints
;
260 c
->top
.Below (spacingSizer2
);
261 c
->centreX
.SameAs (listBoxSizer
, wxCentreX
);
262 buttonSizer
->SetConstraints(c
);
265 wxButton
*cancel
= NULL
;
268 ok
= new wxButton(this, wxID_OK
, _("OK"));
269 buttonSizer
->AddSizerChild(ok
);
272 if (style
& wxCANCEL
) {
273 cancel
= new wxButton(this, wxID_CANCEL
, _("Cancel"));
274 buttonSizer
->AddSizerChild(cancel
);
292 void wxSingleChoiceDialog::SetSelection(int sel
)
294 wxListBox
*listBox
= (wxListBox
*)FindWindow(wxID_LISTBOX
);
297 listBox
->SetSelection(sel
);
302 void wxSingleChoiceDialog::OnOK(wxCommandEvent
& WXUNUSED(event
))
304 wxListBox
*listBox
= (wxListBox
*)FindWindow(wxID_LISTBOX
);
307 m_selection
= listBox
->GetSelection();
308 m_stringSelection
= listBox
->GetStringSelection();
309 m_clientData
= listBox
->GetClientData(m_selection
);