Compare commits

..

438 commits

Author SHA1 Message Date
Renato Filho
3f3f52a960 Bumped version to 1.0.4. 2011-06-22 11:24:31 -03:00
Renato Filho
7220804be6 Created test for QObject.inherits.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-06-20 17:21:12 -03:00
Renato Filho
7f611d1c53 Removed glue code for QObject.inherits function.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-06-20 17:20:50 -03:00
Renato Filho
aa9e8ca7ef Fixed QWidget.parentWidget return policy.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-06-17 11:24:28 -03:00
Renato Filho
db40ec67b1 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>
2011-06-17 11:16:43 -03:00
Marcelo Lira
2b1df1698c 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>
2011-06-15 17:35:17 -03:00
Hugo Parente Lima
07229012b7 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>
2011-06-15 14:45:25 -03:00
Hugo Parente Lima
933669eeb7 Fix bug 822 - "Can't use QApplication without X"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-06-13 17:25:08 -03:00
Marcelo Lira
1be25c54bb 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>
2011-06-10 18:32:05 -03:00
Marcelo Lira
ee602e80f1 Fixed default return value for "QStyleOptionViewItem QAbstractItemView::viewOptions() const".
Wrong code would be generated if compiling avoiding the "protected hack".
2011-06-09 15:22:34 -03:00
Hugo Parente Lima
82f4f13d27 Fix bug 877 - "Fatal Python error on application quit."
Reviewer: Renato Araújo <renato.filho@openbossa.org>
2011-06-08 20:04:16 -03:00
Hugo Parente Lima
35b252ab2b Fix bug 870 - "QStylePainter.drawControl doesn't draw anything"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-06-08 18:17:59 -03:00
Renato Filho
ba2510c52a Implemented support to MSG type on windows. 2011-06-08 16:20:53 -03:00
Renato Filho
45bf56e831 Removed unnecessary functions from QByteArray.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-06-08 15:20:36 -03:00
Hugo Parente Lima
a698807fd0 Fix bug 869 - "QDateTimeEdit initial time problem"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-06-08 15:05:15 -03:00
Hugo Parente Lima
e48aa92103 Fix bug 424 - "QDockWidget.setTitleBarWidget does not accept 0" 2011-06-07 15:25:07 -03:00
Hugo Parente Lima
82612584c6 Show perm links only when the mouse hover on title. 2011-06-06 18:54:48 -03:00
Hugo Parente Lima
99b07e3221 Update javascript files used in sphinx generated documentation. 2011-06-06 18:54:48 -03:00
Renato Filho
00b1216fb9 Created unit test for bug #860.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Hugo Parente <hugo.lima@openbossa.org>
2011-06-03 17:35:18 -03:00
Renato Filho
21dc823972 Fixed signal connection with native c++ slot.
Fixes bug #860.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Hugo Parente <hugo.lima@openbossa.org>
2011-06-03 17:33:53 -03:00
Hugo Parente Lima
2b78766cdc 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>
2011-06-02 17:53:47 -03:00
Hugo Parente Lima
80c1011721 Fix bug 631 - "QSocketNotifier: Accept file-like object (with .fileno() method) in constructor" 2011-06-02 17:53:47 -03:00
Hugo Parente Lima
0d2705eb11 Avoid warnings about redefined constants. 2011-06-02 17:53:47 -03:00
Hugo Parente Lima
0b1eea7116 Unit test for bug862 - "Problems when printing objects" 2011-06-02 17:53:46 -03:00
Marcelo Lira
8127218741 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>
2011-06-02 17:11:28 -03:00
Marcelo Lira
046bccece9 Moved internalPointer methods code injection into a code template. 2011-06-02 17:11:28 -03:00
Renato Filho
bec5ca48fd Updated example to handle with Python warnings.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-06-02 16:18:05 -03:00
Hugo Parente Lima
75154e2f2f 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>
2011-06-02 11:04:24 -03:00
Renato Filho
606a90d406 Created unit test for QObject.eventFilter function.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-06-01 14:05:29 -03:00
Renato Filho
9408505a24 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>
2011-06-01 14:04:31 -03:00
renato araujo
2e985afb3a Created ClassInfo documentation.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
              Hugo Parente <hugo.lima@openbossa.org>
2011-05-30 16:26:48 -03:00
Renato Filho
35630f32ff Updated generatorrunner dependency version. 2011-05-30 16:26:40 -03:00
Hugo Parente Lima
30444ccab7 Minor change in a doc code snippet. 2011-05-30 14:44:09 -03:00
Renato Filho
2aeac5e05b Fix memory leak on QEasingCuverFunctor. 2011-05-24 14:49:54 -03:00
Renato Filho
774223adbd Check if the same python object arrive on destroyed signal.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-23 17:43:42 -03:00
Renato Filho
959aa385f5 Created DestroyListener class.
This class is used to keep the Python object live until the signal destroyed emission.

With this is possible to use the QObject on destruction signal.

Fixes bug #505.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-23 17:43:38 -03:00
Renato Filho
05431cbfc0 Fixed reference leek on global receiver callback call.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-23 17:43:35 -03:00
Renato Filho
1abf8c6149 Created unit test for ClassInfo class.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-23 17:43:31 -03:00
Renato Filho
04be2b1ca2 Implemented PySide::ClassInfo Object.
This class reproduce the Qt macro Q_CLASSINFO behavior.

Eg.:
    @QtCore.ClassInfo(author='PySide', url='http://www.pyside.org')

fixes bug #705.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-23 17:43:27 -03:00
Renato Filho
fe06dba43c Create checkType for libpyside objects.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-23 17:43:23 -03:00
Renato Filho
cef6db9548 Fix indentation.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-23 17:43:03 -03:00
Marcelo Lira
b112512793 Added the missing QPixmapCache.Key class to the type system.
Unit tests for QPixmapCache were also added.

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2011-05-19 14:45:00 -03:00
Renato Filho
6e16fd86f4 Create unit test for function QEasingCuver.setCustomType.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-19 10:29:59 -03:00
Renato Filho
40277720ae Implemented support to QEasingCurve.setCustomType.
fixes bug #725.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-19 10:29:59 -03:00
Renato Filho
b9fd78a65f Create PySideWeakRef class.
With this class you can use a c function as a callback on PyObject destruction.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-19 10:29:59 -03:00
Hugo Parente Lima
d5fd41d8ee Remove ugly gray background on documentation see-also links. 2011-05-18 17:26:09 -03:00
Lauro Neto
a3628e8752 Update test for python 2.5
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
Reviewer: Hugo Lima <hugo.lima@openbossa.org>
2011-05-18 15:44:33 -03:00
Hugo Parente Lima
eb133c76b8 Fix bug 803 - "QWebElementCollection.operator[] is not implemented"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-05-18 14:29:29 -03:00
Paulo Alcantara
a859097f56 Fix typo
Signed-off-by: Paulo Alcantara <paulo.alcantara@openbossa.org>
2011-05-18 11:05:51 -03:00
Renato Filho
3546a3674f Implemented convertion from Python types for QDate, QTime, QDateTime.
Fixes bug #680

Reviewer: pcacjr <pcacjr@gmail.com>
          Hugo Parente <hugo.lima@openbossa.org>
2011-05-18 11:00:03 -03:00
Hugo Parente Lima
75d27311e5 Fix bug 686 - "Request to make Q[Mutex|Read|Write]Locker context managers"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-05-17 18:41:54 -03:00
Hugo Parente Lima
ba448baf4d White spaces removal... 2011-05-17 18:41:39 -03:00
Marcelo Lira
e1a137d33e Unit test for bug 634, based on code from Marcus Lindblom.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2011-05-17 17:50:08 -03:00
Renato Filho
82fc89093c Created unit test for bug #854.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Hugo Parente <hugo.lima@openbossa.org>
2011-05-17 10:48:30 -03:00
Renato Filho
29cd3b1351 Fixed kee-reference rule.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Hugo Parente <hugo.lima@openbossa.org>
2011-05-17 10:48:30 -03:00
Hugo Parente Lima
5860f786a0 Fix bug 857 - "64bit Windows build broken"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.filho@openbossa.org>
2011-05-16 15:19:56 -03:00
Marcelo Lira
5ae1e6460b Added tests for bug #716 - QPersistentModelIndex isn't convertible to QModelIndex
The main test (exactly the same as reported) was added to QtGui tests,
but also extended QAbstractItemModel test with a case that is the
essence of the problem.

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

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2011-05-13 17:25:08 -03:00
Marcelo Lira
bf4e4cdb89 QPersistentModelIndex has its "operator const QModelIndex&() const" method back. 2011-05-13 17:25:08 -03:00
Paulo Alcantara
5a408b2b9d Create unit tests for bug #606
Signed-off-by: Paulo Alcantara <paulo.alcantara@openbossa.org>

Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-05-13 14:02:41 -03:00
Paulo Alcantara
a8b02e046b Fix bug #606
Add toTuple() function to these all classes:
    - QPoint/QPointF/QSize/QSizeF/QVector2D/QVector3D/QVector4D
    - QLine/QLineF/QColor

Signed-off-by: Paulo Alcantara <paulo.alcantara@openbossa.org>

Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-05-13 14:02:41 -03:00
Paulo Alcantara
7780ccddc1 Add template to toTuple() functions
Signed-off-by: Paulo Alcantara <paulo.alcantara@openbossa.org>
2011-05-13 14:02:41 -03:00
Hugo Parente Lima
ac377b7fbd Always use the local Qt headers + global.h.in cleanup.
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-05-12 21:15:35 -03:00
Hugo Parente Lima
63c4cb9f9e Only add Qt4.6 classes when using Qt4.6 on QtTest and QtGui. 2011-05-12 19:04:22 -03:00
Hugo Parente Lima
70a776c6ff Correctly set SUPPORTED_QT_VERSION variable to the current Qt version. 2011-05-12 19:01:47 -03:00
Hugo Parente Lima
f4128e89ed Add since attribute for classes and enums added on Qt4.6 and Qt4.7. 2011-05-12 19:00:44 -03:00
Hugo Parente Lima
b552641feb Fix QGraphicsItem compilation on Qt4.5. 2011-05-12 18:59:48 -03:00
Hugo Parente Lima
c08b1ba563 Fix QColor wrapper compilation on Qt4.5. 2011-05-12 18:58:59 -03:00
Hugo Parente Lima
0c4fbcf5ad Be compatible with Qt4.5, i.e. no QScopedPointer. 2011-05-12 18:56:53 -03:00
Hugo Parente Lima
4d90463624 Remove typesystem verbosity after fix of bug 417.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2011-05-11 11:13:13 -03:00
Hugo Parente Lima
a5249a70e1 Use add-function on QCoreApplication and QApplication constructors.
This was needed after a fix in the shiboken generator regarding the
tp_init initialization.
2011-05-11 11:13:13 -03:00
Renato Filho
3669f32af8 Created unit test for bug #312.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-11 10:18:36 -03:00
Renato Filho
78e120ec02 Uses QMetaObject revision 3.
This allow to register signal and slot in any order.

Fixes bug #312

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-11 10:18:16 -03:00
Renato Filho
fc331f37e3 Created test for mew pythonic functions on QTransform class.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-10 16:50:43 -03:00
Renato Filho
99c62a3a09 Create pythonic functions for QTransform class.
fixes bug #615.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-10 16:50:21 -03:00
Hugo Parente Lima
18e0ece1c9 Fix assert in bug 722 unit test.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2011-05-10 10:25:51 -03:00
Hugo Parente Lima
54e97b8e14 Remove the restriction of detecing QtOpenGL module just when the gl.h header was found.
This is needed to be able to compile the QtOpenGL module on Linux when using OpenGL-ES
backend. On the other hand OpenGL-ES support isn't yet supported under MS Windows but I
don't think that this should be a problem at all.
2011-05-10 10:25:51 -03:00
Renato Filho
450d1a98a5 Avoid run PyObjectWrapper operators without python interpreter.
Fixes bug #829.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-09 16:32:48 -03:00
Renato Filho
7fb34b3685 Created unit test for bug #847.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-09 15:47:05 -03:00
Paulo Alcantara
8ca58af304 Create unit test for bug #835
Signed-off-by: Paulo Alcantara <paulo.alcantara@openbossa.org>

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-06 15:12:15 -03:00
Paulo Alcantara
6e95894d10 Fix bug #835 - "pyside breaks descriptor protocol"
Signed-off-by: Paulo Alcantara <paulo.alcantara@openbossa.org>

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-06 15:11:06 -03:00
Hugo Parente Lima
2d5207b32c Fix path of pysideqmlregistertype.cpp. 2011-05-05 16:46:58 -03:00
Hugo Parente Lima
206474a5a3 Fix bug 825 - "Can't register a class using that uses metaclasses in QML using qmlRegisterType"
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-05-05 16:13:59 -03:00
Renato Filho
964eb13adf Updated snippets code to use QFileSystemModel instead of deprecated class QDirModel.
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-05 15:45:26 -03:00
Hugo Parente Lima
29c263eeb8 Moved unit test of bug 834 from QtCore to QtGui, as it tests QtGui classes. 2011-05-05 14:18:39 -03:00
Renato Filho
f70ff13351 Created unit test for bug #820.
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-05 11:42:02 -03:00
Renato Filho
a31fb14a1f Fixed signal name parser.
Fixes bug #820.

Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-05 11:41:25 -03:00
Renato Filho
84b4f2da0a Created unit test for QSysInfo class.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-04 15:51:14 -03:00
Renato Filho
99ca556810 Fixed QSysInfo.Endian enum detection on MacOs.
Fixes bug #809.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-04 15:51:06 -03:00
Renato Filho
0dd57ef4a5 Created unit test fo QMacStyle class.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-04 15:50:55 -03:00
Renato Filho
645c80134f Included QMacStyle class check.
Included QMacStyle header on global include.

Fixes bug #840

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-04 15:50:36 -03:00
Hugo Parente Lima
06051ca647 Fix bug 786 - "There's no __eq__ for all classes inherited from ObjectDescription<T> due to an Apiextractor bug."
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2011-05-04 14:08:15 -03:00
Renato Filho
3590ad14d5 Fixed some typos on unit test for bug #841 2011-05-04 13:51:59 -03:00
Renato Filho
95dd5c0861 Created unit test for bug #785.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-04 13:51:59 -03:00
Renato Filho
34f0fe99da Put back missing functions for class QItemSelection.
fixes bug #785.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-04 13:51:59 -03:00
Hugo Parente Lima
4175398b07 Fix bug 797 - "error on ui file load"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2011-05-04 10:59:42 -03:00
Hugo Parente Lima
9b793705fe Fix bug 844 - "Crash in QGraphicsItem::toGraphicsObject when printing obj reference"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2011-05-03 15:46:24 -03:00
Paulo Alcantara
f5669ba342 Create unit test for bug #834
Signed-off-by: Paulo Alcantara <paulo.alcantara@openbossa.org>

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-03 14:49:23 -03:00
Paulo Alcantara
a0d7bab4be Fix bug #834 - "Segfault on childEvent"
The fix was basically setting the owner attribute to a correct value.

Signed-off-by: Paulo Alcantara <paulo.alcantara@openbossa.org>

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-03 14:49:04 -03:00
Renato Filho
393ddb46fa Create manually dir for tests.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-03 14:48:55 -03:00
Renato Filho
13d505c9c0 Fixed QStandardItem::clone and QStandardItemModel::setItemPrototype ownership rules.
Fixes bug #841.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-03 14:47:24 -03:00
Renato Filho
9ebe4ba6af Updated unit test for bug #617 to new enum repr format.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-02 19:12:01 -03:00
Renato Filho
e9c7505375 Created unit test for bug #826.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-02 19:11:56 -03:00
Renato Filho
ee7b26545b Created unit test for bug #839.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-02 19:11:50 -03:00
Renato Filho
49ba9c9cd5 Implemented QTestTouch functions.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-05-02 19:11:20 -03:00
Renato Filho
af37aaf259 Bump version and updated dependency version required. 2011-04-28 17:59:49 -03:00
Renato Filho
011db01f65 Fixed bug 728 to use the correct arguments on function call.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-28 17:43:01 -03:00
Paulo Alcantara
1cc2ccbcd8 Create unit test for QIPv6Address
Signed-off-by: Paulo Alcantara <paulo.alcantara@openbossa.org>

Reviewer: Renato Araujo <renato.araujo@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-28 17:43:01 -03:00
Paulo Alcantara
2130c2dce5 Fix bug #788 - "QIPv6Address.__getitem__ is missing."
Signed-off-by: Paulo Alcantara <paulo.alcantara@openbossa.org>

Reviewer: Renato Araujo <renato.araujo@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-28 17:43:01 -03:00
Renato Filho
d34e154190 Fixed QFileDialog functions which used QString as pointer to return values
Fixes bug #819

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-28 17:43:01 -03:00
Renato Filho
3b4499891c Fixed QKeyEvent polymorphic-id-expression to support QEvent::ShortcutOverride.
Applyed patch from Evan Patterson <epatters@enthought.com>
Fixes bug #833

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-28 17:43:01 -03:00
Hugo Parente Lima
fa34fa2720 Fix documentation bug 853 - "Provide constants for Qt and PySide version"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2011-04-28 16:52:20 -03:00
Lauro Neto
b32b614d1b Update inheritance diagram sphinx extension.
Better handling missing classes.

