X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/622d090e8ae11b240cbe17568a6047e3888c5a52..48b1d0ff4ff220d8f2994723f936a1ffa60addce:/samples/treectrl/treetest.cpp diff --git a/samples/treectrl/treetest.cpp b/samples/treectrl/treetest.cpp index 04c4682fcf..4c07872661 100644 --- a/samples/treectrl/treetest.cpp +++ b/samples/treectrl/treetest.cpp @@ -33,24 +33,20 @@ #include "math.h" -#include "treetest.h" +//#ifdef __WXMSW__ + #define NO_MULTIPLE_SELECTION + #define NO_VARIABLE_HEIGHT +//#endif -#ifdef wxTR_HAS_VARIABLE_ROW_HIGHT -#define USE_TR_HAS_VARIABLE_ROW_HIGHT 1 -#else -#define USE_TR_HAS_VARIABLE_ROW_HIGHT 0 -#endif +#include "treetest.h" // under Windows the icons are in the .rc file #ifndef __WXMSW__ -#if !USE_TR_HAS_VARIABLE_ROW_HIGHT #include "icon1.xpm" -#endif #include "icon2.xpm" #include "mondrian.xpm" #endif - // verify that the item is ok and insult the user if it is not #define CHECK_ITEM( item ) if ( !item.IsOk() ) { \ wxMessageBox("Please select some item first!", \ @@ -64,7 +60,11 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(TreeTest_Quit, MyFrame::OnQuit) EVT_MENU(TreeTest_About, MyFrame::OnAbout) EVT_MENU(TreeTest_Dump, MyFrame::OnDump) - EVT_MENU(TreeTest_Dump_Selected, MyFrame::OnDumpSelected) +#ifndef NO_MULTIPLE_SELECTION + EVT_MENU(TreeTest_DumpSelected, MyFrame::OnDumpSelected) + EVT_MENU(TreeTest_Select, MyFrame::OnSelect) + EVT_MENU(TreeTest_Unselect, MyFrame::OnUnselect) +#endif // NO_MULTIPLE_SELECTION EVT_MENU(TreeTest_Rename, MyFrame::OnRename) EVT_MENU(TreeTest_Sort, MyFrame::OnSort) EVT_MENU(TreeTest_SortRev, MyFrame::OnSortRev) @@ -81,6 +81,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(TreeTest_DecIndent, MyFrame::OnDecIndent) EVT_MENU(TreeTest_IncSpacing, MyFrame::OnIncSpacing) EVT_MENU(TreeTest_DecSpacing, MyFrame::OnDecSpacing) + EVT_MENU(TreeTest_ToggleIcon, MyFrame::OnToggleIcon) END_EVENT_TABLE() BEGIN_EVENT_TABLE(MyTreeCtrl, wxTreeCtrl) @@ -157,16 +158,21 @@ MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h) tree_menu->Append(TreeTest_IncSpacing, "Add 5 points to spacing\tCtrl-I"); tree_menu->Append(TreeTest_DecSpacing, "Reduce spacing by 5 points\tCtrl-R"); - item_menu->AppendSeparator(); item_menu->Append(TreeTest_Dump, "&Dump item children"); -#ifdef wxTR_MULTIPLE - item_menu->Append(TreeTest_Dump_Selected, "Dump selected items\tAlt-S"); -#endif 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"); + item_menu->AppendSeparator(); + item_menu->Append(TreeTest_ToggleIcon, "Toggle the items &icon"); + +#ifndef NO_MULTIPLE_SELECTION + item_menu->AppendSeparator(); + item_menu->Append(TreeTest_DumpSelected, "Dump selected items\tAlt-D"); + item_menu->Append(TreeTest_Select, "Select current item\tAlt-S"); + item_menu->Append(TreeTest_Unselect, "Unselect everything\tAlt-U"); +#endif wxMenuBar *menu_bar = new wxMenuBar; menu_bar->Append(file_menu, "&File"); @@ -176,12 +182,13 @@ MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h) m_treeCtrl = new MyTreeCtrl(this, TreeTest_Ctrl, wxDefaultPosition, wxDefaultSize, - wxTR_HAS_BUTTONS | -#ifdef wxTR_MULTIPLE + wxTR_HAS_BUTTONS | + wxTR_EDIT_LABELS | +#ifndef NO_MULTIPLE_SELECTION wxTR_MULTIPLE | #endif -#if USE_TR_HAS_VARIABLE_ROW_HIGHT - wxTR_HAS_VARIABLE_ROW_HIGHT | +#ifndef NO_VARIABLE_HEIGHT + wxTR_HAS_VARIABLE_ROW_HEIGHT | #endif wxSUNKEN_BORDER); wxTextCtrl *textCtrl = new wxTextCtrl(this, -1, "", @@ -231,8 +238,7 @@ void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxMessageBox("Tree test sample\n" - "Julian Smart (c) 1997,\n" - "Vadim Zeitlin (c) 1998", + "(c) Julian Smart 1997, Vadim Zeitlin 1998", "About tree test", wxOK | wxICON_INFORMATION, this); } @@ -243,6 +249,8 @@ void MyFrame::OnRename(wxCommandEvent& WXUNUSED(event)) CHECK_ITEM( item ); + // old code - now we edit in place +#if 0 static wxString s_text; s_text = wxGetTextFromUser("New name: ", "Tree sample question", s_text, this); @@ -250,6 +258,10 @@ void MyFrame::OnRename(wxCommandEvent& WXUNUSED(event)) { m_treeCtrl->SetItemText(item, s_text); } +#endif // 0 + + // TODO demonstrate creating a custom edit control... + (void)m_treeCtrl->EditLabel(item); } void MyFrame::DoSort(bool reverse) @@ -270,20 +282,33 @@ void MyFrame::OnDump(wxCommandEvent& WXUNUSED(event)) m_treeCtrl->GetItemsRecursively(root, -1); } +#ifndef NO_MULTIPLE_SELECTION + void MyFrame::OnDumpSelected(wxCommandEvent& WXUNUSED(event)) { -#ifdef wxTR_MULTIPLE - wxArrayTreeItemIds array; + wxArrayTreeItemIds array; - m_treeCtrl->GetSelections(array); - size_t nos=array.Count(); - wxLogMessage(wxString("items selected : ")<< (int)nos); + size_t count = m_treeCtrl->GetSelections(array); + wxLogMessage(_T("%u items selected"), count); - for (size_t n=0; nGetItemText(array.Item(n))); -#endif + for ( size_t n = 0; n < count; n++ ) + { + wxLogMessage("\t%s", m_treeCtrl->GetItemText(array.Item(n)).c_str()); + } +} + +void MyFrame::OnSelect(wxCommandEvent& event) +{ + m_treeCtrl->SelectItem(m_treeCtrl->GetSelection()); } +void MyFrame::OnUnselect(wxCommandEvent& event) +{ + m_treeCtrl->UnselectAll(); +} + +#endif // NO_MULTIPLE_SELECTION + void MyFrame::DoSetBold(bool bold) { wxTreeItemId item = m_treeCtrl->GetSelection(); @@ -340,8 +365,8 @@ void MyFrame::OnAddItem(wxCommandEvent& WXUNUSED(event)) text.Printf("Item #%d", ++s_num); m_treeCtrl->AppendItem(m_treeCtrl->GetRootItem(), - text, - MyTreeCtrl::TreeCtrlIcon_File); + text /*, + MyTreeCtrl::TreeCtrlIcon_File */ ); } void MyFrame::OnIncIndent(wxCommandEvent& WXUNUSED(event)) @@ -372,6 +397,15 @@ void MyFrame::OnDecSpacing(wxCommandEvent& WXUNUSED(event)) m_treeCtrl->SetSpacing( indent-5 ); } +void MyFrame::OnToggleIcon(wxCommandEvent& WXUNUSED(event)) +{ + wxTreeItemId item = m_treeCtrl->GetSelection(); + + CHECK_ITEM( item ); + + m_treeCtrl->DoToggleIcon(item); +} + // MyTreeCtrl implementation IMPLEMENT_DYNAMIC_CLASS(MyTreeCtrl, wxTreeCtrl) @@ -380,8 +414,8 @@ MyTreeCtrl::MyTreeCtrl(wxWindow *parent, const wxWindowID id, long style) : wxTreeCtrl(parent, id, pos, size, style) { -#if USE_TR_HAS_VARIABLE_ROW_HIGHT - wxImage::AddHandler(new wxJPEGHandler); +#if (USE_TR_HAS_VARIABLE_ROW_HIGHT && wxUSE_LIBJPEG) + wxImage::AddHandler(new wxJPEGHandler); wxImage image; image.LoadFile(wxString("horse.jpg"), wxBITMAP_TYPE_JPEG ); @@ -490,7 +524,7 @@ void MyTreeCtrl::GetItemsRecursively(const wxTreeItemId& idParent, long cookie) if(id <= 0) return; - wxString text=GetItemText(id); + wxString text = GetItemText(id); wxLogMessage(text); if (ItemHasChildren(id)) @@ -499,6 +533,14 @@ void MyTreeCtrl::GetItemsRecursively(const wxTreeItemId& idParent, long cookie) GetItemsRecursively(idParent, cookie); } +void MyTreeCtrl::DoToggleIcon(const wxTreeItemId& item) +{ + int image = GetItemImage(item) == TreeCtrlIcon_Folder ? TreeCtrlIcon_File + : TreeCtrlIcon_Folder; + + SetItemImage(item, image); +} + // avoid repetition #define TREE_EVENT_HANDLER(name) \ @@ -509,8 +551,6 @@ void MyTreeCtrl::name(wxTreeEvent& WXUNUSED(event)) \ TREE_EVENT_HANDLER(OnBeginDrag) TREE_EVENT_HANDLER(OnBeginRDrag) -TREE_EVENT_HANDLER(OnBeginLabelEdit) -TREE_EVENT_HANDLER(OnEndLabelEdit) TREE_EVENT_HANDLER(OnDeleteItem) TREE_EVENT_HANDLER(OnGetInfo) TREE_EVENT_HANDLER(OnSetInfo) @@ -522,13 +562,40 @@ TREE_EVENT_HANDLER(OnSelChanging) #undef TREE_EVENT_HANDLER +void MyTreeCtrl::OnBeginLabelEdit(wxTreeEvent& event) +{ + wxLogMessage("OnBeginLabelEdit"); + + // for testing, prevent this items label editing + wxTreeItemId itemId = event.GetItem(); + if ( IsTestItem(itemId) ) + { + wxMessageBox("You can't edit this item."); + + event.Veto(); + } +} + +void MyTreeCtrl::OnEndLabelEdit(wxTreeEvent& event) +{ + wxLogMessage("OnEndLabelEdit"); + + // don't allow anything except letters in the labels + if ( !event.GetLabel().IsWord() ) + { + wxMessageBox("The label should contain only letters."); + + event.Veto(); + } +} + void MyTreeCtrl::OnItemCollapsing(wxTreeEvent& event) { wxLogMessage("OnItemCollapsing"); // for testing, prevent the user from collapsing the first child folder wxTreeItemId itemId = event.GetItem(); - if ( GetParent(itemId) == GetRootItem() && !GetPrevSibling(itemId) ) + if ( IsTestItem(itemId) ) { wxMessageBox("You can't collapse this item.");