Compare commits

...

298 commits

Author SHA1 Message Date
Juhapekka Piiroinen
f011ce2cb9 Bug fix for PYSIDE-7
This should resolve the issue in PYSIDE-7 "QDateTime does not support the 6-argument format".
Added function signature for 6-argument version and a testcase.

Change-Id: I617eefab6a41939c37e2f1bf800857bc2d74b6ee
Reviewed-by: Hugo Parente Lima <hugo.lima@openbossa.org>
2012-03-13 18:43:04 +01:00
Juhapekka Piiroinen
fe8dc36f90 Fix bug PYSIDE-6
This should resolve the issue in PYSIDE-6 "Fix phonon VideoCaptureDevice detection to properly use phonon_ namespace".
Changed if check in PySideModules.cmake.

Change-Id: Ie30d6858a0fc6073560ec4cd09508504cbeb667d
Reviewed-by: Hugo Parente Lima <hugo.lima@openbossa.org>
2012-03-13 18:41:53 +01:00
Hugo Parente Lima
db6f1e3306 Fix PySide compilation.
Change-Id: Ie7a30961232526af59cbc21dbf1b58ab9a4e3e7b
Reviewed-by: Hugo Parente Lima <hugo.lima@openbossa.org>
2012-03-13 18:29:52 +01:00
Marcelo Lira
d30a8672c3 Version bump to 1.1.1. 2012-03-08 16:56:23 -03:00
Marcelo Lira
afc9a7e10b Version bump to 1.1.0. 2012-03-08 16:56:23 -03:00
Marcelo Lira
a8a07b77f8 Declares Python types using the new "<custom-type>" tag.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Paulo Alcantara <pcacjr@gmail.com>
2012-03-08 16:56:23 -03:00
Paulo Alcantara
98be0df6a5 Fix BUG #1060 - "Subclassing of QUiLoader leads to "Internal C++ object
already deleted" exception"

See http://bugs.pyside.org/show_bug.cgi?id=1060.

Signed-off-by: Paulo Alcantara <pcacjr@gmail.com>
Reviewed-by: Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:56:23 -03:00
Paulo Alcantara
b2b14fe9b7 Fix BUG #1091 - "PixmapFragment and drawPixmapFragments are not bound"
See http://bugs.pyside.org/show_bug.cgi?id=1091.

Also minor coding style fixes in QtGui's typesystem.

Signed-off-by: Paulo Alcantara <pcacjr@gmail.com>
Reviewed-by: Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:56:23 -03:00
Paulo Alcantara
481ba5aa3e Fix BUG #1084 - "Crash (segfault) when writing unicode string on socket"
See http://bugs.pyside.org/show_bug.cgi?id=1084.

Signed-off-by: Paulo Alcantara <pcacjr@gmail.com>
Reviewed-by: Trust me
2012-03-08 16:56:23 -03:00
Marcelo Lira
8ddbd3167b The temporary file used in the test for bug #829 must not be deleted by the test.
This fixes the test in win32 platforms.
2012-03-08 16:56:23 -03:00
Marcelo Lira
65d8f9fcef Fixes the QSettings related QVariant's save/load bug. 2012-03-08 16:56:23 -03:00
Hugo Parente Lima
7b8d2925dd Small code style changes. 2012-03-08 16:56:22 -03:00
Hugo Parente Lima
c78b4686a1 Add GC support to PySide Property type.
This fixes GC errors when running PySide on a Python debug env.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:56:22 -03:00
Marcelo Lira
e76b2b76f5 Added type system entries to the primitive types used by QtOpenGL. 2012-03-08 16:56:22 -03:00
Marcelo Lira
2a634aea05 Updated the custom widget plugin to use the new converters. 2012-03-08 16:56:21 -03:00
Marcelo Lira
7bfbbf3cb7 No more training wheels. The last occurrences of the old template Converter where removed.
Also related fixes here and there.
2012-03-08 16:56:21 -03:00
Marcelo Lira
aec20b21a5 Added a type system file for Maemo's QtCore. 2012-03-08 16:56:21 -03:00
Marcelo Lira
ebeae9d084 Fixes custom code for QtCore's HWND on win32. 2012-03-08 16:56:21 -03:00
Marcelo Lira
31804c2adc Qt::HANDLE is declared only in QtCore, and its specifics depend on the architecture. 2012-03-08 16:56:21 -03:00
Marcelo Lira
c31c14cdfb Fixed QtCore's HWND converter for win32. 2012-03-08 16:56:21 -03:00
Marcelo Lira
879e4bb14d Removed the QAbstractVideoBuffer::map method. 2012-03-08 16:56:21 -03:00
Marcelo Lira
6575ac8d39 Fixed converter for win32's WId type. 2012-03-08 16:56:20 -03:00
Hugo Parente Lima
1af53541bf Fix compilation of conversion branch against Python3k.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:56:20 -03:00
Marcelo Lira
2a87b74bfe Replaced TypeResolver by SbkConverter and SpecificConverter.
Also updated QtGui's WId conversion to Python 3.
2012-03-08 16:56:20 -03:00
Marcelo Lira
792504f978 Removed the remaining occurrences of Shiboken::makeTuple. 2012-03-08 16:56:20 -03:00
Marcelo Lira
7b04273736 Fixed code for QUdpSocket.readDatagram method to remove usage of Shiboken::makeTuple. 2012-03-08 16:56:20 -03:00
Marcelo Lira
30118e265d Fixed code for setting QtCore.__version_info__ to not use Shiboken::makeTuple. 2012-03-08 16:56:20 -03:00
Marcelo Lira
770c8bda73 Fixed custom code for QScriptValueIterator.__next__ function.
It must not use the convenience method Shiboken::makeTuple, for it makes
use of the old template based converters.
2012-03-08 16:56:20 -03:00
Marcelo Lira
16f4378fed Fixes type converter for Win32's HWND. 2012-03-08 16:56:20 -03:00
Marcelo Lira
80c02f16e5 Fixes the test for a QFlag value returned in a QVariant. 2012-03-08 16:56:20 -03:00
Marcelo Lira
b643a3f8ab Modified PySideQFlags based on Hugo's design. 2012-03-08 16:56:19 -03:00
Marcelo Lira
8145f2a7e2 Added converter for primitive type QModelIndexList. 2012-03-08 16:56:19 -03:00
Marcelo Lira
25638d3f80 Fixes conversion rule for QGraphicsView::drawItems array argument. 2012-03-08 16:56:19 -03:00
Marcelo Lira
3318a40ab1 Some method signatures were removed.
They were removed because used pointers to primitive types without
proper user defined handling. Future assessment must be done to tell if
removal is enough, or other changes are needed.
2012-03-08 16:56:19 -03:00
Marcelo Lira
ba062e1b89 Updated various function removals and modifications. 2012-03-08 16:56:19 -03:00
Marcelo Lira
3ee5bec244 New containers for container types. 2012-03-08 16:56:19 -03:00
Marcelo Lira
ae0f62ed80 New converters for primitive types. 2012-03-08 16:56:19 -03:00
Marcelo Lira
64bec138e1 Added new style conversions for QDate, QTime and QDateTime objects. 2012-03-08 16:56:19 -03:00
Marcelo Lira
1105a5be3a Added default constructor to QTextStreamManipulator. 2012-03-08 16:56:18 -03:00
Marcelo Lira
815fae961f Turned QStyleOptionViewItem into value type, for it has a public copy constructor.
It is passed around by value in many places, like the return value of
QAbstractItemView::viewOptions(). I did the same to the variations:
QStyleOptionViewItemV2, QStyleOptionViewItemV3, etc.
2012-03-08 16:56:18 -03:00
Marcelo Lira
8c1fbc3751 Signature of various added and modified functions modified to use non-const references.
The API Extractor signature normalizer removes const& from argument
types, but it leaves non-const references unchanged.
2012-03-08 16:56:18 -03:00
Paulo Alcantara
ad8992e9e0 pysidesignal: more trivial fixes
Fix typos and coding style.

Signed-off-by: Paulo Alcantara <pcacjr@gmail.com>
Reviewed-by: Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:56:18 -03:00
Marcelo Lira
41f1c30372 Makes test for QtCore's bug #1063 compliant with Python 3. 2012-03-08 16:56:18 -03:00
Hugo Parente Lima
720a6f4cad Don't double decref variable causing an assertion error on debug builds.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:56:18 -03:00
Paulo Alcantara
48669462d0 pysidesignal: don't use C's cast
Signed-off-by: Paulo Alcantara <pcacjr@gmail.com>
Reviewed-by: Luciano Wolf <luciano.wolf@openbossa.org>
Reviewed-by: Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:56:18 -03:00
Paulo Alcantara
66f4ccbe5d pysidesignal: trivial fixes
Fix typos and coding style

Signed-off-by: Paulo Alcantara <pcacjr@gmail.com>
Reviewed-by: Luciano Wolf <luciano.wolf@openbossa.org>
Reviewed-by: Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:56:18 -03:00
Paulo Alcantara
508e59c091 Fix BUG #1063
Signed-off-by: Paulo Alcantara <pcacjr@gmail.com>
Reviewed-by: Willer Moreira <willer.moreira@openbossa.org>
Reviewed-by: Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:56:18 -03:00
Hugo Parente Lima
93bb5d777e Fix bug 1083 - "winId returns a PyCObject making it impossible to compare two winIds" 2012-03-08 16:56:17 -03:00
Hugo Parente Lima
e3814f27dd Replace private.py file by an inject code. 2012-03-08 16:56:17 -03:00
Paulo Alcantara
2f70b10471 Fix BUG #1077 - "Application exit crash when call QSyntaxHighlighter.document()"
Signed-off-by: Paulo Alcantara <pcacjr@gmail.com>
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:56:17 -03:00
Paulo Alcantara
e2524f6abb Fix BUG #1034 - "Error compiling PySide with Python 3.2.2 32bit on Windows"
Signed-off-by: Paulo Alcantara <pcacjr@gmail.com>
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:56:17 -03:00
Paulo Alcantara
4985f114a3 Fix BUG #1069 - "QtCore.QDataStream silently fails on writing Python string"
Signed-off-by: Paulo Alcantara <pcacjr@gmail.com>
Reviewer: Willer Moreira <willer.moreira@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:56:17 -03:00
Luciano Wolf
791f70629c Bumping to revision 1.0.9 2012-03-08 16:56:17 -03:00
Paulo Alcantara
8160e529e2 Fix BUG #1048
Signed-off-by: Paulo Alcantara <pcacjr@gmail.com>
Reviewer: Willer Moreira <willer.moreira@openbossa.org>
          Hugo Parente Lima <hugo.lima@openbossa.org>
2012-03-08 16:56:17 -03:00
Paulo Alcantara
45ad11e5be Fix BUG #1058 - "Strange code in PySide/QtUiTools/glue/plugins.h"
Signed-off-by: Paulo Alcantara <pcacjr@gmail.com>
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Bruno Araújo <bruno.araujo@openbossa.org>
2012-03-08 16:56:17 -03:00
Paulo Alcantara
e031567fac Fix BUG #1052
Signed-off-by: Paulo Alcantara <pcacjr@gmail.com>
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2012-03-08 16:56:17 -03:00
Lauro Neto
e29d2e460b Fix PYSIDE_LIBRARY in CMake export.
Was hardcoded with Cygwin library name format.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:56:16 -03:00
Hugo Parente Lima
fbf3a8b07a Remove unused code in bug 844 unit test.
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:56:16 -03:00
Hugo Parente Lima
dde75099f2 Fix bug 1029 - "qmlRegisterType Fails to Increase the Ref Count" 2012-03-08 16:56:16 -03:00
Paulo Alcantara
64ffc4f61b Fix BUG #1031
Signed-off-by: Paulo Alcantara <paulo.alcantara@openbossa.org>
Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:56:16 -03:00
Jerzy Kozera
50bf9a570b Fixed compilation error for gcc versions < 4
Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:56:16 -03:00
Hugo Parente Lima
b30e998e65 Fix phonon unit test when there are device aliases reported by phonon. 2012-03-08 16:56:16 -03:00
Hugo Parente Lima
c230fad427 Strip the text received from message handler.
This was needed because now qWarning, etc, are using stream operators
for security reasons, and those operators add spaces at end.
2012-03-08 16:56:15 -03:00
Hugo Parente Lima
6fe19dbb88 Fix bug 1012 - "FTBFS with hardening flags enabled"
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:56:15 -03:00
Hugo Parente Lima
8060e3ee87 Fix bug 1036 - "Qt.KeyboardModifiers always evaluates to zero"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:56:15 -03:00
Hugo Parente Lima
b50186e9f3 Creates QFlags types at runtime. 2012-03-08 16:56:15 -03:00
Hugo Parente Lima
4ba7cd90d6 Fix bug 1013 - "connect to QSqlTableModel.primeInsert() causes crash" 2012-03-08 16:56:15 -03:00
Hugo Parente Lima
f57d4d4dbc Fix bug 1011 - "PySide cygwin patch"
Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:56:15 -03:00
Hugo Parente Lima
5c076e1c53 Reduce the memory used by PySideMetaFunction instances. 2012-03-08 16:56:15 -03:00
Hugo Parente Lima
67d6455fa5 Unify the code used to do QObject meta calls. 2012-03-08 16:56:15 -03:00
Hugo Parente Lima
15ceed791f Fix bug 1016 - "Calling of Q_INVOKABLE method returning not QVariant is impossible..." 2012-03-08 16:56:15 -03:00
Hugo Parente Lima
f55d088d44 Optimize PySide::getMetaDataFromQObject function avoiding some str copies. 2012-03-08 16:56:14 -03:00
Hugo Parente Lima
07d0879700 Fix code style and add license headers. 2012-03-08 16:56:14 -03:00
Hugo Parente Lima
2e1ff21938 Fix unit test of bug 829. 2012-03-08 16:56:14 -03:00
Hugo Parente Lima
0971ac7c4f Version bump to 1.0.8. 2012-03-08 16:56:14 -03:00
Hugo Parente Lima
0e8b50c9b0 Fix bug 1019 - "Overriding QWidget.show or QWidget.hide do not work"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:56:14 -03:00
Paulo Alcantara
b7f593d99e Fix bug 1022 - "RuntimeError: maximum recursion depth exceeded while getting the str of an object"
Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>

Signed-off-by: Paulo Alcantara <paulo.alcantara@openbossa.org>
2012-03-08 16:56:14 -03:00
Hugo Parente Lima
6acb5f9bc7 Only removes actions bounded to PyObjects on QMenu::clear.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:56:14 -03:00
Renato Filho
9f05c7dad5 Initial update typesystem for support Qt 4.8 (beta).
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:56:14 -03:00
Lauro Neto
6c47624e92 Fix getTypeName check order.
Was segfaulting for signals with None as an explicit
argument (returning NULL to a strdup).

Reviewer: Hugo Lima <hugo.lima@openbossa.org>
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:56:14 -03:00
Marcelo Lira
2683577b7a Fixes win32's HWND converter.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:56:13 -03:00
Hugo Parente Lima
ed94eda798 Use sbkpython.h instead of Python.h to avoid problems with Python2.5.
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:56:13 -03:00
Hugo Parente Lima
620b46650a Avoid using uninitialized variable. 2012-03-08 16:56:13 -03:00
Hugo Parente Lima
7202e2b8df Fix qglbuffer test on Python3. 2012-03-08 16:56:13 -03:00
Renato Filho
1cefc09118 Fixed unittest to work with python3. 2012-03-08 16:56:13 -03:00
Hugo Parente Lima
b841afdb5c Change String::convertible to String::isConvertible. 2012-03-08 16:56:13 -03:00
Renato Filho
401651e26c Fixed unittest to work with python3. 2012-03-08 16:56:13 -03:00
Renato Filho
66d96ef4b6 Updated Cmake files. 2012-03-08 16:56:13 -03:00
Renato Filho
c33a78cdd4 Slplited python compat file for python 2.x and 3.x 2012-03-08 16:56:12 -03:00
Renato Filho
18383549d6 Updated __init__.py file to works with python 2.x and 3.x 2012-03-08 16:56:12 -03:00
Renato Filho
6869a49bc3 Updated pyside and signals tests to works with python 2.x and 3.x 2012-03-08 16:56:12 -03:00
Renato Filho
1874425448 Updated phonon modue to works with python 2.x and 3.x 2012-03-08 16:56:11 -03:00
Renato Filho
de291d1d0f Updated QtWebKit modue to works with python 2.x and 3.x 2012-03-08 16:56:11 -03:00
Renato Filho
e90255bf7e Updated QtUiTools modue to works with python 2.x and 3.x 2012-03-08 16:56:11 -03:00
Renato Filho
676b2b579d Updated QtSql modue to works with python 2.x and 3.x 2012-03-08 16:56:11 -03:00
Renato Filho
f6c818b21d Updated QtOpenGL modue to works with python 2.x and 3.x 2012-03-08 16:56:11 -03:00
Renato Filho
66a0bbf578 Updated QtNetwork modue to works with python 2.x and 3.x 2012-03-08 16:56:11 -03:00
Renato Filho
1f1fbfbfa8 Updated QtScript modue to works with python 2.x and 3.x 2012-03-08 16:56:11 -03:00
Renato Filho
d9dd319232 Updated QtGui modue to works with python 2.x and 3.x 2012-03-08 16:56:11 -03:00
Renato Filho
edaefbce48 Updated QtCore modue to works with python 2.x and 3.x 2012-03-08 16:56:11 -03:00
Renato Filho
75843bf45a Updated QtDeclarative modue to works with python 2.x and 3.x 2012-03-08 16:56:10 -03:00
Renato Filho
1e29ab6592 Initia QtCore port to python3. 2012-03-08 16:56:08 -03:00
Renato Filho
a2cb6fe025 Created pyside QFlags compat class. 2012-03-08 16:54:53 -03:00
Renato Filho
2e69baa4f5 Fixed compilation with python3. 2012-03-08 16:54:53 -03:00
Marcelo Lira
009aef9f1b Fixes argument and return type of a couple of QtDeclarative methods.
The methods are:

* QDeclarativeEngine::importPlugin(QString,QString,QString*)
* QDeclarativeExpression::evaluate(bool*)

Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:52 -03:00
Marcelo Lira
9e8916e111 Fixes argument and return type for method "QScriptString::toArrayIndex(bool*)const". 2012-03-08 16:54:52 -03:00
Marcelo Lira
b94ad1e4de QHostAddress::setAddress(quint8*) signature was removed. 2012-03-08 16:54:52 -03:00
Renato Filho
2cec2a1186 Version bumped. 2012-03-08 16:54:52 -03:00
Renato Filho
6f777cd227 Created unit test for layout policy.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:54:52 -03:00
Renato Filho
2db3d80e6c Fixed layout policy.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:54:51 -03:00
Renato Filho
f367f0ada3 Created unit test for bug #1006.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:54:51 -03:00
Renato Filho
3a0b98ef4b Fix QLayout.itemAt and QGridLayout.itemAtPosition return policy.
Fixes bug #1006.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:54:51 -03:00
Hugo Parente Lima
d86765e535 Unit test for bug 995 - "QDeclarativeView.itemAt returns faulty reference. (leading to SEGFAULT)" 2012-03-08 16:54:51 -03:00
Renato Filho
846759b324 Created unit test for bug #1002.
Reviewer: Hugo Parente <hugo.lima@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:51 -03:00
Renato Filho
e92b601620 Fixed QWidget.window() return policy.
Fixes bug #1002

Reviewer: Hugo Parente <hugo.lima@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:51 -03:00
Renato Filho
cf61c80588 Created unit test for bug #997.
Reviewer: Hugo Parente <hugo.lima@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:51 -03:00
Renato Filho
a92a006fd9 Avoid register property twice during the object instaciation.
Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:51 -03:00
Renato Filho
f16a241b13 Fixed segfault during the connection fail.
Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:51 -03:00
Renato Filho
f7b0dca2cb Create unit test for bug #998.
Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:50 -03:00
Renato Filho
bfcc30ab86 Fixed problems in function that return None, and was not verified.
Some functions with inject code didnot verify the result value before
convert to Shiboken types.

Fixes bug #998.

Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:50 -03:00
Marcelo Lira
d29d9ad5ac Changed QStringList from container to primitive type.
QStringList inherits from QList<QString>, and it isn't a reusable
container itself, such as QList.

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:50 -03:00
Hugo Parente Lima
b55ea7fd5e Fix bug 981 - "QSettings docs should empathize the behavior changes of value() on different platforms"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:50 -03:00
Hugo Parente Lima
e9de49255b Fix QAbstractFileEngine read and readLine methods to accept data with null bytes.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:50 -03:00
Hugo Parente Lima
8e43e10f4e Fix other QIODevice read functions stopping at null bytes. 2012-03-08 16:54:50 -03:00
Lauro Neto
7ee30db078 Add extra test on QByteArray explicit conversion
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:54:50 -03:00
Hugo Parente Lima
9afe76796d Fix bug 944 - "QIODevice.readData must use qmemcpy instead of qstrncpy"
Reviewer:  Luciano Wolf <luciano.wolf@openbossa.org>
           Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:54:50 -03:00
Hugo Parente Lima
08d202e824 Fix bug 966 - "QX11Info.display() missing" 2012-03-08 16:54:49 -03:00
Renato Filho
700a4cf95c Created unit test for QColor reduce function.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:54:49 -03:00
Renato Filho
2487a08062 Fixed QColor reduce function.
Fixes bug #989.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:54:49 -03:00
Hugo Parente Lima
57b291fe66 Unit test for bug 967, a side effect of bug 988.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:49 -03:00
Renato Filho
6e6e7f528d Created test for bug #979. 2012-03-08 16:54:49 -03:00
Hugo Parente Lima
a7e4ddb8ca Fix bug 988 - "The type supplied with currentChanged signal in QTabWidget has changed in 1.0.6"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:54:49 -03:00
Hugo Parente Lima
f5f9c23c5f Optimize my dumb code that do stuff with a QByteArray without knowing if will use it. 2012-03-08 16:54:49 -03:00
Renato Filho
49ad2f9c1d Created unit test for repr function.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:49 -03:00
Renato Filho
1c4ebcbe8a Fixed gcc warning during QDate conversion compilation. 2012-03-08 16:54:48 -03:00
Renato Filho
24838672f0 Created unit test for bug #987.
Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:48 -03:00
Renato Filho
d0decf40df Fail during the signal connection or disconnection raises exception.
Fixes bug #987.

Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:48 -03:00
Renato Filho
b6068afc3e Fixed SignalManager bug during anonymous signal connection.
Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:48 -03:00
Hugo Parente Lima
e59a9f833f Added missing primitive types on QtCore type system.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:48 -03:00
Hugo Parente Lima
5eda2f1365 Fix white space. 2012-03-08 16:54:48 -03:00
Renato Filho
01bd258e10 Created unit test for bug #973.
Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:48 -03:00
Renato Filho
b3e839c1f8 Removed debug messages from the test.
Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:48 -03:00
Renato Filho
e9b959ed8e Implemented inject code for function QWebPage.qt_metacall.
This inject code is necessary due a workaround on C++ class QWebPage.
Check de C++ doc for more information:

http://doc.qt.nokia.com/4.7-snapshot/qwebpage.html#shouldInterruptJavaScript

Fixes bug #973.

Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:48 -03:00
Renato Filho
d5b645d3ab Created utility function to call a python method usign args received in
qt_metacall.

Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:47 -03:00
Renato Filho
65d4cf2be4 Fix complation warning relative to PyDateTime_IMPORT. 2012-03-08 16:54:47 -03:00
Renato Filho
6e9b7ffd59 Created unit test for QMenu, QMenuBar, QToolBar clear function.
Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:47 -03:00
Renato Filho
138d8c4268 Fixed QMenu, QMenuBar, QToolBar clear function.
During the clear function all QActions need be destroyed.

Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:47 -03:00
Renato Filho
f5a1baac2f Fixex return policy on QNetworkAccessManager.createRequest.
Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:47 -03:00
Renato Filho
34d424f89d Register QVariantMap on TypeManager.
fixes bug #959.

Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:47 -03:00
Renato Filho
544414cc03 Created unit test for bug #959.
Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:47 -03:00
Renato Filho
c31c7c60da Implement support to pyside debug mode on documentation generator.
Reviewed by: Hugo Parente <hugo.lima@openbossa.org>
             Lauro Moura <lauro.neto@openbossa.org>
2012-03-08 16:54:47 -03:00
Renato Filho
8492b69d33 Fixed build for Qt 4.6. 2012-03-08 16:54:47 -03:00
Renato Filho
84b0364b5d Dependency version update. 2012-03-08 16:54:46 -03:00
Renato Filho
3da60153c0 Created unit test for __reduce__ of empty QColor.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:46 -03:00
Renato Filho
4fdc15ef7f Fix QColor __reduce__ function.
Fixes bug #983.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:46 -03:00
Renato Filho
74e10eef63 Created unitest for bug #972.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:46 -03:00
Renato Filho
88acbd47db Fix QGraphicsProxyWidget.setWidget return policy.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:46 -03:00
Hugo Parente Lima
14c00d3325 Fix QSettings code snippet. 2012-03-08 16:54:46 -03:00
Renato Filho
7b2c4242ad Implemented GlobalReceiverV2.
A new implementation of GlobalRecever that optmize the signal
connection.

Fixes bug #928.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:46 -03:00
Marcelo Lira
d00af325c6 Do not generate QTest::qt_snprintf function.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Lauro Moura <lauro.neto@openbossa.org>
2012-03-08 16:54:46 -03:00
Marcelo Lira
bb68848f4a Fixed conversion rules for QWebPage.javaScriptPrompt method. 2012-03-08 16:54:45 -03:00
Marcelo Lira
69d0627af3 Updated QtNetwork's type system. 2012-03-08 16:54:45 -03:00
Marcelo Lira
8dd72c2630 Updated QtDeclarative's type system. 2012-03-08 16:54:45 -03:00
Marcelo Lira
2a26f35607 Updated QtWebKit's type system.
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:45 -03:00
Marcelo Lira
d2e1893762 Updated QtXmlPattern's type system. 2012-03-08 16:54:45 -03:00
Marcelo Lira
00f51edd5b Updated QtGui's type system. 2012-03-08 16:54:45 -03:00
Marcelo Lira
9f00c67682 Updated QtCore's type system. 2012-03-08 16:54:45 -03:00
Hugo Parente Lima
f0ea617acb Fix bug 964 - "QAbstractItemView.moveCursor() method is missing"
Reviewer: Marcelo Lira <marcelol.lira@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:44 -03:00
Hugo Parente Lima
48015c2bdc Fix bug 950 - "implement Q_INVOKABLE"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:44 -03:00
Renato Filho
3c7e551a99 Fixed QColor.__reduce__ function.
Fixes bug #960.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:44 -03:00
Renato Filho
8e1c2702f6 Created unit test for QColor.__repr__ and QColor.__str__ functions.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:44 -03:00
Renato Filho
a17bf41305 Implemented QColor.__repr__ and QColor.__str__ functions.
Fixes bug #961.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:44 -03:00
Renato Filho
e3502d00fc Created unit test for bug #958.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:44 -03:00
Renato Filho
00bd60cfda Remove obscure code from QUiLoader inject code.
Fixes bug #958.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:44 -03:00
Renato Filho
247116d320 Removed return policy from QUiLoader.load return object.
This policy have already applied on glue code.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:43 -03:00
Renato Filho
44c67274f0 Created unit test for bug #965.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:43 -03:00
Hugo Parente Lima
bbf66078ea Fix bug 953 - "Segfault when QObject is garbage collected after QTimer.singeShot"
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:43 -03:00
Hugo Parente Lima
b633bd4c2e Deprecated functions marked as deprecated.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:54:43 -03:00
Renato Filho
a87d114210 Created unit test for bug #951.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:43 -03:00
Renato Filho
7942a9053d Updated qmlRegisterType to register.
qmlRegisterType uses QDeclarativeItem in template args, when the class is derived from QDeclarativeItem, otherwise uses QObject.

Fixes bug #951.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:43 -03:00
Hugo Parente Lima
d44123b26e Fix links on rel bar. 2012-03-08 16:54:43 -03:00
Hugo Parente Lima
8270b38ecf Bump version to 1.0.6. 2012-03-08 16:54:43 -03:00
Didier Raboud
b6a0810e70 Update pysidedocs theme to rely more on sphinx's base theme:
- Drop files that are redundant with sphinx.
- Add _templates/layout.html to add the needed customisation.
- Update theme.conf to ensure theme inheritance.
- Update pysidedocs.css to fit the theme with sphinx's basic theme.

Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:43 -03:00
Lauro Neto
5e08e864e7 Added test for signal with typedef
Reviewer: Renato Filho <renato.filho@openbossa.org>
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:54:42 -03:00
Lauro Neto
44e1d257ec Removing uneeded file 2012-03-08 16:54:42 -03:00
Lauro Neto
57894b73b7 Fix plugin test
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
Reviewer: Hugo Lima <hugo.lima@openbossa.org>
2012-03-08 16:54:42 -03:00
Lauro Neto
a8e05ed6fe Add test for qml plugin.
Simple test. No asserts. If broken should segfault
2012-03-08 16:54:42 -03:00
Lauro Neto
9a78c19fb8 Fixes in QtWebkit
Needed to make example from [1] work. Example will be added
to pyside-examples.

