X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bd9f3519cf4d3adec765a932a726e2f1d34e0df9..5e1eac149fc18f51d5a25ac00d957ccaad87b3fa:/src/generic/choicdgg.cpp?ds=sidebyside diff --git a/src/generic/choicdgg.cpp b/src/generic/choicdgg.cpp index 0b3ec8c652..d037f6255d 100644 --- a/src/generic/choicdgg.cpp +++ b/src/generic/choicdgg.cpp @@ -40,6 +40,7 @@ #endif #include "wx/statline.h" +#include "wx/settings.h" #include "wx/generic/choicdgg.h" // ---------------------------------------------------------------------------- @@ -263,7 +264,7 @@ bool wxAnyChoiceDialog::Create(wxWindow *parent, m_listbox->SetSelection(0); topsizer-> - Add(m_listbox, wxSizerFlags().Expand().TripleBorder(wxLEFT | wxRIGHT)); + Add(m_listbox, wxSizerFlags().Expand().Proportion(1).TripleBorder(wxLEFT | wxRIGHT)); // 3) buttons if any wxSizer * @@ -301,8 +302,11 @@ bool wxAnyChoiceDialog::Create(wxWindow *parent, wxListBoxBase *wxAnyChoiceDialog::CreateList(int n, const wxString *choices, long styleLbox) { + wxSize size = wxDefaultSize; + if (wxSystemSettings::GetScreenType() > wxSYS_SCREEN_PDA) + size = wxSize(300, 200); return new wxListBox( this, wxID_LISTBOX, - wxDefaultPosition, wxDefaultSize, + wxDefaultPosition, size, n, choices, styleLbox ); } @@ -435,10 +439,17 @@ bool wxMultiChoiceDialog::Create( wxWindow *parent, long style, const wxPoint& pos ) { + long styleLbox; +#if wxUSE_CHECKLISTBOX + styleLbox = wxLB_ALWAYS_SB; +#else + styleLbox = wxLB_ALWAYS_SB | wxLB_EXTENDED; +#endif + if ( !wxAnyChoiceDialog::Create(parent, message, caption, n, choices, style, pos, - wxLB_ALWAYS_SB | wxLB_EXTENDED) ) + styleLbox) ) return false; return true; @@ -458,6 +469,30 @@ bool wxMultiChoiceDialog::Create( wxWindow *parent, void wxMultiChoiceDialog::SetSelections(const wxArrayInt& selections) { +#if wxUSE_CHECKLISTBOX + wxCheckListBox* checkListBox = wxDynamicCast(m_listbox, wxCheckListBox); + if (checkListBox) + { + // first clear all currently selected items + size_t n, + count = checkListBox->GetCount(); + for ( n = 0; n < count; ++n ) + { + if (checkListBox->IsChecked(n)) + checkListBox->Check(n, false); + } + + // now select the ones which should be selected + count = selections.GetCount(); + for ( n = 0; n < count; n++ ) + { + checkListBox->Check(selections[n]); + } + + return; + } +#endif + // first clear all currently selected items size_t n, count = m_listbox->GetCount(); @@ -477,6 +512,21 @@ void wxMultiChoiceDialog::SetSelections(const wxArrayInt& selections) bool wxMultiChoiceDialog::TransferDataFromWindow() { m_selections.Empty(); + +#if wxUSE_CHECKLISTBOX + wxCheckListBox* checkListBox = wxDynamicCast(m_listbox, wxCheckListBox); + if (checkListBox) + { + size_t count = checkListBox->GetCount(); + for ( size_t n = 0; n < count; n++ ) + { + if ( checkListBox->IsChecked(n) ) + m_selections.Add(n); + } + return true; + } +#endif + size_t count = m_listbox->GetCount(); for ( size_t n = 0; n < count; n++ ) { @@ -491,8 +541,12 @@ bool wxMultiChoiceDialog::TransferDataFromWindow() wxListBoxBase *wxMultiChoiceDialog::CreateList(int n, const wxString *choices, long styleLbox) { + wxSize size = wxDefaultSize; + if (wxSystemSettings::GetScreenType() > wxSYS_SCREEN_PDA) + size = wxSize(300, 200); + return new wxCheckListBox( this, wxID_LISTBOX, - wxDefaultPosition, wxDefaultSize, + wxDefaultPosition, size, n, choices, styleLbox ); }