#endif
#include "wx/colordlg.h"
+#include "wx/numdlg.h"
#include "wx/image.h"
#include "wx/imaglist.h"
#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
#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)
MENU_LINK(IncSpacing)
MENU_LINK(DecSpacing)
MENU_LINK(ToggleIcon)
+ MENU_LINK(SelectRoot)
#undef MENU_LINK
END_EVENT_TABLE()
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)
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"));
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
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 )
CHECK_ITEM( root );
- m_treeCtrl->GetItemsRecursively(root, -1);
+ m_treeCtrl->GetItemsRecursively(root);
}
#ifndef NO_MULTIPLE_SELECTION
}
}
-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();
}
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: "),
wxGetApp().SetShowImages(TRUE);
}
-void MyFrame::OnToggleImages(wxCommandEvent& event)
+void MyFrame::OnToggleImages(wxCommandEvent& WXUNUSED(event))
{
if ( wxGetApp().ShowImages() )
{
}
}
-void MyFrame::OnToggleButtons(wxCommandEvent& event)
+void MyFrame::OnToggleButtons(wxCommandEvent& WXUNUSED(event))
{
#if USE_GENERIC_TREECTRL || !defined(__WXMSW__)
if ( wxGetApp().ShowButtons() )
#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();
}
AssignImageList(images);
}
+#if USE_GENERIC_TREECTRL || !defined(__WXMSW__)
void MyTreeCtrl::CreateButtonsImageList(int size)
{
-#if USE_GENERIC_TREECTRL || !defined(__WXMSW__)
if ( size == -1 )
{
SetButtonsImageList(NULL);
}
else
{
- images->Add(wxBitmap(icons[i].ConvertToImage().Rescale(size, size)));
+ images->Add(wxBitmap(wxBitmap(icons[i]).ConvertToImage().Rescale(size, size)));
}
}
AssignButtonsImageList(images);
+#else
+void MyTreeCtrl::CreateButtonsImageList(int WXUNUSED(size))
+{
#endif
}
// 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(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)