X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8dda7c0c48b4896d8ecaa6cd675394b4e40eb0c0..f20a2e1f4066e4f0235698e6220f1eed91c73326:/samples/treectrl/treetest.cpp diff --git a/samples/treectrl/treetest.cpp b/samples/treectrl/treetest.cpp index 8731c60346..4d60c4be87 100644 --- a/samples/treectrl/treetest.cpp +++ b/samples/treectrl/treetest.cpp @@ -27,6 +27,7 @@ #endif #include "wx/colordlg.h" +#include "wx/numdlg.h" #include "wx/image.h" #include "wx/imaglist.h" @@ -46,7 +47,10 @@ #include "icon3.xpm" #include "icon4.xpm" #include "icon5.xpm" + +#if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) #include "mondrian.xpm" +#endif // verify that the item is ok and insult the user if it is not @@ -61,6 +65,7 @@ #define MENU_LINK(name) EVT_MENU(TreeTest_##name, MyFrame::On##name) BEGIN_EVENT_TABLE(MyFrame, wxFrame) + EVT_IDLE(MyFrame::OnIdle) EVT_SIZE(MyFrame::OnSize) MENU_LINK(Quit) @@ -108,6 +113,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) MENU_LINK(IncSpacing) MENU_LINK(DecSpacing) MENU_LINK(ToggleIcon) + MENU_LINK(SelectRoot) #undef MENU_LINK END_EVENT_TABLE() @@ -131,9 +137,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) @@ -209,6 +215,7 @@ MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h) tree_menu->Append(TreeTest_Delete, wxT("&Delete this item")); tree_menu->Append(TreeTest_DeleteChildren, wxT("Delete &children")); tree_menu->Append(TreeTest_DeleteAll, wxT("Delete &all items")); + tree_menu->Append(TreeTest_SelectRoot, wxT("Select root item")); tree_menu->AppendSeparator(); tree_menu->Append(TreeTest_Count, wxT("Count children of current item")); tree_menu->Append(TreeTest_CountRec, wxT("Recursively count children of current item")); @@ -257,9 +264,10 @@ MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h) menu_bar->Check(TreeTest_ToggleImages, TRUE); - // create a status bar with 3 panes - CreateStatusBar(3); - SetStatusText(wxT(""), 0); +#if wxUSE_STATUSBAR + // create a status bar + CreateStatusBar(2); +#endif // wxUSE_STATUSBAR #ifdef __WXMOTIF__ // For some reason, we get a memcpy crash in wxLogStream::DoLogStream @@ -324,6 +332,26 @@ void MyFrame::TogStyle(int id, long flag) GetMenuBar()->Check(id, (style & flag) != 0); } +void MyFrame::OnIdle(wxIdleEvent& event) +{ +#if wxUSE_STATUSBAR + if ( m_treeCtrl ) + { + wxTreeItemId idRoot = m_treeCtrl->GetRootItem(); + + SetStatusText(wxString::Format + ( + _T("Root/last item is %svisible/%svisible"), + m_treeCtrl->IsVisible(idRoot) ? _T("") : _T("not "), + m_treeCtrl->IsVisible(m_treeCtrl->GetLastChild(idRoot)) + ? _T("") : _T("not ") + ), 1); + } +#endif // wxUSE_STATUSBAR + + event.Skip(); +} + void MyFrame::OnSize(wxSizeEvent& event) { if ( m_treeCtrl && m_textCtrl ) @@ -412,7 +440,7 @@ void MyFrame::OnDump(wxCommandEvent& WXUNUSED(event)) CHECK_ITEM( root ); - m_treeCtrl->GetItemsRecursively(root, -1); + m_treeCtrl->GetItemsRecursively(root); } #ifndef NO_MULTIPLE_SELECTION @@ -435,12 +463,17 @@ void MyFrame::OnDumpSelected(wxCommandEvent& WXUNUSED(event)) } } -void MyFrame::OnSelect(wxCommandEvent& event) +void MyFrame::OnSelect(wxCommandEvent& WXUNUSED(event)) { m_treeCtrl->SelectItem(m_treeCtrl->GetSelection()); } -void MyFrame::OnUnselect(wxCommandEvent& event) +void MyFrame::OnSelectRoot(wxCommandEvent& WXUNUSED(event)) +{ + m_treeCtrl->SelectItem(m_treeCtrl->GetRootItem()); +} + +void MyFrame::OnUnselect(wxCommandEvent& WXUNUSED(event)) { m_treeCtrl->UnselectAll(); } @@ -485,7 +518,7 @@ void MyFrame::OnRecreate(wxCommandEvent& event) m_treeCtrl->AddTestItemsToTree(5, 2); } -void MyFrame::OnSetImageSize(wxCommandEvent& event) +void MyFrame::OnSetImageSize(wxCommandEvent& WXUNUSED(event)) { int size = wxGetNumberFromUser(wxT("Enter the size for the images to use"), wxT("Size: "), @@ -498,7 +531,7 @@ void MyFrame::OnSetImageSize(wxCommandEvent& event) wxGetApp().SetShowImages(TRUE); } -void MyFrame::OnToggleImages(wxCommandEvent& event) +void MyFrame::OnToggleImages(wxCommandEvent& WXUNUSED(event)) { if ( wxGetApp().ShowImages() ) { @@ -512,7 +545,7 @@ void MyFrame::OnToggleImages(wxCommandEvent& event) } } -void MyFrame::OnToggleButtons(wxCommandEvent& event) +void MyFrame::OnToggleButtons(wxCommandEvent& WXUNUSED(event)) { #if USE_GENERIC_TREECTRL || !defined(__WXMSW__) if ( wxGetApp().ShowButtons() ) @@ -528,12 +561,12 @@ void MyFrame::OnToggleButtons(wxCommandEvent& event) #endif } -void MyFrame::OnCollapseAndReset(wxCommandEvent& event) +void MyFrame::OnCollapseAndReset(wxCommandEvent& WXUNUSED(event)) { m_treeCtrl->CollapseAndReset(m_treeCtrl->GetRootItem()); } -void MyFrame::OnEnsureVisible(wxCommandEvent& event) +void MyFrame::OnEnsureVisible(wxCommandEvent& WXUNUSED(event)) { m_treeCtrl->DoEnsureVisible(); } @@ -667,9 +700,9 @@ void MyTreeCtrl::CreateImageList(int size) AssignImageList(images); } +#if USE_GENERIC_TREECTRL || !defined(__WXMSW__) void MyTreeCtrl::CreateButtonsImageList(int size) { -#if USE_GENERIC_TREECTRL || !defined(__WXMSW__) if ( size == -1 ) { SetButtonsImageList(NULL); @@ -701,6 +734,9 @@ void MyTreeCtrl::CreateButtonsImageList(int size) } AssignButtonsImageList(images); +#else +void MyTreeCtrl::CreateButtonsImageList(int WXUNUSED(size)) +{ #endif } @@ -791,7 +827,7 @@ void MyTreeCtrl::AddTestItemsToTree(size_t numChildren, // set some colours/fonts for testing SetItemFont(rootId, *wxITALIC_FONT); - long cookie; + wxTreeItemIdValue cookie; wxTreeItemId id = GetFirstChild(rootId, cookie); SetItemTextColour(id, *wxBLUE); @@ -801,23 +837,24 @@ void MyTreeCtrl::AddTestItemsToTree(size_t numChildren, 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); } @@ -836,6 +873,7 @@ void MyTreeCtrl::DoToggleIcon(const wxTreeItemId& item) void MyTreeCtrl::name(wxTreeEvent& event) \ { \ wxLogMessage(wxT(#name)); \ + SetLastItem(wxTreeItemId()); \ event.Skip(); \ } @@ -1101,10 +1139,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(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)