// Modified by: Vadim Zeitlin to be less MSW-specific on 10/10/98
// Created: 01/02/97
// RCS-ID: $Id$
-// Copyright: (c) Julian Smart and Markus Holzem
-// Licence: wxWindows license
+// Copyright: (c) Julian Smart
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_TREECTRL_H_
// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma interface "treectrl.h"
#endif
#include "wx/textctrl.h"
#include "wx/dynarray.h"
#include "wx/treebase.h"
+#include "wx/hashmap.h"
#ifdef __GNUWIN32__
// Cygwin windows.h defines these identifiers
#undef GetNextSibling
#endif // Cygwin
-// the type for "untyped" data
-typedef long wxDataType;
-
// fwd decl
class WXDLLEXPORT wxImageList;
class WXDLLEXPORT wxDragImage;
struct WXDLLEXPORT wxTreeViewItem;
-// a callback function used for sorting tree items, it should return -1 if the
-// first item precedes the second, +1 if the second precedes the first or 0 if
-// they're equivalent
-class wxTreeItemData;
-
// NB: all the following flags are for compatbility only and will be removed in the
// next versions
wxTREE_EXPAND_TOGGLE
};
-// flags for deprecated InsertItem() variant
+// flags for deprecated InsertItem() variant (their values are the same as of
+// TVI_FIRST and TVI_LAST)
#define wxTREE_INSERT_FIRST 0xFFFF0001
#define wxTREE_INSERT_LAST 0xFFFF0002
+// hash storing attributes for our items
+WX_DECLARE_EXPORTED_VOIDPTR_HASH_MAP(wxTreeItemAttr *, wxMapTreeAttr);
+
// ----------------------------------------------------------------------------
// wxTreeCtrl
// ----------------------------------------------------------------------------
+
class WXDLLEXPORT wxTreeCtrl : public wxControl
{
public:
const wxSize& size = wxDefaultSize,
long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT,
const wxValidator& validator = wxDefaultValidator,
- const wxString& name = "wxTreeCtrl")
+ const wxString& name = wxTreeCtrlNameStr)
{
Create(parent, id, pos, size, style, validator, name);
}
const wxSize& size = wxDefaultSize,
long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT,
const wxValidator& validator = wxDefaultValidator,
- const wxString& name = "wxTreeCtrl");
+ const wxString& name = wxTreeCtrlNameStr);
// accessors
// ---------
// get the data associated with the item
wxTreeItemData *GetItemData(const wxTreeItemId& item) const;
+ // get the item's text colour
+ wxColour GetItemTextColour(const wxTreeItemId& item) const;
+
+ // get the item's background colour
+ wxColour GetItemBackgroundColour(const wxTreeItemId& item) const;
+
+ // get the item's font
+ wxFont GetItemFont(const wxTreeItemId& item) const;
+
// modifiers
// ---------
size_t GetSelections(wxArrayTreeItemIds& selections) const;
// get the parent of this item (may return NULL if root)
- wxTreeItemId GetParent(const wxTreeItemId& item) const;
+ wxTreeItemId GetItemParent(const wxTreeItemId& item) const;
+
+#if WXWIN_COMPATIBILITY_2_2
+ // deprecated: Use GetItemParent instead.
+ wxTreeItemId GetParent(const wxTreeItemId& item) const
+ { return GetItemParent( item ); }
+
+ // Expose the base class method hidden by the one above.
+ wxWindow *GetParent() const { return wxControl::GetParent(); }
+#endif // WXWIN_COMPATIBILITY_2_2
// for this enumeration function you must pass in a "cookie" parameter
// which is opaque for the application but is necessary for the library
// the same!
// get the first child of this item
- wxTreeItemId GetFirstChild(const wxTreeItemId& item, long& _cookie) const;
+ wxTreeItemId GetFirstChild(const wxTreeItemId& item,
+ wxTreeItemIdValue& cookie) const;
// get the next child
- wxTreeItemId GetNextChild(const wxTreeItemId& item, long& _cookie) const;
+ wxTreeItemId GetNextChild(const wxTreeItemId& item,
+ wxTreeItemIdValue& cookie) const;
// get the last child of this item - this method doesn't use cookies
wxTreeItemId GetLastChild(const wxTreeItemId& item) const;
// unselect all items (only makes sense for multiple selection control)
void UnselectAll();
// select this item
- void SelectItem(const wxTreeItemId& item);
+ void SelectItem(const wxTreeItemId& item, bool select = true);
+ // unselect this item
+ void UnselectItem(const wxTreeItemId& item);
+ // toggle item selection
+ void ToggleItemSelection(const wxTreeItemId& item);
+
// make sure this item is visible (expanding the parent item and/or
// scrolling to this item if necessary)
void EnsureVisible(const wxTreeItemId& item);
// deprecated
// ----------
+#if WXWIN_COMPATIBILITY_2_4
// these methods are deprecated and will be removed in future versions of
// wxWindows, they're here for compatibility only, don't use them in new
// code (the comments indicate why these methods are now useless and how to
// replace them)
// use Expand, Collapse, CollapseAndReset or Toggle
- void ExpandItem(const wxTreeItemId& item, int action);
+ wxDEPRECATED( void ExpandItem(const wxTreeItemId& item, int action) );
// use AddRoot, PrependItem or AppendItem
- wxTreeItemId InsertItem(const wxTreeItemId& parent,
+ wxDEPRECATED( wxTreeItemId InsertItem(const wxTreeItemId& parent,
const wxString& text,
int image = -1, int selImage = -1,
- long insertAfter = wxTREE_INSERT_LAST);
+ long insertAfter = wxTREE_INSERT_LAST) );
// use Set/GetImageList and Set/GetStateImageList
- wxImageList *GetImageList(int) const
- { return GetImageList(); }
- void SetImageList(wxImageList *imageList, int)
- { SetImageList(imageList); }
+ wxImageList *GetImageList(int) const { return GetImageList(); }
+ void SetImageList(wxImageList *imageList, int) { SetImageList(imageList); }
// use Set/GetItemImage directly
- // get the selected item image
int GetItemSelectedImage(const wxTreeItemId& item) const
{ return GetItemImage(item, wxTreeItemIcon_Selected); }
- // set the selected item image
void SetItemSelectedImage(const wxTreeItemId& item, int image)
{ SetItemImage(item, image, wxTreeItemIcon_Selected); }
+ // use the versions taking wxTreeItemIdValue cookies
+ wxDEPRECATED( wxTreeItemId GetFirstChild(const wxTreeItemId& item,
+ long& cookie) const );
+ wxDEPRECATED( wxTreeItemId GetNextChild(const wxTreeItemId& item,
+ long& cookie) const );
+#endif // WXWIN_COMPATIBILITY_2_4
+
+ virtual bool ShouldInheritColours() const { return false; }
+
// implementation
// --------------
- virtual long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
+ virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
virtual bool MSWCommand(WXUINT param, WXWORD id);
virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
bool IsItemChecked(const wxTreeItemId& item) const;
void SetItemCheck(const wxTreeItemId& item, bool check = TRUE);
+ // set/get the item state.image (state == -1 means cycle to the next one)
+ void SetState(const wxTreeItemId& node, int state);
+ int GetState(const wxTreeItemId& node);
+
protected:
// SetImageList helper
void SetAnyImageList(wxImageList *imageList, int which);
void DeleteTextCtrl();
- // support for additional item images
- friend class wxTreeItemIndirectData;
+ // support for additional item images which we implement using
+ // wxTreeItemIndirectData technique - see the comments in msw/treectrl.cpp
void SetIndirectItemData(const wxTreeItemId& item,
- wxTreeItemIndirectData *data);
+ class wxTreeItemIndirectData *data);
bool HasIndirectData(const wxTreeItemId& item) const;
+ bool IsDataIndirect(wxTreeItemData *data) const
+ { return data && data->GetId().m_pItem == 0; }
- // the array storing all item ids which have indirect data
- wxArrayTreeItemIds m_itemsWithIndirectData;
-
- // the hash storing the items attributes (indexed by items ids)
- wxHashTable m_attrs;
+ // the hash storing the items attributes (indexed by item ids)
+ wxMapTreeAttr m_attrs;
// TRUE if the hash above is not empty
bool m_hasAnyAttr;
// used for dragging
wxDragImage *m_dragImage;
+ // Virtual root item, if wxTR_HIDE_ROOT is set.
+ void* m_pVirtualRoot;
+
// the starting item for selection with Shift
- WXHTREEITEM m_htSelStart;
+ wxTreeItemId m_htSelStart;
+
+ friend class wxTreeItemIndirectData;
+ friend class wxTreeSortHelper;
DECLARE_DYNAMIC_CLASS(wxTreeCtrl)
+ DECLARE_NO_COPY_CLASS(wxTreeCtrl)
};
#endif // wxUSE_TREECTRL