]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/contrib/gizmos/wxCode/include/wx/treelistctrl.h
tango icons
[wxWidgets.git] / wxPython / contrib / gizmos / wxCode / include / wx / treelistctrl.h
index 0600984616b30a7fb9293d73a16ccec5d00d6647..79aa6fae14be495070f8d64e46998ec11b58f5e7 100644 (file)
@@ -2,10 +2,10 @@
 // Name:        treelistctrl.h
 // Purpose:     wxTreeListCtrl class
 // Author:      Robert Roebling
-// Modified by: Alberto Griggio, 2002
+// Maintainer:  Otto Wyss
 // Created:     01/02/97
 // RCS-ID:      $Id$
-// Copyright:   (c) Robert Roebling, Julian Smart, Alberto Griggio,
+// Copyright:   (c) 2004 Robert Roebling, Julian Smart, Alberto Griggio,
 //              Vadim Zeitlin, Otto Wyss
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 #ifndef TREELISTCTRL_H
 #define TREELISTCTRL_H
 
-#if defined(__GNUG__) && !defined(__APPLE__)
-    #pragma interface "treelistctrl.h"
-#endif
-
 #include <wx/treectrl.h>
 #include <wx/control.h>
 #include <wx/pen.h>
@@ -34,6 +30,8 @@ class GIZMODLLEXPORT wxTreeListItem;
 class GIZMODLLEXPORT wxTreeListHeaderWindow;
 class GIZMODLLEXPORT wxTreeListMainWindow;
 
+#define wxTR_COLUMN_LINES 0x1000 // put border around items
+#define wxTR_VIRTUAL      0x4000 // The application provides items text on demand.
 
 // Using this typedef removes an ambiguity when calling Remove()
 #ifdef __WXMSW__
@@ -48,89 +46,87 @@ typedef void *wxTreeItemIdValue;
 // wxTreeListColumnAttrs
 //-----------------------------------------------------------------------------
 