[1] http://blog.qtlabs.org.br/2011/05/30/transformando-o-qml-no-proximo-flash/
2012-03-08 16:54:42 -03:00
Marcelo Lira
40938ef366 Fixes Bug #944: Segfault on QIcon(None).pixmap()
http://bugs.pyside.org/show_bug.cgi?id=944

Reviewed by Lauro Moura <lauro.neto@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:42 -03:00
Renato Filho
a713e377bb DynamicMetaObject optimizations.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:42 -03:00
Marcelo Lira
fae2dfd9b1 Moved AutoArrayPointer from libpyside to libshiboken.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:42 -03:00
Hugo Parente Lima
d129ca02f6 Don't color links black.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:42 -03:00
Hugo Parente Lima
8a81e8da21 Better looking module listing page. 2012-03-08 16:54:42 -03:00
Hugo Parente Lima
6c8ad3b83f Translate QHistoryState code snippet to Python. 2012-03-08 16:54:41 -03:00
Hugo Parente Lima
d771081005 Cosmetic changes on docs. 2012-03-08 16:54:41 -03:00
Marcelo Lira
609f6bc889 Created template code for added QObject's trUtf8 methods.
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:41 -03:00
Marcelo Lira
151111bde2 Replaced hard coded variables by type system variables in QtCore and QtGui. 2012-03-08 16:54:41 -03:00
Hugo Parente Lima
8d8c4cf308 Fix bug 923 - "Make QScriptValue (or QScriptValueIterator) implement the Python iterator protocol"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:41 -03:00
Hugo Parente Lima
d912655b5a New CSS style for PySide docs. 2012-03-08 16:54:41 -03:00
Marcelo Lira
c4994bc1ab Removed the "default-constructor" from some QtCore type entries.
The generator was improved to do a better job figuring out a default
constructor for types.

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:41 -03:00
Marcelo Lira
09ef995719 Removed the remaining unnecessary QTextStream::operator>> methods. 2012-03-08 16:54:41 -03:00
Marcelo Lira
035265df10 Fixes the support for QGLShaderProgram's array functions.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:40 -03:00
Hugo Parente Lima
7a5d2e693b Fix bug 941 - "Signals with QtCore.Qt types as arguments has invalid signatures"
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:40 -03:00
Renato Filho
aa091e00ef Fixed windows compilation. 2012-03-08 16:54:40 -03:00
Renato Filho
fe4dd9d63f Created unit test for QScriptValue __repr__ function. 2012-03-08 16:54:40 -03:00
Renato Filho
d68d90a144 Implement a more detailed __repr__ function for QScriptValue.
Fixes bug #922.
2012-03-08 16:54:40 -03:00
Renato Filho
75bf7f24b8 Implemented 'QGLShaderProgram' array functions support.
Fixes bug #940.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Hugo Parente <hugo.lima@openbossa.org>
2012-03-08 16:54:40 -03:00
Renato Filho
3482e2c114 Update bug_931 unit test to check for isinstance.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:40 -03:00
Renato Filho
7de55917c9 Implemented meta type for PySideSignal.
This allow intercept isinstance function to make valid with any
SignalInstance object.

Fixes bug #931.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:40 -03:00
Hugo Parente Lima
5922676bb1 Use linked lists instead of lists to speed up a bit.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:40 -03:00
Hugo Parente Lima
9a8531bfd6 Small optimizations on libpyside. 2012-03-08 16:54:39 -03:00
Renato Filho
238222df8e Created unit test for property decorator.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:39 -03:00
Renato Filho
dffc9a21ea Implemented Property decorator support.
Fixes bug #900.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:39 -03:00
Renato Filho
6cd17da797 Bumped version to 1.0.5 2012-03-08 16:54:39 -03:00
Renato Filho
10269a2c32 Updated shiboken version dependency. 2012-03-08 16:54:39 -03:00
Renato Filho
3ab2d7b8c3 Fix typo on function modification signature. 2012-03-08 16:54:39 -03:00
Renato Filho
51dad59dc7 Use realloc functions on MetaObject functions.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:38 -03:00
Renato Filho
ec45601aa1 Implemented DynamicMetaObject optiomizations.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:38 -03:00
Renato Filho
9dd8f98e73 Update unit test for static metaobjet to work with new optimizations
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:38 -03:00
Renato Filho
a0566f9928 Update QMetaObject test to test optimization changes.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:38 -03:00
Renato Filho
7eae54e157 Update unit test for max signals.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:38 -03:00
Renato Filho
81f264913e Fixed unit test for bug_847 mandelbug.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:38 -03:00
Hugo Parente Lima
f10f4f70d4 Fix bug 938 - "QTemporaryFile JPEG problem"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:38 -03:00
Hugo Parente Lima
5902ca2e66 Fix bug 937 - "missing pid method in QProcess" 2012-03-08 16:54:38 -03:00
Hugo Parente Lima
0b6bafdd44 Fix bug 934 - "A __getitem__ of QByteArray behaves strange" 2012-03-08 16:54:38 -03:00
Hugo Parente Lima
673a7d1bcc Fix bug 890 - "Add signal connection example for valueChanged(int) on QSpinBox to the docs"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:54:37 -03:00
Marcelo Lira
5d05c840bf Moved test for bug #921 from QtCore's directory to QtGui's.
Because it imports QtGui module.

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Lauro Moura <lauro.neto@openbossa.org>
2012-03-08 16:54:37 -03:00
Hugo Parente Lima
e3539a09a8 Fix bug 821 - "Mapping interface for QPixmapCache"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:37 -03:00
Marcelo Lira
ef45b5a924 Fixes bug #910 - installEventFilter() increments reference count on target object.
http://bugs.pyside.org/show_bug.cgi?id=910

Also added/fixed unit tests.

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:37 -03:00
Hugo Parente Lima
cab3b37b78 Add a comma. 2012-03-08 16:54:37 -03:00
Hugo Parente Lima
b166a72ccf Fix bug 916 - "Missing info about when is possible to use keyword arguments in docs [was: QListWidgetItem's constructor ignores text parameter]"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:54:37 -03:00
Hugo Parente Lima
e37426c8c4 Fix bug 926 - "qmlRegisterType does not work with QObject"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Neto <lauro.neto@openbossa.org>
2012-03-08 16:54:37 -03:00
Renato Filho
8ec6934396 Fix memory leak on GlobalReceiver. 2012-03-08 16:54:37 -03:00
Renato Filho
6f872f484c Created unit test for bug #931.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:37 -03:00
Renato Filho
304a265840 Renamed PySide.Signal instance class to PySide.SignalInstance.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:36 -03:00
Renato Filho
e6f0d69532 Created unit test for bug #921.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2012-03-08 16:54:36 -03:00
Renato Filho
420cc076b3 Disconnect signals during the class destroy.
Fix bug #921.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2012-03-08 16:54:36 -03:00
Hugo Parente Lima
f16324eb57 Update copyright year of license boiler plate. 2012-03-08 16:54:36 -03:00
Hugo Parente Lima
17e3d0da85 Fix bug 924 - "Allow QScriptValue to be accessed via []"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:36 -03:00
Hugo Parente Lima
48a1b539a4 Fix bug 920 - "Cannot use same slot for two signals"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:36 -03:00
Renato Filho
116a691516 Created unit test for bug #919.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:54:36 -03:00
Renato Filho
d4760309b7 Fix argument name on QStyle functions, and modify default value.
Fixes bug #919.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:54:36 -03:00
Renato Filho
d454f8a12c Created unit test for bug #915.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:54:35 -03:00
Renato Filho
6848e692ce Fixed QGraphicsView.scene return policy.
Fixes bug #915.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:54:35 -03:00
Hugo Parente Lima
c22e33a6c8 Fix bug 929 - "pkg-config files do not know about Python version tags"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:54:35 -03:00
Renato Filho
e9f082e83c Created unit test for bug #927.
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Hugo Parente <hugo.lima@openbossa.org>
2012-03-08 16:54:35 -03:00
Renato Filho
f62ba98e88 Fixed QThreadPool globalInstance ownership rules.
Fixed QThreadPool start, tryStart ownership rules.

Fixes bug #927.

Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Hugo Parente <hugo.lima@openbossa.org>
2012-03-08 16:54:35 -03:00
Renato Filho
9ef344629a Removed polymorphic-id-expression from QDeclarativeItem.
Fixes bug #925.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2012-03-08 16:54:35 -03:00
Renato Filho
794104582e Created unit test for bug #899.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:54:35 -03:00
Renato Filho
dc5ef0b998 Increment reference for functions used on QtCore.Property.
Fix bug #899.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:54:35 -03:00
Renato Filho
ae0e33ff72 Fixed enum test. 2012-03-08 16:54:34 -03:00
Renato Filho
c7385c45c4 Created unit test for bug #886.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Hugo Parente <hugo.lima@openbossa.org>
2012-03-08 16:54:34 -03:00
Renato Filho
b731b70fb2 Created unit test for duplicated signals.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Hugo Parente <hugo.lima@openbossa.org>
2012-03-08 16:54:32 -03:00
Renato Filho
09810443bf Fixed PySide signal object constructor.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Hugo Parente <hugo.lima@openbossa.org>
2012-03-08 16:54:32 -03:00
Renato Filho
fa59041a97 Created unit test for bug #896.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Hugo Parente <hugo.lima@openbossa.org>
2012-03-08 16:54:31 -03:00
Renato Filho
f2cecb5697 Implemented staticMetaObject property for QObjects. 2012-03-08 16:54:31 -03:00
Hugo Parente Lima
f3d69f65d1 Fix bug 913 - "Widgets inside QTabWidget are not exported as members of the containing widget"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:31 -03:00
Renato Filho
7d364bde65 Translate Shiboken enums to strings during the signal connection.
Fixes bug #903.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:31 -03:00
Renato Filho
0b5d8a1dec Created unit test for bug #909.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:54:31 -03:00
Renato Filho
f43d92fab4 Fix QUiLoader::load function ownership rules.
fixes bug #909.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:54:31 -03:00
Renato Filho
d82b8dbd8d Fixed QMainWindow ownership control.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:54:31 -03:00
Marcelo Lira
da39716cc9 Fixes bug #899 - http://bugs.pyside.org/show_bug.cgi?id=899
Added unit test.

Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
Reviewed by Renato Araujo <renato.filho@openbossa.org>
2012-03-08 16:54:31 -03:00
Renato Filho
b6f38556bd Created unittest for bug #407. 2012-03-08 16:54:31 -03:00
Renato Filho
7eb5694e17 Created unit test for bug #897.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:30 -03:00
Renato Filho
b385e0c3ed Fixed propagation of properties for user-defined types.
Fixes bug #897.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:30 -03:00
Hugo Parente Lima
0d0981309e Fixed test case, when the destroyed() signal is emitted all C++ objects are just QObject because their up destructors were already called.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:30 -03:00
Hugo Parente Lima
1783db758c Remove reference leak on global receiver. 2012-03-08 16:54:30 -03:00
Renato Filho
c0a4142c42 Bumped version to 1.0.4. 2012-03-08 16:54:30 -03:00
Renato Filho
db796e14d0 Created test for QObject.inherits.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:54:29 -03:00
Renato Filho
ebaf95ca1a Removed glue code for QObject.inherits function.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:54:29 -03:00
Renato Filho
f549793a5c Fixed QWidget.parentWidget return policy.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:54:29 -03:00
Renato Filho
a208d34ede Fill qApp is any QApplication is active during the QtGui moude import.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:54:29 -03:00
Marcelo Lira
af2972255d Updated PySide type systems to use the new type system variables: %ISCONVERTIBLE and %CHECKTYPE.
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
Reviewed by Renato Araujo <renato.filho@openbossa.org>
2012-03-08 16:54:29 -03:00
Hugo Parente Lima
df30f37512 Fix bug 879 - "QDoubleSpinBox: Can't call the parent validate() method from a subclass"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:29 -03:00
Hugo Parente Lima
590abafc54 Fix bug 822 - "Can't use QApplication without X"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:29 -03:00
Marcelo Lira
b66f8a789a Added an unit test for bug #871.
http://bugs.pyside.org/show_bug.cgi?id=871

Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:28 -03:00
Marcelo Lira
90be657119 Fixed default return value for "QStyleOptionViewItem QAbstractItemView::viewOptions() const".
Wrong code would be generated if compiling avoiding the "protected hack".
2012-03-08 16:54:28 -03:00
Hugo Parente Lima
23445c7fee Fix bug 877 - "Fatal Python error on application quit."
Reviewer: Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:28 -03:00
Hugo Parente Lima
c1f78498e6 Fix bug 870 - "QStylePainter.drawControl doesn't draw anything"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:54:28 -03:00
Renato Filho
23d1e497d8 Implemented support to MSG type on windows. 2012-03-08 16:54:28 -03:00
Renato Filho
3e88ef1c54 Removed unnecessary functions from QByteArray.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2012-03-08 16:54:28 -03:00
Hugo Parente Lima
97da5d1574 Fix bug 869 - "QDateTimeEdit initial time problem"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2012-03-08 16:54:28 -03:00
Hugo Parente Lima
6f46c1fab5 Fix bug 424 - "QDockWidget.setTitleBarWidget does not accept 0" 2012-03-08 16:54:27 -03:00
Hugo Parente Lima
0589d438b3 Show perm links only when the mouse hover on title. 2012-03-08 16:54:27 -03:00
Hugo Parente Lima
85a3a7fb31 Update javascript files used in sphinx generated documentation. 2012-03-08 16:54:27 -03:00
Renato Filho
902b1ec786 Created unit test for bug #860.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Hugo Parente <hugo.lima@openbossa.org>
2012-03-08 16:54:27 -03:00
Renato Filho
3595badad6 Fixed signal connection with native c++ slot.
Fixes bug #860.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Hugo Parente <hugo.lima@openbossa.org>
2012-03-08 16:54:27 -03:00
Hugo Parente Lima
e3df0766c3 Fix bug 827 - "Anchor sign for headers to copy links for sections"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:27 -03:00
Hugo Parente Lima
928fa00609 Fix bug 631 - "QSocketNotifier: Accept file-like object (with .fileno() method) in constructor" 2012-03-08 16:54:27 -03:00
Hugo Parente Lima
542adc0452 Avoid warnings about redefined constants. 2012-03-08 16:54:27 -03:00
Hugo Parente Lima
596f8347e2 Unit test for bug862 - "Problems when printing objects" 2012-03-08 16:54:27 -03:00
Marcelo Lira
801efd40f3 Removed the rejection of QAbstractFileEngine.beginEntryList.
Added an unit test.

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2012-03-08 16:54:26 -03:00
Marcelo Lira
f957a6f42d Moved internalPointer methods code injection into a code template. 2012-03-08 16:54:26 -03:00
Renato Filho
c0d6e44acc Updated example to handle with Python warnings.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:26 -03:00
Hugo Parente Lima
f1c7c78694 Port all buffer related code to the new Shiboken buffer interface.
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:26 -03:00
Renato Filho
7109418dbe Created unit test for QObject.eventFilter function.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:26 -03:00
Renato Filho
20f8953cb4 Fixed problems with eventFilter function destruction order.
The object passed to eventFilter function will keep a reference
to the listener object, this will ensure the destruction order.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2012-03-08 16:54:26 -03:00
renato araujo
3800537912 Created ClassInfo documentation.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
              Hugo Parente <hugo.lima@openbossa.org>
2012-03-08 16:54:26 -03:00
311 changed files with 8502 additions and 4205 deletions

View file

@ -5,8 +5,7 @@ project(pysidebindings)
cmake_minimum_required(VERSION 2.6) cmake_minimum_required(VERSION 2.6)
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Macros/ set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Macros/
${CMAKE_MODULE_PATH}) ${CMAKE_MODULE_PATH})
find_package(GeneratorRunner 0.6.10 REQUIRED) find_package(Shiboken 1.1.1 REQUIRED)
find_package(Shiboken 1.0.3 REQUIRED)
find_package(Qt4 4.5.0 REQUIRED) find_package(Qt4 4.5.0 REQUIRED)
find_file(GL_H "gl.h" PATH_SUFFIXES "GL") find_file(GL_H "gl.h" PATH_SUFFIXES "GL")
include(FindQt4Extra) include(FindQt4Extra)
@ -32,7 +31,7 @@ endif()
if(MSVC) if(MSVC)
set(CMAKE_CXX_FLAGS "/Zc:wchar_t- /GR /EHsc /DNOCOLOR /DWIN32 /D_WINDOWS /D_SCL_SECURE_NO_WARNINGS") set(CMAKE_CXX_FLAGS "/Zc:wchar_t- /GR /EHsc /DNOCOLOR /DWIN32 /D_WINDOWS /D_SCL_SECURE_NO_WARNINGS")
else() else()
if(CMAKE_HOST_UNIX) if(CMAKE_HOST_UNIX AND NOT CYGWIN)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fvisibility=hidden -Wno-strict-aliasing") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fvisibility=hidden -Wno-strict-aliasing")
endif() endif()
set(CMAKE_CXX_FLAGS_DEBUG "-g") set(CMAKE_CXX_FLAGS_DEBUG "-g")
@ -62,8 +61,8 @@ endif()
set(BINDING_NAME PySide) set(BINDING_NAME PySide)
set(BINDING_API_MAJOR_VERSION "1") set(BINDING_API_MAJOR_VERSION "1")
set(BINDING_API_MINOR_VERSION "0") set(BINDING_API_MINOR_VERSION "1")
set(BINDING_API_MICRO_VERSION "3") set(BINDING_API_MICRO_VERSION "1")
set(BINDING_API_RELEASE_LEVEL "final") # alpha, beta, rc, or final set(BINDING_API_RELEASE_LEVEL "final") # alpha, beta, rc, or final
set(BINDING_API_SERIAL 1) # leave as 0 when release level is final set(BINDING_API_SERIAL 1) # leave as 0 when release level is final
set(BINDING_API_VERSION "${BINDING_API_MAJOR_VERSION}.${BINDING_API_MINOR_VERSION}.${BINDING_API_MICRO_VERSION}" CACHE STRING "PySide version" FORCE) set(BINDING_API_VERSION "${BINDING_API_MAJOR_VERSION}.${BINDING_API_MINOR_VERSION}.${BINDING_API_MICRO_VERSION}" CACHE STRING "PySide version" FORCE)
@ -142,7 +141,7 @@ add_custom_target(dist
if (NOT SITE_PACKAGE) if (NOT SITE_PACKAGE)
execute_process( execute_process(
COMMAND ${SHIBOKEN_PYTHON_INTERPRETER} -c "from distutils import sysconfig; \\ COMMAND ${SHIBOKEN_PYTHON_INTERPRETER} -c "from distutils import sysconfig; \\
print sysconfig.get_python_lib(1,0,prefix='${CMAKE_INSTALL_PREFIX}')" print(sysconfig.get_python_lib(1,0,prefix='${CMAKE_INSTALL_PREFIX}'))"
OUTPUT_VARIABLE SITE_PACKAGE OUTPUT_VARIABLE SITE_PACKAGE
OUTPUT_STRIP_TRAILING_WHITESPACE) OUTPUT_STRIP_TRAILING_WHITESPACE)
if (NOT SITE_PACKAGE) if (NOT SITE_PACKAGE)

View file

@ -9,9 +9,6 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/global.h.in"
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/__init__.py.in" configure_file("${CMAKE_CURRENT_SOURCE_DIR}/__init__.py.in"
"${CMAKE_CURRENT_BINARY_DIR}/__init__.py" @ONLY) "${CMAKE_CURRENT_BINARY_DIR}/__init__.py" @ONLY)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/private.py"
"${CMAKE_BINARY_DIR}/PySide/private.py")
HAS_QT_MODULE(QT_QTCORE_FOUND QtCore) HAS_QT_MODULE(QT_QTCORE_FOUND QtCore)
HAS_QT_MODULE(QT_QTGUI_FOUND QtGui) HAS_QT_MODULE(QT_QTGUI_FOUND QtGui)
HAS_QT_MODULE(QT_QTNETWORK_FOUND QtNetwork) HAS_QT_MODULE(QT_QTNETWORK_FOUND QtNetwork)
@ -34,7 +31,7 @@ HAS_QT_MODULE(QT_PHONON_FOUND phonon)
HAS_QT_MODULE(QT_QTDECLARATIVE_FOUND QtDeclarative) HAS_QT_MODULE(QT_QTDECLARATIVE_FOUND QtDeclarative)
# install # install
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/__init__.py" "${CMAKE_CURRENT_BINARY_DIR}/private.py" install(FILES "${CMAKE_CURRENT_BINARY_DIR}/__init__.py"
DESTINATION "${SITE_PACKAGE}/${BINDING_NAME}${pyside_SUFFIX}") DESTINATION "${SITE_PACKAGE}/${BINDING_NAME}${pyside_SUFFIX}")
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/typesystem_templates.xml install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/typesystem_templates.xml
DESTINATION share/PySide${pyside_SUFFIX}/typesystems) DESTINATION share/PySide${pyside_SUFFIX}/typesystems)

View file

@ -36,6 +36,15 @@ else()
) )
endif() endif()
if(ENABLE_WIN)
set(SPECIFIC_OS_FILES
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/msg_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/point_wrapper.cpp
)
else()
set(SPECIFIC_OS_FILES "")
endif()
set(QtCore_SRC set(QtCore_SRC
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qabstracteventdispatcher_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qabstracteventdispatcher_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qabstractfileengine_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qabstractfileengine_wrapper.cpp
@ -135,9 +144,14 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qxmlstreamreader_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qxmlstreamwriter_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qxmlstreamwriter_wrapper.cpp
${QtCore_46_SRC} ${QtCore_46_SRC}
${QtCore_47_SRC} ${QtCore_47_SRC}
${SPECIFIC_OS_FILES}
) )
set(QtCore_typesystem_path "") configure_file("${CMAKE_CURRENT_SOURCE_DIR}/typesystem_core.xml.in"
"${CMAKE_CURRENT_BINARY_DIR}/typesystem_core.xml" @ONLY)
set(QtCore_typesystem_path "${QtCore_SOURCE_DIR}")
set(QtCore_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtCore_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/ ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/
${QT_INCLUDE_DIR} ${QT_INCLUDE_DIR}
@ -155,4 +169,5 @@ create_pyside_module(QtCore
"" ""
QtCore_typesystem_path QtCore_typesystem_path
QtCore_SRC QtCore_SRC
QtCore_gluecode) QtCore_gluecode
${CMAKE_CURRENT_BINARY_DIR}/typesystem_core.xml)

View file

@ -18,7 +18,7 @@ static Py_ssize_t SbkQByteArray_readbufferproc(PyObject* self, Py_ssize_t segmen
if (segment || !Shiboken::Object::isValid(self)) if (segment || !Shiboken::Object::isValid(self))
return -1; return -1;
QByteArray* cppSelf = Shiboken::Converter<QByteArray*>::toCpp(self); QByteArray* cppSelf = %CONVERTTOCPP[QByteArray*](self);
*ptrptr = reinterpret_cast<void*>(cppSelf->data()); *ptrptr = reinterpret_cast<void*>(cppSelf->data());
return cppSelf->size(); return cppSelf->size();
} }

View file

@ -93,7 +93,7 @@ qreal PySideEasingCurveFunctor::operator()(qreal progress)
PyObject* result = PyObject_CallObject(m_func, args); PyObject* result = PyObject_CallObject(m_func, args);
qreal cppResult = 0.0; qreal cppResult = 0.0;
if (result) { if (result) {
cppResult = Shiboken::Converter<qreal>::toCpp(result); Shiboken::Conversions::pythonToCppCopy(Shiboken::Conversions::PrimitiveTypeConverter<qreal>(), result, &cppResult);
Py_DECREF(result); Py_DECREF(result);
} }
Py_DECREF(args); Py_DECREF(args);

View file

