]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/generic/treectrl.h
Generic dirctrl corrections
[wxWidgets.git] / include / wx / generic / treectrl.h
index a246bd31e05ae3a202f2a5d2c5ba9e8f0aef11e4..50d949b2b2fe9a2a953ab41ba37d6bb82553bf73 100644 (file)
     #pragma interface "treectrl.h"
 #endif
 
-#ifdef __WXMSW__
-WXDLLEXPORT_DATA(extern const char*) wxTreeCtrlNameStr;
-#else
-#define wxTreeCtrlNameStr "wxTreeCtrl"
-#endif
-
 #include "wx/defs.h"
 #include "wx/string.h"
 #include "wx/object.h"
@@ -30,60 +24,19 @@ WXDLLEXPORT_DATA(extern const char*) wxTreeCtrlNameStr;
 #include "wx/textctrl.h"
 #include "wx/pen.h"
 #include "wx/dynarray.h"
-
-//those defines should only be done in generic/treectrl.h, 
-//because wxMSW doesn't allow mutiple selection
-
-#ifndef wxTR_SINGLE
-#define wxTR_SINGLE                 0x0000
-#define wxTR_MULTIPLE               0x0020
-#define wxTR_EXTENDED               0x0040
-#define wxTR_HAS_VARIABLE_ROW_HIGHT 0x0080
-#endif
-
-// -----------------------------------------------------------------------------
-// constants
-// -----------------------------------------------------------------------------
-
-// values for the `flags' parameter of wxTreeCtrl::HitTest() which determine
-// where exactly the specified point is situated:
-
-static const int wxTREE_HITTEST_ABOVE            = 0x0001;
-static const int wxTREE_HITTEST_BELOW            = 0x0002;
-static const int wxTREE_HITTEST_NOWHERE          = 0x0004;
-    // on the button associated with an item.
-static const int wxTREE_HITTEST_ONITEMBUTTON     = 0x0008;
-    // on the bitmap associated with an item.
-static const int wxTREE_HITTEST_ONITEMICON       = 0x0010;
-    // on the ident associated with an item.
-static const int wxTREE_HITTEST_ONITEMIDENT      = 0x0020;
-    // on the label (string) associated with an item.
-static const int wxTREE_HITTEST_ONITEMLABEL      = 0x0040;
-    // on the right of the label associated with an item.
-static const int wxTREE_HITTEST_ONITEMRIGHT      = 0x0080;
-    // on the label (string) associated with an item.
-//static const int wxTREE_HITTEST_ONITEMSTATEICON  = 0x0100;
-    // on the left of the wxTreeCtrl.
-static const int wxTREE_HITTEST_TOLEFT           = 0x0200;
-    // on the right of the wxTreeCtrl.
-static const int wxTREE_HITTEST_TORIGHT          = 0x0400;
-    // on the upper part (first half) of the item.
-static const int wxTREE_HITTEST_ONITEMUPPERPART  = 0x0800;
-    // on the lower part (second half) of the item.
-static const int wxTREE_HITTEST_ONITEMLOWERPART  = 0x1000;
-
-    // anywhere on the item
-static const int wxTREE_HITTEST_ONITEM  = wxTREE_HITTEST_ONITEMICON |
-                                          wxTREE_HITTEST_ONITEMLABEL;
+#include "wx/timer.h"
 
 // -----------------------------------------------------------------------------
 // forward declaration
 // -----------------------------------------------------------------------------
 
-class wxImageList;
-class wxGenericTreeItem;
+class WXDLLEXPORT wxImageList;
+class WXDLLEXPORT wxGenericTreeItem;
+
+class WXDLLEXPORT wxTreeItemData;
 
-class wxTreeItemData;
+class WXDLLEXPORT wxTreeRenameTimer;
+class WXDLLEXPORT wxTreeTextCtrl;
 
 // -----------------------------------------------------------------------------
 // wxTreeItemId - unique identifier of a tree element
@@ -123,6 +76,7 @@ WX_DECLARE_OBJARRAY(wxTreeItemId, wxArrayTreeItemIds);
 // Because the objects of this class are deleted by the tree, they should
 // always be allocated on the heap!
 // ----------------------------------------------------------------------------
+
 class WXDLLEXPORT wxTreeItemData: public wxClientData
 {
 friend class wxTreeCtrl;
@@ -184,10 +138,10 @@ public:
     unsigned int GetIndent() const { return m_indent; }
     void SetIndent(unsigned int indent);
 
-       // spacing is the number of pixels between the start and the Text
+        // spacing is the number of pixels between the start and the Text
     unsigned int GetSpacing() const { return m_spacing; }
     void SetSpacing(unsigned int spacing);
-    
+
         // image list: these functions allow to associate an image list with
         // the control and retrieve it. Note that the control does _not_ delete
         // the associated image list when it's deleted in order to allow image
@@ -211,10 +165,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;
 
@@ -223,10 +176,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);
 
