diff --git a/Makefile.in b/Makefile.in index 91d6281b53..4d55a924fa 100644 --- a/Makefile.in +++ b/Makefile.in @@ -3575,7 +3575,8 @@ COND_TOOLKIT_QT_GUI_HDR = \ wx/generic/activityindicator.h \ wx/qt/dataview.h \ wx/qt/dvrenderers.h \ - $(QT_PLATFORM_HDR) + $(QT_PLATFORM_HDR) \ + wx/qt/treectrl.h @COND_TOOLKIT_QT@GUI_HDR = $(COND_TOOLKIT_QT_GUI_HDR) @COND_TOOLKIT_COCOA@MEDIA_PLATFORM_HDR = @COND_TOOLKIT_GTK@MEDIA_PLATFORM_HDR = @@ -5542,7 +5543,7 @@ COND_TOOLKIT_MSW___GUI_SRC_OBJECTS = \ monodll_msw_textctrl.o \ monodll_msw_textentry.o \ monodll_msw_tglbtn.o \ - monodll_treectrl.o \ + monodll_msw_treectrl.o \ monodll_systhemectrl.o \ monodll_customdraw.o \ monodll_animateg.o \ @@ -5736,7 +5737,8 @@ COND_TOOLKIT_QT___GUI_SRC_OBJECTS = \ monodll_qt_uiaction.o \ monodll_qt_utils.o \ monodll_qt_window.o \ - $(__QT_PLATFORM_SRC_OBJECTS) + $(__QT_PLATFORM_SRC_OBJECTS) \ + monodll_qt_treectrl.o @COND_TOOLKIT_QT@__GUI_SRC_OBJECTS = $(COND_TOOLKIT_QT___GUI_SRC_OBJECTS) COND_PLATFORM_WIN32_1___QT_PLATFORM_SRC_OBJECTS = \ monodll_comimpl.o \ @@ -7521,7 +7523,7 @@ COND_TOOLKIT_MSW___GUI_SRC_OBJECTS_1 = \ monolib_msw_textctrl.o \ monolib_msw_textentry.o \ monolib_msw_tglbtn.o \ - monolib_treectrl.o \ + monolib_msw_treectrl.o \ monolib_systhemectrl.o \ monolib_customdraw.o \ monolib_animateg.o \ @@ -7715,7 +7717,8 @@ COND_TOOLKIT_QT___GUI_SRC_OBJECTS_1 = \ monolib_qt_uiaction.o \ monolib_qt_utils.o \ monolib_qt_window.o \ - $(__QT_PLATFORM_SRC_OBJECTS_1) + $(__QT_PLATFORM_SRC_OBJECTS_1) \ + monolib_qt_treectrl.o @COND_TOOLKIT_QT@__GUI_SRC_OBJECTS_1 = $(COND_TOOLKIT_QT___GUI_SRC_OBJECTS_1) COND_PLATFORM_WIN32_1___QT_PLATFORM_SRC_OBJECTS_1 = \ monolib_comimpl.o \ @@ -9647,7 +9650,7 @@ COND_TOOLKIT_MSW___GUI_SRC_OBJECTS_2 = \ coredll_msw_textctrl.o \ coredll_msw_textentry.o \ coredll_msw_tglbtn.o \ - coredll_treectrl.o \ + coredll_msw_treectrl.o \ coredll_systhemectrl.o \ coredll_customdraw.o \ coredll_animateg.o \ @@ -9841,7 +9844,8 @@ COND_TOOLKIT_QT___GUI_SRC_OBJECTS_2 = \ coredll_qt_uiaction.o \ coredll_qt_utils.o \ coredll_qt_window.o \ - $(__QT_PLATFORM_SRC_OBJECTS_2) + $(__QT_PLATFORM_SRC_OBJECTS_2) \ + coredll_qt_treectrl.o @COND_TOOLKIT_QT@__GUI_SRC_OBJECTS_2 = $(COND_TOOLKIT_QT___GUI_SRC_OBJECTS_2) COND_PLATFORM_WIN32_1___QT_PLATFORM_SRC_OBJECTS_2 = \ coredll_comimpl.o \ @@ -11368,7 +11372,7 @@ COND_TOOLKIT_MSW___GUI_SRC_OBJECTS_3 = \ corelib_msw_textctrl.o \ corelib_msw_textentry.o \ corelib_msw_tglbtn.o \ - corelib_treectrl.o \ + corelib_msw_treectrl.o \ corelib_systhemectrl.o \ corelib_customdraw.o \ corelib_animateg.o \ @@ -11562,7 +11566,8 @@ COND_TOOLKIT_QT___GUI_SRC_OBJECTS_3 = \ corelib_qt_uiaction.o \ corelib_qt_utils.o \ corelib_qt_window.o \ - $(__QT_PLATFORM_SRC_OBJECTS_3) + $(__QT_PLATFORM_SRC_OBJECTS_3) \ + corelib_qt_treectrl.o @COND_TOOLKIT_QT@__GUI_SRC_OBJECTS_3 = $(COND_TOOLKIT_QT___GUI_SRC_OBJECTS_3) COND_PLATFORM_WIN32_1___QT_PLATFORM_SRC_OBJECTS_3 = \ corelib_comimpl.o \ @@ -16338,7 +16343,7 @@ monodll_msw_textentry.o: $(srcdir)/src/msw/textentry.cpp $(MONODLL_ODEP) monodll_msw_tglbtn.o: $(srcdir)/src/msw/tglbtn.cpp $(MONODLL_ODEP) $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/tglbtn.cpp -monodll_treectrl.o: $(srcdir)/src/msw/treectrl.cpp $(MONODLL_ODEP) +monodll_msw_treectrl.o: $(srcdir)/src/msw/treectrl.cpp $(MONODLL_ODEP) $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/treectrl.cpp monodll_systhemectrl.o: $(srcdir)/src/msw/systhemectrl.cpp $(MONODLL_ODEP) @@ -16833,6 +16838,9 @@ monodll_qt_window.o: $(srcdir)/src/qt/window.cpp $(MONODLL_ODEP) monodll_qt_graphics.o: $(srcdir)/src/qt/graphics.cpp $(MONODLL_ODEP) $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/qt/graphics.cpp +monodll_qt_treectrl.o: $(srcdir)/src/qt/treectrl.cpp $(MONODLL_ODEP) + $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/qt/treectrl.cpp + monodll_univ_anybutton.o: $(srcdir)/src/univ/anybutton.cpp $(MONODLL_ODEP) $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/univ/anybutton.cpp @@ -21597,7 +21605,7 @@ monolib_msw_textentry.o: $(srcdir)/src/msw/textentry.cpp $(MONOLIB_ODEP) monolib_msw_tglbtn.o: $(srcdir)/src/msw/tglbtn.cpp $(MONOLIB_ODEP) $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/tglbtn.cpp -monolib_treectrl.o: $(srcdir)/src/msw/treectrl.cpp $(MONOLIB_ODEP) +monolib_msw_treectrl.o: $(srcdir)/src/msw/treectrl.cpp $(MONOLIB_ODEP) $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/treectrl.cpp monolib_systhemectrl.o: $(srcdir)/src/msw/systhemectrl.cpp $(MONOLIB_ODEP) @@ -22092,6 +22100,9 @@ monolib_qt_window.o: $(srcdir)/src/qt/window.cpp $(MONOLIB_ODEP) monolib_qt_graphics.o: $(srcdir)/src/qt/graphics.cpp $(MONOLIB_ODEP) $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/qt/graphics.cpp +monolib_qt_treectrl.o: $(srcdir)/src/qt/treectrl.cpp $(MONOLIB_ODEP) + $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/qt/treectrl.cpp + monolib_univ_anybutton.o: $(srcdir)/src/univ/anybutton.cpp $(MONOLIB_ODEP) $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/univ/anybutton.cpp @@ -27516,7 +27527,7 @@ coredll_msw_textentry.o: $(srcdir)/src/msw/textentry.cpp $(COREDLL_ODEP) coredll_msw_tglbtn.o: $(srcdir)/src/msw/tglbtn.cpp $(COREDLL_ODEP) $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/tglbtn.cpp -coredll_treectrl.o: $(srcdir)/src/msw/treectrl.cpp $(COREDLL_ODEP) +coredll_msw_treectrl.o: $(srcdir)/src/msw/treectrl.cpp $(COREDLL_ODEP) $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/treectrl.cpp coredll_systhemectrl.o: $(srcdir)/src/msw/systhemectrl.cpp $(COREDLL_ODEP) @@ -28011,6 +28022,9 @@ coredll_qt_window.o: $(srcdir)/src/qt/window.cpp $(COREDLL_ODEP) coredll_qt_graphics.o: $(srcdir)/src/qt/graphics.cpp $(COREDLL_ODEP) $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/qt/graphics.cpp +coredll_qt_treectrl.o: $(srcdir)/src/qt/treectrl.cpp $(COREDLL_ODEP) + $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/qt/treectrl.cpp + coredll_univ_anybutton.o: $(srcdir)/src/univ/anybutton.cpp $(COREDLL_ODEP) $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/univ/anybutton.cpp @@ -31770,7 +31784,7 @@ corelib_msw_textentry.o: $(srcdir)/src/msw/textentry.cpp $(CORELIB_ODEP) corelib_msw_tglbtn.o: $(srcdir)/src/msw/tglbtn.cpp $(CORELIB_ODEP) $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/tglbtn.cpp -corelib_treectrl.o: $(srcdir)/src/msw/treectrl.cpp $(CORELIB_ODEP) +corelib_msw_treectrl.o: $(srcdir)/src/msw/treectrl.cpp $(CORELIB_ODEP) $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/treectrl.cpp corelib_systhemectrl.o: $(srcdir)/src/msw/systhemectrl.cpp $(CORELIB_ODEP) @@ -32265,6 +32279,9 @@ corelib_qt_window.o: $(srcdir)/src/qt/window.cpp $(CORELIB_ODEP) corelib_qt_graphics.o: $(srcdir)/src/qt/graphics.cpp $(CORELIB_ODEP) $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/qt/graphics.cpp +corelib_qt_treectrl.o: $(srcdir)/src/qt/treectrl.cpp $(CORELIB_ODEP) + $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/qt/treectrl.cpp + corelib_univ_anybutton.o: $(srcdir)/src/univ/anybutton.cpp $(CORELIB_ODEP) $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/univ/anybutton.cpp diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl index b7cc9e1699..d42f8d1621 100644 --- a/build/bakefiles/files.bkl +++ b/build/bakefiles/files.bkl @@ -347,7 +347,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! wx/qt/toolbar.h wx/qt/tooltip.h wx/qt/toplevel.h - wx/qt/window.h wx/generic/fdrepdlg.h wx/generic/filepickerg.h @@ -362,6 +361,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! wx/qt/dataview.h wx/qt/dvrenderers.h $(QT_PLATFORM_HDR) + wx/qt/treectrl.h @@ -460,6 +460,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/qt/utils.cpp src/qt/window.cpp $(QT_PLATFORM_SRC) + src/qt/treectrl.cpp diff --git a/build/cmake/files.cmake b/build/cmake/files.cmake index 75cc4a916f..5d7319af7e 100644 --- a/build/cmake/files.cmake +++ b/build/cmake/files.cmake @@ -276,6 +276,7 @@ set(QT_HDR wx/qt/dataview.h wx/generic/activityindicator.h ${QT_PLATFORM_HDR} + wx/qt/treectrl.h ) set(QT_SRC @@ -374,6 +375,7 @@ set(QT_SRC src/qt/dataview.cpp src/qt/taskbar.cpp ${QT_PLATFORM_SRC} + src/qt/treectrl.cpp ) set(MEDIA_QT_SRC diff --git a/build/files b/build/files index 8df05a9460..fbadb0eb71 100644 --- a/build/files +++ b/build/files @@ -297,6 +297,7 @@ QT_HDR = wx/qt/toolbar.h wx/qt/tooltip.h wx/qt/toplevel.h + wx/qt/treectrl.h wx/qt/window.h QT_SRC= @@ -392,6 +393,7 @@ QT_SRC= src/qt/toolbar.cpp src/qt/tooltip.cpp src/qt/toplevel.cpp + src/qt/treectrl.cpp src/qt/uiaction.cpp src/qt/utils.cpp src/qt/window.cpp diff --git a/include/wx/generic/treectlg.h b/include/wx/generic/treectlg.h index 4fec700066..36843e3924 100644 --- a/include/wx/generic/treectlg.h +++ b/include/wx/generic/treectlg.h @@ -360,7 +360,7 @@ private: wxDECLARE_NO_COPY_CLASS(wxGenericTreeCtrl); }; -#if !defined(__WXMSW__) || defined(__WXUNIVERSAL__) +#if !defined(__WXMSW__) && ! defined(__WXQT__) || defined(__WXUNIVERSAL__) /* * wxTreeCtrl has to be a real class or we have problems with * the run-time information. diff --git a/include/wx/qt/private/converter.h b/include/wx/qt/private/converter.h index 7cdce58fad..c00149a47d 100644 --- a/include/wx/qt/private/converter.h +++ b/include/wx/qt/private/converter.h @@ -19,6 +19,7 @@ #include #include #include +#include // Rely on overloading and let the compiler pick the correct version, which makes // them easier to use then to write wxQtConvertQtRectToWxRect() or wxQtConvertWxRectToQtRect() @@ -54,6 +55,16 @@ inline QString wxQtConvertString( const wxString &str ) return QString( str.utf8_str() ); } +inline wxColour wxQtConvertColour(const QColor &colour) +{ + return wxColour(colour.red(), colour.green(), colour.blue(), colour.alpha()); +} + +inline QColor wxQtConvertColour(const wxColour &colour) +{ + return QColor(colour.Red(), colour.Green(), colour.Blue(), colour.Alpha()); +} + #if wxUSE_DATETIME class WXDLLIMPEXP_FWD_BASE wxDateTime; diff --git a/include/wx/qt/treectrl.h b/include/wx/qt/treectrl.h index 5fdc125ce0..51ecd87ef8 100644 --- a/include/wx/qt/treectrl.h +++ b/include/wx/qt/treectrl.h @@ -28,113 +28,115 @@ public: const wxValidator& validator = wxDefaultValidator, const wxString& name = wxTreeCtrlNameStr); - virtual unsigned int GetCount() const; + virtual unsigned int GetCount() const wxOVERRIDE; - virtual unsigned int GetIndent() const; - virtual void SetIndent(unsigned int indent); + virtual unsigned int GetIndent() const wxOVERRIDE; + virtual void SetIndent(unsigned int indent) wxOVERRIDE; - virtual void SetImageList(wxImageList *imageList); - virtual void SetStateImageList(wxImageList *imageList); + virtual void SetImageList(wxImageList *imageList) wxOVERRIDE; + virtual void SetStateImageList(wxImageList *imageList) wxOVERRIDE; - virtual wxString GetItemText(const wxTreeItemId& item) const; + virtual wxString GetItemText(const wxTreeItemId& item) const wxOVERRIDE; virtual int GetItemImage(const wxTreeItemId& item, - wxTreeItemIcon which = wxTreeItemIcon_Normal) const; - virtual wxTreeItemData *GetItemData(const wxTreeItemId& item) const; - virtual wxColour GetItemTextColour(const wxTreeItemId& item) const; - virtual wxColour GetItemBackgroundColour(const wxTreeItemId& item) const; - virtual wxFont GetItemFont(const wxTreeItemId& item) const; + wxTreeItemIcon which = wxTreeItemIcon_Normal) const wxOVERRIDE; + virtual wxTreeItemData *GetItemData(const wxTreeItemId& item) const wxOVERRIDE; + virtual wxColour GetItemTextColour(const wxTreeItemId& item) const wxOVERRIDE; + virtual wxColour GetItemBackgroundColour(const wxTreeItemId& item) const wxOVERRIDE; + virtual wxFont GetItemFont(const wxTreeItemId& item) const wxOVERRIDE; - virtual void SetItemText(const wxTreeItemId& item, const wxString& text); + virtual void SetItemText(const wxTreeItemId& item, const wxString& text) wxOVERRIDE; virtual void SetItemImage(const wxTreeItemId& item, int image, - wxTreeItemIcon which = wxTreeItemIcon_Normal); - virtual void SetItemData(const wxTreeItemId& item, wxTreeItemData *data); - virtual void SetItemHasChildren(const wxTreeItemId& item, bool has = true); - virtual void SetItemBold(const wxTreeItemId& item, bool bold = true); - virtual void SetItemDropHighlight(const wxTreeItemId& item, bool highlight = true); - virtual void SetItemTextColour(const wxTreeItemId& item, const wxColour& col); - virtual void SetItemBackgroundColour(const wxTreeItemId& item, const wxColour& col); - virtual void SetItemFont(const wxTreeItemId& item, const wxFont& font); + wxTreeItemIcon which = wxTreeItemIcon_Normal) wxOVERRIDE; + virtual void SetItemData(const wxTreeItemId& item, wxTreeItemData *data) wxOVERRIDE; + virtual void SetItemHasChildren(const wxTreeItemId& item, bool has = true) wxOVERRIDE; + virtual void SetItemBold(const wxTreeItemId& item, bool bold = true) wxOVERRIDE; + virtual void SetItemDropHighlight(const wxTreeItemId& item, bool highlight = true) wxOVERRIDE; + virtual void SetItemTextColour(const wxTreeItemId& item, const wxColour& col) wxOVERRIDE; + virtual void SetItemBackgroundColour(const wxTreeItemId& item, const wxColour& col) wxOVERRIDE; + virtual void SetItemFont(const wxTreeItemId& item, const wxFont& font) wxOVERRIDE; - virtual bool IsVisible(const wxTreeItemId& item) const; - virtual bool ItemHasChildren(const wxTreeItemId& item) const; - virtual bool IsExpanded(const wxTreeItemId& item) const; - virtual bool IsSelected(const wxTreeItemId& item) const; - virtual bool IsBold(const wxTreeItemId& item) const; + virtual bool IsVisible(const wxTreeItemId& item) const wxOVERRIDE; + virtual bool ItemHasChildren(const wxTreeItemId& item) const wxOVERRIDE; + virtual bool IsExpanded(const wxTreeItemId& item) const wxOVERRIDE; + virtual bool IsSelected(const wxTreeItemId& item) const wxOVERRIDE; + virtual bool IsBold(const wxTreeItemId& item) const wxOVERRIDE; - virtual size_t GetChildrenCount(const wxTreeItemId& item, bool recursively = true) const; + virtual size_t GetChildrenCount(const wxTreeItemId& item, bool recursively = true) const wxOVERRIDE; - virtual wxTreeItemId GetRootItem() const; - virtual wxTreeItemId GetSelection() const; - virtual size_t GetSelections(wxArrayTreeItemIds& selections) const; + virtual wxTreeItemId GetRootItem() const wxOVERRIDE; + virtual wxTreeItemId GetSelection() const wxOVERRIDE; + virtual size_t GetSelections(wxArrayTreeItemIds& selections) const wxOVERRIDE; - virtual void SetFocusedItem(const wxTreeItemId& item); - virtual void ClearFocusedItem(); - virtual wxTreeItemId GetFocusedItem() const; + virtual void SetFocusedItem(const wxTreeItemId& item) wxOVERRIDE; + virtual void ClearFocusedItem() wxOVERRIDE; + virtual wxTreeItemId GetFocusedItem() const wxOVERRIDE; - virtual wxTreeItemId GetItemParent(const wxTreeItemId& item) const; - - virtual wxTreeItemId GetFirstChild(const wxTreeItemId& item, wxTreeItemIdValue& cookie) const; - virtual wxTreeItemId GetNextChild(const wxTreeItemId& item, wxTreeItemIdValue& cookie) const; - virtual wxTreeItemId GetLastChild(const wxTreeItemId& item) const; - virtual wxTreeItemId GetNextSibling(const wxTreeItemId& item) const; - virtual wxTreeItemId GetPrevSibling(const wxTreeItemId& item) const; - virtual wxTreeItemId GetFirstVisibleItem() const; - virtual wxTreeItemId GetNextVisible(const wxTreeItemId& item) const; - virtual wxTreeItemId GetPrevVisible(const wxTreeItemId& item) const; + virtual wxTreeItemId GetItemParent(const wxTreeItemId& item) const wxOVERRIDE; + + virtual wxTreeItemId GetFirstChild(const wxTreeItemId& item, wxTreeItemIdValue& cookie) const wxOVERRIDE; + virtual wxTreeItemId GetNextChild(const wxTreeItemId& item, wxTreeItemIdValue& cookie) const wxOVERRIDE; + virtual wxTreeItemId GetLastChild(const wxTreeItemId& item) const wxOVERRIDE; + virtual wxTreeItemId GetNextSibling(const wxTreeItemId& item) const wxOVERRIDE; + virtual wxTreeItemId GetPrevSibling(const wxTreeItemId& item) const wxOVERRIDE; + virtual wxTreeItemId GetFirstVisibleItem() const wxOVERRIDE; + virtual wxTreeItemId GetNextVisible(const wxTreeItemId& item) const wxOVERRIDE; + virtual wxTreeItemId GetPrevVisible(const wxTreeItemId& item) const wxOVERRIDE; virtual wxTreeItemId AddRoot(const wxString& text, int image = -1, int selImage = -1, - wxTreeItemData *data = NULL); + wxTreeItemData *data = NULL) wxOVERRIDE; - virtual void Delete(const wxTreeItemId& item); - virtual void DeleteChildren(const wxTreeItemId& item); - virtual void DeleteAllItems(); + virtual void Delete(const wxTreeItemId& item) wxOVERRIDE; + virtual void DeleteChildren(const wxTreeItemId& item) wxOVERRIDE; + virtual void DeleteAllItems() wxOVERRIDE; - virtual void Expand(const wxTreeItemId& item); - virtual void Collapse(const wxTreeItemId& item); - virtual void CollapseAndReset(const wxTreeItemId& item); - virtual void Toggle(const wxTreeItemId& item); + virtual void Expand(const wxTreeItemId& item) wxOVERRIDE; + virtual void Collapse(const wxTreeItemId& item) wxOVERRIDE; + virtual void CollapseAndReset(const wxTreeItemId& item) wxOVERRIDE; + virtual void Toggle(const wxTreeItemId& item) wxOVERRIDE; - virtual void Unselect(); - virtual void UnselectAll(); - virtual void SelectItem(const wxTreeItemId& item, bool select = true); - virtual void SelectChildren(const wxTreeItemId& parent); + virtual void Unselect() wxOVERRIDE; + virtual void UnselectAll() wxOVERRIDE; + virtual void SelectItem(const wxTreeItemId& item, bool select = true) wxOVERRIDE; + virtual void SelectChildren(const wxTreeItemId& parent) wxOVERRIDE; - virtual void EnsureVisible(const wxTreeItemId& item); - virtual void ScrollTo(const wxTreeItemId& item); + virtual void EnsureVisible(const wxTreeItemId& item) wxOVERRIDE; + virtual void ScrollTo(const wxTreeItemId& item) wxOVERRIDE; - virtual wxTextCtrl *EditLabel(const wxTreeItemId& item, wxClassInfo* textCtrlClass = CLASSINFO(wxTextCtrl)); - virtual wxTextCtrl *GetEditControl() const; - virtual void EndEditLabel(const wxTreeItemId& item, bool discardChanges = false); + virtual wxTextCtrl *EditLabel(const wxTreeItemId& item, wxClassInfo* textCtrlClass = CLASSINFO(wxTextCtrl)) wxOVERRIDE; + virtual wxTextCtrl *GetEditControl() const wxOVERRIDE; + virtual void EndEditLabel(const wxTreeItemId& item, bool discardChanges = false) wxOVERRIDE; - virtual void SortChildren(const wxTreeItemId& item); + virtual void SortChildren(const wxTreeItemId& item) wxOVERRIDE; - virtual bool GetBoundingRect(const wxTreeItemId& item, wxRect& rect, bool textOnly = false) const; + virtual bool GetBoundingRect(const wxTreeItemId& item, wxRect& rect, bool textOnly = false) const wxOVERRIDE; - virtual QWidget *GetHandle() const; + virtual QWidget *GetHandle() const wxOVERRIDE; protected: - virtual int DoGetItemState(const wxTreeItemId& item) const; - virtual void DoSetItemState(const wxTreeItemId& item, int state); + virtual int DoGetItemState(const wxTreeItemId& item) const wxOVERRIDE; + virtual void DoSetItemState(const wxTreeItemId& item, int state) wxOVERRIDE; virtual wxTreeItemId DoInsertItem(const wxTreeItemId& parent, size_t pos, const wxString& text, int image, int selImage, - wxTreeItemData *data); + wxTreeItemData *data) wxOVERRIDE; virtual wxTreeItemId DoInsertAfter(const wxTreeItemId& parent, const wxTreeItemId& idPrevious, const wxString& text, int image = -1, int selImage = -1, - wxTreeItemData *data = NULL); + wxTreeItemData *data = NULL) wxOVERRIDE; - virtual wxTreeItemId DoTreeHitTest(const wxPoint& point, int& flags) const; + virtual wxTreeItemId DoTreeHitTest(const wxPoint& point, int& flags) const wxOVERRIDE; private: - QTreeWidget *m_qtTreeWidget; + void SendDeleteEvent(const wxTreeItemId &item); + wxTreeItemId GetNext(const wxTreeItemId &item) const; + QTreeWidget *m_qtTreeWidget; wxDECLARE_DYNAMIC_CLASS(wxTreeCtrl); }; diff --git a/include/wx/treectrl.h b/include/wx/treectrl.h index f73ade7b2a..055a5ad055 100644 --- a/include/wx/treectrl.h +++ b/include/wx/treectrl.h @@ -26,7 +26,7 @@ class WXDLLIMPEXP_FWD_CORE wxImageList; -#if !defined(__WXMSW__) || defined(__WXUNIVERSAL__) +#if !defined(__WXMSW__) && !defined(__WXQT__) || defined(__WXUNIVERSAL__) #define wxHAS_GENERIC_TREECTRL #endif @@ -465,6 +465,8 @@ private: #include "wx/generic/treectlg.h" #elif defined(__WXMSW__) #include "wx/msw/treectrl.h" +#elif defined(__WXQT__) + #include "wx/qt/treectrl.h" #else #error "unknown native wxTreeCtrl implementation" #endif diff --git a/src/qt/treectrl.cpp b/src/qt/treectrl.cpp index f73a202612..1a8377799f 100644 --- a/src/qt/treectrl.cpp +++ b/src/qt/treectrl.cpp @@ -7,12 +7,49 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" - #include "wx/treectrl.h" +#include "wx/qt/private/winevent.h" #include -wxTreeCtrl::wxTreeCtrl() +namespace +{ + class wxQTreeWidget : public wxQtEventSignalHandler + { + public: + wxQTreeWidget(wxWindow *parent, wxTreeCtrl *handler) : + wxQtEventSignalHandler(parent, handler) + { + } + }; + + QTreeWidgetItem *wxQtConvertTreeItem(const wxTreeItemId &item) + { + return static_cast(item.GetID()); + } + + wxTreeItemId wxQtConvertTreeItem(QTreeWidgetItem *item) + { + return wxTreeItemId(item); + } + + size_t CountChildren(QTreeWidgetItem *item) + { + const int currentCount = item->childCount(); + size_t totalCount = currentCount; + + for(int i = 0; i < totalCount; ++i) + { + totalCount += CountChildren(item->child(0)); + } + + return totalCount; + } + +} + +wxTreeCtrl::wxTreeCtrl() : + m_qtTreeWidget(NULL) { } @@ -21,9 +58,9 @@ wxTreeCtrl::wxTreeCtrl(wxWindow *parent, wxWindowID id, const wxSize& size, long style, const wxValidator& validator, - const wxString& name) + const wxString& name) { - Create( parent, id, pos, size, style, validator, name ); + Create(parent, id, pos, size, style, validator, name); } bool wxTreeCtrl::Create(wxWindow *parent, wxWindowID id, @@ -33,17 +70,16 @@ bool wxTreeCtrl::Create(wxWindow *parent, wxWindowID id, const wxValidator& validator, const wxString& name) { - m_qtTreeWidget = new QTreeWidget( parent->GetHandle() ); + m_qtTreeWidget = new wxQTreeWidget(parent, this); - return QtCreateControl( parent, id, pos, size, style, validator, name ); + return QtCreateControl(parent, id, pos, size, style, validator, name); } unsigned wxTreeCtrl::GetCount() const { - return 0; + return m_qtTreeWidget->topLevelItemCount(); } - unsigned wxTreeCtrl::GetIndent() const { return m_qtTreeWidget->columnCount(); @@ -56,247 +92,587 @@ void wxTreeCtrl::SetIndent(unsigned int indent) void wxTreeCtrl::SetImageList(wxImageList *imageList) { + m_imageListNormal = imageList; } void wxTreeCtrl::SetStateImageList(wxImageList *imageList) { + m_imageListState = imageList; } wxString wxTreeCtrl::GetItemText(const wxTreeItemId& item) const { - return wxString(); + if (!item.IsOk()) + return ""; + + QTreeWidgetItem* qTreeItem = wxQtConvertTreeItem(item); + return wxQtConvertString(qTreeItem->text(0)); } -int wxTreeCtrl::GetItemImage(const wxTreeItemId& item, - wxTreeItemIcon which) const +int wxTreeCtrl::GetItemImage(const wxTreeItemId& item, wxTreeItemIcon WXUNUSED(which)) const { + wxCHECK_MSG(item.IsOk(), 0, "invalid tree item"); + return 0; } wxTreeItemData *wxTreeCtrl::GetItemData(const wxTreeItemId& item) const { - return NULL; + wxCHECK_MSG(item.IsOk(), NULL, "invalid tree item"); + + QTreeWidgetItem* qTreeItem = wxQtConvertTreeItem(item); + QVariant itemData = qTreeItem->data(0, Qt::UserRole); + void* value = itemData.value(); + return static_cast(value); } wxColour wxTreeCtrl::GetItemTextColour(const wxTreeItemId& item) const { - return wxColour(); + wxCHECK_MSG(item.IsOk(), wxNullColour, "invalid tree item"); + + QTreeWidgetItem* qTreeItem = wxQtConvertTreeItem(item); + return wxQtConvertColour(qTreeItem->textColor(0)); + } wxColour wxTreeCtrl::GetItemBackgroundColour(const wxTreeItemId& item) const { - return wxColour(); + wxCHECK_MSG(item.IsOk(), wxNullColour, "invalid tree item"); + + QTreeWidgetItem* qTreeItem = wxQtConvertTreeItem(item); + return wxQtConvertColour(qTreeItem->backgroundColor(0)); } wxFont wxTreeCtrl::GetItemFont(const wxTreeItemId& item) const { - return wxFont(); + wxCHECK_MSG(item.IsOk(), wxNullFont, "invalid tree item"); + + QTreeWidgetItem* qTreeItem = wxQtConvertTreeItem(item); + return wxFont(qTreeItem->font(0)); } void wxTreeCtrl::SetItemText(const wxTreeItemId& item, const wxString& text) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + QTreeWidgetItem* qTreeItem = wxQtConvertTreeItem(item); + qTreeItem->setText(0, wxQtConvertString(text)); } -void wxTreeCtrl::SetItemImage(const wxTreeItemId& item, - int image, - wxTreeItemIcon which) +void wxTreeCtrl::SetItemImage(const wxTreeItemId& item, int WXUNUSED(image), wxTreeItemIcon WXUNUSED(which)) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); } void wxTreeCtrl::SetItemData(const wxTreeItemId& item, wxTreeItemData *data) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + if (data != NULL) + data->SetId(item); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + qTreeItem->setData(0, Qt::UserRole, QVariant::fromValue(static_cast(data))); } void wxTreeCtrl::SetItemHasChildren(const wxTreeItemId& item, bool has) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + qTreeItem->setChildIndicatorPolicy(has ? QTreeWidgetItem::ShowIndicator : QTreeWidgetItem::DontShowIndicatorWhenChildless); } void wxTreeCtrl::SetItemBold(const wxTreeItemId& item, bool bold) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + QFont font = qTreeItem->font(0); + font.setBold(bold); + qTreeItem->setFont(0, font); } void wxTreeCtrl::SetItemDropHighlight(const wxTreeItemId& item, bool highlight) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + + wxColour fg, bg; + + if (highlight) + { + bg = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT); + fg = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT); + } + else + { + bg = GetBackgroundColour(); + fg = GetForegroundColour(); + } + + qTreeItem->setBackgroundColor(0, wxQtConvertColour(bg)); + qTreeItem->setTextColor(0, wxQtConvertColour(fg)); } void wxTreeCtrl::SetItemTextColour(const wxTreeItemId& item, const wxColour& col) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + qTreeItem->setTextColor(0, wxQtConvertColour(col)); } void wxTreeCtrl::SetItemBackgroundColour(const wxTreeItemId& item, const wxColour& col) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + qTreeItem->setTextColor(0, wxQtConvertColour(col)); } void wxTreeCtrl::SetItemFont(const wxTreeItemId& item, const wxFont& font) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + qTreeItem->setFont(0, font.GetHandle()); } bool wxTreeCtrl::IsVisible(const wxTreeItemId& item) const { - return false; + wxCHECK_MSG(item.IsOk(), false, "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + const QRect visualRect = m_qtTreeWidget->visualItemRect(qTreeItem); + return visualRect.isValid(); } bool wxTreeCtrl::ItemHasChildren(const wxTreeItemId& item) const { - return false; + wxCHECK_MSG(item.IsOk(), false, "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + return qTreeItem->childCount() > 0; } bool wxTreeCtrl::IsExpanded(const wxTreeItemId& item) const { - return false; + wxCHECK_MSG(item.IsOk(), false, "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + return qTreeItem->isExpanded(); } bool wxTreeCtrl::IsSelected(const wxTreeItemId& item) const { - return false; + wxCHECK_MSG(item.IsOk(), false, "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + return qTreeItem->isSelected(); } bool wxTreeCtrl::IsBold(const wxTreeItemId& item) const { - return false; + wxCHECK_MSG(item.IsOk(), false, "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + QFont font = qTreeItem->font(0); + return font.bold(); } size_t wxTreeCtrl::GetChildrenCount(const wxTreeItemId& item, bool recursively) const { - return 0; + wxCHECK_MSG(item.IsOk(), 0, "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + + if (recursively) + return CountChildren(qTreeItem); + + return qTreeItem->childCount(); } wxTreeItemId wxTreeCtrl::GetRootItem() const { - return wxTreeItemId(); + QTreeWidgetItem *root = m_qtTreeWidget->invisibleRootItem(); + if (HasFlag(wxTR_HIDE_ROOT)) + { + return wxQtConvertTreeItem(root); + } + + if (root->childCount() == 0) + return wxTreeItemId(); + + return wxQtConvertTreeItem(root->child(0)); } wxTreeItemId wxTreeCtrl::GetSelection() const { - return wxTreeItemId(); + QList selections = m_qtTreeWidget->selectedItems(); + return selections.isEmpty() ? wxTreeItemId() : wxQtConvertTreeItem(selections[0]); + } size_t wxTreeCtrl::GetSelections(wxArrayTreeItemIds& selections) const { - return 0; + QList qtSelections = m_qtTreeWidget->selectedItems(); + + const size_t numberOfSelections = qtSelections.size(); + selections.SetCount(numberOfSelections); + + for (size_t i = 0; i < numberOfSelections; ++i) + { + selections[i] = qtSelections[i]; + } + + return numberOfSelections; } void wxTreeCtrl::SetFocusedItem(const wxTreeItemId& item) { - + wxCHECK_RET(item.IsOk(), "invalid tree item"); + m_qtTreeWidget->setCurrentItem(wxQtConvertTreeItem(item), 0); } void wxTreeCtrl::ClearFocusedItem() { - + QTreeWidgetItem *current = m_qtTreeWidget->currentItem(); + if (current != NULL) + current->setSelected(false); } wxTreeItemId wxTreeCtrl::GetFocusedItem() const { - return wxTreeItemId(); + return wxQtConvertTreeItem(m_qtTreeWidget->currentItem()); } wxTreeItemId wxTreeCtrl::GetItemParent(const wxTreeItemId& item) const { - return wxTreeItemId(); + wxCHECK_MSG(item.IsOk(), wxTreeItemId(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + return wxQtConvertTreeItem(qTreeItem->parent()); } wxTreeItemId wxTreeCtrl::GetFirstChild(const wxTreeItemId& item, wxTreeItemIdValue& cookie) const { - return wxTreeItemId(); + wxCHECK_MSG(item.IsOk(), wxTreeItemId(), "invalid tree item"); + + cookie = 0; + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + + return qTreeItem->childCount() > 0 ? wxQtConvertTreeItem(qTreeItem->child(0)) : wxTreeItemId(); } wxTreeItemId wxTreeCtrl::GetNextChild(const wxTreeItemId& item, wxTreeItemIdValue& cookie) const { + wxCHECK_MSG(item.IsOk(), wxTreeItemId(), "invalid tree item"); + + int currentIndex = reinterpret_cast(cookie); + ++currentIndex; + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + + if ( currentIndex < qTreeItem->childCount() ) + { + cookie = reinterpret_cast(currentIndex); + return wxQtConvertTreeItem(qTreeItem->child(currentIndex)); + } + return wxTreeItemId(); } wxTreeItemId wxTreeCtrl::GetLastChild(const wxTreeItemId& item) const { - return wxTreeItemId(); + wxCHECK_MSG(item.IsOk(), wxTreeItemId(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + const int childCount = qTreeItem->childCount(); + return childCount == 0 ? wxTreeItemId() : wxQtConvertTreeItem(qTreeItem->child(childCount - 1)); } wxTreeItemId wxTreeCtrl::GetNextSibling(const wxTreeItemId& item) const { - return wxTreeItemId(); + wxCHECK_MSG(item.IsOk(), wxTreeItemId(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + QTreeWidgetItem *parent = qTreeItem->parent(); + + if ( parent != NULL ) + { + int index = parent->indexOfChild(qTreeItem); + wxASSERT(index != -1); + + ++index; + return index < parent->childCount() ? wxQtConvertTreeItem(parent->child(index)) : wxTreeItemId(); + } + + int index = m_qtTreeWidget->indexOfTopLevelItem(qTreeItem); + wxASSERT(index != -1); + + ++index; + return index < m_qtTreeWidget->topLevelItemCount() ? wxQtConvertTreeItem(m_qtTreeWidget->topLevelItem(index)) : wxTreeItemId(); } wxTreeItemId wxTreeCtrl::GetPrevSibling(const wxTreeItemId& item) const { - return wxTreeItemId(); + wxCHECK_MSG(item.IsOk(), wxTreeItemId(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + QTreeWidgetItem *parent = qTreeItem->parent(); + + if (parent != NULL) + { + int index = parent->indexOfChild(qTreeItem); + wxASSERT(index != -1); + + --index; + return index >= 0 ? wxQtConvertTreeItem(parent->child(index)) : wxTreeItemId(); + } + + int index = m_qtTreeWidget->indexOfTopLevelItem(qTreeItem); + wxASSERT(index != -1); + + --index; + return index >= 0 ? wxQtConvertTreeItem(m_qtTreeWidget->topLevelItem(index)) : wxTreeItemId(); } wxTreeItemId wxTreeCtrl::GetFirstVisibleItem() const { + wxTreeItemId itemid = GetRootItem(); + if (!itemid.IsOk()) + return itemid; + do + { + if (IsVisible(itemid)) + return itemid; + itemid = GetNext(itemid); + } while (itemid.IsOk()); + return wxTreeItemId(); } wxTreeItemId wxTreeCtrl::GetNextVisible(const wxTreeItemId& item) const { + wxCHECK_MSG(item.IsOk(), wxTreeItemId(), wxT("invalid tree item")); + wxASSERT_MSG(IsVisible(item), wxT("this item itself should be visible")); + + wxTreeItemId id = item; + if (id.IsOk()) + { + while (id = GetNext(id), id.IsOk()) + { + if (IsVisible(id)) + return id; + } + } return wxTreeItemId(); } wxTreeItemId wxTreeCtrl::GetPrevVisible(const wxTreeItemId& item) const { - return wxTreeItemId(); + wxCHECK_MSG(item.IsOk(), wxTreeItemId(), wxT("invalid tree item")); + wxASSERT_MSG(IsVisible(item), wxT("this item itself should be visible")); + + // find out the starting point + wxTreeItemId prevItem = GetPrevSibling(item); + if (!prevItem.IsOk()) + { + prevItem = GetItemParent(item); + } + + // find the first visible item after it + while (prevItem.IsOk() && !IsVisible(prevItem)) + { + prevItem = GetNext(prevItem); + if (!prevItem.IsOk() || prevItem == item) + { + // there are no visible items before item + return wxTreeItemId(); + } + } + + // from there we must be able to navigate until this item + while (prevItem.IsOk()) + { + const wxTreeItemId nextItem = GetNextVisible(prevItem); + if (!nextItem.IsOk() || nextItem == item) + break; + + prevItem = nextItem; + } + + return prevItem; } wxTreeItemId wxTreeCtrl::AddRoot(const wxString& text, int image, int selImage, wxTreeItemData *data) { - return wxTreeItemId(); + QTreeWidgetItem *item = m_qtTreeWidget->invisibleRootItem(); + + if ( HasFlag(wxTR_HIDE_ROOT) ) + { + item->setText(0, wxQtConvertString(text)); + return wxQtConvertTreeItem(item); + } + + return DoInsertItem(wxQtConvertTreeItem(item), 0, text, image, selImage, data); } void wxTreeCtrl::Delete(const wxTreeItemId& item) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + QTreeWidgetItem *parent = qTreeItem->parent(); + + if ( parent != NULL ) + { + parent->removeChild(qTreeItem); + } + else + { + m_qtTreeWidget->removeItemWidget(qTreeItem, 0); + } + + SendDeleteEvent(item); + + delete qTreeItem; } void wxTreeCtrl::DeleteChildren(const wxTreeItemId& item) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + while (qTreeItem->childCount() > 0) + { + QTreeWidgetItem *child = qTreeItem->child(0); + DeleteChildren(wxQtConvertTreeItem(child)); + qTreeItem->removeChild(child); + + SendDeleteEvent(wxQtConvertTreeItem(child)); + + delete child; + } } void wxTreeCtrl::DeleteAllItems() { + DeleteChildren(wxQtConvertTreeItem(m_qtTreeWidget->invisibleRootItem())); } void wxTreeCtrl::Expand(const wxTreeItemId& item) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + qTreeItem->setExpanded(true); } void wxTreeCtrl::Collapse(const wxTreeItemId& item) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + qTreeItem->setExpanded(false); } void wxTreeCtrl::CollapseAndReset(const wxTreeItemId& item) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + Collapse(item); + DeleteChildren(item); } void wxTreeCtrl::Toggle(const wxTreeItemId& item) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + qTreeItem->setSelected(!qTreeItem->isSelected()); } void wxTreeCtrl::Unselect() { + QTreeWidgetItem *current = m_qtTreeWidget->currentItem(); + + if (current != NULL) + current->setSelected(false); } void wxTreeCtrl::UnselectAll() { + QList selections = m_qtTreeWidget->selectedItems(); + const size_t selectedCount = selections.size(); + for ( size_t i = 0; i < selectedCount; ++i) + { + selections[i]->setSelected(false); + } } void wxTreeCtrl::SelectItem(const wxTreeItemId& item, bool select) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + if ( !HasFlag(wxTR_MULTIPLE) ) + { + QList selections = m_qtTreeWidget->selectedItems(); + const size_t nSelections = selections.size(); + + for (size_t i = 0; i < nSelections; ++i) + { + selections[i]->setSelected(false); + } + } + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + qTreeItem->setSelected(select); } void wxTreeCtrl::SelectChildren(const wxTreeItemId& parent) { + wxCHECK_RET(parent.IsOk(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(parent); + const int childCount = qTreeItem->childCount(); + + for (int i = 0; i < childCount; ++i) + { + qTreeItem->child(i)->setSelected(true); + } } void wxTreeCtrl::EnsureVisible(const wxTreeItemId& item) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + QTreeWidgetItem *parent = qTreeItem->parent(); + + while ( parent != NULL ) + { + parent->setExpanded(true); + parent = parent->parent(); + } + + ScrollTo(item); } void wxTreeCtrl::ScrollTo(const wxTreeItemId& item) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + m_qtTreeWidget->scrollToItem(qTreeItem); } wxTextCtrl *wxTreeCtrl::EditLabel(const wxTreeItemId& item, wxClassInfo* textCtrlClass) { + wxCHECK_MSG(item.IsOk(), NULL, "invalid tree item"); return NULL; } @@ -307,24 +683,32 @@ wxTextCtrl *wxTreeCtrl::GetEditControl() const void wxTreeCtrl::EndEditLabel(const wxTreeItemId& item, bool discardChanges) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); } void wxTreeCtrl::SortChildren(const wxTreeItemId& item) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + qTreeItem->sortChildren(0, Qt::AscendingOrder); } bool wxTreeCtrl::GetBoundingRect(const wxTreeItemId& item, wxRect& rect, bool textOnly) const { + wxCHECK_MSG(item.IsOk(), false, "invalid tree item"); return false; } int wxTreeCtrl::DoGetItemState(const wxTreeItemId& item) const { + wxCHECK_MSG(item.IsOk(), wxTREE_ITEMSTATE_NONE, "invalid tree item"); return 0; } void wxTreeCtrl::DoSetItemState(const wxTreeItemId& item, int state) { + wxCHECK_RET(item.IsOk(), "invalid tree item"); } wxTreeItemId wxTreeCtrl::DoInsertItem(const wxTreeItemId& parent, @@ -333,7 +717,29 @@ wxTreeItemId wxTreeCtrl::DoInsertItem(const wxTreeItemId& parent, int image, int selImage, wxTreeItemData *data) { - return wxTreeItemId(); + wxCHECK_MSG(parent.IsOk(), wxTreeItemId(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(parent); + + QTreeWidgetItem *newItem = new QTreeWidgetItem; + newItem->setText(0, wxQtConvertString(text)); + newItem->setData(0, Qt::UserRole, QVariant::fromValue(static_cast(data))); + + if (pos == static_cast(-1)) + { + qTreeItem->addChild(newItem); + } + else + { + qTreeItem->insertChild(pos, newItem); + } + + wxTreeItemId wxItem = wxQtConvertTreeItem(newItem); + + if (data != NULL) + data->SetId(wxItem); + + return wxItem; } wxTreeItemId wxTreeCtrl::DoInsertAfter(const wxTreeItemId& parent, @@ -342,15 +748,64 @@ wxTreeItemId wxTreeCtrl::DoInsertAfter(const wxTreeItemId& parent, int image, int selImage, wxTreeItemData *data) { - return wxTreeItemId(); + wxCHECK_MSG(parent.IsOk(), wxTreeItemId(), "invalid tree item"); + wxCHECK_MSG(idPrevious.IsOk(), wxTreeItemId(), "invalid tree item"); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(parent); + const int index = qTreeItem->indexOfChild(wxQtConvertTreeItem(idPrevious)); + return DoInsertItem(parent, index + 1, text, image, selImage, data); } wxTreeItemId wxTreeCtrl::DoTreeHitTest(const wxPoint& point, int& flags) const { - return wxTreeItemId(); + int w, h; + GetSize(&w, &h); + flags = 0; + if (point.x < 0) flags |= wxTREE_HITTEST_TOLEFT; + if (point.x > w) flags |= wxTREE_HITTEST_TORIGHT; + if (point.y < 0) flags |= wxTREE_HITTEST_ABOVE; + if (point.y > h) flags |= wxTREE_HITTEST_BELOW; + if (flags) return wxTreeItemId(); + + QTreeWidgetItem *hitItem = m_qtTreeWidget->itemAt(wxQtConvertPoint(point)); + + if (hitItem == NULL) + flags |= wxTREE_HITTEST_NOWHERE; + + return wxQtConvertTreeItem(hitItem); } QWidget *wxTreeCtrl::GetHandle() const { return m_qtTreeWidget; } + +void wxTreeCtrl::SendDeleteEvent(const wxTreeItemId &item) +{ + wxTreeEvent event(wxEVT_TREE_DELETE_ITEM, GetId()); + event.SetItem(item); + HandleWindowEvent(event); +} + +wxTreeItemId wxTreeCtrl::GetNext(const wxTreeItemId &item) const +{ + wxCHECK_MSG(item.IsOk(), wxTreeItemId(), wxT("invalid tree item")); + + QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); + + if ( qTreeItem->childCount() > 0) + { + return qTreeItem->child(0); + } + + // Try a sibling of this or ancestor instead + wxTreeItemId p = item; + wxTreeItemId toFind; + do + { + toFind = GetNextSibling(p); + p = GetItemParent(p); + } while (p.IsOk() && !toFind.IsOk()); + return toFind; +} +