]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/msw/treectrl.h
Fixed missing paint events when overriding DoMoveWindow()
[wxWidgets.git] / include / wx / msw / treectrl.h
index 66871a4891112ede0857539ca40d7428dcaef8e2..91d4eea2ab0f75afe7c8f6b87d45a358f3b5be47 100644 (file)
@@ -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
@@ -21,6 +21,7 @@
 #endif
 
 #include "wx/textctrl.h"
+#include "wx/dynarray.h"
 
 #ifdef __GNUWIN32__
     // Cygwin windows.h defines these identifiers
@@ -33,6 +34,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
@@ -40,39 +42,6 @@ struct WXDLLEXPORT wxTreeViewItem;
 // they're equivalent
 class wxTreeItemData;
 
-// ----------------------------------------------------------------------------
-// constants
-// ----------------------------------------------------------------------------
-
-// values for the `flags' parameter of wxTreeCtrl::HitTest() which determine
-// where exactly the specified point is situated:
-    // above the client area.
-static const int wxTREE_HITTEST_ABOVE            = 0x0001;
-    // below the client area.
-static const int wxTREE_HITTEST_BELOW            = 0x0002;
-    // in the client area but below the last item.
-static const int wxTREE_HITTEST_NOWHERE          = 0x0004;
-    // on the button associated with an item.
-static const int wxTREE_HITTEST_ONITEMBUTTON     = 0x0010;
-    // on the bitmap associated with an item.
-static const int wxTREE_HITTEST_ONITEMICON       = 0x0020;
-    // in the indentation associated with an item.
-static const int wxTREE_HITTEST_ONITEMINDENT     = 0x0040;
-    // on the label (string) associated with an item.
-static const int wxTREE_HITTEST_ONITEMLABEL      = 0x0080;
-    // in the area to the right of an item.
-static const int wxTREE_HITTEST_ONITEMRIGHT      = 0x0100;
-    // on the state icon for a tree view item that is in a user-defined state.
-static const int wxTREE_HITTEST_ONITEMSTATEICON  = 0x0200;
-    // to the right of the client area.
-static const int wxTREE_HITTEST_TOLEFT           = 0x0400;
-    // to the left of the client area.
-static const int wxTREE_HITTEST_TORIGHT          = 0x0800;
-    // anywhere on the item
-static const int wxTREE_HITTEST_ONITEM  = wxTREE_HITTEST_ONITEMICON |
-                                          wxTREE_HITTEST_ONITEMLABEL |
-                                          wxTREE_HITTEST_ONITEMSTATEICON;
-
 // NB: all the following flags are for compatbility only and will be removed in the
 //     next versions
 
@@ -121,7 +90,7 @@ protected:
     long m_itemId;
 };
 
-WX_DEFINE_ARRAY(wxTreeItemId, wxArrayTreeItemIds);
+WX_DEFINE_EXPORTED_ARRAY(WXHTREEITEM, wxArrayTreeItemIds);
 
 // ----------------------------------------------------------------------------
 // wxTreeItemData is some (arbitrary) user class associated with some item. The
@@ -148,11 +117,7 @@ public:
 
     // accessors: set/get the item associated with this node
     void SetId(const wxTreeItemId& id) { m_itemId = id; }
-#ifdef __WATCOMC__
-    const wxTreeItemId GetId() const { return m_itemId; }
-#else
-    const wxTreeItemId& GetId() const { return (wxTreeItemId&) m_itemId; }
-#endif
+    const wxTreeItemId GetId() const { return *this; }
 };
 
 // ----------------------------------------------------------------------------
@@ -196,10 +161,10 @@ public:
     unsigned int GetIndent() const;
     void SetIndent(unsigned int indent);
 
-       // spacing is the number of pixels between the start and the Text
-       // not implemented under wxMSW
+    // spacing is the number of pixels between the start and the Text
+        // not implemented under wxMSW
     unsigned int GetSpacing() const { return 18; } // return wxGTK default