@ -8,18 +8,18 @@ static bool isDecorator(PyObject* method, PyObject* self)
reinterpret_cast<PyMethodObject*>(method)->im_func; reinterpret_cast<PyMethodObject*>(method)->im_func;
} }
static bool getReceiver(PyObject* callback, QObject** receiver, PyObject** self) static bool getReceiver(QObject *source, const char* signal, PyObject* callback, QObject** receiver, PyObject** self, QByteArray* callbackSig)
{ {
bool forceGlobalReceiver = false; bool forceGlobalReceiver = false;
if (PyMethod_Check(callback)) { if (PyMethod_Check(callback)) {
*self = PyMethod_GET_SELF(callback); *self = PyMethod_GET_SELF(callback);
if (Shiboken::Converter<QObject*>::checkType(*self)) if (%CHECKTYPE[QObject*](*self))
*receiver = Shiboken::Converter<QObject*>::toCpp(*self); *receiver = %CONVERTTOCPP[QObject*](*self);
forceGlobalReceiver = isDecorator(callback, *self); forceGlobalReceiver = isDecorator(callback, *self);
} else if (PyCFunction_Check(callback)) { } else if (PyCFunction_Check(callback)) {
*self = PyCFunction_GET_SELF(callback); *self = PyCFunction_GET_SELF(callback);
if (*self && Shiboken::Converter<QObject*>::checkType(*self)) if (*self && %CHECKTYPE[QObject*](*self))
*receiver = Shiboken::Converter<QObject*>::toCpp(*self); *receiver = %CONVERTTOCPP[QObject*](*self);
} else if (PyCallable_Check(callback)) { } else if (PyCallable_Check(callback)) {
// Ok, just a callable object // Ok, just a callable object
*receiver = 0; *receiver = 0;
@ -27,9 +27,20 @@ static bool getReceiver(PyObject* callback, QObject** receiver, PyObject** self)
} }
bool usingGlobalReceiver = !*receiver || forceGlobalReceiver; bool usingGlobalReceiver = !*receiver || forceGlobalReceiver;
// Check if this callback is a overwrite of a non-virtual Qt slot.
if (!usingGlobalReceiver && receiver && self) {
*callbackSig = PySide::Signal::getCallbackSignature(signal, *receiver, callback, usingGlobalReceiver).toAscii();
const QMetaObject* metaObject = (*receiver)->metaObject();
int slotIndex = metaObject->indexOfSlot(callbackSig->constData());
if (slotIndex != -1 && slotIndex < metaObject->methodOffset() && PyMethod_Check(callback))
usingGlobalReceiver = true;
}
if (usingGlobalReceiver) { if (usingGlobalReceiver) {
PySide::SignalManager& signalManager = PySide::SignalManager::instance(); PySide::SignalManager& signalManager = PySide::SignalManager::instance();
*receiver = signalManager.globalReceiver(); *receiver = signalManager.globalReceiver(source, callback);
*callbackSig = PySide::Signal::getCallbackSignature(signal, *receiver, callback, usingGlobalReceiver).toAscii();
} }
return usingGlobalReceiver; return usingGlobalReceiver;
@ -59,40 +70,48 @@ static bool qobjectConnectCallback(QObject* source, const char* signal, PyObject
return false; return false;
signal++; signal++;
if (!PySide::SignalManager::registerMetaMethod(source, signal, QMetaMethod::Signal)) int signalIndex = PySide::SignalManager::registerMetaMethodGetIndex(source, signal, QMetaMethod::Signal);
if (signalIndex == -1)
return false; return false;
int signalIndex = source->metaObject()->indexOfMethod(signal);
PySide::SignalManager& signalManager = PySide::SignalManager::instance(); PySide::SignalManager& signalManager = PySide::SignalManager::instance();
// Extract receiver from callback // Extract receiver from callback
QObject* receiver = 0; QObject* receiver = 0;
PyObject* self = 0; PyObject* self = 0;
bool usingGlobalReceiver = getReceiver(callback, &receiver, &self); QByteArray callbackSig;
bool usingGlobalReceiver = getReceiver(source, signal, callback, &receiver, &self, &callbackSig);
if (receiver == 0 && self == 0) if (receiver == 0 && self == 0)
return false; return false;
const QMetaObject* metaObject = receiver->metaObject(); const QMetaObject* metaObject = receiver->metaObject();
const QByteArray callbackSig = PySide::Signal::getCallbackSignature(signal, receiver, callback, usingGlobalReceiver).toAscii();
const char* slot = callbackSig.constData(); const char* slot = callbackSig.constData();
int slotIndex = metaObject->indexOfSlot(slot); int slotIndex = metaObject->indexOfSlot(slot);
if (slotIndex == -1) { if (slotIndex == -1) {
if (!usingGlobalReceiver && self && !Shiboken::Object::hasCppWrapper((SbkObject*)self)) { if (!usingGlobalReceiver && self && !Shiboken::Object::hasCppWrapper((SbkObject*)self)) {
qWarning() << "You can't add dynamic slots on an object originated from C++."; qWarning() << "You can't add dynamic slots on an object originated from C++.";
if (usingGlobalReceiver)
signalManager.releaseGlobalReceiver(source, receiver);
return false; return false;
} }
if (usingGlobalReceiver) {
signalManager.addGlobalSlot(slot, callback); if (usingGlobalReceiver)
} else { slotIndex = signalManager.globalReceiverSlotIndex(receiver, slot);
if (!PySide::SignalManager::registerMetaMethod(receiver, slot, QMetaMethod::Slot)) else
slotIndex = PySide::SignalManager::registerMetaMethodGetIndex(receiver, slot, QMetaMethod::Slot);
if (slotIndex == -1) {
if (usingGlobalReceiver)
signalManager.releaseGlobalReceiver(source, receiver);
return false; return false;
} }
slotIndex = metaObject->indexOfSlot(slot);
} }
if (QMetaObject::connect(source, signalIndex, receiver, slotIndex, type)) { if (QMetaObject::connect(source, signalIndex, receiver, slotIndex, type)) {
if (usingGlobalReceiver) if (usingGlobalReceiver)
signalManager.globalReceiverConnectNotify(source, slotIndex); signalManager.notifyGlobalReceiver(receiver);
#ifndef AVOID_PROTECTED_HACK #ifndef AVOID_PROTECTED_HACK
source->connectNotify(signal - 1); source->connectNotify(signal - 1);
#else #else
@ -103,6 +122,10 @@ static bool qobjectConnectCallback(QObject* source, const char* signal, PyObject
return true; return true;
} }
if (usingGlobalReceiver)
signalManager.releaseGlobalReceiver(source, receiver);
return false; return false;
} }
@ -117,27 +140,28 @@ static bool qobjectDisconnectCallback(QObject* source, const char* signal, PyObj
// Extract receiver from callback // Extract receiver from callback
QObject* receiver = 0; QObject* receiver = 0;
PyObject* self = 0; PyObject* self = 0;
bool usingGlobalReceiver = getReceiver(callback, &receiver, &self); QByteArray callbackSig;
bool usingGlobalReceiver = getReceiver(NULL, signal, callback, &receiver, &self, &callbackSig);
if (receiver == 0 && self == 0) if (receiver == 0 && self == 0)
return false; return false;
const QMetaObject* metaObject = receiver->metaObject(); const QMetaObject* metaObject = receiver->metaObject();
const QByteArray callbackSig = PySide::Signal::getCallbackSignature(signal, receiver, callback, usingGlobalReceiver).toAscii(); int signalIndex = source->metaObject()->indexOfSignal(++signal);
QByteArray qtSlotName(callbackSig); int slotIndex = -1;
qtSlotName = qtSlotName.prepend('1');
slotIndex = metaObject->indexOfSlot(callbackSig);
if (QMetaObject::disconnectOne(source, signalIndex, receiver, slotIndex)) {
if (usingGlobalReceiver)
signalManager.releaseGlobalReceiver(source, receiver);
if (QObject::disconnect(source, signal, receiver, qtSlotName.constData())) {
if (usingGlobalReceiver) {
int slotIndex = metaObject->indexOfSlot(callbackSig.constData());
signalManager.globalReceiverDisconnectNotify(source, slotIndex);
#ifndef AVOID_PROTECTED_HACK #ifndef AVOID_PROTECTED_HACK
source->disconnectNotify(signal - 1); source->disconnectNotify(callbackSig);
#else #else
// Need to cast to QObjectWrapper* and call the public version of // Need to cast to QObjectWrapper* and call the public version of
// connectNotify when avoiding the protected hack. // connectNotify when avoiding the protected hack.
reinterpret_cast<QObjectWrapper*>(source)->disconnectNotify(signal - 1); reinterpret_cast<QObjectWrapper*>(source)->disconnectNotify(callbackSig);
#endif #endif
}
return true; return true;
} }
return false; return false;

View file

@ -1,5 +0,0 @@
QList<QByteArray> version = QByteArray(qVersion()).split('.');
PyObject *pyQtVersion = Shiboken::makeTuple(version[0].toInt(), version[1].toInt(), version[2].toInt());
PyModule_AddStringConstant(module, "__version__", qVersion());
PyModule_AddObject(module, "__version_info__", pyQtVersion);

View file

@ -1,16 +0,0 @@
namespace Shiboken {
template <>
struct Converter<QBool> : public ValueTypeConverter<QBool>
{
using ValueTypeConverter<QBool>::toPython;
static PyObject* toPython(const QBool& cppobj)
{
return PyBool_FromLong((bool) cppobj);
}
static QBool toCpp(PyObject* pyobj)
{
return QBool(pyobj == Py_True);
}
};
}

View file

@ -1,34 +0,0 @@
namespace Shiboken {
inline bool Converter<QByteArray>::checkType(PyObject* pyObj)
{
return ValueTypeConverter<QByteArray>::checkType(pyObj);
}
inline bool Converter<QByteArray>::isConvertible(PyObject* pyObj)
{
if (ValueTypeConverter<QByteArray>::isConvertible(pyObj))
return true;
SbkObjectType* shiboType = reinterpret_cast<SbkObjectType*>(SbkType< ::QByteArray >());
return Shiboken::Converter<const char *>::checkType(pyObj)
|| (ObjectType::isExternalConvertible(shiboType, pyObj));
}
inline QByteArray Converter<QByteArray>::toCpp(PyObject* pyObj)
{
if (pyObj == Py_None)
return 0;
else if (PyObject_TypeCheck(pyObj, SbkType<QByteArray>()))
return *Converter<QByteArray*>::toCpp(pyObj);
else if (PyString_Check(pyObj))
return QByteArray(PyString_AS_STRING(pyObj), PyString_GET_SIZE(pyObj));
else
return ValueTypeConverter<QByteArray>::toCpp(pyObj);
}
inline PyObject* Converter<QByteArray>::toPython(const ::QByteArray& cppObj)
{
return ValueTypeConverter<QByteArray>::toPython(cppObj);
}
}

View file

@ -1,35 +0,0 @@
namespace Shiboken {
template<>
struct Converter<QChar>
{
static bool checkType(PyObject* pyObj)
{
return PyString_Check(pyObj) && (PyString_Size(pyObj) == 1);
}
static bool isConvertible(PyObject* pyObj)
{
return (PyString_Check(pyObj) && (PyString_Size(pyObj) == 1))
|| pyObj == Py_None
|| PyInt_Check(pyObj);
}
static QChar toCpp(PyObject* pyObj)
{
if (PyString_Check(pyObj) && PyString_Size(pyObj) == 1)
return QChar(Shiboken::Converter<char >::toCpp(pyObj));
else if (PyInt_Check(pyObj))
return QChar(Shiboken::Converter<int >::toCpp(pyObj));
return QChar();
}
static PyObject* toPython(void* cppObj) { return toPython(*reinterpret_cast<QChar*>(cppObj)); }
static PyObject* toPython(const QChar& cppObj)
{
wchar_t c = (wchar_t)cppObj.unicode();
PyObject* pyObj = PyUnicode_FromWideChar(&c, 1);
return pyObj;
}
};
}

View file

@ -1,45 +0,0 @@
namespace Shiboken {
inline bool Converter<QDate>::checkType(PyObject* pyObj)
{
return ValueTypeConverter<QDate>::checkType(pyObj);
}
inline PyObject* Converter<QDate>::toPython(const ::QDate& cppObj)
{
return ValueTypeConverter<QDate>::toPython(cppObj);
}
inline bool Converter<QDate>::isConvertible(PyObject* pyObj)
{
if (ValueTypeConverter<QDate>::isConvertible(pyObj))
return true;
if (!PyDateTimeAPI)
PyDateTime_IMPORT;
SbkObjectType* shiboType = reinterpret_cast<SbkObjectType*>(SbkType< ::QDate >());
return PyDate_Check(pyObj) || ObjectType::isExternalConvertible(shiboType, pyObj);
}
inline QDate Converter<QDate>::toCpp(PyObject* pyObj)
{
if (!PyDateTimeAPI)
PyDateTime_IMPORT;
if (pyObj == Py_None) {
return QDate();
} else if (PyObject_TypeCheck(pyObj, SbkType<QDate>())) {
return *Converter<QDate*>::toCpp(pyObj);
} else if (PyDate_Check(pyObj)) {
int day = PyDateTime_GET_DAY(pyObj);
int month = PyDateTime_GET_MONTH(pyObj);
int year = PyDateTime_GET_YEAR(pyObj);
return QDate(year, month, day);
} else {
return ValueTypeConverter<QDate>::toCpp(pyObj);
}
}
}

View file

@ -1,49 +0,0 @@
namespace Shiboken {
inline bool Converter<QDateTime>::checkType(PyObject* pyObj)
{
return ValueTypeConverter<QDateTime>::checkType(pyObj);
}
inline PyObject* Converter<QDateTime>::toPython(const ::QDateTime& cppObj)
{
return ValueTypeConverter<QDateTime>::toPython(cppObj);
}
inline bool Converter<QDateTime>::isConvertible(PyObject* pyObj)
{
if (ValueTypeConverter<QDateTime>::isConvertible(pyObj))
return true;
if (!PyDateTimeAPI)
PyDateTime_IMPORT;
SbkObjectType* shiboType = reinterpret_cast<SbkObjectType*>(SbkType< ::QDateTime >());
return PyDateTime_Check(pyObj) || ObjectType::isExternalConvertible(shiboType, pyObj);
}
inline QDateTime Converter<QDateTime>::toCpp(PyObject* pyObj)
{
if (!PyDateTimeAPI)
PyDateTime_IMPORT;
if (pyObj == Py_None) {
return QDateTime();
} else if (PyObject_TypeCheck(pyObj, SbkType<QDateTime>())) {
return *Converter<QDateTime*>::toCpp(pyObj);
} else if (PyDateTime_Check(pyObj)) {
int day = PyDateTime_GET_DAY(pyObj);
int month = PyDateTime_GET_MONTH(pyObj);
int year = PyDateTime_GET_YEAR(pyObj);
int hour = PyDateTime_DATE_GET_HOUR(pyObj);
int min = PyDateTime_DATE_GET_MINUTE(pyObj);
int sec = PyDateTime_DATE_GET_SECOND(pyObj);
int msec = PyDateTime_DATE_GET_MICROSECOND(pyObj);
return QDateTime(QDate(year, month, day), QTime(hour, min, sec, msec));
} else {
return ValueTypeConverter<QDateTime>::toCpp(pyObj);
}
}
}

View file

@ -1,4 +0,0 @@
namespace Shiboken {
template<typename KT, typename VT>
struct Converter<QHash<KT, VT> > : QtDictConverter<QHash<KT, VT> > {};
}

View file

@ -1,4 +0,0 @@
namespace Shiboken {
template<typename T>
struct Converter<QList<T> > : StdListConverter<QList<T> > {};
}

View file

@ -1,5 +0,0 @@
namespace Shiboken {
template<typename KT, typename VT>
struct Converter<QMap<KT, VT> > : QtDictConverter<QMap<KT, VT> > {
};
}

View file

@ -1,5 +0,0 @@
namespace Shiboken {
template<typename KT, typename VT>
struct Converter<QMultiMap<KT, VT> > : QtMultiMapConverter<QMap<KT, VT> > {
};
}

View file

@ -1,4 +0,0 @@
namespace Shiboken {
template<typename FT, typename ST>
struct Converter<QPair<FT, ST> > : StdPairConverter<QPair<FT, ST> > {};
}

View file

@ -1,4 +0,0 @@
namespace Shiboken {
template<typename T>
struct Converter<QSet<T> > : QSequenceConverter<QSet<T> > {};
}

View file

@ -1,4 +0,0 @@
namespace Shiboken {
template<typename T>
struct Converter<QStack<T> > : StdListConverter<QStack<T> > {};
}

View file

@ -1,51 +0,0 @@
namespace Shiboken {
template<>
inline PyTypeObject* SbkType<QString>()
{
return &PyUnicode_Type;
}
template<>
struct Converter<QString>
{
static bool checkType(PyObject* pyObj)
{
return PyString_Check(pyObj) || PyUnicode_Check(pyObj);
}
static bool isConvertible(PyObject* pyObj)
{
return PyString_Check(pyObj)
|| PyUnicode_Check(pyObj)
|| pyObj == Py_None;
}
static QString toCpp(PyObject* pyObj)
{
if (PyUnicode_Check(pyObj)) {
Py_UNICODE* unicode = PyUnicode_AS_UNICODE(pyObj);
#if defined(Py_UNICODE_WIDE)
// cast as Py_UNICODE can be a different type
return QString::fromUcs4(reinterpret_cast<const uint*>(unicode));
#else
return QString::fromUtf16(unicode, PyUnicode_GET_SIZE(pyObj));
#endif
} else if (PyString_Check(pyObj)) {
return QString(Converter<const char * >::toCpp(pyObj));
}
return QString();
}
static PyObject* toPython(void* cppObj) { return toPython(*reinterpret_cast<QString*>(cppObj)); }
static PyObject* toPython(const QString& cppObj)
{
const int N = cppObj.length();
wchar_t* str = new wchar_t[N];
cppObj.toWCharArray(str);
PyObject* pyObj = PyUnicode_FromWideChar(str, N);
delete[] str;
return pyObj;
}
};
}

View file

@ -1,5 +0,0 @@
namespace Shiboken
{
template<>
struct Converter<QStringList> : StdListConverter<QStringList> {};
}

View file

@ -1,18 +0,0 @@
namespace Shiboken {
template<>
struct Converter<QStringRef> : public Converter<QString>
{
static PyObject* toPython(void* cppObj) { return toPython(*reinterpret_cast<QStringRef*>(cppObj)); }
static PyObject* toPython(const QStringRef& cppObj)
{
return Converter<QString>::toPython(cppObj.toString());
}
static QStringRef toCpp(PyObject* pyObj)
{
return QStringRef();
}
};
}

View file

@ -1,45 +0,0 @@
namespace Shiboken {
inline bool Converter<QTime>::checkType(PyObject* pyObj)
{
return ValueTypeConverter<QTime>::checkType(pyObj);
}
inline PyObject* Converter<QTime>::toPython(const ::QTime& cppObj)
{
return ValueTypeConverter<QTime>::toPython(cppObj);
}
inline bool Converter<QTime>::isConvertible(PyObject* pyObj)
{
if (ValueTypeConverter<QTime>::isConvertible(pyObj))
return true;
if (!PyDateTimeAPI)
PyDateTime_IMPORT;
SbkObjectType* shiboType = reinterpret_cast<SbkObjectType*>(SbkType< ::QTime >());
return PyTime_Check(pyObj) || ObjectType::isExternalConvertible(shiboType, pyObj);
}
inline QTime Converter<QTime>::toCpp(PyObject* pyObj)
{
if (!PyDateTimeAPI)
PyDateTime_IMPORT;
if (pyObj == Py_None) {
return QTime();
} else if (PyObject_TypeCheck(pyObj, SbkType<QTime>())) {
return *Converter<QTime*>::toCpp(pyObj);
} else if (PyTime_Check(pyObj)) {
int hour = PyDateTime_TIME_GET_HOUR(pyObj);
int min = PyDateTime_TIME_GET_MINUTE(pyObj);
int sec = PyDateTime_TIME_GET_SECOND(pyObj);
int msec = PyDateTime_TIME_GET_MICROSECOND(pyObj);
return QTime(hour, min, sec, msec);
} else {
return ValueTypeConverter<QTime>::toCpp(pyObj);
}
}
}

View file

@ -1,216 +0,0 @@
namespace Shiboken {
template<>
struct Converter<QVariant>
{
static bool checkType(PyObject* pyObj)
{
return false; // lets avoid the chaos
}
// all types are convertible to QVariant
static bool isConvertible(PyObject* pyObj)
{
return true;
}
static const char* resolveMetaType(PyTypeObject* type, int* typeId)
{
if (PyObject_TypeCheck(type, &SbkObjectType_Type)) {
SbkObjectType* sbkType = reinterpret_cast<SbkObjectType*>(type);
const char* typeName = Shiboken::ObjectType::getOriginalName(sbkType);
if (!typeName)
return 0;
bool valueType = '*' != typeName[qstrlen(typeName) - 1];
// Do not convert user type of value
if (valueType && Shiboken::ObjectType::isUserType(type))
return 0;
int obTypeId = QMetaType::type(typeName);
if (obTypeId) {
*typeId = obTypeId;
return typeName;
}
// Do not resolve types to value type
if (valueType)
return 0;
// find in base types
if (type->tp_base) {
return resolveMetaType(type->tp_base, typeId);
} else if (type->tp_bases) {
int size = PyTuple_GET_SIZE(type->tp_bases);
for(int i=0; i < size; i++){
const char* derivedName = resolveMetaType(reinterpret_cast<PyTypeObject*>(PyTuple_GET_ITEM(type->tp_bases, i)), typeId);
if (derivedName)
return derivedName;
}
}
}
*typeId = 0;
return 0;
}
static QVariant toCpp(PyObject* pyObj)
{
using namespace Shiboken;
// Primitive types
if (Converter<bool>::checkType(pyObj)) {
// QVariant(bool)
return QVariant(Converter<bool>::toCpp(pyObj));
} else if (pyObj == Py_None) {
// QVariant()
return QVariant();
} else if (Converter<QString>::checkType(pyObj)) {
// QVariant(const char*)
return QVariant(Converter<QString>::toCpp(pyObj));
} else if (Converter<QByteArray>::checkType(pyObj)) {
// QVariant(QByteArray)
return QVariant(Converter<QByteArray>::toCpp(pyObj));
} else if (PyFloat_CheckExact(pyObj)) {
// QVariant(double)
return QVariant(Converter<double>::toCpp(pyObj));
} else if (PyInt_Check(pyObj)) {
// QVariant(int)
return QVariant(Converter<int>::toCpp(pyObj));
} else if (PyLong_CheckExact(pyObj)) {
// QVariant(qlonglong)
return QVariant(Converter<qlonglong>::toCpp(pyObj));
} else if (Shiboken::isShibokenEnum(pyObj)) {
// QVariant(enum)
return QVariant(Converter<int>::toCpp(pyObj));
} else if (Shiboken::Object::checkType(pyObj)) {
// a class supported by QVariant?
int typeCode;
const char* typeName = resolveMetaType(pyObj->ob_type, &typeCode);
if (typeCode && typeName) {
Shiboken::TypeResolver* tr = Shiboken::TypeResolver::get(typeName);
QVariant var(typeCode, (void*)0);
void* args[] = { var.data() };
tr->toCpp(pyObj, args);
return var;
}
}
//sequence and dictornay
if (PyDict_Check(pyObj)) {
QVariant ret = convertToVariantMap(pyObj);
if (ret.isValid())
return ret;
} else if (PySequence_Check(pyObj)) {
return convertToVariantList(pyObj);
}
// Is a shiboken type not known by Qt
return QVariant::fromValue<PySide::PyObjectWrapper>(pyObj);
}
static PyObject* toPython(void* cppObj)
{
return toPython(*reinterpret_cast<QVariant*>(cppObj));
}
static PyObject* toPython(const QVariant& cppObj)
{
if (cppObj.isValid()) {
if (qstrcmp(cppObj.typeName(), "QVariantList") == 0)
return Converter<QList<QVariant> >::toPython(cppObj.value<QVariantList>());
if (qstrcmp(cppObj.typeName(), "QStringList") == 0)
return Converter<QList<QString> >::toPython(cppObj.value<QStringList>());
if (qstrcmp(cppObj.typeName(), "QVariantMap") == 0)
return Converter<QMap<QString, QVariant> >::toPython(cppObj.value<QVariantMap>());
Shiboken::TypeResolver* tr = Shiboken::TypeResolver::get(cppObj.typeName());
if (tr)
return tr->toPython(const_cast<void*>(cppObj.data()));
}
Py_RETURN_NONE;
}
static QVariant convertToValueList(PyObject* list)
{
if (PySequence_Size(list) < 1)
return QVariant();
Shiboken::AutoDecRef element(PySequence_GetItem(list, 0));
int typeId;
const char* typeName = resolveMetaType(element.cast<PyTypeObject*>(), &typeId);
if (typeName) {
QByteArray listTypeName("QList<");
listTypeName += typeName;
listTypeName += '>';
typeId = QMetaType::type(listTypeName);
if (typeId > 0) {
Shiboken::TypeResolver* tr = Shiboken::TypeResolver::get(listTypeName);
if (!tr) {
qWarning() << "TypeResolver for :" << listTypeName << "not registered.";
} else {
QVariant var(typeId, (void*)0);
void* args[] = { var.data(), 0 };
tr->toCpp(list, args);
return var;
}
}
}
return QVariant();
}
static QVariant convertToVariantMap(PyObject* map)
{
PyObject *key, *value;
Py_ssize_t pos = 0;
AutoDecRef keys(PyDict_Keys(map));
bool keysIsString = isStringList(keys);
if (keysIsString) {
QMap<QString, QVariant> ret;
while (PyDict_Next(map, &pos, &key, &value))
ret.insert(Converter<QString>::toCpp(key), toCpp(value));
return QVariant(ret);
} else {
return QVariant();
}
}
static bool isStringList(PyObject *list)
{
bool allString = true;
AutoDecRef fast(PySequence_Fast(list, "Failed to convert QVariantList"));
Py_ssize_t size = PySequence_Fast_GET_SIZE(fast.object());
for(int i=0; i < size; i++) {
PyObject* item = PySequence_Fast_GET_ITEM(fast.object(), i);
if (!Converter<QString>::checkType(item)) {
allString = false;
break;
}
}
return allString;
}
static QVariant convertToVariantList(PyObject* list)
{
bool allString = isStringList(list);
if (allString) {
QStringList lst = Converter<QList<QString> >::toCpp(list);
return QVariant(lst);
} else {
QVariant valueList = convertToValueList(list);
if (valueList.isValid())
return valueList;
QList<QVariant> lst;
AutoDecRef fast(PySequence_Fast(list, "Failed to convert QVariantList"));
Py_ssize_t size = PySequence_Fast_GET_SIZE(fast.object());
for(int i=0; i < size; i++) {
PyObject* item = PySequence_Fast_GET_ITEM(fast.object(), i);
lst.append(toCpp(item));
}
return QVariant(lst);
}
Q_ASSERT(false);
}
};
}

View file

@ -1,87 +0,0 @@
namespace Shiboken {
template<>
struct Converter<QVariant::Type>
{
static bool checkType(PyObject* pyObj)
{
return pyObj == Py_None || PyType_Check(pyObj) || Converter<QString>::checkType(pyObj);
}
static bool isConvertible(PyObject* pyObj)
{
return checkType(pyObj);
}
static QVariant::Type toCpp(PyObject* pyObj)
{
const char* typeName = 0;
if (pyObj == Py_None)
return QVariant::Invalid;
if (pyObj == reinterpret_cast<PyObject*>(&PyString_Type) || pyObj == reinterpret_cast<PyObject*>(&PyUnicode_Type))
typeName = "QString";
else if (pyObj == reinterpret_cast<PyObject*>(&PyFloat_Type))
typeName = "double"; // float is a UserType in QVariant.
else if (pyObj == reinterpret_cast<PyObject*>(&PyLong_Type))
typeName = "int"; // long is a UserType in QVariant.
else if (PyType_Check(pyObj)) {
if (pyObj->ob_type == &SbkObjectType_Type)
typeName = Shiboken::ObjectType::getOriginalName(reinterpret_cast<SbkObjectType*>(pyObj));
else
typeName = reinterpret_cast<PyTypeObject*>(pyObj)->tp_name;
}
else if (PyString_Check(pyObj))
typeName = PyString_AS_STRING(pyObj);
else if (PyUnicode_Check(pyObj))
typeName = PyString_AsString(pyObj);
else if (PyDict_Check(pyObj) && checkAllStringKeys(pyObj))
typeName = "QVariantMap";
else if (PySequence_Check(pyObj))
if (isStringList(pyObj))
typeName = "QStringList";
else
typeName = "QVariantList";
else
Q_ASSERT(false);
return QVariant::nameToType(typeName);
}
static PyObject* toPython(void* cppObj) { return toPython(*reinterpret_cast<QVariant::Type*>(cppObj)); }
static PyObject* toPython(const QVariant::Type& cppObj)
{
const char* typeName = QVariant::typeToName(cppObj);
PyObject* pyObj;
if (!typeName) {
pyObj = Py_None;
} else {
Shiboken::TypeResolver* tr = Shiboken::TypeResolver::get(typeName);
pyObj = tr ? reinterpret_cast<PyObject*>(tr->pythonType()) : Py_None;
}
Py_INCREF(pyObj);
return pyObj;
}
static bool isStringList(PyObject* list)
{
bool allString = true;
AutoDecRef fast(PySequence_Fast(list, "Failed to convert QVariantList"));
Py_ssize_t size = PySequence_Fast_GET_SIZE(fast.object());
for(int i=0; i < size; i++) {
PyObject* item = PySequence_Fast_GET_ITEM(fast.object(), i);
if (!Converter<QString>::checkType(item)) {
allString = false;
break;
}
}
return allString;
}
static bool checkAllStringKeys(PyObject* dict)
{
AutoDecRef keys(PyDict_Keys(dict));
return isStringList(keys);
}
};
}

View file

@ -1,4 +0,0 @@
namespace Shiboken {
template<typename T>
struct Converter<QVector<T> > : StdListConverter<QVector<T> > {};
}

View file

@ -0,0 +1,24 @@
<?xml version="1.0"?>
<!--
This file is part of PySide project.
Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
Contact: PySide team <contact@pyside.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-->
<typesystem package="PySide.QtCore">
<load-typesystem name="typesystem_core_@AUTO_OS@.xml" generate="yes"/>
<load-typesystem name="typesystem_core_common.xml" generate="yes"/>
</typesystem>

View file

@ -0,0 +1,23 @@
<?xml version="1.0"?>
<!--
This file is part of PySide project.
Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
Contact: PySide team <contact@pyside.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-->
<typesystem package="PySide.QtCore">
<primitive-type name="Qt::HANDLE" target-lang-api-name="PyObject" />
</typesystem>

View file

@ -0,0 +1,26 @@
<?xml version="1.0"?>
<!--
This file is part of PySide project.
Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
Contact: PySide team <contact@pyside.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-->
<typesystem package="PySide.QtCore">
<primitive-type name="Qt::HANDLE" target-lang-api-name="PyLong">
<!-- FIXME APIExtractor or shiboken do not support multiple includes by primitive type -->
<include file-name="QTextDocument" location="global"/>
</primitive-type>
</typesystem>

View file

@ -0,0 +1,57 @@
<?xml version="1.0"?>
<!--
This file is part of PySide project.
Copyright (C) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
Contact: PySide team <contact@pyside.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-->
<typesystem package="PySide.QtCore">
<primitive-type name="Qt::HANDLE" target-lang-api-name="PyObject" />
<primitive-type name="HWND">
<conversion-rule>
<native-to-target>
#ifdef IS_PY3K
return PyCapsule_New(%in, 0, 0);
#else
return PyCObject_FromVoidPtr(%in, 0);
#endif
</native-to-target>
<target-to-native>
<add-conversion type="PyNone">
%out = 0;
</add-conversion>
<add-conversion check="checkPyCapsuleOrPyCObject(%in)" type="PyObject">
#ifdef IS_PY3K
%out = (%OUTTYPE)PyCapsule_GetPointer(%in, 0);
#else
%out = (%OUTTYPE)PyCObject_AsVoidPtr(%in);
#endif
</add-conversion>
</target-to-native>
</conversion-rule>
</primitive-type>
<inject-code class="native" position="beginning">
<insert-template name="checkPyCapsuleOrPyCObject_func"/>
</inject-code>
<value-type name="POINT">
<include file-name="wtypes.h" location="global"/>
</value-type>
<value-type name="MSG">
<include file-name="wtypes.h" location="global"/>
</value-type>
<suppress-warning text="class 'MSG' inherits from unknown base class 'tagMSG'"/>
<suppress-warning text="class not found for setup inheritance 'tagMSG'"/>
</typesystem>

View file

@ -0,0 +1,26 @@
<?xml version="1.0"?>
<!--
This file is part of PySide project.
Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
Contact: PySide team <contact@pyside.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-->
<typesystem package="PySide.QtCore">
<primitive-type name="Qt::HANDLE" target-lang-api-name="PyLong">
<!-- FIXME APIExtractor or shiboken do not support multiple includes by primitive type -->
<include file-name="QTextDocument" location="global"/>
</primitive-type>
</typesystem>

View file

@ -23,7 +23,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtDeclarative/qdeclarativeview_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtDeclarative/qtdeclarative_module_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtDeclarative/qtdeclarative_module_wrapper.cpp
) )
set(QtDeclarative_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtNetwork_SOURCE_DIR}${PATH_SEP}${QtDeclarative_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtDeclarative_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtNetwork_SOURCE_DIR}${PATH_SEP}${QtDeclarative_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtDeclarative_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtDeclarative_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${QT_QTCORE_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR}

View file

@ -52,9 +52,7 @@ static void propListMetaCall(PySideProperty* pp, PyObject* self, QMetaObject::Ca
static PyObject* pyTypes[PYSIDE_MAX_QML_TYPES]; static PyObject* pyTypes[PYSIDE_MAX_QML_TYPES];
static void (*createFuncs[PYSIDE_MAX_QML_TYPES])(void*); static void (*createFuncs[PYSIDE_MAX_QML_TYPES])(void*);
/// QDeclarativeItem will create objects using placement new then this pointer is non-null. // Mutex used to avoid race condition on PySide::nextQObjectMemoryAddr
void* PySide::nextQmlElementMemoryAddr = 0;
// Mutex used to avoid race condition on PySide::nextQmlElementMemoryAddr
static QMutex nextQmlElementMutex; static QMutex nextQmlElementMutex;
template<int N> template<int N>
@ -63,12 +61,12 @@ struct ElementFactoryBase
static void createInto(void* memory) static void createInto(void* memory)
{ {
QMutexLocker locker(&nextQmlElementMutex); QMutexLocker locker(&nextQmlElementMutex);
PySide::nextQmlElementMemoryAddr = memory; PySide::setNextQObjectMemoryAddr(memory);
Shiboken::GilState state; Shiboken::GilState state;
PyObject* obj = PyObject_CallObject(pyTypes[N], 0); PyObject* obj = PyObject_CallObject(pyTypes[N], 0);
if (!obj || PyErr_Occurred()) if (!obj || PyErr_Occurred())
PyErr_Print(); PyErr_Print();
PySide::nextQmlElementMemoryAddr = 0; PySide::setNextQObjectMemoryAddr(0);
} }
}; };
@ -95,8 +93,9 @@ int PySide::qmlRegisterType(PyObject* pyObj, const char* uri, int versionMajor,
{ {
using namespace Shiboken; using namespace Shiboken;
static PyTypeObject* declarativeItemType = TypeResolver::get("QDeclarativeItem*")->pythonType(); static PyTypeObject* qobjectType = Shiboken::Conversions::getPythonTypeObject("QObject*");
assert(declarativeItemType); static PyTypeObject* qdeclarativeType = Shiboken::Conversions::getPythonTypeObject("QDeclarativeItem*");
assert(qobjectType);
static int nextType = 0; static int nextType = 0;
if (nextType >= PYSIDE_MAX_QML_TYPES) { if (nextType >= PYSIDE_MAX_QML_TYPES) {
@ -104,29 +103,28 @@ int PySide::qmlRegisterType(PyObject* pyObj, const char* uri, int versionMajor,
return -1; return -1;
} }
if (!PySequence_Contains(((PyTypeObject*)pyObj)->tp_mro, (PyObject*)declarativeItemType)) { if (!PySequence_Contains(((PyTypeObject*)pyObj)->tp_mro, (PyObject*)qobjectType)) {
PyErr_Format(PyExc_TypeError, "A type inherited from %s expected, got %s.", declarativeItemType->tp_name, ((PyTypeObject*)pyObj)->tp_name); PyErr_Format(PyExc_TypeError, "A type inherited from %s expected, got %s.", qobjectType->tp_name, ((PyTypeObject*)pyObj)->tp_name);
return -1; return -1;
} }
bool isDeclarativeType = PySequence_Contains(((PyTypeObject*)pyObj)->tp_mro, (PyObject*)qdeclarativeType);
QMetaObject* metaObject = reinterpret_cast<QMetaObject*>(ObjectType::getTypeUserData(reinterpret_cast<SbkObjectType*>(pyObj))); QMetaObject* metaObject = reinterpret_cast<QMetaObject*>(ObjectType::getTypeUserData(reinterpret_cast<SbkObjectType*>(pyObj)));
Q_ASSERT(metaObject); Q_ASSERT(metaObject);
// Inc ref the type object, don't worry about dec ref them because there's no way to unregister a QML type
Py_INCREF(pyObj);
// All ready... now the ugly code begins... :-) // All ready... now the ugly code begins... :-)
pyTypes[nextType] = pyObj; pyTypes[nextType] = pyObj;
// Init proxy object static meta object // Init proxy object static meta object
QDeclarativePrivate::RegisterType type; QDeclarativePrivate::RegisterType type;
type.version = 0; type.version = 0;
if (isDeclarativeType) {
type.typeId = qMetaTypeId<QDeclarativeItem*>(); type.typeId = qMetaTypeId<QDeclarativeItem*>();
type.listId = qMetaTypeId<QDeclarativeListProperty<QDeclarativeItem> >(); type.listId = qMetaTypeId<QDeclarativeListProperty<QDeclarativeItem> >();
type.objectSize = sizeof(QDeclarativeItemWrapper);
type.create = createFuncs[nextType];
type.uri = uri;
type.versionMajor = versionMajor;
type.versionMinor = versionMinor;
type.elementName = qmlName;
type.metaObject = metaObject;
type.attachedPropertiesFunction = QDeclarativePrivate::attachedPropertiesFunc<QDeclarativeItem>(); type.attachedPropertiesFunction = QDeclarativePrivate::attachedPropertiesFunc<QDeclarativeItem>();
type.attachedPropertiesMetaObject = QDeclarativePrivate::attachedPropertiesMetaObject<QDeclarativeItem>(); type.attachedPropertiesMetaObject = QDeclarativePrivate::attachedPropertiesMetaObject<QDeclarativeItem>();
@ -134,6 +132,23 @@ int PySide::qmlRegisterType(PyObject* pyObj, const char* uri, int versionMajor,
type.parserStatusCast = QDeclarativePrivate::StaticCastSelector<QDeclarativeItem, QDeclarativeParserStatus>::cast(); type.parserStatusCast = QDeclarativePrivate::StaticCastSelector<QDeclarativeItem, QDeclarativeParserStatus>::cast();
type.valueSourceCast = QDeclarativePrivate::StaticCastSelector<QDeclarativeItem, QDeclarativePropertyValueSource>::cast(); type.valueSourceCast = QDeclarativePrivate::StaticCastSelector<QDeclarativeItem, QDeclarativePropertyValueSource>::cast();
type.valueInterceptorCast = QDeclarativePrivate::StaticCastSelector<QDeclarativeItem, QDeclarativePropertyValueInterceptor>::cast(); type.valueInterceptorCast = QDeclarativePrivate::StaticCastSelector<QDeclarativeItem, QDeclarativePropertyValueInterceptor>::cast();
} else {
type.typeId = qMetaTypeId<QObject*>();
type.listId = qMetaTypeId<QDeclarativeListProperty<QObject> >();
type.attachedPropertiesFunction = QDeclarativePrivate::attachedPropertiesFunc<QObject>();
type.attachedPropertiesMetaObject = QDeclarativePrivate::attachedPropertiesMetaObject<QObject>();
type.parserStatusCast = QDeclarativePrivate::StaticCastSelector<QObject, QDeclarativeParserStatus>::cast();
type.valueSourceCast = QDeclarativePrivate::StaticCastSelector<QObject, QDeclarativePropertyValueSource>::cast();
type.valueInterceptorCast = QDeclarativePrivate::StaticCastSelector<QObject, QDeclarativePropertyValueInterceptor>::cast();
}
type.objectSize = PySide::getSizeOfQObject(reinterpret_cast<SbkObjectType*>(pyObj));
type.create = createFuncs[nextType];
type.uri = uri;
type.versionMajor = versionMajor;
type.versionMinor = versionMinor;
type.elementName = qmlName;
type.metaObject = metaObject;
type.extensionObjectCreate = 0; type.extensionObjectCreate = 0;
type.extensionMetaObject = 0; type.extensionMetaObject = 0;
@ -185,12 +200,11 @@ void propListTpFree(void* self)
PySideProperty* pySelf = reinterpret_cast<PySideProperty*>(self); PySideProperty* pySelf = reinterpret_cast<PySideProperty*>(self);
delete reinterpret_cast<DeclarativeListProperty*>(PySide::Property::userData(pySelf)); delete reinterpret_cast<DeclarativeListProperty*>(PySide::Property::userData(pySelf));
// calls base type constructor // calls base type constructor
pySelf->ob_type->tp_base->tp_free(self); Py_TYPE(pySelf)->tp_base->tp_free(self);
} }
PyTypeObject PropertyListType = { PyTypeObject PropertyListType = {
PyObject_HEAD_INIT(0) PyVarObject_HEAD_INIT(0, 0)
0, /*ob_size*/
"ListProperty", /*tp_name*/ "ListProperty", /*tp_name*/
sizeof(PySideProperty), /*tp_basicsize*/ sizeof(PySideProperty), /*tp_basicsize*/
0, /*tp_itemsize*/ 0, /*tp_itemsize*/
@ -244,7 +258,10 @@ PyTypeObject PropertyListType = {
void propListAppender(QDeclarativeListProperty<QDeclarativeItem>* propList, QDeclarativeItem* item) void propListAppender(QDeclarativeListProperty<QDeclarativeItem>* propList, QDeclarativeItem* item)
{ {
Shiboken::GilState state; Shiboken::GilState state;
Shiboken::AutoDecRef args(Shiboken::makeTuple(propList->object, item));
Shiboken::AutoDecRef args(PyTuple_New(2));
PyTuple_SET_ITEM(args, 0, Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide_QtCoreTypes[SBK_QOBJECT_IDX], propList->object));
PyTuple_SET_ITEM(args, 1, Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide_QtDeclarativeTypes[SBK_QDECLARATIVEITEM_IDX], item));
DeclarativeListProperty* data = reinterpret_cast<DeclarativeListProperty*>(propList->data); DeclarativeListProperty* data = reinterpret_cast<DeclarativeListProperty*>(propList->data);
Shiboken::AutoDecRef retVal(PyObject_CallObject(data->append, args)); Shiboken::AutoDecRef retVal(PyObject_CallObject(data->append, args));
@ -257,42 +274,50 @@ void propListAppender(QDeclarativeListProperty<QDeclarativeItem>* propList, QDec
int propListCount(QDeclarativeListProperty<QDeclarativeItem>* propList) int propListCount(QDeclarativeListProperty<QDeclarativeItem>* propList)
{ {
Shiboken::GilState state; Shiboken::GilState state;
Shiboken::AutoDecRef args(Shiboken::makeTuple(propList->object));
Shiboken::AutoDecRef args(PyTuple_New(1));
PyTuple_SET_ITEM(args, 0, Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide_QtCoreTypes[SBK_QOBJECT_IDX], propList->object));
DeclarativeListProperty* data = reinterpret_cast<DeclarativeListProperty*>(propList->data); DeclarativeListProperty* data = reinterpret_cast<DeclarativeListProperty*>(propList->data);
Shiboken::AutoDecRef retVal(PyObject_CallObject(data->count, args)); Shiboken::AutoDecRef retVal(PyObject_CallObject(data->count, args));
// Check return type // Check return type
int cppResult = 0;
PythonToCppFunc pythonToCpp;
if (PyErr_Occurred()) if (PyErr_Occurred())
PyErr_Print(); PyErr_Print();
else if (Shiboken::Converter<int>::isConvertible(retVal)) else if ((pythonToCpp = Shiboken::Conversions::isPythonToCppConvertible(Shiboken::Conversions::PrimitiveTypeConverter<int>(), retVal)))
return Shiboken::Converter<int>::toCpp(retVal); pythonToCpp(retVal, &cppResult);
return cppResult;
return 0;
} }
// Implementation of QDeclarativeListProperty<T>::AtFunction callback // Implementation of QDeclarativeListProperty<T>::AtFunction callback
QDeclarativeItem* propListAt(QDeclarativeListProperty<QDeclarativeItem>* propList, int index) QDeclarativeItem* propListAt(QDeclarativeListProperty<QDeclarativeItem>* propList, int index)
{ {
Shiboken::GilState state; Shiboken::GilState state;
Shiboken::AutoDecRef args(Shiboken::makeTuple(propList->object, index));
Shiboken::AutoDecRef args(PyTuple_New(2));
PyTuple_SET_ITEM(args, 0, Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide_QtCoreTypes[SBK_QOBJECT_IDX], propList->object));
PyTuple_SET_ITEM(args, 1, Shiboken::Conversions::copyToPython(Shiboken::Conversions::PrimitiveTypeConverter<int>(), &index));
DeclarativeListProperty* data = reinterpret_cast<DeclarativeListProperty*>(propList->data); DeclarativeListProperty* data = reinterpret_cast<DeclarativeListProperty*>(propList->data);
Shiboken::AutoDecRef retVal(PyObject_CallObject(data->at, args)); Shiboken::AutoDecRef retVal(PyObject_CallObject(data->at, args));
QDeclarativeItem* result = 0;
if (PyErr_Occurred()) if (PyErr_Occurred())
PyErr_Print(); PyErr_Print();
else if (PyType_IsSubtype(Py_TYPE(retVal), data->type)) else if (PyType_IsSubtype(Py_TYPE(retVal), data->type))
return Shiboken::Converter<QDeclarativeItem*>::toCpp(retVal); Shiboken::Conversions::pythonToCppPointer((SbkObjectType*)SbkPySide_QtCoreTypes[SBK_QDECLARATIVEITEM_IDX], retVal, &result);
return result;
return 0;
} }
// Implementation of QDeclarativeListProperty<T>::ClearFunction callback // Implementation of QDeclarativeListProperty<T>::ClearFunction callback
void propListClear(QDeclarativeListProperty<QDeclarativeItem>* propList) void propListClear(QDeclarativeListProperty<QDeclarativeItem>* propList)
{ {
Shiboken::GilState state; Shiboken::GilState state;
Shiboken::AutoDecRef args(Shiboken::makeTuple(propList->object));
Shiboken::AutoDecRef args(PyTuple_New(1));
PyTuple_SET_ITEM(args, 0, Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide_QtCoreTypes[SBK_QOBJECT_IDX], propList->object));
DeclarativeListProperty* data = reinterpret_cast<DeclarativeListProperty*>(propList->data); DeclarativeListProperty* data = reinterpret_cast<DeclarativeListProperty*>(propList->data);
Shiboken::AutoDecRef retVal(PyObject_CallObject(data->clear, args)); Shiboken::AutoDecRef retVal(PyObject_CallObject(data->clear, args));
@ -308,7 +333,9 @@ static void propListMetaCall(PySideProperty* pp, PyObject* self, QMetaObject::Ca
return; return;
DeclarativeListProperty* data = reinterpret_cast<DeclarativeListProperty*>(PySide::Property::userData(pp)); DeclarativeListProperty* data = reinterpret_cast<DeclarativeListProperty*>(PySide::Property::userData(pp));
QDeclarativeListProperty<QDeclarativeItem> declProp(Shiboken::Converter<QObject*>::toCpp(self), data, &propListAppender); QObject* qobj;
Shiboken::Conversions::pythonToCppPointer((SbkObjectType*)SbkPySide_QtCoreTypes[SBK_QOBJECT_IDX], self, &qobj);
QDeclarativeListProperty<QDeclarativeItem> declProp(qobj, data, &propListAppender);
if (data->count) if (data->count)
declProp.count = &propListCount; declProp.count = &propListCount;

View file

@ -46,7 +46,8 @@
</inject-documentation> </inject-documentation>
<inject-code class="target"> <inject-code class="target">
%PYARG_0 = %CONVERTTOPYTHON[int](PySide::qmlRegisterType(%1, %2, %3, %4, %5)); int %0 = PySide::qmlRegisterType(%ARGUMENT_NAMES);
%PYARG_0 = %CONVERTTOPYTHON[int](%0);
</inject-code> </inject-code>
</add-function> </add-function>
@ -59,7 +60,6 @@
</enum-type> </enum-type>
<inject-code class="target" position="end"> <inject-code class="target" position="end">
Shiboken::TypeResolver::createValueTypeResolver&lt; QList&lt;QObject*&gt; &gt;("QList&lt;QObject*&gt;");
PySide::initQmlSupport(module); PySide::initQmlSupport(module);
</inject-code> </inject-code>
@ -91,26 +91,44 @@
<parent index="this" action="add" /> <parent index="this" action="add" />
</modify-argument> </modify-argument>
</modify-function> </modify-function>
<modify-function signature="importPlugin(QString,QString,QString*)">
<modify-argument index="3">
<remove-argument/>
</modify-argument>
<modify-argument index="return">
<replace-type modified-type="(ok, errorString)" />
</modify-argument>
<inject-code class="target" position="beginning">
QString errorString;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE ok_ = %CPPSELF.%FUNCTION_NAME(%1, %2, &amp;errorString);
%END_ALLOW_THREADS
%PYARG_0 = PyTuple_New(2);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](ok_));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QString](errorString));
</inject-code>
</modify-function>
</object-type> </object-type>
<value-type name="QDeclarativeError" /> <value-type name="QDeclarativeError" />
<object-type name="QDeclarativeExpression" /> <object-type name="QDeclarativeExpression">
<modify-function signature="evaluate(bool*)">
<modify-argument index="1">
<remove-argument/>
</modify-argument>
<inject-code class="target" position="beginning">
<insert-template name="fix_bool*"/>
</inject-code>
</modify-function>
</object-type>
<object-type name="QDeclarativeExtensionPlugin" /> <object-type name="QDeclarativeExtensionPlugin" />
<object-type name="QDeclarativeImageProvider"> <object-type name="QDeclarativeImageProvider">
<enum-type name="ImageType" /> <enum-type name="ImageType" />
</object-type> </object-type>
<object-type name="QDeclarativeItem" polymorphic-id-expression="qgraphicsitem_cast&lt;QDeclarativeItem*>(%1)"> <object-type name="QDeclarativeItem">
<extra-includes> <extra-includes>
<include file-name="pysideqmlregistertype.h" location="local"/> <include file-name="pysideqmlregistertype.h" location="local"/>
</extra-includes> </extra-includes>
<enum-type name="TransformOrigin" /> <enum-type name="TransformOrigin" />
<modify-function signature="QDeclarativeItem(QDeclarativeItem*)">
<inject-code class="target">
if (PySide::nextQmlElementMemoryAddr)
%0 = new (PySide::nextQmlElementMemoryAddr) ::QDeclarativePrivate::QDeclarativeElement&lt;%TYPE>();
else
%0 = new %TYPE(%1);
</inject-code>
</modify-function>
</object-type> </object-type>
<value-type name="QDeclarativeListReference" /> <value-type name="QDeclarativeListReference" />

View file

@ -15,7 +15,6 @@ if(ENABLE_X11)
endif() endif()
endif() endif()
if (${QT_VERSION_MAJOR} EQUAL 4 AND ${QT_VERSION_MINOR} LESS 6) if (${QT_VERSION_MAJOR} EQUAL 4 AND ${QT_VERSION_MINOR} LESS 6)
set(QtGui_46_SRC "") set(QtGui_46_SRC "")
else() else()
@ -60,6 +59,14 @@ else()
) )
endif () endif ()
if (${QT_VERSION_MAJOR} EQUAL 4 AND ${QT_VERSION_MINOR} LESS 7)
set(QtGui_47_SRC "")
else()
set(QtGui_47_SRC
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtGui/qpainter_pixmapfragment_wrapper.cpp
)
endif()
set(QtGui_OPTIONAL_SRC ) set(QtGui_OPTIONAL_SRC )
set(QtGui_DROPPED_ENTRIES ) set(QtGui_DROPPED_ENTRIES )
check_qt_class(QtGui QAbstractPageSetupDialog QtGui_OPTIONAL_SRC QtGui_DROPPED_ENTRIES) check_qt_class(QtGui QAbstractPageSetupDialog QtGui_OPTIONAL_SRC QtGui_DROPPED_ENTRIES)
@ -398,13 +405,15 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtGui/qworkspace_wrapper.cpp
${SPECIFIC_OS_FILES} ${SPECIFIC_OS_FILES}
${QPYTEXTOBJECT_MOC} ${QPYTEXTOBJECT_MOC}
${QtGui_46_SRC} ${QtGui_46_SRC}
${QtGui_47_SRC}
${QtGui_OPTIONAL_SRC} ${QtGui_OPTIONAL_SRC}
) )
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/typesystem_gui.xml.in" configure_file("${CMAKE_CURRENT_SOURCE_DIR}/typesystem_gui.xml.in"
"${CMAKE_CURRENT_BINARY_DIR}/typesystem_gui.xml" @ONLY) "${CMAKE_CURRENT_BINARY_DIR}/typesystem_gui.xml" @ONLY)
set(QtGui_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}") set(QtGui_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}")
set(QtGui_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtGui_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtGui/ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtGui/
${pyside_SOURCE_DIR} ${pyside_SOURCE_DIR}

View file

@ -5,23 +5,18 @@ static int QApplicationArgCount;
static char** QApplicationArgValues; static char** QApplicationArgValues;
static const char QAPP_MACRO[] = "qApp"; static const char QAPP_MACRO[] = "qApp";
void QApplication_constructor(PyObject* self, PyObject* args, QApplicationWrapper** cptr) bool QApplicationConstructorStart(PyObject* argv)
{ {
if (QApplication::instance()) { if (QApplication::instance()) {
PyErr_SetString(PyExc_RuntimeError, "A QApplication instance already exists."); PyErr_SetString(PyExc_RuntimeError, "A QApplication instance already exists.");
return; return false;
} }
int numArgs = PyTuple_GET_SIZE(args); return Shiboken::sequenceToArgcArgv(argv, &QApplicationArgCount, &QApplicationArgValues, "PySideApp");
if (numArgs != 1
|| !Shiboken::sequenceToArgcArgv(PyTuple_GET_ITEM(args, 0), &QApplicationArgCount, &QApplicationArgValues, "PySideApp")) {
PyErr_BadArgument();
return;
} }
*cptr = new QApplicationWrapper(QApplicationArgCount, QApplicationArgValues); void QApplicationConstructorEnd(PyObject* self)
Shiboken::Object::releaseOwnership(reinterpret_cast<SbkObject*>(self)); {
// Verify if qApp is in main module // Verify if qApp is in main module
PyObject* globalsDict = PyEval_GetGlobals(); PyObject* globalsDict = PyEval_GetGlobals();
if (globalsDict) { if (globalsDict) {
@ -34,3 +29,22 @@ void QApplication_constructor(PyObject* self, PyObject* args, QApplicationWrappe
PySide::registerCleanupFunction(&PySide::destroyQCoreApplication); PySide::registerCleanupFunction(&PySide::destroyQCoreApplication);
Py_INCREF(self); Py_INCREF(self);
} }
static void QApplicationConstructor(PyObject* self, PyObject* argv, QApplicationWrapper** cptr)
{
if (QApplicationConstructorStart(argv)) {
*cptr = new QApplicationWrapper(QApplicationArgCount, QApplicationArgValues);
Shiboken::Object::releaseOwnership(reinterpret_cast<SbkObject*>(self));
QApplicationConstructorEnd(self);
}
}
template <typename T>
static void QApplicationConstructor(PyObject* self, PyObject* argv, T extraArg, QApplicationWrapper** cptr)
{
if (QApplicationConstructorStart(argv)) {
*cptr = new QApplicationWrapper(QApplicationArgCount, QApplicationArgValues, extraArg);
Shiboken::Object::releaseOwnership(reinterpret_cast<SbkObject*>(self));
QApplicationConstructorEnd(self);
}
}

View file

@ -0,0 +1,122 @@
void addLayoutOwnership(QLayout* layout, QLayoutItem* item);
void removeLayoutOwnership(QLayout* layout, QWidget* widget);
inline QByteArray retrieveObjectName(PyObject* obj)
{
Shiboken::AutoDecRef objName(PyObject_Str(obj));
return Shiboken::String::toCString(objName);
}
inline void addLayoutOwnership(QLayout* layout, QWidget* widget)
{
//transfer ownership to parent widget
QWidget *lw = layout->parentWidget();
QWidget *pw = widget->parentWidget();
Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QWidget*](widget));
//Transfer parent to layout widget
if (pw && lw && pw != lw)
Shiboken::Object::setParent(0, pyChild);
if (!lw && !pw) {
//keep the reference while the layout is orphan
Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](layout));
Shiboken::Object::keepReference(reinterpret_cast<SbkObject*>(pyParent.object()), retrieveObjectName(pyParent).data(), pyChild, true);
} else {
if (!lw)
lw = pw;
Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](lw));
Shiboken::Object::setParent(pyParent, pyChild);
}
}
inline void addLayoutOwnership(QLayout* layout, QLayout* other)
{
//transfer all children widgets from other to layout parent widget
QWidget* parent = layout->parentWidget();
if (!parent) {
//keep the reference while the layout is orphan
Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QLayout*](layout));
Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QLayout*](other));
Shiboken::Object::keepReference(reinterpret_cast<SbkObject*>(pyParent.object()), retrieveObjectName(pyParent).data(), pyChild, true);
return;
}
for (int i=0, i_max=other->count(); i < i_max; i++) {
QLayoutItem* item = other->itemAt(i);
if (PyErr_Occurred() || !item)
return;
addLayoutOwnership(layout, item);
}
Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QLayout*](layout));
Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QLayout*](other));
Shiboken::Object::setParent(pyParent, pyChild);
}
inline void addLayoutOwnership(QLayout* layout, QLayoutItem* item)
{
if (!item)
return;
QWidget* w = item->widget();
if (w)
addLayoutOwnership(layout, w);
else {
QLayout* l = item->layout();
if (l)
addLayoutOwnership(layout, l);
}
Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QLayout*](layout));
Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QLayoutItem*](item));
Shiboken::Object::setParent(pyParent, pyChild);
}
static void removeWidgetFromLayout(QLayout* layout, QWidget* widget)
{
QWidget* parent = widget->parentWidget();
if (!parent) {
//remove reference on layout
Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](layout));
Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QWidget*](widget));
Shiboken::Object::removeReference(reinterpret_cast<SbkObject*>(pyParent.object()), retrieveObjectName(pyParent).data(), pyChild);
} else {
//give the ownership to parent
Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](parent));
Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QWidget*](widget));
Shiboken::Object::setParent(pyParent, pyChild);
}
}
inline void removeLayoutOwnership(QLayout* layout, QLayoutItem* item)
{
QWidget* w = item->widget();
if (w)
removeWidgetFromLayout(layout, w);
else {
QLayout* l = item->layout();
if (l)
removeLayoutOwnership(layout, l);
}
Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QLayoutItem*](item));
Shiboken::Object::invalidate(pyChild);
Shiboken::Object::setParent(0, pyChild);
}
inline void removeLayoutOwnership(QLayout* layout, QWidget* widget)
{
if (!widget)
return;
for (int i=0, i_max=layout->count(); i < i_max; i++) {
QLayoutItem* item = layout->itemAt(i);
if (PyErr_Occurred() || !item)
return;
if (item->widget() == widget)
removeLayoutOwnership(layout, item);
}
}

