wxMSW::wxTreeCtrl has multiple selection too (somewhat documented)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3220 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
1999-07-30 22:45:55 +00:00
parent 717b9bf234
commit 9dfbf520eb
7 changed files with 433 additions and 151 deletions

View File

@@ -33,12 +33,13 @@
#include "math.h"
#include "treetest.h"
#ifdef __WXMSW__
#define NO_ADVANCED_FEATURES
//#define NO_MULTIPLE_SELECTION
#define NO_VARIABLE_HEIGHT
#endif
#include "treetest.h"
// under Windows the icons are in the .rc file
#ifndef __WXMSW__
#include "icon1.xpm"
@@ -59,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)
@@ -76,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)
@@ -153,14 +159,20 @@ 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");
#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 &not 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");
@@ -172,10 +184,8 @@ MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h)
wxDefaultPosition, wxDefaultSize,
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,
@@ -268,20 +278,33 @@ void MyFrame::OnDump(wxCommandEvent& WXUNUSED(event))
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();
@@ -370,6 +393,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)
@@ -379,7 +411,7 @@ MyTreeCtrl::MyTreeCtrl(wxWindow *parent, const wxWindowID id,
: wxTreeCtrl(parent, id, pos, size, style)
{
#if (USE_TR_HAS_VARIABLE_ROW_HIGHT && wxUSE_LIBJPEG)
wxImage::AddHandler(new wxJPEGHandler);
wxImage::AddHandler(new wxJPEGHandler);
wxImage image;
image.LoadFile(wxString("horse.jpg"), wxBITMAP_TYPE_JPEG );
@@ -450,8 +482,7 @@ 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 ? -1 : TreeCtrlIcon_Folder;
int image = depth == 1 ? TreeCtrlIcon_File : TreeCtrlIcon_Folder;
wxTreeItemId id = AppendItem(idParent, str, image, image,
new MyTreeItemData(str));
@@ -489,7 +520,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))
@@ -498,6 +529,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) \