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
This commit is contained in:
@@ -110,9 +110,7 @@ public:
|
|||||||
wxTreeItemId(WXHTREEITEM itemId) { m_itemId = (long)itemId; }
|
wxTreeItemId(WXHTREEITEM itemId) { m_itemId = (long)itemId; }
|
||||||
operator WXHTREEITEM() const { return (WXHTREEITEM)m_itemId; }
|
operator WXHTREEITEM() const { return (WXHTREEITEM)m_itemId; }
|
||||||
|
|
||||||
void operator =(WXHTREEITEM item) { m_itemId = (long) item; }
|
void operator=(WXHTREEITEM item) { m_itemId = (long) item; }
|
||||||
|
|
||||||
// wxTreeItemId(long itemId) { m_itemId = itemId; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
long m_itemId;
|
long m_itemId;
|
||||||
@@ -238,6 +236,9 @@ public:
|
|||||||
// usage and loading time.
|
// usage and loading time.
|
||||||
void SetItemHasChildren(const wxTreeItemId& item, bool has = TRUE);
|
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
|
// item status inquiries
|
||||||
// ---------------------
|
// ---------------------
|
||||||
|
|
||||||
@@ -249,6 +250,8 @@ public:
|
|||||||
bool IsExpanded(const wxTreeItemId& item) const;
|
bool IsExpanded(const wxTreeItemId& item) const;
|
||||||
// is this item currently selected (the same as has focus)?
|
// is this item currently selected (the same as has focus)?
|
||||||
bool IsSelected(const wxTreeItemId& item) const;
|
bool IsSelected(const wxTreeItemId& item) const;
|
||||||
|
// is item text in bold font?
|
||||||
|
bool IsBold(const wxTreeItemId& item) const;
|
||||||
|
|
||||||
// number of children
|
// number of children
|
||||||
// ------------------
|
// ------------------
|
||||||
@@ -371,19 +374,23 @@ public:
|
|||||||
// helpers
|
// helpers
|
||||||
// -------
|
// -------
|
||||||
|
|
||||||
// @@@ do we really need to expose these functions to the application?
|
|
||||||
|
|
||||||
// get the bounding rectangle of the item (or of its label only)
|
|
||||||
void GetBoundingRect(const wxTreeItemId& item,
|
|
||||||
wxRectangle& rect,
|
|
||||||
bool textOnly = FALSE) const;
|
|
||||||
|
|
||||||
// determine to which item (if any) belongs the given point (the
|
// determine to which item (if any) belongs the given point (the
|
||||||
// coordinates specified are relative to the client area of tree ctrl)
|
// coordinates specified are relative to the client area of tree ctrl)
|
||||||
// and fill the flags parameter with a bitmask of wxTREE_HITTEST_xxx
|
// and fill the flags parameter with a bitmask of wxTREE_HITTEST_xxx
|
||||||
// constants
|
// 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);
|
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;
|
||||||
|
|
||||||
// deprecated
|
// deprecated
|
||||||
// ----------
|
// ----------
|
||||||
|
|
||||||
|
@@ -43,6 +43,8 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
|||||||
EVT_MENU(TreeTest_Quit, MyFrame::OnQuit)
|
EVT_MENU(TreeTest_Quit, MyFrame::OnQuit)
|
||||||
EVT_MENU(TreeTest_About, MyFrame::OnAbout)
|
EVT_MENU(TreeTest_About, MyFrame::OnAbout)
|
||||||
EVT_MENU(TreeTest_Dump, MyFrame::OnDump)
|
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_Delete, MyFrame::OnDelete)
|
||||||
EVT_MENU(TreeTest_DeleteAll, MyFrame::OnDeleteAll)
|
EVT_MENU(TreeTest_DeleteAll, MyFrame::OnDeleteAll)
|
||||||
EVT_MENU(TreeTest_Recreate, MyFrame::OnRecreate)
|
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_DeleteAll, "Delete &all items");
|
||||||
file_menu->Append(TreeTest_Recreate, "&Recreate the tree");
|
file_menu->Append(TreeTest_Recreate, "&Recreate the tree");
|
||||||
file_menu->AppendSeparator();
|
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->Append(TreeTest_About, "&About...");
|
||||||
file_menu->AppendSeparator();
|
file_menu->AppendSeparator();
|
||||||
file_menu->Append(TreeTest_Quit, "E&xit");
|
file_menu->Append(TreeTest_Quit, "E&xit");
|
||||||
@@ -167,6 +172,11 @@ void MyFrame::OnDump(wxCommandEvent& WXUNUSED(event))
|
|||||||
m_treeCtrl->GetItemsRecursively(root, -1);
|
m_treeCtrl->GetItemsRecursively(root, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MyFrame::DoSetBold(bool bold)
|
||||||
|
{
|
||||||
|
m_treeCtrl->SetItemBold(m_treeCtrl->GetSelection(), bold);
|
||||||
|
}
|
||||||
|
|
||||||
void MyFrame::OnDelete(wxCommandEvent& WXUNUSED(event))
|
void MyFrame::OnDelete(wxCommandEvent& WXUNUSED(event))
|
||||||
{
|
{
|
||||||
wxTreeItemId item = m_treeCtrl->GetSelection();
|
wxTreeItemId item = m_treeCtrl->GetSelection();
|
||||||
@@ -227,7 +237,7 @@ void MyTreeCtrl::AddItemsRecursively(const wxTreeItemId& idParent,
|
|||||||
int image = depth == 1 ? TreeCtrlIcon_File : TreeCtrlIcon_Folder;
|
int image = depth == 1 ? TreeCtrlIcon_File : TreeCtrlIcon_Folder;
|
||||||
wxTreeItemId id = AppendItem(idParent, str, image, image,
|
wxTreeItemId id = AppendItem(idParent, str, image, image,
|
||||||
new MyTreeItemData(str));
|
new MyTreeItemData(str));
|
||||||
AddItemsRecursively(id, numChildren, depth - 1,n+1);
|
AddItemsRecursively(id, numChildren, depth - 1, n + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//else: done!
|
//else: done!
|
||||||
@@ -240,7 +250,7 @@ void MyTreeCtrl::AddTestItemsToTree(size_t numChildren,
|
|||||||
TreeCtrlIcon_Folder, TreeCtrlIcon_Folder,
|
TreeCtrlIcon_Folder, TreeCtrlIcon_Folder,
|
||||||
new MyTreeItemData("Root item"));
|
new MyTreeItemData("Root item"));
|
||||||
|
|
||||||
AddItemsRecursively(rootId, numChildren, depth,0);
|
AddItemsRecursively(rootId, numChildren, depth, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyTreeCtrl::GetItemsRecursively(const wxTreeItemId& idParent, long cookie)
|
void MyTreeCtrl::GetItemsRecursively(const wxTreeItemId& idParent, long cookie)
|
||||||
@@ -322,11 +332,12 @@ static inline const char *Bool2String(bool b)
|
|||||||
|
|
||||||
void MyTreeItemData::ShowInfo(wxTreeCtrl *tree)
|
void MyTreeItemData::ShowInfo(wxTreeCtrl *tree)
|
||||||
{
|
{
|
||||||
wxLogMessage("Item '%s': %sselected, %sexpanded, "
|
wxLogMessage("Item '%s': %sselected, %sexpanded, %sbold,\n"
|
||||||
"%u children (%u immediately under this item).",
|
"%u children (%u immediately under this item).",
|
||||||
m_desc.c_str(),
|
m_desc.c_str(),
|
||||||
Bool2String(tree->IsSelected(GetId())),
|
Bool2String(tree->IsSelected(GetId())),
|
||||||
Bool2String(tree->IsExpanded(GetId())),
|
Bool2String(tree->IsExpanded(GetId())),
|
||||||
|
Bool2String(tree->IsBold(GetId())),
|
||||||
tree->GetChildrenCount(GetId()),
|
tree->GetChildrenCount(GetId()),
|
||||||
tree->GetChildrenCount(GetId(), FALSE));
|
tree->GetChildrenCount(GetId(), FALSE));
|
||||||
}
|
}
|
||||||
|
@@ -32,8 +32,8 @@ class MyTreeCtrl : public wxTreeCtrl
|
|||||||
public:
|
public:
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
TreeCtrlIcon_Folder,
|
TreeCtrlIcon_File,
|
||||||
TreeCtrlIcon_File
|
TreeCtrlIcon_Folder
|
||||||
};
|
};
|
||||||
|
|
||||||
MyTreeCtrl(wxWindow *parent, const wxWindowID id,
|
MyTreeCtrl(wxWindow *parent, const wxWindowID id,
|
||||||
@@ -88,9 +88,14 @@ public:
|
|||||||
void OnDeleteAll(wxCommandEvent& event);
|
void OnDeleteAll(wxCommandEvent& event);
|
||||||
void OnRecreate(wxCommandEvent& event);
|
void OnRecreate(wxCommandEvent& event);
|
||||||
|
|
||||||
|
void OnSetBold(wxCommandEvent& event) { DoSetBold(TRUE); }
|
||||||
|
void OnClearBold(wxCommandEvent& event) { DoSetBold(FALSE); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MyTreeCtrl *m_treeCtrl;
|
MyTreeCtrl *m_treeCtrl;
|
||||||
|
|
||||||
|
void DoSetBold(bool bold = TRUE);
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -100,6 +105,8 @@ enum
|
|||||||
TreeTest_Quit,
|
TreeTest_Quit,
|
||||||
TreeTest_About,
|
TreeTest_About,
|
||||||
TreeTest_Dump,
|
TreeTest_Dump,
|
||||||
|
TreeTest_Bold,
|
||||||
|
TreeTest_UnBold,
|
||||||
TreeTest_Delete,
|
TreeTest_Delete,
|
||||||
TreeTest_DeleteAll,
|
TreeTest_DeleteAll,
|
||||||
TreeTest_Recreate,
|
TreeTest_Recreate,
|
||||||
|
@@ -54,7 +54,7 @@
|
|||||||
#undef GetNextSibling
|
#undef GetNextSibling
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "wx/treectrl.h"
|
#include "wx/msw/treectrl.h"
|
||||||
|
|
||||||
// Bug in headers, sometimes
|
// Bug in headers, sometimes
|
||||||
#ifndef TVIS_FOCUSED
|
#ifndef TVIS_FOCUSED
|
||||||
@@ -336,16 +336,22 @@ void wxTreeCtrl::SetItemHasChildren(const wxTreeItemId& item, bool has)
|
|||||||
DoSetItem(&tvItem);
|
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
|
// Item status
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
bool wxTreeCtrl::IsVisible(const wxTreeItemId& item) const
|
bool wxTreeCtrl::IsVisible(const wxTreeItemId& item) const
|
||||||
{
|
{
|
||||||
|
// Bug in Gnu-Win32 headers, so don't use the macro TreeView_GetItemRect
|
||||||
RECT rect;
|
RECT rect;
|
||||||
// return (TreeView_GetItemRect(wxhWnd, (HTREEITEM) (WXHTREEITEM)item, &rect, FALSE) != 0);
|
return SendMessage(wxhWnd, TVM_GETITEMRECT, FALSE, (LPARAM)&rect) != 0;
|
||||||
// Bug in Gnu-Win32 headers, so don't use the macro.
|
|
||||||
return (SendMessage((wxhWnd), TVM_GETITEMRECT, (WPARAM) FALSE, (LPARAM) & rect) != 0);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -376,6 +382,14 @@ bool wxTreeCtrl::IsSelected(const wxTreeItemId& item) const
|
|||||||
return (tvItem.state & TVIS_SELECTED) != 0;
|
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
|
// navigation
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -552,10 +566,6 @@ wxTreeItemId wxTreeCtrl::AppendItem(const wxTreeItemId& parent,
|
|||||||
|
|
||||||
void wxTreeCtrl::Delete(const wxTreeItemId& item)
|
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) )
|
if ( !TreeView_DeleteItem(wxhWnd, (HTREEITEM)(WXHTREEITEM)item) )
|
||||||
{
|
{
|
||||||
wxLogLastError("TreeView_DeleteItem");
|
wxLogLastError("TreeView_DeleteItem");
|
||||||
|
Reference in New Issue
Block a user