View file

@ -1,71 +0,0 @@
#ifndef QLAYOUT_HELP_FUNCTIONS
#define QLAYOUT_HELP_FUNCTIONS
void addLayoutOwnership(QLayout* layout, QLayoutItem* item);
inline QByteArray retrieveObjectName(PyObject* obj)
{
Shiboken::AutoDecRef objName(PyObject_Str(obj));
return PyString_AsString(objName);
}
inline void addLayoutOwnership(QLayout* layout, QWidget* widget)
{
//transfer ownership to parent widget
QWidget* parent = layout->parentWidget();
if (!parent) {
//keep the reference while the layout is orphan
Shiboken::AutoDecRef pyParent(Shiboken::Converter<QWidget*>::toPython(layout));
Shiboken::AutoDecRef pyChild(Shiboken::Converter<QWidget*>::toPython(widget));
Shiboken::Object::keepReference(reinterpret_cast<SbkObject*>(pyParent.object()), retrieveObjectName(pyParent).data(), pyChild, true);
} else {
Shiboken::AutoDecRef pyParent(Shiboken::Converter<QWidget*>::toPython(parent));
Shiboken::AutoDecRef pyChild(Shiboken::Converter<QWidget*>::toPython(widget));
Shiboken::Object::setParent(pyParent, pyChild);
}
}
inline void addLayoutOwnership(QLayout* layout, QLayout* other)
{
//transfer all children widgets from other to layout parent widget
QWidget* parent = layout->parentWidget();
if (!parent) {
//keep the reference while the layout is orphan
Shiboken::AutoDecRef pyParent(Shiboken::Converter<QLayout*>::toPython(layout));
Shiboken::AutoDecRef pyChild(Shiboken::Converter<QLayout*>::toPython(other));
Shiboken::Object::keepReference(reinterpret_cast<SbkObject*>(pyParent.object()), retrieveObjectName(pyParent).data(), pyChild, true);
return;
}
for (int i=0, i_max=other->count(); i < i_max; i++) {
QLayoutItem* item = other->itemAt(i);
if (PyErr_Occurred() || !item)
return;
addLayoutOwnership(layout, item);
}
Shiboken::AutoDecRef pyParent(Shiboken::Converter<QLayout*>::toPython(layout));
Shiboken::AutoDecRef pyChild(Shiboken::Converter<QLayout*>::toPython(other));
Shiboken::Object::setParent(pyParent, pyChild);
}
inline void addLayoutOwnership(QLayout* layout, QLayoutItem* item)
{
QWidget* w = item->widget();
if (w)
addLayoutOwnership(layout, w);
else {
QLayout* l = item->layout();
if (l)
addLayoutOwnership(layout, l);
}
Shiboken::AutoDecRef pyParent(Shiboken::Converter<QLayout*>::toPython(layout));
Shiboken::AutoDecRef pyChild(Shiboken::Converter<QLayoutItem*>::toPython(item));
Shiboken::Object::setParent(pyParent, pyChild);
}
#endif

