]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/generic/choicdgg.h
optimize rendering code by calling GetClientSize(), GetTextExtent() and CalculateAbsW...
[wxWidgets.git] / include / wx / generic / choicdgg.h
index 0fbf506718ce88e3f21a15a323f4e02f0e1deff6..97b9a8949b9ccdc7d0b9d46a63b458b7d6acab4a 100644 (file)
 /////////////////////////////////////////////////////////////////////////////
-// Name:        choicdgg.h
+// Name:        wx/generic/choicdgg.h
 // Purpose:     Generic choice dialogs
 // Author:      Julian Smart
-// Modified by:
+// Modified by: 03.11.00: VZ to add wxArrayString and multiple sel functions
 // Created:     01/02/97
 // RCS-ID:      $Id$
-// Copyright:   (c)
-// Licence:    wxWindows licence
+// Copyright:   (c) wxWidgets team
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifndef __CHOICEDLGH_G__
-#define __CHOICEDLGH_G__
+#ifndef _WX_GENERIC_CHOICDGG_H_
+#define _WX_GENERIC_CHOICDGG_H_
 
-#ifdef __GNUG__
-#pragma interface "choicdgg.h"
-#endif
-
-#include "wx/setup.h"
+#include "wx/dynarray.h"
 #include "wx/dialog.h"
 
+class WXDLLIMPEXP_FWD_CORE wxListBoxBase;
+
+// ----------------------------------------------------------------------------
+// some (ugly...) constants
+// ----------------------------------------------------------------------------
+
 #define wxCHOICE_HEIGHT 150
 #define wxCHOICE_WIDTH 200
 
