X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ac57418f39e9671c18b99942180563146625d3ae..5ea4780630b335a1b8b2d3a94c0b82e46f4c56f6:/include/wx/generic/treectrl.h diff --git a/include/wx/generic/treectrl.h b/include/wx/generic/treectrl.h index 29acb18cea..ba5bb3ef6d 100644 --- a/include/wx/generic/treectrl.h +++ b/include/wx/generic/treectrl.h @@ -29,6 +29,17 @@ WXDLLEXPORT_DATA(extern const char*) wxTreeCtrlNameStr; #include "wx/scrolwin.h" #include "wx/textctrl.h" #include "wx/pen.h" +#include "wx/dynarray.h" + +//those defines should only be done in generic/treectrl.h, +//because wxMSW doesn't allow mutiple selection + +#ifndef wxTR_SINGLE +#define wxTR_SINGLE 0x0000 +#define wxTR_MULTIPLE 0x0020 +#define wxTR_EXTENDED 0x0040 +#define wxTR_HAS_VARIABLE_ROW_HIGHT 0x0080 +#endif // ----------------------------------------------------------------------------- // constants @@ -36,11 +47,31 @@ WXDLLEXPORT_DATA(extern const char*) wxTreeCtrlNameStr; // values for the `flags' parameter of wxTreeCtrl::HitTest() which determine // where exactly the specified point is situated: + +static const int wxTREE_HITTEST_ABOVE = 0x0001; +static const int wxTREE_HITTEST_BELOW = 0x0002; static const int wxTREE_HITTEST_NOWHERE = 0x0004; + // on the button associated with an item. +static const int wxTREE_HITTEST_ONITEMBUTTON = 0x0008; // on the bitmap associated with an item. -static const int wxTREE_HITTEST_ONITEMICON = 0x0020; +static const int wxTREE_HITTEST_ONITEMICON = 0x0010; + // on the ident associated with an item. +static const int wxTREE_HITTEST_ONITEMIDENT = 0x0020; // on the label (string) associated with an item. -static const int wxTREE_HITTEST_ONITEMLABEL = 0x0080; +static const int wxTREE_HITTEST_ONITEMLABEL = 0x0040; + // on the right of the label associated with an item. +static const int wxTREE_HITTEST_ONITEMRIGHT = 0x0080; + // on the label (string) associated with an item. +//static const int wxTREE_HITTEST_ONITEMSTATEICON = 0x0100; + // on the left of the wxTreeCtrl. +static const int wxTREE_HITTEST_TOLEFT = 0x0200; + // on the right of the wxTreeCtrl. +static const int wxTREE_HITTEST_TORIGHT = 0x0400; + // on the upper part (first half) of the item. +static const int wxTREE_HITTEST_ONITEMUPPERPART = 0x0800; + // on the lower part (second half) of the item. +static const int wxTREE_HITTEST_ONITEMLOWERPART = 0x1000; + // anywhere on the item static const int wxTREE_HITTEST_ONITEM = wxTREE_HITTEST_ONITEMICON | wxTREE_HITTEST_ONITEMLABEL; @@ -84,6 +115,8 @@ public: wxGenericTreeItem *m_pItem; }; +WX_DECLARE_OBJARRAY(wxTreeItemId, wxArrayTreeItemIds); + // ---------------------------------------------------------------------------- // wxTreeItemData is some (arbitrary) user class associated with some item. // @@ -207,7 +240,7 @@ public: const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT, - const wxValidator &validator = wxDefaultValidator, + const wxValidator &validator = wxDefaultValidator, const wxString& name = wxTreeCtrlNameStr) { Create(parent, id, pos, size, style, validator, name); @@ -219,7 +252,7 @@ public: const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT, - const wxValidator &validator = wxDefaultValidator, + const wxValidator &validator = wxDefaultValidator, const wxString& name = wxTreeCtrlNameStr); // accessors @@ -234,6 +267,10 @@ public: unsigned int GetIndent() const { return m_indent; } void SetIndent(unsigned int indent); + // spacing is the number of pixels between the start and the Text + unsigned int GetSpacing() const { return m_spacing; } + void SetSpacing(unsigned int spacing); + // image list: these functions allow to associate an image list with // the control and retrieve it. Note that the control does _not_ delete // the associated image list when it's deleted in order to allow image @@ -319,6 +356,9 @@ public: // get the item currently selected (may return NULL if no selection) wxTreeItemId GetSelection() const { return m_current; } + // get the items currently selected, return the number of such item + size_t GetSelections(wxArrayTreeItemIds&) const; + // get the parent of this item (may return NULL if root) wxTreeItemId GetParent(const wxTreeItemId& item) const; @@ -333,6 +373,8 @@ public: wxTreeItemId GetFirstChild(const wxTreeItemId& item, long& cookie) const; // get the next child wxTreeItemId GetNextChild(const wxTreeItemId& item, long& cookie) const; + // get the last child of this item - this method doesn't use cookies + wxTreeItemId GetLastChild(const wxTreeItemId& item) const; // get the next sibling of this item wxTreeItemId GetNextSibling(const wxTreeItemId& item) const; @@ -394,8 +436,9 @@ public: // remove the selection from currently selected item (if any) void Unselect(); + void UnselectAll(); // select this item - void SelectItem(const wxTreeItemId& item); + void SelectItem(const wxTreeItemId& item, bool unselect_others=TRUE, bool extended_select=FALSE); // make sure this item is visible (expanding the parent item and/or // scrolling to this item if necessary) void EnsureVisible(const wxTreeItemId& item); @@ -407,7 +450,7 @@ public: wxTreeItemId HitTest(const wxPoint& point) { int dummy; return HitTest(point, dummy); } wxTreeItemId HitTest(const wxPoint& point, int& flags); - + // start editing the item label: this (temporarily) replaces the item // with a one line edit control. The item will be selected if it hadn't // been before. textCtrlClass parameter allows you to create an edit @@ -444,18 +487,26 @@ public: // implementation void SendDeleteEvent(wxGenericTreeItem *itemBeingDeleted); + // Draw Special Information + void DrawBorder(wxTreeItemId& item); + void DrawLine(wxTreeItemId& item, bool below); + protected: + friend class wxGenericTreeItem; + wxGenericTreeItem *m_anchor; - wxGenericTreeItem *m_current; + wxGenericTreeItem *m_current, *m_key_current; bool m_hasFocus; bool m_dirty; int m_xScroll,m_yScroll; unsigned int m_indent; + unsigned int m_spacing; int m_lineHeight; wxPen m_dottedPen; wxBrush *m_hilightBrush; wxImageList *m_imageListNormal, *m_imageListState; + int m_dragCount; // the common part of all ctors void Init(); @@ -468,15 +519,23 @@ protected: wxTreeItemData *data); void AdjustMyScrollbars(); + int GetLineHeight(wxGenericTreeItem *item) const; void PaintLevel( wxGenericTreeItem *item, wxDC& dc, int level, int &y ); void PaintItem( wxGenericTreeItem *item, wxDC& dc); void CalculateLevel( wxGenericTreeItem *item, wxDC &dc, int level, int &y ); void CalculatePositions(); + void CalculateSize( wxGenericTreeItem *item, wxDC &dc ); void RefreshSubtree( wxGenericTreeItem *item ); void RefreshLine( wxGenericTreeItem *item ); + void FillArray(wxGenericTreeItem*, wxArrayTreeItemIds&) const; + void SelectItemRange( wxGenericTreeItem *item1, wxGenericTreeItem *item2 ); + bool TagAllChildrenUntilLast(wxGenericTreeItem *crt_item, wxGenericTreeItem *last_item, bool select); + bool TagNextChildren(wxGenericTreeItem *crt_item, wxGenericTreeItem *last_item, bool select); + void UnselectAllChildren( wxGenericTreeItem *item ); + private: DECLARE_EVENT_TABLE() DECLARE_DYNAMIC_CLASS(wxTreeCtrl)