Reviewer: Renato Araujo <renato.filho@openbossa.org>
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-28 14:56:55 -03:00
Renato Filho
a68d4b04f3 Created unit test for bug 829.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-28 10:34:58 -03:00
Renato Filho
955316b5ca Implemented stream operator for PyObjectWrapper.
Fixes bug #829.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-28 10:34:49 -03:00
Renato Filho
75bcc4dbdd Fixed QVariant conversion for dictionary.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-28 10:25:25 -03:00
Hugo Parente Lima
aa8c4f6b2e Fix bug 836 - "Pyside crashes with more than four base classes"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2011-04-27 19:08:40 -03:00
Hugo Parente Lima
1ccb6de499 Fix bug 766 - "Constructor "QImage(const char* const xpm[])" missing"
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-27 15:01:52 -03:00
Hugo Parente Lima
8d9bf59fb1 Fix bugs 776 and 777
Bug 776 - "Operator "QPolygon::operator<<(QPoint)" missing"
Bug 777 - "Operator "QPolygon::operator<<(QVector<QPoint>)" missing"
2011-04-26 18:02:29 -03:00
Renato Filho
2179e02862 Fix test on windows.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-04-26 16:36:32 -03:00
Renato Filho
afc0bb1fee Created unit test for bug #778.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-04-26 16:36:32 -03:00
Renato Filho
de6a90bdcb Implemented support to iterator on QTreeWidgetItemIterator.
Fixes bug #778.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-04-26 16:35:52 -03:00
Renato Filho
1f013e75e3 Created unit test to QKeySequence convertion to QVariant.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-26 10:07:31 -03:00
Renato Filho
5349174a3c Fixed QKeySequence convertion to QVariant.
Fixes bug #775.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-26 10:07:31 -03:00
Renato Filho
cbdafab9e7 Created unit test for QKeySequence.operator[].
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-26 10:07:31 -03:00
Renato Filho
3d3dc46531 Implemented support to QKeySequence.operator[].
Fixes bug #774.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-26 10:07:31 -03:00
Hugo Parente Lima
eb6145b96b Fix bugs 771, 772, 779, 780, 781, 782, 783 and 784
Bug 771 - "Constructor "QStandardItem(const QStandardItem&)" missing"
Bug 772 - "Method "QPainter::drawConvexPolygon(const QPoint* points, int pointCount)" missing"
Bug 779 - "Method "QPainter::drawLines(const QLine* lines, int lineCount)" missing"
Bug 780 - "Method "QPainter::drawLines(const QPoint*, int)" missing"
Bug 781 - "Method "QPainter::drawPoints(const QPoint*, int)" missing"
Bug 782 - "Method "QPainter::drawPolygon(const QPointF*, int, Qt::FillRule)" missing"
Bug 783 - "Method "QPainter::drawPolyline(const QPoint*, int)" missing"
Bug 784 - "Method "QPainter::drawRects(const QRect*, int)" missing"

Reviewer: Renato Araújo <renato.araujo@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-25 18:11:36 -03:00
Hugo Parente Lima
101671f474 Fix bug 768 - "Method "QGraphicsItemGroup* QGraphicsScene::createItemGroup(const QList<QGraphicsItem*>& items)" missing"
Fix bug 769 - "Method "QGraphicsScene::destroyItemGroup(QGraphicsItemGroup* group)" missing"

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-25 15:14:33 -03:00
Hugo Parente Lima
d7185772bc Fix bug 765 - "Method "QRect QStyle::itemTextRect(const QFontMetrics&,constQRect&,int,bool,const QString&) const" missing" 2011-04-25 15:14:33 -03:00
Hugo Parente Lima
0c63e37820 Fix bug 760 - "Method "void QMatrix::map(int x,int y,int* tx,int* ty)const" missing"
Fix bug 761 - "Method "void QMatrix::map(qreal x, qreal y, qreal* tx, qreal* ty) const" missing"
2011-04-25 15:14:33 -03:00
Renato Filho
6b3a7f904f Fix unit test bug_750 and qpicture_test to avoid deadlock in some plataforms.
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-25 14:18:28 -03:00
Renato Filho
7d35681fce Implemented test for QWebFrame.metadata function.
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-25 14:18:22 -03:00
Renato Filho
a07d192625 Implemented conversion from QMultiMap to Python dictonary.
Fixes bug #773.

Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-25 14:17:48 -03:00
Renato Filho
cd1dbb0b9d Created unit test for function QPicture.setData
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-25 11:28:04 -03:00
Renato Filho
1efb6aeacc Implemented necessary convertions rules for function QPicture.setData.
Fixes bug #759

Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-25 11:27:14 -03:00
Renato Filho
db9547be72 Fixed reference leak on PySideSignal for QTimer.SingleShot
Fixes bug #815.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-20 18:44:53 -03:00
Lauro Neto
c36b1ff7e7 Set WA_InputMethodEnabled in test.
If WA_InputMethodMethod is not set, setFocusWidget will fail
in a ASSERT in a debug-compiled Qt.

Reviewer: Hugo Lima <hugo.lima@openbossa.org>
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-20 16:57:34 -03:00
Renato Filho
df742a5905 Created unit test for bug #811.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-20 09:33:46 -03:00
Renato Filho
709420df8e fix QTextBlock.setUserData reference leak.
Fixes bug #811.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-20 09:33:46 -03:00
Lauro Neto
6700ddb9cb Fix bug 814 test.
Using the modelData property name was causing problems
with a debug-build Qt.

Reviewer: Renato Araujo <renato.araujo@openbossa.org>
Reviewer: Hugo Lima <hugo.lima@openbossa.org>
2011-04-19 16:37:22 -03:00
Renato Filho
3fb374e271 Fixed test to avoid problems with float numbers in different archs.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-18 17:45:04 -03:00
Renato Filho
e6b3d26d74 Exported missing enums on phonon.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-18 17:45:01 -03:00
Renato Filho
6cd49a79f6 Created unit test for ObjectDescription.fromIndex.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-18 17:44:59 -03:00
Renato Filho
8807a885e6 Implemented function ObjectDescription.fromIndex.
Fixes bug #787.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-18 17:44:19 -03:00
Renato Filho
406293f5aa Fix round problems on unit test. 2011-04-15 19:26:15 -03:00
Renato Filho
04a2f23988 Create unit test for bug #757.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-15 19:23:02 -03:00
Marcelo Lira
13f6d71f20 Fixes Bug #757 - Constructor "QPixmap(const char* const[] xpm)" missing.
http://bugs.pyside.org/show_bug.cgi?id=757

Reviewer: Renato Araujo <renato.filho@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-15 19:22:32 -03:00
Renato Filho
a5b785fff4 Avoid delete file from source dir. 2011-04-15 17:14:08 -03:00
Hugo Parente Lima
1374006206 Fix bug 717 - "QByteArray doesn't honor \0 inside strings."
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-14 20:42:49 -03:00
Hugo Parente Lima
a230b243d0 Fix inject code of QByteArray::fromRawData.
The QByteArray returned must share, nto copy, the string contents.
2011-04-14 20:09:30 -03:00
Marcelo Lira
2400157808 Fixes bug #755 - Method "void QInputContext::setFocusWidget(QWidget*)" missing
Also added an unit test.

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

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2011-04-14 19:15:56 -03:00
Marcelo Lira
e24401e586 Fixes bugs 753 and 754.
Bug #753 - Method "void QTextDocument::undo(QTextCursor*)" missing
Bug #754 - Method "void QTextDocument::redo(QTextCursor*)" missing

Also added an unit test.
2011-04-14 19:15:56 -03:00
Marcelo Lira
1d842f57a2 Fixes bug #741 - Method "qreal QTextLine::cursorToX(int*,Edge) const" missing.
Also added unit tests.

http://bugs.pyside.org/show_bug.cgi?id=741
2011-04-14 19:15:56 -03:00
Marcelo Lira
39c32e3712 Fixes bug #742 - Method "void QPrinter::getPageMargins(qreal*,qreal*,qreal*,qreal*,Unit) const" missing
Also added unit tests.

http://bugs.pyside.org/show_bug.cgi?id=742
2011-04-14 19:15:56 -03:00
Marcelo Lira
30c19e9c41 Fixed CMakeLists.txt files to prevent static source files of being deleted by "make clean". 2011-04-14 19:15:56 -03:00
Renato Filho
8408da40ca The funcition QSplashScreen.repaint was removed because that override the QWidget.repaint.
This will save some genereted code and does not produce any side-effect.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-14 18:52:20 -03:00
Renato Filho
96750087d9 Created unittest for bug #750.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-14 18:52:05 -03:00
Renato Filho
59ab3c3049 Put back QPainter.fontInfo.
Fixes bug #750.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-14 18:52:00 -03:00
Renato Filho
46fc033929 Created unit test for bug #743.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-14 18:51:51 -03:00
Renato Filho
a0b43fbc23 Implemented support to mapping on QMatrix4x4.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-14 18:51:51 -03:00
Renato Filho
94310a7b19 Created unit test for bug #740.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-14 17:52:42 -03:00
Renato Filho
d71a6a8c3a Implemented function QBitmap.fromData.
Fixes bug #740

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-14 17:52:24 -03:00
Renato Filho
a5e20dfd75 Created unit test for bug #722.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-04-13 18:30:54 -03:00
Renato Filho
3e69981b4b Use PyFloat as double in signal signatures.
Fix bug #722.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-04-13 18:29:19 -03:00
Hugo Parente Lima
c269e0db00 Removes the removal of QMatrix4x4 call operators.
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-13 11:01:10 -03:00
Hugo Parente Lima
1c0279fa25 Fix code injection of QIODevice to support returning an error. 2011-04-13 11:01:10 -03:00
Hugo Parente Lima
1e149f3de4 Fix bug 723 - "Missing QAbstractFileEngine.read and QAbstractFileEngine.readLine" 2011-04-13 11:01:10 -03:00
Renato Filho
741bc56e4b Created QtDeclarative.ListProperty documentation.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-12 17:48:46 -03:00
Renato Filho
c8a11c179a Create unit test for bug #816.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-12 16:47:08 -03:00
Renato Filho
d0ad9d27aa Fixed QCoreApplication.instance method to handle with application created before PySide module loading.
Fixes bug #816.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-04-12 16:46:32 -03:00
Renato Filho
6da3e78014 Created unit test for bug #814.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Hugo Parente <hugo.lima@openbossa.org>
2011-04-11 12:07:34 -03:00
Renato Filho
7abf74adb9 Updated dependency version. 2011-04-07 18:01:33 -03:00
Renato Filho
9f73d5ecf1 Fixed bug #400 link description. 2011-04-07 18:01:33 -03:00
Renato Filho
e7413828a1 Create unitest for bug #688.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-07 18:01:26 -03:00
Renato Filho
a0c72f28c6 Implemented support to pyton iterator in QTextFrame::iterator.
Fixes bug #688.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-07 18:01:08 -03:00
Hugo Parente Lima
f3961387a9 Fix 720 - "QByteArray prints itself wrong, on tp_print and tp_repr"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-04-07 16:33:42 -03:00
Hugo Parente Lima
85f65194ef Fix bug 724 - "Missing QAbstractFileEngine.map method" 2011-04-07 16:33:42 -03:00
Hugo Parente Lima
3b9481c24c Fix bug 721 - "QFile doesn't support map and unmap functions." 2011-04-07 16:33:42 -03:00
Hugo Parente Lima
40718156a6 Remove unused variables and warnings when using gcc 4.6. 2011-04-07 16:33:42 -03:00
Marcelo Lira
51e9dfc428 Updated type system files to use the new %BEGIN_ALLOW_THREADS and %END_ALLOW_THREADS variables.
Reviewed by Lauro Moura <lauro.neto@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2011-04-07 15:17:30 -03:00
Marcelo Lira
8e7845be18 Fixes bugs 746, 747 and 748.
Bug #746 - Method "QFormLayout::getLayoutPosition(QLayout*,int*,QFormLayout::ItemRole*)const" missing
Bug #747 - Method "QFormLayout::getWidgetPosition(QWidget*,int*,QFormLayout::ItemRole*)const" missing
Bug #748 - Method "QFormLayout::getItemPosition(int,int*,QFormLayout::ItemRole*)const" missing

Also added unit tests.
2011-04-07 15:17:30 -03:00
Marcelo Lira
2c6a44feee Fixes bugs 739 and 752.
Bug #739 - Method "QTransform::map(qreal x, qreal y, qreal* tx, qreal* ty) const" missing
Bug #752 - Method "void QSplitter::getRange(int index, int* min, int* max) const" missing

Also added unit tests.
2011-04-07 15:17:30 -03:00
Marcelo Lira
a513d831cd Do *not* mix tabs and spaces. 2011-04-07 15:17:29 -03:00
Marcelo Lira
8e0e7ef0b6 Fixes bugs 744, 745, 756, 758 and 764.
Bug #744 - Method "void QGraphicsLayout::getContentsMargins(qreal*,qreal*,qreal*,qreal*) const" missing
Bug #745 - Method "void QGraphicsLayoutItem::getContentsMargins(qreal*,qreal*,qreal*,qreal*) const" missing
Bug #756 - Method "void QWidget::getContentsMargins(int*,int*,int*,int*) const" missing
Bug #758 - Method "void QTextCursor::selectedTableCells(int*,int*,int*,int*) const" missing
Bug #764 - Method "void QLayout::getContentsMargins(int*,int*,int*,int*) const" missing

Also added unit tests.
2011-04-07 15:17:23 -03:00
Marcelo Lira
62448f99e7 Merged fix_int*... and fix_qreal*... type system templates.
Also modified the method call to be friendlier with virtual methods.
2011-04-06 21:30:19 -03:00
Hugo Parente Lima
ee17f8c970 Version bump to 1.0.2 2011-04-06 16:02:23 -03:00
Renato Filho
d984cf24cc Create unit test for bug #793.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Hugo Parente <hugo.lima@openbossa.org>
2011-04-05 10:17:56 -03:00
Renato Filho
e39188d636 Change the order of function call on destructionVisitor to avoid problems with cyclic dependency.
Fixes bug #793.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Hugo Parente <hugo.lima@openbossa.org>
2011-04-05 10:14:31 -03:00
Marcelo Lira
bbba1cc470 Fixes bug #489 - PySide.QtGui.QImage with string buffer argument.
http://bugs.pyside.org/show_bug.cgi?id=489

Also added an unit test.

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2011-04-01 16:40:17 -03:00
Hugo Parente Lima
9ffb2ef542 Fix bug 712 - "QtGui.QFormLayout doesn't have setItem() function"
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-03-30 18:49:07 -03:00
Hugo Parente Lima
4239b56710 Fix bug 540 - "Duplicate entries in QRegExp docs"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-03-29 17:39:09 -03:00
Hugo Parente Lima
f8bc57c61c Fix doc bug 794 - "QPixmapCache.find example is wrong" 2011-03-28 14:51:57 -03:00
Hugo Parente Lima
9024884495 Fix bug 790 - "QStyledItemDelegate Signal with lambda and QModelIndex: Fatal Python error: PyEval_SaveThread: NULL tstate"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-03-25 16:49:38 -03:00
Hugo Parente Lima
c50d08e4c8 Fix bug 694 - "QWebPage::extensions need injected overloads due to required casts on C++ version" 2011-03-25 09:57:02 -03:00
Hugo Parente Lima
3cd2cad128 Fix bug 699 - "PySide.QtCore.Property doesn't throw a TypeError if the first arg isn't a PyType." 2011-03-25 09:48:11 -03:00
Hugo Parente Lima
6f8f728241 Fix bug 685 - "The second arg. of QObject.findChildren doesn't have a default value and doesn't support regexes."
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-03-23 13:36:17 -03:00
Hugo Parente Lima
f645a79f03 Fix a type in QtGui type system. 2011-03-23 13:36:17 -03:00
Hugo Parente Lima
2f4a1f634c Use set instead of add on reference-count action attribute. 2011-03-23 13:36:17 -03:00
Hugo Parente Lima
e07b306bb4 Type systems of all modules but QtCore and QtGui reviewed. 2011-03-23 13:36:14 -03:00
Hugo Parente Lima
7849b4262f Fix bug 736 - "Signal/Slot is not working at all"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-03-22 15:04:40 -03:00
Hugo Parente Lima
4749d14642 Changed local variable naming style. 2011-03-22 15:04:27 -03:00
Renato Filho
26ae1259a9 Revert "Fixed test for bug #674 to works with new getattr check."
This reverts commit a6f0d0cb52.
2011-03-22 11:49:43 -03:00
Renato Filho
78ca4c0749 Only raise 'RuntimeError' for function call to avoid problems with contructor order calls. 2011-03-22 11:13:32 -03:00
Marcelo Lira
02f9ca5417 Added comments for all method removals.
And some other clean ups.

Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2011-03-22 10:25:51 -03:00
Hugo Parente Lima
189717cdb1 Fix bug 728 - "QFileDialog.getOpenFileNames never returns (hangs)"
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-03-21 15:51:12 -03:00
Renato Filho
2bd54857ed Created unit test for bug #726.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-03-21 11:57:38 -03:00
Renato Filho
8ce3644a13 Does not use normalizeSignature in functions with return type.
Fix bug #726.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-03-21 11:57:38 -03:00
Hugo Parente Lima
13d9f714c5 Add unit test for bug 693 - "Heap corruption or double free reported on program exit"
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-03-18 18:32:37 -03:00
Renato Filho
a6f0d0cb52 Fixed test for bug #674 to works with new getattr check.
Reviewer: Hugo Parente Lima <hugo.pl@gmail.com>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-03-16 17:01:08 -03:00
Renato Filho
fb3bae60f4 Created unit test for bug #696.
Reviewer: Hugo Parente Lima <hugo.pl@gmail.com>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-03-16 17:01:08 -03:00
Renato Filho
880e6a28b6 Check if class is valid before call meta object function on class getattro function.
Fix bug #696.