-enum wxTreeListColumnAlign {
-    wxTL_ALIGN_LEFT,
-    wxTL_ALIGN_RIGHT,
-    wxTL_ALIGN_CENTER
+enum {
+    DEFAULT_COL_WIDTH = 100
 };
 
-
 class GIZMODLLEXPORT wxTreeListColumnInfo: public wxObject {
-public:
-    enum { DEFAULT_COL_WIDTH = 100 };
 
-    wxTreeListColumnInfo(const wxString &text = wxT(""),
-                         int image = -1,
-                         size_t width = DEFAULT_COL_WIDTH,
-                         bool shown = true,
-                         wxTreeListColumnAlign alignment = wxTL_ALIGN_LEFT)
-    {
-        m_image = image;
-        m_selected_image = -1;
+public:
+    wxTreeListColumnInfo (const wxString &text = wxEmptyString,
+                          int width = DEFAULT_COL_WIDTH,
+                          int flag = wxALIGN_LEFT,
+                          int image = -1,
+                          bool shown = true,
+                          bool edit = false) {
         m_text = text;
         m_width = width;
+        m_flag = flag;
+        m_image = image;
+        m_selected_image = -1;
         m_shown = shown;
-        m_alignment = alignment;
+        m_edit = edit;
     }
 
-    wxTreeListColumnInfo(const wxTreeListColumnInfo& other)
-    {
-        m_image = other.m_image;
-        m_selected_image = other.m_selected_image;
+    wxTreeListColumnInfo (const wxTreeListColumnInfo& other) {
         m_text = other.m_text;
         m_width = other.m_width;
+        m_flag = other.m_flag;
+        m_image = other.m_image;
+        m_selected_image = other.m_selected_image;
         m_shown = other.m_shown;
-        m_alignment = other.m_alignment;
+        m_edit = other.m_edit;
     }
 
     ~wxTreeListColumnInfo() {}
 
-    // getters
-    bool GetShown() const { return m_shown; }
-    wxTreeListColumnAlign GetAlignment() const { return m_alignment; }
+    // get/set
     wxString GetText() const { return m_text; }
-    int GetImage() const { return m_image; }
-    int GetSelectedImage() const { return m_selected_image; }
-    size_t GetWidth() const { return m_width; }
+    wxTreeListColumnInfo& SetText (const wxString& text) { m_text = text; return *this; }
 
-    // setters
-    wxTreeListColumnInfo& SetShown(bool shown)
-    { m_shown = shown; return *this; }
+    int GetWidth() const { return m_width; }
+    wxTreeListColumnInfo& SetWidth (int width) { m_width = width; return *this; }
 
-    wxTreeListColumnInfo& SetAlignment(wxTreeListColumnAlign alignment)
-    { m_alignment = alignment; return *this; }
+    int GetAlignment() const { return m_flag; }
+    wxTreeListColumnInfo& SetAlignment (int flag) { m_flag = flag; return *this; }
 
-    wxTreeListColumnInfo& SetText(const wxString& text)
-    { m_text = text; return *this; }
+    int GetImage() const { return m_image; }
+    wxTreeListColumnInfo& SetImage (int image) { m_image = image; return *this; }
 
-    wxTreeListColumnInfo& SetImage(int image)
-    { m_image = image; return *this; }
+    int GetSelectedImage() const { return m_selected_image; }
+    wxTreeListColumnInfo& SetSelectedImage (int image) { m_selected_image = image; return *this; }
 
-    wxTreeListColumnInfo& SetSelectedImage(int image)
-    { m_selected_image = image; return *this; }
+    bool IsEditable() const { return m_edit; }
+    wxTreeListColumnInfo& SetEditable (bool edit)
+        { m_edit = edit; return *this; }
 
-    wxTreeListColumnInfo& SetWidth(size_t with)
-    { m_width = with; return *this; }
+    bool IsShown() const { return m_shown; }
+    wxTreeListColumnInfo& SetShown(bool shown) { m_shown = shown; return *this; }
 
 private:
-    bool m_shown;
-    wxTreeListColumnAlign m_alignment;
     wxString m_text;
+    int m_width;
+    int m_flag;
     int m_image;
     int m_selected_image;
-    size_t m_width;
+    bool m_shown;
+    bool m_edit;
 };
 
 //----------------------------------------------------------------------------
 // wxTreeListCtrl - the multicolumn tree control
 //----------------------------------------------------------------------------
 
-// flags for FindItem
-const int wxTL_SEARCH_VISIBLE = 0x0000;
-const int wxTL_SEARCH_LEVEL   = 0x0001;
-const int wxTL_SEARCH_FULL    = 0x0002;
-const int wxTL_SEARCH_PARTIAL = 0x0010;
-const int wxTL_SEARCH_NOCASE  = 0x0020;
+// modes for navigation
+const int wxTL_MODE_NAV_FULLTREE = 0x0000; // default
+const int wxTL_MODE_NAV_EXPANDED = 0x0001;
+const int wxTL_MODE_NAV_VISIBLE  = 0x0002;
+const int wxTL_MODE_NAV_LEVEL    = 0x0004;
+
+// modes for FindItem
+const int wxTL_MODE_FIND_EXACT   = 0x0000; // default
+const int wxTL_MODE_FIND_PARTIAL = 0x0010;
+const int wxTL_MODE_FIND_NOCASE  = 0x0020;
 
 // additional flag for HitTest
 const int wxTREE_HITTEST_ONITEMCOLUMN = 0x2000;
@@ -142,7 +138,9 @@ class GIZMODLLEXPORT wxTreeListCtrl : public wxControl
 public:
     // creation
     // --------
-    wxTreeListCtrl() {}
+    wxTreeListCtrl()
+        : m_header_win(0), m_main_win(0), m_headerHeight(0)
+    {}
 
     wxTreeListCtrl(wxWindow *parent, wxWindowID id = -1,
                const wxPoint& pos = wxDefaultPosition,
@@ -150,7 +148,7 @@ public:
                long style = wxTR_DEFAULT_STYLE,
                const wxValidator &validator = wxDefaultValidator,
                const wxString& name = wxTreeListCtrlNameStr )
-        : m_header_win(0), m_main_win(0)
+        : m_header_win(0), m_main_win(0), m_headerHeight(0)
     {
         Create(parent, id, pos, size, style, validator, name);
     }
@@ -206,144 +204,147 @@ public:
     void AssignButtonsImageList(wxImageList *imageList);
 
 
-    // Functions to work with tree list ctrl columns
+    // Functions to work with columns
 
     // adds a column
-    void AddColumn(const wxString& text)
-        { AddColumn(wxTreeListColumnInfo(text)); }
-    void AddColumn(const wxString& text,
-                   size_t width,
-                   wxTreeListColumnAlign alignment = wxTL_ALIGN_LEFT)
-        { AddColumn(wxTreeListColumnInfo(text,
-                                         -1,
-                                         width,
-                                         true,
-                                         alignment)); }
-    void AddColumn(const wxTreeListColumnInfo& col);
+    void AddColumn (const wxString& text,
+                    int width = DEFAULT_COL_WIDTH,
+                    int flag = wxALIGN_LEFT,
+                    int image = -1,
+                    bool shown = true,
+                    bool edit = false) {
+        AddColumn (wxTreeListColumnInfo (text, width, flag, image, shown, edit));
+    }
+    void AddColumn (const wxTreeListColumnInfo& colInfo);
 
     // inserts a column before the given one
-    void InsertColumn(size_t before, const wxString& text)
-    { InsertColumn(before, wxTreeListColumnInfo(text)); }
-    void InsertColumn(size_t before, const wxTreeListColumnInfo& col);
+    void InsertColumn (int before,
+                       const wxString& text,
+                       int width = DEFAULT_COL_WIDTH,
+                       int flag = wxALIGN_LEFT,
+                       int image = -1,
+                       bool shown = true,
+                       bool edit = false) {
+        InsertColumn (before,
+                      wxTreeListColumnInfo (text, width, flag, image, shown, edit));
+    }
+    void InsertColumn (int before, const wxTreeListColumnInfo& colInfo);
 
     // deletes the given column - does not delete the corresponding column
-    // of each item
-    void RemoveColumn(size_t column);
+    void RemoveColumn (int column);
 
     // returns the number of columns in the ctrl
-    size_t GetColumnCount() const;
-
-    void SetColumnWidth(size_t column, size_t width);
-    int GetColumnWidth(size_t column) const;
+    int GetColumnCount() const;
 
     // tells which column is the "main" one, i.e. the "threaded" one
-    void SetMainColumn(size_t column);
-    size_t GetMainColumn() const;
+    void SetMainColumn (int column);
+    int GetMainColumn() const;
+
+    void SetColumn (int column, const wxTreeListColumnInfo& colInfo);
+    wxTreeListColumnInfo& GetColumn (int column);
+    const wxTreeListColumnInfo& GetColumn (int column) const;
 
-    void SetColumnText(size_t column, const wxString& text);
-    wxString GetColumnText(size_t column) const;
+    void SetColumnText (int column, const wxString& text);
+    wxString GetColumnText (int column) const;
 
-    void SetColumn(size_t column, const wxTreeListColumnInfo& info);
-    wxTreeListColumnInfo& GetColumn(size_t column);
-    const wxTreeListColumnInfo& GetColumn(size_t column) const;
+    void SetColumnWidth (int column, int width);
+    int GetColumnWidth (int column) const;
 
-    // other column-related methods
-    void SetColumnAlignment(size_t column, wxTreeListColumnAlign align);
-    wxTreeListColumnAlign GetColumnAlignment(size_t column) const;
+    void SetColumnAlignment (int column, int flag);
+    int GetColumnAlignment (int column) const;
 
-    void SetColumnImage(size_t column, int image);
-    int GetColumnImage(size_t column) const;
+    void SetColumnImage (int column, int image);
+    int GetColumnImage (int column) const;
 
-    void ShowColumn(size_t column, bool shown);
-    bool IsColumnShown(size_t column) const;
+    void SetColumnShown (int column, bool shown = true);
+    bool IsColumnShown (int column) const;
 
-    // Functions to work with tree list ctrl items.
+    void SetColumnEditable (int column, bool edit = true);
+    bool IsColumnEditable (int column) const;
+
+    // Functions to work with items.
 
     // accessors
     // ---------
 
     // retrieve item's label (of the main column)
-    wxString GetItemText(const wxTreeItemId& item) const
-        { return GetItemText(item, GetMainColumn()); }
+    wxString GetItemText (const wxTreeItemId& item) const
+        { return GetItemText (item, GetMainColumn()); }
     // retrieves item's label of the given column
-    wxString GetItemText(const wxTreeItemId& item, size_t column) const;
+    wxString GetItemText (const wxTreeItemId& item, int column) const;
 
     // get one of the images associated with the item (normal by default)
-    int GetItemImage(const wxTreeItemId& item,
-                     wxTreeItemIcon which = wxTreeItemIcon_Normal) const
-    { return GetItemImage(item, GetMainColumn(), which); }
-    int GetItemImage(const wxTreeItemId& item, size_t column,
-                     wxTreeItemIcon which = wxTreeItemIcon_Normal) const;
+    int GetItemImage (const wxTreeItemId& item,
+                      wxTreeItemIcon which = wxTreeItemIcon_Normal) const
+    { return GetItemImage (item, GetMainColumn(), which); }
+    int GetItemImage (const wxTreeItemId& item, int column,
+                      wxTreeItemIcon which = wxTreeItemIcon_Normal) const;
 
     // get the data associated with the item
-    wxTreeItemData *GetItemData(const wxTreeItemId& item) const;
+    wxTreeItemData *GetItemData (const wxTreeItemId& item) const;
 
-    bool GetItemBold(const wxTreeItemId& item) const;
-    wxColour GetItemTextColour(const wxTreeItemId& item) const;
-    wxColour GetItemBackgroundColour(const wxTreeItemId& item) const;
-    wxFont GetItemFont(const wxTreeItemId& item) const;
+    bool GetItemBold (const wxTreeItemId& item) const;
+    wxColour GetItemTextColour (const wxTreeItemId& item) const;
+    wxColour GetItemBackgroundColour (const wxTreeItemId& item) const;
+    wxFont GetItemFont (const wxTreeItemId& item) const;
 
     // modifiers
-    // ---------
 
     // set item's label
-    void SetItemText(const wxTreeItemId& item, const wxString& text)
-    { SetItemText(item, GetMainColumn(), text); }
-    void SetItemText(const wxTreeItemId& item, size_t column,
-                     const wxString& text);
+    void SetItemText (const wxTreeItemId& item, const wxString& text)
+        { SetItemText (item, GetMainColumn(), text); }
+    void SetItemText (const wxTreeItemId& item, int column, const wxString& text);
 
     // get one of the images associated with the item (normal by default)
-    void SetItemImage(const wxTreeItemId& item, int image,
-                      wxTreeItemIcon which = wxTreeItemIcon_Normal)
-    { SetItemImage(item, GetMainColumn(), image, which); }
+    void SetItemImage (const wxTreeItemId& item, int image,
+                       wxTreeItemIcon which = wxTreeItemIcon_Normal)
+        { SetItemImage (item, GetMainColumn(), image, which); }
     // the which parameter is ignored for all columns but the main one
-    void SetItemImage(const wxTreeItemId& item, size_t column, int image,
-                      wxTreeItemIcon which = wxTreeItemIcon_Normal);
+    void SetItemImage (const wxTreeItemId& item, int column, int image,
+                       wxTreeItemIcon which = wxTreeItemIcon_Normal);
 
     // associate some data with the item
-    void SetItemData(const wxTreeItemId& item, wxTreeItemData *data);
+    void SetItemData (const wxTreeItemId& item, wxTreeItemData *data);
 
     // force appearance of [+] button near the item. This is useful to
     // allow the user to expand the items which don't have any children now
     // - but instead add them only when needed, thus minimizing memory
     // usage and loading time.
-    void SetItemHasChildren(const wxTreeItemId& item, bool has = TRUE);
+    void SetItemHasChildren(const wxTreeItemId& item, bool has = true);
 
     // the item will be shown in bold
-    void SetItemBold(const wxTreeItemId& item, bool bold = TRUE);
+    void SetItemBold (const wxTreeItemId& item, bool bold = true);
 
     // set the item's text colour
-    void SetItemTextColour(const wxTreeItemId& item, const wxColour& colour);
+    void SetItemTextColour (const wxTreeItemId& item, const wxColour& colour);
 
     // set the item's background colour
-    void SetItemBackgroundColour(const wxTreeItemId& item, const wxColour& colour);
+    void SetItemBackgroundColour (const wxTreeItemId& item, const wxColour& colour);
 
     // set the item's font (should be of the same height for all items)
-    void SetItemFont(const wxTreeItemId& item, const wxFont& font);
+    void SetItemFont (const wxTreeItemId& item, const wxFont& font);
 
     // set the window font
-    virtual bool SetFont( const wxFont &font );
+    virtual bool SetFont ( const wxFont &font );
 
     // set the styles.
-    void SetWindowStyle(const long styles);
+    void SetWindowStyle (const long styles);
     long GetWindowStyle() const;
-    long GetWindowStyleFlag() const { return GetWindowStyle(); }
+    long GetWindowStyleFlag () const { return GetWindowStyle(); }
 
     // item status inquiries
     // ---------------------
 
     // is the item visible (it might be outside the view or not expanded)?
-    bool IsVisible(const wxTreeItemId& item) const;
+    bool IsVisible (const wxTreeItemId& item, bool fullRow = false) const;
     // does the item has any children?
-    bool HasChildren(const wxTreeItemId& item) const
-      { return ItemHasChildren(item); }
-    bool ItemHasChildren(const wxTreeItemId& item) const;
+    bool HasChildren (const wxTreeItemId& item) const;
     // is the item expanded (only makes sense if HasChildren())?
-    bool IsExpanded(const wxTreeItemId& item) const;
+    bool IsExpanded (const wxTreeItemId& item) const;
     // is this item currently selected (the same as has focus)?
-    bool IsSelected(const wxTreeItemId& item) const;
+    bool IsSelected (const wxTreeItemId& item) const;
     // is item text in bold font?
-    bool IsBold(const wxTreeItemId& item) const;
+    bool IsBold (const wxTreeItemId& item) const;
     // does the layout include space for a button?
 
     // number of children
@@ -351,7 +352,7 @@ public:
 
     // 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);
 
     // navigation
     // ----------
@@ -365,10 +366,10 @@ public:
     wxTreeItemId GetSelection() const;
 
     // get the items currently selected, return the number of such item
-    size_t GetSelections(wxArrayTreeItemIds&) const;
+    size_t GetSelections (wxArrayTreeItemIds&) const;
 
     // get the parent of this item (may return NULL if root)
-    wxTreeItemId GetItemParent(const wxTreeItemId& item) const;
+    wxTreeItemId GetItemParent (const wxTreeItemId& item) const;
 
     // for this enumeration function you must pass in a "cookie" parameter
     // which is opaque for the application but is necessary for the library
@@ -377,170 +378,171 @@ public:
     // the "cookie" passed to GetFirstChild() and GetNextChild() should be
     // the same!
 
-    // get the first child of this item
+    // get child of this item
 #if !wxCHECK_VERSION(2, 5, 0)
     wxTreeItemId GetFirstChild(const wxTreeItemId& item, long& cookie) const;
-#else
-    wxTreeItemId GetFirstChild(const wxTreeItemId& item, wxTreeItemIdValue& cookie) const;
-#endif
-    // get the next child
-#if !wxCHECK_VERSION(2, 5, 0)
     wxTreeItemId GetNextChild(const wxTreeItemId& item, long& cookie) const;
-#else
-    wxTreeItemId GetNextChild(const wxTreeItemId& item, wxTreeItemIdValue& cookie) const;
-#endif
-    // get the prev child
-#if !wxCHECK_VERSION(2, 5, 0)
     wxTreeItemId GetPrevChild(const wxTreeItemId& item, long& cookie) const;
+    wxTreeItemId GetLastChild(const wxTreeItemId& item, long& cookie) const;
 #else
+    wxTreeItemId GetFirstChild(const wxTreeItemId& item, wxTreeItemIdValue& cookie) const;
+    wxTreeItemId GetNextChild(const wxTreeItemId& item, wxTreeItemIdValue& cookie) const;
     wxTreeItemId GetPrevChild(const wxTreeItemId& item, wxTreeItemIdValue& cookie) const;
+    wxTreeItemId GetLastChild(const wxTreeItemId& item, wxTreeItemIdValue& cookie) const;
 #endif
-    // get the last child of this item - this method doesn't use cookies
-    wxTreeItemId GetLastChild(const wxTreeItemId& item) const;
 
-    // get the next sibling of this item
+    // get sibling of this item
     wxTreeItemId GetNextSibling(const wxTreeItemId& item) const;
-    // get the previous sibling
     wxTreeItemId GetPrevSibling(const wxTreeItemId& item) const;
 
-    // get first visible item
-    wxTreeItemId GetFirstVisibleItem() const;
-    // get the next visible item: item must be visible itself!
-    // see IsVisible() and wxTreeCtrl::GetFirstVisibleItem()
-    wxTreeItemId GetNextVisible(const wxTreeItemId& item) const;
-    // get the previous visible item: item must be visible itself!
-    wxTreeItemId GetPrevVisible(const wxTreeItemId& item) const;
-
-    // Only for internal use right now, but should probably be public
+    // get item in the full tree (currently only for internal use)
     wxTreeItemId GetNext(const wxTreeItemId& item) const;
+    wxTreeItemId GetPrev(const wxTreeItemId& item) const;
+
+    // get expanded item, see IsExpanded()
+    wxTreeItemId GetFirstExpandedItem() const;
+    wxTreeItemId GetNextExpanded(const wxTreeItemId& item) const;
+    wxTreeItemId GetPrevExpanded(const wxTreeItemId& item) const;
+
+    // get visible item, see IsVisible()
+    wxTreeItemId GetFirstVisibleItem(bool fullRow = false) const;
+    wxTreeItemId GetNextVisible(const wxTreeItemId& item, bool fullRow = false) const;
+    wxTreeItemId GetPrevVisible(const wxTreeItemId& item, bool fullRow = false) const;
 
     // operations
     // ----------
 
     // add the root node to the tree
-    wxTreeItemId AddRoot(const wxString& text,
-                         int image = -1, int selectedImage = -1,
-                         wxTreeItemData *data = NULL);
+    wxTreeItemId AddRoot (const wxString& text,
+                          int image = -1, int selectedImage = -1,
+                          wxTreeItemData *data = NULL);
 
     // insert a new item in as the first child of the parent
-    wxTreeItemId PrependItem(const wxTreeItemId& parent,
+    wxTreeItemId PrependItem (const wxTreeItemId& parent,
+                              const wxString& text,
+                              int image = -1, int selectedImage = -1,
+                              wxTreeItemData *data = NULL);
+
+    // insert a new item after a given one
+    wxTreeItemId InsertItem (const wxTreeItemId& parent,
+                             const wxTreeItemId& idPrevious,
                              const wxString& text,
                              int image = -1, int selectedImage = -1,
                              wxTreeItemData *data = NULL);
 
-    // insert a new item after a given one
-    wxTreeItemId InsertItem(const wxTreeItemId& parent,
-                            const wxTreeItemId& idPrevious,
-                            const wxString& text,
-                            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);
+    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,
-                            int image = -1, int selectedImage = -1,
-                            wxTreeItemData *data = NULL);
+    wxTreeItemId AppendItem (const wxTreeItemId& parent,
+                             const wxString& text,
+                             int image = -1, int selectedImage = -1,
+                             wxTreeItemData *data = NULL);
 
-    // delete this item and associated data if any
-    void Delete(const wxTreeItemId& item);
+    // delete this item (except root) and associated data if any
+    void Delete (const wxTreeItemId& item);
     // delete all children (but don't delete the item itself)
     // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events
-    void DeleteChildren(const wxTreeItemId& item);
-    // delete all items from the tree
+    void DeleteChildren (const wxTreeItemId& item);
+    // delete the root and all its children from the tree
     // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events
-    void DeleteAllItems();
+    void DeleteRoot();
 
     // expand this item
-    void Expand(const wxTreeItemId& item);
+    void Expand (const wxTreeItemId& item);
     // expand this item and all subitems recursively
-    void ExpandAll(const wxTreeItemId& item);
+    void ExpandAll (const wxTreeItemId& item);
     // collapse the item without removing its children
-    void Collapse(const wxTreeItemId& item);
+    void Collapse (const wxTreeItemId& item);
     // collapse the item and remove all children
-    void CollapseAndReset(const wxTreeItemId& item);
+    void CollapseAndReset(const wxTreeItemId& item); //? TODO ???
     // toggles the current state
-    void Toggle(const wxTreeItemId& item);
+    void Toggle (const wxTreeItemId& item);
 
     // remove the selection from currently selected item (if any)
     void Unselect();
     void UnselectAll();
     // select this item
-    void SelectItem(const wxTreeItemId& item, bool unselect_others=TRUE,
-                    bool extended_select=FALSE);
-    void SelectAll(bool extended_select=FALSE);
+    void SelectItem (const wxTreeItemId& item,
+                     const wxTreeItemId& last = (wxTreeItemId*)NULL,
+                     bool unselect_others = true);
+    // select all items in the expanded tree
+    void SelectAll();
     // make sure this item is visible (expanding the parent item and/or
     // scrolling to this item if necessary)
-    void EnsureVisible(const wxTreeItemId& item);
+    void EnsureVisible (const wxTreeItemId& item);
     // scroll to this item (but don't expand its parent)
-    void ScrollTo(const wxTreeItemId& item);
-    //void AdjustMyScrollbars();
+    void ScrollTo (const wxTreeItemId& item);
 
     // The first function is more portable (because easier to implement
     // on other platforms), but the second one returns some extra info.
-    wxTreeItemId HitTest(const wxPoint& point)
-        { int dummy; return HitTest(point, dummy); }
-    wxTreeItemId HitTest(const wxPoint& point, int& flags)
-    { int col; return HitTest(point, flags, col); }
-    wxTreeItemId HitTest(const wxPoint& point, int& flags, int& column);
+    wxTreeItemId HitTest (const wxPoint& point)
+        { int flags; int column; return HitTest (point, flags, column); }
+    wxTreeItemId HitTest (const wxPoint& point, int& flags)
+        { int column; return HitTest (point, flags, column); }
+    wxTreeItemId HitTest (const wxPoint& point, int& flags, int& column);
 
     // get the bounding rectangle of the item (or of its label only)
-    bool GetBoundingRect(const wxTreeItemId& item,
-                         wxRect& rect,
-                         bool textOnly = FALSE) const;
+    bool GetBoundingRect (const wxTreeItemId& item, wxRect& rect,
+                          bool textOnly = false) const;
 
     // 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.
-    void EditLabel( const wxTreeItemId& item ) { Edit( item ); }
-    void Edit( const wxTreeItemId& item );
+    void EditLabel (const wxTreeItemId& item)
+        { EditLabel (item, GetMainColumn()); }
+    // edit item's label of the given column
+    void EditLabel (const wxTreeItemId& item, int column);
+
+    // virtual mode
+    virtual wxString OnGetItemText( wxTreeItemData* item, long column ) const;
 
     // sorting
     // this function is called to compare 2 items and should return -1, 0
     // or +1 if the first item is less than, equal to or greater than the
     // second one. The base class version performs alphabetic comparaison
     // of item labels (GetText)
-    virtual int OnCompareItems(const wxTreeItemId& item1,
-                               const wxTreeItemId& item2);
+    virtual int OnCompareItems (const wxTreeItemId& item1, const wxTreeItemId& item2);
     // sort the children of this item using OnCompareItems
-    //
     // NB: this function is not reentrant and not MT-safe (FIXME)!
     void SortChildren(const wxTreeItemId& item);
 
     // searching
-    wxTreeItemId FindItem (const wxTreeItemId& item, const wxString& str, int flags = 0);
+    wxTreeItemId FindItem (const wxTreeItemId& item, const wxString& str, int mode = 0);
 
     // overridden base class virtuals
-    virtual bool SetBackgroundColour(const wxColour& colour);
-    virtual bool SetForegroundColour(const wxColour& colour);
+    virtual bool SetBackgroundColour (const wxColour& colour);
+    virtual bool SetForegroundColour (const wxColour& colour);
+
+    // drop over item
+    void SetDragItem (const wxTreeItemId& item = (wxTreeItemId*)NULL);
 
 
     wxTreeListHeaderWindow* GetHeaderWindow() const
-    { return m_header_win; }
+        { return m_header_win; }
 
     wxTreeListMainWindow* GetMainWindow() const
-    { return m_main_win; }
+        { return m_main_win; }
+
+    virtual wxSize DoGetBestSize() const;
 
 protected:
     // header window, responsible for column visualization and manipulation
     wxTreeListHeaderWindow* m_header_win;
-    // main window, the "true" tree ctrl
-    wxTreeListMainWindow*   m_main_win;
 
-//     // the common part of all ctors
-//     void Init();
+    // main window, the "true" tree ctrl
+    wxTreeListMainWindow* m_main_win;
 
+    void CalculateAndSetHeaderHeight();
+    void DoHeaderLayout();
     void OnSize(wxSizeEvent& event);
 
-
 private:
-    size_t fill_column;
+    int m_headerHeight;
 
     DECLARE_EVENT_TABLE()
     DECLARE_DYNAMIC_CLASS(wxTreeListCtrl)