]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/generic/treectrl.h
Fixed a small wxDialog thing
[wxWidgets.git] / include / wx / generic / treectrl.h
index 21ef2cc1f4b0d053f03c6c79ba4c72999f15cea0..8e9af202975f69432d9d9b4e0b119a9b8174bc1f 100644 (file)
@@ -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
 //-----------------------------------------------------------------------------
@@ -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