Reviewer: Hugo Parente Lima <hugo.pl@gmail.com>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-03-16 17:00:14 -03:00
Renato Filho
b1a1f61c64 Created unit test for bug #711.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-03-16 16:34:26 -03:00
Renato Filho
9a7733ef8c Fix QToolbar.clear parent policy.
Fixes bug #711.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-03-16 16:34:26 -03:00
Hugo Parente Lima
a571d9bd98 Add unit test for bug 706 - "dataChanged signal raise an incorrect TypeError"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-03-16 11:22:34 -03:00
Hugo Parente Lima
008798b0e3 Fix bug 718 - "PySide/PyQt4 QByteArray incompatibilities: setNum method"
Fix bug 719 - "PySide/PyQt4 QByteArray incompatibilities: appendByte method"
2011-03-16 11:22:19 -03:00
Hugo Parente Lima
25026120a1 Add comments to some function removals. 2011-03-15 14:22:10 -03:00
Renato Filho
4c149aef4e Created unit test for bug #714.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-03-09 18:06:19 -03:00
Renato Filho
957fa171a9 Removed parent policy from QLabel.setPixmap.
This is not a parent transfer because the function receives a "const &" and stores a copy of the pixmap.

Fixes bug #714.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
	  Marcelo Lira <marcelo.lira@openbossa.org>
2011-03-09 18:05:37 -03:00
Lauro Neto
f0e364ff28 Remove duplicated const functions from QRegExp
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
2011-03-04 16:49:12 -03:00
Hugo Parente Lima
73f21eb1bb Last code snippets.... 2011-03-04 13:10:38 -03:00
Hugo Parente Lima
bd43c1e0b2 Removed Signal/Slot documentation content. 2011-03-04 11:37:20 -03:00
Hugo Parente Lima
04a26bd3bb Version bump to 1.0.1 2011-03-04 11:37:20 -03:00
Hugo Parente Lima
ca81d9a32c More code snippets ported to Python. 2011-03-03 18:56:26 -03:00
Hugo Parente Lima
094de67591 Version bump, 1.0.0 final yay! 2011-03-02 21:17:57 -03:00
Hugo Parente Lima
b94f5359b0 Added some missing code snippets to PySide documentation. 2011-03-02 21:17:57 -03:00
Hugo Parente Lima
97a16f10ab Removed useless files from docs. 2011-03-02 21:17:57 -03:00
Hugo Parente Lima
eedc03ebb5 Remove some warning messages when generating the docs.
Those classes haven't especific documentation, they are only typedefs for template instanciations.
2011-03-02 21:17:57 -03:00
Luciano Wolf
17f2d83e0e Fix bug 676 - "wrong QLocale.toFloat() description".
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-03-02 15:03:11 -03:00
Hugo Parente Lima
2ed86dc435 Fix bug#708 - "Remaining pyqtSignal in ref docs" 2011-03-02 14:35:55 -03:00
Hugo Parente Lima
8ac29700ce Added module documentation for all modules. 2011-03-01 20:32:10 -03:00
Hugo Parente Lima
ee92e460f1 Removed a lot of files not used by the doc generation. 2011-03-01 20:31:56 -03:00
Hugo Parente Lima
35168cb86a Missing doc code snippet for webkit. 2011-03-01 20:31:39 -03:00
Hugo Parente Lima
daffd9831a Fixed/translated some doc. code snippets. 2011-03-01 15:52:11 -03:00
Hugo Parente Lima
9c21263251 Use multiple code snippets directories to fix the crazyness of Qt docs. 2011-03-01 15:52:11 -03:00
Hugo Parente Lima
f804d84297 Removed unused doc snippet files. 2011-03-01 15:52:11 -03:00
Hugo Parente Lima
361c887da0 Added modify-documentation do QDeclarativePropertyMap to remove references to QVariant and QString. 2011-02-28 20:23:32 -03:00
Hugo Parente Lima
75f799872b Added missing format attribute. 2011-02-28 20:23:32 -03:00
Hugo Parente Lima
1ab21c4b28 Added some QML tutorials to the documentation. 2011-02-25 19:11:25 -03:00
Hugo Parente Lima
98ede2df71 Minor fixes on pysideapi2.rst. 2011-02-25 19:07:27 -03:00
Hugo Parente Lima
d9482626e6 Use monospace font for sphinx literal strings. 2011-02-25 19:05:54 -03:00
Hugo Parente Lima
dd8de65f73 Change version from beta6 to rc1 2011-02-17 17:48:30 -02:00
Marcelo Lira
2efb33d2fc Updated PySide CMake files to use the new generator argument "avoid-protected-hack".
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2011-02-17 14:43:51 -03:00
Marcelo Lira
5ef2f26ec2 Updated CMake files to use the "--drop-type-entries" generator option.
Instead of maintaining a complex CMake scheme to remove optional type
system entries, the generation will rely on the new generator capability
of dropping entries given via command line.

Reviewed by Bruno Araújo <bruno.araujo@openbossa.org>
Reviewed by Lauro Moura <lauro.neto@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2011-02-17 10:52:19 -03:00
Hugo Parente Lima
4305a54b42 Fix bug 681 - "Unicode support for trUtf8 method"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-02-16 19:40:46 -02:00
Hugo Parente Lima
e0cf4b000d Fix bug 674 - "QGraphicsScene::clear() is missing" 2011-02-16 16:07:01 -02:00
Jerome Leclanche
adfaf21063 Fix bug 687 - "[PATCH] QUiLoader code example crashes"
Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-02-16 11:40:16 -02:00
Hugo Parente Lima
691841f829 Fix bug 675 - "QGraphicsLinearLayout segfault"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-02-15 19:35:05 -02:00
Hugo Parente Lima
47957530f9 Refactor to simplify code just avoding some Cism. 2011-02-15 16:38:53 -02:00
Hugo Parente Lima
a7cebb5917 Make PySide signals work with meta types. 2011-02-15 16:38:21 -02:00
Hugo Parente Lima
0ad9c484df Add unit test for bug 684. 2011-02-15 16:37:16 -02:00
Lauro Neto
0298a34289 Raise error when slot argument is unknown.
Instead of accepting it silently and generating potential
segfault and undefined behavior, raise TypeError when
the type of an argument is unknown to PySide type system.

An example of such erratic behavior is in declarations like:

@Slot
def foo(self):

Slots without arguments must be explicitly declared this way:

@Slot()
def foo(self):

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
Reviewer: Hugo Lima <hugo.lima@openbossa.org>
2011-02-11 19:32:41 -03:00
Hugo Parente Lima
7b4d24f094 Fix bug 679 - "QWebPage miss extension function"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2011-02-11 17:23:23 -02:00
Hugo Parente Lima
7d80ac8e29 Fix phonon compilation and detection of VideoCaptureDevice class.
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2011-02-11 15:09:53 -02:00
Hugo Parente Lima
26d6f4a39e Fix bug 638 - "Documentation for phonon doesn't show class inheritance diagrams." 2011-02-11 15:09:53 -02:00
Hugo Parente Lima
42e149598e Removed duplicated entry of QWebPage::ErrorDomain on typesystem. 2011-02-11 15:09:53 -02:00
Marcelo Lira
8eb529bda3 Increments reference of None object on custom code for QState.addTransition method.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2011-02-11 14:40:42 -03:00
Renato Araujo Oliveira Filho
c3d180fdc2 Created unit test for bug #671.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-02-10 17:30:34 -03:00
Renato Araujo Oliveira Filho
b9dd824866 Appended the metaclass data flags value on head.
Fix bug #671.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-02-10 17:30:34 -03:00
Marcelo Lira
42c9f80b06 Added QCursor test. It is related to bug #630.
Bug #630 - Fails to resolve overload for QCursor(QBitmap, QBitmap, int, int)
http://bugs.openbossa.org/show_bug.cgi?id=630

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2011-02-10 14:07:56 -03:00
Renato Araujo Oliveira Filho
bda10df1da Fixed function 'QToolBar.addAction' to support callback in the
arguments.

Create unit test for bug #635.

Fixes bug #635.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-02-10 10:36:07 -03:00
Hugo Parente Lima
7909d294f5 Fix bug 668 - "QFileSystemModel setRootPath stops application from quitting."
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2011-02-09 18:26:55 -02:00
Hugo Parente Lima
f25d227d6e Replaced all entries of reference-count with action=add to action=set. 2011-02-09 18:26:55 -02:00
Hugo Parente Lima
7fd8eba136 Fix bug 663 - "Crash on exit when passing QNetworkAccessManager around" 2011-02-09 18:26:55 -02:00
Hugo Parente Lima
95d546696e Remove invalid function removals. 2011-02-09 18:26:55 -02:00
Hugo Parente Lima
2248c1b944 Fix bug 667 - "Crash on exit" 2011-02-09 18:26:55 -02:00
Hugo Parente Lima
8fa461559c Fix QGLBuffer::map code injection and test. 2011-02-09 18:26:12 -02:00
Renato Araujo Oliveira Filho
06755f06ba Updated phonon typesystem to use the new pyside cmake macro syntax. 2011-02-09 18:05:20 -03:00
Renato Araujo Oliveira Filho
5a87a51c11 Updated http server used on tests to keep trying until get a free address. 2011-02-09 15:49:45 -03:00
Renato Araujo Oliveira Filho
323b37beda Created unit test for bug #662.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-02-09 15:46:29 -03:00
Renato Araujo Oliveira Filho
0fe1c15cbf Implemented support for iterator on QTextBlock.
Fixes bug #662.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-02-09 15:46:25 -03:00
Renato Araujo Oliveira Filho
88c38236d4 Fix append object description on typesystem only when this was found.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-02-09 15:46:10 -03:00
Renato Araujo Oliveira Filho
8e4b414844 Separated class typesystem from the main typesystem.
Remove class specification,  detected during the compilation from the
main typesystem to avoid errors during the generation.

Fixes bug #661

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-02-08 14:49:37 -03:00
Renato Araujo Oliveira Filho
9b3d0b2ef2 Updated translation test to use previous generated qm files.
Upload qm files used on test to git.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-02-07 20:06:27 -03:00
Renato Araujo Oliveira Filho
8a50e91e6f Updated http server used on unit test.
Allow the server to reuse the address to avoid errors.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-02-07 18:09:28 -03:00
Renato Araujo Oliveira Filho
90178e21dd Created unit test for signals.
Test for types inside of namespace
Test for types defined by typedef.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-02-07 17:33:20 -03:00
Renato Araujo Oliveira Filho
6b1f0b8ca7 Fixed problems to emit signals with objects types.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-02-07 17:32:47 -03:00
Hugo Parente Lima
4e79ce7b25 Fix 666 - "QByteArray does not support slices"
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-02-04 19:28:43 -02:00
Hugo Parente Lima
ac325f24e4 Fix bug 660 - "QMimeData type deleted prematurely when overriding mime-type in QStandardItemModel drag and drop" 2011-02-04 19:28:42 -02:00
Hugo Parente Lima
d44aa5c310 Fix bug 643 - "QTabWidget.insertTab not taking ownership" 2011-02-04 19:28:42 -02:00
Marcelo Lira
2f6af8142d The global header for PySide is now installed with the libpyside headers.
This is good for PySide derived bindings (like the ones for QtMobility),
so they don't need to copy the PySide global headers to their source
tree and end up with an outdated file.

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2011-02-04 18:07:51 -03:00
Marcelo Lira
233c0333e6 Removed unnecessary line from test binding CMake file. 2011-02-04 16:09:27 -03:00
Hugo Parente Lima
ac767473a2 Fix qresource_test openning the file in binary mode, so it doesn't fail on windows. 2011-02-04 15:12:29 -02:00
Hugo Parente Lima
8ab8950ccc Export QTranslator::translate and QTranslator::load.
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-02-03 19:10:12 -02:00
Hugo Parente Lima
8d1e058fa1 Export method QCryptographicHash::addData. 2011-02-03 18:36:04 -02:00
Hugo Parente Lima
a4ab1c7e99 Remove some ancient method removals from QtCore typesystem.
- QDir(QString,QString,QFlags<QDir::SortFlag>,QFlags<QDir::Filter>)
- QBitArray::fill(bool, int)
2011-02-03 18:36:04 -02:00
Hugo Parente Lima
2d65e48fa8 Use PyString_GET_SIZE instead of PyString_Size on some inject codes. 2011-02-03 18:36:04 -02:00
Hugo Parente Lima
f5d4b6e678 Export QSettings::iniCodec and QXmlStreamWriter::codec methods. 2011-02-03 18:36:04 -02:00
Hugo Parente Lima
ee80967d24 QPersistentModelIndex now have the same implementation of internalPointer of QModelIndex. 2011-02-03 18:36:04 -02:00
Hugo Parente Lima
7b4968abab Fixed/implemented various QResources methods.
- data() is now exported and returns a Python read-only buffer object.
- (un)registerResourceData now accept buffers as arguments, and respects zeroes in the middle of data.
- Improved unit test.
2011-02-03 18:36:04 -02:00
Hugo Parente Lima
b52148fd85 Fix comparisson of QByteArray with Python strings that have zeroes inside. 2011-02-03 18:36:04 -02:00
Hugo Parente Lima
fa118ae670 Added comments to some function removals. 2011-02-03 18:35:40 -02:00
Hugo Parente Lima
709895f2fb Fix bug 653 - "Crash after calling QWizardPage.wizard()"
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-02-02 20:09:10 -02:00
Hugo Parente Lima
295b965d3c Fix bug 652 - "Segfault when using QTextBlock::setUserData due to missing ownership transfer" 2011-02-02 19:23:24 -02:00
Hugo Parente Lima
d7269670ee Removed the removal of some QApplication functions.
These functions were removed due to ancient bugs in shiboken
generator, all them now fixed.

Functions:

font(const char*)
setFont(QFont,const char*)
palette(const char*)
2011-02-02 19:23:24 -02:00
Renato Araujo Oliveira Filho
c19ab39cbf Bump version to beta6. 2011-02-02 15:16:38 -03:00
Renato Araujo Oliveira Filho
1b1a83dc30 Fixed Cmake files used to find the library after the installation.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-02-02 11:42:52 -03:00
Hugo Parente Lima
87977cc320 Fix bug 650 - "Missing bindings for QNetworkProxyFactory"
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-02-02 11:36:12 -02:00
Hugo Parente Lima
3270dde028 Fix bug 651 - "Calling disconnect() with no arguments causes segfault" 2011-02-02 11:36:12 -02:00
Renato Araujo Oliveira Filho
a44fcc6dba Updated QAbstractItemModel.createIndex documentation to warning about
ptr argument life time.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-02-01 15:49:53 -03:00
Hugo Parente Lima
43a8f4089e Fix bug 656 - "cannot inherit from QCoreApplication"
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-01-31 16:22:28 -02:00
Marcelo Lira
f2c537eeaa Updated GeneratorRunner calls on CMake files to use "--generator-set" instead of "--generatorSet".
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2011-01-31 14:54:10 -03:00
Hugo Parente Lima
9ca80b5d3a Don't crash if a typeId was not found when emiting a signal.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-01-31 14:36:03 -02:00
Hugo Parente Lima
e17795d35b Added test for bug 613. 2011-01-28 20:44:16 -02:00
Hugo Parente Lima
2a43919024 Fix bug 565 - "QImage missing *data constructors"
Fix bug 566 - "'PySide.QtGui.QImage' object has no attribute 'scanLine'"

The constructors now accepts any PyObject which implements the buffer protocol, as the
C++ and PyQt4 version the buffer must be alive during the life time of QImage because QImage
*does not* copy the image data.

scanLine() and bits() now return buffer objects pointing to the memory inside QImage.
2011-01-28 19:33:42 -02:00
Renato Araujo Oliveira Filho
4af09f10ad Implement __repr__ function for class with Float attributes. 2011-01-28 18:02:20 -03:00
Renato Araujo Oliveira Filho
3c3caf154e Created unit test for bug #617.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-01-28 16:17:18 -03:00
Renato Araujo Oliveira Filho
5112a89ca9 Created __repr__ function unit test.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-01-27 17:35:05 -03:00
Renato Araujo Oliveira Filho
1a65a287fb Implemented fuction __repr__ for base types.
Fixes bug #593

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-01-27 17:34:44 -03:00
Renato Araujo Oliveira Filho
1f6e877f8d Fixed QFileDialog function calls with options in the last argument.
Fixes bug #590

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-01-25 17:29:21 -03:00
Hugo Parente Lima
629c0c383b Add test for bug#640.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-01-25 15:55:01 -02:00
Renato Araujo Oliveira Filho
c5fffa6f24 Implement support to others color spec on deepcopy function.
Created unit test QColor reduce function.

Fixes bug #612.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-01-25 15:38:22 -03:00
Hugo Parente Lima
286f9c6d09 Fix bug#633 - "bool of null QDate (possibly other empty QString/null QObj types?) returns True for empty instance; probably should be False" 2011-01-24 16:42:45 -02:00
Renato Araujo Oliveira Filho
9a4c439d7f Fixed QLineEdit.getTextMargins return value.
Fixes bug #632

Reviewer: Hugo Parente Lima <hugo.pl@gmail.com>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-01-24 13:44:28 -03:00
Hugo Parente Lima
a4d7d8f80d Fix bug#636 - "Unable to navigate back to the main site from the generated documentation" 2011-01-24 10:30:04 -02:00
Renato Araujo Oliveira Filho
1cce4bafd3 Bump version to beta5. 2011-01-21 16:14:58 -03:00
Renato Araujo Oliveira Filho
08a0298fe0 Updated generatorrunner version dependency. 2011-01-21 16:14:16 -03:00
Renato Araujo Oliveira Filho
9284703855 Replace use of QMetaObject::activate to QObject::qt_metacall.
This is necessary to support signals with default values.