View file

@ -1,4 +1,3 @@
inline PyObject* addActionWithPyObject(QMenu* self, const QIcon& icon, const QString& text, PyObject* callback, const QKeySequence& shortcut) inline PyObject* addActionWithPyObject(QMenu* self, const QIcon& icon, const QString& text, PyObject* callback, const QKeySequence& shortcut)
{ {
QAction* act = new QAction(text, self); QAction* act = new QAction(text, self);
@ -11,7 +10,7 @@ inline PyObject* addActionWithPyObject(QMenu* self, const QIcon& icon, const QSt
self->addAction(act); self->addAction(act);
PyObject* pyAct = Shiboken::Converter<QAction*>::toPython(act); PyObject* pyAct = %CONVERTTOPYTHON[QAction*](act);
Shiboken::AutoDecRef result(PyObject_CallMethod(pyAct, "connect", "OsO", pyAct, SIGNAL(triggered()), callback)); Shiboken::AutoDecRef result(PyObject_CallMethod(pyAct, "connect", "OsO", pyAct, SIGNAL(triggered()), callback));
if (result.isNull()) { if (result.isNull()) {
Py_DECREF(pyAct); Py_DECREF(pyAct);

View file

@ -5,7 +5,7 @@ addActionWithPyObject(QMenuBar* self, const QString& text, PyObject* callback)
self->addAction(act); self->addAction(act);
PyObject* pyAct = Shiboken::Converter<QAction*>::toPython(act); PyObject* pyAct = %CONVERTTOPYTHON[QAction*](act);
PyObject* result = PyObject_CallMethod(pyAct, "connect", "OsO", pyAct, PyObject* result = PyObject_CallMethod(pyAct, "connect", "OsO", pyAct,
SIGNAL(triggered(bool)), callback); SIGNAL(triggered(bool)), callback);

View file

@ -1,4 +1,10 @@
// Init qApp macro to None. // Init qApp macro to None.
if (qApp) {
PyObject* pyApp = %CONVERTTOPYTHON[QApplication*](qApp);
Py_INCREF(pyApp);
PyModule_AddObject(module, "qApp", pyApp);
} else {
Py_INCREF(Py_None); Py_INCREF(Py_None);
PyModule_AddObject(module, "qApp", Py_None); PyModule_AddObject(module, "qApp", Py_None);
}
moduleQtGui = module; moduleQtGui = module;

View file

@ -1,7 +1,7 @@
static QString retrieveObjectName(PyObject *obj) static QString retrieveObjectName(PyObject *obj)
{ {
Shiboken::AutoDecRef objName(PyObject_Str(obj)); Shiboken::AutoDecRef objName(PyObject_Str(obj));
return QString(PyString_AsString(objName)); return QString(Shiboken::String::toCString(objName));
} }
@ -10,7 +10,7 @@ static QString retrieveObjectName(PyObject *obj)
**/ **/
static inline void qwidgetReparentLayout(QWidget *parent, QLayout *layout) static inline void qwidgetReparentLayout(QWidget *parent, QLayout *layout)
{ {
Shiboken::AutoDecRef pyParent(Shiboken::Converter<QWidget*>::toPython(parent)); Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](parent));
for (int i=0; i < layout->count(); i++) { for (int i=0; i < layout->count(); i++) {
QLayoutItem* item = layout->itemAt(i); QLayoutItem* item = layout->itemAt(i);
@ -21,7 +21,7 @@ static inline void qwidgetReparentLayout(QWidget *parent, QLayout *layout)
if (w) { if (w) {
QWidget* pw = w->parentWidget(); QWidget* pw = w->parentWidget();
if (pw != parent) { if (pw != parent) {
Shiboken::AutoDecRef pyChild(Shiboken::Converter<QWidget*>::toPython(w)); Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QWidget*](w));
Shiboken::Object::setParent(pyParent, pyChild); Shiboken::Object::setParent(pyParent, pyChild);
} }
} else { } else {
@ -31,7 +31,7 @@ static inline void qwidgetReparentLayout(QWidget *parent, QLayout *layout)
} }
} }
Shiboken::AutoDecRef pyChild(Shiboken::Converter<QLayout*>::toPython(layout)); Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QLayout*](layout));
Shiboken::Object::setParent(pyParent, pyChild); Shiboken::Object::setParent(pyParent, pyChild);
//remove previous references //remove previous references
Shiboken::Object::keepReference(reinterpret_cast<SbkObject*>(pyChild.object()), qPrintable(retrieveObjectName(pyChild)), Py_None); Shiboken::Object::keepReference(reinterpret_cast<SbkObject*>(pyChild.object()), qPrintable(retrieveObjectName(pyChild)), Py_None);
@ -46,7 +46,7 @@ static inline void qwidgetSetLayout(QWidget *self, QLayout *layout)
if (oldParent && oldParent != self) { if (oldParent && oldParent != self) {
if (oldParent->isWidgetType()) { if (oldParent->isWidgetType()) {
// remove old parent policy // remove old parent policy
Shiboken::AutoDecRef pyLayout(Shiboken::Converter<QLayout*>::toPython(layout)); Shiboken::AutoDecRef pyLayout(%CONVERTTOPYTHON[QLayout*](layout));
Shiboken::Object::setParent(Py_None, pyLayout); Shiboken::Object::setParent(Py_None, pyLayout);
} else { } else {
PyErr_Format(PyExc_RuntimeError, "QWidget::setLayout: Attempting to set QLayout \"%s\" on %s \"%s\", when the QLayout already has a parent", PyErr_Format(PyExc_RuntimeError, "QWidget::setLayout: Attempting to set QLayout \"%s\" on %s \"%s\", when the QLayout already has a parent",

View file

@ -1,32 +0,0 @@
namespace Shiboken {
template <>
struct Converter<WId>
{
static bool checkType(PyObject* pyObj)
{
return false;
}
static bool isConvertible(PyObject* pyobj)
{
return PyCObject_Check(pyobj);
}
static inline PyObject* toPython(void* cppobj)
{
// not supported
Q_ASSERT(true);
return 0;
}
static PyObject* toPython(WId cppobj)
{
return PyCObject_FromVoidPtr(cppobj, 0);
}
static WId toCpp(PyObject* pyobj)
{
return (WId) PyCObject_AsVoidPtr(pyobj);
}
};
}

View file

@ -1,49 +0,0 @@
namespace Shiboken {
inline bool Converter<QPixmap>::checkType(PyObject* pyObj)
{
return ValueTypeConverter<QPixmap>::checkType(pyObj);
}
inline bool Converter<QPixmap>::isConvertible(PyObject* pyobj)
{
if (ValueTypeConverter<QPixmap>::isConvertible(pyobj))
return true;
SbkObjectType* shiboType = reinterpret_cast<SbkObjectType*>(SbkType<QPixmap>());
bool isVariant = Shiboken::Converter<QVariant>::checkType(pyobj);
if (isVariant) {
QVariant var(Shiboken::Converter<QVariant>::toCpp(pyobj));
return var.type() == QVariant::Pixmap;
} else if (Shiboken::Converter<QSize>::checkType(pyobj) || Shiboken::Converter<QString>::checkType(pyobj)) {
return true;
} else {
return Shiboken::ObjectType::isExternalConvertible(shiboType, pyobj);
}
return false;
}
inline QPixmap Converter<QPixmap>::toCpp(PyObject* pyobj)
{
SbkObjectType* shiboType = reinterpret_cast<SbkObjectType*>(SbkType<QPixmap>());
bool isVariant = Converter<QVariant>::checkType(pyobj);
if (isVariant) {
QVariant var(Converter<QVariant>::toCpp(pyobj));
return var.value<QPixmap>();
} else if (Converter<QSize>::checkType(pyobj)) {
return QPixmap(Shiboken::Converter<QSize >::toCpp(pyobj));
} else if (Converter<QString>::checkType(pyobj)) {
return QPixmap(Shiboken::Converter<QString >::toCpp(pyobj));
} else if (Shiboken::ObjectType::isExternalConvertible(shiboType, pyobj) && Shiboken::ObjectType::hasExternalCppConversions(shiboType)) {
QPixmap* cptr = reinterpret_cast<QPixmap*>(Shiboken::ObjectType::callExternalCppConversion(shiboType, pyobj));
std::auto_ptr<QPixmap> cptr_auto_ptr(cptr);
return *cptr;
}
return *Converter<QPixmap*>::toCpp(pyobj);
}
inline PyObject* Converter<QPixmap>::toPython(const QPixmap& cppObj)
{
return ValueTypeConverter<QPixmap>::toPython(cppObj);
}
}

File diff suppressed because it is too large Load diff

View file

@ -19,9 +19,31 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
--> -->
<typesystem package="PySide.QtGui"> <typesystem package="PySide.QtGui">
<primitive-type name="Qt::HANDLE" target-lang-api-name="PyObject" />
<primitive-type name="WId" target-lang-api-name="PyObject"> <primitive-type name="WId" target-lang-api-name="PyObject">
<conversion-rule file="glue/wid_conversions.h"/> <conversion-rule>
<native-to-target>
#ifdef IS_PY3K
return PyCapsule_New(%in, 0, 0);
#else
return PyCObject_FromVoidPtr(%in, 0);
#endif
</native-to-target>
<target-to-native>
<add-conversion type="PyNone">
%out = 0;
</add-conversion>
<add-conversion check="checkPyCapsuleOrPyCObject(%in)" type="PyObject">
#ifdef IS_PY3K
%out = (%OUTTYPE)PyCapsule_GetPointer(%in, 0);
#else
%out = (%OUTTYPE)PyCObject_AsVoidPtr(%in);
#endif
</add-conversion>
</target-to-native>
</conversion-rule>
</primitive-type> </primitive-type>
<inject-code class="native" position="beginning">
<insert-template name="checkPyCapsuleOrPyCObject_func"/>
</inject-code>
<enum-type name="QPixmap::HBitmapFormat" /> <enum-type name="QPixmap::HBitmapFormat" />
</typesystem> </typesystem>

View file

@ -23,10 +23,21 @@
<rejection class="" function-name="qt_x11_getX11InfoForWindow"/> <rejection class="" function-name="qt_x11_getX11InfoForWindow"/>
<rejection class="QX11Info" field-name="x11data"/> <rejection class="QX11Info" field-name="x11data"/>
<value-type name="QX11Info"> <value-type name="QX11Info">
<!-- ### Both methods return void pointers, for which particular cases no handling was discussed. --> <add-function signature="display()" return-type="unsigned long" static="yes">
<modify-function signature="visual()const" remove="all"/> <inject-code>
<modify-function signature="appVisual(int)" remove="all"/> %PYARG_0 = PyLong_FromVoidPtr(%TYPE::%FUNCTION_NAME());
<!-- ### --> </inject-code>
</add-function>
<modify-function signature="visual()const">
<inject-code>
%PYARG_0 = PyLong_FromVoidPtr(%CPPSELF.%FUNCTION_NAME());
</inject-code>
</modify-function>
<modify-function signature="appVisual(int)">
<inject-code>
%PYARG_0 = PyLong_FromVoidPtr(%CPPSELF.%FUNCTION_NAME());
</inject-code>
</modify-function>
</value-type> </value-type>
<object-type name="QX11EmbedContainer"> <object-type name="QX11EmbedContainer">
<enum-type name="Error"/> <enum-type name="Error"/>

View file

@ -15,7 +15,7 @@ set(QtHelp_SRC
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtHelp/qthelp_module_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtHelp/qthelp_module_wrapper.cpp
) )
set(QtHelp_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtHelp_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtHelp_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtHelp_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtHelp_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtHelp_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${QT_QTCORE_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR}
${QT_QTGUI_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR}

View file

@ -11,7 +11,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtMaemo5/qmaemo5valuebutton_wrapper.
${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtMaemo5/qtmaemo5_module_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtMaemo5/qtmaemo5_module_wrapper.cpp
) )
set(QtMaemo5_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtMaemo5_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtMaemo5_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtMaemo5_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
# QT_QTMAEMO5_* variables are not defined by CMake # QT_QTMAEMO5_* variables are not defined by CMake
if(NOT QT_QTMAEMO5_INCLUDE_DIR) if(NOT QT_QTMAEMO5_INCLUDE_DIR)

View file

@ -17,7 +17,7 @@ set(QtMultimedia_SRC
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtMultimedia/qvideoframe_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtMultimedia/qvideoframe_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtMultimedia/qtmultimedia_module_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtMultimedia/qtmultimedia_module_wrapper.cpp
) )
set(QtMultimedia_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtMultimedia_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtMultimedia_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtMultimedia_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtMultimedia/ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtMultimedia/

View file

@ -37,6 +37,8 @@
<object-type name="QAbstractVideoBuffer"> <object-type name="QAbstractVideoBuffer">
<enum-type name="HandleType"/> <enum-type name="HandleType"/>
<enum-type name="MapMode"/> <enum-type name="MapMode"/>
<modify-function signature="map(QAbstractVideoBuffer::MapMode, int*, int*)" remove="all"/>
<!-- TODO: discuss a way to have this working with the virtual method.
<modify-function signature="map(QAbstractVideoBuffer::MapMode, int*, int*)"> <modify-function signature="map(QAbstractVideoBuffer::MapMode, int*, int*)">
<modify-argument index="0"> <modify-argument index="0">
<replace-type modified-type="PyObject"/> <replace-type modified-type="PyObject"/>
@ -51,6 +53,7 @@
<insert-template name="fix_arg,int*,int*"/> <insert-template name="fix_arg,int*,int*"/>
</inject-code> </inject-code>
</modify-function> </modify-function>
-->
</object-type> </object-type>
<object-type name="QAbstractVideoSurface"> <object-type name="QAbstractVideoSurface">
<enum-type name="Error"/> <enum-type name="Error"/>

View file

@ -56,7 +56,7 @@ ${QtNetwork_47_SRC}
${QtNetwork_OPTIONAL_SRC} ${QtNetwork_OPTIONAL_SRC}
) )
set(QtNetwork_typesystem_path "${QtCore_SOURCE_DIR}") set(QtNetwork_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}")
set(QtNetwork_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtNetwork_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtNetwork/ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtNetwork/
${QT_INCLUDE_DIR} ${QT_INCLUDE_DIR}

View file

@ -1,6 +0,0 @@
PySide::AutoArrayPointer<char> data(%ARGUMENT_NAMES);
QHostAddress ha;
quint16 port;
%RETURN_TYPE retval = %CPPSELF.%FUNCTION_NAME(data, %ARGUMENT_NAMES, &ha, &port);
%PYARG_0 = Shiboken::makeTuple(QByteArray(data, retval), ha, port);

View file

@ -53,10 +53,6 @@
<enum-type name="State"/> <enum-type name="State"/>
<enum-type name="TransferMode"/> <enum-type name="TransferMode"/>
<enum-type name="TransferType"/> <enum-type name="TransferType"/>
<extra-includes>
<include file-name="autoarraypointer.h" location="global"/>
</extra-includes>
<modify-function signature="connectToHost(const QString&amp;, quint16)" allow-thread="yes" /> <modify-function signature="connectToHost(const QString&amp;, quint16)" allow-thread="yes" />
<modify-function signature="login(const QString&amp;, const QString&amp;)" allow-thread="yes" /> <modify-function signature="login(const QString&amp;, const QString&amp;)" allow-thread="yes" />
<modify-function signature="close()" allow-thread="yes" /> <modify-function signature="close()" allow-thread="yes" />
@ -88,10 +84,6 @@
<enum-type name="ConnectionMode"/> <enum-type name="ConnectionMode"/>
<enum-type name="Error"/> <enum-type name="Error"/>
<enum-type name="State"/> <enum-type name="State"/>
<extra-includes>
<include file-name="autoarraypointer.h" location="global"/>
</extra-includes>
<modify-function signature="readAll()" allow-thread="yes"/> <modify-function signature="readAll()" allow-thread="yes"/>
<modify-function signature="read(char*, qint64)" allow-thread="yes"> <modify-function signature="read(char*, qint64)" allow-thread="yes">
<modify-argument index="return"> <modify-argument index="return">
@ -129,10 +121,6 @@
<object-type name="QTcpSocket"/> <object-type name="QTcpSocket"/>
<object-type name="QUdpSocket"> <object-type name="QUdpSocket">
<enum-type name="BindFlag" flags="BindMode"/> <enum-type name="BindFlag" flags="BindMode"/>
<extra-includes>
<include file-name="autoarraypointer.h" location="global"/>
</extra-includes>
<modify-function signature="readDatagram(char*, qint64, QHostAddress*, quint16*)" allow-thread="yes"> <modify-function signature="readDatagram(char*, qint64, QHostAddress*, quint16*)" allow-thread="yes">
<modify-argument index="1"> <modify-argument index="1">
<remove-argument/> <remove-argument/>
@ -148,7 +136,19 @@
<modify-argument index="return"> <modify-argument index="return">
<replace-type modified-type="(data, address, port)"/> <replace-type modified-type="(data, address, port)"/>
</modify-argument> </modify-argument>
<inject-code class="target" position="beginning" file="glue/qudpsocket_read_datagram_glue.cpp"/> <inject-code class="target" position="beginning">
Shiboken::AutoArrayPointer&lt;char&gt; data(%ARGUMENT_NAMES);
QHostAddress ha;
quint16 port;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval = %CPPSELF.%FUNCTION_NAME(data, %ARGUMENT_NAMES, &amp;ha, &amp;port);
%END_ALLOW_THREADS
QByteArray ba(data, retval);
%PYARG_0 = PyTuple_New(3);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[QByteArray](ba));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QHostAddress](ha));
PyTuple_SET_ITEM(%PYARG_0, 2, %CONVERTTOPYTHON[quint16](port));
</inject-code>
</modify-function> </modify-function>
<modify-function signature="writeDatagram(const QByteArray&amp;, const QHostAddress&amp;, quint16)" allow-thread="yes"/> <modify-function signature="writeDatagram(const QByteArray&amp;, const QHostAddress&amp;, quint16)" allow-thread="yes"/>
<!-- ### writeDatagram(QByteArray, ...) does the trick --> <!-- ### writeDatagram(QByteArray, ...) does the trick -->
@ -185,6 +185,9 @@
<enum-type name="Operation"/> <enum-type name="Operation"/>
<modify-function signature="createRequest(QNetworkAccessManager::Operation, const QNetworkRequest&amp;, QIODevice *)"> <modify-function signature="createRequest(QNetworkAccessManager::Operation, const QNetworkRequest&amp;, QIODevice *)">
<modify-argument index="3" invalidate-after-use="yes"/> <modify-argument index="3" invalidate-after-use="yes"/>
<modify-argument index="return">
<define-ownership class="target" owner="default"/>
</modify-argument>
</modify-function> </modify-function>
<modify-function signature="get(const QNetworkRequest&amp;)" allow-thread="yes"/> <modify-function signature="get(const QNetworkRequest&amp;)" allow-thread="yes"/>
<modify-function signature="post(const QNetworkRequest &amp;, QIODevice *)" allow-thread="yes"/> <modify-function signature="post(const QNetworkRequest &amp;, QIODevice *)" allow-thread="yes"/>
@ -208,6 +211,7 @@
<!-- ### QHostAddress(QIPv6Address) does this --> <!-- ### QHostAddress(QIPv6Address) does this -->
<modify-function signature="QHostAddress(quint8*)" remove="all" /> <modify-function signature="QHostAddress(quint8*)" remove="all" />
<!-- ### --> <!-- ### -->
<modify-function signature="setAddress(quint8*)" remove="all" />
</value-type> </value-type>
<value-type name="QHostInfo"> <value-type name="QHostInfo">
@ -251,11 +255,11 @@
PyErr_SetString(PyExc_IndexError, "index out of bounds"); PyErr_SetString(PyExc_IndexError, "index out of bounds");
return 0; return 0;
} }
if (_i &lt; 0) if (_i &lt; 0)
_i = 16 - qAbs(_i); _i = 16 - qAbs(_i);
return %CONVERTTOPYTHON[uint](%CPPSELF->c[_i]); uint item = %CPPSELF.c[_i];
return %CONVERTTOPYTHON[uint](item);
</inject-code> </inject-code>
</add-function> </add-function>
<add-function signature="__len__"> <add-function signature="__len__">
@ -269,12 +273,10 @@
PyErr_SetString(PyExc_IndexError, "index out of bounds"); PyErr_SetString(PyExc_IndexError, "index out of bounds");
return -1; return -1;
} }
if (_i &lt; 0) if (_i &lt; 0)
_i = 16 - qAbs(_i); _i = 16 - qAbs(_i);
quint8 item = %CONVERTTOCPP[quint8](_value);
%CPPSELF->c[_i] = %CONVERTTOCPP[quint8](_value); %CPPSELF.c[_i] = item;
return 0; return 0;
</inject-code> </inject-code>
</add-function> </add-function>

View file

