| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 | 
							- ///////////////////////////////////////////////////////////////////////////////
 
- // Name:        wx/vlbox.h
 
- // Purpose:     wxVListBox is a virtual listbox with lines of variable height
 
- // Author:      Vadim Zeitlin
 
- // Modified by:
 
- // Created:     31.05.03
 
- // Copyright:   (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org>
 
- // Licence:     wxWindows licence
 
- ///////////////////////////////////////////////////////////////////////////////
 
- #ifndef _WX_VLBOX_H_
 
- #define _WX_VLBOX_H_
 
- #include "wx/vscroll.h"         // base class
 
- #include "wx/bitmap.h"
 
- class WXDLLIMPEXP_FWD_CORE wxSelectionStore;
 
- extern WXDLLIMPEXP_DATA_CORE(const char) wxVListBoxNameStr[];
 
- // ----------------------------------------------------------------------------
 
- // wxVListBox
 
- // ----------------------------------------------------------------------------
 
- /*
 
-     This class has two main differences from a regular listbox: it can have an
 
-     arbitrarily huge number of items because it doesn't store them itself but
 
-     uses OnDrawItem() callback to draw them and its items can have variable
 
-     height as determined by OnMeasureItem().
 
-     It emits the same events as wxListBox and the same event macros may be used
 
-     with it.
 
-  */
 
- class WXDLLIMPEXP_CORE wxVListBox : public wxVScrolledWindow
 
- {
 
- public:
 
-     // constructors and such
 
-     // ---------------------
 
-     // default constructor, you must call Create() later
 
-     wxVListBox() { Init(); }
 
-     // normal constructor which calls Create() internally
 
-     wxVListBox(wxWindow *parent,
 
-                wxWindowID id = wxID_ANY,
 
-                const wxPoint& pos = wxDefaultPosition,
 
-                const wxSize& size = wxDefaultSize,
 
-                long style = 0,
 
-                const wxString& name = wxVListBoxNameStr)
 
-     {
 
-         Init();
 
-         (void)Create(parent, id, pos, size, style, name);
 
-     }
 
-     // really creates the control and sets the initial number of items in it
 
-     // (which may be changed later with SetItemCount())
 
-     //
 
-     // the only special style which may be specified here is wxLB_MULTIPLE
 
-     //
 
-     // returns true on success or false if the control couldn't be created
 
-     bool Create(wxWindow *parent,
 
-                 wxWindowID id = wxID_ANY,
 
-                 const wxPoint& pos = wxDefaultPosition,
 
-                 const wxSize& size = wxDefaultSize,
 
-                 long style = 0,
 
-                 const wxString& name = wxVListBoxNameStr);
 
-     // dtor does some internal cleanup (deletes m_selStore if any)
 
-     virtual ~wxVListBox();
 
-     // accessors
 
-     // ---------
 
-     // get the number of items in the control
 
-     size_t GetItemCount() const { return GetRowCount(); }
 
-     // does this control use multiple selection?
 
-     bool HasMultipleSelection() const { return m_selStore != NULL; }
 
-     // get the currently selected item or wxNOT_FOUND if there is no selection
 
-     //
 
-     // this method is only valid for the single selection listboxes
 
-     int GetSelection() const
 
-     {
 
-         wxASSERT_MSG( !HasMultipleSelection(),
 
-                         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;
 
-     // get the number of the selected items (maybe 0)
 
-     //
 
-     // this method is valid for both single and multi selection listboxes
 
-     size_t GetSelectedCount() const;
 
-     // get the first selected item, returns wxNOT_FOUND if none
 
-     //
 
-     // cookie is an opaque parameter which should be passed to
 
-     // GetNextSelected() later
 
-     //
 
-     // this method is only valid for the multi selection listboxes
 
-     int GetFirstSelected(unsigned long& cookie) const;
 
-     // get next selection item, return wxNOT_FOUND if no more
 
-     //
 
-     // cookie must be the same parameter that was passed to GetFirstSelected()
 
-     // before
 
-     //
 
-     // this method is only valid for the multi selection listboxes
 
-     int GetNextSelected(unsigned long& cookie) const;
 
-     // 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::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 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 wxNOT_FOUND)
 
-     //
 
-     // return true if the items selection status has changed or false
 
-     // otherwise
 
-     //
 
-     // this function is only valid for the multiple selection listboxes
 
-     bool Select(size_t item, bool select = true);
 
-     // selects the items in the specified range whose end points may be given
 
-     // in any order
 
-     //
 
-     // return true if any items selection status has changed, false otherwise
 
-     //
 
-     // this function is only valid for the single selection listboxes
 
-     bool SelectRange(size_t from, size_t to);
 
-     // toggle the selection of the specified item (must be valid)
 
-     //
 
-     // this function is only valid for the multiple selection listboxes
 
-     void Toggle(size_t item) { Select(item, !IsSelected(item)); }
 
-     // select all items in the listbox
 
-     //
 
-     // the return code indicates if any items were affected by this operation
 
-     // (true) or if nothing has changed (false)
 
-     bool SelectAll() { return DoSelectAll(true); }
 
-     // unselect all items in the listbox
 
-     //
 
-     // the return code has the same meaning as for SelectAll()
 
-     bool DeselectAll() { return DoSelectAll(false); }
 
-     // set the margins: horizontal margin is the distance between the window
 
-     // border and the item contents while vertical margin is half of the
 
-     // distance between items
 
-     //
 
-     // by default both margins are 0
 
-     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;
 
-     // the derived class must implement this method to return the height of the
 
-     // specified item
 
-     virtual wxCoord OnMeasureItem(size_t n) const = 0;
 
-     // this method may be used to draw separators between the lines; note that
 
-     // the rectangle may be modified, typically to deflate it a bit before
 
-     // passing to OnDrawItem()
 
-     //
 
-     // 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 OnGetRowHeight() in terms of OnMeasureItem() because this
 
-     // allows us to add borders to the items easily
 
-     //
 
-     // this function is not supposed to be overridden by the derived classes
 
-     virtual wxCoord OnGetRowHeight(size_t line) const;
 
-     // event handlers
 
-     void OnPaint(wxPaintEvent& event);
 
-     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_LISTBOX 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 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, 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 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_
 
 
  |