Fix bug #624

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-01-21 13:44:47 -03:00
Marcelo Lira
bcba2a3b32 Added test cases for signal emission.
Signals are emitted from C++ and Python.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-01-21 13:41:26 -03:00
Hugo Parente Lima
b9679215b8 Fix bug#552 - "Segmentation fault when using QUiLoader and QTabWidget"
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-01-21 10:30:21 -02:00
Hugo Parente Lima
7f533799d4 Use the same Python used by Shiboken instead of find a new one. 2011-01-20 15:17:34 -02:00
Hugo Parente Lima
f7a2ab3d66 Don't reject QGLWidget::setMouseTracking function. 2011-01-20 15:12:41 -02:00
Hugo Parente Lima
6a83c87283 Fix bug#623 - "QGLWidget.bindTexture(QPixmap, GLenum, GLenum) is missing" 2011-01-20 15:12:41 -02:00
Marcelo Lira
1a3418c8d1 Added test for module reloading.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2011-01-19 17:49:12 -03:00
Renato Araujo Oliveira Filho
3b026ad4c9 Fixed Widget and Layout inject code to avoid problems in armel arch. 2011-01-18 14:42:02 -03:00
Renato Araujo Oliveira Filho
50e6f7671d Created unit test for bug #575.
Reviewer: Hugo Parente Lima <hugo.pl@gmail.com>
          Luciano Wolf <luciano.wolf@openbossa.org>
2011-01-17 10:46:43 -03:00
Marcelo Lira
499051fd2a Updates documentation of QUiLoader.registerCustomWidget method.
The new documentation highlights the danger of duck punching virtual
methods of widget objects produced by QUiLoader.
Also named the argument of QUiLoader.registerCustomWidget as
customWidgetType.

Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2011-01-14 17:14:13 -03:00
Marcelo Lira
fb6186d270 Named the single argument of all "QWidget.*Event(arg)" methods as "event".
Just to make the generated documentation more readable.
2011-01-14 17:01:55 -03:00
Marcelo Lira
0d9a584a1c Fixed style on QUiLoader code snippet. 2011-01-14 17:01:55 -03:00
Hugo Parente Lima
530a3d23c5 Fix bug#584 - "python pickle module can't treat QByteArray object of PySide"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-01-14 13:58:10 -02:00
Renato Araujo Oliveira Filho
8243565f81 Fix typo on Cmake files.
Reviewer: Bruno Araujo <bruno.araujo@openbossa.org>
2011-01-13 14:14:26 -03:00
Hugo Parente Lima
867c2bd259 Removed useless rejections
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-01-13 13:59:02 -02:00
Hugo Parente Lima
ae02222d57 Remove protected fields of event classes.
Event classes have a lot of non-documented protected fields, those fields
are removed from PySide because they are Qt implementation details,
besides the fact they are accessible by ordinary event methods.
2011-01-13 13:59:02 -02:00
Hugo Parente Lima
a78108efe3 Fix documentation for QWidget.winId() 2011-01-13 13:59:02 -02:00
Hugo Parente Lima
7e1b76e054 Don't crash when a unknown type is given as a meta call argument. 2011-01-13 13:59:01 -02:00
Hugo Parente Lima
b5331e5c56 Add polymorphic-id-expression to QGraphicsObject and QDeclarativeItem. 2011-01-13 13:59:01 -02:00
Renato Araujo Oliveira Filho
c8111dc99a Fixed path to include file used on cmake files.
Reviewer: Bruno Araujo <bruno.araujo@openbossa.org>
2011-01-13 10:45:17 -03:00
Renato Araujo Oliveira Filho
85947c03d9 Create a new parent test.
Check if the parent does not increase the reference if you set the
parent twice.
2011-01-12 19:31:22 -03:00
Renato Araujo Oliveira Filho
b8fcead629 Use python base name as library prefix.
Use the same CMAKE_BUILD_TYPE as shiboken if none was specified.
Append SHIBOKEN_PYTHON_BASENAME in the library suffix.

Fix bug #509.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-01-12 17:27:42 -03:00
Marcelo Lira
ed0d9cf820 Added test for QPainter.setPen() method.
Calls it with enum, to call the setPen(Qt.PenStyle) signature, and with
an integer, to call the setPen(QColor) signature (QColor is implicitly
built from an unsigned int in C++).

For more details see Bug #511:
http://bugs.openbossa.org/show_bug.cgi?id=511

Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2011-01-12 10:44:21 -03:00
Marcelo Lira
814bc522ce Added condition for a phonon test that fails on Win32 with Qt 4.7.1.
This is due to a bug on Phonon::createPath that happens with the
specific combination of Win32 platform and Qt 4.7.1. The bug is reported
as fixed for Qt 4.7.2, but it wasn't released yet.

For more details on the bug:
http://bugreports.qt.nokia.com/browse/QTBUG-13062

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Lauro Moura <lauro.neto@openbossa.org>
2011-01-10 15:26:54 -03:00
Renato Araujo Oliveira Filho
fb9fdba329 Created unit test for bug 589.
Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-01-07 19:15:49 -03:00
Renato Araujo Oliveira Filho
0f6a504dfb Fix Qvariant to Cpp conversion.
Fixes bug #589

Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-01-07 19:15:41 -03:00
Marcelo Lira
efdedcdd01 Fixes the fix in the commit a1cf8f03.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2011-01-06 20:58:11 -03:00
Hugo Parente Lima
4d014eaa80 Fix bug#560 - "Lack of QtCore.Signal documentation"
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-01-06 20:14:56 -02:00
Marcelo Lira
a1cf8f03b2 Fixes connecting signal to decorated slot.
Decorated methods on classes derived from QObject are not called when
connected to Qt signals because they get a name different from the
decorated method. To solve this decorated methods are registered as
global slots.

An unit test was added.

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2011-01-06 19:08:40 -03:00
Marcelo Lira
5151af6de1 Refactoring to Phonon basic playing test.
Also replaced the ogg audio tone file for a wav one.

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2011-01-06 16:45:03 -03:00
Marcelo Lira
d3894ed861 Fixed PATH variable for tests on win32 platform. 2011-01-06 16:26:15 -03:00
Renato Araujo Oliveira Filho
932d9bced9 Created unit test for bug #585.
Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-01-06 14:17:21 -03:00
Renato Araujo Oliveira Filho
fb9c1a97fe Fixed QTreeWidgetItem.parent function policy.
Fixes bug #585

Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-01-06 14:16:44 -03:00
Hugo Parente Lima
753d2bd1f6 Only try to play the ogg file if the system has the capability to do it.
This fix a failing test on macosx.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2011-01-05 19:26:45 -02:00
Renato Araujo Oliveira Filho
53e649629b Fixed QtNetwork test to use '127.0.0.1' instead of 'localhost'
This is necessary to make all test to be able run on any buildbot machine.
Fix Http server shutdown sequence to avoid deadlocks.

Fixes bug #587

Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-01-05 14:54:23 -03:00
Hugo Parente Lima
6383832408 Fix bug#557 - "Segmentation fault in QDeclarativeComponent.loadUrl()"
The signature QDeclarativeComponent(QObject*) should not exist, it's not
documented and just creates a useless QDeclarativeComponent when used,
useless in the sense that it will segfault when used.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2011-01-05 14:35:11 -02:00
Renato Araujo Oliveira Filho
ed1c0014f9 Fixed QWidget.setParent signature on typesystem. 2011-01-05 08:49:39 -03:00
linjunhalida
32681f7b70 add new QDatetime init function with 6 arguments
Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-01-04 19:55:14 -02:00
Hugo Parente Lima
15dd2e07ed Lock the gil on some hand written code to avoid crashes.
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2011-01-04 19:25:31 -02:00
Renato Araujo Oliveira Filho
3774752f0c Fixed function QDataStream.readRawData return value.
The function readRawData now return None in case of error, otherwise a
string with the read data.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-01-04 19:23:57 -03:00
Hugo Parente Lima
269e8450dc New format for __version_info__.
The new format follow the same rules used by sys.version_info().

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-01-04 16:47:57 -02:00
Renato Araujo Oliveira Filho
374e2fcf88 Created support to function qAddPostRoutine.
Created unit test for bug #515
Fixes bug #515

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-01-03 19:58:53 -03:00
Marcelo Lira
da1759fe98 Added test case for Bug #572.
Bug #572: Giving unicode value as 'body' argument to WebView's load
method crashes python.

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2011-01-03 19:46:41 -03:00
Renato Araujo Oliveira Filho
39a5a09145 Fix QTreeWidgetItem.parent function.
Create unit test for new use case.
Fixes bug #547

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2011-01-03 14:56:33 -03:00
Hugo Parente Lima
ea83c5e554 Fix bug#577 - "Reference to QString in docs" 2011-01-03 14:24:52 -02:00
Renato Araujo Oliveira Filho
f9587fcad2 Fixed QWidget.parent function.
Create unit test for bug 576.
Fixes bug #576.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2011-01-03 13:50:25 -03:00
Lauro Neto
27b53151bf Avoid conflict in test case names
Reviewer: Hugo Lima <hugo.lima@openbossa.org>
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
2011-01-03 11:28:02 -03:00
Renato Araujo Oliveira Filho
eb0d211417 Fixed test to work in all platform. 2011-01-03 10:01:04 -03:00
Hugo Parente Lima
a38db0fe03 Fix bug#514 - "Static method QByteArray.fromRawData is missing from QtCore"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2010-12-30 17:03:36 -02:00
Hugo Parente Lima
d0d4ba1564 Fix bug 546 - "Python crash on exit"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2010-12-30 15:39:44 -02:00
Hugo Parente Lima
249a87808a Fix bug#493 - "__eq__ and friends not implemented for QKeyEvent == QKeySequence"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2010-12-29 19:12:28 -02:00
Lauro Neto
bc9ddff514 Improve QtScriptEngineDebugger test behavior
The extra ContinueAction after evaluate() was crashing
on MacOS X.

Reviewer: Hugo Lima <hugo.lima@openbossa.org>
Reviewer: Renato Araujo <renator.filho@openbossa.org>
2010-12-29 14:29:10 -03:00
Renato Araujo Oliveira Filho
9d6d30cb6a Changed api2 test to work on MacOS during a ssh session. 2010-12-29 11:55:55 -03:00
Hugo Parente Lima
7810dcd829 Fix bug#569 - "QTableWidgetItem is missing binding of __lt__ to operator<"
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2010-12-29 10:14:28 -02:00
Hugo Parente Lima
e8c0ba238a Fix bug#563 - "Unhandled signal emitting with invalid signature (which leads to application crash)" 2010-12-29 10:14:28 -02:00
Hugo Parente Lima
4b6cc4d478 Changes the arg name from p to parent to make parent heuristic work. 2010-12-29 10:14:28 -02:00
Renato Araujo Oliveira Filho
db4d324497 Fixed MetaObject creation based on typename.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
2010-12-29 09:55:13 -03:00
Renato Araujo Oliveira Filho
7144634e35 Fix test to avoid problems on slow computers.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
2010-12-29 09:54:58 -03:00
Renato Araujo Oliveira Filho
25264046e8 Appended ${QtGui_BINARY_DIR} on typesystem_path for QtMaemo5 module. 2010-12-28 14:12:24 -03:00
Renato Araujo Oliveira Filho
ecbc9ebcfa Appended QtGui library dependency on pysidetest library. 2010-12-28 14:09:16 -03:00
Renato Araujo Oliveira Filho
fa89170f62 Test for QTDESIGNER before add QTUITOOLS.
This test is necessary because the module QTUITOOLS uses some classes
from QTDESIGNER.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Bruno Araujo <bruno.araujo@openbossa.org>
2010-12-28 12:00:02 -03:00
Renato Araujo Oliveira Filho
a74d92adce Fix QTreeWidget parent rules.
QTreeWidget.clear() - remove all child ref from the current widget
QTreeWidgetItem.parent() - use default policy for returned value

Fix bug #547

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2010-12-27 19:20:05 -03:00
Renato Araujo Oliveira Filho
656be4ec98 Removed some float comparisons from QColor test to avoid armel problems.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
2010-12-27 13:32:16 -03:00
Hugo Parente Lima
6cf55675dc Fix bug#549 - "QGraphicsWidget::getContentsMargins() and QGraphicsWidget::getWindowFrameMargins() not available"
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2010-12-23 17:22:29 -02:00
Renato Araujo Oliveira Filho
fc471bed0f Used more common signature on function test to QList objects.
Replaced "const QList<QObject*>" signature to "const QList<QObject*>&",
more used on Qt code.
2010-12-23 15:47:59 -03:00
Renato Araujo Oliveira Filho
401f394179 Fixed variable scope.
This keep the QByteArray live during the use of your content.

Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2010-12-22 19:49:50 -03:00
Lauro Neto
af0860ba4a Fix testbinding dependency
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
Reviewer: Renato Araujo <renato.araujo@openbossa.org>
2010-12-22 18:11:26 -03:00
Renato Araujo Oliveira Filho
c4185280ba Moved list_signal_test to pysidetest library.
This isolate the test case, and avoid other problems with X during the
buildbot compilation.

Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2010-12-22 16:34:29 -03:00
Renato Araujo Oliveira Filho
4b0eaa7796 Fix the QtMultimedia/audio_test.py to accept computers with only null
device.
2010-12-22 10:25:32 -03:00
Renato Araujo Oliveira Filho
67b868ccb9 Avoid QMatrix test while gcc is broken. 2010-12-22 10:17:21 -03:00
Renato Araujo Oliveira Filho
48b25047c9 Used argument '-a' during the call of xvfb command.
This argument allow the xvfb to find a free server number during the
execution.
2010-12-21 17:28:20 -03:00
Renato Araujo Oliveira Filho
04ac69ce52 Fixed QtUiTools plugin.
Removed use of static QString to store the class name.

Fix bug #533.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2010-12-21 17:28:20 -03:00
Renato Araujo Oliveira Filho
ab19244c22 Added QSslCertificate to QtNetwork module.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2010-12-21 17:28:20 -03:00
Renato Araujo Oliveira Filho
37fb36e1ff Fixed indentation mistakes.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2010-12-21 17:28:19 -03:00
Marcelo Lira
bb39c847d3 Fixed global functions from QT_TR_NOOP and QT_TRANSLATE_NOOP family.
These function just return one of their arguments as result, and the
buggy implementation was forgetting to increment the reference count for
the returned object.

A new unit test was added.

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2010-12-21 12:23:39 -03:00
Marcelo Lira
14a5405837 Fixes bug #502.
The ownership of the editor returned by the Python override of
QAbstractItemDelegate.createEditor(...) is now transferred to C++.

A test was added to simulate the situation that triggers the bug,
instead of relying on an example with a view, model and editable cells.

See: http://bugs.openbossa.org/show_bug.cgi?id=502

Reviewed by Lauro Moura <lauro.neto@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2010-12-20 17:54:09 -03:00
Marcelo Lira
fbc06244e0 Fixed type system for TestView from pysidetest directory. 2010-12-20 17:47:01 -03:00
Marcelo Lira
116a0b159f QObject.sender should not steal the returned object ownership to Python. 2010-12-20 17:47:01 -03:00
Hugo Parente Lima
00bfc9ba7b Fix bug#544 - "QtCore.QRect missing binding for method getCoords"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2010-12-20 15:26:00 -02:00
Hugo Parente Lima
d2d9f6bac9 Fix bug#481 - "mimeData() missing from QListWidget, QTreeWidget, QTableWidget"
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2010-12-20 14:10:09 -02:00
Hugo Parente Lima
499ef3bbb4 Fix bug#558 - "print attribute of a QWebFrame cannot be accessed normally" 2010-12-20 11:18:42 -02:00
Hugo Parente Lima
8545117cff Fix QtMultimedia test to not fail when no devices were found.
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2010-12-17 19:16:56 -02:00
Hugo Parente Lima
c634b05def Add GLuint as primitive type.
If we don't do that any function with GLuint will be rejected by
the generator on Windows.
2010-12-17 19:16:56 -02:00
Hugo Parente Lima
dd1184ac4d Use .pyd extension for pysidetest module on Windows. 2010-12-17 19:16:56 -02:00
Hugo Parente Lima
3b61f88a1f Fix QML tests on Windows. 2010-12-17 19:16:56 -02:00
Hugo Parente Lima
53e472c5ef Fix compilation under MS Windows. 2010-12-17 19:16:56 -02:00
Marcelo Lira
ca914c9f63 Added a call to QObject.metaObject() to check if a segfault is caused.
This completes the tests for bug #507[1].

Also removed an unnecessary commented line.

[1] http://bugs.openbossa.org/show_bug.cgi?id=507

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
2010-12-17 13:59:51 -03:00
Marcelo Lira
9a4738457d Fixed QML type registering test.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Lauro Moura <lauro.neto@openbossa.org>
2010-12-17 11:39:03 -03:00
Marcelo Lira
d3e5c54d8a Updated model/view test to follow changes in Shiboken/9459b9da commit.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Lauro Moura <lauro.neto@openbossa.org>
2010-12-17 11:31:37 -03:00
Hugo Parente Lima
97740beab9 Fix bug#491 - "pyside doesn't respect BUILD_TESTS"
Reviewer: Lauro Moura <lauro.neto@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2010-12-16 15:35:58 -02:00
Marcelo Lira
634cde193e Fixed ownership of the value returned by QAbstractItemModel::data(...).
The value returned by Python to the virtual method
QAbstractItemModel::data(...) called from C++ has its ownership
transferred to C++.