@ -32,7 +32,7 @@ set(QtOpenGL_SRC
${QtOpenGL_47_SRC} ${QtOpenGL_47_SRC}
) )
set(QtOpenGL_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtOpenGL_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtOpenGL_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtOpenGL_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtOpenGL_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtOpenGL_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${QT_QTCORE_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR}
${QT_QTGUI_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR}

View file

@ -21,6 +21,21 @@
<typesystem package="PySide.QtOpenGL"> <typesystem package="PySide.QtOpenGL">
<load-typesystem name="typesystem_gui.xml" generate="no" /> <load-typesystem name="typesystem_gui.xml" generate="no" />
<primitive-type name="GLbitfield"/>
<primitive-type name="GLboolean"/>
<primitive-type name="GLbyte"/>
<primitive-type name="GLclampd"/>
<primitive-type name="GLclampf"/>
<primitive-type name="GLdouble"/>
<primitive-type name="GLenum"/>
<primitive-type name="GLfloat"/>
<primitive-type name="GLint"/>
<primitive-type name="GLshort"/>
<primitive-type name="GLsizei"/>
<primitive-type name="GLubyte"/>
<primitive-type name="GLuint"/>
<primitive-type name="GLushort"/>
<rejection class="QGLColormap::QGLColormapData"/> <rejection class="QGLColormap::QGLColormapData"/>
<rejection class="QGLContext" field-name="currentCtx"/> <rejection class="QGLContext" field-name="currentCtx"/>
@ -91,14 +106,568 @@
<object-type name="QGLShader" since="4.6"> <object-type name="QGLShader" since="4.6">
<enum-type name="ShaderTypeBit" flags="ShaderType"/> <enum-type name="ShaderTypeBit" flags="ShaderType"/>
</object-type> </object-type>
<template name="callArrayFunction">
int _size = PySequence_Size(%PYARG_2);
if (_size) {
$ATTR_TYPE *_list = new $ATTR_TYPE[_size];
if (_size) {
Shiboken::AutoDecRef fast(PySequence_Fast(%PYARG_2, "Failed to parse sequence with type %VECTOR_TYPE."));
for(int i=0; i &lt; _size; i++) {
PyObject* pv = PySequence_Fast_GET_ITEM(fast.object(), i);
_list[i] = %CONVERTTOCPP[$ATTR_TYPE](pv);
}
}
%CPPSELF.%FUNCTION_NAME(%1, _list, $ARG0);
delete[] _list;
} else {
%CPPSELF.%FUNCTION_NAME(%1, ($ATTR_TYPE*)NULL, $ARG1);
}
</template>
<object-type name="QGLShaderProgram" since="4.6"> <object-type name="QGLShaderProgram" since="4.6">
<!-- setAttributeArray -->
<modify-function signature="setAttributeArray(int, const QVector2D*, int)" rename="setAttributeArray2D">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="%3" />
<replace from="$ARG1" to="%3" />
<replace from="$ATTR_TYPE" to="QVector2D"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setAttributeArray(int, const QVector3D*, int)" rename="setAttributeArray3D">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="%3" />
<replace from="$ARG1" to="%3" />
<replace from="$ATTR_TYPE" to="QVector3D"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setAttributeArray(int, const QVector4D*, int)" rename="setAttributeArray4D">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="%3" />
<replace from="$ARG1" to="%3" />
<replace from="$ATTR_TYPE" to="QVector4D"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setAttributeArray(const char*, const QVector2D*, int)" rename="setAttributeArray2D">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="%3" />
<replace from="$ARG1" to="%3" />
<replace from="$ATTR_TYPE" to="QVector2D"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setAttributeArray(const char*, const QVector3D*, int)" rename="setAttributeArray3D">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="%3" />
<replace from="$ARG1" to="%3" />
<replace from="$ATTR_TYPE" to="QVector3D"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setAttributeArray(const char*, const QVector4D*, int)" rename="setAttributeArray4D">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="%3" />
<replace from="$ARG1" to="%3" />
<replace from="$ATTR_TYPE" to="QVector4D"/>
</insert-template>
</inject-code>
</modify-function>
<!-- setUniformValueArray -->
<modify-function signature="setUniformValueArray(int, const GLint*, int)" rename="setUniformValueArrayInt">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="GLint"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(int, const GLuint*, int)" rename="setUniformValueArrayUint">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="GLuint"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(int, const QVector2D*, int)" rename="setUniformValueArray2D">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QVector2D"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(int, const QVector3D*, int)" rename="setUniformValueArray3D">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QVector3D"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(int, const QVector4D*, int)" rename="setUniformValueArray4D">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QVector4D"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(int, const QMatrix2x2*, int)" rename="setUniformValueArray2x2">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix2x2"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(int, const QMatrix2x3*, int)" rename="setUniformValueArray2x3">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix2x3"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(int, const QMatrix2x4*, int)" rename="setUniformValueArray2x4">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix2x4"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(int, const QMatrix3x2*, int)" rename="setUniformValueArray3x2">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix3x2"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(int, const QMatrix3x3*, int)" rename="setUniformValueArray3x3">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix3x3"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(int, const QMatrix3x4*, int)" rename="setUniformValueArray3x4">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix3x4"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(int, const QMatrix4x2*, int)" rename="setUniformValueArray4x2">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix4x2"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(int, const QMatrix4x3*, int)" rename="setUniformValueArray4x3">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix4x3"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(int, const QMatrix4x4*, int)" rename="setUniformValueArray4x4">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix4x4"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(const char*, const GLint*, int)" rename="setUniformValueArrayInt">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="GLint"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(const char*, const GLuint*, int)" rename="setUniformValueArrayUint">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="GLuint"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(const char*, const QVector2D*, int)" rename="setUniformValueArray2D">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QVector2D"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(const char*, const QVector3D*, int)" rename="setUniformValueArray3D">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QVector3D"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(const char*, const QVector4D*, int)" rename="setUniformValueArray4D">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QVector4D"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(const char*, const QMatrix2x2*, int)" rename="setUniformValueArray2x2">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix2x2"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(const char*, const QMatrix2x3*, int)" rename="setUniformValueArray2x3">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix2x3"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(const char*, const QMatrix2x4*, int)" rename="setUniformValueArray2x4">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix2x4"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(const char*, const QMatrix3x2*, int)" rename="setUniformValueArray3x2">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix3x2"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(const char*, const QMatrix3x3*, int)" rename="setUniformValueArray3x3">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix3x3"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(const char*, const QMatrix3x4*, int)" rename="setUniformValueArray3x4">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix3x4"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(const char*, const QMatrix4x2*, int)" rename="setUniformValueArray4x2">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix4x2"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(const char*, const QMatrix4x3*, int)" rename="setUniformValueArray4x3">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix4x3"/>
</insert-template>
</inject-code>
</modify-function>
<modify-function signature="setUniformValueArray(const char*, const QMatrix4x4*, int)" rename="setUniformValueArray4x4">
<modify-argument index="2" >
<replace-type modified-type="PySequence" />
</modify-argument>
<modify-argument index="3">
<remove-argument />
</modify-argument>
<inject-code>
<insert-template name="callArrayFunction">
<replace from="$ARG0" to="_size" />
<replace from="$ARG1" to="0" />
<replace from="$ATTR_TYPE" to="QMatrix4x4"/>
</insert-template>
</inject-code>
</modify-function>
<!-- ### TODO: must evaluate if anything other than removal should be done. -->
<modify-function signature="setAttributeArray(int,const GLfloat*,int,int)" remove="all" />
<modify-function signature="setAttributeArray(const char*,const GLfloat*,int,int)" remove="all" />
<modify-function signature="setUniformValueArray(int,const GLfloat*,int,int)" remove="all" />
<modify-function signature="setUniformValueArray(const char*,const GLfloat*,int,int)" remove="all" />
<!-- ### -->
<!-- ### Use QMatrixZxY overloads --> <!-- ### Use QMatrixZxY overloads -->
<modify-function signature="setUniformValue(int,Array)" remove="all" /> <modify-function signature="setUniformValue(int,Array)" remove="all" />
<modify-function signature="setUniformValue(const char*,Array)" remove="all" /> <modify-function signature="setUniformValue(const char*,Array)" remove="all" />
<modify-function signature="setAttributeValue(int,const float*,int,int)" remove="all" /> <modify-function signature="setAttributeValue(int,const GLfloat*,int,int)" remove="all" />
<modify-function signature="setAttributeValue(const char*,const float*,int,int)" remove="all" /> <modify-function signature="setAttributeValue(const char*,const GLfloat*,int,int)" remove="all" />
<modify-function signature="setAttributeArray(int, uint, const void*, int, int)" remove="all" since="4.7" /> <modify-function signature="setAttributeArray(int, GLenum, const void*, int, int)" remove="all" since="4.7" />
<modify-function signature="setAttributeArray(const char*, uint, const void*, int, int)" remove="all" since="4.7" /> <modify-function signature="setAttributeArray(const char*, GLenum, const void*, int, int)" remove="all" since="4.7" />
<!-- ### --> <!-- ### -->
</object-type> </object-type>
@ -109,15 +678,13 @@
<enum-type name="UsagePattern" since="4.7"/> <enum-type name="UsagePattern" since="4.7"/>
<modify-function signature="allocate(const void*, int)"> <modify-function signature="allocate(const void*, int)">
<modify-argument index="1"> <modify-argument index="1">
<replace-type modified-type="const QByteArray&amp;"/> <replace-type modified-type="QByteArray&amp;"/>
</modify-argument> </modify-argument>
<modify-argument index="2"> <modify-argument index="2">
<replace-default-expression with="-1"/> <replace-default-expression with="-1"/>
</modify-argument> </modify-argument>
<inject-code class="target" position="beginning"> <inject-code class="target" position="beginning">
int size = %2; int size = (%2 &lt; 0) ? %1.size() : %2;
if (size &lt; 0)
size = %1.size();
%CPPSELF.allocate((const void*) %1.data(), size); %CPPSELF.allocate((const void*) %1.data(), size);
</inject-code> </inject-code>
</modify-function> </modify-function>
@ -130,9 +697,9 @@
Py_INCREF(Py_None); Py_INCREF(Py_None);
%PYARG_0 = Py_None; %PYARG_0 = Py_None;
} else if (%1 == QGLBuffer::ReadOnly) { } else if (%1 == QGLBuffer::ReadOnly) {
%PYARG_0 = PyBuffer_FromMemory(data, dataSize); %PYARG_0 = Shiboken::Buffer::newObject(data, dataSize, Shiboken::Buffer::ReadOnly);
} else { } else {
%PYARG_0 = PyBuffer_FromReadWriteMemory(data, dataSize); %PYARG_0 = Shiboken::Buffer::newObject(data, dataSize, Shiboken::Buffer::ReadWrite);
} }
</inject-code> </inject-code>
</modify-function> </modify-function>
@ -149,21 +716,21 @@
QByteArray ret; QByteArray ret;
if (result) if (result)
ret.append((const char*)data, %3); ret.append((const char*)data, %3);
%PYARG_0 = Shiboken::makeTuple(result, ret); %PYARG_0 = PyTuple_New(2);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[bool](result));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QByteArray](ret));
delete[] data; delete[] data;
</inject-code> </inject-code>
</modify-function> </modify-function>
<modify-function signature="write(int, const void*, int)"> <modify-function signature="write(int, const void*, int)">
<modify-argument index="2"> <modify-argument index="2">
<replace-type modified-type="const QByteArray&amp;"/> <replace-type modified-type="QByteArray&amp;"/>
</modify-argument> </modify-argument>
<modify-argument index="3"> <modify-argument index="3">
<replace-default-expression with="-1"/> <replace-default-expression with="-1"/>
</modify-argument> </modify-argument>
<inject-code class="target" position="beginning"> <inject-code class="target" position="beginning">
int size = %3; int size = (%3 &lt; 0) ? %2.size() : %3;
if (size &lt; 0)
size = %2.size();
%CPPSELF.write(%1, (const void*) %2.data(), size); %CPPSELF.write(%1, (const void*) %2.data(), size);
</inject-code> </inject-code>
</modify-function> </modify-function>

View file

@ -1,9 +1,9 @@
project(QtScript) project(QtScript)
if (${QT_VERSION_MAJOR} EQUAL 4 AND ${QT_VERSION_MINOR} LESS 6) if (${QT_VERSION_MAJOR} EQUAL 4 AND ${QT_VERSION_MINOR} LESS 7)
set (QtCore_46_SRC ) set (QtScript_47_SRC )
else() else()
set(QtScript_46_SRC set(QtScript_47_SRC
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript/qscriptprogram_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript/qscriptprogram_wrapper.cpp
) )
endif() endif()
@ -22,10 +22,10 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript/qscriptextensionplugin_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript/qscriptstring_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript/qscriptstring_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript/qscriptvalue_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript/qscriptvalue_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript/qscriptvalueiterator_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript/qscriptvalueiterator_wrapper.cpp
${QtScript_46_SRC} ${QtScript_47_SRC}
) )
set(QtScript_typesystem_path "${QtCore_SOURCE_DIR}") set(QtScript_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}")
set(QtScript_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtScript_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript
${QT_INCLUDE_DIR} ${QT_INCLUDE_DIR}

View file

@ -40,16 +40,76 @@
<object-type name="QScriptEngine"> <object-type name="QScriptEngine">
<enum-type name="QObjectWrapOption" flags="QObjectWrapOptions"/> <enum-type name="QObjectWrapOption" flags="QObjectWrapOptions"/>
<enum-type name="ValueOwnership"/> <enum-type name="ValueOwnership"/>
<!-- Not supported BUG #957-->
<modify-function signature="scriptValueFromQMetaObject()" remove="all" />
</object-type> </object-type>
<object-type name="QScriptExtensionInterface"/> <object-type name="QScriptExtensionInterface"/>
<object-type name="QScriptExtensionPlugin"/> <object-type name="QScriptExtensionPlugin"/>
<value-type name="QScriptProgram" since="4.7"/> <value-type name="QScriptProgram" since="4.7"/>
<value-type name="QScriptString"/> <value-type name="QScriptString">
<modify-function signature="toArrayIndex(bool*)const">
<modify-argument index="1">
<remove-argument/>
</modify-argument>
<inject-code class="target" position="beginning">
<insert-template name="fix_bool*"/>
</inject-code>
</modify-function>
</value-type>
<value-type name="QScriptValue"> <value-type name="QScriptValue">
<enum-type name="PropertyFlag" flags="PropertyFlags"/> <enum-type name="PropertyFlag" flags="PropertyFlags"/>
<enum-type name="ResolveFlag" flags="ResolveFlags"/> <enum-type name="ResolveFlag" flags="ResolveFlags"/>
<enum-type name="SpecialValue"/> <enum-type name="SpecialValue"/>
<add-function signature="__repr__" return-type="PyObject*">
<inject-code class="target" position="beginning">
if (%CPPSELF.isVariant() || %CPPSELF.isString()) {
QString format = QString().sprintf("%s(\"%s\")", ((PyObject*)%PYSELF)->ob_type->tp_name, qPrintable(%CPPSELF.toString()));
%PYARG_0 = Shiboken::String::fromCString(qPrintable(format));
} else {
%PYARG_0 = Shiboken::String::fromCString(
((PyObject* )%PYSELF)->ob_type->tp_name);
}
</inject-code>
</add-function>
<add-function signature="__mgetitem__">
<inject-code>
Shiboken::AutoDecRef key(PyObject_Str(_key));
QVariant res = %CPPSELF.property(Shiboken::String::toCString(key.object())).toVariant();
if (res.isValid()) {
return %CONVERTTOPYTHON[QVariant](res);
} else {
PyObject* errorType = PyInt_Check(_key) ? PyExc_IndexError : PyExc_KeyError;
PyErr_SetString(errorType, "Key not found.");
return 0;
}
</inject-code>
</add-function>
<add-function signature="__iter__()" return-type="PyObject*">
<inject-code>
%PYARG_0 = Shiboken::createWrapper(new QScriptValueIterator(*%CPPSELF), true, true);
</inject-code>
</add-function>
</value-type> </value-type>
<object-type name="QScriptValueIterator"/> <object-type name="QScriptValueIterator">
<add-function signature="__iter__()" return-type="PyObject*">
<inject-code>
<insert-template name="__iter__" />
</inject-code>
</add-function>
<add-function signature="__next__()" return-type="PyObject*">
<inject-code>
if (%CPPSELF.hasNext()) {
%CPPSELF.next();
QString name = %CPPSELF.name();
QVariant value = %CPPSELF.value().toVariant();
%PYARG_0 = PyTuple_New(2);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[QString](name));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QVariant](value));
} else {
PyErr_SetNone(PyExc_StopIteration);
}
</inject-code>
</add-function>
</object-type>
</typesystem> </typesystem>

View file

@ -5,7 +5,7 @@ set(QtScriptTools_SRC
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScriptTools/qscriptenginedebugger_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScriptTools/qscriptenginedebugger_wrapper.cpp
) )
set(QtScriptTools_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtScript_SOURCE_DIR}${PATH_SEP}${QtScriptTools_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtScriptTools_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtScript_SOURCE_DIR}${PATH_SEP}${QtScriptTools_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtScriptTools_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtScriptTools_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${QT_QTCORE_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR}

View file

@ -21,7 +21,7 @@ set(QtSql_SRC
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtSql/qtsql_module_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtSql/qtsql_module_wrapper.cpp
) )
set(QtSql_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtSql_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtSql_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtSql_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtSql_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtSql_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${QT_QTCORE_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR}
${QT_QTGUI_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR}

View file

@ -8,7 +8,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtSvg/qsvgwidget_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtSvg/qtsvg_module_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtSvg/qtsvg_module_wrapper.cpp
) )
set(QtSvg_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtSvg_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtSvg_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtSvg_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtSvg/ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtSvg/
${QT_INCLUDE_DIR} ${QT_INCLUDE_DIR}

View file

@ -14,7 +14,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtTest/qttest_module_wrapper.cpp
${QtTest_46_SRC} ${QtTest_46_SRC}
) )
set(QtTest_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtTest_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtTest_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtTest_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtTest/ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtTest/
${QT_INCLUDE_DIR} ${QT_INCLUDE_DIR}

View file

@ -49,6 +49,7 @@
<rejection class="QTest" function-name="toString&lt;uint>"/> <rejection class="QTest" function-name="toString&lt;uint>"/>
<rejection class="QTest" function-name="toString&lt;ulong>"/> <rejection class="QTest" function-name="toString&lt;ulong>"/>
<rejection class="QTest" function-name="toString&lt;ushort>"/> <rejection class="QTest" function-name="toString&lt;ushort>"/>
<rejection class="QTest" function-name="qt_snprintf"/>
<rejection class="QTest" function-name="compare_helper"/> <rejection class="QTest" function-name="compare_helper"/>
<rejection class="QTest" function-name="touchEvent"/> <rejection class="QTest" function-name="touchEvent"/>

View file

@ -5,7 +5,7 @@ set(QtUiTools_SRC
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtUiTools/quiloader_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtUiTools/quiloader_wrapper.cpp
) )
set(QtUiTools_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtXml_SOURCE_DIR}${PATH_SEP}${QtUiTools_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtUiTools_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtXml_SOURCE_DIR}${PATH_SEP}${QtUiTools_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtUiTools_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtUiTools_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${QT_QTCORE_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR}
${QT_QTGUI_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR}
@ -23,10 +23,10 @@ set(QtUiTools_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
set(QtUiTools_libraries pyside set(QtUiTools_libraries pyside
uiplugin uiplugin
${SHIBOKEN_PYTHON_LIBRARIES} ${SHIBOKEN_PYTHON_LIBRARIES}
${QT_QTCORE_LIBRARY} ${QT_QTUITOOLS_LIBRARY}
${QT_QTGUI_LIBRARY}
${QT_QTDESIGNER_LIBRARY} ${QT_QTDESIGNER_LIBRARY}
${QT_QTUITOOLS_LIBRARY}) ${QT_QTCORE_LIBRARY}
${QT_QTGUI_LIBRARY})
set(QtUiTools_deps QtGui QtXml) set(QtUiTools_deps QtGui QtXml)
create_pyside_module(QtUiTools create_pyside_module(QtUiTools
QtUiTools_include_dirs QtUiTools_include_dirs

View file

@ -33,13 +33,13 @@ inline void registerCustomWidget(PyObject* obj)
if (plugin == 0) { if (plugin == 0) {
foreach(QObject* o, QPluginLoader::staticInstances()) { foreach(QObject* o, QPluginLoader::staticInstances()) {
plugin = qobject_cast<PyCustomWidgets*>(o); plugin = qobject_cast<PyCustomWidgets*>(o);
if (o) if (plugin)
break; break;
} }
} }
if (!plugin) if (!plugin)
qDebug() << "Fail to load uiloader plugin"; qDebug() << "Failed to load uiloader plugin.";
else else
plugin->registerWidgetType(obj); plugin->registerWidgetType(obj);
} }

View file

@ -0,0 +1,52 @@
/*
* Based on code provided by:
* Antonio Valentino <antonio.valentino at tiscali.it>
* Frédéric <frederic.mantegazza at gbiloba.org>
*/
#include <shiboken.h>
#include <QUiLoader>
#include <QFile>
#include <QWidget>
static void createChildrenNameAttributes(PyObject* root, QObject* object)
{
foreach (QObject* child, object->children()) {
const QByteArray name = child->objectName().toLocal8Bit();
if (!name.isEmpty() && !name.startsWith("_") && !name.startsWith("qt_")) {
bool hasAttr = PyObject_HasAttrString(root, name.constData());
if (!hasAttr) {
Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QObject*](child));
PyObject_SetAttrString(root, name.constData(), pyChild);
}
createChildrenNameAttributes(root, child);
}
createChildrenNameAttributes(root, child);
}
}
static PyObject* QUiLoadedLoadUiFromDevice(QUiLoader* self, QIODevice* dev, QWidget* parent)
{
QWidget* wdg = self->load(dev, parent);
if (wdg) {
PyObject* pyWdg = %CONVERTTOPYTHON[QWidget*](wdg);
createChildrenNameAttributes(pyWdg, wdg);
if (parent) {
Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](parent));
Shiboken::Object::setParent(pyParent, pyWdg);
}
return pyWdg;
}
if (!PyErr_Occurred())
PyErr_SetString(PyExc_RuntimeError, "Unable to open/read ui device");
return 0;
}
static PyObject* QUiLoaderLoadUiFromFileName(QUiLoader* self, const QString& uiFile, QWidget* parent)
{
QFile fd(uiFile);
return QUiLoadedLoadUiFromDevice(self, &fd, parent);
}

View file

@ -1,77 +0,0 @@
/*
* Based on code provided by:
* Antonio Valentino <antonio.valentino at tiscali.it>
* Frédéric <frederic.mantegazza at gbiloba.org>
*/
#include <shiboken.h>
static void
_populate_parent(PyObject* pyParent, QObject *parent)
{
if (parent->children().isEmpty())
return;
foreach(QObject *child, parent->children()) {
QString name(child->objectName());
if (!name.isEmpty() && !name.startsWith("_") && !name.startsWith("qt_")) {
bool has_attr = PyObject_HasAttrString(pyParent, qPrintable(name));
Shiboken::AutoDecRef pyChild(Shiboken::Converter<QObject*>::toPython(child));
if (!has_attr)
PyObject_SetAttrString(pyParent, qPrintable(name), pyChild);
Shiboken::Object::setParent(pyParent, pyChild);
_populate_parent(pyChild, qobject_cast<QObject*>(child));
}
}
}
static PyObject*
quiloader_load_ui_from_device(QUiLoader* self, QIODevice* dev, QWidget *parent)
{
QWidget *w = self->load(dev, parent);
if (w) {
QObject* _parent = parent;
if (!_parent)
_parent = w;
if (parent && parent->layout())
parent->layout()->deleteLater();
PyObject* pyParent = Shiboken::Converter<QWidget*>::toPython(w);
_populate_parent(pyParent, _parent);
return pyParent;
}
if (!PyErr_Occurred())
PyErr_SetString(PyExc_RuntimeError, "Unable to open ui file");
return 0;
}
static PyObject*
quiloader_load_ui(QUiLoader* self, const QString &ui_file, QWidget *parent)
{
QFile fd(ui_file);
if (fd.exists(ui_file) && fd.open(QFile::ReadOnly)) {
QWidget* w = self->load(&fd, parent);
fd.close();
if (w != 0) {
QObject *_parent = parent;
if (!_parent)
_parent = w;
Shiboken::AutoDecRef pyParent(Shiboken::Converter<QWidget*>::toPython(_parent));
if (parent && parent->layout())
parent->layout()->deleteLater();
_populate_parent(pyParent, _parent);
return Shiboken::Converter<QWidget*>::toPython(w);
}
}
if (!PyErr_Occurred())
PyErr_SetString(PyExc_RuntimeError, "Unable to open ui file");
return 0;
}

View file

@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- <!--
This file is part of PySide project. This file is part of PySide project.
Copyright (C) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies).
Contact: PySide team <contact@pyside.org> Contact: PySide team <contact@pyside.org>
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
@ -26,6 +26,7 @@
<extra-includes> <extra-includes>
<include file-name="glue/plugins.h" location="local"/> <include file-name="glue/plugins.h" location="local"/>
</extra-includes> </extra-includes>
<inject-code class="native" position="beginning" file="glue/uitools_loadui.cpp"/>
<inject-code> <inject-code>
Q_IMPORT_PLUGIN(uiplugin); Q_IMPORT_PLUGIN(uiplugin);
</inject-code> </inject-code>
@ -90,41 +91,36 @@
<modify-function signature="createWidget(const QString&amp;, QWidget*, const QString&amp;)"> <modify-function signature="createWidget(const QString&amp;, QWidget*, const QString&amp;)">
<modify-argument index="return"> <modify-argument index="return">
<parent index="2" action="add"/> <parent index="2" action="add"/>
<define-ownership class="target" owner="default"/>
</modify-argument> </modify-argument>
</modify-function> </modify-function>
<modify-function signature="load(QIODevice*, QWidget*)"> <modify-function signature="load(QIODevice*, QWidget*)">
<extra-includes>
<include file-name="glue/uitools_loadui.h" location="local"/>
</extra-includes>
<modify-argument index="2"> <modify-argument index="2">
<replace-default-expression with="0" /> <replace-default-expression with="0" />
<rename to="parentWidget" /> <rename to="parentWidget" />
</modify-argument> </modify-argument>
<modify-argument index="return"> <modify-argument index="return">
<parent index="2" action="add"/> <define-ownership class="target" owner="target"/>
</modify-argument> </modify-argument>
<inject-code> <inject-code>
// Avoid calling the original function: %CPPSELF.%FUNCTION_NAME() // Avoid calling the original function: %CPPSELF.%FUNCTION_NAME()
%PYARG_0 = quiloader_load_ui_from_device(%CPPSELF, %1, %2); %PYARG_0 = QUiLoadedLoadUiFromDevice(%CPPSELF, %1, %2);
</inject-code> </inject-code>
</modify-function> </modify-function>
<!-- Syntax sugar --> <!-- Syntax sugar -->
<add-function signature="load(QString, QWidget*)" return-type="QWidget*"> <add-function signature="load(QString, QWidget*)" return-type="QWidget*">
<extra-includes>
<include file-name="glue/uitools_loadui.h" location="local"/>
</extra-includes>
<modify-argument index="2"> <modify-argument index="2">
<replace-default-expression with="0" /> <replace-default-expression with="0" />
<rename to="parentWidget" /> <rename to="parentWidget" />
</modify-argument> </modify-argument>
<modify-argument index="return"> <modify-argument index="return">
<parent index="2" action="add"/> <define-ownership class="target" owner="target"/>
</modify-argument> </modify-argument>
<inject-code> <inject-code>
// Avoid calling the original function: %CPPSELF.%FUNCTION_NAME() // Avoid calling the original function: %CPPSELF.%FUNCTION_NAME()
%PYARG_0 = quiloader_load_ui(%CPPSELF, %1, %2); %PYARG_0 = QUiLoaderLoadUiFromFileName(%CPPSELF, %1, %2);
</inject-code> </inject-code>
</add-function> </add-function>
</object-type> </object-type>

View file

@ -37,7 +37,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtWebKit/webcore_wrapper.cpp
${QtWebKit_46_SRC} ${QtWebKit_46_SRC}
) )
set(QtWebKit_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtNetwork_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtWebKit_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtNetwork_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtWebkit_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtWebkit_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtWebkit/ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtWebkit/
${QT_INCLUDE_DIR} ${QT_INCLUDE_DIR}

View file

@ -25,9 +25,6 @@
<namespace-type name="WebCore"/> <namespace-type name="WebCore"/>
<!-- unsuported property with type QList<MimeType> -->
<rejection class="QWebPluginFactory::Plugin" field-name="mimeTypes"/>
<object-type name="QWebView"> <object-type name="QWebView">
<modify-function signature="setPage(QWebPage*)"> <modify-function signature="setPage(QWebPage*)">
<modify-argument index="1"> <modify-argument index="1">
@ -84,6 +81,9 @@
<!-- Qt 4.6 --> <!-- Qt 4.6 -->
<enum-type name="ErrorDomain" since="4.6"/> <enum-type name="ErrorDomain" since="4.6"/>
<enum-type name="Extension"/> <enum-type name="Extension"/>
<!-- Qt 4.8 -->
<enum-type name="Feature" since="4.8" revision="4800" />
<enum-type name="PermissionPolicy" since="4.8" revision="4800" />
<value-type name="ChooseMultipleFilesExtensionOption" /> <value-type name="ChooseMultipleFilesExtensionOption" />
<value-type name="ChooseMultipleFilesExtensionReturn" /> <value-type name="ChooseMultipleFilesExtensionReturn" />
@ -93,28 +93,31 @@
<value-type name="ExtensionReturn" /> <value-type name="ExtensionReturn" />
<modify-function signature="extension(QWebPage::Extension, const QWebPage::ExtensionOption*, QWebPage::ExtensionReturn*)"> <modify-function signature="extension(QWebPage::Extension, const QWebPage::ExtensionOption*, QWebPage::ExtensionReturn*)">
<modify-argument index="2" invalidate-after-use="yes"> <template name="qwebpage_extension_argument_conversion">
<conversion-rule class="target">
PyObject* %out = 0; PyObject* %out = 0;
// Cast the parameters according to the extension type // Cast the parameters according to the extension type
if (extension == QWebPage::ChooseMultipleFilesExtension) if (extension == QWebPage::ChooseMultipleFilesExtension) {
%out = %CONVERTTOPYTHON[ChooseMultipleFilesExtensionOption*](reinterpret_cast&lt;const ChooseMultipleFilesExtensionOption*>(option)); const ChooseMultipleFilesExtension$TYPE_SUFFIX* _in = reinterpret_cast&lt;const ChooseMultipleFilesExtension$TYPE_SUFFIX*>(%in);
%out = %CONVERTTOPYTHON[const QWebPage::ChooseMultipleFilesExtension$TYPE_SUFFIX*](_in);
#if QT_VERSION >= 0x040600 #if QT_VERSION >= 0x040600
else if (extension == QWebPage::ErrorPageExtension) } else if (extension == QWebPage::ErrorPageExtension) {
%out = %CONVERTTOPYTHON[ErrorPageExtensionOption*](reinterpret_cast&lt;const ErrorPageExtensionOption*>(option)); const ErrorPageExtension$TYPE_SUFFIX* _in = reinterpret_cast&lt;const ErrorPageExtension$TYPE_SUFFIX*>(%in);
%out = %CONVERTTOPYTHON[const QWebPage::ErrorPageExtension$TYPE_SUFFIX*](_in);
#endif #endif
}
</template>
<modify-argument index="2" invalidate-after-use="yes">
<conversion-rule class="target">
<insert-template name="qwebpage_extension_argument_conversion">
<replace from="$TYPE_SUFFIX" to="Option"/>
</insert-template>
</conversion-rule> </conversion-rule>
</modify-argument> </modify-argument>
<modify-argument index="3" invalidate-after-use="yes"> <modify-argument index="3" invalidate-after-use="yes">
<conversion-rule class="target"> <conversion-rule class="target">
PyObject* %out = 0; <insert-template name="qwebpage_extension_argument_conversion">
// Cast the parameters according to the extension type <replace from="$TYPE_SUFFIX" to="Return"/>
if (extension == QWebPage::ChooseMultipleFilesExtension) </insert-template>
%out = %CONVERTTOPYTHON[ChooseMultipleFilesExtensionReturn*](reinterpret_cast&lt;const ChooseMultipleFilesExtensionReturn*>(output));
#if QT_VERSION >= 0x040600
else if (extension == QWebPage::ErrorPageExtension)
%out = %CONVERTTOPYTHON[ErrorPageExtensionReturn*](reinterpret_cast&lt;const ErrorPageExtensionReturn*>(output));
#endif
</conversion-rule> </conversion-rule>
</modify-argument> </modify-argument>
</modify-function> </modify-function>
@ -141,21 +144,49 @@
</modify-function> </modify-function>
<modify-function signature="javaScriptPrompt(QWebFrame*,const QString &amp;,const QString &amp;,QString*)"> <modify-function signature="javaScriptPrompt(QWebFrame*,const QString &amp;,const QString &amp;,QString*)">
<modify-argument index="return">
<replace-type modified-type="PyObject"/>
</modify-argument>
<modify-argument index="4"> <modify-argument index="4">
<remove-argument /> <remove-argument />
<conversion-rule class="native">
QString _local;
QString* %4 = &amp;_local;
</conversion-rule>
</modify-argument> </modify-argument>
<modify-argument index="return"> <modify-argument index="return">
<replace-type modified-type="(retval, result)"/> <replace-type modified-type="PySequence"/>
<conversion-rule class="native">
Shiboken::AutoDecRef pyRes(PySequence_GetItem(%PYARG_0, 0));
Shiboken::AutoDecRef pyStr(PySequence_GetItem(%PYARG_0, 1));
%RETURN_TYPE %out = %CONVERTTOCPP[%RETURN_TYPE](pyRes);
*%4 = %CONVERTTOCPP[QString](pyStr);
</conversion-rule>
<conversion-rule class="target">
%PYARG_0 = PyTuple_New(2);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](%0));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QString](*%4));
</conversion-rule>
</modify-argument> </modify-argument>
<inject-code class="target" position="end">
QString str;
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, &amp;str);
%PYARG_0 = Shiboken::makeTuple(retval_, str);
</inject-code>
</modify-function> </modify-function>
<add-function signature="qt_metacall()">
<inject-code class="native">
static int _signalIndex = -1;
static QMetaMethod _m;
if (_signalIndex == -1) {
_signalIndex = QWebPage::staticMetaObject.indexOfSlot("shouldInterruptJavaScript()");
_m = QWebPage::staticMetaObject.method(_signalIndex);
}
if (_signalIndex == id) {
Shiboken::GilState gil;
PyObject* self = (PyObject*)Shiboken::BindingManager::instance().retrieveWrapper(this);
if (self) {
Shiboken::AutoDecRef _pyMethod(PyObject_GetAttrString(self, "shouldInterruptJavaScript"));
return PySide::SignalManager::callPythonMetaMethod(_m, args, _pyMethod, false);
}
}
</inject-code>
</add-function>
</object-type> </object-type>
<object-type name="QWebHistory"/> <object-type name="QWebHistory"/>
<object-type name="QWebHistoryInterface"/> <object-type name="QWebHistoryInterface"/>
@ -163,6 +194,12 @@
<enum-type name="Extension"/> <enum-type name="Extension"/>
<value-type name="Plugin"/> <value-type name="Plugin"/>
<value-type name="MimeType"/> <value-type name="MimeType"/>
<modify-function signature="create(const QString &amp;, const QUrl &amp;, const QStringList &amp;, const QStringList &amp;) const">
<modify-argument index="return">
<define-ownership class="native" owner="c++"/>
<define-ownership class="target" owner="target"/>
</modify-argument>
</modify-function>
</object-type> </object-type>
<value-type name="QWebDatabase"/> <value-type name="QWebDatabase"/>
<value-type name="QWebHistoryItem"/> <value-type name="QWebHistoryItem"/>
@ -187,7 +224,8 @@
PyErr_SetString(PyExc_IndexError, "index out of bounds"); PyErr_SetString(PyExc_IndexError, "index out of bounds");
return 0; return 0;
} }
return %CONVERTTOPYTHON[QWebElement](%CPPSELF.at(_i)); QWebElement element = %CPPSELF.at(_i);
return %CONVERTTOPYTHON[QWebElement](element);
</inject-code> </inject-code>
</add-function> </add-function>
</value-type> </value-type>

