X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/61a11cd6faf242c5d1c529e8fbfee39ffbf03091..8a31648287be0ef976f133de2786b137f1e98340:/src/generic/choicdgg.cpp diff --git a/src/generic/choicdgg.cpp b/src/generic/choicdgg.cpp index fa3c19415b..79f7019d0d 100644 --- a/src/generic/choicdgg.cpp +++ b/src/generic/choicdgg.cpp @@ -87,9 +87,13 @@ wxString wxGetSingleChoice( const wxString& message, wxWindow *parent, int WXUNUSED(x), int WXUNUSED(y), bool WXUNUSED(centre), - int WXUNUSED(width), int WXUNUSED(height) ) + int WXUNUSED(width), int WXUNUSED(height), + int initialSelection) { wxSingleChoiceDialog dialog(parent, message, caption, n, choices); + + dialog.SetSelection(initialSelection); + wxString choice; if ( dialog.ShowModal() == wxID_OK ) choice = dialog.GetStringSelection(); @@ -103,26 +107,56 @@ wxString wxGetSingleChoice( const wxString& message, wxWindow *parent, int x, int y, bool centre, - int width, int height) + int width, int height, + int initialSelection) { wxString *choices; int n = ConvertWXArrayToC(aChoices, &choices); wxString res = wxGetSingleChoice(message, caption, n, choices, parent, - x, y, centre, width, height); + x, y, centre, width, height, + initialSelection); delete [] choices; return res; } +wxString wxGetSingleChoice( const wxString& message, + const wxString& caption, + const wxArrayString& choices, + int initialSelection, + wxWindow *parent) +{ + return wxGetSingleChoice(message, caption, choices, parent, + wxDefaultCoord, wxDefaultCoord, + true, wxCHOICE_WIDTH, wxCHOICE_HEIGHT, + initialSelection); +} + +wxString wxGetSingleChoice( const wxString& message, + const wxString& caption, + int n, const wxString *choices, + int initialSelection, + wxWindow *parent) +{ + return wxGetSingleChoice(message, caption, n, choices, parent, + wxDefaultCoord, wxDefaultCoord, + true, wxCHOICE_WIDTH, wxCHOICE_HEIGHT, + initialSelection); +} + int wxGetSingleChoiceIndex( const wxString& message, const wxString& caption, int n, const wxString *choices, wxWindow *parent, int WXUNUSED(x), int WXUNUSED(y), bool WXUNUSED(centre), - int WXUNUSED(width), int WXUNUSED(height) ) + int WXUNUSED(width), int WXUNUSED(height), + int initialSelection) { wxSingleChoiceDialog dialog(parent, message, caption, n, choices); + + dialog.SetSelection(initialSelection); + int choice; if ( dialog.ShowModal() == wxID_OK ) choice = dialog.GetSelection(); @@ -138,17 +172,45 @@ int wxGetSingleChoiceIndex( const wxString& message, wxWindow *parent, int x, int y, bool centre, - int width, int height) + int width, int height, + int initialSelection) { wxString *choices; int n = ConvertWXArrayToC(aChoices, &choices); int res = wxGetSingleChoiceIndex(message, caption, n, choices, parent, - x, y, centre, width, height); + x, y, centre, width, height, + initialSelection); delete [] choices; return res; } +int wxGetSingleChoiceIndex( const wxString& message, + const wxString& caption, + const wxArrayString& choices, + int initialSelection, + wxWindow *parent) +{ + return wxGetSingleChoiceIndex(message, caption, choices, parent, + wxDefaultCoord, wxDefaultCoord, + true, wxCHOICE_WIDTH, wxCHOICE_HEIGHT, + initialSelection); +} + + +int wxGetSingleChoiceIndex( const wxString& message, + const wxString& caption, + int n, const wxString *choices, + int initialSelection, + wxWindow *parent) +{ + return wxGetSingleChoiceIndex(message, caption, n, choices, parent, + wxDefaultCoord, wxDefaultCoord, + true, wxCHOICE_WIDTH, wxCHOICE_HEIGHT, + initialSelection); +} + + void *wxGetSingleChoiceData( const wxString& message, const wxString& caption, int n, const wxString *choices, @@ -156,10 +218,14 @@ void *wxGetSingleChoiceData( const wxString& message, wxWindow *parent, int WXUNUSED(x), int WXUNUSED(y), bool WXUNUSED(centre), - int WXUNUSED(width), int WXUNUSED(height) ) + int WXUNUSED(width), int WXUNUSED(height), + int initialSelection) { wxSingleChoiceDialog dialog(parent, message, caption, n, choices, (char **)client_data); + + dialog.SetSelection(initialSelection); + void *data; if ( dialog.ShowModal() == wxID_OK ) data = dialog.GetSelectionClientData(); @@ -176,19 +242,50 @@ void *wxGetSingleChoiceData( const wxString& message, wxWindow *parent, int x, int y, bool centre, - int width, int height) + int width, int height, + int initialSelection) { wxString *choices; int n = ConvertWXArrayToC(aChoices, &choices); void *res = wxGetSingleChoiceData(message, caption, n, choices, client_data, parent, - x, y, centre, width, height); + x, y, centre, width, height, + initialSelection); delete [] choices; return res; } -size_t wxGetMultipleChoices(wxArrayInt& selections, +void* wxGetSingleChoiceData( const wxString& message, + const wxString& caption, + const wxArrayString& choices, + void **client_data, + int initialSelection, + wxWindow *parent) +{ + return wxGetSingleChoiceData(message, caption, choices, + client_data, parent, + wxDefaultCoord, wxDefaultCoord, + true, wxCHOICE_WIDTH, wxCHOICE_HEIGHT, + initialSelection); +} + +void* wxGetSingleChoiceData( const wxString& message, + const wxString& caption, + int n, const wxString *choices, + void **client_data, + int initialSelection, + wxWindow *parent) +{ + return wxGetSingleChoiceData(message, caption, n, choices, + client_data, parent, + wxDefaultCoord, wxDefaultCoord, + true, wxCHOICE_WIDTH, wxCHOICE_HEIGHT, + initialSelection); +} + + +int wxGetSelectedChoices(wxArrayInt& selections, const wxString& message, const wxString& caption, int n, const wxString *choices, @@ -203,15 +300,19 @@ size_t wxGetMultipleChoices(wxArrayInt& selections, // deselects the first item which is selected by default dialog.SetSelections(selections); - if ( dialog.ShowModal() == wxID_OK ) - selections = dialog.GetSelections(); - else - selections.Empty(); + if ( dialog.ShowModal() != wxID_OK ) + { + // NB: intentionally do not clear the selections array here, the caller + // might want to preserve its original contents if the dialog was + // cancelled + return -1; + } + selections = dialog.GetSelections(); return selections.GetCount(); } -size_t wxGetMultipleChoices(wxArrayInt& selections, +int wxGetSelectedChoices(wxArrayInt& selections, const wxString& message, const wxString& caption, const wxArrayString& aChoices, @@ -222,7 +323,7 @@ size_t wxGetMultipleChoices(wxArrayInt& selections, { wxString *choices; int n = ConvertWXArrayToC(aChoices, &choices); - size_t res = wxGetMultipleChoices(selections, message, caption, + int res = wxGetSelectedChoices(selections, message, caption, n, choices, parent, x, y, centre, width, height); delete [] choices; @@ -230,6 +331,50 @@ size_t wxGetMultipleChoices(wxArrayInt& selections, return res; } +#if WXWIN_COMPATIBILITY_2_8 +size_t wxGetMultipleChoices(wxArrayInt& selections, + const wxString& message, + const wxString& caption, + int n, const wxString *choices, + wxWindow *parent, + int x, int y, + bool centre, + int width, int height) +{ + int rc = wxGetSelectedChoices(selections, message, caption, + n, choices, + parent, x, y, centre, width, height); + if ( rc == -1 ) + { + selections.clear(); + return 0; + } + + return rc; +} + +size_t wxGetMultipleChoices(wxArrayInt& selections, + const wxString& message, + const wxString& caption, + const wxArrayString& aChoices, + wxWindow *parent, + int x, int y, + bool centre, + int width, int height) +{ + int rc = wxGetSelectedChoices(selections, message, caption, + aChoices, + parent, x, y, centre, width, height); + if ( rc == -1 ) + { + selections.clear(); + return 0; + } + + return rc; +} +#endif // WXWIN_COMPATIBILITY_2_8 + // ---------------------------------------------------------------------------- // wxAnyChoiceDialog // ---------------------------------------------------------------------------- @@ -242,14 +387,12 @@ bool wxAnyChoiceDialog::Create(wxWindow *parent, const wxPoint& pos, long styleLbox) { -#ifdef __WXMAC__ - // FIXME: why?? - if ( !wxDialog::Create(parent, wxID_ANY, caption, pos, wxDefaultSize, styleDlg & (~wxCANCEL) ) ) - return false; -#else + // extract the buttons styles from the dialog one and remove them from it + const long styleBtns = styleDlg & (wxOK | wxCANCEL); + styleDlg &= ~styleBtns; + if ( !wxDialog::Create(parent, wxID_ANY, caption, pos, wxDefaultSize, styleDlg) ) return false; -#endif wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL ); @@ -268,7 +411,7 @@ bool wxAnyChoiceDialog::Create(wxWindow *parent, // 3) buttons if any wxSizer * - buttonSizer = CreateSeparatedButtonSizer(styleDlg & ButtonSizerFlags); + buttonSizer = CreateSeparatedButtonSizer(styleBtns); if ( buttonSizer ) { topsizer->Add(buttonSizer, wxSizerFlags().Expand().DoubleBorder()); @@ -388,6 +531,9 @@ bool wxSingleChoiceDialog::Create( wxWindow *parent, // Set the selection void wxSingleChoiceDialog::SetSelection(int sel) { + wxCHECK_RET( sel >= 0 && (unsigned)sel < m_listbox->GetCount(), + "Invalid initial selection" ); + m_listbox->SetSelection(sel); m_selection = sel; }