Reviewed by Lauro Moura <lauro.neto@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2010-12-16 14:38:57 -03:00
Marcelo Lira
c53ec3c17e Updated the PySide test related to Python model returning data to C++. 2010-12-15 19:20:56 -03:00
Renato Araujo Oliveira Filho
539b906eb2 Created function used in PyObject getAttro.
Moved the code generated to a function in libpyside.
Create unit test for bug #525.

Reviewer: Hugo Parente Lima <hugo.pl@gmail.com>
          Marcelo Lira <marcelo.lira@openbossa.org>
2010-12-15 19:06:45 -03:00
Renato Araujo Oliveira Filho
fd9c8c8d76 Created unittest for bug #505.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2010-12-14 17:44:02 -03:00
Hugo Parente Lima
ffc853c88b Fix bug#517 - "Documentation for QtDeclarative is not linked in contents.html, modules.html"
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2010-12-14 17:15:06 -02:00
Hugo Parente Lima
44d4d96ec3 Fix bug#508 - "qmltopy1 crashes when setContextProperty is called twice without keeping a reference"
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2010-12-14 17:00:12 -02:00
Hugo Parente Lima
46bbefb1cc Fix bug#518 - "The file 'genindex.html' is not found (linked from contents.html)"
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2010-12-14 16:22:35 -02:00
Hugo Parente Lima
e3796fa3e7 Fix bug#512 - "QGridLayout::getItemPosition() is not available"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Renato Araújo <renato.filho@openbossa.org>
2010-12-14 15:28:55 -02:00
Marcelo Lira
6b720050ef Added test for Python written models returning new objects without keeping reference to them.
Reviewed by Lauro Moura <lauro.neto@openbossa.org>
eviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2010-12-13 17:55:54 -03:00
Marcelo Lira
4630f41f6a Fixed new style signal connection tests for the proper semantics.
One example to clarify: for the "destroyed(QObject* = 0)" signal,
"obj.destroyed.connect(...)" connects to "destroyed()", and
"obj.destroyed[QObject].connect(...)" connects to "destroyed(QObject*)".

Reviewed by Lauro Moura <lauro.neto@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2010-12-13 16:00:22 -03:00
Hugo Parente Lima
154560c9c5 Added unit test for bug#500
Reviewer: Lauro Mora <lauro.neto@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2010-12-13 11:39:24 -02:00
Hugo Parente Lima
e62b0364f1 Add tests for qmlregisterType function and qml list properties.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2010-12-09 16:19:41 -02:00
Hugo Parente Lima
9b2bf0a267 Changed file permissions to 0644. 2010-12-09 15:28:01 -02:00
Hugo Parente Lima
643742cbcf Add support for QML list properties.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2010-12-09 14:40:57 -02:00
Hugo Parente Lima
dc732da7a8 Remove unused field "type" from PySideProperty private struct. 2010-12-09 14:40:57 -02:00
Hugo Parente Lima
1422aed616 Replace useless check by a assert.
QMetaObject must already be ready at this point.
2010-12-09 14:40:57 -02:00
Hugo Parente Lima
1464dc1022 Add support for extension into PySide properties.
This is used by PySide implementation of QDeclarativeListProperty.
2010-12-09 14:40:56 -02:00
Hugo Parente Lima
b548a6f173 Fix copyright year. 2010-12-09 14:40:56 -02:00
Marcelo Lira
0a5e353ad0 Fixes QImage constructor signature that used string buffer as image data source.
The fixes uses the patch provided by Pieter Palmers on the bug #489
description[1].

A very simple test, to check the signature existence, was added.

[1] http://bugs.openbossa.org/show_bug.cgi?id=489

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2010-12-06 17:49:56 -03:00
Marcelo Lira
ed1c4c72b9 Added QRegExp.replace(QString, const char*) method.
The only way to search and replace using QRegExp is using the
QString::replace method. Since QString was removed, QRegExp now is
useful only to search stuff, but not replace. For this purpose the
QRegExp.replace method was added. The first argument is the string
that will be operated over, the second argument contains the
replacement, and the return value is a new modified Python string.

Unit tests and documentation for QRegExp.replace were added as well.

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2010-12-06 15:33:51 -03:00
Hugo Parente Lima
2d595e22b0 Avoid removal of qmlregistertype.cpp by the build system.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Luciano Wolf <luciano.wolf@openbossa.org>
2010-12-06 15:17:07 -02:00
Hugo Parente Lima
ec0aeb6fce Initial implementation of qmlRegisterType.
It's fully functional, but need some adjustaments in the build system that will be done in the next few days.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2010-12-03 19:35:59 -02:00
Hugo Parente Lima
12bc3f5c12 Set the object meta object at the declaration time, not instanciation time. 2010-12-03 19:35:59 -02:00
Hugo Parente Lima
35ab7bf679 Moved pyside slot attr name do pysideslot_p.h. 2010-12-03 19:35:58 -02:00
Hugo Parente Lima
a612c9ee58 PySidePropertyPrivate struct moved to the private header. 2010-12-03 19:35:58 -02:00
Hugo Parente Lima
afe4fcf695 Remove unused ancient proxyslot.cpp file. 2010-12-03 19:35:58 -02:00
Marcelo Lira
d51aacabd1 Updates to more code snippets on documentation concerning QtCore module.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2010-12-03 10:54:27 -03:00
Marcelo Lira
7ee87cc8f2 Updated a lot of code snippets on documentation concerning QtCore module.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
2010-12-03 07:54:44 -03:00
Hugo Parente Lima
59b4f2b59d Fixed qt_metacall, now everything works as it should.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Lauro Moura <lauro.neto@openbossa.org>
2010-12-02 18:12:24 -02:00
Hugo Parente Lima
e20a97a480 Fixed dynamic meta object to avoid empty meta method.
Empty meta methods cause a assert failure on QtDeclarative module.
Also removed the scoped pointer to avoid heap allocation when it's not
needed, as QByteArray is already implicity shared.
2010-12-01 15:38:16 -02:00
Luciano Wolf
9e26b5f39d Add needed cast to compile using python versions <2.6
Reviewer: Hugo Parente Lima <hugo.pl@gmail.com>
          Marcelo Lira <marcelo.lira@openbossa.org>
2010-12-01 11:08:28 -03:00
Hugo Parente Lima
113b8efdaf Fix doc generation after the refactor for v1.0.
Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
2010-11-29 14:48:58 -02:00
Kalev Lember
0d60daf1e1 Fix phonon VideoCaptureDevice detection to properly use phonon_ namespace
Fixes build with phonon 4.4.3 on Fedora rawhide.

Reviewer: Renato Araújo <renato.filho@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
2010-11-26 18:55:57 -03:00
301 changed files with 4269 additions and 7791 deletions

View file

@ -5,7 +5,8 @@ project(pysidebindings)
cmake_minimum_required(VERSION 2.6)
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Macros/
${CMAKE_MODULE_PATH})
find_package(Shiboken 1.1.1 REQUIRED)
find_package(GeneratorRunner 0.6.11 REQUIRED)
find_package(Shiboken 1.0.4 REQUIRED)
find_package(Qt4 4.5.0 REQUIRED)
find_file(GL_H "gl.h" PATH_SUFFIXES "GL")
include(FindQt4Extra)
@ -31,7 +32,7 @@ endif()
if(MSVC)
set(CMAKE_CXX_FLAGS "/Zc:wchar_t- /GR /EHsc /DNOCOLOR /DWIN32 /D_WINDOWS /D_SCL_SECURE_NO_WARNINGS")
else()
if(CMAKE_HOST_UNIX AND NOT CYGWIN)
if(CMAKE_HOST_UNIX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fvisibility=hidden -Wno-strict-aliasing")
endif()
set(CMAKE_CXX_FLAGS_DEBUG "-g")
@ -61,8 +62,8 @@ endif()
set(BINDING_NAME PySide)
set(BINDING_API_MAJOR_VERSION "1")
set(BINDING_API_MINOR_VERSION "1")
set(BINDING_API_MICRO_VERSION "1")
set(BINDING_API_MINOR_VERSION "0")
set(BINDING_API_MICRO_VERSION "4")
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_VERSION "${BINDING_API_MAJOR_VERSION}.${BINDING_API_MINOR_VERSION}.${BINDING_API_MICRO_VERSION}" CACHE STRING "PySide version" FORCE)
@ -141,7 +142,7 @@ add_custom_target(dist
if (NOT SITE_PACKAGE)
execute_process(
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_STRIP_TRAILING_WHITESPACE)
if (NOT SITE_PACKAGE)

View file

@ -9,6 +9,9 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/global.h.in"
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/__init__.py.in"
"${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_QTGUI_FOUND QtGui)
HAS_QT_MODULE(QT_QTNETWORK_FOUND QtNetwork)
@ -31,7 +34,7 @@ HAS_QT_MODULE(QT_PHONON_FOUND phonon)
HAS_QT_MODULE(QT_QTDECLARATIVE_FOUND QtDeclarative)
# install
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/__init__.py"
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/__init__.py" "${CMAKE_CURRENT_BINARY_DIR}/private.py"
DESTINATION "${SITE_PACKAGE}/${BINDING_NAME}${pyside_SUFFIX}")
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/typesystem_templates.xml
DESTINATION share/PySide${pyside_SUFFIX}/typesystems)

View file

@ -37,12 +37,14 @@ else()
endif()
if(ENABLE_WIN)
set(SPECIFIC_OS_FILES
set(QtCore_typesystem "typesystem_core_win.xml")
set(QtCore_extra_SRC
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/msg_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/point_wrapper.cpp
)
else()
set(SPECIFIC_OS_FILES "")
set(QtCore_typesystem "typesystem_core.xml")
set(QtCore_extra_SRC "")
endif()
set(QtCore_SRC
@ -144,14 +146,10 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qxmlstreamreader_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qxmlstreamwriter_wrapper.cpp
${QtCore_46_SRC}
${QtCore_47_SRC}
${SPECIFIC_OS_FILES}
${QtCore_extra_SRC}
)
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_typesystem_path "")
set(QtCore_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/
${QT_INCLUDE_DIR}
@ -170,4 +168,4 @@ create_pyside_module(QtCore
QtCore_typesystem_path
QtCore_SRC
QtCore_gluecode
${CMAKE_CURRENT_BINARY_DIR}/typesystem_core.xml)
${CMAKE_CURRENT_SOURCE_DIR}/${QtCore_typesystem})

View file

@ -0,0 +1,32 @@
namespace Shiboken {
template <>
struct Converter<HWND__>
{
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(HWND__ cppobj)
{
return PyCObject_FromVoidPtr(&cppobj, 0);
}
static HWND__ toCpp(PyObject* pyobj)
{
return *((HWND__*) PyCObject_AsVoidPtr(pyobj));
}
};
}

View file

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

View file

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

View file

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

View file

@ -0,0 +1,5 @@
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

@ -0,0 +1,16 @@
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

@ -0,0 +1,34 @@
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

@ -0,0 +1,35 @@
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

@ -0,0 +1,45 @@
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

@ -0,0 +1,49 @@
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 usec = PyDateTime_DATE_GET_MICROSECOND(pyObj);
return QDateTime(QDate(year, month, day), QTime(hour, min, sec, usec/1000));
} else {
return ValueTypeConverter<QDateTime>::toCpp(pyObj);
}
}
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,51 @@
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

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

View file

@ -0,0 +1,18 @@
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

@ -0,0 +1,45 @@
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 usec = PyDateTime_TIME_GET_MICROSECOND(pyObj);
return QTime(hour, min, sec, usec/1000);
} else {
return ValueTypeConverter<QTime>::toCpp(pyObj);
}
}
}

View file

@ -0,0 +1,216 @@
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

@ -0,0 +1,87 @@
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

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

View file

@ -1,24 +0,0 @@
<?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

@ -1,23 +0,0 @@
<?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

@ -1,26 +0,0 @@
<?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

@ -19,33 +19,9 @@
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 name="HWND__">
<conversion-rule file="glue/hwnd_conversions.h"/>
</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>
@ -54,4 +30,6 @@
</value-type>
<suppress-warning text="class 'MSG' inherits from unknown base class 'tagMSG'"/>
<suppress-warning text="class not found for setup inheritance 'tagMSG'"/>
<load-typesystem name="typesystem_core.xml" generate="yes"/>
</typesystem>

View file

@ -1,26 +0,0 @@
<?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
)
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_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_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${QT_QTCORE_INCLUDE_DIR}

View file

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

View file

@ -46,8 +46,7 @@
</inject-documentation>
<inject-code class="target">
int %0 = PySide::qmlRegisterType(%ARGUMENT_NAMES);
%PYARG_0 = %CONVERTTOPYTHON[int](%0);
%PYARG_0 = %CONVERTTOPYTHON[int](PySide::qmlRegisterType(%1, %2, %3, %4, %5));
</inject-code>
</add-function>
@ -60,7 +59,8 @@
</enum-type>
<inject-code class="target" position="end">
PySide::initQmlSupport(module);
Shiboken::TypeResolver::createValueTypeResolver&lt; QList&lt;QObject*&gt; &gt;("QList&lt;QObject*&gt;");
PySide::initQmlSupport(module);
</inject-code>
<object-type name="QDeclarativeExtensionInterface"/>
@ -91,44 +91,26 @@
<parent index="this" action="add" />
</modify-argument>
</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>
<value-type name="QDeclarativeError" />
<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="QDeclarativeExpression" />
<object-type name="QDeclarativeExtensionPlugin" />
<object-type name="QDeclarativeImageProvider">
<enum-type name="ImageType" />
</object-type>
<object-type name="QDeclarativeItem">
<object-type name="QDeclarativeItem" polymorphic-id-expression="qgraphicsitem_cast&lt;QDeclarativeItem*>(%1)">
<extra-includes>
<include file-name="pysideqmlregistertype.h" location="local"/>
</extra-includes>
<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>
<value-type name="QDeclarativeListReference" />

View file

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

View file

@ -1,122 +0,0 @@
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

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

View file

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

View file

