X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/08b7c251c45573a76706a5bbd4e667e186e01f61..a43a4f9d4d4a7f107e81bc7de0c1eea729593ee2:/include/wx/msw/treectrl.h diff --git a/include/wx/msw/treectrl.h b/include/wx/msw/treectrl.h index f8b34757c2..a67bd48851 100644 --- a/include/wx/msw/treectrl.h +++ b/include/wx/msw/treectrl.h @@ -22,12 +22,22 @@ #include "wx/control.h" #include "wx/event.h" +#ifdef __GNUWIN32__ +# ifdef GetFirstChild +# undef GetFirstChild +# endif + +# ifdef GetNextSibling +# undef GetNextSibling +# endif +#endif + // the type for "untyped" data typedef long wxDataType; // fwd decl -class wxImageList; -struct wxTreeViewItem; +class WXDLLEXPORT wxImageList; +struct WXDLLEXPORT wxTreeViewItem; // a callback function used for sorting tree items, it should return -1 if the // first item precedes the second, +1 if the second precedes the first or 0 if @@ -106,15 +116,11 @@ public: // to "long" which used to be the type for tree item ids in previous // versions of wxWindows -#ifdef wxHTREEITEM_DEFINED // for wxTreeCtrl usage only - wxTreeItemId(HTREEITEM itemId) { m_itemId = (long)itemId; } - operator HTREEITEM() const { return (HTREEITEM)m_itemId; } -#else // !wxHTREEITEM_DEFINED - // deprecated: only for compatibility - wxTreeItemId(long itemId) { m_itemId = itemId; } - operator long() const { return m_itemId; } -#endif // wxHTREEITEM_DEFINED + wxTreeItemId(WXHTREEITEM itemId) { m_itemId = (long)itemId; } + operator WXHTREEITEM() const { return (WXHTREEITEM)m_itemId; } + + void operator=(WXHTREEITEM item) { m_itemId = (long) item; } protected: long m_itemId; @@ -133,27 +139,19 @@ protected: // Because the objects of this class are deleted by the tree, they should // always be allocated on the heap! // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxTreeItemData +class WXDLLEXPORT wxTreeItemData : private wxTreeItemId { -friend class wxTreeCtrl; public: - // creation/destruction - // -------------------- - // default ctor - wxTreeItemData() { } + // default ctor/copy ctor/assignment operator are ok - // default copy ctor/assignment operator are ok - - // dtor is virtual and all the items are deleted by the tree control - // when it's deleted, so you normally don't have to care about freeing - // memory allocated in your wxTreeItemData-derived class + // dtor is virtual and all the items are deleted by the tree control when + // it's deleted, so you normally don't have to care about freeing memory + // allocated in your wxTreeItemData-derived class virtual ~wxTreeItemData() { } - // accessor: get the item associated with us - const wxTreeItemId& GetItemId() const { return m_itemId; } - -protected: - wxTreeItemId m_itemId; + // accessors: set/get the item associated with this node + void SetId(const wxTreeItemId& id) { m_itemId = id; } + const wxTreeItemId& GetId() const { return (wxTreeItemId&) m_itemId; } }; // ---------------------------------------------------------------------------- @@ -242,6 +240,15 @@ public: // associate some data with the item void SetItemData(const wxTreeItemId& item, wxTreeItemData *data); + // force appearance of [+] button near the item. This is useful to + // allow the user to expand the items which don't have any children now + // - but instead add them only when needed, thus minimizing memory + // usage and loading time. + void SetItemHasChildren(const wxTreeItemId& item, bool has = TRUE); + + // the item will be shown in bold + void SetItemBold(const wxTreeItemId& item, bool bold = TRUE); + // item status inquiries // --------------------- @@ -253,6 +260,15 @@ public: bool IsExpanded(const wxTreeItemId& item) const; // is this item currently selected (the same as has focus)? bool IsSelected(const wxTreeItemId& item) const; + // is item text in bold font? + bool IsBold(const wxTreeItemId& item) const; + + // number of children + // ------------------ + + // if 'recursively' is FALSE, only immediate children count, otherwise + // the returned number is the number of all items in this branch + size_t GetChildrenCount(const wxTreeItemId& item, bool recursively = TRUE); // navigation // ---------- @@ -276,9 +292,9 @@ public: // the same! // get the first child of this item - wxTreeItemId GetFirstChild(const wxTreeItemId& item, long& cookie) const; + wxTreeItemId GetFirstChild(const wxTreeItemId& item, long& _cookie) const; // get the next child - wxTreeItemId GetNextChild(const wxTreeItemId& item, long& cookie) const; + wxTreeItemId GetNextChild(const wxTreeItemId& item, long& _cookie) const; // get the next sibling of this item wxTreeItemId GetNextSibling(const wxTreeItemId& item) const; @@ -322,7 +338,11 @@ public: // delete this item and associated data if any void Delete(const wxTreeItemId& item); + // delete all children (but don't delete the item itself) + // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events + void DeleteChildren(const wxTreeItemId& item); // delete all items from the tree + // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events void DeleteAllItems(); // expand this item @@ -368,19 +388,23 @@ public: // helpers // ------- - // @@@ do we really need to expose these functions to the application? - - // get the bounding rectangle of the item (or of its label only) - void GetBoundingRect(const wxTreeItemId& item, - wxRectangle& rect, - bool textOnly = FALSE) const; - // determine to which item (if any) belongs the given point (the // coordinates specified are relative to the client area of tree ctrl) // and fill the flags parameter with a bitmask of wxTREE_HITTEST_xxx - // constants + // constants. + // + // The first function is more portable (because easier to implement + // on other platforms), but the second one returns some extra info. + wxTreeItemId HitTest(const wxPoint& point) + { int dummy; return HitTest(point, dummy); } wxTreeItemId HitTest(const wxPoint& point, int& flags); + // get the bounding rectangle of the item (or of its label only) + // @@@ do we really need to expose this functions to the application? + void GetBoundingRect(const wxTreeItemId& item, + wxRect& rect, + bool textOnly = FALSE) const; + // deprecated // ---------- @@ -407,8 +431,8 @@ public: // implementation // -------------- void Command(wxCommandEvent& event) { ProcessCommand(event); }; - bool MSWCommand(WXUINT param, WXWORD id); - bool MSWNotify(WXWPARAM wParam, WXLPARAM lParam); + virtual bool MSWCommand(WXUINT param, WXWORD id); + virtual bool MSWNotify(WXWPARAM wParam, WXLPARAM lParam, WXLPARAM *result); protected: // SetImageList helper @@ -445,7 +469,7 @@ private: // NB: note that not all accessors make sense for all events, see the event // descriptions below // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxTreeEvent : public wxCommandEvent +class WXDLLEXPORT wxTreeEvent : public wxNotifyEvent { friend wxTreeCtrl; public: @@ -467,10 +491,6 @@ public: // keyboard code (for wxEVT_COMMAND_TREE_KEY_DOWN only) int GetCode() const { return m_code; } - // set return code for wxEVT_COMMAND_TREE_ITEM_{EXPAND|COLLAPS}ING events - // call this to forbid the change in item status - void Veto() { m_code = TRUE; } - private: // @@ we could save some space by using union here int m_code; @@ -519,5 +539,8 @@ typedef void (wxEvtHandler::*wxTreeEventFunction)(wxTreeEvent&); // be deleted just after the return of this event handler (if any) #define EVT_TREE_DELETE_ITEM(id, fn) { wxEVT_COMMAND_TREE_DELETE_ITEM, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, +// GetItem() returns the item that was activated (double click, enter, space) +#define EVT_TREE_ITEM_ACTIVATED(id, fn) { wxEVT_COMMAND_TREE_ITEM_ACTIVATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL }, + #endif // _WX_TREECTRL_H_