// global data
// ----------------------------------------------------------------------------
-extern WXDLLEXPORT_DATA(const wxChar) wxListBoxNameStr[];
+extern WXDLLIMPEXP_DATA_CORE(const char) wxListBoxNameStr[];
// ----------------------------------------------------------------------------
// wxListBox interface is defined by the class wxListBoxBase
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxListBoxBase : public wxControlWithItems
+class WXDLLIMPEXP_CORE wxListBoxBase : public wxControlWithItems
{
public:
wxListBoxBase() { }
// multiple selection logic
virtual bool IsSelected(int n) const = 0;
- virtual void SetSelection(int n) { DoSetSelection(n, true); }
+ 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);
// event.GetExtraLong())
void Command(wxCommandEvent& event);
- // returns the item number at a point or wxNOT_FOUND
+ // 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)); }
-#if WXWIN_COMPATIBILITY_2_6
- // compatibility - these functions are deprecated, use the new ones
- // instead
- wxDEPRECATED( bool Selected(int n) const );
-#endif // WXWIN_COMPATIBILITY_2_6
protected:
virtual void DoSetFirstItem(int n) = 0;
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:
- DECLARE_NO_COPY_CLASS(wxListBoxBase)
+ wxDECLARE_NO_COPY_CLASS(wxListBoxBase);
};
-#if WXWIN_COMPATIBILITY_2_6
- inline bool wxListBoxBase::Selected(int n) const { return IsSelected(n); }
-#endif // WXWIN_COMPATIBILITY_2_6
-
// ----------------------------------------------------------------------------
// include the platform-specific class declaration
// ----------------------------------------------------------------------------
#elif defined(__WXGTK__)
#include "wx/gtk1/listbox.h"
#elif defined(__WXMAC__)
- #include "wx/mac/listbox.h"
+ #include "wx/osx/listbox.h"
#elif defined(__WXPM__)
#include "wx/os2/listbox.h"
#elif defined(__WXCOCOA__)