X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/88ac883a0d005437c97a60d8195bd5e4719b1154..a3c1786def55bcc233f9606acb1aceee956d184f:/samples/treectrl/treetest.cpp diff --git a/samples/treectrl/treetest.cpp b/samples/treectrl/treetest.cpp index 93d51cd80d..c626ea433f 100644 --- a/samples/treectrl/treetest.cpp +++ b/samples/treectrl/treetest.cpp @@ -25,15 +25,9 @@ #include "wx/wx.h" #endif -// under Windows the icons are in the .rc file -#ifndef __WXMSW__ - #include "icon1.xpm" - #include "icon2.xpm" - #include "mondrian.xpm" -#endif - #include "wx/log.h" +#include "wx/image.h" #include "wx/imaglist.h" #include "wx/treectrl.h" @@ -41,6 +35,17 @@ #include "treetest.h" +#ifdef __WXMSW__ + #define NO_ADVANCED_FEATURES +#endif + +// under Windows the icons are in the .rc file +#ifndef __WXMSW__ + #include "icon1.xpm" + #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!", \ @@ -54,6 +59,7 @@ 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) EVT_MENU(TreeTest_Rename, MyFrame::OnRename) EVT_MENU(TreeTest_Sort, MyFrame::OnSort) EVT_MENU(TreeTest_SortRev, MyFrame::OnSortRev) @@ -147,8 +153,11 @@ MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h) tree_menu->Append(TreeTest_DecSpacing, "Reduce spacing by 5 points\tCtrl-R"); item_menu->Append(TreeTest_Dump, "&Dump item children"); - item_menu->AppendSeparator(); +#ifndef NO_ADVANCED_FEATURES + 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"); @@ -161,9 +170,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 | wxSUNKEN_BORDER - | wxTR_MULTIPLE - ); + wxTR_HAS_BUTTONS | + wxTR_EDIT_LABELS | +#ifndef NO_ADVANCED_FEATURES + wxTR_MULTIPLE | + wxTR_HAS_VARIABLE_ROW_HEIGHT | +#endif + wxSUNKEN_BORDER); wxTextCtrl *textCtrl = new wxTextCtrl(this, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxSUNKEN_BORDER); @@ -211,8 +224,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); } @@ -223,6 +235,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); @@ -230,6 +244,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) @@ -250,6 +268,20 @@ void MyFrame::OnDump(wxCommandEvent& WXUNUSED(event)) m_treeCtrl->GetItemsRecursively(root, -1); } +void MyFrame::OnDumpSelected(wxCommandEvent& WXUNUSED(event)) +{ +#ifndef NO_ADVANCED_FEATURES + wxArrayTreeItemIds array; + + m_treeCtrl->GetSelections(array); + size_t nos=array.Count(); + wxLogMessage(wxString("items selected : ")<< (int)nos); + + for (size_t n=0; nGetItemText(array.Item(n))); +#endif +} + void MyFrame::DoSetBold(bool bold) { wxTreeItemId item = m_treeCtrl->GetSelection(); @@ -306,8 +338,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)) @@ -346,6 +378,13 @@ MyTreeCtrl::MyTreeCtrl(wxWindow *parent, const wxWindowID id, long style) : wxTreeCtrl(parent, id, pos, size, style) { +#if (USE_TR_HAS_VARIABLE_ROW_HIGHT && wxUSE_LIBJPEG) + wxImage::AddHandler(new wxJPEGHandler); + wxImage image; + + image.LoadFile(wxString("horse.jpg"), wxBITMAP_TYPE_JPEG ); +#endif + m_reverseSort = FALSE; // Make an image list containing small icons @@ -355,10 +394,18 @@ MyTreeCtrl::MyTreeCtrl(wxWindow *parent, const wxWindowID id, #if defined(__WXMSW__) && defined(__WIN16__) // This is required in 16-bit Windows mode only because we can't load a specific (16x16) // icon image, so it comes out stretched +# if USE_TR_HAS_VARIABLE_ROW_HIGHT + m_imageListNormal->Add(image.ConvertToBitmap()); +# else m_imageListNormal->Add(wxBitmap("bitmap1", wxBITMAP_TYPE_BMP_RESOURCE)); +# endif m_imageListNormal->Add(wxBitmap("bitmap2", wxBITMAP_TYPE_BMP_RESOURCE)); #else +# if USE_TR_HAS_VARIABLE_ROW_HIGHT + m_imageListNormal->Add(image.ConvertToBitmap()); +# else m_imageListNormal->Add(wxICON(icon1)); +# endif m_imageListNormal->Add(wxICON(icon2)); #endif @@ -403,7 +450,8 @@ void MyTreeCtrl::AddItemsRecursively(const wxTreeItemId& idParent, else str.Printf("%s child %d", "Folder", n + 1); - int image = depth == 1 ? TreeCtrlIcon_File : TreeCtrlIcon_Folder; +// int image = depth == 1 ? TreeCtrlIcon_File : TreeCtrlIcon_Folder; + int image = depth == 1 ? -1 : TreeCtrlIcon_Folder; wxTreeItemId id = AppendItem(idParent, str, image, image, new MyTreeItemData(str)); @@ -460,8 +508,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) @@ -473,13 +519,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.");