X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/94f52d90c97b067b4626cc4cd6ac46a71fa54484..a4830bb56087db30c534dc6937242b2260d0a9c8:/samples/treectrl/treetest.h diff --git a/samples/treectrl/treetest.h b/samples/treectrl/treetest.h index fd921e2f64..a798f292f4 100644 --- a/samples/treectrl/treetest.h +++ b/samples/treectrl/treetest.h @@ -1,120 +1,378 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: treetest.h +// Name: treectrl.h // Purpose: wxTreeCtrl sample // Author: Julian Smart // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Copyright: (c) Julian Smart +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// +#define USE_GENERIC_TREECTRL 0 + +#if USE_GENERIC_TREECTRL +#include "wx/generic/treectlg.h" +#ifndef wxTreeCtrl +#define wxTreeCtrl wxGenericTreeCtrl +#define sm_classwxTreeCtrl sm_classwxGenericTreeCtrl +#endif +#endif + // Define a new application type class MyApp : public wxApp { public: - bool OnInit(); + MyApp() { m_showImages = true; m_showStates = true; m_showButtons = false; } + + bool OnInit(); + + void SetShowImages(bool show) { m_showImages = show; } + bool ShowImages() const { return m_showImages; } + + void SetShowStates(bool show) { m_showStates = show; } + bool ShowStates() const { return m_showStates; } + + void SetShowButtons(bool show) { m_showButtons = show; } + bool ShowButtons() const { return m_showButtons; } + +private: + bool m_showImages, m_showStates, m_showButtons; }; class MyTreeItemData : public wxTreeItemData { public: - MyTreeItemData(const wxString& desc) : m_desc(desc) { } + MyTreeItemData(const wxString& desc) : m_desc(desc) { } - void ShowInfo(wxTreeCtrl *tree); + void ShowInfo(wxTreeCtrl *tree); + const wxChar *GetDesc() const { return m_desc.c_str(); } private: - wxString m_desc; + wxString m_desc; }; class MyTreeCtrl : public wxTreeCtrl { public: - enum - { - TreeCtrlIcon_File, - TreeCtrlIcon_Folder - }; - - MyTreeCtrl(wxWindow *parent, const wxWindowID id, - const wxPoint& pos, const wxSize& size, - long style); - virtual ~MyTreeCtrl(); - - void OnBeginDrag(wxTreeEvent& event); - void OnBeginRDrag(wxTreeEvent& event); - void OnBeginLabelEdit(wxTreeEvent& event); - void OnEndLabelEdit(wxTreeEvent& event); - void OnDeleteItem(wxTreeEvent& event); - void OnGetInfo(wxTreeEvent& event); - void OnSetInfo(wxTreeEvent& event); - void OnItemExpanded(wxTreeEvent& event); - void OnItemExpanding(wxTreeEvent& event); - void OnItemCollapsed(wxTreeEvent& event); - void OnItemCollapsing(wxTreeEvent& event); - void OnSelChanged(wxTreeEvent& event); - void OnSelChanging(wxTreeEvent& event); - void OnTreeKeyDown(wxKeyEvent& event); - - void GetItemsRecursively(const wxTreeItemId& idParent, long cookie); - - void AddTestItemsToTree(size_t numChildren, - size_t depth); + enum + { + TreeCtrlIcon_File, + TreeCtrlIcon_FileSelected, + TreeCtrlIcon_Folder, + TreeCtrlIcon_FolderSelected, + TreeCtrlIcon_FolderOpened + }; + + MyTreeCtrl() { m_alternateImages = false; m_alternateStates = false; } + MyTreeCtrl(wxWindow *parent, const wxWindowID id, + const wxPoint& pos, const wxSize& size, + long style); + virtual ~MyTreeCtrl(){}; + + void OnBeginDrag(wxTreeEvent& event); + void OnBeginRDrag(wxTreeEvent& event); + void OnEndDrag(wxTreeEvent& event); + void OnBeginLabelEdit(wxTreeEvent& event); + void OnEndLabelEdit(wxTreeEvent& event); + void OnDeleteItem(wxTreeEvent& event); + void OnContextMenu(wxContextMenuEvent& event); + void OnItemMenu(wxTreeEvent& event); + void OnGetInfo(wxTreeEvent& event); + void OnSetInfo(wxTreeEvent& event); + void OnItemExpanded(wxTreeEvent& event); + void OnItemExpanding(wxTreeEvent& event); + void OnItemCollapsed(wxTreeEvent& event); + void OnItemCollapsing(wxTreeEvent& event); + void OnSelChanged(wxTreeEvent& event); + void OnSelChanging(wxTreeEvent& event); + void OnTreeKeyDown(wxTreeEvent& event); + void OnItemActivated(wxTreeEvent& event); + void OnItemStateClick(wxTreeEvent& event); + void OnItemRClick(wxTreeEvent& event); + + void OnRMouseDown(wxMouseEvent& event); + void OnRMouseUp(wxMouseEvent& event); + void OnRMouseDClick(wxMouseEvent& event); + + void GetItemsRecursively(const wxTreeItemId& idParent, + wxTreeItemIdValue cookie = 0); + + void CreateImageList(int size = 16); + void CreateButtonsImageList(int size = 11); + void CreateStateImageList(bool del = false); + + void AddTestItemsToTree(size_t numChildren, size_t depth); + + void DoSortChildren(const wxTreeItemId& item, bool reverse = false) + { m_reverseSort = reverse; wxTreeCtrl::SortChildren(item); } + void DoEnsureVisible() { if (m_lastItem.IsOk()) EnsureVisible(m_lastItem); } + + void DoToggleIcon(const wxTreeItemId& item); + void DoToggleState(const wxTreeItemId& item); + + void ShowMenu(wxTreeItemId id, const wxPoint& pt); + + int ImageSize(void) const { return m_imageSize; } + + void SetLastItem(wxTreeItemId id) { m_lastItem = id; } + + void SetAlternateImages(bool show) { m_alternateImages = show; } + bool AlternateImages() const { return m_alternateImages; } + + void SetAlternateStates(bool show) { m_alternateStates = show; } + bool AlternateStates() const { return m_alternateStates; } + + void ResetBrokenStateImages() + { + const size_t count = GetStateImageList()->GetImageCount(); + int state = count > 0 ? count - 1 : wxTREE_ITEMSTATE_NONE; + DoResetBrokenStateImages(GetRootItem(), 0, state); + } + +protected: + virtual int OnCompareItems(const wxTreeItemId& i1, const wxTreeItemId& i2); + + // is this the test item which we use in several event handlers? + bool IsTestItem(const wxTreeItemId& item) + { + // the test item is the first child folder + return GetItemParent(item) == GetRootItem() && !GetPrevSibling(item); + } private: - void AddItemsRecursively(const wxTreeItemId& idParent, - size_t nChildren, - size_t depth, - size_t folder); + void AddItemsRecursively(const wxTreeItemId& idParent, + size_t nChildren, + size_t depth, + size_t folder); - wxImageList *m_imageListNormal; + void DoResetBrokenStateImages(const wxTreeItemId& idParent, + wxTreeItemIdValue cookie, int state); - DECLARE_EVENT_TABLE() + void LogEvent(const wxChar *name, const wxTreeEvent& event); + + int m_imageSize; // current size of images + bool m_reverseSort; // flag for OnCompareItems + wxTreeItemId m_lastItem, // for OnEnsureVisible() + m_draggedItem; // item being dragged right now + bool m_alternateImages; + bool m_alternateStates; + + // NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS() + // if you want your overloaded OnCompareItems() to be called. + // OTOH, if you don't want it you may omit the next line - this will + // make default (alphabetical) sorting much faster under wxMSW. + DECLARE_DYNAMIC_CLASS(MyTreeCtrl) + DECLARE_EVENT_TABLE() }; // Define a new frame type class MyFrame: public wxFrame { public: - // ctor and dtor - MyFrame(const wxString& title, int x, int y, int w, int h); - virtual ~MyFrame(); + // ctor and dtor + MyFrame(const wxString& title, int x, int y, int w, int h); + virtual ~MyFrame(); + + // menu callbacks + void OnQuit(wxCommandEvent& event); + void OnAbout(wxCommandEvent& event); + void OnClearLog(wxCommandEvent& event); - // menu callbacks - void OnQuit(wxCommandEvent& event); - void OnAbout(wxCommandEvent& event); - void OnDump(wxCommandEvent& event); - void OnDelete(wxCommandEvent& event); - void OnDeleteAll(wxCommandEvent& event); - void OnRecreate(wxCommandEvent& event); + void OnTogButtons(wxCommandEvent& event) + { TogStyle(event.GetId(), wxTR_HAS_BUTTONS); } + void OnTogTwist(wxCommandEvent& event) + { TogStyle(event.GetId(), wxTR_TWIST_BUTTONS); } + void OnTogLines(wxCommandEvent& event) + { TogStyle(event.GetId(), wxTR_NO_LINES); } + void OnTogEdit(wxCommandEvent& event) + { TogStyle(event.GetId(), wxTR_EDIT_LABELS); } + void OnTogHideRoot(wxCommandEvent& event) + { TogStyle(event.GetId(), wxTR_HIDE_ROOT); } + void OnTogRootLines(wxCommandEvent& event) + { TogStyle(event.GetId(), wxTR_LINES_AT_ROOT); } + void OnTogBorder(wxCommandEvent& event) + { TogStyle(event.GetId(), wxTR_ROW_LINES); } + void OnTogFullHighlight(wxCommandEvent& event) + { TogStyle(event.GetId(), wxTR_FULL_ROW_HIGHLIGHT); } - void OnSetBold(wxCommandEvent& WXUNUSED(event)) { DoSetBold(TRUE); } - void OnClearBold(wxCommandEvent& WXUNUSED(event)) { DoSetBold(FALSE); } + void OnResetStyle(wxCommandEvent& WXUNUSED(event)) + { CreateTreeWithDefStyle(); } + + void OnSetFgColour(wxCommandEvent& event); + void OnSetBgColour(wxCommandEvent& event); + + void OnHighlight(wxCommandEvent& event); + void OnDump(wxCommandEvent& event); +#ifndef NO_MULTIPLE_SELECTION + void OnDumpSelected(wxCommandEvent& event); + void OnSelect(wxCommandEvent& event); + void OnUnselect(wxCommandEvent& event); + void OnToggleSel(wxCommandEvent& event); + void OnSelectChildren(wxCommandEvent& event); +#endif // NO_MULTIPLE_SELECTION + void OnSelectRoot(wxCommandEvent& event); + void OnSetFocusedRoot(wxCommandEvent& event); + void OnClearFocused(wxCommandEvent& event); + void OnDelete(wxCommandEvent& event); + void OnDeleteChildren(wxCommandEvent& event); + void OnDeleteAll(wxCommandEvent& event); + + void OnRecreate(wxCommandEvent& event); + void OnToggleButtons(wxCommandEvent& event); + void OnToggleImages(wxCommandEvent& event); + void OnToggleStates(wxCommandEvent& event); + void OnToggleBell(wxCommandEvent& event); + void OnToggleAlternateImages(wxCommandEvent& event); + void OnToggleAlternateStates(wxCommandEvent& event); + void OnSetImageSize(wxCommandEvent& event); + void OnCollapseAndReset(wxCommandEvent& event); + + void OnSetBold(wxCommandEvent& WXUNUSED(event)) { DoSetBold(true); } + void OnClearBold(wxCommandEvent& WXUNUSED(event)) { DoSetBold(false); } + + void OnEnsureVisible(wxCommandEvent& event); + void OnSetFocus(wxCommandEvent& event); + + void OnCount(wxCommandEvent& event); + void OnCountRec(wxCommandEvent& event); + + void OnRename(wxCommandEvent& event); + void OnSort(wxCommandEvent& WXUNUSED(event)) { DoSort(); } + void OnSortRev(wxCommandEvent& WXUNUSED(event)) { DoSort(true); } + + void OnAddItem(wxCommandEvent& event); + void OnAddManyItems(wxCommandEvent& event); + void OnInsertItem(wxCommandEvent& event); + + void OnIncIndent(wxCommandEvent& event); + void OnDecIndent(wxCommandEvent& event); + + void OnIncSpacing(wxCommandEvent& event); + void OnDecSpacing(wxCommandEvent& event); + + void OnToggleIcon(wxCommandEvent& event); + void OnToggleState(wxCommandEvent& event); + + void OnShowFirstVisible(wxCommandEvent& WXUNUSED(event)) + { DoShowFirstOrLast(&wxTreeCtrl::GetFirstVisibleItem, "first visible"); } +#ifdef wxHAS_LAST_VISIBLE // we don't have it currently but may add later + void OnShowLastVisible(wxCommandEvent& WXUNUSED(event)) + { DoShowFirstOrLast(&wxTreeCtrl::GetLastVisibleItem, "last visible"); } +#endif // wxHAS_LAST_VISIBLE + + void OnShowNextVisible(wxCommandEvent& WXUNUSED(event)) + { DoShowRelativeItem(&wxTreeCtrl::GetNextVisible, "next visible"); } + void OnShowPrevVisible(wxCommandEvent& WXUNUSED(event)) + { DoShowRelativeItem(&wxTreeCtrl::GetPrevVisible, "previous visible"); } + + void OnShowParent(wxCommandEvent& WXUNUSED(event)) + { DoShowRelativeItem(&wxTreeCtrl::GetItemParent, "parent"); } + void OnShowPrevSibling(wxCommandEvent& WXUNUSED(event)) + { DoShowRelativeItem(&wxTreeCtrl::GetPrevSibling, "previous sibling"); } + void OnShowNextSibling(wxCommandEvent& WXUNUSED(event)) + { DoShowRelativeItem(&wxTreeCtrl::GetNextSibling, "next sibling"); } + + void OnScrollTo(wxCommandEvent& event); + void OnSelectLast(wxCommandEvent& event); + + void OnIdle(wxIdleEvent& event); + void OnSize(wxSizeEvent& event); private: - MyTreeCtrl *m_treeCtrl; + void TogStyle(int id, long flag); - void DoSetBold(bool bold = TRUE); + void DoSort(bool reverse = false); - DECLARE_EVENT_TABLE() -}; + void Resize(); -// menu and control ids -enum -{ - TreeTest_Quit, - TreeTest_About, - TreeTest_Dump, - TreeTest_Bold, - TreeTest_UnBold, - TreeTest_Delete, - TreeTest_DeleteAll, - TreeTest_Recreate, - TreeTest_Ctrl = 100 + void CreateTreeWithDefStyle(); + void CreateTree(long style); + + // common parts of OnShowFirst/LastVisible() and OnShowNext/PrevVisible() + typedef wxTreeItemId (wxTreeCtrl::*TreeFunc0_t)() const; + void DoShowFirstOrLast(TreeFunc0_t pfn, const wxString& label); + + typedef wxTreeItemId (wxTreeCtrl::*TreeFunc1_t)(const wxTreeItemId&) const; + void DoShowRelativeItem(TreeFunc1_t pfn, const wxString& label); + + + wxPanel *m_panel; + MyTreeCtrl *m_treeCtrl; +#if wxUSE_LOG + wxTextCtrl *m_textCtrl; +#endif // wxUSE_LOG + + void DoSetBold(bool bold = true); + + DECLARE_EVENT_TABLE() }; +// menu and control ids enum { - TreeCtrlIcon_File, - TreeCtrlIcon_Folder + TreeTest_Quit = wxID_EXIT, + TreeTest_About = wxID_ABOUT, + TreeTest_ClearLog = wxID_CLEAR, + TreeTest_TogButtons = wxID_HIGHEST, + TreeTest_TogTwist, + TreeTest_TogLines, + TreeTest_TogEdit, + TreeTest_TogHideRoot, + TreeTest_TogRootLines, + TreeTest_TogBorder, + TreeTest_TogFullHighlight, + TreeTest_SetFgColour, + TreeTest_SetBgColour, + TreeTest_ResetStyle, + TreeTest_Highlight, + TreeTest_Dump, + TreeTest_DumpSelected, + TreeTest_Count, + TreeTest_CountRec, + TreeTest_Sort, + TreeTest_SortRev, + TreeTest_SetBold, + TreeTest_ClearBold, + TreeTest_Rename, + TreeTest_Delete, + TreeTest_DeleteChildren, + TreeTest_DeleteAll, + TreeTest_Recreate, + TreeTest_ToggleImages, + TreeTest_ToggleStates, + TreeTest_ToggleBell, + TreeTest_ToggleAlternateImages, + TreeTest_ToggleAlternateStates, + TreeTest_ToggleButtons, + TreeTest_SetImageSize, + TreeTest_ToggleSel, + TreeTest_CollapseAndReset, + TreeTest_EnsureVisible, + TreeTest_SetFocus, + TreeTest_AddItem, + TreeTest_AddManyItems, + TreeTest_InsertItem, + TreeTest_IncIndent, + TreeTest_DecIndent, + TreeTest_IncSpacing, + TreeTest_DecSpacing, + TreeTest_ToggleIcon, + TreeTest_ToggleState, + TreeTest_Select, + TreeTest_Unselect, + TreeTest_SelectRoot, + TreeTest_ClearFocused, + TreeTest_SetFocusedRoot, + TreeTest_SelectChildren, + TreeTest_ShowFirstVisible, + TreeTest_ShowLastVisible, + TreeTest_ShowNextVisible, + TreeTest_ShowPrevVisible, + TreeTest_ShowParent, + TreeTest_ShowPrevSibling, + TreeTest_ShowNextSibling, + TreeTest_ScrollTo, + TreeTest_SelectLast, + TreeTest_Ctrl = 1000 };