From 4cf705b9d8e5244a9b9e0bd694bf94ff43d9ba10 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 8 Mar 2023 14:17:05 +0100 Subject: [PATCH] Gui: check for more ExpressionBinding types --- src/Gui/ExpressionBindingPy.cpp | 45 ++++++++++++++++++++++++++------- src/Gui/ExpressionBindingPy.h | 2 ++ 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/Gui/ExpressionBindingPy.cpp b/src/Gui/ExpressionBindingPy.cpp index 5c98dc9ab2..653d7bc75c 100644 --- a/src/Gui/ExpressionBindingPy.cpp +++ b/src/Gui/ExpressionBindingPy.cpp @@ -51,17 +51,9 @@ void ExpressionBindingPy::init_type() add_varargs_method("setAutoApply", &ExpressionBindingPy::setAutoApply, "setAutoApply"); } -PyObject *ExpressionBindingPy::PyMake(struct _typeobject *, PyObject * args, PyObject *) +ExpressionBinding* ExpressionBindingPy::asBinding(QWidget* obj) { - PyObject* pyObj; - if (!PyArg_ParseTuple(args, "O", &pyObj)) - return nullptr; - ExpressionBinding* expr = nullptr; - PythonWrapper wrap; - wrap.loadWidgetsModule(); - - QWidget* obj = dynamic_cast(wrap.toQObject(Py::Object(pyObj))); if (obj) { do { auto qsb = qobject_cast(obj); @@ -69,6 +61,26 @@ PyObject *ExpressionBindingPy::PyMake(struct _typeobject *, PyObject * args, PyO expr = qsb; break; } + auto usp = qobject_cast(obj); + if (usp) { + expr = usp; + break; + } + auto isp = qobject_cast(obj); + if (isp) { + expr = isp; + break; + } + auto dsp = qobject_cast(obj); + if (dsp) { + expr = dsp; + break; + } + auto exp = qobject_cast(obj); + if (exp) { + expr = exp; + break; + } auto inp = qobject_cast(obj); if (inp) { expr = inp; @@ -78,6 +90,21 @@ PyObject *ExpressionBindingPy::PyMake(struct _typeobject *, PyObject * args, PyO while (false); } + return expr; +} + +PyObject *ExpressionBindingPy::PyMake(struct _typeobject *, PyObject * args, PyObject *) +{ + PyObject* pyObj; + if (!PyArg_ParseTuple(args, "O", &pyObj)) + return nullptr; + + PythonWrapper wrap; + wrap.loadWidgetsModule(); + + QWidget* obj = dynamic_cast(wrap.toQObject(Py::Object(pyObj))); + ExpressionBinding* expr = asBinding(obj); + if (!expr) { PyErr_SetString(PyExc_TypeError, "Wrong type"); return nullptr; diff --git a/src/Gui/ExpressionBindingPy.h b/src/Gui/ExpressionBindingPy.h index c68345a72b..e25d4e4196 100644 --- a/src/Gui/ExpressionBindingPy.h +++ b/src/Gui/ExpressionBindingPy.h @@ -25,6 +25,7 @@ #include +class QWidget; namespace Gui { class ExpressionBinding; @@ -47,6 +48,7 @@ public: private: static PyObject *PyMake(struct _typeobject *, PyObject *, PyObject *); + static ExpressionBinding* asBinding(QWidget*); private: ExpressionBinding* expr;