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)
CHECK_ITEM( root );
- m_treeCtrl->GetItemsRecursively(root, -1);
+ m_treeCtrl->GetItemsRecursively(root);
}
#ifndef NO_MULTIPLE_SELECTION
// set some colours/fonts for testing
SetItemFont(rootId, *wxITALIC_FONT);
- long cookie;
+ wxTreeItemIdValue cookie;
wxTreeItemId id = GetFirstChild(rootId, cookie);
SetItemTextColour(id, *wxBLUE);
SetItemBackgroundColour(id, *wxLIGHT_GREY);
}
-void MyTreeCtrl::GetItemsRecursively(const wxTreeItemId& idParent, long cookie)
+void MyTreeCtrl::GetItemsRecursively(const wxTreeItemId& idParent,
+ wxTreeItemIdValue cookie)
{
wxTreeItemId id;
- if( cookie == -1 )
+ if ( !cookie )
id = GetFirstChild(idParent, cookie);
else
id = GetNextChild(idParent, cookie);
- if(id <= 0)
+ if ( !id.IsOk() )
return;
wxString text = GetItemText(id);
wxLogMessage(text);
if (ItemHasChildren(id))
- GetItemsRecursively(id,-1);
+ GetItemsRecursively(id);
GetItemsRecursively(idParent, cookie);
}
void MyTreeCtrl::name(wxTreeEvent& event) \
{ \
wxLogMessage(wxT(#name)); \
+ SetLastItem(wxTreeItemId()); \
event.Skip(); \
}
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)