-#define wxID_LISTBOX 3000
+#ifdef __WXWINCE__
+#define wxCHOICEDLG_STYLE \
+    (wxDEFAULT_DIALOG_STYLE | wxOK | wxCANCEL | wxCENTRE)
+#else
+#define wxCHOICEDLG_STYLE \
+    (wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxOK | wxCANCEL | wxCENTRE)
+#endif
+
+// ----------------------------------------------------------------------------
+// wxAnyChoiceDialog: a base class for dialogs containing a listbox
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_CORE wxAnyChoiceDialog : public wxDialog
+{
+public:
+    wxAnyChoiceDialog() { }
+
+    wxAnyChoiceDialog(wxWindow *parent,
+                      const wxString& message,
+                      const wxString& caption,
+                      int n, const wxString *choices,
+                      long styleDlg = wxCHOICEDLG_STYLE,
+                      const wxPoint& pos = wxDefaultPosition,
+                      long styleLbox = wxLB_ALWAYS_SB)
+    {
+        (void)Create(parent, message, caption, n, choices,
+                     styleDlg, pos, styleLbox);
+    }
+    wxAnyChoiceDialog(wxWindow *parent,
+                      const wxString& message,
+                      const wxString& caption,
+                      const wxArrayString& choices,
+                      long styleDlg = wxCHOICEDLG_STYLE,
+                      const wxPoint& pos = wxDefaultPosition,
+                      long styleLbox = wxLB_ALWAYS_SB)
+    {
+        (void)Create(parent, message, caption, choices,
+                     styleDlg, pos, styleLbox);
+    }
+
+    bool Create(wxWindow *parent,
+                const wxString& message,
+                const wxString& caption,
+                int n, const wxString *choices,
+                long styleDlg = wxCHOICEDLG_STYLE,
+                const wxPoint& pos = wxDefaultPosition,
+                long styleLbox = wxLB_ALWAYS_SB);
+    bool Create(wxWindow *parent,
+                const wxString& message,
+                const wxString& caption,
+                const wxArrayString& choices,
+                long styleDlg = wxCHOICEDLG_STYLE,
+                const wxPoint& pos = wxDefaultPosition,
+                long styleLbox = wxLB_ALWAYS_SB);
 
-class WXDLLEXPORT wxSingleChoiceDialog: public wxDialog
+protected:
+    wxListBoxBase *m_listbox;
+
+    virtual wxListBoxBase *CreateList(int n,
+                                      const wxString *choices,
+                                      long styleLbox);
+
+    wxDECLARE_NO_COPY_CLASS(wxAnyChoiceDialog);
+};
+
+// ----------------------------------------------------------------------------
+// wxSingleChoiceDialog: a dialog with single selection listbox
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_CORE wxSingleChoiceDialog : public wxAnyChoiceDialog
 {
-DECLARE_DYNAMIC_CLASS(wxSingleChoiceDialog)
 public:
-    wxSingleChoiceDialog(wxWindow *parent, const wxString& message, const wxString& caption,
-        int n, const wxString *choices, char **clientData = (char **) NULL, long style = wxOK|wxCANCEL|wxCENTRE, const wxPoint& pos = wxDefaultPosition);
+    wxSingleChoiceDialog()
+    {
+        m_selection = -1;
+    }
 
-    wxSingleChoiceDialog(wxWindow *parent, const wxString& message, const wxString& caption,
-        const wxStringList& choices, char **clientData = (char **) NULL, long style = wxOK|wxCANCEL|wxCENTRE, const wxPoint& pos = wxDefaultPosition);
+    wxSingleChoiceDialog(wxWindow *parent,
+                         const wxString& message,
+                         const wxString& caption,
+                         int n,
+                         const wxString *choices,
+                         char **clientData = (char **)NULL,
+                         long style = wxCHOICEDLG_STYLE,
+                         const wxPoint& pos = wxDefaultPosition);
+    wxSingleChoiceDialog(wxWindow *parent,
+                         const wxString& message,
+                         const wxString& caption,
+                         const wxArrayString& choices,
+                         char **clientData = (char **)NULL,
+                         long style = wxCHOICEDLG_STYLE,
+                         const wxPoint& pos = wxDefaultPosition);
 
-    bool Create(wxWindow *parent, const wxString& message, const wxString& caption,
-        int n, const wxString *choices, char **clientData = (char **) NULL, long style = wxOK|wxCANCEL|wxCENTRE, const wxPoint& pos = wxDefaultPosition);
-    bool Create(wxWindow *parent, const wxString& message, const wxString& caption,
-        const wxStringList& choices, char **clientData = (char **) NULL, long style = wxOK|wxCANCEL|wxCENTRE, const wxPoint& pos = wxDefaultPosition);
+    bool Create(wxWindow *parent,
+                const wxString& message,
+                const wxString& caption,
+                int n,
+                const wxString *choices,
+                char **clientData = (char **)NULL,
+                long style = wxCHOICEDLG_STYLE,
+                const wxPoint& pos = wxDefaultPosition);
+    bool Create(wxWindow *parent,
+                const wxString& message,
+                const wxString& caption,
+                const wxArrayString& choices,
+                char **clientData = (char **)NULL,
+                long style = wxCHOICEDLG_STYLE,
+                const wxPoint& pos = wxDefaultPosition);
 
-    void SetSelection(int sel) ;
-    inline int GetSelection(void) const { return m_selection; }
-    inline wxString GetStringSelection(void) const { return m_stringSelection; }
-    inline char *GetSelectionClientData(void) const { return m_clientData; }
+    void SetSelection(int sel);
+    int GetSelection() const { return m_selection; }
+    wxString GetStringSelection() const { return m_stringSelection; }
 
+    // obsolete function (NB: no need to make it return wxChar, it's untyped)
+    char *GetSelectionClientData() const { return (char *)m_clientData; }
+
+    // implementation from now on
     void OnOK(wxCommandEvent& event);
+#ifndef __SMARTPHONE__
     void OnListBoxDClick(wxCommandEvent& event);
-
-DECLARE_EVENT_TABLE()
+#endif
+#ifdef __WXWINCE__
+    void OnJoystickButtonDown(wxJoystickEvent& event);
+#endif
 
 protected:
-    long        m_dialogStyle;
     int         m_selection;
     wxString    m_stringSelection;
-    char*       m_clientData;
+
+    void DoChoice();
+
+private:
+    DECLARE_DYNAMIC_CLASS_NO_COPY(wxSingleChoiceDialog)
+    DECLARE_EVENT_TABLE()
 };
 