View file

@ -35,7 +35,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtXml/qxmlreader_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtXml/qxmlsimplereader_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtXml/qxmlsimplereader_wrapper.cpp
) )
set(QtXml_typesystem_path "${QtCore_SOURCE_DIR}") set(QtXml_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}")
set(QtXml_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtXml_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtXml ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtXml
${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}

View file

@ -36,11 +36,14 @@
QString _errorMsg_; QString _errorMsg_;
int _errorLine_ = 0; int _errorLine_ = 0;
int _errorColumn_ = 0; int _errorColumn_ = 0;
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
bool _ret_ = %CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES, &amp;_errorMsg_, &amp;_errorLine_, &amp;_errorColumn_); bool _ret_ = %CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES, &amp;_errorMsg_, &amp;_errorLine_, &amp;_errorColumn_);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(_ret_, _errorMsg_, _errorLine_, _errorColumn_); %PYARG_0 = PyTuple_New(4);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[bool](_ret_));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QString](_errorMsg_));
PyTuple_SET_ITEM(%PYARG_0, 2, %CONVERTTOPYTHON[int](_errorLine_));
PyTuple_SET_ITEM(%PYARG_0, 3, %CONVERTTOPYTHON[int](_errorColumn_));
</template> </template>
<value-type name="QDomDocument"> <value-type name="QDomDocument">
@ -270,12 +273,12 @@
</modify-argument> </modify-argument>
<inject-code class="target" position="end"> <inject-code class="target" position="end">
QXmlInputSource* _qxmlinputsource_arg_ = 0; QXmlInputSource* _qxmlinputsource_arg_ = 0;
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(%1, %2, _qxmlinputsource_arg_); %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(%1, %2, _qxmlinputsource_arg_);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = PyTuple_New(2);
%PYARG_0 = Shiboken::makeTuple(%0, _qxmlinputsource_arg_); PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](%0));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QXmlInputSource*](_qxmlinputsource_arg_));
</inject-code> </inject-code>
</modify-function> </modify-function>
</object-type> </object-type>
@ -300,7 +303,9 @@
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%RETURN_TYPE %0 = %CPPSELF.%TYPE::%FUNCTION_NAME(%1, %2, _qxmlinputsource_arg_); %RETURN_TYPE %0 = %CPPSELF.%TYPE::%FUNCTION_NAME(%1, %2, _qxmlinputsource_arg_);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(%0, _qxmlinputsource_arg_); %PYARG_0 = PyTuple_New(2);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](%0));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QXmlInputSource*](_qxmlinputsource_arg_));
</inject-code> </inject-code>
</modify-function> </modify-function>
</object-type> </object-type>

View file

@ -26,7 +26,7 @@ set(QtXmlPatterns_SRC
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtXmlPatterns/qxmlserializer_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtXmlPatterns/qxmlserializer_wrapper.cpp
${QtXmlPatterns_46_SRC} ${QtXmlPatterns_46_SRC}
) )
set(QtXmlPatterns_typesystem_path "${QtCore_SOURCE_DIR}") set(QtXmlPatterns_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}")
set(QtXmlPatterns_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtXmlPatterns_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${QT_QTCORE_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR}
${QT_QTXMLPATTERNS_INCLUDE_DIR} ${QT_QTXMLPATTERNS_INCLUDE_DIR}

View file

@ -29,7 +29,8 @@
<define-ownership owner="target"/> <define-ownership owner="target"/>
</modify-argument> </modify-argument>
<inject-code> <inject-code>
%PYARG_0 = %CONVERTTOPYTHON[QXmlSchema*](new QXmlSchema(%CPPSELF.schema())); QXmlSchema* %0 = new QXmlSchema(%CPPSELF.schema());
%PYARG_0 = %CONVERTTOPYTHON[QXmlSchema*](%0);
</inject-code> </inject-code>
</modify-function> </modify-function>
</object-type> </object-type>
@ -86,7 +87,11 @@
</value-type> </value-type>
<value-type name="QXmlQuery"> <value-type name="QXmlQuery">
<!-- ### TODO: must evaluate if anything other than removal is needed. -->
<enum-type name="QueryLanguage" /> <enum-type name="QueryLanguage" />
<modify-function signature="evaluateTo(QStringList*)const" remove="all" />
<modify-function signature="evaluateTo(QString*)const" remove="all" />
<!-- ### -->
</value-type> </value-type>
<object-type name="QXmlResultItems" /> <object-type name="QXmlResultItems" />
<object-type name="QXmlSerializer" /> <object-type name="QXmlSerializer" />

View file

@ -1,5 +1,3 @@
__all__ = ['QtCore', 'QtGui', 'QtNetwork', 'QtOpenGL', 'QtSql', 'QtSvg', 'QtTest', 'QtWebKit', 'QtScript'] __all__ = ['QtCore', 'QtGui', 'QtNetwork', 'QtOpenGL', 'QtSql', 'QtSvg', 'QtTest', 'QtWebKit', 'QtScript']
import private
__version__ = "@BINDING_API_VERSION_FULL@" __version__ = "@BINDING_API_VERSION_FULL@"
__version_info__ = (@BINDING_API_MAJOR_VERSION@, @BINDING_API_MINOR_VERSION@, @BINDING_API_MICRO_VERSION@, "@BINDING_API_RELEASE_LEVEL@", @BINDING_API_SERIAL@) __version_info__ = (@BINDING_API_MAJOR_VERSION@, @BINDING_API_MINOR_VERSION@, @BINDING_API_MICRO_VERSION@, "@BINDING_API_RELEASE_LEVEL@", @BINDING_API_SERIAL@)

View file

@ -319,6 +319,7 @@ QT_END_HEADER
#elif @ENABLE_MAC@ #elif @ENABLE_MAC@
#define Q_WS_MAC #define Q_WS_MAC
#elif @ENABLE_WIN@ #elif @ENABLE_WIN@
#include "pysidewtypes.h"
#define Q_WS_WIN #define Q_WS_WIN
#elif @ENABLE_SIMULATOR@ #elif @ENABLE_SIMULATOR@
#define Q_WS_SIMULATOR #define Q_WS_SIMULATOR

View file

@ -1,7 +1,7 @@
/* /*
* This file is part of PySide: Python for Qt * This file is part of PySide: Python for Qt
* *
* Copyright (C) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). * Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies).
* *
* Contact: PySide team <contact@pyside.org> * Contact: PySide team <contact@pyside.org>
* *

View file

@ -49,7 +49,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/phonon/phonon_backendcapabilities_notifierwra
${phonon_OPTIONAL_SRC} ${phonon_OPTIONAL_SRC}
) )
set(phonon_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${phonon_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(phonon_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${phonon_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(phonon_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(phonon_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${QT_QTCORE_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR}
${QT_QTGUI_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR}

View file

@ -1,4 +0,0 @@
import atexit
from QtCore import __moduleShutdown
atexit.register(__moduleShutdown)

27
PySide/pysidewtypes.h Normal file
View file

@ -0,0 +1,27 @@
#ifndef __PYSIDEWTYPES__
#define __PYSIDEWTYPES__
typedef struct HWND__ *HWND;
typedef unsigned UINT;
typedef long LONG;
typedef unsigned long DWORD;
typedef UINT WPARAM;
typedef LONG LPARAM;
struct POINT
{
LONG x;
LONG y;
};
struct MSG
{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
};
#endif

View file

@ -21,76 +21,89 @@
<typesystem> <typesystem>
<template name="replace_child"> <template name="replace_child">
$CHILD_TYPE* oldChild = %CPPSELF.$FUNCTION_GET_OLD(); $CHILD_TYPE* oldChild = %CPPSELF.$FUNCTION_GET_OLD();
if (oldChild) { if (oldChild &amp;&amp; (oldChild != $CPPARG)) {
Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[$CHILD_TYPE*](oldChild)); Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[$CHILD_TYPE*](oldChild));
Shiboken::Object::setParent(NULL, pyChild); Shiboken::Object::setParent(0, pyChild);
Shiboken::Object::releaseOwnership(pyChild);
} }
Shiboken::Object::setParent(%PYSELF, $PYARG); Shiboken::Object::setParent(%PYSELF, $PYARG);
</template> </template>
<!-- Templates to fix bool* parameters --> <!-- Templates to fix bool* parameters -->
<template name="tuple_retval_ok">
%PYARG_0 = PyTuple_New(2);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](retval_));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[bool](ok_));
</template>
<template name="fix_bool*"> <template name="fix_bool*">
bool ok_; bool ok_;
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;ok_); %RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;ok_);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(retval_, ok_); <insert-template name="tuple_retval_ok"/>
</template> </template>
<template name="fix_args,bool*"> <template name="fix_args,bool*">
bool ok_; bool ok_;
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES, &amp;ok_); %RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES, &amp;ok_);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(retval_, ok_); <insert-template name="tuple_retval_ok"/>
</template> </template>
<template name="fix_arg,bool*,arg"> <template name="fix_arg,bool*,arg">
bool ok_; bool ok_;
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, &amp;ok_, %3); %RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, &amp;ok_, %3);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(retval_, ok_); <insert-template name="tuple_retval_ok"/>
</template> </template>
<template name="fix_bool*,arg"> <template name="fix_bool*,arg">
bool ok_; bool ok_;
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;ok_, %2); %RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;ok_, %2);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(retval_, ok_); <insert-template name="tuple_retval_ok"/>
</template> </template>
<template name="fix_bool*,arg,arg"> <template name="fix_bool*,arg,arg">
bool ok_; bool ok_;
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;ok_, %2, %3); %RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;ok_, %2, %3);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(retval_, ok_); <insert-template name="tuple_retval_ok"/>
</template> </template>
<template name="fix_bool*,arg,arg,arg"> <template name="fix_bool*,arg,arg,arg">
bool ok_; bool ok_;
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;ok_, %2, %3, %4); %RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;ok_, %2, %3, %4);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(retval_, ok_); <insert-template name="tuple_retval_ok"/>
</template>
<template name="fix_bool*,arg,arg,arg,arg">
bool ok_;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;ok_, %2, %3, %4, %5);
%END_ALLOW_THREADS
<insert-template name="tuple_retval_ok"/>
</template> </template>
<template name="fix_arg,arg,arg,arg,arg,arg,arg,bool*,arg"> <template name="fix_arg,arg,arg,arg,arg,arg,arg,bool*,arg">
bool ok_; bool ok_;
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, %5, %6, %7, &amp;ok_, %9); %RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, %5, %6, %7, &amp;ok_, %9);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(retval_, ok_); <insert-template name="tuple_retval_ok"/>
</template> </template>
<template name="fix_arg,arg,arg,arg,arg,arg,bool*,arg"> <template name="fix_arg,arg,arg,arg,arg,arg,bool*,arg">
bool ok_; bool ok_;
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, %5, %6, &amp;ok_, %8); %RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, %5, %6, &amp;ok_, %8);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(retval_, ok_); <insert-template name="tuple_retval_ok"/>
</template> </template>
<template name="fix_arg,arg,arg,arg,arg,bool*,arg"> <template name="fix_arg,arg,arg,arg,arg,bool*,arg">
bool ok_; bool ok_;
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, %5, &amp;ok_, %7); %RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, %5, &amp;ok_, %7);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(retval_, ok_); <insert-template name="tuple_retval_ok"/>
</template> </template>
<template name="get_slice"> <template name="get_slice">
%TYPE* sequence; %TYPE* sequence;
@ -139,23 +152,31 @@
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;val_); %RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;val_);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(retval_, val_); %PYARG_0 = PyTuple_New(2);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](retval_));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[char](val_));
</template> </template>
<template name="tuple_abcd_same_type">
%PYARG_0 = PyTuple_New(4);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[$TYPE](a));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[$TYPE](b));
PyTuple_SET_ITEM(%PYARG_0, 2, %CONVERTTOPYTHON[$TYPE](c));
PyTuple_SET_ITEM(%PYARG_0, 3, %CONVERTTOPYTHON[$TYPE](d));
</template>
<template name="fix_number*,number*,number*,number*"> <template name="fix_number*,number*,number*,number*">
$TYPE a, b, c, d; $TYPE a, b, c, d;
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%CPPSELF->::%TYPE::%FUNCTION_NAME(&amp;a, &amp;b, &amp;c, &amp;d); %CPPSELF->::%TYPE::%FUNCTION_NAME(&amp;a, &amp;b, &amp;c, &amp;d);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(a, b, c, d); <insert-template name="tuple_abcd_same_type"/>
</template> </template>
<template name="fix_number*,number*,number*,number*,args"> <template name="fix_number*,number*,number*,number*,args">
$TYPE a, b, c, d; $TYPE a, b, c, d;
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%CPPSELF->::%TYPE::%FUNCTION_NAME(&amp;a, &amp;b, &amp;c, &amp;d, %ARGUMENT_NAMES); %CPPSELF->::%TYPE::%FUNCTION_NAME(&amp;a, &amp;b, &amp;c, &amp;d, %ARGUMENT_NAMES);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(a, b, c, d); <insert-template name="tuple_abcd_same_type"/>
</template> </template>
<template name="fix_native_return_number*,number*,number*,number*"> <template name="fix_native_return_number*,number*,number*,number*">
@ -175,33 +196,26 @@
} }
</template> </template>
<template name="fix_int*,int*,int*,int*,int*"> <template name="fix_number*,number*,number*,number*,number*">
int a, b, c, d, e; $TYPE a, b, c, d, e;
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%CPPSELF.%FUNCTION_NAME(&amp;a, &amp;b, &amp;c, &amp;d, &amp;e); %CPPSELF.%FUNCTION_NAME(&amp;a, &amp;b, &amp;c, &amp;d, &amp;e);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(a, b, c, d, e); %PYARG_0 = PyTuple_New(5);
</template> PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[$TYPE](a));
<template name="fix_qreal*,qreal*,qreal*,qreal*,qreal*"> PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[$TYPE](b));
qreal a, b, c, d, e; PyTuple_SET_ITEM(%PYARG_0, 2, %CONVERTTOPYTHON[$TYPE](c));
%CPPSELF.%FUNCTION_NAME(&amp;a, &amp;b, &amp;c, &amp;d, &amp;e); PyTuple_SET_ITEM(%PYARG_0, 3, %CONVERTTOPYTHON[$TYPE](d));
%PYARG_0 = Shiboken::makeTuple(a, b, c, d, e); PyTuple_SET_ITEM(%PYARG_0, 4, %CONVERTTOPYTHON[$TYPE](e));
</template> </template>
<template name="read_wrapper"> <template name="read_wrapper">
PySide::AutoArrayPointer&lt;char&gt; _data(%2); Shiboken::AutoArrayPointer&lt;char&gt; _data(%2);
qint64 _size = %CPPSELF.%FUNCTION_NAME(_data, %2); qint64 _size = %CPPSELF.%FUNCTION_NAME(_data, %2);
QByteArray ba;
if (_size > 0) if (_size > 0)
%PYARG_0 = %CONVERTTOPYTHON[QByteArray](QByteArray(_data, _size)); ba = QByteArray(_data, _size);
else %PYARG_0 = %CONVERTTOPYTHON[QByteArray](ba);
%PYARG_0 = %CONVERTTOPYTHON[QByteArray](QByteArray());
</template>
<template name="fix_return_args,int*">
RETURNTYPE _ret;
int _arg;
%BEGIN_ALLOW_THREADS
_ret = %CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES, &amp;_arg);
%END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(_ret, _arg);
</template> </template>
<template name="fix_args,number*,number*"> <template name="fix_args,number*,number*">
@ -209,7 +223,9 @@
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES, &amp;a, &amp;b); %CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES, &amp;a, &amp;b);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(a, b); %PYARG_0 = PyTuple_New(2);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[$TYPE](a));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[$TYPE](b));
</template> </template>
<template name="fix_virtual_method_return_value_and_bool*"> <template name="fix_virtual_method_return_value_and_bool*">
@ -225,7 +241,10 @@
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
_ret = %CPPSELF.%FUNCTION_NAME(%1, &amp;a, &amp;b); _ret = %CPPSELF.%FUNCTION_NAME(%1, &amp;a, &amp;b);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(_ret, a, b); %PYARG_0 = PyTuple_New(3);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](_ret));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[int](a));
PyTuple_SET_ITEM(%PYARG_0, 2, %CONVERTTOPYTHON[int](b));
</template> </template>
<template name="return_QString"> <template name="return_QString">
@ -236,24 +255,31 @@
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %RETURN_TYPE(%CPPSELF.%FUNCTION_NAME(%1, %2)); %RETURN_TYPE retval_ = %RETURN_TYPE(%CPPSELF.%FUNCTION_NAME(%1, %2));
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(retval_, %1, %2); %PYARG_0 = PyTuple_New(3);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](retval_));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[%ARG1_TYPE](%1));
PyTuple_SET_ITEM(%PYARG_0, 2, %CONVERTTOPYTHON[%ARG2_TYPE](%2));
</template> </template>
<template name="return_for_QFileDialog"> <template name="return_for_QFileDialog">
%BEGIN_ALLOW_THREADS %BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, &amp;%5, %6); %RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, &amp;%5, %6);
%END_ALLOW_THREADS %END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(retval_, %5); %PYARG_0 = PyTuple_New(2);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](retval_));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[%ARG5_TYPE](%5));
</template> </template>
<template name="set_qapp_parent_for_orphan"> <template name="set_qapp_parent_for_orphan">
if (%PYARG_0 &amp;&amp; (%PYARG_0 != Py_None)) {
SbkObject* _pySelf = reinterpret_cast&lt;SbkObject*&gt;(%PYARG_0); SbkObject* _pySelf = reinterpret_cast&lt;SbkObject*&gt;(%PYARG_0);
if (!Shiboken::Object::hasParentInfo(_pySelf)) if (!Shiboken::Object::hasParentInfo(_pySelf))
Shiboken::Object::setParent(%CONVERTTOPYTHON[QApplication*](qApp), %PYARG_0); Shiboken::Object::setParent(%CONVERTTOPYTHON[QApplication*](qApp), %PYARG_0);
}
</template> </template>
<!-- templates for __repr__ --> <!-- templates for __repr__ -->
<template name="repr_code"> <template name="repr_code">
QString format = QString().sprintf("%s(%REPR_FORMAT)", ((PyObject*)%PYSELF)->ob_type->tp_name, %REPR_ARGS); QString format = QString().sprintf("%s(%REPR_FORMAT)", ((PyObject*)%PYSELF)->ob_type->tp_name, %REPR_ARGS);
%PYARG_0 = PyString_FromString(qPrintable(format)); %PYARG_0 = Shiboken::String::fromCString(qPrintable(format));
</template> </template>
<template name="repr_code_matrix"> <template name="repr_code_matrix">
QString format= QString("%1((").arg(((PyObject*)%PYSELF)->ob_type->tp_name); QString format= QString("%1((").arg(((PyObject*)%PYSELF)->ob_type->tp_name);
@ -269,9 +295,15 @@
} }
format += "))"; format += "))";
%PYARG_0 = PyString_FromString(qPrintable(format)); %PYARG_0 = Shiboken::String::fromCString(qPrintable(format));
</template> </template>
<template name="return_internal_pointer">
%PYARG_0 = reinterpret_cast&lt;PyObject*>(%CPPSELF.%FUNCTION_NAME());
if (!%PYARG_0)
%PYARG_0 = Py_None;
Py_INCREF(%PYARG_0);
</template>
<!-- templates for __reduce__ --> <!-- templates for __reduce__ -->
<template name="reduce_code"> <template name="reduce_code">
@ -319,7 +351,8 @@
</template> </template>
<template name="matrix_transposed_function"> <template name="matrix_transposed_function">
return %CONVERTTOPYTHON[%TRANSPOSED_TYPE](%CPPSELF.transposed()); %TRANSPOSED_TYPE transp = %CPPSELF.transposed();
return %CONVERTTOPYTHON[%TRANSPOSED_TYPE](transp);
</template> </template>
<!-- Replace '#' for the argument number you want. --> <!-- Replace '#' for the argument number you want. -->
@ -335,12 +368,15 @@
</template> </template>
<template name="__iter_parent__"> <template name="__iter_parent__">
%PYARG_0 = %CONVERTTOPYTHON[%CPPSELF_TYPE](%CPPSELF.begin()); %CPPSELF_TYPE _tmp = %CPPSELF.begin();
%PYARG_0 = %CONVERTTOPYTHON[%CPPSELF_TYPE](_tmp);
</template> </template>
<template name="__next__"> <template name="__next__">
if (!%CPPSELF.atEnd()) if (!%CPPSELF.atEnd()) {
%PYARG_0 = %CONVERTTOPYTHON[%CPPSELF_TYPE]((*%CPPSELF)++); %PYARG_0 = %CONVERTTOPYTHON[%CPPSELF_TYPE](*%CPPSELF);
++(*%CPPSELF);
}
</template> </template>
<template name="convertFromMultiMap"> <template name="convertFromMultiMap">
@ -361,5 +397,32 @@
%PYARG_0 = Py_BuildValue("%TT_FORMAT", %TT_ARGS); %PYARG_0 = Py_BuildValue("%TT_FORMAT", %TT_ARGS);
</template> </template>
</typesystem> <template name="cpplist_to_pylist_convertion">
PyObject* %out = PyList_New((int) %in.size());
%INTYPE::const_iterator it = %in.begin();
for (int idx = 0; it != %in.end(); ++it, ++idx) {
%INTYPE_0 cppItem(*it);
PyList_SET_ITEM(%out, idx, %CONVERTTOPYTHON[%INTYPE_0](cppItem));
}
return %out;
</template>
<template name="pyseq_to_cpplist_convertion">
for (int i = 0; i &lt; PySequence_Size(%in); i++) {
Shiboken::AutoDecRef pyItem(PySequence_GetItem(%in, i));
%OUTTYPE_0 cppItem = %CONVERTTOCPP[%OUTTYPE_0](pyItem);
%out &lt;&lt; cppItem;
}
</template>
<template name="checkPyCapsuleOrPyCObject_func">
static bool checkPyCapsuleOrPyCObject(PyObject* pyObj)
{
#ifdef IS_PY3K
return PyCapsule_CheckExact(pyObj);
#else
return PyCObject_Check(pyObj);
#endif
}
</template>
</typesystem>

View file

@ -20,7 +20,7 @@ macro(create_pyside_module module_name module_include_dir module_libraries modul
endif() endif()
add_custom_command(OUTPUT ${${module_sources}} add_custom_command(OUTPUT ${${module_sources}}
COMMAND ${GENERATORRUNNER_BINARY} ${GENERATOR_EXTRA_FLAGS} COMMAND ${SHIBOKEN_BINARY} ${GENERATOR_EXTRA_FLAGS}
${pyside_BINARY_DIR}/pyside_global.h ${pyside_BINARY_DIR}/pyside_global.h
--include-paths=${pyside_SOURCE_DIR}${PATH_SEP}${QT_INCLUDE_DIR} --include-paths=${pyside_SOURCE_DIR}${PATH_SEP}${QT_INCLUDE_DIR}
--typesystem-paths=${pyside_SOURCE_DIR}${PATH_SEP}${${module_typesystem_path}} --typesystem-paths=${pyside_SOURCE_DIR}${PATH_SEP}${${module_typesystem_path}}
@ -39,7 +39,7 @@ macro(create_pyside_module module_name module_include_dir module_libraries modul
set_target_properties(${module_name} PROPERTIES SUFFIX ".pyd") set_target_properties(${module_name} PROPERTIES SUFFIX ".pyd")
set(${module_name}_suffix ".pyd") set(${module_name}_suffix ".pyd")
else() else()
set(${module_name}_suffix ".so") set(${module_name}_suffix ${CMAKE_SHARED_MODULE_SUFFIX})
endif() endif()
target_link_libraries(${module_name} ${${module_libraries}}) target_link_libraries(${module_name} ${${module_libraries}})
if(${module_deps}) if(${module_deps})
@ -71,7 +71,7 @@ macro(check_qt_class module class optional_source_files dropped_entries)
endif () endif ()
string(TOLOWER ${class} _class) string(TOLOWER ${class} _class)
string(TOUPPER ${module} _module) string(TOUPPER ${module} _module)
if (${namespace}) if (_namespace)
set(_cppfile ${CMAKE_CURRENT_BINARY_DIR}/PySide/${module}/${_namespace}_${_class}_wrapper.cpp) set(_cppfile ${CMAKE_CURRENT_BINARY_DIR}/PySide/${module}/${_namespace}_${_class}_wrapper.cpp)
else () else ()
set(_cppfile ${CMAKE_CURRENT_BINARY_DIR}/PySide/${module}/${_class}_wrapper.cpp) set(_cppfile ${CMAKE_CURRENT_BINARY_DIR}/PySide/${module}/${_class}_wrapper.cpp)

View file

@ -8,9 +8,14 @@ add_custom_target(qdoc3
COMMENT "Running qdoc3 against Qt source code..." COMMENT "Running qdoc3 against Qt source code..."
SOURCE "pyside.qdocconf") SOURCE "pyside.qdocconf")
find_program(SPHINX_BUILD NAMES sphinx-build)
if (${SPHINX_BUILD} MATCHES "SPHINX_BUILD-NOTFOUND")
message(FATAL_ERROR "sphinx-build command not found.")
endif()
add_custom_target(apidoc add_custom_target(apidoc
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/rst COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/rst
COMMAND sphinx-build -b html ${CMAKE_CURRENT_BINARY_DIR}/rst html COMMAND ${SHIBOKEN_PYTHON_INTERPRETER} ${SPHINX_BUILD} -b html ${CMAKE_CURRENT_BINARY_DIR}/rst html
) )
# create conf.py based on conf.py.in # create conf.py based on conf.py.in
@ -18,7 +23,7 @@ configure_file("conf.py.in" "rst/conf.py" @ONLY)
configure_file(typesystem_doc.xml.in typesystem_doc.xml @ONLY) configure_file(typesystem_doc.xml.in typesystem_doc.xml @ONLY)
add_custom_target("docrsts" add_custom_target("docrsts"
COMMAND ${GENERATORRUNNER_BINARY} --generator-set=qtdoc COMMAND ${SHIBOKEN_BINARY} --generator-set=qtdoc
${pyside_BINARY_DIR}/pyside_global.h ${pyside_BINARY_DIR}/pyside_global.h
--include-paths="${QT_INCLUDE_DIR}${PATH_SEP}${pyside_SOURCE_DIR}" --include-paths="${QT_INCLUDE_DIR}${PATH_SEP}${pyside_SOURCE_DIR}"
--api-version=${SUPPORTED_QT_VERSION} --api-version=${SUPPORTED_QT_VERSION}

View file

@ -11,8 +11,19 @@
<p>PySide is built using the <a href="http://www.pyside.org/docs/shiboken">Shiboken</a> binding generator.</p> <p>PySide is built using the <a href="http://www.pyside.org/docs/shiboken">Shiboken</a> binding generator.</p>
<h2>Notes</h2>
<h3>About 0 vs None</h3>
<p>The PySide class reference documentation is automatically generated from the original Qt documentation for C++, some parts were tuned to fit the Python world. However, it's not possible to rewrite all Qt docs as it would require a really huge effort, so if the documentation says you can use 0 on an QObject argument, interpret it as None.</p>
<h3>About keyword arguments</h3>
<p>Only optional arguments can be used as keyword arguments.</p>
<h2>Modules</h2> <h2>Modules</h2>
<table class="contentstable" align="center" style="margin-left: 30px"><tr>
<table class="contentstable" align="center" ><tr>
<td width="50%"> <td width="50%">
<p class="biglink"><a class="biglink" href="{{ pathto("PySide/QtCore/index") }}">QtCore</a><br/> <p class="biglink"><a class="biglink" href="{{ pathto("PySide/QtCore/index") }}">QtCore</a><br/>
<span class="linkdescr">core non-GUI functionality</span></p> <span class="linkdescr">core non-GUI functionality</span></p>
@ -54,5 +65,11 @@
<p>A collection of <a href="{{ pathto("tutorials/index") }}">tutorials</a> and "walkthrough" guides are provided with PySide to help new users get started with PySide development. These documents were ported from C++ to Python and cover a range of topics, from basic use of widgets to step-by-step <a href="{{ pathto("tutorials/index") }}">tutorials</a> that show how an application is put together.</p> <p>A collection of <a href="{{ pathto("tutorials/index") }}">tutorials</a> and "walkthrough" guides are provided with PySide to help new users get started with PySide development. These documents were ported from C++ to Python and cover a range of topics, from basic use of widgets to step-by-step <a href="{{ pathto("tutorials/index") }}">tutorials</a> that show how an application is put together.</p>
<h2>Other stuff</h2>
<ul>
<li class="toctree-l1"><a class="reference internal" href="pysideapi2.html">PySide API 2</a></li>
<li class="toctree-l1"><a class="reference internal" href="pysideversion.html">Getting PySide and Qt version</a></li>
</ul>
</div> </div>
{% endblock %} {% endblock %}

41
doc/_templates/layout.html vendored Normal file
View file

@ -0,0 +1,41 @@
{% extends "!layout.html" %}
# Invert sidebars
{%- block sidebar1 %}{{ sidebar() }}{%- endblock %}
{%- block sidebar2 %}{%- endblock %}
{%- block header %}
<div id="container">
<div class="header">
<div class="header_container">
<div class="logo"><a href="http://www.pyside.org"><img alt="PySide" src="{{ pathto('_static/pysidelogo.png', 1) }}" width="199" height="102" /></a></div>
<div class="related">
<ul>
{%- block rootrellink %}
<li><a href="{{ pathto( 'index' ) }}">{{ shorttitle|e }}</a></li>
{%- endblock %}
{%- for parent in parents %}
<li>{{ reldelim1 }} <a href="{{ parent.link|e }}" {% if loop.last %}{{ accesskey("U") }}{% endif %}>{{ parent.title }}</a></li>
{%- endfor %}
{%- block relbaritems %} {% endblock %}
</ul>
</div>
</div>
</div>
{%- endblock -%}
{%- block footer %}
<div class="footer">
<a href="http://www.indt.org.br"><img src="{{ pathto('_static/logo_indt.jpg', 1) }}" alt="Indt" border="0" /></a>
<a href="http://www.openbossa.org"><img src="{{ pathto('_static/logo_openbossa.png', 1) }}" alt="Openbossa" border="0" /></a>
<a href="http://qt.nokia.com/"><img src="{{ pathto('_static/logo_qt.png', 1) }}" alt="Qt" border="0" /></a>
<a href="http://www.python.org"><img src="{{ pathto('_static/logo_python.jpg', 1) }}" alt="Python" border="0" /></a>
</div>
</div>
{%- endblock %}
# No top relbar.
{%- block relbar1 %}{%- endblock %}
# No bottom relbar.
{%- block relbar2 %}{%- endblock %}

View file

@ -1,26 +0,0 @@
{% extends "layout.html" %}
{% set title = _('Overview') %}
{% block body %}
<h1>{{ docstitle|e }}</h1>
<p>
Welcome! This is
{% block description %}the documentation for {{ project|e }}
{{ release|e }}{% if last_updated %}, last updated {{ last_updated|e }}{% endif %}{% endblock %}.
</p>
{% block tables %}
<p><strong>{{ _('Indices and tables:') }}</strong></p>
<table class="contentstable" align="center"><tr>
<td width="50%">
<p class="biglink"><a class="biglink" href="{{ pathto("contents") }}">{{ _('Complete Table of Contents') }}</a><br>
<span class="linkdescr">{{ _('lists all sections and subsections') }}</span></p>
<p class="biglink"><a class="biglink" href="{{ pathto("search") }}">{{ _('Search Page') }}</a><br>
<span class="linkdescr">{{ _('search this documentation') }}</span></p>
</td><td width="50%">
<p class="biglink"><a class="biglink" href="{{ pathto("modindex") }}">{{ _('Global Module Index') }}</a><br>
<span class="linkdescr">{{ _('quick access to all modules') }}</span></p>
<p class="biglink"><a class="biglink" href="{{ pathto("genindex") }}">{{ _('General Index') }}</a><br>
<span class="linkdescr">{{ _('all functions, classes, terms') }}</span></p>
</td></tr>
</table>
{% endblock %}
{% endblock %}

View file

@ -1,46 +0,0 @@
{% extends "layout.html" %}
{% set title = _('Index') %}
{% block body %}
<h1 id="index">{% trans key=key %}Index &ndash; {{ key }}{% endtrans %}</h1>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
{%- set breakat = count // 2 %}
{%- set numcols = 1 %}
{%- set numitems = 0 %}
{% for entryname, (links, subitems) in entries %}
<dt>{%- if links -%}<a href="{{ links[0] }}">{{ entryname|e }}</a>
{%- for link in links[1:] %}, <a href="{{ link }}">[{{ loop.index }}]</a>{% endfor -%}
{%- else -%}
{{ entryname|e }}
{%- endif -%}</dt>
{%- if subitems %}
<dd><dl>
{%- for subentryname, subentrylinks in subitems %}
<dt><a href="{{ subentrylinks[0] }}">{{ subentryname|e }}</a>
{%- for link in subentrylinks[1:] %}, <a href="{{ link }}">[{{ loop.index }}]</a>{% endfor -%}
</dt>
{%- endfor %}
</dl></dd>
{%- endif -%}
{%- set numitems = numitems + 1 + (subitems|length) -%}
{%- if numcols < 2 and numitems > breakat -%}
{%- set numcols = numcols+1 -%}
</dl></td><td width="33%" valign="top"><dl>
{%- endif -%}
{%- endfor %}
</dl></td></tr></table>
{% endblock %}
{% block sidebarrel %}
<h4>Index</h4>
<p>{% for key, dummy in genindexentries -%}
<a href="{{ pathto('genindex-' + key) }}"><strong>{{ key }}</strong></a>
{% if not loop.last %}| {% endif %}
{%- endfor %}</p>
<p><a href="{{ pathto('genindex-all') }}"><strong>{{ _('Full index on one page') }}</strong></a></p>
{{ super() }}
{% endblock %}

View file

@ -1,30 +0,0 @@
{% extends "layout.html" %}
{% set title = _('Index') %}
{% block body %}
<h1 id="index">{{ _('Index') }}</h1>
<p>{{ _('Index pages by letter') }}:</p>
<p>{% for key, dummy in genindexentries -%}
<a href="{{ pathto('genindex-' + key) }}"><strong>{{ key }}</strong></a>
{% if not loop.last %}| {% endif %}
{%- endfor %}</p>
<p><a href="{{ pathto('genindex-all') }}"><strong>{{ _('Full index on one page') }}</strong>
({{ _('can be huge') }})</a></p>
{% endblock %}
{% block sidebarrel %}
{% if split_index %}
<h4>Index</h4>
<p>{% for key, dummy in genindexentries -%}
<a href="{{ pathto('genindex-' + key) }}"><strong>{{ key }}</strong></a>
{% if not loop.last %}| {% endif %}
{%- endfor %}</p>
<p><a href="{{ pathto('genindex-all') }}"><strong>{{ _('Full index on one page') }}</strong></a></p>
{% endif %}
{{ super() }}
{% endblock %}

View file

@ -1,57 +0,0 @@
{% extends "layout.html" %}
{% set title = _('Index') %}
{% block body %}
<h1 id="index">{{ _('Index') }}</h1>
{% for key, dummy in genindexentries -%}
<a href="#{{ key }}"><strong>{{ key }}</strong></a> {% if not loop.last %}| {% endif %}
{%- endfor %}
<hr />
{% for key, entries in genindexentries %}
<h2 id="{{ key }}">{{ key }}</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
{%- set breakat = genindexcounts[loop.index0] // 2 %}
{%- set numcols = 1 %}
{%- set numitems = 0 %}
{% for entryname, (links, subitems) in entries %}
<dt>{%- if links -%}<a href="{{ links[0] }}">{{ entryname|e }}</a>
{%- for link in links[1:] %}, <a href="{{ link }}">[{{ loop.index }}]</a>{% endfor -%}
{%- else -%}
{{ entryname|e }}
{%- endif -%}</dt>
{%- if subitems %}
<dd><dl>
{%- for subentryname, subentrylinks in subitems %}
<dt><a href="{{ subentrylinks[0] }}">{{ subentryname|e }}</a>
{%- for link in subentrylinks[1:] %}, <a href="{{ link }}">[{{ loop.index }}]</a>{% endfor -%}
</dt>
{%- endfor %}
</dl></dd>
{%- endif -%}
{%- set numitems = numitems + 1 + (subitems|length) -%}
{%- if numcols < 2 and numitems > breakat -%}
{%- set numcols = numcols+1 -%}
</dl></td><td width="33%" valign="top"><dl>
{%- endif -%}
{%- endfor %}
</dl></td></tr></table>
{% endfor %}
{% endblock %}
{% block sidebarrel %}
{% if split_index %}
<h4>{{ _('Index') }}</h4>
<p>{% for key, dummy in genindexentries -%}
<a href="{{ pathto('genindex-' + key) }}"><strong>{{ key }}</strong></a>
{% if not loop.last %}| {% endif %}
{%- endfor %}</p>
<p><a href="{{ pathto('genindex-all') }}"><strong>{{ _('Full index on one page') }}</strong></a></p>
{% endif %}
{{ super() }}
{% endblock %}

View file

@ -1,147 +0,0 @@
{%- block doctype -%}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
{%- endblock %}
{%- set reldelim1 = reldelim1 is not defined and ' &raquo;' or reldelim1 %}
{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %}
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
{{ metatags }}
<title>{{ title }} &mdash; {{ project }}</title>
<link rel="stylesheet" href="{{ pathto('_static/pysidedocs.css', 1) }}" type="text/css" />
<link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" />
{%- if not embedded %}
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '{{ pathto("", 1) }}',
VERSION: '{{ release|e }}',
COLLAPSE_MODINDEX: false,
FILE_SUFFIX: '{{ file_suffix }}',
HAS_SOURCE: {{ has_source|lower }}
};
</script>
{%- for scriptfile in script_files %}
<script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
{%- endfor %}
{%- if pagename == "screenshots" %}
{%- endif %}
<!--[if lt IE 7]>
<style media="screen" type="text/css">
#container {
height:100%;
}
</style>
<![endif]-->
{%- if use_opensearch %}
<link rel="search" type="application/opensearchdescription+xml"
title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}"
href="{{ pathto('_static/opensearch.xml', 1) }}"/>
{%- endif %}
{%- if favicon %}
<link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
{%- endif %}
{%- endif %}
{%- block linktags %}
{%- if hasdoc('about') %}
<link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
{%- endif %}
{%- if hasdoc('genindex') %}
<link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" />
{%- endif %}
{%- if hasdoc('search') %}
<link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" />
{%- endif %}
{%- if hasdoc('copyright') %}
<link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
{%- endif %}
<link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}" />
{%- if parents %}
<link rel="up" title="{{ parents[-1].title|striptags }}" href="{{ parents[-1].link|e }}" />
{%- endif %}
{%- if next %}
<link rel="next" title="{{ next.title|striptags }}" href="{{ next.link|e }}" />
{%- endif %}
{%- if prev %}
<link rel="prev" title="{{ prev.title|striptags }}" href="{{ prev.link|e }}" />
{%- endif %}
{%- endblock %}
{%- block extrahead %} {% endblock %}
</head>
<body id="{{ pagename }}">
{%- block header %}{% endblock %}
<div id="container">
<div id="header">
<div id="header_container">
<div id="logo"><a href="http://www.pyside.org"><img alt="PySide" src="{{ pathto('_static/pysidelogo.png', 1) }}" width="199" height="102" /></a></div>
<ul id="relbar">
{%- for rellink in rellinks %}
<li class="right">
<a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags }}"
{{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a>
{%- if not loop.first %}{{ reldelim2 }}{% endif %}</li>
{%- endfor %}
{%- block rootrellink %}
<li><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a>{{ reldelim1 }}</li>
{%- endblock %}
{%- for parent in parents %}
<li><a href="{{ parent.link|e }}" {% if loop.last %}{{ accesskey("U") }}{% endif %}>{{ parent.title }}</a>{{ reldelim1 }}</li>
{%- endfor %}
{%- block relbaritems %} {% endblock %}
</ul>
</div>
</div>
<div id="body" >
<div id="sidebar">
{%- block sidebartoc %}
{%- if display_toc %}
<h3><a href="{{ pathto(master_doc) }}">{{ _('Table Of Contents') }}</a></h3>
{{ toc }}
{%- endif %}
{%- endblock %}
{%- block sidebarrel %}
{%- if prev %}
<h3>{{ _('Previous topic') }}</h3>
<p class="topless"><a href="{{ prev.link|e }}"
title="{{ _('previous chapter') }}">{{ prev.title }}</a></p>
{%- endif %}
{%- if next %}
<h3>{{ _('Next topic') }}</h3>
<p class="topless"><a href="{{ next.link|e }}"
title="{{ _('next chapter') }}">{{ next.title }}</a></p>
{%- endif %}
{%- endblock %}
<div id="search_box">
<h3>Quick search</h3>
<form action="{{ pathto('search') }}" method="get">
<input type="text" name="q" id="q" />
<input type="submit" value="Go" id="search_button" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
{%- block document %}
{% block body %} {% endblock %}
{%- endblock %}
</div> <!-- container -->
{%- block footer %}
<div id="footer">
<a href="http://www.indt.org.br"><img src="{{ pathto('_static/logo_indt.jpg', 1) }}" alt="Indt" border="0" /></a>
<a href="http://www.openbossa.org"><img src="{{ pathto('_static/logo_openbossa.png', 1) }}" alt="Openbossa" border="0" /></a>
<a href="http://qt.nokia.com/"><img src="{{ pathto('_static/logo_qt.png', 1) }}" alt="Qt" border="0" /></a>
<a href="http://www.python.org"><img src="{{ pathto('_static/logo_python.jpg', 1) }}" alt="Python" border="0" /></a>
</div>
{%- endblock %}
</div>
</body>
</html>

View file

@ -1,40 +0,0 @@
{% extends "layout.html" %}
{% set title = _('Global Module Index') %}
{% block extrahead %}
{{ super() }}
{% if not embedded and collapse_modindex %}
<script type="text/javascript">
DOCUMENTATION_OPTIONS.COLLAPSE_MODINDEX = true;
</script>
{% endif %}
{% endblock %}
{% block body %}
<div class="section">
<h1 id="global-module-index">{{ _('Global Module Index') }}</h1>
{%- for letter in letters %}
<a href="#cap-{{ letter }}"><strong>{{ letter }}</strong></a> {% if not loop.last %}| {% endif %}
{%- endfor %}
<hr/>
<table class="indextable" cellspacing="0" cellpadding="2">
{%- for modname, collapse, cgroup, indent, fname, synops, pform, dep, stripped in modindexentries %}
{%- if not modname -%}
{%- else -%}
<tr{% if indent %} class="cg-{{ cgroup }}"{% endif %}>
<td>{% if collapse -%}
<img src="{{ pathto('_static/minus.png', 1) }}" id="toggle-{{ cgroup }}"
class="toggler" style="display: none" alt="-" />
{%- endif %}</td>
<td>{% if indent %}&nbsp;&nbsp;&nbsp;{% endif %}
{% if fname %}<a href="{{ fname }}">{% endif -%}
<tt class="xref">{{ stripped|e }}{{ modname|e }}</tt>
{%- if fname %}</a>{% endif %}
{%- if pform and pform[0] %} <em>({{ pform|join(', ') }})</em>{% endif -%}
</td><td>{% if dep %}<strong>{{ _('Deprecated')}}:</strong>{% endif %}
<em>{{ synops|e }}</em></td></tr>
{%- endif -%}
{% endfor %}
</table>
</section>
{% endblock %}

View file

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName>{{ project|e }}</ShortName>
<Description>{% trans docstitle=docstitle|e %}Search {{ docstitle }}{% endtrans %}</Description>
<InputEncoding>utf-8</InputEncoding>
<Url type="text/html" method="get"
template="{{ use_opensearch }}/{{ pathto('search') }}?q={searchTerms}&amp;check_keywords=yes&amp;area=default"/>
<LongName>{{ docstitle|e }}</LongName>
{% block extra %} {# Put e.g. an <Image> element here. #} {% endblock %}
</OpenSearchDescription>

View file

@ -1,4 +0,0 @@
{% extends "layout.html" %}
{% block body %}
{{ body }}
{% endblock %}

View file

@ -1,26 +0,0 @@
{% extends "layout.html" %}
{% set title = _('Search') %}
{% set script_files = script_files + ['_static/searchtools.js'] %}
{% block body %}
<div class="section">
<h1 id="search-documentation">Search Results</h1>
<div id="fallback" class="admonition warning">
<script type="text/javascript">$('#fallback').hide();</script>
<p>
{% trans %}Please activate JavaScript to enable the search
functionality.{% endtrans %}
</p>
</div>
{% if search_performed %}
{% if not search_results %}
<p>{{ _('Your search did not match any results.') }}</p>
{% endif %}
{% endif %}
<div id="search-results">
</div>
</div>
{% endblock %}
{% block footer %}
{{ super() }}
<script type="text/javascript" src="searchindex.js"></script>
{% endblock %}

12
doc/_themes/pysidedocs/searchbox.html vendored Normal file
View file

@ -0,0 +1,12 @@
{%- if pagename != "search" %}
<div id="searchbox" style="display: none">
<h3>{{ _('Quick search') }}</h3>
<form class="search" action="{{ pathto('search') }}" method="get">
<input type="text" name="q" id="q" size="18" />
<input type="submit" value="{{ _('Go') }}" id="search_button" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
{%- endif %}

View file

@ -1,3 +0,0 @@
[Dolphin]
ShowPreview=true
Timestamp=2009,10,13,10,27,39

View file

@ -1,232 +0,0 @@
/// XXX: make it cross browser
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
*/
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
"group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {}
}
/**
* small helper function to urldecode strings
*/
jQuery.urldecode = function(x) {
return decodeURIComponent(x).replace(/\+/g, ' ');
}
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s == 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
}
/**
* small function to check if an array contains
* a given item.
*/
jQuery.contains = function(arr, item) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] == item)
return true;
}
return false;
}
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node) {
if (node.nodeType == 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 && !jQuery.className.has(node.parentNode, className)) {
var span = document.createElement("span");
span.className = className;
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this)
});
}
}
return this.each(function() {
highlight(this);
});
}
/**
* Small JavaScript module for the documentation.
*/
var Documentation = {
init : function() {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initModIndex();
},
/**
* i18n support
*/
TRANSLATIONS : {},
PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; },
LOCALE : 'unknown',
// gettext and ngettext don't access this so that the functions
// can savely bound to a different name (_ = Documentation.gettext)
gettext : function(string) {
var translated = Documentation.TRANSLATIONS[string];
if (typeof translated == 'undefined')
return string;
return (typeof translated == 'string') ? translated : translated[0];
},
ngettext : function(singular, plural, n) {
var translated = Documentation.TRANSLATIONS[singular];
if (typeof translated == 'undefined')
return (n == 1) ? singular : plural;
return translated[Documentation.PLURALEXPR(n)];
},
addTranslations : function(catalog) {
for (var key in catalog.messages)
this.TRANSLATIONS[key] = catalog.messages[key];
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
this.LOCALE = catalog.locale;
},
/**
* add context elements like header anchor links
*/
addContextElements : function() {
$('div[id] > :header:first').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this headline')).
appendTo(this);
});
$('dt[id]').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this definition')).
appendTo(this);
});
},
/**
* workaround a firefox stupidity
*/
fixFirefoxAnchorBug : function() {
if (document.location.hash && $.browser.mozilla)
window.setTimeout(function() {
document.location.href += '';
}, 10);
},
/**
* highlight the search words provided in the url in the text
*/
highlightSearchWords : function() {
var params = $.getQueryParameters();
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
if (terms.length) {
var body = $('div.body');
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlight');
});
}, 10);
$('<li class="highlight-link"><a href="javascript:Documentation.' +
'hideSearchWords()">' + _('Hide Search Matches') + '</a></li>')
.appendTo($('.sidebar .this-page-menu'));
}
},
/**
* init the modindex toggle buttons
*/
initModIndex : function() {
var togglers = $('img.toggler').click(function() {
var src = $(this).attr('src');
var idnum = $(this).attr('id').substr(7);
console.log($('tr.cg-' + idnum).toggle());
if (src.substr(-9) == 'minus.png')
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
else
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
}).css('display', '');
if (DOCUMENTATION_OPTIONS.COLLAPSE_MODINDEX) {
togglers.click();
}
},
/**
* helper function to hide the search marks again
*/
hideSearchWords : function() {
$('.sidebar .this-page-menu li.highlight-link').fadeOut(300);
$('span.highlight').removeClass('highlight');
},
/**
* make the url absolute
*/
makeURL : function(relativeURL) {
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
},
/**
* get the current relative url
*/
getCurrentURL : function() {
var path = document.location.pathname;
var parts = path.split(/\//);
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
if (this == '..')
parts.pop();
});
var url = parts.join('/');
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
}
};
// quick alias for translations
_ = Documentation.gettext;
$(document).ready(function() {
Documentation.init();
});

