]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/msw/treectrl.h
wxMenu::callback stuff taken inside WXWIN_COMPATIBILITY_2 (everybody should
[wxWidgets.git] / include / wx / msw / treectrl.h
index 213b4934ff2c9fc75df4132e40e38261addaaccc..48881c46f617e0eb63cc059aa087c5069335d22d 100644 (file)
@@ -21,6 +21,7 @@
 #endif
 
 #include "wx/textctrl.h"
 #endif
 
 #include "wx/textctrl.h"
+#include "wx/dynarray.h"
 
 #ifdef __GNUWIN32__
     // Cygwin windows.h defines these identifiers
 
 #ifdef __GNUWIN32__
     // Cygwin windows.h defines these identifiers
@@ -121,6 +122,8 @@ protected:
     long m_itemId;
 };
 
     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
 // ----------------------------------------------------------------------------
 // wxTreeItemData is some (arbitrary) user class associated with some item. The
 // main advantage of having this class (compared to old untyped interface) is
@@ -146,11 +149,7 @@ public:
 
     // accessors: set/get the item associated with this node
     void SetId(const wxTreeItemId& id) { m_itemId = id; }
 
     // 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; }
 };
 
 // ----------------------------------------------------------------------------
 };
 
 // ----------------------------------------------------------------------------
@@ -194,10 +193,10 @@ public:
     unsigned int GetIndent() const;
     void SetIndent(unsigned int indent);
 
     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
     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
 
         // image list: these functions allow to associate an image list with
         // the control and retrieve it. Note that the control does _not_ delete
@@ -225,10 +224,9 @@ public:
 
         // retrieve items label
     wxString GetItemText(const wxTreeItemId& item) const;
 
         // 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;
 
         // get the data associated with the item
     wxTreeItemData *GetItemData(const wxTreeItemId& item) const;
 
@@ -237,10 +235,9 @@ public:
 
         // set items label
     void SetItemText(const wxTreeItemId& item, const wxString& text);
 
         // 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);
 
         // associate some data with the item
     void SetItemData(const wxTreeItemId& item, wxTreeItemData *data);
 
@@ -275,7 +272,8 @@ public:
 
         // if 'recursively' is FALSE, only immediate children count, otherwise
         // the returned number is the number of all items in this branch
 
         // 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);
+    size_t GetChildrenCount(const wxTreeItemId& item,
+                            bool recursively = TRUE) const;
 
     // navigation
     // ----------
 
     // navigation
     // ----------
@@ -288,6 +286,12 @@ public:
         // get the item currently selected (may return NULL if no selection)
     wxTreeItemId GetSelection() const;
 
         // get the item currently selected (may return NULL if no selection)
     wxTreeItemId GetSelection() const;
 
+        // get the items currently selected, return the number of such item
+        //
+        // NB: this operation is expensive and can take a long time for a
+        //     control with a lot of items (~ O(number of items)).
+    size_t GetSelections(wxArrayTreeItemIds& selections) const;
+
         // get the parent of this item (may return NULL if root)
     wxTreeItemId GetParent(const wxTreeItemId& item) const;
 
         // get the parent of this item (may return NULL if root)
     wxTreeItemId GetParent(const wxTreeItemId& item) const;
 
@@ -365,6 +369,8 @@ public:
 
         // remove the selection from currently selected item (if any)
     void Unselect();
 
         // remove the selection from currently selected item (if any)
     void Unselect();
+        // unselect all items (only makes sense for multiple selection control)
+    void UnselectAll();
         // select this item
     void SelectItem(const wxTreeItemId& item);
         // make sure this item is visible (expanding the parent item and/or
         // select this item
     void SelectItem(const wxTreeItemId& item);
         // make sure this item is visible (expanding the parent item and/or
@@ -440,16 +446,28 @@ public:
     void SetImageList(wxImageList *imageList, int)
         { SetImageList(imageList); }
 
     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 bool MSWCommand(WXUINT param, WXWORD id);
     virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
 
     // implementation
     // --------------
     virtual bool MSWCommand(WXUINT param, WXWORD id);
     virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
 
+    // 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);
+
 protected:
     // SetImageList helper
     void SetAnyImageList(wxImageList *imageList, int which);
 
 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
 
     wxImageList *m_imageListNormal, // images for tree elements
                 *m_imageListState;  // special images for app defined states
 
@@ -469,8 +487,23 @@ private:
                               int image, int selectedImage,
                               wxTreeItemData *data);
 
                               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();
 
     void DeleteTextCtrl();
 
+    // support for additional item images
+    friend class wxTreeItemIndirectData;
+    void SetIndirectItemData(const wxTreeItemId& item,
+                             wxTreeItemIndirectData *data);
+    bool HasIndirectData(const wxTreeItemId& item) const;
+
+    wxArrayTreeItemIds m_itemsWithIndirectData;
+
     DECLARE_DYNAMIC_CLASS(wxTreeCtrl)
 };
 
     DECLARE_DYNAMIC_CLASS(wxTreeCtrl)
 };