#include "math.h"
-#include "treetest.h"
+//#ifdef __WXMSW__
+ #define NO_MULTIPLE_SELECTION
+ #define NO_VARIABLE_HEIGHT
+//#endif
-#ifdef __WXMSW__
- #define NO_ADVANCED_FEATURES
-#endif
+#include "treetest.h"
// under Windows the icons are in the .rc file
#ifndef __WXMSW__
+#ifdef NO_VARIABLE_HEIGHT
#include "icon1.xpm"
+#endif
#include "icon2.xpm"
#include "mondrian.xpm"
#endif
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)
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)
tree_menu->Append(TreeTest_DecSpacing, "Reduce spacing by 5 points\tCtrl-R");
item_menu->Append(TreeTest_Dump, "&Dump item children");
-#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");
+ 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");
wxDefaultPosition, wxDefaultSize,
wxTR_HAS_BUTTONS |
wxTR_EDIT_LABELS |
-#ifndef NO_ADVANCED_FEATURES
- wxTR_MULTIPLE |
- wxTR_HAS_VARIABLE_ROW_HEIGHT |
+#ifndef NO_MULTIPLE_SELECTION
+ wxTR_MULTIPLE |
#endif
- wxSUNKEN_BORDER);
+#ifndef NO_VARIABLE_HEIGHT
+ wxTR_HAS_VARIABLE_ROW_HEIGHT |
+#endif
+ wxSUNKEN_BORDER);
wxTextCtrl *textCtrl = new wxTextCtrl(this, -1, "",
wxDefaultPosition, wxDefaultSize,
wxTE_MULTILINE | wxSUNKEN_BORDER);
m_treeCtrl->GetItemsRecursively(root, -1);
}
+#ifndef NO_MULTIPLE_SELECTION
+
void MyFrame::OnDumpSelected(wxCommandEvent& WXUNUSED(event))
{
-#ifndef NO_ADVANCED_FEATURES
- 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; n<nos; ++n)
- wxLogMessage(m_treeCtrl->GetItemText(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();
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)
long style)
: wxTreeCtrl(parent, id, pos, size, style)
{
-#if (USE_TR_HAS_VARIABLE_ROW_HIGHT && wxUSE_LIBJPEG)
- wxImage::AddHandler(new wxJPEGHandler);
+#ifndef NO_VARIABLE_HEIGHT
+#if wxUSE_LIBJPEG
+ wxImage::AddHandler(new wxJPEGHandler);
wxImage image;
image.LoadFile(wxString("horse.jpg"), wxBITMAP_TYPE_JPEG );
+#endif
#endif
m_reverseSort = FALSE;
#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
+# ifndef NO_VARIABLE_HEIGHT
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
+# ifndef NO_VARIABLE_HEIGHT
m_imageListNormal->Add(image.ConvertToBitmap());
# else
m_imageListNormal->Add(wxICON(icon1));
else
str.Printf("%s child %d", "Folder", n + 1);
-// int image = depth == 1 ? TreeCtrlIcon_File : TreeCtrlIcon_Folder;
- int image = depth == 1 ? -1 : TreeCtrlIcon_Folder;
+ int image = depth == 1 ? TreeCtrlIcon_File : TreeCtrlIcon_Folder;
wxTreeItemId id = AppendItem(idParent, str, image, image,
new MyTreeItemData(str));
if(id <= 0)
return;
- wxString text=GetItemText(id);
+ wxString text = GetItemText(id);
wxLogMessage(text);
if (ItemHasChildren(id))
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) \