@ -1,6 +1,6 @@
// Init qApp macro to None.
if (qApp) {
PyObject* pyApp = %CONVERTTOPYTHON[QApplication*](qApp);
PyObject* pyApp = Shiboken::Converter<QApplication*>::toPython(qApp);
Py_INCREF(pyApp);
PyModule_AddObject(module, "qApp", pyApp);
} else {

View file

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

View file

@ -0,0 +1,32 @@
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

@ -0,0 +1,49 @@
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,31 +19,9 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-->
<typesystem package="PySide.QtGui">
<primitive-type name="Qt::HANDLE" target-lang-api-name="PyObject" />
<primitive-type name="WId" target-lang-api-name="PyObject">
<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>
<conversion-rule file="glue/wid_conversions.h"/>
</primitive-type>
<inject-code class="native" position="beginning">
<insert-template name="checkPyCapsuleOrPyCObject_func"/>
</inject-code>
<enum-type name="QPixmap::HBitmapFormat" />
</typesystem>

View file

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

View file

@ -15,7 +15,7 @@ set(QtHelp_SRC
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtHelp/qthelp_module_wrapper.cpp
)
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_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtHelp_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtHelp_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${QT_QTCORE_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
)
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}")
set(QtMaemo5_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtMaemo5_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
# QT_QTMAEMO5_* variables are not defined by CMake
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/qtmultimedia_module_wrapper.cpp
)
set(QtMultimedia_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtMultimedia_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtMultimedia_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtMultimedia/

View file

@ -37,8 +37,6 @@
<object-type name="QAbstractVideoBuffer">
<enum-type name="HandleType"/>
<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-argument index="0">
<replace-type modified-type="PyObject"/>
@ -53,7 +51,6 @@
<insert-template name="fix_arg,int*,int*"/>
</inject-code>
</modify-function>
-->
</object-type>
<object-type name="QAbstractVideoSurface">
<enum-type name="Error"/>

View file

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

View file

@ -0,0 +1,6 @@
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,6 +53,10 @@
<enum-type name="State"/>
<enum-type name="TransferMode"/>
<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="login(const QString&amp;, const QString&amp;)" allow-thread="yes" />
<modify-function signature="close()" allow-thread="yes" />
@ -84,6 +88,10 @@
<enum-type name="ConnectionMode"/>
<enum-type name="Error"/>
<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="read(char*, qint64)" allow-thread="yes">
<modify-argument index="return">
@ -121,6 +129,10 @@
<object-type name="QTcpSocket"/>
<object-type name="QUdpSocket">
<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-argument index="1">
<remove-argument/>
@ -136,19 +148,7 @@
<modify-argument index="return">
<replace-type modified-type="(data, address, port)"/>
</modify-argument>
<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>
<inject-code class="target" position="beginning" file="glue/qudpsocket_read_datagram_glue.cpp"/>
</modify-function>
<modify-function signature="writeDatagram(const QByteArray&amp;, const QHostAddress&amp;, quint16)" allow-thread="yes"/>
<!-- ### writeDatagram(QByteArray, ...) does the trick -->
@ -185,9 +185,6 @@
<enum-type name="Operation"/>
<modify-function signature="createRequest(QNetworkAccessManager::Operation, const QNetworkRequest&amp;, QIODevice *)">
<modify-argument index="3" invalidate-after-use="yes"/>
<modify-argument index="return">
<define-ownership class="target" owner="default"/>
</modify-argument>
</modify-function>
<modify-function signature="get(const QNetworkRequest&amp;)" allow-thread="yes"/>
<modify-function signature="post(const QNetworkRequest &amp;, QIODevice *)" allow-thread="yes"/>
@ -211,7 +208,6 @@
<!-- ### QHostAddress(QIPv6Address) does this -->
<modify-function signature="QHostAddress(quint8*)" remove="all" />
<!-- ### -->
<modify-function signature="setAddress(quint8*)" remove="all" />
</value-type>
<value-type name="QHostInfo">
@ -249,17 +245,17 @@
return 16;
</inject-code>
</add-function>
<add-function signature="__getitem__">
<add-function signature="__getitem__">
<inject-code class="target" position="beginning">
if (_i >= 16) {
PyErr_SetString(PyExc_IndexError, "index out of bounds");
return 0;
}
if (_i &lt; 0)
_i = 16 - qAbs(_i);
if (_i >= 16) {
PyErr_SetString(PyExc_IndexError, "index out of bounds");
return 0;
}
uint item = %CPPSELF.c[_i];
return %CONVERTTOPYTHON[uint](item);
if (_i &lt; 0)
_i = 16 - qAbs(_i);
return %CONVERTTOPYTHON[uint](%CPPSELF->c[_i]);
</inject-code>
</add-function>
<add-function signature="__len__">
@ -269,15 +265,17 @@
</add-function>
<add-function signature="__setitem__">
<inject-code class="target" position="beginning">
if (_i >= 16) {
PyErr_SetString(PyExc_IndexError, "index out of bounds");
return -1;
}
if (_i &lt; 0)
_i = 16 - qAbs(_i);
quint8 item = %CONVERTTOCPP[quint8](_value);
%CPPSELF.c[_i] = item;
return 0;
if (_i >= 16) {
PyErr_SetString(PyExc_IndexError, "index out of bounds");
return -1;
}
if (_i &lt; 0)
_i = 16 - qAbs(_i);
%CPPSELF->c[_i] = %CONVERTTOCPP[quint8](_value);
return 0;
</inject-code>
</add-function>
</value-type>

View file

@ -32,7 +32,7 @@ set(QtOpenGL_SRC
${QtOpenGL_47_SRC}
)
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_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtOpenGL_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtOpenGL_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${QT_QTCORE_INCLUDE_DIR}
${QT_QTGUI_INCLUDE_DIR}

View file

@ -21,21 +21,6 @@
<typesystem package="PySide.QtOpenGL">
<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="QGLContext" field-name="currentCtx"/>
@ -106,568 +91,14 @@
<object-type name="QGLShader" since="4.6">
<enum-type name="ShaderTypeBit" flags="ShaderType"/>
</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">
<!-- 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 -->
<modify-function signature="setUniformValue(int,Array)" remove="all" />
<modify-function signature="setUniformValue(const char*,Array)" remove="all" />
<modify-function signature="setAttributeValue(int,const GLfloat*,int,int)" remove="all" />
<modify-function signature="setAttributeValue(const char*,const GLfloat*,int,int)" remove="all" />
<modify-function signature="setAttributeArray(int, GLenum, 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" />
<modify-function signature="setUniformValue(int, 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(const char*,const float*,int,int)" remove="all" />
<modify-function signature="setAttributeArray(int, uint, 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" />
<!-- ### -->
</object-type>
@ -678,13 +109,15 @@
<enum-type name="UsagePattern" since="4.7"/>
<modify-function signature="allocate(const void*, int)">
<modify-argument index="1">
<replace-type modified-type="QByteArray&amp;"/>
<replace-type modified-type="const QByteArray&amp;"/>
</modify-argument>
<modify-argument index="2">
<replace-default-expression with="-1"/>
</modify-argument>
<inject-code class="target" position="beginning">
int size = (%2 &lt; 0) ? %1.size() : %2;
int size = %2;
if (size &lt; 0)
size = %1.size();
%CPPSELF.allocate((const void*) %1.data(), size);
</inject-code>
</modify-function>
@ -716,21 +149,21 @@
QByteArray ret;
if (result)
ret.append((const char*)data, %3);
%PYARG_0 = PyTuple_New(2);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[bool](result));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QByteArray](ret));
%PYARG_0 = Shiboken::makeTuple(result, ret);
delete[] data;
</inject-code>
</modify-function>
<modify-function signature="write(int, const void*, int)">
<modify-argument index="2">
<replace-type modified-type="QByteArray&amp;"/>
<replace-type modified-type="const QByteArray&amp;"/>
</modify-argument>
<modify-argument index="3">
<replace-default-expression with="-1"/>
</modify-argument>
<inject-code class="target" position="beginning">
int size = (%3 &lt; 0) ? %2.size() : %3;
int size = %3;
if (size &lt; 0)
size = %2.size();
%CPPSELF.write(%1, (const void*) %2.data(), size);
</inject-code>
</modify-function>

View file

