X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/119727ad9e58e42326764a259a5b88267bb43528..ccd67a6af88981a8c1a2b752a14051fe7698814b:/src/generic/choicdgg.cpp diff --git a/src/generic/choicdgg.cpp b/src/generic/choicdgg.cpp index ad3680b5fd..0b3ec8c652 100644 --- a/src/generic/choicdgg.cpp +++ b/src/generic/choicdgg.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: choicdgg.cpp +// Name: src/generic/choicdgg.cpp // Purpose: Choice dialogs // Author: Julian Smart // Modified by: 03.11.00: VZ to add wxArrayString and multiple sel functions @@ -13,10 +13,6 @@ // declarations // ============================================================================ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "choicdgg.h" -#endif - // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- @@ -36,16 +32,14 @@ #include "wx/dialog.h" #include "wx/button.h" #include "wx/listbox.h" + #include "wx/checklst.h" #include "wx/stattext.h" #include "wx/intl.h" #include "wx/sizer.h" #include "wx/arrstr.h" #endif -#if wxUSE_STATLINE - #include "wx/statline.h" -#endif - +#include "wx/statline.h" #include "wx/generic/choicdgg.h" // ---------------------------------------------------------------------------- @@ -204,8 +198,9 @@ size_t wxGetMultipleChoices(wxArrayInt& selections, { wxMultiChoiceDialog dialog(parent, message, caption, n, choices); - if ( !selections.IsEmpty() ) - dialog.SetSelections(selections); + // call this even if selections array is empty and this then (correctly) + // deselects the first item which is selected by default + dialog.SetSelections(selections); if ( dialog.ShowModal() == wxID_OK ) selections = dialog.GetSelections(); @@ -246,47 +241,45 @@ 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 if ( !wxDialog::Create(parent, wxID_ANY, caption, pos, wxDefaultSize, styleDlg) ) return false; +#endif wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL ); // 1) text message - topsizer->Add( CreateTextSizer( message ), 0, wxEXPAND, wxLARGESMALL(10,0) ); + topsizer-> + Add(CreateTextSizer(message), wxSizerFlags().Expand().TripleBorder()); // 2) list box - m_listbox = new wxListBox( this, wxID_LISTBOX, - wxDefaultPosition, wxDefaultSize, - n, choices, - styleLbox ); + m_listbox = CreateList(n, choices, styleLbox); + if ( n > 0 ) m_listbox->SetSelection(0); - topsizer->Add( m_listbox, 1, wxEXPAND, wxLARGESMALL(15,0) ); - -#ifdef __SMARTPHONE__ - - SetRightMenu(wxID_CANCEL, _("Cancel")); + topsizer-> + Add(m_listbox, wxSizerFlags().Expand().TripleBorder(wxLEFT | wxRIGHT)); -#else // __SMARTPHONE__/!__SMARTPHONE__ - -#if wxUSE_STATLINE - // 3) static line - topsizer->Add( new wxStaticLine( this, wxID_ANY ), 0, wxEXPAND | wxLEFT|wxRIGHT|wxTOP, 10 ); -#endif - - // 4) buttons - topsizer->Add( CreateButtonSizer( styleDlg & (wxOK|wxCANCEL) ), 0, wxCENTRE | wxALL, 10 ); - -#endif // !__SMARTPHONE__ + // 3) buttons if any + wxSizer * + buttonSizer = CreateSeparatedButtonSizer(styleDlg & ButtonSizerFlags); + if ( buttonSizer ) + { + topsizer->Add(buttonSizer, wxSizerFlags().Expand().DoubleBorder()); + } - SetAutoLayout( true ); SetSizer( topsizer ); topsizer->SetSizeHints( this ); topsizer->Fit( this ); - Centre( wxBOTH ); + if ( styleDlg & wxCENTRE ) + Centre(wxBOTH); m_listbox->SetFocus(); @@ -306,13 +299,26 @@ bool wxAnyChoiceDialog::Create(wxWindow *parent, styleDlg, pos, styleLbox); } +wxListBoxBase *wxAnyChoiceDialog::CreateList(int n, const wxString *choices, long styleLbox) +{ + return new wxListBox( this, wxID_LISTBOX, + wxDefaultPosition, wxDefaultSize, + n, choices, + styleLbox ); +} + // ---------------------------------------------------------------------------- // wxSingleChoiceDialog // ---------------------------------------------------------------------------- BEGIN_EVENT_TABLE(wxSingleChoiceDialog, wxDialog) EVT_BUTTON(wxID_OK, wxSingleChoiceDialog::OnOK) +#ifndef __SMARTPHONE__ EVT_LISTBOX_DCLICK(wxID_LISTBOX, wxSingleChoiceDialog::OnListBoxDClick) +#endif +#ifdef __WXWINCE__ + EVT_JOY_BUTTON_DOWN(wxSingleChoiceDialog::OnJoystickButtonDown) +#endif END_EVENT_TABLE() IMPLEMENT_DYNAMIC_CLASS(wxSingleChoiceDialog, wxDialog) @@ -387,14 +393,24 @@ void wxSingleChoiceDialog::SetSelection(int sel) void wxSingleChoiceDialog::OnOK(wxCommandEvent& WXUNUSED(event)) { - m_selection = m_listbox->GetSelection(); - m_stringSelection = m_listbox->GetStringSelection(); - if ( m_listbox->HasClientUntypedData() ) - SetClientData(m_listbox->GetClientData(m_selection)); - EndModal(wxID_OK); + DoChoice(); } +#ifndef __SMARTPHONE__ void wxSingleChoiceDialog::OnListBoxDClick(wxCommandEvent& WXUNUSED(event)) +{ + DoChoice(); +} +#endif + +#ifdef __WXWINCE__ +void wxSingleChoiceDialog::OnJoystickButtonDown(wxJoystickEvent& WXUNUSED(event)) +{ + DoChoice(); +} +#endif + +void wxSingleChoiceDialog::DoChoice() { m_selection = m_listbox->GetSelection(); m_stringSelection = m_listbox->GetStringSelection(); @@ -442,8 +458,17 @@ bool wxMultiChoiceDialog::Create( wxWindow *parent, void wxMultiChoiceDialog::SetSelections(const wxArrayInt& selections) { - size_t count = selections.GetCount(); - for ( size_t n = 0; n < count; n++ ) + // first clear all currently selected items + size_t n, + count = m_listbox->GetCount(); + for ( n = 0; n < count; ++n ) + { + m_listbox->Deselect(n); + } + + // now select the ones which should be selected + count = selections.GetCount(); + for ( n = 0; n < count; n++ ) { m_listbox->Select(selections[n]); } @@ -462,4 +487,16 @@ bool wxMultiChoiceDialog::TransferDataFromWindow() return true; } +#if wxUSE_CHECKLISTBOX + +wxListBoxBase *wxMultiChoiceDialog::CreateList(int n, const wxString *choices, long styleLbox) +{ + return new wxCheckListBox( this, wxID_LISTBOX, + wxDefaultPosition, wxDefaultSize, + n, choices, + styleLbox ); +} + +#endif // wxUSE_CHECKLISTBOX + #endif // wxUSE_CHOICEDLG