]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/listbox.h
Implement monitoring of file descriptors in wxMotif event loop.
[wxWidgets.git] / interface / wx / listbox.h
index 029a510b5a1410935d7991cd5f147d0b57265ed6..4f559e706f791343b9f2defd50061ac836550931 100644 (file)
@@ -3,7 +3,7 @@
 // Purpose:     interface of wxListBox
 // Author:      wxWidgets team
 // RCS-ID:      $Id$
 // Purpose:     interface of wxListBox
 // Author:      wxWidgets team
 // RCS-ID:      $Id$
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 /**
 /////////////////////////////////////////////////////////////////////////////
 
 /**
     (clicking an item toggles the item on or off independently of other
     selections).
 
     (clicking an item toggles the item on or off independently of other
     selections).
 
-    List box elements are numbered from zero.
-    Their number may be limited under some platforms.
+    List box elements are numbered from zero and while the maximal number of
+    elements is unlimited, it is usually better to use a virtual control, not
+    requiring to add all the items to it at once, such as wxDataViewCtrl or
+    wxListCtrl with @c wxLC_VIRTUAL style, once more than a few hundreds items
+    need to be displayed because this control is not optimized, neither from
+    performance nor from user interface point of view, for large number of
+    items.
 
 
-    A listbox callback gets an event @c wxEVT_COMMAND_LISTBOX_SELECTED for
-    single clicks, and @c wxEVT_COMMAND_LISTBOX_DOUBLECLICKED for double clicks.
+    Notice that currently @c TAB characters in list box items text are not
+    handled consistently under all platforms, so they should be replaced by
+    spaces to display strings properly everywhere. The list box doesn't
+    support any other control characters at all.
 
     @beginStyleTable
     @style{wxLB_SINGLE}
 
     @beginStyleTable
     @style{wxLB_SINGLE}
-           Single-selection list.
+        Single-selection list.
     @style{wxLB_MULTIPLE}
     @style{wxLB_MULTIPLE}
-           Multiple-selection list: the user can toggle multiple items on and off.
-           This is the same as wxLB_EXTENDED in wxGTK2 port.
+        Multiple-selection list: the user can toggle multiple items on and off.
+        This is the same as wxLB_EXTENDED in wxGTK2 port.
     @style{wxLB_EXTENDED}
     @style{wxLB_EXTENDED}
-           Extended-selection list: the user can extend the selection by using
-           @c SHIFT or @c CTRL keys together with the cursor movement keys or
-           the mouse.
+        Extended-selection list: the user can extend the selection by using
+        @c SHIFT or @c CTRL keys together with the cursor movement keys or
+        the mouse.
     @style{wxLB_HSCROLL}
     @style{wxLB_HSCROLL}
-           Create horizontal scrollbar if contents are too wide (Windows only).
+        Create horizontal scrollbar if contents are too wide (Windows only).
     @style{wxLB_ALWAYS_SB}
     @style{wxLB_ALWAYS_SB}
-           Always show a vertical scrollbar.
+        Always show a vertical scrollbar.
     @style{wxLB_NEEDED_SB}
     @style{wxLB_NEEDED_SB}
-           Only create a vertical scrollbar if needed.
+        Only create a vertical scrollbar if needed.
+    @style{wxLB_NO_SB}
+        Don't create vertical scrollbar (wxMSW only).
     @style{wxLB_SORT}
     @style{wxLB_SORT}
-           The listbox contents are sorted in alphabetical order.
+        The listbox contents are sorted in alphabetical order.
     @endStyleTable
 
     Note that @c wxLB_SINGLE, @c wxLB_MULTIPLE and @c wxLB_EXTENDED styles are
     mutually exclusive and you can specify at most one of them (single selection
     is the default). See also @ref overview_windowstyles.
 
     @endStyleTable
 
     Note that @c wxLB_SINGLE, @c wxLB_MULTIPLE and @c wxLB_EXTENDED styles are
     mutually exclusive and you can specify at most one of them (single selection
     is the default). See also @ref overview_windowstyles.
 
-    @beginEventTable{wxCommandEvent}
+    @beginEventEmissionTable{wxCommandEvent}
     @event{EVT_LISTBOX(id, func)}
     @event{EVT_LISTBOX(id, func)}
-           Process a wxEVT_COMMAND_LISTBOX_SELECTED event, when an item on the
-           list is selected or the selection changes.
+        Process a @c wxEVT_LISTBOX event, when an item on the
+        list is selected or the selection changes.
     @event{EVT_LISTBOX_DCLICK(id, func)}
     @event{EVT_LISTBOX_DCLICK(id, func)}
-           Process a wxEVT_COMMAND_LISTBOXDOUBLECLICKED event, when the listbox
-           is double-clicked.
+        Process a @c wxEVT_LISTBOX_DCLICK event, when the listbox
+        is double-clicked.
     @endEventTable
 
     @library{wxcore}
     @category{ctrl}
     @endEventTable
 
     @library{wxcore}
     @category{ctrl}
-    @appearance{listbox.png}
+    @appearance{listbox}
 
     @see wxEditableListBox, wxChoice, wxComboBox, wxListCtrl, wxCommandEvent
 */
 
     @see wxEditableListBox, wxChoice, wxComboBox, wxListCtrl, wxCommandEvent
 */
