HitTest test added
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2097 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -63,6 +63,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
|||||||
EVT_MENU(TreeTest_Recreate, MyFrame::OnRecreate)
|
EVT_MENU(TreeTest_Recreate, MyFrame::OnRecreate)
|
||||||
EVT_MENU(TreeTest_CollapseAndReset, MyFrame::OnCollapseAndReset)
|
EVT_MENU(TreeTest_CollapseAndReset, MyFrame::OnCollapseAndReset)
|
||||||
EVT_MENU(TreeTest_EnsureVisible, MyFrame::OnEnsureVisible)
|
EVT_MENU(TreeTest_EnsureVisible, MyFrame::OnEnsureVisible)
|
||||||
|
EVT_MENU(TreeTest_AddItem, MyFrame::OnAddItem)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(MyTreeCtrl, wxTreeCtrl)
|
BEGIN_EVENT_TABLE(MyTreeCtrl, wxTreeCtrl)
|
||||||
@@ -81,6 +82,7 @@ BEGIN_EVENT_TABLE(MyTreeCtrl, wxTreeCtrl)
|
|||||||
EVT_TREE_SEL_CHANGING(TreeTest_Ctrl, MyTreeCtrl::OnSelChanging)
|
EVT_TREE_SEL_CHANGING(TreeTest_Ctrl, MyTreeCtrl::OnSelChanging)
|
||||||
EVT_TREE_KEY_DOWN(TreeTest_Ctrl, MyTreeCtrl::OnTreeKeyDown)
|
EVT_TREE_KEY_DOWN(TreeTest_Ctrl, MyTreeCtrl::OnTreeKeyDown)
|
||||||
EVT_TREE_ITEM_ACTIVATED(TreeTest_Ctrl, MyTreeCtrl::OnItemActivated)
|
EVT_TREE_ITEM_ACTIVATED(TreeTest_Ctrl, MyTreeCtrl::OnItemActivated)
|
||||||
|
EVT_RIGHT_DCLICK(MyTreeCtrl::OnRMouseDClick)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
IMPLEMENT_APP(MyApp)
|
IMPLEMENT_APP(MyApp)
|
||||||
@@ -112,32 +114,37 @@ MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h)
|
|||||||
|
|
||||||
// Make a menubar
|
// Make a menubar
|
||||||
wxMenu *file_menu = new wxMenu,
|
wxMenu *file_menu = new wxMenu,
|
||||||
*tree_menu = new wxMenu;
|
*tree_menu = new wxMenu,
|
||||||
|
*item_menu = new wxMenu;
|
||||||
|
|
||||||
file_menu->Append(TreeTest_About, "&About...");
|
file_menu->Append(TreeTest_About, "&About...");
|
||||||
file_menu->AppendSeparator();
|
file_menu->AppendSeparator();
|
||||||
file_menu->Append(TreeTest_Quit, "E&xit");
|
file_menu->Append(TreeTest_Quit, "E&xit");
|
||||||
|
|
||||||
tree_menu->Append(TreeTest_Dump, "D&ump tree items");
|
|
||||||
tree_menu->Append(TreeTest_Recreate, "&Recreate the tree");
|
tree_menu->Append(TreeTest_Recreate, "&Recreate the tree");
|
||||||
tree_menu->Append(TreeTest_CollapseAndReset, "C&ollapse and reset");
|
tree_menu->Append(TreeTest_CollapseAndReset, "C&ollapse and reset");
|
||||||
tree_menu->AppendSeparator();
|
tree_menu->AppendSeparator();
|
||||||
|
tree_menu->Append(TreeTest_AddItem, "Append a &new item");
|
||||||
tree_menu->Append(TreeTest_Delete, "&Delete this item");
|
tree_menu->Append(TreeTest_Delete, "&Delete this item");
|
||||||
tree_menu->Append(TreeTest_DeleteChildren, "Delete &children");
|
tree_menu->Append(TreeTest_DeleteChildren, "Delete &children");
|
||||||
tree_menu->Append(TreeTest_DeleteAll, "Delete &all items");
|
tree_menu->Append(TreeTest_DeleteAll, "Delete &all items");
|
||||||
tree_menu->AppendSeparator();
|
tree_menu->AppendSeparator();
|
||||||
tree_menu->Append(TreeTest_Sort, "Sort children of current item");
|
tree_menu->Append(TreeTest_Sort, "Sort children of current item");
|
||||||
tree_menu->Append(TreeTest_SortRev, "Sort in reversed order");
|
tree_menu->Append(TreeTest_SortRev, "Sort in reversed order");
|
||||||
tree_menu->Append(TreeTest_Rename, "Rename item...");
|
|
||||||
tree_menu->AppendSeparator();
|
|
||||||
tree_menu->Append(TreeTest_Bold, "Make item &bold");
|
|
||||||
tree_menu->Append(TreeTest_UnBold, "Make item ¬ bold");
|
|
||||||
tree_menu->AppendSeparator();
|
tree_menu->AppendSeparator();
|
||||||
tree_menu->Append(TreeTest_EnsureVisible, "Make the last item &visible");
|
tree_menu->Append(TreeTest_EnsureVisible, "Make the last item &visible");
|
||||||
|
|
||||||
|
item_menu->Append(TreeTest_Dump, "&Dump item children");
|
||||||
|
item_menu->AppendSeparator();
|
||||||
|
item_menu->Append(TreeTest_Rename, "&Rename item...");
|
||||||
|
item_menu->AppendSeparator();
|
||||||
|
item_menu->Append(TreeTest_Bold, "Make item &bold");
|
||||||
|
item_menu->Append(TreeTest_UnBold, "Make item ¬ bold");
|
||||||
|
|
||||||
wxMenuBar *menu_bar = new wxMenuBar;
|
wxMenuBar *menu_bar = new wxMenuBar;
|
||||||
menu_bar->Append(file_menu, "&File");
|
menu_bar->Append(file_menu, "&File");
|
||||||
menu_bar->Append(tree_menu, "&Tree");
|
menu_bar->Append(tree_menu, "&Tree");
|
||||||
|
menu_bar->Append(item_menu, "&Item");
|
||||||
SetMenuBar(menu_bar);
|
SetMenuBar(menu_bar);
|
||||||
|
|
||||||
m_treeCtrl = new MyTreeCtrl(this, TreeTest_Ctrl,
|
m_treeCtrl = new MyTreeCtrl(this, TreeTest_Ctrl,
|
||||||
@@ -277,6 +284,18 @@ void MyFrame::OnEnsureVisible(wxCommandEvent& event)
|
|||||||
m_treeCtrl->DoEnsureVisible();
|
m_treeCtrl->DoEnsureVisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MyFrame::OnAddItem(wxCommandEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
static int s_num = 0;
|
||||||
|
|
||||||
|
wxString text;
|
||||||
|
text.Printf("Item #%d", ++s_num);
|
||||||
|
|
||||||
|
m_treeCtrl->AppendItem(m_treeCtrl->GetRootItem(),
|
||||||
|
text,
|
||||||
|
MyTreeCtrl::TreeCtrlIcon_File);
|
||||||
|
}
|
||||||
|
|
||||||
// MyTreeCtrl implementation
|
// MyTreeCtrl implementation
|
||||||
IMPLEMENT_DYNAMIC_CLASS(MyTreeCtrl, wxTreeCtrl)
|
IMPLEMENT_DYNAMIC_CLASS(MyTreeCtrl, wxTreeCtrl)
|
||||||
|
|
||||||
@@ -445,6 +464,19 @@ void MyTreeCtrl::OnItemActivated(wxTreeEvent&WXUNUSED(event))
|
|||||||
wxLogMessage("OnItemActivated");
|
wxLogMessage("OnItemActivated");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MyTreeCtrl::OnRMouseDClick(wxMouseEvent& event)
|
||||||
|
{
|
||||||
|
wxTreeItemId id = HitTest(event.GetPosition());
|
||||||
|
if ( !id )
|
||||||
|
wxLogMessage("No item under mouse");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MyTreeItemData *item = (MyTreeItemData *)GetItemData(id);
|
||||||
|
if ( item )
|
||||||
|
wxLogMessage("Item '%s' under mouse", item->GetDesc());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static inline const char *Bool2String(bool b)
|
static inline const char *Bool2String(bool b)
|
||||||
{
|
{
|
||||||
return b ? "" : "not ";
|
return b ? "" : "not ";
|
||||||
|
@@ -22,6 +22,7 @@ public:
|
|||||||
MyTreeItemData(const wxString& desc) : m_desc(desc) { }
|
MyTreeItemData(const wxString& desc) : m_desc(desc) { }
|
||||||
|
|
||||||
void ShowInfo(wxTreeCtrl *tree);
|
void ShowInfo(wxTreeCtrl *tree);
|
||||||
|
const char *GetDesc() const { return m_desc.c_str(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxString m_desc;
|
wxString m_desc;
|
||||||
@@ -57,19 +58,18 @@ public:
|
|||||||
void OnSelChanging(wxTreeEvent& event);
|
void OnSelChanging(wxTreeEvent& event);
|
||||||
void OnTreeKeyDown(wxTreeEvent& event);
|
void OnTreeKeyDown(wxTreeEvent& event);
|
||||||
void OnItemActivated(wxTreeEvent& event);
|
void OnItemActivated(wxTreeEvent& event);
|
||||||
|
void OnRMouseDClick(wxMouseEvent& event);
|
||||||
|
|
||||||
void GetItemsRecursively(const wxTreeItemId& idParent, long cookie);
|
void GetItemsRecursively(const wxTreeItemId& idParent, long cookie);
|
||||||
|
|
||||||
void AddTestItemsToTree(size_t numChildren,
|
void AddTestItemsToTree(size_t numChildren, size_t depth);
|
||||||
size_t depth);
|
|
||||||
|
|
||||||
void DoSortChildren(const wxTreeItemId& item, bool reverse = FALSE)
|
void DoSortChildren(const wxTreeItemId& item, bool reverse = FALSE)
|
||||||
{ m_reverseSort = reverse; wxTreeCtrl::SortChildren(item); }
|
{ m_reverseSort = reverse; wxTreeCtrl::SortChildren(item); }
|
||||||
void DoEnsureVisible() { EnsureVisible(m_lastItem); }
|
void DoEnsureVisible() { EnsureVisible(m_lastItem); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual int OnCompareItems(const wxTreeItemId& item1,
|
virtual int OnCompareItems(const wxTreeItemId& i1, const wxTreeItemId& i2);
|
||||||
const wxTreeItemId& item2);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void AddItemsRecursively(const wxTreeItemId& idParent,
|
void AddItemsRecursively(const wxTreeItemId& idParent,
|
||||||
@@ -100,6 +100,7 @@ public:
|
|||||||
// menu callbacks
|
// menu callbacks
|
||||||
void OnQuit(wxCommandEvent& event);
|
void OnQuit(wxCommandEvent& event);
|
||||||
void OnAbout(wxCommandEvent& event);
|
void OnAbout(wxCommandEvent& event);
|
||||||
|
|
||||||
void OnDump(wxCommandEvent& event);
|
void OnDump(wxCommandEvent& event);
|
||||||
void OnDelete(wxCommandEvent& event);
|
void OnDelete(wxCommandEvent& event);
|
||||||
void OnDeleteChildren(wxCommandEvent& event);
|
void OnDeleteChildren(wxCommandEvent& event);
|
||||||
@@ -116,6 +117,8 @@ public:
|
|||||||
void OnSort(wxCommandEvent& event) { DoSort(); }
|
void OnSort(wxCommandEvent& event) { DoSort(); }
|
||||||
void OnSortRev(wxCommandEvent& event) { DoSort(TRUE); }
|
void OnSortRev(wxCommandEvent& event) { DoSort(TRUE); }
|
||||||
|
|
||||||
|
void OnAddItem(wxCommandEvent& event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void DoSort(bool reverse = FALSE);
|
void DoSort(bool reverse = FALSE);
|
||||||
|
|
||||||
@@ -143,5 +146,6 @@ enum
|
|||||||
TreeTest_Recreate,
|
TreeTest_Recreate,
|
||||||
TreeTest_CollapseAndReset,
|
TreeTest_CollapseAndReset,
|
||||||
TreeTest_EnsureVisible,
|
TreeTest_EnsureVisible,
|
||||||
|
TreeTest_AddItem,
|
||||||
TreeTest_Ctrl = 100
|
TreeTest_Ctrl = 100
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user