@@ -239,6 +191,15 @@ public:
         // the item will be shown in bold
     void SetItemBold(const wxTreeItemId& item, bool bold = 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
     // ---------------------
 
@@ -327,6 +288,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,
@@ -344,6 +312,8 @@ public:
 
         // expand this item
     void Expand(const wxTreeItemId& item);
+        // expand this item and all subitems recursively
+    void ExpandAll(const wxTreeItemId& item);
         // collapse the item without removing its children
     void Collapse(const wxTreeItemId& item);
         // collapse the item and remove all children
@@ -368,18 +338,11 @@ public:
         { int dummy; return HitTest(point, dummy); }
     wxTreeItemId HitTest(const wxPoint& point, int& flags);
 
-        // start editing the item label: this (temporarily) replaces the item
+        // Start editing the item label: this (temporarily) replaces the item
         // with a one line edit control. The item will be selected if it hadn't
-        // been before. textCtrlClass parameter allows you to create an edit
-        // control of arbitrary user-defined class deriving from wxTextCtrl.
-    wxTextCtrl* EditLabel(const wxTreeItemId& item,
-                          wxClassInfo* textCtrlClass = CLASSINFO(wxTextCtrl));
-        // 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)
-    wxTextCtrl* GetEditControl() const;
-        // end editing and accept or discard the changes to item label
-    void EndEditLabel(const wxTreeItemId& item, bool discardChanges = FALSE);
+        // been before.
+    void EditLabel( const wxTreeItemId& item ) { Edit( item ); }
+    void Edit( const wxTreeItemId& item );
 
     // sorting
         // this function is called to compare 2 items and should return -1, 0
@@ -393,6 +356,16 @@ public:
         // NB: this function is not reentrant and not MT-safe (FIXME)!
     void SortChildren(const wxTreeItemId& item);
 
+    // deprecated functions: 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 only from now on
+
     // callbacks
     void OnPaint( wxPaintEvent &event );
     void OnSetFocus( wxFocusEvent &event );
@@ -401,18 +374,22 @@ public:
     void OnMouse( wxMouseEvent &event );
     void OnIdle( wxIdleEvent &event );
 
-    // implementation
+    // implementation helpers
     void SendDeleteEvent(wxGenericTreeItem *itemBeingDeleted);
 
-    // Draw Special Information
-    void DrawBorder(wxTreeItemId& item);
-    void DrawLine(wxTreeItemId& item, bool below);
-    
+    void DrawBorder(const wxTreeItemId& item);
+    void DrawLine(const wxTreeItemId& item, bool below);
+
 protected:
     friend class wxGenericTreeItem;
+    friend class wxTreeRenameTimer;
+    friend class wxTreeTextCtrl;
+
+    wxFont               m_normalFont;
+    wxFont               m_boldFont;
 
     wxGenericTreeItem   *m_anchor;
-    wxGenericTreeItem   *m_current, *m_key_current;
+    wxGenericTreeItem   *m_current, *m_key_current, *m_currentEdit;
     bool                 m_hasFocus;
     bool                 m_dirty;
     int                  m_xScroll,m_yScroll;
@@ -423,7 +400,18 @@ protected:
     wxBrush             *m_hilightBrush;
     wxImageList         *m_imageListNormal,
                         *m_imageListState;
+
     int                  m_dragCount;
+    wxPoint              m_dragStart;
+    bool                 m_isDragging; // true between BEGIN/END drag events
+    wxGenericTreeItem   *m_dropTarget;
+    wxCursor             m_oldCursor;  // cursor is changed while dragging
+    wxGenericTreeItem   *m_oldSelection;
+
+    wxTimer             *m_renameTimer;
+    bool                 m_renameAccept;
+    bool                 m_lastOnSame;  // last click on the same item as prev
+    wxString             m_renameRes;
 
     // the common part of all ctors
     void Init();
@@ -447,12 +435,17 @@ protected:
     void RefreshSubtree( wxGenericTreeItem *item );
     void RefreshLine( wxGenericTreeItem *item );
 
+    void OnRenameTimer();
+    void OnRenameAccept();
+
     void FillArray(wxGenericTreeItem*, wxArrayTreeItemIds&) const;
     void SelectItemRange( wxGenericTreeItem *item1, wxGenericTreeItem *item2 );
     bool TagAllChildrenUntilLast(wxGenericTreeItem *crt_item, wxGenericTreeItem *last_item, bool select);
     bool TagNextChildren(wxGenericTreeItem *crt_item, wxGenericTreeItem *last_item, bool select);
     void UnselectAllChildren( wxGenericTreeItem *item );
 
+    void DrawDropEffect(wxGenericTreeItem *item);
+
 private:
     DECLARE_EVENT_TABLE()
     DECLARE_DYNAMIC_CLASS(wxTreeCtrl)