@ -1,10 +1,10 @@
project(QtScript)
if (${QT_VERSION_MAJOR} EQUAL 4 AND ${QT_VERSION_MINOR} LESS 7)
set (QtScript_47_SRC )
if (${QT_VERSION_MAJOR} EQUAL 4 AND ${QT_VERSION_MINOR} LESS 6)
set (QtCore_46_SRC )
else()
set(QtScript_47_SRC
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript/qscriptprogram_wrapper.cpp
set(QtScript_46_SRC
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript/qscriptprogram_wrapper.cpp
)
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/qscriptvalue_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript/qscriptvalueiterator_wrapper.cpp
${QtScript_47_SRC}
${QtScript_46_SRC}
)
set(QtScript_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}")
set(QtScript_typesystem_path "${QtCore_SOURCE_DIR}")
set(QtScript_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript
${QT_INCLUDE_DIR}

View file

@ -40,76 +40,16 @@
<object-type name="QScriptEngine">
<enum-type name="QObjectWrapOption" flags="QObjectWrapOptions"/>
<enum-type name="ValueOwnership"/>
<!-- Not supported BUG #957-->
<modify-function signature="scriptValueFromQMetaObject()" remove="all" />
</object-type>
<object-type name="QScriptExtensionInterface"/>
<object-type name="QScriptExtensionPlugin"/>
<value-type name="QScriptProgram" since="4.7"/>
<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="QScriptString"/>
<value-type name="QScriptValue">
<enum-type name="PropertyFlag" flags="PropertyFlags"/>
<enum-type name="ResolveFlag" flags="ResolveFlags"/>
<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>
<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>
<object-type name="QScriptValueIterator"/>
</typesystem>

View file

@ -5,7 +5,7 @@ set(QtScriptTools_SRC
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScriptTools/qscriptenginedebugger_wrapper.cpp
)
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_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_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${QT_QTCORE_INCLUDE_DIR}

View file

@ -21,7 +21,7 @@ set(QtSql_SRC
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtSql/qtsql_module_wrapper.cpp
)
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_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtSql_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtSql_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${QT_QTCORE_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
)
set(QtSvg_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtSvg_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtSvg_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtSvg/
${QT_INCLUDE_DIR}

View file

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

View file

@ -49,7 +49,6 @@
<rejection class="QTest" function-name="toString&lt;uint>"/>
<rejection class="QTest" function-name="toString&lt;ulong>"/>
<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="touchEvent"/>

View file

@ -5,7 +5,7 @@ set(QtUiTools_SRC
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtUiTools/quiloader_wrapper.cpp
)
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_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_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${QT_QTCORE_INCLUDE_DIR}
${QT_QTGUI_INCLUDE_DIR}
@ -23,10 +23,10 @@ set(QtUiTools_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
set(QtUiTools_libraries pyside
uiplugin
${SHIBOKEN_PYTHON_LIBRARIES}
${QT_QTUITOOLS_LIBRARY}
${QT_QTDESIGNER_LIBRARY}
${QT_QTCORE_LIBRARY}
${QT_QTGUI_LIBRARY})
${QT_QTGUI_LIBRARY}
${QT_QTDESIGNER_LIBRARY}
${QT_QTUITOOLS_LIBRARY})
set(QtUiTools_deps QtGui QtXml)
create_pyside_module(QtUiTools
QtUiTools_include_dirs

View file

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

View file

@ -1,52 +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>
#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

@ -0,0 +1,77 @@
/*
* 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"?>
<!--
This file is part of PySide project.
Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies).
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
@ -26,7 +26,6 @@
<extra-includes>
<include file-name="glue/plugins.h" location="local"/>
</extra-includes>
<inject-code class="native" position="beginning" file="glue/uitools_loadui.cpp"/>
<inject-code>
Q_IMPORT_PLUGIN(uiplugin);
</inject-code>
@ -70,57 +69,62 @@
%CPPSELF.addPluginPath(""); // force reload widgets
</inject-code>
</add-function>
<modify-function signature="createAction(QObject*, const QString&amp;)">
<modify-function signature="createAction(QObject *, const QString&amp;)">
<modify-argument index="return">
<parent index="1" action="add"/>
</modify-argument>
</modify-function>
<modify-function signature="createActionGroup(QObject*, const QString&amp;)">
<modify-function signature="createActionGroup(QObject *, const QString&amp;)">
<modify-argument index="return">
<parent index="1" action="add"/>
</modify-argument>
</modify-function>
<modify-function signature="createLayout(const QString&amp;, QObject*, const QString&amp;)">
<modify-function signature="createLayout(const QString&amp;,QObject *, const QString&amp;)">
<modify-argument index="return">
<parent index="2" action="add"/>
</modify-argument>
</modify-function>
<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">
<parent index="2" action="add"/>
<define-ownership class="target" owner="default"/>
<parent index="2" action="add"/>
</modify-argument>
</modify-function>
<modify-function signature="load(QIODevice*, QWidget*)">
<extra-includes>
<include file-name="glue/uitools_loadui.h" location="local"/>
</extra-includes>
<modify-argument index="2">
<replace-default-expression with="0" />
<rename to="parentWidget" />
</modify-argument>
<modify-argument index="return">
<define-ownership class="target" owner="target"/>
<parent index="2" action="add"/>
</modify-argument>
<inject-code>
// Avoid calling the original function: %CPPSELF.%FUNCTION_NAME()
%PYARG_0 = QUiLoadedLoadUiFromDevice(%CPPSELF, %1, %2);
%PYARG_0 = quiloader_load_ui_from_device(%CPPSELF, %1, %2);
</inject-code>
</modify-function>
<!-- Syntax sugar -->
<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">
<replace-default-expression with="0" />
<rename to="parentWidget" />
</modify-argument>
<modify-argument index="return">
<define-ownership class="target" owner="target"/>
<parent index="2" action="add"/>
</modify-argument>
<inject-code>
// Avoid calling the original function: %CPPSELF.%FUNCTION_NAME()
%PYARG_0 = QUiLoaderLoadUiFromFileName(%CPPSELF, %1, %2);
%PYARG_0 = quiloader_load_ui(%CPPSELF, %1, %2);
</inject-code>
</add-function>
</object-type>

View file

@ -37,7 +37,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtWebKit/webcore_wrapper.cpp
${QtWebKit_46_SRC}
)
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_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtNetwork_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(QtWebkit_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtWebkit/
${QT_INCLUDE_DIR}

View file

@ -25,6 +25,9 @@
<namespace-type name="WebCore"/>
<!-- unsuported property with type QList<MimeType> -->
<rejection class="QWebPluginFactory::Plugin" field-name="mimeTypes"/>
<object-type name="QWebView">
<modify-function signature="setPage(QWebPage*)">
<modify-argument index="1">
@ -81,9 +84,6 @@
<!-- Qt 4.6 -->
<enum-type name="ErrorDomain" since="4.6"/>
<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="ChooseMultipleFilesExtensionReturn" />
@ -93,31 +93,28 @@
<value-type name="ExtensionReturn" />
<modify-function signature="extension(QWebPage::Extension, const QWebPage::ExtensionOption*, QWebPage::ExtensionReturn*)">
<template name="qwebpage_extension_argument_conversion">
PyObject* %out = 0;
// Cast the parameters according to the extension type
if (extension == QWebPage::ChooseMultipleFilesExtension) {
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
} else if (extension == QWebPage::ErrorPageExtension) {
const ErrorPageExtension$TYPE_SUFFIX* _in = reinterpret_cast&lt;const ErrorPageExtension$TYPE_SUFFIX*>(%in);
%out = %CONVERTTOPYTHON[const QWebPage::ErrorPageExtension$TYPE_SUFFIX*](_in);
#endif
}
</template>
<modify-argument index="2" invalidate-after-use="yes">
<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>
PyObject* %out = 0;
// Cast the parameters according to the extension type
if (extension == QWebPage::ChooseMultipleFilesExtension)
%out = %CONVERTTOPYTHON[ChooseMultipleFilesExtensionOption*](reinterpret_cast&lt;const ChooseMultipleFilesExtensionOption*>(option));
#if QT_VERSION >= 0x040600
else if (extension == QWebPage::ErrorPageExtension)
%out = %CONVERTTOPYTHON[ErrorPageExtensionOption*](reinterpret_cast&lt;const ErrorPageExtensionOption*>(option));
#endif
</conversion-rule>
</modify-argument>
<modify-argument index="3" invalidate-after-use="yes">
<conversion-rule class="target">
<insert-template name="qwebpage_extension_argument_conversion">
<replace from="$TYPE_SUFFIX" to="Return"/>
</insert-template>
PyObject* %out = 0;
// Cast the parameters according to the extension type
if (extension == QWebPage::ChooseMultipleFilesExtension)
%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>
</modify-argument>
</modify-function>
@ -144,49 +141,21 @@
</modify-function>
<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">
<remove-argument />
<conversion-rule class="native">
QString _local;
QString* %4 = &amp;_local;
</conversion-rule>
</modify-argument>
<modify-argument index="return">
<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>
<replace-type modified-type="(retval, result)"/>
</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>
<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 name="QWebHistory"/>
<object-type name="QWebHistoryInterface"/>
@ -194,12 +163,6 @@
<enum-type name="Extension"/>
<value-type name="Plugin"/>
<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>
<value-type name="QWebDatabase"/>
<value-type name="QWebHistoryItem"/>
@ -215,17 +178,16 @@
<value-type name="QWebElementCollection" since="4.6">
<add-function signature="__len__">
<inject-code>
return %CPPSELF.count();
return %CPPSELF.count();
</inject-code>
</add-function>
<add-function signature="__getitem__">
<inject-code>
if (_i &lt; 0 || _i >= %CPPSELF.count()) {
PyErr_SetString(PyExc_IndexError, "index out of bounds");
return 0;
}
QWebElement element = %CPPSELF.at(_i);
return %CONVERTTOPYTHON[QWebElement](element);
if (_i &lt; 0 || _i >= %CPPSELF.count()) {
PyErr_SetString(PyExc_IndexError, "index out of bounds");
return 0;
}
return %CONVERTTOPYTHON[QWebElement](%CPPSELF.at(_i));
</inject-code>
</add-function>
</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
)
set(QtXml_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}")
set(QtXml_typesystem_path "${QtCore_SOURCE_DIR}")
set(QtXml_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtXml
${CMAKE_SOURCE_DIR}

View file

@ -33,17 +33,14 @@
<value-type name="QDomComment" />
<template name="qdomdocument_setcontent">
QString _errorMsg_;
int _errorLine_ = 0;
int _errorColumn_ = 0;
%BEGIN_ALLOW_THREADS
bool _ret_ = %CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES, &amp;_errorMsg_, &amp;_errorLine_, &amp;_errorColumn_);
%END_ALLOW_THREADS
%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_));
QString _errorMsg_;
int _errorLine_ = 0;
int _errorColumn_ = 0;
%BEGIN_ALLOW_THREADS
bool _ret_ = %CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES, &amp;_errorMsg_, &amp;_errorLine_, &amp;_errorColumn_);
%END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(_ret_, _errorMsg_, _errorLine_, _errorColumn_);
</template>
<value-type name="QDomDocument">
@ -272,13 +269,13 @@
</conversion-rule>
</modify-argument>
<inject-code class="target" position="end">
QXmlInputSource* _qxmlinputsource_arg_ = 0;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(%1, %2, _qxmlinputsource_arg_);
%END_ALLOW_THREADS
%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_));
QXmlInputSource* _qxmlinputsource_arg_ = 0;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(%1, %2, _qxmlinputsource_arg_);
%END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(%0, _qxmlinputsource_arg_);
</inject-code>
</modify-function>
</object-type>
@ -299,13 +296,11 @@
</conversion-rule>
</modify-argument>
<inject-code class="target" position="end">
QXmlInputSource* _qxmlinputsource_arg_ = 0;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE %0 = %CPPSELF.%TYPE::%FUNCTION_NAME(%1, %2, _qxmlinputsource_arg_);
%END_ALLOW_THREADS
%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_));
QXmlInputSource* _qxmlinputsource_arg_ = 0;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE %0 = %CPPSELF.%TYPE::%FUNCTION_NAME(%1, %2, _qxmlinputsource_arg_);
%END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(%0, _qxmlinputsource_arg_);
</inject-code>
</modify-function>
</object-type>

View file

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

View file

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

View file

@ -1,3 +1,5 @@
__all__ = ['QtCore', 'QtGui', 'QtNetwork', 'QtOpenGL', 'QtSql', 'QtSvg', 'QtTest', 'QtWebKit', 'QtScript']
import private
__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@)

View file

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

View file

@ -49,7 +49,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/phonon/phonon_backendcapabilities_notifierwra
${phonon_OPTIONAL_SRC}
)
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_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${phonon_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}")
set(phonon_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
${QT_QTCORE_INCLUDE_DIR}
${QT_QTGUI_INCLUDE_DIR}

4
PySide/private.py Normal file
View file

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

View file

@ -21,89 +21,76 @@
<typesystem>
<template name="replace_child">
$CHILD_TYPE* oldChild = %CPPSELF.$FUNCTION_GET_OLD();
if (oldChild &amp;&amp; (oldChild != $CPPARG)) {
if (oldChild) {
Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[$CHILD_TYPE*](oldChild));
Shiboken::Object::setParent(0, pyChild);
Shiboken::Object::releaseOwnership(pyChild);
Shiboken::Object::setParent(NULL, pyChild);
}
Shiboken::Object::setParent(%PYSELF, $PYARG);
</template>
<!-- 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*">
bool ok_;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;ok_);
%END_ALLOW_THREADS
<insert-template name="tuple_retval_ok"/>
%PYARG_0 = Shiboken::makeTuple(retval_, ok_);
</template>
<template name="fix_args,bool*">
bool ok_;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES, &amp;ok_);
%END_ALLOW_THREADS
<insert-template name="tuple_retval_ok"/>
%PYARG_0 = Shiboken::makeTuple(retval_, ok_);
</template>
<template name="fix_arg,bool*,arg">
bool ok_;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, &amp;ok_, %3);
%END_ALLOW_THREADS
<insert-template name="tuple_retval_ok"/>
%PYARG_0 = Shiboken::makeTuple(retval_, ok_);
</template>
<template name="fix_bool*,arg">
bool ok_;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;ok_, %2);
%END_ALLOW_THREADS
<insert-template name="tuple_retval_ok"/>
%PYARG_0 = Shiboken::makeTuple(retval_, ok_);
</template>
<template name="fix_bool*,arg,arg">
bool ok_;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;ok_, %2, %3);
%END_ALLOW_THREADS
<insert-template name="tuple_retval_ok"/>
%PYARG_0 = Shiboken::makeTuple(retval_, ok_);
</template>
<template name="fix_bool*,arg,arg,arg">
bool ok_;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;ok_, %2, %3, %4);
%END_ALLOW_THREADS
<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"/>
%PYARG_0 = Shiboken::makeTuple(retval_, ok_);
</template>
<template name="fix_arg,arg,arg,arg,arg,arg,arg,bool*,arg">
bool ok_;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, %5, %6, %7, &amp;ok_, %9);
%END_ALLOW_THREADS
<insert-template name="tuple_retval_ok"/>
%PYARG_0 = Shiboken::makeTuple(retval_, ok_);
</template>
<template name="fix_arg,arg,arg,arg,arg,arg,bool*,arg">
bool ok_;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, %5, %6, &amp;ok_, %8);
%END_ALLOW_THREADS
<insert-template name="tuple_retval_ok"/>
%PYARG_0 = Shiboken::makeTuple(retval_, ok_);
</template>
<template name="fix_arg,arg,arg,arg,arg,bool*,arg">
bool ok_;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, %5, &amp;ok_, %7);
%END_ALLOW_THREADS
<insert-template name="tuple_retval_ok"/>
%PYARG_0 = Shiboken::makeTuple(retval_, ok_);
</template>
<template name="get_slice">
%TYPE* sequence;
@ -148,35 +135,27 @@
</template>
<template name="fix_char*">
char val_;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;val_);
%END_ALLOW_THREADS
%PYARG_0 = PyTuple_New(2);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](retval_));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[char](val_));
char val_;
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;val_);
%END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(retval_, val_);
</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*">
$TYPE a, b, c, d;
%BEGIN_ALLOW_THREADS
%CPPSELF->::%TYPE::%FUNCTION_NAME(&amp;a, &amp;b, &amp;c, &amp;d);
%END_ALLOW_THREADS
<insert-template name="tuple_abcd_same_type"/>
$TYPE a, b, c, d;
%BEGIN_ALLOW_THREADS
%CPPSELF->::%TYPE::%FUNCTION_NAME(&amp;a, &amp;b, &amp;c, &amp;d);
%END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(a, b, c, d);
</template>
<template name="fix_number*,number*,number*,number*,args">
$TYPE a, b, c, d;
%BEGIN_ALLOW_THREADS
%CPPSELF->::%TYPE::%FUNCTION_NAME(&amp;a, &amp;b, &amp;c, &amp;d, %ARGUMENT_NAMES);
%END_ALLOW_THREADS
<insert-template name="tuple_abcd_same_type"/>
$TYPE a, b, c, d;
%BEGIN_ALLOW_THREADS
%CPPSELF->::%TYPE::%FUNCTION_NAME(&amp;a, &amp;b, &amp;c, &amp;d, %ARGUMENT_NAMES);
%END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(a, b, c, d);
</template>
<template name="fix_native_return_number*,number*,number*,number*">
@ -196,36 +175,41 @@
}
</template>
<template name="fix_number*,number*,number*,number*,number*">
$TYPE a, b, c, d, e;
%BEGIN_ALLOW_THREADS
%CPPSELF.%FUNCTION_NAME(&amp;a, &amp;b, &amp;c, &amp;d, &amp;e);
%END_ALLOW_THREADS
%PYARG_0 = PyTuple_New(5);
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));
PyTuple_SET_ITEM(%PYARG_0, 4, %CONVERTTOPYTHON[$TYPE](e));
<template name="fix_int*,int*,int*,int*,int*">
int a, b, c, d, e;
%BEGIN_ALLOW_THREADS
%CPPSELF.%FUNCTION_NAME(&amp;a, &amp;b, &amp;c, &amp;d, &amp;e);
%END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(a, b, c, d, e);
</template>
<template name="fix_qreal*,qreal*,qreal*,qreal*,qreal*">
qreal a, b, c, d, e;
%CPPSELF.%FUNCTION_NAME(&amp;a, &amp;b, &amp;c, &amp;d, &amp;e);
%PYARG_0 = Shiboken::makeTuple(a, b, c, d, e);
</template>
<template name="read_wrapper">
Shiboken::AutoArrayPointer&lt;char&gt; _data(%2);
PySide::AutoArrayPointer&lt;char&gt; _data(%2);
qint64 _size = %CPPSELF.%FUNCTION_NAME(_data, %2);
QByteArray ba;
if (_size > 0)
ba = QByteArray(_data, _size);
%PYARG_0 = %CONVERTTOPYTHON[QByteArray](ba);
%PYARG_0 = %CONVERTTOPYTHON[QByteArray](QByteArray(_data, _size));
else
%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 name="fix_args,number*,number*">
$TYPE a, b;
%BEGIN_ALLOW_THREADS
%CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES, &amp;a, &amp;b);
%END_ALLOW_THREADS
%PYARG_0 = PyTuple_New(2);
PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[$TYPE](a));
PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[$TYPE](b));
$TYPE a, b;
%BEGIN_ALLOW_THREADS
%CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES, &amp;a, &amp;b);
%END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(a, b);
</template>
<template name="fix_virtual_method_return_value_and_bool*">
@ -236,15 +220,12 @@
</template>
<template name="fix_arg,int*,int*">
%RETURN_TYPE _ret;
int a, b;
%BEGIN_ALLOW_THREADS
_ret = %CPPSELF.%FUNCTION_NAME(%1, &amp;a, &amp;b);
%END_ALLOW_THREADS
%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));
%RETURN_TYPE _ret;
int a, b;
%BEGIN_ALLOW_THREADS
_ret = %CPPSELF.%FUNCTION_NAME(%1, &amp;a, &amp;b);
%END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(_ret, a, b);
</template>
<template name="return_QString">
@ -252,34 +233,27 @@
</template>
<template name="return_tuple_QValidator_QString_int">
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %RETURN_TYPE(%CPPSELF.%FUNCTION_NAME(%1, %2));
%END_ALLOW_THREADS
%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));
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %RETURN_TYPE(%CPPSELF.%FUNCTION_NAME(%1, %2));
%END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(retval_, %1, %2);
</template>
<template name="return_for_QFileDialog">
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, &amp;%5, %6);
%END_ALLOW_THREADS
%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));
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, &amp;%5, %6);
%END_ALLOW_THREADS
%PYARG_0 = Shiboken::makeTuple(retval_, %5);
</template>
<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);
if (!Shiboken::Object::hasParentInfo(_pySelf))
Shiboken::Object::setParent(%CONVERTTOPYTHON[QApplication*](qApp), %PYARG_0);
}
<template name="set_qapp_parent_for_orphan">
SbkObject* _pySelf = reinterpret_cast&lt;SbkObject*&gt;(%PYARG_0);
if (!Shiboken::Object::hasParentInfo(_pySelf))
Shiboken::Object::setParent(%CONVERTTOPYTHON[QApplication*](qApp), %PYARG_0);
</template>
<!-- templates for __repr__ -->
<template name="repr_code">
QString format = QString().sprintf("%s(%REPR_FORMAT)", ((PyObject*)%PYSELF)->ob_type->tp_name, %REPR_ARGS);
%PYARG_0 = Shiboken::String::fromCString(qPrintable(format));
%PYARG_0 = PyString_FromString(qPrintable(format));
</template>
<template name="repr_code_matrix">
QString format= QString("%1((").arg(((PyObject*)%PYSELF)->ob_type->tp_name);
@ -295,7 +269,7 @@
}
format += "))";
%PYARG_0 = Shiboken::String::fromCString(qPrintable(format));
%PYARG_0 = PyString_FromString(qPrintable(format));
</template>
<template name="return_internal_pointer">
@ -351,8 +325,7 @@
</template>
<template name="matrix_transposed_function">
%TRANSPOSED_TYPE transp = %CPPSELF.transposed();
return %CONVERTTOPYTHON[%TRANSPOSED_TYPE](transp);
return %CONVERTTOPYTHON[%TRANSPOSED_TYPE](%CPPSELF.transposed());
</template>
<!-- Replace '#' for the argument number you want. -->
@ -368,15 +341,12 @@
</template>
<template name="__iter_parent__">
%CPPSELF_TYPE _tmp = %CPPSELF.begin();
%PYARG_0 = %CONVERTTOPYTHON[%CPPSELF_TYPE](_tmp);
%PYARG_0 = %CONVERTTOPYTHON[%CPPSELF_TYPE](%CPPSELF.begin());
</template>
<template name="__next__">
if (!%CPPSELF.atEnd()) {
%PYARG_0 = %CONVERTTOPYTHON[%CPPSELF_TYPE](*%CPPSELF);
++(*%CPPSELF);
}
if (!%CPPSELF.atEnd())
%PYARG_0 = %CONVERTTOPYTHON[%CPPSELF_TYPE]((*%CPPSELF)++);
</template>
<template name="convertFromMultiMap">
@ -397,32 +367,5 @@
%PYARG_0 = Py_BuildValue("%TT_FORMAT", %TT_ARGS);
</template>
<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()
add_custom_command(OUTPUT ${${module_sources}}
COMMAND ${SHIBOKEN_BINARY} ${GENERATOR_EXTRA_FLAGS}
COMMAND ${GENERATORRUNNER_BINARY} ${GENERATOR_EXTRA_FLAGS}
${pyside_BINARY_DIR}/pyside_global.h
--include-paths=${pyside_SOURCE_DIR}${PATH_SEP}${QT_INCLUDE_DIR}
--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(${module_name}_suffix ".pyd")
else()
set(${module_name}_suffix ${CMAKE_SHARED_MODULE_SUFFIX})
set(${module_name}_suffix ".so")
endif()
target_link_libraries(${module_name} ${${module_libraries}})
if(${module_deps})

View file

@ -8,14 +8,9 @@ add_custom_target(qdoc3
COMMENT "Running qdoc3 against Qt source code..."
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
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/rst
COMMAND ${SHIBOKEN_PYTHON_INTERPRETER} ${SPHINX_BUILD} -b html ${CMAKE_CURRENT_BINARY_DIR}/rst html
COMMAND sphinx-build -b html ${CMAKE_CURRENT_BINARY_DIR}/rst html
)
# create conf.py based on conf.py.in
@ -23,7 +18,7 @@ configure_file("conf.py.in" "rst/conf.py" @ONLY)
configure_file(typesystem_doc.xml.in typesystem_doc.xml @ONLY)
add_custom_target("docrsts"
COMMAND ${SHIBOKEN_BINARY} --generator-set=qtdoc
COMMAND ${GENERATORRUNNER_BINARY} --generator-set=qtdoc
${pyside_BINARY_DIR}/pyside_global.h
--include-paths="${QT_INCLUDE_DIR}${PATH_SEP}${pyside_SOURCE_DIR}"
--api-version=${SUPPORTED_QT_VERSION}

View file

@ -11,18 +11,12 @@
<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>
<div class="admonition warning">
<strong>Note:</strong> 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 is 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.
</div>
<table class="contentstable" align="center" ><tr>
<td width="50%">
<p class="biglink"><a class="biglink" href="{{ pathto("PySide/QtCore/index") }}">QtCore</a><br/>
@ -65,11 +59,5 @@
<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>
{% endblock %}

View file

@ -1,41 +0,0 @@
{% 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 %}

26
doc/_themes/pysidedocs/defindex.html vendored Normal file
View file

@ -0,0 +1,26 @@
{% 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

@ -0,0 +1,46 @@
{% 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

@ -0,0 +1,30 @@
{% 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 %}

57
doc/_themes/pysidedocs/genindex.html vendored Normal file
View file

@ -0,0 +1,57 @@
{% 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 %}

147
doc/_themes/pysidedocs/layout.html vendored Normal file
View file

@ -0,0 +1,147 @@
{%- 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>

40
doc/_themes/pysidedocs/modindex.html vendored Normal file
View file

@ -0,0 +1,40 @@
{% 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 %}

10
doc/_themes/pysidedocs/opensearch.xml vendored Normal file
View file

@ -0,0 +1,10 @@
<?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>

4
doc/_themes/pysidedocs/page.html vendored Normal file
View file

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

26
doc/_themes/pysidedocs/search.html vendored Normal file
View file

@ -0,0 +1,26 @@
{% 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 %}

View file

@ -1,12 +0,0 @@
{%- 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

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

View file

@ -0,0 +1,247 @@
/*
* doctools.js
* ~~~~~~~~~~~
*
* Sphinx JavaScript utilties for all documentation.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* 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(node.parentNode).hasClass(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.initIndexTable();
},
/**
* 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 safely 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(), 'highlighted');
});
}, 10);
$('<li class="highlight-link"><a href="javascript:Documentation.' +
'hideSearchWords()">' + _('Hide Search Matches') + '</a></li>')
.appendTo($('.sidebar .this-page-menu'));
}
},
/**
* init the domain index toggle buttons
*/
initIndexTable : function() {
var togglers = $('img.toggler').click(function() {
var src = $(this).attr('src');
var idnum = $(this).attr('id').substr(7);
$('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_INDEX) {
togglers.click();
}
},
/**
* helper function to hide the search marks again
*/
hideSearchWords : function() {
$('.sidebar .this-page-menu li.highlight-link').fadeOut(300);
$('span.highlighted').removeClass('highlighted');
},
/**
* 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();
});

154
doc/_themes/pysidedocs/static/jquery.js vendored Normal file
View file

@ -0,0 +1,154 @@
/*!
* jQuery JavaScript Library v1.4.2
* http://jquery.com/
*
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
* Copyright 2010, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Sat Feb 13 22:33:48 2010 -0500
*/
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);

View file

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

View file

@ -0,0 +1,518 @@
/*
* searchtools.js
* ~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilties for the full-text search.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words, hlwords is the list of normal, unstemmed
* words. the first one is used to find the occurance, the
* latter for highlighting it.
*/
jQuery.makeSearchSummary = function(text, keywords, hlwords) {
var textLower = text.toLowerCase();
var start = 0;
$.each(keywords, function() {
var i = textLower.indexOf(this.toLowerCase());
if (i > -1)
start = i;
});
start = Math.max(start - 120, 0);
var excerpt = ((start > 0) ? '...' : '') +
$.trim(text.substr(start, 240)) +
((start + 240 - text.length) ? '...' : '');
var rv = $('<div class="context"></div>').text(excerpt);
$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlighted');
});
return rv;
}
/**
* Porter Stemmer
*/
var PorterStemmer = function() {
var step2list = {
ational: 'ate',
tional: 'tion',
enci: 'ence',
anci: 'ance',
izer: 'ize',
bli: 'ble',
alli: 'al',
entli: 'ent',
eli: 'e',
ousli: 'ous',
ization: 'ize',
ation: 'ate',
ator: 'ate',
alism: 'al',
iveness: 'ive',
fulness: 'ful',
ousness: 'ous',
aliti: 'al',
iviti: 'ive',
biliti: 'ble',
logi: 'log'
};
var step3list = {
icate: 'ic',
ative: '',
alize: 'al',
iciti: 'ic',
ical: 'ic',
ful: '',
ness: ''
};
var c = "[^aeiou]"; // consonant
var v = "[aeiouy]"; // vowel
var C = c + "[^aeiouy]*"; // consonant sequence
var V = v + "[aeiou]*"; // vowel sequence
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
var s_v = "^(" + C + ")?" + v; // vowel in stem
this.stemWord = function (w) {
var stem;
var suffix;
var firstch;
var origword = w;
if (w.length < 3)
return w;
var re;
var re2;
var re3;
var re4;
firstch = w.substr(0,1);
if (firstch == "y")
w = firstch.toUpperCase() + w.substr(1);
// Step 1a
re = /^(.+?)(ss|i)es$/;
re2 = /^(.+?)([^s])s$/;
if (re.test(w))
w = w.replace(re,"$1$2");
else if (re2.test(w))
w = w.replace(re2,"$1$2");
// Step 1b
re = /^(.+?)eed$/;
re2 = /^(.+?)(ed|ing)$/;
if (re.test(w)) {
var fp = re.exec(w);
re = new RegExp(mgr0);
if (re.test(fp[1])) {
re = /.$/;
w = w.replace(re,"");
}
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1];
re2 = new RegExp(s_v);
if (re2.test(stem)) {
w = stem;
re2 = /(at|bl|iz)$/;
re3 = new RegExp("([^aeiouylsz])\\1$");
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re2.test(w))
w = w + "e";
else if (re3.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
else if (re4.test(w))
w = w + "e";
}
}
// Step 1c
re = /^(.+?)y$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(s_v);
if (re.test(stem))
w = stem + "i";
}
// Step 2
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step2list[suffix];
}
// Step 3
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step3list[suffix];
}
// Step 4
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
re2 = /^(.+?)(s|t)(ion)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
if (re.test(stem))
w = stem;
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1] + fp[2];
re2 = new RegExp(mgr1);
if (re2.test(stem))
w = stem;
}
// Step 5
re = /^(.+?)e$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
re2 = new RegExp(meq1);
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
w = stem;
}
re = /ll$/;
re2 = new RegExp(mgr1);
if (re.test(w) && re2.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
// and turn initial Y back to y
if (firstch == "y")
w = firstch.toLowerCase() + w.substr(1);
return w;
}
}
/**
* Search Module
*/
var Search = {
_index : null,
_queued_query : null,
_pulse_status : -1,
init : function() {
var params = $.getQueryParameters();
if (params.q) {
var query = params.q[0];
$('input[name="q"]')[0].value = query;
this.performSearch(query);
}
},
loadIndex : function(url) {
$.ajax({type: "GET", url: url, data: null, success: null,
dataType: "script", cache: true});
},
setIndex : function(index) {
var q;
this._index = index;
if ((q = this._queued_query) !== null) {
this._queued_query = null;
Search.query(q);
}
},
hasIndex : function() {
return this._index !== null;
},
deferQuery : function(query) {
this._queued_query = query;
},
stopPulse : function() {
this._pulse_status = 0;
},
startPulse : function() {
if (this._pulse_status >= 0)
return;
function pulse() {
Search._pulse_status = (Search._pulse_status + 1) % 4;
var dotString = '';
for (var i = 0; i < Search._pulse_status; i++)
dotString += '.';
Search.dots.text(dotString);
if (Search._pulse_status > -1)
window.setTimeout(pulse, 500);
};
pulse();
},
/**
* perform a search for something
*/
performSearch : function(query) {
// create the required interface elements
this.out = $('#search-results');
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
this.dots = $('<span></span>').appendTo(this.title);
this.status = $('<p style="display: none"></p>').appendTo(this.out);
this.output = $('<ul class="search"/>').appendTo(this.out);
$('#search-progress').text(_('Preparing search...'));
this.startPulse();
// index already loaded, the browser was quick!
if (this.hasIndex())
this.query(query);
else
this.deferQuery(query);
},
query : function(query) {
var stopwords = ['and', 'then', 'into', 'it', 'as', 'are', 'in',
'if', 'for', 'no', 'there', 'their', 'was', 'is',
'be', 'to', 'that', 'but', 'they', 'not', 'such',
'with', 'by', 'a', 'on', 'these', 'of', 'will',
'this', 'near', 'the', 'or', 'at'];
// stem the searchterms and add them to the correct list
var stemmer = new PorterStemmer();
var searchterms = [];
var excluded = [];
var hlterms = [];
var tmp = query.split(/\s+/);
var object = (tmp.length == 1) ? tmp[0].toLowerCase() : null;
for (var i = 0; i < tmp.length; i++) {
if ($u.indexOf(stopwords, tmp[i]) != -1 || tmp[i].match(/^\d+$/) ||
tmp[i] == "") {
// skip this "word"
continue;
}
// stem the word
var word = stemmer.stemWord(tmp[i]).toLowerCase();
// select the correct list
if (word[0] == '-') {
var toAppend = excluded;
word = word.substr(1);
}
else {
var toAppend = searchterms;
hlterms.push(tmp[i].toLowerCase());
}
// only add if not already in the list
if (!$.contains(toAppend, word))
toAppend.push(word);
};
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
// console.debug('SEARCH: searching for:');
// console.info('required: ', searchterms);
// console.info('excluded: ', excluded);
// prepare search
var filenames = this._index.filenames;
var titles = this._index.titles;
var terms = this._index.terms;
var objects = this._index.objects;
var objtypes = this._index.objtypes;
var objnames = this._index.objnames;
var fileMap = {};
var files = null;
// different result priorities
var importantResults = [];
var objectResults = [];
var regularResults = [];
var unimportantResults = [];
$('#search-progress').empty();
// lookup as object
if (object != null) {
for (var prefix in objects) {
for (var name in objects[prefix]) {
var fullname = (prefix ? prefix + '.' : '') + name;
if (fullname.toLowerCase().indexOf(object) > -1) {
match = objects[prefix][name];
descr = objnames[match[1]] + _(', in ') + titles[match[0]];
// XXX the generated anchors are not generally correct
// XXX there may be custom prefixes
result = [filenames[match[0]], fullname, '#'+fullname, descr];
switch (match[2]) {
case 1: objectResults.push(result); break;
case 0: importantResults.push(result); break;
case 2: unimportantResults.push(result); break;
}
}
}
}
}
// sort results descending
objectResults.sort(function(a, b) {
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
});
importantResults.sort(function(a, b) {
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
});
unimportantResults.sort(function(a, b) {
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
});
// perform the search on the required terms
for (var i = 0; i < searchterms.length; i++) {
var word = searchterms[i];
// no match but word was a required one
if ((files = terms[word]) == null)
break;
if (files.length == undefined) {
files = [files];
}
// create the mapping
for (var j = 0; j < files.length; j++) {
var file = files[j];
if (file in fileMap)
fileMap[file].push(word);
else
fileMap[file] = [word];
}
}
// now check if the files don't contain excluded terms
for (var file in fileMap) {
var valid = true;
// check if all requirements are matched
if (fileMap[file].length != searchterms.length)
continue;
// ensure that none of the excluded terms is in the
// search result.
for (var i = 0; i < excluded.length; i++) {
if (terms[excluded[i]] == file ||
$.contains(terms[excluded[i]] || [], file)) {
valid = false;
break;
}
}
// if we have still a valid result we can add it
// to the result list
if (valid)
regularResults.push([filenames[file], titles[file], '', null]);
}
// delete unused variables in order to not waste
// memory until list is retrieved completely
delete filenames, titles, terms;
// now sort the regular results descending by title
regularResults.sort(function(a, b) {
var left = a[1].toLowerCase();
var right = b[1].toLowerCase();
return (left > right) ? -1 : ((left < right) ? 1 : 0);
});
// combine all results
var results = unimportantResults.concat(regularResults)
.concat(objectResults).concat(importantResults);
// print the results
var resultCount = results.length;
function displayNextItem() {
// results left, load the summary and display it
if (results.length) {
var item = results.pop();
var listItem = $('<li style="display:none"></li>');
if (DOCUMENTATION_OPTIONS.FILE_SUFFIX == '') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
dirname = dirname.substring(0, dirname.length-6);
} else if (dirname == 'index/') {
dirname = '';
}
listItem.append($('<a/>').attr('href',
DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
highlightstring + item[2]).html(item[1]));
} else {
// normal html builders
listItem.append($('<a/>').attr('href',
item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
highlightstring + item[2]).html(item[1]));
}
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
Search.output.append(listItem);
listItem.slideDown(5, function() {
displayNextItem();
});
} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
$.get(DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' +
item[0] + '.txt', function(data) {
if (data != '') {
listItem.append($.makeSearchSummary(data, searchterms, hlterms));
Search.output.append(listItem);
}
listItem.slideDown(5, function() {
displayNextItem();
});
});
} else {
// no source available, just display title
Search.output.append(listItem);
listItem.slideDown(5, function() {
displayNextItem();
});
}
}
// search finished, update title and status message
else {
Search.stopPulse();
Search.title.text(_('Search Results'));
if (!resultCount)
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
else
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
Search.status.fadeIn(500);
}
}
displayNextItem();
}
}
$(document).ready(function() {
Search.init();
});

