#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"
#include "wx/dynarray.h"
#include "wx/timer.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;
-
// -----------------------------------------------------------------------------
// forward declaration
// -----------------------------------------------------------------------------
wxTreeItemId m_pItem;
};
-//-----------------------------------------------------------------------------
-// wxTreeRenameTimer (internal)
-//-----------------------------------------------------------------------------
-
-class WXDLLEXPORT wxTreeRenameTimer: public wxTimer
-{
- private:
- wxTreeCtrl *m_owner;
-
- public:
- wxTreeRenameTimer( wxTreeCtrl *owner );
- void Notify();
-};
-
-//-----------------------------------------------------------------------------
-// wxTreeTextCtrl (internal)
-//-----------------------------------------------------------------------------
-
-class WXDLLEXPORT wxTreeTextCtrl: public wxTextCtrl
-{
- DECLARE_DYNAMIC_CLASS(wxTreeTextCtrl);
-
- private:
- bool *m_accept;
- wxString *m_res;
- wxTreeCtrl *m_owner;
- wxString m_startValue;
-
- public:
- wxTreeTextCtrl(void) {};
- wxTreeTextCtrl( wxWindow *parent, const wxWindowID id,
- bool *accept, wxString *res, wxTreeCtrl *owner,
- const wxString &value = "",
- const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize,
- int style = 0, const wxValidator& validator = wxDefaultValidator,
- const wxString &name = "wxTreeTextCtrlText" );
- void OnChar( wxKeyEvent &event );
- void OnKillFocus( wxFocusEvent &event );
-
- DECLARE_EVENT_TABLE()
-};
-
// -----------------------------------------------------------------------------
// wxTreeCtrl - the tree control
// -----------------------------------------------------------------------------
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
// 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;
// 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);
// 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
// ---------------------
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,
// 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
// or +1 if the first item is less than, equal to or greater than the
// 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 );
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, *m_currentEdit;
bool m_hasFocus;
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;
wxString m_renameRes;
void RefreshSubtree( wxGenericTreeItem *item );
void RefreshLine( wxGenericTreeItem *item );
-
+
void OnRenameTimer();
void OnRenameAccept();
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)