]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/treectrl.h
support SDK < 10.6, fixes #14902
[wxWidgets.git] / include / wx / treectrl.h
index dd2782f4cad9ac6b08285f6527e2f5e3c8896fbb..c23920964e063795d1e2b2cf3a698fad1ee9a868 100644 (file)
 #ifndef _WX_TREECTRL_H_BASE_
 #define _WX_TREECTRL_H_BASE_
 
 #ifndef _WX_TREECTRL_H_BASE_
 #define _WX_TREECTRL_H_BASE_
 
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+#include "wx/defs.h"
+
+#if wxUSE_TREECTRL
+
 #include "wx/control.h"
 #include "wx/treebase.h"
 #include "wx/control.h"
 #include "wx/treebase.h"
-#include "wx/textctrl.h" // wxTextCtrl::ms_classinfo used through CLASSINFO macro
+#include "wx/textctrl.h" // wxTextCtrl::ms_classinfo used through wxCLASSINFO macro
 
 
-class WXDLLEXPORT wxImageList;
+class WXDLLIMPEXP_FWD_CORE wxImageList;
 
 // ----------------------------------------------------------------------------
 // wxTreeCtrlBase
 // ----------------------------------------------------------------------------
 
 
 // ----------------------------------------------------------------------------
 // wxTreeCtrlBase
 // ----------------------------------------------------------------------------
 
