#include "treetest.h"
-// under Windows the icons are in the .rc file
-#ifndef __WXMSW__
- #include "icon1.xpm"
- #include "icon2.xpm"
- #include "icon3.xpm"
- #include "icon4.xpm"
- #include "icon5.xpm"
- #include "mondrian.xpm"
-#endif
+#include "icon1.xpm"
+#include "icon2.xpm"
+#include "icon3.xpm"
+#include "icon4.xpm"
+#include "icon5.xpm"
+#include "mondrian.xpm"
+
// verify that the item is ok and insult the user if it is not
#define CHECK_ITEM( item ) if ( !item.IsOk() ) { \
MENU_LINK(Quit)
MENU_LINK(About)
+
MENU_LINK(TogButtons)
MENU_LINK(TogTwist)
MENU_LINK(TogLines)
MENU_LINK(TogFullHighlight)
MENU_LINK(SetFgColour)
MENU_LINK(SetBgColour)
+ MENU_LINK(ResetStyle)
+
MENU_LINK(Dump)
#ifndef NO_MULTIPLE_SELECTION
MENU_LINK(DumpSelected)
file_menu->AppendSeparator();
file_menu->Append(TreeTest_Quit, wxT("E&xit\tAlt-X"));
- style_menu->Append(TreeTest_TogButtons, "Toggle &normal buttons");
- style_menu->Append(TreeTest_TogTwist, "Toggle &twister buttons");
- style_menu->Append(TreeTest_ToggleButtons, "Toggle image &buttons");
+ style_menu->Append(TreeTest_TogButtons, "Toggle &normal buttons", _T(""), TRUE);
+ style_menu->Append(TreeTest_TogTwist, "Toggle &twister buttons", _T(""), TRUE);
+ style_menu->Append(TreeTest_ToggleButtons, "Toggle image &buttons", _T(""), TRUE);
style_menu->AppendSeparator();
- style_menu->Append(TreeTest_TogLines, "Toggle &connecting lines");
- style_menu->Append(TreeTest_TogRootLines, "Toggle &lines at root");
- style_menu->Append(TreeTest_TogHideRoot, "Toggle &hidden root");
- style_menu->Append(TreeTest_TogBorder, "Toggle &item border");
- style_menu->Append(TreeTest_TogFullHighlight, "Toggle &full row highlight");
- style_menu->Append(TreeTest_TogEdit, "Toggle &edit mode");
+ style_menu->Append(TreeTest_TogLines, "Toggle &connecting lines", _T(""), TRUE);
+ style_menu->Append(TreeTest_TogRootLines, "Toggle &lines at root", _T(""), TRUE);
+ style_menu->Append(TreeTest_TogHideRoot, "Toggle &hidden root", _T(""), TRUE);
+ style_menu->Append(TreeTest_TogBorder, "Toggle &item border", _T(""), TRUE);
+ style_menu->Append(TreeTest_TogFullHighlight, "Toggle &full row highlight", _T(""), TRUE);
+ style_menu->Append(TreeTest_TogEdit, "Toggle &edit mode", _T(""), TRUE);
#ifndef NO_MULTIPLE_SELECTION
- style_menu->Append(TreeTest_ToggleSel, wxT("Toggle &selection mode"));
+ style_menu->Append(TreeTest_ToggleSel, wxT("Toggle &selection mode"), _T(""), TRUE);
#endif // NO_MULTIPLE_SELECTION
- style_menu->Append(TreeTest_ToggleImages, wxT("Toggle show ima&ges"));
+ style_menu->Append(TreeTest_ToggleImages, wxT("Toggle show ima&ges"), _T(""), TRUE);
style_menu->Append(TreeTest_SetImageSize, wxT("Set image si&ze..."));
style_menu->AppendSeparator();
style_menu->Append(TreeTest_SetFgColour, wxT("Set &foreground colour..."));
style_menu->Append(TreeTest_SetBgColour, wxT("Set &background colour..."));
+ style_menu->AppendSeparator();
+ style_menu->Append(TreeTest_ResetStyle, wxT("&Reset to default\tF10"));
tree_menu->Append(TreeTest_Recreate, "&Recreate the tree");
tree_menu->Append(TreeTest_CollapseAndReset, "C&ollapse and reset");
menu_bar->Append(tree_menu, "&Tree");
menu_bar->Append(item_menu, "&Item");
SetMenuBar(menu_bar);
-
- //menu_bar->Check(TreeTest_ToggleImages, TRUE);
#endif // wxUSE_MENUS
- m_treeCtrl = new MyTreeCtrl(this, TreeTest_Ctrl,
- wxDefaultPosition, wxDefaultSize,
- wxTR_DEFAULT_STYLE | wxTR_EDIT_LABELS |
-#ifndef NO_VARIABLE_HEIGHT
- wxTR_HAS_VARIABLE_ROW_HEIGHT |
-#endif
- wxSUNKEN_BORDER);
-
+ // create the controls
m_textCtrl = new wxTextCtrl(this, -1, "",
wxDefaultPosition, wxDefaultSize,
wxTE_MULTILINE | wxSUNKEN_BORDER);
+ CreateTreeWithDefStyle();
+
+ menu_bar->Check(TreeTest_ToggleImages, TRUE);
+
// create a status bar with 3 panes
CreateStatusBar(3);
SetStatusText("", 0);
delete wxLog::SetActiveTarget(NULL);
}
-void MyFrame::TogStyle(long flag)
+void MyFrame::CreateTreeWithDefStyle()
{
- m_treeCtrl->SetWindowStyle(m_treeCtrl->GetWindowStyle() ^ flag);
+ long style = wxTR_DEFAULT_STYLE |
+#ifndef NO_VARIABLE_HEIGHT
+ wxTR_HAS_VARIABLE_ROW_HEIGHT |
+#endif
+ wxTR_EDIT_LABELS;
+
+ CreateTree(style | wxSUNKEN_BORDER);
+
+ // as we don't know what wxTR_DEFAULT_STYLE could contain, test for
+ // everything
+ wxMenuBar *mbar = GetMenuBar();
+ mbar->Check(TreeTest_TogButtons, (style & wxTR_HAS_BUTTONS) != 0);
+ mbar->Check(TreeTest_TogButtons, (style & wxTR_TWIST_BUTTONS) != 0);
+ mbar->Check(TreeTest_TogLines, (style & wxTR_NO_LINES) == 0);
+ mbar->Check(TreeTest_TogRootLines, (style & wxTR_LINES_AT_ROOT) != 0);
+ mbar->Check(TreeTest_TogHideRoot, (style & wxTR_HIDE_ROOT) != 0);
+ mbar->Check(TreeTest_TogEdit, (style & wxTR_EDIT_LABELS) != 0);
+ mbar->Check(TreeTest_TogBorder, (style & wxTR_ROW_LINES) != 0);
+ mbar->Check(TreeTest_TogFullHighlight, (style & wxTR_FULL_ROW_HIGHLIGHT) != 0);
+}
+
+void MyFrame::CreateTree(long style)
+{
+ m_treeCtrl = new MyTreeCtrl(this, TreeTest_Ctrl,
+ wxDefaultPosition, wxDefaultSize,
+ style);
+ Resize();
+}
+
+void MyFrame::TogStyle(int id, long flag)
+{
+ long style = m_treeCtrl->GetWindowStyle() ^ flag;
+
+ // most treectrl styles can't be changed on the fly using the native
+ // control and the tree must be recreated
+#ifndef __WXMSW__
+ m_treeCtrl->SetWindowStyle(style);
+#else // MSW
+ delete m_treeCtrl;
+ CreateTree(style);
+#endif // !MSW/MSW
+
+ GetMenuBar()->Check(id, (style & flag) != 0);
}
void MyFrame::OnSize(wxSizeEvent& event)
{
if ( m_treeCtrl && m_textCtrl )
{
- Resize(GetClientSize());
+ Resize();
}
event.Skip();
}
-void MyFrame::Resize(const wxSize& size)
+void MyFrame::Resize()
{
+ wxSize size = GetClientSize();
m_treeCtrl->SetSize(0, 0, size.x, 2*size.y/3);
m_textCtrl->SetSize(0, 2*size.y/3, size.x, size.y/3);
}
#ifndef NO_MULTIPLE_SELECTION
-void MyFrame::OnToggleSel(wxCommandEvent& WXUNUSED(event))
+void MyFrame::OnToggleSel(wxCommandEvent& event)
{
- TogStyle(wxTR_MULTIPLE);
-#if 0
- long style = m_treeCtrl->GetWindowStyle();
- if ( style & wxTR_MULTIPLE )
- style &= ~wxTR_MULTIPLE;
- else
- style |= wxTR_MULTIPLE;
-
- delete m_treeCtrl;
-
- m_treeCtrl = new MyTreeCtrl(this, TreeTest_Ctrl,
- wxDefaultPosition, wxDefaultSize,
- style);
- Resize(GetClientSize());
-#endif
+ TogStyle(event.GetId(), wxTR_MULTIPLE);
}
void MyFrame::OnDumpSelected(wxCommandEvent& WXUNUSED(event))
wxImageList *images = new wxImageList(size, size, TRUE);
// should correspond to TreeCtrlIcon_xxx enum
-#if defined(__WXMSW__) && defined(__WIN16__)
- images->Add(wxBitmap("bitmap1", wxBITMAP_TYPE_BMP_RESOURCE));
- images->Add(wxBitmap("bitmap2", wxBITMAP_TYPE_BMP_RESOURCE));
- images->Add(wxBitmap("bitmap3", wxBITMAP_TYPE_BMP_RESOURCE));
- images->Add(wxBitmap("bitmap4", wxBITMAP_TYPE_BMP_RESOURCE));
- images->Add(wxBitmap("bitmap5", wxBITMAP_TYPE_BMP_RESOURCE));
-#else // !MSW
wxBusyCursor wait;
wxIcon icons[5];
- icons[0] = wxICON(icon1);
- icons[1] = wxICON(icon2);
- icons[2] = wxICON(icon3);
- icons[3] = wxICON(icon4);
- icons[4] = wxICON(icon5);
+ 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();
for ( size_t i = 0; i < WXSIZEOF(icons); i++ )
}
else
{
- images->Add(wxImage(icons[i]).Rescale(size, size).
- ConvertToBitmap());
+ images->Add(wxBitmap(wxBitmap(icons[i]).ConvertToImage().Rescale(size, size)));
}
}
-#endif // MSW/!MSW
AssignImageList(images);
}
wxImageList *images = new wxImageList(size, size, TRUE);
// should correspond to TreeCtrlIcon_xxx enum
-#if defined(__WXMSW__) && defined(__WIN16__)
- images->Add(wxBitmap("bitmap1", wxBITMAP_TYPE_BMP_RESOURCE));
- images->Add(wxBitmap("bitmap2", wxBITMAP_TYPE_BMP_RESOURCE));
- images->Add(wxBitmap("bitmap3", wxBITMAP_TYPE_BMP_RESOURCE));
- images->Add(wxBitmap("bitmap4", wxBITMAP_TYPE_BMP_RESOURCE));
- images->Add(wxBitmap("bitmap5", wxBITMAP_TYPE_BMP_RESOURCE));
-#else // !MSW
wxBusyCursor wait;
wxIcon icons[4];
- icons[0] = wxICON(icon3); // closed
- icons[1] = wxICON(icon3); // closed, selected
- icons[2] = wxICON(icon5); // open
- icons[3] = wxICON(icon5); // open, selected
+ 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++ )
{
}
else
{
- images->Add(wxImage(icons[i]).Rescale(size, size).
- ConvertToBitmap());
+ images->Add(wxBitmap(icons[i].ConvertToImage().Rescale(size, size)));
}
}
-#endif // MSW/!MSW
AssignButtonsImageList(images);
#endif
TREE_EVENT_HANDLER(OnItemCollapsed)
TREE_EVENT_HANDLER(OnSelChanged)
TREE_EVENT_HANDLER(OnSelChanging)
-TREE_EVENT_HANDLER(OnTreeKeyDown)
#undef TREE_EVENT_HANDLER
+void LogKeyEvent(const wxChar *name, const wxKeyEvent& event)
+{
+ wxString key;
+ long keycode = event.KeyCode();
+ {
+ switch ( keycode )
+ {
+ case WXK_BACK: key = "BACK"; break;
+ case WXK_TAB: key = "TAB"; break;
+ case WXK_RETURN: key = "RETURN"; break;
+ case WXK_ESCAPE: key = "ESCAPE"; break;
+ case WXK_SPACE: key = "SPACE"; break;
+ case WXK_DELETE: key = "DELETE"; break;
+ case WXK_START: key = "START"; break;
+ case WXK_LBUTTON: key = "LBUTTON"; break;
+ case WXK_RBUTTON: key = "RBUTTON"; break;
+ case WXK_CANCEL: key = "CANCEL"; break;
+ case WXK_MBUTTON: key = "MBUTTON"; break;
+ case WXK_CLEAR: key = "CLEAR"; break;
+ case WXK_SHIFT: key = "SHIFT"; break;
+ case WXK_ALT: key = "ALT"; break;
+ case WXK_CONTROL: key = "CONTROL"; break;
+ case WXK_MENU: key = "MENU"; break;
+ case WXK_PAUSE: key = "PAUSE"; break;
+ case WXK_CAPITAL: key = "CAPITAL"; break;
+ case WXK_PRIOR: key = "PRIOR"; break;
+ case WXK_NEXT: key = "NEXT"; break;
+ case WXK_END: key = "END"; break;
+ case WXK_HOME: key = "HOME"; break;
+ case WXK_LEFT: key = "LEFT"; break;
+ case WXK_UP: key = "UP"; break;
+ case WXK_RIGHT: key = "RIGHT"; break;
+ case WXK_DOWN: key = "DOWN"; break;
+ case WXK_SELECT: key = "SELECT"; break;
+ case WXK_PRINT: key = "PRINT"; break;
+ case WXK_EXECUTE: key = "EXECUTE"; break;
+ case WXK_SNAPSHOT: key = "SNAPSHOT"; break;
+ case WXK_INSERT: key = "INSERT"; break;
+ case WXK_HELP: key = "HELP"; break;
+ case WXK_NUMPAD0: key = "NUMPAD0"; break;
+ case WXK_NUMPAD1: key = "NUMPAD1"; break;
+ case WXK_NUMPAD2: key = "NUMPAD2"; break;
+ case WXK_NUMPAD3: key = "NUMPAD3"; break;
+ case WXK_NUMPAD4: key = "NUMPAD4"; break;
+ case WXK_NUMPAD5: key = "NUMPAD5"; break;
+ case WXK_NUMPAD6: key = "NUMPAD6"; break;
+ case WXK_NUMPAD7: key = "NUMPAD7"; break;
+ case WXK_NUMPAD8: key = "NUMPAD8"; break;
+ case WXK_NUMPAD9: key = "NUMPAD9"; break;
+ case WXK_MULTIPLY: key = "MULTIPLY"; break;
+ case WXK_ADD: key = "ADD"; break;
+ case WXK_SEPARATOR: key = "SEPARATOR"; break;
+ case WXK_SUBTRACT: key = "SUBTRACT"; break;
+ case WXK_DECIMAL: key = "DECIMAL"; break;
+ case WXK_DIVIDE: key = "DIVIDE"; break;
+ case WXK_F1: key = "F1"; break;
+ case WXK_F2: key = "F2"; break;
+ case WXK_F3: key = "F3"; break;
+ case WXK_F4: key = "F4"; break;
+ case WXK_F5: key = "F5"; break;
+ case WXK_F6: key = "F6"; break;
+ case WXK_F7: key = "F7"; break;
+ case WXK_F8: key = "F8"; break;
+ case WXK_F9: key = "F9"; break;
+ case WXK_F10: key = "F10"; break;
+ case WXK_F11: key = "F11"; break;
+ case WXK_F12: key = "F12"; break;
+ case WXK_F13: key = "F13"; break;
+ case WXK_F14: key = "F14"; break;
+ case WXK_F15: key = "F15"; break;
+ case WXK_F16: key = "F16"; break;
+ case WXK_F17: key = "F17"; break;
+ case WXK_F18: key = "F18"; break;
+ case WXK_F19: key = "F19"; break;
+ case WXK_F20: key = "F20"; break;
+ case WXK_F21: key = "F21"; break;
+ case WXK_F22: key = "F22"; break;
+ case WXK_F23: key = "F23"; break;
+ case WXK_F24: key = "F24"; break;
+ case WXK_NUMLOCK: key = "NUMLOCK"; break;
+ case WXK_SCROLL: key = "SCROLL"; break;
+ case WXK_PAGEUP: key = "PAGEUP"; break;
+ case WXK_PAGEDOWN: key = "PAGEDOWN"; break;
+ case WXK_NUMPAD_SPACE: key = "NUMPAD_SPACE"; break;
+ case WXK_NUMPAD_TAB: key = "NUMPAD_TAB"; break;
+ case WXK_NUMPAD_ENTER: key = "NUMPAD_ENTER"; break;
+ case WXK_NUMPAD_F1: key = "NUMPAD_F1"; break;
+ case WXK_NUMPAD_F2: key = "NUMPAD_F2"; break;
+ case WXK_NUMPAD_F3: key = "NUMPAD_F3"; break;
+ case WXK_NUMPAD_F4: key = "NUMPAD_F4"; break;
+ case WXK_NUMPAD_HOME: key = "NUMPAD_HOME"; break;
+ case WXK_NUMPAD_LEFT: key = "NUMPAD_LEFT"; break;
+ case WXK_NUMPAD_UP: key = "NUMPAD_UP"; break;
+ case WXK_NUMPAD_RIGHT: key = "NUMPAD_RIGHT"; break;
+ case WXK_NUMPAD_DOWN: key = "NUMPAD_DOWN"; break;
+ case WXK_NUMPAD_PRIOR: key = "NUMPAD_PRIOR"; break;
+ case WXK_NUMPAD_PAGEUP: key = "NUMPAD_PAGEUP"; break;
+ case WXK_NUMPAD_PAGEDOWN: key = "NUMPAD_PAGEDOWN"; break;
+ case WXK_NUMPAD_END: key = "NUMPAD_END"; break;
+ case WXK_NUMPAD_BEGIN: key = "NUMPAD_BEGIN"; break;
+ case WXK_NUMPAD_INSERT: key = "NUMPAD_INSERT"; break;
+ case WXK_NUMPAD_DELETE: key = "NUMPAD_DELETE"; break;
+ case WXK_NUMPAD_EQUAL: key = "NUMPAD_EQUAL"; break;
+ case WXK_NUMPAD_MULTIPLY: key = "NUMPAD_MULTIPLY"; break;
+ case WXK_NUMPAD_ADD: key = "NUMPAD_ADD"; break;
+ case WXK_NUMPAD_SEPARATOR: key = "NUMPAD_SEPARATOR"; break;
+ case WXK_NUMPAD_SUBTRACT: key = "NUMPAD_SUBTRACT"; break;
+ case WXK_NUMPAD_DECIMAL: key = "NUMPAD_DECIMAL"; break;
+
+ default:
+ {
+ if ( wxIsprint((int)keycode) )
+ key.Printf(_T("'%c'"), (char)keycode);
+ else if ( keycode > 0 && keycode < 27 )
+ key.Printf(_("Ctrl-%c"), _T('A') + keycode - 1);
+ else
+ key.Printf(_T("unknown (%ld)"), keycode);
+ }
+ }
+ }
+
+ wxLogMessage( _T("%s event: %s (flags = %c%c%c%c)"),
+ name,
+ key.c_str(),
+ event.ControlDown() ? _T('C') : _T('-'),
+ event.AltDown() ? _T('A') : _T('-'),
+ event.ShiftDown() ? _T('S') : _T('-'),
+ event.MetaDown() ? _T('M') : _T('-'));
+}
+
+void MyTreeCtrl::OnTreeKeyDown(wxTreeEvent& event)
+{
+ LogKeyEvent(_T("Tree key down "), event.GetKeyEvent());
+
+ event.Skip();
+}
+
void MyTreeCtrl::OnBeginDrag(wxTreeEvent& event)
{
// need to explicitly allow drag
// don't allow anything except letters in the labels
if ( !event.GetLabel().IsWord() )
{
- wxMessageBox(wxT("The label should contain only letters."));
+ wxMessageBox(wxT("The new label should be a single word."));
event.Veto();
}