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;
+}
+