-class WXDLLEXPORT wxTreeCtrlBase : public wxControl
+class WXDLLIMPEXP_CORE wxTreeCtrlBase : public wxControl
 {
 public:
 {
 public:
-    wxTreeCtrlBase()
-    {
-        m_imageListNormal =
-        m_imageListState = NULL;
-        m_ownsImageListNormal =
-        m_ownsImageListState = false;
-
-        // arbitrary default
-        m_spacing = 18;
-    }
-
+    wxTreeCtrlBase();
     virtual ~wxTreeCtrlBase();
 
     // accessors
     // ---------
 
         // get the total number of items in the control
     virtual ~wxTreeCtrlBase();
 
     // accessors
     // ---------
 
         // get the total number of items in the control
-    virtual size_t GetCount() const = 0;
+    virtual unsigned int GetCount() const = 0;
 
         // indent is the number of pixels the children are indented relative to
         // the parents position. SetIndent() also redraws the control
 
         // indent is the number of pixels the children are indented relative to
         // the parents position. SetIndent() also redraws the control
@@ -107,12 +105,18 @@ public:
         // get the item's font
     virtual wxFont GetItemFont(const wxTreeItemId& item) const = 0;
 
         // get the item's font
     virtual wxFont GetItemFont(const wxTreeItemId& item) const = 0;
 
+        // get the items state
+    int GetItemState(const wxTreeItemId& item) const
+    {
+        return DoGetItemState(item);
+    }
+
     // modifiers
     // ---------
 
         // set items label
     virtual void SetItemText(const wxTreeItemId& item, const wxString& text) = 0;
     // modifiers
     // ---------
 
         // set items label
     virtual void SetItemText(const wxTreeItemId& item, const wxString& text) = 0;
-        // get one of the images associated with the item (normal by default)
+        // set one of the images associated with the item (normal by default)
     virtual void SetItemImage(const wxTreeItemId& item,
                               int image,
                               wxTreeItemIcon which = wxTreeItemIcon_Normal) = 0;
     virtual void SetItemImage(const wxTreeItemId& item,
                               int image,
                               wxTreeItemIcon which = wxTreeItemIcon_Normal) = 0;
@@ -145,6 +149,9 @@ public:
     virtual void SetItemFont(const wxTreeItemId& item,
                              const wxFont& font) = 0;
 
     virtual void SetItemFont(const wxTreeItemId& item,
                              const wxFont& font) = 0;
 
+        // set the items state (special state values: wxTREE_ITEMSTATE_NONE/NEXT/PREV)
+    void SetItemState(const wxTreeItemId& item, int state);
+
     // item status inquiries
     // ---------------------
 
     // item status inquiries
     // ---------------------
 
@@ -161,6 +168,9 @@ public:
     virtual bool IsSelected(const wxTreeItemId& item) const = 0;
         // is item text in bold font?
     virtual bool IsBold(const wxTreeItemId& item) const = 0;
     virtual bool IsSelected(const wxTreeItemId& item) const = 0;
         // is item text in bold font?
     virtual bool IsBold(const wxTreeItemId& item) const = 0;
+        // is the control empty?
+    bool IsEmpty() const;
+
 
     // number of children
     // ------------------
 
     // number of children
     // ------------------
@@ -187,6 +197,17 @@ public:
         //     control with a lot of items (~ O(number of items)).
     virtual size_t GetSelections(wxArrayTreeItemIds& selections) const = 0;
 
         //     control with a lot of items (~ O(number of items)).
     virtual size_t GetSelections(wxArrayTreeItemIds& selections) const = 0;
 
+        // get the last item to be clicked when the control has wxTR_MULTIPLE
+        // equivalent to GetSelection() if not wxTR_MULTIPLE
+    virtual wxTreeItemId GetFocusedItem() const = 0;
+
+
+        // Clears the currently focused item
+    virtual void ClearFocusedItem() = 0;
+        // Sets the currently focused item. Item should be valid
+    virtual void SetFocusedItem(const wxTreeItemId& item) = 0;
+
+
         // get the parent of this item (may return NULL if root)
     virtual wxTreeItemId GetItemParent(const wxTreeItemId& item) const = 0;
 
         // get the parent of this item (may return NULL if root)
     virtual wxTreeItemId GetItemParent(const wxTreeItemId& item) const = 0;
 
@@ -276,8 +297,16 @@ public:
 
         // expand this item
     virtual void Expand(const wxTreeItemId& item) = 0;
 
         // expand this item
     virtual void Expand(const wxTreeItemId& item) = 0;
+        // expand the item and all its children recursively
+    void ExpandAllChildren(const wxTreeItemId& item);
+        // expand all items
+    void ExpandAll();
         // collapse the item without removing its children
     virtual void Collapse(const wxTreeItemId& item) = 0;
         // collapse the item without removing its children
     virtual void Collapse(const wxTreeItemId& item) = 0;
+        // collapse the item and all its children
+    void CollapseAllChildren(const wxTreeItemId& item);
+        // collapse all items
+    void CollapseAll();
         // collapse the item and remove all children
     virtual void CollapseAndReset(const wxTreeItemId& item) = 0;
         // toggles the current state
         // collapse the item and remove all children
     virtual void CollapseAndReset(const wxTreeItemId& item) = 0;
         // toggles the current state
@@ -289,6 +318,9 @@ public:
     virtual void UnselectAll() = 0;
         // select this item
     virtual void SelectItem(const wxTreeItemId& item, bool select = true) = 0;
     virtual void UnselectAll() = 0;
         // select this item
     virtual void SelectItem(const wxTreeItemId& item, bool select = true) = 0;
+        // selects all (direct) children for given parent (only for
+        // multiselection controls)
+    virtual void SelectChildren(const wxTreeItemId& parent) = 0;
         // unselect this item
     void UnselectItem(const wxTreeItemId& item) { SelectItem(item, false); }
         // toggle item selection
         // unselect this item
     void UnselectItem(const wxTreeItemId& item) { SelectItem(item, false); }
         // toggle item selection
@@ -308,7 +340,7 @@ public:
         // been before. textCtrlClass parameter allows you to create an edit
         // control of arbitrary user-defined class deriving from wxTextCtrl.
     virtual wxTextCtrl *EditLabel(const wxTreeItemId& item,
         // been before. textCtrlClass parameter allows you to create an edit
         // control of arbitrary user-defined class deriving from wxTextCtrl.
     virtual wxTextCtrl *EditLabel(const wxTreeItemId& item,
-                      wxClassInfo* textCtrlClass = CLASSINFO(wxTextCtrl)) = 0;
+                      wxClassInfo* textCtrlClass = wxCLASSINFO(wxTextCtrl)) = 0;
         // returns the same pointer as StartEdit() if the item is being edited,
         // NULL otherwise (it's assumed that no more than one item may be
         // edited simultaneously)
         // returns the same pointer as StartEdit() if the item is being edited,
         // NULL otherwise (it's assumed that no more than one item may be
         // edited simultaneously)
@@ -317,6 +349,10 @@ public:
     virtual void EndEditLabel(const wxTreeItemId& item,
                               bool discardChanges = false) = 0;
 
     virtual void EndEditLabel(const wxTreeItemId& item,
                               bool discardChanges = false) = 0;
 
+        // Enable or disable beep when incremental match doesn't find any item.
+        // Only implemented in the generic version currently.
+    virtual void EnableBellOnNoMatch(bool WXUNUSED(on) = true) { }
+
     // sorting
     // -------
 
     // sorting
     // -------
 
@@ -342,10 +378,10 @@ public:
         // coordinates specified are relative to the client area of tree ctrl)
         // and, in the second variant, fill the flags parameter with a bitmask
         // of wxTREE_HITTEST_xxx constants.
         // coordinates specified are relative to the client area of tree ctrl)
         // and, in the second variant, fill the flags parameter with a bitmask
         // of wxTREE_HITTEST_xxx constants.
-    wxTreeItemId HitTest(const wxPoint& point)
-        { int dummy; return DoHitTest(point, dummy); }
-    wxTreeItemId HitTest(const wxPoint& point, int& flags)
-        { return DoHitTest(point, flags); }
+    wxTreeItemId HitTest(const wxPoint& point) const
+        { int dummy; return DoTreeHitTest(point, dummy); }
+    wxTreeItemId HitTest(const wxPoint& point, int& flags) const
+        { return DoTreeHitTest(point, flags); }
 
         // get the bounding rectangle of the item (or of its label only)
     virtual bool GetBoundingRect(const wxTreeItemId& item,
 
         // get the bounding rectangle of the item (or of its label only)
     virtual bool GetBoundingRect(const wxTreeItemId& item,
@@ -358,9 +394,17 @@ public:
 
     virtual bool ShouldInheritColours() const { return false; }
 
 
     virtual bool ShouldInheritColours() const { return false; }
 
+    // hint whether to calculate best size quickly or accurately
+    void SetQuickBestSize(bool q) { m_quickBestSize = q; }
+    bool GetQuickBestSize() const { return m_quickBestSize; }
+
 protected:
     virtual wxSize DoGetBestSize() const;
 
 protected:
     virtual wxSize DoGetBestSize() const;
 
+    // common part of Get/SetItemState()
+    virtual int DoGetItemState(const wxTreeItemId& item) const = 0;
+    virtual void DoSetItemState(const wxTreeItemId& item, int state) = 0;
+
     // common part of Append/Prepend/InsertItem()
     //
     // pos is the position at which to insert the item or (size_t)-1 to append
     // common part of Append/Prepend/InsertItem()
     //
     // pos is the position at which to insert the item or (size_t)-1 to append
@@ -382,7 +426,9 @@ protected:
 
     // real HitTest() implementation: again, can't be called just HitTest()
     // because it's overloaded and so the non-virtual overload would be hidden
 
     // real HitTest() implementation: again, can't be called just HitTest()
     // because it's overloaded and so the non-virtual overload would be hidden
-    virtual wxTreeItemId DoHitTest(const wxPoint& point, int& flags) = 0;
+    // (and can't be called DoHitTest() because this is already in wxWindow)
+    virtual wxTreeItemId DoTreeHitTest(const wxPoint& point,
+                                        int& flags) const = 0;
 
 
     wxImageList *m_imageListNormal, // images for tree elements
 
 
     wxImageList *m_imageListNormal, // images for tree elements
@@ -391,10 +437,20 @@ protected:
                  m_ownsImageListState;
 
     // spacing between left border and the text
                  m_ownsImageListState;
 
     // spacing between left border and the text
-    unsigned short m_spacing;
+    unsigned int m_spacing;
+
+    // whether full or quick calculation is done in DoGetBestSize
+    bool        m_quickBestSize;
+
 
 
+private:
+    // Intercept Escape and Return keys to ensure that our in-place edit
+    // control always gets them before they're used for dialog navigation or
+    // anything else.
+    void OnCharHook(wxKeyEvent& event);
 
 
-    DECLARE_NO_COPY_CLASS(wxTreeCtrlBase)
+
+    wxDECLARE_NO_COPY_CLASS(wxTreeCtrlBase);
 };
 
 // ----------------------------------------------------------------------------
 };
 
 // ----------------------------------------------------------------------------
@@ -403,10 +459,8 @@ protected:
 
 #if defined(__WXUNIVERSAL__)
     #include "wx/generic/treectlg.h"
 
 #if defined(__WXUNIVERSAL__)
     #include "wx/generic/treectlg.h"
-#elif defined(__WXPALMOS__)
-        #include "wx/palmos/treectrl.h"
 #elif defined(__WXMSW__)
 #elif defined(__WXMSW__)
-        #include "wx/msw/treectrl.h"
+    #include "wx/msw/treectrl.h"
 #elif defined(__WXMOTIF__)
     #include "wx/generic/treectlg.h"
 #elif defined(__WXGTK__)
 #elif defined(__WXMOTIF__)
     #include "wx/generic/treectlg.h"
 #elif defined(__WXGTK__)
@@ -419,5 +473,6 @@ protected:
     #include "wx/generic/treectlg.h"
 #endif
 
     #include "wx/generic/treectlg.h"
 #endif
 
-#endif // _WX_TREECTRL_H_BASE_
+#endif // wxUSE_TREECTRL
 
 
+#endif // _WX_TREECTRL_H_BASE_