-wxString WXDLLEXPORT wxGetSingleChoice(const wxString& message, const wxString& caption,
-                        int n, const wxString *choices, wxWindow *parent = (wxWindow *) NULL,
-                        int x = -1, int y = -1, bool centre = TRUE,
-                        int width = wxCHOICE_WIDTH, int height = wxCHOICE_HEIGHT);
+// ----------------------------------------------------------------------------
+// wxMultiChoiceDialog: a dialog with multi selection listbox
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_CORE wxMultiChoiceDialog : public wxAnyChoiceDialog
+{
+public:
+    wxMultiChoiceDialog() { }
+
+    wxMultiChoiceDialog(wxWindow *parent,
+                        const wxString& message,
+                        const wxString& caption,
+                        int n,
+                        const wxString *choices,
+                        long style = wxCHOICEDLG_STYLE,
+                        const wxPoint& pos = wxDefaultPosition)
+    {
+        (void)Create(parent, message, caption, n, choices, style, pos);
+    }
+    wxMultiChoiceDialog(wxWindow *parent,
+                        const wxString& message,
+                        const wxString& caption,
+                        const wxArrayString& choices,
+                        long style = wxCHOICEDLG_STYLE,
+                        const wxPoint& pos = wxDefaultPosition)
+    {
+        (void)Create(parent, message, caption, choices, style, pos);
+    }
+
+    bool Create(wxWindow *parent,
+                const wxString& message,
+                const wxString& caption,
+                int n,
+                const wxString *choices,
+                long style = wxCHOICEDLG_STYLE,
+                const wxPoint& pos = wxDefaultPosition);
+    bool Create(wxWindow *parent,
+                const wxString& message,
+                const wxString& caption,
+                const wxArrayString& choices,
+                long style = wxCHOICEDLG_STYLE,
+                const wxPoint& pos = wxDefaultPosition);
 
-wxString WXDLLEXPORT wxGetSingleChoice(const wxString& message, const wxString& caption,
-                        int n, char *choices[], wxWindow *parent = (wxWindow *) NULL,
-                        int x = -1, int y = -1, bool centre = TRUE,
-                        int width = wxCHOICE_WIDTH, int height = wxCHOICE_HEIGHT);
+    void SetSelections(const wxArrayInt& selections);
+    wxArrayInt GetSelections() const { return m_selections; }
+
+    // implementation from now on
+    virtual bool TransferDataFromWindow();
+
+protected:
+#if wxUSE_CHECKLISTBOX
+    virtual wxListBoxBase *CreateList(int n,
+                                      const wxString *choices,
+                                      long styleLbox);
+#endif // wxUSE_CHECKLISTBOX
+
+    wxArrayInt m_selections;
+
+private:
+    DECLARE_DYNAMIC_CLASS_NO_COPY(wxMultiChoiceDialog)
+};
+
+// ----------------------------------------------------------------------------
+// wrapper functions which can be used to get selection(s) from the user
+// ----------------------------------------------------------------------------
+
+// get the user selection as a string
+WXDLLIMPEXP_CORE wxString wxGetSingleChoice(const wxString& message,
+                                       const wxString& caption,
+                                       const wxArrayString& choices,
+                                       wxWindow *parent = NULL,
+                                       int x = wxDefaultCoord,
+                                       int y = wxDefaultCoord,
+                                       bool centre = true,
+                                       int width = wxCHOICE_WIDTH,
+                                       int height = wxCHOICE_HEIGHT);
+
+WXDLLIMPEXP_CORE wxString wxGetSingleChoice(const wxString& message,
+                                       const wxString& caption,
+                                       int n, const wxString *choices,
+                                       wxWindow *parent = NULL,
+                                       int x = wxDefaultCoord,
+                                       int y = wxDefaultCoord,
+                                       bool centre = true,
+                                       int width = wxCHOICE_WIDTH,
+                                       int height = wxCHOICE_HEIGHT);
 
 // Same as above but gets position in list of strings, instead of string,
 // or -1 if no selection
