X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/998cee67927f551bbb1d79152b13c6df4ea3859b..0edfdd963bdc9cfeb54d403ed77b5f36e4de8c84:/samples/treectrl/treetest.cpp diff --git a/samples/treectrl/treetest.cpp b/samples/treectrl/treetest.cpp index 722f5f4bdf..31666e9df6 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(); @@ -477,7 +498,7 @@ void MyFrame::OnDumpSelected(wxCommandEvent& WXUNUSED(event)) wxArrayTreeItemIds array; size_t count = m_treeCtrl->GetSelections(array); - wxLogMessage(wxT("%u items selected"), count); + wxLogMessage(wxT("%u items selected"), unsigned(count)); for ( size_t n = 0; n < count; n++ ) { @@ -790,9 +811,9 @@ void MyTreeCtrl::AddItemsRecursively(const wxTreeItemId& idParent, { // at depth 1 elements won't have any more children if ( hasChildren ) - str.Printf(wxT("%s child %d"), wxT("Folder"), n + 1); + str.Printf(wxT("%s child %u"), wxT("Folder"), unsigned(n + 1)); else - str.Printf(wxT("%s child %d.%d"), wxT("File"), folder, n + 1); + str.Printf(wxT("%s child %u.%u"), wxT("File"), unsigned(folder), unsigned(n + 1)); // here we pass to AppendItem() normal and selected item images (we // suppose that selected image follows the normal one in the enum) @@ -890,12 +911,22 @@ void MyTreeCtrl::DoToggleIcon(const wxTreeItemId& item) SetItemImage(item, image, wxTreeItemIcon_Selected); } +void MyTreeCtrl::LogEvent(const wxChar *name, const wxTreeEvent& event) +{ + wxTreeItemId item = event.GetItem(); + wxString text; + if ( item.IsOk() ) + text << _T('"') << GetItemText(item).c_str() << _T('"'); + else + text = _T("invalid item"); + wxLogMessage(wxT("%s(%s)"), name, text.c_str()); +} // avoid repetition #define TREE_EVENT_HANDLER(name) \ void MyTreeCtrl::name(wxTreeEvent& event) \ { \ - wxLogMessage(wxT(#name)); \ + LogEvent(_T(#name), event); \ SetLastItem(wxTreeItemId()); \ event.Skip(); \ } @@ -1175,13 +1206,14 @@ 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) { + if ( !HasFlag(wxTR_MULTIPLE) ) + item = GetSelection(); + // attempt to guess where to show the menu if ( item.IsOk() ) { @@ -1198,6 +1230,7 @@ void MyTreeCtrl::OnContextMenu(wxContextMenuEvent& event) else // event was generated by mouse, use supplied coords { pt = ScreenToClient(pt); + item = HitTest(pt); } ShowMenu(item, pt); @@ -1218,6 +1251,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); @@ -1278,6 +1313,6 @@ void MyTreeItemData::ShowInfo(wxTreeCtrl *tree) Bool2String(tree->IsSelected(GetId())), Bool2String(tree->IsExpanded(GetId())), Bool2String(tree->IsBold(GetId())), - tree->GetChildrenCount(GetId()), - tree->GetChildrenCount(GetId(), false)); + unsigned(tree->GetChildrenCount(GetId())), + unsigned(tree->GetChildrenCount(GetId(), false))); }