Gui: add MDIViewPy.cast_to_base and implement in Python wrappers for sub-classes of MDIView

This commit is contained in:
wmayer
2021-11-19 15:44:23 +01:00
parent 508df64732
commit 8eb099d4e1
6 changed files with 47 additions and 1 deletions

View File

@@ -53,6 +53,7 @@ void MDIViewPy::init_type()
behaviors().supportRepr();
behaviors().supportGetattr();
behaviors().supportSetattr();
behaviors().set_tp_new(extension_object_new);
add_varargs_method("message",&MDIViewPy::sendMessage,"deprecated: use sendMessage");
add_varargs_method("sendMessage",&MDIViewPy::sendMessage,"sendMessage(str)");
@@ -60,6 +61,26 @@ void MDIViewPy::init_type()
add_varargs_method("fitAll",&MDIViewPy::fitAll,"fitAll()");
add_varargs_method("setActiveObject", &MDIViewPy::setActiveObject, "setActiveObject(name,object,subname=None)\nadd or set a new active object");
add_varargs_method("getActiveObject", &MDIViewPy::getActiveObject, "getActiveObject(name,resolve=True)\nreturns the active object for the given type");
add_varargs_method("cast_to_base", &MDIViewPy::cast_to_base, "cast_to_base() cast to MDIView class");
}
PyObject *MDIViewPy::extension_object_new(struct _typeobject * /*type*/, PyObject * /*args*/, PyObject * /*kwds*/)
{
return new MDIViewPy(nullptr);
}
Py::Object MDIViewPy::type()
{
return Py::Object( reinterpret_cast<PyObject *>( behaviors().type_object() ) );
}
Py::ExtensionObject<MDIViewPy> MDIViewPy::create(MDIView *mdi)
{
Py::Callable class_type(type());
Py::Tuple arg;
auto inst = Py::ExtensionObject<MDIViewPy>(class_type.apply(arg, Py::Dict()));
inst.extensionObject()->_view = mdi;
return inst;
}
MDIViewPy::MDIViewPy(MDIView *mdi)
@@ -198,3 +219,8 @@ Py::Object MDIViewPy::getActiveObject(const Py::Tuple& args)
Py::asObject(parent->getPyObject()),
Py::String(subname.c_str()));
}
Py::Object MDIViewPy::cast_to_base(const Py::Tuple&)
{
return Py::Object(this);
}

View File

@@ -35,7 +35,11 @@ class MDIView;
class GuiExport MDIViewPy : public Py::PythonExtension<MDIViewPy>
{
public:
static void init_type(void); // announce properties and methods
static void init_type(); // announce properties and methods
static PyObject *extension_object_new( PyTypeObject *subtype, PyObject * /*args*/, PyObject * /*kwds*/ );
static Py::Object type();
static Py::ExtensionObject<MDIViewPy> create(MDIView *mdi);
MDIViewPy(MDIView *mdi);
~MDIViewPy();
@@ -47,6 +51,7 @@ public:
Py::Object fitAll(const Py::Tuple&);
Py::Object setActiveObject(const Py::Tuple&);
Py::Object getActiveObject(const Py::Tuple&);
Py::Object cast_to_base(const Py::Tuple&);
MDIView* getMDIViewPtr() {return _view.data();}

View File

@@ -52,6 +52,7 @@
#include "View3DViewerPy.h"
#include "ActiveObjectList.h"
#include "PythonWrapper.h"
#include "MDIViewPy.h"
#include <Base/Console.h>
@@ -208,6 +209,7 @@ void View3DInventorPy::init_type()
"hasClippingPlane(): check whether this clipping plane is active");
add_varargs_method("graphicsView",&View3DInventorPy::graphicsView,
"graphicsView(): Access this view as QGraphicsView");
add_varargs_method("cast_to_base", &View3DInventorPy::cast_to_base, "cast_to_base() cast to MDIView class");
}
View3DInventorPy::View3DInventorPy(View3DInventor *vi)
@@ -2633,3 +2635,8 @@ Py::Object View3DInventorPy::graphicsView(const Py::Tuple& args)
wrap.loadWidgetsModule();
return wrap.fromQWidget(_view->getViewer(), "QGraphicsView");
}
Py::Object View3DInventorPy::cast_to_base(const Py::Tuple&)
{
return Gui::MDIViewPy::create(_view);
}

View File

@@ -135,6 +135,7 @@ public:
Py::Object toggleClippingPlane(const Py::Tuple& args, const Py::Dict &);
Py::Object hasClippingPlane(const Py::Tuple& args);
Py::Object graphicsView(const Py::Tuple& args);
Py::Object cast_to_base(const Py::Tuple&);
View3DInventor* getView3DIventorPtr() {return _view;}

View File

@@ -471,6 +471,7 @@ void SheetViewPy::init_type()
behaviors().supportSetattr();
add_varargs_method("getSheet", &SheetViewPy::getSheet, "getSheet()");
add_varargs_method("cast_to_base", &SheetViewPy::cast_to_base, "cast_to_base() cast to MDIView class");
behaviors().readyType();
}
@@ -531,4 +532,9 @@ Py::Object SheetViewPy::getSheet(const Py::Tuple& args)
return Py::asObject(new Spreadsheet::SheetPy(getSheetViewPtr()->getSheet()));
}
Py::Object SheetViewPy::cast_to_base(const Py::Tuple&)
{
return Gui::MDIViewPy::create(base.getMDIViewPtr());
}
#include "moc_SpreadsheetView.cpp"

View File

@@ -130,6 +130,7 @@ public:
Py::Object repr();
Py::Object getattr(const char *);
Py::Object getSheet(const Py::Tuple&);
Py::Object cast_to_base(const Py::Tuple&);
SheetView* getSheetViewPtr();