aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRenato Filho <renato.filho@openbossa.org>2010-02-01 20:34:18 -0300
committerHugo Lima <hugo.lima@openbossa.org>2010-02-02 18:08:41 -0200
commit2cee6b6fca0c9b4188b7fb10643f77a719b792fc (patch)
treeed039eda9431930bbc7a1502bcd7bfb6fab31272
parent70f80e8ae5bdfe5da2378398c88f1ae4efd2781e (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.h23
-rw-r--r--PySide/QtGui/typesystem_gui_common.xml48
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&amp;, QAction*)" rename="exec_" allow-thread="yes" />
<modify-function signature="exec(QList&lt;QAction*>, const QPoint&amp;, 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&amp;, PyObject*, const QKeySequence&amp;)">
+ <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&amp;, const QString&amp;, PyObject*, const QKeySequence&amp;)">
+ <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&amp;)">
<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&amp;"/>
- </modify-argument>
+ <add-function signature="QShortcut(const QKeySequence&amp;, QWidget*, PyObject*, Qt::ShortcutContext)">
<modify-argument index="4">
- <remove-default-expression/>
- <replace-type modified-type="const pyqt_slot&amp;"/>
- </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"/>