View file

@ -0,0 +1,16 @@
(function(){var j=this,n=j._,i=function(a){this._wrapped=a},m=typeof StopIteration!=="undefined"?StopIteration:"__break__",b=j._=function(a){return new i(a)};if(typeof exports!=="undefined")exports._=b;var k=Array.prototype.slice,o=Array.prototype.unshift,p=Object.prototype.toString,q=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;b.VERSION="0.5.5";b.each=function(a,c,d){try{if(a.forEach)a.forEach(c,d);else if(b.isArray(a)||b.isArguments(a))for(var e=0,f=a.length;e<f;e++)c.call(d,
a[e],e,a);else{var g=b.keys(a);f=g.length;for(e=0;e<f;e++)c.call(d,a[g[e]],g[e],a)}}catch(h){if(h!=m)throw h;}return a};b.map=function(a,c,d){if(a&&b.isFunction(a.map))return a.map(c,d);var e=[];b.each(a,function(f,g,h){e.push(c.call(d,f,g,h))});return e};b.reduce=function(a,c,d,e){if(a&&b.isFunction(a.reduce))return a.reduce(b.bind(d,e),c);b.each(a,function(f,g,h){c=d.call(e,c,f,g,h)});return c};b.reduceRight=function(a,c,d,e){if(a&&b.isFunction(a.reduceRight))return a.reduceRight(b.bind(d,e),c);
var f=b.clone(b.toArray(a)).reverse();b.each(f,function(g,h){c=d.call(e,c,g,h,a)});return c};b.detect=function(a,c,d){var e;b.each(a,function(f,g,h){if(c.call(d,f,g,h)){e=f;b.breakLoop()}});return e};b.select=function(a,c,d){if(a&&b.isFunction(a.filter))return a.filter(c,d);var e=[];b.each(a,function(f,g,h){c.call(d,f,g,h)&&e.push(f)});return e};b.reject=function(a,c,d){var e=[];b.each(a,function(f,g,h){!c.call(d,f,g,h)&&e.push(f)});return e};b.all=function(a,c,d){c=c||b.identity;if(a&&b.isFunction(a.every))return a.every(c,
d);var e=true;b.each(a,function(f,g,h){(e=e&&c.call(d,f,g,h))||b.breakLoop()});return e};b.any=function(a,c,d){c=c||b.identity;if(a&&b.isFunction(a.some))return a.some(c,d);var e=false;b.each(a,function(f,g,h){if(e=c.call(d,f,g,h))b.breakLoop()});return e};b.include=function(a,c){if(b.isArray(a))return b.indexOf(a,c)!=-1;var d=false;b.each(a,function(e){if(d=e===c)b.breakLoop()});return d};b.invoke=function(a,c){var d=b.rest(arguments,2);return b.map(a,function(e){return(c?e[c]:e).apply(e,d)})};b.pluck=
function(a,c){return b.map(a,function(d){return d[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);var e={computed:-Infinity};b.each(a,function(f,g,h){g=c?c.call(d,f,g,h):f;g>=e.computed&&(e={value:f,computed:g})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);var e={computed:Infinity};b.each(a,function(f,g,h){g=c?c.call(d,f,g,h):f;g<e.computed&&(e={value:f,computed:g})});return e.value};b.sortBy=function(a,c,d){return b.pluck(b.map(a,
function(e,f,g){return{value:e,criteria:c.call(d,e,f,g)}}).sort(function(e,f){e=e.criteria;f=f.criteria;return e<f?-1:e>f?1:0}),"value")};b.sortedIndex=function(a,c,d){d=d||b.identity;for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?(e=g+1):(f=g)}return e};b.toArray=function(a){if(!a)return[];if(a.toArray)return a.toArray();if(b.isArray(a))return a;if(b.isArguments(a))return k.call(a);return b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=function(a,c,d){return c&&!d?k.call(a,
0,c):a[0]};b.rest=function(a,c,d){return k.call(a,b.isUndefined(c)||d?1:c)};b.last=function(a){return a[a.length-1]};b.compact=function(a){return b.select(a,function(c){return!!c})};b.flatten=function(a){return b.reduce(a,[],function(c,d){if(b.isArray(d))return c.concat(b.flatten(d));c.push(d);return c})};b.without=function(a){var c=b.rest(arguments);return b.select(a,function(d){return!b.include(c,d)})};b.uniq=function(a,c){return b.reduce(a,[],function(d,e,f){if(0==f||(c===true?b.last(d)!=e:!b.include(d,
e)))d.push(e);return d})};b.intersect=function(a){var c=b.rest(arguments);return b.select(b.uniq(a),function(d){return b.all(c,function(e){return b.indexOf(e,d)>=0})})};b.zip=function(){for(var a=b.toArray(arguments),c=b.max(b.pluck(a,"length")),d=new Array(c),e=0;e<c;e++)d[e]=b.pluck(a,String(e));return d};b.indexOf=function(a,c){if(a.indexOf)return a.indexOf(c);for(var d=0,e=a.length;d<e;d++)if(a[d]===c)return d;return-1};b.lastIndexOf=function(a,c){if(a.lastIndexOf)return a.lastIndexOf(c);for(var d=
a.length;d--;)if(a[d]===c)return d;return-1};b.range=function(a,c,d){var e=b.toArray(arguments),f=e.length<=1;a=f?0:e[0];c=f?e[0]:e[1];d=e[2]||1;e=Math.ceil((c-a)/d);if(e<=0)return[];e=new Array(e);f=a;for(var g=0;1;f+=d){if((d>0?f-c:c-f)>=0)return e;e[g++]=f}};b.bind=function(a,c){var d=b.rest(arguments,2);return function(){return a.apply(c||j,d.concat(b.toArray(arguments)))}};b.bindAll=function(a){var c=b.rest(arguments);if(c.length==0)c=b.functions(a);b.each(c,function(d){a[d]=b.bind(a[d],a)});
return a};b.delay=function(a,c){var d=b.rest(arguments,2);return setTimeout(function(){return a.apply(a,d)},c)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(b.rest(arguments)))};b.wrap=function(a,c){return function(){var d=[a].concat(b.toArray(arguments));return c.apply(c,d)}};b.compose=function(){var a=b.toArray(arguments);return function(){for(var c=b.toArray(arguments),d=a.length-1;d>=0;d--)c=[a[d].apply(this,c)];return c[0]}};b.keys=function(a){if(b.isArray(a))return b.range(0,a.length);
var c=[];for(var d in a)q.call(a,d)&&c.push(d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=function(a){return b.select(b.keys(a),function(c){return b.isFunction(a[c])}).sort()};b.extend=function(a,c){for(var d in c)a[d]=c[d];return a};b.clone=function(a){if(b.isArray(a))return a.slice(0);return b.extend({},a)};b.tap=function(a,c){c(a);return a};b.isEqual=function(a,c){if(a===c)return true;var d=typeof a;if(d!=typeof c)return false;if(a==c)return true;if(!a&&c||a&&!c)return false;
if(a.isEqual)return a.isEqual(c);if(b.isDate(a)&&b.isDate(c))return a.getTime()===c.getTime();if(b.isNaN(a)&&b.isNaN(c))return true;if(b.isRegExp(a)&&b.isRegExp(c))return a.source===c.source&&a.global===c.global&&a.ignoreCase===c.ignoreCase&&a.multiline===c.multiline;if(d!=="object")return false;if(a.length&&a.length!==c.length)return false;d=b.keys(a);var e=b.keys(c);if(d.length!=e.length)return false;for(var f in a)if(!b.isEqual(a[f],c[f]))return false;return true};b.isEmpty=function(a){return b.keys(a).length==
0};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=function(a){return!!(a&&a.concat&&a.unshift)};b.isArguments=function(a){return a&&b.isNumber(a.length)&&!b.isArray(a)&&!r.call(a,"length")};b.isFunction=function(a){return!!(a&&a.constructor&&a.call&&a.apply)};b.isString=function(a){return!!(a===""||a&&a.charCodeAt&&a.substr)};b.isNumber=function(a){return p.call(a)==="[object Number]"};b.isDate=function(a){return!!(a&&a.getTimezoneOffset&&a.setUTCFullYear)};b.isRegExp=function(a){return!!(a&&
a.test&&a.exec&&(a.ignoreCase||a.ignoreCase===false))};b.isNaN=function(a){return b.isNumber(a)&&isNaN(a)};b.isNull=function(a){return a===null};b.isUndefined=function(a){return typeof a=="undefined"};b.noConflict=function(){j._=n;return this};b.identity=function(a){return a};b.breakLoop=function(){throw m;};var s=0;b.uniqueId=function(a){var c=s++;return a?a+c:c};b.template=function(a,c){a=new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+a.replace(/[\r\t\n]/g,
" ").replace(/'(?=[^%]*%>)/g,"\t").split("'").join("\\'").split("\t").join("'").replace(/<%=(.+?)%>/g,"',$1,'").split("<%").join("');").split("%>").join("p.push('")+"');}return p.join('');");return c?a(c):a};b.forEach=b.each;b.foldl=b.inject=b.reduce;b.foldr=b.reduceRight;b.filter=b.select;b.every=b.all;b.some=b.any;b.head=b.first;b.tail=b.rest;b.methods=b.functions;var l=function(a,c){return c?b(a).chain():a};b.each(b.functions(b),function(a){var c=b[a];i.prototype[a]=function(){var d=b.toArray(arguments);
o.call(d,this._wrapped);return l(c.apply(b,d),this._chain)}});b.each(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var c=Array.prototype[a];i.prototype[a]=function(){c.apply(this._wrapped,arguments);return l(this._wrapped,this._chain)}});b.each(["concat","join","slice"],function(a){var c=Array.prototype[a];i.prototype[a]=function(){return l(c.apply(this._wrapped,arguments),this._chain)}});i.prototype.chain=function(){this._chain=true;return this};i.prototype.value=function(){return this._wrapped}})();

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