-class wxListBox : public wxControlWithItems
+class wxListBox : public wxControl,
+                  public wxItemContainer
 {
 public:
     /**
 {
 public:
     /**
@@ -79,9 +89,10 @@ public:
             The ID of this control. A value of @c wxID_ANY indicates a default value.
         @param pos
             The initial position.
             The ID of this control. A value of @c wxID_ANY indicates a default value.
         @param pos
             The initial position.
+            If ::wxDefaultPosition is specified then a default position is chosen.
         @param size
             The initial size.
         @param size
             The initial size.
-            If wxDefaultSize is specified then the window is sized appropriately.
+            If ::wxDefaultSize is specified then the window is sized appropriately.
         @param n
             Number of strings with which to initialise the control.
         @param choices
         @param n
             Number of strings with which to initialise the control.
         @param choices
@@ -92,6 +103,10 @@ public:
             The validator for this control.
         @param name
             The name of this class.
             The validator for this control.
         @param name
             The name of this class.
+
+        @beginWxPerlOnly
+        Not supported by wxPerl.
+        @endWxPerlOnly
     */
 
     wxListBox(wxWindow* parent, wxWindowID id,
     */
 
     wxListBox(wxWindow* parent, wxWindowID id,
@@ -109,6 +124,10 @@ public:
         See the other wxListBox() constructor; the only difference is that
         this overload takes a wxArrayString instead of a pointer to an array
         of wxString.
         See the other wxListBox() constructor; the only difference is that
         this overload takes a wxArrayString instead of a pointer to an array
         of wxString.
+
+        @beginWxPerlOnly
+        Use an array reference for the @a choices parameter.
+        @endWxPerlOnly
     */
 
     wxListBox(wxWindow* parent, wxWindowID id,
     */
 
     wxListBox(wxWindow* parent, wxWindowID id,
@@ -129,21 +148,20 @@ public:
         Creates the listbox for two-step construction.
         See wxListBox() for further details.
     */
         Creates the listbox for two-step construction.
         See wxListBox() for further details.
     */
-    bool Create(wxWindowparent, wxWindowID id,
+    bool Create(wxWindow *parent, wxWindowID id,
                 const wxPoint& pos = wxDefaultPosition,
                 const wxSize& size = wxDefaultSize,
                 const wxPoint& pos = wxDefaultPosition,
                 const wxSize& size = wxDefaultSize,
-                int n,
-                const wxString choices[] = NULL,
+                int n = 0, const wxString choices[] = NULL,
                 long style = 0,
                 const wxValidator& validator = wxDefaultValidator,
                 long style = 0,
                 const wxValidator& validator = wxDefaultValidator,
-                const wxString& name = "listBox");
-    bool Create(wxWindowparent, wxWindowID id,
+                const wxString& name = wxListBoxNameStr);
+    bool Create(wxWindow *parent, wxWindowID id,
                 const wxPoint& pos,
                 const wxSize& size,
                 const wxArrayString& choices,
                 long style = 0,
                 const wxValidator& validator = wxDefaultValidator,
                 const wxPoint& pos,
                 const wxSize& size,
                 const wxArrayString& choices,
                 long style = 0,
                 const wxValidator& validator = wxDefaultValidator,
-                const wxString& name = "listBox");
+                const wxString& name = wxListBoxNameStr);
     //@}
 
     /**
     //@}
 
     /**
@@ -156,6 +174,13 @@ public:
     */
     void Deselect(int n);
 
     */
     void Deselect(int n);
 
+    virtual void SetSelection(int n);
+    
+    virtual int GetSelection() const;
+    
+    virtual bool SetStringSelection(const wxString& s, bool select);
+    virtual bool SetStringSelection(const wxString& s);
+
     /**
         Fill an array of ints with the positions of the currently selected items.
 
     /**
         Fill an array of ints with the positions of the currently selected items.
 
@@ -167,6 +192,11 @@ public:
 
         @remarks Use this with a multiple selection listbox.
 
 
         @remarks Use this with a multiple selection listbox.
 
+        @beginWxPerlOnly
+        In wxPerl this method takes no parameters and return the
+        selected items as a list.
+        @endWxPerlOnly
+
         @see wxControlWithItems::GetSelection, wxControlWithItems::GetStringSelection,
              wxControlWithItems::SetSelection
     */
         @see wxControlWithItems::GetSelection, wxControlWithItems::GetStringSelection,
              wxControlWithItems::SetSelection
     */
@@ -188,6 +218,11 @@ public:
     */
     int HitTest(const wxPoint& point) const;
 
     */
     int HitTest(const wxPoint& point) const;
 
+    /**
+        @overload
+    */
+    int HitTest(int x, int y) const;
+
     /**
         Insert the given number of strings before the specified position.
 
     /**
         Insert the given number of strings before the specified position.
 
@@ -198,8 +233,12 @@ public:
         @param pos
             Position before which to insert the items: if pos is 0 the
             items will be inserted in the beginning of the listbox
         @param pos
             Position before which to insert the items: if pos is 0 the
             items will be inserted in the beginning of the listbox
+
+        @beginWxPerlOnly
+        Not supported by wxPerl.
+        @endWxPerlOnly
     */
     */
-    void InsertItems(int nItems, const wxString *items,
+    void InsertItems(unsigned int nItems, const wxString *items,
                      unsigned int pos);
 
     /**
                      unsigned int pos);
 
     /**
@@ -210,6 +249,10 @@ public:
         @param pos
             Position before which to insert the items: if pos is @c 0 the
             items will be inserted in the beginning of the listbox
         @param pos
             Position before which to insert the items: if pos is @c 0 the
             items will be inserted in the beginning of the listbox
+
+        @beginWxPerlOnly
+        Use an array reference for the @a items parameter.
+        @endWxPerlOnly
     */
     void InsertItems(const wxArrayString& items,
                      unsigned int pos);
     */
     void InsertItems(const wxArrayString& items,
                      unsigned int pos);
@@ -224,30 +267,6 @@ public:
     */
     virtual bool IsSelected(int n) const;
 
     */
     virtual bool IsSelected(int n) const;
 
-    /**
-        Clears the list box and adds the given strings to it.
-
-        @param n
-            The number of strings to set.
-        @param choices
-            An array of strings to set.
-        @param clientData
-            Options array of client data pointers
-    */
-    void Set(int n, const wxString* choices, void **clientData = NULL);
-
-    /**
-        Clears the list box and adds the given strings to it.
-        You may free the array from the calling program after this method
-        has been called.
-
-        @param choices
-            An array of strings to set.
-        @param clientData
-            Options array of client data pointers
-    */
-    void Set(const wxArrayString& choices, void **clientData = NULL);
-
     /**
         Set the specified item to be the first visible item.
 
     /**
         Set the specified item to be the first visible item.
 
@@ -263,5 +282,32 @@ public:
             The string that should be visible.
     */
     void SetFirstItem(const wxString& string);
             The string that should be visible.
     */
     void SetFirstItem(const wxString& string);
+
+    /**
+        Ensure that the item with the given index is currently shown.
+
+        Scroll the listbox if necessary.
+
+        This method is currently only implemented in wxGTK and wxOSX and does
+        nothing in other ports.
+
+        @see SetFirstItem()
+     */
+    virtual void EnsureVisible(int n);
+
+    /**
+        Return true if the listbox has ::wxLB_SORT style.
+
+        This method is mostly meant for internal use only.
+     */
+    virtual bool IsSorted() const;
+
+
+    // NOTE: Phoenix needs to see the implementation of pure virtuals so it
+    // knows that this class is not abstract.
+    virtual unsigned int GetCount() const; 
+    virtual wxString GetString(unsigned int n) const; 
+    virtual void SetString(unsigned int n, const wxString& s); 
+    virtual int FindString(const wxString& s, bool bCase = false) const;     
 };
 
 };