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;
// 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
// ---------------------
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
// ------------------
// 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
// ----------
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)
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");
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();
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!
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)
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));
}
public:
enum
{
- TreeCtrlIcon_Folder,
- TreeCtrlIcon_File
+ TreeCtrlIcon_File,
+ TreeCtrlIcon_Folder
};
MyTreeCtrl(wxWindow *parent, const wxWindowID id,
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()
};
TreeTest_Quit,
TreeTest_About,
TreeTest_Dump,
+ TreeTest_Bold,
+ TreeTest_UnBold,
TreeTest_Delete,
TreeTest_DeleteAll,
TreeTest_Recreate,
#undef GetNextSibling
#endif
-#include "wx/treectrl.h"
+#include "wx/msw/treectrl.h"
// Bug in headers, sometimes
#ifndef TVIS_FOCUSED
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;
}
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
// ----------------------------------------------------------------------------
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");