X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3efb01df7b4f5d6adb165119aa219c9ffde3cf42..f0824a5a4a255989b5153945ade9e21232724980:/samples/treectrl/treetest.cpp diff --git a/samples/treectrl/treetest.cpp b/samples/treectrl/treetest.cpp index de810677b1..17d2ac3490 100644 --- a/samples/treectrl/treetest.cpp +++ b/samples/treectrl/treetest.cpp @@ -40,25 +40,31 @@ #include "treetest.h" BEGIN_EVENT_TABLE(MyFrame, wxFrame) - EVT_MENU(TREE_QUIT, MyFrame::OnQuit) - EVT_MENU(TREE_ABOUT, MyFrame::OnAbout) + EVT_MENU(TreeTest_Quit, MyFrame::OnQuit) + EVT_MENU(TreeTest_About, MyFrame::OnAbout) + EVT_MENU(TreeTest_Dump, MyFrame::OnDump) + EVT_MENU(TreeTest_Bold, MyFrame::OnSetBold) + EVT_MENU(TreeTest_UnBold, MyFrame::OnClearBold) + EVT_MENU(TreeTest_Delete, MyFrame::OnDelete) + EVT_MENU(TreeTest_DeleteAll, MyFrame::OnDeleteAll) + EVT_MENU(TreeTest_Recreate, MyFrame::OnRecreate) END_EVENT_TABLE() BEGIN_EVENT_TABLE(MyTreeCtrl, wxTreeCtrl) - EVT_TREE_BEGIN_DRAG(TREE_CTRL, MyTreeCtrl::OnBeginDrag) - EVT_TREE_BEGIN_RDRAG(TREE_CTRL, MyTreeCtrl::OnBeginRDrag) - EVT_TREE_BEGIN_LABEL_EDIT(TREE_CTRL, MyTreeCtrl::OnBeginLabelEdit) - EVT_TREE_END_LABEL_EDIT(TREE_CTRL, MyTreeCtrl::OnEndLabelEdit) - EVT_TREE_DELETE_ITEM(TREE_CTRL, MyTreeCtrl::OnDeleteItem) - EVT_TREE_GET_INFO(TREE_CTRL, MyTreeCtrl::OnGetInfo) - EVT_TREE_SET_INFO(TREE_CTRL, MyTreeCtrl::OnSetInfo) - EVT_TREE_ITEM_EXPANDED(TREE_CTRL, MyTreeCtrl::OnItemExpanded) - EVT_TREE_ITEM_EXPANDING(TREE_CTRL, MyTreeCtrl::OnItemExpanding) - EVT_TREE_ITEM_COLLAPSED(TREE_CTRL, MyTreeCtrl::OnItemCollapsed) - EVT_TREE_ITEM_COLLAPSING(TREE_CTRL, MyTreeCtrl::OnItemCollapsing) - EVT_TREE_SEL_CHANGED(TREE_CTRL, MyTreeCtrl::OnSelChanged) - EVT_TREE_SEL_CHANGING(TREE_CTRL, MyTreeCtrl::OnSelChanging) - EVT_TREE_KEY_DOWN(TREE_CTRL, MyTreeCtrl::OnKeyDown) + EVT_TREE_BEGIN_DRAG(TreeTest_Ctrl, MyTreeCtrl::OnBeginDrag) + EVT_TREE_BEGIN_RDRAG(TreeTest_Ctrl, MyTreeCtrl::OnBeginRDrag) + EVT_TREE_BEGIN_LABEL_EDIT(TreeTest_Ctrl, MyTreeCtrl::OnBeginLabelEdit) + EVT_TREE_END_LABEL_EDIT(TreeTest_Ctrl, MyTreeCtrl::OnEndLabelEdit) + EVT_TREE_DELETE_ITEM(TreeTest_Ctrl, MyTreeCtrl::OnDeleteItem) + EVT_TREE_GET_INFO(TreeTest_Ctrl, MyTreeCtrl::OnGetInfo) + EVT_TREE_SET_INFO(TreeTest_Ctrl, MyTreeCtrl::OnSetInfo) + EVT_TREE_ITEM_EXPANDED(TreeTest_Ctrl, MyTreeCtrl::OnItemExpanded) + 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_SEL_CHANGED(TreeTest_Ctrl, MyTreeCtrl::OnSelChanged) + EVT_TREE_SEL_CHANGING(TreeTest_Ctrl, MyTreeCtrl::OnSelChanging) + EVT_TREE_KEY_DOWN(TreeTest_Ctrl, MyTreeCtrl::OnTreeKeyDown) END_EVENT_TABLE() IMPLEMENT_APP(MyApp) @@ -92,14 +98,24 @@ MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h) // Make a menubar wxMenu *file_menu = new wxMenu; - file_menu->Append(TREE_ABOUT, "&About..."); - file_menu->Append(TREE_QUIT, "E&xit"); + file_menu->Append(TreeTest_Dump, "D&ump tree items"); + file_menu->Append(TreeTest_Delete, "&Delete this item"); + file_menu->Append(TreeTest_DeleteAll, "Delete &all items"); + file_menu->Append(TreeTest_Recreate, "&Recreate the tree"); + file_menu->AppendSeparator(); + file_menu->Append(TreeTest_Bold, "Make item &bold"); + file_menu->Append(TreeTest_UnBold, "Make item ¬ bold"); + file_menu->AppendSeparator(); + file_menu->Append(TreeTest_About, "&About..."); + file_menu->AppendSeparator(); + file_menu->Append(TreeTest_Quit, "E&xit"); + wxMenuBar *menu_bar = new wxMenuBar; menu_bar->Append(file_menu, "&File"); SetMenuBar(menu_bar); // Make a panel with a message - m_treeCtrl = new MyTreeCtrl(this, TREE_CTRL, + m_treeCtrl = new MyTreeCtrl(this, TreeTest_Ctrl, wxDefaultPosition, wxDefaultSize, wxTR_HAS_BUTTONS | wxSUNKEN_BORDER); wxTextCtrl *textCtrl = new wxTextCtrl(this, -1, "", @@ -125,9 +141,15 @@ MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h) CreateStatusBar(3); SetStatusText("", 0); +#ifdef __WXMOTIF__ + // For some reason, we get a memcpy crash in wxLogStream::DoLogStream + // on gcc/wxMotif, if we use wxLogTextCtl. Maybe it's just gcc? + delete wxLog::SetActiveTarget(new wxLogStderr); +#else // set our text control as the log target wxLogTextCtrl *logWindow = new wxLogTextCtrl(textCtrl); delete wxLog::SetActiveTarget(logWindow); +#endif } MyFrame::~MyFrame() @@ -142,12 +164,42 @@ void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { - wxMessageDialog dialog(this, "Tree test sample\nJulian Smart (c) 1997", + wxMessageDialog dialog(this, + "Tree test sample\n" + "Julian Smart (c) 1997", "About tree test", wxOK); dialog.ShowModal(); } +void MyFrame::OnDump(wxCommandEvent& WXUNUSED(event)) +{ + wxTreeItemId root = m_treeCtrl->GetSelection(); + m_treeCtrl->GetItemsRecursively(root, -1); +} + +void MyFrame::DoSetBold(bool bold) +{ + m_treeCtrl->SetItemBold(m_treeCtrl->GetSelection(), bold); +} + +void MyFrame::OnDelete(wxCommandEvent& WXUNUSED(event)) +{ + wxTreeItemId item = m_treeCtrl->GetSelection(); + m_treeCtrl->Delete(item); +} + +void MyFrame::OnDeleteAll(wxCommandEvent& WXUNUSED(event)) +{ + m_treeCtrl->DeleteAllItems(); +} + +void MyFrame::OnRecreate(wxCommandEvent& event) +{ + OnDeleteAll(event); + m_treeCtrl->AddTestItemsToTree(3, 2); +} + // MyTreeCtrl implementation MyTreeCtrl::MyTreeCtrl(wxWindow *parent, const wxWindowID id, const wxPoint& pos, const wxSize& size, @@ -164,7 +216,7 @@ MyTreeCtrl::MyTreeCtrl(wxWindow *parent, const wxWindowID id, SetImageList(m_imageListNormal); // Add some items to the tree - AddTestItemsToTree(4, 3); + AddTestItemsToTree(3, 2); } MyTreeCtrl::~MyTreeCtrl() @@ -174,7 +226,8 @@ MyTreeCtrl::~MyTreeCtrl() void MyTreeCtrl::AddItemsRecursively(const wxTreeItemId& idParent, size_t numChildren, - size_t depth) + size_t depth, + size_t folder) { if ( depth > 0 ) { @@ -182,11 +235,15 @@ void MyTreeCtrl::AddItemsRecursively(const wxTreeItemId& idParent, for ( size_t n = 0; n < numChildren; n++ ) { // at depth 1 elements won't have any more children - str.Printf("%s child %d", depth == 1 ? "File" : "Folder", n + 1); + if (depth == 1) + str.Printf("%s child %d.%d", "File", folder, n + 1); + else + str.Printf("%s child %d","Folder", n + 1); + int image = depth == 1 ? TreeCtrlIcon_File : TreeCtrlIcon_Folder; wxTreeItemId id = AppendItem(idParent, str, image, image, new MyTreeItemData(str)); - AddItemsRecursively(id, numChildren, depth - 1); + AddItemsRecursively(id, numChildren, depth - 1, n + 1); } } //else: done! @@ -199,9 +256,31 @@ void MyTreeCtrl::AddTestItemsToTree(size_t numChildren, TreeCtrlIcon_Folder, TreeCtrlIcon_Folder, new MyTreeItemData("Root item")); - AddItemsRecursively(rootId, numChildren, depth); + AddItemsRecursively(rootId, numChildren, depth, 0); } +void MyTreeCtrl::GetItemsRecursively(const wxTreeItemId& idParent, long cookie) +{ + wxTreeItemId id; + + if( cookie == -1 ) + id = GetFirstChild(idParent, cookie); + else + id = GetNextChild(idParent, cookie); + + if(id <= 0) + return; + + wxString text=GetItemText(id); + wxLogMessage(text); + + if (ItemHasChildren(id)) + GetItemsRecursively(id,-1); + + GetItemsRecursively(idParent, cookie); +} + + // avoid repetition #define TREE_EVENT_HANDLER(name) \ void MyTreeCtrl::name(wxTreeEvent& WXUNUSED(event)) \ @@ -238,7 +317,7 @@ void MyTreeCtrl::OnItemCollapsing(wxTreeEvent& event) } } -void MyTreeCtrl::OnKeyDown(wxTreeEvent& event) +void MyTreeCtrl::OnTreeKeyDown(wxTreeEvent&WXUNUSED(event)) { // show some info about this item wxTreeItemId itemId = GetSelection(); @@ -249,7 +328,7 @@ void MyTreeCtrl::OnKeyDown(wxTreeEvent& event) item->ShowInfo(this); } - wxLogMessage("OnKeyDown"); + wxLogMessage("OnTreeKeyDown"); } static inline const char *Bool2String(bool b) @@ -259,8 +338,12 @@ static inline const char *Bool2String(bool b) void MyTreeItemData::ShowInfo(wxTreeCtrl *tree) { - wxLogMessage("Item '%s': %sselected, %sexpanded.", + wxLogMessage("Item '%s': %sselected, %sexpanded, %sbold,\n" + "%u children (%u immediately under this item).", m_desc.c_str(), Bool2String(tree->IsSelected(GetId())), - Bool2String(tree->IsExpanded(GetId()))); + Bool2String(tree->IsExpanded(GetId())), + Bool2String(tree->IsBold(GetId())), + tree->GetChildrenCount(GetId()), + tree->GetChildrenCount(GetId(), FALSE)); }