From add28c55a04eb30080fc2ef9d3c5ddf66eab236a Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 30 Nov 1998 00:08:57 +0000 Subject: [PATCH] 1. added wxTreeCtrl::SetItemBold and IsBold, updated the sample to show them 2. wxTreeItemId HitTest(const wxPoint& point) added - to be implemented on other platforms git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1086 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/treectrl.h | 27 +++++++++++++++++---------- samples/treectrl/treetest.cpp | 17 ++++++++++++++--- samples/treectrl/treetest.h | 11 +++++++++-- src/msw/treectrl.cpp | 26 ++++++++++++++++++-------- 4 files changed, 58 insertions(+), 23 deletions(-) diff --git a/include/wx/msw/treectrl.h b/include/wx/msw/treectrl.h index 03795479dd..27ab5a7562 100644 --- a/include/wx/msw/treectrl.h +++ b/include/wx/msw/treectrl.h @@ -110,9 +110,7 @@ public: wxTreeItemId(WXHTREEITEM itemId) { m_itemId = (long)itemId; } operator WXHTREEITEM() const { return (WXHTREEITEM)m_itemId; } - void operator =(WXHTREEITEM item) { m_itemId = (long) item; } - -// wxTreeItemId(long itemId) { m_itemId = itemId; } + void operator=(WXHTREEITEM item) { m_itemId = (long) item; } protected: long m_itemId; @@ -238,6 +236,9 @@ public: // usage and loading time. void SetItemHasChildren(const wxTreeItemId& item, bool has = TRUE); + // the item will be shown in bold + void SetItemBold(const wxTreeItemId& item, bool bold = TRUE); + // item status inquiries // --------------------- @@ -249,6 +250,8 @@ public: bool IsExpanded(const wxTreeItemId& item) const; // is this item currently selected (the same as has focus)? bool IsSelected(const wxTreeItemId& item) const; + // is item text in bold font? + bool IsBold(const wxTreeItemId& item) const; // number of children // ------------------ @@ -371,19 +374,23 @@ public: // helpers // ------- - // @@@ do we really need to expose these functions to the application? + // determine to which item (if any) belongs the given point (the + // coordinates specified are relative to the client area of tree ctrl) + // and fill the flags parameter with a bitmask of wxTREE_HITTEST_xxx + // constants. + // + // The first function is more portable (because easier to implement + // on other platforms), but the second one returns some extra info. + wxTreeItemId HitTest(const wxPoint& point) + { int dummy; return HitTest(point, dummy); } + wxTreeItemId HitTest(const wxPoint& point, int& flags); // get the bounding rectangle of the item (or of its label only) + // @@@ do we really need to expose this functions to the application? void GetBoundingRect(const wxTreeItemId& item, wxRectangle& rect, bool textOnly = FALSE) const; - // determine to which item (if any) belongs the given point (the - // coordinates specified are relative to the client area of tree ctrl) - // and fill the flags parameter with a bitmask of wxTREE_HITTEST_xxx - // constants - wxTreeItemId HitTest(const wxPoint& point, int& flags); - // deprecated // ---------- diff --git a/samples/treectrl/treetest.cpp b/samples/treectrl/treetest.cpp index 5085521447..d5d4ce6e54 100644 --- a/samples/treectrl/treetest.cpp +++ b/samples/treectrl/treetest.cpp @@ -43,6 +43,8 @@ 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_Bold, MyFrame::OnSetBold) + EVT_MENU(TreeTest_UnBold, MyFrame::OnClearBold) EVT_MENU(TreeTest_Delete, MyFrame::OnDelete) EVT_MENU(TreeTest_DeleteAll, MyFrame::OnDeleteAll) EVT_MENU(TreeTest_Recreate, MyFrame::OnRecreate) @@ -101,6 +103,9 @@ MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h) file_menu->Append(TreeTest_DeleteAll, "Delete &all items"); file_menu->Append(TreeTest_Recreate, "&Recreate the tree"); file_menu->AppendSeparator(); + file_menu->Append(TreeTest_Bold, "Make item &bold"); + file_menu->Append(TreeTest_UnBold, "Make item ¬ bold"); + file_menu->AppendSeparator(); file_menu->Append(TreeTest_About, "&About..."); file_menu->AppendSeparator(); file_menu->Append(TreeTest_Quit, "E&xit"); @@ -167,6 +172,11 @@ void MyFrame::OnDump(wxCommandEvent& WXUNUSED(event)) m_treeCtrl->GetItemsRecursively(root, -1); } +void MyFrame::DoSetBold(bool bold) +{ + m_treeCtrl->SetItemBold(m_treeCtrl->GetSelection(), bold); +} + void MyFrame::OnDelete(wxCommandEvent& WXUNUSED(event)) { wxTreeItemId item = m_treeCtrl->GetSelection(); @@ -227,7 +237,7 @@ void MyTreeCtrl::AddItemsRecursively(const wxTreeItemId& idParent, int image = depth == 1 ? TreeCtrlIcon_File : TreeCtrlIcon_Folder; wxTreeItemId id = AppendItem(idParent, str, image, image, new MyTreeItemData(str)); - AddItemsRecursively(id, numChildren, depth - 1,n+1); + AddItemsRecursively(id, numChildren, depth - 1, n + 1); } } //else: done! @@ -240,7 +250,7 @@ void MyTreeCtrl::AddTestItemsToTree(size_t numChildren, TreeCtrlIcon_Folder, TreeCtrlIcon_Folder, new MyTreeItemData("Root item")); - AddItemsRecursively(rootId, numChildren, depth,0); + AddItemsRecursively(rootId, numChildren, depth, 0); } void MyTreeCtrl::GetItemsRecursively(const wxTreeItemId& idParent, long cookie) @@ -322,11 +332,12 @@ static inline const char *Bool2String(bool b) void MyTreeItemData::ShowInfo(wxTreeCtrl *tree) { - wxLogMessage("Item '%s': %sselected, %sexpanded, " + wxLogMessage("Item '%s': %sselected, %sexpanded, %sbold,\n" "%u children (%u immediately under this item).", m_desc.c_str(), Bool2String(tree->IsSelected(GetId())), Bool2String(tree->IsExpanded(GetId())), + Bool2String(tree->IsBold(GetId())), tree->GetChildrenCount(GetId()), tree->GetChildrenCount(GetId(), FALSE)); } diff --git a/samples/treectrl/treetest.h b/samples/treectrl/treetest.h index 7d125f5982..440b43197d 100644 --- a/samples/treectrl/treetest.h +++ b/samples/treectrl/treetest.h @@ -32,8 +32,8 @@ class MyTreeCtrl : public wxTreeCtrl public: enum { - TreeCtrlIcon_Folder, - TreeCtrlIcon_File + TreeCtrlIcon_File, + TreeCtrlIcon_Folder }; MyTreeCtrl(wxWindow *parent, const wxWindowID id, @@ -88,9 +88,14 @@ public: void OnDeleteAll(wxCommandEvent& event); void OnRecreate(wxCommandEvent& event); + void OnSetBold(wxCommandEvent& event) { DoSetBold(TRUE); } + void OnClearBold(wxCommandEvent& event) { DoSetBold(FALSE); } + private: MyTreeCtrl *m_treeCtrl; + void DoSetBold(bool bold = TRUE); + DECLARE_EVENT_TABLE() }; @@ -100,6 +105,8 @@ enum TreeTest_Quit, TreeTest_About, TreeTest_Dump, + TreeTest_Bold, + TreeTest_UnBold, TreeTest_Delete, TreeTest_DeleteAll, TreeTest_Recreate, diff --git a/src/msw/treectrl.cpp b/src/msw/treectrl.cpp index 496e1f3863..cbecafa355 100644 --- a/src/msw/treectrl.cpp +++ b/src/msw/treectrl.cpp @@ -54,7 +54,7 @@ #undef GetNextSibling #endif -#include "wx/treectrl.h" +#include "wx/msw/treectrl.h" // Bug in headers, sometimes #ifndef TVIS_FOCUSED @@ -336,16 +336,22 @@ void wxTreeCtrl::SetItemHasChildren(const wxTreeItemId& item, bool has) DoSetItem(&tvItem); } +void wxTreeCtrl::SetItemBold(const wxTreeItemId& item, bool bold) +{ + wxTreeViewItem tvItem(item, TVIF_STATE, TVIS_BOLD); + tvItem.state = bold ? TVIS_BOLD : 0; + DoSetItem(&tvItem); +} + // ---------------------------------------------------------------------------- // Item status // ---------------------------------------------------------------------------- bool wxTreeCtrl::IsVisible(const wxTreeItemId& item) const { + // Bug in Gnu-Win32 headers, so don't use the macro TreeView_GetItemRect RECT rect; -// return (TreeView_GetItemRect(wxhWnd, (HTREEITEM) (WXHTREEITEM)item, &rect, FALSE) != 0); - // Bug in Gnu-Win32 headers, so don't use the macro. - return (SendMessage((wxhWnd), TVM_GETITEMRECT, (WPARAM) FALSE, (LPARAM) & rect) != 0); + return SendMessage(wxhWnd, TVM_GETITEMRECT, FALSE, (LPARAM)&rect) != 0; } @@ -376,6 +382,14 @@ bool wxTreeCtrl::IsSelected(const wxTreeItemId& item) const return (tvItem.state & TVIS_SELECTED) != 0; } +bool wxTreeCtrl::IsBold(const wxTreeItemId& item) const +{ + wxTreeViewItem tvItem(item, TVIF_STATE, TVIS_BOLD); + DoGetItem(&tvItem); + + return (tvItem.state & TVIS_BOLD) != 0; +} + // ---------------------------------------------------------------------------- // navigation // ---------------------------------------------------------------------------- @@ -552,10 +566,6 @@ wxTreeItemId wxTreeCtrl::AppendItem(const wxTreeItemId& parent, void wxTreeCtrl::Delete(const wxTreeItemId& item) { - wxTreeItemData *data = GetItemData(item); - if(data!=NULL) - delete data; // may be NULL, ok - if ( !TreeView_DeleteItem(wxhWnd, (HTREEITEM)(WXHTREEITEM)item) ) { wxLogLastError("TreeView_DeleteItem"); -- 2.45.2