-    void SetSpacing(unsigned int ) {}
+    void SetSpacing(unsigned int WXUNUSED(spacing)) { }
 
         // image list: these functions allow to associate an image list with
         // the control and retrieve it. Note that the control does _not_ delete
@@ -227,10 +192,9 @@ public:
 
         // retrieve items label
     wxString GetItemText(const wxTreeItemId& item) const;
-        // get the normal item image
-    int GetItemImage(const wxTreeItemId& item) const;
-        // get the selected item image
-    int GetItemSelectedImage(const wxTreeItemId& item) const;
+        // get one of the images associated with the item (normal by default)
+    int GetItemImage(const wxTreeItemId& item,
+                     wxTreeItemIcon which = wxTreeItemIcon_Normal) const;
         // get the data associated with the item
     wxTreeItemData *GetItemData(const wxTreeItemId& item) const;
 
@@ -239,10 +203,9 @@ public:
 
         // set items label
     void SetItemText(const wxTreeItemId& item, const wxString& text);
-        // set the normal item image
-    void SetItemImage(const wxTreeItemId& item, int image);
-        // set the selected item image
-    void SetItemSelectedImage(const wxTreeItemId& item, int image);
+        // get one of the images associated with the item (normal by default)
+    void SetItemImage(const wxTreeItemId& item, int image,
+                      wxTreeItemIcon which = wxTreeItemIcon_Normal);
         // associate some data with the item
     void SetItemData(const wxTreeItemId& item, wxTreeItemData *data);
 
@@ -258,6 +221,15 @@ public:
         // the item will be shown with a drop highlight
     void SetItemDropHighlight(const wxTreeItemId& item, bool highlight = TRUE);
 
+        // set the items text colour
+    void SetItemTextColour(const wxTreeItemId& item, const wxColour& col);
+
+        // set the items background colour
+    void SetItemBackgroundColour(const wxTreeItemId& item, const wxColour& col);
+
+        // set the items font (should be of the same height for all items)
+    void SetItemFont(const wxTreeItemId& item, const wxFont& font);
+
     // item status inquiries
     // ---------------------
 
@@ -348,6 +320,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,
@@ -451,11 +430,25 @@ public:
     void SetImageList(wxImageList *imageList, int)
         { SetImageList(imageList); }
 
+    // use Set/GetItemImage directly
+        // get the selected item image
+    int GetItemSelectedImage(const wxTreeItemId& item) const
+        { return GetItemImage(item, wxTreeItemIcon_Selected); }
+        // set the selected item image
+    void SetItemSelectedImage(const wxTreeItemId& item, int image)
+        { SetItemImage(item, image, wxTreeItemIcon_Selected); }
+
     // 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);
@@ -464,7 +457,7 @@ protected:
     // SetImageList helper
     void SetAnyImageList(wxImageList *imageList, int which);
 
-    wxTextCtrl*  m_textCtrl;        // used while editing the item label
+    wxTextCtrl  *m_textCtrl;        // used while editing the item label
     wxImageList *m_imageListNormal, // images for tree elements
                 *m_imageListState;  // special images for app defined states
 
@@ -484,10 +477,36 @@ private:
                               int image, int selectedImage,
                               wxTreeItemData *data);
 
+    int DoGetItemImageFromData(const wxTreeItemId& item,
+                               wxTreeItemIcon which) const;
+    void DoSetItemImageFromData(const wxTreeItemId& item,
+                                int image,
+                                wxTreeItemIcon which) const;
     void DoSetItemImages(const wxTreeItemId& item, int image, int imageSel);
 
     void DeleteTextCtrl();
 
+    // support for additional item images
+    friend class wxTreeItemIndirectData;
+    void SetIndirectItemData(const wxTreeItemId& item,
+                             wxTreeItemIndirectData *data);
+    bool HasIndirectData(const wxTreeItemId& item) const;
+
+    // the array storing all item ids which have indirect data
+    wxArrayTreeItemIds m_itemsWithIndirectData;
+
+    // the hash storing the items attributes (indexed by items ids)
+    wxHashTable m_attrs;
+
+    // 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;
+
     DECLARE_DYNAMIC_CLASS(wxTreeCtrl)
 };