// Modified by:
// Created: 04/01/98
// RCS-ID: $Id$
-// Copyright: (c) Julian Smart and Markus Holzem
+// Copyright: (c) Julian Smart
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
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
}
else
{
- images->Add(wxBitmap(icons[i].ConvertToImage().Rescale(size, size)));
+ images->Add(wxBitmap(wxBitmap(icons[i]).ConvertToImage().Rescale(size, size)));
}
}
// 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(); \
}
void LogKeyEvent(const wxChar *name, const wxKeyEvent& event)
{
wxString key;
- long keycode = event.KeyCode();
+ long keycode = event.GetKeyCode();
{
switch ( keycode )
{
if ( itemDst.IsOk() && !ItemHasChildren(itemDst) )
{
// copy to the parent then
- itemDst = GetParent(itemDst);
+ itemDst = GetItemParent(itemDst);
}
if ( !itemDst.IsOk() )
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(wxT("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)