1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/mac/carbon/treectrl.cpp
3 // Purpose: wxTreeCtrl. See also Robert's generic wxTreeCtrl.
4 // Author: Stefan Csomor
8 // Copyright: (c) Stefan Csomor
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #include "wx/wxprec.h"
14 #include "wx/stubs/textctrl.h"
15 #include "wx/treebase.h"
16 #include "wx/stubs/treectrl.h"
19 IMPLEMENT_DYNAMIC_CLASS(wxTreeCtrl
, wxControl
)
20 IMPLEMENT_DYNAMIC_CLASS(wxTreeItem
, wxObject
)
23 wxTreeCtrl::wxTreeCtrl()
25 m_imageListNormal
= NULL
;
26 m_imageListState
= NULL
;
30 bool wxTreeCtrl::Create(wxWindow
*parent
,
31 wxWindowID id
, const wxPoint
& pos
, const wxSize
& size
,
32 long style
, const wxValidator
& validator
, const wxString
& name
)
34 m_imageListNormal
= NULL
;
35 m_imageListState
= NULL
;
39 SetValidator(validator
);
42 m_windowStyle
= style
;
44 m_windowId
= (id
== wxID_ANY
) ? NewControlId() : id
;
47 parent
->AddChild(this);
49 // TODO: create tree control
54 wxTreeCtrl::~wxTreeCtrl()
60 size_t wxTreeCtrl::GetCount() const
66 int wxTreeCtrl::GetIndent() const
72 void wxTreeCtrl::SetIndent(int indent
)
77 wxImageList
*wxTreeCtrl::GetImageList(int which
) const
79 if ( which
== wxIMAGE_LIST_NORMAL
)
80 return m_imageListNormal
;
81 else if ( which
== wxIMAGE_LIST_STATE
)
82 return m_imageListState
;
87 void wxTreeCtrl::SetImageList(wxImageList
*imageList
, int which
)
89 if ( which
== wxIMAGE_LIST_NORMAL
)
90 m_imageListNormal
= imageList
;
91 else if ( which
== wxIMAGE_LIST_STATE
)
92 m_imageListState
= imageList
;
97 long wxTreeCtrl::GetNextItem(long item
, int code
) const
103 bool wxTreeCtrl::ItemHasChildren(long item
) const
109 long wxTreeCtrl::GetChild(long item
) const
115 long wxTreeCtrl::GetItemParent(long item
) const
121 long wxTreeCtrl::GetFirstVisibleItem() const
127 long wxTreeCtrl::GetNextVisibleItem(long item
) const
133 long wxTreeCtrl::GetSelection() const
139 long wxTreeCtrl::GetRootItem() const
145 bool wxTreeCtrl::GetItem(wxTreeItem
& info
) const
151 bool wxTreeCtrl::SetItem(wxTreeItem
& info
)
157 int wxTreeCtrl::GetItemState(long item
, long stateMask
) const
161 info
.m_mask
= wxTREE_MASK_STATE
;
162 info
.m_stateMask
= stateMask
;
163 info
.m_itemId
= item
;
171 bool wxTreeCtrl::SetItemState(long item
, long state
, long stateMask
)
175 info
.m_mask
= wxTREE_MASK_STATE
;
176 info
.m_state
= state
;
177 info
.m_stateMask
= stateMask
;
178 info
.m_itemId
= item
;
180 return SetItem(info
);
183 bool wxTreeCtrl::SetItemImage(long item
, int image
, int selImage
)
187 info
.m_mask
= wxTREE_MASK_IMAGE
;
188 info
.m_image
= image
;
191 info
.m_selectedImage
= selImage
;
192 info
.m_mask
|= wxTREE_MASK_SELECTED_IMAGE
;
195 info
.m_itemId
= item
;
197 return SetItem(info
);
200 wxString
wxTreeCtrl::GetItemText(long item
) const
204 info
.m_mask
= wxTREE_MASK_TEXT
;
205 info
.m_itemId
= item
;
208 return wxEmptyString
;
213 void wxTreeCtrl::SetItemText(long item
, const wxString
& str
)
217 info
.m_mask
= wxTREE_MASK_TEXT
;
218 info
.m_itemId
= item
;
224 long wxTreeCtrl::GetItemData(long item
) const
228 info
.m_mask
= wxTREE_MASK_DATA
;
229 info
.m_itemId
= item
;
237 bool wxTreeCtrl::SetItemData(long item
, long data
)
241 info
.m_mask
= wxTREE_MASK_DATA
;
242 info
.m_itemId
= item
;
245 return SetItem(info
);
248 bool wxTreeCtrl::GetItemRect(long item
, wxRect
& rect
, bool textOnly
) const
254 wxTextCtrl
* wxTreeCtrl::GetEditControl() const
260 bool wxTreeCtrl::DeleteItem(long item
)
266 bool wxTreeCtrl::ExpandItem(long item
, int action
)
271 case wxTREE_EXPAND_EXPAND
:
274 case wxTREE_EXPAND_COLLAPSE
:
277 case wxTREE_EXPAND_COLLAPSE_RESET
:
280 case wxTREE_EXPAND_TOGGLE
:
284 wxFAIL_MSG(wxT("unknown action in wxTreeCtrl::ExpandItem");
290 // May not send messages, so emulate them
293 wxTreeEvent
event(wxEVT_NULL
, m_windowId
);
294 event
.m_item
.m_itemId
= item
;
295 event
.m_item
.m_mask
= event
.m_item
.m_stateMask
= 0xFFFF; // get all
296 GetItem(event
.m_item
);
298 bool bIsExpanded
= (event
.m_item
.m_state
& wxTREE_STATE_EXPANDED
) != 0;
300 event
.m_code
= action
;
301 event
.SetEventObject(this);
303 // @@@ return values of {EXPAND|COLLAPS}ING event handler is discarded
306 ? wxEVT_COMMAND_TREE_ITEM_EXPANDING
307 : wxEVT_COMMAND_TREE_ITEM_COLLAPSING
);
308 GetEventHandler()->ProcessEvent(event
);
312 ? wxEVT_COMMAND_TREE_ITEM_EXPANDED
313 : wxEVT_COMMAND_TREE_ITEM_COLLAPSED
);
314 GetEventHandler()->ProcessEvent(event
);
320 long wxTreeCtrl::InsertItem(long parent
, wxTreeItem
& info
, long insertAfter
)
326 long wxTreeCtrl::InsertItem(long parent
, const wxString
& label
,
327 int image
, int selImage
, long insertAfter
)
331 info
.m_mask
= wxTREE_MASK_TEXT
;
334 info
.m_mask
|= wxTREE_MASK_IMAGE
| wxTREE_MASK_SELECTED_IMAGE
;
335 info
.m_image
= image
;
336 if ( selImage
== -1 )
337 info
.m_selectedImage
= image
;
339 info
.m_selectedImage
= selImage
;
342 return InsertItem(parent
, info
, insertAfter
);
345 bool wxTreeCtrl::SelectItem(long item
)
351 bool wxTreeCtrl::ScrollTo(long item
)
357 bool wxTreeCtrl::DeleteAllItems()
363 wxTextCtrl
* wxTreeCtrl::EditLabel(long item
, wxClassInfo
* textControlClass
)
369 // End label editing, optionally cancelling the edit
370 bool wxTreeCtrl::EndEditLabel(bool cancel
)
376 long wxTreeCtrl::HitTest(const wxPoint
& point
, int& flags
)
382 bool wxTreeCtrl::SortChildren(long item
)
388 bool wxTreeCtrl::EnsureVisible(long item
)
394 // Tree item structure
395 wxTreeItem::wxTreeItem()
402 m_selectedImage
= -1;
408 IMPLEMENT_DYNAMIC_CLASS(wxTreeEvent
, wxCommandEvent
)
410 wxTreeEvent::wxTreeEvent(wxEventType commandType
, int id
)
411 : wxCommandEvent(commandType
, id
)