]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/treectrl/treetest.cpp
cw pro adaption (illegal default argument error was given)
[wxWidgets.git] / samples / treectrl / treetest.cpp
index 4095a541e69289d3fbe7e91af35202c410c774ff..3868180f3d6a760c00e9819d22888b18673b31af 100644 (file)
 
 #include "treetest.h"
 
+// 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!", \
+                                          "Tree sample error",              \
+                                          wxOK | wxICON_EXCLAMATION,        \
+                                          this);                            \
+                             return;                                        \
+                           }  
+                                          
 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_Rename, MyFrame::OnRename)
+  EVT_MENU(TreeTest_Sort, MyFrame::OnSort)
+  EVT_MENU(TreeTest_SortRev, MyFrame::OnSortRev)
   EVT_MENU(TreeTest_Bold, MyFrame::OnSetBold)
   EVT_MENU(TreeTest_UnBold, MyFrame::OnClearBold)
   EVT_MENU(TreeTest_Delete, MyFrame::OnDelete)
+  EVT_MENU(TreeTest_DeleteChildren, MyFrame::OnDeleteChildren)
   EVT_MENU(TreeTest_DeleteAll, MyFrame::OnDeleteAll)
   EVT_MENU(TreeTest_Recreate, MyFrame::OnRecreate)
 END_EVENT_TABLE()
@@ -70,7 +83,6 @@ END_EVENT_TABLE()
 
 IMPLEMENT_APP(MyApp)
 
-// `Main program' equivalent, creating windows and returning main app frame
 bool MyApp::OnInit()
 {
   // Create the main frame window
@@ -97,22 +109,30 @@ MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h)
   SetIcon(wxICON(mondrian));
 
   // Make a menubar
-  wxMenu *file_menu = new wxMenu;
+  wxMenu *file_menu = new wxMenu,
+         *tree_menu = new wxMenu;
 
-  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 &not bold");
-  file_menu->AppendSeparator();
   file_menu->Append(TreeTest_About, "&About...");
   file_menu->AppendSeparator();
   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->AppendSeparator();
+  tree_menu->Append(TreeTest_Delete, "&Delete this item");
+  tree_menu->Append(TreeTest_DeleteChildren, "Delete &children");
+  tree_menu->Append(TreeTest_DeleteAll, "Delete &all items");
+  tree_menu->AppendSeparator();
+  tree_menu->Append(TreeTest_Sort, "Sort children of current item");
+  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 &not bold");
+
   wxMenuBar *menu_bar = new wxMenuBar;
   menu_bar->Append(file_menu, "&File");
+  menu_bar->Append(tree_menu, "&Tree");
   SetMenuBar(menu_bar);
 
   // Make a panel with a message
@@ -165,31 +185,73 @@ void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
 
 void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
 {
-  wxMessageDialog dialog(this,
-                         "Tree test sample\n"
-                         "Julian Smart (c) 1997",
-                         "About tree test", wxOK);
+  wxMessageBox("Tree test sample\n"
+               "Julian Smart (c) 1997,\n"
+               "Vadim Zeitlin (c) 1998",
+               "About tree test",
+               wxOK | wxICON_INFORMATION, this);
+}
 
-  dialog.ShowModal();
+void MyFrame::OnRename(wxCommandEvent& WXUNUSED(event))
+{
+  wxTreeItemId item = m_treeCtrl->GetSelection();
+
+  CHECK_ITEM( item );
+
+  static wxString s_text;
+  s_text = wxGetTextFromUser("New name: ", "Tree sample question",
+                             s_text, this);
+  if ( !s_text.IsEmpty() )
+  {
+    m_treeCtrl->SetItemText(item, s_text);
+  }
+}
+
+void MyFrame::DoSort(bool reverse)
+{
+  wxTreeItemId item = m_treeCtrl->GetSelection();
+
+  CHECK_ITEM( item );
+
+  m_treeCtrl->DoSortChildren(item, reverse);
 }
 
 void MyFrame::OnDump(wxCommandEvent& WXUNUSED(event))
 {
   wxTreeItemId root = m_treeCtrl->GetSelection();
+
+  CHECK_ITEM( root );
+
   m_treeCtrl->GetItemsRecursively(root, -1);
 }
 
 void MyFrame::DoSetBold(bool bold)
 {
-  m_treeCtrl->SetItemBold(m_treeCtrl->GetSelection(), bold);
+  wxTreeItemId item = m_treeCtrl->GetSelection();
+
+  CHECK_ITEM( item );
+
+  m_treeCtrl->SetItemBold(item, bold);
 }
 
 void MyFrame::OnDelete(wxCommandEvent& WXUNUSED(event))
 {
   wxTreeItemId item = m_treeCtrl->GetSelection();
+
+  CHECK_ITEM( item );
+
   m_treeCtrl->Delete(item);
 }
 
+void MyFrame::OnDeleteChildren(wxCommandEvent& WXUNUSED(event))
+{
+  wxTreeItemId item = m_treeCtrl->GetSelection();
+
+  CHECK_ITEM( item );
+
+  m_treeCtrl->DeleteChildren(item);
+}
+
 void MyFrame::OnDeleteAll(wxCommandEvent& WXUNUSED(event))
 {
   m_treeCtrl->DeleteAllItems();
@@ -202,17 +264,28 @@ void MyFrame::OnRecreate(wxCommandEvent& event)
 }
 
 // MyTreeCtrl implementation
+IMPLEMENT_DYNAMIC_CLASS(MyTreeCtrl, wxTreeCtrl)
+
 MyTreeCtrl::MyTreeCtrl(wxWindow *parent, const wxWindowID id,
                        const wxPoint& pos, const wxSize& size,
                        long style)
           : wxTreeCtrl(parent, id, pos, size, style)
 {
+  m_reverseSort = FALSE;
+
   // Make an image list containing small icons
   m_imageListNormal = new wxImageList(16, 16, TRUE);
 
   // should correspond to TreeCtrlIcon_xxx enum
+#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
+  m_imageListNormal->Add(wxBitmap("bitmap1", wxBITMAP_TYPE_BMP_RESOURCE));
+  m_imageListNormal->Add(wxBitmap("bitmap2", wxBITMAP_TYPE_BMP_RESOURCE));
+#else
   m_imageListNormal->Add(wxICON(icon1));
   m_imageListNormal->Add(wxICON(icon2));
+#endif
 
   SetImageList(m_imageListNormal);
 
@@ -225,6 +298,20 @@ MyTreeCtrl::~MyTreeCtrl()
   delete m_imageListNormal;
 }
 
+int MyTreeCtrl::OnCompareItems(const wxTreeItemId& item1,
+                               const wxTreeItemId& item2)
+{
+  if ( m_reverseSort )
+  {
+    // just exchange 1st and 2nd items
+    return wxTreeCtrl::OnCompareItems(item2, item1);
+  }
+  else
+  {
+    return wxTreeCtrl::OnCompareItems(item1, item2);
+  }
+}
+
 void MyTreeCtrl::AddItemsRecursively(const wxTreeItemId& idParent,
                                      size_t numChildren,
                                      size_t depth,