From 94a7330459de053b2c11f6646e5871ba852929b7 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 6 Oct 2017 16:28:30 +0200 Subject: [PATCH] add signal to scroll to view object --- src/Gui/Document.h | 2 ++ src/Gui/DocumentPy.xml | 9 +++++++-- src/Gui/DocumentPyImp.cpp | 13 +++++++++++++ src/Gui/Tree.cpp | 10 ++++++++++ src/Gui/Tree.h | 2 ++ 5 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/Gui/Document.h b/src/Gui/Document.h index 01ebc29935..ca568a887b 100644 --- a/src/Gui/Document.h +++ b/src/Gui/Document.h @@ -114,6 +114,8 @@ public: /// signal on changed Object, the 2nd argument is the highlite mode to use mutable boost::signal signalExpandObject; + /// signal on scrolling to an object + mutable boost::signal signalScrollToObject; /// signal on undo Document mutable boost::signal signalUndoDocument; /// signal on redo Document diff --git a/src/Gui/DocumentPy.xml b/src/Gui/DocumentPy.xml index 4f28cbe2f8..561435afc6 100644 --- a/src/Gui/DocumentPy.xml +++ b/src/Gui/DocumentPy.xml @@ -96,7 +96,12 @@ toggleTreeItem(DocObject,int=0) - change TreeItem of a document object 0:Toggle,1:Collaps,2:Expand - + + + scrollToTreeItem(ViewObject) - scroll the tree view to the item of a view object + + + The active object of the document @@ -121,4 +126,4 @@ - + diff --git a/src/Gui/DocumentPyImp.cpp b/src/Gui/DocumentPyImp.cpp index 0b7da59358..47db5522fd 100644 --- a/src/Gui/DocumentPyImp.cpp +++ b/src/Gui/DocumentPyImp.cpp @@ -42,6 +42,7 @@ #include "Tree.h" #include "ViewProviderDocumentObject.h" #include "ViewProviderPy.h" +#include "ViewProviderDocumentObjectPy.h" using namespace Gui; @@ -308,6 +309,18 @@ PyObject* DocumentPy::toggleTreeItem(PyObject *args) Py_Return; } +PyObject* DocumentPy::scrollToTreeItem(PyObject *args) +{ + PyObject *view; + if (!PyArg_ParseTuple(args,"O!",&(Gui::ViewProviderDocumentObjectPy::Type), &view)) + return 0; + + Gui::ViewProviderDocumentObject* vp = static_cast + (view)->getViewProviderDocumentObjectPtr(); + getDocumentPtr()->signalScrollToObject(*vp); + Py_Return; +} + Py::Object DocumentPy::getActiveObject(void) const { App::DocumentObject *object = getDocumentPtr()->getDocument()->getActiveObject(); diff --git a/src/Gui/Tree.cpp b/src/Gui/Tree.cpp index 120bac80f3..3f36bbf96e 100644 --- a/src/Gui/Tree.cpp +++ b/src/Gui/Tree.cpp @@ -939,6 +939,7 @@ DocumentItem::DocumentItem(const Gui::Document* doc, QTreeWidgetItem * parent) connectResObject = doc->signalResetEdit.connect(boost::bind(&DocumentItem::slotResetEdit, this, _1)); connectHltObject = doc->signalHighlightObject.connect(boost::bind(&DocumentItem::slotHighlightObject, this, _1,_2,_3)); connectExpObject = doc->signalExpandObject.connect(boost::bind(&DocumentItem::slotExpandObject, this, _1,_2)); + connectScrObject = doc->signalScrollToObject.connect(boost::bind(&DocumentItem::slotScrollToObject, this, _1)); setFlags(Qt::ItemIsEnabled/*|Qt::ItemIsEditable*/); } @@ -954,6 +955,7 @@ DocumentItem::~DocumentItem() connectResObject.disconnect(); connectHltObject.disconnect(); connectExpObject.disconnect(); + connectScrObject.disconnect(); } #define FOREACH_ITEM(_item, _obj) \ @@ -1317,6 +1319,14 @@ void DocumentItem::slotExpandObject (const Gui::ViewProviderDocumentObject& obj, END_FOREACH_ITEM } +void DocumentItem::slotScrollToObject(const Gui::ViewProviderDocumentObject& obj) +{ + FOREACH_ITEM(item,obj) + QTreeWidget* tree = item->treeWidget(); + tree->scrollToItem(item, QAbstractItemView::PositionAtTop); + END_FOREACH_ITEM +} + const Gui::Document* DocumentItem::document() const { return this->pDocument; diff --git a/src/Gui/Tree.h b/src/Gui/Tree.h index aec91138d4..913fa49ddb 100644 --- a/src/Gui/Tree.h +++ b/src/Gui/Tree.h @@ -174,6 +174,7 @@ protected: void slotResetEdit (const Gui::ViewProviderDocumentObject&); void slotHighlightObject (const Gui::ViewProviderDocumentObject&,const Gui::HighlightMode&,bool); void slotExpandObject (const Gui::ViewProviderDocumentObject&,const Gui::TreeItemMode&); + void slotScrollToObject (const Gui::ViewProviderDocumentObject&); bool createNewItem(const Gui::ViewProviderDocumentObject&, QTreeWidgetItem *parent=0, int index=-1, @@ -193,6 +194,7 @@ private: Connection connectResObject; Connection connectHltObject; Connection connectExpObject; + Connection connectScrObject; }; /** The link between the tree and a document object.