X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fe71f65c0fec58e34fbc7c4ece402313bf48e220..5b011451bd5444fd5aea14811ef7a172a249c4ef:/include/wx/generic/treectrl.h?ds=sidebyside diff --git a/include/wx/generic/treectrl.h b/include/wx/generic/treectrl.h index 640b84ecca..8e9af20297 100644 --- a/include/wx/generic/treectrl.h +++ b/include/wx/generic/treectrl.h @@ -13,7 +13,7 @@ #define __GTKTREECTRLH_G__ #ifdef __GNUG__ -#pragma interface +#pragma interface "treectrl.h" #endif #include "wx/defs.h" @@ -35,6 +35,8 @@ class wxTreeEvent; class wxGenericTreeItem; class wxTreeCtrl; +class wxImageList; + //----------------------------------------------------------------------------- // constants //----------------------------------------------------------------------------- @@ -69,7 +71,7 @@ class wxTreeCtrl; #define wxTREE_HITTEST_TOLEFT 0x0400 // To the right of the client area. #define wxTREE_HITTEST_TORIGHT 0x0800 // To the left of the client area. -#define wxTREE_HITTEST_ONITEM (wxTREE_HITTEST_ONITEMICON | wxTREE_HITTEST_ONITEMLABEL wxTREE_HITTEST_ONITEMSTATEICON) +#define wxTREE_HITTEST_ONITEM (wxTREE_HITTEST_ONITEMICON | wxTREE_HITTEST_ONITEMLABEL | wxTREE_HITTEST_ONITEMSTATEICON) // Flags for GetNextItem enum { @@ -121,20 +123,41 @@ enum { class WXDLLEXPORT wxTreeItem: public wxObject { +public: + long m_mask; + long m_itemId; + long m_state; + long m_stateMask; + wxString m_text; + int m_image; + int m_selectedImage; + int m_children; + long m_data; + + wxTreeItem(); + + // Accessors + inline long GetMask() const { return m_mask; } + inline long GetItemId() const { return m_itemId; } + inline long GetState() const { return m_state; } + inline long GetStateMask() const { return m_stateMask; } + inline wxString GetText() const { return m_text; } + inline int GetImage() const { return m_image; } + inline int GetSelectedImage() const { return m_selectedImage; } + inline int GetChildren() const { return m_children; } + inline long GetData() const { return m_data; } + + inline void SetMask(long mask) { m_mask = mask; } + inline void SetItemId(long id) { m_itemId = m_itemId = id; } + inline void GetState(long state) { m_state = state; } + inline void SetStateMask(long stateMask) { m_stateMask = stateMask; } + inline void GetText(const wxString& text) { m_text = text; } + inline void SetImage(int image) { m_image = image; } + inline void SetSelectedImage(int selImage) { m_selectedImage = selImage; } + inline void SetChildren(int children) { m_children = children; } + inline void SetData(long data) { m_data = data; } + DECLARE_DYNAMIC_CLASS(wxTreeItem) - - public: - long m_mask; - long m_itemId; - long m_state; - long m_stateMask; - wxString m_text; - int m_image; - int m_selectedImage; - int m_children; - long m_data; - - wxTreeItem(void); }; //----------------------------------------------------------------------------- @@ -146,47 +169,48 @@ class WXDLLEXPORT wxTreeEvent: public wxCommandEvent DECLARE_DYNAMIC_CLASS(wxTreeEvent) public: - wxTreeEvent(WXTYPE commandType = 0, int id = 0); + wxTreeEvent(wxEventType commandType = wxEVT_NULL, int id = 0); int m_code; wxTreeItem m_item; long m_oldItem; wxPoint m_pointDrag; + + inline long GetOldItem() const { return m_oldItem; } + inline wxTreeItem& GetItem() const { return (wxTreeItem&) m_item; } + inline wxPoint GetPoint() const { return m_pointDrag; } + inline void SetCode(int code) { m_code = code; } + inline int GetCode() const { return m_code; } }; typedef void (wxEvtHandler::*wxTreeEventFunction)(wxTreeEvent&); -#define EVT_TREE_BEGIN_DRAG(id, fn) { wxEVT_COMMAND_TREE_BEGIN_DRAG, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL }, -#define EVT_TREE_BEGIN_RDRAG(id, fn) { wxEVT_COMMAND_TREE_BEGIN_RDRAG, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL }, -#define EVT_TREE_BEGIN_LABEL_EDIT(id, fn) { wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL }, -#define EVT_TREE_END_LABEL_EDIT(id, fn) { wxEVT_COMMAND_TREE_END_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL }, -#define EVT_TREE_DELETE_ITEM(id, fn) { wxEVT_COMMAND_TREE_DELETE_ITEM, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL }, -#define EVT_TREE_GET_INFO(id, fn) { wxEVT_COMMAND_TREE_GET_INFO, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL }, -#define EVT_TREE_SET_INFO(id, fn) { wxEVT_COMMAND_TREE_SET_INFO, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL }, -#define EVT_TREE_ITEM_EXPANDED(id, fn) { wxEVT_COMMAND_TREE_ITEM_EXPANDED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL }, -#define EVT_TREE_ITEM_EXPANDING(id, fn) { wxEVT_COMMAND_TREE_ITEM_EXPANDING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL }, -#define EVT_TREE_SEL_CHANGED(id, fn) { wxEVT_COMMAND_TREE_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL }, -#define EVT_TREE_SEL_CHANGING(id, fn) { wxEVT_COMMAND_TREE_SEL_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL }, -#define EVT_TREE_KEY_DOWN(id, fn) { wxEVT_COMMAND_TREE_KEY_DOWN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL }, +#define EVT_TREE_BEGIN_DRAG(id, fn) { wxEVT_COMMAND_TREE_BEGIN_DRAG, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, +#define EVT_TREE_BEGIN_RDRAG(id, fn) { wxEVT_COMMAND_TREE_BEGIN_RDRAG, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, +#define EVT_TREE_BEGIN_LABEL_EDIT(id, fn) { wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, +#define EVT_TREE_END_LABEL_EDIT(id, fn) { wxEVT_COMMAND_TREE_END_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, +#define EVT_TREE_DELETE_ITEM(id, fn) { wxEVT_COMMAND_TREE_DELETE_ITEM, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, +#define EVT_TREE_GET_INFO(id, fn) { wxEVT_COMMAND_TREE_GET_INFO, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, +#define EVT_TREE_SET_INFO(id, fn) { wxEVT_COMMAND_TREE_SET_INFO, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, +#define EVT_TREE_ITEM_EXPANDED(id, fn) { wxEVT_COMMAND_TREE_ITEM_EXPANDED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, +#define EVT_TREE_ITEM_EXPANDING(id, fn) { wxEVT_COMMAND_TREE_ITEM_EXPANDING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, +#define EVT_TREE_ITEM_COLLAPSED(id, fn) { wxEVT_COMMAND_TREE_ITEM_COLLAPSED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, +#define EVT_TREE_ITEM_COLLAPSING(id, fn) { wxEVT_COMMAND_TREE_ITEM_COLLAPSING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, +#define EVT_TREE_SEL_CHANGED(id, fn) { wxEVT_COMMAND_TREE_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, +#define EVT_TREE_SEL_CHANGING(id, fn) { wxEVT_COMMAND_TREE_SEL_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, +#define EVT_TREE_KEY_DOWN(id, fn) { wxEVT_COMMAND_TREE_KEY_DOWN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL }, //----------------------------------------------------------------------------- // wxGenericTreeItem //----------------------------------------------------------------------------- -class WXDLLEXPORT wxGenericTreeItem: public wxObject +class WXDLLEXPORT wxGenericTreeItem: public wxTreeItem { DECLARE_DYNAMIC_CLASS(wxGenericTreeItem) - - public: - long m_itemId; - long m_state; - wxString m_text; - int m_image; - int m_selectedImage; -// int m_children; - bool m_hasChildren; - long m_data; + public: + bool m_hasChildren, + m_isCollapsed; int m_x,m_y; int m_height,m_width; @@ -195,19 +219,19 @@ class WXDLLEXPORT wxGenericTreeItem: public wxObject wxList m_children; wxGenericTreeItem *m_parent; bool m_hasHilight; - - wxGenericTreeItem(void) {}; + + wxGenericTreeItem() {}; wxGenericTreeItem( wxGenericTreeItem *parent ); wxGenericTreeItem( wxGenericTreeItem *parent, const wxTreeItem& item, wxDC *dc ); void SetItem( const wxTreeItem &item, wxDC *dc ); void SetText( const wxString &text, wxDC *dc ); - void Reset(void); + void Reset(); void GetItem( wxTreeItem &item ) const; void AddChild( const wxTreeItem &item ); - bool HasChildren(void); - bool HasPlus(void); - int NumberOfVisibleDescendents(void); - int NumberOfVisibleChildren(void); + bool HasChildren(); + bool HasPlus(); + int NumberOfVisibleDescendents(); + int NumberOfVisibleChildren(); wxGenericTreeItem *FindItem( long itemId ) const; void AddChild( wxGenericTreeItem *child ); void SetCross( int x, int y ); @@ -218,8 +242,10 @@ class WXDLLEXPORT wxGenericTreeItem: public wxObject void SendSelected( wxWindow *target ); void SendDelete( wxWindow *target ); void SendExpand( wxWindow *target ); + void SendCollapse( wxWindow *target ); void SetHilight( bool set = TRUE ); - bool HasHilight(void); + bool HasHilight(); + bool IsExpanded() const { return !m_isCollapsed; } }; //----------------------------------------------------------------------------- @@ -228,72 +254,97 @@ class WXDLLEXPORT wxGenericTreeItem: public wxObject class wxTreeCtrl: public wxScrolledWindow { - DECLARE_DYNAMIC_CLASS(wxTreeCtrl) +public: + wxTreeCtrl(); + wxTreeCtrl(wxWindow *parent, const wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTR_HAS_BUTTONS, + const wxString& name = "wxTreeCtrl" ); + ~wxTreeCtrl(); + bool Create(wxWindow *parent, const wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTR_HAS_BUTTONS, + const wxString& name = "wxTreeCtrl"); + + int GetCount() const; + long InsertItem( long parent, const wxString& label, int image = -1, + int selImage = -1, long insertAfter = wxTREE_INSERT_LAST ); + long InsertItem( long parent, wxTreeItem &info, + long insertAfter = wxTREE_INSERT_LAST ); + void DeleteItem( long item ); + void DeleteChildren( long item ); + bool DeleteAllItems(); + bool ExpandItem(long item) { return ExpandItem(item, wxTREE_EXPAND_EXPAND); } + bool CollapseItem(long item) { return ExpandItem(item, wxTREE_EXPAND_COLLAPSE); } + bool ToggleItem(long item) { return ExpandItem(item, wxTREE_EXPAND_TOGGLE); } + bool ExpandItem( long item, int action ); + + // is the item expanded now? + bool IsItemExpanded(long item) + { + wxGenericTreeItem *pItem = FindItem(item); + return pItem && (pItem->GetState() & wxTREE_STATE_EXPANDED); + } + + bool GetItem( wxTreeItem &info ) const; + long GetItemData( long item ) const; + wxString GetItemText( long item ) const; + int GetItemImage(long item) const; + long GetParent( long item ) const; + long GetRootItem() const; + long GetChild(long item) const; + long GetNextItem(long item, int code) const; + long GetSelection() const; + bool SelectItem( long item ); + bool ItemHasChildren( long item ) const; + void SetIndent( int indent ); + int GetIndent() const; + bool SetItem( wxTreeItem &info ); + bool SetItemData( long item, long data ); + bool SetItemText( long item, const wxString &text ); + void SetItemImage(long item, int image, int imageSel) const; + long HitTest( const wxPoint& point, int &flags ); - public: - - wxTreeCtrl(void); - wxTreeCtrl(wxWindow *parent, const wxWindowID id = -1, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - const long style = wxTR_HAS_BUTTONS, - const wxString& name = "wxTreeCtrl" ); - ~wxTreeCtrl(void); - bool Create(wxWindow *parent, const wxWindowID id = -1, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - const long style = wxTR_HAS_BUTTONS, - const wxString& name = "wxTreeCtrl"); - - int GetCount(void) const; - long InsertItem( const long parent, const wxString& label, const int image = -1, - const int selImage = -1, const long insertAfter = wxTREE_INSERT_LAST ); - long InsertItem( const long parent, wxTreeItem &info, const long insertAfter = wxTREE_INSERT_LAST ); - bool DeleteAllItems(void); - bool ExpandItem( const long item, const int action ); - bool GetItem( wxTreeItem &info ) const; - long GetItemData( const long item ) const; - wxString GetItemText( const long item ) const; - long GetParent( const long item ) const; - long GetRootItem(void) const; - long GetSelection(void) const; - bool SelectItem( const long item ) const; - bool ItemHasChildren( const long item ) const; - void SetIndent( const int indent ); - int GetIndent(void) const; - bool SetItem( wxTreeItem &info ); - bool SetItemData( const long item, const long data ); - bool SetItemText( const long item, const wxString &text ); - long HitTest( const wxPoint& point, int &flags ); + int GetItemState(long item, long stateMask) const; + bool SetItemState(long item, long state, long stateMask); + + void AdjustMyScrollbars(); + void PaintLevel( wxGenericTreeItem *item, wxPaintDC &dc, int level, int &y ); + void OnPaint( const wxPaintEvent &event ); + void OnSetFocus( const wxFocusEvent &event ); + void OnKillFocus( const wxFocusEvent &event ); + void OnChar( wxKeyEvent &event ); + void OnMouse( const wxMouseEvent &event ); + + wxImageList *GetImageList(int which = wxIMAGE_LIST_NORMAL) const; + void SetImageList(wxImageList *imageList, int which = wxIMAGE_LIST_NORMAL); + +private: + // set the selection to the specified item generating appropriate event(s) + void SelectItem(wxGenericTreeItem *item); + + wxGenericTreeItem *m_anchor; + wxGenericTreeItem *m_current; + bool m_hasFocus; + int m_xScroll,m_yScroll; + int m_indent; + long m_lastId; + int m_lineHeight; + wxPen m_dottedPen; + bool m_isCreated; + wxBrush *m_hilightBrush; + wxImageList *m_imageList; + wxImageList *m_smallImageList; + + void CalculateLevel( wxGenericTreeItem *item, wxPaintDC &dc, int level, int &y ); + void CalculatePositions(); + wxGenericTreeItem *FindItem( long itemId ) const; + void RefreshLine( wxGenericTreeItem *item ); - void AdjustMyScrollbars(void); - void PaintLevel( wxGenericTreeItem *item, wxPaintDC &dc, int level, int &y ); - void OnPaint( const wxPaintEvent &event ); - void OnSetFocus( const wxFocusEvent &event ); - void OnKillFocus( const wxFocusEvent &event ); - void OnChar( wxKeyEvent &event ); - void OnMouse( const wxMouseEvent &event ); - - private: - - wxGenericTreeItem *m_anchor; - wxGenericTreeItem *m_current; - bool m_hasFocus; - int m_xScroll,m_yScroll; - int m_indent; - long m_lastId; - int m_lineHeight; - wxPen m_dottedPen; - bool m_isCreated; - wxPaintDC *m_dc; - wxBrush *m_hilightBrush; - - void CalculateLevel( wxGenericTreeItem *item, wxPaintDC &dc, int level, int &y ); - void CalculatePositions(void); - wxGenericTreeItem *FindItem( const long itemId ) const; - void RefreshLine( wxGenericTreeItem *item ); - DECLARE_EVENT_TABLE() + DECLARE_DYNAMIC_CLASS(wxTreeCtrl) }; #endif