X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/643e16ac3b4c19a4b9f2cd8b8dd8045d1450854a..4791fafb6d69dda73abc0a92c6a9ab19ce13801a:/src/generic/choicdgg.cpp?ds=sidebyside diff --git a/src/generic/choicdgg.cpp b/src/generic/choicdgg.cpp index db7973f6ad..81ad3ae1f0 100644 --- a/src/generic/choicdgg.cpp +++ b/src/generic/choicdgg.cpp @@ -5,15 +5,15 @@ // Modified by: 03.11.00: VZ to add wxArrayString and multiple sel functions // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) wxWindows team -// Licence: wxWindows license +// Copyright: (c) wxWidgets team +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ // declarations // ============================================================================ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "choicdgg.h" #endif @@ -39,6 +39,7 @@ #include "wx/stattext.h" #include "wx/intl.h" #include "wx/sizer.h" + #include "wx/arrstr.h" #endif #if wxUSE_STATLINE @@ -53,15 +54,18 @@ #define wxID_LISTBOX 3000 -#if defined(__WXMSW__) || defined(__WXMAC__) -#define wxCHOICEDLG_DIALOG_STYLE (wxDEFAULT_DIALOG_STYLE | \ - wxDIALOG_MODAL | \ - wxTAB_TRAVERSAL) +// --------------------------------------------------------------------------- +// 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 wxCHOICEDLG_DIALOG_STYLE (wxDEFAULT_DIALOG_STYLE | \ - wxDIALOG_MODAL | \ - wxRESIZE_BORDER | \ - wxTAB_TRAVERSAL) + #define wxLARGESMALL(large,small) large #endif // ---------------------------------------------------------------------------- @@ -129,28 +133,6 @@ wxString wxGetSingleChoice( const wxString& message, return res; } -#if WXWIN_COMPATIBILITY_2 -// Overloaded for backward compatibility -wxString wxGetSingleChoice( const wxString& message, - const wxString& caption, - int n, char *choices[], - wxWindow *parent, - int x, int y, bool centre, - int width, int height ) -{ - wxString *strings = new wxString[n]; - int i; - for ( i = 0; i < n; i++) - { - strings[i] = choices[i]; - } - wxString ans(wxGetSingleChoice(message, caption, n, (const wxString *)strings, parent, - x, y, centre, width, height)); - delete[] strings; - return ans; -} -#endif // WXWIN_COMPATIBILITY_2 - int wxGetSingleChoiceIndex( const wxString& message, const wxString& caption, int n, const wxString *choices, @@ -186,25 +168,6 @@ int wxGetSingleChoiceIndex( const wxString& message, return res; } -#if WXWIN_COMPATIBILITY_2 -// Overloaded for backward compatibility -int wxGetSingleChoiceIndex( const wxString& message, - const wxString& caption, - int n, wxChar *choices[], - wxWindow *parent, - int x, int y, bool centre, - int width, int height ) -{ - wxString *strings = new wxString[n]; - for ( int i = 0; i < n; i++) - strings[i] = choices[i]; - int ans = wxGetSingleChoiceIndex(message, caption, n, (const wxString *)strings, parent, - x, y, centre, width, height); - delete[] strings; - return ans; -} -#endif // WXWIN_COMPATIBILITY_2 - void *wxGetSingleChoiceData( const wxString& message, const wxString& caption, int n, const wxString *choices, @@ -244,30 +207,6 @@ void *wxGetSingleChoiceData( const wxString& message, return res; } -#if WXWIN_COMPATIBILITY_2 -// Overloaded for backward compatibility -void *wxGetSingleChoiceData( const wxString& message, - const wxString& caption, - int n, wxChar *choices[], - void **client_data, - wxWindow *parent, - int x, int y, bool centre, int width, int height ) -{ - wxString *strings = new wxString[n]; - int i; - for ( i = 0; i < n; i++) - { - strings[i] = choices[i]; - } - void *data = wxGetSingleChoiceData(message, caption, - n, (const wxString *)strings, - client_data, parent, - x, y, centre, width, height); - delete[] strings; - return data; -} -#endif // WXWIN_COMPATIBILITY_2 - size_t wxGetMultipleChoices(wxArrayInt& selections, const wxString& message, const wxString& caption, @@ -279,8 +218,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(); @@ -321,14 +261,19 @@ bool wxAnyChoiceDialog::Create(wxWindow *parent, const wxPoint& pos, long styleLbox) { - if ( !wxDialog::Create(parent, -1, caption, pos, wxDefaultSize, - wxCHOICEDLG_DIALOG_STYLE) ) - return FALSE; +#if defined(__SMARTPHONE__) || defined(__POCKETPC__) + styleDlg &= ~wxBORDER_MASK; + styleDlg &= ~wxRESIZE_BORDER; + styleDlg &= ~wxCAPTION; +#endif + + if ( !wxDialog::Create(parent, wxID_ANY, caption, pos, wxDefaultSize, styleDlg) ) + return false; wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL ); // 1) text message - topsizer->Add( CreateTextSizer( message ), 0, wxALL, 10 ); + topsizer->Add( CreateTextSizer( message ), 0, wxALL, wxLARGESMALL(10,0) ); // 2) list box m_listbox = new wxListBox( this, wxID_LISTBOX, @@ -338,27 +283,51 @@ bool wxAnyChoiceDialog::Create(wxWindow *parent, if ( n > 0 ) m_listbox->SetSelection(0); - topsizer->Add( m_listbox, 1, wxEXPAND | wxLEFT|wxRIGHT, 15 ); + topsizer->Add( m_listbox, 1, wxEXPAND|wxLEFT|wxRIGHT, wxLARGESMALL(15,0) ); + + // smart phones does not support or do not waste space for wxButtons +#ifdef __SMARTPHONE__ + + SetRightMenu(wxID_CANCEL, _("Cancel")); + +#else // __SMARTPHONE__/!__SMARTPHONE__ #if wxUSE_STATLINE // 3) static line - topsizer->Add( new wxStaticLine( this, -1 ), 0, wxEXPAND | wxLEFT|wxRIGHT|wxTOP, 10 ); + 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 ); + topsizer->Add( CreateButtonSizer( styleDlg & (wxOK|wxCANCEL) ), 0, wxEXPAND | wxALL, 10 ); + +#endif // !__SMARTPHONE__ - SetAutoLayout( TRUE ); SetSizer( topsizer ); +#if !defined(__SMARTPHONE__) && !defined(__POCKETPC__) topsizer->SetSizeHints( this ); topsizer->Fit( this ); - Centre( wxBOTH ); + if ( styleDlg & wxCENTRE ) + Centre(wxBOTH); +#endif m_listbox->SetFocus(); - return TRUE; + return true; +} + +bool wxAnyChoiceDialog::Create(wxWindow *parent, + const wxString& message, + const wxString& caption, + const wxArrayString& choices, + long styleDlg, + const wxPoint& pos, + long styleLbox) +{ + wxCArrayString chs(choices); + return Create(parent, message, caption, chs.GetCount(), chs.GetStrings(), + styleDlg, pos, styleLbox); } // ---------------------------------------------------------------------------- @@ -384,12 +353,10 @@ wxSingleChoiceDialog::wxSingleChoiceDialog(wxWindow *parent, Create(parent, message, caption, n, choices, clientData, style); } -#if WXWIN_COMPATIBILITY_2 - wxSingleChoiceDialog::wxSingleChoiceDialog(wxWindow *parent, const wxString& message, const wxString& caption, - const wxStringList& choices, + const wxArrayString& choices, char **clientData, long style, const wxPoint& WXUNUSED(pos)) @@ -397,27 +364,6 @@ wxSingleChoiceDialog::wxSingleChoiceDialog(wxWindow *parent, Create(parent, message, caption, choices, clientData, style); } -bool wxSingleChoiceDialog::Create(wxWindow *parent, - const wxString& message, - const wxString& caption, - const wxStringList& choices, - char **clientData, - long style, - const wxPoint& pos) -{ - wxString *strings = new wxString[choices.Number()]; - int i; - for ( i = 0; i < choices.Number(); i++) - { - strings[i] = (char *)choices.Nth(i)->Data(); - } - bool ans = Create(parent, message, caption, choices.Number(), strings, clientData, style, pos); - delete[] strings; - return ans; -} - -#endif // WXWIN_COMPATIBILITY_2 - bool wxSingleChoiceDialog::Create( wxWindow *parent, const wxString& message, const wxString& caption, @@ -430,7 +376,7 @@ bool wxSingleChoiceDialog::Create( wxWindow *parent, if ( !wxAnyChoiceDialog::Create(parent, message, caption, n, choices, style, pos) ) - return FALSE; + return false; m_selection = n > 0 ? 0 : -1; @@ -440,7 +386,20 @@ bool wxSingleChoiceDialog::Create( wxWindow *parent, m_listbox->SetClientData(i, clientData[i]); } - return TRUE; + return true; +} + +bool wxSingleChoiceDialog::Create( wxWindow *parent, + const wxString& message, + const wxString& caption, + const wxArrayString& choices, + char **clientData, + long style, + const wxPoint& pos ) +{ + wxCArrayString chs(choices); + return Create( parent, message, caption, chs.GetCount(), chs.GetStrings(), + clientData, style, pos ); } // Set the selection @@ -488,15 +447,36 @@ bool wxMultiChoiceDialog::Create( wxWindow *parent, n, choices, style, pos, wxLB_ALWAYS_SB | wxLB_EXTENDED) ) - return FALSE; + return false; + + return true; +} - return TRUE; +bool wxMultiChoiceDialog::Create( wxWindow *parent, + const wxString& message, + const wxString& caption, + const wxArrayString& choices, + long style, + const wxPoint& pos ) +{ + wxCArrayString chs(choices); + return Create( parent, message, caption, chs.GetCount(), + chs.GetStrings(), style, pos ); } 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]); } @@ -512,7 +492,7 @@ bool wxMultiChoiceDialog::TransferDataFromWindow() m_selections.Add(n); } - return TRUE; + return true; } #endif // wxUSE_CHOICEDLG