X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/696e1ea0b7cee1394693a0e507bbf49c9863952b..a407ff6ae8668b8f37b139a9420bcc041fa8adc1:/include/wx/msw/treectrl.h diff --git a/include/wx/msw/treectrl.h b/include/wx/msw/treectrl.h index 32c41d8554..a923425377 100644 --- a/include/wx/msw/treectrl.h +++ b/include/wx/msw/treectrl.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: treectrl.h +// Name: wx/msw/treectrl.h // Purpose: wxTreeCtrl class // Author: Julian Smart // Modified by: Vadim Zeitlin to be less MSW-specific on 10/10/98 @@ -20,8 +20,11 @@ #pragma interface "treectrl.h" #endif +#if wxUSE_TREECTRL + #include "wx/textctrl.h" #include "wx/dynarray.h" +#include "wx/treebase.h" #ifdef __GNUWIN32__ // Cygwin windows.h defines these identifiers @@ -34,6 +37,7 @@ typedef long wxDataType; // fwd decl class WXDLLEXPORT wxImageList; +class WXDLLEXPORT wxDragImage; struct WXDLLEXPORT wxTreeViewItem; // a callback function used for sorting tree items, it should return -1 if the @@ -57,68 +61,6 @@ enum #define wxTREE_INSERT_FIRST 0xFFFF0001 #define wxTREE_INSERT_LAST 0xFFFF0002 -// ---------------------------------------------------------------------------- -// wxTreeItemId identifies an element of the tree. In this implementation, it's -// just a trivial wrapper around Win32 HTREEITEM. It's opaque for the -// application. -// ---------------------------------------------------------------------------- -class WXDLLEXPORT wxTreeItemId -{ -public: - // ctors - // 0 is invalid value for HTREEITEM - wxTreeItemId() { m_itemId = 0; } - - // default copy ctor/assignment operator are ok for us - - // accessors - // is this a valid tree item? - bool IsOk() const { return m_itemId != 0; } - - // conversion to/from either real (system-dependent) tree item id or - // to "long" which used to be the type for tree item ids in previous - // versions of wxWindows - - // for wxTreeCtrl usage only - 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; -}; - -WX_DEFINE_EXPORTED_ARRAY(WXHTREEITEM, wxArrayTreeItemIds); - -// ---------------------------------------------------------------------------- -// wxTreeItemData is some (arbitrary) user class associated with some item. The -// main advantage of having this class (compared to old untyped interface) is -// that wxTreeItemData's are destroyed automatically by the tree and, as this -// class has virtual dtor, it means that the memory will be automatically -// freed. OTOH, we don't just use wxObject instead of wxTreeItemData because -// the size of this class is critical: in any real application, each tree leaf -// will have wxTreeItemData associated with it and number of leaves may be -// quite big. -// -// Because the objects of this class are deleted by the tree, they should -// always be allocated on the heap! -// ---------------------------------------------------------------------------- -class WXDLLEXPORT wxTreeItemData : private wxTreeItemId -{ -public: - // default ctor/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 - virtual ~wxTreeItemData() { } - - // accessors: set/get the item associated with this node - void SetId(const wxTreeItemId& id) { m_itemId = id; } - const wxTreeItemId GetId() const { return *this; } -}; - // ---------------------------------------------------------------------------- // wxTreeCtrl // ---------------------------------------------------------------------------- @@ -180,6 +122,8 @@ public: void SetImageList(wxImageList *imageList); void SetStateImageList(wxImageList *imageList); + void AssignImageList(wxImageList *imageList); + void AssignStateImageList(wxImageList *imageList); // Functions to work with tree ctrl items. Unfortunately, they can _not_ be // member functions of wxTreeItem because they must know the tree the item @@ -319,6 +263,13 @@ public: int image = -1, int selectedImage = -1, wxTreeItemData *data = NULL); + // insert a new item before the one with the given index + wxTreeItemId InsertItem(const wxTreeItemId& parent, + size_t index, + const wxString& text, + int image = -1, int selectedImage = -1, + wxTreeItemData *data = NULL); + // insert a new item in as the last child of the parent wxTreeItemId AppendItem(const wxTreeItemId& parent, const wxString& text, @@ -432,9 +383,15 @@ public: // implementation // -------------- + + virtual long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); virtual bool MSWCommand(WXUINT param, WXWORD id); virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); + // override some base class virtuals + virtual bool SetBackgroundColour(const wxColour &colour); + virtual bool SetForegroundColour(const wxColour &colour); + // get/set the check state for the item (only for wxTR_MULTIPLE) bool IsItemChecked(const wxTreeItemId& item) const; void SetItemCheck(const wxTreeItemId& item, bool check = TRUE); @@ -443,9 +400,13 @@ protected: // SetImageList helper void SetAnyImageList(wxImageList *imageList, int which); + // refresh a single item + void RefreshItem(const wxTreeItemId& item); + wxTextCtrl *m_textCtrl; // used while editing the item label wxImageList *m_imageListNormal, // images for tree elements *m_imageListState; // special images for app defined states + bool m_ownsImageListNormal, m_ownsImageListState; private: // the common part of all ctors @@ -472,14 +433,13 @@ private: void DeleteTextCtrl(); - // support for additional item images - friend class wxTreeItemIndirectData; + // support for additional item images which we implement using + // wxTreeItemIndirectData technique - see the comments in msw/treectrl.cpp void SetIndirectItemData(const wxTreeItemId& item, - wxTreeItemIndirectData *data); + class wxTreeItemIndirectData *data); bool HasIndirectData(const wxTreeItemId& item) const; - - // the array storing all item ids which have indirect data - wxArrayTreeItemIds m_itemsWithIndirectData; + bool IsDataIndirect(wxTreeItemData *data) const + { return data && data->GetId().m_pItem == 0; } // the hash storing the items attributes (indexed by items ids) wxHashTable m_attrs; @@ -487,8 +447,19 @@ private: // TRUE if the hash above is not empty bool m_hasAnyAttr; + // used for dragging + wxDragImage *m_dragImage; + + // the starting item for selection with Shift + WXHTREEITEM m_htSelStart; + + friend class wxTreeItemIndirectData; + friend class wxTreeSortHelper; + DECLARE_DYNAMIC_CLASS(wxTreeCtrl) }; +#endif // wxUSE_TREECTRL + #endif // _WX_TREECTRL_H_