X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/be465555381c323bdf854da04ca943e15cbb2d2d..a7689c49fe02c0c065facf736ab28b19f5997b7c:/include/wx/vlbox.h diff --git a/include/wx/vlbox.h b/include/wx/vlbox.h index ff1dc10de9..96ab2bde6f 100644 --- a/include/wx/vlbox.h +++ b/include/wx/vlbox.h @@ -5,7 +5,7 @@ // Modified by: // Created: 31.05.03 // RCS-ID: $Id$ -// Copyright: (c) 2003 Vadim Zeitlin +// Copyright: (c) 2003 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -13,10 +13,10 @@ #define _WX_VLBOX_H_ #include "wx/vscroll.h" // base class +#include "wx/bitmap.h" -class WXDLLEXPORT wxSelectionStore; - -#define wxVListBoxNameStr _T("wxVListBox") +class WXDLLIMPEXP_FWD_CORE wxSelectionStore; +extern WXDLLIMPEXP_DATA_CORE(const char) wxVListBoxNameStr[]; // ---------------------------------------------------------------------------- // wxVListBox @@ -31,7 +31,7 @@ class WXDLLEXPORT wxSelectionStore; It emits the same events as wxListBox and the same event macros may be used with it. */ -class WXDLLEXPORT wxVListBox : public wxVScrolledWindow +class WXDLLIMPEXP_CORE wxVListBox : public wxVScrolledWindow { public: // constructors and such @@ -74,7 +74,7 @@ public: // --------- // get the number of items in the control - size_t GetItemCount() const { return GetLineCount(); } + size_t GetItemCount() const { return GetRowCount(); } // does this control use multiple selection? bool HasMultipleSelection() const { return m_selStore != NULL; } @@ -85,13 +85,16 @@ public: int GetSelection() const { wxASSERT_MSG( !HasMultipleSelection(), - _T("GetSelection() can't be used with wxLB_MULTIPLE") ); + wxT("GetSelection() can't be used with wxLB_MULTIPLE") ); return m_current; } // is this item the current one? bool IsCurrent(size_t item) const { return item == (size_t)m_current; } + #ifdef __WXUNIVERSAL__ + bool IsCurrent() const { return wxVScrolledWindow::IsCurrent(); } + #endif // is this item selected? bool IsSelected(size_t item) const; @@ -120,26 +123,31 @@ public: // get the margins around each item wxPoint GetMargins() const { return m_ptMargins; } + // get the background colour of selected cells + const wxColour& GetSelectionBackground() const { return m_colBgSel; } + + // get the item rect, returns empty rect if the item is not visible + wxRect GetItemRect(size_t n) const; // operations // ---------- // set the number of items to be shown in the control // - // this is just a synonym for wxVScrolledWindow::SetLineCount() - void SetItemCount(size_t count); + // this is just a synonym for wxVScrolledWindow::SetRowCount() + virtual void SetItemCount(size_t count); // delete all items from the control void Clear() { SetItemCount(0); } - // set the selection to the specified item, if it is -1 the selection is - // unset + // set the selection to the specified item, if it is wxNOT_FOUND the + // selection is unset // // this function is only valid for the single selection listboxes void SetSelection(int selection); // selects or deselects the specified item which must be valid (i.e. not - // equal to -1) + // equal to wxNOT_FOUND) // // return true if the items selection status has changed or false // otherwise @@ -179,8 +187,24 @@ public: void SetMargins(const wxPoint& pt); void SetMargins(wxCoord x, wxCoord y) { SetMargins(wxPoint(x, y)); } + // change the background colour of the selected cells + void SetSelectionBackground(const wxColour& col); + + // refreshes only the selected items + void RefreshSelected(); + + + virtual wxVisualAttributes GetDefaultAttributes() const + { + return GetClassDefaultAttributes(GetWindowVariant()); + } + + static wxVisualAttributes + GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); protected: + virtual wxBorder GetDefaultBorder() const { return wxBORDER_THEME; } + // the derived class must implement this function to actually draw the item // with the given index on the provided DC virtual void OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const = 0; @@ -196,12 +220,20 @@ protected: // the base class version doesn't do anything virtual void OnDrawSeparator(wxDC& dc, wxRect& rect, size_t n) const; + // this method is used to draw the items background and, maybe, a border + // around it + // + // the base class version implements a reasonable default behaviour which + // consists in drawing the selected item with the standard background + // colour and drawing a border around the item if it is either selected or + // current + virtual void OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const; - // we implement OnGetLineHeight() in terms of OnMeasureItem() because this + // we implement OnGetRowHeight() in terms of OnMeasureItem() because this // allows us to add borders to the items easily // - // this function is not upposed to be overridden by the derived classes - virtual wxCoord OnGetLineHeight(size_t line) const; + // this function is not supposed to be overridden by the derived classes + virtual wxCoord OnGetRowHeight(size_t line) const; // event handlers @@ -209,41 +241,71 @@ protected: void OnKeyDown(wxKeyEvent& event); void OnLeftDown(wxMouseEvent& event); void OnLeftDClick(wxMouseEvent& event); - + void OnSetOrKillFocus(wxFocusEvent& event); + void OnSize(wxSizeEvent& event); // common part of all ctors void Init(); // send the wxEVT_COMMAND_LISTBOX_SELECTED event void SendSelectedEvent(); + virtual void InitEvent(wxCommandEvent& event, int n); // common implementation of SelectAll() and DeselectAll() bool DoSelectAll(bool select); // change the current item (in single selection listbox it also implicitly - // changes the selection); current may be -1 in which case there will be - // no current item any more + // changes the selection); current may be wxNOT_FOUND in which case there + // will be no current item any more // // return true if the current item changed, false otherwise bool DoSetCurrent(int current); + // flags for DoHandleItemClick + enum + { + ItemClick_Shift = 1, // item shift-clicked + ItemClick_Ctrl = 2, // ctrl + ItemClick_Kbd = 4 // item selected from keyboard + }; + // common part of keyboard and mouse handling processing code - void DoHandleItemClick(int item, bool shiftDown, bool ctrlDown); + void DoHandleItemClick(int item, int flags); + + // paint the background of the given item using the provided colour if it's + // valid, otherwise just return false and do nothing (this is used by + // OnDrawBackground()) + bool DoDrawSolidBackground(const wxColour& col, + wxDC& dc, + const wxRect& rect, + size_t n) const; private: - // the current item or -1 + // the current item or wxNOT_FOUND // // if m_selStore == NULL this is also the selected item, otherwise the // selections are managed by m_selStore int m_current; + // the anchor of the selection for the multiselection listboxes: + // shift-clicking an item extends the selection from m_anchor to the item + // clicked, for example + // + // always wxNOT_FOUND for single selection listboxes + int m_anchor; + // the object managing our selected items if not NULL wxSelectionStore *m_selStore; // margins wxPoint m_ptMargins; + // the selection bg colour + wxColour m_colBgSel; + DECLARE_EVENT_TABLE() + wxDECLARE_NO_COPY_CLASS(wxVListBox); + DECLARE_ABSTRACT_CLASS(wxVListBox) }; #endif // _WX_VLBOX_H_