X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b77d96500ac802c84e0416e715c907e34d335632..b23e843b99fb99049804faa82714b8828982bbca:/include/wx/generic/treectlg.h?ds=sidebyside diff --git a/include/wx/generic/treectlg.h b/include/wx/generic/treectlg.h index 461fb8f80b..87351c4865 100644 --- a/include/wx/generic/treectlg.h +++ b/include/wx/generic/treectlg.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: treectrl.h +// Name: wx/generic/treectlg.h // Purpose: wxTreeCtrl class // Author: Robert Roebling // Modified by: @@ -16,16 +16,10 @@ #pragma interface "treectlg.h" #endif -#include "wx/defs.h" -#include "wx/string.h" -#include "wx/object.h" -#include "wx/event.h" +#if wxUSE_TREECTRL + #include "wx/scrolwin.h" -#include "wx/textctrl.h" #include "wx/pen.h" -#include "wx/dynarray.h" -#include "wx/timer.h" -#include "wx/treebase.h" // ----------------------------------------------------------------------------- // forward declaration @@ -37,6 +31,7 @@ class WXDLLEXPORT wxGenericTreeItem; class WXDLLEXPORT wxTreeItemData; class WXDLLEXPORT wxTreeRenameTimer; +class WXDLLEXPORT wxTreeFindTimer; class WXDLLEXPORT wxTreeTextCtrl; // ----------------------------------------------------------------------------- @@ -53,11 +48,7 @@ public: wxGenericTreeCtrl(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, -#ifdef __WXMAC__ - long style = wxTR_MAC_BUTTONS | wxTR_NO_LINES | wxTR_ROW_LINES, -#else - long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT, -#endif + long style = wxTR_DEFAULT_STYLE, const wxValidator &validator = wxDefaultValidator, const wxString& name = wxTreeCtrlNameStr) { @@ -70,11 +61,7 @@ public: bool Create(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, -#ifdef __WXMAC__ - long style = wxTR_MAC_BUTTONS | wxTR_NO_LINES | wxTR_ROW_LINES, -#else - long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT, -#endif + long style = wxTR_DEFAULT_STYLE, const wxValidator &validator = wxDefaultValidator, const wxString& name = wxTreeCtrlNameStr); @@ -95,10 +82,10 @@ public: void SetSpacing(unsigned int spacing); // image list: these functions allow to associate an image list with - // the control and retrieve it. Note that when assigned with + // the control and retrieve it. Note that when assigned with // SetImageList, the control does _not_ delete // the associated image list when it's deleted in order to allow image - // lists to be shared between different controls. If you use + // lists to be shared between different controls. If you use // AssignImageList, the control _does_ delete the image list. // // The normal image list is for the icons which correspond to the @@ -108,18 +95,21 @@ public: // checked/unchecked) which are taken from the state image list. wxImageList *GetImageList() const; wxImageList *GetStateImageList() const; + wxImageList *GetButtonsImageList() const; void SetImageList(wxImageList *imageList); void SetStateImageList(wxImageList *imageList); + void SetButtonsImageList(wxImageList *imageList); void AssignImageList(wxImageList *imageList); void AssignStateImageList(wxImageList *imageList); + void AssignButtonsImageList(wxImageList *imageList); // Functions to work with tree ctrl items. // accessors // --------- - // retrieve items label + // retrieve item's label wxString GetItemText(const wxTreeItemId& item) const; // get one of the images associated with the item (normal by default) int GetItemImage(const wxTreeItemId& item, @@ -130,7 +120,7 @@ public: // modifiers // --------- - // set items label + // set item's label void SetItemText(const wxTreeItemId& item, const wxString& text); // get one of the images associated with the item (normal by default) void SetItemImage(const wxTreeItemId& item, int image, @@ -147,18 +137,22 @@ public: // the item will be shown in bold void SetItemBold(const wxTreeItemId& item, bool bold = TRUE); - // set the items text colour + // set the item's text colour void SetItemTextColour(const wxTreeItemId& item, const wxColour& col); - // set the items background colour + // set the item's background colour void SetItemBackgroundColour(const wxTreeItemId& item, const wxColour& col); - // set the items font (should be of the same height for all items) + // set the item's font (should be of the same height for all items) void SetItemFont(const wxTreeItemId& item, const wxFont& font); // set the window font virtual bool SetFont( const wxFont &font ); + // set the styles. No need to specify a GetWindowStyle here since + // the base wxWindow member function will do it for us + void SetWindowStyle(const long styles); + // item status inquiries // --------------------- @@ -174,6 +168,7 @@ public: bool IsSelected(const wxTreeItemId& item) const; // is item text in bold font? bool IsBold(const wxTreeItemId& item) const; + // does the layout include space for a button? // number of children // ------------------ @@ -228,7 +223,6 @@ public: // Only for internal use right now, but should probably be public wxTreeItemId GetNext(const wxTreeItemId& item) const; - wxTreeItemId GetPrev(const wxTreeItemId& item) const; // operations // ---------- @@ -294,6 +288,7 @@ public: void EnsureVisible(const wxTreeItemId& item); // scroll to this item (but don't expand its parent) void ScrollTo(const wxTreeItemId& item); + void AdjustMyScrollbars(); // The first function is more portable (because easier to implement // on other platforms), but the second one returns some extra info. @@ -334,6 +329,10 @@ public: // implementation only from now on + // overridden base class virtuals + virtual bool SetBackgroundColour(const wxColour& colour); + virtual bool SetForegroundColour(const wxColour& colour); + // callbacks void OnPaint( wxPaintEvent &event ); void OnSetFocus( wxFocusEvent &event ); @@ -343,59 +342,74 @@ public: void OnIdle( wxIdleEvent &event ); // implementation helpers - void SendDeleteEvent(wxGenericTreeItem *itemBeingDeleted); - - void DrawBorder(const wxTreeItemId& item); - void DrawLine(const wxTreeItemId& item, bool below); - protected: friend class wxGenericTreeItem; friend class wxTreeRenameTimer; + friend class wxTreeFindTimer; friend class wxTreeTextCtrl; wxFont m_normalFont; wxFont m_boldFont; wxGenericTreeItem *m_anchor; - wxGenericTreeItem *m_current, *m_key_current, *m_currentEdit; - bool m_hasFocus; - bool m_dirty; - int m_xScroll,m_yScroll; - unsigned int m_indent; - unsigned int m_spacing; + wxGenericTreeItem *m_current, + *m_key_current; + unsigned short m_indent; + unsigned short m_spacing; int m_lineHeight; wxPen m_dottedPen; - wxBrush *m_hilightBrush; + wxBrush *m_hilightBrush, + *m_hilightUnfocusedBrush; + bool m_hasFocus; + bool m_dirty; + bool m_ownsImageListNormal, + m_ownsImageListState, + m_ownsImageListButtons; + bool m_isDragging; // true between BEGIN/END drag events + bool m_lastOnSame; // last click on the same item as prev wxImageList *m_imageListNormal, - *m_imageListState; - bool m_ownsImageListNormal, - m_ownsImageListState; + *m_imageListState, + *m_imageListButtons; int m_dragCount; wxPoint m_dragStart; - bool m_isDragging; // true between BEGIN/END drag events wxGenericTreeItem *m_dropTarget; wxCursor m_oldCursor; // cursor is changed while dragging wxGenericTreeItem *m_oldSelection; wxTimer *m_renameTimer; - bool m_renameAccept; - bool m_lastOnSame; // last click on the same item as prev - wxString m_renameRes; + + wxBitmap *m_arrowRight, + *m_arrowDown; + + // incremental search data + wxString m_findPrefix; + wxTimer *m_findTimer; // the common part of all ctors void Init(); // misc helpers + void SendDeleteEvent(wxGenericTreeItem *itemBeingDeleted); + + void DrawBorder(const wxTreeItemId& item); + void DrawLine(const wxTreeItemId& item, bool below); + void DrawDropEffect(wxGenericTreeItem *item); + wxTreeItemId DoInsertItem(const wxTreeItemId& parent, size_t previous, const wxString& text, int image, int selectedImage, wxTreeItemData *data); -public: - void AdjustMyScrollbars(); -protected: + // find the first item starting with the given prefix after the given item + wxTreeItemId FindItem(const wxTreeItemId& id, const wxString& prefix) const; + + bool HasButtons(void) const + { return (m_imageListButtons != NULL) + || HasFlag(wxTR_TWIST_BUTTONS|wxTR_HAS_BUTTONS); } + + void CalculateLineHeight(); int GetLineHeight(wxGenericTreeItem *item) const; void PaintLevel( wxGenericTreeItem *item, wxDC& dc, int level, int &y ); void PaintItem( wxGenericTreeItem *item, wxDC& dc); @@ -407,8 +421,14 @@ protected: void RefreshSubtree( wxGenericTreeItem *item ); void RefreshLine( wxGenericTreeItem *item ); + // redraw all selected items + void RefreshSelected(); + + // RefreshSelected() recursive helper + void RefreshSelectedUnder(wxGenericTreeItem *item); + void OnRenameTimer(); - void OnRenameAccept(); + bool OnRenameAccept(wxGenericTreeItem *item, const wxString& value); void FillArray(wxGenericTreeItem*, wxArrayTreeItemIds&) const; void SelectItemRange( wxGenericTreeItem *item1, wxGenericTreeItem *item2 ); @@ -416,14 +436,12 @@ protected: bool TagNextChildren(wxGenericTreeItem *crt_item, wxGenericTreeItem *last_item, bool select); void UnselectAllChildren( wxGenericTreeItem *item ); - void DrawDropEffect(wxGenericTreeItem *item); - private: DECLARE_EVENT_TABLE() DECLARE_DYNAMIC_CLASS(wxGenericTreeCtrl) }; -#if !defined(__WXMSW__) || defined(__WIN16__) +#if !defined(__WXMSW__) || defined(__WIN16__) || defined(__WXUNIVERSAL__) /* * wxTreeCtrl has to be a real class or we have problems with * the run-time information. @@ -431,24 +449,24 @@ private: class WXDLLEXPORT wxTreeCtrl: public wxGenericTreeCtrl { -public: DECLARE_DYNAMIC_CLASS(wxTreeCtrl) +public: wxTreeCtrl() {} wxTreeCtrl(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT, + long style = wxTR_DEFAULT_STYLE, const wxValidator &validator = wxDefaultValidator, const wxString& name = wxTreeCtrlNameStr) + : wxGenericTreeCtrl(parent, id, pos, size, style, validator, name) { - Create(parent, id, pos, size, style, validator, name); } - }; +#endif // !__WXMSW__ || __WIN16__ || __WXUNIVERSAL__ -#endif +#endif // wxUSE_TREECTRL #endif // _GENERIC_TREECTRL_H_