X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b143cf708ba5e419de4c3d0b03640eedb6b926d1..75d0223f8c11778290c417c9dd1c2d4c0e76f5ec:/samples/treectrl/treetest.cpp diff --git a/samples/treectrl/treetest.cpp b/samples/treectrl/treetest.cpp index 1028d79f66..70988cda7c 100644 --- a/samples/treectrl/treetest.cpp +++ b/samples/treectrl/treetest.cpp @@ -76,6 +76,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) MENU_LINK(SetBgColour) MENU_LINK(ResetStyle) + MENU_LINK(Highlight) MENU_LINK(Dump) #ifndef NO_MULTIPLE_SELECTION MENU_LINK(DumpSelected) @@ -456,6 +457,26 @@ void MyFrame::DoSort(bool reverse) m_treeCtrl->DoSortChildren(item, reverse); } +void MyFrame::OnHighlight(wxCommandEvent& WXUNUSED(event)) +{ + wxTreeItemId id = m_treeCtrl->GetSelection(); + + CHECK_ITEM( id ); + + wxRect r; + if ( !m_treeCtrl->GetBoundingRect(id, r, true /* text, not full row */) ) + { + wxLogMessage(_T("Failed to get bounding item rect")); + return; + } + + wxClientDC dc(m_treeCtrl); + dc.SetBrush(*wxRED); + dc.SetPen(*wxTRANSPARENT_PEN); + dc.DrawRectangle(r); + m_treeCtrl->Update(); +} + void MyFrame::OnDump(wxCommandEvent& WXUNUSED(event)) { wxTreeItemId root = m_treeCtrl->GetSelection(); @@ -1063,8 +1084,12 @@ void MyTreeCtrl::OnBeginDrag(wxTreeEvent& event) { m_draggedItem = event.GetItem(); - wxLogMessage(wxT("OnBeginDrag: started dragging %s"), - GetItemText(m_draggedItem).c_str()); + wxPoint clientpt = event.GetPoint(); + wxPoint screenpt = ClientToScreen(clientpt); + + wxLogMessage(wxT("OnBeginDrag: started dragging %s at screen coords (%i,%i)"), + GetItemText(m_draggedItem).c_str(), + screenpt.x, screenpt.y); event.Allow(); } @@ -1174,43 +1199,21 @@ void MyTreeCtrl::OnItemMenu(wxTreeEvent& event) wxTreeItemId itemId = event.GetItem(); MyTreeItemData *item = itemId.IsOk() ? (MyTreeItemData *)GetItemData(itemId) : NULL; + wxPoint clientpt = event.GetPoint(); + wxPoint screenpt = ClientToScreen(clientpt); - wxLogMessage(wxT("OnItemMenu for item \"%s\""), item ? item->GetDesc() - : _T("")); + wxLogMessage(wxT("OnItemMenu for item \"%s\" at screen coords (%i, %i)"), + item ? item->GetDesc() : _T(""), screenpt.x, screenpt.y); + ShowMenu(itemId, clientpt); event.Skip(); } void MyTreeCtrl::OnContextMenu(wxContextMenuEvent& event) { wxPoint pt = event.GetPosition(); - wxTreeItemId item; - if ( !HasFlag(wxTR_MULTIPLE) ) - 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 /* 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); + wxLogMessage(wxT("OnContextMenu at screen coords (%i, %i)"), pt.x, pt.y); } void MyTreeCtrl::ShowMenu(wxTreeItemId id, const wxPoint& pt) @@ -1228,6 +1231,8 @@ void MyTreeCtrl::ShowMenu(wxTreeItemId id, const wxPoint& pt) #if wxUSE_MENUS wxMenu menu(title); menu.Append(TreeTest_About, wxT("&About...")); + menu.AppendSeparator(); + menu.Append(TreeTest_Highlight, wxT("&Highlight item")); menu.Append(TreeTest_Dump, wxT("&Dump")); PopupMenu(&menu, pt);