| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- ///////////////////////////////////////////////////////////////////////////////
- // Name: wx/listbox.h
- // Purpose: wxListBox class interface
- // Author: Vadim Zeitlin
- // Modified by:
- // Created: 22.10.99
- // Copyright: (c) wxWidgets team
- // Licence: wxWindows licence
- ///////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_LISTBOX_H_BASE_
- #define _WX_LISTBOX_H_BASE_
- // ----------------------------------------------------------------------------
- // headers
- // ----------------------------------------------------------------------------
- #include "wx/defs.h"
- #if wxUSE_LISTBOX
- #include "wx/ctrlsub.h" // base class
- // forward declarations are enough here
- class WXDLLIMPEXP_FWD_BASE wxArrayInt;
- class WXDLLIMPEXP_FWD_BASE wxArrayString;
- // ----------------------------------------------------------------------------
- // global data
- // ----------------------------------------------------------------------------
- extern WXDLLIMPEXP_DATA_CORE(const char) wxListBoxNameStr[];
- // ----------------------------------------------------------------------------
- // wxListBox interface is defined by the class wxListBoxBase
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxListBoxBase : public wxControlWithItems
- {
- public:
- wxListBoxBase() { }
- virtual ~wxListBoxBase();
- void InsertItems(unsigned int nItems, const wxString *items, unsigned int pos)
- { Insert(nItems, items, pos); }
- void InsertItems(const wxArrayString& items, unsigned int pos)
- { Insert(items, pos); }
- // multiple selection logic
- virtual bool IsSelected(int n) const = 0;
- virtual void SetSelection(int n);
- void SetSelection(int n, bool select) { DoSetSelection(n, select); }
- void Deselect(int n) { DoSetSelection(n, false); }
- void DeselectAll(int itemToLeaveSelected = -1);
- virtual bool SetStringSelection(const wxString& s, bool select);
- virtual bool SetStringSelection(const wxString& s)
- {
- return SetStringSelection(s, true);
- }
- // works for single as well as multiple selection listboxes (unlike
- // GetSelection which only works for listboxes with single selection)
- virtual int GetSelections(wxArrayInt& aSelections) const = 0;
- // set the specified item at the first visible item or scroll to max
- // range.
- void SetFirstItem(int n) { DoSetFirstItem(n); }
- void SetFirstItem(const wxString& s);
- // ensures that the given item is visible scrolling the listbox if
- // necessary
- virtual void EnsureVisible(int n);
- // a combination of Append() and EnsureVisible(): appends the item to the
- // listbox and ensures that it is visible i.e. not scrolled out of view
- void AppendAndEnsureVisible(const wxString& s);
- // return true if the listbox allows multiple selection
- bool HasMultipleSelection() const
- {
- return (m_windowStyle & wxLB_MULTIPLE) ||
- (m_windowStyle & wxLB_EXTENDED);
- }
- // override wxItemContainer::IsSorted
- virtual bool IsSorted() const { return HasFlag( wxLB_SORT ); }
- // emulate selecting or deselecting the item event.GetInt() (depending on
- // event.GetExtraLong())
- void Command(wxCommandEvent& event);
- // return the index of the item at this position or wxNOT_FOUND
- int HitTest(const wxPoint& point) const { return DoListHitTest(point); }
- int HitTest(int x, int y) const { return DoListHitTest(wxPoint(x, y)); }
- protected:
- virtual void DoSetFirstItem(int n) = 0;
- virtual void DoSetSelection(int n, bool select) = 0;
- // there is already wxWindow::DoHitTest() so call this one differently
- virtual int DoListHitTest(const wxPoint& WXUNUSED(point)) const
- { return wxNOT_FOUND; }
- // Helper for the code generating events in single selection mode: updates
- // m_oldSelections and return true if the selection really changed.
- // Otherwise just returns false.
- bool DoChangeSingleSelection(int item);
- // Helper for generating events in multiple and extended mode: compare the
- // current selections with the previously recorded ones (in
- // m_oldSelections) and send the appropriate event if they differ,
- // otherwise just return false.
- bool CalcAndSendEvent();
- // Send a listbox (de)selection or double click event.
- //
- // Returns true if the event was processed.
- bool SendEvent(wxEventType evtType, int item, bool selected);
- // Array storing the indices of all selected items that we already notified
- // the user code about for multi selection list boxes.
- //
- // For single selection list boxes, we reuse this array to store the single
- // currently selected item, this is used by DoChangeSingleSelection().
- //
- // TODO-OPT: wxSelectionStore would be more efficient for big list boxes.
- wxArrayInt m_oldSelections;
- // Update m_oldSelections with currently selected items (does nothing in
- // single selection mode on platforms other than MSW).
- void UpdateOldSelections();
- private:
- wxDECLARE_NO_COPY_CLASS(wxListBoxBase);
- };
- // ----------------------------------------------------------------------------
- // include the platform-specific class declaration
- // ----------------------------------------------------------------------------
- #if defined(__WXUNIVERSAL__)
- #include "wx/univ/listbox.h"
- #elif defined(__WXMSW__)
- #include "wx/msw/listbox.h"
- #elif defined(__WXMOTIF__)
- #include "wx/motif/listbox.h"
- #elif defined(__WXGTK20__)
- #include "wx/gtk/listbox.h"
- #elif defined(__WXGTK__)
- #include "wx/gtk1/listbox.h"
- #elif defined(__WXMAC__)
- #include "wx/osx/listbox.h"
- #elif defined(__WXPM__)
- #include "wx/os2/listbox.h"
- #elif defined(__WXCOCOA__)
- #include "wx/cocoa/listbox.h"
- #endif
- #endif // wxUSE_LISTBOX
- #endif
- // _WX_LISTBOX_H_BASE_
|