add signal to scroll to view object

This commit is contained in:
wmayer
2017-10-06 16:28:30 +02:00
parent 5a2acd5645
commit 941cc68efc
5 changed files with 34 additions and 2 deletions

View File

@@ -114,6 +114,8 @@ public:
/// signal on changed Object, the 2nd argument is the highlite mode to use
mutable boost::signal<void (const Gui::ViewProviderDocumentObject&,
const Gui::TreeItemMode&)> signalExpandObject;
/// signal on scrolling to an object
mutable boost::signal<void (const Gui::ViewProviderDocumentObject&)> signalScrollToObject;
/// signal on undo Document
mutable boost::signal<void (const Gui::Document& doc)> signalUndoDocument;
/// signal on redo Document

View File

@@ -96,7 +96,12 @@
<UserDocu>toggleTreeItem(DocObject,int=0) - change TreeItem of a document object 0:Toggle,1:Collaps,2:Expand</UserDocu>
</Documentation>
</Methode>
<Attribute Name="ActiveObject" ReadOnly="false">
<Methode Name="scrollToTreeItem">
<Documentation>
<UserDocu>scrollToTreeItem(ViewObject) - scroll the tree view to the item of a view object</UserDocu>
</Documentation>
</Methode>
<Attribute Name="ActiveObject" ReadOnly="false">
<Documentation>
<UserDocu>The active object of the document</UserDocu>
</Documentation>
@@ -121,4 +126,4 @@
<Parameter Name="Modified" Type="Boolean" />
</Attribute>
</PythonExport>
</GenerateModel>
</GenerateModel>

View File

@@ -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<ViewProviderDocumentObjectPy*>
(view)->getViewProviderDocumentObjectPtr();
getDocumentPtr()->signalScrollToObject(*vp);
Py_Return;
}
Py::Object DocumentPy::getActiveObject(void) const
{
App::DocumentObject *object = getDocumentPtr()->getDocument()->getActiveObject();

View File

@@ -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;

View File

@@ -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.