1 /////////////////////////////////////////////////////////////////////////////
4 // Author: Denis Pershin
8 // Copyright: (c) Denis Pershin
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
13 #pragma implementation "treectrl.h"
16 // For compilers that support precompilation, includes "wx.h".
17 #include "wx/wxprec.h"
27 #include "wx/gtk/treectrl.h"
32 static void wxConvertToGtkTreeItem(wxTreeCtrl
*owner
, wxTreeItem
& info
, GtkTreeItem
**gtkItem
);
33 static void wxConvertFromGtkTreeItem(wxTreeItem
& info
, GtkTreeItem
*gtkItem
);
34 static void gtk_treectrl_count_callback (GtkWidget
*widget
, gpointer data
);
35 // static void gtk_treectrl_next_callback (GtkWidget *widget, gpointer data);
36 // static void gtk_treectrl_next_visible_callback (GtkWidget *widget, gpointer data);
37 // static void gtk_treectrl_next_selected_callback (GtkWidget *widget, gpointer data);
39 static void gtk_treeitem_expand_callback(GtkWidget
*WXUNUSED(widget
), wxTreeItem
*treeitem
);
40 static void gtk_treeitem_collapse_callback( GtkWidget
*WXUNUSED(widget
), wxTreeItem
*treeitem
);
41 static void gtk_treeitem_select_callback( GtkWidget
*WXUNUSED(widget
), wxTreeItem
*treeitem
);
43 static void gtk_treeitem_expand_callback(GtkWidget
*widget
, wxTreeItem
*treeitem
) {
44 wxTreeCtrl
*owner
= (wxTreeCtrl
*)gtk_object_get_data(GTK_OBJECT(widget
), "owner");
48 long id
= (long)gtk_object_get_data(GTK_OBJECT(widget
), "id");
49 owner
->SendExpanding(id
);
50 owner
->SendExpanded(id
);
53 static void gtk_treeitem_collapse_callback(GtkWidget
*widget
, wxTreeItem
*treeitem
) {
54 wxTreeCtrl
*owner
= (wxTreeCtrl
*)gtk_object_get_data(GTK_OBJECT(widget
), "owner");
58 long id
= (long)gtk_object_get_data(GTK_OBJECT(widget
), "id");
59 owner
->SendCollapsing(id
);
60 owner
->SendCollapsed(id
);
63 static void gtk_treeitem_select_callback(GtkWidget
*widget
, wxTreeItem
*treeitem
) {
64 wxTreeCtrl
*owner
= (wxTreeCtrl
*)gtk_object_get_data(GTK_OBJECT(widget
), "owner");
68 long id
= (long)gtk_object_get_data(GTK_OBJECT(widget
), "id");
69 owner
->SendSelChanging(id
);
70 owner
->SendSelChanged(id
);
73 #if !USE_SHARED_LIBRARY
74 IMPLEMENT_DYNAMIC_CLASS(wxTreeCtrl
, wxControl
)
75 IMPLEMENT_DYNAMIC_CLASS(wxTreeItem
, wxObject
)
79 wxTreeCtrl::wxTreeCtrl(void) {
80 m_imageListNormal
= NULL
;
81 m_imageListState
= NULL
;
86 bool wxTreeCtrl::Create(wxWindow
*parent
, wxWindowID id
, const wxPoint
& pos
, const wxSize
& size
,
87 long style
, const wxValidator
& validator
, const wxString
& name
)
89 m_imageListNormal
= NULL
;
90 m_imageListState
= NULL
;
99 m_windowStyle
= style
;
114 PreCreation( parent
, id
, pos
, size
, style
, name
);
116 m_widget
= gtk_scrolled_window_new(NULL
, NULL
);
117 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(m_widget
),
118 GTK_POLICY_AUTOMATIC
, GTK_POLICY_AUTOMATIC
);
120 m_tree
= GTK_TREE(gtk_tree_new());
122 gtk_container_add(GTK_CONTAINER(m_widget
), GTK_WIDGET(m_tree
));
123 gtk_widget_set_parent(GTK_WIDGET(m_tree
), m_widget
);
124 gtk_widget_show(GTK_WIDGET(m_tree
));
126 wxSystemSettings settings
;
127 SetBackgroundColour(settings
.GetSystemColour(wxSYS_COLOUR_WINDOW
));
128 SetForegroundColour(parent
->GetDefaultForegroundColour());
131 SetValidator(validator
);
135 gtk_widget_realize(GTK_WIDGET(m_tree
));
142 wxTreeCtrl::~wxTreeCtrl(void) {
148 static void gtk_treectrl_count_callback (GtkWidget
*widget
, gpointer data
) {
149 int count
= (*((int *)data
));
152 if (GTK_IS_CONTAINER(widget
))
153 gtk_container_foreach(GTK_CONTAINER(widget
), gtk_treectrl_count_callback
, data
);
156 int wxTreeCtrl::GetCount(void) const {
159 if (m_anchor
!= NULL
)
160 gtk_container_foreach(GTK_CONTAINER(m_anchor
), gtk_treectrl_count_callback
, &count
);
164 int wxTreeCtrl::GetIndent(void) const {
165 return m_tree
->indent_value
;
168 void wxTreeCtrl::SetIndent(int indent
) {
169 m_tree
->indent_value
= indent
;
172 wxImageList
*wxTreeCtrl::GetImageList(int which
) const {
173 if (which
== wxIMAGE_LIST_NORMAL
) {
174 return m_imageListNormal
;
177 if (which
== wxIMAGE_LIST_STATE
) {
178 return m_imageListState
;
183 void wxTreeCtrl::SetImageList(wxImageList
*imageList
, int which
) {
184 if (which
== wxIMAGE_LIST_NORMAL
)
185 m_imageListNormal
= imageList
;
187 if (which
== wxIMAGE_LIST_STATE
)
188 m_imageListState
= imageList
;
191 long wxTreeCtrl::GetNextItem(long item
, int code
) const {
193 case wxTREE_NEXT_CARET
:
194 // flag = TVGN_CARET;
196 case wxTREE_NEXT_CHILD
:
197 // flag = TVGN_CHILD;
199 case wxTREE_NEXT_DROPHILITE
:
200 // flag = TVGN_DROPHILITE;
202 case wxTREE_NEXT_FIRSTVISIBLE
:
203 // flag = TVGN_FIRSTVISIBLE;
205 case wxTREE_NEXT_NEXT
:
208 case wxTREE_NEXT_NEXTVISIBLE
:
209 // flag = TVGN_NEXTVISIBLE;
211 case wxTREE_NEXT_PARENT
:
212 // flag = TVGN_PARENT;
214 case wxTREE_NEXT_PREVIOUS
:
215 // flag = TVGN_PREVIOUS;
217 case wxTREE_NEXT_PREVIOUSVISIBLE
:
218 // flag = TVGN_PREVIOUSVISIBLE;
220 case wxTREE_NEXT_ROOT
:
227 // return (long) TreeView_GetNextItem( (HWND) GetHWND(), (HTREEITEM) item, flag);
231 bool wxTreeCtrl::ItemHasChildren(long item
) const {
235 p
= findGtkTreeItem(item
);
237 gtk_container_foreach(GTK_CONTAINER(p
), gtk_treectrl_count_callback
, &count
);
242 static GtkTreeItem
*findItem(GtkTreeItem
*p
, long id
) {
245 if (((long)gtk_object_get_data(GTK_OBJECT(p
), "id")) == id
)
248 if (p
->subtree
== NULL
)
251 GtkTree
*tree
= GTK_TREE(p
->subtree
);
253 GList
*list
= gtk_container_children(GTK_CONTAINER(tree
));
254 guint len
= g_list_length(list
);
256 for (guint i
=0; i
<len
;i
++) {
257 GList
*l
= g_list_nth(list
, i
);
258 if (!GTK_IS_TREE_ITEM(l
->data
))
260 q
= GTK_TREE_ITEM(l
->data
);
261 GtkTreeItem
*ret
= findItem(q
, id
);
269 GtkTreeItem
*wxTreeCtrl::findGtkTreeItem(long id
) const {
270 return findItem(m_anchor
, id
);
273 long wxTreeCtrl::GetChild(long item
) const {
275 GtkTreeItem
*next
= NULL
;
277 p
= findGtkTreeItem(item
);
278 GList
*list
= gtk_container_children(GTK_CONTAINER(p
));
279 next
= GTK_TREE_ITEM(list
->data
);;
282 return (long)gtk_object_get_data(GTK_OBJECT(next
), "id");
287 long wxTreeCtrl::GetParent(long item
) const {
290 p
= findGtkTreeItem(item
);
292 return (long)gtk_object_get_data(GTK_OBJECT(p
), "parent");
297 long wxTreeCtrl::GetFirstVisibleItem(void) const {
298 GtkTreeItem
*next
= NULL
;
300 GList
*list
= gtk_container_children(GTK_CONTAINER(m_anchor
));
301 next
= GTK_TREE_ITEM(list
->data
);;
302 // gtk_container_foreach(GTK_CONTAINER(m_anchor), gtk_treectrl_next_visible_callback, &next);
305 return (long)gtk_object_get_data(GTK_OBJECT(next
), "id");
310 long wxTreeCtrl::GetNextVisibleItem(long item
) const {
312 GtkTreeItem
*next
= NULL
;
314 p
= findGtkTreeItem(item
);
315 GList
*list
= gtk_container_children(GTK_CONTAINER(p
));
316 next
= GTK_TREE_ITEM(list
->data
);;
317 // gtk_container_foreach(GTK_CONTAINER(p), gtk_treectrl_next_visible_callback, &next);
320 return (long)gtk_object_get_data(GTK_OBJECT(next
), "id");
325 long wxTreeCtrl::GetSelection(void) const {
326 GtkTreeItem
*next
= NULL
;
328 GList
*list
= gtk_container_children(GTK_CONTAINER(m_anchor
));
329 next
= GTK_TREE_ITEM(list
->data
);;
330 // gtk_container_foreach(GTK_CONTAINER(m_anchor), gtk_treectrl_next_selected_callback, &next);
333 return (long)gtk_object_get_data(GTK_OBJECT(next
), "id");
338 long wxTreeCtrl::GetRootItem(void) const {
339 return (long)gtk_object_get_data(GTK_OBJECT(m_anchor
), "id");
342 bool wxTreeCtrl::GetItem(wxTreeItem
& info
) const {
345 p
= findGtkTreeItem(info
.m_itemId
);
348 wxLogSysError("TreeCtrl::GetItem failed");
352 wxConvertFromGtkTreeItem(info
, p
);
357 bool wxTreeCtrl::SetItem(wxTreeItem
& info
) {
360 p
= findGtkTreeItem(info
.m_itemId
);
363 wxLogSysError("TreeCtrl::SetItem failed");
367 wxConvertToGtkTreeItem(this, info
, &p
);
372 int wxTreeCtrl::GetItemState(long item
, long stateMask
) const {
375 info
.m_mask
= wxTREE_MASK_STATE
;
376 info
.m_stateMask
= stateMask
;
377 info
.m_itemId
= item
;
385 bool wxTreeCtrl::SetItemState(long item
, long state
, long stateMask
) {
388 info
.m_mask
= wxTREE_MASK_STATE
;
389 info
.m_state
= state
;
390 info
.m_stateMask
= stateMask
;
391 info
.m_itemId
= item
;
393 return SetItem(info
);
396 bool wxTreeCtrl::SetItemImage(long item
, int image
, int selImage
) {
399 info
.m_mask
= wxTREE_MASK_IMAGE
;
400 info
.m_image
= image
;
402 info
.m_selectedImage
= selImage
;
403 info
.m_mask
|= wxTREE_MASK_SELECTED_IMAGE
;
405 info
.m_itemId
= item
;
407 return SetItem(info
);
410 wxString
wxTreeCtrl::GetItemText(long item
) const {
413 info
.m_mask
= wxTREE_MASK_TEXT
;
414 info
.m_itemId
= item
;
421 void wxTreeCtrl::SetItemText(long item
, const wxString
& str
) {
424 info
.m_mask
= wxTREE_MASK_TEXT
;
425 info
.m_itemId
= item
;
431 long wxTreeCtrl::GetItemData(long item
) const {
434 info
.m_mask
= wxTREE_MASK_DATA
;
435 info
.m_itemId
= item
;
442 bool wxTreeCtrl::SetItemData(long item
, long data
) {
445 info
.m_mask
= wxTREE_MASK_DATA
;
446 info
.m_itemId
= item
;
449 return SetItem(info
);
452 bool wxTreeCtrl::GetItemRect(long item
, wxRectangle
& rect
, bool textOnly
) const {
456 *(HTREEITEM*)& rect2 = (HTREEITEM) item;
457 bool success = (::SendMessage((HWND) GetHWND(), TVM_GETITEMRECT, (WPARAM)textOnly,
458 (LPARAM)&rect2) != 0);
462 rect.width = rect2.right - rect2.left;
463 rect.height = rect2.bottom - rect2.left;
469 wxTextCtrl
* wxTreeCtrl::GetEditControl(void) const {
474 bool wxTreeCtrl::DeleteItem(long item
) {
477 p
= findGtkTreeItem(item
);
481 GtkTreeItem
*parent
= GTK_TREE_ITEM(GTK_WIDGET(p
)->parent
);
485 gtk_container_remove(GTK_CONTAINER(parent
), GTK_WIDGET(p
));
490 bool wxTreeCtrl::DeleteChildren(long item
) {
493 p
= findGtkTreeItem(item
);
497 gtk_tree_item_remove_subtree(GTK_TREE_ITEM(p
));
502 bool wxTreeCtrl::ExpandItem(long item
, int action
) {
505 p
= findGtkTreeItem(item
);
511 case wxTREE_EXPAND_EXPAND
:
512 gtk_tree_item_expand(GTK_TREE_ITEM(p
));
515 case wxTREE_EXPAND_COLLAPSE
:
516 gtk_tree_item_collapse(GTK_TREE_ITEM(p
));
519 case wxTREE_EXPAND_COLLAPSE_RESET
:
520 gtk_tree_item_collapse(GTK_TREE_ITEM(p
));
521 gtk_tree_item_remove_subtree(GTK_TREE_ITEM(p
));
524 case wxTREE_EXPAND_TOGGLE
:
526 gtk_tree_item_collapse(GTK_TREE_ITEM(p
));
528 gtk_tree_item_expand(GTK_TREE_ITEM(p
));
532 wxFAIL_MSG("unknown action in wxTreeCtrl::ExpandItem");
538 long wxTreeCtrl::InsertItem(long parent
, wxTreeItem
& info
, long insertAfter
) {
540 GtkTreeItem
*item
= NULL
;
542 info
.m_itemId
= m_curitemId
;
545 wxConvertToGtkTreeItem(this, info
, &item
);
548 p
= findGtkTreeItem(parent
);
549 if (p
->subtree
== NULL
) {
550 GtkTree
*tree
= GTK_TREE(gtk_tree_new());
551 gtk_tree_item_set_subtree(GTK_TREE_ITEM(p
), GTK_WIDGET(tree
));
552 gtk_widget_show(GTK_WIDGET(tree
));
556 gtk_container_add(GTK_CONTAINER(p
->subtree
), GTK_WIDGET(item
));
559 gtk_container_add(GTK_CONTAINER(m_tree
), GTK_WIDGET(item
));
562 if ((info
.m_mask
& wxTREE_MASK_CHILDREN
) != 0) {
563 GtkTree
*tree
= GTK_TREE(gtk_tree_new());
564 gtk_tree_item_set_subtree(GTK_TREE_ITEM(item
), GTK_WIDGET(tree
));
565 gtk_widget_show(GTK_WIDGET(tree
));
568 gtk_widget_show(GTK_WIDGET(item
));
570 gtk_signal_connect(GTK_OBJECT(item
), "select",
571 GTK_SIGNAL_FUNC(gtk_treeitem_select_callback
), (gpointer
)this );
573 gtk_signal_connect(GTK_OBJECT(item
), "deselect",
574 GTK_SIGNAL_FUNC(gtk_treeitem_select_callback
), (gpointer
)this );
576 gtk_signal_connect(GTK_OBJECT(item
), "expand",
577 GTK_SIGNAL_FUNC(gtk_treeitem_expand_callback
), (gpointer
)this );
578 gtk_signal_connect(GTK_OBJECT(item
), "collapse",
579 GTK_SIGNAL_FUNC(gtk_treeitem_collapse_callback
), (gpointer
)this );
581 return info
.m_itemId
;
584 long wxTreeCtrl::InsertItem(long parent
, const wxString
& label
, int image
,
585 int selImage
, long insertAfter
) {
589 info
.m_mask
= wxTREE_MASK_TEXT
;
591 info
.m_mask
|= wxTREE_MASK_IMAGE
| wxTREE_MASK_SELECTED_IMAGE
;
592 info
.m_image
= image
;
594 info
.m_selectedImage
= image
;
596 info
.m_selectedImage
= selImage
;
599 return InsertItem(parent
, info
, insertAfter
);
602 bool wxTreeCtrl::SelectItem(long item
) {
605 p
= findGtkTreeItem(item
);
609 gtk_tree_item_select(p
);
613 bool wxTreeCtrl::ScrollTo(long item
) {
614 return FALSE
; // Still unimplemented
617 bool wxTreeCtrl::DeleteAllItems(void) {
618 gtk_tree_item_remove_subtree(m_anchor
);
622 wxTextCtrl
* wxTreeCtrl::EditLabel(long item
, wxClassInfo
* textControlClass
) {
623 wxASSERT( (textControlClass
->IsKindOf(CLASSINFO(wxTextCtrl
))) );
626 HWND hWnd = (HWND) TreeView_EditLabel((HWND) GetHWND(), item);
630 m_textCtrl->UnsubclassWin();
631 m_textCtrl->SetHWND(0);
636 m_textCtrl = (wxTextCtrl*) textControlClass->CreateObject();
637 m_textCtrl->SetHWND((WXHWND) hWnd);
638 m_textCtrl->SubclassWin((WXHWND) hWnd);
644 // End label editing, optionally cancelling the edit
645 bool wxTreeCtrl::EndEditLabel(bool cancel
) {
647 bool success = (TreeView_EndEditLabelNow((HWND) GetHWND(), cancel) != 0);
651 m_textCtrl->UnsubclassWin();
652 m_textCtrl->SetHWND(0);
661 long wxTreeCtrl::HitTest(const wxPoint
& point
, int& flags
) {
663 TV_HITTESTINFO hitTestInfo;
664 hitTestInfo.pt.x = (int) point.x;
665 hitTestInfo.pt.y = (int) point.y;
667 TreeView_HitTest((HWND) GetHWND(), & hitTestInfo);
670 if ( hitTestInfo.flags & TVHT_ABOVE )
671 flags |= wxTREE_HITTEST_ABOVE;
672 if ( hitTestInfo.flags & TVHT_BELOW )
673 flags |= wxTREE_HITTEST_BELOW;
674 if ( hitTestInfo.flags & TVHT_NOWHERE )
675 flags |= wxTREE_HITTEST_NOWHERE;
676 if ( hitTestInfo.flags & TVHT_ONITEMBUTTON )
677 flags |= wxTREE_HITTEST_ONITEMBUTTON;
678 if ( hitTestInfo.flags & TVHT_ONITEMICON )
679 flags |= wxTREE_HITTEST_ONITEMICON;
680 if ( hitTestInfo.flags & TVHT_ONITEMINDENT )
681 flags |= wxTREE_HITTEST_ONITEMINDENT;
682 if ( hitTestInfo.flags & TVHT_ONITEMLABEL )
683 flags |= wxTREE_HITTEST_ONITEMLABEL;
684 if ( hitTestInfo.flags & TVHT_ONITEMRIGHT )
685 flags |= wxTREE_HITTEST_ONITEMRIGHT;
686 if ( hitTestInfo.flags & TVHT_ONITEMSTATEICON )
687 flags |= wxTREE_HITTEST_ONITEMSTATEICON;
688 if ( hitTestInfo.flags & TVHT_TOLEFT )
689 flags |= wxTREE_HITTEST_TOLEFT;
690 if ( hitTestInfo.flags & TVHT_TORIGHT )
691 flags |= wxTREE_HITTEST_TORIGHT;
693 return (long) hitTestInfo.hItem ;
699 wxImageList *wxTreeCtrl::CreateDragImage(long item)
704 bool wxTreeCtrl::SortChildren(long item
) {
705 return FALSE
; // Still unimplemented
708 bool wxTreeCtrl::EnsureVisible(long item
) {
709 return FALSE
; // Still unimplemented
712 void wxTreeCtrl::SendExpanding(long item
) {
713 wxTreeEvent
event(wxEVT_COMMAND_TREE_ITEM_EXPANDING
, GetId());
714 event
.SetEventObject(this);
718 void wxTreeCtrl::SendExpanded(long item
) {
719 wxTreeEvent
event(wxEVT_COMMAND_TREE_ITEM_EXPANDED
, GetId());
720 event
.SetEventObject(this);
724 void wxTreeCtrl::SendCollapsing(long item
) {
725 wxTreeEvent
event(wxEVT_COMMAND_TREE_ITEM_COLLAPSING
, GetId());
726 event
.SetEventObject(this);
730 void wxTreeCtrl::SendCollapsed(long item
) {
731 wxTreeEvent
event(wxEVT_COMMAND_TREE_ITEM_COLLAPSED
, GetId());
732 event
.SetEventObject(this);
736 void wxTreeCtrl::SendSelChanging(long item
) {
737 wxTreeEvent
event(wxEVT_COMMAND_TREE_SEL_CHANGED
, GetId());
738 event
.SetEventObject(this);
742 void wxTreeCtrl::SendSelChanged(long item
) {
743 wxTreeEvent
event(wxEVT_COMMAND_TREE_SEL_CHANGING
, GetId());
744 event
.SetEventObject(this);
748 // Tree item structure
749 wxTreeItem::wxTreeItem(void) {
755 m_selectedImage
= -1;
760 // If getFullInfo is TRUE, we explicitly query for more info if we haven't got it all.
762 static void wxConvertFromGtkTreeItem(wxTreeItem
& info
, GtkTreeItem
*gtkItem
) {
766 info
.m_data
= (long)gtk_object_get_data(GTK_OBJECT(gtkItem
), "data");
767 info
.m_itemId
= (long)gtk_object_get_data(GTK_OBJECT(gtkItem
), "id");
768 info
.m_image
= (int)gtk_object_get_data(GTK_OBJECT(gtkItem
), "image");
769 info
.m_selectedImage
= (int)gtk_object_get_data(GTK_OBJECT(gtkItem
), "selectedImage");
773 info
.m_stateMask
= 0;
774 l
= GTK_LABEL(gtk_object_get_data(GTK_OBJECT(gtkItem
), "label"));
775 gtk_label_get(l
, &t
);
779 static void wxConvertToGtkTreeItem(wxTreeCtrl
*owner
, wxTreeItem
& info
, GtkTreeItem
**gtkItem
) {
780 GtkTreeItem
*item
= (*gtkItem
);
783 item
= GTK_TREE_ITEM(gtk_tree_item_new());
785 GtkHBox
*m_box
= GTK_HBOX(gtk_hbox_new(FALSE
, 0));
786 gtk_container_add (GTK_CONTAINER (item
), GTK_WIDGET(m_box
));
788 gtk_object_set_data(GTK_OBJECT(item
), "box", m_box
);
791 const wxImageList
*list
;
793 if ((list
= owner
->GetImageList(wxIMAGE_LIST_NORMAL
)) != NULL
)
794 if ((bmp
= list
->GetBitmap(info
.m_image
)) != NULL
)
796 GdkBitmap
*mask
= NULL
;
798 mask
= bmp
->GetMask()->GetBitmap();
799 GtkPixmap
*m_image_widget
= GTK_PIXMAP(gtk_pixmap_new(bmp
->GetPixmap(), mask
));
800 gtk_misc_set_alignment (GTK_MISC (m_image_widget
), 0.0, 0.5);
801 gtk_box_pack_start(GTK_BOX(m_box
), GTK_WIDGET(m_image_widget
), FALSE
, FALSE
, 0);
802 gtk_object_set_data(GTK_OBJECT(item
), "image", m_image_widget
);
803 gtk_widget_show (GTK_WIDGET(m_image_widget
));
806 GtkLabel
*m_label_widget
= GTK_LABEL(gtk_label_new ((char *)(const char *)info
.m_text
));
807 gtk_misc_set_alignment (GTK_MISC (m_label_widget
), 0.5, 0.5);
809 gtk_box_pack_start(GTK_BOX(m_box
), GTK_WIDGET(m_label_widget
), FALSE
, FALSE
, 0);
810 gtk_object_set_data(GTK_OBJECT(item
), "label", m_label_widget
);
812 gtk_widget_show (GTK_WIDGET(m_label_widget
));
814 gtk_widget_show(GTK_WIDGET(m_box
));
815 gtk_object_set_data(GTK_OBJECT(item
), "id", (gpointer
)info
.m_itemId
);
816 printf("owner = %p\n", owner
);
817 gtk_object_set_data(GTK_OBJECT(item
), "owner", owner
);
823 IMPLEMENT_DYNAMIC_CLASS(wxTreeEvent
, wxCommandEvent
)
825 wxTreeEvent::wxTreeEvent(wxEventType commandType
, int id
):
826 wxCommandEvent(commandType
, id
) {