X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/897b24cf5ca5ca41734c79f7092104921e0c8cae..457e5a40e7d49f761887208f1874cb31068a31f1:/src/generic/choicdgg.cpp?ds=sidebyside diff --git a/src/generic/choicdgg.cpp b/src/generic/choicdgg.cpp index 2a77c9692e..fa3c19415b 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" // ---------------------------------------------------------------------------- @@ -48,20 +49,6 @@ #define wxID_LISTBOX 3000 -// --------------------------------------------------------------------------- -// macros -// --------------------------------------------------------------------------- - -/* Macro for avoiding #ifdefs when value have to be different depending on size of - device we display on - take it from something like wxDesktopPolicy in the future - */ - -#if defined(__SMARTPHONE__) - #define wxLARGESMALL(large,small) small -#else - #define wxLARGESMALL(large,small) large -#endif - // ---------------------------------------------------------------------------- // private functions // ---------------------------------------------------------------------------- @@ -255,12 +242,8 @@ bool wxAnyChoiceDialog::Create(wxWindow *parent, const wxPoint& pos, long styleLbox) { -#if defined(__SMARTPHONE__) || defined(__POCKETPC__) - styleDlg &= ~wxBORDER_MASK; - styleDlg &= ~wxRESIZE_BORDER; - styleDlg &= ~wxCAPTION; -#endif #ifdef __WXMAC__ + // FIXME: why?? if ( !wxDialog::Create(parent, wxID_ANY, caption, pos, wxDefaultSize, styleDlg & (~wxCANCEL) ) ) return false; #else @@ -271,41 +254,33 @@ bool wxAnyChoiceDialog::Create(wxWindow *parent, wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL ); // 1) text message -#ifdef __WXMAC__ - // align text and list at least on mac - topsizer->Add( CreateTextSizer( message ), 0, wxALL, wxLARGESMALL(15,0) ); -#else - topsizer->Add( CreateTextSizer( message ), 0, wxALL, wxLARGESMALL(10,0) ); -#endif + topsizer-> + Add(CreateTextSizer(message), wxSizerFlags().Expand().TripleBorder()); + // 2) list box - m_listbox = CreateList(n,choices,styleLbox); + m_listbox = CreateList(n, choices, styleLbox); if ( n > 0 ) m_listbox->SetSelection(0); - topsizer->Add( m_listbox, 1, wxEXPAND|wxLEFT|wxRIGHT, wxLARGESMALL(15,0) ); + topsizer-> + Add(m_listbox, wxSizerFlags().Expand().Proportion(1).TripleBorder(wxLEFT | wxRIGHT)); // 3) buttons if any - wxSizer *buttonSizer = CreateButtonSizer( styleDlg & ButtonSizerFlags , true, wxLARGESMALL(10,0) ); - if(buttonSizer->GetChildren().GetCount() > 0 ) + wxSizer * + buttonSizer = CreateSeparatedButtonSizer(styleDlg & ButtonSizerFlags); + if ( buttonSizer ) { - topsizer->Add( buttonSizer, 0, wxEXPAND | wxALL, wxLARGESMALL(10,0) ); - } - else - { - topsizer->AddSpacer( wxLARGESMALL(15,0) ); - delete buttonSizer; + topsizer->Add(buttonSizer, wxSizerFlags().Expand().DoubleBorder()); } SetSizer( topsizer ); -#if !defined(__SMARTPHONE__) && !defined(__POCKETPC__) topsizer->SetSizeHints( this ); topsizer->Fit( this ); if ( styleDlg & wxCENTRE ) Centre(wxBOTH); -#endif m_listbox->SetFocus(); @@ -461,10 +436,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; @@ -484,6 +466,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(); @@ -503,6 +509,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++ ) {