From ae8c4b33a3272fba39c405542141e7c486b75136 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 10 Jul 2003 12:46:48 +0000 Subject: [PATCH] added state image support (patch 530155) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21864 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/treebase.h | 4 ++++ samples/treectrl/treetest.cpp | 33 +++++++++++++++++++++++++++++---- samples/treectrl/treetest.h | 2 +- src/common/treebase.cpp | 1 + 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/include/wx/treebase.h b/include/wx/treebase.h index fb1734ba78..e0d73998cd 100644 --- a/include/wx/treebase.h +++ b/include/wx/treebase.h @@ -294,6 +294,7 @@ BEGIN_DECLARE_EVENT_TYPES() DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK, 615) DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK, 616) DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_END_DRAG, 617) + DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_STATE_IMAGE_CLICK, 618) END_DECLARE_EVENT_TYPES() // GetItem() returns the item being dragged, GetPoint() the mouse coords @@ -346,6 +347,9 @@ END_DECLARE_EVENT_TYPES() #define EVT_TREE_ITEM_RIGHT_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL ), #define EVT_TREE_ITEM_MIDDLE_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL ), +// GetItem() returns the item whose state image was clicked on +#define EVT_TREE_STATE_IMAGE_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TREE_STATE_IMAGE_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, NULL ), + #endif // wxUSE_TREECTRL #endif // _WX_TREEBASE_H_ diff --git a/samples/treectrl/treetest.cpp b/samples/treectrl/treetest.cpp index 351c59f045..a485998fb4 100644 --- a/samples/treectrl/treetest.cpp +++ b/samples/treectrl/treetest.cpp @@ -131,9 +131,9 @@ BEGIN_EVENT_TABLE(MyTreeCtrl, wxTreeCtrl) EVT_TREE_ITEM_EXPANDING(TreeTest_Ctrl, MyTreeCtrl::OnItemExpanding) EVT_TREE_ITEM_COLLAPSED(TreeTest_Ctrl, MyTreeCtrl::OnItemCollapsed) EVT_TREE_ITEM_COLLAPSING(TreeTest_Ctrl, MyTreeCtrl::OnItemCollapsing) - EVT_TREE_ITEM_RIGHT_CLICK(TreeTest_Ctrl, MyTreeCtrl::OnItemRightClick) + //EVT_TREE_ITEM_RIGHT_CLICK(TreeTest_Ctrl, MyTreeCtrl::OnItemRightClick) - EVT_RIGHT_UP(MyTreeCtrl::OnRMouseUp) + EVT_CONTEXT_MENU(MyTreeCtrl::OnContextMenu) EVT_TREE_SEL_CHANGED(TreeTest_Ctrl, MyTreeCtrl::OnSelChanged) EVT_TREE_SEL_CHANGING(TreeTest_Ctrl, MyTreeCtrl::OnSelChanging) EVT_TREE_KEY_DOWN(TreeTest_Ctrl, MyTreeCtrl::OnTreeKeyDown) @@ -1102,10 +1102,35 @@ void MyTreeCtrl::OnItemRightClick(wxTreeEvent& event) ShowMenu(event.GetItem(), event.GetPoint()); } -void MyTreeCtrl::OnRMouseUp(wxMouseEvent& event) +void MyTreeCtrl::OnContextMenu(wxContextMenuEvent& event) { wxPoint pt = event.GetPosition(); - ShowMenu(HitTest(pt), pt); + wxTreeItemId item = GetSelection(); + wxLogMessage("OnContextMenu at screen coords (%i, %i)", pt.x, pt.y); + + //check if event was generated by keyboard (MSW-specific?) + if (pt.x==-1 && pt.y==-1) //(this is how MSW indicates it) + { + //attempt to guess where to show the menu + if (item.IsOk()) + { + //if an item was clicked, show menu to the right of it + wxRect rect; + GetBoundingRect(item, rect, true); //true = only the label + pt = wxPoint(rect.GetRight(), rect.GetTop()); + } + else + { + pt = wxPoint(0, 0); + } + } + else + { + //event was generated by mouse, use supplied coords + pt = ScreenToClient(pt); + } + + ShowMenu(item, pt); } void MyTreeCtrl::ShowMenu(wxTreeItemId id, const wxPoint& pt) diff --git a/samples/treectrl/treetest.h b/samples/treectrl/treetest.h index 39aa38955a..78d1a73fe4 100644 --- a/samples/treectrl/treetest.h +++ b/samples/treectrl/treetest.h @@ -73,7 +73,7 @@ public: void OnBeginLabelEdit(wxTreeEvent& event); void OnEndLabelEdit(wxTreeEvent& event); void OnDeleteItem(wxTreeEvent& event); - void OnRMouseUp(wxMouseEvent& event); + void OnContextMenu(wxContextMenuEvent& event); void OnGetInfo(wxTreeEvent& event); void OnTreeRMouseClick(wxTreeEvent& event); void OnItemRightClick(wxTreeEvent& event); diff --git a/src/common/treebase.cpp b/src/common/treebase.cpp index 656da196ac..73bd16e5fb 100644 --- a/src/common/treebase.cpp +++ b/src/common/treebase.cpp @@ -61,6 +61,7 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_TREE_ITEM_ACTIVATED) DEFINE_EVENT_TYPE(wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK) DEFINE_EVENT_TYPE(wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK) DEFINE_EVENT_TYPE(wxEVT_COMMAND_TREE_END_DRAG) +DEFINE_EVENT_TYPE(wxEVT_COMMAND_TREE_STATE_IMAGE_CLICK) // ---------------------------------------------------------------------------- // Tree event -- 2.45.2