]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/choicdgg.cpp
Fix broken and missing DataView interface items for Phoenix
[wxWidgets.git] / src / generic / choicdgg.cpp
index fb4eb2677da610b2d863848a5829f7c5aa74b1d7..612b285ba4659b2bbee88875ee5c0b7db82838b7 100644 (file)
@@ -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,13 +218,17 @@ 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);
+                                client_data);
+
+    dialog.SetSelection(initialSelection);
+
     void *data;
     if ( dialog.ShowModal() == wxID_OK )
-        data = dialog.GetSelectionClientData();
+        data = dialog.GetSelectionData();
     else
         data = NULL;
 
@@ -176,18 +242,49 @@ 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;
 }
 
+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,
@@ -290,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 );
 
@@ -316,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());
@@ -372,35 +467,12 @@ END_EVENT_TABLE()
 
 IMPLEMENT_DYNAMIC_CLASS(wxSingleChoiceDialog, wxDialog)
 
-wxSingleChoiceDialog::wxSingleChoiceDialog(wxWindow *parent,
-                                           const wxString& message,
-                                           const wxString& caption,
-                                           int n,
-                                           const wxString *choices,
-                                           char **clientData,
-                                           long style,
-                                           const wxPoint& WXUNUSED(pos))
-{
-    Create(parent, message, caption, n, choices, clientData, style);
-}
-
-wxSingleChoiceDialog::wxSingleChoiceDialog(wxWindow *parent,
-                                           const wxString& message,
-                                           const wxString& caption,
-                                           const wxArrayString& choices,
-                                           char **clientData,
-                                           long style,
-                                           const wxPoint& WXUNUSED(pos))
-{
-    Create(parent, message, caption, choices, clientData, style);
-}
-
 bool wxSingleChoiceDialog::Create( wxWindow *parent,
                                    const wxString& message,
                                    const wxString& caption,
                                    int n,
                                    const wxString *choices,
-                                   char **clientData,
+                                   void **clientData,
                                    long style,
                                    const wxPoint& pos )
 {
@@ -424,7 +496,7 @@ bool wxSingleChoiceDialog::Create( wxWindow *parent,
                                    const wxString& message,
                                    const wxString& caption,
                                    const wxArrayString& choices,
-                                   char **clientData,
+                                   void **clientData,
                                    long style,
                                    const wxPoint& pos )
 {
@@ -436,6 +508,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;
 }