-int WXDLLEXPORT wxGetSingleChoiceIndex(const wxString& message, const wxString& caption,
-                           int n, const wxString *choices, wxWindow *parent = (wxWindow *) NULL,
-                           int x = -1, int y = -1, bool centre = TRUE,
-                           int width = wxCHOICE_WIDTH, int height = wxCHOICE_HEIGHT);
-
-int WXDLLEXPORT wxGetSingleChoiceIndex(const wxString& message, const wxString& caption,
-                           int n, char *choices[], wxWindow *parent = (wxWindow *) NULL,
-                           int x = -1, int y = -1, bool centre = TRUE,
-                           int width = wxCHOICE_WIDTH, int height = wxCHOICE_HEIGHT);
-
-// Return client data instead
-char* WXDLLEXPORT wxGetSingleChoiceData(const wxString& message, const wxString& caption,
-                            int n, const wxString *choices, char **client_data,
-                            wxWindow *parent = (wxWindow *) NULL, int x = -1, int y = -1,
-                            bool centre = TRUE,
-                            int width = wxCHOICE_WIDTH, int height = wxCHOICE_HEIGHT);
-
-char* WXDLLEXPORT wxGetSingleChoiceData(const wxString& message, const wxString& caption,
-                            int n, char *choices[], char **client_data,
-                            wxWindow *parent = (wxWindow *) NULL, int x = -1, int y = -1,
-                            bool centre = TRUE,
-                            int width = wxCHOICE_WIDTH, int height = wxCHOICE_HEIGHT);
-
-/*
-int WXDLLEXPORT wxGetMultipleChoice(const wxString& message, const wxString& caption,
-                         int n, const wxString *choices,
-                         int nsel, int * selection,
-                         wxWindow *parent = NULL, int x = -1 , int y = -1, bool centre = TRUE,
-                         int width = wxCHOICE_WIDTH, int height = wxCHOICE_HEIGHT);
-*/
+WXDLLIMPEXP_CORE int wxGetSingleChoiceIndex(const wxString& message,
+                                       const wxString& caption,
+                                       const wxArrayString& choices,
+                                       wxWindow *parent = NULL,
+                                       int x = wxDefaultCoord,
+                                       int y = wxDefaultCoord,
+                                       bool centre = true,
+                                       int width = wxCHOICE_WIDTH,
+                                       int height = wxCHOICE_HEIGHT);
 
-#endif
+WXDLLIMPEXP_CORE int wxGetSingleChoiceIndex(const wxString& message,
+                                       const wxString& caption,
+                                       int n, const wxString *choices,
+                                       wxWindow *parent = NULL,
+                                       int x = wxDefaultCoord,
+                                       int y = wxDefaultCoord,
+                                       bool centre = true,
+                                       int width = wxCHOICE_WIDTH,
+                                       int height = wxCHOICE_HEIGHT);
+
+// Return client data instead or NULL if cancelled
+WXDLLIMPEXP_CORE void* wxGetSingleChoiceData(const wxString& message,
+                                        const wxString& caption,
+                                        const wxArrayString& choices,
+                                        void **client_data,
+                                        wxWindow *parent = NULL,
+                                        int x = wxDefaultCoord,
+                                        int y = wxDefaultCoord,
+                                        bool centre = true,
+                                        int width = wxCHOICE_WIDTH,
+                                        int height = wxCHOICE_HEIGHT);
+
+WXDLLIMPEXP_CORE void* wxGetSingleChoiceData(const wxString& message,
+                                        const wxString& caption,
+                                        int n, const wxString *choices,
+                                        void **client_data,
+                                        wxWindow *parent = NULL,
+                                        int x = wxDefaultCoord,
+                                        int y = wxDefaultCoord,
+                                        bool centre = true,
+                                        int width = wxCHOICE_WIDTH,
+                                        int height = wxCHOICE_HEIGHT);
+
+// fill the array with the indices of the chosen items, it will be empty
+// if no items were selected or Cancel was pressed - return the number of
+// selections
+WXDLLIMPEXP_CORE size_t wxGetMultipleChoices(wxArrayInt& selections,
+                                        const wxString& message,
+                                        const wxString& caption,
+                                        int n, const wxString *choices,
+                                        wxWindow *parent = NULL,
+                                        int x = wxDefaultCoord,
+                                        int y = wxDefaultCoord,
+                                        bool centre = true,
+                                        int width = wxCHOICE_WIDTH,
+                                        int height = wxCHOICE_HEIGHT);
+
+WXDLLIMPEXP_CORE size_t wxGetMultipleChoices(wxArrayInt& selections,
+                                        const wxString& message,
+                                        const wxString& caption,
+                                        const wxArrayString& choices,
+                                        wxWindow *parent = NULL,
+                                        int x = wxDefaultCoord,
+                                        int y = wxDefaultCoord,
+                                        bool centre = true,
+                                        int width = wxCHOICE_WIDTH,
+                                        int height = wxCHOICE_HEIGHT);
+
+#endif // _WX_GENERIC_CHOICDGG_H_