File diff suppressed because one or more lines are too long

View file

@ -19,7 +19,7 @@ strong {
font-weight:bold; font-weight:bold;
} }
#body { .document {
padding-bottom: 90px; padding-bottom: 90px;
} }
@ -31,7 +31,7 @@ strong {
background-color: white; background-color: white;
} }
#footer { .footer {
position: absolute; position: absolute;
bottom: 0px; bottom: 0px;
margin-top: 50px; margin-top: 50px;
@ -43,40 +43,40 @@ strong {
width: 100%; width: 100%;
} }
#footer img { .footer img {
margin-left: 8px; margin-left: 8px;
margin-right: 8px; margin-right: 8px;
} }
#sidebar { .sphinxsidebar {
float: left; float: left;
width: 250px; width: 250px;
padding: 0px 10px 0px 10px; padding: 0px 10px 0px 10px;
text-align: left; text-align: left;
} }
#sidebar ul { .sphinxsidebar ul {
padding: 0px; padding: 0px;
margin: 0px; margin: 0px;
list-style-position: inside; list-style-position: inside;
} }
#sidebar > ul { .sphinxsidebar > ul {
padding: 0px; padding: 0px;
margin: 0px; margin: 0px;
} }
#sidebar ul li { .sphinxsidebar ul li {
margin-left: 10px; margin-left: 10px;
padding: 0px; padding: 0px;
} }
#sidebar h3, #sidebar h3 a { .sphinxsidebar h3, .sphinxsidebar h3 a {
font-weight: bold; font-weight: bold;
color: #333; color: #333;
} }
#body > div.section { .documentwrapper {
margin-left: 270px; margin-left: 270px;
text-align: left; text-align: left;
background-color: #ffffff; background-color: #ffffff;
@ -92,7 +92,7 @@ h1 {
padding-bottom: 15px; padding-bottom: 15px;
padding-top: 15px; padding-top: 15px;
border-bottom: 1px solid #c2c2c2; border-bottom: 1px solid #c2c2c2;
text-transform:uppercase; /* text-transform:uppercase; */
margin-right: -100px; margin-right: -100px;
position: relative; position: relative;
left: -50px; left: -50px;
@ -138,11 +138,21 @@ pre * {
.pre { .pre {
font: 100% monospace; font: 100% monospace;
color: black;
} }
.headerlink { .headerlink {
display: none; font-size: 100%;
color: inherit;
float: right;
visibility: Hidden
}
h1 .headerlink {
padding-right: 50px;
}
h1:hover .headerlink, h2:hover .headerlink, h3:hover .headerlink {
visibility: Visible;
} }
a, a:visited { a, a:visited {
@ -255,24 +265,24 @@ hr {
} }
/******************* TOPO *****************************/ /******************* TOPO *****************************/
#header { .header {
background-image: url(bg_topo.jpg); background-image: url(bg_topo.jpg);
background-repeat: repeat-x; background-repeat: repeat-x;
height: 147px; height: 147px;
} }
#header_container { .header_container {
background-image: url(bg_header.png); background-image: url(bg_header.png);
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: 100px 0px; background-position: 100px 0px;
} }
#logo { .logo {
text-align: left; text-align: left;
margin-bottom: 10px; margin-bottom: 10px;
} }
#search_box { #searchbox {
border-top: 1px solid #989898; border-top: 1px solid #989898;
padding-top: 10px; padding-top: 10px;
margin-left: -10px; margin-left: -10px;
@ -340,31 +350,39 @@ em {
/******** REL bar *********/ /******** REL bar *********/
#relbar { .related {
padding: 0px 10px 0px 10px; display: inline;
}
.related ul {
padding: 0px 0px 0px 10px;
margin: 0px; margin: 0px;
text-align: left; text-align: left;
background-image: url(relbar_bg.png); background-image: url(relbar_bg.png);
} }
#relbar li { .related li {
display: inline; display: inline;
color: white; color: white;
font-weight: bold; font-weight: bold;
} }
#relbar li a { .related li a {
color: inherit; color: inherit;
line-height: 35px; line-height: 35px;
font-weight: bold; font-weight: bold;
vertical-align: middle; vertical-align: middle;
} }
#relbar li.right { .related li.right {
float: right; float: right;
margin-right: 5px; margin-right: 5px;
} }
.related h3 {
display: none;
}
.align-center { .align-center {
text-align: center; text-align: center;
} }
@ -403,13 +421,57 @@ table.footnote {
} }
tt.descname { tt.descname {
font-size: 120%;
font-weight: bold; font-weight: bold;
} }
dl.method { #functions ul, #virtual-functions ul, #slots ul, #signals ul, #static-functions ul {
border-top: 1px solid #c2c2c2; list-style: none;
margin-right: -100px; margin: 0px;
position: relative; padding: 10px;
left: -50px; border: 1px solid #ddd;
padding: 10px 50px 0px 50px; background-color: #f4f4f4;
-moz-border-radius:10px;
-webkit-border-radius:10px;
-khtml-border-radius:10px;
} }
#synopsis span.pre {
color: #009491;
font-weight: bolder;
}
#detailed-description .class dt, #detailed-description .method dt, #detailed-description .attribute dt {
margin: 0px;
padding: 10px;
border: 1px solid #ddd;
background-color: #f4f4f4;
-moz-border-radius:10px;
-webkit-border-radius:10px;
-khtml-border-radius:10px;
}
.pysidetoc ul {
list-style: none;
padding: 0px;
margin: 0px;
}
.pysidetoc em {
font-style: normal;
}
.pysidetoc strong {
display: block;
padding: 5px;
border: 1px solid #ddd;
background-color: #f4f4f4;
-moz-border-radius:6px;
-webkit-border-radius:6px;
-khtml-border-radius:6px;
}
.hide {
display: none;
}

Some files were not shown because too many files have changed in this diff Show more