diff options
author | Renato Filho <renato.filho@openbossa.org> | 2010-02-01 20:34:18 -0300 |
---|---|---|
committer | Hugo Lima <hugo.lima@openbossa.org> | 2010-02-02 18:08:41 -0200 |
commit | 2cee6b6fca0c9b4188b7fb10643f77a719b792fc (patch) | |
tree | ed039eda9431930bbc7a1502bcd7bfb6fab31272 | |
parent | 70f80e8ae5bdfe5da2378398c88f1ae4efd2781e (diff) |
Ported boost::python inject code for QMenu and QShortcut.
Reviewed by Hugo Parente Lima <hugo.lima@openbossa.org>
-rw-r--r-- | PySide/QtGui/glue/qmenu_glue.h | 23 | ||||
-rw-r--r-- | PySide/QtGui/typesystem_gui_common.xml | 48 |
2 files changed, 60 insertions, 11 deletions
diff --git a/PySide/QtGui/glue/qmenu_glue.h b/PySide/QtGui/glue/qmenu_glue.h new file mode 100644 index 000000000..9d10d7add --- /dev/null +++ b/PySide/QtGui/glue/qmenu_glue.h @@ -0,0 +1,23 @@ + +inline PyObject* +addActionWithPyObject(QMenu *self, const QIcon& icon, const QString& text, PyObject *callback, const QKeySequence &shortcut) +{ + QAction *act = new QAction(text, self); + + if (!icon.isNull()) + act->setIcon(icon); + + if (!shortcut.isEmpty()) + act->setShortcut(shortcut); + + self->addAction(act); + + PyObject *pyAct = Shiboken::Converter<QAction*>::toPython(act); + PyObject* result = PyObject_CallMethod(pyAct, "connect", "OsO", pyAct, SIGNAL(triggered(bool)), callback); + if (result == 0) { + Py_DECREF(pyAct); + return 0; + } + + return pyAct; +} diff --git a/PySide/QtGui/typesystem_gui_common.xml b/PySide/QtGui/typesystem_gui_common.xml index b364e04ff..4308210d4 100644 --- a/PySide/QtGui/typesystem_gui_common.xml +++ b/PySide/QtGui/typesystem_gui_common.xml @@ -1382,6 +1382,10 @@ </modify-function> </object-type> <object-type name="QMenu"> + <extra-includes> + <include file-name="glue/qmenu_glue.h" location="local"/> + </extra-includes> + <modify-function signature="exec()" rename="exec_" allow-thread="yes" /> <modify-function signature="exec(const QPoint&, QAction*)" rename="exec_" allow-thread="yes" /> <modify-function signature="exec(QList<QAction*>, const QPoint&, QAction*)" rename="exec_" allow-thread="yes" /> @@ -1428,9 +1432,27 @@ </modify-argument> </modify-function> <modify-function signature="setNoReplayFor(QWidget*)" remove="all" /> - <modify-function signature="addAction(QString,const QObject*,const char*,QKeySequence)" remove="all" /> - <modify-function signature="addAction(QIcon,QString,const QObject*,const char*,QKeySequence)" remove="all" /> + + <add-function signature="addAction(const QString&, PyObject*, const QKeySequence&)"> + <modify-argument index="3"> + <replace-default-expression with="0" /> + </modify-argument> + <inject-code class="target" position="beginning"> + %PYARG_0 = addActionWithPyObject(%CPPSELF, QIcon(), %1, %2, %3); + </inject-code> + </add-function> + + <add-function signature="addAction(const QIcon&, const QString&, PyObject*, const QKeySequence&)"> + <modify-argument index="4"> + <replace-default-expression with="0" /> + </modify-argument> + <inject-code class="target" position="beginning"> + %PYARG_0 = addActionWithPyObject(%CPPSELF, %1, %2, %3, %4); + </inject-code> + </add-function> + </object-type> + <object-type name="QMenuBar"> <modify-function signature="addAction(const QString&)"> <modify-argument index="return"> @@ -1513,16 +1535,20 @@ </object-type> <object-type name="QShortcut"> - <modify-function signature="QShortcut(QKeySequence,QWidget*,const char*,const char*,Qt::ShortcutContext)" remove="all"> -<!-- <modify-argument index="3"> - <remove-default-expression/> - <replace-type modified-type="const pyqt_slot&"/> - </modify-argument> + <add-function signature="QShortcut(const QKeySequence&, QWidget*, PyObject*, Qt::ShortcutContext)"> <modify-argument index="4"> - <remove-default-expression/> - <replace-type modified-type="const pyqt_slot&"/> - </modify-argument>--> - </modify-function> + <replace-default-expression with="Qt::WindowShortcut"/> + </modify-argument> + <inject-code class="target" position="beginning"> + cptr = new QShortcutWrapper(%1, %2); + PyObject* result = PyObject_CallMethod(%PYSELF, "connect", "OsO", %PYSELF, SIGNAL(activated()), %PYARG_3); + if (result == 0) { + delete cptr; + return 0; + } + Shiboken::setParent(%PYARG_2, %PYSELF); + </inject-code> + </add-function> </object-type> <object-type name="QSizeGrip"/> <object-type name="QSound"/> |