#include "wx/colordlg.h"
#include "wx/numdlg.h"
+#include "wx/artprov.h"
#include "wx/image.h"
#include "wx/imaglist.h"
#include "wx/treectrl.h"
MENU_LINK(Quit)
MENU_LINK(About)
+ MENU_LINK(ClearLog)
MENU_LINK(TogButtons)
MENU_LINK(TogTwist)
MENU_LINK(DeleteAll)
MENU_LINK(Recreate)
MENU_LINK(ToggleImages)
+ MENU_LINK(ToggleAlternateImages)
MENU_LINK(ToggleButtons)
MENU_LINK(SetImageSize)
MENU_LINK(CollapseAndReset)
MENU_LINK(DecSpacing)
MENU_LINK(ToggleIcon)
MENU_LINK(SelectRoot)
+
+ MENU_LINK(ShowFirstVisible)
+#ifdef wxHAS_LAST_VISIBLE
+ MENU_LINK(ShowLastVisible)
+#endif // wxHAS_LAST_VISIBLE
+ MENU_LINK(ShowNextVisible)
+ MENU_LINK(ShowPrevVisible)
#undef MENU_LINK
END_EVENT_TABLE()
EVT_TREE_KEY_DOWN(TreeTest_Ctrl, MyTreeCtrl::OnTreeKeyDown)
EVT_TREE_ITEM_ACTIVATED(TreeTest_Ctrl, MyTreeCtrl::OnItemActivated)
- // so many differents ways to handle right mouse button clicks...
+ // so many different ways to handle right mouse button clicks...
EVT_CONTEXT_MENU(MyTreeCtrl::OnContextMenu)
// EVT_TREE_ITEM_MENU is the preferred event for creating context menus
// on a tree control, because it includes the point of the click or item,
*tree_menu = new wxMenu,
*item_menu = new wxMenu;
+ file_menu->Append(TreeTest_ClearLog, wxT("&Clear log\tCtrl-L"));
+ file_menu->AppendSeparator();
file_menu->Append(TreeTest_About, wxT("&About..."));
file_menu->AppendSeparator();
file_menu->Append(TreeTest_Quit, wxT("E&xit\tAlt-X"));
style_menu->AppendCheckItem(TreeTest_TogFullHighlight, wxT("Toggle &full row highlight"));
style_menu->AppendCheckItem(TreeTest_TogEdit, wxT("Toggle &edit mode"));
#ifndef NO_MULTIPLE_SELECTION
- style_menu->AppendCheckItem(TreeTest_ToggleSel, wxT("Toggle &selection mode"));
+ style_menu->AppendCheckItem(TreeTest_ToggleSel, wxT("Toggle &selection mode\tCtrl-S"));
#endif // NO_MULTIPLE_SELECTION
style_menu->AppendCheckItem(TreeTest_ToggleImages, wxT("Toggle show ima&ges"));
+ style_menu->AppendCheckItem(TreeTest_ToggleAlternateImages, wxT("Toggle alternate images"));
style_menu->Append(TreeTest_SetImageSize, wxT("Set image si&ze..."));
style_menu->AppendSeparator();
style_menu->Append(TreeTest_SetFgColour, wxT("Set &foreground colour..."));
item_menu->Append(TreeTest_ClearBold, wxT("Make item ¬ bold"));
item_menu->AppendSeparator();
item_menu->Append(TreeTest_ToggleIcon, wxT("Toggle the item's &icon"));
+ item_menu->AppendSeparator();
+ item_menu->Append(TreeTest_ShowFirstVisible, wxT("Show &first visible"));
+#ifdef wxHAS_LAST_VISIBLE
+ item_menu->Append(TreeTest_ShowLastVisible, wxT("Show &last visible"));
+#endif // wxHAS_LAST_VISIBLE
+ item_menu->Append(TreeTest_ShowNextVisible, wxT("Show &next visible"));
+ item_menu->Append(TreeTest_ShowPrevVisible, wxT("Show &previous visible"));
#ifndef NO_MULTIPLE_SELECTION
item_menu->AppendSeparator();
CreateTreeWithDefStyle();
menu_bar->Check(TreeTest_ToggleImages, true);
+ menu_bar->Check(TreeTest_ToggleAlternateImages, false);
#if wxUSE_STATUSBAR
// create a status bar
m_treeCtrl = new MyTreeCtrl(m_panel, TreeTest_Ctrl,
wxDefaultPosition, wxDefaultSize,
style);
+
+ GetMenuBar()->Enable(TreeTest_SelectRoot, !(style & wxTR_HIDE_ROOT));
+
Resize();
}
{
wxSize size = GetClientSize();
m_treeCtrl->SetSize(0, 0, size.x, size.y
-#if !wxUSE_LOG
- );
-#else
+#if wxUSE_LOG
*2/3);
- m_textCtrl->SetSize(0, 2*size.y/3, size.x, size.y/3);
+ m_textCtrl->SetSize(0, 2*size.y/3, size.x, size.y/3
#endif
+ );
}
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
wxOK | wxICON_INFORMATION, this);
}
+void MyFrame::OnClearLog(wxCommandEvent& WXUNUSED(event))
+{
+ m_textCtrl->Clear();
+}
+
void MyFrame::OnRename(wxCommandEvent& WXUNUSED(event))
{
wxTreeItemId item = m_treeCtrl->GetSelection();
void MyFrame::OnSelectRoot(wxCommandEvent& WXUNUSED(event))
{
- m_treeCtrl->SelectItem(m_treeCtrl->GetRootItem());
+ if ( !m_treeCtrl->HasFlag(wxTR_HIDE_ROOT) )
+ m_treeCtrl->SelectItem(m_treeCtrl->GetRootItem());
}
void MyFrame::OnUnselect(wxCommandEvent& WXUNUSED(event))
}
}
+void MyFrame::OnToggleAlternateImages(wxCommandEvent& WXUNUSED(event))
+{
+ bool alternateImages = m_treeCtrl->AlternateImages();
+
+ m_treeCtrl->SetAlternateImages(!alternateImages);
+ m_treeCtrl->CreateImageList(0);
+}
+
void MyFrame::OnToggleButtons(wxCommandEvent& WXUNUSED(event))
{
#if USE_GENERIC_TREECTRL || !defined(__WXMSW__)
m_treeCtrl->DoToggleIcon(item);
}
+void MyFrame::DoShowFirstOrLast(TreeFunc0_t pfn, const wxString& label)
+{
+ const wxTreeItemId item = (m_treeCtrl->*pfn)();
+
+ if ( !item.IsOk() )
+ wxLogMessage("There is no %s item", label);
+ else
+ wxLogMessage("The %s item is \"%s\"",
+ label, m_treeCtrl->GetItemText(item));
+}
+
+void MyFrame::DoShowNextOrPrev(TreeFunc1_t pfn, const wxString& label)
+{
+ wxTreeItemId item = m_treeCtrl->GetSelection();
+
+ CHECK_ITEM( item );
+
+ if ( !m_treeCtrl->IsVisible(item) )
+ {
+ wxLogMessage("The selected item must be visible.");
+ return;
+ }
+
+ item = (m_treeCtrl->*pfn)(item);
+
+ if ( !item.IsOk() )
+ wxLogMessage("There is no %s item", label);
+ else
+ wxLogMessage("The %s item is \"%s\"",
+ label, m_treeCtrl->GetItemText(item));
+}
+
void MyFrame::OnSetFgColour(wxCommandEvent& WXUNUSED(event))
{
wxColour col = wxGetColourFromUser(this, m_treeCtrl->GetForegroundColour());
MyTreeCtrl::MyTreeCtrl(wxWindow *parent, const wxWindowID id,
const wxPoint& pos, const wxSize& size,
long style)
- : wxTreeCtrl(parent, id, pos, size, style)
+ : wxTreeCtrl(parent, id, pos, size, style),
+ m_alternateImages(false)
{
m_reverseSort = false;
// should correspond to TreeCtrlIcon_xxx enum
wxBusyCursor wait;
wxIcon icons[5];
- icons[0] = wxIcon(icon1_xpm);
- icons[1] = wxIcon(icon2_xpm);
- icons[2] = wxIcon(icon3_xpm);
- icons[3] = wxIcon(icon4_xpm);
- icons[4] = wxIcon(icon5_xpm);
- int sizeOrig = icons[0].GetWidth();
+ if (m_alternateImages)
+ {
+ icons[TreeCtrlIcon_File] = wxIcon(icon1_xpm);
+ icons[TreeCtrlIcon_FileSelected] = wxIcon(icon2_xpm);
+ icons[TreeCtrlIcon_Folder] = wxIcon(icon3_xpm);
+ icons[TreeCtrlIcon_FolderSelected] = wxIcon(icon4_xpm);
+ icons[TreeCtrlIcon_FolderOpened] = wxIcon(icon5_xpm);
+ }
+ else
+ {
+ wxSize iconSize(size, size);
+
+ icons[TreeCtrlIcon_File] =
+ icons[TreeCtrlIcon_FileSelected] = wxArtProvider::GetIcon(wxART_NORMAL_FILE, wxART_LIST, iconSize);
+ icons[TreeCtrlIcon_Folder] =
+ icons[TreeCtrlIcon_FolderSelected] =
+ icons[TreeCtrlIcon_FolderOpened] = wxArtProvider::GetIcon(wxART_FOLDER, wxART_LIST, iconSize);
+ }
+
for ( size_t i = 0; i < WXSIZEOF(icons); i++ )
{
+ int sizeOrig = icons[0].GetWidth();
if ( size == sizeOrig )
{
images->Add(icons[i]);
// should correspond to TreeCtrlIcon_xxx enum
wxBusyCursor wait;
wxIcon icons[4];
- icons[0] = wxIcon(icon3_xpm); // closed
- icons[1] = wxIcon(icon3_xpm); // closed, selected
- icons[2] = wxIcon(icon5_xpm); // open
- icons[3] = wxIcon(icon5_xpm); // open, selected
- for ( size_t i = 0; i < WXSIZEOF(icons); i++ )
+ if (m_alternateImages)
+ {
+ icons[0] = wxIcon(icon3_xpm); // closed
+ icons[1] = wxIcon(icon3_xpm); // closed, selected
+ icons[2] = wxIcon(icon5_xpm); // open
+ icons[3] = wxIcon(icon5_xpm); // open, selected
+ }
+ else
+ {
+ wxSize iconSize(size, size);
+
+ icons[0] = // closed
+ icons[1] = wxArtProvider::GetIcon(wxART_FOLDER, wxART_LIST, iconSize); // closed, selected
+ icons[2] = // open
+ icons[3] = wxArtProvider::GetIcon(wxART_FOLDER_OPEN, wxART_LIST, iconSize);// open, selected
+ }
+
+ for ( size_t i = 0; i < WXSIZEOF(icons); i++ )
{
int sizeOrig = icons[i].GetWidth();
if ( size == sizeOrig )
wxTreeItemId rootId = AddRoot(wxT("Root"),
image, image,
new MyTreeItemData(wxT("Root item")));
- if ( image != -1 )
+ if ( !HasFlag(wxTR_HIDE_ROOT) && image != -1 )
{
SetItemImage(rootId, TreeCtrlIcon_FolderOpened, wxTreeItemIcon_Expanded);
}
AddItemsRecursively(rootId, numChildren, depth, 0);
// set some colours/fonts for testing
- SetItemFont(rootId, *wxITALIC_FONT);
+ if ( !HasFlag(wxTR_HIDE_ROOT) )
+ SetItemFont(rootId, *wxITALIC_FONT);
wxTreeItemIdValue cookie;
wxTreeItemId id = GetFirstChild(rootId, cookie);