From b388516ca2691303a076a0764fd40bf7116fe43d Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Tue, 29 Nov 2011 00:31:00 -0600 Subject: Initial import of python-qt3 --- ChangeLog | 3389 +++++++ LICENSE | 280 + NEWS | 570 ++ README | 64 + README.AIX | 68 + README.SunOS | 44 + THANKS | 35 + build.py | 730 ++ configure.py | 1457 +++ doc/PyQt.html | 12845 +++++++++++++++++++++++++++ doc/PyQt.sgml | 5807 ++++++++++++ doc/qtdocs.sip | 1920 ++++ examples2/README | 11 + examples2/aclock.py | 61 + examples2/addressbook.py | 457 + examples2/application.py | 277 + examples2/buttongroups.py | 113 + examples2/dclock.py | 58 + examples2/desktop.py | 219 + examples2/dirview.py | 76 + examples2/dragdrop.py | 57 + examples2/dropsite.py | 96 + examples2/gears.py | 235 + examples2/menu.py | 301 + examples2/qt.png | Bin 0 -> 355 bytes examples2/qtlogo.png | Bin 0 -> 3734 bytes examples2/secret.py | 65 + examples2/semaphore.py | 203 + examples2/splitter.py | 65 + examples2/table.py | 115 + examples2/themes.py | 2484 ++++++ examples2/trolltech.bmp | Bin 0 -> 30054 bytes examples2/trolltech.gif | Bin 0 -> 42629 bytes examples2/tt-logo.png | Bin 0 -> 4547 bytes examples2/tut1.py | 16 + examples2/tut10.py | 145 + examples2/tut11.py | 213 + examples2/tut12.py | 252 + examples2/tut13.py | 329 + examples2/tut14.py | 377 + examples2/tut2.py | 19 + examples2/tut3.py | 20 + examples2/tut4.py | 29 + examples2/tut5.py | 32 + examples2/tut6.py | 41 + examples2/tut7.py | 57 + examples2/tut8.py | 96 + examples2/tut9.py | 104 + examples2/widgets.py | 512 ++ examples3/README | 12 + examples3/SQL/README | 76 + examples3/SQL/connect.ui | 238 + examples3/SQL/connect.ui.h | 21 + examples3/SQL/dbconnect.py | 82 + examples3/SQL/dbpar.py | 22 + examples3/SQL/form1.ui | 77 + examples3/SQL/form2.ui | 327 + examples3/SQL/frmconnect.py | 120 + examples3/SQL/frmconnect.ui | 245 + examples3/SQL/runform1.py | 21 + examples3/SQL/runform2.py | 21 + examples3/SQL/runsqlex.py | 151 + examples3/SQL/sqlcustom1.py | 94 + examples3/SQL/sqlex.ui | 303 + examples3/SQL/sqlex.ui.h | 35 + examples3/SQL/sqlsubclass5.py | 151 + examples3/SQL/sqltable4.py | 118 + examples3/SQL/testdb_mysql.sql | 57 + examples3/SQL/testdb_pg.sql | 232 + examples3/aclock.py | 61 + examples3/addressbook.py | 457 + examples3/application.py | 277 + examples3/biff.py | 173 + examples3/bigtable.py | 72 + examples3/buttongroups.py | 125 + examples3/canvas/butterfly.png | Bin 0 -> 37900 bytes examples3/canvas/canvas.py | 619 ++ examples3/canvas/qt-trans.xpm | 54 + examples3/canvas/qtlogo.png | Bin 0 -> 22673 bytes examples3/checklists.py | 136 + examples3/cursor.py | 114 + examples3/dclock.py | 58 + examples3/desktop.py | 230 + examples3/dirview.py | 452 + examples3/dragdrop.py | 57 + examples3/drawlines.py | 74 + examples3/dropsite.py | 96 + examples3/fileopen.xpm | 22 + examples3/fontdisplayer.py | 148 + examples3/fonts.py | 151 + examples3/gears.py | 235 + examples3/i18n/i18n.pro | 15 + examples3/i18n/i18n.py | 147 + examples3/i18n/mywidget.py | 47 + examples3/i18n/mywidget_cs.qm | Bin 0 -> 818 bytes examples3/i18n/mywidget_cs.ts | 75 + examples3/i18n/mywidget_de.qm | Bin 0 -> 913 bytes examples3/i18n/mywidget_de.ts | 69 + examples3/i18n/mywidget_el.qm | Bin 0 -> 832 bytes examples3/i18n/mywidget_el.ts | 68 + examples3/i18n/mywidget_en.qm | Bin 0 -> 337 bytes examples3/i18n/mywidget_en.ts | 69 + examples3/i18n/mywidget_eo.qm | Bin 0 -> 835 bytes examples3/i18n/mywidget_eo.ts | 72 + examples3/i18n/mywidget_fr.qm | Bin 0 -> 884 bytes examples3/i18n/mywidget_fr.ts | 68 + examples3/i18n/mywidget_it.qm | Bin 0 -> 763 bytes examples3/i18n/mywidget_it.ts | 72 + examples3/i18n/mywidget_jp.qm | Bin 0 -> 738 bytes examples3/i18n/mywidget_jp.ts | 68 + examples3/i18n/mywidget_ko.qm | Bin 0 -> 738 bytes examples3/i18n/mywidget_ko.ts | 68 + examples3/i18n/mywidget_no.qm | Bin 0 -> 830 bytes examples3/i18n/mywidget_no.ts | 68 + examples3/i18n/mywidget_ru.qm | Bin 0 -> 799 bytes examples3/i18n/mywidget_ru.ts | 68 + examples3/i18n/mywidget_zh.qm | Bin 0 -> 706 bytes examples3/i18n/mywidget_zh.ts | 68 + examples3/lineedits.py | 140 + examples3/listbox.py | 176 + examples3/listboxcombo.py | 167 + examples3/marble.png | Bin 0 -> 26015 bytes examples3/mdi.py | 360 + examples3/menu.py | 286 + examples3/progress.py | 281 + examples3/progressbar.py | 155 + examples3/qdir.py | 323 + examples3/qmag.py | 233 + examples3/qt.png | Bin 0 -> 355 bytes examples3/qtlogo.png | Bin 0 -> 12811 bytes examples3/rangecontrols.py | 79 + examples3/richtext.py | 136 + examples3/secret.py | 65 + examples3/semaphore.py | 203 + examples3/smalltable.py | 57 + examples3/splitter.py | 65 + examples3/tabdialog.py | 116 + examples3/tablestatistics.py | 168 + examples3/tooltip.py | 105 + examples3/trolltech.bmp | Bin 0 -> 30054 bytes examples3/trolltech.gif | Bin 0 -> 42629 bytes examples3/tt-logo.png | Bin 0 -> 4547 bytes examples3/tut1.py | 16 + examples3/tut10.py | 145 + examples3/tut11.py | 213 + examples3/tut12.py | 253 + examples3/tut13.py | 330 + examples3/tut14.py | 378 + examples3/tut2.py | 19 + examples3/tut3.py | 21 + examples3/tut4.py | 29 + examples3/tut5.py | 32 + examples3/tut6.py | 41 + examples3/tut7.py | 57 + examples3/tut8.py | 97 + examples3/tut9.py | 104 + examples3/webbrowser/mainwindow.py | 1097 +++ examples3/webbrowser/mainwindow.ui | 410 + examples3/webbrowser/webbrowser.py | 91 + examples3/widgets.py | 500 ++ pylupdate3/LICENSE.GPL | 280 + pylupdate3/fetchtr.cpp | 455 + pylupdate3/main.cpp | 155 + pylupdate3/merge.cpp | 110 + pylupdate3/metatranslator.cpp | 557 ++ pylupdate3/metatranslator.h | 95 + pylupdate3/numberh.cpp | 230 + pylupdate3/proparser.cpp | 78 + pylupdate3/proparser.h | 25 + pylupdate3/pylupdate-prof.sbf | 24 + pylupdate3/pylupdate.pro.in | 29 + pylupdate3/pylupdate.sbf | 24 + pylupdate3/sametexth.cpp | 78 + pyqtconfig.py.in | 187 + pyuic2/COPYING | 280 + pyuic2/domtool.cpp | 260 + pyuic2/domtool.h | 41 + pyuic2/globaldefs.h | 33 + pyuic2/pyuic.pro.in | 24 + pyuic2/pyuic.sbf | 24 + pyuic2/uic.cpp | 1601 ++++ pyuic2/uic.h | 133 + pyuic2/widgetdatabase.cpp | 640 ++ pyuic2/widgetdatabase.h | 75 + pyuic3/LICENSE.GPL | 280 + pyuic3/domtool.cpp | 447 + pyuic3/domtool.h | 47 + pyuic3/embed.cpp | 323 + pyuic3/form.cpp | 938 ++ pyuic3/globaldefs.h | 56 + pyuic3/main.cpp | 245 + pyuic3/object.cpp | 704 ++ pyuic3/parser.cpp | 66 + pyuic3/parser.h | 33 + pyuic3/pyuic-prof.sbf | 24 + pyuic3/pyuic.pro.in | 36 + pyuic3/pyuic.sbf | 24 + pyuic3/subclassing.cpp | 185 + pyuic3/uic.cpp | 1145 +++ pyuic3/uic.h | 183 + pyuic3/widgetdatabase.cpp | 953 ++ pyuic3/widgetdatabase.h | 96 + pyuic3/widgetinterface.h | 29 + sip/pyqt-gpl.sip | 1 + sip/qt/copying.sip | 51 + sip/qt/qaccel.sip | 104 + sip/qt/qaction.sip | 210 + sip/qt/qapplication.sip | 574 ++ sip/qt/qarray.sip | 94 + sip/qt/qassistantclient.sip | 63 + sip/qt/qbitmap.sip | 59 + sip/qt/qbrush.sip | 105 + sip/qt/qbutton.sip | 184 + sip/qt/qbuttongroup.sip | 104 + sip/qt/qbytearray.sip | 203 + sip/qt/qcdestyle.sip | 68 + sip/qt/qcheckbox.sip | 88 + sip/qt/qclipboard.sip | 152 + sip/qt/qcolor.sip | 207 + sip/qt/qcolordialog.sip | 77 + sip/qt/qcolorgroup.sip | 125 + sip/qt/qcombobox.sip | 277 + sip/qt/qcommonstyle.sip | 137 + sip/qt/qcstring.sip | 223 + sip/qt/qcursor.sip | 144 + sip/qt/qdatastream.sip | 224 + sip/qt/qdatetime.sip | 280 + sip/qt/qdatetimeedit.sip | 256 + sip/qt/qdesktopwidget.sip | 84 + sip/qt/qdial.sip | 112 + sip/qt/qdialog.sip | 158 + sip/qt/qdir.sip | 383 + sip/qt/qdockarea.sip | 88 + sip/qt/qdockwindow.sip | 135 + sip/qt/qdragobject.sip | 374 + sip/qt/qdrawutil.sip | 74 + sip/qt/qdropsite.sip | 51 + sip/qt/qerrormessage.sip | 57 + sip/qt/qevent.sip | 1235 +++ sip/qt/qeventloop.sip | 89 + sip/qt/qfile.sip | 310 + sip/qt/qfiledialog.sip | 361 + sip/qt/qfileinfo.sip | 145 + sip/qt/qfont.sip | 441 + sip/qt/qfontdatabase.sip | 121 + sip/qt/qfontdialog.sip | 105 + sip/qt/qfontinfo.sip | 70 + sip/qt/qfontmetrics.sip | 220 + sip/qt/qframe.sip | 180 + sip/qt/qglobal.sip | 74 + sip/qt/qgmanager.sip | 88 + sip/qt/qgrid.sip | 72 + sip/qt/qgridview.sip | 76 + sip/qt/qgroupbox.sip | 135 + sip/qt/qhbox.sip | 75 + sip/qt/qhbuttongroup.sip | 48 + sip/qt/qheader.sip | 268 + sip/qt/qhgroupbox.sip | 48 + sip/qt/qiconset.sip | 146 + sip/qt/qiconview.sip | 457 + sip/qt/qimage.sip | 544 ++ sip/qt/qinputdialog.sip | 174 + sip/qt/qinterlacestyle.sip | 103 + sip/qt/qiodevice.sip | 408 + sip/qt/qkeycode.sip | 286 + sip/qt/qkeysequence.sip | 119 + sip/qt/qlabel.sip | 157 + sip/qt/qlayout.sip | 597 ++ sip/qt/qlcdnumber.sip | 137 + sip/qt/qlibrary.sip | 59 + sip/qt/qlineedit.sip | 427 + sip/qt/qlist.sip | 111 + sip/qt/qlistbox.sip | 571 ++ sip/qt/qlistview.sip | 770 ++ sip/qt/qlocale.sip | 537 ++ sip/qt/qmainwindow.sip | 289 + sip/qt/qmemarray.sip | 168 + sip/qt/qmenubar.sip | 118 + sip/qt/qmenudata.sip | 291 + sip/qt/qmessagebox.sip | 204 + sip/qt/qmetaobject.sip | 170 + sip/qt/qmime.sip | 104 + sip/qt/qmotifplusstyle.sip | 150 + sip/qt/qmotifstyle.sip | 168 + sip/qt/qmovie.sip | 109 + sip/qt/qmultilinedit.sip | 374 + sip/qt/qmutex.sip | 104 + sip/qt/qnamespace.sip | 903 ++ sip/qt/qnetworkprotocol.sip | 227 + sip/qt/qobject.sip | 2319 +++++ sip/qt/qobjectcleanuphandler.sip | 49 + sip/qt/qobjectlist.sip | 107 + sip/qt/qpaintdevice.sip | 247 + sip/qt/qpaintdevicemetrics.sip | 55 + sip/qt/qpainter.sip | 676 ++ sip/qt/qpair.sip | 83 + sip/qt/qpalette.sip | 102 + sip/qt/qpen.sip | 101 + sip/qt/qpicture.sip | 111 + sip/qt/qpixmap.sip | 288 + sip/qt/qpixmapcache.sip | 53 + sip/qt/qplatinumstyle.sip | 142 + sip/qt/qpoint.sip | 100 + sip/qt/qpointarray.sip | 247 + sip/qt/qpopupmenu.sip | 282 + sip/qt/qprintdialog.sip | 64 + sip/qt/qprinter.sip | 256 + sip/qt/qprocess.sip | 112 + sip/qt/qprogressbar.sip | 95 + sip/qt/qprogressdialog.sip | 194 + sip/qt/qptrlist.sip | 111 + sip/qt/qpushbutton.sip | 143 + sip/qt/qradiobutton.sip | 84 + sip/qt/qrangecontrol.sip | 79 + sip/qt/qrect.sip | 207 + sip/qt/qregexp.sip | 139 + sip/qt/qregion.sip | 128 + sip/qt/qscrollbar.sip | 170 + sip/qt/qscrollview.sip | 325 + sip/qt/qsemaphore.sip | 112 + sip/qt/qsemimodal.sip | 63 + sip/qt/qsessionmanager.sip | 89 + sip/qt/qsettings.sip | 177 + sip/qt/qsgistyle.sip | 157 + sip/qt/qsignalmapper.sip | 51 + sip/qt/qsimplerichtext.sip | 91 + sip/qt/qsize.sip | 112 + sip/qt/qsizegrip.sip | 60 + sip/qt/qsizepolicy.sip | 103 + sip/qt/qslider.sip | 187 + sip/qt/qsocketnotifier.sip | 66 + sip/qt/qsound.sip | 69 + sip/qt/qspinbox.sip | 268 + sip/qt/qsplashscreen.sip | 61 + sip/qt/qsplitter.sip | 160 + sip/qt/qstatusbar.sip | 94 + sip/qt/qstring.sip | 1079 +++ sip/qt/qstringlist.sip | 247 + sip/qt/qstrlist.sip | 100 + sip/qt/qstyle.sip | 862 ++ sip/qt/qstylefactory.sip | 45 + sip/qt/qstylesheet.sip | 239 + sip/qt/qsyntaxhighlighter.sip | 57 + sip/qt/qtabbar.sip | 266 + sip/qt/qtabdialog.sip | 167 + sip/qt/qtableview.sip | 185 + sip/qt/qtabwidget.sip | 177 + sip/qt/qtextbrowser.sip | 114 + sip/qt/qtextcodec.sip | 146 + sip/qt/qtextedit.sip | 437 + sip/qt/qtextstream.sip | 231 + sip/qt/qtextview.sip | 128 + sip/qt/qthread.sip | 98 + sip/qt/qtimer.sip | 59 + sip/qt/qtmod.sip | 286 + sip/qt/qtoolbar.sip | 160 + sip/qt/qtoolbox.sip | 88 + sip/qt/qtoolbutton.sip | 199 + sip/qt/qtooltip.sip | 169 + sip/qt/qtranslator.sip | 177 + sip/qt/qurl.sip | 116 + sip/qt/qurlinfo.sip | 96 + sip/qt/qurloperator.sip | 115 + sip/qt/quuid.sip | 87 + sip/qt/qvalidator.sip | 227 + sip/qt/qvaluelist.sip | 181 + sip/qt/qvariant.sip | 420 + sip/qt/qvbox.sip | 55 + sip/qt/qvbuttongroup.sip | 48 + sip/qt/qvgroupbox.sip | 48 + sip/qt/qwaitcondition.sip | 81 + sip/qt/qwhatsthis.sip | 97 + sip/qt/qwidget.sip | 664 ++ sip/qt/qwidgetlist.sip | 107 + sip/qt/qwidgetstack.sip | 98 + sip/qt/qwindow.sip | 47 + sip/qt/qwindowdefs.sip | 180 + sip/qt/qwindowdefs_qws.sip | 29 + sip/qt/qwindowdefs_x11.sip | 48 + sip/qt/qwindowsstyle.sip | 192 + sip/qt/qwindowsxpstyle.sip | 31 + sip/qt/qwizard.sip | 122 + sip/qt/qwmatrix.sip | 178 + sip/qt/qworkspace.sip | 101 + sip/qt/versions.sip | 92 + sip/qtaxcontainer/copying.sip | 51 + sip/qtaxcontainer/qaxbase.sip | 86 + sip/qtaxcontainer/qaxobject.sip | 37 + sip/qtaxcontainer/qaxwidget.sip | 37 + sip/qtaxcontainer/qtaxcontainermod.sip | 32 + sip/qtcanvas/copying.sip | 51 + sip/qtcanvas/qcanvas.sip | 857 ++ sip/qtcanvas/qtcanvasmod.sip | 70 + sip/qtext/copying.sip | 51 + sip/qtext/qextscintilla.sip | 411 + sip/qtext/qextscintillaapis.sip | 42 + sip/qtext/qextscintillabase.sip | 1024 +++ sip/qtext/qextscintillacommand.sip | 44 + sip/qtext/qextscintillacommandset.sip | 52 + sip/qtext/qextscintilladocument.sip | 42 + sip/qtext/qextscintillalexer.sip | 80 + sip/qtext/qextscintillalexerbash.sip | 80 + sip/qtext/qextscintillalexerbatch.sip | 62 + sip/qtext/qextscintillalexercpp.sip | 98 + sip/qtext/qextscintillalexercsharp.sip | 47 + sip/qtext/qextscintillalexercss.sip | 81 + sip/qtext/qextscintillalexerdiff.sip | 57 + sip/qtext/qextscintillalexerhtml.sip | 178 + sip/qtext/qextscintillalexeridl.sip | 43 + sip/qtext/qextscintillalexerjava.sip | 41 + sip/qtext/qextscintillalexerjavascript.sip | 47 + sip/qtext/qextscintillalexerlua.sip | 79 + sip/qtext/qextscintillalexermakefile.sip | 60 + sip/qtext/qextscintillalexerperl.sip | 96 + sip/qtext/qextscintillalexerpov.sip | 85 + sip/qtext/qextscintillalexerproperties.sip | 68 + sip/qtext/qextscintillalexerpython.sip | 94 + sip/qtext/qextscintillalexerruby.sip | 128 + sip/qtext/qextscintillalexersql.sip | 105 + sip/qtext/qextscintillalexertex.sip | 57 + sip/qtext/qextscintillamacro.sip | 49 + sip/qtext/qextscintillaprinter.sip | 45 + sip/qtext/qtextmod.sip | 107 + sip/qtgl/copying.sip | 51 + sip/qtgl/qgl.sip | 298 + sip/qtgl/qglcolormap.sip | 63 + sip/qtgl/qtglmod.sip | 71 + sip/qtnetwork/copying.sip | 51 + sip/qtnetwork/qdns.sip | 274 + sip/qtnetwork/qftp.sip | 183 + sip/qtnetwork/qhostaddress.sip | 99 + sip/qtnetwork/qhttp.sip | 279 + sip/qtnetwork/qlocalfs.sip | 56 + sip/qtnetwork/qnetwork.sip | 34 + sip/qtnetwork/qserversocket.sip | 70 + sip/qtnetwork/qsocket.sip | 348 + sip/qtnetwork/qsocketdevice.sip | 224 + sip/qtnetwork/qtnetworkmod.sip | 78 + sip/qtpe/copying.sip | 51 + sip/qtpe/qpeapplication.sip | 223 + sip/qtpe/qpeapplnk.sip | 157 + sip/qtpe/qpeconfig.sip | 78 + sip/qtpe/qpefilemanager.sip | 53 + sip/qtpe/qpefileselector.sip | 69 + sip/qtpe/qpefontdatabase.sip | 67 + sip/qtpe/qpeglobal.sip | 83 + sip/qtpe/qpemenubar.sip | 42 + sip/qtpe/qpemenubutton.sip | 61 + sip/qtpe/qpeqcopenvelope.sip | 39 + sip/qtpe/qpeqdawg.sip | 65 + sip/qtpe/qperesource.sip | 50 + sip/qtpe/qpetimestring.sip | 71 + sip/qtpe/qpetoolbar.sip | 42 + sip/qtpe/qtpemod.sip | 94 + sip/qtsql/copying.sip | 51 + sip/qtsql/qdatabrowser.sip | 150 + sip/qtsql/qdatatable.sip | 201 + sip/qtsql/qdataview.sip | 60 + sip/qtsql/qeditorfactory.sip | 55 + sip/qtsql/qsql.sip | 80 + sip/qtsql/qsqlcursor.sip | 148 + sip/qtsql/qsqldatabase.sip | 154 + sip/qtsql/qsqldriver.sip | 93 + sip/qtsql/qsqleditorfactory.sip | 57 + sip/qtsql/qsqlerror.sip | 68 + sip/qtsql/qsqlfield.sip | 95 + sip/qtsql/qsqlform.sip | 74 + sip/qtsql/qsqlindex.sip | 64 + sip/qtsql/qsqlpropertymap.sip | 63 + sip/qtsql/qsqlquery.sip | 115 + sip/qtsql/qsqlrecord.sip | 177 + sip/qtsql/qsqlresult.sip | 73 + sip/qtsql/qsqlselectcursor.sip | 92 + sip/qtsql/qtsqlmod.sip | 88 + sip/qttable/copying.sip | 51 + sip/qttable/qtable.sip | 532 ++ sip/qttable/qttablemod.sip | 70 + sip/qtui/copying.sip | 51 + sip/qtui/qtuimod.sip | 71 + sip/qtui/qwidgetfactory.sip | 63 + sip/qtxml/copying.sip | 51 + sip/qtxml/qdom.sip | 874 ++ sip/qtxml/qtxmlmod.sip | 80 + 483 files changed, 108333 insertions(+) create mode 100644 ChangeLog create mode 100644 LICENSE create mode 100644 NEWS create mode 100644 README create mode 100644 README.AIX create mode 100644 README.SunOS create mode 100644 THANKS create mode 100644 build.py create mode 100644 configure.py create mode 100644 doc/PyQt.html create mode 100644 doc/PyQt.sgml create mode 100644 doc/qtdocs.sip create mode 100644 examples2/README create mode 100755 examples2/aclock.py create mode 100755 examples2/addressbook.py create mode 100755 examples2/application.py create mode 100755 examples2/buttongroups.py create mode 100755 examples2/dclock.py create mode 100755 examples2/desktop.py create mode 100755 examples2/dirview.py create mode 100755 examples2/dragdrop.py create mode 100644 examples2/dropsite.py create mode 100755 examples2/gears.py create mode 100755 examples2/menu.py create mode 100644 examples2/qt.png create mode 100644 examples2/qtlogo.png create mode 100644 examples2/secret.py create mode 100755 examples2/semaphore.py create mode 100755 examples2/splitter.py create mode 100755 examples2/table.py create mode 100755 examples2/themes.py create mode 100644 examples2/trolltech.bmp create mode 100644 examples2/trolltech.gif create mode 100644 examples2/tt-logo.png create mode 100755 examples2/tut1.py create mode 100755 examples2/tut10.py create mode 100755 examples2/tut11.py create mode 100755 examples2/tut12.py create mode 100755 examples2/tut13.py create mode 100755 examples2/tut14.py create mode 100755 examples2/tut2.py create mode 100755 examples2/tut3.py create mode 100755 examples2/tut4.py create mode 100755 examples2/tut5.py create mode 100755 examples2/tut6.py create mode 100755 examples2/tut7.py create mode 100755 examples2/tut8.py create mode 100755 examples2/tut9.py create mode 100755 examples2/widgets.py create mode 100644 examples3/README create mode 100644 examples3/SQL/README create mode 100644 examples3/SQL/connect.ui create mode 100644 examples3/SQL/connect.ui.h create mode 100755 examples3/SQL/dbconnect.py create mode 100644 examples3/SQL/dbpar.py create mode 100644 examples3/SQL/form1.ui create mode 100644 examples3/SQL/form2.ui create mode 100644 examples3/SQL/frmconnect.py create mode 100644 examples3/SQL/frmconnect.ui create mode 100755 examples3/SQL/runform1.py create mode 100755 examples3/SQL/runform2.py create mode 100755 examples3/SQL/runsqlex.py create mode 100755 examples3/SQL/sqlcustom1.py create mode 100644 examples3/SQL/sqlex.ui create mode 100644 examples3/SQL/sqlex.ui.h create mode 100755 examples3/SQL/sqlsubclass5.py create mode 100755 examples3/SQL/sqltable4.py create mode 100644 examples3/SQL/testdb_mysql.sql create mode 100644 examples3/SQL/testdb_pg.sql create mode 100755 examples3/aclock.py create mode 100755 examples3/addressbook.py create mode 100755 examples3/application.py create mode 100755 examples3/biff.py create mode 100755 examples3/bigtable.py create mode 100755 examples3/buttongroups.py create mode 100644 examples3/canvas/butterfly.png create mode 100755 examples3/canvas/canvas.py create mode 100644 examples3/canvas/qt-trans.xpm create mode 100644 examples3/canvas/qtlogo.png create mode 100755 examples3/checklists.py create mode 100755 examples3/cursor.py create mode 100755 examples3/dclock.py create mode 100755 examples3/desktop.py create mode 100755 examples3/dirview.py create mode 100755 examples3/dragdrop.py create mode 100755 examples3/drawlines.py create mode 100644 examples3/dropsite.py create mode 100644 examples3/fileopen.xpm create mode 100755 examples3/fontdisplayer.py create mode 100755 examples3/fonts.py create mode 100755 examples3/gears.py create mode 100644 examples3/i18n/i18n.pro create mode 100755 examples3/i18n/i18n.py create mode 100644 examples3/i18n/mywidget.py create mode 100644 examples3/i18n/mywidget_cs.qm create mode 100644 examples3/i18n/mywidget_cs.ts create mode 100644 examples3/i18n/mywidget_de.qm create mode 100644 examples3/i18n/mywidget_de.ts create mode 100644 examples3/i18n/mywidget_el.qm create mode 100644 examples3/i18n/mywidget_el.ts create mode 100644 examples3/i18n/mywidget_en.qm create mode 100644 examples3/i18n/mywidget_en.ts create mode 100644 examples3/i18n/mywidget_eo.qm create mode 100644 examples3/i18n/mywidget_eo.ts create mode 100644 examples3/i18n/mywidget_fr.qm create mode 100644 examples3/i18n/mywidget_fr.ts create mode 100644 examples3/i18n/mywidget_it.qm create mode 100644 examples3/i18n/mywidget_it.ts create mode 100644 examples3/i18n/mywidget_jp.qm create mode 100644 examples3/i18n/mywidget_jp.ts create mode 100644 examples3/i18n/mywidget_ko.qm create mode 100644 examples3/i18n/mywidget_ko.ts create mode 100644 examples3/i18n/mywidget_no.qm create mode 100644 examples3/i18n/mywidget_no.ts create mode 100644 examples3/i18n/mywidget_ru.qm create mode 100644 examples3/i18n/mywidget_ru.ts create mode 100644 examples3/i18n/mywidget_zh.qm create mode 100644 examples3/i18n/mywidget_zh.ts create mode 100755 examples3/lineedits.py create mode 100755 examples3/listbox.py create mode 100755 examples3/listboxcombo.py create mode 100644 examples3/marble.png create mode 100755 examples3/mdi.py create mode 100755 examples3/menu.py create mode 100755 examples3/progress.py create mode 100755 examples3/progressbar.py create mode 100755 examples3/qdir.py create mode 100755 examples3/qmag.py create mode 100644 examples3/qt.png create mode 100644 examples3/qtlogo.png create mode 100755 examples3/rangecontrols.py create mode 100755 examples3/richtext.py create mode 100644 examples3/secret.py create mode 100755 examples3/semaphore.py create mode 100755 examples3/smalltable.py create mode 100755 examples3/splitter.py create mode 100755 examples3/tabdialog.py create mode 100755 examples3/tablestatistics.py create mode 100755 examples3/tooltip.py create mode 100644 examples3/trolltech.bmp create mode 100644 examples3/trolltech.gif create mode 100644 examples3/tt-logo.png create mode 100755 examples3/tut1.py create mode 100755 examples3/tut10.py create mode 100755 examples3/tut11.py create mode 100755 examples3/tut12.py create mode 100755 examples3/tut13.py create mode 100755 examples3/tut14.py create mode 100755 examples3/tut2.py create mode 100755 examples3/tut3.py create mode 100755 examples3/tut4.py create mode 100755 examples3/tut5.py create mode 100755 examples3/tut6.py create mode 100755 examples3/tut7.py create mode 100755 examples3/tut8.py create mode 100755 examples3/tut9.py create mode 100644 examples3/webbrowser/mainwindow.py create mode 100644 examples3/webbrowser/mainwindow.ui create mode 100644 examples3/webbrowser/webbrowser.py create mode 100755 examples3/widgets.py create mode 100644 pylupdate3/LICENSE.GPL create mode 100644 pylupdate3/fetchtr.cpp create mode 100644 pylupdate3/main.cpp create mode 100644 pylupdate3/merge.cpp create mode 100644 pylupdate3/metatranslator.cpp create mode 100644 pylupdate3/metatranslator.h create mode 100644 pylupdate3/numberh.cpp create mode 100644 pylupdate3/proparser.cpp create mode 100644 pylupdate3/proparser.h create mode 100644 pylupdate3/pylupdate-prof.sbf create mode 100644 pylupdate3/pylupdate.pro.in create mode 100644 pylupdate3/pylupdate.sbf create mode 100644 pylupdate3/sametexth.cpp create mode 100644 pyqtconfig.py.in create mode 100644 pyuic2/COPYING create mode 100644 pyuic2/domtool.cpp create mode 100644 pyuic2/domtool.h create mode 100644 pyuic2/globaldefs.h create mode 100644 pyuic2/pyuic.pro.in create mode 100644 pyuic2/pyuic.sbf create mode 100644 pyuic2/uic.cpp create mode 100644 pyuic2/uic.h create mode 100644 pyuic2/widgetdatabase.cpp create mode 100644 pyuic2/widgetdatabase.h create mode 100644 pyuic3/LICENSE.GPL create mode 100644 pyuic3/domtool.cpp create mode 100644 pyuic3/domtool.h create mode 100644 pyuic3/embed.cpp create mode 100644 pyuic3/form.cpp create mode 100644 pyuic3/globaldefs.h create mode 100644 pyuic3/main.cpp create mode 100644 pyuic3/object.cpp create mode 100644 pyuic3/parser.cpp create mode 100644 pyuic3/parser.h create mode 100644 pyuic3/pyuic-prof.sbf create mode 100644 pyuic3/pyuic.pro.in create mode 100644 pyuic3/pyuic.sbf create mode 100644 pyuic3/subclassing.cpp create mode 100644 pyuic3/uic.cpp create mode 100644 pyuic3/uic.h create mode 100644 pyuic3/widgetdatabase.cpp create mode 100644 pyuic3/widgetdatabase.h create mode 100644 pyuic3/widgetinterface.h create mode 100644 sip/pyqt-gpl.sip create mode 100644 sip/qt/copying.sip create mode 100644 sip/qt/qaccel.sip create mode 100644 sip/qt/qaction.sip create mode 100644 sip/qt/qapplication.sip create mode 100644 sip/qt/qarray.sip create mode 100644 sip/qt/qassistantclient.sip create mode 100644 sip/qt/qbitmap.sip create mode 100644 sip/qt/qbrush.sip create mode 100644 sip/qt/qbutton.sip create mode 100644 sip/qt/qbuttongroup.sip create mode 100644 sip/qt/qbytearray.sip create mode 100644 sip/qt/qcdestyle.sip create mode 100644 sip/qt/qcheckbox.sip create mode 100644 sip/qt/qclipboard.sip create mode 100644 sip/qt/qcolor.sip create mode 100644 sip/qt/qcolordialog.sip create mode 100644 sip/qt/qcolorgroup.sip create mode 100644 sip/qt/qcombobox.sip create mode 100644 sip/qt/qcommonstyle.sip create mode 100644 sip/qt/qcstring.sip create mode 100644 sip/qt/qcursor.sip create mode 100644 sip/qt/qdatastream.sip create mode 100644 sip/qt/qdatetime.sip create mode 100644 sip/qt/qdatetimeedit.sip create mode 100644 sip/qt/qdesktopwidget.sip create mode 100644 sip/qt/qdial.sip create mode 100644 sip/qt/qdialog.sip create mode 100644 sip/qt/qdir.sip create mode 100644 sip/qt/qdockarea.sip create mode 100644 sip/qt/qdockwindow.sip create mode 100644 sip/qt/qdragobject.sip create mode 100644 sip/qt/qdrawutil.sip create mode 100644 sip/qt/qdropsite.sip create mode 100644 sip/qt/qerrormessage.sip create mode 100644 sip/qt/qevent.sip create mode 100644 sip/qt/qeventloop.sip create mode 100644 sip/qt/qfile.sip create mode 100644 sip/qt/qfiledialog.sip create mode 100644 sip/qt/qfileinfo.sip create mode 100644 sip/qt/qfont.sip create mode 100644 sip/qt/qfontdatabase.sip create mode 100644 sip/qt/qfontdialog.sip create mode 100644 sip/qt/qfontinfo.sip create mode 100644 sip/qt/qfontmetrics.sip create mode 100644 sip/qt/qframe.sip create mode 100644 sip/qt/qglobal.sip create mode 100644 sip/qt/qgmanager.sip create mode 100644 sip/qt/qgrid.sip create mode 100644 sip/qt/qgridview.sip create mode 100644 sip/qt/qgroupbox.sip create mode 100644 sip/qt/qhbox.sip create mode 100644 sip/qt/qhbuttongroup.sip create mode 100644 sip/qt/qheader.sip create mode 100644 sip/qt/qhgroupbox.sip create mode 100644 sip/qt/qiconset.sip create mode 100644 sip/qt/qiconview.sip create mode 100644 sip/qt/qimage.sip create mode 100644 sip/qt/qinputdialog.sip create mode 100644 sip/qt/qinterlacestyle.sip create mode 100644 sip/qt/qiodevice.sip create mode 100644 sip/qt/qkeycode.sip create mode 100644 sip/qt/qkeysequence.sip create mode 100644 sip/qt/qlabel.sip create mode 100644 sip/qt/qlayout.sip create mode 100644 sip/qt/qlcdnumber.sip create mode 100644 sip/qt/qlibrary.sip create mode 100644 sip/qt/qlineedit.sip create mode 100644 sip/qt/qlist.sip create mode 100644 sip/qt/qlistbox.sip create mode 100644 sip/qt/qlistview.sip create mode 100644 sip/qt/qlocale.sip create mode 100644 sip/qt/qmainwindow.sip create mode 100644 sip/qt/qmemarray.sip create mode 100644 sip/qt/qmenubar.sip create mode 100644 sip/qt/qmenudata.sip create mode 100644 sip/qt/qmessagebox.sip create mode 100644 sip/qt/qmetaobject.sip create mode 100644 sip/qt/qmime.sip create mode 100644 sip/qt/qmotifplusstyle.sip create mode 100644 sip/qt/qmotifstyle.sip create mode 100644 sip/qt/qmovie.sip create mode 100644 sip/qt/qmultilinedit.sip create mode 100644 sip/qt/qmutex.sip create mode 100644 sip/qt/qnamespace.sip create mode 100644 sip/qt/qnetworkprotocol.sip create mode 100644 sip/qt/qobject.sip create mode 100644 sip/qt/qobjectcleanuphandler.sip create mode 100644 sip/qt/qobjectlist.sip create mode 100644 sip/qt/qpaintdevice.sip create mode 100644 sip/qt/qpaintdevicemetrics.sip create mode 100644 sip/qt/qpainter.sip create mode 100644 sip/qt/qpair.sip create mode 100644 sip/qt/qpalette.sip create mode 100644 sip/qt/qpen.sip create mode 100644 sip/qt/qpicture.sip create mode 100644 sip/qt/qpixmap.sip create mode 100644 sip/qt/qpixmapcache.sip create mode 100644 sip/qt/qplatinumstyle.sip create mode 100644 sip/qt/qpoint.sip create mode 100644 sip/qt/qpointarray.sip create mode 100644 sip/qt/qpopupmenu.sip create mode 100644 sip/qt/qprintdialog.sip create mode 100644 sip/qt/qprinter.sip create mode 100644 sip/qt/qprocess.sip create mode 100644 sip/qt/qprogressbar.sip create mode 100644 sip/qt/qprogressdialog.sip create mode 100644 sip/qt/qptrlist.sip create mode 100644 sip/qt/qpushbutton.sip create mode 100644 sip/qt/qradiobutton.sip create mode 100644 sip/qt/qrangecontrol.sip create mode 100644 sip/qt/qrect.sip create mode 100644 sip/qt/qregexp.sip create mode 100644 sip/qt/qregion.sip create mode 100644 sip/qt/qscrollbar.sip create mode 100644 sip/qt/qscrollview.sip create mode 100644 sip/qt/qsemaphore.sip create mode 100644 sip/qt/qsemimodal.sip create mode 100644 sip/qt/qsessionmanager.sip create mode 100644 sip/qt/qsettings.sip create mode 100644 sip/qt/qsgistyle.sip create mode 100644 sip/qt/qsignalmapper.sip create mode 100644 sip/qt/qsimplerichtext.sip create mode 100644 sip/qt/qsize.sip create mode 100644 sip/qt/qsizegrip.sip create mode 100644 sip/qt/qsizepolicy.sip create mode 100644 sip/qt/qslider.sip create mode 100644 sip/qt/qsocketnotifier.sip create mode 100644 sip/qt/qsound.sip create mode 100644 sip/qt/qspinbox.sip create mode 100644 sip/qt/qsplashscreen.sip create mode 100644 sip/qt/qsplitter.sip create mode 100644 sip/qt/qstatusbar.sip create mode 100644 sip/qt/qstring.sip create mode 100644 sip/qt/qstringlist.sip create mode 100644 sip/qt/qstrlist.sip create mode 100644 sip/qt/qstyle.sip create mode 100644 sip/qt/qstylefactory.sip create mode 100644 sip/qt/qstylesheet.sip create mode 100644 sip/qt/qsyntaxhighlighter.sip create mode 100644 sip/qt/qtabbar.sip create mode 100644 sip/qt/qtabdialog.sip create mode 100644 sip/qt/qtableview.sip create mode 100644 sip/qt/qtabwidget.sip create mode 100644 sip/qt/qtextbrowser.sip create mode 100644 sip/qt/qtextcodec.sip create mode 100644 sip/qt/qtextedit.sip create mode 100644 sip/qt/qtextstream.sip create mode 100644 sip/qt/qtextview.sip create mode 100644 sip/qt/qthread.sip create mode 100644 sip/qt/qtimer.sip create mode 100644 sip/qt/qtmod.sip create mode 100644 sip/qt/qtoolbar.sip create mode 100644 sip/qt/qtoolbox.sip create mode 100644 sip/qt/qtoolbutton.sip create mode 100644 sip/qt/qtooltip.sip create mode 100644 sip/qt/qtranslator.sip create mode 100644 sip/qt/qurl.sip create mode 100644 sip/qt/qurlinfo.sip create mode 100644 sip/qt/qurloperator.sip create mode 100644 sip/qt/quuid.sip create mode 100644 sip/qt/qvalidator.sip create mode 100644 sip/qt/qvaluelist.sip create mode 100644 sip/qt/qvariant.sip create mode 100644 sip/qt/qvbox.sip create mode 100644 sip/qt/qvbuttongroup.sip create mode 100644 sip/qt/qvgroupbox.sip create mode 100644 sip/qt/qwaitcondition.sip create mode 100644 sip/qt/qwhatsthis.sip create mode 100644 sip/qt/qwidget.sip create mode 100644 sip/qt/qwidgetlist.sip create mode 100644 sip/qt/qwidgetstack.sip create mode 100644 sip/qt/qwindow.sip create mode 100644 sip/qt/qwindowdefs.sip create mode 100644 sip/qt/qwindowdefs_qws.sip create mode 100644 sip/qt/qwindowdefs_x11.sip create mode 100644 sip/qt/qwindowsstyle.sip create mode 100644 sip/qt/qwindowsxpstyle.sip create mode 100644 sip/qt/qwizard.sip create mode 100644 sip/qt/qwmatrix.sip create mode 100644 sip/qt/qworkspace.sip create mode 100644 sip/qt/versions.sip create mode 100644 sip/qtaxcontainer/copying.sip create mode 100644 sip/qtaxcontainer/qaxbase.sip create mode 100644 sip/qtaxcontainer/qaxobject.sip create mode 100644 sip/qtaxcontainer/qaxwidget.sip create mode 100644 sip/qtaxcontainer/qtaxcontainermod.sip create mode 100644 sip/qtcanvas/copying.sip create mode 100644 sip/qtcanvas/qcanvas.sip create mode 100644 sip/qtcanvas/qtcanvasmod.sip create mode 100644 sip/qtext/copying.sip create mode 100644 sip/qtext/qextscintilla.sip create mode 100644 sip/qtext/qextscintillaapis.sip create mode 100644 sip/qtext/qextscintillabase.sip create mode 100644 sip/qtext/qextscintillacommand.sip create mode 100644 sip/qtext/qextscintillacommandset.sip create mode 100644 sip/qtext/qextscintilladocument.sip create mode 100644 sip/qtext/qextscintillalexer.sip create mode 100644 sip/qtext/qextscintillalexerbash.sip create mode 100644 sip/qtext/qextscintillalexerbatch.sip create mode 100644 sip/qtext/qextscintillalexercpp.sip create mode 100644 sip/qtext/qextscintillalexercsharp.sip create mode 100644 sip/qtext/qextscintillalexercss.sip create mode 100644 sip/qtext/qextscintillalexerdiff.sip create mode 100644 sip/qtext/qextscintillalexerhtml.sip create mode 100644 sip/qtext/qextscintillalexeridl.sip create mode 100644 sip/qtext/qextscintillalexerjava.sip create mode 100644 sip/qtext/qextscintillalexerjavascript.sip create mode 100644 sip/qtext/qextscintillalexerlua.sip create mode 100644 sip/qtext/qextscintillalexermakefile.sip create mode 100644 sip/qtext/qextscintillalexerperl.sip create mode 100644 sip/qtext/qextscintillalexerpov.sip create mode 100644 sip/qtext/qextscintillalexerproperties.sip create mode 100644 sip/qtext/qextscintillalexerpython.sip create mode 100644 sip/qtext/qextscintillalexerruby.sip create mode 100644 sip/qtext/qextscintillalexersql.sip create mode 100644 sip/qtext/qextscintillalexertex.sip create mode 100644 sip/qtext/qextscintillamacro.sip create mode 100644 sip/qtext/qextscintillaprinter.sip create mode 100644 sip/qtext/qtextmod.sip create mode 100644 sip/qtgl/copying.sip create mode 100644 sip/qtgl/qgl.sip create mode 100644 sip/qtgl/qglcolormap.sip create mode 100644 sip/qtgl/qtglmod.sip create mode 100644 sip/qtnetwork/copying.sip create mode 100644 sip/qtnetwork/qdns.sip create mode 100644 sip/qtnetwork/qftp.sip create mode 100644 sip/qtnetwork/qhostaddress.sip create mode 100644 sip/qtnetwork/qhttp.sip create mode 100644 sip/qtnetwork/qlocalfs.sip create mode 100644 sip/qtnetwork/qnetwork.sip create mode 100644 sip/qtnetwork/qserversocket.sip create mode 100644 sip/qtnetwork/qsocket.sip create mode 100644 sip/qtnetwork/qsocketdevice.sip create mode 100644 sip/qtnetwork/qtnetworkmod.sip create mode 100644 sip/qtpe/copying.sip create mode 100644 sip/qtpe/qpeapplication.sip create mode 100644 sip/qtpe/qpeapplnk.sip create mode 100644 sip/qtpe/qpeconfig.sip create mode 100644 sip/qtpe/qpefilemanager.sip create mode 100644 sip/qtpe/qpefileselector.sip create mode 100644 sip/qtpe/qpefontdatabase.sip create mode 100644 sip/qtpe/qpeglobal.sip create mode 100644 sip/qtpe/qpemenubar.sip create mode 100644 sip/qtpe/qpemenubutton.sip create mode 100644 sip/qtpe/qpeqcopenvelope.sip create mode 100644 sip/qtpe/qpeqdawg.sip create mode 100644 sip/qtpe/qperesource.sip create mode 100644 sip/qtpe/qpetimestring.sip create mode 100644 sip/qtpe/qpetoolbar.sip create mode 100644 sip/qtpe/qtpemod.sip create mode 100644 sip/qtsql/copying.sip create mode 100644 sip/qtsql/qdatabrowser.sip create mode 100644 sip/qtsql/qdatatable.sip create mode 100644 sip/qtsql/qdataview.sip create mode 100644 sip/qtsql/qeditorfactory.sip create mode 100644 sip/qtsql/qsql.sip create mode 100644 sip/qtsql/qsqlcursor.sip create mode 100644 sip/qtsql/qsqldatabase.sip create mode 100644 sip/qtsql/qsqldriver.sip create mode 100644 sip/qtsql/qsqleditorfactory.sip create mode 100644 sip/qtsql/qsqlerror.sip create mode 100644 sip/qtsql/qsqlfield.sip create mode 100644 sip/qtsql/qsqlform.sip create mode 100644 sip/qtsql/qsqlindex.sip create mode 100644 sip/qtsql/qsqlpropertymap.sip create mode 100644 sip/qtsql/qsqlquery.sip create mode 100644 sip/qtsql/qsqlrecord.sip create mode 100644 sip/qtsql/qsqlresult.sip create mode 100644 sip/qtsql/qsqlselectcursor.sip create mode 100644 sip/qtsql/qtsqlmod.sip create mode 100644 sip/qttable/copying.sip create mode 100644 sip/qttable/qtable.sip create mode 100644 sip/qttable/qttablemod.sip create mode 100644 sip/qtui/copying.sip create mode 100644 sip/qtui/qtuimod.sip create mode 100644 sip/qtui/qwidgetfactory.sip create mode 100644 sip/qtxml/copying.sip create mode 100644 sip/qtxml/qdom.sip create mode 100644 sip/qtxml/qtxmlmod.sip diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..8233782 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,3389 @@ +2009/06/16 9:31:54 phil +Released as v3.18.1. + + +2009/06/10 14:35:18 phil +Fixed the handwritten code for all QDomDocument.setContent() overloads which +was using deprecated (and now removed) sipBuildResult() format characters. + + +2009/06/09 15:39:16 phil +Fixed a build problem that affected Python v2.5 and earlier. + + +2009/06/05 9:39:03 phil +Released as v3.18. + + +2009/06/03 10:07:29 phil +Removed some compiler warning messages. + + +2009/03/23 15:57:05 phil +Reverted the changes that removed the use of sipSelfWasArg in handwritten code. + + +2009/03/09 21:54:34 phil +Tweaked configure.py so that Python3 can run just enough of it to display an +error message. + + +2009/03/04 12:20:03 phil +Fixed a regression in emitting Python signals to Qt signals. + + +2009/02/25 21:42:47 phil +Handwritten code changes for the removal of the sipProtectVirt_*() methods. + + +2009/02/15 11:17:21 phil +Fixed a build problem with the GPL version. + + +2009/02/14 16:59:38 phil +Refactored the signla/slot support. + + +2009/02/14 14:35:40 phil +Safety checking of latest signal/slot refactoring. + + +2009/02/13 19:27:31 phil +Safety commit of the PyQt3-specific meta-type and super-type (just stubs at the +moment). + + +2009/02/13 17:03:47 phil +Use the %Plugin directive to enable PyQt3 signal support. + + +2009/02/02 10:54:57 phil +More changes to the QObject.sender() support. + + +2009/02/01 17:09:17 phil +Updated the QObject::sender() support in response to sip changes. + + +2009/01/29 18:22:48 phil +Moved the last of the type parsing from sip. + + +2009/01/28 22:55:51 phil +The type parsing now uses sipResolveTypedef(). + + +2009/01/28 12:44:28 phil +Added the type parsing support from the sip module as PyQt4 no longer uses it. + + +2009/01/18 17:56:59 phil +Replaced sipFindConnection() with sipFindSlot(). + + +2009/01/13 22:22:26 phil +Replaced sipFreeConnection() with sipFreeSipslot(). + + +2009/01/12 22:42:00 phil +Changes required by recent changes to the Qt support API. + + +2008/12/17 17:24:12 phil +Compatibility changes needed for SIP v4.8. + + +2008/12/17 16:30:55 phil +Merged the v3.17 maintenance branch into the trunk. + + +2008/11/24 22:31:33 phil +Made some char* in handwritten code const needed by SIP v4.8. + + +2008/11/17 14:01:59 phil +Released as v3.17.6. + + +2008/11/13 17:04:33 phil +Fixed a compilation bug in the QMemArray handwritten type convertor code that +affects MSVC .NET. + + +2008/11/08 11:52:26 phil +Released as v3.17.5. + + +2008/11/01 19:22:31 phil +Updated the NEWS file. + + +2008/10/14 10:53:17 phil +Added the /Constrained/ enum annotations required by the latest SIP. + + +2008/10/11 13:58:59 phil +Updated configure.py to eliminate deprecation messages from Python v2.6. + + +2008/07/25 22:12:44 phil +Added support for QRegion.rects() from a patch by Hans-Peter Jansen. + + +2008/06/28 19:09:35 phil +Added the missing QWidget.stackUnder() slot. + + +2007/12/06 14:27:50 phil +Operator related changes needed for SIP v4.7.2 and later. +Released as v3.17.4. + + +2007/07/30 16:51:02 phil +Released as v3.17.3. + + +2007/07/01 16:08:55 phil +Acquire the GIL before freeing a signal/slot connection. + + +2007/06/13 17:33:55 phil +Removed #includes of SIP generated files that, strictly speaking, were internal +and no longer generated. + + +2007/06/05 9:37:59 phil +Fix for an overflow bug in QImage from Ulli. + + +2007/05/14 15:00:02 phil +Updated progress.py example from Pete Jansen. + + +2007/04/25 12:28:47 phil +Updated the NEWS file. + + +2007/04/25 12:25:19 phil +Released as v3.17.2. + + +2007/04/21 14:13:36 phil +Backed out the recent change to remove the /ReleaseGIL/ from +QApplication.postEvent() as it turns out it avoids a potential deadlock. + + +2007/04/10 16:13:51 phil +Released as v3.17.1. + + +2007/04/02 15:27:03 phil +Updated the NEWS file. +SIP v4.6 is now required. +The QLayoutItem sub-class code no longer handles QLayout and leaves it to the +QObject sub-class code to deal with. + + +2007/02/20 10:58:40 phil +Removed the unneeded /ReleaseGIL/ from QApplication::postEvent(). +Removed the GIL manipulation in QCustomEvent (in particular in the traverse +code). + + +2007/01/27 16:02:18 phil +Removed knowledge of the optional parts of the Qt support API so that it is no +longer necessary to update PyQt when new optional parts are added. + + +2007/01/27 15:37:47 phil +Updated the Qt support API for the latest SIP. + + +2007/01/21 16:29:15 phil +Implemented sipQtFindConnection() so that lambda slots can be handled by the +cyclic garbage collector. + + +2007/01/17 16:58:32 phil +Updated the copyright notices. + + +2006/11/30 20:58:48 phil +Fixed bug in QApplication ctor handwritten code that caused a crash if a +QApplication was created a second time with no arguments. + + +2006/11/04 22:08:33 phil +Released as v3.17. + + +2006/10/27 17:13:44 phil +Updated the news file. + + +2006/10/21 14:10:23 phil +Switched the internal build system to Qt v3.3.7. + + +2006/10/06 17:44:27 phil +Synched with the latest QScintilla1 API. + + +2006/09/09 17:59:52 phil +Added QextScintilla.setFont(). +The internal build system now uses -j2. + + +2006/09/02 13:35:03 phil +Removed the use of -c in the internal build systems invocation of configure.py +as it causes problems for GCC v4. + + +2006/08/17 9:36:39 phil +Added the missing QListView.setSelectionAnchor(). + + +2006/07/30 17:16:35 phil +Updated for the latest QScintilla v1 snapshot. + + +2006/07/19 23:30:28 phil +Some tweaks for Windows64 support based on patches from Gerard. + + +2006/07/16 12:38:36 phil +Adapted the handwritten code for Python v2.5. + + +2006/07/08 19:25:44 phil +Added QextScintilla.isCallTipActive(). + + +2006/07/03 19:40:22 phil +Added pyqt_config_args to pyqtconfig.py. +Fixed QTextEdit.setAutoFormatting(). + + +2006/07/02 14:28:05 phil +Added setWrapVisualFlags(), WrapMode::WrapCharacter, WrapVisualFlag to +QextScintilla. + + +2006/07/01 18:57:30 phil +Added cancelList(), firstVisibleLine(), isListActive(), showUserList(), +textHeight() and userListActivated() to QextScintilla. + + +2006/06/28 22:12:57 phil +QextScintilla.foldAll() can now optionally fold all child fold points. +Added autoCompleteFromAll() and setAutoCompletionStartCharacters() to +QextScintilla. +Added AcsAll as an auto-completion source. + + +2006/06/25 21:52:03 phil +Added defaultColor() and setDefaultColor() to QextScintillaLexer. +Added color() and setColor() to QextScintilla. +Renamed eraseColor() and setEraseColor() to paper() and setPaper() in +QextScintilla. + + +2006/06/25 16:21:32 phil +Added defaultPaper() and setDefaultPaper() to QextScintillaLexer. +Added eraseColor() and setEraseColor() to QextScintilla. + + +2006/06/22 19:29:38 phil +The mkfeatures helper is now always built without debugging. +configure.py now states that the -u flag on Windows needs a debug version of +Python. + + +2006/06/20 15:57:55 phil +Latest QScintilla updates. + + +2006/06/19 21:00:47 phil +Synced with the latest QScintilla snapshot - including the significantly +changed Ruby lexer. + + +2006/06/19 15:55:42 phil +Solaris warnings fixes from Ulli. + + +2006/06/18 23:51:34 phil +Sync with the latest QScintilla changes: highlighted identifiers and decorators +in the Python lexer. + + +2006/06/18 16:40:31 phil +Updated for the latest QScintilla snapshot. + + +2006/05/17 8:39:39 phil +Removed some inaccessable methods from QCString. + + +2006/05/11 19:04:27 phil +Another fix for Qt v3.1 in qnamespace.sip. + + +2006/04/28 20:47:46 phil +Replaced long long with PY_LONG_LONG for MSVC 6. + + +2006/04/07 23:29:54 phil +Tidy ups to the internal build system. + + +2006/04/06 12:26:09 phil +Fixed Qt::MacintoshVersion for Qt v3.0.x and v3.1.x. + + +2006/04/05 12:11:43 phil +Removed all functions that were hidden by overloads with the same Python +signature (ie. both of them). + + +2006/03/30 8:09:58 phil +Added QStringList::operator+=(const QString &). + + +2006/03/29 11:38:21 phil +Added the missing QImage.bitBlt() function. + + +2006/03/24 23:54:13 phil +Released as v3.16. + + +2006/03/23 21:34:09 phil +Added a missing /Transfer/ from QGLWidget(). + + +2006/03/20 21:00:58 phil +Removed the "Filter" functions from the documentation. + + +2006/03/20 20:59:23 phil +Removed the "Filter" versions of the QFileDialog static methods as they aren't +necessary after all (just not obvious how to use them properly). + + +2006/03/14 22:45:09 phil +pyuic now specifies the Latin1 encoding when the -embed flag is used. + + +2006/03/13 11:55:09 phil +Build system changes so that PyQt builds on MacOS properly. + + +2006/03/11 19:16:56 phil +Removed some leftovers from when PyQt3 and 4 shared a single config.py. PyQt3 +no longer searches PATH for the Qt bin directory. + + +2006/03/11 15:15:15 phil +Fixed build problem with Qt v1.x. + + +2006/03/10 22:37:30 phil +Updates for Qt v3.3.6. + + +2006/03/04 16:06:40 phil +Documentation updates. +Applied the same transfer rule to QPopupMenu.exec() as is applied to +QDialog.exec(). +Added getOpenFileNameFilter(), getSaveFileNameFilter() and +getOpenFileNamesFilter() to QFileDialog that return a tuple of the selected +files and the current filter. + + +2006/02/26 13:56:28 phil +Added support for signed char to the Qt API. + + +2006/02/21 15:22:08 phil +Changed the signal/slot handling so that unsigned int and unsigned short are +implemented as long objects rather than integer objects. + + +2006/02/19 16:43:48 phil +Updates to the internal Qt API. + + +2006/02/18 21:05:56 phil +Added new stubs in the Qt support API (not used by PyQt3). + + +2006/02/14 19:16:05 phil +The destroyed() signal can now be received by a Python slot. + + +2006/02/13 20:02:22 phil +Fixed a typo in configure.py. + + +2006/02/13 0:24:55 phil +Updated the handwritten code to use the current SIP API. + + +2006/02/12 1:14:11 phil +Removed all calls sipForceConvertTo*(). +Removed all uses of newly deprecated calls. + + +2006/01/26 16:40:38 phil +Changed the signal/slot support required by the latest SIP changes. + + +2006/01/16 18:58:26 phil +Removed PYQT_BUILD. + + +2006/01/10 19:13:07 phil +Fixed a typo in the last change. + + +2006/01/10 18:20:02 phil +Fixed the sipForceConvertToTransfer_*() calls. + + +2005/12/30 14:30:08 phil +More changes to handwritten code that should be handling sipSelfWasArg. + + +2005/12/28 19:35:10 phil +Updated all handwritten convertor code for the latest SIP changes. + + +2005/12/24 17:02:31 phil +Changes required by the introduction of sipSelfWasArg in the SIP snapshot. + + +2005/12/22 16:22:48 phil +Really fixed the QApplication argc bug this time. + + +2005/12/19 17:43:42 phil +Changes to the build system for the latest SIP snapshot. + + +2005/12/18 11:00:06 phil +Stripped the Qt4 specific stuff from configure.py. + + +2005/12/18 10:06:25 phil +Updated the internal build system not to include the .svn directory in +packages. + + +2005/12/17 19:43:36 phil +Changes to the internal build system for the CVS to SVN transfer. + + +2005/12/07 00:54:04 phil +Added a missing #include from qstring.sip in PyQt3. + + +2005/12/04 18:41:31 phil +Fixed the handling of horizontal and vertical stretch in QSizePolicy. + + +2005/11/29 13:06:37 phil +Fixed a long standing bug with QApplication ctors that only showed itself with +Qt4. + + +2005/11/24 17:45:09 phil +Added the missing /ReleaseGIL/ to QThread.exit(). + + +2005/11/24 17:22:31 phil +Changes required for the modified mapped type template syntax. + + +2005/11/20 18:41:02 phil +The HTML documentation is now maintained manually rather than being +auto-generated. + + +2005/11/17 18:24:48 phil +Fixed bug in pyuic related to QKeySequence. + + +2005/11/12 10:29:13 phil +Added the missing ctor to QApplication. + + +2005/11/10 21:10:46 phil +Removed the /TransferThis/ annotations from the QTableItem (and sub-classes) +ctors. The Qt documentation is wrong. + + +2005/11/09 18:00:47 phil +Fixed the GIL bug in qInstallMsgHandler(). + + +2005/11/01 22:08:32 phil +Implemented the PyQt3 changes for the new Qt support API. + + +2005/10/26 14:34:57 phil +Modified the QString buffer interface to be reentrant and to try and use the +default Python codec. + + +2005/10/23 16:02:47 phil +QObject.sender() now supports Python signals. + + +2005/10/22 22:38:54 phil +Implemented the buffer interface for QString. + + +2005/10/19 13:38:24 phil +Improved the fix to QClipboard.setData(). + + +2005/10/16 16:09:29 phil +Used mapped type templates in PyQt3 where possible. + + +2005/10/13 18:52:02 phil +Fixed the handling of QClipboard.setMimeType() and a related memory leak. + + +2005/10/12 21:11:15 phil +Fixed bug in configure.py when the Qt bin directory isn't on the path. +Fixed compilation problem with QAxBase handwritten code and MinGW. +Added the * and *= operators to QString. +Removed some QString methods that were passing or returning arrays. + + +2005/10/11 21:13:48 phil +Added /Numeric/ to the QString + operator. The improved behaviour (being able +to write s = "foo" + QString("bar")) should now work in both PyQt3 and 4. + + +2005/10/07 18:15:37 phil +Changed the PyQt3 QString behaviour with long and ulong to match PyQt4. + + +2005/09/22 20:18:39 phil +Updated the build system now that all Qt specific configuration data has been +removed from sipconfig. + + +2005/09/10 21:33:59 phil +Fixed bug in configure.py when reporting an incorrect SIP version. + + +2005/09/08 20:16:33 phil +Updated the universal slot support to fit with the latest SIP snapshot. +Changed the way universal slots are implemented so they get destroyed when the +corresponding transmitter gets destroyed. + + +2005/09/07 20:53:52 phil +Removed support for SIP v3 in configure.py. +Minor pyuic fix taken from uic v3.3.5. +Added the missing MacintoshVersion enum. +Added the -f flag to configure to use any existing features file (by default it +is recreated). + + +2005/09/06 20:33:43 phil +Removed support for SIP v3 from configure.py. +Added the new Qt support code taken out of SIP. + + +2005/08/30 17:31:05 phil +Released as v3.15. + + +2005/08/17 22:30:17 phil +Replaced all the (now deprecated) sipTransfer() calls in handwritten code. + + +2005/08/10 22:10:29 phil +Synced with the latest QScintilla. +Updated the documentation. + + +2005/07/26 11:08:23 phil +Synced with the current QScintilla. + + +2005/07/25 18:24:29 phil +Added the sipTransfer() to QDialog.exec_loop(). + + +2005/07/24 20:16:51 phil +Synced with the latest QScintilla. +Added the registerWeakActiveObject() and revokeActiveObject() utility +functions to QAxBase. + + +2005/07/10 09:46:49 phil +Added %ConvertSubClassCode to QLayoutItem. + + +2005/07/09 17:55:30 phil +Sync'ed with the latest QScintilla changes. + + +2005/07/06 18:20:26 phil +Fixed the bug in QObject's type conversion graph. +Added the QextScintillaLexerPOV class. +Fixed configure.py so that it properly enables support for the latest +QScintilla. + + +2005/07/05 21:04:26 phil +Added the extra flag to QextScintilla.findFirst(). + + +2005/07/04 19:17:38 phil +Synced with the latest version of QScintilla. + + +2005/07/03 16:58:21 phil +Added support for QAxBase now that SIP has better support for abstract +classes. + + +2005/06/30 15:38:41 phil +Reimplemented all the %ConvertToSubClassCode for QObjects so that it returns +the most specific type that it can, even if it doesn't recognise the exact +type. + + +2005/06/19 13:49:51 phil +Hopefully fixed QImage() for colours with unsigned 32 bit values. + + +2005/06/10 16:45:00 phil +Fixed the return value of QMenuData.insertSeparator(). + + +2005/05/20 17:25:45 phil +Fixed a problem where the readBlock() and readLine() methods of QIODevice were +wrongly expecting a tuple result from a Python reimplementation. + + +2005/05/04 18:41:49 phil +Fixed pyuic bug where a required QIconSet ctor wasn't being generated. + + +2005/04/17 09:04:01 phil +Documented the limitations with super. +Fixed the qdir.py example bugs tiggered by SIP doing some more rigourous +checks. + + +2005/04/15 13:31:55 phil +Added missing Py_DECREF() from QObject.queryList() %MethodCode. + + +2005/04/14 18:17:58 phil +Implemented the QString '+' operator. + + +2005/04/09 15:35:48 phil +When None is passed as a QString (or QByteArray or QCString) then it is now +converted to NULL rather than a null QString. + + +2005/04/04 15:59:27 phil +Fixed a problem with the internal build system caused by the new SIP garbage +collector directives. + + +2005/04/02 23:10:46 phil +Fixed the QCustomEvent %GCClear code. + + +2005/04/02 22:28:50 phil +Added the new %GCTraverseCode and %GCClearCode to QCustomEvent. +Now requires SIP v4.3. + + +2005/04/02 09:53:27 phil +Replaced the new /NoConvertor/ annotation with /Constrained/. + + +2005/03/25 20:18:32 phil +Accel and AccelOverride should now result in QKeyEvent instances rather than +QEvent instances. +Added missing private dtors. + + +2005/03/25 14:24:45 phil +Fixed bug in configure.py when reporting incorrect SIP versions. + + +2005/03/11 19:18:46 phil +Fixed qInstallMsgHandler() for SIP v3. + + +2005/03/10 18:55:52 phil +Fixed QPixmapCache.insert(). + + +2005/03/06 10:09:06 phil +Released as v3.14.1. + + +2005/02/26 11:22:18 phil +Fixed problem with relative path arguments to configure.py. + + +2005/02/25 17:46:51 phil +Added the missing /ReleaseGIL/ annotations from the static QFileDialog methods. +Fixed QObject.queryList() (for SIP v4 only). + + +2005/02/19 15:23:42 phil +Added the QextScintillaLexerLua class. +Released as 3.14. + + +2005/02/18 19:01:46 phil +Fixed the dirview.py example so that it drags local filenames properly and the +folderSelected() signal works the same way as the C++ version. +Added the qdir.py example from Hans-Peter Jansen. +Updated the QAxObject and QAxWidget documentation. +Added qInstallMsgHandler(). +Added the missing classes from the qtext subclass convertor code. + + +2005/02/13 10:47:50 phil +Updated the documentation on QFilePreview. +Fixed a bug in pyuic related to QDataBrowser.del(). + + +2005/02/11 22:54:02 phil +Updated the NEWS file and the documentation. + + +2005/02/11 17:19:19 phil +Fixed broken QObject.inherits() and QObject.isA() (for SIP v4 only). +Changes in version numbers for Qt v2.3.10. +Removed the "Extracting ..." message from pyuic as it isn't always true. + + +2005/02/06 14:39:57 phil +Release the GIL on calling QApplication.enter_loop(). + + +2005/01/29 10:15:48 phil +Synced pyuic with Qt v3.3.4. + + +2005/01/22 18:13:35 phil +PyQt now requires SIP v4.2 or later. + + +2005/01/22 11:54:13 phil +Fixed bug in pyuic where it wasn't importing QDataView when it should. + + +2005/01/21 17:29:52 phil +Added a missing /Transfer/ from QScrollView.setCornerWidget(). +Synced with the current QScintilla snapshot. + + +2005/01/17 13:04:46 phil +Fixed a bug in the internal build system. + + +2005/01/16 13:06:16 phil +Fixed bugs related to most implementations of readBlock() and readLine(). + + +2005/01/14 23:30:27 phil +Removed the out of date README.Linux file. + + +2005/01/14 17:36:52 phil +Backed out the changes to QListBox now that SIP (again) has strict enum +checking. +Fixed enum related bugs in the widgets.py example. +Updated the copyright notices. +Added support for Ulli's VendorID package. +Updated the documentation on application deployment. +Added support for debug builds to the internal build system. + + +2005/01/09 14:02:11 phil +Fixed QListBox so that setRowMode() and setColumnMode() work properly with the +newly relaxed enum type checking in SIP 4. + + +2004/12/29 18:54:44 phil +Added missing const to QDataTable.setDateFormat(). + + +2004/12/26 12:32:59 phil +Added support for the QextScintillaLexerRuby class. + + +2004/12/24 17:54:25 phil +Removed the -g flag from the configure.py help as the corresponding sip flag is +now deprecated. +Hopefully fixed conversions from Python unicode objects to QStrings where +Python uses longs to represent a character. +Allow for spaces in the path to the SIP binary. + + +2004/12/23 22:44:18 phil +Updated the documentation regarding application deployment. + + +2004/12/19 19:29:04 phil +Added the option to build static modules to the internal build system. + + +2004/12/10 19:03:18 phil +Fixed a pyuic bug triggered by the new enum handling in SIP v4.2. + + +2004/12/10 18:07:52 phil +Fixed debug builds on Windows. + + +2004/12/05 14:53:42 phil +Fixed pyuic bug (introduced in 3.13) that broke support for QAxWidget based +instances. + + +2004/12/03 19:00:06 phil +Added a missing /TransferThis/ to QSyntaxHighlighter. + + +2004/10/31 16:33:07 phil +Sync'd to the current QScintilla snapshot. + + +2004/10/17 19:27:08 phil +Minor change to the documentation. + + +2004/10/02 11:51:27 phil +A couple of bug fixes for the webbrowser.py example. + + +2004/10/01 23:09:30 phil +Changed the SIP tag of the educational version. +Added the webbrowser example to the distribution. +Minor fix for the webbrowser example. + + +2004/09/21 14:17:09 phil +Fixed a bug in pyuic2. +Released as v3.13. + + +2004/09/21 11:14:48 phil +Updated the NEWS file. + + +2004/09/15 12:40:09 phil +Added the QMetaObject and QMetaProperty classes. +Added the QObject.metaObject() method. + + +2004/09/12 11:41:49 phil +Added support for the QextScintillaLexerBash class. + + +2004/09/10 22:38:09 phil +Removed redundant implementations of QSqlRecord.field(). +Replaced whrandom with random in all examples. + + +2004/08/25 15:29:20 phil +Added explicit support for QScintilla to pyuic. + + +2004/08/22 15:51:05 phil +Added support for what will become QScintilla v1.4. + + +2004/08/20 11:07:56 phil +Brought the documentation up to date. +Added support for QUuid. + + +2004/08/19 10:32:31 phil +Pushed out support of QAxObject to SIP v4.2. +Added /ReleaseGIL/ to any QApplication and QThread method that might cause +events to be dispatched. + + +2004/08/15 23:34:28 phil +Updated pyuic from Qt 3.3.3. +pyuic now never uses the SLOT() macro in case the connection is to a method of +a Python custom widget. + + +2004/08/04 18:05:25 phil +Added the comparison operators between QChar and QChar and char. + + +2004/08/04 14:06:41 phil +Implemented all the QDataStream << and >> operators for classes. + + +2004/08/03 22:19:59 phil +Build system fix for when QWindowsXPStyle is a plugin. + + +2004/07/19 18:41:53 phil +Fixed a bug in the fontdisplayer.py example. + + +2004/07/08 08:40:54 phil +Minor internal changes. + + +2004/06/27 08:43:19 phil +Added a missing /TransferThis/ from one of the QPushButton ctors. + + +2004/05/26 22:15:40 phil +Added another missing /ReleaseGIL/ to QApplication. + + +2004/05/25 17:05:27 phil +Fixed bug in QArray for old versions of Qt. +Fixed QAssistantClient bug in configure.py for old versions of Qt. +Fixed QSocket bug for old versions of Qt. +Released as v3.12. + + +2004/05/25 13:55:07 phil +Added missing /ReleaseGIL/ to QThread. + + +2004/05/25 11:26:37 phil +Internal build system changes. + + +2004/05/18 18:33:03 phil +Added the webbrowser.py example (which will have to wait until SIP v4.1 before +it works). +Added missing /ReleaseGIL/ to QWaitCondition, QMutex and QMutexLocker. + + +2004/05/15 14:18:24 phil +Fixed bug that accidentally disabled the qtsql module for the free edition. +Disabled the qtaxcontainer module until SIP v4.1. + + +2004/05/09 11:19:26 phil +Minor pyuic3 changes to support QAxWidget. +Marked the qtaxcontainer classes as experimental. + + +2004/05/04 16:01:57 phil +qwindowdefs.sip for all platforms is now included in the commercial package. +Changed the SIP3 dependency to v3.10.2. +QValueList is now dependent on the Qt_ICONVIEW feature. +pyuic and pylupdate will now build on the Enterprise Edition even if the qtxml +module has been disabled. +Compiler error messages during configuration are suppressed if possible, but +can be seen with the new -w flag. +configure.py now explicitly checks QAssistantClient rather than assume it is +present in the Enterprise Edition. +The qtaxcontainer module now builds on Windows. + + +2004/05/02 00:38:16 phil +Sync with the latest QScintilla snapshot. + + +2004/05/01 17:10:57 phil +Fixed more minor build problems. +The commercial version now has identical code on all platforms. + + +2004/04/30 21:50:33 phil +Fixed an internal build problem. +Implemented QValueList as a mapped type. (Done in the previous +commit but I forgot to mention it.) + + +2004/04/25 22:09:09 phil +Added the qtaxcontainer module - doesn't work yet, but shouldn't break +anything. + + +2004/04/24 08:43:22 phil +Update the documentation to say that Qt v3.3.2 is supported. + + +2004/04/18 15:45:12 phil +Changed the build system to deal with the evaluation version of PyQt. + + +2004/04/13 18:24:04 phil +QAssistantClient is disabled for the Professional Edition because it requires +code from the Enterprise Edition (only seems to affect Windows though). + + +2004/04/12 14:49:33 phil +Added the QextScintillaLexerPerl class to the qtext module. + + +2004/04/04 17:01:11 phil +Minor fixes to the dirview.py example. +Sync'ed with the current QScintilla snapshot. + + +2004/03/30 18:22:25 phil +Fixed a bug where the destruction of QTab instances wasn't noticed. + + +2004/03/28 15:16:50 phil +Updated to the latest QScintilla snapshot. + + +2004/03/27 18:26:02 phil +Updated for the latest changes to QScintilla. + + +2004/03/21 21:09:25 phil +Changed the configure.py message when testing for plugins to be the right +"sense". +Updated the QScintilla support for v1.3. + + +2004/03/11 19:05:38 phil +Changed the SIP v3 dependency to v3.10.1. +Released as v3.11. + + +2004/03/11 01:22:12 phil +Minor changes to the internal build system. + + +2004/03/10 18:29:30 phil +Brought the documentation up to date. +Minor internal build system changes. +The build system now disables style classes built as plugins. +Changed the handwritten code to use the SIP generated feature #defines rather +than the unreliable (in the case of plugins) Qt ones. + + +2004/02/26 18:56:39 phil +Updated the documentation to say that PyQt has been tested against Qt v3.3.1. +Updated the internal build system to exploit distcc. +Fixed bug in the conversion from Python lists to QMemArrays. + + +2004/02/15 22:34:39 phil +Fixed the canvas.py example's handling of multiple views. + + +2004/02/11 19:24:10 phil +Fixed the old build system for Qt v3.3.0. + + +2004/02/07 17:38:52 phil +Fixed a couple of bugs in pyuic3 and added the spacer.ui form to verify it. + + +2004/02/02 22:27:48 phil +Updated pyuic from Qt v3.3.0. + + +2004/02/01 14:38:18 phil +Added the QLocale class from Qt v3.3.0. +Updated all existing classes for Qt v3.3.0. +Added the missing += operators for QString. +Added the missing QSocketDevice class. + + +2004/01/31 23:09:45 phil +Added the missing /Transfer/ from QMimeSourceFactory.setData() and +QMimeSourceFactory.setDefaultFactory(). +Added the missing /TransferBack/ from QMimeSourceFactory.takeDefaultFactory(). +Added the missing /Factory/ from createEditor() in QTableItem and sub-classes. +Added the missing /Factory/ in QTextCodec.makeDecoder(), +QTextCodec.makeEncoder() and QTextEdit.createPopupMenu(). +Added Qt v3.3.0 support to the build system. +PyQt now builds against Qt v3.3.0. + + +2004/01/29 19:19:36 phil +Minor change to the internal build system. +Added README.AIX from Ulli Berning. + + +2004/01/27 08:34:21 phil +Reverted the accidental change to QTextEdit.find(). +Fixed a couple of markup problems in the documentation. +Added the missing QHttp, QFtp and QLocalFs to the appropriate +%ConvertToSubClassCode. + + +2004/01/21 18:34:02 phil +Added some fixes for Qtopia v1.6 from Mickey Lauer. + + +2004/01/16 20:53:09 phil +Released as v3.10. + + +2004/01/15 20:04:11 phil +Changed configure.py to check that SIP was built with Qt support enabled as +early as possible. + + +2004/01/15 19:27:58 phil +Added a check for the SIP version number in configure.py. +Fixed pyuic3 not to use iostream and avoid warning messages with MSVC. + + +2004/01/04 18:52:29 phil +Minor updates to the build system. + + +2004/01/03 23:57:31 phil +Updated the copyright notices. +Changed pyuic3 to only #include zlib.h for Qt versions before 3.1.0. +Documented pyqtconfig. + + +2004/01/02 18:41:01 phil +Minor changes to the build system. +Repaired the completely broken pyqtconfig module. + + +2003/12/26 23:34:47 phil +Changes to the build system based on patches from Ulrich Berning. + + +2003/12/26 19:32:31 phil +Added the missing QFtp class. + + +2003/12/26 19:31:23 phil +Added the missing QHttp, QHttpHeader, QHttpRequestHeader, QHttpResponseHeader, +QLocalFs classes. + + +2003/12/21 17:28:16 phil +Documented sip.voidptr.asstring(). + + +2003/12/21 16:07:00 phil +Fixed a bug when automatically converting to a QKeySequence. + + +2003/12/06 20:21:54 phil +Fixed a bug in the old build system for Windows. +Brought the documentation up to date. +Released as v3.9. + + +2003/12/04 19:35:28 phil +Updated the README for the new build system. + + +2003/12/02 00:00:35 phil +Slight change to handwritten code forced by the change to sipParseResult(). + + +2003/11/23 17:04:10 phil +Removed qInstallPathSysconf() on Windows. + + +2003/11/22 20:54:01 phil +Windows related changes to the new build system. + + +2003/11/22 00:50:23 phil +Portability fixes for Qt v2 and Qtopia. + + +2003/11/21 23:06:14 phil +More changes to the new build system. Tested with SIP v4 and Qt Professional +on Linux and SIP v3 and Python v1.5.2 on Linux. + + +2003/11/21 07:32:01 phil +SCons is now completely removed from the new build system. PyQt will now build +with SIP v3 and SIP v4 on Linux. + + +2003/11/15 11:20:17 phil +More changes to the new build system. + + +2003/11/13 19:41:35 phil +More changes to the new build system. PyQt now builds against the Professional +Edition. + + +2003/11/13 13:12:47 phil +New build system changes. PyQt now builds correctly on Linux for SIP v3 and SIP +v4. + + +2003/11/12 22:22:50 phil +Added more of the new build system. +Fixed a bug in pyuic3 handling of encoded strings (thanks to Joerg Kaercher). +Added the QImageIO class. + + +2003/11/05 20:33:43 phil +Added QListViewItemIterator. +Added the QDockArea << and >> operators. +Started on the new build system. + + +2003/10/27 23:23:07 phil +Removed more handwritten code now that SIP fully supports pointers and +references to base types. +Fixed a GIL problem with the QCanvasItem sub-class conversion code. + + +2003/10/26 22:53:03 phil +Added the missing QSettings.readBoolEntry(). +Removed lots of non-virtual %MethodCode now that SIP automatically handles +returning multiple arguments. + + +2003/10/24 08:34:44 phil +Added /ReleaseGIL/ wherever looked sensible. + + +2003/10/23 18:27:30 phil +Used %Build rather than the deprecated %Makefile. +Used %ModuleHeaderCode and %TypeHeaderCode rather than the deprecated +%HeaderCode. +Used %ModuleCode and %TypeCode rather than the deprecated %C++Code. + + +2003/10/22 18:40:32 phil +Added %ConvertToSubClassCode for QTableItem and QCanvasItem. +Added the missing qtui module documentation. +Refactored the internal and external build systems so that the .sip files are +arranged in a hierarchy and are installed. +Added the -v flag to build.py to specify where the .sip are installed to. + + +2003/10/21 16:40:12 phil +Fix to build.py for the Mac. + + +2003/10/21 13:39:18 phil +Fixed Windows warning message from qmemarray.sip handwritten code. +Fixed internal build.py to generate Mac packages properly. + + +2003/10/20 18:50:07 phil +More MacOS/X related changes. +Compiler warnings are now enabled when building with SIP v4. +PyQt builds with no warnings with SIP v4. + + +2003/10/19 19:47:35 phil +Documentation updates. +Removed the tests for missing functions in early versions of Qt for MacOS/X. +Updates to the build system for MacOS/X. + + +2003/10/16 15:50:38 phil +Replaced the use of __cmp__ in QString because it doesn't work with SIP v4 if +the argument isn't of the same type - it's just the way new-style classes work. +Removed the QString.__cmp__() unit test as the implementation no longer uses +handwritten code. + + +2003/10/15 18:19:07 phil +Added the "-r" flag to build.py to build with tracing enabled. +Rewrote all the unit tests to work with PyQt generated with SIP v4. + + +2003/10/11 21:57:20 phil +Brought the documentation up to date. +Changed handwritten code for the changes to sipCallMethod(), sipParseResult() +and sipBadCatcherResult(). + + +2003/10/08 15:04:46 phil +Fixed the internal build system (again). + + +2003/10/07 19:33:13 phil +Fixed QIODevice handwritten code which looked very broken. +Checked all virtual abstract functions that need handwritten code. +Added /TransferBack/ for function return values where needed. +Added the missing qInstallPath(), qInstallPathDocs(), qInstallPathHeaders(), +qInstallPathLibs(), qInstallPathBins(), qInstallPathPlugins(), +qInstallPathData(), qInstallPathTranslations(), qInstallPathSysconf(). +Made sure all handwritten code uses functions that are part of the SIP v4 API. + + +2003/10/04 16:14:45 phil +Changed how sipClassName() is used now that it returns a new reference. + + +2003/10/04 11:16:21 phil +Migrated the remaining %MemberCode to %MethodCode. +Changed the QApplication dtor code slightly to keep the public SIP API simple. +(It means that disowning a top level widget now adds the extra reference, but +this shouldn't make a difference.) + + +2003/10/02 22:54:43 phil +Documented QLayoutIterator.next(). +Fixed problem with build system that was preventing snapshots being generated +after the addition of %MethodCode. +Fixed QSpinBox.mapTextToValue() to take zero parameters. +Converted most of %MemberCode to %MethodCode (ie. the easy ones). + + +2003/10/01 14:00:15 phil +Converted all ctor %MemberCode to %MethodCode. + + +2003/09/23 19:33:07 phil +Converted all Python special methods and operators from %MemberCode to +%MethodCode. +Fixed bug in build system that disabled thread support. + + +2003/09/19 15:30:09 phil +Changes to the build system for SIP v4's new build system. + + +2003/09/19 00:28:39 phil +Fixed converting Python wide Unicode strings to QString for Qt v2. (Actually +done with an earlier change but I forgot to mention it.) +Updated the documentation on application deployment to reflect the changes to +the build system. +The documentation is now a single HTML file with a TOC. +More changes to the build system. Tested with tmake and Windows. + + +2003/09/18 13:47:07 phil +More changes to the build system after initial testing. + + +2003/09/17 18:28:40 phil +Re-factored build.py to use the sipconfig module. Only tested on Linux with +Qt v3.2.1 Enterprise and Python v2.3. + + +2003/09/06 13:35:02 phil +QWMatrix fixes from Torsten Marek. +Added the undocumented "*" operators to QWMatrix. +Updated the educational version to v3.2.0. +Released as v3.8.1. + + +2003/08/24 18:43:40 phil +Updated the tutorials so that they have a consistent coding style and don't use +"import *". +Updated the documentation to say that Qt v3.2.1 is supported. + + +2003/08/17 12:25:57 phil +Fixed QPrinter.winPageSize() for Qt versions before v3. +Released as v3.8. + + +2003/08/17 10:02:11 phil +Fixed problem with QRect | and & operators. + + +2003/08/16 21:14:09 phil +Fixed the code generated by pyuic3 when the -x and -subimpl flags are both +given. +Brought the documentation up to date. + + +2003/08/13 17:50:14 phil +The == and != operators have been implemented for QBrush, QColor, QDomNode, +QFont, QImage, QKeySequence, QPalette, QPen and QRegExp. +The +, +=, -, -=, *, *=, /, /=, ==, != and __nonzero__() operators have been +implemented for QSize. +The ==, != and QString() operators have been implemented for QUrl. +The &, &=, |, |=, ==, !=, __contains__() and __nonzero__() operators have been +implemented for QRect. +The |, |=, +, +=, &, &=, -, -=, ^, ^=, ==, !=, __contains__() and __nonzero__() +operators have been implemented for QRegion. +The ==, != and *= operators have been added to QWMatrix. +The __len__(), __contains__(), == and != operators have been implemented for +QDir. +The comparison operators and __nonzero__() have been implemented for QDate, +QDateTime and QTime. +Added some consts to the QString operators. +Added the QDate, QDateTime, QDir, QRect, QRegion, QSize and QTime unit tests. +Added the runtests.py master unit test runner. + + +2003/08/12 20:34:29 phil +Fixed memory leak in QStringList * operator. +Added the QPoint operators (thanks to Torsten Marek). +Added the QPoint unit test. + + +2003/08/12 15:31:24 phil +Fixed deprecated use of iostream.h in pyuic3. +Updated the QScintilla support. + + +2003/08/11 18:52:45 phil +Fixed version problem with QToolBox. + + +2003/08/01 09:42:10 phil +Added the missing Qt.ButtonState.MetaButton. +Added support for the [], in, len and comparison operators to QString (thanks +to Torsten Marek). +Added the test_QString.py test script. + + +2003/07/25 23:38:36 phil +Refined the pyuic3 changes - because KWrite is crap. + + +2003/07/25 23:36:11 phil +Added the menus.ui test form. +Some pyuic3 format changes from Detlev. + + +2003/07/25 12:13:44 phil +Updated pyuic for Qt v3.2.0. + + +2003/07/24 17:20:59 phil +Added QSplashScreen, QSqlSelectCursor and QToolBox for Qt v3.2.0. +Fix to build.py error message. + + +2003/07/24 10:52:38 phil +Minor license handling changes. +Fixed memory leak in QStringList[] when using slices. +Added the -k flag to build.py to create static modules. +Updated README.MacOSX from Willard Myers. +Updated all existing classes for Qt v3.2.0. + + +2003/07/05 10:31:55 phil +Fixed problem with include directories when using tmake. +Released as v3.7. + + +2003/07/05 09:59:37 phil +Provisional release of v3.7. + + +2003/07/03 16:17:55 phil +pyuic3 now says what it is extracting on stderr rather than stdout. + + +2003/07/01 14:18:37 phil +Brought the documentation up to date. +Added README.MacOSX (thanks to Bill Myers). +Added lots of new examples from Jorge Arroyo. + + +2003/06/30 09:23:25 phil +Changed all handwritten code to use the new 'L' format character where +appropriate. +Implemented __setitem__(), __delitem__(), __add__(), __iadd__(), __mul__(), +__imul__(), __eq__() and __ne__() for QStringList. +Added the internal QStringList unit tests. + + +2003/06/22 11:26:32 phil +%DtorCode has been renamed %VirtualCode. + + +2003/06/21 11:37:58 phil +Fixed the internal build process to deal with the new %DtorCode. + + +2003/06/19 23:53:49 phil +More changes to QCustomEvent which shouldn't now leak memory under any +circumstances. + + +2003/06/19 16:31:57 phil +QEvent.data() now returns a Python object without increasing it's reference +count. +The QEvent dtor is now virtual so that the Python wrapper object gets garbage +collected when Qt deletes the event when it's passed to +QApplication.postEvent(). + + +2003/06/10 14:51:23 phil +(Hopefully) fixed pyuic3 compile bug under Windows. +Added the progressbar.py example from Jorge Arroyo. + + +2003/06/08 12:25:08 phil +Lots of build tidy ups from Hans-Peter Jansen. + + +2003/06/06 12:59:26 phil +pylupdate now recognises the __tr() and __trUtf8() methods generated by pyuic. +Added some missing /Transfer/ flags from QMenuData. +Updated the menu.py example so that it matches the latest Qt version. + + +2003/05/31 12:19:22 phil +Changed the build system to generate .in files which are then patched so that +the patched files stay around to aid debugging. +Removed unneeded directories from INCLUDEPATH in .pro files. + + +2003/05/30 17:52:06 phil +Don't generate the internal __tr() and __trUtf8() methods if the user passes +their own function name. + + +2003/05/30 17:47:57 phil +Added the listbox.py and listboxcombo.py examples from Jorge Arroyo. +build.py improvement in detecting executable programs. +Changed pyuic3 to generate calls to qApp.translate() rather than self.tr(). +Documented the issues related to translations. + + +2003/05/23 22:03:05 phil +Fixed some bugs and inefficiencies in the canvas.py example so that it no +longer segfaults on exit when a sprite has been created. +Added bits(), scanLine(), jumpTable() and colorTable() to QImage. + + +2003/05/22 21:50:05 phil +Added the QWindowsXPStyle class. (Thanks to Ulrich Berning.) + + +2003/05/20 10:36:10 phil +Added QextScintilla.modificationAttempted(). + + +2003/05/18 20:59:53 phil +Added QextScintillaBase.SCN_MODIFYATTEMPTRO. +Fixed pyuic3's broken handling of the -x flag. +Fixed pyuic3's broken generation of embedded images. +Fixed QImage ctor to use an internal colour table instead of an external one +that was garbage collected too soon. + + +2003/05/13 09:50:54 phil +Added the QSignalMapper class (thanks to Gordon Tyler). + + +2003/05/12 10:00:59 phil +Added toShort(), toUShort(), toInt(), toUInt(), toLong(), toULong(), toFloat() +and toDouble() to QCString and QString. + + +2003/05/11 10:26:44 phil +Added the QextScintillaLexerHTML class. + + +2003/05/07 21:07:04 phil +Changed the handling of version numbers so that we assume the latest SIP tags +if we find a QScintilla snapshot. + + +2003/05/07 16:53:05 phil +Updated the documentation to explicitly mention the problems of using lambda +expressions as slots. +Added the QextScintillaLexerSQL class. +Changed build.py to support QScintilla version control. + + +2003/05/04 09:57:19 phil +Fixed silly typo in build.py. + + +2003/05/03 14:50:03 phil +Removed some dead code from build.py. +The qt module was ignoring the release/debug option and the debug version of +the Python library wasn't being searched for. +Added the unittest tests for pyuic. +Fixed the last pyuic3 bugs related to embedded images. +Added the -test flag to pyuic3 to support fully automated unittest tests. + + +2003/04/26 15:24:45 phil +Released as v3.6. + + +2003/04/26 14:36:12 phil +Fixed tmake related breakages introduced with SIP v4 support in .pro files. + + +2003/04/26 13:58:00 phil +Fixed bug in concatanating source files. + + +2003/04/23 14:53:00 phil +Changed to the C++ style operators where possible. + + +2003/04/22 16:05:10 phil +Adjusted handwritten code for Python slots so that it will be compatible with +SIP v3 and v4. +QStringList.__getitem__ will now handle extended slices. + + +2003/04/18 22:17:26 phil +Tracked the latest QScintilla changes. + + +2003/04/16 11:42:45 phil +Fixed build.py for when SIP v4 is used. +Python v2.3 is now required if SIP v4 is being used. +Changed QCustomEvent.data() to deal with the changed support of SIP_PYOBJECT. + + +2003/04/13 15:42:08 phil +Temporarily made some handrwritten code dependent on SIP v3 while debugging +SIP v4. +Fix to pylupdate from Detlev. +Fix to pyuic3 related to pixmaps. + + +2003/04/07 11:52:33 phil +QCommonStyle is now always included (to fit with Qt v3), but it should still be +configured properly for the Zaurus. + + +2003/04/04 14:24:00 phil +Fixed typo in qpixmap.sip where some Qt v3 methods had been added to the Qt v2 +definition. +Fixed some pyuic3 problems with embedded and external images. + + +2003/04/04 10:32:45 phil +SIP v4 related fixes to %VirtualCode. +Fixed some sipParseArgs() format bugs in qtxml handwritten code. +Added missing /TransferThis/ from QTableItem (and derived classes) ctors. +Added other missing transfer flags from some QTable methods. + + +2003/04/01 20:44:55 phil +Added support for the educational version. +Don't delete the .lib and .exp files as part of the installation on Windows. +Added the -j, -r and -t flags to build.py based on patches from Hans-Peter +Jansen. +Changed all sipNames to the new style. + + +2003/03/31 23:39:02 phil +Made sure Python.h is included before stdio.h for LFS support under Solaris. +Removed all uses of %ExportedHeaderCode for compatibility with SIP v4. +Implemented the %VirtualCode that is to be used with SIP v4. +Fixed some bugs in existing %VirtualCode. +Removed QTextEdit.getFormat() and QTextEdit.getParagraphFormat() as they are +undocumented and marked as "don't use". + + +2003/03/26 22:21:58 phil +Slightly changed the implementation of QObject.sender() to maintain +compatibility with SIP v4. +The build process no longer checks for sipQt.h as it isn't in SIP v4. +Added a missing #include in qnetwork.sip that only showed up with SIP v4. + + +2003/03/25 17:52:22 phil +Work around the problem that qmake doesn't like targets called "qt". (For +SIP v4.) + + +2003/03/21 00:20:19 phil +Reverted the "fix" for libqassistantclient on HP-UX, and wait to see if anybody +complains. +pyuic now includes the PyQt version number in the generated output. +Fixed QPixmap handling bug in pyuic. + + +2003/03/16 16:24:24 phil +Tracked latest QScintilla changes. +Fixed an internal build problem with the documentation. + + +2003/03/15 23:42:55 phil +Tracked the latest QScintilla changes. +Brought the documentation up to date. + + +2003/03/14 19:49:44 phil +Added the missing %ConvertToSubClass code for the qtext module. + + +2003/03/13 12:59:44 phil +Tracked the latest QScintilla changes. + + +2003/03/09 18:37:13 phil +Tracked the latest QScintilla changes. + + +2003/03/06 10:35:32 phil +Tracked latest QScintilla changes. +Fixes for the mdi.py example from Ken Godee. +Further improvements to the build system's parsing of the Python version +number. +Fixes to the Qt class and pyuic to deal with the use of the internal +WState_Polished. + + +2003/03/03 18:03:41 phil +Tracked the latest QScintilla changes. + + +2003/02/27 16:21:33 phil +Updates for Qt v3.2.1. +Build system changes for alpha and beta versions of Python. + + +2003/02/26 23:40:22 phil +Tracked latest QScintilla changes. + + +2003/02/26 19:31:26 phil +Tracked latest QScintilla changes. +Fixed QListBox.eventFilter(). +Added the qtui module. +Added /Factory/ to everywhere it seems to be needed. +Fixed Python 1.5.2 problems in the build system. +Updated the menu.py example for Qt3 (thanks to Selim Tuvi). +Fixed a bug in pyuic3 related to pixmaps in QListViewItems. +Fixed a bug in the canvas.py example. +PYQT_VERSION is now the version encoded as a hexadecimal value. +Added PYQT_VERSION_STR as the ASCII version (unless it is a snapshot). + + +2003/01/25 15:39:58 phil +Fixed bug in QPointArray.putPoints(). +The sub-class convertors are now declared as static as SIP now puts them in the +main module code. +Changed the way that the QAssistantClient library is linked in to work around +problems linking static and shared libraries under HP-UX. +Fixed QSpinBox.eventFilter(). + + +2003/01/20 10:24:19 phil +Applied Lars Heete's patch for QString for when Python is built with wide +Unicode support. +Tracked the latest QScintilla changes. + + +2003/01/14 09:55:52 phil +Added the version number to the %Module directives for SIP v4. + + +2003/01/11 15:15:49 phil +pyuic3 will look in the directory containing the .ui file for any .ui.h file. + + +2003/01/06 09:35:29 phil +pyuic3 now properly extracts embedded slot code that takes arguments. +Improved the layout of the pyuic3 generated code slightly. + + +2003/01/04 19:45:03 phil +Updated the copyright notices for 2003. +SLOT(), SIGNAL(), PYSIGNAL(), QT_TR_NOOP() and QT_TRANSLATE_NOOP() are now +implemented as wrapped functions. +PYQT_BUILD is now a string. + + +2003/01/02 16:00:47 phil +Fixed a bug in the build process for sip v3. + + +2002/12/28 17:34:17 phil +Changed the build system to cope with the changes that will be needed for +SIP v4. + + +2002/12/25 10:48:22 phil +Added the checklists.py and drawlines.py examples from Oleksandr Yakovlyev. +Added support for PEP 263 in the code generated by pyuic3. +Tracked latest QScintilla changes. +Implemented the QTextStream << QMainWindow and QTextStream >> QMainWindow +operators. + + +2002/12/20 18:51:37 phil +Added the biff.py example from Oleksandr Yakovlyev. + + +2002/12/20 18:46:10 phil +QString.startsWith() was introduced in Qt v2.2.0 and not Qt v3.0.0. +Added the updated buttongroups.py example from Oleksandr Yakovlyev. + + +2002/12/17 15:33:12 phil +pyuic3 will now extract Python code (tagged with "Python:") from the comments +in a .ui file and copy it to the generated output. + + +2002/12/17 13:20:37 phil +Tracked the latest QScintilla changes, including the new QextScintillaPrinter +class. + + +2002/12/13 18:27:26 phil +Change the build system to ensure that SIP .h files in the location specified +by the -s flag are used in preference to any others in the standard Python +location. +Added the Qtopia QCopEnvelope class. + + +2002/12/11 13:50:58 phil +Ensure that generated Makefiles have a later timestamp than the project file. +Released as v3.5. + + +2002/12/10 23:12:00 phil +Build change where FORCE wasn't being handled properly now that it is version +dependent. +Brought the NEWS file up to date. + + +2002/12/10 14:21:09 phil +Changes related to Qt v3.1.1. +Made Qtopia v1.5.0 the baseline version. +Added the AppLnk, AppLnkSet, Config, DateFormat, DocLnk, DocLnkSet, +FileManager, FileSelector, FileSelectorItem, FontDatabase, Global, MenuButton, +QDawg, QList, QList and Resource Qtopia classes. +Added QArray for Qt 1.x and Qt 2.x. + + +2002/12/09 10:40:54 phil +Minor changes for building under Qt/E. + + +2002/12/08 17:56:27 phil +Worked around the Qt Windows bug in QSemaphore += and -= so that the +semaphore.py example now works properly with affected versions of Qt. + + +2002/12/05 17:28:24 phil +Added the script to create the test database for the SQL examples for +PostgreSQL (thanks to Kenneth Godee). +pyuic3 and pylupdate3 changes so that they compile against the Qt Professional +Edition. +Brought the documentation up to date. +Build system change for Qt v3.0.x and FORCE in Makefiles. + + +2002/11/29 10:59:32 phil +Fixed bugs in pyuic3 related to menus and embedded images. +Implemented QMenuItem.setText(), even though it is an internal class, because +it is used in code generated by pyuic3. + + +2002/11/26 12:50:45 phil +eric is now no longer part of the distribution. +Tracked the latest QScintilla changes. +Removed the automatic test for -fno-exceptions and added the -f flag to the +build system so that it can be explicitly set. +Fixed a pyuic3 indentation bug. + + +2002/11/22 22:43:29 phil +Tracked the latest QScintilla changes. + + +2002/11/22 10:15:46 phil +Fixed a couple of bugs in pyuic3's handling of embedded images. + + +2002/11/21 18:57:34 phil +Tracked the latest QScintilla changes. + + +2002/11/18 19:36:53 phil +The missing Windows QEventLoop methods should be added to Qt v3.1.1. +Fixed generation of QString::null in pyuic3. +Tracked latest QScintilla changes. + + +2002/11/14 22:44:42 phil +Fixed problems compiling against Qt v3.0.x introduced with the support for Qt +v3.1.0. + + +2002/11/14 22:32:14 phil +Minor build changes for Windows. +Removed the QEventLoop methods that seem to be missing under Windows. +QGLColormap was actually introduced in Qt v3.0 rather than Qt v3.1. + + +2002/11/13 20:23:43 phil +Tracked the latest QScintilla changes. + + +2002/11/11 11:59:24 phil +Added the missing QDockWindow.drawFrame() and QGLWidget.reparent() methods. +The build system will now recognise Qt v3.1.0. +Added the QAssistantClient, QEventLoop, QGLColormap, QIconFactory, +QIMComposeEvent, QMutexLocker and QSyntaxHighlighter Qt 3.1.0 classes. +QListView.sort() is now virtual for Qt3. +Fixed a bug in the widgets.py example for both Qt2 and Qt3. +Updated pyuic from Qt 3.1.0. +Added the qCompress and qUncompress Qt 3.1.0 functions. + + +2002/11/06 23:56:57 phil +Fixed QWidgetStack.addWidget(). + + +2002/11/05 15:08:21 phil +Addition of new licenses to the internal build system. + + +2002/11/03 20:15:36 phil +Tracked the latest version of QScintilla, including updating to Scintilla +v1.49. + + +2002/10/25 19:00:47 phil +Updated the canvas.py example. +Tracked the latest QScintilla changes. + + +2002/10/24 08:55:46 phil +Tracked the latest QScintilla changes. + + +2002/10/22 21:28:20 phil +Tracked the latest QScintilla changes. + + +2002/10/21 21:25:52 phil +Tracked the latest QScintilla changes. + + +2002/10/20 22:28:46 phil +Tracked the latest changes to QScintilla. +Added the missing QMainWindow.lineUpDockWindows(). + + +2002/10/19 18:43:13 phil +Tracked the latest changes to QScintilla. + + +2002/10/18 17:30:24 phil +More build system changes to fix directory names containing spaces. +Added the QextScintillaLexerCPP, QextScintillaLexerCSharp, +QextScintillaLexerIDL, QextScintillaLexerJava and QextScintillaLexerJavaScript +classes. +Added support for Qt v3.0.6. + + +2002/10/12 23:45:52 phil +Tracked the latest QScintilla changes. +QStringList.__getitem__() now handles slices and negative indices properly. + + +2002/10/11 14:11:53 phil +Fixed the build system where the Python directory path contains spaces. +Another go at fixing the internal build system so that it generates .sip files +for the GPL version that support both X11 and Qt/E. +Updated the QScintilla bindings. + + +2002/10/06 21:21:05 phil +Fixed a silly internal build system bug preventing the qwindowdefs_qws.sip from +being included in the GPL version. + + +2002/10/06 16:04:31 phil +Tracked the latest changes to QextScintilla including the addition of +QextScintillaLexer and QextScintillaLexerPython. + + +2002/10/05 15:03:01 phil +Fixed the internal build system to make sure Qt/Embedded support isn't stripped +out of the GPL version. + + +2002/10/05 13:36:58 phil +Changed the internal build system so that internal development versions are +marked as such. +The user build system now handles conflicting licenses. +pyuic and pylupdate should now build using the professional edition of Qt3. +Added support for margins and markers to QextScintilla. + + +2002/10/03 10:42:28 phil +Synchronised to the latest QScintilla snapshot. + + +2002/10/01 17:38:18 phil +Fixed the i18n example script. +Changed the qtext module build for QScintilla under Windows. + + +2002/09/30 15:32:53 phil +Added the QextScintillaBase.SendScintilla() overload. + + +2002/09/28 08:57:26 phil +Further separated out the Windows .sip files. +Added QextScintillaBase.Colourise(). +Fixed the problem with QTextEdit.find(). + + +2002/09/22 00:39:05 phil +Added eric's missing ViewManager.py file to CVS. + + +2002/09/22 00:37:14 phil +Fixed the internal build system to copy eric's pixmaps directory properly. + + +2002/09/21 17:58:08 phil +Updated eric to v2.1.4 (plus a later patch). +The internal build system now strips down the .sip files for the non-commercial +version. + + +2002/09/18 08:36:18 phil +Added the qtext module containing support for QScintilla. + + +2002/09/13 07:20:57 phil +Fixed QFontDatabase.families() for Qt3. + + +2002/09/10 12:55:34 phil +Minor documentation changes. +Released as v3.4. + + +2002/09/08 21:38:49 phil +Added the missing lib/LICENSE.nc.short. + + +2002/09/08 21:37:30 phil +Added the wtypes.h file to the definitions of MSG and POINT. + + +2002/09/08 12:20:10 phil +The user now has to explicitly accept any non-GPL license. + + +2002/09/07 20:50:13 phil +Added QApplication.winEventFilter(), QWidget.winEvent(), MSG and POINT under +Windows. + + +2002/09/06 17:48:11 phil +Added the new licenses and changed the internal build process to support them. +Updated the NEWS file. + + +2002/09/02 12:05:21 phil +Added a comment to the Signal/Slot documentation about slot reference counts. +Added the mdi.py example from Sadi Kose. +Added the progress.py example from Hans-Peter Jansen. +More license related hooks. + + +2002/08/27 19:09:22 phil +Added the canvas example from Sadi Kose. +Split qwindowdefs.sip into generic and platform specific variants. +Changed the internal build system to support different platforms. +Added a delay to the build system before running make to avoid potential +timestamp problems. + + +2002/08/17 00:48:22 phil +Added Detlev's i18n example. +Added the latest version of eric from Detlev. +Added Fredrik Juhlin's patch to the build system to support debug builds. + + +2002/08/12 14:06:56 phil +Added helpviewer as a standalone application. + + +2002/08/11 20:41:33 phil +Added QT_TR_NOOP() and QT_TRANSLATE_NOOP(). +Added the pylupdate program from Detlev. + + +2002/08/10 20:01:47 phil +Fixed problems with QObject.tr() and QObject.trUtf8(). +Brought the NEWS file up to date. + + +2002/08/06 19:45:26 phil +Build system fixes for Python 1.5.2. + + +2002/08/05 18:02:08 phil +More eric changes from Detelev. + + +2002/07/29 20:54:56 phil +Another eric update from Detlev, including the help browser. + + +2002/07/29 14:16:11 phil +Added QTextEdit.WrapPolicy.AtWhiteSpace as it isn't clear if this is deprecated +or not. (The header file says one thing, the documentation says the opposite.) + + +2002/07/26 13:54:48 phil +Fix a problem with the build system if OpenGL wasn't installed. + + +2002/07/22 21:40:15 phil +Added @BL_INCLUDEPATH@ to the project files for pyuic2 and pyuic3. +Eric's .py files are now compiled by the build system. + + +2002/07/21 23:14:03 phil +Added Detlev's latest patches for eric, including the new qtunittest. Updated +the documentation and build system accordingly. + + +2002/07/20 18:30:07 phil +Added "opengl" to the qtgl project file template. +Changed the build system so that it uses "opengl" when necessary. + + +2002/07/12 13:04:44 phil +Fixed a problem detecting the Qt version in the build system. +Released as 3.3.2. + + +2002/07/12 10:20:20 phil +More internal build system changes. + + +2002/07/11 23:09:40 phil +Internal build system changes. + + +2002/07/11 12:07:40 phil +Added missing /TransferThis/ to all relevant QListBoxText and QListBoxPixmap +ctors. + + +2002/07/09 22:07:10 phil +Added support for Qt 3.0.5. +Released as 3.3.1. + + +2002/07/07 19:20:54 phil +More eric patches from Detlev. +Windows fixes for the build system. +Released as 3.3. + + +2002/07/06 13:35:41 phil +More eric patches from Detlev. +Updated SQL examples from Hans-Peter. +Fixed a bug in pyuic3 when extracting Python slot code when the slot had an +argument. + + +2002/07/05 21:56:20 phil +Backed out the change in the order of attempts to convert Python objects to +QStrings so it is now Unicode objects before string objects. + + +2002/07/05 17:59:16 phil +Fixed a few indentation issues with the dirview examples. +Fixed the same bug in every mapped type based on the QValueList template. + + +2002/07/05 08:54:46 phil +More eric patches from Detlev. +QSqlRecordInfo is now implemented as a Python list of QSqlFieldInfo instances. +The build system now ignores qmake if present when building for Qt 1.x and 2.x. + + +2002/07/04 10:08:24 phil +Still another attempt at a portable features generator. + + +2002/07/04 10:02:04 phil +Another attempt to make the C++ program that generates the feature flags more +portable. + + +2002/07/03 17:43:43 phil +Build system changes for Windows. +Released as 3.3rc3. + + +2002/07/02 22:13:50 phil +Fix a Python warning in build.py. + + +2002/07/02 18:34:32 phil +Changes to the build system for the qtpe module. + + +2002/07/02 14:55:45 phil +More eric patches from Detlev. +Added the missing QString.compare() and QString.localeAwareCompare() overloads. +Changed the build system in line with the way SIP now handles features. + + +2002/06/30 16:24:16 phil +Minor changes to build system messages. +Removed support for the -r flag in the build system as tmake handles -fno-rtti. +Added the -e flag to the build system to explicitly specify the location of the +SIP header files (usually used when cross compiling). +More eric patches from Detlev. +Fixed QDataBrowser.setSqlCursor(). + + +2002/06/29 18:57:01 phil +The build system now determines the Qt version by parsing qglobal.h rather than +running a program (which is no good when cross compiling). +The sipQtFeatures.h file is only generated by the build system is it doesn't +already exist (again to help cross compiling). +Updated the SQL examples. +Fixed an SQL related bug in pyuic3. +Added %MemberCode to QDataTable.setSqlCursor() to transfer ownership of the +cursor if the autoDelete flag is set. + + +2002/06/29 13:09:51 phil +The build system now installs eric for Qt3. +More eric patches from Detlev. + + +2002/06/28 22:45:22 phil +More build.py fixes. +Changed the build system so that project files are restored to their original +contents. +Added the -c flag to the build system to concatenate a module's C++ files prior +to compilation. Compiling PyQt on my 750MHz PIII now takes 10 minutes. (Thanks +to Jim Bublitz and Ricardo Cardenes.) + + +2002/06/28 12:45:25 phil +Added the missing qtpemod.sip. +Added the missing /TransferThis/ to the obsolete QToolBar ctor. +Added the missing %MemberCode for QStyle.getButtonShift(), +QStyle.scrollBarMetrics() and Qstyle.tabbarMetrics(). +More eric patches from Detlev Offenbach. +Added Hans-Peter Jansen's SQL examples. +Fixed a bug in the build system where the path to tmake was explicitly +specified. +Added the -r flag to the build system to explicitly enable -fno-rtti. +Released as 3.3rc2. + + +2002/06/23 19:44:58 phil +Added support for the evaluation version of Qt to the build system. +Applied more eric patches from Detlev Offenbach. +SQL related fixes for pyuic for Qt3. + + +2002/06/22 14:29:05 phil +Applied a couple of eric patches from Detlev Offenbach. +Released as 3.3rc1. + + +2002/06/22 00:53:57 phil +The documentation is now up to date. +Added notes about the limitations on custom editor widgets to the +QSqlPropertyMap documentation. +The default installation directory for pyuic under UNIX/Linux is now +/usr/local/bin rather than where the Python executable is installed. +Fixed a bug with the build system under Windows. +Fixed a problem with QVariant where a numeric value would be recognised as a +QKeySequence. +Added the -i flag to build.py to allow the directory containing the Qt header +files to be explicitly specified. + + +2002/06/20 21:33:34 phil +Fixed bug in QDataTable that stopped in working properly. + + +2002/06/20 18:52:31 phil +Added the qmag.py example script from Hans-Peter Jansen. +Added Christian Bird's notes about his pyuic patch. +Changes to the build system to support Qt/Embedded. +Changes to the build system to handle the lack of site-packages under Windows +before Python v2.2. + + +2002/06/19 17:43:26 phil +Minor changes to eric so that it seems to work under Qt3. + + +2002/06/19 17:29:06 phil +Applied Christian Bird's patch to pyuic for Qt3 to extract slot code written in +Python. + + +2002/06/19 17:14:00 phil +Added the missing qtsqlmod.sip. + + +2002/06/19 07:56:07 phil +Added the missing /Transfer/ from QCanvasPixmapArray.setImage(), +QDataTable.installEditorFactory(), QDataTable.installPropertyMap() and +QSqlForm.installPropertyMap(). +Added Hans-Peter Jansen's bigtable.py, lineedits.py, smalltable.py and +tablestatistics.py example scripts. +Added the missing qxmlmod.sip. + + +2002/06/16 23:15:17 phil +Minor build system changes as a result of moving SIP to its new build system. + + +2002/06/16 15:17:01 phil +Changes to the new build system so that it works under Windows. +Removed all vestiges of the old build system. + + +2002/06/14 16:35:41 phil +The new build process now works with Python v1.5.x. + + +2002/06/14 08:46:36 phil +Changes needed to the build system to support tmake. +The compiled Python scripts will now be installed properly if qmake is used. + + +2002/06/13 18:05:24 phil +More minor build changes related to process for generating automatic snapshots. + + +2002/06/13 17:48:28 phil +Minor build changes. + + +2002/06/13 16:16:19 phil +Added the missing QFontMetrics.boundingRect() variant and QFontMetrics.size(). +Removed the incorrect /TransferBack/ from QTabBar.removeTab(). +The new build system has been tested on Python v2.2/qmake/Linux. + + +2002/06/04 23:33:33 phil +Remove the last of the BlackAdder related files. +Fixed the .spec file. +More updates related to the new build system. + + +2002/06/04 23:26:00 phil +Lots of tidying up of redundant files for the new build system. +Set the release number to v3.2.4 to align with the last official release. + + +2002/06/04 23:04:40 phil +Initial import of PyQt to the Riverbank Computing repository. + + +2002/06/01 11:08:36 phil +Correction to signature of QDir.rename(). +Added README.SunOS. +QValueList is now fully implemented as a mapping to a Python list of +QPixmap instances. +Added the missing QDoubleValidator.setBottom(), QDoubleValidator.setDecimals(), +QDoubleValidator.setTop, QIntValidator.setBottom() and QIntValidator.setTop(). + + +2002/05/21 14:40:56 phil +Added the missing /Transfer/ to QClipboard.setData(). +Fixed a pyuic3 bug that generates an extra ')' when using the -subimpl flag. + + +2002/05/17 19:04:33 phil +Minor documentation changes. +Released as v3.2.4. + + +2002/05/16 15:28:17 phil +Removed MacOS X support from the build process - until SIP v4. + + +2002/05/15 17:11:34 phil +Modules are now created as simple .so files, ie. without any release number. +The obsolete QMainWindow.setToolBarsMovable() was replaced with +QMainWindow.setDockWindowsMovable(). + + +2002/05/15 11:31:23 phil +Fixed a bug in QInputDialog.getText() for Qt3. + + +2002/05/11 17:38:20 phil +Documentation changes for the latest release. +Released as v3.2.2. + + +2002/05/09 00:19:11 phil +Fixed QPrinter ctor for Qt3. + + +2002/05/07 21:17:32 phil +Added information about "--without-x" to the MacOS installation notes. +Put the -module flag back in for MacOS. +Fixed a bug in pyuic3 where QPixmaps needed to be explicitly converted to +QIconSets. + + +2002/05/05 13:42:46 phil +Added a version that supports the MacOS evaluation version to the list of +"common" source packages. +Released as v3.2.1. + + +2002/05/03 22:35:24 phil +Added INSTALL.MacX. +Removed -module from LDFLAGS as it seemed to make things worse on MacOS. +Released as v3.2. + + +2002/05/01 22:49:37 phil +Updated the documentation regarding support for void *. + + +2002/04/30 07:52:35 phil +configure will now search fro Qt v3.0.4. +Changes required for Qt v3.0.4. +Another minor bug fix related to X11 support and Qt/E. + + +2002/04/29 18:10:04 phil +Added README.Linux describing the broken Qt packages in Mandrake and Debian. + + +2002/04/29 10:17:47 phil +configure doesn't search for X11 for Qt/E. +Added the QPEMenuBar and QPEToolBar classes. + + +2002/04/27 14:19:22 phil +Removed the bug description at the top of the semaphore.py example now that it +is fixed. +Changed %ConvertToSubClassCode for QObject to conform to the latest SIP. +Replaced calls to sipMapCppToSelf() with sipMapCppToSelfSubClass() where +appropriate. + + +2002/04/22 22:56:31 phil +Changed the Windows installation instructions to put things in site-packages. +Fixed the missing QT_THREAD_SUPPORT when building sip_helper on Windows. +Added -module to all LDFLAGS. + + +2002/04/21 19:08:25 phil +QCustomEvent now expects a PyObject * as its data. + + +2002/04/20 22:43:13 phil +Convert instances of the internal class QTableHeader to QHeader. +Fixed a bug in pyuic for Qt3 relating to the format of slot signatures. + + +2002/04/20 16:02:00 phil +Added missing /Transfer/ to QTable.setCellWidget() and QTable.setItem(). + + +2002/04/18 23:17:07 phil +Disabled QFont.dirty(), QClipboard.ownsClipboard(), QClipboard.ownsSelection() +and qAppName() for MacOS. + + +2002/04/18 12:10:42 phil +Updated the NEWS file regarding MacOS X support. +qt.py now defines PYQT_VERSION as the PyQt release as a string. +configure no longer fails if X11 couldn't be found (for MacOS X). + + +2002/04/17 19:10:15 phil +Added support for MacOS X (untested). + + +2002/04/17 09:00:35 phil +Added the missing /TransferThis/ options from all QCanvasItem ctors. +Fixed QCanvasItem.setCanvas() to handle acquiring and losing a parent canvas. + + +2002/04/16 14:17:44 phil +Removed all the /ReleaseLock/ options. +Added Py_BEGIN_ALLOW_THREADS, Py_END_ALLOW_THREADS, SIP_BLOCK_THREADS and +SIP_UNBLOCK_THREADS to all handwritten code. +Thread support is only enabled if it is also enabled in Python. +Added /CreatesThread/ and /NewThread/ to QThread. + + +2002/04/14 18:07:56 phil +Reinstated PyQtDisownTopLevelWidgets() because it solves the problem where we +can't guarantee that the order in which qApp and the top level widgets will be +destroyed. +Changed -MT to -MD for Windows (thanks to Paul Felix). + + +2002/04/06 17:38:53 phil +Added the %ConvertToSubClassCode for QObject and all its sub-classes. +Added the missing QToolTip.setEnabled() and QToolTip.enabled() methods. +Fixed the build process so that the naming of the Qtopia package is more +consistent with other packages. + + +2002/03/30 00:50:10 phil +Make sure the ChangeLog is distributed and that autom4te.cache isn't. +Merged the different versions of QEvent.Type. +Fixed a bug in QStringList.__getitem__(). + + +2002/03/22 10:52:29 phil +Released as v3.1. +Slight change to the build process so make sure that Windows Makefiles always +use the very latest Qt library. + + +2002/03/22 10:40:21 phil +configure will now use qt-mt in preference to qt if it finds both. +Removed build.py from the distribution until it is finished. +Added /Transfer/ to QThread.postEvent(). +Added /ReleaseLock/ to QThread.postEvent(), which might not be required but +shouldn't do any harm. + + +2002/03/20 15:58:33 phil +configure now handles Qt v3.0.3. +Integration of uic changes in Qt v3.0.3. +Applied Rene Hogendoorn's latest patch for slot signatures for pyuic3. + + +2002/03/19 00:19:32 phil +Removed the rebuild-src and rebuild-doc targets as they are no longer +maintained. +Documentation changes prior to the release of v3.1. + + +2002/03/17 17:37:38 phil +Removed the import of GLUT from the gears.py example. + + +2002/03/12 19:31:13 phil +Added the missing build instructions for the qtgl module in INSTALL.win32. +Upgraded to autoconf-2.53 and automake-1.6. +Fixed a couple of pyuic3 bugs related to SQL forms (thanks to Rene Hogendoom). + + +2002/03/09 18:15:48 phil +Various build changes for Windows. +Fixed a bug in QDomDocument.setContent(). +Fixed the qtxml module so that it doesn't get a DLL load failure on Windows. + + +2002/03/04 17:18:31 phil +A couple of changes to eric to reflect the new module structure. +Fixed QThread for Qt v2. +Fixed QTable.setNumRows() in pyuic for Qt v3. + + +2002/02/25 16:26:19 phil +Some enum definitions have been rationalised now that SIP supports individual +values having different versions. + + +2002/02/24 14:59:43 phil +Went through everything adding /ReleaseLock/ to methods that might block. + + +2002/02/24 01:36:06 phil +configure now searches for Qt v3.0.2. +Added QLineEdit.setPasswordChar() and QLineEdit.passwordChar() for Qt v3.0.2 +but left them commented out at they are marked as incompatible add ons. +Updated pyuic3 from the changes in Qt v3.0.2. +Added thread support, ie. QApplication.lock(), QApplication.unlock(), +QApplication.locked(), QApplication.tryLock() and the QMutex, QSemaphore, +QThread and QWaitCondition classes. +Re-did all of the special methods following the SIP changes. + + +2002/02/15 14:45:33 phil +Added the missing QPixmap.grabWidget(). + + +2002/02/14 14:18:35 phil +Fixed bug in pyuic fro Qt v3 related to "black" and "white". + + +2002/02/08 15:51:02 phil +Updated the documentation for the 3.1 pre-releases. +The tr() methods now honour QT_NO_TRANSLATION. + + +2002/02/08 11:54:11 phil +More work on the new build system. +Fixed a bug in eric for PyQt v3. +Fixed a couple of QTable related bugs in pyuic for Qt v3. +Fixed a QToolBar related bug in pyuic for Qt v3. +Fixed bugs with QSqlCursor. + + +2002/01/28 13:42:24 phil +Fixed bug relating to escaping double quotes in pyuic for Qt v2.x. + + +2002/01/28 11:09:08 phil +Removed the Zaurus README. +Changes to configure now that the sip library is a Python module. +Added the start of an alternative build system driven by Python and using qmake +or tmake. + + +2002/01/09 11:47:32 phil +Put version control into the qtpe module and changed the build system so that +it uses a version compatible with both Qtopia and the Zaurus v1.02 ROMs. +Updated README.Zaurus. +Removed the qtpe module from the documentation until SIP is changed to be +tolerant of missing version information. + + +2002/01/08 20:17:11 phil +Removed PyQtDisownTopLevelWidgets() from the QApplication and QPEApplication +dtors because the Qt widget mapper doesn't delete the widgets in the map. + + +2002/01/05 13:16:45 phil +Added the warning about using flash devices as swap on the Zaurus. +Added the missing QActionGroup.add() and QActionGroup.addSeparator() methods. +Implemented enough additional features for the Large configuration of Qt/E. + + +2002/01/04 23:32:42 phil +Added the dragdrop example from Issac Trotts. + + +2002/01/04 15:41:11 phil +Added the Zaurus information. +Minor updates to READMEs etc. + + +2002/01/03 00:41:26 phil +The build script now copes when tmake and/or sgmltools is missing. +Added support to the build system for QPE. +Added the qtpe module. +Added the QPEApplication class (not yet working). +Changed the build system so that there is only one instance of the helper code +and it is more a part of the build system rather than being so closely tied in +which SIP. +configure now allows the directory where the Python modules are to be installed +to be specified. + + +2001/12/27 12:28:07 phil +Fixed all Qt3 writeBlock() methods. +Changes required by the latest SIP. +Support for Qt/Embedded on the Sharp Zaurus. +Removed the QDragResponseEvent internal class. +Added the missing QImageTextKeyLang class. +Added the missing QImage.dotsPerMeterX(), QImage.dotsPerMeterY(), +QImage.setDotsPerMeterX(), QImage.setDotsPerMeterY(), QImage.offset(), +QImage.setOffset(), QImage.textList(), QImage.textLanguages(), +QImage.textKeys(), QImage.text() and QImage.setText() methods. +Added the QValueList mapped type. + + +2001/12/09 11:38:47 phil +configure now looks for Qt v3.0.1. +The build system now handles Qt v3.0.1. +.sip file changes needed by Qt v3.0.1. +Updated pyuic3 from Qt v3.0.1. + + +2001/12/06 11:03:29 phil +Fixed more pyuic3 bugs. +Fixed the ownership bug in all QCheckListItem ctors. + + +2001/12/04 10:40:56 phil +Fixed bugs in QSocket.readLine() and QSocket.readBlock(). + + +2001/12/01 18:37:31 phil +Fixed QWidget.reparent(). +Removed the QDateTimeEditBase internal class. +Bug fixes for pyuic3. +configure now allows the location of zlib to be specified. +Used AC_HELP_STRING throughout acinclude.m4. + + +2001/11/25 18:27:27 phil +Minor fixes for pyuic3. + + +2001/11/17 14:48:19 phil +Added the missing qInitNetworkProtocols() function to the qtnetwork module. +Added the missing QRect.contains() variant. +Changed QByteArray, QCString and QString %ConvertToTypeCode to convert None +objects to empty instances. +Changed QFileInfoList, QKeySequence, QList, QMemArray, +QObjectList, QPair, QPtrList, +QPtrList, QStrList, QValueList, QValueList and +QWidgetList %ConvertToTypeCode to handle None objects. +Fixes to the .spec file. +Fixed ownership issues with QWidget.reparent(). + + +2001/11/11 19:01:27 phil +configure will search for Qt v2.3.2. +Fixed bugs in pyuic for Qt3 (thanks to Andreas Gerstlauer). +Fixed bug in Windows detection (thanks to Andreas Gerstlauer). +Fixed the Qt3 QSizePolicy ctor. + + +2001/10/28 10:33:03 phil +Generated with the latest SIP. + + +2001/10/26 23:33:45 phil +Fixed the ChangeLog. + + +2001/10/26 23:32:23 phil +Changed the way Python special methods are defined to conform to the latest +SIP. +Added __unicode__ to QString for Python v2.2. +Fixed a couple of bugs in pyuic for Qt3. +Changed QString.__str__() to do the "right thing". + + +2001/10/21 13:51:26 phil +Fixed the new QImage ctor. +Fixed the long standing problem converting a QString to Python using unicode(). +Fixed bugs with QFile.readBlock() and QFile.readLine(). + + +2001/10/19 23:34:04 phil +Applied Alan Eldridge's patch for the .spec file. +Made the second parameter to QObject.tr() and QObject.trUtf8() optional. +Added the missing QImage ctor. +Fixed pyuic for Qt3. + + +2001/10/13 11:20:53 phil +Fixed problem with QMenuData.insertItem() when the QKeySequence argument was +omitted. +Ported the remaining examples. + + +2001/10/12 22:46:59 phil +Minor fixes to get the SQL module to build. +Created a separate examples directory for Qt3. +Changes required for the final release of Qt v3.0.0. + + +2001/10/12 10:19:27 phil +Added the qtsql module. +Added the QDataBrowser, QDataTable, QDataView, QEditorFactory, QGridView, +QLibrary, QObjectCleanupHandler, QProcess, QSql, QSqlCursor, QSqlDatabase, +QSqlDriver, QSqlEditorFactory, QSqlError, QSqlField, QSqlFieldInfo, QSqlForm, +QSqlIndex, QSqlPropertyMap, QSqlQuery, QSqlRecord, QSqlRecordInfo, QSqlResult, +QStyleFactory and QWindowsMime Qt3 classes. +Implemented QPtrList. +Renamed QLineEdit.del() to QLineEdit.delChar(). +Renamed QMultiLineEdit.deleteChar() to QMultiLineEdit.delChar(). +Fixed QLineEdit super class for Qt3. + + +2001/10/07 18:47:03 phil +Updated the .spec file with the new modules. +Fixed a bug in the build process. + + +2001/10/06 18:20:00 phil +Fixed QLayoutIterator.next(). +configure now handles multi-threaded Qt. +Moved Canvas module classes to the new qtcanvas module. +Moved Network module classes to the new qtnetwork module. +Moved Table module classes to the new qttable module. +Moved XML module classes to the new qtxml module. +Added the QSound class. + + +2001/10/04 21:33:48 phil +Added the Qt3 classes QDateEdit, QDateTimeEdit, QTimeEdit, QErrorMessage, +QPixmapCache and QSettings. +Added the Qt2 class QDns. +Added QCustomMenuEvent, QIMEvent and QTabletEvent to the list of new Qt3 +classes in the documentation. +Restructure the top-level SIP files so that the documentation is completely +separate. + + +2001/09/30 10:48:01 phil +Implemented QPair. +Bug fixing of revised hand-written code. +Changes to get pyuic to compile against Qt3. + + +2001/09/28 23:13:01 phil +Upgraded to Qt v3.0.0Beta6. +Changes required to handwritten code by the new sipParseArgs(). +Added the missing QObject.connect() variant. +Renamed QDate.isValidDate() to QDate.isValid(). +Renamed QTime.isValidTime() to QTime.isValid(). +Renamed QFile.fileExists() to QFile.exists(). +Renamed QFile.removeFile() to QFile.remove(). + + +2001/09/23 20:04:21 phil +Re-added QInterlaceStyle. +Changes required by Qt v3.0.0 Beta5. +Implemented QMenuItem as an opaque class. +Added the missing QSGIStyle class. +Added the missing QMenuData.findItem(), QMotifPlusStyle.drawMenuBarItem(), +QMotifPlusStyle.drawPopupMenuItem(), QMotifStyle.drawPopupMenuItem(), +QMotifStyle.extraPopupMenuItemWidth(), QMotifStyle.popupMenuItemHeight(), +QPlatinumStyle.drawPopupMenuItem(), QPlatinumStyle.extraPopupMenuItemWidth(), +QPlatinumStyle.popupMenuItemHeight(), QPopupMenu.drawItem(), +QPopupMenu.itemHeight(), QStyle.drawPopupMenuItem(), QStyle.drawMenuBarItem(), +QStyle.extraPopupMenuItemWidth(), QStyle.popupMenuItemHeight(), +QWindowsStyle.drawMenuBarItem(), QWindowsStyle.extraPopupMenuItemWidth(), +QWindowsStyle.popupMenuItemHeight(). +Added the QStyleOption Qt3 class. +Classes converted to Qt3: QGL et al, QCDEStyle, QCommonStyle, QMotifPlusStyle, +QMotifStyle, QPlatinumStyle, QStyle, QWindowsStyle. + + +2001/09/21 17:12:07 phil +The following classes were fully converted to Qt3: QFile, QFileDialog, +QFileInfo, QFontDatabase, QFontDialog, QIconView, QIconViewItem, QInputDialog, +QNetworkProtocol, QPaintDeviceMetrics, QPrintDialog, QPrinter, QProgressBar, +QProgressDialog, QRadioButton, QSemiModal, QServerSocket, QSimpleRichText, +QSizeGrip, QSocket, QSpinBox, QTabDialog, QTextBrowser, QTextStream, QUrl, +QUrlOperator, QWhatsThis, QWidgetStack, QWizard, QWorkspace. +Added the missing QFileIconProvider, QFontDialog, QTextBrowser and QWidgetStack +private copy ctors. +Added the missing QFileDialog.done(), QIconView.dropped(), +QIconViewItem.dropped(), QNetworkProtocol.newChildren(), +QPrintDialog.addButton(), QProgressDialog.forceShow(), +QUrlOperator.newChildren() and QUrlOperator.startNextCopy() methods. +Added the missing QIconDrag and QIconDragItem classes. +Implemented QList, QPtrList, +QValueList and QValueList. +Added the missing TransferThis to the QPrintDialog ctor. +Moved the QList<> and QPtrList<> templates to their own files. + + +2001/09/21 00:32:29 phil +Forgot to add the new qmemarray.sip file. + + +2001/09/21 00:31:34 phil +Fully converted the following classes to Qt3: QAction, QActionGroup, +QColorDialog, QDial, QDom et al, QMessageBox, QPopupMenu, QPushButton, +QScrollBar, QScrollView, QSplitter, QStatusBar, QTable, QTableItem, QTabWidget, +QToolButton, QToolTip, QToolTipGroup. +Added the following missing methods: QColorDialog.customColor(), +QColorDialog.customCount(), QColorDialog.getRgba(), +QColorDialog.setCustomColor(), QScrollBar.minValue(), QScrollBar.maxValue(), +QScrollBar.setMinValue(), QScrollBar.setMaxValue(), QScrollBar.lineStep(), +QScrollBar.pageStep(), QScrollBar.setLineStep(), QScrollBar.setPageStep(), +QScrollBar.value(), QScrollBar.setValue(), QToolTip.hide(), +QToolTipGroup.enabled(), QToolTipGroup.setEnabled(). +Added the missing QDir.match() variant. +Removed the handling of QValueList out of QSplitter and made it generic. +Added the following Qt3 classes: QCheckTableItem, QComboItem. +Removed QTabWidget.selected() as it is not part of the official API. + + +2001/09/16 18:12:22 phil +Removed the Transfer flag from the QWidget parameter to QLayout.add(), +QGridLayout.addWidget(), QGridLayout.addMultiCellWidget(), +QBoxLayout.addWidget() and QBoxLayout.insertWidget(). +Fixes to the build process so it works with the latest automake. + + +2001/09/14 16:40:03 phil +Added the missing QLayoutIterator.next() method. + + +2001/09/14 15:17:17 phil +Changes to QObject.tr() and QObject.trUtf8() so that they work as expected with +Qt3. +Put back the separate builds for Qt v2.3.0 and v2.3.1. +Put back QPrinter.PageSize.Custom for Qt v2.3.1. +Added the new /AutoGen/ option where needed. + + +2001/09/09 16:26:16 phil +QGrid, QLCDNumber, QListBox, QListBoxItem, QListBoxPixmap, QListBoxText, +QMenuBar, QMenuData, QRangeControl and QSlider fully converted to Qt3. +A QString or int can now be supplied whenever a QKeySequence is expected. +The missing QListBox.isRubberSelecting(), QMenuBar.activateItemAt(), +QMenuBar.focusInEvent(), QMenuBar.isDefaultUp(), QMenuBar.minimumSize(), +QMenuBar.minimumSizeHint(), QMenuBar.setDefaultUp() methods have been added. + + +2001/09/07 16:15:28 phil +Added the new QKeySequence .sip file and remove the QInterlaceStyle .sip file. + + +2001/09/07 16:13:22 phil +Added the missing QAccel ctor. +Added the missing QHeader.setUpdatesEnabled(), QHeader.showEvent() and +QLineEdit.displayText() methods. +Added the missing QColorDrag class. +Converted all the Qt3 changes to Beta4. +Added the QKeySequence Qt3 class. +Fully converted QComboBox, QDialog, QDragObject, QGridLayout, QHeader, QLayout, +QLineEdit, QUriDrag and QWidgetItem to Qt3. +Removed the QBitArray related methods from QVariant. +Removed the QInterlaceStyle class. +Remove QPrinter.PageSize.Custom so that the v2.3.1 build is the same as v2.3.0. +QObject.className() now works with Python classes. +Upgraded to libtool-1.4.1. + + +2001/09/02 17:13:50 phil +Fully converted the following classes to Qt3: QButton, QButtonGroup, QCanvas et +al, QCheckBox, QCheckListItem, QGroupBox, QLabel, QListView, QListViewItem. +pyuic now generates double quoted strings rather than single quoted strings. +Upgraded to autoconf-2.52 and automake-1.5. + + +2001/08/15 19:18:39 phil +Added the Qt3 classes QRegExpValidator and QTextEdit. +Added the missing QPainter.pos() and QTranslator.messages() methods. +Added all methods that use QDataStream now that it has been implemented. +Removed QTableHeader as it isn't part of the documented API. +Fully converted the QFrame, QHBox, QPainter, QPicture, QPointArray, QRect, +QRegExp, QSessionManager, QStyleSheet, QStyleSheetItem, QTab, QTabBar, +QTextCodec, QTextView, QTranslator, QTranslatorMessage, QVariant, QVBox and +QWMatrix classes to Qt3. + + +2001/08/14 16:10:26 phil +Added the QDesktopWidget, QDockArea and QDockWindow Qt3 widgets. +Fully converted the QApplication, QClipboard, QChar, QColorGroup, QDate, +QDateTime, QFontMetrics, QIconSet, QMainWindow, QMimeSource, +QMimeSourceFactory, QPalette, QString, QTime and QToolBar classes to Qt3. +Added the missing QChar.nbsp, QChar.isLetterOrNumber(), QChar.mirroredChar(), +QImage.inputFormatList(), QImage.outputFormatList(), +QMimeSourceFactory.filePath(), QMimeSourceFactory.addFilePath() and +QPalette.inactive() methods. +Added the missing QString.append() and QString.prepend() variants. +Renamed QTime.IsValidTime() to QTime.isValidTime(). +Made QList a mapped type now that SIP can handle mapped templates. + + +2001/08/10 18:03:56 phil +Final documentation changes for v2.5. + + +2001/08/10 14:54:29 phil +Fixed typo in the Qt3 versioning. + + +2001/08/08 23:28:38 phil +User events get converted to QCustomEvents rather than QEvents. +Finally decided to implement Display * as void *. +QEvent etc., QFont, QFontInfo, QMultiLineEdit and QTableView converted to Qt3. + + +2001/08/07 22:37:16 phil +QWidget is now converted to Qt3. +Added the missing QWidget.customEvent(). +Changed Display to be a class rather than a struct. +Fix a problem with the normal build process caused by the new Qt3 stuff. +Added the temporary qt3.sip-in file. + + +2001/08/07 19:57:06 phil +Fixed a typo in the clean target. +Added Qt3 support for QColor, QCursor, QObject, QPaintDevice, QPixmap and +QSizePolicy. +Added QColor.getHsv(). +Added the Display opaque structure. +Added qt_xdisplay(), qt_xscreen() and qt_xrootwin(). +Added QPaintDevice.x11Display(), QPaintDevice.x11AppDisplay, +QPaintDevice.x11SetAppDpiX() and QPaintDevice.x11SetAppDpiY(). +Added the missing QPixmap.save() variant. + + +2001/08/06 19:57:09 phil +Build changes for the qtgl module under Windows. +The HTML documentation is no longer put into a compressed tar file. +Fixed a minor bug in the widgets.py example. +Changed the configure test for OpenGL support. + + +2001/08/01 22:15:38 phil +More minor build changes. +Fixed QApplication.winVersion(). +Fixed Windows pyuic Makefiles. + + +2001/07/30 22:55:33 phil +Changed the build process so that the current version doesn't have to be the +latest version. +Changed AMTAR to TAR. +Generate Makefiles that support Qt-NC (untested). + + +2001/07/27 22:18:26 phil +The different types that are mapped to Python lists will now return an empty +list (rather than None) when given a NULL pointer. +Fixed a problem detecting -fno-exceptions. +Added QDataStream. +Added the QDom classes. + + +2001/07/21 15:46:35 phil +Used the new %Timeline and %ImportWithTimeline directives. +Added version control to the qtgl module. + + +2001/07/20 23:19:06 phil +Fixed the memory leaks related to sipMapCppToSelf() in hand-written code. +Changed the build system to handle different versions of PyQt for different +versions of Qt. + + +2001/07/17 07:44:09 phil +Changes needed by the latest SIP - Version and %MappedType. +Fixed QScrollView.addChild(). + + +2001/06/29 16:24:55 phil +Minor changes to the BlackAdder DistUtils setup. + + +2001/06/28 23:34:54 phil +Addedpost-hooks to complement the existing pre-hooks. +Added the Pizza example project. + + +2001/06/24 15:12:44 phil +Minor changes to pyuic for BlackAdder. +Moved the BlackAdder specific stuff to its own directory. + + +2001/06/19 15:54:23 phil +Fixed the problems with QLineEdit.event() and QMultiLineEdit.event(). + + +2001/06/18 10:35:45 phil +Re-enabled QInterlaceStype for Qt v2.3.1+. +configure now looks for Qt v2.3.1. +Added QPrinter.PageSize.Custom. +Updates to pyuic from Qt v2.3.1. + + +2001/06/02 17:02:01 phil +Fixed the QTranslatorMessage documentation. + + +2001/05/31 21:01:16 phil +Added the missing QTranslator methods. +Added the QTranslatorMessage class. + + +2001/05/30 21:22:42 phil +Fixed incorrect definition of QTextView.setText(). +Added the /Constraint/ argument everywhere it was needed. +Removed all methods that could never be called because they had different C++ +signatures, but the same Python signatures. + + +2001/05/22 19:36:24 phil +Added the missing QWidget.reparent() variant. +Added the qtgl module. + + +2001/05/14 20:14:36 phil +Removed the QInterlaceStyle class untill Trolltech fix the Windows port. + + +2001/05/13 17:16:43 phil +Added the missing variant of QInputDialog.getText(). + + +2001/05/07 16:50:14 phil +Added fix to pyuic for escaping single quotes properly. + + +2001/04/29 16:21:20 phil +Minor configuration changes. + + +2001/04/22 15:26:48 phil +Added the missing QFileDialog.getExistingDirectory() method. +Upgraded to automake v1.4d. + + +2001/04/19 22:10:42 phil +Final changes for the release of v2.4. + + +2001/04/15 00:38:40 phil +Added missing methods to QMotifStyle. +Added missing enum value to QPalette. +Updated the themes.py example. + + +2001/04/13 13:52:21 phil +Added QCustomEvent. + + +2001/04/08 13:24:53 phil +Added the missing final parameter to QMultiLineEdit.insertAt(). +Updated the documentation ready for v2.4. + + +2001/03/05 23:13:16 phil +Added the new methods and classes implemented in Qt v2.3.0-beta1. +Updated pyuic from Qt v2.3.0-beta1. + + +2001/03/04 16:22:05 phil +Fixed bugs with argument parsing in some handwritten code. Only came to light +with Python 2.1b1. + + +2001/03/01 19:51:38 phil +The generated configure now uses the Python interpreter to find where Python is +installed. + + +2001/02/16 10:53:21 phil +Added a couple of methods missing from QLineEdit. + + +2001/02/04 14:39:56 phil +Configure now checks for Qt v2.2.4 and Python v2.1. +Release as v2.3. + + +2001/01/23 19:23:06 phil +Added the BlackAdder project files. +Various packaging changes for BlackAdder. + + +2001/01/09 11:45:51 phil +Added some missing QSlider methods. +Added some documentation about multiple inheritance. + + +2000/12/24 18:25:52 phil +Fixed a couple of bugs in the examples. +Updated the documentation ready for v2.3. + + +2000/12/19 14:51:01 phil +Added the pre-hooks just before all calls to the Qt event loop. +Changed the QApplication hook to use the new sipCallHook() function. + + +2000/12/13 20:15:55 phil +Really fixed pyuic this time. +pyuic now tries to do something sensible with custom widgets - it assumes they +are in another module and tries to import them. The module name is the header +file name specified in Qt Designer with any extension removed. + + +2000/12/13 18:00:46 phil +Repaired some damage to pyuic caused when integrating the Qt v2.2.3 changes. + + +2000/12/13 10:42:19 phil +Changed the configuration to look for Qt v2.2.3. +Updated pyuic to track changes to uic in Qt v2.2.3. + + +2000/12/12 17:46:14 phil +Added QCustomMenuItem. +Added the missing QMenuData.insertItem methods. +Changed all the handwritten occurences of sipParseArgs() to use the new version +that supports better error reporting. + + +2000/12/11 12:15:48 phil +Added the addressbook.py, buttongroups.py and menu.py examples. +Removed the deprecated behaviour of repr() for QString, QCString and +QByteArray. + + +2000/12/03 17:44:41 phil +Documented that you can't sub-class QCanvasItem. +repr() of QString et al. now does the same as repr() of any other class. + + +2000/12/01 01:31:48 phil +Slight changes to some of the tutorials so that they will run with Python 1.x. +Updated the application.py example. + + +2000/11/30 15:57:54 phil +Modified the tutorial example scripts to match the C++ ones with Qt v2.x. +Removed the old Qt v1.x example scripts. + + +2000/11/29 09:37:56 phil +Added the missing QMessage.setTextFormat() and QMessage.textFormat(). + + +2000/11/24 12:04:04 phil +Added QPushButton.isFlat() and QPushButton.setFlat(). + + +2000/11/12 21:22:02 phil +pyuic fixed to handle QLabel buddies properly. + + +2000/11/11 14:31:07 phil +Added documentation to QListView and QListViewItem about how to delete child +QListViewItems. +Updated pyuic from Qt v2.2.2 uic. +Updated configure to look for Qt v2.2.2. + + +2000/11/09 10:16:24 phil +Fixed compilation problem with QString with Qt v1.x. + + +2000/11/08 12:43:56 phil +A couple of minor fixes to pyuic. +A couple of more major fixes to the debugger so that it will properly go into +other modules of the same application. + + +2000/11/05 20:59:51 phil +Implemented __str__ for QByteArray, QCString and QString. Changed __repr__ to +not raise an exception on null instances. +Added a section to the documentation covering Python and Qt strings. +Released v2.2. + + +2000/11/02 14:57:18 phil +Added missing %HeaderCode in qsizepolicy.sip. +Added %Copying. +Added __pyQtQAppHook__ +Fixed the debugger for Windows. +Added QSocket, QServerSocket and QHostAddress. + + +2000/10/20 23:30:22 phil +Added the missing QPalette.setInactive(). +Colour related fixes to pyuic (thanks to Robert Roy). + + +2000/10/18 16:24:37 phil +Minor fixes to pyuic. +Final updates for v2.1. + + +2000/10/15 20:30:19 phil +Fixed problem with the debugger code being included. +Changed the documentation for v2.1pre1. + + +2000/10/13 18:58:35 phil +Fixed pyuic bug related to QToolTip. +configure will now look for Qt v2.2.1. + + +2000/10/11 17:21:59 phil +Added the widgets.py example. +Fixed bugs with slot arguments in QMovie. + + +2000/10/11 13:32:25 phil +The QApplication dtor now makes sure that any top-pevel windows don't get +deleted twice. +Changed the Shell banner in eric to be closer to Python 2.0. + + +2000/10/08 16:31:50 phil +Added the debugger code (forgot last time). + + +2000/10/08 16:26:29 phil +Added eric the debugger. + + +2000/10/06 12:55:57 phil +Updated pyuic for Qt v2.2.1. +Fixed problems with QInputDialog.getValue() and QInputDialog.getText(). + + +2000/10/03 16:35:25 phil +Added the missing /Transfer/ to QStatusBar.addWidget(). +Added the missing /TransferBack/ to QStatusBar.removeWidget(). + + +2000/10/02 21:45:56 phil +Added the missing QCanvasPixmapArray ctor. +Added the len, [] and in operators to QStringList. + + +2000/10/01 12:37:31 phil +Backed out the changes to the examples as they are no longer needed now that +SIP allows slots to be called with more arguments than expected. This means +that the breakage described in the previous ChangeLog entry has now been +repaired. + + +2000/10/01 00:50:32 phil +Added the missing QMenuData.setItemParameter(), QMenuData.itemParameter() and +QMenuData.activateItemAt(). +QMenuData.insertItem() and QAccel.connectItem() now expect slots that will take +an argument. THIS WILL BREAK SCRIPTS - but is the correct behaviour because +PyQt doesn't support the Qt feature of a slot consuming fewer arguments than a +signal provides. + + +2000/09/28 23:09:51 phil +Added the missing /TransferThis/ in the QWorkspace ctor. + + +2000/09/28 16:31:19 phil +Added missing QWidget.isHidden(), QWidget.isMaximized() and +QMultiLineEdit.getCursorPosition(). + + +2000/09/28 10:27:39 phil +Added /Transfer/ to QApplication::postEvent(). + + +2000/09/27 17:21:27 phil +Fixed the QDir ctor for Qt v2+. + + +2000/09/25 12:02:15 phil +Fixed QBoxLayout::findWidget() so that it compiles under Qt v2.0.x. + + +2000/09/20 11:03:00 phil +Added the README about building from the CVS. +Minor changes prior to moving the CVS tree to theKompany.com. + + +2000/09/19 08:25:47 phil +Added the automatic ChangeLog. +Added the missing keyReleaseEvent() from QButton. +Added the missing QValidator::State::Intermediate. +pyuic was generating bad code for QWizards. Also improved the standalone +support code. + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..c7aea18 --- /dev/null +++ b/LICENSE @@ -0,0 +1,280 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..a57a711 --- /dev/null +++ b/NEWS @@ -0,0 +1,570 @@ +v3.18.1 16th June 2009 + - A bug fix release. + +v3.18 5th June 2009 + - Changes to be able to be built by SIP v4.8 and later. + +v3.17.6 17th November 2008 + - A bug fix release. + +v3.17.5 8th November 2008 + - Added the /Constrained/ argument annotations for enums needed by SIP v4.7.8 + and later. + - Added the missing QRegion.rects() (based on a patch from Hans-Peter + Jansen). + - Added the missing QWidget.stackUnder() slot. + +v3.17.4 6th December 2007 + - Changes to be able to be built by SIP v4.7.2 and later. + +v3.17.3 30th July 2007 + - A minor bug fix release. + - Changes to be able to be built by SIP v4.7. + +v3.17.2 25th April 2007 + - A minor bug fix release for a regression in v3.17.1. + +v3.17.1 10th April 2007 + - This version requires SIP v4.6 (or later). + - Changes to ensure compatibility with future SIP releases. + +v3.17 4th November 2006 + - Added support for Python v2.5. + - Added the missing QImage.bitBlt() function. + - Added the missing QListView.setSelectionAnchor() method. + - Added the missing QStringList.__iadd__(QString) method. + - Updated the QScintilla bindings for v1.17. + +v3.16 24th March 2006 + - This version requires SIP v4.4 (or later). + - PyQt3 can be installed alongside PyQt4. + - Concatenating Python strings and QStrings is now supported. + - QString now supports the * and *= operators that behave as they do for + Python strings. + - Removed some QString methods that weren't appropriate in a Python context + and would have caused problems had they ever been used. + - QString is more interoperable with Python string and unicode objects. For + example they can be passed as arguments to open() and to most (but not all) + string methods. + - QObject.sender() now handles Python signals. + - Added the missing MacintoshVersion enum. + - The convention for converting between a C/C++ null pointer and Python's + None object has now been universally applied. In previous versions a null + pointer to, for example, a Qt list container would often be converted to an + empty list rather than None. + - PYQT_BUILD has been removed. + - QPopupMenu (and sub-classes) instances now transfer ownership of the menu + to Python in the call to exec_loop(). This means the menu's resources are + all released when the Python wrapper is garbage collected without needing + to call QObject.deleteLater(). + +v3.15.1 14th November 2005 + - Added the missing QApplication constructor. + - Added the -f flag to configure.py to use any existing features file (by + default it is recreated). + +v3.15 30th August 2005 + - This version requires SIP v4.3 (or later). + - Added registerWeakActiveObject() and revokeActiveObject() to QAxBase. + - Added the missing QString + operator. + - PyQt classes now support Python's cyclic garbage collector. + - QDialog (and sub-classes) instances now transfer ownership of the dialog to + Python in the call to exec_loop(). This means the dialog's resources are + all released when the Python wrapper is garbage collected without needing + to call QObject.deleteLater(). + - Automatic type conversion to more specific sub-classes using available + real-time type information has been improved so that, if a sub-class isn't + recognised then the most specific sub-class is used rather than the base + class. + - Automatic type conversion for QLayoutItem and sub-classes has been added. + - Added support for QScintilla v1.6. + +v3.14.1 6th March 2005 + - A minor bug fix release. + +v3.14 19th February 2005 + - This version requires SIP v4.2 (or later) or SIP v3.12 (or later). + - Added the qInstallMsgHandler() function. + - Added support for QScintilla v1.5. + - Added support for the VendorID package. + - Added the qdir.py example. + +v3.13 21st September 2004 + - Added the QUuid, QMetaObject and QMetaProperty classes. + - Added metaObject() to QObject. + - Added the comparison operators between QChar and QChar and char. + - Added all the QDataStream << and >> operators for classes. + - Added support for QScintilla v1.4. + - Added explicit support for QScintilla to pyuic. + +v3.12 25th May 2004 + - QValueList is implemented as a Python list of QVariant instances. + - Added support for QScintilla v1.3. + - Compiler error messages are suppressed during configuration but can be seen + using the new -w flag to configure.py. + +v3.11 11th March 2004 + - Added the QIconDragEvent and QLocale classes from Qt v3.3.0. + - Updated all existing classes to Qt v3.3.1. + - Added the missing QSocketDevice class. + - Added the missing QString += operators. + +v3.10 16th January 2004 + - Added the QFtp, QHttp, QHttpHeader, QHttpRequestHeader, + QHttpResponseHeader, QLocalFs classes. + +v3.9 7th December 2003 + - This version requires SIP v3.9 (or later) or SIP v4.0rc1 (or later). + - QLayoutIterator.next() is now documented. + - Added the QImageIO and QListViewItemIterator classes. + - Added the QDockArea << and >> operators. + - Added readBoolEntry() to QSettings. + - Added qInstallPath(), qInstallPathDocs(), qInstallPathHeaders(), + qInstallPathLibs(), qInstallPathBins(), qInstallPathPlugins(), + qInstallPathData(), qInstallPathTranslations(), qInstallPathSysconf(). + - A new (configure.py) build system has been added which is independent of + tmake and qmake and installs a pyqtconfig module. The old (build.py) build + system remains. + - Added the -r flag to the build systems to enable tracing. + - Added the -v flag to the build systems to specify the default location for + .sip files. + +v3.8.1 6th September 2003 + - Added the missing QWMatrix.mapRect() * operators. + - The supported educational version is now Qt v3.2.0. + +v3.8 17th August 2003 + - Added the -k flag to build.py to build the PyQt modules as static + libraries. + - Added operators to QBrush, QColor, QDate, QDateTime, QDir, QDomeNode, + QFont, QImage, QKeySequence, QPalette, QPen, QPoint, QRect, QRegExp, + QRegion, QSize, QString, QTime, QUrl and QWMatrix (thanks to Torsten + Marek). + - Added the missing Qt.MetaButton. + - Updated all classes for Qt v3.2.0. + - Added the QSplashScreen, QSqlSelectCursor and QToolBox classes for Qt + v3.2.0. + - Added support for QScintilla v1.2. + +v3.7 5th July 2003 + - Implemented __setitem__(), __delitem__(), __add__(), __iadd__(), __mul__(), + __imul__(), __eq__() and __ne__() for QStringList. + - Lots of new examples from Jorge Arroyo. + - dir() of a PyQt class now returns all attributes. + - Added bits(), scanLine(), jumpTable() and colorTable() to QImage. + - Added toShort(), toUShort(), toInt(), toUInt(), toLong(), toULong(), + toFloat() and toDouble() to QCString and QString. + - Added the QWindowsXPStyle (Windows XP only), QextScintillaLexerHTML, + QextScintillaLexerSQL and QSignalMapper classes. + - pyuic (for Qt v3) now accepts a "-test" command line argument to allow + generated code to be run to completion without needing any user + interaction. + - Added modificationAttempted() to QextScintilla. + +v3.6 26th April 2003 + - Added the QextScintillaAPIs, QextScintillaCommand, QextScintillaCommandSet, + QextScintillaMacros and QextScintillaPrinter classes to the qtext module. + - Added the QCopEnvelope class to the qtpe module. + - QString.startsWith() was missing for Qt v2 starting with Qt v2.2.0. + - Implemented the QTextStream << QMainWindow and QTextStream >> QMainWindow + operators. + - pyuic will now extract Python code from the comments section of a .ui file. + - pyuic now supports PEP 263. + - Added the biff.py, checklists.py, drawlines.py and modified buttongroups.py + examples from Oleksandr Yakovlyev. + - Added the qtui module (thanks to Hans-Peter Jansen). + - Support for Qt v3.1.2 added. + - PYQT_VERSION is now the version encoded as a hexadecimal value. + - Added PYQT_VERSION_STR. + +v3.5 11th December 2002 + - Added the qtext module containing the bindings for QScintilla. + - Added the missing QDockWindow.drawFrame(), QGLWidget.reparent() and + QMainWindow.lineUpDockWindows() methods. + - Added the missing QGLColorMap class. + - Support for Qt v3.0.6, v3.1.0 and v3.1.1 added. + - Added the Qt v3.1.x QAssistantClient, QEventLoop, QIconFactory, + - QIMComposeEvent, QMutexLocker and QSyntaxHighlighter classes, and + qCompress() and qUncompress functions. + - Removed eric from the distribution as it is now packaged separately. + - The SQL examples now support PostgreSQL as well as MySQL. + - Added the Qtopia v1.5.0 AppLnk, AppLnkSet, Config, DateFormat, DocLnk, + DocLnkSet, FileManager, FileSelector, FileSelectorItem, FontDatabase, + Global, MenuButton, QDawg, QList, QList and Resource + classes. + +v3.4 10th September 2002 + - More eric updates from Detlev Offenbach, including pylupdate. + - helpviewer is now installed as a standalone application. + - Added the progress.py example from Hans-Peter Jansen. + - Added the mdi.py and canvas.py examples from Sadi Kose. + - Added QT_TR_NOOP() and QT_TRANSLATE_NOOP(). + - Added QApplication.winEventFilter(), QWidget.winEvent(), MSG and POINT + under Windows. + - PyQt is now licensed under several licenses including the GPL and a + commercial license. + +v3.3.2 12th July 2002 + - Build system changes. + +v3.3.1 9th July 2002 + - Support for Qt v3.0.5 added. + +v3.3 7th July 2002 + - Added README.SunOS. + - QValueList is now fully implemented as a mapping to a Python list + of QPixmap instances. + - QSqlRecordInfo is now implemented as a Python list of QSqlFieldInfo + instances. + - Added the missing QDoubleValidator.setBottom(), + QDoubleValidator.setDecimals(), QDoubleValidator.setTop, + QFontMetrics.boundingRect(), QFontMetrics.size(), + QIntValidator.setBottom(), QIntValidator.setTop(), QString.compare() and + QString.localeAwareCompare(). + - Added the qmake based build system. + - Added lots of eric patches from Detlev Offenbach. (eric should now work + again and has new features.) + - Added the SQL examples from Hans-Peter Jansen. + - pyuic for Qt v3 can now extract Python code from .ui files (thanks to + Christian Bird). + +v3.2.4 18th May 2002 + - Bug fixes only from the latest SIP. (Skipped v3.2.3 to keep the version + number in line with SIP.) + +v3.2.2 11th May 2002 + - Bug fixes only. + +v3.2.1 5th May 2002 + - Bug fixes only from the latest SIP. + +v3.2 5th May 2002 + - Instances that are sub-classes of QObject and created by Qt (by factory + methods, or plugin managers for example) will now have the correct Python + class. + - Added the missing QToolTip.setEnabled() and QToolTip.enabled(). + - Added support for MacOS X. + - Added PYQT_VERSION as the PyQt release number as a string. + - Added the semaphore.py example. + - Any Python object can now be passed as the data element of a QCustomEvent. + - configure now searches for Qt v3.0.4. + +v3.1 23rd March 2002 + - Removed the internal QDateTimeEditBase and QDragResponseEvent classes. + - Added the QValueList mapped class. + - Added the missing QImageTextLangKey class. + - Added the missing QActionGroup.add(), QActionGroup.addSeparator(), + QImage.dotsPerMeterX(), QImage.dotsPerMeterY(), QImage.setDotsPerMeterX(), + QImage.setDotsPerMeterY(), QImage.offset(), QImage.setOffset(), + QImage.textList(), QImage.textLanguages(), QImage.textKeys(), QImage.text() + and QImage.setText() methods. + - Added support for Qt/Embedded on the Sharp Zaurus. + - Added the start of the qtpe (Qt Palmtop Environment) module. + - Changes required for Qt v3.0.1 and v3.0.2. + - configure now allows the location of zlib to be specified. + - configure now allows the directory to where the Python modules are + installed to be specified. + - configure now searches for Qt v3.0.1, v3.0.2 and v3.0.3. + - Changes required by the latest SIP. + - Added the dragdrop example from Issac Trotts. + - Added /ReleaseLock/ to everything that might block. + - Upgraded to autoconf-2.53 and automake-1.6. + +v3.0 17th November 2001 + - Added the missing QChar.nbsp class variable. + - Added the missing QChar.isLetterOrNumber(), QChar.mirroredChar(), + QColorDialog.customColor(), QCustomDialog.customCount(), + QColorDialog.getRgba(), QCustomDialog.setCustomColor(), QFileDialog.done(), + QHeader.setUpdatesEnabled(), QHeader.showEvent(), QIconView.dropped(), + QIconViewItem.dropped(), QImage.inputFormatList(), + QImage.outputFormatList(), QLayoutIterator.next(), QLineEdit.displayText(), + QListBox.isRubberSelecting(), QMenuBar.activateItemAt(), + QMenuBar.focusInEvent(), QMenuBar.isDefaultUp(), QMenuBar.minimumSize(), + QMenuBar.minimumSizeHint(), QMenuBar.setDefaultUp(), QMenuData.findItem(), + QMimeSourceFactory.filePath(), QMimeSourceFactory.addFilePath(), + QMotifPlusStyle.drawMenuBarItem(), QMotifPlusStyle.drawPopupMenuItem(), + QMotifStyle.drawPopupMenuItem(), QMotifStyle.extraPopupMenuItemWidth(), + QMotifStyle.popupMenuItemHeight(), QNetworkProtocol.newChildren(), + QPlatinumStyle.drawPopupMenuItem(), + QPlatinumStyle.extraPopupMenuItemWidth(), + QPlatinumStyle.popupMenuItemHeight(), QPainter.pos(), QPalette.inactive(), + QPopupMenu.drawItem(), QPopupMenu.itemHeight(), QPrintDialog.addButton(), + QProgressDialog.forceShow(), QScrollBar.lineStep(), QScrollBar.maxValue(), + QScrollBar.minValue(), QScrollBar.pageStep(), QScrollBar.setLineStep(), + QScrollBar.setMaxValue(), QScrollBar.setMinValue(), + QScrollBar.setPageStep(), QScrollBar.setValue(), QScrollBar.value(), + QStyle.drawPopupMenuItem(), QStyle.drawMenuBarItem(), + QStyle.extraPopupMenuItemWidth(), QStyle.popupMenuItemHeight(), + QToolTip.hide(), QToolTipGroup.enabled(), QToolTipGroup.setEnabled(), + QTranslator.messages(), QUrlOperator.newChildren(), + QUrlOperator.startNextCopy(), QWindowsStyle.drawPopupMenuItem(), + QWindowsStyle.extraPopupMenuItemWidth() and + QWindowsStyle.popupMenuItemHeight() methods. + - Added all missing methods that use QDataStream. + - Added the missing QDir.match(), QObject.connect(), QRect.contains(), + QString.append() and QString.prepend() variants. + - Added the missing QAccel and QImage ctors. + - Added the missing QColorDrag, QDns, QIconDrag, QIconDragItem, QMenuItem, + QSGIStyle and QSound classes. + - Renamed QDate.isValidDate() to QDate.isValid(), QFile.fileExists() to + QFile.exists(), QFile.removeFile() to QFile.remove(), QLineEdit.del() to + QLineEdit.delChar(), QMultiLineEdit.deleteChar() to + QMultiLineEdit.delChar(), and QTime.IsValidTime() to QTime.isValid(). + - Added the QCanvasSpline, QCheckTableItem, QComboTableItem, + QCustomMenuEvent, QDataBrowser, QDataTable, QDataView, QDateEdit, + QDateTimeEdit, QDesktopWidget, QDockArea, QDockWindow, QEditorFactory, + QErrorMessage, QGridView, QIMEvent, QKeySequence, QLibrary, + QObjectCleanupHandler, QPixmapCache, QProcess, QRegExpValidator, QSettings, + QSql, QSqlCursor, QSqlDatabase, QSqlDriver, QSqlEditorFactory, QSqlError, + QSqlField, QSqlFieldInfo, QSqlForm, QSqlIndex, QSqlPropertyMap, QSqlQuery, + QSqlRecord, QSqlRecordInfo, QSqlResult, QStyleFactory, QStyleOption, + QTabletEvent, QTextEdit, QTimeEdit and QWindowsMime Qt3 classes. + - Added the missing qInitNetworkProtocols() function to the qtnetwork module. + - Removed the QTableHeader class and QTabWidget.selected() as they are not + part of the documented API. + - Removed the /Transfer/ flag on the QWidget parameters of + QBoxLayout.addWidget(), QBoxLayout.insertWidget(), + QGridLayout.addMultiCellWidget(), QGridLayout.addWidget() and + QLayout.add(). + - QObject.className() now works with Python classes that sub-class from + QObject derived classes. + - pyuic now generates double quoted strings rather than single quoted strings + (to help Qt Linguist). + - Moved the Canvas module classes to the new qtcanvas module. + - Moved the Network module classes to the new qtnetwork module. + - Moved the Table module classes to the new qttable module. + - Moved the XML module classes to the new qtxml module. + - configure now handles Qt-mt. + - Upgraded to autoconf-2.52, automake-1.5 and libtool-1.4.1. + +v2.5 11th August 2001 + Minor configuration changes. Added the missing variants of + QPixmap.save(), QWidget.reparent() and QInputDialog.getText(). Added + the qtgl module and the gears.py example script (thanks to Toby J + Sargeant). QObject.sender() will now return an appropriate value. + Fixed QTextView.setText() and QScrollView.addChild(). Fixed the + problems with overloads with different C++ signatures but similar + Python signatures - QCString.setNum(), QLabel.setNum(), + QLCDNumber.checkOverflow(), QString.arg(), QString.number(), + QString.setNum(), QVariant() and QWMatrix.map(). Added the missing + QTranslator methods. Added the QTranslatorMessage class. configure + will now look for Qt v2.3.1. QInterlaceStyle is enabled only for Qt + v2.3.1+ as it is broken in 2.3.0 on Windows. Fixed problems with + QLineEdit.event() and QMultiLineEdit.event(). Added post-hooks to + complement the existing pre-hooks. Added the Pizza example from the Qt + Designer manual. Removed the Version keyword for the latest SIP. + Fixed the memory leaks related to sipMapCppToSelf() in handwritten + code. Changed the build system to handle different versions of PyQt + for different versions of Qt. NULL QCanvasItemList, QFileInfoList, + QObjectList, QStrList and QWidgetList pointers are now converted to an + empty Python list rather than None. Added QDataStream and the QDom + classes (thanks to Jim Bublitz). Added the qt_xdisplay(), qt_xscreen() + and qt_xrootwin() functions. Added the QColor.getHsv(), + QPaintDevice.x11Display(), QPaintDevice.x11AppDisplay(), + QPaintDevice.x11SetAppDpiX(), QPaintDevice.x11SetAppDpiY() and + QWidget.customEvent() methods. + +v2.4 22nd April 2001 + Added the missing QFileDialog.getExistingDirectory(), + QLineEdit.setReadOnly(), QLineEdit.readOnly(), + QMotifStyle.comboButtonFocusRect(), QMotifStyle.comboButtonRect() and + QMotifStyle.drawComboButton() methods. Added the missing + QFileDialog.DirectoryOnly and QPalette.Inactive enum values. Updated + the themes.py example. configure now uses the python executable to get + the various Python locations. Added support of Qt v2.3.0, ie. + QApplication.type(), QFontDatabase.isFixedPitch(), + QScrollView.AutoOneFit, QToolBar.styleChange() and QInterlaceStyle. + Added the missing final argument to QMultiLineEdit.insertAt(). Added + the QCustomEvent class. Upgraded to automake v1.4d and libtool v1.3d. + +v2.3 4th February 2001 + Added the missing QMessage.setTextFormat(), QMessage.textFormat(), + QPushButton.isFlat(), QPushButton.setFlat() and QMenuData.insertItem() + methods. Added the QCustomMenuItem class. pyuic assumes that custom + widgets are in another module and generates code to import them. Other + pyuic bug fixes and changes to keep track with Qt v2.2.4. eric bug + fixes. Added the addressbook.py, buttongroups.py and menu.py examples. + Updated all the tutorial scripts to match those in Qt v2.x. Removed + the Qt v1.x specific examples. Removed the deprecated behaviour of + repr() for QString, QCString and QByteArray. The Python objects that + correspond to C++ instances that are "owned" by Qt are now kept alive + without the Python program having to keep an explicit reference. + configure now looks for Python 2.1. + +v2.2 6th November 2000 + Added the %Copying directive. Added the missing %HeaderCode in + qsizepolicy.sip. Added classes QServerSocket, QSocket and + QHostAddress. Added hooks to the QApplication ctors to tell the + debugger when it is safe to create QSocketNotifiers (with UNIX you can + create QSocketNotifiers before you create the QApplication, with + Windows you can't). Other fixes to eric to get it working with + Windows. Implemented __str__ of QByteArray, QCString and QString to + return an empty string for null instances. Changed __repr__ of the + same classes to return a descriptive string for null instances. Added + the missing QPalette.setInactive(). Colour related fixes to pyuic + (thanks to Robert Roy). Added the documentation section on Python + strings, Qt strings and Unicode. + +v2.1 18th October 2000 + Added support for Qt v2.2.1. Added the widgets.py example. Added the + eric debugger. Added the missing QCanvasPixmapArray ctor. Added the + missing QMenuData.setItemParameter(), QMenuData.itemParameter(), + QMenuData.activateItemAt(), QWidget.isHidden(), QWidget.isMaximized(), + QMultiLineEdit.getCursorPosition() and QButton.keyReleaseEvent(). Add + the len, [] and in operators to QStringList. Various other bug fixes + (see ChangeLog). + +v2.0 14th September 2000 + *NOTE* The implementation of enums has changed meaning that your + scripts will be need to be changed. Also repr() of a QString will + return a unicode object (rather than a string) with versions of Python + that support Unicode. + Added /Transfer/ to QObject.insertChild(). Added /TransferBack/ to + QObject.removeChild() and QTabBar.removeTab(). Changes needed by the + latest SIP. Fixed QFontInfo.family() for Qt v2.x (thanks to Joerg + Kollmann). Added /Transfer/ etc. to several places in QScrollView, + QObject, QHeader, QListView and QListViewItem (thanks to Pete Ware). + Updated everything for Qt v2.2.0. Added pyuic. Updated the examples + to handle to new form of enums. Added full support for Windows. + Install in site-packages if it exists. Changes to handwritten code to + support Python 1.6. Integrate QString with Python's Unicode support. + +v0.12 18th May 2000 + The versions of the examples specific to Qt v1.x now get installed in + RPMs. Added QListBoxItem.selected(), QStringList.append() and + QStringList.prepend(). Added /Transfer/ to QApplication.setStyle(), + QLayout.addItem(), QBoxLayout.addItem() and QGridLayout.addItem(). + Added themes.py to the examples. Clarified the software license. + Changes needed by the latest SIP. + +v0.11.1 1st April 2000 + Fixed the documentation for QPixmap::fill(). Code now compiles with + gcc v2.95.2. + +v0.11 28th March 2000 + Added Qt v2.x classes QCDEStyle, QChar, QColorDialog, QCommonStyle, + QCString, QFontDialog, QGLayoutIterator, QGrid, QHBox, QHButtonGroup, + QHGroupBox, QLayoutItem, QLayoutIterator, QMimeSource, + QMimeSourceFactory, QMotifStyle, QPlatinumStyle, QSessionManager, + QSimpleRichText, QSizeGrip, QSizePolicy, QSpacerItem, QStringList, + QStyle, QStyleSheet, QStyleSheetItem, Qt, QTabWidget, QTextBrowser, + QTextCodec, QTextDecoder, QTextEncoder, QTextIStream, QTextOStream, + QTextStream, QTextView, QTranslator, QUriDrag, QVBox, QVButtonGroup, + QVGroupBox, QWheelEvent, QWidgetItem, QWindowsStyle and QWizard. Many + other smaller changes for Qt v2.x. Added TransferThis where needed. + +v0.10.1 21st January 2000 + Fixed a bug in the repr() functions for QString and QByteArray by + generating the code using the latest SIP. + +v0.10 19th December 1999 + The .pyc files are now created by the installation process. Added + qAppName(), QCursor.handle(), QFont.handle(), QPaintDevice.handle(), + QPainter.handle(). Added most of the typedefs. Changed + examples/application.py so as not to use the obsolete (and + unimplemented) QMessageBox.message(). Fixed bug in QPixmap ctor. + Changed the format of version qualifiers for the latest SIP. Various + small changes to port to Windows. Added ReleaseLock to QDialog.exec(). + Fixed a bug in QRect.coords(). Changed QString and QByteArray from + being mapped classes to being regular classes. Changed + examples/application.py, examples/dclock.py and examples/dirview.py to + explicitly convert from QString where needed. + +v0.9 6th September 1999 + Separated the Qt and KDE bindings. These are the Qt bindings. Various + changes needed by the latest SIP. Re-introduced SLOT(). Changed the + examples to use SLOT() where possible. Added QObject.disconnect(), + QAccel.disconnectItem(), QMenuData.disconnectItem(), + QMovie.disconnectResize(), QMovie.disconnectStatus(), + QMovie.disconnectUpdate() and QApplication.clipboard(). Added the + QClipboard and QSocketNotifier classes. QEvent is automatically + converted to the correct sub-class. The Qt event loop now cooperates + with Python threads. Tested with Qt v1.44, Python v1.5.2, egcs v1.1.2 + and glibc v2.1. + +v0.8 29th May 1999 + Hopefully fixed the SuSE configuration problems. Fixed the QPointArray + ctor and QPointArray.setPoints() that took a list of points. Removed + the section in the documentation referring to the inability to handle + C++ references. Added lots of const keywords to suppress new warning + messages from the compiler. Changed the handwritten code for mapped + classes to follow the new NULL/None conventions, and for the + introduction of sipParseArgs(). Added Drag-and-Drop support to kmyapp. + Added Matt Gerassimoff's Qt examples. Added the QCursor global + cursors. Added QPainter.boundingRect(), KApplication.addDropZone(), + KApplication.removeDropZone, KApplication.setRootDropZone(). Added + QDragEnterEvent, QDragLeaveEvent, QDragMoveEvent, QDragObject, + QDragResponseEvent, QDropEvent, QDropSite, QHideEvent, QImageDrag, + QPaintDeviceMetrics, QShowEvent, QStoredDrag, QTextDrag, QTimer, + QUrlDrag, QWindow, KDNDDropZone, KDNDIcon, KDNDWidget, KPath, KSpell, + KSpellConfig, KSpellDlg, KTreeList, KTreeListItem. Tested with Qt + v1.44, KDE v1.1.1, Python v1.5.2, egcs v1.1.2 and glibc v2.1.1. + +v0.7.1 3rd May 1999 + Fixed the detection of -fno-exceptions support. Added the necessary + Py_DECREF(sipArgs) to all handwritten code. Tested with Qt v1.44, KDE + v1.1.1, Python v1.5.2, egcs v1.1.2 and glibc v2.1. + +v0.7 16th April 1999 + Build with -fno-exceptions if supported. Converted the documentation + to SGML. Replaced QT_VERSION and KDE_VERSION with the proper Qt and + KDE version constants. Fixed a bad bug converting from QStrings to + Python strings. The "connect" convenience function has been removed. + Added the class variables for all supported classes. Removed SLOT() + from all examples. Renamed some static functions in QDate, QTime and + QFile (needed because of the new implementation of static member + functions). Added the ordinary functions related to supported classes. + Added QListView, QListViewItem, QCheckListItem, KButton, KButtonBox, + KContainerLayout, KContainerLayoutItem, KControlApplication, + KControlDialog, KConfigWidget, KDatePicker, KDateTable, KDialog, + KDirectionButton, KGradientSelector, KIntegerLine, KLed, KLedLamp, + KListSpinBox, KNewPanner, KNumericSpinBox, KPanner, KPopupMenu, + KQuickHelp, KQuickHelpWindow, KRestrictedLine, KRuler, KSelector, + KSeparator, KSlider, KSpinBox, KTabBar, KTabButton, KTabCtl, + KToolBoxManager, KWizard, KWizardPage, KXYSelector. Tested with Qt + v1.44, KDE v1.1, Python v1.5.2, egcs v1.1.2 and glibc v2.1. + +v0.6 20th February 1999 + Removed some handwritten code now that SIP automatically handles mapped + classes and slots. Changed QString to be mapped to/from Python + strings. Added the static member functions for all supported classes. + Added new member functions for KDE v1.1. Added QBoxLayout, + QButtonGroup, QChain, QCheckBox, QChildEvent, QDate, QDateTime, + QDialog, QDir, QFileDialog, QFileIconProvider, QFileInfo, + QFileInfoList, QGManager, QGroupBox, QGridLayout, QHBoxLayout, QHeader, + QIconSet, QLayout, QMainWindow, QMessageBox, QMovie, QMultiLineEdit, + QObjectList, QPrintDialog, QPrinter, QProgressBar, QProgressDialog, + QRadioButton, QScrollView, QSemiModal, QSpinBox, QSplitter, QStatusBar, + QTab, QTabBar, QTabDialog, QTime, QToolBar, QToolButton, QToolTip, + QToolTipGroup, QVBoxLayout, QWhatsThis, QWidgetList, QWidgetStack. + Added DlgLocation, KColorButton, KColorCombo, KColorDialog, + KColorGroup, KDirDialog, KDirEntry, KEdit, KFM, KFileBaseDialog, + KFileBookmark, KFileDialog, KFileInfo, KFileInfoContents, + KFileInfoList, KFontDialog, KHTMLView, KIconLoaderButton, + KIconLoaderDialog, KMsgBox, KPixmap, KProgress, KRadioGroup, + KSimpleConfig, KURL. Tested with Qt v1.42, KDE v1.1, egcs v1.1.1 and + glibc v2.1. + +v0.5 21st January 1999 + The bindings are now packaged with autoconf configure scripts. The + enum in QFrame is now unnamed as it is in Qt. All the examples changed + to use the new form of enums. Added support for qApp, the global + QColors, kapp, i18n(), Icon() and ICON(). Same test environment as + v0.4. + +v0.4 9th January 1999 + Enough Qt and KDE classes to implement the 14 Qt tutorials and KMyApp, + but still not that many that implement user interface widgets. Tested + with Qt v1.42, KDE v1.0 and gcc v2.8.1. + +v0.3 9th December 1998 + Many more Qt classes, but still not many that implement user interface + widgets. Those classes that are implemented are almost all fully + implemented. Tested with Qt v1.42. + +v0.2 5th December 1999 + Added the definitions of protected and virtual member functions. + +v0.1 1st November 1998 + First release (with a very small set of classes implemented) to give + people a flavour. Tested with Qt v1.41. diff --git a/README b/README new file mode 100644 index 0000000..1af7d9f --- /dev/null +++ b/README @@ -0,0 +1,64 @@ + PyQt - Python Bindings for the Qt Toolkit + + +INTRODUCTION + +These are the Python bindings for Qt. You must also have the SIP Python +bindings generator installed. + +The homepage is http://www.riverbankcomputing.co.uk/pyqt/. + +The homepage of SIP is http://www.riverbankcomputing.co.uk/sip/. + + +COMMERCIAL VERSION + +If you have the Commercial version of PyQt then you should also have a +license file that you downloaded separately. The license file must be copied +to the "sip" directory before starting to build PyQt. + + +INSTALLATION + +Check for any other README files in this directory that relate to your +particular platform. Feel free to contribute a README for your platform or to +provide updates to any existing documentation. + +The first step is to configure PyQt by running the following command. + + python configure.py + +This assumes that the correct Python interpreter is on your path. Something +like the following may be appropriate on Windows. + + c:\python23\python configure.py + +If you have multiple versions of Python installed then make sure you use the +interpreter for which you wish to generate bindings for. + +The configure.py script takes many options. Use the "-h" command line option +to display a full list of the available options. + +The next step is to build PyQt using your platform's make command. + + make + +The final step is to install PyQt by running the following command. (Depending +on your system you may require root or administrator privileges.) + + make install + + +THE REST OF THE DISTRIBUTION + +The "examples2" and "examples3" directories contain some examples (for Qt v2.x +and Qt v3.x respectively) of Python scripts, including versions of the standard +Qt tutorials and examples. + +The "doc" directory contains SGML and HTML documentation for the bindings. +This documentation includes a section describing the differences visible to +the Python programmer between this and the previous version - please read it. + + +Phil Thompson +phil@riverbankcomputing.co.uk diff --git a/README.AIX b/README.AIX new file mode 100644 index 0000000..d7db29b --- /dev/null +++ b/README.AIX @@ -0,0 +1,68 @@ +This file describes some things to be aware of when building SIP (and PyQt) +under AIX. + +I had success building SIP V3/V4 (and PyQt) on AIX 4.3.3 and on AIX 5.1 with +VisualAge C++ and with gcc. + +VisualAge C++ was version 6.0 but it should also work with version 5.x. +The GNU compiler was version 3.3.2 downloaded as a binary from +http://aixpdslib.seas.ucla.edu/aixpdslib.html + +The Qt-Version was 3.2.3 but it should also work with previous versions. + +If you are using Python version 2.3.3 or higher, SIP (and PyQt) should build +out of the box without any changes. + +If you are using a Python version before 2.3.3, you have to patch Python, +because until this version, Python uses the system calls load() and +loadbind() to load and bind shared objects. These system calls cannot load +and bind C++ shared objects properly (constructors and destructors for static +classes are not called with these system calls). Since AIX version 4.2 the +system calls dlopen() and dlsym() are available and should be used in +preference. + +The following patch changes the configure script of Python to use dlopen() +and dlsym() if they are available. It also fixes a bug with the definition of +_XOPEN_SOURCE: + +---8<-------------------------------------------------------------------->8--- +diff -uNr Python-2.3.2.orig/configure Python-2.3.2/configure +--- Python-2.3.2.orig/configure 2003-09-27 10:58:55.000000000 +0200 ++++ Python-2.3.2/configure 2003-10-28 11:33:58.000000000 +0100 +@@ -1452,6 +1452,11 @@ + # but used in struct sockaddr.sa_family. Reported by Tim Rice. + SCO_SV/3.2) + define_xopen_source=no;; ++ # On AIX 4, mbstate_t is defined only when _XOPEN_SOURCE == 500 but used in ++ # wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined or ++ # has another value. By not (re)defining it, the defaults come in place. ++ AIX/4) ++ define_xopen_source=no;; + esac + + if test $define_xopen_source = yes +@@ -12965,7 +12970,12 @@ + if test -z "$DYNLOADFILE" + then + case $ac_sys_system/$ac_sys_release in +- AIX*) DYNLOADFILE="dynload_aix.o";; ++ AIX*) # Use dynload_shlib.c and dlopen() if we have it. ++ if test "$ac_cv_func_dlopen" = yes ++ then DYNLOADFILE="dynload_shlib.o" ++ else DYNLOADFILE="dynload_aix.o" ++ fi ++ ;; + BeOS*) DYNLOADFILE="dynload_beos.o";; + hp*|HP*) DYNLOADFILE="dynload_hpux.o";; + Darwin/*) DYNLOADFILE="dynload_next.o";; +---8<-------------------------------------------------------------------->8--- + +Note: I did not mix the compilers when building Qt, Python, SIP and PyQt. At +least Qt, SIP and PyQt must be built with the same compiler because of +different name mangling schemes. + +If you have any problems or questions on building SIP or PyQt on AIX, either +send an email to ulrich.berning@desys.de or use the PyKDE mailing list. + +Ulrich Berning +DESYS GmbH diff --git a/README.SunOS b/README.SunOS new file mode 100644 index 0000000..5b176c8 --- /dev/null +++ b/README.SunOS @@ -0,0 +1,44 @@ + + o Compiler Error: CC -DHAVE_CONFIG_H -I. -I. -I.. + -I/users/toollib/include/python2.0 -I/users/pyqt/install/sip-3.2.1/include + -I/users/pyqt/install/qt-x11-commercial-3.0.4/include -I/usr/openwin/include + -c qtcmodule.cpp -KPIC -DPIC -o qtcmodule.o + "sipqtProxyqt.h", line 113: Error: Multiple declaration for + sipProxyqt::proxySlot(int). + "qtcmodule.cpp", line 5393: Error: sipProxyqt::proxySlot(int) already had a + body defined. + + This occurs because the Sun Workshop C++ 4.2 compiler (and the Sun Forte + C++ 6.x compiler with -compat) can not distinguish between 'bool' and 'int' + types in overloaded method signatures and issues a compiler error. + In this case bool is declared in qt/include/qglobal.h as + 'typedef int bool;'. To workaround this '#if 0' out the the declaration + and body of 'proxySlot(bool)' in PyQt/qt/sipqtProxyqt.h and + PyQt/qt/qtcmodule.cpp. This resolves the compiler error but breaks + any 'sig(bool)' type signals. To workaround this, save the + PyQt/qt/sipqtProxyqt.moc generated after fixing the compiler error and + add the following bits of code: + + ... + static const QUParameter param_slot_42[] = { + { 0, &static_QUType_bool, 0, QUParameter::In } + }; + static const QUMethod slot_42 = {"proxySlot", 1, param_slot_42 }; + static const QMetaData slot_tbl[] = { + ... + { "proxySlot(bool)", &slot_42, QMetaData::Public } + }; + metaObj = QMetaObject::new_metaobject( + "sipProxyqt", parentObject, + slot_tbl, 43, + ... + case 42: proxySlot(static_QUType_bool.get(_o+1)); break; + + You will need to comment out the line in PyQt/qt/Makefile that re-generates + PyQt/qt/sipqtProxyqt.moc with moc to avoid the above changes from being + overwritten. + + In order to test that everything has been done correctly, create a + toggle button and connect it's 'toggled(bool)' signal to a python slot, + if it works, your done! + diff --git a/THANKS b/THANKS new file mode 100644 index 0000000..7204f8a --- /dev/null +++ b/THANKS @@ -0,0 +1,35 @@ +Torsten Marek + For going through the Qt classes and adding applicable operators to + PyQt. + +Detlev Offenbach + For picking up and enhancing eric. + +Hans-Peter Jansen + For the ports of the table and SQL based example scripts and for the + qtui module. + +Dimitri Papadopoulos-Orfanos + For all the help with the MacOS X port. + +Jim Bublitz + For QDataStream and the QDom classes, and picking up PyKDE. + +Pete Ware + For lots of patches for Qt v2.1+. + +Boudewijn Rempt + For evangelising and providing so much support to other users. Oh, and + writing a book about it all. + +Toby J Sargeant + For QSocketNotifier and getting Python threads working with Qt. + +Matt Gerassimoff + For his Python versions of many of the Qt example programs. + +Matt Gerassimoff, John Filo, Boudewijn Rempt + For testing and excellent bug reports. + +Rupert Thurner + For pointing out what env is for. diff --git a/build.py b/build.py new file mode 100644 index 0000000..11e4a0c --- /dev/null +++ b/build.py @@ -0,0 +1,730 @@ +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# This is the build script for PyQt. It should be run in the top level +# directory of the source distribution and by the Python interpreter for which +# it is being built. It uses either qmake or tmake to do the hard work of +# generating the platform specific Makefiles. + + +import sys +import os +import glob +import tempfile +import shutil +import py_compile +import compileall +import string + + +# Get the SIP configuration. +try: + import sipconfig +except: + print "Unable to import the sipconfig module. Please make sure you have" + print "SIP v3.9 or later installed." + sys.exit(1) + +config = sipconfig.SIPConfig("PyQt 3.18.1") + + +# Initialise the globals. +sipMajorVersion = config.sip_version >> 16 +sciIncDir = config.qt_inc_dir +sciLibDir = config.qt_lib_dir +sciLib = None +sciVersion = None +binDir = config.default_bin_dir +modDir = config.default_mod_dir +sipDir = config.default_sip_dir +buildModules = ["qt"] +tempBuildDir = None +catCppFiles = 0 +catSplit = 1 +qpeTag = None +trace = 0 +releaseGIL = 0 + + +def usage(rcode = 2): + """Display a usage message and exit. + + rcode is the return code passed back to the calling process. + """ + print "Usage:" + print " %s [-h] [-a version] [-b dir] [-c] [-d dir] [-g] [-j #] [-n dir] [-o dir] [-r] [-v dir]" % sipconfig.script() + print "where:" + print " -h display this help message" + print " -a tag explicitly enable the qtpe module" + print " -b dir where pyuic and pylupdate will be installed [default %s]" % config.default_bin_dir + print " -c concatenate each module's C++ source files" + print " -d dir where the PyQt modules will be installed [default %s]" % config.default_mod_dir + print " -g always release the GIL (SIP v3.x behaviour)" + print " -j # split the concatenated C++ source files into # pieces [default 1]" + print " -n dir the directory containing the QScintilla header files [default %s]" % config.qt_inc_dir + print " -o dir the directory containing the QScintilla library [default %s]" % config.qt_lib_dir + print " -r generate code with tracing enabled [default disabled]" + print " -v dir where the PyQt .sip files will be installed [default %s]" % config.default_sip_dir + + sys.exit(rcode) + + +def mkTempBuildDir(olddir=None): + """Create a temporary build directory for a console application called + qttest, complete with patched Makefile. The global tempBuildDir is set to + the name of the directory. The temporary directory becomes the current + directory. + + olddir is None if the directory should be created, otherwise it is deleted. + + Returns the name of the previous current directory. + """ + global tempBuildDir + + if olddir is None: + tempBuildDir = tempfile.mktemp() + + try: + os.mkdir(tempBuildDir) + except: + sipconfig.error("Unable to create temporary directory.") + + prevdir = sipconfig.push_dir(tempBuildDir) + + sipconfig.copy_to_file("qttest.pro.in", +"""TEMPLATE = app +TARGET = qttest +CONFIG += console warn_off @TEST_OPENGL@ @BLX_CONFIG_APP@ +INCLUDEPATH = @BLX_INCLUDEPATH@ @TEST_QSCINTILLA_INC@ +DEFINES = @BLX_DEFINES@ +SOURCES = qttest.cpp +LIBS += @TEST_QUI_LIB@ @TEST_QSCINTILLA_LIB@ +""") + + # Disable OpenGL, qui and QScintilla support by default. + config.patches["@TEST_OPENGL@"] = "" + config.patches["@TEST_QUI_LIB@"] = "" + config.patches["@TEST_QSCINTILLA_INC@"] = "" + config.patches["@TEST_QSCINTILLA_LIB@"] = "" + + # Create a dummy source file to suppress a qmake warning. + sipconfig.copy_to_file("qttest.cpp", "") + + config.create_makefile("qttest.pro") + else: + sipconfig.pop_dir(olddir) + prevdir = None + + shutil.rmtree(tempBuildDir, 1) + + return prevdir + + +def tryModule(maindir, mname, incfile, ctor): + """See if a PyQt module should be built and update the buildModules list + accordingly. + + maindir is the directory containing this script. + mname is the name of the PyQt module. + incfile is the C++ header file that defines the class being used for the + test. + ctor is the constructor of the class being used for the test. + """ + # Check for the existence of the module .sip file. + msip = os.path.join(maindir, "sip", mname, mname + "mod.sip") + + if not os.access(msip, os.F_OK): + return + + sipconfig.copy_to_file("qttest.cpp", +"""#include <%s> + +int main(int argc,char **argv) +{ + new %s; +} +""" % (incfile, ctor)) + + if sipconfig.run_make(None,0) == 0: + buildModules.append(mname) + sipconfig.inform("The %s module will be built." % mname) + else: + sipconfig.inform("The %s module will not be built." % mname) + + sipconfig.run_make("clean") + + +def checkQScintilla(): + """See if QScintilla can be found and what its version is. + """ + # Find the QScintilla header files. + sciglobal = os.path.join(sciIncDir, "qextscintillaglobal.h") + + if os.access(sciglobal,os.F_OK): + config.patches["@PYQT_QSCINTILLA_INC@"] = sciIncDir + + sipconfig.inform("%s contains qextscintillaglobal.h." % (sciIncDir)) + + # Get the QScintilla version number. + global sciVersion + + sciVersion, sciversstr = sipconfig.read_version(sciglobal, "QScintilla", "QSCINTILLA_VERSION", "QSCINTILLA_VERSION_STR") + + sipconfig.inform("QScintilla %s is being used." % (sciversstr)) + + # If we find a snapshot then set the version number to 0 as a special + # case. + if sciversstr[:8] == "snapshot": + sciVersion = 0 + + # Find the QScintilla library. + if sys.platform == "win32": + lpatt = "qscintilla.lib" + else: + lpatt = "libqscintilla.*" + + if len(glob.glob(os.path.join(sciLibDir, lpatt))): + sipconfig.inform("%s contains the QScintilla library." % sciLibDir) + + global sciLib + + if sys.platform == "win32": + sciLib = sipconfig.escape(os.path.join(sciLibDir, "qscintilla.lib")) + else: + sciLib = sipconfig.escape("-L" + sciLibDir) + " -lqscintilla" + + config.patches["@PYQT_QSCINTILLA_LIB@"] = sciLib + else: + sipconfig.inform("The QScintilla library could not be found in %s and so the qtext module will not be built. If QScintilla is installed then use the -o argument to explicitly specify the correct directory." % (sciLibDir)) + + sciVersion = -1 + else: + sipconfig.inform("qextscintillaglobal.h could not be found in %s and so the qtext module will not be built. If QScintilla is installed then use the -n argument to explicitly specify the correct directory." % sciIncDir) + + sciVersion = -1 + + +def moduleChecks(maindir): + """See which PyQt modules to build. + """ + sipconfig.inform("Checking which additional PyQt modules to build."); + + tryModule(maindir,"qtcanvas", "qcanvas.h", "QCanvas()") + tryModule(maindir,"qtnetwork", "qsocket.h", "QSocket()") + tryModule(maindir,"qttable", "qtable.h", "QTable()") + tryModule(maindir,"qtxml", "qdom.h", "QDomImplementation()") + + if config.qt_version >= 0x030000: + tryModule(maindir,"qtsql", "qsql.h", "QSql()") + + # We need a different Makefile for the qtgl module. + config.patches["@TEST_OPENGL@"] = "opengl" + config.create_makefile("qttest.pro") + + tryModule(maindir,"qtgl", "qgl.h", "QGLWidget()") + + # Put things back. + config.patches["@TEST_OPENGL@"] = "" + config.create_makefile("qttest.pro") + + # Check for the qui library. + if config.qt_version >= 0x030000: + if sys.platform == "win32": + quilib = r"$(QTDIR)\lib\qui.lib" + else: + quilib = "-lqui" + + config.patches["@PYQT_QUI_LIB@"] = quilib + + config.patches["@TEST_QUI_LIB@"] = quilib + config.create_makefile("qttest.pro") + + tryModule(maindir,"qtui", "qwidgetfactory.h", "QWidgetFactory()") + + # Put things back. + config.patches["@TEST_QUI_LIB@"] = "" + config.create_makefile("qttest.pro") + + # Check for the QScintilla library. + if sciVersion >= 0: + config.patches["@TEST_QSCINTILLA_INC@"] = sciIncDir + config.patches["@TEST_QSCINTILLA_LIB@"] = sciLib + config.create_makefile("qttest.pro") + + tryModule(maindir,"qtext", "qextscintillabase.h", "QextScintillaBase()") + + # Put things back. + config.patches["@TEST_QSCINTILLA_INC@"] = "" + config.patches["@TEST_QSCINTILLA_LIB@"] = "" + config.create_makefile("qttest.pro") + + +def generateFeatures(featfile): + """Generate the header file describing the Qt features that are enabled if + it doesn't already exist. (If it already exists then we are probably cross + compiling and generated the file through other means.) + + featfile is the name of the features file. + """ + if os.access(featfile,os.F_OK): + sipconfig.inform("Using existing features file.") + return + + sipconfig.inform("Generating the features file.") + + # The features that a given Qt configuration may or may not support. Note + # that STYLE_WINDOWSXP requires special handling. + flist = ["ACTION", "CLIPBOARD", "CODECS", "COLORDIALOG", "DATASTREAM", + "DIAL", "DNS", "DOM", "DRAGANDDROP", "ICONVIEW", "IMAGE_TEXT", + "INPUTDIALOG", "FILEDIALOG", "FONTDATABASE", "FONTDIALOG", + "MESSAGEBOX", "MIMECLIPBOARD", "NETWORKPROTOCOL", "PICTURE", + "PRINTDIALOG", "PRINTER", "PROGRESSDIALOG", "PROPERTIES", + "SEMIMODAL", "SIZEGRIP", "SOUND", "SPLITTER", "STYLE_CDE", + "STYLE_INTERLACE", "STYLE_MOTIF", "STYLE_MOTIFPLUS", + "STYLE_PLATINUM", "STYLE_SGI", "STYLE_WINDOWS", "TABDIALOG", + "TABLE", "TABLEVIEW", "TRANSFORMATIONS", "TRANSLATION", "WIZARD", + "WORKSPACE"] + + # Generate the program which will generate the features file. + f = open("qttest.cpp","w") + + # Escape the backslashes so that the name can be embedded in a C++ string. + ffstr = string.replace(featfile, "\\", "\\\\") + + f.write( +"""#include +#include +#include + +int main(int argc,char **argv) +{ + FILE *fp; + QApplication app(argc,argv,0); + + if ((fp = fopen("%s","w")) == NULL) + { + printf("Unable to create '%s'\\n"); + return 1; + } + +#if !defined(QT_THREAD_SUPPORT) + fprintf(fp,"-x Qt_THREAD_SUPPORT\\n"); +#endif + +#if (defined(Q_OS_WIN32) || defined(Q_OS_WIN64)) && QT_VERSION >= 0x030000 + if (qWinVersion() != Qt::WV_XP) + fprintf(fp,"-x Qt_STYLE_WINDOWSXP\\n"); +#endif +""" % (ffstr, ffstr)) + + for feat in flist: + f.write( +""" +#if defined(QT_NO_%s) + fprintf(fp,"-x Qt_%s\\n"); +#endif +""" % (feat, feat)) + + f.write( +""" + fclose(fp); + + return 0; +} +""") + + f.close() + + sipconfig.run_make() + sipconfig.run_program(os.path.join(os.getcwd(), "qttest")) + sipconfig.run_make("clean") + + sipconfig.inform("Generated the features file.") + + +def generateSource(mname, plattag, qttag, xtrtag): + """Generate the C++ source code for a particular PyQt module. + + mname is the name of the module. + plattag is the SIP tag for the platform. + qttag is the SIP tag for the Qt version. + xtrtag is an optional extra SIP tag. + """ + sipconfig.inform("Generating the C++ source for the %s module." % mname) + + try: + shutil.rmtree(mname) + except: + pass + + try: + os.mkdir(mname) + except: + sipconfig.error("Unable to create the %s directory." % mname) + + pro = mname + ".pro" + + argv = ["-t", plattag, + "-t", qttag, + "-z", "features", + "-I", "sip", + "-m", mname + "/" + pro + ".in", + "-c", mname, + "sip/" + mname + "/" + mname + "mod.sip"] + + if xtrtag: + argv.insert(0,xtrtag) + argv.insert(0,"-t") + + if trace: + argv.insert(0,"-r") + + if releaseGIL: + argv.insert(0,"-g") + + sipconfig.run_program(config.sip_bin, argv) + + # Generate the Makefile. + sipconfig.inform("Generating the Makefile for the %s module." % mname) + + olddir = sipconfig.push_dir(mname) + + if catCppFiles: + sipconfig.cat_source_files(mname, catSplit) + + config.create_makefile(pro, mname) + + icmds = [] + + if sipMajorVersion == 3: + icmds.append(("copy", mname + ".py", modDir)) + icmds.append(("copy", mname + ".pyc", modDir)) + + config.add_install_target(icmds) + + if sipMajorVersion == 3: + # Compile the Python part of the module. + pyname = mname + ".py" + + sipconfig.inform("Compiling %s." % (pyname)) + py_compile.compile(pyname) + + sipconfig.pop_dir(olddir) + + +def versionToTag(vers, tags, desc): + """Convert a version number to a tag. + + vers is the version number. + tags is the dictionary of tags keyed by version number. + desc is the descriptive name of the package. + + Returns the corresponding tag. + """ + tag = None + + vl = tags.keys() + vl.sort() + + # For a snapshot use the latest tag. + if vers == 0: + tag = tags[vl[-1]] + else: + for v in vl: + if vers < v: + tag = tags[v] + break + + if tag is None: + sipconfig.error("Invalid %s version: 0x%06x." % (desc, vers)) + + return tag + + +def main(argv): + """The main function of the script. + + argv is the list of command line arguments. + """ + import getopt + + # Parse the command line. + try: + optlist, args = getopt.getopt(argv[1:],"ha:b:cd:gj:n:o:rv:") + except getopt.GetoptError: + usage() + + for opt, arg in optlist: + if opt == "-h": + usage(0) + elif opt == "-a": + global qpeTag + qpeTag = arg + elif opt == "-b": + global binDir + binDir = arg + elif opt == "-c": + global catCppFiles + catCppFiles = 1 + elif opt == "-d": + global modDir + modDir = arg + elif opt == "-g": + global releaseGIL + releaseGIL = 1 + elif opt == "-j": + global catSplit + + try: + catSplit = int(arg) + except: + catSplit = 0 + + if catSplit < 1: + usage() + elif opt == "-n": + global sciIncDir + sciIncDir = arg + elif opt == "-o": + global sciLibDir + sciLibDir = arg + elif opt == "-r": + global trace + trace = 1 + elif opt == "-v": + global sipDir + sipDir = arg + + # Confirm the license. + sipconfig.confirm_license() + + # If there should be a license file then check it is where it should be. + if config.license_file: + if os.access(os.path.join("sip", config.license_file), os.F_OK): + sipconfig.inform("Found the license file %s.\n" % config.license_file) + else: + sipconfig.error("Please copy the license file %s to the sip directory.\n" % config.license_file) + + # Check the Qt version. + if config.qt_version == 0: + sipconfig.error("SIP has been built with Qt support disabled.\n") + + # Early versions of Qt for the Mac didn't include everything. Rather than + # maintain these in the future we just mandate a later version. + if sys.platform == "darwin" and config.qt_version < 0x030100: + sipconfig.error("PyQt for MacOS/X requires Qt v3.1.0 or later.\n") + + # Check the installation directory is valid and add it as a patch. + if not os.access(modDir,os.F_OK): + sipconfig.error("The %s PyQt destination directory does not seem to exist. Use the -d argument to set the correct directory." % (modDir)) + + config.patches["@PYQT_MODDIR@"] = sipconfig.escape(modDir) + + sipconfig.inform("%s is the PyQt installation directory." % (modDir)) + + # Enable warnings for SIP v4 generated code. + if sipMajorVersion >= 4: + warn = "warn_on" + else: + warn = "warn_off" + + config.patches["@PYQT_WARN@"] = warn + + # Create patches to allow some modules to link against others. + if sipMajorVersion >= 4: + modlink = "" + elif sys.platform == "win32": + modlink = sipconfig.escape(os.path.join(modDir, "libqtc.lib")) + else: + modlink = sipconfig.escape("-L" + modDir) + " -lqtcmodule" + + config.patches["@PYQT_QT_MODULE@"] = modlink + + if sipMajorVersion >= 4: + modlink = "" + elif sys.platform == "win32": + modlink = sipconfig.escape(os.path.join(modDir, "libqttablec.lib")) + " " + sipconfig.escape(os.path.join(modDir, "libqtc.lib")) + else: + modlink = sipconfig.escape("-L" + modDir) + " -lqttablecmodule -lqtcmodule" + + config.patches["@PYQT_QTTABLE_MODULE@"] = modlink + + # The professional edition needs special handling if XML support is needed. + if config.qt_edition == "professional": + rbprof = "rbprof" + else: + rbprof = "" + + config.patches["@PYQT_RBPROF@"] = rbprof + + # Link in the qassistantclient library for Qt v3.1+. + qaclib = "" + + if config.qt_version >= 0x030100: + if sys.platform == "win32": + qaclib = r"$(QTDIR)\lib\qassistantclient.lib" + else: + qaclib = "-lqassistantclient" + + config.patches["@PYQT_QASSISTANTCLIENT_LIB@"] = qaclib + + # Check for QScintilla. + if config.qt_version >= 0x030000: + checkQScintilla() + + # Create a build directory that we can compile test programs. + maindir = mkTempBuildDir() + + # Check what additional modules to build. + if config.qt_version >= 0x020000: + moduleChecks(maindir) + + # Work out the platform and Qt version tags to pass to SIP to generate the + # code we need. + if config.qt_lib == "qte": + plattag = "WS_QWS" + elif sys.platform == "win32": + plattag = "WS_WIN" + elif sys.platform == "darwin": + plattag = "WS_MACX" + else: + plattag = "WS_X11" + + qttags = { + 0x020000: "Qt_1_43", + 0x020100: "Qt_2_00", + 0x020200: "Qt_2_1_0", + 0x020300: "Qt_2_2_0", + 0x020301: "Qt_2_3_0", + 0x030000: "Qt_2_3_1", + 0x030001: "Qt_3_0_0", + 0x030002: "Qt_3_0_1", + 0x030004: "Qt_3_0_2", + 0x030005: "Qt_3_0_4", + 0x030006: "Qt_3_0_5", + 0x030100: "Qt_3_0_6", + 0x030101: "Qt_3_1_0", + 0x030102: "Qt_3_1_1", + 0x030200: "Qt_3_1_2", + 0x030300: "Qt_3_2_0", + 0x040000: "Qt_3_3_0" + } + + qttag = versionToTag(config.qt_version, qttags, "Qt") + + # Work out the QScintilla tag. + if sciVersion >= 0: + scitags = { + 0x010100: "QScintilla_1_0", + 0x010200: "QScintilla_1_1", + 0x020000: "QScintilla_1_2" + } + + scitag = versionToTag(sciVersion, scitags, "QScintilla") + else: + scitag = None + + # Generate the features file. + generateFeatures(os.path.join(maindir, "features")) + + # We don't need the temporary build directory anymore. + mkTempBuildDir(maindir) + + subdirs = [] + for mname in buildModules: + if mname == "qtext": + xtratag = scitag + else: + xtratag = None + + generateSource(mname, plattag, qttag, xtratag) + subdirs.append(mname) + + # We handle the qtpe module explicitly rather than auto-detect. This is + # because it does things a bit differently and I'm too lazy to deal with it + # properly at the moment. + if qpeTag: + generateSource("qtpe", plattag, qttag, qpeTag) + subdirs.append("qtpe") + + # Install the .sip files. + sipconfig.inform("Creating Makefile for .sip files.") + olddir = sipconfig.push_dir("sip") + sipconfig.copy_to_file("Makefile", "all:\n") + + icmds = [] + + for mname in buildModules: + dstdir = os.path.join(sipDir, mname) + + icmds.append(("mkdir", dstdir, None)) + + for sf in os.listdir(os.path.join(olddir, "sip", mname)): + icmds.append(("copy", os.path.join(mname, sf), os.path.join(dstdir, sf))) + + config.add_install_target(icmds) + sipconfig.pop_dir(olddir) + subdirs.append("sip") + + # See which version of pyuic to build. + config.patches["@PYQT_BINDIR@"] = sipconfig.escape(binDir) + + if config.qt_version >= 0x030000: + sipconfig.inform("Creating Makefile for pyuic3.") + subdirs.append("pyuic3") + olddir = sipconfig.push_dir("pyuic3") + elif config.qt_version >= 0x020000: + sipconfig.inform("Creating Makefile for pyuic2.") + subdirs.append("pyuic2") + olddir = sipconfig.push_dir("pyuic2") + + config.create_makefile("pyuic.pro", []) + sipconfig.pop_dir(olddir) + + # Build pylupdate if Qt v3.0 or later. + if config.qt_version >= 0x030000: + sipconfig.inform("Creating Makefile for pylupdate3.") + subdirs.append("pylupdate3") + olddir = sipconfig.push_dir("pylupdate3") + + config.create_makefile("pylupdate.pro", []) + sipconfig.pop_dir(olddir) + + # Generate the top-level Makefile. + sipconfig.inform("Creating top level Makefile.") + sipconfig.copy_to_file("PyQt.pro.in", "TEMPLATE = subdirs\nSUBDIRS = " + string.join(subdirs) + "\n") + config.create_makefile("PyQt.pro") + + # Tell the user what to do next. + msg = "The build of the PyQt source code for your system is now complete. To compile and install PyQt run \"%s\" and \"%s install\" with appropriate user privileges." % (config.make_bin, config.make_bin) + + sipconfig.inform(msg) + + +if __name__ == "__main__": + try: + main(sys.argv) + except SystemExit: + raise + except: + print \ +"""An internal error occured. Please report all the output from the program, +including the following traceback, to support@riverbankcomputing.co.uk. +""" + raise diff --git a/configure.py b/configure.py new file mode 100644 index 0000000..cbbc1c2 --- /dev/null +++ b/configure.py @@ -0,0 +1,1457 @@ +# This script generates the PyQt configuration and generates the Makefiles. +# +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +import sys +import os +import string +import glob +import getopt +import shutil +import py_compile + +import sipconfig + +src_dir = os.path.dirname(os.path.abspath(__file__)) + +# Initialise the globals. +pyqt_version = 0x031201 +pyqt_version_str = "3.18.1" + +sip_min_version = 0x040800 + + +# Try and find a Qt installation to use as the default. +try: + qt_dir = os.environ["QTDIR"] +except KeyError: + qt_dir = "" + + +qt_version = 0 +qt_edition = "" +qt_incdir = None +qt_libdir = None +qt_threaded = 0 +qt_winconfig = "" + +pyqt = None +pyqt_modules = [] +qt_sip_flags = [] +qtext_sip_flags = [] +qtpe_sip_flags = [] +qsci_version = 0 +disabled_classes = [] + +if sys.platform == "win32": + qsci_define = "QEXTSCINTILLA_DLL" +else: + qsci_define = "" + +# Get the SIP configuration. +sipcfg = sipconfig.Configuration() + +# Command line options. +opt_qtlib = None +opt_qconfigdir = None +opt_pyqtbindir = sipcfg.default_bin_dir +opt_pyqtmoddir = sipcfg.default_mod_dir +opt_pyqtsipdir = sipcfg.default_sip_dir +opt_qtpetag = None +opt_qsciincdir = None +opt_qscilibdir = None +opt_static = 0 +opt_debug = 0 +opt_concat = 0 +opt_split = 1 +opt_tracing = 0 +opt_verbose = 0 +opt_keepfeatures = 0 + +opt_vendorcheck = 0 +opt_vendincdir = sipcfg.py_inc_dir +opt_vendlibdir = sipcfg.py_lib_dir + + +def usage(rcode = 2): + """Display a usage message and exit. + + rcode is the return code passed back to the calling process. + """ + if qt_dir: + def_qt_dir = qt_dir + else: + def_qt_dir = "none" + + sys.stdout.write("Usage:\n") + sys.stdout.write(" python configure.py [-h] [-a tag] [-b dir] [-c] [-d dir] [-f] [-g dir] [-i] [-j #] [-k] [-l dir] [-m dir] [-n dir] [-o dir] [-q dir] [-r] [-s] [-u] [-v dir] [-w] [-y lib] option=value option+=value ...\n") + sys.stdout.write("where:\n") + sys.stdout.write(" -h display this help message\n") + sys.stdout.write(" -a tag explicitly enable the qtpe module\n") + sys.stdout.write(" -b dir where pyuic and pylupdate will be installed [default %s]\n" % opt_pyqtbindir) + sys.stdout.write(" -c concatenate each module's C/C++ source files\n") + sys.stdout.write(" -d dir where the PyQt modules will be installed [default %\ns]" % opt_pyqtmoddir) + sys.stdout.write(" -f keep any existing features file (when cross-compiling) [default remove]\n") + sys.stdout.write(" -g dir where the Qt qconfig.h file can be found [default Qt include directory]\n") + sys.stdout.write(" -i enable checking of signed interpreters using the VendorID package [default disabled]\n") + sys.stdout.write(" -j # split the concatenated C++ source files into # pieces [default 1]\n") + sys.stdout.write(" -k build the PyQt modules as static libraries\n") + sys.stdout.write(" -l dir the directory containing the VendorID header file [default %s]\n" % opt_vendincdir) + sys.stdout.write(" -m dir the directory containing the VendorID library [default %s]\n" % opt_vendlibdir) + sys.stdout.write(" -n dir the directory containing the QScintilla header files [default Qt include directory]\n") + sys.stdout.write(" -o dir the directory containing the QScintilla library [default Qt lib directory]\n") + sys.stdout.write(" -q dir the root directory of the Qt installation [default %s]\n" % def_qt_dir) + sys.stdout.write(" -r generate code with tracing enabled [default disabled]\n") + sys.stdout.write(" -s QScintilla is a static library and not a DLL (Windows only)\n") + sys.stdout.write(" -u build with debugging symbols (requires a debug build of Python on Windows\n") + sys.stdout.write(" -v dir where the PyQt .sip files will be installed [default %s]\n" % opt_pyqtsipdir) + sys.stdout.write(" -w don't suppress compiler output during configuration\n") + sys.stdout.write(" -y lib explicitly specify the type of Qt library, either qt, qt-mt, qte, qte-mt or qtmt\n") + + sys.exit(rcode) + + +class ConfigureBase: + """This is the base class for all PyQt version specific configurer classes. + Anything here is common to all configurers. + """ + def check_modules(self): + """Check which modules should be built and add them to the global list. + + Returns the name of any additional library that needs to be linked with + the main module. + """ + return None + + def sip_flags(self): + """Get the configuration specific SIP flags. + + Returns a list of flags. + """ + return [] + + def qt_version_tags(self): + """Get the versions tags for the configuration. + + Returns a dictionary of versions and corresponding tags. + """ + return {} + + def code(self, extra_include_dirs, extra_lib_dir, extra_libs): + """Generate the code for a configuration. + + extra_include_dirs is a list of directories to add to those supplied by + the SIP configuration. + extra_lib_dir is an optional directory to add to those supplied by the + SIP configuration. + extra_lib_dirs is an optional list of directories to add to those + supplied by the SIP configuration. + """ + pass + + def tools(self): + """Create the Makefiles for any other sub-directories and return a list + of those directories. + + Returns a list of sub-directories with Makefile. + """ + return [] + + def module_dir(self): + """Return the configuration's module directory. + """ + return opt_pyqtmoddir + + def module_installs(self): + """Return a list of files to install in the module directory other than + the modules themselves. + """ + return ["pyqtconfig.py"] + + def sip_dir(self): + """Return the configuration's .sip files directory. + """ + return opt_pyqtsipdir + + +class ConfigurePyQt3(ConfigureBase): + """This class defines the methods to configure PyQt v3. + """ + def check_modules(self): + pyqt_modules.append("qt") + + check_module("qtcanvas", "qcanvas.h", "QCanvas()") + check_module("qtnetwork", "qsocket.h", "QSocket()") + check_module("qttable", "qtable.h", "QTable()") + check_module("qtxml", "qdom.h", "QDomImplementation()") + check_module("qtgl", "qgl.h", "QGLWidget()", opengl=1) + + if qt_version >= 0x030000: + check_module("qtui", "qwidgetfactory.h", "QWidgetFactory()", lib="qui") + + if qt_edition in ("enterprise", "free"): + check_module("qtsql", "qsql.h", "QSql()") + + if sys.platform == "win32" and sipcfg.sip_version >= 0x040200: + check_module("qtaxcontainer", "qaxobject.h", "QAxObject()", lib="qaxcontainer") + + if qsci_version: + check_module("qtext", "qextscintillabase.h", "QextScintillaBase()", define=qsci_define, include_dir=opt_qsciincdir, lib_dir=opt_qscilibdir, lib="qscintilla") + + if opt_qtpetag: + pyqt_modules.append("qtpe") + + qtmod_lib = None + + if qt_version >= 0x030100: + sipconfig.inform("Checking to see if the QAssistantClient class is available...") + + if check_class("qassistantclient.h", "QAssistantClient(\"foo\")", lib="qassistantclient"): + qtmod_lib = "qassistantclient" + else: + disabled_classes.append("QAssistantClient") + + return qtmod_lib + + def sip_flags(self): + return get_feature_flags() + + def qt_version_tags(self): + return { + 0x010403: None, + 0x020000: "Qt_1_43", + 0x020100: "Qt_2_00", + 0x020200: "Qt_2_1_0", + 0x020300: "Qt_2_2_0", + 0x020301: "Qt_2_3_0", + 0x030000: "Qt_2_3_1", + 0x030001: "Qt_3_0_0", + 0x030002: "Qt_3_0_1", + 0x030004: "Qt_3_0_2", + 0x030005: "Qt_3_0_4", + 0x030006: "Qt_3_0_5", + 0x030100: "Qt_3_0_6", + 0x030101: "Qt_3_1_0", + 0x030102: "Qt_3_1_1", + 0x030200: "Qt_3_1_2", + 0x030300: "Qt_3_2_0", + 0x030305: "Qt_3_3_0", + 0x030306: "Qt_3_3_5", + 0x040000: "Qt_3_3_6" + } + + def code(self, extra_include_dirs, extra_lib_dir, extra_libs): + generate_code("qt", extra_include_dirs=extra_include_dirs, extra_lib_dir=extra_lib_dir, extra_libs=extra_libs) + + if "qtext" in pyqt_modules: + generate_code("qtext", extra_define=qsci_define, extra_include_dirs=[opt_qsciincdir], extra_lib_dir=opt_qscilibdir, extra_libs=["qscintilla"], sip_flags=qtext_sip_flags) + + if "qtgl" in pyqt_modules: + generate_code("qtgl", opengl=1) + + if "qtpe" in pyqt_modules: + generate_code("qtpe", extra_libs=["qpe"], sip_flags=qtpe_sip_flags) + + if "qtui" in pyqt_modules: + generate_code("qtui", extra_libs=["qui"]) + + if "qtaxcontainer" in pyqt_modules: + generate_code("qtaxcontainer", extra_libs=["qaxcontainer"]) + + # The rest don't need special handling. + for m in ("qtcanvas", "qtnetwork", "qtsql", "qttable", "qtxml"): + if m in pyqt_modules: + generate_code(m) + + def tools(self): + tool_dirs = [] + + if qt_version >= 0x030000: + # The Professional Edition needs special handling. + prof = (qt_edition == "professional") + + sipconfig.inform("Creating pyuic Makefile...") + + if prof or "qtxml" not in pyqt_modules: + buildfile= "pyuic-prof.sbf" + + for xml in ("qdom.cpp", "qxml.cpp"): + shutil.copyfile(qt_dir + "/src/xml/" + xml, "pyuic3/" + xml) + else: + buildfile= "pyuic.sbf" + + makefile = sipconfig.ProgramMakefile( + configuration=sipcfg, + build_file=os.path.join(src_dir, "pyuic3", buildfile), + dir="pyuic3", + install_dir=opt_pyqtbindir, + console=1, + qt=1, + warnings=1 + ) + + makefile.extra_defines.append("UIC") + makefile.extra_defines.append("QT_INTERNAL_XML") + + if prof or "qtxml" not in pyqt_modules: + makefile.extra_defines.append("QT_MODULE_XML") + + if qt_version < 0x030100: + makefile.extra_include_dirs.append(qt_dir + "/src/3rdparty/zlib") + makefile.extra_include_dirs.append(os.path.join(src_dir, "pyuic3")) + + makefile.generate() + tool_dirs.append("pyuic3") + + sipconfig.inform("Creating pylupdate Makefile...") + + if prof or "qtxml" not in pyqt_modules: + buildfile= "pylupdate-prof.sbf" + + shutil.copyfile(qt_dir + "/src/xml/qxml.cpp", "pylupdate3/qxml.cpp") + else: + buildfile= "pylupdate.sbf" + + makefile = sipconfig.ProgramMakefile( + configuration=sipcfg, + build_file=os.path.join(src_dir, "pylupdate3", buildfile), + dir="pylupdate3", + install_dir=opt_pyqtbindir, + console=1, + qt=1, + warnings=1 + ) + + makefile.extra_defines.append("QT_INTERNAL_XML") + + if prof or "qtxml" not in pyqt_modules: + makefile.extra_defines.append("QT_MODULE_XML") + + makefile.extra_include_dirs.append(os.path.join(src_dir, "pylupdate3")) + + makefile.generate() + tool_dirs.append("pylupdate3") + elif qt_version >= 0x020000: + sipconfig.inform("Creating pyuic Makefile...") + + makefile = sipconfig.ProgramMakefile( + configuration=sipcfg, + build_file="pyuic.sbf", + dir="pyuic2", + install_dir=opt_pyqtbindir, + console=1, + qt=1, + warnings=1 + ) + + makefile.extra_defines.append("UIC") + makefile.extra_include_dirs.append(qt_dir + "/src/3rdparty/zlib") + + makefile.generate() + tool_dirs.append("pyuic2") + + return tool_dirs + + +def inform_user(): + """Tell the user the option values that are going to be used. + """ + if qt_edition: + edstr = qt_edition + " edition " + else: + edstr = "" + + sipconfig.inform("Qt v%s %sis being used." % (sipconfig.version_to_string(qt_version), edstr)) + sipconfig.inform("SIP %s is being used." % sipcfg.sip_version_str) + sipconfig.inform("These PyQt modules will be built: %s." % string.join(pyqt_modules)) + + if disabled_classes: + sipconfig.inform("Support for these Qt classes has been disabled: %s." % string.join(disabled_classes)) + + sipconfig.inform("The PyQt modules will be installed in %s." % opt_pyqtmoddir) + sipconfig.inform("The PyQt .sip files will be installed in %s." % opt_pyqtsipdir) + + sipconfig.inform("The Qt header files are in %s." % qt_incdir) + sipconfig.inform("The %s Qt library is in %s." % (opt_qtlib, qt_libdir)) + + if qt_version >= 0x020000: + sipconfig.inform("pyuic will be installed in %s." % opt_pyqtbindir) + + if qt_version >= 0x030000: + sipconfig.inform("pylupdate will be installed in %s." % opt_pyqtbindir) + + if opt_vendorcheck: + sipconfig.inform("PyQt will only be usable with signed interpreters.") + + +def create_config(module, template, macros): + """Create the PyQt configuration module so that it can be imported by build + scripts. + + module is the module file name. + template is the template file name. + macros is the dictionary of platform specific build macros. + """ + sipconfig.inform("Creating %s..." % module) + + content = { + "pyqt_config_args": sys.argv[1:], + "pyqt_version": pyqt_version, + "pyqt_version_str": pyqt_version_str, + "pyqt_bin_dir": opt_pyqtbindir, + "pyqt_mod_dir": opt_pyqtmoddir, + "pyqt_sip_dir": opt_pyqtsipdir, + "pyqt_modules": pyqt_modules, + "pyqt_qt_sip_flags": qt_sip_flags, + "qt_version": qt_version, + "qt_edition": qt_edition, + "qt_winconfig": qt_winconfig, + "qt_framework": 0, + "qt_threaded": qt_threaded, + "qt_dir": qt_dir, + "qt_inc_dir": qt_incdir, + "qt_lib": opt_qtlib, + "qt_lib_dir": qt_libdir + } + + if "qtaxcontainer" in pyqt_modules: + content["pyqt_qtaxcontainer_sip_flags"] = qt_sip_flags + + if "qtcanvas" in pyqt_modules: + content["pyqt_qtcanvas_sip_flags"] = qt_sip_flags + + if "qtext" in pyqt_modules: + content["pyqt_qtext_sip_flags"] = qtext_sip_flags + + # These are internal. + content["_pyqt_qscintilla_defines"] = qsci_define + content["_pyqt_qscintilla_inc_dir"] = opt_qsciincdir + content["_pyqt_qscintilla_lib_dir"] = opt_qscilibdir + + if "qtgl" in pyqt_modules: + content["pyqt_qtgl_sip_flags"] = qt_sip_flags + + if "qtnetwork" in pyqt_modules: + content["pyqt_qtnetwork_sip_flags"] = qt_sip_flags + + if "qtpe" in pyqt_modules: + content["pyqt_qtpe_sip_flags"] = qtpe_sip_flags + + if "qtsql" in pyqt_modules: + content["pyqt_qtsql_sip_flags"] = qt_sip_flags + + if "qttable" in pyqt_modules: + content["pyqt_qttable_sip_flags"] = qt_sip_flags + + if "qtui" in pyqt_modules: + content["pyqt_qtui_sip_flags"] = qt_sip_flags + + if "qtxml" in pyqt_modules: + content["pyqt_qtxml_sip_flags"] = qt_sip_flags + + sipconfig.create_config_module(module, template, content, macros) + + +def compile_qt_program(name, define=None, include_dir=None, lib_dir=None, lib=None, opengl=0, python=0, debug=0): + """Compile a simple Qt application. + + name is the name of the single source file. + define is a name to add to the list of preprocessor defines. + include_dir is the name of a directory to add to the list of include + directories. + lib_dir is the name of a directory to add to the list of library + directories. + lib is the name of a library to add to the list of libraries. + opengl is set if the application uses OpenGL. + python is set if the application #includes Python.h. + debug is set if this is a debug build. + + Returns the name of the executable suitable for running or None if it + wasn't created. + """ + makefile = sipconfig.ProgramMakefile(sipcfg, console=1, qt=1, warnings=0, opengl=opengl, python=python, debug=debug) + + if define: + makefile.extra_defines.append(define) + + if include_dir: + makefile.extra_include_dirs.append(include_dir) + + if lib_dir: + makefile.extra_lib_dirs.append(lib_dir) + + if lib: + makefile.extra_libs.append(lib) + + exe, build = makefile.build_command(name) + + # Make sure the executable file doesn't exist. + try: + os.remove(exe) + except OSError: + pass + + if not opt_verbose: + try: + import subprocess + + p = subprocess.Popen(build, shell=True, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + + fout = p.stdout + except ImportError: + _, fout = os.popen4(build) + + # Read stdout and stderr until there is no more output. + lout = fout.readline() + while lout: + lout = fout.readline() + + fout.close() + + try: + os.wait() + except: + pass + else: + os.system(build) + + if not os.access(exe, os.X_OK): + return None + + if sys.platform != "win32": + exe = "./" + exe + + return exe + + +def check_qscintilla(): + """See if QScintilla can be found and what its version is. + """ + # Set the defaults if they haven't been explicitly specified. + global opt_qsciincdir, opt_qscilibdir + + if opt_qsciincdir is None: + opt_qsciincdir = qt_incdir + + if opt_qscilibdir is None: + opt_qscilibdir = qt_libdir + + # Find the QScintilla header files. + sciglobal = os.path.join(opt_qsciincdir, "qextscintillaglobal.h") + + if os.access(sciglobal, os.F_OK): + # Get the QScintilla version number. + global qsci_version + + qsci_version, sciversstr = sipconfig.read_version(sciglobal, "QScintilla", "QSCINTILLA_VERSION", "QSCINTILLA_VERSION_STR") + + if glob.glob(os.path.join(opt_qscilibdir, "*qscintilla*")): + sipconfig.inform("QScintilla %s is being used." % sciversstr) + + # If we find a snapshot then set a negative version number as a + # special case. + if string.find(sciversstr, "snapshot") >= 0: + qsci_version = -1 + else: + sipconfig.inform("The QScintilla library could not be found in %s and so the qtext module will not be built. If QScintilla is installed then use the -o argument to explicitly specify the correct directory." % opt_qscilibdir) + else: + sipconfig.inform("qextscintillaglobal.h could not be found in %s and so the qtext module will not be built. If QScintilla is installed then use the -n argument to explicitly specify the correct directory." % opt_qsciincdir) + + +def check_vendorid(): + """See if the VendorID library and include file can be found. + """ + global opt_vendorcheck + + if opt_vendorcheck: + if os.access(os.path.join(opt_vendincdir, "vendorid.h"), os.F_OK): + if glob.glob(os.path.join(opt_vendlibdir, "*vendorid*")): + sipconfig.inform("The VendorID package was found.") + else: + opt_vendorcheck = 0 + sipconfig.inform("The VendorID library could not be found in %s and so signed interpreter checking will be disabled. If the VendorID library is installed then use the -m argument to explicitly specify the correct directory." % opt_vendlibdir) + else: + opt_vendorcheck = 0 + sipconfig.inform("vendorid.h could not be found in %s and so signed interpreter checking will be disabled. If the VendorID package is installed then use the -l argument to explicitly specify the correct directory." % opt_vendincdir) + + +def check_module(mname, incfile, ctor, define=None, include_dir=None, lib_dir=None, lib=None, opengl=0): + """See if a module can be built and, if so, add it to the global list of + modules. + + mname is the name of the module. + incfile is the name of the include file needed for the test. + ctor is the C++ constructor of the class being used for the test. + define is a name to add to the list of preprocessor defines. + include_dir is the name of a directory to add to the list of include + directories. + lib_dir is the name of a directory to add to the list of library + directories. + lib is the name of a library to add to the list of libraries. + opengl is set if the application uses OpenGL. + """ + # Check the module's main .sip file exists. + if os.access(os.path.join(src_dir, "sip", mname, mname + "mod.sip"), os.F_OK): + sipconfig.inform("Checking to see if the %s module should be built..." % mname) + + if check_class(incfile, ctor, define, include_dir, lib_dir, lib, opengl): + pyqt_modules.append(mname) + + +def check_class(incfile, ctor, define=None, include_dir=None, lib_dir=None, lib=None, opengl=0): + """Return non-zero if a class is available. + + incfile is the name of the include file needed for the test. + ctor is the C++ constructor of the class. + define is a name to add to the list of preprocessor defines. + include_dir is the name of a directory to add to the list of include + directories. + lib_dir is the name of a directory to add to the list of library + directories. + lib is the name of a library to add to the list of libraries. + opengl is set if the application uses OpenGL. + """ + cfgtest = "cfgtest.cpp" + + f = open(cfgtest, "w") + + f.write("""#include <%s> + +int main(int argc, char **argv) +{ + new %s; +} +""" % (incfile, ctor)) + + f.close() + + return compile_qt_program(cfgtest, define, include_dir, lib_dir, lib, opengl) + + +def check_plugin(cname, incfile): + """Return non-zero if a class that might be a plugin is in the main Qt + library. + + cname is the name of the class. + incfile is the name of the include file needed for the test. + """ + sipconfig.inform("Checking to see if the %s class is built in..." % cname) + + return check_class(incfile, cname + "()") + + +def create_features_file(name): + """Create the features file. + + name is the name of the features file in the current directory. + """ + # The features that a given Qt configuration may or may not support. Note + # that STYLE_WINDOWSXP and ASSISTANTCLIENT require special handling. + flist = ["ACTION", "CLIPBOARD", "CODECS", "COLORDIALOG", "DATASTREAM", + "DIAL", "DNS", "DOM", "DRAGANDDROP", "ICONVIEW", "IMAGE_TEXT", + "INPUTDIALOG", "FILEDIALOG", "FONTDATABASE", "FONTDIALOG", + "MESSAGEBOX", "MIMECLIPBOARD", + "NETWORKPROTOCOL", "NETWORKPROTOCOL_FTP", "NETWORKPROTOCOL_HTTP", + "PICTURE", "PRINTDIALOG", "PRINTER", "PROGRESSDIALOG", + "PROPERTIES", + "SEMIMODAL", "SIZEGRIP", "SOUND", "SPLITTER", "STYLE_CDE", + "STYLE_INTERLACE", "STYLE_MOTIF", "STYLE_MOTIFPLUS", + "STYLE_PLATINUM", "STYLE_SGI", "STYLE_WINDOWS", + "TABDIALOG", "TABLE", "TABLEVIEW", "TRANSFORMATIONS", + "TRANSLATION", "WIZARD", "WORKSPACE"] + + # Generate the program which will generate the features file. + f = open("mkfeatures.cpp", "w") + + f.write( +"""#include +#include +#include +#include + +int main(int argc,char **argv) +{ + FILE *fp; + QApplication app(argc,argv,0); + + if ((fp = fopen("%s","w")) == NULL) + { + printf("Unable to create '%s'\\n"); + return 1; + } + +#if !defined(WITH_THREAD) || !defined(QT_THREAD_SUPPORT) + fprintf(fp,"-x Qt_THREAD_SUPPORT\\n"); +#endif + +#if !defined(Q_WS_WIN) || QT_VERSION < 0x030000 || defined(QT_NO_STYLE_WINDOWSXP) + fprintf(fp,"-x Qt_STYLE_WINDOWSXP\\n"); +#endif + +#if defined(Q_OS_WIN64) + fprintf(fp,"-x Qt_Q_LONG_IS_long\\n"); +#endif +""" % (name, name)) + + for feat in flist: + f.write( +""" +#if defined(QT_NO_%s) + fprintf(fp,"-x Qt_%s\\n"); +#endif +""" % (feat, feat)) + + # Disable QAssistantClient for the Professional Edition. + if "QAssistantClient" in disabled_classes: + f.write( +""" + fprintf(fp,"-x Qt_ASSISTANTCLIENT\\n"); +""") + + f.write( +""" + fclose(fp); + + return 0; +} +""") + + f.close() + + # Build the program. + exe = compile_qt_program("mkfeatures.cpp", include_dir=sipcfg.py_inc_dir, python=1) + if not exe: + sipconfig.error("Unable to build mkfeatures utility.") + + os.system(exe) + + # Check the file was created. + if not os.access(name, os.F_OK): + sipconfig.error("There was an error creating the features file.") + + # Check what features have been implemented as plugins and disable them. + plugins = [("STYLE_CDE", "qcdestyle.h", "QCDEStyle"), + ("STYLE_INTERLACE", "qinterlacestyle.h", "QInterlaceStyle"), + ("STYLE_MOTIF", "qmotifstyle.h", "QMotifStyle"), + ("STYLE_MOTIFPLUS", "qmotifplusstyle.h", "QMotifPlusStyle"), + ("STYLE_PLATINUM", "qplatinumstyle.h", "QPlatinumStyle"), + ("STYLE_SGI", "qsgistyle.h", "QSGIStyle"), + ("STYLE_WINDOWSXP", "qwindowsxpstyle.h", "QWindowsXPStyle"), + ("STYLE_WINDOWS", "qwindowsstyle.h", "QWindowsStyle")] + + f = open(name, "a") + + for (feat, incfile, cname) in plugins: + if not check_plugin(cname, incfile): + f.write("-x Qt_%s\n" % feat) + disabled_classes.append(cname) + + f.close() + + +def get_feature_flags(): + """Return the list of SIP flags that exclude unsupported Qt features. + """ + featfile = "features" + + # Create the features file if it doesn't exist and we are not keeping it. + if opt_keepfeatures and os.access(featfile,os.F_OK): + sipconfig.inform("Using existing features file.") + else: + sipconfig.inform("Creating features file...") + create_features_file(featfile) + + # Parse the features file. + ff = open(featfile, "r") + + flags = [] + + line = ff.readline() + while line: + flags.extend(string.split(line)) + line = ff.readline() + + if sipcfg.sip_version >= 0x040702: + flags.extend(['-x', 'Qt_SIP_PRE_4_7_2']) + + return flags + + +def set_sip_flags(): + """Set the SIP platform, version and feature flags. + """ + qt_sip_flags.extend(pyqt.sip_flags()) + + # If we don't check for signed interpreters, we exclude the 'VendorID' + # feature + if not opt_vendorcheck: + qt_sip_flags.append("-x") + qt_sip_flags.append("VendorID") + + # Handle the platform tag. + if opt_qtpetag: + plattag = "WS_QWS" + elif sys.platform == "win32": + plattag = "WS_WIN" + elif sys.platform == "darwin": + if "__DARWIN_X11__" in sipcfg.build_macros()["DEFINES"]: + plattag = "WS_X11" + else: + plattag = "WS_MACX" + else: + plattag = "WS_X11" + + qt_sip_flags.append("-t") + qt_sip_flags.append(plattag) + + # Handle the Qt version tag. + verstag = sipconfig.version_to_sip_tag(qt_version, pyqt.qt_version_tags(), "Qt") + + if verstag: + qt_sip_flags.append("-t") + qt_sip_flags.append(verstag) + + # The flags so far are common. + for f in qt_sip_flags: + qtext_sip_flags.append(f) + qtpe_sip_flags.append(f) + + # Handle the QScintilla version tag. + if qsci_version: + qscitags = { + 0x010100: None, + 0x010200: "QScintilla_1_1", + 0x010300: "QScintilla_1_2", + 0x010400: "QScintilla_1_3", + 0x010500: "QScintilla_1_4", + 0x010600: "QScintilla_1_5", + 0x010700: "QScintilla_1_6", + 0x020000: "QScintilla_1_7" + } + + verstag = sipconfig.version_to_sip_tag(qsci_version, qscitags, "QScintilla") + + if verstag: + qtext_sip_flags.append("-t") + qtext_sip_flags.append(verstag) + + # Handle the Qtopia tag. + if opt_qtpetag: + qtpe_sip_flags.append("-t") + qtpe_sip_flags.append(opt_qtpetag) + + +def generate_code(mname, extra_cflags=None, extra_cxxflags=None, extra_define=None, extra_include_dirs=None, extra_lflags=None, extra_lib_dir=None, extra_libs=None, opengl=0, sip_flags=None): + """Generate the code for a module. + + mname is the name of the module. + extra_cflags is a string containing additional C compiler flags. + extra_cxxflags is a string containing additional C++ compiler flags. + extra_define is a name to add to the list of preprocessor defines. + extra_include_dirs is a list of directories to add to the list of include + directories. + extra_lflags is a string containing additional linker flags. + extra_lib_dir is the name of a directory to add to the list of library + directories. + extra_libs is a list of the names of extra libraries to add to the list of + libraries. + opengl is set if the module needs OpenGL support. + sip_flags is the list of sip flags to use instead of the defaults. + """ + sipconfig.inform("Generating the C++ source for the %s module..." % mname) + + try: + shutil.rmtree(mname) + except: + pass + + try: + os.mkdir(mname) + except: + sipconfig.error("Unable to create the %s directory." % mname) + + # Build the SIP command line. + argv = ['"' + sipcfg.sip_bin + '"'] + + if sip_flags is None: + sip_flags = qt_sip_flags + + argv.extend(sip_flags) + + if opt_concat: + argv.append("-j") + argv.append(str(opt_split)) + + if opt_tracing: + argv.append("-r") + + argv.append("-c") + argv.append(mname) + + buildfile = os.path.join(mname, mname + ".sbf") + argv.append("-b") + argv.append(buildfile) + + argv.append("-I") + argv.append(os.path.join(src_dir, "sip")) + + # SIP assumes POSIX style path separators. + argv.append(string.join([src_dir, "sip", mname, mname + "mod.sip"], "/")) + + os.system(string.join(argv)) + + # Check the result. + if not os.access(buildfile, os.F_OK): + sipconfig.error("Unable to create the C++ code.") + + # Generate the Makefile. + sipconfig.inform("Creating the Makefile for the %s module..." % mname) + + installs = [] + sipfiles = [] + + for s in glob.glob("sip/" + mname + "/*.sip"): + sipfiles.append(os.path.join(src_dir, "sip", mname, os.path.basename(s))) + + installs.append([sipfiles, os.path.join(pyqt.sip_dir(), mname)]) + + makefile = sipconfig.SIPModuleMakefile( + configuration=sipcfg, + build_file=mname + ".sbf", + dir=mname, + install_dir=pyqt.module_dir(), + installs=installs, + qt=1, + opengl=opengl, + warnings=1, + static=opt_static, + debug=opt_debug + ) + + if extra_cflags: + makefile.extra_cflags.append(extra_cflags) + + if extra_cxxflags: + makefile.extra_cxxflags.append(extra_cxxflags) + + if extra_define: + makefile.extra_defines.append(extra_define) + + if extra_include_dirs: + makefile.extra_include_dirs.extend(extra_include_dirs) + + if extra_lflags: + makefile.extra_lflags.append(extra_lflags) + + if extra_lib_dir: + makefile.extra_lib_dirs.append(extra_lib_dir) + + if extra_libs: + makefile.extra_libs.extend(extra_libs) + + makefile.generate() + + +def check_license(): + """Handle the validation of the PyQt license. + """ + try: + import license + ltype = license.LicenseType + lname = license.LicenseName + + try: + lfile = license.LicenseFile + except AttributeError: + lfile = None + except ImportError: + ltype = None + + if ltype is None: + ltype = "GPL" + lname = "GNU General Public License" + lfile = None + + sipconfig.inform("This is the %s version of PyQt %s (licensed under the %s) for Python %s on %s." % (ltype, pyqt_version_str, lname, string.split(sys.version)[0], sys.platform)) + + # Common checks. + if ltype == "GPL" and sys.platform == "win32": + error("You cannot use the GPL version of PyQt under Windows.") + + try: + qted = qt_edition + except AttributeError: + qted = None + + if qted and ltype != "internal": + if (qted == "free" and ltype != "GPL") or (qted != "free" and ltype == "GPL"): + sipconfig.error("This version of PyQt and the %s edition of Qt have incompatible licenses." % qted) + + # Confirm the license. + sys.stdout.write(""" +Type 'L' to view the license. +Type 'yes' to accept the terms of the license. +Type 'no' to decline the terms of the license. + +""") + + while 1: + try: + resp = raw_input("Do you accept the terms of the license? ") + except: + resp = "" + + resp = string.lower(string.strip(resp)) + + if resp == "yes": + break + + if resp == "no": + sys.exit(0) + + if resp == "l": + os.system("more LICENSE") + + # If there should be a license file then check it is where it should be. + if lfile: + if os.access(os.path.join("sip", lfile), os.F_OK): + sipconfig.inform("Found the license file %s." % lfile) + else: + sipconfig.error("Please copy the license file %s to the sip directory." % lfile) + + +def get_build_macros(overrides): + """Return the dictionary of platform specific build macros from the Qt + installation. Return None if any of the overrides was invalid. + + overrides is a list of macros overrides from the user. + """ + # Get the name of the qmake configuration file to take the macros from. + if "QMAKESPEC" in os.environ.keys(): + fname = os.path.join(qt_dir, "mkspecs", os.environ["QMAKESPEC"], "qmake.conf") + else: + fname = os.path.join(qt_dir, "mkspecs", "default", "qmake.conf") + + if not os.access(fname, os.F_OK): + sipconfig.error("Unable to find the default configuration file %s. You can use the QMAKESPEC environment variable to specify the correct platform instead of \"default\"." % fname) + + # Add the Qt specific macros to the default. + names = sipcfg.build_macros().keys() + names.append("INCDIR_QT") + names.append("LIBDIR_QT") + names.append("MOC") + + # Make sure $QTDIR reflects any directory passed on the command line. + os.environ["QTDIR"] = qt_dir + + properties = { + "QT_INSTALL_BINS": os.path.join(qt_dir, "bin"), + "QT_INSTALL_HEADERS": os.path.join(qt_dir, "include"), + "QT_INSTALL_LIBS": os.path.join(qt_dir, "lib") + } + + return sipconfig.parse_build_macros(fname, names, overrides, properties) + + +def check_qt_installation(macros): + """Check the Qt installation and get the version number and edition. + + macros is the dictionary of build macros. + """ + # Get the Makefile generator. + generator = macros["MAKEFILE_GENERATOR"] + + # Set the Qt include and lib directories. + global qt_incdir, qt_libdir + + qt_incdir = macros["INCDIR_QT"] + + if not qt_incdir: + qt_incdir = os.path.join(qt_dir, "include") + macros["INCDIR_QT"] = qt_incdir + + qt_libdir = macros["LIBDIR_QT"] + + if not qt_libdir: + qt_libdir = os.path.join(qt_dir, "lib") + macros["LIBDIR_QT"] = qt_libdir + + # Check the Qt header files have been installed. Quietly check for Qt v4. + qt4_d = os.path.join(qt_incdir, "QtCore") + + qglobal = os.path.join(qt4_d, "qglobal.h") + + if not os.access(qglobal, os.F_OK): + qglobal = os.path.join(qt_incdir, "qglobal.h") + + if not os.access(qglobal, os.F_OK): + sipconfig.error("qglobal.h could not be found in %s." % qt_incdir) + + # Get the Qt version number. + global qt_version + + qt_version, ignore = sipconfig.read_version(qglobal, "Qt", "QT_VERSION") + + # Early versions of Qt for the Mac didn't include everything. Rather than + # maintain these in the future we just mandate a later version. + if sys.platform == "darwin" and qt_version < 0x030100: + sipconfig.error("PyQt for MacOS/X requires Qt v3.1.0 or later.") + + # The way SIP v4.2 and later handle connections between signals and Python + # slots only works with Qt v3 and later. Therefore Qt v2 and earlier needs + # SIP v3. + if qt_version < 0x030000: + sipconfig.error("Qt v2.x and earlier require SIP v3.x.") + + if qt_version >= 0x040000: + sipconfig.error("Qt v4.x requires PyQt v4.x.") + + # Try and work out which edition it is. + global qt_edition + + if qt_version >= 0x030000: + if opt_qconfigdir: + qconfigdir = opt_qconfigdir + else: + qconfigdir = qt_incdir + + qconfig = os.path.join(qconfigdir, "qconfig.h") + + if not os.access(qconfig,os.F_OK): + sipconfig.error("qconfig.h could not be found in %s." % qconfigdir) + + f = open(qconfig) + l = f.readline() + + while l: + wl = string.split(l) + if len(wl) == 3 and wl[0] == "#define" and wl[1] == "QT_PRODUCT_LICENSE": + qt_edition = wl[2][4:-1] + break + + l = f.readline() + + f.close() + + if not qt_edition: + sipconfig.error("The Qt edition could not be determined by parsing %s." % qconfig) + elif qt_version == 0x020300 and sys.platform == "win32": + # See if we have the Qt v2 non-commercial version. + if os.access(os.path.join(qt_libdir, "qt-mt230nc.lib"), os.F_OK): + qt_edition = "non-commercial" + + if sys.platform == "win32": + # Work out how Qt was built on Windows. + + global qt_winconfig + + try: + f = open(os.path.join(qt_dir, ".qtwinconfig"), "r") + except IOError: + f = None + + if f: + cfg = f.readline() + f.close() + + val = string.find(cfg, "=") + + if val >= 0: + qt_winconfig = string.strip(cfg[val + 1:]) + else: + # Assume it was built as a DLL. + qt_winconfig = "shared" + + # Determine the Qt library to link against and if it has thread support. + global qt_threaded + + resolve_qt3_library(generator) + + if opt_qtlib in ("qt-mt", "qt-mtedu", "qt-mteval", "qte-mt", "qtmt", "qtmtedu", "qtmteval"): + qt_threaded = 1 + + global pyqt + + pyqt = ConfigurePyQt3() + + # We haven't yet factored out sipconfig's knowledge of how to build Qt + # binaries and it is expecting to find these in the configuration when it + # generates the Makefiles. + sipcfg.qt_version = qt_version + sipcfg.qt_edition = qt_edition + sipcfg.qt_winconfig = qt_winconfig + sipcfg.qt_framework = 0 + sipcfg.qt_threaded = qt_threaded + sipcfg.qt_dir = qt_dir + sipcfg.qt_lib = opt_qtlib + sipcfg.qt_lib_dir = qt_libdir + + +def resolve_qt3_library(generator): + """See which version of the Qt v3 library can be found. (We can't trust + the configuration files.) + + generator is the name of the Makefile generator. + """ + global opt_qtlib + + if opt_qtlib: + if not is_qt_library(generator, opt_qtlib): + sipconfig.error("The %s Qt library could not be found in %s." % (opt_qtlib, qt_libdir)) + else: + stlib = is_qt_library(generator, "qt") + mtlib = is_qt_library(generator, "qt-mt") + edlib = is_qt_library(generator, "qt-mtedu") + evlib = is_qt_library(generator, "qt-mteval") + emlib = is_qt_library(generator, "qte") + etlib = is_qt_library(generator, "qte-mt") + + # Borland likes to be a little different. + bmtlib = is_qt_library(generator, "qtmt") + bedlib = is_qt_library(generator, "qtmtedu") + bevlib = is_qt_library(generator, "qtmteval") + + names = [] + + if stlib: + opt_qtlib = "qt" + names.append(opt_qtlib) + + if mtlib: + opt_qtlib = "qt-mt" + names.append(opt_qtlib) + + if edlib: + opt_qtlib = "qt-mtedu" + names.append(opt_qtlib) + + if evlib: + opt_qtlib = "qt-mteval" + names.append(opt_qtlib) + + if emlib: + opt_qtlib = "qte" + names.append(opt_qtlib) + + if etlib: + opt_qtlib = "qte-mt" + names.append(opt_qtlib) + + if bmtlib: + opt_qtlib = "qtmt" + names.append(opt_qtlib) + + if bedlib: + opt_qtlib = "qtmtedu" + names.append(opt_qtlib) + + if bevlib: + opt_qtlib = "qtmteval" + names.append(opt_qtlib) + + if not names: + sipconfig.error("No Qt libraries could be found in %s." % qt_libdir) + + if len(names) > 1: + sipconfig.error("These Qt libraries were found: %s. Use the -y argument to explicitly specify which you want to use." % string.join(names)) + + +def is_qt_library(generator, lib): + """See if a particular Qt library is installed. + + generator is the name of the Makefile generator. + lib is the name of the library. + """ + if generator in ("MSVC", "MSVC.NET", "BMAKE"): + lpatts = [lib + "[0-9]*.lib", lib + ".lib"] + else: + lpatts = ["lib" + lib + ".*"] + + for lpatt in lpatts: + lmatch = glob.glob(os.path.join(qt_libdir, lpatt)) + + if lmatch: + return lmatch + + return [] + + +def main(argv): + """Create the configuration module module. + + argv is the list of command line arguments. + """ + # Check Python isn't too new. + if sipcfg.py_version >= 0x030000: + sipconfig.error("PyQt v3.x does not support Python v3.x") + + # Check SIP is new enough. + if sipcfg.sip_version_str[:8] != "snapshot": + if sipcfg.sip_version < sip_min_version: + sipconfig.error("This version of PyQt requires SIP v%s or later" % sipconfig.version_to_string(sip_min_version)) + + # Parse the command line. + try: + optlist, args = getopt.getopt(argv[1:], "ha:b:cd:fg:ij:kl:m:n:o:q:rsuv:wy:") + except getopt.GetoptError: + usage() + + global qt_dir, opt_qtlib, opt_qconfigdir + global opt_pyqtbindir, opt_pyqtmoddir, opt_pyqtsipdir + global opt_qtpetag, opt_static, opt_debug, opt_concat + global opt_split, opt_tracing, opt_verbose, opt_keepfeatures + global opt_qsciincdir, opt_qscilibdir, qsci_define + global opt_vendorcheck, opt_vendincdir, opt_vendlibdir + + for opt, arg in optlist: + if opt == "-h": + usage(0) + elif opt == "-a": + opt_qtpetag = arg + elif opt == "-b": + opt_pyqtbindir = os.path.abspath(arg) + elif opt == "-c": + opt_concat = 1 + elif opt == "-d": + opt_pyqtmoddir = os.path.abspath(arg) + elif opt == "-f": + opt_keepfeatures = 1 + elif opt == "-g": + opt_qconfigdir = os.path.abspath(arg) + elif opt == "-i": + opt_vendorcheck = 1 + elif opt == "-j": + try: + opt_split = int(arg) + except: + usage() + elif opt == "-k": + opt_static = 1 + elif opt == "-l": + opt_vendincdir = arg + elif opt == "-m": + opt_vendlibdir = arg + elif opt == "-n": + opt_qsciincdir = arg + elif opt == "-o": + opt_qscilibdir = arg + elif opt == "-q": + qt_dir = os.path.abspath(arg) + elif opt == "-r": + opt_tracing = 1 + elif opt == "-s": + qsci_define = "" + elif opt == "-u": + opt_debug = 1 + elif opt == "-v": + opt_pyqtsipdir = os.path.abspath(arg) + elif opt == "-w": + opt_verbose = 1 + elif opt == "-y": + if arg in ("qt", "qt-mt", "qt-mtedu", "qt-mteval", "qte", "qte-mt", "qtmt", "qtmtedu"): + opt_qtlib = arg + else: + usage() + + # Check that we know the name of the Qt root directory. + if not qt_dir: + sipconfig.error("A Qt installation could not be found. Use use the -q argument or the QTDIR environment variable to explicitly specify the correct directory.") + + # When building static libraries, signed interpreter checking makes no + # sense. + if opt_vendorcheck and opt_static: + sipconfig.error("Using the VendorID package when building static libraries makes no sense.") + + # Replace the existing build macros with the ones from the Qt installation. + macros = get_build_macros(args) + + if macros is None: + usage() + + sipcfg.set_build_macros(macros) + + # Check Qt is what we need. + check_qt_installation(macros) + + # Check the licenses are compatible. + check_license() + + # Check for QScintilla. + check_qscintilla() + + # Check which modules to build. + qtmod_lib = pyqt.check_modules() + + # Check for the VendorID package. + check_vendorid() + + # Set the SIP platform, version and feature flags. + set_sip_flags() + + # Tell the user what's been found. + inform_user() + + # Generate the code. + + extra_include_dirs = [] + extra_libs = [] + + if qtmod_lib: + extra_libs.append(qtmod_lib) + + if opt_vendorcheck: + extra_include_dirs.append(opt_vendincdir) + extra_lib_dir = opt_vendlibdir + extra_libs.append("vendorid") + else: + extra_lib_dir = None + + pyqt.code(extra_include_dirs, extra_lib_dir, extra_libs) + + # Create the additional Makefiles. + sipconfig.inform("Creating top level Makefile...") + + sipconfig.ParentMakefile( + configuration=sipcfg, + subdirs=pyqt_modules + pyqt.tools(), + installs=(pyqt.module_installs(), pyqt.module_dir()) + ).generate() + + # Install the configuration module. + create_config("pyqtconfig.py", os.path.join(src_dir, "pyqtconfig.py.in"), macros) + + +############################################################################### +# The script starts here. +############################################################################### + +if __name__ == "__main__": + try: + main(sys.argv) + except SystemExit: + raise + except: + sys.stderr.write( +"""An internal error occured. Please report all the output from the program, +including the following traceback, to support@riverbankcomputing.co.uk. +""") + raise diff --git a/doc/PyQt.html b/doc/PyQt.html new file mode 100644 index 0000000..a7fb2ab --- /dev/null +++ b/doc/PyQt.html @@ -0,0 +1,12845 @@ + +Python Bindings for Qt (3.18.1)

Python Bindings for Qt (3.18.1)

Phil Thompson

This document describes a set of Python bindings for the Qt widget set. + Contact the author at <phil@riverbankcomputing.co.uk>. +


Introduction

PyQt is a set of Python bindings for the Qt toolkit and available for all +platforms supported by Qt, including Windows, Linux, UNIX, MacOS/X and embedded +systems such as the Sharp Zaurus and the Compaq iPAQ. They have been tested +against Qt versions 1.43 to 3.3.7, Qt Non-commercial, Qtopia 1.5.0, and Python +versions 1.5 to 2.5. Qt/Embedded v3 is not supported. Qt v4 is supported +by PyQt v4.

PyQt is available under the GPL license for use with the GPL version of Qt, a +a commercial license for use with the commercial version of Qt, a +non-commercial license for use with the non-commercial version of Qt v2, and an +educational license for use with the educational version of Qt.

PyQt is built using SIP (a tool for generating Python extension modules for +C++ class libraries). SIP v4.6 or later must be installed in order to build +and run this version of PyQt.

PyQt for MacOS/X requires Qt v3.1.0 or later and Python v2.3 or later.

The bindings are implemented as a number of Python modules

  • qt is the main module and contains the core classes and most +user interface widgets.

  • qtaxcontainer contains a sub-set of the classes implemented +in Qt's QAxContainer module, part of Qt's ActiveQt framework.

  • qtcanvas contains the classes implemented in Qt's Canvas +module.

  • qtgl contains the classes implemented in Qt's OpenGL module.

  • qtnetwork contains the classes implemented in Qt's Network +module.

  • qtpe contains the classes implemented in Qtopia (originally +called the Qt Palmtop Environment). It is only supported with Qt/Embedded.

  • qtsql contains the classes implemented in Qt's SQL module.

  • qttable contains the classes implemented in Qt's Table +module.

  • qtui contains the classes implemented in Qt's qui library. +These allow GUIs to be created directly from Qt Designer's +.ui files.

  • qtxml contains the classes implemented in Qt's XML module.

  • qtext contains useful third-party classes that are not part +of Qt. At the moment it contains bindings for QScintilla, the port to Qt of +the Scintilla programmer's editor class.

PyQt also includes the pyuic and +pylupdate utilities which correspond to the Qt +uic and lupdate utilities. +pyuic converts the GUI designs created with Qt Designer to +executable Python code. pylupdate scans Python code, +extracts all strings that are candidates for internationalisation, and creates +an XML file for use by Qt Linguist.

+
+

Other PyQt Goodies

Using Qt Designer

Qt Designer is a GPL'ed GUI design editor provided by Trolltech as part of Qt. +It generates an XML description of a GUI design. Qt includes +uic which generates C++ code from that XML.

PyQt includes pyuic which generates Python code from the +same XML. The Python code is self contained and can be executed immediately.

It is sometimes useful to be able to include some specific Python code in the +output generated by pyuic. For example, if you are using +custom widgets, pyuic has no way of knowing the name of the +Python module containing the widget and so cannot generate the required +import statement. To help get around this, +pyuic will extract any lines entered in the +Comment field of Qt Designer's +Form Settings dialog that begin with +Python: and copies them to the generated output.

Here's a simple example showing the contents of the Comment +field.

This comment will be ignored by pyuic.
+Python:
+Python:# Import our custom widget.
+Python:from foo import bar

Here's the corresponding output from pyuic.

from qt import *
+
+# Import our custom widget.
+from foo import bar

Thanks to Christian Bird, pyuic will extract Python code +entered using Qt Designer to implement slots. In Qt Designer, when you need to +edit a slot and the source editor appears, enter Python code between the curly +braces. Don't worry about the correct starting indent level, each line is +prepended with a correct indentation.

Make sure that the ui.h file is in the same directory as the +.ui file when using pyuic. The +.ui file implies the name of the .ui.h +file so there is no need to specify it on the command line.

Here's an example of a simple slot.

void DebMainWindowFrm::browsePushButtonClicked()
+{
+if self.debugging:
+    QMessageBox.critical(self, "Event", "browse pushbutton was clicked!")
+}

Here is the resulting code when pyuic is run.

class DebMainWindowFrm(QMainWindow):
+    ...stuff...
+    def browsePushButtonClicked(self):
+        if self.debugging:
+            QMessageBox.critical(self, "Event", "browse pushbutton was clicked!")

Note that indenting is as normal and that self and all other +parameters passed to the slot are available.

If you use this, you will need to turn off all of the fancy options for the C++ +editor in Designer as it tries to force C++ syntax and that's naturally +annoying when trying to code in Python.


Using Qt Linguist

Qt includes the lupdate program which parses C++ source +files converting calls to the QT_TR_NOOP() and +QT_TRANSLATE_NOOP() macros to .ts +language source files. The lrelease program is then used to +generate .qm binary language files that are distributed with +your application.

Thanks to Detlev Offenbach, PyQt includes the pylupdate +program. This generates the same .ts language source files +from your PyQt source files.


Deploying Commercial PyQt Applications

When deploying commercial PyQt applications it is necessary to discourage users +from accessing the underlying PyQt modules for themselves. A user that used +the modules shipped with your application to develop new applications would +themselves be considered a developer and would need their own commercial Qt and +PyQt licenses.

One solution to this problem is the +VendorID +package. This allows you to build Python extension modules that can only be +imported by a digitally signed custom interpreter. The package enables you to +create such an interpreter with your application embedded within it. The +result is an interpreter that can only run your application, and PyQt modules +that can only be imported by that interpreter. You can use the package to +similarly restrict access to any extension module.

In order to build PyQt with support for the VendorID package, pass the +-i command line flag to configure.py.


pyqtconfig and Build System Support

The SIP build system (ie. the sipconfig module) is described +in the SIP documentation. PyQt includes the pyqtconfig +module that can be used by configuration scripts of other bindings that are +built on top of PyQt.

The pyqtconfig module contains the following classes:

Configuration(sipconfig.Configuration)

This class encapsulates additional configuration values, specific to PyQt, that +can be accessed as instance variables.

The following configuration values are provided (in addition to those provided +by the sipconfig.Configuration class):

pyqt_bin_dir

The name of the directory containing the pyuic and +pylupdate executables.

pyqt_mod_dir

The name of the directory containing the PyQt modules.

pyqt_modules

A string containing the names of the PyQt modules that were installed.

pyqt_qt_sip_flags

A string of the SIP flags used to generate the code for the +qt module and which should be added to those needed by any +module that imports the qt module.

pyqt_qtaxcontainer_sip_flags

A string of the SIP flags used to generate the code for the +qtaxcontainer module and which should be added to those +needed by any module that imports the qtaxcontainer module.

pyqt_qtcanvas_sip_flags

A string of the SIP flags used to generate the code for the +qtcanvas module and which should be added to those needed by +any module that imports the qtcanvas module.

pyqt_qtext_sip_flags

A string of the SIP flags used to generate the code for the +qtext module and which should be added to those needed by +any module that imports the qtext module.

pyqt_qtgl_sip_flags

A string of the SIP flags used to generate the code for the +qtgl module and which should be added to those needed by any +module that imports the qtgl module.

pyqt_qtnetwork_sip_flags

A string of the SIP flags used to generate the code for the +qtnetwork module and which should be added to those needed +by any module that imports the qtnetwork module.

pyqt_qtsql_sip_flags

A string of the SIP flags used to generate the code for the +qtsql module and which should be added to those needed by +any module that imports the qtsql module.

pyqt_qttable_sip_flags

A string of the SIP flags used to generate the code for the +qttable module and which should be added to those needed by +any module that imports the qttable module.

pyqt_qtui_sip_flags

A string of the SIP flags used to generate the code for the +qtui module and which should be added to those needed by any +module that imports the qtui module.

pyqt_qtxml_sip_flags

A string of the SIP flags used to generate the code for the +qtxml module and which should be added to those needed by +any module that imports the qtxml module.

pyqt_sip_dir

The name of the base directory where the .sip files for each +of the PyQt modules is installed. A sub-directory exists with the same name as +the module.

pyqt_version

The PyQt version as a 3 part hexadecimal number (eg. v3.10 is represented as +0x030a00).

pyqt_version_str

The PyQt version as a string. For development snapshots it will start with +snapshot-.

QtModuleMakefile(sipconfig.SIPModuleMakefile)

The Makefile class for modules that import the qt module.

finalise(self)

This is a reimplementation of sipconfig.Makefile.finalise().

QtAxContainerModuleMakefile(QtModuleMakefile)

The Makefile class for modules that import the qtaxcontainer +module.

finalise(self)

This is a reimplementation of sipconfig.Makefile.finalise().

QtCanvasModuleMakefile(QtModuleMakefile)

The Makefile class for modules that import the qtcanvas +module.

finalise(self)

This is a reimplementation of sipconfig.Makefile.finalise().

QtExtModuleMakefile(QtModuleMakefile)

The Makefile class for modules that import the qtext module.

finalise(self)

This is a reimplementation of sipconfig.Makefile.finalise().

QtGLModuleMakefile(QtModuleMakefile)

The Makefile class for modules that import the qtgl module.

finalise(self)

This is a reimplementation of sipconfig.Makefile.finalise().

QtNetworkModuleMakefile(QtModuleMakefile)

The Makefile class for modules that import the qtnetwork +module.

finalise(self)

This is a reimplementation of sipconfig.Makefile.finalise().

QtTableModuleMakefile(QtModuleMakefile)

The Makefile class for modules that import the qttable +module.

finalise(self)

This is a reimplementation of sipconfig.Makefile.finalise().

QtSQLModuleMakefile(QtTableModuleMakefile)

The Makefile class for modules that import the qtsql module.

finalise(self)

This is a reimplementation of sipconfig.Makefile.finalise().

QtUIModuleMakefile(QtModuleMakefile)

The Makefile class for modules that import the qtui module.

finalise(self)

This is a reimplementation of sipconfig.Makefile.finalise().

QtXMLModuleMakefile(QtModuleMakefile)

The Makefile class for modules that import the qtxml module.

finalise(self)

This is a reimplementation of sipconfig.Makefile.finalise().


Things to be Aware Of

super and Wrapped Classes

Internally PyQt implements a lazy technique for attribute lookup where +attributes are only placed in type and instance dictionaries when they are +first referenced. This technique is needed to reduce the time taken to import +large modules such as PyQt.

In most circumstances this technique is transparent to an application. The +exception is when super is used with a PyQt class. The way +that super is currently implemented means that the lazy +lookup is bypassed resulting in AttributeError exceptions +unless the attribute has been previously referenced.

Note that this restriction applies to any class wrapped by SIP and not just +PyQt.


Python Strings, Qt Strings and Unicode

Unicode support was added to Qt in v2.0 and to Python in v1.6. In Qt, Unicode +support is implemented using the QString class. It is +important to understand that QStrings, Python string objects +and Python Unicode objects are all different but conversions between them are +automatic in many cases and easy to achieve manually when needed.

Whenever PyQt expects a QString as a function argument, a +Python string object or a Python Unicode object can be provided instead, and +PyQt will do the necessary conversion automatically.

You may also manually convert Python string and Unicode objects to +QStrings by using the QString constructor +as demonstrated in the following code fragment.

qs1 = QString('Converted Python string object')
+qs2 = QString(u'Converted Python Unicode object')

In order to convert a QString to a Python string object use +the Python str() function. Applying +str() to a null QString and an empty +QString both result in an empty Python string object.

In order to convert a QString to a Python Unicode object use +the Python unicode() function. Applying +unicode() to a null QString and an empty +QString both result in an empty Python Unicode object.


Access to Protected Member Functions

When an instance of a C++ class is not created from Python it is not possible +to access the protected member functions, or emit the signals, of that +instance. Attempts to do so will raise a Python exception. Also, any Python +methods corresponding to the instance's virtual member functions will never be +called.


None and NULL

Throughout the bindings, the None value can be specified +wherever NULL is acceptable to the underlying C++ code.

Equally, NULL is converted to None +whenever it is returned by the underlying C++ code.


Support for C++ void * Data Types

PyQt represents void * values as objects of type +sip.voidptr. Such values are often used to pass the +addresses of external objects between different Python modules. To make this +easier, a Python integer (or anything that Python can convert to an integer) +can be used whenever a sip.voidptr is expected.

A sip.voidptr may be converted to a Python integer by using +the int() builtin function.

A sip.voidptr may be converted to a Python string by using +its asstring() method. The asstring() +method takes an integer argument which is the length of the data in bytes.


Support for Threads

PyQt implements the full set of Qt's thread classes. Python, of course, also +has its own thread extension modules. If you are using SIP v4 (or later) and +Python v2.3.5 (or later) then PyQt does not impose any additional restrictions. +(Read the relevant part of the Qt documentation to understand the restrictions +imposed by the Qt API.)

If you are using earlier versions of either SIP or Python then it is possible +to use either of the APIs so long as you follow some simple rules.

  • If you use the Qt API then the very first import of one of +the PyQt modules must be done from the main thread.

  • If you use the Python API then all calls to PyQt (including any +imports) must be done from one thread only. Therefore, if +you want to make calls to PyQt from several threads then you must use the Qt +API.

  • If you want to use both APIs in the same application then all calls to PyQt +must be done from threads created using the Qt API.

The above comments actually apply to any SIP generated module, not just PyQt.


Garbage Collection

C++ does not garbage collect unreferenced class instances, whereas Python does. +In the following C++ fragment both colours exist even though the first can no +longer be referenced from within the program:

c = new QColor();
+c = new QColor();

In the corresponding Python fragment, the first colour is destroyed when +the second is assigned to c:

c = QColor()
+c = QColor()

In Python, each colour must be assigned to different names. Typically this +is done within class definitions, so the code fragment would be something like:

self.c1 = QColor()
+self.c2 = QColor()

Sometimes a Qt class instance will maintain a pointer to another instance and +will eventually call the destructor of that second instance. The most common +example is that a QObject (and any of its sub-classes) keeps +pointers to its children and will automatically call their destructors. In +these cases, the corresponding Python object will also keep a reference to the +corresponding child objects.

So, in the following Python fragment, the first QLabel is +not destroyed when the second is assigned to l because the +parent QWidget still has a reference to it.

p = QWidget()
+l = QLabel('First label',p)
+l = QLabel('Second label',p)

C++ Variables

Access to C++ variables is supported. They are accessed as Python instance +variables. For example:

tab = QTab()
+tab.label = "First Tab"
+tab.r = QRect(10,10,75,30)

Global variables and static class variables are effectively read-only. They +can be assigned to, but the underlying C++ variable will not be changed. This +may change in the future.

Access to protected C++ class variables is not supported. This may change in +the future.


Multiple Inheritance

It is not possible to define a new Python class that sub-classes from more than +one Qt class.


i18n Support

Qt implements i18n support through the Qt Linguist application, the +QTranslator class, and the +QApplication::translate(), QObject::tr() +and QObject::trUtf8() methods. Usually the +tr() method is used to obtain the correct translation of a +message. The translation process uses a message context to allow the same +message to be translated differently. tr() is actually +generated by moc and uses the hardcoded class name as the +context. On the other hand, QApplication::translate() +allows to context to be explicitly stated.

Unfortunately, because of the way Qt implents tr() (and +trUtf8()) it is not possible for PyQt to exactly reproduce +its behavour. The PyQt implementation of tr() (and +trUtf8()) uses the class name of the instance as the +context. The key difference, and the source of potential problems, is that the +context is determined dynamically in PyQt, but is hardcoded in Qt. In other +words, the context of a translation may change depending on an instance's class +hierarchy.

class A(QObject):
+    def __init__(self):
+        QObject.__init__(self)
+
+    def hello(self):
+        return self.tr("Hello")
+
+class B(A):
+    def __init__(self):
+        A.__init__(self)
+
+a = A()
+a.hello()
+
+b = B()
+b.hello()

In the above the message is translated by a.hello() using a +context of A, and by b.hello() using a +context of B. In the equivalent C++ version the context +would be A in both cases.

The PyQt behaviour is unsatisfactory and may be changed in the future. It is +recommended that QApplication.translate() be used in +preference to tr() (and trUtf8()). This +is guaranteed to work with current and future versions of PyQt and makes it +much easier to share message files between Python and C++ code. Below is the +alternative implementation of A that uses +QApplication.translate().

class A(QObject):
+    def __init__(self):
+        QObject.__init__(self)
+
+    def hello(self):
+        return qApp.translate("A","Hello")

Note that the code generated by pyuic uses +QApplication.translate().


Signal and Slot Support

A signal may be either a Qt signal (specified using +SIGNAL()) or a Python signal (specified using +PYSIGNAL()).

A slot can be either a Python callable object, a Qt signal (specified using +SIGNAL()), a Python signal (specified using +PYSIGNAL()), or a Qt slot (specified using +SLOT()).

You connect signals to slots (and other signals) as you would from C++. For +example:

QObject.connect(a,SIGNAL("QtSig()"),pyFunction)
+QObject.connect(a,SIGNAL("QtSig()"),pyClass.pyMethod)
+QObject.connect(a,SIGNAL("QtSig()"),PYSIGNAL("PySig"))
+QObject.connect(a,SIGNAL("QtSig()"),SLOT("QtSlot()"))
+QObject.connect(a,PYSIGNAL("PySig"),pyFunction)
+QObject.connect(a,PYSIGNAL("PySig"),pyClass.pyMethod)
+QObject.connect(a,PYSIGNAL("PySig"),SIGNAL("QtSig()"))
+QObject.connect(a,PYSIGNAL("PySig"),SLOT("QtSlot()"))

When a slot is a Python method that corresponds to a Qt slot then a signal can +be connected to either the Python method or the Qt slot. The following +connections achieve the same effect.

sbar = QScrollBar()
+lcd = QLCDNumber()
+
+QObject.connect(sbar,SIGNAL("valueChanged(int)"),lcd.display)
+QObject.connect(sbar,SIGNAL("valueChanged(int)"),lcd,SLOT("display(int)"))

The difference is that the second connection is made at the C++ level and is +more efficient.

Disconnecting signals works in exactly the same way.

Any instance of a class that is derived from the QObject +class can emit a signal using the emit method. This takes +two arguments. The first is the Python or Qt signal, the second is a Python +tuple which are the arguments to the signal. For example:

a.emit(SIGNAL("clicked()"),())
+a.emit(PYSIGNAL("pySig"),("Hello","World"))

Note that when a slot is a Python callable object its reference count is not +increased. This means that a class instance can be deleted without having to +explicitly disconnect any signals connected to its methods. However, it also +means that using lambda expressions as slots will not work unless you keep a +separate reference to the expression to prevent it from being immediately +garbage collected.

Qt allows a signal to be connected to a slot that requires fewer arguments than +the signal passes. The extra arguments are quietly discarded. Python slots +can be used in the same way.


Static Member Functions

Static member functions are implemented as Python class functions. +For example the C++ static member function +QObject::connect() is called from Python as +QObject.connect() or self.connect() if +called from a sub-class of QObject.


Enumerated Types

Enumerated types are implemented as a set of simple variables corresponding to +the separate enumerated values.

When using an enumerated value the name of the class (or a sub-class) in which +the enumerated type was defined in must be included. For example:

Qt.SolidPattern
+QWidget.TabFocus
+QFrame.TabFocus

Module Reference Documentation

The following sections should be used in conjunction with the normal class +documentation - only the differences specific to the Python bindings are +documented here.

In these sections, Not yet implemented +implies that the feature can be easily implemented if needed. Not +implemented implies that the feature will not be implemented, either +because it cannot be or because it is not appropriate.

If a class is described as being fully implemented then +all non-private member functions and all public class variables have been +implemented.

If an operator has been implemented then it is stated explicitly.

Classes that are not mentioned have not yet been implemented.


qt Module Reference

Qt Constants

All constant values defined by Qt have equivalent constants defined to Python.


Qt (Qt v2+)

Qt is fully implemented.


QAccel

QAccel is fully implemented.


QAction (Qt v2.2+)

QAction is fully implemented.


QActionGroup (Qt v2.2+)

QActionGroup is fully implemented.


QApplication

QApplication(int &argc, char **argv);

This takes one parameter which is a list of argument strings. Arguments +used by Qt are removed from the list.

QApplication(int &argc, char **argv, bool GUIenabled);

This takes two parameters, the first of which is a list of argument strings. +Arguments used by Qt are removed from the list.

QApplication(int &argc, char **argv, Type type);

This takes two parameters, the first of which is a list of argument strings. +Arguments used by Qt are removed from the list. (Qt v2.2+)

int exec();

This has been renamed to exec_loop in Python.


QAssistantClient (Qt v3.1+)

QAssistantClient is fully implemented.


QBitmap

QBitmap is fully implemented.


QBrush

QBrush is fully implemented, including the Python +== and != operators.


QButton

QButton is fully implemented.


QButtonGroup

QButtonGroup is fully implemented.


QByteArray

A Python string can be used whenever a QByteArray can be +used. A QByteArray can be converted to a Python string +using the Python str() function.

QByteArray &assign(const char *data, uint size);

Not implemented.

char &at(uint i);

Not yet implemented.

int contains(const char &d);

Not yet implemented.

bool fill(const char &d, int size = -1);

Not yet implemented.

int find(const char &d, uint i = 0);

Not yet implemented.

void resetRawData(const char *data, uintsize);

Not implemented.

QByteArray &setRawData(const char *data, uintsize);

Not implemented.


QCDEStyle (Qt v2+)

QCDEStyle is fully implemented.


QCheckBox

QCheckBox is fully implemented.


QClipboard

void *data const(const char *format);

Not yet implemented (Qt v1.x).

void setData(const char *format, void *);

Not yet implemented (Qt v1.x).


QColor

The Python == and != operators are +supported.

void getHsv(int *h, int *s, int *v);

This takes no parameters and returns the h, +s and v values as a tuple.

void getRgb(int *r, int *g, int *b);

This takes no parameters and returns the r, +g and b values as a tuple.

void hsv(int *h, int *s, int *v);

This takes no parameters and returns the h, +s and v values as a tuple.

void rgb(int *r, int *g, int *b);

This takes no parameters and returns the r, +g and b values as a tuple.


QColorDialog (Qt v2+)

static QRgb getRgba(QRgb initial, bool *ok, QWidget *parent = 0, const char *name = 0);

This takes the initial, parent and +name parameters and returns a tuple containing the +QRgb result and the ok value.


QColorGroup

QColorGroup is fully implemented.


QComboBox

QComboBox is fully implemented.


QCommonStyle (Qt v2+)

virtual void getButtonShift(int &x, int &y);

This takes no parameters and returns a tuple of the x and +y values. (Qt v2)

virtual void tabbarMetrics(const QTabBar *t, int &hframe, int &vframe, int &overlap);

This takes only the t parameter and returns a tuple of the +hframe, vframe and +overlap values. (Qt v2)


QCString (Qt v2+)

A Python string can be used whenever a QCString can be used. +A QCString can be converted to a Python string using the +Python str() function.

QCString &sprintf(const char *format, ...);

Not implemented.

short toShort(bool *ok = 0);

This returns a tuple of the short result and the +ok value.

ushort toUShort(bool *ok = 0);

This returns a tuple of the ushort result and the +ok value.

int toInt(bool *ok = 0);

This returns a tuple of the int result and the +ok value.

uint toUInt(bool *ok = 0);

This returns a tuple of the uint result and the +ok value.

long toLong(bool *ok = 0);

This returns a tuple of the long result and the +ok value.

ulong toULong(bool *ok = 0);

This returns a tuple of the ulong result and the +ok value.

float toFloat(bool *ok = 0);

This returns a tuple of the float result and the +ok value.

double toDouble(bool *ok = 0);

This returns a tuple of the double result and the +ok value.


QCursor

QCursor is fully implemented.


QDataStream

QDataStream &readBytes(const char *&s, uint &l);

This takes no parameters. The QDataStream result and the +data read are returned as a tuple.

QDataStream &readRawBytes(const char *s, uint l);

This takes only the l parameter. The +QDataStream result and the data read are returned as a +tuple.

QDataStream &writeBytes(const char *s, uint len);

len is derived from s and not passed as a +parameter.

QDataStream &writeRawBytes(const char *s, uint len);

len is derived from s and not passed as a +parameter.


QDate

The Python +==, !=, +<, <=, +>, >= +and __nonzero__ +operators are supported.

int weekNumber(int *yearNum = 0);

This takes no parameters and returns the week number and the year number as a +tuple. (Qt v3.1+)


QDateTime

QDateTime is fully implemented, including the Python +==, !=, +<, <=, +>, >= +and __nonzero__ +operators.


QTime

QTime is fully implemented, including the Python +==, !=, +<, <=, +>, >= +and __nonzero__ +operators.


QDateEdit (Qt v3+)

QDateEdit is fully implemented.


QTimeEdit (Qt v3+)

QTimeEdit is fully implemented.


QDateTimeEdit (Qt v3+)

QDateTimeEdit is fully implemented.


QDesktopWidget (Qt v3+)

QDesktopWidget is fully implemented.


QDial (Qt v2.2+)

QDial is fully implemented.


QDialog

int exec();

This has been renamed to exec_loop in Python.

This method also causes ownership of the underlying C++ dialog to be +transfered to Python. This means that the C++ dialog will be deleted when the +Python wrapper is garbage collected. Although this is a little inconsistent, +it ensures that the dialog is deleted without having to explicity code it +using QObject.deleteLater() or other techniques.


QDir

QDir is fully implemented, including the Python +len, [] (for reading slices and +individual elements), ==, != and +in operators


QFileInfoList

This class isn't implemented. Whenever a QFileInfoList is +the return type of a function or the type of an argument, a Python list of +QFileInfo instances is used instead.


QDockArea (Qt v3+)

bool hasDockWindow const(QDockWindow *w, int *index = 0);

This takes the w parameter and returns the index of the +QDockWIndow or -1 if the QDockArea does not contain the QDockWindow.


QDockWindow (Qt v3+)

QDockWindow is fully implemented.


QColorDrag (Qt v2.1+)

QColorDrag is fully implemented.


QDragObject

QDragObject is fully implemented.


QImageDrag

QImageDrag is fully implemented.


QStoredDrag

QStoredDrag is fully implemented.


QTextDrag

QTextDrag is fully implemented.


QUriDrag (Qt v2+)

QUriDrag is fully implemented.


QUrlDrag (Qt v1.x)

QUrlDrag is fully implemented.


QDropSite

QDropSite is fully implemented.


QErrorMessage (Qt v3+)

QErrorMessage is fully implemented.


QEvent

QEvent is fully implemented.

Instances of QEvents are automatically converted to the +correct sub-class.


QChildEvent

QChildEvent is fully implemented.


QCloseEvent

QCloseEvent is fully implemented.


QIconDragEvent (Qt v3.3+)

QIconDragEvent is fully implemented.


QContextMenuEvent (Qt v3+)

QContextMenuEvent is fully implemented.


QCustomEvent

QCustomEvent is fully implemented. Any Python object can be +passed as the event data and its reference count is increased.


QDragEnterEvent

QDragEnterEvent is fully implemented.


QDragLeaveEvent

QDragLeaveEvent is fully implemented.


QDragMoveEvent

QDragMoveEvent is fully implemented.


QDropEvent

QDropEvent is fully implemented.


QFocusEvent

QFocusEvent is fully implemented.


QHideEvent

QHideEvent is fully implemented.


QIMComposeEvent (Qt v3.1+)

QIMComposeEvent is fully implemented.


QIMEvent (Qt v3+)

QIMEvent is fully implemented.


QKeyEvent

QKeyEvent is fully implemented.


QMouseEvent

QMouseEvent is fully implemented.


QMoveEvent

QMoveEvent is fully implemented.


QPaintEvent

QPaintEvent is fully implemented.


QResizeEvent

QResizeEvent is fully implemented.


QShowEvent

QShowEvent is fully implemented.


QTabletEvent (Qt v3+)

QTabletEvent is fully implemented.


QTimerEvent

QTimerEvent is fully implemented.


QWheelEvent (Qt v2+)

QWheelEvent is fully implemented.


QEventLoop (Qt v3.1+)

virtual int exec();

This has been renamed to exec_loop in Python.


QFile

bool open(int m, FILE *f);

Not implemented.

Q_LONG readBlock(char *data, Q_ULONG len);

This takes a single len parameter. The +data is returned if there was no error, otherwise +None is returned.

Q_LONG readLine(char *data, Q_ULONG maxlen);

This takes a single maxlen parameter. The +data is returned if there was no error, otherwise +None is returned.

static void setDecodingFunction(EncoderFn f);

Not yet implemented. (Qt v2+)

static void setEncodingFunction(EncoderFn f);

Not yet implemented. (Qt v2+)

Q_LONG writeBlock(const char *data, Q_ULONG len);

len is derived from data and not passed +as a parameter.


QFileDialog

QFileDialog is fully implemented.


QFileIconProvider

QFileIconProvider is fully implemented.


QFilePreview

QFilePreview is fully implemented. However it cannot be +used from Python in the same way as it is used from C++ because PyQt does not +support multiple inheritance involving more than one wrapped class. A trick +that seems to work is to use composition rather than inheritance as in the +following code fragment.

class FilePreview(QFilePreview):
+    pass
+
+class Preview(QLabel):
+    def __init__(self, parent=None):
+        QLabel.__init__(self, parent)
+        self.preview = FilePreview()
+        self.preview.previewUrl = self.previewUrl

Note that QFilePreview cannot be instantiated directly because it is abstract. +Thanks to Hans-Peter Jansen for this trick.


QFileInfo

QFileInfo is fully implemented.


QFont

QFont is fully implemented, including the Python +== and != operators.


QFontDatabase (Qt v2.1+)

QFontDatabase is fully implemented.


QFontDialog (Qt v2+)

static QFont getFont(bool *ok, const QFont &def, QWidget *parent = 0, const char *name = 0);

This takes the def, parent and +name parameters and returns a tuple containing the +QFont result and the ok value.

static QFont getFont(bool *ok, QWidget *parent = 0, const char *name = 0);

This takes the parent and name parameters +and returns a tuple containing the QFont result and the +ok value.


QFontInfo

QFontInfo is fully implemented.


QFontMetrics

QRect boundingRect(int x, int y, int w, int h, int flags, const QString &str, int len = -1, int tabstops = 0, int *tabarray = 0);

The tabarray parameter is a Python list of integers.

QSize size(int flags, const QString &str, int len = -1, int tabstops = 0, int *tabarray = 0);

The tabarray parameter is a Python list of integers.


QFrame

QFrame is fully implemented.


QGManager (Qt v1.x)

QGManager is fully implemented.


QChain (Qt v1.x)

QChain is implemented as an opaque class.


QGrid (Qt v2+)

QGrid is fully implemented.


QGridView (Qt v3+)

QGridView is fully implemented.


QGroupBox

QGroupBox is fully implemented.


QHBox (Qt v2+)

QHBox is fully implemented.


QHButtonGroup (Qt v2+)

QHButtonGroup is fully implemented.


QHeader

QHeader is fully implemented.


QHGroupBox (Qt v2+)

QHGroupBox is fully implemented.


QIconSet

QIconSet is fully implemented.


QIconFactory (Qt v3.1+)

QIconFactory is fully implemented.


QIconView (Qt v2.1+)

QIconViewItem *makeRowLayout(QIconViewItem *begin, int &y);

Not yet implemented.


QIconViewItem (Qt v2.1+)

QIconViewItem is fully implemented.


QIconDrag (Qt v2.1+)

QIconDrag is fully implemented.


QIconDragItem (Qt v2.1+)

QIconDragItem is fully implemented.


QImage

The Python == and != operators are +supported.

QImage(const char *xpm[]);

This takes a list of strings as its parameter.

QImage(uchar *data, int w, int h, int depth, QRgb *colorTable, int numColors, Endian bitOrder);

The colorTable parameter is a list of QRgb instances or +None. (Qt v2.1+)

uchar *bits();

The return value is a sip.voidptr object which is only +useful if passed to another Python module.

QRgb *colorTable();

The return value is a sip.voidptr object which is only +useful if passed to another Python module.

QImage convertDepthWithPalette(int, QRgb *p, int pc, int cf = 0);

Not implemented.

uchar **jumpTable();

The return value is a sip.voidptr object which is only +useful if passed to another Python module.

bool loadFromData(const uchar *buf, uint len, const char *format = 0, ColorMode mode = Auto);

len is derived from buf and not passed as +a parameter.

uchar *scanLine(int i);

The return value is a sip.voidptr object which is only +useful if passed to another Python module.


QImageIO

static void defineIOHandler(const char *format, const char *header, const char *flags, image_io_handler read_image, image_io_handler write_image);

Not implemented.


QImageTextKeyLang

QImageTextKeyLang is fully implemented.


QInputDialog (Qt v2.1+)

static QString getText(const QString &caption, const QString &label, const QString &text = QString::null, bool *ok = 0, QWidget *parent = 0, const char *name = 0);

The ok is not passed and the returned value is a tuple of +the QString result and the ok flag. +(Qt v2.1 - v2.3.1)

static QString getText(const QString &caption, const QString &label, QLineEdit::EchoModeecho, const QString &text = QString::null, bool *ok = 0, QWidget *parent = 0, const char *name = 0);

The ok is not passed and the returned value is a tuple of +the QString result and the ok flag. +(Qt v2.2 - v2.3.1)

static QString getText(const QString &caption, const QString &label, QLineEdit::EchoModeecho = QLineEdit::Normal, const QString &text = QString::null, bool *ok = 0, QWidget *parent = 0, const char *name = 0);

The ok is not passed and the returned value is a tuple of +the QString result and the ok flag. +(Qt v3+)

static int getInteger(const QString &caption, const QString &label, int num = 0, int from = -2147483647, int to = 2147483647, int step = 1, bool *ok = 0, QWidget *parent = 0, const char *name = 0);

The ok is not passed and the returned value is a tuple of +the int result and the ok flag.

static double getDouble(const QString &caption, const QString &label, double num = 0, double from = -2147483647, double to = 2147483647, int step = 1, bool *ok = 0, QWidget *parent = 0, const char *name = 0);

The ok is not passed and the returned value is a tuple of +the double result and the ok flag.

static QString getItem(const QString &caption, const QString &label, const QStringList &list, int current = 0, bool editable = TRUE, bool *ok = 0, QWidget *parent = 0, const char *name = 0);

The ok is not passed and the returned value is a tuple of +the QString result and the ok flag.


QInterlaceStyle (Qt v2.3.1+)

void scrollBarMetrics(const QTabBar *sb, int &sliderMin, int &sliderMax, int &sliderLength, int &buttonDim);

This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values.


QIODevice

QIODevice is fully implemented.


QKeySequence (Qt v3+)

QKeySequence is fully implemented including the operators +==, !=, QString() and +int(). A QString instance or a Python +integer may be used whenever a QKeySequence can be used.


QLabel

QLabel is fully implemented.


QLayout

QLayout is fully implemented.


QBoxLayout

QBoxLayout is fully implemented.


QGLayoutIterator (Qt v2+)

QGLayoutIterator is fully implemented.


QGridLayout

bool findWidget(QWidget *w, int *row, int *col);

This takes the w parameter and returns a tuple containing +the bool result, row and +col. (Qt v2+)


QHBoxLayout

QHBoxLayout is fully implemented.


QLayoutItem (Qt v2+)

QLayoutItem is fully implemented.


QLayoutIterator (Qt v2+)

QLayoutItem *next();

This is a wrapper around the QLayoutIterator +++ operator.


QSpacerItem (Qt v2+)

QSpacerItem is fully implemented.


QVBoxLayout

QVBoxLayout is fully implemented.


QWidgetItem (Qt v2+)

QWidgetItem is fully implemented.


QLCDNumber

QLCDNumber is fully implemented.


QLibrary (Qt v3+)

QLibrary is fully implemented.


QLineEdit

int characterAt(int xpos, QChar *chr);

This takes only the xpos parameter and returns the int +result and the chr value as a tuple. (Qt v3+)

void del();

This has been renamed delChar in Python. (Qt v2+)

bool getSelection(int *start, int *end);

This takes no parameters and returns the bool result and the +start and end values as a tuple. +(Qt v3+)


QList<type> (Qt v2)

Types based on the QList template are automatically +converted to and from Python lists of the type.


QListBox

bool itemYPos(int index, int *yPos);

This takes the index parameter and returns a tuple +containing the bool result and yPos. +(Qt v1.x)


QListBoxItem

QListBoxItem is fully implemented.


QListBoxPixmap

QListBoxPixmap is fully implemented.


QListBoxText

QListBoxText is fully implemented.


QListView

QListView is fully implemented.

Note that to remove a child QListViewItem you must first +call takeItem() and then del().


QListViewItem

QListViewItem is fully implemented.

Note that to remove a child QListViewItem you must first +call takeItem() and then del().


QCheckListItem

QCheckListItem is fully implemented.


QListViewItemIterator (Qt v2+)

QListViewItemIterator is fully implemented.


QLocale (Qt v3.3+)

short toShort(bool *ok = 0);

This returns a tuple of the short result and the +ok value.

ushort toUShort(bool *ok = 0);

This returns a tuple of the ushort result and the +ok value.

int toInt(bool *ok = 0);

This returns a tuple of the int result and the +ok value.

uint toUInt(bool *ok = 0);

This returns a tuple of the uint result and the +ok value.

Q_LONG toLong(bool *ok = 0);

This returns a tuple of the long result and the +ok value.

Q_ULONG toULong(bool *ok = 0);

This returns a tuple of the ulong result and the +ok value.

float toFloat(bool *ok = 0);

This returns a tuple of the float result and the +ok value.

double toDouble(bool *ok = 0);

This returns a tuple of the double result and the +ok value.


QMainWindow

QTextStream &operator<<(QTextStream &, const QMainWindow &);

This operator is fully implemented. (Qt v3+)

QTextStream &operator>>(QTextStream &, QMainWindow &);

This operator is fully implemented. (Qt v3+)

bool getLocation(QToolBar *tb, ToolBarDock &dock, int &index, bool &nl, int &extraOffset);

This takes only the tb parameter and returns a tuple of the +result, dock, index, +nl and extraOffset values. (Qt v2.1.0+)

QList<QToolBar> toolBars(ToolBarDock dock);

This returns a list of QToolBar instances. (Qt v2.1.0+)


QMemArray<type> (Qt v3+)

Types based on the QMemArray template are automatically +converted to and from Python lists of the type.


QMenuBar

QMenuBar is fully implemented.


QMenuData

QMenuItem *findItem(int id, QMenuData **parent);

Not implemented.


QCustomMenuItem (Qt v2.1+)

QCustomMenuItem is fully implemented.


QMenuItem

QMenuItem is an internal Qt class.


QMessageBox

QMessageBox is fully implemented.


QMetaObject

int numClassInfo const(bool super = FALSE);

Not implemented.

const QClassInfo *classInfo const(bool super = FALSE);

Not implemented.


QMetaProperty

QMetaProperty is fully implemented.


QMimeSource (Qt v2+)

QMimeSource is fully implemented.


QMimeSourceFactory (Qt v2+)

QMimeSourceFactory is fully implemented.


QWindowsMime (Qt v3+)

QWindowsMime is fully implemented.


QMotifPlusStyle (Qt v2.2+)

void getButtonShift(int &x, int &y);

This takes no parameters and returns a tuple of the x and +y values. (Qt v2)

void scrollBarMetrics(const QScrollBar *sb, int &sliderMin, int &sliderMax, int &sliderLength, int &buttonDim);

This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2)


QMotifStyle (Qt v2+)

void scrollBarMetrics(const QTabBar *sb, int &sliderMin, int &sliderMax, int &sliderLength, int &buttonDim);

This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2)

void tabbarMetrics(const QTabBar *t, int &hframe, int &vframe, int &overlap);

This takes only the t parameter and returns a tuple of the +hframe, vframe and +overlap values. (Qt v2)


QMovie

QMovie(QDataSource *src, int bufsize = 1024);

Not implemented.

void pushData(const uchar *data, int length);

length is derived from data and not +passed as a parameter. (Qt v2.2.0+)


QMultiLineEdit

void cursorPosition const(int *line, int *col);

This takes no parameters and returns a tuple of the line and +col values. (Qt v1.x, Qt v2.x)

virtual void del();

This has been renamed delChar in Python. (Qt v1.x, Qt v2.x)

void getCursorPosition const(int *line, int *col);

This takes no parameters and returns a tuple of the line and +col values. (Qt v1.x, Qt v2.x)

bool getMarkedRegion(int *line1, int *col1, int *line2, int *col2);

This takes no parameters and returns a tuple of the bool result and the +line1, col1, line2 and +col2 values.


QMutex (Qt v2.2+)

QMutex is fully implemented.


QMutexLocker (Qt v3.1+)

QMutexLocker is fully implemented.


QNetworkOperation (Qt v2.1+)

QNetworkOperation is fully implemented.


QNetworkProtocol (Qt v2.1+)

QNetworkProtocol is fully implemented.


QNetworkProtocolFactoryBase (Qt v2.1+)

QNetworkProtocolFactoryBase is fully implemented.


QObject

bool disconnect(const QObject *receiver, const char *member = 0);

Not yet implemented.

bool disconnect(const char *signal = 0, const QObject *receiver = 0, const char *member = 0);

Not yet implemented.

static bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *member);

At the moment PyQt does not support the full behaviour of the corresponding Qt +method. In particular, specifying None (ie. 0 in C++) for the +signal and receiver parameters is not yet +supported.


QObjectCleanupHandler (Qt v3+)

QObjectCleanupHandler is fully implemented.


QObjectList

This class isn't implemented. Whenever a QObjectList is the +return type of a function or the type of an argument, a Python list of +QObject instances is used instead.


QPaintDeviceMetrics

QPaintDeviceMetrics is fully implemented.


QPaintDevice

virtual bool cmd(int, QPainter *, QPDevCmdParam *);

Not implemented.


QPainter

QRect boundingRect(int x, int y, int w, int h, int flags, const char *str, int len = -1, char **intern = 0);

The intern parameter is not supported.

QRect boundingRect(const QRect&, int flags, const char *str, int len = -1, char **intern = 0);

The intern parameter is not supported.

void drawText(int x, int y, int w, int h, int flags, const char *str, int len = -1, QRect *br = 0, char **intern = 0);

The intern parameter is not supported.

void drawText(const QRect&, int flags, const char *str, int len = -1, QRect *br = 0, char **intern = 0);

The intern parameter is not supported.

void setTabArray(int *ta);

This takes a single parameter which is a list of tab stops.

int *tabArray();

This returns a list of tab stops.


QPalette

QPalette is fully implemented, including the Python +== and != operators.


QPixmap

QPixmap(const char *xpm[]);

This takes a list of strings as its parameter.

bool loadFromData(const uchar *buf, uint len, const char *format = 0, ColorMode mode = Auto);

len is derived from buf and not passed as +a parameter.

bool loadFromData(const uchar *buf, uint len, const char *format, int conversion_flags);

Not implemented.


QPixmapCache (Qt v3+)

QPixmapCache is fully implemented.


QPair<type,type> (Qt v3+)

Types based on the QPair template are automatically +converted to and from Python tuples of two elements.


QPen

QPen is fully implemented, including the Python +== and != operators.


QPicture

const char *data();

Not implemented.

void setData(const char *data, uint size);

size is derived from data and not passed +as a parameter.


QPlatinumStyle (Qt v2+)

void scrollBarMetrics(const QTabBar *sb, int &sliderMin, int &sliderMax, int &sliderLength, int &buttonDim);

This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2)


QPoint

The Python ++, +=, +-, -=, unary -, +*, *=, +/, /=, +==, != and __nonzero__ +operators are supported.

QCOORD &rx();

Not implemented.

QCOORD &ry();

Not implemented.


QPointArray

QPointArray(int nPoints, const QCOORD *points);

This takes a single parameter which is a list of points.

void point(uint i, int *x, int *y);

This takes the single parameter i and returns the +x and y values as a tuple.

bool putPoints(int index, int nPoints, const QCOORD *points);

This takes two parameters, index and a list of points.

bool putPoints(int index, int nPoints, int firstx, int firsty, ...);

Not implemented.

bool setPoints(int nPoints, const QCOORD *points);

This takes a single parameter which is a list of points.

bool setPoints(int nPoints, int firstx, int firsty, ...);

Not implemented.


QPopupMenu

int exec();

This has been renamed exec_loop in Python.

int exec(const QPoint &pos, int indexAtPoint = 0);

This has been renamed exec_loop in Python.


QPrintDialog (X11)

QPrintDialog is fully implemented.


QPrinter

QPrinter is fully implemented.


QProcess (Qt v3+)

QProcess is fully implemented.


QProgressBar

QProgressBar is fully implemented.


QProgressDialog

QProgressDialog is fully implemented. +value.


QPtrList<type> (Qt v3+)

Types based on the QPtrList template are automatically +converted to and from Python lists of the type.


QPushButton

QPushButton is fully implemented.


QRadioButton

QRadioButton is fully implemented.


QRangeControl

QRangeControl is fully implemented.


QRect

The Python +&, &=, +|, |=, +==, !=, in and +__nonzero__ operators are supported.

void coords(int *x1, int *y1, int *x2, int *y2);

This takes no parameters and returns a tuple containing the four values.

void rect(int *x, int *y, int *w, int *h);

This takes no parameters and returns a tuple containing the four values.

QCOORD &rBottom();

Not implemented. (Qt v2+)

QCOORD &rLeft();

Not implemented. (Qt v2+)

QCOORD &rRight();

Not implemented. (Qt v2+)

QCOORD &rTop();

Not implemented. (Qt v2+)


QRegExp

The Python == and != operators are +supported.

int match(const char *str, int index = 0, int *len = 0);

This takes str and index parameters and +returns a tuple of the int result and the +len value. (Qt v1.x)

int match(const QString &str, int index = 0, int *len = 0);

This takes str and index parameters and +returns a tuple of the int result and the +len value. (Qt v2+)


QRegion

The Python +|, |=, ++, +=, +&, &=, +-, -=, +^, ^=, +==, !=, in and +__nonzero__ operators are supported.

QArray<QRect> rects();

Not implemented.

void setRects(QRect *rects, int num);

Not yet implemented. (Qt v2.2+)


QScrollBar

QScrollBar is fully implemented.


QScrollView

void contentsToViewport(int x, int y, int &vx, int &vy);

This takes the x and y parameters and +returns a tuple containing the vx and vy +values. (Qt v2+)

void viewportToContents(int vx, int vy, int &x, int &y);

This takes the vx and vy parameters and +returns a tuple containing the x and y +values. (Qt v2+)


QSemaphore (Qt v2.2+)

QSemaphore is fully implemented. The += +and -= operators have also been implemented, but require +Python v2.0 or later.


QSemiModal (Qt v1, v2)

QSemiModal is fully implemented.


QSessionManager (Qt v2+)

QSessionManager is fully implemented.


QSettings (Qt v3+)

bool readBoolEntry(const QString &key, bool def = 0, bool *ok = 0);

The ok is not passed and the returned value is a tuple of +the bool result and the ok flag.

double readDoubleEntry(const QString &key, double def = 0, bool *ok = 0);

The ok is not passed and the returned value is a tuple of +the double result and the ok flag.

QString readEntry(const QString &key, const QString &def = QString::null, bool *ok = 0);

The ok is not passed and the returned value is a tuple of +the QString result and the ok flag.

QStringList readListEntry(const QString &key, bool *ok = 0);

The ok is not passed and the returned value is a tuple of +the QStringList result and the ok flag.

QStringList readListEntry(const QString &key, const QChar &separator, bool *ok = 0);

The ok is not passed and the returned value is a tuple of +the QStringList result and the ok flag.

int readNumEntry(const QString &key, int def = 0, bool *ok = 0);

The ok is not passed and the returned value is a tuple of +the int result and the ok flag.

bool writeEntry(const QString &key, bool value);

Not implemented.


QSGIStyle (Qt v2.2+)

void scrollBarMetrics(const QScrollBar *sb, int &sliderMin, int &sliderMax, int &sliderLength, int &buttonDim);

This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2)


QSignalMapper

QSignalMapper is fully implemented.


QSimpleRichText (Qt v2+)

QSimpleRichText is fully implemented.


QSize

The Python ++, +=, +-, -=, +*, *=, +/, /=, +==, != and __nonzero__ +operators are supported.

QCOORD &rheight();

Not implemented.

QCOORD &rwidth();

Not implemented.


QSizeGrip (Qt v2+)

QSizeGrip is fully implemented.


QSizePolicy (Qt v2+)

QSizePolicy is fully implemented.


QSlider

QSlider is fully implemented.


QSocketNotifier

QSocketNotifier is fully implemented.


QSound (Qt v2.2+)

QSound is fully implemented.


QSpinBox

virtual int mapTextToValue(bool *ok);

This returns a tuple of the int result and the modified +ok value.


QSplashScreen (Qt v3.2.0+)

QSplashScreen is fully implemented.


QSplitter

void getRange(int id, int *min, int *max);

This takes the id parameter and returns the +min and max values as a tuple. (Qt v2+)


QStatusBar

QStatusBar is fully implemented.


QChar (Qt v2+)

uchar &cell const();

Not implemented.

uchar &row const();

Not implemented.


QString

A Python string object (or Unicode object) can be used whenever a +QString can be used. A QString can be +converted to a Python string object using the Python str() +function, and to a Python Unicode object using the Python +unicode() function.

The Python +=, len, [] +(for reading slices and individual characters), in and +comparison operators are supported.

QCharRef at(uint i);

Not yet implemented. (Qt v2+)

QChar constref const(uint i);

Not yet implemented. (Qt v2+)

QChar &ref(uint i);

Not yet implemented. (Qt v2+)

QString &setUnicodeCodes(const ushort *unicode_as_shorts, uint len);

Not yet implemented. (Qt v2.1+)

QString &sprintf(const char *format, ...);

Not implemented.

short toShort(bool *ok = 0);

This returns a tuple of the short result and the +ok value.

ushort toUShort(bool *ok = 0);

This returns a tuple of the ushort result and the +ok value.

int toInt(bool *ok = 0);

This returns a tuple of the int result and the +ok value.

uint toUInt(bool *ok = 0);

This returns a tuple of the uint result and the +ok value.

long toLong(bool *ok = 0);

This returns a tuple of the long result and the +ok value.

ulong toULong(bool *ok = 0);

This returns a tuple of the ulong result and the +ok value.

float toFloat(bool *ok = 0);

This returns a tuple of the float result and the +ok value.

double toDouble(bool *ok = 0);

This returns a tuple of the double result and the +ok value.


QStringList (Qt v2+)

The Python len, [] (for both reading and +writing slices and individual elements), del (for deleting +slices and individual elements), +, +=, +*, *=, ==, +!= and in operators are supported.

Iterator append(const QString &x);

This does not return a value.

Iterator prepend(const QString &x);

This does not return a value.


QStrList

This class isn't implemented. Whenever a QStrList is the +return type of a function or the type of an argument, a Python list of strings +is used instead.


QStyle (Qt v2+)

virtual void getButtonShift(int &x, int &y);

This takes no parameters and returns a tuple of the x and +y values. (Qt v2)

virtual void scrollBarMetrics(const QScrollBar *b, int &sliderMin, int &sliderMax, int &sliderLength, int &buttonDim);

Thus takes only the b parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2)

virtual void tabbarMetrics(const QTabBar *t, int &hframe, int &vframe, int &overlap);

This takes only the t parameter and returns a tuple of the +hframe, vframe and +overlap values. (Qt v2)


QStyleOption (Qt v3+)

QStyleOption is fully implemented.


QStyleSheet (Qt v2+)

QStyleSheet is fully implemented.


QStyleSheetItem (Qt v2+)

QStyleSheetItem is fully implemented.


QSyntaxHighlighter (Qt v3.1+)

QSyntaxHighlighter is fully implemented.


QTab

QTab is fully implemented.


QTabBar

QList<QTab> tabList();

This returns a list of QTab instances.


QTabDialog

QTabDialog is fully implemented.


QTableView (Qt 1.x, Qt 2.x)

bool colXPos(int col, int *xPos);

This takes the col parameter and returns a tuple containing +the bool result and xPos.

bool rowYPos(int row, int *yPos);

This takes the row parameter and returns a tuple containing +the bool result and yPos.


QTabWidget (Qt v2+)

QTabWidget is fully implemented.


QTextBrowser (Qt v2+)

QTextBrowser is fully implemented.


QTextCodec (Qt v2+)

virtual QCString fromUnicode(const QString &uc, int &lenInOut);

The returned value is a tuple of the QCString result and the +updated lenInOut.


QTextDecoder (Qt v2+)

QTextDecoder is fully implemented.


QTextEncoder (Qt v2+)

virtual QCString fromUnicode = 0(const QString &uc, int &lenInOut);

The returned value is a tuple of the QCString result and the +updated lenInOut.


QTextEdit (Qt v3+)

int charAt(const QPoint &pos, int *para = 0);

This takes only the pos parameter and returns a tuple of the +value returned via the para pointer and the int result.

void del();

This has been renamed delChar in Python.

virtual bool find(const QString &expr, bool cs, bool wo, bool forward = TRUE, int *para = 0, int *index = 0);

If the para and index parameters are +omitted then the bool result is returned. If both are supplied (as integers) +then a tuple of the bool result and the modified values of +para and index is returned.

void getCursorPosition(int *para, int *index);

This takes no parameters and returns a tuple of the values returned via the +para and index pointers.

void getSelection(int *paraFrom, int *indexFrom, int *paraTo, int *indexTo, int selNum = 0);

This takes only the selNum parameter and returns a tuple of +the paraFrom, indexFrom, +paraTo and indexTo values.


QTextStream

QTextStream(FILE *fp, int mode);

Not implemented.

QTextStream &readRawBytes(char *buf, uint len);

Not yet implemented.

QTextStream &writeRawBytes(const char *buf, uint len);

Not yet implemented.


QTextIStream (Qt v2+)

QTextIStream(FILE *fp, int mode);

Not implemented.


QTextOStream (Qt v2+)

QTextOStream(FILE *fp, int mode);

Not implemented.


QTextView (Qt v2+)

QTextView is fully implemented.


QThread (Qt v2.2+)

QThread is fully implemented.


QTimer

QTimer is fully implemented.


QToolBar

QToolBar is fully implemented.


QToolBox (Qt v3.2.0+)

QToolBox is fully implemented.


QToolButton

QToolButton is fully implemented.


QToolTip

QToolTip is fully implemented.


QToolTipGroup

QToolTipGroup is fully implemented.


QTranslator (Qt v2+)

QTranslator is fully implemented.


QTranslatorMessage (Qt v2.2+)

QTranslatorMessage is fully implemented.


QUrl (Qt v2.1+)

QUrl is fully implemented, including the +QString(), == and != +operators.


QUrlInfo (Qt v2.1+)

QUrlInfo is fully implemented.


QUrlOperator (Qt v2.1+)

virtual bool isDir(bool *ok);

This returns a tuple of the bool result and the +ok value.


QUuid (Qt v3.0+)

QUuid is fully implemented.


QValidator

virtual State validate(QString& input, int& pos);

The returned value is a tuple of the State result and the +updated pos.


QDoubleValidator

State validate(QString& input, int& pos);

The returned value is a tuple of the State result and the +updated pos.


QIntValidator

State validate(QString& input, int& pos);

The returned value is a tuple of the State result and the +updated pos.


QRegExpValidator (Qt v3+)

virtual State validate(QString& input, int& pos);

The returned value is a tuple of the State result and the +updated pos.


QValueList<type> (Qt v2+)

Types based on the QValueList template are automatically +converted to and from Python lists of the type.


QVariant (Qt v2.1+)

QVariant(const char *val);

Not implemented.

QVariant(const QBitArray &val);

Not yet implemented. (Qt v3+)

QVariant(const QValueList<QVariant> &val);

Not yet implemented.

QVariant(const QMap<QString,QVariant> &val);

Not yet implemented.

QBitArray &asBitArray();

Not yet implemented. (Qt v3+)

bool &asBool();

Not implemented.

double &asDouble();

Not implemented.

int &asInt();

Not implemented.

QValueList<QVariant> &asList();

Not implemented.

QMap<QString,QVariant> &asMap();

Not implemented.

uint &asUInt();

Not implemented.

QValueListConstIterator<QVariant>listBegin const();

Not implemented.

QValueListConstIterator<QVariant>listEnd const();

Not implemented.

QMapConstIterator<QString,QVariant>mapBegin const();

Not implemented.

QMapConstIterator<QString,QVariant>mapEnd const();

Not implemented.

QMapConstIterator<QString,QVariant>mapFind const(const QString &key);

Not implemented.

QValueListConstIterator<QString>stringListBegin const();

Not implemented.

QValueListConstIterator<QString>stringListEnd const();

Not implemented.

const QBitArray toBitArray const();

Not yet implemented. (Qt v3+)

const QValueList<QVariant>toList const();

Not yet implemented.

const QMap<QString,QVariant>toMap const();

Not yet implemented.


QVBox (Qt v2+)

QVBox is fully implemented.


QVButtonGroup (Qt v2+)

QVButtonGroup is fully implemented.


QVGroupBox (Qt v2+)

QVGroupBox is fully implemented.


QWaitCondition (Qt v2.2+)

QWaitCondition is fully implemented.


QWhatsThis

QWhatsThis is fully implemented.


QWidget

QWExtra *extraData();

Not implemented.

QFocusData *focusData();

Not implemented.

void lower();

This has been renamed to lowerW in Python.

void raise();

This has been renamed to raiseW in Python.


QWidgetList

This class isn't implemented. Whenever a QWidgetList is the +return type of a function or the type of an argument, a Python list of +instances is used instead.


QWidgetStack

QWidgetStack is fully implemented.


QWindow

QWindow is fully implemented (Qt v1.x).


QWindowsStyle (Qt v2+)

void getButtonShift(int &x, int &y);

This takes no parameters and returns a tuple of the x and +y values. (Qt v2)

void scrollBarMetrics(const QTabBar *sb, int &sliderMin, int &sliderMax, int &sliderLength, int &buttonDim);

This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2)

void tabbarMetrics(const QTabBar *t, int &hframe, int &vframe, int &overlap);

This takes only the t parameter and returns a tuple of the +hframe, vframe and +overlap values. (Qt v2)


QWindowsXPStyle (Qt v3.0.1+, Windows)

QWindowsXPStyle is fully implemented.


QWizard (Qt v2+)

QWizard is fully implemented.


QWMatrix

The Python ==, != and +*= operators are supported.

QWMatrix invert const(bool *invertible = 0);

This takes no parameters and returns a tuple of the QWMatrix +result and the invertible value.

void map const(int x, int y, int *tx, int *ty);

This takes the x and y parameters and +returns a tuple containing the tx and ty +values.

void map const(float x, float y, float *tx, float *ty);

This takes the x and y parameters and +returns a tuple containing the tx and ty +values. (Qt v1.x)

void map const(double x, double y, double *tx, double *ty);

This takes the x and y parameters and +returns a tuple containing the tx and ty +values. (Qt v2+)


QWorkspace (Qt v2.1+)

QWorkspace is fully implemented.


qtaxcontainer Module Reference

QAxBase (Windows, Qt v3+)

QAxObject(IUnknown *iface = 0);

Not implemented.

long queryInterface(const QUuid &uuid, void **iface);

Not implemented.

PropertyBag propertyBag const();

Not implemented.

void setPropertyBag(const PropertyBag &bag);

Not implemented.

unsigned long registerWeakActiveObject(const QString &guid);

This is a utility method provided by PyQt to make it easier to use +Mark Hammond's win32com module to manipulate objects +created by the qtaxcontainer module.

The RegisterActiveObject() COM function is called to +register the QAxBase instance as a weak object with the +guid GUID. The revoke handle is returned.

static void revokeActiveObject(unsigned long rhandle);

This is a wrapper around the RevokeActiveObject() COM +function and is called to revoke the object registered using +registerWeakActiveObject(). rhandle is +the revoke handle returned by registerWeakActiveObject().


QAxObject (Windows, Qt v3+)

QAxObject(IUnknown *iface, QObject *parent = 0, const char *name = 0);

Not implemented.


QAxWidget (Windows, Qt v3+)

QAxWidget(IUnknown *iface, QWidget *parent = 0, const char *name = 0);

Not implemented.


qtcanvas Module Reference

QCanvas (Qt v2.2+)

QCanvas is fully implemented.


QCanvasEllipse (Qt v2.2+)

QCanvasEllipse is fully implemented.


QCanvasItem (Qt v2.2+)

QCanvasItem is fully implemented.


QCanvasItemList (Qt v2.2+)

This class isn't implemented. Whenever a QCanvasItemList is +the return type of a function or the type of an argument, a Python list of +QCanvasItem instances is used instead.


QCanvasLine (Qt v2.2+)

QCanvasLine is fully implemented.


QCanvasPixmap (Qt v2.2+)

QCanvasPixmap is fully implemented.


QCanvasPixmapArray (Qt v2.2+)

QPixmapArray(QList<QPixmap> pixmaps, QList<QPoint> hotspots);

The pixmaps argument is a Python list of QPixmap instances, +and the hotspots argument is a Python list of QPoint +instances. (Qt v2.2.0 - Qt v2.3.1)

QPixmapArray(QValueList<QPixmap> pixmaps, QPointArray hotspots = QPointArray());

The pixmaps argument is a Python list of QPixmap instances. +(Qt v3+)


QCanvasPolygon (Qt v2.2+)

QCanvasPolygon is fully implemented.


QCanvasPolygonalItem (Qt v2.2+)

QCanvasPolygonalItem is fully implemented.


QCanvasRectangle (Qt v2.2+)

QCanvasRectangle is fully implemented.


QCanvasSpline (Qt v3.0+)

QCanvasSpline is fully implemented.


QCanvasSprite (Qt v2.2+)

QCanvasSprite is fully implemented.


QCanvasText (Qt v2.2+)

QCanvasText is fully implemented.


QCanvasView (Qt v2.2+)

QCanvasView is fully implemented.


qtext Module Reference

QextScintilla

void getCursorPosition(int *line, int *index);

This takes no parameters and returns a tuple of the values returned by the +line and index pointers.

void getSelection(int *lineFrom, int *indexFrom, int *lineTo, int *indexTo);

This takes no parameters and returns a tuple of the values returned by the +lineFrom, indexFrom, +lineTo and indexTo pointers.


QextScintillaAPIs

QextScintillaAPIs is fully implemented.


QextScintillaBase

QextScintillaBase is fully implemented.


QextScintillaCommand

QextScintillaCommand is fully implemented.


QextScintillaCommandSet

QextScintillaCommandSet is fully implemented.


QextScintillaDocument

QextScintillaDocument is fully implemented.


QextScintillaLexer

QextScintillaLexer is fully implemented.


QextScintillaLexerBash (QScintilla v1.4+)

QextScintillaLexerBash is fully implemented.


QextScintillaLexerBatch (QScintilla v1.6+)

QextScintillaLexerBatch is fully implemented.


QextScintillaLexerCPP

QextScintillaLexerCPP is fully implemented.


QextScintillaLexerCSharp

QextScintillaLexerCSharp is fully implemented.


QextScintillaLexerCSS (QScintilla v1.6+)

QextScintillaLexerCSS is fully implemented.


QextScintillaLexerDiff (QScintilla v1.6+)

QextScintillaLexerDiff is fully implemented.


QextScintillaLexerHTML (QScintilla v1.1+)

QextScintillaLexerHTML is fully implemented.


QextScintillaLexerIDL

QextScintillaLexerIDL is fully implemented.


QextScintillaLexerJava

QextScintillaLexerJava is fully implemented.


QextScintillaLexerJavaScript

QextScintillaLexerJavaScript is fully implemented.


QextScintillaLexerLua (QScintilla v1.5+)

QextScintillaLexerLua is fully implemented.


QextScintillaLexerMakefile (QScintilla v1.6+)

QextScintillaLexerMakefile is fully implemented.


QextScintillaLexerPerl

QextScintillaLexerPerl is fully implemented.


QextScintillaLexerPOV (QScintilla v1.6+)

QextScintillaLexerPOV is fully implemented.


QextScintillaLexerProperties (QScintilla v1.6+)

QextScintillaLexerProperties is fully implemented.


QextScintillaLexerPython

QextScintillaLexerPython is fully implemented.


QextScintillaLexerRuby (QScintilla v1.5+)

QextScintillaLexerRuby is fully implemented.


QextScintillaLexerSQL (QScintilla v1.1+)

QextScintillaLexerSQL is fully implemented.


QextScintillaLexerTeX (QScintilla v1.6+)

QextScintillaLexerTeX is fully implemented.


QextScintillaMacro

QextScintillaMacro is fully implemented.


QextScintillaPrinter

QextScintillaPrinter is fully implemented.


qtgl Module Reference

QGL

QGL is fully implemented.


QGLContext

QGLContext is fully implemented.


QGLFormat

QGLFormat is fully implemented.


QGLWidget

QGLWidget is fully implemented.


QGLColormap (Qt v3.0+)

void setEntries(int count, const QRgb *colors, int base = 0);

Not yet implemented.


qtnetwork Module Reference

QDns (Qt v2.2+)

QDns is fully implemented.


QFtp (Qt v2.2+)

Q_LONG readBlock(char *data, Q_ULONG maxlen);

This takes a single maxlen parameter. The +data is returned if there was no error, otherwise +None is returned.


QHostAddress (Qt v2.2+)

QHostAddress(Q_UINT8 *ip6Addr);

Not yet implemented.

QHostAddress(const Q_IPV6ADDR &ip6Addr);

Not yet implemented.

void setAddress(Q_UINT8 *ip6Addr);

Not yet implemented.

Q_IPV6ADDR toIPv6Address const();

Not yet implemented.


QHttp (Qt v3+)

Q_LONG readBlock(char *data, Q_ULONG maxlen);

This takes a single maxlen parameter. The +data is returned if there was no error, otherwise +None is returned.


QHttpHeader (Qt v3.1+)

QHttpHeader is fully implemented.


QHttpRequestHeader (Qt v3.1+)

QHttpRequestHeader is fully implemented.


QHttpResponseHeader (Qt v3.1+)

QHttpResponseHeader is fully implemented.


QLocalFs (Qt v2.1+)

QLocalFs is fully implemented.


QServerSocket (Qt v2.2+)

QServerSocket is fully implemented.


QSocket (Qt v2.2+)

Q_LONG readBlock(char *data, Q_ULONG len);

This takes a single len parameter. The +data is returned if there was no error, otherwise +Py_None is returned.

Q_LONG readLine(char *data, Q_ULONG maxlen);

This takes a single maxlen parameter. The +data is returned if there was no error, otherwise +Py_None is returned.

Q_LONG writeBlock(const char *data, Q_ULONG len);

len is derived from data and not passed +as a parameter.


QSocketDevice (Qt v2.2+)

Q_LONG readBlock(char *data, Q_ULONG len);

This takes a single len parameter. The +data is returned if there was no error, otherwise +None is returned.

Q_LONG writeBlock(const char *data, Q_ULONG len);

len is derived from data and not passed +as a parameter.


qtpe Module Reference

QPEApplication

QApplication(int& argc, char **argv, Type type);

This takes two parameters, the first of which is a list of argument strings. +Arguments used by Qt are removed from the list.

int exec();

This has been renamed to exec_loop in Python.


AppLnk

virtual QString exec const();

This has been renamed to exec_property in Python.


AppLnkSet

AppLnkSet is fully implemented.


Config

Config is fully implemented.


DateFormat

DateFormat is fully implemented.


DocLnk

QString exec const();

This has been renamed to exec_property in Python.


DocLnkSet

DocLnkSet is fully implemented.


FileManager

FileManager is fully implemented.


FileSelector

FileSelector is fully implemented.


FileSelectorItem

FileSelectorItem is fully implemented.


FontDatabase

FontDatabase is fully implemented.


Global

static void setBuiltinCommands(Command *);

Not implemented.


MenuButton

MenuButton is fully implemented.


QCopEnvelope

QCopEnvelope is fully implemented.


QDawg

QDawg is fully implemented.


QPEMenuBar

QPEMenuBar is fully implemented.


QPEToolBar

QPEToolBar is fully implemented.


Resource

Resource is fully implemented.


qtsql Module Reference

QDataBrowser (Qt v3+)

virtual void del();

This has been renamed delOnCursor in Python.


QDataTable (Qt v3+)

QDataTable is fully implemented.


QDataView (Qt v3+)

QDataView is fully implemented.


QEditorFactory (Qt v3+)

QEditorFactory is fully implemented.


QSql (Qt v3+)

QSql is fully implemented.


QSqlCursor (Qt v3+)

virtual int del(bool invalidate = TRUE);

This has been renamed delRecords in Python.

virtual int del(const QString &filter, bool invalidate = TRUE);

This has been renamed delRecords in Python.

bool exec(const QString &query);

This has been renamed execQuery in Python.


QSqlDatabase (Qt v3+)

QSqlQuery exec(const QString &query = QString::null);

This has been renamed execStatement in Python.


QSqlDriver (Qt v3+)

QSqlDriver is fully implemented.


QSqlEditorFactory (Qt v3+)

QSqlEditorFactory is fully implemented.


QSqlError (Qt v3+)

QSqlError is fully implemented.


QSqlField (Qt v3+)

QSqlField is fully implemented.


QSqlFieldInfo (Qt v3+)

QSqlFieldInfo is fully implemented.


QSqlForm (Qt v3+)

QSqlForm is fully implemented.


QSqlIndex (Qt v3+)

QSqlIndex is fully implemented.


QSqlPropertyMap (Qt v3+)

QSqlPropertyMap is fully implemented. However, because PyQt +does not allow new properties to be defined, it is not possible to implement +custom editor widgets in Python and add them to a property map. This will +simple be ignored.

This problem may be addressed in a future release of PyQt.


QSqlQuery (Qt v3+)

QMap<QString,QVariant> boundValues const();

Not yet implemented. (Qt v3.2.0+)

virtual bool exec(const QString &query);

This has been renamed execQuery in Python.

bool exec();

This has been renamed execQuery in Python. (Qt v3.1+)


QSqlRecord (Qt v3+)

QSqlRecord is fully implemented.


QSqlRecordInfo (Qt v3+)

QSqlRecordInfo is implemented as a Python list of +QSqlFieldInfo instances.


QSqlResult (Qt v3+)

QSqlResult is fully implemented.


QSqlSelectCursor (Qt v3.2.0+)

int del(bool invalidate = TRUE);

This has been renamed delRecords in Python.

bool exec(const QString &query);

This has been renamed execQuery in Python.


qttable Module Reference

QTable (Qt v2.2+)

QTable is fully implemented.


QTableItem (Qt v2.2+)

QTableItem is fully implemented.


QCheckTableItem (Qt v3+)

QCheckTableItem is fully implemented.


QComboTableItem (Qt v3+)

QComboTableItem is fully implemented.


QTableSelection (Qt v2.2+)

QTableSelection is fully implemented.


qtui Module Reference

QWidgetFactory (Qt v3+)

QWidgetFactory is fully implemented.


qtxml Module Reference

QDomImplementation (Qt v2.2+)

QDomImplementation is fully implemented.


QDomNode (Qt v2.2+)

QDomNode is fully implemented, including the Python +== and != operators.


QDomNodeList (Qt v2.2+)

QDomNodeList is fully implemented.


QDomDocument (Qt v2.2+)

bool setContent(const QCString &buffer, bool namespaceProcessing, QString *errorMsg = 0, int *errorLine = 0, int *errorColumn = 0);

This takes the buffer and +namespaceProcessing parameters and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+)

bool setContent(const QByteArray &buffer, bool namespaceProcessing, QString *errorMsg = 0, int *errorLine = 0, int *errorColumn = 0);

This takes the buffer and +namespaceProcessing parameters and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+)

bool setContent(const QString &text, bool namespaceProcessing, QString *errorMsg = 0, int *errorLine = 0, int *errorColumn = 0);

This takes the text and +namespaceProcessing parameters and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+)

bool setContent(const QIODevice *dev, bool namespaceProcessing, QString *errorMsg = 0, int *errorLine = 0, int *errorColumn = 0);

This takes the dev and +namespaceProcessing parameters and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+)

bool setContent(const QCString &buffer, QString *errorMsg = 0, int *errorLine = 0, int *errorColumn = 0);

This takes the buffer parameter only and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+)

bool setContent(const QByteArray &buffer, QString *errorMsg = 0, int *errorLine = 0, int *errorColumn = 0);

This takes the buffer parameter only and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+)

bool setContent(const QString &text, QString *errorMsg = 0, int *errorLine = 0, int *errorColumn = 0);

This takes the text parameter only and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+)

bool setContent(const QIODevice *dev, QString *errorMsg = 0, int *errorLine = 0, int *errorColumn = 0);

This takes the dev parameter only and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+)

bool setContent(QXmlInputSource *source, QXmlReader *reader, QString *errorMsg = 0, int *errorLine = 0, int *errorColumn = 0);

Not yet implemented. (Qt v3.2.0+)


QDomDocumentFragment (Qt v2.2+)

QDomDocumentFragment is fully implemented.


QDomDocumentType (Qt v2.2+)

QDomDocumentType is fully implemented.


QDomNamedNodeMap (Qt v2.2+)

QDomNamedNodeMap is fully implemented.


QDomCharacterData (Qt v2.2+)

QDomCharacterData is fully implemented.


QDomAttr (Qt v2.2+)

QDomAttr is fully implemented.


QDomElement (Qt v2.2+)

QDomElement is fully implemented.


QDomText (Qt v2.2+)

QDomText is fully implemented.


QDomComment (Qt v2.2+)

QDomComment is fully implemented.


QDomCDATASection (Qt v2.2+)

QDomCDATASection is fully implemented.


QDomNotation (Qt v2.2+)

QDomNotation is fully implemented.


QDomEntity (Qt v2.2+)

QDomEntity is fully implemented.


QDomEntityReference (Qt v2.2+)

QDomEntityReference is fully implemented.


QDomProcessingInstruction (Qt v2.2+)

QDomProcessingInstruction is fully implemented.

diff --git a/doc/PyQt.sgml b/doc/PyQt.sgml new file mode 100644 index 0000000..253db19 --- /dev/null +++ b/doc/PyQt.sgml @@ -0,0 +1,5807 @@ + +
+ + Python Bindings for Qt (3.18.1) + + Phil + Thompson + + + + This document describes a set of Python bindings for the Qt widget set. + Contact the author at phil@riverbankcomputing.co.uk. + + + + + +Introduction + +PyQt is a set of Python bindings for the Qt toolkit and available for all +platforms supported by Qt, including Windows, Linux, UNIX, MacOS/X and embedded +systems such as the Sharp Zaurus and the Compaq iPAQ. They have been tested +against Qt versions 1.43 to 3.3.6, Qt Non-commercial, Qtopia 1.5.0, and Python +versions 1.5 to 2.4.2. Qt/Embedded v3 is not supported. Qt v4 is supported +by PyQt v4. + + + +PyQt is available under the GPL license for use with the GPL version of Qt, a +a commercial license for use with the commercial version of Qt, a +non-commercial license for use with the non-commercial version of Qt v2, and an +educational license for use with the educational version of Qt. + + + +There is also an evaluation version of PyQt for Windows. This must be used +with the corresponding evaluation version of Qt. + + + +PyQt is built using SIP (a tool for generating Python extension modules for +C++ class libraries). SIP v4.6 or later must be installed in order to build +and run this version of PyQt. + + + +PyQt for MacOS/X requires Qt v3.1.0 or later and Python v2.3 or later. + + + +The bindings are implemented as a number of Python modules + + + + + +qt is the main module and contains the core classes and most +user interface widgets. + + + + + +qtaxcontainer contains a sub-set of the classes implemented +in Qt's QAxContainer module, part of Qt's ActiveQt framework. + + + + + +qtcanvas contains the classes implemented in Qt's Canvas +module. + + + + + +qtgl contains the classes implemented in Qt's OpenGL module. + + + + + +qtnetwork contains the classes implemented in Qt's Network +module. + + + + + +qtpe contains the classes implemented in Qtopia (originally +called the Qt Palmtop Environment). It is only supported with Qt/Embedded. + + + + + +qtsql contains the classes implemented in Qt's SQL module. + + + + + +qttable contains the classes implemented in Qt's Table +module. + + + + + +qtui contains the classes implemented in Qt's qui library. +These allow GUIs to be created directly from Qt Designer's +.ui files. + + + + + +qtxml contains the classes implemented in Qt's XML module. + + + + + +qtext contains useful third-party classes that are not part +of Qt. At the moment it contains bindings for QScintilla, the port to Qt of +the Scintilla programmer's editor class. + + + + + +PyQt also includes the pyuic and +pylupdate utilities which correspond to the Qt +uic and lupdate utilities. +pyuic converts the GUI designs created with Qt Designer to +executable Python code. pylupdate scans Python code, +extracts all strings that are candidates for internationalisation, and creates +an XML file for use by Qt Linguist. + + +Changes + +The changes visible to the Python programmer in this release are as follows. + + + + + +This version requires SIP v4.4 (or later). + + + + + +Concatenating Python strings and QStrings is now supported. + + + + + +QString now supports the * and +*= operators that behave as they do for Python strings. + + + + + +QString is more interoperable with Python string and unicode +objects. For example they can be passed as arguments to +open() and to most (but not all) string methods. + + + + + +QPopupMenu (and sub-classes) instances now transfer +ownership of the menu to Python in the call to exec_loop(). +This means the menu's resources are all released when the Python wrapper is +garbage collected without needing to call +QObject.deleteLater(). + + + + + +QObject.sender() now handles Python signals. + + + + + +The missing MacintoshVersion enum has been added. + + + + + +PYQT_BUILD has been removed. + + + + + +The convention for converting between a C/C++ null pointer and Python's +None object has now been universally applied. In previous +versions a null pointer to, for example, a Qt list container would often be +converted to an empty list rather than None. + + + + + + + + +Other PyQt Goodies +Using Qt Designer + +Qt Designer is a GPL'ed GUI design editor provided by Trolltech as part of Qt. +It generates an XML description of a GUI design. Qt includes +uic which generates C++ code from that XML. + + + +PyQt includes pyuic which generates Python code from the +same XML. The Python code is self contained and can be executed immediately. + + + +It is sometimes useful to be able to include some specific Python code in the +output generated by pyuic. For example, if you are using +custom widgets, pyuic has no way of knowing the name of the +Python module containing the widget and so cannot generate the required +import statement. To help get around this, +pyuic will extract any lines entered in the +Comment field of Qt Designer's +Form Settings dialog that begin with +Python: and copies them to the generated output. + + + +Here's a simple example showing the contents of the Comment +field. + + + +This comment will be ignored by pyuic. +Python: +Python:# Import our custom widget. +Python:from foo import bar + + + +Here's the corresponding output from pyuic. + + + +from qt import * + +# Import our custom widget. +from foo import bar + + + +Thanks to Christian Bird, pyuic will extract Python code +entered using Qt Designer to implement slots. In Qt Designer, when you need to +edit a slot and the source editor appears, enter Python code between the curly +braces. Don't worry about the correct starting indent level, each line is +prepended with a correct indentation. + + + +Make sure that the ui.h file is in the same directory as the +.ui file when using pyuic. The +.ui file implies the name of the .ui.h +file so there is no need to specify it on the command line. + + + +Here's an example of a simple slot. + + + +void DebMainWindowFrm::browsePushButtonClicked() +{ +if self.debugging: + QMessageBox.critical(self, "Event", "browse pushbutton was clicked!") +} + + + +Here is the resulting code when pyuic is run. + + + +class DebMainWindowFrm(QMainWindow): + ...stuff... + def browsePushButtonClicked(self): + if self.debugging: + QMessageBox.critical(self, "Event", "browse pushbutton was clicked!") + + + +Note that indenting is as normal and that self and all other +parameters passed to the slot are available. + + + +If you use this, you will need to turn off all of the fancy options for the C++ +editor in Designer as it tries to force C++ syntax and that's naturally +annoying when trying to code in Python. + + + +Using Qt Linguist + +Qt includes the lupdate program which parses C++ source +files converting calls to the QT_TR_NOOP() and +QT_TRANSLATE_NOOP() macros to .ts +language source files. The lrelease program is then used to +generate .qm binary language files that are distributed with +your application. + + + +Thanks to Detlev Offenbach, PyQt includes the pylupdate +program. This generates the same .ts language source files +from your PyQt source files. + + + + + +Deploying Commercial PyQt Applications + +When deploying commercial PyQt applications it is necessary to discourage users +from accessing the underlying PyQt modules for themselves. A user that used +the modules shipped with your application to develop new applications would +themselves be considered a developer and would need their own commercial Qt and +PyQt licenses. + + + +One solution to this problem is the +VendorID +package. This allows you to build Python extension modules that can only be +imported by a digitally signed custom interpreter. The package enables you to +create such an interpreter with your application embedded within it. The +result is an interpreter that can only run your application, and PyQt modules +that can only be imported by that interpreter. You can use the package to +similarly restrict access to any extension module. + + + +In order to build PyQt with support for the VendorID package, pass the +-i command line flag to configure.py. + + + +<Literal>pyqtconfig</Literal> and Build System Support + +The SIP build system (ie. the sipconfig module) is described +in the SIP documentation. PyQt includes the pyqtconfig +module that can be used by configuration scripts of other bindings that are +built on top of PyQt. + + + +The pyqtconfig module contains the following classes: + + + + +Configuration(sipconfig.Configuration) + + +This class encapsulates additional configuration values, specific to PyQt, that +can be accessed as instance variables. + + + +The following configuration values are provided (in addition to those provided +by the sipconfig.Configuration class): + + + + +pyqt_bin_dir + + +The name of the directory containing the pyuic and +pylupdate executables. + + + + + + +pyqt_config_args + + +The command line passed to configure.py when PyQt was +configured. + + + + + + +pyqt_mod_dir + + +The name of the directory containing the PyQt modules. + + + + + + +pyqt_modules + + +A string containing the names of the PyQt modules that were installed. + + + + + + +pyqt_qt_sip_flags + + +A string of the SIP flags used to generate the code for the +qt module and which should be added to those needed by any +module that imports the qt module. + + + + + + +pyqt_qtaxcontainer_sip_flags + + +A string of the SIP flags used to generate the code for the +qtaxcontainer module and which should be added to those +needed by any module that imports the qtaxcontainer module. + + + + + + +pyqt_qtcanvas_sip_flags + + +A string of the SIP flags used to generate the code for the +qtcanvas module and which should be added to those needed by +any module that imports the qtcanvas module. + + + + + + +pyqt_qtext_sip_flags + + +A string of the SIP flags used to generate the code for the +qtext module and which should be added to those needed by +any module that imports the qtext module. + + + + + + +pyqt_qtgl_sip_flags + + +A string of the SIP flags used to generate the code for the +qtgl module and which should be added to those needed by any +module that imports the qtgl module. + + + + + + +pyqt_qtnetwork_sip_flags + + +A string of the SIP flags used to generate the code for the +qtnetwork module and which should be added to those needed +by any module that imports the qtnetwork module. + + + + + + +pyqt_qtsql_sip_flags + + +A string of the SIP flags used to generate the code for the +qtsql module and which should be added to those needed by +any module that imports the qtsql module. + + + + + + +pyqt_qttable_sip_flags + + +A string of the SIP flags used to generate the code for the +qttable module and which should be added to those needed by +any module that imports the qttable module. + + + + + + +pyqt_qtui_sip_flags + + +A string of the SIP flags used to generate the code for the +qtui module and which should be added to those needed by any +module that imports the qtui module. + + + + + + +pyqt_qtxml_sip_flags + + +A string of the SIP flags used to generate the code for the +qtxml module and which should be added to those needed by +any module that imports the qtxml module. + + + + + + +pyqt_sip_dir + + +The name of the base directory where the .sip files for each +of the PyQt modules is installed. A sub-directory exists with the same name as +the module. + + + + + + +pyqt_version + + +The PyQt version as a 3 part hexadecimal number (eg. v3.10 is represented as +0x030a00). + + + + + + +pyqt_version_str + + +The PyQt version as a string. For development snapshots it will start with +snapshot-. + + + + + + + + + + +QtModuleMakefile(sipconfig.SIPModuleMakefile) + + +The Makefile class for modules that import the qt module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtAxContainerModuleMakefile(QtModuleMakefile) + + +The Makefile class for modules that import the qtaxcontainer +module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtCanvasModuleMakefile(QtModuleMakefile) + + +The Makefile class for modules that import the qtcanvas +module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtExtModuleMakefile(QtModuleMakefile) + + +The Makefile class for modules that import the qtext module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtGLModuleMakefile(QtModuleMakefile) + + +The Makefile class for modules that import the qtgl module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtNetworkModuleMakefile(QtModuleMakefile) + + +The Makefile class for modules that import the qtnetwork +module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtTableModuleMakefile(QtModuleMakefile) + + +The Makefile class for modules that import the qttable +module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtSQLModuleMakefile(QtTableModuleMakefile) + + +The Makefile class for modules that import the qtsql module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtUIModuleMakefile(QtModuleMakefile) + + +The Makefile class for modules that import the qtui module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtXMLModuleMakefile(QtModuleMakefile) + + +The Makefile class for modules that import the qtxml module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + + +Things to be Aware Of +super and Wrapped Classes + +Internally PyQt implements a lazy technique for attribute lookup where +attributes are only placed in type and instance dictionaries when they are +first referenced. This technique is needed to reduce the time taken to import +large modules such as PyQt. + + + +In most circumstances this technique is transparent to an application. The +exception is when super is used with a PyQt class. The way +that super is currently implemented means that the lazy +lookup is bypassed resulting in AttributeError exceptions +unless the attribute has been previously referenced. + + + +Note that this restriction applies to any class wrapped by SIP and not just +PyQt. + + + + +Python Strings, Qt Strings and Unicode + +Unicode support was added to Qt in v2.0 and to Python in v1.6. In Qt, Unicode +support is implemented using the QString class. It is +important to understand that QStrings, Python string objects +and Python Unicode objects are all different but conversions between them are +automatic in almost all cases and easy to achieve manually when needed. + + + +Whenever PyQt expects a QString as a function argument, a +Python string object or a Python Unicode object can be provided instead, and +PyQt will do the necessary conversion automatically. + + + +You may also manually convert Python string and Unicode objects to +QStrings by using the QString constructor +as demonstrated in the following code fragment. + + + +qs1 = QString('Converted Python string object') +qs2 = QString(u'Converted Python Unicode object') + + + +In order to convert a QString to a Python string object use +the Python str() function. Applying +str() to a null QString and an empty +QString both result in an empty Python string object. + + + +In order to convert a QString to a Python Unicode object use +the Python unicode() function. Applying +unicode() to a null QString and an empty +QString both result in an empty Python Unicode object. + + + +Access to Protected Member Functions + +When an instance of a C++ class is not created from Python it is not possible +to access the protected member functions, or emit the signals, of that +instance. Attempts to do so will raise a Python exception. Also, any Python +methods corresponding to the instance's virtual member functions will never be +called. + + + +<Literal>None</Literal> and <Literal>NULL</Literal> + +Throughout the bindings, the None value can be specified +wherever NULL is acceptable to the underlying C++ code. + + + +Equally, NULL is converted to None +whenever it is returned by the underlying C++ code. + + + + +Support for C++ <Literal>void *</Literal> Data Types + +PyQt represents void * values as objects of type +sip.voidptr. Such values are often used to pass the +addresses of external objects between different Python modules. To make this +easier, a Python integer (or anything that Python can convert to an integer) +can be used whenever a sip.voidptr is expected. + + +A sip.voidptr may be converted to a Python integer by using +the int() builtin function. + + +A sip.voidptr may be converted to a Python string by using +its asstring() method. The asstring() +method takes an integer argument which is the length of the data in bytes. + + + + +Support for Threads + +PyQt implements the full set of Qt's thread classes. Python, of course, also +has its own thread extension modules. If you are using SIP v4 (or later) and +Python v2.3.5 (or later) then PyQt does not impose any additional restrictions. +(Read the relevant part of the Qt documentation to understand the restrictions +imposed by the Qt API.) + + +If you are using earlier versions of either SIP or Python then it is possible +to use either of the APIs so long as you follow some simple rules. + + + + +If you use the Qt API then the very first import of one of +the PyQt modules must be done from the main thread. + + + + +If you use the Python API then all calls to PyQt (including any +imports) must be done from one thread only. Therefore, if +you want to make calls to PyQt from several threads then you must use the Qt +API. + + + + +If you want to use both APIs in the same application then all calls to PyQt +must be done from threads created using the Qt API. + + + + +The above comments actually apply to any SIP generated module, not just PyQt. + + + +Garbage Collection + +C++ does not garbage collect unreferenced class instances, whereas Python does. +In the following C++ fragment both colours exist even though the first can no +longer be referenced from within the program: + + + +c = new QColor(); +c = new QColor(); + + + +In the corresponding Python fragment, the first colour is destroyed when +the second is assigned to c: + + + +c = QColor() +c = QColor() + + + +In Python, each colour must be assigned to different names. Typically this +is done within class definitions, so the code fragment would be something like: + + + +self.c1 = QColor() +self.c2 = QColor() + + + +Sometimes a Qt class instance will maintain a pointer to another instance and +will eventually call the destructor of that second instance. The most common +example is that a QObject (and any of its sub-classes) keeps +pointers to its children and will automatically call their destructors. In +these cases, the corresponding Python object will also keep a reference to the +corresponding child objects. + + + +So, in the following Python fragment, the first QLabel is +not destroyed when the second is assigned to l because the +parent QWidget still has a reference to it. + + + +p = QWidget() +l = QLabel('First label',p) +l = QLabel('Second label',p) + + + +C++ Variables + +Access to C++ variables is supported. They are accessed as Python instance +variables. For example: + + + +tab = QTab() +tab.label = "First Tab" +tab.r = QRect(10,10,75,30) + + + +Global variables and static class variables are effectively read-only. They +can be assigned to, but the underlying C++ variable will not be changed. This +may change in the future. + + + +Access to protected C++ class variables is not supported. This may change in +the future. + + + +Multiple Inheritance + +It is not possible to define a new Python class that sub-classes from more than +one Qt class. + + + +i18n Support + +Qt implements i18n support through the Qt Linguist application, the +QTranslator class, and the +QApplication::translate(), QObject::tr() +and QObject::trUtf8() methods. Usually the +tr() method is used to obtain the correct translation of a +message. The translation process uses a message context to allow the same +message to be translated differently. tr() is actually +generated by moc and uses the hardcoded class name as the +context. On the other hand, QApplication::translate() +allows to context to be explicitly stated. + + + +Unfortunately, because of the way Qt implents tr() (and +trUtf8()) it is not possible for PyQt to exactly reproduce +its behavour. The PyQt implementation of tr() (and +trUtf8()) uses the class name of the instance as the +context. The key difference, and the source of potential problems, is that the +context is determined dynamically in PyQt, but is hardcoded in Qt. In other +words, the context of a translation may change depending on an instance's class +hierarchy. + + + +class A(QObject): + def __init__(self): + QObject.__init__(self) + + def hello(self): + return self.tr("Hello") + +class B(A): + def __init__(self): + A.__init__(self) + +a = A() +a.hello() + +b = B() +b.hello() + + + +In the above the message is translated by a.hello() using a +context of A, and by b.hello() using a +context of B. In the equivalent C++ version the context +would be A in both cases. + + + +The PyQt behaviour is unsatisfactory and may be changed in the future. It is +recommended that QApplication.translate() be used in +preference to tr() (and trUtf8()). This +is guaranteed to work with current and future versions of PyQt and makes it +much easier to share message files between Python and C++ code. Below is the +alternative implementation of A that uses +QApplication.translate(). + + + +class A(QObject): + def __init__(self): + QObject.__init__(self) + + def hello(self): + return qApp.translate("A","Hello") + + + +Note that the code generated by pyuic uses +QApplication.translate(). + + + + + +Signal and Slot Support + +A signal may be either a Qt signal (specified using +SIGNAL()) or a Python signal (specified using +PYSIGNAL()). + + + +A slot can be either a Python callable object, a Qt signal (specified using +SIGNAL()), a Python signal (specified using +PYSIGNAL()), or a Qt slot (specified using +SLOT()). + + + +You connect signals to slots (and other signals) as you would from C++. For +example: + + + +QObject.connect(a,SIGNAL("QtSig()"),pyFunction) +QObject.connect(a,SIGNAL("QtSig()"),pyClass.pyMethod) +QObject.connect(a,SIGNAL("QtSig()"),PYSIGNAL("PySig")) +QObject.connect(a,SIGNAL("QtSig()"),SLOT("QtSlot()")) +QObject.connect(a,PYSIGNAL("PySig"),pyFunction) +QObject.connect(a,PYSIGNAL("PySig"),pyClass.pyMethod) +QObject.connect(a,PYSIGNAL("PySig"),SIGNAL("QtSig()")) +QObject.connect(a,PYSIGNAL("PySig"),SLOT("QtSlot()")) + + + +When a slot is a Python method that corresponds to a Qt slot then a signal can +be connected to either the Python method or the Qt slot. The following +connections achieve the same effect. + + + +sbar = QScrollBar() +lcd = QLCDNumber() + +QObject.connect(sbar,SIGNAL("valueChanged(int)"),lcd.display) +QObject.connect(sbar,SIGNAL("valueChanged(int)"),lcd,SLOT("display(int)")) + + + +The difference is that the second connection is made at the C++ level and is +more efficient. + + + +Disconnecting signals works in exactly the same way. + + + +Any instance of a class that is derived from the QObject +class can emit a signal using the emit method. This takes +two arguments. The first is the Python or Qt signal, the second is a Python +tuple which are the arguments to the signal. For example: + + + +a.emit(SIGNAL("clicked()"),()) +a.emit(PYSIGNAL("pySig"),("Hello","World")) + + + +Note that when a slot is a Python callable object its reference count is not +increased. This means that a class instance can be deleted without having to +explicitly disconnect any signals connected to its methods. However, it also +means that using lambda expressions as slots will not work unless you keep a +separate reference to the expression to prevent it from being immediately +garbage collected. + + + +Qt allows a signal to be connected to a slot that requires fewer arguments than +the signal passes. The extra arguments are quietly discarded. Python slots +can be used in the same way. + + + + +Static Member Functions + +Static member functions are implemented as Python class functions. +For example the C++ static member function +QObject::connect() is called from Python as +QObject.connect() or self.connect() if +called from a sub-class of QObject. + + + + +Enumerated Types + +Enumerated types are implemented as a set of simple variables corresponding to +the separate enumerated values. + + + +When using an enumerated value the name of the class (or a sub-class) in which +the enumerated type was defined in must be included. For example: + + + +Qt.SolidPattern +QWidget.TabFocus +QFrame.TabFocus + + + + +Module Reference Documentation + +The following sections should be used in conjunction with the normal class +documentation - only the differences specific to the Python bindings are +documented here. + + + +In these sections, Not yet implemented +implies that the feature can be easily implemented if needed. Not +implemented implies that the feature will not be implemented, either +because it cannot be or because it is not appropriate. + + + +If a class is described as being fully implemented then +all non-private member functions and all public class variables have been +implemented. + + + +If an operator has been implemented then it is stated explicitly. + + + +Classes that are not mentioned have not yet been implemented. + + + + +<Literal>qt</Literal> Module Reference +Qt Constants + +All constant values defined by Qt have equivalent constants defined to Python. + + +Qt (Qt v2+) + +Qt is fully implemented. + + +QAccel + +QAccel is fully implemented. + + +QAction (Qt v2.2+) + +QAction is fully implemented. + + + +QActionGroup (Qt v2.2+) + +QActionGroup is fully implemented. + + +QApplication + + QApplication + int &argc + char **argv + + +This takes one parameter which is a list of argument strings. Arguments +used by Qt are removed from the list. + + + + QApplication + int &argc + char **argv + bool GUIenabled + + +This takes two parameters, the first of which is a list of argument strings. +Arguments used by Qt are removed from the list. + + + + QApplication + int &argc + char **argv + Type type + + +This takes two parameters, the first of which is a list of argument strings. +Arguments used by Qt are removed from the list. (Qt v2.2+) + + + + int exec + + + +This has been renamed to exec_loop in Python. + + +QAssistantClient (Qt v3.1+) + +QAssistantClient is fully implemented. + + +QBitmap + +QBitmap is fully implemented. + + +QBrush + +QBrush is fully implemented, including the Python +== and != operators. + + +QButton + +QButton is fully implemented. + + +QButtonGroup + +QButtonGroup is fully implemented. + + +QByteArray + +A Python string can be used whenever a QByteArray can be +used. A QByteArray can be converted to a Python string +using the Python str() function. + + + + QByteArray &assign + const char *data + uint size + + +Not implemented. + + + + char &at + uint i + + +Not yet implemented. + + + + int contains + const char &d + + +Not yet implemented. + + + + bool fill + const char &d + int size = -1 + + +Not yet implemented. + + + + int find + const char &d + uint i = 0 + + +Not yet implemented. + + + + void resetRawData + const char *data + uintsize + + +Not implemented. + + + + QByteArray &setRawData + const char *data + uintsize + + +Not implemented. + + +QCDEStyle (Qt v2+) + +QCDEStyle is fully implemented. + + +QCheckBox + +QCheckBox is fully implemented. + + +QClipboard + + void *data const + const char *format + + +Not yet implemented (Qt v1.x). + + + + void setData + const char *format + void * + + +Not yet implemented (Qt v1.x). + + +QColor + +The Python == and != operators are +supported. + + + + void getHsv + int *h + int *s + int *v + + +This takes no parameters and returns the h, +s and v values as a tuple. + + + + void getRgb + int *r + int *g + int *b + + +This takes no parameters and returns the r, +g and b values as a tuple. + + + + void hsv + int *h + int *s + int *v + + +This takes no parameters and returns the h, +s and v values as a tuple. + + + + void rgb + int *r + int *g + int *b + + +This takes no parameters and returns the r, +g and b values as a tuple. + + +QColorDialog (Qt v2+) + + static QRgb getRgba + QRgb initial + bool *ok + QWidget *parent = 0 + const char *name = 0 + + +This takes the initial, parent and +name parameters and returns a tuple containing the +QRgb result and the ok value. + + +QColorGroup + +QColorGroup is fully implemented. + + +QComboBox + +QComboBox is fully implemented. + + +QCommonStyle (Qt v2+) + + virtual void getButtonShift + int &x + int &y + + +This takes no parameters and returns a tuple of the x and +y values. (Qt v2) + + + + virtual void tabbarMetrics + const QTabBar *t + int &hframe + int &vframe + int &overlap + + +This takes only the t parameter and returns a tuple of the +hframe, vframe and +overlap values. (Qt v2) + + +QCString (Qt v2+) + +A Python string can be used whenever a QCString can be used. +A QCString can be converted to a Python string using the +Python str() function. + + + + QCString &sprintf + const char *format + ... + + +Not implemented. + + + + short toShort + bool *ok = 0 + + +This returns a tuple of the short result and the +ok value. + + + + ushort toUShort + bool *ok = 0 + + +This returns a tuple of the ushort result and the +ok value. + + + + int toInt + bool *ok = 0 + + +This returns a tuple of the int result and the +ok value. + + + + uint toUInt + bool *ok = 0 + + +This returns a tuple of the uint result and the +ok value. + + + + long toLong + bool *ok = 0 + + +This returns a tuple of the long result and the +ok value. + + + + ulong toULong + bool *ok = 0 + + +This returns a tuple of the ulong result and the +ok value. + + + + float toFloat + bool *ok = 0 + + +This returns a tuple of the float result and the +ok value. + + + + double toDouble + bool *ok = 0 + + +This returns a tuple of the double result and the +ok value. + + +QCursor + +QCursor is fully implemented. + + +QDataStream + + QDataStream &readBytes + const char *&s + uint &l + + +This takes no parameters. The QDataStream result and the +data read are returned as a tuple. + + + + QDataStream &readRawBytes + const char *s + uint l + + +This takes only the l parameter. The +QDataStream result and the data read are returned as a +tuple. + + + + QDataStream &writeBytes + const char *s + uint len + + +len is derived from s and not passed as a +parameter. + + + + QDataStream &writeRawBytes + const char *s + uint len + + +len is derived from s and not passed as a +parameter. + + +QDate + +The Python +==, !=, +<, <=, +>, >= +and __nonzero__ +operators are supported. + + + + int weekNumber + int *yearNum = 0 + + +This takes no parameters and returns the week number and the year number as a +tuple. (Qt v3.1+) + + + +QDateTime + +QDateTime is fully implemented, including the Python +==, !=, +<, <=, +>, >= +and __nonzero__ +operators. + + + +QTime + +QTime is fully implemented, including the Python +==, !=, +<, <=, +>, >= +and __nonzero__ +operators. + + +QDateEdit (Qt v3+) + +QDateEdit is fully implemented. + + + +QTimeEdit (Qt v3+) + +QTimeEdit is fully implemented. + + + +QDateTimeEdit (Qt v3+) + +QDateTimeEdit is fully implemented. + + +QDesktopWidget (Qt v3+) + +QDesktopWidget is fully implemented. + + +QDial (Qt v2.2+) + +QDial is fully implemented. + + +QDialog + + int exec + + + +This has been renamed to exec_loop in Python. + + +This method also causes ownership of the underlying C++ dialog to be transfered +to Python. This means that the C++ dialog will be deleted when the Python +wrapper is garbage collected. Although this is a little inconsistent, it +ensures that the dialog is deleted without having to explicity code it using +QObject.deleteLater() or other techniques. + + +QDir + +QDir is fully implemented, including the Python +len, [] (for reading slices and +individual elements), ==, != and +in operators + + + +QFileInfoList + +This class isn't implemented. Whenever a QFileInfoList is +the return type of a function or the type of an argument, a Python list of +QFileInfo instances is used instead. + + +QDockArea (Qt v3+) + + bool hasDockWindow const + QDockWindow *w + int *index = 0 + + +This takes the w parameter and returns the index of the +QDockWIndow or -1 if the QDockArea does not contain the QDockWindow. + + +QDockWindow (Qt v3+) + +QDockWindow is fully implemented. + + +QColorDrag (Qt v2.1+) + +QColorDrag is fully implemented. + + + +QDragObject + +QDragObject is fully implemented. + + + +QImageDrag + +QImageDrag is fully implemented. + + + +QStoredDrag + +QStoredDrag is fully implemented. + + + +QTextDrag + +QTextDrag is fully implemented. + + + +QUriDrag (Qt v2+) + +QUriDrag is fully implemented. + + + +QUrlDrag (Qt v1.x) + +QUrlDrag is fully implemented. + + +QDropSite + +QDropSite is fully implemented. + + +QErrorMessage (Qt v3+) + +QErrorMessage is fully implemented. + + +QEvent + +QEvent is fully implemented. + + +Instances of QEvents are automatically converted to the +correct sub-class. + + + +QChildEvent + +QChildEvent is fully implemented. + + + +QCloseEvent + +QCloseEvent is fully implemented. + + + +QIconDragEvent (Qt v3.3+) + +QIconDragEvent is fully implemented. + + + +QContextMenuEvent (Qt v3+) + +QContextMenuEvent is fully implemented. + + + +QCustomEvent + +QCustomEvent is fully implemented. Any Python object can be +passed as the event data and its reference count is increased. + + + +QDragEnterEvent + +QDragEnterEvent is fully implemented. + + + +QDragLeaveEvent + +QDragLeaveEvent is fully implemented. + + + +QDragMoveEvent + +QDragMoveEvent is fully implemented. + + + +QDropEvent + +QDropEvent is fully implemented. + + + +QFocusEvent + +QFocusEvent is fully implemented. + + + +QHideEvent + +QHideEvent is fully implemented. + + + +QIMComposeEvent (Qt v3.1+) + +QIMComposeEvent is fully implemented. + + + +QIMEvent (Qt v3+) + +QIMEvent is fully implemented. + + + +QKeyEvent + +QKeyEvent is fully implemented. + + + +QMouseEvent + +QMouseEvent is fully implemented. + + + +QMoveEvent + +QMoveEvent is fully implemented. + + + +QPaintEvent + +QPaintEvent is fully implemented. + + + +QResizeEvent + +QResizeEvent is fully implemented. + + + +QShowEvent + +QShowEvent is fully implemented. + + + +QTabletEvent (Qt v3+) + +QTabletEvent is fully implemented. + + + +QTimerEvent + +QTimerEvent is fully implemented. + + + +QWheelEvent (Qt v2+) + +QWheelEvent is fully implemented. + + +QEventLoop (Qt v3.1+) + + virtual int exec + + + +This has been renamed to exec_loop in Python. + + +QFile + + bool open + int m + FILE *f + + +Not implemented. + + + + Q_LONG readBlock + char *data + Q_ULONG len + + +This takes a single len parameter. The +data is returned if there was no error, otherwise +None is returned. + + + + Q_LONG readLine + char *data + Q_ULONG maxlen + + +This takes a single maxlen parameter. The +data is returned if there was no error, otherwise +None is returned. + + + + static void setDecodingFunction + EncoderFn f + + +Not yet implemented. (Qt v2+) + + + + static void setEncodingFunction + EncoderFn f + + +Not yet implemented. (Qt v2+) + + + + Q_LONG writeBlock + const char *data + Q_ULONG len + + +len is derived from data and not passed +as a parameter. + + +QFileDialog + +QFileDialog is fully implemented. + + + +QFileIconProvider + +QFileIconProvider is fully implemented. + + + +QFilePreview + +QFilePreview is fully implemented. However it cannot be +used from Python in the same way as it is used from C++ because PyQt does not +support multiple inheritance involving more than one wrapped class. A trick +that seems to work is to use composition rather than inheritance as in the +following code fragment. + + +class FilePreview(QFilePreview): + pass + +class Preview(QLabel): + def __init__(self, parent=None): + QLabel.__init__(self, parent) + self.preview = FilePreview() + self.preview.previewUrl = self.previewUrl + + +Note that QFilePreview cannot be instantiated directly because it is abstract. +Thanks to Hans-Peter Jansen for this trick. + + +QFileInfo + +QFileInfo is fully implemented. + + +QFont + +QFont is fully implemented, including the Python +== and != operators. + + +QFontDatabase (Qt v2.1+) + +QFontDatabase is fully implemented. + + +QFontDialog (Qt v2+) + + static QFont getFont + bool *ok + const QFont &def + QWidget *parent = 0 + const char *name = 0 + + +This takes the def, parent and +name parameters and returns a tuple containing the +QFont result and the ok value. + + + + static QFont getFont + bool *ok + QWidget *parent = 0 + const char *name = 0 + + +This takes the parent and name parameters +and returns a tuple containing the QFont result and the +ok value. + + +QFontInfo + +QFontInfo is fully implemented. + + +QFontMetrics + + QRect boundingRect + int x + int y + int w + int h + int flags + const QString &str + int len = -1 + int tabstops = 0 + int *tabarray = 0 + + +The tabarray parameter is a Python list of integers. + + + + QSize size + int flags + const QString &str + int len = -1 + int tabstops = 0 + int *tabarray = 0 + + +The tabarray parameter is a Python list of integers. + + +QFrame + +QFrame is fully implemented. + + +QGManager (Qt v1.x) + +QGManager is fully implemented. + + + +QChain (Qt v1.x) + +QChain is implemented as an opaque class. + + +QGrid (Qt v2+) + +QGrid is fully implemented. + + +QGridView (Qt v3+) + +QGridView is fully implemented. + + +QGroupBox + +QGroupBox is fully implemented. + + +QHBox (Qt v2+) + +QHBox is fully implemented. + + +QHButtonGroup (Qt v2+) + +QHButtonGroup is fully implemented. + + +QHeader + +QHeader is fully implemented. + + +QHGroupBox (Qt v2+) + +QHGroupBox is fully implemented. + + +QIconSet + +QIconSet is fully implemented. + + + +QIconFactory (Qt v3.1+) + +QIconFactory is fully implemented. + + +QIconView (Qt v2.1+) + + QIconViewItem *makeRowLayout + QIconViewItem *begin + int &y + + +Not yet implemented. + + + +QIconViewItem (Qt v2.1+) + +QIconViewItem is fully implemented. + + + +QIconDrag (Qt v2.1+) + +QIconDrag is fully implemented. + + + +QIconDragItem (Qt v2.1+) + +QIconDragItem is fully implemented. + + +QImage + +The Python == and != operators are +supported. + + + + QImage + const char *xpm[] + + +This takes a list of strings as its parameter. + + + + QImage + uchar *data + int w + int h + int depth + QRgb *colorTable + int numColors + Endian bitOrder + + +The colorTable parameter is a list of QRgb instances or +None. (Qt v2.1+) + + + + uchar *bits + + + +The return value is a sip.voidptr object which is only +useful if passed to another Python module. + + + + QRgb *colorTable + + + +The return value is a sip.voidptr object which is only +useful if passed to another Python module. + + + + QImage convertDepthWithPalette + int + QRgb *p + int pc + int cf = 0 + + +Not implemented. + + + + uchar **jumpTable + + + +The return value is a sip.voidptr object which is only +useful if passed to another Python module. + + + + bool loadFromData + const uchar *buf + uint len + const char *format = 0 + ColorMode mode = Auto + + +len is derived from buf and not passed as +a parameter. + + + + uchar *scanLine + int i + + +The return value is a sip.voidptr object which is only +useful if passed to another Python module. + + + +QImageIO + + static void defineIOHandler + const char *format + const char *header + const char *flags + image_io_handler read_image + image_io_handler write_image + + +Not implemented. + + + +QImageTextKeyLang + +QImageTextKeyLang is fully implemented. + + +QInputDialog (Qt v2.1+) + + static QString getText + const QString &caption + const QString &label + const QString &text = QString::null + bool *ok = 0 + QWidget *parent = 0 + const char *name = 0 + + +The ok is not passed and the returned value is a tuple of +the QString result and the ok flag. +(Qt v2.1 - v2.3.1) + + + + static QString getText + const QString &caption + const QString &label + QLineEdit::EchoModeecho + const QString &text = QString::null + bool *ok = 0 + QWidget *parent = 0 + const char *name = 0 + + +The ok is not passed and the returned value is a tuple of +the QString result and the ok flag. +(Qt v2.2 - v2.3.1) + + + + static QString getText + const QString &caption + const QString &label + QLineEdit::EchoModeecho = QLineEdit::Normal + const QString &text = QString::null + bool *ok = 0 + QWidget *parent = 0 + const char *name = 0 + + +The ok is not passed and the returned value is a tuple of +the QString result and the ok flag. +(Qt v3+) + + + + static int getInteger + const QString &caption + const QString &label + int num = 0 + int from = -2147483647 + int to = 2147483647 + int step = 1 + bool *ok = 0 + QWidget *parent = 0 + const char *name = 0 + + +The ok is not passed and the returned value is a tuple of +the int result and the ok flag. + + + + static double getDouble + const QString &caption + const QString &label + double num = 0 + double from = -2147483647 + double to = 2147483647 + int step = 1 + bool *ok = 0 + QWidget *parent = 0 + const char *name = 0 + + +The ok is not passed and the returned value is a tuple of +the double result and the ok flag. + + + + static QString getItem + const QString &caption + const QString &label + const QStringList &list + int current = 0 + bool editable = TRUE + bool *ok = 0 + QWidget *parent = 0 + const char *name = 0 + + +The ok is not passed and the returned value is a tuple of +the QString result and the ok flag. + + +QInterlaceStyle (Qt v2.3.1+) + + void scrollBarMetrics + const QTabBar *sb + int &sliderMin + int &sliderMax + int &sliderLength + int &buttonDim + + +This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. + + +QIODevice + +QIODevice is fully implemented. + + +QKeySequence (Qt v3+) + +QKeySequence is fully implemented including the operators +==, !=, QString() and +int(). A QString instance or a Python +integer may be used whenever a QKeySequence can be used. + + +QLabel + +QLabel is fully implemented. + + +QLayout + +QLayout is fully implemented. + + + +QBoxLayout + +QBoxLayout is fully implemented. + + + +QGLayoutIterator (Qt v2+) + +QGLayoutIterator is fully implemented. + + + +QGridLayout + + bool findWidget + QWidget *w + int *row + int *col + + +This takes the w parameter and returns a tuple containing +the bool result, row and +col. (Qt v2+) + + + +QHBoxLayout + +QHBoxLayout is fully implemented. + + + +QLayoutItem (Qt v2+) + +QLayoutItem is fully implemented. + + + +QLayoutIterator (Qt v2+) + + QLayoutItem *next + + + +This is a wrapper around the QLayoutIterator +++ operator. + + + +QSpacerItem (Qt v2+) + +QSpacerItem is fully implemented. + + + +QVBoxLayout + +QVBoxLayout is fully implemented. + + + +QWidgetItem (Qt v2+) + +QWidgetItem is fully implemented. + + +QLCDNumber + +QLCDNumber is fully implemented. + + +QLibrary (Qt v3+) + +QLibrary is fully implemented. + + +QLineEdit + + int characterAt + int xpos + QChar *chr + + +This takes only the xpos parameter and returns the int +result and the chr value as a tuple. (Qt v3+) + + + + void del + + + +This has been renamed delChar in Python. (Qt v2+) + + + + bool getSelection + int *start + int *end + + +This takes no parameters and returns the bool result and the +start and end values as a tuple. +(Qt v3+) + + +QList<type> (Qt v2) + +Types based on the QList template are automatically +converted to and from Python lists of the type. + + +QListBox + + bool itemYPos + int index + int *yPos + + +This takes the index parameter and returns a tuple +containing the bool result and yPos. +(Qt v1.x) + + + +QListBoxItem + +QListBoxItem is fully implemented. + + + +QListBoxPixmap + +QListBoxPixmap is fully implemented. + + + +QListBoxText + +QListBoxText is fully implemented. + + +QListView + +QListView is fully implemented. + + +Note that to remove a child QListViewItem you must first +call takeItem() and then del(). + + + +QListViewItem + +QListViewItem is fully implemented. + + +Note that to remove a child QListViewItem you must first +call takeItem() and then del(). + + + +QCheckListItem + +QCheckListItem is fully implemented. + + + +QListViewItemIterator (Qt v2+) + +QListViewItemIterator is fully implemented. + + +QLocale (Qt v3.3+) + + short toShort + bool *ok = 0 + + +This returns a tuple of the short result and the +ok value. + + + + ushort toUShort + bool *ok = 0 + + +This returns a tuple of the ushort result and the +ok value. + + + + int toInt + bool *ok = 0 + + +This returns a tuple of the int result and the +ok value. + + + + uint toUInt + bool *ok = 0 + + +This returns a tuple of the uint result and the +ok value. + + + + Q_LONG toLong + bool *ok = 0 + + +This returns a tuple of the long result and the +ok value. + + + + Q_ULONG toULong + bool *ok = 0 + + +This returns a tuple of the ulong result and the +ok value. + + + + float toFloat + bool *ok = 0 + + +This returns a tuple of the float result and the +ok value. + + + + double toDouble + bool *ok = 0 + + +This returns a tuple of the double result and the +ok value. + + +QMainWindow + + QTextStream &operator<< + QTextStream & + const QMainWindow & + + +This operator is fully implemented. (Qt v3+) + + + + QTextStream &operator>> + QTextStream & + QMainWindow & + + +This operator is fully implemented. (Qt v3+) + + + + bool getLocation + QToolBar *tb + ToolBarDock &dock + int &index + bool &nl + int &extraOffset + + +This takes only the tb parameter and returns a tuple of the +result, dock, index, +nl and extraOffset values. (Qt v2.1.0+) + + + + QList<QToolBar> toolBars + ToolBarDock dock + + +This returns a list of QToolBar instances. (Qt v2.1.0+) + + +QMemArray<type> (Qt v3+) + +Types based on the QMemArray template are automatically +converted to and from Python lists of the type. + + +QMenuBar + +QMenuBar is fully implemented. + + +QMenuData + + QMenuItem *findItem + int id + QMenuData **parent + + +Not implemented. + + + +QCustomMenuItem (Qt v2.1+) + +QCustomMenuItem is fully implemented. + + + +QMenuItem + +QMenuItem is an internal Qt class. + + +QMessageBox + +QMessageBox is fully implemented. + + +QMetaObject + + int numClassInfo const + bool super = FALSE + + +Not implemented. + + + + const QClassInfo *classInfo const + bool super = FALSE + + +Not implemented. + + + +QMetaProperty + +QMetaProperty is fully implemented. + + +QMimeSource (Qt v2+) + +QMimeSource is fully implemented. + + + +QMimeSourceFactory (Qt v2+) + +QMimeSourceFactory is fully implemented. + + + +QWindowsMime (Qt v3+) + +QWindowsMime is fully implemented. + + +QMotifPlusStyle (Qt v2.2+) + + void getButtonShift + int &x + int &y + + +This takes no parameters and returns a tuple of the x and +y values. (Qt v2) + + + + void scrollBarMetrics + const QScrollBar *sb + int &sliderMin + int &sliderMax + int &sliderLength + int &buttonDim + + +This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2) + + +QMotifStyle (Qt v2+) + + void scrollBarMetrics + const QTabBar *sb + int &sliderMin + int &sliderMax + int &sliderLength + int &buttonDim + + +This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2) + + + + void tabbarMetrics + const QTabBar *t + int &hframe + int &vframe + int &overlap + + +This takes only the t parameter and returns a tuple of the +hframe, vframe and +overlap values. (Qt v2) + + +QMovie + + QMovie + QDataSource *src + int bufsize = 1024 + + +Not implemented. + + + + void pushData + const uchar *data + int length + + +length is derived from data and not +passed as a parameter. (Qt v2.2.0+) + + +QMultiLineEdit + + void cursorPosition const + int *line + int *col + + +This takes no parameters and returns a tuple of the line and +col values. (Qt v1.x, Qt v2.x) + + + + virtual void del + + + +This has been renamed delChar in Python. (Qt v1.x, Qt v2.x) + + + + void getCursorPosition const + int *line + int *col + + +This takes no parameters and returns a tuple of the line and +col values. (Qt v1.x, Qt v2.x) + + + + bool getMarkedRegion + int *line1 + int *col1 + int *line2 + int *col2 + + +This takes no parameters and returns a tuple of the bool result and the +line1, col1, line2 and +col2 values. + + +QMutex (Qt v2.2+) + +QMutex is fully implemented. + + + +QMutexLocker (Qt v3.1+) + +QMutexLocker is fully implemented. + + +QNetworkOperation (Qt v2.1+) + +QNetworkOperation is fully implemented. + + + +QNetworkProtocol (Qt v2.1+) + +QNetworkProtocol is fully implemented. + + + +QNetworkProtocolFactoryBase (Qt v2.1+) + +QNetworkProtocolFactoryBase is fully implemented. + + +QObject + + bool disconnect + const QObject *receiver + const char *member = 0 + + +Not yet implemented. + + + + bool disconnect + const char *signal = 0 + const QObject *receiver = 0 + const char *member = 0 + + +Not yet implemented. + + + + static bool disconnect + const QObject *sender + const char *signal + const QObject *receiver + const char *member + + +At the moment PyQt does not support the full behaviour of the corresponding Qt +method. In particular, specifying None (ie. 0 in C++) for the +signal and receiver parameters is not yet +supported. + + +QObjectCleanupHandler (Qt v3+) + +QObjectCleanupHandler is fully implemented. + + +QObjectList + +This class isn't implemented. Whenever a QObjectList is the +return type of a function or the type of an argument, a Python list of +QObject instances is used instead. + + +QPaintDeviceMetrics + +QPaintDeviceMetrics is fully implemented. + + +QPaintDevice + + virtual bool cmd + int + QPainter * + QPDevCmdParam * + + +Not implemented. + + +QPainter + + QRect boundingRect + int x + int y + int w + int h + int flags + const char *str + int len = -1 + char **intern = 0 + + +The intern parameter is not supported. + + + + QRect boundingRect + const QRect& + int flags + const char *str + int len = -1 + char **intern = 0 + + +The intern parameter is not supported. + + + + void drawText + int x + int y + int w + int h + int flags + const char *str + int len = -1 + QRect *br = 0 + char **intern = 0 + + +The intern parameter is not supported. + + + + void drawText + const QRect& + int flags + const char *str + int len = -1 + QRect *br = 0 + char **intern = 0 + + +The intern parameter is not supported. + + + + void setTabArray + int *ta + + +This takes a single parameter which is a list of tab stops. + + + + int *tabArray + + + +This returns a list of tab stops. + + +QPalette + +QPalette is fully implemented, including the Python +== and != operators. + + +QPixmap + + QPixmap + const char *xpm[] + + +This takes a list of strings as its parameter. + + + + bool loadFromData + const uchar *buf + uint len + const char *format = 0 + ColorMode mode = Auto + + +len is derived from buf and not passed as +a parameter. + + + + bool loadFromData + const uchar *buf + uint len + const char *format + int conversion_flags + + +Not implemented. + + +QPixmapCache (Qt v3+) + +QPixmapCache is fully implemented. + + +QPair<type,type> (Qt v3+) + +Types based on the QPair template are automatically +converted to and from Python tuples of two elements. + + +QPen + +QPen is fully implemented, including the Python +== and != operators. + + +QPicture + + const char *data + + + +Not implemented. + + + + void setData + const char *data + uint size + + +size is derived from data and not passed +as a parameter. + + +QPlatinumStyle (Qt v2+) + + void scrollBarMetrics + const QTabBar *sb + int &sliderMin + int &sliderMax + int &sliderLength + int &buttonDim + + +This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2) + + +QPoint + +The Python ++, +=, +-, -=, unary -, +*, *=, +/, /=, +==, != and __nonzero__ +operators are supported. + + + + QCOORD &rx + + + +Not implemented. + + + + QCOORD &ry + + + +Not implemented. + + +QPointArray + + QPointArray + int nPoints + const QCOORD *points + + +This takes a single parameter which is a list of points. + + + + void point + uint i + int *x + int *y + + +This takes the single parameter i and returns the +x and y values as a tuple. + + + + bool putPoints + int index + int nPoints + const QCOORD *points + + +This takes two parameters, index and a list of points. + + + + bool putPoints + int index + int nPoints + int firstx + int firsty + ... + + +Not implemented. + + + + bool setPoints + int nPoints + const QCOORD *points + + +This takes a single parameter which is a list of points. + + + + bool setPoints + int nPoints + int firstx + int firsty + ... + + +Not implemented. + + +QPopupMenu + + int exec + + + +This has been renamed exec_loop in Python. + + +This method also causes ownership of the underlying C++ menu to be transfered +to Python. This means that the C++ menu will be deleted when the Python +wrapper is garbage collected. Although this is a little inconsistent, it +ensures that the menu is deleted without having to explicity code it using +QObject.deleteLater() or other techniques. + + + + int exec + const QPoint &pos + int indexAtPoint = 0 + + +This has been renamed exec_loop in Python. + + +This method also causes ownership of the underlying C++ menu to be transfered +to Python. This means that the C++ menu will be deleted when the Python +wrapper is garbage collected. Although this is a little inconsistent, it +ensures that the menu is deleted without having to explicity code it using +QObject.deleteLater() or other techniques. + + +QPrintDialog (X11) + +QPrintDialog is fully implemented. + + +QPrinter + +QPrinter is fully implemented. + + +QProcess (Qt v3+) + +QProcess is fully implemented. + + +QProgressBar + +QProgressBar is fully implemented. + + +QProgressDialog + +QProgressDialog is fully implemented. +value. + + +QPtrList<type> (Qt v2+) + +Types based on the QPtrList template are automatically +converted to and from Python lists of the type. + + +QPushButton + +QPushButton is fully implemented. + + +QRadioButton + +QRadioButton is fully implemented. + + +QRangeControl + +QRangeControl is fully implemented. + + +QRect + +The Python +&, &=, +|, |=, +==, !=, in and +__nonzero__ operators are supported. + + + + void coords + int *x1 + int *y1 + int *x2 + int *y2 + + +This takes no parameters and returns a tuple containing the four values. + + + + void rect + int *x + int *y + int *w + int *h + + +This takes no parameters and returns a tuple containing the four values. + + + + QCOORD &rBottom + + + +Not implemented. (Qt v2+) + + + + QCOORD &rLeft + + + +Not implemented. (Qt v2+) + + + + QCOORD &rRight + + + +Not implemented. (Qt v2+) + + + + QCOORD &rTop + + + +Not implemented. (Qt v2+) + + +QRegExp + +The Python == and != operators are +supported. + + + + int match + const char *str + int index = 0 + int *len = 0 + + +This takes str and index parameters and +returns a tuple of the int result and the +len value. (Qt v1.x) + + + + int match + const QString &str + int index = 0 + int *len = 0 + + +This takes str and index parameters and +returns a tuple of the int result and the +len value. (Qt v2+) + + +QRegion + +The Python +|, |=, ++, +=, +&, &=, +-, -=, +^, ^=, +==, !=, in and +__nonzero__ operators are supported. + + + + QArray<QRect> rects + + + +Not implemented. + + + + void setRects + QRect *rects + int num + + +Not yet implemented. (Qt v2.2+) + + +QScrollBar + +QScrollBar is fully implemented. + + +QScrollView + + void contentsToViewport + int x + int y + int &vx + int &vy + + +This takes the x and y parameters and +returns a tuple containing the vx and vy +values. (Qt v2+) + + + + void viewportToContents + int vx + int vy + int &x + int &y + + +This takes the vx and vy parameters and +returns a tuple containing the x and y +values. (Qt v2+) + + +QSemaphore (Qt v2.2+) + +QSemaphore is fully implemented. The += +and -= operators have also been implemented, but require +Python v2.0 or later. + + +QSemiModal (Qt v1, v2) + +QSemiModal is fully implemented. + + +QSessionManager (Qt v2+) + +QSessionManager is fully implemented. + + +QSettings (Qt v3+) + + bool readBoolEntry + const QString &key + bool def = 0 + bool *ok = 0 + + +The ok is not passed and the returned value is a tuple of +the bool result and the ok flag. + + + +double readDoubleEntry + const QString &key + double def = 0 + bool *ok = 0 + + +The ok is not passed and the returned value is a tuple of +the double result and the ok flag. + + + +QString readEntry + const QString &key + const QString &def = QString::null + bool *ok = 0 + + +The ok is not passed and the returned value is a tuple of +the QString result and the ok flag. + + + +QStringList readListEntry + const QString &key + bool *ok = 0 + + +The ok is not passed and the returned value is a tuple of +the QStringList result and the ok flag. + + + +QStringList readListEntry + const QString &key + const QChar &separator + bool *ok = 0 + + +The ok is not passed and the returned value is a tuple of +the QStringList result and the ok flag. + + + +int readNumEntry + const QString &key + int def = 0 + bool *ok = 0 + + +The ok is not passed and the returned value is a tuple of +the int result and the ok flag. + + + + bool writeEntry + const QString &key + bool value + + +Not implemented. + + +QSGIStyle (Qt v2.2+) + + void scrollBarMetrics + const QScrollBar *sb + int &sliderMin + int &sliderMax + int &sliderLength + int &buttonDim + + +This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2) + + +QSignalMapper + +QSignalMapper is fully implemented. + + +QSimpleRichText (Qt v2+) + +QSimpleRichText is fully implemented. + + +QSize + +The Python ++, +=, +-, -=, +*, *=, +/, /=, +==, != and __nonzero__ +operators are supported. + + + + QCOORD &rheight + + + +Not implemented. + + + + QCOORD &rwidth + + + +Not implemented. + + +QSizeGrip (Qt v2+) + +QSizeGrip is fully implemented. + + +QSizePolicy (Qt v2+) + +QSizePolicy is fully implemented. + + +QSlider + +QSlider is fully implemented. + + +QSocketNotifier + +QSocketNotifier is fully implemented. + + +QSound (Qt v2.2+) + +QSound is fully implemented. + + +QSpinBox + + virtual int mapTextToValue + bool *ok + + +This returns a tuple of the int result and the modified +ok value. + + +QSplashScreen (Qt v3.2.0+) + +QSplashScreen is fully implemented. + + +QSplitter + + void getRange + int id + int *min + int *max + + +This takes the id parameter and returns the +min and max values as a tuple. (Qt v2+) + + +QStatusBar + +QStatusBar is fully implemented. + + +QChar (Qt v2+) + + uchar &cell const + + + +Not implemented. + + + + uchar &row const + + + +Not implemented. + + + +QString + +A Python string object (or Unicode object) can be used whenever a +QString can be used. A QString can be +converted to a Python string object using the Python str() +function, and to a Python Unicode object using the Python +unicode() function. + + + +The Python +, +=, *, +*=, len, [] +(for reading slices and individual characters), in and +comparison operators are supported. + + + + QCharRef at + uint i + + +Not yet implemented. (Qt v2+) + + + + QChar constref const + uint i + + +Not yet implemented. (Qt v2+) + + + + QChar &ref + uint i + + +Not yet implemented. (Qt v2+) + + + + QString &setUnicodeCodes + const ushort *unicode_as_shorts + uint len + + +Not yet implemented. (Qt v2.1+) + + + + QString &sprintf + const char *format + ... + + +Not implemented. + + + + short toShort + bool *ok = 0 + + +This returns a tuple of the short result and the +ok value. + + + + ushort toUShort + bool *ok = 0 + + +This returns a tuple of the ushort result and the +ok value. + + + + int toInt + bool *ok = 0 + + +This returns a tuple of the int result and the +ok value. + + + + uint toUInt + bool *ok = 0 + + +This returns a tuple of the uint result and the +ok value. + + + + long toLong + bool *ok = 0 + + +This returns a tuple of the long result and the +ok value. + + + + ulong toULong + bool *ok = 0 + + +This returns a tuple of the ulong result and the +ok value. + + + + float toFloat + bool *ok = 0 + + +This returns a tuple of the float result and the +ok value. + + + + double toDouble + bool *ok = 0 + + +This returns a tuple of the double result and the +ok value. + + +QStringList (Qt v2+) + +The Python len, [] (for both reading and +writing slices and individual elements), del (for deleting +slices and individual elements), +, +=, +*, *=, ==, +!= and in operators are supported. + + + + Iterator append + const QString &x + + +This does not return a value. + + + + Iterator prepend + const QString &x + + +This does not return a value. + + +QStrList + +This class isn't implemented. Whenever a QStrList is the +return type of a function or the type of an argument, a Python list of strings +is used instead. + + +QStyle (Qt v2+) + + virtual void getButtonShift + int &x + int &y + + +This takes no parameters and returns a tuple of the x and +y values. (Qt v2) + + + + virtual void scrollBarMetrics + const QScrollBar *b + int &sliderMin + int &sliderMax + int &sliderLength + int &buttonDim + + +Thus takes only the b parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2) + + + + virtual void tabbarMetrics + const QTabBar *t + int &hframe + int &vframe + int &overlap + + +This takes only the t parameter and returns a tuple of the +hframe, vframe and +overlap values. (Qt v2) + + + +QStyleOption (Qt v3+) + +QStyleOption is fully implemented. + + +QStyleSheet (Qt v2+) + +QStyleSheet is fully implemented. + + + +QStyleSheetItem (Qt v2+) + +QStyleSheetItem is fully implemented. + + +QSyntaxHighlighter (Qt v3.1+) + +QSyntaxHighlighter is fully implemented. + + +QTab + +QTab is fully implemented. + + + +QTabBar + + QList<QTab> tabList + + + +This returns a list of QTab instances. + + +QTabDialog + +QTabDialog is fully implemented. + + +QTableView (Qt 1.x, Qt 2.x) + + bool colXPos + int col + int *xPos + + +This takes the col parameter and returns a tuple containing +the bool result and xPos. + + + + bool rowYPos + int row + int *yPos + + +This takes the row parameter and returns a tuple containing +the bool result and yPos. + + +QTabWidget (Qt v2+) + +QTabWidget is fully implemented. + + +QTextBrowser (Qt v2+) + +QTextBrowser is fully implemented. + + +QTextCodec (Qt v2+) + + virtual QCString fromUnicode + const QString &uc + int &lenInOut + + +The returned value is a tuple of the QCString result and the +updated lenInOut. + + + +QTextDecoder (Qt v2+) + +QTextDecoder is fully implemented. + + + +QTextEncoder (Qt v2+) + + virtual QCString fromUnicode = 0 + const QString &uc + int &lenInOut + + +The returned value is a tuple of the QCString result and the +updated lenInOut. + + +QTextEdit (Qt v3+) + +int charAt + const QPoint &pos + int *para = 0 + + +This takes only the pos parameter and returns a tuple of the +value returned via the para pointer and the int result. + + + + void del + + + +This has been renamed delChar in Python. + + + +virtual bool find + const QString &expr + bool cs + bool wo + bool forward = TRUE + int *para = 0 + int *index = 0 + + +If the para and index parameters are +omitted then the bool result is returned. If both are supplied (as integers) +then a tuple of the bool result and the modified values of +para and index is returned. + + + +void getCursorPosition + int *para + int *index + + +This takes no parameters and returns a tuple of the values returned via the +para and index pointers. + + + +void getSelection + int *paraFrom + int *indexFrom + int *paraTo + int *indexTo + int selNum = 0 + + +This takes only the selNum parameter and returns a tuple of +the paraFrom, indexFrom, +paraTo and indexTo values. + + +QTextStream + + QTextStream + FILE *fp + int mode + + +Not implemented. + + + + QTextStream &readRawBytes + char *buf + uint len + + +Not yet implemented. + + + + QTextStream &writeRawBytes + const char *buf + uint len + + +Not yet implemented. + + + +QTextIStream (Qt v2+) + + QTextIStream + FILE *fp + int mode + + +Not implemented. + + + +QTextOStream (Qt v2+) + + QTextOStream + FILE *fp + int mode + + +Not implemented. + + +QTextView (Qt v2+) + +QTextView is fully implemented. + + +QThread (Qt v2.2+) + +QThread is fully implemented. + + +QTimer + +QTimer is fully implemented. + + +QToolBar + +QToolBar is fully implemented. + + +QToolBox (Qt v3.2.0+) + +QToolBox is fully implemented. + + +QToolButton + +QToolButton is fully implemented. + + +QToolTip + +QToolTip is fully implemented. + + + +QToolTipGroup + +QToolTipGroup is fully implemented. + + +QTranslator (Qt v2+) + +QTranslator is fully implemented. + + + +QTranslatorMessage (Qt v2.2+) + +QTranslatorMessage is fully implemented. + + +QUrl (Qt v2.1+) + +QUrl is fully implemented, including the +QString(), == and != +operators. + + +QUrlInfo (Qt v2.1+) + +QUrlInfo is fully implemented. + + +QUrlOperator (Qt v2.1+) + + virtual bool isDir + bool *ok + + +This returns a tuple of the bool result and the +ok value. + + +QUuid (Qt v3.0+) + +QUuid is fully implemented. + + +QValidator + + virtual State validate + QString& input + int& pos + + +The returned value is a tuple of the State result and the +updated pos. + + + +QDoubleValidator + + State validate + QString& input + int& pos + + +The returned value is a tuple of the State result and the +updated pos. + + + +QIntValidator + + State validate + QString& input + int& pos + + +The returned value is a tuple of the State result and the +updated pos. + + + +QRegExpValidator (Qt v3+) + + virtual State validate + QString& input + int& pos + + +The returned value is a tuple of the State result and the +updated pos. + + +QValueList<type> (Qt v2+) + +Types based on the QValueList template are automatically +converted to and from Python lists of the type. + + +QVariant (Qt v2.1+) + + QVariant + const char *val + + +Not implemented. + + + + QVariant + const QBitArray &val + + +Not yet implemented. (Qt v3+) + + + + QVariant + const QValueList<QVariant> &val + + +Not yet implemented. + + + + QVariant + const QMap<QString,QVariant> &val + + +Not yet implemented. + + + + QBitArray &asBitArray + + + +Not yet implemented. (Qt v3+) + + + + bool &asBool + + + +Not implemented. + + + + double &asDouble + + + +Not implemented. + + + + int &asInt + + + +Not implemented. + + + + QValueList<QVariant> &asList + + + +Not implemented. + + + + QMap<QString,QVariant> &asMap + + + +Not implemented. + + + + uint &asUInt + + + +Not implemented. + + + + QValueListConstIterator<QVariant>listBegin const + + + +Not implemented. + + + + QValueListConstIterator<QVariant>listEnd const + + + +Not implemented. + + + + QMapConstIterator<QString,QVariant>mapBegin const + + + +Not implemented. + + + + QMapConstIterator<QString,QVariant>mapEnd const + + + +Not implemented. + + + + QMapConstIterator<QString,QVariant>mapFind const + const QString &key + + +Not implemented. + + + + QValueListConstIterator<QString>stringListBegin const + + + +Not implemented. + + + + QValueListConstIterator<QString>stringListEnd const + + + +Not implemented. + + + + const QBitArray toBitArray const + + + +Not yet implemented. (Qt v3+) + + + + const QValueList<QVariant>toList const + + + +Not yet implemented. + + + + const QMap<QString,QVariant>toMap const + + + +Not yet implemented. + + +QVBox (Qt v2+) + +QVBox is fully implemented. + + +QVButtonGroup (Qt v2+) + +QVButtonGroup is fully implemented. + + +QVGroupBox (Qt v2+) + +QVGroupBox is fully implemented. + + +QWaitCondition (Qt v2.2+) + +QWaitCondition is fully implemented. + + +QWhatsThis + +QWhatsThis is fully implemented. + + +QWidget + + QWExtra *extraData + + + +Not implemented. + + + + QFocusData *focusData + + + +Not implemented. + + + + void lower + + + +This has been renamed to lowerW in Python. + + + + void raise + + + +This has been renamed to raiseW in Python. + + +QWidgetList + +This class isn't implemented. Whenever a QWidgetList is the +return type of a function or the type of an argument, a Python list of +instances is used instead. + + +QWidgetStack + +QWidgetStack is fully implemented. + + +QWindow + +QWindow is fully implemented (Qt v1.x). + + +QWindowsStyle (Qt v2+) + + void getButtonShift + int &x + int &y + + +This takes no parameters and returns a tuple of the x and +y values. (Qt v2) + + + + void scrollBarMetrics + const QTabBar *sb + int &sliderMin + int &sliderMax + int &sliderLength + int &buttonDim + + +This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2) + + + + void tabbarMetrics + const QTabBar *t + int &hframe + int &vframe + int &overlap + + +This takes only the t parameter and returns a tuple of the +hframe, vframe and +overlap values. (Qt v2) + + +QWindowsXPStyle (Qt v3.0.1+, Windows) + +QWindowsXPStyle is fully implemented. + + +QWizard (Qt v2+) + +QWizard is fully implemented. + + +QWMatrix + +The Python ==, != and +*= operators are supported. + + + + QWMatrix invert const + bool *invertible = 0 + + +This takes no parameters and returns a tuple of the QWMatrix +result and the invertible value. + + + + void map const + int x + int y + int *tx + int *ty + + +This takes the x and y parameters and +returns a tuple containing the tx and ty +values. + + + + void map const + float x + float y + float *tx + float *ty + + +This takes the x and y parameters and +returns a tuple containing the tx and ty +values. (Qt v1.x) + + + + void map const + double x + double y + double *tx + double *ty + + +This takes the x and y parameters and +returns a tuple containing the tx and ty +values. (Qt v2+) + + +QWorkspace (Qt v2.1+) + +QWorkspace is fully implemented. + + + +<Literal>qtaxcontainer</Literal> Module Reference +QAxBase (Windows, Qt v3+) + + QAxObject + IUnknown *iface = 0 + + +Not implemented. + + + + long queryInterface + const QUuid &uuid + void **iface + + +Not implemented. + + + + PropertyBag propertyBag const + + + +Not implemented. + + + + void setPropertyBag + const PropertyBag &bag + + +Not implemented. + + + + unsigned long registerWeakActiveObject + const QString &guid + + +This is a utility method provided by PyQt to make it easier to use +Mark Hammond's win32com module to manipulate objects +created by the qtaxcontainer module. + + +The RegisterActiveObject() COM function is called to +register the QAxBase instance as a weak object with the +guid GUID. The revoke handle is returned. + + + + static void revokeActiveObject + unsigned long rhandle + + +This is a wrapper around the RevokeActiveObject() COM +function and is called to revoke the object registered using +registerWeakActiveObject(). rhandle is +the revoke handle returned by registerWeakActiveObject(). + + +QAxObject (Windows, Qt v3+) + + QAxObject + IUnknown *iface + QObject *parent = 0 + const char *name = 0 + + +Not implemented. + + +QAxWidget (Windows, Qt v3+) + + QAxWidget + IUnknown *iface + QWidget *parent = 0 + const char *name = 0 + + +Not implemented. + + + +<Literal>qtcanvas</Literal> Module Reference +QCanvas (Qt v2.2+) + +QCanvas is fully implemented. + + + +QCanvasEllipse (Qt v2.2+) + +QCanvasEllipse is fully implemented. + + + +QCanvasItem (Qt v2.2+) + +QCanvasItem is fully implemented. + + + +QCanvasItemList (Qt v2.2+) + +This class isn't implemented. Whenever a QCanvasItemList is +the return type of a function or the type of an argument, a Python list of +QCanvasItem instances is used instead. + + + +QCanvasLine (Qt v2.2+) + +QCanvasLine is fully implemented. + + + +QCanvasPixmap (Qt v2.2+) + +QCanvasPixmap is fully implemented. + + + +QCanvasPixmapArray (Qt v2.2+) + + QPixmapArray + QList<QPixmap> pixmaps + QList<QPoint> hotspots + + +The pixmaps argument is a Python list of QPixmap instances, +and the hotspots argument is a Python list of QPoint +instances. (Qt v2.2.0 - Qt v2.3.1) + + + + QPixmapArray + QValueList<QPixmap> pixmaps + QPointArray hotspots = QPointArray() + + +The pixmaps argument is a Python list of QPixmap instances. +(Qt v3+) + + + +QCanvasPolygon (Qt v2.2+) + +QCanvasPolygon is fully implemented. + + + +QCanvasPolygonalItem (Qt v2.2+) + +QCanvasPolygonalItem is fully implemented. + + + +QCanvasRectangle (Qt v2.2+) + +QCanvasRectangle is fully implemented. + + + +QCanvasSpline (Qt v3.0+) + +QCanvasSpline is fully implemented. + + + +QCanvasSprite (Qt v2.2+) + +QCanvasSprite is fully implemented. + + + +QCanvasText (Qt v2.2+) + +QCanvasText is fully implemented. + + + +QCanvasView (Qt v2.2+) + +QCanvasView is fully implemented. + + + +<Literal>qtext</Literal> Module Reference + +QextScintilla + + void getCursorPosition + int *line + int *index + + +This takes no parameters and returns a tuple of the values returned by the +line and index pointers. + + + + void getSelection + int *lineFrom + int *indexFrom + int *lineTo + int *indexTo + + +This takes no parameters and returns a tuple of the values returned by the +lineFrom, indexFrom, +lineTo and indexTo pointers. + + + +QextScintillaAPIs + +QextScintillaAPIs is fully implemented. + + + +QextScintillaBase + +QextScintillaBase is fully implemented. + + + +QextScintillaCommand + +QextScintillaCommand is fully implemented. + + + +QextScintillaCommandSet + +QextScintillaCommandSet is fully implemented. + + + +QextScintillaDocument + +QextScintillaDocument is fully implemented. + + + +QextScintillaLexer + +QextScintillaLexer is fully implemented. + + + +QextScintillaLexerBash (QScintilla v1.4+) + +QextScintillaLexerBash is fully implemented. + + + +QextScintillaLexerBatch (QScintilla v1.6+) + +QextScintillaLexerBatch is fully implemented. + + + +QextScintillaLexerCPP + +QextScintillaLexerCPP is fully implemented. + + + +QextScintillaLexerCSharp + +QextScintillaLexerCSharp is fully implemented. + + + +QextScintillaLexerCSS (QScintilla v1.6+) + +QextScintillaLexerCSS is fully implemented. + + + +QextScintillaLexerDiff (QScintilla v1.6+) + +QextScintillaLexerDiff is fully implemented. + + + +QextScintillaLexerHTML (QScintilla v1.1+) + +QextScintillaLexerHTML is fully implemented. + + + +QextScintillaLexerIDL + +QextScintillaLexerIDL is fully implemented. + + + +QextScintillaLexerJava + +QextScintillaLexerJava is fully implemented. + + + +QextScintillaLexerJavaScript + +QextScintillaLexerJavaScript is fully implemented. + + + +QextScintillaLexerLua (QScintilla v1.5+) + +QextScintillaLexerLua is fully implemented. + + + +QextScintillaLexerMakefile (QScintilla v1.6+) + +QextScintillaLexerMakefile is fully implemented. + + + +QextScintillaLexerPerl + +QextScintillaLexerPerl is fully implemented. + + + +QextScintillaLexerPOV (QScintilla v1.6+) + +QextScintillaLexerPOV is fully implemented. + + + +QextScintillaLexerProperties (QScintilla v1.6+) + +QextScintillaLexerProperties is fully implemented. + + + +QextScintillaLexerPython + +QextScintillaLexerPython is fully implemented. + + + +QextScintillaLexerRuby (QScintilla v1.5+) + +QextScintillaLexerRuby is fully implemented. + + + +QextScintillaLexerSQL (QScintilla v1.1+) + +QextScintillaLexerSQL is fully implemented. + + + +QextScintillaLexerTeX (QScintilla v1.6+) + +QextScintillaLexerTeX is fully implemented. + + + +QextScintillaMacro + +QextScintillaMacro is fully implemented. + + + +QextScintillaPrinter + +QextScintillaPrinter is fully implemented. + + + +<Literal>qtgl</Literal> Module Reference +QGL + +QGL is fully implemented. + + + +QGLContext + +QGLContext is fully implemented. + + + +QGLFormat + +QGLFormat is fully implemented. + + + +QGLWidget + +QGLWidget is fully implemented. + + +QGLColormap (Qt v3.0+) + + void setEntries + int count + const QRgb *colors + int base = 0 + + +Not yet implemented. + + + +<Literal>qtnetwork</Literal> Module Reference +QDns (Qt v2.2+) + +QDns is fully implemented. + + +QFtp (Qt v2.2+) + + Q_LONG readBlock + char *data + Q_ULONG maxlen + + +This takes a single maxlen parameter. The +data is returned if there was no error, otherwise +None is returned. + + +QHostAddress (Qt v2.2+) + + QHostAddress + Q_UINT8 *ip6Addr + + +Not yet implemented. + + + + QHostAddress + const Q_IPV6ADDR &ip6Addr + + +Not yet implemented. + + + + void setAddress + Q_UINT8 *ip6Addr + + +Not yet implemented. + + + + Q_IPV6ADDR toIPv6Address const + + + +Not yet implemented. + + +QHttp (Qt v3+) + + Q_LONG readBlock + char *data + Q_ULONG maxlen + + +This takes a single maxlen parameter. The +data is returned if there was no error, otherwise +None is returned. + + + +QHttpHeader (Qt v3.1+) + +QHttpHeader is fully implemented. + + + +QHttpRequestHeader (Qt v3.1+) + +QHttpRequestHeader is fully implemented. + + + +QHttpResponseHeader (Qt v3.1+) + +QHttpResponseHeader is fully implemented. + + +QLocalFs (Qt v2.1+) + +QLocalFs is fully implemented. + + +QServerSocket (Qt v2.2+) + +QServerSocket is fully implemented. + + +QSocket (Qt v2.2+) + + Q_LONG readBlock + char *data + Q_ULONG len + + +This takes a single len parameter. The +data is returned if there was no error, otherwise +Py_None is returned. + + + + Q_LONG readLine + char *data + Q_ULONG maxlen + + +This takes a single maxlen parameter. The +data is returned if there was no error, otherwise +Py_None is returned. + + + + Q_LONG writeBlock + const char *data + Q_ULONG len + + +len is derived from data and not passed +as a parameter. + + +QSocketDevice (Qt v2.2+) + + Q_LONG readBlock + char *data + Q_ULONG len + + +This takes a single len parameter. The +data is returned if there was no error, otherwise +None is returned. + + + + Q_LONG writeBlock + const char *data + Q_ULONG len + + +len is derived from data and not passed +as a parameter. + + + +<Literal>qtpe</Literal> Module Reference + +QPEApplication + + QApplication + int& argc + char **argv + Type type + + +This takes two parameters, the first of which is a list of argument strings. +Arguments used by Qt are removed from the list. + + + + int exec + + + +This has been renamed to exec_loop in Python. + + + +AppLnk + + virtual QString exec const + + + +This has been renamed to exec_property in Python. + + + +AppLnkSet + +AppLnkSet is fully implemented. + + + +Config + +Config is fully implemented. + + + +DateFormat + +DateFormat is fully implemented. + + + +DocLnk + + QString exec const + + + +This has been renamed to exec_property in Python. + + + +DocLnkSet + +DocLnkSet is fully implemented. + + + +FileManager + +FileManager is fully implemented. + + + +FileSelector + +FileSelector is fully implemented. + + + +FileSelectorItem + +FileSelectorItem is fully implemented. + + + +FontDatabase + +FontDatabase is fully implemented. + + + +Global + + static void setBuiltinCommands + Command * + + +Not implemented. + + + +MenuButton + +MenuButton is fully implemented. + + + +QCopEnvelope + +QCopEnvelope is fully implemented. + + + +QDawg + +QDawg is fully implemented. + + + +QPEMenuBar + +QPEMenuBar is fully implemented. + + + +QPEToolBar + +QPEToolBar is fully implemented. + + + +Resource + +Resource is fully implemented. + + + + +<Literal>qtsql</Literal> Module Reference +QDataBrowser (Qt v3+) + + virtual void del + + + +This has been renamed delOnCursor in Python. + + +QDataTable (Qt v3+) + +QDataTable is fully implemented. + + +QDataView (Qt v3+) + +QDataView is fully implemented. + + +QEditorFactory (Qt v3+) + +QEditorFactory is fully implemented. + + +QSql (Qt v3+) + +QSql is fully implemented. + + +QSqlCursor (Qt v3+) + + virtual int del + bool invalidate = TRUE + + +This has been renamed delRecords in Python. + + + + virtual int del + const QString &filter + bool invalidate = TRUE + + +This has been renamed delRecords in Python. + + + + bool exec + const QString &query + + +This has been renamed execQuery in Python. + + +QSqlDatabase (Qt v3+) + + QSqlQuery exec + const QString &query = QString::null + + +This has been renamed execStatement in Python. + + +QSqlDriver (Qt v3+) + +QSqlDriver is fully implemented. + + +QSqlEditorFactory (Qt v3+) + +QSqlEditorFactory is fully implemented. + + +QSqlError (Qt v3+) + +QSqlError is fully implemented. + + +QSqlField (Qt v3+) + +QSqlField is fully implemented. + + + +QSqlFieldInfo (Qt v3+) + +QSqlFieldInfo is fully implemented. + + +QSqlForm (Qt v3+) + +QSqlForm is fully implemented. + + +QSqlIndex (Qt v3+) + +QSqlIndex is fully implemented. + + +QSqlPropertyMap (Qt v3+) + +QSqlPropertyMap is fully implemented. However, because PyQt +does not allow new properties to be defined, it is not possible to implement +custom editor widgets in Python and add them to a property map. These will +simply be ignored. + + + +This problem may be addressed in a future release of PyQt. + + +QSqlQuery (Qt v3+) + + QMap<QString,QVariant> boundValues const + + + +Not yet implemented. (Qt v3.2.0+) + + + + virtual bool exec + const QString &query + + +This has been renamed execQuery in Python. + + + + bool exec + + + +This has been renamed execQuery in Python. (Qt v3.1+) + + +QSqlRecord (Qt v3+) + +QSqlRecord is fully implemented. + + + +QSqlRecordInfo (Qt v3+) + +QSqlRecordInfo is implemented as a Python list of +QSqlFieldInfo instances. + + +QSqlResult (Qt v3+) + +QSqlResult is fully implemented. + + +QSqlSelectCursor (Qt v3.2.0+) + + int del + bool invalidate = TRUE + + +This has been renamed delRecords in Python. + + + + bool exec + const QString &query + + +This has been renamed execQuery in Python. + + + +<Literal>qttable</Literal> Module Reference +QTable (Qt v2.2+) + +QTable is fully implemented. + + + +QTableItem (Qt v2.2+) + +QTableItem is fully implemented. + + + +QCheckTableItem (Qt v3+) + +QCheckTableItem is fully implemented. + + + +QComboTableItem (Qt v3+) + +QComboTableItem is fully implemented. + + + +QTableSelection (Qt v2.2+) + +QTableSelection is fully implemented. + + + +<Literal>qtui</Literal> Module Reference +QWidgetFactory (Qt v3+) + +QWidgetFactory is fully implemented. + + + +<Literal>qtxml</Literal> Module Reference +QDomImplementation (Qt v2.2+) + +QDomImplementation is fully implemented. + + + +QDomNode (Qt v2.2+) + +QDomNode is fully implemented, including the Python +== and != operators. + + + +QDomNodeList (Qt v2.2+) + +QDomNodeList is fully implemented. + + + +QDomDocument (Qt v2.2+) + + bool setContent + const QCString &buffer + bool namespaceProcessing + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +This takes the buffer and +namespaceProcessing parameters and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+) + + + + bool setContent + const QByteArray &buffer + bool namespaceProcessing + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +This takes the buffer and +namespaceProcessing parameters and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+) + + + + bool setContent + const QString &text + bool namespaceProcessing + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +This takes the text and +namespaceProcessing parameters and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+) + + + + bool setContent + const QIODevice *dev + bool namespaceProcessing + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +This takes the dev and +namespaceProcessing parameters and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+) + + + + bool setContent + const QCString &buffer + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +This takes the buffer parameter only and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+) + + + + bool setContent + const QByteArray &buffer + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +This takes the buffer parameter only and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+) + + + + bool setContent + const QString &text + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +This takes the text parameter only and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+) + + + + bool setContent + const QIODevice *dev + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +This takes the dev parameter only and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+) + + + + bool setContent + QXmlInputSource *source + QXmlReader *reader + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +Not yet implemented. (Qt v3.2.0+) + + + +QDomDocumentFragment (Qt v2.2+) + +QDomDocumentFragment is fully implemented. + + + +QDomDocumentType (Qt v2.2+) + +QDomDocumentType is fully implemented. + + + +QDomNamedNodeMap (Qt v2.2+) + +QDomNamedNodeMap is fully implemented. + + + +QDomCharacterData (Qt v2.2+) + +QDomCharacterData is fully implemented. + + + +QDomAttr (Qt v2.2+) + +QDomAttr is fully implemented. + + + +QDomElement (Qt v2.2+) + +QDomElement is fully implemented. + + + +QDomText (Qt v2.2+) + +QDomText is fully implemented. + + + +QDomComment (Qt v2.2+) + +QDomComment is fully implemented. + + + +QDomCDATASection (Qt v2.2+) + +QDomCDATASection is fully implemented. + + + +QDomNotation (Qt v2.2+) + +QDomNotation is fully implemented. + + + +QDomEntity (Qt v2.2+) + +QDomEntity is fully implemented. + + + +QDomEntityReference (Qt v2.2+) + +QDomEntityReference is fully implemented. + + + +QDomProcessingInstruction (Qt v2.2+) + +QDomProcessingInstruction is fully implemented. + + + +
diff --git a/doc/qtdocs.sip b/doc/qtdocs.sip new file mode 100644 index 0000000..1113e94 --- /dev/null +++ b/doc/qtdocs.sip @@ -0,0 +1,1920 @@ +// This is the SIP file for organising the PyQt documentation. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Module Dummy + + +%Include qt/versions.sip + + +%Doc + +
+ + Python Bindings for Qt (3.18.1) + + Phil + Thompson + + + + This document describes a set of Python bindings for the Qt widget set. + Contact the author at phil@riverbankcomputing.co.uk. + + + + + +Introduction + +PyQt is a set of Python bindings for the Qt toolkit and available for all +platforms supported by Qt, including Windows, Linux, UNIX, MacOS/X and embedded +systems such as the Sharp Zaurus and the Compaq iPAQ. They have been tested +against Qt versions 1.43 to 3.3.6, Qt Non-commercial, Qtopia 1.5.0, and Python +versions 1.5 to 2.4.2. Qt/Embedded v3 is not supported. Qt v4 is supported +by PyQt v4. + + + +PyQt is available under the GPL license for use with the GPL version of Qt, a +a commercial license for use with the commercial version of Qt, a +non-commercial license for use with the non-commercial version of Qt v2, and an +educational license for use with the educational version of Qt. + + + +There is also an evaluation version of PyQt for Windows. This must be used +with the corresponding evaluation version of Qt. + + + +PyQt is built using SIP (a tool for generating Python extension modules for +C++ class libraries). SIP v4.6 or later must be installed in order to build +and run this version of PyQt. + + + +PyQt for MacOS/X requires Qt v3.1.0 or later and Python v2.3 or later. + + + +The bindings are implemented as a number of Python modules + + + + + +qt is the main module and contains the core classes and most +user interface widgets. + + + + + +qtaxcontainer contains a sub-set of the classes implemented +in Qt's QAxContainer module, part of Qt's ActiveQt framework. + + + + + +qtcanvas contains the classes implemented in Qt's Canvas +module. + + + + + +qtgl contains the classes implemented in Qt's OpenGL module. + + + + + +qtnetwork contains the classes implemented in Qt's Network +module. + + + + + +qtpe contains the classes implemented in Qtopia (originally +called the Qt Palmtop Environment). It is only supported with Qt/Embedded. + + + + + +qtsql contains the classes implemented in Qt's SQL module. + + + + + +qttable contains the classes implemented in Qt's Table +module. + + + + + +qtui contains the classes implemented in Qt's qui library. +These allow GUIs to be created directly from Qt Designer's +.ui files. + + + + + +qtxml contains the classes implemented in Qt's XML module. + + + + + +qtext contains useful third-party classes that are not part +of Qt. At the moment it contains bindings for QScintilla, the port to Qt of +the Scintilla programmer's editor class. + + + + + +PyQt also includes the pyuic and +pylupdate utilities which correspond to the Qt +uic and lupdate utilities. +pyuic converts the GUI designs created with Qt Designer to +executable Python code. pylupdate scans Python code, +extracts all strings that are candidates for internationalisation, and creates +an XML file for use by Qt Linguist. + + +Changes + +The changes visible to the Python programmer in this release are as follows. + + + + + +This version requires SIP v4.4 (or later). + + + + + +Concatenating Python strings and QStrings is now supported. + + + + + +QString now supports the * and +*= operators that behave as they do for Python strings. + + + + + +QString is more interoperable with Python string and unicode +objects. For example they can be passed as arguments to +open() and to most (but not all) string methods. + + + + + +QPopupMenu (and sub-classes) instances now transfer +ownership of the menu to Python in the call to exec_loop(). +This means the menu's resources are all released when the Python wrapper is +garbage collected without needing to call +QObject.deleteLater(). + + + + + +QObject.sender() now handles Python signals. + + + + + +The missing MacintoshVersion enum has been added. + + + + + +PYQT_BUILD has been removed. + + + + + +The convention for converting between a C/C++ null pointer and Python's +None object has now been universally applied. In previous +versions a null pointer to, for example, a Qt list container would often be +converted to an empty list rather than None. + + + + + + + + +Other PyQt Goodies +Using Qt Designer + +Qt Designer is a GPL'ed GUI design editor provided by Trolltech as part of Qt. +It generates an XML description of a GUI design. Qt includes +uic which generates C++ code from that XML. + + + +PyQt includes pyuic which generates Python code from the +same XML. The Python code is self contained and can be executed immediately. + + + +It is sometimes useful to be able to include some specific Python code in the +output generated by pyuic. For example, if you are using +custom widgets, pyuic has no way of knowing the name of the +Python module containing the widget and so cannot generate the required +import statement. To help get around this, +pyuic will extract any lines entered in the +Comment field of Qt Designer's +Form Settings dialog that begin with +Python: and copies them to the generated output. + + + +Here's a simple example showing the contents of the Comment +field. + + + +This comment will be ignored by pyuic. +Python: +Python:# Import our custom widget. +Python:from foo import bar + + + +Here's the corresponding output from pyuic. + + + +from qt import * + +# Import our custom widget. +from foo import bar + + + +Thanks to Christian Bird, pyuic will extract Python code +entered using Qt Designer to implement slots. In Qt Designer, when you need to +edit a slot and the source editor appears, enter Python code between the curly +braces. Don't worry about the correct starting indent level, each line is +prepended with a correct indentation. + + + +Make sure that the ui.h file is in the same directory as the +.ui file when using pyuic. The +.ui file implies the name of the .ui.h +file so there is no need to specify it on the command line. + + + +Here's an example of a simple slot. + + + +void DebMainWindowFrm::browsePushButtonClicked() +{ +if self.debugging: + QMessageBox.critical(self, "Event", "browse pushbutton was clicked!") +} + + + +Here is the resulting code when pyuic is run. + + + +class DebMainWindowFrm(QMainWindow): + ...stuff... + def browsePushButtonClicked(self): + if self.debugging: + QMessageBox.critical(self, "Event", "browse pushbutton was clicked!") + + + +Note that indenting is as normal and that self and all other +parameters passed to the slot are available. + + + +If you use this, you will need to turn off all of the fancy options for the C++ +editor in Designer as it tries to force C++ syntax and that's naturally +annoying when trying to code in Python. + + + +Using Qt Linguist + +Qt includes the lupdate program which parses C++ source +files converting calls to the QT_TR_NOOP() and +QT_TRANSLATE_NOOP() macros to .ts +language source files. The lrelease program is then used to +generate .qm binary language files that are distributed with +your application. + + + +Thanks to Detlev Offenbach, PyQt includes the pylupdate +program. This generates the same .ts language source files +from your PyQt source files. + + + + + +Deploying Commercial PyQt Applications + +When deploying commercial PyQt applications it is necessary to discourage users +from accessing the underlying PyQt modules for themselves. A user that used +the modules shipped with your application to develop new applications would +themselves be considered a developer and would need their own commercial Qt and +PyQt licenses. + + + +One solution to this problem is the +VendorID +package. This allows you to build Python extension modules that can only be +imported by a digitally signed custom interpreter. The package enables you to +create such an interpreter with your application embedded within it. The +result is an interpreter that can only run your application, and PyQt modules +that can only be imported by that interpreter. You can use the package to +similarly restrict access to any extension module. + + + +In order to build PyQt with support for the VendorID package, pass the +-i command line flag to configure.py. + + + +<Literal>pyqtconfig</Literal> and Build System Support + +The SIP build system (ie. the sipconfig module) is described +in the SIP documentation. PyQt includes the pyqtconfig +module that can be used by configuration scripts of other bindings that are +built on top of PyQt. + + + +The pyqtconfig module contains the following classes: + + + + +Configuration(sipconfig.Configuration) + + +This class encapsulates additional configuration values, specific to PyQt, that +can be accessed as instance variables. + + + +The following configuration values are provided (in addition to those provided +by the sipconfig.Configuration class): + + + + +pyqt_bin_dir + + +The name of the directory containing the pyuic and +pylupdate executables. + + + + + + +pyqt_config_args + + +The command line passed to configure.py when PyQt was +configured. + + + + + + +pyqt_mod_dir + + +The name of the directory containing the PyQt modules. + + + + + + +pyqt_modules + + +A string containing the names of the PyQt modules that were installed. + + + + + + +pyqt_qt_sip_flags + + +A string of the SIP flags used to generate the code for the +qt module and which should be added to those needed by any +module that imports the qt module. + + + + + + +pyqt_qtaxcontainer_sip_flags + + +A string of the SIP flags used to generate the code for the +qtaxcontainer module and which should be added to those +needed by any module that imports the qtaxcontainer module. + + + + + + +pyqt_qtcanvas_sip_flags + + +A string of the SIP flags used to generate the code for the +qtcanvas module and which should be added to those needed by +any module that imports the qtcanvas module. + + + + + + +pyqt_qtext_sip_flags + + +A string of the SIP flags used to generate the code for the +qtext module and which should be added to those needed by +any module that imports the qtext module. + + + + + + +pyqt_qtgl_sip_flags + + +A string of the SIP flags used to generate the code for the +qtgl module and which should be added to those needed by any +module that imports the qtgl module. + + + + + + +pyqt_qtnetwork_sip_flags + + +A string of the SIP flags used to generate the code for the +qtnetwork module and which should be added to those needed +by any module that imports the qtnetwork module. + + + + + + +pyqt_qtsql_sip_flags + + +A string of the SIP flags used to generate the code for the +qtsql module and which should be added to those needed by +any module that imports the qtsql module. + + + + + + +pyqt_qttable_sip_flags + + +A string of the SIP flags used to generate the code for the +qttable module and which should be added to those needed by +any module that imports the qttable module. + + + + + + +pyqt_qtui_sip_flags + + +A string of the SIP flags used to generate the code for the +qtui module and which should be added to those needed by any +module that imports the qtui module. + + + + + + +pyqt_qtxml_sip_flags + + +A string of the SIP flags used to generate the code for the +qtxml module and which should be added to those needed by +any module that imports the qtxml module. + + + + + + +pyqt_sip_dir + + +The name of the base directory where the .sip files for each +of the PyQt modules is installed. A sub-directory exists with the same name as +the module. + + + + + + +pyqt_version + + +The PyQt version as a 3 part hexadecimal number (eg. v3.10 is represented as +0x030a00). + + + + + + +pyqt_version_str + + +The PyQt version as a string. For development snapshots it will start with +snapshot-. + + + + + + + + + + +QtModuleMakefile(sipconfig.SIPModuleMakefile) + + +The Makefile class for modules that import the qt module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtAxContainerModuleMakefile(QtModuleMakefile) + + +The Makefile class for modules that import the qtaxcontainer +module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtCanvasModuleMakefile(QtModuleMakefile) + + +The Makefile class for modules that import the qtcanvas +module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtExtModuleMakefile(QtModuleMakefile) + + +The Makefile class for modules that import the qtext module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtGLModuleMakefile(QtModuleMakefile) + + +The Makefile class for modules that import the qtgl module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtNetworkModuleMakefile(QtModuleMakefile) + + +The Makefile class for modules that import the qtnetwork +module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtTableModuleMakefile(QtModuleMakefile) + + +The Makefile class for modules that import the qttable +module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtSQLModuleMakefile(QtTableModuleMakefile) + + +The Makefile class for modules that import the qtsql module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtUIModuleMakefile(QtModuleMakefile) + + +The Makefile class for modules that import the qtui module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + +QtXMLModuleMakefile(QtModuleMakefile) + + +The Makefile class for modules that import the qtxml module. + + + +finalise(self) + + +This is a reimplementation of sipconfig.Makefile.finalise(). + + + + + + + + + + +%End + + +%ExportedDoc +Things to be Aware Of +super and Wrapped Classes + +Internally PyQt implements a lazy technique for attribute lookup where +attributes are only placed in type and instance dictionaries when they are +first referenced. This technique is needed to reduce the time taken to import +large modules such as PyQt. + + + +In most circumstances this technique is transparent to an application. The +exception is when super is used with a PyQt class. The way +that super is currently implemented means that the lazy +lookup is bypassed resulting in AttributeError exceptions +unless the attribute has been previously referenced. + + + +Note that this restriction applies to any class wrapped by SIP and not just +PyQt. + + + + +Python Strings, Qt Strings and Unicode + +Unicode support was added to Qt in v2.0 and to Python in v1.6. In Qt, Unicode +support is implemented using the QString class. It is +important to understand that QStrings, Python string objects +and Python Unicode objects are all different but conversions between them are +automatic in almost all cases and easy to achieve manually when needed. + + + +Whenever PyQt expects a QString as a function argument, a +Python string object or a Python Unicode object can be provided instead, and +PyQt will do the necessary conversion automatically. + + + +You may also manually convert Python string and Unicode objects to +QStrings by using the QString constructor +as demonstrated in the following code fragment. + + + +qs1 = QString('Converted Python string object') +qs2 = QString(u'Converted Python Unicode object') + + + +In order to convert a QString to a Python string object use +the Python str() function. Applying +str() to a null QString and an empty +QString both result in an empty Python string object. + + + +In order to convert a QString to a Python Unicode object use +the Python unicode() function. Applying +unicode() to a null QString and an empty +QString both result in an empty Python Unicode object. + + + +Access to Protected Member Functions + +When an instance of a C++ class is not created from Python it is not possible +to access the protected member functions, or emit the signals, of that +instance. Attempts to do so will raise a Python exception. Also, any Python +methods corresponding to the instance's virtual member functions will never be +called. + + + +<Literal>None</Literal> and <Literal>NULL</Literal> + +Throughout the bindings, the None value can be specified +wherever NULL is acceptable to the underlying C++ code. + + + +Equally, NULL is converted to None +whenever it is returned by the underlying C++ code. + + + + +Support for C++ <Literal>void *</Literal> Data Types + +PyQt represents void * values as objects of type +sip.voidptr. Such values are often used to pass the +addresses of external objects between different Python modules. To make this +easier, a Python integer (or anything that Python can convert to an integer) +can be used whenever a sip.voidptr is expected. + + +A sip.voidptr may be converted to a Python integer by using +the int() builtin function. + + +A sip.voidptr may be converted to a Python string by using +its asstring() method. The asstring() +method takes an integer argument which is the length of the data in bytes. + + + + +Support for Threads + +PyQt implements the full set of Qt's thread classes. Python, of course, also +has its own thread extension modules. If you are using SIP v4 (or later) and +Python v2.3.5 (or later) then PyQt does not impose any additional restrictions. +(Read the relevant part of the Qt documentation to understand the restrictions +imposed by the Qt API.) + + +If you are using earlier versions of either SIP or Python then it is possible +to use either of the APIs so long as you follow some simple rules. + + + + +If you use the Qt API then the very first import of one of +the PyQt modules must be done from the main thread. + + + + +If you use the Python API then all calls to PyQt (including any +imports) must be done from one thread only. Therefore, if +you want to make calls to PyQt from several threads then you must use the Qt +API. + + + + +If you want to use both APIs in the same application then all calls to PyQt +must be done from threads created using the Qt API. + + + + +The above comments actually apply to any SIP generated module, not just PyQt. + + + +Garbage Collection + +C++ does not garbage collect unreferenced class instances, whereas Python does. +In the following C++ fragment both colours exist even though the first can no +longer be referenced from within the program: + + + +c = new QColor(); +c = new QColor(); + + + +In the corresponding Python fragment, the first colour is destroyed when +the second is assigned to c: + + + +c = QColor() +c = QColor() + + + +In Python, each colour must be assigned to different names. Typically this +is done within class definitions, so the code fragment would be something like: + + + +self.c1 = QColor() +self.c2 = QColor() + + + +Sometimes a Qt class instance will maintain a pointer to another instance and +will eventually call the destructor of that second instance. The most common +example is that a QObject (and any of its sub-classes) keeps +pointers to its children and will automatically call their destructors. In +these cases, the corresponding Python object will also keep a reference to the +corresponding child objects. + + + +So, in the following Python fragment, the first QLabel is +not destroyed when the second is assigned to l because the +parent QWidget still has a reference to it. + + + +p = QWidget() +l = QLabel('First label',p) +l = QLabel('Second label',p) + + + +C++ Variables + +Access to C++ variables is supported. They are accessed as Python instance +variables. For example: + + + +tab = QTab() +tab.label = "First Tab" +tab.r = QRect(10,10,75,30) + + + +Global variables and static class variables are effectively read-only. They +can be assigned to, but the underlying C++ variable will not be changed. This +may change in the future. + + + +Access to protected C++ class variables is not supported. This may change in +the future. + + + +Multiple Inheritance + +It is not possible to define a new Python class that sub-classes from more than +one Qt class. + + + +i18n Support + +Qt implements i18n support through the Qt Linguist application, the +QTranslator class, and the +QApplication::translate(), QObject::tr() +and QObject::trUtf8() methods. Usually the +tr() method is used to obtain the correct translation of a +message. The translation process uses a message context to allow the same +message to be translated differently. tr() is actually +generated by moc and uses the hardcoded class name as the +context. On the other hand, QApplication::translate() +allows to context to be explicitly stated. + + + +Unfortunately, because of the way Qt implents tr() (and +trUtf8()) it is not possible for PyQt to exactly reproduce +its behavour. The PyQt implementation of tr() (and +trUtf8()) uses the class name of the instance as the +context. The key difference, and the source of potential problems, is that the +context is determined dynamically in PyQt, but is hardcoded in Qt. In other +words, the context of a translation may change depending on an instance's class +hierarchy. + + + +class A(QObject): + def __init__(self): + QObject.__init__(self) + + def hello(self): + return self.tr("Hello") + +class B(A): + def __init__(self): + A.__init__(self) + +a = A() +a.hello() + +b = B() +b.hello() + + + +In the above the message is translated by a.hello() using a +context of A, and by b.hello() using a +context of B. In the equivalent C++ version the context +would be A in both cases. + + + +The PyQt behaviour is unsatisfactory and may be changed in the future. It is +recommended that QApplication.translate() be used in +preference to tr() (and trUtf8()). This +is guaranteed to work with current and future versions of PyQt and makes it +much easier to share message files between Python and C++ code. Below is the +alternative implementation of A that uses +QApplication.translate(). + + + +class A(QObject): + def __init__(self): + QObject.__init__(self) + + def hello(self): + return qApp.translate("A","Hello") + + + +Note that the code generated by pyuic uses +QApplication.translate(). + + + + + +Signal and Slot Support + +A signal may be either a Qt signal (specified using +SIGNAL()) or a Python signal (specified using +PYSIGNAL()). + + + +A slot can be either a Python callable object, a Qt signal (specified using +SIGNAL()), a Python signal (specified using +PYSIGNAL()), or a Qt slot (specified using +SLOT()). + + + +You connect signals to slots (and other signals) as you would from C++. For +example: + + + +QObject.connect(a,SIGNAL("QtSig()"),pyFunction) +QObject.connect(a,SIGNAL("QtSig()"),pyClass.pyMethod) +QObject.connect(a,SIGNAL("QtSig()"),PYSIGNAL("PySig")) +QObject.connect(a,SIGNAL("QtSig()"),SLOT("QtSlot()")) +QObject.connect(a,PYSIGNAL("PySig"),pyFunction) +QObject.connect(a,PYSIGNAL("PySig"),pyClass.pyMethod) +QObject.connect(a,PYSIGNAL("PySig"),SIGNAL("QtSig()")) +QObject.connect(a,PYSIGNAL("PySig"),SLOT("QtSlot()")) + + + +When a slot is a Python method that corresponds to a Qt slot then a signal can +be connected to either the Python method or the Qt slot. The following +connections achieve the same effect. + + + +sbar = QScrollBar() +lcd = QLCDNumber() + +QObject.connect(sbar,SIGNAL("valueChanged(int)"),lcd.display) +QObject.connect(sbar,SIGNAL("valueChanged(int)"),lcd,SLOT("display(int)")) + + + +The difference is that the second connection is made at the C++ level and is +more efficient. + + + +Disconnecting signals works in exactly the same way. + + + +Any instance of a class that is derived from the QObject +class can emit a signal using the emit method. This takes +two arguments. The first is the Python or Qt signal, the second is a Python +tuple which are the arguments to the signal. For example: + + + +a.emit(SIGNAL("clicked()"),()) +a.emit(PYSIGNAL("pySig"),("Hello","World")) + + + +Note that when a slot is a Python callable object its reference count is not +increased. This means that a class instance can be deleted without having to +explicitly disconnect any signals connected to its methods. However, it also +means that using lambda expressions as slots will not work unless you keep a +separate reference to the expression to prevent it from being immediately +garbage collected. + + + +Qt allows a signal to be connected to a slot that requires fewer arguments than +the signal passes. The extra arguments are quietly discarded. Python slots +can be used in the same way. + + + + +Static Member Functions + +Static member functions are implemented as Python class functions. +For example the C++ static member function +QObject::connect() is called from Python as +QObject.connect() or self.connect() if +called from a sub-class of QObject. + + + + +Enumerated Types + +Enumerated types are implemented as a set of simple variables corresponding to +the separate enumerated values. + + + +When using an enumerated value the name of the class (or a sub-class) in which +the enumerated type was defined in must be included. For example: + + + +Qt.SolidPattern +QWidget.TabFocus +QFrame.TabFocus + + + + +Module Reference Documentation + +The following sections should be used in conjunction with the normal class +documentation - only the differences specific to the Python bindings are +documented here. + + + +In these sections, Not yet implemented +implies that the feature can be easily implemented if needed. Not +implemented implies that the feature will not be implemented, either +because it cannot be or because it is not appropriate. + + + +If a class is described as being fully implemented then +all non-private member functions and all public class variables have been +implemented. + + + +If an operator has been implemented then it is stated explicitly. + + + +Classes that are not mentioned have not yet been implemented. + + + + +<Literal>qt</Literal> Module Reference +%End + +%Include qt/qglobal.sip +%Include qt/qwindowdefs.sip +%Include qt/qnamespace.sip + +%Include qt/qaccel.sip +%Include qt/qaction.sip +%Include qt/qapplication.sip +%Include qt/qassistantclient.sip +%Include qt/qbitmap.sip +%Include qt/qbrush.sip +%Include qt/qbutton.sip +%Include qt/qbuttongroup.sip +%Include qt/qbytearray.sip +%Include qt/qcdestyle.sip +%Include qt/qcheckbox.sip +%Include qt/qclipboard.sip +%Include qt/qcolor.sip +%Include qt/qcolordialog.sip +%Include qt/qcolorgroup.sip +%Include qt/qcombobox.sip +%Include qt/qcommonstyle.sip +%Include qt/qcstring.sip +%Include qt/qcursor.sip +%Include qt/qdatastream.sip +%Include qt/qdatetime.sip +%Include qt/qdatetimeedit.sip +%Include qt/qdesktopwidget.sip +%Include qt/qdial.sip +%Include qt/qdialog.sip +%Include qt/qdir.sip +%Include qt/qdockarea.sip +%Include qt/qdockwindow.sip +%Include qt/qdragobject.sip +%Include qt/qdrawutil.sip +%Include qt/qdropsite.sip +%Include qt/qerrormessage.sip +%Include qt/qevent.sip +%Include qt/qeventloop.sip +%Include qt/qfile.sip +%Include qt/qfiledialog.sip +%Include qt/qfileinfo.sip +%Include qt/qfont.sip +%Include qt/qfontdatabase.sip +%Include qt/qfontdialog.sip +%Include qt/qfontinfo.sip +%Include qt/qfontmetrics.sip +%Include qt/qframe.sip +%Include qt/qgmanager.sip +%Include qt/qgrid.sip +%Include qt/qgridview.sip +%Include qt/qgroupbox.sip +%Include qt/qhbox.sip +%Include qt/qhbuttongroup.sip +%Include qt/qheader.sip +%Include qt/qhgroupbox.sip +%Include qt/qiconset.sip +%Include qt/qiconview.sip +%Include qt/qimage.sip +%Include qt/qinputdialog.sip +%Include qt/qinterlacestyle.sip +%Include qt/qiodevice.sip +%Include qt/qkeycode.sip +%Include qt/qkeysequence.sip +%Include qt/qlabel.sip +%Include qt/qlayout.sip +%Include qt/qlcdnumber.sip +%Include qt/qlibrary.sip +%Include qt/qlineedit.sip +%Include qt/qlist.sip +%Include qt/qlistbox.sip +%Include qt/qlistview.sip +%Include qt/qlocale.sip +%Include qt/qmainwindow.sip +%Include qt/qmemarray.sip +%Include qt/qmenubar.sip +%Include qt/qmenudata.sip +%Include qt/qmessagebox.sip +%Include qt/qmetaobject.sip +%Include qt/qmime.sip +%Include qt/qmotifplusstyle.sip +%Include qt/qmotifstyle.sip +%Include qt/qmovie.sip +%Include qt/qmultilinedit.sip +%Include qt/qmutex.sip +%Include qt/qnetworkprotocol.sip +%Include qt/qobject.sip +%Include qt/qobjectcleanuphandler.sip +%Include qt/qobjectlist.sip +%Include qt/qpaintdevicemetrics.sip +%Include qt/qpaintdevice.sip +%Include qt/qpainter.sip +%Include qt/qpalette.sip +%Include qt/qpixmap.sip +%Include qt/qpixmapcache.sip +%Include qt/qpair.sip +%Include qt/qpen.sip +%Include qt/qpicture.sip +%Include qt/qplatinumstyle.sip +%Include qt/qpoint.sip +%Include qt/qpointarray.sip +%Include qt/qpopupmenu.sip +%Include qt/qprintdialog.sip +%Include qt/qprinter.sip +%Include qt/qprocess.sip +%Include qt/qprogressbar.sip +%Include qt/qprogressdialog.sip +%Include qt/qptrlist.sip +%Include qt/qpushbutton.sip +%Include qt/qradiobutton.sip +%Include qt/qrangecontrol.sip +%Include qt/qrect.sip +%Include qt/qregexp.sip +%Include qt/qregion.sip +%Include qt/qscrollbar.sip +%Include qt/qscrollview.sip +%Include qt/qsemaphore.sip +%Include qt/qsemimodal.sip +%Include qt/qsessionmanager.sip +%Include qt/qsettings.sip +%Include qt/qsgistyle.sip +%Include qt/qsignalmapper.sip +%Include qt/qsimplerichtext.sip +%Include qt/qsize.sip +%Include qt/qsizegrip.sip +%Include qt/qsizepolicy.sip +%Include qt/qslider.sip +%Include qt/qsocketnotifier.sip +%Include qt/qsound.sip +%Include qt/qspinbox.sip +%Include qt/qsplashscreen.sip +%Include qt/qsplitter.sip +%Include qt/qstatusbar.sip +%Include qt/qstring.sip +%Include qt/qstringlist.sip +%Include qt/qstrlist.sip +%Include qt/qstyle.sip +%Include qt/qstylesheet.sip +%Include qt/qsyntaxhighlighter.sip +%Include qt/qtabbar.sip +%Include qt/qtabdialog.sip +%Include qt/qtableview.sip +%Include qt/qtabwidget.sip +%Include qt/qtextbrowser.sip +%Include qt/qtextcodec.sip +%Include qt/qtextedit.sip +%Include qt/qtextstream.sip +%Include qt/qtextview.sip +%Include qt/qthread.sip +%Include qt/qtimer.sip +%Include qt/qtoolbar.sip +%Include qt/qtoolbox.sip +%Include qt/qtoolbutton.sip +%Include qt/qtooltip.sip +%Include qt/qtranslator.sip +%Include qt/qurl.sip +%Include qt/qurlinfo.sip +%Include qt/qurloperator.sip +%Include qt/quuid.sip +%Include qt/qvalidator.sip +%Include qt/qvaluelist.sip +%Include qt/qvariant.sip +%Include qt/qvbox.sip +%Include qt/qvbuttongroup.sip +%Include qt/qvgroupbox.sip +%Include qt/qwaitcondition.sip +%Include qt/qwhatsthis.sip +%Include qt/qwidget.sip +%Include qt/qwidgetlist.sip +%Include qt/qwidgetstack.sip +%Include qt/qwindow.sip +%Include qt/qwindowsstyle.sip +%Include qt/qwindowsxpstyle.sip +%Include qt/qwizard.sip +%Include qt/qwmatrix.sip +%Include qt/qworkspace.sip + +%ExportedDoc + +%End + + +%ExportedDoc +<Literal>qtaxcontainer</Literal> Module Reference +%End + +%Include qtaxcontainer/qaxbase.sip +%Include qtaxcontainer/qaxobject.sip +%Include qtaxcontainer/qaxwidget.sip + +%ExportedDoc + +%End + + +%ExportedDoc +<Literal>qtcanvas</Literal> Module Reference +%End + +%Include qtcanvas/qcanvas.sip + +%ExportedDoc + +%End + + +%ExportedDoc +<Literal>qtext</Literal> Module Reference + +QextScintilla + + void getCursorPosition + int *line + int *index + + +This takes no parameters and returns a tuple of the values returned by the +line and index pointers. + + + + void getSelection + int *lineFrom + int *indexFrom + int *lineTo + int *indexTo + + +This takes no parameters and returns a tuple of the values returned by the +lineFrom, indexFrom, +lineTo and indexTo pointers. + + + +QextScintillaAPIs + +QextScintillaAPIs is fully implemented. + + + +QextScintillaBase + +QextScintillaBase is fully implemented. + + + +QextScintillaCommand + +QextScintillaCommand is fully implemented. + + + +QextScintillaCommandSet + +QextScintillaCommandSet is fully implemented. + + + +QextScintillaDocument + +QextScintillaDocument is fully implemented. + + + +QextScintillaLexer + +QextScintillaLexer is fully implemented. + + + +QextScintillaLexerBash (QScintilla v1.4+) + +QextScintillaLexerBash is fully implemented. + + + +QextScintillaLexerBatch (QScintilla v1.6+) + +QextScintillaLexerBatch is fully implemented. + + + +QextScintillaLexerCPP + +QextScintillaLexerCPP is fully implemented. + + + +QextScintillaLexerCSharp + +QextScintillaLexerCSharp is fully implemented. + + + +QextScintillaLexerCSS (QScintilla v1.6+) + +QextScintillaLexerCSS is fully implemented. + + + +QextScintillaLexerDiff (QScintilla v1.6+) + +QextScintillaLexerDiff is fully implemented. + + + +QextScintillaLexerHTML (QScintilla v1.1+) + +QextScintillaLexerHTML is fully implemented. + + + +QextScintillaLexerIDL + +QextScintillaLexerIDL is fully implemented. + + + +QextScintillaLexerJava + +QextScintillaLexerJava is fully implemented. + + + +QextScintillaLexerJavaScript + +QextScintillaLexerJavaScript is fully implemented. + + + +QextScintillaLexerLua (QScintilla v1.5+) + +QextScintillaLexerLua is fully implemented. + + + +QextScintillaLexerMakefile (QScintilla v1.6+) + +QextScintillaLexerMakefile is fully implemented. + + + +QextScintillaLexerPerl + +QextScintillaLexerPerl is fully implemented. + + + +QextScintillaLexerPOV (QScintilla v1.6+) + +QextScintillaLexerPOV is fully implemented. + + + +QextScintillaLexerProperties (QScintilla v1.6+) + +QextScintillaLexerProperties is fully implemented. + + + +QextScintillaLexerPython + +QextScintillaLexerPython is fully implemented. + + + +QextScintillaLexerRuby (QScintilla v1.5+) + +QextScintillaLexerRuby is fully implemented. + + + +QextScintillaLexerSQL (QScintilla v1.1+) + +QextScintillaLexerSQL is fully implemented. + + + +QextScintillaLexerTeX (QScintilla v1.6+) + +QextScintillaLexerTeX is fully implemented. + + + +QextScintillaMacro + +QextScintillaMacro is fully implemented. + + + +QextScintillaPrinter + +QextScintillaPrinter is fully implemented. + + +%End + + +%ExportedDoc + +%End + + +%ExportedDoc +<Literal>qtgl</Literal> Module Reference +%End + +%Include qtgl/qgl.sip +%Include qtgl/qglcolormap.sip + +%ExportedDoc + +%End + + +%ExportedDoc +<Literal>qtnetwork</Literal> Module Reference +%End + +%Include qtnetwork/qdns.sip +%Include qtnetwork/qftp.sip +%Include qtnetwork/qhostaddress.sip +%Include qtnetwork/qhttp.sip +%Include qtnetwork/qlocalfs.sip +%Include qtnetwork/qnetwork.sip +%Include qtnetwork/qserversocket.sip +%Include qtnetwork/qsocket.sip +%Include qtnetwork/qsocketdevice.sip + +%ExportedDoc + +%End + + +%ExportedDoc +<Literal>qtpe</Literal> Module Reference + +QPEApplication + + QApplication + int& argc + char **argv + Type type + + +This takes two parameters, the first of which is a list of argument strings. +Arguments used by Qt are removed from the list. + + + + int exec + + + +This has been renamed to exec_loop in Python. + + + +AppLnk + + virtual QString exec const + + + +This has been renamed to exec_property in Python. + + + +AppLnkSet + +AppLnkSet is fully implemented. + + + +Config + +Config is fully implemented. + + + +DateFormat + +DateFormat is fully implemented. + + + +DocLnk + + QString exec const + + + +This has been renamed to exec_property in Python. + + + +DocLnkSet + +DocLnkSet is fully implemented. + + + +FileManager + +FileManager is fully implemented. + + + +FileSelector + +FileSelector is fully implemented. + + + +FileSelectorItem + +FileSelectorItem is fully implemented. + + + +FontDatabase + +FontDatabase is fully implemented. + + + +Global + + static void setBuiltinCommands + Command * + + +Not implemented. + + + +MenuButton + +MenuButton is fully implemented. + + + +QCopEnvelope + +QCopEnvelope is fully implemented. + + + +QDawg + +QDawg is fully implemented. + + + +QPEMenuBar + +QPEMenuBar is fully implemented. + + + +QPEToolBar + +QPEToolBar is fully implemented. + + + +Resource + +Resource is fully implemented. + + + + +%End + + +%ExportedDoc +<Literal>qtsql</Literal> Module Reference +%End + +%Include qtsql/qdatabrowser.sip +%Include qtsql/qdatatable.sip +%Include qtsql/qdataview.sip +%Include qtsql/qeditorfactory.sip +%Include qtsql/qsql.sip +%Include qtsql/qsqlcursor.sip +%Include qtsql/qsqldatabase.sip +%Include qtsql/qsqldriver.sip +%Include qtsql/qsqleditorfactory.sip +%Include qtsql/qsqlerror.sip +%Include qtsql/qsqlfield.sip +%Include qtsql/qsqlform.sip +%Include qtsql/qsqlindex.sip +%Include qtsql/qsqlpropertymap.sip +%Include qtsql/qsqlquery.sip +%Include qtsql/qsqlrecord.sip +%Include qtsql/qsqlresult.sip +%Include qtsql/qsqlselectcursor.sip + +%ExportedDoc + +%End + + +%ExportedDoc +<Literal>qttable</Literal> Module Reference +%End + +%Include qttable/qtable.sip + +%ExportedDoc + +%End + + +%ExportedDoc +<Literal>qtui</Literal> Module Reference +%End + +%Include qtui/qwidgetfactory.sip + +%ExportedDoc + +%End + + +%ExportedDoc +<Literal>qtxml</Literal> Module Reference +%End + +%Include qtxml/qdom.sip + +%ExportedDoc + +%End + + +%Doc +
+%End diff --git a/examples2/README b/examples2/README new file mode 100644 index 0000000..1c1938f --- /dev/null +++ b/examples2/README @@ -0,0 +1,11 @@ +To run these examples, make sure you have your PYTHONPATH environment variable +set if needed and explicitly set the path to python at the top of each script +if you don't have /usr/bin/env. + +The examples are written for Qt v2.x. + +A much better source of information about using PyQt is Boudewijn Rempt's +book at http://stage.linuxports.com/projects/pyqt/. + +Phil Thompson +phil@riverbankcomputing.co.uk diff --git a/examples2/aclock.py b/examples2/aclock.py new file mode 100755 index 0000000..38ed36c --- /dev/null +++ b/examples2/aclock.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python + +import sys +from qt import * + +def QMIN(x, y): + if y > x: return y + return x +class AnalogClock(QWidget): + def __init__(self, *args): + apply(QWidget.__init__,(self,) + args) + self.time = QTime.currentTime() + internalTimer = QTimer(self) + self.connect(internalTimer, SIGNAL("timeout()"), self.timeout) + internalTimer.start(5000) + + def timeout(self): + new_time = QTime.currentTime() + if new_time.minute() != self.time.minute(): + self.update() + + def paintEvent(self, qe): + if not self.isVisible(): + return + self.time = QTime.currentTime() + + pts = QPointArray() + paint = QPainter(self) + paint.setBrush(self.foregroundColor()) + + cp = QPoint(self.rect().center()) + d = QMIN(self.width(), self.height()) + matrix = QWMatrix() + matrix.translate(cp.x(), cp.y()) + matrix.scale(d/1000.0, d/1000.0) + + h_angle = 30*(self.time.hour()%12 - 3) + self.time.minute()/2 + matrix.rotate(h_angle) + paint.setWorldMatrix(matrix) + pts.setPoints([-20,0,0,-20,300,0,0,20]) + paint.drawPolygon(pts) + matrix.rotate(-h_angle) + + m_angle = (self.time.minute()-15)*6 + matrix.rotate(m_angle) + paint.setWorldMatrix(matrix) + pts.setPoints([-10,0,0,-10,400,0,0,10]) + paint.drawPolygon(pts) + matrix.rotate(-m_angle) + + for i in range(0,12): + paint.setWorldMatrix(matrix) + paint.drawLine(450,0, 500,0) + matrix.rotate(30) + +a = QApplication(sys.argv) +clock = AnalogClock() +clock.resize(100,100) +a.setMainWidget(clock) +clock.show() +a.exec_loop() diff --git a/examples2/addressbook.py b/examples2/addressbook.py new file mode 100755 index 0000000..d7316e3 --- /dev/null +++ b/examples2/addressbook.py @@ -0,0 +1,457 @@ +#!/usr/bin/env python + +# A port to PyQt of the application example from Qt v2.x. + + +import sys, string +from qt import * + +TRUE = 1 +FALSE = 0 +fileopen = [ +' 16 13 5 1', +'. c #040404', +'# c #808304', +'a c None', +'b c #f3f704', +'c c #f3f7f3', +'aaaaaaaaa...aaaa', +'aaaaaaaa.aaa.a.a', +'aaaaaaaaaaaaa..a', +'a...aaaaaaaa...a', +'.bcb.......aaaaa', +'.cbcbcbcbc.aaaaa', +'.bcbcbcbcb.aaaaa', +'.cbcb...........', +'.bcb.#########.a', +'.cb.#########.aa', +'.b.#########.aaa', +'..#########.aaaa', +'...........aaaaa' +] + +filesave = [ +' 14 14 4 1', +'. c #040404', +'# c #808304', +'a c #bfc2bf', +'b c None', +'..............', +'.#.aaaaaaaa.a.', +'.#.aaaaaaaa...', +'.#.aaaaaaaa.#.', +'.#.aaaaaaaa.#.', +'.#.aaaaaaaa.#.', +'.#.aaaaaaaa.#.', +'.##........##.', +'.############.', +'.##.........#.', +'.##......aa.#.', +'.##......aa.#.', +'.##......aa.#.', +'b.............' +] + +fileprint = [ +' 16 14 6 1', +'. c #000000', +'# c #848284', +'a c #c6c3c6', +'b c #ffff00', +'c c #ffffff', +'d c None', +'ddddd.........dd', +'dddd.cccccccc.dd', +'dddd.c.....c.ddd', +'ddd.cccccccc.ddd', +'ddd.c.....c....d', +'dd.cccccccc.a.a.', +'d..........a.a..', +'.aaaaaaaaaa.a.a.', +'.............aa.', +'.aaaaaa###aa.a.d', +'.aaaaaabbbaa...d', +'.............a.d', +'d.aaaaaaaaa.a.dd', +'dd...........ddd' +] + +class ABCentralWidget( QWidget ): + def __init__( self, *args ): + apply( QWidget.__init__, (self, ) + args ) + self.mainGrid = QGridLayout( self, 2, 1, 5, 5 ) + + self.setupTabWidget() + self.setupListView() + + self.mainGrid.setRowStretch( 0, 0 ) + self.mainGrid.setRowStretch( 1, 1 ) + + def save( self, filename ): + if not self.listView.firstChild(): + return + + f = QFile( filename ) + if not f.open( IO_WriteOnly ): + return + + t = QTextStream( f ) + + #it = QListViewItemIterator( self.listView ) + + while not t.eof(): + item = QListViewItem( self.listView ) + for i in range (0, 4): + t << item.text( i ) << '\n' + #for it in it.current(): + #for i in range (0, 4): + #t << it.current().text[ i ] << "\n" + + f.close() + + + def load( self, filename ): + self.listView.clear() + + f = QFile( filename ) + if not f.open( IO_ReadOnly ): + return + + t = QTextStream( f ) + + while not t.eof(): + item = QListViewItem( self.listView ) + for i in range (0, 4): + item.setText( i, t.readLine() ) + + f.close(); + + + def setupTabWidget( self ): + self.tabWidget = QTabWidget( self ) + + self.input = QWidget( self.tabWidget ) + self.grid1 = QGridLayout( self.input, 2, 5, 5, 5 ) + + self.liFirstName = QLabel( 'First &Name', self.input ) + self.liFirstName.resize( self.liFirstName.sizeHint() ) + self.grid1.addWidget( self.liFirstName, 0, 0 ) + + self.liLastName = QLabel( '&Last Name', self.input ) + self.liLastName.resize( self.liLastName.sizeHint() ) + self.grid1.addWidget( self.liLastName, 0, 1 ) + + self.liAddress = QLabel( '&Address', self.input ) + self.liAddress.resize( self.liAddress.sizeHint() ) + self.grid1.addWidget( self.liAddress, 0, 2 ) + + self.liEMail = QLabel( '&E-Mail', self.input ) + self.liEMail.resize( self.liEMail.sizeHint() ) + self.grid1.addWidget( self.liEMail, 0, 3 ) + + self.add = QPushButton( '&Add', self.input ) + self.add.resize( self.add.sizeHint() ) + self.grid1.addWidget( self.add, 0, 4 ) + self.connect( self.add, SIGNAL( 'clicked()' ), self.addEntry ) + + self.iFirstName = QLineEdit( self.input ) + self.iFirstName.resize( self.iFirstName.sizeHint() ) + self.grid1.addWidget( self.iFirstName, 1, 0 ) + self.liFirstName.setBuddy( self.iFirstName ) + + self.iLastName = QLineEdit( self.input ) + self.iLastName.resize( self.iLastName.sizeHint() ) + self.grid1.addWidget( self.iLastName, 1, 1 ) + self.liLastName.setBuddy( self.iLastName ) + + self.iAddress = QLineEdit( self.input ) + self.iAddress.resize( self.iAddress.sizeHint() ) + self.grid1.addWidget( self.iAddress, 1, 2 ) + self.liAddress.setBuddy( self.iAddress ) + + self.iEMail = QLineEdit( self.input ) + self.iEMail.resize( self.iEMail.sizeHint() ) + self.grid1.addWidget( self.iEMail, 1, 3 ) + self.liEMail.setBuddy( self.iEMail ) + + self.change = QPushButton( '&Change', self.input ) + self.change.resize( self.change.sizeHint() ) + self.grid1.addWidget( self.change, 1, 4 ) + self.connect( self.change, SIGNAL( 'clicked()' ), self.changeEntry ) + + self.tabWidget.addTab( self.input, '&Add/Change Entry' ) + + # -------------------------------------- + + self.search = QWidget( self ) + self.grid2 = QGridLayout( self.search, 2, 5, 5, 5 ) + + self.cFirstName = QCheckBox( 'First &Name', self.search ) + self.cFirstName.resize( self.cFirstName.sizeHint() ) + self.grid2.addWidget( self.cFirstName, 0, 0 ) + self.connect( self.cFirstName, SIGNAL( 'clicked()' ), self.toggleFirstName ) + + self.cLastName = QCheckBox( '&Last Name', self.search ) + self.cLastName.resize( self.cLastName.sizeHint() ) + self.grid2.addWidget( self.cLastName, 0, 1 ) + self.connect( self.cLastName, SIGNAL( 'clicked()' ), self.toggleLastName ) + + self.cAddress = QCheckBox( '&Address', self.search ) + self.cAddress.resize( self.cAddress.sizeHint() ) + self.grid2.addWidget( self.cAddress, 0, 2 ) + self.connect( self.cAddress, SIGNAL( 'clicked()' ), self.toggleAddress ) + + self.cEMail = QCheckBox( '&E-Mail', self.search ) + self.cEMail.resize( self.cEMail.sizeHint() ) + self.grid2.addWidget( self.cEMail, 0, 3 ) + self.connect( self.cEMail, SIGNAL( 'clicked()' ), self.toggleEMail ) + + self.sFirstName = QLineEdit( self.search ) + self.sFirstName.resize( self.sFirstName.sizeHint() ) + self.grid2.addWidget( self.sFirstName, 1, 0 ) + + self.sLastName = QLineEdit( self.search ) + self.sLastName.resize( self.sLastName.sizeHint() ) + self.grid2.addWidget( self.sLastName, 1, 1 ) + + self.sAddress = QLineEdit( self.search ) + self.sAddress.resize( self.sAddress.sizeHint() ) + self.grid2.addWidget( self.sAddress, 1, 2 ) + + self.sEMail = QLineEdit( self.search ) + self.sEMail.resize( self.sEMail.sizeHint() ) + self.grid2.addWidget( self.sEMail, 1, 3 ) + + self.find = QPushButton( '&Find', self.search ) + self.find.resize( self.find.sizeHint() ) + self.grid2.addWidget( self.find, 1, 4 ) + self.connect( self.find, SIGNAL( 'clicked()' ), self.findEntries ) + + self.cFirstName.setChecked( TRUE ) + self.sFirstName.setEnabled( TRUE ) + self.sLastName.setEnabled( FALSE ) + self.sAddress.setEnabled( FALSE ) + self.sEMail.setEnabled( FALSE ) + + self.tabWidget.addTab( self.search, "&Search" ) + + self.mainGrid.addWidget( self.tabWidget, 0, 0 ) + + def setupListView( self ): + self.listView = QListView( self ) + self.listView.addColumn( 'First Name' ) + self.listView.addColumn( 'Last Name' ) + self.listView.addColumn( 'Address' ) + self.listView.addColumn( 'E-Mail' ) + + self.listView.setSelectionMode( QListView.Extended ) + + self.connect( self.listView, SIGNAL( 'clicked( QListViewItem* )' ), self.itemSelected ) + + self.mainGrid.addWidget( self.listView, 1, 0 ) + self.listView.setAllColumnsShowFocus( TRUE ) + + + def addEntry( self ): + if not self.iFirstName.text().isEmpty() or not self.iLastName.text().isEmpty() or \ + not self.iAddress.text().isEmpty() or not self.iEMail.text().isEmpty() : + self.item = QListViewItem( self.listView ) + self.item.setText( 0, self.iFirstName.text() ) + self.item.setText( 1, self.iLastName.text() ) + self.item.setText( 2, self.iAddress.text() ) + self.item.setText( 3, self.iEMail.text() ) + + self.iFirstName.setText( '' ) + self.iLastName.setText( '' ) + self.iAddress.setText( '' ) + self.iEMail.setText( '' ) + + def changeEntry( self ): + self.item = self.listView.currentItem() + if self.item and ( not self.iFirstName.text().isEmpty() or not self.iLastName.text().isEmpty() or \ + not self.iAddress.text().isEmpty() or not self.iEMail.text().isEmpty() ) : + self.item.setText( 0, self.iFirstName.text() ) + self.item.setText( 1, self.iLastName.text() ) + self.item.setText( 2, self.iAddress.text() ) + self.item.setText( 3, self.iEMail.text() ) + + def selectionChanged( self ): + self.iFirstName.setText( '' ) + self.iLastName.setText( '' ) + self.iAddress.setText( '' ) + self.iEMail.setText( '' ) + + def itemSelected( self, item ): + self.item.setSelected( TRUE ) + self.item.repaint() + + self.iFirstName.setText( item.text( 0 ) ) + self.iLastName.setText( item.text( 1 ) ) + self.iAddress.setText( item.text( 2 ) ) + self.iEMail.setText( item.text( 3 ) ) + + def toggleFirstName( self ): + self.sFirstName.setText( '' ) + if self.cFirstName.isChecked(): + self.sFirstName.setEnabled( TRUE ) + self.sFirstName.setFocus() + else: + self.sFirstName.setEnabled( FALSE ) + + def toggleLastName( self ): + self.sLastName.setText( '' ) + if self.cLastName.isChecked(): + self.sLastName.setEnabled( TRUE ) + self.sLastName.setFocus() + else: + self.sLastName.setEnabled( FALSE ) + + + def toggleAddress( self ): + self.sAddress.setText( '' ) + if self.cAddress.isChecked(): + self.sAddress.setEnabled( TRUE ) + self.sAddress.setFocus() + else: + self.sAddress.setEnabled( FALSE ) + + + def toggleEMail( self ): + self.sEMail.setText( '' ) + if self.cEMail.isChecked(): + self.sEMail.setEnabled( TRUE ) + self.sEMail.setFocus() + + else: + self.sEMail.setEnabled( FALSE ) + + + def findEntries( self ): + if not self.cFirstName.isChecked() and not self.cLastName.isChecked() and \ + not self.cAddress.isChecked() and not self.cEMail.isChecked(): + self.listView.clearSelection() + return + + it = QListViewItemIterator( self.listView ) + + for it in it.current() : + select = TRUE + + if self.cFirstName.isChecked(): + if select and it.current().text( 0 ).contains( self.sFirstName.text() ): + select = TRUE + else: + select = FALSE + + if self.cLastName.isChecked(): + if select and it.current().text( 1 ).contains( self.sLastName.text() ): + select = TRUE + else: + select = FALSE + + if self.cAddress.isChecked(): + if select and it.current().text( 2 ).contains( self.sAddress.text() ): + select = TRUE + else: + select = FALSE + + if self.cEMail.isChecked(): + if select and it.current().text( 3 ).contains( self.sEMail.text() ): + select = TRUE + else: + select = FALSE + + + if select: + it.current().setSelected( TRUE ) + else: + it.current().setSelected( FALSE ) + it.current().repaint() + + +class ABMainWindow(QMainWindow): + def __init__( self ): + QMainWindow.__init__( self, None, 'example addressbook application' ) + + self.filename = QString.null + self.setupMenuBar() + self.setupFileTools() + self.setupStatusBar() + self.setupCentralWidget() + + def setupMenuBar( self ): + self.file = QPopupMenu( self ) + self.menuBar().insertItem( '&File', self.file ) + + openIcon = QIconSet( QPixmap( fileopen ) ) + self.file.insertItem( 'New', self.fileNew, Qt.CTRL + Qt.Key_N ) + self.file.insertItem( openIcon, 'Open', self.fileOpen, Qt.CTRL + Qt.Key_O ) + self.file.insertSeparator() + saveIcon = QIconSet( QPixmap( filesave ) ) + self.file.insertItem( saveIcon, 'Save', self.fileSave, Qt.CTRL + Qt.Key_S ) + self.file.insertItem( 'Save As...', self.fileSaveAs ) + self.file.insertSeparator() + printIcon = QIconSet( QPixmap( fileprint ) ) + self.file.insertItem( printIcon, 'Print...', self.filePrint, Qt.CTRL + Qt.Key_P ) + self.file.insertSeparator() + #self.file.insertItem( 'Close', self.closeWindow, Qt.CTRL + Qt.Key_W ) + self.file.insertItem('Close', self, SLOT('close()'), Qt.CTRL+Qt.Key_W) + self.file.insertItem( 'Quit', qApp, SLOT( 'quit()' ), Qt.CTRL + Qt.Key_Q ) + + def setupFileTools( self ): + pass + #self.fileTools = QToolBar( self, 'file operations' ) + + def setupStatusBar( self ): + self.statusBar().message( "Ready", 2000 ) + + def setupCentralWidget( self ): + self.view = ABCentralWidget( self ) + #self.view.show() + self.setCentralWidget( self.view ) + + def closeWindow( self ): + close() + + + def fileNew( self ): + pass + + def fileOpen( self ): + fn = QFileDialog.getOpenFileName( QString.null, QString.null, self ) + if not fn.isEmpty(): + self.filename = fn + self.view.load( self.filename ) + + def fileSave( self ): + if self.filename.isEmpty(): + self.fileSaveAs() + return + + self.view.save( self.filename ) + + def fileSaveAs( self ): + fn = QFileDialog.getSaveFileName( QString.null, QString.null, self ) + if not fn.isEmpty(): + self.filename = fn + self.fileSave + + def filePrint( self ): + pass + + +a = QApplication( sys.argv ) + +mw = ABMainWindow() +#mw.setupMenuBar() +#mw.setupFileTools +#mw.setupStatusBar +#mw.setupCentralWidget +#view = ABCentralWidget() +#mw.setCentralWidget( view ) +mw.setCaption( 'Addressbook 1' ) +a.setMainWidget( mw ) +mw.show() + +a.connect( a, SIGNAL( 'lastWindowClosed()' ), a, SLOT( 'quit()' ) ) +a.exec_loop() diff --git a/examples2/application.py b/examples2/application.py new file mode 100755 index 0000000..294c6cb --- /dev/null +++ b/examples2/application.py @@ -0,0 +1,277 @@ +#!/usr/bin/env python + +# A simple application. + + +import sys, string +from qt import * + + +fileopen = [ + '16 13 5 1', + '. c #040404', + '# c #808304', + 'a c None', + 'b c #f3f704', + 'c c #f3f7f3', + 'aaaaaaaaa...aaaa', + 'aaaaaaaa.aaa.a.a', + 'aaaaaaaaaaaaa..a', + 'a...aaaaaaaa...a', + '.bcb.......aaaaa', + '.cbcbcbcbc.aaaaa', + '.bcbcbcbcb.aaaaa', + '.cbcb...........', + '.bcb.#########.a', + '.cb.#########.aa', + '.b.#########.aaa', + '..#########.aaaa', + '...........aaaaa' +] + +filesave = [ + '14 14 4 1', + '. c #040404', + '# c #808304', + 'a c #bfc2bf', + 'b c None', + '..............', + '.#.aaaaaaaa.a.', + '.#.aaaaaaaa...', + '.#.aaaaaaaa.#.', + '.#.aaaaaaaa.#.', + '.#.aaaaaaaa.#.', + '.#.aaaaaaaa.#.', + '.##........##.', + '.############.', + '.##.........#.', + '.##......aa.#.', + '.##......aa.#.', + '.##......aa.#.', + 'b.............' +] + +fileprint = [ + '16 14 6 1', + '. c #000000', + '# c #848284', + 'a c #c6c3c6', + 'b c #ffff00', + 'c c #ffffff', + 'd c None', + 'ddddd.........dd', + 'dddd.cccccccc.dd', + 'dddd.c.....c.ddd', + 'ddd.cccccccc.ddd', + 'ddd.c.....c....d', + 'dd.cccccccc.a.a.', + 'd..........a.a..', + '.aaaaaaaaaa.a.a.', + '.............aa.', + '.aaaaaa###aa.a.d', + '.aaaaaabbbaa...d', + '.............a.d', + 'd.aaaaaaaaa.a.dd', + 'dd...........ddd' +] + + +fileOpenText = \ +''' +Click this button to open a new file.

+You can also select the Open command from the File menu.''' + +fileSaveText = \ +'''Click this button to save the file you are editing.

+You will be prompted for a filename.

+You can also select the Save command from the File menu.''' + +filePrintText = \ +'''Click this button to print the file you are editing.

+You can also select the Print command from the File menu.''' + + +editorList = [] + + +class ApplicationWindow(QMainWindow): + def __init__(self): + QMainWindow.__init__(self,None,'example application main window',Qt.WDestructiveClose) + + self.filename = QString.null + self.printer = QPrinter() + + self.fileTools = QToolBar(self,'file operations') + + openIcon = QPixmap(fileopen) + self.fileOpen = QToolButton(openIcon,'Open File',QString.null,self.load,self.fileTools,'open file') + + saveIcon = QPixmap(filesave) + self.fileSave = QToolButton(saveIcon,'Save File',QString.null,self.save,self.fileTools,'save file') + + printIcon = QPixmap(fileprint) + self.filePrint = QToolButton(printIcon,'Print File',QString.null,self.printDoc,self.fileTools,'print file') + + QWhatsThis.whatsThisButton(self.fileTools) + + QWhatsThis.add(self.fileOpen,fileOpenText) + QMimeSourceFactory.defaultFactory().setPixmap('fileopen',openIcon) + QWhatsThis.add(self.fileSave,fileSaveText) + QWhatsThis.add(self.filePrint,filePrintText) + + self.file = QPopupMenu(self) + self.menuBar().insertItem('&File',self.file) + + self.file.insertItem('&New',self.newDoc,Qt.CTRL + Qt.Key_N) + + id = self.file.insertItem(QIconSet(openIcon),'&Open',self.load,Qt.CTRL + Qt.Key_O) + self.file.setWhatsThis(id,fileOpenText) + + id = self.file.insertItem(QIconSet(saveIcon),'&Save',self.save,Qt.CTRL + Qt.Key_S) + self.file.setWhatsThis(id,fileSaveText) + + id = self.file.insertItem('Save &as',self.saveAs) + self.file.setWhatsThis(id,fileSaveText) + + self.file.insertSeparator() + + id = self.file.insertItem(QIconSet(printIcon),'&Print',self.printDoc,Qt.CTRL + Qt.Key_P) + self.file.setWhatsThis(id,filePrintText) + + self.file.insertSeparator() + + self.file.insertItem('&Close',self,SLOT('close()'),Qt.CTRL + Qt.Key_W) + self.file.insertItem('&Quit',qApp,SLOT('closeAllWindows()'),Qt.CTRL + Qt.Key_Q) + + self.help = QPopupMenu(self) + self.menuBar().insertSeparator() + self.menuBar().insertItem('&Help',self.help) + + self.help.insertItem('&About',self.about,Qt.Key_F1) + self.help.insertItem('About &Qt',self.aboutQt) + + self.e = QMultiLineEdit(self,'editor') + self.e.setFocus() + self.setCentralWidget(self.e) + + self.statusBar().message('Ready',2000) + self.resize(450,600) + + def newDoc(self): + ed = ApplicationWindow() + ed.show() + editorList.append(ed) + + def load(self): + fn = QFileDialog.getOpenFileName(QString.null,QString.null,self) + if fn.isEmpty(): + self.statusBar().message('Loading aborted',2000) + return + + fileName = str(fn) + + self.e.setAutoUpdate(0) + self.e.clear() + + try: + f = open(fileName,'r') + except: + return + + for l in f.readlines(): + self.e.append(string.rstrip(l)) + + f.close() + + self.e.setAutoUpdate(1) + self.e.repaint() + self.e.setEdited(0) + self.setCaption(fileName) + self.statusBar().message('Loaded document %s' % (fileName),2000) + + def save(self): + if self.filename.isEmpty(): + self.saveAs() + return + + try: + f = open(str(self.filename),'w+') + except: + self.statusBar().message('Could not write to %s' % (self.filename),2000) + return + + f.write(str(self.e.text())) + f.close() + + self.e.setEdited(0) + self.setCaption(self.filename) + self.statusBar().message('File %s saved' % (self.filename),2000) + + def saveAs(self): + fn = QFileDialog.getSaveFileName(QString.null,QString.null,self) + if not fn.isEmpty(): + self.filename = fn + self.save() + else: + self.statusBar().message('Saving aborted',2000) + + def printDoc(self): + Margin = 10 + pageNo = 1 + + if self.printer.setup(self): + self.statusBar().message('Printing...') + + p = QPainter() + p.begin(self.printer) + p.setFont(self.e.font()) + yPos = 0 + fm = p.fontMetrics() + metrics = QPaintDeviceMetrics(self.printer) + + for i in range(self.e.numLines): + if Margin + yPos > metrics.height() - Margin: + pageNo = pageNo + 1 + self.statusBar().message('Printing (page %d)...' % (pageNo)) + self.printer.newPage() + yPos = 0 + + p.drawText(Margin,Margin + yPos,metrics.width(),fm.lineSpacing(),Qt.ExpandTabs | Qt.DontClip,self.e.textLine(i)) + yPos = yPos + fm.lineSpacing() + + p.end() + self.statusBar().message('Printing completed',2000) + else: + self.statusBar().message('Printing aborted',2000) + + def closeEvent(self,ce): + if not self.e.edited(): + ce.accept() + return + + rc = QMessageBox.information(self,'Qt Application Example', + 'The document has been changed since the last save.', + 'Save Now','Cancel','Leave Anyway',0,1) + + if rc == 0: + self.save() + ce.accept() + elif rc == 2: + ce.accept() + else: + ce.ignore() + + def about(self): + QMessageBox.about(self,'Qt Application Example', + 'This example demonstrates simple use of QMainWindow,\nQMenuBar and QToolBar.') + + def aboutQt(self): + QMessageBox.aboutQt(self,'Qt Application Example') + + +a = QApplication(sys.argv) +mw = ApplicationWindow() +mw.setCaption('Document 1') +mw.show() +a.connect(a, SIGNAL('lastWindowClosed()'), a, SLOT('quit()')) +a.exec_loop() diff --git a/examples2/buttongroups.py b/examples2/buttongroups.py new file mode 100755 index 0000000..47256ab --- /dev/null +++ b/examples2/buttongroups.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python +#/**************************************************************************** +#** $Id: buttongroups.py,v 1.1.1.1 2002/06/04 23:04:42 phil Exp $ +#** +#** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. +#** +#** This file is part of an example program for Qt. This example +#** program may be used, distributed and modified without limitation. +#** +#*****************************************************************************/ + +import sys +from qt import * + +TRUE = 1 +FALSE = 0 + +## +# Creates all child widgets of the ButtonGroups window +## + +class ButtonsGroups( QWidget ): + def __init__( self, *args ): + apply( QWidget.__init__, (self,) + args ) + + # Create Widgets which allow easy layouting + self.vbox = QVBoxLayout( self ) + self.box1 = QHBoxLayout( self.vbox ) + self.box2 = QHBoxLayout( self.vbox ) + + # ------- first group + + # Create an exclusive button group + self.grp1 = QButtonGroup( 1, QGroupBox.Horizontal, "Button Group 1 (exclusive)", self ) + self.box1.addWidget( self.grp1 ) + self.grp1.setExclusive( TRUE ) + + # insert 3 radiobuttons + self.rb11 = QRadioButton( "&Radiobutton 1", self.grp1 ) + self.rb11.setChecked( TRUE ) + QRadioButton( "R&adiobutton 2", self.grp1 ) + QRadioButton( "Ra&diobutton 3", self.grp1 ) + + # ------- second group + + # Create a non-exclusive buttongroup + self.grp2 = QButtonGroup( 1, QGroupBox.Horizontal, "Button Group 2 (non-exclusive)", self ) + self.box1.addWidget( self.grp2 ) + self.grp2.setExclusive( FALSE ) + + # insert 3 checkboxes + QCheckBox( "&Checkbox 1", self.grp2 ) + self.cb12 = QCheckBox( "C&heckbox 2", self.grp2 ) + self.cb12.setChecked( TRUE ) + self.cb13 = QCheckBox( "Triple &State Button", self.grp2 ) + self.cb13.setTristate( TRUE ) + self.cb13.setChecked( TRUE ) + + # ------------ third group + + # create a buttongroup which is exclusive for radiobuttons and non-exclusive for all other buttons + self.grp3 = QButtonGroup( 1, QGroupBox.Horizontal, "Button Group 3 (Radiobutton-exclusive)", self ) + self.box2.addWidget( self.grp3 ) + self.grp3.setRadioButtonExclusive( TRUE ) + + # insert three radiobuttons + self.rb21 = QRadioButton( "Rad&iobutton 1", self.grp3 ) + self.rb22 = QRadioButton( "Radi&obutton 2", self.grp3 ) + self.rb23 = QRadioButton( "Radio&button 3", self.grp3 ) + self.rb23.setChecked( TRUE ) + + # insert a checkbox... + self.state = QCheckBox( "E&nable Radiobuttons", self.grp3 ) + self.state.setChecked( TRUE ) + # ...and connect its SIGNAL clicked() with the SLOT slotChangeGrp3State() + self.connect( self.state, SIGNAL( "clicked()" ), self.slotChangeGrp3State ) + + # ------------ fourth group + + # create a groupbox which layouts its childs in a columns + self.grp4 = QButtonGroup( 1, QGroupBox.Horizontal, "Groupbox with normal buttons", self ) + self.box2.addWidget( self.grp4 ) + + # insert two pushbuttons... + QPushButton( "&Push Button", self.grp4 ) + self.tb = QPushButton( "&Toggle Button", self.grp4 ) + + # ... and make the second one a toggle button + self.tb.setToggleButton( TRUE ) + self.tb.setOn( TRUE ) + + + # + # SLOT slotChangeGrp3State() + # enables/disables the radiobuttons of the third buttongroup + # + + def slotChangeGrp3State( self ): + self.rb21.setEnabled( self.state.isChecked() ) + self.rb22.setEnabled( self.state.isChecked() ) + self.rb23.setEnabled( self.state.isChecked() ) + + +## main program +a = QApplication( sys.argv ) + +buttonsgroups = ButtonsGroups() +buttonsgroups.resize( 500, 250 ) +buttonsgroups.setCaption( "Examples for Buttons and Groups" ) +a.setMainWidget( buttonsgroups ) +buttonsgroups.show() + +a.exec_loop() diff --git a/examples2/dclock.py b/examples2/dclock.py new file mode 100755 index 0000000..5382d4f --- /dev/null +++ b/examples2/dclock.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python + +# A port to PyQt of the dclock example from Qt v2.x. + + +import sys, string +from qt import * + + +class DigitalClock(QLCDNumber): + def __init__(self, parent=None, name=None): + QLCDNumber.__init__(self, parent, name) + self.showingColon = 0 + self.setFrameStyle(QFrame.Panel | QFrame.Raised) + self.setLineWidth(2) + self.showTime() + self.normalTimer = self.startTimer(500) + self.showDateTimer = -1 + + def timerEvent(self, e): + if e.timerId() == self.showDateTimer: + self.stopDate() + else: + if self.showDateTimer == -1: + self.showTime() + + def mousePressEvent(self, e): + if e.button() == Qt.LeftButton: + self.showDate() + + def showDate(self): + if self.showDateTimer != -1: + return + d = QDate.currentDate() + self.display('%2d %2d' % (d.month(), d.day())) + self.showDateTimer = self.startTimer(2000) + + def stopDate(self): + self.killTimer(self.showDateTimer) + self.showDateTimer = -1 + self.showTime() + + def showTime(self): + self.showingColon = not self.showingColon + s = list(str(QTime.currentTime().toString())[:5]) #.left(5) + if not self.showingColon: + s[2] = ' ' + if s[0] == '0': + s[0] = ' ' + s = string.join(s,'') + self.display(s) + +a = QApplication(sys.argv) +clock = DigitalClock() +clock.resize(170,80) +a.setMainWidget(clock) +clock.show() +a.exec_loop() diff --git a/examples2/desktop.py b/examples2/desktop.py new file mode 100755 index 0000000..a1177f2 --- /dev/null +++ b/examples2/desktop.py @@ -0,0 +1,219 @@ +#!/usr/bin/env python + +import sys +from qt import * + +seed = 0.353535353535 +KINDA_RAND_MAX = 32767 + +def kindaRand(): + global seed + seed = seed * 147 + seed = seed - int(seed) + return int(seed*(KINDA_RAND_MAX + 1)) + +velmax = 15 +velmin = 4 + +def velocity(i): + if i == 1 or i == 2: + i = (kindaRand()&0x7fff % velmax)/3 + velmin + else: + i = (kindaRand()&0x7fff % velmax) + velmin + +maxpoints = 5 +maxcurves = 8 + +def poly(): + d = QApplication.desktop() + d.setBackgroundColor(white) + xvel = [ 0 ] * 8 + yvel = [ 0 ] * 8 + head = 0 + tail = -maxcurves + 2 + a = QPointArray() * maxcurves + r = d.rect() + for i in range(maxcurves): + a[i].resize(maxpoints) + p = a[0] + for i in range(maxpoints): + p.setPoint(i, (kindaRand()&0x7fff) % r.width(), + (kindaRand()&0x7fff) % r.height() ) + xvel[i] = velocity(i) + yvel[i] = velocity(i) + + paint = QPainter() + paint.begin(d) + + for ntimes in range(2000): + paint.setBrush(QColor(kindaRand()%360,180,255, QColor.Hsv)) + paint.drawPolygon(a[head]) + tail = tail + 1 + if tail >= maxcurves: + tail = 0 + minx = r.left() + maxx = r.right() + miny = r.top() + maxy = r.bottom() + p = a[head] + head = head + 1 + if head >= maxcurves: + head = 0 + for i in range(maxpoints): + x, y = p.point(i) + x = x + xvel[i] + y = y + yvel[i] + if x >= maxx: + x = maxx - (x - maxx + 1) + xvel[i] = -velocity(i) + if x <= minx: + x = minx + (minx - x + 1) + xvel[i] = velocity(i) + if y >= maxy: + y = maxy - (y - maxy + 1) + yvel[i] = -velocity(i) + if y <= miny: + y = miny + (miny - y + 1) + yvel[i] = velocity(i) + a[head].setPoint(i, x, y) + paint.end() + +def rotate(): + w = 64 + h = 64 + image = QImage(w, h, 8, 128) + for i in range(128): + image.setColor(i, qRgb(i,0,0)) + for y in range(h): + for x in range(w): + image.setPixel(x,y,(x+y)%128) + + pm = QPixmap() + pm.convertFromImage(image) + #pm.optimize(1) + + d = QApplication.desktop() + + for i in range(0,361,2): + m = QWMatrix() + m.rotate(i) + rpm = pm.xForm(m) + d.setBackgroundPixmap(rpm) + d.update() + +def generateStone(pm, c1, c2, c3): + p = QPainter() + p1 = QPen(c1, 0) + p2 = QPen(c2, 0) + p3 = QPen(c3, 0) + + p.begin(pm) + for i in range(pm.width()): + for j in range(pm.height()): + r = kindaRand() + if r < KINDA_RAND_MAX / 3: + p.setPen(p1) + elif r < KINDA_RAND_MAX / 3 * 2: + p.setPen(p2) + else: + p.setPen(p3) + p.drawPoint(i, j) + p.end() + +def drawShadeText(p, x, y, text, topColor, bottomColor, sw=2): + if not p.isActive(): + return + + p.setPen(bottomColor) + p.drawText(x+sw, y+sw, text) + p.setPen(topColor) + p.drawText(x, y, text) + +class DesktopWidget(QWidget): + def __init__(self, s, parent=None, name=''): + QWidget.__init__(self, parent, name, WType_Desktop | WPaintDesktop) + self.text = s + self.pm = None + + def paintEvent(self, pe): + c1 = self.backgroundColor() + c2 = c1.light(104) + c3 = c1.dark(106) + if not self.pm: + self.pm = QPixmap(64, 64) + generateStone(self.pm, c1, c2, c3) + self.setBackgroundPixmap(self.pm) + self.update() + br = self.fontMetrics().boundingRect(self.text) + offscreen = QPixmap(br.width(), br.height()) + x = self.width()/2 - br.width()/2 + y = self.height()/2 - br.height()/2 + offscreen.fill(self, x, y) + p = QPainter() + p.begin(offscreen) + drawShadeText(p, -br.x(), -br.y(), self.text, c2, c3, 3) + p.end() + bitBlt(self, x, y, offscreen) + +def desktopWidget(s='Troll Tech'): + t = DesktopWidget(s) + t.update() + qApp.exec_loop() + +def desktopText(s='Troll Tech'): + border = 20 + + c1 = qApp.palette().normal().background() + c2 = c1.light(104) + c3 = c1.dark(106) + + pm = QPixmap(10, 10) + p = QPainter() + p.begin(pm) + r = p.fontMetrics().boundingRect(s) + p.end() + + appWidth = qApp.desktop().width() + appHeight = qApp.desktop().height() + if r.width() > appWidth - border*2: + r.setWidth(appWidth - border*2) + if r.height() > appHeight - border*2: + r.setHeight(appHeight - border*2) + + pm.resize(r.size().width()+border*2,r.size().height()+border*2) + generateStone(pm, c1, c2, c3) + p.begin(pm) + drawShadeText(p, -r.x()+border, -r.y()+border, s, c2, c3) + p.end() + + qApp.desktop().setBackgroundPixmap(pm) + +a = QApplication(sys.argv) +if len(sys.argv) > 1: + f = QFont('charter', 96, QFont.Weight.Black) + f.setStyleHint(QFont.StyleHint.Times) + a.setFont(f) +validOptions = 0 +if len(sys.argv) == 2: + validOptions = 1 + if sys.argv[1] == '-poly': + poly() + elif sys.argv[1] == '-rotate': + rotate() + elif sys.argv[1] == '-troll': + desktopText() + elif sys.argv[1] == '-trollwidget': + desktopWidget() + else: + validOptions = 0 +if len(sys.argv) == 3: + validOptions = 1 + if sys.argv[1] == '-shadetext': + desktopText(sys.argv[2]) + elif sys.argv[1] == '-shadewidget': + desktopWidget(sys.argv[2]) + else: + validOptions = 0 + +if not validOptions: + rotate() diff --git a/examples2/dirview.py b/examples2/dirview.py new file mode 100755 index 0000000..ae232e9 --- /dev/null +++ b/examples2/dirview.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python + +import sys +from qt import * + +class Directory(QListViewItem): + def __init__(self, parent, name=None): + apply(QListViewItem.__init__,(self,parent)) + if isinstance(parent, QListView): + self.p = None + self.f = '/' + else: + self.p = parent + self.f = name + self.c = [] + self.readable = 1 + + def setOpen(self, o): + if o and not self.childCount(): + s = self.fullName() + thisDir = QDir(s) + if not thisDir.isReadable(): + self.readable = 0 + return + + files = thisDir.entryInfoList() + if files: + for f in files: + fileName = str(f.fileName()) + if fileName == '.' or fileName == '..': + continue + elif f.isSymLink(): + d = QListViewItem(self, fileName, 'Symbolic Link') + elif f.isDir(): + d = Directory(self, fileName) + else: + if f.isFile(): + s = 'File' + else: + s = 'Special' + d = QListViewItem(self, fileName, s) + self.c.append(d) + + QListViewItem.setOpen(self, o) + + def setup(self): + self.setExpandable(1) + QListViewItem.setup(self) + + def fullName(self): + if self.p: + s = self.p.fullName() + self.f + '/' + else: + s = '/' + return s + + def text(self, column): + if column == 0: + return self.f + elif self.readable: + return 'Directory' + else: + return 'Unreadable Directory' + +a = QApplication(sys.argv) +mw = QListView() +a.setMainWidget(mw) +mw.setCaption('Directory Browser') +mw.addColumn('Name') +mw.addColumn('Type') +mw.resize(400, 400) +mw.setTreeStepSize(20) +root = Directory(mw) +root.setOpen(1) +mw.show() +a.exec_loop() diff --git a/examples2/dragdrop.py b/examples2/dragdrop.py new file mode 100755 index 0000000..4cc8c73 --- /dev/null +++ b/examples2/dragdrop.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +# Ported to PyQt by Issac Trotts on Jan 1, 2002 + +import sys +from qt import * + +import dropsite, secret + + +def addStuff( parent, yn_image, yn_secret = 0 ): + tll = QVBoxLayout( parent, 10 ) + d = dropsite.DropSite( parent, 'dropsite' ) + d.setFrameStyle( QFrame.Sunken + QFrame.WinPanel ) + tll.addWidget( d ) + if yn_image: + stuff = QPixmap() + if not stuff.load( "trolltech.bmp" ): + stuff = QPixmap(20,20) + stuff.fill(Qt.green) + d.setPixmap( stuff ) + else: + d.setText("Drag and Drop") + d.setFont(QFont("Helvetica",18)) + if secret: + s = secret.SecretSource( 42, parent ) + tll.addWidget( s ) + + format = QLabel( "\n\n\n\nNone\n\n\n\n", parent ) + tll.addWidget( format ) + tll.activate() + parent.resize( parent.sizeHint() ) + + QObject.connect( d, PYSIGNAL('message(QString &)'), + format, SLOT('setText(QString &)') ) + + +app = QApplication( sys.argv ) + +mw = QWidget() +addStuff( mw, 1 ) +mw.setCaption( "Qt Example - Drag and Drop" ) +mw.show() + +mw2 = QWidget() +addStuff( mw2, 0 ) +mw2.setCaption( "Qt Example - Drag and Drop" ) +mw2.show() + +mw3 = QWidget() +addStuff( mw3, 1, 1 ) +mw3.setCaption( "Qt Example - Drag and Drop" ) +mw3.show() + +QObject.connect(qApp,SIGNAL('lastWindowClosed()'),qApp,SLOT('quit()')) + +app.exec_loop() diff --git a/examples2/dropsite.py b/examples2/dropsite.py new file mode 100644 index 0000000..7897109 --- /dev/null +++ b/examples2/dropsite.py @@ -0,0 +1,96 @@ +# This is part of the dragdrop example. + + +from qt import * + +import secret + + +class DropSite(QLabel): + def __init__(self, parent=None, name=None): + QLabel.__init__( self, parent, name ) + self.setAcceptDrops(1) + + # this is a normal event + def mousePressEvent( self, e ): + if ( self.pixmap() ) : + drobj = QImageDrag( self.pixmap().convertToImage(), self ) + pm = QPixmap() + pm.convertFromImage(self.pixmap().convertToImage().smoothScale( + self.pixmap().width()/3,self.pixmap().height()/3)) + drobj.setPixmap(pm,QPoint(-5,-7)) + else : + drobj = QTextDrag( self.text(), self ) + drobj.dragCopy() + + def backgroundColorChange( self, qcolor ): + # Reduce flicker by using repaint() rather than update() + self.repaint() + + def dragMoveEvent( self, e ): + # Check if you want the drag at e.pos()... + # Give the user some feedback... + pass + + def dragEnterEvent( self, e ): + # Check if you want the drag... + if (secret.canDecode( e ) or + QTextDrag.canDecode( e ) or + QImageDrag.canDecode( e ) or + QUriDrag.canDecode( e )): + e.accept() + + # Give the user some feedback... + t = '' + i = 0 + while e.format( i ): + if ( t != '' ): + t += "\n" + t += str(e.format( i )) + i += 1 + self.emit(PYSIGNAL('message(QString &)'), (QString(t),)) + self.setBackgroundColor(Qt.white) + + def dragLeaveEvent( self, QDragLeaveEvent ): + # Give the user some feedback... + self.emit(PYSIGNAL('message(QString &)'), (QString(''),)) + self.setBackgroundColor(Qt.lightGray) + + def dropEvent( self, e ): + self.setBackgroundColor(Qt.lightGray) + # Try to decode to the data you understand... + str = QString() + if ( QTextDrag.decode( e, str ) ) : + self.setText( str ) + self.setMinimumSize( self.minimumSize().expandedTo(self.sizeHint()) ) + return + + pm = QPixmap() + if ( QImageDrag.decode( e, pm ) ) : + self.setPixmap( pm ) + self.setMinimumSize(self.minimumSize().expandedTo(self.sizeHint())) + return + + # QStrList strings + #strings = QStrList() + strings = [] + if ( QUriDrag.decode( e, strings ) ) : + m = QString("Full URLs:\n") + for u in strings: + m = m + " " + u + '\n' + # QStringList files + files = [] + if ( QUriDrag.decodeLocalFiles( e, files ) ) : + m += "Files:\n" + # for (QStringList.Iterator i=files.begin() i!=files.end() ++i) + for i in files: + m = m + " " + i + '\n' + self.setText( m ) + self.setMinimumSize(self.minimumSize().expandedTo(self.sizeHint())) + return + + str = secret.decode( e ) + if str: + self.setText( str ) + self.setMinimumSize(self.minimumSize().expandedTo(self.sizeHint())) + return diff --git a/examples2/gears.py b/examples2/gears.py new file mode 100755 index 0000000..bf5b913 --- /dev/null +++ b/examples2/gears.py @@ -0,0 +1,235 @@ +#!/usr/bin/env python + + +import sys +import math +from qt import * +from qtgl import * +from OpenGL.GL import * + +def gear(inner_radius,outer_radius,width,teeth,tooth_depth): + r0 = inner_radius; + r1 = outer_radius - tooth_depth/2.0; + r2 = outer_radius + tooth_depth/2.0; + + da = 2.0*math.pi/teeth/4.0; + + glShadeModel(GL_FLAT) + + glNormal3f(0.0,0.0,1.0) + + # draw front face + + glBegin(GL_QUAD_STRIP) + + for i in range(teeth+1): + angle = i * 2.0*math.pi/teeth; + glVertex3f(r0*math.cos(angle), r0*math.sin(angle), width*0.5 ) + glVertex3f(r1*math.cos(angle), r1*math.sin(angle), width*0.5 ) + glVertex3f(r0*math.cos(angle), r0*math.sin(angle), width*0.5 ) + glVertex3f(r1*math.cos(angle+3*da), r1*math.sin(angle+3*da), width*0.5 ) + + glEnd() + + # draw front sides of teeth + + da = 2.0*math.pi/teeth/4.0; + + glBegin(GL_QUADS) + + for i in range(teeth): + angle = i*2.0*math.pi/teeth + + glVertex3f( r1*math.cos(angle), r1*math.sin(angle), width*0.5 ) + glVertex3f( r2*math.cos(angle+da), r2*math.sin(angle+da), width*0.5 ) + glVertex3f( r2*math.cos(angle+2*da), r2*math.sin(angle+2*da), width*0.5 ) + glVertex3f( r1*math.cos(angle+3*da), r1*math.sin(angle+3*da), width*0.5 ) + + glEnd() + + + glNormal3f( 0.0, 0.0, -1.0 ) + + # draw back face + + glBegin( GL_QUAD_STRIP ); + + for i in range(teeth+1): + angle = i*2.0*math.pi/teeth; + + glVertex3f( r1*math.cos(angle), r1*math.sin(angle), -width*0.5 ) + glVertex3f( r0*math.cos(angle), r0*math.sin(angle), -width*0.5 ) + glVertex3f( r1*math.cos(angle+3*da), r1*math.sin(angle+3*da), -width*0.5 ) + glVertex3f( r0*math.cos(angle), r0*math.sin(angle), -width*0.5 ) + + glEnd() + + # draw back sides of teeth + + da = 2.0*math.pi/teeth/4.0 + + glBegin( GL_QUADS ) + + for i in range(teeth): + angle = i*2.0*math.pi/teeth + + glVertex3f( r1*math.cos(angle+3*da), r1*math.sin(angle+3*da), -width*0.5 ) + glVertex3f( r2*math.cos(angle+2*da), r2*math.sin(angle+2*da), -width*0.5 ) + glVertex3f( r2*math.cos(angle+da), r2*math.sin(angle+da), -width*0.5 ) + glVertex3f( r1*math.cos(angle), r1*math.sin(angle), -width*0.5 ) + + glEnd() + + # draw outward faces of teeth + + glBegin( GL_QUAD_STRIP ) + + for i in range(teeth): + angle = i*2.0*math.pi/teeth + + glVertex3f( r1*math.cos(angle), r1*math.sin(angle), width*0.5 ) + glVertex3f( r1*math.cos(angle), r1*math.sin(angle), -width*0.5 ) + + u = r2*math.cos(angle+da) - r1*math.cos(angle) + v = r2*math.sin(angle+da) - r1*math.sin(angle) + + len = math.sqrt( u*u + v*v ) + u /= len + v /= len + glNormal3f( v, -u, 0.0 ) + glVertex3f( r2*math.cos(angle+da), r2*math.sin(angle+da), width*0.5 ) + glVertex3f( r2*math.cos(angle+da), r2*math.sin(angle+da), -width*0.5 ) + glNormal3f( math.cos(angle), math.sin(angle), 0.0 ) + glVertex3f( r2*math.cos(angle+2*da), r2*math.sin(angle+2*da), width*0.5 ) + glVertex3f( r2*math.cos(angle+2*da), r2*math.sin(angle+2*da), -width*0.5 ) + u = r1*math.cos(angle+3*da) - r2*math.cos(angle+2*da) + v = r1*math.sin(angle+3*da) - r2*math.sin(angle+2*da) + glNormal3f( v, -u, 0.0 ) + glVertex3f( r1*math.cos(angle+3*da), r1*math.sin(angle+3*da), width*0.5 ) + glVertex3f( r1*math.cos(angle+3*da), r1*math.sin(angle+3*da), -width*0.5 ) + glNormal3f( math.cos(angle), math.sin(angle), 0.0 ) + + glVertex3f( r1*math.cos(0.0), r1*math.sin(0.0), width*0.5 ) + glVertex3f( r1*math.cos(0.0), r1*math.sin(0.0), -width*0.5 ) + + glEnd() + + glShadeModel (GL_SMOOTH) + + # draw inside radius cylinder + + glBegin( GL_QUAD_STRIP ) + + for i in range(teeth+1): + angle = i * 2.0*math.pi / teeth; + glNormal3f( -math.cos(angle), -math.sin(angle), 0.0 ); + glVertex3f( r0*math.cos(angle), r0*math.sin(angle), -width*0.5 ); + glVertex3f( r0*math.cos(angle), r0*math.sin(angle), width*0.5 ); + + glEnd() + +############################################################################## +class GearWidget(QGLWidget): + def __init__(self,parent=None,name=None): + QGLWidget.__init__(self,parent,name) + + self.angle=0.0 + self.view_rotx=0.0 + self.view_roty=0.0 + self.view_rotz=0.0 + + self.startTimer(10) + + def timerEvent(self,event): + self.updateGL() + + def paintGL(self): + self.angle = self.angle + 2.0 + self.view_rotx = self.view_rotx + 1.0 + self.view_roty = self.view_roty + 3.0 + self.view_rotz = self.view_rotz + 2.0 + + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) + + glPushMatrix() + glRotatef( self.view_rotx, 1.0, 0.0, 0.0 ) + glRotatef( self.view_roty, 0.0, 1.0, 0.0 ) + glRotatef( self.view_rotz, 0.0, 0.0, 1.0 ) + + glPushMatrix() + glTranslatef( -3.0, -2.0, 0.0 ) + glRotatef( self.angle, 0.0, 0.0, 1.0 ) + glCallList(self.gear1) + glPopMatrix() + + glPushMatrix() + glTranslatef( 3.1, -2.0, 0.0 ) + glRotatef( -2.0*self.angle-9.0, 0.0, 0.0, 1.0 ) + glCallList(self.gear2) + glPopMatrix() + + glPushMatrix() + glTranslatef( -3.1, 2.2, -1.8 ) + glRotatef( 90.0, 1.0, 0.0, 0.0 ) + glRotatef( 2.0*self.angle-2.0, 0.0, 0.0, 1.0 ) + glCallList(self.gear3) + glPopMatrix() + + glPopMatrix() + + def resizeGL(self,width,height): + w = width / float(height) + h = 1.0 + + glViewport( 0, 0, width, height ) + glMatrixMode(GL_PROJECTION) + glLoadIdentity() + glFrustum( -w, w, -h, h, 5.0, 60.0 ) + glMatrixMode(GL_MODELVIEW) + glLoadIdentity() + glTranslatef( 0.0, 0.0, -40.0 ) + + def initializeGL(self): + pos=(5.0, 5.0, 10.0, 1.0 ) + ared=(0.8, 0.1, 0.0, 1.0 ) + agreen=(0.0, 0.8, 0.2, 1.0 ) + ablue=(0.2, 0.2, 1.0, 1.0 ) + + glLightfv(GL_LIGHT0,GL_POSITION,pos) + glEnable(GL_CULL_FACE) + glEnable(GL_LIGHTING) + glEnable(GL_LIGHT0) + glEnable(GL_DEPTH_TEST) + + self.gear1=glGenLists(1) + glNewList(self.gear1,GL_COMPILE) + glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,ared) + gear(1.0,4.0,1.0,20,0.7) + glEndList() + + self.gear2=glGenLists(1) + glNewList(self.gear2,GL_COMPILE) + glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,agreen) + gear(0.5,2.0,2.0,10,0.7) + glEndList() + + self.gear3=glGenLists(1) + glNewList(self.gear3,GL_COMPILE) + glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,ablue) + gear(1.3,2.0,0.5,10,0.7) + glEndList() + + glEnable(GL_NORMALIZE) + +############################################################################## +if __name__=='__main__': + QApplication.setColorSpec(QApplication.CustomColor) + app=QApplication(sys.argv) + + if not QGLFormat.hasOpenGL(): + raise 'No Qt OpenGL support.' + + widget=GearWidget() + app.setMainWidget(widget) + widget.show() + app.exec_loop() diff --git a/examples2/menu.py b/examples2/menu.py new file mode 100755 index 0000000..89938c3 --- /dev/null +++ b/examples2/menu.py @@ -0,0 +1,301 @@ +#!/usr/bin/env python + +#**************************************************************************** +#** $Id: menu.py,v 1.1.1.1 2002/06/04 23:04:42 phil Exp $ +#** +#** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved. +#** +#** This file is part of an example program for PyQt. This example +#** program may be used, distributed and modified without limitation. +#** +#*****************************************************************************/ + +import sys, string +from qt import * + +TRUE = 1 +FALSE = 0 + +# XPM +p1_xpm = [ +"16 16 3 1", +" c None", +". c #000000000000", +"X c #FFFFFFFF0000", +" ", +" ", +" .... ", +" .XXXX. ", +" .............. ", +" .XXXXXXXXXXXX. ", +" .XXXXXXXXXXXX. ", +" .XXXXXXXXXXXX. ", +" .XXXXXXXXXXXX. ", +" .XXXXXXXXXXXX. ", +" .XXXXXXXXXXXX. ", +" .XXXXXXXXXXXX. ", +" .XXXXXXXXXXXX. ", +" .XXXXXXXXXXXX. ", +" .............. ", +" " +] + +# XPM +p2_xpm = [ +"16 16 3 1", +" c None", +". c #000000000000", +"X c #FFFFFFFFFFFF", +" ", +" ...... ", +" .XXX.X. ", +" .XXX.XX. ", +" .XXX.XXX. ", +" .XXX..... ", +" .XXXXXXX. ", +" .XXXXXXX. ", +" .XXXXXXX. ", +" .XXXXXXX. ", +" .XXXXXXX. ", +" .XXXXXXX. ", +" .XXXXXXX. ", +" ......... ", +" ", +" " +] + +# XPM +p3_xpm = [ +"16 16 3 1", +" c None", +". c #000000000000", +"X c #FFFFFFFFFFFF", +" ", +" ", +" ......... ", +" ........... ", +" ........ .. ", +" ........... ", +" ........... ", +" ........... ", +" ........... ", +" ...XXXXX... ", +" ...XXXXX... ", +" ...XXXXX... ", +" ...XXXXX... ", +" ......... ", +" ", +" " +] + +p4_xpm = [ +' 16 14 5 1', +'. c #000000', +'# c #848284', +'a c #c6c3c6', +'b c #ffff00', +'c c #ffffff', +'aaaaa.........aa', +'aaaa.cccccccc.aa', +'aaaa.c.....c.aaa', +'aaa.cccccccc.aaa', +'aaa.c.....c....a', +'aa.cccccccc.a.a.', +'a..........a.a..', +'.aaaaaaaaaa.a.a.', +'.............aa.', +'.aaaaaa###aa.a.a', +'.aaaaaabbbaa...a', +'.............a.a', +'a.aaaaaaaaa.a.aa', +'aa...........aaa' +] + +# Auxiliary class to provide fancy menu items with different fonts. +# Used for the "bold" and "underline" menu items in the options menu. + +#class MyMenuItem( QCustomMenuItem ): +# def __init__( self, s=None, f=None ): +# apply( QCustomMenuItem.__init__,( self, s, f ) ) +# string = QString( s ) +# font = QFont( f ) + +# def paint( self, p, TRUE, FALSE, x, y, w, h ) : +# p.setFont ( font ) +# p.drawText( x, y, w, h, Qt.AlignLeft | Qt.AlignVCenter | Qt.ShowPrefix | Qt.DontClip, string ) +# def sizeHint( self ): +# return QFontMetrics( font ).size( Qt.AlignLeft | Qt.AlignVCenter | Qt.ShowPrefix | Qt.DontClip, string ) + + +# +### Implementation of MenuExample class +# + +class MenuExample( QWidget ): + def __init__( self, parent=None, name=None ): + apply( QWidget.__init__,(self, parent, name) ) + self.p1 = QIconSet( QPixmap ( p1_xpm ) ) + self.p2 = QIconSet( QPixmap ( p2_xpm ) ) + self.p3 = QIconSet( QPixmap ( p3_xpm ) ) + self.p4 = QIconSet( QPixmap ( p4_xpm ) ) + #openIcon = QPixmap() + #saveIcon = QPixmap() + #printIcon = QPixmap() + + self.printer = QPopupMenu( self ) + #CHECK_PTR( self.printer ) + self.printer.insertTearOffHandle() + self.printer.insertItem( "&Print to printer", self.printDoc ) + self.printer.insertItem( "Print to &file", self.file ) + self.printer.insertItem( "Print to fa&x", self.fax ) + self.printer.insertSeparator() + self.printer.insertItem( "Printer &Setup", self.printerSetup ) + + self.file = QPopupMenu( self ) + #CHECK_PTR( self.file ); + self.file.insertItem( self.p1, "&Open", self.open, Qt.CTRL+Qt.Key_O ) + self.file.insertItem( self.p2, "&New", self.news, Qt.CTRL+Qt.Key_N ) + self.file.insertItem( self.p3, "&Save", self.save, Qt.CTRL+Qt.Key_S ) + self.file.insertItem( "&Close", self.closeDoc, Qt.CTRL+Qt.Key_W ) + self.file.insertSeparator() + self.file.insertItem( self.p4, "&Print", self.printer, Qt.CTRL+Qt.Key_P ) + self.file.insertSeparator() + self.file.insertItem( "E&xit", qApp, SLOT( "quit()" ), Qt.CTRL+Qt.Key_Q ) + + self.edit = QPopupMenu( self ) + #CHECK_PTR( self.edit ) + undoID = self.edit.insertItem( "&Undo", self.undo ) + redoID = self.edit.insertItem( "&Redo", self.redo ) + self.edit.setItemEnabled( undoID, TRUE ) + self.edit.setItemEnabled( redoID, FALSE ) + + self.options = QPopupMenu( self ) + #CHECK_PTR( self.options ) + self.options.insertTearOffHandle() + self.options.setCaption( 'Options' ) + self.options.insertItem( "&Normal Font", self.normal ) + self.options.insertSeparator() + + self.options.polish() # adjust system settings + self.f = QFont( self.options.font() ) + self.f.setBold( TRUE ) + self.boldID = self.options.insertItem( "&Bold" ) + self.options.setAccel( Qt.CTRL+Qt.Key_B, self.boldID ) + self.options.connectItem( self.boldID, self.bold ) + + self.f = QFont( self.options.font() ) + self.f.setUnderline( TRUE ) + self.underlineID = self.options.insertItem( "&Underline" ) + self.options.setAccel( Qt.CTRL+Qt.Key_U, self.underlineID ) + self.options.connectItem( self.underlineID, self.underline ) + + self.isBold = FALSE + self.isUnderline = FALSE + self.options.setCheckable( TRUE ) + + self.options = QPopupMenu() + #CHECK_PTR( self.options ) + self.options.insertItem( "&Normal Font", self.normal ) + self.options.insertSeparator() + self.boldID = self.options.insertItem( "&Bold", self.bold ) + self.underlineID = self.options.insertItem( "&Underline", self.underline ) + + self.isBold = FALSE + self.isUnderline = FALSE + self.options.setCheckable( TRUE ) + + self.help = QPopupMenu( self ) + #CHECK_PTR( self.help ) + self.help.insertItem( "&About", self.about, Qt.CTRL+Qt.Key_H ) + self.help.insertItem( "About &Qt", self.aboutQt ) + + self.menu = QMenuBar( self ) + #CHECK_PTR( self.menu ); + self.menu.insertItem( "&File", self.file ) + self.menu.insertItem( "&Edit", self.edit ) + self.menu.insertItem( "&Options", self.options ) + self.menu.insertSeparator() + self.menu.insertItem( "&Help", self.help ) + self.menu.setSeparator( QMenuBar.InWindowsStyle ) + + self.label = QLabel( self ) + #CHECK_PTR( self.label ) + self.label.setGeometry( 20, self.rect().center().y()-20, self.width()-40, 40 ) + self.label.setFrameStyle( QFrame.Box | QFrame.Raised ) + self.label.setLineWidth( 1 ) + self.label.setAlignment( Qt.AlignCenter ) + + self.label.setFont( QFont( "times", 12, QFont.Bold ) ) + self.connect( self, PYSIGNAL( "explain" ), self.label.setText ) + #self.connect( self, PYSIGNAL( "explain(const char *)" ), + # self.label, SLOT( "setText(const char *)" ) ) + + self.setMinimumSize( 100, 80 ) + + def open( self ): + self.emit ( PYSIGNAL( "explain" ), ( "File/Open selected", ) ) + + def news( self ): + self.emit ( PYSIGNAL( "explain" ), ( "File/New selected", ) ) + + def save( self ): + self.emit ( PYSIGNAL( "explain" ), ( "File/Save selected", ) ) + + def closeDoc( self ): + self.emit ( PYSIGNAL( "explain" ), ( "File/Close selected", ) ) + + def undo( self ): + self.emit ( PYSIGNAL( "explain" ), ( "Edit/Undo selected", ) ) + + def redo( self ): + self.emit ( PYSIGNAL( "explain" ), ( "Edit/Redo selected", ) ) + + def normal( self ): + self.isBold = FALSE + self.isUnderline = FALSE + self.options.setItemChecked( self.boldID, self.isBold ) + self.options.setItemChecked( self.underlineID, self.isUnderline ) + self.emit(PYSIGNAL("explain"), ("Options/Normal selected",)) + + def bold( self ): + self.isBold = not self.isBold + self.options.setItemChecked( self.boldID, self.isBold ) + self.emit ( PYSIGNAL( "explain" ), ( "Options/Bold selected", ) ) + + def underline( self ): + self.isUnderline = not self.isUnderline + self.options.setItemChecked( self.underlineID, self.isUnderline ) + self.emit(PYSIGNAL("explain"), ("Options/Underline selected",)) + + def about( self ): + QMessageBox.about( self, "Qt Menu Example", + "This example demonstrates simple use of Qt menus.\n" + "You can cut and paste lines from it to your own\n" + "programs." ) + + def aboutQt( self ): + QMessageBox.aboutQt( self, "Qt Menu Example" ) + + def printDoc( self ): + self.emit ( PYSIGNAL( "explain" ), ( "File/Printer/Print selected", ) ) + + def file( self ): + self.emit ( PYSIGNAL( "explain" ), ( "File/Printer/Print To File selected", ) ) + + def fax( self ): + self.emit ( PYSIGNAL( "explain" ), ( "File/Printer/Print To Fax selected", ) ) + + def printerSetup( self ): + self.emit ( PYSIGNAL( "explain" ), ( "File/Printer/Printer Setup selected", ) ) + + def resizeEvent( self, ev ): + self.label.setGeometry( 20, self.rect().center().y()-20, self.width()-40, 40 ) + +a = QApplication( sys.argv ) +m = MenuExample() + +a.setMainWidget( m ) +m.setCaption( 'MenuExample' ) +m.show() +#a.connect( a, SIGNAL('lastWindowClosed()'), a, SLOT('quit()') ) +a.exec_loop() diff --git a/examples2/qt.png b/examples2/qt.png new file mode 100644 index 0000000..ca630a5 Binary files /dev/null and b/examples2/qt.png differ diff --git a/examples2/qtlogo.png b/examples2/qtlogo.png new file mode 100644 index 0000000..25c1ebb Binary files /dev/null and b/examples2/qtlogo.png differ diff --git a/examples2/secret.py b/examples2/secret.py new file mode 100644 index 0000000..7023a0b --- /dev/null +++ b/examples2/secret.py @@ -0,0 +1,65 @@ +# This is part of the dragdrop example. + + +from qt import * + + +def canDecode(e): + return e.provides( "secret/magic" ) + + +def decode(e): + payload = str(e.data( "secret/magic" )) + if ( str(payload) != '' ): + e.accept() + return QString("The secret number is "+str(ord(payload)) ) + + return None + + +class SecretDrag(QStoredDrag): + def __init__(self, secret, parent=None, name=None): + QStoredDrag.__init__(self, 'secret/magic', parent, name) + data = QByteArray(chr(secret)) + self.setEncodedData( data ) + + +# XPM +picture_xpm = [ + "16 16 3 1", + " c None", + ". c #000000", + "X c #FFFF00", + " ..... ", + " ..XXXXX.. ", + " .XXXXXXXXX. ", + " .XXXXXXXXXXX. ", + " .XX..XXX..XX. ", + ".XXXXXXXXXXXXX. ", + ".XX...XXX...XX. ", + ".XXX..XXX..XXX. ", + ".XXXXXXXXXXXXX. ", + ".XXXXXX.XXXXXX. ", + " .XX.XX.XX.XX. ", + " .XXX..X..XXX. ", + " .XXXXXXXXX. ", + " ..XXXXX.. ", + " ..... ", + " " +] + + +class SecretSource(QLabel): + def __init__(self, secret, parent=None, name=None): + QLabel.__init__(self, "Secret", parent, name) + self.setBackgroundColor( Qt.blue.light() ) + self.setFrameStyle( QLabel.Box | QLabel.Sunken ) + self.setMinimumHeight( self.sizeHint().height()*2 ) + self.setAlignment( QLabel.AlignCenter ) + self.mySecret = secret + + def mousePressEvent(self, e): + sd = SecretDrag( self.mySecret, self ) + sd.setPixmap(QPixmap(picture_xpm),QPoint(8,8)) + sd.dragCopy() + self.mySecret = self.mySecret + 1 diff --git a/examples2/semaphore.py b/examples2/semaphore.py new file mode 100755 index 0000000..5a3ab92 --- /dev/null +++ b/examples2/semaphore.py @@ -0,0 +1,203 @@ +#!/usr/bin/env python +# +# A port of the semaphore example from Qt. + + +import sys + +# Check if thread support was enabled. +try: + from qt import QThread +except: + print "Thread support not enabled" + sys.exit(1) + +from qt import * + + +# The semaphore instances. +yellowSem = None +greenSem = None + + +class YellowThread(QThread): + def __init__(self,o): + QThread.__init__(self) + + self.receiver = o + self.stopped = 0 + self.mutex = QMutex() + + def run(self): + global yellowSem, greenSem + + for i in range(20): + yellowSem += 1 + + event = QCustomEvent(12345) + event.setData(QString("Yellow!")) + QThread.postEvent(self.receiver,event) + self.msleep(200); + + greenSem -= 1 + + self.mutex.lock() + if self.stopped: + self.stopped = 0 + self.mutex.unlock() + break + + self.mutex.unlock() + + yellowSem += 1 + + event = QCustomEvent(12346) + event.setData(QString("Yellow!")) + QThread.postEvent(self.receiver,event) + + greenSem -= 1 + + def stop(self): + self.mutex.lock() + self.stopped = 1 + self.mutex.unlock() + + +class GreenThread(QThread): + def __init__(self,o): + QThread.__init__(self) + + self.receiver = o + self.stopped = 0 + self.mutex = QMutex() + + def run(self): + global yellowSem, greenSem + + for i in range(20): + greenSem += 1 + + event = QCustomEvent(12345) + event.setData(QString("Green!")) + QThread.postEvent(self.receiver,event) + self.msleep(200) + + yellowSem -= 1 + + self.mutex.lock() + if self.stopped: + self.stopped = 0 + self.mutex.unlock() + break + + self.mutex.unlock() + + greenSem += 1 + + event = QCustomEvent(12346) + event.setData(QString("Green!")) + QThread.postEvent(self.receiver,event) + self.msleep(10) + + yellowSem -= 1 + + def stop(self): + self.mutex.lock() + self.stopped = 1 + self.mutex.unlock() + + +class SemaphoreExample(QWidget): + def __init__(self): + QWidget.__init__(self) + + self.yellowThread = YellowThread(self) + self.greenThread = GreenThread(self) + + global yellowSem, greenSem + yellowSem = QSemaphore(1) + greenSem = QSemaphore(1) + + self.button = QPushButton("&Ignition!",self) + self.connect(self.button,SIGNAL("clicked()"),self.startExample) + + self.mlineedit = QMultiLineEdit(self) + self.label = QLabel(self) + + vbox = QVBoxLayout(self,5) + vbox.addWidget(self.button) + vbox.addWidget(self.mlineedit) + vbox.addWidget(self.label) + + def __del__(self): + stopYellow = self.yellowThread.running() + stopGreen = self.greenThread.running() + + if stopYellow: + self.yellowThread.stop() + + if self.greenThread.running(): + self.greenThread.stop() + + if stopYellow: + self.yellowThread.wait() + + if stopGreen: + self.greenThread.wait() + + global yellowSem, greenSem + yellowSem = None + greenSem = None + + def startExample(self): + if self.yellowThread.running() or self.greenThread.running(): + QMessageBox.information(self,"Sorry", + "The threads have not completed yet, and must finish before " + "they can be started again.") + + return + + self.mlineedit.clear() + + global yellowSem + + while yellowSem.available() < yellowSem.total(): + yellowSem -= 1 + + yellowSem += 1 + + self.yellowThread.start() + self.greenThread.start() + + def customEvent(self,event): + if event.type() == 12345: + s = event.data() + + self.mlineedit.append(s) + + if s.latin1() == "Green!": + self.label.setBackgroundColor(Qt.green) + else: + self.label.setBackgroundColor(Qt.yellow) + + self.label.setText(s) + + del s + elif event.type() == 12346: + s = event.data() + + QMessageBox.information(self,s.latin1() + " - Finished", + "The thread creating the \"" + s.latin1() + + "\" events has finished.") + + del s + else: + print "Unknown custom event type:", event.type() + + +app = QApplication(sys.argv) +se = SemaphoreExample() +app.setMainWidget(se) +se.show() + +sys.exit(app.exec_loop()) diff --git a/examples2/splitter.py b/examples2/splitter.py new file mode 100755 index 0000000..1c2fef7 --- /dev/null +++ b/examples2/splitter.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python + +import sys +from qt import * + +class Test(QWidget): + def __init__(self, parent=None, name='Test', f=0): + QWidget.__init__(self, parent, name, f) + + def paintEvent(self, e): + p = QPainter(self) + p.setClipRect(e.rect()) + d = 1000 + x1 = 0 + x2 = self.width() - 1 + y1 = 0 + y2 = self.height() - 1 + + x = (x1+x2)/2 + p.drawLine(x, y1, x+d, y1+d) + p.drawLine(x, y1, x-d, y1+d) + p.drawLine(x, y2, x+d, y2-d) + p.drawLine(x, y2, x-d, y2-d) + + y = (y1+y2)/2 + p.drawLine(x1, y, x1+d, y+d) + p.drawLine(x1, y, x1+d, y-d) + p.drawLine(x2, y, x2-d, y+d) + p.drawLine(x2, y, x2-d, y-d) + + +if __name__=="__main__": + a = QApplication(sys.argv) + + s1 = QSplitter(Qt.Vertical, None, "main") + s2 = QSplitter(Qt.Horizontal, s1, "top") + + t1 = Test(s2) + t1.setBackgroundColor(Qt.blue.light(180)) + t1.setMinimumSize(50,0) + + t2 = Test(s2) + t2.setBackgroundColor(Qt.green.light(180)) + s2.setResizeMode(t2, QSplitter.KeepSize) + s2.moveToFirst(t2) + + s3 = QSplitter(Qt.Horizontal, s1, "bottom") + + t3 = Test(s3) + t3.setBackgroundColor(Qt.red) + t4 = Test(s3) + t4.setBackgroundColor(Qt.white) + + t5 = Test(s3) + t5.setMaximumHeight(250) + t5.setMinimumSize(80,50) + t5.setBackgroundColor(Qt.yellow) + + s1.setOpaqueResize(1) + s2.setOpaqueResize(1) + s3.setOpaqueResize(1) + + a.setMainWidget(s1) + s1.show() + a.exec_loop() diff --git a/examples2/table.py b/examples2/table.py new file mode 100755 index 0000000..58fd04b --- /dev/null +++ b/examples2/table.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python + +import sys +from qt import * + +class Table(QTableView): + def __init__(self, numRows, numCols, parent=None, name=''): + QTableView.__init__(self, parent, name) + self.curRow = self.curCol = 0 + self.setFocusPolicy(QWidget.StrongFocus) + self.setBackgroundMode(QWidget.PaletteBase) + self.setNumCols(numCols) + self.setNumRows(numRows) + self.setCellWidth(100) + self.setCellHeight(30) + self.setTableFlags(Tbl_vScrollBar | + Tbl_hScrollBar | + Tbl_clipCellPainting) + self.resize(400,200) + self.contents = [''] * (numRows * numCols) + + def cellContent(self, row, col): + return self.contents[self.indexOf(row,col)] + + def setCellContent(self, row, col, c): + self.contents[self.indexOf(row,col)] = c + self.updateCell(row, col) + + def paintCell(self, p, row, col): + w = self.cellWidth(col) + h = self.cellHeight(row) + x2 = w-1 + y2 = h-1 + + p.drawLine(x2,0,x2,y2) + p.drawLine(0,y2,x2,y2) + + if row == self.curRow and col == self.curCol: + if self.hasFocus(): + p.drawRect(0, 0, x2, y2) + else: + p.setPen(Qt.DotLine) + p.drawRect(0, 0, x2, y2) + p.setPen(Qt.SolidLine) + + p.drawText(0,0,w,h,Qt.AlignCenter,self.contents[self.indexOf(row,col)]) + + def mousePressEvent(self, me): + oldRow = self.curRow + oldCol = self.curCol + clickedPos = me.pos() + self.curRow = self.findRow(clickedPos.y()) + self.curCol = self.findCol(clickedPos.x()) + if self.curRow != oldRow or \ + self.curCol != oldCol: + self.updateCell(oldRow, oldCol) + self.updateCell(self.curRow, self.curCol) + + def keyPressEvent(self, ke): + oldRow = self.curRow + oldCol = self.curCol + edge = 0 + key = ke.key() + if key == Key_Left: + if self.curCol > 0: + self.curCol = self.curCol - 1 + edge = self.leftCell() + if self.curCol < edge: + self.setLeftCell(edge-1) + elif key == Key_Right: + if self.curCol < self.numCols()-1: + self.curCol = self.curCol + 1 + edge = self.lastColVisible() + if self.curCol >= edge: + self.setLeftCell(self.leftCell()+1) + elif key == Key_Up: + if self.curRow > 0: + self.curRow = self.curRow - 1 + edge = self.topCell() + if self.curRow < edge: + self.setTopCell(edge-1) + elif key == Key_Down: + if self.curRow < self.numRows()-1: + self.curRow = self.curRow + 1 + edge = self.lastRowVisible() + if self.curRow >= edge: + self.setTopCell(self.topCell()+1) + else: + ke.ignore() + return + + if self.curRow != oldRow or \ + self.curCol != oldCol: + self.updateCell(oldRow, oldCol) + self.updateCell(self.curRow, self.curCol) + + def focusInEvnet(self, fie): + self.updateCell(self.curRow, self.curCol) + + def focusOutEvent(self, foe): + self.updateCell(self.curRow, self.curCol) + + def indexOf(self, row, col): + return (row * self.numCols()) + col + +numRows = 20 +numCols = 20 +a = QApplication(sys.argv) +v = Table(numRows, numCols) +for i in range(numRows): + for j in range(numCols): + v.setCellContent(i,j,'%d %c' % (j, 65+(i%26))) +a.setMainWidget(v) +v.show() +a.exec_loop() diff --git a/examples2/themes.py b/examples2/themes.py new file mode 100755 index 0000000..b3dae55 --- /dev/null +++ b/examples2/themes.py @@ -0,0 +1,2484 @@ +#!/usr/bin/env python + +# This is a port to PyQt of the Qt v2.x example program. It does not (yet) +# include the implementation of all of the example widgets. + + +FALSE=0 +TRUE=1 + +# Python modules + +import os, sys + +# include files for QT + +from qt import * + + +class ButtonsGroups(QVBox): + + def __init__(self, parent=None, name=None): + QVBox.__init__(self, parent, name) + + # Create widgets which allow easy layouting + box1=QHBox(self) + box2=QHBox(self) + + # first group + + # Create an exclusive button group + grp1=QButtonGroup( 1 + , QGroupBox.Horizontal + , "Button Group 1 (exclusive)" + , box1 + ) + grp1.setExclusive(TRUE) + + # insert 3 radiobuttons + rb11=QRadioButton("&Radiobutton 1", grp1) + rb11.setChecked(TRUE) + QRadioButton("R&adiobutton 2", grp1) + QRadioButton("Ra&diobutton 3", grp1) + + # second group + + # Create a non-exclusive buttongroup + grp2=QButtonGroup( 1 + , QGroupBox.Horizontal + , "Button Group 2 (non-exclusive)" + , box1 + ) + grp2.setExclusive(FALSE) + + # insert 3 checkboxes + QCheckBox("&Checkbox 1", grp2) + cb12=QCheckBox("C&heckbox 2", grp2) + cb12.setChecked(TRUE) + cb13=QCheckBox("Triple &State Button", grp2) + cb13.setTristate(TRUE) + cb13.setChecked(TRUE) + + # third group + + # create a buttongroup which is exclusive for radiobuttons and + # non-exclusive for all other buttons + grp3=QButtonGroup( 1 + , QGroupBox.Horizontal + , "Button Group 3 (Radiobutton-exclusive)" + , box2 + ) + grp3.setRadioButtonExclusive(TRUE) + + # insert three radiobuttons + self.rb21=QRadioButton("Rad&iobutton 1", grp3) + self.rb22=QRadioButton("Radi&obutton 2", grp3) + self.rb23=QRadioButton("Radio&button 3", grp3) + self.rb23.setChecked(TRUE) + + # insert a checkbox... + self.state=QCheckBox("E&nable Radiobuttons", grp3) + self.state.setChecked(TRUE) + # ...and connect its SIGNAL clicked() with the SLOT slotChangeGrp3State() + self.connect(self.state, SIGNAL('clicked()'),self.slotChangeGrp3State) + + # fourth group + + # create a groupbox which lays out its childs in a column + grp4=QGroupBox( 1 + , QGroupBox.Horizontal + , "Groupbox with normal buttons" + , box2 + ) + + # insert two pushbuttons... + QPushButton("&Push Button", grp4) + tb=QPushButton("&Toggle Button", grp4) + + # ...and make the second one a toggle button + tb.setToggleButton(TRUE) + tb.setOn(TRUE) + + def slotChangeGrp3State(self): + self.rb21.setEnabled(self.state.isChecked()) + self.rb22.setEnabled(self.state.isChecked()) + self.rb23.setEnabled(self.state.isChecked()) + + +class LineEdits(QVBox): + + def __init__(self, parent=None, name=None): + QVBox.__init__(self, parent, name) + + self.setMargin(10) + + # Widget for layouting + row1=QHBox(self) + row1.setMargin(5) + + # Create a label + QLabel("Echo Mode: ", row1) + + # Create a Combobox with three items... + self.combo1=QComboBox(FALSE, row1) + self.combo1.insertItem("Normal", -1) + self.combo1.insertItem("Password", -1) + self.combo1.insertItem("No Echo", -1) + # ...and connect the activated() SIGNAL with the slotEchoChanged SLOT to be + # able to react when an item is selected + self.connect(self.combo1, SIGNAL('activated(int)'), self.slotEchoChanged) + + # insert the first LineEdit + self.lined1=QLineEdit(self) + + # another widget which is used for layouting + row2=QHBox(self) + row2.setMargin(5) + + # and the second label + QLabel("Validator: ", row2) + + # A second Combobox with again three items... + self.combo2=QComboBox(FALSE, row2) + self.combo2.insertItem("No Validator", -1) + self.combo2.insertItem("Integer Validator", -1) + self.combo2.insertItem("Double Validator", -1) + # ...and again the activated() SIGNAL gets connected with a SLOT + self.connect(self.combo2, SIGNAL('activated(int)'), self.slotValidatorChanged) + + # and the second LineEdit + self.lined2=QLineEdit(self) + + # yet another widget which is used for layouting + row3=QHBox(self) + row3.setMargin(5) + + # we need a label for this too + QLabel("Alignment: ", row3) + + # A combo box for setting alignment + self.combo3=QComboBox(FALSE, row3) + self.combo3.insertItem("Left", -1) + self.combo3.insertItem("Centered", -1) + self.combo3.insertItem("Right", -1) + # ...and again the activated() SIGNAL gets connected with a SLOT + self.connect(self.combo3, SIGNAL('activated(int)'), self.slotAlignmentChanged) + + # and the lineedit + self.lined3=QLineEdit(self) + + # give the first LineEdit the focus at the beginning + self.lined1.setFocus() + + def slotEchoChanged(self, i): + if i == 0: + self.lined1.setEchoMode(QLineEdit.EchoMode.Normal) + elif i == 1: + self.lined1.setEchoMode(QLineEdit.EchoMode.Password) + elif i == 2: + self.lined1.setEchoMode(QLineEdit.EchoMode.NoEcho) + + self.lined1.setFocus() + + def slotValidatorChanged(self, i): + if i == 0: + self.validator=None + self.lined2.setValidator(self.validator) + elif i == 1: + self.validator=QIntValidator(self.lined2) + self.lined2.setValidator(self.validator) + elif i == 2: + self.validator=QDoubleValidator(-999.0, 999.0, 2, self.lined2) + self.lined2.setValidator(self.validator) + + self.lined2.setText("") + self.lined2.setFocus() + + def slotAlignmentChanged(self, i): + if i == 0: + self.lined3.setAlignment(Qt.AlignLeft) + elif i == 1: + self.lined3.setAlignment(Qt.AlignCenter) + elif i == 2: + self.lined3.setAlignment(Qt.AlignRight) + + self.lined3.setFocus() + + +class ProgressBar(QVBox): + + def __init__(self, parent=None, name=None): + QVBox.__init__(self, parent, name) + + self.timer=QTimer() + + self.setMargin(10) + + # Create a radiobutton-exclusive Buttongroup which aligns its childs in two + # columns + bg=QButtonGroup(2, QGroupBox.Horizontal, self) + bg.setRadioButtonExclusive(TRUE) + + # insert three radiobuttons which the user can use to set the speed of the + # progress and two pushbuttons to start/pause/continue and reset the + # progress + self.slow=QRadioButton("&Slow", bg) + self.start=QPushButton("S&tart", bg) + self.normal=QRadioButton("&Normal", bg) + self.reset=QPushButton("&Reset", bg) + self.fast=QRadioButton("&Fast", bg) + + # Create the progressbar + self.progress=QProgressBar(100, self) + + # connect the clicked() SIGNALs of the pushbuttons to SLOTs + self.connect(self.start, SIGNAL('clicked()'), self.slotStart) + self.connect(self.reset, SIGNAL('clicked()'), self.slotReset) + + # connect the timeout() SIGNAL of the progress-timer to a SLOT + self.connect(self.timer, SIGNAL('timeout()'), self.slotTimeout) + + # Let's start with normal speed... + self.normal.setChecked(TRUE) + + def slotStart(self): + # If the progress bar is at the beginning... + if self.progress.progress() == -1: + # ...set according to the checked speed-radionbutton the number of steps + # which are needed to complete the process + if self.slow.isChecked(): + self.progress.setTotalSteps(10000) + elif self.normal.isChecked(): + self.progress.setTotalSteps(1000) + else: + self.progress.setTotalSteps(50) + + # disable the speed-radiobuttons + self.slow.setEnabled(FALSE) + self.normal.setEnabled(FALSE) + self.fast.setEnabled(FALSE) + + # If the progress is not running... + if not self.timer.isActive(): + # ...start the time (and so the progress) with an interval fo 1ms... + self.timer.start(1) + # ...and rename the start/pause/continue button to Pause + self.start.setText("&Pause") + else: + # ...stop the timer (and so the progress)... + self.timer.stop() + # ...and rename the start/pause/continue button to Continue + self.start.setText("&Continue") + + def slotReset(self): + # stop the timer and progress + self.timer.stop() + + # rename the start/pause/continue button to Start... + self.start.setText("&Start") + # ...and enable this button + self.start.setEnabled(TRUE) + + # enable the speed-radiobuttons + self.slow.setEnabled(TRUE) + self.normal.setEnabled(TRUE) + self.fast.setEnabled(TRUE) + + # reset the progressbar + self.progress.reset() + + def slotTimeout(self): + p = self.progress.progress() + + # If the progress is complete... + if p == self.progress.totalSteps(): + # ...rename the start/pause/continue button to Start... + self.start.setText("&Start") + # ...and disable it... + self.start.setEnabled(FALSE) + # ...and return + return + + # If the progress is not complete increase it + self.progress.setProgress(p+1) + + +class ListBoxCombo(QVBox): + + def __init__(self, parent=None, name=None): + QVBox.__init__(self, parent, name) + + self.setMargin(5) + + row1=QHBox(self) + row1.setMargin(5) + + # Create a multi-selection ListBox... + self.lb1=QListBox(row1) + self.lb1.setMultiSelection(TRUE) + + # ...insert a pixmap item... + self.lb1.insertItem(QPixmap("qtlogo.png")) + # ...and 100 text items + for i in range(100): + str=QString("Listbox Item %1").arg(i) + self.lb1.insertItem(str) + + # Create a pushbutton... + self.arrow1=QPushButton(" -> ", row1) + # ...and connect the clicked SIGNAL with the SLOT slotLeft2Right + self.connect(self.arrow1, SIGNAL('clicked()'), self.slotLeft2Right) + + # create an empty single-selection ListBox + self.lb2=QListBox(row1) + + def slotLeft2Right(self): + # Go through all items of the first ListBox + for i in range(self.lb1.count()): + item=self.lb1.item(i) + # if the item is selected... + if item.selected(): + # ...and it is a text item... + if not item.text().isEmpty(): + # ...insert an item with the same text into the second ListBox + self.lb2.insertItem(QListBoxText(item.text())) + # ...and if it is a pixmap item... + elif item.pixmap(): + # ...insert an item with the same pixmap into the second ListBox + self.lb2.insertItem(QListBoxPixmap(item.pixmap())) + + +class NorwegianWoodStyle(QMotifStyle): + + def __init__(self): + QMotifStyle.__init__(self) + + def polish(self,o): + if isinstance(o,QApplication): + self.polish_qapplication(o) + elif isinstance(o,QWidget): + self.polish_qwidget(o) + else: + QMotifStyle.polish(self,o) + + def unPolish(self,o): + if isinstance(o,QApplication): + self.unPolish_qapplication(o) + elif isinstance(o,QWidget): + self.unPolish_qwidget(o) + else: + QMotifStyle.unPolish(self,o) + + def polish_qapplication(self,app): + global button_xpm, polish_xpm + + self.oldPalette=app.palette() + + # we simply create a nice QColorGroup with a couple of fancy wood pixmaps + # here and apply it to all widgets + + img=QImage(button_xpm) + orig=QImage(img) + orig.detach() + button=QPixmap() + button.convertFromImage(img) + + background=QPixmap(polish_xpm) + + for i in range(img.numColors()): + rgb=img.color(i) + c=QColor(rgb) + (r, g, b)=c.dark().rgb() + img.setColor(i,qRgb(r, g, b)) + mid=QPixmap() + mid.convertFromImage(img) + + img=QImage(orig) + for i in range(img.numColors()): + rgb=img.color(i) + c=QColor(rgb) + (r, g, b)=c.light().rgb() + img.setColor(i,qRgb(r, g, b)) + light=QPixmap() + light.convertFromImage(img) + + img=QImage(orig) + for i in range(img.numColors()): + rgb=img.color(i) + c=QColor(rgb) + (r, g, b)=c.dark().rgb() + img.setColor(i,qRgb(r, g, b)) + dark=QPixmap() + dark.convertFromImage(img) + + op=QPalette(QColor(212,140,95)) + + nor=QColorGroup(QBrush(op.normal().foreground()), + QBrush(op.normal().button(), button), + QBrush(op.normal().light(), light), + QBrush(op.normal().dark(), dark), + QBrush(op.normal().mid(), mid), + QBrush(op.normal().text()), + QBrush(Qt.white), + QBrush(QColor(236,182,120)), + QBrush(op.normal().background(), background)) + disabled=QColorGroup(QBrush(op.disabled().foreground()), + QBrush(op.disabled().button(), button), + QBrush(op.disabled().light(), light), + QBrush(op.disabled().dark()), + QBrush(op.disabled().mid(), mid), + QBrush(op.disabled().text()), + QBrush(Qt.white), + QBrush(QColor(236,182,120)), + QBrush(op.disabled().background(), background)) + active=QColorGroup(QBrush(op.active().foreground()), + QBrush(op.active().button(), button), + QBrush(op.active().light(), light), + QBrush(op.active().dark()), + QBrush(op.active().mid(), mid), + QBrush(op.active().text()), + QBrush(Qt.white), + QBrush(QColor(236,182,120)), + QBrush(op.active().background(), background)) + + app.setPalette(QPalette(nor, disabled, active), TRUE) + + def unPolish_qapplication(self,app): + app.setPalette(self.oldPalette, TRUE) + + def polish_qwidget(self,w): + # the polish function will set some widgets to transparent mode, to get the + # full benefit from the nice pixmaps in the color group. + + if w.inherits("QTipLabel"): + return + + if w.inherits("QLCDNumber"): + return + + if not w.isTopLevel(): + if w.inherits("QLabel") \ + or w.inherits("QButton") \ + or w.inherits("QComboBox") \ + or w.inherits("QGroupBox") \ + or w.inherits("QSlider") \ + or w.inherits("QTabWidget") \ + or w.inherits("QTabBar"): + w.setAutoMask(TRUE) + + def unPolish_qwidget(self,w): + if w.inherits("QTipLabel"): + return + + if w.inherits("QLCDNumber"): + return + + if not w.isTopLevel(): + if w.inherits("QLabel") \ + or w.inherits("QButton") \ + or w.inherits("QComboBox") \ + or w.inherits("QGroupBox") \ + or w.inherits("QSlider") \ + or w.inherits("QTabWidget") \ + or w.inherits("QTabBar"): + w.setAutoMask(FALSE) + + def drawroundrect(self, p, x, y, w, h, d): + rx=(200*d)/w + ry=(200*d)/h + p.drawRoundRect(x, y, w, h, rx, ry) + + def drawButton(self, p, x, y, w, h, g, sunken=FALSE, fill=None): + qDrawShadePanel(p, x, y, w, h, g, sunken, 5) + + oldBrush=p.brush() + oldPen=p.pen() + p.setPen(Qt.NoPen) + if fill != None: + newBrush=fill + else: + if sunken: + newBrush=g.brush(QColorGroup.Mid) + else: + newBrush=g.brush(QColorGroup.Button) + self.drawroundrect(p, x+3, y+3, w-6, h-6, 5) + p.setBrush(oldBrush) + p.setPen(g.foreground()) + self.drawroundrect(p, x, y, w, h, 8) + p.setPen(oldPen) + + def drawBevelButton(self, p, x, y, w, h, g, sunken=FALSE, fill=None): + QMotifStyle.drawBevelButton(self, p, x, y, w, h, g, sunken, fill) + + def drawPushButton(self, btn, p): + g = btn.colorGroup() + + (x1, y1, x2, y2)=btn.rect().coords() + + p.setPen(g.foreground()) + p.setBrush(QBrush(g.button(),Qt.NoBrush)) + + if btn.isDown(): + fill=g.brush(QColorGroup.Mid) + elif btn.isOn(): + fill=QBrush(g.mid(),Qt.Dense4Pattern) + else: + fill=g.brush(QColorGroup.Button) + + if btn.isDefault(): + a=QPointArray([x1, y1, x2, y1, x2, y2, x1, y2, x1, y1+1, + x2-1, y1+1, x2-1, y2-1, x1+1, y2-1, x1+1, y1+1]) + p.setPen(Qt.black) + p.drawPolyline(a) + x1=x1+2 + y1=y1+2 + x2=x2-2 + y2=y2-2 + + if btn.isOn() or btn.isDown(): + sunken=TRUE + else: + sunken=FALSE + + self.drawButton(p, x1, y1, x2-x1+1, y2-y1+1, g, sunken, fill) + + if btn.isMenuButton(): + dx=(y1-y2-4)/3 + self.drawArrow(p, Qt.DownArrow, FALSE, + x2-dx, dx, y1, y2-y1, + g, btn.isEnabled()) + + if p.brush().style != Qt.NoBrush: + p.setBrush(Qt.NoBrush) + + def drawPushButtonLabel(self, btn, p): + r=btn.rect() + (x, y, w, h)=r.rect() + + (x1, y1, x2, y2)=btn.rect().coords() + dx=0 + dy=0 + if btn.isMenuButton(): + dx=(y2-y1)/3 + if dx or dy: + p.translate(dx,dy) + + x=x+2 + y=y+2 + w=w-4 + h=h-4 + g=btn.colorGroup() + if btn.isDown() or btn.isOn(): + pencolour=btn.colorGroup().brightText() + else: + pencolour=btn.colorGroup().buttonText() + self.drawItem(p, x, y, w, h, + Qt.AlignCenter|Qt.ShowPrefix, + g, btn.isEnabled(), + btn.pixmap(), btn.text(), -1, + pencolour) + + if dx or dy: + p.translate(-dx,-dy) + + def buttonRect(self, x, y, w, h): + return QRect(x+3, y+2, w-6, h-4) + + def drawButtonMask(self, p, x, y, w, h): + self.drawroundrect(p, x, y, w, h, 8) + + +class MetalStyle(QWindowsStyle): + + def __init__(self): + QWindowsStyle.__init__(self) + + def polish(self,o): + if isinstance(o,QApplication): + self.polish_qapplication(o) + elif isinstance(o,QWidget): + self.polish_qwidget(o) + else: + QWindowsStyle.polish(self,o) + + def unPolish(self,o): + if isinstance(o,QApplication): + self.unPolish_qapplication(o) + elif isinstance(o,QWidget): + self.unPolish_qwidget(o) + else: + QWindowsStyle.unPolish(self,o) + + def polish_qapplication(self,app): + global stone1_xpm, stonebright_xpm + + self.oldPalette=app.palette() + + # we simply create a nice QColorGroup with a couple of fancy pixmaps here + # and apply it to all widgets + + f=QFont("times", app.font().pointSize()) + f.setBold(TRUE) + f.setItalic(TRUE) + app.setFont(f, TRUE, "QMenuBar") + app.setFont(f, TRUE, "QPopupMenu") + + button=QPixmap(stone1_xpm) + background=QPixmap(stonebright_xpm) + dark=QPixmap(1,1) + dark.fill(Qt.red.dark()) + mid=QPixmap(stone1_xpm) + light=QPixmap(stone1_xpm) + op=app.palette() + + backCol=QColor(227,227,227) + + nor=QColorGroup(QBrush(op.normal().foreground()), + QBrush(op.normal().button(), button), + QBrush(op.normal().light(), light), + QBrush(op.normal().dark(), dark), + QBrush(op.normal().mid(), mid), + QBrush(op.normal().text()), + QBrush(Qt.white), + QBrush(op.normal().base()), + QBrush(backCol, background)) + nor.setColor(QColorGroup.ButtonText, Qt.white) + nor.setColor(QColorGroup.Shadow, Qt.black) + disabled=QColorGroup(QBrush(op.disabled().foreground()), + QBrush(op.disabled().button(), button), + QBrush(op.disabled().light(), light), + QBrush(op.disabled().dark()), + QBrush(op.disabled().mid(), mid), + QBrush(op.disabled().text()), + QBrush(Qt.white), + QBrush(op.disabled().base()), + QBrush(backCol, background)) + active=QColorGroup(QBrush(op.active().foreground()), + QBrush(op.active().button(), button), + QBrush(op.active().light(), light), + QBrush(op.active().dark()), + QBrush(op.active().mid(), mid), + QBrush(op.active().text()), + QBrush(Qt.white), + QBrush(op.active().base()), + QBrush(backCol, background)) + active.setColor(QColorGroup.ButtonText, Qt.white) + + newPalette=QPalette(nor, disabled, active) + app.setPalette(newPalette, TRUE) + + def unPolish_qapplication(self,app): + app.setPalette(self.oldPalette, TRUE) + app.setFont(app.font(), TRUE) + + def polish_qwidget(self,w): + # the polish function will set some widgets to transparent mode, to get the + # full benefit from the nice pixmaps in the color group. + + if w.inherits("QPushButton"): + w.setBackgroundMode(QWidget.NoBackground) + + def unPolish_qwidget(self,w): + if w.inherits("QPushButton"): + w.setBackgroundMode(QWidget.PaletteButton) + + def drawButton(self, p, x, y, w, h, g, sunken=FALSE, fill=None): + global img1, metal_xpm + + if not img1: + img1=QImage(metal_xpm) + + scaledImage=img1.smoothScale(w, h) + pix=QPixmap() + pix.convertFromImage(scaledImage) + p.drawPixmap(x, y, pix) + g2=QColorGroup() + g2.setColor(QColorGroup.Light, Qt.white) + g2.setColor(QColorGroup.Dark, Qt.black) + + if sunken: + linewidth=2 + else: + linewidth=1 + + qDrawShadePanel(p, x, y, w, h, g2, sunken, linewidth) + + def drawBevelButton(self, p, x, y, w, h, g, sunken=FALSE, fill=None): + self.drawButton(p, x, y, w, h, g, sunken, fill) + + def drawPushButton(self, btn, p): + g = btn.colorGroup() + + (x1, y1, x2, y2)=btn.rect().coords() + + p.setPen(g.foreground()) + p.setBrush(QBrush(g.button(),Qt.NoBrush)) + + if btn.isDown(): + fill=g.brush(QColorGroup.Mid) + elif btn.isOn(): + fill=QBrush(g.mid(),Qt.Dense4Pattern) + else: + fill=g.brush(QColorGroup.Button) + + if btn.isDefault(): + a=QPointArray([x1, y1, x2, y1, x2, y2, x1, y2, x1, y1+1, + x2-1, y1+1, x2-1, y2-1, x1+1, y2-1, x1+1, y1+1]) + p.setPen(Qt.black) + p.drawPolyline(a) + x1=x1+2 + y1=y1+2 + x2=x2-2 + y2=y2-2 + + if btn.isOn() or btn.isDown(): + sunken=TRUE + else: + sunken=FALSE + + self.drawButton(p, x1, y1, x2-x1+1, y2-y1+1, g, sunken, fill) + + if btn.isMenuButton(): + dx=(y1-y2-4)/3 + self.drawArrow(p, Qt.DownArrow, FALSE, + x2-dx, dx, y1, y2-y1, + g, btn.isEnabled()) + + if p.brush().style != Qt.NoBrush: + p.setBrush(Qt.NoBrush) + + def drawPushButtonLabel(self, btn, p): + r=btn.rect() + (x, y, w, h)=r.rect() + + (x1, y1, x2, y2)=btn.rect().coords() + dx=0 + dy=0 + if btn.isMenuButton(): + dx=(y2-y1)/3 + if btn.isOn() or btn.isDown(): + dx=dx-1 + dy=dy-1 + pencolour=btn.colorGroup().brightText() + else: + pencolour=btn.colorGroup().buttonText() + if dx or dy: + p.translate(dx,dy) + + x=x+2 + y=y+2 + w=w-4 + h=h-4 + g=btn.colorGroup() + self.drawItem(p, x, y, w, h, + Qt.AlignCenter|Qt.ShowPrefix, + g, btn.isEnabled(), + btn.pixmap(), btn.text(), -1, + pencolour) + + if dx or dy: + p.translate(-dx,-dy) + + def drawPanel(self, p, x, y, w, h, g, sunken, lineWidth, fill): + QStyle.drawPanel(self, p, x, y, w, h, g, sunken, lineWidth, fill) + + +class Themes(QMainWindow): + + def __init__(self, parent=None, name=None, f=Qt.WType_TopLevel): + QMainWindow.__init__(self, parent, name, f) + + self.appFont=QApplication.font() + self.tabwidget=QTabWidget(self) + + self.buttonsgroups=ButtonsGroups(self.tabwidget) + self.tabwidget.addTab(self.buttonsgroups,"Buttons/Groups") + self.hbox=QHBox(self.tabwidget) + self.hbox.setMargin(5) + self.linedits=LineEdits(self.hbox) + self.progressbar=ProgressBar(self.hbox) + self.tabwidget.addTab(self.hbox, "Lineedits/Progressbar") + self.listboxcombo=ListBoxCombo(self.tabwidget) + self.tabwidget.addTab(self.listboxcombo, "Listboxes/Comboboxes") + + self.setCentralWidget(self.tabwidget) + + self.style=QPopupMenu(self) + self.style.setCheckable(TRUE) + self.menuBar().insertItem("&Style", self.style) + + self.sMetal=self.style.insertItem("&Metal", self.styleMetal) + self.sWood=self.style.insertItem("&Norwegian Wood", self.styleWood) + self.sPlatinum=self.style.insertItem("&Platinum", self.stylePlatinum) + self.sWindows=self.style.insertItem("&Windows", self.styleWindows) + self.sCDE=self.style.insertItem("&CDE", self.styleCDE) + self.sMotif=self.style.insertItem("M&otif", self.styleMotif) + self.sMotifPlus=self.style.insertItem("Motif P&lus", self.styleMotifPlus) + self.style.insertSeparator() + self.style.insertItem("&Quit", qApp.quit, Qt.CTRL | Qt.Key_Q) + + self.help=QPopupMenu(self) + self.menuBar().insertSeparator() + self.menuBar().insertItem("&Help", self.help) + self.help.insertItem("&About", self.about, Qt.Key_F1) + self.help.insertItem("About &Qt", self.aboutQt) + + self.style=NorwegianWoodStyle() + qApp.setStyle(self.style) + self.menuBar().setItemChecked(self.sWood, TRUE) + + # In the following we cannot simply set the new style as we can in C++. We + # need to keep the old style alive (if it is a Python one) so that it's + # unPolish methods can still be called when the new style is set. + + def styleWood(self): + newstyle=NorwegianWoodStyle() + qApp.setStyle(newstyle) + self.style=newstyle + qApp.setFont(self.appFont, TRUE) + self.selectStyleMenu(self.sWood) + + def styleMetal(self): + newstyle=MetalStyle() + qApp.setStyle(newstyle) + self.style=newstyle + qApp.setFont(self.appFont, TRUE) + self.selectStyleMenu(self.sMetal) + + def stylePlatinum(self): + newstyle=QPlatinumStyle() + qApp.setStyle(newstyle) + self.style=newstyle + p=QPalette(QColor(239, 239, 239)) + qApp.setPalette(p, TRUE) + qApp.setFont(self.appFont, TRUE) + self.selectStyleMenu(self.sPlatinum) + + def styleWindows(self): + newstyle=QWindowsStyle() + qApp.setStyle(newstyle) + self.style=newstyle + qApp.setFont(self.appFont, TRUE) + self.selectStyleMenu(self.sWindows) + + def styleCDE(self): + newstyle=QCDEStyle(TRUE) + qApp.setStyle(newstyle) + self.style=newstyle + self.selectStyleMenu(self.sCDE) + + p=QPalette(QColor(75, 123, 130)) + p.setColor(QPalette.Active, QColorGroup.Base, QColor(55, 77, 78)); + p.setColor(QPalette.Inactive, QColorGroup.Base, QColor(55, 77, 78)); + p.setColor(QPalette.Disabled, QColorGroup.Base, QColor(55, 77, 78)); + p.setColor(QPalette.Active, QColorGroup.Highlight, Qt.white); + p.setColor(QPalette.Active, QColorGroup.HighlightedText, QColor(55, 77, 78)); + p.setColor(QPalette.Inactive, QColorGroup.Highlight, Qt.white); + p.setColor(QPalette.Inactive, QColorGroup.HighlightedText, QColor(55, 77, 78)); + p.setColor(QPalette.Disabled, QColorGroup.Highlight, Qt.white); + p.setColor(QPalette.Disabled, QColorGroup.HighlightedText, QColor(55, 77, 78)); + p.setColor(QPalette.Active, QColorGroup.Foreground, Qt.white); + p.setColor(QPalette.Active, QColorGroup.Text, Qt.white); + p.setColor(QPalette.Active, QColorGroup.ButtonText, Qt.white); + p.setColor(QPalette.Inactive, QColorGroup.Foreground, Qt.white); + p.setColor(QPalette.Inactive, QColorGroup.Text, Qt.white); + p.setColor(QPalette.Inactive, QColorGroup.ButtonText, Qt.white); + p.setColor(QPalette.Disabled, QColorGroup.Foreground, Qt.lightGray); + p.setColor(QPalette.Disabled, QColorGroup.Text, Qt.lightGray); + p.setColor(QPalette.Disabled, QColorGroup.ButtonText, Qt.lightGray); + qApp.setPalette(p, TRUE) + qApp.setFont(QFont("times", self.appFont.pointSize()), TRUE) + + def styleMotif(self): + newstyle=QMotifStyle(TRUE) + qApp.setStyle(newstyle) + self.style=newstyle + p=QPalette(QColor(192, 192, 192)) + qApp.setPalette(p, TRUE) + qApp.setFont(self.appFont, TRUE) + self.selectStyleMenu(self.sMotif) + + def styleMotifPlus(self): + newstyle=QMotifPlusStyle(TRUE) + qApp.setStyle(newstyle) + self.style=newstyle + p=QPalette(QColor(192, 192, 192)) + qApp.setPalette(p, TRUE) + qApp.setFont(self.appFont, TRUE) + self.selectStyleMenu(self.sMotifPlus) + + def about(self): + QMessageBox.about(self, "Qt Themes Example", + "

This example demonstrates the concept of " + "generalized GUI styles first introduced " + " with the 2.0 release of Qt.

" ) + + def aboutQt(self): + QMessageBox.aboutQt(self, "Qt Themes Example") + + def selectStyleMenu(self, s): + self.menuBar().setItemChecked(self.sWood, FALSE) + self.menuBar().setItemChecked(self.sMetal, FALSE) + self.menuBar().setItemChecked(self.sPlatinum, FALSE) + self.menuBar().setItemChecked(self.sCDE, FALSE) + self.menuBar().setItemChecked(self.sMotif, FALSE) + self.menuBar().setItemChecked(self.sMotifPlus, FALSE) + self.menuBar().setItemChecked(self.sWindows, FALSE) + self.menuBar().setItemChecked(s, TRUE) + + +def main(argv): + QApplication.setColorSpec(QApplication.CustomColor) + QApplication.setStyle(QWindowsStyle()) + a=QApplication(sys.argv) + + themes=Themes() + themes.setCaption('Theme (QStyle) example') + themes.resize(640,400) + a.setMainWidget(themes) + themes.show() + + return a.exec_loop() + + +# Put these here where they are out of the way of most of the code. + +polish_xpm = [ +" 96 96 254 2", +".. c #9c4a34", +".# c #a4825c", +".a c #bc5e2c", +".b c #d48432", +".c c #dc9f51", +".d c #bc6e1c", +".e c #d4855d", +".f c #94664c", +".g c #bc714e", +".h c #8c6664", +".i c #d4923c", +".j c #bc8444", +".k c #d49360", +".l c #d4794e", +".m c #ecaf68", +".n c #bc8365", +".o c #d47439", +".p c #a46954", +".q c #dc9f70", +".r c #e48544", +".s c #bc7b51", +".t c #a47761", +".u c #bc7b42", +".v c #a4523c", +".w c #e4945e", +".x c #9c784c", +".y c #d4844a", +".z c #eca053", +".A c #bc614c", +".B c #e4855c", +".C c #bc8350", +".D c #c48e68", +".E c #b16634", +".F c #e49339", +".G c #bc703a", +".H c #bc7c67", +".I c #a45f34", +".J c #cc714d", +".K c #d48c5f", +".L c #a47057", +".M c #cc703a", +".N c #dca674", +".O c #b47859", +".P c #bc6729", +".Q c #d49475", +".R c #d48b4a", +".S c #cc8351", +".T c #cc8466", +".U c #ac6841", +".V c #e4a651", +".W c #e49576", +".X c #d47d31", +".Y c #ac6e4b", +".Z c #c07650", +".0 c #e48c43", +".1 c #e49452", +".2 c #9c745f", +".3 c #e47e54", +".4 c #cc7c4f", +".5 c #cc7c32", +".6 c #b46133", +".7 c #d49a68", +".8 c #d67e4f", +".9 c #bc7643", +"#. c #b47056", +"## c #d48b3a", +"#a c #dc9f5e", +"#b c #e49a60", +"#c c #cc6a31", +"#d c #8c6244", +"#e c #dc9a41", +"#f c #eca753", +"#g c #bc8a58", +"#h c #d48c76", +"#i c #bc693f", +"#j c #bc715d", +"#k c #9c6857", +"#l c #f4b171", +"#m c #bc8a6a", +"#n c #eca16d", +"#o c #a87e58", +"#p c #a4613f", +"#q c #a48569", +"#r c #d4846d", +"#s c #dc935f", +"#t c #c47c50", +"#u c #dc8449", +"#v c #bc6950", +"#w c #cc9678", +"#x c #c4703a", +"#y c #cc7b67", +"#z c #dc8c5e", +"#A c #ac7067", +"#B c #eca86e", +"#C c #b4786d", +"#D c #dc8c4a", +"#E c #b46842", +"#F c #d47c41", +"#G c #e48d51", +"#H c #e59a52", +"#I c #9c6e3f", +"#J c #d49351", +"#K c #cc843b", +"#L c #ecb678", +"#M c #9c5a38", +"#N c #d4795c", +"#O c #c47b39", +"#P c #ec9560", +"#Q c #ac764c", +"#R c #c48351", +"#S c #c48e74", +"#T c #cc7650", +"#U c #cc8a84", +"#V c #bc6a5c", +"#W c #e4af74", +"#X c #b46855", +"#Y c #e4a06e", +"#Z c #ac775b", +"#0 c #e48d5d", +"#1 c #c47d65", +"#2 c #cc763f", +"#3 c #b47e5d", +"#4 c #cc8a55", +"#5 c #cc8a67", +"#6 c #bf622f", +"#7 c #dc853b", +"#8 c #e49f4a", +"#9 c #9c505c", +"a. c #8c5644", +"a# c #cc7329", +"aa c #a45a51", +"ab c #b48264", +"ac c #9c7a7c", +"ad c #9c5f4f", +"ae c #b4844c", +"af c #a46749", +"ag c #dca664", +"ah c #b46e1c", +"ai c #c4762c", +"aj c #a45a3c", +"ak c #dc9a74", +"al c #ac7e46", +"am c #ac6a6c", +"an c #eca862", +"ao c #e49a41", +"ap c #e49a78", +"aq c #bc7660", +"ar c #d57e5e", +"as c #9c6e5c", +"at c #ab7e65", +"au c #cc8a44", +"av c #9c6240", +"aw c #bc6244", +"ax c #bc5d3f", +"ay c #e48550", +"az c #eca060", +"aA c #cc7160", +"aB c #cc7c42", +"aC c #b46241", +"aD c #b4726c", +"aE c #eca67f", +"aF c #9c6a3c", +"aG c #94685a", +"aH c #c48240", +"aI c #c48465", +"aJ c #dc7640", +"aK c #cc8f54", +"aL c #e4a76f", +"aM c #c4692e", +"aN c #dc9474", +"aO c #ac6050", +"aP c #b47048", +"aQ c #94614b", +"aR c #ac836c", +"aS c #a47048", +"aT c #b4764a", +"aU c #ec8e5c", +"aV c #dc9a53", +"aW c #cc765e", +"aX c #b48a64", +"aY c #dc9a63", +"aZ c #c47640", +"a0 c #ec9a60", +"a1 c #c48a54", +"a2 c #c48a67", +"a3 c #ac5a3c", +"a4 c #ac8458", +"a5 c #dc855d", +"a6 c #c4714d", +"a7 c #dc9243", +"a8 c #dc794e", +"a9 c #ac6955", +"b. c #cc8f67", +"b# c #ac6032", +"ba c #ac7056", +"bb c #dc7a34", +"bc c #ec9553", +"bd c #dc8d3b", +"be c #e4a060", +"bf c #f4a654", +"bg c #c46842", +"bh c #c46f62", +"bi c #ac613d", +"bj c #dc866c", +"bk c #c4694e", +"bl c #dc7d42", +"bm c #ec8d4f", +"bn c #dc9351", +"bo c #cc9177", +"bp c #c4695f", +"bq c #ecb075", +"br c #e4a75f", +"bs c #d4843c", +"bt c #bc722c", +"bu c #d4936c", +"bv c #d47644", +"bw c #bc7d5c", +"bx c #ac563c", +"by c #e4956c", +"bz c #a47a4c", +"bA c #d48454", +"bB c #bc825c", +"bC c #e49544", +"bD c #bc7044", +"bE c #bc7e74", +"bF c #d48d6c", +"bG c #cc7144", +"bH c #b47864", +"bI c #bc6a34", +"bJ c #d49684", +"bK c #d48b54", +"bL c #cc845c", +"bM c #cc8474", +"bN c #ac684c", +"bO c #cc7d5c", +"bP c #eca27c", +"bQ c #dc946c", +"bR c #c47c5c", +"bS c #dc8554", +"bT c #c47244", +"bU c #dc8c6c", +"bV c #dc8c54", +"bW c #b4684c", +"bX c #cc8344", +"bY c #c47b44", +"bZ c #c4825c", +"b0 c #e4a17c", +"b1 c #ac7a64", +"b2 c #e48c6c", +"b3 c #c47a74", +"b4 c #e49f54", +"b5 c #9c674c", +"b6 c #946764", +"b7 c #c48674", +"#u#G#G#P#G#G#G.1#G#G.1.1.1.w#G.r#D.1.1.1#D#DbVbV.K.K.K.KbO.Z.Z#TaP.GaT.Z.O.O.O.H.9aP.ZaPaPaPbZbo.i.k#J.k#JbKbnbn#b#sbVbV#G#G.r.ray.r.0#G.0#G.1bc.r.0.0bc.0.0.0.r.1.1.1.1#G#D.0#D.0.0.0bcbcbc.1.0", +"#aagaLbrag#a#a#a#DbVbn#G#0.1#0#Da5#za5.4.J.Jbk#vbt.G#x.9bY.4#tbYbw.saPaP.Ub#af.Y.s.s.Z.saP#E.gbw.U.U.UaObWbWbWaPb#b#.E#t.K.K#z#s#s#sbQ#s#sbn#s#sbn#s.w#s.w#s#sbn.ybV#s#sbV#s#sbQ#aak.7.k.7.k.k.k", +"#..g#.#.#j#.#XbW#Z#o.O.O#3.n.n.Halalalala4aXaXa4#t.u.9#R#5bu.k#5bob7aIaI.nbwbw#m#5aIa2#5#5aIb7#5.DbBbB#3bwbw.C.O#oabab.naI.C#t#R.9#tbY#tbY.ZbY.s#t#t#t#R.sbY.s#tbD.Z.Z#t.9.Z#t.4bBbw.s.saT.9aTaT", +".ybS.ybSbVbVbVbVbl#u#u#ubSaybSay#s#za5#z#z#z.KbA.Qb.aIbZbZbB.g.U.gaP#.aP#.aPaP.O.9aP.g.s.O.ZaP.Z#CaD#Aamamamam#X#3#Z.OaPaPaPaP.saZbY#t#t#tbY#tbY#t#tbLbZ.SbR#t#tbZbRbZbRbR.sbRbR.4aBaB.4bY.4.4.4", +"bKbV#zbKbA.ybK#zbV#z#0bS#0#0#0aya5bA.4.4.4#T#xbgbwaq.O.g.O#j#.aPaCaC#v.g.gaPaP.Z#R#R#t#t#t.Z.s.Z#O#O.5aH#KbY.S#4bD.G#xaZaZ#2.SbVbV#s.wbV#zbSbAa5.e.KbQbQbU#s#z.K#5.K#5.T#4#5.Kb..4bZbL.T.ebL.K.K", +"#A#A#C#C#AaD#CbEatataRb1b1abb1.t#I.f#IaSbz.x.#.##v.g.g#1bR.T#5#hbObO.T.K.K#5.KbubL.4.4#t.4.Z#tbL.e#r.K.K.e.e.T#r.K#z.K#z#sbVbS#zbV#u#ubVbl#F.8.l#2.4.8bAbA.l.4bva6.g#x.g#x#i#i#i.L.Lba#Z#Z#Z#Zba", +"aPaT.u.u.s.C.C.C.SbA.S.4.SbA.8.8#r#rbF#h.TbO.T#h.KbF.e.e.S.S.S.S#u.y.8bA.e.4bA.e.K#zbQ#s.K.KbUbQ.y.R.y.yaB#O#xbT#t.4bLbLbL.4bL.S.4.S.4#T.Za6.Z.JbD.g.Z.g.Z.g.Z.ZaP.g#iaP#i#E#EaC.Obababa.ObH#Z.O", +"#zbSbA.e#za5.e.8bV.KbV.ybAbK#zbK.8.ybV#z.y#F.y#sbKbA.Rbn#sbn#b#b#Y.w#sbV.y.4.lbA.y.y.ybA#T.MbG.4bObO.4.SbLbOaq#..O.Yaf#p#p.I.U.UaT.Z.O.Oaq.O.H.Hb1b1#Z#Z.L#Zat#3bw.s.HbBb7aIaIaIbA.l.4aBbAbA.e.e", +"#DbVbn.w#s.w#sbVbAbSbSbV#D#GbS#0.1#H#H#H#b.1bn.1#4.S#t#t.S.TbL.S.K.K.K.S.SbK.e.S#t.4#t#tbDaPb#b#.U#E.9.S.ebVbS#G.K.K#r.l#y#T.Z.Z#2aB.S.ybS#u.8#F#Kau.y.S.y.y.R.y#z#z#sbn.1bna7bd#F#DbVbVbV#s.w#s", +".1#s.1#s.1bVbS.y.K#z#sbVbVbA.8#FbA.8ar.8.e#r.e#NbKbA.S.S.S.SbLbLaBaBaB#2aB.SbKbAbVbVbV#s.w#YbebQ.KbA.e.KbV.ybl.ybsbsbs#D#u#D#u.R.y#D#DbVbV#s#0.wbebe#b#bbQ.wbn#GbV#G#D#G#D#GbV#D.ybV#sbV#s#s.w#s", +".wbn.w.w#bbQbVbV.4.4.ybKbnbV#z#z#G#D#D#D#u#D.y.R#2aB#2.M#x.M#2#2#z#s.w#sbV#s.w#s.1.w.w#b.w.1#G#G#s#zbVbVbVbSbVbVbd#ubd.r#D#D#D#D.1bC.1.1.1.1#D.1bV#G#0#0#G.w.1a0bC#G.0aybS.Ba5a5bVbVbV.w#z.w#sbV", +"#ubVbVbVbV#GbV#D#s#sbn#b.w.w.1bVb2b2a5#z#z.K#zbA.w#s.w#sbV#s#z#s.w#b.w.w#GbV.w.w.X#Da0a0#G.1bcaz#G#GbS#GbV#ubV#0#z#0#0a5#0#0b2#0.0.r.0.0#u#u#F.o.M.M.M#F#ubV#G.1#b#P.w.w.w#0aya5.y#u.y.ybVbnbVbV", +".wbV#GbV#G#s#G#0.1#G.1.1.1#G#G.0#0#0.w.wby.wbQbn.w.w#G.w.wa0#b#P#u#G#G#0#G#G#G.w#baz#Yaz.1.0#D.0#G#G#G#GbVbl.8blbva8.8.B#z.Ba5#0ay#G#G#z#G#z#z#z#zbU#z#z#zbQbybQ#zbK#z#s#sbn.R.y#2#2aB.8bVbV#0bV", +".w.w.w#z.w.w.w.w#GbV.r.0.0#G#G#Gbda7a7#H#8#8#8#H#u#u#F#u#D#GbV#u#G#G.w.1.w#G.wa0bV#D#DbV.w#baz.w#G#G#G#G#0.BbSa5#u#u#D.1.1bn.0#7#z#0bSbSbSa5#z#z#r.e.e.4.4#2#2bT.4.4.4.S.R.Rbn.i#s.K#zbV#s#0bV.w", +"#u.8#u#u#ubV#GbVby.wbQ.w#b.wbVbl#T#T.l.ear.Ba5.8.w#G#G#G.w.1.1.1.1#G#G.w.1#G#G.w#P.w#G.1.w#P.w#0#D#DbV.w.w#0#0#0.w#b#baVaVbn.1#G.y.y#F#F#2.obv#Fay#z#GbVbV#z.e.e#z#z#zbV#s#s#s#sbQbQ#sbQ.wbV#G#0", +"#0#0#0#G#0#u#ublbDbT.4#4#zbQ.e.e#s#s#s#z.w#0#0aU#DbSbVbV#D#D#D#G.w#G#G.w#P.w.w.w#Gbmbmbmay#u#G.waz#b.w.w#Ga5bl#uaraW#i#i#ia6.4.ebVbnbQ#b.w.w#GbV#u.r.r#G#G#G#0a5.1.wbV#zbSar.J.JbT#x#2.y#F.8#u#G", +"#5.TbL#tbD#i.g.Z.SbA#zbAbKbSbSbA#u#D#G#u#u#u#DbV#GbVay#G#0#G#G.r#D#Gbn.w#b#b#HaY.1bVbV.y#u.y#F#Fbv.o.M#2#2#2aBbG.9#OaB.y#D.1.1.1.w#s.1.w#G#G#G.rbdbda7bdbnbn#sbQ.nbw.s.Z.4.8.8.8.obl#u#zbV#z.K.K", +"#i#x.Z#tbL.K.kbQbAbVbK#u.ybSbV#z#G.w.w#G#D#G#0#G.1#G#D.1.1.1.1.1bVbV#z.yaBaM.M.5.y.y.y#ubV.w#P.w.w.w#b.1.1.w.wby#b.w#b.w#b.w.1.1#u#u#ubVbAbK#z.S.T.TbO.Z#vbga3axbD#xaZ.8bAbAbAbA.e#4bA#ta6.P.6.6", +".S.4bL.e.e.e.ebA.8bSbSbSbVay#0#G.1.1a0.1#ba0#H#bbc#Hbc#Ha0bc.1.0#z.8#T.J.l.ebVbV#G#G#G.w.w.w.w#P.w#b#n#b.1.1.w#n.1.1.1#G#G#D#ublbl#2.4.4.g.Z#ZbN#9#9aa#X.g.ZbOar.Mbvbla5#z#zbA.laPbNbi.U.U#..Zbw", +"bL.e.e.e#zbSbSbl#u#DbS#G#G#0#G#G.1.1.1.1bc#Ha0.1#G.1.1a0#b.1#u#F.e.4#T.8by#b#na0a0#b.w.w.w.w#P#0bVbV.1.1#G#G#u#G.1#G#G#ubS.8.l#T.Z.g#ibW.UbNa9#p.UaP.9.S.ybVbV#Dayay#z#z.e.4bT#i.pad#pbN#.bRaI.T", +".4.e.KbS.8blblbSbSbS#GbV#G#0#G#G#G.0.1.1bcaz#H.1#G.1.w#P.w.w#z.8bK.KbQbQbV#u#D.1#0#G#G#G#G#G.1#P.1.1beazbe.1#G#u#zbK.K.4bO.Z#j#v#A#ka9.YbW.ZbL.4.R.R.ibn#D#u#F#FbS.S.4aqaPbNbi.I#.bWaP.gbObL.8bL", +".K.K#z.e#F.lbv#F#z#GbS#u#u#G.w#G#u#G#G#G.1a0bc.1#P#P#P.w#GbVarar.R#J#HaY.1.1.1#H#H#b.1.1bc.1#P.1.w#b#bazbe.w#zbA#t#t.Z.Z.Z.g#.#.b1ba#..Z.Z.lbS#u.y#u#ubSbS#N.laA#j.ga9#kad#ka9#..g.g#tbO.e.e.ebA", +".l.l.8.y.8bAbAa5bSbS#ubSbS#0.w#G#G#G#G#G.1bc.1bCbm.1.1.0#Dblbv#T#D.R.ybVbe#nazanananbeaz#b#bbc#H.wa0.1#sbV.S.S#t#t.s.Z.sbwaIaIaI#t#t.4bA.lbl#ubl.3a5a5.e.4bh#V#XbN#k#kaG#k.L.OaIbL.e.K.ebA.y.4.8", +"bSbAbAa5.ebA.8.4.8.ybS#z#G.w#0bSay#0bm#G#G.0.1.0bc#H.zbf.zbe.1#z.KbVbSbA.y#D#D.1bebebe#HbeazazazazazbebV.S.4#1bMbZbR.Z.Z.Z#t#tbYbl.o#ubS#Gay#0#uarbl.laB#t.uaT.Oad#kaGb6#ka9.g.Z#t#t.4.4#t.4bK.K", +"aBbs.y.ybA.l.lar.4aBaB.8.y#F#u.wbn#D#D#G.0.0a7.FbdbCbc.1.1.0.1bc.F#8#H.1.ybG.4.ebn#s#s#baY#saYaV#b.w#s#J.SaZbD.sbR#t.S#z#ubs#F.R#D#D.0#G#G#G#G.0#D.R.yaBbDbDaP.g#Zb1.L.fb6.h.hac.I.YaT.u#t.Z.Z#2", +"b3bR#1.4.4.4bX.R.K.KbV.ybl#F#F#F#za5a5.B#z#0#sby.1#G.1.1.1bm#G.1a0a0#H#H#b#b#s.ya#.X.y.ybVbn.w#bbebeaY#sbAbRbZa2au.S.R#s#z.y.e#zbs#ubn.1.1.1#G#D.0#D#D.RbA.4bO.4aPbD#Eb#af.I#Maf.2.x.L.L#Z.O.n#S", +"aObi#Xbw.s.sbY.SbXbK#z#z.w.w.wa0#z#za5bS.l.l.8bVbSbVbS#G#G#G.w#Pbe.w#b#bazbrb4#Hbebebe.1#u#F.5.X#F.y#s#Y.NaN.Q.Q.T.Tbu.w#sbn.1be#sbVbV.y.y.ybn#b#G#G#G#G#0bn#zbSbn#bbn#D.R.RaBbX#3.O.Yaf.I.Ibi#E", +"aVbX.G.6a3aCb3#U.y#z#s#0#z.w.w#s#H#H.1.1.0#G#Hb4bVbV#u#u#u#D.0#D.1.1.1#D#7#D#Hb4bCbc.1.w#b#b#n#nbe.1#u.yaBbX.S.kb4.cb4aYbA#T.4#r.4.K.K#s#s#s#D.y#GaybV.w.w.w.w.w#G.w.w.w#b.1bn.1#P.w.w#0#0aybS#G", +"bnaVaYbeaNarbp.A.P#2#F.y#u#s.w#sb4b4.1.1.1.1#H#H#nbeaz#b#HbnbCa7.zbe.z.1#D#D.w#Baz.z#H.w#P.w.w.wbebeanbrbebn.RbX.4bQb0aL#BaYa7.bbA.4#xaMaZ.ybK.kbA.4.4#F.8.ybA.ybv#u#ubS#sbV#D#zbl.ray#G#G#P.w#P", +".w#0bSbVbV#D#D.1aY#b.w#zbS#FaBaB#x.M.l.8a5byap#bbn.1bebebebebeaza7.0bd#u#ubSbS.BbC#D.0#D#G.w.w.1anazb4bebebebr#B.V.c#D#Oai.S#s.WaE#Y#Y#YaY.kaB#x#4.S.S.4aBbX.y.y.y.K#z.KbV#z.ybV.ybKbKbK.K.K#z.k", +".8.8#u#G.w#HaV.1#s.w#s#0#zbV.wbQ#na0by#0a5bSbvbg.M#F.y#ubSbA#z.k.w.w.w.wa0a0.w.w#H.w#HbV#D#u#G.1.1.1#b.w.1.1#D#DbVakaLaLaLbq#B.VaB.XaB.ybKbQaLaL.q.qaY#a#b.w#b#b#b#b.wbn#s#D.y#D#s#s#s#JbKau.SbA", +"b4#Hbe#baY#s.K.S.y#F.ybSbS.R#zbe#H#H.1#Gbc#b#bbn.w#bbybQ.4#xbga6#T.l#za5bV#G#Gbc.w#b#b.wbV#D.1beby.wbVbV#z#s.w#Y#bbeaY#J#s#Ybe.1#B#B#Bbr#s.RbA.KbKbnaV.w#b.w#Ha0b4anbe#Hbe.1.1#bbC#8bc#Ha0a0#Pbc", +"b4#8#8#H#HbCbC.1b4#b.w.1#P#G#G.0akbVbXaB#2#2.4bAbA.KbAbV#s#b#YaY.1bV.8aZ.GbYaB.S.RaV#abebn.1#8az#b.w.w#b#ba0by.w.1#Hazbebe.1#s#b#ebnbnbnaVaVaYbnbnb4bebe#abe#abebnbnbnbn.ibnbnbn##a7#8#8#ea7beaL", +"#Y.w.w#s.w#0#z#0#D#DbVbVbVbV#bana7#D.1.1#b.1#D#D#u#u#Fa#.o.y#D#D.r.r.w#b#Y#b#b.w.gbkbg#Tar#za5a5####.5.b.Ra7.1bn#HaV#H#Hbn#D#D.ybQbQ#z.K.e.K.e.ea7bnaVa7bnaY#aaL.m#Wbrbr#Ybr#W.m#L#L#L.mbeb4.w#b", +"#sbK.ybS#z#zbSbS.k.k.K.S.SbAbKbn.w.1#D#GbV#GbV.w#G#G#G#u#u#ubl#7.r#G#G#0#zayay.0#Y.wa5bS#zbS.8.M.4.Z#xbka6#TbObO#D.Rbn#s#bbebebebV.R.R.y.R#D#DbVbebe#BbqaLbebn.Rbnbnbebr#BbrbeaV#Da7bran.mbr.1#D", +"anazbean#Banbe#H.y#O#x#x.ybKbK.R.Jbvar.ebja5#N#TbvbS#z#0#0.1#0bV#G#u#u.o#Fbb#7bm#F#7#u#D#Dbn#bbe#s#s#sbn.w#zbVbVbkbpbpbpbhbhbhbhaAaAaWaW#N#r#rbFbs.ybKbn#b#YaLbq#Bbrbebebebr#BbqbeaLbe#Y#B#B#B#B", +"a7#DbCb4azananan#BaL#b#Yby#b#G#ub0aN.e#x#i#xaWbObAa5.e.8.4#2.4.4.w.wbQ#zbSbSbVbV.w#z#zbS.JbGbG.l#D#GbV.1.w.1#G#G#H#8#8#8aoa7#8#8#D#Dbn.1bnbC.1bC#b.w#D#D.y.5bs.y##a7#Hbranbe.1.i#sbn#D.Rbsbs#ubs", +"#b#0.y.8#2#2#2#2#F#u#G.w#0#G#Pazb4b4beb4bnbn##.5#xaB.4.4.4.e#z.K.e.SbA.8bA.ebK.K#zbV.y#ubVbVbVbVar.8ara8ara8a5ar.RbV#zbVbA.y#D#sbSa5a5bV#zbSbVbS#G#DbV#b#b.1bn#bananbeb4b4anananbean#B#B#Bazbebe", +"#0a5bSbV.w#Y#BaE.1#0.wbSay#uay#Gbd.FbCbC#H.zanaz#b#b#b.w#zbA#2#c.P#6#6.M#2.e.K.k#KaB.Xbsbn.1.1#7#Hbna7#D#D#D#D.0#0#zbVbV#u#F#FblbdbCbC.1bC#G.1.1bV#u#D#G#Hbean.manbeanan#B.manan.mbebe.1bV.1.1.1", +".zbCa7#Hazanb4#8#Y.w.y.8#z.w#G#D#G#0#P#0#0#0#uaJ#D#u#ubl#D#0.wb2.w.1#0#0.w#z.4.G#vbhbRbO#rar#N.l#4bL.S.4.4.4.4bLay#D#uay.1#Ha0.w.1.w.1.w#G#s#0.w#G.1.1an#Bazb4b4anazb4b4.zananan#f#f#8#b#H.w.1#b", +"b4#Hbd#Ha7#H.1.0a7#H#b.wbV#s.w#0#D#D#D#D#G#u#u#G#G#G#GbV#u.8.y#ubs#7#G.1.1bn#D.y#xbXbAbAbYbt.Z#RbXbK#s.k.R.S.RbAbl#F.o.o#Fbv.yblbV#u#7#G.1.z.z.z.w.1#G#u#D.0#G#nb4#H.1.1#b.zb4.z#H.1.1.1#Hbe.m#B", +"#Y.w#D.1ay.w.w#Ga7#H#H.w#G#G#G#G#D.wbV#G.1.w#G.1#D#D#ubSbA#u.KbV#s#G#u#u#ubVbn#s.zb4b4#sbO.g#V#X.MaB.yaBaB#2aZ#2.y.y.R.KbQ.KbQbu#zbAbK#s#bbe#Ybea0be#bbn.w#D.y#G.1bC.1.1a0#b.z.z.zbc#H.zbCao#HbC", +".wbS#0.wa0a0#na0azaz#b#H.1#G.0.0.w#P.w#G#0#G#uay#D#DbAbK#z.KbSbK.l.4bv.8#F.l.e.S#ubAbA.RbK.K.K#s.4bAa5#z#z#z#z#z#w#m#3ba.p.p.L.L.ZaZbD#t#R.SaKaKakap#Y#bak#s#zakbn#D#u#D.y#7bs#7#F#F#u#0#0#0by.w", +"bna7anbran#8az#8.1#ba0#bbcbeaza0a0.w#G#G.1bm#G#0.1#z#GbV#z#0#s#G.e#z#z#za5.8bGbgaAbv#T.l#F#Da7a7bQbybQ#z.e#z.ebAblblay.0ay.raJ.obR.s#tbR#t.s.s#tbDaZa6bT.Z.gbT.SbA.S.S.KbQ.q.q#YbqaLbeaV#D#u#D#u", +"auauaL#W#Wbr#L#Wbe#nbe.w.w.w.1a7.1#H.1.0#u#7#7.r.0#ubl#uay#Gay#u#z#za5#u#ubS#za5#D#u#u.8.8.8.8#r.4bYaZ.G.GaZaZaZ#t.SbLbFb.#5bO.Z#t.Z.Z#t.Z#iaC.E.Z#1.g.ga6#ibWbR.C.s#..OaPbNbi.Ua9ajaO#X#v#y#r#h", +"bL#1b.aI.g.I.UaP.GaZ#t.4.SbK#sbQbe#Bbe#b.1#D#D.w#G#DbSbl.8bl#u#F.8aB#F#F#F#ubV.w.ybSbS#u.8.8a5#z.k.K.KbK.KbQaYakbu.K.S.4.4.4.S.e.4.8.4.ebF.Kb.#h.gbR#taq.ZbW#E.gaP.YbNba#.babaaP#3.u.s#R#R.S.KbK", +"a6a6.Z.ebO.T.QaNa2a2aIaT.Ub#.6.EbIaZaZ.4.S.SbA.kakbQ.k.KbF.ebA.y.e.ebSbS#u.8#FbG#r#r#r.e#F.ybsbdbV#zbV.yaBaB#2#2#MavaS#Z.O.O.OaPa6#i#i.ZbRaI.H.n.ZaIaI.T#5aIbRb.b.bLaIbRbR.gbWaP.g#v.g.Z#x.gbT#i", +"#H.1#DaY.ybV.SaB.Y.O.O#.#X.ObBaIbR.T#1#t#1.Z.g.ZaP.U.U#EbW.g.g.g#T#T.4.l.l.8bS.e#F.8#F.l.8arararblbSa5#0bS.BbS#ubV#u#ubl#ublblbl#5bZ.gaP#.babN.pb##E#E#E.Z.g.gaIaB#2.ZbL.T.e.e.K#z.kby#b#b#Y#Baz", +"brbrb4#Hb4.1#D.0.R.y.y#F.yaBbvaB.Z.g.g.g#jaOaxbxaFaS.Y.O.s.s#ta2#Fbla5bSay#ua8bl.y.y.RbK#J.KbKbK.S#F.y.8.8bA#F.l.y.y.8.8.4.4.4.4aPbtaPaP#E.YaPbNaP.Z.sbwbw.C.CbZbB.C.Z#..O.H.OaP#RbX.SbK#JbnaV#a", +"aZ#taZ.Z.4bLbO.ebLbR.S.TbL.T#4buaK.S#R#R#4.Sbw#t#3aT.Z.ZbD#i.E#i#Z#ZafafbN#Z.na2.3ay.B.Bay.B.8a8bn.y.4.4.4.8.8bAbl.y.ybKbS.e.e.8#F.K#s#s.k.KbLbObL#t.Z.9.G.GbI.E.G.9aP.g.ZbZbZ#tbJaI#.#EbW#E.g.Z", +"aKaKaH.u.C.C.sbw.O.O.O.O.Y.Uba.O.uaPbtaT.u.s.s#Rb.#4#5bLbL#T.Z.4.4#t.4.4#t.4.y.ebKbAbV.KbAbAbA.K.KbVbAa5#z#z#z.y#z#zbS.8aB#2.M#2.o#F#ubl#F#u#G.wbQbKbKbnbQ#YaL#Y#saY.KbAbYaBaBbY#.bibiaPaI.Tb7bR", +"#h#5#1#X#jaOaaaa#M#paf.Ybaba.n#S.H#.#.aDaqaqaq.HaPbW#x.Z.4.Z.4bR#RbLb.b..k#4#R.4#RaH.u.u.u.ja1aK#F.S.4.K#zbQ#zbVbSbSbS.ybS#DbVbVayayayblbbbl#u#G#D#u#u#D.1.1#b#H#H#b#b#GbV#s#b.1#L#WaL#WbqaLbK#K", +".zanbeb4be#aaY#aak.k#4bL#t.G.G#i#1#j#j.gaq#j#.bW.ZaT#tbRbObRbLb.#u.r.r.r.r.rbmbm#za5bv.la5a5a5a5.K.4#xbg#xbg.MaM#2.8bV#s.w#sbV#ubS#z.1#z#G#G.1#G.1.1.1.1.1.1bc.1.1.1.1#G.wazaz#Bb4#8bC#Hbebe#H#b", +"#D#G#G#u#0#zbSbSbVbVbAbAbV#z#z#s#JbK.R#s#saYaVaYb.#4.SbL.4.Z#t#t.L.LaS.Lba.O.n#mbQ#z.K#zbQ#0.e#2bQ.K.K.K#z#s#z#D.y#F#F#F#F#F.oaB.8.y.8.y#ubV#0#D#u.r#G.0#G#G#Gbc.1#G#G#G#G#Hbc.1#naz#b.w.1#0#0#P", +".z.zbcbCbcbC.0.0be#b#ba0#H.1.1.w#Dbdbdbn#H#8.z.z#BaL#b.w#sbV#z#s.K.K.K#z.K.K#z.K#R.C.j#RauaubYbt.6#6a6bL#zak#bak#D#D#D.y#u#u#0#0.w#sbV#u#F#Fbl#u.w#0#G#G.1#G.1#G.r#GbV#GbV.1bc#H.w.w.wa0#0bS#G#0", +".w.w.1#G.1#P#G#P.w.1#H.1.1#D#D.1by#0#0#G#P.w.w#b#Hbc#Gay#G.r.1.wbv#F.l#F.laJbvblbA.8.l.8a5#z#zbS.K#4bO.4#TaBaB#Fb4#baz#b#P#zbl.o#F#D#0#G#G#GaU#0.B#u#u#u#G#G#0.1.w.w.w.w#0#G.1.1b4anbraz#8.1#8az", +"b4.1bnbC.1b4.zaz#f#fbr#fb4#8.Van#f#8#8ananbe#G#u.1#G#DbC.1.1.w.1.w.1#G#G#GbS#ubSaiaB.SbXaB#2.4bKbvar.ebF.T#1#j.gah#O##bnbn#D#baY.1#D#DbS#u#D#7#7.o#u#0.wbya0a0#0.wbn#0bSbAbS#z#0#8#8an.z.1bd.1a0", +"#b.1.1bn.1bebran#W.man.manbran.m.m#Bbebe.1#D#D#bbCbCbC#GbC#G.1#G#u.8#ubSbVbS#z#z.w#s#D#ubV.1.w.w#Da7bd#Dbs.5.5#O.Q.Q.K#N.Jbgawax#O.y#z#s#z#z#b#B.zazaz.1#GbC.0bd#7#D#ubSbV#G.wbebr.Vbe#8#D#7#7#G", +"#b#b#b#b.w#b#bbeb4#H.cbebe#bbnbK.e#z#z#sbVbs#D#G#z#z#za5a5#za5a5#sbn#z#z#z.y.8bAbl#F.o.o#u#G#G.r.1bnbn#D#DbV#z.w#T#x.MbGbla5a5.eaB.S.SbT.6.a#2bK.1bn.1bn.1bean#lazazbe.1.R#F.5a#.S.e.ebUbU.W.Wap", +".ybAbAbKbK#DbV.waV#HbebebeaYbnbn#z#FaB#F.y#D#Dbnbe#H.1bn.1#Dbnbn#8#eao#e#8#8#8#8#0#0#0.w#G#G.ray#2.J#2#2.la5#z.w#b.1#u#Gbnbn#D#DbAbA.4.4.8bA#z#z.e.8#T.J#x.l.K#z#D#0.w.w#b.qbraLanbr.Vbr#8bd.b.b", +"#B#B#Bazbrbebebe#8brbrbrbe.zbrbr.mbrb4#H#b#sbVbV#NaW#T#T.J.JbkbkaAbp#Vbpbhbpbpbp.e#zbQ.w.w#s.1.w#H#b.1#G#D#7#7#FbS.8.l.l.8a5#sbybV#G#0.w#0#z#Fa#.4#NbOar#r#r#z#za8.ybS.8.4aB.SbK.cb4anan.mbeanan", +"brbrbebrazbr#f.Vbr#f.manb4bebean.V.V.m.maL.1bA.y.Rbnbnbnbnbn#Hb4#Y.w#saYbQbnbK.RbT.GaM#2.4bVbVbK.8#F#u#z.wbybyby#G#G#zbV#u#F#F.obb#uay#0#0.w.w.w#b#b#sbn#D.X.5.b#z#0#za5bAbA.K#s#TaAbObO#T#T#raN", +"bnbnbnbeanbq#l#Lan.maLbrbebebrbeaVb4b4aVbnbn.wbe#T.4.ybAbK.KbQbQ#D.R#D.1.1#H.1#H#Y#s#zbVbV#z#u.ya5a5ar.l#T.J#vawa7#Hb4be#b.1.0.0#G#ublbv#c#c#2#u#Dbd#D.1.w#Hbean#b.w.wbVbSbVbVbVbVbV#D.1bV.1#ban", +"#Bbebe#abebeaVbnbn#sbn#D#s#a#b.w.q#b.q#Y#Ybe#HbnaY#baY#baVbnaVaV#bbn.w#bbebeaV#H#D.1bebe.w#G.wa0.z.z#HaV#HaYbnaV.ebLa6a6a6bOa5b2.w#b.w#zbU#s#s#zbA.lbv#T#T.l.y#0#8.1#D.1.wazaza0.w#P.wbebe#H#baz", +"az.1bcbc.1.1bCa0#H#8b4b4#H#Hbebr#b#bbn.ybXbK#s.c.ia7bebe#zbV.8a5bnaY.caLaLbe#H#H.kbKbKbK#s#b#b#H#bbV#DbV.wbe.w.1bCbCbn#D#2bg#i#i.J.lbA#s#b#bbQbQ#JbVbVbS#G#u.R.R.SaB#2#2aB#Fbd#H.z.1.wa0#b#Ybe#Y", +"au.S.S#J.k.R.kaY#DbVbV#sbn#s#s#b#Y#Y#Y#Yak.q#Y.N#Y#Y#a.R.y.y.ybV#ebrbq#WaL#B#bbV.i.RbVbn.1#bb4b4#s#D.y#ubV.1#b#H.1.1#bbe#Y#b#s#z#z#z#D#7bs#u.y.lai.5#F#u#0.wbebe.qakbQbQ#baY#b#b.1.1.0#G#D#ubb#F", +".k#s.k.k.K.KbK.KbA.KbK.K#z#s#z.K.5aBbX.4bY#RaHbY.Z.4.e#s#sbnb4#H.q#Y#sai.dbs#8anbeanan#Ybe#H#H#8#b#H.wbV#G#G.0.1.wbV#u#F#7#D.1b4#bbebebeazb4.1bVbebe.w#z#u#FaBai.4#2.4.ebQbQ.w#Y.w#G#GbVay#u#z.w", +"bm#G#Gaybl#ublblbAbA.8bSbAa5bS#F#D.1#zbnbVbK.K.K.K.e.4aB.y#Dbnbea7#8brbq#Y.K.ebU#Hbe#Yanazbeazanazaz#n#n.w.1.1.1.w.w.1#Pa0#b.1.0bV#G.1.1az#b.w#s#sbVbV#ubVbV.1#s#z.yaB#2bG.M#xbgbG.8#z#Yb0#b#s#z", +"bS#GaybS#G.w#b#b#zbV#0bV.w.w#G#G#G#G.1#G#zbV#D#u.y#D#z#s#s.K.8aiar.4.4bV#sbn.cbr#s#u#2.M#x.y#D#b.1#b#b#b#na0a0a0a0.1.0.X#7#u.1a0#z#D#u#F#u#ubVbV#n#n#b#Pby#b#Y#n#bbn#D#DbV.KbV#z.K#1#i.6.6bDbL.Q", +"#Ebi#p.U.Y#Z#C#3bAbAbKbV#s#G#s#0#D#G.w.w#0bc#Gay.1#D#7#F.ya5#s.WaV.cbebn#sbQ#h.T.K.kbQb0aE#YbV.X.y.y.y.ybV.w#b.1#8.1azazaza0a0.wa0.w#0#GbV#z#z#0#F#F#F#F#F#u#ubVbe#b.1aY.wbV.ybAbRbR.Zaq.Z#E.U.U", +".n#Z.p.Las.faQ.fafaf.U.UaPbD.Z#t.4bK#za5#z#G#G#G#G#G.w#G#GbV#u.ybUbQ#z#zbV#JbKbYb.#R.Z#tbA.wbe#n.R#D.y.y.8#Dbn#D#Y.w.wbn.w.waza0.1.1#H#b#P.w#GbV.w#0bV#u#u#u#u#ubv.o#F.y#DbK#z.K#z#4.4.S.TbL#t#t", +"bLaZbD#R#taP.U#Z.hb6as.L#k.pba#ZbD.s.ZbTbG.8bS#Gay.B#G#0#G#D.0#D#s.y.ybVbV.4.ZbL.s.s#R#4#s.w#H.1aY.qbebQ#s#s#sbnar.l.l#u.1#HbC.FbC.1bC.1.1.1.1.1aybVbV.w#s.w#s#0by#za5#u.y.4.l#r.y.8#F.8.K.e.4#T", +"#4#4.S.4#taZ#T#2aZaTbNaQ#daQ.fasaS#QaT.s.4.8ararbl#ubVbV#ubl#F.XbT.G#t.S#tbkbT.T.uaH#OaB#D.1.zaz.z#f.z.zb4.za0.z#Jbn#JbK.ybAbK#s#z#baz.z.z.zaobc.0.1#G.0#G#u#G#G#ubS#0bVa5bS#uaBaB.y.y#u#F#FbA.K", +"#zbK.e.S.8.S.S.T.O#Z.LaQaQaQb5af#..Z#t.4#F.yblblbl#ubVbVbK.S#t.saI#tbwbZaI#t#t.S.n#1.TbF#zbQby.wbebranbraz#b.1.wan#nbe.w#z.y#FaB.8.ybn#Haobcbcbc.1.1.1.1#G#G#G#0#G#0#GbV#ubVbVbV.8bAblbAbSbS.K.K", +"#F.l.8.4bLbRbRbR#Z.L#kafafbN#..Zbg.Jbv.8#u#D.0#7#ubS.y#t.s.Obaas#3baaP.Z.sbD.Z.Z.y#JaY#a#Ybe#b.wb4#b#bbebebebe#bbm.0#u#G.w.w#0bVbGbAbVbV.1.1.w#P.1#Ha0bc.1#Day#D#0.1bS#u#ubV#zbVar.8.l.8a5a5.e#N", +"#T.4.4bObw#.bNad#k.pba#.bR.4bAa5ara5#zbVbV#u.y.4.K#t.gbi#pb5.p#k.ZaP.Z#t.S.y#Dbna7bCb4.zazb4ao.1#b.1.1bVaybV#G.wa0.w#G#z#0#z.K.y.8bV.w.1.1.1bc.1bcbc#Ha0.1.0#G#G#G#G#G#G#GbVbV#ubla8a8blbSa5.8.4", +".e.T#1bw#..paQa.#E#v.Z.8.ebSbSay#FblbA.y.S.T.TaIaDbN#paj.U#v.g#ta6#TbAbSbS#G.1bc#GaU#P.w#0#GbSbS#G#Gay.r#D#G.w#P#D.y.8.4.4.e.e.e#u.1#P.1bc.1.1.1.0#Ha0#Hbc.1.1.way#0.w#0bV#GbV.ybl#F#u#zbVbKbA.y", +".g#.bW.UaOa9#..O.4.8bAbSbS#u.lbv.K.K.S#x#Eb#.v...Yba#..Z#T.4#Fbvbl#ubS#G.0#GbCbc#Pbc#P#P#G.w.w#P#Gbc.w.w.w.w#P.wb0.qbQ.K#r.S.S.S#G.1b4#P#H.1bc.1.1bca0.1#P.w.w.w#G#z#GbVbVbSbSbS#DbV#s.K#4.S.4.4", +"#EaC#i.gbT.4.4bAbAbAbSbAbA.4.ZaPa3.6#6#E#x.4bLbL.4bAbKbAbSbS#ubS#0#P#P.w.w.1.w.1#H.1a7bCbn#H#H#Hbybyby#z#z.8.4.4aM#xaZ#2.8.y#GbV#Gbc.w.1#G.w.1.wbcbC#G#G.1#G#GaybSbSbS.8bla5bA.8#z#z.KbZbRaT.ZaP", +".4#r.K#z#z#G#ubb.8.y.y.y#R.O#Z.tbMbM#5.ebA.R#D#Day.rayaybV#G.wby.1#G.w#G.w.wbV#u.TbObO.Z.Za6bD#ia6bTbDbD#iaP.s#t.K#s.wbya0#P.1bm#G#0#0.BbSayb2#0.1#G#u#GbVay.8.8blbSa5bSa5#za5bAar.Z.gbaa9baba.O", +"b2bS.8#N#T.Ja6bk.M.M.lbS#z#G#z.w#ubV#GbV.1#G#D.ra7bnaV#H#Hbnbn#D.l.4#2.E.6.6bT.T.X.X#u#D.1.1b4be.1#G#G#G.0#Gbcbc.1.1.w.1.w.1#D#G#D.0.0#D#GbVaybS#G.1.1#Dbn#DbnbV.SbA.KbVbK.4aZbD#F#ubVbSaybV.wbn", +"#D.0#Dbn.1#sbQ#s#za5#z.w#zbS.y#ubV.kbVbVbVbVbVbnaW.l.l.4#Narar.8bCbn#HaVbnaVbebea0.w.w.1.1a7#u#7.1#s#H.1.w#Ha0#b#G.w.w.w.1.w#G#G.0#G.1#0.w#0#0.wbS.ebS.e.l.4.JbG.y#u#D.w.w.w#sbQbV#s#0ay#ubV#D#D", +".0bn#Gbn#D.R.R.RbV#G#z#0bV#u#u.y.SaBbYaB#t.4bA.ea5#zb2bSbSbVbV.w.0.0a7#Hb4#Hbn#7a5#z#z.w.wa0a0#bbeaz#b#b#bbn#D.y.1#G#G#G#G#u#G#u.1.1#b.1aybl#Fa8bG#T.8.eby.Wb0bP#G#Gbm#Gbm#G#G#G#sbn.w#z#G#G#zbn", +"#z.w.w#zar.4#T.Jbv#F.ybSbV#ubSbVaY#s#s.Ka5.K#z.Kbl#u#D#G#D.rbd.ra5#0bS.BbVa5#ua8.ybla8#u#0#G#G#G.0#D#G.wbe#B#Ybe#P.w.w.w.1#0#G#G#G.1#P.w.w#0#0.w#baY#s.wbn.0#D#7ay.rbm.r#G#G#G#GbV#0#z#0#G#z.1.w", +".8ara5.Ka5.ear.e.w.w.wa0#bby.w#b#0#0bV#u#F#FbGbv.8.8ay#z#0#0#0#0#z#0a5aya5ayb2#0bV#GbV#D#u#u#D#Ga0a0bc.1bc#G#D#u#Day#D#GbV#G.w#s.w.w.w.w.w#z.w.waBbs.y#D#DbC.1bCbV#G#0.1#0#G#0#zbKbSbSbS#u#ubVbV", +"#Hb4bebeazbeaz#Y#ubV#u#z#u.y.8#F.w.w.w.w#0.w#0#z#G#ubl#F#u#u#u#Fbd#u#D.0#7#7#7#D#u#D#GbV#G.w#bbebc.1#G#G.1.w#P.w#b.wby#s.w.w#s.w#z#z.KbA.4#F#T#2ar.e.ebA.ebAbAbSbQ.w#s.w#z#zbK.4.y.8bSbS#0bSbVbn", +"bn.1a7bnbn#D###u.1#0bn.w#G#z#D#0#0bV.w.w.w#bbe#bb4b4#HbCa7#Dbd.ybs.R#D#u#u#F#7bs#u#u#u.ybA.S.4bLap#b.WbQ#z#s#z#z.8.4.8#2#2bG.MbT.4.SbA.S.4.S.K.Kararar.ea5.ebS.e.8.8.ybS#z#z#s.KbAbla5#0#0.w#s.w", +"#s#z#s#z#z#z#za5#D#D#GbV.wbV#z#0.Ka5bKbAau.R.S.R.lbAa5.e#r#NaAaAa6.ZaW#N#N.e.e.e.BbSa5.earbOa6#Ebi#EbDbDa6#t.4.4.ebA.SbA.e.K.K#zbL.T.KbL#t#TbL.Kbn.1.1.1.w#Hbeb4bV#z#z#G.w#z#z.K#za5#zby#0bVbV#z", +"#u#D#DbV#u#ua8#ubXau.y.y.ybs#DbsbK.SbL#RaIaI.C#3bw#t#R#R.S.S.S.y#t.gaPaP.gaT.Z.ObabaaP.Z.Z.Z.4.l#F#2#2#O.S.ebA.8.S#2aB.y#zbKbS.y#u#D.1.w.1bnbVbn#zbK.y.SbK#4.S#tbSbV#u.8.8#u.8#ubV.y.y.y#ubA#ubV", +".##q#qat.tas.2.2#A#A#AbH.H#C.H#CaMbI#x.GaZ.9bD.G.9bD.GbT#2#2aBaBbK.ybAbKbK.S.S.S#t.Z.Z.4bAbK#zbV#sbV.K.K.K#s.KbV.K.y.SbA.KbK.y.S.4.ybAbK.K.K.K.K.K.K.e.K#4.K#4bLa2#5.D#5a2aIaIa2aIbBbZbwbw.s.OaP", +"ba.O.Obaba#.#.#..A.A#v.Abkbkbk.A.y.8.SbA.e.S.S.4.K.e.e.e.e#z#z#0bS#ubV#zbV.y.ybS#4.SbY.S.y.yaBaB.4#t#t#t#t.S.S.S.e.4.4.S.K.KbL.S#hbF.TbR.gaPbWaP#Z#ZbaaS.p#kb5b5bNa9#..O.O.Oaq.ObaaP.O.O#Zba.Y.Y", +"#D#u#u#uaybSbS#u#s#s#z.w#s#s.1bnbQbQbQbQbQ.Q.K.T#t.4.Z#2#T.4.4.4bAbA.SbA.S.S.K.KbQ.K.K.K#5bLbL.SbO#R.T#5b.#5.K.kb.#5bLbZbZbR.Z.gaP#.aPbNbNbN.O.Hbwbwbwbw#3.O.O.O#2.4.8.8.8.8.ybAbA.e#z#s#z#s#z#s", +"#5.TbLbL.TbLbLbL#m#gae.CaX.Caeae.Z.4#tbLbLbZbR#tbObR#tbR.4.4.4#t.saP.U#E.YaP.U#..UbWbibWbNbNa9#..gbW.Z.sbwaP.G.9aP#E.U#E#EaPaP.U.Y#3bBaIbw.Cb.#w.ybSa5bVbSbV#z.w#z#z#z.K.K.e.ea5bAa5.ea5.ea5a5.e", +".U.Y.YaTaT.Z.O.gbRbRbwbw#tbB.s.ZbTbT.Z#t.4.4.4a6#t.Z#t#t#t#ta6bDaIbZbB.n#m.n#3#3#X#.aq.HbH#..H#m.TbRaIa2.DaI.T#4bwbRbwbwbZb.bob.#4b.buaK#R.s.9#t#3.O.O.Obw.sbw.sbwbwbwbw#tbwbRbB.Z.gaP.gaP.gaP.g", +"aB#FbSbVbV#D#ubVaya8bl.8aybS#u#u#zbVbV#zbV#zbK#u#u#u.y.8.ybA.ybA.4bY.4.4#t#tbDaZ#tbR.4#t.4#t#tbL.K#tbwaI#5aIbLbFaIaIbwbD.U#E.Ubi#EbDbD.ZbT#xbT#xabaRaR#oabat.O#Z.s#t.SbLaI#4aKb.b.b..Kbu.7.Qbub.", +".w#b#b#Y.w#0.1#G#z#G#z#G#b#b#b#s.1#G#G#G.1bc#G#G#G#Day#G#G#G#G#G.w#G#GbV.1#z.w#b.kbnbKbn#s#DbVbV.K#t#iaP.ZbW.g.Z.s.s.gaPaP.Zbw.Za6.Z.Z.8#r#z#ra5#D.r.r.r#Gbcbmbm#G.1.w.wbc.w#G#G#G#G#G#Ga0#P.1.r" +] + +button_xpm = [ +" 96 96 254 2", +".. c #9c3218", +".# c #a4733e", +".a c #bc450a", +".b c #d4700c", +".c c #dc8c29", +".d c #bc5e00", +".e c #d46b37", +".f c #945431", +".g c #bc5a2c", +".h c #8c4e4b", +".i c #d47e16", +".j c #bc7422", +".k c #d47d3a", +".l c #d45e28", +".m c #ec9b3e", +".n c #bc6b43", +".o c #d45a13", +".p c #a45236", +".q c #dc8848", +".r c #e46b1b", +".s c #bc652f", +".t c #a46243", +".u c #bc6920", +".v c #a4391e", +".w c #e47b35", +".x c #9c6b30", +".y c #d46d24", +".z c #ec8a29", +".A c #bc452a", +".B c #e46833", +".C c #bc702e", +".D c #c47845", +".E c #b15314", +".F c #e47e10", +".G c #bc5a18", +".H c #bc6145", +".I c #a44d16", +".J c #cc5728", +".K c #d47439", +".L c #a45b39", +".M c #cc5815", +".N c #dc8f4c", +".O c #b46239", +".P c #bc5307", +".Q c #d4794f", +".R c #d47624", +".S c #cc6c2c", +".T c #cc6941", +".U c #ac5222", +".V c #e49328", +".W c #e4754d", +".X c #d4650b", +".Y c #ac592c", +".Z c #c05e2d", +".0 c #e4751a", +".1 c #e47d29", +".2 c #9c6143", +".3 c #e45f2b", +".4 c #cc632a", +".5 c #cc660d", +".6 c #b44b13", +".7 c #d48442", +".8 c #d66228", +".9 c #bc6221", +"#. c #b45736", +"## c #d47714", +"#a c #dc8936", +"#b c #e48237", +"#c c #cc530c", +"#d c #8c522b", +"#e c #dc8819", +"#f c #ec9129", +"#g c #bc7936", +"#h c #d46f50", +"#i c #bc521d", +"#j c #bc553b", +"#k c #9c523b", +"#l c #f49a45", +"#m c #bc7548", +"#n c #ec8643", +"#o c #a86d3a", +"#p c #a44d21", +"#q c #a4754b", +"#r c #d46547", +"#s c #dc7937", +"#t c #c4642d", +"#u c #dc6c21", +"#v c #bc4d2e", +"#w c #cc7e53", +"#x c #c45917", +"#y c #cc5c42", +"#z c #dc7036", +"#A c #ac5448", +"#B c #ec8f44", +"#C c #b45c4d", +"#D c #dc7622", +"#E c #b45222", +"#F c #d4651b", +"#G c #e47328", +"#H c #e58429", +"#I c #9c5f23", +"#J c #d47f2b", +"#K c #cc7116", +"#L c #eca24e", +"#M c #9c471c", +"#N c #d45b36", +"#O c #c46716", +"#P c #ec7836", +"#Q c #ac642d", +"#R c #c46f2e", +"#S c #c47551", +"#T c #cc5b2b", +"#U c #cc685f", +"#V c #bc4b3a", +"#W c #e49a4b", +"#X c #b44c35", +"#Y c #e48745", +"#Z c #ac613c", +"#0 c #e47234", +"#1 c #c46242", +"#2 c #cc5e1a", +"#3 c #b4683d", +"#4 c #cc7430", +"#5 c #cc7042", +"#6 c #bf4b0d", +"#7 c #dc6e13", +"#8 c #e48c21", +"#9 c #9c3445", +"a. c #8c432b", +"a# c #cc5e04", +"aa c #a43f33", +"ab c #b46d44", +"ac c #9c5e62", +"ad c #9c4833", +"ae c #b4742c", +"af c #a4522b", +"ag c #dc943c", +"ah c #b46000", +"ai c #c46309", +"aj c #a4441e", +"ak c #dc7f4c", +"al c #ac6e27", +"am c #ac4b4e", +"an c #ec9238", +"ao c #e48518", +"ap c #e47c4f", +"aq c #bc5c3e", +"ar c #d56238", +"as c #9c5840", +"at c #ab6946", +"au c #cc761f", +"av c #9c5024", +"aw c #bc4922", +"ax c #bc421d", +"ay c #e46927", +"az c #ec8836", +"aA c #cc513b", +"aB c #cc661d", +"aC c #b44a21", +"aD c #b4544c", +"aE c #ec8a55", +"aF c #9c5a20", +"aG c #94533f", +"aH c #c4701d", +"aI c #c46b42", +"aJ c #dc5a18", +"aK c #cc7b2f", +"aL c #e49046", +"aM c #c4520b", +"aN c #dc774c", +"aO c #ac4631", +"aP c #b45b28", +"aQ c #944e30", +"aR c #ac6e4d", +"aS c #a45f2a", +"aT c #b4612a", +"aU c #ec7032", +"aV c #dc872b", +"aW c #cc5939", +"aX c #b47844", +"aY c #dc843b", +"aZ c #c4601d", +"a0 c #ec7f36", +"a1 c #c47531", +"a2 c #c47344", +"a3 c #ac431d", +"a4 c #ac7439", +"a5 c #dc6735", +"a6 c #c4582a", +"a7 c #dc7c1b", +"a8 c #dc5d26", +"a9 c #ac5036", +"b. c #cc7742", +"b# c #ac4b13", +"ba c #ac5a37", +"bb c #dc5f0c", +"bc c #ec7a29", +"bd c #dc7813", +"be c #e48b37", +"bf c #f48e28", +"bg c #c44e1f", +"bh c #c44e3f", +"bi c #ac4b1e", +"bj c #dc6544", +"bk c #c44c2b", +"bl c #dc611a", +"bm c #ec7125", +"bn c #dc7d29", +"bo c #cc7752", +"bp c #c4473c", +"bq c #ec994b", +"br c #e49336", +"bs c #d46f16", +"bt c #bc600a", +"bu c #d47a46", +"bv c #d45b1e", +"bw c #bc653a", +"bx c #ac3c1d", +"by c #e47943", +"bz c #a46b2e", +"bA c #d46b2e", +"bB c #bc6c3a", +"bC c #e47f1b", +"bD c #bc5b22", +"bE c #bc6052", +"bF c #d47346", +"bG c #cc561f", +"bH c #b46044", +"bI c #bc5312", +"bJ c #d4775e", +"bK c #d4732e", +"bL c #cc6b37", +"bM c #cc644f", +"bN c #ac512d", +"bO c #cc6137", +"bP c #ec8552", +"bQ c #dc7944", +"bR c #c46339", +"bS c #dc6a2c", +"bT c #c45a21", +"bU c #dc6f44", +"bV c #dc732c", +"bW c #b4502c", +"bX c #cc6d1f", +"bY c #c46521", +"bZ c #c46939", +"b0 c #e48653", +"b1 c #ac6445", +"b2 c #e46e43", +"b3 c #c45851", +"b4 c #e48b2b", +"b5 c #9c5430", +"b6 c #944d49", +"b7 c #c46a51", +".waB.U#5#Dba.##u#sbn#H.8#z.0#Db2.4#E.g.e#T#F#z#4bL.n#EbSbm.kauaz#Bbnbr#B.y#b#bb4.w.z#D.z#haKaZbr#Ha6bLaubn.w#Yb4.z#0#ba7an#s#Yb4b4.8.wbnaVaOb3aBbS.l.K.4bL.S#i#5#0#u.w.w#u.w.1#D#zaP#AbK.y#.#a#u", +"#b#F.Y.T#u.O#q#D#z.1b4ar.wbn.0bS#raC#..T.4.lbK#4aZ#Zbi#G#G#s.S.1bebnbr#BbA#b.1.1.w.z#Gan#5aK#tbr.1a6#1aua7bS.w#HbCa5#0#DazbK.w#8#H.8#0aVbXbibRbsbA.l.K.e.e.4#x.T#0.8.wbVbVbn#sbVbSaT#AbVbS.gag#G", +"#bbS.YbL#u.O#q#D#sa7bea5.w#G#D.8.K#ibW#1.4.8.e.SbD.p#pay#G.k.Sbcbebnbe#BbA#b.1bn.1bc#Gbe#1aHaZb4#D.Zb.aLan#0#Dbda7bS.ybCbe.y.w#8be#ubSaY.G#X#1.ybA.8#z.K.ebL.ZbL#0#u.w#GbV.w.1bnbA.u#C#z.y#.aL#G", +"#YbVaTbL#ubaatbV#zbnbe.K#zbnbn#N#z.g.UbwbO.4.S.4#R.L.UbSay.k#Jbc#abebrazbK#bbnbC#GbC#ub4#X.u.Z#HaY.eaI#Wbr.w.1#H#HbV.8b4anbS#s#H#b#GbVbe.6bw.4.ya5.y.ebS.e.e#t#t#G#u#zbVbV.w#s.w.e.u#CbKbS#.br#P", +".wbVaT.Tayba.t#u#zbnaza5ar#D.1#T#zbTaO#.bwbL.8#t#tas.Y#Gbl.K.k.1beanazbrbK.w.1.1.1bc#0be#j.C.4b4.ybO.g#Wana0aya7az.w#2az#B#z.w#HaY.wbVaNa3.s.4bA.e.8#F.8#z.ebLbD#0#u.w#GbV#b.1#s#z.s#AbAbV#jag#G", +"#0#D.ZbLbS#.as#u#z#Dbe.e.4.R#s.J#G.4a9.p#.bR.SaZaP.f#Z.w#u.K.R.1bebqbrbe#D#bbeb4#PbC#z#aaO.CbL.1bV.T.Ibr#8a0.w#Han#Y#2anan#z#0bC#s#H#DaraC.s.4.lbAbA.lblbS.e.K#i#ubV.w#s#GbQbV.wa5.CaD.ybV#.#a#G", +".1#u.ObLbS#..2a8#z##azar#T.RbQa6#u.4#.aQbNbR.S#T.UaQ#C#bblbK.kbCaV#l#fbebV#bbr.z#G.0bSaYaa.sbO#D.S.Q.U#Laz#n.w.1b4#B#2anbebS#zbC.KaV#Dbpb3bYbX.l.8bAbvblbS.e.k.g#u#G.w#GbVbVbS#s.e.C#CbKbV#X#a#G", +"#GbV.gbL#u#..2#ua5#u#Y.e.J.R#sbkbbbA.Oa.adbR.T#2#Z.f#3#bbl.KaYa0bn#L.Vbe.wbeanaz#P.0bS#aaabw.e.0aBaNaP#W#8a0#G.0#8aE#2an#HbS#0.1.S.1.1.A#U.S.Rar.4a5#FbSblbAbQ.ZblbV.w#0#DbV.ybV.8.CbE#zbVbW#a.1", +"#zaybR#m#s.A#AbX#D.1#u.wbvbV#z.M.8bA.4#E#k#Z.OaZ.hafbA#zbAbA#D#Hbnanbr#8aVb4#W#f.wbebVak#M.ObL.R.Ya2.Gbe.1aza7a7#Y.1#F#B.y.k#Db4.y#saY.P.ybX.K.4.8bS#zbS#u.8bA.SbDby#G.1#s.4.KbAbV.SatbVbl#Z#D#G", +"#Ga8bR#g#s.A#Aau#D#0bV.w#F#Ga5.M.ybA.8#v.p.L#ZaTb6afbAbVbA.KbV#8#s.m#fbr#H#H.m#f.1#bbV.k#p.ObR.y.Oa2aZ#n#baz#H#H.w#0#uaL#O.k#D#b#F.w#b#2#zbK.KaB.ybS#GbS#DbSbVbAbT.wbV#G#s.4#zbS.KbAat#z#u#obV#G", +"#zblbwae#z#v#A.y#Gbn#u.w.y#z#z.l.ybSbA.Zba#k.LbNas.UbK#0.8bKbVb4bnaL.mbrbe.canbr#H#bbA#4af.O.S.y.OaI#tbea0#b#H#b.y.w#G#b#x.KbV.w.y#s.w#F#s#zbVaBbS#ubS#GbSbSbK#z.4bQ.r.1bn.y#sbSbV.SaR#0#u.Obn.1", +"#G.8bw.C.w.AbH.ybV.w#za0bS#0.wbS.ybAbS.8#.afaQaQ.L.UbVbVbS.K#sb4#Dbranbrbebe.m#f.1a0bAbL.Y.O.T#F#.aT.4.w#b#H.w.w.8bS.w#Y#x.SbV.1bS#0#z.y#0#z.y.8#zbS#ubV#GbS#ubA#4.w.0.1#bbKbVbV.y.4b1bS#u.O#G.1", +"#bay#taX#sbk.H.y.w#G#u#bbVbV#z#z#RbAbS.ebRafaQ#d#kaP#s.wbA#zbn#H#sbeb4bebebeanb4.1#HbV#tba.YbL.y#X.U.S.wbc.1#GbV#zay#0by.y.SbV#PbS#zbS#u#z.wbl.y#GbS#u#G#GbV.ybK#z#b.0.1.wbnbV#DbA.Sb1#0bS#3#0.1", +"#bbSbB.C#sbk#CbsbV#z.yby#u#ubS#G.O.4#ubS.4bNaQaQ.pbD#G.wa5#s#s#H#abebe.zaY#bbr#8#D.1#z.Gba.U.TaB.Ob#bK.wbe#G#G#s.w#u#G#bbKbAbV#G.RbV#F#s.w.w#F#F.w#0#G#0#0aybSbSbQ.w#G#G.wbVbA#GbKbAab#0ay.n.1.w", +"#b#u.sae.1bk.H#D#z#D.8.wbS#u.y#z#Z.Z.lbSbA#.b5.fba.Z#s#GbS#z#sbe#bbrbebrbnbnan.V#D.1#z.G.nba#4bvbB.6#s.1az.0#G.w#Gay#P#GbKbK#b#G#z.waB.w.w.w#F#u#0.w.w#G#G#0bVbS.ebV#G#G.1#z.8bS#z.8b1#0bS.n#0#G", +"#s#u.Zaebn.A#Cbs#0#0#F#bbV.y#u.w.taPbvaya5.Zafas#Z#t#0#G#F.K#bbr.wbeanbrbnbK.man.1.w#s#i#S.ObuaBaI.EbQa7a0.0#G#0#D#Gaz#u.Rbnan.0bebQaB#s#sa0#F.wbS#G#G#G#G#G#zbA.ebl#G.0bV#z#F#0bK.8.tayay.H#D.r", +".1#zbT.ZbQ.yaMbK.K#0.w#0aY.SbV#ubMa3.K#Farbg#.aSbD.4#D#G#D.5#Y#b.qaV.V.m#z.e.m#fby#D#J#1.H.uaK.ZbRbIbe.1a0.w#D#D#Gbdb4b0.J.wa7ak#H#n#xb4#H#z#zbnay#G#u#G.1.1#G#u#s#Tbd#0b2#GbA.1.8#r#Ia5#sala5#D", +"#GbVbT.4bQ.8bI.Sa5bV.w#0#saB.kbVbM.6.Kbla5.J.Z#Q.sbK#G#G.1aB#Y#b#bb4.Vbr#F#z#B#8#0bdbK#j#.aP.S.g.TaZ#B#H.w#P.w#D#0.Fb4aNbv.1#DbV#Ha0.Mb4#H#za5#D#0#G#G.0.1.1.w#D#s#Ta7#0b2#D.8#H.y#r.fbA#zal#z.1", +"#GbV.Z#tbQ.S#xbLbK.w.wbV#sbYbV#G#5#6.SbA#zbv#taT.Z#z.w.1#zbX#Ybn.qb4.mb4aB#zbe#8#0bd.R#j#.bt#R.g#1aZbe.1#G.wbV#D#PbCbe.ear#D.1bX.1by.l.1.1a5a5#Dbm#G#G.1.1a0.w#G#s.la7.wa5#Dar#HbVbF#I.4a5ala5.1", +"#G#z#tbLbQbA.G#RbA.w.w#u.KaBbVbV.e#E#x.ybV.8.4.sbTa5.w#Gbn.4#Y.y#YaV.m#H#F#sbean#Gbn#s.gaDaT#R.g#t.4#b.0#G#G#G#D#0bCb4#x.e#G.1aB#G#0.8.1.1bS.B#G#G#G#G.1.1.1#G#u#z.e#H.w#z#D.8#H#z#haS.4#zal.4.1", +".1bV.4bLbQ.eaZaIau.w#0#Fa5#tbV.1bA#x#E.SbV#u#F.4bG#z#0#zbVbYakbX#YbnaL#b.ybV.1an#P#H#saqaq.u#4#j#1.S.1#u.1#0.1#G#0#Hbn#ibjbV#b#2bca5a5.1.0.l#z.0#G.1.1bcbc#b#D#u.war#8by#z#u.e#b.y.Tbz.4#za4.J#D", +"bc#z.4bZ.Q.S.9aI.R#b.w#F.K.4bV#G.R.4b#.T#u#D.y.8.8#GbcbVbK#R.qbKbebn.1#s#Dbs#Dbe.w#8aY#jaq.s.SaO.Z.S#D#7bm#G.w#u#0.zbn#xa5#G.1#2#bbSby.1#G.l#0.0.0bca0az#Ha0#G#u#0.B#8.w.K#D#r.1#FbO.x#T#zaX.J#D", +"#GbK.4bR.K.SbD.C.Sbe#0bG#zbAbV#D#DbL.v.T.y.0blarbS#G#G#D.KaH#Y#s#H.wbAbV#D#D#D#G.w.zaV#.aq.sbwax.gbA#D#7#G#u#G#u#uan##aW#NbV#D.4#bbvap#H#H.8#sa7.1.1bc#Ha0#H#0#D#0a5#8bQ#z.y.ebn.y.T.##x.KaXbkbV", +"#G#ua6#t.T.4.G#3.R#b#zbv.K.ebn.r#DbL..aI.4#7blar#G#Gay#u.KbY.N.cbnbe.ybVbn#G#b#u#b.zaYbW.H#R#tbx.Z.k.w.r#0ay.1#GaJaz.5bO#T.w#DbAbnbg#b#Hb4bVby.F.0bC.1.1.1#b#GbVaU.8#HbnbA.R#N.1#s#h.#bgbAa4#vbV", +"#G#u#tbO#t.K.9bw.lb4#G.8bla5aWa7ay.4.YaD.K#ublblay#G.1.y.K.Z#Y.iaY#T.R#Nbe#zbC.1#H#Bb..ZaPb.#3aFaPak#G.0.1#D#D#G#D#b#xbAbv#G#ubA.w.Mbn#nbVbS.1bdbcbm#P#G#Gbc.1#G#D.w#u.w.w#2bK#4bK.K#vbw.Q#tbt.K", +"#D#u.ZbR.4.ebD#tbAb4#u.8#u#z.lbn.rbAbabN#tbS#u#u.B#G#D#D.e.4#Ya7#b.4bnaW#H#zbC#GbcaL#4aTbW#4aTaS.UbQ#D#u#z#D#D#G#u#baBa5bS#G#u.K#b#F.1bebVbV#GbC#H.1#P.1.1#H#GbVbS#G#u.w#saBbA.SbAbF.gaqb..u.G.K", +"ay.y#t#t.Z.e.G#Ra5#Hblay#Db2.laVaybK#.#p.g.ybVbV#G.w#7#z.4.e#abeaY.ybn#T.1#zbC#D#G#b.S#t#x#5.Z.Y.U.kbSbl#GbA#u#G#u#b.4.e#z#G#FbAby.ybeaz#ubS.1bc.z.1#P.w.1bc#DaybV#G#F#G.w#2.S#t.R.e.g.OaI.9#x.K", +"#G.8#tbR#2.ebT#R.ebC#F#z#GbS.4#HaybA.Zajbi#tbVbV#0#G#F#saB#s.Rbe#bbAbn#Tbna5#GbCay.wbLbR.ZbL.Z.O#E.Kbl#ubVbKbSbVbl.w.4.8#0#ua#bVbQ#ube#b#u#G.1.1bf.0.w#Pa0#H.1#GbV#G#u.w#s.M.S#tbn.e#1.gbZ#R.9.K", +"#G.y#t.4#T.e#2.S#ra7#u#0#DbS#N#HbVbS#T.U#p.sbK#u#G#G.y#s.y#s.y#zaVbKbn.J.1a5bC.1#G#s.4bO.4bLbD.sbWbF.8ay#z#zbA#u#D#z.4.4#0#u.o#s.4bSbe#H#u#G.1.1.z#D#G.w#ba0.1#0#D.w#D.wbV#x.S.S#s.SbR.ObZ#5bYbO", +"#GbA#t.4.4#z#2.S#N#D#u#0.rbVarbn#GbS.4#vb5.O.Sbl#DbVa5.K#Dbn.ybVbn.Kbn.J#D#z#G.1.rbV.ZbR.Z#T#i.s.g.ebl#G#0.K#u.8#0bA.e#2.1#u.y#b#xbAbebn#D#Gbm.0beblbV.w.1bc.1#G#D.1#Ga0#s.M.S.Tbn.S.T#jbBbu.4.Z", +"#G.ya6.4.4#zaB.SaAbd#u#0bdbVarbn.w#u#F.g.pba#t#F.0#u#s.8bnb4.y.8aVbQ#Hbkbna5.1.w.1#z#tbL.4.Z.E#t.gbA#uay#sbS.K.y.w#2#z.4#0bl#D#Ybg#zbebC.0.w#G.1.1bvar#z#u.1.1#G#D.1bV#b#z#2bLbL#b.S#5#..g.k#t.Z", +"#GbAbD#t.4#0aB.yaA.y#F#0.r.w.8#DbybSbv#t#kas.s.X#D.y.Waibe#HbVa5aVbQb4bkbna5#G.1.w#s#tb.bR.4#ia2.g.y#F#u#GbKbV#ub2#c.K.4bV#7#DaYa6.kaza7#D#P.1bc#z#Tar.8#F.0.1.r#G.1#u#P#s#2bL.S#b.S#haP.U#5bY#T", +".w.4aI.sbAbSbK#ta6bsbd#za5.0bC.l.1#0bla6.Z#3aIbT#sbUaVara7.q#ebn#b#D#YaA#8#s#u.wbv.K.L#u#R.4#Z#F#T.e.8#z.e.l#sbs.w.P.e.w#G.r.r.1#T.wa7.z.1bea0.F.K#D.RbK.e#zbV#D.w.1#G#u.w#zaB.K#Y#ubOaC.gbobwaP", +"#GbYbZaPbA#u.y.g.Z.R#u#0#0.0bn.4#G#P#u#TaPba#t.G.ybQ.c.4#8#YbraYbn.R.wbp#ebn.8.1#F.K.L.rbL#t#Zbl#T.eaB#z#z.4#G#7.1#6.S.w#u#G.rbV.l.w.0be.1.wa0#8bV.R#J.K.4.8bV#G#G#G#G#G#b#saB.K.w.ybOaCaPb7.s.G", +"#G.4bB.U.SbVbAaPaW#D#Da5bSa7#H#2.w#PbSbA.ZaPbw#t.y#zbe.4br#sbq.c.w#D#s#Vao#z#u#G.l.KaS.rb..4afa5.4bS#Fa5#zbv#u#G#0#6bAbQ#u#G.w.8#z.wbd.z.1#b#H#HbS.y#HbQ#T#T#zbn#G#G.w#G.w.waB.K#s.8.T#v#.aIaPaT", +"bV.4.n#EbA#zbKaP#N#u.0ay.B#HaV.E#G.w#GbS#t.ZbZ.SbV#zbnbVbqai#WaL#b.1aYbp#e#zbS#G#F#z.L.rb..4afbS.lbS#F#u#z.8#u.1#0.M.8#z.o#0#baZa5.w#u.1#D#b#H.1bAbVaYbQ.8.J.y.w.w.w.1#0.w#s#2.SbVbA.K.gaPaIaP.Z", +".1#t#m.Y.SbVbK.g#N#u#7a5bVb4bn.6.w.w.0bS.S.saI#tbVbV#s#s#Y.daLaLbe.1bQbh#8#zbV#G.l.Kba.r.k#tbNay.l#u#F#ua5#F#u.1.w#2bAbS#F#z#Y.GbVa0#u#D#7az#b.y.ybe.1bVby.laB#b#P.1.w#G#GbVaB.S.y.e.K.g#..n.U.O", +"#z#t.naP.S.y.SaT.e#F#7aya5#HaV.6.w.1#G#G.ybD#tbk.4#JbQbn.Kbs#Bbebe#Hbnbp#8.ybSbSaJ.K.O.r#4.4#Z#u.8.8#ubS.8.lbVbn#z.e.ebSbbay#bbY#Ga0bS#D#Dbr#bbG#D#n.1#u#b.eaM#b.w#G#G#GbV#s.SbK.4.4#5aPaPbwb#.O", +".wbD#3.U.K.y.S.Z.e#7#7b2#ubnbebTbV.wbC.1#D.Z#tbT.ZbK#h.c.e#8#b#HaV.1bKbp#8.8#z#ubv#z.nbm#R.y.na8bS#FbV#zbG.ebn#D.4.KbKbV#7ay#baB#G.wbS.w#Hb4#s.4#Daz.1#D#nbV.M#H.w#G.w#G.w.wbK.e.lbA.KaPaPbwaf.O", +"#baZ#3#..KbS.S.O.ebs#D#0a8#7be.T#u.1bcbcbn.Z.S.TbLbY.TbrbUanbV#H#H#H.Rbp#8bA#zbSbl.K#mbm.4.ea2bl.ebG.wa5bg.S#s.y.G.k.KbVbm.0.w.Sbc.w.B#Bb4#H.y.e.1an#H.1a0bV.5aY.w.wa0.w.w#sbA.SbA.ebu.Z.O#m.Y.H", +".k#t#X.UbQ#4#tba.B#u#ubV.ya5a0.X.T#H#P#Ga7.y.n.u.sb..K#s#Hbe.i.k#D#YbT.e#0bl.waibA#RbQ#z#RbK.3.y#F#r.y#DaA#u.z#x#v#K#z.w#F#Y.g.R.w#HbCazbCbea#bnbean#H#0a0#G.y.1#G#PbV#b.X.1bV#t.y.KbL#R.9#5.s.9", +"bnbR#.bW.K.S.ZbabS#u#D#Gbl#z.w.XbO.1bcaUbC#J#1aH.s#R.k#ubean.RbK.1#s.G#z#0#F#saB.8.C#za5aHbAay.y.8#rbS#ubvbAb4bXbhaBbV#z#7.wbkaV#b.w#D.zbcbe.X#sbean#b#G#b#G.ybVbm.w#Daz#D.wbV.4.y#z.4#RaPaI.saP", +"bK.4aqbi.KbY.ZaPa5#u#GbVa8#z.w#ubOa7#P#Pb4aY.T#O#R.ZbQ#2#YanbVbKbe#zaMbQ#0.o#D.S.l.j.Kbv.ubV.B.R#F#rbS#u#TbAb4bAbR.X.y#z#ua5bg#a#b#H.0#H.1be.y#sbebe.1#G.w#G.ybVbm#G#D#Ya0.wbV#t.ybQ.4#t.ga2.Z.Z", +"bn#t.HbW.K.S.4.Z.e.ybV#D#u.w.1#D.ZbC#P.w.z#abFaB#4#tb0.Man#YbnbKbebV#2.w.w.o#ubX.8#R#z.l.u.K.BbK.l.e#u.8.l.R#sbAbObs#ubS#DbS#Tbe.wbV#D.w.w.1.y#b#Haz.1#G.w.w#u.ybm.1bVaza0#b#s#tbA#s#t#t.s#5.saP", +"#s.4bHbN#5.ybA.ZarbA#G#u#0.w.1.1.Zbn#G#0az#Y#z#D#sbAaE#xazbe.1#s.wbV.4.w#G#ubVaBa5aubQa5.ubAay#J.8#F.8.8#FbKbObY#rbnbV.J#D#zarbnbV#D#G#P#b#ubVaYbe#bbc#G.w.wbV#uay.w.w.1#G.w.wbD#T.K.4#t.O#5aPaP", +"#D#t#.bNbL.ybK.ZbO.S.w#u#Ga0a7.1a6#H.w#Gb4bebQ.1.w.w#Y.ybe#H#b#b#G#zbV#s#G#G.1#2#zau#0a5.jbA.B.Kar.y.8.8#D.K.gbtar.1bVbGbnbS#z.1#D#u.w.w#b#Fbn#saz#b.1#G.w.w.w.y#u#P#b.0.1.1#YaP.M.K.Z.Z.ZaI#EaP", +"bV#t.Ha9bLaB#z.4a6.4#b#D#Ga0#ub4bD#H.wbSao#bby.z#HbebV#Daz#Hb4#b.w#ubV.1.r#G.w.4#zbY.ea5a1bA.8bKarbsa5.8a7.K#V.Z#N.1bVbG#b.8a5#8.1#G.w.w#n.5.waYazbc#P.1#P.w#P#F#G.waz#Dbc#Gbeb#bGbU#t.saPb7.gbZ", +"bVbL#m#..SaBbV.l#EbLbe#G#G#b#7be#i#H#PbS.1.w.waz.1#n.X#ban#8b4#Ha0.ybK.way.r.wbKbSbt#2a5aK.Ka8bKarbd#z#ra7#s#X#R.l#7bV.lbe.Ma5azbe.1.1.w#n.X#baVaz#H.1#P#0#P.w#F.w#0.w.0az#GbQb#.4bQbL.Z.Z#5bwbo", +".K.K.T.gbO.4#s#Fbiapbca0.0be.1.1a6by#G#G#bb4be.zaY.R.y.1az#b#s#b.za5.8#H#2.1#Dbv.K.6bQ.K#F.Kbn.SblbV.k.4bQ.4.MbX#4#Har#D#s.4###bby.1anbebe#Fbe#baz.w.w.1bV.w.wbvaz#D#G#G#G#s.K.UbO.y.e#O#C.D.U.i", +"#t#tbRbW#R#tbV#2#E#b.1a0#Daz#s#GbTbybc#G.1#bbr#f.q#D.y#baz#H#DbV.za5#F#b.Jbna7ar#4#6.K.4.SbV.y#FbS#z.KbYbybAaBbKbLbn.8#G#s.Z##.w.w.1azbe.1.ybe.waza0#b.1bV#b.w.o#b#D#G#G#G#zbA#EbO.R#r#OaDbB.U.k", +"#ibwaI.Z.T#t.K#2bD.W#Gbc#G#b#H#GbDby.way.1#ban.zbe.y.y#b#n.w.y#D#Har#u.1#2bnbd.ebOa6.K#x.4bA.4.ya5bV.KaZbQa5.y#s.Sa7arbV#s#x.5.wbV#bb4an#u#saY#sbe.1#bbe.1#n#b.M.wbV#G#GbSbV.e.9.4.y.K.5#AbB.U#J", +"aPaIa2.s#5#t.K#ObDbQ#G.1.w#b.1#GbD#z.w.rbVbebr.zbQ.y.y#b#nbV#ubVaV.l#z#G#2#D#DbF.4bL.Kbg.Ka5.4.8#0.ybK.G#z#zaB.k.4#Da8.1bnbk.b#bbV.wbebr.y#Y#s#JbV#sazaz.1#b.1#2.w.w#G#G#GbV.K.S.S.y.KaHam#3aO.k", +".Z#5.Dbwb.#t.K.Sa6#z.1bcbe#b.w.0#i#z.w#Daybeazb4#s.8bV#n.w#GbV.w#H#T.w#D.l#Dbs.T#T#z#z#x#z#z.4.8bSaB.K.G.e#zaB.R.4#Dar.w.wa6.R#b#z.1bebeaB.NbA.S.SbVbebe#G.1.1#2#G.w#0bVbVbVbV.ebLaB.e#KambwbW#J", +"bWaIaIaP#5.S#s.e#t#s.w#G#Bbn#H#GaP.8.w#GbVbe#b.z#s#D.wa0.1#G.1beaY.Jby#7a5bV.5#1aBak#sbgbQ#z.8bA.BaBbQaZ#z#z#2.S.4#Da8.1#z#Ta7a0#s.1bebnbXaNbRaZ.4.S.w.1#G.1.w#2a5#0.Bbl#ubS.ybVbO#O.ebYambwbWbK", +".gbL.T.G.K.S.KbA.4#z#P#D#Y#Da0bc.s.4#P.w#Gbe.1a0#sbn#ba0.1.0#b.wbn#vby#7#z#z.5#jaB#b#z.M#z#z.8#FbS#2aYaZ.e#zaZ.R.4#Da5#GbVbO.1by.w#Dbr.R.S.QbZbD#1.S#z#G#u.w.waBbl#0bS.8bVbVblbSaq#x.T.Sam.CbWbn", +".ZbF#4.9.k.SbV.8.4#z.w#ube.y#bbc#t.4.w#P.w#b.w.zbn#D.1a0.1.1#H.1aVawby#F.w.w#O.g#Fak#DaMbV.ybA.l#u#2akaZbA#z#2bAbL.0ar#GbVbObn.w#Y#D#BbX.k.Qa2.sbM#tbA#u#G#nbybG#u#0a5bl#0bV.y#G#.bT#r#4#X.OaPbn", +".saIbwaPb..e.K.S.e.8#b#D#P.1#G.1.KaMb0#Da0bman#Jar#Y#8a0.w.w.1bC.ea7#GbS#b#T.Qahb4#D.y#2bS#zbl.ybV#Mbu#tbl#w.yblay#0.R#Hbk#D#H.1#bbV.V.4b4.TaubRbZ#t#t#z.1.1#b.9ar.w#ubv#zbdbs.K.O#t.KbD#3#ob##b", +".saIbR#E#5.4.y#2bA.4.way.w#G.w.1#s#x.q.y.w.0#nbn.l.w.1.1.wbV.1bCbL#H#G.8.1#x.Q#O#b#D#F.8bS#z.y.y#uav.K.Sbl#m.y#F#D#zbV#8bp.RaV#Hbeak.cbQ.c.T.S#tbR.s#tbK#G.1.w#OaW#b#ua8#0#ubs.K.Y.4#z.G#Zabb##s", +".gbwbw.UbL.4.SaB.S.8by#D.w#G.w.w.waZbQ.8#G#ube#J.l.waz.0.1#u#bbna6b4#z.l#u.M.K##az#D#FbVbSbS.y.8#uaS.SbLay#3.R.o#ubV#z#8bpbn#HazaYaL#Db0b4bu.R.S.Z.Z.Z.K#G.1#baB#i#b#D.8#0bdbs#rafbL.K#x.Oab.EbV", +"aPbDbw#EbZ.SbA.ybA#2#s#G.w#G.w.1by#2.K.4#z#G.wbK#ubnaz.X#P#Fbe#Da6bebV.l#GbG#Nbn#b.y#F#s.y.8bK.8bl#Z.4bF.0ba.K.oaybVbV#8bp#s#Hbe#JaL#OaLaY.w#s#z.Z.s.Z.4#u#G.w.y#iaV.1.Ba5.r#D.l#pbL#zaZaP.n#tbV", +"aP.UbZ#EbZ.K.K#z.e#2.wbV.1#G.1.wa0.8#r.4#0.w#z.y.1.waz#7a0#7#Y#2a6#b#u.8bnbl.Jbn#P#u#F.wbSaBbS.4#u.O.4b.ay.pbQ#F.1#ubAaobh#bbnbe#saLai#BbA#s#z#u.Zbw.ZbObS#G#b#D#iaV.1#z#0#D#u#y#pbL#saZaPaI.K#G", +".Z#Eb.aPbR.KbKbK.KbG.w#G#0#u.w.1#P.y.S.e#z.w.ybA#H.wa0#u#b#D#bbgbO.1#Fa5bna5bg#D#z#u#F#s#D#2.e.4bl.O.4#5.r.p.Kbv#H#F.ya7bhbe#D.1#Ybq.SaY#Tbn.ybs#taI.g.Z.8#D.w.1a6bnbn.B#0#D#D#T.I.4bV#2aP.C.K#G", +"bw.UboaP.ZbL.ybS.K.M#s.w#G#G#G#D.1#G.S.e.K#0#FbKbCaza0.1.1.1#s#ia5.0#F#s#Da5aw#bbl#0.obVbV.M.e.4bl.O.SbOaJ.LbQ.ya0#F#D#8bhbe#D#sbe#B#sa7.4.1.e#F#taI#.#j.l#u.1.1.4.1.0a5b2#D#u.Z.UbLbS.SaP#t#z.r", +".Zbib..U.g.S.S.y#zbT.w#s#G#u#G#GbmbV.S.e.ybVaB#s.Fa0.wa0.0b4#z#ib2.0.oby#D.eaxaY.o#0aB#ubV#2.8.4blaP.e.Z.o.Lbubl.wbl#s#8bhbe.y#b.1.V.W.b#rbe#z.RbYaI#.#v#Tbl.1.1.e#G#7#0#0#D.R.Z.U.S#zbV.s#R#s.r", +"a6#E#4.YaP#h.4#ubL.4#z.w#G.1.0#D#G#G#G#u.8bG.8#zbC.1a0#zbV#b#z.J.w#GbbbVbAaB#O.1#F.w.8bSay.o#FaP#5a6.4#tbR.Z#zbV.1bdbS#DaAbVbQ#e#BaBaEbA.4#sbs#Dbl#tb1#A.Zbl#u.wbV.y#zay.0.1.y#2aT.4bVbVaZ.9#say", +".ZbDb.#3#.bF.y#D.T.S#z.w.1.1#G.0#0bc.1.1bVbA.y#b.1.1.w#D#Gbe#z.l#b#u#u#GbA.S.y#D#D#s.y#zay#F.KbtbZ#i.8.Z.saZbA#u.wbCa5#DaA.RbQbn#B.X#Y.4.KbV#u#D.o#tba#k.g#2#u#sbn.y#0#G.rbC#DaB.Z.S#u#sbY#t#s.r", +".ZbDbubBaP.TbA.1.KbA.K.w#P#b.1.0#0.wb4#P.wbVbnazbC#H#0#u.1be#DbA.wblay#0.4.S#z#D#0bV.8.1ay#u#saP.g#i.4.Z#tbDbK#7.1bCa5bnaW.R#zbn#BaB#Y#x.KbVbn.0#u.4#.a9#i.4#u.1bQ#FbS#G.0.1#D.S.O.4#u.w#tbYbQ.0", +".8.ZaKaIbNbRbK.wbL.SbA.w.w.1#0#D.B.1#P.1.1bV#H.z.1#b#G#F.1be#7#s#zbv#0.w.4bT#sbS#G#u.y#zblbl#saPaP.Z.e#tbR#t#s#G.w.1bV.1aW.y.Kbnbr.y#YaM#s.y.1#GbSbA.Z.YbW.4bV.w#b#FbS#z.0.1bV.y.O#TbVbV#t#t#s#G", +"#rbT#RbwbN.g.K.1#t.4.4.w.way.w#GbS#G#Hbc.1.1ao.z.1#PbV#uazazbs#bbU#c#0#0.8.6#z#u#G#F#u#Gbb#F.k#E#.bRbF.Z#t#R#b.1#GbC#zbn#N.R.eaV#sbKaYaZ#s.y.1#G#G.l.ZbW.U.gbA#G.w#2bS#G#u.1bVbSaq.Zbl#z#tbY#s.0", +"#z#x.s.CbNaP.Kbn#T.S#F#z#0bl#0bVay.w.1.1.1.1bc.z.1.w#z#u#bb4#u#b#s#c.w#zbA.a#z#D#G#FbV#Gbl#u.K.YbaaI.K#i.s.Sbe.z#s#GbSbC#r#D.KaV.RbQ.k.y#s.y.1#Gaybl.l.ZbN.ZbK#G.w.oa5#z#u.1#s#u.Oa6#FbSbY.Zbn#G", +"#rbT.9b..ObW.KbVbL.K#T.w#0#F#0ayb2.1bc.1bc.wbcao.1#G#zbV.w.1.ybQ#s#2.w#F#z#2#b#7aUbl#0.1#u#GbLaPbN.Hb.aC.saK#Y.z#0.1bV.1#r#D.eaYbAaLaBbK#Dbn#G#G#0#ubSbLa9#Z#z#G#Gbv#z#z#F#D#0.8.H.Z.8bA#tbY#s.1", +"a5#x#t#w.HaP.Kbn.K.K#2.w.wa8.wbS#0.w.1.1.1#Pbcbc.1bV#0bV#sbV.lbQ#z#u.wa##zbK#B#7#0#u#D#G#G.wbObN.p.n#h.E#taKbe.z.w.1bSbCbFbV.ebn.KaL#x.k.y#b#D.0#ubl#u.4#pbN.S.rbV#F#z#z.o.1.w#F.H.J.la5bY.s#sbc", +"#Dab#3.ybw#Z.K#zbnararaB#bbGbS#G.1bc.1.0bc.1.1.0ay.w#F#n#sbeai#JbA#D#b.4.e.1.z.o.B.w#u.1#DbQbLaPb#.Z.g.ZbDaka0.w#GbV#G#bbsbea7bnbK.q#4bA#G#G.0#Dar.3.y.R.U#9.Tbd#uay#r#z.MbVbe#Kb1bD#2.e#t#tbn.r", +".raR.ObSbw#Z.KbK.1ar.ebsaY#T.e.1#GbCbc#Hbc#H.1.1bV#0#F#nbVbe.5bV.lbd#b#N.8bnaz#u#u#0.r.1#ubK#t.Z#EaIbR#1aZapbe.1.1#u#D.w.ybebnb4bn.q.S.4ay#G#D.Rbla5#u.RaP#9.Tbd.r#z.ebU.M#Gbeaub1.g.4.K#t#t#s.0", +".raR.Oa5bwba.e.y.1ar.e.y#s.8bS.1#u#Ga0a0#Ha0.1#GbVbV#F#bbV.w#FbVbv#D#sbO#T.1az#0#u#G#G.1#ubK.Z.s#EaI#t.ga6#Y#b#G.1#DbV#DbK#BaVbeaVaY.S.4bV#G#D.y.la5#u.i.9aabOa7.r#G.e#z.M#0#b.y#Z.Z.8bQbL#t.w.0", +".r#o.ObVbwaS.K.S.1.ebA#D.w.e.e#D#G#G.1#Ha0bc.1.0.w#u#F#P#u#z#ubS#T.1bnar.Jbn.1.w#u#G.0.1#Dbn.9bw#E.Taq.gbT#bbn#uan#G#b#Dbnbqa7be.w#a.4#F.w#G.RaBaB.ebSbn.S#X.Zbd#GbV.4#z#F#0#b.S#Z.gbAbQbZ#R#sbc", +"#GabbwbS#3.p#4bK.wa5.e#Dbnby.lbnbV.1#Pbc.1.1#G#G#s#u#FbybV#u#0#G#T.w#D#r#x.1#Gby#G.1#G.1.1bQ.Gbw.Z#5.Za6.Zak.w#D#B#H#b.y#baLbn#a#b#baB.8.w#0bAbD#t.4bS#D.y.g#vbn#GbV.4#z#u#GbQ.y.L.ZbAbU.S.s.w.0", +"bcat.sbV.O#k.K#4#H.ebAbC.0.W.4#Day#G.w.1.0#D#G#u.w#u#u#bbV#F.w#u.l#H.X#r.lbebCa0#G#G#G.1.1#Y.G.C.gaIbW#i.g#s#D.0azbe.1.5#YbeaYbe.w.wbX.y.wbn.4bD.ubh#N#ubV.Zbgbn#G#z#2bQbV.w.w.y#Z.g.l#sbRbY#s.0", +"bm.Obw#z.Ob5#4.SbebSbA.1#Db0.Jbn.8#G.w.1#Gay#G#G#s#u#u#Y.1aBbe.R.ybe.5#z.Kan.0a0#0.1#Gbc#baLbI.C.gbR#EbWbT#z.y#Gb4anbnbsaLbn#a#a#H#b.ybA.w#zbOaPaT#V.l#FbVbOa3#s#0.e#2by#G.1bn.Rat.Z.4#z#t.s#s.0", +"bm#Z.s.w.Ob5bL#tb4.ebSbC#7bPbGbV.8ay.w.w#G#D#0#G#0#ubV#n#saibe.R#0an.b#z#z#lbd#0.1#Gbc.1#H#Y.EbZaIb..gbR.Sak#G#nb4.m#b.ybq.RaLbea0#b.y.y.wbS.4.g.O#XaA#F#DaraxbQa5.ebTbQ.1a0#G.y#3.Zbv.K#t#tbn.r", +"#G.sbw#z#2bNa2bSbV.8bQbVay#G.y.SblbS#Gay#G#0#G#ubybvbe#b#z.4.q.S#8#b#za8#Daz#7.w.w.r.1.1#H#s.GbBaBb.aP.CbAbn.1b4ananan###Bbn.mbnb4#b.ybv#GbnaP#ZadbN#jbSay.MbD.n.1#z.4#z#bbCbV#zbwaPa6#5bZbD.y.1", +".1#tbw#z.4a9#5bV#z.8.w#G.r#G#ubAbSbS#z#0#G.1#0bS#z.o#bbn.y#2akaB.1.w#0.y#0az#Dbn.w#G#G.1#baY.9.C#2bL.Y.s.S#DbC#Hazbeana7brbn#Wbnan#b.K#u.w#bbDb1#k#k.g.Saybv#xbw.w#z.4bK#P#G#G#z.s.g.g.KbR.ZbV.1", +".w.Sbw#z.8#..D#u#z.y#s#0bmbm#D.Ka5bS#G.w#GbS#G#0a5#F.1#DaB.4bQ#2#D.w#zbS.wbe#u#0.wbV#G.1#b.KaP.Z.ZaIbN#..S#u.1.1b4anbe#Hbebebrbnbe.w#z#u.wbn#E.LaG#ka9.4#zblaZ.sbV#z.4#z.w.0#D#s.H#i#x#5bZ.Z#s.1", +".wbLbw.K.8.O#5.8#GbS.w.1.r#G.wbVbS.8bV#0#G#ubVbV#u.yaY#D#2.ebQ#2.1bVa5.8.w.1bSbS.w#G#G#G#GbA.g#.bLbRba.O.K#D.1.1b4anb4brbebrbrbn#Hbn.KbS.w#Db#.fb6aG#kaq#za5.8.Z#zbV.S#s.way#GbnbBaP.g.TbR#t#s.1", +"bcaI#t.K.8.Oa2.8.w#z#z#0#Gbm.wbKa5blbVbV#G#u#ua5.y#D.wbVbGbQ#baB.wbSbA.4#b.RbVbA#0bV#G.wbVbY.Z.O.TbR#.aPbQ.ya0#b.z#Bb4anbe#B#Y.ibe#sbV#s#b.Rafb6#k#kadaP.e#zbA.4bS#s.R#s.wbS#D.1b7#i#x#4bR.9bV#G", +".w#4bw.e.8.OaI#u#z#z#z#G#G#G.w.4#za5bS#GbVbVbVbS.4bKbV.K.MbQaY#FazbVbAaB.q#F#GbS#G.1#Haz#saBbZ.H.e.gbabN.q#7#b.zan.manbebrbrbrbn.1#D#zbV.1.R.I.ha9.L#kbN.4#zbA.8ar#s.Rbn#0.B#GbnaI#E#i#5.s.Z#s#D", +"#GaKbR.e.yaqaI.8#z#sbK#0#G#G#saZa5bAbSbVbV#zbV#u.l#z.ybV#x.w#bbdazbV.K.Sbr.5.w#z.1bcbcaz#baBbZ.O.ebWbabi.qbs.zb4ananan.1#Bbe#Wbn.1.y.y#DbnaB#M.h.g.Oa9bibTbAbA.8.J#sbn.Raya5bVa7aI#E#i.KbR#t#s.0", +"#Gb.bBa5bA.Oa2#u.K.K.4#z#G#GbQbDbA.8bS.y#ubVbVaB#r.KbA#zbg#Y#b#Ha0bV#sbKaLa#be#0.1#H.1#B.1bY#taP.KaPaP.U#Y#7.z.zananan.ibqaV.mbn#b#DbV#z.1bXafac.ZaI#..I#i.lbA.8.J#s.i.ya5a5#DbdaIaC#ib.bR.4bQ#D", +"#Gb..ZbAbAbaaIbV#zbA.ybKbV#sbV#Far#z#Dblblar.8aB.y#zbR.KbG.w.1.z.wbV#T.can.Sbr#8b4.w#nb4#L#.bJ#R#z.g#3a9bq#F.z#H#f.mbe#sbe#D#L##bC#s.ybl#P#3.2.I#tbL.g#..paP.e.obTbQ#s#2.ybV.y#FbA.O.L.4.4bB#a.0", +"#Gb..ga5.eaPbB.ya5bl.8bS#0bn#s#u.Z#zbV#Fa8.8bA.y.8#4bR#1.8#G.1.1#PbVaAb4br.e.V#8an.waz#8#WbiaIbX.k#v.uajaL#Fbc.1#fbeanbnaLa7#La7#8#sbK.r.w.O.x.Y#t.e.gbWadbN#4bl#xbQ.K#2#ubVbV#D.lba.LbZaBbwak.0", +"#G.KaP.e#z.ObZ.y#za5bSbS#z.w#0bV.g.K#s#ua8.lbl.y#F.4.Z#i#z#G.0.w.w#DbOan.V.ebeanbr.w#bbCaLbi#..Sby.g.saObe#u#H.1#8be#B#Dbebr#L#8bc#sbKay.w.Y.LaT.4.K#taP#pbibA#u#2#s#zaB.ybV#sbV.4bababLaB.s.7.0", +"#Gbu.ga5#s.Obw.yby#0bSbS#0#zaybSbabZ.K#zbl.8bA#u.8.Saq.6#YbV#Ga0be.1bOanbrbU#8.zaza0.w#H#WaP#EbK#b.Z#R#XaV#0.z.1#b.1#B.R#Yan.m#8#H#JbK#G#0af.L.u.4.ebO.gbN.U#t#z.ybQbV.8.y.wbVbVaBba#Z.T.4.s.kbc", +"a0.7aP.e#z#Zbw#u#0#0#0#u#G#G#uaya9bR#4bVbSa5bS#F.K.T.Z.6b0ay#D#bbebV#T.m#8bU#D.1#8#0.1bebqaIbW#J#b#x#R#v#D#0bC#H#HbV#Bbs#B.mbe#ea0bK.K#G#0.I#Z#t#tbA.ebO#..Ua6bV#F.w#sbVbV#z#sbVbA.O#Z.ebYaT.7bc", +"#P.Q.ga5#sba.sbAbV.wbS#u#z#GbVbVbaaT.SbKa5a5bS#F.ebL#EbD#b#u#u#Y#H.1#Tbebd.W#7bd.1bS#0beaL.T#Ebn#Y.g.S#y#u#0aobe.w.1azbs#Bbrb4a7a0au.K#Pay.I.O.Z.4.y.ebLbR#..P#z.8bV#0bVbn.w#s#sbAbH#ZbL.4.9.kbc", +".1buaPa5#z.Y.O#ubV#sbVbV.1#z#D.wba.Z.4bA.8.e.KbA.4#t.UbL#s#zbbbe#b#b#ran.b.W#7.1#8#G#0#HbKb7.gaV#BbT.K#r#Dby#H.m.1.1be#u#B.1.wbe#P.S#z.wbSbi.n.ZbK.4.e.8aI.Z.6.K#u#GbV#0bV#s.w.w.e#Z#Z.K.4aT.k.1", +".rb..g.e#s.YaPbV#z.wbnbV.wbn#Dbn.OaP.4.y.4#N.K.K#T#t.U.Q#z.w#F#YazanaNan.bap#Ga0az#0#P#b#KbR.Z#aaz#ibK#h#u.wbC#B#b.1bebs#B#D#baLbcbA.k#P#G#E#S#2.K.8bAbL.Tbw.6.K#G#0.wbVbVbV#s#s.e.Oba.K.4aT.k.0" +] + +stone1_xpm = [ +" 96 96 250 2", +".. c #343e34", +".# c #94a28c", +".a c #64726c", +".b c #c4d2c4", +".c c #7c8a7c", +".d c #acbaac", +".e c #4c5a4c", +".f c #dceadc", +".g c #949284", +".h c #7c7a6c", +".i c #acaaa4", +".j c #c4c2b4", +".k c #64625c", +".l c #dcdad4", +".m c #8c967c", +".n c #a4ae9c", +".o c #6c7e74", +".p c #f4f2ec", +".q c #444e3c", +".r c #bcc6b4", +".s c #8c8a7c", +".t c #5c6654", +".u c #ccdecc", +".v c #7c826c", +".w c #a4a294", +".x c #949a8c", +".y c #bcbaac", +".z c #747264", +".A c #5c5a4c", +".B c #c4cabc", +".C c #d4d2c4", +".D c #ecf2e4", +".E c #acb2a4", +".F c #646a5c", +".G c #8c867c", +".H c #54524c", +".I c #9c9a8c", +".J c #849284", +".K c #7c827c", +".L c #44463c", +".M c #9caa9c", +".N c #b4c2b4", +".O c #dce2d4", +".P c #cccabc", +".Q c #b4b2a4", +".R c #94a29c", +".S c #848a7c", +".T c #f4faec", +".U c #6c6a5c", +".V c #6c7a6c", +".W c #acbab4", +".X c #546254", +".Y c #4c564c", +".Z c #a4aa9c", +".0 c #747a6c", +".1 c #ccdacc", +".2 c #545a4c", +".3 c #74867c", +".4 c #4c4e44", +".5 c #bcc2b4", +".6 c #5c6254", +".7 c #d4dacc", +".8 c #fcfaf4", +".9 c #3c463c", +"#. c #6c7264", +"## c #e4eadc", +"#a c #949294", +"#b c #847e74", +"#c c #8c968c", +"#d c #a4b6ac", +"#e c #747e6c", +"#f c #949a9c", +"#g c #9c9a9c", +"#h c #84827c", +"#i c #e4e2d4", +"#j c #848a8c", +"#k c #9ca294", +"#l c #ccd2c4", +"#m c #7c7e7c", +"#n c #c4c6c4", +"#o c #a4aeac", +"#p c #bcc6c4", +"#q c #8c8e8c", +"#r c #d4decc", +"#s c #848274", +"#t c #a4a6a4", +"#u c #bcbebc", +"#v c #747674", +"#w c #c4cecc", +"#x c #d4d6d4", +"#y c #acb6b4", +"#z c #646a6c", +"#A c #cccecc", +"#B c #b4b6b4", +"#C c #545e5c", +"#D c #6c7674", +"#E c #747e7c", +"#F c #3c3e34", +"#G c #b4baa4", +"#H c #949684", +"#I c #7c7e6c", +"#J c #acaeac", +"#K c #c4c6b4", +"#L c #646664", +"#M c #dcdedc", +"#N c #8c8e7c", +"#O c #a4a694", +"#P c #949e8c", +"#Q c #bcbeac", +"#R c #747664", +"#S c #5c5e5c", +"#T c #c4cebc", +"#U c #d4d6c4", +"#V c #acb6a4", +"#W c #545654", +"#X c #9c9e8c", +"#Y c #eceedc", +"#Z c #4c4a44", +"#0 c #dce6d4", +"#1 c #cccebc", +"#2 c #b4b6a4", +"#3 c #9ca29c", +"#4 c #848e7c", +"#5 c #8c928c", +"#6 c #b4bab4", +"#7 c #7c8e8c", +"#8 c #44524c", +"#9 c #6c6e6c", +"a. c #e4eeec", +"a# c #d4e2dc", +"aa c #a4aaac", +"ab c #747a7c", +"ac c #5c6264", +"ad c #94a694", +"ae c #acae9c", +"af c #646654", +"ag c #dcdecc", +"ah c #a4b2a4", +"ai c #bccabc", +"aj c #5c6a5c", +"ak c #7c8674", +"al c #5c5e54", +"am c #ecf6ec", +"an c #646e64", +"ao c #545644", +"ap c #7c867c", +"aq c #444a40", +"ar c #f4fef4", +"as c #6c6e64", +"at c #545e54", +"au c #4c5249", +"av c #fcfef7", +"aw c #6c766c", +"ax c #e4eee4", +"ay c #8c9a8e", +"az c #748274", +"aA c #84867d", +"aB c #e4e6dc", +"aC c #ccd6cb", +"aD c #d4e2d4", +"aE c #3c4238", +"aF c #b4beac", +"aG c #9ca69c", +"aH c #b4beb4", +"aI c #f4f6ec", +"aJ c #3c4a3c", +"aK c #949694", +"aL c #949e9c", +"aM c #9c9e9c", +"aN c #848e8c", +"aO c #9ca694", +"aP c #a4b2ac", +"aQ c #bccac4", +"aR c #5c6a64", +"aS c #848674", +"aT c #646e6c", +"aU c #74827c", +"aV c #94a294", +"aW c #7c8a84", +"aX c #dceae4", +"aY c #94928c", +"aZ c #7c7a74", +"a0 c #c4c2bc", +"a1 c #8c9684", +"a2 c #a4aea4", +"a3 c #444e44", +"a4 c #bcc6bc", +"a5 c #8c8a84", +"a6 c #5c665c", +"a7 c #7c8274", +"a8 c #a4a29c", +"a9 c #949a94", +"b. c #bcbab4", +"b# c #74726c", +"ba c #5c5a54", +"bb c #c4cac4", +"bc c #d4d2cc", +"bd c #ecf2ec", +"be c #acb2ac", +"bf c #646a64", +"bg c #8c8684", +"bh c #9c9a94", +"bi c #84928c", +"bj c #eceae4", +"bk c #b4c2bc", +"bl c #dce2dc", +"bm c #cccac4", +"bn c #b4b2ac", +"bo c #848a84", +"bp c #f4faf4", +"bq c #8c9284", +"br c #6c6a64", +"bs c #6c7a74", +"bt c #a4aaa4", +"bu c #747a74", +"bv c #ccdad4", +"bw c #545a54", +"bx c #4c4e4c", +"by c #bcc2bc", +"bz c #5c625c", +"bA c #d4dad4", +"bB c #6c726c", +"bC c #e4eae4", +"bD c #8c9694", +"bE c #747e74", +"bF c #ccd2cc", +"bG c #d4ded4", +"bH c #b4baac", +"bI c #94968c", +"bJ c #7c7e74", +"bK c #c4c6bc", +"bL c #8c8e84", +"bM c #a4a69c", +"bN c #949e94", +"bO c #bcbeb4", +"bP c #74766c", +"bQ c #c4cec4", +"bR c #d4d6cc", +"bS c #acb6ac", +"bT c #9c9e94", +"bU c #eceee4", +"bV c #dce6dc", +"bW c #cccec4", +"bX c #b4b6ac", +"bY c #848e84", +"bZ c #8c9294", +"b0 c #acaea4", +"b1 c #64665c", +"b2 c #dcded4", +"b3 c #54564c", +".x.0.OaHbI.2azbK.rbJaF.Zbq.EbqbT#..x#6at.S.KaGbOaz#5albJb1b0bAayaw#..S##.xb0an#IbI#NalaFbH.5a6bN#kbSbobT.5bObu.Z#k.5.ZaYbL.ga9aZ#e.EaDbqap#..Z.S.SbP.ZbMaF.BbI#lbT#3ap.xbYbO.SbL.ZbEbXb0awbL#PbI", +"#k#c#..San#c.5bqa7bqb0bR.SbW#P.KbLawbqbLbCbHbT.5bY.c.ibObMa0aD.5.xbHa9.6bHa1bT.raAbIb0an#3#5bt#caAbXbWbYbtbSbM.SaCbq.t.xa5.SbLaAbLapbP#cbo.SaCbt#kbPaybIaOaGbMaOaG#c#k#S.Z#5#3blbIaO#k.Z.xbHbLaH", +"#3bOaHa1.xb0bH.YasbN#c#kbq#cbM#kbYbMboatbNbTbG.K.B#6.Eb0#t#kbz.cbPbqaw#1bt.EaHa9bTaA.KbCbu#pbobkbo.EapbSbJ.YaGbba7bLbSbMbHaZbIbIaCaH.0bH.D.N#.bSaCbM.ta7#3aB.E.EbJbNbOa7aGb0bY.0#lbT.5bt.0bEbq.S", +"bM#VbJbnbObIb0bMbQbOaqapbM.ZbobL.xbfbT.EbJ#caAbHa4#5bTb2bt#lbqa9#k#caBbtbt.SbJa2bmaY#JbyaMbybz#f#5.5awbOb0.Z.KbXbY.xb2a9bLaSbH.Uapa9bY#c#E#5.N#tbHbtbTbebEbKbebQbP#cb0bFbE.SbJaw.Ba9aG.xbM.Z.EbM", +".l.xbR#P#sbI.0.ZbnbVbNaA.Z#3.0a6bEbJbG#k#6bIbqbebK.EaGbMap.Ka7bIaAbF.ZbqaH.O#3#.boaMbhbf#3aaab#o#kbt.S.5bYbubRau.MaMaAbMbMbM#s.x#5bX#6aEbSbAbEa9.0bHaGbq.B#ca7bI#cbY.0bXa9bMbb#3#4#3bqbSbq#kan#4", +"aY.F#ibha7aA.iasbbbo#3bebybL#ybLbN.xbu#la6bSaBbNbrbl.xbV.W#lalbIa.bI#taHb..KbN.ibPb0.Kbb#va9a9aL.K.ZaCbObea7bo.F#v#5aGbMbL#1.E#I#6bu#3.K#5bP#3aG#Sbta9#JbObBa2bobIbW.Z#6#ka9.Z#5bqbHbO.7#lbK.EbR", +"bUbJ.ia4.wbHbh.Zba.O#3ap#3a4#nbUaA#kbYbI#c.7b0.5a8a9bS.NbQ.BbFaA.Zbtbtbt#6bIbFbtaAaAbXbHbLbNbpap.SbebI#5awbq.xan#cbo.KbobHbT#R#Ha9#E#5.Kbe#catbfbIbSbubIbeaKbtaKbY#casaG#kbH.ZbybTaO#cbJ.O.ZbIaG", +"b2.PbIaAaAb1.sbX#Ebfb1#t#qaAbAaH.Ebua4#6#kasboapb2.x.xaGbEbe.5br#9bubX#6bEaKbo#qag.ZbTa7bPbH.5#5#k#5aGb0a7btbY.K#LbL#5bM#X#2#N.ya2bu#C#y#3bo#jbB#B#qbb#c#9al.K#5bTbNb0#cas#3bN.x.ZbEbXaHbN.0.Z.0", +"bq#6bS.na9#ca4bq.Zbtbu.Ea9a7#LblbXapbebqbo#6bYbPa4bXbYbT#IaAaZbqay.B.ba4bNboa2#5.x.EbYbo.F#5#DaAap#5bI#ka4bX.EbRat#kasbJas.O.Zbq.7a1aO.nas.S#2#e.2.ZbHbX.S#5#L.SaVbY#caV.MbSbG.dbObqbIbMa3bb#c#L", +"#kaG.San.6#l.EbAa2b0#k.Za4.Oa2#3.FbMbb.ObJaH#kbRbGa1.nbn.5bn#sbM#N.Y.EbSbEawbebqaC.BbIbJbq#6.K#J#cbT.B#3.0beb0bQaAb0bLbqbIb.b#bO.baya7.E#P#kbP.z#e.x.db0btbE#6bBbTbT#caHbTa2aGbY#3bAbBbSbTb3.EbK", +"bwbYbMbEbo.Eap.x#5bHbebo.LbLawbE.x.ZbqbYbMa2.x#5.ZbJbXa7.ZauasbPai#kbE.BbYb2bzaHbP.Z#.a4a2bJ#5#6a9bQ#k#3bLbqanbM.xa8.0a0aObM#PbR#Xa7bq#O.gbRbRbK.xaAbUapbJ.KbNb.awa6b0a7bYbN.SbY.ZapaObubYbY.0a9", +".1bqbA#PaHawaCbVb2bNbWaCbG.EbYbXaGbKbSaw.E#W.Sap.IaGaIalbJb.#Hb1bH.Z#3bqbH#6#Sbl#k.xb1btbN#JawaKbI#kbKbQ.Sboasa4#6#IaCbMbXbJaAbIbT#sbLbrbL#ibW.zbI#5bHbObu.SbSbLaG#5bEa2bt.x#3bX.wbEbjbo.7b0apbW", +".ZaDaGbNbTbQ.6.Z#3a2#3#5aA#lbMbFb0blaAbq#5apbqbXbI.5bO.5bIb2.E.Z.Zbq.Sa9.KaCaGbT#cbRaHbI.xb0bua4#5.B#5aGbLapbMbo.g.Ea0#QbF#N#5.Sbr.wb..z#hbLbTbObB.BaGaHbXbEbTa9bH.ZbLbPa7bX#c#.bSbt.E.BbNbKbNbO", +".5bGbKbYbNa2.da6bJbq#6.Za2bNboa4#c#lbEbbbNbXbu#3bTa0asb2.E.YbTb0.E.s.SbK.B#maAbbbI.0.x#3bNbI#B#ha7bGbFbTbq#3.S.ZbebT.SbWbqaB.gb0bObmbtbIbLbT#3b0byaw#tbJbQbO.x.Sbo#Lb3bNbmbobKbOawbRa2bJb0.YaAa2", +"btaGbEa7#cb1byaGbobqbL.Bbe.7bIbqaBbWbq#5bq#3#cbX.ybHbnbqbIbq#ca7a7bTbJbPbmaKbIaMa1a7bJ.6.xa9atboa9.5bWax#6bW.NbXbUbTa5bT.Kbq#3as.waYa7aMb0bH.Ea6bNa5aG#5aCbTak.EbTaA#5bHbL.xbobhbS#5bHbea4bIap#6", +"bN.5a2bX.xbQaH.B.Z#3.dbU#kbNbMbFa4btbWbM.E.S.x#6asbL.ZbLb1.Z.0akb..0aZb0bTbP.ia9aAbHaGbH#L#cbeaAbPa2#lbQbLbHbw#3bHbq.5.SbM.SbMbIbB#qa5.xbbbi.M#c#tbebob.bYbJbTbA.wbo.wa5aAa8#t.h#3#ibS.ObIan#3.0", +"bHb#bM.Zbq.sb2b0.a.SbbazaRbNbN.nay#3aG.J#ybSbNbNbWaB.YbL#6anbYbE.Z.xaO#cbea9a9be.mbH.nbq.EbBbebB.O#.#6.x#6bI.Kb2bybAbqaAbP.5boat#k#c.ca#.ZbQap.MbTa2be.Za7bQaw#Oan#ObP#5bY#5#5bJbu#6bBan.E.xbI#3", +"bWbX.Z#5bKaua5a7bTbNbY.B.5bRbVbt.6.xaHapbO.bbqbz.x#5bNbJ.Z#3bHa9#2.EbebN#k.Z#5#q.Z.ZafbV.ZbMbNbqbXbSbI#5b0aG#5bDb0bKaHa4aAbu.0bIa2.xaG.E.BbAbNbHa9.SbYbI#6.ZbIbQ#2#cbIbQ.0.KbO#6#c#PaHbM.EbfbHbo", +"bKbIbI.i.0bL.7.waG.Tap.Sa4.0buai.KbS.Oaw.Sap.6aGbO#c.Sa2bJa7bebH.x.0.BbI#c#Bbu#cbR.YbRa7a7bM.xbI.x#Tb0bVa9bI#cb1bq#c#hap#c.x#3#kbI.KbT#mbqbO#6bPbYbYa9bNatbWawala2bq.xaAbTbobtbf#hbO#5bo#3bIa6aw", +".Eb#.E#2b0bTbMbe.S#3bP#6bOaHbSbSbMbYbP.xawasblbQa2by.TbJasaHbe.KbT.KasbqbtaAbH#3bIbobybGbWaC.E#G#..EbqbqaA#6a9bYaM.6#caB.Ea9bKay.ibL#5.Pbta8b0bMbFa7bqbIbea2bJ.E.KbqbS#6bJbYa9.O.raubA.xbY#kaAb2", +"bJbO#lbXbM#laYbT.Zbl.F#5bBbX.xb0bHbebI#3bNbtbTa7.5bO#3bo#cbObNb2#6bOb1a0aYaAbWb2#6bC#9asbH.0bHaC#T#kaHbXbqaA#5#h#3bYb1apaAawbTbS.k.ibha9aYbMb#bMblbeb..nbtasbKbEbzblaA.ZbQbJbYbTa4bTa2b1.EaGbIbF", +"bT.xbKbHbWbq.B#ka7aubqb1anbUbL#JbT.5bM#6.xaAbIbubL#ca7.SbUapbM.5bu.ka9aAbMbJaYbT#SbPbBbfa9#ca9bH.S#cbXby#waA#taHala2.5bKbSa9.EbMa9.SbhbLbM#6b3bTala7ana2bLbqbTbe#3aAbQ.6a9bN#Qbtbqa2.xb1a4bzbqa6", +".x#lb0b..Ebhbqb1a8btbmbbbhbJa2#5b0bebTa5b0bJbBbIbNa9#5a9.x#3.SbXaZa5.HbX#B#UbLb1a2bYbYbMa9bobtbF.0bJ.SapaAaGbG#gaGbSbJana9b1bY#3.E.x.Z#cbqbQ#cbqby#cbMbIa6bLawbEbH.KbtbLbeaOa7bqbealbube.5bK#.bo", +"bK.BbLbX.ZbXbL#3bKbhbu.ya5.ibPbTbLbh#5.Qby.k.i.k#5.Bb0.BbPaHa4a9a0a8#qbL.Qbnbq.ga7#laAa9bT#B#v#jbK#k#ka4#kaKbTaHbL.Ebl.5bN.6a4bIaza2apbt.cbY#cbb.ZbI#cbfapbSbIan.iaMa9bN#l.i.5#4bI#c.na9bIa9bHbe", +"btapapaW#kawbe.0#8aVaW#5a4a9.i.IbNa2a7bw.OasaGbh.F.naG#l#5bBa9#qbBbFbO#5bMbOaAbB#k#X#kb0#kb0aZ#kbS.e.S.0ahaObSaybHa7#k#kaA#U.nbH.0.Z.0bHb0#P#k.S.BbHbebMbI.x.Zbt.J.7.Z#k.S#T#k.E#4aObN.daF.e#4#P", +"#kbQa7btaGa9azbY.WaGaGa4a9.Ob0b0a4bJaHbFaza5aAas#VbL#kbe.0bMbWbwb0bL.xa8bIb1bJbJ.O.F.I#ka2#ibHbBbIaFaC.SaHbY#l.0.0asbPaAa1.KapbPbMbS.0bSbq#l.xbqbTbY#kaH.0a9bt.K#O.Y#P.Ja7bSbQbEahbq.E.Zat.BaVbH", +"btaGaH.7aCbHbNbS.WbsapbSbLa5bO#6.b#k#lbo#5.gaGbcbTax.5be#k#xa6#n#3bIboasbFbebJbO.jbRbLaKaMbo#m.ia6.xa4#PaHbOaFbqa7bBaO.xasb0.E.Z.Eas.x#lbqbzbKbV#c.Z#xb0bY.SaH.EaC#m#.axb0bNbMapbL.4#.by.CbTas#l", +"aF.SaHbJbNbMbC.Zapa2bGbQ#6.KbC.IbG#cbq.K.5#m##b1awbX#k.5aGa9bT#5.xbm.Sa0.FbhbH#qau#6#JaA#B#hbc#5.B#k#4bO#.aGbSbIbeaDbM#k#5apbLbu.E#3bXbtbX.nbob0bKbT#Va2#6bJbIaG.KbDbEab#5bEbS#tb0a0as#lbMa5aA#B", +"bHbOakbE.E#..Ba7aLaT#c#3btaG#NbY.dbfbN.ZaIbKbPa8aC#NbNbSbXaGaAbebObR#5.xbBaZbJa7.k#9aZ#Lbu#vbeaZbKbHby.xbHbO#.#PbTatasbyaB.VbS.x#cbt.FaGbXbLbN.Zbi#cbT.Ea6bYaG#kbObY#ubEbobuapaGa5b2aZbPaZbLau.G", +"btaSaB.D#lbT#ObP#ta6#3#3bBbHbe#k#5.5.ZbFbEby#hbqbq#.bu#lbKby#5#BbEbXaYb.bL.9bXbX.i#BbB#Ab0bLbJ#lbM#k.F.5bJbTb0a7#9btbe#5bt#JbebMaMbqaMa2bzbobt#3bTa4bMbo.0bXbIat#J#3bYa2bJ#6bo#6.K#5#mbtbBbKboaA", +"b1#l.j#Q.D#H.B.xaHbyanbYar.1.xaya2a6bY.x.ZasbIaA.Ba4.5asbE#B#5bL.KbLasaCb#bKbXa2#qaAalbua5.S.5.Ebt.zbXbMbTb1.xbzbIaCaAbyatal#5bt#ca8au#6bebRa9#6as#cbN#cbWa9a7#kaH#Va6.E.E#c.xam#lbBaw#5.5bBbEbA", +"#U.4.0.Q.ZbMbObX.KaKawaKbP#5.bbq.M.Ta2bWawa8aAbI#kbRaGa4bJbubPa9#3bIbPb0bTblbWbn#3bLbt.w#V#U.Z.z.I.ZbRbKb1bLbXbWbBbebLbtbfaK#c#uaA#6#6#S#vbSaMbe.EbHbI.0bo.xa9.Zb1#k#V.xbNa1a1.ZaU#q.dbNaL#6aRbN", +"ah#4bS.Va7#e.Maibqan#kbXaw.BbLbYa2aha9bIaAbGahawaAbB.ibXbT#c.xbbbJapalbe.xbO.#asawbJ.QaObXakaZa9bXb0aAbA.0br#5.sbNaha9#cbVaCbYaVbDaw#c.ZbeaBaebMbKbP.qbMaAbYa1b0bEbSbE.Ba7.i.Q.BbObNboa7bM.Sa7bW", +"aOaw.xambN.M#2bGbJ.0.Z.xbT.E.ZbHapa2bt#k#3bIaibQbTaAbRbT#k#BbMbMbybybNbe.S.O#..Zb2.2.5b0#H#kbKbt#5bu.ZbM.k.K.xbe.xapbea7aG.0aG.5a4bEal#6awbT#Ob0akbT#c#.bH.SbLbIaUa2.xalbH.0.S#sbebf#J.ObNbJbN.O", +".7#l#4.SakasanaObMaGbqbN.0b1bQ#..daGbIbJbTbTa6aCbObIbH#S.Za5aY.xa5#jbobo.K#5bFbLbtb##U#Rbq.hblba.0bna0#5.QbO.EbM#haA#.bLbMbKa5aAbCbBbfbTbqas#3bWa7bNas.Za7.EbYa1bMaVbt.EbYa7#O.BaKbXbuaHbqasbH.E", +".S#6.Z#kapbT#4bIanbHbRb2.S#cbO.xaybb.BbX#t.Z.V.abJbTaA#5.i.F.KbKbFbFaa#3bf#vbobbbnapbM.S#2#lbKbra9bXbI.0bebMb0#h#6bXaAbM#3bnbPbubobH#.bzapbLbNbIaHbP#ca2bI#5a4bLbK#k#k.Z.B#3bPa7bYbbbobJaG.Ea9ak", +"bLbq#kbJ.S.x#c.E#PbW.Z#l.6a6.nasbQ#4btap.0bBbS#cb0bTbBbLaIa9bL#5#q#taAaaaK#nbtbt#n.ZbH#Rb1bqbUbJbKbz.K.ZbobLbtaZb.aZ.kbM#vbIbM.ibTbFan.KbRbEaA#5bqa9bebI#cbLa2bu.x.xbFbPbIan#HbeaA.KbT#m#kbo.Zbq", +"aIbMb1bHbP.pbLbP.xaGbJapbSbX#.#caCaUbTbTbAbX#c.JbXalbXbb#ia7bJala4aM.Ka2#LaC.Kbwb2bBbO.BbL#U.0#mbXbJaAb.bIaG.PawbMb0bMbn.0aKbHbXa4ae.iap#lbIbo#kbBb0bo#cbPaGaAbua7bI.ZbE.E.xaybbbBboatby.2.Sbq#V", +"bLbTbMa9bP.S.xbRbLbYbPakaAa7bM.E.N##.K.Fa8.SbtbNaG#kbPbrbTbIb1bK#Ra7a7#3bbbxbu#qaA.x.5.0.x#XaK#3.xbX.Ka7bLbIbyaAbq#cbq.Y#3aObb.S#k.sa7a9bPbt.aa2bTaAaGb#btbubt.KagaSbL.SbLawa9aVbI.KbtbM#3#cbJbX", +"bc.FbT.g.haqbMbPbP#ebIbN.6a7#kaAaV.cbtb0b2apaObEa5aAb2.KbIbubl.K.B.Z.7bM#5.0.KbE#vbHbXaf#ObY.IbobhbNbm.ibTbhbT#u.SaWaVbHaG#c.ZaU.A#YbIbYbfbSbGbibo#3aMa9#mbP.K.Kb0.Q.S.xa2.ZbNaCbb#6bo.5bTa7bq.B", +"aw.S#4.cawaS#P#.bqa2bX#.#c#caPa2bHbQ.FbY.d.3aw.o.J.5.5btaGa8auaY#GaebXbWasaK#v#a.H#ObPbJ#3aAaU#cbL.KbIbK#5.xb0bI.a#4.ZbbbL.SbI#..I.SbT.E#k#1bL.6bTaNbo#5#3.YalbLanbqbSbTa7bPaxbubfa7bz.0.Yaw.5a4", +".Ea1.6#2bSbqazbX#kal#c.xawaGbSaUa1.5.5a2.WaCaybYbEaVaH.SaAbq.kbaak#k.0bX.xaY#v#5as#sbB.S#ca9#ca9bK.I.Kb0b0bI#kbKaO#VbHaw#3.Sa7aebX#I.xao.wbq.5bM#5.Zbua5bEbe#vaGbybB.S.Ka2#cbz.SbYb0bBbB.Z#5bo#k", +"bNaG.6apbY#k.r.7aSawawbXaC#caCaP.xbYak.VbNbb.WaWaxbM#c#lbNbXaAbIae#O#.bq#tbO#9aKbRbT.S.ZbNbyaHbNb0bPaAbBbJ#LbebMa1bq#kaKa9bL.x#NaH#Q.x.Z.S#Hbq#Xbyb0#5bMbFbBb1beaAbL.xbtbP.KagbJbqbtbL.xbubTbqbM", +"awbIaCaC.x.0a2aG#k.O#kbq.xbGbS#6.SbHbMbSaCahaGbB.Saz.ZbLanbPbTaY#l#.bTaAbqbeaA#La7aGbFaBawb1boap#Jasa9bWbWbIbObX.NaGbSbP#5.ZbrbMaAbL#kbIbM#hbKbX#caA#3bebuaAbebfbq#6bNa7#5a7bEbobubEbTbE#4#3aGbL", +"###caG.SbEboaGbMbMbY#Vbea4bvahaW#PaC.Zbq.0#6bz#6.J#Waz#J#lbPbLbt.0b0.xaKbO#mbLa5bwb0#kaH.Sa2bWaAbIbJatb0#6.iap.xa1bY#5awa0a9bnaebaa7aY.EbXb0#l#ka8#Ca9bobTaKbYaK#rasbIbLbN.SasaG.4a2.SbobXbK.Ybq", +"an.5bua4by#5.O#c.haCbJanbY#caJbfbHasbNbY.2aq#JaAa7aGa2bybOaAapaYb2#9bLbPbWbXb2.SaHaHanby#3.hbTaObX#3bL.SbT.x.ibTa2bN#5bBaGbobJbqbt#lb#.EbJ.5a9bL#3beaKbOa9bu.E#vbK.MbtbqbN#5bM#3#k.KbtbMbI#c#cbo", +"bobfbLbYaAayaA.M.Eal.nbybLbubE#caia1.7btbBaM.L#BbSaC.5#kaCb0bOaYbMbAb1btbPbL#nbLaU#u.SbebNb..5#sbMbub0a9a8b3bTbI#V#3bubF#q#vbn.2.KbMbo.kbObLbJbJboboaC.KbY#man#mbqbBbLapbMbbaGbS.5aHa7a7bYbebLaG", +"bT#Eam#p#5aAaL#3bOanbqbVbEajaHapaO.SaH.SbObhbM.H.a.SalaGbTbYbh#6bJbM.p.2a9aA.0aoboay#9.E.x.E.g.2a8.5bn.sboaA.Z#6axbF#Ea5ab.4btbJb#bbbPbzbNaAbxbM#5#5.K.iaqbB.K.Fa9anbTbH#k.EbP.SbIbeb0bYbu.x#3bq", +"#PbN#Ta9aVaWbtaG#VbP.ZbhbXbM#h.G#d...ubYbq.7#k.0bNbwadbSbea6aV.5.X.1bE.J.ZaAbS#5.5.Z#T##bY.E.F#l.EbH#c.Ebu.ZaH.CbTbMbXbT#n.5bMbM.JbEbG.5bBbSah.KasbqbtaYala5bJbJ#cbo#3bNbubnaC.gan.cby.Obu.waAa0", +"#4aGbN.E.BataG#ubY.x.EbLbM.2.iaKa9ap#EaGbAas.S#..BbYbNbN#c.Ea2#3#c.JbN.5apa2bRb0.FbNaA.6bWbQ#.bPa9by.Sb2a2bTbE#6bTbIbq#5aA#5bua0beapbEaGbq#capa7aAbMa0bIbt.KaAb0ay#3.Ka2.BbI.sbqbSay.x.Z.xbo#SbI", +"ak.EbSaVbRbSbbbbapbi.KapbF#5bCbtbBbbbOaAbIbI.EbXbI.0.Ba2bqaG.5.dbSbNaCap#mapbubLaM#kapbFbhapbuapaCbJbobSbqbo#FbHbub#asbJbhbJbh.B.FbHbq.0a2aw.BbtaAbubXbI#kbXbPbAaPasbo#5aC.5a7.hbt#kaH#5#c.IbL#5", +"aB.0bMa4#6bP.KbtbDaW#5.W#yaw#qbybLbI#vbXbT#hbLb0ay#5#3#kbA#cbBa9blaGaMbo#Ebh#W#maG#q#Lb2bobe#vbz#AbNaB#5bo#5aw#v.0b0.KbK.EaAbJb1#3bKa9.KbObJ#c.xaAbLbobLbMbubIaYbDbSa6aAbI.Eb0.5bt.xbubH#ca7bbbL", +"aq.nbX.SaH#3bLa9#B#BbiaTap#wbi#Cbh#kbh#5a5#6bm.ibJbqbMbpbM.0bMbb#p#jbu#m#J#9#9aMblbu#6a9#5bfbIb0a9bfbUbIbyb0bobWb0bt.i.SbX#m.Bbbbq#c.KbNbza4b1bKbWbSbLbObobLbeb0arbbbu#k#6bLbMal.EbMbE.Bala9#k#c", +"#kasbMbybXaZ#v#qbn#3boaAbWaXbK.R#I#hbJ.5bU#ha2a2aAbTbEbO#5aAbM.0b0bb#m#6#tbTbhbnbzbobT#9bobeaAbb#ubIbe#p#q.Kbbbua9bPbI.KaY#kbh#6.8a7a7a5bXbBbJbI#kbu#la8.OaYasbMbN#3bL#5.D.i.S#Hbf#h.EbubNa9.Bbe", +"#QbLbIbPas#5a9bP#Lbra7bBbtbI#c.x.Z.EbKbJaha4.RaNbTbLaZ.ZbMbtbFbJbtaAakbO#q.ibWas#3#I#3bY#2bJaGbHaLbeaAbebybt#9bT#kbPbMbPbtbebH.EbX#nbIbObqb1b0#vbRaZbt.BaYaw.5aA.R#3#8#k#cbHbXbMbhbcb1b0bTawaV.0", +"bTbTa7bmbRbhbma9.g#b.y.waG.UanaCbKaH.Ea4bN.Jaya4aYbKbubTbL#hbr.Z.SbYaY.ObL#sbPaYbq.5ak.E.7a4aebY.kaLaMaM#mbS#qbtbra9bTbobLbhbX#haZbP#hbXa8#h.xb##.aAbPbPbXaYbJ#v.Bawbe.x.KaA#k.QbTbTbXapbE.xaCbQ", +".K.K.E.x.xbY.Ka9.bawaDbq.v.ZaO#da1a2.ca2.aa2aGawbMbTbObTb0bB.zbe#T.V.xb0#ca9a8#Ja4.S#5bH.Oa9.B.SbtbTbL.ZbH#lbBb0aG.ZaAbI.ZbubLb0#k#K.n.bbNazaq#q.SbE#iap#Db1#l.5#3.KbMbAaAbE#BaAaKapaAa5b1bTbua8", +"bwanbObI#r.7bu#ybSaG.5.Q#G#.bVaw#cbLa4.BbObQbqbGbMbLbtb1.KbPbMa9#..MbqbobRbMaBa8a9.5b1awbTbSbybKaAbX.S#3bXbP#NbM#qasa5bMaAbIaAbL.S.x#4.M.SbYa5bLbqbSa9#zaAboan#.bLbwbubebX#qbS#5.x.i.KbI#m.2asaA", +"#6be#3a1.E##bmbMbBbYbP#UbRbRa7#6bObWbXbI.E#qbJbTb0byaqbJbMbXbWbt#X.NbH.ZbNaAbu.i#cbKbKbfa2bBbXbN.ZbTbRbT#sb0#5bJ.Z#.bPbXaMb1#6.E.IbR.naObN#kbTb.bI.EbobMaAbAbHaAaGbJaA#c#qbCbo#5bLbMbL#cbObXbObX", +".KbJ.7#XbSbWbtaG.Sa0#sbTa8a7a8bTbIaKbLbIbJbhbR#3aAbLbMb0bMaAbIaA.7bMbN.ZbS#BbX.Kap#AaibW#kbNbTbIb0bXa7#k#3.IbH.iasboaYa2asbqa5bIbLa7bMaW#ratasa0a1bq#c#va9#3.xak#5#nbe#3#5bebXbIbMbtbJaY#kbXbTbo", +"bFbz.7bT.5#kbybo#hbWbobtb3#na5.7#J.IaYboaYb2bPbOasaCbe.Kb0bPbeaBbWaObMaHbJ#EbY#mbqa2#kaAa2#5aO#c.5b#ag.5b0bObK#2aZbL.EbT#5bLaYbJ.K#vbNaG#k#3bubIbT.F#Lbea9#A.ZbKbQ#3b1bL#3#6bObtaAbOanaBbJaAbTbb", +".Kbna2bq.Z.0#m#vaZbTbo#L#BbubPaAbr#cb1##bM#tbH#vbMbT.Za8beb0#.aA#ka9bPbObL#kbB#5bSb0aGbIbqbT#Ja7b#bIbObnbP.Bb1bEbLbobza0bLbobI.Ka5b0byapapbQ.Ea8bHbLa2bobS#3aG.xb0bfbE#3bub0bz#c#6bIbhbI#6bLbebM", +".KaKbYae.S.B#5bIbqbtbu#y#E#cbSbJ.F#3#ca2awbIa4aHbIa9bIbTbWaA#hbq.h.7bHby.fbt#6bYbqapa9bMbBbYbNb1#k.F#k.0bI.0bh.ZbIbh.Eb0bt.Bbha7#maK#Sbi.V#k.KbX.E#kb0a8bua5.5.0aI#AaKbuaK#5aHb0#hbtbRaGbLbKbLbA", +"b0be#P##.EbBaAapbPa7bNbv#7.a.0bObsaFapaGbGbSa2.6aAbTbMbObJ#5bI#5bIb0bWbtbIa7aWbVbtbM.xa9.ZbTbqap.x.s#3.g#3bL#NbK#3##a9aY.xbh.0#5#Jbh#EbebM#cbT.6bqa4b1aLbNa9bM#VaM#6apaA.xa9aM#5bJbM.BaZbXa9bubX", +"bybIbSaGb0.caMbYbJ.r.5#k#P#XbL#.as#XbJbK.2btaGbD.Z.PaYbH#h.B#cbb#KbebqbbbNbiay.Ya7.Z#UaObH.6#2.7bJbH.0#3asbKaA#5#2bOaSbLbPb0.S.g.d.KbGbEbNb0bXbn#X.B#H.0#2.Z.n.SbYbHbMbE.KbTa2.Za9#caKbo.KbtbMbo", +".5aAbWbS.Ebo.Z.K.BbJbEbX.5aH.5bqaA.EasaHbobeaGaC#s#XbIbLbIap#3.O#3.xbIbtaCa2aLbs.SbObIbU.s.xaAbPbIb0bLaAb1bb#6#mbM.0bt#UbN.g.ZbLbu#VaH#ka0bo.5aK.ZbP.KbJbWa8bJ.Ia7aK.SbEb#a4bLat#nbobebLbNaAbTaM", +"bbapb1a9bobP.xa4aGbqbq.Ba9bOaHbqbT.jbXbI#cbMbiaGbWbI#XapaSbObIbEbqbua2bo#5bV#6aybW#XaF#IbL.Oaea7#O.0#kaBbM#qaA#maA.gbbbTbJ.EbBbJ.dbMaGaAbNbTb0b#b0.hbH.BbRbIbEbWaAawa7beaFaAbMbebtbWbL#t#L#5#3#c", +".5a4.E#kbd#lbXbOa7#cbo.xbHbO.E#3#ka6bobLaGbKbq#3ae#.#Nb0a8a7aH#6#tbzbI#6#cbCapbobMbMbF#k.Bbr#.b#.Zb0#6bOasbMbybMb.a9.i.SbqbLbcbTbNa4#6a7#cbTbJbIbbbT.KbObKbF.g.K.0#3bS.4aG#3bY.xbubTaGapbYbMaAbL", +".5aA.K.K.ZbGbBbVbobHbybz#kbB#c.SbNbebHbea7a4bTbMbTbM.IbT#.aGbJbSbF.E#EbJbebtaYbu#s.SbWb3bybI.5bIbH.gb#bLaAaY#qbIb2bMbY.iaAbXbLbf#eawbOapb3bLbBbT#ha9bIbh.0b0bLbPbY#5bX.BboalbI.Kby#A.KaAbe.K#5aH", +"#kbtaGbqbebX.7bO#c#JaGbPbo#3b0bu#haHbebWbXbBbqbW.Pa7bJbO.EbubKapaM#3bXaYaAbRaZbPbBbP.Qa9.gbI#3bI.xbTbI#cbmbebobJaMbM#3bKbP.Y#ua8#cbG.K#kbebqbnbLas.KbXaAbP#3a9bMasap.5#6#l.x.6awbzbubtbfbbbeaAaK", +".B#5.5bebYbta7#3#6bXaG#x.KbY#qbNboa4.Ma9bNaA.gas#..l.QbMb0#c#5b0#5#j#3bIby.kbWaYbMbBbCbr#3bKb0aAbL#ObLbP#3bhbT#nbLbobPbybeaA#Z.K.MbH.ZaC#6bTbtasaZ.Kbt#5bobLaYbebWaCbya7bNbuby.7bob.bebtbL#nbYaA", +"#t.5bTbMbHapbMa7bea9bobo#maAa9.KaHbl#AbQ.4.5bq#saS#2.Fakbh.x.BbDbo#5a9bMa0b..g.I#qb0a8bJ.Zbrbt#3#HbXbN.ibTbobP#u.i#g#3.iaAaK#6bnaP.xaGbtbM.EaYbLbIaM#ma8bIabaAaKbt#ka9bIbebFbHbqbmanbT#3#5#5#5bl", +".nbH#c.n#lbq#kaHbX.SbTapa7bEbBb2#ca2.J.6a9.ib#bT#cbe#t#3bI#DaAbX#6alaAa9bB.E#mbH.ib0asbebbbKas#3.0.KbPa7#l#cbo.Z#5a2#5aAa9bybTa9#Q.x#N.x.ZbJ#kbqbL.BaebWa7.O.UaSbN#qby.Zbo.0.SbNbqay.E.N.Ea9.MbE", +"a7bYb2.EbYbP.xb0.SbobVb0.KbNb0.Eaya1aGaA.ZbqbtbJbzaAbeaAa4.K#BbTaqbBbIb0bRaYbIbobJ.KbubPbLaAbo.sa9#c#k.KbubIaqb1axaw.0be#.#3#kaGbTbLbIbqbP.jbM.B.S#R.xaO.i#2.x.ZbYbIbua9.BbI#lbKapbfbubMa4a2at.Z", +"bLbH.E.K.Zb0.xaxbYbMbq#6#lbO#3aAapb0bEbEbn#.bOb.#Lbbb1bt.Kbe#.aGbMbLbTa9#.bObJbIbB.z#5bLbobI#ibb.SbebXa9#kaGbz#c.ZbTbN#kbO.Sa7bQ.PbPbobLbI.F#5bXaA#NbMbT#Ia7.IbIboa9btbObNbP#V.ra7bNbNaObw.fbOap", +"apbyaw.5bL.SbEbK.x.E#5.Z#cbA#caGan.Ba4.Faqb.bbaYawaA#5bSbLaMa9#5b#bMbBaAbTa9b0bqbo.Eas#hbWbXbL#3a7bR.FaHbt.6.SbIbqbtbtbJbqbobebEasbybXbfbX#3bJ.F.h#lbI.BaA.sbQbMbP.E.ZbNbIa9bB#k#3asaHawbqbX.K#.", +"aAbSasaGa4bIbS#6bobla7#5bLbS.xbA.x.Nbo#kbEbTbqaMbtbtbt#qawbLaAbt.KbLa8bTb#bIbh.BbXbca9#kbIbNbX.8bF.VbJapbLa9bybNbJ.0.Y#k#6.xbu##bO.xbK.SbIa8#k#tbWaAbIbIbH#lb1.0bt#6b0a2.EbAaCbIbS.EbL.0boaHbRbN", +"bT#6btbt#L.Kbh.KbI.FbobIbJbqaAboaw.BbNbIaHbXb#.U#3bwbT#6a9.Ka9aG.Ha9#kbJbebLaAbU.KbMa9aAbMa9bJbL#3aGb0a9bubL#rbtbNbobO.EboaG.K#6bTaMbOaMbtaYbtaMa7bJaAb0bOaK.Fbo.0bYbqaqaAbt#5aZ#kbebObobX.gbuas", +"#qbSbPbKbubAanboapb0.Eby.5bYb0bYa4#cbRbPa6bObL#qa4a9aA#3#6bubu#5.ga2b1b0bJapbL#3.saA#lb0bTbtbHbIbQ.Da9.7.x.7apbJa2bPaHbLbY#k#6bMbEa8bB.ibJbIbOa9.ibMbqbnbe.Ba5bJbT.0.Z.S#5.B#t#c#q.xaAbta5.SbMaA", +"aHbxa2be#6bBby#t#k.xbua4a4bPa9aHap.0#cbAbWbIa2.l#JbKa9bo#AbTb0bzbeaAaAa0btbI.lbLbybXbAbTa5bLaZbubJbubLbya2anbJbT.2a9a2bXa4bTaHbHbubnaA#Lby#3a5bobubB#q#5#hb0btb0a7bM.xbA.xa9bYaKbKa8asbrbOaY#vbT", +".5a9apbX#cbH.SbybYbM#5bYbKapbIbX.M.Vazay.ObAbI.SbFbPbf.Ca4b0bobLbP.xapbN.7.KbwaAbqbL#ka2.SbLapa2buaGbPa9b0au#c#6.Maw.Va9aAbPbtbL.N#c.cbF.E#6aGalbPbM.YbNbW#cbLaGbHaC#4bLbX#cbIbHaF.Zak#l.B#k#Pa7", +"a9.xaw#kbN#cbo.6bMawbIbMboaFbuap.MaH#ka2.Kaw#3bL.hbPapa8#5bTbLb#bq.Z#kbJa9#JaubebY#6btbP#3bT#c.Ia9bOa9byaAbu#5bea9.0a4aAapbqbOa5bYaQa7.R.0.EbIbIbfahbO.S#3bqbTbo.7.xbf#3.xa9#ebeb1bMa7bo#.#Ha9.E", +".K.nbNa2bA.Z.6bYbY#kbK.M.xaBas#3.Zad#5#.a2#k.EbNaAasbMbTbXbP#3b0bqbNaA.xapbJaHaKbTbfawaHbb.Ea2bK#3bebtbeaKapby#5anap#kbYbT#tbqbT.S.x#5#haC#qaYbJana7#3bY#3#3bHbJbI#6bSaA.FbQbOaw.0bG#kbLb0bQ.rbM", +"bQa4bHbqaCbbajbQapbMby.KbtaG.SbyaGapan#ka9bX.K#6bMbK#cbRbI.7#hbP#4bLaObSasbebB#xaw.E.SbP#lbobQanaKbtbWbtb0bL#Mb0bLa7apa8bObTbHaMbPbT#6a0.zbIaAbh#lbbbLbSbq#5bWaCbo#6bqbybebPbubFbq#kbPbYaCbJbta2", +"awbLa4.S.Map#lblbUaw.xaAbNbr.ZbPaAbIbtaGapbQbRb1awaYbM#vbfbJbtbXaS.xbTbebMbYbfbI.5bSaA#c#6bHb0#cbbbOaLaAbubN#5bo#5bWalbIaAbybJbTa0bobIbTa5bMaMbPbTbSbPb0#5bN.EbybI#c#v#6aA#5btbI#3#cbI.S#6bu.ZbT", +"aGbqboaGbJ.5.K.SbE#c.5bobO.S#5.bb0bh.hb.asbMaG.7bLbzaZ#3#kasbPbI#ka2.ZaH.Ya5awbtbQ.KbMbubY.5bybPasbe#vbQbFbb#JbubXbn.ib0bLa0bTa9bObJ.gbebMbSbJbNaGbqa7bo.xaGbIaHbB#mbobwbe#3.KbBa9#5by.KbEbTbTap", +".xbyawbqa2bzbHbNa9bL.E#3bNaG#3aAa9a8aZbLbKb0anbYaY.SbLbOaAbL#5b0.E#kaGbIbOblbB#vbX.7#5.ZbuaGbMawbBbya9b0#3bfb0#5a5.G#5.ibMbeaAbMa7#xbf.Z.ZbEaC#c.EbTbSbMaG.0bfapbIapbRbtbl#m#3bOa9b#a9bL#mbB#c#n", +"bz.xaGaia6#kay.ZbIapbP.xbYbP#kby#bavbh.Ka9a7be.xbS.i.EbtbJa5.xaA.E#5#kbTat#5boa9bNat.EbTaEbXaGbWa9.KbebE.KbT#5#3bg.k#h.sbnaA.5a9bTbB#Pbo.Ma2adaVb0#cbuap#ka8a4bT#faAabaM#qbobeaA#5bo#v.K#6bE#tas", +".5#4bfb.be#t#k#c.F.0.0bYbO#P#c.FaFakapbYbWbNaM.K.MaGbBbqaH.SbmaZ#d.BaiaGaGaHaCby#P.B#e#PbR.x.xasb0.IbWbTbIbo.ZbMbYa7bIbN#k.E.x.I.6bLbMbYb0bX.M#6#lbJ.Z#NbT.t.s.xa4#3a6bR.S.Ka2bo.WbY.J#cbua7bX#3", +"aG.EbfbebEbE.n.Eb0aw.FbEasbMa1bL#k.naAaGbMaw#.bA#caCbYaAbzaAbMav#T#k#V#lazbT.RbObq.0.7bLaFbIbQa7#kaK.EaKbXbMb0b.aHa9bSbe#kbP.Eae#kbobo.YbuaAa6bT.IbM#..EbIbMbBbTbIbqbL#c#6bMa9bq#fbSa9aH.K#3#can", +"bX#caKas#6#ta7bIa7bBbLbPbYbo#5a2bK#4.JbI.MbBbobbaybqbY.xbJbMa9bI.xaGaqawaHbTbQ#cbW#c.5bfbxbobt#SbtbIbRbJaYasbXbtazbXbobMbPbJbTa8#ca7.ZbN#kaH#3an.B.4aZ.ZbhbK#Q.x.xbt.EbP.EbYbLbt.R#caUb0aGbqbyag", +".5aObobnapa8#c#Pbb#t#3aK#tbo#JbB.JbLbEbQ#kbuaH.Jb0bX.6#5.xa4#5#kbTbNaCbMawbK.KbLbybPbu#6bbbZ#vac.Zbn#kbTbebLbfbIaybobfbo#DbM#nasaHbX#5bMbSaAbMbM.E#5bJbM#3a7a9.ibybSbNaM.xaw#3bHaW#6aLbea9b.#B#.", +"bIbKbeaG#vbe#c.x#3blan#t#k#xbubobRaVa9bNbMa2.EbEbObtbB.0ap#5.0.xawaAbMbHa9bS.S.K.KaKbwbt#q#ubZ#jbLbTbObTbNaYbebTbYbSbY#6aAbt#m#qbqbo#c.S#5bo.O.KbtbTa8.6.Eb.aAbL.5bTa7bHbe.x.ZbtbtbPbYb0be#.bnbH", +"aC#.a9bFbobtbPbLbLbobe#3bbbbbt#qbban.EawbE#.bqbEbHbfb0#5bI.x#c#cbLbXbybtbm.SbI.ybN.Kbe.K#qbD#q#za8.5bfbBbJ.BbTbLaVbMbV#3a6brbT#u.ZbA#kbF#.bMbEbW#B#.bB#naA.K#3bT#cbLapboa2#5#.bobu.KbubyaAbhbIb0", +"#Oa2bX.KbeaA.5a1b0.xaAaAa1#kb1.6a9aA#DbH.ZaVbKbqaA.SbJaA.XbS.S.b#gaA#t.EbL.xbMbWbea2bRbtbubWaM#5.ZaZbP.EbMbJ#mbJ.V#GbHaH#3bc.KaYbL#ca9.0#5a2bqbfbMaZbtaZaAbM#tasbeaCb0bTa4.x.K.E#vbE#LbraKbKbIaA", +".xakaKbybW#6bM#l#ka7#k.nbM.0bH#Pa2#3by#..K#kak#0bnbMaA.5.K.BbNa6aK.ka9bLbc.wbL.7.xaAbqbAbo#JawaB.KbLbq#BbebMbMbL.##Va7#2.S.B.0bIbEb2.7#6.Z.KbJbq#m#5a8bWby#ua8#6#3#lawbTbea7bL#3#3#J#5#.#3.ib#bM" +] + +stonebright_xpm = [ +" 96 96 250 2", +".. c #7b927b", +".# c #daefcf", +".a c #b5cec3", +".b c #ebfceb", +".c c #cce2cb", +".d c #e5f8e5", +".e c #99b499", +".f c #effeef", +".g c #e8e4cf", +".h c #d7d3bb", +".i c #f3f0e7", +".j c #faf7e6", +".k c #bfbbb0", +".l c #fdfbf4", +".m c #dae9c1", +".n c #e6f4db", +".o c #bbd9c7", +".p c #fffdf7", +".q c #91a680", +".r c #effbe4", +".s c #e3e0c9", +".t c #b0c2a0", +".u c #eafeea", +".v c #d3ddb8", +".w c #f0ecd8", +".x c #e3ecd7", +".y c #f8f5e3", +".z c #d0ccb3", +".A c #b6b297", +".B c #f4fbea", +".C c #fdfaea", +".D c #f9fff0", +".E c #eef6e3", +".F c #bbc6ab", +".G c #e3d9c9", +".H c #ada99d", +".I c #ede9d5", +".J c #d1e7d1", +".K c #d3ddd3", +".L c #989c86", +".M c #dff3df", +".N c #e8fae7", +".O c #f7feee", +".P c #fcf9e9", +".Q c #f6f3e0", +".R c #daefe6", +".S c #d9e2cb", +".T c #f9fff1", +".U c #c8c4ab", +".V c #bdd6bd", +".W c #e5f8f0", +".X c #a2bda2", +".Y c #9baf9b", +".Z c #ebf3df", +".0 c #ccd6bd", +".1 c #edfded", +".2 c #a9b499", +".3 c #c1dfce", +".4 c #a2a690", +".5 c #f3fae7", +".6 c #b2bda2", +".7 c #f6fded", +".8 c #fffdf7", +".9 c #869c86", +"#. c #c4ceb5", +"## c #f8feef", +"#a c #e8e5e8", +"#b c #ded3c3", +"#c c #d9e9d9", +"#d c #dff7e9", +"#e c #c8d9bb", +"#f c #e1eaed", +"#g c #edeaed", +"#h c #dedbd0", +"#i c #fefcec", +"#j c #d7e0e3", +"#k c #e6efda", +"#l c #f5fceb", +"#m c #d5d9d5", +"#n c #f9fbf9", +"#o c #e6f4f1", +"#p c #effbf9", +"#q c #e2e5e2", +"#r c #f3feea", +"#s c #dedac3", +"#t c #eef1ee", +"#u c #f6f9f6", +"#v c #ced2ce", +"#w c #f0fcfa", +"#x c #fbfdfb", +"#y c #e9f7f4", +"#z c #b9c4c8", +"#A c #fafcfa", +"#B c #f4f7f4", +"#C c #a4b8b4", +"#D c #c0d2ce", +"#E c #c7d9d5", +"#F c #8d927b", +"#G c #f0f8db", +"#H c #e6e9cd", +"#I c #d6d9bb", +"#J c #f1f4f1", +"#K c #f9fbe4", +"#L c #bec2be", +"#M c #fcfefc", +"#N c #e2e5c8", +"#O c #eff1d7", +"#P c #dfeed3", +"#Q c #f7f9e1", +"#R c #cfd2b2", +"#S c #b4b8b4", +"#T c #f0fce6", +"#U c #fbfde8", +"#V c #eaf7df", +"#W c #abafab", +"#X c #eceed3", +"#Y c #fdffec", +"#Z c #a39f92", +"#0 c #f3feea", +"#1 c #fafce6", +"#2 c #f5f7df", +"#3 c #e6efe6", +"#4 c #d5e5c8", +"#5 c #dee7de", +"#6 c #f0f8f0", +"#7 c #c8e5e2", +"#8 c #8daa9d", +"#9 c #c6cac6", +"a. c #f4fffd", +"a# c #eefef7", +"aa c #e7f0f3", +"ab c #c9d4d7", +"ac c #b0bcbf", +"ad c #d8f1d7", +"ae c #f2f4db", +"af c #bfc2a0", +"ag c #fcfeea", +"ah c #e3f6e3", +"ai c #eafbea", +"aj c #abc6ab", +"ak c #cfdfc1", +"al c #b4b8a4", +"am c #f5fff5", +"an c #b8cab8", +"ao c #abaf8a", +"ap c #cfdfcf", +"aq c #94a18b", +"ar c #f5fff5", +"as c #c6cab8", +"at c #a4b8a4", +"au c #9daa97", +"av c #fdfff8", +"aw c #c0d2c0", +"ax c #f4fff4", +"ay c #d7ecd9", +"az c #c6ddc6", +"aA c #dcdfd0", +"aB c #fcfef3", +"aC c #f1fdf0", +"aD c #eefeee", +"aE c #899780", +"aF c #ecf9e1", +"aG c #e2f1e2", +"aH c #ecf9ec", +"aI c #fdfff5", +"aJ c #83a182", +"aK c #e6e9e6", +"aL c #dfeeeb", +"aM c #ebeeeb", +"aN c #d5e5e2", +"aO c #e3f1d7", +"aP c #e3f6ed", +"aQ c #eafbf4", +"aR c #abc6bb", +"aS c #dcdfc1", +"aT c #b8cac6", +"aU c #c6ddd3", +"aV c #dbefda", +"aW c #cbe2d8", +"aX c #effef7", +"aY c #e8e5dc", +"aZ c #d7d3c9", +"a0 c #faf7f0", +"a1 c #dae9cd", +"a2 c #e6f4e6", +"a3 c #91a690", +"a4 c #effbef", +"a5 c #e3dfd7", +"a6 c #b0c2b0", +"a7 c #d3ddc6", +"a8 c #f0ede4", +"a9 c #e3ece3", +"b. c #f8f5ee", +"b# c #d0ccc2", +"ba c #b6b2a6", +"bb c #f4fbf4", +"bc c #fdfaf4", +"bd c #f9fff9", +"be c #eef6ee", +"bf c #bbc6bb", +"bg c #e3d9d7", +"bh c #edeae1", +"bi c #d1e7dd", +"bj c #fffdf6", +"bk c #e7faf2", +"bl c #f7fef7", +"bm c #fcf9f2", +"bn c #f6f3ec", +"bo c #d8e2d8", +"bp c #f9fff9", +"bq c #dee7d1", +"br c #c8c4b9", +"bs c #bdd6cb", +"bt c #eaf3ea", +"bu c #cbd6cb", +"bv c #edfdf6", +"bw c #a9b4a8", +"bx c #a2a6a2", +"by c #f2faf2", +"bz c #b2bdb2", +"bA c #f6fdf6", +"bB c #c3cec3", +"bC c #f8fef8", +"bD c #d9e9e6", +"bE c #c9d9c7", +"bF c #f5fcf5", +"bG c #f3fef3", +"bH c #f1f8e5", +"bI c #e6e9d9", +"bJ c #d6d9c7", +"bK c #f9fbef", +"bL c #e2e5d5", +"bM c #eef1e2", +"bN c #dfeedf", +"bO c #f6f9ec", +"bP c #cfd2c0", +"bQ c #f0fcf0", +"bR c #fbfdf1", +"bS c #e9f7e9", +"bT c #ebeedf", +"bU c #fdfff4", +"bV c #f3fef3", +"bW c #fafcf0", +"bX c #f4f7e9", +"bY c #d5e5d5", +"bZ c #dce5e8", +"b0 c #f1f4e6", +"b1 c #bec2b0", +"b2 c #fcfef3", +"b3 c #abaf9b", +".x.0.OaHbI.2azbK.rbJaF.Zbq.EbqbT#..x#6at.S.KaGbOaz#5albJb1b0bAayaw#..S##.xb0an#IbI#NalaFbH.5a6bN#kbSbobT.5bObu.Z#k.5.ZaYbL.ga9aZ#e.EaDbqap#..Z.S.SbP.ZbMaF.BbI#lbT#3ap.xbYbO.SbL.ZbEbXb0awbL#PbI", +"#k#c#..San#c.5bqa7bqb0bR.SbW#P.KbLawbqbLbCbHbT.5bY.c.ibObMa0aD.5.xbHa9.6bHa1bT.raAbIb0an#3#5bt#caAbXbWbYbtbSbM.SaCbq.t.xa5.SbLaAbLapbP#cbo.SaCbt#kbPaybIaOaGbMaOaG#c#k#S.Z#5#3blbIaO#k.Z.xbHbLaH", +"#3bOaHa1.xb0bH.YasbN#c#kbq#cbM#kbYbMboatbNbTbG.K.B#6.Eb0#t#kbz.cbPbqaw#1bt.EaHa9bTaA.KbCbu#pbobkbo.EapbSbJ.YaGbba7bLbSbMbHaZbIbIaCaH.0bH.D.N#.bSaCbM.ta7#3aB.E.EbJbNbOa7aGb0bY.0#lbT.5bt.0bEbq.S", +"bM#VbJbnbObIb0bMbQbOaqapbM.ZbobL.xbfbT.EbJ#caAbHa4#5bTb2bt#lbqa9#k#caBbtbt.SbJa2bmaY#JbyaMbybz#f#5.5awbOb0.Z.KbXbY.xb2a9bLaSbH.Uapa9bY#c#E#5.N#tbHbtbTbebEbKbebQbP#cb0bFbE.SbJaw.Ba9aG.xbM.Z.EbM", +".l.xbR#P#sbI.0.ZbnbVbNaA.Z#3.0a6bEbJbG#k#6bIbqbebK.EaGbMap.Ka7bIaAbF.ZbqaH.O#3#.boaMbhbf#3aaab#o#kbt.S.5bYbubRau.MaMaAbMbMbM#s.x#5bX#6aEbSbAbEa9.0bHaGbq.B#ca7bI#cbY.0bXa9bMbb#3#4#3bqbSbq#kan#4", +"aY.F#ibha7aA.iasbbbo#3bebybL#ybLbN.xbu#la6bSaBbNbrbl.xbV.W#lalbIa.bI#taHb..KbN.ibPb0.Kbb#va9a9aL.K.ZaCbObea7bo.F#v#5aGbMbL#1.E#I#6bu#3.K#5bP#3aG#Sbta9#JbObBa2bobIbW.Z#6#ka9.Z#5bqbHbO.7#lbK.EbR", +"bUbJ.ia4.wbHbh.Zba.O#3ap#3a4#nbUaA#kbYbI#c.7b0.5a8a9bS.NbQ.BbFaA.Zbtbtbt#6bIbFbtaAaAbXbHbLbNbpap.SbebI#5awbq.xan#cbo.KbobHbT#R#Ha9#E#5.Kbe#catbfbIbSbubIbeaKbtaKbY#casaG#kbH.ZbybTaO#cbJ.O.ZbIaG", +"b2.PbIaAaAb1.sbX#Ebfb1#t#qaAbAaH.Ebua4#6#kasboapb2.x.xaGbEbe.5br#9bubX#6bEaKbo#qag.ZbTa7bPbH.5#5#k#5aGb0a7btbY.K#LbL#5bM#X#2#N.ya2bu#C#y#3bo#jbB#B#qbb#c#9al.K#5bTbNb0#cas#3bN.x.ZbEbXaHbN.0.Z.0", +"bq#6bS.na9#ca4bq.Zbtbu.Ea9a7#LblbXapbebqbo#6bYbPa4bXbYbT#IaAaZbqay.B.ba4bNboa2#5.x.EbYbo.F#5#DaAap#5bI#ka4bX.EbRat#kasbJas.O.Zbq.7a1aO.nas.S#2#e.2.ZbHbX.S#5#L.SaVbY#caV.MbSbG.dbObqbIbMa3bb#c#L", +"#kaG.San.6#l.EbAa2b0#k.Za4.Oa2#3.FbMbb.ObJaH#kbRbGa1.nbn.5bn#sbM#N.Y.EbSbEawbebqaC.BbIbJbq#6.K#J#cbT.B#3.0beb0bQaAb0bLbqbIb.b#bO.baya7.E#P#kbP.z#e.x.db0btbE#6bBbTbT#caHbTa2aGbY#3bAbBbSbTb3.EbK", +"bwbYbMbEbo.Eap.x#5bHbebo.LbLawbE.x.ZbqbYbMa2.x#5.ZbJbXa7.ZauasbPai#kbE.BbYb2bzaHbP.Z#.a4a2bJ#5#6a9bQ#k#3bLbqanbM.xa8.0a0aObM#PbR#Xa7bq#O.gbRbRbK.xaAbUapbJ.KbNb.awa6b0a7bYbN.SbY.ZapaObubYbY.0a9", +".1bqbA#PaHawaCbVb2bNbWaCbG.EbYbXaGbKbSaw.E#W.Sap.IaGaIalbJb.#Hb1bH.Z#3bqbH#6#Sbl#k.xb1btbN#JawaKbI#kbKbQ.Sboasa4#6#IaCbMbXbJaAbIbT#sbLbrbL#ibW.zbI#5bHbObu.SbSbLaG#5bEa2bt.x#3bX.wbEbjbo.7b0apbW", +".ZaDaGbNbTbQ.6.Z#3a2#3#5aA#lbMbFb0blaAbq#5apbqbXbI.5bO.5bIb2.E.Z.Zbq.Sa9.KaCaGbT#cbRaHbI.xb0bua4#5.B#5aGbLapbMbo.g.Ea0#QbF#N#5.Sbr.wb..z#hbLbTbObB.BaGaHbXbEbTa9bH.ZbLbPa7bX#c#.bSbt.E.BbNbKbNbO", +".5bGbKbYbNa2.da6bJbq#6.Za2bNboa4#c#lbEbbbNbXbu#3bTa0asb2.E.YbTb0.E.s.SbK.B#maAbbbI.0.x#3bNbI#B#ha7bGbFbTbq#3.S.ZbebT.SbWbqaB.gb0bObmbtbIbLbT#3b0byaw#tbJbQbO.x.Sbo#Lb3bNbmbobKbOawbRa2bJb0.YaAa2", +"btaGbEa7#cb1byaGbobqbL.Bbe.7bIbqaBbWbq#5bq#3#cbX.ybHbnbqbIbq#ca7a7bTbJbPbmaKbIaMa1a7bJ.6.xa9atboa9.5bWax#6bW.NbXbUbTa5bT.Kbq#3as.waYa7aMb0bH.Ea6bNa5aG#5aCbTak.EbTaA#5bHbL.xbobhbS#5bHbea4bIap#6", +"bN.5a2bX.xbQaH.B.Z#3.dbU#kbNbMbFa4btbWbM.E.S.x#6asbL.ZbLb1.Z.0akb..0aZb0bTbP.ia9aAbHaGbH#L#cbeaAbPa2#lbQbLbHbw#3bHbq.5.SbM.SbMbIbB#qa5.xbbbi.M#c#tbebob.bYbJbTbA.wbo.wa5aAa8#t.h#3#ibS.ObIan#3.0", +"bHb#bM.Zbq.sb2b0.a.SbbazaRbNbN.nay#3aG.J#ybSbNbNbWaB.YbL#6anbYbE.Z.xaO#cbea9a9be.mbH.nbq.EbBbebB.O#.#6.x#6bI.Kb2bybAbqaAbP.5boat#k#c.ca#.ZbQap.MbTa2be.Za7bQaw#Oan#ObP#5bY#5#5bJbu#6bBan.E.xbI#3", +"bWbX.Z#5bKaua5a7bTbNbY.B.5bRbVbt.6.xaHapbO.bbqbz.x#5bNbJ.Z#3bHa9#2.EbebN#k.Z#5#q.Z.ZafbV.ZbMbNbqbXbSbI#5b0aG#5bDb0bKaHa4aAbu.0bIa2.xaG.E.BbAbNbHa9.SbYbI#6.ZbIbQ#2#cbIbQ.0.KbO#6#c#PaHbM.EbfbHbo", +"bKbIbI.i.0bL.7.waG.Tap.Sa4.0buai.KbS.Oaw.Sap.6aGbO#c.Sa2bJa7bebH.x.0.BbI#c#Bbu#cbR.YbRa7a7bM.xbI.x#Tb0bVa9bI#cb1bq#c#hap#c.x#3#kbI.KbT#mbqbO#6bPbYbYa9bNatbWawala2bq.xaAbTbobtbf#hbO#5bo#3bIa6aw", +".Eb#.E#2b0bTbMbe.S#3bP#6bOaHbSbSbMbYbP.xawasblbQa2by.TbJasaHbe.KbT.KasbqbtaAbH#3bIbobybGbWaC.E#G#..EbqbqaA#6a9bYaM.6#caB.Ea9bKay.ibL#5.Pbta8b0bMbFa7bqbIbea2bJ.E.KbqbS#6bJbYa9.O.raubA.xbY#kaAb2", +"bJbO#lbXbM#laYbT.Zbl.F#5bBbX.xb0bHbebI#3bNbtbTa7.5bO#3bo#cbObNb2#6bOb1a0aYaAbWb2#6bC#9asbH.0bHaC#T#kaHbXbqaA#5#h#3bYb1apaAawbTbS.k.ibha9aYbMb#bMblbeb..nbtasbKbEbzblaA.ZbQbJbYbTa4bTa2b1.EaGbIbF", +"bT.xbKbHbWbq.B#ka7aubqb1anbUbL#JbT.5bM#6.xaAbIbubL#ca7.SbUapbM.5bu.ka9aAbMbJaYbT#SbPbBbfa9#ca9bH.S#cbXby#waA#taHala2.5bKbSa9.EbMa9.SbhbLbM#6b3bTala7ana2bLbqbTbe#3aAbQ.6a9bN#Qbtbqa2.xb1a4bzbqa6", +".x#lb0b..Ebhbqb1a8btbmbbbhbJa2#5b0bebTa5b0bJbBbIbNa9#5a9.x#3.SbXaZa5.HbX#B#UbLb1a2bYbYbMa9bobtbF.0bJ.SapaAaGbG#gaGbSbJana9b1bY#3.E.x.Z#cbqbQ#cbqby#cbMbIa6bLawbEbH.KbtbLbeaOa7bqbealbube.5bK#.bo", +"bK.BbLbX.ZbXbL#3bKbhbu.ya5.ibPbTbLbh#5.Qby.k.i.k#5.Bb0.BbPaHa4a9a0a8#qbL.Qbnbq.ga7#laAa9bT#B#v#jbK#k#ka4#kaKbTaHbL.Ebl.5bN.6a4bIaza2apbt.cbY#cbb.ZbI#cbfapbSbIan.iaMa9bN#l.i.5#4bI#c.na9bIa9bHbe", +"btapapaW#kawbe.0#8aVaW#5a4a9.i.IbNa2a7bw.OasaGbh.F.naG#l#5bBa9#qbBbFbO#5bMbOaAbB#k#X#kb0#kb0aZ#kbS.e.S.0ahaObSaybHa7#k#kaA#U.nbH.0.Z.0bHb0#P#k.S.BbHbebMbI.x.Zbt.J.7.Z#k.S#T#k.E#4aObN.daF.e#4#P", +"#kbQa7btaGa9azbY.WaGaGa4a9.Ob0b0a4bJaHbFaza5aAas#VbL#kbe.0bMbWbwb0bL.xa8bIb1bJbJ.O.F.I#ka2#ibHbBbIaFaC.SaHbY#l.0.0asbPaAa1.KapbPbMbS.0bSbq#l.xbqbTbY#kaH.0a9bt.K#O.Y#P.Ja7bSbQbEahbq.E.Zat.BaVbH", +"btaGaH.7aCbHbNbS.WbsapbSbLa5bO#6.b#k#lbo#5.gaGbcbTax.5be#k#xa6#n#3bIboasbFbebJbO.jbRbLaKaMbo#m.ia6.xa4#PaHbOaFbqa7bBaO.xasb0.E.Z.Eas.x#lbqbzbKbV#c.Z#xb0bY.SaH.EaC#m#.axb0bNbMapbL.4#.by.CbTas#l", +"aF.SaHbJbNbMbC.Zapa2bGbQ#6.KbC.IbG#cbq.K.5#m##b1awbX#k.5aGa9bT#5.xbm.Sa0.FbhbH#qau#6#JaA#B#hbc#5.B#k#4bO#.aGbSbIbeaDbM#k#5apbLbu.E#3bXbtbX.nbob0bKbT#Va2#6bJbIaG.KbDbEab#5bEbS#tb0a0as#lbMa5aA#B", +"bHbOakbE.E#..Ba7aLaT#c#3btaG#NbY.dbfbN.ZaIbKbPa8aC#NbNbSbXaGaAbebObR#5.xbBaZbJa7.k#9aZ#Lbu#vbeaZbKbHby.xbHbO#.#PbTatasbyaB.VbS.x#cbt.FaGbXbLbN.Zbi#cbT.Ea6bYaG#kbObY#ubEbobuapaGa5b2aZbPaZbLau.G", +"btaSaB.D#lbT#ObP#ta6#3#3bBbHbe#k#5.5.ZbFbEby#hbqbq#.bu#lbKby#5#BbEbXaYb.bL.9bXbX.i#BbB#Ab0bLbJ#lbM#k.F.5bJbTb0a7#9btbe#5bt#JbebMaMbqaMa2bzbobt#3bTa4bMbo.0bXbIat#J#3bYa2bJ#6bo#6.K#5#mbtbBbKboaA", +"b1#l.j#Q.D#H.B.xaHbyanbYar.1.xaya2a6bY.x.ZasbIaA.Ba4.5asbE#B#5bL.KbLasaCb#bKbXa2#qaAalbua5.S.5.Ebt.zbXbMbTb1.xbzbIaCaAbyatal#5bt#ca8au#6bebRa9#6as#cbN#cbWa9a7#kaH#Va6.E.E#c.xam#lbBaw#5.5bBbEbA", +"#U.4.0.Q.ZbMbObX.KaKawaKbP#5.bbq.M.Ta2bWawa8aAbI#kbRaGa4bJbubPa9#3bIbPb0bTblbWbn#3bLbt.w#V#U.Z.z.I.ZbRbKb1bLbXbWbBbebLbtbfaK#c#uaA#6#6#S#vbSaMbe.EbHbI.0bo.xa9.Zb1#k#V.xbNa1a1.ZaU#q.dbNaL#6aRbN", +"ah#4bS.Va7#e.Maibqan#kbXaw.BbLbYa2aha9bIaAbGahawaAbB.ibXbT#c.xbbbJapalbe.xbO.#asawbJ.QaObXakaZa9bXb0aAbA.0br#5.sbNaha9#cbVaCbYaVbDaw#c.ZbeaBaebMbKbP.qbMaAbYa1b0bEbSbE.Ba7.i.Q.BbObNboa7bM.Sa7bW", +"aOaw.xambN.M#2bGbJ.0.Z.xbT.E.ZbHapa2bt#k#3bIaibQbTaAbRbT#k#BbMbMbybybNbe.S.O#..Zb2.2.5b0#H#kbKbt#5bu.ZbM.k.K.xbe.xapbea7aG.0aG.5a4bEal#6awbT#Ob0akbT#c#.bH.SbLbIaUa2.xalbH.0.S#sbebf#J.ObNbJbN.O", +".7#l#4.SakasanaObMaGbqbN.0b1bQ#..daGbIbJbTbTa6aCbObIbH#S.Za5aY.xa5#jbobo.K#5bFbLbtb##U#Rbq.hblba.0bna0#5.QbO.EbM#haA#.bLbMbKa5aAbCbBbfbTbqas#3bWa7bNas.Za7.EbYa1bMaVbt.EbYa7#O.BaKbXbuaHbqasbH.E", +".S#6.Z#kapbT#4bIanbHbRb2.S#cbO.xaybb.BbX#t.Z.V.abJbTaA#5.i.F.KbKbFbFaa#3bf#vbobbbnapbM.S#2#lbKbra9bXbI.0bebMb0#h#6bXaAbM#3bnbPbubobH#.bzapbLbNbIaHbP#ca2bI#5a4bLbK#k#k.Z.B#3bPa7bYbbbobJaG.Ea9ak", +"bLbq#kbJ.S.x#c.E#PbW.Z#l.6a6.nasbQ#4btap.0bBbS#cb0bTbBbLaIa9bL#5#q#taAaaaK#nbtbt#n.ZbH#Rb1bqbUbJbKbz.K.ZbobLbtaZb.aZ.kbM#vbIbM.ibTbFan.KbRbEaA#5bqa9bebI#cbLa2bu.x.xbFbPbIan#HbeaA.KbT#m#kbo.Zbq", +"aIbMb1bHbP.pbLbP.xaGbJapbSbX#.#caCaUbTbTbAbX#c.JbXalbXbb#ia7bJala4aM.Ka2#LaC.Kbwb2bBbO.BbL#U.0#mbXbJaAb.bIaG.PawbMb0bMbn.0aKbHbXa4ae.iap#lbIbo#kbBb0bo#cbPaGaAbua7bI.ZbE.E.xaybbbBboatby.2.Sbq#V", +"bLbTbMa9bP.S.xbRbLbYbPakaAa7bM.E.N##.K.Fa8.SbtbNaG#kbPbrbTbIb1bK#Ra7a7#3bbbxbu#qaA.x.5.0.x#XaK#3.xbX.Ka7bLbIbyaAbq#cbq.Y#3aObb.S#k.sa7a9bPbt.aa2bTaAaGb#btbubt.KagaSbL.SbLawa9aVbI.KbtbM#3#cbJbX", +"bc.FbT.g.haqbMbPbP#ebIbN.6a7#kaAaV.cbtb0b2apaObEa5aAb2.KbIbubl.K.B.Z.7bM#5.0.KbE#vbHbXaf#ObY.IbobhbNbm.ibTbhbT#u.SaWaVbHaG#c.ZaU.A#YbIbYbfbSbGbibo#3aMa9#mbP.K.Kb0.Q.S.xa2.ZbNaCbb#6bo.5bTa7bq.B", +"aw.S#4.cawaS#P#.bqa2bX#.#c#caPa2bHbQ.FbY.d.3aw.o.J.5.5btaGa8auaY#GaebXbWasaK#v#a.H#ObPbJ#3aAaU#cbL.KbIbK#5.xb0bI.a#4.ZbbbL.SbI#..I.SbT.E#k#1bL.6bTaNbo#5#3.YalbLanbqbSbTa7bPaxbubfa7bz.0.Yaw.5a4", +".Ea1.6#2bSbqazbX#kal#c.xawaGbSaUa1.5.5a2.WaCaybYbEaVaH.SaAbq.kbaak#k.0bX.xaY#v#5as#sbB.S#ca9#ca9bK.I.Kb0b0bI#kbKaO#VbHaw#3.Sa7aebX#I.xao.wbq.5bM#5.Zbua5bEbe#vaGbybB.S.Ka2#cbz.SbYb0bBbB.Z#5bo#k", +"bNaG.6apbY#k.r.7aSawawbXaC#caCaP.xbYak.VbNbb.WaWaxbM#c#lbNbXaAbIae#O#.bq#tbO#9aKbRbT.S.ZbNbyaHbNb0bPaAbBbJ#LbebMa1bq#kaKa9bL.x#NaH#Q.x.Z.S#Hbq#Xbyb0#5bMbFbBb1beaAbL.xbtbP.KagbJbqbtbL.xbubTbqbM", +"awbIaCaC.x.0a2aG#k.O#kbq.xbGbS#6.SbHbMbSaCahaGbB.Saz.ZbLanbPbTaY#l#.bTaAbqbeaA#La7aGbFaBawb1boap#Jasa9bWbWbIbObX.NaGbSbP#5.ZbrbMaAbL#kbIbM#hbKbX#caA#3bebuaAbebfbq#6bNa7#5a7bEbobubEbTbE#4#3aGbL", +"###caG.SbEboaGbMbMbY#Vbea4bvahaW#PaC.Zbq.0#6bz#6.J#Waz#J#lbPbLbt.0b0.xaKbO#mbLa5bwb0#kaH.Sa2bWaAbIbJatb0#6.iap.xa1bY#5awa0a9bnaebaa7aY.EbXb0#l#ka8#Ca9bobTaKbYaK#rasbIbLbN.SasaG.4a2.SbobXbK.Ybq", +"an.5bua4by#5.O#c.haCbJanbY#caJbfbHasbNbY.2aq#JaAa7aGa2bybOaAapaYb2#9bLbPbWbXb2.SaHaHanby#3.hbTaObX#3bL.SbT.x.ibTa2bN#5bBaGbobJbqbt#lb#.EbJ.5a9bL#3beaKbOa9bu.E#vbK.MbtbqbN#5bM#3#k.KbtbMbI#c#cbo", +"bobfbLbYaAayaA.M.Eal.nbybLbubE#caia1.7btbBaM.L#BbSaC.5#kaCb0bOaYbMbAb1btbPbL#nbLaU#u.SbebNb..5#sbMbub0a9a8b3bTbI#V#3bubF#q#vbn.2.KbMbo.kbObLbJbJboboaC.KbY#man#mbqbBbLapbMbbaGbS.5aHa7a7bYbebLaG", +"bT#Eam#p#5aAaL#3bOanbqbVbEajaHapaO.SaH.SbObhbM.H.a.SalaGbTbYbh#6bJbM.p.2a9aA.0aoboay#9.E.x.E.g.2a8.5bn.sboaA.Z#6axbF#Ea5ab.4btbJb#bbbPbzbNaAbxbM#5#5.K.iaqbB.K.Fa9anbTbH#k.EbP.SbIbeb0bYbu.x#3bq", +"#PbN#Ta9aVaWbtaG#VbP.ZbhbXbM#h.G#d...ubYbq.7#k.0bNbwadbSbea6aV.5.X.1bE.J.ZaAbS#5.5.Z#T##bY.E.F#l.EbH#c.Ebu.ZaH.CbTbMbXbT#n.5bMbM.JbEbG.5bBbSah.KasbqbtaYala5bJbJ#cbo#3bNbubnaC.gan.cby.Obu.waAa0", +"#4aGbN.E.BataG#ubY.x.EbLbM.2.iaKa9ap#EaGbAas.S#..BbYbNbN#c.Ea2#3#c.JbN.5apa2bRb0.FbNaA.6bWbQ#.bPa9by.Sb2a2bTbE#6bTbIbq#5aA#5bua0beapbEaGbq#capa7aAbMa0bIbt.KaAb0ay#3.Ka2.BbI.sbqbSay.x.Z.xbo#SbI", +"ak.EbSaVbRbSbbbbapbi.KapbF#5bCbtbBbbbOaAbIbI.EbXbI.0.Ba2bqaG.5.dbSbNaCap#mapbubLaM#kapbFbhapbuapaCbJbobSbqbo#FbHbub#asbJbhbJbh.B.FbHbq.0a2aw.BbtaAbubXbI#kbXbPbAaPasbo#5aC.5a7.hbt#kaH#5#c.IbL#5", +"aB.0bMa4#6bP.KbtbDaW#5.W#yaw#qbybLbI#vbXbT#hbLb0ay#5#3#kbA#cbBa9blaGaMbo#Ebh#W#maG#q#Lb2bobe#vbz#AbNaB#5bo#5aw#v.0b0.KbK.EaAbJb1#3bKa9.KbObJ#c.xaAbLbobLbMbubIaYbDbSa6aAbI.Eb0.5bt.xbubH#ca7bbbL", +"aq.nbX.SaH#3bLa9#B#BbiaTap#wbi#Cbh#kbh#5a5#6bm.ibJbqbMbpbM.0bMbb#p#jbu#m#J#9#9aMblbu#6a9#5bfbIb0a9bfbUbIbyb0bobWb0bt.i.SbX#m.Bbbbq#c.KbNbza4b1bKbWbSbLbObobLbeb0arbbbu#k#6bLbMal.EbMbE.Bala9#k#c", +"#kasbMbybXaZ#v#qbn#3boaAbWaXbK.R#I#hbJ.5bU#ha2a2aAbTbEbO#5aAbM.0b0bb#m#6#tbTbhbnbzbobT#9bobeaAbb#ubIbe#p#q.Kbbbua9bPbI.KaY#kbh#6.8a7a7a5bXbBbJbI#kbu#la8.OaYasbMbN#3bL#5.D.i.S#Hbf#h.EbubNa9.Bbe", +"#QbLbIbPas#5a9bP#Lbra7bBbtbI#c.x.Z.EbKbJaha4.RaNbTbLaZ.ZbMbtbFbJbtaAakbO#q.ibWas#3#I#3bY#2bJaGbHaLbeaAbebybt#9bT#kbPbMbPbtbebH.EbX#nbIbObqb1b0#vbRaZbt.BaYaw.5aA.R#3#8#k#cbHbXbMbhbcb1b0bTawaV.0", +"bTbTa7bmbRbhbma9.g#b.y.waG.UanaCbKaH.Ea4bN.Jaya4aYbKbubTbL#hbr.Z.SbYaY.ObL#sbPaYbq.5ak.E.7a4aebY.kaLaMaM#mbS#qbtbra9bTbobLbhbX#haZbP#hbXa8#h.xb##.aAbPbPbXaYbJ#v.Bawbe.x.KaA#k.QbTbTbXapbE.xaCbQ", +".K.K.E.x.xbY.Ka9.bawaDbq.v.ZaO#da1a2.ca2.aa2aGawbMbTbObTb0bB.zbe#T.V.xb0#ca9a8#Ja4.S#5bH.Oa9.B.SbtbTbL.ZbH#lbBb0aG.ZaAbI.ZbubLb0#k#K.n.bbNazaq#q.SbE#iap#Db1#l.5#3.KbMbAaAbE#BaAaKapaAa5b1bTbua8", +"bwanbObI#r.7bu#ybSaG.5.Q#G#.bVaw#cbLa4.BbObQbqbGbMbLbtb1.KbPbMa9#..MbqbobRbMaBa8a9.5b1awbTbSbybKaAbX.S#3bXbP#NbM#qasa5bMaAbIaAbL.S.x#4.M.SbYa5bLbqbSa9#zaAboan#.bLbwbubebX#qbS#5.x.i.KbI#m.2asaA", +"#6be#3a1.E##bmbMbBbYbP#UbRbRa7#6bObWbXbI.E#qbJbTb0byaqbJbMbXbWbt#X.NbH.ZbNaAbu.i#cbKbKbfa2bBbXbN.ZbTbRbT#sb0#5bJ.Z#.bPbXaMb1#6.E.IbR.naObN#kbTb.bI.EbobMaAbAbHaAaGbJaA#c#qbCbo#5bLbMbL#cbObXbObX", +".KbJ.7#XbSbWbtaG.Sa0#sbTa8a7a8bTbIaKbLbIbJbhbR#3aAbLbMb0bMaAbIaA.7bMbN.ZbS#BbX.Kap#AaibW#kbNbTbIb0bXa7#k#3.IbH.iasboaYa2asbqa5bIbLa7bMaW#ratasa0a1bq#c#va9#3.xak#5#nbe#3#5bebXbIbMbtbJaY#kbXbTbo", +"bFbz.7bT.5#kbybo#hbWbobtb3#na5.7#J.IaYboaYb2bPbOasaCbe.Kb0bPbeaBbWaObMaHbJ#EbY#mbqa2#kaAa2#5aO#c.5b#ag.5b0bObK#2aZbL.EbT#5bLaYbJ.K#vbNaG#k#3bubIbT.F#Lbea9#A.ZbKbQ#3b1bL#3#6bObtaAbOanaBbJaAbTbb", +".Kbna2bq.Z.0#m#vaZbTbo#L#BbubPaAbr#cb1##bM#tbH#vbMbT.Za8beb0#.aA#ka9bPbObL#kbB#5bSb0aGbIbqbT#Ja7b#bIbObnbP.Bb1bEbLbobza0bLbobI.Ka5b0byapapbQ.Ea8bHbLa2bobS#3aG.xb0bfbE#3bub0bz#c#6bIbhbI#6bLbebM", +".KaKbYae.S.B#5bIbqbtbu#y#E#cbSbJ.F#3#ca2awbIa4aHbIa9bIbTbWaA#hbq.h.7bHby.fbt#6bYbqapa9bMbBbYbNb1#k.F#k.0bI.0bh.ZbIbh.Eb0bt.Bbha7#maK#Sbi.V#k.KbX.E#kb0a8bua5.5.0aI#AaKbuaK#5aHb0#hbtbRaGbLbKbLbA", +"b0be#P##.EbBaAapbPa7bNbv#7.a.0bObsaFapaGbGbSa2.6aAbTbMbObJ#5bI#5bIb0bWbtbIa7aWbVbtbM.xa9.ZbTbqap.x.s#3.g#3bL#NbK#3##a9aY.xbh.0#5#Jbh#EbebM#cbT.6bqa4b1aLbNa9bM#VaM#6apaA.xa9aM#5bJbM.BaZbXa9bubX", +"bybIbSaGb0.caMbYbJ.r.5#k#P#XbL#.as#XbJbK.2btaGbD.Z.PaYbH#h.B#cbb#KbebqbbbNbiay.Ya7.Z#UaObH.6#2.7bJbH.0#3asbKaA#5#2bOaSbLbPb0.S.g.d.KbGbEbNb0bXbn#X.B#H.0#2.Z.n.SbYbHbMbE.KbTa2.Za9#caKbo.KbtbMbo", +".5aAbWbS.Ebo.Z.K.BbJbEbX.5aH.5bqaA.EasaHbobeaGaC#s#XbIbLbIap#3.O#3.xbIbtaCa2aLbs.SbObIbU.s.xaAbPbIb0bLaAb1bb#6#mbM.0bt#UbN.g.ZbLbu#VaH#ka0bo.5aK.ZbP.KbJbWa8bJ.Ia7aK.SbEb#a4bLat#nbobebLbNaAbTaM", +"bbapb1a9bobP.xa4aGbqbq.Ba9bOaHbqbT.jbXbI#cbMbiaGbWbI#XapaSbObIbEbqbua2bo#5bV#6aybW#XaF#IbL.Oaea7#O.0#kaBbM#qaA#maA.gbbbTbJ.EbBbJ.dbMaGaAbNbTb0b#b0.hbH.BbRbIbEbWaAawa7beaFaAbMbebtbWbL#t#L#5#3#c", +".5a4.E#kbd#lbXbOa7#cbo.xbHbO.E#3#ka6bobLaGbKbq#3ae#.#Nb0a8a7aH#6#tbzbI#6#cbCapbobMbMbF#k.Bbr#.b#.Zb0#6bOasbMbybMb.a9.i.SbqbLbcbTbNa4#6a7#cbTbJbIbbbT.KbObKbF.g.K.0#3bS.4aG#3bY.xbubTaGapbYbMaAbL", +".5aA.K.K.ZbGbBbVbobHbybz#kbB#c.SbNbebHbea7a4bTbMbTbM.IbT#.aGbJbSbF.E#EbJbebtaYbu#s.SbWb3bybI.5bIbH.gb#bLaAaY#qbIb2bMbY.iaAbXbLbf#eawbOapb3bLbBbT#ha9bIbh.0b0bLbPbY#5bX.BboalbI.Kby#A.KaAbe.K#5aH", +"#kbtaGbqbebX.7bO#c#JaGbPbo#3b0bu#haHbebWbXbBbqbW.Pa7bJbO.EbubKapaM#3bXaYaAbRaZbPbBbP.Qa9.gbI#3bI.xbTbI#cbmbebobJaMbM#3bKbP.Y#ua8#cbG.K#kbebqbnbLas.KbXaAbP#3a9bMasap.5#6#l.x.6awbzbubtbfbbbeaAaK", +".B#5.5bebYbta7#3#6bXaG#x.KbY#qbNboa4.Ma9bNaA.gas#..l.QbMb0#c#5b0#5#j#3bIby.kbWaYbMbBbCbr#3bKb0aAbL#ObLbP#3bhbT#nbLbobPbybeaA#Z.K.MbH.ZaC#6bTbtasaZ.Kbt#5bobLaYbebWaCbya7bNbuby.7bob.bebtbL#nbYaA", +"#t.5bTbMbHapbMa7bea9bobo#maAa9.KaHbl#AbQ.4.5bq#saS#2.Fakbh.x.BbDbo#5a9bMa0b..g.I#qb0a8bJ.Zbrbt#3#HbXbN.ibTbobP#u.i#g#3.iaAaK#6bnaP.xaGbtbM.EaYbLbIaM#ma8bIabaAaKbt#ka9bIbebFbHbqbmanbT#3#5#5#5bl", +".nbH#c.n#lbq#kaHbX.SbTapa7bEbBb2#ca2.J.6a9.ib#bT#cbe#t#3bI#DaAbX#6alaAa9bB.E#mbH.ib0asbebbbKas#3.0.KbPa7#l#cbo.Z#5a2#5aAa9bybTa9#Q.x#N.x.ZbJ#kbqbL.BaebWa7.O.UaSbN#qby.Zbo.0.SbNbqay.E.N.Ea9.MbE", +"a7bYb2.EbYbP.xb0.SbobVb0.KbNb0.Eaya1aGaA.ZbqbtbJbzaAbeaAa4.K#BbTaqbBbIb0bRaYbIbobJ.KbubPbLaAbo.sa9#c#k.KbubIaqb1axaw.0be#.#3#kaGbTbLbIbqbP.jbM.B.S#R.xaO.i#2.x.ZbYbIbua9.BbI#lbKapbfbubMa4a2at.Z", +"bLbH.E.K.Zb0.xaxbYbMbq#6#lbO#3aAapb0bEbEbn#.bOb.#Lbbb1bt.Kbe#.aGbMbLbTa9#.bObJbIbB.z#5bLbobI#ibb.SbebXa9#kaGbz#c.ZbTbN#kbO.Sa7bQ.PbPbobLbI.F#5bXaA#NbMbT#Ia7.IbIboa9btbObNbP#V.ra7bNbNaObw.fbOap", +"apbyaw.5bL.SbEbK.x.E#5.Z#cbA#caGan.Ba4.Faqb.bbaYawaA#5bSbLaMa9#5b#bMbBaAbTa9b0bqbo.Eas#hbWbXbL#3a7bR.FaHbt.6.SbIbqbtbtbJbqbobebEasbybXbfbX#3bJ.F.h#lbI.BaA.sbQbMbP.E.ZbNbIa9bB#k#3asaHawbqbX.K#.", +"aAbSasaGa4bIbS#6bobla7#5bLbS.xbA.x.Nbo#kbEbTbqaMbtbtbt#qawbLaAbt.KbLa8bTb#bIbh.BbXbca9#kbIbNbX.8bF.VbJapbLa9bybNbJ.0.Y#k#6.xbu##bO.xbK.SbIa8#k#tbWaAbIbIbH#lb1.0bt#6b0a2.EbAaCbIbS.EbL.0boaHbRbN", +"bT#6btbt#L.Kbh.KbI.FbobIbJbqaAboaw.BbNbIaHbXb#.U#3bwbT#6a9.Ka9aG.Ha9#kbJbebLaAbU.KbMa9aAbMa9bJbL#3aGb0a9bubL#rbtbNbobO.EboaG.K#6bTaMbOaMbtaYbtaMa7bJaAb0bOaK.Fbo.0bYbqaqaAbt#5aZ#kbebObobX.gbuas", +"#qbSbPbKbubAanboapb0.Eby.5bYb0bYa4#cbRbPa6bObL#qa4a9aA#3#6bubu#5.ga2b1b0bJapbL#3.saA#lb0bTbtbHbIbQ.Da9.7.x.7apbJa2bPaHbLbY#k#6bMbEa8bB.ibJbIbOa9.ibMbqbnbe.Ba5bJbT.0.Z.S#5.B#t#c#q.xaAbta5.SbMaA", +"aHbxa2be#6bBby#t#k.xbua4a4bPa9aHap.0#cbAbWbIa2.l#JbKa9bo#AbTb0bzbeaAaAa0btbI.lbLbybXbAbTa5bLaZbubJbubLbya2anbJbT.2a9a2bXa4bTaHbHbubnaA#Lby#3a5bobubB#q#5#hb0btb0a7bM.xbA.xa9bYaKbKa8asbrbOaY#vbT", +".5a9apbX#cbH.SbybYbM#5bYbKapbIbX.M.Vazay.ObAbI.SbFbPbf.Ca4b0bobLbP.xapbN.7.KbwaAbqbL#ka2.SbLapa2buaGbPa9b0au#c#6.Maw.Va9aAbPbtbL.N#c.cbF.E#6aGalbPbM.YbNbW#cbLaGbHaC#4bLbX#cbIbHaF.Zak#l.B#k#Pa7", +"a9.xaw#kbN#cbo.6bMawbIbMboaFbuap.MaH#ka2.Kaw#3bL.hbPapa8#5bTbLb#bq.Z#kbJa9#JaubebY#6btbP#3bT#c.Ia9bOa9byaAbu#5bea9.0a4aAapbqbOa5bYaQa7.R.0.EbIbIbfahbO.S#3bqbTbo.7.xbf#3.xa9#ebeb1bMa7bo#.#Ha9.E", +".K.nbNa2bA.Z.6bYbY#kbK.M.xaBas#3.Zad#5#.a2#k.EbNaAasbMbTbXbP#3b0bqbNaA.xapbJaHaKbTbfawaHbb.Ea2bK#3bebtbeaKapby#5anap#kbYbT#tbqbT.S.x#5#haC#qaYbJana7#3bY#3#3bHbJbI#6bSaA.FbQbOaw.0bG#kbLb0bQ.rbM", +"bQa4bHbqaCbbajbQapbMby.KbtaG.SbyaGapan#ka9bX.K#6bMbK#cbRbI.7#hbP#4bLaObSasbebB#xaw.E.SbP#lbobQanaKbtbWbtb0bL#Mb0bLa7apa8bObTbHaMbPbT#6a0.zbIaAbh#lbbbLbSbq#5bWaCbo#6bqbybebPbubFbq#kbPbYaCbJbta2", +"awbLa4.S.Map#lblbUaw.xaAbNbr.ZbPaAbIbtaGapbQbRb1awaYbM#vbfbJbtbXaS.xbTbebMbYbfbI.5bSaA#c#6bHb0#cbbbOaLaAbubN#5bo#5bWalbIaAbybJbTa0bobIbTa5bMaMbPbTbSbPb0#5bN.EbybI#c#v#6aA#5btbI#3#cbI.S#6bu.ZbT", +"aGbqboaGbJ.5.K.SbE#c.5bobO.S#5.bb0bh.hb.asbMaG.7bLbzaZ#3#kasbPbI#ka2.ZaH.Ya5awbtbQ.KbMbubY.5bybPasbe#vbQbFbb#JbubXbn.ib0bLa0bTa9bObJ.gbebMbSbJbNaGbqa7bo.xaGbIaHbB#mbobwbe#3.KbBa9#5by.KbEbTbTap", +".xbyawbqa2bzbHbNa9bL.E#3bNaG#3aAa9a8aZbLbKb0anbYaY.SbLbOaAbL#5b0.E#kaGbIbOblbB#vbX.7#5.ZbuaGbMawbBbya9b0#3bfb0#5a5.G#5.ibMbeaAbMa7#xbf.Z.ZbEaC#c.EbTbSbMaG.0bfapbIapbRbtbl#m#3bOa9b#a9bL#mbB#c#n", +"bz.xaGaia6#kay.ZbIapbP.xbYbP#kby#bavbh.Ka9a7be.xbS.i.EbtbJa5.xaA.E#5#kbTat#5boa9bNat.EbTaEbXaGbWa9.KbebE.KbT#5#3bg.k#h.sbnaA.5a9bTbB#Pbo.Ma2adaVb0#cbuap#ka8a4bT#faAabaM#qbobeaA#5bo#v.K#6bE#tas", +".5#4bfb.be#t#k#c.F.0.0bYbO#P#c.FaFakapbYbWbNaM.K.MaGbBbqaH.SbmaZ#d.BaiaGaGaHaCby#P.B#e#PbR.x.xasb0.IbWbTbIbo.ZbMbYa7bIbN#k.E.x.I.6bLbMbYb0bX.M#6#lbJ.Z#NbT.t.s.xa4#3a6bR.S.Ka2bo.WbY.J#cbua7bX#3", +"aG.EbfbebEbE.n.Eb0aw.FbEasbMa1bL#k.naAaGbMaw#.bA#caCbYaAbzaAbMav#T#k#V#lazbT.RbObq.0.7bLaFbIbQa7#kaK.EaKbXbMb0b.aHa9bSbe#kbP.Eae#kbobo.YbuaAa6bT.IbM#..EbIbMbBbTbIbqbL#c#6bMa9bq#fbSa9aH.K#3#can", +"bX#caKas#6#ta7bIa7bBbLbPbYbo#5a2bK#4.JbI.MbBbobbaybqbY.xbJbMa9bI.xaGaqawaHbTbQ#cbW#c.5bfbxbobt#SbtbIbRbJaYasbXbtazbXbobMbPbJbTa8#ca7.ZbN#kaH#3an.B.4aZ.ZbhbK#Q.x.xbt.EbP.EbYbLbt.R#caUb0aGbqbyag", +".5aObobnapa8#c#Pbb#t#3aK#tbo#JbB.JbLbEbQ#kbuaH.Jb0bX.6#5.xa4#5#kbTbNaCbMawbK.KbLbybPbu#6bbbZ#vac.Zbn#kbTbebLbfbIaybobfbo#DbM#nasaHbX#5bMbSaAbMbM.E#5bJbM#3a7a9.ibybSbNaM.xaw#3bHaW#6aLbea9b.#B#.", +"bIbKbeaG#vbe#c.x#3blan#t#k#xbubobRaVa9bNbMa2.EbEbObtbB.0ap#5.0.xawaAbMbHa9bS.S.K.KaKbwbt#q#ubZ#jbLbTbObTbNaYbebTbYbSbY#6aAbt#m#qbqbo#c.S#5bo.O.KbtbTa8.6.Eb.aAbL.5bTa7bHbe.x.ZbtbtbPbYb0be#.bnbH", +"aC#.a9bFbobtbPbLbLbobe#3bbbbbt#qbban.EawbE#.bqbEbHbfb0#5bI.x#c#cbLbXbybtbm.SbI.ybN.Kbe.K#qbD#q#za8.5bfbBbJ.BbTbLaVbMbV#3a6brbT#u.ZbA#kbF#.bMbEbW#B#.bB#naA.K#3bT#cbLapboa2#5#.bobu.KbubyaAbhbIb0", +"#Oa2bX.KbeaA.5a1b0.xaAaAa1#kb1.6a9aA#DbH.ZaVbKbqaA.SbJaA.XbS.S.b#gaA#t.EbL.xbMbWbea2bRbtbubWaM#5.ZaZbP.EbMbJ#mbJ.V#GbHaH#3bc.KaYbL#ca9.0#5a2bqbfbMaZbtaZaAbM#tasbeaCb0bTa4.x.K.E#vbE#LbraKbKbIaA", +".xakaKbybW#6bM#l#ka7#k.nbM.0bH#Pa2#3by#..K#kak#0bnbMaA.5.K.BbNa6aK.ka9bLbc.wbL.7.xaAbqbAbo#JawaB.KbLbq#BbebMbMbL.##Va7#2.S.B.0bIbEb2.7#6.Z.KbJbq#m#5a8bWby#ua8#6#3#lawbTbea7bL#3#3#J#5#.#3.ib#bM" +] + +metal_xpm = [ +" 154 77 46 1", +". c #040204", +"# c #4c4e4c", +"a c #6c767c", +"b c #5c6264", +"c c #848a8c", +"d c #545a5c", +"e c #7c8284", +"f c #646e74", +"g c #3c3e3c", +"h c #444644", +"i c #8c9294", +"j c #4c565c", +"k c #7c7e84", +"l c #646a6c", +"m c #747e84", +"n c #4c525c", +"o c #74767c", +"p c #64666c", +"q c #8c8e94", +"r c #5c5e64", +"s c #84868c", +"t c #6c6e74", +"u c #444244", +"v c #4c4a4c", +"w c #4c5254", +"x c #5c666c", +"y c #848e94", +"z c #545e64", +"A c #7c868c", +"B c #3c4244", +"C c #444a4c", +"D c #8c969c", +"E c #747a7c", +"F c #6c7274", +"G c #4c4e54", +"H c #5c626c", +"I c #848a94", +"J c #545a64", +"K c #7c828c", +"L c #3c3e44", +"M c #44464c", +"N c #8c929c", +"O c #54565c", +"P c #646a74", +"Q c #747a84", +"R c #6c727c", +"DNDDDDDDDDDDNDNDNDNNiNNiNiNyiyiyqyyyyIyIcIcIcAsAsAAKAKeKememkmmmQEQEEaoaoaaFRFFFftftlfPllllpxpxpxHbbbrbrzrzrJddddOdOOjOjOnwwwwwGwGG#GCGC#CCCCCCCMCMMMhMBhB", +"DDDNDNDNDNDNDDNDiDNDNDiyNNiNNyNyiyqyqyIyIIcIcIAcAsAseAKeKekemkmkEmEQEEoaoaoRFRFFtFtftltlPllplpxpbpbHbbrbrrzrdrdJdddOOOOjOwOwOGwwwGwGGGCGCG#CvCCMCMCCMMMMMM", +"NNDNDNDNDNDNDiDNDNiNiNNDNNyNyqNqyqyqycyIcIcIAIAsAsAKAKKeKkKmkmkEmQQoQoEaoFoaFRtRFftftfPlPpllpxpbpbHbbbbrzrrdrdrdddOddOOwOOwOwwwwGwGwCGwCGGCvCCvCCChCMCBhMB", +"DDiDNDNDNDiDNNNiNNDiNyNiyNiyNyyNyyyIqIIcIcIAIcAsAAseKeKemKmkmkQmEEQEoaEaoaFRoFFtttftltlPlPppxppxbpbHbrrrrzrzrdddJdOdjOOOjwOwwOGwGwGGw#CGGCvCvCCCMMCMhCMCBM", +"iNNNiNiNiNNiDNDNNiNyNiNiNyNyiyqyqIqyIIyIcIcIcAsAsKAKAKeKeekmkmEkQQEEQaooaRoFFtRFFftltflPllllppxpHbpbHbbzrrdrdrOrOddOOjOwOOGOwGwwGwGwCGGCGCCGCCMvCCMCMMhMMB", +"NiNNNNNNNNiNiNiNiNNNiyNyiqyNyqyyyyIyIcIcIAcAsAsAAAseKeKmkmkmkQmEEQEoaEaoRoFRRFtfttftlPtllppxpxpbpbbrbrrbrzrdddddOdOOdOOwOwwOGOGwGGGGwCGGCGCCvCvCMMCMhMBChM", +"iNNiiNiiNiNNiNiNyiyNyNyNyyqyqyyqIqycIcIcIsIsAsAAseKeKeeeKmkmmkQQQoEQooaoFaFRFFRFtftPtlllPplpxpbpbbHbbbrrzrrdrdrdddOdwOOjOwOwwwwGwGwCGGGCGCGCGCCCMCMCMCMMMB", +"NyNiNiNiNiNiyNiyNNyiNyqyNyyqyyqIIIIIcIcAIAcAsAsKAKKeKkmkmkmkQEQEEQaoaoaaoFRFFtftftflPlPllpxppxpbbpbbrbrzrrdrdOJOdOOOOOwOwOwwOGwGwGGw#CGCGCvCCCvMCMMMhMhBMh", +"yNiyNyNyiyNyiNyNiyqyyiyqyqyyyIIIycIcIAsIcAsAsAKAeKeKeeKmkmkmEmQEQoEEaoRoRFRFRtFttltftlPlplppxpbpbHrbbrrrrdrddrOrdOdOdwOwOwOGwGwwGGwCGwCGCGCCvMCCMCMCCBMMMB", +"qyNyiqyNyNyNyyqyyNyqyyqyyyqIIyIycIcIcIAcAsAAAKsKKeKemkmkmkmQkEEQEoaoaoaFFRFFtRftftlPllllpxpxpbbHpbbrrrzrzrdJrOdOOdOjOOOwOwwwOGGwGG#GGCGCGCvCCvCMCCMhMCMBMh", +"NyqyqyNyqyqyqyNyqyqyqyyIqIIyIcIcIIcIAsIAsAsAsAeAKeKkKkKmkmEQEQEQaoEaoaRFoRFRfttftPflPlPplpxppHpbbrHbbzrrzrdrdddddOOdwOwOwwOwGwGwGwCwCGGCGCCGCCCCMMCMMMMhMB", +"yqyqyyqyqyqyqyqyyqyyIyqIyIyIcIIcIsAIcAsAAsAKKKKeeKmemmmkmQkQEQEoEaoaoFoFRFFtFtftftltlllpplpxbpbHbbbrrrzrdrdddJdOdOOOOjOwOwwwwwGwGGGGGCGCGCvCCGMMCMMhMBCBMB", +"yyyyyqyyqyyqyyyqyyyIyIyIIcIcIIcIAIcAsAsAsKAeAKeKekKmkkmQkmQEQEoQaooaoaFRFRtFttftPlPllPplpxpxpbpbbHrbzrrrrdrdrOddOdjOwOwOwwOGOGwGw#GGCGCGCCGCCMCCMChCMMMhMB", +"IqyqyyqyyyqyyqIIIIqIIIIcIIcIccIscAsAsAAAKAsKeeKekmekmmkmEEEQEEoaoaoaRFoFFFtftftltlPlPplpxpxpbbbHbrbrrzrdzddddddOOOOOOwOwO#wGGwGGGCw#GCGCvCCvMCMCMMMMBCBMBM", +"IyIIIIIIIIIIIIyIyIIIyIcIccIcIcAIAsAsAAsKsKKeKeKmeKmkmkEmQQQEQaoEaoaRoFRFRtRFtftfltlPlplxpppbbpHbbbrbrrzrdrdrJOdOdOdwOwOwwwOwwGwwGwCGCGCGCCGCCCvMCMCMMhMhMB", +"IIIyIyIyIyIyIyIcIcIccIcIcAIAcAsAsAsAsKKAeKeKekKkkmkmkmQkEEEQoEoaoaoFRFRtFftftftlPlllplppxxpbpbbbrHrzrzrdrddOddOOOjOOwOwOwwGwGwG#GGGCwCGCvCCMvMCMMMhMBMBMBh", +"cIcIcIcIcIcIcIcIcIcIcIcIAscsAIAsAAsAKAKeKeKkeKmemkmkQmQEQEQoEoaoaoFRRFFRtFttltPltPpPlppxppbpbHbHrbrrrrdrdrOrdOddOdwOjOwOGOwwGwGGwCGGvGCGCCvCCCMCMCMhCMMhMB", +"IcIcIcIcIcIcIcIcIcIAIAcAIAAsAsAsAsKAKseKeKeKmkkmkmmQmkEQEEoaEaoaaRaoFFtFftftfPtllllppxppxbpbbbbbrrzrzrdrdddOdOdOOOOwOwwO#wGwGwG#CwCGCCvCvCCCMCMCMMMBMBhBMh", +"IAccIcIcIcIcIccIAIAscsAsAIsAsAsAAKAeKeKeKemkemkmmkQkEQEEQoQoaoaoFoFFFRtRttftltllPlPllppxppbHbpHrbbrrrdrddrddOdOOOjOOwwOwwwwGwGGwGGGCGCGCCCvCvMCMhCMMhMMMBB", +"csAIAsAsAsAAsAsAcsAIAAsAsAAAAAKKsKKKeKeKkeKmkmkmkQmEQEQoEaoaoaoRRFRFRtfFftftPlPlPlppxpxpbbHprrbrrzrzrdrdrOOddOOjOwOwOwO#OGwGwG#CwCGGCGCGCGMCMCMMMMBCBMBMhB", +"IAsAIAIsIAsIAIAIAsAsAsAsAsAsKsAKeAeeKeKemkmkmkmkQmEQEQEaQoEaoaFoRFRtFFtttftlfltPplplppxpHpbbbbrbbrzrrdrdOdddOdOOOOwOwOwwGwGwGGwGGGCGCvCvCCMCCMCMCMhMMhMBMB", +"sAsAsAsAsAsAsAsAsAsAsAAAKAKKKeKeKeKeekmKkmkmkmQmEQEQEEoEaoaoaoRFaFFRttftftltlPlpllpxpxpbxbpbHrbrrrrdzdrdrOdOdOjOjOwOwwwOGwwGGGCwGCGCGCCCGMCCMCMMhMBMBMBhBu", +"sAAsAsAAAsAAsAAsAAAAAsKsKKsAeKKeKeeKkKmkmkmkmmQEkEQEoQaooaoaRFoRFRFFfFtftftlPlPlplpxpbpbpbbrbrbrzrzrdrdOddOdOOOOOOwOwOwwwwGwGwGGGCGGCGCGCCMvCMMCMMCMMBMuMB", +"AAsAAAAsAAAsAAsKAsKKAKKKeKeKeKeKekkmmemkmmkQmkEQEQEEoEoaoaoRoFRFFttRtftfftlPtllpPpxpxpbbHbHbbrrzrzrdrddrOddOOjOwOwOwO#wGOGGGw#CGCGCCvCvMCvCMMMCMhBMhhMBMBu", +"KKAKKsAKKsAKAKKAKKKKKeAeKeKkKeeekKmKmkmkmkmQEEQEQEoQaoaoaoFaFRFFRFFtfttltlllllplpxpppbpbpbbrbrbrrrdrdrdddOdOdOOOwOwOwGOwGGwGwCwGGCGGCGCCMCMCCMMMMCBMBMBMBB", +"eAeKKeKKKKKKeKAeKAeeKeKeKeeKkmkmKmkmkmkmQmEQQEQEooQaooaoaRoFRFRFttfttfftlPPlpPppxppxbxbHbrbbrzrzrdrddddOddOOjOwOwOwwwOGwGwGGGGGC#CGCCCvCGMCMMCMhMMMhBMhBuB", +"eKeKeKKeKeeKeKeKeeeKeKeKeKmemkKkmkmkmkQQkEkEEQoEQEaEaoaFoaRFRFFRftFftftPltlPlllxppxpbpbpbHbrbrrzrzdrdrdJOdOdOOOOwOwOwwwwGwG#wCGGCGCvCGCCMCMCMhMMCBMBMBMBMB", +"KeKeKeeKeKeKeKeKeKeKekkkmekmKmmkmmkQQmEQEQEQEEoQaooaoaoRFFFRFFtFtftftlllPllpppppxpxbpbbrbrbrrzrrdrdddOddOdOjOwOwOwO#wGwGwGGGCwGCGCGCvCCvCMCCMCMhBCMhBMBuBu", +"kkKeeKeKeeKeKkKkkkkkKmKmkkmkmkkmmkEmmEkQEQEQoQaoaoaoaaFoFRRFFRtFfttltPtfllPllxlpxpbpbpbHbrbrzrrdrdrdrddOdOOOOdwOwOwwGOwwGw#wGGCGCGCGCCCMCMCMMMMMMhMBMMBMBB", +"KmekmekekKmememKmKmemkmkmmkmmmmkQQmkEEQEQoEoaEoEaoaaoFRRFFFRttfttfftllllPlppppxpxpbbHbbrbrrrrzrzdrOddOddOOjOwOwOwwOwwGGGGGCGCGG#CGCCvCvCMCMMChMBMBMMBhBuBu", +"ekmKkmkmkmkkkmkkmkmkmkmkmkmkmkQQEQEEQEQoEEaQoaoaoaoFRFoRFRFtFtFftPtfPltPplplxppxpbbpbHbHrbzrzrrdrdddJddOOdOOOjOwOw#OwwGwwGwGwCGCGCCGCCMCvMCMMMhCMMBMBuBMBB", +"kmkmkmkmkmkmkmkmkmkmkmmkmQmQQEEmkEQEQEEoQooaooaaRoFRoFFFFttFftftftlltllplPpppxpxpbpbbrbrbrrrzrdrddrOdOOOdjOwOwOwwOGGwGwG#GCGCG#CvCvCMGMCMCMMCMBMBMhBMBMBuB", +"mkmmmkmmkmmkmmkmmkmmmkQmQkQEkQEQEEQoEooEaEaoaoaoFaRFFRtRtRtfttftPltPllPllplxpxpbpHbbHbrbrrzrdrddrddOdddOOOOOwOwOwwwwwGwGGGGGGGCGCCGCCMCMCMChMhCMMBMMBuBuBB", +"QQQkQmkmmkmmkQQmkQQkEQEQEQEQEEQEoQoEoaQaoaoaaaoFRoFRFFFtFfttfftlftllPplppxpxpxpbbbprbrbrrrzrzdrdddddOOOjOjwOwOwwOGwOGwG#GCwC#CGCGCCvCCCMCMMMMBMBhMBhBMBMBu", +"EkmEkQQkQQkQQEkQEEQEmQkEQEQEEQoEQoEaQaoaoaoaoRFRRFFFRtRftFftftltllPllPlxppxpbpbbpbbHrbrbzrrdrrddrOdOdOdOOOOwOwOwwwGGGGwGwGGGCGCvCCvCCMvCMMCMhMMMMBuMBuBuBB", +"QEQEQEQEQEQEmQEQmEQEQEEQEEQEoEaQaoaooaoaoRRFFoFRFFRFtFtFftftlPflPlplppppxpxpbxpbbbrbbrrrrzrzdrddOdJOdOOjOwOwOwwOGwwGwG#CGCGCGCGCGCCMvCMMMCMhBCBhBMBMBMBBuB", +"EQEQEQEQEQEQEEQEEEQEEQEEQEoQaQooEaoaoaoaFoaoRFRFFRtFftftftftltltlPlPplxppxpbpbbHbHbrbzrzrdrdrddOrdOdOjOdwOwOwwOwGwGwGGwGwC#GCGCvCMGCCMCCMMMMMMMBMMBMBuBuBB", +"QEEQEEQEEQEEQEQEQEEQooaooaoaooaoaoaaaoRFoFFFRFFFttFttftftPtlPllplpplpxppxpbHbpbbrbrbrrrzrzdrddrOdOdOOOOwOOwOwO#wO#wGGwCGGGCGCGCCvCMCMCMMMChBChMMBhBMBBuBBB", +"EaoEoEoQoEoQoEoEoooEaEoQaoEoaoaoaoaoRFoRFRRRFtRtRttfttftltPltlPlPllpxppxpxbpbbbHbrbrrrzrrdrOrdOdOdOdOjOOwOjwOwwGGwGwGGG#GCGCGCCGCCvCMCMChMMMMBhBMBMBuuBBuL", +"oQaoaoEaEoaEoaoaoaQaoaoaoaaoaaoRRoFFRFRFRFFFFtFtfFftftftlPlPlPlpppplpxxpbpbbHbrbrbrrzrzrdrddddddOdOOOOwOwOwwwwOGwGwG#CwCGGCGCvCCCGMCMCMMMMBCMMBMhBuBBBuBBB", +"oaoaQoaooaEaoQaooaoaoaoaoaoaoaFoaRFoaRFRFFRttRfttftftltfPltlllplllxpxpxpxbHbpHbrbrbrzrrdzddrdOdOdOOjOjOwOwO#OwGwGwGGGwGGGCGCGCCvCMCMCMMChMMMhBMMBMBuMBuBuL", +"oaoaoaoaaoaoaoaoaoaoaoaaoRFRFoFRFFRFFFFFttFtFttftftfltlllllpPplppxppxpbbpbbbrbrbrrzrrzdrdrddOddOOOOOOOwOwwOwGwwGwGGwCGCGCGCGCvCCCCMvMMCMMBCBMMBhBuBBBuBBBB", +"FoaoaaaoaoaoaaoaaoRoaRoFFoRoRFRFRFFRtRttFRtfftftftltflPltlPlplppxppbpbbpbbHbbrbrzrrzrdrdrddddOdOdjdwOwOwOw#OwwGwGwG#GGwCGCGCvCCMvCCMCMMhMMhMhBMBMBMBMBBuBL", +"aRaFaoRoRRoRoFaFoFaFRoFRaFFFRFFRFFFFtFtftfttftfftlPlPtlPpplplpxpxpxpbpbbbprbrbrrrzrzdrdddOrOOdOOOOOjOwOwwOwGwwGwG#GCwCG#CGCCCGCGMMCMMMCMBCBMBMuBMBuBuBuLBB", +"RFoFoRFFoRFRFRoFRRFRFFFRFFRFFRFFRttRttFfttfftfltPltPllpllplpxppxpbpHbHbHbrbrbrbzrrdrdrdOrdOdOdOdOOwOwOwOwwwwwGwGGwGGGGCGCvCvCCCMCMCMCMMhMMMhMMBMBuBBuBLBBL", +"RFRFFFRRFFaFRFFRFRoFRFRFRFFRFtFtFttftfttfftftltllPllPlPplppppxpxpbxpbpbbHrbrrzrrzrzdrddrOOdOdOOjOjOOwwOwwOGwGwGG#CwCGCGCGCGCCvMCCMCMMMBCBMBuBMBuBMBMLBuBLB", +"RFtRFRFFFRFFFRFRFFtFRFtFtttttRttfFftftftftltlPlPllPllpplxlxpxpbpbpbbbrHrbrbzbrzrdrdrdddOddOdOdOOwOOwOwwOwGwGwGwGwGGGC#GCGCCvCCCvMCMChCMMMMBMBMBMBuBBuBLuBL", +"tFRFtFRFFFFRFFFtRFtFtFtRtFtfFftfttftftfltlflPtllPllplplppxpxpxpbHbprbbbrbrrrrzrrzdrddrOddOdOOjOOOwwOwOw#wwO#GGG#GCGCGCGCCvCCCvMCMCMMMMBhBMMhBMBuBBuBBBBBLB", +"fFtFtFtttttttttFtFtRfttftfFtfttftftftltfPltlllPlllpPpxpxppxpbpbbpHbbbHrbrbzrzrdrdrdrOdddOdOOOOjOwOwOwwGOwGGwGwGwCGGGGCGCvCCvCMCMCMMMMhMMhMBMBuBuBMBBuLuLBL", +"ttfttttRtRtFtfRftftftfttftftftftfltlPllltlPlPlllpPppppxpxpxpbHpbbbrHrrbrrrrzrzrdrdOdddOdOOdjOjOOwOwwOwwGwGwGG#GCwGC#CGCvCCGMCMCMMMChBCBMBMuBMBMBBuBLBBBLBL", +"tfttfftfftffttftttftftftftftftPltflPltPPlPlplpplpplxpxppxpbbpbbHbHbbrbrrrzrzrdrdddrdOddOdOOOwOOwOwwOw#OwwGwGGGGwCGCGCvCCGCMCCCMCCMMMMMCBhMBMBuBuBBuBuLuLBL", +"ftffttftftftftftfftftftfftlltlftlltlPlllplpPplppxpxpxpxbpbbpbbbrbrrbrrzrzrzdrddrddOddOdOOjOOOwwOwOwwwGGGwGG#GCwGGCGCGCGCCCvCMMCMMMhBCuMMBMBMBMBBMBBBBBLBLL", +"ltftffftftftfftfPtltltltlltPlPlllPlPlllPplplppxpxppxpbpHbpHbbHbHrbbrbrrzrrdrdrdddOddOdOdOOjOwOOwwwOGOwwwGwGwGwCGCGCGCvCCvCMCMCMMMMCMMBMBMBMBuBuBuBLuBLBLBg", +"PlPtltlltltltlltlflPlPlPlPllPtlPlplplpplpppxpxppxpxpbxpbbbbbprbrbrrrzrzrzdrdrOdrOdOdOOOjOjOOwOwOwwwwGwGwG#GCG#GCGCGCCCvCMCCMCMMCMhBMMhBMhBMBMBBuBLuBLBuLLL", +"ltllPltlPlPlPltPltltlfPlltlPlplplPlpPpPpplxpppxpxpbbpbbrpbHbrbrbrrrrzrrdrdrddddOddOdOdOdwOOwOwwwwOGwwGwGGwGwCGC#GCvCvCCGCMvCMCMhMMCBMBMMBMBuBBuBBBBLBLBLBg", +"lPlPllPlPlPllPlllPllPtllPplllPplpplpppxpxppxxpxpbpbpbbpbrbrrbrrrrzrzrzrdrddrOdrOOdOOOjOOOwwOwOwOw#wO#wGG#GCwGCGCCGCCGCCMCMCMMMMMhBMMhBMBhBuBuBBBMLuBLBLLLL", +"lllllPlPllPlPllPplpllppllplplplplpplxpxppxxppbpbpbHrbHbrbHbbrbzrzrrzrdrddrdddOdOdOOdOOjOwOOwOww#OwwGGGGwGGwCGGCGGCCvCCCMvCMCMCMMMMhMBMMBuBMBuBuBLBBLuLBLBg", +"lpPlPllllPlllPplPlpPpllpPplpppxpxpxppxpxpxpbxbbbbbpbbbbHrrrrrrrzrzrdrddrOdOdddOdOOdjOjOOwOwwwOwwGGGwGw#GCG#GCGCGCGCCCvCCMMCMMMhBCBMBMBhBMBBuBBBuLBLBLBLgLL", +"PplppppppppppplplplplppppppxlxpppxpxxpxpbpbpbpbpHbrHrbrrbrbzrzrrzrdrdrdOrdOrOOdOdjOOOwOwOwwOww#OwwGwGGGGwCGCGCGCCCCGCCMCMCMMCMMMMCBhMBMBuBuBBMBLBuBLBLLBLg", +"pppplplplplplppppppxpxlxxpxppxpxxpbppbbpbbbbbbHbrbbbrHrbrzrrzrzrdrdddddddOdOOdOOOOjOwOwOwOwwO#wGGwG#G#CGGGCGCGCvCvCMCMCMCMMMhMBChBMMBMBuBuBuBLBuBLLBLLgLLg", +"pxxpxpxpxpxpxpxpxpxpppxppxpxpxpxpbpbbpbbHbpHrprbbHrrbrrzrrrzrzrdrdrdrdrdddOdOOdjOOwOOwOwwwOwwGwwGwGwGGwCGC#GCvCCvCCvCMvCMMCMMMhMBMMBMBMBMBBBBuLBLBLBLBLBLg", +"xppxpxpxpxpxpxpxpxpxxpxpxpxpbpbpbHbHpbHprbbrbrbrrbrbrrrrzrzrdrddrdOddOOdOOdOdOOOjOOwwOwOwwGwGwGwGG#GCwGGCGCCGCGCCCvMCMCMMMMhBCBMhBhBMBuBBuBMLBBuLBuLLgLgLL", +"xpxpxpxpxpxpxpxpxpxpbpbpbbpbbbbbpbpbbbbbbbHbHrbbrrrrzrzrrdrdrddrddrdOdddOdOOjOjOOwOwOwOw#OwGOwGwGwGGG#GCGCGGCvCCGMCCMCMCMCMMMMMMBMBMBuBuBMBBLuBLBLLgBLBgLg", +"bpbpbpbpbpbpbpbpbpbpbxpbHpbHpHprbbbHbrHrbrrrbrrrbzrzrrzrzrddrdrOddOddOOdOOOOOjOwOwOwwO#wOGGwGGGG#GCwCGCGCGCCCCvCMCCMCMMMMhBCBhBMhBMBuBBuBBuLBBLBLBLBLgLLgL", +"pbbbbpbbpbbpbbpbHbbbpbbpbbbbbbbbbHbbHbrbrbbrrrbzrrzrrzrdrddrddddddddOdOOdOOjOwOOwOwwOwwwGwwwGwGwGG#GGCGC#CGCGCCvCMvCMCMCMMMhMMMBMBuBMBMBuBLBuLLuBLLLBLgLLg", +"bbpbbbbpbbpbbpbbpbpbbHbbHbprbrHrHbrrrbrbrrrbzrzrrzrzdrdddrddrOddOdOOdOOdjOjOOOwwOwOwwwOGwGGw#GG#CwCGCGGCGCvCCvCCCMCMMMMMhBCBMBMhBMBMBuBBBBuBBLBLLLBgLgLLgL", +"bHbbpbHbbHbbHrbHbbrbHbrbrbrbHbbrbrbbrrrrbrrzrzrrzrdrdrdrdOrOddOdJOdOOOjOOOOOwwOwOwwwOwGwGwwGGwGGGGC#GCGCvCCvCCMCMCMCMChMMMMMBhMBMBuBuBBMLuLBLuBLBgLLgLLgLg", +"bbrHrbrHrbrHbbHrbHbbrbHbrHrbrrbrrrrrbrzrzzrrzrddrdrdrdddrdddddOdOOOdOOOjOwOwOOwwwOww#wwGwGGG#GCwCGGCGCvCCGCCCGMCvMMMMMMBCBMhMBMBMBMBBuBLBBuLBLLLLLBgLLgLgL", +"rbrbrbrbrbrbrrbrbrrHrbrrbrbrbrrbrbrrrzrzrrzdrdrrddrddOrdddOdOOdOOdOOOjOOwOwOwwwOw#OGwwGwGwGwCGwCGGCGCGCCvCCvCMCMMMCMCMhMMCBMBMBMBuBBuBuBuLBBLBBgBLgLLgLgLg", +"rbrbrbrbrbrbrbrbrbrrrrrbrrrzrrzrzrzzrrzrzrrdrdddrdddrdOdOddOddOOdOjOjOOwOwOwOwOwwwGwGwGGG#GGGGCG#CGCGCGCCCvMCMCMCMMMMBCBMBMhBMBuBMBuBBBBBBLBLBLLLgLgLLgLgL", +"zrrrrrrrrrrrrrrrrrrbrbrrrzrrzrzrrzrrzdrdrddrddrddOrddOddOdOdOOOOOOOwOOwOwOwwww#OwGOGwGwGwGG#GCGGCGCGCvCCvCCCMCMCMMCMhMMMMhMBMBMBuBBuBLuLuBLuBLBLBLgLLgLgLg", +"rrzrzrzrzrzrzrzrzrzrzzrzrrzrrrzrdrdrdrdrdrdddrddddOdOdOdOdOOOOOjOjOOwwOwOwwOwO#GwGGwGGG#G#CwCw#CGCvCCCvCCMCMCMCMMMMBCBMBhBMBhBuBBuBBBuBBLLBLLLgLgLLgLgLgLg", +"rzrrzrrzrrzrrzrrzrrzrrzrzzrzdrdrdrddrdrddddrdddOrddOdOdOOOdOOjOOwOjwOwOwwOwOwGwwGwwGGwGwCGwCGGCGCGCCvCCvCCMCMCMMChMhMMhMBMBMBMBMBuLMBBLBLuLBLBLBLLgLLgLgLg", +"zrzrzrzrzrzrzrzrzrzrzrdrdrdrdzrddrdrddddrOddOJddOOOdOOOOdOOjOOjOjwOOwOwwww#GwwwGwG#Gw#GGGCGGCGCvCCvCCCCMCvMCMMMMMBCBMBMBMuBuBuBBuBBBuLBLBLBLLgLgLgLgLgLgLg", +"rdrdrdrdrdrdrdrdrdrdddrdrdrdrddrJdddOrJOddddddOOdOdOdOdOjOjOOwOwOwOwwwwOwOwGOGwGwGwGGGCGCGGCGCGCCvCvCGCCMMCMCMCMMMMMhMhMBMBMBMBuBBuBLBLuLBLBLBLLLgLLgLgLgg", +"drddrddrddrddrddrdrdrddrdddddrOddrdddOddrOOOdOddOOOOOOjOOjOwOjOwOwwwOwww#Gww#GGGGG#GCwGGCGCGCGCvCGCCCMCMCCMMMMMhBCBMBMBuBMBuBBuBBuBLuBLBLLLgLgLgLLggLgLgLg", +"ddrddrdddrddrddrdddddrddOrdrddddOdOJdddOOOdOdOOOdjOOjOOOwOOwOwOwwwwO#OwGOwGwGwGwGwCGGCGCGC#CvCGCCCMvCCMvMMCMCMCBMhMhMBMBMBMBuBBuBLBBBLBLBLBLBLgLgLgLgLgLgg" +] + +img1=None + +if __name__=="__main__": + main(sys.argv) diff --git a/examples2/trolltech.bmp b/examples2/trolltech.bmp new file mode 100644 index 0000000..220861e Binary files /dev/null and b/examples2/trolltech.bmp differ diff --git a/examples2/trolltech.gif b/examples2/trolltech.gif new file mode 100644 index 0000000..f674369 Binary files /dev/null and b/examples2/trolltech.gif differ diff --git a/examples2/tt-logo.png b/examples2/tt-logo.png new file mode 100644 index 0000000..a0d9e34 Binary files /dev/null and b/examples2/tt-logo.png differ diff --git a/examples2/tut1.py b/examples2/tut1.py new file mode 100755 index 0000000..2eca8c5 --- /dev/null +++ b/examples2/tut1.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python + +# Qt tutorial 1. + +import sys +from qt import * + + +a = QApplication(sys.argv) + +hello = QPushButton("Hello world!",None) +hello.resize(100,30) + +a.setMainWidget(hello) +hello.show() +a.exec_loop() diff --git a/examples2/tut10.py b/examples2/tut10.py new file mode 100755 index 0000000..0470a85 --- /dev/null +++ b/examples2/tut10.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python + +# Qt tutorial 10. + +import sys +from qt import * + + +class LCDRange(QVBox): + def __init__(self,parent=None,name=None): + QVBox.__init__(self,parent,name) + + lcd = QLCDNumber(2,self,'lcd') + self.slider = QSlider(Qt.Horizontal,self,'slider') + self.slider.setRange(0,99) + self.slider.setValue(0) + self.connect(self.slider,SIGNAL('valueChanged(int)'),lcd,SLOT('display(int)')) + self.connect(self.slider,SIGNAL('valueChanged(int)'),self,PYSIGNAL('valueChanged(int)')) + + self.setFocusProxy(self.slider) + + def value(self): + return self.slider.value() + + def setValue(self,value): + self.slider.setValue(value) + + def setRange(self,minVal,maxVal): + if minVal < 0 or maxVal > 99 or minVal > maxVal: + raise ValueError, 'LCDRange.setRange(): invalid range' + self.slider.setRange(minVal,maxVal) + + +class CannonField(QWidget): + def __init__(self,parent=None,name=None): + QWidget.__init__(self,parent,name) + + self.ang = 45 + self.f = 0 + self.setPalette(QPalette(QColor(250,250,200))) + + def angle(self): + return self.ang + + def setAngle(self,degrees): + if degrees < 5: + degrees = 5 + if degrees > 70: + degrees = 70 + if self.ang == degrees: + return + self.ang = degrees + self.repaint(self.cannonRect(),0) + self.emit(PYSIGNAL('angleChanged(int)'),(self.ang,)) + + def force(self): + return self.f + + def setForce(self,newton): + if newton < 0: + newton = 0 + if self.f == newton: + return + self.f = newton + self.emit(PYSIGNAL('forceChanged(int)'),(self.f,)) + + def paintEvent(self,ev): + if not ev.rect().intersects(self.cannonRect()): + return + + cr = self.cannonRect() + pix = QPixmap(cr.size()) + pix.fill(self,cr.topLeft()) + + p = QPainter(pix) + + p.setBrush(Qt.blue) + p.setPen(Qt.NoPen) + + p.translate(0,pix.height() - 1) + p.drawPie(QRect(-35,-35,70,70),0,90 * 16) + p.rotate(-self.ang) + p.drawRect(QRect(33,-4,15,8)) + p.end() + + p.begin(self) + p.drawPixmap(cr.topLeft(),pix) + + def cannonRect(self): + r = QRect(0,0,50,50) + r.moveBottomLeft(self.rect().bottomLeft()) + return r + + def sizePolicy(self): + return QSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding) + + +class MyWidget(QWidget): + def __init__(self,parent=None,name=None): + QWidget.__init__(self,parent,name) + + quit = QPushButton('&Quit',self,'quit') + quit.setFont(QFont('Times',18,QFont.Bold)) + self.connect(quit,SIGNAL('clicked()'),qApp,SLOT('quit()')) + + self.angle = LCDRange(self,'angle') + self.angle.setRange(5,70) + + self.force = LCDRange(self,'force') + self.force.setRange(10,50) + + self.cannonField = CannonField(self,'cannonField') + + self.connect(self.angle,PYSIGNAL('valueChanged(int)'),self.cannonField.setAngle) + self.connect(self.cannonField,PYSIGNAL('angleChanged(int)'),self.angle.setValue) + + self.connect(self.force,PYSIGNAL('valueChanged(int)'),self.cannonField.setForce) + self.connect(self.cannonField,PYSIGNAL('forceChanged(int)'),self.force.setValue) + + grid = QGridLayout(self,2,2,10) + + grid.addWidget(quit,0,0) + grid.addWidget(self.cannonField,1,1) + grid.setColStretch(1,10) + + leftBox = QVBoxLayout() + + grid.addLayout(leftBox,1,0) + + leftBox.addWidget(self.angle) + leftBox.addWidget(self.force) + + self.angle.setValue(60) + self.force.setValue(25) + self.angle.setFocus() + + +QApplication.setColorSpec(QApplication.CustomColor) +a = QApplication(sys.argv) + +w = MyWidget() +w.setGeometry(100,100,500,355) +a.setMainWidget(w) +w.show() +a.exec_loop() diff --git a/examples2/tut11.py b/examples2/tut11.py new file mode 100755 index 0000000..32fb436 --- /dev/null +++ b/examples2/tut11.py @@ -0,0 +1,213 @@ +#!/usr/bin/env python + +# Qt tutorial 11. + +import sys +import math +from qt import * + + +class LCDRange(QVBox): + def __init__(self,parent=None,name=None): + QVBox.__init__(self,parent,name) + + lcd = QLCDNumber(2,self,'lcd') + self.slider = QSlider(Qt.Horizontal,self,'slider') + self.slider.setRange(0,99) + self.slider.setValue(0) + self.connect(self.slider,SIGNAL('valueChanged(int)'),lcd,SLOT('display(int)')) + self.connect(self.slider,SIGNAL('valueChanged(int)'),self,PYSIGNAL('valueChanged(int)')) + + self.setFocusProxy(self.slider) + + def value(self): + return self.slider.value() + + def setValue(self,value): + self.slider.setValue(value) + + def setRange(self,minVal,maxVal): + if minVal < 0 or maxVal > 99 or minVal > maxVal: + raise ValueError, 'LCDRange.setRange(): invalid range' + self.slider.setRange(minVal,maxVal) + + +class CannonField(QWidget): + def __init__(self,parent=None,name=None): + QWidget.__init__(self,parent,name) + + self.ang = 45 + self.f = 0 + self.timerCount = 0 + + self.autoShootTimer = QTimer(self,'movement handler') + self.connect(self.autoShootTimer,SIGNAL('timeout()'),self.moveShot) + + self.shoot_ang = 0 + self.shoot_f = 0 + + self.setPalette(QPalette(QColor(250,250,200))) + + self.barrelRect = QRect(33,-4,15,8) + + def angle(self): + return self.ang + + def setAngle(self,degrees): + if degrees < 5: + degrees = 5 + if degrees > 70: + degrees = 70 + if self.ang == degrees: + return + self.ang = degrees + self.repaint(self.cannonRect(),0) + self.emit(PYSIGNAL('angleChanged(int)'),(self.ang,)) + + def force(self): + return self.f + + def setForce(self,newton): + if newton < 0: + newton = 0 + if self.f == newton: + return + self.f = newton + self.emit(PYSIGNAL('forceChanged(int)'),(self.f,)) + + def shoot(self): + if self.autoShootTimer.isActive(): + return + + self.timerCount = 0 + self.shoot_ang = self.ang + self.shoot_f = self.f + self.autoShootTimer.start(50) + + def moveShot(self): + r = QRegion(self.shotRect()) + self.timerCount = self.timerCount + 1 + + shotR = self.shotRect() + + if shotR.x() > self.width() or shotR.y() > self.height(): + self.autoShootTimer.stop() + else: + r = r.unite(QRegion(shotR)) + + self.repaint(r) + + def paintEvent(self,ev): + updateR = ev.rect() + p = QPainter(self) + + if updateR.intersects(self.cannonRect()): + self.paintCannon(p) + + if self.autoShootTimer.isActive() and updateR.intersects(self.shotRect()): + self.paintShot(p) + + def paintShot(self,p): + p.setBrush(Qt.black) + p.setPen(Qt.NoPen) + p.drawRect(self.shotRect()) + + def paintCannon(self,p): + cr = self.cannonRect() + pix = QPixmap(cr.size()) + pix.fill(self,cr.topLeft()) + + tmp = QPainter(pix) + tmp.setBrush(Qt.blue) + tmp.setPen(Qt.NoPen) + + tmp.translate(0,pix.height() - 1) + tmp.drawPie(QRect(-35,-35,70,70),0,90 * 16) + tmp.rotate(-self.ang) + tmp.drawRect(self.barrelRect) + tmp.end() + + p.drawPixmap(cr.topLeft(),pix) + + def cannonRect(self): + r = QRect(0,0,50,50) + r.moveBottomLeft(self.rect().bottomLeft()) + return r + + def shotRect(self): + gravity = 4.0 + + time = self.timerCount / 4.0 + velocity = self.shoot_f + radians = self.shoot_ang * 3.14159265 / 180 + + velx = velocity * math.cos(radians) + vely = velocity * math.sin(radians) + x0 = (self.barrelRect.right() + 5) * math.cos(radians) + y0 = (self.barrelRect.right() + 5) * math.sin(radians) + x = x0 + velx * time + y = y0 + vely * time - 0.5 * gravity * time * time + + r = QRect(0,0,6,6) + r.moveCenter(QPoint(x,self.height() - 1 - y)) + return r + + def sizePolicy(self): + return QSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding) + + +class MyWidget(QWidget): + def __init__(self,parent=None,name=None): + QWidget.__init__(self,parent,name) + + quit = QPushButton('&Quit',self,'quit') + quit.setFont(QFont('Times',18,QFont.Bold)) + self.connect(quit,SIGNAL('clicked()'),qApp,SLOT('quit()')) + + self.angle = LCDRange(self,'angle') + self.angle.setRange(5,70) + + self.force = LCDRange(self,'force') + self.force.setRange(10,50) + + self.cannonField = CannonField(self,'cannonField') + + self.connect(self.angle,PYSIGNAL('valueChanged(int)'),self.cannonField.setAngle) + self.connect(self.cannonField,PYSIGNAL('angleChanged(int)'),self.angle.setValue) + + self.connect(self.force,PYSIGNAL('valueChanged(int)'),self.cannonField.setForce) + self.connect(self.cannonField,PYSIGNAL('forceChanged(int)'),self.force.setValue) + + shoot = QPushButton('&Shoot',self,'shoot') + shoot.setFont(QFont('Times',18,QFont.Bold)) + self.connect(shoot,SIGNAL('clicked()'),self.cannonField.shoot) + + grid = QGridLayout(self,2,2,10) + + grid.addWidget(quit,0,0) + grid.addWidget(self.cannonField,1,1) + grid.setColStretch(1,10) + + leftBox = QVBoxLayout() + grid.addLayout(leftBox,1,0) + leftBox.addWidget(self.angle) + leftBox.addWidget(self.force) + + topBox = QHBoxLayout() + grid.addLayout(topBox,0,1) + topBox.addWidget(shoot) + topBox.addStretch(1) + + self.angle.setValue(60) + self.force.setValue(25) + self.angle.setFocus() + + +QApplication.setColorSpec(QApplication.CustomColor) +a = QApplication(sys.argv) + +w = MyWidget() +w.setGeometry(100,100,500,355) +a.setMainWidget(w) +w.show() +a.exec_loop() diff --git a/examples2/tut12.py b/examples2/tut12.py new file mode 100755 index 0000000..65490ca --- /dev/null +++ b/examples2/tut12.py @@ -0,0 +1,252 @@ +#!/usr/bin/env python + +# Qt tutorial 12. + +import sys +import math +import random +from qt import * + + +class LCDRange(QVBox): + def __init__(self,s=None,parent=None,name=None): + QVBox.__init__(self,parent,name) + + lcd = QLCDNumber(2,self,'lcd') + self.slider = QSlider(Qt.Horizontal,self,'slider') + self.slider.setRange(0,99) + self.slider.setValue(0) + + self.label = QLabel(' ',self,'label') + self.label.setAlignment(Qt.AlignCenter) + + self.connect(self.slider,SIGNAL('valueChanged(int)'),lcd,SLOT('display(int)')) + self.connect(self.slider,SIGNAL('valueChanged(int)'),self,PYSIGNAL('valueChanged(int)')) + + self.setFocusProxy(self.slider) + + if s is not None: + self.setText(s) + + def value(self): + return self.slider.value() + + def setValue(self,value): + self.slider.setValue(value) + + def setRange(self,minVal,maxVal): + if minVal < 0 or maxVal > 99 or minVal > maxVal: + raise ValueError, 'LCDRange.setRange(): invalid range' + self.slider.setRange(minVal,maxVal) + + def text(self): + return self.label.text() + + def setText(self,s): + self.label.setText(s) + + +class CannonField(QWidget): + def __init__(self,parent=None,name=None): + QWidget.__init__(self,parent,name) + + self.ang = 45 + self.f = 0 + self.timerCount = 0 + + self.autoShootTimer = QTimer(self,'movement handler') + self.connect(self.autoShootTimer,SIGNAL('timeout()'),self.moveShot) + + self.shoot_ang = 0 + self.shoot_f = 0 + self.target = QPoint(0,0) + + self.setPalette(QPalette(QColor(250,250,200))) + + self.barrelRect = QRect(33,-4,15,8) + + self.newTarget() + + def angle(self): + return self.ang + + def setAngle(self,degrees): + if degrees < 5: + degrees = 5 + if degrees > 70: + degrees = 70 + if self.ang == degrees: + return + self.ang = degrees + self.repaint(self.cannonRect(),0) + self.emit(PYSIGNAL('angleChanged(int)'),(self.ang,)) + + def force(self): + return self.f + + def setForce(self,newton): + if newton < 0: + newton = 0 + if self.f == newton: + return + self.f = newton + self.emit(PYSIGNAL('forceChanged(int)'),(self.f,)) + + def shoot(self): + if self.autoShootTimer.isActive(): + return + + self.timerCount = 0 + self.shoot_ang = self.ang + self.shoot_f = self.f + self.autoShootTimer.start(50) + + def newTarget(self): + r = QRegion(self.targetRect()) + self.target = QPoint(random.randint(200,390),random.randint(10,265)) + self.repaint(r.unite(QRegion(self.targetRect()))) + + def moveShot(self): + r = QRegion(self.shotRect()) + self.timerCount = self.timerCount + 1 + + shotR = self.shotRect() + + if shotR.intersects(self.targetRect()): + self.autoShootTimer.stop() + self.emit(PYSIGNAL('hit()'),()) + elif shotR.x() > self.width() or shotR.y() > self.height(): + self.autoShootTimer.stop() + self.emit(PYSIGNAL('missed()'),()) + else: + r = r.unite(QRegion(shotR)) + + self.repaint(r) + + def paintEvent(self,ev): + updateR = ev.rect() + p = QPainter(self) + + if updateR.intersects(self.cannonRect()): + self.paintCannon(p) + + if self.autoShootTimer.isActive() and updateR.intersects(self.shotRect()): + self.paintShot(p) + + if updateR.intersects(self.targetRect()): + self.paintTarget(p) + + def paintShot(self,p): + p.setBrush(Qt.black) + p.setPen(Qt.NoPen) + p.drawRect(self.shotRect()) + + def paintTarget(self,p): + p.setBrush(Qt.red) + p.setPen(Qt.black) + p.drawRect(self.targetRect()) + + def paintCannon(self,p): + cr = self.cannonRect() + pix = QPixmap(cr.size()) + pix.fill(self,cr.topLeft()) + + tmp = QPainter(pix) + tmp.setBrush(Qt.blue) + tmp.setPen(Qt.NoPen) + + tmp.translate(0,pix.height() - 1) + tmp.drawPie(QRect(-35,-35,70,70),0,90 * 16) + tmp.rotate(-self.ang) + tmp.drawRect(self.barrelRect) + tmp.end() + + p.drawPixmap(cr.topLeft(),pix) + + def cannonRect(self): + r = QRect(0,0,50,50) + r.moveBottomLeft(self.rect().bottomLeft()) + return r + + def shotRect(self): + gravity = 4.0 + + time = self.timerCount / 4.0 + velocity = self.shoot_f + radians = self.shoot_ang * 3.14159265 / 180 + + velx = velocity * math.cos(radians) + vely = velocity * math.sin(radians) + x0 = (self.barrelRect.right() + 5) * math.cos(radians) + y0 = (self.barrelRect.right() + 5) * math.sin(radians) + x = x0 + velx * time + y = y0 + vely * time - 0.5 * gravity * time * time + + r = QRect(0,0,6,6) + r.moveCenter(QPoint(x,self.height() - 1 - y)) + return r + + def targetRect(self): + r = QRect(0,0,20,10) + r.moveCenter(QPoint(self.target.x(),self.height() - 1 - self.target.y())) + return r + + def sizePolicy(self): + return QSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding) + + +class MyWidget(QWidget): + def __init__(self,parent=None,name=None): + QWidget.__init__(self,parent,name) + + quit = QPushButton('&Quit',self,'quit') + quit.setFont(QFont('Times',18,QFont.Bold)) + self.connect(quit,SIGNAL('clicked()'),qApp,SLOT('quit()')) + + self.angle = LCDRange('ANGLE',self,'angle') + self.angle.setRange(5,70) + + self.force = LCDRange('FORCE',self,'force') + self.force.setRange(10,50) + + self.cannonField = CannonField(self,'cannonField') + + self.connect(self.angle,PYSIGNAL('valueChanged(int)'),self.cannonField.setAngle) + self.connect(self.cannonField,PYSIGNAL('angleChanged(int)'),self.angle.setValue) + + self.connect(self.force,PYSIGNAL('valueChanged(int)'),self.cannonField.setForce) + self.connect(self.cannonField,PYSIGNAL('forceChanged(int)'),self.force.setValue) + + shoot = QPushButton('&Shoot',self,'shoot') + shoot.setFont(QFont('Times',18,QFont.Bold)) + self.connect(shoot,SIGNAL('clicked()'),self.cannonField.shoot) + + grid = QGridLayout(self,2,2,10) + + grid.addWidget(quit,0,0) + grid.addWidget(self.cannonField,1,1) + grid.setColStretch(1,10) + + leftBox = QVBoxLayout() + grid.addLayout(leftBox,1,0) + leftBox.addWidget(self.angle) + leftBox.addWidget(self.force) + + topBox = QHBoxLayout() + grid.addLayout(topBox,0,1) + topBox.addWidget(shoot) + topBox.addStretch(1) + + self.angle.setValue(60) + self.force.setValue(25) + self.angle.setFocus() + + +QApplication.setColorSpec(QApplication.CustomColor) +a = QApplication(sys.argv) + +w = MyWidget() +w.setGeometry(100,100,500,355) +a.setMainWidget(w) +w.show() +a.exec_loop() diff --git a/examples2/tut13.py b/examples2/tut13.py new file mode 100755 index 0000000..7231a7a --- /dev/null +++ b/examples2/tut13.py @@ -0,0 +1,329 @@ +#!/usr/bin/env python + +# Qt tutorial 13. + +import sys +import math +import random +from qt import * + + +class LCDRange(QWidget): + def __init__(self,s=None,parent=None,name=None): + QWidget.__init__(self,parent,name) + + lcd = QLCDNumber(2,self,'lcd') + self.slider = QSlider(Qt.Horizontal,self,'slider') + self.slider.setRange(0,99) + self.slider.setValue(0) + + self.label = QLabel(' ',self,'label') + self.label.setAlignment(Qt.AlignCenter) + + self.connect(self.slider,SIGNAL('valueChanged(int)'),lcd,SLOT('display(int)')) + self.connect(self.slider,SIGNAL('valueChanged(int)'),self,PYSIGNAL('valueChanged(int)')) + + self.setFocusProxy(self.slider) + + l = QVBoxLayout(self) + l.addWidget(lcd,1) + l.addWidget(self.slider) + l.addWidget(self.label) + + if s is not None: + self.setText(s) + + def value(self): + return self.slider.value() + + def setValue(self,value): + self.slider.setValue(value) + + def setRange(self,minVal,maxVal): + if minVal < 0 or maxVal > 99 or minVal > maxVal: + raise ValueError, 'LCDRange.setRange(): invalid range' + self.slider.setRange(minVal,maxVal) + + def text(self): + return self.label.text() + + def setText(self,s): + self.label.setText(s) + + +class CannonField(QWidget): + def __init__(self,parent=None,name=None): + QWidget.__init__(self,parent,name) + + self.ang = 45 + self.f = 0 + self.timerCount = 0 + + self.autoShootTimer = QTimer(self,'movement handler') + self.connect(self.autoShootTimer,SIGNAL('timeout()'),self.moveShot) + + self.shoot_ang = 0 + self.shoot_f = 0 + self.target = QPoint(0,0) + self.gameEnded = 0 + + self.setPalette(QPalette(QColor(250,250,200))) + + self.barrelRect = QRect(33,-4,15,8) + + self.newTarget() + + def angle(self): + return self.ang + + def setAngle(self,degrees): + if degrees < 5: + degrees = 5 + if degrees > 70: + degrees = 70 + if self.ang == degrees: + return + self.ang = degrees + self.repaint(self.cannonRect(),0) + self.emit(PYSIGNAL('angleChanged(int)'),(self.ang,)) + + def force(self): + return self.f + + def setForce(self,newton): + if newton < 0: + newton = 0 + if self.f == newton: + return + self.f = newton + self.emit(PYSIGNAL('forceChanged(int)'),(self.f,)) + + def shoot(self): + if self.isShooting(): + return + + self.timerCount = 0 + self.shoot_ang = self.ang + self.shoot_f = self.f + self.autoShootTimer.start(50) + self.emit(PYSIGNAL('canShoot(bool)'),(0,)) + + def newTarget(self): + r = QRegion(self.targetRect()) + self.target = QPoint(random.randint(200,390),random.randint(10,265)) + self.repaint(r.unite(QRegion(self.targetRect()))) + + def gameOver(self): + return self.gameEnded + + def setGameOver(self): + if self.gameEnded: + return + if self.isShooting(): + self.autoShootTime.stop() + self.gameEnded = 1 + self.repaint() + + def restartGame(self): + if self.isShooting(): + self.autoShootTime.stop() + self.gameEnded = 0 + self.repaint() + self.emit(PYSIGNAL('canShoot(bool)'),(1,)) + + def moveShot(self): + r = QRegion(self.shotRect()) + self.timerCount = self.timerCount + 1 + + shotR = self.shotRect() + + if shotR.intersects(self.targetRect()): + self.autoShootTimer.stop() + self.emit(PYSIGNAL('hit()'),()) + self.emit(PYSIGNAL('canShoot(bool)'),(1,)) + elif shotR.x() > self.width() or shotR.y() > self.height(): + self.autoShootTimer.stop() + self.emit(PYSIGNAL('missed()'),()) + self.emit(PYSIGNAL('canShoot(bool)'),(1,)) + else: + r = r.unite(QRegion(shotR)) + + self.repaint(r) + + def paintEvent(self,ev): + updateR = ev.rect() + p = QPainter(self) + + if self.gameEnded: + p.setPen(Qt.black) + p.setFont(QFont('Courier',48,QFont.Bold)) + p.drawText(self.rect(),Qt.AlignCenter,'Game Over') + + if updateR.intersects(self.cannonRect()): + self.paintCannon(p) + + if self.isShooting() and updateR.intersects(self.shotRect()): + self.paintShot(p) + + if not self.gameEnded and updateR.intersects(self.targetRect()): + self.paintTarget(p) + + def paintShot(self,p): + p.setBrush(Qt.black) + p.setPen(Qt.NoPen) + p.drawRect(self.shotRect()) + + def paintTarget(self,p): + p.setBrush(Qt.red) + p.setPen(Qt.black) + p.drawRect(self.targetRect()) + + def paintCannon(self,p): + cr = self.cannonRect() + pix = QPixmap(cr.size()) + pix.fill(self,cr.topLeft()) + + tmp = QPainter(pix) + tmp.setBrush(Qt.blue) + tmp.setPen(Qt.NoPen) + + tmp.translate(0,pix.height() - 1) + tmp.drawPie(QRect(-35,-35,70,70),0,90 * 16) + tmp.rotate(-self.ang) + tmp.drawRect(self.barrelRect) + tmp.end() + + p.drawPixmap(cr.topLeft(),pix) + + def cannonRect(self): + r = QRect(0,0,50,50) + r.moveBottomLeft(self.rect().bottomLeft()) + return r + + def shotRect(self): + gravity = 4.0 + + time = self.timerCount / 4.0 + velocity = self.shoot_f + radians = self.shoot_ang * 3.14159265 / 180 + + velx = velocity * math.cos(radians) + vely = velocity * math.sin(radians) + x0 = (self.barrelRect.right() + 5) * math.cos(radians) + y0 = (self.barrelRect.right() + 5) * math.sin(radians) + x = x0 + velx * time + y = y0 + vely * time - 0.5 * gravity * time * time + + r = QRect(0,0,6,6) + r.moveCenter(QPoint(x,self.height() - 1 - y)) + return r + + def targetRect(self): + r = QRect(0,0,20,10) + r.moveCenter(QPoint(self.target.x(),self.height() - 1 - self.target.y())) + return r + + def isShooting(self): + return self.autoShootTimer.isActive() + + def sizePolicy(self): + return QSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding) + + +class GameBoard(QWidget): + def __init__(self,parent=None,name=None): + QWidget.__init__(self,parent,name) + + quit = QPushButton('&Quit',self,'quit') + quit.setFont(QFont('Times',18,QFont.Bold)) + self.connect(quit,SIGNAL('clicked()'),qApp,SLOT('quit()')) + + self.angle = LCDRange('ANGLE',self,'angle') + self.angle.setRange(5,70) + + self.force = LCDRange('FORCE',self,'force') + self.force.setRange(10,50) + + self.cannonField = CannonField(self,'cannonField') + + self.connect(self.angle,PYSIGNAL('valueChanged(int)'),self.cannonField.setAngle) + self.connect(self.cannonField,PYSIGNAL('angleChanged(int)'),self.angle.setValue) + + self.connect(self.force,PYSIGNAL('valueChanged(int)'),self.cannonField.setForce) + self.connect(self.cannonField,PYSIGNAL('forceChanged(int)'),self.force.setValue) + + self.connect(self.cannonField,PYSIGNAL('hit()'),self.hit) + self.connect(self.cannonField,PYSIGNAL('missed()'),self.missed) + + self.shoot = QPushButton('&Shoot',self,'shoot') + self.shoot.setFont(QFont('Times',18,QFont.Bold)) + self.connect(self.shoot,SIGNAL('clicked()'),self.fire) + self.connect(self.cannonField,PYSIGNAL('canShoot(bool)'),self.shoot,SLOT('setEnabled(bool)')) + + restart = QPushButton('&New Game',self,'newgame') + restart.setFont(QFont('Times',18,QFont.Bold)) + self.connect(restart,SIGNAL('clicked()'),self.newGame) + + self.hits = QLCDNumber(2,self,'hits') + self.shotsLeft = QLCDNumber(2,self,'shotsleft') + hitsL = QLabel('HITS',self,'hitsLabel') + shotsLeftL = QLabel('SHOTS LEFT',self,'shotsleftLabel') + + grid = QGridLayout(self,2,2,10) + grid.addWidget(quit,0,0) + grid.addWidget(self.cannonField,1,1) + grid.setColStretch(1,10) + + leftBox = QVBoxLayout() + grid.addLayout(leftBox,1,0) + leftBox.addWidget(self.angle) + leftBox.addWidget(self.force) + + topBox = QHBoxLayout() + grid.addLayout(topBox,0,1) + topBox.addWidget(self.shoot) + topBox.addWidget(self.hits) + topBox.addWidget(hitsL) + topBox.addWidget(self.shotsLeft) + topBox.addWidget(shotsLeftL) + topBox.addStretch(1) + topBox.addWidget(restart) + + self.angle.setValue(60) + self.force.setValue(25) + self.angle.setFocus() + + self.newGame() + + def fire(self): + if self.cannonField.gameOver() or self.cannonField.isShooting(): + return + self.shotsLeft.display(self.shotsLeft.intValue() - 1) + self.cannonField.shoot() + + def hit(self): + self.hits.display(self.hits.intValue() + 1) + if self.shotsLeft.intValue() == 0: + self.cannonField.setGameOver() + else: + self.cannonField.newTarget() + + def missed(self): + if self.shotsLeft.intValue() == 0: + self.cannonField.setGameOver() + + def newGame(self): + self.shotsLeft.display(15) + self.hits.display(0) + self.cannonField.restartGame() + self.cannonField.newTarget() + + +QApplication.setColorSpec(QApplication.CustomColor) +a = QApplication(sys.argv) + +gb = GameBoard() +gb.setGeometry(100,100,500,355) +a.setMainWidget(gb) +gb.show() +a.exec_loop() diff --git a/examples2/tut14.py b/examples2/tut14.py new file mode 100755 index 0000000..aeb4ca6 --- /dev/null +++ b/examples2/tut14.py @@ -0,0 +1,377 @@ +#!/usr/bin/env python + +# Qt tutorial 14. + +import sys +import math +import random +from qt import * + + +class LCDRange(QWidget): + def __init__(self,s=None,parent=None,name=None): + QWidget.__init__(self,parent,name) + + lcd = QLCDNumber(2,self,'lcd') + self.slider = QSlider(Qt.Horizontal,self,'slider') + self.slider.setRange(0,99) + self.slider.setValue(0) + + self.label = QLabel(' ',self,'label') + self.label.setAlignment(Qt.AlignCenter) + + self.connect(self.slider,SIGNAL('valueChanged(int)'),lcd,SLOT('display(int)')) + self.connect(self.slider,SIGNAL('valueChanged(int)'),self,PYSIGNAL('valueChanged(int)')) + + self.setFocusProxy(self.slider) + + l = QVBoxLayout(self) + l.addWidget(lcd,1) + l.addWidget(self.slider) + l.addWidget(self.label) + + if s is not None: + self.setText(s) + + def value(self): + return self.slider.value() + + def setValue(self,value): + self.slider.setValue(value) + + def setRange(self,minVal,maxVal): + if minVal < 0 or maxVal > 99 or minVal > maxVal: + raise ValueError, 'LCDRange.setRange(): invalid range' + self.slider.setRange(minVal,maxVal) + + def text(self): + return self.label.text() + + def setText(self,s): + self.label.setText(s) + + +class CannonField(QWidget): + def __init__(self,parent=None,name=None): + QWidget.__init__(self,parent,name) + + self.ang = 45 + self.f = 0 + self.timerCount = 0 + + self.autoShootTimer = QTimer(self,'movement handler') + self.connect(self.autoShootTimer,SIGNAL('timeout()'),self.moveShot) + + self.shoot_ang = 0 + self.shoot_f = 0 + self.target = QPoint(0,0) + self.gameEnded = 0 + self.barrelPressed = 0 + + self.setPalette(QPalette(QColor(250,250,200))) + + self.barrelRect = QRect(33,-4,15,8) + + self.newTarget() + + def angle(self): + return self.ang + + def setAngle(self,degrees): + if degrees < 5: + degrees = 5 + if degrees > 70: + degrees = 70 + if self.ang == degrees: + return + self.ang = degrees + self.repaint(self.cannonRect(),0) + self.emit(PYSIGNAL('angleChanged(int)'),(self.ang,)) + + def force(self): + return self.f + + def setForce(self,newton): + if newton < 0: + newton = 0 + if self.f == newton: + return + self.f = newton + self.emit(PYSIGNAL('forceChanged(int)'),(self.f,)) + + def shoot(self): + if self.isShooting(): + return + + self.timerCount = 0 + self.shoot_ang = self.ang + self.shoot_f = self.f + self.autoShootTimer.start(50) + self.emit(PYSIGNAL('canShoot(bool)'),(0,)) + + def newTarget(self): + r = QRegion(self.targetRect()) + self.target = QPoint(random.randint(200,390),random.randint(10,265)) + self.repaint(r.unite(QRegion(self.targetRect()))) + + def gameOver(self): + return self.gameEnded + + def setGameOver(self): + if self.gameEnded: + return + if self.isShooting(): + self.autoShootTime.stop() + self.gameEnded = 1 + self.repaint() + + def restartGame(self): + if self.isShooting(): + self.autoShootTime.stop() + self.gameEnded = 0 + self.repaint() + self.emit(PYSIGNAL('canShoot(bool)'),(1,)) + + def moveShot(self): + r = QRegion(self.shotRect()) + self.timerCount = self.timerCount + 1 + + shotR = self.shotRect() + + if shotR.intersects(self.targetRect()): + self.autoShootTimer.stop() + self.emit(PYSIGNAL('hit()'),()) + self.emit(PYSIGNAL('canShoot(bool)'),(1,)) + elif shotR.x() > self.width() or shotR.y() > self.height() or shotR.intersects(self.barrierRect()): + self.autoShootTimer.stop() + self.emit(PYSIGNAL('missed()'),()) + self.emit(PYSIGNAL('canShoot(bool)'),(1,)) + else: + r = r.unite(QRegion(shotR)) + + self.repaint(r) + + def mousePressEvent(self,ev): + if ev.button() != Qt.LeftButton: + return + if self.barrelHit(ev.pos()): + self.barrelPressed = 1 + + def mouseMoveEvent(self,ev): + if not self.barrelPressed: + return + pnt = ev.pos() + if pnt.x() <= 0: + pnt.setX(1) + if pnt.y() >= self.height(): + pnt.setY(self.height() - 1) + rad = math.atan(float(self.rect().bottom() - pnt.y()) / pnt.x()) + self.setAngle(int(round(rad * 180 / math.pi))) + + def mouseReleaseEvent(self,ev): + if ev.button() == Qt.LeftButton: + self.barrelPressed = 0 + + def paintEvent(self,ev): + updateR = ev.rect() + p = QPainter(self) + + if self.gameEnded: + p.setPen(Qt.black) + p.setFont(QFont('Courier',48,QFont.Bold)) + p.drawText(self.rect(),Qt.AlignCenter,'Game Over') + + if updateR.intersects(self.cannonRect()): + self.paintCannon(p) + + if updateR.intersects(self.barrierRect()): + self.paintBarrier(p) + + if self.isShooting() and updateR.intersects(self.shotRect()): + self.paintShot(p) + + if not self.gameEnded and updateR.intersects(self.targetRect()): + self.paintTarget(p) + + def paintShot(self,p): + p.setBrush(Qt.black) + p.setPen(Qt.NoPen) + p.drawRect(self.shotRect()) + + def paintTarget(self,p): + p.setBrush(Qt.red) + p.setPen(Qt.black) + p.drawRect(self.targetRect()) + + def paintBarrier(self,p): + p.setBrush(Qt.yellow) + p.setPen(Qt.black) + p.drawRect(self.barrierRect()) + + def paintCannon(self,p): + cr = self.cannonRect() + pix = QPixmap(cr.size()) + pix.fill(self,cr.topLeft()) + + tmp = QPainter(pix) + tmp.setBrush(Qt.blue) + tmp.setPen(Qt.NoPen) + + tmp.translate(0,pix.height() - 1) + tmp.drawPie(QRect(-35,-35,70,70),0,90 * 16) + tmp.rotate(-self.ang) + tmp.drawRect(self.barrelRect) + tmp.end() + + p.drawPixmap(cr.topLeft(),pix) + + def cannonRect(self): + r = QRect(0,0,50,50) + r.moveBottomLeft(self.rect().bottomLeft()) + return r + + def shotRect(self): + gravity = 4.0 + + time = self.timerCount / 4.0 + velocity = self.shoot_f + radians = self.shoot_ang * math.pi / 180 + + velx = velocity * math.cos(radians) + vely = velocity * math.sin(radians) + x0 = (self.barrelRect.right() + 5) * math.cos(radians) + y0 = (self.barrelRect.right() + 5) * math.sin(radians) + x = x0 + velx * time + y = y0 + vely * time - 0.5 * gravity * time * time + + r = QRect(0,0,6,6) + r.moveCenter(QPoint(x,self.height() - 1 - y)) + return r + + def targetRect(self): + r = QRect(0,0,20,10) + r.moveCenter(QPoint(self.target.x(),self.height() - 1 - self.target.y())) + return r + + def barrierRect(self): + return QRect(145,self.height() - 100,15,100) + + def barrelHit(self,p): + mtx = QWMatrix() + mtx.translate(0,self.height() - 1) + mtx.rotate(-self.ang) + (mtx, invertable) = mtx.invert() + return self.barrelRect.contains(mtx.map(p)) + + def isShooting(self): + return self.autoShootTimer.isActive() + + def sizePolicy(self): + return QSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding) + + +class GameBoard(QWidget): + def __init__(self,parent=None,name=None): + QWidget.__init__(self,parent,name) + + quit = QPushButton('&Quit',self,'quit') + quit.setFont(QFont('Times',18,QFont.Bold)) + self.connect(quit,SIGNAL('clicked()'),qApp,SLOT('quit()')) + + self.angle = LCDRange('ANGLE',self,'angle') + self.angle.setRange(5,70) + + self.force = LCDRange('FORCE',self,'force') + self.force.setRange(10,50) + + box = QVBox(self,'cannonFrame') + box.setFrameStyle(QFrame.WinPanel | QFrame.Sunken) + + self.cannonField = CannonField(box,'cannonField') + + self.connect(self.angle,PYSIGNAL('valueChanged(int)'),self.cannonField.setAngle) + self.connect(self.cannonField,PYSIGNAL('angleChanged(int)'),self.angle.setValue) + + self.connect(self.force,PYSIGNAL('valueChanged(int)'),self.cannonField.setForce) + self.connect(self.cannonField,PYSIGNAL('forceChanged(int)'),self.force.setValue) + + self.connect(self.cannonField,PYSIGNAL('hit()'),self.hit) + self.connect(self.cannonField,PYSIGNAL('missed()'),self.missed) + + self.shoot = QPushButton('&Shoot',self,'shoot') + self.shoot.setFont(QFont('Times',18,QFont.Bold)) + self.connect(self.shoot,SIGNAL('clicked()'),self.fire) + self.connect(self.cannonField,PYSIGNAL('canShoot(bool)'),self.shoot,SLOT('setEnabled(bool)')) + + restart = QPushButton('&New Game',self,'newgame') + restart.setFont(QFont('Times',18,QFont.Bold)) + self.connect(restart,SIGNAL('clicked()'),self.newGame) + + self.hits = QLCDNumber(2,self,'hits') + self.shotsLeft = QLCDNumber(2,self,'shotsleft') + hitsL = QLabel('HITS',self,'hitsLabel') + shotsLeftL = QLabel('SHOTS LEFT',self,'shotsleftLabel') + + accel = QAccel(self) + accel.connectItem(accel.insertItem(Qt.Key_Enter),self.fire) + accel.connectItem(accel.insertItem(Qt.Key_Return),self.fire) + accel.connectItem(accel.insertItem(Qt.CTRL + Qt.Key_Q),qApp,SLOT('quit()')) + + grid = QGridLayout(self,2,2,10) + grid.addWidget(quit,0,0) + grid.addWidget(box,1,1) + grid.setColStretch(1,10) + + leftBox = QVBoxLayout() + grid.addLayout(leftBox,1,0) + leftBox.addWidget(self.angle) + leftBox.addWidget(self.force) + + topBox = QHBoxLayout() + grid.addLayout(topBox,0,1) + topBox.addWidget(self.shoot) + topBox.addWidget(self.hits) + topBox.addWidget(hitsL) + topBox.addWidget(self.shotsLeft) + topBox.addWidget(shotsLeftL) + topBox.addStretch(1) + topBox.addWidget(restart) + + self.angle.setValue(60) + self.force.setValue(25) + self.angle.setFocus() + + self.newGame() + + def fire(self): + if self.cannonField.gameOver() or self.cannonField.isShooting(): + return + self.shotsLeft.display(self.shotsLeft.intValue() - 1) + self.cannonField.shoot() + + def hit(self): + self.hits.display(self.hits.intValue() + 1) + if self.shotsLeft.intValue() == 0: + self.cannonField.setGameOver() + else: + self.cannonField.newTarget() + + def missed(self): + if self.shotsLeft.intValue() == 0: + self.cannonField.setGameOver() + + def newGame(self): + self.shotsLeft.display(15) + self.hits.display(0) + self.cannonField.restartGame() + self.cannonField.newTarget() + + +QApplication.setColorSpec(QApplication.CustomColor) +a = QApplication(sys.argv) + +gb = GameBoard() +gb.setGeometry(100,100,500,355) +a.setMainWidget(gb) +gb.show() +a.exec_loop() diff --git a/examples2/tut2.py b/examples2/tut2.py new file mode 100755 index 0000000..a31b784 --- /dev/null +++ b/examples2/tut2.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +# Qt tutorial 2. + +import sys +from qt import * + + +a = QApplication(sys.argv) + +quit = QPushButton("Quit",None) +quit.resize(75,30) +quit.setFont(QFont("Times",18,QFont.Bold)) + +QObject.connect(quit,SIGNAL("clicked()"),a,SLOT("quit()")) + +a.setMainWidget(quit) +quit.show() +a.exec_loop() diff --git a/examples2/tut3.py b/examples2/tut3.py new file mode 100755 index 0000000..2cc3576 --- /dev/null +++ b/examples2/tut3.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python + +# Qt tutorial 3. + +import sys +from qt import * + +a = QApplication(sys.argv) + +box = QVBox() +box.resize(200,120) + +quit = QPushButton("Quit",box) +quit.setFont(QFont("Times",18,QFont.Bold)) + +QObject.connect(quit,SIGNAL("clicked()"),a,SLOT("quit()")) + +a.setMainWidget(box) +box.show() +a.exec_loop() diff --git a/examples2/tut4.py b/examples2/tut4.py new file mode 100755 index 0000000..23c44d0 --- /dev/null +++ b/examples2/tut4.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python + +# Qt tutorial 4. + +import sys +from qt import * + + +class MyWidget(QWidget): + def __init__(self,parent=None,name=None): + QWidget.__init__(self,parent,name) + + self.setMinimumSize(200,120) + self.setMaximumSize(200,120) + + quit = QPushButton("Quit",self,"quit") + quit.setGeometry(62,40,75,30) + quit.setFont(QFont("Times",18,QFont.Bold)) + + self.connect(quit,SIGNAL("clicked()"),qApp,SLOT("quit()")) + + +a = QApplication(sys.argv) + +w = MyWidget() +w.setGeometry(100,100,200,120) +a.setMainWidget(w) +w.show() +a.exec_loop() diff --git a/examples2/tut5.py b/examples2/tut5.py new file mode 100755 index 0000000..01c20aa --- /dev/null +++ b/examples2/tut5.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +# Qt tutorial 5. + +import sys +from qt import * + + +class MyWidget(QVBox): + def __init__(self,parent=None,name=None): + QVBox.__init__(self,parent,name) + + quit = QPushButton("Quit",self,"quit") + quit.setFont(QFont("Times",18,QFont.Bold)) + + self.connect(quit,SIGNAL("clicked()"),qApp,SLOT("quit()")) + + lcd = QLCDNumber(2,self,"lcd") + + slider = QSlider(Qt.Horizontal,self,"slider") + slider.setRange(0,99) + slider.setValue(0) + + self.connect(slider,SIGNAL("valueChanged(int)"),lcd,SLOT("display(int)")) + + +a = QApplication(sys.argv) + +w = MyWidget() +a.setMainWidget(w) +w.show() +a.exec_loop() diff --git a/examples2/tut6.py b/examples2/tut6.py new file mode 100755 index 0000000..38f07d8 --- /dev/null +++ b/examples2/tut6.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python + +# Qt tutorial 6. + +import sys +from qt import * + + +class LCDRange(QVBox): + def __init__(self,parent=None,name=None): + QVBox.__init__(self,parent,name) + + lcd = QLCDNumber(2,self,"lcd") + slider = QSlider(Qt.Horizontal,self,"slider") + slider.setRange(0,99) + slider.setValue(0) + self.connect(slider,SIGNAL("valueChanged(int)"),lcd,SLOT("display(int)")) + + +class MyWidget(QVBox): + def __init__(self,parent=None,name=None): + QVBox.__init__(self,parent,name) + + quit = QPushButton("Quit",self,"quit") + quit.setFont(QFont("Times",18,QFont.Bold)) + + self.connect(quit,SIGNAL("clicked()"),qApp,SLOT("quit()")) + + grid = QGrid(4,self) + + for c in range(4): + for r in range(4): + LCDRange(grid) + + +a = QApplication(sys.argv) + +w = MyWidget() +a.setMainWidget(w) +w.show() +a.exec_loop() diff --git a/examples2/tut7.py b/examples2/tut7.py new file mode 100755 index 0000000..d40ae74 --- /dev/null +++ b/examples2/tut7.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +# Qt tutorial 7. + +import sys +from qt import * + + +class LCDRange(QVBox): + def __init__(self,parent=None,name=None): + QVBox.__init__(self,parent,name) + + lcd = QLCDNumber(2,self,'lcd') + self.slider = QSlider(Qt.Horizontal,self,'slider') + self.slider.setRange(0,99) + self.slider.setValue(0) + self.connect(self.slider,SIGNAL('valueChanged(int)'),lcd,SLOT('display(int)')) + self.connect(self.slider,SIGNAL('valueChanged(int)'),self,PYSIGNAL('valueChanged(int)')) + + def value(self): + return self.slider.value() + + def setValue(self,value): + self.slider.setValue(value) + + +class MyWidget(QVBox): + def __init__(self,parent=None,name=None): + QVBox.__init__(self,parent,name) + + quit = QPushButton("Quit",self,"quit") + quit.setFont(QFont("Times",18,QFont.Bold)) + + self.connect(quit,SIGNAL("clicked()"),qApp,SLOT("quit()")) + + grid = QGrid(4,self) + + self.lcdlist = [] + previous = None + + for r in range(4): + for c in range(4): + lr = LCDRange(grid) + + if previous is not None: + self.connect(lr,PYSIGNAL("valueChanged(int)"),previous.setValue) + + previous = lr + self.lcdlist.append(lr) + + +a = QApplication(sys.argv) + +w = MyWidget() +a.setMainWidget(w) +w.show() +a.exec_loop() diff --git a/examples2/tut8.py b/examples2/tut8.py new file mode 100755 index 0000000..045a4ef --- /dev/null +++ b/examples2/tut8.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python + +# Qt tutorial 8. + +import sys +from qt import * + + +class LCDRange(QVBox): + def __init__(self,parent=None,name=None): + QVBox.__init__(self,parent,name) + + lcd = QLCDNumber(2,self,'lcd') + self.slider = QSlider(Qt.Horizontal,self,'slider') + self.slider.setRange(0,99) + self.slider.setValue(0) + self.connect(self.slider,SIGNAL('valueChanged(int)'),lcd,SLOT('display(int)')) + self.connect(self.slider,SIGNAL('valueChanged(int)'),self,PYSIGNAL('valueChanged(int)')) + + self.setFocusProxy(self.slider) + + def value(self): + return self.slider.value() + + def setValue(self,value): + self.slider.setValue(value) + + def setRange(self,minVal,maxVal): + if minVal < 0 or maxVal > 99 or minVal > maxVal: + raise ValueError, 'LCDRange.setRange(): invalid range' + self.slider.setRange(minVal,maxVal) + + +class CannonField(QWidget): + def __init__(self,parent=None,name=None): + QWidget.__init__(self,parent,name) + + self.ang = 45 + self.setPalette(QPalette(QColor(250,250,200))) + + def angle(self): + return self.ang + + def setAngle(self,degrees): + if degrees < 5: + degrees = 5 + if degrees > 70: + degrees = 70 + if self.ang == degrees: + return + self.ang = degrees + self.repaint() + self.emit(PYSIGNAL('angleChanged(int)'),(self.ang,)) + + def paintEvent(self,ev): + p = QPainter(self) + p.drawText(200,200,'Angle = %d' % (self.ang)) + + def sizePolicy(self): + return QSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding) + + +class MyWidget(QWidget): + def __init__(self,parent=None,name=None): + QWidget.__init__(self,parent,name) + + quit = QPushButton('Quit',self,'quit') + quit.setFont(QFont('Times',18,QFont.Bold)) + self.connect(quit,SIGNAL('clicked()'),qApp,SLOT('quit()')) + + self.angle = LCDRange(self,'angle') + self.angle.setRange(5,70) + + self.cannonField = CannonField(self,'cannonField') + + self.connect(self.angle,PYSIGNAL('valueChanged(int)'),self.cannonField.setAngle) + self.connect(self.cannonField,PYSIGNAL('angleChanged(int)'),self.angle.setValue) + + grid = QGridLayout(self,2,2,10) + + grid.addWidget(quit,0,0) + grid.addWidget(self.angle,1,0,Qt.AlignTop) + grid.addWidget(self.cannonField,1,1) + grid.setColStretch(1,10) + + self.angle.setValue(60) + self.angle.setFocus() + + +a = QApplication(sys.argv) + +w = MyWidget() +w.setGeometry(100,100,500,355) +a.setMainWidget(w) +w.show() +a.exec_loop() diff --git a/examples2/tut9.py b/examples2/tut9.py new file mode 100755 index 0000000..16c7d69 --- /dev/null +++ b/examples2/tut9.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python + +# Qt tutorial 9. + +import sys +from qt import * + + +class LCDRange(QVBox): + def __init__(self,parent=None,name=None): + QVBox.__init__(self,parent,name) + + lcd = QLCDNumber(2,self,'lcd') + self.slider = QSlider(Qt.Horizontal,self,'slider') + self.slider.setRange(0,99) + self.slider.setValue(0) + self.connect(self.slider,SIGNAL('valueChanged(int)'),lcd,SLOT('display(int)')) + self.connect(self.slider,SIGNAL('valueChanged(int)'),self,PYSIGNAL('valueChanged(int)')) + + self.setFocusProxy(self.slider) + + def value(self): + return self.slider.value() + + def setValue(self,value): + self.slider.setValue(value) + + def setRange(self,minVal,maxVal): + if minVal < 0 or maxVal > 99 or minVal > maxVal: + raise ValueError, 'LCDRange.setRange(): invalid range' + self.slider.setRange(minVal,maxVal) + + +class CannonField(QWidget): + def __init__(self,parent=None,name=None): + QWidget.__init__(self,parent,name) + + self.ang = 45 + self.setPalette(QPalette(QColor(250,250,200))) + + def angle(self): + return self.ang + + def setAngle(self,degrees): + if degrees < 5: + degrees = 5 + if degrees > 70: + degrees = 70 + if self.ang == degrees: + return + self.ang = degrees + self.repaint() + self.emit(PYSIGNAL('angleChanged(int)'),(self.ang,)) + + def paintEvent(self,ev): + p = QPainter(self) + + p.setBrush(Qt.blue) + p.setPen(Qt.NoPen) + + p.translate(0,self.rect().bottom()) + p.drawPie(QRect(-35,-35,70,70),0,90 * 16) + p.rotate(-self.ang) + p.drawRect(QRect(33,-4,15,8)) + + def sizePolicy(self): + return QSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding) + + +class MyWidget(QWidget): + def __init__(self,parent=None,name=None): + QWidget.__init__(self,parent,name) + + quit = QPushButton('&Quit',self,'quit') + quit.setFont(QFont('Times',18,QFont.Bold)) + self.connect(quit,SIGNAL('clicked()'),qApp,SLOT('quit()')) + + self.angle = LCDRange(self,'angle') + self.angle.setRange(5,70) + + self.cannonField = CannonField(self,'cannonField') + + self.connect(self.angle,PYSIGNAL('valueChanged(int)'),self.cannonField.setAngle) + self.connect(self.cannonField,PYSIGNAL('angleChanged(int)'),self.angle.setValue) + + grid = QGridLayout(self,2,2,10) + + grid.addWidget(quit,0,0) + grid.addWidget(self.angle,1,0,Qt.AlignTop) + grid.addWidget(self.cannonField,1,1) + grid.setColStretch(1,10) + + self.angle.setValue(60) + self.angle.setFocus() + + +QApplication.setColorSpec(QApplication.CustomColor) +a = QApplication(sys.argv) + +w = MyWidget() +w.setGeometry(100,100,500,355) +a.setMainWidget(w) +w.show() +a.exec_loop() diff --git a/examples2/widgets.py b/examples2/widgets.py new file mode 100755 index 0000000..7b85ab3 --- /dev/null +++ b/examples2/widgets.py @@ -0,0 +1,512 @@ +#!/usr/bin/env python + + +import sys, string +from qt import * + +# +## Constructs an analog clock widget that uses an internal QTimer. +# +def QMIN( x, y ): + if y > x: + return y + return x + +# +## Constructs an analog clock widget that uses an internal QTimer. +# + +class AnalogClock( QWidget ): + def __init__( self, *args ): + apply( QWidget.__init__, (self,) + args ) + self.time = QTime.currentTime() # get current time + internalTimer = QTimer( self ) # create internal timer + self.connect( internalTimer, SIGNAL("timeout()"), self.timeout ) + internalTimer.start( 5000 ) # emit signal every 5 seconds + +# +## The QTimer::timeout() signal is received by this slot. +# + + def timeout( self ): + new_time = QTime.currentTime() # get the current time + if new_time.minute() != self.time.minute(): # minute has changed + self.update() + +# +## The clock is painted using a 1000x1000 square coordinate system. +# + def paintEvent( self, qe ): # paint clock + if not self.isVisible(): # is is invisible + return + self.time = QTime.currentTime() # save current time + + pts = QPointArray() + paint = QPainter( self ) + paint.setBrush( self.foregroundColor() ) # fill with foreground color + + cp = QPoint( self.rect().center() ) # widget center point + d = QMIN( self.width(), self.height() ) # we want a circular clock + + matrix = QWMatrix() # setup transformation matrix + matrix.translate( cp.x(), cp.y() ) # origin at widget center + matrix.scale( d / 1000.0, d / 1000.0 ) # scale coordinate system + + h_angle = 30 * ( self.time.hour() % 12 - 3 ) + self.time.minute() / 2 + matrix.rotate( h_angle ) # rotate to draw hour hand + paint.setWorldMatrix( matrix ) + pts.setPoints( [ -20,0, 0,-20, 300,0, 0,20 ] ) + paint.drawPolygon( pts ) # draw hour hand + matrix.rotate( -h_angle ) # rotate back to zero + + m_angle = ( self.time.minute() - 15 ) * 6 + matrix.rotate( m_angle ) # rotate to draw minute hand + paint.setWorldMatrix( matrix ) + pts.setPoints( [ -10,0, 0,-10, 400,0, 0,10 ] ) + paint.drawPolygon( pts ) # draw minute hand + matrix.rotate( -m_angle ) # rotate back to zero + + for i in range( 0, 12 ): # draw hour lines + paint.setWorldMatrix( matrix ) + paint.drawLine( 450,0, 500,0 ) + matrix.rotate( 30 ) + + +class DigitalClock( QLCDNumber ): + def __init__( self, *args ): + apply( QLCDNumber.__init__,(self,) + args ) + self.showingColon = 0 + self.setFrameStyle(QFrame.Panel | QFrame.Raised) + self.setLineWidth( 2 ) + self.showTime() + self.normalTimer = self.startTimer( 500 ) + self.showDateTimer = -1 + + def timerEvent( self, e ): + if e.timerId() == self.showDateTimer: + self.stopDate() + else: + if self.showDateTimer == -1: + self.showTime() + + def mousePressEvent( self, e ): + if e.button() == Qt.LeftButton: + self.showDate() + + def showDate( self ): + if self.showDateTimer != -1: + return + d = QDate.currentDate() + self.display('%2d %2d' % (d.month(), d.day())) + self.showDateTimer = self.startTimer(2000) + + def stopDate( self ): + self.killTimer(self.showDateTimer) + self.showDateTimer = -1 + self.showTime() + + def showTime( self ): + self.showingColon = not self.showingColon + s = list(str(QTime.currentTime().toString())[:5]) #.left(5) + if not self.showingColon: + s[2] = ' ' + if s[0] == '0': + s[0] = ' ' + s = string.join(s,'') + self.display( s ) + + def QMIN( x, y ): + if y > x: + return y + return x + +TRUE = 1 +FALSE = 0 +MOVIEFILENAME = "trolltech.gif" + +# +# WidgetView contains lots of Qt widgets. +# + +class WidgetView ( QWidget ): + def __init__( self, *args ): + apply( QWidget.__init__, (self,) + args ) + + # Set the window caption/title + self.setCaption( "Qt Widgets Demo Application" ) + + # Install an application-global event filter + qApp.installEventFilter( self ) + + # Create a layout to position the widgets + self.topLayout = QVBoxLayout( self, 10 ) + + # Create a grid layout to hold most of the widgets + self.grid = QGridLayout( 6, 3 ) + + # This layout will get all of the stretch + self.topLayout.addLayout( self.grid, 10 ) + + # Create a menubar + self.menubar = QMenuBar( self ) + #self.menubar.setSeparator( QMenuBar.InWindowsStyle ) + self.menubar.setSeparator( 1 ) + + # Create an easter egg + QToolTip.add( self.menubar, QRect( 0, 0, 2, 2 ), "easter egg" ) + + self.popup = QPopupMenu() + self.id = self.popup.insertItem( "&New" ) + self.popup.setItemEnabled( self.id, FALSE ) + self.id = self.popup.insertItem( "&Open" ) + self.popup.setItemEnabled( self.id, FALSE ) + self.popup.insertSeparator() + self.popup.insertItem( "&Quit", qApp, SLOT("quit()"), Qt.CTRL+Qt.Key_Q ) + + self.menubar.insertItem( "&File", self.popup ) + + # Must tell the layout about a menubar in a widget + self.topLayout.setMenuBar( self.menubar ) + + # Create an analog and a digital clock + self.aclock = AnalogClock( self ) + self.aclock.resize( 50, 50 ) + self.dclock = DigitalClock( self ) + self.dclock.setMaximumWidth( 200 ) + self.grid.addWidget( self.aclock, 0, 2 ) + self.grid.addWidget( self.dclock, 1, 2 ) + + # Give the dclock widget a blue palette + col = QColor() + col.setRgb( 0xaa, 0xbe, 0xff ) + self.dclock.setPalette( QPalette( col ) ) + + # make tool tips for both of them + QToolTip.add( self.aclock, "custom widget: analog clock" ) + QToolTip.add( self.dclock, "custom widget: digital clock" ) + + # Create a push button. + self.pb = QPushButton( self, "button1" ) # create button 1 + self.pb.setText( "Push button 1" ) + self.pb.setFixedHeight( self.pb.sizeHint().height() ) + self.grid.addWidget( self.pb, 0, 0, Qt.AlignVCenter ) + self.connect( self.pb, SIGNAL("clicked()"), self.button1Clicked ) + QToolTip.add( self.pb, "push button 1" ) + self.pm = QPixmap() + self.pix = self.pm.load( "qt.png" ) # load pixmap for button 2 + if not self.pix: + QMessageBox.information( None, "Qt Widgets Example", + "Could not load the file \"qt.png\", which\n" + "contains an icon used...\n\n" + "The text \"line 42\" will be substituted.", + QMessageBox.Ok + QMessageBox.Default ) + + # Create a label containing a QMovie + self.movielabel = QLabel( self, "label0" ) + self.movie = QMovie( MOVIEFILENAME ) + self.movie.connectStatus( self.movieStatus ) + self.movie.connectUpdate( self.movieUpdate ) + self.movielabel.setFrameStyle( QFrame.Box | QFrame.Plain ) + self.movielabel.setMovie( self.movie ) + self.movielabel.setMargin( 0 ) + self.movielabel.setFixedSize( 128 + self.movielabel.frameWidth() * 2, + 64 + self.movielabel.frameWidth() * 2 ) + self.grid.addWidget( self.movielabel, 0, 1, Qt.AlignCenter ) + QToolTip.add( self.movielabel, "movie" ) + + # Create a group of check boxes + self.bg = QButtonGroup( self, "checkGroup" ) + self.bg.setTitle( "Check Boxes" ) + self.grid.addWidget( self.bg, 1, 0 ) + + # Create a layout for the check boxes + self.vbox = QVBoxLayout(self.bg, 10) + + self.vbox.addSpacing( self.bg.fontMetrics().height() ) + + self.cb = range(3) + self.cb[0] = QCheckBox( self.bg ) + self.cb[0].setText( "Read" ) + self.vbox.addWidget( self.cb[0] ) + self.cb[0].setMinimumSize( self.cb[0].sizeHint() ) + self.cb[1] = QCheckBox( self.bg ) + self.cb[1].setText( "Write" ) + self.vbox.addWidget( self.cb[1] ) + self.cb[1].setMinimumSize( self.cb[1].sizeHint() ) + self.cb[2] = QCheckBox( self.bg ) + self.cb[2].setText( "Execute" ) + self.cb[2].setMinimumSize( self.cb[2].sizeHint() ) + self.vbox.addWidget( self.cb[2] ) + self.bg.setMinimumSize( self.bg.childrenRect().size() ) + self.vbox.activate() + + self.connect( self.bg, SIGNAL("clicked(int)"), self.checkBoxClicked ) + + QToolTip.add( self.cb[0], "check box 1" ) + QToolTip.add( self.cb[1], "check box 2" ) + QToolTip.add( self.cb[2], "check box 3" ) + + # Create a group of radio buttons + self.bg = QButtonGroup( self, "radioGroup" ) + self.bg.setTitle( "Radio buttons" ) + + self.grid.addWidget( self.bg, 1, 1 ) + + # Create a layout for the radio buttons + self.vbox = QVBoxLayout( self.bg, 10 ) + + self.vbox.addSpacing( self.bg.fontMetrics().height() ) + self.rb = QRadioButton( self.bg ) + self.rb.setText( "&AM" ) + self.rb.setChecked( TRUE ) + self.vbox.addWidget( self.rb ) + self.rb.setMinimumSize( self.rb.sizeHint() ) + QToolTip.add( self.rb, "radio button 1" ) + self.rb = QRadioButton( self.bg ) + self.rb.setText( "&FM" ) + self.vbox.addWidget( self.rb ) + self.rb.setMinimumSize( self.rb.sizeHint() ) + QToolTip.add( self.rb, "radio button 2" ) + self.rb = QRadioButton( self.bg ) + self.rb.setText( "&Short Wave" ) + self.vbox.addWidget( self.rb ) + self.rb.setMinimumSize( self.rb.sizeHint() ) + self.vbox.activate() + + self.connect( self.bg, SIGNAL("clicked(int)"), self.radioButtonClicked ) + QToolTip.add( self.rb, "radio button 3" ) + + # Create a list box + self.lb = QListBox( self, "listBox" ) + for i in range( 0, 100, 1 ): # fill list box + txt = QString() + txt = "line %d" % i + if i == 42 and self.pix: + self.lb.insertItem( self.pm ) + else: + self.lb.insertItem( txt ) + + self.grid.addMultiCellWidget( self.lb, 2, 4, 0, 0 ) + self.connect( self.lb, SIGNAL("selected(int)"), self.listBoxItemSelected ) + QToolTip.add( self.lb, "list box" ) + + self.vbox = QVBoxLayout( 8 ) + self.grid.addLayout( self.vbox, 2, 1 ) + + # Create a slider + self.sb = QSlider( 0, 300, 1, 100, QSlider.Horizontal, self, "Slider" ) + #self.sb.setTickmarks( QSlider.Below ) + self.sb.setTickmarks( 1 ) + self.sb.setTickInterval( 10 ) + #self.sb.setFocusPolicy( QWidget.TabFocus ) + self.sb.setFocusPolicy( 1 ) + self.sb.setFixedHeight( self.sb.sizeHint().height() ) + self.vbox.addWidget( self.sb ) + + self.connect( self.sb, SIGNAL("valueChanged(int)"), self.sliderValueChanged ) + QToolTip.add( self.sb, "slider" ) + + # Create a combo box + self.combo = QComboBox( FALSE, self, "comboBox" ) + self.combo.insertItem( "darkBlue" ) + self.combo.insertItem( "darkRed" ) + self.combo.insertItem( "darkGreen" ) + self.combo.insertItem( "blue" ) + self.combo.insertItem( "red" ) + self.combo.setFixedHeight( self.combo.sizeHint().height() ) + self.vbox.addWidget( self.combo ) + self.connect( self.combo, SIGNAL("activated(int)"), self.comboBoxItemActivated ) + QToolTip.add( self.combo, "read-only combo box" ) + + # Create an editable combo box + self.edCombo = QComboBox( TRUE, self, "edComboBox" ) + self.edCombo.insertItem( "Permutable" ) + self.edCombo.insertItem( "Malleable" ) + self.edCombo.insertItem( "Adaptable" ) + self.edCombo.insertItem( "Alterable" ) + self.edCombo.insertItem( "Inconstant" ) + self.edCombo.setFixedHeight( self.edCombo.sizeHint().height() ) + self.vbox.addWidget( self.edCombo ) + self.connect( self.edCombo, SIGNAL("activated(const QString &)"), self.edComboBoxItemActivated) + QToolTip.add( self.edCombo, "editable combo box" ) + + self.edCombo.setAutoCompletion( TRUE ) + + self.vbox.addStretch( 1 ) + + self.vbox = QVBoxLayout( 8 ) + self.grid.addLayout( self.vbox, 2, 2 ) + + # Create a spin box + self.spin = QSpinBox( 0, 10, 1, self, "spin" ) + self.spin.setSuffix( " mm" ) + self.spin.setSpecialValueText( "Auto" ) + self.spin.setMinimumSize( self.spin.sizeHint() ) + self.connect( self.spin, SIGNAL( "valueChanged(const QString &)" ), self.spinBoxValueChanged ) + QToolTip.add( self.spin, "spin box" ) + self.vbox.addWidget( self.spin ) + + self.vbox.addStretch( 1 ) + + # Create a multi line edit + self.mle = QMultiLineEdit( self, "multiLineEdit" ) + + self.grid.addMultiCellWidget( self.mle, 3, 3, 1, 2 ) + self.mle.setMinimumHeight( self.mle.fontMetrics().height() * 3 ) + self.mle.setText("This is a QMultiLineEdit widget,\n" + "useful for small multi-line\n" + "input fields.") + QToolTip.add( self.mle, "multi line editor" ) + + # Create a single line edit + self.le = QLineEdit( self, "lineEdit" ) + self.grid.addMultiCellWidget( self.le, 4, 4, 1, 2 ) + self.le.setFixedHeight( self.le.sizeHint().height() ) + self.connect( self.le, SIGNAL("textChanged(const QString &)"), self.lineEditTextChanged ) + QToolTip.add( self.le, "single line editor" ) + + # Create a horizontal line (sort of QFrame) above the message line + self.separator = QFrame( self, "separatorLine" ) + self.separator.setFrameStyle( QFrame.HLine | QFrame.Sunken ) + self.separator.setFixedHeight( self.separator.sizeHint().height() ) + self.grid.addMultiCellWidget( self.separator, 5, 5, 0, 2 ) + QToolTip.add( self.separator, "tool tips on a separator! wow!" ) + + self.grid.setRowStretch( 0, 0 ) + self.grid.setRowStretch( 1, 0 ) + self.grid.setRowStretch( 2, 0 ) + self.grid.setRowStretch( 3, 1 ) + self.grid.setRowStretch( 4, 1 ) + self.grid.setRowStretch( 5, 0 ) + + self.grid.setColStretch( 0, 1 ) + self.grid.setColStretch( 1, 1 ) + self.grid.setColStretch( 2, 1 ) + + # Create an label and a message in a plain widget + # The message is updated when buttons are clicked etc. + + self.hbox = QHBoxLayout() + self.topLayout.addLayout( self.hbox ) + self.msgLabel = QLabel( self, "msgLabel" ) + self.msgLabel.setText( "Message:" ) + self.msgLabel.setAlignment( Qt.AlignHCenter | Qt.AlignVCenter ) + self.msgLabel.setFixedSize( self.msgLabel.sizeHint() ) + self.hbox.addWidget( self.msgLabel ) + QToolTip.add( self.msgLabel, "label 1" ) + + self.msg = QLabel( self, "message" ) + self.msg.setFrameStyle( QFrame.Panel | QFrame.Sunken ) + self.msg.setAlignment( Qt.AlignCenter ) + self.msg.setFont( QFont( "times", 12, QFont.Bold ) ) + self.msg.setText( "Message" ) + self.msg.setFixedHeight( self.msg.sizeHint().height() ) + self.msg.setText( "" ) + self.hbox.addWidget( self.msg, 5 ) + QToolTip.add( self.msg, "label 2" ) + + self.topLayout.activate() + + def setStatus(self, text): + self.msg.setText( text ) + + def movieUpdate( self, r ): + # Uncomment this to test animated icons on your window manager + self.setIcon( self.movie.framePixmap() ) + + def movieStatus( self, s ): + if s == QMovie.SourceEmpty or s == QMovie.UnrecognizedFormat: + pm = QPixmap('tt-logo.png') + self.movielabel.setPixmap(pm) + self.movielabel.setFixedSize(pm.size()) + else: + if ( self.movielabel.movie() ): # for flicker-free animation: + self.movielabel.setBackgroundMode( QWidget.NoBackground ) + + def button1Clicked( self ): + self.msg.setText( "The first push button was clicked" ) + + def checkBoxClicked( self, id ): + txt = QString() + txt = "Check box %s clicked : " % str(id) + chk = ["-","-","-"] + if self.cb[0].isChecked(): + chk[0] = "r" + if self.cb[1].isChecked(): + chk[1] = "w" + if self.cb[2].isChecked(): + chk[2] = "x" + txt = txt + str(chk[0]+chk[1]+chk[2]) + self.msg.setText( txt ) + + def edComboBoxItemActivated( self, text): + txt = QString() + txt = "Editable Combo Box set to %s" % text + self.msg.setText( txt ) + + def radioButtonClicked( self, id ): + txt = QString() + txt = "Radio button #%d clicked" % id + self.msg.setText( txt ) + + def listBoxItemSelected( self, index ): + txt = QString() + txt = "List box item %d selected" % index + self.msg.setText( txt ) + + def sliderValueChanged( self, value ): + txt = QString() + txt = "Movie set to %d%% of normal speed" % value + self.msg.setText( txt ) + self.movie.setSpeed( value ) + + def comboBoxItemActivated( self, index ): + txt = QString() + txt = "Comboxo box item %d activated" % index + self.msg.setText( txt ) + if index == 0: + QApplication.setWinStyleHighlightColor( Qt.darkBlue ) + elif index == 1: + QApplication.setWinStyleHighlightColor( Qt.darkRed ) + elif index == 2: + QApplication.setWinStyleHighlightColor( Qt.darkGreen ) + elif index == 3: + QApplication.setWinStyleHighlightColor( Qt.blue ) + elif index == 4: + QApplication.setWinStyleHighlightColor( Qt.red ) + + def lineEditTextChanged( self, newText ): + self.msg.setText("Line edit text: " + unicode(newText)) + + def spinBoxValueChanged( self, valueText ): + self.msg.setText("Spin box value: " + unicode(valueText)) + + # All application events are passed throught this event filter. + # We're using it to display some information about a clicked + # widget (right mouse button + CTRL). + #def eventFilter( self, event ): + # identify_now = TRUE + # if event.type() == Event_MouseButtonPress and identify_now: + # e = QMouseEvent( event ) + # if (e.button() == Qt.RightButton) and (e.state() & Qt.ControlButton) != 0: + # txt = QString( "The clicked widget is a\n" ) + # txt = txt + QObect.className() + # txt = txt + "\nThe widget's name is\n" + # if QObject.name(): + # txt = txt + QObject.name() + # else: + # txt = txt + "" + # identify_now = FALSE # don't do it in message box + # QMessageBox.message( "Identify Widget", txt, 0, QObject ) + # identify_now = TRUE; # allow it again + # return FALSE # don't eat event + +################################################################################################ + +#QApplication.setColourSpec( QApplication.CustomColor ) +a = QApplication( sys.argv ) + +w = WidgetView() +a.setMainWidget( w ) +w.show() +a.exec_loop() diff --git a/examples3/README b/examples3/README new file mode 100644 index 0000000..4a8f9eb --- /dev/null +++ b/examples3/README @@ -0,0 +1,12 @@ +To run these examples, make sure you have your PYTHONPATH environment variable +set if needed and explicitly set the path to python at the top of each script +if you don't have /usr/bin/env. + +The examples are written for Qt v3.x. + +A much better source of information about using PyQt is Boudewijn Rempt's +book at http://stage.linuxports.com/projects/pyqt/. + + +Phil Thompson +phil@riverbankcomputing.co.uk diff --git a/examples3/SQL/README b/examples3/SQL/README new file mode 100644 index 0000000..9dfc5d4 --- /dev/null +++ b/examples3/SQL/README @@ -0,0 +1,76 @@ +This directory contains some translated sql examples from Qt 3.x. + +runform1.py, form1.ui: + + A simple designer generated QDataTable. Run "pyuic form1.ui -o form1.py". + +runform2.py, form2.ui: + + A simple designer generated QDataBrowser. Run "pyuic form2.ui -o form2.py". + +sqlcustom1.py: + + QSqlForm based form with a simple custom editor forcing all input to + be uppercase + +sqltable4.py: + + Custom QDataTable with reimplemented paintField method, combined with + a QComboBox based custom field editor (StatusPicker), gathering its + items from a different table (status) and a calculated column (monsalary). + Note, that QSqlEditorFactory based field editors are somewhat restricted, + because Qt's Q_PROPERTY feature isn't supported, yet. I've circumvented + this limitation by choosing the status table ids corresponding to the + index in the QComboBox. + +sqlsubclass5.py: + + Similar to the former, and even more deviated from its qt ancestor, + because the sense escaped me. This could be related to the different + database layout needed for MySQL (Trolltech used PostgreSQL sequences, + while we're using the simpler, but less powerful auto_increment here). + If you enter and invalid date (e.g. day: 0) in the Paid column, it is + shown as "not yet", but produces some qt warnings. + +runsqlex.py, sqlex.ui, sqlex.ui.h, connect.ui, connect.ui.h: + + This one is a most advanced example, showing the use of a QSqlCursor + driven by QSqlQuery and iterating through database tables and fields. + Definitely worth a look. + +Unfortunately you will have to make sure that these prerequisites are met +before trying the examples: + + - Install MySQL or PostgreSQL and any development packages + + - Create a database user with sufficient rights + + - Create the testdb database + - For MySQL, run: mysql -u user -p password < testdb_mysql.sql + - For PostgreSQL, run: psql -U user template1 -f testdb_pg.sql + + - Build Qt with the mysql and/or psql modules activated. + +Now you should be ready for the fun part. You can run dbconnect.py from +a command line and try to connect to the database. If all went well, +'ok' should be printed after pressing OK. If you don't want to enter all +your data over and over again, create a file named local_dbpar.py here, +with the following keys (with your own data, of course): + +DB_HOSTNAMES = ["localhost"] +DB_DATABASES = ["testdb"] +DB_USERNAME = "name" +DB_PASSWORD = "pass" + +The dbconnect.py script is generated from dbconnect.ui, which was created +with qt's designer. You can find it also in Boudewijn Rempt's book +"GUI Programming with Python, using the Qt Toolkit". Although you won't find +the SQL widgets discussed there, for the simple reason of the book being +written before they appeared, it is a valuable source for anybody new in +this area. + +Please direct any comments, patches and questions to . + +Good luck + +Hans-Peter Jansen diff --git a/examples3/SQL/connect.ui b/examples3/SQL/connect.ui new file mode 100644 index 0000000..cc41920 --- /dev/null +++ b/examples3/SQL/connect.ui @@ -0,0 +1,238 @@ + +ConnectDialog + + + ConnectDialog + + + + 0 + 0 + 303 + 251 + + + + Connect... + + + + unnamed + + + 11 + + + 6 + + + + GroupBox3 + + + Connection settings + + + + unnamed + + + 11 + + + 6 + + + + editDatabase + + + + + TextLabel3 + + + Database Name: + + + comboDatabase + + + + + editPassword + + + Password + + + + + TextLabel4 + + + &Username: + + + editUsername + + + + + TextLabel4_2 + + + &Password: + + + editPassword + + + + + comboDriver + + + + + editUsername + + + + + editHostname + + + + + TextLabel5 + + + &Hostname: + + + editHostname + + + + + TextLabel5_2 + + + P&ort: + + + portSpinBox + + + + + portSpinBox + + + Default + + + 65535 + + + -1 + + + -1 + + + + + TextLabel2 + + + D&river + + + comboDriver + + + + + + + Layout25 + + + + unnamed + + + 0 + + + 6 + + + + Spacer1 + + + Horizontal + + + Expanding + + + + + PushButton1 + + + &OK + + + true + + + + + PushButton2 + + + &Cancel + + + + + + + + + PushButton1 + clicked() + ConnectDialog + accept() + + + PushButton2 + clicked() + ConnectDialog + reject() + + + + comboDriver + editDatabase + editUsername + editPassword + editHostname + portSpinBox + PushButton1 + PushButton2 + + + connect.ui.h + + + init() + destroy() + + + diff --git a/examples3/SQL/connect.ui.h b/examples3/SQL/connect.ui.h new file mode 100644 index 0000000..cbeeabd --- /dev/null +++ b/examples3/SQL/connect.ui.h @@ -0,0 +1,21 @@ +/**************************************************************************** +** ui.h extension file, included from the uic-generated form implementation. +** +** If you wish to add, delete or rename slots use Qt Designer which will +** update this file, preserving your code. Create an init() slot in place of +** a constructor, and a destroy() slot in place of a destructor. +*****************************************************************************/ + + +void ConnectDialog::init() +{ +from qtsql import QSqlDatabase +#qDebug("ConnectDialog init") +self.comboDriver.clear() +self.comboDriver.insertStringList(QSqlDatabase.drivers()) +} + +void ConnectDialog::destroy() +{ + +} diff --git a/examples3/SQL/dbconnect.py b/examples3/SQL/dbconnect.py new file mode 100755 index 0000000..fdae7de --- /dev/null +++ b/examples3/SQL/dbconnect.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python + +import sys +from qt import * +from qtsql import * + +from frmconnect import frmConnect +from dbpar import * + +TRUE = 1 +FALSE = 0 + +def createConnection(): + driver = DB_DRIVER + # all qt examples use QSqlDatabase::addDatabase, but + # this never returns NULL in my experience + drivers = map(str, QSqlDatabase.drivers()) + if driver in drivers: + dlg = dbConnect(driver) + #TODO: make connection parameters accessible + return dlg.exec_loop() + else: + QMessageBox.warning(None, "Database Error", + "<%s> database driver not found!\n\n" + "Please make sure, that this database adaptor\n" + "is available in your Qt installation.\n" % + (driver), QMessageBox.Abort | QMessageBox.Escape) + return FALSE + +class dbConnect(frmConnect): + def __init__(self, driver, parent = None): + frmConnect.__init__(self, parent) + self.hostnames = DB_HOSTNAMES + self.hostname = DB_HOSTNAMES[0] + self.databases = DB_DATABASES + self.database = DB_DATABASES[0] + self.username = DB_USERNAME + self.password = DB_PASSWORD + self.dbdriver = driver + + self.txtName.setText(self.username) + self.txtPasswd.setText(self.password) + map(self.cmbServer.insertItem, self.hostnames) + map(self.cmbDatabase.insertItem, self.databases) + self.connect(self.buttonHelp, SIGNAL("clicked()"), + self.buttonHelp_clicked) + + def accept(self): + self.hostname = self.cmbServer.currentText() + self.database = self.cmbDatabase.currentText() + self.username = self.txtName.text() + self.password = self.txtPasswd.text() + db = QSqlDatabase.addDatabase(self.dbdriver) + if db: + db.setHostName(self.hostname) + db.setDatabaseName(self.database) + db.setUserName(self.username) + db.setPassword(self.password) + if db.open(): + frmConnect.accept(self) + else: + QMessageBox.warning(self, "Database Error", + "Cannot open %s database on %s!\n\n%s\n%s\n" % + (self.database, self.hostname, + db.lastError().driverText(), + db.lastError().databaseText()), " Ooops ") + + + def buttonHelp_clicked(self): + QMessageBox.information(self, "About Connecting", + "Here you specify userid, password, host and database\n" + "for the PyQt sql examples. If you encounter any problems,\n" + "please read the README file in this folder before posting.\n\n" + "Thanks,\nHans-Peter Jansen \n") + + +if __name__ == "__main__": + app = QApplication(sys.argv) + if createConnection(): + print "ok" + else: + print "cancel" diff --git a/examples3/SQL/dbpar.py b/examples3/SQL/dbpar.py new file mode 100644 index 0000000..90e9270 --- /dev/null +++ b/examples3/SQL/dbpar.py @@ -0,0 +1,22 @@ +# sql examples default database parameter + +# you can create a local_dbpar.py module with definitons +# of your own parameters to overrule these defaults + +#DB_DRIVER = "QPSQL7" +DB_DRIVER = "QMYSQL3" +# list of servers +DB_HOSTNAMES = ["localhost"] +# list of databases +DB_DATABASES = ["testdb"] +# database user id +DB_USERNAME = "" +# database password +DB_PASSWORD = "" + +# remove this in your local_dbpar.py +try: + from local_dbpar import * +except: + pass + diff --git a/examples3/SQL/form1.ui b/examples3/SQL/form1.ui new file mode 100644 index 0000000..38b3cb2 --- /dev/null +++ b/examples3/SQL/form1.ui @@ -0,0 +1,77 @@ + +Form1 + + + Form1 + + + + 0 + 0 + 600 + 370 + + + + Form1 + + + + + Forename + + + forename + + + + + Surname + + + surname + + + + + Salary + + + salary + + + + + Statusid + + + statusid + + + + DataTable2 + + + + 0 + 0 + 600 + 370 + + + + true + + + true + + + + (default) + staff + + + + + + diff --git a/examples3/SQL/form2.ui b/examples3/SQL/form2.ui new file mode 100644 index 0000000..ffe2beb --- /dev/null +++ b/examples3/SQL/form2.ui @@ -0,0 +1,327 @@ + +Form2 + + + Form2 + + + + 0 + 0 + 367 + 152 + + + + Form2 + + + + DataBrowser1 + + + + 0 + 0 + 366 + 150 + + + + + surname ASC + forename ASC + + + + + (default) + staff + + + + + unnamed + + + 11 + + + 6 + + + + Layout2 + + + + unnamed + + + 0 + + + 6 + + + + labelSurname + + + Surname + + + + + QSpinBoxStatusid + + + 2147483647 + + + + (default) + staff + statusid + + + + + + QLineEditSurname + + + + (default) + staff + surname + + + + + + labelStatusid + + + Statusid + + + + + labelForename + + + Forename + + + + + QLineEditSalary + + + AlignRight + + + + (default) + staff + salary + + + + + + labelSalary + + + Salary + + + + + QLineEditForename + + + + (default) + staff + forename + + + + + + + + Layout3 + + + + unnamed + + + 0 + + + 6 + + + + PushButtonFirst + + + |< &First + + + + + PushButtonPrev + + + << &Prev + + + + + PushButtonNext + + + &Next >> + + + + + PushButtonLast + + + &Last >| + + + + + + + Layout4 + + + + unnamed + + + 0 + + + 6 + + + + PushButtonInsert + + + &Insert + + + + + PushButtonUpdate + + + &Update + + + + + PushButtonDelete + + + &Delete + + + + + + + + + + PushButtonFirst + clicked() + DataBrowser1 + first() + + + DataBrowser1 + firstRecordAvailable( bool ) + PushButtonFirst + setEnabled(bool) + + + PushButtonPrev + clicked() + DataBrowser1 + prev() + + + DataBrowser1 + prevRecordAvailable( bool ) + PushButtonPrev + setEnabled(bool) + + + PushButtonNext + clicked() + DataBrowser1 + next() + + + DataBrowser1 + nextRecordAvailable( bool ) + PushButtonNext + setEnabled(bool) + + + PushButtonLast + clicked() + DataBrowser1 + last() + + + DataBrowser1 + lastRecordAvailable( bool ) + PushButtonLast + setEnabled(bool) + + + PushButtonInsert + clicked() + DataBrowser1 + insert() + + + PushButtonUpdate + clicked() + DataBrowser1 + update() + + + PushButtonDelete + clicked() + DataBrowser1 + del() + + + + QLineEditForename + QLineEditSurname + QLineEditSalary + QSpinBoxStatusid + PushButtonFirst + PushButtonPrev + PushButtonNext + PushButtonLast + PushButtonInsert + PushButtonUpdate + PushButtonDelete + + + diff --git a/examples3/SQL/frmconnect.py b/examples3/SQL/frmconnect.py new file mode 100644 index 0000000..23cd067 --- /dev/null +++ b/examples3/SQL/frmconnect.py @@ -0,0 +1,120 @@ +# Form implementation generated from reading ui file 'frmconnect.ui' +# +# Created: Sam Jul 6 12:47:10 2002 +# by: The PyQt User Interface Compiler (pyuic) +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class frmConnect(QDialog): + def __init__(self,parent = None,name = None,modal = 0,fl = 0): + QDialog.__init__(self,parent,name,modal,fl) + + if name == None: + self.setName("frmConnect") + + self.resize(415,154) + self.setCaption(self.trUtf8("Connecting")) + self.setSizeGripEnabled(1) + + frmConnectLayout = QGridLayout(self,1,1,11,6,"frmConnectLayout") + + Layout7 = QVBoxLayout(None,0,6,"Layout7") + + self.buttonOK = QPushButton(self,"buttonOK") + self.buttonOK.setText(self.trUtf8("&OK")) + self.buttonOK.setAutoDefault(1) + self.buttonOK.setDefault(1) + QToolTip.add(self.buttonOK,self.trUtf8("Connect to Database")) + Layout7.addWidget(self.buttonOK) + + self.buttonCancel = QPushButton(self,"buttonCancel") + self.buttonCancel.setText(self.trUtf8("&Cancel")) + QToolTip.add(self.buttonCancel,self.trUtf8("Cancel Connecting")) + Layout7.addWidget(self.buttonCancel) + + self.buttonHelp = QPushButton(self,"buttonHelp") + self.buttonHelp.setText(self.trUtf8("&Help")) + QToolTip.add(self.buttonHelp,self.trUtf8("About Connecting")) + Layout7.addWidget(self.buttonHelp) + spacer = QSpacerItem(0,0,QSizePolicy.Minimum,QSizePolicy.Expanding) + Layout7.addItem(spacer) + + frmConnectLayout.addLayout(Layout7,0,1) + + self.grpConnection = QGroupBox(self,"grpConnection") + self.grpConnection.setTitle(self.trUtf8("")) + self.grpConnection.setColumnLayout(0,Qt.Vertical) + self.grpConnection.layout().setSpacing(6) + self.grpConnection.layout().setMargin(11) + grpConnectionLayout = QGridLayout(self.grpConnection.layout()) + grpConnectionLayout.setAlignment(Qt.AlignTop) + + self.txtName = QLineEdit(self.grpConnection,"txtName") + self.txtName.setMaxLength(16) + QToolTip.add(self.txtName,self.trUtf8("Database User ID")) + + grpConnectionLayout.addWidget(self.txtName,0,1) + + self.lblDatabase = QLabel(self.grpConnection,"lblDatabase") + self.lblDatabase.setText(self.trUtf8("&Database")) + + grpConnectionLayout.addWidget(self.lblDatabase,3,0) + + self.lblServer = QLabel(self.grpConnection,"lblServer") + self.lblServer.setText(self.trUtf8("&Server")) + + grpConnectionLayout.addWidget(self.lblServer,2,0) + + self.lblName = QLabel(self.grpConnection,"lblName") + self.lblName.setText(self.trUtf8("&Name")) + + grpConnectionLayout.addWidget(self.lblName,0,0) + + self.cmbDatabase = QComboBox(0,self.grpConnection,"cmbDatabase") + self.cmbDatabase.setEditable(1) + self.cmbDatabase.setAutoCompletion(1) + self.cmbDatabase.setDuplicatesEnabled(0) + QToolTip.add(self.cmbDatabase,self.trUtf8("Database Name")) + + grpConnectionLayout.addWidget(self.cmbDatabase,3,1) + + self.txtPasswd = QLineEdit(self.grpConnection,"txtPasswd") + self.txtPasswd.setMaxLength(16) + self.txtPasswd.setEchoMode(QLineEdit.Password) + QToolTip.add(self.txtPasswd,self.trUtf8("Database User Password")) + + grpConnectionLayout.addWidget(self.txtPasswd,1,1) + + self.lblPasswd = QLabel(self.grpConnection,"lblPasswd") + self.lblPasswd.setText(self.trUtf8("&Password")) + + grpConnectionLayout.addWidget(self.lblPasswd,1,0) + + self.cmbServer = QComboBox(0,self.grpConnection,"cmbServer") + self.cmbServer.setEditable(1) + self.cmbServer.setAutoCompletion(1) + self.cmbServer.setDuplicatesEnabled(0) + QToolTip.add(self.cmbServer,self.trUtf8("Database Server Address")) + + grpConnectionLayout.addWidget(self.cmbServer,2,1) + + frmConnectLayout.addWidget(self.grpConnection,0,0) + + self.connect(self.buttonOK,SIGNAL("clicked()"),self,SLOT("accept()")) + self.connect(self.buttonCancel,SIGNAL("clicked()"),self,SLOT("reject()")) + + self.setTabOrder(self.txtName,self.txtPasswd) + self.setTabOrder(self.txtPasswd,self.cmbServer) + self.setTabOrder(self.cmbServer,self.cmbDatabase) + self.setTabOrder(self.cmbDatabase,self.buttonOK) + self.setTabOrder(self.buttonOK,self.buttonCancel) + self.setTabOrder(self.buttonCancel,self.buttonHelp) + + self.lblDatabase.setBuddy(self.cmbDatabase) + self.lblServer.setBuddy(self.cmbServer) + self.lblName.setBuddy(self.txtName) + self.lblPasswd.setBuddy(self.txtPasswd) diff --git a/examples3/SQL/frmconnect.ui b/examples3/SQL/frmconnect.ui new file mode 100644 index 0000000..a6fc15c --- /dev/null +++ b/examples3/SQL/frmconnect.ui @@ -0,0 +1,245 @@ + +frmConnect + + + frmConnect + + + + 0 + 0 + 415 + 154 + + + + Connecting + + + true + + + + unnamed + + + 11 + + + 6 + + + + Layout7 + + + + unnamed + + + 0 + + + 6 + + + + buttonOK + + + &OK + + + true + + + true + + + Connect to Database + + + + + buttonCancel + + + &Cancel + + + Cancel Connecting + + + + + buttonHelp + + + &Help + + + About Connecting + + + + + spacer + + + Vertical + + + Expanding + + + + + + + grpConnection + + + + + + + unnamed + + + 11 + + + 6 + + + + txtName + + + 16 + + + Database User ID + + + + + lblDatabase + + + &Database + + + cmbDatabase + + + + + lblServer + + + &Server + + + cmbServer + + + + + lblName + + + &Name + + + txtName + + + + + cmbDatabase + + + true + + + true + + + false + + + Database Name + + + + + txtPasswd + + + 16 + + + Password + + + Database User Password + + + + + lblPasswd + + + &Password + + + txtPasswd + + + + + cmbServer + + + true + + + true + + + false + + + Database Server Address + + + + + + + + + buttonOK + clicked() + frmConnect + accept() + + + buttonCancel + clicked() + frmConnect + reject() + + + + txtName + txtPasswd + cmbServer + cmbDatabase + buttonOK + buttonCancel + buttonHelp + + + diff --git a/examples3/SQL/runform1.py b/examples3/SQL/runform1.py new file mode 100755 index 0000000..d5760ce --- /dev/null +++ b/examples3/SQL/runform1.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +import sys +from qt import * + +from form1 import Form1 +from dbconnect import createConnection + +class mainWindow(Form1): + def __init__(self,parent = None,name = None,fl = 0): + Form1.__init__(self,parent,name,fl) + +if __name__ == "__main__": + a = QApplication(sys.argv) + if createConnection(): + QObject.connect(a,SIGNAL("lastWindowClosed()"),a,SLOT("quit()")) + w = mainWindow() + a.setMainWidget(w) + w.show() + a.exec_loop() + diff --git a/examples3/SQL/runform2.py b/examples3/SQL/runform2.py new file mode 100755 index 0000000..ba0ca4a --- /dev/null +++ b/examples3/SQL/runform2.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +import sys +from qt import * + +from form2 import Form2 +from dbconnect import createConnection + +class mainWindow(Form2): + def __init__(self,parent = None,name = None,fl = 0): + Form2.__init__(self,parent,name,fl) + +if __name__ == "__main__": + a = QApplication(sys.argv) + if createConnection(): + QObject.connect(a,SIGNAL("lastWindowClosed()"),a,SLOT("quit()")) + w = mainWindow() + a.setMainWidget(w) + w.show() + a.exec_loop() + diff --git a/examples3/SQL/runsqlex.py b/examples3/SQL/runsqlex.py new file mode 100755 index 0000000..7f2afa7 --- /dev/null +++ b/examples3/SQL/runsqlex.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python + +import sys +from qt import * +from qtsql import * + +from sqlex import SqlEx +from connect import ConnectDialog + +from dbpar import * + +TRUE = 1 +FALSE = 0 + +def showError(err, parent): + errStr = QString("The database reported an error:\n\n") + if not err.databaseText().isEmpty(): + errStr.append(err.databaseText()) + errStr.append("\n") + if not err.driverText().isEmpty(): + errStr.append(err.driverText()) + errStr.append("\n") + QMessageBox.warning(parent, "Error", errStr) + +class CustomSqlCursor(QSqlCursor): + def __init__(self, query = None, autopopulate = TRUE, db = None): + QSqlCursor.__init__(self, None, autopopulate, db) + self.execQuery(query) + if self.isSelect() and autopopulate: + fields = self.driver().recordInfo(self) + for f in fields: + self.append(f) + self.setMode(QSqlCursor.ReadOnly) + + def select(self, filter, sort = QSqlIndex()): + return self.execQuery(self.lastQuery()) + + def primaryIndex(self, prime = TRUE): + return QSqlIndex() + + def insert(self, invalidate = TRUE): + return FALSE + + def update(self, invalidate = TRUE): + return FALSE + + def delRecords(self, invalidate = TRUE): + return FALSE + + def setName(self, name, autopopulate = TRUE): + return + + +class MainWindow(SqlEx): + def __init__(self,parent = None,name = None,fl = 0): + SqlEx.__init__(self,parent,name,fl) + self.conDiag = ConnectDialog(self, "Connection Dialog", TRUE) + self.firstconn = TRUE + + def dbConnect(self): + if self.firstconn: + self.firstconn = FALSE + self.conDiag.editUsername.setText(DB_USERNAME) + self.conDiag.editPassword.setText(DB_PASSWORD) + self.conDiag.editHostname.setText(DB_HOSTNAMES[0]) + self.conDiag.editDatabase.setText(DB_DATABASES[0]) + for i in range(self.conDiag.comboDriver.count()): + if str(self.conDiag.comboDriver.text(i)) == DB_DRIVER: + self.conDiag.comboDriver.setCurrentItem(i) + break + if self.conDiag.exec_loop() != QDialog.Accepted: + return + if self.dt.sqlCursor(): + self.dt.setSqlCursor() + + # close old connection (if any) + if QSqlDatabase.contains("SqlEx"): + oldDb = QSqlDatabase.database("SqlEx") + oldDb.close() + QSqlDatabase.removeDatabase("SqlEx") + + # open the new connection + db = QSqlDatabase.addDatabase(self.conDiag.comboDriver.currentText(), "SqlEx") + if not db: + QMessageBox.warning(self, "Error", "Could not open database") + return + + db.setHostName(self.conDiag.editHostname.text()) + db.setDatabaseName(self.conDiag.editDatabase.text()) + db.setPort(self.conDiag.portSpinBox.value()) + if not db.open(self.conDiag.editUsername.text(), + self.conDiag.editPassword.text()): + showError(db.lastError(), self) + return + + self.lbl.setText("Double-Click on a table-name to view the contents") + self.lv.clear() + + tables = db.tables() + for t in tables: + lvi = QListViewItem(self.lv, t) + fields = db.recordInfo(t) + for f in fields: + req = "?" + if f.isRequired() > 0: + req = "Yes" + elif f.isRequired() == 0: + req = "No" + fi = QListViewItem(lvi, f.name(), QVariant.typeToName(f.type()), req) + lvi.insertItem(fi) + self.lv.insertItem(lvi) + + self.submitBtn.setEnabled(TRUE) + + def execQuery(self): + cursor = CustomSqlCursor(self.te.text(), TRUE, + QSqlDatabase.database("SqlEx", TRUE)) + if cursor.isSelect(): + self.dt.setSqlCursor(cursor, TRUE, TRUE) + self.dt.refresh() + txt = QString("Query OK") + if cursor.size() >= 0: + txt.append(", returned rows: %s" % cursor.size()) + self.lbl.setText(txt) + else: + if not cursor.isActive(): + # an error occured + showError(cursor.lastError(), self) + else: + self.lbl.setText("Query OK, affected rows: %s" % + cursor.numRowsAffected()) + + def showTable(self, item): + i = item.parent() + if not i: + i = item + cursor = QSqlCursor(i.text(0), TRUE, QSqlDatabase.database("SqlEx", TRUE)) + self.dt.setSqlCursor(cursor, TRUE, TRUE) + self.dt.setSort(cursor.primaryIndex()) + self.dt.refresh(QDataTable.RefreshAll) + self.lbl.setText("Displaying table %s" % i.text(0)) + + +if __name__ == "__main__": + a = QApplication(sys.argv) + QObject.connect(a,SIGNAL("lastWindowClosed()"),a,SLOT("quit()")) + w = MainWindow() + a.setMainWidget(w) + w.show() + a.exec_loop() + diff --git a/examples3/SQL/sqlcustom1.py b/examples3/SQL/sqlcustom1.py new file mode 100755 index 0000000..cacb010 --- /dev/null +++ b/examples3/SQL/sqlcustom1.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python + +#**************************************************************************** +#** $Id: sqlcustom1.py,v 1.3 2002/07/06 13:35:41 phil Exp $ +#** +#** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved. +#** +#** This file is part of an example program for PyQt. This example +#** program may be used, distributed and modified without limitation. +#** +#*****************************************************************************/ + +import sys +from qt import * +from qtsql import * + +from dbconnect import createConnection + +TRUE = 1 +FALSE = 0 + +class CustomEdit(QLineEdit): + def __init__(self, parent = None, name = None): + QLineEdit.__init__(self, parent, name) + QObject.connect(self, SIGNAL("textChanged(const QString &)"), + self.changed) + + def changed(self, line): + self.setUpperLine(line) + + def setUpperLine(self, line): + self.upperLineText = line.upper() + self.setText(self.upperLineText) + + +class FormDialog(QDialog): + def __init__(self): + QDialog.__init__(self) + forenameLabel = QLabel("Forename:", self) + forenameEdit = CustomEdit(self) + surnameLabel = QLabel("Surname:", self) + surnameEdit = CustomEdit(self) + salaryLabel = QLabel("Salary:", self) + salaryEdit = QLineEdit(self) + salaryEdit.setAlignment(Qt.AlignRight) + saveButton = QPushButton("&Save", self) + self.connect(saveButton, SIGNAL("clicked()"), self.save) + + grid = QGridLayout(self) + grid.addWidget(forenameLabel, 0, 0) + grid.addWidget(forenameEdit, 0, 1) + grid.addWidget(surnameLabel, 1, 0) + grid.addWidget(surnameEdit, 1, 1) + grid.addWidget(salaryLabel, 2, 0) + grid.addWidget(salaryEdit, 2, 1) + grid.addWidget(saveButton, 3, 0) + grid.activate() + + self.staffCursor = QSqlCursor("staff") + self.staffCursor.setTrimmed("forename", TRUE) + self.staffCursor.setTrimmed("surname", TRUE) + self.idIndex = self.staffCursor.index("id") + self.staffCursor.select(self.idIndex) + self.staffCursor.first() + + self.propMap = QSqlPropertyMap() + self.propMap.insert(forenameEdit.className(), "upperLine") + + self.sqlForm = QSqlForm() + self.sqlForm.setRecord(self.staffCursor.primeUpdate()) + self.sqlForm.installPropertyMap(self.propMap) + self.sqlForm.insert(forenameEdit, "forename") + self.sqlForm.insert(surnameEdit, "surname") + self.sqlForm.insert(salaryEdit, "salary") + self.sqlForm.readFields() + + def save(self): + self.sqlForm.writeFields() + self.staffCursor.update() + self.staffCursor.select(self.idIndex) + self.staffCursor.first() + + +if __name__=='__main__': + app = QApplication( sys.argv ) + + if createConnection(): + formDialog = FormDialog() + formDialog.show() + + app.setMainWidget(formDialog) + app.exec_loop() + + diff --git a/examples3/SQL/sqlex.ui b/examples3/SQL/sqlex.ui new file mode 100644 index 0000000..022fed9 --- /dev/null +++ b/examples3/SQL/sqlex.ui @@ -0,0 +1,303 @@ + +SqlEx + + + SqlEx + + + + 0 + 0 + 669 + 438 + + + + SQL Browser + + + + unnamed + + + 11 + + + 6 + + + + Layout23 + + + + unnamed + + + 0 + + + 6 + + + + lbl + + + Press "Connect" to open a database + + + + + conBtn + + + + 0 + 0 + 0 + 0 + + + + + 80 + 0 + + + + &Connect... + + + + + + + vsplit + + + Vertical + + + + hsplit + + + Horizontal + + + + + Tables + + + true + + + true + + + + + Type + + + true + + + true + + + + + Required + + + true + + + true + + + + lv + + + 0 + + + true + + + true + + + LastColumn + + + + + dt + + + false + + + + + + gb + + + SQL Query + + + + unnamed + + + 11 + + + 6 + + + + Layout22 + + + + unnamed + + + 0 + + + 6 + + + + te + + + + + Layout21 + + + + unnamed + + + 0 + + + 6 + + + + Spacer3 + + + Horizontal + + + Expanding + + + + + submitBtn + + + + 5 + 0 + 0 + 0 + + + + + 80 + 0 + + + + &Submit + + + + + clearBtn + + + + 5 + 0 + 0 + 0 + + + + + 80 + 0 + + + + C&lear + + + + + + + + + + + + + + clearBtn + clicked() + te + clear() + + + conBtn + clicked() + SqlEx + dbConnect() + + + lv + returnPressed(QListViewItem*) + SqlEx + showTable(QListViewItem*) + + + lv + doubleClicked(QListViewItem*) + SqlEx + showTable(QListViewItem*) + + + submitBtn + clicked() + SqlEx + execQuery() + + + + sqlex.ui.h + + + init() + dbConnect() + showTable( QListViewItem * ) + execQuery() + + + diff --git a/examples3/SQL/sqlex.ui.h b/examples3/SQL/sqlex.ui.h new file mode 100644 index 0000000..1acdc5d --- /dev/null +++ b/examples3/SQL/sqlex.ui.h @@ -0,0 +1,35 @@ +/**************************************************************************** +** ui.h extension file, included from the uic-generated form implementation. +** +** If you wish to add, delete or rename slots use Qt Designer which will +** update this file, preserving your code. Create an init() slot in place of +** a constructor, and a destroy() slot in place of a destructor. +*****************************************************************************/ + + +void SqlEx::init() +{ +self.hsplit.setSizes([250]) +self.hsplit.setResizeMode(self.lv, QSplitter.KeepSize) +self.vsplit.setResizeMode(self.gb, QSplitter.KeepSize) +self.submitBtn.setEnabled(0) +} + + +void SqlEx::dbConnect() +{ + +} + + +void SqlEx::showTable( QListViewItem * ) +{ + +} + + + +void SqlEx::execQuery() +{ + +} diff --git a/examples3/SQL/sqlsubclass5.py b/examples3/SQL/sqlsubclass5.py new file mode 100755 index 0000000..137ff93 --- /dev/null +++ b/examples3/SQL/sqlsubclass5.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python + +#**************************************************************************** +#** $Id: sqlsubclass5.py,v 1.3 2002/07/06 13:35:41 phil Exp $ +#** +#** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved. +#** +#** This file is part of an example program for PyQt. This example +#** program may be used, distributed and modified without limitation. +#** +#*****************************************************************************/ + +import sys +from qt import * +from qtsql import * + +from dbconnect import createConnection + +TRUE = 1 +FALSE = 0 + +class CustomTable(QDataTable): + def __init__(self, cursor, autoPopulate = FALSE, parent = None, name = None): + QDataTable.__init__(self, cursor, autoPopulate, parent, name) + + def paintField(self, p, field, cr, b): + if not field: + return + fn = str(field.name()) + if fn == "pricesid": + query = QSqlQuery("SELECT name FROM prices WHERE id=%s" % + field.value().toString()) + value = "" + if query.next(): + value = query.value(0).toString() + p.drawText(2, 2, cr.width()-4, cr.height()-4, + self.fieldAlignment(field), value) + elif fn == "quantity": + p.drawText(2, 2, cr.width()-6, cr.height()-4, + Qt.AlignRight|Qt.AlignVCenter, field.value().toString()) + elif fn in ("price", "cost"): + v = field.value().toDouble() + if v < 0: + p.setPen(QColor("red")) + value = QString(u"%.2f \u20ac" % v) + p.drawText(2, 2, cr.width()-6, cr.height()-4, + Qt.AlignRight|Qt.AlignVCenter, value) + elif fn == "paiddate": + if field.value().toDate().isNull(): + v = QString("not yet") + p.setPen(QColor("red")) + else: + v = field.value().toDate().toString(Qt.LocalDate) + p.drawText(2, 2, cr.width()-4, cr.height()-4, + Qt.AlignHCenter|Qt.AlignVCenter, v) + else: + QDataTable.paintField(self, p, field, cr, b) + + +class InvoiceItemCursor(QSqlCursor): + def __init__(self): + QSqlCursor.__init__(self, "invoiceitem") + + productPrice = QSqlFieldInfo("price", QVariant.Double) + self.append(productPrice) + self.setCalculated(productPrice.name(), TRUE) + + productCost = QSqlFieldInfo("cost", QVariant.Double) + self.append(productCost) + self.setCalculated(productCost.name(), TRUE) + + def calculateField(self, name): + fn = str(name) + if fn == "productname": + query = QSqlQuery("SELECT name FROM prices WHERE id=%d;" % + (self.field("pricesid").value().toInt())) + if query.next(): + return query.value(0) + elif fn == "price": + query = QSqlQuery("SELECT price FROM prices WHERE id=%d;" % + (self.field("pricesid").value().toInt())) + if query.next(): + return query.value(0) + elif fn == "cost": + query = QSqlQuery("SELECT price FROM prices WHERE id=%d;" % + (self.field("pricesid").value().toInt())) + if query.next(): + return QVariant(query.value(0).toDouble() * + self.value("quantity").toDouble()) + return QVariant(QString.null) + + def primeInsert(self): + buffer = self.editBuffer() + buffer.setValue("id", QVariant(0)) + buffer.setValue("paiddate", QVariant(QDate.currentDate())) + buffer.setValue("quantity", QVariant(1)) + return buffer + + +class ProductPicker(QComboBox): + def __init__(self, parent = None, name = None): + QComboBox.__init__(self, parent, name) + cur = QSqlCursor("prices") + cur.select(cur.index("id")) + while cur.next(): + self.insertItem(cur.value("name").toString(), cur.value("id").toInt()) + + +class CustomSqlEditorFactory(QSqlEditorFactory): + def __init__(self): + QSqlEditorFactory.__init__(self) + + def createEditor(self, parent, field): + try: + if str(field.name()) == "pricesid": + return ProductPicker(parent) + except AttributeError: + pass + return QSqlEditorFactory.createEditor(self, parent, field) + +class Table(CustomTable): + def __init__(self): + self.invoiceItemCursor = InvoiceItemCursor() + QDataTable.__init__(self, self.invoiceItemCursor) + self.propMap = QSqlPropertyMap() + self.editorFactory = CustomSqlEditorFactory() + self.propMap.insert("ProductPicker", "pricesid") + self.installPropertyMap(self.propMap) + self.installEditorFactory(self.editorFactory) + + for cn, ch in (("pricesid", "Product"), + ("quantity", "Quantity"), + ("price", "Price" ), + ("cost", "Cost"), + ("paiddate", "Paid")): + self.addColumn(cn, ch) + self.setColumnWidth(0 , 150) + self.setColumnWidth(1, 70) + self.resize(600, 250) + self.refresh() + + +if __name__=='__main__': + app = QApplication(sys.argv) + if createConnection(): + t = Table() + app.setMainWidget(t) + t.show() + app.exec_loop() + + diff --git a/examples3/SQL/sqltable4.py b/examples3/SQL/sqltable4.py new file mode 100755 index 0000000..8f488d3 --- /dev/null +++ b/examples3/SQL/sqltable4.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python + +#**************************************************************************** +#** $Id: sqltable4.py,v 1.3 2002/07/06 13:35:41 phil Exp $ +#** +#** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved. +#** +#** This file is part of an example program for PyQt. This example +#** program may be used, distributed and modified without limitation. +#** +#*****************************************************************************/ + +import sys +from qt import * +from qtsql import * + +from dbconnect import createConnection + +TRUE = 1 +FALSE = 0 + +class CustomTable(QDataTable): + def __init__(self, cursor, autoPopulate = FALSE, parent = None, name = None): + QDataTable.__init__(self, cursor, autoPopulate, parent, name) + + def paintField(self, p, field, cr, b): + if not field: + return + fn = str(field.name()) + if fn in ("salary", "monsalary"): + v = field.value().toDouble() + if v < 0: + p.setPen(QColor("red")) + value = QString(u"%.2f \u20ac" % v) + #print unicode(value).encode("iso-8859-15") + p.drawText(2, 2, cr.width()-6, cr.height()-4, + Qt.AlignRight|Qt.AlignVCenter, value) + elif fn == "statusid": + query = QSqlQuery("SELECT name FROM status WHERE id=%s" % + field.value().toString()) + value = "" + if query.next(): + value = query.value(0).toString() + p.drawText(2, 2, cr.width()-4, cr.height()-4, + self.fieldAlignment(field), value) + else: + QDataTable.paintField(self, p, field, cr, b) + + +class StatusPicker(QComboBox): + def __init__(self, parent = None, name = None): + QComboBox.__init__(self, parent, name) + cur = QSqlCursor("status") + cur.select(cur.index("id")) + while cur.next(): + self.insertItem(cur.value("name").toString(), cur.value("id").toInt()) + + +class CustomSqlEditorFactory(QSqlEditorFactory): + def __init__(self): + QSqlEditorFactory.__init__(self) + + def createEditor(self, parent, field): + try: + if str(field.name()) == "statusid": + return StatusPicker(parent) + except AttributeError: + pass + return QSqlEditorFactory.createEditor(self, parent, field) + + +class StaffCursor(QSqlCursor): + def __init__(self): + QSqlCursor.__init__(self, "staff") + monSalary = QSqlFieldInfo("monsalary", QVariant.Double) + self.append(monSalary) + self.setCalculated(monSalary.name(), TRUE) + + def calculateField(self, name): + if str(name) == "monsalary": + return QVariant(self.value("salary").toDouble() / 12) + return QVariant(QString.null) + + +class Table(CustomTable): + def __init__(self): + #self.staffCursor = QSqlCursor("staff") + self.staffCursor = StaffCursor() + QDataTable.__init__(self, self.staffCursor) + self.propMap = QSqlPropertyMap() + self.editorFactory = CustomSqlEditorFactory() + self.propMap.insert("StatusPicker", "statusid") + self.installPropertyMap(self.propMap) + self.installEditorFactory(self.editorFactory) + for cn, ch in (("forename", "Forename"), + ("surname", "Surname" ), + ("salary", "Annual Salary"), + ("monsalary","Monthly Salary"), + ("statusid", "Status")): + self.addColumn(cn, ch) + self.order = QStringList("surname") + self.order.append("forename") + self.setSort(self.order) + self.refresh() + + +if __name__=='__main__': + app = QApplication(sys.argv) + #app.setFont(QFont("Verdana", 11)) + + if createConnection(): + t = Table() + app.setMainWidget(t) + t.resize(600, 250) + t.show() + app.exec_loop() + + diff --git a/examples3/SQL/testdb_mysql.sql b/examples3/SQL/testdb_mysql.sql new file mode 100644 index 0000000..144d4c9 --- /dev/null +++ b/examples3/SQL/testdb_mysql.sql @@ -0,0 +1,57 @@ +drop database testdb; +create database testdb; +use testdb; + +create table people (id integer primary key auto_increment, + name char(40)); + +create table staff (id integer primary key auto_increment, + forename char(40), + surname char(40), + salary float(10,2), + statusid integer); + +create table status (id integer primary key, + name char(30)); + +create table creditors (id integer primary key auto_increment, + forename char(40), + surname char(40), + city char(30)); + +create table prices (id integer primary key, + name char(40), + price float); + +create table invoiceitem (id integer primary key auto_increment, + pricesid integer, + quantity integer, + paiddate date); + +insert into staff (forename, surname, salary, statusid) values + ("Hugo", "Hurtig", 123450.50, 0), + ("Alfred E.", "Neumann", 56780.90, 1), + ("Agate", "Schnell-Fertig", 12340.56, 2), + ("Emil", "Dotterschreck", -5670.23, 3), + ("Eugen", "Nutzlos", -7833.56, 3), + ("Harald", "Schmidt", -150000.0, 3), + ("Urmel", "auf dem Eis", 7778.0, 2); + +insert into status (id, name) values + (0, 'Chief'), + (1, 'Programmer'), + (2, 'Secretary'), + (3, 'Driver'); + +insert into prices (id, name, price) values + (0, "Waschbecken", 150.25), + (1, "Wellensittich", 27.95), + (2, "Roter Papagei", 850.0), + (3, "Spam & Eggs", -7.50), + (4, "Renault Espace", 9000.0), + (5, "Tux, der Pinguin", 65.35), + (6, "Makroskop", 985000.0), + (7, "Regenbaum", 1235.65), + (8, "Bluterguß", 23.95), + (9, "Weltmeisterschaft", 2.95), + (10, "Premiere Dekoder", -185.75); diff --git a/examples3/SQL/testdb_pg.sql b/examples3/SQL/testdb_pg.sql new file mode 100644 index 0000000..73a4270 --- /dev/null +++ b/examples3/SQL/testdb_pg.sql @@ -0,0 +1,232 @@ +-- +-- Selected TOC Entries: +-- +-- +-- TOC Entry ID 1 (OID 0) +-- +-- Name: testdb Type: DATABASE Owner: postgres +-- + +CREATE DATABASE "testdb"; + +\connect testdb postgres +-- +-- TOC Entry ID 16 (OID 17332) +-- +-- Name: people Type: TABLE Owner: postgres +-- + +CREATE TABLE "people" ( + "id" integer DEFAULT nextval('people_id_seq'::text) NOT NULL, + "name" character(40), + Constraint "people_pkey" Primary Key ("id") +); + +-- +-- TOC Entry ID 17 (OID 17335) +-- +-- Name: staff Type: TABLE Owner: postgres +-- + +CREATE TABLE "staff" ( + "id" integer DEFAULT nextval('staff_id_seq'::text) NOT NULL, + "forename" character(40), + "surname" character(40), + "salary" money, + "statusid" integer, + Constraint "staff_pkey" Primary Key ("id") +); + +-- +-- TOC Entry ID 18 (OID 17338) +-- +-- Name: status Type: TABLE Owner: postgres +-- + +CREATE TABLE "status" ( + "id" integer NOT NULL, + "name" character(30), + Constraint "status_pkey" Primary Key ("id") +); + +-- +-- TOC Entry ID 19 (OID 17341) +-- +-- Name: creditors Type: TABLE Owner: postgres +-- + +CREATE TABLE "creditors" ( + "id" integer DEFAULT nextval('creditors_id_seq'::text) NOT NULL, + "forename" character(40), + "surname" character(40), + "city" character(30), + Constraint "creditors_pkey" Primary Key ("id") +); + +-- +-- TOC Entry ID 20 (OID 17344) +-- +-- Name: prices Type: TABLE Owner: postgres +-- + +CREATE TABLE "prices" ( + "id" integer NOT NULL, + "name" character(40), + "price" real, + Constraint "prices_pkey" Primary Key ("id") +); + +-- +-- TOC Entry ID 21 (OID 17347) +-- +-- Name: invoiceitem Type: TABLE Owner: postgres +-- + +CREATE TABLE "invoiceitem" ( + "id" integer DEFAULT nextval('invoice_id_seq'::text) NOT NULL, + "pricesid" integer, + "quantity" integer, + "paiddate" date, + Constraint "invoiceitem_pkey" Primary Key ("id") +); + +-- +-- TOC Entry ID 2 (OID 17351) +-- +-- Name: people_id_seq Type: SEQUENCE Owner: postgres +-- + +CREATE SEQUENCE "people_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1 cache 1; + +-- +-- TOC Entry ID 4 (OID 17353) +-- +-- Name: staff_id_seq Type: SEQUENCE Owner: postgres +-- + +CREATE SEQUENCE "staff_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1 cache 1; + +-- +-- TOC Entry ID 6 (OID 17355) +-- +-- Name: creditors_id_seq Type: SEQUENCE Owner: postgres +-- + +CREATE SEQUENCE "creditors_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1 cache 1; + +-- +-- TOC Entry ID 8 (OID 17357) +-- +-- Name: invoice_id_seq Type: SEQUENCE Owner: postgres +-- + +CREATE SEQUENCE "invoice_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1 cache 1; + +-- +-- Data for TOC Entry ID 28 (OID 17332) +-- +-- Name: people Type: TABLE DATA Owner: postgres +-- + + +COPY "people" FROM stdin; +\. +-- +-- Data for TOC Entry ID 29 (OID 17335) +-- +-- Name: staff Type: TABLE DATA Owner: postgres +-- + + +COPY "staff" FROM stdin; +1 Hugo Hurtig $123,450.50 0 +2 Alfred E. Neumann $56,780.90 1 +3 Agate Schnell-Fertig $12,340.56 2 +6 Eugen Nutzlos -$7,833.56 3 +7 Harald Schmidt -$150,000.00 3 +4 Urmel auf dem Eis $7,778.00 2 +5 Emil Dotterschreck -$5,670.23 3 +\. +-- +-- Data for TOC Entry ID 30 (OID 17338) +-- +-- Name: status Type: TABLE DATA Owner: postgres +-- + + +COPY "status" FROM stdin; +0 Chief +1 Programmer +2 Secretary +3 Driver +\. +-- +-- Data for TOC Entry ID 31 (OID 17341) +-- +-- Name: creditors Type: TABLE DATA Owner: postgres +-- + + +COPY "creditors" FROM stdin; +\. +-- +-- Data for TOC Entry ID 32 (OID 17344) +-- +-- Name: prices Type: TABLE DATA Owner: postgres +-- + + +COPY "prices" FROM stdin; +0 Waschbecken 150.25 +1 Wellensittich 27.95 +2 Roter Papagei 850 +3 Spam & Eggs -7.5 +4 Renault Espace 9000 +5 Tux, der Pinguin 65.35 +6 Makroskop 985000 +7 Regenbaum 1235.65 +8 Bluterguß 23.95 +9 Weltmeisterschaft 2.95 +10 Premiere Dekoder -185.75 +\. +-- +-- Data for TOC Entry ID 33 (OID 17347) +-- +-- Name: invoiceitem Type: TABLE DATA Owner: postgres +-- + + +COPY "invoiceitem" FROM stdin; +\. +-- +-- TOC Entry ID 3 (OID 17351) +-- +-- Name: people_id_seq Type: SEQUENCE SET Owner: postgres +-- + +SELECT setval ('"people_id_seq"', 1, false); + +-- +-- TOC Entry ID 5 (OID 17353) +-- +-- Name: staff_id_seq Type: SEQUENCE SET Owner: postgres +-- + +SELECT setval ('"staff_id_seq"', 8, true); + +-- +-- TOC Entry ID 7 (OID 17355) +-- +-- Name: creditors_id_seq Type: SEQUENCE SET Owner: postgres +-- + +SELECT setval ('"creditors_id_seq"', 1, false); + +-- +-- TOC Entry ID 9 (OID 17357) +-- +-- Name: invoice_id_seq Type: SEQUENCE SET Owner: postgres +-- + +SELECT setval ('"invoice_id_seq"', 1, false); + diff --git a/examples3/aclock.py b/examples3/aclock.py new file mode 100755 index 0000000..38ed36c --- /dev/null +++ b/examples3/aclock.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python + +import sys +from qt import * + +def QMIN(x, y): + if y > x: return y + return x +class AnalogClock(QWidget): + def __init__(self, *args): + apply(QWidget.__init__,(self,) + args) + self.time = QTime.currentTime() + internalTimer = QTimer(self) + self.connect(internalTimer, SIGNAL("timeout()"), self.timeout) + internalTimer.start(5000) + + def timeout(self): + new_time = QTime.currentTime() + if new_time.minute() != self.time.minute(): + self.update() + + def paintEvent(self, qe): + if not self.isVisible(): + return + self.time = QTime.currentTime() + + pts = QPointArray() + paint = QPainter(self) + paint.setBrush(self.foregroundColor()) + + cp = QPoint(self.rect().center()) + d = QMIN(self.width(), self.height()) + matrix = QWMatrix() + matrix.translate(cp.x(), cp.y()) + matrix.scale(d/1000.0, d/1000.0) + + h_angle = 30*(self.time.hour()%12 - 3) + self.time.minute()/2 + matrix.rotate(h_angle) + paint.setWorldMatrix(matrix) + pts.setPoints([-20,0,0,-20,300,0,0,20]) + paint.drawPolygon(pts) + matrix.rotate(-h_angle) + + m_angle = (self.time.minute()-15)*6 + matrix.rotate(m_angle) + paint.setWorldMatrix(matrix) + pts.setPoints([-10,0,0,-10,400,0,0,10]) + paint.drawPolygon(pts) + matrix.rotate(-m_angle) + + for i in range(0,12): + paint.setWorldMatrix(matrix) + paint.drawLine(450,0, 500,0) + matrix.rotate(30) + +a = QApplication(sys.argv) +clock = AnalogClock() +clock.resize(100,100) +a.setMainWidget(clock) +clock.show() +a.exec_loop() diff --git a/examples3/addressbook.py b/examples3/addressbook.py new file mode 100755 index 0000000..d7316e3 --- /dev/null +++ b/examples3/addressbook.py @@ -0,0 +1,457 @@ +#!/usr/bin/env python + +# A port to PyQt of the application example from Qt v2.x. + + +import sys, string +from qt import * + +TRUE = 1 +FALSE = 0 +fileopen = [ +' 16 13 5 1', +'. c #040404', +'# c #808304', +'a c None', +'b c #f3f704', +'c c #f3f7f3', +'aaaaaaaaa...aaaa', +'aaaaaaaa.aaa.a.a', +'aaaaaaaaaaaaa..a', +'a...aaaaaaaa...a', +'.bcb.......aaaaa', +'.cbcbcbcbc.aaaaa', +'.bcbcbcbcb.aaaaa', +'.cbcb...........', +'.bcb.#########.a', +'.cb.#########.aa', +'.b.#########.aaa', +'..#########.aaaa', +'...........aaaaa' +] + +filesave = [ +' 14 14 4 1', +'. c #040404', +'# c #808304', +'a c #bfc2bf', +'b c None', +'..............', +'.#.aaaaaaaa.a.', +'.#.aaaaaaaa...', +'.#.aaaaaaaa.#.', +'.#.aaaaaaaa.#.', +'.#.aaaaaaaa.#.', +'.#.aaaaaaaa.#.', +'.##........##.', +'.############.', +'.##.........#.', +'.##......aa.#.', +'.##......aa.#.', +'.##......aa.#.', +'b.............' +] + +fileprint = [ +' 16 14 6 1', +'. c #000000', +'# c #848284', +'a c #c6c3c6', +'b c #ffff00', +'c c #ffffff', +'d c None', +'ddddd.........dd', +'dddd.cccccccc.dd', +'dddd.c.....c.ddd', +'ddd.cccccccc.ddd', +'ddd.c.....c....d', +'dd.cccccccc.a.a.', +'d..........a.a..', +'.aaaaaaaaaa.a.a.', +'.............aa.', +'.aaaaaa###aa.a.d', +'.aaaaaabbbaa...d', +'.............a.d', +'d.aaaaaaaaa.a.dd', +'dd...........ddd' +] + +class ABCentralWidget( QWidget ): + def __init__( self, *args ): + apply( QWidget.__init__, (self, ) + args ) + self.mainGrid = QGridLayout( self, 2, 1, 5, 5 ) + + self.setupTabWidget() + self.setupListView() + + self.mainGrid.setRowStretch( 0, 0 ) + self.mainGrid.setRowStretch( 1, 1 ) + + def save( self, filename ): + if not self.listView.firstChild(): + return + + f = QFile( filename ) + if not f.open( IO_WriteOnly ): + return + + t = QTextStream( f ) + + #it = QListViewItemIterator( self.listView ) + + while not t.eof(): + item = QListViewItem( self.listView ) + for i in range (0, 4): + t << item.text( i ) << '\n' + #for it in it.current(): + #for i in range (0, 4): + #t << it.current().text[ i ] << "\n" + + f.close() + + + def load( self, filename ): + self.listView.clear() + + f = QFile( filename ) + if not f.open( IO_ReadOnly ): + return + + t = QTextStream( f ) + + while not t.eof(): + item = QListViewItem( self.listView ) + for i in range (0, 4): + item.setText( i, t.readLine() ) + + f.close(); + + + def setupTabWidget( self ): + self.tabWidget = QTabWidget( self ) + + self.input = QWidget( self.tabWidget ) + self.grid1 = QGridLayout( self.input, 2, 5, 5, 5 ) + + self.liFirstName = QLabel( 'First &Name', self.input ) + self.liFirstName.resize( self.liFirstName.sizeHint() ) + self.grid1.addWidget( self.liFirstName, 0, 0 ) + + self.liLastName = QLabel( '&Last Name', self.input ) + self.liLastName.resize( self.liLastName.sizeHint() ) + self.grid1.addWidget( self.liLastName, 0, 1 ) + + self.liAddress = QLabel( '&Address', self.input ) + self.liAddress.resize( self.liAddress.sizeHint() ) + self.grid1.addWidget( self.liAddress, 0, 2 ) + + self.liEMail = QLabel( '&E-Mail', self.input ) + self.liEMail.resize( self.liEMail.sizeHint() ) + self.grid1.addWidget( self.liEMail, 0, 3 ) + + self.add = QPushButton( '&Add', self.input ) + self.add.resize( self.add.sizeHint() ) + self.grid1.addWidget( self.add, 0, 4 ) + self.connect( self.add, SIGNAL( 'clicked()' ), self.addEntry ) + + self.iFirstName = QLineEdit( self.input ) + self.iFirstName.resize( self.iFirstName.sizeHint() ) + self.grid1.addWidget( self.iFirstName, 1, 0 ) + self.liFirstName.setBuddy( self.iFirstName ) + + self.iLastName = QLineEdit( self.input ) + self.iLastName.resize( self.iLastName.sizeHint() ) + self.grid1.addWidget( self.iLastName, 1, 1 ) + self.liLastName.setBuddy( self.iLastName ) + + self.iAddress = QLineEdit( self.input ) + self.iAddress.resize( self.iAddress.sizeHint() ) + self.grid1.addWidget( self.iAddress, 1, 2 ) + self.liAddress.setBuddy( self.iAddress ) + + self.iEMail = QLineEdit( self.input ) + self.iEMail.resize( self.iEMail.sizeHint() ) + self.grid1.addWidget( self.iEMail, 1, 3 ) + self.liEMail.setBuddy( self.iEMail ) + + self.change = QPushButton( '&Change', self.input ) + self.change.resize( self.change.sizeHint() ) + self.grid1.addWidget( self.change, 1, 4 ) + self.connect( self.change, SIGNAL( 'clicked()' ), self.changeEntry ) + + self.tabWidget.addTab( self.input, '&Add/Change Entry' ) + + # -------------------------------------- + + self.search = QWidget( self ) + self.grid2 = QGridLayout( self.search, 2, 5, 5, 5 ) + + self.cFirstName = QCheckBox( 'First &Name', self.search ) + self.cFirstName.resize( self.cFirstName.sizeHint() ) + self.grid2.addWidget( self.cFirstName, 0, 0 ) + self.connect( self.cFirstName, SIGNAL( 'clicked()' ), self.toggleFirstName ) + + self.cLastName = QCheckBox( '&Last Name', self.search ) + self.cLastName.resize( self.cLastName.sizeHint() ) + self.grid2.addWidget( self.cLastName, 0, 1 ) + self.connect( self.cLastName, SIGNAL( 'clicked()' ), self.toggleLastName ) + + self.cAddress = QCheckBox( '&Address', self.search ) + self.cAddress.resize( self.cAddress.sizeHint() ) + self.grid2.addWidget( self.cAddress, 0, 2 ) + self.connect( self.cAddress, SIGNAL( 'clicked()' ), self.toggleAddress ) + + self.cEMail = QCheckBox( '&E-Mail', self.search ) + self.cEMail.resize( self.cEMail.sizeHint() ) + self.grid2.addWidget( self.cEMail, 0, 3 ) + self.connect( self.cEMail, SIGNAL( 'clicked()' ), self.toggleEMail ) + + self.sFirstName = QLineEdit( self.search ) + self.sFirstName.resize( self.sFirstName.sizeHint() ) + self.grid2.addWidget( self.sFirstName, 1, 0 ) + + self.sLastName = QLineEdit( self.search ) + self.sLastName.resize( self.sLastName.sizeHint() ) + self.grid2.addWidget( self.sLastName, 1, 1 ) + + self.sAddress = QLineEdit( self.search ) + self.sAddress.resize( self.sAddress.sizeHint() ) + self.grid2.addWidget( self.sAddress, 1, 2 ) + + self.sEMail = QLineEdit( self.search ) + self.sEMail.resize( self.sEMail.sizeHint() ) + self.grid2.addWidget( self.sEMail, 1, 3 ) + + self.find = QPushButton( '&Find', self.search ) + self.find.resize( self.find.sizeHint() ) + self.grid2.addWidget( self.find, 1, 4 ) + self.connect( self.find, SIGNAL( 'clicked()' ), self.findEntries ) + + self.cFirstName.setChecked( TRUE ) + self.sFirstName.setEnabled( TRUE ) + self.sLastName.setEnabled( FALSE ) + self.sAddress.setEnabled( FALSE ) + self.sEMail.setEnabled( FALSE ) + + self.tabWidget.addTab( self.search, "&Search" ) + + self.mainGrid.addWidget( self.tabWidget, 0, 0 ) + + def setupListView( self ): + self.listView = QListView( self ) + self.listView.addColumn( 'First Name' ) + self.listView.addColumn( 'Last Name' ) + self.listView.addColumn( 'Address' ) + self.listView.addColumn( 'E-Mail' ) + + self.listView.setSelectionMode( QListView.Extended ) + + self.connect( self.listView, SIGNAL( 'clicked( QListViewItem* )' ), self.itemSelected ) + + self.mainGrid.addWidget( self.listView, 1, 0 ) + self.listView.setAllColumnsShowFocus( TRUE ) + + + def addEntry( self ): + if not self.iFirstName.text().isEmpty() or not self.iLastName.text().isEmpty() or \ + not self.iAddress.text().isEmpty() or not self.iEMail.text().isEmpty() : + self.item = QListViewItem( self.listView ) + self.item.setText( 0, self.iFirstName.text() ) + self.item.setText( 1, self.iLastName.text() ) + self.item.setText( 2, self.iAddress.text() ) + self.item.setText( 3, self.iEMail.text() ) + + self.iFirstName.setText( '' ) + self.iLastName.setText( '' ) + self.iAddress.setText( '' ) + self.iEMail.setText( '' ) + + def changeEntry( self ): + self.item = self.listView.currentItem() + if self.item and ( not self.iFirstName.text().isEmpty() or not self.iLastName.text().isEmpty() or \ + not self.iAddress.text().isEmpty() or not self.iEMail.text().isEmpty() ) : + self.item.setText( 0, self.iFirstName.text() ) + self.item.setText( 1, self.iLastName.text() ) + self.item.setText( 2, self.iAddress.text() ) + self.item.setText( 3, self.iEMail.text() ) + + def selectionChanged( self ): + self.iFirstName.setText( '' ) + self.iLastName.setText( '' ) + self.iAddress.setText( '' ) + self.iEMail.setText( '' ) + + def itemSelected( self, item ): + self.item.setSelected( TRUE ) + self.item.repaint() + + self.iFirstName.setText( item.text( 0 ) ) + self.iLastName.setText( item.text( 1 ) ) + self.iAddress.setText( item.text( 2 ) ) + self.iEMail.setText( item.text( 3 ) ) + + def toggleFirstName( self ): + self.sFirstName.setText( '' ) + if self.cFirstName.isChecked(): + self.sFirstName.setEnabled( TRUE ) + self.sFirstName.setFocus() + else: + self.sFirstName.setEnabled( FALSE ) + + def toggleLastName( self ): + self.sLastName.setText( '' ) + if self.cLastName.isChecked(): + self.sLastName.setEnabled( TRUE ) + self.sLastName.setFocus() + else: + self.sLastName.setEnabled( FALSE ) + + + def toggleAddress( self ): + self.sAddress.setText( '' ) + if self.cAddress.isChecked(): + self.sAddress.setEnabled( TRUE ) + self.sAddress.setFocus() + else: + self.sAddress.setEnabled( FALSE ) + + + def toggleEMail( self ): + self.sEMail.setText( '' ) + if self.cEMail.isChecked(): + self.sEMail.setEnabled( TRUE ) + self.sEMail.setFocus() + + else: + self.sEMail.setEnabled( FALSE ) + + + def findEntries( self ): + if not self.cFirstName.isChecked() and not self.cLastName.isChecked() and \ + not self.cAddress.isChecked() and not self.cEMail.isChecked(): + self.listView.clearSelection() + return + + it = QListViewItemIterator( self.listView ) + + for it in it.current() : + select = TRUE + + if self.cFirstName.isChecked(): + if select and it.current().text( 0 ).contains( self.sFirstName.text() ): + select = TRUE + else: + select = FALSE + + if self.cLastName.isChecked(): + if select and it.current().text( 1 ).contains( self.sLastName.text() ): + select = TRUE + else: + select = FALSE + + if self.cAddress.isChecked(): + if select and it.current().text( 2 ).contains( self.sAddress.text() ): + select = TRUE + else: + select = FALSE + + if self.cEMail.isChecked(): + if select and it.current().text( 3 ).contains( self.sEMail.text() ): + select = TRUE + else: + select = FALSE + + + if select: + it.current().setSelected( TRUE ) + else: + it.current().setSelected( FALSE ) + it.current().repaint() + + +class ABMainWindow(QMainWindow): + def __init__( self ): + QMainWindow.__init__( self, None, 'example addressbook application' ) + + self.filename = QString.null + self.setupMenuBar() + self.setupFileTools() + self.setupStatusBar() + self.setupCentralWidget() + + def setupMenuBar( self ): + self.file = QPopupMenu( self ) + self.menuBar().insertItem( '&File', self.file ) + + openIcon = QIconSet( QPixmap( fileopen ) ) + self.file.insertItem( 'New', self.fileNew, Qt.CTRL + Qt.Key_N ) + self.file.insertItem( openIcon, 'Open', self.fileOpen, Qt.CTRL + Qt.Key_O ) + self.file.insertSeparator() + saveIcon = QIconSet( QPixmap( filesave ) ) + self.file.insertItem( saveIcon, 'Save', self.fileSave, Qt.CTRL + Qt.Key_S ) + self.file.insertItem( 'Save As...', self.fileSaveAs ) + self.file.insertSeparator() + printIcon = QIconSet( QPixmap( fileprint ) ) + self.file.insertItem( printIcon, 'Print...', self.filePrint, Qt.CTRL + Qt.Key_P ) + self.file.insertSeparator() + #self.file.insertItem( 'Close', self.closeWindow, Qt.CTRL + Qt.Key_W ) + self.file.insertItem('Close', self, SLOT('close()'), Qt.CTRL+Qt.Key_W) + self.file.insertItem( 'Quit', qApp, SLOT( 'quit()' ), Qt.CTRL + Qt.Key_Q ) + + def setupFileTools( self ): + pass + #self.fileTools = QToolBar( self, 'file operations' ) + + def setupStatusBar( self ): + self.statusBar().message( "Ready", 2000 ) + + def setupCentralWidget( self ): + self.view = ABCentralWidget( self ) + #self.view.show() + self.setCentralWidget( self.view ) + + def closeWindow( self ): + close() + + + def fileNew( self ): + pass + + def fileOpen( self ): + fn = QFileDialog.getOpenFileName( QString.null, QString.null, self ) + if not fn.isEmpty(): + self.filename = fn + self.view.load( self.filename ) + + def fileSave( self ): + if self.filename.isEmpty(): + self.fileSaveAs() + return + + self.view.save( self.filename ) + + def fileSaveAs( self ): + fn = QFileDialog.getSaveFileName( QString.null, QString.null, self ) + if not fn.isEmpty(): + self.filename = fn + self.fileSave + + def filePrint( self ): + pass + + +a = QApplication( sys.argv ) + +mw = ABMainWindow() +#mw.setupMenuBar() +#mw.setupFileTools +#mw.setupStatusBar +#mw.setupCentralWidget +#view = ABCentralWidget() +#mw.setCentralWidget( view ) +mw.setCaption( 'Addressbook 1' ) +a.setMainWidget( mw ) +mw.show() + +a.connect( a, SIGNAL( 'lastWindowClosed()' ), a, SLOT( 'quit()' ) ) +a.exec_loop() diff --git a/examples3/application.py b/examples3/application.py new file mode 100755 index 0000000..f5c027d --- /dev/null +++ b/examples3/application.py @@ -0,0 +1,277 @@ +#!/usr/bin/env python + +# A simple application. + + +import sys, string +from qt import * + + +fileopen = [ + '16 13 5 1', + '. c #040404', + '# c #808304', + 'a c None', + 'b c #f3f704', + 'c c #f3f7f3', + 'aaaaaaaaa...aaaa', + 'aaaaaaaa.aaa.a.a', + 'aaaaaaaaaaaaa..a', + 'a...aaaaaaaa...a', + '.bcb.......aaaaa', + '.cbcbcbcbc.aaaaa', + '.bcbcbcbcb.aaaaa', + '.cbcb...........', + '.bcb.#########.a', + '.cb.#########.aa', + '.b.#########.aaa', + '..#########.aaaa', + '...........aaaaa' +] + +filesave = [ + '14 14 4 1', + '. c #040404', + '# c #808304', + 'a c #bfc2bf', + 'b c None', + '..............', + '.#.aaaaaaaa.a.', + '.#.aaaaaaaa...', + '.#.aaaaaaaa.#.', + '.#.aaaaaaaa.#.', + '.#.aaaaaaaa.#.', + '.#.aaaaaaaa.#.', + '.##........##.', + '.############.', + '.##.........#.', + '.##......aa.#.', + '.##......aa.#.', + '.##......aa.#.', + 'b.............' +] + +fileprint = [ + '16 14 6 1', + '. c #000000', + '# c #848284', + 'a c #c6c3c6', + 'b c #ffff00', + 'c c #ffffff', + 'd c None', + 'ddddd.........dd', + 'dddd.cccccccc.dd', + 'dddd.c.....c.ddd', + 'ddd.cccccccc.ddd', + 'ddd.c.....c....d', + 'dd.cccccccc.a.a.', + 'd..........a.a..', + '.aaaaaaaaaa.a.a.', + '.............aa.', + '.aaaaaa###aa.a.d', + '.aaaaaabbbaa...d', + '.............a.d', + 'd.aaaaaaaaa.a.dd', + 'dd...........ddd' +] + + +fileOpenText = \ +''' +Click this button to open a new file.

+You can also select the Open command from the File menu.''' + +fileSaveText = \ +'''Click this button to save the file you are editing.

+You will be prompted for a filename.

+You can also select the Save command from the File menu.''' + +filePrintText = \ +'''Click this button to print the file you are editing.

+You can also select the Print command from the File menu.''' + + +editorList = [] + + +class ApplicationWindow(QMainWindow): + def __init__(self): + QMainWindow.__init__(self,None,'example application main window',Qt.WDestructiveClose) + + self.filename = QString.null + self.printer = QPrinter() + + self.fileTools = QToolBar(self,'file operations') + + openIcon = QPixmap(fileopen) + self.fileOpen = QToolButton(QIconSet(openIcon),'Open File',QString.null,self.load,self.fileTools,'open file') + + saveIcon = QPixmap(filesave) + self.fileSave = QToolButton(QIconSet(saveIcon),'Save File',QString.null,self.save,self.fileTools,'save file') + + printIcon = QPixmap(fileprint) + self.filePrint = QToolButton(QIconSet(printIcon),'Print File',QString.null,self.printDoc,self.fileTools,'print file') + + QWhatsThis.whatsThisButton(self.fileTools) + + QWhatsThis.add(self.fileOpen,fileOpenText) + QMimeSourceFactory.defaultFactory().setPixmap('fileopen',openIcon) + QWhatsThis.add(self.fileSave,fileSaveText) + QWhatsThis.add(self.filePrint,filePrintText) + + self.file = QPopupMenu(self) + self.menuBar().insertItem('&File',self.file) + + self.file.insertItem('&New',self.newDoc,Qt.CTRL + Qt.Key_N) + + id = self.file.insertItem(QIconSet(openIcon),'&Open',self.load,Qt.CTRL + Qt.Key_O) + self.file.setWhatsThis(id,fileOpenText) + + id = self.file.insertItem(QIconSet(saveIcon),'&Save',self.save,Qt.CTRL + Qt.Key_S) + self.file.setWhatsThis(id,fileSaveText) + + id = self.file.insertItem('Save &as',self.saveAs) + self.file.setWhatsThis(id,fileSaveText) + + self.file.insertSeparator() + + id = self.file.insertItem(QIconSet(printIcon),'&Print',self.printDoc,Qt.CTRL + Qt.Key_P) + self.file.setWhatsThis(id,filePrintText) + + self.file.insertSeparator() + + self.file.insertItem('&Close',self,SLOT('close()'),Qt.CTRL + Qt.Key_W) + self.file.insertItem('&Quit',qApp,SLOT('closeAllWindows()'),Qt.CTRL + Qt.Key_Q) + + self.help = QPopupMenu(self) + self.menuBar().insertSeparator() + self.menuBar().insertItem('&Help',self.help) + + self.help.insertItem('&About',self.about,Qt.Key_F1) + self.help.insertItem('About &Qt',self.aboutQt) + + self.e = QMultiLineEdit(self,'editor') + self.e.setFocus() + self.setCentralWidget(self.e) + + self.statusBar().message('Ready',2000) + self.resize(450,600) + + def newDoc(self): + ed = ApplicationWindow() + ed.show() + editorList.append(ed) + + def load(self): + fn = QFileDialog.getOpenFileName(QString.null,QString.null,self) + if fn.isEmpty(): + self.statusBar().message('Loading aborted',2000) + return + + fileName = str(fn) + + self.e.setAutoUpdate(0) + self.e.clear() + + try: + f = open(fileName,'r') + except: + return + + for l in f.readlines(): + self.e.append(string.rstrip(l)) + + f.close() + + self.e.setAutoUpdate(1) + self.e.repaint() + self.e.setEdited(0) + self.setCaption(fileName) + self.statusBar().message('Loaded document %s' % (fileName),2000) + + def save(self): + if self.filename.isEmpty(): + self.saveAs() + return + + try: + f = open(str(self.filename),'w+') + except: + self.statusBar().message('Could not write to %s' % (self.filename),2000) + return + + f.write(str(self.e.text())) + f.close() + + self.e.setEdited(0) + self.setCaption(self.filename) + self.statusBar().message('File %s saved' % (self.filename),2000) + + def saveAs(self): + fn = QFileDialog.getSaveFileName(QString.null,QString.null,self) + if not fn.isEmpty(): + self.filename = fn + self.save() + else: + self.statusBar().message('Saving aborted',2000) + + def printDoc(self): + Margin = 10 + pageNo = 1 + + if self.printer.setup(self): + self.statusBar().message('Printing...') + + p = QPainter() + p.begin(self.printer) + p.setFont(self.e.font()) + yPos = 0 + fm = p.fontMetrics() + metrics = QPaintDeviceMetrics(self.printer) + + for i in range(self.e.numLines): + if Margin + yPos > metrics.height() - Margin: + pageNo = pageNo + 1 + self.statusBar().message('Printing (page %d)...' % (pageNo)) + self.printer.newPage() + yPos = 0 + + p.drawText(Margin,Margin + yPos,metrics.width(),fm.lineSpacing(),Qt.ExpandTabs | Qt.DontClip,self.e.textLine(i)) + yPos = yPos + fm.lineSpacing() + + p.end() + self.statusBar().message('Printing completed',2000) + else: + self.statusBar().message('Printing aborted',2000) + + def closeEvent(self,ce): + if not self.e.edited(): + ce.accept() + return + + rc = QMessageBox.information(self,'Qt Application Example', + 'The document has been changed since the last save.', + 'Save Now','Cancel','Leave Anyway',0,1) + + if rc == 0: + self.save() + ce.accept() + elif rc == 2: + ce.accept() + else: + ce.ignore() + + def about(self): + QMessageBox.about(self,'Qt Application Example', + 'This example demonstrates simple use of QMainWindow,\nQMenuBar and QToolBar.') + + def aboutQt(self): + QMessageBox.aboutQt(self,'Qt Application Example') + + +a = QApplication(sys.argv) +mw = ApplicationWindow() +mw.setCaption('Document 1') +mw.show() +a.connect(a, SIGNAL('lastWindowClosed()'), a, SLOT('quit()')) +a.exec_loop() diff --git a/examples3/biff.py b/examples3/biff.py new file mode 100755 index 0000000..ee5bfe3 --- /dev/null +++ b/examples3/biff.py @@ -0,0 +1,173 @@ +#!/usr/bin/env python + +import os, sys, string +from qt import * + + +if QT_VERSION < 0x030100: + print "This example requires Qt v3.1.0 or later." + sys.exit(1) + + +FALSE = 0 +TRUE = 1 + +hasmail_bmp_data = [ +"48 48 3 1", +" c None", +". c #000000", +"+ c #FFFFFF", +"................................................", +".............................++++++++++.........", +".............................++++++++++.........", +"........................++++.+++.+.+.++.........", +"......................++++.++++.+.+.+++.........", +".....................+++.....+++.+.+.++.........", +"....................++.......++.+.+.+++.........", +"...................++........++++++++++.........", +"..................++.........++++++++++.........", +".................++..........+++..+.............", +"................++...........+++..+.............", +"...............++............+++.++.............", +"..............+++++++........++++++.............", +".............++++++++++......++++++.............", +"............+++......+++.....++++.+.............", +"...........+++.........++....+++..+.............", +"...........++..........++...++++..+.............", +"..........++............++.+++++..+.............", +"..........++............++++++++..+.............", +".........++....++++++....+++.+++..+.............", +".........++......++......++..+++..+.............", +".........++..............++..+++..+.............", +".........++..............++..+++..+.............", +".........++..............++..++...+.............", +"+++++++..++.+.+..+..+.+..++.......+..+++++++++++", +".........++.+++.+.+.+.+..++.......+.............", +".........++.+.+.+++.+.+..++.......+.............", +".........++.+.+.+.+.+.+..++......++.............", +".........++.+.+.+.+.+.++.++.....++..............", +".........++..............++....++...............", +"..+.+.+..++..............++...++..+.+.+.+.+.+.+.", +".+.+.+.+.++..............++..++..+.+.+.+.+.+.+..", +"..+.+.+..++..............++.++..+.+.+.+.+.+.+.+.", +".+.+.+.+.++..............+++++.+.+.+.+.+.+.+.+..", +"..+.+.+..+++++++++++++++++++.++.+.+.+.+.+.+.+.+.", +".+.+.+.+..+++++++++++++++++..+.+.+.+.+.+.+.+.+..", +"..+.+.+.+..........+...+.....++.+.+.+.+.+.+.+.+.", +".+.+.+.+.+.+.+.+.+.+...+.....+.+.+.+.+.+.+.+.+..", +"..+.+.+.+.+.+.+.+.++...+.....++.+.+.+.+.+.+.+.+.", +".+.+.+.+.+.+.+.+.+.+...+.....+.+.+.+.+.+.+.+.+..", +"..+.+.+.+.+.+.+.+.++...+.....++.+.+.+.+.+.+.+.+.", +".+.+.+.+.+.+.+.+.+.+...+.....+.+.+.+.+.+.+.+.+..", +"..+.+.+.+.+.+.+.+.++...+....+.+.+.+.+.+.+.+.+.+.", +".+.+.+.+.+.+.+.+.+.+...+...+.+.+.+.+.+.+.+.+.+..", +"..+.+.+.+.+.+.+.+.+.+..+..+.+.+.+.+.+.+.+.+.+.+.", +".+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+..", +"..+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+...", +"................................................" +] + +nomail_bmp_data = [ +"48 48 3 1", +" c None", +". c #FFFFFF", +"+ c #000000", +"................................................", +"................................................", +"................................................", +".........................++++...................", +".......................++++++++.................", +".....................++++....+++................", +"....................+++........++...............", +"...................++...........++..............", +"..................++............++..............", +".................++..............++.......+.....", +"................++...............++......++.....", +"...............++................++.....+++.....", +"..............+++++++...........+++....++++.....", +".............++++++++++........++++...+++++.....", +"............+++......+++......+++.+..++++++.....", +"...........+++.........++....+++..+.+++.+++.....", +"...........++..........++...+++...++++..+++.....", +"..........++............++.+++...++++...++......", +"..........++............+++++...++++............", +".........++....++++++....+++...++++.............", +".........++......++......++...+++.+.............", +".........++..............++...+++.+.............", +".........++..............++...++..+.............", +".........++..............++.......+.............", +"+++++++..++..............++.......+..+++++++++++", +".........++..............++.......+.............", +".........++..............++.......+.............", +".........++..............++......++.............", +".........++..............++.....++..............", +".........++..............++....++...............", +".........++..............++...++................", +".........++..............++..++.................", +".........++..............++.++..................", +".........++..............+++++..................", +".........+++++++++++++++++++.+..................", +"..........+++++++++++++++++..+..................", +"...................+...+.....+..................", +"...................+...+.....+..................", +"...................+...+.....+..................", +"...................+...+.....+..................", +"...................+...+.....+..................", +"...................+...+.....+..................", +"...................+...+.....+..................", +"...................+...+.....+..................", +"+++.++++++++++.+.+++...+..+++++++++++.++...+++++", +"+.+++..+++.+.+++++.++..+.++.+++..+..+.++.+.++++.", +".++...+.....++...+...+++++++....+....++++++...+.", +"++++++++++++++++++++++++++++++++++++++++++++++++" +] + +class Biff(QWidget): + def __init__(self): + QWidget.__init__(self, None, "Biff - example application") + + mail = os.getenv("MAIL") + fi = QFileInfo(mail); + if not fi.exists(): + s = "/var/spool/mail/"+os.getenv("USER") + fi.setFile(s) + + if fi.exists(): + self.mailbox = fi.absFilePath() + self.startTimer(1000) + + self.setMinimumSize(48, 48) + self.setMaximumSize(48, 48) + self.resize(48, 48) + + self.hasNewMail = QPixmap(hasmail_bmp_data) + self.noNewMail = QPixmap(nomail_bmp_data) + + self.gotMail = FALSE + self.lastModified = fi.lastModified() + + def timerEvent(self, te): + fi = QFileInfo(self.mailbox) + newState = ( fi.lastModified().toTime_t() != self.lastModified.toTime_t() and fi.lastModified().toTime_t() > fi.lastRead().toTime_t()) + if newState != self.gotMail: + if self.gotMail == TRUE: + self.lastModified = fi.lastModified() + self.gotMail = newState + self.repaint(FALSE) + + def paintEvent(self, pe): + if self.gotMail: + bitBlt(self, 0, 0, self.hasNewMail) + else: + bitBlt(self, 0, 0, self.noNewMail) + + def mousePressEvent(self, me): + fi = QFileInfo(self.mailbox) + lastModified = fi.lastModified() + + +a = QApplication(sys.argv) +b = Biff() +a.setMainWidget(b) +b.show() +a.exec_loop() diff --git a/examples3/bigtable.py b/examples3/bigtable.py new file mode 100755 index 0000000..da17619 --- /dev/null +++ b/examples3/bigtable.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python + +#**************************************************************************** +#** $Id: bigtable.py,v 1.1 2002/06/19 07:56:07 phil Exp $ +#** +#** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved. +#** +#** This file is part of an example program for PyQt. This example +#** program may be used, distributed and modified without limitation. +#** +#*****************************************************************************/ + +import sys +import os +from qt import * +from qttable import * + +TRUE = 1 +FALSE = 0 + +numRows = 1000000 +numCols = 1000000 + +class MyTable(QTable): + def __init__(self, r, c): + QTable.__init__(self, r, c) + self.items = {} + self.widgets = {} + self.setCaption("This is a big table with 1.000.000x1.000.000 cells...") + self.setLeftMargin(self.fontMetrics().width("W999999W")) + + def resizeData(self, v): + return + + def item(self, r, c): + try: + return self.items[self.indexOf(r, c)] + except KeyError: + return None + + def setItem(self, r, c, i): + self.items[self.indexOf(r, c)] = i + + def clearCell(self, r, c): + try: + del self.items[self.indexOf(r, c)] + except KeyError: + pass + + def insertWidget(self, r, c, w): + self.widgets[self.indexOf(r, c)] = w + + def cellWidget(self, r, c): + try: + return self.widgets[self.indexOf(r, c)] + except KeyError: + return None + + def clearCellWidget(self, r, c): + try: + del self.widgets[self.indexOf(r, c)] + except KeyError: + pass + + +if __name__ == '__main__': + app = QApplication(sys.argv) + + table = MyTable(numRows, numCols) + app.setMainWidget(table) + table.show() + app.exec_loop() diff --git a/examples3/buttongroups.py b/examples3/buttongroups.py new file mode 100755 index 0000000..c998a88 --- /dev/null +++ b/examples3/buttongroups.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python +#/**************************************************************************** +#** $Id: buttongroups.py,v 1.2 2002/12/20 18:46:10 phil Exp $ +#** +#** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. +#** +#** This file is part of an example program for Qt. This example +#** program may be used, distributed and modified without limitation. +#** +#*****************************************************************************/ + +import sys +from qt import * + +TRUE = 1 +FALSE = 0 + +## +# Creates all child widgets of the ButtonGroups window +## + +class ButtonsGroups( QWidget ): + def __init__( self, *args ): + apply( QWidget.__init__, (self,) + args ) + + # Create Widgets which allow easy layouting + self.vbox = QVBoxLayout( self, 11, 6 ) + self.box1 = QHBoxLayout( self.vbox ) + self.box2 = QHBoxLayout( self.vbox ) + + # ------- first group + + # Create an exclusive button group + self.grp1 = QButtonGroup( 1, QGroupBox.Horizontal, "Button Group 1 (exclusive)", self ) + self.box1.addWidget( self.grp1 ) + self.grp1.setExclusive( TRUE ) + + # insert 3 radiobuttons + self.rb11 = QRadioButton( "&Radiobutton 1", self.grp1 ) + self.rb11.setChecked( TRUE ) + QRadioButton( "R&adiobutton 2", self.grp1 ) + QRadioButton( "Ra&diobutton 3", self.grp1 ) + + # ------- second group + + # Create a non-exclusive buttongroup + self.grp2 = QButtonGroup( 1, QGroupBox.Horizontal, "Button Group 2 (non-exclusive)", self ) + self.box1.addWidget( self.grp2 ) + self.grp2.setExclusive( FALSE ) + + # insert 3 checkboxes + QCheckBox( "&Checkbox 1", self.grp2 ) + self.cb12 = QCheckBox( "C&heckbox 2", self.grp2 ) + self.cb12.setChecked( TRUE ) + self.cb13 = QCheckBox( "Triple &State Button", self.grp2 ) + self.cb13.setTristate( TRUE ) + self.cb13.setChecked( TRUE ) + + # ------------ third group + + # create a buttongroup which is exclusive for radiobuttons and non-exclusive for all other buttons + self.grp3 = QButtonGroup( 1, QGroupBox.Horizontal, "Button Group 3 (Radiobutton-exclusive)", self ) + self.box2.addWidget( self.grp3 ) + self.grp3.setRadioButtonExclusive( TRUE ) + + # insert three radiobuttons + self.rb21 = QRadioButton( "Rad&iobutton 1", self.grp3 ) + self.rb22 = QRadioButton( "Radi&obutton 2", self.grp3 ) + self.rb23 = QRadioButton( "Radio&button 3", self.grp3 ) + self.rb23.setChecked( TRUE ) + + # insert a checkbox... + self.state = QCheckBox( "E&nable Radiobuttons", self.grp3 ) + self.state.setChecked( TRUE ) + # ...and connect its SIGNAL clicked() with the SLOT slotChangeGrp3State() + self.connect( self.state, SIGNAL( "clicked()" ), self.slotChangeGrp3State ) + + # ------------ fourth group + + # create a groupbox which layouts its childs in a columns + self.grp4 = QButtonGroup( 1, QGroupBox.Horizontal, "Groupbox with normal buttons", self ) + self.box2.addWidget( self.grp4 ) + + # insert two pushbuttons... + QPushButton( "&Push Button", self.grp4 ) + self.tb2 = QPushButton( "&Toggle Button", self.grp4 ) + + # ... and make the second one a toggle button + self.tb2.setToggleButton( TRUE ) + self.tb2.setOn( TRUE ) + + # ... and make the third one a flat button + self.tb3 = QPushButton( "&Flat Button", self.grp4 ) + self.tb3.setFlat( TRUE ) + + # .. and the fourth a button with a menu + self.tb4 = QPushButton( "Popup Button", self.grp4 ) + menu = QPopupMenu(self.tb4) + menu.insertItem("Item1", 0) + menu.insertItem("Item2", 0) + menu.insertItem("Item3", 0) + menu.insertItem("Item4", 0) + self.tb4.setPopup(menu) + + # + # SLOT slotChangeGrp3State() + # enables/disables the radiobuttons of the third buttongroup + # + + def slotChangeGrp3State( self ): + self.rb21.setEnabled( self.state.isChecked() ) + self.rb22.setEnabled( self.state.isChecked() ) + self.rb23.setEnabled( self.state.isChecked() ) + + +## main program +a = QApplication( sys.argv ) + +buttonsgroups = ButtonsGroups() +buttonsgroups.resize( 500, 250 ) +buttonsgroups.setCaption( "PyQT Example - Buttons and Groups" ) +a.setMainWidget( buttonsgroups ) +buttonsgroups.show() + +a.exec_loop() diff --git a/examples3/canvas/butterfly.png b/examples3/canvas/butterfly.png new file mode 100644 index 0000000..d8912d2 Binary files /dev/null and b/examples3/canvas/butterfly.png differ diff --git a/examples3/canvas/canvas.py b/examples3/canvas/canvas.py new file mode 100755 index 0000000..178a6e6 --- /dev/null +++ b/examples3/canvas/canvas.py @@ -0,0 +1,619 @@ +#!/usr/bin/env python + +import sys +from qt import * +from qtcanvas import * +import random + + +True = 1 +False = 0 +butterfly_fn = QString.null +butterflyimg = [] +logo_fn = QString.null +logoimg = [] +bouncy_logo = None +views = [] + + +class ImageItem(QCanvasRectangle): + def __init__(self,img,canvas): + QCanvasRectangle.__init__(self,canvas) + self.imageRTTI=984376 + self.image=img + self.pixmap=QPixmap() + self.setSize(self.image.width(), self.image.height()) + self.pixmap.convertFromImage(self.image, Qt.OrderedAlphaDither); + + def rtti(self): + return self.imageRTTI + + def hit(self,p): + ix = p.x()-self.x() + iy = p.y()-self.y() + if not self.image.valid( ix , iy ): + return False + self.pixel = self.image.pixel( ix, iy ) + return (qAlpha( self.pixel ) != 0) + + def drawShape(self,p): + p.drawPixmap( self.x(), self.y(), self.pixmap ) + + +class NodeItem(QCanvasEllipse): + def __init__(self,canvas): + QCanvasEllipse.__init__(self,6,6,canvas) + self.__inList=[] + self.__outList=[] + self.setPen(QPen(Qt.black)) + self.setBrush(QBrush(Qt.red)) + self.setZ(128) + + def addInEdge(self,edge): + self.__inList.append(edge) + + def addOutEdge(self,edge): + self.__outList.append(edge) + + def moveBy(self,dx,dy): + QCanvasEllipse.moveBy(self,dx,dy) + for each_edge in self.__inList: + each_edge.setToPoint( int(self.x()), int(self.y()) ) + for each_edge in self.__outList: + each_edge.setFromPoint( int(self.x()), int(self.y()) ) + +class EdgeItem(QCanvasLine): + __c=0 + def __init__(self,fromNode, toNode,canvas): + QCanvasLine.__init__(self,canvas) + self.__c=self.__c+1 + self.setPen(QPen(Qt.black)) + self.setBrush(QBrush(Qt.red)) + fromNode.addOutEdge(self) + toNode.addInEdge(self) + self.setPoints(int(fromNode.x()),int(fromNode.y()), int(toNode.x()), int(toNode.y())) + self.setZ(127) + + def setFromPoint(self,x,y): + self.setPoints(x,y,self.endPoint().x(),self.endPoint().y()) + + def setToPoint(self,x,y): + self.setPoints(self.startPoint().x(), self.startPoint().y(),x,y) + + def count(self): + return self.__c + + def moveBy(self,dx,dy): + pass + + +class FigureEditor(QCanvasView): + def __init__(self,c,parent,name,f): + QCanvasView.__init__(self,c,parent,name,f) + self.__moving=0 + self.__moving_start= 0 + + def contentsMousePressEvent(self,e): # QMouseEvent e + point = self.inverseWorldMatrix().map(e.pos()) + ilist = self.canvas().collisions(point) #QCanvasItemList ilist + for each_item in ilist: + if each_item.rtti()==984376: + if not each_item.hit(point): + continue + self.__moving=each_item + self.__moving_start=point + return + self.__moving=0 + + def clear(self): + ilist = self.canvas().allItems() + for each_item in ilist: + if each_item: + each_item.setCanvas(None) + del each_item + self.canvas().update() + + def contentsMouseMoveEvent(self,e): + if self.__moving : + point = self.inverseWorldMatrix().map(e.pos()); + self.__moving.moveBy(point.x() - self.__moving_start.x(),point.y() - self.__moving_start.y()) + self.__moving_start = point + self.canvas().update() + + +class BouncyLogo(QCanvasSprite): + def __init__(self,canvas): + # Make sure the logo exists. + global bouncy_logo + if bouncy_logo is None: + bouncy_logo=QCanvasPixmapArray("qt-trans.xpm") + + QCanvasSprite.__init__(self,None,canvas) + self.setSequence(bouncy_logo) + self.setAnimated(True) + self.initPos() + self.logo_rtti=1234 + + def rtti(self): + return self.logo_rtti + + def initPos(self): + self.initSpeed() + trial=1000 + self.move(random.random()%self.canvas().width(), random.random()%self.canvas().height()) + self.advance(0) + trial=trial-1 + while (trial & (self.xVelocity()==0 )& (self.yVelocity()==0)): + elf.move(random.random()%self.canvas().width(), random.random()%self.canvas().height()) + self.advance(0) + trial=trial-1 + + def initSpeed(self): + speed=4.0 + d=random.random()%1024/1024.0 + self.setVelocity(d*speed*2-speed, (1-d)*speed*2-speed) + + def advance(self,stage): + if stage==0: + vx=self.xVelocity() + vy=self.yVelocity() + if (vx==0.0) & (vy==0.0): + self.initSpeed() + vx=self.xVelocity() + vy=self.yVelocity() + + nx=self.x()+vx + ny=self.y()+vy + + if (nx<0) | (nx >= self.canvas().width()): + vx=-vx + if (ny<0) | (ny >= self.canvas().height()): + vy=-vy + + for bounce in [0,1,2,3]: + l=self.collisions(False) + for hit in l: + if (hit.rtti()==1234) & (hit.collidesWith(self)): + if bounce==0: + vx=-vx + elif bounce==1: + vy=-vy + vx=-vx + elif bounce==2: + vx=-vx + elif bounce==3: + vx=0 + vy=0 + self.setVelocity(vx,vy) + break + + if (self.x()+vx < 0) | (self.x()+vx >= self.canvas().width()): + vx=0 + if (self.y()+vy < 0) | (self.y()+vy >= self.canvas().height()): + vy=0 + + self.setVelocity(vx,vy) + elif stage==1: + QCanvasItem.advance(self,stage) + + +class Main (QMainWindow): + def __init__(self,c,parent,name,f=0): + QMainWindow.__init__(self,parent,name,f) + self.editor=FigureEditor(c,self,name,f) + self.printer=QPrinter() + self.dbf_id=0 + self.canvas=c + self.mainCount=0 + file=QPopupMenu(self.menuBar()) + file.insertItem("&Fill canvas", self.init, Qt.CTRL+Qt.Key_F) + file.insertItem("&Erase canvas", self.clear, Qt.CTRL+Qt.Key_E) + file.insertItem("&New view", self.newView, Qt.CTRL+Qt.Key_N) + file.insertSeparator(); + file.insertItem("&Print", self._print, Qt.CTRL+Qt.Key_P) + file.insertSeparator() + file.insertItem("E&xit", qApp, SLOT("quit()"), Qt.CTRL+Qt.Key_Q) + self.menuBar().insertItem("&File", file) + + edit = QPopupMenu(self.menuBar() ) + edit.insertItem("Add &Circle", self.addCircle, Qt.ALT+Qt.Key_C) + edit.insertItem("Add &Hexagon", self.addHexagon, Qt.ALT+Qt.Key_H) + edit.insertItem("Add &Polygon", self.addPolygon, Qt.ALT+Qt.Key_P) + edit.insertItem("Add Spl&ine", self.addSpline, Qt.ALT+Qt.Key_I) + edit.insertItem("Add &Text", self.addText, Qt.ALT+Qt.Key_T) + edit.insertItem("Add &Line", self.addLine, Qt.ALT+Qt.Key_L) + edit.insertItem("Add &Rectangle", self.addRectangle, Qt.ALT+Qt.Key_R) + edit.insertItem("Add &Sprite", self.addSprite, Qt.ALT+Qt.Key_S) + edit.insertItem("Create &Mesh", self.addMesh, Qt.ALT+Qt.Key_M ) + edit.insertItem("Add &Alpha-blended image", self.addButterfly, Qt.ALT+Qt.Key_A) + self.menuBar().insertItem("&Edit", edit) + + view = QPopupMenu(self.menuBar() ); + view.insertItem("&Enlarge", self.enlarge, Qt.SHIFT+Qt.CTRL+Qt.Key_Plus); + view.insertItem("Shr&ink", self.shrink, Qt.SHIFT+Qt.CTRL+Qt.Key_Minus); + view.insertSeparator(); + view.insertItem("&Rotate clockwise", self.rotateClockwise, Qt.CTRL+Qt.Key_PageDown); + view.insertItem("Rotate &counterclockwise", self.rotateCounterClockwise, Qt.CTRL+Qt.Key_PageUp); + view.insertItem("&Zoom in", self.zoomIn, Qt.CTRL+Qt.Key_Plus); + view.insertItem("Zoom &out", self.zoomOut, Qt.CTRL+Qt.Key_Minus); + view.insertItem("Translate left", self.moveL, Qt.CTRL+Qt.Key_Left); + view.insertItem("Translate right", self.moveR, Qt.CTRL+Qt.Key_Right); + view.insertItem("Translate up", self.moveU, Qt.CTRL+Qt.Key_Up); + view.insertItem("Translate down", self.moveD, Qt.CTRL+Qt.Key_Down); + view.insertItem("&Mirror", self.mirror, Qt.CTRL+Qt.Key_Home); + self.menuBar().insertItem("&View", view) + + self.options = QPopupMenu( self.menuBar() ); + self.dbf_id = self.options.insertItem("Double buffer", self.toggleDoubleBuffer) + self.options.setItemChecked(self.dbf_id, True) + self.menuBar().insertItem("&Options",self.options) + + self.menuBar().insertSeparator(); + + help = QPopupMenu( self.menuBar() ) + help.insertItem("&About", self.help, Qt.Key_F1) + help.insertItem("&About Qt", self.aboutQt, Qt.Key_F2) + help.setItemChecked(self.dbf_id, True) + self.menuBar().insertItem("&Help",help) + + self.statusBar() + + self.setCentralWidget(self.editor) + + self.printer = 0 + self.tb=0 + self.tp=0 + + self.init() + + def init(self): + self.clear() + r=24 + r=r+1 + random.seed(r) + for i in range(self.canvas.width()/56): + self.addButterfly() + for j in range(self.canvas.width()/85): + self.addHexagon() + for k in range(self.canvas.width()/128): + self.addLogo() + + def newView(self): + m=Main(self.canvas,None,"new windiw",Qt.WDestructiveClose) + qApp.setMainWidget(m) + m.show() + qApp.setMainWidget(None) + views.append(m) + + def clear(self): + self.editor.clear() + + def help(self): + QMessageBox.information(None, "PyQt Canvas Example", + "

The PyQt QCanvas classes example


" + "

This is the PyQt implementation of " + "Qt canvas example.

by Sadi Kose " + "(kose@nuvox.net)
" + "
    " + "
  • Press ALT-S for some sprites." + "
  • Press ALT-C for some circles." + "
  • Press ALT-L for some lines." + "
  • Drag the objects around." + "
  • Read the code!" + "
","Dismiss") + + def aboutQt(self): + QMessageBox.aboutQt(self,"PyQt Canvas Example") + + def toggleDoubleBuffer(self): + s = not self.options.isItemChecked(self.dbf_id) + self.options.setItemChecked(self.dbf_id,s) + self.canvas.setDoubleBuffering(s) + + def enlarge(self): + self.canvas.resize(self.canvas.width()*4/3, self.canvas.height()*4/3) + + def shrink(self): + self.canvas.resize(self.canvas.width()*3/4, self.canvas.height()*3/4) + + def rotateClockwise(self): + m = self.editor.worldMatrix() + m.rotate( 22.5 ) + self.editor.setWorldMatrix( m ) + + def rotateCounterClockwise(self): + m = self.editor.worldMatrix() + m.rotate( -22.5 ) + self.editor.setWorldMatrix( m ) + + def zoomIn(self): + m = self.editor.worldMatrix() + m.scale( 2.0, 2.0 ) + self.editor.setWorldMatrix( m ) + + def zoomOut(self): + m = self.editor.worldMatrix() + m.scale( 0.5, 0.5 ) + self.editor.setWorldMatrix( m ) + + def mirror(self): + m = self.editor.worldMatrix() + m.scale( -1, 1 ) + self.editor.setWorldMatrix( m ) + + def moveL(self): + m = self.editor.worldMatrix() + m.translate( -16, 0 ) + self.editor.setWorldMatrix( m ) + + def moveR(self): + m = self.editor.worldMatrix() + m.translate( +16, 0 ) + self.editor.setWorldMatrix( m ) + + def moveU(self): + m = self.editor.worldMatrix() + m.translate( 0, -16 ) + self.editor.setWorldMatrix( m ) + + def moveD(self): + m = self.editor.worldMatrix(); + m.translate( 0, +16 ); + self.editor.setWorldMatrix( m ) + + def _print(self): + if not self.printer: + self.printer = QPrinter() + if self.printer.setup(self) : + pp=QPainter(self.printer) + self.canvas.drawArea(QRect(0,0,self.canvas.width(),self.canvas.height()),pp,False) + + def addSprite(self): + i = BouncyLogo(self.canvas) + i.setZ(256*random.random()%256); + i.show(); + + def addButterfly(self): + if butterfly_fn.isEmpty(): + return + if not butterflyimg: + butterflyimg.append(QImage()) + butterflyimg[0].load(butterfly_fn) + butterflyimg.append(QImage()) + butterflyimg[1] = butterflyimg[0].smoothScale( int(butterflyimg[0].width()*0.75), + int(butterflyimg[0].height()*0.75) ) + butterflyimg.append(QImage()) + butterflyimg[2] = butterflyimg[0].smoothScale( int(butterflyimg[0].width()*0.5), + int(butterflyimg[0].height()*0.5) ) + butterflyimg.append(QImage()) + butterflyimg[3] = butterflyimg[0].smoothScale( int(butterflyimg[0].width()*0.25), + int(butterflyimg[0].height()*0.25) ) + + i = ImageItem(butterflyimg[int(4*random.random()%4)],self.canvas) + i.move((self.canvas.width()-butterflyimg[0].width())*random.random()%(self.canvas.width()-butterflyimg[0].width()), + (self.canvas.height()-butterflyimg[0].height())*random.random()%(self.canvas.height()-butterflyimg[0].height())) + i.setZ(256*random.random()%256+250); + i.show() + + def addLogo(self): + if logo_fn.isEmpty(): + return; + if not logoimg: + logoimg.append(QImage()) + logoimg[0].load( logo_fn ) + logoimg.append(QImage()) + logoimg[1] = logoimg[0].smoothScale( int(logoimg[0].width()*0.75), + int(logoimg[0].height()*0.75) ) + logoimg.append(QImage()) + logoimg[2] = logoimg[0].smoothScale( int(logoimg[0].width()*0.5), + int(logoimg[0].height()*0.5) ) + logoimg.append(QImage()) + logoimg[3] = logoimg[0].smoothScale( int(logoimg[0].width()*0.25), + int(logoimg[0].height()*0.25) ); + + i = ImageItem(logoimg[int(4*random.random()%4)],self.canvas) + i.move((self.canvas.width()-logoimg[0].width())*random.random()%(self.canvas.width()-logoimg[0].width()), + (self.canvas.height()-logoimg[0].width())*random.random()%(self.canvas.height()-logoimg[0].width())) + i.setZ(256*random.random()%256+256) + i.show() + + def addCircle(self): + i = QCanvasEllipse(50,50,self.canvas) + i.setBrush( QBrush(QColor(256*random.random()%32*8,256*random.random()%32*8,256*random.random()%32*8) )) + i.move(self.canvas.width()*random.random()%self.canvas.width(),self.canvas.width()*random.random()%self.canvas.height()) + i.setZ(256*random.random()%256) + i.show() + + def addHexagon(self): + i = QCanvasPolygon(self.canvas) + size = canvas.width() / 25 + pa=QPointArray(6) + pa.setPoint(0,QPoint(2*size,0)) + pa.setPoint(1,QPoint(size,-size*173/100)) + pa.setPoint(2,QPoint(-size,-size*173/100)) + pa.setPoint(3,QPoint(-2*size,0)) + pa.setPoint(4,QPoint(-size,size*173/100)) + pa.setPoint(5,QPoint(size,size*173/100)) + i.setPoints(pa) + i.setBrush( QBrush(QColor(256*random.random()%32*8,256*random.random()%32*8,256*random.random()%32*8) )) + i.move(self.canvas.width()*random.random()%self.canvas.width(),self.canvas.width()*random.random()%self.canvas.height()) + i.setZ(256*random.random()%256) + i.show() + + def addPolygon(self): + i = QCanvasPolygon(self.canvas) + size = self.canvas.width()/2 + pa=QPointArray(6) + pa.setPoint(0, QPoint(0,0)) + pa.setPoint(1, QPoint(size,size/5)) + pa.setPoint(2, QPoint(size*4/5,size)) + pa.setPoint(3, QPoint(size/6,size*5/4)) + pa.setPoint(4, QPoint(size*3/4,size*3/4)) + pa.setPoint(5, QPoint(size*3/4,size/4)) + + i.setPoints(pa) + i.setBrush(QBrush( QColor(256*random.random()%32*8,256*random.random()%32*8,256*random.random()%32*8)) ) + i.move(self.canvas.width()*random.random()%self.canvas.width(),self.canvas.width()*random.random()%self.canvas.height()) + i.setZ(256*random.random()%256) + i.show() + + def addSpline(self): + i = QCanvasSpline(self.canvas) + size = canvas.width()/6 + pa=QPointArray(12) + pa.setPoint(0,QPoint(0,0)) + pa.setPoint(1,QPoint(size/2,0)) + pa.setPoint(2,QPoint(size,size/2)) + pa.setPoint(3,QPoint(size,size)) + pa.setPoint(4,QPoint(size,size*3/2)) + pa.setPoint(5,QPoint(size/2,size*2)) + pa.setPoint(6,QPoint(0,size*2)) + pa.setPoint(7,QPoint(-size/2,size*2)) + pa.setPoint(8,QPoint(size/4,size*3/2)) + pa.setPoint(9,QPoint(0,size)) + pa.setPoint(10,QPoint(-size/4,size/2)) + pa.setPoint(11,QPoint(-size/2,0)) + i.setControlPoints(pa) + i.setBrush( QBrush(QColor(256*random.random()%32*8,256*random.random()%32*8,256*random.random()%32*8) )) + i.move(self.canvas.width()*random.random()%self.canvas.width(),self.canvas.width()*random.random()%self.canvas.height()) + i.setZ(256*random.random()%256) + i.show() + + def addText(self): + i = QCanvasText(self.canvas) + i.setText("QCanvasText") + i.move(self.canvas.width()*random.random()%self.canvas.width(),self.canvas.width()*random.random()%self.canvas.height()) + i.setZ(256*random.random()%256) + i.show() + + def addLine(self): + i = QCanvasLine(self.canvas); + i.setPoints( self.canvas.width()*random.random()%self.canvas.width(), self.canvas.width()*random.random()%self.canvas.height(), + self.canvas.width()*random.random()%self.canvas.width(), self.canvas.width()*random.random()%self.canvas.height() ) + i.setPen( QPen(QColor(256*random.random()%32*8,256*random.random()%32*8,256*random.random()%32*8), 6) ) + i.setZ(256*random.random()%256) + i.show() + + def ternary(self,exp,x,y): + if exp: + return x + else: + return y + + def addMesh(self): + x0 = 0; + y0 = 0; + + if not self.tb: + self.tb = QBrush( Qt.red ) + if not self.tp: + self.tp = QPen( Qt.black ) + + nodecount = 0; + + w = self.canvas.width() + h = self.canvas.height() + + dist = 30 + rows = h / dist + cols = w / dist + + #ifndef QT_NO_PROGRESSDIALOG + #progress=QProgressDialog( "Creating mesh...", "Abort", rows, + # self, "progress", True ); + #endif + + lastRow=[] + for c in range(cols): + lastRow.append(NodeItem(self.canvas)) + for j in range(rows): + n = self.ternary(j%2 , cols-1 , cols) + prev = 0; + for i in range(n): + el = NodeItem( self.canvas ) + nodecount=nodecount+1 + r = 20*20*random.random() + xrand = r %20 + yrand = (r/20) %20 + el.move( xrand + x0 + i*dist + self.ternary(j%2 , dist/2 , 0 ), + yrand + y0 + j*dist ); + + if j > 0 : + if i < cols-1 : + EdgeItem( lastRow[i], el, self.canvas ).show() + if j%2 : + EdgeItem( lastRow[i+1], el, self.canvas ).show() + elif i > 0 : + EdgeItem( lastRow[i-1], el, self.canvas ).show() + if prev: + EdgeItem( prev, el, self.canvas ).show() + + if i > 0 : + lastRow[i-1] = prev + prev = el + el.show() + + lastRow[n-1]=prev + #ifndef QT_NO_PROGRESSDIALOG + #progress.setProgress( j ) + #if progress.wasCancelled() : + # break + #endif + + #ifndef QT_NO_PROGRESSDIALOG + #progress.setProgress( rows ) + #endif + #// qDebug( "%d nodes, %d edges", nodecount, EdgeItem::count() ); + + def addRectangle(self): + i = QCanvasRectangle( self.canvas.width()*random.random()%self.canvas.width(), + self.canvas.width()*random.random()%self.canvas.height(), + self.canvas.width()/5,self.canvas.width()/5,self.canvas) + z = 256*random.random()%256 + i.setBrush( QBrush(QColor(z,z,z) )) + i.setPen( QPen(QColor(self.canvas.width()*random.random()%32*8, + self.canvas.width()*random.random()%32*8, + self.canvas.width()*random.random()%32*8), 6) ) + i.setZ(z) + i.show() + + +if __name__=='__main__': + app=QApplication(sys.argv) + + if len(sys.argv) > 1: + butterfly_fn=QString(sys.argv[1]) + else: + butterfly_fn=QString("butterfly.png") + + if len(sys.argv) > 2: + logo_fn = QString(sys.argv[2]) + else: + logo_fn=QString("qtlogo.png") + + canvas=QCanvas(800,600) + canvas.setAdvancePeriod(30) + m=Main(canvas,None,"pyqt canvas example") + m.resize(m.sizeHint()) + + qApp.setMainWidget(m) + m.setCaption("Qt Canvas Example ported to PyQt") + if QApplication.desktop().width() > m.width() + 10 and QApplication.desktop().height() > m.height() + 30: + m.show() + else: + m.showMaximized() + + m.show(); + #// m.help(); + qApp.setMainWidget(None); + + QObject.connect( qApp, SIGNAL("lastWindowClosed()"), qApp, SLOT("quit()") ) + + app.exec_loop() + + # We need to explicitly delete the canvas now (and, therefore, the main + # window beforehand) to make sure that the sprite logo doesn't get garbage + # collected first. + views = [] + del m + del canvas diff --git a/examples3/canvas/qt-trans.xpm b/examples3/canvas/qt-trans.xpm new file mode 100644 index 0000000..225f684 --- /dev/null +++ b/examples3/canvas/qt-trans.xpm @@ -0,0 +1,54 @@ +/* XPM */ +static char *qtlogo_xpm[] = { +/* width height ncolors chars_per_pixel */ +"54 34 13 1", +/* colors */ +" c #000000", +". c #999999", +"X c #333366", +"o c #6666CC", +"O c #333333", +"@ c #666699", +"# c #000066", +"$ c #666666", +"% c #3333CC", +"& c #000033", +"* c #9999CC", +"= c #333399", +"+ c None", +/* pixels */ +"+++++++++++++++++++.$OOO$.++++++++++++++++++++++++++++", +"+++++++++++++++++$ O.+++++++++++++++++++++++++", +"+++++++++++++++.O $++++++++++++++++++++++++", +"++++++++++++++. $.++.$ O+++++++++++++++++++++++", +"+++++++++++++. O.+++++++$ O++++++++++++++++++++++", +"+++++++++++++O ++++++++++$ $+++++++++++++++++++++", +"++++++++++++$ .+++++++++++O .++++++++++++++++++++", +"+++++++++++. O+++++++++++++ O++++++.+++++++++++++", +"+++++++++++$ .+++++++++++++$ .+++.O +++++++++++++", +"+++++++++++ +++++++++++++++ O+++. +++++++++++++", +"++++++++++. &Xoooo*++++++++++$ +++. +++++++++++++", +"++++++++++@=%%%%%%%%%%*+++++++. .++. +++++++++++++", +"+++++++**oooooo**++*o%%%%o+++++ $++O +++++++++++++", +"+++++*****$OOX@oooo*++*%%%%%*++O $+. OOO$++++++++*", +"++..+.++....$O$+*ooooo*+*o%%%%%O O+$ $$O.++++++**+", +"***+*+++++$$....+++*oooo**+*o%%# O++O ++++++***o*++", +"*+++++++++O $.....++**oooo**+*X &o*O ++++*ooo*++++", +"++++++++++$ O++.....++**oooo*X &%%& ..*o%%*++++++", +"++++++++++$ ++++.....+++**ooO $*o& @oo*+++++++++", +"++++++++++. .++++++.....+++*O Xo*O .++++++++++++", +"+++++++++++ O+++++++++...... .++O +++++++++++++", +"+++++++++++O +++.$$$.++++++. O+++O +++++++++++++", +"+++++++++++. $$OO O.++++O .+++O +++++++++++++", +"++++++++++++O .+++.O $++. O++++O +++++++++++++", +"++++++++++++. O+++++O $+O +++++O +++++++++++++", +"+++++++++++++. O+++++O O .+++++O .++++++++++++", +"++++++++++++++$ .++++O .++++.+$ O+.$.++++++++", +"+++++++++++++++. O$$O .+++++... +++++++++", +"+++++++++++++++++$ O+++++$$+.O O$.+++++++++", +"+++++++++++++++++++$OO O$.O O.++. .++++++++++++++++", +"+++++++++++++++++++++++++++. OO .++++++++++++++++", +"++++++++++++++++++++++++++++. O+++++++++++++++++", +"+++++++++++++++++++++++++++++. .+++++++++++++++++", +"++++++++++++++++++++++++++++++.O O.++++++++++++++++++" +}; diff --git a/examples3/canvas/qtlogo.png b/examples3/canvas/qtlogo.png new file mode 100644 index 0000000..a48b1a1 Binary files /dev/null and b/examples3/canvas/qtlogo.png differ diff --git a/examples3/checklists.py b/examples3/checklists.py new file mode 100755 index 0000000..12a3cdb --- /dev/null +++ b/examples3/checklists.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python + +# vim:tabstop=2:shiftwidth=2:expandtab:cinoptions=(s,U1,m1 +# Copyright (C) 2002 Oleksandr Yakovlyev (yshurik) + +import sys +from qt import * + +TRUE = 1 +FALSE = 0 + +class CheckLists(QWidget): + def __init__(self, *args): + apply( QWidget.__init__, (self, ) + args ) + + lay = QHBoxLayout(self) + lay.setMargin(5) + + vbox1 = QVBoxLayout(lay) + vbox1.setMargin(5) + + # First child: a Label + vbox1.addWidget(QLabel("Check some items!", self)) + + # Second child: the ListView + self.lv1 = QListView(self) + vbox1.addWidget(self.lv1) + self.lv1.addColumn("Items") + self.lv1.setRootIsDecorated(TRUE) + + # create a list with 4 ListViewItems which will be parent items of other ListViewItems + + parentList = [] + + parentList.append( QListViewItem( self.lv1, "Parent Item 1" ) ) + parentList.append( QListViewItem( self.lv1, "Parent Item 2" ) ) + parentList.append( QListViewItem( self.lv1, "Parent Item 3" ) ) + parentList.append( QListViewItem( self.lv1, "Parent Item 4" ) ) + + num = 0 + + self.childList1 = [] + # go through the list of parent items... + for i in range(4): + it = parentList[i] + it.setOpen( TRUE ) + + # ...and create 5 checkable child ListViewItems for each parent item + for j in range(5): + ci = QCheckListItem( it, QString("%1. Child of Parent %2").arg( j ).arg( i ), QCheckListItem.CheckBox ) + self.childList1.append(ci) + + # Create another widget for layouting + tmp1 = QVBoxLayout( lay ) + tmp1.setMargin( 5 ) + + # create a pushbutton + copy1 = QPushButton( " -> ", self ) + tmp1.addWidget( copy1 ) + copy1.setMaximumWidth( copy1.sizeHint().width() ); + # connect the SIGNAL clicked() of the pushbutton with the SLOT copy1to2() + self.connect( copy1, SIGNAL('clicked()'), self.copy1to2 ) + + # another widget for layouting + vbox2 = QVBoxLayout( lay ) + vbox2.setMargin( 5 ) + + # and another label + vbox2.addWidget( QLabel( "Check one item!", self ) ) + + # create the second listview + self.lv2 = QListView( self ) + vbox2.addWidget( self.lv2 ) + self.lv2.addColumn( "Items" ) + self.lv2.setRootIsDecorated( TRUE ) + + # another widget needed for layouting only + tmp2 = QVBoxLayout( lay ) + tmp2.setMargin( 5 ) + + # create another pushbutton... + copy2 = QPushButton( " -> ", self ) + lay.addWidget( copy2 ) + copy2.setMaximumWidth( copy2.sizeHint().width() ) + # ...and connect its clicked() SIGNAL to the copy2to3() SLOT + self.connect( copy2, SIGNAL('clicked()'), self.copy2to3 ) + + tmp3 = QVBoxLayout( lay ) + tmp3.setMargin( 5 ) + + # and create a label which will be at the right of the window + self.label = QLabel( "No Item yet...", self ) + tmp3.addWidget( self.label ) + + def copy1to2(self): + self.lv2.clear() + + # Insert first a controller Item into the second ListView. Always if Radio-ListViewItems + # are inserted into a Listview, the parent item of these MUST be a controller Item! + item = QCheckListItem( self.lv2, "Controller", QCheckListItem.Controller ) + item.setOpen( TRUE ) + + self.listChild2 = [] + for it in self.childList1: + # ...check state of childs, and... + if it.parent() != None: + # ...if the item is checked... + if it.isOn(): + # ...insert a Radio-ListViewItem with the same text into the second ListView + ri = QCheckListItem(item , it.text(0), QCheckListItem.RadioButton) + self.listChild2.append(ri) + + if item.firstChild() != None: + item.firstChild().setOn(TRUE) + + def copy2to3(self): + self.label.setText( "No Item checked" ) + + # iterate through the second ListView... + for it in self.listChild2: + # ...check state of childs, and... + if it.parent() != None: + # ...if the item is checked... + if it.isOn(): + # ...set the text of the item to the label + self.label.setText( it.text( 0 ) ) + +a = QApplication(sys.argv) + +checkLists = CheckLists() +checkLists.resize(700, 400) +checkLists.setCaption("PyQt example - CheckLists") + +a.setMainWidget(checkLists) +checkLists.show() +a.exec_loop() diff --git a/examples3/cursor.py b/examples3/cursor.py new file mode 100755 index 0000000..d5bbbe1 --- /dev/null +++ b/examples3/cursor.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python + +"""$Id: cursor.py,v 1.1 2003/07/01 14:18:37 phil Exp $ +** +** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +***************************************************************************""" + +import sys +from qt import * + +# cb_bits and cm_bits were generated by X bitmap program. + +cb_width = 32 +cb_height = 32 + +# cursor bitmap +cb_bits = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x0f\x00" \ + "\x00\x06\x30\x00\x80\x01\xc0\x00\x40\x00\x00\x01" \ + "\x20\x00\x00\x02\x10\x00\x00\x04\x08\x3e\x3e\x08" \ + "\x08\x03\xe0\x08\xc4\x00\x00\x11\x04\x1e\x78\x10" \ + "\x02\x0c\x30\x20\x02\x40\x00\x20\x02\x40\x00\x20" \ + "\x02\x40\x00\x20\x02\x20\x04\x20\x02\x20\x04\x20" \ + "\x02\x10\x08\x20\x02\x08\x08\x20\x02\xf0\x07\x20" \ + "\x04\x00\x00\x10\x04\x00\x00\x10\x08\x00\xc0\x08" \ + "\x08\x3c\x30\x08\x10\xe6\x19\x04\x20\x00\x0f\x02" \ + "\x40\x00\x00\x01\x80\x01\xc0\x00\x00\x06\x30\x00" \ + "\x00\xf8\x0f\x00\x00\x00\x00\x00" + +cm_width = 32 +cm_height = 32 + +# cursor bitmap mask +cm_bits = "\x00\x00\x00\x00\x00\xf8\x1f\x00\x00\xfe\x3f\x00" \ + "\x80\x07\xf0\x00\xc0\x01\xc0\x01\x60\x00\x00\x03" \ + "\x30\x00\x00\x06\x18\x00\x00\x0c\x0c\x3e\x3e\x18" \ + "\x0e\x03\xe0\x18\xc6\x00\x00\x31\x07\x1e\x78\x30" \ + "\x03\x0c\x30\x60\x03\x40\x00\x60\x03\x40\x00\x60" \ + "\x03\x40\x00\x60\x03\x20\x04\x60\x03\x20\x04\x60" \ + "\x03\x10\x08\x60\x03\x08\x08\x60\x03\xf0\x07\x60" \ + "\x06\x00\x00\x30\x06\x00\x00\x30\x0c\x00\xc0\x18" \ + "\x0c\x3c\x30\x18\x18\xe6\x19\x0c\x30\x00\x0f\x06" \ + "\x60\x00\x00\x03\xc0\x01\xc0\x01\x80\x07\xf0\x00" \ + "\x00\xfe\x3f\x00\x00\xf8\x0f\x00" + +# The CursorView contains many labels with different cursors. +class CursorView( QWidget ): # cursor view + def __init__( self ): + QWidget.__init__( self ) + # Constructs a cursor view. +#enum CursorShape { ArrowCursor, UpArrowCursor, CrossCursor, WaitCursor, IbeamCursor, SizeVerCursor, SizeHorCursor, SizeBDiagCursor, SizeFDiagCursor, SizeAllCursor, BlankCursor, SplitVCursor, SplitHCursor, PointingHandCursor, ForbiddenCursor, WhatsThisCursor, LastCursor = WhatsThisCursor, BitmapCursor = 24 } + + shape = [ + "ArrowCursor", "UpArrowCursor", "CrossCursor", + "WaitCursor", "IbeamCursor", "SizeVerCursor", + "SizeHorCursor", "SizeBDiagCursor", "SizeFDiagCursor", + "SizeAllCursor", "BlankCursor", "SplitVCursor", + "SplitHCursor", "PointingHandCursor", "ForbiddenCursor", + "WhatsThisCursor" + ] + name = [ + "standard arrow cursor", "upwards arrow", + "crosshair", "hourglass/watch", + "ibeam/text entry", "vertical resize", + "horizontal resize", "diagonal resize (/)", + "diagonal resize (\)", "all directions resize", + "blank/invisible cursor", "vertical splitting", + "horziontal splitting", "a pointing hand", + "a slashed circle", "an arrow with a question mark" + ] + + self.setCaption( "CursorView" ) # set window caption + + grid = QGridLayout( self, 5, 4, 20 ) + + i=0 + for y in range( 0, 4, 1 ) : # create the small labels + for x in range( 0, 4, 1 ) : + label = QLabel( self ) + label.setCursor( QCursor(i) ) + label.setText( shape[i] ); + label.setAlignment( self.AlignCenter ) + label.setFrameStyle( QFrame.Box | QFrame.Raised ) + grid.addWidget( label, x, y ) + QToolTip.add( label, name[i] ) + i += 1 + + cb = QBitmap( cb_width, cb_height, cb_bits, True ) + cm = QBitmap( cm_width, cm_height, cm_bits, True ) + custom = QCursor( cb, cm ) # create bitmap cursor + + label = QLabel( self ) # create the big label + label.setCursor( custom ) + label.setText( "Custom bitmap cursor" ) + QToolTip.add( label, "custom bitmap cursor" ) + label.setAlignment( self.AlignCenter ) + label.setFrameStyle( QFrame.Box | QFrame.Sunken ) + grid.addMultiCellWidget( label, 4, 4, 0, 3 ) + +# Create and display a CursorView. +def main( args ): + a = QApplication(sys.argv) # application object + v = CursorView() # cursor view + v.setCaption( "Qt Example - Cursors" ) + a.setMainWidget( v ) + v.show() + + a.exec_loop() + +if __name__=="__main__": + main(sys.argv) diff --git a/examples3/dclock.py b/examples3/dclock.py new file mode 100755 index 0000000..5382d4f --- /dev/null +++ b/examples3/dclock.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python + +# A port to PyQt of the dclock example from Qt v2.x. + + +import sys, string +from qt import * + + +class DigitalClock(QLCDNumber): + def __init__(self, parent=None, name=None): + QLCDNumber.__init__(self, parent, name) + self.showingColon = 0 + self.setFrameStyle(QFrame.Panel | QFrame.Raised) + self.setLineWidth(2) + self.showTime() + self.normalTimer = self.startTimer(500) + self.showDateTimer = -1 + + def timerEvent(self, e): + if e.timerId() == self.showDateTimer: + self.stopDate() + else: + if self.showDateTimer == -1: + self.showTime() + + def mousePressEvent(self, e): + if e.button() == Qt.LeftButton: + self.showDate() + + def showDate(self): + if self.showDateTimer != -1: + return + d = QDate.currentDate() + self.display('%2d %2d' % (d.month(), d.day())) + self.showDateTimer = self.startTimer(2000) + + def stopDate(self): + self.killTimer(self.showDateTimer) + self.showDateTimer = -1 + self.showTime() + + def showTime(self): + self.showingColon = not self.showingColon + s = list(str(QTime.currentTime().toString())[:5]) #.left(5) + if not self.showingColon: + s[2] = ' ' + if s[0] == '0': + s[0] = ' ' + s = string.join(s,'') + self.display(s) + +a = QApplication(sys.argv) +clock = DigitalClock() +clock.resize(170,80) +a.setMainWidget(clock) +clock.show() +a.exec_loop() diff --git a/examples3/desktop.py b/examples3/desktop.py new file mode 100755 index 0000000..7036248 --- /dev/null +++ b/examples3/desktop.py @@ -0,0 +1,230 @@ +#!/usr/bin/env python + +import sys +from qt import * + +seed = 0.353535353535 +KINDA_RAND_MAX = 32767 + +def kindaRand(): + global seed + seed = seed * 147 + seed = seed - int(seed) + return int(seed*(KINDA_RAND_MAX + 1)) + +velmax = 15 +velmin = 4 + +def velocity(i): + if i == 1 or i == 2: + i = (kindaRand()&0x7fff % velmax)/3 + velmin + else: + i = (kindaRand()&0x7fff % velmax) + velmin + return i + +maxpoints = 5 +maxcurves = 8 + +def poly(): + d = QApplication.desktop() + d.setEraseColor(Qt.white) + xvel = [ 0 ] * maxpoints + yvel = [ 0 ] * maxpoints + head = 0 + tail = -maxcurves + 2 + a = [ QPointArray() ] * maxcurves + r = d.rect() + for i in range(maxcurves): + a[i].resize(maxpoints) + p = a[0] + for i in range(maxpoints): + p.setPoint(i, (kindaRand()&0x7fff) % r.width(), + (kindaRand()&0x7fff) % r.height() ) + xvel[i] = velocity(i) + yvel[i] = velocity(i) + + paint = QPainter() + paint.begin(d) + + for ntimes in range(2000): + paint.setBrush(QColor(kindaRand()%360,180,255, QColor.Hsv)) + paint.drawPolygon(a[head]) + tail = tail + 1 + if tail >= maxcurves: + tail = 0 + minx = r.left() + maxx = r.right() + miny = r.top() + maxy = r.bottom() + p = a[head] + head = head + 1 + if head >= maxcurves: + head = 0 + for i in range(maxpoints): + x, y = p.point(i) + x = x + xvel[i] + y = y + yvel[i] + if x >= maxx: + x = maxx - (x - maxx + 1) + xvel[i] = -velocity(i) + if x <= minx: + x = minx + (minx - x + 1) + xvel[i] = velocity(i) + if y >= maxy: + y = maxy - (y - maxy + 1) + yvel[i] = -velocity(i) + if y <= miny: + y = miny + (miny - y + 1) + yvel[i] = velocity(i) + a[head].setPoint(i, x, y) + paint.end() + +def rotate(): + w = 64 + h = 64 + image = QImage(w, h, 8, 128) + for i in range(128): + image.setColor(i, qRgb(i,0,0)) + for y in range(h): + for x in range(w): + image.setPixel(x,y,(x+y)%128) + + pm = QPixmap() + pm.convertFromImage(image) + pm.setOptimization(QPixmap.BestOptim) + + d = QApplication.desktop() + + for i in range(0,361,2): + m = QWMatrix() + m.rotate(i) + rpm = pm.xForm(m) + d.setErasePixmap(rpm) + d.update() + +def generateStone(pm, c1, c2, c3): + p = QPainter() + p1 = QPen(c1, 0) + p2 = QPen(c2, 0) + p3 = QPen(c3, 0) + + p.begin(pm) + for i in range(pm.width()): + for j in range(pm.height()): + r = kindaRand() + if r < KINDA_RAND_MAX / 3: + p.setPen(p1) + elif r < KINDA_RAND_MAX / 3 * 2: + p.setPen(p2) + else: + p.setPen(p3) + p.drawPoint(i, j) + p.end() + +def drawShadeText(p, x, y, text, topColor, bottomColor, sw=2): + if not p.isActive(): + return + + p.setPen(bottomColor) + p.drawText(x+sw, y+sw, text) + p.setPen(topColor) + p.drawText(x, y, text) + +class DesktopWidget(QWidget): + def __init__(self, s, parent=None, name=''): + QWidget.__init__(self, parent, name, Qt.WType_Desktop | Qt.WPaintDesktop) + self.text = s + self.pm = None + + def paintEvent(self, pe): + c1 = self.eraseColor() + c2 = c1.light(104) + c3 = c1.dark(106) + if not self.pm: + self.pm = QPixmap(64, 64) + generateStone(self.pm, c1, c2, c3) + self.setErasePixmap(self.pm) + self.update() + br = self.fontMetrics().boundingRect(self.text) + offscreen = QPixmap(br.width(), br.height()) + x = self.width()/2 - br.width()/2 + y = self.height()/2 - br.height()/2 + offscreen.fill(self, x, y) + p = QPainter() + p.begin(offscreen) + drawShadeText(p, -br.x(), -br.y(), self.text, c2, c3, 3) + p.end() + bitBlt(self, x, y, offscreen) + +def desktopWidget(s='Trolltech'): + t = DesktopWidget(s) + t.update() + qApp.exec_loop() + +def desktopText(s='Trolltech'): + border = 20 + + c1 = qApp.palette().normal().background() + c2 = c1.light(104) + c3 = c1.dark(106) + + pm = QPixmap(10, 10) + p = QPainter() + p.begin(pm) + r = p.fontMetrics().boundingRect(s) + p.end() + + appWidth = qApp.desktop().width() + appHeight = qApp.desktop().height() + if r.width() > appWidth - border*2: + r.setWidth(appWidth - border*2) + if r.height() > appHeight - border*2: + r.setHeight(appHeight - border*2) + + pm.resize(r.size().width()+border*2,r.size().height()+border*2) + generateStone(pm, c1, c2, c3) + p.begin(pm) + drawShadeText(p, -r.x()+border, -r.y()+border, s, c2, c3) + p.end() + + qApp.desktop().setErasePixmap(pm) + +a = QApplication(sys.argv) +if len(sys.argv) > 1: + f = QFont('charter', 96, QFont.Black) + f.setStyleHint(QFont.Times) + a.setFont(f) + +validOptions = 0 + +if len(sys.argv) == 2: + validOptions = 1 + if sys.argv[1] == '-poly': + poly() + elif sys.argv[1] == '-rotate': + rotate() + elif sys.argv[1] == '-troll': + desktopText() + elif sys.argv[1] == '-trollwidget': + desktopWidget() + else: + validOptions = 0 + +if len(sys.argv) == 3: + validOptions = 1 + if sys.argv[1] == '-shadetext': + desktopText(sys.argv[2]) + elif sys.argv[1] == '-shadewidget': + desktopWidget(sys.argv[2]) + else: + validOptions = 0 + +if not validOptions: + print """Usage: +\tdesktop -poly +\tdesktop -rotate +\tdesktop -troll +\tdesktop -trollwidget +\tdesktop -shadetext +\tdesktop -shadewidget """ + rotate() diff --git a/examples3/dirview.py b/examples3/dirview.py new file mode 100755 index 0000000..eb5393e --- /dev/null +++ b/examples3/dirview.py @@ -0,0 +1,452 @@ +#!/usr/bin/env python + +"""************************************************************************** +** $Id: dirview.py,v 1.7 2005/11/14 17:21:26 phil Exp $ +** +** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. +** Some corrections by M. Biermaier (http://www.office-m.at) +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +***************************************************************************""" + +import sys +from qt import * + +folder_closed_xpm = [ + "16 16 9 1", + "g c #808080", + "b c #c0c000", + "e c #c0c0c0", + "# c #000000", + "c c #ffff00", + ". c None", + "a c #585858", + "f c #a0a0a4", + "d c #ffffff", + "..###...........", + ".#abc##.........", + ".#daabc#####....", + ".#ddeaabbccc#...", + ".#dedeeabbbba...", + ".#edeeeeaaaab#..", + ".#deeeeeeefe#ba.", + ".#eeeeeeefef#ba.", + ".#eeeeeefeff#ba.", + ".#eeeeefefff#ba.", + ".##geefeffff#ba.", + "...##gefffff#ba.", + ".....##fffff#ba.", + ".......##fff#b##", + ".........##f#b##", + "...........####." +] + +folder_open_xpm = [ + "16 16 11 1", + "# c #000000", + "g c #c0c0c0", + "e c #303030", + "a c #ffa858", + "b c #808080", + "d c #a0a0a4", + "f c #585858", + "c c #ffdca8", + "h c #dcdcdc", + "i c #ffffff", + ". c None", + "....###.........", + "....#ab##.......", + "....#acab####...", + "###.#acccccca#..", + "#ddefaaaccccca#.", + "#bdddbaaaacccab#", + ".eddddbbaaaacab#", + ".#bddggdbbaaaab#", + "..edgdggggbbaab#", + "..#bgggghghdaab#", + "...ebhggghicfab#", + "....#edhhiiidab#", + "......#egiiicfb#", + "........#egiibb#", + "..........#egib#", + "............#ee#" +] + +folder_locked = [ + "16 16 10 1", + "h c #808080", + "b c #ffa858", + "f c #c0c0c0", + "e c #c05800", + "# c #000000", + "c c #ffdca8", + ". c None", + "a c #585858", + "g c #a0a0a4", + "d c #ffffff", + "..#a#...........", + ".#abc####.......", + ".#daa#eee#......", + ".#ddf#e##b#.....", + ".#dfd#e#bcb##...", + ".#fdccc#daaab#..", + ".#dfbbbccgfg#ba.", + ".#ffb#ebbfgg#ba.", + ".#ffbbe#bggg#ba.", + ".#fffbbebggg#ba.", + ".##hf#ebbggg#ba.", + "...###e#gggg#ba.", + ".....#e#gggg#ba.", + "......###ggg#b##", + ".........##g#b##", + "...........####." +] + +pix_file = [ + "16 16 7 1", + "# c #000000", + "b c #ffffff", + "e c #000000", + "d c #404000", + "c c #c0c000", + "a c #ffffc0", + ". c None", + "................", + ".........#......", + "......#.#a##....", + ".....#b#bbba##..", + "....#b#bbbabbb#.", + "...#b#bba##bb#..", + "..#b#abb#bb##...", + ".#a#aab#bbbab##.", + "#a#aaa#bcbbbbbb#", + "#ccdc#bcbbcbbb#.", + ".##c#bcbbcabb#..", + "...#acbacbbbe...", + "..#aaaacaba#....", + "...##aaaaa#.....", + ".....##aa#......", + ".......##......." +] + +folderLocked = None +folderClosed = None +folderOpened = None +fileNormal = None + +class FileItem( QListViewItem ) : + def __init__( self, parent=None, s1=QString.null, s2=QString.null ): + QListViewItem.__init__( self, parent, s1, s2 ) + self.pix = None + + def setPixmap( self, p ) : + self.pix = p + self.setup() + self.widthChanged( 0 ) + self.invalidateHeight() + self.repaint() + + def pixmap( self, i ) : + if i : return None + else : return self.pix; + +# Class Directory +class Directory( QListViewItem ) : + def __init__( self, parent=None, filename=QString.null, col2=QString.null ): + QListViewItem.__init__( self, parent, filename, col2 ) + self.pix = None + global folderLocked, folderClosed, folderOpened, fileNormal + self.showDirsOnly = False + if isinstance(parent, QListView): + self.p = None + self.showDirsOnly = parent.showDirsOnly() + self.f = QFile( QString('/') ) + else: + self.p = parent + self.showDirsOnly = parent.showDirsOnly + self.f = QFile( QString(filename) ) + + self.readable = QDir( self.fullName() ).isReadable() + if not self.readable : self.setPixmap( folderLocked ) + else : self.setPixmap( folderClosed ) + + def setPixmap( self, px ) : + self.pix = px + self.setup() + self.widthChanged( 0 ) + self.invalidateHeight() + self.repaint() + + def pixmap( self, i ) : + if i : return None + else : return self.pix + + def setOpen( self, o ) : + if o : self.setPixmap( folderOpened ) + else : self.setPixmap( folderClosed ) + + if o and not self.childCount() : + s = QString( self.fullName() ) + thisDir = QDir( s ) + if not thisDir.isReadable() : + self.readable = False + self.setExpandable( False ) + return + + self.listView().setUpdatesEnabled( False ) + files = thisDir.entryInfoList() + if files : + fi = QFileInfo() + for it in files: + fi = it + if str(fi.fileName()) == "." or str(fi.fileName()) == ".." : + continue # nothing + elif fi.isSymLink() and not self.showDirsOnly : + item = FileItem( self, fi.fileName(), "Symbolic Link" ) + item.setPixmap( fileNormal ) + elif fi.isDir() : + Directory( self, fi.fileName() ) + elif not self.showDirsOnly : + if fi.isFile() : item = FileItem( self, fi.fileName(), "File" ) + else : item = FileItem( self, fi.fileName(), "Special" ) + item.setPixmap( fileNormal ) + + self.listView().setUpdatesEnabled( True ) + QListViewItem.setOpen( self, o ) + + def setup( self ): + self.setExpandable( True ) + QListViewItem.setup( self ) + + def fullName( self ): + s = QString() + if self.p : + s = self.p.fullName() + s.append( self.f.name() ) + s.append( "/" ) + else : + s = self.f.name() + return s + + def text( self, column ) : + if column == 0 : return self.f.name() + elif self.readable : return "Directory" + else : return "Unreadable Directory" + +# Class DirectoryView + +class DirectoryView( QListView ): + def __init__( self, parent=None, name=None, sdo=False ): + QListView.__init__( self, parent, name ) + self.dirsOnly = sdo + self.oldCurrent = 0 + self.dropItem = 0 + self.presspos = QPoint(0,0) + self.mousePressed = False + global folderLocked, folderClosed, folderOpened, fileNormal #= QPixmap() + self.autoopenTime = 750 + + self.autoopen_timer = QTimer( self ) + if not folderLocked : + folderLocked = QPixmap( folder_locked ) + folderClosed = QPixmap( folder_closed_xpm ) + folderOpened = QPixmap( folder_open_xpm ) + fileNormal = QPixmap( pix_file ) + + self.connect( self, SIGNAL("doubleClicked(QListViewItem *)"), + self.slotFolderSelected ) + self.connect( self, SIGNAL("returnPressed(QListViewItem *)"), + self.slotFolderSelected ) + + self.setAcceptDrops( True ) + self.viewport().setAcceptDrops( True ) + + self.connect( self.autoopen_timer, SIGNAL("timeout()"), self.openFolder ) + + def showDirsOnly( self ): + return self.dirsOnly + + def slotFolderSelected( self, i ): + if not i or not self.showDirsOnly(): + return + dir = i + self.emit( PYSIGNAL("folderSelected(const QString &)"), (dir.fullName(), ) ) + + def openFolder( self ): + self.autoopen_timer.stop() + if self.dropItem and not self.dropItem.isOpen(): + self.dropItem.setOpen( True ) + self.dropItem.repaint() + + def contentsDragEnterEvent( self, e ): + if not QUriDrag.canDecode(e) : + e.ignore() + return + self.oldCurrent = self.currentItem() + i = self.itemAt( self.contentsToViewport(e.pos()) ) + if i : + self.dropItem = i + self.autoopen_timer.start( self.autoopenTime ) + + def contentsDragMoveEvent( self, e ) : + if not QUriDrag.canDecode(e) : + e.ignore() + return + vp = self.contentsToViewport( e.pos() ) + i = self.itemAt( vp ) + if i : + self.setSelected( i, True ) + e.accept() + if i != self.dropItem : + self.autoopen_timer.stop() + self.dropItem = i + self.autoopen_timer.start( self.autoopenTime ) + + if e.action() == QDropEvent.Copy: + pass + elif e.action() == QDropEvent.Move: + e.acceptAction() + elif e.action() == QDropEvent.Link: + e.acceptAction() + else: + pass + else : + e.ignore() + self.autoopen_timer.stop() + self.dropItem = 0 + + def contentsDragLeaveEvent( self, QDragLeaveEvent ) : + self.autoopen_timer.stop() + self.dropItem = 0 + + self.setCurrentItem( self.oldCurrent ) + self.setSelected( self.oldCurrent, True ) + + def contentsDropEvent( self, e ): + self.autoopen_timer.stop() + if not QUriDrag.canDecode(e) : + e.ignore() + return + item = self.itemAt( self.contentsToViewport(e.pos()) ) + if item : + lst = QStringList() + QUriDrag.decodeLocalFiles( e, lst ) + if e.action() == QDropEvent.Copy: + s = QString("Copy") + elif e.action() == QDropEvent.Move: + s = QString("Move") + e.acceptAction() + elif e.action() == QDropEvent.Link: + s = QString("Link") + e.acceptAction() + else: + s = QString("Unknown") + + s += "\n\n" + e.accept() + + for filename in lst: + s += filename + s += "\n" + + s += "\nTo\n\n " + s += self.fullPath(item) + QMessageBox.information( self, "Drop target", s, "Not implemented" ) + else : + e.ignore() + + def fullPath( self, item ): + fullpath = QString( item.text(0) ) + item = item.parent() + while item: + newpath = item.text(0) + + if item.parent(): + newpath += "/" + + newpath += fullpath + fullpath = newpath + item = item.parent() + + return fullpath + + def contentsMousePressEvent( self, e ) : + QListView.contentsMousePressEvent( self, e ) + p = QPoint( self.contentsToViewport( e.pos() ) ) + i = self.itemAt( p ) + if i : + # if the user clicked into the root decoration of the item, don't try to start a drag! + if self.rootIsDecorated(): isdecorated = 1 + else : isdecorated = 0 + if p.x() > self.header().sectionPos( self.header().mapToIndex( 0 )) + self.treeStepSize() * ( i.depth() + isdecorated + self.itemMargin() or + p.x() < self.header().sectionPos( self.header().mapToIndex( 0 ) ) ) : + self.presspos.setX(e.pos().x()) + self.presspos.setY(e.pos().y()) + self.mousePressed = True + + def contentsMouseMoveEvent( self, e ): + offset = QPoint( self.presspos.x() - e.pos().x(), + self.presspos.y() - e.pos().y() ) + if self.mousePressed and (offset).manhattanLength() > QApplication.startDragDistance() : + self.mousePressed = False + item = self.itemAt( self.contentsToViewport(self.presspos) ) + if item : + source = self.fullPath(item) + if QFile.exists(source) : + ud = QUriDrag(self.viewport()) + ud.setFileNames( QStringList (source) ) + if ud.drag() : + QMessageBox.information( self, "Drag source", + QString("Delete ")+source, "Not implemented" ) + + def contentsMouseReleaseEvent( self, QMouseEvent ): + self.mousePressed = False + + def setDir( self, s ): + it = QListViewItem( self ) + it.setOpen(False) + thisDir = QDir( s ) + it = QListViewItem( self ) + it.setOpen(False) + lst = QStringList( QStringList.split( "/", s ) ) + listview2 = [] + listview2.extend( lst ) + + item = self.firstChild() + for it2 in listview2 : + while item : + if item.text( 0 ) == it2 : + item.setOpen( True ) + break + item = item.itemBelow() + if item: + self.setCurrentItem( item ) + +def main( args ): + a = QApplication( args ) + + mw = DirectoryView() + mw.addColumn( "Name" ) + mw.addColumn( "Type" ) + mw.setTreeStepSize( 20 ) + + roots = QDir.drives() + if roots : + for it in roots: + fi = it + root = Directory( mw, fi.filePath() ) + if roots.count(it) <= 1 : + root.setOpen( True ) # be interesting + + mw.resize( 400, 400 ) + mw.setCaption( "Qt Example - Directory Browser" ) + mw.setAllColumnsShowFocus( True ) + a.setMainWidget( mw ) + mw.show() + + a.exec_loop() + +if __name__=="__main__": + main(sys.argv) diff --git a/examples3/dragdrop.py b/examples3/dragdrop.py new file mode 100755 index 0000000..4cc8c73 --- /dev/null +++ b/examples3/dragdrop.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +# Ported to PyQt by Issac Trotts on Jan 1, 2002 + +import sys +from qt import * + +import dropsite, secret + + +def addStuff( parent, yn_image, yn_secret = 0 ): + tll = QVBoxLayout( parent, 10 ) + d = dropsite.DropSite( parent, 'dropsite' ) + d.setFrameStyle( QFrame.Sunken + QFrame.WinPanel ) + tll.addWidget( d ) + if yn_image: + stuff = QPixmap() + if not stuff.load( "trolltech.bmp" ): + stuff = QPixmap(20,20) + stuff.fill(Qt.green) + d.setPixmap( stuff ) + else: + d.setText("Drag and Drop") + d.setFont(QFont("Helvetica",18)) + if secret: + s = secret.SecretSource( 42, parent ) + tll.addWidget( s ) + + format = QLabel( "\n\n\n\nNone\n\n\n\n", parent ) + tll.addWidget( format ) + tll.activate() + parent.resize( parent.sizeHint() ) + + QObject.connect( d, PYSIGNAL('message(QString &)'), + format, SLOT('setText(QString &)') ) + + +app = QApplication( sys.argv ) + +mw = QWidget() +addStuff( mw, 1 ) +mw.setCaption( "Qt Example - Drag and Drop" ) +mw.show() + +mw2 = QWidget() +addStuff( mw2, 0 ) +mw2.setCaption( "Qt Example - Drag and Drop" ) +mw2.show() + +mw3 = QWidget() +addStuff( mw3, 1, 1 ) +mw3.setCaption( "Qt Example - Drag and Drop" ) +mw3.show() + +QObject.connect(qApp,SIGNAL('lastWindowClosed()'),qApp,SLOT('quit()')) + +app.exec_loop() diff --git a/examples3/drawlines.py b/examples3/drawlines.py new file mode 100755 index 0000000..3e21db7 --- /dev/null +++ b/examples3/drawlines.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python + +import sys, random +from qt import * + +TRUE = 1 +FALSE = 0 + +MAXPOINTS = 2000; # maximum number of points +MAXCOLORS = 40; + +# +# ConnectWidget - draws connected lines +# + +class ConnectWidget(QWidget): + def __init__(self): + QWidget.__init__(self) + self.setEraseColor( Qt.white ) # white background + self.count = 0; + self.down = FALSE + + self.points = [] + self.colors = [] + + for i in range(MAXPOINTS): # init arrays + self.points.append(QPoint()) + for i in range(MAXCOLORS): + self.colors.append(QColor( random.randint(0,255), random.randint(0,255), random.randint(0,255) )) + +# +# Handles paint events for the connect widget. +# + def paintEvent(self, pe): + paint = QPainter( self ) + for i in range(self.count-1): # connect all points + for j in range(i+1, self.count): + paint.setPen( self.colors[random.randint(0,MAXCOLORS-1)] ) # set random pen color + paint.drawLine( self.points[i], self.points[j] ) # draw line + +# +# Handles mouse press events for the connect widget. +# + def mousePressEvent(self, me): + self.down = TRUE + self.count = 0 # start recording points + self.erase() # erase widget contents + +# +# Handles mouse release events for the connect widget. +# + def mouseReleaseEvent(self, me ): + self.down = FALSE # done recording points + self.update() # draw the lines + +# +# Handles mouse move events for the connect widget. +# + def mouseMoveEvent(self, me): + if self.down and self.count < MAXPOINTS: + paint = QPainter( self ) + self.points[self.count] = QPoint(me.pos()) # add point + paint.drawPoint( me.pos() ) # plot point + self.count = self.count+1 + +# +# Create and display a ConnectWidget. +# +a = QApplication( sys.argv ) +connect = ConnectWidget() +connect.setCaption( "PyQt Example - Draw lines") +a.setMainWidget( connect ) +connect.show() +a.exec_loop() diff --git a/examples3/dropsite.py b/examples3/dropsite.py new file mode 100644 index 0000000..11d9707 --- /dev/null +++ b/examples3/dropsite.py @@ -0,0 +1,96 @@ +# This is part of the dragdrop example. + + +from qt import * + +import secret + + +class DropSite(QLabel): + def __init__(self, parent=None, name=None): + QLabel.__init__( self, parent, name ) + self.setAcceptDrops(1) + + # this is a normal event + def mousePressEvent( self, e ): + if ( self.pixmap() ) : + drobj = QImageDrag( self.pixmap().convertToImage(), self ) + pm = QPixmap() + pm.convertFromImage(self.pixmap().convertToImage().smoothScale( + self.pixmap().width()/3,self.pixmap().height()/3)) + drobj.setPixmap(pm,QPoint(-5,-7)) + else : + drobj = QTextDrag( self.text(), self ) + drobj.dragCopy() + + def backgroundColorChange( self, qcolor ): + # Reduce flicker by using repaint() rather than update() + self.repaint() + + def dragMoveEvent( self, e ): + # Check if you want the drag at e.pos()... + # Give the user some feedback... + pass + + def dragEnterEvent( self, e ): + # Check if you want the drag... + if (secret.canDecode( e ) or + QTextDrag.canDecode( e ) or + QImageDrag.canDecode( e ) or + QUriDrag.canDecode( e )): + e.accept() + + # Give the user some feedback... + t = '' + i = 0 + while e.format( i ): + if ( t != '' ): + t += "\n" + t += str(e.format( i )) + i += 1 + self.emit(PYSIGNAL('message(QString &)'), (QString(t),)) + self.setEraseColor(Qt.white) + + def dragLeaveEvent( self, QDragLeaveEvent ): + # Give the user some feedback... + self.emit(PYSIGNAL('message(QString &)'), (QString(''),)) + self.setEraseColor(Qt.lightGray) + + def dropEvent( self, e ): + self.setEraseColor(Qt.lightGray) + # Try to decode to the data you understand... + str = QString() + if ( QTextDrag.decode( e, str ) ) : + self.setText( str ) + self.setMinimumSize( self.minimumSize().expandedTo(self.sizeHint()) ) + return + + pm = QPixmap() + if ( QImageDrag.decode( e, pm ) ) : + self.setPixmap( pm ) + self.setMinimumSize(self.minimumSize().expandedTo(self.sizeHint())) + return + + # QStrList strings + #strings = QStrList() + strings = [] + if ( QUriDrag.decode( e, strings ) ) : + m = QString("Full URLs:\n") + for u in strings: + m = m + " " + u + '\n' + # QStringList files + files = [] + if ( QUriDrag.decodeLocalFiles( e, files ) ) : + m += "Files:\n" + # for (QStringList.Iterator i=files.begin() i!=files.end() ++i) + for i in files: + m = m + " " + i + '\n' + self.setText( m ) + self.setMinimumSize(self.minimumSize().expandedTo(self.sizeHint())) + return + + str = secret.decode( e ) + if str: + self.setText( str ) + self.setMinimumSize(self.minimumSize().expandedTo(self.sizeHint())) + return diff --git a/examples3/fileopen.xpm b/examples3/fileopen.xpm new file mode 100644 index 0000000..880417e --- /dev/null +++ b/examples3/fileopen.xpm @@ -0,0 +1,22 @@ +/* XPM */ +static const char *fileopen[] = { +" 16 13 5 1", +". c #040404", +"# c #808304", +"a c None", +"b c #f3f704", +"c c #f3f7f3", +"aaaaaaaaa...aaaa", +"aaaaaaaa.aaa.a.a", +"aaaaaaaaaaaaa..a", +"a...aaaaaaaa...a", +".bcb.......aaaaa", +".cbcbcbcbc.aaaaa", +".bcbcbcbcb.aaaaa", +".cbcb...........", +".bcb.#########.a", +".cb.#########.aa", +".b.#########.aaa", +"..#########.aaaa", +"...........aaaaa" +}; diff --git a/examples3/fontdisplayer.py b/examples3/fontdisplayer.py new file mode 100755 index 0000000..f6015df --- /dev/null +++ b/examples3/fontdisplayer.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python + +"""************************************************************************** +** $Id: fontdisplayer.py,v 1.2 2004/07/19 18:41:53 phil Exp $ +** +** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +***************************************************************************""" + +import sys +from qt import * + +class FontRowTable( QFrame ): + def __init__( self, parent=None, name=None ): + QFrame.__init__( self, parent, name ) + + self.setBackgroundMode(self.PaletteBase) + self.setFrameStyle(self.Panel|self.Sunken) + self.setMargin(8) + self.setRow(0) + self.row = 0 + self.tablefont = QFont( QApplication.font() ) + + def sizeHint( self ) : + width = 16*self.cellSize().width()+QSize(2,2).width()*(self.margin()+self.frameWidth()) + height = 16*self.cellSize().height()+QSize(2,2).height()*(self.margin()+self.frameWidth()) + return QSize(width,height) + + def cellSize( self ) : + fm = self.fontMetrics() + return QSize( fm.maxWidth(), fm.lineSpacing() + 1 ) + + def paintEvent( self, e ): + QFrame.paintEvent(self, e) + p = QPainter(self) + p.setClipRegion(e.region()) + r = QRect(e.rect()) + fm = self.fontMetrics() + ml = self.frameWidth() + self.margin() + 1 + max(0,-fm.minLeftBearing()) + mt = self.frameWidth() + self.margin() + cell = QSize((self.width()-15-ml)/16,(self.height()-15-mt)/16) + + if not cell.width() or not cell.height() : + return + + mini = r.left() / cell.width() + maxi = (r.right()+cell.width()-1) / cell.width() + minj = r.top() / cell.height() + maxj = (r.bottom()+cell.height()-1) / cell.height() + + h = fm.height() + + body = QColor(255,255,192); + negative = QColor(255,192,192); + positive = QColor(192,192,255); + rnegative = QColor(255,128,128); + rpositive = QColor(128,128,255); + + for j in range(minj, maxj+1, 1) : + for i in range(mini, maxi+1, 1) : + if i < 16 and j < 16 : + x = i*cell.width() + y = j*cell.height() + + ch = QChar(j*16+i) #,self.row) # just accept one argument!!! + + if fm.inFont(ch) : + w = fm.width(ch) + l = fm.leftBearing(ch) + r = fm.rightBearing(ch) + + x += ml + y += mt+h + + p.fillRect(x,y,w,-h,QBrush(body)) + + if w : + if l : + if l < 0: sign = negative + else: sign = positive + if l > 0: lsign = 0 + else: lsign = 1 + p.fillRect(x+lsign, y-h/2, abs(l),-h/2, QBrush(sign)) + if r : + if r < 0: sign = rnegative + else: sign = rpositive + if r > 0: rsign = r + else: rsign = 0 + p.fillRect(x+w-rsign,y+2, abs(r),-h/2, QBrush(sign)) + s = QString( ch ) + p.setPen(QPen(Qt.black)) + p.drawText(x,y,s) + + def setRow( self, r ) : + self.row = r + + fm = self.fontMetrics() + str = " minLB=%d minRB=%d maxW=%d" % (fm.minLeftBearing(), fm.minRightBearing(), fm.maxWidth()) + self.emit( PYSIGNAL("fontInformation"), ( QString(str), ) ) + self.update() + + def chooseFont( self ) : + ok = 0 + oldfont = QFont( self.tablefont ) + self.tablefont, ok = QFontDialog.getFont(oldfont, self) + if ok: + self.setFont(self.tablefont) + else: + self.tablefont = oldfont + +class FontDisplayer( QMainWindow ) : + def __init__( self, parent=None, name=None ): + QMainWindow.__init__( self, parent, name ) + table = FontRowTable(self) + controls = QToolBar(self) + + QLabel(self.tr("Row:"), controls) + self.row = QSpinBox(0,255,1,controls) + controls.addSeparator() + fontbutton = QPushButton(self.tr("Font..."), controls) + status = QStatusBar(self) + + self.connect( self.row, SIGNAL("valueChanged(int)"), table.setRow ) + self.connect( fontbutton, SIGNAL("clicked()"), table.chooseFont ) + self.connect( table, PYSIGNAL("fontInformation"), + status, SLOT("message(const QString&)") ) + table.setRow(0) + self.setCentralWidget(table) + +def main( args ): + # Use an interesting font + QApplication.setFont(QFont("unifont",16)) + app = QApplication(sys.argv) + + m = FontDisplayer() + sh = QSize( m.centralWidget().sizeHint() ) + m.resize(sh.width(), sh.height() + 3 * m.statusBar().height()) + app.setMainWidget(m); + m.setCaption("Qt Example - QFD"); + m.show() + + app.exec_loop() + +if __name__=="__main__": + main(sys.argv) diff --git a/examples3/fonts.py b/examples3/fonts.py new file mode 100755 index 0000000..d3166ce --- /dev/null +++ b/examples3/fonts.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python + +"""************************************************************************** +** $Id: fonts.py,v 1.1 2003/07/01 14:18:37 phil Exp $ +** +** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +***************************************************************************""" + +import sys +from qt import * + +class Viewer( QWidget ): + def __init__( self ): + QWidget.__init__( self ) + + self.setFontSubstitutions() + + #greeting_heb = QString.fromUtf8( "\327\251\327\234\327\225\327\235" ) + greeting_heb = unicode( '\327\251\327\234\327\225\327\235','utf8' ) + #greeting_ru = QString.fromUtf8( "\320\227\320\264\321\200\320\260\320\262\321\201\321\202\320\262\321\203\320\271\321\202\320\265" ) + greeting_ru = unicode('\320\227\320\264\321\200\320\260\320\262\321\201\321\202\320\262\321\203\320\271\321\202\320\265','utf8' ) + greeting_en = "Hello" + + self.greetings = QTextView( self, "textview" ) + + self.greetings.setText( greeting_en + "\n" + + greeting_ru + "\n" + + greeting_heb ) + + self.fontInfo = QTextView( self, "fontinfo" ) + + self.setDefault() + + self.defaultButton = QPushButton( "Default", self, "pushbutton1" ) + self.defaultButton.setFont( QFont( "times" ) ) + self.connect( self.defaultButton, SIGNAL("clicked()"), self.setDefault ) + + self.sansSerifButton = QPushButton( "Sans Serif", self, "pushbutton2" ) + self.sansSerifButton.setFont( QFont( "Helvetica", 12 ) ) + self.connect( self.sansSerifButton, SIGNAL("clicked()"), self.setSansSerif ) + + self.italicsButton = QPushButton( "Italics", self, "pushbutton3" ) + self.italicsButton.setFont( QFont( "lucida", 12, QFont.Bold, True ) ) + self.connect( self.italicsButton, SIGNAL("clicked()"), self.setItalics ) + + self.layout() + + def setDefault( self ): + font = QFont( "Bavaria" ) + font.setPointSize( 24 ) + font.setWeight( QFont.Bold ) + font.setUnderline( True ) + + self.greetings.setFont( font ) + + self.showFontInfo( font ) + + def setSansSerif( self ): + font = QFont( "Newyork", 18 ) + font.setStyleHint( QFont.SansSerif ) + + self.greetings.setFont( font ) + + self.showFontInfo( font ) + + def setItalics( self ): + font = QFont( "Tokyo" ) + font.setPointSize( 32 ) + font.setWeight( QFont.Bold ) + font.setItalic( True ) + + self.greetings.setFont( font ) + + self.showFontInfo( font ) + + def showFontInfo( self, font ): + info = QFontInfo( font ) + + messageText = "Font requested: \"" + str(font.family()) + "\" " \ + + str(QString.number( font.pointSize() )) + "pt
" \ + + "Font used: \"" + str(info.family()) + "\" " \ + + str(QString.number( info.pointSize() )) + "pt

" + + if not self.substitutes.isEmpty() : + messageText += "The following substitutions exist for " + \ + str(font.family()) + ":

    " + for i in self.substitutes : + messageText += "
  • \"" + str(i) + "\"" + messageText += "
"; + else : + messageText += "No substitutions exist for " + \ + str(font.family()) + "." + + self.fontInfo.setText( messageText ) + + def setFontSubstitutions( self ): + self.substitutes = QStringList() + self.substitutes.append( "Times" ) + self.substitutes.append( "Mincho" ) + self.substitutes.append( "Arabic Newspaper" ) + self.substitutes.append( "crox" ) + #QFont.insertSubstitutions( "Bavaria", self.substitutes ) + QFont.insertSubstitution( "Bavaria", "Times" ) + QFont.insertSubstitution( "Tokyo", "Lucida" ) + + # For those who prefer to use Qt Designer for creating GUIs + # the following function might not be of particular interest: + # all it does is creating the widget layout. + def layout( self ): + textViewContainer = QHBoxLayout() + textViewContainer.addWidget( self.greetings ) + textViewContainer.addWidget( self.fontInfo ) + + buttonContainer = QHBoxLayout() + buttonContainer.addWidget( self.defaultButton ) + buttonContainer.addWidget( self.sansSerifButton ) + buttonContainer.addWidget( self.italicsButton ) + + maxButtonHeight = self.defaultButton.height() + + if self.sansSerifButton.height() > maxButtonHeight : + maxButtonHeight = self.sansSerifButton.height() + if self.italicsButton.height() > maxButtonHeight : + maxButtonHeight = self.italicsButton.height() + + self.defaultButton.setFixedHeight( maxButtonHeight ) + self.sansSerifButton.setFixedHeight( maxButtonHeight ) + self.italicsButton.setFixedHeight( maxButtonHeight ) + + container = QVBoxLayout( self ) + container.addLayout( textViewContainer ) + container.addLayout( buttonContainer ) + + self.resize( 700, 250 ) + +def main( args ): + app = QApplication(sys.argv) # application object + + textViewer = Viewer() + textViewer.setCaption( "Qt Example - Simple QFont Demo" ) + app.setMainWidget( textViewer ) + textViewer.show() + + app.exec_loop() + +if __name__=="__main__": + main(sys.argv) diff --git a/examples3/gears.py b/examples3/gears.py new file mode 100755 index 0000000..c89a7a2 --- /dev/null +++ b/examples3/gears.py @@ -0,0 +1,235 @@ +#!/usr/bin/env python + + +import sys +import math +from qt import * +from qtgl import * +from OpenGL.GL import * + +def gear(inner_radius,outer_radius,width,teeth,tooth_depth): + r0 = inner_radius + r1 = outer_radius - tooth_depth/2.0 + r2 = outer_radius + tooth_depth/2.0 + + da = 2.0*math.pi/teeth/4.0 + + glShadeModel(GL_FLAT) + + glNormal3f(0.0,0.0,1.0) + + # draw front face + + glBegin(GL_QUAD_STRIP) + + for i in range(teeth+1): + angle = i * 2.0*math.pi/teeth + glVertex3f(r0*math.cos(angle), r0*math.sin(angle), width*0.5 ) + glVertex3f(r1*math.cos(angle), r1*math.sin(angle), width*0.5 ) + glVertex3f(r0*math.cos(angle), r0*math.sin(angle), width*0.5 ) + glVertex3f(r1*math.cos(angle+3*da), r1*math.sin(angle+3*da), width*0.5 ) + + glEnd() + + # draw front sides of teeth + + da = 2.0*math.pi/teeth/4.0 + + glBegin(GL_QUADS) + + for i in range(teeth): + angle = i*2.0*math.pi/teeth + + glVertex3f( r1*math.cos(angle), r1*math.sin(angle), width*0.5 ) + glVertex3f( r2*math.cos(angle+da), r2*math.sin(angle+da), width*0.5 ) + glVertex3f( r2*math.cos(angle+2*da), r2*math.sin(angle+2*da), width*0.5 ) + glVertex3f( r1*math.cos(angle+3*da), r1*math.sin(angle+3*da), width*0.5 ) + + glEnd() + + + glNormal3f( 0.0, 0.0, -1.0 ) + + # draw back face + + glBegin( GL_QUAD_STRIP ) + + for i in range(teeth+1): + angle = i*2.0*math.pi/teeth + + glVertex3f( r1*math.cos(angle), r1*math.sin(angle), -width*0.5 ) + glVertex3f( r0*math.cos(angle), r0*math.sin(angle), -width*0.5 ) + glVertex3f( r1*math.cos(angle+3*da), r1*math.sin(angle+3*da), -width*0.5 ) + glVertex3f( r0*math.cos(angle), r0*math.sin(angle), -width*0.5 ) + + glEnd() + + # draw back sides of teeth + + da = 2.0*math.pi/teeth/4.0 + + glBegin( GL_QUADS ) + + for i in range(teeth): + angle = i*2.0*math.pi/teeth + + glVertex3f( r1*math.cos(angle+3*da), r1*math.sin(angle+3*da), -width*0.5 ) + glVertex3f( r2*math.cos(angle+2*da), r2*math.sin(angle+2*da), -width*0.5 ) + glVertex3f( r2*math.cos(angle+da), r2*math.sin(angle+da), -width*0.5 ) + glVertex3f( r1*math.cos(angle), r1*math.sin(angle), -width*0.5 ) + + glEnd() + + # draw outward faces of teeth + + glBegin( GL_QUAD_STRIP ) + + for i in range(teeth): + angle = i*2.0*math.pi/teeth + + glVertex3f( r1*math.cos(angle), r1*math.sin(angle), width*0.5 ) + glVertex3f( r1*math.cos(angle), r1*math.sin(angle), -width*0.5 ) + + u = r2*math.cos(angle+da) - r1*math.cos(angle) + v = r2*math.sin(angle+da) - r1*math.sin(angle) + + len = math.sqrt( u*u + v*v ) + u /= len + v /= len + glNormal3f( v, -u, 0.0 ) + glVertex3f( r2*math.cos(angle+da), r2*math.sin(angle+da), width*0.5 ) + glVertex3f( r2*math.cos(angle+da), r2*math.sin(angle+da), -width*0.5 ) + glNormal3f( math.cos(angle), math.sin(angle), 0.0 ) + glVertex3f( r2*math.cos(angle+2*da), r2*math.sin(angle+2*da), width*0.5 ) + glVertex3f( r2*math.cos(angle+2*da), r2*math.sin(angle+2*da), -width*0.5 ) + u = r1*math.cos(angle+3*da) - r2*math.cos(angle+2*da) + v = r1*math.sin(angle+3*da) - r2*math.sin(angle+2*da) + glNormal3f( v, -u, 0.0 ) + glVertex3f( r1*math.cos(angle+3*da), r1*math.sin(angle+3*da), width*0.5 ) + glVertex3f( r1*math.cos(angle+3*da), r1*math.sin(angle+3*da), -width*0.5 ) + glNormal3f( math.cos(angle), math.sin(angle), 0.0 ) + + glVertex3f( r1*math.cos(0.0), r1*math.sin(0.0), width*0.5 ) + glVertex3f( r1*math.cos(0.0), r1*math.sin(0.0), -width*0.5 ) + + glEnd() + + glShadeModel (GL_SMOOTH) + + # draw inside radius cylinder + + glBegin( GL_QUAD_STRIP ) + + for i in range(teeth+1): + angle = i * 2.0*math.pi / teeth + glNormal3f( -math.cos(angle), -math.sin(angle), 0.0 ) + glVertex3f( r0*math.cos(angle), r0*math.sin(angle), -width*0.5 ) + glVertex3f( r0*math.cos(angle), r0*math.sin(angle), width*0.5 ) + + glEnd() + +############################################################################## +class GearWidget(QGLWidget): + def __init__(self,parent=None,name=None): + QGLWidget.__init__(self,parent,name) + + self.angle=0.0 + self.view_rotx=0.0 + self.view_roty=0.0 + self.view_rotz=0.0 + + self.startTimer(10) + + def timerEvent(self,event): + self.updateGL() + + def paintGL(self): + self.angle = self.angle + 2.0 + self.view_rotx = self.view_rotx + 1.0 + self.view_roty = self.view_roty + 3.0 + self.view_rotz = self.view_rotz + 2.0 + + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) + + glPushMatrix() + glRotatef( self.view_rotx, 1.0, 0.0, 0.0 ) + glRotatef( self.view_roty, 0.0, 1.0, 0.0 ) + glRotatef( self.view_rotz, 0.0, 0.0, 1.0 ) + + glPushMatrix() + glTranslatef( -3.0, -2.0, 0.0 ) + glRotatef( self.angle, 0.0, 0.0, 1.0 ) + glCallList(self.gear1) + glPopMatrix() + + glPushMatrix() + glTranslatef( 3.1, -2.0, 0.0 ) + glRotatef( -2.0*self.angle-9.0, 0.0, 0.0, 1.0 ) + glCallList(self.gear2) + glPopMatrix() + + glPushMatrix() + glTranslatef( -3.1, 2.2, -1.8 ) + glRotatef( 90.0, 1.0, 0.0, 0.0 ) + glRotatef( 2.0*self.angle-2.0, 0.0, 0.0, 1.0 ) + glCallList(self.gear3) + glPopMatrix() + + glPopMatrix() + + def resizeGL(self,width,height): + w = width / float(height) + h = 1.0 + + glViewport( 0, 0, width, height ) + glMatrixMode(GL_PROJECTION) + glLoadIdentity() + glFrustum( -w, w, -h, h, 5.0, 60.0 ) + glMatrixMode(GL_MODELVIEW) + glLoadIdentity() + glTranslatef( 0.0, 0.0, -40.0 ) + + def initializeGL(self): + pos=(5.0, 5.0, 10.0, 1.0 ) + ared=(0.8, 0.1, 0.0, 1.0 ) + agreen=(0.0, 0.8, 0.2, 1.0 ) + ablue=(0.2, 0.2, 1.0, 1.0 ) + + glLightfv(GL_LIGHT0,GL_POSITION,pos) + glEnable(GL_CULL_FACE) + glEnable(GL_LIGHTING) + glEnable(GL_LIGHT0) + glEnable(GL_DEPTH_TEST) + + self.gear1=glGenLists(1) + glNewList(self.gear1,GL_COMPILE) + glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,ared) + gear(1.0,4.0,1.0,20,0.7) + glEndList() + + self.gear2=glGenLists(1) + glNewList(self.gear2,GL_COMPILE) + glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,agreen) + gear(0.5,2.0,2.0,10,0.7) + glEndList() + + self.gear3=glGenLists(1) + glNewList(self.gear3,GL_COMPILE) + glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,ablue) + gear(1.3,2.0,0.5,10,0.7) + glEndList() + + glEnable(GL_NORMALIZE) + +############################################################################## +if __name__=='__main__': + QApplication.setColorSpec(QApplication.CustomColor) + app=QApplication(sys.argv) + + if not QGLFormat.hasOpenGL(): + raise 'No Qt OpenGL support.' + + widget=GearWidget() + app.setMainWidget(widget) + widget.show() + app.exec_loop() diff --git a/examples3/i18n/i18n.pro b/examples3/i18n/i18n.pro new file mode 100644 index 0000000..fc55895 --- /dev/null +++ b/examples3/i18n/i18n.pro @@ -0,0 +1,15 @@ +SOURCES = mywidget.py \ + i18n.py + +TRANSLATIONS = mywidget_cs.ts \ + mywidget_de.ts \ + mywidget_el.ts \ + mywidget_en.ts \ + mywidget_eo.ts \ + mywidget_fr.ts \ + mywidget_it.ts \ + mywidget_jp.ts \ + mywidget_ko.ts \ + mywidget_no.ts \ + mywidget_ru.ts \ + mywidget_zh.ts diff --git a/examples3/i18n/i18n.py b/examples3/i18n/i18n.py new file mode 100755 index 0000000..06cc97f --- /dev/null +++ b/examples3/i18n/i18n.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python + +# Copyright (c) 2002 Detlev Offenbach + +from whrandom import randint +import sys + +from qt import * + +from mywidget import MyWidget + +class QVDialog(QDialog): + def __init__(self, parent=None, name=None, modal=0, flags=0): + QDialog.__init__(self, parent, name, modal, flags) + + self.vb = QVBoxLayout(self, 8) + self.vb.setAutoAdd(1) + + self.hb = None + self.map = {} + #self.sm = QSignalMapper(self) + self.connect(self, PYSIGNAL('mapped(int)'), self.done) + + def addButtons(self, cancel=None, ok=None, mid1=None, mid2=None, mid3=None): + if ok is None: + self.addButton(self.tr("OK"),1) + else: + self.addButton(ok,1) + + if mid1 is not None: + self.addButton(mid1,2) + + if mid2 is not None: + self.addButton(mid2,3) + + if mid3 is not None: + self.addButton(mid3,4) + + if cancel is None: + self.addButton(self.tr('Cancel'),0) + else: + self.addButton(cancel,0) + + def addButton(self, text, result): + if self.hb is None: + self.hb = QHBox(self) + c = QPushButton(text, self.hb) + self.setMapping(c, result) + self.connect(c, SIGNAL('clicked()'), self.mapit) + + def setMapping(self, c, result): + self.map[c] = result + + def mapit(self): + qo = self.sender() + self.emit(PYSIGNAL('mapped(int)'), (self.map[qo],)) + +translator = None +wlist = [] # keep reference to widgets + +def showLang(lang): + global translator + + qApp.setPalette(QPalette(QColor(220-randint(0,64),220-randint(0,64),220-randint(0,64)))) + + language = "mywidget_"+lang+".qm" + fi = QFileInfo(language) + + if not fi.exists(): + QMessageBox.warning(None, "File error", + "Cannot find translation for language: "+lang+\ + "\n(try eg. 'de' or 'en')") + return None + + if translator is not None: + qApp.removeTranslator(translator) + translator = None + + translator = QTranslator(None) + translator.load(language,".") + qApp.installTranslator(translator) + m = MyWidget() + m.setCaption("PyQt Example - i18n - " + unicode(m.caption())) + wlist.append(m) + return m + +def main(argv): + app = QApplication(argv) + + qm = ["cs", "de", "el", "en", "eo", "fr", "it", "jp", "ko", "no", "ru", "zh"] + + lang = None + if len(argv) == 2: + lang = argv[1] + + if (len(argv) != 2) or (lang == "all"): + dlg = QVDialog(None, None, 1) + qmb = [] + r = 0 + if lang == "all": + r=2 + else: + bg = QButtonGroup(4, Qt.Vertical, "Choose Locales", dlg) + loc = QTextCodec.locale() + for i in range(0,len(qm)): + qmb.append(QCheckBox(qm[i], bg)) + qmb[i].setChecked(str(loc) == qm[i]) + dlg.addButtons("Cancel","OK","All") + r = dlg.exec_loop() + + if r: + tight = qApp.desktop().screen().width < 1024 + x = 5 + y = 25 + for i in range(0,len(qm)): + if (r == 2) or (qmb[i].isChecked()): + w = showLang(qm[i]) + + if w == None: + sys.exit(0) + + app.connect(app, SIGNAL('lastWindowClosed()'), qApp, SLOT('quit()')) + w.setGeometry(x,y,197,356) + w.show() + if tight: + x += 8 + y += 8 + else: + x += 205 + if x > 1000: + x = 5 + y += 384 + + else: + sys.exit(0) + + else: + lang = argv[1] + m = showLang(lang) + app.setMainWidget(m) + m.setCaption("PyQt Example - i18n") + m.show() + + return app.exec_loop() + +if __name__ == "__main__": + main(sys.argv) diff --git a/examples3/i18n/mywidget.py b/examples3/i18n/mywidget.py new file mode 100644 index 0000000..60e267a --- /dev/null +++ b/examples3/i18n/mywidget.py @@ -0,0 +1,47 @@ +# Copyright (c) 2002 Detlev Offenbach + +from qt import * + +class MyWidget(QMainWindow): + + def __init__(self, parent=None, name=None): + QMainWindow.__init__(self, parent, name) + + self.central = QVBox(self) + self.central.setMargin(5) + self.central.setSpacing(5) + self.setCentralWidget(self.central) + + self.setCaption(self.trUtf8("""Internationalization Example""")) + + self.file = QPopupMenu(self) + self.file.insertItem(self.trUtf8("E&xit"), qApp, SLOT("quit()"), + QKeySequence(self.trUtf8("Ctrl+Q","File|Quit"))) + self.menuBar().insertItem(self.trUtf8("&File"), self.file) + + self.statusBar().message(self.trUtf8('''Language: English''')) + + self.label = QLabel(self.trUtf8("The Main Window"), self.central) + + self.gbox = QButtonGroup(1, QGroupBox.Horizontal, + self.trUtf8("View"), self.central) + rb = QRadioButton(qApp.translate('MyWidget','Perspective'), self.gbox) + rb = QRadioButton(qApp.translate('MyWidget','Isometric'), self.gbox) + rb = QRadioButton(qApp.translate('MyWidget','Oblique'), self.gbox) + + self.initChoices(self.central) + + choices = [ + QT_TRANSLATE_NOOP("MyWidget", "First"), + QT_TRANSLATE_NOOP("MyWidget", "Second"), + QT_TRANSLATE_NOOP("MyWidget", "Third") + ] + + def initChoices(self, parent): + self.lb = QListBox(parent) + for ch in self.choices: + self.lb.insertItem(self.trUtf8(ch)) + + def closeEvent(self, e): + QWidget.closeEvent(self, e) + self.emit(PYSIGNAL('closed'), ()) diff --git a/examples3/i18n/mywidget_cs.qm b/examples3/i18n/mywidget_cs.qm new file mode 100644 index 0000000..f95090d Binary files /dev/null and b/examples3/i18n/mywidget_cs.qm differ diff --git a/examples3/i18n/mywidget_cs.ts b/examples3/i18n/mywidget_cs.ts new file mode 100644 index 0000000..4cf61f1 --- /dev/null +++ b/examples3/i18n/mywidget_cs.ts @@ -0,0 +1,75 @@ + + + MyWidget + + View + Pohled + + + &File + &Soubor + + + E&xit + &Konec + + + First + První + + + Third + TÅ™etí + + + Language: English + Jayzk: ÄŒeský + + + The Main Window + Hlavní okno + + + Ctrl+Q + Ctrl+Q + + + Oblique + NaklonÄ›ný + + + Second + Druhý + + + Isometric + Isometrický + + + Perspective + Perspektivní + + + Internationalization Example + Ukázka lokalizace + + + + QAccel + + Ctrl + Ctrl + + + + QVDialog + + OK + + + + Cancel + + + + diff --git a/examples3/i18n/mywidget_de.qm b/examples3/i18n/mywidget_de.qm new file mode 100644 index 0000000..6433855 Binary files /dev/null and b/examples3/i18n/mywidget_de.qm differ diff --git a/examples3/i18n/mywidget_de.ts b/examples3/i18n/mywidget_de.ts new file mode 100644 index 0000000..d114b8b --- /dev/null +++ b/examples3/i18n/mywidget_de.ts @@ -0,0 +1,69 @@ + + + MyWidget + + First + Erstens + + + Second + Zweitens + + + Third + Drittens + + + Internationalization Example + Internationalisierungsbeispiel + + + E&xit + Be&enden + + + &File + &Datei + + + Language: English + Sprache: Deutsch + + + The Main Window + Das Hauptfenster + + + View + Ansicht + + + Perspective + Perspektivisch + + + Isometric + Isometrisch + + + Oblique + Schief + + + Ctrl+Q + File|Quit + Strg+Q + + + + QVDialog + + OK + OK + + + Cancel + Abbruch + + + diff --git a/examples3/i18n/mywidget_el.qm b/examples3/i18n/mywidget_el.qm new file mode 100644 index 0000000..15d7689 Binary files /dev/null and b/examples3/i18n/mywidget_el.qm differ diff --git a/examples3/i18n/mywidget_el.ts b/examples3/i18n/mywidget_el.ts new file mode 100644 index 0000000..59fb228 --- /dev/null +++ b/examples3/i18n/mywidget_el.ts @@ -0,0 +1,68 @@ + + + MyWidget + + &File + &ΑÏχείο + + + Ctrl+Q + Ctrl+Q + + + E&xit + Έ&ξοδος + + + First + ΠÏώτο + + + Internationalization Example + ΠαÏάδειγμα διεθνοποίησης + + + Isometric + ΙσομετÏική + + + Language: English + Γλώσσα: Ελληνικά + + + Oblique + Πλάγια + + + Perspective + ΠÏοοπτική + + + Second + ΔεÏτεÏο + + + The Main Window + ΚÏÏιο παÏάθυÏο + + + Third + ΤÏίτο + + + View + Όψη + + + + QVDialog + + OK + + + + Cancel + + + + diff --git a/examples3/i18n/mywidget_en.qm b/examples3/i18n/mywidget_en.qm new file mode 100644 index 0000000..6bd22c4 Binary files /dev/null and b/examples3/i18n/mywidget_en.qm differ diff --git a/examples3/i18n/mywidget_en.ts b/examples3/i18n/mywidget_en.ts new file mode 100644 index 0000000..f231669 --- /dev/null +++ b/examples3/i18n/mywidget_en.ts @@ -0,0 +1,69 @@ + + + MyWidget + + First + + + + Second + + + + Third + + + + Internationalization Example + + + + E&xit + + + + &File + + + + Language: English + + + + The Main Window + + + + View + + + + Perspective + + + + Isometric + + + + Oblique + + + + Ctrl+Q + File|Quit + + + + + QVDialog + + OK + + + + Cancel + + + + diff --git a/examples3/i18n/mywidget_eo.qm b/examples3/i18n/mywidget_eo.qm new file mode 100644 index 0000000..372cf79 Binary files /dev/null and b/examples3/i18n/mywidget_eo.qm differ diff --git a/examples3/i18n/mywidget_eo.ts b/examples3/i18n/mywidget_eo.ts new file mode 100644 index 0000000..381870d --- /dev/null +++ b/examples3/i18n/mywidget_eo.ts @@ -0,0 +1,72 @@ + + + MyWidget + + &File + &Dosiero + + + Ctrl+Q + Ctrl+F + + + E&xit... + &Fini... + + + First + Unue + + + Internationalization Example + Ekzemplo pri internaciigo + + + Isometric + Isometria + + + Language: English + Lingvo: Esperanto (ĈĜĤĴŜŬĉÄĥĵÅÅ­) + + + Oblique + Oblikva + + + Perspective + Perspektiva + + + Second + Due + + + The Main Window + La Ĉeffenestro + + + Third + Trie + + + View + Aspekto + + + E&xit + + + + + QVDialog + + OK + + + + Cancel + + + + diff --git a/examples3/i18n/mywidget_fr.qm b/examples3/i18n/mywidget_fr.qm new file mode 100644 index 0000000..12a8464 Binary files /dev/null and b/examples3/i18n/mywidget_fr.qm differ diff --git a/examples3/i18n/mywidget_fr.ts b/examples3/i18n/mywidget_fr.ts new file mode 100644 index 0000000..a029084 --- /dev/null +++ b/examples3/i18n/mywidget_fr.ts @@ -0,0 +1,68 @@ + + + MyWidget + + View + Vue + + + &File + &Fichier + + + E&xit + &Quitter + + + First + Premier + + + Third + Troisième + + + Language: English + Langage : Français + + + The Main Window + La fenêtre principale + + + Ctrl+Q + Ctrl+Q + + + Oblique + Oblique + + + Second + Second + + + Isometric + Isométrique + + + Perspective + Perspective + + + Internationalization Example + Exemple d'internationalisation + + + + QVDialog + + OK + + + + Cancel + + + + diff --git a/examples3/i18n/mywidget_it.qm b/examples3/i18n/mywidget_it.qm new file mode 100644 index 0000000..075bee2 Binary files /dev/null and b/examples3/i18n/mywidget_it.qm differ diff --git a/examples3/i18n/mywidget_it.ts b/examples3/i18n/mywidget_it.ts new file mode 100644 index 0000000..a450deb --- /dev/null +++ b/examples3/i18n/mywidget_it.ts @@ -0,0 +1,72 @@ + + + MyWidget + + E&xit... + &Esci... + + + First + Primo + + + Internationalization Example + Esempio di localizzazione + + + Isometric + Isometrica + + + Language: English + Lingua: Italiano + + + Oblique + Obliqua + + + Perspective + Prospettica + + + Second + Secondo + + + The Main Window + La Finestra Principale + + + Third + Terzo + + + View + Vista + + + E&xit + + + + Ctrl+Q + + + + &File + + + + + QVDialog + + OK + + + + Cancel + + + + diff --git a/examples3/i18n/mywidget_jp.qm b/examples3/i18n/mywidget_jp.qm new file mode 100644 index 0000000..8942dd7 Binary files /dev/null and b/examples3/i18n/mywidget_jp.qm differ diff --git a/examples3/i18n/mywidget_jp.ts b/examples3/i18n/mywidget_jp.ts new file mode 100644 index 0000000..2a7345f --- /dev/null +++ b/examples3/i18n/mywidget_jp.ts @@ -0,0 +1,68 @@ + + + MyWidget + + &File + ファイル(&F) + + + Ctrl+Q + Ctrl+Q + + + E&xit + 終了(&X) + + + First + 第一行 + + + Internationalization Example + 国際化(i18n)ã®ä¾‹ + + + Isometric + 等角投影法 + + + Language: English + 言語: 日本語 + + + Oblique + æ–œã‚投影法 + + + Perspective + é è¿‘法 + + + Second + 第二行 + + + The Main Window + メインウィンドウ + + + Third + 第三行 + + + View + è¡¨ç¤ºæ–¹å¼ + + + + QVDialog + + OK + + + + Cancel + + + + diff --git a/examples3/i18n/mywidget_ko.qm b/examples3/i18n/mywidget_ko.qm new file mode 100644 index 0000000..dccc2ba Binary files /dev/null and b/examples3/i18n/mywidget_ko.qm differ diff --git a/examples3/i18n/mywidget_ko.ts b/examples3/i18n/mywidget_ko.ts new file mode 100644 index 0000000..acc8f9b --- /dev/null +++ b/examples3/i18n/mywidget_ko.ts @@ -0,0 +1,68 @@ + + + MyWidget + + &File + 파ì¼&F + + + Ctrl+Q + Ctrl+E + + + E&xit + 종료&X + + + First + 첫번째 + + + Internationalization Example + 국제화 예제 + + + Isometric + Isometric + + + Language: English + 언어 : 한국어 + + + Oblique + Oblique + + + Perspective + Perspective + + + Second + ë‘번째 + + + The Main Window + ë©”ì¸ ìœˆë„ìš° + + + Third + 세번째 + + + View + 보기 + + + + QVDialog + + OK + + + + Cancel + + + + diff --git a/examples3/i18n/mywidget_no.qm b/examples3/i18n/mywidget_no.qm new file mode 100644 index 0000000..2adc136 Binary files /dev/null and b/examples3/i18n/mywidget_no.qm differ diff --git a/examples3/i18n/mywidget_no.ts b/examples3/i18n/mywidget_no.ts new file mode 100644 index 0000000..341c664 --- /dev/null +++ b/examples3/i18n/mywidget_no.ts @@ -0,0 +1,68 @@ + + + MyWidget + + View + Visning + + + &File + &Fil + + + E&xit + &Slutt + + + First + Første + + + Third + Tredje + + + Language: English + SprÃ¥k: Norsk + + + The Main Window + Hovedvinduet + + + Ctrl+Q + Ctrl+S + + + Oblique + Skjev + + + Second + Andre + + + Isometric + Isometrisk + + + Perspective + Perspektiv + + + Internationalization Example + Internasjonaliseringseksempel + + + + QVDialog + + OK + + + + Cancel + + + + diff --git a/examples3/i18n/mywidget_ru.qm b/examples3/i18n/mywidget_ru.qm new file mode 100644 index 0000000..ebc512e Binary files /dev/null and b/examples3/i18n/mywidget_ru.qm differ diff --git a/examples3/i18n/mywidget_ru.ts b/examples3/i18n/mywidget_ru.ts new file mode 100644 index 0000000..07070b0 --- /dev/null +++ b/examples3/i18n/mywidget_ru.ts @@ -0,0 +1,68 @@ + + + MyWidget + + View + Вид + + + &File + Файл + + + E&xit + Выход + + + First + Первый + + + Third + Третий + + + Language: English + Язык: РуÑÑкий + + + The Main Window + Главное окно + + + Oblique + КурÑив + + + Second + Второй + + + Isometric + ИзометричеÑкий + + + Perspective + ПерÑпектива + + + Internationalization Example + Пример интернациноализации + + + Ctrl+Q + + + + + QVDialog + + OK + + + + Cancel + + + + diff --git a/examples3/i18n/mywidget_zh.qm b/examples3/i18n/mywidget_zh.qm new file mode 100644 index 0000000..a890c09 Binary files /dev/null and b/examples3/i18n/mywidget_zh.qm differ diff --git a/examples3/i18n/mywidget_zh.ts b/examples3/i18n/mywidget_zh.ts new file mode 100644 index 0000000..8b015d6 --- /dev/null +++ b/examples3/i18n/mywidget_zh.ts @@ -0,0 +1,68 @@ + + + MyWidget + + View + 视图 + + + &File + 文件[&F] + + + E&xit + 退出[&x] + + + First + 第一个 + + + Third + 第三个 + + + Language: English + 语言: 简体中文 + + + The Main Window + ä¸»çª—å£ + + + Ctrl+Q + Ctrl+Q + + + Oblique + 斜投影 + + + Second + 第二个 + + + Isometric + 等角投影 + + + Perspective + é€è§†æŠ•å½± + + + Internationalization Example + 国际化范例 + + + + QVDialog + + OK + + + + Cancel + + + + diff --git a/examples3/lineedits.py b/examples3/lineedits.py new file mode 100755 index 0000000..7d1a37a --- /dev/null +++ b/examples3/lineedits.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python + +#**************************************************************************** +#** $Id: lineedits.py,v 1.1 2002/06/19 07:56:07 phil Exp $ +#** +#** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved. +#** +#** This file is part of an example program for PyQt. This example +#** program may be used, distributed and modified without limitation. +#** +#*****************************************************************************/ + +import sys +from qt import * + +TRUE = 1 +FALSE = 0 + +class LineEdits(QGroupBox): + def __init__(self, parent = None, name = None): + QGroupBox.__init__(self, 0, Qt.Horizontal, "Line Edits", parent, name) + + self.setMargin(10) + + box = QVBoxLayout(self.layout()) + + row1 = QHBoxLayout(box) + row1.setMargin(5) + + label = QLabel("Echo Mode: ", self) + row1.addWidget(label) + + combo1 = QComboBox(FALSE, self) + row1.addWidget(combo1) + combo1.insertItem("Normal", -1) + combo1.insertItem("Password", -1) + combo1.insertItem("No Echo", -1) + + self.connect(combo1, SIGNAL("activated(int)"), self.slotEchoChanged) + self.lined1 = QLineEdit(self) + box.addWidget(self.lined1) + + row2 = QHBoxLayout(box) + row2.setMargin(5) + + label = QLabel("Validator: ", self) + row2.addWidget(label) + + combo2 = QComboBox(FALSE, self) + row2.addWidget(combo2) + combo2.insertItem("No Validator", -1) + combo2.insertItem("Integer Validator", -1) + combo2.insertItem("Double Validator", -1) + + self.connect(combo2, SIGNAL("activated(int)"), self.slotValidatorChanged) + + self.lined2 = QLineEdit(self) + box.addWidget(self.lined2) + + row3 = QHBoxLayout(box) + row3.setMargin(5) + + label = QLabel("Alignment: ", self) + row3.addWidget(label) + + combo3 = QComboBox(FALSE, self) + row3.addWidget(combo3) + combo3.insertItem("Left", -1) + combo3.insertItem("Centered", -1) + combo3.insertItem("Right", -1) + + self.connect(combo3, SIGNAL("activated(int)"), self.slotAlignmentChanged) + self.lined3 = QLineEdit(self) + box.addWidget(self.lined3) + + row4 = QHBox(self) + box.addWidget(row4) + row4.setMargin(5) + + QLabel("Read-Only: ", row4) + + combo4 = QComboBox(FALSE, row4) + combo4.insertItem("False", -1) + combo4.insertItem("True", -1) + + self.connect(combo4, SIGNAL("activated(int)"), self.slotReadOnlyChanged) + + self.lined4 = QLineEdit(self) + box.addWidget(self.lined4) + + self.lined1.setFocus() + + def slotEchoChanged(self, i): + if i == 0: + self.lined1.setEchoMode(QLineEdit.Normal) + elif i == 1: + self.lined1.setEchoMode(QLineEdit.Password) + elif i == 2: + self.lined1.setEchoMode(QLineEdit.NoEcho) + + self.lined1.setFocus() + + def slotValidatorChanged(self, i): + if i == 0: + self.lined2.setValidator(None) + elif i == 1: + self.lined2.setValidator(QIntValidator(self.lined2)) + elif i == 2: + self.lined2.setValidator(QDoubleValidator(-999.0, 999.0, 2, self.lined2)) + + self.lined2.setText("") + self.lined2.setFocus() + + def slotAlignmentChanged(self, i): + if i == 0: + self.lined3.setAlignment(QLineEdit.AlignLeft) + elif i == 1: + self.lined3.setAlignment(QLineEdit.AlignCenter) + elif i == 2: + self.lined3.setAlignment(QLineEdit.AlignRight) + + self.lined3.setFocus() + + def slotReadOnlyChanged(self, i): + if i == 0: + self.lined4.setReadOnly(FALSE) + elif i == 1: + self.lined4.setReadOnly(TRUE) + + self.lined4.setFocus() + + +if __name__=='__main__': + app = QApplication( sys.argv ) + + lineedits = LineEdits() + lineedits.setCaption("Lineedits - PyQt Example") + lineedits.show() + app.setMainWidget(lineedits) + app.exec_loop() diff --git a/examples3/listbox.py b/examples3/listbox.py new file mode 100755 index 0000000..624935d --- /dev/null +++ b/examples3/listbox.py @@ -0,0 +1,176 @@ +#!/usr/bin/env python + +"""************************************************************************** +** $Id: listbox.py,v 1.1 2003/05/30 17:47:57 phil Exp $ +** +** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +***************************************************************************""" + +import sys +from qt import * + +FALSE = 0 +TRUE = 1 + +class ListBoxDemo( QWidget ): + def __init__( self, parent=None, name=None ): + QWidget.__init__( self, parent, name ) + b = FALSE + g = QGridLayout( self, 2, 2, 6 ) + + g.addWidget( QLabel( "Configuration:", self ), 0, 0 ) + g.addWidget( QLabel( "Result:", self ), 0, 1 ) + + self.l = QListBox( self ) + g.addWidget( self.l, 1, 1 ) + self.l.setFocusPolicy( QWidget.StrongFocus ) + + v = QVBoxLayout( ) + g.addLayout( v, 1, 0 ) + + bg = QButtonGroup( self, None ) + + b = QRadioButton( "Fixed number of columns,\n" + "as many rows as needed.", + self ) + bg.insert( b ) + v.addWidget( b ) + b.setChecked( TRUE ) + self.connect( b, SIGNAL("clicked()"), self.setNumCols ) + h = QHBoxLayout() + v.addLayout( h ) + h.addSpacing( 30 ) + h.addSpacing( 100 ) + h.addWidget( QLabel( "Columns:", self ) ) + self.columns = QSpinBox( self ) + h.addWidget( self.columns ) + + v.addSpacing( 12 ) + + b = QRadioButton( "As many columns as fit on-screen,\n" + "as many rows as needed.", + self ) + bg.insert( b ) + v.addWidget( b ) + self.connect( b, SIGNAL("clicked()"), self.setColsByWidth ) + + v.addSpacing( 12 ) + + b = QRadioButton( "Fixed number of rows,\n" + "as many columns as needed.", + self ) + bg.insert( b ) + v.addWidget( b ) + self.connect( b, SIGNAL("clicked()"), self.setNumRows ) + h = QHBoxLayout() + v.addLayout( h ) + h.addSpacing( 30 ) + h.addSpacing( 100 ) + h.addWidget( QLabel( "Rows:", self ) ) + self.rows = QSpinBox( self ) + self.rows.setEnabled( FALSE ) + h.addWidget( self.rows ) + + v.addSpacing( 12 ) + + b = QRadioButton( "As many rows as fit on-screen,\n" + "as many columns as needed.", + self ) + bg.insert( b ) + v.addWidget( b ) + self.connect( b, SIGNAL("clicked()"), self.setRowsByHeight ) + + v.addSpacing( 12 ) + + cb = QCheckBox( "Variable-height rows", self ) + cb.setChecked( TRUE ) + self.connect( cb, SIGNAL("toggled(bool)"), self.setVariableHeight ) + v.addWidget( cb ) + v.addSpacing( 6 ) + + cb = QCheckBox( "Variable-width columns", self ) + self.connect( cb, SIGNAL("toggled(bool)"), self.setVariableWidth ) + v.addWidget( cb ) + + cb = QCheckBox( "Extended-Selection", self ) + self.connect( cb, SIGNAL("toggled(bool)"), self.setMultiSelection ) + v.addWidget( cb ) + + pb = QPushButton( "Sort ascending", self ) + self.connect( pb, SIGNAL("clicked()"), self.sortAscending ) + v.addWidget( pb ) + + pb = QPushButton( "Sort descending", self ) + self.connect( pb, SIGNAL("clicked()"), self.sortDescending ) + v.addWidget( pb ) + + v.addStretch( 100 ) + + i = 0 + while i <= 2560: + i+=1 + self.l.insertItem( str(QString.fromLatin1( "Item " )) + str(QString.number( i )), i ) + self.columns.setRange( 1, 256 ) + self.columns.setValue( 1 ) + self.rows.setRange( 1, 256 ) + self.rows.setValue( 256 ) + + self.connect( self.columns, SIGNAL("valueChanged(int)"), self.setNumCols ) + self.connect( self.rows, SIGNAL("valueChanged(int)"), self.setNumRows ) + + # slots + def setNumCols( self ): + self.columns.setEnabled( TRUE ) + self.rows.setEnabled( FALSE ) + self.l.setColumnMode( self.columns.value() ) + + def setNumRows( self ): + self.columns.setEnabled( FALSE ) + self.rows.setEnabled( TRUE ) + self.l.setRowMode( self.rows.value() ) + + def setRowsByHeight( self ): + self.columns.setEnabled( FALSE ) + self.rows.setEnabled( FALSE ) + self.l.setRowMode( QListBox.FitToHeight ) + + def setColsByWidth( self ): + self.columns.setEnabled( FALSE ) + self.rows.setEnabled( FALSE ) + self.l.setColumnMode( QListBox.FitToWidth ) + + def setVariableWidth( self, b ): + self.l.setVariableWidth( b ) + + def setVariableHeight( self, b ): + self.l.setVariableHeight( b ) + + def setMultiSelection( self, b ): + self.l.clearSelection() + if b : + self.l.setSelectionMode( QListBox.Extended ) + else: + self.l.setSelectionMode( QListBox.Single ) + + def sortAscending( self ): + self.l.sort( TRUE ) + + def sortDescending( self ): + self.l.sort( FALSE ) + + +def main( args ): + a = QApplication( args ) + t = ListBoxDemo() + t.setCaption( "Qt Example - Listbox" ) + a.setMainWidget( t ) + t.show() + + a.exec_loop() + +if __name__=="__main__": + main(sys.argv) diff --git a/examples3/listboxcombo.py b/examples3/listboxcombo.py new file mode 100755 index 0000000..6958089 --- /dev/null +++ b/examples3/listboxcombo.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python + +"""************************************************************************** +** $Id: listboxcombo.py,v 1.1 2003/05/30 17:47:57 phil Exp $ +** +** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +***************************************************************************""" + +import sys +from qt import * + +FALSE = 0 +TRUE = 1 + +class ListBoxCombo( QVBox ): + # Constructor + # Creates child widgets of the ListBoxCombo widget + def __init__( self, parent=None, name=None ): + QVBox.__init__( self, parent, name ) + + self.setMargin( 5 ) + self.setSpacing( 5 ) + + i = 0 + row1 = QHBox( self ) + row1.setSpacing( 5 ) + + # Create a multi-selection ListBox... + self.lb1 = QListBox( row1 ) + self.lb1.setSelectionMode( QListBox.Multi ) + + # ...insert a pixmap item... + xpm = QPixmap( "qtlogo.png" ) + txt = QString() + QListBoxPixmap( self.lb1, xpm, txt ) + + # ...and 100 text items + for i in range(0, 100, 1) : + xpm = QPixmap() + txt = QString( "Listbox Item %1" ).arg( i ) + if not i % 4 : + xpm = QPixmap( "fileopen.xpm" ) + QListBoxPixmap( self.lb1, xpm, txt ) + + # Create a pushbutton... + arrow1 = QPushButton( " -> ", row1 ) + # ...and connect the clicked SIGNAL with the SLOT slotLeft2Right + self.connect( arrow1, SIGNAL("clicked()"), self.slotLeft2Right ) + + # create an empty single-selection ListBox + self.lb2 = QListBox( row1 ) + + row2 = QHBox( self ) + row2.setSpacing( 5 ) + + box1 = QVBox( row2 ) + box1.setSpacing( 5 ) + + # Create a non-editable Combobox and a label below... + cb1 = QComboBox( FALSE, box1 ) + self.label1 = QLabel( "Current Item: Combobox Item 0", box1 ) + self.label1.setMaximumHeight( self.label1.sizeHint().height() * 2 ) + self.label1.setFrameStyle( QFrame.Panel | QFrame.Sunken ) + + #...and insert 50 items into the Combobox + for i in range( 0, 50, 1 ) : + txt = str( QString( "Combobox Item %1" ).arg( i ) ) + if i % 9 : + cb1.insertItem( txt ) + else : + cb1.listBox().insertItem( MyListBoxItem() ) + + box2 = QVBox( row2 ) + box2.setSpacing( 5 ) + + # Create an editable Combobox and a label below... + cb2 = QComboBox( TRUE, box2 ) + self.label2 = QLabel( "Current Item: Combobox Item 0", box2 ) + self.label2.setMaximumHeight( self.label2.sizeHint().height() * 2 ) + self.label2.setFrameStyle( QFrame.Panel | QFrame.Sunken ) + + # ... and insert 50 items into the Combobox + for i in range(0, 50, 1 ) : + txt = str(QString( "Combobox Item %1" ).arg( i )) + if not i % 4 : + cb2.insertItem( QPixmap( "fileopen.xpm" ), txt ) + else : + cb2.insertItem( txt ) + + # Connect the activated SIGNALs of the Comboboxes with SLOTs + self.connect( cb1, SIGNAL("activated( const QString & )"), self.slotCombo1Activated ) + self.connect( cb2, SIGNAL("activated( const QString & )"), self.slotCombo2Activated ) + + """ SLOT slotLeft2Right + * Copies all selected items of the first ListBox into the second ListBox + """ + def slotLeft2Right( self ): + # Go through all items of the first ListBox + for i in range( 0, self.lb1.count(), 1 ) : + item = self.lb1.item( i ) + # if the item is selected... + if self.lb1.isSelected( i ): #item.isSelected() : + # ...and it is a text item... + if item.pixmap() and not(item.text().isEmpty()): + self.lb2.insertItem( item.pixmap(), item.text() ) + elif not( item.pixmap() ): + self.lb2.insertItem( item.text() ) + elif item.text().isEmpty() : + self.lb2.insertItem( item.pixmap() ) + + """ SLOT slotCombo1Activated( const QString &s ) + * Sets the text of the item which the user just selected in the + * first Combobox (and is now the value of s) to the first Label. + """ + def slotCombo1Activated( self, s ) : + self.label1.setText( str(QString( "Current Item: %1" ).arg( s ) ) ) + + """ SLOT slotCombo2Activated( const QString &s ) + * Sets the text of the item which the user just selected in the + * second Combobox (and is now the value of s) to the second Label. + """ + def slotCombo2Activated( self, s ) : + self.label2.setText( str(QString( "Current Item: %1" ).arg( s ) ) ) + + +class MyListBoxItem( QListBoxItem ): + def __init__( self, parent=None, name=None ): + QListBoxItem.__init__( self, parent, name ) + self.setCustomHighlighting( TRUE ) + + def paint( self, painter ): + # evil trick: find out whether we are painted onto our listbox + in_list_box = 0 + if self.listBox() and self.listBox().viewport() == painter.device(): + in_list_box = 1 + r = QRect( 0, 0, self.width( self.listBox() ), self.height( self.listBox() ) ) + brush = QBrush( Qt.red, Qt.SolidPattern ) + if in_list_box and isSelected(): + painter.eraseRect( r ) + painter.fillRect( 5, 5, self.width( self.listBox() ) - 10, self.height( self.listBox() ) - 10, brush ) + if in_list_box and isCurrent(): + self.listBox().style().drawPrimitive( QStyle.PE_FocusRect, painter, r, self.listBox().colorGroup() ) + + def width( self, QListBox ): + return 100 + + def height( self, QListBox ): + return 16 + + +def main( args ): + a = QApplication( args ) + + listboxcombo = ListBoxCombo() + listboxcombo.resize( 400, 270 ) + listboxcombo.setCaption( "Qt Example - Listboxes and Comboboxes" ) + a.setMainWidget( listboxcombo ) + listboxcombo.show(); + + a.exec_loop() + +if __name__=="__main__": + main(sys.argv) diff --git a/examples3/marble.png b/examples3/marble.png new file mode 100644 index 0000000..49ea309 Binary files /dev/null and b/examples3/marble.png differ diff --git a/examples3/mdi.py b/examples3/mdi.py new file mode 100755 index 0000000..2c1d121 --- /dev/null +++ b/examples3/mdi.py @@ -0,0 +1,360 @@ +#!/usr/bin/env python + +# A simple application. + + +import sys, string +from qt import * + + +fileopen = [ + '16 13 5 1', + '. c #040404', + '# c #808304', + 'a c None', + 'b c #f3f704', + 'c c #f3f7f3', + 'aaaaaaaaa...aaaa', + 'aaaaaaaa.aaa.a.a', + 'aaaaaaaaaaaaa..a', + 'a...aaaaaaaa...a', + '.bcb.......aaaaa', + '.cbcbcbcbc.aaaaa', + '.bcbcbcbcb.aaaaa', + '.cbcb...........', + '.bcb.#########.a', + '.cb.#########.aa', + '.b.#########.aaa', + '..#########.aaaa', + '...........aaaaa' +] + +filesave = [ + '14 14 4 1', + '. c #040404', + '# c #808304', + 'a c #bfc2bf', + 'b c None', + '..............', + '.#.aaaaaaaa.a.', + '.#.aaaaaaaa...', + '.#.aaaaaaaa.#.', + '.#.aaaaaaaa.#.', + '.#.aaaaaaaa.#.', + '.#.aaaaaaaa.#.', + '.##........##.', + '.############.', + '.##.........#.', + '.##......aa.#.', + '.##......aa.#.', + '.##......aa.#.', + 'b.............' +] + +fileprint = [ + '16 14 6 1', + '. c #000000', + '# c #848284', + 'a c #c6c3c6', + 'b c #ffff00', + 'c c #ffffff', + 'd c None', + 'ddddd.........dd', + 'dddd.cccccccc.dd', + 'dddd.c.....c.ddd', + 'ddd.cccccccc.ddd', + 'ddd.c.....c....d', + 'dd.cccccccc.a.a.', + 'd..........a.a..', + '.aaaaaaaaaa.a.a.', + '.............aa.', + '.aaaaaa###aa.a.d', + '.aaaaaabbbaa...d', + '.............a.d', + 'd.aaaaaaaaa.a.dd', + 'dd...........ddd' +] + +document = [ +"12 16 6 1", +" c #040404", +". c None", +"X c white", +"o c #808304", +"O c black", +"+ c #f3f7f3", +" .....", +" XXXXX ....", +" XXXXX X ...", +" XXXXX XX ..", +" XooXX O.", +" X+XXX+XXXO.", +" XXXXXXXXXO.", +" XoooXooXXO.", +" XXXXXXXXXO.", +" XXXXXXXXXO.", +" XoXXoooXXO.", +" XXXXXXXXXO.", +"OXXXXXXXXXO.", +"OXXXXXXXXXO.", +"OOOOOOOOOOO.", +"............" +] + +fileOpenText = \ +''' +Click this button to open a new file.

+You can also select the Open command from the File menu.''' + +fileSaveText = \ +'''Click this button to save the file you are editing.

+You will be prompted for a filename.

+You can also select the Save command from the File menu.''' + +filePrintText = \ +'''Click this button to print the file you are editing.

+You can also select the Print command from the File menu.''' + +True=1 +False=0 + +class ApplicationWindow(QMainWindow): + def __init__(self): + QMainWindow.__init__(self,None,'example application main window',Qt.WDestructiveClose) + + self.filename = QString.null + self.printer = QPrinter() + + self.fileTools = QToolBar(self,'file operations') + + openIcon = QPixmap(fileopen) + self.fileOpen = QToolButton(QIconSet(openIcon),'Open File',QString.null,self.load,self.fileTools,'open file') + + saveIcon = QPixmap(filesave) + self.fileSave = QToolButton(QIconSet(saveIcon),'Save File',QString.null,self.save,self.fileTools,'save file') + printIcon = QPixmap(fileprint) + self.filePrint = QToolButton(QIconSet(printIcon),'Print File',QString.null,self.printDoc,self.fileTools,'print file') + + QWhatsThis.whatsThisButton(self.fileTools) + + QWhatsThis.add(self.fileOpen,fileOpenText) + QMimeSourceFactory.defaultFactory().setPixmap('fileopen',openIcon) + QWhatsThis.add(self.fileSave,fileSaveText) + QWhatsThis.add(self.filePrint,filePrintText) + + self.file = QPopupMenu(self) + self.menuBar().insertItem('&File',self.file) + + self.file.insertItem('&New',self.newDoc,Qt.CTRL + Qt.Key_N) + + id = self.file.insertItem(QIconSet(openIcon),'&Open',self.load,Qt.CTRL + Qt.Key_O) + self.file.setWhatsThis(id,fileOpenText) + + id = self.file.insertItem(QIconSet(saveIcon),'&Save',self.save,Qt.CTRL + Qt.Key_S) + self.file.setWhatsThis(id,fileSaveText) + + id = self.file.insertItem('Save &as',self.saveAs) + self.file.setWhatsThis(id,fileSaveText) + + self.file.insertSeparator() + + id = self.file.insertItem(QIconSet(printIcon),'&Print',self.printDoc,Qt.CTRL + Qt.Key_P) + self.file.setWhatsThis(id,filePrintText) + + self.file.insertSeparator() + + self.file.insertItem('&Close',self,SLOT('close()'),Qt.CTRL + Qt.Key_W) + self.file.insertItem('&Quit',qApp,SLOT('closeAllWindows()'),Qt.CTRL + Qt.Key_Q) + + self.menuBar().insertSeparator() + self.windows = QPopupMenu( self ) + self.windows.setCheckable( True ) + self.connect( self.windows, SIGNAL( "aboutToShow()" ), + self.windowsMenuAboutToShow ) + self.menuBar().insertItem( "&Windows", self.windows ) + + self.help = QPopupMenu(self) + self.menuBar().insertSeparator() + self.menuBar().insertItem('&Help',self.help) + + self.help.insertItem('&About',self.about,Qt.Key_F1) + self.help.insertItem('About &Qt',self.aboutQt) + self.help.insertSeparator() + self.help.insertItem( "What's &This", self, SLOT("whatsThis()"), Qt.SHIFT+Qt.Key_F1) + + self.menuBar().insertSeparator() + + self.vb = QVBox( self ) + self.vb.setFrameStyle( QFrame.StyledPanel | QFrame.Sunken ) + self.ws = QWorkspace( self.vb ) + self.ws.setScrollBarsEnabled( True ) + self.setCentralWidget( self.vb ) + + self.statusBar().message('Ready',2000) + #self.resize(450,600) + + def newDoc(self): + w = MDIWindow( self.ws, "", Qt.WDestructiveClose ) + self.connect( w, PYSIGNAL( "message" ), self.statusBar(), SLOT( "message(const QString&, int )") ) + w.setCaption("unnamed document") + w.setIcon( QPixmap(document) ) + # show the very first window in maximized mode + if len(self.ws.windowList())==0: + w.showMaximized() + else: + w.show() + return w + + def load(self): + fn = QFileDialog.getOpenFileName( QString.null, QString.null, self ) + if not fn.isEmpty(): + w = self.newDoc() + w.load( fn ) + else: + self.statusBar().message( "Loading aborted", 2000 ) + + def save(self): + m = self.ws.activeWindow() + if m: + m.save() + + def saveAs(self): + m = self.ws.activeWindow() + if m: + m.saveAs() + + def printDoc(self): + m = self.ws.activeWindow() + if m: + m.printDoc( self.printer ) + + def closeWindow(self): + m = self.ws.activeWindow() + if m: + m.close() + + def about(self): + QMessageBox.about( self, "Qt Application Example", + "This example demonstrates simple use of\n " + "Qt's Multiple Document Interface (MDI).") + + def aboutQt(self): + QMessageBox.aboutQt( self, "Qt Application Example" ) + + def windowsMenuAboutToShow(self): + self.windows.clear() + cascadeId = self.windows.insertItem("&Cascade", self.ws, SLOT("cascade() ") ) + tileId = self.windows.insertItem("&Tile", self.ws, SLOT("tile()" ) ) + if len(self.ws.windowList())==0 : + self.windows.setItemEnabled( cascadeId, False ) + self.windows.setItemEnabled( tileId, False ) + self.windows.insertSeparator() + windows = self.ws.windowList() + cnt=0 + for i in windows: + id =self.windows.insertItem(i.caption(),self.windowsMenuActivated ) + self.windows.setItemParameter( id, cnt ); + self.windows.setItemChecked( id, self.ws.activeWindow() == i ) + cnt=cnt+1 + + def windowsMenuActivated(self,sid ): + w = self.ws.windowList().at( id ) + if w: + w.showNormal() + w.setFocus() + + +class MDIWindow( QMainWindow): + def __init__(self,parent, name, wflags ): + QMainWindow.__init__(self,parent, name, wflags ) + self.mmovie = 0 + self.medit = QMultiLineEdit( self ) + self.setFocusProxy( self.medit ) + self.setCentralWidget( self.medit ); + + + def load(self, fn ): + self.filename = fn + self.f=QFile( self.filename ) + if not self.f.open( IO_ReadOnly ): + return + + if fn.contains(".gif"): + tmp=QWidget(self) + self.setFocusProxy(tmp) + self.setCentralWidget(tmp) + self.medit.hide() + del self.medit + qm=QMovie(fn) + #ifdef Q_WS_QWS // temporary speed-test hack + #qm->setDisplayWidget(tmp); + #endif + tmp.setBackgroundMode(QWidget.NoBackground) + tmp.show() + self.mmovie=qm + else : + self.mmovie = 0 + t=QTextStream(self.f) + s = t.read() + self.medit.setText( s ) + self.f.close() + self.setCaption( self.filename ) + self.emit(PYSIGNAL( "message"),(QString("Loaded document %1").arg(self.filename),2000 )) + + def save(self): + if self.filename.isEmpty(): + self.saveAs() + return + text = self.medit.text() + output=open(str(self.filename),'w') + output.write(str(text)) + #emit message( QString("Could not write to %1").arg(filename), 2000 ); + #return + output.close() + self.setCaption(self.filename) + self.emit(PYSIGNAL( "message"),(QString("File %1 saved").arg(self.filename),2000 )) + + def saveAs(self): + fn = QFileDialog.getSaveFileName( self.filename, QString.null, self ) + if not fn.isEmpty(): + self.filename = fn + self.save() + else : + self.emit(PYSIGNAL( "message"),(QString("Saving aborted"),2000 )) + + def printDoc(self,printer): + Margin = 10 + pageNo = 1 + + if printer.setup(self): + self.emit(PYSIGNAL( "message"),(QString("Printing..."),2000 )) + p = QPainter() + p.begin(printer) + p.setFont(self.medit.font()) + yPos = 0 + fm = p.fontMetrics() + metrics = QPaintDeviceMetrics(printer) + + for i in range(self.medit.numLines()): + if Margin + yPos > metrics.height() - Margin: + pageNo = pageNo + 1 + self.emit(PYSIGNAL( "message"),(QString("Printing (page %1) ...").arg(pageNo),2000 )) + printer.newPage() + yPos = 0 + + p.drawText(Margin,Margin + yPos,metrics.width(),fm.lineSpacing(),Qt.ExpandTabs | Qt.DontClip,self.medit.textLine(i)) + yPos = yPos + fm.lineSpacing() + + p.end() + self.emit(PYSIGNAL( "message"),(QString("Printing completed"),2000 )) + else: + self.emit(PYSIGNAL( "message"),(QString("Printing aborted"),2000 )) + + +if __name__=='__main__': + a = QApplication(sys.argv) + mw = ApplicationWindow() + mw.setCaption("PyQt Example - Multiple Documents Interface (MDI)") + mw.show() + a.connect(a, SIGNAL('lastWindowClosed()'), a, SLOT('quit()')) + a.exec_loop() diff --git a/examples3/menu.py b/examples3/menu.py new file mode 100755 index 0000000..baab2a6 --- /dev/null +++ b/examples3/menu.py @@ -0,0 +1,286 @@ +#!/usr/bin/env python + +#**************************************************************************** +#** $Id: menu.py,v 1.3 2003/06/06 12:59:26 phil Exp $ +#** +#** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved. +#** +#** This file is part of an example program for PyQt. This example +#** program may be used, distributed and modified without limitation. +#** +#*****************************************************************************/ + +import sys, string +from qt import * + +TRUE = 1 +FALSE = 0 + +# XPM +p1_xpm = [ +"16 16 3 1", +" c None", +". c #000000000000", +"X c #FFFFFFFF0000", +" ", +" ", +" .... ", +" .XXXX. ", +" .............. ", +" .XXXXXXXXXXXX. ", +" .XXXXXXXXXXXX. ", +" .XXXXXXXXXXXX. ", +" .XXXXXXXXXXXX. ", +" .XXXXXXXXXXXX. ", +" .XXXXXXXXXXXX. ", +" .XXXXXXXXXXXX. ", +" .XXXXXXXXXXXX. ", +" .XXXXXXXXXXXX. ", +" .............. ", +" " +] + +# XPM +p2_xpm = [ +"16 16 3 1", +" c None", +". c #000000000000", +"X c #FFFFFFFFFFFF", +" ", +" ...... ", +" .XXX.X. ", +" .XXX.XX. ", +" .XXX.XXX. ", +" .XXX..... ", +" .XXXXXXX. ", +" .XXXXXXX. ", +" .XXXXXXX. ", +" .XXXXXXX. ", +" .XXXXXXX. ", +" .XXXXXXX. ", +" .XXXXXXX. ", +" ......... ", +" ", +" " +] + +# XPM +p3_xpm = [ +"16 16 3 1", +" c None", +". c #000000000000", +"X c #FFFFFFFFFFFF", +" ", +" ", +" ......... ", +" ........... ", +" ........ .. ", +" ........... ", +" ........... ", +" ........... ", +" ........... ", +" ...XXXXX... ", +" ...XXXXX... ", +" ...XXXXX... ", +" ...XXXXX... ", +" ......... ", +" ", +" " +] + + +# Auxiliary class to provide fancy menu items with different fonts. +# Used for the "bold" and "underline" menu items in the options menu. + +class MyMenuItem( QCustomMenuItem ): + def __init__( self, s, f ): + QCustomMenuItem.__init__( self ) + self.string = s + self.font = f + + def paint( self, p, cg, act, enabled, x, y, w, h ) : + p.setFont ( self.font ) + p.drawText( x, y, w, h, Qt.AlignLeft | Qt.AlignVCenter | Qt.ShowPrefix | Qt.DontClip, self.string ) + + def sizeHint( self ): + return QFontMetrics( self.font ).size( Qt.AlignLeft | Qt.AlignVCenter | Qt.ShowPrefix | Qt.DontClip, self.string ) + + +# Implementation of MenuExample class + +class MenuExample( QWidget ): + def __init__( self, parent=None, name=None ): + QWidget.__init__( self, parent, name ) + self.p1 = QIconSet( QPixmap ( p1_xpm ) ) + self.p2 = QIconSet( QPixmap ( p2_xpm ) ) + self.p3 = QIconSet( QPixmap ( p3_xpm ) ) + + self.printer = QPopupMenu( self ) + self.printer.insertTearOffHandle() + self.printer.insertItem( "&Print to printer", self.printDoc ) + self.printer.insertItem( "Print to &file", self.printFile ) + self.printer.insertItem( "Print to fa&x", self.fax ) + self.printer.insertSeparator() + self.printer.insertItem( "Printer &Setup", self.printerSetup ) + + self.file = QPopupMenu( self ) + self.file.insertItem( self.p1, "&Open", self.open, Qt.CTRL+Qt.Key_O ) + self.file.insertItem( self.p2, "&New", self.news, Qt.CTRL+Qt.Key_N ) + self.file.insertItem( self.p3, "&Save", self.save, Qt.CTRL+Qt.Key_S ) + self.file.insertItem( "&Close", self.closeDoc, Qt.CTRL+Qt.Key_W ) + self.file.insertSeparator() + self.file.insertItem( "&Print", self.printer, Qt.CTRL+Qt.Key_P ) + self.file.insertSeparator() + self.file.insertItem( "E&xit", qApp, SLOT( "quit()" ), Qt.CTRL+Qt.Key_Q ) + + self.edit = QPopupMenu( self ) + undoID = self.edit.insertItem( "&Undo", self.undo ) + redoID = self.edit.insertItem( "&Redo", self.redo ) + self.edit.setItemEnabled( undoID, FALSE ) + self.edit.setItemEnabled( redoID, FALSE ) + + self.options = QPopupMenu( self ) + self.options.insertTearOffHandle() + self.options.setCaption( "Options" ) + self.options.insertItem( "&Normal Font", self.normal ) + self.options.insertSeparator() + + self.options.polish() # adjust system settings + f = self.options.font() + f.setBold( TRUE ) + self.boldID = self.options.insertItem( MyMenuItem( "Bold", f ) ) + self.options.setAccel( Qt.CTRL+Qt.Key_B, self.boldID ) + self.options.connectItem( self.boldID, self.bold ) + + f = self.options.font() + f.setUnderline( TRUE ) + self.underlineID = self.options.insertItem( MyMenuItem( "Underline", f ) ) + self.options.setAccel( Qt.CTRL+Qt.Key_U, self.underlineID ) + self.options.connectItem( self.underlineID, self.underline ) + + self.isBold = FALSE + self.isUnderline = FALSE + self.options.setCheckable( TRUE ) + + self.help = QPopupMenu( self ) + self.help.insertItem( "&About", self.about, Qt.CTRL+Qt.Key_H ) + self.help.insertItem( "About &Qt", self.aboutQt ) + + self.menu = QMenuBar( self ) + self.menu.insertItem( "&File", self.file ) + self.menu.insertItem( "&Edit", self.edit ) + self.menu.insertItem( "&Options", self.options ) + self.menu.insertSeparator() + self.menu.insertItem( "&Help", self.help ) + self.menu.setSeparator( QMenuBar.InWindowsStyle ) + + msg = QLabel( self ) + msg.setText( "A context menu is available.\n" + "Invoke it by right-clicking or by" + " pressing the 'context' button." ) + msg.setGeometry( 0, self.height() - 60, self.width(), 60 ) + msg.setAlignment( Qt.AlignCenter ) + + self.label = QLabel( self ) + self.label.setGeometry( 20, self.rect().center().y()-20, self.width()-40, 40 ) + self.label.setFrameStyle( QFrame.Box | QFrame.Raised ) + self.label.setLineWidth( 1 ) + self.label.setAlignment( Qt.AlignCenter ) + + self.connect( self, PYSIGNAL( "explain" ), self.label, SLOT( "setText(const QString &" ) ) + + self.setMinimumSize( 100, 80 ) + self.setFocusPolicy( QWidget.ClickFocus ) + + def contextMenuEvent(self, cmev): + contextMenu = QPopupMenu( self ) + caption = QLabel( "Context Menu", self ) + caption.setAlignment( Qt.AlignCenter ) + contextMenu.insertItem( caption ) + contextMenu.insertItem( "&New", self.news, Qt.CTRL+Qt.Key_N ) + contextMenu.insertItem( "&Open...", self.open, Qt.CTRL+Qt.Key_O ) + contextMenu.insertItem( "&Save", self.save, Qt.CTRL+Qt.Key_S ) + submenu = QPopupMenu( self ) + submenu.insertItem( "&Print to printer", self.printDoc ) + submenu.insertItem( "Print to &file", self.printFile ) + submenu.insertItem( "Print to fa&x", self.fax ) + contextMenu.insertItem( "&Print", submenu ) + contextMenu.exec_loop( QCursor.pos() ) + + def open( self ): + self.emit( PYSIGNAL( "explain" ), ( "File/Open selected", ) ) + + def news( self ): + self.emit( PYSIGNAL( "explain" ), ( "File/New selected", ) ) + + def save( self ): + self.emit( PYSIGNAL( "explain" ), ( "File/Save selected", ) ) + + def closeDoc( self ): + self.emit( PYSIGNAL( "explain" ), ( "File/Close selected", ) ) + + def undo( self ): + self.emit( PYSIGNAL( "explain" ), ( "Edit/Undo selected", ) ) + + def redo( self ): + self.emit( PYSIGNAL( "explain" ), ( "Edit/Redo selected", ) ) + + def normal( self ): + self.isBold = FALSE + self.isUnderline = FALSE + font = QFont() + self.label.setFont( font ) + self.options.setItemChecked( self.boldID, self.isBold ) + self.options.setItemChecked( self.underlineID, self.isUnderline ) + self.emit( PYSIGNAL( "explain" ), ( "Options/Normal selected", ) ) + + def bold( self ): + self.isBold = not self.isBold + font = QFont() + font.setBold( self.isBold ) + font.setUnderline( self.isUnderline ) + self.label.setFont( font ) + self.options.setItemChecked( self.boldID, self.isBold ) + self.emit( PYSIGNAL( "explain" ), ( "Options/Bold selected", ) ) + + def underline( self ): + self.isUnderline = not self.isUnderline + font = QFont() + font.setBold( self.isBold ) + font.setUnderline( self.isUnderline ) + self.label.setFont( font ) + self.options.setItemChecked( self.underlineID, self.isUnderline ) + self.emit( PYSIGNAL("explain"), ( "Options/Underline selected", )) + + def about( self ): + QMessageBox.about( self, "Qt Menu Example", + "This example demonstrates simple use of Qt menus.\n" + "You can cut and paste lines from it to your own\n" + "programs." ) + + def aboutQt( self ): + QMessageBox.aboutQt( self, "Qt Menu Example" ) + + def printDoc( self ): + self.emit( PYSIGNAL( "explain" ), ( "File/Printer/Print selected", ) ) + + def printFile( self ): + self.emit( PYSIGNAL( "explain" ), ( "File/Printer/Print To File selected", ) ) + + def fax( self ): + self.emit( PYSIGNAL( "explain" ), ( "File/Printer/Print To Fax selected", ) ) + + def printerSetup( self ): + self.emit( PYSIGNAL( "explain" ), ( "File/Printer/Printer Setup selected", ) ) + + def resizeEvent( self, ev ): + self.label.setGeometry( 20, self.rect().center().y()-20, self.width()-40, 40 ) + + +a = QApplication( sys.argv ) +m = MenuExample() + +m.setCaption( "Qt Examples - Menus" ) +a.setMainWidget( m ) +m.show() +a.exec_loop() diff --git a/examples3/progress.py b/examples3/progress.py new file mode 100755 index 0000000..001be45 --- /dev/null +++ b/examples3/progress.py @@ -0,0 +1,281 @@ +#!/usr/bin/env python + +#/**************************************************************************** +#** $Id: progress.py 3.3.7 edited Aug 31 2005 $ +#** +#** Copyright (C) 1992-2005 Trolltech AS. All rights reserved. +#** +#** This file is part of an example program for Qt. This example +#** program may be used, distributed and modified without limitation. +#** +#** Converted to PyQt3 by Hans-Peter Jansen +#** +#*****************************************************************************/ + +import sys +from qt import * +from random import randint + +class AnimatedThingy(QLabel): + def __init__(self, parent, s): + QLabel.__init__(self, parent) + self.label = QString(s) + self.setEraseColor(Qt.white) + self.label.append("\n... and wasting CPU\nwith this animation!\n") + self.step = 0 + self.nqix = 10 + self.stepoff = 2 + self.stepmax = 7 + self.lwidth = 2 + self.tdelay = 100 + self.ox, self.oy = [], [] + for i in range(self.nqix): + self.ox.append((0, 0)) + self.oy.append((0, 0)) + self.x0, self.y0, self.x1, self.y1 = 0, 0, 0, 0 + self.dx0 = randint(0, self.stepmax) + self.stepoff + self.dy0 = randint(0, self.stepmax) + self.stepoff + self.dx1 = randint(0, self.stepmax) + self.stepoff + self.dy1 = randint(0, self.stepmax) + self.stepoff + + def show(self): + if not self.isVisible(): + self.startTimer(self.tdelay) + QWidget.show(self) + + def hide(self): + QWidget.hide(self) + self.killTimers() + + def sizeHint(self): + return QSize(120, 100) + + def timerEvent(self, e): + p, pn = self._painter() + pn.setColor(self.eraseColor()) + p.setPen(pn) + self.step = step = (self.step + 1) % self.nqix + # erase line + p.drawLine(self.ox[step][0], self.oy[step][0], + self.ox[step][1], self.oy[step][1]) + # calc new line coordinates + ww, wh = self.width(), self.height() + self.x0, self.dx0 = self._inc(self.x0, self.dx0, ww) + self.y0, self.dy0 = self._inc(self.y0, self.dy0, wh) + self.x1, self.dx1 = self._inc(self.x1, self.dx1, ww) + self.y1, self.dy1 = self._inc(self.y1, self.dy1, wh) + self.ox[step] = (self.x0, self.x1) + self.oy[step] = (self.y0, self.y1) + self._drawqix(p, pn, step) + self._drawtxt(p) + + def paintEvent(self, event): + p, pn = self._painter() + p.setClipRect(event.rect()) + for i in range(self.nqix): + self._drawqix(p, pn, i) + self._drawtxt(p) + + def _painter(self): + p = QPainter(self) + # we need to create a new pen from p.pen() with QPen() in order + # to make it fully functional (changes are discarded otherwise) + pn = QPen(p.pen()) + pn.setWidth(self.lwidth) + p.setPen(pn) + return p, pn + + def _drawqix(self, p, pn, step): + # rainbow effect + pn.setColor(QColor((step * 255)/self.nqix, 255, 255, QColor.Hsv)) + p.setPen(pn) + p.drawLine(self.ox[step][0], self.oy[step][0], + self.ox[step][1], self.oy[step][1]) + + def _drawtxt(self, p): + p.setPen(self.colorGroup().text()) + p.drawText(self.rect(), Qt.AlignCenter, self.label) + + def _inc(self, x, dx, b): + x += dx + if x < 0: + x = 0 + dx = randint(0, self.stepmax) + self.stepoff; + elif x >= b: + x = b - 1 + dx = -(randint(0, self.stepmax) + self.stepoff) + return x, dx + + +class CPUWaster(QWidget): + def __init__(self): + QWidget.__init__(self) + self.first_draw_item = 1000 + self.last_draw_item = 1006 + self.rects = 0 + self.timer_driven = 0 + self.default_label = 0 + self.got_stop = False + self.pb = None # non modal progress dialog + self.menubar = menubar = QMenuBar(self, "menu") + self.file_ = file_ = QPopupMenu() + menubar.insertItem("&File", file_) + for i in range(self.first_draw_item, self.last_draw_item + 1): + file_.insertItem(self.drawItemText(i), i) + file_.setAccel(QKeySequence( + "Ctrl+%s" % (i - self.first_draw_item)), i) + self.connect(menubar, SIGNAL("activated(int)"), self.doMenuItem) + file_.insertSeparator() + file_.insertItem("Quit", qApp, SLOT("quit()"), QKeySequence("Ctrl+Q")) + self.options = options = QPopupMenu() + menubar.insertItem("&Options", options) + self.ld_id = options.insertItem("Loop driven", self.loopDriven, + QKeySequence("Alt+L")) + self.td_id = options.insertItem("Timer driven", self.timerDriven, + QKeySequence("Alt+T")) + options.insertSeparator() + self.dl_id = options.insertItem("Default label", self.defaultLabel, + QKeySequence("Alt+D")) + self.cl_id = options.insertItem("Custom label", self.customLabel, + QKeySequence("Alt+C")) + options.insertSeparator() + self.md_id = options.insertItem("No minimum duration", + self.toggleMinimumDuration, + QKeySequence("Alt+M")) + options.setCheckable(True) + # default option settings + self.timerDriven() + self.customLabel() + self.toggleMinimumDuration() + self.resize(400, 300) + self.setEraseColor(Qt.black) + + def drawItemRects(self, id_): + r = 100 + for n in range(id_ - self.first_draw_item): + if not n % 3: + r *= 4 + else: + r *= 5 + return r + + def drawItemText(self, id_): + return QString("%d Rectangles" % self.drawItemRects(id_)) + + def enableDrawingItems(self, yes): + for i in range(self.first_draw_item, self.last_draw_item + 1): + self.menubar.setItemEnabled(i, yes) + + # slots + def doMenuItem(self, id_): + if id_ >= self.first_draw_item and id_ <= self.last_draw_item: + self.draw(self.drawItemRects(id_)) + + def timerDriven(self): + self.timer_driven = True + self.options.setItemChecked(self.td_id, True) + self.options.setItemChecked(self.ld_id, False) + + def loopDriven(self): + self.timer_driven = False + self.options.setItemChecked(self.ld_id, True) + self.options.setItemChecked(self.td_id, False) + + def defaultLabel(self): + self.default_label = True + self.options.setItemChecked(self.dl_id, True) + self.options.setItemChecked(self.cl_id, False) + + def customLabel(self): + self.default_label = False + self.options.setItemChecked(self.dl_id, False) + self.options.setItemChecked(self.cl_id, True) + + def toggleMinimumDuration(self): + self.options.setItemChecked(self.md_id, + not self.options.isItemChecked(self.md_id)) + + def stopDrawing(self): + self.got_stop = True + + def newProgressDialog(self, label, steps, modal): + d = QProgressDialog(label, "Cancel", steps, self, "progress", modal) + if self.options.isItemChecked(self.md_id): + d.setMinimumDuration(0) + if not self.default_label: + d.setLabel(AnimatedThingy(d, label)) + d.setCaption("Please Wait") + return d + + def draw(self, n): + if self.timer_driven: + if self.pb: + qWarning("This cannot happen!") + return + + self.rects = n + self.pb = self.newProgressDialog("Drawing rectangles.\n" + "Using timer event.", n, False) + self.connect(self.pb, SIGNAL("cancelled()"), self.stopDrawing) + self.enableDrawingItems(False) + self.startTimer(0) + self.got_stop = False + else: # loop driven with modal progress dialog + lpb = self.newProgressDialog("Drawing rectangles.\n" + "Using loop.", n, True) + p = QPainter(self) + for i in range(n): + lpb.setProgress(i) + if lpb.wasCancelled(): + break + self._draw(p) + self._clear(p) + lpb.cancel() + del lpb + + def timerEvent(self, e): + if not self.got_stop: + self.pb.setProgress(self.pb.totalSteps() - self.rects) + self.rects -= 1 + p = QPainter(self) + self._draw(p) + + if not self.rects or self.got_stop: + if not self.got_stop: + self.pb.setProgress(self.pb.totalSteps()) + self._clear(p) + self.enableDrawingItems(True) + self.killTimers() + self.pb.cancel() + del self.pb + self.pb = None + + def _draw(self, p): + ww = self.width() + wh = self.height() + if ww > 8 and wh > 8: + c = QColor(randint(0, 255), randint(0, 255), randint(0, 255)) + x = randint(0, ww - 8) + y = randint(0, wh - 8) + w = randint(0, ww - x) + h = randint(0, wh - y) + p.fillRect(x, y, w, h, QBrush(c)) + + def _clear(self, p): + p.fillRect(0, 0, self.width(), self.height(), QBrush(self.eraseColor())) + + +if __name__ == "__main__": + app = QApplication(sys.argv) + try: + n = int(sys.argv[1]) + except: + n = 1 + wlst = [] # keep a ref around + for i in range(n): + cpuw = CPUWaster() + if i == 0: + app.setMainWidget(cpuw) + cpuw.show() + wlst.append(cpuw) + app.exec_loop() diff --git a/examples3/progressbar.py b/examples3/progressbar.py new file mode 100755 index 0000000..beca2b6 --- /dev/null +++ b/examples3/progressbar.py @@ -0,0 +1,155 @@ +#!/usr/bin/env python + +"""*********************************************************************** +** $Id: progressbar.py,v 1.1 2003/06/10 14:51:24 phil Exp $ +** +** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +**************************************************************************""" + +#import pdb +import sys +from qt import * + +FALSE = 0 +TRUE = 1 + +class ProgressBar( QButtonGroup ): + # Constructor + # Creates child widgets of the ProgressBar widget + def __init__( self, parent=None, name=None ): + QButtonGroup.__init__( self, 0, Qt.Horizontal, "Progress Bar", parent, name ) + + self.timer = QTimer() + + self.setMargin( 10 ) + toplayout = QGridLayout( self.layout(), 2, 2, 5) + + self.setRadioButtonExclusive( TRUE ) + + # insert three radiobuttons which the user can use + # to set the speed of the progress and two pushbuttons + # to start/pause/continue and reset the progress + self.slow = QRadioButton( "&Slow", self ) + self.normal = QRadioButton( "&Normal", self ) + self.fast = QRadioButton( "&Fast", self ) + vb1 = QVBoxLayout( ) + toplayout.addLayout( vb1, 0, 0 ) + vb1.addWidget( self.slow ) + vb1.addWidget( self.normal ) + vb1.addWidget( self.fast ) + + # two push buttons, one for start, for for reset. + self.start = QPushButton( "&Start", self ) + self.reset = QPushButton( "&Reset", self ) + + vb2 = QVBoxLayout() + toplayout.addLayout( vb2, 0, 1 ) + vb2.addWidget( self.start ) + vb2.addWidget( self.reset ) + + # Create the progressbar + self.progress = QProgressBar( 100, self ) + #self.progress.setStyle( QMotifStyle() ) + toplayout.addMultiCellWidget( self.progress, 1, 1, 0, 1 ) + + # connect the clicked() SIGNALs of the pushbuttons to SLOTs + self.connect( self.start, SIGNAL("clicked()"), self.slotStart ) + self.connect( self.reset, SIGNAL("clicked()"), self.slotReset ) + + # connect the timeout() SIGNAL of the progress-timer to a SLOT + self.connect( self.timer, SIGNAL("timeout()"), self.slotTimeout ) + # Let's start with normal speed... + self.normal.setChecked( TRUE ) + + # some contraints + self.start.setFixedWidth( 80 ) + self.setMinimumWidth( 300 ) + + # SLOT slotStart + # This SLOT is called if the user clicks start/pause/continue button + def slotStart( self ): + # If the progress bar is at the beginning... + if self.progress.progress() == -1 : + # ...set according to the checked speed-radiobutton the + # the number of steps which are needed to complete the process + if self.slow.isChecked(): + self.progress.setTotalSteps( 10000 ) + elif self.normal.isChecked() : + self.progress.setTotalSteps( 1000 ) + else : + self.progress.setTotalSteps( 50 ) + + # disable the speed-radiobuttons + self.slow.setEnabled( FALSE ) + self.normal.setEnabled( FALSE ) + self.fast.setEnabled( FALSE ) + + # If the progress is not running... + if not self.timer.isActive() : + # ...start the timer (and so the progress) with a interval of 1 ms... + self.timer.start( 1 ) + # ...and rename the start/pause/continue button to Pause + self.start.setText( "&Pause" ) + else : # if the prgress is running... + # ...stop the timer (and so the prgress)... + self.timer.stop() + # ...and rename the start/pause/continue button to Continue + self.start.setText( "&Continue" ) + + # SLOT slotReset + # This SLOT is called when the user clicks the reset button + def slotReset( self ): + # stop the timer and progress + self.timer.stop() + + # rename the start/pause/continue button to Start... + self.start.setText( "&Start" ) + # ...and enable this button + self.start.setEnabled( TRUE ) + + # enable the speed-radiobuttons + self.slow.setEnabled( TRUE ) + self.normal.setEnabled( TRUE ) + self.fast.setEnabled( TRUE ) + + # reset the progressbar + self.progress.reset() + + # SLOT slotTimeout + # This SLOT is called each ms when the timer is + # active (== progress is running) + def slotTimeout( self ): + p = self.progress.progress() + + # If the progress is complete... + if p == self.progress.totalSteps() : + # ...rename the start/pause/continue button to Start... + self.start.setText( "&Start" ) + # ...and disable it... + self.start.setEnabled( FALSE ) + # ...and return + return + + # If the process is not complete increase it + p += 1 + self.progress.setProgress( p ) + + + #QPushButton *start, *pause, *reset; + +def main( args ): + a = QApplication( args ) + + progressbar = ProgressBar() + progressbar.setCaption("Qt Example - ProgressBar") + a.setMainWidget(progressbar) + progressbar.show() + + a.exec_loop() + +if __name__=="__main__": + main(sys.argv) diff --git a/examples3/qdir.py b/examples3/qdir.py new file mode 100755 index 0000000..0da10eb --- /dev/null +++ b/examples3/qdir.py @@ -0,0 +1,323 @@ +#!/usr/bin/env python +# +# 2005-02-12 initial version hp + +import os +import pickle +from qt import * +from dirview import Directory, DirectoryView + +bookmarks = [ + "22 14 8 1", + "# c #000080", + "a c #585858", + "b c #000000", + "c c #ffffff", + "d c #ffffff", + "e c #ffffff", + "f c #000000", + ". c None", + "...bb.................", + "..bacb....bbb.........", + "..badcb.bbccbab.......", + "..bacccbadccbab.......", + "..baecdbcccdbab.......", + "..bacccbacccbab.......", + "..badcdbcecdfab.......", + "..bacecbacccbab.......", + "..baccdbcccdbab.......", + "...badcbacdbbab.......", + "....bacbcbbccab.......", + ".....babbaaaaab.......", + ".....bbabbbbbbb.......", + "......bb.............." +] + +home = [ + "16 15 4 1", + "# c #000000", + "a c #ffffff", + "b c #c0c0c0", + ". c None", + ".......##.......", + "..#...####......", + "..#..#aabb#.....", + "..#.#aaaabb#....", + "..##aaaaaabb#...", + "..#aaaaaaaabb#..", + ".#aaaaaaaaabbb#.", + "###aaaaaaaabb###", + "..#aaaaaaaabb#..", + "..#aaa###aabb#..", + "..#aaa#.#aabb#..", + "..#aaa#.#aabb#..", + "..#aaa#.#aabb#..", + "..#aaa#.#aabb#..", + "..#####.######.." +] + + +class PixmapView(QScrollView): + def __init__(self, parent): + QScrollView.__init__(self, parent) + self.pixmap = None + self.viewport().setBackgroundMode(self.PaletteBase) + + def setPixmap(self, pix): + self.pixmap = pix + self.resizeContents(pix.size().width(), pix.size().height()) + self.viewport().repaint(False) + + def drawContents(self, p, cx, cy, cw, ch): + p.fillRect(cx, cy, cw, ch, self.colorGroup().brush(QColorGroup.Base)) + p.drawPixmap(0, 0, self.pixmap) + + +class Preview(QWidgetStack): + def __init__(self, parent): + QWidgetStack.__init__(self, parent) + self.normalText = QMultiLineEdit(self) + self.normalText.setReadOnly(True) + self.html = QTextView(self) + self.pixmap = PixmapView(self) + self.raiseWidget(self.normalText) + + def showPreview(self, url, size): + if url.isLocalFile(): + path = url.path() + fi = QFileInfo(path) + if fi.isFile() and fi.size() > size * 1000: + self.normalText.setText( + "The File\n%s\nis too large, so I don't show it!" % path) + self.raiseWidget(self.normalText) + return + pix = QPixmap(path) + if pix.isNull(): + if fi.isFile(): + err = False + try: + text = open(path.latin1(), "r").read() + except IOError, msg: + text = QString(str(msg)) + err = True + if not err and fi.extension().lower().contains("htm"): + url = self.html.mimeSourceFactory().makeAbsolute( + path, self.html.context()) + self.html.setText(text, url) + self.raiseWidget(self.html) + return + else: + self.normalText.setText(text) + self.raiseWidget(self.normalText) + return + else: + self.normalText.setText("") + self.raiseWidget(self.normalText) + else: + self.pixmap.setPixmap(pix) + self.raiseWidget(self.pixmap) + else: + self.normalText.setText("I only show local files!") + self.raiseWidget(self.normalText) + + +# We can't instantiate QFilePreview directly because it is abstract. Note that +# the previewUrl() abstract is patched in later to work around the fact that +# you can't multiply inherit from more than one wrapped class. +class FilePreview(QFilePreview): + pass + + +class PreviewWidget(QVBox): + def __init__(self, parent): + QVBox.__init__(self, parent) + self.setSpacing( 5 ) + self.setMargin( 5 ) + row = QHBox(self) + row.setSpacing(5) + QLabel("Only show files smaller than: ", row) + self.sizeSpinBox = QSpinBox(1, 10000, 1, row) + self.sizeSpinBox.setSuffix(" KB") + self.sizeSpinBox.setValue(128) + row.setFixedHeight(10 + self.sizeSpinBox.sizeHint().height()) + self.__preview = Preview(self) + # workaround sip inability of multiple inheritance + # create a local QFilePreview instance and redirect + # the method, which is called on preview, to us + self.preview = FilePreview() + self.preview.previewUrl = self.previewUrl + + def previewUrl(self, url): + self.__preview.showPreview(url, self.sizeSpinBox.value()) + + +class CustomFileDialog(QFileDialog): + def __init__(self, preview = False): + QFileDialog.__init__(self, None, None, True) + self.bookmarkFile = ".pybookmarks" + self.bookmarkList = [] + if os.path.exists(self.bookmarkFile): + try: + self.bookmarkList = pickle.loads(open(self.bookmarkFile, "rb").read()) + except IOError, msg: + print msg + self.setDir("/") + self.dirView = DirectoryView(self, None, True) + self.dirView.addColumn("") + self.dirView.header().hide() + root = Directory(self.dirView, "/") + root.setOpen(True) + self.dirView.setFixedWidth(200) + self.addLeftWidget(self.dirView) + p = QPushButton(self) + p.setPixmap(QPixmap(bookmarks)) + QToolTip.add(p, "Bookmarks") + self.bookmarkMenu = QPopupMenu(self) + self.connect(self.bookmarkMenu, SIGNAL("activated(int)"), + self.bookmarkChosen) + self.addId = self.bookmarkMenu.insertItem("Add bookmark") + self.bookmarkMenu.insertSeparator() + for l in self.bookmarkList: + self.bookmarkMenu.insertItem(l) + p.setPopup(self.bookmarkMenu) + self.addToolButton(p, True) + self.connect(self.dirView, PYSIGNAL("folderSelected(const QString &)"), + self.setDir2) + self.connect(self, SIGNAL("dirEntered(const QString &)"), + self.dirView.setDir) + b = QToolButton(self) + QToolTip.add(b, "Go Home!") + b.setPixmap(QPixmap(home)) + self.connect(b, SIGNAL("clicked()"), self.goHome) + self.addToolButton(b) + + if preview: + self.setContentsPreviewEnabled(True) + pw = PreviewWidget(self) + self.setContentsPreview(pw, pw.preview) + self.setViewMode(QFileDialog.List) + self.setPreviewMode(QFileDialog.Contents) + + w = self.width() + h = self.height() + if preview: + self.resize(w + w / 2, h + h / 3) + else: + self.resize(w + w / 3, h + h / 4) + + def done(self, r): + if self.bookmarkList: + try: + open(self.bookmarkFile, "wb").write(pickle.dumps(self.bookmarkList)) + except IOError, msg: + print msg + return QFileDialog.done(self, r) + + def showEvent(self, e): + QFileDialog.showEvent(self, e) + self.dirView.setDir(self.dirPath()) + + def setDir2(self, path): + self.blockSignals(True) + self.setDir(path) + self.blockSignals(False) + + def bookmarkChosen(self, i): + if i == self.addId: + # keep bookmarks pythonic + dp = self.dirPath().latin1() + if dp not in self.bookmarkList: + self.bookmarkList.append(dp) + self.bookmarkMenu.insertItem(dp) + else: + self.setDir(self.bookmarkMenu.text(i)) + + def goHome(self): + if os.getenv("HOME"): + self.setDir(os.getenv("HOME")) + else: + self.setDir("/") + + +if __name__ == '__main__': + import sys + import getopt + + def usage(msg = None): + if msg: + print >> sys.stderr, msg + print >> sys.stderr, """\ +usage: qdir [--any | --dir | --custom] [--preview] [--default f] {--filter f} [caption ...] + --any Get any filename, need not exist. + --dir Return a directory rather than a file. + --custom Opens a customized QFileDialog with + dir browser, bookmark menu, etc. + --preview Show a preview widget. + --default f Start from directory/file f. + --filter f eg. '*.gif' '*.bmp' + caption ... Caption for dialog. +""" + sys.exit(1) + + def main(): + options = ["help", "any", "dir", "custom", "preview", "default=", "filter="] + mode = QFileDialog.ExistingFile + preview = False + custom = False + start = None + filter = QString.null + app = QApplication(sys.argv) + + try: + optlist, args = getopt.getopt(sys.argv[1:], "h", options) + except getopt.error, msg: + usage(msg) + + for opt, par in optlist: + if opt in ("-h", "--help"): + usage() + elif opt == "--any": + mode = QFileDialog.AnyFile + elif opt == "--dir": + mode = QFileDialog.Directory + elif opt == "--default": + start = par + elif opt == "--filter": + filter = par + elif opt == "--preview": + preview = True + elif opt == "--custom": + custom = True + if args: + caption = " ".join(args) + elif mode == QFileDialog.Directory: + caption = "Choose directory..." + else: + caption = "Choose file..." + if not start: + start = QDir.currentDirPath() + if not custom: + fd = QFileDialog(QString.null, filter, None, None, True) + fd.setMode(mode) + if preview: + fd.setContentsPreviewEnabled(True) + pw = PreviewWidget(fd) + fd.setContentsPreview(pw, pw.preview) + fd.setViewMode(QFileDialog.List) + fd.setPreviewMode(QFileDialog.Contents) + w = fd.width() + h = fd.height() + fd.resize(w + w / 3, h + h / 4) + fd.setCaption(caption) + fd.setSelection(start) + if fd.exec_loop() == QDialog.Accepted: + print "%s\n" % fd.selectedFile().latin1() + return 0 + else: + return 1 + else: + fd = CustomFileDialog(preview) + fd.exec_loop() + return 1 + + sys.exit(main()) diff --git a/examples3/qmag.py b/examples3/qmag.py new file mode 100755 index 0000000..f27da2c --- /dev/null +++ b/examples3/qmag.py @@ -0,0 +1,233 @@ +#!/usr/bin/env python + +#**************************************************************************** +#** $Id: qmag.py,v 1.1 2002/06/20 18:52:31 phil Exp $ +#** +#** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved. +#** +#** This file is part of an example program for PyQt. This example +#** program may be used, distributed and modified without limitation. +#** +#*****************************************************************************/ + +import sys +from qt import * + +TRUE = 1 +FALSE = 0 + +zoomfactors = ["100%","200%","300%","400%","500%","600%","700%","800%","1600%"] + +refreshrates = [ + "No autorefresh", "50 per second", "4 per second", "3 per second", + "2 per second", "Every second", "Every two seconds", "Every three seconds", + "Every five seconds", "Every ten seconds"] + +timer = (0, 20, 250, 333, 500, 1000, 2000, 3000, 5000, 10000) + +class MagWidget(QWidget): + def __init__(self, qApp, parent = None, name = None): + self.qApp = qApp + QWidget.__init__(self, parent, name) + self.pm = QPixmap() # pixmap magnified + self.p = QPixmap() # pixmap + self.image = QImage() # image of pixmap (for RGB) + self.z = 0 # zoom factor + self.r = 0 # autorefresh rate (index into refreshrates) + self.grabbing = FALSE # TRUE if currently grabbing + self.grabx = -1 + self.graby = -1 + + self.zoom = QComboBox(FALSE, self) + self.zoom.insertStrList(zoomfactors, len(zoomfactors)) + self.connect(self.zoom, SIGNAL("activated(int)"), + self.setZoom) + + self.refresh = QComboBox(FALSE, self) + self.refresh.insertStrList(refreshrates, len(refreshrates)) + self.connect(self.refresh, SIGNAL("activated(int)"), + self.setRefresh) + + x = 0 + w = 0 + h = 20 + for s in zoomfactors: + cw = self.zoom.fontMetrics().width(s) + w = max(cw, w) + self.zoom.setGeometry(x, 2, w + 30, h) + + x = w + 34 + w = 0 + for s in refreshrates: + cw = self.refresh.fontMetrics().width(s) + w = max(cw, w) + self.refresh.setGeometry(x, 2, w + 30, h) + + self.saveButton = QPushButton(self) + self.connect(self.saveButton, SIGNAL("clicked()"), self.save) + self.saveButton.setText("Save") + self.saveButton.setGeometry(x + w + 30 + 2, 2, + 10 + self.saveButton.fontMetrics().width("Save"), h) + + self.quitButton = QPushButton(self) + self.connect(self.quitButton, SIGNAL("clicked()"), self.qApp, SLOT("quit()")) + self.quitButton.setText("Quit") + self.quitButton.setGeometry(self.saveButton.geometry().right() + 2, 2, + 10 + self.quitButton.fontMetrics().width("Quit"), h) + + self.rgb = QLabel(self) + self.rgb.setText("") + self.rgb.setAlignment(Qt.AlignVCenter) + self.rgb.resize(self.width(), self.rgb.fontMetrics().height() + 4) + + self.yoffset = self.zoom.height() + 4 + self.rgb.height() + self.setMinimumSize(self.quitButton.geometry().topRight().x() + 2, + self.yoffset + 20) + w = self.quitButton.geometry().topRight().x() + 2 + self.resize(w, w) + + self.setMouseTracking(TRUE) + self.grabx = self.qApp.desktop().width() / 2 + self.graby = self.qApp.desktop().height() / 2 + self.grabAround(QPoint(self.grabx, self.graby)) + + #self.zoom.setCurrentItem(1) # grabAround sets zoom factor + #self.setZoom(1) + self.refresh.setCurrentItem(5) + self.setRefresh(5) + + def setZoom(self, index): + if index == 8: + self.z = 16 + else: + self.z = index + 1 + self.grab() + + def setRefresh(self, index): + self.r = index + self.killTimers() + if index and not self.grabbing: + #print "st:", timer[index] + self.startTimer(timer[index]) + + def save(self): + if not self.p.isNull(): + self.killTimers() + fn = QFileDialog.getSaveFileName() + if not fn.isEmpty(): + self.p.save(fn, "BMP") + if self.r: + self.startTimer(timer[self.r]) + + def grab(self): + if not self.isVisible() or self.grabx < 0 or self.graby < 0: + return + + w = (self.width() + self.z - 1) / self.z + h = (self.height() + self.z - 1 - self.yoffset) / self.z + + if w < 1 or h < 1: + return + + x = self.grabx - w / 2 + y = self.graby - h / 2 + + if x + w > QApplication.desktop().width(): + x = QApplication.desktop().width() - w + elif x < 0: + x = 0 + + if y + h > QApplication.desktop().height(): + y = QApplication.desktop().height() - h + elif y < 0: + y = 0 + + self.p = QPixmap.grabWindow(QApplication.desktop().winId(), x, y, w, h) + self.image = self.p.convertToImage() + m = QWMatrix() + #print "z:", self.z + m.scale(float(self.z), float(self.z)) + self.pm = self.p.xForm(m) + self.repaint(FALSE) + + def paintEvent(self, e): + if not self.pm.isNull(): + paint = QPainter(self) + paint.drawPixmap(0, self.zoom.height() + 4, self.pm, + 0, 0, self.width(), self.height() - self.yoffset) + + def mousePressEvent(self, e): + if not self.grabbing: + self.grabbing = TRUE + self.killTimers() + self.grabMouse(Qt.crossCursor) + self.grabx = -1 + self.graby = -1 + else: + self.grabx = self.mapToGlobal(e.pos()).x() + self.graby = self.mapToGlobal(e.pos()).y() + + def mouseReleaseEvent(self, e): + if self.grabbing and self.grabx >= 0 and self.graby >= 0: + self.grabbing = FALSE + self.grabAround(e.pos()) + self.releaseMouse() + + def grabAround(self, pos): + rx = self.mapToGlobal(pos).x() + ry = self.mapToGlobal(pos).y() + w = abs(rx - self.grabx) + h = abs(ry - self.graby) + if w > 10 and h > 10: + pz = 1 + while w*pz*h*pz < self.width()*(self.height()-self.yoffset) and \ + w*pz < QApplication.desktop().width() and \ + h*pz < QApplication.desktop().height(): + pz += 1 + if (w*pz*h*pz - self.width()*(self.height()-self.yoffset)) > \ + (self.width()*(self.height()-self.yoffset) - w*(pz-1)*h*(pz-1)): + pz -= 1 + if pz < 1: + pz = 1 + elif pz > 8: + pz = 8 + self.zoom.setCurrentItem(pz-1) + self.z = pz + self.grabx = min(rx, self.grabx) + w / 2 + self.graby = min(ry, self.graby) + h / 2 + #self.resize(w*self.z, h*self.z*self.yoffset) + self.grab() + + def mouseMoveEvent(self, e): + if self.grabbing or self.pm.isNull() or \ + e.pos().y() > self.height() - self.zoom.fontMetrics().height() - 4 or \ + e.pos().y() < self.zoom.height() + 4: + self.rgb.setText("") + else: + x = e.pos().x() / self.z + y = (e.pos().y() - self.zoom.height() - 4) / self.z + pixelinfo = "" + if self.image.valid(x, y): + px = self.image.pixel(x, y) + pixelinfo = "%3d,%3d,%3d #%02x%02x%02x" % ( + qRed(px), qGreen(px), qBlue(px), + qRed(px), qGreen(px), qBlue(px)) + self.rgb.setText("x=%d, y=%d %s" % \ + (x + self.grabx, y + self.graby, pixelinfo)) + + def focusOutEvent(self, e): + self.rgb.setText("") + + def timerEvent(self, e): + self.grab() + + def resizeEvent(self, e): + self.rgb.setGeometry(0, self.height() - self.rgb.height(), + self.width(), self.rgb.height()) + +if __name__=='__main__': + app = QApplication( sys.argv ) + m = MagWidget(app) + app.setMainWidget(m) + m.show() + app.exec_loop() diff --git a/examples3/qt.png b/examples3/qt.png new file mode 100644 index 0000000..ca630a5 Binary files /dev/null and b/examples3/qt.png differ diff --git a/examples3/qtlogo.png b/examples3/qtlogo.png new file mode 100644 index 0000000..0dc05a0 Binary files /dev/null and b/examples3/qtlogo.png differ diff --git a/examples3/rangecontrols.py b/examples3/rangecontrols.py new file mode 100755 index 0000000..a47b8ff --- /dev/null +++ b/examples3/rangecontrols.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python + +"""************************************************************************** +** $Id: rangecontrols.py,v 1.1 2003/07/01 14:18:37 phil Exp $ +** +** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +***************************************************************************""" + +import sys +from qt import * + +INT_MAX = sys.maxint + +class RangeControls( QVBox ): + def __init__( self, parent=None, name=None ): + QVBox.__init__( self, parent, name ) + + row1 = QHBox( self ) + cell2 = QVBox( row1 ) + cell2.setMargin( 10 ) + cell2.setFrameStyle( QFrame.WinPanel | QFrame.Sunken ) + + QWidget( cell2 ) + + label1 = QLabel( QString( "Enter a value between\n%1 and %2:" ).arg( -INT_MAX ).arg( INT_MAX ), cell2 ) + label1.setMaximumHeight( label1.sizeHint().height() ) + sb1 = QSpinBox( -INT_MAX, INT_MAX, 1, cell2 ) + sb1.setValue( 0 ) + + label2 = QLabel( "Enter a zoom value:", cell2 ) + label2.setMaximumHeight( label2.sizeHint().height() ) + sb2 = QSpinBox( 0, 1000, 10, cell2 ) + sb2.setSuffix( " %" ) + sb2.setSpecialValueText( "Automatic" ) + + label3 = QLabel( "Enter a price:", cell2 ) + label3.setMaximumHeight( label3.sizeHint().height() ) + sb3 = QSpinBox( 0, INT_MAX, 1, cell2 ) + sb3.setPrefix( "$" ) + sb3.setValue( 355 ) + + QWidget( cell2 ) + + row2 = QHBox( self ) + + cell3 = QVBox( row2 ) + cell3.setMargin( 10 ) + cell3.setFrameStyle( QFrame.WinPanel | QFrame.Sunken ) + hslider = QSlider( 0, 64, 1, 33, Qt.Horizontal, cell3 ) + lcd2 = QLCDNumber( 2, cell3 ) + lcd2.display( 33 ) + lcd2.setSegmentStyle( QLCDNumber.Filled ) + self.connect( hslider, SIGNAL("valueChanged( int )"), lcd2, SLOT("display( int )") ) + + cell4 = QHBox( row2 ) + cell4.setFrameStyle( QFrame.WinPanel | QFrame.Sunken ) + cell4.setMargin( 10 ) + vslider = QSlider( 0, 64, 1, 8, Qt.Vertical, cell4 ) + lcd3 = QLCDNumber( 3, cell4 ) + lcd3.display( 8 ) + self.connect( vslider, SIGNAL("valueChanged( int )"), lcd3, SLOT("display( int )") ) + +def main( args ): + a = QApplication( args ) + + rangecontrols = RangeControls() + rangecontrols.resize( 500, 300 ) + rangecontrols.setCaption( "Qt Example - Range Control Widgets" ); + a.setMainWidget( rangecontrols ) + rangecontrols.show() + + a.exec_loop() + +if __name__=="__main__": + main(sys.argv) diff --git a/examples3/richtext.py b/examples3/richtext.py new file mode 100755 index 0000000..592213d --- /dev/null +++ b/examples3/richtext.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python + +"""************************************************************************** +** $Id: richtext.py,v 1.1 2003/07/01 14:18:37 phil Exp $ +** +** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +***************************************************************************""" + +import sys +from qt import * + +sayings = [ + "Saying 1:
" + "


" + "Evil is that which one believes of others. It is a sin to believe evil " + "of others, but it is seldom a mistake.

" + "
-- H.L. Mencken
", + + "Saying 2:
" + "


" + "A well-used door needs no oil on its hinges.
" + "A swift-flowing steam does not grow stagnant.
" + "Neither sound nor thoughts can travel through a vacuum.
" + "Software rots if not used.

" + "These are great mysteries.


" + "
-- Geoffrey James, \"The Tao of Programming\"
", + + "Saying 3:
" + "


" + "Show business is just like high school, except you get paid.

" + "
-- Martin Mull
", + + "Saying 4:
" + "


" + "The Least Successful Executions
" + "

History has furnished us with two executioners worthy of attention. " + "The first performed in Sydney in Australia. In 1803 three attempts were " + "made to hang a Mr. Joseph Samuels. On the first two of these the rope " + "snapped, while on the third Mr. Samuels just hung there peacefully until he " + "and everyone else got bored. Since he had proved unsusceptible to capital " + "punishment, he was reprieved.

" + "

The most important British executioner was Mr. James Berry who " + "tried three times in 1885 to hang Mr. John Lee at Exeter Jail, but on each " + "occasion failed to get the trap door open." + "

In recognition of this achievement, the Home Secretary commuted " + "Lee's sentence to \"life\" imprisonment. He was released in 1917, emigrated " + "to America and lived until 1933.



" + "
-- Stephen Pile, \"The Book of Heroic Failures\"
", + + "Saying 5:
" + "


" + "If you can, help others. If you can't, at least don't hurt others.

" + "
-- the Dalai Lama
", + + "Saying 6:
" + "


" + "Television has brought back murder into the home -- where it belongs.

" + "
-- Alfred Hitchcock
", + + "Saying 7:
" + "


" + "I don't know who my grandfather was; I am much more concerned to know " + "what his grandson will be.

" + "
-- Abraham Lincoln
", + + 0 +] + +class MyRichText( QVBox ): + def __init__( self, parent = None, name = None ): + QVBox.__init__( self, parent, name ) + + self.setMargin( 5 ) + + self.view = QTextView( self ) + #self.view.setText( "This is a Test with italic stuff" ) + paper = QBrush() + paper.setPixmap( QPixmap( "marble.png" ) ) + if paper.pixmap() != 0 : + self.view.setPaper( paper ) + else : + self.view.setPaper( white ) + + self.view.setText( sayings[0] ) + self.view.setMinimumSize( 450, 250 ) + + buttons = QHBox( self ) + buttons.setMargin( 5 ) + + self.bClose = QPushButton( "&Close", buttons ) + self.bPrev = QPushButton( "<< &Prev", buttons ) + self.bNext = QPushButton( "&Next >>", buttons ) + + self.bPrev.setEnabled( False ) + + self.connect( self.bClose, SIGNAL("clicked()"), qApp, SLOT("quit()") ) + self.connect( self.bPrev, SIGNAL("clicked()"), self.prev ) + self.connect( self.bNext, SIGNAL("clicked()"), self.next ) + + self.num = 0 + + def prev( self ): + if self.num <= 0 : + return + self.num -= 1 + self.view.setText( sayings[self.num] ) + if self.num == 0 : + self.bPrev.setEnabled( False ) + self.bNext.setEnabled( True ) + + def next( self ): + self.num += 1 + if not sayings[self.num]: + return + self.view.setText( sayings[self.num] ) + if not sayings[self.num + 1]: + self.bNext.setEnabled( False ) + self.bPrev.setEnabled( True ) + +def main( args ): + a = QApplication(sys.argv) # application object + + richtext = MyRichText() + richtext.resize( 450, 350 ); + richtext.setCaption( "Qt Example - Richtext" ) + a.setMainWidget( richtext ) + richtext.show() + + a.exec_loop() + +if __name__=="__main__": + main(sys.argv) diff --git a/examples3/secret.py b/examples3/secret.py new file mode 100644 index 0000000..d6d2b6d --- /dev/null +++ b/examples3/secret.py @@ -0,0 +1,65 @@ +# This is part of the dragdrop example. + + +from qt import * + + +def canDecode(e): + return e.provides( "secret/magic" ) + + +def decode(e): + payload = str(e.data( "secret/magic" )) + if ( str(payload) != '' ): + e.accept() + return QString("The secret number is "+str(ord(payload)) ) + + return None + + +class SecretDrag(QStoredDrag): + def __init__(self, secret, parent=None, name=None): + QStoredDrag.__init__(self, 'secret/magic', parent, name) + data = QByteArray(chr(secret)) + self.setEncodedData( data ) + + +# XPM +picture_xpm = [ + "16 16 3 1", + " c None", + ". c #000000", + "X c #FFFF00", + " ..... ", + " ..XXXXX.. ", + " .XXXXXXXXX. ", + " .XXXXXXXXXXX. ", + " .XX..XXX..XX. ", + ".XXXXXXXXXXXXX. ", + ".XX...XXX...XX. ", + ".XXX..XXX..XXX. ", + ".XXXXXXXXXXXXX. ", + ".XXXXXX.XXXXXX. ", + " .XX.XX.XX.XX. ", + " .XXX..X..XXX. ", + " .XXXXXXXXX. ", + " ..XXXXX.. ", + " ..... ", + " " +] + + +class SecretSource(QLabel): + def __init__(self, secret, parent=None, name=None): + QLabel.__init__(self, "Secret", parent, name) + self.setEraseColor( Qt.blue.light() ) + self.setFrameStyle( QLabel.Box | QLabel.Sunken ) + self.setMinimumHeight( self.sizeHint().height()*2 ) + self.setAlignment( QLabel.AlignCenter ) + self.mySecret = secret + + def mousePressEvent(self, e): + sd = SecretDrag( self.mySecret, self ) + sd.setPixmap(QPixmap(picture_xpm),QPoint(8,8)) + sd.dragCopy() + self.mySecret = self.mySecret + 1 diff --git a/examples3/semaphore.py b/examples3/semaphore.py new file mode 100755 index 0000000..ac8b231 --- /dev/null +++ b/examples3/semaphore.py @@ -0,0 +1,203 @@ +#!/usr/bin/env python +# +# A port of the semaphore example from Qt. + + +import sys + +# Check if thread support was enabled. +try: + from qt import QThread +except: + print "Thread support not enabled" + sys.exit(1) + +from qt import * + + +# The semaphore instances. +yellowSem = None +greenSem = None + + +class YellowThread(QThread): + def __init__(self,o): + QThread.__init__(self) + + self.receiver = o + self.stopped = 0 + self.mutex = QMutex() + + def run(self): + global yellowSem, greenSem + + for i in range(20): + yellowSem += 1 + + event = QCustomEvent(12345) + event.setData(QString("Yellow!")) + QThread.postEvent(self.receiver,event) + self.msleep(200); + + greenSem -= 1 + + self.mutex.lock() + if self.stopped: + self.stopped = 0 + self.mutex.unlock() + break + + self.mutex.unlock() + + yellowSem += 1 + + event = QCustomEvent(12346) + event.setData(QString("Yellow!")) + QThread.postEvent(self.receiver,event) + + greenSem -= 1 + + def stop(self): + self.mutex.lock() + self.stopped = 1 + self.mutex.unlock() + + +class GreenThread(QThread): + def __init__(self,o): + QThread.__init__(self) + + self.receiver = o + self.stopped = 0 + self.mutex = QMutex() + + def run(self): + global yellowSem, greenSem + + for i in range(20): + greenSem += 1 + + event = QCustomEvent(12345) + event.setData(QString("Green!")) + QThread.postEvent(self.receiver,event) + self.msleep(200) + + yellowSem -= 1 + + self.mutex.lock() + if self.stopped: + self.stopped = 0 + self.mutex.unlock() + break + + self.mutex.unlock() + + greenSem += 1 + + event = QCustomEvent(12346) + event.setData(QString("Green!")) + QThread.postEvent(self.receiver,event) + self.msleep(10) + + yellowSem -= 1 + + def stop(self): + self.mutex.lock() + self.stopped = 1 + self.mutex.unlock() + + +class SemaphoreExample(QWidget): + def __init__(self): + QWidget.__init__(self) + + self.yellowThread = YellowThread(self) + self.greenThread = GreenThread(self) + + global yellowSem, greenSem + yellowSem = QSemaphore(1) + greenSem = QSemaphore(1) + + self.button = QPushButton("&Ignition!",self) + self.connect(self.button,SIGNAL("clicked()"),self.startExample) + + self.mlineedit = QMultiLineEdit(self) + self.label = QLabel(self) + + vbox = QVBoxLayout(self,5) + vbox.addWidget(self.button) + vbox.addWidget(self.mlineedit) + vbox.addWidget(self.label) + + def __del__(self): + stopYellow = self.yellowThread.running() + stopGreen = self.greenThread.running() + + if stopYellow: + self.yellowThread.stop() + + if self.greenThread.running(): + self.greenThread.stop() + + if stopYellow: + self.yellowThread.wait() + + if stopGreen: + self.greenThread.wait() + + global yellowSem, greenSem + yellowSem = None + greenSem = None + + def startExample(self): + if self.yellowThread.running() or self.greenThread.running(): + QMessageBox.information(self,"Sorry", + "The threads have not completed yet, and must finish before " + "they can be started again.") + + return + + self.mlineedit.clear() + + global yellowSem + + while yellowSem.available() < yellowSem.total(): + yellowSem -= 1 + + yellowSem += 1 + + self.yellowThread.start() + self.greenThread.start() + + def customEvent(self,event): + if event.type() == 12345: + s = event.data() + + self.mlineedit.append(s) + + if s.latin1() == "Green!": + self.label.setEraseColor(Qt.green) + else: + self.label.setEraseColor(Qt.yellow) + + self.label.setText(s) + + del s + elif event.type() == 12346: + s = event.data() + + QMessageBox.information(self,s.latin1() + " - Finished", + "The thread creating the \"" + s.latin1() + + "\" events has finished.") + + del s + else: + print "Unknown custom event type:", event.type() + + +app = QApplication(sys.argv) +se = SemaphoreExample() +app.setMainWidget(se) +se.show() + +sys.exit(app.exec_loop()) diff --git a/examples3/smalltable.py b/examples3/smalltable.py new file mode 100755 index 0000000..83e74bf --- /dev/null +++ b/examples3/smalltable.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +#**************************************************************************** +#** $Id: smalltable.py,v 1.1 2002/06/19 07:56:07 phil Exp $ +#** +#** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved. +#** +#** This file is part of an example program for PyQt. This example +#** program may be used, distributed and modified without limitation. +#** +#*****************************************************************************/ + +import sys +import os +from qt import * +from qttable import * + +TRUE = 1 +FALSE = 0 + +numRows = 30 +numCols = 10 + +if __name__ == '__main__': + app = QApplication(sys.argv) + + table = QTable(numRows, numCols) + + header = table.horizontalHeader() + + header.setLabel(0, "Tiny", 40) + header.setLabel(1, "Checkboxes") + header.setLabel(5, "Combos") + header.setMovingEnabled(TRUE) + + img = QImage("trolltech.bmp") + pix = QPixmap(img.scaleHeight(table.rowHeight(3))) + table.setPixmap(3, 2, pix) + table.setText(3, 2, "A Pixmap") + + comboEntries = QStringList("one") + comboEntries.append("two") + comboEntries.append("three") + comboEntries.append("four") + + for i in range(numRows): + item = QComboTableItem(table, comboEntries, FALSE) + item.setCurrentItem(i % 4) + table.setItem(i, 5, item) + + for i in range(numRows): + table.setItem(i, 1, QCheckTableItem(table, "Check me")) + + table.setCaption("Small table example") + table.show() + app.setMainWidget(table) + app.exec_loop() diff --git a/examples3/splitter.py b/examples3/splitter.py new file mode 100755 index 0000000..3cee9cf --- /dev/null +++ b/examples3/splitter.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python + +import sys +from qt import * + +class Test(QWidget): + def __init__(self, parent=None, name='Test', f=0): + QWidget.__init__(self, parent, name, f) + + def paintEvent(self, e): + p = QPainter(self) + p.setClipRect(e.rect()) + d = 1000 + x1 = 0 + x2 = self.width() - 1 + y1 = 0 + y2 = self.height() - 1 + + x = (x1+x2)/2 + p.drawLine(x, y1, x+d, y1+d) + p.drawLine(x, y1, x-d, y1+d) + p.drawLine(x, y2, x+d, y2-d) + p.drawLine(x, y2, x-d, y2-d) + + y = (y1+y2)/2 + p.drawLine(x1, y, x1+d, y+d) + p.drawLine(x1, y, x1+d, y-d) + p.drawLine(x2, y, x2-d, y+d) + p.drawLine(x2, y, x2-d, y-d) + + +if __name__=="__main__": + a = QApplication(sys.argv) + + s1 = QSplitter(Qt.Vertical, None, "main") + s2 = QSplitter(Qt.Horizontal, s1, "top") + + t1 = Test(s2) + t1.setEraseColor(Qt.blue.light(180)) + t1.setMinimumSize(50,0) + + t2 = Test(s2) + t2.setEraseColor(Qt.green.light(180)) + s2.setResizeMode(t2, QSplitter.KeepSize) + s2.moveToFirst(t2) + + s3 = QSplitter(Qt.Horizontal, s1, "bottom") + + t3 = Test(s3) + t3.setEraseColor(Qt.red) + t4 = Test(s3) + t4.setEraseColor(Qt.white) + + t5 = Test(s3) + t5.setMaximumHeight(250) + t5.setMinimumSize(80,50) + t5.setEraseColor(Qt.yellow) + + s1.setOpaqueResize(1) + s2.setOpaqueResize(1) + s3.setOpaqueResize(1) + + a.setMainWidget(s1) + s1.show() + a.exec_loop() diff --git a/examples3/tabdialog.py b/examples3/tabdialog.py new file mode 100755 index 0000000..0d37cc5 --- /dev/null +++ b/examples3/tabdialog.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python + +"""************************************************************************** +** $Id: tabdialog.py,v 1.1 2003/07/01 14:18:37 phil Exp $ +** +** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +***************************************************************************""" + +import sys +from qt import * + +class TabDialog( QTabDialog ): + def __init__( self, parent=None, name=None, filename=None ): + QTabDialog.__init__( self, parent, name ) + self.filename = QString( filename ) + self.fileinfo = QFileInfo( filename ) + self.setupTab1() + self.setupTab2() + self.setupTab3() + self.connect( self, SIGNAL("applyButtonPressed()"), qApp, SLOT("quit()" ) ) + + def setupTab1( self ): + tab1 = QVBox( self ) + tab1.setMargin( 5 ) + + QLabel( "Filename:", tab1 ) + fname = QLineEdit( self.filename, tab1 ) + fname.setFocus() + + QLabel( "Path:", tab1 ) + path = QLabel( self.fileinfo.dirPath( True ), tab1 ) + path.setFrameStyle( QFrame.Panel | QFrame.Sunken ) + + QLabel( "Size:", tab1 ) + size = QLabel( QString( "%1 KB" ).arg( self.fileinfo.size() ), tab1 ) + size.setFrameStyle( QFrame.Panel | QFrame.Sunken ) + + QLabel( "Last Read:", tab1 ) + lread = QLabel( self.fileinfo.lastRead().toString(), tab1 ) + lread.setFrameStyle( QFrame.Panel | QFrame.Sunken ) + + QLabel( "Last Modified:", tab1 ) + lmodif = QLabel( self.fileinfo.lastModified().toString(), tab1 ) + lmodif.setFrameStyle( QFrame.Panel | QFrame.Sunken ) + + self.addTab( tab1, "General" ) + + def setupTab2( self ): + tab2 = QVBox( self ) + tab2.setMargin( 5 ) + + bg = QButtonGroup( 1, QGroupBox.Horizontal, "Permissions", tab2 ) + + readable = QCheckBox( "Readable", bg ) + if self.fileinfo.isReadable() : + readable.setChecked( True ) + + writable = QCheckBox( "Writeable", bg ) + if self.fileinfo.isWritable() : + writable.setChecked( True ) + + executable = QCheckBox( "Executable", bg ) + if self.fileinfo.isExecutable() : + executable.setChecked( True ) + + bg2 = QButtonGroup( 2, QGroupBox.Horizontal, "Owner", tab2 ) + + QLabel( "Owner", bg2 ) + owner = QLabel( self.fileinfo.owner(), bg2 ) + owner.setFrameStyle( QFrame.Panel | QFrame.Sunken ) + + QLabel( "Group", bg2 ) + group = QLabel( self.fileinfo.group(), bg2 ) + group.setFrameStyle( QFrame.Panel | QFrame.Sunken ) + + self.addTab( tab2, "Permissions" ) + + def setupTab3( self ): + tab3 = QVBox( self ) + tab3.setMargin( 5 ) + tab3.setSpacing( 5 ) + + QLabel( QString( "Open %1 with:" ).arg( self.filename ), tab3 ) + + prgs = QListBox( tab3 ) + for i in range( 0, 30, 1 ) : + prg = QString( "Application %1" ).arg( i ) + prgs.insertItem( prg ) + prgs.setCurrentItem( 3 ) + + QCheckBox( QString( "Open files with the extension '%1' always with this application" ).arg( self.fileinfo.extension() ), tab3 ) + + self.addTab( tab3, "Applications" ) + +def main( args ): + a = QApplication(sys.argv) + #sys.argv.append("tabdialog.py") # to test uncomment this line + if len(sys.argv) < 2: + filename = QString(".") + else: + filename = QString(sys.argv[1]) + + tabdialog = TabDialog( None, "tabdialog", filename ) + tabdialog.resize( 450, 350 ); + tabdialog.setCaption( "Qt Example - Tabbed Dialog" ) + a.setMainWidget( tabdialog ) + tabdialog.show() + + a.exec_loop() + +if __name__=="__main__": + main(sys.argv) diff --git a/examples3/tablestatistics.py b/examples3/tablestatistics.py new file mode 100755 index 0000000..49f82ae --- /dev/null +++ b/examples3/tablestatistics.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python + +#**************************************************************************** +#** $Id: tablestatistics.py,v 1.1 2002/06/19 07:56:07 phil Exp $ +#** +#** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved. +#** +#** This file is part of an example program for PyQt. This example +#** program may be used, distributed and modified without limitation. +#** +#*****************************************************************************/ + +import sys +import os +from qt import * +from qttable import * + +TRUE = 1 +FALSE = 0 + +# column constants +TB_FILE = 0 +TB_SIZE = 1 +TB_FLAG = 2 +TB_COLS = 3 + +dirs = ( + "kernel", + "tools", + "widgets", + "dialogs", + "xml", + "table", + "network", + "opengl", + "canvas", +) + +class Table(QTable): + def __init__(self): + QTable.__init__(self, 0, TB_COLS) + self.setSorting(TRUE) + self.horizontalHeader().setLabel(TB_FILE, self.tr("File")) + self.horizontalHeader().setLabel(TB_SIZE, self.tr("Size (bytes)")) + self.horizontalHeader().setLabel(TB_FLAG, self.tr("Use in Sum")) + self.initTable() + self.adjustColumn(TB_FILE) + + # if the user edited something we might need to recalculate the sum + self.connect(self, SIGNAL("valueChanged(int, int)"), self.recalcSum) + + def initTable(self): + # read all the Qt source and header files into a list + all = [] + qtdir = os.getenv("QTDIR") + for i in dirs: + dir = QDir(os.path.join(qtdir, "src", i)) + lst = QStringList(dir.entryList("*.cpp; *.h")) + for f in lst: + if f.contains("moc"): + continue + all.append(os.path.join(i, str(f))) + + # set the number of rows we'll need for the table + self.setNumRows(len(all) + 1) + + i = 0 + sum = 0L + # insert the data into the table + for it in all: + self.setText(i, TB_FILE, it) + f = QFile(os.path.join(qtdir, "src", str(it))) + self.setText(i, TB_SIZE, str(f.size())) + ci = ComboItem(self, QTableItem.WhenCurrent) + self.setItem(i, TB_FLAG, ci) + i = i + 1 + sum += f.size() + self.displaySum(sum) + + def recalcSum(self, dummy, col): + # only recalc if a value in the second or third column changed + if col < TB_SIZE or col > TB_FLAG: + return + + sum = 0L + for i in range(self.numRows()-1): + if str(self.text(i, TB_FLAG)) == "No": + continue + sum += long(str(self.text(i, TB_SIZE))) + self.displaySum(sum) + + def displaySum(self, sum): + # insert calculated data + i1 = TableItem(self, QTableItem.Never, self.tr("Sum")) + self.setItem(self.numRows()-1, TB_FILE, i1) + i2 = TableItem(self, QTableItem.Never, str(sum)) + self.setItem(self.numRows()-1, TB_SIZE, i2) + + def sortColumn(self, col, ascending, wholeRows): + # sum row should not be sorted, so get rid of it for now + self.clearCell(self.numRows()-1, TB_FILE) + self.clearCell(self.numRows()-1, TB_SIZE) + # do sort + QTable.sortColumn(self, col, ascending, TRUE) + # re-insert sum row + self.recalcSum(0, TB_SIZE) + + +class TableItem(QTableItem): + def __init__(self, *args): + apply(QTableItem.__init__, (self,) + args) + + def paint(self, p, cg, cr, selected): + g = QColorGroup(cg) + # last row is the sum row - we want to make it more visible by + # using a red background + if self.row() == self.table().numRows()-1: + g.setColor(QColorGroup.Base, QColor("red")) + QTableItem.paint(self, p, g, cr, selected) + + +class ComboItem(QTableItem): + def __init__(self, t, et): + QTableItem.__init__(self, t, et, "Yes") + self.cb = None + # we do not want this item to be replaced + self.setReplaceable(FALSE) + + def createEditor(self): + # create an editor - a combobox in our case + self.cb = QComboBox(self.table().viewport()) + QObject.connect(self.cb, SIGNAL("activated(int)"), + self.table(), SLOT("doValueChanged()")) + self.cb.insertItem("Yes") + self.cb.insertItem("No") + # and initialize it + if str(self.text()) == "No": + self.cb.setCurrentItem(1) + else: + self.cb.setCurrentItem(0) + return self.cb + + def setContentFromEditor(self, w): + # the user changed the value of the combobox, so synchronize the + # value of the item (its text), with the value of the combobox + if w.inherits("QComboBox"): + self.setText(w.currentText()) + else: + QTableItem.setContentFromEditor(self, w) + + def setText(self, s): + # initialize the combobox from the text + if self.cb: + if str(s) == "No": + self.cb.setCurrentItem(1) + else: + self.cb.setCurrentItem(0) + QTableItem.setText(self, s) + + +if __name__ == '__main__': + app = QApplication(sys.argv) + + t = Table() + t.setCaption("Statistics") + t.show() + app.setMainWidget(t) + app.exec_loop() diff --git a/examples3/tooltip.py b/examples3/tooltip.py new file mode 100755 index 0000000..7eadb7f --- /dev/null +++ b/examples3/tooltip.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python + +"""************************************************************************** +** $Id: tooltip.py,v 1.1 2003/07/01 14:18:37 phil Exp $ +** +** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +***************************************************************************""" + +import sys +from qt import * +from random import random + +class DynamicTip( QToolTip ): + def __init__( self, parent ): + QToolTip.__init__( self, parent ) + + def maybeTip( self, pos ): + #if not self.parent.inherits( "TellMe" ): + if QToolTip(self).parentWidget().inherits( "TellMe" ) : + return + r = QRect( QToolTip(self).parentWidget().tip(pos) ) + if not r.isValid(): + return + + s = QString( "position: %d,%d" % (r.center().x(), r.center().y()) ) + QToolTip(self).tip( r, s ) + + +class TellMe( QWidget ): + def __init__( self, parent=None, name=None ): + QWidget.__init__( self, parent, name ) + + self.setMinimumSize( 30, 30 ) + self.r1 = self.randomRect() + self.r2 = self.randomRect() + self.r3 = self.randomRect() + + self.t = DynamicTip( self ) + + QToolTip.add( self, self.r3, "this color is called red" ) # <- helpful + + def paintEvent( self, e ): + + p = QPainter( self ) + + # I try to be efficient here, and repaint only what's needed + if e.rect().intersects( self.r1 ): + p.setBrush( Qt.blue ) + p.drawRect( self.r1 ) + + if e.rect().intersects( self.r2 ): + p.setBrush( Qt.blue ) + p.drawRect( self.r2 ) + + if e.rect().intersects( self.r3 ): + p.setBrush( Qt.red ) + p.drawRect( self.r3 ) + + def mousePressEvent( self, e ): + + if self.r1.contains( e.pos() ): + self.r1 = self.randomRect() + if self.r2.contains( e.pos() ): + self.r2 = self.randomRect() + self.repaint() + + def resizeEvent( self, e ): + + if not self.rect().contains( self.r1 ): + self.r1 = self.randomRect() + if not self.rect().contains( self.r2 ): + self.r2 = self.randomRect() + + def randomRect( self ): + return QRect( random() * (self.width() - 20), random() * (self.height() - 20), 20, 20 ) + + def tip( self, p ): + + if self.r1.contains( p ): + return self.r1 + elif self.r2.contains( p ): + return self.r2 + else: + return QRect( 0,0, -1,-1 ) + + def __del__( self ): + del self.t + self.t = None + +def main( args ): + a = QApplication( args ) + + mw = TellMe() + mw.setCaption( "Qt Example - Dynamic Tool Tips" ) + a.setMainWidget( mw ) + mw.show() + + a.exec_loop() + +if __name__=="__main__": + main(sys.argv) diff --git a/examples3/trolltech.bmp b/examples3/trolltech.bmp new file mode 100644 index 0000000..220861e Binary files /dev/null and b/examples3/trolltech.bmp differ diff --git a/examples3/trolltech.gif b/examples3/trolltech.gif new file mode 100644 index 0000000..f674369 Binary files /dev/null and b/examples3/trolltech.gif differ diff --git a/examples3/tt-logo.png b/examples3/tt-logo.png new file mode 100644 index 0000000..a0d9e34 Binary files /dev/null and b/examples3/tt-logo.png differ diff --git a/examples3/tut1.py b/examples3/tut1.py new file mode 100755 index 0000000..982e984 --- /dev/null +++ b/examples3/tut1.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python + +# Qt tutorial 1. + +import sys +import qt + + +a = qt.QApplication(sys.argv) + +hello = qt.QPushButton("Hello world!", None) +hello.resize(100, 30) + +a.setMainWidget(hello) +hello.show() +sys.exit(a.exec_loop()) diff --git a/examples3/tut10.py b/examples3/tut10.py new file mode 100755 index 0000000..182d04d --- /dev/null +++ b/examples3/tut10.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python + +# Qt tutorial 10. + +import sys +import qt + + +class LCDRange(qt.QVBox): + def __init__(self, parent=None, name=None): + qt.QVBox.__init__(self, parent, name) + + lcd = qt.QLCDNumber(2, self, "lcd") + self.slider = qt.QSlider(qt.Qt.Horizontal, self, "slider") + self.slider.setRange(0, 99) + self.slider.setValue(0) + self.connect(self.slider, qt.SIGNAL("valueChanged(int)"), lcd, qt.SLOT("display(int)")) + self.connect(self.slider, qt.SIGNAL("valueChanged(int)"), self, qt.PYSIGNAL("valueChanged(int)")) + + self.setFocusProxy(self.slider) + + def value(self): + return self.slider.value() + + def setValue(self, value): + self.slider.setValue(value) + + def setRange(self, minVal, maxVal): + if minVal < 0 or maxVal > 99 or minVal > maxVal: + raise ValueError, "LCDRange.setRange(): invalid range" + self.slider.setRange(minVal, maxVal) + + +class CannonField(qt.QWidget): + def __init__(self, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + self.ang = 45 + self.f = 0 + self.setPalette(qt.QPalette(qt.QColor(250, 250, 200))) + + def angle(self): + return self.ang + + def setAngle(self, degrees): + if degrees < 5: + degrees = 5 + if degrees > 70: + degrees = 70 + if self.ang == degrees: + return + self.ang = degrees + self.repaint(self.cannonRect(), 0) + self.emit(qt.PYSIGNAL("angleChanged(int)"), (self.ang, )) + + def force(self): + return self.f + + def setForce(self, newton): + if newton < 0: + newton = 0 + if self.f == newton: + return + self.f = newton + self.emit(qt.PYSIGNAL("forceChanged(int)"), (self.f, )) + + def paintEvent(self, ev): + if not ev.rect().intersects(self.cannonRect()): + return + + cr = self.cannonRect() + pix = qt.QPixmap(cr.size()) + pix.fill(self, cr.topLeft()) + + p = qt.QPainter(pix) + + p.setBrush(qt.Qt.blue) + p.setPen(qt.Qt.NoPen) + + p.translate(0, pix.height() - 1) + p.drawPie(qt.QRect(-35, -35, 70, 70), 0, 90 * 16) + p.rotate(-self.ang) + p.drawRect(qt.QRect(33, -4, 15, 8)) + p.end() + + p.begin(self) + p.drawPixmap(cr.topLeft(), pix) + + def cannonRect(self): + r = qt.QRect(0, 0, 50, 50) + r.moveBottomLeft(self.rect().bottomLeft()) + return r + + def sizePolicy(self): + return qt.QSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Expanding) + + +class MyWidget(qt.QWidget): + def __init__(self, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + quit = qt.QPushButton("&Quit", self, "quit") + quit.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + self.connect(quit, qt.SIGNAL("clicked()"), qt.qApp, qt.SLOT("quit()")) + + self.angle = LCDRange(self, "angle") + self.angle.setRange(5, 70) + + self.force = LCDRange(self, "force") + self.force.setRange(10, 50) + + self.cannonField = CannonField(self, "cannonField") + + self.connect(self.angle, qt.PYSIGNAL("valueChanged(int)"), self.cannonField.setAngle) + self.connect(self.cannonField, qt.PYSIGNAL("angleChanged(int)"), self.angle.setValue) + + self.connect(self.force, qt.PYSIGNAL("valueChanged(int)"), self.cannonField.setForce) + self.connect(self.cannonField, qt.PYSIGNAL("forceChanged(int)"), self.force.setValue) + + grid = qt.QGridLayout(self, 2, 2, 10) + + grid.addWidget(quit, 0, 0) + grid.addWidget(self.cannonField, 1, 1) + grid.setColStretch(1, 10) + + leftBox = qt.QVBoxLayout() + + grid.addLayout(leftBox, 1, 0) + + leftBox.addWidget(self.angle) + leftBox.addWidget(self.force) + + self.angle.setValue(60) + self.force.setValue(25) + self.angle.setFocus() + + +qt.QApplication.setColorSpec(qt.QApplication.CustomColor) +a = qt.QApplication(sys.argv) + +w = MyWidget() +w.setGeometry(100, 100, 500, 355) +a.setMainWidget(w) +w.show() +sys.exit(a.exec_loop()) diff --git a/examples3/tut11.py b/examples3/tut11.py new file mode 100755 index 0000000..95d5066 --- /dev/null +++ b/examples3/tut11.py @@ -0,0 +1,213 @@ +#!/usr/bin/env python + +# Qt tutorial 11. + +import sys +import math +import qt + + +class LCDRange(qt.QVBox): + def __init__(self, parent=None, name=None): + qt.QVBox.__init__(self, parent, name) + + lcd = qt.QLCDNumber(2, self, "lcd") + self.slider = qt.QSlider(qt.Qt.Horizontal, self, "slider") + self.slider.setRange(0, 99) + self.slider.setValue(0) + self.connect(self.slider, qt.SIGNAL("valueChanged(int)"), lcd, qt.SLOT("display(int)")) + self.connect(self.slider, qt.SIGNAL("valueChanged(int)"), self, qt.PYSIGNAL("valueChanged(int)")) + + self.setFocusProxy(self.slider) + + def value(self): + return self.slider.value() + + def setValue(self, value): + self.slider.setValue(value) + + def setRange(self, minVal, maxVal): + if minVal < 0 or maxVal > 99 or minVal > maxVal: + raise ValueError, "LCDRange.setRange(): invalid range" + self.slider.setRange(minVal, maxVal) + + +class CannonField(qt.QWidget): + def __init__(self, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + self.ang = 45 + self.f = 0 + self.timerCount = 0 + + self.autoShootTimer = qt.QTimer(self, "movement handler") + self.connect(self.autoShootTimer, qt.SIGNAL("timeout()"), self.moveShot) + + self.shoot_ang = 0 + self.shoot_f = 0 + + self.setPalette(qt.QPalette(qt.QColor(250, 250, 200))) + + self.barrelRect = qt.QRect(33, -4, 15, 8) + + def angle(self): + return self.ang + + def setAngle(self, degrees): + if degrees < 5: + degrees = 5 + if degrees > 70: + degrees = 70 + if self.ang == degrees: + return + self.ang = degrees + self.repaint(self.cannonRect(), 0) + self.emit(qt.PYSIGNAL("angleChanged(int)"), (self.ang, )) + + def force(self): + return self.f + + def setForce(self, newton): + if newton < 0: + newton = 0 + if self.f == newton: + return + self.f = newton + self.emit(qt.PYSIGNAL("forceChanged(int)"), (self.f, )) + + def shoot(self): + if self.autoShootTimer.isActive(): + return + + self.timerCount = 0 + self.shoot_ang = self.ang + self.shoot_f = self.f + self.autoShootTimer.start(50) + + def moveShot(self): + r = qt.QRegion(self.shotRect()) + self.timerCount = self.timerCount + 1 + + shotR = self.shotRect() + + if shotR.x() > self.width() or shotR.y() > self.height(): + self.autoShootTimer.stop() + else: + r = r.unite(qt.QRegion(shotR)) + + self.repaint(r) + + def paintEvent(self, ev): + updateR = ev.rect() + p = qt.QPainter(self) + + if updateR.intersects(self.cannonRect()): + self.paintCannon(p) + + if self.autoShootTimer.isActive() and updateR.intersects(self.shotRect()): + self.paintShot(p) + + def paintShot(self, p): + p.setBrush(qt.Qt.black) + p.setPen(qt.Qt.NoPen) + p.drawRect(self.shotRect()) + + def paintCannon(self, p): + cr = self.cannonRect() + pix = qt.QPixmap(cr.size()) + pix.fill(self, cr.topLeft()) + + tmp = qt.QPainter(pix) + tmp.setBrush(qt.Qt.blue) + tmp.setPen(qt.Qt.NoPen) + + tmp.translate(0, pix.height() - 1) + tmp.drawPie(qt.QRect(-35, -35, 70, 70), 0, 90 * 16) + tmp.rotate(-self.ang) + tmp.drawRect(self.barrelRect) + tmp.end() + + p.drawPixmap(cr.topLeft(), pix) + + def cannonRect(self): + r = qt.QRect(0, 0, 50, 50) + r.moveBottomLeft(self.rect().bottomLeft()) + return r + + def shotRect(self): + gravity = 4.0 + + time = self.timerCount / 4.0 + velocity = self.shoot_f + radians = self.shoot_ang * 3.14159265 / 180 + + velx = velocity * math.cos(radians) + vely = velocity * math.sin(radians) + x0 = (self.barrelRect.right() + 5) * math.cos(radians) + y0 = (self.barrelRect.right() + 5) * math.sin(radians) + x = x0 + velx * time + y = y0 + vely * time - 0.5 * gravity * time * time + + r = qt.QRect(0, 0, 6, 6) + r.moveCenter(qt.QPoint(x, self.height() - 1 - y)) + return r + + def sizePolicy(self): + return qt.QSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Expanding) + + +class MyWidget(qt.QWidget): + def __init__(self, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + quit = qt.QPushButton("&Quit", self, "quit") + quit.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + self.connect(quit, qt.SIGNAL("clicked()"), qt.qApp, qt.SLOT("quit()")) + + self.angle = LCDRange(self, "angle") + self.angle.setRange(5, 70) + + self.force = LCDRange(self, "force") + self.force.setRange(10, 50) + + self.cannonField = CannonField(self, "cannonField") + + self.connect(self.angle, qt.PYSIGNAL("valueChanged(int)"), self.cannonField.setAngle) + self.connect(self.cannonField, qt.PYSIGNAL("angleChanged(int)"), self.angle.setValue) + + self.connect(self.force, qt.PYSIGNAL("valueChanged(int)"), self.cannonField.setForce) + self.connect(self.cannonField, qt.PYSIGNAL("forceChanged(int)"), self.force.setValue) + + shoot = qt.QPushButton("&Shoot", self, "shoot") + shoot.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + self.connect(shoot, qt.SIGNAL("clicked()"), self.cannonField.shoot) + + grid = qt.QGridLayout(self, 2, 2, 10) + + grid.addWidget(quit, 0, 0) + grid.addWidget(self.cannonField, 1, 1) + grid.setColStretch(1, 10) + + leftBox = qt.QVBoxLayout() + grid.addLayout(leftBox, 1, 0) + leftBox.addWidget(self.angle) + leftBox.addWidget(self.force) + + topBox = qt.QHBoxLayout() + grid.addLayout(topBox, 0, 1) + topBox.addWidget(shoot) + topBox.addStretch(1) + + self.angle.setValue(60) + self.force.setValue(25) + self.angle.setFocus() + + +qt.QApplication.setColorSpec(qt.QApplication.CustomColor) +a = qt.QApplication(sys.argv) + +w = MyWidget() +w.setGeometry(100, 100, 500, 355) +a.setMainWidget(w) +w.show() +sys.exit(a.exec_loop()) diff --git a/examples3/tut12.py b/examples3/tut12.py new file mode 100755 index 0000000..818afd3 --- /dev/null +++ b/examples3/tut12.py @@ -0,0 +1,253 @@ +#!/usr/bin/env python + +# Qt tutorial 12. + +import sys +import math +import random +import qt + + +class LCDRange(qt.QVBox): + def __init__(self, s=None, parent=None, name=None): + qt.QVBox.__init__(self, parent, name) + + lcd = qt.QLCDNumber(2, self, "lcd") + self.slider = qt.QSlider(qt.Qt.Horizontal, self, "slider") + self.slider.setRange(0, 99) + self.slider.setValue(0) + + self.label = qt.QLabel(" ", self, "label") + self.label.setAlignment(qt.Qt.AlignCenter) + + self.connect(self.slider, qt.SIGNAL("valueChanged(int)"), lcd, qt.SLOT("display(int)")) + self.connect(self.slider, qt.SIGNAL("valueChanged(int)"), self, qt.PYSIGNAL("valueChanged(int)")) + + self.setFocusProxy(self.slider) + + if s is not None: + self.setText(s) + + def value(self): + return self.slider.value() + + def setValue(self, value): + self.slider.setValue(value) + + def setRange(self, minVal, maxVal): + if minVal < 0 or maxVal > 99 or minVal > maxVal: + raise ValueError, "LCDRange.setRange(): invalid range" + + self.slider.setRange(minVal, maxVal) + + def text(self): + return self.label.text() + + def setText(self, s): + self.label.setText(s) + + +class CannonField(qt.QWidget): + def __init__(self, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + self.ang = 45 + self.f = 0 + self.timerCount = 0 + + self.autoShootTimer = qt.QTimer(self, "movement handler") + self.connect(self.autoShootTimer, qt.SIGNAL("timeout()"), self.moveShot) + + self.shoot_ang = 0 + self.shoot_f = 0 + self.target = qt.QPoint(0, 0) + + self.setPalette(qt.QPalette(qt.QColor(250, 250, 200))) + + self.barrelRect = qt.QRect(33, -4, 15, 8) + + self.newTarget() + + def angle(self): + return self.ang + + def setAngle(self, degrees): + if degrees < 5: + degrees = 5 + if degrees > 70: + degrees = 70 + if self.ang == degrees: + return + self.ang = degrees + self.repaint(self.cannonRect(), 0) + self.emit(qt.PYSIGNAL("angleChanged(int)"), (self.ang, )) + + def force(self): + return self.f + + def setForce(self, newton): + if newton < 0: + newton = 0 + if self.f == newton: + return + self.f = newton + self.emit(qt.PYSIGNAL("forceChanged(int)"), (self.f, )) + + def shoot(self): + if self.autoShootTimer.isActive(): + return + + self.timerCount = 0 + self.shoot_ang = self.ang + self.shoot_f = self.f + self.autoShootTimer.start(50) + + def newTarget(self): + r = qt.QRegion(self.targetRect()) + self.target = qt.QPoint(random.randint(200, 390), random.randint(10, 265)) + self.repaint(r.unite(qt.QRegion(self.targetRect()))) + + def moveShot(self): + r = qt.QRegion(self.shotRect()) + self.timerCount = self.timerCount + 1 + + shotR = self.shotRect() + + if shotR.intersects(self.targetRect()): + self.autoShootTimer.stop() + self.emit(qt.PYSIGNAL("hit()"), ()) + elif shotR.x() > self.width() or shotR.y() > self.height(): + self.autoShootTimer.stop() + self.emit(qt.PYSIGNAL("missed()"), ()) + else: + r = r.unite(qt.QRegion(shotR)) + + self.repaint(r) + + def paintEvent(self, ev): + updateR = ev.rect() + p = qt.QPainter(self) + + if updateR.intersects(self.cannonRect()): + self.paintCannon(p) + + if self.autoShootTimer.isActive() and updateR.intersects(self.shotRect()): + self.paintShot(p) + + if updateR.intersects(self.targetRect()): + self.paintTarget(p) + + def paintShot(self, p): + p.setBrush(qt.Qt.black) + p.setPen(qt.Qt.NoPen) + p.drawRect(self.shotRect()) + + def paintTarget(self, p): + p.setBrush(qt.Qt.red) + p.setPen(qt.Qt.black) + p.drawRect(self.targetRect()) + + def paintCannon(self, p): + cr = self.cannonRect() + pix = qt.QPixmap(cr.size()) + pix.fill(self, cr.topLeft()) + + tmp = qt.QPainter(pix) + tmp.setBrush(qt.Qt.blue) + tmp.setPen(qt.Qt.NoPen) + + tmp.translate(0, pix.height() - 1) + tmp.drawPie(qt.QRect(-35, -35, 70, 70), 0, 90 * 16) + tmp.rotate(-self.ang) + tmp.drawRect(self.barrelRect) + tmp.end() + + p.drawPixmap(cr.topLeft(), pix) + + def cannonRect(self): + r = qt.QRect(0, 0, 50, 50) + r.moveBottomLeft(self.rect().bottomLeft()) + return r + + def shotRect(self): + gravity = 4.0 + + time = self.timerCount / 4.0 + velocity = self.shoot_f + radians = self.shoot_ang * 3.14159265 / 180 + + velx = velocity * math.cos(radians) + vely = velocity * math.sin(radians) + x0 = (self.barrelRect.right() + 5) * math.cos(radians) + y0 = (self.barrelRect.right() + 5) * math.sin(radians) + x = x0 + velx * time + y = y0 + vely * time - 0.5 * gravity * time * time + + r = qt.QRect(0, 0, 6, 6) + r.moveCenter(qt.QPoint(x, self.height() - 1 - y)) + return r + + def targetRect(self): + r = qt.QRect(0, 0, 20, 10) + r.moveCenter(qt.QPoint(self.target.x(), self.height() - 1 - self.target.y())) + return r + + def sizePolicy(self): + return qt.QSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Expanding) + + +class MyWidget(qt.QWidget): + def __init__(self, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + quit = qt.QPushButton("&Quit", self, "quit") + quit.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + self.connect(quit, qt.SIGNAL("clicked()"), qt.qApp, qt.SLOT("quit()")) + + self.angle = LCDRange("ANGLE", self, "angle") + self.angle.setRange(5, 70) + + self.force = LCDRange("FORCE", self, "force") + self.force.setRange(10, 50) + + self.cannonField = CannonField(self, "cannonField") + + self.connect(self.angle, qt.PYSIGNAL("valueChanged(int)"), self.cannonField.setAngle) + self.connect(self.cannonField, qt.PYSIGNAL("angleChanged(int)"), self.angle.setValue) + + self.connect(self.force, qt.PYSIGNAL("valueChanged(int)"), self.cannonField.setForce) + self.connect(self.cannonField, qt.PYSIGNAL("forceChanged(int)"), self.force.setValue) + + shoot = qt.QPushButton("&Shoot", self, "shoot") + shoot.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + self.connect(shoot, qt.SIGNAL("clicked()"), self.cannonField.shoot) + + grid = qt.QGridLayout(self, 2, 2, 10) + + grid.addWidget(quit, 0, 0) + grid.addWidget(self.cannonField, 1, 1) + grid.setColStretch(1, 10) + + leftBox = qt.QVBoxLayout() + grid.addLayout(leftBox, 1, 0) + leftBox.addWidget(self.angle) + leftBox.addWidget(self.force) + + topBox = qt.QHBoxLayout() + grid.addLayout(topBox, 0, 1) + topBox.addWidget(shoot) + topBox.addStretch(1) + + self.angle.setValue(60) + self.force.setValue(25) + self.angle.setFocus() + + +qt.QApplication.setColorSpec(qt.QApplication.CustomColor) +a = qt.QApplication(sys.argv) + +w = MyWidget() +w.setGeometry(100, 100, 500, 355) +a.setMainWidget(w) +w.show() +sys.exit(a.exec_loop()) diff --git a/examples3/tut13.py b/examples3/tut13.py new file mode 100755 index 0000000..a973ea7 --- /dev/null +++ b/examples3/tut13.py @@ -0,0 +1,330 @@ +#!/usr/bin/env python + +# Qt tutorial 13. + +import sys +import math +import random +import qt + + +class LCDRange(qt.QWidget): + def __init__(self, s=None, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + lcd = qt.QLCDNumber(2, self, "lcd") + self.slider = qt.QSlider(qt.Qt.Horizontal, self, "slider") + self.slider.setRange(0, 99) + self.slider.setValue(0) + + self.label = qt.QLabel(" ", self, "label") + self.label.setAlignment(qt.Qt.AlignCenter) + + self.connect(self.slider, qt.SIGNAL("valueChanged(int)"), lcd, qt.SLOT("display(int)")) + self.connect(self.slider, qt.SIGNAL("valueChanged(int)"), self, qt.PYSIGNAL("valueChanged(int)")) + + self.setFocusProxy(self.slider) + + l = qt.QVBoxLayout(self) + l.addWidget(lcd, 1) + l.addWidget(self.slider) + l.addWidget(self.label) + + if s is not None: + self.setText(s) + + def value(self): + return self.slider.value() + + def setValue(self, value): + self.slider.setValue(value) + + def setRange(self, minVal, maxVal): + if minVal < 0 or maxVal > 99 or minVal > maxVal: + raise ValueError, "LCDRange.setRange(): invalid range" + + self.slider.setRange(minVal, maxVal) + + def text(self): + return self.label.text() + + def setText(self, s): + self.label.setText(s) + + +class CannonField(qt.QWidget): + def __init__(self, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + self.ang = 45 + self.f = 0 + self.timerCount = 0 + + self.autoShootTimer = qt.QTimer(self, "movement handler") + self.connect(self.autoShootTimer, qt.SIGNAL("timeout()"), self.moveShot) + + self.shoot_ang = 0 + self.shoot_f = 0 + self.target = qt.QPoint(0, 0) + self.gameEnded = 0 + + self.setPalette(qt.QPalette(qt.QColor(250, 250, 200))) + + self.barrelRect = qt.QRect(33, -4, 15, 8) + + self.newTarget() + + def angle(self): + return self.ang + + def setAngle(self, degrees): + if degrees < 5: + degrees = 5 + if degrees > 70: + degrees = 70 + if self.ang == degrees: + return + self.ang = degrees + self.repaint(self.cannonRect(), 0) + self.emit(qt.PYSIGNAL("angleChanged(int)"), (self.ang, )) + + def force(self): + return self.f + + def setForce(self, newton): + if newton < 0: + newton = 0 + if self.f == newton: + return + self.f = newton + self.emit(qt.PYSIGNAL("forceChanged(int)"), (self.f, )) + + def shoot(self): + if self.isShooting(): + return + + self.timerCount = 0 + self.shoot_ang = self.ang + self.shoot_f = self.f + self.autoShootTimer.start(50) + self.emit(qt.PYSIGNAL("canShoot(bool)"), (0, )) + + def newTarget(self): + r = qt.QRegion(self.targetRect()) + self.target = qt.QPoint(random.randint(200, 390), random.randint(10, 265)) + self.repaint(r.unite(qt.QRegion(self.targetRect()))) + + def gameOver(self): + return self.gameEnded + + def setGameOver(self): + if self.gameEnded: + return + if self.isShooting(): + self.autoShootTime.stop() + self.gameEnded = 1 + self.repaint() + + def restartGame(self): + if self.isShooting(): + self.autoShootTime.stop() + self.gameEnded = 0 + self.repaint() + self.emit(qt.PYSIGNAL("canShoot(bool)"), (1, )) + + def moveShot(self): + r = qt.QRegion(self.shotRect()) + self.timerCount = self.timerCount + 1 + + shotR = self.shotRect() + + if shotR.intersects(self.targetRect()): + self.autoShootTimer.stop() + self.emit(qt.PYSIGNAL("hit()"), ()) + self.emit(qt.PYSIGNAL("canShoot(bool)"), (1, )) + elif shotR.x() > self.width() or shotR.y() > self.height(): + self.autoShootTimer.stop() + self.emit(qt.PYSIGNAL("missed()"), ()) + self.emit(qt.PYSIGNAL("canShoot(bool)"), (1, )) + else: + r = r.unite(qt.QRegion(shotR)) + + self.repaint(r) + + def paintEvent(self, ev): + updateR = ev.rect() + p = qt.QPainter(self) + + if self.gameEnded: + p.setPen(qt.Qt.black) + p.setFont(qt.QFont("Courier", 48, qt.QFont.Bold)) + p.drawText(self.rect(), qt.Qt.AlignCenter, "Game Over") + + if updateR.intersects(self.cannonRect()): + self.paintCannon(p) + + if self.isShooting() and updateR.intersects(self.shotRect()): + self.paintShot(p) + + if not self.gameEnded and updateR.intersects(self.targetRect()): + self.paintTarget(p) + + def paintShot(self, p): + p.setBrush(qt.Qt.black) + p.setPen(qt.Qt.NoPen) + p.drawRect(self.shotRect()) + + def paintTarget(self, p): + p.setBrush(qt.Qt.red) + p.setPen(qt.Qt.black) + p.drawRect(self.targetRect()) + + def paintCannon(self, p): + cr = self.cannonRect() + pix = qt.QPixmap(cr.size()) + pix.fill(self, cr.topLeft()) + + tmp = qt.QPainter(pix) + tmp.setBrush(qt.Qt.blue) + tmp.setPen(qt.Qt.NoPen) + + tmp.translate(0, pix.height() - 1) + tmp.drawPie(qt.QRect(-35, -35, 70, 70), 0, 90 * 16) + tmp.rotate(-self.ang) + tmp.drawRect(self.barrelRect) + tmp.end() + + p.drawPixmap(cr.topLeft(), pix) + + def cannonRect(self): + r = qt.QRect(0, 0, 50, 50) + r.moveBottomLeft(self.rect().bottomLeft()) + return r + + def shotRect(self): + gravity = 4.0 + + time = self.timerCount / 4.0 + velocity = self.shoot_f + radians = self.shoot_ang * 3.14159265 / 180 + + velx = velocity * math.cos(radians) + vely = velocity * math.sin(radians) + x0 = (self.barrelRect.right() + 5) * math.cos(radians) + y0 = (self.barrelRect.right() + 5) * math.sin(radians) + x = x0 + velx * time + y = y0 + vely * time - 0.5 * gravity * time * time + + r = qt.QRect(0, 0, 6, 6) + r.moveCenter(qt.QPoint(x, self.height() - 1 - y)) + return r + + def targetRect(self): + r = qt.QRect(0, 0, 20, 10) + r.moveCenter(qt.QPoint(self.target.x(), self.height() - 1 - self.target.y())) + return r + + def isShooting(self): + return self.autoShootTimer.isActive() + + def sizePolicy(self): + return qt.QSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Expanding) + + +class GameBoard(qt.QWidget): + def __init__(self, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + quit = qt.QPushButton("&Quit", self, "quit") + quit.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + self.connect(quit, qt.SIGNAL("clicked()"), qt.qApp, qt.SLOT("quit()")) + + self.angle = LCDRange("ANGLE", self, "angle") + self.angle.setRange(5, 70) + + self.force = LCDRange("FORCE", self, "force") + self.force.setRange(10, 50) + + self.cannonField = CannonField(self, "cannonField") + + self.connect(self.angle, qt.PYSIGNAL("valueChanged(int)"), self.cannonField.setAngle) + self.connect(self.cannonField, qt.PYSIGNAL("angleChanged(int)"), self.angle.setValue) + + self.connect(self.force, qt.PYSIGNAL("valueChanged(int)"), self.cannonField.setForce) + self.connect(self.cannonField, qt.PYSIGNAL("forceChanged(int)"), self.force.setValue) + + self.connect(self.cannonField, qt.PYSIGNAL("hit()"), self.hit) + self.connect(self.cannonField, qt.PYSIGNAL("missed()"), self.missed) + + self.shoot = qt.QPushButton("&Shoot", self, "shoot") + self.shoot.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + self.connect(self.shoot, qt.SIGNAL("clicked()"), self.fire) + self.connect(self.cannonField, qt.PYSIGNAL("canShoot(bool)"), self.shoot, qt.SLOT("setEnabled(bool)")) + + restart = qt.QPushButton("&New Game", self, "newgame") + restart.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + self.connect(restart, qt.SIGNAL("clicked()"), self.newGame) + + self.hits = qt.QLCDNumber(2, self, "hits") + self.shotsLeft = qt.QLCDNumber(2, self, "shotsleft") + hitsL = qt.QLabel("HITS", self, "hitsLabel") + shotsLeftL = qt.QLabel("SHOTS LEFT", self, "shotsleftLabel") + + grid = qt.QGridLayout(self, 2, 2, 10) + grid.addWidget(quit, 0, 0) + grid.addWidget(self.cannonField, 1, 1) + grid.setColStretch(1, 10) + + leftBox = qt.QVBoxLayout() + grid.addLayout(leftBox, 1, 0) + leftBox.addWidget(self.angle) + leftBox.addWidget(self.force) + + topBox = qt.QHBoxLayout() + grid.addLayout(topBox, 0, 1) + topBox.addWidget(self.shoot) + topBox.addWidget(self.hits) + topBox.addWidget(hitsL) + topBox.addWidget(self.shotsLeft) + topBox.addWidget(shotsLeftL) + topBox.addStretch(1) + topBox.addWidget(restart) + + self.angle.setValue(60) + self.force.setValue(25) + self.angle.setFocus() + + self.newGame() + + def fire(self): + if self.cannonField.gameOver() or self.cannonField.isShooting(): + return + self.shotsLeft.display(self.shotsLeft.intValue() - 1) + self.cannonField.shoot() + + def hit(self): + self.hits.display(self.hits.intValue() + 1) + if self.shotsLeft.intValue() == 0: + self.cannonField.setGameOver() + else: + self.cannonField.newTarget() + + def missed(self): + if self.shotsLeft.intValue() == 0: + self.cannonField.setGameOver() + + def newGame(self): + self.shotsLeft.display(15) + self.hits.display(0) + self.cannonField.restartGame() + self.cannonField.newTarget() + + +qt.QApplication.setColorSpec(qt.QApplication.CustomColor) +a = qt.QApplication(sys.argv) + +gb = GameBoard() +gb.setGeometry(100, 100, 500, 355) +a.setMainWidget(gb) +gb.show() +sys.exit(a.exec_loop()) diff --git a/examples3/tut14.py b/examples3/tut14.py new file mode 100755 index 0000000..f046757 --- /dev/null +++ b/examples3/tut14.py @@ -0,0 +1,378 @@ +#!/usr/bin/env python + +# Qt tutorial 14. + +import sys +import math +import random +import qt + + +class LCDRange(qt.QWidget): + def __init__(self, s=None, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + lcd = qt.QLCDNumber(2, self, "lcd") + self.slider = qt.QSlider(qt.Qt.Horizontal, self, "slider") + self.slider.setRange(0, 99) + self.slider.setValue(0) + + self.label = qt.QLabel(" ", self, "label") + self.label.setAlignment(qt.Qt.AlignCenter) + + self.connect(self.slider, qt.SIGNAL("valueChanged(int)"), lcd, qt.SLOT("display(int)")) + self.connect(self.slider, qt.SIGNAL("valueChanged(int)"), self, qt.PYSIGNAL("valueChanged(int)")) + + self.setFocusProxy(self.slider) + + l = qt.QVBoxLayout(self) + l.addWidget(lcd, 1) + l.addWidget(self.slider) + l.addWidget(self.label) + + if s is not None: + self.setText(s) + + def value(self): + return self.slider.value() + + def setValue(self, value): + self.slider.setValue(value) + + def setRange(self, minVal, maxVal): + if minVal < 0 or maxVal > 99 or minVal > maxVal: + raise ValueError, "LCDRange.setRange(): invalid range" + + self.slider.setRange(minVal, maxVal) + + def text(self): + return self.label.text() + + def setText(self, s): + self.label.setText(s) + + +class CannonField(qt.QWidget): + def __init__(self, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + self.ang = 45 + self.f = 0 + self.timerCount = 0 + + self.autoShootTimer = qt.QTimer(self, "movement handler") + self.connect(self.autoShootTimer, qt.SIGNAL("timeout()"), self.moveShot) + + self.shoot_ang = 0 + self.shoot_f = 0 + self.target = qt.QPoint(0, 0) + self.gameEnded = 0 + self.barrelPressed = 0 + + self.setPalette(qt.QPalette(qt.QColor(250, 250, 200))) + + self.barrelRect = qt.QRect(33, -4, 15, 8) + + self.newTarget() + + def angle(self): + return self.ang + + def setAngle(self, degrees): + if degrees < 5: + degrees = 5 + if degrees > 70: + degrees = 70 + if self.ang == degrees: + return + self.ang = degrees + self.repaint(self.cannonRect(), 0) + self.emit(qt.PYSIGNAL("angleChanged(int)"), (self.ang, )) + + def force(self): + return self.f + + def setForce(self, newton): + if newton < 0: + newton = 0 + if self.f == newton: + return + self.f = newton + self.emit(qt.PYSIGNAL("forceChanged(int)"), (self.f, )) + + def shoot(self): + if self.isShooting(): + return + + self.timerCount = 0 + self.shoot_ang = self.ang + self.shoot_f = self.f + self.autoShootTimer.start(50) + self.emit(qt.PYSIGNAL("canShoot(bool)"), (0, )) + + def newTarget(self): + r = qt.QRegion(self.targetRect()) + self.target = qt.QPoint(random.randint(200, 390), random.randint(10, 265)) + self.repaint(r.unite(qt.QRegion(self.targetRect()))) + + def gameOver(self): + return self.gameEnded + + def setGameOver(self): + if self.gameEnded: + return + if self.isShooting(): + self.autoShootTime.stop() + self.gameEnded = 1 + self.repaint() + + def restartGame(self): + if self.isShooting(): + self.autoShootTime.stop() + self.gameEnded = 0 + self.repaint() + self.emit(qt.PYSIGNAL("canShoot(bool)"), (1, )) + + def moveShot(self): + r = qt.QRegion(self.shotRect()) + self.timerCount = self.timerCount + 1 + + shotR = self.shotRect() + + if shotR.intersects(self.targetRect()): + self.autoShootTimer.stop() + self.emit(qt.PYSIGNAL("hit()"), ()) + self.emit(qt.PYSIGNAL("canShoot(bool)"), (1, )) + elif shotR.x() > self.width() or shotR.y() > self.height() or shotR.intersects(self.barrierRect()): + self.autoShootTimer.stop() + self.emit(qt.PYSIGNAL("missed()"), ()) + self.emit(qt.PYSIGNAL("canShoot(bool)"), (1, )) + else: + r = r.unite(qt.QRegion(shotR)) + + self.repaint(r) + + def mousePressEvent(self, ev): + if ev.button() != qt.Qt.LeftButton: + return + if self.barrelHit(ev.pos()): + self.barrelPressed = 1 + + def mouseMoveEvent(self, ev): + if not self.barrelPressed: + return + pnt = ev.pos() + if pnt.x() <= 0: + pnt.setX(1) + if pnt.y() >= self.height(): + pnt.setY(self.height() - 1) + rad = math.atan(float(self.rect().bottom() - pnt.y()) / pnt.x()) + self.setAngle(int(round(rad * 180 / math.pi))) + + def mouseReleaseEvent(self, ev): + if ev.button() == qt.Qt.LeftButton: + self.barrelPressed = 0 + + def paintEvent(self, ev): + updateR = ev.rect() + p = qt.QPainter(self) + + if self.gameEnded: + p.setPen(qt.Qt.black) + p.setFont(qt.QFont("Courier", 48, qt.QFont.Bold)) + p.drawText(self.rect(), qt.Qt.AlignCenter, "Game Over") + + if updateR.intersects(self.cannonRect()): + self.paintCannon(p) + + if updateR.intersects(self.barrierRect()): + self.paintBarrier(p) + + if self.isShooting() and updateR.intersects(self.shotRect()): + self.paintShot(p) + + if not self.gameEnded and updateR.intersects(self.targetRect()): + self.paintTarget(p) + + def paintShot(self, p): + p.setBrush(qt.Qt.black) + p.setPen(qt.Qt.NoPen) + p.drawRect(self.shotRect()) + + def paintTarget(self, p): + p.setBrush(qt.Qt.red) + p.setPen(qt.Qt.black) + p.drawRect(self.targetRect()) + + def paintBarrier(self, p): + p.setBrush(qt.Qt.yellow) + p.setPen(qt.Qt.black) + p.drawRect(self.barrierRect()) + + def paintCannon(self, p): + cr = self.cannonRect() + pix = qt.QPixmap(cr.size()) + pix.fill(self, cr.topLeft()) + + tmp = qt.QPainter(pix) + tmp.setBrush(qt.Qt.blue) + tmp.setPen(qt.Qt.NoPen) + + tmp.translate(0, pix.height() - 1) + tmp.drawPie(qt.QRect(-35, -35, 70, 70), 0, 90 * 16) + tmp.rotate(-self.ang) + tmp.drawRect(self.barrelRect) + tmp.end() + + p.drawPixmap(cr.topLeft(), pix) + + def cannonRect(self): + r = qt.QRect(0, 0, 50, 50) + r.moveBottomLeft(self.rect().bottomLeft()) + return r + + def shotRect(self): + gravity = 4.0 + + time = self.timerCount / 4.0 + velocity = self.shoot_f + radians = self.shoot_ang * math.pi / 180 + + velx = velocity * math.cos(radians) + vely = velocity * math.sin(radians) + x0 = (self.barrelRect.right() + 5) * math.cos(radians) + y0 = (self.barrelRect.right() + 5) * math.sin(radians) + x = x0 + velx * time + y = y0 + vely * time - 0.5 * gravity * time * time + + r = qt.QRect(0, 0, 6, 6) + r.moveCenter(qt.QPoint(x, self.height() - 1 - y)) + return r + + def targetRect(self): + r = qt.QRect(0, 0, 20, 10) + r.moveCenter(qt.QPoint(self.target.x(), self.height() - 1 - self.target.y())) + return r + + def barrierRect(self): + return qt.QRect(145, self.height() - 100, 15, 100) + + def barrelHit(self, p): + mtx = qt.QWMatrix() + mtx.translate(0, self.height() - 1) + mtx.rotate(-self.ang) + (mtx, invertable) = mtx.invert() + return self.barrelRect.contains(mtx.map(p)) + + def isShooting(self): + return self.autoShootTimer.isActive() + + def sizePolicy(self): + return qt.QSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Expanding) + + +class GameBoard(qt.QWidget): + def __init__(self, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + quit = qt.QPushButton("&Quit", self, "quit") + quit.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + self.connect(quit, qt.SIGNAL("clicked()"), qt.qApp, qt.SLOT("quit()")) + + self.angle = LCDRange("ANGLE", self, "angle") + self.angle.setRange(5, 70) + + self.force = LCDRange("FORCE", self, "force") + self.force.setRange(10, 50) + + box = qt.QVBox(self, "cannonFrame") + box.setFrameStyle(qt.QFrame.WinPanel | qt.QFrame.Sunken) + + self.cannonField = CannonField(box, "cannonField") + + self.connect(self.angle, qt.PYSIGNAL("valueChanged(int)"), self.cannonField.setAngle) + self.connect(self.cannonField, qt.PYSIGNAL("angleChanged(int)"), self.angle.setValue) + + self.connect(self.force, qt.PYSIGNAL("valueChanged(int)"), self.cannonField.setForce) + self.connect(self.cannonField, qt.PYSIGNAL("forceChanged(int)"), self.force.setValue) + + self.connect(self.cannonField, qt.PYSIGNAL("hit()"), self.hit) + self.connect(self.cannonField, qt.PYSIGNAL("missed()"), self.missed) + + self.shoot = qt.QPushButton("&Shoot", self, "shoot") + self.shoot.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + self.connect(self.shoot, qt.SIGNAL("clicked()"), self.fire) + self.connect(self.cannonField, qt.PYSIGNAL("canShoot(bool)"), self.shoot, qt.SLOT("setEnabled(bool)")) + + restart = qt.QPushButton("&New Game", self, "newgame") + restart.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + self.connect(restart, qt.SIGNAL("clicked()"), self.newGame) + + self.hits = qt.QLCDNumber(2, self, "hits") + self.shotsLeft = qt.QLCDNumber(2, self, "shotsleft") + hitsL = qt.QLabel("HITS", self, "hitsLabel") + shotsLeftL = qt.QLabel("SHOTS LEFT", self, "shotsleftLabel") + + accel = qt.QAccel(self) + accel.connectItem(accel.insertItem(qt.Qt.Key_Enter), self.fire) + accel.connectItem(accel.insertItem(qt.Qt.Key_Return), self.fire) + accel.connectItem(accel.insertItem(qt.Qt.CTRL + qt.Qt.Key_Q), qt.qApp, qt.SLOT("quit()")) + + grid = qt.QGridLayout(self, 2, 2, 10) + grid.addWidget(quit, 0, 0) + grid.addWidget(box, 1, 1) + grid.setColStretch(1, 10) + + leftBox = qt.QVBoxLayout() + grid.addLayout(leftBox, 1, 0) + leftBox.addWidget(self.angle) + leftBox.addWidget(self.force) + + topBox = qt.QHBoxLayout() + grid.addLayout(topBox, 0, 1) + topBox.addWidget(self.shoot) + topBox.addWidget(self.hits) + topBox.addWidget(hitsL) + topBox.addWidget(self.shotsLeft) + topBox.addWidget(shotsLeftL) + topBox.addStretch(1) + topBox.addWidget(restart) + + self.angle.setValue(60) + self.force.setValue(25) + self.angle.setFocus() + + self.newGame() + + def fire(self): + if self.cannonField.gameOver() or self.cannonField.isShooting(): + return + self.shotsLeft.display(self.shotsLeft.intValue() - 1) + self.cannonField.shoot() + + def hit(self): + self.hits.display(self.hits.intValue() + 1) + if self.shotsLeft.intValue() == 0: + self.cannonField.setGameOver() + else: + self.cannonField.newTarget() + + def missed(self): + if self.shotsLeft.intValue() == 0: + self.cannonField.setGameOver() + + def newGame(self): + self.shotsLeft.display(15) + self.hits.display(0) + self.cannonField.restartGame() + self.cannonField.newTarget() + + +qt.QApplication.setColorSpec(qt.QApplication.CustomColor) +a = qt.QApplication(sys.argv) + +gb = GameBoard() +gb.setGeometry(100, 100, 500, 355) +a.setMainWidget(gb) +gb.show() +sys.exit(a.exec_loop()) diff --git a/examples3/tut2.py b/examples3/tut2.py new file mode 100755 index 0000000..8b6a076 --- /dev/null +++ b/examples3/tut2.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +# Qt tutorial 2. + +import sys +import qt + + +a = qt.QApplication(sys.argv) + +quit = qt.QPushButton("Quit", None) +quit.resize(75, 30) +quit.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + +qt.QObject.connect(quit, qt.SIGNAL("clicked()"), a, qt.SLOT("quit()")) + +a.setMainWidget(quit) +quit.show() +sys.exit(a.exec_loop()) diff --git a/examples3/tut3.py b/examples3/tut3.py new file mode 100755 index 0000000..9b73954 --- /dev/null +++ b/examples3/tut3.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +# Qt tutorial 3. + +import sys +import qt + + +a = qt.QApplication(sys.argv) + +box = qt.QVBox() +box.resize(200, 120) + +quit = qt.QPushButton("Quit", box) +quit.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + +qt.QObject.connect(quit, qt.SIGNAL("clicked()"), a, qt.SLOT("quit()")) + +a.setMainWidget(box) +box.show() +sys.exit(a.exec_loop()) diff --git a/examples3/tut4.py b/examples3/tut4.py new file mode 100755 index 0000000..9ad05c7 --- /dev/null +++ b/examples3/tut4.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python + +# Qt tutorial 4. + +import sys +import qt + + +class MyWidget(qt.QWidget): + def __init__(self, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + self.setMinimumSize(200, 120) + self.setMaximumSize(200, 120) + + quit = qt.QPushButton("Quit", self, "quit") + quit.setGeometry(62, 40, 75, 30) + quit.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + + self.connect(quit, qt.SIGNAL("clicked()"), qt.qApp, qt.SLOT("quit()")) + + +a = qt.QApplication(sys.argv) + +w = MyWidget() +w.setGeometry(100, 100, 200, 120) +a.setMainWidget(w) +w.show() +sys.exit(a.exec_loop()) diff --git a/examples3/tut5.py b/examples3/tut5.py new file mode 100755 index 0000000..88a2447 --- /dev/null +++ b/examples3/tut5.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +# Qt tutorial 5. + +import sys +import qt + + +class MyWidget(qt.QVBox): + def __init__(self, parent=None, name=None): + qt.QVBox.__init__(self, parent, name) + + quit = qt.QPushButton("Quit", self, "quit") + quit.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + + self.connect(quit, qt.SIGNAL("clicked()"), qt.qApp, qt.SLOT("quit()")) + + lcd = qt.QLCDNumber(2, self, "lcd") + + slider = qt.QSlider(qt.Qt.Horizontal, self, "slider") + slider.setRange(0, 99) + slider.setValue(0) + + self.connect(slider, qt.SIGNAL("valueChanged(int)"), lcd, qt.SLOT("display(int)")) + + +a = qt.QApplication(sys.argv) + +w = MyWidget() +a.setMainWidget(w) +w.show() +sys.exit(a.exec_loop()) diff --git a/examples3/tut6.py b/examples3/tut6.py new file mode 100755 index 0000000..785edfe --- /dev/null +++ b/examples3/tut6.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python + +# Qt tutorial 6. + +import sys +import qt + + +class LCDRange(qt.QVBox): + def __init__(self, parent=None, name=None): + qt.QVBox.__init__(self, parent, name) + + lcd = qt.QLCDNumber(2, self, "lcd") + slider = qt.QSlider(qt.Qt.Horizontal, self, "slider") + slider.setRange(0, 99) + slider.setValue(0) + self.connect(slider, qt.SIGNAL("valueChanged(int)"), lcd, qt.SLOT("display(int)")) + + +class MyWidget(qt.QVBox): + def __init__(self, parent=None, name=None): + qt.QVBox.__init__(self, parent, name) + + quit = qt.QPushButton("Quit", self, "quit") + quit.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + + self.connect(quit, qt.SIGNAL("clicked()"), qt.qApp, qt.SLOT("quit()")) + + grid = qt.QGrid(4, self) + + for c in range(4): + for r in range(4): + LCDRange(grid) + + +a = qt.QApplication(sys.argv) + +w = MyWidget() +a.setMainWidget(w) +w.show() +sys.exit(a.exec_loop()) diff --git a/examples3/tut7.py b/examples3/tut7.py new file mode 100755 index 0000000..400505e --- /dev/null +++ b/examples3/tut7.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +# Qt tutorial 7. + +import sys +import qt + + +class LCDRange(qt.QVBox): + def __init__(self, parent=None, name=None): + qt.QVBox.__init__(self, parent, name) + + lcd = qt.QLCDNumber(2, self, "lcd") + self.slider = qt.QSlider(qt.Qt.Horizontal, self, "slider") + self.slider.setRange(0, 99) + self.slider.setValue(0) + self.connect(self.slider, qt.SIGNAL("valueChanged(int)"), lcd, qt.SLOT("display(int)")) + self.connect(self.slider, qt.SIGNAL("valueChanged(int)"), self, qt.PYSIGNAL("valueChanged(int)")) + + def value(self): + return self.slider.value() + + def setValue(self, value): + self.slider.setValue(value) + + +class MyWidget(qt.QVBox): + def __init__(self, parent=None, name=None): + qt.QVBox.__init__(self, parent, name) + + quit = qt.QPushButton("Quit", self, "quit") + quit.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + + self.connect(quit, qt.SIGNAL("clicked()"), qt.qApp, qt.SLOT("quit()")) + + grid = qt.QGrid(4, self) + + self.lcdlist = [] + previous = None + + for r in range(4): + for c in range(4): + lr = LCDRange(grid) + + if previous: + self.connect(lr, qt.PYSIGNAL("valueChanged(int)"), previous.setValue) + + previous = lr + self.lcdlist.append(lr) + + +a = qt.QApplication(sys.argv) + +w = MyWidget() +a.setMainWidget(w) +w.show() +sys.exit(a.exec_loop()) diff --git a/examples3/tut8.py b/examples3/tut8.py new file mode 100755 index 0000000..f7dd156 --- /dev/null +++ b/examples3/tut8.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python + +# Qt tutorial 8. + +import sys +import qt + + +class LCDRange(qt.QVBox): + def __init__(self, parent=None, name=None): + qt.QVBox.__init__(self, parent, name) + + lcd = qt.QLCDNumber(2, self, "lcd") + self.slider = qt.QSlider(qt.Qt.Horizontal, self, "slider") + self.slider.setRange(0, 99) + self.slider.setValue(0) + self.connect(self.slider, qt.SIGNAL("valueChanged(int)"), lcd, qt.SLOT("display(int)")) + self.connect(self.slider, qt.SIGNAL("valueChanged(int)"), self, qt.PYSIGNAL("valueChanged(int)")) + + self.setFocusProxy(self.slider) + + def value(self): + return self.slider.value() + + def setValue(self, value): + self.slider.setValue(value) + + def setRange(self, minVal, maxVal): + if minVal < 0 or maxVal > 99 or minVal > maxVal: + raise ValueError, "LCDRange.setRange(): invalid range" + + self.slider.setRange(minVal, maxVal) + + +class CannonField(qt.QWidget): + def __init__(self, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + self.ang = 45 + self.setPalette(qt.QPalette(qt.QColor(250, 250, 200))) + + def angle(self): + return self.ang + + def setAngle(self, degrees): + if degrees < 5: + degrees = 5 + if degrees > 70: + degrees = 70 + if self.ang == degrees: + return + self.ang = degrees + self.repaint() + self.emit(qt.PYSIGNAL("angleChanged(int)"), (self.ang, )) + + def paintEvent(self, ev): + p = qt.QPainter(self) + p.drawText(200, 200, "Angle = %d" % (self.ang)) + + def sizePolicy(self): + return qt.QSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Expanding) + + +class MyWidget(qt.QWidget): + def __init__(self, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + quit = qt.QPushButton("Quit", self, "quit") + quit.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + self.connect(quit, qt.SIGNAL("clicked()"), qt.qApp, qt.SLOT("quit()")) + + self.angle = LCDRange(self, "angle") + self.angle.setRange(5, 70) + + self.cannonField = CannonField(self, "cannonField") + + self.connect(self.angle, qt.PYSIGNAL("valueChanged(int)"), self.cannonField.setAngle) + self.connect(self.cannonField, qt.PYSIGNAL("angleChanged(int)"), self.angle.setValue) + + grid = qt.QGridLayout(self, 2, 2, 10) + + grid.addWidget(quit, 0, 0) + grid.addWidget(self.angle, 1, 0, qt.Qt.AlignTop) + grid.addWidget(self.cannonField, 1, 1) + grid.setColStretch(1, 10) + + self.angle.setValue(60) + self.angle.setFocus() + + +a = qt.QApplication(sys.argv) + +w = MyWidget() +w.setGeometry(100, 100, 500, 355) +a.setMainWidget(w) +w.show() +sys.exit(a.exec_loop()) diff --git a/examples3/tut9.py b/examples3/tut9.py new file mode 100755 index 0000000..aba7ddc --- /dev/null +++ b/examples3/tut9.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python + +# Qt tutorial 9. + +import sys +import qt + + +class LCDRange(qt.QVBox): + def __init__(self, parent=None, name=None): + qt.QVBox.__init__(self, parent, name) + + lcd = qt.QLCDNumber(2, self, "lcd") + self.slider = qt.QSlider(qt.Qt.Horizontal, self, "slider") + self.slider.setRange(0, 99) + self.slider.setValue(0) + self.connect(self.slider, qt.SIGNAL("valueChanged(int)"), lcd, qt.SLOT("display(int)")) + self.connect(self.slider, qt.SIGNAL("valueChanged(int)"), self, qt.PYSIGNAL("valueChanged(int)")) + + self.setFocusProxy(self.slider) + + def value(self): + return self.slider.value() + + def setValue(self, value): + self.slider.setValue(value) + + def setRange(self, minVal, maxVal): + if minVal < 0 or maxVal > 99 or minVal > maxVal: + raise ValueError, "LCDRange.setRange(): invalid range" + self.slider.setRange(minVal, maxVal) + + +class CannonField(qt.QWidget): + def __init__(self, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + self.ang = 45 + self.setPalette(qt.QPalette(qt.QColor(250, 250, 200))) + + def angle(self): + return self.ang + + def setAngle(self, degrees): + if degrees < 5: + degrees = 5 + if degrees > 70: + degrees = 70 + if self.ang == degrees: + return + self.ang = degrees + self.repaint() + self.emit(qt.PYSIGNAL("angleChanged(int)"), (self.ang, )) + + def paintEvent(self, ev): + p = qt.QPainter(self) + + p.setBrush(qt.Qt.blue) + p.setPen(qt.Qt.NoPen) + + p.translate(0, self.rect().bottom()) + p.drawPie(qt.QRect(-35, -35, 70, 70), 0, 90 * 16) + p.rotate(-self.ang) + p.drawRect(qt.QRect(33, -4, 15, 8)) + + def sizePolicy(self): + return qt.QSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Expanding) + + +class MyWidget(qt.QWidget): + def __init__(self, parent=None, name=None): + qt.QWidget.__init__(self, parent, name) + + quit = qt.QPushButton("&Quit", self, "quit") + quit.setFont(qt.QFont("Times", 18, qt.QFont.Bold)) + self.connect(quit, qt.SIGNAL("clicked()"), qt.qApp, qt.SLOT("quit()")) + + self.angle = LCDRange(self, "angle") + self.angle.setRange(5, 70) + + self.cannonField = CannonField(self, "cannonField") + + self.connect(self.angle, qt.PYSIGNAL("valueChanged(int)"), self.cannonField.setAngle) + self.connect(self.cannonField, qt.PYSIGNAL("angleChanged(int)"), self.angle.setValue) + + grid = qt.QGridLayout(self, 2, 2, 10) + + grid.addWidget(quit, 0, 0) + grid.addWidget(self.angle, 1, 0, qt.Qt.AlignTop) + grid.addWidget(self.cannonField, 1, 1) + grid.setColStretch(1, 10) + + self.angle.setValue(60) + self.angle.setFocus() + + +qt.QApplication.setColorSpec(qt.QApplication.CustomColor) +a = qt.QApplication(sys.argv) + +w = MyWidget() +w.setGeometry(100, 100, 500, 355) +a.setMainWidget(w) +w.show() +sys.exit(a.exec_loop()) diff --git a/examples3/webbrowser/mainwindow.py b/examples3/webbrowser/mainwindow.py new file mode 100644 index 0000000..6afdfc8 --- /dev/null +++ b/examples3/webbrowser/mainwindow.py @@ -0,0 +1,1097 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'mainwindow.ui' +# +# Created: Sun Dec 5 14:50:47 2004 +# by: The PyQt User Interface Compiler (pyuic) snapshot-20041203 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * +from qtaxcontainer import QAxWidget + +image0_data = [ +"32 32 3 1", +". c None", +"a c #000080", +"# c #808080", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +".......#aaaaaaaaa...............", +"......#aaaaaaaaaaa.........a....", +".....#aaa.......aaa.......aa....", +"....#aaa.........aaaa....aaa....", +"....aaa...........aaaa..aaaa....", +"....aa..............aaaaaaaa....", +"....aa...............aaaaaaa....", +"....aa...............aaaaaaa....", +"....aa..............aaaaaaaa....", +"....aa.............aaaaaaaaa....", +"....#aa...........aaaaaaaaaa....", +".....#aa.........aaaaaaaaaaa....", +"......aa#.......................", +".......aa#......................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................" +] +image1_data = [ +"32 32 142 2", +"Qt c None", +"#O c #0010f7", +"#P c #0021ef", +"#R c #0021f7", +"#S c #0021ff", +"#T c #0029ff", +"ah c #0031ff", +"#N c #0829f7", +"#x c #0831ff", +"#C c #0839ff", +"#E c #1029e7", +"#r c #1039ff", +"#o c #1042ff", +"#Q c #1831de", +"ak c #1831e7", +"#k c #1842ff", +"#H c #184aff", +"aj c #2139e7", +"#s c #2142de", +"#G c #214aff", +".9 c #2152ff", +"#2 c #2939c6", +"ag c #2939d6", +"a# c #2942ce", +"#p c #2942de", +"#U c #2952ff", +"ae c #295aff", +"#y c #3152de", +".2 c #3152e7", +"#I c #315aff", +"#z c #3163ff", +"#1 c #394abd", +"#L c #394ade", +"#B c #3963ff", +"#w c #396bff", +"#V c #4252d6", +"#l c #4252de", +"#W c #4263ef", +"#q c #426bff", +".1 c #4273ff", +"#5 c #4a5ad6", +"#J c #4a73ff", +"#K c #4a7bff", +"ac c #4a84ff", +"ab c #5263c6", +".T c #5263ce", +".M c #5273d6", +".c c #5273e7", +".U c #527bde", +"#t c #527bf7", +"#A c #5284ff", +"#X c #5a63ad", +".V c #5a84ef", +"#F c #5a84ff", +"#v c #5a8cff", +"ad c #636bbd", +".e c #637bc6", +".W c #637bce", +".3 c #637bd6", +".Q c #6384de", +".5 c #638cef", +"#b c #638cff", +"#j c #6394ff", +"af c #6b73bd", +"#0 c #6b73c6", +".S c #6b84ce", +"#u c #6b94ff", +".C c #6b9cff", +"ai c #737bce", +".z c #7384b5", +".j c #7384c6", +"#6 c #738cce", +".4 c #738cd6", +".b c #739ce7", +".I c #73a5ff", +"#n c #73adff", +"#Z c #7b84b5", +".R c #7b8cbd", +".J c #7b94bd", +".n c #7ba5e7", +".P c #7badff", +"#c c #7bb5ff", +"#M c #84849c", +"#3 c #8484ad", +".i c #848cc6", +"al c #8494bd", +"aa c #849cc6", +".y c #84adff", +".O c #84b5ff", +"#a c #84bdff", +".t c #8c94ad", +".a c #8c94b5", +".D c #8c9cbd", +".m c #8c9cce", +".A c #8ca5ef", +".f c #8cadf7", +".H c #8cbdff", +"#D c #9494a5", +"#8 c #9494bd", +"#9 c #9494c6", +"a. c #949cbd", +".r c #94c6ff", +"#d c #94ceff", +"#4 c #9ca5ad", +"#7 c #9ca5b5", +".u c #9cbdf7", +".6 c #9cc6ff", +".0 c #9cceff", +".x c #9cd6ff", +".L c #a5a5b5", +"#Y c #a5a5bd", +"#e c #a5ceff", +"## c #a5d6ff", +".X c #adadb5", +".k c #adc6ff", +"#i c #add6ff", +".E c #b5b5b5", +".d c #b5b5bd", +".K c #b5bdc6", +".F c #b5ceff", +".N c #b5d6ff", +".B c #b5deff", +".s c #bdbdbd", +".# c #bdbdc6", +"#. c #bdd6ff", +".G c #bde7ff", +"#h c #c6e7ff", +"#f c #c6efff", +".w c #c6f7ff", +".h c #ced6ff", +".Y c #cee7ff", +".q c #ceefff", +".Z c #cef7ff", +".l c #d6efff", +".8 c #d6f7ff", +".o c #deefff", +".7 c #def7ff", +"#m c #deffff", +"#g c #e7ffff", +".v c #efffff", +".p c #f7ffff", +".g c #ffffff", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQt.#.a.b.c.aQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQt.d.e.f.g.h.iQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt.d.j.k.g.g.l.mQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQt.a.n.o.g.p.q.r.mQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQt.s.t.u.g.g.v.w.x.y.mQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQt.z.A.g.g.v.B.x.r.C.DQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQt.E.a.F.g.g.v.G.r.H.H.I.JQtQtQtQtQtQtQtQtQtQt.s.s.K.K.KQtQt", +"QtQt.L.M.N.g.g.q.x.H.O.y.P.P.Q.LQtQtQt.s.s.K.a.R.S.T.U.V.V.Q.W.X", +"Qt.#.Q.Y.g.g.Z.0.O.y.P.P.P.P.1.2.3.4.S.e.c.5.f.6.N.l.7.8.Z.0.9.T", +".s.W#..g.p.Z###a.O.P.P.I.I.P#b#c#d#e.B#f#g.7.8.8.q#h#i.r.H#j#k#l", +".e#e.g#m.G#d.O.y.P.I.I.I.I.I.I.H.6####.0.r.H#a.O#c.I#n.I#j.1#o#p", +".5.p#f.x.0.O.y.P.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.C.C.C#b#q#r#s", +"#t##.r.H.O#c.P.I.I.I.I.I.I.C.I.C.C.I.C.I.C.C.C.C#u.C#j#j#v#w#x#p", +"#y#z#j.I.I.P.I.I.C.C.C.I.I.C.C#j#b#v#v#b#j#j#j#b#j#v#b#v#A#B#C#p", +"#D#E#k#q#A#j.C.I.C.I.C.C.C.I#F#G#k#k#H#G#I#B.1.1#J#K#K.1#q#z#x#L", +".s#M#N#r#z#K#b#u.C#u.C.C.I.I#B#O#P#Q#E#P#R#S#T#x#r#r#H.9#U#G#T#V", +"QtQt.z#N#r#I.1#v#j#u#j.C#u.I#W#X#D.s#Y#D#Z#0#1#2#Q#P#P#N#N#T#E#3", +"QtQt.s#4#5#x#H#B#K#v#j#j#j#j#6QtQtQtQtQtQtQt.s.s.d.X#7#8#9a..X.s", +"QtQtQtQt.da##S#k#z#J#v#b#j#vaaQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQt.Eab#x#o#I#K#v#vac.iQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQt.sad#E#rae#q#K#wafQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQt.#.Lagah#k#U#kafQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQt#4#Q#T#xahaiQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQt#4adajakalQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt" +] +image2_data = [ +"32 32 142 2", +"Qt c None", +"#Y c #0018e7", +"aa c #0018ef", +"#E c #0018ff", +"#Q c #0021ef", +"#K c #0021ff", +"a# c #0029ff", +"a. c #0829ff", +"#P c #0831ff", +"#4 c #1021d6", +"#R c #1021de", +"#L c #1029d6", +"#V c #1029e7", +"#n c #1039f7", +"#W c #1039ff", +"#O c #1042ff", +"ah c #1831ce", +"#y c #1842ff", +"aj c #2131c6", +"#S c #2131ce", +"#z c #2139de", +".0 c #2142de", +"ai c #2142e7", +".t c #214aef", +"#D c #214aff", +".x c #2152ff", +"al c #2939de", +"#d c #294ae7", +"#I c #2952ff", +"#J c #295aff", +"#T c #3142bd", +"#N c #315aff", +"#s c #3163ff", +"#F c #394ac6", +"#G c #3952d6", +"ag c #395ae7", +".B c #3963f7", +"ae c #3963ff", +".g c #396bff", +"#U c #424ab5", +"#2 c #4252b5", +".J c #425ace", +"#A c #4263de", +".b c #426be7", +"#p c #426bef", +"#x c #426bff", +".n c #4273ff", +".o c #4a63ce", +"#t c #4a6be7", +".Q c #4a73de", +"#3 c #4a73ff", +"#C c #4a7bff", +"#Z c #525abd", +".1 c #526bbd", +".W c #526bc6", +".R c #526bce", +".P c #527be7", +"#w c #5284ff", +"#m c #528cff", +"ac c #5a63bd", +"ak c #5a6bbd", +".O c #5a7bf7", +"#H c #5a84ff", +"#9 c #5a8cff", +"af c #636bb5", +".h c #636bbd", +"ab c #6384ef", +"#v c #638cff", +".w c #6394ff", +".s c #639cff", +"#M c #6b73b5", +".C c #6b73bd", +"#u c #6b9cff", +".c c #737bb5", +".S c #7384ce", +".N c #738ce7", +".a c #7394de", +".8 c #7394ef", +"#8 c #739cf7", +"#B c #739cff", +".A c #73a5ff", +"#0 c #7b84b5", +".T c #7b8cbd", +".9 c #7b94c6", +"#. c #7b94d6", +".7 c #7ba5ff", +".X c #7badff", +".I c #7bb5ff", +"#5 c #848ca5", +".y c #848cad", +".M c #8494b5", +"## c #849cd6", +"#c c #84adff", +".G c #84b5ff", +".Z c #84bdff", +"#o c #8c8cad", +"#a c #8ca5ce", +".Y c #8cb5ff", +".H c #8cbdff", +"#1 c #9494a5", +".U c #9494ad", +"#7 c #949cad", +"#b c #94ade7", +".z c #94c6ff", +".v c #94ceff", +".j c #9c9cad", +".u c #9ca5ad", +"#r c #9cc6ff", +".m c #9cceff", +".d c #a5a5a5", +"#6 c #a5a5ad", +".V c #a5a5b5", +".K c #a5adb5", +".2 c #a5ceff", +".r c #a5d6ff", +".L c #adadad", +".i c #adadb5", +".p c #adadbd", +".q c #addeff", +"#e c #ade7ff", +"#X c #b5b5b5", +".D c #b5b5bd", +".E c #b5b5c6", +".F c #b5bdc6", +".f c #b5deff", +"#q c #b5efff", +".# c #bdbdbd", +"ad c #bdbdc6", +".6 c #bddeff", +"#i c #bde7ff", +"#h c #bdefff", +"#g c #c6f7ff", +"#l c #cee7ff", +"#j c #cef7ff", +"#f c #ceffff", +".k c #d6efff", +"#k c #d6f7ff", +".l c #d6ffff", +".e c #deefff", +".5 c #e7ffff", +".4 c #efffff", +".3 c #f7ffff", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.a.b.c.#QtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.d.e.f.g.h.iQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.j.k.l.m.n.o.pQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.d.f.q.r.m.s.t.cQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.u.q.v.m.r.m.w.x.y.#QtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.u.z.z.z.z.m.m.A.B.C.DQtQtQtQt", +"QtQt.#.E.F.#.#QtQtQtQtQtQtQtQtQtQt.j.G.H.z.H.z.m.m.I.n.J.KQtQtQt", +".L.M.N.O.P.Q.R.S.T.U.E.#.#QtQtQt.V.W.X.H.Y.H.H.z.z.z.Z.g.0.VQtQt", +".1.2.3.4.5.k.6.2.Y.7.8.a.9#.###a#b.Y.G.G.G.G.Y.G.Y.H.z#c.n#d.u.#", +".b#e#f#g#h#i.f#h#g#g#j#k#k#k.e.4.4#l#c.X.G.G.G.G.G.G.G.H.H#m#n#o", +"#p.m#q.r.m.m.m.z#r.m.z.m.r.q.q.q.m.H.G.G.X#c.G.G.G.X.X.X.X.7#s.J", +"#t.v.q.m.z.H.H.H.H.H.Z.Y.G.G.G.G.G.G.G.X#c.I#c.X.X.X.A.A#u#u.n#d", +"#t.H.r.z.Y.G#c.X.X.X.7.X.X.X.X.X.X.X.X.X.X.X.X.X.7.A#u#v#w#x#y#z", +"#A.I.m.H.X.X.X.A.A#B.A#B#u#u#u#u#B.X#c.X.X.X.X.A.A#u.w#C.g#D#E#F", +"#G.s.G.A.w#v#H#w#C.n#x#s#I#y#y#y#J#H.X.7.X.X.7.A#u.w#w#J#y#K#L.U", +"#M.x.n#N#D#O#P#K#K#Q#Q#R#S#T#U#U#V#W.A.X.A.A#B#u.w.n#D#P#E#L.VQt", +"#X.h#V#Q#Y#R#S#U#Z#0#1.p.#.#.#.#.V#2.s.7.A#u#u.w#3#D#P#E#4#5QtQt", +"QtQt#6#1#7.D.#.#QtQtQtQtQtQtQtQtQt#6#8#B#u.w#9#s#ya.#E#F.V.#QtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.8#9#H#w#s#Wa#aa#2#XQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#ab#w#C#N#W#K#Eac.#QtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtad.Pae#J#Wa##Vaf#XQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#ag#W#P#Eah#6QtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#ai#K#Eaj.jQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#akalak.iQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt" +] +image3_data = [ +"25 25 2 1", +"# c #000000", +". c #ffffff", +".........................", +".........................", +".........................", +".........######..........", +".......##########........", +"......####....####.......", +".....###........###......", +"....#####........###.....", +"....##.###........##.....", +"...###..###.......###....", +"...##....###.......##....", +"...##.....###......##....", +"...##......###.....##....", +"...##.......###....##....", +"...###.......###..###....", +"....##........###.##.....", +"....###........#####.....", +".....###........###......", +"......####....####.......", +".......##########........", +".........######..........", +".........................", +".........................", +".........................", +"........................." +] +image4_data = [ +"32 32 3 1", +". c None", +"# c #000080", +"a c #808080", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"...............#########a.......", +"....#.........###########a......", +"....##.......###.......###a.....", +"....###....####.........###a....", +"....####..####...........###....", +"....########..............##....", +"....#######...............##....", +"....#######...............##....", +"....########..............##....", +"....#########.............##....", +"....##########...........##a....", +"....###########.........##a.....", +".......................a##......", +"......................a##.......", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................" +] +image5_data = [ +"32 32 211 2", +"Qt c None", +"aJ c #000000", +"#W c #080800", +"#N c #100800", +"#V c #101000", +"#E c #101008", +"#M c #181000", +"#L c #181800", +"#D c #181808", +"#F c #181810", +"as c #211800", +"#K c #211808", +"#J c #212110", +"#G c #212118", +"#q c #212121", +"an c #292100", +"#I c #292110", +"aN c #292910", +"#H c #292918", +"#y c #292921", +"aF c #312900", +"#C c #312918", +"#i c #312929", +".0 c #313131", +"#7 c #393100", +"#U c #393108", +"aG c #393931", +".M c #393939", +"#u c #423939", +"#c c #424a42", +"aE c #4a4200", +"aY c #4a4210", +".V c #4a4239", +"#B c #4a4a39", +".m c #4a4a42", +"aP c #4a5218", +".G c #4a5252", +".z c #4a5a52", +"aO c #524200", +"am c #524a00", +"#T c #524a08", +"#p c #524a4a", +".s c #525252", +"#a c #525a52", +".7 c #52635a", +"#b c #526363", +"az c #5a4a00", +"#6 c #5a5208", +"aw c #5a5210", +".Z c #5a524a", +".L c #5a5a52", +".y c #5a5a5a", +".F c #5a635a", +"#S c #635208", +"ax c #635a10", +".U c #635a52", +".r c #635a5a", +"aZ c #636321", +"## c #63635a", +".A c #636363", +"#h c #636b6b", +"aL c #637329", +"af c #6b5a00", +".6 c #6b635a", +"#o c #6b6363", +".E c #6b6b63", +"a4 c #6b7321", +"aS c #6b7329", +"aR c #6b7331", +"aX c #736300", +"al c #736308", +"#R c #736b10", +".T c #736b63", +"a5 c #737329", +".i c #73736b", +".K c #737373", +"a7 c #737b29", +"#g c #737b73", +"a9 c #7b7318", +"#A c #7b7373", +"a8 c #7b7b21", +"aV c #7b7b29", +"aQ c #7b7b5a", +".J c #7b7b73", +".1 c #7b7b7b", +"b# c #7b8431", +"a3 c #7b844a", +".8 c #7b847b", +"ay c #847308", +"#5 c #847310", +"aT c #847b21", +"b. c #847b29", +".S c #847b73", +".d c #847b7b", +"aW c #848421", +"a1 c #848429", +"a0 c #848431", +"bq c #84844a", +".H c #848484", +"ae c #8c7b08", +"ak c #8c7b10", +"#j c #8c8484", +"ba c #8c8c63", +"a2 c #8c8c7b", +".x c #8c8c84", +".2 c #8c948c", +".9 c #8cada5", +"aC c #947b08", +".Y c #947b73", +"aK c #948c10", +"#Q c #948c18", +"a6 c #948c29", +"#m c #948c84", +"bp c #949442", +"aH c #949484", +".D c #94948c", +".n c #949494", +"bn c #949c4a", +"bl c #949c5a", +"bj c #949c63", +".u c #949c94", +".v c #94a59c", +"aI c #9c8c10", +"#4 c #9c8c18", +"#O c #9c8c29", +"aM c #9c9418", +"#r c #9c948c", +"bo c #9c9c4a", +"bm c #9c9c52", +"bk c #9c9c5a", +"bh c #9c9c6b", +".k c #9c9c94", +".a c #9c9c9c", +"bi c #9ca56b", +"bf c #9ca573", +".h c #9ca59c", +"#f c #9ca5a5", +".B c #9cbdb5", +"#P c #a59400", +"aB c #a59418", +"#k c #a5948c", +"ar c #a59c29", +".N c #a59c8c", +".P c #a59c94", +".W c #a59c9c", +"bg c #a5a573", +"bd c #a5a584", +".q c #a5a59c", +".c c #a5a5a5", +"be c #a5ad7b", +".o c #a5ada5", +".C c #a5adad", +".I c #a5b5ad", +"#d c #a5bdb5", +".w c #a5c6bd", +"ad c #ad9c10", +"aj c #ad9c18", +"#w c #ad9c94", +".f c #ada59c", +"bc c #adad7b", +"bb c #adad84", +".# c #adada5", +".t c #adadad", +".4 c #adb5ad", +"ai c #b5a518", +"aq c #b5a529", +"aD c #b5a542", +"ao c #b5a54a", +".O c #b5a594", +"#v c #b5a59c", +"at c #b5ad52", +"#z c #b5ad9c", +".5 c #b5ada5", +".j c #b5b5ad", +".e c #b5b5b5", +".3 c #b5bdb5", +".Q c #b5bdbd", +"#e c #b5cec6", +"#8 c #bda539", +"#x c #bda59c", +"#3 c #bdad29", +"#X c #bdad31", +"ag c #bdad42", +"#n c #bdb5ad", +".b c #bdbdbd", +".X c #bdcec6", +"aU c #c6b510", +"#. c #c6c6bd", +".p c #c6cece", +".g c #c6ded6", +"ac c #cebd31", +"#l c #ced6ce", +"#s c #ced6d6", +"#t c #cedede", +"#9 c #d6c610", +"#2 c #d6c631", +"ap c #dec608", +"ah c #dece10", +"ab c #dece31", +".l c #deefe7", +".R c #deefef", +"au c #e7ce08", +"a. c #e7d621", +"a# c #e7d631", +"aa c #e7d639", +"#1 c #e7de39", +"#Y c #efde10", +"av c #efde21", +"aA c #efde29", +"#Z c #f7e729", +"#0 c #f7e739", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.aQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQt.b.c.d.eQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQt.f.g.h.i.bQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQt.j.k.l.e.m.nQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQt.b.a.o.p.q.r.s.tQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQt.u.v.w.k.x.y.z.A.bQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQt.t.k.B.C.k.D.E.F.G.HQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQt.b.#.#.o.I.b.c.J.K.L.M.tQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQt.a.N.O.P.Q.R.o.S.T.U.V.s.bQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQt.t.N.P.W.k.X.R.P.Y.i.A.Z.0.1QtQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt.b.x.2.w.3.4.I.j.#.5.6.L.F.7.0.cQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt.n.8.9.p#..o.4.x.x.x##.s#a#b.s#c.bQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQt.t.D.##d#e.h#f.o.P.2.2#g###h.A.z#i.KQtQtQtQtQtQtQt", +"QtQtQtQtQtQt.b#j.P.f.P#k.q.4.X#l#m#n.n#o.J.6#p#i#q.cQtQtQtQtQtQt", +"QtQtQtQtQtQt.W#m#k.O#m#r.5.k#s#t#m.q#r.U.E.T#p#u#i.M.eQtQtQtQtQt", +"QtQtQtQtQt.b.x#r.o.t#v.f.o.4.l#l#w#x.f.i#o.E###a.m#y.nQtQtQtQtQt", +"QtQtQtQtQt.b.e.c#d.o#z.u.q#f.I.q.#.#.2#A.U.m#B#h.h.j.bQtQtQtQtQt", +"QtQtQtQtQtQtQtQt.b#C#D#E#F#G#G#G#H#I#J#K#L#M#N.iQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt.b#O#P#Q#R#S#T#U#L#M#V#W#N#V#V.iQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt.b#X#Y#Z#0#0#1#2#3#4#5#6#7#M#V#AQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt.b#8#9a.a#aaaaabac#3adaeaf#7#M.JQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt.bagaha.a##1aaaa#2aiajakalaman#AQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtaoapa.a#aaaqaraq#3aj#5afamas.JQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtatauava#aw#V#W#Max#4ayafazan.JQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtatahaAaB#W#N#M#V#V#RaCalazas.JQtQtQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQt.baDap#Z#Q#N#M#V#M#N#6akafaEaFaG.E#h.JQtQtQtQtQt", +"QtQtQtQtQtQtQtQtaHaIahaAaB#W#W#N#WaJ#6aKalamaF#WaJaJ#yQtQtQtQtQt", +"QtQtQtQtQtQtQt.qaLaIahavaM#WaJ#W#DaN#RaealaOan#NaNaPaQQtQtQtQtQt", +"QtQtQtQtQtQt.jaRaSaTaUavaB#WaNaPaLaVaWaeaX#6aYaZa0a1a2QtQtQtQtQt", +"QtQtQtQtQt.ba3a4a5a5aVa6a1aZa7aSaSa5a8a9a4a5b.b#a5a5.kQtQtQtQtQt", +"QtQtQtQtQtbaa7a7aVa0b.b#a7b#a0a7a7a7aSaSa7b.aVa0aVaR.#QtQtQtQtQt", +"QtQtQtQtQtbbbcbdbebebfbgbhbhbibjbjbkbkblbmbmbnbobpbq.bQtQtQtQtQt" +] +image6_data = [ +"22 22 165 2", +"Qt c None", +".h c #000000", +".o c #010101", +"aF c #030303", +"#n c #060606", +".H c #080808", +".r c #0c0c0c", +".q c #121212", +"#V c #124e7f", +"#m c #131313", +".G c #161615", +"aI c #172cac", +".6 c #181818", +"aH c #1841b2", +".p c #191919", +"#8 c #1928ba", +"#W c #1929ba", +"aj c #192aba", +"av c #1a31c2", +"aE c #1b1b1b", +"aD c #1b2bc8", +"at c #1c79d2", +"ah c #1c7dd4", +"aA c #1d1d1d", +"aC c #1d7ad7", +"#6 c #1d7eda", +".5 c #1e1e1e", +"#7 c #1e8ae0", +"ai c #1e8de0", +"au c #1e90e0", +".g c #242424", +"#5 c #313b6c", +"aB c #343d8d", +"#3 c #393939", +".f c #3d3d3d", +"ak c #433967", +"#C c #434442", +"aw c #443c6e", +"#l c #454643", +"as c #454fa3", +".4 c #474845", +"#R c #474846", +".e c #484848", +"aG c #4856a0", +".d c #4a4a4a", +"#9 c #4c416a", +".c c #4c4c4c", +"ag c #4c5cae", +"#X c #4d4669", +"#z c #4dc2b2", +"#P c #4e445a", +"#G c #53504e", +".l c #545454", +".b c #555555", +"#Q c #595274", +"#i c #62b2a2", +".a c #676767", +"#j c #69b6a3", +".F c #6f6f6a", +".K c #6f8b89", +"ax c #747474", +"#a c #76a1a0", +".# c #797979", +"#A c #7bd7e8", +"ay c #7d7d7d", +"#U c #7e7d73", +".I c #808080", +".O c #81a3b8", +"az c #828282", +"#y c #82d1c0", +"#S c #848484", +"#O c #857e7c", +"#F c #86add2", +"#k c #86cdda", +"#N c #89b1bd", +"#h c #8acec3", +"#o c #8c8c8c", +"#L c #8cbbca", +"al c #8d8d8d", +".s c #8f8f8f", +"#H c #909090", +"#K c #90bac9", +"#M c #91c4cf", +"#t c #929292", +".X c #94c2cf", +".N c #94c2d0", +".W c #959595", +"#B c #96b9cb", +".3 c #97bede", +".L c #98c2ce", +".P c #9b9b9b", +"a. c #9c9c9c", +"am c #9d9d9d", +"#s c #9dbdc4", +"#b c #9e9e9e", +"#Y c #a0a0a0", +"an c #a6a6a6", +"#v c #a6d1d6", +".Z c #a7a1a1", +"#I c #a7a7a7", +"#D c #a7edde", +".M c #a8d8e5", +"#u c #aeaeae", +"ac c #b1b1b1", +"a# c #b2b2b2", +".2 c #b5cbd6", +".V c #b6b6b6", +"ar c #b7b7b7", +"#Z c #b8b8b8", +"#2 c #bababa", +".Q c #babbb9", +"aq c #bbbbbb", +"#c c #bcbcbc", +".8 c #bfbfbf", +"ap c #c0c0c0", +".1 c #c1d9d2", +"aa c #c8c8c8", +"ab c #cacaca", +"ao c #cbcbcb", +".Y c #ccf8f1", +"#J c #cdcdcd", +".R c #cecece", +"#p c #d1f9f4", +"#4 c #d5d5d5", +"#w c #d5ece4", +".9 c #d5f6f5", +"#0 c #d6d6d6", +".U c #d7d7d7", +"af c #d8d8d8", +".x c #dadada", +".y c #dbdbdb", +".w c #dcdcdc", +"#e c #dcf7f4", +"#1 c #dddddd", +"ae c #dedede", +".E c #dfdfdf", +".z c #e0e0e0", +"#g c #e0ebe4", +"#q c #e1edea", +"#d c #e2e2e2", +"#x c #e2ebe2", +".0 c #e2eee5", +".v c #e3e3e3", +"## c #e3e7d5", +"#r c #e4ebd9", +"#E c #e4f2ec", +".u c #e5e5e5", +".S c #e7e7e7", +".k c #e9e9e9", +".A c #ebebeb", +".D c #ededed", +".t c #f0f0f0", +"#T c #f4f4f4", +".n c #f6f6f6", +".C c #f7f7f7", +"#f c #f8f5f2", +".m c #f8f8f8", +".7 c #f9f9f9", +"ad c #fafafa", +"#. c #fbf0eb", +".J c #fbfbfb", +".T c #fcfcfc", +".B c #fdfdfd", +".j c #fefefe", +".i c #ffffff", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", +"QtQtQtQtQt.#.a.b.c.d.d.e.f.g.hQtQtQtQtQtQtQt", +"QtQtQtQt.#.i.i.i.i.i.i.i.i.i.h.hQtQtQtQtQtQt", +"QtQtQtQt.a.j.j.j.j.j.j.i.i.i.h.k.hQtQtQtQtQt", +"QtQtQtQt.l.m.n.o.p.q.r.s.j.i.h.t.u.hQtQtQtQt", +"QtQtQtQt.e.v.w.x.y.z.A.n.B.B.h.C.D.E.hQtQtQt", +"QtQtQt.h.h.h.h.h.F.G.H.I.n.J.h.h.h.h.h.hQtQt", +"QtQt.h.K.L.M.N.O.h.P.Q.R.S.n.T.j.U.V.W.hQtQt", +"Qt.h.X.Y.Z.0.1.2.3.h.4.5.6.q.r.s.7.v.8.hQtQt", +"Qt.h.9#..###.F.F.F#a.h#b#c#d.m.j.7.v#c.hQtQt", +"Qt.h#e#f.a#g#h#i#j#k.h#l#m.r#n#o.7.v#c.hQtQt", +"Qt.h#p#q.a#r.F.F.F#s.h#t#u.x.n.j.7.v#c.hQtQt", +"Qt.h#v#w.##x#y#z#A#B.h#C#m#m.q#o.7.v#c.hQtQt", +"QtQt.h#D.Z#E.F.F#F.h#G#H#I#J.A.7.m.v#c.hQtQt", +"QtQtQt.h#K#L#M#N.h#O#P#Q#R#m.q#S#T#d#c.hQtQt", +"QtQtQtQt.h.h.h.h.Z#U#V#W#X#Y#Z#0.S#1#2.hQtQt", +"QtQtQtQt#3.t.v.x#4#5#6#7#8#9a.a#aaabac.hQtQt", +"QtQtQtQt.6ad.kae.yafagahaiajakalamana..oQtQt", +"QtQtQtQt.haeaoapaqaqarasatauavawaxayaz.oQtQt", +"QtQtQtQtQt.h.h.h.h.haA.oaBaCaiaD.HaEaFQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtaGaHaIQtQtQtQtQtQt", +"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt" +] + +class MainWindow(QMainWindow): + def __init__(self,parent = None,name = None,fl = 0): + QMainWindow.__init__(self,parent,name,fl) + self.statusBar() + + self.image0 = QPixmap(image0_data) + self.image1 = QPixmap(image1_data) + self.image2 = QPixmap(image2_data) + self.image3 = QPixmap(image3_data) + self.image4 = QPixmap(image4_data) + self.image5 = QPixmap(image5_data) + self.image6 = QPixmap(image6_data) + + if not name: + self.setName("MainWindow") + + + self.setCentralWidget(QWidget(self,"qt_central_widget")) + MainWindowLayout = QHBoxLayout(self.centralWidget(),0,6,"MainWindowLayout") + + self.Frame3 = QFrame(self.centralWidget(),"Frame3") + self.Frame3.setFrameShape(QFrame.StyledPanel) + self.Frame3.setFrameShadow(QFrame.Sunken) + Frame3Layout = QVBoxLayout(self.Frame3,1,0,"Frame3Layout") + + self.WebBrowser = QAxWidget(self.Frame3,"WebBrowser") + self.WebBrowser.setControl("{8856F961-340A-11D0-A96B-00C04FD705A2}") + self.WebBrowser.setFocusPolicy(QAxWidget.StrongFocus) + Frame3Layout.addWidget(self.WebBrowser) + MainWindowLayout.addWidget(self.Frame3) + + self.actionGo = QAction(self,"actionGo") + self.actionGo.setIconSet(QIconSet(self.image0)) + self.actionBack = QAction(self,"actionBack") + self.actionBack.setIconSet(QIconSet(self.image1)) + self.actionForward = QAction(self,"actionForward") + self.actionForward.setIconSet(QIconSet(self.image2)) + self.actionStop = QAction(self,"actionStop") + self.actionStop.setIconSet(QIconSet(self.image3)) + self.actionRefresh = QAction(self,"actionRefresh") + self.actionRefresh.setIconSet(QIconSet(self.image4)) + self.actionHome = QAction(self,"actionHome") + self.actionHome.setIconSet(QIconSet(self.image5)) + self.actionFileClose = QAction(self,"actionFileClose") + self.FileNewGroup = QActionGroup(self,"FileNewGroup") + self.FileNewGroup.setUsesDropDown(1) + self.actionNewWindow = QAction(self.FileNewGroup,"actionNewWindow") + self.actionSearch = QAction(self,"actionSearch") + self.actionSearch.setIconSet(QIconSet(self.image6)) + self.actionAbout = QAction(self,"actionAbout") + self.actionAboutQt = QAction(self,"actionAboutQt") + + + self.Toolbar = QToolBar(QString(""),self,Qt.DockTop) + + self.actionBack.addTo(self.Toolbar) + self.actionForward.addTo(self.Toolbar) + self.actionStop.addTo(self.Toolbar) + self.actionRefresh.addTo(self.Toolbar) + self.actionHome.addTo(self.Toolbar) + self.Toolbar.addSeparator() + self.actionSearch.addTo(self.Toolbar) + self.Toolbar_2 = QToolBar(QString(""),self,Qt.DockTop) + + self.Toolbar_2.setHorizontallyStretchable(1) + + self.lblAddress = QLabel(self.Toolbar_2,"lblAddress") + + self.addressEdit = QLineEdit(self.Toolbar_2,"addressEdit") + self.actionGo.addTo(self.Toolbar_2) + + + self.menubar = QMenuBar(self,"menubar") + + + self.PopupMenu = QPopupMenu(self) + self.FileNewGroup_2 = QPopupMenu(self) + self.PopupMenu.setAccel(QString.null,self.PopupMenu.insertItem(self.FileNewGroup.iconSet(),self.__tr("New"),self.FileNewGroup_2)) + self.actionNewWindow.addTo(self.FileNewGroup_2) + self.PopupMenu.insertSeparator() + self.actionFileClose.addTo(self.PopupMenu) + self.menubar.insertItem(QString(""),self.PopupMenu,1) + + self.unnamed = QPopupMenu(self) + self.actionAbout.addTo(self.unnamed) + self.actionAboutQt.addTo(self.unnamed) + self.menubar.insertItem(QString(""),self.unnamed,2) + + + self.languageChange() + + self.resize(QSize(812,605).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.actionHome,SIGNAL("activated()"),self.WebBrowser,SLOT("GoHome()")) + self.connect(self.actionRefresh,SIGNAL("activated()"),self.WebBrowser,SLOT("Refresh()")) + self.connect(self.actionStop,SIGNAL("activated()"),self.WebBrowser,SLOT("Stop()")) + self.connect(self.actionForward,SIGNAL("activated()"),self.WebBrowser,SLOT("GoForward()")) + self.connect(self.actionBack,SIGNAL("activated()"),self.WebBrowser,SLOT("GoBack()")) + self.connect(self.actionGo,SIGNAL("activated()"),self.go) + self.connect(self.actionFileClose,SIGNAL("activated()"),self.close) + self.connect(self.actionSearch,SIGNAL("activated()"),self.WebBrowser,SLOT("GoSearch()")) + self.connect(self.addressEdit,SIGNAL("returnPressed()"),self.go) + self.connect(self.WebBrowser,SIGNAL("NavigateComplete(const QString&)"),self.addressEdit.setText) + self.connect(self.WebBrowser,SIGNAL("TitleChange(const QString&)"),self.setTitle) + self.connect(self.WebBrowser,SIGNAL("NavigateComplete(const QString&)"),self.navigateComplete) + self.connect(self.WebBrowser,SIGNAL("CommandStateChange(int,bool)"),self.setCommandState) + self.connect(self.WebBrowser,SIGNAL("BeforeNavigate(const QString&,int,const QString&,const QVariant&,const QString&,bool&)"),self.navigateBegin) + self.connect(self.actionStop,SIGNAL("activated()"),self.navigateComplete) + self.connect(self.actionNewWindow,SIGNAL("activated()"),self.newWindow) + self.connect(self.actionAbout,SIGNAL("activated()"),self.aboutSlot) + self.connect(self.actionAboutQt,SIGNAL("activated()"),self.aboutQtSlot) + + self.init() + + + def languageChange(self): + self.setCaption(self.__tr("Qt WebBrowser")) + self.WebBrowser.setControl(self.__tr("{8856F961-340A-11D0-A96B-00C04FD705A2}")) + self.actionGo.setText(self.__tr("Go")) + self.actionGo.setMenuText(self.__tr("Go")) + self.actionBack.setText(self.__tr("Back")) + self.actionBack.setAccel(self.__tr("Backspace")) + self.actionBack.setMenuText(self.__tr("Back")) + self.actionForward.setText(self.__tr("Forward")) + self.actionForward.setMenuText(self.__tr("Forward")) + self.actionStop.setText(self.__tr("Stop")) + self.actionStop.setMenuText(self.__tr("Stop")) + self.actionRefresh.setText(self.__tr("Refresh")) + self.actionRefresh.setMenuText(self.__tr("Refresh")) + self.actionHome.setText(self.__tr("Home")) + self.actionHome.setMenuText(self.__tr("Home")) + self.actionFileClose.setText(self.__tr("Close")) + self.actionFileClose.setMenuText(self.__tr("C&lose")) + self.FileNewGroup.setText(self.__tr("New")) + self.actionNewWindow.setText(self.__tr("Window")) + self.actionNewWindow.setAccel(self.__tr("Ctrl+N")) + self.actionNewWindow.setMenuText(self.__tr("Window")) + self.FileNewGroup.setMenuText(self.__tr("New")) + self.actionSearch.setText(self.__tr("Search")) + self.actionSearch.setMenuText(self.__tr("Search")) + self.actionAbout.setText(self.__tr("About")) + self.actionAbout.setMenuText(self.__tr("About")) + self.actionAboutQt.setText(self.__tr("About Qt")) + self.actionAboutQt.setMenuText(self.__tr("About Qt")) + self.Toolbar.setLabel(self.__tr("Toolbar")) + self.Toolbar_2.setLabel(self.__tr("Toolbar_2")) + self.lblAddress.setText(self.__tr("Address")) + self.PopupMenu.changeItem(self.PopupMenu.idAt(0),self.__tr("New")) + if self.menubar.findItem(1): + self.menubar.findItem(1).setText(self.__tr("&File")) + if self.menubar.findItem(2): + self.menubar.findItem(2).setText(self.__tr("&Help")) + + + def go(self): + print "MainWindow.go(): Not implemented yet" + + def newWindow(self): + print "MainWindow.newWindow(): Not implemented yet" + + def setProgress(self,a0,a1): + print "MainWindow.setProgress(int,int): Not implemented yet" + + def init(self): + pass + + def setTitle(self,a0): + print "MainWindow.setTitle(const QString&): Not implemented yet" + + def setCommandState(self,a0,a1): + print "MainWindow.setCommandState(int,bool): Not implemented yet" + + def navigateComplete(self): + print "MainWindow.navigateComplete(): Not implemented yet" + + def navigateBegin(self): + print "MainWindow.navigateBegin(): Not implemented yet" + + def aboutSlot(self): + print "MainWindow.aboutSlot(): Not implemented yet" + + def aboutQtSlot(self): + print "MainWindow.aboutQtSlot(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("MainWindow",s,c) diff --git a/examples3/webbrowser/mainwindow.ui b/examples3/webbrowser/mainwindow.ui new file mode 100644 index 0000000..1689e8a --- /dev/null +++ b/examples3/webbrowser/mainwindow.ui @@ -0,0 +1,410 @@ + +MainWindow + + + MainWindow + + + + 0 + 0 + 812 + 605 + + + + Qt WebBrowser + + + + unnamed + + + 0 + + + 6 + + + + Frame3 + + + StyledPanel + + + Sunken + + + + unnamed + + + 1 + + + 0 + + + + WebBrowser + + + StrongFocus + + + {8856F961-340A-11D0-A96B-00C04FD705A2} + + + + + + + + + menubar + + + + + + + + + + + + + + + + + + Toolbar + + + Toolbar + + + + + + + + + + + + Toolbar_2 + + + true + + + Toolbar_2 + + + + lblAddress + + + Address + + + + + addressEdit + + + + + + + + + + + actionGo + + + image0 + + + Go + + + + + actionBack + + + image1 + + + Back + + + Backspace + + + + + actionForward + + + image2 + + + Forward + + + + + actionStop + + + image3 + + + Stop + + + + + actionRefresh + + + image4 + + + Refresh + + + + + actionHome + + + image5 + + + Home + + + + + actionFileClose + + + Close + + + C&lose + + + + + FileNewGroup + + + New + + + true + + + + actionNewWindow + + + Window + + + Ctrl+N + + + + + + actionSearch + + + image6 + + + Search + + + + + actionAbout + + + About + + + + + actionAboutQt + + + About Qt + + + + + + 789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade65232365200210543251d2e253d856405bffcbc54103b11c8563600020b03105719c4b530b08072f50880513560a09c080338d5209420294a4451a38c90426621ab5146d10de524a2aa417505445122861a547722bb0c971a3d2aa921c2ae446c6a9431fc85a9064551220e354009653dec00294e712a1ac4e97078a9a9b5e6020013b3f563 + + + 789ce596497332470c86effe15947573a5f4c1cc30cc542a07ef60bc808dd7540e3d9b6df006186c93ca7f8fba2535ce57be98dc9292313c487a2575f7ccf063a376d53baa6dfc589bbe9ad7fbbc96df99496da3983d3e7efcfec76f7faead87418dfe1a51500bd67f595befbfd6f2daf1f35369014e08a05e6fd4ab96e31e73d0282bc7a7cae23ff3ccfe8170ca6cee9843f51f3b4ec8cff9efccdebf2d2cf9b06bb9417a25c74f98bdff99390a84fb8e49af70f39891b2e40bfbf8b6b0917e87968346a8f5a6cc51c07ab02f2cf1983237552f709c86691e3bbd5be5821998a32067bd1765d13f67563d530a4b3df8b01c523d8ec74059faed086bfc82390e851b8ed3c86485e34365a9bfc5ece3df8433e10bcb5140f5dd3cf0e099f32f99e350cecb5858f2b1c1dc52fda663d334a277c0ecfd5d61c9373973120967969b548fd71b079e797d8e985b21eb63aecceb85e7c299f4ffaa2ce7739359ebc195631387c6ad1f5e302791ccbba72cf173e15cfa2d2cc7619cf1fa63c9dccaa4ff4bcfdc7fa82cfdf7999348f6bf299c4bfd4c59ea0f99535dafca71d60a65ffebca52ff8c3989e47cce98351fb785759e7bcbad65bf0be624ca9a8e87caac0fb1702ef191b2cc9731a7b9ec4f87d934659e27e142f8c671e6eb9d0ae7b2be07cc6924ccf999698a7e4f58f572e64cebb9f393444994e68e4365d9ff7be15caef70766ad678cb0f8f18359ebe109b3af27f199fadd794cf254eb196599774758e77d5496f5dd64a67959af122ef87c639b59eb81d34ba97fe3f4215196f3922acbbc28acf527cc792c7a857029ecf63bcded05efb8a52cf3cc9833ed2f66563dac0b8b1ebe3317ea77f73352173db8f6ccf54a66df0f30fb7c777d9bc214d2cf88d9cf73cfece3ddf3296b66da7fe199d7a32b5cc8feef31fbfe8f99bdde96b0faddf3272bac390665b99e90d9e7ef33972de9d73d7ff3d873255c49fc1b73257ee4f8d2eb5d336b3e8e8535ff86d9e7bbf35f2cf51366ef77cfeb6299df62563f3c0a8b1fdcf3d3569778773f756e66f7fcac967e175f797ffff5dfd9ff4103010d6698a35955030b2cb1c25bbcc3fbd5344861882352b8c5077c5c45836678c267ca7fc1314ebeaf81537cc599eb608e6ff88e1f2b682c705314b6486182dbb8f31d0ddca529f644619ff2db641d3cf82a8bfa9d62d7da670d3cc4233c760a63eaa08d2734478fac8f87ffc833788a6738c073bc20ebe3255eb1069d863e5e3b851bacfb7c6b0d0c30c488f24a3a2d4ddaf1986a3d600b13179be280ef597809e876e206000c69d8ec0e590f32c8a18012b7a0825b9799e018eee0de4e0b4318c103ff2ea2985b78c47d28a487ce276b634cca40356d1655801c3bf044af2136e0195ef8b711be4045ab50ff42e16bdbb6463d8e610253fe3d4855ec3ed80abd9f62397ef9c9e6cee835249bc31bbc731ff0010beacbcdbfaca29f2836a3e839fd1f3acb5cb6fd6e13b6605b34766097d6664cdf0d7faad9813dd827df08daf4de812ddaa7061c4017baf43ea6daef70c8fb0247704c932dc897b94e67da09553a811ef4a94a0f4ee10c069435216b630ae7a43b800b7fc6164ea543ea73ea75663b22a50e5cc215ec50956beaf606ead08080147b64c76403d20ebdc6142268528d3655ee3a1db6f88b535ee015b42081d4205ee1f4f335878501ea7644331dc81acecdb7ef63b86b32eae59956cff63237f92af7319c9a82669c989256bd0b6fa6fabe86bbfe0ecdadb9a399ce61b49a86355adfbedd45736756bc27b30afd161a9a9179585de33bf69fd2f8ebd7b5bf014644b906 + + + 789ce5965b4f23471085dff915d6d6db2aaac5e3b92aca037703cbc55c8c21ca43cf8c8d0dd85c6c307694ff9eeaaed3bd68771f968d14298a0a109fabebd4e99a9ef17cfad8e81d1f343e7e5a99cecc6c5435aaa1796a7cac9fc7e3c5ef7ffcf6e7ca8756d4909f661c35a20fbfac7ce8cc1a55e3f07ed2b7409702b4badaccfb996563020f5c7ecbf340b9a31c3591dff7ac7943e002cc8e73cf74acdcc27a8a2d37a5be4e1d9f04567f9fc105f25dcfea9726caad62a07c1158f58f94e3087e868ea57fa5fa0be590bfb11c3525affd4e03ebfa25b8507fbcaa1c47ca66e459fdf10c6c30af4dcfda8f5f9513dfffce71e1f5a956967adddfaeb25f4f7b60e8d199e596f42f6bc787ca213f554e5be06dc7a28ffdee282791cedb5c83d19fd795a55ecf4b3fb0ee07ebd312fae796e3283665e238524e2265de031bcc774d396d61be25b8c4fe1f02abfeab67f49f2867decfbd6393b6a03f03438f3bca19fa51cb33fc6f80fd7eae2c27e257e7cb4de5b4045f78d679f24960ddcfb172e6f73357ce63e88fc115ce43e558fcabbeb905fb7e47cae24ff5daca41af007bbd81e5b425f53aff6160d52f95f318f37d01a39ee7ca05f4790a469e0e1c97590bfa1b81f53c3e2bfbf5ecf697b532efe754398f31af437085eb65948b18e723f70cbf9e2bcc633db0f65b533609fcbafb372bf318fdcfc015e65b281731ee0ff6acf70767ca5e8f7be01abcab5cfa7e89e53cce2ba3fd1681b5df8172013f44e00acfbf4a39e8ef287b7dbe02234feefce795d727a36c12ccf75239d4b7c1bede9def42fcc0ef7960d5cbc05ebf543635aed752b94aa1ff02ee83ddf3b6a87c3d3f2b9b047a4fcaa17e0cf6f5eef928ab13f5476960d5eb7ac6f5dd07d7e04839e83d29d7be9ffbfe31b50dc723cfa87f08acf947e51a7ad457ee6760773ecaa4f47e36036bfd96673c3fb6c13578a01cf41f9505d5af3b2f655dc28fa93da33e550ef523e5e06f08861eb9e7b94cdfe7ddf753d50feb6f94437e00f67edcf3aa4e831ed8afe73bb05fefe655f7c37edcfd62bb81ddfb82935776cfeb41c87766ff2cfe7f1a4c6cb8e48ae91f68d4dce7015ff390473fad71c3b77cc7639ef03d3ffcb48f013ff293a84c79c6d54f693c8bc28b28589539bff2e2ed647e586389184bacf13a6ff0e6d71a32f92dde96bfdf9dbccc6387dba2d086caae4c668ff7bf68f0673ee0433ee263eef0099ff2199f8b62d0e32e5f704fea2fe5b70d3f57729556b91b349a1c718b634e64faa9fc7fc919e772220a91213254ca273b884bf72b4a54f1846ad925e93b1af56940d734a4110fe4efb5c40dddda907311734c7752d10b3a1ae289c634a17b7dafe331e995b3b124fbdfd25d85471763596fab7aa2a4f53d444653ded3773bb96e8faeae1de2ea8dff9da0b0ebfcd858e3357aa667bb1f68b4a5e7d256853559e8f56d64aefe85e6f44a0b5aea3bac5c2bebf74b8775fb6bfbb858771e7a6f1df09c36f89a36698bb6f53d5c4ef08ee4e6a2dd269b9d488729ed4a171b7bd40ece3228cce5d305edd3673ed7773139bd133a14d5233a96cff7a9237142a77446e7125dba900e70681564f5a6acdc1285ae9e0feaf150d675e8d2d59dd315ad52931fec2973d1a5489c6698e29c5a508829797bd629a52665bcf9fdd32ed95c1d50217b5c18b67390f34befb8e78873a9b6b39ad285216328a2de3bef5b32a59db5ccec42a6b565aaf7dffba6e663d3972b211ea86b065f3cbccbc7b53890399a21a55f677f5863e4f670c337df667f58e3d6dc99dbef3dd5ff6bdf73ff82c65fbfaefc0d4fb5b868 + + + 789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade65232325500210543251d2e25658564056503300071f540dc3430007371012a492a830156496538c094848922c9c2259134c099304914e3604c8424aa5e6449b0044216ca824ba2da8b4512218b4d122e8b55520fee5974072164511da487ea490c7f22cba249e20d3efc018f3fcae0d2702eb5d2106992b5d65c00b9a48974 + + + 789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade65232365200210543251d2e253d856405bffcbc54105b19c8563600020b03103711c4b530b08072f50880513524ab518681443435ca984ae08ae06a94114a10ac443435ca3043904d4c4453a38ca604ae11590d9a0ab80bd0d46078914c35c4d885a608871a547f61f81d5d117a1862018930e5b8d5c0950c741a1b1e6a6aadb90086a9d853 + + + 789ca5985973db480ec7dff3295cc15b6a0b2351a428d6d63ef83e255bbe647b6a1fd02465dd872d9f53f3dd076c005dc926ce6a32eed8553f37fadf7fa0c1a69cdfbe6cdc9cb537befcf6e97145ab61be910fe861e34bf1349dbefdfedffffcf1e97323dae07f51bdbe117dfed7a7cfddd546bed199cfca0ae888016afeab62e8796ef110ee545caf05be16ae5bfc6ee096e7b6e756983f51b6f53b81257ecfb8eee7e9b162f66af1c78125fe48987f23f3fb81657e691cd5bddecc7316d555efd058f7eb2867aa771058f4de8c55cffb6dd4a34cf5b68d357e681c6515634db81a7e3ef59c35cccf5560bf9ef6953389c77660af074f15c751e05c38a6d81f2ef9f3a848f4e9d658f2c36b635dbfa54cc2383556bd33e12492fc70df38f1f3f8ae4cc2745a711285fda7caa4f95e06967a2d8c63f27a8fc2a60fa4acfa980a371b898f0767dc6cf8fdbc9f84c27e4de124d2fabe186b3dee8c75ff1365dbef2db0ccef0987fd2f2a6632fd576552fd2b63d57b08ecd7d39d70b321fd0560acfb6d1a4b7e3050764de7d79f08a70de937ea7b7689e68f4de1e0776e2c7ab8abecb47eb170aa7ee822b0e89f1b4b7fd24dc529abe9794f02cbf99e2b3badc7a5b1ee97089b3e0e8d253f3c364e253e5576120ff7c63a9f7966d2e771d358e75bca4ef3bb0e2cf9758db5fe47c6b21eeb81bd3f07c2ad58ebd130d67e6a194b3cf97e62b2fa24c67a1f5d2aab3f8781a53e17c6eaa7082cfa3de156acf9d5034b7e3563f1eb96c6eaf7c0b815fbf8d2739e3aedefb1b1de9723618b77a49cebf946c6e20f5f8d251e753e8b5bb9e74c980a4afc7a7fbf66b1ed8fb7c67a9ec7c2ad5cfd74038bdfa6b1f6cbd458fd2e84b358efbb0363f5b71358fccd8c33596f9c4bfddcc458fac78d8cf5797b3296f5f82c4c49e6f5c9bf9fb23ce41307967e3935d6f36c0b67b1ce3f188b5f3757367f5363b98fdc38b0cc0f8cf5f90bf3ea97028bfe50981289777d63edcf81b1c4439897f3c52d615738cfe0df371c1deb7db265acf98d8d253f7a50d67a60c758cfcbf4cc7f2fb0f8bf1736bfae30d6f35f1a4b3ce6c6e2df95ca85f6f7dc58f3db0e5c783e14e6ebc533e87e963fbe0873f9fd3cc97c91693fd028b0d4e3c558f3eb0b9b5f972bab3fe78c353f3056bfabc0e2371636bfe4cf9b29d1e76b69acfdb863accfd33cb0dc2fa7c6e2179e03cb79ae940b7dffbf1b6bfd1363f53b12367f581a6b3d1bca56df6e60a9bfc6e765def4ecef6bc7eafaf9e8d558fbb7a15ce87d7263acf7ffbdb1e40f33e1e0cf29ebfea8eb6d7ff29f17f8f4137dfe51d8fa0117ca65ee3fbfe3bd705116b2de9f775e3af50313e1a229f1f0682cf1b052e6e1d9dfbf1cddd4fd2363cdcfef5fb05b7d1f0c944bed4f67ac9f5f27c265bf4c3d9f07eefb787f1f96695eaa1e0a174d7d7f81b1ee4f81a5fe75e552d9bf1fca7e617e9e8d556f33b0c4fbcf5ffdb44c956bc6a2d75dfd6c2020fd3ce2ff69a0c31c0b2cff91461fef71804374bfaa81231ce3044b9ce2ecd734380fc2392e70890ff888bfa6f184cff8c24e5ef10ddf71f3a37c3ed6c015afdec26dfeb983bbb887fb78f0f734380fe031c7437f3247788c27d8fe713e1f6a1076f014cfb08be7ac7481977885d75c951fe4f3630dcea3c3eb7b9cc70d6b9ce12d9fee26de610debeb69b0fb578cb89a0d8c399711e794609373d9c39455f2b53466d8c20c17809c45cc7a3c00f011081cffccff379fef35388f1d0428a0c401f459e58c3d45700f0003cee71d8678fc730d7430e2557d3c8331f7568c37308129cc7006733e9d262c6008cb6ff3f94ea3c72bc678ca3f1fb80a637884154c71c974c55d72c91a4feca4fdf553f8ad46554d8e9ee30a9eb1efab31611f2ff0ca346427bb9c11e114debe7e7ebed328318702e7f0ce9dbee47a1c724655b745b0c94ea6b0c55519f059b98f73d19a6cc30eecc21eecfb7100877004c770026de8e070bdfe805338832e9cc3055cc2955f7b0d3de8f0cfebb5356ee016eea0c6a30e11342086049a907aadcd35355a90111250f5e5288706bfdb4bea572a78b49e06ddd3a0d2807a2502110d6944639ad09466ebf9e8ae684e0bf5b1a4075ab28f11ffa1df678dc7f57cb0c68a9ee899355e7c2ddbf40a31bdb1c63bcdfe86c6803669cb9f4555c76b38a76dcee57d5d1f5c8f1d5af0b9745581bb029a5c8f3eedd21eed73b70ebe56fa91061dd061f05139e9d1116b1cfb9aee55c4fcf6330d5cd289d778a6b65fdd831dea702e256b9cf2b974a84367d4fd580347744e17744957acc13e7cfc095d538f356ed8cd2ddd518dea147da4c1956890ffcf295ed5e4c83b4a59f182b9455935e3b801ab791c7fa4e188d7a4bcbee66353feaef9df8852ca2f3e9ee3ef73840f359cabfec22979f4ddbd1bf018ba118f318f899bf298b9b95bb8e537cffe9ffffef4171c39a0bf + + + 789c8d96c9521c490c86ef3c458775734cc8ddd5b5c6c41c303b180cc60b66620eaacc2c9aa5599b7562de7da45fc5180c8e98fa39f091522e4a49c9bbb783bdedcdc1db77735733991d864198c8e5e06dbc9e4eeffffceb8fbfe7de64d9407f466531c8defc36f76667360883adb3d364c013051ae2039f8147266359068f4dc6740a2e4db05f05d726f0253898c017c6a3cc04ffafce79aa3af0143c36c17e055caa0aacbf06aeb2203e5f09ae4d185f75ce472de6e7737063c2fcb57356b702fed673e32c473d4bcf3760198f02e69325706b022f3a676df0f567e05035d1ed273dc79883e7c1d1045e70ae2456d84fd9738a589f0b703261bc72ae25e17ee4b0e7d8f3b5733374e603e32c37c11ff36970db12f193f7e07c1c6bec87c6e0c604ff0e1c4db03f36cec7e3a6f4fd2e38e779eee7bd05e7e350fa7e4fc0455ee6b84fb9eab913bfdf1c5ce5758efba54fffb1e75302d726f8af3817a5f8f922584cf06fc0211f951ebfd0b30afe07ce4510dfdf1e38e665e9f9f1e01c32cf1fda06a73c2f7c7eac5f8c8b61eef582f315b909dc82f1c17e07dc1459e5f1c77d953abb787e0ab832611cf957366dd9c707f556762a3fcf8673ddd6d8afdc1957b909fe98af2a65d4c787c08d09e3c8bfaad504f378de83a309e35fc049d9d747bda19c7dbe8f602d88d6fd11af3a33c1ffde398e02ec69178c0b04bb7fa12be03e08e7ab4b895e2f74ec1ca2e73f6d811b2d37df1feaa9969082f71ff4a73a98c01f9cdb3678fde27eea58f7f9cdc8bfba33c11efda2199ac01bcead048fd72678a4e9e3f6a86f6d172acc87fc69f290f9386f3d72f478a1bf348509fea8b7a66c9b80fec1a8b7a66a53f47cc2fe9b5ae77346fe35ad09e761703081d12f9b68c2fc57ce6d0c1e6fe463934ce0efc63234c11ffd5b4a13c66f9cb53d79fded832bcd27f47f5aeb59055e744eb1df3fe2251aeee4e7453f9264c27aa847b44f7f4f909fda3efb7ae30c5c84b65f1fef435b9a608ff7a4ad4c981ffb6b6b13d8fda5edfb37eff4dcb65e2f787f5a7cb0f7fd0413ecf13eb49d09f6783ff07cf97d8ec0a3f8d8df516f483faf07c45b1f27e9f30ff989e9fdbe11ff1034fd3c9eebe068c238fa9f6677f2fb27ac1f475dd3f97da25fc6c204be755673ef3f8db3360c1f1f824b13c651df2877c44fd0df511efe5ea39f44318151cf9a4e2ab0af870d63fee4dc55fdfe109f880ff3fb788a8ff98df733762630fa471aa6febda2839e5b3f0fe1bef4f18bc9fb01fa7dca4ce0bb9e5b671ef69c3cff18f99cc626d853cf551f3fe453ca531bbdde979cbb2c793e207f536102a39fa5ca0446bf4279f97b89feaabb5181511f38bedf2ffa47373461bdcfe0dc8471d46387860fc6fbaad155c11ef7a5d953747ede69cf2a30fe3fd06c5121fe88572726f8a37f68720ffbfdadf7ac02fb7e82098c7e85ebf2fde37dea92098cf7acc367bc33fbff7a6ecfc4c22d078eaac41d1ff0e4d7f66a7df84293e71ecfec858f9ee8d1fef8a9c733fb139ef2299ff1395ff0255fc167c233befee1f1cc3ef10ddff21ddff303cfabe77bd584177891971e3d7ed8db4e7b2df30aaff29a7aac3ff9ebe4a9bdf2067fe04ddee28ffafb36eff027de558fcfbaab2ffc95bf3db5578b3dfecefb3ce411673c56ceb9e0b23f47a5fbac7fb26f889988742f2a129e504b81a246e0c8ec293cb7a7441d0b1dd0840ee9883486744253bea4533a7bd5fe9c2ed4feb29fff4aff32a36b8dd5e92fe6bfa15bddcf1dddd303cd93c6911668aa2b5cbc363f3c16799f9630fbb2d20aadd21aadeb3d547a8617f6f0d8a00fb4495bfadb47daa61dfa84f977e933c597f64f6e6c9fbed057fa467bf49df669c8bb34a2eca53d8d35576ef88e722aa8a48a6a6a448320a20fd36bf3eb7f407c2c89efb5500f6422877224c77222533915e6b397fbd117f54ccee54275295732936bb9915bb9937b797869ff34e7649ecfe4bd2ce81a8bbc2a4bb2fc5a3dfe2c59915559fb75fdfe8f7affe7f7b97f011cdd9635 + + + + + actionHome + activated() + WebBrowser + GoHome() + + + actionRefresh + activated() + WebBrowser + Refresh() + + + actionStop + activated() + WebBrowser + Stop() + + + actionForward + activated() + WebBrowser + GoForward() + + + actionBack + activated() + WebBrowser + GoBack() + + + actionGo + activated() + MainWindow + go() + + + actionFileClose + activated() + MainWindow + close() + + + actionSearch + activated() + WebBrowser + GoSearch() + + + addressEdit + returnPressed() + MainWindow + go() + + + WebBrowser + NavigateComplete(const QString&) + addressEdit + setText(const QString&) + + + WebBrowser + TitleChange(const QString&) + MainWindow + setTitle(const QString&) + + + WebBrowser + NavigateComplete(const QString&) + MainWindow + navigateComplete() + + + WebBrowser + CommandStateChange(int,bool) + MainWindow + setCommandState(int,bool) + + + WebBrowser + BeforeNavigate(const QString&,int,const QString&,const QVariant&,const QString&,bool&) + MainWindow + navigateBegin() + + + actionStop + activated() + MainWindow + navigateComplete() + + + actionNewWindow + activated() + MainWindow + newWindow() + + + actionAbout + activated() + MainWindow + aboutSlot() + + + actionAboutQt + activated() + MainWindow + aboutQtSlot() + + + + class QProgressBar + + + QProgressBar *pb; + + + go() + newWindow() + setProgress( int a, int b ) + init() + setTitle( const QString & title ) + setCommandState( int cmd, bool on ) + navigateComplete() + navigateBegin() + aboutSlot() + aboutQtSlot() + + + + qaxwidget.h + + diff --git a/examples3/webbrowser/webbrowser.py b/examples3/webbrowser/webbrowser.py new file mode 100644 index 0000000..bd1462e --- /dev/null +++ b/examples3/webbrowser/webbrowser.py @@ -0,0 +1,91 @@ +# Copyright (C) 2001-2002 Trolltech AS. All rights reserved. +# Copyright (C) 2004 Riverbank Computing Ltd. All rights reserved. +# +# This file is part of an example program for the ActiveQt integration. +# This example program may be used, distributed and modified without +# limitation. + + +import sys +import qt +import qtaxcontainer + +import mainwindow + + +class MainWindowImpl(mainwindow.MainWindow): + def init(self): + self.pb = qt.QProgressBar(self.statusBar()) + self.pb.setPercentageVisible(False) + self.pb.hide() + self.statusBar().addWidget(self.pb, 0, True) + + self.connect(self.WebBrowser, qt.SIGNAL("ProgressChange(int,int)"), self.setProgress) + self.connect(self.WebBrowser, qt.SIGNAL("StatusTextChange(const QString&)"), self.statusBar(), qt.SLOT("message(const QString&)")) + + self.WebBrowser.dynamicCall("GoHome()"); + + self.subwindows = [] + + def go(self): + self.actionStop.setEnabled(True) + self.WebBrowser.dynamicCall("Navigate(const QString&)", qt.QVariant(self.addressEdit.text())) + + def setTitle(self, title): + self.setCaption("Qt WebBrowser - " + title.latin1()) + + def setProgress(self, a, b): + if a <= 0 or b <= 0: + self.pb.hide() + return + + self.pb.show() + self.pb.setTotalSteps(b) + self.pb.setProgress(a) + + def setCommandState(self, cmd, on): + if cmd == 1: + self.actionForward.setEnabled(on) + elif cmd == 2: + self.actionBack.setEnabled(on) + + def navigateBegin(self): + self.actionStop.setEnabled(True) + + def navigateComplete(self): + self.actionStop.setEnabled(False) + + def newWindow(self): + window = MainWindowImpl() + window.show() + + if self.addressEdit.text().isEmpty(): + return + + window.addressEdit.setText(self.addressEdit.text()) + window.actionStop.setEnabled(True) + window.go() + + self.subwindows += window + + def aboutSlot(self): + qt.QMessageBox.about(self, self.tr("About WebBrowser"), self.tr( +"""This Example has been created using the ActiveQt integration into Qt Designer. +It demonstrates the use of QAxWidget to embed the Internet Explorer ActiveX +control into a Qt application.""")) + + def aboutQtSlot(self): + qt.QMessageBox.aboutQt(self, self.tr("About Qt")) + + +def main(args): + a = qt.QApplication(args) + w = MainWindowImpl() + a.setMainWidget(w) + w.show() + + return a.exec_loop() + + +if __name__ == "__main__": + sys.exit(main(sys.argv)) diff --git a/examples3/widgets.py b/examples3/widgets.py new file mode 100755 index 0000000..470f24e --- /dev/null +++ b/examples3/widgets.py @@ -0,0 +1,500 @@ +#!/usr/bin/env python + + +import sys, string +from qt import * + +# +## Constructs an analog clock widget that uses an internal QTimer. +# +def QMIN( x, y ): + if y > x: + return y + return x + +# +## Constructs an analog clock widget that uses an internal QTimer. +# + +class AnalogClock( QWidget ): + def __init__( self, *args ): + apply( QWidget.__init__, (self,) + args ) + self.time = QTime.currentTime() # get current time + internalTimer = QTimer( self ) # create internal timer + self.connect( internalTimer, SIGNAL("timeout()"), self.timeout ) + internalTimer.start( 5000 ) # emit signal every 5 seconds + +# +## The QTimer::timeout() signal is received by this slot. +# + + def timeout( self ): + new_time = QTime.currentTime() # get the current time + if new_time.minute() != self.time.minute(): # minute has changed + self.update() + +# +## The clock is painted using a 1000x1000 square coordinate system. +# + def paintEvent( self, qe ): # paint clock + if not self.isVisible(): # is is invisible + return + self.time = QTime.currentTime() # save current time + + pts = QPointArray() + paint = QPainter( self ) + paint.setBrush( self.foregroundColor() ) # fill with foreground color + + cp = QPoint( self.rect().center() ) # widget center point + d = QMIN( self.width(), self.height() ) # we want a circular clock + + matrix = QWMatrix() # setup transformation matrix + matrix.translate( cp.x(), cp.y() ) # origin at widget center + matrix.scale( d / 1000.0, d / 1000.0 ) # scale coordinate system + + h_angle = 30 * ( self.time.hour() % 12 - 3 ) + self.time.minute() / 2 + matrix.rotate( h_angle ) # rotate to draw hour hand + paint.setWorldMatrix( matrix ) + pts.setPoints( [ -20,0, 0,-20, 300,0, 0,20 ] ) + paint.drawPolygon( pts ) # draw hour hand + matrix.rotate( -h_angle ) # rotate back to zero + + m_angle = ( self.time.minute() - 15 ) * 6 + matrix.rotate( m_angle ) # rotate to draw minute hand + paint.setWorldMatrix( matrix ) + pts.setPoints( [ -10,0, 0,-10, 400,0, 0,10 ] ) + paint.drawPolygon( pts ) # draw minute hand + matrix.rotate( -m_angle ) # rotate back to zero + + for i in range( 0, 12 ): # draw hour lines + paint.setWorldMatrix( matrix ) + paint.drawLine( 450,0, 500,0 ) + matrix.rotate( 30 ) + + +class DigitalClock( QLCDNumber ): + def __init__( self, *args ): + apply( QLCDNumber.__init__,(self,) + args ) + self.showingColon = 0 + self.setFrameStyle(QFrame.Panel | QFrame.Raised) + self.setLineWidth( 2 ) + self.showTime() + self.normalTimer = self.startTimer( 500 ) + self.showDateTimer = -1 + + def timerEvent( self, e ): + if e.timerId() == self.showDateTimer: + self.stopDate() + else: + if self.showDateTimer == -1: + self.showTime() + + def mousePressEvent( self, e ): + if e.button() == Qt.LeftButton: + self.showDate() + + def showDate( self ): + if self.showDateTimer != -1: + return + d = QDate.currentDate() + self.display('%2d %2d' % (d.month(), d.day())) + self.showDateTimer = self.startTimer(2000) + + def stopDate( self ): + self.killTimer(self.showDateTimer) + self.showDateTimer = -1 + self.showTime() + + def showTime( self ): + self.showingColon = not self.showingColon + s = list(str(QTime.currentTime().toString())[:5]) #.left(5) + if not self.showingColon: + s[2] = ' ' + if s[0] == '0': + s[0] = ' ' + s = string.join(s,'') + self.display( s ) + + def QMIN( x, y ): + if y > x: + return y + return x + +TRUE = 1 +FALSE = 0 +MOVIEFILENAME = "trolltech.gif" + +# +# WidgetView contains lots of Qt widgets. +# + +class WidgetView ( QWidget ): + def __init__( self, *args ): + apply( QWidget.__init__, (self,) + args ) + + # Set the window caption/title + self.setCaption( "Qt Widgets Demo Application" ) + + # Install an application-global event filter + qApp.installEventFilter( self ) + + # Create a layout to position the widgets + self.topLayout = QVBoxLayout( self, 10 ) + + # Create a grid layout to hold most of the widgets + self.grid = QGridLayout( 6, 3 ) + + # This layout will get all of the stretch + self.topLayout.addLayout( self.grid, 10 ) + + # Create a menubar + self.menubar = QMenuBar( self ) + self.menubar.setSeparator( QMenuBar.InWindowsStyle ) + + # Create an easter egg + QToolTip.add( self.menubar, QRect( 0, 0, 2, 2 ), "easter egg" ) + + self.popup = QPopupMenu() + self.id = self.popup.insertItem( "&New" ) + self.popup.setItemEnabled( self.id, FALSE ) + self.id = self.popup.insertItem( "&Open" ) + self.popup.setItemEnabled( self.id, FALSE ) + self.popup.insertSeparator() + self.popup.insertItem( "&Quit", qApp, SLOT("quit()"), Qt.CTRL+Qt.Key_Q ) + + self.menubar.insertItem( "&File", self.popup ) + + # Must tell the layout about a menubar in a widget + self.topLayout.setMenuBar( self.menubar ) + + # Create an analog and a digital clock + self.aclock = AnalogClock( self ) + self.aclock.resize( 50, 50 ) + self.dclock = DigitalClock( self ) + self.dclock.setMaximumWidth( 200 ) + self.grid.addWidget( self.aclock, 0, 2 ) + self.grid.addWidget( self.dclock, 1, 2 ) + + # Give the dclock widget a blue palette + col = QColor() + col.setRgb( 0xaa, 0xbe, 0xff ) + self.dclock.setPalette( QPalette( col ) ) + + # make tool tips for both of them + QToolTip.add( self.aclock, "custom widget: analog clock" ) + QToolTip.add( self.dclock, "custom widget: digital clock" ) + + # Create a push button. + self.pb = QPushButton( self, "button1" ) # create button 1 + self.pb.setText( "Push button 1" ) + self.pb.setFixedHeight( self.pb.sizeHint().height() ) + self.grid.addWidget( self.pb, 0, 0, Qt.AlignVCenter ) + self.connect( self.pb, SIGNAL("clicked()"), self.button1Clicked ) + QToolTip.add( self.pb, "push button 1" ) + self.pm = QPixmap() + self.pix = self.pm.load( "qt.png" ) # load pixmap for button 2 + if not self.pix: + QMessageBox.information( None, "Qt Widgets Example", + "Could not load the file \"qt.png\", which\n" + "contains an icon used...\n\n" + "The text \"line 42\" will be substituted.", + QMessageBox.Ok + QMessageBox.Default ) + + # Create a label containing a QMovie + self.movielabel = QLabel( self, "label0" ) + self.movie = QMovie( MOVIEFILENAME ) + self.movie.connectStatus( self.movieStatus ) + self.movie.connectUpdate( self.movieUpdate ) + self.movielabel.setFrameStyle( QFrame.Box | QFrame.Plain ) + self.movielabel.setMovie( self.movie ) + self.movielabel.setMargin( 0 ) + self.movielabel.setFixedSize( 128 + self.movielabel.frameWidth() * 2, + 64 + self.movielabel.frameWidth() * 2 ) + self.grid.addWidget( self.movielabel, 0, 1, Qt.AlignCenter ) + QToolTip.add( self.movielabel, "movie" ) + + # Create a group of check boxes + self.bg = QButtonGroup( self, "checkGroup" ) + self.bg.setTitle( "Check Boxes" ) + self.grid.addWidget( self.bg, 1, 0 ) + + # Create a layout for the check boxes + self.vbox = QVBoxLayout(self.bg, 10) + + self.vbox.addSpacing( self.bg.fontMetrics().height() ) + + self.cb = range(3) + self.cb[0] = QCheckBox( self.bg ) + self.cb[0].setText( "Read" ) + self.vbox.addWidget( self.cb[0] ) + self.cb[0].setMinimumSize( self.cb[0].sizeHint() ) + self.cb[1] = QCheckBox( self.bg ) + self.cb[1].setText( "Write" ) + self.vbox.addWidget( self.cb[1] ) + self.cb[1].setMinimumSize( self.cb[1].sizeHint() ) + self.cb[2] = QCheckBox( self.bg ) + self.cb[2].setText( "Execute" ) + self.cb[2].setMinimumSize( self.cb[2].sizeHint() ) + self.vbox.addWidget( self.cb[2] ) + self.bg.setMinimumSize( self.bg.childrenRect().size() ) + self.vbox.activate() + + self.connect( self.bg, SIGNAL("clicked(int)"), self.checkBoxClicked ) + + QToolTip.add( self.cb[0], "check box 1" ) + QToolTip.add( self.cb[1], "check box 2" ) + QToolTip.add( self.cb[2], "check box 3" ) + + # Create a group of radio buttons + self.bg = QButtonGroup( self, "radioGroup" ) + self.bg.setTitle( "Radio buttons" ) + + self.grid.addWidget( self.bg, 1, 1 ) + + # Create a layout for the radio buttons + self.vbox = QVBoxLayout( self.bg, 10 ) + + self.vbox.addSpacing( self.bg.fontMetrics().height() ) + self.rb = QRadioButton( self.bg ) + self.rb.setText( "&AM" ) + self.rb.setChecked( TRUE ) + self.vbox.addWidget( self.rb ) + self.rb.setMinimumSize( self.rb.sizeHint() ) + QToolTip.add( self.rb, "radio button 1" ) + self.rb = QRadioButton( self.bg ) + self.rb.setText( "&FM" ) + self.vbox.addWidget( self.rb ) + self.rb.setMinimumSize( self.rb.sizeHint() ) + QToolTip.add( self.rb, "radio button 2" ) + self.rb = QRadioButton( self.bg ) + self.rb.setText( "&Short Wave" ) + self.vbox.addWidget( self.rb ) + self.rb.setMinimumSize( self.rb.sizeHint() ) + self.vbox.activate() + + self.connect( self.bg, SIGNAL("clicked(int)"), self.radioButtonClicked ) + QToolTip.add( self.rb, "radio button 3" ) + + # Create a list box + self.lb = QListBox( self, "listBox" ) + for i in range( 0, 100, 1 ): # fill list box + txt = QString() + txt = "line %d" % i + if i == 42 and self.pix: + self.lb.insertItem( self.pm ) + else: + self.lb.insertItem( txt ) + + self.grid.addMultiCellWidget( self.lb, 2, 4, 0, 0 ) + self.connect( self.lb, SIGNAL("selected(int)"), self.listBoxItemSelected ) + QToolTip.add( self.lb, "list box" ) + + self.vbox = QVBoxLayout( 8 ) + self.grid.addLayout( self.vbox, 2, 1 ) + + # Create a slider + self.sb = QSlider( 0, 300, 1, 100, QSlider.Horizontal, self, "Slider" ) + self.sb.setTickmarks( QSlider.Below ) + self.sb.setTickInterval( 10 ) + self.sb.setFocusPolicy( QWidget.TabFocus ) + self.sb.setFixedHeight( self.sb.sizeHint().height() ) + self.vbox.addWidget( self.sb ) + + self.connect( self.sb, SIGNAL("valueChanged(int)"), self.sliderValueChanged ) + QToolTip.add( self.sb, "slider" ) + + # Create a combo box + self.combo = QComboBox( FALSE, self, "comboBox" ) + self.combo.insertItem( "darkBlue" ) + self.combo.insertItem( "darkRed" ) + self.combo.insertItem( "darkGreen" ) + self.combo.insertItem( "blue" ) + self.combo.insertItem( "red" ) + self.combo.setFixedHeight( self.combo.sizeHint().height() ) + self.vbox.addWidget( self.combo ) + self.connect( self.combo, SIGNAL("activated(int)"), self.comboBoxItemActivated ) + QToolTip.add( self.combo, "read-only combo box" ) + + # Create an editable combo box + self.edCombo = QComboBox( TRUE, self, "edComboBox" ) + self.edCombo.insertItem( "Permutable" ) + self.edCombo.insertItem( "Malleable" ) + self.edCombo.insertItem( "Adaptable" ) + self.edCombo.insertItem( "Alterable" ) + self.edCombo.insertItem( "Inconstant" ) + self.edCombo.setFixedHeight( self.edCombo.sizeHint().height() ) + self.vbox.addWidget( self.edCombo ) + self.connect( self.edCombo, SIGNAL("activated(const QString &)"), self.edComboBoxItemActivated) + QToolTip.add( self.edCombo, "editable combo box" ) + + self.edCombo.setAutoCompletion( TRUE ) + + self.vbox.addStretch( 1 ) + + self.vbox = QVBoxLayout( 8 ) + self.grid.addLayout( self.vbox, 2, 2 ) + + # Create a spin box + self.spin = QSpinBox( 0, 10, 1, self, "spin" ) + self.spin.setSuffix( " mm" ) + self.spin.setSpecialValueText( "Auto" ) + self.spin.setMinimumSize( self.spin.sizeHint() ) + self.connect( self.spin, SIGNAL( "valueChanged(const QString &)" ), self.spinBoxValueChanged ) + QToolTip.add( self.spin, "spin box" ) + self.vbox.addWidget( self.spin ) + + self.vbox.addStretch( 1 ) + + # Create a multi line edit + self.mle = QMultiLineEdit( self, "multiLineEdit" ) + + self.grid.addMultiCellWidget( self.mle, 3, 3, 1, 2 ) + self.mle.setMinimumHeight( self.mle.fontMetrics().height() * 3 ) + self.mle.setText("This is a QMultiLineEdit widget,\n" + "useful for small multi-line\n" + "input fields.") + QToolTip.add( self.mle, "multi line editor" ) + + # Create a single line edit + self.le = QLineEdit( self, "lineEdit" ) + self.grid.addMultiCellWidget( self.le, 4, 4, 1, 2 ) + self.le.setFixedHeight( self.le.sizeHint().height() ) + self.connect( self.le, SIGNAL("textChanged(const QString &)"), self.lineEditTextChanged ) + QToolTip.add( self.le, "single line editor" ) + + # Create a horizontal line (sort of QFrame) above the message line + self.separator = QFrame( self, "separatorLine" ) + self.separator.setFrameStyle( QFrame.HLine | QFrame.Sunken ) + self.separator.setFixedHeight( self.separator.sizeHint().height() ) + self.grid.addMultiCellWidget( self.separator, 5, 5, 0, 2 ) + QToolTip.add( self.separator, "tool tips on a separator! wow!" ) + + self.grid.setRowStretch( 0, 0 ) + self.grid.setRowStretch( 1, 0 ) + self.grid.setRowStretch( 2, 0 ) + self.grid.setRowStretch( 3, 1 ) + self.grid.setRowStretch( 4, 1 ) + self.grid.setRowStretch( 5, 0 ) + + self.grid.setColStretch( 0, 1 ) + self.grid.setColStretch( 1, 1 ) + self.grid.setColStretch( 2, 1 ) + + # Create an label and a message in a plain widget + # The message is updated when buttons are clicked etc. + + self.hbox = QHBoxLayout() + self.topLayout.addLayout( self.hbox ) + self.msgLabel = QLabel( self, "msgLabel" ) + self.msgLabel.setText( "Message:" ) + self.msgLabel.setAlignment( Qt.AlignHCenter | Qt.AlignVCenter ) + self.msgLabel.setFixedSize( self.msgLabel.sizeHint() ) + self.hbox.addWidget( self.msgLabel ) + QToolTip.add( self.msgLabel, "label 1" ) + + self.msg = QLabel( self, "message" ) + self.msg.setFrameStyle( QFrame.Panel | QFrame.Sunken ) + self.msg.setAlignment( Qt.AlignCenter ) + self.msg.setFont( QFont( "times", 12, QFont.Bold ) ) + self.msg.setText( "Message" ) + self.msg.setFixedHeight( self.msg.sizeHint().height() ) + self.msg.setText( "" ) + self.hbox.addWidget( self.msg, 5 ) + QToolTip.add( self.msg, "label 2" ) + + self.topLayout.activate() + + def setStatus(self, text): + self.msg.setText( text ) + + def movieUpdate( self, r ): + # Uncomment this to test animated icons on your window manager + self.setIcon( self.movie.framePixmap() ) + + def movieStatus( self, s ): + if s == QMovie.SourceEmpty or s == QMovie.UnrecognizedFormat: + pm = QPixmap('tt-logo.png') + self.movielabel.setPixmap(pm) + self.movielabel.setFixedSize(pm.size()) + else: + if ( self.movielabel.movie() ): # for flicker-free animation: + self.movielabel.setBackgroundMode( QWidget.NoBackground ) + + def button1Clicked( self ): + self.msg.setText( "The first push button was clicked" ) + + def checkBoxClicked( self, id ): + txt = "Check box %s clicked : " % str(id) + chk = ["-","-","-"] + if self.cb[0].isChecked(): + chk[0] = "r" + if self.cb[1].isChecked(): + chk[1] = "w" + if self.cb[2].isChecked(): + chk[2] = "x" + txt = txt + str(chk[0]+chk[1]+chk[2]) + self.msg.setText( txt ) + + def edComboBoxItemActivated( self, text): + self.msg.setText( "Editable Combo Box set to %s" % text ) + + def radioButtonClicked( self, id ): + self.msg.setText( "Radio button #%d clicked" % id ) + + def listBoxItemSelected( self, index ): + self.msg.setText( "List box item %d selected" % index ) + + def sliderValueChanged( self, value ): + self.msg.setText( "Movie set to %d%% of normal speed" % value ) + self.movie.setSpeed( value ) + + def comboBoxItemActivated( self, index ): + self.msg.setText( "Combo box item %d activated" % index ) + p = QApplication.palette() + if index == 0: + p.setColor( QColorGroup.Highlight, Qt.darkBlue ) + elif index == 1: + p.setColor( QColorGroup.Highlight, Qt.darkRed ) + elif index == 2: + p.setColor( QColorGroup.Highlight, Qt.darkGreen ) + elif index == 3: + p.setColor( QColorGroup.Highlight, Qt.blue ) + elif index == 4: + p.setColor( QColorGroup.Highlight, Qt.red ) + QApplication.setPalette( p, TRUE ) + + def lineEditTextChanged( self, newText ): + self.msg.setText("Line edit text: " + unicode(newText)) + + def spinBoxValueChanged( self, valueText ): + self.msg.setText("Spin box value: " + unicode(valueText)) + + # All application events are passed throught this event filter. + # We're using it to display some information about a clicked + # widget (right mouse button + CTRL). + #def eventFilter( self, event ): + # identify_now = TRUE + # if event.type() == Event_MouseButtonPress and identify_now: + # e = QMouseEvent( event ) + # if (e.button() == Qt.RightButton) and (e.state() & Qt.ControlButton) != 0: + # txt = QString( "The clicked widget is a\n" ) + # txt = txt + QObect.className() + # txt = txt + "\nThe widget's name is\n" + # if QObject.name(): + # txt = txt + QObject.name() + # else: + # txt = txt + "" + # identify_now = FALSE # don't do it in message box + # QMessageBox.message( "Identify Widget", txt, 0, QObject ) + # identify_now = TRUE; # allow it again + # return FALSE # don't eat event + +################################################################################################ + +#QApplication.setColourSpec( QApplication.CustomColor ) +a = QApplication( sys.argv ) + +w = WidgetView() +a.setMainWidget( w ) +w.show() +a.exec_loop() diff --git a/pylupdate3/LICENSE.GPL b/pylupdate3/LICENSE.GPL new file mode 100644 index 0000000..c7aea18 --- /dev/null +++ b/pylupdate3/LICENSE.GPL @@ -0,0 +1,280 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/pylupdate3/fetchtr.cpp b/pylupdate3/fetchtr.cpp new file mode 100644 index 0000000..609dbc1 --- /dev/null +++ b/pylupdate3/fetchtr.cpp @@ -0,0 +1,455 @@ +/********************************************************************** +** Copyright (C) 2002 Detlev Offenbach +** +** This is a modified version of lupdate. The original is part of Qt-Linguist. +** The copyright of the original file can be found below. +** +** This version is modified to handle python sources. +** +** The file is provided AS IS with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. +** +**********************************************************************/ + + +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** fetchtr.cpp +** +** This file is part of Qt Linguist. +** +** See the file LICENSE included in the distribution for the usage +** and distribution terms. +** +** The file is provided AS IS with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +/*#include */ + + +static const char MagicComment[] = "TRANSLATOR "; + +static QMap needs_Q_OBJECT; +static QMap lacks_Q_OBJECT; + +/* + The first part of this source file is the python tokenizer. We skip + most of python; the only tokens that interest us are defined here. +*/ + +enum { Tok_Eof, Tok_class, Tok_return, Tok_tr, + Tok_trUtf8, Tok_translate, Tok_Ident, + Tok_Comment, Tok_Dot, Tok_String, + Tok_LeftParen, Tok_RightParen, + Tok_Comma}; + +/* + The tokenizer maintains the following global variables. The names + should be self-explanatory. +*/ +static QCString yyFileName; +static int yyCh; +static char yyIdent[128]; +static size_t yyIdentLen; +static char yyComment[65536]; +static size_t yyCommentLen; +static char yyString[16384]; +static size_t yyStringLen; +static int yyParenDepth; +static int yyLineNo; +static int yyCurLineNo; + +// the file to read from (if reading from a file) +static FILE *yyInFile; + +// the string to read from and current position in the string (otherwise) +static QString yyInStr; +static int yyInPos; +static int buf; + +static int (*getChar)(); +static int (*peekChar)(); + +static int getCharFromFile() +{ + int c; + + if ( buf < 0 ) + c = getc( yyInFile ); + else { + c = buf; + buf = -1; + } + if ( c == '\n' ) + yyCurLineNo++; + return c; +} + +static int peekCharFromFile() +{ + int c = getc( yyInFile ); + buf = c; + return c; +} + +static void startTokenizer( const char *fileName, int (*getCharFunc)(), + int (*peekCharFunc)() ) +{ + yyInPos = 0; + buf = -1; + getChar = getCharFunc; + peekChar = peekCharFunc; + + yyFileName = fileName; + yyCh = getChar(); + yyParenDepth = 0; + yyCurLineNo = 1; +} + +static int getToken() +{ + const char tab[] = "abfnrtv"; + const char backTab[] = "\a\b\f\n\r\t\v"; + uint n; + + yyIdentLen = 0; + yyCommentLen = 0; + yyStringLen = 0; + + while ( yyCh != EOF ) { + yyLineNo = yyCurLineNo; + + if ( isalpha(yyCh) || yyCh == '_' ) { + do { + if ( yyIdentLen < sizeof(yyIdent) - 1 ) + yyIdent[yyIdentLen++] = (char) yyCh; + yyCh = getChar(); + } while ( isalnum(yyCh) || yyCh == '_' ); + yyIdent[yyIdentLen] = '\0'; + + switch ( yyIdent[0] ) { + case 'Q': + if ( strcmp(yyIdent + 1, "T_TR_NOOP") == 0 ) { + return Tok_tr; + } else if ( strcmp(yyIdent + 1, "T_TRANSLATE_NOOP") == 0 ) { + return Tok_translate; + } + break; + case 'c': + if ( strcmp(yyIdent + 1, "lass") == 0 ) + return Tok_class; + break; + case 'r': + if ( strcmp(yyIdent + 1, "eturn") == 0 ) + return Tok_return; + break; + case 't': + if ( strcmp(yyIdent + 1, "r") == 0 ) + return Tok_tr; + else if ( strcmp(yyIdent + 1, "rUtf8") == 0 ) + return Tok_trUtf8; + else if ( strcmp(yyIdent + 1, "ranslate") == 0 ) + return Tok_translate; + case '_': + if ( strcmp(yyIdent + 1, "_tr") == 0 ) + return Tok_tr; + else if ( strcmp(yyIdent + 1, "_trUtf8") == 0 ) + return Tok_trUtf8; + } + return Tok_Ident; + } else { + switch ( yyCh ) { + case '#': + yyCh = getChar(); + do { + yyCh = getChar(); + } while ( yyCh != EOF && yyCh != '\n' ); + break; + case '"': + case '\'': + int quoteChar; + int trippelQuote, singleQuote; + int in; + + quoteChar = yyCh; + trippelQuote = 0; + singleQuote = 1; + in = 0; + yyCh = getChar(); + + while ( yyCh != EOF ) { + if ( singleQuote && (yyCh == '\n' || (in && yyCh == quoteChar)) ) + break; + + if ( yyCh == quoteChar ) { + if (peekChar() == quoteChar) { + yyCh = getChar(); + if (!trippelQuote) { + trippelQuote = 1; + singleQuote = 0; + in = 1; + yyCh = getChar(); + } else { + yyCh = getChar(); + if (yyCh == quoteChar) { + trippelQuote = 0; + break; + } + } + } else if (trippelQuote) { + if ( yyStringLen < sizeof(yyString) - 1 ) + yyString[yyStringLen++] = (char) yyCh; + yyCh = getChar(); + continue; + } else + break; + } else + in = 1; + + if ( yyCh == '\\' ) { + yyCh = getChar(); + + if ( yyCh == 'x' ) { + QCString hex = "0"; + + yyCh = getChar(); + while ( isxdigit(yyCh) ) { + hex += (char) yyCh; + yyCh = getChar(); + } + sscanf( hex, "%x", &n ); + if ( yyStringLen < sizeof(yyString) - 1 ) + yyString[yyStringLen++] = (char) n; + } else if ( yyCh >= '0' && yyCh < '8' ) { + QCString oct = ""; + + do { + oct += (char) yyCh; + yyCh = getChar(); + } while ( yyCh >= '0' && yyCh < '8' ); + sscanf( oct, "%o", &n ); + if ( yyStringLen < sizeof(yyString) - 1 ) + yyString[yyStringLen++] = (char) n; + } else { + const char *p = strchr( tab, yyCh ); + if ( yyStringLen < sizeof(yyString) - 1 ) + yyString[yyStringLen++] = ( p == 0 ) ? + (char) yyCh : backTab[p - tab]; + yyCh = getChar(); + } + } else { + if ( yyStringLen < sizeof(yyString) - 1 ) + yyString[yyStringLen++] = (char) yyCh; + yyCh = getChar(); + } + } + yyString[yyStringLen] = '\0'; + + if ( yyCh != quoteChar ) { + printf("%c\n", yyCh); + qWarning( "%s:%d: Unterminated string", + (const char *) yyFileName, yyLineNo ); + } + + if ( yyCh == EOF ) { + return Tok_Eof; + } else { + yyCh = getChar(); + return Tok_String; + } + break; + case '(': + yyParenDepth++; + yyCh = getChar(); + return Tok_LeftParen; + case ')': + yyParenDepth--; + yyCh = getChar(); + return Tok_RightParen; + case ',': + yyCh = getChar(); + return Tok_Comma; + case '.': + yyCh = getChar(); + return Tok_Dot; + default: + yyCh = getChar(); + } + } + } + return Tok_Eof; +} + +/* + The second part of this source file is the parser. It accomplishes + a very easy task: It finds all strings inside a tr() or translate() + call, and possibly finds out the context of the call. It supports + three cases: + (1) the context is specified, as in FunnyDialog.tr("Hello") or + translate("FunnyDialog", "Hello"); + (2) the call appears within an inlined function; + (3) the call appears within a function defined outside the class definition. +*/ + +static int yyTok; + +static bool match( int t ) +{ + bool matches = ( yyTok == t ); + if ( matches ) + yyTok = getToken(); + return matches; +} + +static bool matchString( QCString *s ) +{ + bool matches = ( yyTok == Tok_String ); + *s = ""; + while ( yyTok == Tok_String ) { + *s += yyString; + yyTok = getToken(); + } + return matches; +} + +static bool matchEncoding( bool *utf8 ) +{ + if ( yyTok == Tok_Ident ) { + if ( strcmp(yyIdent, "QApplication") == 0 ) { + yyTok = getToken(); + } + *utf8 = QString( yyIdent ).endsWith( QString("UTF8") ); + yyTok = getToken(); + return TRUE; + } else { + return FALSE; + } +} + +static void parse( MetaTranslator *tor, const char *initialContext, + const char *defaultContext ) +{ + QMap qualifiedContexts; + QCString context; + QCString text; + QCString com; + QCString functionContext = initialContext; + QCString prefix; + bool utf8 = FALSE; + + yyTok = getToken(); + while ( yyTok != Tok_Eof ) { + switch ( yyTok ) { + case Tok_class: + yyTok = getToken(); + functionContext = yyIdent; + yyTok = getToken(); + break; + case Tok_tr: + case Tok_trUtf8: + utf8 = ( yyTok == Tok_trUtf8 ); + yyTok = getToken(); + if ( match(Tok_LeftParen) && matchString(&text) ) { + com = ""; + if ( match(Tok_RightParen) || (match(Tok_Comma) && + matchString(&com) && match(Tok_RightParen)) ) { + if ( prefix.isNull() ) { + context = defaultContext; + } else if ( qstrcmp(prefix, "self") == 0 ) { + context = functionContext; + } else { + context = prefix; + } + prefix = (const char *) 0; + + if ( qualifiedContexts.contains(context) ) + context = qualifiedContexts[context]; + tor->insert( MetaTranslatorMessage(context, text, com, + QString::null, utf8) ); + } + } + break; + case Tok_translate: + utf8 = FALSE; + yyTok = getToken(); + if ( match(Tok_LeftParen) && + matchString(&context) && + match(Tok_Comma) && + matchString(&text) ) { + com = ""; + if ( match(Tok_RightParen) || + (match(Tok_Comma) && + matchString(&com) && + (match(Tok_RightParen) || + match(Tok_Comma) && + matchEncoding(&utf8) && + match(Tok_RightParen))) ) + tor->insert( MetaTranslatorMessage(context, text, com, + QString::null, utf8) ); + } + break; + case Tok_Ident: + if ( !prefix.isNull() ) + prefix += "."; + prefix += yyIdent; + yyTok = getToken(); + if ( yyTok != Tok_Dot ) + prefix = (const char *) 0; + break; + case Tok_Comment: + com = yyComment; + com = com.simplifyWhiteSpace(); + if ( com.left(sizeof(MagicComment) - 1) == MagicComment ) { + com.remove( 0, sizeof(MagicComment) - 1 ); + int k = com.find( ' ' ); + if ( k == -1 ) { + context = com; + } else { + context = com.left( k ); + com.remove( 0, k + 1 ); + tor->insert( MetaTranslatorMessage(context, "", com, + QString::null, FALSE) ); + } + } + yyTok = getToken(); + break; + default: + yyTok = getToken(); + } + } + + if ( yyParenDepth != 0 ) + qWarning( "%s: Unbalanced parentheses in Python code", + (const char *) yyFileName ); +} + +void fetchtr_py( const char *fileName, MetaTranslator *tor, + const char *defaultContext, bool mustExist ) +{ + yyInFile = fopen( fileName, "r" ); + if ( yyInFile == 0 ) { + if ( mustExist ) + qWarning( "pylupdate error: cannot open Python source file '%s': %s", + fileName, strerror(errno) ); + return; + } + + startTokenizer( fileName, getCharFromFile, peekCharFromFile ); + parse( tor, 0, defaultContext ); + fclose( yyInFile ); +} diff --git a/pylupdate3/main.cpp b/pylupdate3/main.cpp new file mode 100644 index 0000000..427fed5 --- /dev/null +++ b/pylupdate3/main.cpp @@ -0,0 +1,155 @@ +/********************************************************************** +** Copyright (C) 2002 Detlev Offenbach +** +** This is a modified version of lupdate. The original is part of Qt-Linguist. +** The copyright of the original file can be found below. +** +** This version is modified to handle python sources. +** +** The file is provided AS IS with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. +** +**********************************************************************/ + + +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** main.cpp +** +** This file is part of Qt Linguist. +** +** See the file LICENSE included in the distribution for the usage +** and distribution terms. +** +** The file is provided AS IS with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#include +#include +#include +#include + +#include +#include +#include +#include + +// defined in fetchtr.cpp +extern void fetchtr_py( const char *fileName, MetaTranslator *tor, + const char *defaultContext, bool mustExist ); + +// defined in merge.cpp +extern void merge( MetaTranslator *tor, const MetaTranslator *virginTor, + bool verbose ); + +typedef QValueList TML; + +static void printUsage() +{ + qWarning( "Usage: pylupdate [options] file.pro...\n" + "Options:\n" + " -help Display this information and exits\n" + " -noobsolete\n" + " Drop all obsolete strings\n" + " -verbose\n" + " Explain what is being done\n" + " -version\n" + " Display the version of pylupdate and exits" ); +} + +int main( int argc, char **argv ) +{ + bool verbose = FALSE; + bool noObsolete = FALSE; + bool metSomething = FALSE; + int numProFiles = 0; + + for ( int i = 1; i < argc; i++ ) { + if ( qstrcmp(argv[i], "-help") == 0 ) { + printUsage(); + return 0; + } else if ( qstrcmp(argv[i], "-noobsolete") == 0 ) { + noObsolete = TRUE; + continue; + } else if ( qstrcmp(argv[i], "-verbose") == 0 ) { + verbose = TRUE; + continue; + } else if ( qstrcmp(argv[i], "-version") == 0 ) { + qWarning( "pylupdate version %s", QT_VERSION_STR ); + return 0; + } + + numProFiles++; + QFile f( argv[i] ); + if ( !f.open(IO_ReadOnly) ) { + qWarning( "pylupdate error: Cannot open project file '%s': %s", + argv[i], strerror(errno) ); + return 1; + } + + QTextStream t( &f ); + QString fullText = t.read(); + f.close(); + + MetaTranslator fetchedTor; + QString defaultContext = "@default"; + QCString codec; + QStringList translatorFiles; + QStringList::Iterator tf; + + QMap tagMap = proFileTagMap( fullText ); + QMap::Iterator it; + + for ( it = tagMap.begin(); it != tagMap.end(); ++it ) { + QStringList toks = QStringList::split( QChar(' '), it.data() ); + QStringList::Iterator t; + + for ( t = toks.begin(); t != toks.end(); ++t ) { + if ( it.key() == QString("SOURCES") ) { + fetchtr_py( *t, &fetchedTor, + defaultContext, TRUE ); + metSomething = TRUE; + } else if ( it.key() == QString("TRANSLATIONS") ) { + translatorFiles.append( *t ); + metSomething = TRUE; + } else if ( it.key() == QString("CODEC") ) { + codec = (*t).latin1(); + } + } + } + + for ( tf = translatorFiles.begin(); tf != translatorFiles.end(); ++tf ) { + MetaTranslator tor; + tor.load( *tf ); + if ( !codec.isEmpty() ) + tor.setCodec( codec ); + if ( verbose ) + qWarning( "Updating '%s'...", (*tf).latin1() ); + merge( &tor, &fetchedTor, verbose ); + if ( noObsolete ) + tor.stripObsoleteMessages(); + tor.stripEmptyContexts(); + if ( !tor.save(*tf) ) + qWarning( "pylupdate error: Cannot save '%s': %s", (*tf).latin1(), + strerror(errno) ); + } + if ( !metSomething ) { + qWarning( "pylupdate warning: File '%s' does not look like a project" + " file", argv[i] ); + } else if ( translatorFiles.isEmpty() ) { + qWarning( "pylupdate warning: Met no 'TRANSLATIONS' entry in project" + " file '%s'", argv[i] ); + } + } + + if ( numProFiles == 0 ) { + printUsage(); + return 1; + } + return 0; +} diff --git a/pylupdate3/merge.cpp b/pylupdate3/merge.cpp new file mode 100644 index 0000000..c569c93 --- /dev/null +++ b/pylupdate3/merge.cpp @@ -0,0 +1,110 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** merge.cpp +** +** This file is part of Qt Linguist. +** +** See the file LICENSE included in the distribution for the usage +** and distribution terms. +** +** The file is provided AS IS with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#include + +// defined in numberh.cpp +extern void applyNumberHeuristic( MetaTranslator *tor, bool verbose ); +// defined in sametexth.cpp +extern void applySameTextHeuristic( MetaTranslator *tor, bool verbose ); + +typedef QValueList TML; + +/* + Merges two MetaTranslator objects into the first one. The first one is a set + of source texts and translations for a previous version of the + internationalized program; the second one is a set of fresh source text newly + extracted from the source code, without any translation yet. +*/ + +void merge( MetaTranslator *tor, const MetaTranslator *virginTor, bool verbose ) +{ + int known = 0; + int neww = 0; + int obsoleted = 0; + TML all = tor->messages(); + TML::Iterator it; + + /* + The types of all the messages from the vernacular translator are updated + according to the virgin translator. + */ + for ( it = all.begin(); it != all.end(); ++it ) { + MetaTranslatorMessage::Type newType = MetaTranslatorMessage::Unfinished; + MetaTranslatorMessage m = *it; + + // skip context comment + if ( !QCString((*it).sourceText()).isEmpty() ) { + if ( !virginTor->contains((*it).context(), (*it).sourceText(), + (*it).comment()) ) { + newType = MetaTranslatorMessage::Obsolete; + if ( m.type() != MetaTranslatorMessage::Obsolete ) + obsoleted++; + } else { + switch ( m.type() ) { + case MetaTranslatorMessage::Finished: + newType = MetaTranslatorMessage::Finished; + known++; + break; + case MetaTranslatorMessage::Unfinished: + newType = MetaTranslatorMessage::Unfinished; + known++; + break; + case MetaTranslatorMessage::Obsolete: + newType = MetaTranslatorMessage::Unfinished; + neww++; + } + } + + if ( newType != m.type() ) { + m.setType( newType ); + tor->insert( m ); + } + } + } + + /* + Messages found only in the virgin translator are added to the + vernacular translator. Among these are all the context comments. + */ + all = virginTor->messages(); + + for ( it = all.begin(); it != all.end(); ++it ) { + if ( !tor->contains((*it).context(), (*it).sourceText(), + (*it).comment()) ) { + tor->insert( *it ); + if ( !QCString((*it).sourceText()).isEmpty() ) + neww++; + } + } + + /* + The same-text heuristic handles cases where a message has an + obsolete counterpart with a different context or comment. + */ + applySameTextHeuristic( tor, verbose ); + + /* + The number heuristic handles cases where a message has an + obsolete counterpart with mostly numbers differing in the + source text. + */ + applyNumberHeuristic( tor, verbose ); + + if ( verbose ) + qWarning( " %d known, %d new and %d obsoleted messages", + known, neww, obsoleted ); +} diff --git a/pylupdate3/metatranslator.cpp b/pylupdate3/metatranslator.cpp new file mode 100644 index 0000000..c3d0673 --- /dev/null +++ b/pylupdate3/metatranslator.cpp @@ -0,0 +1,557 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** metatranslator.cpp +** +** This file is part of Qt Linguist. +** +** See the file LICENSE included in the distribution for the usage +** and distribution terms. +** +** The file is provided AS IS with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "metatranslator.h" + +static bool encodingIsUtf8( const QXmlAttributes& atts ) +{ + for ( int i = 0; i < atts.length(); i++ ) { + // utf8="true" is a pre-3.0 syntax + if ( atts.qName(i) == QString("utf8") ) { + return ( atts.value(i) == QString("true") ); + } else if ( atts.qName(i) == QString("encoding") ) { + return ( atts.value(i) == QString("UTF-8") ); + } + } + return FALSE; +} + +class TsHandler : public QXmlDefaultHandler +{ +public: + TsHandler( MetaTranslator *translator ) + : tor( translator ), type( MetaTranslatorMessage::Finished ), + inMessage( FALSE ), ferrorCount( 0 ), contextIsUtf8( FALSE ), + messageIsUtf8( FALSE ) { } + + virtual bool startElement( const QString& namespaceURI, + const QString& localName, const QString& qName, + const QXmlAttributes& atts ); + virtual bool endElement( const QString& namespaceURI, + const QString& localName, const QString& qName ); + virtual bool characters( const QString& ch ); + virtual bool fatalError( const QXmlParseException& exception ); + +private: + MetaTranslator *tor; + MetaTranslatorMessage::Type type; + bool inMessage; + QString context; + QString source; + QString comment; + QString translation; + + QString accum; + int ferrorCount; + bool contextIsUtf8; + bool messageIsUtf8; +}; + +bool TsHandler::startElement( const QString& /* namespaceURI */, + const QString& /* localName */, + const QString& qName, + const QXmlAttributes& atts ) +{ + if ( qName == QString("byte") ) { + for ( int i = 0; i < atts.length(); i++ ) { + if ( atts.qName(i) == QString("value") ) { + QString value = atts.value( i ); + int base = 10; + if ( value.startsWith("x") ) { + base = 16; + value = value.mid( 1 ); + } + int n = value.toUInt( 0, base ); + if ( n != 0 ) + accum += QChar( n ); + } + } + } else { + if ( qName == QString("context") ) { + context.truncate( 0 ); + source.truncate( 0 ); + comment.truncate( 0 ); + translation.truncate( 0 ); + contextIsUtf8 = encodingIsUtf8( atts ); + } else if ( qName == QString("message") ) { + inMessage = TRUE; + type = MetaTranslatorMessage::Finished; + source.truncate( 0 ); + comment.truncate( 0 ); + translation.truncate( 0 ); + messageIsUtf8 = encodingIsUtf8( atts ); + } else if ( qName == QString("translation") ) { + for ( int i = 0; i < atts.length(); i++ ) { + if ( atts.qName(i) == QString("type") ) { + if ( atts.value(i) == QString("unfinished") ) + type = MetaTranslatorMessage::Unfinished; + else if ( atts.value(i) == QString("obsolete") ) + type = MetaTranslatorMessage::Obsolete; + else + type = MetaTranslatorMessage::Finished; + } + } + } + accum.truncate( 0 ); + } + return TRUE; +} + +bool TsHandler::endElement( const QString& /* namespaceURI */, + const QString& /* localName */, + const QString& qName ) +{ + if ( qName == QString("codec") || qName == QString("defaultcodec") ) { + // "codec" is a pre-3.0 syntax + tor->setCodec( accum ); + } else if ( qName == QString("name") ) { + context = accum; + } else if ( qName == QString("source") ) { + source = accum; + } else if ( qName == QString("comment") ) { + if ( inMessage ) { + comment = accum; + } else { + if ( contextIsUtf8 ) + tor->insert( MetaTranslatorMessage(context.utf8(), "", + accum.utf8(), QString::null, TRUE, + MetaTranslatorMessage::Unfinished) ); + else + tor->insert( MetaTranslatorMessage(context.ascii(), "", + accum.ascii(), QString::null, FALSE, + MetaTranslatorMessage::Unfinished) ); + } + } else if ( qName == QString("translation") ) { + translation = accum; + } else if ( qName == QString("message") ) { + if ( messageIsUtf8 ) + tor->insert( MetaTranslatorMessage(context.utf8(), source.utf8(), + comment.utf8(), translation, + TRUE, type) ); + else + tor->insert( MetaTranslatorMessage(context.ascii(), source.ascii(), + comment.ascii(), translation, + FALSE, type) ); + inMessage = FALSE; + } + return TRUE; +} + +bool TsHandler::characters( const QString& ch ) +{ + QString t = ch; + t.replace( QRegExp(QChar('\r')), "" ); + accum += t; + return TRUE; +} + +bool TsHandler::fatalError( const QXmlParseException& exception ) +{ + if ( ferrorCount++ == 0 ) { + QString msg; + msg.sprintf( "Parse error at line %d, column %d (%s).", + exception.lineNumber(), exception.columnNumber(), + exception.message().latin1() ); + if ( qApp == 0 ) + qWarning( "XML error: %s", msg.latin1() ); + else + QMessageBox::information( qApp->mainWidget(), + QObject::tr("Qt Linguist"), msg ); + } + return FALSE; +} + +static QString numericEntity( int ch ) +{ + return QString( ch <= 0x20 ? "" : "&#x%1;" ) + .arg( ch, 0, 16 ); +} + +static QString protect( const QCString& str ) +{ + QString result; + int len = (int) str.length(); + for ( int k = 0; k < len; k++ ) { + switch( str[k] ) { + case '\"': + result += QString( """ ); + break; + case '&': + result += QString( "&" ); + break; + case '>': + result += QString( ">" ); + break; + case '<': + result += QString( "<" ); + break; + case '\'': + result += QString( "'" ); + break; + default: + if ( (uchar) str[k] < 0x20 && str[k] != '\n' ) + result += numericEntity( (uchar) str[k] ); + else + result += str[k]; + } + } + return result; +} + +static QString evilBytes( const QCString& str, bool utf8 ) +{ + if ( utf8 ) { + return protect( str ); + } else { + QString result; + QCString t = protect( str ).latin1(); + int len = (int) t.length(); + for ( int k = 0; k < len; k++ ) { + if ( (uchar) t[k] >= 0x7f ) + result += numericEntity( (uchar) t[k] ); + else + result += QChar( t[k] ); + } + return result; + } +} + +MetaTranslatorMessage::MetaTranslatorMessage() + : utfeight( FALSE ), ty( Unfinished ) +{ +} + +MetaTranslatorMessage::MetaTranslatorMessage( const char *context, + const char *sourceText, + const char *comment, + const QString& translation, + bool utf8, Type type ) + : QTranslatorMessage( context, sourceText, comment, translation ), + utfeight( FALSE ), ty( type ) +{ + /* + Don't use UTF-8 if it makes no difference. UTF-8 should be + reserved for the real problematic case: non-ASCII (possibly + non-Latin-1) characters in .ui files. + */ + if ( utf8 ) { + if ( sourceText != 0 ) { + int i = 0; + while ( sourceText[i] != '\0' ) { + if ( (uchar) sourceText[i] >= 0x80 ) { + utfeight = TRUE; + break; + } + i++; + } + } + if ( !utfeight && comment != 0 ) { + int i = 0; + while ( comment[i] != '\0' ) { + if ( (uchar) comment[i] >= 0x80 ) { + utfeight = TRUE; + break; + } + i++; + } + } + } +} + +MetaTranslatorMessage::MetaTranslatorMessage( const MetaTranslatorMessage& m ) + : QTranslatorMessage( m ), utfeight( m.utfeight ), ty( m.ty ) +{ +} + +MetaTranslatorMessage& MetaTranslatorMessage::operator=( + const MetaTranslatorMessage& m ) +{ + QTranslatorMessage::operator=( m ); + utfeight = m.utfeight; + ty = m.ty; + return *this; +} + +bool MetaTranslatorMessage::operator==( const MetaTranslatorMessage& m ) const +{ + return qstrcmp( context(), m.context() ) == 0 && + qstrcmp( sourceText(), m.sourceText() ) == 0 && + qstrcmp( comment(), m.comment() ) == 0; +} + +bool MetaTranslatorMessage::operator<( const MetaTranslatorMessage& m ) const +{ + int delta = qstrcmp( context(), m.context() ); + if ( delta == 0 ) + delta = qstrcmp( sourceText(), m.sourceText() ); + if ( delta == 0 ) + delta = qstrcmp( comment(), m.comment() ); + return delta < 0; +} + +MetaTranslator::MetaTranslator() + : codecName( "ISO-8859-1" ), codec( 0 ) +{ +} + +MetaTranslator::MetaTranslator( const MetaTranslator& tor ) + : mm( tor.mm ), codecName( tor.codecName ), codec( tor.codec ) +{ + +} + +MetaTranslator& MetaTranslator::operator=( const MetaTranslator& tor ) +{ + mm = tor.mm; + codecName = tor.codecName; + codec = tor.codec; + return *this; +} + +bool MetaTranslator::load( const QString& filename ) +{ + mm.clear(); + + QFile f( filename ); + if ( !f.open(IO_ReadOnly) ) + return FALSE; + + QTextStream t( &f ); + QXmlInputSource in( t ); + QXmlSimpleReader reader; + // don't click on these! + reader.setFeature( "http://xml.org/sax/features/namespaces", FALSE ); + reader.setFeature( "http://xml.org/sax/features/namespace-prefixes", TRUE ); + reader.setFeature( "http://trolltech.com/xml/features/report-whitespace" + "-only-CharData", FALSE ); + QXmlDefaultHandler *hand = new TsHandler( this ); + reader.setContentHandler( hand ); + reader.setErrorHandler( hand ); + + bool ok = reader.parse( in ); + reader.setContentHandler( 0 ); + reader.setErrorHandler( 0 ); + delete hand; + f.close(); + if ( !ok ) + mm.clear(); + return ok; +} + +bool MetaTranslator::save( const QString& filename ) const +{ + QFile f( filename ); + if ( !f.open(IO_WriteOnly) ) + return FALSE; + + QTextStream t( &f ); + t.setCodec( QTextCodec::codecForName("ISO-8859-1") ); + + t << "\n"; + if ( codecName != "ISO-8859-1" ) + t << "" << codecName << "\n"; + TMM::ConstIterator m = mm.begin(); + while ( m != mm.end() ) { + TMMInv inv; + TMMInv::Iterator i; + bool contextIsUtf8 = m.key().utf8(); + QCString context = m.key().context(); + QCString comment = ""; + + do { + if ( QCString(m.key().sourceText()).isEmpty() ) { + if ( m.key().type() != MetaTranslatorMessage::Obsolete ) { + contextIsUtf8 = m.key().utf8(); + comment = QCString( m.key().comment() ); + } + } else { + inv.insert( *m, m.key() ); + } + } while ( ++m != mm.end() && QCString(m.key().context()) == context ); + + t << "\n"; + t << " " << evilBytes( context, contextIsUtf8 ) + << "\n"; + if ( !comment.isEmpty() ) + t << " " << evilBytes( comment, contextIsUtf8 ) + << "\n"; + + for ( i = inv.begin(); i != inv.end(); ++i ) { + t << " \n" + << " " << evilBytes( (*i).sourceText(), + (*i).utf8() ) + << "\n"; + if ( !QCString((*i).comment()).isEmpty() ) + t << " " << evilBytes( (*i).comment(), + (*i).utf8() ) + << "\n"; + t << " " << protect( (*i).translation().utf8() ) + << "\n"; + t << " \n"; + } + t << "\n"; + } + t << "\n"; + f.close(); + return TRUE; +} + +bool MetaTranslator::release( const QString& filename, bool verbose ) const +{ + QTranslator tor( 0 ); + int finished = 0; + int unfinished = 0; + int untranslated = 0; + TMM::ConstIterator m; + + for ( m = mm.begin(); m != mm.end(); ++m ) { + if ( m.key().type() != MetaTranslatorMessage::Obsolete ) { + if ( m.key().translation().isEmpty() ) { + untranslated++; + } else { + if ( m.key().type() == MetaTranslatorMessage::Unfinished ) + unfinished++; + else + finished++; + tor.insert( m.key() ); + } + } + } + + bool saved = tor.save( filename, QTranslator::Stripped ); + if ( saved && verbose ) + qWarning( " %d finished, %d unfinished and %d untranslated messages", + finished, unfinished, untranslated ); + + return saved; +} + +bool MetaTranslator::contains( const char *context, const char *sourceText, + const char *comment ) const +{ + return mm.find( MetaTranslatorMessage(context, sourceText, comment) ) != + mm.end(); +} + +void MetaTranslator::insert( const MetaTranslatorMessage& m ) +{ + int pos = mm.count(); + TMM::Iterator n = mm.find( m ); + if ( n != mm.end() ) + pos = *n; + mm.replace( m, pos ); +} + +void MetaTranslator::stripObsoleteMessages() +{ + TMM newmm; + + TMM::Iterator m = mm.begin(); + while ( m != mm.end() ) { + if ( m.key().type() != MetaTranslatorMessage::Obsolete ) + newmm.insert( m.key(), *m ); + ++m; + } + mm = newmm; +} + +void MetaTranslator::stripEmptyContexts() +{ + TMM newmm; + + TMM::Iterator m = mm.begin(); + while ( m != mm.end() ) { + if ( QCString(m.key().sourceText()).isEmpty() ) { + TMM::Iterator n = m; + ++n; + // the context comment is followed by other messages + if ( n != newmm.end() && + qstrcmp(m.key().context(), n.key().context()) == 0 ) + newmm.insert( m.key(), *m ); + } else { + newmm.insert( m.key(), *m ); + } + ++m; + } + mm = newmm; +} + +void MetaTranslator::setCodec( const char *name ) +{ + const int latin1 = 4; + + codecName = name; + codec = QTextCodec::codecForName( name ); + if ( codec == 0 || codec->mibEnum() == latin1 ) + codec = 0; +} + +QString MetaTranslator::toUnicode( const char *str, bool utf8 ) const +{ + if ( utf8 ) + return QString::fromUtf8( str ); + else if ( codec == 0 ) + return QString( str ); + else + return codec->toUnicode( str ); +} + +QValueList MetaTranslator::messages() const +{ + int n = mm.count(); + TMM::ConstIterator *t = new TMM::ConstIterator[n + 1]; + TMM::ConstIterator m; + for ( m = mm.begin(); m != mm.end(); ++m ) + t[*m] = m; + + QValueList val; + for ( int i = 0; i < n; i++ ) + val.append( t[i].key() ); + + delete[] t; + return val; +} + +QValueList MetaTranslator::translatedMessages() const +{ + QValueList val; + TMM::ConstIterator m; + for ( m = mm.begin(); m != mm.end(); ++m ) { + if ( m.key().type() == MetaTranslatorMessage::Finished ) + val.append( m.key() ); + } + return val; +} diff --git a/pylupdate3/metatranslator.h b/pylupdate3/metatranslator.h new file mode 100644 index 0000000..a071207 --- /dev/null +++ b/pylupdate3/metatranslator.h @@ -0,0 +1,95 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** metatranslator.h +** +** This file is part of Qt Linguist. +** +** See the file LICENSE included in the distribution for the usage +** and distribution terms. +** +** The file is provided AS IS with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#ifndef METATRANSLATOR_H +#define METATRANSLATOR_H + +#include +#include +#include +#include + +class QTextCodec; + +class MetaTranslatorMessage : public QTranslatorMessage +{ +public: + enum Type { Unfinished, Finished, Obsolete }; + + MetaTranslatorMessage(); + MetaTranslatorMessage( const char *context, const char *sourceText, + const char *comment, + const QString& translation = QString::null, + bool utf8 = FALSE, Type type = Unfinished ); + MetaTranslatorMessage( const MetaTranslatorMessage& m ); + + MetaTranslatorMessage& operator=( const MetaTranslatorMessage& m ); + + void setType( Type nt ) { ty = nt; } + Type type() const { return ty; } + bool utf8() const { return utfeight; } + + bool operator==( const MetaTranslatorMessage& m ) const; + bool operator!=( const MetaTranslatorMessage& m ) const + { return !operator==( m ); } + bool operator<( const MetaTranslatorMessage& m ) const; + bool operator<=( const MetaTranslatorMessage& m ) + { return !operator>( m ); } + bool operator>( const MetaTranslatorMessage& m ) const + { return this->operator<( m ); } + bool operator>=( const MetaTranslatorMessage& m ) const + { return !operator<( m ); } + +private: + bool utfeight; + Type ty; +}; + +class MetaTranslator +{ +public: + MetaTranslator(); + MetaTranslator( const MetaTranslator& tor ); + + MetaTranslator& operator=( const MetaTranslator& tor ); + + bool load( const QString& filename ); + bool save( const QString& filename ) const; + bool release( const QString& filename, bool verbose = FALSE ) const; + + bool contains( const char *context, const char *sourceText, + const char *comment ) const; + void insert( const MetaTranslatorMessage& m ); + + void stripObsoleteMessages(); + void stripEmptyContexts(); + + void setCodec( const char *name ); + QString toUnicode( const char *str, bool utf8 ) const; + + QValueList messages() const; + QValueList translatedMessages() const; + +private: + typedef QMap TMM; + typedef QMap TMMInv; + + TMM mm; + QCString codecName; + QTextCodec *codec; +}; + +#endif diff --git a/pylupdate3/numberh.cpp b/pylupdate3/numberh.cpp new file mode 100644 index 0000000..6704803 --- /dev/null +++ b/pylupdate3/numberh.cpp @@ -0,0 +1,230 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** numberh.cpp +** +** This file is part of Qt Linguist. +** +** See the file LICENSE included in the distribution for the usage +** and distribution terms. +** +** The file is provided AS IS with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#include +#include +#include +#include + +#include +#include + +typedef QMap TMM; +typedef QValueList TML; + +static bool isDigitFriendly( int c ) +{ + return ispunct( c ) || isspace( c ); +} + +static int numberLength( const char *s ) +{ + int i = 0; + + if ( isdigit(s[0]) ) { + do { + i++; + } while ( isdigit(s[i]) || + (isDigitFriendly(s[i]) && + (isdigit(s[i + 1]) || + (isDigitFriendly(s[i + 1]) && isdigit(s[i + 2])))) ); + } + return i; +} + +/* + Returns a version of 'key' where all numbers have been replaced by zeroes. If + there were none, returns "". +*/ +static QCString zeroKey( const char *key ) +{ + QCString zeroed( strlen(key) + 1 ); + char *z = zeroed.data(); + int i = 0, j = 0; + int len; + bool metSomething = FALSE; + + while ( key[i] != '\0' ) { + len = numberLength( key + i ); + if ( len > 0 ) { + i += len; + z[j++] = '0'; + metSomething = TRUE; + } else { + z[j++] = key[i++]; + } + } + z[j] = '\0'; + + if ( metSomething ) + return zeroed; + else + return ""; +} + +static QString translationAttempt( const QString& oldTranslation, + const char *oldSource, + const char *newSource ) +{ + int p = zeroKey( oldSource ).contains( '0' ); + int oldSourceLen = qstrlen( oldSource ); + QString attempt; + QStringList oldNumbers; + QStringList newNumbers; + QMemArray met( p ); + QMemArray matchedYet( p ); + int i, j; + int k = 0, ell, best; + int m, n; + int pass; + + /* + This algorithm is hard to follow, so we'll consider an example + all along: oldTranslation is "XeT 3.0", oldSource is "TeX 3.0" + and newSource is "XeT 3.1". + + First, we set up two tables: oldNumbers and newNumbers. In our + example, oldNumber[0] is "3.0" and newNumber[0] is "3.1". + */ + for ( i = 0, j = 0; i < oldSourceLen; i++, j++ ) { + m = numberLength( oldSource + i ); + n = numberLength( newSource + j ); + if ( m > 0 ) { + oldNumbers.append( QCString(oldSource + i, m + 1) ); + newNumbers.append( QCString(newSource + j, n + 1) ); + i += m; + j += n; + met[k] = FALSE; + matchedYet[k] = 0; + k++; + } + } + + /* + We now go over the old translation, "XeT 3.0", one letter at a + time, looking for numbers found in oldNumbers. Whenever such a + number is met, it is replaced with its newNumber equivalent. In + our example, the "3.0" of "XeT 3.0" becomes "3.1". + */ + for ( i = 0; i < (int) oldTranslation.length(); i++ ) { + attempt += oldTranslation[i]; + for ( k = 0; k < p; k++ ) { + if ( oldTranslation[i] == oldNumbers[k][matchedYet[k]] ) + matchedYet[k]++; + else + matchedYet[k] = 0; + } + + /* + Let's find out if the last character ended a match. We make + two passes over the data. In the first pass, we try to + match only numbers that weren't matched yet; if that fails, + the second pass does the trick. This is useful in some + suspicious cases, flagged below. + */ + for ( pass = 0; pass < 2; pass++ ) { + best = p; // an impossible value + for ( k = 0; k < p; k++ ) { + if ( (!met[k] || pass > 0) && + matchedYet[k] == (int) oldNumbers[k].length() && + numberLength(oldTranslation.latin1() + (i + 1) - + matchedYet[k]) == matchedYet[k] ) { + // the longer the better + if ( best == p || matchedYet[k] > matchedYet[best] ) + best = k; + } + } + if ( best != p ) { + attempt.truncate( attempt.length() - matchedYet[best] ); + attempt += newNumbers[best]; + met[best] = TRUE; + for ( k = 0; k < p; k++ ) + matchedYet[k] = 0; + break; + } + } + } + + /* + We flag two kinds of suspicious cases. They are identified as + such with comments such as "{2000?}" at the end. + + Example of the first kind: old source text "TeX 3.0" translated + as "XeT 2.0" is flagged "TeX 2.0 {3.0?}", no matter what the + new text is. + */ + for ( k = 0; k < p; k++ ) { + if ( !met[k] ) + attempt += QString( " {" ) + newNumbers[k] + QString( "?}" ); + } + + /* + Example of the second kind: "1 of 1" translated as "1 af 1", + with new source text "1 of 2", generates "1 af 2 {1 or 2?}" + because it's not clear which of "1 af 2" and "2 af 1" is right. + */ + for ( k = 0; k < p; k++ ) { + for ( ell = 0; ell < p; ell++ ) { + if ( k != ell && oldNumbers[k] == oldNumbers[ell] && + newNumbers[k] < newNumbers[ell] ) + attempt += QString( " {" ) + newNumbers[k] + QString( " or " ) + + newNumbers[ell] + QString( "?}" ); + } + } + return attempt; +} + +/* + Augments a MetaTranslator with translations easily derived from + similar existing (probably obsolete) translations. + + For example, if "TeX 3.0" is translated as "XeT 3.0" and "TeX 3.1" + has no translation, "XeT 3.1" is added to the translator and is + marked Unfinished. +*/ +void applyNumberHeuristic( MetaTranslator *tor, bool verbose ) +{ + TMM translated, untranslated; + TMM::Iterator t, u; + TML all = tor->messages(); + TML::Iterator it; + int inserted = 0; + + for ( it = all.begin(); it != all.end(); ++it ) { + if ( (*it).type() == MetaTranslatorMessage::Unfinished ) { + if ( (*it).translation().isEmpty() ) + untranslated.insert( zeroKey((*it).sourceText()), *it ); + } else if ( !(*it).translation().isEmpty() ) { + translated.insert( zeroKey((*it).sourceText()), *it ); + } + } + + for ( u = untranslated.begin(); u != untranslated.end(); ++u ) { + t = translated.find( u.key() ); + if ( t != translated.end() && !t.key().isEmpty() && + qstrcmp((*t).sourceText(), (*u).sourceText()) != 0 ) { + MetaTranslatorMessage m( *u ); + m.setTranslation( translationAttempt((*t).translation(), + (*t).sourceText(), + (*u).sourceText()) ); + tor->insert( m ); + inserted++; + } + } + if ( verbose && inserted != 0 ) + qWarning( " number heuristic provided %d translation%s", + inserted, inserted == 1 ? "" : "s" ); +} diff --git a/pylupdate3/proparser.cpp b/pylupdate3/proparser.cpp new file mode 100644 index 0000000..f018b4c --- /dev/null +++ b/pylupdate3/proparser.cpp @@ -0,0 +1,78 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** proparser.cpp +** +** This file is part of Qt Linguist. +** +** See the file LICENSE included in the distribution for the usage +** and distribution terms. +** +** The file is provided AS IS with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#include +#include + +#include "proparser.h" + +QMap proFileTagMap( const QString& text ) +{ + QString t = text; + + /* + Strip comments, merge lines ending with backslash, add + spaces around '=' and '+=', replace '\n' with ';', and + simplify white spaces. + */ + t.replace( QRegExp(QString("#[^\n]$")), QString(" ") ); + t.replace( QRegExp(QString("\\\\\\s*\n")), QString(" ") ); + t.replace( QRegExp(QString("=")), QString(" = ") ); + t.replace( QRegExp(QString("\\+ =")), QString(" += ") ); + t.replace( QRegExp(QString("\n")), QString(";") ); + t = t.simplifyWhiteSpace(); + + QMap tagMap; + + QStringList lines = QStringList::split( QChar(';'), t ); + QStringList::Iterator line; + for ( line = lines.begin(); line != lines.end(); ++line ) { + QStringList toks = QStringList::split( QChar(' '), *line ); + + if ( toks.count() >= 3 && + (toks[1] == QString("=") || toks[1] == QString("+=")) ) { + QString tag = toks.first(); + int k = tag.findRev( QChar(':') ); // as in 'unix:' + if ( k != -1 ) + tag = tag.mid( k + 1 ); + toks.remove( toks.begin() ); + + QString action = toks.first(); + toks.remove( toks.begin() ); + + if ( tagMap.contains(tag) ) { + if ( action == QString("=") ) + tagMap.replace( tag, toks.join(QChar(' ')) ); + else + tagMap[tag] += QChar( ' ' ) + toks.join( QChar(' ') ); + } else { + tagMap[tag] = toks.join( QChar(' ') ); + } + } + } + + QRegExp var( "\\$\\$[a-zA-Z0-9_]+" ); + QMap::Iterator it; + for ( it = tagMap.begin(); it != tagMap.end(); ++it ) { + int i = 0; + + while ( (i = var.search(it.data(), i)) != -1 ) { + int len = var.matchedLength(); + (*it).replace( i, len, tagMap[(*it).mid(i + 2, len - 2)] ); + } + } + return tagMap; +} diff --git a/pylupdate3/proparser.h b/pylupdate3/proparser.h new file mode 100644 index 0000000..2a66c8a --- /dev/null +++ b/pylupdate3/proparser.h @@ -0,0 +1,25 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** proparser.h +** +** This file is part of Qt Linguist. +** +** See the file LICENSE included in the distribution for the usage +** and distribution terms. +** +** The file is provided AS IS with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#ifndef PROPARSER_H +#define PROPARSER_H + +#include +#include + +QMap proFileTagMap( const QString& text ); + +#endif diff --git a/pylupdate3/pylupdate-prof.sbf b/pylupdate3/pylupdate-prof.sbf new file mode 100644 index 0000000..7a4c3c4 --- /dev/null +++ b/pylupdate3/pylupdate-prof.sbf @@ -0,0 +1,24 @@ +# This is the build file for pylupdate for Qt v3 Professional Edition. +# +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +target = pylupdate +sources = fetchtr.cpp main.cpp merge.cpp numberh.cpp sametexth.cpp metatranslator.cpp proparser.cpp qxml.cpp +headers = metatranslator.h proparser.h diff --git a/pylupdate3/pylupdate.pro.in b/pylupdate3/pylupdate.pro.in new file mode 100644 index 0000000..c21725c --- /dev/null +++ b/pylupdate3/pylupdate.pro.in @@ -0,0 +1,29 @@ +# Copyright (c) 2002 +# Detlev Offenbach +# +# The project file pylupdate for Qt v3. + + +TEMPLATE = app +CONFIG += qt warn_on console release @PYQT_RBPROF@ +INCLUDEPATH = @BLX_INCLUDEPATH@ +DEFINES = QT_INTERNAL_XML @BLX_DEFINES@ + +DESTDIR = @PYQT_BINDIR@ +TARGET = pylupdate + +HEADERS = metatranslator.h \ + proparser.h + +SOURCES = fetchtr.cpp \ + main.cpp \ + merge.cpp \ + numberh.cpp \ + sametexth.cpp \ + metatranslator.cpp \ + proparser.cpp + +rbprof:exists($(QTDIR)/src/qt_professional.pri) { + QT_SOURCE_TREE = $(QTDIR) + include($(QTDIR)/src/qt_professional.pri) +} diff --git a/pylupdate3/pylupdate.sbf b/pylupdate3/pylupdate.sbf new file mode 100644 index 0000000..ec501ab --- /dev/null +++ b/pylupdate3/pylupdate.sbf @@ -0,0 +1,24 @@ +# This is the build file for pylupdate for Qt v3 Professional Edition. +# +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +target = pylupdate +sources = fetchtr.cpp main.cpp merge.cpp numberh.cpp sametexth.cpp metatranslator.cpp proparser.cpp +headers = metatranslator.h proparser.h diff --git a/pylupdate3/sametexth.cpp b/pylupdate3/sametexth.cpp new file mode 100644 index 0000000..1ee869f --- /dev/null +++ b/pylupdate3/sametexth.cpp @@ -0,0 +1,78 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** sametexth.cpp +** +** This file is part of Qt Linguist. +** +** See the file LICENSE included in the distribution for the usage +** and distribution terms. +** +** The file is provided AS IS with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#include +#include + +#include + +typedef QMap TMM; +typedef QValueList TML; + +/* + Augments a MetaTranslator with trivially derived translations. + + For example, if "Enabled:" is consistendly translated as "Eingeschaltet:" no + matter the context or the comment, "Eingeschaltet:" is added as the + translation of any untranslated "Enabled:" text and is marked Unfinished. +*/ + +void applySameTextHeuristic( MetaTranslator *tor, bool verbose ) +{ + TMM translated, avoid; + TMM::Iterator t; + TML untranslated; + TML::Iterator u; + TML all = tor->messages(); + TML::Iterator it; + int inserted = 0; + + for ( it = all.begin(); it != all.end(); ++it ) { + if ( (*it).type() == MetaTranslatorMessage::Unfinished ) { + if ( (*it).translation().isEmpty() ) + untranslated.append( *it ); + } else { + QCString key = (*it).sourceText(); + t = translated.find( key ); + if ( t != translated.end() ) { + /* + The same source text is translated at least two + different ways. Do nothing then. + */ + if ( (*t).translation() != (*it).translation() ) { + translated.remove( key ); + avoid.insert( key, *it ); + } + } else if ( !avoid.contains(key) ) { + translated.insert( key, *it ); + } + } + } + + for ( u = untranslated.begin(); u != untranslated.end(); ++u ) { + QCString key = (*u).sourceText(); + t = translated.find( key ); + if ( t != translated.end() ) { + MetaTranslatorMessage m( *u ); + m.setTranslation( (*t).translation() ); + tor->insert( m ); + inserted++; + } + } + if ( verbose && inserted != 0 ) + qWarning( " same-text heuristic provided %d translation%s", + inserted, inserted == 1 ? "" : "s" ); +} diff --git a/pyqtconfig.py.in b/pyqtconfig.py.in new file mode 100644 index 0000000..8a6558d --- /dev/null +++ b/pyqtconfig.py.in @@ -0,0 +1,187 @@ +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# This module is intended to be used by the configuration scripts of extension +# modules that %Import PyQt modules. + + +import sipconfig + + +# These are installation specific values created when PyQt was configured. +# @SIP_CONFIGURATION@ + + +class Configuration(sipconfig.Configuration): + """The class that represents PyQt configuration values. + """ + def __init__(self, sub_cfg=None): + """Initialise an instance of the class. + + sub_cfg is the list of sub-class configurations. It should be None + when called normally. + """ + if sub_cfg: + cfg = sub_cfg + else: + cfg = [] + + cfg.append(_pkg_config) + + sipconfig.Configuration.__init__(self, cfg) + + +class QtModuleMakefile(sipconfig.SIPModuleMakefile): + """The Makefile class for modules that %Import qt. + """ + def __init__(self, *args, **kw): + """Initialise an instance of a module Makefile. + """ + kw["qt"] = 1 + apply(sipconfig.SIPModuleMakefile.__init__, (self, ) + args, kw) + + def finalise(self): + """Finalise the macros. + """ + if self.config.sip_version < 0x040000: + # Note that we don't use self.extra_lib_dirs because we don't want + # it to be added to the rpath. + self.LIBDIR.append(self.config.pyqt_mod_dir) + self.extra_libs.append(self.module_as_lib("qt")) + + sipconfig.SIPModuleMakefile.finalise(self) + + +class QtAxContainerModuleMakefile(QtModuleMakefile): + """The Makefile class for modules that %Import qtaxcontainer. + """ + def finalise(self): + """Finalise the macros. + """ + if self.config.sip_version < 0x040000: + self.extra_libs.append(self.module_as_lib("qtaxcontainer")) + + QtModuleMakefile.finalise(self) + + +class QtCanvasModuleMakefile(QtModuleMakefile): + """The Makefile class for modules that %Import qtcanvas. + """ + def finalise(self): + """Finalise the macros. + """ + if self.config.sip_version < 0x040000: + self.extra_libs.append(self.module_as_lib("qtcanvas")) + + QtModuleMakefile.finalise(self) + + +class QtExtModuleMakefile(QtModuleMakefile): + """The Makefile class for modules that %Import qtext. + """ + def finalise(self): + """Finalise the macros. + """ + if self.config.sip_version < 0x040000: + self.extra_libs.append(self.module_as_lib("qtext")) + + self.extra_defines.extend(self.config._pyqt_qscintilla_defines) + self.extra_include_dirs.append(self.config._pyqt_qscintilla_inc_dir) + self.extra_lib_dirs.append(self.config._pyqt_qscintilla_lib_dir) + self.extra_libs.append("qscintilla") + + QtModuleMakefile.finalise(self) + + +class QtGLModuleMakefile(QtModuleMakefile): + """The Makefile class for modules that %Import qtgl. + """ + def __init__(self, *args, **kw): + """Initialise an instance of a module Makefile. + """ + kw["opengl"] = 1 + apply(QtModuleMakefile.__init__, (self, ) + args, kw) + + def finalise(self): + """Finalise the macros. + """ + if self.config.sip_version < 0x040000: + self.extra_libs.append(self.module_as_lib("qtgl")) + + QtModuleMakefile.finalise(self) + + +class QtNetworkModuleMakefile(QtModuleMakefile): + """The Makefile class for modules that %Import qtnetwork. + """ + def finalise(self): + """Finalise the macros. + """ + if self.config.sip_version < 0x040000: + self.extra_libs.append(self.module_as_lib("qtnetwork")) + + QtModuleMakefile.finalise(self) + + +class QtTableModuleMakefile(QtModuleMakefile): + """The Makefile class for modules that %Import qttable. + """ + def finalise(self): + """Finalise the macros. + """ + if self.config.sip_version < 0x040000: + self.extra_libs.append(self.module_as_lib("qttable")) + + QtModuleMakefile.finalise(self) + + +class QtSQLModuleMakefile(QtTableModuleMakefile): + """The Makefile class for modules that %Import qtsql. + """ + def finalise(self): + """Finalise the macros. + """ + if self.config.sip_version < 0x040000: + self.extra_libs.append(self.module_as_lib("qtsql")) + + QtTableModuleMakefile.finalise(self) + + +class QtUIModuleMakefile(QtModuleMakefile): + """The Makefile class for modules that %Import qtui. + """ + def finalise(self): + """Finalise the macros. + """ + if self.config.sip_version < 0x040000: + self.extra_libs.append(self.module_as_lib("qtui")) + + QtModuleMakefile.finalise(self) + + +class QtXMLModuleMakefile(QtModuleMakefile): + """The Makefile class for modules that %Import qtxml. + """ + def finalise(self): + """Finalise the macros. + """ + if self.config.sip_version < 0x040000: + self.extra_libs.append(self.module_as_lib("qtxml")) + + QtModuleMakefile.finalise(self) diff --git a/pyuic2/COPYING b/pyuic2/COPYING new file mode 100644 index 0000000..c7aea18 --- /dev/null +++ b/pyuic2/COPYING @@ -0,0 +1,280 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/pyuic2/domtool.cpp b/pyuic2/domtool.cpp new file mode 100644 index 0000000..2b14ee6 --- /dev/null +++ b/pyuic2/domtool.cpp @@ -0,0 +1,260 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000, 2001 Phil Thompson +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include "domtool.h" + +#include +#include +#include +#include +#include +#include + + +/*! + \class DomTool domtool.h + \brief Tools for the dom + + A collection of static functions used by Resource (part of the + designer) and Uic. + +*/ + + +/*! + Returns the contents of property \a name of object \a e as + variant or the variant passed as \a defValue if the property does + not exist. + + \sa hasProperty() + */ +QVariant DomTool::readProperty( const QDomElement& e, const QString& name, const QVariant& defValue ) +{ + QDomElement n; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "property" ) { + QDomElement n2 = n.firstChild().toElement(); + if ( n2.tagName() == "name" ) { + QString prop = n2.firstChild().toText().data(); + if ( prop == name ) + return elementToVariant( n2.nextSibling().toElement(), defValue ); + } + } + } + return defValue; +} + +/*! + Returns wheter object \a e defines property \a name or not. + + \sa readProperty() + */ +bool DomTool::hasProperty( const QDomElement& e, const QString& name ) +{ + QDomElement n; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "property" ) { + QDomElement n2 = n.firstChild().toElement(); + if ( n2.tagName() == "name" ) { + QString prop = n2.firstChild().toText().data(); + if ( prop == name ) + return TRUE; + } + } + } + return FALSE; +} + +QVariant DomTool::elementToVariant( const QDomElement& e, const QVariant& defValue ) +{ + QString dummy; + return elementToVariant( e, defValue, dummy ); +} + +/*! + Interprets element \a e as variant and returns the result of the interpretation. + */ +QVariant DomTool::elementToVariant( const QDomElement& e, const QVariant& defValue, QString &comment ) +{ + QVariant v; + if ( e.tagName() == "rect" ) { + QDomElement n3 = e.firstChild().toElement(); + int x = 0, y = 0, w = 0, h = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "x" ) + x = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "y" ) + y = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "width" ) + w = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "height" ) + h = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = QVariant( QRect( x, y, w, h ) ); + } else if ( e.tagName() == "point" ) { + QDomElement n3 = e.firstChild().toElement(); + int x = 0, y = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "x" ) + x = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "y" ) + y = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = QVariant( QPoint( x, y ) ); + } else if ( e.tagName() == "size" ) { + QDomElement n3 = e.firstChild().toElement(); + int w = 0, h = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "width" ) + w = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "height" ) + h = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = QVariant( QSize( w, h ) ); + } else if ( e.tagName() == "color" ) { + v = QVariant( readColor( e ) ); + } else if ( e.tagName() == "font" ) { + QDomElement n3 = e.firstChild().toElement(); + QFont f( defValue.toFont() ); + while ( !n3.isNull() ) { + if ( n3.tagName() == "family" ) + f.setFamily( n3.firstChild().toText().data() ); + else if ( n3.tagName() == "pointsize" ) + f.setPointSize( n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "bold" ) + f.setBold( n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "italic" ) + f.setItalic( n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "underline" ) + f.setUnderline( n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "strikeout" ) + f.setStrikeOut( n3.firstChild().toText().data().toInt() ); + n3 = n3.nextSibling().toElement(); + } + v = QVariant( f ); + } else if ( e.tagName() == "string" ) { + v = QVariant( e.firstChild().toText().data() ); + QDomElement n = e; + n = n.nextSibling().toElement(); + if ( n.tagName() == "comment" ) + comment = n.firstChild().toText().data(); + } else if ( e.tagName() == "cstring" ) { + v = QVariant( QCString( e.firstChild().toText().data() ) ); + } else if ( e.tagName() == "number" ) { + v = QVariant( e.firstChild().toText().data().toInt() ); + } else if ( e.tagName() == "bool" ) { + QString t = e.firstChild().toText().data(); + v = QVariant( t == "true" || t == "1", 0 ); + } else if ( e.tagName() == "pixmap" ) { + v = QVariant( e.firstChild().toText().data() ); + } else if ( e.tagName() == "iconset" ) { + v = QVariant( e.firstChild().toText().data() ); + } else if ( e.tagName() == "image" ) { + v = QVariant( e.firstChild().toText().data() ); + } else if ( e.tagName() == "enum" ) { + v = QVariant( e.firstChild().toText().data() ); + } else if ( e.tagName() == "set" ) { + v = QVariant( e.firstChild().toText().data() ); + } else if ( e.tagName() == "sizepolicy" ) { + QDomElement n3 = e.firstChild().toElement(); + QSizePolicy sp; + while ( !n3.isNull() ) { + if ( n3.tagName() == "hsizetype" ) + sp.setHorData( (QSizePolicy::SizeType)n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "vsizetype" ) + sp.setVerData( (QSizePolicy::SizeType)n3.firstChild().toText().data().toInt() ); + n3 = n3.nextSibling().toElement(); + } + v = QVariant( sp ); + } else if ( e.tagName() == "cursor" ) { + v = QVariant( QCursor( e.firstChild().toText().data().toInt() ) ); + } + + return v; +} + + +/*! Returns the color which is returned in the dom element \a e. + */ + +QColor DomTool::readColor( const QDomElement &e ) +{ + QDomElement n = e.firstChild().toElement(); + int r= 0, g = 0, b = 0; + while ( !n.isNull() ) { + if ( n.tagName() == "red" ) + r = n.firstChild().toText().data().toInt(); + else if ( n.tagName() == "green" ) + g = n.firstChild().toText().data().toInt(); + else if ( n.tagName() == "blue" ) + b = n.firstChild().toText().data().toInt(); + n = n.nextSibling().toElement(); + } + + return QColor( r, g, b ); +} + +/*! + Returns the contents of attribute \a name of object \a e as + variant or the variant passed as \a defValue if the attribute does + not exist. + + \sa hasAttribute() + */ +QVariant DomTool::readAttribute( const QDomElement& e, const QString& name, const QVariant& defValue ) +{ + QDomElement n; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "attribute" ) { + QDomElement n2 = n.firstChild().toElement(); + if ( n2.tagName() == "name" ) { + QString prop = n2.firstChild().toText().data(); + if ( prop == name ) + return elementToVariant( n2.nextSibling().toElement(), defValue ); + } + } + } + return defValue; +} + +/*! + Returns wheter object \a e defines attribute \a name or not. + + \sa readAttribute() + */ +bool DomTool::hasAttribute( const QDomElement& e, const QString& name ) +{ + QDomElement n; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "attribute" ) { + QDomElement n2 = n.firstChild().toElement(); + if ( n2.tagName() == "name" ) { + QString prop = n2.firstChild().toText().data(); + if ( prop == name ) + return TRUE; + } + } + } + return FALSE; +} diff --git a/pyuic2/domtool.h b/pyuic2/domtool.h new file mode 100644 index 0000000..7230bce --- /dev/null +++ b/pyuic2/domtool.h @@ -0,0 +1,41 @@ +/********************************************************************** +** Copyright (C) 2000 Troll Tech AS. All rights reserved. +** Copyright (C) 2000, 2001 Phil Thompson +** +** This file is part of Qt GUI Designer. +** +** This file may be distributed under the terms of the GNU General +** Public License version 2 as published by the Free Software +** Foundation and appearing in the file COPYING included in the +** packaging of this file. If you did not get the file, send email +** to info@trolltech.com +** +** The file is provided AS IS with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#ifndef DOMTOOL_H +#define DOMTOOL_H + +#include +#include +#include + + +class DomTool : public Qt +{ +public: + static QVariant readProperty( const QDomElement& e, const QString& name, const QVariant& defValue ); + static bool hasProperty( const QDomElement& e, const QString& name ); + static QVariant elementToVariant( const QDomElement& e, const QVariant& defValue ); + static QVariant elementToVariant( const QDomElement& e, const QVariant& defValue, QString &comment ); + static QVariant readAttribute( const QDomElement& e, const QString& name, const QVariant& defValue ); + static bool hasAttribute( const QDomElement& e, const QString& name ); + static QColor readColor( const QDomElement &e ); + +}; + + +#endif // DOMTOOL_H diff --git a/pyuic2/globaldefs.h b/pyuic2/globaldefs.h new file mode 100644 index 0000000..700f7d2 --- /dev/null +++ b/pyuic2/globaldefs.h @@ -0,0 +1,33 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#ifndef GLOBALDEFS_H +#define GLOBALDEFS_H + +#include + +#define BOXLAYOUT_DEFAULT_MARGIN 11 +#define BOXLAYOUT_DEFAULT_SPACING 6 + +static QColor backColor1( 226, 244, 216 ); +static QColor backColor2( 235, 235, 235 ); +static QColor selectedBack( 192, 192, 192 ); + +#endif diff --git a/pyuic2/pyuic.pro.in b/pyuic2/pyuic.pro.in new file mode 100644 index 0000000..8df1513 --- /dev/null +++ b/pyuic2/pyuic.pro.in @@ -0,0 +1,24 @@ +# Copyright (c) 2000, 2001 +# Phil Thompson +# Copyright (c) 2002, 2003 +# Riverbank Computing Limited +# +# The project file for pyuic for Qt v2. + + +TEMPLATE = app +CONFIG = qt console warn_on release +INCLUDEPATH = @BLX_INCLUDEPATH@ $(QTDIR)/src/3rdparty/zlib +DEFINES = UIC @BLX_DEFINES@ + +DESTDIR = @PYQT_BINDIR@ +TARGET = pyuic + +HEADERS = domtool.h \ + globaldefs.h \ + uic.h \ + widgetdatabase.h + +SOURCES = domtool.cpp \ + uic.cpp \ + widgetdatabase.cpp diff --git a/pyuic2/pyuic.sbf b/pyuic2/pyuic.sbf new file mode 100644 index 0000000..5d480ec --- /dev/null +++ b/pyuic2/pyuic.sbf @@ -0,0 +1,24 @@ +# This is the build file for pyuic for Qt v2. +# +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +target = pyuic +sources = uic.cpp widgetdatabase.cpp domtool.cpp +headers = uic.h widgetdatabase.h domtool.h globaldefs.h diff --git a/pyuic2/uic.cpp b/pyuic2/uic.cpp new file mode 100644 index 0000000..19fb079 --- /dev/null +++ b/pyuic2/uic.cpp @@ -0,0 +1,1601 @@ +// Copyright (c) 2000 - 2001 Phil Thompson + +/********************************************************************** +** Copyright (C) 2000 Troll Tech AS. All rights reserved. +** +** This file is part of Qt GUI Designer. +** +** This file may be distributed under the terms of the GNU General +** Public License version 2 as published by the Free Software +** Foundation and appearing in the file COPYING included in the +** packaging of this file. If you did not get the file, send email +** to info@trolltech.com +** +** The file is provided AS IS with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#include "uic.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static QString mkBool( bool b ) +{ + return b? "1" : "0"; +} + +static QString mkBool( const QString& s ) +{ + return mkBool( s == "true" || s == "1" ); +} + +static bool toBool( const QString& s ) +{ + return s == "true" || s.toInt() != 0; +} + + +// fixString is only used in conjunction with tr(). We need to write out the +// string in utf8 and make sure it's converted from utf8 when created. +static QString fixString( const QString &str ) +{ + QString s( str ); + s.replace( QRegExp( "\\\\" ), "\\\\" ); + s.replace( QRegExp( "\"" ), "\\\"" ); + s.replace( QRegExp( "\n" ), "\\n\"\n\"" ); + s.replace( QRegExp( "\r" ), "\\r" ); + + bool onlyAscii = TRUE; + unsigned int i; + for ( i = 0; i < s.length(); i++ ) { + if ( s.at(i).unicode() >= 0x80 ) { + onlyAscii = FALSE; + break; + } + } + if ( onlyAscii ) + s = "\"" + s + "\""; + else + s = "QString.fromUtf8(\"" + s + "\")"; + return s; +} + +static QString mkStdSet( const QString& prop ) +{ + return QString( "set" ) + prop[0].upper() + prop.mid(1); +} + + +/*! + \class Uic uic.h + \brief User Interface Compiler + + The class Uic encapsulates the user interface compiler (uic). + */ + +static QString className; + +Uic::Uic( QTextStream &outStream, QDomDocument doc, const QString &trm ) + : out( outStream ), trmacro( trm ) +{ + item_used = cg_used = pal_used = 0; + + initIndent(); + + layouts << "hbox" << "vbox" << "grid"; + tags = layouts; + tags << "widget"; + + nameOfClass = getClassName( doc.firstChild().toElement() ); + + QDomElement firstWidget = doc.firstChild().firstChild().toElement(); + while ( firstWidget.tagName() != "widget" ) + firstWidget = firstWidget.nextSibling().toElement(); + + if ( nameOfClass.isEmpty() ) + nameOfClass = getObjectName( firstWidget ); + + // This is a hack. + className = nameOfClass; + + createFormImpl( firstWidget ); +} + + +/*! Extracts a class name from \a e + */ +QString Uic::getClassName( const QDomElement& e ) +{ + QDomElement n; + QString cn; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "class" ) { + QString s = n.firstChild().toText().data(); + int i; + while ( ( i = s.find(' ' )) != -1 ) + s[i] = '_'; + cn = s; + } else if ( n.tagName() == "pixmapfunction" ) { + pixmapLoaderFunction = n.firstChild().toText().data(); + } + } + return cn; +} + +/*! Extracts an object name from \a e. It's stored in the 'name' + property. + */ +QString Uic::getObjectName( const QDomElement& e ) +{ + QDomElement n; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "property" ) { + QDomElement n2 = n.firstChild().toElement(); + if ( n2.tagName() == "name" && n2.firstChild().toText().data() == "name" ) { + return n2.nextSibling().toElement().firstChild().toText().data(); + } + } + } + return QString::null; +} + +/*! Extracts an layout name from \a e. It's stored in the 'name' + property of the preceeding sibling (the first child of a QLayoutWidget). + */ +QString Uic::getLayoutName( const QDomElement& e ) +{ + QDomElement p = e.parentNode().toElement(); + QString tail = QString::null; + + if (getClassName(p) != "QLayoutWidget") + tail = "Layout"; + + QDomElement n; + for ( n = p.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "property" ) { + QDomElement n2 = n.firstChild().toElement(); + if ( n2.tagName() == "name" && n2.firstChild().toText().data() == "name" ) { + return n2.nextSibling().toElement().firstChild().toText().data() + tail; + } + } + } + return e.tagName(); +} + +QByteArray unzipXPM( QString data, ulong& length ) +{ + char *ba = new char[ data.length() / 2 ]; + for ( int i = 0; i < (int)data.length() / 2; ++i ) { + char h = data[ 2 * i ].latin1(); + char l = data[ 2 * i + 1 ].latin1(); + uchar r = 0; + if ( h <= '9' ) + r += h - '0'; + else + r += h - 'a' + 10; + r = r << 4; + if ( l <= '9' ) + r += l - '0'; + else + r += l - 'a' + 10; + ba[ i ] = r; + } + if ( length < data.length() * 5 ) + length = data.length() * 5; + QByteArray baunzip( length ); + ::uncompress( (uchar*) baunzip.data(), &length, (uchar*) ba, data.length()/2 ); + return baunzip; +} + + +/*! + Creates an implementation ( cpp-file ) for the form given in \a e + + \sa createFormDecl(), createObjectImpl() + */ +void Uic::createFormImpl( const QDomElement &e ) +{ + QStringList::Iterator it; + QDomElement n; + QDomNodeList nl; + int i; + QString objClass = getClassName( e ); + if ( objClass.isEmpty() ) + return; + QString objName = getObjectName( e ); + + // Handle custom widgets. + for (n = e; !n.isNull(); n = n.nextSibling().toElement()) + { + if (n.tagName() != "customwidgets") + continue; + + QDomElement n2 = n.firstChild().toElement(); + + while (!n2.isNull()) + { + if (n2.tagName() == "customwidget") + { + QDomElement n3 = n2.firstChild().toElement(); + QString cname, header; + + while (!n3.isNull()) + { + if (n3.tagName() == "class") + cname = n3.firstChild().toText().data(); + else if (n3.tagName() == "header") + header = n3.firstChild().toText().data(); + + n3 = n3.nextSibling().toElement(); + } + + if (cname.isEmpty()) + cname = "UnnamedCustomClass"; + + int ext = header.findRev('.'); + + if (ext >= 0) + header.truncate(ext); + + if (header.isEmpty()) + header = cname.lower(); + + out << "from " << header << " import " << cname << endl; + } + + n2 = n2.nextSibling().toElement(); + } + } + + // find out what images are required + QStringList requiredImages; + nl = e.elementsByTagName( "pixmap" ); + for ( int j = 0; j < (int) nl.length(); j++ ) { + requiredImages += nl.item(j).firstChild().toText().data(); + } + + QStringList images; + QStringList xpmImages; + if ( pixmapLoaderFunction.isEmpty() ) { + // create images + for ( n = e; !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "images" ) { + nl = n.elementsByTagName( "image" ); + for ( i = 0; i < (int) nl.length(); i++ ) { + QDomElement tmp = nl.item(i).firstChild().toElement(); + QString img = registerObject( tmp.firstChild().toText().data() ); + if ( !requiredImages.contains( img ) ) + continue; + tmp = tmp.nextSibling().toElement(); + QString format = tmp.attribute("format", "PNG" ); + QString data = tmp.firstChild().toText().data(); + + out << endl; + out << endl; + + if ( format == "XPM.GZ" ) { + xpmImages += img; + ulong length = tmp.attribute("length").toULong(); + QByteArray baunzip = unzipXPM( data, length ); + int a = 0; + out << indent << img << "_data = [" << endl; + while ( baunzip[a] != '\"' ) + a++; + for ( ; a < (int) length; a++ ) + { + char ch; + + if ((ch = baunzip[a]) == '}') + { + out << endl << "]" << endl; + break; + } + + if (ch == '\"') + ch = '\''; + + out << ch; + } + } else { + images += img; + out << indent << img << "_data = \\" << endl; + pushIndent(); + out << indent << "'"; + int a ; + for ( a = 0; a < (int) (data.length()/2)-1; a++ ) { + out << "\\x" << QString(data[2*a]) << QString(data[2*a+1]); + if ( a % 12 == 11 ) + out << "' \\" << endl << indent << "'"; + } + out << "\\x" << QString(data[2*a]) << QString(data[2*a+1]) << "'" << endl; + popIndent(); + } + } + } + } + } + + // register the object and unify its name + objName = registerObject( objName ); + + + // constructor + + out << endl; + out << endl; + out << indent << "class " << nameOfClass << "(" << objClass << "):" << endl; + pushIndent(); + + if ( objClass == "QDialog" || objClass == "QWizard" ) { + out << indent << "def __init__(self,parent = None,name = None,modal = 0,fl = 0):" << endl; + pushIndent(); + out << indent << objClass << ".__init__(self,parent,name,modal,fl)" << endl; + } else if ( objClass == "QWidget" ) { // standard QWidget + out << indent << "def __init__(self,parent = None,name = None,fl = 0):" << endl; + pushIndent(); + out << indent << objClass << ".__init__(self,parent,name,fl)" << endl; + } else { + out << indent << "def __init__(self,parent = None,name = None):" << endl; + pushIndent(); + out << indent << objClass << ".__init__(self,parent,name)" << endl; + } + + out << endl; + + // create pixmaps for all images + if ( !images.isEmpty() ) { + QStringList::Iterator it; + for ( it = images.begin(); it != images.end(); ++it ) { + out << indent << (*it) << " = QPixmap()" << endl; + out << indent << (*it) << ".loadFromData(" << (*it) << "_data,'PNG')" << endl; + } + + out << endl; + } + // create pixmaps for all images + if ( !xpmImages.isEmpty() ) { + for ( it = xpmImages.begin(); it != xpmImages.end(); ++it ) { + out << indent << (*it) << " = QPixmap(" << (*it) << "_data)" << endl; + } + + out << endl; + } + + + // set the properties + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "property" ) { + bool stdset = toBool( n.attribute( "stdset" ) ); + QDomElement n2 = n.firstChild().toElement(); + + if ( n2.tagName() == "name" ) { + QString prop = n2.firstChild().toText().data(); + QString value = setObjectProperty( objClass, QString::null, prop, n2.nextSibling().toElement(), stdset ); + + if ( value.isEmpty() ) + continue; + + if ( prop == "name" ) { + out << indent << "if name == None:" << endl; + pushIndent(); + } + + out << indent; + + if ( prop == "geometry" && n2.nextSibling().toElement().tagName() == "rect") { + QDomElement n3 = n2.nextSibling().toElement().firstChild().toElement(); + int w = 0, h = 0; + + while ( !n3.isNull() ) { + if ( n3.tagName() == "width" ) + w = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "height" ) + h = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + + out << "self.resize(" << w << "," << h << ")" << endl; + } else { + if ( stdset ) + out << "self." << mkStdSet(prop) << "(" << value << ")" << endl; + else + out << "self.setProperty('" << prop << "',QVariant(" << value << "))" << endl; + } + + if (prop == "name") { + popIndent(); + out << endl; + } + } + } + } + + + // create all children, some forms have special requirements + + if ( objClass == "QWizard" ) { + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( tags.contains( n.tagName() ) ) { + QString page = createObjectImpl( n, objClass, "self" ); + QString label = DomTool::readAttribute( n, "title", "" ).toString(); + out << indent << "self.addPage(" << page << ","<< trmacro << "(" << fixString( label ) << "))" << endl; + QVariant def( FALSE, 0 ); + if ( DomTool::hasAttribute( n, "backEnabled" ) ) + out << indent << "self.setBackEnabled(" << page << "," << mkBool( DomTool::readAttribute( n, "backEnabled", def).toBool() ) << ")" << endl; + if ( DomTool::hasAttribute( n, "nextEnabled" ) ) + out << indent << "self.setNextEnabled(" << page << "," << mkBool( DomTool::readAttribute( n, "nextEnabled", def).toBool() ) << ")" << endl; + if ( DomTool::hasAttribute( n, "finishEnabled" ) ) + out << indent << "self.setFinishEnabled(" << page << "," << mkBool( DomTool::readAttribute( n, "finishEnabled", def).toBool() ) << ")" << endl; + if ( DomTool::hasAttribute( n, "helpEnabled" ) ) + out << indent << "self.setHelpEnabled(" << page << "," << mkBool( DomTool::readAttribute( n, "helpEnabled", def).toBool() ) << ")" << endl; + if ( DomTool::hasAttribute( n, "finish" ) ) + out << indent << "self.setFinish(" << page << "," << mkBool( DomTool::readAttribute( n, "finish", def).toBool() ) << ")" << endl; + } + } + } else { // standard widgets + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( tags.contains( n.tagName() ) ) + createObjectImpl( n, objName, "self" ); + } + } + + // Get the list of any user defined slots. + + QStringList userSlots; + + for ( n = e; !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "connections" ) { + for ( QDomElement n2 = n.firstChild().toElement(); !n2.isNull(); n2 = n2.nextSibling().toElement() ) { + if ( n2.tagName() == "slot" ) { + userSlots += n2.firstChild().toText().data(); + } + } + } + } + + for ( n = e; !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "connections" ) { + // setup signals and slots connections + out << endl; + nl = n.elementsByTagName( "connection" ); + for ( i = 0; i < (int) nl.length(); i++ ) { + QString sender, receiver, signal, slot; + for ( QDomElement n2 = nl.item(i).firstChild().toElement(); !n2.isNull(); n2 = n2.nextSibling().toElement() ) { + if ( n2.tagName() == "sender" ) + sender = n2.firstChild().toText().data(); + else if ( n2.tagName() == "receiver" ) + receiver = n2.firstChild().toText().data(); + else if ( n2.tagName() == "signal" ) + signal = n2.firstChild().toText().data(); + else if ( n2.tagName() == "slot" ) + slot = n2.firstChild().toText().data(); + } + if ( sender.isEmpty() || receiver.isEmpty() || signal.isEmpty() || slot.isEmpty() ) + continue; + + sender = registeredName( sender ); + receiver = registeredName( receiver ); + + // translate formwindow name to "self" + if ( sender == objName ) + sender = "self"; + else + sender = "self." + sender; + if ( receiver == objName ) + receiver = "self"; + else + receiver = "self." + receiver; + + // Note that we never use the SLOT() macro in case we have + // custom widgets implemented in Python. + out << indent << "self.connect(" << sender + << ",SIGNAL('" << signal << "'),self." + << slot.left(slot.find('(')) << ")" << endl; + } + } else if ( n.tagName() == "tabstops" ) { + // setup tab order + out << endl; + QString lastName; + QDomElement n2 = n.firstChild().toElement(); + while ( !n2.isNull() ) { + if ( n2.tagName() == "tabstop" ) { + QString name = n2.firstChild().toText().data(); + name = registeredName( name ); + if ( !lastName.isEmpty() ) + out << indent << "self.setTabOrder(self." << lastName << ",self." << name << ")" << endl; + lastName = name; + } + n2 = n2.nextSibling().toElement(); + } + } + } + + + // buddies + bool firstBuddy = TRUE; + for ( QValueList::Iterator buddy = buddies.begin(); buddy != buddies.end(); ++buddy ) { + if ( isObjectRegistered( (*buddy).buddy ) ) { + if ( firstBuddy ) { + out << endl; + } + out << indent << "self." << (*buddy).key << ".setBuddy(self." << registeredName( (*buddy).buddy ) << ")" << endl; + firstBuddy = FALSE; + } + + } + + // end of constructor + popIndent(); + + // handle application font changes if required + nl = e.elementsByTagName( "widget" ); + bool needEventHandler = FALSE; + for ( i = 0; i < (int) nl.length(); i++ ) { + if ( DomTool::hasProperty( nl.item(i).toElement() , "font" ) ) { + needEventHandler = TRUE; + break; + } + } + if ( needEventHandler ) { + out << endl; + out << indent << "def event(self,ev):" << endl; + pushIndent(); + out << indent << "ret = " << objClass << ".event(self,ev)" << endl; + out << endl; + out << indent << "if ev.type() == QEvent.ApplicationFontChange:" << endl; + pushIndent(); + + for ( i = 0; i < (int) nl.length(); i++ ) { + n = nl.item(i).toElement(); + if ( DomTool::hasProperty( n, "font" ) ) + createExclusiveProperty( n, "font" ); + } + + out << endl; + popIndent(); + out << indent << "return ret" << endl; + popIndent(); + } + + + // Generate user defined slot hooks. + + for (it = userSlots.begin(); it != userSlots.end(); ++it) { + int astart = (*it).find('('); + + out << endl; + out << indent << "def " << (*it).left(astart) << "(self"; + + // We don't reproduce the argument names (if any) because we would have + // to remove the types - too complicated for the moment, so we just + // count them and give them names based on their position. + + QString args = (*it).mid(astart + 1,(*it).find(')') - astart - 1).stripWhiteSpace(); + + if (!args.isEmpty()) { + int nrargs = args.contains(',') + 1; + + for (int i = 0; i < nrargs; ++i) + out << ",a" << i; + } + + out << "):" << endl; + pushIndent(); + out << indent << "print '" << nameOfClass << "." << *it << ": not implemented yet'" << endl; + popIndent(); + } + + popIndent(); +} + + +/*! + Creates an implementation for the object given in \a e. + + Traverses recursively over all children. + + Returns the name of the generated child object. + + \sa createObjectDecl() + */ +QString Uic::createObjectImpl( const QDomElement &e, const QString& parentClass, const QString& parent, const QString& layout ) +{ + + QDomElement n; + QString objClass, objName, fullObjName; + + if ( layouts.contains( e.tagName() ) ) + return createLayoutImpl( e, parentClass, parent, layout ); + + objClass = getClassName( e ); + if ( objClass.isEmpty() ) + return objName; + objName = getObjectName( e ); + + QString definedName = objName; + bool isTmpObject = objName.isEmpty() || objClass == "QLayoutWidget"; + if ( isTmpObject ) { + if ( objClass[0] == 'Q' ) + objName = objClass.mid(1); + else + objName = objClass.lower(); + } + + bool isLine = objClass == "Line"; + if ( isLine ) + objClass = "QFrame"; + + out << endl; + if ( objClass == "QLayoutWidget" ) { + if ( layout.isEmpty() ) { + // register the object and unify its name + objName = registerObject( objName ); + out << indent << objName << " = QWidget(" << parent << ",'" << definedName << "')" << endl; + } else { + // the layout widget is not necessary, hide it by creating its child in the parent + QString result; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if (tags.contains( n.tagName() ) ) + result = createObjectImpl( n, parentClass, parent, layout ); + } + return result; + } + + // Layouts don't go into the class instance dictionary. + fullObjName = objName; + } else { + // register the object and unify its name + objName = registerObject( objName ); + + // Temporary objects don't go into the class instance dictionary. + fullObjName = isTmpObject ? objName : "self." + objName; + + out << indent << fullObjName << " = " << createObjectInstance( objClass, parent, objName ) << endl; + } + + lastItem = "None"; + // set the properties and insert items + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "property" ) { + bool stdset = toBool( n.attribute( "stdset" ) ); + QDomElement n2 = n.firstChild().toElement(); + + if ( n2.tagName() == "name" ) { + QString prop = n2.firstChild().toText().data(); + QString value = setObjectProperty( objClass, objName, prop, n2.nextSibling().toElement(), stdset ); + + if ( value.isEmpty() ) + continue; + if ( prop == "name" ) + continue; + if ( prop == "buddy" && value[0] == '\'' && value[(int)value.length()-1] == '\'' ) { + buddies << Buddy( objName, value.mid(1, value.length() - 2 ) ); + continue; + } + if ( isLine && prop == "orientation" ) { + prop = "frameStyle"; + if ( value.right(10) == "Horizontal" ) + value = "QFrame.HLine | QFrame.Sunken"; + else + value = "QFrame.VLine | QFrame.Sunken"; + } + if ( prop == "buttonGroupId" ) { + if ( parentClass == "QButtonGroup" ) + out << indent << parent << ".insert(" << fullObjName << "," << value << ")" << endl; + continue; + } + if ( prop == "geometry") { + out << indent << fullObjName << ".setGeometry(" << value << ")" << endl; + } else { + if ( stdset ) + out << indent << fullObjName << "." << mkStdSet(prop) << "(" << value << ")" << endl; + else + out << indent << fullObjName << ".setProperty('" << prop << "',QVariant(" << value << "))" << endl; + } + + } + } else if ( n.tagName() == "item" ) { + if ( objClass.mid(1) == "ListBox" ) { + QString s = createListBoxItemImpl( n, fullObjName ); + if ( !s.isEmpty() ) + out << indent << s << endl; + } else if ( objClass.mid(1) == "ComboBox" ) { + QString s = createListBoxItemImpl( n, fullObjName ); + if ( !s.isEmpty() ) + out << indent << s << endl; + } else if ( objClass.mid(1) == "IconView" ) { + QString s = createIconViewItemImpl( n, fullObjName ); + if ( !s.isEmpty() ) + out << indent << s << endl; + } else if ( objClass.mid(1) == "ListView" ) { + QString s = createListViewItemImpl( n, fullObjName, QString::null ); + if ( !s.isEmpty() ) + out << s << endl; + } + } else if ( n.tagName() == "column" ) { + if ( objClass.mid(1) == "ListView" ) { + QString s = createListViewColumnImpl( n, fullObjName ); + if ( !s.isEmpty() ) + out << s; + } + } + } + + // create all children, some widgets have special requirements + + if ( objClass == "QTabWidget" ) { + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( tags.contains( n.tagName() ) ) { + QString page = createObjectImpl( n, objClass, fullObjName ); + QString label = DomTool::readAttribute( n, "title", "" ).toString(); + out << indent << fullObjName << ".insertTab(" << page << "," << trmacro << "(" << fixString( label ) << "))" << endl; + } + } + } else { // standard widgets + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( tags.contains( n.tagName() ) ) + createObjectImpl( n, objClass, fullObjName ); + } + } + + return fullObjName; +} + +/*! + Creates implementation of an listbox item tag. +*/ + +QString Uic::createListBoxItemImpl( const QDomElement &e, const QString &parent ) +{ + QDomElement n = e.firstChild().toElement(); + QString txt; + QString pix; + while ( !n.isNull() ) { + if ( n.tagName() == "property" ) { + QDomElement n2 = n.firstChild().toElement(); + if ( n2.tagName() == "name" ) { + QString attrib = n2.firstChild().toText().data(); + QVariant v = DomTool::elementToVariant( n2.nextSibling().toElement(), QVariant() ); + if ( attrib == "text" ) + txt = v.toString(); + else if ( attrib == "pixmap" ) { + pix = v.toString(); + if ( !pix.isEmpty() && !pixmapLoaderFunction.isEmpty() ) { + pix.prepend( pixmapLoaderFunction + "(" ); + pix.append( ")" ); + } + } + } + } + n = n.nextSibling().toElement(); + } + + return pix.isEmpty() ? + parent + ".insertItem(" + trmacro + "(" + fixString( txt ) + "))": + parent + ".insertItem(" + pix + "," + trmacro + "(" + fixString( txt ) + "))"; +} + +/*! + Creates implementation of an iconview item tag. +*/ + +QString Uic::createIconViewItemImpl( const QDomElement &e, const QString &parent ) +{ + QDomElement n = e.firstChild().toElement(); + QString txt; + QString pix; + while ( !n.isNull() ) { + if ( n.tagName() == "property" ) { + QDomElement n2 = n.firstChild().toElement(); + if ( n2.tagName() == "name" ) { + QString attrib = n2.firstChild().toText().data(); + QVariant v = DomTool::elementToVariant( n2.nextSibling().toElement(), QVariant() ); + if ( attrib == "text" ) + txt = v.toString(); + else if ( attrib == "pixmap" ) { + pix = v.toString(); + if ( !pix.isEmpty() && !pixmapLoaderFunction.isEmpty() ) { + pix.prepend( pixmapLoaderFunction + "( " ); + pix.append( " )" ); + } + } + } + } + n = n.nextSibling().toElement(); + } + + if ( pix.isEmpty() ) + return "QIconViewItem(" + parent + "," + trmacro + "(" + fixString( txt ) + "))"; + return "QIconViewItem(" + parent + "," + trmacro + "(" + fixString( txt ) + ")," + pix + ")"; + +} + +/*! + Creates implementation of an listview item tag. +*/ + +QString Uic::createListViewItemImpl( const QDomElement &e, const QString &parent, + const QString &parentItem ) +{ + QString s; + + QDomElement n = e.firstChild().toElement(); + + bool hasChildren = e.elementsByTagName( "item" ).count() > 0; + QString item; + + if ( hasChildren ) { + item = registerObject( "item" ); + s = indent + item + " = "; + } else { + item = "item"; + if ( item_used ) + s = indent + item + " = "; + else + s = indent + item + " = "; + item_used = TRUE; + } + + if ( !parentItem.isEmpty() ) + s += "QListViewItem(" + parentItem + "," + lastItem + ")\n"; + else + s += "QListViewItem(" + parent + "," + lastItem + ")\n"; + + QStringList textes; + QStringList pixmaps; + while ( !n.isNull() ) { + if ( n.tagName() == "property" ) { + QDomElement n2 = n.firstChild().toElement(); + if ( n2.tagName() == "name" ) { + QString attrib = n2.firstChild().toText().data(); + QVariant v = DomTool::elementToVariant( n2.nextSibling().toElement(), QVariant() ); + if ( attrib == "text" ) + textes << v.toString(); + else if ( attrib == "pixmap" ) { + QString pix = v.toString(); + if ( !pix.isEmpty() && !pixmapLoaderFunction.isEmpty() ) { + pix.prepend( pixmapLoaderFunction + "( " ); + pix.append( " )" ); + } + pixmaps << pix; + } + } + } else if ( n.tagName() == "item" ) { + s += indent + item + ".setOpen(1)\n"; + s += createListViewItemImpl( n, parent, item ); + } + n = n.nextSibling().toElement(); + } + + for ( int i = 0; i < (int)textes.count(); ++i ) { + if ( !textes[ i ].isEmpty() ) + s += indent + item + ".setText(" + QString::number( i ) + "," + trmacro + "(" + fixString( textes[ i ] ) + "))\n"; + if ( !pixmaps[ i ].isEmpty() ) + s += indent + item + ".setPixmap(" + QString::number( i ) + "," + pixmaps[ i ] + ")\n"; + } + + lastItem = item; + return s; +} + +/*! + Creates implementation of an listview column tag. +*/ + +QString Uic::createListViewColumnImpl( const QDomElement &e, const QString &parent ) +{ + QDomElement n = e.firstChild().toElement(); + QString txt; + QString pix; + bool clickable = FALSE, resizeable = FALSE; + while ( !n.isNull() ) { + if ( n.tagName() == "property" ) { + QDomElement n2 = n.firstChild().toElement(); + if ( n2.tagName() == "name" ) { + QString attrib = n2.firstChild().toText().data(); + QVariant v = DomTool::elementToVariant( n2.nextSibling().toElement(), QVariant() ); + if ( attrib == "text" ) + txt = v.toString(); + else if ( attrib == "pixmap" ) { + pix = v.toString(); + if ( !pix.isEmpty() && !pixmapLoaderFunction.isEmpty() ) { + pix.prepend( pixmapLoaderFunction + "( " ); + pix.append( " )" ); + } + } else if ( attrib == "clickable" ) + clickable = v.toBool(); + else if ( attrib == "resizeable" ) + resizeable = v.toBool(); + } + } + n = n.nextSibling().toElement(); + } + + QString s; + s = indent + parent + ".addColumn(" + trmacro + "(" + fixString( txt ) + "))\n"; + if ( !pix.isEmpty() ) + s += indent + parent + ".header().setLabel(" + parent + ".header().count() - 1," + pix + "," + trmacro + "(" + fixString( txt ) + "))\n"; + if ( !clickable ) + s += indent + parent + ".header().setClickEnabled(0," + parent + ".header().count() - 1)\n"; + if ( !resizeable ) + s += indent + parent + ".header().setResizeEnabled(0," + parent + ".header().count() - 1)\n"; + + return s; +} + +/*! + Creates the implementation of a layout tag. Called from createObjectImpl(). + */ +QString Uic::createLayoutImpl( const QDomElement &e, const QString& parentClass, const QString& parent, const QString& layout ) +{ + QDomElement n; + QString objClass, objName; + objClass = e.tagName(); + + QString qlayout = "QVBoxLayout"; + if ( objClass == "hbox" ) + qlayout = "QHBoxLayout"; + else if ( objClass == "grid" ) + qlayout = "QGridLayout"; + + bool isGrid = e.tagName() == "grid" ; + objName = registerObject( getLayoutName( e ) ); + layoutObjects += objName; + int margin = DomTool::readProperty( e, "margin", BOXLAYOUT_DEFAULT_MARGIN ).toInt(); + int spacing = DomTool::readProperty( e, "spacing", BOXLAYOUT_DEFAULT_SPACING ).toInt(); + + if ( (parentClass == "QGroupBox" || parentClass == "QButtonGroup") && layout.isEmpty() ) { + // special case for group box + out << indent << parent << ".setColumnLayout(0,Qt.Vertical)" << endl; + out << indent << parent << ".layout().setSpacing(0)" << endl; + out << indent << parent << ".layout().setMargin(0)" << endl; + out << indent << objName << " = " << qlayout << "(" << parent << ".layout())" << endl; + out << indent << objName << ".setAlignment(Qt.AlignTop)" << endl; + } else { + if ( layout.isEmpty() ) + out << indent << objName << " = " << qlayout << "(" << parent << ")" << endl; + else + out << indent << objName << " = " << qlayout << "()" << endl; + } + + out << indent << objName << ".setSpacing(" << spacing << ")" << endl; + out << indent << objName << ".setMargin(" << margin << ")" << endl; + + if ( !isGrid ) { + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "spacer" ) { + QString child = createSpacerImpl( n, parentClass, parent, objName ); + out << indent << objName << ".addItem(" << child << ")" << endl; + } else if ( tags.contains( n.tagName() ) ) { + QString child = createObjectImpl( n, parentClass, parent, objName ); + if ( isLayout( child ) ) + out << indent << objName << ".addLayout(" << child << ")" << endl; + else + out << indent << objName << ".addWidget(" << child << ")" << endl; + } + } + } else { + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + QDomElement ae = n; + int row = ae.attribute( "row" ).toInt(); + int col = ae.attribute( "column" ).toInt(); + int rowspan = ae.attribute( "rowspan" ).toInt(); + int colspan = ae.attribute( "colspan" ).toInt(); + if ( rowspan < 1 ) + rowspan = 1; + if ( colspan < 1 ) + colspan = 1; + if ( n.tagName() == "spacer" ) { + QString child = createSpacerImpl( n, parentClass, parent, objName ); + if ( rowspan * colspan != 1 ) + out << indent << objName << ".addMultiCell(" << child << "," + << row << "," << row + rowspan - 1 << "," << col << "," + << col + colspan - 1 << ")" << endl; + else + out << indent << objName << ".addItem(" << child << "," + << row << "," << col << ")" << endl; + } else if ( tags.contains( n.tagName() ) ) { + QString child = createObjectImpl( n, parentClass, parent, objName ); + out << endl; + QString o = "Widget"; + if ( isLayout( child ) ) + o = "Layout"; + if ( rowspan * colspan != 1 ) + out << indent << objName << ".addMultiCell" << o << "(" << child << "," + << row << "," << row + rowspan - 1 << "," << col << "," << col + colspan - 1 << ")" << endl; + else + out << indent << objName << ".add" << o << "(" << child << "," + << row << "," << col << ")" << endl; + } + } + } + + return objName; +} + + + +QString Uic::createSpacerImpl( const QDomElement &e, const QString& /*parentClass*/, const QString& /*parent*/, const QString& /*layout*/) +{ + QDomElement n; + QString objClass, objName; + objClass = e.tagName(); + objName = registerObject( "spacer" ); + + QSize size = DomTool::readProperty( e, "sizeHint", QSize(0,0) ).toSize(); + QString sizeType = DomTool::readProperty( e, "sizeType", "Expanding" ).toString(); + bool isVspacer = DomTool::readProperty( e, "orientation", "Horizontal" ) == "Vertical"; + + if ( sizeType != "Expanding" && sizeType != "MinimumExpanding" && + DomTool::hasProperty( e, "geometry" ) ) { // compatibility Qt 2.2 + QRect geom = DomTool::readProperty( e, "geometry", QRect(0,0,0,0) ).toRect(); + size = geom.size(); + } + + if ( isVspacer ) + out << indent << objName << " = QSpacerItem(" + << size.width() << "," << size.height() + << ",QSizePolicy.Minimum,QSizePolicy." << sizeType << ")" << endl; + else + out << indent << objName << " = QSpacerItem(" + << size.width() << "," << size.height() + << ",QSizePolicy." << sizeType << ",QSizePolicy.Minimum)" << endl; + + return objName; +} + +/*! + Creates a set-call for property \a exclusiveProp of the object + given in \a e. + + If the object does not have this property, the function does nothing. + + Exclusive properties are used to generate the implementation of + application font or palette change handlers in createFormImpl(). + + */ +void Uic::createExclusiveProperty( const QDomElement & e, const QString& exclusiveProp ) +{ + QDomElement n; + QString objClass = getClassName( e ); + if ( objClass.isEmpty() ) + return; + QString objName = getObjectName( e ); + if ( objClass.isEmpty() ) + return; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "property" ) { + bool stdset = toBool( n.attribute( "stdset" ) ); + QDomElement n2 = n.firstChild().toElement(); + if ( n2.tagName() == "name" ) { + QString prop = n2.firstChild().toText().data(); + if ( prop != exclusiveProp ) + continue; + QString value = setObjectProperty( objClass, objName, prop, n2.nextSibling().toElement(), stdset ); + if ( value.isEmpty() ) + continue; + out << indent << objName << ".setProperty('" << prop << "',QVariant(" << value << "))" << endl; + } + } + } + +} + + +const char* const ColorRole[] = { + "Foreground", "Button", "Light", "Midlight", "Dark", "Mid", + "Text", "BrightText", "ButtonText", "Base", "Background", "Shadow", + "Highlight", "HighlightedText", 0 +}; + + +/*! + Attention: this function has to be in sync with Resource::setWidgetProperty(). If you change one, change both. + */ +QString Uic::setObjectProperty( const QString& objClass, const QString& obj, const QString &prop, const QDomElement &e, bool stdset ) +{ + QString v; + if ( e.tagName() == "rect" ) { + QDomElement n3 = e.firstChild().toElement(); + int x = 0, y = 0, w = 0, h = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "x" ) + x = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "y" ) + y = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "width" ) + w = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "height" ) + h = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = "QRect(%1,%2,%3,%4)"; + v = v.arg(x).arg(y).arg(w).arg(h); + + } else if ( e.tagName() == "point" ) { + QDomElement n3 = e.firstChild().toElement(); + int x = 0, y = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "x" ) + x = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "y" ) + y = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = "QPoint(%1,%2)"; + v = v.arg(x).arg(y); + } else if ( e.tagName() == "size" ) { + QDomElement n3 = e.firstChild().toElement(); + int w = 0, h = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "width" ) + w = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "height" ) + h = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = "QSize(%1,%2)"; + v = v.arg(w).arg(h); + } else if ( e.tagName() == "color" ) { + QDomElement n3 = e.firstChild().toElement(); + int r= 0, g = 0, b = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "red" ) + r = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "green" ) + g = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "blue" ) + b = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = "QColor(%1,%2,%3)"; + v = v.arg(r).arg(g).arg(b); + } else if ( e.tagName() == "font" ) { + QDomElement n3 = e.firstChild().toElement(); + QString fontname = "f"; + if ( !obj.isEmpty() ) { + fontname = obj + "_font"; + out << indent << fontname << " = QFont(self." << obj << ".font())" << endl; + } else { + out << indent << fontname << " = QFont(self.font())" << endl; + } + while ( !n3.isNull() ) { + if ( n3.tagName() == "family" ) + out << indent << fontname << ".setFamily('" << n3.firstChild().toText().data() << "')" << endl; + else if ( n3.tagName() == "pointsize" ) + out << indent << fontname << ".setPointSize(" << n3.firstChild().toText().data() << ")" << endl; + else if ( n3.tagName() == "bold" ) + out << indent << fontname << ".setBold(" << mkBool( n3.firstChild().toText().data() ) << ")" << endl; + else if ( n3.tagName() == "italic" ) + out << indent << fontname << ".setItalic(" << mkBool( n3.firstChild().toText().data() ) << ")" << endl; + else if ( n3.tagName() == "underline" ) + out << indent << fontname << ".setUnderline(" << mkBool( n3.firstChild().toText().data() ) << ")" << endl; + else if ( n3.tagName() == "strikeout" ) + out << indent << fontname << ".setStrikeOut(" << mkBool( n3.firstChild().toText().data() ) << ")" << endl; + n3 = n3.nextSibling().toElement(); + } + + if ( prop == "font" ) { + if ( !obj.isEmpty() ) + out << indent << "self." << obj << ".setFont(" << fontname << ")" << endl; + else + out << indent << "self.setFont(" << fontname << ")" << endl; + } else { + v = fontname; + } + } else if ( e.tagName() == "string" ) { + if ( prop == "toolTip" ) { + if ( !obj.isEmpty() ) + out << indent << "QToolTip.add(self." << obj << "," + trmacro + "(" << fixString( e.firstChild().toText().data() ) << "))" << endl; + else + out << indent << "QToolTip.add(self," + trmacro + "(" << fixString( e.firstChild().toText().data() ) << "))" << endl; + } else if ( prop == "whatsThis" ) { + if ( !obj.isEmpty() ) + out << indent << "QWhatsThis.add(self." << obj << "," << trmacro << "(" << fixString( e.firstChild().toText().data() ) << "))" << endl; + else + out << indent << "QWhatsThis.add(self," << trmacro << "(" << fixString( e.firstChild().toText().data() ) << "))" << endl; + } else { + v = trmacro + "(%1)"; + v = v.arg( fixString( e.firstChild().toText().data() ) ); + } + } else if ( e.tagName() == "cstring" ) { + v = "'%1'"; + v = v.arg( e.firstChild().toText().data() ); + } else if ( e.tagName() == "number" ) { + v = "%1"; + v = v.arg( e.firstChild().toText().data() ); + } else if ( e.tagName() == "bool" ) { + if ( stdset ) + v = "%1"; + else + v = "%1,0"; + v = v.arg( mkBool( e.firstChild().toText().data() ) ); + } else if ( e.tagName() == "pixmap" ) { + v = e.firstChild().toText().data(); + if ( !pixmapLoaderFunction.isEmpty() ) { + v.prepend( pixmapLoaderFunction + "( " ); + v.append( " )" ); + } + } else if ( e.tagName() == "iconset" ) { + v = "QIconSet(%1)"; + v = v.arg( e.firstChild().toText().data() ); + } else if ( e.tagName() == "image" ) { + v = e.firstChild().toText().data() + ".convertToImage()"; + } else if ( e.tagName() == "enum" ) { + v = "%1.%2"; + QString oc = objClass; + QString ev = e.firstChild().toText().data(); + if ( oc == "QListView" && ev == "Manual" ) // #### workaround, rename QListView::Manual of WithMode enum in 3.0 + oc = "QScrollView"; + v = v.arg( oc ).arg( ev ); + } else if ( e.tagName() == "set" ) { + QString keys( e.firstChild().toText().data() ); + QStringList lst = QStringList::split( '|', keys ); + v = ""; + for ( QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) { + v += objClass + "." + *it; + if ( it != lst.fromLast() ) + v += " | "; + } + } else if ( e.tagName() == "sizepolicy" ) { + QDomElement n3 = e.firstChild().toElement(); + QSizePolicy sp; + while ( !n3.isNull() ) { + if ( n3.tagName() == "hsizetype" ) + sp.setHorData( (QSizePolicy::SizeType)n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "vsizetype" ) + sp.setVerData( (QSizePolicy::SizeType)n3.firstChild().toText().data().toInt() ); + n3 = n3.nextSibling().toElement(); + } + QString tmp; + if ( !obj.isEmpty() ) + tmp = "self." + obj; + else + tmp = "self"; + v = "QSizePolicy(%1,%2," + tmp + ".sizePolicy().hasHeightForWidth())"; + v = v.arg( (int)sp.horData() ).arg( (int)sp.verData() ); + } else if ( e.tagName() == "palette" ) { + QPalette pal; + bool no_pixmaps = e.elementsByTagName( "pixmap" ).count() == 0; + QDomElement n; + if ( no_pixmaps ) { + n = e.firstChild().toElement(); + while ( !n.isNull() ) { + QColorGroup cg; + if ( n.tagName() == "active" ) { + cg = loadColorGroup( n ); + pal.setActive( cg ); + } else if ( n.tagName() == "inactive" ) { + cg = loadColorGroup( n ); + pal.setInactive( cg ); + } else if ( n.tagName() == "disabled" ) { + cg = loadColorGroup( n ); + pal.setDisabled( cg ); + } + n = n.nextSibling().toElement(); + } + } + if ( no_pixmaps && pal == QPalette( pal.active().button(), pal.active().background() ) ) { + v = "QPalette(QColor(%1,%2,%3),QColor(%1,%2,%3))"; + v = v.arg( pal.active().button().red() ).arg( pal.active().button().green() ).arg( pal.active().button().blue() ); + v = v.arg( pal.active().background().red() ).arg( pal.active().background().green() ).arg( pal.active().background().blue() ); + } else { + QString palette = "pal"; + if ( !pal_used ) { + out << indent << palette << " = QPalette()" << endl; + pal_used = TRUE; + } + QString cg = "cg"; + if ( !cg_used ) { + out << indent << cg << " = QColorGroup()" << endl; + cg_used = TRUE; + } + n = e.firstChild().toElement(); + while ( !n.isNull() && n.tagName() != "active") + n = n.nextSibling().toElement(); + createColorGroupImpl( cg, n ); + out << indent << palette << ".setActive(" << cg << ")" << endl; + + n = e.firstChild().toElement(); + while ( !n.isNull() && n.tagName() != "inactive") + n = n.nextSibling().toElement(); + createColorGroupImpl( cg, n ); + out << indent << palette << ".setInactive(" << cg << ")" << endl; + + n = e.firstChild().toElement(); + while ( !n.isNull() && n.tagName() != "disabled") + n = n.nextSibling().toElement(); + createColorGroupImpl( cg, n ); + out << indent << palette << ".setDisabled(" << cg << ")" << endl; + v = palette; + } + } else if ( e.tagName() == "cursor" ) { + v = "QCursor(%1)"; + v = v.arg( e.firstChild().toText().data() ); + } + return v; +} + + + +/*! + Creates a colorgroup with name \a name from the color group \a cg + */ +void Uic::createColorGroupImpl( const QString& name, const QDomElement& e ) +{ + QColorGroup cg; + int r = -1; + QDomElement n = e.firstChild().toElement(); + QString color; + while ( !n.isNull() ) { + if ( n.tagName() == "color" ) { + r++; + QColor col = DomTool::readColor( n ); + color = "QColor(%1,%2,%3)"; + color = color.arg( col.red() ).arg( col.green() ).arg( col.blue() ); + if ( col == white ) + color = "Qt.white"; + else if ( col == black ) + color = "Qt.black"; + if ( n.nextSibling().toElement().tagName() != "pixmap" ) { + out << indent << name << ".setColor(QColorGroup." << ColorRole[r] << "," << color << ")" << endl; + } + } else if ( n.tagName() == "pixmap" ) { + QString pixmap = n.firstChild().toText().data(); + if ( !pixmapLoaderFunction.isEmpty() ) { + pixmap.prepend( pixmapLoaderFunction + "(" ); + pixmap.append( ")" ); + } + out << indent << name << ".setBrush(QColorGroup." + << ColorRole[r] << ",QBrush(" << color << "," << pixmap << "))" << endl; + } + n = n.nextSibling().toElement(); + } +} + +/*! + Auxiliary function to load a color group. The colorgroup must not + contain pixmaps. + */ +QColorGroup Uic::loadColorGroup( const QDomElement &e ) +{ + QColorGroup cg; + int r = -1; + QDomElement n = e.firstChild().toElement(); + QColor col; + while ( !n.isNull() ) { + if ( n.tagName() == "color" ) { + r++; + cg.setColor( (QColorGroup::ColorRole)r, (col = DomTool::readColor( n ) ) ); + } + n = n.nextSibling().toElement(); + } + return cg; +} + + + +/*! + Registers an object with name \a name. + + The returned name is a valid variable identifier, as similar to \a + name as possible and guaranteed to be unique within the form. + + \sa registeredName(), isObjectRegistered() + */ +QString Uic::registerObject( const QString& name ) +{ + if ( objectNames.isEmpty() ) { + // some temporary variables we need + objectNames += "img"; + objectNames += "item"; + objectNames += "cg"; + objectNames += "pal"; + } + + QString result = name; + int i; + while ( ( i = result.find(' ' )) != -1 ) { + result[i] = '_'; + } + + if ( objectNames.contains( result ) ) { + int i = 2; + while ( objectNames.contains( result + "_" + QString::number(i) ) ) + i++; + result += "_"; + result += QString::number(i); + } + objectNames += result; + objectMapper.insert( name, result ); + return result; +} + +/*! + Returns the registered name for the original name \a name + or \a name if \a name wasn't registered. + + \sa registerObject(), isObjectRegistered() + */ +QString Uic::registeredName( const QString& name ) +{ + if ( !objectMapper.contains( name ) ) + return name; + return objectMapper[name]; +} + +/*! + Returns whether the object \a name was registered yet or not. + */ +bool Uic::isObjectRegistered( const QString& name ) +{ + return objectMapper.contains( name ); +} + + +/*! + Unifies the entries in stringlist \a list. Should really be a QStringList feature. + */ +QStringList Uic::unique( const QStringList& list ) +{ + QStringList result; + if (list.isEmpty() ) + return result; + QStringList l = list; + l.sort(); + result += l.first(); + for ( QStringList::Iterator it = l.begin(); it != l.end(); ++it ) { + if ( *it != result.last() ) + result += *it; + } + return result; +} + + + +/*! + Creates an instance of class \a objClass, with parent \a parent and name \a objName + */ +QString Uic::createObjectInstance( const QString& objClass, const QString& parent, const QString& objName ) +{ + + if ( objClass.mid(1) == "ComboBox" ) { + return objClass + "(0," + parent + ",'" + objName + "')"; + } + return objClass + "(" + parent + ",'" + objName + "')"; +} + +bool Uic::isLayout( const QString& name ) const +{ + return layoutObjects.contains( name ); +} + + +#if defined(BLACKADDER) +#include "ba.h" + +int BA::compilePython(const QString &fileName,const QString &outputFile, + const QString &trmacro,bool execCode) +{ +#else +int main( int argc, char * argv[] ) +{ + const char *error = 0; + QString fileName; + QString outputFile; + QString trmacro; + bool execCode = FALSE; + + for ( int n = 1; n < argc && error == 0; n++ ) { + QCString arg = argv[n]; + if ( arg[0] == '-' ) { // option + QCString opt = &arg[1]; + if ( opt[0] == 'o' ) { // output redirection + if ( opt[1] == '\0' ) { + if ( !(n < argc-1) ) { + error = "Missing output-file name"; + break; + } + outputFile = argv[++n]; + } else + outputFile = &opt[1]; + } else if ( opt == "tr" ) { + if ( opt == "tr" || opt[1] == '\0' ) { + if ( !(n < argc-1) ) { + error = "Missing tr macro."; + break; + } + trmacro = argv[++n]; + } else { + trmacro = &opt[1]; + } + } else if ( opt == "x" ) { + execCode = TRUE; + } + } else { + if (!fileName.isEmpty()) // can handle only one file + error = "Too many input files specified"; + else + fileName = argv[n]; + } + } + + if ( argc < 2 || error || fileName.isEmpty() ) { + fprintf( stderr, "PyQt user interface compiler\n" ); + if ( error ) + fprintf( stderr, "pyuic: %s\n", error ); + + fprintf( stderr, "Usage: %s [options] \n" + "\nGenerate PyQt implementation:\n" + " %s [options] \n" + "Options:\n" + "\t-o file Write output to file rather than stdout\n" + "\t-tr func Use func(...) rather than tr(...) for i18n\n" + "\t-x Generate extra code to test the class\n" + , argv[0], argv[0]); + exit( 1 ); + } +#endif + + QFile file( fileName ); + if ( !file.open( IO_ReadOnly ) ) + qFatal( "pyuic: Could not open file '%s' ", (const char *)fileName ); + + QFile fileOut; + if (!outputFile.isEmpty()) { + fileOut.setName( outputFile ); + if (!fileOut.open( IO_WriteOnly ) ) + qFatal( "pyuic: Could not open output file '%s'", (const char *)outputFile ); + } else { + fileOut.open( IO_WriteOnly, stdout ); + } + QTextStream out( &fileOut ); + out.setEncoding( QTextStream::UnicodeUTF8 ); + + QDomDocument doc; + if ( !doc.setContent( &file ) ) + qFatal( "pyuic: Failed to parse %s\n", (const char *)fileName ); + + out << "# Form implementation generated from reading ui file '" << fileName << "'" << endl; + out << "#" << endl; + out << "# Created: " << QDateTime::currentDateTime().toString() << endl; + out << "# by: The Python User Interface Compiler (pyuic) " << PYQT_VERSION << endl; + out << "#" << endl; + out << "# WARNING! All changes made in this file will be lost!" << endl; + out << endl; + out << endl; + + if (execCode) + out << "import sys" << endl; + + out << "from qt import *" << endl; + + Uic( out, doc, trmacro.isEmpty() ? QString("self.tr") : trmacro ); + + if (execCode) { + out << endl; + out << endl; + out << "if __name__ == '__main__':" << endl; + out << " a = QApplication(sys.argv)" << endl; + out << " QObject.connect(a,SIGNAL('lastWindowClosed()'),a,SLOT('quit()'))" << endl; + out << " w = " << className << "()" << endl; + out << " a.setMainWidget(w)" << endl; + out << " w.show()" << endl; + out << " a.exec_loop()" << endl; + } + + return 0; +} diff --git a/pyuic2/uic.h b/pyuic2/uic.h new file mode 100644 index 0000000..c3fdde3 --- /dev/null +++ b/pyuic2/uic.h @@ -0,0 +1,133 @@ +/********************************************************************** +** Copyright (C) 2000 Troll Tech AS. All rights reserved. +** Copyright (C) 2000, 2001 Phil Thompson +** +** This file is part of Qt GUI Designer. +** +** This file may be distributed under the terms of the GNU General +** Public License version 2 as published by the Free Software +** Foundation and appearing in the file COPYING included in the +** packaging of this file. If you did not get the file, send email +** to info@trolltech.com +** +** The file is provided AS IS with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#ifndef UIC_H +#define UIC_H + +#include +#include +#include +#include +#include +#include +#include + + +#define PYQT_VERSION "3.18.1" + + +class Uic : public Qt +{ +public: + Uic( QTextStream& out, QDomDocument doc, const QString &trm ); + + void createFormImpl( const QDomElement &e ); + + QString createObjectImpl( const QDomElement &e, const QString& parentClass, const QString& parent, const QString& layout = QString::null ); + QString createLayoutImpl( const QDomElement &e, const QString& parentClass, const QString& parent, const QString& layout = QString::null ); + QString createObjectInstance( const QString& objClass, const QString& parent, const QString& objName ); + QString createSpacerImpl( const QDomElement &e, const QString& parentClass, const QString& parent, const QString& layout = QString::null ); + void createExclusiveProperty( const QDomElement & e, const QString& exclusiveProp ); + QString createListBoxItemImpl( const QDomElement &e, const QString &parent ); + QString createIconViewItemImpl( const QDomElement &e, const QString &parent ); + QString createListViewColumnImpl( const QDomElement &e, const QString &parent ); + QString createListViewItemImpl( const QDomElement &e, const QString &parent, + const QString &parentItem ); + void createColorGroupImpl( const QString& cg, const QDomElement& e ); + QColorGroup loadColorGroup( const QDomElement &e ); + + QString getClassName( const QDomElement& e ); + QString getObjectName( const QDomElement& e ); + QString getLayoutName( const QDomElement& e ); + + QString setObjectProperty( const QString& objClass, const QString& obj, const QString &prop, const QDomElement &e, bool stdset ); + + QString registerObject( const QString& name ); + QString registeredName( const QString& name ); + bool isObjectRegistered( const QString& name ); + QStringList unique( const QStringList& ); + +private: + void pushIndent() + { + ++nrindents; + setIndent(); + } + + void popIndent() + { + --nrindents; + setIndent(); + } + + void setIndent() + { + indent = ""; + + for (int i = 0; i < nrindents; ++i) + indent += newindent; + } + + void initIndent() + { + newindent = " "; + indent = ""; + nrindents = 0; + } + + QString indent, newindent; + int nrindents; + + QTextStream& out; + QStringList objectNames; + QMap objectMapper; + QStringList tags; + QStringList layouts; + QString formName; + QString lastItem; + QString trmacro; + + struct Buddy + { + Buddy( const QString& k, const QString& b ) + : key( k ), buddy( b ) {} + Buddy(){}; // for valuelist + QString key; + QString buddy; + bool operator==( const Buddy& other ) const + { return (key == other.key); } + }; + struct CustomInclude + { + QString header; + QString location; + }; + QValueList buddies; + + QStringList layoutObjects; + bool isLayout( const QString& name ) const; + + uint item_used : 1; + uint cg_used : 1; + uint pal_used : 1; + + QString pixmapLoaderFunction; + QString nameOfClass; +}; + +#endif diff --git a/pyuic2/widgetdatabase.cpp b/pyuic2/widgetdatabase.cpp new file mode 100644 index 0000000..0733fce --- /dev/null +++ b/pyuic2/widgetdatabase.cpp @@ -0,0 +1,640 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include // HP-UX compiler needs this here + +#include "widgetdatabase.h" + +#if defined(DESIGNER) +#include "../designer/formwindow.h" +#include "../designer/pixmapchooser.h" +#endif + +//#include "../integration/kdevelop/kdewidgets.h" + +#include +#include +#include +#include +#include + +#include + +const int dbsize = 300; +const int dbcustom = 200; +const int dbdictsize = 211; +static WidgetDatabaseRecord* db[ dbsize ]; +static QDict *className2Id = 0; +static int dbcount = 0; +static int dbcustomcount = 200; +static QStrList *wGroups; +static QStrList *invisibleGroups; +static bool whatsThisLoaded = FALSE; + + +WidgetDatabaseRecord::WidgetDatabaseRecord() +{ + isContainer = FALSE; + icon = 0; + nameCounter = 0; +} + +WidgetDatabaseRecord::~WidgetDatabaseRecord() +{ + delete icon; +} + + +/*! + \class WidgetDatabase widgetdatabase.h + \brief The WidgetDatabase class holds information about widgets + + The WidgetDatabase holds information about widgets like toolTip(), + iconSet(), ... It works Id-based, so all access functions take the + widget id as parameter. To get the id for a widget (classname), use + idFromClassName(). + + All access functions are static. Having multiple widgetdatabases in + one application doesn't make sense anyway and so you don't need more + than an instance of the widgetdatabase. + + For creating widgets, layouts, etc. see WidgetFactory. +*/ + +/*! + Creatse widget database. Does nothing +*/ + +WidgetDatabase::WidgetDatabase() +{ +} + +/*! Sets up the widget database. If the static widgetdatabase already + exists, the functions returns immediately. +*/ + +void WidgetDatabase::setupDataBase() +{ + if ( dbcount ) + return; + + wGroups = new QStrList; + invisibleGroups = new QStrList; + invisibleGroups->append( "Forms" ); + invisibleGroups->append( "Temp" ); + className2Id = new QDict( dbdictsize ); + className2Id->setAutoDelete( TRUE ); + + WidgetDatabaseRecord *r = 0; + + r = new WidgetDatabaseRecord; + r->iconSet = "pushbutton.xpm"; + r->name = "QPushButton"; + r->group = widgetGroup( "Buttons" ); + r->toolTip = "Push Button"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "toolbutton.xpm"; + r->name = "QToolButton"; + r->group = widgetGroup( "Buttons" ); + r->toolTip = "Tool Button"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "radiobutton.xpm"; + r->name = "QRadioButton"; + r->group = widgetGroup( "Buttons" ); + r->toolTip = "Radio Button"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "checkbox.xpm"; + r->name = "QCheckBox"; + r->group = widgetGroup( "Buttons" ); + r->toolTip = "Check Box"; + + + + + append( r ); + r = new WidgetDatabaseRecord; + r->iconSet = "groupbox.xpm"; + r->name = "QGroupBox"; + r->group = widgetGroup( "Containers" ); + r->toolTip = "Group Box"; + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "buttongroup.xpm"; + r->name = "QButtonGroup"; + r->group = widgetGroup( "Containers" ); + r->toolTip = "Button Group"; + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "frame.xpm"; + r->name = "QFrame"; + r->group = widgetGroup( "Containers" ); + r->toolTip = "Frame"; + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "tabwidget.xpm"; + r->name = "QTabWidget"; + r->group = widgetGroup( "Containers" ); + r->toolTip = "Tabwidget"; + r->isContainer = TRUE; + + append( r ); + + + r = new WidgetDatabaseRecord; + r->iconSet = "listbox.xpm"; + r->name = "QListBox"; + r->group = widgetGroup( "Views" ); + r->toolTip = "List Box"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "listview.xpm"; + r->name = "QListView"; + r->group = widgetGroup( "Views" ); + r->toolTip = "List View"; + + append( r ); + +#if defined(QT_MODULE_ICONVIEW) || defined(UIC) + r = new WidgetDatabaseRecord; + r->iconSet = "iconview.xpm"; + r->name = "QIconView"; + r->group = widgetGroup( "Views" ); + r->toolTip = "Icon View"; + + append( r ); +#endif + +#if defined(QT_MODULE_TABLE) + r = new WidgetDatabaseRecord; + r->iconSet = "table.xpm"; + r->name = "QTable"; + r->group = widgetGroup( "Views" ); + r->toolTip = "Table"; + + append( r ); +#endif + + + r = new WidgetDatabaseRecord; + r->iconSet = "lineedit.xpm"; + r->name = "QLineEdit"; + r->group = widgetGroup( "Input" ); + r->toolTip = "Line Edit"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "spinbox.xpm"; + r->name = "QSpinBox"; + r->group = widgetGroup( "Input" ); + r->toolTip = "Spin Box"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "multilineedit.xpm"; + r->name = "QMultiLineEdit"; + r->group = widgetGroup( "Input" ); + r->toolTip = "Multi Line Edit"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "combobox.xpm"; + r->name = "QComboBox"; + r->group = widgetGroup( "Input" ); + r->toolTip = "Combo Box"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "slider.xpm"; + r->name = "QSlider"; + r->group = widgetGroup( "Input" ); + r->toolTip = "Slider"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "dial.xpm"; + r->name = "QDial"; + r->group = widgetGroup( "Input" ); + r->toolTip = "Dial"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "label.xpm"; + r->name = "QLabel"; + r->group = widgetGroup( "Temp" ); + r->toolTip = "Label"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "label.xpm"; + r->name = "TextLabel"; + r->group = widgetGroup( "Display" ); + r->toolTip = "Text Label"; + r->whatsThis = "The Text Label provides a widget to display static text."; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "pixlabel.xpm"; + r->name = "PixmapLabel"; + r->group = widgetGroup( "Display" ); + r->toolTip = "Pixmap Label"; + r->whatsThis = "The Pixmap Label provides a widget to display pixmaps."; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "lcdnumber.xpm"; + r->name = "QLCDNumber"; + r->group = widgetGroup( "Display" ); + r->toolTip = "LCD Number"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "line.xpm"; + r->name = "Line"; + r->group = widgetGroup( "Display" ); + r->toolTip = "Line"; + r->includeFile = "qframe.h"; + r->whatsThis = "The Line widget provides horizontal and vertical lines."; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "progress.xpm"; + r->name = "QProgressBar"; + r->group = widgetGroup( "Display" ); + r->toolTip = "Progress Bar"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "textview.xpm"; + r->name = "QTextView"; + r->group = widgetGroup( "Display" ); + r->toolTip = "Text View"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "textbrowser.xpm"; + r->name = "QTextBrowser"; + r->group = widgetGroup( "Display" ); + r->toolTip = "Text Browser"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "spacer.xpm"; + r->name = "Spacer"; + r->group = widgetGroup( "Temp" ); + r->toolTip = "Spacer"; + r->whatsThis = "The Spacer provides horizontal and vertical spacing to be able to manipulate the bahviour of layouts."; + + append( r ); + + r = new WidgetDatabaseRecord; + r->name = "QWidget"; + r->isContainer = FALSE; + r->group = widgetGroup( "Forms" ); + + append( r ); + + r = new WidgetDatabaseRecord; + r->name = "QDialog"; + r->group = widgetGroup( "Forms" ); + r->isContainer = FALSE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->name = "QWizard"; + r->group = widgetGroup( "Forms" ); + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->name = "QDesignerWizard"; + r->group = widgetGroup( "Forms" ); + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->name = "QLayoutWidget"; + r->group = widgetGroup( "Temp" ); + r->includeFile = ""; + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "tabwidget.xpm"; + r->name = "QDesignerTabWidget"; + r->group = widgetGroup( "Temp" ); + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "tabwidget.xpm"; + r->name = "QDesignerWidget"; + r->group = widgetGroup( "Temp" ); + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "tabwidget.xpm"; + r->name = "QDesignerDialog"; + r->group = widgetGroup( "Temp" ); + r->isContainer = TRUE; + + append( r ); + +// qt_init_kde_widget_database(); +} + +/*! + Returns the number of elements in the widget database. +*/ + +int WidgetDatabase::count() +{ + setupDataBase(); + return dbcount; +} + +/*! + Returns the id at which the ids of custom widgets start. +*/ + +int WidgetDatabase::startCustom() +{ + setupDataBase(); + return dbcustom; +} + +/*! Returns the iconset which represents the class registered as \a + id. +*/ + +QIconSet WidgetDatabase::iconSet( int id ) +{ + setupDataBase(); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return QIconSet(); +#if defined(DESIGNER) + if ( !r->icon ) + r->icon = new QIconSet( PixmapChooser::loadPixmap( r->iconSet, PixmapChooser::Small ), + PixmapChooser::loadPixmap( r->iconSet, PixmapChooser::Large ) ); + return *r->icon; +#endif + + return QIconSet(); +} + +/*! + Returns the classname of the widget which is registered as \a id. +*/ + +QString WidgetDatabase::className( int id ) +{ + setupDataBase(); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return QString::null; + return r->name; +} + +/*! + Returns the group to which the widget registered as \a id belongs. +*/ + +QString WidgetDatabase::group( int id ) +{ + setupDataBase(); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return QString::null; + return r->group; +} + +/*! Returns the tooltip text of the widget which is registered as \a + id. +*/ + +QString WidgetDatabase::toolTip( int id ) +{ + setupDataBase(); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return QString::null; + return r->toolTip; +} + +/*! Returns the what's this? test of the widget which is registered + as \a id. +*/ + +QString WidgetDatabase::whatsThis( int id ) +{ + setupDataBase(); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return QString::null; + return r->whatsThis; +} + +/*! + Returns the include file if the widget which is registered as \a id. +*/ + +QString WidgetDatabase::includeFile( int id ) +{ + setupDataBase(); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return QString::null; + if ( r->includeFile.isNull() ) + return r->name.lower() + ".h"; + return r->includeFile; +} + +/*! Returns wheather the widget registered as \a id is a container + (can have children) or not. +*/ + +bool WidgetDatabase::isContainer( int id ) +{ + setupDataBase(); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return FALSE; + return r->isContainer; +} + +QString WidgetDatabase::createWidgetName( int id ) +{ + setupDataBase(); + QString n = className( id ); + if ( n == "QLayoutWidget" ) + n = "Layout"; + if ( n[ 0 ] == 'Q' ) + n = n.mid( 1 ); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return n; + n += QString::number( ++r->nameCounter ); + return n; +} + +/*! Returns the id for \a name or -1 if \a name is unknown. + */ +int WidgetDatabase::idFromClassName( const QString &name ) +{ + setupDataBase(); + if ( name.isEmpty() ) + return 0; + int *i = className2Id->find( name ); + if ( i ) + return *i; + if ( name == "FormWindow" ) + return idFromClassName( "QLayoutWidget" ); + return -1; +} + +WidgetDatabaseRecord *WidgetDatabase::at( int index ) +{ + if ( index < 0 ) + return 0; + if ( index >= dbcustom && index < dbcustomcount ) + return db[ index ]; + if ( index < dbcount ) + return db[ index ]; + return 0; +} + +void WidgetDatabase::insert( int index, WidgetDatabaseRecord *r ) +{ + if ( index < 0 || index >= dbsize ) + return; + db[ index ] = r; + className2Id->insert( r->name, new int( index ) ); + if ( index < dbcustom ) + dbcount = QMAX( dbcount, index ); +} + +void WidgetDatabase::append( WidgetDatabaseRecord *r ) +{ + insert( dbcount++, r ); +} + +QString WidgetDatabase::widgetGroup( const QString &g ) +{ + if ( wGroups->find( g ) == -1 ) + wGroups->append( g ); + return g; +} + +QString WidgetDatabase::widgetGroup( int i ) +{ + setupDataBase(); + if ( i >= 0 && i < (int)wGroups->count() ) + return wGroups->at( i ); + return QString::null; +} + +int WidgetDatabase::numWidgetGroups() +{ + setupDataBase(); + return wGroups->count(); +} + +bool WidgetDatabase::isGroupVisible( const QString &g ) +{ + setupDataBase(); + return invisibleGroups->find( g ) == -1; +} + +int WidgetDatabase::addCustomWidget( WidgetDatabaseRecord *r ) +{ + insert( dbcustomcount++, r ); + return dbcustomcount - 1; +} + +bool WidgetDatabase::isCustomWidget( int id ) +{ + if ( id >= dbcustom && id < dbcustomcount ) + return TRUE; + return FALSE; +} + +bool WidgetDatabase::isWhatsThisLoaded() +{ + return whatsThisLoaded; +} + +void WidgetDatabase::loadWhatsThis( const QString &docPath ) +{ + QString whatsthisFile = docPath + "/whatsthis"; + QFile f( whatsthisFile ); + if ( !f.open( IO_ReadOnly ) ) + return; + QTextStream ts( &f ); + while ( !ts.atEnd() ) { + QString s = ts.readLine(); + QStringList l = QStringList::split( " | ", s ); + int id = idFromClassName( l[ 1 ] ); + WidgetDatabaseRecord *r = at( id ); + if ( r ) + r->whatsThis = l[ 0 ]; + } + whatsThisLoaded = TRUE; +} diff --git a/pyuic2/widgetdatabase.h b/pyuic2/widgetdatabase.h new file mode 100644 index 0000000..a28cd5f --- /dev/null +++ b/pyuic2/widgetdatabase.h @@ -0,0 +1,75 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#ifndef WIDGETDATABASE_H +#define WIDGETDATABASE_H + +#include +#include +#include + +struct WidgetDatabaseRecord +{ + WidgetDatabaseRecord(); + ~WidgetDatabaseRecord(); + QString iconSet, name, group, toolTip, whatsThis, includeFile; + uint isContainer : 1; + QIconSet *icon; + int nameCounter; +}; + +class WidgetDatabase : public Qt +{ +public: + WidgetDatabase(); + static void setupDataBase(); + + static int count(); + static int startCustom(); + + static QIconSet iconSet( int id ); + static QString className( int id ); + static QString group( int id ); + static QString toolTip( int id ); + static QString whatsThis( int id ); + static QString includeFile( int id ); + static bool isContainer( int id ); + + static int idFromClassName( const QString &name ); + static QString createWidgetName( int id ); + + static WidgetDatabaseRecord *at( int index ); + static void insert( int index, WidgetDatabaseRecord *r ); + static void append( WidgetDatabaseRecord *r ); + + static QString widgetGroup( const QString &g ); + static QString widgetGroup( int i ); + static int numWidgetGroups(); + static bool isGroupVisible( const QString &g ); + + static int addCustomWidget( WidgetDatabaseRecord *r ); + static bool isCustomWidget( int id ); + + static bool isWhatsThisLoaded(); + static void loadWhatsThis( const QString &docPath ); + +}; + +#endif diff --git a/pyuic3/LICENSE.GPL b/pyuic3/LICENSE.GPL new file mode 100644 index 0000000..c7aea18 --- /dev/null +++ b/pyuic3/LICENSE.GPL @@ -0,0 +1,280 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/pyuic3/domtool.cpp b/pyuic3/domtool.cpp new file mode 100644 index 0000000..b3514a0 --- /dev/null +++ b/pyuic3/domtool.cpp @@ -0,0 +1,447 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include "domtool.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +/*! + \class DomTool domtool.h + \brief Tools for the dom + + A collection of static functions used by Resource (part of the + designer) and Uic. + +*/ + +/*! + Returns the contents of property \a name of object \a e as + variant or the variant passed as \a defValue if the property does + not exist. + + \sa hasProperty() +*/ +QVariant DomTool::readProperty( const QDomElement& e, const QString& name, const QVariant& defValue, QString& comment ) +{ + QDomElement n; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "property" ) { + if ( n.attribute( "name" ) != name ) + continue; + return elementToVariant( n.firstChild().toElement(), defValue, comment ); + } + } + return defValue; +} + + +/*! + \overload + */ +QVariant DomTool::readProperty( const QDomElement& e, const QString& name, const QVariant& defValue ) +{ + QString comment; + return readProperty( e, name, defValue, comment ); +} + +/*! + Returns wheter object \a e defines property \a name or not. + + \sa readProperty() + */ +bool DomTool::hasProperty( const QDomElement& e, const QString& name ) +{ + QDomElement n; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "property" ) { + if ( n.attribute( "name" ) != name ) + continue; + return TRUE; + } + } + return FALSE; +} + +QStringList DomTool::propertiesOfType( const QDomElement& e, const QString& type ) +{ + QStringList result; + QDomElement n; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "property" ) { + QDomElement n2 = n.firstChild().toElement(); + if ( n2.tagName() == type ) + result += n.attribute( "name" ); + } + } + return result; +} + + +QVariant DomTool::elementToVariant( const QDomElement& e, const QVariant& defValue ) +{ + QString dummy; + return elementToVariant( e, defValue, dummy ); +} + +/*! + Interprets element \a e as variant and returns the result of the interpretation. + */ +QVariant DomTool::elementToVariant( const QDomElement& e, const QVariant& defValue, QString &comment ) +{ + QVariant v; + if ( e.tagName() == "rect" ) { + QDomElement n3 = e.firstChild().toElement(); + int x = 0, y = 0, w = 0, h = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "x" ) + x = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "y" ) + y = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "width" ) + w = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "height" ) + h = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = QVariant( QRect( x, y, w, h ) ); + } else if ( e.tagName() == "point" ) { + QDomElement n3 = e.firstChild().toElement(); + int x = 0, y = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "x" ) + x = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "y" ) + y = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = QVariant( QPoint( x, y ) ); + } else if ( e.tagName() == "size" ) { + QDomElement n3 = e.firstChild().toElement(); + int w = 0, h = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "width" ) + w = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "height" ) + h = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = QVariant( QSize( w, h ) ); + } else if ( e.tagName() == "color" ) { + v = QVariant( readColor( e ) ); + } else if ( e.tagName() == "font" ) { + QDomElement n3 = e.firstChild().toElement(); + QFont f( defValue.toFont() ); + while ( !n3.isNull() ) { + if ( n3.tagName() == "family" ) + f.setFamily( n3.firstChild().toText().data() ); + else if ( n3.tagName() == "pointsize" ) + f.setPointSize( n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "bold" ) + f.setBold( n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "italic" ) + f.setItalic( n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "underline" ) + f.setUnderline( n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "strikeout" ) + f.setStrikeOut( n3.firstChild().toText().data().toInt() ); + n3 = n3.nextSibling().toElement(); + } + v = QVariant( f ); + } else if ( e.tagName() == "string" ) { + v = QVariant( e.firstChild().toText().data() ); + QDomElement n = e; + n = n.nextSibling().toElement(); + if ( n.tagName() == "comment" ) + comment = n.firstChild().toText().data(); + } else if ( e.tagName() == "cstring" ) { + v = QVariant( QCString( e.firstChild().toText().data() ) ); + } else if ( e.tagName() == "number" ) { + bool ok = TRUE; + v = QVariant( e.firstChild().toText().data().toInt( &ok ) ); + if ( !ok ) + v = QVariant( e.firstChild().toText().data().toDouble() ); + } else if ( e.tagName() == "bool" ) { + QString t = e.firstChild().toText().data(); + v = QVariant( t == "true" || t == "1", 0 ); + } else if ( e.tagName() == "pixmap" ) { + v = QVariant( e.firstChild().toText().data() ); + } else if ( e.tagName() == "iconset" ) { + v = QVariant( e.firstChild().toText().data() ); + } else if ( e.tagName() == "image" ) { + v = QVariant( e.firstChild().toText().data() ); + } else if ( e.tagName() == "enum" ) { + v = QVariant( e.firstChild().toText().data() ); + } else if ( e.tagName() == "set" ) { + v = QVariant( e.firstChild().toText().data() ); + } else if ( e.tagName() == "sizepolicy" ) { + QDomElement n3 = e.firstChild().toElement(); + QSizePolicy sp; + while ( !n3.isNull() ) { + if ( n3.tagName() == "hsizetype" ) + sp.setHorData( (QSizePolicy::SizeType)n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "vsizetype" ) + sp.setVerData( (QSizePolicy::SizeType)n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "horstretch" ) + sp.setHorStretch( n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "verstretch" ) + sp.setVerStretch( n3.firstChild().toText().data().toInt() ); + n3 = n3.nextSibling().toElement(); + } + v = QVariant( sp ); + } else if ( e.tagName() == "cursor" ) { + v = QVariant( QCursor( e.firstChild().toText().data().toInt() ) ); + } else if ( e.tagName() == "stringlist" ) { + QStringList lst; + QDomElement n; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) + lst << n.firstChild().toText().data(); + v = QVariant( lst ); + } else if ( e.tagName() == "date" ) { + QDomElement n3 = e.firstChild().toElement(); + int y, m, d; + y = m = d = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "year" ) + y = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "month" ) + m = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "day" ) + d = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = QVariant( QDate( y, m, d ) ); + } else if ( e.tagName() == "time" ) { + QDomElement n3 = e.firstChild().toElement(); + int h, m, s; + h = m = s = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "hour" ) + h = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "minute" ) + m = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "second" ) + s = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = QVariant( QTime( h, m, s ) ); + } else if ( e.tagName() == "datetime" ) { + QDomElement n3 = e.firstChild().toElement(); + int h, mi, s, y, mo, d ; + h = mi = s = y = mo = d = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "hour" ) + h = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "minute" ) + mi = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "second" ) + s = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "year" ) + y = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "month" ) + mo = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "day" ) + d = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = QVariant( QDateTime( QDate( y, mo, d ), QTime( h, mi, s ) ) ); + } + return v; +} + + +/*! Returns the color which is returned in the dom element \a e. + */ + +QColor DomTool::readColor( const QDomElement &e ) +{ + QDomElement n = e.firstChild().toElement(); + int r= 0, g = 0, b = 0; + while ( !n.isNull() ) { + if ( n.tagName() == "red" ) + r = n.firstChild().toText().data().toInt(); + else if ( n.tagName() == "green" ) + g = n.firstChild().toText().data().toInt(); + else if ( n.tagName() == "blue" ) + b = n.firstChild().toText().data().toInt(); + n = n.nextSibling().toElement(); + } + + return QColor( r, g, b ); +} + +/*! + Returns the contents of attribute \a name of object \a e as + variant or the variant passed as \a defValue if the attribute does + not exist. + + \sa hasAttribute() + */ +QVariant DomTool::readAttribute( const QDomElement& e, const QString& name, const QVariant& defValue, QString& comment ) +{ + QDomElement n; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "attribute" ) { + if ( n.attribute( "name" ) != name ) + continue; + return elementToVariant( n.firstChild().toElement(), defValue, comment ); + } + } + return defValue; +} + +/*! + \overload +*/ +QVariant DomTool::readAttribute( const QDomElement& e, const QString& name, const QVariant& defValue ) +{ + QString comment; + return readAttribute( e, name, defValue, comment ); +} + +/*! + Returns wheter object \a e defines attribute \a name or not. + + \sa readAttribute() + */ +bool DomTool::hasAttribute( const QDomElement& e, const QString& name ) +{ + QDomElement n; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "attribute" ) { + if ( n.attribute( "name" ) != name ) + continue; + return TRUE; + } + } + return FALSE; +} + +static bool toBool( const QString& s ) +{ + return s == "true" || s.toInt() != 0; +} + +/*! + Convert Qt 2.x format to Qt 3.0 format if necessary +*/ +void DomTool::fixDocument( QDomDocument& doc ) +{ + QDomElement e; + QDomNode n; + QDomNodeList nl; + int i = 0; + + e = doc.firstChild().toElement(); + if ( e.tagName() != "UI" ) + return; + + // latest version, don't do anything + if ( e.hasAttribute("version") && e.attribute("version").toDouble() > 3.0 ) + return; + + nl = doc.elementsByTagName( "property" ); + + // in 3.0, we need to fix a spelling error + if ( e.hasAttribute("version") && e.attribute("version").toDouble() == 3.0 ) { + for ( i = 0; i < (int) nl.length(); i++ ) { + QDomElement el = nl.item(i).toElement(); + QString s = el.attribute( "name" ); + if ( s == "resizeable" ) { + el.removeAttribute( "name" ); + el.setAttribute( "name", "resizable" ); + } + } + return; + } + + + // in versions smaller than 3.0 we need to change more + e.setAttribute( "version", 3.0 ); + + e.setAttribute("stdsetdef", 1 ); + for ( i = 0; i < (int) nl.length(); i++ ) { + e = nl.item(i).toElement(); + QString name; + QDomElement n2 = e.firstChild().toElement(); + if ( n2.tagName() == "name" ) { + name = n2.firstChild().toText().data(); + if ( name == "resizeable" ) + e.setAttribute( "name", "resizable" ); + else + e.setAttribute( "name", name ); + e.removeChild( n2 ); + } + bool stdset = toBool( e.attribute( "stdset" ) ); + if ( stdset || name == "toolTip" || name == "whatsThis" || + name == "buddy" || + e.parentNode().toElement().tagName() == "item" || + e.parentNode().toElement().tagName() == "spacer" || + e.parentNode().toElement().tagName() == "column" + ) + e.removeAttribute( "stdset" ); + else + e.setAttribute( "stdset", 0 ); + } + + nl = doc.elementsByTagName( "attribute" ); + for ( i = 0; i < (int) nl.length(); i++ ) { + e = nl.item(i).toElement(); + QString name; + QDomElement n2 = e.firstChild().toElement(); + if ( n2.tagName() == "name" ) { + name = n2.firstChild().toText().data(); + e.setAttribute( "name", name ); + e.removeChild( n2 ); + } + } + + nl = doc.elementsByTagName( "image" ); + for ( i = 0; i < (int) nl.length(); i++ ) { + e = nl.item(i).toElement(); + QString name; + QDomElement n2 = e.firstChild().toElement(); + if ( n2.tagName() == "name" ) { + name = n2.firstChild().toText().data(); + e.setAttribute( "name", name ); + e.removeChild( n2 ); + } + } + + nl = doc.elementsByTagName( "widget" ); + for ( i = 0; i < (int) nl.length(); i++ ) { + e = nl.item(i).toElement(); + QString name; + QDomElement n2 = e.firstChild().toElement(); + if ( n2.tagName() == "class" ) { + name = n2.firstChild().toText().data(); + e.setAttribute( "class", name ); + e.removeChild( n2 ); + } + } + +} + diff --git a/pyuic3/domtool.h b/pyuic3/domtool.h new file mode 100644 index 0000000..25b795d --- /dev/null +++ b/pyuic3/domtool.h @@ -0,0 +1,47 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#ifndef DOMTOOL_H +#define DOMTOOL_H + +#include +#include + +class QDomElement; +class QDomDocument; + +class DomTool : public Qt +{ +public: + static QVariant readProperty( const QDomElement& e, const QString& name, const QVariant& defValue ); + static QVariant readProperty( const QDomElement& e, const QString& name, const QVariant& defValue, QString& comment ); + static bool hasProperty( const QDomElement& e, const QString& name ); + static QStringList propertiesOfType( const QDomElement& e, const QString& type ); + static QVariant elementToVariant( const QDomElement& e, const QVariant& defValue ); + static QVariant elementToVariant( const QDomElement& e, const QVariant& defValue, QString &comment ); + static QVariant readAttribute( const QDomElement& e, const QString& name, const QVariant& defValue ); + static QVariant readAttribute( const QDomElement& e, const QString& name, const QVariant& defValue, QString& comment ); + static bool hasAttribute( const QDomElement& e, const QString& name ); + static QColor readColor( const QDomElement &e ); + static void fixDocument( QDomDocument& ); +}; + + +#endif // DOMTOOL_H diff --git a/pyuic3/embed.cpp b/pyuic3/embed.cpp new file mode 100644 index 0000000..04f6494 --- /dev/null +++ b/pyuic3/embed.cpp @@ -0,0 +1,323 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (c) 2001 Phil Thompson +** Copyright (c) 2002 Riverbank Computing Limited +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include "uic.h" +#include +#include +#include +#include +#include +#include +#include + +// on embedded, we do not compress image data. Rationale: by mapping +// the ready-only data directly into memory we are both faster and +// more memory efficient +#if (QT_VERSION < 0x030100 || defined(Q_WS_QWS)) && !defined(QT_NO_IMAGE_COLLECTION_COMPRESSION) +#define QT_NO_IMAGE_COLLECTION_COMPRESSION +#endif + +struct EmbedImage +{ + ~EmbedImage() { delete[] colorTable; } + int width, height, depth; + int numColors; + QRgb* colorTable; + QString name; + QString cname; + bool alpha; +#ifndef QT_NO_IMAGE_COLLECTION_COMPRESSION + ulong compressed; +#endif +}; + +static QString convertToCIdentifier( const char *s ) +{ + QString r = s; + int len = r.length(); + if ( len > 0 && !isalpha( (char)r[0].latin1() ) ) + r[0] = '_'; + for ( int i=1; i> 4) & 15]; + s += hexdigits[v & 15]; + if ( i == len-1 ) + s += "\"\n"; + } + if ( s.length() ) + out << (const char*)s; + return (ulong)len; +} + +static void embedData( QTextStream& out, const QRgb* input, int n ) +{ + out << hex; + const QRgb *v = input; + for ( int i=0; i list_image; + list_image.setAutoDelete( TRUE ); + int image_count = 0; + for ( it = images.begin(); it != images.end(); ++it ) { + QImage img; + if ( !img.load( *it ) ) { + fprintf( stderr, "pyuic: cannot load image file %s\n", (*it).latin1() ); + continue; + } + EmbedImage *e = new EmbedImage; + e->width = img.width(); + e->height = img.height(); + e->depth = img.depth(); + e->numColors = img.numColors(); + e->colorTable = new QRgb[e->numColors]; + e->alpha = img.hasAlphaBuffer(); + memcpy(e->colorTable, img.colorTable(), e->numColors*sizeof(QRgb)); + QFileInfo fi( *it ); + e->name = fi.fileName(); + e->cname = QString("image_%1").arg( image_count++); + list_image.append( e ); + out << "# " << *it << "\n"; + QString s; + if ( e->depth == 1 ) + img = img.convertBitOrder(QImage::BigEndian); + out << s.sprintf( "%s_data =", + (const char *)e->cname ); +#ifndef QT_NO_IMAGE_COLLECTION_COMPRESSION + e->compressed = +#endif + embedData( out, img.bits(), img.numBytes() ); + out << "\n"; + if ( e->numColors ) { + out << s.sprintf( "%s_ctable = [", + (const char *)e->cname ); + embedData( out, e->colorTable, e->numColors ); + out << "\n]\n\n"; + } + } + + if ( !list_image.isEmpty() ) { + out << indent << "embed_image_vec = [\n"; + ++indent; + EmbedImage *e = list_image.first(); + while ( e ) { + out << indent << "[" + << e->width << "," + << e->height << "," + << e->depth << "," + << e->cname << "_data," +#ifndef QT_NO_IMAGE_COLLECTION_COMPRESSION + << e->compressed << "," +#endif + << e->numColors << ","; + if ( e->numColors ) + out << e->cname << "_ctable,"; + else + out << "None,"; + if ( e->alpha ) + out << "1,"; + else + out << "0,"; + out << "\"" << e->name << "\"],\n"; + e = list_image.next(); + } + --indent; + out << indent << "]\n"; + + out << "\n" + "\n" + "def uic_findImage(name):\n"; + ++indent; + out << indent << "global embed_image_vec\n"; + out << "\n"; +#ifndef QT_NO_IMAGE_COLLECTION_COMPRESSION + out << indent << "for (w,h,depth,data,comp,nrCol,colTab,alpha,iname) in embed_image_vec:" << endl; +#else + out << indent << "for (w,h,depth,data,nrCol,colTab,alpha,iname) in embed_image_vec:" << endl; +#endif + ++indent; + out << indent << "if iname == str(name):" << endl; + ++indent; +#ifndef QT_NO_IMAGE_COLLECTION_COMPRESSION + // Keep the data object alive until we have a deep copy of the image. + out << indent << "data = qUncompress(data).data()\n"; +#endif + out << indent << "img = QImage(data,w,h,depth,colTab,nrCol,QImage.BigEndian).copy()\n"; + out << "\n"; + out << indent << "if alpha:\n"; + ++indent; + out << indent << "img.setAlphaBuffer(1)\n"; + --indent; + out << "\n"; + out << indent << "return img\n"; + --indent; + --indent; + out << endl; + out << indent << "return QImage()\n"; + --indent; + out << "\n"; + out << "\n"; + + out << indent << "class MimeSourceFactory_" << cProject << "(QMimeSourceFactory):\n"; + ++indent; + out << indent << "def __init__(self):\n"; + ++indent; + out << indent << "QMimeSourceFactory.__init__(self)\n"; + out << "\n"; + --indent; + out << indent << "def data(self,abs_name):\n"; + ++indent; + out << indent << "d = QMimeSourceFactory.data(self,abs_name)\n"; + out << indent << "if d or abs_name.isNull():\n"; + ++indent; + out << indent << "return d\n"; + --indent; + out << "\n"; + out << indent << "img = uic_findImage(abs_name)\n"; + out << indent << "if not img.isNull():\n"; + ++indent; + out << indent << "self.setImage(abs_name,img)\n"; + --indent; + out << "\n"; + out << indent << "return QMimeSourceFactory.data(self,abs_name)\n"; + --indent; + --indent; + out << "\n"; + out << "\n"; + + out << indent << "factory = None\n"; + out << "\n"; + + out << indent << "def qInitImages_" << cProject << "():\n"; + ++indent; + out << indent << "global factory\n"; + out << "\n"; + out << indent << "if factory is None:\n"; + ++indent; + out << indent << "factory = MimeSourceFactory_" << cProject << "()\n"; + out << indent << "QMimeSourceFactory.defaultFactory().addFactory(factory)\n"; + --indent; + --indent; + out << "\n"; + out << "\n"; + + out << indent << "def qCleanupImages_" << cProject << "():\n"; + ++indent; + out << indent << "global factory\n"; + out << "\n"; + out << indent << "if factory is not None:\n"; + ++indent; + out << indent << "QMimeSourceFactory.defaultFactory().removeFactory(factory)\n"; + out << indent << "factory = None\n"; + --indent; + --indent; + out << "\n"; + out << "\n"; + + out << indent << "class StaticInitImages_" << cProject << ":\n"; + ++indent; + out << indent << "def __init__(self):\n"; + ++indent; + out << indent << "self.cleanup = qCleanupImages_" << cProject << "\n"; + out << indent << "qInitImages_" << cProject << "()\n"; + --indent; + out << "\n"; + out << indent << "def __del__(self):\n"; + ++indent; + out << indent << "self.cleanup()\n"; + --indent; + --indent; + out << "\n"; + out << "\n"; + + out << "staticImages = StaticInitImages_" << cProject << "()\n"; + } +} diff --git a/pyuic3/form.cpp b/pyuic3/form.cpp new file mode 100644 index 0000000..aedb4ac --- /dev/null +++ b/pyuic3/form.cpp @@ -0,0 +1,938 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include +#include "uic.h" +#include "parser.h" +#include "widgetdatabase.h" +#include "domtool.h" +#include +#include +#include +#include +#define NO_STATIC_COLORS +#include + +#if QT_VERSION < 0x030100 +#include +#endif + +static QByteArray unzipXPM( QString data, ulong& length ) +{ +#if QT_VERSION >= 0x030100 + const int lengthOffset = 4; + int baSize = data.length() / 2 + lengthOffset; + uchar *ba = new uchar[ baSize ]; + for ( int i = lengthOffset; i < baSize; ++i ) { + char h = data[ 2 * (i-lengthOffset) ].latin1(); + char l = data[ 2 * (i-lengthOffset) + 1 ].latin1(); + uchar r = 0; + if ( h <= '9' ) + r += h - '0'; + else + r += h - 'a' + 10; + r = r << 4; + if ( l <= '9' ) + r += l - '0'; + else + r += l - 'a' + 10; + ba[ i ] = r; + } + // qUncompress() expects the first 4 bytes to be the expected length of the + // uncompressed data + ba[0] = ( length & 0xff000000 ) >> 24; + ba[1] = ( length & 0x00ff0000 ) >> 16; + ba[2] = ( length & 0x0000ff00 ) >> 8; + ba[3] = ( length & 0x000000ff ); + QByteArray baunzip = qUncompress( ba, baSize ); + delete[] ba; + return baunzip; +#else + uchar *ba = new uchar[ data.length() / 2 ]; + for ( int i = 0; i < (int)data.length() / 2; ++i ) { + char h = data[ 2 * i ].latin1(); + char l = data[ 2 * i + 1 ].latin1(); + uchar r = 0; + if ( h <= '9' ) + r += h - '0'; + else + r += h - 'a' + 10; + r = r << 4; + if ( l <= '9' ) + r += l - '0'; + else + r += l - 'a' + 10; + ba[ i ] = r; + } + // I'm not sure this makes sense. Why couldn't the compressed data be + // less than 20% of the original data? Maybe it's enough to trust the + // `length' passed as an argument. Quoting the zlib header: + // Upon entry, destLen is the total size of the destination + // buffer, which must be large enough to hold the entire + // uncompressed data. (The size of the uncompressed data must + // have been saved previously by the compressor and transmitted + // to the decompressor by some mechanism outside the scope of + // this compression library.) + // Which is the role of `length'. On the other hand this could prevent + // crashes in some cases of slightly corrupt UIC files. + if ( length < data.length() * 5 ) + length = data.length() * 5; + QByteArray baunzip( length ); + ::uncompress( (uchar*) baunzip.data(), &length, ba, data.length()/2 ); + delete[] ba; + return baunzip; +#endif +} + + + +/*! + Creates an implementation ( cpp-file ) for the form given in \a e + + \sa createFormDecl(), createObjectImpl() + */ +void Uic::createFormImpl( const QDomElement &e ) +{ + QDomElement n; + QDomNodeList nl; + int i; + QString objClass = getClassName( e ); + if ( objClass.isEmpty() ) + return; + QString objName = getObjectName( e ); + + // generate local and local includes required + QStringList globalIncludes; + QStringList::Iterator it; + QStringList sqlClasses; + QStringList axwidgets, databrowsers; + + QMap customWidgetIncludes; + QMap functionImpls; + // find additional slots and functions + QStringList extraSlots; + QStringList extraSlotTypes; + nl = e.parentNode().toElement().elementsByTagName( "slot" ); + for ( i = 0; i < (int) nl.length(); i++ ) { + n = nl.item(i).toElement(); + if ( n.parentNode().toElement().tagName() != "slots" + && n.parentNode().toElement().tagName() != "connections" ) + continue; + if ( n.attribute( "language", "C++" ) != "C++" ) + continue; + QString slotName = n.firstChild().toText().data().stripWhiteSpace(); + if ( slotName.endsWith( ";" ) ) + slotName = slotName.left( slotName.length() - 1 ); + + extraSlots += Parser::cleanArgs(slotName); + extraSlotTypes += n.attribute( "returnType", "void" ); + } + + for ( n = e; !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "functions" ) { // compatibility + for ( QDomElement n2 = n.firstChild().toElement(); !n2.isNull(); n2 = n2.nextSibling().toElement() ) { + if ( n2.tagName() == "function" ) { + QString fname = n2.attribute( "name" ); + fname = Parser::cleanArgs( fname ); + functionImpls.insert( fname, n2.firstChild().toText().data() ); + } + } + } + } + + // additional includes (local or global ) and forward declaractions + nl = e.parentNode().toElement().elementsByTagName( "include" ); + for ( i = 0; i < (int) nl.length(); i++ ) { + QDomElement n2 = nl.item(i).toElement(); + + QString s = n2.firstChild().toText().data(); + if ( n2.attribute( "location" ) != "local" ) { + if ( s.right( 5 ) == ".ui.h" && !QFile::exists( s ) ) + continue; + if ( n2.attribute( "impldecl", "in implementation" ) != "in implementation" ) + continue; + globalIncludes += s; + } + } + + // do the local includes afterwards, since global includes have priority on clashes + QFileInfo fi(fileName); + + for ( i = 0; i < (int) nl.length(); i++ ) { + QDomElement n2 = nl.item(i).toElement(); + QString s = n2.firstChild().toText().data(); + if ( n2.attribute( "location" ) == "local" &&!globalIncludes.contains( s ) ) { + if ( s.right( 5 ) != ".ui.h" ) + continue; + + if ( !QFile::exists( s ) ) + { + s = fi.dirPath() + "/" + s; + + if ( !QFile::exists( s ) ) + continue; + } + + if ( QFile::exists( s ) ) + { + QFile f(s); + f.open(IO_ReadOnly); + QTextStream headerStream(&f); + QString line; + QString functionText; + QString functionName; + QRegExp rx("void .*::(.*\\(.*\\))"); + int pos, inFunction = 0; + + while (line = headerStream.readLine()) + { + pos = rx.search(line); + + if (pos > -1) + { + if (inFunction) + functionImpls.insert(Parser::cleanArgs(functionName),functionText); + + functionName = rx.cap(1); + functionText = ""; + inFunction = 1; + } + functionText += line + "\n"; + } + + if (inFunction) + functionImpls.insert(Parser::cleanArgs(functionName),functionText); + } + } + } + + // additional custom widget headers + nl = e.parentNode().toElement().elementsByTagName( "header" ); + for ( i = 0; i < (int) nl.length(); i++ ) { + QDomElement n2 = nl.item(i).toElement(); + QString s = n2.firstChild().toText().data(); + if ( n2.attribute( "location" ) != "local" ) + globalIncludes += s; + } + + // includes for child widgets + for ( it = tags.begin(); it != tags.end(); ++it ) { + nl = e.parentNode().toElement().elementsByTagName( *it ); + for ( i = 1; i < (int) nl.length(); i++ ) { // start at 1, 0 is the toplevel widget + QString name = getClassName( nl.item(i).toElement() ); + if ( name == "Spacer" ) { + globalIncludes += "qlayout.h"; + globalIncludes += "qapplication.h"; + continue; + } + if ( name.mid( 1 ) == "ListView" ) + globalIncludes += "qheader.h"; + else if ( name == "QAxWidget" ) + axwidgets += getObjectName(nl.item(i).toElement()); + else if ( name == "QDataBrowser" ) + databrowsers += getObjectName(nl.item(i).toElement()); + if ( name != objClass ) { + int wid = WidgetDatabase::idFromClassName( name ); + QMap::Iterator it = customWidgetIncludes.find( name ); + if ( it == customWidgetIncludes.end() ) + globalIncludes += WidgetDatabase::includeFile( wid ); + } + } + } + + if (globalIncludes.findIndex("qtable.h") >= 0) + out << indent << "from qttable import QTable" << endl; + + if (!axwidgets.empty()) + out << indent << "from qtaxcontainer import QAxWidget" << endl; + + if (globalIncludes.findIndex("qextscintilla.h") >= 0) + out << indent << "from qtext import QextScintilla" << endl; + + registerDatabases( e ); + dbConnections = unique( dbConnections ); + if ( dbConnections.count() ) + sqlClasses += "QSqlDatabase"; + if ( dbCursors.count() ) + sqlClasses += "QSqlCursor"; + bool dbForm = FALSE; + if ( dbForms[ "(default)" ].count() ) + dbForm = TRUE; + bool subDbForms = FALSE; + for ( it = dbConnections.begin(); it != dbConnections.end(); ++it ) { + if ( !(*it).isEmpty() && (*it) != "(default)" ) { + if ( dbForms[ (*it) ].count() ) { + subDbForms = TRUE; + break; + } + } + } + if ( dbForm || subDbForms ) { + sqlClasses += "QSqlForm"; + sqlClasses += "QSqlRecord"; + } + + if (globalIncludes.findIndex("qdatatable.h") >= 0) + sqlClasses += "QDataTable"; + + if (globalIncludes.findIndex("qtableview.h") >= 0) + sqlClasses += "QTableView"; + + if (globalIncludes.findIndex("qdatabrowser.h") >= 0) + sqlClasses += "QDataBrowser"; + + if (globalIncludes.findIndex("qdataview.h") >= 0) + sqlClasses += "QDataView"; + + if ( !sqlClasses.empty() ) { + out << indent << "from qtsql import"; + const char *sep = " "; + + for ( it = sqlClasses.begin(); it != sqlClasses.end(); ++it ) { + out << sep << (*it); + sep = ", "; + } + + out << endl; + } + + // Add any code from the comments. + if (!pyCode.isEmpty()) + out << pyCode; + + out << endl; + + // find out what images are required + QStringList requiredImages; + static const char *imgTags[] = { "pixmap", "iconset", 0 }; + for ( i = 0; imgTags[i] != 0; i++ ) { + nl = e.parentNode().toElement().elementsByTagName( imgTags[i] ); + for ( int j = 0; j < (int) nl.length(); j++ ) { + QDomNode nn = nl.item(j); + while ( nn.parentNode() != e.parentNode() ) + nn = nn.parentNode(); + if ( nn.nodeName() != "customwidgets" ) + requiredImages += nl.item(j).firstChild().toText().data(); + } + } + + // register the object and unify its name + objName = registerObject( objName ); + + QStringList images; + QStringList xpmImages; + if ( pixmapLoaderFunction.isEmpty() && !externPixmaps ) { + // create images + for ( n = e; !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "images" ) { + nl = n.elementsByTagName( "image" ); + for ( i = 0; i < (int) nl.length(); i++ ) { + QString img = registerObject( nl.item(i).toElement().attribute( "name" ) ); + if ( !requiredImages.contains( img ) ) + continue; + QDomElement tmp = nl.item(i).firstChild().toElement(); + if ( tmp.tagName() != "data" ) + continue; + QString format = tmp.attribute("format", "PNG" ); + QString data = tmp.firstChild().toText().data(); + if ( format == "XPM.GZ" ) { + xpmImages += img; + ulong length = tmp.attribute("length").toULong(); + QByteArray baunzip = unzipXPM( data, length ); + length = baunzip.size(); + // shouldn't we test the initial `length' against the + // resulting `length' to catch corrupt UIC files? + int a = 0; + out << indent << img << "_data = [" << endl; + while ( baunzip[a] != '\"' ) + a++; + for ( ; a < (int) length; a++ ) + { + char ch; + + if ((ch = baunzip[a]) == '}') + { + out << endl << "]"; + break; + } + + out << ch; + } + out << endl; + } else { + images += img; + out << indent << img << "_data = \\" << endl; + ++indent; + out << indent << "\""; + int a ; + for ( a = 0; a < (int) (data.length()/2)-1; a++ ) { + out << "\\x" << QString(data[2*a]) << QString(data[2*a+1]); + if ( a % 12 == 11 ) + out << "\" \\" << endl << indent << "\""; + } + out << "\\x" << QString(data[2*a]) << QString(data[2*a+1]) << "\"" << endl; + --indent; + } + } + } + } + out << endl; + } else if ( externPixmaps ) { +#if QT_VERSION >= 0x030100 + pixmapLoaderFunction = "QPixmap.fromMimeSource"; +#else + out << indent << "def uic_load_pixmap_" << objName << "(name):" << endl; + ++indent; + out << indent << "pix = QPixmap()" << endl; + out << indent << "m = QMimeSourceFactory.defaultFactory().data(name)" << endl; + out << endl; + out << indent << "if m:" << endl; + ++indent; + out << indent << "QImageDrag.decode(m,pix)" << endl; + --indent; + out << endl; + out << indent << "return pix" << endl; + --indent; + out << endl; + out << endl; + pixmapLoaderFunction = "uic_load_pixmap_" + objName; +#endif + } + + + // constructor(s) + + out << indent << "class " << nameOfClass << "(" << objClass << "):" << endl; + ++indent; + + if ( objClass == "QDialog" || objClass == "QWizard" ) { + out << indent << "def __init__(self,parent = None,name = None,modal = 0,fl = 0):" << endl; + ++indent; + out << indent << objClass << ".__init__(self,parent,name,modal,fl)" << endl; + } else if ( objClass == "QWidget" ) { + out << indent << "def __init__(self,parent = None,name = None,fl = 0):" << endl; + ++indent; + out << indent << objClass << ".__init__(self,parent,name,fl)" << endl; + } else if ( objClass == "QMainWindow" ) { + out << indent << "def __init__(self,parent = None,name = None,fl = 0):" << endl; + ++indent; + out << indent << objClass << ".__init__(self,parent,name,fl)" << endl; + out << indent << "self.statusBar()" << endl; + isMainWindow = TRUE; + } else { + out << indent << "def __init__(self,parent = None,name = None):" << endl; + ++indent; + out << indent << objClass << ".__init__(self,parent,name)" << endl; + } + + out << endl; + + // create pixmaps for all images + if ( !images.isEmpty() ) { + QStringList::Iterator it; + for ( it = images.begin(); it != images.end(); ++it ) { + out << indent << "self." << (*it) << " = QPixmap()" << endl; + out << indent << "self." << (*it) << ".loadFromData(" << (*it) << "_data,\"PNG\")" << endl; + } + } + // create pixmaps for all images + if ( !xpmImages.isEmpty() ) { + for ( it = xpmImages.begin(); it != xpmImages.end(); ++it ) { + out << indent << "self." << (*it) << " = QPixmap(" << (*it) << "_data)" << endl; + } + out << endl; + } + + + // set the properties + QSize geometry( 0, 0 ); + + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "property" ) { + bool stdset = stdsetdef; + if ( n.hasAttribute( "stdset" ) ) + stdset = toBool( n.attribute( "stdset" ) ); + QString prop = n.attribute("name"); + QDomElement n2 = n.firstChild().toElement(); + QString value = setObjectProperty( objClass, QString::null, prop, n2, stdset ); + if ( value.isEmpty() ) + continue; + + if ( prop == "geometry" && n2.tagName() == "rect") { + QDomElement n3 = n2.firstChild().toElement(); + while ( !n3.isNull() ) { + if ( n3.tagName() == "width" ) + geometry.setWidth( n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "height" ) + geometry.setHeight( n3.firstChild().toText().data().toInt() ); + n3 = n3.nextSibling().toElement(); + } + } else { + QString call; + if ( stdset ) + call = "self." + mkStdSet( prop ) + "(" + value + ")"; + else + call = "self.setProperty(\"" + prop + "\",QVariant(" + value + "))"; + + if ( n2.tagName() == "string" ) { + trout << trindent << call << endl; + } else if ( prop == "name" ) { + out << indent << "if not name:" << endl; + ++indent; + out << indent << call << endl; + --indent; + out << endl; + } else { + out << indent << call << endl; + } + } + } + } + + out << endl; + + // create all children, some forms have special requirements + + if ( objClass == "QWizard" ) { + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( tags.contains( n.tagName() ) ) { + QString page = createObjectImpl( n, objClass, "self" ); + QString comment; + QString label = DomTool::readAttribute( n, "title", "", comment ).toString(); + out << indent << "self.addPage(" << page << ",QString(\"\"))" << endl; + trout << trindent << "self.setTitle(" << page << ","<< trcall( label, comment ) << ")" << endl; + QVariant def( FALSE, 0 ); + if ( DomTool::hasAttribute( n, "backEnabled" ) ) + out << indent << "self.setBackEnabled(" << page << "," << mkBool( DomTool::readAttribute( n, "backEnabled", def).toBool() ) << ")" << endl; + if ( DomTool::hasAttribute( n, "nextEnabled" ) ) + out << indent << "self.setNextEnabled(" << page << "," << mkBool( DomTool::readAttribute( n, "nextEnabled", def).toBool() ) << ")" << endl; + if ( DomTool::hasAttribute( n, "finishEnabled" ) ) + out << indent << "self.setFinishEnabled(" << page << "," << mkBool( DomTool::readAttribute( n, "finishEnabled", def).toBool() ) << ")" << endl; + if ( DomTool::hasAttribute( n, "helpEnabled" ) ) + out << indent << "self.setHelpEnabled(" << page << "," << mkBool( DomTool::readAttribute( n, "helpEnabled", def).toBool() ) << ")" << endl; + if ( DomTool::hasAttribute( n, "finish" ) ) + out << indent << "self.setFinish( " << page << "," << mkBool( DomTool::readAttribute( n, "finish", def).toBool() ) << ")" << endl; + } + } + } else { // standard widgets + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( tags.contains( n.tagName() ) ) + createObjectImpl( n, objName, "self" ); + } + } + + // database support + dbConnections = unique( dbConnections ); + if ( dbConnections.count() ) + out << endl; + for ( it = dbConnections.begin(); it != dbConnections.end(); ++it ) { + if ( !(*it).isEmpty() && (*it) != "(default)") { + out << indent << "self." << (*it) << "Connection = QSqlDatabase.database(\"" <<(*it) << "\")" << endl; + } + } + + nl = e.parentNode().toElement().elementsByTagName( "widget" ); + for ( i = 1; i < (int) nl.length(); i++ ) { // start at 1, 0 is the toplevel widget + n = nl.item(i).toElement(); + QString s = getClassName( n ); + if ( (dbForm || subDbForms) && (s == "QDataBrowser" || s == "QDataView") ) { + QString objName = getObjectName( n ); + QString tab = getDatabaseInfo( n, "table" ); + QString con = getDatabaseInfo( n, "connection" ); + out << indent << objName << "Form = QSqlForm(self,\"" << objName << "Form\")" << endl; + QDomElement n2; + for ( n2 = n.firstChild().toElement(); !n2.isNull(); n2 = n2.nextSibling().toElement() ) + createFormImpl( n2, objName, con, tab ); + out << indent << "self." << objName << ".setForm(" << objName << "Form)" << endl; + } + } + + // actions, toolbars, menubar + bool needEndl = FALSE; + for ( n = e; !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "actions" ) { + if ( !needEndl ) + out << endl; + createActionImpl( n.firstChild().toElement(), "self" ); + needEndl = TRUE; + } + } + if ( needEndl ) + out << endl; + needEndl = FALSE; + for ( n = e; !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "toolbars" ) { + if ( !needEndl ) + out << endl; + createToolbarImpl( n, objClass, objName ); + needEndl = TRUE; + } + } + if ( needEndl ) + out << endl; + needEndl = FALSE; + for ( n = e; !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "menubar" ) { + if ( !needEndl ) + out << endl; + createMenuBarImpl( n, objClass, objName ); + needEndl = TRUE; + } + } + if ( needEndl ) + out << endl; + + out << endl; + out << indent << "self.languageChange()" << endl; + out << endl; + + // take minimumSizeHint() into account, for height-for-width widgets + if ( !geometry.isNull() ) { + out << indent << "self.resize(QSize(" << geometry.width() << "," + << geometry.height() <<").expandedTo(self.minimumSizeHint()))" << endl; + out << indent << "self.clearWState(Qt.WState_Polished)" << endl; + } + + for ( n = e; !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "connections" ) { + // setup signals and slots connections + out << endl; + nl = n.elementsByTagName( "connection" ); + for ( i = 0; i < (int) nl.length(); i++ ) { + QString sender, receiver, signal, slot; + for ( QDomElement n2 = nl.item(i).firstChild().toElement(); !n2.isNull(); n2 = n2.nextSibling().toElement() ) { + if ( n2.tagName() == "sender" ) + sender = n2.firstChild().toText().data(); + else if ( n2.tagName() == "receiver" ) + receiver = n2.firstChild().toText().data(); + else if ( n2.tagName() == "signal" ) + signal = n2.firstChild().toText().data(); + else if ( n2.tagName() == "slot" ) + slot = n2.firstChild().toText().data(); + } + if ( sender.isEmpty() || + receiver.isEmpty() || + signal.isEmpty() || + slot.isEmpty() ) + continue; + if ( sender[0] == '<' || + receiver[0] == '<' || + signal[0] == '<' || + slot[0] == '<' ) + continue; + + sender = registeredName( sender ); + receiver = registeredName( receiver ); + + // translate formwindow name to "self" + if ( sender == objName ) + sender = "self"; + else + sender = "self." + sender; + + bool isaxwidget = (axwidgets.findIndex(receiver) >= 0); + bool isdatabrowser = (databrowsers.findIndex(receiver) >= 0); + + if ( receiver == objName ) + receiver = "self"; + else + receiver = "self." + receiver; + + out << indent << "self.connect(" << sender + << ",SIGNAL(\"" << signal << "\")," << receiver; + + // Normally we never use the SLOT() macro in case the + // connection is to a method of a Python custom widget. The + // exception is if the receiver is a QAxWidget where it must be + // used because the slots are dynamic. + if (isaxwidget) + out << ",SLOT(\"" << slot << "\")"; + else + { + QString mname = slot.left(slot.find('(')); + + // Rename slots that have different names in PyQt. + if (isdatabrowser && mname == "del") + mname = "delOnCursor"; + + out << "." << mname; + } + + out << ")" << endl; + } + } else if ( n.tagName() == "tabstops" ) { + // setup tab order + out << endl; + QString lastName; + QDomElement n2 = n.firstChild().toElement(); + while ( !n2.isNull() ) { + if ( n2.tagName() == "tabstop" ) { + QString name = n2.firstChild().toText().data(); + name = registeredName( name ); + if ( !lastName.isEmpty() ) + out << indent << "self.setTabOrder(self." << lastName << ",self." << name << ")" << endl; + lastName = name; + } + n2 = n2.nextSibling().toElement(); + } + } + } + + // buddies + bool firstBuddy = TRUE; + for ( QValueList::Iterator buddy = buddies.begin(); buddy != buddies.end(); ++buddy ) { + if ( isObjectRegistered( (*buddy).buddy ) ) { + if ( firstBuddy ) { + out << endl; + } + out << indent << "self." << (*buddy).key << ".setBuddy(self." << registeredName( (*buddy).buddy ) << ")" << endl; + firstBuddy = FALSE; + } + + } + + if ( extraSlots.find( "init()" ) != extraSlots.end() ) + out << endl << indent << "self.init()" << endl; + + // end of constructor + --indent; + + // destructor + if ( extraSlots.find( "destroy()" ) != extraSlots.end() ) { + out << endl; + out << indent << "def __del__(self):" << endl; + ++indent; + out << indent << "self.destroy()" << endl; + --indent; + } + + // handle application events if required + bool needFontEventHandler = FALSE; + bool needSqlTableEventHandler = FALSE; + bool needSqlDataBrowserEventHandler = FALSE; + nl = e.elementsByTagName( "widget" ); + for ( i = 0; i < (int) nl.length(); i++ ) { + if ( !DomTool::propertiesOfType( nl.item(i).toElement() , "font" ).isEmpty() ) + needFontEventHandler = TRUE; + QString s = getClassName( nl.item(i).toElement() ); + if ( s == "QDataTable" || s == "QDataBrowser" ) { + if ( !isFrameworkCodeGenerated( nl.item(i).toElement() ) ) + continue; + if ( s == "QDataTable" ) + needSqlTableEventHandler = TRUE; + if ( s == "QDataBrowser" ) + needSqlDataBrowserEventHandler = TRUE; + } + if ( needFontEventHandler && needSqlTableEventHandler && needSqlDataBrowserEventHandler ) + break; + } + if ( needFontEventHandler && FALSE ) { + // indent = "\t"; // increase indentation for if-clause below + out << "/* " << endl; + out << " * Main event handler. Reimplemented to handle" << endl; + out << " * application font changes"; + out << " */" << endl; + out << "bool " << nameOfClass << "::event( QEvent* ev )" << endl; + out << "{" << endl; + out << " bool ret = " << objClass << "::event( ev ); " << endl; + if ( needFontEventHandler ) { + ++indent; + out << " if ( ev->type() == QEvent::ApplicationFontChange ) {" << endl; + for ( i = 0; i < (int) nl.length(); i++ ) { + n = nl.item(i).toElement(); + QStringList list = DomTool::propertiesOfType( n, "font" ); + for ( it = list.begin(); it != list.end(); ++it ) + createExclusiveProperty( n, *it ); + } + out << " }" << endl; + --indent; + } + out << "}" << endl; + out << endl; + } + + if ( needSqlTableEventHandler || needSqlDataBrowserEventHandler ) { + out << endl; + out << indent << "# Widget polish. Reimplemented to handle default data" << endl; + if ( needSqlTableEventHandler ) + out << indent << "# table initialization." << endl; + if ( needSqlDataBrowserEventHandler ) + out << indent << "# browser initialization." << endl; + out << indent << "def polish(self):" << endl; + ++indent; + if ( needSqlTableEventHandler ) { + for ( i = 0; i < (int) nl.length(); i++ ) { + QString s = getClassName( nl.item(i).toElement() ); + if ( s == "QDataTable" ) { + n = nl.item(i).toElement(); + QString c = getObjectName( n ); + QString conn = getDatabaseInfo( n, "connection" ); + QString tab = getDatabaseInfo( n, "table" ); + if ( !( conn.isEmpty() || tab.isEmpty() || !isFrameworkCodeGenerated( nl.item(i).toElement() ) ) ) { + out << indent << "if self." << c << ":" << endl; + ++indent; + out << indent << "cursor = self." << c << ".sqlCursor()" << endl; + out << endl; + out << indent << "if not cursor:" << endl; + ++indent; + if ( conn == "(default)" ) + out << indent << "cursor = QSqlCursor(\"" << tab << "\")" << endl; + else + out << indent << "cursor = QSqlCursor(\"" << tab << "\",1,self." << conn << "Connection)" << endl; + out << indent << "if self." << c << ".isReadOnly():" << endl; + ++indent; + out << indent << "cursor.setMode(QSqlCursor.ReadOnly)" << endl; + --indent; + out << indent << "self." << c << ".setSqlCursor(cursor,0,1)" << endl; + --indent; + out << endl; + out << indent << "if not cursor.isActive():" << endl; + ++indent; + out << indent << "self." << c << ".refresh(QDataTable.RefreshAll)" << endl; + --indent; + --indent; + } + } + } + } + if ( needSqlDataBrowserEventHandler ) { + nl = e.elementsByTagName( "widget" ); + for ( i = 0; i < (int) nl.length(); i++ ) { + QString s = getClassName( nl.item(i).toElement() ); + if ( s == "QDataBrowser" ) { + QString obj = getObjectName( nl.item(i).toElement() ); + QString tab = getDatabaseInfo( nl.item(i).toElement(), + "table" ); + QString conn = getDatabaseInfo( nl.item(i).toElement(), + "connection" ); + if ( !(tab.isEmpty() || !isFrameworkCodeGenerated( nl.item(i).toElement() ) ) ) { + out << indent << "if self." << obj << ":" << endl; + ++indent; + out << indent << "if not self." << obj << ".sqlCursor():" << endl; + ++indent; + if ( conn == "(default)" ) + out << indent << "cursor = QSqlCursor(\"" << tab << "\")" << endl; + else + out << indent << "cursor = QSqlCursor(\"" << tab << "\",1,self." << conn << "Connection)" << endl; + out << indent << "self." << obj << ".setSqlCursor(cursor,1)" << endl; + out << indent << "self." << obj << ".refresh()" << endl; + out << indent << "self." << obj << ".first()" << endl; + --indent; + --indent; + } + } + } + } + out << indent << objClass << ".polish(self)" << endl; + --indent; + } + + out << endl; + out << endl; + out << indent << "def languageChange(self):" << endl; + uint old = indent.setIndent(0); + out << languageChangeBody << endl; + indent.setIndent(old); + + // create stubs for additional slots if necessary + if ( !extraSlots.isEmpty() && writeFunctImpl ) { + QStringList::ConstIterator cit; + + for ( cit = extraSlots.begin(); cit != extraSlots.end(); ++cit ) { + pySlot(cit); + + bool createWarning = TRUE; + QString fname = Parser::cleanArgs( *cit ); + QMap::Iterator fit = functionImpls.find( fname ); + if ( fit != functionImpls.end() ) { + int begin = (*fit).find( "{" ); + QString body = (*fit).mid( begin + 1, (*fit).findRev( "}" ) - begin - 1 ); + createWarning = body.simplifyWhiteSpace().isEmpty(); + if ( !createWarning ) + { + ++indent; + QString formatted_body = body.replace(QRegExp("\n"), QString("\n") + QString(indent)); + out << formatted_body << endl; + --indent; + } + } + if ( createWarning ) { + out << endl; + ++indent; + if ( *cit != "init()" && *cit != "destroy()" ) + out << indent << "print \"" << nameOfClass << "." << (*cit) << ": Not implemented yet\"" << endl; + else + out << indent << "pass" << endl; + --indent; + } + } + } + + --indent; +} + + +/*! Creates form support implementation code for the widgets given + in \a e. + + Traverses recursively over all children. + */ + +void Uic::createFormImpl( const QDomElement& e, const QString& form, const QString& connection, const QString& table ) +{ + if ( e.tagName() == "widget" && + e.attribute( "class" ) != "QDataTable" ) { + QString field = getDatabaseInfo( e, "field" ); + if ( !field.isEmpty() ) { + if ( isWidgetInTable( e, connection, table ) ) + out << indent << form << "Form.insert(self." << getObjectName( e ) << "," << fixString( field ) << ")" << endl; + } + } + QDomElement n; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + createFormImpl( n, form, connection, table ); + } +} + + +// Generate a Python slot definition. + +void Uic::pySlot(QStringList::ConstIterator &it) +{ + out << endl; + + int astart = (*it).find('('); + out << indent << "def " << (*it).left(astart) << "(self"; + + // We don't reproduce the argument names (if any) because we would have to + // remove the types - too complicated for the moment, so we just count them + // and give them names based on their position. + + QString args = (*it).mid(astart + 1,(*it).find(')') - astart - 1).stripWhiteSpace(); + + if (!args.isEmpty()) { + int nrargs = args.contains(',') + 1; + + for (int i = 0; i < nrargs; ++i) + out << ",a" << i; + } + + out << "):"; +} diff --git a/pyuic3/globaldefs.h b/pyuic3/globaldefs.h new file mode 100644 index 0000000..4ae0cd8 --- /dev/null +++ b/pyuic3/globaldefs.h @@ -0,0 +1,56 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#ifndef GLOBALDEFS_H +#define GLOBALDEFS_H + +#include +#include + +#define BOXLAYOUT_DEFAULT_MARGIN 11 +#define BOXLAYOUT_DEFAULT_SPACING 6 + +#ifndef NO_STATIC_COLORS +static QColor *backColor1 = 0; +static QColor *backColor2 = 0; +static QColor *selectedBack = 0; + +static void init_colors() +{ + if ( backColor1 ) + return; + +#if 0 // a calculated alternative for backColor1 + QColorGroup myCg = qApp->palette().active(); + int h1, s1, v1; + int h2, s2, v2; + myCg.color( QColorGroup::Base ).hsv( &h1, &s1, &v1 ); + myCg.color( QColorGroup::Background ).hsv( &h2, &s2, &v2 ); + QColor c( h1, s1, ( v1 + v2 ) / 2, QColor::Hsv ); +#endif + + backColor1 = new QColor( 250, 248, 235 ); + backColor2 = new QColor( 255, 255, 255 ); + selectedBack = new QColor( 230, 230, 230 ); +} + +#endif + +#endif diff --git a/pyuic3/main.cpp b/pyuic3/main.cpp new file mode 100644 index 0000000..265a536 --- /dev/null +++ b/pyuic3/main.cpp @@ -0,0 +1,245 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (c) 2001 Phil Thompson +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include "uic.h" +#include "parser.h" +#include "widgetdatabase.h" +#include "domtool.h" +#include +#include +#include +#include +#define NO_STATIC_COLORS +#include +#include +#include +#include + +int main( int argc, char * argv[] ) +{ + PyIndent indent; + bool testCode = FALSE, execCode = FALSE; + bool subcl = FALSE; + bool imagecollection = FALSE; + QStringList images; + const char *error = 0; + const char* fileName = 0; + QCString outputFile; + const char* projectName = 0; + const char* trmacro = 0; + bool fix = FALSE; + QApplication app(argc, argv, FALSE); + QString className, uicClass; + + for ( int n = 1; n < argc && error == 0; n++ ) { + QCString arg = argv[n]; + if ( arg[0] == '-' ) { // option + QCString opt = &arg[1]; + if ( opt[0] == 'o' ) { // output redirection + if ( opt[1] == '\0' ) { + if ( !(n < argc-1) ) { + error = "Missing output-file name"; + break; + } + outputFile = argv[++n]; + } else + outputFile = &opt[1]; + } else if ( opt[0] == 'e' || opt == "embed" ) { + imagecollection = TRUE; + if ( opt == "embed" || opt[1] == '\0' ) { + if ( !(n < argc-1) ) { + error = "Missing name of project"; + break; + } + projectName = argv[++n]; + } else + projectName = &opt[1]; + } else if ( opt == "subimpl" ) { + subcl = TRUE; + if ( !(n < argc-1) ) { + error = "Missing class name"; + break; + } + className = argv[++n]; + } else if ( opt == "tr" ) { + if ( opt == "tr" || opt[1] == '\0' ) { + if ( !(n < argc-1) ) { + error = "Missing tr macro"; + break; + } + trmacro = argv[++n]; + } else { + trmacro = &opt[1]; + } + } else if ( opt == "version" ) { + fprintf( stderr, + "Python User Interface Compiler %s for Qt version %s\n", + PYQT_VERSION, QT_VERSION_STR ); + return 1; + } else if ( opt == "help" ) { + break; + } else if ( opt == "fix" ) { + fix = TRUE; + } else if ( opt[0] == 'p' ) { + uint tabstop; + bool ok; + + if ( opt[1] == '\0' ) { + if ( !(n < argc-1) ) { + error = "Missing Python indent"; + break; + } + tabstop = QCString(argv[++n]).toUInt(&ok); + } else + tabstop = opt.mid(1).toUInt(&ok); + + if (ok) + indent.setTabStop(tabstop); + else + error = "Invalid Python indent"; + } else if ( opt == "test" ) { + testCode = TRUE; + } else if ( opt == "x" ) { + execCode = TRUE; + } else { + error = "Unrecognized option"; + } + } else { + if ( imagecollection ) + images << argv[n]; + else if ( fileName ) // can handle only one file + error = "Too many input files specified"; + else + fileName = argv[n]; + } + } + + if ( argc < 2 || error || (!fileName && !imagecollection ) ) { + fprintf( stderr, "PyQt user interface compiler.\n" ); + if ( error ) + fprintf( stderr, "pyuic: %s\n", error ); + + fprintf( stderr, "Usage: %s [options] [mode] \n" + "\nGenerate implementation:\n" + " %s [options] \n" + "Generate image collection:\n" + " %s [options] -embed ...\n" + "\t\tproject name\n" + "\t\timage files\n" + "Generate subclass implementation:\n" + " %s [options] -subimpl \n" + "\t\tname of the subclass to generate\n" + "Options:\n" + "\t-o file\t\tWrite output to file rather than stdout\n" + "\t-p indent\tSet the Python indent in spaces (0 to use a tab)\n" + "\t-tr func\tUse func() rather than QApplication.translate() for i18n\n" + "\t-x\t\tGenerate extra code to test and display the class\n" + "\t-test\t\tGenerate extra code to test but not display the class\n" + "\t-version\tDisplay version of pyuic\n" + "\t-help\t\tDisplay this information\n" + , argv[0], argv[0], argv[0], argv[0]); + return 1; + } + + Uic::setIndent(indent); + + QFile fileOut; + if ( !outputFile.isEmpty() ) { + fileOut.setName( outputFile ); + if (!fileOut.open( IO_WriteOnly ) ) + qFatal( "pyuic: Could not open output file '%s'", outputFile.data() ); + } else { + fileOut.open( IO_WriteOnly, stdout ); + } + QTextStream out( &fileOut ); + + if ( imagecollection ) { + out.setEncoding( QTextStream::Latin1 ); + out << "# -*- coding: latin-1 -*-\n\n"; + Uic::embed( out, projectName, images ); + return 0; + } + + + out.setEncoding( QTextStream::UnicodeUTF8 ); + QFile file( fileName ); + if ( !file.open( IO_ReadOnly ) ) + qFatal( "pyuic: Could not open file '%s' ", fileName ); + + QDomDocument doc; + QString errMsg; + int errLine; + if ( !doc.setContent( &file, &errMsg, &errLine ) ) + qFatal( QString("pyuic: Failed to parse %s: ") + errMsg + QString (" in line %d\n"), fileName, errLine ); + + QDomElement e = doc.firstChild().toElement(); + if ( e.hasAttribute("version") && e.attribute("version").toDouble() > 3.3 ) { + qWarning( QString("pyuic: File generated with too recent version of Qt Designer (%s vs. %s)"), + e.attribute("version").latin1(), QT_VERSION_STR ); + return 1; + } + + DomTool::fixDocument( doc ); + + if ( fix ) { + out << doc.toString(); + return 0; + } + + out << "# -*- coding: utf-8 -*-\n\n"; + + if ( !subcl ) { + out << "# Form implementation generated from reading ui file '" << fileName << "'" << endl; + out << "#" << endl; + out << "# Created: " << QDateTime::currentDateTime().toString() << endl; + out << "# by: The PyQt User Interface Compiler (pyuic) " << PYQT_VERSION << endl; + out << "#" << endl; + out << "# WARNING! All changes made in this file will be lost!" << endl; + out << endl; + out << endl; + } + + if (testCode || execCode) + out << "import sys" << endl; + + out << "from qt import *" << endl; + + Uic( fileName, outputFile, out, doc, subcl, trmacro, className, uicClass ); + + if (testCode || execCode) { + out << endl; + out << indent << "if __name__ == \"__main__\":" << endl; + ++indent; + out << indent << "a = QApplication(sys.argv)" << endl; + out << indent << "QObject.connect(a,SIGNAL(\"lastWindowClosed()\"),a,SLOT(\"quit()\"))" << endl; + out << indent << "w = " << (subcl ? className : uicClass) << "()" << endl; + out << indent << "a.setMainWidget(w)" << endl; + + if (execCode) { + out << indent << "w.show()" << endl; + out << indent << "a.exec_loop()" << endl; + } + + --indent; + } + + return 0; +} diff --git a/pyuic3/object.cpp b/pyuic3/object.cpp new file mode 100644 index 0000000..834427f --- /dev/null +++ b/pyuic3/object.cpp @@ -0,0 +1,704 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include "uic.h" +#include "parser.h" +#include "domtool.h" +#include +#include +#include +#define NO_STATIC_COLORS +#include + + +/*! + Creates an implementation for the object given in \a e. + + Traverses recursively over all children. + + Returns the name of the generated child object. + */ + +static bool createdCentralWidget = FALSE; + +QString Uic::createObjectImpl( const QDomElement &e, const QString& parentClass, const QString& par, const QString& layout ) +{ + QString parent( par ); + if ( parent == "self" && isMainWindow ) { + if ( !createdCentralWidget ) + out << indent << "self.setCentralWidget(QWidget(self,\"qt_central_widget\"))" << endl; + createdCentralWidget = TRUE; + parent = "self.centralWidget()"; + } + QDomElement n; + QString objClass, objName, fullObjName; + int numItems = 0; + int numColumns = 0; + int numRows = 0; + + if ( layouts.contains( e.tagName() ) ) + return createLayoutImpl( e, parentClass, parent, layout ); + + objClass = getClassName( e ); + if ( objClass.isEmpty() ) + return objName; + objName = getObjectName( e ); + + QString definedName = objName; + bool isTmpObject = objName.isEmpty() || objClass == "QLayoutWidget"; + if ( isTmpObject ) { + if ( objClass[0] == 'Q' ) + objName = objClass.mid(1); + else + objName = objClass.lower(); + } + + bool isLine = objClass == "Line"; + if ( isLine ) + objClass = "QFrame"; + + out << endl; + if ( objClass == "QLayoutWidget" ) { + if ( layout.isEmpty() ) { + // register the object and unify its name + objName = registerObject( objName ); + out << indent << objName << " = QWidget(" << parent << ",\"" << definedName << "\")" << endl; + } else { + // the layout widget is not necessary, hide it by creating its child in the parent + QString result; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if (tags.contains( n.tagName() ) ) + result = createObjectImpl( n, parentClass, parent, layout ); + } + return result; + } + + // Layouts don't go into the class instance dictionary. + fullObjName = objName; + } else if ( objClass != "QToolBar" && objClass != "QMenuBar" ) { + // register the object and unify its name + objName = registerObject( objName ); + + // Temporary objects don't go into the class instance dictionary. + fullObjName = isTmpObject ? objName : "self." + objName; + + out << indent << fullObjName << " = " << createObjectInstance( objClass, parent, objName ) << endl; + } + else + fullObjName = "self." + objName; + + if ( objClass == "QAxWidget" ) { + QString controlId; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "property" && n.attribute( "name" ) == "control" ) { + controlId = n.firstChild().toElement().text(); + } + } + out << indent << fullObjName << ".setControl(\"" << controlId << "\")" << endl; + } + + lastItem = "None"; + // set the properties and insert items + bool hadFrameShadow = FALSE; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "property" ) { + bool stdset = stdsetdef; + if ( n.hasAttribute( "stdset" ) ) + stdset = toBool( n.attribute( "stdset" ) ); + QString prop = n.attribute( "name" ); + if ( prop == "database" ) + continue; + QString value = setObjectProperty( objClass, objName, prop, n.firstChild().toElement(), stdset ); + if ( value.isEmpty() ) + continue; + if ( prop == "name" ) + continue; + if ( isLine && prop == "frameShadow" ) + hadFrameShadow = TRUE; + if ( prop == "buddy" && value.startsWith("\"") && value.endsWith("\"") ) { + buddies << Buddy( objName, value.mid(1, value.length() - 2 ) ); + continue; + } + if ( isLine && prop == "orientation" ) { + prop = "frameShape"; + if ( value.right(10) == "Horizontal" ) + value = "QFrame.HLine"; + else + value = "QFrame.VLine"; + if ( !hadFrameShadow ) { + prop = "frameStyle"; + value += " | QFrame.Sunken"; + } + } + if ( prop == "buttonGroupId" ) { + if ( parentClass == "QButtonGroup" ) + out << indent << parent << ".insert( " << fullObjName << "," << value << ")" << endl; + continue; + } + if ( prop == "frameworkCode" ) + continue; + if ( objClass == "QMultiLineEdit" && + QRegExp("echoMode|hMargin|maxLength|maxLines|undoEnabled").exactMatch(prop) ) + continue; + QString call = fullObjName + "."; + QString tail; + if ( stdset ) { + call += mkStdSet( prop ) + "("; + tail = ")"; + } else { + call += "setProperty(\"" + prop + "\",QVariant("; + tail = "))"; + } + if ( prop == "accel" ) { + call += "QKeySequence("; + tail += ")"; + } + call += value + tail; + + if ( n.firstChild().toElement().tagName() == "string" || + prop == "currentItem" ) { + trout << trindent << call << endl; + } else { + out << indent << call << endl; + } + } else if ( n.tagName() == "item" ) { + QString call; + QString value; + + if ( objClass.contains( "ListBox" ) ) { + call = createListBoxItemImpl( n, fullObjName ); + if ( !call.isEmpty() ) { + if ( numItems == 0 ) + trout << trindent << fullObjName << ".clear()" << endl; + trout << trindent << call << endl; + } + } else if ( objClass.contains( "ComboBox" ) ) { + call = createListBoxItemImpl( n, fullObjName, &value ); + if ( !call.isEmpty() ) { + if ( numItems == 0 ) + trout << trindent << fullObjName << ".clear()" << endl; + trout << trindent << call << endl; + } + } else if ( objClass.contains( "IconView" ) ) { + call = createIconViewItemImpl( n, fullObjName ); + if ( !call.isEmpty() ) { + if ( numItems == 0 ) + trout << trindent << fullObjName << ".clear()" << endl; + trout << trindent << call << endl; + } + } else if ( objClass.contains( "ListView" ) ) { + call = createListViewItemImpl( n, fullObjName, QString::null ); + if ( !call.isEmpty() ) { + if ( numItems == 0 ) + trout << trindent << fullObjName << ".clear()" << endl; + trout << call << endl; + } + } + if ( !call.isEmpty() ) + numItems++; + } else if ( n.tagName() == "column" || n.tagName() == "row" ) { + QString call; + QString value; + + if ( objClass.contains( "ListView" ) ) { + call = createListViewColumnImpl( n, fullObjName, &value ); + if ( !call.isEmpty() ) { + out << call; + trout << trindent << fullObjName << ".header().setLabel(" + << numColumns++ << "," << value << ")\n"; + } + } else if ( objClass == "QTable" || objClass == "QDataTable" ) { + bool isCols = ( n.tagName() == "column" ); + call = createTableRowColumnImpl( n, fullObjName, &value ); + if ( !call.isEmpty() ) { + out << call; + trout << trindent << fullObjName << "." + << ( isCols ? "horizontalHeader" : "verticalHeader" ) + << "().setLabel(" + << ( isCols ? numColumns++ : numRows++ ) + << "," << value << ")\n"; + } + } + } + } + + // create all children, some widgets have special requirements + + if ( objClass == "QTabWidget" ) { + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( tags.contains( n.tagName() ) ) { + QString page = createObjectImpl( n, objClass, fullObjName ); + QString comment; + QString label = DomTool::readAttribute( n, "title", "", comment ).toString(); + out << indent << fullObjName << ".insertTab(" << page << ",QString.fromLatin1(\"\"))" << endl; + trout << trindent << fullObjName << ".changeTab(" << page << "," << trcall( label, comment ) << ")" << endl; + } + } + } else if ( objClass == "QWidgetStack" ) { + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( tags.contains( n.tagName() ) ) { + QString page = createObjectImpl( n, objClass, fullObjName ); + int id = DomTool::readAttribute( n, "id", "" ).toInt(); + out << indent << fullObjName << ".addWidget(" << page << "," << id << ")" << endl; + } + } + } else if ( objClass == "QToolBox" ) { + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( tags.contains( n.tagName() ) ) { + QString page = createObjectImpl( n, objClass, fullObjName ); + QString comment; + QString label = DomTool::readAttribute( n, "label", "", comment ).toString(); + out << indent << fullObjName << ".addItem(" << page << ",QString.fromLatin1(\"\"))" << endl; + trout << trindent << fullObjName << ".setItemLabel(" << fullObjName + << ".indexOf(" << page << ")," << trcall( label, comment ) + << ")" << endl; + } + } + } else if ( objClass != "QToolBar" && objClass != "QMenuBar" ) { // standard widgets + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( tags.contains( n.tagName() ) ) + createObjectImpl( n, objClass, fullObjName ); + } + } + + return fullObjName; +} + + + +/*! + Creates a set-call for property \a exclusiveProp of the object + given in \a e. + + If the object does not have this property, the function does nothing. + + Exclusive properties are used to generate the implementation of + application font or palette change handlers in createFormImpl(). + + */ +void Uic::createExclusiveProperty( const QDomElement & e, const QString& exclusiveProp ) +{ + QDomElement n; + QString objClass = getClassName( e ); + if ( objClass.isEmpty() ) + return; + QString objName = getObjectName( e ); +#if 0 // it's not clear whether this check should be here or not + if ( objName.isEmpty() ) + return; +#endif + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "property" ) { + bool stdset = stdsetdef; + if ( n.hasAttribute( "stdset" ) ) + stdset = toBool( n.attribute( "stdset" ) ); + QString prop = n.attribute( "name" ); + if ( prop != exclusiveProp ) + continue; + QString value = setObjectProperty( objClass, objName, prop, n.firstChild().toElement(), stdset ); + if ( value.isEmpty() ) + continue; + out << indent << indent << objName << ".setProperty(\"" << prop << "\",QVariant(" << value << "))" << endl; + } + } +} + + +/* Convert a QSizePolicy::SizeType to text. */ +static QString mapSizeType(QSizePolicy::SizeType st) +{ + const char *txt; + + switch (st) + { + case QSizePolicy::Fixed: + txt = "QSizePolicy.Fixed"; + break; + + case QSizePolicy::Minimum: + txt = "QSizePolicy.Minimum"; + break; + + case QSizePolicy::Maximum: + txt = "QSizePolicy.Maximum"; + break; + + case QSizePolicy::Preferred: + txt = "QSizePolicy.Preferred"; + break; + + case QSizePolicy::MinimumExpanding: + txt = "QSizePolicy.MinimumExpanding"; + break; + + case QSizePolicy::Expanding: + txt = "QSizePolicy.Expanding"; + break; + + case QSizePolicy::Ignored: + txt = "QSizePolicy.Ignored"; + break; + + default: + txt = "Invalid QSizePolicy::SizeType"; + } + + return txt; +} + + +/*! Attention: this function has to be in sync with + Resource::saveProperty() and DomTool::elementToVariant. If you + change one, change all. + */ +QString Uic::setObjectProperty( const QString& objClass, const QString& obj, const QString &prop, const QDomElement &e, bool stdset ) +{ + QString v; + if ( e.tagName() == "rect" ) { + QDomElement n3 = e.firstChild().toElement(); + int x = 0, y = 0, w = 0, h = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "x" ) + x = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "y" ) + y = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "width" ) + w = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "height" ) + h = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = "QRect(%1,%2,%3,%4)"; + v = v.arg(x).arg(y).arg(w).arg(h); + + } else if ( e.tagName() == "point" ) { + QDomElement n3 = e.firstChild().toElement(); + int x = 0, y = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "x" ) + x = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "y" ) + y = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = "QPoint(%1,%2)"; + v = v.arg(x).arg(y); + } else if ( e.tagName() == "size" ) { + QDomElement n3 = e.firstChild().toElement(); + int w = 0, h = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "width" ) + w = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "height" ) + h = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = "QSize(%1,%2)"; + v = v.arg(w).arg(h); + } else if ( e.tagName() == "color" ) { + QDomElement n3 = e.firstChild().toElement(); + int r = 0, g = 0, b = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "red" ) + r = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "green" ) + g = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "blue" ) + b = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = "QColor(%1,%2,%3)"; + v = v.arg(r).arg(g).arg(b); + } else if ( e.tagName() == "font" ) { + QDomElement n3 = e.firstChild().toElement(); + QString attrname = e.parentNode().toElement().attribute( "name", "font" ); + QString fontname; + if ( !obj.isEmpty() ) { + fontname = registerObject( obj + "_" + attrname ); + out << indent << fontname << " = QFont(self." << obj << ".font())" << endl; + } else { + fontname = registerObject( "f" ); + out << indent << fontname << " = QFont(self.font())" << endl; + } + while ( !n3.isNull() ) { + if ( n3.tagName() == "family" ) + out << indent << fontname << ".setFamily(\"" << n3.firstChild().toText().data() << "\")" << endl; + else if ( n3.tagName() == "pointsize" ) + out << indent << fontname << ".setPointSize(" << n3.firstChild().toText().data() << ")" << endl; + else if ( n3.tagName() == "bold" ) + out << indent << fontname << ".setBold(" << mkBool( n3.firstChild().toText().data() ) << ")" << endl; + else if ( n3.tagName() == "italic" ) + out << indent << fontname << ".setItalic(" << mkBool( n3.firstChild().toText().data() ) << ")" << endl; + else if ( n3.tagName() == "underline" ) + out << indent << fontname << ".setUnderline(" << mkBool( n3.firstChild().toText().data() ) << ")" << endl; + else if ( n3.tagName() == "strikeout" ) + out << indent << fontname << ".setStrikeOut(" << mkBool( n3.firstChild().toText().data() ) << ")" << endl; + n3 = n3.nextSibling().toElement(); + } + + if ( prop == "font" ) { + if ( !obj.isEmpty() ) + out << indent << "self." << obj << ".setFont(" << fontname << ")" << endl; + else + out << indent << "self.setFont(" << fontname << ")" << endl; + } else { + v = fontname; + } + } else if ( e.tagName() == "string" ) { + QString txt = e.firstChild().toText().data(); + QString com = getComment( e.parentNode() ); + + if ( prop == "toolTip" && objClass != "QAction" && objClass != "QActionGroup" ) { + if ( !obj.isEmpty() ) + trout << trindent << "QToolTip.add(self." << obj << "," + << trcall( txt, com ) << ")" << endl; + else + trout << trindent << "QToolTip.add(self," + << trcall( txt, com ) << ")" << endl; + } else if ( prop == "whatsThis" && objClass != "QAction" && objClass != "QActionGroup" ) { + if ( !obj.isEmpty() ) + trout << trindent << "QWhatsThis.add(self." << obj << "," + << trcall( txt, com ) << ")" << endl; + else + trout << trindent << "QWhatsThis.add(self," + << trcall( txt, com ) << ")" << endl; + } else { + v = trcall( txt, com ); + } + } else if ( e.tagName() == "cstring" ) { + v = "\"%1\""; + v = v.arg( e.firstChild().toText().data() ); + } else if ( e.tagName() == "number" ) { + v = "%1"; + v = v.arg( e.firstChild().toText().data() ); + } else if ( e.tagName() == "bool" ) { + if ( stdset ) + v = "%1"; + else + v = "QVariant(%1,0)"; + v = v.arg( mkBool( e.firstChild().toText().data() ) ); + } else if ( e.tagName() == "pixmap" ) { + v = e.firstChild().toText().data(); + if ( !v.isEmpty() ) { + if ( pixmapLoaderFunction.isEmpty() ) { + v.prepend( "self." ); + } else { + v.prepend( pixmapLoaderFunction + "(" + QString( externPixmaps ? "\"" : "" ) ); + v.append( QString( externPixmaps ? "\"" : "" ) + ")" ); + } + } + } else if ( e.tagName() == "iconset" ) { + v = "QIconSet(%1)"; + QString s = e.firstChild().toText().data(); + if ( !s.isEmpty() ) { + if ( pixmapLoaderFunction.isEmpty() ) { + s.prepend( "self." ); + } else { + s.prepend( pixmapLoaderFunction + "(" + QString( externPixmaps ? "\"" : "" ) ); + s.append( QString( externPixmaps ? "\"" : "" ) + ")" ); + } + } + v = v.arg( s ); + } else if ( e.tagName() == "image" ) { + v = e.firstChild().toText().data() + ".convertToImage()"; + } else if ( e.tagName() == "enum" ) { + v = "%1.%2"; + QString oc = objClass; + QString ev = e.firstChild().toText().data(); + if ( oc == "QListView" && ev == "Manual" ) // #### workaround, rename QListView::Manual in 4.0 + oc = "QScrollView"; + v = v.arg( oc ).arg( ev ); + } else if ( e.tagName() == "set" ) { + QString keys( e.firstChild().toText().data() ); + QStringList lst = QStringList::split( '|', keys ); + v = ""; + QStringList::Iterator it = lst.begin(); + while ( it != lst.end() ) { + v += objClass + "." + *it; + if ( it != lst.fromLast() ) + v += " | "; + ++it; + } + } else if ( e.tagName() == "sizepolicy" ) { + QDomElement n3 = e.firstChild().toElement(); + QSizePolicy sp; + while ( !n3.isNull() ) { + if ( n3.tagName() == "hsizetype" ) + sp.setHorData( (QSizePolicy::SizeType)n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "vsizetype" ) + sp.setVerData( (QSizePolicy::SizeType)n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "horstretch" ) + sp.setHorStretch( n3.firstChild().toText().data().toInt() ); + else if ( n3.tagName() == "verstretch" ) + sp.setVerStretch( n3.firstChild().toText().data().toInt() ); + n3 = n3.nextSibling().toElement(); + } + QString tmp = "self."; + if ( !obj.isEmpty() ) + tmp += obj + "."; + v = "QSizePolicy(%1,%2,%3,%4," + tmp + "sizePolicy().hasHeightForWidth())"; + v = v.arg( mapSizeType(sp.horData()) ).arg( mapSizeType(sp.verData()) ).arg( sp.horStretch() ).arg( sp.verStretch() ); + } else if ( e.tagName() == "palette" ) { + QPalette pal; + bool no_pixmaps = e.elementsByTagName( "pixmap" ).count() == 0; + QDomElement n; + if ( no_pixmaps ) { + n = e.firstChild().toElement(); + while ( !n.isNull() ) { + QColorGroup cg; + if ( n.tagName() == "active" ) { + cg = loadColorGroup( n ); + pal.setActive( cg ); + } else if ( n.tagName() == "inactive" ) { + cg = loadColorGroup( n ); + pal.setInactive( cg ); + } else if ( n.tagName() == "disabled" ) { + cg = loadColorGroup( n ); + pal.setDisabled( cg ); + } + n = n.nextSibling().toElement(); + } + } + if ( no_pixmaps && pal == QPalette( pal.active().button(), pal.active().background() ) ) { + v = "QPalette(QColor(%1,%2,%3),QColor(%1,%2,%3))"; + v = v.arg( pal.active().button().red() ).arg( pal.active().button().green() ).arg( pal.active().button().blue() ); + v = v.arg( pal.active().background().red() ).arg( pal.active().background().green() ).arg( pal.active().background().blue() ); + } else { + QString palette = "pal"; + if ( !pal_used ) { + out << indent << palette << " = QPalette()" << endl; + pal_used = TRUE; + } + QString cg = "cg"; + if ( !cg_used ) { + out << indent << cg << " = QColorGroup()" << endl; + cg_used = TRUE; + } + n = e.firstChild().toElement(); + while ( !n.isNull() && n.tagName() != "active" ) + n = n.nextSibling().toElement(); + createColorGroupImpl( cg, n ); + out << indent << palette << ".setActive(" << cg << ")" << endl; + + n = e.firstChild().toElement(); + while ( !n.isNull() && n.tagName() != "inactive" ) + n = n.nextSibling().toElement(); + createColorGroupImpl( cg, n ); + out << indent << palette << ".setInactive(" << cg << ")" << endl; + + n = e.firstChild().toElement(); + while ( !n.isNull() && n.tagName() != "disabled" ) + n = n.nextSibling().toElement(); + createColorGroupImpl( cg, n ); + out << indent << palette << ".setDisabled(" << cg << ")" << endl; + v = palette; + } + } else if ( e.tagName() == "cursor" ) { + v = "QCursor(%1)"; + v = v.arg( e.firstChild().toText().data() ); + } else if ( e.tagName() == "date" ) { + QDomElement n3 = e.firstChild().toElement(); + int y, m, d; + y = m = d = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "year" ) + y = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "month" ) + m = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "day" ) + d = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = "QDate(%1,%2,%3)"; + v = v.arg(y).arg(m).arg(d); + } else if ( e.tagName() == "time" ) { + QDomElement n3 = e.firstChild().toElement(); + int h, m, s; + h = m = s = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "hour" ) + h = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "minute" ) + m = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "second" ) + s = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = "QTime(%1,%2,%3)"; + v = v.arg(h).arg(m).arg(s); + } else if ( e.tagName() == "datetime" ) { + QDomElement n3 = e.firstChild().toElement(); + int h, mi, s, y, mo, d; + h = mi = s = y = mo = d = 0; + while ( !n3.isNull() ) { + if ( n3.tagName() == "hour" ) + h = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "minute" ) + mi = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "second" ) + s = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "year" ) + y = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "month" ) + mo = n3.firstChild().toText().data().toInt(); + else if ( n3.tagName() == "day" ) + d = n3.firstChild().toText().data().toInt(); + n3 = n3.nextSibling().toElement(); + } + v = "QDateTime(QDate(%1,%2,%3),QTime(%4,%5,%6))"; + v = v.arg(y).arg(mo).arg(d).arg(h).arg(mi).arg(s); + } else if ( e.tagName() == "stringlist" ) { + QStringList l; + QDomElement n3 = e.firstChild().toElement(); + QString listname = "l"; + if ( !obj.isEmpty() ) { + listname = obj + "_stringlist"; + listname = registerObject( listname ); + out << indent << listname << " = QStringList()" << endl; + } else { + out << indent << listname << " = QStringList()" << endl; + } + while ( !n3.isNull() ) { + if ( n3.tagName() == "string" ) + out << indent << listname << ".append(\"" << n3.firstChild().toText().data().simplifyWhiteSpace() << "\")" << endl; + n3 = n3.nextSibling().toElement(); + } + v = listname; + } + return v; +} + + + + +/*! Extracts a named object property from \a e. + */ +QDomElement Uic::getObjectProperty( const QDomElement& e, const QString& name ) +{ + QDomElement n; + for ( n = e.firstChild().toElement(); + !n.isNull(); + n = n.nextSibling().toElement() ) { + if ( n.tagName() == "property" && n.toElement().attribute("name") == name ) + return n; + } + return n; +} + diff --git a/pyuic3/parser.cpp b/pyuic3/parser.cpp new file mode 100644 index 0000000..4fc13c5 --- /dev/null +++ b/pyuic3/parser.cpp @@ -0,0 +1,66 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include "parser.h" +#include +#include + +class NormalizeObject : public QObject +{ +public: + NormalizeObject() : QObject() {} + static QCString normalizeSignalSlot( const char *signalSlot ) { return QObject::normalizeSignalSlot( signalSlot ); } +}; + +QString Parser::cleanArgs( const QString &func ) +{ + QString slot( func ); + int begin = slot.find( "(" ) + 1; + QString args = slot.mid( begin ); + args = args.left( args.find( ")" ) ); + QStringList lst = QStringList::split( ',', args ); + QString res = slot.left( begin ); + for ( QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) { + if ( it != lst.begin() ) + res += ","; + QString arg = *it; + int pos = 0; + if ( ( pos = arg.find( "&" ) ) != -1 ) { + arg = arg.left( pos + 1 ); + } else if ( ( pos = arg.find( "*" ) ) != -1 ) { + arg = arg.left( pos + 1 ); + } else { + arg = arg.simplifyWhiteSpace(); + if ( ( pos = arg.find( ':' ) ) != -1 ) + arg = arg.left( pos ).simplifyWhiteSpace() + ":" + arg.mid( pos + 1 ).simplifyWhiteSpace(); + QStringList l = QStringList::split( ' ', arg ); + if ( l.count() == 2 ) { + if ( l[ 0 ] != "const" && l[ 0 ] != "unsigned" && l[ 0 ] != "var" ) + arg = l[ 0 ]; + } else if ( l.count() == 3 ) { + arg = l[ 0 ] + " " + l[ 1 ]; + } + } + res += arg; + } + res += ")"; + + return QString::fromLatin1( NormalizeObject::normalizeSignalSlot( res.latin1() ) ); +} diff --git a/pyuic3/parser.h b/pyuic3/parser.h new file mode 100644 index 0000000..5a5671a --- /dev/null +++ b/pyuic3/parser.h @@ -0,0 +1,33 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#ifndef PARSER_H +#define PARSER_H + +#include + +class Parser +{ +public: + static QString cleanArgs( const QString &func ); + +}; + +#endif diff --git a/pyuic3/pyuic-prof.sbf b/pyuic3/pyuic-prof.sbf new file mode 100644 index 0000000..2501349 --- /dev/null +++ b/pyuic3/pyuic-prof.sbf @@ -0,0 +1,24 @@ +# This is the build file for pyuic for Qt v3 Professional Edition. +# +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +target = pyuic +sources = main.cpp uic.cpp form.cpp object.cpp subclassing.cpp embed.cpp widgetdatabase.cpp domtool.cpp parser.cpp qdom.cpp qxml.cpp +headers = domtool.h globaldefs.h parser.h uic.h widgetdatabase.h widgetinterface.h diff --git a/pyuic3/pyuic.pro.in b/pyuic3/pyuic.pro.in new file mode 100644 index 0000000..faebbd6 --- /dev/null +++ b/pyuic3/pyuic.pro.in @@ -0,0 +1,36 @@ +# Copyright (c) 2001 +# Phil Thompson +# Copyright (c) 2002, 2003 +# Riverbank Computing Limited +# +# The project file for pyuic for Qt v3. + + +TEMPLATE = app +CONFIG += qt console warn_on release @PYQT_RBPROF@ +INCLUDEPATH += @BLX_INCLUDEPATH@ $(QTDIR)/src/3rdparty/zlib +DEFINES += UIC QT_INTERNAL_XML @BLX_DEFINES@ + +DESTDIR = @PYQT_BINDIR@ +TARGET = pyuic + +HEADERS = uic.h \ + widgetdatabase.h \ + domtool.h \ + parser.h \ + widgetinterface.h + +SOURCES = main.cpp \ + uic.cpp \ + form.cpp \ + object.cpp \ + subclassing.cpp \ + embed.cpp \ + widgetdatabase.cpp \ + domtool.cpp \ + parser.cpp + +rbprof:exists($(QTDIR)/src/qt_professional.pri) { + QT_SOURCE_TREE = $(QTDIR) + include($(QTDIR)/src/qt_professional.pri) +} diff --git a/pyuic3/pyuic.sbf b/pyuic3/pyuic.sbf new file mode 100644 index 0000000..a40245d --- /dev/null +++ b/pyuic3/pyuic.sbf @@ -0,0 +1,24 @@ +# This is the build file for pyuic for Qt v3. +# +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +target = pyuic +sources = main.cpp uic.cpp form.cpp object.cpp subclassing.cpp embed.cpp widgetdatabase.cpp domtool.cpp parser.cpp +headers = domtool.h globaldefs.h parser.h uic.h widgetdatabase.h widgetinterface.h diff --git a/pyuic3/subclassing.cpp b/pyuic3/subclassing.cpp new file mode 100644 index 0000000..299e044 --- /dev/null +++ b/pyuic3/subclassing.cpp @@ -0,0 +1,185 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include "uic.h" +#include "parser.h" +#include "widgetdatabase.h" +#include "domtool.h" +#include +#include +#include +#define NO_STATIC_COLORS +#include +#include +#include +#include + + +/*! + Creates an implementation for a subclass \a subClass of the form + given in \a e + + \sa createSubDecl() + */ +void Uic::createSubImpl( const QDomElement &e, const QString& subClass ) +{ + QDomElement n; + QDomNodeList nl; + int i; + + QString objClass = getClassName( e ); + if ( objClass.isEmpty() ) + return; + + QString supClsMod = fileName; + int tail = supClsMod.findRev('.',-1); + if (tail >= 0) + supClsMod.truncate(tail); + + out << indent << "from " << supClsMod << " import " << nameOfClass << endl; + out << endl; + out << endl; + + out << indent << "class " << subClass << "(" << nameOfClass << "):" << endl; + ++indent; + out << endl; + + // constructor + if ( objClass == "QDialog" || objClass == "QWizard" ) { + out << indent << "def __init__(self,parent = None,name = None,modal = 0,fl = 0):" << endl; + ++indent; + out << indent << nameOfClass << ".__init__(self,parent,name,modal,fl)" << endl; + } else { // standard QWidget + out << indent << "def __init__(self,parent = None,name = None,fl = 0):" << endl; + ++indent; + out << indent << nameOfClass << ".__init__(self,parent,name,fl)" << endl; + } + --indent; + + // find additional functions + QStringList publicSlots, protectedSlots, privateSlots; + QStringList publicSlotTypes, protectedSlotTypes, privateSlotTypes; + QStringList publicSlotSpecifier, protectedSlotSpecifier, privateSlotSpecifier; + QStringList publicFuncts, protectedFuncts, privateFuncts; + QStringList publicFunctRetTyp, protectedFunctRetTyp, privateFunctRetTyp; + QStringList publicFunctSpec, protectedFunctSpec, privateFunctSpec; + + nl = e.parentNode().toElement().elementsByTagName( "slot" ); + for ( i = 0; i < (int) nl.length(); i++ ) { + n = nl.item(i).toElement(); + if ( n.parentNode().toElement().tagName() != "slots" + && n.parentNode().toElement().tagName() != "connections" ) + continue; + if ( n.attribute( "language", "C++" ) != "C++" ) + continue; + QString returnType = n.attribute( "returnType", "void" ); + QString functionName = n.firstChild().toText().data().stripWhiteSpace(); + if ( functionName.endsWith( ";" ) ) + functionName = functionName.left( functionName.length() - 1 ); + QString specifier = n.attribute( "specifier" ); + QString access = n.attribute( "access" ); + if ( access == "protected" ) { + protectedSlots += functionName; + protectedSlotTypes += returnType; + protectedSlotSpecifier += specifier; + } else if ( access == "private" ) { + privateSlots += functionName; + privateSlotTypes += returnType; + privateSlotSpecifier += specifier; + } else { + publicSlots += functionName; + publicSlotTypes += returnType; + publicSlotSpecifier += specifier; + } + } + + nl = e.parentNode().toElement().elementsByTagName( "function" ); + for ( i = 0; i < (int) nl.length(); i++ ) { + n = nl.item(i).toElement(); + if ( n.parentNode().toElement().tagName() != "functions" ) + continue; + if ( n.attribute( "language", "C++" ) != "C++" ) + continue; + QString returnType = n.attribute( "returnType", "void" ); + QString functionName = n.firstChild().toText().data().stripWhiteSpace(); + if ( functionName.endsWith( ";" ) ) + functionName = functionName.left( functionName.length() - 1 ); + QString specifier = n.attribute( "specifier" ); + QString access = n.attribute( "access" ); + if ( access == "protected" ) { + protectedFuncts += functionName; + protectedFunctRetTyp += returnType; + protectedFunctSpec += specifier; + } else if ( access == "private" ) { + privateFuncts += functionName; + privateFunctRetTyp += returnType; + privateFunctSpec += specifier; + } else { + publicFuncts += functionName; + publicFunctRetTyp += returnType; + publicFunctSpec += specifier; + } + } + + if ( !publicFuncts.isEmpty() ) + writeFunctionsSubImpl( publicFuncts, publicFunctRetTyp, publicFunctSpec, subClass, "public function" ); + + // create stubs for public additional slots + if ( !publicSlots.isEmpty() ) + writeFunctionsSubImpl( publicSlots, publicSlotTypes, publicSlotSpecifier, subClass, "public slot" ); + + if ( !protectedFuncts.isEmpty() ) + writeFunctionsSubImpl( protectedFuncts, protectedFunctRetTyp, protectedFunctSpec, subClass, "protected function" ); + + // create stubs for protected additional slots + if ( !protectedSlots.isEmpty() ) + writeFunctionsSubImpl( protectedSlots, protectedSlotTypes, protectedSlotSpecifier, subClass, "protected slot" ); + + if ( !privateFuncts.isEmpty() ) + writeFunctionsSubImpl( privateFuncts, privateFunctRetTyp, privateFunctSpec, subClass, "private function" ); + + // create stubs for private additional slots + if ( !privateSlots.isEmpty() ) + writeFunctionsSubImpl( privateSlots, privateSlotTypes, privateSlotSpecifier, subClass, "private slot" ); + + --indent; +} + +void Uic::writeFunctionsSubImpl( const QStringList &fuLst, const QStringList &typLst, const QStringList &specLst, + const QString &subClass, const QString &descr ) +{ + QValueListConstIterator it, it2, it3; + for ( it = fuLst.begin(), it2 = typLst.begin(), it3 = specLst.begin(); + it != fuLst.end(); ++it, ++it2, ++it3 ) { + QString type = *it2; + if ( type.isEmpty() ) + type = "void"; + if ( *it3 == "non virtual" ) + continue; + out << endl; + out << indent << "# " << descr << endl; + pySlot(it); + ++indent; + out << endl; + out << indent << "print \"" << subClass << "." << (*it) << ": Not implemented yet\"" << endl; + --indent; + } + out << endl; +} diff --git a/pyuic3/uic.cpp b/pyuic3/uic.cpp new file mode 100644 index 0000000..d359302 --- /dev/null +++ b/pyuic3/uic.cpp @@ -0,0 +1,1145 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (c) 2004 Phil Thompson +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include "uic.h" +#include "parser.h" +#include "widgetdatabase.h" +#include "domtool.h" +#include +#include +#include +#define NO_STATIC_COLORS +#include +#include +#include +#include + +bool Uic::isMainWindow = FALSE; +PyIndent Uic::indent; +PyIndent Uic::trindent; + + +// Re-calculate the indent string based on the current number and nature of the +// indent. +void PyIndent::calc() +{ + indstr.truncate(0); + + for (uint i = current; i > 0; --i) + if (tabStop == 0) + indstr += '\t'; + else + for (uint t = 0; t < tabStop; ++t) + indstr += ' '; +} + + +QString Uic::getComment( const QDomNode& n ) +{ + QDomNode child = n.firstChild(); + while ( !child.isNull() ) { + if ( child.toElement().tagName() == "comment" ) + return child.toElement().firstChild().toText().data(); + child = child.nextSibling(); + } + return QString::null; +} + +QString Uic::mkBool( bool b ) +{ + return b? "1" : "0"; +} + +QString Uic::mkBool( const QString& s ) +{ + return mkBool( s == "true" || s == "1" ); +} + +bool Uic::toBool( const QString& s ) +{ + return s == "true" || s.toInt() != 0; +} + +QString Uic::fixString( const QString &str, bool encode ) +{ +#if QT_VERSION >= 0x030100 + QString s; + if ( !encode ) { + s = str; + s.replace( "\\", "\\\\" ); + s.replace( "\"", "\\\"" ); + s.replace( "\r", "" ); + s.replace( "\n", "\\n\"\n\"" ); + } else { + QCString utf8 = str.utf8(); + const int l = utf8.length(); + + for ( int i = 0; i < l; ++i ) { + uchar ch = (uchar)utf8[i]; + + if (ch != 0x0d) { // skip \r + s += "\\x"; + + if (ch <= 0x0f) + s += "0"; + + s += QString::number( ch, 16 ); + } + } + } +#else + QString s( str ); + s.replace( QRegExp( "\\\\" ), "\\\\" ); + s.replace( QRegExp( "\"" ), "\\\"" ); + s.replace( QRegExp( "\r?\n" ), "\\n\"\n\"" ); +#endif + return "\"" + s + "\""; +} + +QString Uic::trcall( const QString& sourceText, const QString& comment ) +{ + if ( sourceText.isEmpty() && comment.isEmpty() ) + return "QString.null"; + + QString t = trmacro; + bool encode = FALSE; + if ( t.isNull() ) { + t = "self.__tr"; + for ( int i = 0; i < (int) sourceText.length(); i++ ) { + if ( sourceText[i].unicode() >= 0x80 ) { + t = "self.__trUtf8"; + encode = TRUE; + break; + } + } + + if (encode) + pyNeedTrUtf8 = TRUE; + else + pyNeedTr = TRUE; + } + + if ( comment.isEmpty() ) { + return t + "(" + fixString( sourceText, encode ) + ")"; + } else { + return t + "(" + fixString( sourceText, encode ) + "," + + fixString( comment, encode ) + ")"; + } +} + +QString Uic::mkStdSet( const QString& prop ) +{ + return QString( "set" ) + prop[0].upper() + prop.mid(1); +} + + + +/*! + \class Uic uic.h + \brief User Interface Compiler + + The class Uic encapsulates the user interface compiler (uic). + */ +Uic::Uic( const QString &fn, const char *outputFn, QTextStream &outStream, + QDomDocument doc, bool subcl, const QString &trm, + const QString& subClass, QString &uicClass ) + : out( outStream ), trout (&languageChangeBody ), + outputFileName( outputFn ), trmacro( trm ), + pyNeedTr(FALSE), pyNeedTrUtf8(FALSE) +{ + fileName = fn; + writeFunctImpl = TRUE; + defMargin = BOXLAYOUT_DEFAULT_MARGIN; + defSpacing = BOXLAYOUT_DEFAULT_SPACING; + externPixmaps = FALSE; + + trindent.setIndent(2); + + item_used = cg_used = pal_used = 0; + + layouts << "hbox" << "vbox" << "grid"; + tags = layouts; + tags << "widget"; + + pixmapLoaderFunction = getPixmapLoaderFunction( doc.firstChild().toElement() ); + nameOfClass = getFormClassName( doc.firstChild().toElement() ); + +#if QT_VERSION >= 0x030300 + uiFileVersion = doc.firstChild().toElement().attribute("version"); +#endif + stdsetdef = toBool( doc.firstChild().toElement().attribute("stdsetdef") ); + + if ( doc.firstChild().isNull() || doc.firstChild().firstChild().isNull() ) + return; + + // Extract any Python code in the comments. + QStringList comm = QStringList::split('\n',getComment(doc.firstChild())); + + for (QStringList::Iterator it = comm.begin(); it != comm.end(); ++it) + if ((*it).startsWith("Python:")) + pyCode += (*it).mid(7) + "\n"; + + QDomElement e = doc.firstChild().firstChild().toElement(); + QDomElement widget; + while ( !e.isNull() ) { + if ( e.tagName() == "widget" ) { + widget = e; + } else if ( e.tagName() == "pixmapinproject" ) { + externPixmaps = TRUE; + } else if ( e.tagName() == "layoutdefaults" ) { + defSpacing = e.attribute( "spacing", defSpacing.toString() ); + defMargin = e.attribute( "margin", defMargin.toString() ); + } else if ( e.tagName() == "layoutfunctions" ) { + defSpacing = e.attribute( "spacing", defSpacing.toString() ); + + bool ok; + defSpacing.toInt( &ok ); + if ( !ok ) { + QString buf = defSpacing.toString(); + defSpacing = buf.append( "()" ); + } + defMargin = e.attribute( "margin", defMargin.toString() ); + defMargin.toInt( &ok ); + if ( !ok ) { + QString buf = defMargin.toString(); + defMargin = buf.append( "()" ); + } + } + e = e.nextSibling().toElement(); + } + e = widget; + + if ( nameOfClass.isEmpty() ) + nameOfClass = getObjectName( e ); + + uicClass = nameOfClass; + + namespaces = QStringList::split( "::", nameOfClass ); + bareNameOfClass = namespaces.last(); + namespaces.remove( namespaces.fromLast() ); + + if ( subcl ) { + createSubImpl( e, subClass ); + } else { + createFormImpl( e ); + } + + ++indent; + + if (pyNeedTr) + { + out << "\n"; + out << indent << "def __tr(self,s,c = None):\n"; + ++indent; + out << indent << "return qApp.translate(\"" << nameOfClass << "\",s,c)\n"; + --indent; + } + + if (pyNeedTrUtf8) + { + out << "\n"; + out << indent << "def __trUtf8(self,s,c = None):\n"; + ++indent; + out << indent << "return qApp.translate(\"" << nameOfClass << "\",s,c,QApplication.UnicodeUTF8)\n"; + --indent; + } + + --indent; +} + +/*! Extracts a pixmap loader function from \a e + */ +QString Uic::getPixmapLoaderFunction( const QDomElement& e ) +{ + QDomElement n; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "pixmapfunction" ) + return n.firstChild().toText().data(); + } + return QString::null; +} + + +/*! Extracts the forms class name from \a e + */ +QString Uic::getFormClassName( const QDomElement& e ) +{ + QDomElement n; + QString cn; + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "class" ) { + QString s = n.firstChild().toText().data(); + int i; + while ( ( i = s.find(' ' )) != -1 ) + s[i] = '_'; + cn = s; + } + } + return cn; +} + +/*! Extracts a class name from \a e. + */ +QString Uic::getClassName( const QDomElement& e ) +{ + QString s = e.attribute( "class" ); + if ( s.isEmpty() && e.tagName() == "toolbar" ) + s = "QToolBar"; + else if ( s.isEmpty() && e.tagName() == "menubar" ) + s = "QMenuBar"; + return s; +} + +/*! Returns TRUE if database framework code is generated, else FALSE. +*/ + +bool Uic::isFrameworkCodeGenerated( const QDomElement& e ) +{ + QDomElement n = getObjectProperty( e, "frameworkCode" ); + if ( n.attribute("name") == "frameworkCode" && + !DomTool::elementToVariant( n.firstChild().toElement(), QVariant( TRUE, 0 ) ).toBool() ) + return FALSE; + return TRUE; +} + +/*! Extracts an object name from \a e. It's stored in the 'name' + property. + */ +QString Uic::getObjectName( const QDomElement& e ) +{ + QDomElement n = getObjectProperty( e, "name" ); + if ( n.firstChild().toElement().tagName() == "cstring" ) + return n.firstChild().toElement().firstChild().toText().data(); + return QString::null; +} + +/*! Extracts an layout name from \a e. It's stored in the 'name' + property of the preceeding sibling (the first child of a QLayoutWidget). + */ +QString Uic::getLayoutName( const QDomElement& e ) +{ + QDomElement p = e.parentNode().toElement(); + QString name; + + if ( getClassName(p) != "QLayoutWidget" ) + name = "Layout"; + + QDomElement n = getObjectProperty( p, "name" ); + if ( n.firstChild().toElement().tagName() == "cstring" ) { + name.prepend( n.firstChild().toElement().firstChild().toText().data() ); + return QStringList::split( "::", name ).last(); + } + return e.tagName(); +} + + +QString Uic::getDatabaseInfo( const QDomElement& e, const QString& tag ) +{ + QDomElement n; + QDomElement n1; + int child = 0; + // database info is a stringlist stored in this order + if ( tag == "connection" ) + child = 0; + else if ( tag == "table" ) + child = 1; + else if ( tag == "field" ) + child = 2; + else + return QString::null; + n = getObjectProperty( e, "database" ); + if ( n.firstChild().toElement().tagName() == "stringlist" ) { + // find correct stringlist entry + QDomElement n1 = n.firstChild().firstChild().toElement(); + for ( int i = 0; i < child && !n1.isNull(); ++i ) + n1 = n1.nextSibling().toElement(); + if ( n1.isNull() ) + return QString::null; + return n1.firstChild().toText().data(); + } + return QString::null; +} + + +/*! + Returns include file for class \a className or a null string. + */ +QString Uic::getInclude( const QString& className ) +{ + int wid = WidgetDatabase::idFromClassName( className ); + if ( wid != -1 ) + return WidgetDatabase::includeFile( wid ); + return QString::null; +} + + +void Uic::createActionImpl( const QDomElement &n, const QString &parent ) +{ + for ( QDomElement ae = n; !ae.isNull(); ae = ae.nextSibling().toElement() ) { + QString objName = registerObject( getObjectName( ae ) ); + if ( ae.tagName() == "action" ) + out << indent << "self." << objName << " = QAction(" << parent << ",\"" << objName << "\")" << endl; + else if ( ae.tagName() == "actiongroup" ) + out << indent << "self." << objName << " = QActionGroup(" << parent << ",\"" << objName << "\")" << endl; + else + continue; + bool subActionsDone = FALSE; +#if QT_VERSION >= 0x030300 + bool hasMenuText = FALSE; + QString actionText; +#endif + for ( QDomElement n2 = ae.firstChild().toElement(); !n2.isNull(); n2 = n2.nextSibling().toElement() ) { + if ( n2.tagName() == "property" ) { + bool stdset = stdsetdef; + if ( n2.hasAttribute( "stdset" ) ) + stdset = toBool( n2.attribute( "stdset" ) ); + QString prop = n2.attribute("name"); + if ( prop == "name" ) + continue; + QString value = setObjectProperty( "QAction", objName, prop, n2.firstChild().toElement(), stdset ); + if ( value.isEmpty() ) + continue; + + QString call = "self." + objName + "."; + if ( stdset ) + call += mkStdSet( prop ) + "(" + value + ")"; + else + call += "setProperty(\"" + prop + "\",QVariant(" + value + "))"; + +#if QT_VERSION >= 0x030300 + if (prop == "menuText") + hasMenuText = TRUE; + else if (prop == "text") + actionText = value; +#endif + + if ( n2.firstChild().toElement().tagName() == "string" ) { + trout << trindent << call << endl; + } else { + out << indent << call << endl; + } + } else if ( !subActionsDone && ( n2.tagName() == "actiongroup" || n2.tagName() == "action" ) ) { + createActionImpl( n2, "self." + objName ); + subActionsDone = TRUE; + } + } +#if QT_VERSION >= 0x030300 + // workaround for loading pre-3.3 files expecting bogus QAction behavior + if (!hasMenuText && !actionText.isEmpty() && uiFileVersion < "3.3") + trout << indent << "self." << objName << ".setMenuText(" << actionText << ")" << endl; +#endif + } +} + +QString get_dock( const QString &d ) +{ + if ( d == "0" ) + return "Qt.DockUnmanaged"; + if ( d == "1" ) + return "Qt.DockTornOff"; + if ( d == "2" ) + return "Qt.DockTop"; + if ( d == "3" ) + return "Qt.DockBottom"; + if ( d == "4" ) + return "Qt.DockRight"; + if ( d == "5" ) + return "Qt.DockLeft"; + if ( d == "6" ) + return "Qt.DockMinimized"; + return ""; +} + +void Uic::createToolbarImpl( const QDomElement &n, const QString &parentClass, const QString &parent ) +{ + QDomNodeList nl = n.elementsByTagName( "toolbar" ); + for ( int i = 0; i < (int) nl.length(); i++ ) { + QDomElement ae = nl.item( i ).toElement(); + QString dock = get_dock( ae.attribute( "dock" ) ); + QString objName = getObjectName( ae ); + out << indent << "self." << objName << " = QToolBar(QString(\"\"),self," << dock << ")" << endl; + createObjectImpl( ae, parentClass, parent ); + for ( QDomElement n2 = ae.firstChild().toElement(); !n2.isNull(); n2 = n2.nextSibling().toElement() ) { + if ( n2.tagName() == "action" ) { + out << indent << "self." << n2.attribute( "name" ) << ".addTo(self." << objName << ")" << endl; + } else if ( n2.tagName() == "separator" ) { + out << indent << "self." << objName << ".addSeparator()" << endl; + } else if ( n2.tagName() == "widget" ) { + if ( n2.attribute( "class" ) != "Spacer" ) { + createObjectImpl( n2, "QToolBar", "self." + objName ); + } else { + QString child = createSpacerImpl( n2, parentClass, parent, objName ); + out << indent << "QApplication.sendPostedEvents(self." << objName + << ",QEvent.ChildInserted)" << endl; + out << indent << "self." << objName << ".boxLayout().addItem(" << child << ")" << endl; + } + } + } + } +} + +void Uic::createMenuBarImpl( const QDomElement &n, const QString &parentClass, const QString &parent ) +{ + QString objName = getObjectName( n ); + out << indent << "self." << objName << " = QMenuBar(self,\"" << objName << "\")" << endl; + createObjectImpl( n, parentClass, parent ); + + int i = 0; + QDomElement c = n.firstChild().toElement(); + while ( !c.isNull() ) { + if ( c.tagName() == "item" ) { + QString itemName = "self." + c.attribute( "name" ); + out << endl; + out << indent << itemName << " = QPopupMenu(self)" << endl; + createPopupMenuImpl( c, parentClass, itemName ); + out << indent << "self." << objName << ".insertItem(QString(\"\")," << itemName << "," << i << ")" << endl; + QString findItem("self." + objName + ".findItem(%1)"); + findItem = findItem.arg(i); + trout << indent << "if " << findItem << ":" << endl; + ++indent; + trout << indent << findItem << ".setText(" << trcall( c.attribute( "text" ) ) << ")" << endl; + --indent; + } else if ( c.tagName() == "separator" ) { + out << endl; + out << indent << "self." << objName << ".insertSeparator(" << i << ")" << endl; + } + c = c.nextSibling().toElement(); + i++; + } +} + +void Uic::createPopupMenuImpl( const QDomElement &e, const QString &parentClass, const QString &parent ) +{ + int i = 0; + for ( QDomElement n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "action" || n.tagName() == "actiongroup" ) { + QDomElement n2 = n.nextSibling().toElement(); + if ( n2.tagName() == "item" ) { // the action has a sub menu + QString itemName = "self." + n2.attribute( "name" ); + QString itemText = n2.attribute( "text" ); + out << indent << itemName << " = QPopupMenu(self)" << endl; + out << indent << parent << ".setAccel(" << trcall( n2.attribute( "accel" ) ) << ","; + out << parent << ".insertItem(" << "self." << n.attribute( "name" ) << ".iconSet(),"; + out << trcall( itemText ) << "," << itemName << "))" << endl; + trout << indent << parent << ".changeItem(" << parent << ".idAt(" << i << "),"; + trout << trcall( itemText ) << ")" << endl; + createPopupMenuImpl( n2, parentClass, itemName ); + n = n2; + } else { + out << indent << "self." << n.attribute( "name" ) << ".addTo(" << parent << ")" << endl; + } + } else if ( n.tagName() == "separator" ) { + out << indent << parent << ".insertSeparator()" << endl; + } + ++i; + } +} + +/*! + Creates implementation of an listbox item tag. +*/ + +QString Uic::createListBoxItemImpl( const QDomElement &e, const QString &parent , + QString *value ) +{ + QDomElement n = e.firstChild().toElement(); + QString txt; + QString com; + QString pix; + while ( !n.isNull() ) { + if ( n.tagName() == "property" ) { + QString attrib = n.attribute( "name" ); + QVariant v = DomTool::elementToVariant( n.firstChild().toElement(), QVariant() ); + if ( attrib == "text" ) { + txt = v.toString(); + com = getComment( n ); + } else if ( attrib == "pixmap" ) { + pix = v.toString(); + if ( !pix.isEmpty() ) { + if ( pixmapLoaderFunction.isEmpty() ) { + pix.prepend( "self." ); + } else { + pix.prepend( pixmapLoaderFunction + "( " + QString( externPixmaps ? "\"" : "self." ) ); + pix.append( QString( externPixmaps ? "\"" : "" ) + ")" ); + } + } + } + } + n = n.nextSibling().toElement(); + } + + if ( value ) + *value = trcall( txt, com ); + + if ( pix.isEmpty() ) + return parent + ".insertItem(" + trcall( txt, com ) + ")"; + + return parent + ".insertItem(" + pix + "," + trcall( txt, com ) + ")"; +} + +/*! + Creates implementation of an iconview item tag. +*/ + +QString Uic::createIconViewItemImpl( const QDomElement &e, const QString &parent ) +{ + QDomElement n = e.firstChild().toElement(); + QString txt; + QString com; + QString pix; + while ( !n.isNull() ) { + if ( n.tagName() == "property" ) { + QString attrib = n.attribute( "name" ); + QVariant v = DomTool::elementToVariant( n.firstChild().toElement(), QVariant() ); + if ( attrib == "text" ) { + txt = v.toString(); + com = getComment( n ); + } else if ( attrib == "pixmap" ) { + pix = v.toString(); + if ( !pix.isEmpty() ) { + if ( pixmapLoaderFunction.isEmpty() ) { + pix.prepend( "self." ); + } else { + pix.prepend( pixmapLoaderFunction + "( " + QString( externPixmaps ? "\"" : "self." ) ); + pix.append( QString( externPixmaps ? "\"" : "" ) + ")" ); + } + } + } + } + n = n.nextSibling().toElement(); + } + + if ( pix.isEmpty() ) + return "QIconViewItem(" + parent + "," + trcall( txt, com ) + ")"; + else + return "QIconViewItem(" + parent + "," + trcall( txt, com ) + "," + pix + ")"; +} + +/*! + Creates implementation of an listview item tag. +*/ + +QString Uic::createListViewItemImpl( const QDomElement &e, const QString &parent, + const QString &parentItem ) +{ + QString s; + + QDomElement n = e.firstChild().toElement(); + + bool hasChildren = e.elementsByTagName( "item" ).count() > 0; + QString item; + + if ( hasChildren ) { + item = registerObject( "item" ); + } else { + item = "item"; + item_used = TRUE; + } + s = trindent + item + " = "; + + if ( !parentItem.isEmpty() ) + s += "QListViewItem(" + parentItem + "," + lastItem + ")\n"; + else + s += "QListViewItem(" + parent + "," + lastItem + ")\n"; + + QStringList texts; + QStringList pixmaps; + while ( !n.isNull() ) { + if ( n.tagName() == "property" ) { + QString attrib = n.attribute("name"); + QVariant v = DomTool::elementToVariant( n.firstChild().toElement(), QVariant() ); + if ( attrib == "text" ) + texts << v.toString(); + else if ( attrib == "pixmap" ) { + QString pix = v.toString(); + if ( !pix.isEmpty() ) { + if ( pixmapLoaderFunction.isEmpty() ) { + pix.prepend( "self." ); + } else { + pix.prepend( pixmapLoaderFunction + "( " + QString( externPixmaps ? "\"" : "self." ) ); + pix.append( QString( externPixmaps ? "\"" : "" ) + ")" ); + } + } + pixmaps << pix; + } + } else if ( n.tagName() == "item" ) { + s += trindent + item + ".setOpen(1)\n"; + s += createListViewItemImpl( n, parent, item ); + } + n = n.nextSibling().toElement(); + } + + for ( int i = 0; i < (int)texts.count(); ++i ) { + if ( !texts[ i ].isEmpty() ) + s += trindent + item + ".setText(" + QString::number( i ) + "," + trcall( texts[ i ] ) + ")\n"; + if ( !pixmaps[ i ].isEmpty() ) + s += trindent + item + ".setPixmap(" + QString::number( i ) + "," + pixmaps[ i ] + ")\n"; + } + + lastItem = item; + return s; +} + +/*! + Creates implementation of an listview column tag. +*/ + +QString Uic::createListViewColumnImpl( const QDomElement &e, const QString &parent, + QString *value ) +{ + QDomElement n = e.firstChild().toElement(); + QString txt; + QString com; + QString pix; + bool clickable = FALSE, resizable = FALSE; + while ( !n.isNull() ) { + if ( n.tagName() == "property" ) { + QString attrib = n.attribute("name"); + QVariant v = DomTool::elementToVariant( n.firstChild().toElement(), QVariant() ); + if ( attrib == "text" ) { + txt = v.toString(); + com = getComment( n ); + } else if ( attrib == "pixmap" ) { + pix = v.toString(); + if ( !pix.isEmpty() ) { + if ( pixmapLoaderFunction.isEmpty() ) { + pix.prepend( "self." ); + } else { + pix.prepend( pixmapLoaderFunction + "( " + QString( externPixmaps ? "\"" : "self." ) ); + pix.append( QString( externPixmaps ? "\"" : "" ) + ")" ); + } + } + } else if ( attrib == "clickable" ) + clickable = v.toBool(); + else if ( attrib == "resizable" || attrib == "resizeable" ) + resizable = v.toBool(); + } + n = n.nextSibling().toElement(); + } + + if ( value ) + *value = trcall( txt, com ); + + QString s; + s = indent + parent + ".addColumn(" + trcall( txt, com ) + ")\n"; + if ( !pix.isEmpty() ) + s += indent + parent + ".header().setLabel(" + parent + ".header().count() - 1,QIconSet(" + pix + ")," + trcall( txt, com ) + ")\n"; + if ( !clickable ) + s += indent + parent + ".header().setClickEnabled(0," + parent + ".header().count() - 1)\n"; + if ( !resizable ) + s += indent + parent + ".header().setResizeEnabled(0," + parent + ".header().count() - 1)\n"; + return s; +} + +QString Uic::createTableRowColumnImpl( const QDomElement &e, const QString &parent, + QString *value ) +{ + QString objClass = getClassName( e.parentNode().toElement() ); + QDomElement n = e.firstChild().toElement(); + QString txt; + QString com; + QString pix; + QString field; + bool isRow = e.tagName() == "row"; + while ( !n.isNull() ) { + if ( n.tagName() == "property" ) { + QString attrib = n.attribute("name"); + QVariant v = DomTool::elementToVariant( n.firstChild().toElement(), QVariant() ); + if ( attrib == "text" ) { + txt = v.toString(); + com = getComment( n ); + } else if ( attrib == "pixmap" ) { + pix = v.toString(); + if ( !pix.isEmpty() ) { + if ( pixmapLoaderFunction.isEmpty() ) { + pix.prepend( "self." ); + } else { + pix.prepend( pixmapLoaderFunction + "( " + QString( externPixmaps ? "\"" : "self." ) ); + pix.append( QString( externPixmaps ? "\"" : "" ) + ")" ); + } + } + } else if ( attrib == "field" ) + field = v.toString(); + } + n = n.nextSibling().toElement(); + } + + if ( value ) + *value = trcall( txt, com ); + + // ### This generated code sucks! We have to set the number of + // rows/cols before and then only do setLabel/() + // ### careful, though, since QDataTable has an API which makes this code pretty good + + QString s; + if ( isRow ) { + s = indent + parent + ".setNumRows(" + parent + ".numRows() + 1)\n"; + if ( pix.isEmpty() ) + s += indent + parent + ".verticalHeader().setLabel(" + parent + ".numRows() - 1," + + trcall( txt, com ) + ")\n"; + else + s += indent + parent + ".verticalHeader().setLabel(" + parent + ".numRows() - 1,QIconSet(" + + pix + ")," + trcall( txt, com ) + ")\n"; + } else { + if ( objClass == "QTable" ) { + s = indent + parent + ".setNumCols(" + parent + ".numCols() + 1)\n"; + if ( pix.isEmpty() ) + s += indent + parent + ".horizontalHeader().setLabel(" + parent + ".numCols() - 1," + + trcall( txt, com ) + ")\n"; + else + s += indent + parent + ".horizontalHeader().setLabel(" + parent + ".numCols() - 1,QIconSet(" + + pix + ")," + trcall( txt, com ) + ")\n"; + } else if ( objClass == "QDataTable" ) { + if ( !txt.isEmpty() && !field.isEmpty() ) { + if ( pix.isEmpty() ) + out << indent << parent << ".addColumn(" << fixString( field ) << "," << trcall( txt, com ) << ")" << endl; + else + out << indent << parent << ".addColumn(" << fixString( field ) << "," << trcall( txt, com ) << ",QIconSet(" << pix << "))" << endl; + } + } + } + return s; +} + +/*! + Creates the implementation of a layout tag. Called from createObjectImpl(). + */ +QString Uic::createLayoutImpl( const QDomElement &e, const QString& parentClass, const QString& parent, const QString& layout ) +{ + QDomElement n; + QString objClass, objName; + objClass = e.tagName(); + + QString qlayout = "QVBoxLayout"; + if ( objClass == "hbox" ) + qlayout = "QHBoxLayout"; + else if ( objClass == "grid" ) + qlayout = "QGridLayout"; + + bool isGrid = e.tagName() == "grid" ; + objName = registerObject( getLayoutName( e ) ); + layoutObjects += objName; + + QString margin = DomTool::readProperty( e, "margin", defMargin ).toString(); + QString spacing = DomTool::readProperty( e, "spacing", defSpacing ).toString(); + QString resizeMode = DomTool::readProperty( e, "resizeMode", QString::null ).toString(); + + QString optcells; + if ( isGrid ) + optcells = "1,1,"; + if ( (parentClass == "QGroupBox" || parentClass == "QButtonGroup") && layout.isEmpty() ) { + // special case for group box + out << indent << parent << ".setColumnLayout(0,Qt.Vertical)" << endl; + out << indent << parent << ".layout().setSpacing(" << spacing << ")" << endl; + out << indent << parent << ".layout().setMargin(" << margin << ")" << endl; + out << indent << objName << " = " << qlayout << "(" << parent << ".layout())" << endl; + out << indent << objName << ".setAlignment(Qt.AlignTop)" << endl; + } else { + out << indent << objName << " = " << qlayout << "("; + if ( layout.isEmpty() ) + out << parent; + else { + out << "None"; + if ( !DomTool::hasProperty( e, "margin" ) ) + margin = "0"; + } + out << "," << optcells << margin << "," << spacing << ",\"" << objName << "\")" << endl; + } + if ( !resizeMode.isEmpty() ) + out << indent << objName << ".setResizeMode(QLayout." << resizeMode << ")" << endl; + + if ( !isGrid ) { + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + if ( n.tagName() == "spacer" ) { + QString child = createSpacerImpl( n, parentClass, parent, objName ); + out << indent << objName << ".addItem(" << child << ")" << endl; + } else if ( tags.contains( n.tagName() ) ) { + QString child = createObjectImpl( n, parentClass, parent, objName ); + if ( isLayout( child ) ) + out << indent << objName << ".addLayout(" << child << ")" << endl; + else + out << indent << objName << ".addWidget(" << child << ")" << endl; + } + } + } else { + for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { + QDomElement ae = n; + int row = ae.attribute( "row" ).toInt(); + int col = ae.attribute( "column" ).toInt(); + int rowspan = ae.attribute( "rowspan" ).toInt(); + int colspan = ae.attribute( "colspan" ).toInt(); + if ( rowspan < 1 ) + rowspan = 1; + if ( colspan < 1 ) + colspan = 1; + if ( n.tagName() == "spacer" ) { + QString child = createSpacerImpl( n, parentClass, parent, objName ); + if ( rowspan * colspan != 1 ) + out << indent << objName << ".addMultiCell(" << child << "," + << row << "," << ( row + rowspan - 1 ) << "," << col << "," << ( col + colspan - 1 ) << ")" << endl; + else + out << indent << objName << ".addItem(" << child << "," + << row << "," << col << ")" << endl; + } else if ( tags.contains( n.tagName() ) ) { + QString child = createObjectImpl( n, parentClass, parent, objName ); + out << endl; + QString o = "Widget"; + if ( isLayout( child ) ) + o = "Layout"; + if ( rowspan * colspan != 1 ) + out << indent << objName << ".addMultiCell" << o << "(" << child << "," + << row << "," << ( row + rowspan - 1 ) << "," << col << "," << ( col + colspan - 1 ) << ")" << endl; + else + out << indent << objName << ".add" << o << "(" << child << "," + << row << "," << col << ")" << endl; + } + } + } + + return objName; +} + + + +QString Uic::createSpacerImpl( const QDomElement &e, const QString& /*parentClass*/, const QString& /*parent*/, const QString& /*layout*/) +{ + QDomElement n; + QString objClass, objName; + objClass = e.tagName(); + objName = registerObject( getObjectName( e ) ); + + QSize size = DomTool::readProperty( e, "sizeHint", QSize( 0, 0 ) ).toSize(); + QString sizeType = DomTool::readProperty( e, "sizeType", "Expanding" ).toString(); + bool isVspacer = DomTool::readProperty( e, "orientation", "Horizontal" ) == "Vertical"; + + if ( sizeType != "Expanding" && sizeType != "MinimumExpanding" && + DomTool::hasProperty( e, "geometry" ) ) { // compatibility Qt 2.2 + QRect geom = DomTool::readProperty( e, "geometry", QRect(0,0,0,0) ).toRect(); + size = geom.size(); + } + + if ( isVspacer ) + out << indent << objName << " = QSpacerItem(" + << size.width() << "," << size.height() + << ",QSizePolicy.Minimum,QSizePolicy." << sizeType << ")" << endl; + else + out << indent << objName << " = QSpacerItem(" + << size.width() << "," << size.height() + << ",QSizePolicy." << sizeType << ",QSizePolicy.Minimum)" << endl; + + return objName; +} + +static const char* const ColorRole[] = { + "Foreground", "Button", "Light", "Midlight", "Dark", "Mid", + "Text", "BrightText", "ButtonText", "Base", "Background", "Shadow", + "Highlight", "HighlightedText", "Link", "LinkVisited", 0 +}; + + +/*! + Creates a colorgroup with name \a name from the color group \a cg + */ +void Uic::createColorGroupImpl( const QString& name, const QDomElement& e ) +{ + QColorGroup cg; + int r = -1; + QDomElement n = e.firstChild().toElement(); + QString color; + while ( !n.isNull() ) { + if ( n.tagName() == "color" ) { + r++; + QColor col = DomTool::readColor( n ); + color = "QColor(%1,%2,%3)"; + color = color.arg( col.red() ).arg( col.green() ).arg( col.blue() ); + if ( col == white ) + color = "Qt.white"; + else if ( col == black ) + color = "Qt.black"; + if ( n.nextSibling().toElement().tagName() != "pixmap" ) { + out << indent << name << ".setColor(QColorGroup." << ColorRole[r] << "," << color << ")" << endl; + } + } else if ( n.tagName() == "pixmap" ) { + QString pixmap = n.firstChild().toText().data(); + if ( pixmapLoaderFunction.isEmpty() ) { + pixmap.prepend( "self." ); + } else { + pixmap.prepend( pixmapLoaderFunction + "(" + QString( externPixmaps ? "\"" : "self." ) ); + pixmap.append( QString( externPixmaps ? "\"" : "" ) + ")" ); + } + out << indent << name << ".setBrush(QColorGroup." + << ColorRole[r] << ",QBrush(" << color << "," << pixmap << "))" << endl; + } + n = n.nextSibling().toElement(); + } +} + +/*! + Auxiliary function to load a color group. The colorgroup must not + contain pixmaps. + */ +QColorGroup Uic::loadColorGroup( const QDomElement &e ) +{ + QColorGroup cg; + int r = -1; + QDomElement n = e.firstChild().toElement(); + QColor col; + while ( !n.isNull() ) { + if ( n.tagName() == "color" ) { + r++; + cg.setColor( (QColorGroup::ColorRole)r, (col = DomTool::readColor( n ) ) ); + } + n = n.nextSibling().toElement(); + } + return cg; +} + +/*! Returns TRUE if the widget properties specify that it belongs to + the database \a connection and \a table. +*/ + +bool Uic::isWidgetInTable( const QDomElement& e, const QString& connection, const QString& table ) +{ + QString conn = getDatabaseInfo( e, "connection" ); + QString tab = getDatabaseInfo( e, "table" ); + if ( conn == connection && tab == table ) + return TRUE; + return FALSE; +} + +/*! + Registers all database connections, cursors and forms. +*/ + +void Uic::registerDatabases( const QDomElement& e ) +{ + QDomElement n; + QDomNodeList nl; + int i; + nl = e.parentNode().toElement().elementsByTagName( "widget" ); + for ( i = 0; i < (int) nl.length(); ++i ) { + n = nl.item(i).toElement(); + QString conn = getDatabaseInfo( n, "connection" ); + QString tab = getDatabaseInfo( n, "table" ); + QString fld = getDatabaseInfo( n, "field" ); + if ( !conn.isNull() ) { + dbConnections += conn; + if ( !tab.isNull() ) { + dbCursors[conn] += tab; + if ( !fld.isNull() ) + dbForms[conn] += tab; + } + } + } +} + +/*! + Registers an object with name \a name. + + The returned name is a valid variable identifier, as similar to \a + name as possible and guaranteed to be unique within the form. + + \sa registeredName(), isObjectRegistered() + */ +QString Uic::registerObject( const QString& name ) +{ + if ( objectNames.isEmpty() ) { + // some temporary variables we need + objectNames += "img"; + objectNames += "item"; + objectNames += "cg"; + objectNames += "pal"; + } + + QString result = name; + int i; + while ( ( i = result.find(' ' )) != -1 ) { + result[i] = '_'; + } + + if ( objectNames.contains( result ) ) { + int i = 2; + while ( objectNames.contains( result + "_" + QString::number(i) ) ) + i++; + result += "_"; + result += QString::number(i); + } + objectNames += result; + objectMapper.insert( name, result ); + return result; +} + +/*! + Returns the registered name for the original name \a name + or \a name if \a name wasn't registered. + + \sa registerObject(), isObjectRegistered() + */ +QString Uic::registeredName( const QString& name ) +{ + if ( !objectMapper.contains( name ) ) + return name; + return objectMapper[name]; +} + +/*! + Returns whether the object \a name was registered yet or not. + */ +bool Uic::isObjectRegistered( const QString& name ) +{ + return objectMapper.contains( name ); +} + + +/*! + Unifies the entries in stringlist \a list. Should really be a QStringList feature. + */ +QStringList Uic::unique( const QStringList& list ) +{ + if ( list.isEmpty() ) + return list; + + QStringList result; + for ( QStringList::ConstIterator it = list.begin(); it != list.end(); ++it ) { + if ( !result.contains(*it) ) + result += *it; + } + return result; +} + + + +/*! + Creates an instance of class \a objClass, with parent \a parent and name \a objName + */ +QString Uic::createObjectInstance( const QString& objClass, const QString& parent, const QString& objName ) +{ + + if ( objClass.mid( 1 ) == "ComboBox" ) { + return objClass + "(0," + parent + ",\"" + objName + "\")"; + } + return objClass + "(" + parent + ",\"" + objName + "\")"; +} + +bool Uic::isLayout( const QString& name ) const +{ + return layoutObjects.contains( name ); +} diff --git a/pyuic3/uic.h b/pyuic3/uic.h new file mode 100644 index 0000000..f00d4a4 --- /dev/null +++ b/pyuic3/uic.h @@ -0,0 +1,183 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (c) 2001 Phil Thompson +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#ifndef UIC_H +#define UIC_H +#include +#include +#include +#include +#include +#include +#include + + +#define PYQT_VERSION "3.18.1" + + +class PyIndent +{ +public: + PyIndent() : tabStop(4), current(0) {calc();} + + void setTabStop(uint n) {tabStop = n; calc();} + uint setIndent(uint i) {uint old = current; current = i; calc(); return old;} + void operator++() {++current; calc();} + void operator--() {--current; calc();} + operator QString() {return indstr;} + +private: + uint tabStop; + uint current; + QString indstr; + + void calc(); +}; + + +class Uic : public Qt +{ +public: + Uic( const QString &fn, const char *outputFn, QTextStream& out, + QDomDocument doc, bool subcl, const QString &trm, + const QString& subclname, QString &uicClass ); + + static void setIndent(const PyIndent &pyind) {indent = pyind; trindent = pyind;} + + void createFormImpl( const QDomElement &e ); + + void createSubImpl( const QDomElement &e, const QString& subclname ); + + void createActionImpl( const QDomElement& e, const QString &parent ); + void createToolbarImpl( const QDomElement &e, const QString &parentClass, const QString &parent ); + void createMenuBarImpl( const QDomElement &e, const QString &parentClass, const QString &parent ); + void createPopupMenuImpl( const QDomElement &e, const QString &parentClass, const QString &parent ); + QString createObjectImpl( const QDomElement &e, const QString& parentClass, const QString& parent, const QString& layout = QString::null ); + QString createLayoutImpl( const QDomElement &e, const QString& parentClass, const QString& parent, const QString& layout = QString::null ); + QString createObjectInstance( const QString& objClass, const QString& parent, const QString& objName ); + QString createSpacerImpl( const QDomElement &e, const QString& parentClass, const QString& parent, const QString& layout = QString::null ); + void createExclusiveProperty( const QDomElement & e, const QString& exclusiveProp ); + QString createListBoxItemImpl( const QDomElement &e, const QString &parent, QString *value = 0 ); + QString createIconViewItemImpl( const QDomElement &e, const QString &parent ); + QString createListViewColumnImpl( const QDomElement &e, const QString &parent, QString *value = 0 ); + QString createTableRowColumnImpl( const QDomElement &e, const QString &parent, QString *value = 0 ); + QString createListViewItemImpl( const QDomElement &e, const QString &parent, + const QString &parentItem ); + void createColorGroupImpl( const QString& cg, const QDomElement& e ); + QColorGroup loadColorGroup( const QDomElement &e ); + + QDomElement getObjectProperty( const QDomElement& e, const QString& name ); + QString getPixmapLoaderFunction( const QDomElement& e ); + QString getFormClassName( const QDomElement& e ); + QString getClassName( const QDomElement& e ); + QString getObjectName( const QDomElement& e ); + QString getLayoutName( const QDomElement& e ); + QString getInclude( const QString& className ); + + QString setObjectProperty( const QString& objClass, const QString& obj, const QString &prop, const QDomElement &e, bool stdset ); + + QString registerObject( const QString& name ); + QString registeredName( const QString& name ); + bool isObjectRegistered( const QString& name ); + QStringList unique( const QStringList& ); + + QString trcall( const QString& sourceText, const QString& comment = "" ); + + static void embed( QTextStream& out, const char* project, const QStringList& images ); + +private: + QTextStream& out; + QTextOStream trout; + QString languageChangeBody; + QCString outputFileName; + QStringList objectNames; + QMap objectMapper; + QStringList tags; + QStringList layouts; + QString formName; + QString lastItem; + QString trmacro; + static PyIndent indent, trindent; + + struct Buddy + { + Buddy( const QString& k, const QString& b ) + : key( k ), buddy( b ) {} + Buddy(){} // for valuelist + QString key; + QString buddy; + bool operator==( const Buddy& other ) const + { return (key == other.key); } + }; + struct CustomInclude + { + QString header; + QString location; + }; + QValueList buddies; + + QStringList layoutObjects; + bool isLayout( const QString& name ) const; + + uint item_used : 1; + uint cg_used : 1; + uint pal_used : 1; + uint stdsetdef : 1; + uint externPixmaps : 1; + +#if QT_VERSION >= 0x030300 + QString uiFileVersion; +#endif + QString nameOfClass; + QStringList namespaces; + QString bareNameOfClass; + QString pixmapLoaderFunction; + + void registerDatabases( const QDomElement& e ); + bool isWidgetInTable( const QDomElement& e, const QString& connection, const QString& table ); + bool isFrameworkCodeGenerated( const QDomElement& e ); + QString getDatabaseInfo( const QDomElement& e, const QString& tag ); + void createFormImpl( const QDomElement& e, const QString& form, const QString& connection, const QString& table ); + void writeFunctionsSubImpl( const QStringList &fuLst, const QStringList &typLst, const QStringList &specLst, + const QString &subClass, const QString &descr ); + QStringList dbConnections; + QMap< QString, QStringList > dbCursors; + QMap< QString, QStringList > dbForms; + + static bool isMainWindow; + static QString mkBool( bool b ); + static QString mkBool( const QString& s ); + bool toBool( const QString& s ); + static QString fixString( const QString &str, bool encode = FALSE ); + static bool onlyAscii; + static QString mkStdSet( const QString& prop ); + static QString getComment( const QDomNode& n ); + QVariant defSpacing, defMargin; + QString fileName; + bool writeFunctImpl; + + void pySlot(QStringList::ConstIterator &it); + + QString pyCode; + bool pyNeedTr, pyNeedTrUtf8; +}; + +#endif diff --git a/pyuic3/widgetdatabase.cpp b/pyuic3/widgetdatabase.cpp new file mode 100644 index 0000000..6c447d5 --- /dev/null +++ b/pyuic3/widgetdatabase.cpp @@ -0,0 +1,953 @@ +/********************************************************************** +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition +** licenses may use this file in accordance with the Qt Commercial License +** Agreement provided with the Software. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for +** information about Qt Commercial License Agreements. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include "widgetdatabase.h" +#include "widgetinterface.h" + +#include +#define NO_STATIC_COLORS +#include +#include +#include +#include +#include +#include +#include + +#include + +const int dbsize = 300; +const int dbcustom = 200; +const int dbdictsize = 211; +static WidgetDatabaseRecord* db[ dbsize ]; +static QDict *className2Id = 0; +static int dbcount = 0; +static int dbcustomcount = 200; +static QStrList *wGroups; +static QStrList *invisibleGroups; +static bool whatsThisLoaded = FALSE; +static QPluginManager *widgetPluginManager = 0; +static bool plugins_set_up = FALSE; +static bool was_in_setup = FALSE; + +QCleanupHandler > cleanup_manager; + +WidgetDatabaseRecord::WidgetDatabaseRecord() +{ + isForm = FALSE; + isContainer = FALSE; + icon = 0; + nameCounter = 0; + isCommon = FALSE; + isPlugin = FALSE; +} + +WidgetDatabaseRecord::~WidgetDatabaseRecord() +{ + delete icon; +} + + +/*! + \class WidgetDatabase widgetdatabase.h + \brief The WidgetDatabase class holds information about widgets + + The WidgetDatabase holds information about widgets like toolTip(), + iconSet(), ... It works Id-based, so all access functions take the + widget id as parameter. To get the id for a widget (classname), use + idFromClassName(). + + All access functions are static. Having multiple widgetdatabases in + one application doesn't make sense anyway and so you don't need more + than an instance of the widgetdatabase. + + For creating widgets, layouts, etc. see WidgetFactory. +*/ + +/*! + Creates widget database. Does nothing. +*/ + +WidgetDatabase::WidgetDatabase() +{ +} + +/*! Sets up the widget database. If the static widgetdatabase already + exists, the functions returns immediately. +*/ + +void WidgetDatabase::setupDataBase( int id ) +{ + was_in_setup = TRUE; +#ifndef UIC + Q_UNUSED( id ) + if ( dbcount ) + return; +#else + if ( dbcount && id != -2 ) + return; + if ( dbcount && !plugins_set_up ) { + setupPlugins(); + return; + } + if ( dbcount && plugins_set_up) + return; +#endif + + wGroups = new QStrList; + invisibleGroups = new QStrList; + invisibleGroups->append( "Forms" ); + invisibleGroups->append( "Temp" ); + className2Id = new QDict( dbdictsize ); + className2Id->setAutoDelete( TRUE ); + + WidgetDatabaseRecord *r = 0; + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_pushbutton.png"; + r->name = "QPushButton"; + r->group = widgetGroup( "Buttons" ); + r->toolTip = "Push Button"; + r->isCommon = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_toolbutton.png"; + r->name = "QToolButton"; + r->group = widgetGroup( "Buttons" ); + r->toolTip = "Tool Button"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_radiobutton.png"; + r->name = "QRadioButton"; + r->group = widgetGroup( "Buttons" ); + r->toolTip = "Radio Button"; + r->isCommon = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_checkbox.png"; + r->name = "QCheckBox"; + r->group = widgetGroup( "Buttons" ); + r->toolTip = "Check Box"; + r->isCommon = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_groupbox.png"; + r->name = "QGroupBox"; + r->group = widgetGroup( "Containers" ); + r->toolTip = "Group Box"; + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_buttongroup.png"; + r->name = "QButtonGroup"; + r->group = widgetGroup( "Containers" ); + r->toolTip = "Button Group"; + r->isContainer = TRUE; + r->isCommon = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_frame.png"; + r->name = "QFrame"; + r->group = widgetGroup( "Containers" ); + r->toolTip = "Frame"; + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_tabwidget.png"; + r->name = "QTabWidget"; + r->group = widgetGroup( "Containers" ); + r->toolTip = "Tabwidget"; + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_widgetstack.png"; + r->name = "QWidgetStack"; + r->group = widgetGroup( "Containers" ); + r->toolTip = "Widget Stack"; + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_toolbox.png"; + r->name = "QToolBox"; + r->group = widgetGroup( "Containers" ); + r->toolTip = "Tool Box"; + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_listbox.png"; + r->name = "QListBox"; + r->group = widgetGroup( "Views" ); + r->toolTip = "List Box"; + r->isCommon = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_listview.png"; + r->name = "QListView"; + r->group = widgetGroup( "Views" ); + r->toolTip = "List View"; + + append( r ); + +#if !defined(QT_NO_ICONVIEW) || defined(UIC) + r = new WidgetDatabaseRecord; + r->iconSet = "designer_iconview.png"; + r->name = "QIconView"; + r->group = widgetGroup( "Views" ); + r->toolTip = "Icon View"; + + append( r ); +#endif + +#if !defined(QT_NO_TABLE) + r = new WidgetDatabaseRecord; + r->iconSet = "designer_table.png"; + r->name = "QTable"; + r->group = widgetGroup( "Views" ); + r->toolTip = "Table"; + + append( r ); +#endif + +#if !defined(QT_NO_SQL) + r = new WidgetDatabaseRecord; + r->iconSet = "designer_datatable.png"; + r->includeFile = "qdatatable.h"; + r->name = "QDataTable"; + r->group = widgetGroup( "Database" ); + r->toolTip = "Data Table"; + + append( r ); +#endif + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_lineedit.png"; + r->name = "QLineEdit"; + r->group = widgetGroup( "Input" ); + r->toolTip = "Line Edit"; + r->isCommon = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_spinbox.png"; + r->name = "QSpinBox"; + r->group = widgetGroup( "Input" ); + r->toolTip = "Spin Box"; + r->isCommon = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_dateedit.png"; + r->name = "QDateEdit"; + r->group = widgetGroup( "Input" ); + r->toolTip = "Date Edit"; + r->includeFile = "qdatetimeedit.h"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_timeedit.png"; + r->name = "QTimeEdit"; + r->group = widgetGroup( "Input" ); + r->toolTip = "Time Edit"; + r->includeFile = "qdatetimeedit.h"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_datetimeedit.png"; + r->name = "QDateTimeEdit"; + r->group = widgetGroup( "Input" ); + r->toolTip = "Date-Time Edit"; + r->includeFile = "qdatetimeedit.h"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_multilineedit.png"; + r->name = "QMultiLineEdit"; + r->group = widgetGroup( "Temp" ); + r->toolTip = "Multi Line Edit"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_richtextedit.png"; + r->name = "QTextEdit"; + r->group = widgetGroup( "Input" ); + r->toolTip = "Rich Text Edit"; + r->isCommon = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_combobox.png"; + r->name = "QComboBox"; + r->group = widgetGroup( "Input" ); + r->toolTip = "Combo Box"; + r->isCommon = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_slider.png"; + r->name = "QSlider"; + r->group = widgetGroup( "Input" ); + r->toolTip = "Slider"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_scrollbar.png"; + r->name = "QScrollBar"; + r->group = widgetGroup( "Input" ); + r->toolTip = "Scrollbar"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_dial.png"; + r->name = "QDial"; + r->group = widgetGroup( "Input" ); + r->toolTip = "Dial"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_label.png"; + r->name = "QLabel"; + r->group = widgetGroup( "Temp" ); + r->toolTip = "Label"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_label.png"; + r->name = "TextLabel"; + r->group = widgetGroup( "Display" ); + r->toolTip = "Text Label"; + r->whatsThis = "The Text Label provides a widget to display static text."; + r->isCommon = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_pixlabel.png"; + r->name = "PixmapLabel"; + r->group = widgetGroup( "Display" ); + r->toolTip = "Pixmap Label"; + r->whatsThis = "The Pixmap Label provides a widget to display pixmaps."; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_lcdnumber.png"; + r->name = "QLCDNumber"; + r->group = widgetGroup( "Display" ); + r->toolTip = "LCD Number"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_line.png"; + r->name = "Line"; + r->group = widgetGroup( "Display" ); + r->toolTip = "Line"; + r->includeFile = "qframe.h"; + r->whatsThis = "The Line widget provides horizontal and vertical lines."; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_progress.png"; + r->name = "QProgressBar"; + r->group = widgetGroup( "Display" ); + r->toolTip = "Progress Bar"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_textview.png"; + r->name = "QTextView"; + r->group = widgetGroup( "Temp" ); + r->toolTip = "Text View"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_textbrowser.png"; + r->name = "QTextBrowser"; + r->group = widgetGroup( "Display" ); + r->toolTip = "Text Browser"; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_spacer.png"; + r->name = "Spacer"; + r->group = widgetGroup( "Temp" ); + r->toolTip = "Spacer"; + r->whatsThis = "The Spacer provides horizontal and vertical spacing to be able to manipulate the behaviour of layouts."; + + append( r ); + + r = new WidgetDatabaseRecord; + r->name = "QWidget"; + r->isForm = TRUE; + r->group = widgetGroup( "Forms" ); + + append( r ); + + r = new WidgetDatabaseRecord; + r->name = "QDialog"; + r->group = widgetGroup( "Forms" ); + r->isForm = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->name = "QWizard"; + r->group = widgetGroup( "Forms" ); + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->name = "QDesignerWizard"; + r->group = widgetGroup( "Forms" ); + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->name = "QLayoutWidget"; + r->group = widgetGroup( "Temp" ); + r->includeFile = ""; + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->name = "QSplitter"; + r->group = widgetGroup( "Temp" ); + r->includeFile = "qsplitter.h"; + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_tabwidget.png"; + r->name = "QDesignerTabWidget"; + r->group = widgetGroup( "Temp" ); + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_tabwidget.png"; + r->name = "QDesignerWidget"; + r->group = widgetGroup( "Temp" ); + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = "designer_tabwidget.png"; + r->name = "QDesignerDialog"; + r->group = widgetGroup( "Temp" ); + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = ""; + r->name = "QMainWindow"; + r->includeFile = "qmainwindow.h"; + r->group = widgetGroup( "Temp" ); + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = ""; + r->name = "QDesignerAction"; + r->includeFile = "qaction.h"; + r->group = widgetGroup( "Temp" ); + r->isContainer = FALSE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = ""; + r->name = "QDesignerActionGroup"; + r->includeFile = "qaction.h"; + r->group = widgetGroup( "Temp" ); + r->isContainer = FALSE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = ""; + r->name = "QScrollView"; + r->includeFile = "qscrollview.h"; + r->group = widgetGroup( "Temp" ); + r->isContainer = TRUE; + + append( r ); + +#ifndef QT_NO_SQL + r = new WidgetDatabaseRecord; + r->iconSet = ""; + r->name = "QDataBrowser"; + r->includeFile = "qdatabrowser.h"; + r->group = widgetGroup( "Database" ); + r->toolTip = "Data Browser"; + r->iconSet = "designer_databrowser.png"; + r->isContainer = TRUE; + + append( r ); + + r = new WidgetDatabaseRecord; + r->iconSet = ""; + r->name = "QDataView"; + r->includeFile = "qdataview.h"; + r->group = widgetGroup( "Database" ); + r->toolTip = "Data View"; + r->iconSet = "designer_dataview.png"; + r->isContainer = TRUE; + + append( r ); +#endif + +#ifndef UIC + setupPlugins(); +#endif +} + +void WidgetDatabase::setupPlugins() +{ + if ( plugins_set_up ) + return; + plugins_set_up = TRUE; + QStringList widgets = widgetManager()->featureList(); + for ( QStringList::Iterator it = widgets.begin(); it != widgets.end(); ++it ) { + if ( hasWidget( *it ) ) + continue; + WidgetDatabaseRecord *r = new WidgetDatabaseRecord; + WidgetInterface *iface = 0; + widgetManager()->queryInterface( *it, &iface ); + if ( !iface ) + continue; + +#ifndef UIC + QIconSet icon = iface->iconSet( *it ); + if ( !icon.pixmap().isNull() ) + r->icon = new QIconSet( icon ); +#endif + QString grp = iface->group( *it ); + if ( grp.isEmpty() ) + grp = "3rd party widgets"; + r->group = widgetGroup( grp ); + r->toolTip = iface->toolTip( *it ); + r->whatsThis = iface->whatsThis( *it ); + r->includeFile = iface->includeFile( *it ); + r->isContainer = iface->isContainer( *it ); + r->name = *it; + r->isPlugin = TRUE; + append( r ); + iface->release(); + } +} + +/*! + Returns the number of elements in the widget database. +*/ + +int WidgetDatabase::count() +{ + setupDataBase( -1 ); + return dbcount; +} + +/*! + Returns the id at which the ids of custom widgets start. +*/ + +int WidgetDatabase::startCustom() +{ + setupDataBase( -1 ); + return dbcustom; +} + +/*! + Returns the iconset which represents the class registered as \a id. +*/ + +QIconSet WidgetDatabase::iconSet( int id ) +{ + setupDataBase( id ); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return QIconSet(); +#if !defined(UIC) && !defined(RESOURCE) + if ( !r->icon ) { + if ( r->iconSet.isEmpty() ) + return QIconSet(); + QPixmap pix = QPixmap::fromMimeSource( r->iconSet ); + if ( pix.isNull() ) + pix = QPixmap( r->iconSet ); + r->icon = new QIconSet( pix ); + } + return *r->icon; +#else + return QIconSet(); +#endif +} + +/*! + Returns the classname of the widget which is registered as \a id. +*/ + +QString WidgetDatabase::className( int id ) +{ + setupDataBase( id ); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return QString::null; + return r->name; +} + +/*! + Returns the group the widget registered as \a id belongs to. +*/ + +QString WidgetDatabase::group( int id ) +{ + setupDataBase( id ); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return QString::null; + return r->group; +} + +/*! + Returns the tooltip text of the widget which is registered as \a id. +*/ + +QString WidgetDatabase::toolTip( int id ) +{ + setupDataBase( id ); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return QString::null; + return r->toolTip; +} + +/*! + Returns the what's this? text of the widget which is registered as \a id. +*/ + +QString WidgetDatabase::whatsThis( int id ) +{ + setupDataBase( id ); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return QString::null; + return r->whatsThis; +} + +/*! + Returns the include file if the widget which is registered as \a id. +*/ + +QString WidgetDatabase::includeFile( int id ) +{ + setupDataBase( id ); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return QString::null; + if ( r->includeFile.isNull() ) + return r->name.lower() + ".h"; + return r->includeFile; +} + +/*! Returns whether the widget registered as \a id is a form. +*/ +bool WidgetDatabase::isForm( int id ) +{ + setupDataBase( id ); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return FALSE; + return r->isForm; +} + +/*! Returns whether the widget registered as \a id can have children. +*/ + +bool WidgetDatabase::isContainer( int id ) +{ + setupDataBase( id ); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return FALSE; + return r->isContainer || r->isForm; +} + +bool WidgetDatabase::isCommon( int id ) +{ + setupDataBase( id ); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return FALSE; + return r->isCommon; +} + +QString WidgetDatabase::createWidgetName( int id ) +{ + setupDataBase( id ); + QString n = className( id ); + if ( n == "QLayoutWidget" ) + n = "Layout"; + if ( n[ 0 ] == 'Q' && n[ 1 ].lower() != n[ 1 ] ) + n = n.mid( 1 ); + int colonColon = n.findRev( "::" ); + if ( colonColon != -1 ) + n = n.mid( colonColon + 2 ); + + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return n; + n += QString::number( ++r->nameCounter ); + n[0] = n[0].lower(); + return n; +} + +/*! Returns the id for \a name or -1 if \a name is unknown. + */ +int WidgetDatabase::idFromClassName( const QString &name ) +{ + setupDataBase( -1 ); + if ( name.isEmpty() ) + return 0; + int *i = className2Id->find( name ); + if ( i ) + return *i; + if ( name == "FormWindow" ) + return idFromClassName( "QLayoutWidget" ); +#ifdef UIC + setupDataBase( -2 ); + i = className2Id->find( name ); + if ( i ) + return *i; +#endif + return -1; +} + +bool WidgetDatabase::hasWidget( const QString &name ) +{ + return className2Id->find( name ) != 0; +} + +WidgetDatabaseRecord *WidgetDatabase::at( int index ) +{ + if ( index < 0 ) + return 0; + if ( index >= dbcustom && index < dbcustomcount ) + return db[ index ]; + if ( index < dbcount ) + return db[ index ]; + return 0; +} + +void WidgetDatabase::insert( int index, WidgetDatabaseRecord *r ) +{ + if ( index < 0 || index >= dbsize ) + return; + db[ index ] = r; + className2Id->insert( r->name, new int( index ) ); + if ( index < dbcustom ) + dbcount = QMAX( dbcount, index ); +} + +void WidgetDatabase::append( WidgetDatabaseRecord *r ) +{ + if ( !was_in_setup ) + setupDataBase( -1 ); + insert( dbcount++, r ); +} + +QString WidgetDatabase::widgetGroup( const QString &g ) +{ + if ( wGroups->find( g ) == -1 ) + wGroups->append( g ); + return g; +} + +bool WidgetDatabase::isGroupEmpty( const QString &grp ) +{ + WidgetDatabaseRecord *r = 0; + for ( int i = 0; i < dbcount; ++i ) { + if ( !( r = db[ i ] ) ) + continue; + if ( r->group == grp ) + return FALSE; + } + return TRUE; +} + +QString WidgetDatabase::widgetGroup( int i ) +{ + setupDataBase( -1 ); + if ( i >= 0 && i < (int)wGroups->count() ) + return wGroups->at( i ); + return QString::null; +} + +int WidgetDatabase::numWidgetGroups() +{ + setupDataBase( -1 ); + return wGroups->count(); +} + +bool WidgetDatabase::isGroupVisible( const QString &g ) +{ + setupDataBase( -1 ); + return invisibleGroups->find( g ) == -1; +} + +int WidgetDatabase::addCustomWidget( WidgetDatabaseRecord *r ) +{ + insert( dbcustomcount++, r ); + return dbcustomcount - 1; +} + +void WidgetDatabase::customWidgetClassNameChanged( const QString &oldName, + const QString &newName ) +{ + int id = idFromClassName( oldName ); + if ( id == -1 ) + return; + WidgetDatabaseRecord *r = db[ id ]; + r->name = newName; + className2Id->remove( oldName ); + className2Id->insert( newName, new int( id ) ); +} + +bool WidgetDatabase::isCustomWidget( int id ) +{ + if ( id >= dbcustom && id < dbcustomcount ) + return TRUE; + return FALSE; +} + +bool WidgetDatabase::isCustomPluginWidget( int id ) +{ + setupDataBase( id ); + WidgetDatabaseRecord *r = at( id ); + if ( !r ) + return FALSE; + return r->isPlugin; +} + +bool WidgetDatabase::isWhatsThisLoaded() +{ + return whatsThisLoaded; +} + +void WidgetDatabase::loadWhatsThis( const QString &docPath ) +{ + QString whatsthisFile = docPath + "/whatsthis"; + QFile f( whatsthisFile ); + if ( !f.open( IO_ReadOnly ) ) + return; + QTextStream ts( &f ); + while ( !ts.atEnd() ) { + QString s = ts.readLine(); + QStringList l = QStringList::split( " | ", s ); + int id = idFromClassName( l[ 1 ] ); + WidgetDatabaseRecord *r = at( id ); + if ( r ) + r->whatsThis = l[ 0 ]; + } + whatsThisLoaded = TRUE; +} + + +// ### Qt 3.1: make these publically accessible via QWidgetDatabase API +#if defined(UIC) +bool dbnounload = FALSE; +QStringList *dbpaths = 0; +#else +extern QString *qwf_plugin_dir; +#endif + + +QPluginManager *widgetManager() +{ + if ( !widgetPluginManager ) { + QString pluginDir = "/designer"; +#if !defined(UIC) + if ( qwf_plugin_dir ) + pluginDir = *qwf_plugin_dir; +#endif + widgetPluginManager = new QPluginManager( IID_Widget, QApplication::libraryPaths(), pluginDir ); + cleanup_manager.add( &widgetPluginManager ); +#if defined(UIC) + if ( dbnounload ) + widgetPluginManager->setAutoUnload( FALSE ); + if ( dbpaths ) { + QStringList::ConstIterator it = dbpaths->begin(); + for ( ; it != dbpaths->end(); ++it ) + widgetPluginManager->addLibraryPath( *it ); + } +#endif + } + return widgetPluginManager; +} diff --git a/pyuic3/widgetdatabase.h b/pyuic3/widgetdatabase.h new file mode 100644 index 0000000..b44ef88 --- /dev/null +++ b/pyuic3/widgetdatabase.h @@ -0,0 +1,96 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition +** licenses may use this file in accordance with the Qt Commercial License +** Agreement provided with the Software. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for +** information about Qt Commercial License Agreements. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#ifndef WIDGETDATABASE_H +#define WIDGETDATABASE_H + +#include +#include +#include "widgetinterface.h" // up here for GCC 2.7.* compatibility +#include + + +extern QPluginManager *widgetManager(); + +struct WidgetDatabaseRecord +{ + WidgetDatabaseRecord(); + ~WidgetDatabaseRecord(); + QString iconSet, name, group, toolTip, whatsThis, includeFile; + uint isContainer : 1; + uint isForm : 1; + uint isCommon : 1; + uint isPlugin : 1; + QIconSet *icon; + int nameCounter; +}; + +class WidgetDatabase : public Qt +{ +public: + WidgetDatabase(); + static void setupDataBase( int id ); + static void setupPlugins(); + + static int count(); + static int startCustom(); + + static QIconSet iconSet( int id ); + static QString className( int id ); + static QString group( int id ); + static QString toolTip( int id ); + static QString whatsThis( int id ); + static QString includeFile( int id ); + static bool isForm( int id ); + static bool isContainer( int id ); + static bool isCommon( int id ); + + static int idFromClassName( const QString &name ); + static QString createWidgetName( int id ); + + static WidgetDatabaseRecord *at( int index ); + static void insert( int index, WidgetDatabaseRecord *r ); + static void append( WidgetDatabaseRecord *r ); + + static QString widgetGroup( const QString &g ); + static QString widgetGroup( int i ); + static int numWidgetGroups(); + static bool isGroupVisible( const QString &g ); + static bool isGroupEmpty( const QString &grp ); + + static int addCustomWidget( WidgetDatabaseRecord *r ); + static bool isCustomWidget( int id ); + static bool isCustomPluginWidget( int id ); + + static bool isWhatsThisLoaded(); + static void loadWhatsThis( const QString &docPath ); + + static bool hasWidget( const QString &name ); + static void customWidgetClassNameChanged( const QString &oldName, const QString &newName ); + +}; + +#endif diff --git a/pyuic3/widgetinterface.h b/pyuic3/widgetinterface.h new file mode 100644 index 0000000..bf6bcd5 --- /dev/null +++ b/pyuic3/widgetinterface.h @@ -0,0 +1,29 @@ + /********************************************************************** +** Copyright (C) 2000-2001 Trolltech AS. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#ifndef WIDGETINTERFACE_H +#define WIDGETINTERFACE_H + +#include + +#define WidgetInterface QWidgetFactoryInterface +#define IID_Widget IID_QWidgetFactory + +#endif diff --git a/sip/pyqt-gpl.sip b/sip/pyqt-gpl.sip new file mode 100644 index 0000000..bec8f9e --- /dev/null +++ b/sip/pyqt-gpl.sip @@ -0,0 +1 @@ +%License /Type="gpl"/ diff --git a/sip/qt/copying.sip b/sip/qt/copying.sip new file mode 100644 index 0000000..463904b --- /dev/null +++ b/sip/qt/copying.sip @@ -0,0 +1,51 @@ +// This is the SIP file defining the PyQt license. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Copying +Copyright (c) 2007 + Riverbank Computing Limited + +This file is part of PyQt. + +This copy of PyQt is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +PyQt is supplied 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 General Public License for more +details. + +You should have received a copy of the GNU General Public License along with +PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +%End + + +%OptionalInclude pyqt-internal.sip +%OptionalInclude pyqt-gpl.sip +%OptionalInclude pyqt-commercial.sip +%OptionalInclude pyqt-edu.sip +%OptionalInclude pyqt-eval.sip +%OptionalInclude pyqt-nc.sip +%OptionalInclude pyqt-tkc.sip diff --git a/sip/qt/qaccel.sip b/sip/qt/qaccel.sip new file mode 100644 index 0000000..9c547ef --- /dev/null +++ b/sip/qt/qaccel.sip @@ -0,0 +1,104 @@ +// This is the SIP interface definition for QAccel. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QAccel + +QAccel is fully implemented. + + +%End + + +class QAccel : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QAccel(QWidget * /TransferThis/,char * = 0); +%If (Qt_2_1_0 -) + QAccel(QWidget *,QObject * /TransferThis/,char * = 0); +%End + + bool isEnabled(); + void setEnabled(bool); + + uint count(); + +%If (- Qt_3_0_0) + int insertItem(int,int = -1); +%End +%If (Qt_3_0_0 -) + int insertItem(const QKeySequence &,int = -1); +%End + void removeItem(int); + void clear(); + +%If (- Qt_3_0_0) + int key(int); + int findKey(int) const; +%End +%If (Qt_3_0_0 -) + QKeySequence key(int); + int findKey(const QKeySequence &) const; +%End + + bool isItemEnabled(int) const; + void setItemEnabled(int,bool); + + bool connectItem(int,SIP_RXOBJ_CON,SIP_SLOT_CON(int)); + bool disconnectItem(int,SIP_RXOBJ_DIS,SIP_SLOT_DIS(int)); + + void repairEventFilter(); + +%If (Qt_2_00 -) + void setWhatsThis(int,const QString &); + QString whatsThis(int) const; + void setIgnoreWhatsThis(bool); + bool ignoreWhatsThis() const; +%End + +%If (Qt_2_00 - Qt_3_0_0) + static int shortcutKey(const QString &); + static QString keyToString(int); + static int stringToKey(const QString &); +%End +%If (Qt_3_0_0 -) + static QKeySequence shortcutKey(const QString &); + static QString keyToString(QKeySequence); + static QKeySequence stringToKey(const QString &); +%End + +signals: + void activated(int); +%If (Qt_3_1_0 -) + void activatedAmbiguously(int); +%End + +protected: + bool eventFilter(QObject *,QEvent *); + +private: + QAccel(const QAccel &); +}; diff --git a/sip/qt/qaction.sip b/sip/qt/qaction.sip new file mode 100644 index 0000000..e1f5c70 --- /dev/null +++ b/sip/qt/qaction.sip @@ -0,0 +1,210 @@ +// This is the SIP interface definition for QAction and QActionGroup. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QAction (Qt v2.2+) + +QAction is fully implemented. + + + +QActionGroup (Qt v2.2+) + +QActionGroup is fully implemented. + + +%End + + +%If (Qt_ACTION) +%If (Qt_2_2_0 -) + +class QAction : QObject +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_0) + QAction(QObject * /TransferThis/ = 0,const char * = 0,bool = 0); + QAction(const QString &,const QIconSet &,const QString &,int, + QObject * /TransferThis/,const char * = 0,bool = 0); + QAction(const QString &,const QString &,int,QObject * /TransferThis/, + const char * = 0,bool = 0); +%End +%If (Qt_3_0_0 - Qt_3_2_0) + QAction(QObject * /TransferThis/,const char * = 0,bool = 0); +%End +%If (Qt_3_2_0 -) + QAction(QObject * /TransferThis/,const char * = 0); + QAction(const QString &,QKeySequence,QObject * /TransferThis/, + const char * = 0); + QAction(const QIconSet &,const QString &,QKeySequence, + QObject * /TransferThis/,const char * = 0); +%End +%If (Qt_3_0_0 -) + // Obsolete. + QAction(const QString &,const QIconSet &,const QString &,QKeySequence, + QObject * /TransferThis/,const char * = 0,bool = 0); + // Obsolete. + QAction(const QString &,const QString &,QKeySequence, + QObject * /TransferThis/,const char * = 0,bool = 0); +%End +%If (Qt_3_2_0 -) + // Obsolete. + QAction(QObject * /TransferThis/,const char *,bool); +%End + + virtual void setIconSet(const QIconSet &); + QIconSet iconSet() const; + virtual void setText(const QString &); + QString text() const; + virtual void setMenuText(const QString &); + QString menuText() const; + virtual void setToolTip(const QString &); + QString toolTip() const; + virtual void setStatusTip(const QString &); + QString statusTip() const; + virtual void setWhatsThis(const QString &); + QString whatsThis() const; +%If (- Qt_3_0_0) + virtual void setAccel(int); + int accel() const; +%End +%If (Qt_3_0_0 -) + virtual void setAccel(const QKeySequence &); + QKeySequence accel() const; +%End + virtual void setToggleAction(bool); + bool isToggleAction() const; +%If (- Qt_3_0_0) + virtual void setOn(bool); +%End + bool isOn() const; + bool isEnabled() const; +%If (Qt_3_1_0 -) + bool isVisible() const; +%End + virtual bool addTo(QWidget *); + virtual bool removeFrom(QWidget *); + +protected: +%If (Qt_3_0_0 -) + virtual void addedTo(QWidget *,QWidget *); + virtual void addedTo(int,QPopupMenu *); +%End + +public slots: +%If (Qt_3_3_0 -) + void activate(); +%End +%If (Qt_3_0_0 -) + void toggle(); + virtual void setOn(bool); +%End + virtual void setEnabled(bool); +%If (Qt_3_3_0 -) + void setDisabled(bool); +%End +%If (Qt_3_1_0 -) + void setVisible(bool); +%End + +signals: + void activated(); + void toggled(bool); + +private: +%If (Qt_3_1_0 -) + QAction(const QAction &); +%End +}; + + +class QActionGroup : QAction +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_0) + QActionGroup(QWidget * /TransferThis/,const char * = 0,bool = 1); +%End +%If (Qt_3_0_0 - Qt_3_2_0) + QActionGroup(QObject * /TransferThis/,const char * = 0,bool = 1); +%End +%If (Qt_3_2_0 -) + QActionGroup(QObject * /TransferThis/,const char * = 0); + // Obsolete. + QActionGroup(QObject * /TransferThis/,const char *,bool); +%End + + void setExclusive(bool); + bool isExclusive() const; +%If (- Qt_3_0_0) + void insert(QAction *); +%End +%If (Qt_3_0_0 -) + void add(QAction *); + void addSeparator(); +%End + bool addTo(QWidget *); + bool removeFrom(QWidget *); + void setEnabled(bool); +%If (Qt_3_2_0 -) + void setToggleAction(bool); + void setOn(bool); +%End + +%If (Qt_3_0_0 -) + void setUsesDropDown(bool); + bool usesDropDown() const; + + void setIconSet(const QIconSet &); + void setText(const QString &); + void setMenuText(const QString &); + void setToolTip(const QString &); + void setWhatsThis(const QString &); +%End + +protected: +%If (Qt_3_0_0 -) + void childEvent(QChildEvent *); + virtual void addedTo(QWidget *,QWidget *,QAction *); + virtual void addedTo(int,QPopupMenu *,QAction *); + virtual void addedTo(QWidget *,QWidget *); + virtual void addedTo(int,QPopupMenu *); +%End + +signals: + void selected(QAction *); + +private: +%If (Qt_3_1_0 -) + QActionGroup(const QActionGroup &); +%End +}; + +%End +%End diff --git a/sip/qt/qapplication.sip b/sip/qt/qapplication.sip new file mode 100644 index 0000000..57ff0d7 --- /dev/null +++ b/sip/qt/qapplication.sip @@ -0,0 +1,574 @@ +// This is the SIP interface definition for QApplication. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QApplication + + QApplication + int &argc + char **argv + + +This takes one parameter which is a list of argument strings. Arguments +used by Qt are removed from the list. + + + + QApplication + int &argc + char **argv + bool GUIenabled + + +This takes two parameters, the first of which is a list of argument strings. +Arguments used by Qt are removed from the list. + + + + QApplication + int &argc + char **argv + Type type + + +This takes two parameters, the first of which is a list of argument strings. +Arguments used by Qt are removed from the list. (Qt v2.2+) + + + + int exec + + + +This has been renamed to exec_loop in Python. + + +%End + + +QApplication *qApp; + + +class QApplication : QObject +{ +%TypeHeaderCode +#include +#include +%End + +public: + QApplication(SIP_PYLIST) /PostHook=__pyQtQAppHook__/ [(int &,char **)]; +%MethodCode + // The Python interface is a list of argument strings that is + // modified. + + int argc; + char **argv; + + // Convert the list. + if ((argv = pyArgvToC(a0,argc)) == NULL) + sipIsErr = 1; + else + { + // Create it now the arguments are right. + static int nargc; + nargc = argc; + + Py_BEGIN_ALLOW_THREADS + sipCpp = new sipQApplication(nargc,argv); + Py_END_ALLOW_THREADS + + // Now modify the original list. + updatePyArgv(a0,argc,argv); + } +%End + + QApplication(SIP_PYLIST,bool) /PostHook=__pyQtQAppHook__/ [(int &,char **,bool)]; +%MethodCode + // The Python interface is a list of argument strings that is + // modified. + + int argc; + char **argv; + + // Convert the list. + if ((argv = pyArgvToC(a0,argc)) == NULL) + sipIsErr = 1; + else + { + // Create it now the arguments are right. + static int nargc; + nargc = argc; + + Py_BEGIN_ALLOW_THREADS + sipCpp = new sipQApplication(nargc,argv,a1); + Py_END_ALLOW_THREADS + + // Now modify the original list. + updatePyArgv(a0,argc,argv); + } +%End + +%If (Qt_2_2_0 -) + enum Type { + Tty, + GuiClient, + GuiServer + }; + + QApplication(SIP_PYLIST,Type /Constrained/) /PostHook=__pyQtQAppHook__/ [(int &,char **,Type)]; +%MethodCode + // The Python interface is a list of argument strings that is + // modified. + + int argc; + char **argv; + + // Convert the list. + if ((argv = pyArgvToC(a0,argc)) == NULL) + sipIsErr = 1; + else + { + // Create it now the arguments are right. + static int nargc; + nargc = argc; + + Py_BEGIN_ALLOW_THREADS + sipCpp = new sipQApplication(nargc,argv,(QApplication::Type)a1); + Py_END_ALLOW_THREADS + + // Now modify the original list. + updatePyArgv(a0,argc,argv); + } +%End +%End + + ~QApplication(); +%MethodCode + // Make sure all remaining top level widgets are not owned by + // Python. When a PyQt script terminates we have no control + // over the order in which the QApplication instance and the + // top level widgets are destroyed. If the former happens + // first then we get a seg. fault. We could take the approach + // of only pretending to delete the QApplication instance, but + // Qt seems to allow an application to delete the QApplication + // instance and then create another one. The approach we take + // is to transfer ownership of all top level widgets away from + // Python so that the C++ dtor is not called if they are + // destroyed after the QApplication instance. This might be + // seen as a memory leak - but if we really are terminating + // then it doesn't matter, and if we are just deleting the + // QApplication instance then (I think) we should have already + // deleted the top level widgets manually. In any event, the X + // server resources will be freed. + + QWidgetList *tlw = QApplication::topLevelWidgets(); + QWidgetListIt it(*tlw); + QWidget *w; + + while ((w = it.current()) != 0) + { + PyObject *sw; + + if ((sw = sipGetWrapper(w,sipClass_QWidget)) != NULL) + sipTransferTo(sw,NULL); + + ++it; + } + + delete tlw; +%End + + int argc() const; + SIP_PYLIST argv() const; +%MethodCode + // The Python interface returns a list of strings. + + int argc = sipCpp -> argc(); + + if ((sipRes = PyList_New(argc)) == NULL) + sipIsErr = 1; + else + for (int a = 0; a < argc; ++a) + if (PyList_SetItem(sipRes,a,PyString_FromString(sipCpp -> argv()[a])) < 0) + { + Py_DECREF(sipRes); + sipIsErr = 1; + break; + } +%End + +%If (Qt_2_3_0 -) + Type type() const; +%End +%If (- Qt_2_00) + static GUIStyle style(); + static void setStyle(GUIStyle); +%End +%If (Qt_2_00 -) + static QStyle &style(); + static void setStyle(QStyle * /Transfer/); +%End +%If (Qt_3_0_0 -) + static QStyle *setStyle(const QString &); +%End + +%If (- Qt_2_00) + enum ColorSpec + { + NormalColor = 0, + CustomColor = 1, + PrivateColor = 4, + ManyColor = 4, + TrueColor = 4 + }; +%End +%If (Qt_2_00 -) + enum ColorSpec + { + NormalColor = 0, + CustomColor = 1, + ManyColor = 2 + }; +%End + + static int colorSpec(); + static void setColorSpec(int); + static QCursor *overrideCursor(); + static void setOverrideCursor(QCursor &,bool = 0); + static void restoreOverrideCursor(); + static bool hasGlobalMouseTracking(); + static void setGlobalMouseTracking(bool); +%If (- Qt_2_00) + static QPalette *palette(); + static void setPalette(QPalette &,bool = 0); + static QFont *font(); + static void setFont(const QFont &,bool = 0); +%End +%If (Qt_2_00 -) + static QPalette palette(const QWidget * = 0); + static void setPalette(QPalette &,bool = 0,const char * = 0); + static QFont font(const QWidget * = 0); + static void setFont(const QFont &,bool = 0,const char * = 0); +%End + static QFontMetrics fontMetrics(); + QWidget *mainWidget() const; +%If (- Qt_2_00) + // We may not need the /Transfer/ now that the QApplication dtor is + // instrumented, but we'll leave it in so as not to break old programs + // needlessly. + void setMainWidget(QWidget * /Transfer/); +%End +%If (Qt_2_00 -) + virtual void setMainWidget(QWidget *); + virtual void polish(QWidget *); +%End + static QWidgetList *allWidgets(); + static QWidgetList *topLevelWidgets(); +%If (- Qt_3_0_0) + static QWidget *desktop(); +%End +%If (Qt_3_0_0 -) + static QDesktopWidget *desktop(); +%End + static QWidget *activePopupWidget(); + static QWidget *activeModalWidget(); + static QClipboard *clipboard(); + QWidget *focusWidget() const; +%If (Qt_2_00 -) + QWidget *activeWindow() const; +%End + static QWidget *widgetAt(int,int,bool = 0); + static QWidget *widgetAt(const QPoint &,bool = 0); + +%If (Qt_3_1_0 -) + static QEventLoop *eventLoop(); +%End + + int exec() /PyName=exec_loop, ReleaseGIL, + PreHook=__pyQtPreEventLoopHook__, + PostHook=__pyQtPostEventLoopHook__/; + void processEvents() /ReleaseGIL/; + void processEvents(int) /ReleaseGIL/; + void processOneEvent() /ReleaseGIL/; +%If (Qt_3_0_0 -) + bool hasPendingEvents(); +%End + int enter_loop() /ReleaseGIL/; + void exit_loop(); +%If (Qt_2_00 -) + int loopLevel() const; +%End + static void exit(int = 0); + static bool sendEvent(QObject *,QEvent *) /ReleaseGIL/; + static void postEvent(QObject *,QEvent * /Transfer/) /ReleaseGIL/; + static void sendPostedEvents(QObject *,int) /ReleaseGIL/; +%If (Qt_2_00 -) + static void sendPostedEvents() /ReleaseGIL/; + static void removePostedEvents(QObject *); +%End + virtual bool notify(QObject *,QEvent *) /ReleaseGIL/; + static bool startingUp(); + static bool closingDown(); + static void flushX(); +%If (Qt_3_0_0 -) + static void flush(); +%End + static void syncX(); + static void beep(); +%If (Qt_2_00 -) + void setDefaultCodec(QTextCodec *); + QTextCodec *defaultCodec() const; + void installTranslator(QTranslator *); + void removeTranslator(QTranslator *); +%End +%If (Qt_2_00 - Qt_3_0_0) + QString translate(const char *,const char *) const; +%End +%If (Qt_2_2_0 - Qt_3_0_0) + QString translate(const char *,const char *,const char *) const; +%End +%If (Qt_3_0_0 -) + enum Encoding { + DefaultCodec, + UnicodeUTF8 + }; + + QString translate(const char *,const char *,const char * = 0, + Encoding = DefaultCodec) const; +%End +%If (Qt_3_2_0 -) + QString applicationDirPath(); + QString applicationFilePath(); +%End +%If (- Qt_3_0_0) + static void setWinStyleHighlightColor(const QColor &); + static const QColor &winStyleHighlightColor(); +%End +%If (Qt_2_00 -) + static void setDesktopSettingsAware(bool); + static bool desktopSettingsAware(); + static void setCursorFlashTime(int); + static int cursorFlashTime(); +%End + static void setDoubleClickInterval(int); + static int doubleClickInterval(); +%If (Qt_2_1_0 -) + static void setWheelScrollLines(int); + static int wheelScrollLines(); +%If (Qt_2_2_0 -) + static void setGlobalStrut(const QSize &); + static QSize globalStrut(); +%End +%If (Qt_3_0_0 -) + static void setLibraryPaths(const QStringList &); + static QStringList libraryPaths(); + static void addLibraryPath(const QString &); + static void removeLibraryPath(const QString &); +%End + static void setStartDragTime(int); + static int startDragTime(); + static void setStartDragDistance(int); + static int startDragDistance(); +%If (Qt_3_0_0 -) + static void setReverseLayout(bool); + static bool reverseLayout(); + + static int horizontalAlignment(int); +%End +%If (Qt_2_2_0 -) + static bool isEffectEnabled(Qt::UIEffect); + static void setEffectEnabled(Qt::UIEffect,bool = 1); +%End +%End + + +%If (Qt_2_00 -) + bool isSessionRestored() const; + QString sessionId() const; +%If (Qt_3_1_0 -) + QString sessionKey() const; +%End + virtual void commitData(QSessionManager &); + virtual void saveState(QSessionManager &); +%End +%If (Qt_2_1_0 -) + void wakeUpGuiThread(); +%End +%If (Qt_THREAD_SUPPORT) +%If (Qt_2_2_0 -) + void lock() /ReleaseGIL/; + void unlock(bool = 1); + bool locked(); +%End +%If (Qt_3_0_0 -) + bool tryLock(); +%End +%End + +signals: + void lastWindowClosed(); +%If (Qt_2_00 -) + void aboutToQuit(); +%End +%If (Qt_2_1_0 -) + void guiThreadAwake(); +%End + +public slots: + void quit(); +%If (Qt_2_00 -) + void closeAllWindows(); +%End +%If (Qt_3_2_0 -) + void aboutQt(); +%End + +protected: +%If (Qt_3_1_0 -) + bool event(QEvent *); +%End + +private: + QApplication(const QApplication &); + + +%TypeCode +#include + + +// Convert a Python argv list to a conventional C argc count and argv array. +static char **pyArgvToC(PyObject *argvlist,int &argc) +{ + char **argv; + + argc = PyList_Size(argvlist); + + // Allocate space for two copies of the argument pointers, plus the + // terminating NULL. + if ((argv = (char **)sipMalloc(2 * (argc + 1) * sizeof (char *))) == NULL) + return NULL; + + // Convert the list. + for (int a = 0; a < argc; ++a) + { + char *arg; + + // Get the argument and allocate memory for it. + if ((arg = PyString_AsString(PyList_GetItem(argvlist,a))) == NULL || + (argv[a] = (char *)sipMalloc(strlen(arg) + 1)) == NULL) + return NULL; + + // Copy the argument and save a pointer to it. + strcpy(argv[a],arg); + argv[a + argc + 1] = argv[a]; + } + + argv[argc + argc + 1] = argv[argc] = NULL; + + return argv; +} + + +// Remove arguments from the Python argv list that have been removed from the +// C argv array. +static void updatePyArgv(PyObject *argvlist,int argc,char **argv) +{ + for (int a = 0, na = 0; a < argc; ++a) + { + // See if it was removed. + if (argv[na] == argv[a + argc + 1]) + ++na; + else + PyList_SetSlice(argvlist,na,na + 1,NULL); + } +} +%End + +}; + + +enum QtMsgType { + QtDebugMsg, + QtWarningMsg, + QtFatalMsg +}; + + +SIP_PYCALLABLE qInstallMsgHandler(SIP_PYCALLABLE /AllowNone/); +%MethodCode + void (*old)(QtMsgType, const char *); + + // Treat None as the default handler. + old = qInstallMsgHandler((a0 != Py_None) ? pyqtMsgHandler : 0); + + // If we recognise the old handler, then return it. Otherwise return + // the default handler. This doesn't exactly mimic the Qt behaviour + // but it is probably close enough for the way it will be used. + sipRes = (old == pyqtMsgHandler) ? pyqtPyMsgHandler : Py_None; + Py_INCREF(sipRes); + + // Save the new Python handler. + Py_XDECREF(pyqtPyMsgHandler); + pyqtPyMsgHandler = a0; + Py_INCREF(pyqtPyMsgHandler); +%End + +%ModuleCode +// The user supplied Python handler. +static PyObject *pyqtPyMsgHandler = 0; + +// The C++ wrapper around the Python handler. +static void pyqtMsgHandler(QtMsgType type, const char *msg) +{ + PyObject *res; + + SIP_BLOCK_THREADS + +#if SIP_VERSION >= 0x040200 + res = sipCallMethod(0, pyqtPyMsgHandler, "Es", type, sipEnum_QtMsgType, msg); +#elif SIP_VERSION >= 0x040000 + res = sipCallMethod(0, pyqtPyMsgHandler, "es", type, msg); +#else + PyObject *args = Py_BuildValue("is", type, msg); + + if (args != NULL) + { + res = PyEval_CallObject(pyqtPyMsgHandler, args); + Py_DECREF(args); + } +#endif + + Py_XDECREF(res); + + if (res != NULL && res != Py_None) + { + PyErr_SetString(PyExc_TypeError, "invalid result type from PyQt message handler"); + res = NULL; + } + + if (res == NULL) + PyErr_Print(); + + SIP_UNBLOCK_THREADS +} +%End diff --git a/sip/qt/qarray.sip b/sip/qt/qarray.sip new file mode 100644 index 0000000..76125e1 --- /dev/null +++ b/sip/qt/qarray.sip @@ -0,0 +1,94 @@ +// This is the SIP interface definition for all types based on the QArray +// template. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QArray<type> (Qt 1.x, 2.x) + +Types based on the QArray template are automatically +converted to and from Python lists of the type. + + +%End + + +%If (- Qt_3_0_0) + +%MappedType QArray +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + // Convert to a Python list of integers. + + PyObject *l; + + // Create the list. + + if ((l = PyList_New(sipCpp -> count())) == NULL) + return NULL; + + // Get it. + + for (uint i = 0; i < sipCpp -> count(); ++i) + if (PyList_SetItem(l,i,PyInt_FromLong((long)(sipCpp -> at(i)))) < 0) + { + Py_DECREF(l); + + return NULL; + } + + return l; +%End + +%ConvertToTypeCode + // Convert a Python list of integers to a QArray on the heap. + + if (sipIsErr == NULL) + return PyList_Check(sipPy); + + QArray *qa = new QArray(PyList_GET_SIZE(sipPy)); + + PyErr_Clear(); + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + { + qa[i] = (int)PyInt_AsLong(PyList_GET_ITEM(sipPy,i)); + + if (PyErr_Occurred() != NULL) + { + delete qa; + *sipIsErr = 1; + + return 0; + } + } + + *sipCppPtr = qa; + + return sipGetState(sipTransferObj); +%End +}; + +%End diff --git a/sip/qt/qassistantclient.sip b/sip/qt/qassistantclient.sip new file mode 100644 index 0000000..34c4820 --- /dev/null +++ b/sip/qt/qassistantclient.sip @@ -0,0 +1,63 @@ +// This is the SIP interface definition for QAssistantClient. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QAssistantClient (Qt v3.1+) + +QAssistantClient is fully implemented. + + +%End + + +%If (Qt_ASSISTANTCLIENT) +%If (Qt_3_1_0 -) + +class QAssistantClient : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QAssistantClient(const QString &,QObject * /TransferThis/ = 0, + const char * = 0); + + bool isOpen() const; + +%If (Qt_3_2_0 -) + void setArguments(const QStringList &); +%End + +public slots: + virtual void openAssistant() /ReleaseGIL/; + virtual void closeAssistant(); + virtual void showPage(const QString &); + +signals: + void assistantOpened(); + void assistantClosed(); + void error(const QString &); +}; + +%End +%End diff --git a/sip/qt/qbitmap.sip b/sip/qt/qbitmap.sip new file mode 100644 index 0000000..b0132dd --- /dev/null +++ b/sip/qt/qbitmap.sip @@ -0,0 +1,59 @@ +// This is the SIP interface definition for QBitmap. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QBitmap + +QBitmap is fully implemented. + + +%End + + +class QBitmap : QPixmap +{ +%TypeHeaderCode +#include +%End + +public: + QBitmap(); +%If (- Qt_2_00) + QBitmap(int,int,bool = 0); + QBitmap(const QSize &,bool = 0); +%End +%If (Qt_2_00 -) + QBitmap(int,int,bool = 0,QPixmap::Optimization = QPixmap::DefaultOptim); + QBitmap(const QSize &,bool = 0,QPixmap::Optimization = QPixmap::DefaultOptim); +%End + QBitmap(int,int,uchar *,bool = 0); + QBitmap(const QSize &,uchar *,bool = 0); + QBitmap(const QBitmap &); +%If (- Qt_2_00) + QBitmap(const char *,const char * = 0); +%End +%If (Qt_2_00 -) + QBitmap(const QString &,const char * = 0); +%End + + QBitmap xForm(const QWMatrix &) const; +}; diff --git a/sip/qt/qbrush.sip b/sip/qt/qbrush.sip new file mode 100644 index 0000000..ab629d7 --- /dev/null +++ b/sip/qt/qbrush.sip @@ -0,0 +1,105 @@ +// This is the SIP interface definition for QBrush. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QBrush + +QBrush is fully implemented, including the Python +== and != operators. + + +%End + + +%If (- Qt_2_00) + +enum BrushStyle { + NoBrush, + SolidPattern, + Dense1Pattern, + Dense2Pattern, + Dense3Pattern, + Dense4Pattern, + Dense5Pattern, + Dense6Pattern, + Dense7Pattern, + HorPattern, + VerPattern, + CrossPattern, + BDiagPattern, + FDiagPattern, + DiagCrossPattern, + CustomPattern = 24 +}; + + +class QBrush +{ +%TypeHeaderCode +#include +%End + +public: + QBrush(); + QBrush(BrushStyle); + QBrush(const QColor &,BrushStyle = SolidPattern); + QBrush(const QColor &,const QPixmap &); + QBrush(const QBrush &); + + BrushStyle style() const; + void setStyle(BrushStyle); + const QColor &color() const; + void setColor(const QColor &); + QPixmap *pixmap() const; + void setPixmap(const QPixmap &); +}; + +%End + + +%If (Qt_2_00 -) + +class QBrush : Qt +{ +%TypeHeaderCode +#include +%End + +public: + QBrush(); + QBrush(BrushStyle); + QBrush(const QColor &,BrushStyle = SolidPattern); + QBrush(const QColor &,const QPixmap &); + QBrush(const QBrush &); + + BrushStyle style() const; + void setStyle(BrushStyle); + const QColor &color() const; + void setColor(const QColor &); + QPixmap *pixmap() const; + void setPixmap(const QPixmap &); + + bool operator==(const QBrush &) const; + bool operator!=(const QBrush &) const; +}; + +%End diff --git a/sip/qt/qbutton.sip b/sip/qt/qbutton.sip new file mode 100644 index 0000000..356de1e --- /dev/null +++ b/sip/qt/qbutton.sip @@ -0,0 +1,184 @@ +// This is the SIP interface definition for QButton. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QButton + +QButton is fully implemented. + + +%End + + +class QButton : QWidget +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QButton(QWidget * /TransferThis/ = 0,const char * = 0); +%End +%If (Qt_2_00 -) + QButton(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); +%End + +%If (- Qt_2_00) + const char *text() const; + void setText(const char *); +%End +%If (Qt_2_00 -) + QString text() const; + virtual void setText(const QString &); +%End + const QPixmap *pixmap() const; +%If (- Qt_2_00) + void setPixmap(const QPixmap &); +%End +%If (Qt_2_00 -) + virtual void setPixmap(const QPixmap &); +%End + +%If (- Qt_3_0_0) + int accel() const; +%End +%If (Qt_3_0_0 -) + QKeySequence accel() const; +%End +%If (- Qt_2_00) + void setAccel(int); +%End +%If (Qt_2_00 - Qt_3_0_0) + virtual void setAccel(int); +%End +%If (Qt_3_0_0 -) + virtual void setAccel(const QKeySequence &); +%End + + bool isToggleButton() const; + +%If (Qt_2_00 -) + enum ToggleType + { + SingleShot, + Toggle, + Tristate + }; + + ToggleType toggleType() const; +%End + +%If (- Qt_2_00) + void setDown(bool); +%End +%If (Qt_2_00 -) + virtual void setDown(bool); +%End + bool isDown() const; + + bool isOn() const; + +%If (Qt_2_00 -) + enum ToggleState + { + Off, + NoChange, + On + }; + + ToggleState state() const; +%End + +%If (- Qt_3_0_0) + bool autoResize() const; +%End +%If (- Qt_2_00) + void setAutoResize(bool); +%End +%If (Qt_2_00 - Qt_3_0_0) + virtual void setAutoResize(bool); +%End + + bool autoRepeat() const; +%If (- Qt_2_00) + void setAutoRepeat(bool); +%End +%If (Qt_2_00 -) + virtual void setAutoRepeat(bool); +%End + +%If (Qt_2_00 -) + bool isExclusiveToggle() const; +%End + +%If (Qt_2_00 - Qt_3_0_0) + bool focusNextPrevChild(bool); +%End + +%If (Qt_2_00 -) + QButtonGroup *group() const; +%End + +public slots: + void animateClick(); + void toggle(); + +signals: + void pressed(); + void released(); + void clicked(); + void toggled(bool); +%If (Qt_2_00 -) + void stateChanged(int); +%End + +protected: + void setToggleButton(bool); +%If (Qt_2_00 -) + virtual void setToggleType(ToggleType); +%End + void setOn(bool); +%If (Qt_2_00 -) + virtual void setState(ToggleState); +%End + + virtual bool hitButton(const QPoint &) const; + virtual void drawButton(QPainter *); + virtual void drawButtonLabel(QPainter *); + + void keyPressEvent(QKeyEvent *); +%If (Qt_2_1_0 -) + void keyReleaseEvent(QKeyEvent *); +%End + void mousePressEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); + void paintEvent(QPaintEvent *); + void focusInEvent(QFocusEvent *); + void focusOutEvent(QFocusEvent *); + + void enabledChange(bool); + +private: + QButton(const QButton &); +}; diff --git a/sip/qt/qbuttongroup.sip b/sip/qt/qbuttongroup.sip new file mode 100644 index 0000000..647bb17 --- /dev/null +++ b/sip/qt/qbuttongroup.sip @@ -0,0 +1,104 @@ +// This is the SIP interface definition for QButtonGroup. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QButtonGroup + +QButtonGroup is fully implemented. + + +%End + + +class QButtonGroup : QGroupBox +{ +%TypeHeaderCode +#include +%End + +public: + QButtonGroup(QWidget * /TransferThis/ = 0,const char * = 0); +%If (- Qt_2_00) + QButtonGroup(const char *,QWidget * /TransferThis/ = 0, + const char * = 0); +%End +%If (Qt_2_00 -) + QButtonGroup(const QString &,QWidget * /TransferThis/ = 0, + const char * = 0); + QButtonGroup(int,Orientation,QWidget * /TransferThis/ = 0, + const char * = 0); + QButtonGroup(int,Orientation,const QString &, + QWidget * /TransferThis/ = 0,const char * = 0); +%End + + bool isExclusive() const; +%If (- Qt_2_00) + void setExclusive(bool); + void setButton(int); +%End +%If (Qt_2_00 -) + bool isRadioButtonExclusive() const; + virtual void setExclusive(bool); + virtual void setRadioButtonExclusive(bool); +%End + + int insert(QButton *,int = -1); + void remove(QButton *); + QButton *find(int) const; +%If (Qt_2_00 -) + int id(QButton *) const; + int count() const; + + virtual void setButton(int); + + virtual void moveFocus(int); +%End + +%If (Qt_2_00 - Qt_3_0_0) + QButton *selected(); +%End +%If (Qt_3_0_0 -) + QButton *selected() const; +%End +%If (Qt_3_2_0 -) + int selectedId() const; +%End + +signals: + void pressed(int); + void released(int); + void clicked(int); + +protected slots: + void buttonPressed(); + void buttonReleased(); + void buttonClicked(); + void buttonToggled(bool); + +protected: +%If (Qt_3_1_0 -) + bool event(QEvent *); +%End + +private: + QButtonGroup(const QButtonGroup &); +}; diff --git a/sip/qt/qbytearray.sip b/sip/qt/qbytearray.sip new file mode 100644 index 0000000..fa992ec --- /dev/null +++ b/sip/qt/qbytearray.sip @@ -0,0 +1,203 @@ +// This is the SIP interface definition for QByteArray. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QByteArray + +A Python string can be used whenever a QByteArray can be +used. A QByteArray can be converted to a Python string +using the Python str() function. + + + + QByteArray &assign + const char *data + uint size + + +Not implemented. + + + + char &at + uint i + + +Not yet implemented. + + + + int contains + const char &d + + +Not yet implemented. + + + + bool fill + const char &d + int size = -1 + + +Not yet implemented. + + + + int find + const char &d + uint i = 0 + + +Not yet implemented. + + + + void resetRawData + const char *data + uintsize + + +Not implemented. + + + + QByteArray &setRawData + const char *data + uintsize + + +Not implemented. + + +%End + + +class QByteArray +{ +%TypeHeaderCode +#include +%End + +public: + QByteArray(); + QByteArray(int); + QByteArray(const QByteArray &); + + SIP_PYOBJECT data() const; +%MethodCode + // QByteArrays aren't '\0' terminated so set the size + // explicitly. + + char *res; + uint len; + + Py_BEGIN_ALLOW_THREADS + res = sipCpp -> data(); + len = sipCpp -> size(); + Py_END_ALLOW_THREADS + + if (res) + { + if ((sipRes = PyString_FromStringAndSize(res,len)) == NULL) + sipIsErr = 1; + } + else + { + Py_INCREF(Py_None); + sipRes = Py_None; + } +%End + + // These are actually in QMemArray, which isn't implemented so pretend + // they are here. + + uint nrefs() const; + bool isEmpty() const; + bool isNull() const; + bool resize(uint); + bool truncate(uint); +// bool fill(const char &,int = -1); + void detach(); + QByteArray copy() const; + QByteArray &assign(const QByteArray &); +// QByteArray &assign(const char *,uint); + QByteArray &duplicate(const QByteArray &); + QByteArray &duplicate(const char *,uint); +// QByteArray &setRawData(const char *,uint); +// void resetRawData(const char *,uint); +// int find(const char &,uint = 0) const; +// int contains(const char &) const; +// char &at(uint) const; + + SIP_PYOBJECT __str__(); +%MethodCode + // QByteArrays aren't '\0' terminated so set the size + // explicitly. + + char *data; + uint len; + + Py_BEGIN_ALLOW_THREADS + data = sipCpp -> data(); + len = sipCpp -> size(); + Py_END_ALLOW_THREADS + + if (data == NULL) + sipRes = PyString_FromString(""); + else + sipRes = PyString_FromStringAndSize(data,len); +%End + +%ConvertToTypeCode + // Allow a Python string whenever a QByteArray is expected. + + if (sipIsErr == NULL) + return (PyString_Check(sipPy) || + sipCanConvertToInstance(sipPy,sipClass_QByteArray,SIP_NO_CONVERTORS)); + + if (PyString_Check(sipPy)) + { + Py_BEGIN_ALLOW_THREADS + QByteArray *ba = new QByteArray(); + + ba -> duplicate(PyString_AS_STRING(sipPy),PyString_GET_SIZE(sipPy)); + + *sipCppPtr = ba; + Py_END_ALLOW_THREADS + + return sipGetState(sipTransferObj); + } + + *sipCppPtr = reinterpret_cast(sipConvertToInstance(sipPy,sipClass_QByteArray,sipTransferObj,SIP_NO_CONVERTORS,0,sipIsErr)); + + return 0; +%End +}; + + +%If (Qt_3_1_0 -) +QByteArray qCompress(const uchar * /Array/,int /ArraySize/); +QByteArray qCompress(const QByteArray &); +QByteArray qUncompress(const uchar * /Array/,int /ArraySize/); +QByteArray qUncompress(const QByteArray &); +%End diff --git a/sip/qt/qcdestyle.sip b/sip/qt/qcdestyle.sip new file mode 100644 index 0000000..790662f --- /dev/null +++ b/sip/qt/qcdestyle.sip @@ -0,0 +1,68 @@ +// This is the SIP interface definition for QCDEStyle. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QCDEStyle (Qt v2+) + +QCDEStyle is fully implemented. + + +%End + + +%If (Qt_STYLE_CDE) +%If (Qt_2_00 -) + +class QCDEStyle : QMotifStyle +{ +%TypeHeaderCode +#include +%End + +public: + QCDEStyle(bool = 0); + +%If (- Qt_3_0_0) + int defaultFrameWidth() const; + void drawArrow(QPainter *,ArrowType,bool,int,int,int,int, + const QColorGroup &,bool,const QBrush * = 0); + void drawIndicator(QPainter *,int,int,int,int,const QColorGroup &,int, + bool = 0,bool = 1); + void drawExclusiveIndicator(QPainter *,int,int,int,int, + const QColorGroup &,bool,bool = 0,bool = 1); +%End +%If (Qt_3_0_0 -) + int pixelMetric(PixelMetric,const QWidget * = 0) const; + + void drawControl(ControlElement,QPainter *,const QWidget *, + const QRect &,const QColorGroup &, + SFlags = Style_Default, + const QStyleOption & = QStyleOption()) const; + + void drawPrimitive(PrimitiveElement,QPainter *,const QRect &, + const QColorGroup &,SFlags = Style_Default, + const QStyleOption & = QStyleOption()) const; +%End +}; + +%End +%End diff --git a/sip/qt/qcheckbox.sip b/sip/qt/qcheckbox.sip new file mode 100644 index 0000000..9c2bfc4 --- /dev/null +++ b/sip/qt/qcheckbox.sip @@ -0,0 +1,88 @@ +// This is the SIP interface definition for QCheckBox. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QCheckBox + +QCheckBox is fully implemented. + + +%End + + +class QCheckBox : QButton +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QCheckBox(QWidget * /TransferThis/ = 0,const char * = 0); + QCheckBox(const char *,QWidget * /TransferThis/,const char * = 0); +%End +%If (Qt_2_00 -) + QCheckBox(QWidget * /TransferThis/,const char * = 0); + QCheckBox(const QString &,QWidget * /TransferThis/,const char * = 0); +%End + + bool isChecked() const; + +%If (Qt_2_00 -) + void setNoChange(); + + void setTristate(bool = 1); +%End +%If (Qt_2_2_0 -) + bool isTristate() const; +%End + + QSize sizeHint() const; +%If (Qt_2_00 - Qt_3_0_0) + QSizePolicy sizePolicy() const; +%End + +%If (- Qt_3_0_0) + void setChecked(bool); +%End + +public slots: +%If (Qt_3_0_0 -) + void setChecked(bool); +%End + +protected: +%If (Qt_2_00 -) + void resizeEvent(QResizeEvent *); +%End + void drawButton(QPainter *); + void drawButtonLabel(QPainter *); +%If (Qt_2_00 -) + void updateMask(); +%End +%If (Qt_3_2_0 -) + bool hitButton(const QPoint &) const; +%End + +private: + QCheckBox(const QCheckBox &); +}; diff --git a/sip/qt/qclipboard.sip b/sip/qt/qclipboard.sip new file mode 100644 index 0000000..4220c37 --- /dev/null +++ b/sip/qt/qclipboard.sip @@ -0,0 +1,152 @@ +// This is the SIP interface definition for QClipboard. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QClipboard + + void *data const + const char *format + + +Not yet implemented (Qt v1.x). + + + + void setData + const char *format + void * + + +Not yet implemented (Qt v1.x). + + +%End + + +%If (Qt_CLIPBOARD) + +class QClipboard : QObject +{ +%TypeHeaderCode +#include +%End + +private: + QClipboard(QObject * /TransferThis/ = 0,const char * = 0); + ~QClipboard(); + +public: +%If (Qt_3_1_0 -) + enum Mode { + Clipboard, + Selection + }; + + void clear(Mode); +%End + void clear(); + +%If (Qt_3_0_0 -) + bool supportsSelection() const; + bool ownsSelection() const; + bool ownsClipboard() const; + + void setSelectionMode(bool); + bool selectionModeEnabled() const; +%End + +%If (Qt_3_1_0 -) + QString text(Mode) const; + QString text(QCString &,Mode) const; + void setText(const QString &,Mode); + +%If (Qt_MIMECLIPBOARD) + QMimeSource *data(Mode) const; + void setData(QMimeSource * /GetWrapper/,Mode); +%MethodCode + sipCpp->setData(a0, a1); + + // Transfer ownership to C++ and make sure the Python object + // stays alive by giving it a reference to itself. The cycle + // will be broken by QMimeSource's virtual dtor. + sipTransferTo(a0Wrapper, a0Wrapper); +%End + + QImage image(Mode) const; + QPixmap pixmap(Mode) const; + void setImage(const QImage &,Mode); + void setPixmap(const QPixmap &,Mode); +%End +%End + +%If (- Qt_2_00) +// void *data(const char *) const; +// void setData(const char *,void *); + const char *text() const; + void setText(const char *); + QPixmap *pixmap() const; +%End + +%If (Qt_2_00 -) +%If (Qt_MIMECLIPBOARD) + QMimeSource *data() const; + void setData(QMimeSource * /GetWrapper/); +%MethodCode + sipCpp->setData(a0); + + // Transfer ownership to C++ and make sure the Python object + // stays alive by giving it a reference to itself. The cycle + // will be broken by QMimeSource's virtual dtor. + sipTransferTo(a0Wrapper, a0Wrapper); +%End +%End + QString text() const; +%If (Qt_2_2_0 -) + QString text(QCString &) const; +%End + void setText(const QString &); +%If (Qt_MIMECLIPBOARD) + QImage image() const; + QPixmap pixmap() const; + void setImage(const QImage &); +%End +%End + +%If (Qt_MIMECLIPBOARD) + void setPixmap(const QPixmap &); +%End + +signals: +%If (Qt_3_0_0 -) + void selectionChanged(); +%End + void dataChanged(); + +protected: + void connectNotify(const char *); + bool event(QEvent *); + +private: + QClipboard(const QClipboard &); +}; + +%End diff --git a/sip/qt/qcolor.sip b/sip/qt/qcolor.sip new file mode 100644 index 0000000..7d0d53e --- /dev/null +++ b/sip/qt/qcolor.sip @@ -0,0 +1,207 @@ +// This is the SIP interface definition for QColor. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QColor + +The Python == and != operators are +supported. + + + + void getHsv + int *h + int *s + int *v + + +This takes no parameters and returns the h, +s and v values as a tuple. + + + + void getRgb + int *r + int *g + int *b + + +This takes no parameters and returns the r, +g and b values as a tuple. + + + + void hsv + int *h + int *s + int *v + + +This takes no parameters and returns the h, +s and v values as a tuple. + + + + void rgb + int *r + int *g + int *b + + +This takes no parameters and returns the r, +g and b values as a tuple. + + +%End + + +%ModuleHeaderCode +#include +%End + + +%If (- Qt_2_00) +// The global colours. + +QColor color0; +QColor color1; +QColor black; +QColor white; +QColor darkGray; +QColor gray; +QColor lightGray; +QColor red; +QColor green; +QColor blue; +QColor cyan; +QColor magenta; +QColor yellow; +QColor darkRed; +QColor darkGreen; +QColor darkBlue; +QColor darkCyan; +QColor darkMagenta; +QColor darkYellow; +%End + + +// Related functions. + +int qRed(QRgb); +int qGreen(QRgb); +int qBlue(QRgb); +QRgb qRgb(int,int,int); +int qGray(int,int,int); +int qGray(QRgb); + +%If (Qt_2_00 -) +int qAlpha(QRgb); +QRgb qRgba(int,int,int,int); +%End + + +class QColor +{ +%TypeHeaderCode +#include +%End + +public: + enum Spec { + Rgb, + Hsv + }; + + QColor(); + QColor(int,int,int); + QColor(int,int,int,Spec); + QColor(QRgb,uint = 0xffffffff); +%If (Qt_2_00 -) + QColor(const QString &); +%End + QColor(const char *); + QColor(const QColor &); + + bool isValid() const; + bool isDirty() const; +%If (- Qt_2_00) + void setNamedColor(const char *); +%End +%If (Qt_2_1_0 -) + QString name() const; +%End +%If (Qt_2_00 -) + void setNamedColor(const QString &); +%End + + QRgb rgb() const; + void setRgb(int,int,int); + void setRgb(QRgb); +%If (Qt_3_2_0 -) + void getRgb(int *,int *,int *) const; +%End + + // Obsolete and is hidden anyway by the overload above. + //void rgb(int *,int *,int *) const; + + int red() const; + int green() const; + int blue() const; + + void setHsv(int,int,int); + +%If (Qt_3_2_0 -) + void getHsv(int *,int *,int *) const; +%End +%If (- Qt_3_2_0) + void getHsv(int &,int &,int &) const; +%End + + // Obsolete. + void hsv(int *,int *,int *) const; + + QColor light(int = 150) const; + QColor dark(int = 200) const; +%If (- Qt_3_0_0) + static bool lazyAlloc(); + static void setLazyAlloc(bool); +%End + + bool operator==(const QColor &) const; + bool operator!=(const QColor &) const; + + uint alloc(); + uint pixel() const; + static int maxColors(); + static int numBitPlanes(); + static int enterAllocContext(); + static void leaveAllocContext(); + static int currentAllocContext(); + static void destroyAllocContext(int); +%If (Qt_3_0_0 -) +%End + static void initialize(); + static void cleanup(); +%If (Qt_3_2_0 -) + static QStringList colorNames(); +%End +}; diff --git a/sip/qt/qcolordialog.sip b/sip/qt/qcolordialog.sip new file mode 100644 index 0000000..2f715d9 --- /dev/null +++ b/sip/qt/qcolordialog.sip @@ -0,0 +1,77 @@ +// This is the SIP interface definition for QColorDialog. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QColorDialog (Qt v2+) + + static QRgb getRgba + QRgb initial + bool *ok + QWidget *parent = 0 + const char *name = 0 + + +This takes the initial, parent and +name parameters and returns a tuple containing the +QRgb result and the ok value. + + +%End + + +%If (Qt_2_00 -) +%If (Qt_COLORDIALOG) + +class QColorDialog : QDialog +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_0) + static QColor getColor(QColor,QWidget * = 0,const char * = 0) /ReleaseGIL/; +%End +%If (Qt_3_0_0 -) + static QColor getColor(const QColor & = Qt::white,QWidget * = 0, + const char * = 0) /ReleaseGIL/; +%End +%If (Qt_2_1_0 -) + static QRgb getRgba(QRgb,bool * = 0,QWidget * = 0,const char * = 0) /ReleaseGIL/; + static int customCount(); + static QRgb customColor(int); + static void setCustomColor(int,QRgb); +%End +%If (Qt_3_1_0 -) + static void setStandardColor(int,QRgb); +%End + +private: +%If (Qt_2_1_0 -) + QColorDialog(QWidget * /TransferThis/ = 0,const char * = 0,bool = 0); + QColorDialog(const QColorDialog &); + ~QColorDialog(); +%End +}; + +%End +%End diff --git a/sip/qt/qcolorgroup.sip b/sip/qt/qcolorgroup.sip new file mode 100644 index 0000000..20e37b0 --- /dev/null +++ b/sip/qt/qcolorgroup.sip @@ -0,0 +1,125 @@ +// This is the SIP interface definition for QColorGroup. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QColorGroup + +QColorGroup is fully implemented. + + +%End + + +class QColorGroup +{ +%TypeHeaderCode +#include +%End + +public: + QColorGroup(); + QColorGroup(const QColor &,const QColor &,const QColor &,const QColor &, + const QColor &,const QColor &,const QColor &); +%If (Qt_2_00 -) + QColorGroup(const QBrush &,const QBrush &,const QBrush &,const QBrush &, + const QBrush &,const QBrush &,const QBrush &,const QBrush &, + const QBrush &); +%End + QColorGroup(QColorGroup&); + +%If (- Qt_2_00) + QColor midlight() const; +%End + +%If (Qt_2_00 - Qt_3_0_0) + enum ColorRole + { + Foreground, + Button, + Light, + Midlight, + Dark, + Mid, + Text, + BrightText, + ButtonText, + Base, + Background, + Shadow, + Highlight, + HighlightedText, + NColorRoles + }; +%End +%If (Qt_3_0_0 -) + enum ColorRole + { + Foreground, + Button, + Light, + Midlight, + Dark, + Mid, + Text, + BrightText, + ButtonText, + Base, + Background, + Shadow, + Highlight, + HighlightedText, + Link, + LinkVisited, + NColorRoles + }; +%End + +%If (Qt_2_00 -) + const QColor &color(ColorRole) const; + const QBrush &brush(ColorRole) const; + void setColor(ColorRole,const QColor &); + void setBrush(ColorRole,const QBrush &); +%End + + const QColor &foreground() const; +%If (Qt_2_00 -) + const QColor &button() const; +%End + const QColor &light() const; + const QColor &dark() const; + const QColor &mid() const; + const QColor &text() const; + const QColor &base() const; + const QColor &background() const; +%If (Qt_2_00 -) + const QColor &midlight() const; + const QColor &brightText() const; + const QColor &buttonText() const; + const QColor &shadow() const; + const QColor &highlight() const; + const QColor &highlightedText() const; +%End +%If (Qt_3_0_0 -) + const QColor &link() const; + const QColor &linkVisited() const; +%End +}; diff --git a/sip/qt/qcombobox.sip b/sip/qt/qcombobox.sip new file mode 100644 index 0000000..3555eba --- /dev/null +++ b/sip/qt/qcombobox.sip @@ -0,0 +1,277 @@ +// This is the SIP interface definition for QComboBox. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QComboBox + +QComboBox is fully implemented. + + +%End + + +class QComboBox : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QComboBox(QWidget * /TransferThis/ = 0,char * = 0); + QComboBox(bool,QWidget * /TransferThis/ = 0,char * = 0); + + int count() const; + +%If (Qt_2_00 -) + void insertStringList(QStringList &,int = -1); +%End + void insertStrList(const QStrList *,int = -1); +// void insertStrList(const QStrList &,int = -1); +// void insertStrList(const char **,int = -1,int = -1); + +%If (- Qt_2_00) + void insertItem(const char *,int = -1); +%End +%If (Qt_2_00 -) + void insertItem(const QString &,int = -1); +%End + void insertItem(const QPixmap &,int = -1); +%If (Qt_2_1_0 -) + void insertItem(const QPixmap &,const QString &,int = -1); +%End + + void removeItem(int); + +%If (- Qt_3_0_0) + void clear(); +%End + + int currentItem() const; +%If (- Qt_2_00) + void setCurrentItem(int); +%End +%If (Qt_2_00 -) + virtual void setCurrentItem(int); +%End + +%If (- Qt_2_00) + const char *currentText() const; +%End +%If (Qt_2_00 -) + QString currentText() const; +%End +%If (Qt_3_0_0 -) + virtual void setCurrentText(const QString &); +%End + +%If (- Qt_2_00) + const char *text(int) const; +%End +%If (Qt_2_00 -) + QString text(int) const; +%End + const QPixmap *pixmap(int) const; + +%If (- Qt_2_00) + void changeItem(const char *,int); +%End +%If (Qt_2_00 -) + void changeItem(const QString &,int); +%End + void changeItem(const QPixmap &,int); +%If (Qt_2_1_0 -) + void changeItem(const QPixmap &,const QString &,int); +%End + + bool autoResize() const; +%If (- Qt_2_00) + void setAutoResize(bool); +%End +%If (Qt_2_00 -) + virtual void setAutoResize(bool); +%End + QSize sizeHint() const; +%If (Qt_2_00 - Qt_3_0_0) + virtual QSizePolicy sizePolicy() const; +%End + +%If (- Qt_2_00) + void setBackgroundColor(const QColor &); + void setStyle(GUIStyle); +%End +%If (Qt_2_00 - Qt_3_0_0) + virtual void setBackgroundColor(const QColor &); +%End +%If (- Qt_2_00) + void setPalette(const QPalette &); + void setFont(const QFont &); + void setEnabled(bool); +%End +%If (Qt_2_00 - Qt_3_0_0) + virtual void setPalette(const QPalette &); + virtual void setFont(const QFont &); + virtual void setEnabled(bool); +%End +%If (Qt_3_0_0 -) + void setPalette(const QPalette &); + void setFont(const QFont &); + void setEnabled(bool); +%End + +%If (- Qt_2_00) + void setSizeLimit(int); +%End +%If (Qt_2_00 -) + virtual void setSizeLimit(int); +%End + int sizeLimit() const; + +%If (- Qt_2_00) + void setMaxCount(int); +%End +%If (Qt_2_00 -) + virtual void setMaxCount(int); +%End + int maxCount() const; + + enum Policy { + NoInsertion, + AtTop, + AtCurrent, + AtBottom, + AfterCurrent, + BeforeCurrent + }; + +%If (- Qt_2_00) + void setInsertionPolicy(Policy); +%End +%If (Qt_2_00 -) + virtual void setInsertionPolicy(Policy); +%End + Policy insertionPolicy() const; + +%If (- Qt_2_00) + void setValidator(QValidator *); + QValidator *validator() const; +%End +%If (Qt_2_00 -) + virtual void setValidator(const QValidator *); + const QValidator *validator() const; +%End + +%If (- Qt_2_00) + void setListBox(QListBox *); +%End +%If (Qt_2_00 -) + virtual void setListBox(QListBox *); +%End + QListBox *listBox() const; + +%If (Qt_3_0_0 -) + virtual void setLineEdit(QLineEdit *); +%End +%If (Qt_2_1_0 -) + QLineEdit *lineEdit() const; +%End + +%If (- Qt_2_00) + void setAutoCompletion(bool); +%End +%If (Qt_2_00 -) + virtual void setAutoCompletion(bool); +%End + bool autoCompletion() const; + + bool eventFilter(QObject *,QEvent *); + +%If (Qt_2_1_0 -) + void setDuplicatesEnabled(bool); + bool duplicatesEnabled() const; +%End + +%If (Qt_2_2_0 -) + bool editable() const; + void setEditable(bool); +%End + +%If (Qt_3_0_0 -) + virtual void popup(); +%End + +%If (Qt_3_3_0 -) + void hide(); +%End + +public slots: +%If (Qt_3_0_0 -) + void clear(); +%End + void clearValidator(); + void clearEdit(); +%If (- Qt_2_00) + void setEditText(const char *); +%End +%If (Qt_2_00 -) + virtual void setEditText(const QString &); +%End + +signals: + void activated(int); + void highlighted(int); +%If (- Qt_2_00) + void activated(const char *); + void highlighted(const char *); +%End +%If (Qt_2_00 -) + void activated(const QString &); + void highlighted(const QString &); + void textChanged(const QString &); +%End + +protected: + void paintEvent(QPaintEvent *); + void resizeEvent(QResizeEvent *); + void mousePressEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseDoubleClickEvent(QMouseEvent *); + void keyPressEvent(QKeyEvent *); + void focusInEvent(QFocusEvent *); +%If (Qt_3_1_1 -) + void focusOutEvent(QFocusEvent *); +%End +%If (Qt_3_1_0 -) + void wheelEvent(QWheelEvent *); +%End +%If (- Qt_3_0_0) + void popup(); +%End +%If (Qt_2_00 -) + void styleChange(QStyle &); + + void updateMask(); +%End + +private: + QComboBox(const QComboBox &); +}; diff --git a/sip/qt/qcommonstyle.sip b/sip/qt/qcommonstyle.sip new file mode 100644 index 0000000..b838716 --- /dev/null +++ b/sip/qt/qcommonstyle.sip @@ -0,0 +1,137 @@ +// This is the SIP interface definition for QCommonStyle. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QCommonStyle (Qt v2+) + + virtual void getButtonShift + int &x + int &y + + +This takes no parameters and returns a tuple of the x and +y values. (Qt v2) + + + + virtual void tabbarMetrics + const QTabBar *t + int &hframe + int &vframe + int &overlap + + +This takes only the t parameter and returns a tuple of the +hframe, vframe and +overlap values. (Qt v2) + + +%End + + +%If (Qt_2_00 -) + +class QCommonStyle : QStyle +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_0) + void drawComboButton(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,bool = 0,bool = 1,const QBrush * = 0); + QRect comboButtonRect(int,int,int,int); + QRect comboButtonFocusRect(int,int,int,int); + void drawComboButtonMask(QPainter *,int,int,int,int); + void drawPushButtonLabel(QPushButton *,QPainter *); + void getButtonShift(int &,int &); + int defaultFrameWidth() const; + void tabbarMetrics(const QTabBar *,int &,int &,int &); + void drawTab(QPainter *,const QTabBar *,QTab *,bool); + void drawTabMask(QPainter *,const QTabBar *,QTab *,bool); + ScrollControl scrollBarPointOver(const QScrollBar *,int,const QPoint &); + void drawSliderMask(QPainter *,int,int,int,int,Orientation,bool,bool); + void drawSliderGrooveMask(QPainter *,int,int,int,int,QCOORD,Orientation); + int maximumSliderDragDistance() const; + int popupSubmenuIndicatorWidth(const QFontMetrics &); +%End + +%If (Qt_3_0_0 -) + QCommonStyle(); + + void drawPrimitive(PrimitiveElement,QPainter *,const QRect &, + const QColorGroup &,SFlags = Style_Default, + const QStyleOption& = QStyleOption()) const; + + void drawControl(ControlElement,QPainter *,const QWidget *, + const QRect &,const QColorGroup &, + SFlags = Style_Default, + const QStyleOption & = QStyleOption()) const; + + void drawControlMask(ControlElement,QPainter *,const QWidget *, + const QRect &, + const QStyleOption & = QStyleOption()) const; + + QRect subRect(SubRect,const QWidget *) const; + + void drawComplexControl(ComplexControl,QPainter *,const QWidget *, + const QRect &,const QColorGroup &, + SFlags = Style_Default,SCFlags = SC_All, + SCFlags = SC_None, + const QStyleOption & = QStyleOption()) const; + + void drawComplexControlMask(ComplexControl,QPainter *,const QWidget *, + const QRect &, + const QStyleOption & = QStyleOption()) const; + + QRect querySubControlMetrics(ComplexControl,const QWidget *,SubControl, + const QStyleOption & = QStyleOption()) const; + + SubControl querySubControl(ComplexControl,const QWidget *, + const QPoint &, + const QStyleOption & = QStyleOption()) const; + + int pixelMetric(PixelMetric,const QWidget * = 0) const; + + QSize sizeFromContents(ContentsType,const QWidget *,const QSize &, + const QStyleOption & = QStyleOption()) const; + + int styleHint(StyleHint,const QWidget *,const QStyleOption &, + QStyleHintReturn *) const; + + QPixmap stylePixmap(StylePixmap,const QWidget * = 0, + const QStyleOption & = QStyleOption()) const; + +%End + +private: +%If (- Qt_3_0_0) + QCommonStyle(GUIStyle); + ~QCommonStyle(); +%End +%If (Qt_3_0_0 -) + QCommonStyle(const QCommonStyle &); +%End +}; + +%End diff --git a/sip/qt/qcstring.sip b/sip/qt/qcstring.sip new file mode 100644 index 0000000..64b3b2a --- /dev/null +++ b/sip/qt/qcstring.sip @@ -0,0 +1,223 @@ +// This is the SIP interface definition for QCString. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QCString (Qt v2+) + +A Python string can be used whenever a QCString can be used. +A QCString can be converted to a Python string using the +Python str() function. + + + + QCString &sprintf + const char *format + ... + + +Not implemented. + + + + short toShort + bool *ok = 0 + + +This returns a tuple of the short result and the +ok value. + + + + ushort toUShort + bool *ok = 0 + + +This returns a tuple of the ushort result and the +ok value. + + + + int toInt + bool *ok = 0 + + +This returns a tuple of the int result and the +ok value. + + + + uint toUInt + bool *ok = 0 + + +This returns a tuple of the uint result and the +ok value. + + + + long toLong + bool *ok = 0 + + +This returns a tuple of the long result and the +ok value. + + + + ulong toULong + bool *ok = 0 + + +This returns a tuple of the ulong result and the +ok value. + + + + float toFloat + bool *ok = 0 + + +This returns a tuple of the float result and the +ok value. + + + + double toDouble + bool *ok = 0 + + +This returns a tuple of the double result and the +ok value. + + +%End + + +%If (Qt_2_00 -) + +class QCString : QByteArray +{ +%TypeHeaderCode +#include +%End + +public: + QCString(); + QCString(int); + QCString(const QCString &); + QCString(const char *); + QCString(const char *,uint); + + bool isNull() const; + bool isEmpty() const; + uint length() const; + bool resize(uint); + bool truncate(uint); + bool fill(char,int = -1); + QCString copy() const; +// QCString &sprintf(const char *,...); +// int find(char,int = 0,bool = 1) const; + int find(const char *,int = 0,bool = 1) const; + int find(const QRegExp &,int = 0) const; +// int findRev(char,int = -1,bool = 1) const; + int findRev(const char *,int = -1,bool = 1) const; + int findRev(const QRegExp &,int = -1) const; +// int contains(char,bool = 1) const; + int contains(const char *,bool = 1) const; + int contains(const QRegExp &) const; + QCString left(uint) const; + QCString right(uint) const; + QCString mid(uint,uint = 0xffffffff) const; + QCString leftJustify(uint,char = ' ',bool = 0) const; + QCString rightJustify(uint,char = ' ',bool = 0) const; + QCString lower() const; + QCString upper() const; + QCString stripWhiteSpace() const; + QCString simplifyWhiteSpace() const; + QCString &insert(uint,const char *); +// QCString &insert(uint,char); + QCString &append(const char *); + QCString &prepend(const char *); + QCString &remove(uint,uint); + QCString &replace(uint,uint,const char *); + QCString &replace(const QRegExp &,const char *); +%If (Qt_3_1_0 -) +// QCString &replace(char,const char *); + QCString &replace(const char *,const char *); +// QCString &replace(char,char); +%End + + short toShort(bool * = 0) const; + ushort toUShort(bool * = 0) const; + int toInt(bool * = 0) const; + uint toUInt(bool * = 0) const; + long toLong(bool * = 0) const; + ulong toULong(bool * = 0) const; + float toFloat(bool * = 0) const; + double toDouble(bool * = 0) const; + + QCString &setStr(const char *); +// QCString &setNum(short); +// QCString &setNum(ushort); + QCString &setNum(int /Constrained/); +// QCString &setNum(uint); +// QCString &setNum(long); +// QCString &setNum(ulong); +// QCString &setNum(float,char = 'g',int = 6); + QCString &setNum(double,char = 'g',int = 6); + bool setExpand(uint,char); + + SIP_PYOBJECT __str__(); +%MethodCode + const char *s; + + Py_BEGIN_ALLOW_THREADS + s = *sipCpp; + Py_END_ALLOW_THREADS + + if (s == NULL) + s = ""; + + sipRes = PyString_FromString(s); +%End + +%ConvertToTypeCode + // Allow a Python string whenever a QCString is expected. + + if (sipIsErr == NULL) + return (PyString_Check(sipPy) || + sipCanConvertToInstance(sipPy,sipClass_QCString,SIP_NO_CONVERTORS)); + + if (PyString_Check(sipPy)) + { + *sipCppPtr = new QCString(PyString_AS_STRING(sipPy)); + + return sipGetState(sipTransferObj); + } + + *sipCppPtr = reinterpret_cast(sipConvertToInstance(sipPy,sipClass_QCString,sipTransferObj,SIP_NO_CONVERTORS,0,sipIsErr)); + + return 0; +%End +}; + +%End diff --git a/sip/qt/qcursor.sip b/sip/qt/qcursor.sip new file mode 100644 index 0000000..3631c30 --- /dev/null +++ b/sip/qt/qcursor.sip @@ -0,0 +1,144 @@ +// This is the SIP interface definition for QCursor. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QCursor + +QCursor is fully implemented. + + +%End + + +%ModuleHeaderCode +#include +%End + + +%If (- Qt_2_00) +// Global cursors. + +const QCursor arrowCursor; +const QCursor upArrowCursor; +const QCursor crossCursor; +const QCursor waitCursor; +const QCursor ibeamCursor; +const QCursor sizeVerCursor; +const QCursor sizeHorCursor; +const QCursor sizeBDiagCursor; +const QCursor sizeFDiagCursor; +const QCursor sizeAllCursor; +const QCursor blankCursor; +%End + + +%If (- Qt_3_0_0) +enum QCursorShape { + ArrowCursor, + UpArrowCursor, + CrossCursor, + WaitCursor, + IbeamCursor, + SizeVerCursor, + SizeHorCursor, + SizeBDiagCursor, + SizeFDiagCursor, + SizeAllCursor, + BlankCursor, + LastCursor = BlankCursor, + BitmapCursor = 24 +}; + + +class QCursor +{ +%TypeHeaderCode +#include +%End + +public: + QCursor(); + QCursor(int); + QCursor(const QBitmap &,const QBitmap &,int = -1,int = -1); +%If (Qt_2_00 -) + QCursor(const QPixmap &,int = -1,int = -1); +%End + QCursor(const QCursor &); + + int shape() const; + void setShape(int); + const QBitmap *bitmap() const; + const QBitmap *mask() const; + QPoint hotSpot() const; +%If (- Qt_2_00) + HANDLE handle() const; +%End +%If (Qt_2_00 -) +%If (WS_X11) + HANDLE handle() const; +%End +%End + static QPoint pos(); + static void setPos(int,int); + static void setPos(const QPoint &); + static void initialize(); + static void cleanup(); +}; +%End + +%If (Qt_3_0_0 -) +class QCursor : Qt +{ +%TypeHeaderCode +#include +%End + +public: + QCursor(); + QCursor(int); + QCursor(const QBitmap &,const QBitmap &,int = -1,int = -1); + QCursor(const QPixmap &,int = -1,int = -1); + QCursor(const QCursor &); + + int shape() const; + void setShape(int); + const QBitmap *bitmap() const; + const QBitmap *mask() const; + QPoint hotSpot() const; + +%If (WS_X11) + HANDLE handle() const; +%If (Qt_3_3_0 -) + // This would have the same Python signature as QCursor(int). + //QCursor(HANDLE); +%End +%End + static QPoint pos(); + static void setPos(int,int); + static void setPos(const QPoint &); + static void initialize(); + static void cleanup(); +%If (WS_X11) + static int x11Screen(); +%End +}; +%End diff --git a/sip/qt/qdatastream.sip b/sip/qt/qdatastream.sip new file mode 100644 index 0000000..1a27132 --- /dev/null +++ b/sip/qt/qdatastream.sip @@ -0,0 +1,224 @@ +// This is the SIP interface definition for QDataStream. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QDataStream + + QDataStream &readBytes + const char *&s + uint &l + + +This takes no parameters. The QDataStream result and the +data read are returned as a tuple. + + + + QDataStream &readRawBytes + const char *s + uint l + + +This takes only the l parameter. The +QDataStream result and the data read are returned as a +tuple. + + + + QDataStream &writeBytes + const char *s + uint len + + +len is derived from s and not passed as a +parameter. + + + + QDataStream &writeRawBytes + const char *s + uint len + + +len is derived from s and not passed as a +parameter. + + +%End + + +class QDataStream +{ +%TypeHeaderCode +#include +%End + +public: + QDataStream(); + QDataStream(QIODevice *); + QDataStream(QByteArray,int); + + QIODevice *device() const; + void setDevice(QIODevice *); + void unsetDevice(); +%If (Qt_2_00 -) + bool atEnd() const; +%End + bool eof() const; + + enum ByteOrder { + BigEndian, + LittleEndian + }; + + int byteOrder() const; + void setByteOrder(int); + bool isPrintableData() const; + void setPrintableData(bool); + int version() const; + void setVersion(int); + + SIP_PYTUPLE readBytes() /ReleaseGIL/; +%MethodCode + char *c; + uint l; + + Py_BEGIN_ALLOW_THREADS + sipCpp -> QDataStream::readBytes(c,l); + Py_END_ALLOW_THREADS + + sipRes = sipBuildResult(&sipIsErr,"(Sa)",sipSelf,c,l); + + if (c) + delete[] c; +%End + + SIP_PYTUPLE readRawBytes(uint) /ReleaseGIL/; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + Py_BEGIN_ALLOW_THREADS + sipCpp -> QDataStream::readRawBytes(buf,a0); + Py_END_ALLOW_THREADS + + sipRes = sipBuildResult(&sipIsErr,"(Sa)",sipSelf,buf,a0); + + sipFree((ANY *)buf); + } +%End + + QDataStream &writeBytes(const char * /Array/, + uint /ArraySize/) /ReleaseGIL/; + QDataStream &writeRawBytes(const char * /Array/, + uint /ArraySize/) /ReleaseGIL/; + +%If (Qt_3_0_0 -) + // These are taken from the corresponding class definitions. We limit + // them to Qt v3.0.0 and later just to avoid checking earlier versions. + + QDataStream &operator<<(const QBrush &); + QDataStream &operator>>(QBrush & /Constrained/); + + QDataStream &operator<<(const QColor &); + QDataStream &operator>>(QColor & /Constrained/); + + QDataStream &operator<<(const QByteArray &); + QDataStream &operator>>(QByteArray & /Constrained/); + + QDataStream &operator<<(const QCString &); + QDataStream &operator>>(QCString & /Constrained/); + + QDataStream &operator<<(const QCursor &); + QDataStream &operator>>(QCursor & /Constrained/); + + QDataStream &operator<<(const QDate &); + QDataStream &operator>>(QDate & /Constrained/); + + QDataStream &operator<<(const QTime &); + QDataStream &operator>>(QTime & /Constrained/); + + QDataStream &operator<<(const QDateTime &); + QDataStream &operator>>(QDateTime & /Constrained/); + + QDataStream &operator<<(const QFont &); + QDataStream &operator>>(QFont & /Constrained/); + + QDataStream &operator<<(const QImage &); + QDataStream &operator>>(QImage & /Constrained/); + + QDataStream &operator<<(const QKeySequence &); + QDataStream &operator>>(QKeySequence & /Constrained/); + + QDataStream &operator<<(const QColorGroup &); + QDataStream &operator>>(QColorGroup & /Constrained/); + + QDataStream &operator<<(const QPalette &); + QDataStream &operator>>(QPalette & /Constrained/); + + QDataStream &operator<<(const QPen &); + QDataStream &operator>>(QPen & /Constrained/); + + QDataStream &operator<<(const QPicture &); + QDataStream &operator>>(QPicture & /Constrained/); + + QDataStream &operator<<(const QPixmap &); + QDataStream &operator>>(QPixmap & /Constrained/); + + QDataStream &operator<<(const QPointArray &); + QDataStream &operator>>(QPointArray & /Constrained/); + + QDataStream &operator<<(const QPoint &); + QDataStream &operator>>(QPoint & /Constrained/); + + QDataStream &operator<<(const QRect &); + QDataStream &operator>>(QRect & /Constrained/); + + QDataStream &operator<<(const QRegion &); + QDataStream &operator>>(QRegion & /Constrained/); + + QDataStream &operator<<(const QSize &); + QDataStream &operator>>(QSize & /Constrained/); + + QDataStream &operator<<(const QString &); + QDataStream &operator>>(QString & /Constrained/); + + QDataStream &operator<<(const QStringList &); + QDataStream &operator>>(QStringList & /Constrained/); + + QDataStream &operator<<(const QVariant &); + QDataStream &operator>>(QVariant & /Constrained/); + + QDataStream &operator<<(const QWMatrix &); + QDataStream &operator>>(QWMatrix & /Constrained/); +%End +%If (Qt_3_1_0 -) + QDataStream &operator<<(const QUuid &); + QDataStream &operator>>(QUuid & /Constrained/); +%End + +private: + QDataStream(const QDataStream &); +}; diff --git a/sip/qt/qdatetime.sip b/sip/qt/qdatetime.sip new file mode 100644 index 0000000..cede021 --- /dev/null +++ b/sip/qt/qdatetime.sip @@ -0,0 +1,280 @@ +// This is the SIP interface definition for QDate, QDateTime and QTime. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QDate + +The Python +==, !=, +<, <=, +>, >= +and __nonzero__ +operators are supported. + + + + int weekNumber + int *yearNum = 0 + + +This takes no parameters and returns the week number and the year number as a +tuple. (Qt v3.1+) + + + +QDateTime + +QDateTime is fully implemented, including the Python +==, !=, +<, <=, +>, >= +and __nonzero__ +operators. + + + +QTime + +QTime is fully implemented, including the Python +==, !=, +<, <=, +>, >= +and __nonzero__ +operators. + + +%End + + +class QDate +{ +%TypeHeaderCode +#include +%End + +public: + QDate(); + QDate(int,int,int); + + bool isNull() const; + bool isValid() const; + + int year() const; + int month() const; + int day() const; + int dayOfWeek() const; + int dayOfYear() const; + int daysInMonth() const; + int daysInYear() const; + +%If (Qt_3_1_0 -) + int weekNumber(int * = 0) const; +%End + +%If (- Qt_2_00) + virtual const char *monthName(int) const; + virtual const char *dayName(int) const; +%End +%If (Qt_2_00 - Qt_3_0_0) + virtual QString monthName(int) const; + virtual QString dayName(int) const; +%End +%If (Qt_3_0_0 -) + static QString shortMonthName(int); + static QString shortDayName(int); + static QString longMonthName(int); + static QString longDayName(int); +%End + +%If (- Qt_3_0_0) + QString toString() const; +%End +%If (Qt_3_0_0 -) + QString toString(Qt::DateFormat = Qt::TextDate) const; + QString toString(const QString &) const; +%End + bool setYMD(int,int,int); + QDate addDays(int) const; +%If (Qt_3_0_0 -) + QDate addMonths(int) const; + QDate addYears(int) const; +%End + int daysTo(const QDate &) const; + + int __nonzero__() const; +%MethodCode + sipRes = !sipCpp -> isNull(); +%End + + bool operator==(const QDate &) const; + bool operator!=(const QDate &) const; + bool operator<(const QDate &) const; + bool operator<=(const QDate &) const; + bool operator>(const QDate &) const; + bool operator>=(const QDate &) const; + + static QDate currentDate(); +%If (Qt_3_1_0 -) + static QDate currentDate(Qt::TimeSpec); +%End +%If (Qt_3_0_0 -) + static QDate fromString(const QString &,Qt::DateFormat = Qt::TextDate); +%End + static bool isValid(int,int,int); + static bool leapYear(int); + +%If (Qt_3_0_0 -) + // These are defined in Qt3 but not documented. + //static uint gregorianToJulian(int,int,int); + //static void julianToGregorian(uint,int &,int &,int &); +%End +}; + + +class QTime +{ +%TypeHeaderCode +#include +%End + +public: + QTime(); + QTime(int,int,int = 0,int = 0); + + bool isNull() const; + bool isValid() const; + int hour() const; + int minute() const; + int second() const; + int msec() const; + +%If (- Qt_3_0_0) + QString toString() const; +%End +%If (Qt_3_0_0 -) + QString toString(Qt::DateFormat = Qt::TextDate) const; + QString toString(const QString &) const; +%End + + bool setHMS(int,int,int,int = 0); + + QTime addSecs(int) const; + int secsTo(const QTime &) const; + QTime addMSecs(int) const; + int msecsTo(const QTime &) const; + + int __nonzero__() const; +%MethodCode + sipRes = !sipCpp -> isNull(); +%End + + bool operator==(const QTime &) const; + bool operator!=(const QTime &) const; + bool operator<(const QTime &) const; + bool operator<=(const QTime &) const; + bool operator>(const QTime &) const; + bool operator>=(const QTime &) const; + + static QTime currentTime(); +%If (Qt_3_1_0 -) + static QTime currentTime(Qt::TimeSpec); +%End +%If (Qt_3_0_0 -) + static QTime fromString(const QString &,Qt::DateFormat = Qt::TextDate); +%End + static bool isValid(int,int,int,int = 0); + + void start(); + int restart(); +%If (- Qt_3_0_0) + int elapsed(); +%End +%If (Qt_3_0_0 -) + int elapsed() const; +%End +}; + + +class QDateTime +{ +%TypeHeaderCode +#include +%End + +public: + QDateTime(); + QDateTime(const QDate &); + QDateTime(const QDate &,const QTime &); + + bool isNull() const; + bool isValid() const; + + QDate date() const; + QTime time() const; +%If (Qt_3_1_0 -) + uint toTime_t() const; +%End + void setDate(const QDate &); + void setTime(const QTime &); + void setTime_t(uint); +%If (Qt_3_1_0 -) + void setTime_t(uint,Qt::TimeSpec); +%End + +%If (- Qt_3_0_0) + QString toString() const; +%End +%If (Qt_3_0_0 -) + QString toString(Qt::DateFormat = Qt::TextDate) const; + QString toString(const QString &) const; +%End + + QDateTime addDays(int) const; +%If (Qt_3_0_0 -) + QDateTime addMonths(int) const; + QDateTime addYears(int) const; +%End + QDateTime addSecs(int) const; + int daysTo(const QDateTime &) const; + int secsTo(const QDateTime &) const; + + int __nonzero__() const; +%MethodCode + sipRes = !sipCpp -> isNull(); +%End + + bool operator==(const QDateTime &) const; + bool operator!=(const QDateTime &) const; + bool operator<(const QDateTime &) const; + bool operator<=(const QDateTime &) const; + bool operator>(const QDateTime &) const; + bool operator>=(const QDateTime &) const; + + static QDateTime currentDateTime(); +%If (Qt_3_1_0 -) + static QDateTime currentDateTime(Qt::TimeSpec); +%End +%If (Qt_3_0_0 -) + static QDateTime fromString(const QString &, + Qt::DateFormat = Qt::TextDate); +%End +}; diff --git a/sip/qt/qdatetimeedit.sip b/sip/qt/qdatetimeedit.sip new file mode 100644 index 0000000..27ee830 --- /dev/null +++ b/sip/qt/qdatetimeedit.sip @@ -0,0 +1,256 @@ +// This is the SIP interface definition for QDateEdit, QDateTimeEdit and +// QTimeEdit. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QDateEdit (Qt v3+) + +QDateEdit is fully implemented. + + + +QTimeEdit (Qt v3+) + +QTimeEdit is fully implemented. + + + +QDateTimeEdit (Qt v3+) + +QDateTimeEdit is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +// QDateEdit actually inherits QDateTimeEditBase but that's an internal class +// and isn't exported under Windows in all versions. + +class QDateEdit : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QDateEdit(QWidget * /TransferThis/ = 0,const char * = 0); + QDateEdit(const QDate &,QWidget * /TransferThis/ = 0,const char * = 0); + + enum Order { + DMY, + MDY, + YMD, + YDM + }; + + QSize sizeHint() const; + QSize minimumSizeHint() const; +%If (- Qt_3_1_0) + virtual void setDate(const QDate &); +%End + QDate date() const; + virtual void setOrder(Order); + Order order() const; + virtual void setAutoAdvance(bool); + bool autoAdvance() const; + + virtual void setMinValue(const QDate &); + QDate minValue() const; + virtual void setMaxValue(const QDate &); + QDate maxValue() const; + virtual void setRange(const QDate &,const QDate &); + QString separator() const; + virtual void setSeparator(const QString &); + +%If (Qt_3_2_0 -) + void removeFirstNumber(int); +%End + +public slots: +%If (Qt_3_1_0 -) + virtual void setDate(const QDate &); +%End + +signals: + void valueChanged(const QDate &); + +protected: + bool event(QEvent *); + void timerEvent(QTimerEvent *); + void resizeEvent(QResizeEvent *); + void stepUp(); + void stepDown(); + QString sectionFormattedText(int); + void addNumber(int,int); + void removeLastNumber(int); + bool setFocusSection(int); + + virtual void setYear(int); + virtual void setMonth(int); + virtual void setDay(int); + virtual void fix(); + virtual bool outOfRange(int,int,int) const; + +protected slots: + void updateButtons(); + +private: +%If (Qt_3_1_0 -) + QDateEdit(const QDateEdit &); +%End +}; + + +// QDateEdit actually inherits QDateTimeEditBase but that's an internal class +// and isn't exported under Windows in all versions. + +class QTimeEdit : QWidget +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_1_0 -) + enum Display { + Hours, + Minutes, + Seconds, + AMPM + }; +%End + + QTimeEdit(QWidget * /TransferThis/ = 0,const char * = 0); + QTimeEdit(const QTime &,QWidget * /TransferThis/ = 0,const char * = 0); + + QSize sizeHint() const; + QSize minimumSizeHint() const; +%If (- Qt_3_1_0) + virtual void setTime(const QTime &); +%End + QTime time() const; + virtual void setAutoAdvance(bool); + bool autoAdvance() const; + + virtual void setMinValue(const QTime &); + QTime minValue() const; + virtual void setMaxValue(const QTime &); + QTime maxValue() const; + virtual void setRange(const QTime &,const QTime &); + QString separator() const; + virtual void setSeparator(const QString &); + +%If (Qt_3_1_0 -) + uint display() const; + void setDisplay(uint); +%End + +%If (Qt_3_2_0 -) + void removeFirstNumber(int); +%End + +public slots: +%If (Qt_3_1_0 -) + virtual void setTime(const QTime &); +%End + +signals: + void valueChanged(const QTime &); + +protected: + bool event(QEvent *); + void timerEvent(QTimerEvent *); + void resizeEvent(QResizeEvent *); + void stepUp(); + void stepDown(); + QString sectionFormattedText(int); + void addNumber(int,int); + void removeLastNumber(int); + bool setFocusSection(int); + + virtual bool outOfRange(int,int,int) const; + virtual void setHour(int); + virtual void setMinute(int); + virtual void setSecond(int); + +protected slots: + void updateButtons(); + +private: +%If (Qt_3_1_0 -) + QTimeEdit(const QTimeEdit &); +%End +}; + + +class QDateTimeEdit : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QDateTimeEdit(QWidget * /TransferThis/ = 0,const char * = 0); + QDateTimeEdit(const QDateTime &,QWidget * /TransferThis/ = 0, + const char * = 0); + + QSize sizeHint() const; + QSize minimumSizeHint() const; +%If (- Qt_3_1_0) + virtual void setDateTime(const QDateTime &); +%End + QDateTime dateTime() const; + + QDateEdit* dateEdit(); + QTimeEdit* timeEdit(); + + virtual void setAutoAdvance(bool); + bool autoAdvance() const; + +public slots: +%If (Qt_3_1_0 -) + virtual void setDateTime(const QDateTime &); +%End + +signals: + void valueChanged(const QDateTime &); + +protected: + void init(); + void resizeEvent(QResizeEvent *); +%If (- Qt_3_1_2) + void layoutEditors(); +%End + +protected slots: + void newValue(const QDate &); + void newValue(const QTime &); + +private: +%If (Qt_3_1_0 -) + QDateTimeEdit(const QDateTimeEdit &); +%End +}; + +%End diff --git a/sip/qt/qdesktopwidget.sip b/sip/qt/qdesktopwidget.sip new file mode 100644 index 0000000..a6030e6 --- /dev/null +++ b/sip/qt/qdesktopwidget.sip @@ -0,0 +1,84 @@ +// This is the SIP interface definition for QDesktopWidget. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QDesktopWidget (Qt v3+) + +QDesktopWidget is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QDesktopWidget : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QDesktopWidget(); + + bool isVirtualDesktop() const; + + int numScreens() const; + int primaryScreen() const; + + int screenNumber(QWidget * = 0) const; + int screenNumber(const QPoint &) const; + + QWidget *screen(int = -1); + + const QRect &screenGeometry(int = -1) const; +%If (Qt_3_1_0 -) + const QRect &screenGeometry(QWidget *) const; + const QRect &screenGeometry(const QPoint &) const; + + const QRect &availableGeometry(int = -1) const; + const QRect &availableGeometry(QWidget *) const; + const QRect &availableGeometry(const QPoint &) const; + + void insertChild(QObject *); +%End + +signals: +%If (Qt_3_2_0 -) + void resized(int); +%End +%If (Qt_3_3_0 -) + void workAreaResized(int); +%End + +protected: +%If (Qt_3_1_0 -) + void resizeEvent(QResizeEvent *); +%End + +private: +%If (Qt_3_1_0 -) + QDesktopWidget(const QDesktopWidget &); +%End +}; + +%End diff --git a/sip/qt/qdial.sip b/sip/qt/qdial.sip new file mode 100644 index 0000000..9587e8c --- /dev/null +++ b/sip/qt/qdial.sip @@ -0,0 +1,112 @@ +// This is the SIP interface definition for QDial. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QDial (Qt v2.2+) + +QDial is fully implemented. + + +%End + + +%If (Qt_2_2_0 -) +%If (Qt_DIAL) + +class QDial : QWidget, QRangeControl +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_0) + QDial(QWidget * /TransferThis/ = 0,const char * = 0); +%End +%If (Qt_3_0_0 -) + QDial(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); +%End + QDial(int,int,int,int,QWidget * /TransferThis/ = 0,const char * = 0); + + bool tracking() const; + + bool wrapping() const; + + int notchSize() const; + + virtual void setNotchTarget(double); + double notchTarget() const; + + bool notchesVisible() const; + + QSize sizeHint() const; + QSize minimumSizeHint() const; + + int minValue() const; + int maxValue() const; + void setMinValue(int); + void setMaxValue(int); + int lineStep() const; + int pageStep() const; + void setLineStep(int); + void setPageStep(int); + int value() const; + +public slots: + virtual void setValue(int); + void addLine(); + void subtractLine(); + void addPage(); + void subtractPage(); + virtual void setNotchesVisible(bool); + virtual void setWrapping(bool); + virtual void setTracking(bool); + +signals: + void valueChanged(int); + void dialPressed(); + void dialMoved(int); + void dialReleased(); + +protected: + void resizeEvent(QResizeEvent *); + void paintEvent(QPaintEvent *); + + void keyPressEvent(QKeyEvent *); + void mousePressEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); + void wheelEvent(QWheelEvent *); + void focusInEvent(QFocusEvent *); + void focusOutEvent(QFocusEvent *); + + void valueChange(); + void rangeChange(); + + virtual void repaintScreen(const QRect * = 0); + +private: + QDial(const QDial &); +}; + +%End +%End diff --git a/sip/qt/qdialog.sip b/sip/qt/qdialog.sip new file mode 100644 index 0000000..c283520 --- /dev/null +++ b/sip/qt/qdialog.sip @@ -0,0 +1,158 @@ +// This is the SIP interface definition for QDialog. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QDialog + + int exec + + + +This has been renamed to exec_loop in Python. + + +This method also causes ownership of the underlying C++ dialog to be transfered +to Python. This means that the C++ dialog will be deleted when the Python +wrapper is garbage collected. Although this is a little inconsistent, it +ensures that the dialog is deleted without having to explicity code it using +QObject.deleteLater() or other techniques. + + +%End + + +class QDialog : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QDialog(QWidget * /TransferThis/ = 0,const char * = 0,bool = 0,WFlags = 0); + + enum DialogCode { + Rejected, + Accepted + }; + +%If (- Qt_3_0_0) + int exec() /PyName=exec_loop, ReleaseGIL, + PreHook=__pyQtPreEventLoopHook__, + PostHook=__pyQtPostEventLoopHook__/; +%MethodCode + // Transfer ownership back to Python (a modal dialog will + // probably have the main window as it's parent). This means + // the Qt dialog will be deleted when the Python wrapper is + // garbage collected. Although this is a little inconsistent, + // it saves having to code it explicitly to avoid the memory + // leak. + sipTransferBack(sipSelf); + + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp->QDialog::exec(); + Py_END_ALLOW_THREADS +%End +%End + + int result() const; + + void show(); +%If (Qt_2_00 -) + void hide(); +%End + void move(int,int); + void move(const QPoint &); + void resize(int,int); + void resize(const QSize &); + void setGeometry(int,int,int,int); + void setGeometry(const QRect &); + +%If (Qt_2_2_0 -) + void setOrientation(Orientation); + Orientation orientation() const; + + void setExtension(QWidget *); + QWidget *extension() const; + + QSize sizeHint() const; + QSize minimumSizeHint() const; + + void setSizeGripEnabled(bool); + bool isSizeGripEnabled() const; +%End + +%If (Qt_3_2_0 -) + void setModal(bool); + bool isModal() const; +%End + +public slots: +%If (Qt_3_0_0 -) + int exec() /PyName=exec_loop, ReleaseGIL, + PreHook=__pyQtPreEventLoopHook__, + PostHook=__pyQtPostEventLoopHook__/; +%MethodCode + // Transfer ownership back to Python (a modal dialog will + // probably have the main window as it's parent). This means + // the Qt dialog will be deleted when the Python wrapper is + // garbage collected. Although this is a little inconsistent, + // it saves having to code it explicitly to avoid the memory + // leak. + sipTransferBack(sipSelf); + + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp->QDialog::exec(); + Py_END_ALLOW_THREADS +%End +%End + +protected slots: + virtual void done(int); +%If (- Qt_2_00) + void accept(); + void reject(); +%End +%If (Qt_2_00 -) + virtual void accept(); + virtual void reject(); +%End + +%If (Qt_2_2_0 -) + void showExtension(bool); +%End + +protected: + void setResult(int); + void keyPressEvent(QKeyEvent *); + void closeEvent(QCloseEvent *); +%If (Qt_2_2_0 -) + void resizeEvent(QResizeEvent *); +%End +%If (Qt_3_0_0 -) + void contextMenuEvent(QContextMenuEvent *); + bool eventFilter(QObject *,QEvent *); + void adjustPosition(QWidget *); +%End + +private: + QDialog(const QDialog &); +}; diff --git a/sip/qt/qdir.sip b/sip/qt/qdir.sip new file mode 100644 index 0000000..93a1f3c --- /dev/null +++ b/sip/qt/qdir.sip @@ -0,0 +1,383 @@ +// This is the SIP interface definition for QDir and QFileInfoList. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QDir + +QDir is fully implemented, including the Python +len, [] (for reading slices and +individual elements), ==, != and +in operators + + + +QFileInfoList + +This class isn't implemented. Whenever a QFileInfoList is +the return type of a function or the type of an argument, a Python list of +QFileInfo instances is used instead. + + +%End + + +%MappedType QFileInfoList +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *pl; + QFileInfo *obj; + + // Convert the list. + + if ((pl = PyList_New(0)) == NULL) + return NULL; + + for (QFileInfoListIterator it(*sipCpp); (obj = it.current()) != NULL; ++it) + { + PyObject *inst; + + if ((inst = sipConvertFromInstance(obj,sipClass_QFileInfo,sipTransferObj)) == NULL || PyList_Append(pl,inst) < 0) + { + Py_XDECREF(inst); + Py_DECREF(pl); + + return NULL; + } + + Py_DECREF(inst); + } + + return pl; +%End + +%ConvertToTypeCode + // Convert a Python list of QFileInfo instances to a QFileInfoList on + // the heap. + + if (sipIsErr == NULL) + { + if (!PyList_Check(sipPy)) + return 0; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + if (!sipCanConvertToInstance(PyList_GET_ITEM(sipPy,i),sipClass_QFileInfo,0)) + return 0; + + return 1; + } + + QFileInfoList *qfil = new QFileInfoList; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + { + QFileInfo *qfi; + + // We apply the transfer to the list itself, not the elements. + // Note that any temporary element will never be destroyed. + // There is nothing that can be done about this. + qfi = reinterpret_cast(sipConvertToInstance(PyList_GET_ITEM(sipPy,i),sipClass_QFileInfo,0,0,0,sipIsErr)); + + if (*sipIsErr) + { + delete qfil; + return 0; + } + + qfil -> append(qfi); + } + + *sipCppPtr = qfil; + + return sipGetState(sipTransferObj); +%End +}; + + +class QDir +{ +%TypeHeaderCode +#include +%End + +public: + enum FilterSpec { + Dirs, + Files, + Drives, + NoSymLinks, + All, + TypeMask, + + Readable, + Writable, + Executable, + RWEMask, + + Modified, + Hidden, + System, + AccessMask, + + DefaultFilter + }; + + enum SortSpec { + Name, + Time, + Size, + Unsorted, + SortByMask, + + DirsFirst, + Reversed, + IgnoreCase, + DefaultSort + }; + + QDir(); +%If (- Qt_2_00) + QDir(const char *,const char * = 0,int = Name | IgnoreCase,int = All); +%End +%If (Qt_2_00 -) + QDir(const QString &,const QString & = QString::null, + int = Name | IgnoreCase,int = All); +%End + QDir(const QDir &); + +%If (- Qt_2_00) + void setPath(const char *); + const char *path() const; + QString absPath() const; + QString canonicalPath() const; + + QString dirName() const; + QString filePath(const char *,bool = 1) const; + QString absFilePath(const char *,bool = 1) const; + + static QString convertSeparators(const char *); + + bool cd(const char *,bool = 1); + bool cdUp(); + + const char *nameFilter() const; + void setNameFilter(const char *); +%End +%If (Qt_2_00 -) + virtual void setPath(const QString &); + virtual QString path() const; + virtual QString absPath() const; + virtual QString canonicalPath() const; + + virtual QString dirName() const; + virtual QString filePath(const QString &,bool = 1) const; + virtual QString absFilePath(const QString &,bool = 1) const; + + static QString convertSeparators(const QString &); + + virtual bool cd(const QString &,bool = 1); + virtual bool cdUp(); + + QString nameFilter() const; + virtual void setNameFilter(const QString &); +%End + FilterSpec filter() const; +%If (- Qt_2_00) + void setFilter(int); +%End +%If (Qt_2_00 -) + virtual void setFilter(int); +%End + SortSpec sorting() const; +%If (- Qt_2_00) + void setSorting(int); +%End +%If (Qt_2_00 -) + virtual void setSorting(int); +%End + + bool matchAllDirs() const; +%If (- Qt_2_00) + void setMatchAllDirs(bool); +%End +%If (Qt_2_00 -) + virtual void setMatchAllDirs(bool); +%End + + uint count() const; + + int __len__() const; +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp -> count(); + Py_END_ALLOW_THREADS +%End + + QString operator[](int) const; +%MethodCode + int len; + + Py_BEGIN_ALLOW_THREADS + len = sipCpp -> count(); + Py_END_ALLOW_THREADS + + if ((a0 = (int)sipConvertFromSequenceIndex(a0,len)) < 0) + sipIsErr = 1; + else + { + Py_BEGIN_ALLOW_THREADS + sipRes = new QString((*sipCpp)[a0]); + Py_END_ALLOW_THREADS + } +%End + + QStringList operator[](SIP_PYSLICE) const; +%MethodCode +#if PY_VERSION_HEX >= 0x02050000 + Py_ssize_t len, start, stop, step, slicelength, i; +#else + int len, start, stop, step, slicelength, i; +#endif + + Py_BEGIN_ALLOW_THREADS + len = sipCpp -> count(); + Py_END_ALLOW_THREADS + + if (sipConvertFromSliceObject(a0,len,&start,&stop,&step,&slicelength) < 0) + sipIsErr = 1; + else + { + Py_BEGIN_ALLOW_THREADS + sipRes = new QStringList(); + + for (i = 0; i < slicelength; ++i) + { + (*sipRes) += (*sipCpp)[start]; + start += step; + } + Py_END_ALLOW_THREADS + } +%End + + int __contains__(const QString &) const; +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipRes = (sipCpp -> entryList().findIndex(*a0) >= 0); + Py_END_ALLOW_THREADS +%End + +%If (- Qt_2_00) + const QStrList *entryList(int = DefaultFilter,int = DefaultSort) const; + const QStrList *entryList(const char *,int = DefaultFilter, + int = DefaultSort) const; + const QFileInfoList *entryInfoList(int = DefaultFilter, + int = DefaultSort) const; + const QFileInfoList *entryInfoList(const char *,int = DefaultFilter, + int = DefaultSort) const; +%End +%If (Qt_2_00 -) + virtual QStrList encodedEntryList(int = DefaultFilter, + int = DefaultSort) const; + virtual QStrList encodedEntryList(const QString &,int = DefaultFilter, + int = DefaultSort) const; + virtual QStringList entryList(int = DefaultFilter, + int = DefaultSort) const; + virtual QStringList entryList(const QString &,int = DefaultFilter, + int = DefaultSort) const; + virtual const QFileInfoList *entryInfoList(int = DefaultFilter, + int = DefaultSort) const; + virtual const QFileInfoList *entryInfoList(const QString &, + int = DefaultFilter, + int = DefaultSort) const; +%End + + static const QFileInfoList *drives(); + +%If (- Qt_2_00) + bool mkdir(const char *,bool = 1) const; + bool rmdir(const char *,bool = 1) const; + + bool isReadable() const; + bool exists() const; + bool isRoot() const; + + bool isRelative() const; + void convertToAbs(); + + bool operator==(const QDir &) const; + bool operator!=(const QDir &) const; + + bool remove(const char *,bool = 1); + bool rename(const char *,const char *,bool = 1); + bool exists(const char *,bool = 1); +%End +%If (Qt_2_00 -) + virtual bool mkdir(const QString &,bool = 1) const; + virtual bool rmdir(const QString &,bool = 1) const; + + virtual bool isReadable() const; + virtual bool exists() const; + virtual bool isRoot() const; + + virtual bool isRelative() const; + virtual void convertToAbs(); + + virtual bool remove(const QString &,bool = 1); + virtual bool rename(const QString &,const QString &,bool = 1); + virtual bool exists(const QString &,bool = 1); +%End + + static char separator(); + +%If (- Qt_2_00) + static bool setCurrent(const char *); +%End +%If (Qt_2_00 -) + static bool setCurrent(const QString &); +%End + static QDir current(); + static QDir home(); + static QDir root(); + static QString currentDirPath(); + static QString homeDirPath(); + static QString rootDirPath(); + +%If (- Qt_2_00) + static bool match(const char *,const char *); + static QString cleanDirPath(const char *); + static bool isRelativePath(const char *); +%End +%If (Qt_2_1_0 -) + static bool match(const QStringList &,const QString &); +%End +%If (Qt_2_00 -) + static bool match(const QString &,const QString &); + static QString cleanDirPath(const QString &); + static bool isRelativePath(const QString &); +%End +%If (Qt_3_1_0 -) + void refresh() const; +%End +}; diff --git a/sip/qt/qdockarea.sip b/sip/qt/qdockarea.sip new file mode 100644 index 0000000..87c0126 --- /dev/null +++ b/sip/qt/qdockarea.sip @@ -0,0 +1,88 @@ +// This is the SIP interface definition for QDockArea. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QDockArea (Qt v3+) + + bool hasDockWindow const + QDockWindow *w + int *index = 0 + + +This takes the w parameter and returns the index of the +QDockWIndow or -1 if the QDockArea does not contain the QDockWindow. + + +%End + + +%If (Qt_3_0_0 -) + +class QDockArea : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + enum HandlePosition { + Normal, + Reverse + }; + + QDockArea(Orientation,HandlePosition = Normal, + QWidget * /TransferThis/ = 0,const char * = 0); + + void moveDockWindow(QDockWindow *,const QPoint &,const QRect &,bool); + void removeDockWindow(QDockWindow *,bool,bool,bool = 1); + void moveDockWindow(QDockWindow *,int = -1); + + int hasDockWindow(QDockWindow *); +%MethodCode + // The Python interface returns the index. + + Py_BEGIN_ALLOW_THREADS + sipCpp -> QDockArea::hasDockWindow(a0,&sipRes); + Py_END_ALLOW_THREADS +%End + + void invalidNextOffset(QDockWindow *); + + Orientation orientation() const; + HandlePosition handlePosition() const; + + bool eventFilter(QObject *,QEvent *); + bool isEmpty() const; + int count() const; + QPtrList dockWindowList() const; + + bool isDockWindowAccepted(QDockWindow *); + void setAcceptDockWindow(QDockWindow *,bool); + +public slots: + void lineUp(bool); + +private: + QDockArea(const QDockArea &); +}; + +%End diff --git a/sip/qt/qdockwindow.sip b/sip/qt/qdockwindow.sip new file mode 100644 index 0000000..5a2bef6 --- /dev/null +++ b/sip/qt/qdockwindow.sip @@ -0,0 +1,135 @@ +// This is the SIP interface definition for QDockWindow. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QDockWindow (Qt v3+) + +QDockWindow is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QDockWindow : QFrame +{ +%TypeHeaderCode +#include +%End + +public: + enum Place { + InDock, + OutsideDock + }; + + enum CloseMode { + Never, + Docked, + Undocked, + Always + }; + + QDockWindow(Place = InDock,QWidget * /TransferThis/ = 0, + const char * = 0,WFlags = 0); +%If (Qt_3_1_0 -) + QDockWindow(QWidget * /TransferThis/,const char * = 0,WFlags = 0); +%End + + virtual void setWidget(QWidget *); + QWidget *widget() const; + + Place place() const; + + QDockArea *area() const; + + virtual void setCloseMode(int); + bool isCloseEnabled() const; + int closeMode() const; + + virtual void setResizeEnabled(bool); + virtual void setMovingEnabled(bool); + bool isResizeEnabled() const; + bool isMovingEnabled() const; + + virtual void setHorizontallyStretchable(bool); + virtual void setVerticallyStretchable(bool); + bool isHorizontallyStretchable() const; + bool isVerticallyStretchable() const; + bool isStretchable() const; + + virtual void setOffset(int); + int offset() const; + + virtual void setFixedExtentWidth(int); + virtual void setFixedExtentHeight(int); + QSize fixedExtent() const; + + virtual void setNewLine(bool); + bool newLine() const; + + Qt::Orientation orientation() const; + + QSize sizeHint() const; + QSize minimumSize() const; + QSize minimumSizeHint() const; + + QBoxLayout *boxLayout(); + + virtual void setOpaqueMoving(bool); + bool opaqueMoving() const; + + bool eventFilter(QObject *,QEvent *); + +signals: + void orientationChanged(Orientation); + void placeChanged(QDockWindow::Place); + void visibilityChanged(bool); + +public slots: + virtual void undock(QWidget *); + virtual void undock(); + virtual void dock(); + virtual void setOrientation(Orientation); + void setCaption(const QString &); + +protected: + void resizeEvent(QResizeEvent *); + void showEvent(QShowEvent *); + void hideEvent(QHideEvent *); + void contextMenuEvent(QContextMenuEvent *); + +%If (Qt_3_0_1 -) + void drawFrame(QPainter *); +%End +%If (Qt_3_1_0 -) + void drawContents(QPainter *); +%End + + bool event(QEvent *); + +private: + QDockWindow(const QDockWindow &); +}; + +%End diff --git a/sip/qt/qdragobject.sip b/sip/qt/qdragobject.sip new file mode 100644 index 0000000..5465219 --- /dev/null +++ b/sip/qt/qdragobject.sip @@ -0,0 +1,374 @@ +// This is the SIP interface definition for QDragObject, QImageDrag, +// QStoredDrag, QTextDrag, QUriDrag, QUrlDrag, QColorDrag. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QColorDrag (Qt v2.1+) + +QColorDrag is fully implemented. + + + +QDragObject + +QDragObject is fully implemented. + + + +QImageDrag + +QImageDrag is fully implemented. + + + +QStoredDrag + +QStoredDrag is fully implemented. + + + +QTextDrag + +QTextDrag is fully implemented. + + + +QUriDrag (Qt v2+) + +QUriDrag is fully implemented. + + + +QUrlDrag (Qt v1.x) + +QUrlDrag is fully implemented. + + +%End + + +%If (- Qt_2_00) + +class QDragObject : QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum DragMode { + DragDefault, + DragCopy, + DragMove, + DragCopyOrMove + }; + + QDragObject(QWidget * /TransferThis/ = 0,const char * = 0); + + bool drag(); + bool dragMove(); + void dragCopy(); + virtual bool provides(const char *) const; + virtual const char *format(int) const = 0; + virtual QByteArray encodedData(const char *) const = 0; + void setPixmap(QPixmap); + void setPixmap(QPixmap,QPoint); + QPixmap pixmap() const; + QPoint pixmapHotSpot() const; + QWidget *source(); + +protected: + virtual bool drag(DragMode); +}; + +%End + +%If (Qt_2_00 -) + +class QDragObject : QObject, QMimeSource +{ +%TypeHeaderCode +#include +%End + +public: + QDragObject(QWidget * /TransferThis/ = 0,const char * = 0); + +%If (Qt_DRAGANDDROP) + bool drag(); + bool dragMove(); + void dragCopy(); +%If (Qt_3_0_0 -) + void dragLink(); +%End + + virtual void setPixmap(QPixmap); +%If (- Qt_3_0_0) + virtual void setPixmap(QPixmap,QPoint); +%End +%If (Qt_3_0_0 -) + virtual void setPixmap(QPixmap,const QPoint &); +%End + QPixmap pixmap() const; + QPoint pixmapHotSpot() const; +%End + + QWidget *source(); + static QWidget *target(); + + static void setTarget(QWidget *); + +%If (Qt_DRAGANDDROP) +%If (- Qt_3_0_0) + enum DragMode { + DragDefault, + DragCopy, + DragMove, + DragCopyOrMove + }; +%End +%If (Qt_3_0_0 -) + enum DragMode { + DragDefault, + DragCopy, + DragMove, + DragLink, + DragCopyOrMove + }; +%End +%End + +protected: +%If (Qt_DRAGANDDROP) + virtual bool drag(DragMode); +%End + +private: +%If (Qt_3_1_0 -) + QDragObject(const QDragObject &); +%End +}; + +%End + + +class QStoredDrag : QDragObject +{ +%TypeHeaderCode +#include +%End + +public: + QStoredDrag(const char *,QWidget * /TransferThis/ = 0,const char * = 0); + +%If (- Qt_2_00) + void setEncodedData(const QByteArray&); +%End +%If (Qt_2_00 -) + virtual void setEncodedData(const QByteArray&); +%End + + const char *format(int) const; + virtual QByteArray encodedData(const char *) const; + +private: +%If (Qt_3_1_0 -) + QStoredDrag(const QStoredDrag &); +%End +}; + + +%If (- Qt_2_00) + +class QTextDrag : QStoredDrag +{ +%TypeHeaderCode +#include +%End + +public: + QTextDrag(const char *,QWidget * /TransferThis/ = 0,const char * = 0); + QTextDrag(QWidget * /TransferThis/ = 0,const char * = 0); + + void setText(const char *); + static bool canDecode(QDragMoveEvent *); + static bool decode(QDropEvent *,QString &); +}; + +%End + +%If (Qt_2_00 -) + +class QTextDrag : QDragObject +{ +%TypeHeaderCode +#include +%End + +public: + QTextDrag(const QString &,QWidget * /TransferThis/ = 0, + const char * = 0); + QTextDrag(QWidget * /TransferThis/ = 0,const char * = 0); + + virtual void setText(const QString &); + virtual void setSubtype(const QCString &); + + const char *format(int) const; + virtual QByteArray encodedData(const char *) const; + + static bool canDecode(const QMimeSource *); + static bool decode(const QMimeSource *,QString &); + static bool decode(const QMimeSource *,QString &,QCString &); + +private: +%If (Qt_3_1_0 -) + QTextDrag(const QTextDrag &); +%End +}; + +%End + + +class QImageDrag : QDragObject +{ +%TypeHeaderCode +#include +%End + +public: + QImageDrag(QImage,QWidget * /TransferThis/ = 0,const char * = 0); + QImageDrag(QWidget * /TransferThis/ = 0,const char * = 0); + +%If (- Qt_2_00) + void setImage(QImage); +%End +%If (Qt_2_00 -) + virtual void setImage(QImage); +%End + + const char *format(int) const; + virtual QByteArray encodedData(const char *) const; + +%If (- Qt_2_00) + static bool canDecode(QDragMoveEvent *); + static bool decode(QDropEvent *,QImage &); + static bool decode(QDropEvent *,QPixmap &); +%End +%If (Qt_2_00 -) + static bool canDecode(const QMimeSource *); + static bool decode(const QMimeSource *,QImage &); + static bool decode(const QMimeSource *,QPixmap &); +%End + +private: +%If (Qt_3_1_0 -) + QImageDrag(const QImageDrag &); +%End +}; + + +%If (- Qt_2_00) + +class QUrlDrag : QStoredDrag +{ +%TypeHeaderCode +#include +%End + +public: + QUrlDrag(QStrList,QWidget * /TransferThis/ = 0,const char * = 0); + QUrlDrag(QWidget * /TransferThis/ = 0,const char * = 0); + + void setUrls(QStrList); + static QString urlToLocalFile(const char *); + static bool canDecode(QDragMoveEvent *); + static bool decode(QDropEvent *,QStrList &); + static bool decodeLocalFiles(QDropEvent *,QStrList &); +}; + +%End + +%If (Qt_2_00 -) + +class QUriDrag : QStoredDrag +{ +%TypeHeaderCode +#include +%End + +public: + QUriDrag(QStrList,QWidget * /TransferThis/ = 0,const char * = 0); + QUriDrag(QWidget * /TransferThis/ = 0,const char * = 0); + +%If (- Qt_3_0_0) + void setFilenames(QStringList); + void setUnicodeUris(QStringList); +%End +%If (Qt_3_0_0 -) + void setFileNames(const QStringList &); + void setUnicodeUris(const QStringList &); +%End + virtual void setUris(QStrList); + + static QString uriToLocalFile(const char *); + static QCString localFileToUri(const QString &); + static QString uriToUnicodeUri(const char *); + static QCString unicodeUriToUri(const QString &); + static bool canDecode(const QMimeSource *); + static bool decode(const QMimeSource *,QStrList &); + static bool decodeToUnicodeUris(const QMimeSource *,QStringList &); + static bool decodeLocalFiles(const QMimeSource *,QStringList &); + +private: +%If (Qt_3_1_0 -) + QUriDrag(const QUriDrag &); +%End +}; + +%End + + +%If (Qt_2_1_0 -) + +class QColorDrag : QStoredDrag +{ +%TypeHeaderCode +#include +%End + +public: + QColorDrag(const QColor &,QWidget * /TransferThis/ = 0, + const char * = 0); + QColorDrag(QWidget * /TransferThis/ = 0,const char * = 0); + + void setColor(const QColor &); + + static bool canDecode(QMimeSource *); + static bool decode(QMimeSource *,QColor &); + +private: +%If (Qt_3_1_0 -) + QColorDrag(const QColorDrag &); +%End +}; + +%End diff --git a/sip/qt/qdrawutil.sip b/sip/qt/qdrawutil.sip new file mode 100644 index 0000000..413ca4a --- /dev/null +++ b/sip/qt/qdrawutil.sip @@ -0,0 +1,74 @@ +// This is the SIP interface definition for the Qt drawing utilities. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ModuleHeaderCode +#include +%End + + +void qDrawShadeLine(QPainter *,int,int,int,int,const QColorGroup &,bool = 1, + int = 1,int = 0); +void qDrawShadeLine(QPainter *,const QPoint &,const QPoint &, + const QColorGroup &,bool = 1,int = 1,int = 0); + +void qDrawShadeRect(QPainter *,int,int,int,int,const QColorGroup &,bool = 0, + int = 1,int = 0,const QBrush * = 0); +void qDrawShadeRect(QPainter *,const QRect &,const QColorGroup &,bool = 0, + int = 1,int = 0,const QBrush * = 0); + +void qDrawShadePanel(QPainter *,int,int,int,int,const QColorGroup &,bool = 0, + int = 1,const QBrush * = 0); +void qDrawShadePanel(QPainter *,const QRect &,const QColorGroup &,bool = 0, + int = 1,const QBrush * = 0); + +void qDrawWinButton(QPainter *,int,int,int,int,const QColorGroup &,bool = 0, + const QBrush * = 0); +void qDrawWinButton(QPainter *,const QRect &,const QColorGroup &,bool = 0, + const QBrush * = 0); + +void qDrawWinPanel(QPainter *,int,int,int,int,const QColorGroup &,bool = 0, + const QBrush * = 0); +void qDrawWinPanel(QPainter *,const QRect &,const QColorGroup &,bool = 0, + const QBrush * = 0); + +void qDrawPlainRect(QPainter *,int,int,int,int,const QColor &,int = 1, + const QBrush * = 0); +void qDrawPlainRect(QPainter *,const QRect &,const QColor &,int = 1, + const QBrush * = 0); + +%If (- Qt_2_00) +QRect qItemRect(QPainter *,GUIStyle,int,int,int,int,int,bool,const QPixmap *, + const char *,int = -1); + +void qDrawItem(QPainter *,GUIStyle,int,int,int,int,int,const QColorGroup &,bool, + const QPixmap *,const char *,int = -1); + +enum ArrowType { + UpArrow, + DownArrow, + LeftArrow, + RightArrow +}; + +void qDrawArrow(QPainter *,ArrowType,GUIStyle,bool,int,int,int,int, + const QColorGroup &,bool); +%End diff --git a/sip/qt/qdropsite.sip b/sip/qt/qdropsite.sip new file mode 100644 index 0000000..a2c11de --- /dev/null +++ b/sip/qt/qdropsite.sip @@ -0,0 +1,51 @@ +// This is the SIP interface definition for QDropSite. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QDropSite + +QDropSite is fully implemented. + + +%End + + +%If (Qt_DRAGANDDROP) + +class QDropSite +{ +%TypeHeaderCode +#include +%End + +public: + QDropSite(QWidget *); + +%If (- Qt_2_00) + virtual void dragEnterEvent(QDragEnterEvent *); + virtual void dragMoveEvent(QDragMoveEvent *); + virtual void dragLeaveEvent(QDragLeaveEvent *); + virtual void dropEvent(QDropEvent *); +%End +}; + +%End diff --git a/sip/qt/qerrormessage.sip b/sip/qt/qerrormessage.sip new file mode 100644 index 0000000..1f31264 --- /dev/null +++ b/sip/qt/qerrormessage.sip @@ -0,0 +1,57 @@ +// This is the SIP interface definition for QErrorMessage. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QErrorMessage (Qt v3+) + +QErrorMessage is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QErrorMessage : QDialog +{ +%TypeHeaderCode +#include +%End + +public: + QErrorMessage(QWidget * /TransferThis/,const char * = 0); + + static QErrorMessage *qtHandler(); + +public slots: + void message(const QString &); + +protected: + void done(int); + +private: +%If (Qt_3_1_0 -) + QErrorMessage(const QErrorMessage &); +%End +}; + +%End diff --git a/sip/qt/qevent.sip b/sip/qt/qevent.sip new file mode 100644 index 0000000..d4db705 --- /dev/null +++ b/sip/qt/qevent.sip @@ -0,0 +1,1235 @@ +// This is the SIP interface definition for QEvent, QChildEvent, QCloseEvent, +// QIconDragEvent, QContextMenuEvent, QCustomEvent, QDragEnterEvent, +// QDragLeaveEvent, QDragMoveEvent, QDropEvent, QFocusEvent, QHideEvent, +// QIMEvent, QIMComposeEvent, QKeyEvent, QMouseEvent, QMoveEvent, QPaintEvent, +// QResizeEvent, QShowEvent, QTabletEvent, QTimerEvent, QWheelEvent. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QEvent + +QEvent is fully implemented. + + +Instances of QEvents are automatically converted to the +correct sub-class. + + + +QChildEvent + +QChildEvent is fully implemented. + + + +QCloseEvent + +QCloseEvent is fully implemented. + + + +QIconDragEvent (Qt v3.3+) + +QIconDragEvent is fully implemented. + + + +QContextMenuEvent (Qt v3+) + +QContextMenuEvent is fully implemented. + + + +QCustomEvent + +QCustomEvent is fully implemented. Any Python object can be +passed as the event data and its reference count is increased. + + + +QDragEnterEvent + +QDragEnterEvent is fully implemented. + + + +QDragLeaveEvent + +QDragLeaveEvent is fully implemented. + + + +QDragMoveEvent + +QDragMoveEvent is fully implemented. + + + +QDropEvent + +QDropEvent is fully implemented. + + + +QFocusEvent + +QFocusEvent is fully implemented. + + + +QHideEvent + +QHideEvent is fully implemented. + + + +QIMComposeEvent (Qt v3.1+) + +QIMComposeEvent is fully implemented. + + + +QIMEvent (Qt v3+) + +QIMEvent is fully implemented. + + + +QKeyEvent + +QKeyEvent is fully implemented. + + + +QMouseEvent + +QMouseEvent is fully implemented. + + + +QMoveEvent + +QMoveEvent is fully implemented. + + + +QPaintEvent + +QPaintEvent is fully implemented. + + + +QResizeEvent + +QResizeEvent is fully implemented. + + + +QShowEvent + +QShowEvent is fully implemented. + + + +QTabletEvent (Qt v3+) + +QTabletEvent is fully implemented. + + + +QTimerEvent + +QTimerEvent is fully implemented. + + + +QWheelEvent (Qt v2+) + +QWheelEvent is fully implemented. + + +%End + + +%ModuleHeaderCode +#include +%End + + +%If (- Qt_2_00) + +const int Event_None; +const int Event_Timer; +const int Event_MouseButtonPress; +const int Event_MouseButtonRelease; +const int Event_MouseButtonDblClick; +const int Event_MouseMove; +const int Event_KeyPress; +const int Event_KeyRelease; +const int Event_FocusIn; +const int Event_FocusOut; +const int Event_Enter; +const int Event_Leave; +const int Event_Paint; +const int Event_Move; +const int Event_Resize; +const int Event_Create; +const int Event_Destroy; +const int Event_Show; +const int Event_Hide; +const int Event_Close; +const int Event_Quit; +const int Event_Accel; +const int Event_Clipboard; +const int Event_SockAct; +const int Event_DragEnter; +const int Event_DragMove; +const int Event_DragLeave; +const int Event_Drop; +const int Event_DragResponse; +const int Event_ChildInserted; +const int Event_ChildRemoved; +const int Event_LayoutHint; +const int Event_ActivateControl; +const int Event_DeactivateControl; +const int Event_User; + + +enum ButtonState { + NoButton = 0x00, + LeftButton = 0x01, + RightButton = 0x02, + MidButton = 0x04, + MouseButtonMask = 0x07, + ShiftButton = 0x08, + ControlButton = 0x10, + AltButton = 0x20, + KeyButtonMask = 0x38 +}; + + +class QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QEvent(int); + QEvent(QEvent&); + + int type() const; + +%ConvertToSubClassCode + switch (sipCpp -> type()) + { + case Event_Timer: + sipClass = sipClass_QTimerEvent; + break; + + case Event_MouseButtonPress: + case Event_MouseButtonRelease: + case Event_MouseButtonDblClick: + case Event_MouseMove: + sipClass = sipClass_QMouseEvent; + break; + + case Event_KeyPress: + case Event_KeyRelease: + sipClass = sipClass_QKeyEvent; + break; + + case Event_FocusIn: + case Event_FocusOut: + sipClass = sipClass_QFocusEvent; + break; + + case Event_Paint: + sipClass = sipClass_QPaintEvent; + break; + + case Event_Move: + sipClass = sipClass_QMoveEvent; + break; + + case Event_Resize: + sipClass = sipClass_QResizeEvent; + break; + + case Event_Close: + sipClass = sipClass_QCloseEvent; + break; + + case Event_Show: + sipClass = sipClass_QShowEvent; + break; + + case Event_Hide: + sipClass = sipClass_QHideEvent; + break; + + case Event_DragMove: + sipClass = sipClass_QDragMoveEvent; + break; + + case Event_DragEnter: + sipClass = sipClass_QDragEnterEvent; + break; + + case Event_DragLeave: + sipClass = sipClass_QDragLeaveEvent; + break; + + case Event_Drop: + sipClass = sipClass_QDropEvent; + break; + + case Event_ChildInserted: + case Event_ChildRemoved: + sipClass = sipClass_QChildEvent; + break; + + default: + sipClass = NULL; + } +%End +}; + +%End + +%If (Qt_2_00 -) + +class QEvent : Qt +{ +%TypeHeaderCode +#include +%End + +public: + enum Type + { + None, + Timer, + MouseButtonPress, + MouseButtonRelease, + MouseButtonDblClick, + MouseMove, + KeyPress, + KeyRelease, + FocusIn, + FocusOut, + Enter, + Leave, + Paint, + Move, + Resize, + Create, + Destroy, + Show, + Hide, + Close, + Quit, +%If (Qt_2_1_0 -) + Reparent, + ShowMinimized, + ShowNormal, + WindowActivate, + WindowDeactivate, + ShowToParent, + HideToParent, + ShowMaximized, +%End +%If (Qt_3_0_0 -) + ShowFullScreen, +%End + Accel, + Wheel, + AccelAvailable, +%If (Qt_2_1_0 -) + CaptionChange, + IconChange, + ParentFontChange, + ApplicationFontChange, + ParentPaletteChange, + ApplicationPaletteChange, +%End +%If (Qt_3_0_0 -) + PaletteChange, +%End + Clipboard, +%If (Qt_2_2_0 -) + Speech, +%End + SockAct, +%If (Qt_2_2_0 -) + AccelOverride, +%End +%If (Qt_3_0_0 -) + DeferredDelete, +%End + DragEnter, + DragMove, + DragLeave, + Drop, + DragResponse, + ChildInserted, + ChildRemoved, + LayoutHint, +%If (Qt_2_2_0 -) + ShowWindowRequest, +%End +%If (Qt_3_3_0 -) + WindowBlocked, + WindowUnblocked, +%End + ActivateControl, + DeactivateControl, +%If (Qt_2_1_0 - Qt_2_2_0) + Configure, + ConfigureLayout, +%End +%If (Qt_3_0_0 -) + ContextMenu, + IMStart, + IMCompose, + IMEnd, + Accessibility, +%End +%If (Qt_3_0_0 - Qt_3_1_0) + Tablet, +%End +%If (Qt_3_1_0 -) + TabletMove, + LocaleChange, + LanguageChange, + LayoutDirectionChange, + Style, + TabletPress, + TabletRelease, +%End +%If (Qt_3_3_0 -) + OkRequest, + HelpRequest, + IconDrag, + WindowStateChange, +%End + User, +%If (Qt_3_0_0 -) + MaxUser, +%End + }; + + QEvent(Type); + QEvent(QEvent&); + virtual ~QEvent(); + + Type type() const; +%If (Qt_3_0_0 -) + bool spontaneous() const; +%End + +%ConvertToSubClassCode + switch (sipCpp -> type()) + { + case QEvent::Timer: + sipClass = sipClass_QTimerEvent; + break; + + case QEvent::MouseButtonPress: + case QEvent::MouseButtonRelease: + case QEvent::MouseButtonDblClick: + case QEvent::MouseMove: + sipClass = sipClass_QMouseEvent; + break; + + case QEvent::Accel: +#if QT_VERSION >= 220 + case QEvent::AccelOverride: +#endif + case QEvent::KeyPress: + case QEvent::KeyRelease: + sipClass = sipClass_QKeyEvent; + break; + + case QEvent::FocusIn: + case QEvent::FocusOut: + sipClass = sipClass_QFocusEvent; + break; + + case QEvent::Paint: + sipClass = sipClass_QPaintEvent; + break; + + case QEvent::Move: + sipClass = sipClass_QMoveEvent; + break; + + case QEvent::Resize: + sipClass = sipClass_QResizeEvent; + break; + + case QEvent::Close: + sipClass = sipClass_QCloseEvent; + break; + +#if QT_VERSION >= 0x030300 + case QEvent::IconDrag: + sipClass = sipClass_QIconDragEvent; + break; +#endif + + case QEvent::Wheel: + sipClass = sipClass_QWheelEvent; + break; + + case QEvent::Show: + sipClass = sipClass_QShowEvent; + break; + + case QEvent::Hide: + sipClass = sipClass_QHideEvent; + break; + +#if defined(SIP_FEATURE_Qt_DRAGANDDROP) + case QEvent::DragMove: + sipClass = sipClass_QDragMoveEvent; + break; + + case QEvent::DragEnter: + sipClass = sipClass_QDragEnterEvent; + break; + + case QEvent::DragLeave: + sipClass = sipClass_QDragLeaveEvent; + break; + + case QEvent::Drop: + sipClass = sipClass_QDropEvent; + break; +#endif + + case QEvent::ChildInserted: + case QEvent::ChildRemoved: + sipClass = sipClass_QChildEvent; + break; + +#if QT_VERSION >= 0x030000 + case QEvent::ContextMenu: + sipClass = sipClass_QContextMenuEvent; + break; + + case QEvent::IMStart: + case QEvent::IMEnd: + sipClass = sipClass_QIMEvent; + break; +#endif + +#if QT_VERSION >= 0x030000 && QT_VERSION < 0x030100 + case QEvent::IMCompose: + sipClass = sipClass_QIMEvent; + break; + + case QEvent::Tablet: + sipClass = sipClass_QTabletEvent; + break; +#endif + +#if QT_VERSION >= 0x030100 + case QEvent::IMCompose: + sipClass = sipClass_QIMComposeEvent; + break; + + case QEvent::TabletMove: + case QEvent::TabletPress: + case QEvent::TabletRelease: + sipClass = sipClass_QTabletEvent; + break; +#endif + + default: + sipClass = (sipCpp -> type() < QEvent::User ? + sipClass_QEvent : + sipClass_QCustomEvent); + } +%End +}; + +%End + + +class QTimerEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QTimerEvent(int); + + int timerId() const; +}; + + +class QMouseEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QMouseEvent(int,const QPoint &,int,int); + QMouseEvent(int,const QPoint &,const QPoint &,int,int); +%End +%If (Qt_2_00 -) + QMouseEvent(Type,const QPoint &,int,int); + QMouseEvent(Type,const QPoint &,const QPoint &,int,int); +%End + + const QPoint &pos() const; + const QPoint &globalPos() const; + int x() const; + int y() const; + int globalX() const; + int globalY() const; +%If (- Qt_2_00) + int button() const; + int state() const; +%End +%If (Qt_2_00 -) + ButtonState button() const; + ButtonState state() const; + ButtonState stateAfter() const; +%End +%If (Qt_3_0_0 -) + bool isAccepted() const; + void accept(); + void ignore(); +%End +}; + + +%If (Qt_2_00 -) + +class QWheelEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_0) + QWheelEvent(const QPoint &,int,int); + QWheelEvent(const QPoint &,const QPoint &,int,int); +%End +%If (Qt_3_0_0 -) + QWheelEvent(const QPoint &,int,int,Orientation = Vertical); + QWheelEvent(const QPoint &,const QPoint &,int,int, + Orientation = Vertical); +%End + + int delta() const; + const QPoint &pos() const; + const QPoint &globalPos() const; + int x() const; + int y() const; + int globalX() const; + int globalY() const; + ButtonState state() const; +%If (Qt_3_0_0 -) + Orientation orientation() const; +%End + bool isAccepted() const; + void accept(); + void ignore(); +}; + +%End + + +%If (Qt_3_0_0 -) + +class QTabletEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: + enum TabletDevice { + NoDevice, + Puck, + Stylus, + Eraser + }; + +%If (- Qt_3_1_0) + QTabletEvent(const QPoint &,int,int,int,int,const QPair &); +%End +%If (Qt_3_1_0 -) + QTabletEvent(Type,const QPoint &,const QPoint &,int,int,int,int, + const QPair &); +%End + QTabletEvent(const QPoint &,const QPoint &,int,int,int,int, + const QPair &); + + int pressure() const; + int xTilt() const; + int yTilt() const; + const QPoint &pos() const; + const QPoint &globalPos() const; + int x() const; + int y() const; + int globalX() const; + int globalY() const; + TabletDevice device() const; + int isAccepted() const; + void accept(); + void ignore(); + QPair uniqueId(); +}; + +%End + + +class QKeyEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QKeyEvent(int,int,int,int); +%End +%If (Qt_2_00 -) + QKeyEvent(Type,int,int,int,const QString & = QString::null,bool = 0, + ushort = 1); +%End + + int key() const; + int ascii() const; + bool isAccepted() const; + void accept(); + void ignore(); + +%If (- Qt_2_00) + int state() const; +%End + +%If (Qt_2_00 -) + ButtonState state() const; + ButtonState stateAfter() const; + QString text() const; + bool isAutoRepeat() const; + int count() const; +%End +}; + + +class QFocusEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QFocusEvent(int); +%End +%If (Qt_2_00 -) + QFocusEvent(Type); +%End + + bool gotFocus() const; + bool lostFocus() const; + +%If (Qt_2_1_0 -) +%If (- Qt_3_0_0) + enum Reason { + Mouse, + Tab, + ActiveWindow, + Popup, + Shortcut, + Other + }; +%End +%If (Qt_3_0_0 -) + enum Reason { + Mouse, + Tab, + Backtab, + ActiveWindow, + Popup, + Shortcut, + Other + }; +%End + + static Reason reason(); + static void setReason(Reason); + static void resetReason(); +%End +}; + + +class QPaintEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QPaintEvent(const QRect &); +%End +%If (Qt_2_00 -) + QPaintEvent(const QRegion &,bool = 1); + QPaintEvent(const QRect &,bool = 1); +%End +%If (Qt_3_3_0 -) + QPaintEvent(const QRegion &,const QRect &,bool = 1); +%End + + const QRect &rect() const; +%If (Qt_2_00 -) + const QRegion ®ion() const; + bool erased() const; +%End +}; + + +class QMoveEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QMoveEvent(const QPoint &,const QPoint &); + + const QPoint &pos() const; + const QPoint &oldPos() const; +}; + + +class QResizeEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QResizeEvent(const QSize &,const QSize &); + + const QSize &size() const; + const QSize &oldSize() const; +}; + + +class QCloseEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QCloseEvent(); + + bool isAccepted() const; + void accept(); + void ignore(); +}; + + +%If (Qt_3_3_0 -) + +class QIconDragEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QIconDragEvent(); + + bool isAccepted() const; + void accept(); + void ignore(); +}; + +%End + + +class QShowEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_0) + QShowEvent(bool); + + bool spontaneous() const; +%End +%If (Qt_3_0_0 -) + QShowEvent(); +%End +}; + + +class QHideEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_0) + QHideEvent(bool); + + bool spontaneous() const; +%End +%If (Qt_3_0_0 -) + QHideEvent(); +%End +}; + + +%If (Qt_3_0_0 -) + +class QContextMenuEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: + enum Reason { + Mouse, + Keyboard, + Other + }; + + QContextMenuEvent(Reason,const QPoint &,const QPoint &,int); + QContextMenuEvent(Reason,const QPoint &,int); + + int x() const; + int y() const; + int globalX() const; + int globalY() const; + + const QPoint &pos() const; + const QPoint &globalPos() const; + + ButtonState state() const; + bool isAccepted() const; + bool isConsumed() const; + void consume(); + void accept(); + void ignore(); + Reason reason() const; +}; + +%End + + +%If (Qt_3_0_0 -) + +class QIMEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QIMEvent(Type,const QString &,int); + + const QString &text() const; + int cursorPos() const; + bool isAccepted() const; + void accept(); + void ignore(); +%If (Qt_3_1_0 -) + int selectionLength() const; +%End +}; + +%End + + +%If (Qt_3_1_0 -) + +class QIMComposeEvent : QIMEvent +{ +%TypeHeaderCode +#include +%End + +public: + QIMComposeEvent(Type,const QString &,int,int); +}; + +%End + + +%If (- Qt_2_00) + +class QDropEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QDropEvent(const QPoint &); + + const QPoint &pos() const; + bool isAccepted() const; + void accept(); + void ignore(); + QByteArray data(const char *); +}; + +%End + + +%If (Qt_2_00 -) +%If (Qt_DRAGANDDROP) + +class QDropEvent : QEvent, QMimeSource +{ +%TypeHeaderCode +#include +%End + +public: + QDropEvent(const QPoint &,Type = Drop); + + const QPoint &pos() const; + bool isAccepted() const; + void accept(bool = 1); + void ignore(); + bool isActionAccepted() const; + void acceptAction(bool = 1); + + enum Action + { + Copy, + Link, + Move, + Private, + UserAction = 100 + }; + + void setAction(Action); + Action action() const; + QWidget *source() const; + const char *format(int = 0) const; + QByteArray encodedData(const char *) const; + bool provides(const char *) const; + QByteArray data(const char *) const; + void setPoint(const QPoint &); +}; + +%End +%End + + +%If (- Qt_2_00) + +class QDragMoveEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QDragMoveEvent(const QPoint &); + + const QPoint &pos() const; + bool isAccepted() const; + void accept(); + void ignore(); + void accept(const QRect &); + void ignore(const QRect &); + QRect answerRect() const; + const char *format(int = 0); + bool provides(const char *); + QByteArray data(const char *); + +protected: + QDragMoveEvent(const QPoint &,int); +}; + +%End + + +%If (Qt_DRAGANDDROP) +%If (Qt_2_00 -) + +class QDragMoveEvent : QDropEvent +{ +%TypeHeaderCode +#include +%End + +public: + QDragMoveEvent(const QPoint &,Type = DragMove); + + QRect answerRect() const; + void accept(bool = 1); + void accept(const QRect &); + void ignore(const QRect &); + void ignore(); +}; + +%End + + +class QDragEnterEvent : QDragMoveEvent +{ +%TypeHeaderCode +#include +%End + +public: + QDragEnterEvent(const QPoint &); +}; + + +class QDragLeaveEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QDragLeaveEvent(); +}; + +%End + + +class QChildEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QChildEvent(int,QWidget *); +%End +%If (Qt_2_00 -) + QChildEvent(Type,QObject *); +%End + +%If (- Qt_2_00) + QWidget *child() const; +%End +%If (Qt_2_00 -) + QObject *child() const; +%End + bool inserted() const; + bool removed() const; +}; + + +class QCustomEvent : QEvent +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QCustomEvent(int,SIP_PYOBJECT /Transfer/); +%End +%If (Qt_2_00 -) + QCustomEvent(Type,SIP_PYOBJECT /Transfer/); +%End +%If (Qt_2_1_0 -) + QCustomEvent(int); +%End + ~QCustomEvent(); +%VirtualCatcherCode + // We need to garbage collect any current data. + + PyObject *old = reinterpret_cast(data()); + + SIP_BLOCK_THREADS + Py_XDECREF(old); + SIP_UNBLOCK_THREADS +%End + + SIP_PYOBJECT data() const; +%MethodCode + // We need to cast the result. + + sipRes = reinterpret_cast(sipCpp -> QCustomEvent::data()); + + // In case the event has been created from C++ code. + if (!sipRes) + sipRes = Py_None; + + Py_INCREF(sipRes); +%End + +%If (Qt_2_1_0 -) + void setData(SIP_PYOBJECT /Transfer/); +%MethodCode + // We need to garbage collect any current data. + + PyObject *old = reinterpret_cast(sipCpp -> QCustomEvent::data()); + sipCpp -> QCustomEvent::setData(a0); + + Py_XDECREF(old); +%End +%End + +%GCTraverseCode + // Support the Python garbage collector. Although it's not obviously + // documented, we can't release the GIL in traverse code. + + PyObject *obj = reinterpret_cast(sipCpp -> QCustomEvent::data()); + + if (obj) + sipRes = sipVisit(obj, sipArg); + else + sipRes = 0; +%End + +%GCClearCode + // Support the Python garbage collector. + + PyObject *obj = reinterpret_cast(sipCpp -> QCustomEvent::data()); + + sipCpp -> QCustomEvent::setData(0); + + Py_XDECREF(obj); + + sipRes = 0; +%End +}; diff --git a/sip/qt/qeventloop.sip b/sip/qt/qeventloop.sip new file mode 100644 index 0000000..22d7a2c --- /dev/null +++ b/sip/qt/qeventloop.sip @@ -0,0 +1,89 @@ +// This is the SIP interface definition for QEventLoop. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QEventLoop (Qt v3.1+) + + virtual int exec + + + +This has been renamed to exec_loop in Python. + + +%End + + +%If (Qt_3_1_0 -) + +class QEventLoop : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QEventLoop(QObject * /TransferThis/ = 0,const char * = 0); + + enum ProcessEvents { + AllEvents, + ExcludeUserInput, + ExcludeSocketNotifiers, + WaitForMore + }; + + typedef uint ProcessEventsFlags; + + void processEvents(ProcessEventsFlags,int) /ReleaseGIL/; + virtual bool processEvents(ProcessEventsFlags) /ReleaseGIL/; + + virtual bool hasPendingEvents() const; + + virtual void registerSocketNotifier(QSocketNotifier *); + virtual void unregisterSocketNotifier(QSocketNotifier *); +%If (Qt_3_1_1 -) + // These were present in the X11 version of Qt v3.1.0 but didn't make + // it to the Windows version until Qt v3.1.1. + void setSocketNotifierPending(QSocketNotifier *); + int activateSocketNotifiers(); + + int activateTimers(); + int timeToWait() const; +%End + + virtual int exec() /PyName=exec_loop, ReleaseGIL, + PreHook=__pyQtPreEventLoopHook__, + PostHook=__pyQtPostEventLoopHook__/; + virtual void exit(int = 0); + + virtual int enterLoop(); + virtual void exitLoop(); + virtual int loopLevel() const; + + virtual void wakeUp(); + +signals: + void awake(); + void aboutToBlock(); +}; + +%End diff --git a/sip/qt/qfile.sip b/sip/qt/qfile.sip new file mode 100644 index 0000000..06012f1 --- /dev/null +++ b/sip/qt/qfile.sip @@ -0,0 +1,310 @@ +// This is the SIP interface definition for QFile. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QFile + + bool open + int m + FILE *f + + +Not implemented. + + + + Q_LONG readBlock + char *data + Q_ULONG len + + +This takes a single len parameter. The +data is returned if there was no error, otherwise +None is returned. + + + + Q_LONG readLine + char *data + Q_ULONG maxlen + + +This takes a single maxlen parameter. The +data is returned if there was no error, otherwise +None is returned. + + + + static void setDecodingFunction + EncoderFn f + + +Not yet implemented. (Qt v2+) + + + + static void setEncodingFunction + EncoderFn f + + +Not yet implemented. (Qt v2+) + + + + Q_LONG writeBlock + const char *data + Q_ULONG len + + +len is derived from data and not passed +as a parameter. + + +%End + + +class QFile : QIODevice +{ +%TypeHeaderCode +#include +%End + +public: + QFile(); +%If (- Qt_2_00) + QFile(const char *); +%End +%If (Qt_2_00 -) + QFile(const QString &); +%End + +%If (- Qt_2_00) + const char *name() const; + void setName(const char *); +%End +%If (Qt_2_00 -) + QString name() const; + void setName(const QString &); +%End + +%If (Qt_2_00 -) + static QCString encodeName(const QString &); + static QString decodeName(const QCString &); +// static void setEncodingFunction(EncoderFn); +// static void setDecodingFunction(DecoderFn); +%End + + bool exists() const; +%If (- Qt_2_00) + static bool exists(const char *); +%End +%If (Qt_2_00 -) + static bool exists(const QString &); +%End + + bool remove(); +%If (- Qt_2_00) + static bool remove(const char *); +%End +%If (Qt_2_00 -) + static bool remove(const QString &); +%End + + bool open(int) /ReleaseGIL/; +// bool open(int,FILE *) /ReleaseGIL/; + bool open(int,int) /ReleaseGIL/; + void close(); + void flush() /ReleaseGIL/; + +%If (- Qt_3_0_0) + uint size() const; + int at() const; + bool at(int); +%End +%If (Qt_3_0_0 -) + Offset size() const; + Offset at() const; + bool at(Offset); +%End + bool atEnd() const; + +%If (- Qt_3_0_0) + SIP_PYOBJECT readBlock(uint) /ReleaseGIL/ [int (char *,uint)]; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + int actlen; + + Py_BEGIN_ALLOW_THREADS + actlen = sipSelfWasArg ? sipCpp->QFile::readBlock(buf,a0) : sipCpp->readBlock(buf,a0); + Py_END_ALLOW_THREADS + + if (actlen < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else if ((sipRes = PyString_FromStringAndSize(buf,actlen)) == NULL) + sipIsErr = 1; + + sipFree((ANY *)buf); + } +%End + + int writeBlock(const char * /Array/,uint /ArraySize/) /ReleaseGIL/; +%End +%If (Qt_3_0_0 -) + SIP_PYOBJECT readBlock(Q_ULONG) /ReleaseGIL/ [Q_LONG (char *,Q_ULONG)]; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + Q_LONG actlen; + + Py_BEGIN_ALLOW_THREADS + actlen = sipSelfWasArg ? sipCpp->QFile::readBlock(buf,a0) : sipCpp->readBlock(buf,a0); + Py_END_ALLOW_THREADS + + if (actlen < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else if ((sipRes = PyString_FromStringAndSize(buf,actlen)) == NULL) + sipIsErr = 1; + + sipFree((ANY *)buf); + } +%End + + + Q_LONG writeBlock(const char * /Array/, + Q_ULONG /ArraySize/) /ReleaseGIL/; +%End +%If (Qt_2_00 - Qt_3_0_0) + int writeBlock(const QByteArray &) /ReleaseGIL/; +%End +%If (Qt_3_0_0 -) + Q_LONG writeBlock(const QByteArray &) /ReleaseGIL/; +%End + +%If (- Qt_3_0_0) + SIP_PYOBJECT readLine(uint) /ReleaseGIL/ [int (char *,uint)]; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + int actlen; + + Py_BEGIN_ALLOW_THREADS + actlen = sipSelfWasArg ? sipCpp->QFile::readLine(buf,a0) : sipCpp->readLine(buf,a0); + Py_END_ALLOW_THREADS + + if (actlen < 0) + { + sipFree((ANY *)buf); + + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = PyString_FromStringAndSize(buf,actlen); + + sipFree((ANY *)buf); + + if (sipRes == NULL) + sipIsErr = 1; + } + } +%End +%End +%If (Qt_3_0_0 -) + SIP_PYOBJECT readLine(Q_ULONG) /ReleaseGIL/ [Q_LONG (char *,Q_ULONG)]; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + Q_LONG actlen; + + Py_BEGIN_ALLOW_THREADS + actlen = sipSelfWasArg ? sipCpp->QFile::readLine(buf,a0) : sipCpp->readLine(buf,a0); + Py_END_ALLOW_THREADS + + if (actlen < 0) + { + sipFree((ANY *)buf); + + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = PyString_FromStringAndSize(buf,actlen); + + sipFree((ANY *)buf); + + if (sipRes == NULL) + sipIsErr = 1; + } + } +%End +%End + +%If (Qt_2_00 - Qt_3_0_0) + int readLine(QString &,uint) /ReleaseGIL/; +%End +%If (Qt_3_0_0 -) + Q_LONG readLine(QString &,Q_ULONG) /ReleaseGIL/; +%End + + int getch(); + int putch(int); + int ungetch(int); + + int handle() const; + +%If (Qt_3_2_0 -) + QString errorString() const; +%End + +protected: +%If (Qt_3_2_0 -) + void setErrorString(const QString &); +%End + +private: + QFile(const QFile &); +}; diff --git a/sip/qt/qfiledialog.sip b/sip/qt/qfiledialog.sip new file mode 100644 index 0000000..611387a --- /dev/null +++ b/sip/qt/qfiledialog.sip @@ -0,0 +1,361 @@ +// This is the SIP interface definition for QFileDialog, QFileIconProvider and +// QFilePreview. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QFileDialog + +QFileDialog is fully implemented. + + + +QFileIconProvider + +QFileIconProvider is fully implemented. + + + +QFilePreview + +QFilePreview is fully implemented. However it cannot be +used from Python in the same way as it is used from C++ because PyQt does not +support multiple inheritance involving more than one wrapped class. A trick +that seems to work is to use composition rather than inheritance as in the +following code fragment. + + +class FilePreview(QFilePreview): + pass + +class Preview(QLabel): + def __init__(self, parent=None): + QLabel.__init__(self, parent) + self.preview = FilePreview() + self.preview.previewUrl = self.previewUrl + + +Note that QFilePreview cannot be instantiated directly because it is abstract. +Thanks to Hans-Peter Jansen for this trick. + + +%End + + +%If (Qt_FILEDIALOG) + +class QFileIconProvider : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QFileIconProvider(QObject * /TransferThis/ = 0,const char * = 0); + + virtual const QPixmap *pixmap(const QFileInfo &); + +private: +%If (Qt_2_1_0 -) + QFileIconProvider(const QFileIconProvider &); +%End +}; + + +%If (Qt_2_1_0 -) +class QFilePreview +{ +%TypeHeaderCode +#include +%End + +public: + QFilePreview(); + + virtual void previewUrl(const QUrl &) = 0; +}; +%End + + +class QFileDialog : QDialog +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QFileDialog(const char *,const char * = 0,QWidget * /TransferThis/ = 0, + const char * = 0,bool = 0); +%End +%If (Qt_2_00 -) + QFileDialog(const QString &,const QString & = QString::null, + QWidget * /TransferThis/ = 0,const char * = 0,bool = 0); +%End + QFileDialog(QWidget * /TransferThis/ = 0,const char * = 0,bool = 0); + +%If (- Qt_2_00) + static QString getOpenFileName(const char * = 0,const char * = 0, + QWidget * = 0, + const char * = 0) /ReleaseGIL/; + static QString getSaveFileName(const char * = 0,const char * = 0, + QWidget * = 0, + const char * = 0) /ReleaseGIL/; + static QString getExistingDirectory(const char * = 0,QWidget * = 0, + const char * = 0) /ReleaseGIL/; + static QStrList getOpenFileNames(const char * = 0,const char * = 0, + QWidget * = 0, + const char * = 0) /ReleaseGIL/; +%End +%If (Qt_2_00 - Qt_3_0_0) + static QString getOpenFileName(const QString & = QString::null, + const QString & = QString::null, + QWidget * = 0, + const char * = 0) /ReleaseGIL/; + static QString getSaveFileName(const QString & = QString::null, + const QString & = QString::null, + QWidget * = 0, + const char * = 0) /ReleaseGIL/; + static QString getExistingDirectory(const QString & = QString::null, + QWidget * = 0, + const char * = 0) /ReleaseGIL/; + static QStringList getOpenFileNames(const QString & = QString::null, + const QString & = QString::null, + QWidget * = 0, + const char * = 0) /ReleaseGIL/; +%End +%If (Qt_2_1_0 - Qt_3_0_0) + static QString getOpenFileName(const QString &,const QString &, + QWidget *,const char *, + const QString &) /ReleaseGIL/; + static QString getSaveFileName(const QString &,const QString &, + QWidget *,const char *, + const QString &) /ReleaseGIL/; + static QString getExistingDirectory(const QString &,QWidget *, + const char *, + const QString &) /ReleaseGIL/; + static QStringList getOpenFileNames(const QString &,const QString &, + QWidget *,const char *, + const QString &) /ReleaseGIL/; +%End +%If (Qt_2_2_0 - Qt_3_0_0) + static QString getExistingDirectory(const QString &,QWidget *, + const char *, + const QString &,bool) /ReleaseGIL/; +%End +%If (Qt_3_0_0 -) + static QString getOpenFileName(const QString & = QString::null, + const QString & = QString::null, + QWidget * = 0,const char * = 0, + const QString & = QString::null, + QString * = 0,bool = 1) /ReleaseGIL/; + + static QString getSaveFileName(const QString & = QString::null, + const QString & = QString::null, + QWidget * = 0,const char * = 0, + const QString & = QString::null, + QString * = 0,bool = 1) /ReleaseGIL/; + + static QString getExistingDirectory(const QString & = QString::null, + QWidget * = 0,const char * = 0, + const QString & = QString::null, + bool = 1,bool = 1) /ReleaseGIL/; + + static QStringList getOpenFileNames(const QString & = QString::null, + const QString & = QString::null, + QWidget * = 0,const char * = 0, + const QString & = QString::null, + QString * = 0, + bool = 1) /ReleaseGIL/; + +%End + + static void setIconProvider(QFileIconProvider *); + static QFileIconProvider *iconProvider(); + + QString selectedFile() const; +%If (Qt_2_1_0 -) + QString selectedFilter() const; +%End +%If (Qt_3_0_0 -) + virtual void setSelectedFilter(const QString &); + virtual void setSelectedFilter(int); +%End + +%If (- Qt_2_00) + void setSelection(const char *); +%End +%If (Qt_2_00 -) + void setSelection(const QString &); +%End + +%If (Qt_2_1_0 -) + void selectAll(bool); + + QStringList selectedFiles() const; +%End + +%If (- Qt_2_00) + const char *dirPath() const; +%End +%If (Qt_2_00 -) + QString dirPath() const; +%End + + void setDir(const QDir &); + const QDir* dir() const; + +%If (Qt_2_1_0 -) + void setShowHiddenFiles(bool); + bool showHiddenFiles() const; +%End + + void rereadDir() /ReleaseGIL/; +%If (Qt_2_1_0 -) + void resortDir(); +%End + +%If (- Qt_2_2_0) + enum Mode { + AnyFile, + ExistingFile, + Directory, + ExistingFiles + }; +%End +%If (Qt_2_2_0 -) + enum Mode { + AnyFile, + ExistingFile, + Directory, + ExistingFiles, + DirectoryOnly + }; +%End + + void setMode(Mode); + Mode mode() const; + +%If (Qt_2_1_0 -) + enum ViewMode { + Detail, + List + }; + + enum PreviewMode { + NoPreview, + Contents, + Info + }; + + void setViewMode(ViewMode); + ViewMode viewMode() const; + void setPreviewMode(PreviewMode); + PreviewMode previewMode() const; +%End + + bool eventFilter(QObject *,QEvent *); + +%If (Qt_2_1_0 -) + bool isInfoPreviewEnabled() const; + bool isContentsPreviewEnabled() const; + void setInfoPreviewEnabled(bool); + void setContentsPreviewEnabled(bool); + + void setInfoPreview(QWidget *,QFilePreview *); + void setContentsPreview(QWidget *,QFilePreview *); + + QUrl url() const; +%End + +%If (Qt_3_0_0 -) + void addFilter(const QString &); +%End + +public slots: +%If (Qt_2_2_0 -) + void done(int); +%End +%If (- Qt_2_00) + void setDir(const char *); +%End +%If (Qt_2_00 -) + void setDir(const QString &); +%End +%If (Qt_2_1_0 -) + void setUrl(const QUrlOperator &); +%End +%If (- Qt_2_00) + void setFilter(const char *); +%End +%If (Qt_2_00 -) + void setFilter(const QString &); +%End +%If (Qt_2_1_0 -) + void setFilters(const QString &); +%End +// void setFilters(const char **); +%If (- Qt_2_00) + void setFilters(const QStrList &); +%End +%If (Qt_2_00 -) + void setFilters(const QStringList &); +%End + +signals: +%If (- Qt_2_00) + void fileHighlighted(const char *); + void fileSelected(const char *); + void dirEntered(const char *); +%End +%If (Qt_2_00 -) + void fileHighlighted(const QString &); + void fileSelected(const QString &); +%End +%If (Qt_3_0_0 -) + void filesSelected(const QStringList &); +%End +%If (Qt_2_00 -) + void dirEntered(const QString &); +%End +%If (Qt_3_0_0 -) + void filterSelected(const QString &); +%End + +protected: + void resizeEvent(QResizeEvent *); + void keyPressEvent(QKeyEvent *); + + void addWidgets(QLabel *,QWidget *,QPushButton *); +%If (Qt_2_1_0 -) + void addToolButton(QButton *,bool = 0); + void addLeftWidget(QWidget *); + void addRightWidget(QWidget *); +%End +%If (Qt_2_1_0 - Qt_3_0_0) + void addFilter(const QString &); +%End + +private: + QFileDialog(const QFileDialog &); +}; + +%End diff --git a/sip/qt/qfileinfo.sip b/sip/qt/qfileinfo.sip new file mode 100644 index 0000000..3755e31 --- /dev/null +++ b/sip/qt/qfileinfo.sip @@ -0,0 +1,145 @@ +// This is the SIP interface definition for QFileInfo. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QFileInfo + +QFileInfo is fully implemented. + + +%End + + +class QFileInfo +{ +%TypeHeaderCode +#include +%End + +public: + enum PermissionSpec { +%If (Qt_3_2_0 -) + ReadOwner, WriteOwner, ExeOwner, +%End + ReadUser, WriteUser, ExeUser, + ReadGroup, WriteGroup, ExeGroup, + ReadOther, WriteOther, ExeOther + }; + + QFileInfo(); +%If (- Qt_2_00) + QFileInfo(const char *); +%End +%If (Qt_2_00 -) + QFileInfo(const QString &); +%End + QFileInfo(const QFile &); +%If (- Qt_2_00) + QFileInfo(const QDir &,const char *); +%End +%If (Qt_2_00 -) + QFileInfo(const QDir &,const QString &); +%End + QFileInfo(const QFileInfo &); + +%If (- Qt_2_00) + void setFile(const char *); +%End +%If (Qt_2_00 -) + void setFile(const QString &); +%End + void setFile(const QFile &); +%If (- Qt_2_00) + void setFile(const QDir &,const char *); +%End +%If (Qt_2_00 -) + void setFile(const QDir &,const QString &); +%End + bool exists() const; + void refresh() const; + bool caching() const; + void setCaching(bool); + +%If (- Qt_2_00) + const char *filePath() const; +%End +%If (Qt_2_00 -) + const QString filePath() const; +%End + QString fileName() const; + QString absFilePath() const; +%If (- Qt_3_0_0) + QString baseName() const; +%End +%If (Qt_3_0_0 -) + QString baseName(bool = 1) const; +%End +%If (- Qt_2_00) + QString extension() const; +%End +%If (Qt_2_00 -) + QString extension(bool = 1) const; +%End + + QString dirPath(bool = 0) const; + QDir dir(bool = 0) const; + bool isReadable() const; + bool isWritable() const; + bool isExecutable() const; +%If (Qt_3_1_0 -) + bool isHidden() const; +%End + + bool isRelative() const; + bool convertToAbs(); + + bool isFile() const; + bool isDir() const; + bool isSymLink() const; + + QString readLink() const /ReleaseGIL/; + +%If (- Qt_2_00) + const char *owner() const; +%End +%If (Qt_2_00 -) + QString owner() const; +%End + uint ownerId() const; +%If (- Qt_2_00) + const char *group() const; +%End +%If (Qt_2_00 -) + QString group() const; +%End + uint groupId() const; + + bool permission(int) const; + + uint size() const; + +%If (Qt_3_0_0 -) + QDateTime created() const; +%End + QDateTime lastModified() const; + QDateTime lastRead() const; +}; diff --git a/sip/qt/qfont.sip b/sip/qt/qfont.sip new file mode 100644 index 0000000..b2abfd4 --- /dev/null +++ b/sip/qt/qfont.sip @@ -0,0 +1,441 @@ +// This is the SIP interface definition for QFont. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QFont + +QFont is fully implemented, including the Python +== and != operators. + + +%End + + +class QFont +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + enum CharSet { + Latin1, ISO_8859_1 = Latin1, AnyCharSet, + Latin2, ISO_8859_2 = Latin2, + Latin3, ISO_8859_3 = Latin3, + Latin4, ISO_8859_4 = Latin4, + Latin5, ISO_8859_5 = Latin5, + Latin6, ISO_8859_6 = Latin6, + Latin7, ISO_8859_7 = Latin7, + Latin8, ISO_8859_8 = Latin8, + Latin9, ISO_8859_9 = Latin9, + KOI8R + }; +%End +%If (Qt_2_00 - Qt_2_1_0) + enum CharSet { + ISO_8859_1, Latin1 = ISO_8859_1, AnyCharSet, + ISO_8859_2, Latin2 = ISO_8859_2, + ISO_8859_3, Latin3 = ISO_8859_3, + ISO_8859_4, Latin4 = ISO_8859_4, + ISO_8859_5, + ISO_8859_6, + ISO_8859_7, + ISO_8859_8, + ISO_8859_9, Latin5 = ISO_8859_9, + ISO_8859_10, Latin6 = ISO_8859_10, + ISO_8859_11, + ISO_8859_12, + ISO_8859_13, Latin7 = ISO_8859_13, + ISO_8859_14, Latin8 = ISO_8859_14, + ISO_8859_15, Latin9 = ISO_8859_15, + KOI8R, + Set_Ja, Set_1 = Set_Ja, + Set_Ko, + Set_Th_TH, + Set_Zh, + Set_Zh_TW, Set_N = Set_Zh_TW, + Unicode + }; +%End +%If (Qt_2_1_0 - Qt_2_2_0) + enum CharSet { + ISO_8859_1, Latin1 = ISO_8859_1, AnyCharSet, + ISO_8859_2, Latin2 = ISO_8859_2, + ISO_8859_3, Latin3 = ISO_8859_3, + ISO_8859_4, Latin4 = ISO_8859_4, + ISO_8859_5, + ISO_8859_6, + ISO_8859_7, + ISO_8859_8, + ISO_8859_9, Latin5 = ISO_8859_9, + ISO_8859_10, Latin6 = ISO_8859_10, + ISO_8859_11, + ISO_8859_12, + ISO_8859_13, Latin7 = ISO_8859_13, + ISO_8859_14, Latin8 = ISO_8859_14, + ISO_8859_15, Latin9 = ISO_8859_15, + KOI8R, + Set_Ja, Set_1 = Set_Ja, + Set_Ko, + Set_Th_TH, + Set_Zh, + Set_Zh_TW, Set_N = Set_Zh_TW, + Unicode, + Set_GBK, + Set_Big5 + }; +%End +%If (Qt_2_2_0 - Qt_3_0_0) + enum CharSet { + ISO_8859_1, Latin1 = ISO_8859_1, AnyCharSet, + ISO_8859_2, Latin2 = ISO_8859_2, + ISO_8859_3, Latin3 = ISO_8859_3, + ISO_8859_4, Latin4 = ISO_8859_4, + ISO_8859_5, + ISO_8859_6, + ISO_8859_7, + ISO_8859_8, + ISO_8859_9, Latin5 = ISO_8859_9, + ISO_8859_10, Latin6 = ISO_8859_10, + ISO_8859_11, + ISO_8859_12, + ISO_8859_13, Latin7 = ISO_8859_13, + ISO_8859_14, Latin8 = ISO_8859_14, + ISO_8859_15, Latin9 = ISO_8859_15, + KOI8R, + Set_Ja, Set_1 = Set_Ja, + Set_Ko, + Set_Th_TH, + Set_Zh, + Set_Zh_TW, Set_N = Set_Zh_TW, + Unicode, + Set_GBK, + Set_Big5, + JIS_X_0201 = 0xa0, + JIS_X_0208 = 0xc0, Enc16 = JIS_X_0208, + KSC_5601, + GB_2312, + Big5, + TSCII + }; +%End + + enum StyleHint { + Helvetica, + Times, + Courier, + OldEnglish, + System, + AnyStyle, + SansSerif, + Serif, + TypeWriter, + Decorative + }; + +%If (Qt_2_2_0 -) + enum StyleStrategy { + PreferDefault, + PreferBitmap, + PreferDevice, + PreferOutline, + ForceOutline, + PreferMatch, + PreferQuality, +%If (Qt_3_0_0 -) + PreferAntialias, + NoAntialias, +%End +%If (Qt_3_2_0 -) + OpenGLCompatible, +%End + }; +%End + + enum Weight { + Light, + Normal, + DemiBold, + Bold, + Black + }; + +%If (Qt_3_2_0 -) + enum Stretch { + UltraCondensed, + ExtraCondensed, + Condensed, + SemiCondensed, + Unstretched, + SemiExpanded, + Expanded, + ExtraExpanded, + UltraExpanded + }; +%End + + QFont(); +%If (- Qt_2_00) + QFont(const char *,int = 12,int = Normal,bool = 0); + QFont(const char *,int,int,bool,CharSet); +%End +%If (Qt_2_00 - Qt_3_2_0) + QFont(const QString &,int = 12,int = Normal,bool = 0); +%End +%If (Qt_3_2_0 -) + QFont(const QString &,int = 12,int = -1,bool = 0); +%End +%If (Qt_2_00 - Qt_3_0_0) + QFont(const QString &,int,int,bool,CharSet); +%End + QFont(const QFont &); + +%If (- Qt_2_00) + const char *family() const; + void setFamily(const char *); +%End +%If (Qt_2_00 -) + QString family() const; + void setFamily(const QString &); + + float pointSizeFloat() const; + void setPointSizeFloat(float); + + int pixelSize() const; + void setPixelSize(int); + void setPixelSizeFloat(float); +%End + int pointSize() const; + void setPointSize(int); + + int weight() const; + void setWeight(int); + + bool bold() const; + void setBold(bool); + + bool italic() const; + void setItalic(bool); + + bool underline() const; + void setUnderline(bool); + +%If (Qt_3_2_0 -) + bool overline() const; + void setOverline(bool); +%End + + bool strikeOut() const; + void setStrikeOut(bool); + + bool fixedPitch() const; + void setFixedPitch(bool); + + StyleHint styleHint() const; +%If (Qt_2_2_0 -) + StyleStrategy styleStrategy() const; +%End +%If (- Qt_3_0_0) + void setStyleHint(StyleHint); +%End +%If (Qt_2_2_0 - Qt_3_0_0) + void setStyleHint(StyleHint,StyleStrategy); +%End +%If (Qt_3_0_0 -) + void setStyleHint(StyleHint,StyleStrategy = PreferDefault); + void setStyleStrategy(StyleStrategy); +%End + +%If (- Qt_3_0_0) + CharSet charSet() const; + void setCharSet(CharSet); +%End + +%If (Qt_3_2_0 -) + int stretch() const; + void setStretch(int); +%End + + bool rawMode() const; + void setRawMode(bool); + + bool exactMatch() const; + + bool operator==(const QFont &) const; + bool operator!=(const QFont &) const; + + bool isCopyOf(const QFont &) const; + +%If (- Qt_2_00) + HANDLE handle(HANDLE = 0); + const char *rawName() const; + static const QFont &defaultFont(); + static const char *substitute(const char *); + static void insertSubstitution(const char *,const char *); + static void removeSubstitution(const char *); + static void listSubstitutions(QStrList *); +%End + +%If (Qt_2_00 - Qt_3_0_0) + static CharSet charSetForLocale(); +%End + +%If (Qt_2_00 -) +%If (- Qt_3_0_0) +%If (WS_X11) + HANDLE handle() const; +%End +%End +%If (Qt_3_0_0 -) +%If (WS_X11) + Qt::HANDLE handle() const; +%End +%End + void setRawName(const QString &); + QString rawName() const; +%End + QString key() const; +%If (Qt_3_0_0 -) + QString toString() const; + bool fromString(const QString &); +%End +%If (Qt_2_00 - Qt_3_0_0) + static QString encodingName(CharSet); +%End +%If (Qt_2_00 -) + static QString substitute(const QString &); +%If (Qt_3_0_0 -) + static QStringList substitutes(const QString &); +%End + static QStringList substitutions(); + static void insertSubstitution(const QString &,const QString &); +%If (Qt_3_0_0 -) + static void insertSubstitutions(const QString &,const QStringList &); +%End + static void removeSubstitution(const QString &); +%If (- Qt_3_0_0) + static void locale_init(); +%End +%End + + static void initialize(); + static void cleanup(); + static void cacheStatistics(); + +%If (Qt_3_0_0 -) + enum Script { + Latin, + Greek, + Cyrillic, + Armenian, + Georgian, + Runic, + Ogham, + SpacingModifiers, + CombiningMarks, + + Hebrew, + Arabic, + Syriac, + Thaana, + + Devanagari, + Bengali, + Gurmukhi, + Gujarati, + Oriya, + Tamil, + Telugu, + Kannada, + Malayalam, + Sinhala, + Thai, + Lao, + Tibetan, + Myanmar, + Khmer, + + Han, + Hiragana, + Katakana, + Hangul, + Bopomofo, + Yi, + + Ethiopic, + Cherokee, + CanadianAboriginal, + Mongolian, + + CurrencySymbols, + LetterlikeSymbols, + NumberForms, + MathematicalOperators, + TechnicalSymbols, + GeometricSymbols, + MiscellaneousSymbols, + EnclosedAndSquare, + Braille, + + Unicode, + +%If (Qt_3_2_0 -) + Tagalog, + Hanunoo, + Buhid, + Tagbanwa, + + KatakanaHalfWidth, +%End + +%If (Qt_3_3_0 -) + Limbu, + TaiLe, +%End + }; + + QString defaultFamily() const; + QString lastResortFamily() const; + QString lastResortFont() const; +%End + +%If (Qt_2_00 - Qt_3_0_0) + static QFont defaultFont(); +%End +%If (- Qt_3_0_0) + static void setDefaultFont(const QFont &); +%End + +%If (Qt_3_2_0 -) + QFont resolve(const QFont &) const; +%End + +protected: + bool dirty() const; +%If (- Qt_3_0_0) + QString defaultFamily() const; + QString lastResortFamily() const; + QString lastResortFont() const; +%End + int deciPointSize() const; +}; diff --git a/sip/qt/qfontdatabase.sip b/sip/qt/qfontdatabase.sip new file mode 100644 index 0000000..cacecea --- /dev/null +++ b/sip/qt/qfontdatabase.sip @@ -0,0 +1,121 @@ +// This is the SIP interface definition for QFontDatabase. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QFontDatabase (Qt v2.1+) + +QFontDatabase is fully implemented. + + +%End + + +%If (Qt_FONTDATABASE) +%If (Qt_2_1_0 -) + +class QFontDatabase +{ +%TypeHeaderCode +#include +%End + +public: + QFontDatabase(); + + static QValueList standardSizes(); + +%If (- Qt_3_0_0) + QStringList charSets(const QString &,bool = 1 ) const; + QStringList families(bool = 1) const; + QStringList styles(const QString &, + const QString & = QString::null) const; + QValueList pointSizes(const QString &, + const QString & = QString::null, + const QString & = QString::null); + QValueList smoothSizes(const QString &,const QString &, + const QString & = QString::null); +%End +%If (Qt_3_0_0 -) + QStringList families() const; +%If (Qt_3_2_0 -) + QStringList families(QFont::Script) const; +%End + QStringList styles(const QString &) const; + QValueList pointSizes(const QString &, + const QString & = QString::null); + QValueList smoothSizes(const QString &,const QString &); +%End + QString styleString(const QFont &); + +%If (- Qt_3_0_0) + QFont font(const QString,const QString &,int, + const QString = QString::null); + + bool isBitmapScalable(const QString &,const QString & = QString::null, + const QString & = QString::null) const; + bool isSmoothlyScalable(const QString &, + const QString & = QString::null, + const QString & = QString::null) const; + bool isScalable(const QString &,const QString & = QString::null, + const QString & = QString::null) const; +%End +%If (Qt_3_0_0 -) + QFont font(const QString,const QString &,int); + + bool isBitmapScalable(const QString &, + const QString & = QString::null) const; + bool isSmoothlyScalable(const QString &, + const QString & = QString::null) const; + bool isScalable(const QString &,const QString & = QString::null) const; +%End +%If (Qt_2_3_0 - Qt_3_0_0) + bool isFixedPitch(const QString &,const QString & = QString::null, + const QString & = QString::null) const; +%End +%If (Qt_3_0_0 -) + bool isFixedPitch(const QString &, + const QString & = QString::null) const; +%End + +%If (- Qt_3_0_0) + bool italic(const QString &,const QString &, + const QString & = QString::null) const; + bool bold(const QString &,const QString &, + const QString & = QString::null) const; + int weight(const QString &,const QString &, + const QString & = QString::null) const; + + static QString verboseCharSetName(const QString &); + static QString charSetSample(const QString &); +%End +%If (Qt_3_0_0 -) + bool italic(const QString &,const QString &) const; + bool bold(const QString &,const QString &) const; + int weight(const QString &,const QString &) const; + + static QString scriptName(QFont::Script); + static QString scriptSample(QFont::Script); +%End +}; + +%End +%End diff --git a/sip/qt/qfontdialog.sip b/sip/qt/qfontdialog.sip new file mode 100644 index 0000000..9196000 --- /dev/null +++ b/sip/qt/qfontdialog.sip @@ -0,0 +1,105 @@ +// This is the SIP interface definition for QFontDialog. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QFontDialog (Qt v2+) + + static QFont getFont + bool *ok + const QFont &def + QWidget *parent = 0 + const char *name = 0 + + +This takes the def, parent and +name parameters and returns a tuple containing the +QFont result and the ok value. + + + + static QFont getFont + bool *ok + QWidget *parent = 0 + const char *name = 0 + + +This takes the parent and name parameters +and returns a tuple containing the QFont result and the +ok value. + + +%End + + +%If (Qt_2_00 -) +%If (Qt_FONTDIALOG) + +class QFontDialog : QDialog +{ +%TypeHeaderCode +#include +%End + +public: + static QFont getFont(bool *,const QFont &,QWidget * = 0, + const char * = 0); + static QFont getFont(bool *,QWidget * = 0,const char * = 0); + +signals: +%If (- Qt_3_2_0) + void fontSelected(const QFont &); + void fontHighlighted(const QFont &); +%End + +protected: +%If (- Qt_3_2_0) + bool eventFilter(QObject *,QEvent *); + + QListBox *familyListBox() const; + virtual void updateFamilies(); + + QListBox *styleListBox() const; + virtual void updateStyles(); + + QListBox *sizeListBox() const; + virtual void updateSizes(); + + QComboBox *scriptCombo() const; + virtual void updateScripts(); +%End + +protected slots: +%If (- Qt_3_2_0) + void sizeChanged(const QString &); +%End + +private: + QFontDialog(QWidget * /TransferThis/ = 0,const char * = 0,bool = 0, + WFlags = 0); +%If (Qt_2_1_0 -) + QFontDialog(const QFontDialog &); +%End + ~QFontDialog(); +}; + +%End +%End diff --git a/sip/qt/qfontinfo.sip b/sip/qt/qfontinfo.sip new file mode 100644 index 0000000..d58eab0 --- /dev/null +++ b/sip/qt/qfontinfo.sip @@ -0,0 +1,70 @@ +// This is the SIP interface definition for QFontInfo. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QFontInfo + +QFontInfo is fully implemented. + + +%End + + +class QFontInfo +{ +%TypeHeaderCode +#include +%End + +public: + QFontInfo(const QFont &); +%If (Qt_3_2_0 -) + QFontInfo(const QFont &,QFont::Script); +%End + QFontInfo(const QFontInfo &); + +%If (- Qt_2_00) + const char *family() const; +%End +%If (Qt_2_00 -) + QString family() const; +%End +%If (Qt_3_0_0 -) + int pixelSize() const; +%End + int pointSize() const; + bool italic() const; + int weight() const; + bool bold() const; + bool underline() const; +%If (Qt_3_2_0 -) + bool overline() const; +%End + bool strikeOut() const; + bool fixedPitch() const; + QFont::StyleHint styleHint() const; +%If (- Qt_3_0_0) + QFont::CharSet charSet() const; +%End + bool rawMode() const; + bool exactMatch() const; +}; diff --git a/sip/qt/qfontmetrics.sip b/sip/qt/qfontmetrics.sip new file mode 100644 index 0000000..e5059fb --- /dev/null +++ b/sip/qt/qfontmetrics.sip @@ -0,0 +1,220 @@ +// This is the SIP interface definition for QFontMetrics. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QFontMetrics + + QRect boundingRect + int x + int y + int w + int h + int flags + const QString &str + int len = -1 + int tabstops = 0 + int *tabarray = 0 + + +The tabarray parameter is a Python list of integers. + + + + QSize size + int flags + const QString &str + int len = -1 + int tabstops = 0 + int *tabarray = 0 + + +The tabarray parameter is a Python list of integers. + + +%End + + +class QFontMetrics +{ +%TypeHeaderCode +#include +%End + +public: + QFontMetrics(const QFont &); +%If (Qt_3_2_0 -) + QFontMetrics(const QFont &,QFont::Script); +%End + QFontMetrics(const QFontMetrics &); + + int ascent() const; + int descent() const; + int height() const; + int leading() const; + int lineSpacing() const; + int minLeftBearing() const; + int minRightBearing() const; + int maxWidth() const; +%If (- Qt_2_00) + bool inFont(char) const; + int leftBearing(char) const; + int rightBearing(char) const; + int width(const char *,int = -1) const; + int width(char) const; + QRect boundingRect(const char *,int = -1) const; + QRect boundingRect(char) const; + + QRect boundingRect(int,int,int,int,int,const char *,int = -1, + SIP_PYLIST /AllowNone/ = 0) const; +%MethodCode + int *tabarray; + + if (intListToArray(a8,&tabarray) < 0) + sipIsErr = 1; + else + { + Py_BEGIN_ALLOW_THREADS + sipRes = new QRect(sipCpp -> QFontMetrics::boundingRect(a0,a1,a2,a3,a4,a5,a6,a7,tabarray)); + Py_END_ALLOW_THREADS + + if (tabarray) + sipFree((ANY *)tabarray); + } +%End + + QSize size(int,const char *,int = -1,int = 0, + SIP_PYLIST /AllowNone/ = 0) const; +%MethodCode + int *tabarray; + + if (intListToArray(a4,&tabarray) < 0) + sipIsErr = 1; + else + { + Py_BEGIN_ALLOW_THREADS + sipRes = new QSize(sipCpp -> QFontMetrics::size(a0,a1,a2,a3,tabarray)); + Py_END_ALLOW_THREADS + + if (tabarray) + sipFree((ANY *)tabarray); + } +%End +%End +%If (Qt_2_00 -) + bool inFont(QChar) const; + int leftBearing(QChar) const; + int rightBearing(QChar) const; + int width(const QString &,int = -1) const; + int width(QChar) const; +%If (Qt_3_0_0 -) + int charWidth(const QString &,int) const; +%End + QRect boundingRect(const QString &,int = -1) const; + QRect boundingRect(QChar) const; + + QRect boundingRect(int,int,int,int,int,const QString &,int = -1, + int = 0,SIP_PYLIST /AllowNone/ = 0) const; +%MethodCode + int *tabarray; + + if (intListToArray(a8,&tabarray) < 0) + sipIsErr = 1; + else + { + Py_BEGIN_ALLOW_THREADS + sipRes = new QRect(sipCpp -> QFontMetrics::boundingRect(a0,a1,a2,a3,a4,*a5,a6,a7,tabarray)); + Py_END_ALLOW_THREADS + + if (tabarray) + sipFree((ANY *)tabarray); + } +%End + + QSize size(int,const QString &,int = -1,int = 0, + SIP_PYLIST /AllowNone/ = 0) const; +%MethodCode + int *tabarray; + + if (intListToArray(a4,&tabarray) < 0) + sipIsErr = 1; + else + { + Py_BEGIN_ALLOW_THREADS + sipRes = new QSize(sipCpp -> QFontMetrics::size(a0,*a1,a2,a3,tabarray)); + Py_END_ALLOW_THREADS + + if (tabarray) + sipFree((ANY *)tabarray); + } +%End +%End + + int underlinePos() const; +%If (Qt_3_2_0 -) + int overlinePos() const; +%End + int strikeOutPos() const; + int lineWidth() const; + +%TypeCode +// Convert an optional Python list of integers to a zero terminated array. +// Return a negative value if there was an error. +static int intListToArray(PyObject *pl,int **ap) +{ + int i, nint, *ip; + + // The trivial case. + if (!pl || pl == Py_None) + { + *ap = 0; + return 0; + } + + nint = PyList_Size(pl); + + if ((*ap = (int *)sipMalloc((nint + 1) * sizeof (int))) == NULL) + return -1; + + // Convert the list. + PyErr_Clear(); + + ip = *ap; + + for (i = 0; i < nint; ++i) + { + *ip++ = PyInt_AsLong(PyList_GetItem(pl,i)); + + if (PyErr_Occurred()) + { + sipFree((ANY *)*ap); + return -1; + } + } + + // Terminate the list. + *ip = 0; + + return 0; +} +%End + +}; diff --git a/sip/qt/qframe.sip b/sip/qt/qframe.sip new file mode 100644 index 0000000..9e2a4e2 --- /dev/null +++ b/sip/qt/qframe.sip @@ -0,0 +1,180 @@ +// This is the SIP interface definition for QFrame. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QFrame + +QFrame is fully implemented. + + +%End + + +class QFrame : QWidget +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_0) + QFrame(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0, + bool = 1); +%End +%If (Qt_3_0_0 -) + QFrame(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); +%End + + int frameStyle() const; +%If (- Qt_2_00) + void setFrameStyle(int); +%End +%If (Qt_2_00 -) + virtual void setFrameStyle(int); +%End + + int frameWidth() const; + QRect contentsRect() const; + +%If (- Qt_2_00) + bool lineShapesOk() const; +%End + + QSize sizeHint() const; +%If (Qt_2_00 - Qt_3_0_0) + QSizePolicy sizePolicy() const; +%End + +%If (- Qt_2_00) + enum { + NoFrame, + Box, + Panel, + WinPanel, + HLine, + VLine, + MShape, + Plain, + Raised, + Sunken, + MShadow + }; +%End +%If (Qt_2_00 -) + enum Shape { + NoFrame, + Box, + Panel, + WinPanel, + HLine, + VLine, + StyledPanel, + PopupPanel, +%If (Qt_3_0_0 -) + MenuBarPanel, + ToolBarPanel, +%End +%If (Qt_3_0_1 -) + LineEditPanel, + TabWidgetPanel, +%End +%If (Qt_3_1_0 -) + GroupBoxPanel, +%End + MShape + }; +%End + +%If (Qt_2_00 -) + enum Shadow { + Plain, + Raised, + Sunken, + MShadow + }; +%End + +%If (- Qt_2_00) + int frameShape() const; +%End +%If (Qt_2_00 -) + Shape frameShape() const; + void setFrameShape(Shape); +%End +%If (- Qt_2_00) + int frameShadow() const; +%End +%If (Qt_2_00 -) + Shadow frameShadow() const; + void setFrameShadow(Shadow); +%End + + int lineWidth() const; +%If (- Qt_2_00) + void setLineWidth(int); +%End +%If (Qt_2_00 -) + virtual void setLineWidth(int); +%End + + int margin() const; +%If (- Qt_2_00) + void setMargin(int); +%End +%If (Qt_2_00 -) + virtual void setMargin(int); +%End + + int midLineWidth() const; +%If (- Qt_2_00) + void setMidLineWidth(int); +%End +%If (Qt_2_00 -) + virtual void setMidLineWidth(int); +%End + + QRect frameRect() const; +%If (Qt_2_00 -) + virtual void setFrameRect(const QRect &); +%End + +protected: +%If (- Qt_2_00) + void setFrameRect(const QRect &); +%End + void paintEvent(QPaintEvent *); + void resizeEvent(QResizeEvent *); + virtual void drawFrame(QPainter *); + virtual void drawContents(QPainter *); + virtual void frameChanged(); +%If (Qt_2_00 - Qt_3_0_0) + void updateMask(); + virtual void drawFrameMask(QPainter *); + virtual void drawContentsMask(QPainter *); +%End +%If (Qt_3_1_0 -) + void styleChange(QStyle &); +%End + +private: + QFrame(const QFrame &); +}; diff --git a/sip/qt/qglobal.sip b/sip/qt/qglobal.sip new file mode 100644 index 0000000..e2fb63a --- /dev/null +++ b/sip/qt/qglobal.sip @@ -0,0 +1,74 @@ +// This is the SIP interface definition for some Qt globals. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ModuleHeaderCode +#include +%End + + +const int QT_VERSION; +const char *QT_VERSION_STR; + +typedef unsigned char uchar; +typedef unsigned short ushort; +typedef unsigned uint; +typedef unsigned long ulong; +typedef char * pchar; +typedef uchar * puchar; +typedef const char * pcchar; + +typedef char Q_INT8; +typedef unsigned char Q_UINT8; +typedef short Q_INT16; +typedef unsigned short Q_UINT16; +typedef int Q_INT32; +typedef unsigned Q_UINT32; + +%If (Qt_Q_LONG_IS_long) +typedef long Q_LONG; +typedef unsigned long Q_ULONG; +%End +%If (!Qt_Q_LONG_IS_long) +typedef long long Q_LONG; +typedef unsigned long long Q_ULONG; +%End + +const char *qVersion(); + +%If (Qt_3_0_0 -) +%End + +%If (Qt_3_1_0 -) +const char *qInstallPath(); +const char *qInstallPathDocs(); +const char *qInstallPathHeaders(); +const char *qInstallPathLibs(); +const char *qInstallPathBins(); +const char *qInstallPathPlugins(); +const char *qInstallPathData(); +%End +%If (Qt_3_2_0 -) +const char *qInstallPathTranslations(); +%If (!WS_WIN) +const char *qInstallPathSysconf(); +%End +%End diff --git a/sip/qt/qgmanager.sip b/sip/qt/qgmanager.sip new file mode 100644 index 0000000..5a194b8 --- /dev/null +++ b/sip/qt/qgmanager.sip @@ -0,0 +1,88 @@ +// This is the SIP interface definition for QGManager. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QGManager (Qt v1.x) + +QGManager is fully implemented. + + + +QChain (Qt v1.x) + +QChain is implemented as an opaque class. + + +%End + + +%If (- Qt_2_00) + +class QChain; + + +class QGManager : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QGManager(QWidget *,const char * = 0); + + enum Direction { + LeftToRight, + RightToLeft, + Down, + Up + }; + + enum { + unlimited = QCOORD_MAX + }; + + void setBorder(int); + QChain *newSerChain(Direction); + QChain *newParChain(Direction); + bool add(QChain *,QChain *,int = 0); + bool addWidget(QChain *,QWidget *,int = 0); + bool addSpacing(QChain *,int,int = 0,int = unlimited); + bool addBranch(QChain *,QChain *,int,int); + void setStretch(QChain *,int); + bool activate(); + void freeze(int = 0,int = 0); + void unFreeze(); + QChain *xChain(); + QChain *yChain(); + void setMenuBar(QWidget *); + QWidget *mainWidget(); + void remove(QWidget *); + void setName(QChain *,const char *); + +protected: + bool eventFilter(QObject *,QEvent *); + +private: + QGManager(const QGManager &); +}; + +%End diff --git a/sip/qt/qgrid.sip b/sip/qt/qgrid.sip new file mode 100644 index 0000000..f26acb3 --- /dev/null +++ b/sip/qt/qgrid.sip @@ -0,0 +1,72 @@ +// This is the SIP interface definition for QGrid. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QGrid (Qt v2+) + +QGrid is fully implemented. + + +%End + + +%If (Qt_2_00 -) + +class QGrid : QFrame +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_0) + enum Direction { + Horizontal, + Vertical + }; +%End + + QGrid(int,QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); +%If (- Qt_3_0_0) + QGrid(int,Direction,QWidget * /TransferThis/ = 0,const char * = 0, + WFlags = 0); +%End +%If (Qt_3_0_0 -) + QGrid(int,Orientation,QWidget * /TransferThis/ = 0,const char * = 0, + WFlags = 0); +%End + + void setSpacing(int); +%If (Qt_2_1_0 -) + QSize sizeHint() const; +%End + +protected: + void frameChanged(); + +private: +%If (Qt_2_1_0 -) + QGrid(const QGrid &); +%End +}; + +%End diff --git a/sip/qt/qgridview.sip b/sip/qt/qgridview.sip new file mode 100644 index 0000000..d1ca16b --- /dev/null +++ b/sip/qt/qgridview.sip @@ -0,0 +1,76 @@ +// This is the SIP interface definition for QGridView. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QGridView (Qt v3+) + +QGridView is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QGridView : QScrollView +{ +%TypeHeaderCode +#include +%End + +public: + QGridView(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); + + int numRows() const; + virtual void setNumRows(int); + int numCols() const; + virtual void setNumCols(int); + + int cellWidth() const; + virtual void setCellWidth(int); + int cellHeight() const; + virtual void setCellHeight(int); + + QRect cellRect() const; + QRect cellGeometry(int,int); + QSize gridSize() const; + + int rowAt(int) const; + int columnAt(int) const; + + void repaintCell(int,int,bool = 1); + void updateCell(int,int); + void ensureCellVisible(int,int); + +protected: + virtual void paintCell(QPainter *,int,int) = 0; + virtual void paintEmptyArea(QPainter *,int,int,int,int); + + void drawContents(QPainter *,int,int,int,int); + + virtual void dimensionChange(int,int); + +private: + QGridView(const QGridView &); +}; + +%End diff --git a/sip/qt/qgroupbox.sip b/sip/qt/qgroupbox.sip new file mode 100644 index 0000000..c420082 --- /dev/null +++ b/sip/qt/qgroupbox.sip @@ -0,0 +1,135 @@ +// This is the SIP interface definition for QGroupBox. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QGroupBox + +QGroupBox is fully implemented. + + +%End + + +class QGroupBox : QFrame +{ +%TypeHeaderCode +#include +%End + +public: + QGroupBox(QWidget * /TransferThis/ = 0,const char * = 0); +%If (- Qt_2_00) + QGroupBox(const char *,QWidget * /TransferThis/ = 0,const char * = 0); +%End +%If (Qt_2_00 -) + QGroupBox(const QString &,QWidget * /TransferThis/ = 0, + const char * = 0); + QGroupBox(int,Orientation,QWidget * /TransferThis/ = 0, + const char * = 0); + QGroupBox(int,Orientation,const QString &,QWidget * /TransferThis/ = 0, + const char * = 0); +%End + +%If (Qt_2_00 -) + virtual void setColumnLayout(int,Orientation); +%End + +%If (- Qt_2_00) + const char *title() const; + void setTitle(const char *); +%End +%If (Qt_2_00 -) + QString title() const; + virtual void setTitle(const QString &); +%End + + int alignment() const; +%If (- Qt_2_00) + void setAlignment(int); +%End +%If (Qt_2_00 -) + virtual void setAlignment(int); +%End + +%If (Qt_2_1_0 -) + int columns() const; + void setColumns(int); + + Orientation orientation() const; + void setOrientation(Orientation); +%End + +%If (Qt_3_0_0 -) + int insideMargin() const; + int insideSpacing() const; + void setInsideMargin(int); + void setInsideSpacing(int); +%End + +%If (Qt_2_1_0 -) + void addSpace(int); +%End +%If (Qt_2_2_0 -) + QSize sizeHint() const; +%End + +%If (Qt_3_1_0 -) + bool isFlat() const; + void setFlat(bool); +%End +%If (Qt_3_2_0 -) + bool isCheckable() const; + void setCheckable(bool); + bool isChecked() const; + void setEnabled(bool); +%End + +public slots: +%If (Qt_3_2_0 -) + void setChecked(bool); +%End + +signals: +%If (Qt_3_2_0 -) + void toggled(bool); +%End + +protected: +%If (Qt_2_2_0 -) + bool event(QEvent *); +%End +%If (Qt_2_00 -) + void childEvent(QChildEvent *); + void resizeEvent(QResizeEvent *); +%End + void paintEvent(QPaintEvent *); +%If (Qt_2_00 - Qt_3_0_0) + void updateMask(); +%End +%If (Qt_2_1_0 -) + void focusInEvent(QFocusEvent *); + void fontChange(const QFont &); +%End + +private: + QGroupBox(const QGroupBox &); +}; diff --git a/sip/qt/qhbox.sip b/sip/qt/qhbox.sip new file mode 100644 index 0000000..7e5b2ee --- /dev/null +++ b/sip/qt/qhbox.sip @@ -0,0 +1,75 @@ +// This is the SIP interface definition for QHBox. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QHBox (Qt v2+) + +QHBox is fully implemented. + + +%End + + +%If (Qt_2_00 -) + +class QHBox : QFrame +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_0) + QHBox(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0, + bool = 1); +%End +%If (Qt_3_0_0 -) + QHBox(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); +%End + + void setSpacing(int); +%If (Qt_2_1_0 -) + bool setStretchFactor(QWidget *,int); + QSize sizeHint() const; +%End + +protected: +%If (- Qt_3_0_0) + QHBox(bool,QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0, + bool = 1); +%End +%If (Qt_3_0_0 - Qt_3_2_0) + QHBox(bool,QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); +%End +%If (Qt_3_2_0 -) + QHBox(bool,QWidget * /TransferThis/,const char *,WFlags = 0); +%End + + void frameChanged(); + +private: +%If (Qt_3_1_0 -) + QHBox(const QHBox &); +%End +}; + +%End diff --git a/sip/qt/qhbuttongroup.sip b/sip/qt/qhbuttongroup.sip new file mode 100644 index 0000000..60cad68 --- /dev/null +++ b/sip/qt/qhbuttongroup.sip @@ -0,0 +1,48 @@ +// This is the SIP interface definition for QHButtonGroup. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QHButtonGroup (Qt v2+) + +QHButtonGroup is fully implemented. + + +%End + + +%If (Qt_2_00 -) + +class QHButtonGroup : QButtonGroup +{ +%TypeHeaderCode +#include +%End + +public: + QHButtonGroup(QWidget * /TransferThis/ = 0,const char * = 0); + QHButtonGroup(const QString &,QWidget * /TransferThis/ = 0,const char * = 0); + +private: + QHButtonGroup(const QHButtonGroup &); +}; + +%End diff --git a/sip/qt/qheader.sip b/sip/qt/qheader.sip new file mode 100644 index 0000000..3030208 --- /dev/null +++ b/sip/qt/qheader.sip @@ -0,0 +1,268 @@ +// This is the SIP interface definition for QHeader. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QHeader + +QHeader is fully implemented. + + +%End + + +%If (- Qt_2_00) + +class QHeader : QTableView +{ +%TypeHeaderCode +#include +%End + +public: + QHeader(QWidget * /TransferThis/ = 0,const char * = 0); + QHeader(int,QWidget * /TransferThis/ = 0,const char * = 0); + + enum Orientation { + Horizontal, + Vertical + }; + + int addLabel(const char *,int = -1); + void setLabel(int,const char *,int = -1); + const char *label(int); + void setOrientation(Orientation); + Orientation orientation() const; + void setTracking(bool); + bool tracking() const; + void setClickEnabled(bool,int = -1); + void setResizeEnabled(bool,int = -1); + void setMovingEnabled(bool); + void setCellSize(int,int); + int cellSize(int) const; + int cellPos(int) const; + int cellAt(int) const; + int count() const; + int offset() const; + QSize sizeHint() const; + int mapToLogical(int) const; + int mapToActual(int) const; + +public slots: + void setOffset(int); + +signals: + void sectionClicked(int); + void sizeChange(int,int,int); + void moved(int,int); + +protected: + void resizeEvent(QResizeEvent *); + QRect sRect(int); + void paintCell(QPainter *,int,int); + void setupPainter(QPainter *); + int cellHeight(int); + int cellWidth(int); + void mousePressEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); + +private: + QHeader(const QHeader &); +}; + +%End + + +%If (Qt_2_00 -) + +class QHeader : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QHeader(QWidget * /TransferThis/ = 0,const char * = 0); + QHeader(int,QWidget * /TransferThis/ = 0,const char * = 0); + + int addLabel(const QString &,int = -1); + int addLabel(const QIconSet &,const QString &,int = -1); +%If (Qt_2_1_0 -) + void removeLabel(int); +%End + virtual void setLabel(int,const QString &,int = -1); + virtual void setLabel(int,const QIconSet &,const QString &,int = -1); + + QString label(int) const; + QIconSet *iconSet(int) const; + + virtual void setOrientation(Orientation); + Orientation orientation() const; + virtual void setTracking(bool); + bool tracking() const; + + virtual void setClickEnabled(bool,int = -1); + virtual void setResizeEnabled(bool,int = -1); + virtual void setMovingEnabled(bool); +%If (Qt_3_0_0 -) + virtual void setStretchEnabled(bool,int); +%End +%If (Qt_2_1_0 -) + bool isClickEnabled(int = -1) const; + bool isResizeEnabled(int = -1) const; + bool isMovingEnabled() const; +%End +%If (Qt_3_0_0 -) + bool isStretchEnabled() const; + bool isStretchEnabled(int) const; +%End + +%If (Qt_2_1_0 -) + void resizeSection(int,int); + int sectionSize(int) const; + int sectionPos(int) const; + int sectionAt(int) const; +%End + int count() const; +%If (Qt_3_0_0 -) + int headerWidth() const; + QRect sectionRect(int) const; +%End + +%If (- Qt_3_0_0) + virtual void setCellSize(int,int); + int cellSize(int) const; + int cellPos(int) const; + int cellAt(int) const; +%End + + int offset() const; + + QSize sizeHint() const; +%If (- Qt_3_0_0) + QSizePolicy sizePolicy() const; +%End + +%If (Qt_2_1_0 -) + int mapToSection(int) const; + int mapToIndex(int) const; +%End +%If (- Qt_3_0_0) + int mapToLogical(int) const; + int mapToActual(int) const; +%End + +%If (Qt_2_1_0 -) + void moveSection(int,int); +%End +%If (- Qt_3_0_0) + virtual void moveCell(int,int); +%End + +%If (Qt_3_2_0 -) + // This is placed before the obsolete version below so that it has + // precedence. It may still cause problems with old code until SIP + // distinguishes between bools and enums. + void setSortIndicator(int,SortOrder); + int sortIndicatorSection() const; + SortOrder sortIndicatorOrder() const; +%End +%If (Qt_2_1_0 -) + // Obsolete. + void setSortIndicator(int,bool = 1); +%End + +%If (Qt_3_0_0 -) + void adjustHeaderSize(); +%End + +public slots: +%If (Qt_2_2_0 -) + void setUpdatesEnabled(bool); +%End + virtual void setOffset(int); + +signals: +%If (Qt_2_1_0 -) + void clicked(int); + void pressed(int); + void released(int); +%End + void sizeChange(int,int,int); +%If (Qt_2_1_0 -) + void indexChange(int,int,int); +%End +%If (- Qt_3_0_0) + void sectionClicked(int); + void moved(int,int); +%End +%If (Qt_3_2_0 -) + void sectionHandleDoubleClicked(int); +%End + +protected: +%If (Qt_2_1_0 -) + void paintEvent(QPaintEvent *); +%End +%If (Qt_2_2_0 -) + void showEvent(QShowEvent *); +%End +%If (- Qt_2_1_0) + void resizeEvent(QResizeEvent *); +%End +%If (Qt_3_0_0 -) + void resizeEvent(QResizeEvent *); +%End + QRect sRect(int); + +%If (- Qt_3_0_0) + void paintSection(QPainter *,int,QRect); +%End +%If (Qt_2_1_0 - Qt_3_0_0) + void paintSectionLabel(QPainter *,int,const QRect &); +%End +%If (Qt_3_0_0 -) + virtual void paintSection(QPainter *,int,const QRect &); + virtual void paintSectionLabel(QPainter *,int,const QRect &); +%End + +%If (Qt_3_1_0 -) + void fontChange(const QFont &); +%End + + void mousePressEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); +%If (Qt_3_2_0 -) + void mouseDoubleClickEvent(QMouseEvent *); +%End + +%If (Qt_3_1_0 -) + void keyPressEvent(QKeyEvent *); + void keyReleaseEvent(QKeyEvent *); +%End + +private: + QHeader(const QHeader &); +}; + +%End diff --git a/sip/qt/qhgroupbox.sip b/sip/qt/qhgroupbox.sip new file mode 100644 index 0000000..c12059a --- /dev/null +++ b/sip/qt/qhgroupbox.sip @@ -0,0 +1,48 @@ +// This is the SIP interface definition for QHGroupBox. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QHGroupBox (Qt v2+) + +QHGroupBox is fully implemented. + + +%End + + +%If (Qt_2_00 -) + +class QHGroupBox : QGroupBox +{ +%TypeHeaderCode +#include +%End + +public: + QHGroupBox(QWidget * /TransferThis/ = 0,const char * = 0); + QHGroupBox(const QString &,QWidget * /TransferThis/ = 0,const char * = 0); + +private: + QHGroupBox(const QHGroupBox &); +}; + +%End diff --git a/sip/qt/qiconset.sip b/sip/qt/qiconset.sip new file mode 100644 index 0000000..4a55058 --- /dev/null +++ b/sip/qt/qiconset.sip @@ -0,0 +1,146 @@ +// This is the SIP interface definition for QIconSet and QIconFactory. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QIconSet + +QIconSet is fully implemented. + + + +QIconFactory (Qt v3.1+) + +QIconFactory is fully implemented. + + +%End + + +class QIconSet +{ +%TypeHeaderCode +#include +%End + +public: + enum Size { + Automatic, + Small, + Large + }; + + enum Mode { + Normal, + Disabled, + Active + }; + +%If (Qt_3_0_0 -) + enum State { + On, + Off + }; +%End + +%If (Qt_2_1_0 -) + QIconSet(); +%End + QIconSet(const QPixmap &,Size = Automatic); +%If (Qt_2_2_0 -) + QIconSet(const QPixmap &,const QPixmap &); +%End + QIconSet(const QIconSet &); + + void reset(const QPixmap &,Size); + +%If (- Qt_2_00) + void setPixmap(const QPixmap &,Size,Mode = Normal); + void setPixmap(const char *,Size,Mode = Normal); +%End +%If (Qt_2_00 - Qt_3_0_0) + virtual void setPixmap(const QPixmap &,Size,Mode = Normal); + virtual void setPixmap(const QString &,Size,Mode = Normal); +%End +%If (Qt_3_0_0 -) + virtual void setPixmap(const QPixmap &,Size,Mode = Normal,State = Off); + virtual void setPixmap(const QString &,Size,Mode = Normal,State = Off); +%End +%If (- Qt_3_0_0) + QPixmap pixmap(Size,Mode) const; +%If (Qt_2_1_0 -) +// QPixmap pixmap(Size,bool) const; +%End +%End +%If (Qt_3_0_0 -) + QPixmap pixmap(Size,Mode,State = Off) const; +// QPixmap pixmap(Size,bool,State = Off) const; +%End + QPixmap pixmap() const; +%If (- Qt_3_0_0) + bool isGenerated(Size,Mode) const; +%End +%If (Qt_3_0_0 -) + bool isGenerated(Size,Mode,State = Off) const; + void clearGenerated(); +%End +%If (Qt_3_1_0 -) + void installIconFactory(QIconFactory *); +%End + +%If (Qt_2_1_0 -) + bool isNull() const; +%End + + void detach(); + +%If (Qt_3_0_0 -) + static void setIconSize(Size,const QSize &); + static const QSize &iconSize(Size); +%End +}; + + +%If (Qt_3_1_0 -) + +class QIconFactory +{ +%TypeHeaderCode +#include +%End + +public: + QIconFactory(); + + virtual QPixmap *createPixmap(const QIconSet &,QIconSet::Size, + QIconSet::Mode, + QIconSet::State) /Factory/; + void setAutoDelete(bool); + bool autoDelete() const; + + static QIconFactory *defaultFactory(); + static void installDefaultFactory(QIconFactory * /Transfer/); + +private: + QIconFactory(const QIconFactory &); +}; + +%End diff --git a/sip/qt/qiconview.sip b/sip/qt/qiconview.sip new file mode 100644 index 0000000..122d2ec --- /dev/null +++ b/sip/qt/qiconview.sip @@ -0,0 +1,457 @@ +// This is the SIP interface definition for QIconView, QIconViewItem, QIconDrag +// and QIconDragItem. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QIconView (Qt v2.1+) + + QIconViewItem *makeRowLayout + QIconViewItem *begin + int &y + + +Not yet implemented. + + + +QIconViewItem (Qt v2.1+) + +QIconViewItem is fully implemented. + + + +QIconDrag (Qt v2.1+) + +QIconDrag is fully implemented. + + + +QIconDragItem (Qt v2.1+) + +QIconDragItem is fully implemented. + + +%End + + +%If (Qt_ICONVIEW) +%If (Qt_2_1_0 -) + +%If (Qt_DRAGANDDROP) + +class QIconDragItem +{ +%TypeHeaderCode +#include +%End + +public: + QIconDragItem(); + + virtual QByteArray data() const; + virtual void setData(const QByteArray &); +}; + + +class QIconDrag : QDragObject +{ +%TypeHeaderCode +#include +%End + +public: + QIconDrag(QWidget * /TransferThis/,const char * = 0); + + void append(const QIconDragItem &,const QRect &,const QRect &); + + virtual const char* format(int) const; + static bool canDecode(QMimeSource *); + virtual QByteArray encodedData(const char *) const; + +private: +%If (Qt_3_1_0 -) + QIconDrag(const QIconDrag &); +%End +}; + +%End + + +class QIconViewItem : Qt +{ +%TypeHeaderCode +#include +%End + +public: + QIconViewItem(QIconView * /TransferThis/); + QIconViewItem(QIconView * /TransferThis/,QIconViewItem *); + QIconViewItem(QIconView * /TransferThis/,const QString &); + QIconViewItem(QIconView * /TransferThis/,QIconViewItem *, + const QString &); + QIconViewItem(QIconView * /TransferThis/,const QString &, + const QPixmap &); + QIconViewItem(QIconView * /TransferThis/,QIconViewItem *, + const QString &,const QPixmap &); +%If (Qt_3_0_0 -) + QIconViewItem(QIconView * /TransferThis/,const QString &, + const QPicture &); + QIconViewItem(QIconView * /TransferThis/,QIconViewItem *, + const QString &,const QPicture &); +%End + + virtual void setRenameEnabled(bool); + virtual void setDragEnabled(bool); + virtual void setDropEnabled(bool); + + virtual QString text() const; + virtual QPixmap *pixmap() const; +%If (Qt_3_0_0 -) + virtual QPicture *picture() const; +%End + virtual QString key() const; + + bool renameEnabled() const; + bool dragEnabled() const; + bool dropEnabled() const; + + QIconView *iconView() const; + QIconViewItem *prevItem() const; + QIconViewItem *nextItem() const; + + int index() const; + + virtual void setSelected(bool,bool); + virtual void setSelected(bool); + virtual void setSelectable(bool); + + bool isSelected() const; + bool isSelectable() const; + + virtual void repaint(); + +%If (- Qt_3_0_0) + virtual void move(int,int); +%End +%If (Qt_3_0_0 -) + virtual bool move(int,int); +%End + virtual void moveBy(int,int); +%If (- Qt_3_0_0) + virtual void move(const QPoint &); +%End +%If (Qt_3_0_0 -) + virtual bool move(const QPoint &); +%End + virtual void moveBy(const QPoint &); + + QRect rect() const; + int x() const; + int y() const; + int width() const; + int height() const; + QSize size() const; + QPoint pos() const; + QRect textRect(bool = 1) const; + QRect pixmapRect(bool = 1) const; +%If (- Qt_3_0_0) + bool contains(QPoint) const; + bool intersects(QRect) const; +%End +%If (Qt_3_0_0 -) + bool contains(const QPoint &) const; + bool intersects(const QRect &) const; +%End + + virtual bool acceptDrop(const QMimeSource *) const; + + void rename(); + + virtual int compare(QIconViewItem *) const; + + virtual void setText(const QString &); + virtual void setPixmap(const QPixmap &); +%If (Qt_3_0_0 -) + virtual void setPicture(const QPicture &); +%End + virtual void setText(const QString &,bool,bool = 1); + virtual void setPixmap(const QPixmap &,bool,bool = 1); + virtual void setKey(const QString &); + +%If (Qt_3_0_0 -) + virtual int rtti() const; +%End + +protected: + virtual void removeRenameBox(); + virtual void calcRect(const QString & = QString::null); + virtual void paintItem(QPainter *,const QColorGroup &); + virtual void paintFocus(QPainter *,const QColorGroup &); +%If (Qt_DRAGANDDROP) + virtual void dropped(QDropEvent *,const QValueList &); +%End + virtual void dragEntered(); + virtual void dragLeft(); + void setItemRect(const QRect &); + void setTextRect(const QRect &); + void setPixmapRect(const QRect &); + void calcTmpText(); +%If (Qt_3_1_0 -) + QString tempText() const; +%End +}; + + +class QIconView : QScrollView +{ +%TypeHeaderCode +#include +%End + +public: + enum SelectionMode { + Single, + Multi, + Extended, + NoSelection + }; + + enum Arrangement { + LeftToRight, + TopToBottom + }; + + enum ResizeMode { + Fixed, + Adjust + }; + + enum ItemTextPos { + Bottom, + Right + }; + + QIconView(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); + + virtual void insertItem(QIconViewItem *,QIconViewItem * = 0); + virtual void takeItem(QIconViewItem *); + + int index(const QIconViewItem *) const; + + QIconViewItem *firstItem() const; + QIconViewItem *lastItem() const; + QIconViewItem *currentItem() const; + virtual void setCurrentItem(QIconViewItem *); + virtual void setSelected(QIconViewItem *,bool,bool = 0); + + uint count() const; + + virtual void showEvent(QShowEvent *); + + virtual void setSelectionMode(SelectionMode); + SelectionMode selectionMode() const; + + QIconViewItem *findItem(const QPoint &) const; +%If (- Qt_3_0_0) + QIconViewItem *findItem(const QString &) const; +%End +%If (Qt_3_0_0 -) + QIconViewItem *findItem(const QString &, + ComparisonFlags = BeginsWith) const; +%End + virtual void selectAll(bool); + virtual void clearSelection(); + virtual void invertSelection(); + + virtual void repaintItem(QIconViewItem *); +%If (Qt_3_1_0 -) + void repaintSelectedItems(); +%End + + void ensureItemVisible(QIconViewItem *); + QIconViewItem* findFirstVisibleItem(const QRect &) const; + QIconViewItem* findLastVisibleItem(const QRect &) const; + + virtual void clear(); + + virtual void setGridX(int); + virtual void setGridY(int); + int gridX() const; + int gridY() const; + virtual void setSpacing(int); + int spacing() const; + virtual void setItemTextPos(ItemTextPos); + ItemTextPos itemTextPos() const; + virtual void setItemTextBackground(const QBrush &); + QBrush itemTextBackground() const; + virtual void setArrangement(Arrangement); + Arrangement arrangement() const; + virtual void setResizeMode(ResizeMode); + ResizeMode resizeMode() const; + virtual void setMaxItemWidth(int); + int maxItemWidth() const; + virtual void setMaxItemTextLength(int); + int maxItemTextLength() const; + virtual void setAutoArrange(bool); + bool autoArrange() const; + virtual void setShowToolTips(bool); + bool showToolTips() const; + + void setSorting(bool,bool = 1); + bool sorting() const; + bool sortDirection() const; + + virtual void setItemsMovable(bool); + bool itemsMovable() const; + virtual void setWordWrapIconText(bool); + bool wordWrapIconText() const; + + bool eventFilter(QObject *,QEvent *); + + QSize minimumSizeHint() const; +%If (- Qt_3_0_0) + QSizePolicy sizePolicy() const; +%End + QSize sizeHint() const; + + virtual void sort(bool = 1); + + virtual void setFont(const QFont &); + virtual void setPalette(const QPalette &); + +%If (Qt_3_0_0 -) + bool isRenaming() const; +%End + +public slots: + virtual void arrangeItemsInGrid(const QSize &,bool = 1); + virtual void arrangeItemsInGrid(bool = 1); + virtual void setContentsPos(int,int); + virtual void updateContents(); + +signals: + void selectionChanged(); + void selectionChanged(QIconViewItem *); + void currentChanged(QIconViewItem *); + void clicked(QIconViewItem *); + void clicked(QIconViewItem *,const QPoint &); + void pressed(QIconViewItem *); + void pressed(QIconViewItem *,const QPoint &); + + void doubleClicked(QIconViewItem *); + void returnPressed(QIconViewItem *); + void rightButtonClicked(QIconViewItem *,const QPoint &); + void rightButtonPressed(QIconViewItem *,const QPoint &); + void mouseButtonPressed(int,QIconViewItem *,const QPoint &); + void mouseButtonClicked(int,QIconViewItem *,const QPoint &); +%If (Qt_3_0_0 -) + void contextMenuRequested(QIconViewItem *,const QPoint &); +%End +%If (Qt_DRAGANDDROP) + void dropped(QDropEvent *,const QValueList &); +%End + void moved(); + void onItem(QIconViewItem *); + void onViewport(); + void itemRenamed(QIconViewItem *,const QString &); + void itemRenamed(QIconViewItem *); + +protected slots: + virtual void doAutoScroll(); + virtual void adjustItems(); + virtual void slotUpdate(); + +protected: +%If (- Qt_3_0_0) + virtual void drawContents(QPainter *,int,int,int,int); + virtual void contentsMousePressEvent(QMouseEvent *); + virtual void contentsMouseReleaseEvent(QMouseEvent *); + virtual void contentsMouseMoveEvent(QMouseEvent *); + virtual void contentsMouseDoubleClickEvent(QMouseEvent *); +%End +%If (Qt_3_0_0 -) + void drawContents(QPainter *,int,int,int,int); + void contentsMousePressEvent(QMouseEvent *); + void contentsMouseReleaseEvent(QMouseEvent *); + void contentsMouseMoveEvent(QMouseEvent *); + void contentsMouseDoubleClickEvent(QMouseEvent *); + void contentsContextMenuEvent(QContextMenuEvent *); +%End + +%If (- Qt_3_0_0) +%If (Qt_DRAGANDDROP) + virtual void contentsDragEnterEvent(QDragEnterEvent *); + virtual void contentsDragMoveEvent(QDragMoveEvent *); + virtual void contentsDragLeaveEvent(QDragLeaveEvent *); + virtual void contentsDropEvent(QDropEvent *); +%End + + virtual void resizeEvent(QResizeEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual void focusInEvent(QFocusEvent *); + virtual void focusOutEvent(QFocusEvent *); + virtual void enterEvent(QEvent *); +%End +%If (Qt_3_0_0 -) +%If (Qt_DRAGANDDROP) + void contentsDragEnterEvent(QDragEnterEvent *); + void contentsDragMoveEvent(QDragMoveEvent *); + void contentsDragLeaveEvent(QDragLeaveEvent *); + void contentsDropEvent(QDropEvent *); +%End + + void resizeEvent(QResizeEvent *); + void keyPressEvent(QKeyEvent *); + void focusInEvent(QFocusEvent *); + void focusOutEvent(QFocusEvent *); + void enterEvent(QEvent *); +%End + + virtual void drawRubber(QPainter *); +%If (Qt_DRAGANDDROP) + virtual QDragObject *dragObject(); + virtual void startDrag(); +%End + virtual void insertInGrid(QIconViewItem *); + virtual void drawBackground(QPainter *,const QRect &); + + void emitSelectionChanged(QIconViewItem * = 0); + void emitRenamed(QIconViewItem *); + +%If (- Qt_3_0_0) +// QIconViewItem *makeRowLayout(QIconViewItem *,int &); +%End +%If (Qt_3_0_0 -) +// QIconViewItem *makeRowLayout(QIconViewItem *,int &,bool &); +%End + + void styleChange(QStyle &); +%If (Qt_3_0_0 -) + void windowActivationChange(bool); +%End + +private: + QIconView(const QIconView &); +}; + +%End +%End diff --git a/sip/qt/qimage.sip b/sip/qt/qimage.sip new file mode 100644 index 0000000..5c9b0bb --- /dev/null +++ b/sip/qt/qimage.sip @@ -0,0 +1,544 @@ +// This is the SIP interface definition for QImage, QImageIO and +// QImageTextKeyLang. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QImage + +The Python == and != operators are +supported. + + + + QImage + const char *xpm[] + + +This takes a list of strings as its parameter. + + + + QImage + uchar *data + int w + int h + int depth + QRgb *colorTable + int numColors + Endian bitOrder + + +The colorTable parameter is a list of QRgb instances or +None. (Qt v2.1+) + + + + uchar *bits + + + +The return value is a sip.voidptr object which is only +useful if passed to another Python module. + + + + QRgb *colorTable + + + +The return value is a sip.voidptr object which is only +useful if passed to another Python module. + + + + QImage convertDepthWithPalette + int + QRgb *p + int pc + int cf = 0 + + +Not implemented. + + + + uchar **jumpTable + + + +The return value is a sip.voidptr object which is only +useful if passed to another Python module. + + + + bool loadFromData + const uchar *buf + uint len + const char *format = 0 + ColorMode mode = Auto + + +len is derived from buf and not passed as +a parameter. + + + + uchar *scanLine + int i + + +The return value is a sip.voidptr object which is only +useful if passed to another Python module. + + + +QImageIO + + static void defineIOHandler + const char *format + const char *header + const char *flags + image_io_handler read_image + image_io_handler write_image + + +Not implemented. + + + +QImageTextKeyLang + +QImageTextKeyLang is fully implemented. + + +%End + + +class QImage +{ +%TypeHeaderCode +#include +%End + +public: + enum Endian { + IgnoreEndian, + BigEndian, + LittleEndian + }; + + QImage(); + QImage(int,int,int,int = 0,Endian = IgnoreEndian); + QImage(const QSize &,int,int = 0,Endian = IgnoreEndian); +%If (- Qt_2_00) + QImage(const char *,char * = 0); +%End +%If (Qt_2_00 -) + QImage(const QString &,char * = 0); +%End + + QImage(SIP_PYLIST) [(const char **)]; +%MethodCode + // The Python interface is a list of strings that make up the + // image. + + const char **str; + + if ((str = PyQt_qt_ListToArray(a0)) == NULL) + sipIsErr = 1; + else + { + // There is no wrapper class for QImage. + + Py_BEGIN_ALLOW_THREADS + sipCpp = new QImage(str); + Py_END_ALLOW_THREADS + + sipFree((ANY *)str); + } +%End + +%If (Qt_2_00 -) + QImage(const QByteArray &); +%End + +%If (Qt_2_1_0 -) + QImage(uchar *,int,int,int,SIP_PYLIST /AllowNone/,int,Endian) [(uchar *,int,int,int,int,QRgb *,int,Endian)]; +%MethodCode + // The Python interface takes a list of QRgb instances. + + QRgb *coltab; + + if (a4 == Py_None) + coltab = 0; + else + { + int len = PyList_Size(a4); + + if (a5 > len) + a5 = len; + + coltab = new QRgb[len]; + + PyErr_Clear(); + + for (int i = 0; i < a5; ++i) + { + coltab[i] = PyLong_AsUnsignedLong(PyList_GetItem(a4,i)); + + if (PyErr_Occurred()) + { + delete[] coltab; + sipIsErr = 1; + break; + } + } + } + + if (!sipIsErr) + { + // There is no wrapper class for QImage. + + Py_BEGIN_ALLOW_THREADS + sipCpp = new QImage(a0,a1,a2,a3,0,a5,(QImage::Endian)a6); + + if (coltab) + { + // Now set the colours using the QImage's self + // allocated colour table. If we had passed in + // coltab as the colour table then we couldn't + // have freed it and it would leak. + for (int i = 0; i < a5; ++i) + sipCpp -> setColor(i,coltab[i]); + + delete[] coltab; + } + Py_END_ALLOW_THREADS + } +%End +%End + + QImage(const QImage &); + + bool operator==(const QImage &) const; + bool operator!=(const QImage &) const; + + void detach(); + QImage copy() const; + QImage copy(int,int,int,int,int = 0) const; +%If (- Qt_3_0_0) + QImage copy(QRect &) const; +%End +%If (Qt_3_0_0 -) + QImage copy(const QRect &) const; +%End +%If (Qt_3_1_0 -) + static QImage fromMimeSource(const QString &); +%End + bool isNull() const; + + int width() const; + int height() const; + QSize size() const; + QRect rect() const; + int depth() const; + int numColors() const; + Endian bitOrder() const; + + QRgb color(int) const; + void setColor(int,QRgb); + void setNumColors(int); + + bool hasAlphaBuffer() const; + void setAlphaBuffer(bool); + + bool allGray() const; + bool isGrayscale() const; + + // Actually returns uchar *. + void *bits() const; + // Actually returns uchar *. + void *scanLine(int) const; + // Actually returns uchar **. + void *jumpTable() const; + // Actually returns QRgb *. + void *colorTable() const; + int numBytes() const; + int bytesPerLine() const; + + bool create(int,int,int,int = 0,Endian = IgnoreEndian); + bool create(const QSize &,int,int = 0,Endian = IgnoreEndian); + void reset(); + + void fill(uint); +%If (Qt_2_00 -) + void invertPixels(bool = 1); +%End + + QImage convertDepth(int) const; +// QImage convertDepthWithPalette(int,QRgb *,int,int = 0) const; + QImage convertDepth(int,int) const; + QImage convertBitOrder(Endian) const; + +%If (- Qt_3_0_0) + QImage smoothScale(int,int) const; +%End +%If (Qt_3_0_0 -) + enum ScaleMode { + ScaleFree, + ScaleMin, + ScaleMax + }; + + QImage smoothScale(int,int,ScaleMode = ScaleFree) const; + QImage smoothScale(const QSize &,ScaleMode = ScaleFree) const; + QImage scale(int,int,ScaleMode = ScaleFree) const; + QImage scale(const QSize &,ScaleMode = ScaleFree) const; + QImage scaleWidth(int) const; + QImage scaleHeight(int) const; + QImage xForm(const QWMatrix &) const; +%End + +%If (- Qt_2_00) + QImage createAlphaMask(bool = 0) const; + QImage createAlphaMask(int) const; +%End +%If (Qt_2_00 -) + QImage createAlphaMask(int = 0) const; +%End + QImage createHeuristicMask(bool = 1) const; +%If (Qt_2_00 -) + QImage mirror() const; +%End +%If (Qt_2_1_0 -) + QImage mirror(bool,bool) const; +%End +%If (Qt_2_00 -) + QImage swapRGB() const; +%End + + static Endian systemBitOrder(); + static Endian systemByteOrder(); + +%If (- Qt_2_00) + static const char *imageFormat(const char *); +%End +%If (Qt_2_00 -) + static const char *imageFormat(const QString &); +%End + static QStrList inputFormats(); + static QStrList outputFormats(); +%If (Qt_2_1_0 -) + static QStringList inputFormatList(); + static QStringList outputFormatList(); +%End +%If (- Qt_2_00) + bool load(const char *,const char * = 0); +%End +%If (Qt_2_00 -) + bool load(const QString &,const char * = 0); +%End + bool loadFromData(const uchar * /Array/,uint /ArraySize/, + const char * = 0); + bool loadFromData(QByteArray,char * = 0); +%If (- Qt_2_00) + bool save(const char *,const char *) const; +%End +%If (Qt_2_00 - Qt_3_0_0) + bool save(const QString &,const char *) const; +%End +%If (Qt_2_2_0 - Qt_3_0_0) + bool save(const QString &,const char *,int) const; +%End +%If (Qt_3_0_0 -) + bool save(const QString &,const char *,int = -1) const; +%End +%If (Qt_3_2_0 -) + bool save(QIODevice *,const char *,int = -1) const; +%End + + bool valid(int,int) const; + int pixelIndex(int,int) const; + QRgb pixel(int,int) const; + void setPixel(int,int,uint); + +%If (Qt_2_1_0 -) + int dotsPerMeterX() const; + int dotsPerMeterY() const; + void setDotsPerMeterX(int); + void setDotsPerMeterY(int); + QPoint offset() const; + void setOffset(const QPoint &); +%If (Qt_IMAGE_TEXT) + QValueList textList() const; + QStringList textLanguages() const; + QStringList textKeys() const; + QString text(const char *,const char * = 0) const; + QString text(const QImageTextKeyLang &) const; + void setText(const char *,const char *,const QString &); +%End +%End +}; + + +void bitBlt(QImage *,int,int,const QImage *,int = 0,int = 0,int = -1,int = -1, + int = 0); + + +class QImageIO +{ +%TypeHeaderCode +#include +%End + +public: + QImageIO(); + QImageIO(QIODevice *,const char *); +%If (Qt_2_00 -) + QImageIO(const QString &,const char *); +%End +%If (- Qt_2_00) + QImageIO(const char *,const char *); +%End + + const QImage &image() const; + int status() const; + const char *format() const; + QIODevice *ioDevice() const; +%If (Qt_2_00 -) + QString fileName() const; +%End +%If (- Qt_2_00) + const char *fileName() const; +%End +%If (Qt_3_0_0 -) + int quality() const; +%End +%If (Qt_2_00 -) + QString description() const; +%End +%If (- Qt_2_00) + const char *description() const; +%End + const char *parameters() const; +%If (Qt_3_0_0 -) + float gamma() const; +%End + + void setImage(const QImage &); + void setStatus(int); + void setFormat(const char *); + void setIODevice(QIODevice *); +%If (Qt_2_00 -) + void setFileName(const QString &); +%End +%If (- Qt_2_00) + void setFileName(const char *); +%End +%If (Qt_3_0_0 -) + void setQuality(int); +%End +%If (Qt_2_00 -) + void setDescription(const QString &); +%End +%If (- Qt_2_00) + void setDescription(const char *); +%End + void setParameters(const char *); +%If (Qt_3_0_0 -) + void setGamma(float); +%End + + bool read(); + bool write(); + + static const char *imageFormat(const QString &); + static const char *imageFormat(QIODevice *); + static QStrList inputFormats(); + static QStrList outputFormats(); + +// static void defineIOHandler(const char *,const char *,const char *, +// image_io_handler,image_io_handler); + +private: + QImageIO(const QImageIO &); +}; + + +%If (Qt_2_1_0 -) +%If (Qt_IMAGE_TEXT) + +class QImageTextKeyLang +{ +%TypeHeaderCode +#include +%End + +public: + QImageTextKeyLang(const char *,const char *); + QImageTextKeyLang(); + + QCString key; + QCString lang; +}; + +%End +%End + + +%ModuleHeaderCode +const char **PyQt_qt_ListToArray(PyObject *lst); +%End + + +%ModuleCode +// Convert a list of strings to an array of strings on the heap. Also used by +// QPixmap. +const char **PyQt_qt_ListToArray(PyObject *lst) +{ + int nstr; + const char **str, **sp; + + nstr = PyList_Size(lst); + + if ((str = (const char **)sipMalloc(nstr * sizeof (char *))) == NULL) + return NULL; + + // Convert the list. + sp = str; + + for (int i = 0; i < nstr; ++i) + { + char *s; + + if ((s = PyString_AsString(PyList_GetItem(lst,i))) == NULL) + { + sipFree((ANY *)str); + return NULL; + } + + *sp++ = s; + } + + return str; +} +%End diff --git a/sip/qt/qinputdialog.sip b/sip/qt/qinputdialog.sip new file mode 100644 index 0000000..80a5394 --- /dev/null +++ b/sip/qt/qinputdialog.sip @@ -0,0 +1,174 @@ +// This is the SIP interface definition for QInputDialog. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QInputDialog (Qt v2.1+) + + static QString getText + const QString &caption + const QString &label + const QString &text = QString::null + bool *ok = 0 + QWidget *parent = 0 + const char *name = 0 + + +The ok is not passed and the returned value is a tuple of +the QString result and the ok flag. +(Qt v2.1 - v2.3.1) + + + + static QString getText + const QString &caption + const QString &label + QLineEdit::EchoModeecho + const QString &text = QString::null + bool *ok = 0 + QWidget *parent = 0 + const char *name = 0 + + +The ok is not passed and the returned value is a tuple of +the QString result and the ok flag. +(Qt v2.2 - v2.3.1) + + + + static QString getText + const QString &caption + const QString &label + QLineEdit::EchoModeecho = QLineEdit::Normal + const QString &text = QString::null + bool *ok = 0 + QWidget *parent = 0 + const char *name = 0 + + +The ok is not passed and the returned value is a tuple of +the QString result and the ok flag. +(Qt v3+) + + + + static int getInteger + const QString &caption + const QString &label + int num = 0 + int from = -2147483647 + int to = 2147483647 + int step = 1 + bool *ok = 0 + QWidget *parent = 0 + const char *name = 0 + + +The ok is not passed and the returned value is a tuple of +the int result and the ok flag. + + + + static double getDouble + const QString &caption + const QString &label + double num = 0 + double from = -2147483647 + double to = 2147483647 + int step = 1 + bool *ok = 0 + QWidget *parent = 0 + const char *name = 0 + + +The ok is not passed and the returned value is a tuple of +the double result and the ok flag. + + + + static QString getItem + const QString &caption + const QString &label + const QStringList &list + int current = 0 + bool editable = TRUE + bool *ok = 0 + QWidget *parent = 0 + const char *name = 0 + + +The ok is not passed and the returned value is a tuple of +the QString result and the ok flag. + + +%End + + +%If (Qt_2_1_0 -) +%If (Qt_INPUTDIALOG) + +class QInputDialog : QDialog +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_0_0 -) + static QString getText(const QString &,const QString &, + QLineEdit::EchoMode = QLineEdit::Normal, + const QString & = QString::null, + bool * = 0,QWidget * = 0,const char * = 0); +%End + +%If (- Qt_3_0_0) + static QString getText(const QString &,const QString &, + const QString & = QString::null, + bool * = 0,QWidget * = 0,const char * = 0); +%End + +%If (Qt_2_2_0 - Qt_3_0_0) + static QString getText(const QString &,const QString &, + QLineEdit::EchoMode, + const QString & = QString::null, + bool * = 0,QWidget * = 0,const char * = 0); +%End + + static int getInteger(const QString &,const QString &,int = 0, + int = -2147483647,int = 2147483647,int = 1, + bool * = 0,QWidget * = 0,const char * = 0); + + static double getDouble(const QString &,const QString &, + double = 0,double = -2147483647, + double = 2147483647,int = 1, + bool * = 0,QWidget * = 0,const char * = 0); + + static QString getItem(const QString &,const QString &, + const QStringList &,int = 0,bool = TRUE, + bool * = 0,QWidget * = 0,const char * = 0); + +private: + QInputDialog(const QInputDialog &); + ~QInputDialog(); +}; + +%End +%End diff --git a/sip/qt/qinterlacestyle.sip b/sip/qt/qinterlacestyle.sip new file mode 100644 index 0000000..5455b2f --- /dev/null +++ b/sip/qt/qinterlacestyle.sip @@ -0,0 +1,103 @@ +// This is the SIP interface definition for QInterlaceStyle. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QInterlaceStyle (Qt v2.3.1+) + + void scrollBarMetrics + const QTabBar *sb + int &sliderMin + int &sliderMax + int &sliderLength + int &buttonDim + + +This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. + + +%End + + +// Temporary until it is ported to Qt3. +%If (Qt_STYLE_INTERLACE) +%If (Qt_2_3_1 - Qt_3_0_0) + +class QInterlaceStyle : QMotifStyle +{ +%TypeHeaderCode +#include +%End + +public: + QInterlaceStyle(); + + void polish(QApplication *); + void unPolish(QApplication *); + void polish(QWidget *); + void unPolish(QWidget *); + int defaultFrameWidth() const; + QRect pushButtonContentsRect(QPushButton *); + void drawFocusRect(QPainter *,const QRect &,const QColorGroup &, + const QColor * = 0,bool = 0); + void drawButton(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,const QBrush * = 0); + void drawButtonMask(QPainter *,int,int,int,int); + void drawBevelButton(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,const QBrush * = 0); + + void drawPushButton(QPushButton *,QPainter *); + QSize indicatorSize() const; + void drawIndicator(QPainter *,int,int,int,int,const QColorGroup &, + int,bool = 0,bool = 1); + void drawIndicatorMask(QPainter *,int,int,int,int,int); + QSize exclusiveIndicatorSize() const; + void drawExclusiveIndicator(QPainter *,int,int,int,int, + const QColorGroup &,bool,bool = 0, + bool = 1); + void drawExclusiveIndicatorMask(QPainter *,int,int,int,int,bool); + QRect comboButtonRect(int,int,int,int); + void drawComboButton(QPainter *,int,int,int,int,const QColorGroup &, + bool,bool,bool,const QBrush *); + void drawPushButtonLabel(QPushButton *,QPainter *); + void drawPanel(QPainter *,int,int,int,int,const QColorGroup &,bool,int, + const QBrush *); + + void scrollBarMetrics(const QScrollBar *,int &,int &,int &,int &); + + void drawScrollBarControls(QPainter *,const QScrollBar *,int,uint, + uint); + void drawSlider(QPainter *,int,int,int,int,const QColorGroup &, + Orientation,bool,bool); + void drawSliderMask(QPainter *,int,int,int,int,Orientation,bool,bool); + void drawSliderGroove(QPainter *,int,int,int,int,const QColorGroup &, + QCOORD,Orientation); + void drawSliderGrooveMask(QPainter *,int,int,int,int,QCOORD, + Orientation); + int splitterWidth() const; + void drawSplitter(QPainter *,int,int,int,int,const QColorGroup &, + Orientation); +}; + +%End +%End diff --git a/sip/qt/qiodevice.sip b/sip/qt/qiodevice.sip new file mode 100644 index 0000000..32079d2 --- /dev/null +++ b/sip/qt/qiodevice.sip @@ -0,0 +1,408 @@ +// This is the SIP interface definition for QIODevice. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QIODevice + +QIODevice is fully implemented. + + +%End + + +%ModuleHeaderCode +#include +%End + + +// Device access types. + +const int IO_Direct; +const int IO_Sequential; +const int IO_Combined; +const int IO_TypeMask; + +// Handling modes. + +const int IO_Raw; +const int IO_Async; + +// Device open modes. + +const int IO_ReadOnly; +const int IO_WriteOnly; +const int IO_ReadWrite; +const int IO_Append; +const int IO_Truncate; +const int IO_Translate; +const int IO_ModeMask; + +// Device state. + +const int IO_Open; +const int IO_StateMask; + +// Device status. + +const int IO_Ok; +const int IO_ReadError; +const int IO_WriteError; +const int IO_FatalError; +const int IO_ResourceError; +const int IO_OpenError; +const int IO_ConnectError; +const int IO_AbortError; +const int IO_TimeOutError; +%If (Qt_2_00 -) +const int IO_UnspecifiedError; +%End + + +class QIODevice +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_0_0 -) + typedef Q_ULONG Offset; +%End + + QIODevice(); + + int flags() const; + int mode() const; + int state() const; + bool isDirectAccess() const; + bool isSequentialAccess() const; + bool isCombinedAccess() const; + bool isBuffered() const; + bool isRaw() const; + bool isSynchronous() const; + bool isAsynchronous() const; + bool isTranslated() const; + bool isReadable() const; + bool isWritable() const; + bool isReadWrite() const; + bool isInactive() const; + bool isOpen() const; + + int status() const; + void resetStatus(); + + virtual bool open(int) = 0 /ReleaseGIL/; + virtual void close() = 0; + virtual void flush() = 0 /ReleaseGIL/; + +%If (- Qt_3_0_0) + virtual uint size() const = 0; + virtual int at() const; + virtual bool at(int); +%End +%If (Qt_3_0_0 -) + virtual Offset size() const = 0; + virtual Offset at() const; + virtual bool at(Offset); +%End + virtual bool atEnd() const; + bool reset(); + +%If (- Qt_3_0_0) + virtual SIP_PYOBJECT readBlock(uint) = 0 /ReleaseGIL/ [int (char *,uint)]; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + int actlen; + + Py_BEGIN_ALLOW_THREADS + actlen = sipCpp -> readBlock(buf,a0); + Py_END_ALLOW_THREADS + + if (actlen < 0) + { + sipFree((ANY *)buf); + + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = PyString_FromStringAndSize(buf,actlen); + + sipFree((ANY *)buf); + + if (sipRes == NULL) + sipIsErr = 1; + } + } +%End +%VirtualCatcherCode + PyObject *result = sipCallMethod(&sipIsErr,sipMethod,"i",a1); + + if (result != NULL) + { + PyObject *buf; + + sipParseResult(&sipIsErr,sipMethod,result,"O",&buf); + + if (buf == Py_None) + sipRes = -1; + else if (!PyString_Check(buf)) + { + sipBadCatcherResult(sipMethod); + sipIsErr = 1; + } + else + { + memcpy(a0,PyString_AS_STRING(buf),PyString_GET_SIZE(buf)); + sipRes = PyString_GET_SIZE(buf); + } + + Py_DECREF(buf); + Py_DECREF(result); + } +%End +%End +%If (Qt_3_0_0 -) + virtual SIP_PYOBJECT readBlock(Q_ULONG) = 0 /ReleaseGIL/ [Q_LONG (char *,Q_ULONG)]; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + Q_LONG actlen; + + Py_BEGIN_ALLOW_THREADS + actlen = sipCpp -> readBlock(buf,a0); + Py_END_ALLOW_THREADS + + if (actlen < 0) + { + sipFree((ANY *)buf); + + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = PyString_FromStringAndSize(buf,actlen); + + sipFree((ANY *)buf); + + if (sipRes == NULL) + sipIsErr = 1; + } + } +%End +%VirtualCatcherCode + PyObject *result = sipCallMethod(&sipIsErr,sipMethod,"l",a1); + + if (result != NULL) + { + PyObject *buf; + + sipParseResult(&sipIsErr,sipMethod,result,"O",&buf); + + if (buf == Py_None) + sipRes = -1L; + else if (!PyString_Check(buf)) + { + sipBadCatcherResult(sipMethod); + sipIsErr = 1; + } + else + { + memcpy(a0,PyString_AS_STRING(buf),PyString_GET_SIZE(buf)); + sipRes = PyString_GET_SIZE(buf); + } + + Py_DECREF(buf); + Py_DECREF(result); + } +%End +%End + +%If (- Qt_3_0_0) + virtual int writeBlock(const char * /Array/, + uint /ArraySize/) = 0 /ReleaseGIL/; +%End +%If (Qt_3_0_0 -) + virtual Q_LONG writeBlock(const char * /Array/, + Q_ULONG /ArraySize/) = 0 /ReleaseGIL/; +%End + +%If (- Qt_3_0_0) + virtual SIP_PYOBJECT readLine(uint) /ReleaseGIL/ [int (char *,uint)]; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + int actlen; + + Py_BEGIN_ALLOW_THREADS + actlen = sipSelfWasArg ? sipCpp->QIODevice::readLine(buf, a0) : sipCpp->readLine(buf, a0); + Py_END_ALLOW_THREADS + + if (actlen < 0) + { + sipFree((ANY *)buf); + + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = PyString_FromStringAndSize(buf,actlen); + + sipFree((ANY *)buf); + + if (sipRes == NULL) + sipIsErr = 1; + } + } +%End +%VirtualCatcherCode + PyObject *result = sipCallMethod(&sipIsErr,sipMethod,"i",a1); + + if (result != NULL) + { + PyObject *buf; + + sipParseResult(&sipIsErr,sipMethod,result,"O",&buf); + + if (buf == Py_None) + sipRes = -1; + else if (!PyString_Check(buf)) + { + sipBadCatcherResult(sipMethod); + sipIsErr = 1; + } + else + { + memcpy(a0,PyString_AS_STRING(buf),PyString_GET_SIZE(buf)); + sipRes = PyString_GET_SIZE(buf); + } + + Py_DECREF(buf); + Py_DECREF(result); + } +%End +%End +%If (Qt_3_0_0 -) + virtual SIP_PYOBJECT readLine(Q_ULONG) /ReleaseGIL/ [Q_LONG (char *,Q_ULONG)]; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + Q_LONG actlen; + + Py_BEGIN_ALLOW_THREADS + actlen = sipSelfWasArg ? sipCpp->QIODevice::readLine(buf, a0) : sipCpp->readLine(buf, a0); + Py_END_ALLOW_THREADS + + if (actlen < 0) + { + sipFree((ANY *)buf); + + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = PyString_FromStringAndSize(buf,actlen); + + sipFree((ANY *)buf); + + if (sipRes == NULL) + sipIsErr = 1; + } + } +%End +%VirtualCatcherCode + PyObject *result = sipCallMethod(&sipIsErr,sipMethod,"l",a1); + + if (result != NULL) + { + PyObject *buf; + + sipParseResult(&sipIsErr,sipMethod,result,"O",&buf); + + if (buf == Py_None) + sipRes = -1L; + else if (!PyString_Check(buf)) + { + sipBadCatcherResult(sipMethod); + sipIsErr = 1; + } + else + { + memcpy(a0,PyString_AS_STRING(buf),PyString_GET_SIZE(buf)); + sipRes = PyString_GET_SIZE(buf); + } + + Py_DECREF(buf); + Py_DECREF(result); + } +%End +%End + +%If (Qt_2_00 - Qt_3_0_0) + int writeBlock(const QByteArray &) /ReleaseGIL/; +%End +%If (Qt_3_0_0 -) + Q_LONG writeBlock(const QByteArray &) /ReleaseGIL/; +%End + +%If (Qt_2_00 - Qt_3_0_0) + QByteArray readAll() /ReleaseGIL/; +%End +%If (Qt_3_0_0 -) + virtual QByteArray readAll() /ReleaseGIL/; +%End + + virtual int getch() = 0 /ReleaseGIL/; + virtual int putch(int) = 0 /ReleaseGIL/; + virtual int ungetch(int) = 0; + +protected: + void setFlags(int); + void setType(int); + void setMode(int); + void setState(int); + void setStatus(int); + +private: + QIODevice(const QIODevice &); +}; diff --git a/sip/qt/qkeycode.sip b/sip/qt/qkeycode.sip new file mode 100644 index 0000000..72c0a25 --- /dev/null +++ b/sip/qt/qkeycode.sip @@ -0,0 +1,286 @@ +// This is the SIP interface definition for the key code definitions. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%If (- Qt_2_00) + +%ModuleHeaderCode +#include +%End + +// Accelerator modifiers. +const uint SHIFT; +const uint CTRL; +const uint ALT; +const uint ASCII_ACCEL; + +// Miscellaneous keys. +const int Key_Escape; +const int Key_Tab; +const int Key_Backtab; +const int Key_Backspace; +const int Key_Return; +const int Key_Enter; +const int Key_Insert; +const int Key_Delete; +const int Key_Pause; +const int Key_Print; +const int Key_SysReq; + +// Cursor keys. +const int Key_Home; +const int Key_End; +const int Key_Left; +const int Key_Up; +const int Key_Right; +const int Key_Down; +const int Key_Prior; +const int Key_PageUp; +const int Key_Next; +const int Key_PageDown; + +// Modifiers. +const int Key_Shift; +const int Key_Control; +const int Key_Meta; +const int Key_Alt; +const int Key_CapsLock; +const int Key_NumLock; +const int Key_ScrollLock; + +// Function keys. +const int Key_F1; +const int Key_F2; +const int Key_F3; +const int Key_F4; +const int Key_F5; +const int Key_F6; +const int Key_F7; +const int Key_F8; +const int Key_F9; +const int Key_F10; +const int Key_F11; +const int Key_F12; +const int Key_F13; +const int Key_F14; +const int Key_F15; +const int Key_F16; +const int Key_F17; +const int Key_F18; +const int Key_F19; +const int Key_F20; +const int Key_F21; +const int Key_F22; +const int Key_F23; +const int Key_F24; +const int Key_F25; +const int Key_F26; +const int Key_F27; +const int Key_F28; +const int Key_F29; +const int Key_F30; +const int Key_F31; +const int Key_F32; +const int Key_F33; +const int Key_F34; +const int Key_F35; + +// Extra keys. +const int Key_Super_L; +const int Key_Super_R; +const int Key_Menu; +%If (Qt_1_43 -) +const int Key_Hyper_L; +const int Key_Hyper_R; +%End + +// The 7 bit printable ASCII keys. +const int Key_Space; +const int Key_Exclam; +const int Key_QuoteDbl; +const int Key_NumberSign; +const int Key_Dollar; +const int Key_Percent; +const int Key_Ampersand; +const int Key_Apostrophe; +const int Key_ParenLeft; +const int Key_ParenRight; +const int Key_Asterisk; +const int Key_Plus; +const int Key_Comma; +const int Key_Minus; +const int Key_Period; +const int Key_Slash; +const int Key_0; +const int Key_1; +const int Key_2; +const int Key_3; +const int Key_4; +const int Key_5; +const int Key_6; +const int Key_7; +const int Key_8; +const int Key_9; +const int Key_Colon; +const int Key_Semicolon; +const int Key_Less; +const int Key_Equal; +const int Key_Greater; +const int Key_Question; +const int Key_At; +const int Key_A; +const int Key_B; +const int Key_C; +const int Key_D; +const int Key_E; +const int Key_F; +const int Key_G; +const int Key_H; +const int Key_I; +const int Key_J; +const int Key_K; +const int Key_L; +const int Key_M; +const int Key_N; +const int Key_O; +const int Key_P; +const int Key_Q; +const int Key_R; +const int Key_S; +const int Key_T; +const int Key_U; +const int Key_V; +const int Key_W; +const int Key_X; +const int Key_Y; +const int Key_Z; +const int Key_BracketLeft; +const int Key_Backslash; +const int Key_BracketRight; +const int Key_AsciiCircum; +const int Key_Underscore; +const int Key_QuoteLeft; +const int Key_BraceLeft; +const int Key_Bar; +const int Key_BraceRight; +const int Key_AsciiTilde; + +// Latin 1 codes. +const int Key_nobreakspace; +const int Key_exclamdown; +const int Key_cent; +const int Key_sterling; +const int Key_currency; +const int Key_yen; +const int Key_brokenbar; +const int Key_section; +const int Key_diaeresis; +const int Key_copyright; +const int Key_ordfeminine; +const int Key_guillemotleft; +const int Key_notsign; +const int Key_hyphen; +const int Key_registered; +const int Key_macron; +const int Key_degree; +const int Key_plusminus; +const int Key_twosuperior; +const int Key_threesuperior; +const int Key_acute; +const int Key_mu; +const int Key_paragraph; +const int Key_periodcentered; +const int Key_cedilla; +const int Key_onesuperior; +const int Key_masculine; +const int Key_guillemotright; +const int Key_onequarter; +const int Key_onehalf; +const int Key_threequarters; +const int Key_questiondown; +const int Key_Agrave; +const int Key_Aacute; +const int Key_Acircumflex; +const int Key_Atilde; +const int Key_Adiaeresis; +const int Key_Aring; +const int Key_AE; +const int Key_Ccedilla; +const int Key_Egrave; +const int Key_Eacute; +const int Key_Ecircumflex; +const int Key_Ediaeresis; +const int Key_Igrave; +const int Key_Iacute; +const int Key_Icircumflex; +const int Key_Idiaeresis; +const int Key_ETH; +const int Key_Ntilde; +const int Key_Ograve; +const int Key_Oacute; +const int Key_Ocircumflex; +const int Key_Otilde; +const int Key_Odiaeresis; +const int Key_multiply; +const int Key_Ooblique; +const int Key_Ugrave; +const int Key_Uacute; +const int Key_Ucircumflex; +const int Key_Udiaeresis; +const int Key_Yacute; +const int Key_THORN; +const int Key_ssharp; +const int Key_agrave; +const int Key_aacute; +const int Key_acircumflex; +const int Key_atilde; +const int Key_adiaeresis; +const int Key_aring; +const int Key_ae; +const int Key_ccedilla; +const int Key_egrave; +const int Key_eacute; +const int Key_ecircumflex; +const int Key_ediaeresis; +const int Key_igrave; +const int Key_iacute; +const int Key_icircumflex; +const int Key_idiaeresis; +const int Key_eth; +const int Key_ntilde; +const int Key_ograve; +const int Key_oacute; +const int Key_ocircumflex; +const int Key_otilde; +const int Key_odiaeresis; +const int Key_division; +const int Key_oslash; +const int Key_ugrave; +const int Key_uacute; +const int Key_ucircumflex; +const int Key_udiaeresis; +const int Key_yacute; +const int Key_thorn; +const int Key_ydiaeresis; + +const int Key_unknown; + +%End diff --git a/sip/qt/qkeysequence.sip b/sip/qt/qkeysequence.sip new file mode 100644 index 0000000..c7800f9 --- /dev/null +++ b/sip/qt/qkeysequence.sip @@ -0,0 +1,119 @@ +// This is the SIP interface definition for QKeySequence. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QKeySequence (Qt v3+) + +QKeySequence is fully implemented including the operators +==, !=, QString() and +int(). A QString instance or a Python +integer may be used whenever a QKeySequence can be used. + + +%End + + +%If (Qt_3_0_0 -) + +class QKeySequence : Qt +{ +%TypeHeaderCode +#include +%End + +public: + QKeySequence(); + QKeySequence(const QString &); + QKeySequence(int); +%If (Qt_3_1_0 -) + QKeySequence(int,int,int = 0,int = 0); + + bool operator==(const QKeySequence &) const; + bool operator!=(const QKeySequence &) const; + + uint count() const; + bool isEmpty() const; + Qt::SequenceMatch matches(const QKeySequence &) const; +%End + + int __int__() const; + +%ConvertToTypeCode + // Allow a QString or a Python integer whenever a QKeySequence is + // expected. + + if (sipIsErr == NULL) + { + if (sipCanConvertToInstance(sipPy,sipClass_QKeySequence,SIP_NO_CONVERTORS)) + return 1; + + if (sipCanConvertToInstance(sipPy,sipClass_QString,0)) + return 1; + + PyErr_Clear(); + + PyInt_AsLong(sipPy); + + return !PyErr_Occurred(); + } + + // We do this case before the int case because, otherwise, + // PyInt_AsLong() would achieve the same result but less efficiently. + + if (sipCanConvertToInstance(sipPy,sipClass_QKeySequence,SIP_NO_CONVERTORS)) + { + *sipCppPtr = reinterpret_cast(sipConvertToInstance(sipPy,sipClass_QKeySequence,sipTransferObj,SIP_NO_CONVERTORS,0,sipIsErr)); + + return 0; + } + + if (sipCanConvertToInstance(sipPy,sipClass_QString,0)) + { + int state; + QString *s = reinterpret_cast(sipConvertToInstance(sipPy,sipClass_QString,0,0,&state,sipIsErr)); + + if (*sipIsErr) + { + sipReleaseInstance(s,sipClass_QString,state); + return 0; + } + + Py_BEGIN_ALLOW_THREADS + *sipCppPtr = new QKeySequence(*s); + Py_END_ALLOW_THREADS + + sipReleaseInstance(s,sipClass_QString,state); + + return sipGetState(sipTransferObj); + } + + int key = PyInt_AsLong(sipPy); + + Py_BEGIN_ALLOW_THREADS + *sipCppPtr = new QKeySequence(key); + Py_END_ALLOW_THREADS + + return sipGetState(sipTransferObj); +%End +}; + +%End diff --git a/sip/qt/qlabel.sip b/sip/qt/qlabel.sip new file mode 100644 index 0000000..62655e6 --- /dev/null +++ b/sip/qt/qlabel.sip @@ -0,0 +1,157 @@ +// This is the SIP interface definition for QLabel. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QLabel + +QLabel is fully implemented. + + +%End + + +class QLabel : QFrame +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QLabel(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); + QLabel(const char *,QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); + QLabel(QWidget *,const char *,QWidget * /TransferThis/,const char * = 0,WFlags = 0); +%End +%If (Qt_2_00 -) + QLabel(QWidget * /TransferThis/,const char * = 0,WFlags = 0); + QLabel(const QString &,QWidget * /TransferThis/,const char * = 0,WFlags = 0); + QLabel(QWidget *,const QString &,QWidget * /TransferThis/,const char * = 0,WFlags = 0); +%End + +%If (- Qt_2_00) + const char *text() const; +%End +%If (Qt_2_00 -) + QString text() const; +%End + QPixmap *pixmap() const; +%If (Qt_3_0_0 -) + QPicture *picture() const; +%End + QMovie *movie() const; + +%If (Qt_2_00 -) + TextFormat textFormat() const; + void setTextFormat(TextFormat); +%End + + int alignment() const; +%If (- Qt_2_00) + void setAlignment(int); +%End +%If (Qt_2_00 -) + virtual void setAlignment(int); +%End +%If (- Qt_2_00) + int margin() const; + void setMargin(int); +%End +%If (Qt_2_00 -) + int indent() const; + void setIndent(int); +%End + + bool autoResize() const; +%If (- Qt_2_00) + void setAutoResize(bool); +%End +%If (Qt_2_00 -) + virtual void setAutoResize(bool); +%End +%If (Qt_2_2_0 -) + bool hasScaledContents() const; + void setScaledContents(bool); +%End +%If (Qt_2_00 - Qt_3_0_0) + QSizePolicy sizePolicy() const; +%End + QSize sizeHint() const; +%If (Qt_2_1_0 -) + QSize minimumSizeHint() const; +%End +%If (- Qt_2_00) + void setBuddy(QWidget *); +%End +%If (Qt_2_00 -) + virtual void setBuddy(QWidget *); +%End + QWidget *buddy() const; +%If (Qt_2_00 - Qt_3_0_0) + void setAutoMask(bool); +%End +%If (Qt_2_00 -) + int heightForWidth(int) const; +%End + +%If (Qt_3_0_0 -) + void setFont(const QFont &); +%End + +public slots: +%If (- Qt_2_00) + void setText(const char *); + void setPixmap(const QPixmap &); +%End +%If (Qt_2_00 -) + virtual void setText(const QString &); + virtual void setPixmap(const QPixmap &); +%End +%If (Qt_3_0_0 -) + virtual void setPicture(const QPicture &); +%End +%If (- Qt_2_00) + void setMovie(const QMovie &); + void setNum(int /Constrained/); + void setNum(double); +%End +%If (Qt_2_00 -) + virtual void setMovie(const QMovie &); + virtual void setNum(int /Constrained/); + virtual void setNum(double); +%End + void clear(); + +protected: + void drawContents(QPainter *); +%If (Qt_2_00 - Qt_3_0_0) + void drawContentsMask(QPainter *); +%End +%If (Qt_2_1_0 -) + void fontChange(const QFont &); +%End +%If (Qt_2_2_0 -) + void resizeEvent(QResizeEvent *); +%End + +private: + QLabel(const QLabel &); +}; diff --git a/sip/qt/qlayout.sip b/sip/qt/qlayout.sip new file mode 100644 index 0000000..4270e1e --- /dev/null +++ b/sip/qt/qlayout.sip @@ -0,0 +1,597 @@ +// This is the SIP interface definition for QBoxLayout, QGLayoutIterator, +// QGridLayout, QHBoxLayout, QLayout, QLayoutItem, QLayoutIterator, +// QSpacerItem, QVBoxLayout and QWidgetItem. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QLayout + +QLayout is fully implemented. + + + +QBoxLayout + +QBoxLayout is fully implemented. + + + +QGLayoutIterator (Qt v2+) + +QGLayoutIterator is fully implemented. + + + +QGridLayout + + bool findWidget + QWidget *w + int *row + int *col + + +This takes the w parameter and returns a tuple containing +the bool result, row and +col. (Qt v2+) + + + +QHBoxLayout + +QHBoxLayout is fully implemented. + + + +QLayoutItem (Qt v2+) + +QLayoutItem is fully implemented. + + + +QLayoutIterator (Qt v2+) + + QLayoutItem *next + + + +This is a wrapper around the QLayoutIterator +++ operator. + + + +QSpacerItem (Qt v2+) + +QSpacerItem is fully implemented. + + + +QVBoxLayout + +QVBoxLayout is fully implemented. + + + +QWidgetItem (Qt v2+) + +QWidgetItem is fully implemented. + + +%End + + +%If (- Qt_2_00) + +class QLayout : QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum + { + unlimited = QCOORD_MAX + }; + + int defaultBorder() const; + virtual bool activate(); + void freeze(int,int); + void freeze(); + void setMenuBar(QMenuBar *); + QWidget *mainWidget(); + +protected: + QLayout(QWidget * /TransferThis/,int,int,const char *); + QLayout(int = -1,const char * = 0); + + QGManager *basicManager(); + virtual QChain *mainVerticalChain() = 0; + virtual QChain *mainHorizontalChain() = 0; + virtual void initGM() = 0; + void addChildLayout(QLayout *); + +private: + QLayout(const QLayout &); +}; + +%End + + +%If (Qt_2_00 -) + +class QGLayoutIterator +{ +%TypeHeaderCode +#include +%End + +public: + virtual QLayoutItem *next() = 0; + virtual QLayoutItem *current() = 0; + virtual QLayoutItem *takeCurrent() = 0 /TransferBack/; +}; + + +class QLayoutIterator +{ +%TypeHeaderCode +#include +%End + +public: + QLayoutIterator(QGLayoutIterator *) /Default/; + QLayoutIterator(const QLayoutIterator &); + + QLayoutItem *next(); +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipRes = ++(*sipCpp); + Py_END_ALLOW_THREADS +%End + + QLayoutItem *current(); + QLayoutItem *takeCurrent() /TransferBack/; + void deleteCurrent(); +}; + + +class QLayoutItem +{ +%TypeHeaderCode +#include +%End + +public: + QLayoutItem(int = 0 ); + +%ConvertToSubClassCode + // Note that we let the QObject sub-class code handle QLayout and it's + // sub-classes. + if (sipCpp->widget()) + sipClass = sipClass_QWidgetItem; + else if (sipCpp->spacerItem()) + sipClass = sipClass_QSpacerItem; + else + sipClass = NULL; +%End + + virtual QSize sizeHint() const = 0; + virtual QSize minimumSize() const = 0; + virtual QSize maximumSize() const = 0; + virtual QSizePolicy::ExpandData expanding() const = 0; + virtual void setGeometry(const QRect &) = 0; + virtual QRect geometry() const = 0; + virtual bool isEmpty() const = 0; + virtual bool hasHeightForWidth() const; + virtual int heightForWidth(int) const; + virtual void invalidate(); + + virtual QWidget *widget(); + virtual QLayoutIterator iterator(); + virtual QLayout *layout(); + virtual QSpacerItem *spacerItem(); + + int alignment() const; + virtual void setAlignment(int); +}; + + +class QSpacerItem : QLayoutItem +{ +%TypeHeaderCode +#include +%End + +public: + QSpacerItem(int,int,QSizePolicy::SizeType = QSizePolicy::Minimum, + QSizePolicy::SizeType = QSizePolicy::Minimum); + + void changeSize(int,int,QSizePolicy::SizeType = QSizePolicy::Minimum, + QSizePolicy::SizeType = QSizePolicy::Minimum); + QSize sizeHint() const; + QSize minimumSize() const; + QSize maximumSize() const; + QSizePolicy::ExpandData expanding() const; + bool isEmpty() const; + void setGeometry(const QRect &); + QRect geometry() const; + QSpacerItem *spacerItem(); +}; + + +class QWidgetItem : QLayoutItem +{ +%TypeHeaderCode +#include +%End + +public: + QWidgetItem(QWidget *); + + QSize sizeHint() const; + QSize minimumSize() const; + QSize maximumSize() const; + QSizePolicy::ExpandData expanding() const; + bool isEmpty() const; + void setGeometry(const QRect &) ; + QRect geometry() const; + virtual QWidget *widget(); + + bool hasHeightForWidth() const; + int heightForWidth(int) const; +}; + + +class QLayout : QObject, QLayoutItem +{ +%TypeHeaderCode +#include +%End + +public: + enum ResizeMode { + FreeResize, + Minimum, + Fixed, +%If (Qt_3_1_0 -) + Auto +%End + }; + + QLayout(QWidget * /TransferThis/,int = 0,int = -1,const char * = 0); + QLayout(QLayout * /TransferThis/,int = -1,const char * = 0); + QLayout(int = -1,const char * = 0); + + int margin() const; + int spacing() const; + + virtual void setMargin(int); + virtual void setSpacing(int); + +%If (- Qt_3_1_0) + enum { + unlimited + }; +%End + +%If (Qt_3_0_0 -) + int defaultBorder() const; + void freeze(int,int); + void freeze(); +%End + + void setResizeMode(ResizeMode); + ResizeMode resizeMode() const; + + virtual void setMenuBar(QMenuBar *); + QMenuBar *menuBar() const; + + QWidget *mainWidget(); + bool isTopLevel() const; + + virtual void setAutoAdd(bool); + bool autoAdd() const; + +%If (Qt_2_1_0 -) + void invalidate(); +%End + QRect geometry() const; + bool activate(); + + void add(QWidget *); + virtual void addItem(QLayoutItem * /Transfer/) = 0; + +%If (Qt_3_1_0 -) + void remove(QWidget *); + void removeItem(QLayoutItem * /TransferBack/); +%End + + QSizePolicy::ExpandData expanding() const; + QSize minimumSize() const; + QSize maximumSize() const; + void setGeometry(const QRect &) = 0; + QLayoutIterator iterator() = 0; + bool isEmpty() const; + + int totalHeightForWidth(int) const; + QSize totalMinimumSize() const; + QSize totalMaximumSize() const; + QSize totalSizeHint() const; + QLayout *layout(); + +%If (Qt_2_1_0 -) + bool supportsMargin() const; +%End + +%If (Qt_2_2_0 -) + void setEnabled(bool); + bool isEnabled() const; +%End + +protected: + bool eventFilter(QObject *,QEvent *); +%If (Qt_3_0_0 -) + void childEvent(QChildEvent *); +%End + void addChildLayout(QLayout *); + void deleteAllItems(); + +%If (Qt_2_1_0 -) + void setSupportsMargin(bool); + QRect alignmentRect(const QRect &) const; +%End + +private: + QLayout(const QLayout &); +}; + +%End + + +class QGridLayout : QLayout +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_1_0) + QGridLayout(QWidget * /TransferThis/,int,int,int = 0,int = -1,const char * = 0); + QGridLayout(int,int,int = -1,const char * = 0); +%End +%If (Qt_2_00 - Qt_2_1_0) + QGridLayout(QLayout * /TransferThis/,int,int,int = -1,const char * = 0); +%End +%If (Qt_2_1_0 -) + QGridLayout(QWidget * /TransferThis/,int = 1,int = 1,int = 0,int = -1,const char * = 0); + QGridLayout(int = 1,int = 1,int = -1,const char * = 0); + QGridLayout(QLayout * /TransferThis/,int = 1,int = 1,int = -1,const char * = 0); +%End + +%If (Qt_2_00 -) + QSize sizeHint() const; + QSize minimumSize() const; + QSize maximumSize() const; +%End + +%If (- Qt_2_00) + void setRowStretch(int,int); + void setColStretch(int,int); +%End +%If (Qt_2_00 -) + virtual void setRowStretch(int,int); + virtual void setColStretch(int,int); +%End +%If (Qt_2_1_0 -) + int rowStretch(int) const; + int colStretch(int) const; +%End + +%If (Qt_3_2_0 -) + void setRowSpacing(int,int); + void setColSpacing(int,int); + int rowSpacing(int) const; + int colSpacing(int) const; +%End + + int numRows() const; + int numCols() const; +%If (Qt_2_1_0 -) + QRect cellGeometry(int,int) const; +%End + +%If (Qt_2_00 -) + bool hasHeightForWidth() const; + int heightForWidth(int) const; +%If (Qt_3_1_0 -) + int minimumHeightForWidth(int) const; +%End + + QSizePolicy::ExpandData expanding() const; + void invalidate(); + + void addItem(QLayoutItem * /Transfer/); +%End +%If (Qt_2_1_0 -) + void addItem(QLayoutItem * /Transfer/,int,int); +%End +%If (Qt_2_00 -) + void addMultiCell(QLayoutItem * /Transfer/,int,int,int,int,int = 0); +%End + + void addWidget(QWidget *,int,int,int = 0); + void addMultiCellWidget(QWidget *,int,int,int,int,int = 0); + void addLayout(QLayout * /Transfer/,int,int); +%If (Qt_2_2_0 -) + void addMultiCellLayout(QLayout * /Transfer/,int,int,int,int,int = 0); +%End + void addRowSpacing(int,int); + void addColSpacing(int,int); + void expand(int,int); + +%If (Qt_2_00 -) + enum Corner { + TopLeft, + TopRight, + BottomLeft, + BottomRight + }; + + void setOrigin(Corner); +%End +%If (Qt_3_0_0 -) + Corner origin() const; +%End +%If (Qt_2_00 -) + QLayoutIterator iterator(); + void setGeometry(const QRect &); +%End + +protected: +%If (- Qt_2_00) + QChain *mainVerticalChain(); + QChain *mainHorizontalChain(); + void initGM(); +%End + +%If (Qt_2_00 -) + bool findWidget(QWidget *,int *,int *); + void add(QLayoutItem * /Transfer/,int,int); +%End + +private: + QGridLayout(const QGridLayout &); +}; + + +class QBoxLayout : QLayout +{ +%TypeHeaderCode +#include +%End + +public: + enum Direction { + LeftToRight, + RightToLeft, + TopToBottom, + BottomToTop, + Down = TopToBottom, + Up = BottomToTop + }; + + QBoxLayout(QWidget * /TransferThis/,Direction,int = 0,int = -1,const char * = 0); +%If (Qt_2_00 -) + QBoxLayout(QLayout * /TransferThis/,Direction,int = -1,const char * = 0); +%End + QBoxLayout(Direction,int = -1,const char * = 0); + + Direction direction() const; +%If (Qt_2_1_0 -) + void setDirection(Direction); +%End + void addSpacing(int); + void addStretch(int = 0); +%If (- Qt_2_00) + void addWidget(QWidget *,int = 0,int = AlignCenter); +%End + void addLayout(QLayout * /Transfer/,int = 0); + void addStrut(int); +%If (Qt_2_00 -) + void addItem(QLayoutItem * /Transfer/); + void addWidget(QWidget *,int = 0,int = 0); +%If (Qt_2_1_0 -) + void insertSpacing(int,int); + void insertStretch(int,int = 0); + void insertWidget(int,QWidget *,int = 0,int = 0); + void insertLayout(int,QLayout * /Transfer/,int = 0); + int findWidget(QWidget *); +%End + bool setStretchFactor(QWidget *,int); + QSize sizeHint() const; + QSize minimumSize() const; + QSize maximumSize() const; + bool hasHeightForWidth() const; + int heightForWidth(int) const; +%If (Qt_3_1_0 -) + int minimumHeightForWidth(int) const; +%End + + QSizePolicy::ExpandData expanding() const; + void invalidate(); + QLayoutIterator iterator(); + void setGeometry(const QRect &); +%End + +protected: +%If (- Qt_2_00) + QChain *mainVerticalChain(); + QChain *mainHorizontalChain(); + void initGM(); +%End +%If (Qt_2_1_0 -) + void insertItem(int,QLayoutItem * /Transfer/); +%End + +private: + QBoxLayout(const QBoxLayout &); +}; + + +class QHBoxLayout : QBoxLayout +{ +%TypeHeaderCode +#include +%End + +public: + QHBoxLayout(QWidget * /TransferThis/,int = 0,int = -1,const char * = 0); +%If (Qt_2_00 -) + QHBoxLayout(QLayout * /TransferThis/,int = -1,const char * = 0); +%End + QHBoxLayout(int = -1,const char * = 0); + +private: +%If (Qt_3_1_0 -) + QHBoxLayout(const QHBoxLayout &); +%End +}; + + +class QVBoxLayout : QBoxLayout +{ +%TypeHeaderCode +#include +%End + +public: + QVBoxLayout(QWidget * /TransferThis/,int = 0,int = -1,const char * = 0); +%If (Qt_2_00 -) + QVBoxLayout(QLayout * /TransferThis/,int = -1,const char * = 0); +%End + QVBoxLayout(int = -1,const char * = 0); + +private: +%If (Qt_3_1_0 -) + QVBoxLayout(const QVBoxLayout &); +%End +}; diff --git a/sip/qt/qlcdnumber.sip b/sip/qt/qlcdnumber.sip new file mode 100644 index 0000000..ae250fd --- /dev/null +++ b/sip/qt/qlcdnumber.sip @@ -0,0 +1,137 @@ +// This is the SIP interface definition for QLCDNumber. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QLCDNumber + +QLCDNumber is fully implemented. + + +%End + + +class QLCDNumber : QFrame +{ +%TypeHeaderCode +#include +%End + +public: + QLCDNumber(QWidget * /TransferThis/ = 0,const char * = 0); + QLCDNumber(uint,QWidget * /TransferThis/ = 0,const char * = 0); + +%If (- Qt_2_00) + enum Mode { + HEX, + DEC, + OCT, + BIN + }; +%End +%If (Qt_2_00 -) + enum Mode { + Hex, HEX = Hex, + Dec, DEC = Dec, + Oct, OCT = Oct, + Bin, BIN = Bin + }; +%End + + enum SegmentStyle { + Outline, + Filled, + Flat + }; + + bool smallDecimalPoint() const; + + int numDigits() const; +%If (- Qt_2_00) + void setNumDigits(int); +%End +%If (Qt_2_00 -) + virtual void setNumDigits(int); +%End + + bool checkOverflow(int /Constrained/) const; + bool checkOverflow(double) const; + + Mode mode() const; +%If (- Qt_2_00) + void setMode(Mode); +%End +%If (Qt_2_00 -) + virtual void setMode(Mode); +%End + + SegmentStyle segmentStyle() const; +%If (- Qt_2_00) + void setSegmentStyle(SegmentStyle); +%End +%If (Qt_2_00 -) + virtual void setSegmentStyle(SegmentStyle); +%End + + double value() const; + int intValue() const; + + QSize sizeHint() const; +%If (Qt_2_00 - Qt_3_0_0) + QSizePolicy sizePolicy() const; +%End + +public slots: +%If (- Qt_2_00) + void display(const char *); +%End +%If (Qt_2_00 -) + void display(const QString &); +%End + void display(int /Constrained/); + void display(double); +%If (- Qt_2_00) + void setHexMode(); + void setDecMode(); + void setOctMode(); + void setBinMode(); + void setSmallDecimalPoint(bool); +%End +%If (Qt_2_00 -) + virtual void setHexMode(); + virtual void setDecMode(); + virtual void setOctMode(); + virtual void setBinMode(); + virtual void setSmallDecimalPoint(bool); +%End + +signals: + void overflow(); + +protected: +%If (- Qt_2_00) + void resizeEvent(QResizeEvent *); +%End + void drawContents(QPainter *); + +private: + QLCDNumber(const QLCDNumber &); +}; diff --git a/sip/qt/qlibrary.sip b/sip/qt/qlibrary.sip new file mode 100644 index 0000000..cb9813a --- /dev/null +++ b/sip/qt/qlibrary.sip @@ -0,0 +1,59 @@ +// This is the SIP interface definition for QLibrary. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QLibrary (Qt v3+) + +QLibrary is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QLibrary +{ +%TypeHeaderCode +#include +%End + +public: + QLibrary(const QString &); + + void *resolve(const char *); + static void *resolve(const QString &,const char *); + + bool load(); + virtual bool unload(); + bool isLoaded() const; + + bool autoUnload() const; + void setAutoUnload(bool); + + QString library() const; + +private: + QLibrary(const QLibrary &); +}; + +%End diff --git a/sip/qt/qlineedit.sip b/sip/qt/qlineedit.sip new file mode 100644 index 0000000..47bd3fa --- /dev/null +++ b/sip/qt/qlineedit.sip @@ -0,0 +1,427 @@ +// This is the SIP interface definition for QLineEdit. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QLineEdit + + int characterAt + int xpos + QChar *chr + + +This takes only the xpos parameter and returns the int +result and the chr value as a tuple. (Qt v3+) + + + + void del + + + +This has been renamed delChar in Python. (Qt v2+) + + + + bool getSelection + int *start + int *end + + +This takes no parameters and returns the bool result and the +start and end values as a tuple. +(Qt v3+) + + +%End + + +%If (Qt_3_0_0 -) + +class QLineEdit : QFrame +{ +%TypeHeaderCode +#include +%End + +public: + QLineEdit(QWidget * /TransferThis/,const char * = 0); + QLineEdit(const QString &,QWidget * /TransferThis/,const char * = 0); +%If (Qt_3_2_0 -) + QLineEdit(const QString &,const QString &,QWidget * /TransferThis/, + const char * = 0); +%End + + QString text() const; + + QString displayText() const; + + int maxLength() const; + + bool frame() const; + + enum EchoMode { + Normal, + NoEcho, + Password + }; + + EchoMode echoMode() const; + + bool isReadOnly() const; + + const QValidator *validator() const; + + QSize sizeHint() const; + QSize minimumSizeHint() const; + + int cursorPosition() const; + // Obsolete. + bool validateAndSet(const QString &,int,int,int); + + int alignment() const; + + void cursorForward(bool,int = 1); + void cursorBackward(bool,int = 1); + void cursorWordForward(bool); + void cursorWordBackward(bool); + void backspace(); + void del() /PyName=delChar/; + void home(bool); + void end(bool); + +%If (Qt_3_2_0 -) + bool isModified() const; + void clearModified(); +%End + + // Obsolete. + bool edited() const; + // Obsolete. + void setEdited(bool); + + bool hasSelectedText() const; + QString selectedText() const; +%If (Qt_3_2_0 -) + int selectionStart() const; +%End + + bool isUndoAvailable() const; + bool isRedoAvailable() const; + + bool dragEnabled() const; + +%If (Qt_3_2_0 -) + QString inputMask() const; + void setInputMask(const QString &); + bool hasAcceptableInput() const; +%End + +public slots: + virtual void setText(const QString &); + virtual void selectAll(); + virtual void deselect(); + virtual void clearValidator(); + virtual void insert(const QString &); + virtual void clear(); + virtual void undo(); + virtual void redo(); + virtual void setMaxLength(int); + virtual void setFrame(bool); + virtual void setEchoMode(EchoMode); + virtual void setReadOnly(bool); + virtual void setValidator(const QValidator *); + virtual void setFont(const QFont &); + virtual void setPalette(const QPalette &); + virtual void setSelection(int,int); + virtual void setCursorPosition(int); + virtual void setAlignment(int); +%If (Qt_CLIPBOARD) + virtual void cut(); + virtual void copy() const; + virtual void paste(); +%End + virtual void setDragEnabled(bool); + +signals: + void textChanged(const QString &); + void returnPressed(); +%If (Qt_3_1_0 -) + void lostFocus(); +%End + void selectionChanged(); + +protected: + bool event(QEvent *); + void mousePressEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseDoubleClickEvent(QMouseEvent *); + void keyPressEvent(QKeyEvent *); + void imStartEvent(QIMEvent *); + void imComposeEvent(QIMEvent *); + void imEndEvent(QIMEvent *); + void focusInEvent(QFocusEvent *); + void focusOutEvent(QFocusEvent *); + void resizeEvent(QResizeEvent *); + void drawContents(QPainter *); +%If (Qt_DRAGANDDROP) + void dragEnterEvent(QDragEnterEvent *); + void dragMoveEvent(QDragMoveEvent *); + void dragLeaveEvent(QDragLeaveEvent *); + void dropEvent(QDropEvent *); +%End + void contextMenuEvent(QContextMenuEvent *); + virtual QPopupMenu *createPopupMenu() /Factory/; + void windowActivationChange(bool); + +public: + // These appeared in v3.0.2 but defined as incompatible 3.0 addons, + // until v3.1.0. v3.2.0 then defined them as internal and obsolete. +%If (Qt_3_1_0 -) + void setPasswordChar(QChar); + QChar passwordChar() const; +%End + + // Obsolete. + SIP_PYTUPLE characterAt(int) const; +%MethodCode + int res; + QChar *chr; + + Py_BEGIN_ALLOW_THREADS + chr = new QChar(); + res = sipCpp -> characterAt(a0,chr); + Py_END_ALLOW_THREADS + + sipRes = sipBuildResult(&sipIsErr,"(iB)",res,chr,sipClass_QChar,NULL); +%End + + // Obsolete. + bool getSelection(int *,int *); + +private: + QLineEdit(const QLineEdit &); +}; + +%End + + +%If (- Qt_3_0_0) + +class QLineEdit : QWidget +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QLineEdit(QWidget * /TransferThis/ = 0,const char * = 0); +%End +%If (Qt_2_00 -) + QLineEdit(QWidget * /TransferThis/,const char * = 0); + QLineEdit(const QString &,QWidget * /TransferThis/,const char * = 0); +%End + +%If (- Qt_2_00) + const char *text() const; +%End +%If (Qt_2_00 -) + QString text() const; + + QString displayText() const; +%End + +%If (- Qt_2_00) + void setMaxLength(int); +%End +%If (Qt_2_00 -) + virtual void setMaxLength(int); +%End + int maxLength() const; + +%If (- Qt_2_00) + void setFrame(bool); +%End +%If (Qt_2_00 -) + virtual void setFrame(bool); +%End + bool frame() const; + + enum EchoMode { + Normal, + NoEcho, + Password + }; + +%If (- Qt_2_00) + void setEchoMode(EchoMode); +%End +%If (Qt_2_00 -) + virtual void setEchoMode(EchoMode); +%End + EchoMode echoMode() const; + +%If (Qt_2_1_0 -) + void setReadOnly(bool); +%End +%If (Qt_2_1_0 -) + bool isReadOnly() const; +%End + +%If (- Qt_2_00) + void setValidator(QValidator *); + QValidator *validator() const; +%End +%If (Qt_2_00 -) + virtual void setValidator(QValidator *); +%End +%If (Qt_2_00 -) + const QValidator *validator() const; +%End + + QSize sizeHint() const; +%If (Qt_2_00 -) + QSize minimumSizeHint() const; +%End +%If (Qt_2_00 -) + QSizePolicy sizePolicy() const; +%End + +%If (- Qt_2_00) + void setCursorPosition(int); +%End +%If (Qt_2_00 -) + virtual void setCursorPosition(int); +%End + int cursorPosition() const; +%If (- Qt_2_00) + bool validateAndSet(const char *,int,int,int); +%End +%If (Qt_2_00 -) + bool validateAndSet(const QString &,int,int,int); +%End + +%If (Qt_2_00 -) + int alignment() const; +%End + +%If (Qt_2_00 -) + void cursorLeft(bool,int = 1); + void cursorRight(bool,int = 1); + void cursorWordForward(bool); + void cursorWordBackward(bool); + void backspace(); + void del() /PyName=delChar/; + void home(bool); + void end(bool); + + void setEdited(bool); + bool edited() const; +%End + +%If (Qt_2_00 -) + bool hasMarkedText() const; + QString markedText() const; +%End + +%If (Qt_CLIPBOARD) + void cut(); + void copy() const; + void paste(); +%End + +%If (- Qt_2_00) + void setEnabled(bool); + void setFont(const QFont &); + void setPalette(const QPalette &); + void setSelection(int,int); +%End +%If (Qt_2_00 -) + virtual void setEnabled(bool); + virtual void setFont(const QFont &); + virtual void setPalette(const QPalette &); + virtual void setSelection(int,int); + + void setAlignment(int); +%End + +public slots: +%If (- Qt_2_00) + void setText(const char *); +%End +%If (Qt_2_00 -) + virtual void setText(const QString &); +%End + void selectAll(); + void deselect(); + void clearValidator(); +%If (- Qt_2_00) + void insert(const char *); +%End +%If (Qt_2_00 -) + void insert(const QString &); +%End + void clear(); + +signals: +%If (- Qt_2_00) + void textChanged(const char *); +%End +%If (Qt_2_00 -) + void textChanged(const QString &); +%End + void returnPressed(); + +protected: +%If (Qt_2_2_0 -) + bool event(QEvent *); +%End + void mousePressEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseDoubleClickEvent(QMouseEvent *); + void keyPressEvent(QKeyEvent *); + void focusInEvent(QFocusEvent *); + void focusOutEvent(QFocusEvent *); + void paintEvent(QPaintEvent *); + void resizeEvent(QResizeEvent *); + void leaveEvent(QEvent *); + void repaintArea(int,int); +%If (- Qt_2_00) + void timerEvent(QTimerEvent *); + bool event(QEvent *); + bool hasMarkedText() const; + QString markedText() const; +%End +%If (Qt_2_00 -) +%If (Qt_DRAGANDDROP) + void dragEnterEvent(QDragEnterEvent *); + void dropEvent(QDropEvent *); +%End +%End + +private: + QLineEdit(const QLineEdit &); +}; + +%End diff --git a/sip/qt/qlist.sip b/sip/qt/qlist.sip new file mode 100644 index 0000000..8b5750c --- /dev/null +++ b/sip/qt/qlist.sip @@ -0,0 +1,111 @@ +// This is the SIP interface definition for all types based on the QList +// template. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QList<type> (Qt v2) + +Types based on the QList template are automatically +converted to and from Python lists of the type. + + +%End + + +%If (Qt_2_1_0 - Qt_3_0_0) + +template +%MappedType QList +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + Type *tb; + int i; + PyObject *l; + + // Create the list. + + if ((l = PyList_New(sipCpp -> count())) == NULL) + return NULL; + + // Get it. + + i = 0; + + for (tb = sipCpp -> first(); tb != NULL; tb = sipCpp -> next()) + { + PyObject *tbobj; + + if ((tbobj = sipConvertFromInstance(tb,sipClass_Type,sipTransferObj)) == NULL || PyList_SetItem(l,i,tbobj) < 0) + { + Py_XDECREF(tbobj); + Py_DECREF(l); + + return NULL; + } + + ++i; + } + + return l; +%End + +%ConvertToTypeCode + if (sipIsErr == NULL) + { + if (!PyList_Check(sipPy)) + return 0; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + if (!sipCanConvertToInstance(PyList_GET_ITEM(sipPy,i),sipClass_Type,0)) + return 0; + + return 1; + } + + QList *ql = new QList; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + { + // We apply the transfer to the list itself, not the elements. + // Note that any temporary element will never be destroyed. + // There is nothing that can be done about this. + ql -> append(reinterpret_cast(sipConvertToInstance(PyList_GET_ITEM(sipPy,i),sipClass_Type,0,0,0,sipIsErr))); + + if (*sipIsErr) + { + delete ql; + + return 0; + } + } + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; + +%End diff --git a/sip/qt/qlistbox.sip b/sip/qt/qlistbox.sip new file mode 100644 index 0000000..1f755d8 --- /dev/null +++ b/sip/qt/qlistbox.sip @@ -0,0 +1,571 @@ +// This is the SIP interface definition for QListBox, QListBoxItem, +// QListBoxPixmap and QListBoxText. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QListBox + + bool itemYPos + int index + int *yPos + + +This takes the index parameter and returns a tuple +containing the bool result and yPos. +(Qt v1.x) + + + +QListBoxItem + +QListBoxItem is fully implemented. + + + +QListBoxPixmap + +QListBoxPixmap is fully implemented. + + + +QListBoxText + +QListBoxText is fully implemented. + + +%End + + +%If (- Qt_2_00) + +%ModuleHeaderCode +#include +%End + +// List box item types. +const int LBI_Undefined; +const int LBI_Text; +const int LBI_Pixmap; +const int LBI_UserDefined; + + +class QListBox : QTableView +{ +%TypeHeaderCode +#include +%End + +public: + QListBox(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); + + void setFont(const QFont &); + uint count() const; + void insertStrList(const QStrList *,int = -1); +// void insertStrList(const char **,int = -1,int = -1); + void insertItem(const QListBoxItem * /Transfer/,int = -1); + void insertItem(const char *,int = -1); + void insertItem(const QPixmap &,int = -1); + void inSort(const QListBoxItem *); + void inSort(const char *); + void removeItem(int); + void clear(); + const char *text(int) const; + const QPixmap *pixmap(int) const; + void changeItem(const QListBoxItem * /Transfer/,int); + void changeItem(const char *,int); + void changeItem(const QPixmap &,int); + bool autoUpdate() const; + void setAutoUpdate(bool); + int numItemsVisible() const; + void setFixedVisibleLines(int); + int currentItem() const; + void setCurrentItem(int); + void centerCurrentItem(); + int topItem() const; + void setTopItem(int); + void setBottomItem(int); + bool dragSelect() const; + void setDragSelect(bool); + bool autoScroll() const; + void setAutoScroll(bool); + bool autoScrollBar() const; + void setAutoScrollBar(bool); + bool scrollBar() const; + void setScrollBar(bool); + bool autoBottomScrollBar() const; + void setAutoBottomScrollBar(bool); + bool bottomScrollBar() const; + void setBottomScrollBar(bool); + bool smoothScrolling() const; + void setSmoothScrolling(bool); + int itemHeight() const; + int itemHeight(int) const; + long maxItemWidth() const; + bool isMultiSelection() const; + void setMultiSelection(bool); + void setSelected(int,bool); + bool isSelected(int) const; + QSize sizeHint() const; + +public slots: + void clearSelection(); + +signals: + void highlighted(int); + void selected(int); + void highlighted(const char *); + void selected(const char *); + void selectionChanged(); + +protected: + QListBoxItem *item(int) const; + bool itemVisible(int); + int cellHeight(int = 0); + void paintCell(QPainter *,int,int); + void mousePressEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseDoubleClickEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); + void keyPressEvent(QKeyEvent *); + void focusInEvent(QFocusEvent *); + void focusOutEvent(QFocusEvent *); + void resizeEvent(QResizeEvent *); + void timerEvent(QTimerEvent *); + int findItem(int) const; + bool itemYPos(int,int *) const; + void updateItem(int,bool = 1); + void clearList(); + void updateCellWidth(); + void toggleCurrentItem(); + +private: + QListBox(const QListBox &); +}; + +%End + +%If (Qt_2_00 -) + +class QListBox : QScrollView +{ +%TypeHeaderCode +#include +%End + +public: + QListBox(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); + + virtual void setFont(const QFont &); + + uint count() const; + + void insertStringList(const QStringList &,int = -1); + void insertStrList(const QStrList *,int = -1); +// void insertStrList(const QStrList &,int = -1); +// void insertStrList(const char **,int = -1,int = -1); + + void insertItem(const QListBoxItem * /Transfer/,int = -1); +%If (Qt_2_1_0 -) + void insertItem(const QListBoxItem * /Transfer/,const QListBoxItem *); +%End + void insertItem(const QString &,int = -1); + void insertItem(const QPixmap &,int = -1); +%If (Qt_2_1_0 -) + void insertItem(const QPixmap &,const QString &,int = -1); +%End + + void removeItem(int); + +%If (- Qt_3_0_0) + void clear(); +%End + + QString text(int) const; + const QPixmap *pixmap(int) const; + + void changeItem(const QListBoxItem * /Transfer/,int); + void changeItem(const QString &,int); + void changeItem(const QPixmap &,int); +%If (Qt_2_1_0 -) + void changeItem(const QPixmap &,const QString &,int); +%End + + void takeItem(const QListBoxItem * /TransferBack/); + + int numItemsVisible() const; + + int currentItem() const; +%If (Qt_2_1_0 -) + QString currentText() const; +%End + virtual void setCurrentItem(int); + virtual void setCurrentItem(QListBoxItem *); + void centerCurrentItem(); + int topItem() const; + virtual void setTopItem(int); + virtual void setBottomItem(int); + + long maxItemWidth() const; + +%If (- Qt_2_1_0) + enum SelectionMode { + Single, + Multi, + Extended + }; +%End +%If (Qt_2_1_0 -) + enum SelectionMode { + Single, + Multi, + Extended, + NoSelection + }; +%End + + virtual void setSelectionMode(SelectionMode); + SelectionMode selectionMode() const; + + void setMultiSelection(bool); + bool isMultiSelection() const; + + virtual void setSelected(QListBoxItem *,bool); + void setSelected(int,bool); + bool isSelected(int) const; + bool isSelected(QListBoxItem *) const; +%If (Qt_3_1_0 -) + QListBoxItem *selectedItem() const; +%End + + QSize sizeHint() const; + QSize minimumSizeHint() const; + + QListBoxItem *item(int) const; + int index(const QListBoxItem *) const; +%If (Qt_2_1_0 - Qt_3_0_0) + QListBoxItem *findItem(const QString &) const; +%End +%If (Qt_3_0_0 -) + QListBoxItem *findItem(const QString &, + ComparisonFlags = BeginsWith) const; +%End + + void triggerUpdate(bool); + + bool itemVisible(int); + bool itemVisible(const QListBoxItem *); + + enum LayoutMode { + FixedNumber, + FitToWidth, + FitToHeight = FitToWidth, + Variable + }; + + virtual void setColumnMode(LayoutMode /Constrained/); + virtual void setColumnMode(int); + virtual void setRowMode(LayoutMode /Constrained/); + virtual void setRowMode(int); + + LayoutMode columnMode() const; + LayoutMode rowMode() const; + + int numColumns() const; + int numRows() const; + + bool variableWidth() const; + virtual void setVariableWidth(bool); + + bool variableHeight() const; + virtual void setVariableHeight(bool); + + void viewportPaintEvent(QPaintEvent *); + + int itemHeight(int = 0) const; + QListBoxItem *itemAt(QPoint) const; + + QRect itemRect(QListBoxItem *) const; + +%If (Qt_2_1_0 -) + QListBoxItem *firstItem() const; + + void sort(bool = 1); +%End + +public slots: +%If (Qt_3_0_0 -) + void clear(); +%End + virtual void ensureCurrentVisible(); + virtual void clearSelection(); +%If (Qt_2_1_0 - Qt_3_0_0) + void selectAll(bool); + void invertSelection(); +%End +%If (Qt_3_0_0 -) + virtual void selectAll(bool); + virtual void invertSelection(); +%End + +signals: + void highlighted(int); + void selected(int); + void highlighted(const QString &); + void selected(const QString &); + void highlighted(QListBoxItem *); + void selected(QListBoxItem *); + + void selectionChanged(); +%If (Qt_2_1_0 -) + void selectionChanged(QListBoxItem *); + void currentChanged(QListBoxItem *); + void clicked(QListBoxItem *); + void clicked(QListBoxItem *,const QPoint &); + void pressed(QListBoxItem *); + void pressed(QListBoxItem *,const QPoint &); + + void doubleClicked(QListBoxItem *); + void returnPressed(QListBoxItem *); + void rightButtonClicked(QListBoxItem *,const QPoint &); + void rightButtonPressed(QListBoxItem *,const QPoint &); + void mouseButtonPressed(int,QListBoxItem *,const QPoint &); + void mouseButtonClicked(int,QListBoxItem *,const QPoint &); +%End + +%If (Qt_3_0_0 -) + void contextMenuRequested(QListBoxItem *,const QPoint &); +%End + +%If (Qt_2_1_0 -) + void onItem(QListBoxItem *); + void onViewport(); +%End + +protected: +%If (- Qt_3_0_0) + void viewportMousePressEvent(QMouseEvent *); + void viewportMouseReleaseEvent(QMouseEvent *); + void viewportMouseDoubleClickEvent(QMouseEvent *); + void viewportMouseMoveEvent(QMouseEvent *); +%End + void mousePressEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseDoubleClickEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); +%If (Qt_3_0_0 -) + void contentsContextMenuEvent(QContextMenuEvent *); +%End + + void keyPressEvent(QKeyEvent *); + void focusInEvent(QFocusEvent *); + void focusOutEvent(QFocusEvent *); + void resizeEvent(QResizeEvent *); + void showEvent(QShowEvent *); + +%If (Qt_3_0_0 -) + bool eventFilter(QObject *,QEvent *); +%End + + void updateItem(int); + void updateItem(QListBoxItem *); + + virtual void paintCell(QPainter *,int,int); + + void toggleCurrentItem(); +%If (Qt_2_2_0 -) + bool isRubberSelecting() const; +%End + + void doLayout() const; + +%If (Qt_3_0_0 -) + void windowActivationChange(bool); +%End + +protected slots: +%If (Qt_2_1_0 -) + void clearInputString(); +%End + +private: + QListBox(const QListBox &); +}; + +%End + + +class QListBoxItem +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QListBoxItem(); +%End +%If (Qt_2_00 -) + QListBoxItem(QListBox * /TransferThis/ = 0); +%End +%If (Qt_2_1_0 -) + QListBoxItem(QListBox * /TransferThis/,QListBoxItem *); +%End + +%If (- Qt_2_00) + virtual const char *text() const; +%End +%If (Qt_2_00 -) + virtual QString text() const; +%End + virtual const QPixmap *pixmap() const; + +%If (- Qt_2_00) + virtual int height(const QListBox *) const = 0; + virtual int width(const QListBox *) const = 0; +%End +%If (Qt_2_00 -) + virtual int height(const QListBox *) const; + virtual int width(const QListBox *) const; +%End + +%If (Qt_2_00 - Qt_3_0_0) + bool selected() const; +%End +%If (Qt_2_1_0 - Qt_3_0_0) + bool current() const; +%End +%If (Qt_3_0_0 -) + bool isSelected() const; + bool isCurrent() const; +%End + +%If (Qt_2_00 -) + QListBox *listBox() const; +%End + +%If (Qt_2_1_0 -) + void setSelectable(bool); + bool isSelectable() const; + + QListBoxItem *next() const; + QListBoxItem *prev() const; +%End + +%If (Qt_3_0_0 -) + virtual int rtti() const; +%End + +protected: + virtual void paint(QPainter *) = 0; +%If (- Qt_2_00) + void setText(const char *); +%End +%If (Qt_2_00 -) + virtual void setText(const QString &); +%End +%If (Qt_2_1_0 -) + void setCustomHighlighting(bool); +%End + +private: + QListBoxItem(const QListBoxItem &); +}; + +class QListBoxText : QListBoxItem +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QListBoxText(const char * = 0); +%End +%If (Qt_2_00 -) + QListBoxText(QListBox * /TransferThis/, + const QString & = QString::null); + QListBoxText(const QString & = QString::null); +%End +%If (Qt_2_1_0 -) + QListBoxText(QListBox * /TransferThis/,const QString &,QListBoxItem *); +%End + +%If (- Qt_2_00) + void paint(QPainter *); +%End + int height(const QListBox *) const; + int width(const QListBox *) const; + +%If (Qt_3_0_0 -) + int rtti() const; +%End + +protected: +%If (Qt_2_00 -) + void paint(QPainter *); +%End + +private: + QListBoxText(const QListBoxText &); +}; + +class QListBoxPixmap : QListBoxItem +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_2_00 -) + QListBoxPixmap(QListBox * /TransferThis/,const QPixmap &); +%End + QListBoxPixmap(const QPixmap &); +%If (Qt_2_1_0 -) + QListBoxPixmap(QListBox * /TransferThis/,const QPixmap &, + QListBoxItem *); + QListBoxPixmap(QListBox * /TransferThis/,const QPixmap &, + const QString &); + QListBoxPixmap(const QPixmap &,const QString &); + QListBoxPixmap(QListBox * /TransferThis/,const QPixmap &, + const QString &,QListBoxItem *); +%End + + const QPixmap *pixmap() const; +%If (Qt_2_00 -) + int height(const QListBox *) const; + int width(const QListBox *) const; +%End + +%If (Qt_3_0_0 -) + int rtti() const; +%End + +protected: + void paint(QPainter *); +%If (- Qt_2_00) + int height(const QListBox *) const; + int width(const QListBox *) const; +%End + +private: + QListBoxPixmap(const QListBoxPixmap &); +}; diff --git a/sip/qt/qlistview.sip b/sip/qt/qlistview.sip new file mode 100644 index 0000000..2028d1e --- /dev/null +++ b/sip/qt/qlistview.sip @@ -0,0 +1,770 @@ +// This is the SIP interface definition for QListView, QListViewItem, +// QCheckListItem and QListViewItemIterator. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QListView + +QListView is fully implemented. + + +Note that to remove a child QListViewItem you must first +call takeItem() and then del(). + + + +QListViewItem + +QListViewItem is fully implemented. + + +Note that to remove a child QListViewItem you must first +call takeItem() and then del(). + + + +QCheckListItem + +QCheckListItem is fully implemented. + + + +QListViewItemIterator (Qt v2+) + +QListViewItemIterator is fully implemented. + + +%End + + +%If (- Qt_2_00) + +class QListViewItem +{ +%TypeHeaderCode +#include +%End + +public: + QListViewItem(QListView * /TransferThis/); + QListViewItem(QListViewItem * /TransferThis/); + QListViewItem(QListView * /TransferThis/,QListViewItem *); + QListViewItem(QListViewItem * /TransferThis/,QListViewItem *); + + QListViewItem(QListView * /TransferThis/, + const char *,const char * = 0, + const char * = 0,const char * = 0, + const char * = 0,const char * = 0, + const char * = 0,const char * = 0); + + QListViewItem(QListViewItem * /TransferThis/, + const char *,const char * = 0, + const char * = 0,const char * = 0, + const char * = 0,const char * = 0, + const char * = 0,const char * = 0); + + QListViewItem(QListView * /TransferThis/,QListViewItem *, + const char *,const char * = 0, + const char * = 0,const char * = 0, + const char * = 0,const char * = 0, + const char * = 0,const char * = 0); + + QListViewItem(QListViewItem * /TransferThis/,QListViewItem *, + const char *,const char * = 0, + const char * = 0,const char * = 0, + const char * = 0,const char * = 0, + const char * = 0,const char * = 0); + + virtual void insertItem(QListViewItem * /Transfer/); + virtual void removeItem(QListViewItem * /TransferBack/); + int height() const; + virtual void invalidateHeight(); + int totalHeight() const; + virtual int width(const QFontMetrics &,const QListView *,int) const; + void widthChanged(int = -1) const; + int depth() const; + virtual void setText(int,const char *); + virtual const char *text(int) const; + virtual void setPixmap(int,const QPixmap &); + virtual const QPixmap *pixmap(int) const; + virtual const char *key(int,bool) const; + virtual void sortChildItems(int,bool); + int childCount() const; + bool isOpen() const; + virtual void setOpen(bool); + virtual void setup(); + virtual void setSelected(bool); + bool isSelected() const; + virtual void paintCell(QPainter *,const QColorGroup &,int,int,int); + virtual void paintBranches(QPainter *,const QColorGroup &,int,int,int, + GUIStyle); + virtual void paintFocus(QPainter *,const QColorGroup &,const QRect &); + QListViewItem *firstChild() const; + QListViewItem *nextSibling() const; + QListViewItem *parent() const; + QListViewItem *itemAbove(); + QListViewItem *itemBelow(); + int itemPos() const; + QListView *listView() const; + virtual void setSelectable(bool); + bool isSelectable() const; + virtual void setExpandable(bool); + bool isExpandable(); + void repaint() const; + +protected: + virtual void enforceSortOrder() const; + virtual void setHeight(int); + virtual void activate(); +}; + +%End + +%If (Qt_2_00 -) + +class QListViewItem : Qt +{ +%TypeHeaderCode +#include +%End + +public: + QListViewItem(QListView * /TransferThis/); + QListViewItem(QListViewItem * /TransferThis/); + QListViewItem(QListView * /TransferThis/,QListViewItem *); + QListViewItem(QListViewItem * /TransferThis/,QListViewItem *); + + QListViewItem(QListView * /TransferThis/, + QString,QString = QString::null, + QString = QString::null,QString = QString::null, + QString = QString::null,QString = QString::null, + QString = QString::null,QString = QString::null); + + QListViewItem(QListViewItem * /TransferThis/, + QString,QString = QString::null, + QString = QString::null,QString = QString::null, + QString = QString::null,QString = QString::null, + QString = QString::null,QString = QString::null); + + QListViewItem(QListView * /TransferThis/,QListViewItem *, + QString,QString = QString::null, + QString = QString::null,QString = QString::null, + QString = QString::null,QString = QString::null, + QString = QString::null,QString = QString::null); + + QListViewItem(QListViewItem * /TransferThis/,QListViewItem *, + QString,QString = QString::null, + QString = QString::null,QString = QString::null, + QString = QString::null,QString = QString::null, + QString = QString::null,QString = QString::null); + + virtual void insertItem(QListViewItem * /Transfer/); + virtual void takeItem(QListViewItem * /TransferBack/); + + int height() const; + virtual void invalidateHeight(); + int totalHeight() const; + virtual int width(const QFontMetrics &,const QListView *,int) const; + void widthChanged(int = -1) const; + int depth() const; + + virtual void setText(int,const QString &); + virtual QString text(int) const; + + virtual void setPixmap(int,const QPixmap &); + virtual const QPixmap *pixmap(int) const; + + virtual QString key(int,bool) const; +%If (Qt_3_0_0 -) + virtual int compare(QListViewItem *,int,bool) const; +%End + virtual void sortChildItems(int,bool); + + int childCount() const; + + bool isOpen() const; + virtual void setOpen(bool); + virtual void setup(); + + virtual void setSelected(bool); + bool isSelected() const; + + virtual void paintCell(QPainter *,const QColorGroup &,int,int,int); +%If (- Qt_3_0_0) + virtual void paintBranches(QPainter *,const QColorGroup &,int,int,int, + GUIStyle); +%End +%If (Qt_3_0_0 -) + virtual void paintBranches(QPainter *,const QColorGroup &,int,int,int); +%End + virtual void paintFocus(QPainter *,const QColorGroup &,const QRect &); + + QListViewItem *firstChild() const; + QListViewItem *nextSibling() const; + QListViewItem *parent() const; + + QListViewItem *itemAbove(); + QListViewItem *itemBelow(); + + int itemPos() const; + + QListView *listView() const; + + virtual void setSelectable(bool); + bool isSelectable() const; + + virtual void setExpandable(bool); + bool isExpandable(); + + void repaint() const; + +%If (Qt_2_1_0 - Qt_3_0_0) + void sort(); +%End +%If (Qt_3_0_0 -) + virtual void sort(); +%End +%If (Qt_2_2_0 -) + void moveItem(QListViewItem *); +%End + +%If (Qt_3_0_0 -) + virtual void setDragEnabled(bool); + virtual void setDropEnabled(bool); + bool dragEnabled() const; + bool dropEnabled() const; + virtual bool acceptDrop(const QMimeSource *) const; + + void setVisible(bool); + bool isVisible() const; + + virtual void setRenameEnabled(int,bool); + bool renameEnabled(int) const; + virtual void startRename(int); + + virtual void setEnabled(bool); + bool isEnabled() const; + + virtual int rtti() const; + + virtual void setMultiLinesEnabled(bool); + bool multiLinesEnabled() const; +%End + +protected: + virtual void enforceSortOrder() const; + virtual void setHeight(int); + virtual void activate(); + +%If (Qt_2_1_0 -) + bool activatedPos(QPoint &); +%End +%If (Qt_3_0_0 -) + virtual void dropped(QDropEvent *); + virtual void dragEntered(); + virtual void dragLeft(); + virtual void okRename(int); + virtual void cancelRename(int); + + void ignoreDoubleClick(); +%End +}; + +%End + + +class QListView : QScrollView +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_2_2_0 - Qt_3_0_0) + QListView(QWidget * /TransferThis/,const char *,WFlags); +%End +%If (- Qt_3_0_0) + QListView(QWidget * /TransferThis/ = 0,const char * = 0); +%End +%If (Qt_3_0_0 -) + QListView(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); +%End + + int treeStepSize() const; + virtual void setTreeStepSize(int); + + virtual void insertItem(QListViewItem * /Transfer/); +%If (Qt_2_00 -) + virtual void takeItem(QListViewItem * /TransferBack/); +%End + +%If (- Qt_3_0_0) + virtual void clear(); +%End + QHeader *header() const; + +%If (- Qt_2_00) + virtual int addColumn(const char *,int = -1); + virtual void setColumnText(int,const char *); + const char *columnText(int) const; +%End +%If (Qt_2_00 -) + virtual int addColumn(const QString &,int = -1); + virtual int addColumn(const QIconSet &,const QString &,int = -1); +%If (Qt_2_1_0 -) + void removeColumn(int); +%End + virtual void setColumnText(int,const QString &); + virtual void setColumnText(int,const QIconSet &,const QString &); + QString columnText(int) const; +%End + virtual void setColumnWidth(int,int); + int columnWidth(int) const; + + enum WidthMode + { + Manual, + Maximum + }; + + virtual void setColumnWidthMode(int,WidthMode); + WidthMode columnWidthMode(int) const; +%If (Qt_2_1_0 -) + int columns() const; +%End + + virtual void setColumnAlignment(int,int); + int columnAlignment(int) const; + + void show(); + + QListViewItem *itemAt(const QPoint &) const; + QRect itemRect(const QListViewItem *) const; + int itemPos(const QListViewItem *); + + void ensureItemVisible(const QListViewItem *); + + void repaintItem(const QListViewItem *) const; + + virtual void setMultiSelection(bool); + bool isMultiSelection() const; + +%If (Qt_2_1_0 -) + enum SelectionMode { + Single, + Multi, + Extended, + NoSelection + }; + + void setSelectionMode(SelectionMode); + SelectionMode selectionMode() const; +%End + +%If (Qt_2_1_0 -) + virtual void clearSelection(); +%End + virtual void setSelected(QListViewItem *,bool); +%If (Qt_3_2_0 -) + void setSelectionAnchor(QListViewItem *); +%End + bool isSelected(QListViewItem *) const; +%If (Qt_2_1_0 -) + QListViewItem *selectedItem() const; +%End + virtual void setOpen(QListViewItem *,bool); + bool isOpen(QListViewItem *) const; + + virtual void setCurrentItem(QListViewItem *); + QListViewItem *currentItem() const; + + QListViewItem *firstChild() const; +%If (Qt_3_0_0 -) + QListViewItem *lastItem() const; +%End + + int childCount() const; + + virtual void setAllColumnsShowFocus(bool); + bool allColumnsShowFocus() const; + + virtual void setItemMargin(int); + int itemMargin() const; + + virtual void setRootIsDecorated(bool); + bool rootIsDecorated() const; + + virtual void setSorting(int,bool = 1); +%If (Qt_3_1_0 -) + int sortColumn() const; +%End +%If (Qt_3_2_0 -) + void setSortColumn(int); + SortOrder sortOrder() const; + void setSortOrder(SortOrder); +%End +%If (Qt_3_0_0 -) + virtual void sort(); +%End +%If (Qt_2_1_0 - Qt_3_0_0) + void sort(); +%End + +%If (- Qt_2_00) + void setStyle(GUIStyle); + void setFont(const QFont &); + void setPalette(const QPalette &); +%End +%If (Qt_2_00 -) + virtual void setFont(const QFont &); + virtual void setPalette(const QPalette &); +%End + + bool eventFilter(QObject *,QEvent *); + + QSize sizeHint() const; +%If (Qt_2_00 -) + QSize minimumSizeHint() const; +%End + +%If (Qt_2_1_0 -) + void setShowSortIndicator(bool); + bool showSortIndicator() const; +%End +%If (Qt_3_0_0 -) + virtual void setShowToolTips(bool); + bool showToolTips() const; + + enum ResizeMode { + NoColumn, + AllColumns, + LastColumn + }; + + virtual void setResizeMode(ResizeMode); + ResizeMode resizeMode() const; + + QListViewItem *findItem(const QString &,int, + ComparisonFlags = ExactMatch | CaseSensitive) const; + + enum RenameAction { + Accept, + Reject + }; + + virtual void setDefaultRenameAction(RenameAction); + RenameAction defaultRenameAction() const; + bool isRenaming() const; +%End + +%If (Qt_3_2_0 -) + void hideColumn(int); +%End + +public slots: +%If (Qt_3_0_0 -) + virtual void clear(); +%End +%If (Qt_2_1_0 -) + void invertSelection(); + void selectAll(bool); + void setContentsPos(int,int); +%End + void triggerUpdate(); +%If (Qt_3_2_0 -) + void adjustColumn(int); +%End + +signals: + void selectionChanged(); + void selectionChanged(QListViewItem *); + void currentChanged(QListViewItem *); +%If (Qt_2_1_0 -) + void clicked(QListViewItem *); + void clicked(QListViewItem *,const QPoint &,int); + void pressed(QListViewItem *); + void pressed(QListViewItem *,const QPoint &,int); +%End + + void doubleClicked(QListViewItem *); +%If (Qt_3_2_0 -) + void doubleClicked(QListViewItem *,const QPoint &,int); +%End + void returnPressed(QListViewItem *); +%If (Qt_3_0_0 -) + void spacePressed(QListViewItem *); +%End + void rightButtonClicked(QListViewItem *,const QPoint &,int); + void rightButtonPressed(QListViewItem *,const QPoint &,int); +%If (Qt_2_1_0 -) + void mouseButtonPressed(int,QListViewItem *,const QPoint &,int); + void mouseButtonClicked(int,QListViewItem *,const QPoint &,int); +%End + +%If (Qt_3_0_0 -) + void contextMenuRequested(QListViewItem *,const QPoint &,int); +%End + +%If (Qt_2_1_0 -) + void onItem(QListViewItem *); + void onViewport(); + + void expanded(QListViewItem *); + void collapsed(QListViewItem *); +%End +%If (Qt_3_0_0 -) + void dropped(QDropEvent *); + void itemRenamed(QListViewItem *,int,const QString &); + void itemRenamed(QListViewItem *,int); +%End + +protected: +%If (- Qt_2_00) + void mousePressEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); + void mouseDoubleClickEvent(QMouseEvent *); +%End +%If (Qt_2_00 -) + void contentsMousePressEvent(QMouseEvent *); + void contentsMouseReleaseEvent(QMouseEvent *); + void contentsMouseMoveEvent(QMouseEvent *); + void contentsMouseDoubleClickEvent(QMouseEvent *); +%End +%If (Qt_3_0_0 -) + void contentsContextMenuEvent(QContextMenuEvent *); + void contentsDragEnterEvent(QDragEnterEvent *); + void contentsDragMoveEvent(QDragMoveEvent *); + void contentsDragLeaveEvent(QDragLeaveEvent *); + void contentsDropEvent(QDropEvent *); + virtual QDragObject *dragObject(); + virtual void startDrag(); +%End + + void focusInEvent(QFocusEvent *); + void focusOutEvent(QFocusEvent *); + + void keyPressEvent(QKeyEvent *); + + void resizeEvent(QResizeEvent *); +%If (Qt_3_0_0 -) + void viewportResizeEvent(QResizeEvent *); +%End + +%If (Qt_2_00 -) + void showEvent(QShowEvent *); +%End + + void drawContentsOffset(QPainter *,int,int,int,int,int,int); + + virtual void paintEmptyArea(QPainter *,const QRect &); +%If (Qt_2_00 -) + void styleChange(QStyle &); +%End +%If (- Qt_3_0_0) + void enabledChange(bool); +%End +%If (Qt_3_0_0 -) + void windowActivationChange(bool); +%End + +protected slots: + void updateContents(); +%If (Qt_2_00 -) + void doAutoScroll(); +%End + +private: +%If (Qt_2_1_0 -) + QListView(const QWidget &); +%End +}; + + +class QCheckListItem : QListViewItem +{ +%TypeHeaderCode +#include +%End + +public: + enum Type { + RadioButton, + CheckBox, + Controller, +%If (Qt_3_2_0 -) + RadioButtonController, + CheckBoxController, +%End + }; + +%If (Qt_3_2_0 -) + enum ToggleState { + Off, + NoChange, + On + }; +%End + +%If (Qt_3_2_0 -) + QCheckListItem(QCheckListItem * /TransferThis/,const QString &, + Type = RadioButtonController); + QCheckListItem(QCheckListItem * /TransferThis/,QListViewItem *, + const QString &,Type = RadioButtonController); + QCheckListItem(QListViewItem * /TransferThis/,const QString &, + Type = RadioButtonController); + QCheckListItem(QListViewItem * /TransferThis/,QListViewItem *, + const QString &,Type = RadioButtonController); + QCheckListItem(QListView * /TransferThis/,const QString &, + Type = RadioButtonController); + QCheckListItem(QListView * /TransferThis/,QListViewItem *, + const QString &,Type = RadioButtonController); +%End +%If (Qt_2_00 - Qt_3_2_0) + QCheckListItem(QCheckListItem * /TransferThis/,const QString &, + Type = Controller); +%If (Qt_3_1_0 -) + QCheckListItem(QCheckListItem * /TransferThis/,QListViewItem *, + const QString &,Type = Controller); +%End + QCheckListItem(QListViewItem * /TransferThis/,const QString &, + Type = Controller); +%If (Qt_3_1_0 -) + QCheckListItem(QListViewItem * /TransferThis/,QListViewItem *, + const QString &,Type = Controller); +%End + QCheckListItem(QListView * /TransferThis/,const QString &, + Type = Controller); +%If (Qt_3_1_0 -) + QCheckListItem(QListView * /TransferThis/,QListViewItem *, + const QString &,Type = Controller); +%End +%End +%If (Qt_2_00 -) + QCheckListItem(QListViewItem * /TransferThis/,const QString &, + const QPixmap &); + QCheckListItem(QListView * /TransferThis/,const QString &, + const QPixmap &); +%End +%If (- Qt_2_00) + QCheckListItem(QCheckListItem * /TransferThis/,const char *, + Type = Controller); + QCheckListItem(QListView * /TransferThis/,const char *, + Type = Controller); + QCheckListItem(QListViewItem * /TransferThis/,const char *, + const QPixmap &); + QCheckListItem(QListView * /TransferThis/,const char *, + const QPixmap &); +%End + + void paintCell(QPainter *,const QColorGroup &,int,int,int); +%If (Qt_2_00 -) + virtual void paintFocus(QPainter *,const QColorGroup &,const QRect &); +%End + int width(const QFontMetrics &,const QListView *,int) const; + void setup(); + +%If (- Qt_2_00) + void setOn(bool); +%End +%If (Qt_2_00 -) + virtual void setOn(bool); +%End + bool isOn() const; + Type type() const; +%If (- Qt_2_00) + const char *text() const; + const char *text(int) const; +%End +%If (Qt_2_00 -) + QString text() const; + QString text(int) const; +%End + +%If (Qt_3_2_0 -) + void setTristate(bool); + bool isTristate() const; + ToggleState state() const; + void setState(ToggleState); +%End + +%If (Qt_3_0_0 -) + int rtti() const; +%End + +protected: +%If (- Qt_3_0_0) + void paintBranches(QPainter *,const QColorGroup &,int,int,int,GUIStyle); +%End + void activate(); + void turnOffChild(); + virtual void stateChange(bool); +}; + + +%If (Qt_2_00 -) + +class QListViewItemIterator +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_2_0 -) + enum IteratorFlag { + Visible, + Invisible, + Selected, + Unselected, + Selectable, + NotSelectable, + DragEnabled, + DragDisabled, + DropEnabled, + DropDisabled, + Expandable, + NotExpandable, + Checked, + NotChecked + }; +%End + + QListViewItemIterator(); + QListViewItemIterator(QListViewItem *); +%If (Qt_3_2_0 -) + QListViewItemIterator(QListViewItem *,int); +%End + + QListViewItemIterator(const QListViewItemIterator &); + QListViewItemIterator(QListView *); +%If (Qt_3_2_0 -) + QListViewItemIterator(QListView *,int); +%End + + QListViewItemIterator &operator+=(int); + QListViewItemIterator &operator-=(int); + + QListViewItem *current() const; +}; + +%End diff --git a/sip/qt/qlocale.sip b/sip/qt/qlocale.sip new file mode 100644 index 0000000..71f3e6d --- /dev/null +++ b/sip/qt/qlocale.sip @@ -0,0 +1,537 @@ +// This is the SIP interface definition for QLocale. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QLocale (Qt v3.3+) + + short toShort + bool *ok = 0 + + +This returns a tuple of the short result and the +ok value. + + + + ushort toUShort + bool *ok = 0 + + +This returns a tuple of the ushort result and the +ok value. + + + + int toInt + bool *ok = 0 + + +This returns a tuple of the int result and the +ok value. + + + + uint toUInt + bool *ok = 0 + + +This returns a tuple of the uint result and the +ok value. + + + + Q_LONG toLong + bool *ok = 0 + + +This returns a tuple of the long result and the +ok value. + + + + Q_ULONG toULong + bool *ok = 0 + + +This returns a tuple of the ulong result and the +ok value. + + + + float toFloat + bool *ok = 0 + + +This returns a tuple of the float result and the +ok value. + + + + double toDouble + bool *ok = 0 + + +This returns a tuple of the double result and the +ok value. + + +%End + + +%If (Qt_3_3_0 -) + +class QLocale +{ +%TypeHeaderCode +#include +%End + +public: + enum Language { + C, + Abkhazian, + Afan, + Afar, + Afrikaans, + Albanian, + Amharic, + Arabic, + Armenian, + Assamese, + Aymara, + Azerbaijani, + Bashkir, + Basque, + Bengali, + Bhutani, + Bihari, + Bislama, + Breton, + Bulgarian, + Burmese, + Byelorussian, + Cambodian, + Catalan, + Chinese, + Corsican, + Croatian, + Czech, + Danish, + Dutch, + English, + Esperanto, + Estonian, + Faroese, + FijiLanguage, + Finnish, + French, + Frisian, + Gaelic, + Galician, + Georgian, + German, + Greek, + Greenlandic, + Guarani, + Gujarati, + Hausa, + Hebrew, + Hindi, + Hungarian, + Icelandic, + Indonesian, + Interlingua, + Interlingue, + Inuktitut, + Inupiak, + Irish, + Italian, + Japanese, + Javanese, + Kannada, + Kashmiri, + Kazakh, + Kinyarwanda, + Kirghiz, + Korean, + Kurdish, + Kurundi, + Laothian, + Latin, + Latvian, + Lingala, + Lithuanian, + Macedonian, + Malagasy, + Malay, + Malayalam, + Maltese, + Maori, + Marathi, + Moldavian, + Mongolian, + NauruLanguage, + Nepali, + Norwegian, + Occitan, + Oriya, + Pashto, + Persian, + Polish, + Portuguese, + Punjabi, + Quechua, + RhaetoRomance, + Romanian, + Russian, + Samoan, + Sangho, + Sanskrit, + Serbian, + SerboCroatian, + Sesotho, + Setswana, + Shona, + Sindhi, + Singhalese, + Siswati, + Slovak, + Slovenian, + Somali, + Spanish, + Sundanese, + Swahili, + Swedish, + Tagalog, + Tajik, + Tamil, + Tatar, + Telugu, + Thai, + Tibetan, + Tigrinya, + TongaLanguage, + Tsonga, + Turkish, + Turkmen, + Twi, + Uigur, + Ukrainian, + Urdu, + Uzbek, + Vietnamese, + Volapuk, + Welsh, + Wolof, + Xhosa, + Yiddish, + Yoruba, + Zhuang, + Zulu, + LastLanguage + }; + + enum Country { + AnyCountry, + Afghanistan, + Albania, + Algeria, + AmericanSamoa, + Andorra, + Angola, + Anguilla, + Antarctica, + AntiguaAndBarbuda, + Argentina, + Armenia, + Aruba, + Australia, + Austria, + Azerbaijan, + Bahamas, + Bahrain, + Bangladesh, + Barbados, + Belarus, + Belgium, + Belize, + Benin, + Bermuda, + Bhutan, + Bolivia, + BosniaAndHerzegowina, + Botswana, + BouvetIsland, + Brazil, + BritishIndianOceanTerritory, + BruneiDarussalam, + Bulgaria, + BurkinaFaso, + Burundi, + Cambodia, + Cameroon, + Canada, + CapeVerde, + CaymanIslands, + CentralAfricanRepublic, + Chad, + Chile, + China, + ChristmasIsland, + CocosIslands, + Colombia, + Comoros, + DemocraticRepublicOfCongo, + PeoplesRepublicOfCongo, + CookIslands, + CostaRica, + IvoryCoast, + Croatia, + Cuba, + Cyprus, + CzechRepublic, + Denmark, + Djibouti, + Dominica, + DominicanRepublic, + EastTimor, + Ecuador, + Egypt, + ElSalvador, + EquatorialGuinea, + Eritrea, + Estonia, + Ethiopia, + FalklandIslands, + FaroeIslands, + FijiCountry, + Finland, + France, + MetropolitanFrance, + FrenchGuiana, + FrenchPolynesia, + FrenchSouthernTerritories, + Gabon, + Gambia, + Georgia, + Germany, + Ghana, + Gibraltar, + Greece, + Greenland, + Grenada, + Guadeloupe, + Guam, + Guatemala, + Guinea, + GuineaBissau, + Guyana, + Haiti, + HeardAndMcDonaldIslands, + Honduras, + HongKong, + Hungary, + Iceland, + India, + Indonesia, + Iran, + Iraq, + Ireland, + Israel, + Italy, + Jamaica, + Japan, + Jordan, + Kazakhstan, + Kenya, + Kiribati, + DemocraticRepublicOfKorea, + RepublicOfKorea, + Kuwait, + Kyrgyzstan, + Lao, + Latvia, + Lebanon, + Lesotho, + Liberia, + LibyanArabJamahiriya, + Liechtenstein, + Lithuania, + Luxembourg, + Macau, + Macedonia, + Madagascar, + Malawi, + Malaysia, + Maldives, + Mali, + Malta, + MarshallIslands, + Martinique, + Mauritania, + Mauritius, + Mayotte, + Mexico, + Micronesia, + Moldova, + Monaco, + Mongolia, + Montserrat, + Morocco, + Mozambique, + Myanmar, + Namibia, + NauruCountry, + Nepal, + Netherlands, + NetherlandsAntilles, + NewCaledonia, + NewZealand, + Nicaragua, + Niger, + Nigeria, + Niue, + NorfolkIsland, + NorthernMarianaIslands, + Norway, + Oman, + Pakistan, + Palau, + PalestinianTerritory, + Panama, + PapuaNewGuinea, + Paraguay, + Peru, + Philippines, + Pitcairn, + Poland, + Portugal, + PuertoRico, + Qatar, + Reunion, + Romania, + RussianFederation, + Rwanda, + SaintKittsAndNevis, + StLucia, + StVincentAndTheGrenadines, + Samoa, + SanMarino, + SaoTomeAndPrincipe, + SaudiArabia, + Senegal, + Seychelles, + SierraLeone, + Singapore, + Slovakia, + Slovenia, + SolomonIslands, + Somalia, + SouthAfrica, + SouthGeorgiaAndTheSouthSandwichIslands, + Spain, + SriLanka, + StHelena, + StPierreAndMiquelon, + Sudan, + Suriname, + SvalbardAndJanMayenIslands, + Swaziland, + Sweden, + Switzerland, + SyrianArabRepublic, + Taiwan, + Tajikistan, + Tanzania, + Thailand, + Togo, + Tokelau, + TongaCountry, + TrinidadAndTobago, + Tunisia, + Turkey, + Turkmenistan, + TurksAndCaicosIslands, + Tuvalu, + Uganda, + Ukraine, + UnitedArabEmirates, + UnitedKingdom, + UnitedStates, + UnitedStatesMinorOutlyingIslands, + Uruguay, + Uzbekistan, + Vanuatu, + VaticanCityState, + Venezuela, + VietNam, + BritishVirginIslands, + USVirginIslands, + WallisAndFutunaIslands, + WesternSahara, + Yemen, + Yugoslavia, + Zambia, + Zimbabwe, + LastCountry + }; + + QLocale(); + QLocale(const QString &); + QLocale(Language,Country = AnyCountry); + QLocale(const QLocale &); + + Language language() const; + Country country() const; + QString name() const; + + short toShort(const QString &,bool * = 0) const; + ushort toUShort(const QString &,bool * = 0) const; + int toInt(const QString &,bool * = 0) const; + uint toUInt(const QString &,bool * = 0) const; + Q_LONG toLong(const QString &,bool * = 0) const; + Q_ULONG toULong(const QString &,bool * = 0) const; + //Q_LLONG toLongLong(const QString &,bool * = 0) const; + //Q_ULLONG toULongLong(const QString &,bool * = 0) const; + float toFloat(const QString &,bool * = 0) const; + double toDouble(const QString &,bool * = 0) const; + + //QString toString(short) const; + //QString toString(ushort) const; + QString toString(int /Constrained/) const; + //QString toString(uint) const; + //QString toString(Q_LONG) const; + //QString toString(Q_ULONG) const; + //QString toString(Q_LLONG) const; + //QString toString(Q_ULLONG) const; + //QString toString(float,char = 'g',int = 6) const; + QString toString(double,char = 'g',int = 6) const; + + static QString languageToString(Language); + static QString countryToString(Country); + static void setDefault(const QLocale &); + + static QLocale c(); + static QLocale system(); +}; + +%End diff --git a/sip/qt/qmainwindow.sip b/sip/qt/qmainwindow.sip new file mode 100644 index 0000000..11a2f12 --- /dev/null +++ b/sip/qt/qmainwindow.sip @@ -0,0 +1,289 @@ +// This is the SIP interface definition for QMainWindow. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QMainWindow + + QTextStream &operator<< + QTextStream & + const QMainWindow & + + +This operator is fully implemented. (Qt v3+) + + + + QTextStream &operator>> + QTextStream & + QMainWindow & + + +This operator is fully implemented. (Qt v3+) + + + + bool getLocation + QToolBar *tb + ToolBarDock &dock + int &index + bool &nl + int &extraOffset + + +This takes only the tb parameter and returns a tuple of the +result, dock, index, +nl and extraOffset values. (Qt v2.1.0+) + + + + QList<QToolBar> toolBars + ToolBarDock dock + + +This returns a list of QToolBar instances. (Qt v2.1.0+) + + +%End + + +class QMainWindow : QWidget +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QMainWindow(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); +%End +%If (Qt_2_00 -) + QMainWindow(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = WType_TopLevel); +%End + + QMenuBar *menuBar() const; + QStatusBar *statusBar() const; + QToolTipGroup *toolTipGroup() const; + virtual void setCentralWidget(QWidget *); + QWidget *centralWidget() const; + +%If (- Qt_2_1_0) + enum ToolBarDock { + Unmanaged, + TornOff, + Top, + Bottom, + Right, + Left + }; +%End +%If (Qt_2_1_0 - Qt_3_0_0) + enum ToolBarDock { + Unmanaged, + TornOff, + Top, + Bottom, + Right, + Left, + Minimized + }; +%End + +%If (- Qt_2_00) + void setDockEnabled(ToolBarDock,bool); + void addToolBar(QToolBar *,const char *,ToolBarDock = Top,bool = 0); +%End +%If (Qt_2_00 - Qt_3_0_0) + virtual void setDockEnabled(ToolBarDock,bool); + void addToolBar(QToolBar *,ToolBarDock = Top,bool = 0); + void addToolBar(QToolBar *,const QString &,ToolBarDock = Top,bool = 0); + void moveToolBar(QToolBar *,ToolBarDock = Top); +%End +%If (Qt_2_1_0 - Qt_3_0_0) + void setDockEnabled(QToolBar *,ToolBarDock,bool); + bool isDockEnabled(QToolBar *,ToolBarDock) const; + void moveToolBar(QToolBar *,ToolBarDock,bool,int,int = -1); + bool toolBarsMovable() const; +%End +%If (Qt_3_0_0 -) + virtual void setDockEnabled(Dock,bool); +%End +%If (- Qt_3_0_0) + bool isDockEnabled(ToolBarDock) const; + void removeToolBar(QToolBar *); +%End +%If (Qt_3_0_0 -) + bool isDockEnabled(Dock) const; + bool isDockEnabled(QDockArea *) const; + virtual void setDockEnabled(QDockWindow *,Dock,bool); + bool isDockEnabled(QDockWindow *,Dock) const; + bool isDockEnabled(QDockWindow *,QDockArea *) const; + + virtual void addDockWindow(QDockWindow *,Dock = DockTop,bool = 0); + virtual void addDockWindow(QDockWindow *,const QString &, + Dock = DockTop,bool = 0); + virtual void moveDockWindow(QDockWindow *,Dock = DockTop); + virtual void moveDockWindow(QDockWindow *,Dock,bool,int,int = -1); + virtual void removeDockWindow(QDockWindow *); +%End + + void show(); +%If (Qt_3_1_0 -) + void hide(); +%End +%If (Qt_2_1_0 -) + QSize sizeHint() const; + QSize minimumSizeHint() const; +%End + + bool rightJustification() const; + bool usesBigPixmaps() const; +%If (Qt_2_1_0 -) + bool usesTextLabel() const; +%End +%If (Qt_3_0_0 -) + bool dockWindowsMovable() const; +%End +%If (Qt_2_1_0 -) + bool opaqueMoving() const; +%End + + bool eventFilter(QObject *,QEvent *); + +%If (Qt_3_0_0 -) + bool getLocation(QDockWindow *,Dock &,int &,bool &,int &) const; +%End +%If (Qt_2_1_0 - Qt_3_0_0) + bool getLocation(QToolBar *,ToolBarDock &,int &,bool &,int &) const; +%End + +%If (Qt_2_1_0 - Qt_3_0_0) + QList toolBars(ToolBarDock) const; +%End +%If (Qt_3_0_0 -) + QPtrList dockWindows(Dock) const; + QPtrList dockWindows() const; + void lineUpDockWindows(bool = 0); +%End + +%If (Qt_2_1_0 -) + void lineUpToolBars(bool = 0); + bool isDockMenuEnabled() const; +%End + +%If (Qt_3_0_0 -) + bool hasDockWindow(QDockWindow *); + QPtrList toolBars(Dock) const; + + // The following one is in Qt3 but not documented. + //virtual QDockArea *dockingArea(const QPoint &); + QDockArea *leftDock() const; + QDockArea *rightDock() const; + QDockArea *topDock() const; + QDockArea *bottomDock() const; + + virtual bool isCustomizable() const; + + bool appropriate(QDockWindow *) const; + + enum DockWindows { + OnlyToolBars, + NoToolBars, + AllDockWindows + }; + + QPopupMenu *createDockWindowMenu(DockWindows = AllDockWindows) const; +%End + +public slots: +%If (- Qt_2_00) + void setRightJustification(bool); + void setUsesBigPixmaps(bool); +%End +%If (Qt_2_00 -) + virtual void setRightJustification(bool); + virtual void setUsesBigPixmaps(bool); +%End +%If (Qt_2_1_0 - Qt_3_0_0) + void setUsesTextLabel(bool); + void setToolBarsMovable(bool); + void setOpaqueMoving(bool); + void setDockMenuEnabled(bool); +%End +%If (Qt_3_0_0 -) + virtual void setUsesTextLabel(bool); + virtual void setDockWindowsMovable(bool); + virtual void setOpaqueMoving(bool); + virtual void setDockMenuEnabled(bool); +%End +%If (Qt_2_00 - Qt_3_0_0) + void whatsThis(); +%End +%If (Qt_3_0_0 -) + virtual void whatsThis(); + virtual void setAppropriate(QDockWindow *,bool); + virtual void customize(); +%End + +signals: + void pixmapSizeChanged(bool); +%If (Qt_2_1_0 -) + void usesTextLabelChanged(bool); +%End +%If (Qt_2_1_0 - Qt_3_0_0) + void startMovingToolBar(QToolBar *); + void endMovingToolBar(QToolBar *); + void toolBarPositionChanged(QToolBar *); +%End +%If (Qt_3_0_0 -) + void dockWindowPositionChanged(QDockWindow *); +%End + +protected slots: +%If (- Qt_2_00) + void setUpLayout(); +%End +%If (Qt_2_00 -) + virtual void setUpLayout(); +%End +%If (Qt_3_0_0 -) + virtual bool showDockMenu(const QPoint &); + void menuAboutToShow(); +%End + +protected: + void paintEvent(QPaintEvent *); +%If (Qt_2_00 -) + void childEvent(QChildEvent *); +%End + bool event(QEvent *); +%If (Qt_2_00 - Qt_3_0_0) + void resizeEvent(QResizeEvent *); +%End +%If (Qt_2_00 -) + void styleChange(QStyle &); +%End + +private: +%If (Qt_2_00 -) + QMainWindow(const QMainWindow &); +%End +}; diff --git a/sip/qt/qmemarray.sip b/sip/qt/qmemarray.sip new file mode 100644 index 0000000..9415a57 --- /dev/null +++ b/sip/qt/qmemarray.sip @@ -0,0 +1,168 @@ +// This is the SIP interface definition for all types based on the QMemArray +// template. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QMemArray<type> (Qt v3+) + +Types based on the QMemArray template are automatically +converted to and from Python lists of the type. + + +%End + + +%If (Qt_3_0_0 -) + +%MappedType QMemArray +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + // Convert to a Python list of integers. + + PyObject *l; + + // Create the list. + if ((l = PyList_New(sipCpp -> size())) == NULL) + return NULL; + + // Get it. + for (uint i = 0; i < sipCpp -> size(); ++i) + if (PyList_SetItem(l,i,PyInt_FromLong((long)sipCpp -> at(i))) < 0) + { + Py_DECREF(l); + + return NULL; + } + + return l; +%End + +%ConvertToTypeCode + // Convert a Python list of integers to a QMemArray on the heap. + + if (sipIsErr == NULL) + return PyList_Check(sipPy); + + QMemArray *qma = new QMemArray(PyList_GET_SIZE(sipPy)); + + PyErr_Clear(); + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + { + (*qma)[i] = (int)PyInt_AsLong(PyList_GET_ITEM(sipPy,i)); + + if (PyErr_Occurred() != NULL) + { + delete qma; + *sipIsErr = 1; + + return 0; + } + } + + *sipCppPtr = qma; + + return sipGetState(sipTransferObj); +%End +}; + +template +%MappedType QMemArray +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + // Create the list. + PyObject *l; + + if ((l = PyList_New(sipCpp->size())) == NULL) + return NULL; + + // Set the list elements. + for (uint i = 0; i < sipCpp->size(); ++i) + { + TYPE *t = new TYPE(sipCpp->at(i)); + PyObject *tobj; + + if ((tobj = sipConvertFromNewInstance(t, sipClass_TYPE, sipTransferObj)) == NULL) + { + Py_DECREF(l); + delete t; + + return NULL; + } + + PyList_SET_ITEM(l, i, tobj); + } + + return l; +%End + +%ConvertToTypeCode + // Check the type if that is all that is required. + if (sipIsErr == NULL) + { + if (!PyList_Check(sipPy)) + return 0; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + if (!sipCanConvertToInstance(PyList_GET_ITEM(sipPy, i), sipClass_TYPE, SIP_NOT_NONE)) + return 0; + + return 1; + } + + QMemArray *ql = new QMemArray; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + { + int state; + TYPE *t = reinterpret_cast(sipConvertToInstance(PyList_GET_ITEM(sipPy, i), sipClass_TYPE, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); + + if (*sipIsErr) + { + sipReleaseInstance(t, sipClass_TYPE, state); + + delete ql; + return 0; + } + + uint idx = ql->size(); + ql->resize(idx + 1); + ql->at(idx) = *t; + + sipReleaseInstance(t, sipClass_TYPE, state); + } + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; + +%End diff --git a/sip/qt/qmenubar.sip b/sip/qt/qmenubar.sip new file mode 100644 index 0000000..5f61458 --- /dev/null +++ b/sip/qt/qmenubar.sip @@ -0,0 +1,118 @@ +// This is the SIP interface definition for QMenuBar. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QMenuBar + +QMenuBar is fully implemented. + + +%End + + +class QMenuBar : QFrame, QMenuData +{ +%TypeHeaderCode +#include +%End + +public: + QMenuBar(QWidget * /TransferThis/ = 0,const char * = 0); + + void updateItem(int); + + void show(); + void hide(); + + bool eventFilter(QObject *,QEvent *); + + int heightForWidth(int) const; + + enum Separator { + Never = 0, + InWindowsStyle = 1 + }; + + Separator separator() const; +%If (- Qt_2_00) + void setSeparator(Separator); +%End +%If (Qt_2_00 -) + virtual void setSeparator(Separator); +%End + +%If (Qt_2_1_0 -) + void setDefaultUp(bool); + bool isDefaultUp() const; +%End + +%If (Qt_2_00 -) + bool customWhatsThis() const; +%End + +%If (Qt_2_1_0 -) + QSize sizeHint() const; + QSize minimumSize() const; + QSize minimumSizeHint() const; +%End + +%If (Qt_2_2_0 -) + void activateItemAt(int); +%End + +signals: + void activated(int); + void highlighted(int); + +protected: + void drawContents(QPainter *); + void fontChange(const QFont &); + void mousePressEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); + void keyPressEvent(QKeyEvent *); +%If (Qt_2_1_0 -) + void focusInEvent(QFocusEvent *); +%End +%If (Qt_2_00 -) + void focusOutEvent(QFocusEvent *); +%End + void resizeEvent(QResizeEvent *); + void leaveEvent(QEvent *); + void menuContentsChanged(); + void menuStateChanged(); +%If (Qt_2_00 -) + void styleChange(QStyle &); +%End +%If (Qt_3_0_0 -) + int itemAtPos(const QPoint &); + void hidePopups(); + QRect itemRect(int); +%End + +private: + void menuInsPopup(QPopupMenu *); + void menuDelPopup(QPopupMenu *); + void frameChanged(); + + QMenuBar(const QMenuBar &); +}; diff --git a/sip/qt/qmenudata.sip b/sip/qt/qmenudata.sip new file mode 100644 index 0000000..ac5dab0 --- /dev/null +++ b/sip/qt/qmenudata.sip @@ -0,0 +1,291 @@ +// This is the SIP interface definition for QMenuData, QCustomMenuItem and +// QMenuItem. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QMenuData + + QMenuItem *findItem + int id + QMenuData **parent + + +Not implemented. + + + +QCustomMenuItem (Qt v2.1+) + +QCustomMenuItem is fully implemented. + + + +QMenuItem + +QMenuItem is an internal Qt class. + + +%End + + +%If (Qt_3_0_0 -) + +// Even though this is an internal class, uic for Qt v3.1.0 generates code that +// uses it. +class QMenuItem +{ +%TypeHeaderCode +#include +%End + +public: + QMenuItem(); + + void setText(const QString &); + +private: + QMenuItem(const QMenuItem &); +}; + +%End + + +%If (- Qt_3_0_0) + +class QMenuItem; + +%End + + +class QMenuData +{ +%TypeHeaderCode +#include +%End + +public: + QMenuData(); + + uint count(); + +%If (- Qt_2_00) + int insertItem(const char *,SIP_RXOBJ_CON,SIP_SLOT_CON(int),int = 0); + int insertItem(const QPixmap &,SIP_RXOBJ_CON,SIP_SLOT_CON(int),int = 0); + int insertItem(const QPixmap &,const char *,SIP_RXOBJ_CON, + SIP_SLOT_CON(int),int = 0); + int insertItem(const char *,SIP_RXOBJ_CON,SIP_SLOT_CON(int),int,int, + int = -1); + int insertItem(const QPixmap &,SIP_RXOBJ_CON,SIP_SLOT_CON(int),int,int, + int = -1); + int insertItem(const QPixmap&,const char *,SIP_RXOBJ_CON,SIP_SLOT_CON(int), + int,int,int = -1); +%End +%If (Qt_2_00 - Qt_3_0_0) + int insertItem(const QString &,SIP_RXOBJ_CON,SIP_SLOT_CON(int),int = 0, + int = -1,int = -1); + int insertItem(const QIconSet &,const QString &,SIP_RXOBJ_CON, + SIP_SLOT_CON(int),int = 0,int = -1,int = -1); + int insertItem(const QPixmap &,SIP_RXOBJ_CON,SIP_SLOT_CON(int),int = 0, + int = -1,int = -1); + int insertItem(const QIconSet &,const QPixmap &,SIP_RXOBJ_CON, + SIP_SLOT_CON(int),int = 0,int = -1,int = -1); +%End +%If (Qt_3_0_0 -) + int insertItem(const QString &,SIP_RXOBJ_CON,SIP_SLOT_CON(int), + const QKeySequence & = QKeySequence(0),int = -1, + int = -1); + int insertItem(const QIconSet &,const QString &,SIP_RXOBJ_CON, + SIP_SLOT_CON(int), + const QKeySequence & = QKeySequence(0),int = -1, + int = -1); + int insertItem(const QPixmap &,SIP_RXOBJ_CON,SIP_SLOT_CON(int), + const QKeySequence & = QKeySequence(0),int = -1, + int = -1); + int insertItem(const QIconSet &,const QPixmap &,SIP_RXOBJ_CON, + SIP_SLOT_CON(int), + const QKeySequence & = QKeySequence(0),int = -1, + int = -1); +%End + +%If (- Qt_2_00) + int insertItem(const char *,int = -1,int = -1); + int insertItem(const char *,QPopupMenu *,int = -1,int = -1); + int insertItem(const QPixmap &,const char *,int = -1,int = -1); + int insertItem(const QPixmap &,const char *,QPopupMenu *,int = -1, + int = -1); +%End +%If (Qt_2_00 -) + int insertItem(const QString &,int = -1,int = -1); + int insertItem(const QIconSet &,const QString &,int = -1,int = -1); + + int insertItem(const QString &,QPopupMenu *,int = -1,int = -1); + int insertItem(const QIconSet &,const QString &,QPopupMenu *,int = -1, + int = -1); +%End + + int insertItem(const QPixmap &,int = -1,int = -1); +%If (Qt_2_00 -) + int insertItem(const QIconSet &,const QPixmap &,int = -1,int = -1); +%End + int insertItem(const QPixmap &,QPopupMenu *,int = -1,int = -1); +%If (Qt_2_00 -) + int insertItem(const QIconSet &,const QPixmap &,QPopupMenu *,int = -1, + int = -1); +%End + +%If (Qt_2_1_0 -) + int insertItem(QWidget * /Transfer/,int = -1,int = -1); + int insertItem(const QIconSet &,QCustomMenuItem * /Transfer/,int = -1, + int = -1); + int insertItem(QCustomMenuItem * /Transfer/,int = -1,int = -1); +%End + +%If (Qt_2_1_0 -) + int insertSeparator(int = -1); +%End +%If (- Qt_2_1_0) + void insertSeparator(int = -1); +%End + + void removeItem(int); + void removeItemAt(int); + void clear(); + +%If (- Qt_3_0_0) + int accel(int) const; + void setAccel(int,int); +%End +%If (Qt_3_0_0 -) + QKeySequence accel(int) const; + void setAccel(const QKeySequence &,int); +%End + +%If (- Qt_2_00) + const char *text(int) const; +%End +%If (Qt_2_00 -) + QIconSet *iconSet(int) const; + QString text(int) const; +%End + QPixmap *pixmap(int) const; + +%If (Qt_2_00 -) + void setWhatsThis(int,const QString &); + QString whatsThis(int) const; +%End + +%If (- Qt_2_00) + void changeItem(const char *,int); + void changeItem(const QPixmap &,int); + void changeItem(const QPixmap &,const char *,int); +%End +%If (Qt_2_00 -) + void changeItem(int,const QString &); + void changeItem(int,const QPixmap &); + void changeItem(int,const QIconSet &,const QString &); + void changeItem(int,const QIconSet &,const QPixmap &); +%End + +%If (Qt_3_0_0 -) + bool isItemActive(int) const; +%End + + bool isItemEnabled(int) const; + void setItemEnabled(int,bool); + + bool isItemChecked(int) const; + void setItemChecked(int,bool); + +%If (Qt_3_1_0 -) + bool isItemVisible(int) const; + void setItemVisible(int,bool); +%End + + virtual void updateItem(int); + + int indexOf(int) const; + int idAt(int) const; +%If (- Qt_2_00) + void setId(int,int); +%End +%If (Qt_2_00 -) + virtual void setId(int,int); +%End + + bool connectItem(int,SIP_RXOBJ_CON,SIP_SLOT_CON(int)); + bool disconnectItem(int,SIP_RXOBJ_DIS,SIP_SLOT_DIS(int)); + +%If (Qt_2_1_0 -) + bool setItemParameter(int,int); + int itemParameter(int) const; +%End + + QMenuItem *findItem(int) const; +// QMenuItem *findItem(int,QMenuData **) const; +%If (Qt_3_0_0 -) +// Not documented in the Qt3 API (the similar findPopup() was internal in +// Qt2). +// QMenuItem *findItem(QPopupMenu *,int * = 0) const; +%End + +%If (Qt_2_2_0 - Qt_3_0_0) + void activateItemAt(int); +%End +%If (Qt_3_0_0 -) + virtual void activateItemAt(int); +%End + +protected: + virtual void menuContentsChanged(); + virtual void menuStateChanged(); + virtual void menuInsPopup(QPopupMenu *); + virtual void menuDelPopup(QPopupMenu *); +%If (- Qt_3_0_0) +// Documented as internal in the Qt2 API. +// QMenuItem *findPopup(QPopupMenu *,int * = 0); +%End + +private: + QMenuData(const QMenuData &); +}; + + +%If (Qt_2_1_0 -) + +class QCustomMenuItem : Qt +{ +%TypeHeaderCode +#include +%End + +public: + QCustomMenuItem(); + + virtual bool fullSpan() const; + virtual bool isSeparator() const; + virtual void setFont(const QFont &); + virtual void paint(QPainter *,const QColorGroup &,bool,bool,int,int, + int,int) = 0; + virtual QSize sizeHint() = 0; +}; + +%End diff --git a/sip/qt/qmessagebox.sip b/sip/qt/qmessagebox.sip new file mode 100644 index 0000000..16e635e --- /dev/null +++ b/sip/qt/qmessagebox.sip @@ -0,0 +1,204 @@ +// This is the SIP interface definition for QMessageBox. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QMessageBox + +QMessageBox is fully implemented. + + +%End + + +%If (Qt_MESSAGEBOX) + +class QMessageBox : QDialog +{ +%TypeHeaderCode +#include +%End + +public: + enum Icon { + NoIcon, + Information, + Warning, + Critical, +%If (Qt_3_2_0 -) + Question, +%End + }; + + QMessageBox(QWidget * /TransferThis/ = 0,const char * = 0); +%If (- Qt_2_00) + QMessageBox(const char *,const char *,Icon,int,int,int, + QWidget * /TransferThis/ = 0,const char * = 0,bool = 1, + WFlags = 0); +%End +%If (Qt_2_00 -) + QMessageBox(const QString &,const QString &,Icon,int,int,int, + QWidget * /TransferThis/ = 0,const char * = 0,bool = 1, + WFlags = WStyle_DialogBorder); +%End + + enum { + Ok, + Cancel, + Yes, + No, + Abort, + Retry, + Ignore, +%If (Qt_3_2_0 -) + YesAll, + NoAll, +%End + ButtonMask, + Default, + Escape, + FlagMask + }; + +%If (- Qt_2_00) + static int information(QWidget *,const char *,const char *,int,int = 0, + int = 0) /ReleaseGIL/; + static int information(QWidget *,const char *,const char *, + const char * = "OK",const char * = 0, + const char * = 0,int = 0,int = -1) /ReleaseGIL/; + + static int warning(QWidget *,const char *,const char *,int,int, + int = 0) /ReleaseGIL/; + static int warning(QWidget *,const char *,const char *, + const char * = "OK",const char * = 0, + const char * = 0,int = 0,int = -1) /ReleaseGIL/; + + static int critical(QWidget *,const char *,const char *,int,int, + int = 0) /ReleaseGIL/; + static int critical(QWidget *,const char *,const char *, + const char * = "OK",const char * = 0, + const char * = 0,int = 0,int = -1) /ReleaseGIL/; + + static void about(QWidget *,const char *,const char *) /ReleaseGIL/; + static void aboutQt(QWidget *,const char * = 0) /ReleaseGIL/; + + const char *text() const; + void setText(const char *); +%End +%If (Qt_2_00 -) + static int information(QWidget *,const QString &,const QString &,int, + int = 0,int = 0) /ReleaseGIL/; + static int information(QWidget *,const QString &,const QString &, + const QString & = QString::null, + const QString & = QString::null, + const QString & = QString::null, + int = 0,int = -1) /ReleaseGIL/; + +%If (Qt_3_2_0 -) + static int question(QWidget *,const QString &,const QString &,int, + int = 0,int = 0) /ReleaseGIL/; + static int question(QWidget *,const QString &,const QString &, + const QString & = QString::null, + const QString & = QString::null, + const QString & = QString::null, + int = 0,int = -1) /ReleaseGIL/; +%End + + static int warning(QWidget *,const QString &,const QString &,int, + int = 0,int = 0) /ReleaseGIL/; + static int warning(QWidget *,const QString &,const QString &, + const QString & = QString::null, + const QString & = QString::null, + const QString & = QString::null,int = 0, + int = -1) /ReleaseGIL/; + + static int critical(QWidget *,const QString &,const QString &,int, + int = 0,int = 0) /ReleaseGIL/; + static int critical(QWidget *,const QString &,const QString &, + const QString & = QString::null, + const QString & = QString::null, + const QString & = QString::null,int = 0, + int = -1) /ReleaseGIL/; + + static void about(QWidget *,const QString &, + const QString &) /ReleaseGIL/; + static void aboutQt(QWidget *, + const QString & = QString::null) /ReleaseGIL/; + + QString text() const; + void setText(const QString &); +%End + + Icon icon() const; + + void setIcon(Icon); +%If (Qt_2_00 -) + void setIcon(const QPixmap &); +%End + + const QPixmap *iconPixmap() const; + void setIconPixmap(const QPixmap &); + +%If (- Qt_2_00) + const char *buttonText(int) const; + void setButtonText(int,const char *); +%End +%If (Qt_2_00 -) + QString buttonText(int) const; + void setButtonText(int,const QString &); +%End + + void adjustSize(); + +%If (- Qt_3_0_0) + static QPixmap standardIcon(Icon,GUIStyle); +%End +%If (Qt_3_0_0 -) + static QPixmap standardIcon(Icon); +%End + +%If (Qt_2_1_0 -) + TextFormat textFormat() const; + void setTextFormat(TextFormat); +%End + +%If (- Qt_2_00) + void setStyle(GUIStyle); +%End + +protected: + void resizeEvent(QResizeEvent *); +%If (Qt_3_0_0 -) + void showEvent(QShowEvent *); +%End +%If (Qt_3_2_0 -) + void closeEvent(QCloseEvent *); +%End + void keyPressEvent(QKeyEvent *); +%If (Qt_2_00 -) + void styleChanged(QStyle &); +%End + +private: + QMessageBox(const QMessageBox &); +}; + +%End diff --git a/sip/qt/qmetaobject.sip b/sip/qt/qmetaobject.sip new file mode 100644 index 0000000..5cf7703 --- /dev/null +++ b/sip/qt/qmetaobject.sip @@ -0,0 +1,170 @@ +// This is the SIP interface definition for QMetaObject and QMetaProperty. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QMetaObject + + int numClassInfo const + bool super = FALSE + + +Not implemented. + + + + const QClassInfo *classInfo const + bool super = FALSE + + +Not implemented. + + + +QMetaProperty + +QMetaProperty is fully implemented. + + +%End + + +class QMetaObject +{ +%TypeHeaderCode +#include +%End + +public: + const char *className() const; + const char *superClassName() const; + QMetaObject *superClass() const; + +%If (Qt_2_1_0 -) + bool inherits(const char *) const; + + int numSlots(bool = 0) const; + int numSignals(bool = 0) const; + + QStrList slotNames(bool = 0) const; + QStrList signalNames(bool = 0) const; + + //int numClassInfo(bool = 0) const; + //QClassInfo *classInfo(int,bool = 0) const; + const char *classInfo(const char *,bool = 0) const; + +%If (Qt_PROPERTIES) +%If (Qt_3_0_0 -) + const QMetaProperty *property(int,bool = 0) const; + int findProperty(const char *,bool = 0) const; + int numProperties(bool = 0) const; +%End +%If (- Qt_3_0_0) + const QMetaProperty *property(const char *,bool = 0) const; +%End + + QStrList propertyNames(bool = 0) const; +%End +%End + +private: + QMetaObject(const QMetaObject &); +}; + + +%If (Qt_PROPERTIES) +%If (Qt_2_1_0 -) + +class QMetaProperty +{ +%TypeHeaderCode +#include +%End + +public: + const char *type() const; + const char *name() const; + +%If (Qt_2_2_0 -) + bool writable() const; +%End +%If (- Qt_3_0_0) + bool writeable() const; +%End + bool isValid() const; + + bool isSetType() const; + bool isEnumType() const; + QStrList enumKeys() const; + + int keyToValue(const char *) const; + const char *valueToKey(int) const; + int keysToValue(const QStrList &) const; + QStrList valueToKeys(int) const; + +%If (Qt_3_1_0 -) + bool designable(QObject * = 0) const; + bool scriptable(QObject * = 0) const; + bool stored(QObject * = 0) const; +%End +%If (Qt_3_0_0 - Qt_3_1_0) + bool designable(QObject *) const; + bool scriptable(QObject *) const; + bool stored(QObject *) const; +%End + +%If (Qt_3_0_0 -) + bool reset(QObject *) const; +%End + +%If (- Qt_3_0_0) + bool stored(QObject *) const; + bool designable() const; + + enum Specification { + Unspecified, + Class, + Reference, + Pointer, + ConstCharStar + }; + + enum Flags { + UnresolvedEnum, + UnresolvedSet, + UnresolvedEnumOrSet, + UnresolvedStored, + UnresolvedDesignable, + NotDesignable, + NotStored, +%If (Qt_2_2_0 -) + StdSet, +%End + }; + + bool testFlags(uint) const; + void setFlags(uint); + void clearFlags(uint); +%End +}; + +%End +%End diff --git a/sip/qt/qmime.sip b/sip/qt/qmime.sip new file mode 100644 index 0000000..cb5abd8 --- /dev/null +++ b/sip/qt/qmime.sip @@ -0,0 +1,104 @@ +// This is the SIP interface definition for the Qt v2+ QMimeSource, +// QMimeSourceFactory and QWindowsMime classes. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QMimeSource (Qt v2+) + +QMimeSource is fully implemented. + + + +QMimeSourceFactory (Qt v2+) + +QMimeSourceFactory is fully implemented. + + + +QWindowsMime (Qt v3+) + +QWindowsMime is fully implemented. + + +%End + + +%If (Qt_2_00 -) + +class QMimeSource +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_0_0 -) + QMimeSource(); +%End + + virtual const char *format(int = 0) const = 0; + virtual bool provides(const char *) const; + virtual QByteArray encodedData(const char *) const = 0; +%If (Qt_3_0_0 -) + int serialNumber() const; +%End +}; + + +class QMimeSourceFactory +{ +%TypeHeaderCode +#include +%End + +public: + QMimeSourceFactory(); + + static QMimeSourceFactory *defaultFactory(); + static void setDefaultFactory(QMimeSourceFactory * /Transfer/); +%If (Qt_3_0_0 -) + static QMimeSourceFactory *takeDefaultFactory() /TransferBack/; + static void addFactory(QMimeSourceFactory *); + static void removeFactory(QMimeSourceFactory *); +%End + + virtual const QMimeSource *data(const QString &) const; + virtual QString makeAbsolute(const QString &,const QString &) const; + const QMimeSource *data(const QString &,const QString &) const; + + virtual void setText(const QString &,const QString &); + virtual void setImage(const QString &,const QImage &); + virtual void setPixmap(const QString &,const QPixmap &); + virtual void setData(const QString &,QMimeSource * /Transfer/); + virtual void setFilePath(const QStringList &); +%If (Qt_2_1_0 -) + virtual QStringList filePath() const; + void addFilePath(const QString &); +%End + virtual void setExtensionType(const QString &,const char *); +}; + +%End + + +%If (Qt_3_0_0 -) +%End diff --git a/sip/qt/qmotifplusstyle.sip b/sip/qt/qmotifplusstyle.sip new file mode 100644 index 0000000..18aaa3e --- /dev/null +++ b/sip/qt/qmotifplusstyle.sip @@ -0,0 +1,150 @@ +// This is the SIP interface definition for QMotifPlusStyle. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QMotifPlusStyle (Qt v2.2+) + + void getButtonShift + int &x + int &y + + +This takes no parameters and returns a tuple of the x and +y values. (Qt v2) + + + + void scrollBarMetrics + const QScrollBar *sb + int &sliderMin + int &sliderMax + int &sliderLength + int &buttonDim + + +This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2) + + +%End + + +%If (Qt_STYLE_MOTIFPLUS) +%If (Qt_2_2_0 -) + +class QMotifPlusStyle : QMotifStyle +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_5) + QMotifPlusStyle(bool = 0); +%End +%If (Qt_3_0_5 -) + QMotifPlusStyle(bool = 1); +%End + + void polish(QPalette &); + void polish(QWidget *); + void unPolish(QWidget *); + + void polish(QApplication *); + void unPolish(QApplication *); + +%If (- Qt_3_0_0) + void polishPopupMenu(QPopupMenu *); + int defaultFrameWidth() const; + void drawArrow(QPainter *,ArrowType,bool,int,int,int,int, + const QColorGroup &,bool,const QBrush * = 0); + void drawMenuBarItem(QPainter *,int,int,int,int,QMenuItem *, + QColorGroup &,bool,bool); + void drawPopupMenuItem(QPainter *,bool,int,int,QMenuItem *, + const QPalette &,bool,bool,int,int,int,int); + void drawPushButton(QPushButton *,QPainter *); + void drawButton(QPainter *,int,int,int,int,const QColorGroup &,bool = 0, + const QBrush * = 0); + void drawBevelButton(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,const QBrush * = 0); + + void getButtonShift(int &,int &); + + void drawComboButton(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,bool = 0,bool = 1,const QBrush * = 0); + QRect comboButtonRect(int,int,int,int); + QRect comboButtonFocusRect(int,int,int,int); + void drawIndicator(QPainter *,int,int,int,int,const QColorGroup &,int, + bool = 0,bool = 1); + QSize indicatorSize() const; + void drawExclusiveIndicator(QPainter *,int,int,int,int, + const QColorGroup &,bool,bool = 0,bool = 1); + QSize exclusiveIndicatorSize() const; + void drawPanel(QPainter *,int,int,int,int,const QColorGroup &,bool = 0, + int = 1,const QBrush * = 0); + + void scrollBarMetrics(const QScrollBar *,int &,int &,int &,int &); + + void drawScrollBarControls(QPainter *,const QScrollBar *,int,uint,uint); + void drawTab(QPainter *,const QTabBar *,QTab *,bool); + void drawSlider(QPainter *,int,int,int,int,const QColorGroup &, + Orientation,bool,bool); + void drawSliderGroove(QPainter *,int,int,int,int,const QColorGroup &, + QCOORD,Orientation); +%End +%If (Qt_3_0_0 -) + void drawPrimitive(PrimitiveElement,QPainter *,const QRect &, + const QColorGroup &,SFlags = Style_Default, + const QStyleOption & = QStyleOption()) const; + + void drawControl(ControlElement,QPainter *,const QWidget *, + const QRect &,const QColorGroup &, + SFlags = Style_Default, + const QStyleOption & = QStyleOption()) const; + + QRect subRect(SubRect,const QWidget *) const; + + void drawComplexControl(ComplexControl,QPainter *,const QWidget *, + const QRect &,const QColorGroup &, + SFlags = Style_Default,SCFlags = SC_All, + SCFlags = SC_None, + const QStyleOption & = QStyleOption()) const; + + QRect querySubControlMetrics(ComplexControl,const QWidget *, + SubControl, + const QStyleOption & = QStyleOption()) const; + + int pixelMetric(PixelMetric,const QWidget * = 0) const; + + int styleHint(StyleHint,const QWidget *, + const QStyleOption & = QStyleOption(), + QStyleHintReturn * = 0) const; +%End + +protected: + bool eventFilter(QObject *,QEvent *); +}; + +%End +%End diff --git a/sip/qt/qmotifstyle.sip b/sip/qt/qmotifstyle.sip new file mode 100644 index 0000000..d749745 --- /dev/null +++ b/sip/qt/qmotifstyle.sip @@ -0,0 +1,168 @@ +// This is the SIP interface definition for QMotifStyle. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QMotifStyle (Qt v2+) + + void scrollBarMetrics + const QTabBar *sb + int &sliderMin + int &sliderMax + int &sliderLength + int &buttonDim + + +This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2) + + + + void tabbarMetrics + const QTabBar *t + int &hframe + int &vframe + int &overlap + + +This takes only the t parameter and returns a tuple of the +hframe, vframe and +overlap values. (Qt v2) + + +%End + + +%If (Qt_2_00 -) +%If (Qt_STYLE_MOTIF) + +class QMotifStyle : QCommonStyle +{ +%TypeHeaderCode +#include +%End + +public: + QMotifStyle(bool = 0); + + void setUseHighlightColors(bool); + bool useHighlightColors() const; + + void polish(QPalette &); + void polish(QWidget *); + void polish(QApplication *); + +%If (- Qt_3_0_0) + void drawButton(QPainter *,int,int,int,int,const QColorGroup &,bool = 0, + const QBrush * = 0); + void drawBevelButton(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,const QBrush * = 0); + void drawFocusRect(QPainter *,const QRect &,const QColorGroup &, + const QColor * =0,bool = 0); + +%If (Qt_2_1_0 -) + void drawComboButton(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,bool = 0,bool = 1,const QBrush * = 0); + QRect comboButtonRect(int,int,int,int); + QRect comboButtonFocusRect(int,int,int,int); +%End + + void drawPushButton(QPushButton *,QPainter *); + void drawArrow(QPainter *,ArrowType,bool,int,int,int,int, + const QColorGroup &,bool,const QBrush * = 0); + QSize indicatorSize() const; + void drawIndicator(QPainter *,int,int,int,int,const QColorGroup &,int, + bool = 0,bool = 1); + QSize exclusiveIndicatorSize() const; + void drawExclusiveIndicator(QPainter *,int,int,int,int, + const QColorGroup &,bool,bool = 0,bool = 1); + void drawExclusiveIndicatorMask(QPainter *,int,int,int,int,bool); + + void tabbarMetrics(const QTabBar *,int &,int &,int &); + + void drawTab(QPainter *,const QTabBar *,QTab *,bool); + void drawTabMask(QPainter *,const QTabBar *,QTab *,bool); + + void scrollBarMetrics(const QScrollBar *,int &,int &,int &,int &); + + void drawScrollBarControls(QPainter *,const QScrollBar *,int,uint,uint); + int sliderLength() const; + void drawSlider(QPainter *,int,int,int,int,const QColorGroup &, + Orientation,bool,bool); + void drawSliderGroove(QPainter *,int,int,int,int,const QColorGroup &, + QCOORD,Orientation); + int splitterWidth() const; + void drawSplitter(QPainter *,int,int,int,int,const QColorGroup &, + Orientation); + void drawCheckMark(QPainter *,int,int,int,int,const QColorGroup &,bool, + bool); + void polishPopupMenu(QPopupMenu *); + int extraPopupMenuItemWidth(bool,int,QMenuItem *,const QFontMetrics &); + int popupMenuItemHeight(bool,QMenuItem *,const QFontMetrics &); + void drawPopupMenuItem(QPainter *,bool,int,int,QMenuItem *, + const QPalette &,bool,bool,int,int,int,int); +%End +%If (Qt_3_0_0 -) + void polishPopupMenu(QPopupMenu *); + + void drawPrimitive(PrimitiveElement,QPainter *,const QRect &, + const QColorGroup &,SFlags = Style_Default, + const QStyleOption & = QStyleOption()) const; + + void drawControl(ControlElement,QPainter *,const QWidget *, + const QRect &,const QColorGroup &, + SFlags = Style_Default, + const QStyleOption & = QStyleOption()) const; + + void drawComplexControl(ComplexControl,QPainter *,const QWidget *, + const QRect &,const QColorGroup &, + SFlags = Style_Default,SCFlags = SC_All, + SCFlags = SC_None, + const QStyleOption & = QStyleOption()) const; + + QRect querySubControlMetrics(ComplexControl,const QWidget *,SubControl, + const QStyleOption & = QStyleOption()) const; + + int pixelMetric(PixelMetric,const QWidget * = 0) const; + + QSize sizeFromContents(ContentsType,const QWidget *,const QSize &, + const QStyleOption & = QStyleOption()) const; + + QRect subRect(SubRect,const QWidget *) const; + + QPixmap stylePixmap(StylePixmap,const QWidget * = 0, + const QStyleOption & = QStyleOption()) const; + + int styleHint(StyleHint,const QWidget *, + const QStyleOption & = QStyleOption(), + QStyleHintReturn * = 0) const; +%End + +private: +%If (Qt_3_0_0 -) + QMotifStyle(const QMotifStyle &); +%End +}; + +%End +%End diff --git a/sip/qt/qmovie.sip b/sip/qt/qmovie.sip new file mode 100644 index 0000000..ba4f3e9 --- /dev/null +++ b/sip/qt/qmovie.sip @@ -0,0 +1,109 @@ +// This is the SIP interface definition for QMovie. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QMovie + + QMovie + QDataSource *src + int bufsize = 1024 + + +Not implemented. + + + + void pushData + const uchar *data + int length + + +length is derived from data and not +passed as a parameter. (Qt v2.2.0+) + + +%End + + +class QMovie +{ +%TypeHeaderCode +#include +%End + +public: + QMovie(); +%If (Qt_2_2_0 -) + QMovie(int); +%End +// QMovie(QDataSource *,int = 1024); +%If (- Qt_2_00) + QMovie(const char *,int = 1024); +%End +%If (Qt_2_00 -) + QMovie(const QString &,int = 1024); +%End + QMovie(QByteArray,int = 1024); + QMovie(const QMovie &); + +%If (Qt_2_2_0 -) + int pushSpace() const; + void pushData(const uchar * /Array/,int /ArraySize/); +%End + const QColor &backgroundColor() const; + void setBackgroundColor(const QColor &); + const QRect &getValidRect() const; + const QPixmap &framePixmap() const; +%If (Qt_2_2_0 -) + const QImage &frameImage() const; +%End + bool isNull() const; + int frameNumber() const; + int steps() const; + bool paused() const; + bool finished() const; + bool running() const; + void unpause(); + void pause(); + void step(); + void step(int); + void restart(); + int speed() const; + void setSpeed(int); + void connectResize(SIP_RXOBJ_CON,SIP_SLOT_CON(const QSize &)); + void disconnectResize(SIP_RXOBJ_DIS,SIP_SLOT_DIS(const QSize &)); + void connectUpdate(SIP_RXOBJ_CON,SIP_SLOT_CON(const QRect &)); + void disconnectUpdate(SIP_RXOBJ_DIS,SIP_SLOT_DIS(const QRect &)); + + enum Status { + SourceEmpty = -2, + UnrecognizedFormat = -1, + Paused = 1, + EndOfFrame = 2, + EndOfLoop = 3, + EndOfMovie = 4, + SpeedChanged = 5 + }; + + void connectStatus(SIP_RXOBJ_CON,SIP_SLOT_CON(int)); + void disconnectStatus(SIP_RXOBJ_DIS,SIP_SLOT_DIS(int)); +}; diff --git a/sip/qt/qmultilinedit.sip b/sip/qt/qmultilinedit.sip new file mode 100644 index 0000000..1d407ba --- /dev/null +++ b/sip/qt/qmultilinedit.sip @@ -0,0 +1,374 @@ +// This is the SIP interface definition for QMultiLineEdit. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QMultiLineEdit + + void cursorPosition const + int *line + int *col + + +This takes no parameters and returns a tuple of the line and +col values. (Qt v1.x, Qt v2.x) + + + + virtual void del + + + +This has been renamed delChar in Python. (Qt v1.x, Qt v2.x) + + + + void getCursorPosition const + int *line + int *col + + +This takes no parameters and returns a tuple of the line and +col values. (Qt v1.x, Qt v2.x) + + + + bool getMarkedRegion + int *line1 + int *col1 + int *line2 + int *col2 + + +This takes no parameters and returns a tuple of the bool result and the +line1, col1, line2 and +col2 values. + + +%End + + +%If (Qt_3_0_0 -) + +class QMultiLineEdit : QTextEdit +{ +%TypeHeaderCode +#include +%End + +public: + QMultiLineEdit(QWidget * /TransferThis/ = 0,const char * = 0); + + QString textLine(int) const; + int numLines() const; + + virtual void insertLine(const QString &,int = -1); +%If (Qt_3_1_0 -) + virtual void insertAt(const QString &,int,int); + virtual void insertAt(const QString &,int,int,bool); +%End +%If (- Qt_3_1_0) + virtual void insertAt(const QString &,int,int,bool = 0); +%End + virtual void removeLine(int); + +%If (Qt_3_1_0 -) + virtual void setCursorPosition(int,int); + virtual void setCursorPosition(int,int,bool); +%End +%If (- Qt_3_1_0) + virtual void setCursorPosition(int,int,bool = 0); +%End + bool atBeginning() const; + bool atEnd() const; + + void setAlignment(int); + int alignment() const; + + void setEdited(bool); + bool edited() const; + + bool hasMarkedText() const; + QString markedText() const; + + void cursorWordForward(bool); + void cursorWordBackward(bool); + + bool autoUpdate() const; + virtual void setAutoUpdate(bool); + + int totalWidth() const; + int totalHeight() const; + + int maxLines() const; + void setMaxLines(int); + +public slots: + void deselect(); + +protected: + QPoint cursorPoint() const; + virtual void insertAndMark(const QString &,bool); + virtual void newLine(); + virtual void killLine(); + virtual void pageUp(bool = 0); + virtual void pageDown(bool = 0); + virtual void cursorLeft(bool = 0,bool = 1); + virtual void cursorRight(bool = 0,bool = 1); + virtual void cursorUp(bool = 0); + virtual void cursorDown(bool = 0); + virtual void backspace(); + virtual void home(bool = 0); + virtual void end(bool = 0); + bool getMarkedRegion(int *,int *,int *,int *) const; + int lineLength(int) const; + +private: + QMultiLineEdit(const QMultiLineEdit &); +}; + +%End + + +%If (- Qt_3_0_0) + +class QMultiLineEdit : QTableView +{ +%TypeHeaderCode +#include +%End + +public: + QMultiLineEdit(QWidget * /TransferThis/ = 0,const char * = 0); + + int numLines() const; + virtual void removeLine(int); + + void cursorPosition(int *,int *) const; + void getCursorPosition(int *,int *) const; + + bool atBeginning() const; + bool atEnd() const; + int maxLineWidth() const; + bool autoUpdate() const; + bool isReadOnly() const; + bool isOverwriteMode() const; + QString text() const; + +%If (- Qt_2_00) + const char *textLine(int) const; + void setFont(const QFont &); + virtual void insertLine(const char *,int = -1); + virtual void insertAt(const char *,int,int); + void setCursorPosition(int,int,bool = 0); + void setFixedVisibleLines(int); + void setAutoUpdate(bool); +%End + +%If (Qt_2_00 -) + QString textLine(int) const; + QSize sizeHint() const; + QSize minimumSizeHint() const; + QSizePolicy sizePolicy() const; + virtual void setFont(const QFont &); + virtual void insertLine(const QString &,int = -1); + virtual void insertAt(const QString &,int,int,bool = 0); + virtual void setCursorPosition(int,int,bool = 0); + virtual void setFixedVisibleLines(int); + void setAlignment(int); + int alignment() const; + virtual void setValidator(const QValidator *); + const QValidator *validator() const; + void setEdited(bool); + bool edited() const; + void cursorWordForward(bool); + void cursorWordBackward(bool); + + enum EchoMode + { + Normal, + NoEcho, + Password + }; + + virtual void setEchoMode(EchoMode); + EchoMode echoMode() const; + virtual void setMaxLineLength(int); + int maxLineLength() const; + virtual void setMaxLines(int); + int maxLines() const; + virtual void setHMargin(int); + int hMargin() const; + virtual void setSelection(int,int,int,int); + virtual void setAutoUpdate(bool); +%End + +%If (Qt_2_1_0 -) + void setMaxLength(int); + int maxLength() const; + + enum WordWrap { + NoWrap, + WidgetWidth, + FixedPixelWidth, + FixedColumnWidth + }; + + void setWordWrap(WordWrap); + WordWrap wordWrap() const; + void setWrapColumnOrWidth(int); + int wrapColumnOrWidth() const; + + enum WrapPolicy { + AtWhiteSpace, + Anywhere + }; + + void setWrapPolicy(WrapPolicy); + WrapPolicy wrapPolicy() const; + void setUndoEnabled(bool); + bool isUndoEnabled() const; + void setUndoDepth(int); + int undoDepth() const; + int length() const; + static void setDefaultTabStop(int); + static int defaultTabStop(); +%End + +public slots: + void clear(); + void deselect(); + void selectAll(); +%If (Qt_CLIPBOARD) + void paste(); +%If (Qt_2_2_0 -) + void pasteSubType(const QCString &); +%End + void cut(); +%End +%If (- Qt_2_00) + void setText(const char *); + void setReadOnly(bool); + void setOverwriteMode(bool); + void append(const char *); + void copyText(); +%End +%If (Qt_2_00 -) + virtual void setText(const QString &); + virtual void setReadOnly(bool); + virtual void setOverwriteMode(bool); + void append(const QString &); +%If (Qt_CLIPBOARD) + void copyText() const; + void copy() const; +%End + void insert(const QString &); +%End +%If (Qt_2_1_0 -) + void undo(); + void redo(); +%End + +signals: + void textChanged(); + void returnPressed(); +%If (Qt_2_1_0 -) + void undoAvailable(bool); + void redoAvailable(bool); +%End +%If (Qt_2_2_0 -) + void copyAvailable(bool); +%End + +protected: + void paintCell(QPainter *,int,int); +%If (Qt_2_2_0 -) + bool event(QEvent *); +%End + void mousePressEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseDoubleClickEvent(QMouseEvent *); +%If (Qt_2_00 -) + void wheelEvent(QWheelEvent *); +%End + void keyPressEvent(QKeyEvent *); + void focusInEvent(QFocusEvent *); + void focusOutEvent(QFocusEvent *); + void timerEvent(QTimerEvent *); + void leaveEvent(QEvent *); + void resizeEvent(QResizeEvent *); +%If (Qt_DRAGANDDROP) +%If (Qt_2_00 -) + void dragMoveEvent(QDragMoveEvent *); +%End +%If (Qt_2_1_0 -) + void dragEnterEvent(QDragEnterEvent *); +%End +%If (Qt_2_00 -) + void dropEvent(QDropEvent *); + void dragLeaveEvent(QDragLeaveEvent *); +%End +%End + bool hasMarkedText() const; + QString markedText() const; + int textWidth(int); +%If (- Qt_2_00) + int textWidth(QString *); +%End +%If (Qt_2_00 -) + int textWidth(const QString &); +%End + QPoint cursorPoint() const; +%If (- Qt_2_00) + virtual void insertChar(char); +%End +%If (Qt_2_00 -) + virtual void insert(const QString &,bool); +%End + virtual void newLine(); + virtual void killLine(); + virtual void pageUp(bool = 0); + virtual void pageDown(bool = 0); + virtual void cursorLeft(bool = 0,bool = 1); + virtual void cursorRight(bool = 0,bool = 1); + virtual void cursorUp(bool = 0); + virtual void cursorDown(bool = 0); + virtual void backspace(); + virtual void del() /PyName=delChar/; + virtual void home(bool = 0); + virtual void end(bool = 0); + bool getMarkedRegion(int *,int *,int *,int *) const; + int lineLength(int) const; + QString *getString(int) const; +%If (Qt_2_1_0 -) + bool isEndOfParagraph(int) const; +%End +%If (Qt_2_00 -) + QString stringShown(int) const; + void insertChar(QChar); +%End + +private: + QMultiLineEdit(const QMultiLineEdit &); +}; + +%End diff --git a/sip/qt/qmutex.sip b/sip/qt/qmutex.sip new file mode 100644 index 0000000..1f9ff86 --- /dev/null +++ b/sip/qt/qmutex.sip @@ -0,0 +1,104 @@ +// This is the SIP interface definition for QMutex and QMutexLocker. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QMutex (Qt v2.2+) + +QMutex is fully implemented. + + + +QMutexLocker (Qt v3.1+) + +QMutexLocker is fully implemented. + + +%End + + +%If (Qt_THREAD_SUPPORT) + +%If (Qt_3_0_0 -) + +class QMutex +{ +%TypeHeaderCode +#include +%End + +public: + QMutex(bool = 0); + + void lock() /ReleaseGIL/; + void unlock(); + bool locked(); + bool tryLock(); + +private: + QMutex(const QMutex &); +}; + +%End + + +%If (Qt_2_2_0 - Qt_3_0_0) + +class QMutex : Qt +{ +%TypeHeaderCode +#include +%End + +public: + QMutex(bool = 0); + + void lock() /ReleaseGIL/; + void unlock(); + bool locked(); + +private: + QMutex(const QMutex &); +}; + +%End + + +%If (Qt_3_1_0 -) + +class QMutexLocker +{ +%TypeHeaderCode +#include +%End + +public: + QMutexLocker(QMutex *) /ReleaseGIL/; + + QMutex *mutex() const; + +private: + QMutexLocker(const QMutexLocker &); +}; + +%End + +%End diff --git a/sip/qt/qnamespace.sip b/sip/qt/qnamespace.sip new file mode 100644 index 0000000..cddd3b5 --- /dev/null +++ b/sip/qt/qnamespace.sip @@ -0,0 +1,903 @@ +// This is the SIP interface definition for the Qt v2+ Qt class. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +Qt (Qt v2+) + +Qt is fully implemented. + + +%End + + +%If (Qt_2_00 -) + +class Qt +{ +%TypeHeaderCode +#include +%End + +public: + static const QColor &color0; + static const QColor &color1; + static const QColor &black; + static const QColor &white; + static const QColor &darkGray; + static const QColor &gray; + static const QColor &lightGray; + static const QColor &red; + static const QColor &green; + static const QColor &blue; + static const QColor &cyan; + static const QColor &magenta; + static const QColor &yellow; + static const QColor &darkRed; + static const QColor &darkGreen; + static const QColor &darkBlue; + static const QColor &darkCyan; + static const QColor &darkMagenta; + static const QColor &darkYellow; + + enum ButtonState { + NoButton, + LeftButton, + RightButton, + MidButton, + MouseButtonMask, + ShiftButton, + ControlButton, + AltButton, +%If (Qt_3_0_0 -) + MetaButton, +%End + KeyButtonMask, +%If (Qt_2_2_0 -) + Keypad, +%End + }; + + enum Orientation { + Horizontal, + Vertical + }; + +%If (Qt_3_2_0 -) + enum SortOrder { + Ascending, + Descending + }; +%End + +%If (- Qt_3_0_0) + enum AlignmentFlags { + AlignLeft, + AlignRight, + AlignHCenter, + AlignTop, + AlignBottom, + AlignVCenter, + AlignCenter, + + SingleLine, + DontClip, + ExpandTabs, + ShowPrefix, + WordBreak + }; +%End + +%If (Qt_3_0_0 -) + enum AlignmentFlags { + AlignAuto, + AlignLeft, + AlignRight, + AlignHCenter, + AlignJustify, + AlignHorizontal_Mask, + AlignTop, + AlignBottom, + AlignVCenter, + AlignVertical_Mask, + AlignCenter + }; + + enum TextFlags { + SingleLine, + DontClip, + ExpandTabs, + ShowPrefix, + WordBreak, + BreakAnywhere, + DontPrint, // Internal + NoAccel + }; + + typedef uint WState; + + // WidgetState isn't part of the public API but is used in code + // generated by uic/pyuic, so we implement the minimum required. + enum WidgetState { + WState_Polished + }; +%End + + typedef uint WFlags; + + enum WidgetFlags { + WType_TopLevel, +%If (- Qt_3_0_0) + WType_Modal, +%End +%If (Qt_3_0_0 -) + WType_Dialog, +%End + WType_Popup, + WType_Desktop, + WType_Mask, + + WStyle_Customize, + WStyle_NormalBorder, + WStyle_DialogBorder, + WStyle_NoBorder, + WStyle_Title, + WStyle_SysMenu, + WStyle_Minimize, + WStyle_Maximize, + WStyle_MinMax, + WStyle_Tool, + WStyle_StaysOnTop, +%If (- Qt_3_0_0) + WStyle_Dialog, +%End +%If (- Qt_2_1_0) + WStyle_Reserved2, + WStyle_Reserved3, +%End +%If (Qt_2_1_0 -) + WStyle_ContextHelp, +%End +%If (Qt_2_1_0 - Qt_3_0_0) + WStyle_NoBorderEx, +%End +%If (Qt_3_0_0 -) + WStyle_Reserved, +%End + WStyle_Mask, + + WDestructiveClose, + WPaintDesktop, + WPaintUnclipped, + WPaintClever, + WResizeNoErase, // Obsolete + WMouseNoMask, +%If (- Qt_3_0_0) + WNorthWestGravity, +%End +%If (Qt_3_0_0 -) + WStaticContents, +%End +%If (Qt_2_1_0 -) + WRepaintNoErase, // Obsolete + WX11BypassWM, +%End +%If (Qt_3_0_0 -) + WWinOwnDC, +%End +%If (Qt_2_2_0 -) + WGroupLeader, +%End +%If (Qt_3_0_0 -) + WShowModal, + WNoMousePropagation, + WSubWindow, +%End +%If (Qt_3_1_0 -) + WStyle_Splash, +%End +%If (Qt_3_2_0 -) + WNoAutoErase, +%End + }; + + +%If (Qt_3_3_0 -) + + enum WindowState { + WindowNoState, + WindowMinimized, + WindowMaximized, + WindowFullScreen, + WindowActive + }; + +%End + + enum ImageConversionFlags { + ColorMode_Mask, + AutoColor, + ColorOnly, + MonoOnly, + + AlphaDither_Mask, + ThresholdAlphaDither, + OrderedAlphaDither, + DiffuseAlphaDither, + + Dither_Mask, + DiffuseDither, + OrderedDither, + ThresholdDither, + + DitherMode_Mask, + AutoDither, + PreferDither, + AvoidDither + }; + + enum BGMode { + TransparentMode, + OpaqueMode + }; + +%If (- Qt_3_0_0) + enum PaintUnit { + PixelUnit, + LoMetricUnit, + HiMetricUnit, + LoEnglishUnit, + HiEnglishUnit, + TwipsUnit + }; +%End + + enum GUIStyle { +%If (- Qt_3_0_0) + MacStyle, +%End + WindowsStyle, +%If (- Qt_3_0_0) + Win3Style, + PMStyle, +%End + MotifStyle + }; + +%If (Qt_3_1_0 -) + enum SequenceMatch { + NoMatch, + PartialMatch, + Identical + }; +%End + + enum Modifier { +%If (Qt_3_1_0 -) + META, +%End + SHIFT, + CTRL, + ALT, + MODIFIER_MASK, + UNICODE_ACCEL, + ASCII_ACCEL + }; + + enum Key { + Key_Escape, + Key_Tab, + Key_Backtab, + Key_BackTab, + Key_Backspace, + Key_BackSpace, + Key_Return, + Key_Enter, + Key_Insert, + Key_Delete, + Key_Pause, + Key_Print, + Key_SysReq, +%If (Qt_3_1_0 -) + Key_Clear, +%End + + Key_Home, + Key_End, + Key_Left, + Key_Up, + Key_Right, + Key_Down, + Key_Prior, + Key_PageUp, + Key_Next, + Key_PageDown, + + Key_Shift, + Key_Control, + Key_Meta, + Key_Alt, + Key_CapsLock, + Key_NumLock, + Key_ScrollLock, + + Key_F1, + Key_F2, + Key_F3, + Key_F4, + Key_F5, + Key_F6, + Key_F7, + Key_F8, + Key_F9, + Key_F10, + Key_F11, + Key_F12, + Key_F13, + Key_F14, + Key_F15, + Key_F16, + Key_F17, + Key_F18, + Key_F19, + Key_F20, + Key_F21, + Key_F22, + Key_F23, + Key_F24, + Key_F25, + Key_F26, + Key_F27, + Key_F28, + Key_F29, + Key_F30, + Key_F31, + Key_F32, + Key_F33, + Key_F34, + Key_F35, + + Key_Super_L, + Key_Super_R, + Key_Menu, + Key_Hyper_L, + Key_Hyper_R, +%If (Qt_3_0_0 -) + Key_Help, + Key_Direction_L, + Key_Direction_R, +%End + + Key_Space, + Key_Any, + Key_Exclam, + Key_QuoteDbl, + Key_NumberSign, + Key_Dollar, + Key_Percent, + Key_Ampersand, + Key_Apostrophe, + Key_ParenLeft, + Key_ParenRight, + Key_Asterisk, + Key_Plus, + Key_Comma, + Key_Minus, + Key_Period, + Key_Slash, + Key_0, + Key_1, + Key_2, + Key_3, + Key_4, + Key_5, + Key_6, + Key_7, + Key_8, + Key_9, + Key_Colon, + Key_Semicolon, + Key_Less, + Key_Equal, + Key_Greater, + Key_Question, + Key_At, + Key_A, + Key_B, + Key_C, + Key_D, + Key_E, + Key_F, + Key_G, + Key_H, + Key_I, + Key_J, + Key_K, + Key_L, + Key_M, + Key_N, + Key_O, + Key_P, + Key_Q, + Key_R, + Key_S, + Key_T, + Key_U, + Key_V, + Key_W, + Key_X, + Key_Y, + Key_Z, + Key_BracketLeft, + Key_Backslash, + Key_BracketRight, + Key_AsciiCircum, + Key_Underscore, + Key_QuoteLeft, + Key_BraceLeft, + Key_Bar, + Key_BraceRight, + Key_AsciiTilde, + + Key_nobreakspace, + Key_exclamdown, + Key_cent, + Key_sterling, + Key_currency, + Key_yen, + Key_brokenbar, + Key_section, + Key_diaeresis, + Key_copyright, + Key_ordfeminine, + Key_guillemotleft, + Key_notsign, + Key_hyphen, + Key_registered, + Key_macron, + Key_degree, + Key_plusminus, + Key_twosuperior, + Key_threesuperior, + Key_acute, + Key_mu, + Key_paragraph, + Key_periodcentered, + Key_cedilla, + Key_onesuperior, + Key_masculine, + Key_guillemotright, + Key_onequarter, + Key_onehalf, + Key_threequarters, + Key_questiondown, + Key_Agrave, + Key_Aacute, + Key_Acircumflex, + Key_Atilde, + Key_Adiaeresis, + Key_Aring, + Key_AE, + Key_Ccedilla, + Key_Egrave, + Key_Eacute, + Key_Ecircumflex, + Key_Ediaeresis, + Key_Igrave, + Key_Iacute, + Key_Icircumflex, + Key_Idiaeresis, + Key_ETH, + Key_Ntilde, + Key_Ograve, + Key_Oacute, + Key_Ocircumflex, + Key_Otilde, + Key_Odiaeresis, + Key_multiply, + Key_Ooblique, + Key_Ugrave, + Key_Uacute, + Key_Ucircumflex, + Key_Udiaeresis, + Key_Yacute, + Key_THORN, + Key_ssharp, + Key_agrave, + Key_aacute, + Key_acircumflex, + Key_atilde, + Key_adiaeresis, + Key_aring, + Key_ae, + Key_ccedilla, + Key_egrave, + Key_eacute, + Key_ecircumflex, + Key_ediaeresis, + Key_igrave, + Key_iacute, + Key_icircumflex, + Key_idiaeresis, + Key_eth, + Key_ntilde, + Key_ograve, + Key_oacute, + Key_ocircumflex, + Key_otilde, + Key_odiaeresis, + Key_division, + Key_oslash, + Key_ugrave, + Key_uacute, + Key_ucircumflex, + Key_udiaeresis, + Key_yacute, + Key_thorn, + Key_ydiaeresis, + +%If (Qt_3_1_0 -) + Key_Back, + Key_Forward, + Key_Stop, + Key_Refresh, + + Key_VolumeDown, + Key_VolumeMute, + Key_VolumeUp, + Key_BassBoost, + Key_BassUp, + Key_BassDown, + Key_TrebleUp, + Key_TrebleDown, + + Key_MediaPlay, + Key_MediaStop, + Key_MediaPrev, + Key_MediaNext, + Key_MediaRecord, + + Key_HomePage, + Key_Favorites, + Key_Search, + Key_Standby, + Key_OpenUrl, + + Key_LaunchMail, + Key_LaunchMedia, + Key_Launch0, + Key_Launch1, + Key_Launch2, + Key_Launch3, + Key_Launch4, + Key_Launch5, + Key_Launch6, + Key_Launch7, + Key_Launch8, + Key_Launch9, + Key_LaunchA, + Key_LaunchB, + Key_LaunchC, + Key_LaunchD, + Key_LaunchE, + Key_LaunchF, + + Key_MediaLast, +%End + + Key_unknown + }; + + enum ArrowType { + UpArrow, + DownArrow, + LeftArrow, + RightArrow + }; + + enum RasterOp { + CopyROP, + OrROP, + XorROP, + NotAndROP, + EraseROP, + NotCopyROP, + NotOrROP, + NotXorROP, + AndROP, + NotEraseROP, + NotROP, + ClearROP, + SetROP, + NopROP, + AndNotROP, + OrNotROP, + NandROP, + NorROP, + LastROP + }; + + enum PenStyle { + NoPen, + SolidLine, + DashLine, + DotLine, + DashDotLine, + DashDotDotLine, +%If (Qt_2_1_0 -) + MPenStyle +%End + }; + +%If (Qt_2_1_0 -) + enum PenCapStyle { + FlatCap, + SquareCap, + RoundCap, + MPenCapStyle + }; + + enum PenJoinStyle { + MiterJoin, + BevelJoin, + RoundJoin, + MPenJoinStyle + }; +%End + + enum BrushStyle { + NoBrush, + SolidPattern, + Dense1Pattern, + Dense2Pattern, + Dense3Pattern, + Dense4Pattern, + Dense5Pattern, + Dense6Pattern, + Dense7Pattern, + HorPattern, + VerPattern, + CrossPattern, + BDiagPattern, + FDiagPattern, + DiagCrossPattern, + CustomPattern + }; + +%If (Qt_3_1_0 -) + enum MacintoshVersion { + MV_Unknown, + + MV_9, +%If (Qt_3_2_0 -) + MV_10_DOT_0, +%End + MV_10_DOT_1, + MV_10_DOT_2, +%If (Qt_3_2_0 -) + MV_10_DOT_3, +%End +%If (Qt_3_3_5 -) + MV_10_DOT_4, +%End + +%If (Qt_3_2_0 -) + MV_CHEETAH, + MV_PUMA, +%End + MV_JAGUAR, +%If (Qt_3_2_0 -) + MV_PANTHER, +%End +%If (Qt_3_3_5 -) + MV_TIGER, +%End + }; +%End + + enum WindowsVersion { + WV_32s, + WV_95, + WV_98, +%If (Qt_3_0_0 -) + WV_Me, +%End +%If (Qt_2_1_0 -) + WV_DOS_based, +%End + + WV_NT, +%If (Qt_2_1_0 -) + WV_2000, +%End +%If (Qt_3_0_0 -) + WV_XP, +%End +%If (Qt_3_3_0 -) + WV_2003, +%End +%If (Qt_3_3_6 -) + WV_VISTA, +%End +%If (Qt_2_1_0 -) + WV_NT_based, +%End + +%If (Qt_3_3_0 -) + WV_CE, + WV_CENET, + WV_CE_based, +%End + }; + +%If (Qt_2_2_0 -) + enum UIEffect { + UI_General, + UI_AnimateMenu, + UI_FadeMenu, + UI_AnimateCombo, + UI_AnimateTooltip, + UI_FadeTooltip, +%If (Qt_3_2_0 -) + UI_AnimateToolBox, +%End + }; +%End + +%If (Qt_3_0_0 -) + enum CursorShape { + ArrowCursor, + UpArrowCursor, + CrossCursor, + WaitCursor, + IbeamCursor, + SizeVerCursor, + SizeHorCursor, + SizeBDiagCursor, + SizeFDiagCursor, + SizeAllCursor, + BlankCursor, + SplitVCursor, + SplitHCursor, + PointingHandCursor, + ForbiddenCursor, + WhatsThisCursor, +%If (Qt_3_3_0 -) + BusyCursor, +%End + LastCursor, + BitmapCursor + }; +%End + + static const QCursor &arrowCursor; + static const QCursor &upArrowCursor; + static const QCursor &crossCursor; + static const QCursor &waitCursor; + static const QCursor &ibeamCursor; + static const QCursor &sizeVerCursor; + static const QCursor &sizeHorCursor; + static const QCursor &sizeBDiagCursor; + static const QCursor &sizeFDiagCursor; + static const QCursor &sizeAllCursor; + static const QCursor &blankCursor; + static const QCursor &splitVCursor; + static const QCursor &splitHCursor; + static const QCursor &pointingHandCursor; +%If (Qt_2_1_0 -) + static const QCursor &forbiddenCursor; +%End +%If (Qt_3_0_0 -) + static const QCursor &whatsThisCursor; +%End +%If (Qt_3_3_0 -) + static const QCursor &busyCursor; +%End + + enum TextFormat { + PlainText, + RichText, + AutoText, +%If (Qt_3_1_0 -) + LogText, +%End + }; + +%If (Qt_3_1_0 -) + enum AnchorAttribute { + AnchorName, + AnchorHref + }; +%End + +%If (Qt_3_0_0 -) + enum Dock { + DockUnmanaged, + DockTornOff, + DockTop, + DockBottom, + DockRight, + DockLeft, + DockMinimized + }; + + enum DateFormat { + TextDate, + ISODate, + LocalDate + }; + +%If (Qt_3_1_0 -) + enum TimeSpec { + LocalTime, + UTC + }; +%End + + enum BackgroundMode { + FixedColor, + FixedPixmap, + NoBackground, + PaletteForeground, + PaletteButton, + PaletteLight, + PaletteMidlight, + PaletteDark, + PaletteMid, + PaletteText, + PaletteBrightText, + PaletteBase, + PaletteBackground, + PaletteShadow, + PaletteHighlight, + PaletteHighlightedText, + PaletteButtonText, + PaletteLink, + PaletteLinkVisited, + X11ParentRelative + }; + + typedef uint ComparisonFlags; + + enum StringComparisonMode { + CaseSensitive, + BeginsWith, + EndsWith, + Contains, + ExactMatch + }; + +%If (Qt_3_2_0 -) + enum Corner { + TopLeft, + TopRight, + BottomLeft, + BottomRight + }; +%End + +%If (WS_X11) + typedef unsigned long HANDLE; +%End +%End +}; + +%End diff --git a/sip/qt/qnetworkprotocol.sip b/sip/qt/qnetworkprotocol.sip new file mode 100644 index 0000000..6af512b --- /dev/null +++ b/sip/qt/qnetworkprotocol.sip @@ -0,0 +1,227 @@ +// This is the SIP interface definition for QNetworkOperation, QNetworkProtocol +// and QNetworkProtocolFactoryBase. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QNetworkOperation (Qt v2.1+) + +QNetworkOperation is fully implemented. + + + +QNetworkProtocol (Qt v2.1+) + +QNetworkProtocol is fully implemented. + + + +QNetworkProtocolFactoryBase (Qt v2.1+) + +QNetworkProtocolFactoryBase is fully implemented. + + +%End + + +%If (Qt_NETWORKPROTOCOL) +%If (Qt_2_1_0 -) + +class QNetworkProtocolFactoryBase +{ +%TypeHeaderCode +#include +%End + +public: + virtual QNetworkProtocol *createObject() = 0 /Factory/; + +}; + + +class QNetworkProtocol : QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum State { + StWaiting, + StInProgress, + StDone, + StFailed, + StStopped + }; + +%If (- Qt_3_0_0) + enum Operation { + OpListChildren, + OpMkdir, + OpRemove, + OpRename, + OpGet, + OpPut + }; +%End +%If (Qt_3_0_0 -) + enum Operation { + OpListChildren, + OpMkDir, + OpRemove, + OpRename, + OpGet, + OpPut + }; +%End + + enum ConnectionState { + ConHostFound, + ConConnected, + ConClosed + }; + +%If (- Qt_3_0_0) + enum Error { + NoError, + ErrValid, + ErrUnknownProtocol, + ErrUnsupported, + ErrParse, + ErrLoginIncorrect, + ErrHostNotFound, + ErrListChlidren, + ErrMkdir, + ErrRemove, + ErrRename, + ErrGet, + ErrPut, + ErrFileNotExisting, + ErrPermissionDenied + }; +%End +%If (Qt_3_0_0 -) + enum Error { + NoError, + ErrValid, + ErrUnknownProtocol, + ErrUnsupported, + ErrParse, + ErrLoginIncorrect, + ErrHostNotFound, + ErrListChildren, + ErrMkDir, + ErrRemove, + ErrRename, + ErrGet, + ErrPut, + ErrFileNotExisting, + ErrPermissionDenied + }; +%End + + QNetworkProtocol(); + + virtual void setUrl(QUrlOperator *); + + virtual void setAutoDelete(bool,int = 10000); + bool autoDelete() const; + + static void registerNetworkProtocol(const QString &, + QNetworkProtocolFactoryBase *); + static QNetworkProtocol *getNetworkProtocol(const QString &) /Factory/; + static bool hasOnlyLocalFileSystem(); + + virtual int supportedOperations() const; + virtual void addOperation(QNetworkOperation *); + + QUrlOperator *url() const; + QNetworkOperation *operationInProgress() const; + virtual void clearOperationQueue(); + virtual void stop(); + +signals: + void data(const QByteArray &,QNetworkOperation *); + void connectionStateChanged(int,const QString &); + void finished(QNetworkOperation *); + void start(QNetworkOperation *); + void newChildren(const QValueList &,QNetworkOperation *); + void newChild(const QUrlInfo &,QNetworkOperation *); + void createdDirectory(const QUrlInfo &,QNetworkOperation *); + void removed(QNetworkOperation *); + void itemChanged(QNetworkOperation *); + void dataTransferProgress(int,int,QNetworkOperation *); + +protected: + virtual void processOperation(QNetworkOperation *); + virtual void operationListChildren(QNetworkOperation *); + virtual void operationMkDir(QNetworkOperation *); + virtual void operationRemove(QNetworkOperation *); + virtual void operationRename(QNetworkOperation *); + virtual void operationGet(QNetworkOperation *); + virtual void operationPut(QNetworkOperation *); +%If (Qt_3_0_0 -) + virtual void operationPutChunk(QNetworkOperation *); +%End + virtual bool checkConnection(QNetworkOperation *); + +private: +%If (Qt_3_1_0 -) + QNetworkProtocol(const QNetworkProtocol &); +%End +}; + + +class QNetworkOperation : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QNetworkOperation(QNetworkProtocol::Operation,const QString &, + const QString &,const QString &); + QNetworkOperation(QNetworkProtocol::Operation,const QByteArray &, + const QByteArray &,const QByteArray &); + + void setState(QNetworkProtocol::State); + void setProtocolDetail(const QString &); + void setErrorCode(int); + void setArg(int,const QString &); + void setRawArg(int,const QByteArray &); + + QNetworkProtocol::Operation operation() const; + QNetworkProtocol::State state() const; + QString arg(int) const; + QByteArray rawArg(int) const; + QString protocolDetail() const; + int errorCode() const; + + void free(); + +private: +%If (Qt_3_1_0 -) + QNetworkOperation(const QNetworkOperation &); +%End +}; + +%End +%End diff --git a/sip/qt/qobject.sip b/sip/qt/qobject.sip new file mode 100644 index 0000000..0129284 --- /dev/null +++ b/sip/qt/qobject.sip @@ -0,0 +1,2319 @@ +// This is the SIP interface definition for QObject. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QObject + + bool disconnect + const QObject *receiver + const char *member = 0 + + +Not yet implemented. + + + + bool disconnect + const char *signal = 0 + const QObject *receiver = 0 + const char *member = 0 + + +Not yet implemented. + + + + static bool disconnect + const QObject *sender + const char *signal + const QObject *receiver + const char *member + + +At the moment PyQt does not support the full behaviour of the corresponding Qt +method. In particular, specifying None (ie. 0 in C++) for the +signal and receiver parameters is not yet +supported. + + +%End + + +%If (Qt_2_00 -) + +class QObject : Qt +{ +%TypeHeaderCode +#include +#include +%End + +public: + QObject(QObject * /TransferThis/ = 0,const char * = 0); + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipWrapperType **type; + int yes, no; + } graph[] = { + {sipName_QWidget, &sipClass_QWidget, 25, 1}, +#if QT_VERSION >= 0x030100 && defined(SIP_FEATURE_Qt_ASSISTANTCLIENT) + {sipName_QAssistantClient, &sipClass_QAssistantClient, -1, 2}, +#else + {NULL, NULL, -1, 2}, +#endif + {sipName_QSessionManager, &sipClass_QSessionManager, -1, 3}, + {sipName_QTranslator, &sipClass_QTranslator, -1, 4}, +#if QT_VERSION >= 0x030000 + {sipName_QProcess, &sipClass_QProcess, -1, 5}, +#else + {NULL, NULL, -1, 5}, +#endif + {sipName_QToolTipGroup, &sipClass_QToolTipGroup, -1, 6}, +#if defined(SIP_FEATURE_Qt_FILEDIALOG) + {sipName_QFileIconProvider, &sipClass_QFileIconProvider, -1, 7}, +#else + {NULL, NULL, -1, 7}, +#endif +#if QT_VERSION >= 220 && defined(SIP_FEATURE_Qt_ACTION) + {sipName_QAction, &sipClass_QAction, 89, 8}, +#else + {NULL, NULL, -1, 8}, +#endif +#if QT_VERSION >= 0x030000 + {sipName_QObjectCleanupHandler, &sipClass_QObjectCleanupHandler, -1, 9}, +#else + {NULL, NULL, -1, 9}, +#endif + {sipName_QTimer, &sipClass_QTimer, -1, 10}, + {sipName_QLayout, &sipClass_QLayout, 90, 11}, +#if QT_VERSION >= 210 && defined(SIP_FEATURE_Qt_NETWORKPROTOCOL) + {sipName_QUrlOperator, &sipClass_QUrlOperator, -1, 12}, +#else + {NULL, NULL, -1, 12}, +#endif + {sipName_QStyleSheet, &sipClass_QStyleSheet, -1, 13}, + {sipName_QValidator, &sipClass_QValidator, 94, 14}, +#if QT_VERSION >= 210 && defined(SIP_FEATURE_Qt_NETWORKPROTOCOL) + {sipName_QNetworkOperation, &sipClass_QNetworkOperation, -1, 15}, +#else + {NULL, NULL, -1, 15}, +#endif + {sipName_QAccel, &sipClass_QAccel, -1, 16}, +#if QT_VERSION >= 0x030100 + {sipName_QEventLoop, &sipClass_QEventLoop, -1, 17}, +#else + {NULL, NULL, -1, 17}, +#endif +#if QT_VERSION >= 210 && defined(SIP_FEATURE_Qt_NETWORKPROTOCOL) + {sipName_QNetworkProtocol, &sipClass_QNetworkProtocol, -1, 18}, +#else + {NULL, NULL, -1, 18}, +#endif +#if QT_VERSION >= 220 && defined(SIP_FEATURE_Qt_SOUND) + {sipName_QSound, &sipClass_QSound, -1, 19}, +#else + {NULL, NULL, -1, 19}, +#endif + {sipName_QApplication, &sipClass_QApplication, -1, 20}, + {sipName_QDragObject, &sipClass_QDragObject, 97, 21}, + {sipName_QSocketNotifier, &sipClass_QSocketNotifier, -1, 22}, + {sipName_QStyle, &sipClass_QStyle, 103, 23}, + {sipName_QSignalMapper, &sipClass_QSignalMapper, -1, 24}, +#if defined(SIP_FEATURE_Qt_CLIPBOARD) + {sipName_QClipboard, &sipClass_QClipboard, -1, -1}, +#else + {NULL, NULL, -1, -1}, +#endif + {sipName_QStatusBar, &sipClass_QStatusBar, -1, 26}, +#if defined(SIP_FEATURE_Qt_SIZEGRIP) + {sipName_QSizeGrip, &sipClass_QSizeGrip, -1, 27}, +#else + {NULL, NULL, -1, 27}, +#endif + {sipName_QTabWidget, &sipClass_QTabWidget, -1, 28}, +#if QT_VERSION >= 0x030000 + {sipName_QDateEdit, &sipClass_QDateEdit, -1, 29}, +#else + {NULL, NULL, -1, 29}, +#endif + {sipName_QMainWindow, &sipClass_QMainWindow, -1, 30}, +#if QT_VERSION >= 0x030000 + {sipName_QDateTimeEdit, &sipClass_QDateTimeEdit, -1, 31}, +#else + {NULL, NULL, -1, 31}, +#endif +#if QT_VERSION >= 0x030000 + {sipName_QTimeEdit, &sipClass_QTimeEdit, -1, 32}, +#else + {NULL, NULL, -1, 32}, +#endif + {sipName_QFrame, &sipClass_QFrame, 46, 33}, + {sipName_QScrollBar, &sipClass_QScrollBar, -1, 34}, +#if QT_VERSION >= 220 && defined(SIP_FEATURE_Qt_DIAL) + {sipName_QDial, &sipClass_QDial, -1, 35}, +#else + {NULL, NULL, -1, 35}, +#endif + {sipName_QButton, &sipClass_QButton, 75, 36}, + {sipName_QTabBar, &sipClass_QTabBar, -1, 37}, + {sipName_QDialog, &sipClass_QDialog, 79, 38}, + {sipName_QComboBox, &sipClass_QComboBox, -1, 39}, + {sipName_QHeader, &sipClass_QHeader, -1, 40}, +#if QT_VERSION >= 0x030000 + {sipName_QDockArea, &sipClass_QDockArea, -1, 41}, +#else + {NULL, NULL, -1, 41}, +#endif +#if QT_VERSION >= 0x030200 + {sipName_QSplashScreen, &sipClass_QSplashScreen, -1, 42}, +#else + {NULL, NULL, -1, 42}, +#endif + {sipName_QSlider, &sipClass_QSlider, -1, 43}, + {sipName_QSpinBox, &sipClass_QSpinBox, -1, 44}, +#if QT_VERSION >= 210 && defined(SIP_FEATURE_Qt_WORKSPACE) + {sipName_QWorkspace, &sipClass_QWorkspace, -1, 45}, +#else + {NULL, NULL, -1, 45}, +#endif +#if QT_VERSION >= 0x030000 + {sipName_QDesktopWidget, &sipClass_QDesktopWidget, -1, -1}, +#else + {NULL, NULL, -1, -1}, +#endif + {sipName_QGrid, &sipClass_QGrid, -1, 47}, + {sipName_QLineEdit, &sipClass_QLineEdit, -1, 48}, +#if QT_VERSION >= 0x030200 + {sipName_QToolBox, &sipClass_QToolBox, -1, 49}, +#else + {NULL, NULL, -1, 49}, +#endif + {sipName_QWidgetStack, &sipClass_QWidgetStack, -1, 50}, +#if QT_VERSION >= 0x030000 + {sipName_QDockWindow, &sipClass_QDockWindow, 60, 51}, +#else + {NULL, NULL, -1, 51}, +#endif + {sipName_QMenuBar, &sipClass_QMenuBar, -1, 52}, + {sipName_QLabel, &sipClass_QLabel, -1, 53}, + {sipName_QGroupBox, &sipClass_QGroupBox, 61, 54}, + {sipName_QPopupMenu, &sipClass_QPopupMenu, -1, 55}, +#if defined(SIP_FEATURE_Qt_SPLITTER) + {sipName_QSplitter, &sipClass_QSplitter, -1, 56}, +#else + {NULL, NULL, -1, 56}, +#endif + {sipName_QProgressBar, &sipClass_QProgressBar, -1, 57}, + {sipName_QScrollView, &sipClass_QScrollView, 66, 58}, + {sipName_QHBox, &sipClass_QHBox, 74, 59}, + {sipName_QLCDNumber, &sipClass_QLCDNumber, -1, -1}, + {sipName_QToolBar, &sipClass_QToolBar, -1, -1}, + {sipName_QButtonGroup, &sipClass_QButtonGroup, 64, 62}, + {sipName_QHGroupBox, &sipClass_QHGroupBox, -1, 63}, + {sipName_QVGroupBox, &sipClass_QVGroupBox, -1, -1}, + {sipName_QVButtonGroup, &sipClass_QVButtonGroup, -1, 65}, + {sipName_QHButtonGroup, &sipClass_QHButtonGroup, -1, -1}, +#if QT_VERSION >= 210 && defined(SIP_FEATURE_Qt_ICONVIEW) + {sipName_QIconView, &sipClass_QIconView, -1, 67}, +#else + {NULL, NULL, -1, 67}, +#endif + {sipName_QListView, &sipClass_QListView, -1, 68}, + {sipName_QListBox, &sipClass_QListBox, -1, 69}, +#if QT_VERSION >= 0x030000 + {sipName_QGridView, &sipClass_QGridView, -1, 70}, +#else + {NULL, NULL, -1, 70}, +#endif +#if QT_VERSION >= 0x030000 + {sipName_QTextEdit, &sipClass_QTextEdit, 71, -1}, +#else + {NULL, NULL, -1, -1}, +#endif + {sipName_QTextBrowser, &sipClass_QTextBrowser, -1, 72}, + {sipName_QMultiLineEdit, &sipClass_QMultiLineEdit, -1, 73}, + {sipName_QTextView, &sipClass_QTextView, -1, -1}, + {sipName_QVBox, &sipClass_QVBox, -1, -1}, + {sipName_QToolButton, &sipClass_QToolButton, -1, 76}, + {sipName_QRadioButton, &sipClass_QRadioButton, -1, 77}, + {sipName_QPushButton, &sipClass_QPushButton, -1, 78}, + {sipName_QCheckBox, &sipClass_QCheckBox, -1, -1}, +#if defined(WS_X11) && defined(SIP_FEATURE_Qt_PRINTDIALOG) + {sipName_QPrintDialog, &sipClass_QPrintDialog, -1, 80}, +#else + {NULL, NULL, -1, 80}, +#endif +#if QT_VERSION >= 0x030000 + {sipName_QErrorMessage, &sipClass_QErrorMessage, -1, 81}, +#else + {NULL, NULL, -1, 81}, +#endif +#if QT_VERSION >= 210 && defined(SIP_FEATURE_Qt_INPUTDIALOG) + {sipName_QInputDialog, &sipClass_QInputDialog, -1, 82}, +#else + {NULL, NULL, -1, 82}, +#endif +#if defined(SIP_FEATURE_Qt_MESSAGEBOX) + {sipName_QMessageBox, &sipClass_QMessageBox, -1, 83}, +#else + {NULL, NULL, -1, 83}, +#endif +#if defined(SIP_FEATURE_Qt_WIZARD) + {sipName_QWizard, &sipClass_QWizard, -1, 84}, +#else + {NULL, NULL, -1, 84}, +#endif +#if defined(SIP_FEATURE_Qt_COLORDIALOG) + {sipName_QColorDialog, &sipClass_QColorDialog, -1, 85}, +#else + {NULL, NULL, -1, 85}, +#endif +#if defined(SIP_FEATURE_Qt_FONTDIALOG) + {sipName_QFontDialog, &sipClass_QFontDialog, -1, 86}, +#else + {NULL, NULL, -1, 86}, +#endif +#if defined(SIP_FEATURE_Qt_FILEDIALOG) + {sipName_QFileDialog, &sipClass_QFileDialog, -1, 87}, +#else + {NULL, NULL, -1, 87}, +#endif +#if defined(SIP_FEATURE_Qt_PROGRESSDIALOG) + {sipName_QProgressDialog, &sipClass_QProgressDialog, -1, 88}, +#else + {NULL, NULL, -1, 88}, +#endif +#if defined(SIP_FEATURE_Qt_TABDIALOG) + {sipName_QTabDialog, &sipClass_QTabDialog, -1, -1}, +#else + {NULL, NULL, -1, -1}, +#endif +#if QT_VERSION >= 220 && defined(SIP_FEATURE_Qt_ACTION) + {sipName_QActionGroup, &sipClass_QActionGroup, -1, -1}, +#else + {NULL, NULL, -1, -1}, +#endif + {sipName_QGridLayout, &sipClass_QGridLayout, -1, 91}, + {sipName_QBoxLayout, &sipClass_QBoxLayout, 92, -1}, + {sipName_QHBoxLayout, &sipClass_QHBoxLayout, -1, 93}, + {sipName_QVBoxLayout, &sipClass_QVBoxLayout, -1, -1}, + {sipName_QDoubleValidator, &sipClass_QDoubleValidator, -1, 95}, + {sipName_QIntValidator, &sipClass_QIntValidator, -1, 96}, +#if QT_VERSION >= 0x030000 + {sipName_QRegExpValidator, &sipClass_QRegExpValidator, -1, -1}, +#else + {NULL, NULL, -1, -1}, +#endif + {sipName_QTextDrag, &sipClass_QTextDrag, -1, 98}, + {sipName_QStoredDrag, &sipClass_QStoredDrag, 101, 99}, +#if QT_VERSION >= 210 && defined(SIP_FEATURE_Qt_ICONVIEW) && defined(SIP_FEATURE_Qt_DRAGANDDROP) + {sipName_QIconDrag, &sipClass_QIconDrag, -1, 100}, +#else + {NULL, NULL, -1, 100}, +#endif + {sipName_QImageDrag, &sipClass_QImageDrag, -1, -1}, +#if QT_VERSION >= 210 + {sipName_QColorDrag, &sipClass_QColorDrag, -1, 102}, +#else + {NULL, NULL, -1, 102}, +#endif + {sipName_QUriDrag, &sipClass_QUriDrag, -1, -1}, + {sipName_QCommonStyle, &sipClass_QCommonStyle, 104, -1}, +#if defined(SIP_FEATURE_Qt_STYLE_WINDOWS) + {sipName_QWindowsStyle, &sipClass_QWindowsStyle, 106, 105}, +#else + {NULL, NULL, -1, 105}, +#endif +#if defined(SIP_FEATURE_Qt_STYLE_MOTIF) + {sipName_QMotifStyle, &sipClass_QMotifStyle, 107, -1}, +#else + {NULL, NULL, -1, -1}, +#endif +#if defined(SIP_FEATURE_Qt_STYLE_PLATINUM) + {sipName_QPlatinumStyle, &sipClass_QPlatinumStyle, -1, 110}, +#else + {NULL, NULL, -1, 110}, +#endif +#if defined(SIP_FEATURE_Qt_STYLE_CDE) + {sipName_QCDEStyle, &sipClass_QCDEStyle, -1, 108}, +#else + {NULL, NULL, -1, 108}, +#endif +#if QT_VERSION >= 220 && defined(SIP_FEATURE_Qt_STYLE_MOTIFPLUS) + {sipName_QMotifPlusStyle, &sipClass_QMotifPlusStyle, -1, 109}, +#else + {NULL, NULL, -1, 109}, +#endif +#if QT_VERSION >= 220 && defined(SIP_FEATURE_Qt_STYLE_SGI) + {sipName_QSGIStyle, &sipClass_QSGIStyle, -1, -1}, +#else + {NULL, NULL, -1, -1}, +#endif +#if defined(PYQT_STYLE_WINDOWSXP) + {sipName_QWindowsXPStyle, &sipClass_QWindowsXPStyle, -1, -1}, +#else + {NULL, NULL, -1, -1}, +#endif + }; + + int i = 0; + + sipClass = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipClass = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + + // This is really virtual. With the way we are implementing it doesn't + // need to be and has the advantage that the C++ implementation can be + // used in %ConvertToSubClassCode to get the C++ name for Python + // sub-classes. However, it is also means that C++ plugins can't get + // the true (Python) class name. + SIP_PYOBJECT className() const; +%MethodCode + sipRes = sipClassName(sipSelf); +%End + +%If (- Qt_3_0_0) + static QString tr(const char *) /AutoGen=Qt_TRANSLATION/; +%End +%If (Qt_2_2_0 - Qt_2_3_1) + // There was an apparent bug in moc prior to Qt v2.3.1 where this + // method wasn't automatically generated. + + static QString tr(const char *,const char *); +%End +%If (Qt_2_3_1 - Qt_3_0_0) + static QString tr(const char *,const char *) /AutoGen=Qt_TRANSLATION/; +%End +%If (Qt_3_0_0 -) + // Note that tr() and trUtf8() are really static methods. We pretend + // they aren't so that we can use self to get hold of the class name. + // We could mimic moc's behaviour more accurately by creating tr() and + // trUtf8() methods for a Python sub-class instance in the sub-class's + // ctor. + + QString tr(const char *,const char * = 0); +%MethodCode + PyObject *nmobj; + + if ((nmobj = sipClassName(sipSelf)) == NULL) + sipIsErr = 1; + else + { + char *cname = PyString_AsString(nmobj); + + Py_BEGIN_ALLOW_THREADS + + if (cname && qApp) + sipRes = new QString(qApp -> translate(cname,a0,a1,QApplication::DefaultCodec)); + else + sipRes = new QString(QString::fromLatin1(a0)); + + Py_END_ALLOW_THREADS + + Py_DECREF(nmobj); + } +%End + + QString trUtf8(const char *,const char * = 0); +%MethodCode + PyObject *nmobj; + + if ((nmobj = sipClassName(sipSelf)) == NULL) + sipIsErr = 1; + else + { + char *cname = PyString_AsString(nmobj); + + Py_BEGIN_ALLOW_THREADS + + if (cname && qApp) + sipRes = new QString(qApp -> translate(cname,a0,a1,QApplication::UnicodeUTF8)); + else + sipRes = new QString(QString::fromUtf8(a0)); + + Py_END_ALLOW_THREADS + + Py_DECREF(nmobj); + } +%End +%End + virtual QMetaObject *metaObject() const /AutoGen/; + virtual bool event(QEvent *); + virtual bool eventFilter(QObject *,QEvent *); + + bool isA(const char *) const; +%MethodCode + // The Qt implementation doesn't know anything about Python + // sub-classes. For SIP v4 we use the Python type's name. For + // SIP v3 we use the broken Qt behaviour as it's deprecated and + // we want to keep things simple. + +#if SIP_VERSION >= 0x040000 + sipRes = (strcmp(sipSelf -> ob_type -> tp_name,a0) == 0); +#else + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp -> QObject::isA(a0); + Py_END_ALLOW_THREADS +#endif +%End + + bool inherits(const char *) const; +%MethodCode + // The Qt implementation doesn't know anything about Python + // sub-classes. For SIP v4 we use the Python type's MRO. For + // SIP v3 we use the broken Qt behaviour as it's deprecated and + // we want to keep things simple. + +#if SIP_VERSION >= 0x040000 + PyObject *mro = sipSelf -> ob_type -> tp_mro; + + sipRes = 0; + + for (int i = 0; i < PyTuple_GET_SIZE(mro); ++i) + if (strcmp(((PyTypeObject *)PyTuple_GET_ITEM(mro,i)) -> tp_name,a0) == 0) + { + sipRes = 1; + break; + } +#else + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp -> QObject::inherits(a0); + Py_END_ALLOW_THREADS +#endif +%End + +%If (- Qt_3_0_0) + QStringList superClasses(bool = 0) const; +%End + const char *name() const; + const char *name(const char *) const; + virtual void setName(const char *); + bool isWidgetType() const; + bool highPriority() const; + bool signalsBlocked() const; + void blockSignals(bool); + int startTimer(int); + void killTimer(int); + void killTimers(); +%If (- Qt_3_0_0) + QObject *child(const char *,const char * = 0); +%End +%If (Qt_3_0_0 -) + QObject *child(const char *,const char * = 0,bool = 1); +%End + const QObjectList *children() const; +%If (Qt_2_1_0 -) + static const QObjectList *objectTrees(); +%End +%If (- Qt_3_0_0) + QObjectList *queryList(char * = 0,char * = 0,bool = 1,bool = 1); +%End + +%If (Qt_3_0_0 -) + QObjectList *queryList(char * = 0,char * = 0,bool = 1,bool = 1) const; +%MethodCode + // The Qt implementation doesn't know anything about Python + // sub-classes. For SIP v4 we get all classes and then use the + // Python type's MRO to weed out those we don't want. For SIP + // v3 we use the broken Qt behaviour as it's deprecated and we + // want to keep things simple. + +#if SIP_VERSION >= 0x040000 + sipRes = sipCpp -> QObject::queryList(0, a1, a2, a3); + + if (a0 && sipRes) + { + QObject *o = sipRes -> first(); + + while (o) + { + bool remove = TRUE; + PyObject *pyo = sipConvertFromInstance(o, sipClass_QObject, 0); + + if (pyo) + { + PyObject *mro = pyo -> ob_type -> tp_mro; + + for (int i = 0; i < PyTuple_GET_SIZE(mro); ++i) + if (strcmp(((PyTypeObject *)PyTuple_GET_ITEM(mro,i)) -> tp_name,a0) == 0) + { + remove = FALSE; + break; + } + + Py_DECREF(pyo); + } + + if (remove) + { + sipRes -> remove(); + o = sipRes -> current(); + } + else + o = sipRes -> next(); + } + } +#else + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp -> QObject::queryList(a0, a1, a2, a3); + Py_END_ALLOW_THREADS +#endif +%End +%End + + virtual void insertChild(QObject * /Transfer/); + virtual void removeChild(QObject * /TransferBack/); + void installEventFilter(const QObject *); + void removeEventFilter(const QObject *); + + static SIP_PYOBJECT connect(SIP_QOBJECT,SIP_SIGNAL,SIP_QOBJECT,SIP_SLOT); +%MethodCode + sipRes = sipConnectRx(a0,a1,a2,a3,0); +%End + + static SIP_PYOBJECT connect(SIP_QOBJECT,SIP_SIGNAL,SIP_PYCALLABLE); +%MethodCode + sipRes = sipConnectRx(a0,a1,a2,0,0); +%End + + SIP_PYOBJECT connect(SIP_QOBJECT,SIP_SIGNAL,SIP_SLOT) const; +%MethodCode + sipRes = sipConnectRx(a0,a1,sipSelf,a2,0); +%End + + static SIP_PYOBJECT disconnect(SIP_QOBJECT,SIP_SIGNAL,SIP_QOBJECT,SIP_SLOT); +%MethodCode + sipRes = sipDisconnectRx(a0,a1,a2,a3); +%End + + static SIP_PYOBJECT disconnect(SIP_QOBJECT,SIP_SIGNAL,SIP_PYCALLABLE); +%MethodCode + sipRes = sipDisconnectRx(a0,a1,a2,0); +%End + +// bool disconnect(const char * = 0,const QObject * = 0,const char * = 0); +// bool disconnect(const QObject *,const char * = 0); + void dumpObjectTree(); + void dumpObjectInfo(); + QObject *parent() const; + + void emit(SIP_SIGNAL,SIP_PYTUPLE); +%MethodCode + if (pyqt3EmitSignal(sipSelf, a0, a1) < 0) + sipIsErr = 1; +%End + +%If (Qt_PROPERTIES) +%If (Qt_2_1_0 - Qt_3_0_0) + bool setProperty(const char *,const QVariant &); + QVariant property(const char *) const; +%End +%If (Qt_3_0_0 -) + virtual bool setProperty(const char *,const QVariant &); + virtual QVariant property(const char *) const; +%End +%End + +signals: + void destroyed(); +%If (Qt_3_0_0 -) + void destroyed(QObject *); +%End + +public slots: +%If (Qt_3_0_0 -) + void deleteLater(); +%End + +public: + // This is actually protected, but we never need to call the real + // method. + SIP_PYOBJECT sender(); +%MethodCode + sipRes = pyqt3GetSender(); +%End + +protected: + virtual void timerEvent(QTimerEvent *); + virtual void childEvent(QChildEvent *); +%If (Qt_3_0_0 -) + virtual void customEvent(QCustomEvent *); +%End + +private: + QObject(const QObject &); +}; + + +SIP_PYOBJECT QT_TR_NOOP(SIP_PYOBJECT); +%MethodCode + Py_INCREF(a0); + sipRes = a0; +%End + + +SIP_PYOBJECT QT_TRANSLATE_NOOP(SIP_PYOBJECT,SIP_PYOBJECT); +%MethodCode + Py_INCREF(a1); + sipRes = a1; +%End + +%End + + +%If (- Qt_2_00) + +class QObject +{ +%TypeHeaderCode +#include +%End + +public: + QObject(QObject * /TransferThis/ = 0,const char * = 0); + +%ConvertToSubClassCode + // The table of Python class objects indexed by their names. The table + // must be sorted by name. + + static sipStringTypeClassMap map[] = { + {sipName_QAccel, &sipClass_QAccel}, + {sipName_QApplication, &sipClass_QApplication}, + {sipName_QBoxLayout, &sipClass_QBoxLayout}, + {sipName_QButton, &sipClass_QButton}, + {sipName_QButtonGroup, &sipClass_QButtonGroup}, + {sipName_QCheckBox, &sipClass_QCheckBox}, +#if defined(SIP_FEATURE_Qt_CLIPBOARD) + {sipName_QClipboard, &sipClass_QClipboard}, +#endif + {sipName_QComboBox, &sipClass_QComboBox}, + {sipName_QDialog, &sipClass_QDialog}, + {sipName_QDoubleValidator, &sipClass_QDoubleValidator}, + {sipName_QDragObject, &sipClass_QDragObject}, +#if defined(SIP_FEATURE_Qt_FILEDIALOG) + {sipName_QFileDialog, &sipClass_QFileDialog}, + {sipName_QFileIconProvider, &sipClass_QFileIconProvider}, +#endif + {sipName_QFrame, &sipClass_QFrame}, + {sipName_QGridLayout, &sipClass_QGridLayout}, + {sipName_QGroupBox, &sipClass_QGroupBox}, + {sipName_QHBoxLayout, &sipClass_QHBoxLayout}, + {sipName_QHeader, &sipClass_QHeader}, + {sipName_QImageDrag, &sipClass_QImageDrag}, + {sipName_QIntValidator, &sipClass_QIntValidator}, + {sipName_QLCDNumber, &sipClass_QLCDNumber}, + {sipName_QLabel, &sipClass_QLabel}, + {sipName_QLayout, &sipClass_QLayout}, + {sipName_QLineEdit, &sipClass_QLineEdit}, + {sipName_QListBox, &sipClass_QListBox}, + {sipName_QListView, &sipClass_QListView}, + {sipName_QMainWindow, &sipClass_QMainWindow}, + {sipName_QMenuBar, &sipClass_QMenuBar}, +#if defined(SIP_FEATURE_Qt_MESSAGEBOX) + {sipName_QMessageBox, &sipClass_QMessageBox}, +#endif + {sipName_QMultiLineEdit, &sipClass_QMultiLineEdit}, + {sipName_QPopupMenu, &sipClass_QPopupMenu}, +#if defined(WS_X11) && defined(SIP_FEATURE_Qt_PRINTDIALOG) + {sipName_QPrintDialog, &sipClass_QPrintDialog}, +#endif + {sipName_QProgressBar, &sipClass_QProgressBar}, +#if defined(SIP_FEATURE_Qt_PROGRESSDIALOG) + {sipName_QProgressDialog, &sipClass_QProgressDialog}, +#endif + {sipName_QPushButton, &sipClass_QPushButton}, + {sipName_QRadioButton, &sipClass_QRadioButton}, + {sipName_QScrollBar, &sipClass_QScrollBar}, + {sipName_QScrollView, &sipClass_QScrollView}, + {sipName_QSlider, &sipClass_QSlider}, + {sipName_QSocketNotifier, &sipClass_QSocketNotifier}, + {sipName_QSpinBox, &sipClass_QSpinBox}, +#if defined(SIP_FEATURE_Qt_SPLITTER) + {sipName_QSplitter, &sipClass_QSplitter}, +#endif + {sipName_QStatusBar, &sipClass_QStatusBar}, + {sipName_QStoredDrag, &sipClass_QStoredDrag}, + {sipName_QTabBar, &sipClass_QTabBar}, + {sipName_QTextDrag, &sipClass_QTextDrag}, + {sipName_QTimer, &sipClass_QTimer}, + {sipName_QToolBar, &sipClass_QToolBar}, + {sipName_QToolButton, &sipClass_QToolButton}, + {sipName_QToolTipGroup, &sipClass_QToolTipGroup}, + {sipName_QVBoxLayout, &sipClass_QVBoxLayout}, + {sipName_QValidator, &sipClass_QValidator}, + {sipName_QWidget, &sipClass_QWidget}, + {sipName_QWidgetStack, &sipClass_QWidgetStack} + }; + + sipClass = sipMapStringToClass(sipCpp -> className(),map,sizeof (map)/sizeof (map[0])); +%End + + static SIP_PYOBJECT connect(SIP_QOBJECT,SIP_SIGNAL,SIP_QOBJECT,SIP_SLOT); +%MethodCode + sipRes = sipConnectRx(a0,a1,a2,a3,0); +%End + + static SIP_PYOBJECT connect(SIP_QOBJECT,SIP_SIGNAL,SIP_PYCALLABLE); +%MethodCode + sipRes = sipConnectRx(a0,a1,a2,0,0); +%End + + static SIP_PYOBJECT disconnect(SIP_QOBJECT,SIP_SIGNAL,SIP_QOBJECT,SIP_SLOT); +%MethodCode + sipRes = sipDisconnectRx(a0,a1,a2,a3); +%End + + static SIP_PYOBJECT disconnect(SIP_QOBJECT,SIP_SIGNAL,SIP_PYCALLABLE); +%MethodCode + sipRes = sipDisconnectRx(a0,a1,a2,0); +%End + + virtual bool event(QEvent *); + virtual bool eventFilter(QObject *,QEvent *); + const char *tr(const char *) const; + virtual QMetaObject *metaObject() const /AutoGen/; + + // This is actually virtual. However, with the way we are implementing + // it we can ignore it. + SIP_PYOBJECT className() const; +%MethodCode + sipRes = sipClassName(sipSelf); +%End + + bool isA(const char *) const; + bool inherits(const char *) const; + const char *name() const; + const char *name(const char *) const; + void setName(const char *); + bool isWidgetType() const; + bool highPriority() const; + bool signalsBlocked() const; + void blockSignals(bool); + int startTimer(int); + void killTimer(int); + void killTimers(); + const QObjectList *children() const; + QObjectList *queryList(char * = 0,char * = 0,bool = 1,bool = 1); + void insertChild(QObject * /Transfer/); + void removeChild(QObject * /TransferBack/); + void installEventFilter(const QObject *); + void removeEventFilter(const QObject *); +// bool connect(QObject *,const char *,const char *); +// bool disconnect(const char * = 0,const QObject * = 0,const char * = 0); +// bool disconnect(const QObject *,const char * = 0); + void dumpObjectTree(); + void dumpObjectInfo(); + QObject *parent() const; + + void emit(SIP_SIGNAL,SIP_PYTUPLE); +%MethodCode + if (sipEmitSignal(sipSelf,a0,a1) < 0) + sipIsErr = 1; +%End + +signals: + void destroyed(); + +public: + // This is actually protected, but we never need to call the real + // method. + SIP_PYOBJECT sender(); +%MethodCode + sipRes = pyqt3GetSender(); +%End + +protected: + virtual void timerEvent(QTimerEvent *); + +private: + QObject(const QObject &); +}; + +%End + + +SIP_PYOBJECT SLOT(const char *); +%MethodCode + if (!a0) + { + PyErr_Format(PyExc_TypeError,"qt.SLOT() slot name cannot be None"); + sipIsErr = 1; + } + else + { + int len = strlen(a0); + + if ((sipRes = PyString_FromStringAndSize(NULL,1 + len)) == NULL) + sipIsErr = 1; + else + { + char *dp = PyString_AS_STRING(sipRes); + + *dp++ = '1'; + + memcpy(dp,a0,len + 1); + } + } +%End + + +SIP_PYOBJECT SIGNAL(const char *); +%MethodCode + if (!a0) + { + PyErr_Format(PyExc_TypeError,"qt.SIGNAL() signal cannot be None"); + sipIsErr = 1; + } + else + { + int len = strlen(a0); + + if ((sipRes = PyString_FromStringAndSize(NULL,1 + len)) == NULL) + sipIsErr = 1; + else + { + char *dp = PyString_AS_STRING(sipRes); + + *dp++ = '2'; + + memcpy(dp,a0,len + 1); + } + } +%End + + +SIP_PYOBJECT PYSIGNAL(const char *); +%MethodCode + if (!a0) + { + PyErr_Format(PyExc_TypeError,"qt.PYSIGNAL() signal cannot be None"); + sipIsErr = 1; + } + else + { + int len = strlen(a0); + + if ((sipRes = PyString_FromStringAndSize(NULL,1 + len)) == NULL) + sipIsErr = 1; + else + { + char *dp = PyString_AS_STRING(sipRes); + + *dp++ = '9'; + + memcpy(dp,a0,len + 1); + } + } +%End + + +%ModuleHeaderCode + +int pyqt3EmitSignal(PyObject *self, const char *sig, PyObject *sigargs); +PyObject *pyqt3GetSender(); + +%End + + +// This is the Qt support code for SIP v4.4 and later. +%ModuleCode + +#include + +#include +#include +#include +#include +#include + + +// These optional parts of the legacy Qt support API for SIP are implemented. +#undef sipQtEmitSignal +#undef sipQtConnectPySignal +#undef sipQtDisconnectPySignal + + +// Declare explicit C linkage. +extern "C" +{ + static void *sipQtCreateUniversalSlot(sipWrapper *, const char *, + PyObject *, const char *, const char **, int); + static void sipQtDestroyUniversalSlot(void *); + static void *sipQtFindSlot(void *, const char *, PyObject *, const char *, + const char **); + static int sipQtConnect(void *, const char *, void *, const char *, int); + static int sipQtDisconnect(void *, const char *, void *, const char *); + static int sipQtSameSignalSlotName(const char *, const char *); + static sipSlot *sipQtFindSipslot(void *, void **); + static int sipQtEmitSignal(PyObject *, const char *, PyObject *); + static int sipQtConnectPySignal(PyObject *, const char *, PyObject *, + const char *); + static void sipQtDisconnectPySignal(PyObject *, const char *, + PyObject *, const char *); +} + + +extern "C" { + +// The meta-type for PyQt classes. It is just a marker type so that we can +// safely cast to get access to PyQt3-specific data structures. +PyTypeObject pyqtWrapperType_Type = { + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ + "qt.pyqtWrapperType", /* tp_name */ + sizeof (sipWrapperType), /* tp_basicsize */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ + 0, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ + 0, /* tp_del */ +#if PY_VERSION_HEX >= 0x02060000 + 0, /* tp_version_tag */ +#endif +}; + + +/* + * An entry in a linked list of slots. + */ +typedef struct _pyqt3SlotList { + /* The receiver. */ + sipSlot rx; + + /* Next in the list. */ + struct _pyqt3SlotList *next; +} pyqt3SlotList; + + +/* + * A Python signal. + */ +typedef struct _pyqt3PySig { + /* The name of the signal. */ + char *name; + + /* The list of receivers. */ + pyqt3SlotList *rxlist; + + /* Next in the list. */ + struct _pyqt3PySig *next; +} pyqt3PySig; + + +/* + * The C++ wrapper object used by PyQt3. + */ +typedef struct _pyqtWrapper { + /* The super-type. */ + sipWrapper super; + + /* The list of Python signals. */ + pyqt3PySig *pySigList; +} pyqtWrapper; + + +/* + * Clear any slots connected to any Python signals. + */ +static void clear_py_signals_slots(pyqtWrapper *pw) +{ + pyqt3PySig *ps; + + for (ps = pw->pySigList; ps != NULL; ps = ps->next) + { + pyqt3SlotList *psrx; + + for (psrx = ps->rxlist; psrx != NULL; psrx = psrx->next) + sipClearAnySlotReference(&psrx->rx); + } +} + + +/* + * Find the given Python signal. + */ +static pyqt3PySig *find_py_signal(pyqtWrapper *pw, const char *sig) +{ + pyqt3PySig *ps; + + for (ps = pw->pySigList; ps != NULL; ps = ps->next) + if (sipQtSameSignalSlotName(ps->name, sig)) + return ps; + + return 0; +} + + +/* + * Free an slot list entry. + */ +static void free_slot_list(pyqt3SlotList *sl) +{ + sipFreeSipslot(&sl->rx); + sipFree(sl); +} + + +/* + * The instance clear slot. + */ +static int pyqtWrapper_clear(pyqtWrapper *self) +{ + clear_py_signals_slots(self); + + return sipWrapper_Type->tp_clear((PyObject *)self); +} + + +/* + * The instance dealloc slot. + */ +static void pyqtWrapper_dealloc(pyqtWrapper *self) +{ + clear_py_signals_slots(self); + + while (self->pySigList != NULL) + { + pyqt3PySig *ps; + pyqt3SlotList *psrx; + + /* Take this one out of the list. */ + ps = self->pySigList; + self->pySigList = ps->next; + + while ((psrx = ps->rxlist) != NULL) + { + ps->rxlist = psrx->next; + free_slot_list(psrx); + } + + sipFree(ps->name); + sipFree(ps); + } + + sipWrapper_Type->tp_dealloc((PyObject *)self); +} + + +/* + * The instance traverse slot. + */ +static int pyqtWrapper_traverse(pyqtWrapper *self, visitproc visit, void *arg) +{ + int vret; + pyqt3PySig *ps; + + if ((vret = sipWrapper_Type->tp_traverse((PyObject *)self, visit, arg)) != 0) + return vret; + + for (ps = self->pySigList; ps != NULL; ps = ps->next) + { + pyqt3SlotList *psrx; + + for (psrx = ps->rxlist; psrx != NULL; psrx = psrx->next) + if ((vret = sipVisitSlot(&psrx->rx, visit, arg)) != 0) + return vret; + } + + return 0; +} + + +static sipWrapperType pyqtWrapper_Type = { +#if !defined(STACKLESS) + { +#endif + { + PyObject_HEAD_INIT(&pyqtWrapperType_Type) + 0, /* ob_size */ + "qt.pyqtWrapper", /* tp_name */ + sizeof (pyqtWrapper), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)pyqtWrapper_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /* tp_flags */ + 0, /* tp_doc */ + (traverseproc)pyqtWrapper_traverse, /* tp_traverse */ + (inquiry)pyqtWrapper_clear, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ + 0, /* tp_del */ +#if PY_VERSION_HEX >= 0x02060000 + 0, /* tp_version_tag */ +#endif + }, +#if !defined(STACKLESS) + }, +#endif + 0, + 0, + 0 +}; + +}; + + +// This enumerates the different dynamic signal argument types. +enum pyqt3SigArgType { + unknown_sat, + char_sat, + uchar_sat, + string_sat, + ustring_sat, + short_sat, + ushort_sat, + int_sat, + uint_sat, + long_sat, + ulong_sat, + longlong_sat, + ulonglong_sat, + float_sat, + double_sat, + enum_sat, + bool_sat, + void_sat, + class_sat, + classp_sat, + mtype_sat, + mtypep_sat, + qvariant_sat, + qvariantp_sat, + pyobject_sat, + schar_sat, + sstring_sat, + wchar_sat, + wstring_sat +}; + + +// This defines a single dynamic signal argument type. +struct pyqt3SigArg +{ + // The type. + pyqt3SigArgType atype; + + union { + // The Python type for classes. + sipWrapperType *wt; + + // The data for mapped types. + const sipTypeDef *mt; + + // The Python type for named enums. + PyTypeObject *et; + } u; +}; + + +// A parsed signal signature. +struct pyqt3Signature { + // The number of arguments. + int sg_nrargs; + + // The parsed arguments (heap). + pyqt3SigArg *sg_args; + + // The unparsed signature (heap). + char *sg_signature; + + // The next in the list. + pyqt3Signature *sg_next; +}; + + +// A connection to a universal slot. +struct pyqt3SlotConnection +{ + // The transmitter QObject. + void *sc_transmitter; + + // The parsed signature. + const pyqt3Signature *sc_signature; + + // The slot. + sipSlot sc_slot; +}; + + +// This class is used as a slot on behalf of connections to a Python callable. +// It is derived from QObject but is not run through moc. Instead the normal +// moc-generated methods are handwritten in order to implement a universal +// slot. This requires some knowledge of the internal implementation of +// signals and slots but it is likely that they will only change between major +// Qt versions. +class UniversalSlot : public QObject +{ +public: + UniversalSlot(QObject *qtx, pyqt3SlotConnection *conn, const char **member); + ~UniversalSlot(); + + virtual QMetaObject *metaObject() const + { + return staticMetaObject(); + } + + virtual bool qt_invoke(int, QUObject *args); + static QMetaObject *staticMetaObject(); + + static QObject *lastSender; + + static UniversalSlot *unislots; + UniversalSlot *nextus, *prevus; + pyqt3SlotConnection conn; + +private: + static QMetaObject *metaObj; +}; + + +// Create a universal slot. Note that this will leak if there is no signal +// transmitter (ie. no parent) - QTimer.singleShot() for example. +UniversalSlot::UniversalSlot(QObject *qtx, pyqt3SlotConnection *connection, const char **member) : QObject() +{ + // Save the connection. + conn = *connection; + + // Detect when the transmitter is destroyed. + if (qtx) + connect(qtx, SIGNAL(destroyed(QObject *)), SLOT(deleteLater())); + + // Return the slot to connect to. + *member = SLOT(unislot()); + + // Add this one to the global list. + nextus = unislots; + + if (nextus) + nextus -> prevus = this; + + prevus = 0; + unislots = this; +} + + +// Destroy a universal slot. +UniversalSlot::~UniversalSlot() +{ + SIP_BLOCK_THREADS + sipFreeSipslot(&conn.sc_slot); + SIP_UNBLOCK_THREADS + + // Remove this one from the global list. + if (nextus) + nextus -> prevus = prevus; + + if (prevus) + prevus -> nextus = nextus; + else + unislots = nextus; +} + + +// The last Python signal sender. +static PyObject *py_sender = 0; + + +QMetaObject *UniversalSlot::metaObj = 0; + +#if QT_VERSION >= 0x030100 +static QMetaObjectCleanUp cleanUp_UniversalSlot("UniversalSlot", &UniversalSlot::staticMetaObject); +#else +static QMetaObjectCleanUp cleanUp_UniversalSlot; +#endif + +QObject *UniversalSlot::lastSender = 0; +UniversalSlot *UniversalSlot::unislots = 0; + + +QMetaObject *UniversalSlot::staticMetaObject() +{ + if (metaObj) + return metaObj; + + // Define a single slot that takes no arguments and so will accept any + // connection. + static const QUMethod slot = {"unislot", 0, 0}; + static const QMetaData slot_tbl[] = { + {"unislot()", &slot, QMetaData::Public} + }; + + metaObj = QMetaObject::new_metaobject( + "UniversalSlot", QObject::staticMetaObject(), + slot_tbl, 1, + 0, 0, +#ifndef QT_NO_PROPERTIES + 0, 0, + 0, 0, +#endif + 0, 0); + + cleanUp_UniversalSlot.setMetaObject(metaObj); + + return metaObj; +} + + +bool UniversalSlot::qt_invoke(int id, QUObject *qargs) +{ + if (id - staticMetaObject()->slotOffset() != 0) + return QObject::qt_invoke(id, qargs); + + bool ok = TRUE; + const pyqt3Signature *psig = conn.sc_signature; + QVariant *qv; + + // Save in case it is asked for later. + lastSender = const_cast(sender()); + + // If the sender was a QSignal then the single argument will be wrapped + // in a QVariant instance. At the moment we handle int argument as + // that is all that is needed by PyQt (and PyKDE). + if (lastSender->inherits("QSignal")) + qv = &static_QUType_QVariant.get(qargs + 1); + else + qv = 0; + +#ifdef WITH_THREAD + PyGILState_STATE state = PyGILState_Ensure(); +#endif + + PyObject *argtup = PyTuple_New(psig->sg_nrargs); + + if (!argtup) + ok = FALSE; + else + { + for (int a = 0; a < psig->sg_nrargs; ++a) + { + PyObject *arg; + + ++qargs; + + switch (psig->sg_args[a].atype) + { + case char_sat: + case schar_sat: + case uchar_sat: + arg = PyString_FromStringAndSize((char *)static_QUType_ptr.get(qargs), 1); + break; + + case string_sat: + case sstring_sat: + case ustring_sat: + arg = PyString_FromString((char *)static_QUType_ptr.get(qargs)); + break; + + case short_sat: + arg = PyInt_FromLong(*(short *)static_QUType_ptr.get(qargs)); + break; + + case ushort_sat: + arg = PyLong_FromUnsignedLong(*(unsigned short *)static_QUType_ptr.get(qargs)); + break; + + case int_sat: + if (qv) + arg = PyInt_FromLong(qv -> asInt()); + else + arg = PyInt_FromLong(static_QUType_int.get(qargs)); + break; + + case uint_sat: + arg = PyLong_FromUnsignedLong(*(unsigned *)static_QUType_ptr.get(qargs)); + break; + + case long_sat: + arg = PyLong_FromLong(*(long *)static_QUType_ptr.get(qargs)); + break; + + case ulong_sat: + arg = PyLong_FromUnsignedLong(*(unsigned long *)static_QUType_ptr.get(qargs)); + break; + + case longlong_sat: + arg = PyLong_FromLongLong(*(PY_LONG_LONG *)static_QUType_ptr.get(qargs)); + break; + + case ulonglong_sat: + arg = PyLong_FromUnsignedLongLong(*(unsigned PY_LONG_LONG *)static_QUType_ptr.get(qargs)); + break; + + case float_sat: + arg = PyFloat_FromDouble(*(float *)static_QUType_ptr.get(qargs)); + break; + + case double_sat: + arg = PyFloat_FromDouble(static_QUType_double.get(qargs)); + break; + + case enum_sat: + arg = sipConvertFromNamedEnum(*(int *)static_QUType_ptr.get(qargs), psig->sg_args[a].u.et); + break; + + case bool_sat: + arg = PyInt_FromLong(static_QUType_bool.get(qargs)); + break; + + case void_sat: + arg = sipConvertFromVoidPtr((void *)static_QUType_ptr.get(qargs)); + break; + + case class_sat: + case classp_sat: + arg = sipConvertFromInstance((void *)static_QUType_ptr.get(qargs),psig->sg_args[a].u.wt,0); + break; + + case mtype_sat: + case mtypep_sat: + arg = sipConvertFromMappedType((void *)static_QUType_ptr.get(qargs),psig->sg_args[a].u.mt,0); + break; + + case qvariant_sat: + case qvariantp_sat: + arg = sipConvertFromInstance((void *)&static_QUType_QVariant.get(qargs),sipClass_QVariant,0); + break; + + case pyobject_sat: + arg = (PyObject *)static_QUType_ptr.get(qargs); + break; + + default: + arg = Py_NotImplemented; + Py_INCREF(Py_NotImplemented); + } + + PyTuple_SET_ITEM(argtup, a, arg); + } + + // Dispatch to the real slot. + if (ok) + { + PyObject *res = sipInvokeSlot(&conn.sc_slot, argtup); + + if (res) + Py_DECREF(res); + else + ok = FALSE; + } + + Py_DECREF(argtup); + } + + if (!ok) + PyErr_Print(); + +#ifdef WITH_THREAD + PyGILState_Release(state); +#endif + + return ok; +} + + +static pyqt3Signature *parseSignature(const char *sig); +static void parseType(const char *type, pyqt3SigArg *arg); + + +// Factory function to create a universal slot instance. Returns a pointer to +// the instance or 0 if there was an error. +static void *sipQtCreateUniversalSlot(sipWrapper *tx, const char *sig, + PyObject *rxObj, const char *slot, const char **member, int) +{ + pyqt3SlotConnection conn; + + /* Initialise the connection. */ + conn.sc_transmitter = (tx ? sipGetCppPtr((sipSimpleWrapper *)tx, 0) : 0); + + /* Save the real slot. */ + if (sipSaveSlot(&conn.sc_slot, rxObj, slot) < 0) + return 0; + + /* Parse the signature and create the universal slot. */ + if ((conn.sc_signature = parseSignature(sig)) == NULL) + { + sipFreeSipslot(&conn.sc_slot); + return 0; + } + + QObject *qtx = 0; + + // See if the transmitter is a QObject in which case we will connect + // to it's destroyed signal so that the universal slot can be destroyed + // at the same time. (Note that we used to do this by making the + // universal slot a child of the transmitter. This doesn't work as + // expected because QWidget destroys its children before emitting the + // destroyed signal.) + if (tx && PyObject_TypeCheck((PyObject *)tx, (PyTypeObject *)sipClass_QObject)) + qtx = reinterpret_cast(conn.sc_transmitter); + + return new UniversalSlot(qtx, &conn, member); +} + + +// Parse the signal arguments for a connection. +static pyqt3Signature *parseSignature(const char *sig) +{ + static pyqt3Signature *psig_list = NULL; + pyqt3Signature *psig; + const char *sp, *ep; + + // First see if it has already been parsed. Note that both sides of a + // connection will probably be parsed twice because the function names will + // be different even though the signatures will probably be the same. We + // could be more clever, the most saving is when repeatedly emitting a + // signal for which this is sufficient. + for (psig = psig_list; psig != NULL; psig = psig->sg_next) + if (sipQtSameSignalSlotName(psig->sg_signature, sig)) + return psig; + + // Create a new one including space for the copy of the signature. + if ((psig = (pyqt3Signature *)sipMalloc(sizeof (pyqt3Signature) + strlen(sig) + 1)) == NULL) + return NULL; + + psig->sg_signature = (char *)&psig[1]; + psig->sg_nrargs = 0; + psig->sg_args = 0; + + // Find the start and end of the arguments. + sp = strchr(sig, '('); + ep = strrchr(sig, ')'); + + // If the signal isn't well formed we assume Qt will pick it up. + if (sp && ep && sp < ep) + { + // Copy the signature arguments while counting them and removing + // non-significant spaces. Each argument is left as a '\0' terminated + // string. + char *dp = psig->sg_signature; + int depth = 0, nrcommas = 0, argstart = TRUE; + + for (;;) + { + char ch = *++sp; + + if (strchr(",*&)<>", ch)) + { + // Backup over any previous trailing space. + if (dp > psig->sg_signature && dp[-1] == ' ') + --dp; + + if (sp == ep) + { + *dp = '\0'; + break; + } + + if (ch == ',' && depth == 0) + { + *dp++ = '\0'; + ++nrcommas; + argstart = TRUE; + } + else + { + *dp++ = ch; + + // Make sure commas in template arguments are ignored. + if (ch == '<') + ++depth; + else if (ch == '>') + --depth; + } + } + else if (ch == ' ') + { + // Ignore leading and multiple spaces. + if (!argstart && dp[-1] != ' ') + *dp++ = ch; + } + else + { + *dp++ = ch; + argstart = FALSE; + } + } + + // Handle the arguments now they are in a normal form. + if (*psig->sg_signature) + { + char *arg = psig->sg_signature; + int a; + + // Allocate the space. + psig->sg_nrargs = nrcommas + 1; + + if ((psig->sg_args = (pyqt3SigArg *)sipMalloc(sizeof (pyqt3SigArg) * psig->sg_nrargs)) == NULL) + { + sipFree(psig); + return NULL; + } + + for (a = 0; a < psig->sg_nrargs; ++a) + { + parseType(arg, &psig->sg_args[a]); + + // Move to the start of the next argument. + arg += strlen(arg) + 1; + } + } + } + + // Make a deep copy of the signal. + strcpy(psig->sg_signature, sig); + + // Add it to the list so it can be re-used. + psig->sg_next = psig_list; + psig_list = psig; + + return psig; +} + + +// Parse a single type. +static void parseType(const char *type, pyqt3SigArg *arg) +{ + size_t btlen = 0; + int unsup, isref = FALSE, indir = 0; + const char *ep; + pyqt3SigArgType sat = unknown_sat; + + // Find the start of the significant part of the type. + if (strncmp(type, "const ", 6) == 0) + type += 6; + + // Find the length of the base type, the number of indirections and if it + // is a reference. + for (ep = type; *ep; ++ep) + if (*ep == '&') + isref = TRUE; + else if (*ep == '*') + ++indir; + else + ++btlen; + + // Extract the base type as a separate string. + char type_str[btlen + 1]; + + strncpy(type_str, type, btlen); + type_str[btlen] = '\0'; + + // Resolve any typedef which may mean more indirection. + type = sipResolveTypedef(type_str); + + // See if we need to make another copy. + bool copy = false; + + if (type) + { + btlen = strlen(type); + + // Remove any additional indirection. + while (btlen) + { + if (type[--btlen] == '*') + { + copy = true; + ++indir; + } + } + } + else + type = type_str; + + // Make sure this doesn't go out of scope while it is being used. + char base_type_str[btlen + 1]; + + if (copy) + { + // Extract the base type again. + strncpy(base_type_str, type, btlen); + base_type_str[btlen] = '\0'; + type = base_type_str; + } + + // Assume that anything other than a base type is unsupported. + unsup = (isref || indir); + + // Parse the base type. + switch (btlen) + { + case 3: + if (strcmp(type, "int") == 0) + sat = int_sat; + break; + + case 4: + if (strcmp(type, "bool") == 0) + sat = bool_sat; + else if (strcmp(type, "long") == 0) + sat = long_sat; + else if (strcmp(type, "char") == 0) + { + sat = (indir ? string_sat : char_sat); + unsup = (isref || indir > 1); + } + else if (strcmp(type, "void") == 0) + { + sat = void_sat; + unsup = (isref || indir != 1); + } + break; + + case 5: + if (strcmp(type, "float") == 0) + sat = float_sat; + else if (strcmp(type, "short") == 0) + sat = short_sat; + break; + + case 6: + if (strcmp(type, "double") == 0) + sat = double_sat; + break; + + case 7: + if (strcmp(type, "__int64") == 0) + sat = longlong_sat; + else if (strcmp(type, "wchar_t") == 0) + { + sat = (indir ? wstring_sat : wchar_sat); + unsup = (isref || indir > 1); + } + break; + + case 8: + if (strcmp(type, "unsigned") == 0) + sat = uint_sat; + else if (strcmp(type, "QVariant") == 0) + { + if (indir == 0) + { + sat = qvariant_sat; + unsup = FALSE; + } + else if (indir == 1) + { + sat = qvariantp_sat; + unsup = FALSE; + } + } + break; + + case 9: + if (strcmp(type, "long long") == 0) + sat = longlong_sat; + break; + + case 11: + if (strcmp(type, "signed char") == 0) + { + sat = (indir ? sstring_sat : schar_sat); + unsup = (isref || indir > 1); + } + break; + + case 12: + if (strcmp(type, "unsigned int") == 0) + sat = uint_sat; + break; + + case 13: + if (strcmp(type, "unsigned long") == 0) + sat = ulong_sat; + else if (strcmp(type, "unsigned char") == 0) + { + sat = (indir ? ustring_sat : uchar_sat); + unsup = (isref || indir > 1); + } + else if (strcmp(type, "PyQt_PyObject") == 0 && indir == 0) + { + sat = pyobject_sat; + unsup = FALSE; + } + break; + + case 14: + if (strcmp(type, "unsigned short") == 0) + sat = ushort_sat; + break; + + case 16: + if (strcmp(type, "unsigned __int64") == 0) + sat = ulonglong_sat; + break; + + case 18: + if (strcmp(type, "unsigned long long") == 0) + sat = ulonglong_sat; + break; + } + + if (sat == unknown_sat) + { + const sipTypeDef *td = sipFindType(type); + + if (td) + { + if (sipTypeIsClass(td)) + { + if (indir == 0) + sat = class_sat; + else if (indir == 1) + sat = classp_sat; + + arg->u.wt = (sipWrapperType *)sipTypeAsPyTypeObject(td); + } + else if (sipTypeIsMapped(td)) + { + if (indir == 0) + sat = mtype_sat; + else if (indir == 1) + sat = mtypep_sat; + + arg->u.mt = td; + } + else if (sipTypeIsEnum(td)) + { + if (indir == 0) + sat = enum_sat; + + arg->u.et = sipTypeAsPyTypeObject(td); + } + } + } + else if (unsup) + sat = unknown_sat; + + arg->atype = sat; +} + + +// Dispose of a receiver that might be a universal slot. +static void sipQtDestroyUniversalSlot(void *rx) +{ + for (UniversalSlot *us = UniversalSlot::unislots; us; us = us->nextus) + if (us == reinterpret_cast(rx)) + { + delete us; + break; + } +} + + +// Search for the universal slot connected to a particular Qt signal. +static void *sipQtFindSlot(void *tx, const char *sig, PyObject *rxObj, + const char *slot, const char **member) +{ + for (UniversalSlot *us = UniversalSlot::unislots; us; us = us->nextus) + { + pyqt3SlotConnection *conn = &us->conn; + + if (conn->sc_transmitter != tx) + continue; + + if (!sipQtSameSignalSlotName(conn->sc_signature->sg_signature, sig)) + continue; + + if (sipSameSlot(&conn->sc_slot, rxObj, slot)) + { + *member = SLOT(unislot()); + return us; + } + } + + return 0; +} + + +// Connect a Qt signal to a Qt slot. +static int sipQtConnect(void *tx, const char *sig, void *rx, const char *slot, int) +{ + return QObject::connect(reinterpret_cast(tx), sig, + reinterpret_cast(rx), slot); +} + + +// Disconnect a Qt signal from a Qt slot. +static int sipQtDisconnect(void *tx, const char *sig, void *rx, const char *slot) +{ + return QObject::disconnect(reinterpret_cast(tx), sig, + reinterpret_cast(rx), slot); +} + + +// See if two signal or slot names are the same. +static int sipQtSameSignalSlotName(const char *s1, const char *s2) +{ + // moc formats signal names, so we should first convert the supplied + // string to the same format before comparing them. Instead we just + // compare them as they are, but ignoring all spaces - this will have + // the same result. + do + { + // Skip any spaces. + + while (*s1 == ' ') + ++s1; + + while (*s2 == ' ') + ++s2; + + if (*s1++ != *s2) + return 0; + } + while (*s2++ != '\0'); + + return 1; +} + + +// Return the next slot for a particular transmitter. This will be called with +// the GIL locked. +static sipSlot *sipQtFindSipslot(void *tx, void **context) +{ + UniversalSlot *us = *reinterpret_cast(context); + + if (!us) + us = UniversalSlot::unislots; + + sipSlot *slot = 0; + + while (us) + { + pyqt3SlotConnection *this_conn = &us->conn; + + us = us->nextus; + + if (this_conn->sc_transmitter == tx) + { + slot = &this_conn->sc_slot; + break; + } + } + + *context = us; + + return slot; +} + + +// Connect a slot from a Python signal. +static int sipQtConnectPySignal(PyObject *txObj, const char *sig, + PyObject *rxObj, const char *slot) +{ + pyqt3PySig *ps; + pyqt3SlotList *psrx; + pyqtWrapper *pw = (pyqtWrapper *)txObj; + + /* Create a new one if necessary. */ + if ((ps = find_py_signal(pw, sig)) == NULL) + { + if ((ps = (pyqt3PySig *)sipMalloc(sizeof (pyqt3PySig))) == NULL) + return -1; + + if ((ps->name = (char *)sipMalloc(strlen(sig) + 1)) == NULL) + { + sipFree(ps); + return -1; + } + + strcpy(ps->name, sig); + + ps->rxlist = NULL; + ps->next = pw->pySigList; + + pw->pySigList = ps; + } + + /* Create the new receiver. */ + if ((psrx = (pyqt3SlotList *)sipMalloc(sizeof (pyqt3SlotList))) == NULL) + return -1; + + if (sipSaveSlot(&psrx->rx, rxObj, slot) < 0) + { + sipFree(psrx); + return -1; + } + + psrx->next = ps->rxlist; + ps->rxlist = psrx; + + return 0; +} + + +// Disconnect a slot from a Python signal. +static void sipQtDisconnectPySignal(PyObject *txObj, const char *sig, + PyObject *rxObj, const char *slot) +{ + pyqt3PySig *ps; + + if ((ps = find_py_signal((pyqtWrapper *)txObj, sig)) != NULL) + { + pyqt3SlotList **psrxp; + + for (psrxp = &ps->rxlist; *psrxp != NULL; psrxp = &(*psrxp)->next) + { + pyqt3SlotList *psrx = *psrxp; + + if (sipSameSlot(&psrx->rx, rxObj, slot)) + { + *psrxp = psrx->next; + free_slot_list(psrx); + break; + } + } + } +} + + +// Emit a signal for the sip module. +static int sipQtEmitSignal(PyObject *self, const char *sig, PyObject *sigargs) +{ + return pyqt3EmitSignal(self, sig, sigargs); +} + + +// Emit a Python or Qt signal. +int pyqt3EmitSignal(PyObject *self, const char *sig, PyObject *sigargs) +{ + // Don't do anything if signals are blocked. Qt signals would be blocked + // anyway, but this blocks Python signals as well. + void *tx = sipGetCppPtr((sipSimpleWrapper *)self, sipType_QObject); + + if (!tx) + return 0; + + if (reinterpret_cast(tx)->signalsBlocked()) + return 0; + + // See if it is a Qt signal. + if (*sig == '2') + { + pyqt3QtSignal *tab; + + // Search the table. + for (tab = ((pyqt3ClassTypeDef *)((sipWrapperType *)(self->ob_type))->type)->qt3_emit; tab->st_name != NULL; ++tab) + { + const char *sp, *tp; + bool found; + + // Compare only the base name. + sp = &sig[1]; + tp = tab->st_name; + + found = true; + + while (*sp != '\0' && *sp != '(' && *tp != '\0') + if (*sp++ != *tp++) + { + found = false; + break; + } + + if (found) + return (*tab->st_emitfunc)((sipSimpleWrapper *)self, sigargs); + } + + // It wasn't found if we got this far. + PyErr_Format(PyExc_NameError, "Invalid signal %s", &sig[1]); + + return -1; + } + + pyqt3PySig *ps = find_py_signal((pyqtWrapper *)self, sig); + + if (ps) + { + int rc = 0; + pyqt3SlotList *rxlist = ps->rxlist; + + // Forget the last Qt sender and remember this one. + UniversalSlot::lastSender = 0; + py_sender = self; + + // Apply the arguments to each slot method. + while (rxlist && rc >= 0) + { + pyqt3SlotList *next; + PyObject *res; + + // We get the next in the list before calling the slot in case the + // list gets changed by the slot - usually because the slot + // disconnects itself. + next = rxlist->next; + + res = sipInvokeSlot(&rxlist->rx, sigargs); + + if (res) + Py_DECREF(res); + else + rc = -1; + + rxlist = next; + } + + // Forget this as a sender. + py_sender = NULL; + + return rc; + } + + return 0; +} + + +// Return the most recent signal sender. +PyObject *pyqt3GetSender() +{ + PyObject *sender; + + // If there is a Qt sender then it is more recent than the last Python + // sender, so use it instead. + if (UniversalSlot::lastSender) + { + sender = sipConvertFromType(UniversalSlot::lastSender, sipType_QObject, + NULL); + } + else + { + sender = (py_sender ? py_sender : Py_None); + Py_INCREF(sender); + } + + return sender; +} + +%End + +%InitialisationCode + // Initialise the meta-type. + pyqtWrapperType_Type.tp_base = sipWrapperType_Type; + + if (PyType_Ready(&pyqtWrapperType_Type) < 0) + Py_FatalError("qt: Failed to initialise pyqtWrapperType type"); + + // Register the meta-type. + if (sipRegisterPyType((PyTypeObject *)&pyqtWrapperType_Type) < 0) + Py_FatalError("qt: Failed to register pyqtWrapperType type"); + + // Initialise the super-type. +#if PY_VERSION_HEX >= 0x02050000 + pyqtWrapper_Type.super.ht_type.tp_base = sipWrapper_Type; +#else + pyqtWrapper_Type.super.type.tp_base = sipWrapper_Type; +#endif + + if (PyType_Ready((PyTypeObject *)&pyqtWrapper_Type) < 0) + Py_FatalError("qt: Failed to initialise pyqtWrapper type"); + + // Register the super-type. + if (sipRegisterPyType((PyTypeObject *)&pyqtWrapper_Type) < 0) + Py_FatalError("qt: Failed to register pyqtWrapper type"); +%End diff --git a/sip/qt/qobjectcleanuphandler.sip b/sip/qt/qobjectcleanuphandler.sip new file mode 100644 index 0000000..0828fc7 --- /dev/null +++ b/sip/qt/qobjectcleanuphandler.sip @@ -0,0 +1,49 @@ +// This is the SIP interface definition for QObjectCleanupHandler. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QObjectCleanupHandler (Qt v3+) + +QObjectCleanupHandler is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QObjectCleanupHandler : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QObjectCleanupHandler(); + + QObject *add(QObject *); + void remove(QObject *); + bool isEmpty() const; + void clear(); +}; + +%End diff --git a/sip/qt/qobjectlist.sip b/sip/qt/qobjectlist.sip new file mode 100644 index 0000000..6fe34fc --- /dev/null +++ b/sip/qt/qobjectlist.sip @@ -0,0 +1,107 @@ +// This is the SIP interface definition for QObjectList. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QObjectList + +This class isn't implemented. Whenever a QObjectList is the +return type of a function or the type of an argument, a Python list of +QObject instances is used instead. + + +%End + + +%MappedType QObjectList +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + // Convert the list. + + PyObject *pl; + QObject *obj; + + if ((pl = PyList_New(0)) == NULL) + return NULL; + + for (QObjectListIt it(*sipCpp); (obj = it.current()) != NULL; ++it) + { + PyObject *inst; + + if ((inst = sipConvertFromInstance(obj,sipClass_QObject,sipTransferObj)) == NULL || PyList_Append(pl,inst) < 0) + { + Py_XDECREF(inst); + Py_DECREF(pl); + + return NULL; + } + + Py_DECREF(inst); + } + + return pl; +%End + +%ConvertToTypeCode + // Convert a Python list of QObject instances to a QObjectList on the + // heap. + + if (sipIsErr == NULL) + { + if (!PyList_Check(sipPy)) + return 0; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + if (!sipCanConvertToInstance(PyList_GET_ITEM(sipPy,i),sipClass_QObject,0)) + return 0; + + return 1; + } + + QObjectList *qol = new QObjectList; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + { + QObject *qobj; + + // We apply the transfer to the list itself, not the elements. + // Note that any temporary element will never be destroyed. + // There is nothing that can be done about this. + qobj = reinterpret_cast(sipConvertToInstance(PyList_GET_ITEM(sipPy,i),sipClass_QObject,0,0,0,sipIsErr)); + + if (*sipIsErr) + { + delete qol; + return 0; + } + + qol -> append(qobj); + } + + *sipCppPtr = qol; + + return sipGetState(sipTransferObj); +%End +}; diff --git a/sip/qt/qpaintdevice.sip b/sip/qt/qpaintdevice.sip new file mode 100644 index 0000000..52b78f2 --- /dev/null +++ b/sip/qt/qpaintdevice.sip @@ -0,0 +1,247 @@ +// This is the SIP interface definition for QPaintDevice. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPaintDevice + + virtual bool cmd + int + QPainter * + QPDevCmdParam * + + +Not implemented. + + +%End + + +%ModuleHeaderCode +#include +%End + + +%If (- Qt_2_00) + +// Painter device types. + +const int PDT_UNDEF; +const int PDT_WIDGET; +const int PDT_PIXMAP; +const int PDT_PRINTER; +const int PDT_PICTURE; +const int PDT_MASK; + +// Painter device flags. + +const int PDF_EXTDEV; +const int PDF_PAINTACTIVE; + + +void bitBlt(QPaintDevice *,int,int,const QPaintDevice *,int = 0,int = 0, + int = -1,int = -1,RasterOp = CopyROP,bool = 0); +void bitBlt(QPaintDevice *,int,int,const QImage *,int = 0,int = 0,int = -1, + int = -1,int = 0); +void bitBlt(QPaintDevice *,const QPoint &,const QPaintDevice *, + const QRect & = QRect(0,0,-1,-1),RasterOp = CopyROP,bool = 0); + +%End + +%If (Qt_2_00 -) + +void bitBlt(QPaintDevice *,int,int,const QPaintDevice *,int = 0,int = 0, + int = -1,int = -1,Qt::RasterOp = Qt::CopyROP,bool = 0); +void bitBlt(QPaintDevice *,int,int,const QImage *,int = 0,int = 0,int = -1, + int = -1,int = 0); +void bitBlt(QPaintDevice *,const QPoint &,const QPaintDevice *, + const QRect & = QRect(0,0,-1,-1),Qt::RasterOp = Qt::CopyROP, + bool = 0); + +%End + + +class QPaintDevice +{ +%TypeHeaderCode +#include +%End + +public: + int devType() const; + bool isExtDev() const; + bool paintingActive() const; + +%If (Qt_3_0_0 -) + virtual void setResolution(int); + virtual int resolution() const; +%End + +%If (- Qt_2_00) + HANDLE handle() const; +%If (WS_X11) + Display *x11Display() const; + static int x11Screen(); + static int x11Depth(); + static int x11Cells(); + static HANDLE x11Colormap(); + static bool x11DefaultColormap(); + static void *x11Visual(); + static bool x11DefaultVisual(); +%End +%End + +%If (Qt_2_00 -) +%If (WS_X11) +%If (- Qt_3_0_0) + HANDLE handle() const; +%End +%If (Qt_3_0_0 -) + Qt::HANDLE handle() const; + Qt::HANDLE x11RenderHandle() const; +%End + Display *x11Display() const; + int x11Screen() const; + int x11Depth() const; + int x11Cells() const; +%If (- Qt_3_0_0) + HANDLE x11Colormap() const; +%End +%If (Qt_3_0_0 -) + Qt::HANDLE x11Colormap() const; +%End + bool x11DefaultColormap() const; + void *x11Visual() const; + bool x11DefaultVisual() const; + + static Display *x11AppDisplay(); + static int x11AppScreen(); + + static int x11AppDpiX(); + static int x11AppDpiY(); +%If (Qt_2_1_0 -) + static void x11SetAppDpiX(int); + static void x11SetAppDpiY(int); +%End + static int x11AppDepth(); + static int x11AppCells(); +%If (Qt_3_1_0 -) + static Qt::HANDLE x11AppRootWindow(); +%End +%If (Qt_3_0_0 -) + static Qt::HANDLE x11AppColormap(); +%End +%If (- Qt_3_0_0) + static HANDLE x11AppColormap(); +%End + static bool x11AppDefaultColormap(); + static void *x11AppVisual(); + static bool x11AppDefaultVisual(); + +%If (Qt_3_1_0 -) + static int x11AppDepth(int); + static int x11AppCells(int); + static Qt::HANDLE x11AppRootWindow(int); + static Qt::HANDLE x11AppColormap(int); + static void *x11AppVisual(int); + static bool x11AppDefaultColormap(int); + static bool x11AppDefaultVisual(int); + static int x11AppDpiX(int); + static int x11AppDpiY(int); + static void x11SetAppDpiX(int,int); + static void x11SetAppDpiY(int,int); +%End +%End + + enum PDevCmd + { + PdcNOP, + PdcDrawPoint, + PdcDrawFirst, + PdcMoveTo, + PdcLineTo, + PdcDrawLine, + PdcDrawRect, + PdcDrawRoundRect, + PdcDrawEllipse, + PdcDrawArc, + PdcDrawPie, + PdcDrawChord, + PdcDrawLineSegments, + PdcDrawPolyline, + PdcDrawPolygon, +%If (Qt_3_0_0 -) + PdcDrawCubicBezier, +%End +%If (- Qt_3_0_0) + PdcDrawQuadBezier, +%End + PdcDrawText, + PdcDrawTextFormatted, + PdcDrawPixmap, + PdcDrawImage, + PdcDrawText2, + PdcDrawText2Formatted, +%If (Qt_3_2_0 -) + PdcDrawTextItem, +%End + PdcDrawLast, + + PdcBegin, + PdcEnd, + PdcSave, + PdcRestore, + PdcSetdev, + PdcSetBkColor, + PdcSetBkMode, + PdcSetROP, + PdcSetBrushOrigin, + PdcSetFont, + PdcSetPen, + PdcSetBrush, + PdcSetTabStops, + PdcSetTabArray, + PdcSetUnit, + PdcSetVXform, + PdcSetWindow, + PdcSetViewport, + PdcSetWXform, + PdcSetWMatrix, + PdcSaveWMatrix, + PdcRestoreWMatrix, + PdcSetClip, + PdcSetClipRegion, + PdcReservedStart, + PdcReservedStop + }; + +%End + +protected: + QPaintDevice(uint); +// virtual bool cmd(int,QPainter *,QPDevCmdParam *); +// virtual int metric(int) const; +// virtual int fontMet(QFont *,int,const char *,int = 0) const; +// virtual int fontInf(QFont *,int) const; + +private: + QPaintDevice(const QPaintDevice &); +}; diff --git a/sip/qt/qpaintdevicemetrics.sip b/sip/qt/qpaintdevicemetrics.sip new file mode 100644 index 0000000..ece9356 --- /dev/null +++ b/sip/qt/qpaintdevicemetrics.sip @@ -0,0 +1,55 @@ +// This is the SIP interface definition for QPaintDeviceMetrics. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPaintDeviceMetrics + +QPaintDeviceMetrics is fully implemented. + + +%End + + +class QPaintDeviceMetrics +{ +%TypeHeaderCode +#include +%End + +public: + QPaintDeviceMetrics(const QPaintDevice *); + + int width() const; + int height() const; + int widthMM() const; + int heightMM() const; +%If (Qt_2_00 -) + int logicalDpiX() const; + int logicalDpiY() const; +%End +%If (Qt_3_0_0 -) + int physicalDpiX() const; + int physicalDpiY() const; +%End + int numColors() const; + int depth() const; +}; diff --git a/sip/qt/qpainter.sip b/sip/qt/qpainter.sip new file mode 100644 index 0000000..f9b1fca --- /dev/null +++ b/sip/qt/qpainter.sip @@ -0,0 +1,676 @@ +// This is the SIP interface definition for QPainter. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPainter + + QRect boundingRect + int x + int y + int w + int h + int flags + const char *str + int len = -1 + char **intern = 0 + + +The intern parameter is not supported. + + + + QRect boundingRect + const QRect& + int flags + const char *str + int len = -1 + char **intern = 0 + + +The intern parameter is not supported. + + + + void drawText + int x + int y + int w + int h + int flags + const char *str + int len = -1 + QRect *br = 0 + char **intern = 0 + + +The intern parameter is not supported. + + + + void drawText + const QRect& + int flags + const char *str + int len = -1 + QRect *br = 0 + char **intern = 0 + + +The intern parameter is not supported. + + + + void setTabArray + int *ta + + +This takes a single parameter which is a list of tab stops. + + + + int *tabArray + + + +This returns a list of tab stops. + + +%End + + +%If (- Qt_2_00) + +%ModuleHeaderCode +#include +%End + +enum BGMode { + TransparentMode, + OpaqueMode +}; + +enum PaintUnit { + PixelUnit, + LoMetricUnit, + HiMetricUnit, + LoEnglishUnit, + HiEnglishUnit, + TwipsUnit +}; + + +class QPainter +{ +%TypeHeaderCode +#include +%End + +public: + QPainter(); + QPainter(const QPaintDevice *); + QPainter(const QPaintDevice *,const QWidget *); + + bool begin(const QPaintDevice *); + bool begin(const QPaintDevice *,const QWidget *); + bool end(); + QPaintDevice *device() const; + + static void redirect(QPaintDevice *,QPaintDevice *); +%If (Qt_3_2_0 -) + static QPaintDevice *redirect(QPaintDevice *); +%End + + bool isActive() const; + void flush(); + void save(); + void restore(); + QFontMetrics fontMetrics() const; + QFontInfo fontInfo() const; + const QFont &font() const; + void setFont(const QFont&); + const QPen &pen() const; + void setPen(const QPen &); + void setPen(PenStyle); + void setPen(const QColor &); + const QBrush &brush() const; + void setBrush(const QBrush &); + void setBrush(BrushStyle); + void setBrush(const QColor &); + const QColor &backgroundColor() const; + void setBackgroundColor(const QColor &); + BGMode backgroundMode() const; + void setBackgroundMode(BGMode); + RasterOp rasterOp() const; + void setRasterOp(RasterOp); + const QPoint &brushOrigin() const; + void setBrushOrigin(int,int); + void setBrushOrigin(const QPoint &); + + bool hasViewXForm() const; + bool hasWorldXForm() const; + + void setViewXForm(bool); + QRect window() const; + void setWindow(const QRect &); + void setWindow(int,int,int,int); + QRect viewport() const; + void setViewport(const QRect &); + void setViewport(int,int,int,int); + + void setWorldXForm(bool); + const QWMatrix &worldMatrix() const; + void setWorldMatrix(const QWMatrix &,bool = 0); + + void scale(float,float); + void shear(float,float); + void rotate(float); + + void translate(float,float); + void resetXForm(); + + QPoint xForm(QPoint &) const; + QRect xForm(QRect &) const; + QPointArray xForm(QPointArray &) const; + QPointArray xForm(QPointArray &,int,int) const; + QPoint xFormDev(QPoint &) const; + QRect xFormDev(QRect &) const; + QPointArray xFormDev(QPointArray &) const; + QPointArray xFormDev(QPointArray &,int,int) const; + void setClipping(bool); + bool hasClipping() const; + const QRegion &clipRegion() const; + void setClipRect(const QRect &); + void setClipRect(int,int,int,int); + void setClipRegion(const QRegion &); + void drawPoint(int,int); + void drawPoint(const QPoint &); + void drawPoints(const QPointArray &,int,int = -1); + void moveTo(int,int); + void moveTo(const QPoint &); + void lineTo(int,int); + void lineTo(const QPoint &); + void drawLine(int,int,int,int); + void drawLine(const QPoint &,const QPoint &); + void drawRect(int,int,int,int); + void drawRect(const QRect &); + void drawWinFocusRect(int,int,int,int); + void drawWinFocusRect(int,int,int,int,const QColor &); + void drawWinFocusRect(const QRect &); + void drawWinFocusRect(const QRect &,const QColor &); + void drawRoundRect(int,int,int,int,int,int); + void drawRoundRect(const QRect &,int,int); + void drawEllipse(int,int,int,int); + void drawEllipse(const QRect &); + void drawArc(int,int,int,int,int,int); + void drawArc(const QRect &,int,int); + void drawPie(int,int,int,int,int,int); + void drawPie(const QRect &,int,int); + void drawChord(int,int,int,int,int,int); + void drawChord(const QRect &,int,int); + void drawLineSegments(const QPointArray &,int = 0,int = -1); + void drawPolyline(const QPointArray &,int = 0,int = -1); + void drawPolygon(const QPointArray &,bool = 0,int = 0,int = -1); + void drawQuadBezier(const QPointArray &,int = 0); + void drawPixmap(int,int,const QPixmap &,int = 0,int = 0,int = -1,int = -1); + void drawPixmap(const QPoint &,const QPixmap &,const QRect &); + void drawPixmap(const QPoint &,const QPixmap &); + void drawImage(int,int,const QImage &,int = 0,int = 0,int = -1,int = -1); + void drawImage(const QPoint &,const QImage &,const QRect &); + void drawImage(const QPoint &,const QImage &); + void drawTiledPixmap(int,int,int,int,const QPixmap &,int = 0,int = 0); + void drawTiledPixmap(const QRect &,const QPixmap &,const QPoint &); + void drawTiledPixmap(const QRect &,const QPixmap &); + void drawPicture(const QPicture &); + void fillRect(int,int,int,int,const QBrush &); + void fillRect(const QRect &,const QBrush &); + void eraseRect(int,int,int,int); + void eraseRect(const QRect &); + void drawText(int,int,char *,int = -1); + void drawText(const QPoint &,const char *,int = -1); + void drawText(int,int,int,int,int,const char *,int = -1,QRect * = 0); + void drawText(const QRect &,int,const char *,int = -1,QRect * = 0); + +%If (Qt_3_2_0 -) + void drawTextItem(int,int,const QTextItem &,int = 0); + void drawTextItem(const QPoint &,const QTextItem &,int = 0); +%End + + QRect boundingRect(int,int,int,int,int,const char *,int = -1); + QRect boundingRect(const QRect &,int,const char *,int = -1); + + int tabStops() const; + void setTabStops(int); + + SIP_PYLIST tabArray() const; +%MethodCode + int *tabs; + + Py_BEGIN_ALLOW_THREADS + tabs = sipCpp -> tabArray(); + Py_END_ALLOW_THREADS + + int len = 0; + + if (tabs) + { + int *tp = tabs; + + do + ++len; + while (*tp++ != 0); + } + + if ((sipRes = PyList_New(len)) == NULL) + sipIsErr = 1; + else if (tabs) + { + int *tp = tabs; + + len = 0; + + do + { + if (PyList_SET_ITEM(sipRes,len,PyInt_FromLong((long)*tp)) < 0) + { + Py_DECREF(sipRes); + sipIsErr = 1; + break; + } + + ++len; + } + while (*tp++ != 0); + } +%End + + void setTabArray(SIP_PYLIST); +%MethodCode + int len, *tabs; + + len = PyList_GET_SIZE(a0); + + // Allocate space for the array. Note, this memory is never + // reclaimed. + if ((tabs = (int *)sipMalloc(len * sizeof (int))) == NULL) + sipIsErr = 1; + else + { + // Convert the list. + + int *tp = tabs; + + for (int i = 0; i < len; ++i) + { + *tp++ = (int)PyInt_AsLong(PyList_GET_ITEM(a0,i)); + + if (PyErr_Occurred() != NULL) + { + sipFree((ANY *)tabs); + sipIsErr = 1; + break; + } + } + + if (!sipIsErr) + { + Py_BEGIN_ALLOW_THREADS + sipCpp -> setTabArray(tabs); + Py_END_ALLOW_THREADS + } + } +%End + + HANDLE handle() const; + static void initialize(); + static void cleanup(); + +private: + QPainter(const QPainter &); +}; + +%End + +%If (Qt_2_00 -) + +class QPainter : Qt +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_0_0 -) + enum CoordinateMode { + CoordDevice, + CoordPainter + }; +%End + + QPainter(); +%If (- Qt_3_0_0) + QPainter(const QPaintDevice *); + QPainter(const QPaintDevice *,const QWidget *); +%End +%If (Qt_3_0_0 -) + QPainter(const QPaintDevice *,bool = 0); + QPainter(const QPaintDevice *,const QWidget *,bool = 0); +%End + +%If (- Qt_3_0_0) + bool begin(const QPaintDevice *); + bool begin(const QPaintDevice *,const QWidget *); +%End +%If (Qt_3_0_0 -) + bool begin(const QPaintDevice *,bool = 0); + bool begin(const QPaintDevice *,const QWidget *,bool = 0); +%End + bool end(); + QPaintDevice *device() const; + + static void redirect(QPaintDevice *,QPaintDevice *); + + bool isActive() const; + +%If (Qt_3_0_0 -) + void flush(const QRegion &,CoordinateMode = CoordDevice); +%End + void flush(); + void save(); + void restore(); + + QFontMetrics fontMetrics() const; + QFontInfo fontInfo() const; + + const QFont &font() const; + void setFont(const QFont&); + const QPen &pen() const; + void setPen(const QPen &); + void setPen(PenStyle); + void setPen(const QColor &); + const QBrush &brush() const; + void setBrush(const QBrush &); + void setBrush(BrushStyle); + void setBrush(const QColor &); +%If (Qt_2_1_0 -) + // The omission of this from Qt/Embedded is probably a bug. +%End + + const QColor &backgroundColor() const; + void setBackgroundColor(const QColor &); + BGMode backgroundMode() const; + void setBackgroundMode(BGMode); + RasterOp rasterOp() const; + void setRasterOp(RasterOp); + const QPoint &brushOrigin() const; + void setBrushOrigin(int,int); + void setBrushOrigin(const QPoint &); + + bool hasViewXForm() const; + bool hasWorldXForm() const; + +%If (Qt_TRANSFORMATIONS) + void setViewXForm(bool); + QRect window() const; + void setWindow(const QRect &); + void setWindow(int,int,int,int); + QRect viewport() const; + void setViewport(const QRect &); + void setViewport(int,int,int,int); + + void setWorldXForm(bool); + const QWMatrix &worldMatrix() const; + void setWorldMatrix(const QWMatrix &,bool = 0); + + void saveWorldMatrix(); + void restoreWorldMatrix(); + + void scale(double,double); + void shear(double,double); + void rotate(double); +%End + void translate(double,double); + void resetXForm(); +%If (Qt_3_0_0 -) + double translationX() const; + double translationY() const; +%End + + QPoint xForm(const QPoint &) const; + QRect xForm(const QRect &) const; + QPointArray xForm(const QPointArray &) const; + QPointArray xForm(const QPointArray &,int,int) const; + QPoint xFormDev(const QPoint &) const; + QRect xFormDev(const QRect &) const; + QPointArray xFormDev(const QPointArray &) const; + QPointArray xFormDev(const QPointArray &,int,int) const; + + void setClipping(bool); + bool hasClipping() const; +%If (- Qt_3_0_0) + const QRegion &clipRegion() const; + void setClipRect(const QRect &); + void setClipRect(int,int,int,int); + void setClipRegion(const QRegion &); +%End +%If (Qt_3_0_0 -) + QRegion clipRegion(CoordinateMode = CoordDevice) const; + void setClipRect(const QRect &,CoordinateMode = CoordDevice); + void setClipRect(int,int,int,int,CoordinateMode = CoordDevice); + void setClipRegion(const QRegion &,CoordinateMode = CoordDevice); +%End + + void drawPoint(int,int); + void drawPoint(const QPoint &); + void drawPoints(const QPointArray &,int,int = -1); + void moveTo(int,int); + void moveTo(const QPoint &); + void lineTo(int,int); + void lineTo(const QPoint &); + void drawLine(int,int,int,int); + void drawLine(const QPoint &,const QPoint &); + void drawRect(int,int,int,int); + void drawRect(const QRect &); + void drawWinFocusRect(int,int,int,int); + void drawWinFocusRect(int,int,int,int,const QColor &); + void drawWinFocusRect(const QRect &); + void drawWinFocusRect(const QRect &,const QColor &); +%If (- Qt_3_0_0) + void drawRoundRect(int,int,int,int,int,int); + void drawRoundRect(const QRect &,int,int); +%End +%If (Qt_3_0_0 -) + void drawRoundRect(int,int,int,int,int = 25,int = 25); + void drawRoundRect(const QRect &,int = 25,int = 25); +%End + void drawEllipse(int,int,int,int); + void drawEllipse(const QRect &); + void drawArc(int,int,int,int,int,int); + void drawArc(const QRect &,int,int); + void drawPie(int,int,int,int,int,int); + void drawPie(const QRect &,int,int); + void drawChord(int,int,int,int,int,int); + void drawChord(const QRect &,int,int); + void drawLineSegments(const QPointArray &,int = 0,int = -1); + void drawPolyline(const QPointArray &,int = 0,int = -1); + void drawPolygon(const QPointArray &,bool = 0,int = 0,int = -1); +%If (- Qt_3_0_0) + void drawQuadBezier(const QPointArray &,int = 0); +%End +%If (Qt_3_0_0 -) + void drawConvexPolygon(const QPointArray &,int = 0,int = -1); + void drawCubicBezier(const QPointArray &,int = 0); +%End + void drawPixmap(int,int,const QPixmap &,int = 0,int = 0,int = -1, + int = -1); + void drawPixmap(const QPoint &,const QPixmap &,const QRect &); + void drawPixmap(const QPoint &,const QPixmap &); +%If (Qt_3_0_0 -) + void drawPixmap(const QRect &,const QPixmap &); +%End +%If (- Qt_3_0_0) + void drawImage(int,int,const QImage &,int = 0,int = 0,int = -1, + int = -1); + void drawImage(const QPoint &,const QImage &,const QRect &); + void drawImage(const QPoint &,const QImage &); +%End +%If (Qt_3_0_0 -) + void drawImage(int,int,const QImage &,int = 0,int = 0,int = -1, + int = -1,int = 0); + void drawImage(const QPoint &,const QImage &,const QRect &,int = 0); + void drawImage(const QPoint &,const QImage &,int = 0); + void drawImage(const QRect &,const QImage &); +%End + void drawTiledPixmap(int,int,int,int,const QPixmap &,int = 0,int = 0); + void drawTiledPixmap(const QRect &,const QPixmap &,const QPoint &); + void drawTiledPixmap(const QRect &,const QPixmap &); +%If (Qt_PICTURE) + void drawPicture(const QPicture &); +%If (Qt_3_0_0 -) + void drawPicture(int,int,const QPicture &); + void drawPicture(const QPoint &,const QPicture &); +%End +%End + + void fillRect(int,int,int,int,const QBrush &); + void fillRect(const QRect &,const QBrush &); + void eraseRect(int,int,int,int); + void eraseRect(const QRect &); + +%If (Qt_3_0_0 -) + enum TextDirection { + Auto, + RTL, + LTR + }; +%End + +%If (- Qt_3_0_0) + void drawText(int,int,const QString &,int = -1); + void drawText(const QPoint &,const QString &,int = -1); +%End +%If (Qt_3_0_0 -) + void drawText(int,int,const QString &,int = -1,TextDirection = Auto); + void drawText(const QPoint &,const QString &,int = -1, + TextDirection = Auto); + void drawText(int,int,const QString &,int,int,TextDirection = Auto); + void drawText(const QPoint &,const QString &,int,int, + TextDirection = Auto); +%End + void drawText(int,int,int,int,int,const QString &,int = -1,QRect * = 0); + void drawText(const QRect &,int,const QString &,int = -1,QRect * = 0); + + QRect boundingRect(int,int,int,int,int,const QString &,int = -1); + QRect boundingRect(const QRect &,int,const QString &,int = -1); + int tabStops() const; + void setTabStops(int); + + SIP_PYLIST tabArray() const; +%MethodCode + int *tabs; + + Py_BEGIN_ALLOW_THREADS + tabs = sipCpp -> tabArray(); + Py_END_ALLOW_THREADS + + int len = 0; + + if (tabs) + { + int *tp = tabs; + + do + ++len; + while (*tp++ != 0); + } + + if ((sipRes = PyList_New(len)) == NULL) + sipIsErr = 1; + else if (tabs) + { + int *tp = tabs; + + len = 0; + + do + { + if (PyList_SET_ITEM(sipRes,len,PyInt_FromLong((long)*tp)) < 0) + { + Py_DECREF(sipRes); + sipIsErr = 1; + break; + } + + ++len; + } + while (*tp++ != 0); + } +%End + + void setTabArray(SIP_PYLIST); +%MethodCode + int len, *tabs; + + len = PyList_GET_SIZE(a0); + + // Allocate space for the array. Note, this memory is never + // reclaimed. + if ((tabs = (int *)sipMalloc(len * sizeof (int))) == NULL) + sipIsErr = 1; + else + { + // Convert the list. + + int *tp = tabs; + + for (int i = 0; i < len; ++i) + { + *tp++ = (int)PyInt_AsLong(PyList_GET_ITEM(a0,i)); + + if (PyErr_Occurred() != NULL) + { + sipFree((ANY *)tabs); + sipIsErr = 1; + break; + } + } + + if (!sipIsErr) + { + Py_BEGIN_ALLOW_THREADS + sipCpp -> setTabArray(tabs); + Py_END_ALLOW_THREADS + } + } +%End + +%If (WS_X11) + HANDLE handle() const; +%End + + static void initialize(); + static void cleanup(); + +private: + QPainter(const QPainter &); +}; + +%End diff --git a/sip/qt/qpair.sip b/sip/qt/qpair.sip new file mode 100644 index 0000000..6064e22 --- /dev/null +++ b/sip/qt/qpair.sip @@ -0,0 +1,83 @@ +// This is the SIP interface definition for all types based on the QPair +// template. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPair<type,type> (Qt v3+) + +Types based on the QPair template are automatically +converted to and from Python tuples of two elements. + + +%End + + +%If (Qt_3_0_0 -) + +%MappedType QPair +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + // Convert to a Python list of integers. + + PyObject *t; + + // Create the tuple. + + if ((t = PyTuple_New(2)) == NULL) + return NULL; + + // Fill it. + + PyTuple_SET_ITEM(t,0,PyInt_FromLong((long)sipCpp -> first)); + PyTuple_SET_ITEM(t,1,PyInt_FromLong((long)sipCpp -> second)); + + return t; +%End + +%ConvertToTypeCode + // Convert a Python tuple of integers to a QPair on the heap. + + if (sipIsErr == NULL) + return (PyTuple_Size(sipPy) == 2); + + PyErr_Clear(); + + int fst = (int)PyInt_AsLong(PyTuple_GET_ITEM(sipPy,0)); + int sec = (int)PyInt_AsLong(PyTuple_GET_ITEM(sipPy,1)); + + if (PyErr_Occurred() != NULL) + { + *sipIsErr = 1; + return 0; + } + + *sipCppPtr = new QPair(fst,sec); + + return 1; +%End +}; + +%End diff --git a/sip/qt/qpalette.sip b/sip/qt/qpalette.sip new file mode 100644 index 0000000..ae7b94c --- /dev/null +++ b/sip/qt/qpalette.sip @@ -0,0 +1,102 @@ +// This is the SIP interface definition for QPalette. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPalette + +QPalette is fully implemented, including the Python +== and != operators. + + +%End + + +class QPalette +{ +%TypeHeaderCode +#include +%End + +public: + QPalette(); + QPalette(const QColor &); +%If (Qt_2_00 -) + QPalette(const QColor &,const QColor &); +%End + QPalette(const QColorGroup &,const QColorGroup &,const QColorGroup &); + QPalette(const QPalette &); + +%If (Qt_2_00 - Qt_2_1_0) + enum ColorGroup { + Normal, + Disabled, + Active, + NColorGroups + }; +%End +%If (Qt_2_1_0 -) + enum ColorGroup { + Normal, + Disabled, + Active, + Inactive, + NColorGroups + }; +%End + +%If (Qt_2_00 -) + const QColor &color(ColorGroup,QColorGroup::ColorRole) const; + const QBrush &brush(ColorGroup,QColorGroup::ColorRole) const; + void setColor(ColorGroup,QColorGroup::ColorRole,const QColor &); + void setBrush(ColorGroup,QColorGroup::ColorRole,const QBrush &); + void setColor(QColorGroup::ColorRole,const QColor &); + void setBrush(QColorGroup::ColorRole,const QBrush &); +%End + + QPalette copy() const; + + const QColorGroup &active() const; + const QColorGroup &disabled() const; +%If (Qt_2_1_0 -) + const QColorGroup &inactive() const; +%End + const QColorGroup &normal() const; + + void setActive(const QColorGroup &); + void setDisabled(const QColorGroup &); +%If (Qt_2_1_0 -) + void setInactive(const QColorGroup &); +%End + void setNormal(const QColorGroup &); + + bool operator==(const QPalette &) const; + bool operator!=(const QPalette &) const; + + bool isCopyOf(const QPalette &); + int serialNumber() const; + +%If (Qt_3_0_0 -) + // These are defined in Qt3, but don't appear in the documentation. + //static QColorGroup::ColorRole foregroundRoleFromMode(Qt::BackgroundMode); + //static QColorGroup::ColorRole backgroundRoleFromMode(Qt::BackgroundMode); +%End +}; diff --git a/sip/qt/qpen.sip b/sip/qt/qpen.sip new file mode 100644 index 0000000..f59db98 --- /dev/null +++ b/sip/qt/qpen.sip @@ -0,0 +1,101 @@ +// This is the SIP interface definition for QPen. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPen + +QPen is fully implemented, including the Python +== and != operators. + + +%End + + +%If (- Qt_2_00) + +enum PenStyle { + NoPen, + SolidLine, + DashLine, + DotLine, + DashDotLine, + DashDotDotLine +}; + + +class QPen +{ +%TypeHeaderCode +#include +%End + +public: + QPen(); + QPen(PenStyle); + QPen(const QColor &,uint = 0,PenStyle = SolidLine); + QPen(const QPen &); + + PenStyle style() const; + void setStyle(PenStyle); + uint width() const; + void setWidth(uint); + const QColor &color() const; + void setColor(const QColor &); +}; + +%End + +%If (Qt_2_00 -) + +class QPen : Qt +{ +%TypeHeaderCode +#include +%End + +public: + QPen(); + QPen(PenStyle); + QPen(const QColor &,uint = 0,PenStyle = SolidLine); +%If (Qt_2_1_0 -) + QPen(const QColor &,uint,PenStyle,PenCapStyle,PenJoinStyle); +%End + QPen(const QPen &); + + PenStyle style() const; + void setStyle(PenStyle); + uint width() const; + void setWidth(uint); + const QColor &color() const; + void setColor(const QColor &); +%If (Qt_2_1_0 -) + PenCapStyle capStyle() const; + void setCapStyle(PenCapStyle); + PenJoinStyle joinStyle() const; + void setJoinStyle(PenJoinStyle); +%End + + bool operator==(const QPen &) const; + bool operator!=(const QPen &) const; +}; + +%End diff --git a/sip/qt/qpicture.sip b/sip/qt/qpicture.sip new file mode 100644 index 0000000..dbeb309 --- /dev/null +++ b/sip/qt/qpicture.sip @@ -0,0 +1,111 @@ +// This is the SIP interface definition for QPicture. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPicture + + const char *data + + + +Not implemented. + + + + void setData + const char *data + uint size + + +size is derived from data and not passed +as a parameter. + + +%End + + +%If (Qt_PICTURE) + +class QPicture : QPaintDevice +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QPicture(); +%End +%If (Qt_2_00 - Qt_3_0_0) + QPicture(int = 0); +%End +%If (Qt_3_0_0 -) + QPicture(int = -1); + QPicture(const QPicture &); +%End + + bool isNull() const; + + uint size() const; +// const char *data() const; +%If (- Qt_2_00) + void setData(const char * /Array/,uint /ArraySize/); +%End +%If (Qt_2_00 -) + virtual void setData(const char * /Array/,uint /ArraySize/); +%End + + bool play(QPainter *); + +%If (- Qt_2_00) + bool load(const char *); + bool save(const char *); +%End +%If (Qt_2_00 - Qt_3_0_0) + bool load(const QString &); + bool save(const QString &); +%End +%If (Qt_3_0_0 -) + bool load(QIODevice *,const char * = 0); + bool load(const QString &,const char * = 0); + bool save(QIODevice *,const char * = 0); + bool save(const QString &,const char * = 0); + + QRect boundingRect() const; +%End +%If (Qt_3_1_0 -) + void setBoundingRect(const QRect &); +%End + +protected: +%If (Qt_3_0_0 -) + void detach(); + QPicture copy() const; +%End + +private: +%If (- Qt_3_0_0) + QPicture(const QPicture &); +%End +}; + +%End diff --git a/sip/qt/qpixmap.sip b/sip/qt/qpixmap.sip new file mode 100644 index 0000000..d00cd78 --- /dev/null +++ b/sip/qt/qpixmap.sip @@ -0,0 +1,288 @@ +// This is the SIP interface definition for QPixmap. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPixmap + + QPixmap + const char *xpm[] + + +This takes a list of strings as its parameter. + + + + bool loadFromData + const uchar *buf + uint len + const char *format = 0 + ColorMode mode = Auto + + +len is derived from buf and not passed as +a parameter. + + + + bool loadFromData + const uchar *buf + uint len + const char *format + int conversion_flags + + +Not implemented. + + +%End + + +%If (- Qt_2_00) + +class QPixmap : QPaintDevice +{ +%TypeHeaderCode +#include +%End + +public: + enum ColorMode + { + Auto, + Color, + Mono + }; + + QPixmap(); + QPixmap(int,int,int = -1); + QPixmap(const QSize &,int = -1); + QPixmap(const char *,const char * = 0,ColorMode = Auto); + QPixmap(const char *,const char *,int); + + QPixmap(SIP_PYLIST) [(const char **)]; +%MethodCode + // The Python interface is a list of strings that make up the + // image. + + const char **str; + + if ((str = PyQt_qt_ListToArray(a0)) == NULL) + sipIsErr = 1; + else + { + Py_BEGIN_ALLOW_THREADS + sipCpp = new sipQPixmap(str); + Py_END_ALLOW_THREADS + + sipFree((ANY *)str); + } +%End + + QPixmap(const QPixmap &); + + bool isNull() const; + int width() const; + int height() const; + QSize size() const; + QRect rect() const; + int depth() const; + static int defaultDepth(); + void fill(const QColor & = white); + void fill(const QWidget *,int,int); + void fill(const QWidget *,const QPoint &); + void resize(int,int); + void resize(const QSize &); + const QBitmap *mask() const; + void setMask(const QBitmap &); + bool selfMask() const; + QBitmap createHeuristicMask(bool = 1) const; + static QPixmap grabWindow(WId,int = 0,int = 0,int = -1,int = -1); + QPixmap xForm(const QWMatrix &) const; + static QWMatrix trueMatrix(const QWMatrix &,int,int); + QImage convertToImage() const; + bool convertFromImage(const QImage &,ColorMode = Auto); + bool convertFromImage(const QImage &,int); + static const char *imageFormat(const char *); + bool load(const char *,const char * = 0,ColorMode = Auto); + bool load(const char *,const char *,int); + bool loadFromData(const uchar * /Array/,uint /ArraySize/, + const char * = 0,ColorMode = Auto); +// bool loadFromData(const uchar *,uint,const char *,int); + bool loadFromData(QByteArray,const char * = 0,int = 0); + bool save(const char *,const char *) const; + int serialNumber() const; + + enum Optimization + { + NoOptim, + NormalOptim, + BestOptim + }; + + Optimization optimization() const; + void setOptimization(Optimization); + static Optimization defaultOptimization(); + static void setDefaultOptimization(Optimization); + virtual void detach(); + bool isQBitmap() const; + +protected: + QPixmap(int,int,const uchar *,bool); +}; + +%End + +%If (Qt_2_00 -) + +class QPixmap : QPaintDevice, Qt +{ +%TypeHeaderCode +#include +%End + +public: + enum ColorMode + { + Auto, + Color, + Mono + }; + + enum Optimization + { + DefaultOptim, + NoOptim, + MemoryOptim, + NormalOptim, + BestOptim + }; + + QPixmap(); +%If (Qt_3_0_0 -) + QPixmap(const QImage &); +%End + QPixmap(int,int,int = -1,Optimization = DefaultOptim); + QPixmap(const QSize &,int = -1,Optimization = DefaultOptim); + QPixmap(const QString &,const char * = 0,ColorMode = Auto); + QPixmap(const QString &,const char *,int); + + QPixmap(SIP_PYLIST) [(const char **)]; +%MethodCode + // The Python interface is a list of strings that make up the + // image. + + const char **str; + + if ((str = PyQt_qt_ListToArray(a0)) == NULL) + sipIsErr = 1; + else + { + Py_BEGIN_ALLOW_THREADS + sipCpp = new sipQPixmap(str); + Py_END_ALLOW_THREADS + + sipFree((ANY *)str); + } +%End + + QPixmap(const QByteArray &); + QPixmap(const QPixmap &); + + bool isNull() const; + int width() const; + int height() const; + QSize size() const; + QRect rect() const; + int depth() const; + static int defaultDepth(); + void fill(const QColor & = Qt::white); + void fill(const QWidget *,int,int); + void fill(const QWidget *,const QPoint &); + void resize(int,int); + void resize(const QSize &); + const QBitmap *mask() const; + void setMask(const QBitmap &); + bool selfMask() const; +%If (Qt_3_1_0 -) + bool hasAlpha() const; +%End +%If (Qt_3_2_0 -) + bool hasAlphaChannel() const; +%End + QBitmap createHeuristicMask(bool = 1) const; +%If (Qt_3_1_0 -) + static QPixmap fromMimeSource(const QString &); +%End + static QPixmap grabWindow(WId,int = 0,int = 0,int = -1,int = -1); +%If (Qt_2_1_0 -) + static QPixmap grabWidget(QWidget *,int = 0,int = 0,int = -1,int = -1); +%End + + QPixmap xForm(const QWMatrix &) const; + static QWMatrix trueMatrix(const QWMatrix &,int,int); + QImage convertToImage() const; + bool convertFromImage(const QImage &,ColorMode = Auto); + bool convertFromImage(const QImage &,int); + static const char *imageFormat(const QString &); + bool load(const QString &,const char * = 0,ColorMode = Auto); + bool load(const QString &,const char *,int); + bool loadFromData(const uchar * /Array/,uint /ArraySize/, + const char * = 0,ColorMode = Auto); +// bool loadFromData(const uchar *,uint,const char *,int); + bool loadFromData(QByteArray,const char * = 0,int = 0); +%If (- Qt_3_0_0) + bool save(const QString &,const char *) const; +%End +%If (Qt_2_2_0 - Qt_3_0_0) + bool save(const QString &,const char *,int) const; +%End +%If (Qt_3_0_0 -) + bool save(const QString &,const char *,int = -1) const; +%End +%If (Qt_3_2_0 -) + bool save(QIODevice *,const char *,int = -1) const; +%End + int serialNumber() const; + Optimization optimization() const; + void setOptimization(Optimization); + static Optimization defaultOptimization(); + static void setDefaultOptimization(Optimization); + virtual void detach(); + bool isQBitmap() const; + +%If (Qt_3_0_0 -) +%If (WS_X11) + static int x11SetDefaultScreen(int); + void x11SetScreen(int); +%End +%End + +protected: + QPixmap(int,int,const uchar *,bool); +}; + +%End + +%If (Qt_3_2_0 -) +void copyBlt(QPixmap *,int,int,const QPixmap *,int = 0,int = 0,int = -1, + int = -1); +%End diff --git a/sip/qt/qpixmapcache.sip b/sip/qt/qpixmapcache.sip new file mode 100644 index 0000000..5e8e066 --- /dev/null +++ b/sip/qt/qpixmapcache.sip @@ -0,0 +1,53 @@ +// This is the SIP interface definition for QPixmapCache. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPixmapCache (Qt v3+) + +QPixmapCache is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QPixmapCache +{ +%TypeHeaderCode +#include +%End + +public: + static int cacheLimit(); + static void setCacheLimit(int); + static QPixmap *find(const QString &); + static bool find(const QString &,QPixmap &); +// static bool insert(const QString &,QPixmap *); + static bool insert(const QString &,const QPixmap &); +%If (Qt_3_2_0 -) + static void remove(const QString &); +%End + static void clear(); +}; + +%End diff --git a/sip/qt/qplatinumstyle.sip b/sip/qt/qplatinumstyle.sip new file mode 100644 index 0000000..5392eea --- /dev/null +++ b/sip/qt/qplatinumstyle.sip @@ -0,0 +1,142 @@ +// This is the SIP interface definition for QPlatinumStyle. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPlatinumStyle (Qt v2+) + + void scrollBarMetrics + const QTabBar *sb + int &sliderMin + int &sliderMax + int &sliderLength + int &buttonDim + + +This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2) + + +%End + + +%If (Qt_2_00 -) +%If (Qt_STYLE_PLATINUM) + +class QPlatinumStyle : QWindowsStyle +{ +%TypeHeaderCode +#include +%End + +public: + QPlatinumStyle(); + +%If (- Qt_3_0_0) + void drawPopupPanel(QPainter *,int,int,int,int,const QColorGroup &, + int = 2,const QBrush * = 0); + void drawButton(QPainter *,int,int,int,int,const QColorGroup &,bool = 0, + const QBrush * = 0); + QRect buttonRect(int,int,int,int); + void drawBevelButton(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,const QBrush * = 0); + void drawPushButton(QPushButton *,QPainter *); + void drawPushButtonLabel(QPushButton *,QPainter *); + + void scrollBarMetrics(const QScrollBar *,int &,int &,int &,int &); + + void drawScrollBarControls(QPainter *,const QScrollBar *,int,uint,uint); + ScrollControl scrollBarPointOver(const QScrollBar *,int,const QPoint &); + QSize indicatorSize() const; + void drawIndicator(QPainter *,int,int,int,int,const QColorGroup &,int, + bool = 0,bool = 1); + void drawIndicatorMask(QPainter *,int,int,int,int,int); + QSize exclusiveIndicatorSize() const; + void drawExclusiveIndicator(QPainter *,int,int,int,int, + const QColorGroup &,bool,bool = 0,bool = 1); + void drawComboButton(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,bool = 0,bool = 1,const QBrush * = 0); + QRect comboButtonRect(int,int,int,int); + QRect comboButtonFocusRect(int,int,int,int); + int sliderLength() const; + void drawSlider(QPainter *,int,int,int,int,const QColorGroup &, + Orientation,bool,bool); + void drawSliderMask(QPainter *,int,int,int,int,Orientation,bool,bool); + void drawSliderGroove(QPainter *,int,int,int,int,const QColorGroup &, + QCOORD,Orientation); + int maximumSliderDragDistance() const; + void drawCheckMark(QPainter *,int,int,int,int,const QColorGroup &, + bool,bool); + void polishPopupMenu(QPopupMenu *); + int extraPopupMenuItemWidth(bool,int,QMenuItem *,const QFontMetrics &); + int popupMenuItemHeight(bool,QMenuItem *,const QFontMetrics &); + void drawPopupMenuItem(QPainter *,bool,int,int,QMenuItem *, + const QPalette &,bool,bool,int,int,int,int); +%End +%If (Qt_3_0_0 -) + void drawPrimitive(PrimitiveElement,QPainter *,const QRect &, + const QColorGroup &,SFlags = Style_Default, + const QStyleOption & = QStyleOption()) const; + + void drawControl(ControlElement,QPainter *,const QWidget *, + const QRect &,const QColorGroup &, + SFlags = Style_Default, + const QStyleOption & = QStyleOption()) const; + + void drawComplexControl(ComplexControl,QPainter *,const QWidget *, + const QRect &,const QColorGroup &, + SFlags = Style_Default,SCFlags = SC_All, + SCFlags = SC_None, + const QStyleOption & = QStyleOption()) const; + + QRect querySubControlMetrics(ComplexControl,const QWidget *,SubControl, + const QStyleOption & = QStyleOption()) const; + + int pixelMetric(PixelMetric,const QWidget * = 0) const; + + QRect subRect(SubRect,const QWidget *) const; +%End + +protected: +%If (- Qt_3_0_0) + void drawScrollBarBackground(QPainter *,int,int,int,int, + const QColorGroup &,bool, + const QBrush * = 0); +%End + QColor mixedColor(const QColor &,const QColor &) const; +%If (- Qt_3_0_0) + void drawRiffles(QPainter *,int,int,int,int,const QColorGroup &,bool); +%End +%If (Qt_3_0_0 -) + void drawRiffles(QPainter *,int,int,int,int,const QColorGroup &, + bool) const; +%End + +private: +%If (Qt_3_0_0 -) + QPlatinumStyle(const QPlatinumStyle &); +%End +}; + +%End +%End diff --git a/sip/qt/qpoint.sip b/sip/qt/qpoint.sip new file mode 100644 index 0000000..5265d57 --- /dev/null +++ b/sip/qt/qpoint.sip @@ -0,0 +1,100 @@ +// This is the SIP interface definition for QPoint. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPoint + +The Python ++, +=, +-, -=, unary -, +*, *=, +/, /=, +==, != and __nonzero__ +operators are supported. + + + + QCOORD &rx + + + +Not implemented. + + + + QCOORD &ry + + + +Not implemented. + + +%End + + +class QPoint +{ +%TypeHeaderCode +#include +%End + +public: + QPoint(); + QPoint(int,int); + + bool isNull() const; + int x() const; + int y() const; + void setX(int); + void setY(int); +%If (Qt_2_00 -) + int manhattanLength() const; +%End +// QCOORD &rx(); +// QCOORD &ry(); + + QPoint &operator+=(const QPoint &); + QPoint &operator-=(const QPoint &); + QPoint &operator*=(int /Constrained/); + QPoint &operator*=(double); + QPoint &operator/=(int /Constrained/); + QPoint &operator/=(double); + + int __nonzero__(); +%MethodCode + sipRes = !sipCpp -> isNull(); +%End + + const QPoint __neg__(); +%MethodCode + sipRes = new QPoint(-(*sipCpp)); +%End +}; + +bool operator==(const QPoint &,const QPoint &); +bool operator!=(const QPoint &,const QPoint &); +const QPoint operator+(const QPoint &,const QPoint &); +const QPoint operator-(const QPoint &,const QPoint &); +const QPoint operator*(const QPoint &,int /Constrained/); +const QPoint operator*(const QPoint &,double); +const QPoint operator/(const QPoint &,int /Constrained/); +const QPoint operator/(const QPoint &,double); diff --git a/sip/qt/qpointarray.sip b/sip/qt/qpointarray.sip new file mode 100644 index 0000000..c88b56b --- /dev/null +++ b/sip/qt/qpointarray.sip @@ -0,0 +1,247 @@ +// This is the SIP interface definition for QPointArray. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPointArray + + QPointArray + int nPoints + const QCOORD *points + + +This takes a single parameter which is a list of points. + + + + void point + uint i + int *x + int *y + + +This takes the single parameter i and returns the +x and y values as a tuple. + + + + bool putPoints + int index + int nPoints + const QCOORD *points + + +This takes two parameters, index and a list of points. + + + + bool putPoints + int index + int nPoints + int firstx + int firsty + ... + + +Not implemented. + + + + bool setPoints + int nPoints + const QCOORD *points + + +This takes a single parameter which is a list of points. + + + + bool setPoints + int nPoints + int firstx + int firsty + ... + + +Not implemented. + + +%End + + +class QPointArray +{ +%TypeHeaderCode +#include +%End + +%TypeCode +// Convert a list of numbers to an array on QCOORDs on the heap. + +static QCOORD *getPoints(int nrpnts,PyObject *pntlist) +{ + QCOORD *pnts, *pp; + + if ((pnts = (QCOORD *)sipMalloc(nrpnts * sizeof (QCOORD))) == NULL) + return NULL; + + // Convert the list. + + pp = pnts; + + for (int i = 0; i < nrpnts; ++i) + { + *pp++ = (QCOORD)PyInt_AsLong(PyList_GetItem(pntlist,i)); + + if (PyErr_Occurred() != NULL) + { + sipFree((ANY *)pnts); + return NULL; + } + } + + return pnts; +} +%End + +public: + QPointArray(); + QPointArray(int); + QPointArray(const QPointArray &); + QPointArray(const QRect &,bool = 0); + + QPointArray(SIP_PYLIST) [(int,const QCOORD *)]; +%MethodCode + // The Python interface is a list of QCOORDs. + + int nrpnts; + QCOORD *pnts; + + nrpnts = PyList_GET_SIZE(a0); + + if ((pnts = getPoints(nrpnts,a0)) == NULL) + sipIsErr = 1; + else + { + // No wrapper class for QPointArray. + + Py_BEGIN_ALLOW_THREADS + sipCpp = new QPointArray(nrpnts / 2,pnts); + Py_END_ALLOW_THREADS + + sipFree((ANY *)pnts); + } +%End + + QPointArray copy() const; + void translate(int,int); + QRect boundingRect() const; + + void point(uint,int *,int *) const; + // This is hidden by the above. It would probably be better to remove + // the one above, but that would break backwards compatibility. + //QPoint point(uint) const; + void setPoint(uint,int,int); + void setPoint(uint,const QPoint &); + + bool setPoints(SIP_PYLIST); +%MethodCode + int nrpnts; + QCOORD *pnts; + + nrpnts = PyList_GET_SIZE(a0); + + if ((pnts = getPoints(nrpnts,a0)) == NULL) + sipIsErr = 1; + else + { + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp -> setPoints(nrpnts / 2,pnts); + Py_END_ALLOW_THREADS + + sipFree((ANY *)pnts); + } +%End + +// bool setPoints(int,int,int,...); + + bool putPoints(int,SIP_PYLIST); +%MethodCode + int nrpnts; + QCOORD *pnts; + + nrpnts = PyList_GET_SIZE(a1); + + if ((pnts = getPoints(nrpnts,a1)) == NULL) + sipIsErr = 1; + else + { + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp -> putPoints(a0,nrpnts / 2,pnts); + Py_END_ALLOW_THREADS + + sipFree((ANY *)pnts); + } +%End + +// bool putPoints(int,int,int,int,...); +%If (Qt_3_0_0 -) + bool putPoints(int,int,const QPointArray &,int = 0); +%End + +%If (- Qt_2_00) + QPoint at(uint) const; +%End + + void makeArc(int,int,int,int,int,int); + void makeEllipse(int,int,int,int); +%If (Qt_TRANSFORMATIONS) +%If (Qt_2_00 -) + void makeArc(int,int,int,int,int,int,const QWMatrix &); +%End +%End +%If (- Qt_3_0_0) + QPointArray quadBezier() const; +%End +%If (Qt_3_0_0 -) + QPointArray cubicBezier() const; +%End + + // These are actually in QArray, which isn't implemented so pretend + // they are here. + + uint nrefs() const; + bool isEmpty() const; + bool isNull() const; + bool resize(uint); + uint size() const; + bool truncate(uint); + bool fill(const QPoint &,int = -1); +%If (Qt_2_00 -) + QPoint &at(uint) const; +%End +%If (Qt_2_1_0 -) + void sort(); + int bsearch(const QPoint &) const; +%End + int find(const QPoint &,uint = 0) const; + int contains(const QPoint &) const; +}; diff --git a/sip/qt/qpopupmenu.sip b/sip/qt/qpopupmenu.sip new file mode 100644 index 0000000..08366b4 --- /dev/null +++ b/sip/qt/qpopupmenu.sip @@ -0,0 +1,282 @@ +// This is the SIP interface definition for QPopupMenu. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPopupMenu + + int exec + + + +This has been renamed exec_loop in Python. + + +This method also causes ownership of the underlying C++ menu to be transfered +to Python. This means that the C++ menu will be deleted when the Python +wrapper is garbage collected. Although this is a little inconsistent, it +ensures that the menu is deleted without having to explicity code it using +QObject.deleteLater() or other techniques. + + + + int exec + const QPoint &pos + int indexAtPoint = 0 + + +This has been renamed exec_loop in Python. + + +This method also causes ownership of the underlying C++ menu to be transfered +to Python. This means that the C++ menu will be deleted when the Python +wrapper is garbage collected. Although this is a little inconsistent, it +ensures that the menu is deleted without having to explicity code it using +QObject.deleteLater() or other techniques. + + +%End + + +%If (- Qt_2_00) + +class QPopupMenu : QTableView, QMenuData +{ +%TypeHeaderCode +#include +%End + +public: + QPopupMenu(QWidget * /TransferThis/ = 0,const char * = 0); + + void popup(const QPoint &,int = 0); + void updateItem(int); + void setCheckable(bool); + bool isCheckable() const; + void setFont(const QFont &); + void show(); + void hide(); + + int exec() /PyName=exec_loop, ReleaseGIL, + PreHook=__pyQtPreEventLoopHook__, + PostHook=__pyQtPostEventLoopHook__/; +%MethodCode + // Transfer ownership back to Python (a modal menu will + // probably have the main window as it's parent). This means + // the Qt menu will be deleted when the Python wrapper is + // garbage collected. Although this is a little inconsistent, + // it saves having to code it explicitly to avoid the memory + // leak. + sipTransferBack(sipSelf); + + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp->QPopupMenu::exec(); + Py_END_ALLOW_THREADS +%End + + int exec(const QPoint &,int = 0) /PyName=exec_loop, ReleaseGIL, + PreHook=__pyQtPreEventLoopHook__, + PostHook=__pyQtPostEventLoopHook__/; +%MethodCode + // Transfer ownership back to Python (a modal menu will + // probably have the main window as it's parent). This means + // the Qt menu will be deleted when the Python wrapper is + // garbage collected. Although this is a little inconsistent, + // it saves having to code it explicitly to avoid the memory + // leak. + sipTransferBack(sipSelf); + + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp->QPopupMenu::exec(*a0,a1); + Py_END_ALLOW_THREADS +%End + + void setActiveItem(int); + int idAt(int) const; +%If (Qt_1_43 -) + int idAt(const QPoint &) const; +%End + +signals: + void activated(int); + void highlighted(int); + void activatedRedirect(int); + void highlightedRedirect(int); + void aboutToShow(); + +protected: + int cellHeight(int); + int cellWidth(int); + void paintCell(QPainter *,int,int); + void paintEvent(QPaintEvent *); + void mousePressEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); + void keyPressEvent(QKeyEvent *); + void timerEvent(QTimerEvent *); + +private: + QPopupMenu(const QPopupMenu &); + void menuContentsChanged(); + void menuStateChanged(); + void menuInsPopup(QPopupMenu *); + void menuDelPopup(QPopupMenu *); + void frameChanged(); +}; + +%End + + +%If (Qt_2_00 -) + +class QPopupMenu : QFrame, QMenuData +{ +%TypeHeaderCode +#include +%End + +public: + QPopupMenu(QWidget * /TransferThis/ = 0,const char * = 0); + +%If (- Qt_3_0_5) + void popup(const QPoint &,int = 0); +%End +%If (Qt_3_0_5 -) + void popup(const QPoint &,int = -1); +%End + void updateItem(int); + + virtual void setCheckable(bool); + bool isCheckable() const; + + void setFont(const QFont &); + void show(); + void hide(); + + int exec() /PyName=exec_loop, ReleaseGIL, + PreHook=__pyQtPreEventLoopHook__, + PostHook=__pyQtPostEventLoopHook__/; +%MethodCode + // Transfer ownership back to Python (a modal menu will + // probably have the main window as it's parent). This means + // the Qt menu will be deleted when the Python wrapper is + // garbage collected. Although this is a little inconsistent, + // it saves having to code it explicitly to avoid the memory + // leak. + sipTransferBack(sipSelf); + + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp->QPopupMenu::exec(); + Py_END_ALLOW_THREADS +%End + + int exec(const QPoint &,int = 0) /PyName=exec_loop, ReleaseGIL, + PreHook=__pyQtPreEventLoopHook__, + PostHook=__pyQtPostEventLoopHook__/; +%MethodCode + // Transfer ownership back to Python (a modal menu will + // probably have the main window as it's parent). This means + // the Qt menu will be deleted when the Python wrapper is + // garbage collected. Although this is a little inconsistent, + // it saves having to code it explicitly to avoid the memory + // leak. + sipTransferBack(sipSelf); + + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp->QPopupMenu::exec(*a0,a1); + Py_END_ALLOW_THREADS +%End + + virtual void setActiveItem(int); + QSize sizeHint() const; + + int idAt(int) const; + int idAt(const QPoint &) const; + + bool customWhatsThis() const; + +%If (Qt_2_1_0 -) + int insertTearOffHandle(int = -1,int = -1); +%End + +%If (Qt_2_2_0 -) + void activateItemAt(int); +%End +%If (Qt_3_0_0 -) + QRect itemGeometry(int); +%End + +signals: + void activated(int); + void highlighted(int); + void activatedRedirect(int); + void highlightedRedirect(int); + void aboutToShow(); +%If (Qt_2_2_0 -) + void aboutToHide(); +%End + +protected: + int itemHeight(int) const; + int itemHeight(QMenuItem *) const; + void drawItem(QPainter *,int,QMenuItem *,bool,int,int,int,int); + + void drawContents(QPainter *); + + void closeEvent(QCloseEvent *); + void paintEvent(QPaintEvent *); + void mousePressEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); + void keyPressEvent(QKeyEvent *); +%If (Qt_2_1_0 -) + void focusInEvent(QFocusEvent *); + void focusOutEvent(QFocusEvent *); +%End + void timerEvent(QTimerEvent *); +%If (Qt_3_0_0 -) + void leaveEvent(QEvent *); +%End + void styleChange(QStyle &); +%If (Qt_3_1_0 -) + void enabledChange(bool); +%End +%If (Qt_2_1_0 -) + int columns() const; + + bool focusNextPrevChild(bool); +%End + +%If (Qt_3_0_0 -) + int itemAtPos(const QPoint &,bool = 1) const; +%End + +private: + QPopupMenu(const QPopupMenu &); + + void menuContentsChanged(); + void menuStateChanged(); + void menuInsPopup(QPopupMenu *); + void menuDelPopup(QPopupMenu *); + void frameChanged(); +}; + +%End diff --git a/sip/qt/qprintdialog.sip b/sip/qt/qprintdialog.sip new file mode 100644 index 0000000..2ead1f9 --- /dev/null +++ b/sip/qt/qprintdialog.sip @@ -0,0 +1,64 @@ +// This is the SIP interface definition for QPrintDialog. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPrintDialog (X11) + +QPrintDialog is fully implemented. + + +%End + + +%If (WS_X11) +%If (Qt_PRINTDIALOG) + +class QPrintDialog : QDialog +{ +%TypeHeaderCode +#include +%End + +public: + QPrintDialog(QPrinter *,QWidget * /TransferThis/ = 0,const char * = 0); + +%If (- Qt_3_0_0) + static bool getPrinterSetup(QPrinter *); +%End +%If (Qt_3_0_0 -) + static bool getPrinterSetup(QPrinter *,QWidget * = 0); + static void setGlobalPrintDialog(QPrintDialog *); +%End + + void setPrinter(QPrinter *,bool = 0); + QPrinter *printer() const; + +%If (Qt_2_1_0 -) + void addButton(QPushButton *); +%End + +private: + QPrintDialog(const QPrintDialog &); +}; + +%End +%End diff --git a/sip/qt/qprinter.sip b/sip/qt/qprinter.sip new file mode 100644 index 0000000..b8bf4f9 --- /dev/null +++ b/sip/qt/qprinter.sip @@ -0,0 +1,256 @@ +// This is the SIP interface definition for QPrinter. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPrinter + +QPrinter is fully implemented. + + +%End + + +%If (Qt_PRINTER) + +class QPrinter : QPaintDevice +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_0_0 -) + enum PrinterMode { + ScreenResolution, + PrinterResolution, + HighResolution, + Compatible + }; +%End + +%If (- Qt_3_0_0) + QPrinter(); +%End +%If (Qt_3_0_0 -) + QPrinter(PrinterMode = ScreenResolution); +%End + + enum Orientation { + Portrait, + Landscape + }; + + enum PageSize { + A4, B5, Letter, Legal, Executive, A0, A1, A2, A3, A5, A6, A7, + A8, A9, B0, B1, B10, B2, B3, B4, B6, B7, B8, B9, C5E, Comm10E, + DLE, Folio, Ledger, Tabloid, +%If (Qt_2_3_1 -) + Custom, +%End +%If (Qt_2_00 -) + NPageSize +%End + }; + + enum PageOrder { + FirstPageFirst, + LastPageFirst + }; + + enum ColorMode { + GrayScale, + Color + }; + +%If (Qt_3_0_0 -) + enum PaperSource { + OnlyOne, + Lower, + Middle, + Manual, + Envelope, + EnvelopeManual, + Auto, + Tractor, + SmallFormat, + LargeFormat, + LargeCapacity, + Cassette, + FormSource + }; +%End + +%If (Qt_3_2_0 -) + enum PrintRange { + AllPages, + Selection, + PageRange + }; + + enum PrinterOption { + PrintToFile, + PrintSelection, + PrintPageRange + }; +%End + +%If (- Qt_2_00) + const char *printerName() const; + void setPrinterName(const char *); +%End +%If (Qt_2_00 -) + QString printerName() const; + virtual void setPrinterName(const QString &); +%End + bool outputToFile() const; +%If (- Qt_2_00) + void setOutputToFile(bool); + const char *outputFileName() const; + void setOutputFileName(const char *); + + const char *printProgram() const; + void setPrintProgram(const char *); + + const char *docName() const; + void setDocName(const char *); + const char *creator() const; + void setCreator(const char *); +%End +%If (Qt_2_00 -) + virtual void setOutputToFile(bool); + QString outputFileName() const; + virtual void setOutputFileName(const QString &); + + QString printProgram() const; + virtual void setPrintProgram(const QString &); + + QString printerSelectionOption() const; + virtual void setPrinterSelectionOption(const QString &); + + QString docName() const; + virtual void setDocName(const QString &); + QString creator() const; + virtual void setCreator(const QString &); +%End + + Orientation orientation() const; +%If (- Qt_2_00) + void setOrientation(Orientation); +%End +%If (Qt_2_00 -) + virtual void setOrientation(Orientation); +%End + PageSize pageSize() const; +%If (- Qt_2_00) + void setPageSize(PageSize); + + void setPageOrder(PageOrder); +%End +%If (Qt_2_00 -) + virtual void setPageSize(PageSize); + + virtual void setPageOrder(PageOrder); +%End + PageOrder pageOrder() const; + +%If (Qt_3_0_0 -) + void setResolution(int); + int resolution() const; +%End + +%If (- Qt_2_00) + void setColorMode(ColorMode); +%End +%If (Qt_2_00 -) + virtual void setColorMode(ColorMode); +%End + ColorMode colorMode() const; + +%If (Qt_2_00 -) + virtual void setFullPage(bool); + bool fullPage() const; + QSize margins() const; +%End + +%If (Qt_3_1_0 -) + void setMargins(uint,uint,uint,uint); +// void margins(uint *,uint *,uint *,uint *) const; +%End + + int fromPage() const; + int toPage() const; +%If (- Qt_2_00) + void setFromTo(int,int); +%End +%If (Qt_2_00 -) + virtual void setFromTo(int,int); +%End + int minPage() const; + int maxPage() const; +%If (- Qt_2_00) + void setMinMax(int,int); +%End +%If (Qt_2_00 -) + virtual void setMinMax(int,int); +%End + int numCopies() const; +%If (- Qt_2_00) + void setNumCopies(int); +%End +%If (Qt_2_00 -) + virtual void setNumCopies(int); +%End + +%If (Qt_3_0_0 -) + bool collateCopiesEnabled() const; + void setCollateCopiesEnabled(bool); + + bool collateCopies() const; + void setCollateCopies(bool); +%End + +%If (Qt_3_2_0 -) + PrintRange printRange() const; + void setPrintRange(PrintRange); +%End + + bool newPage(); + bool abort(); + bool aborted() const; + + bool setup(QWidget * = 0); + +%If (Qt_3_0_0 -) + PaperSource paperSource() const; + virtual void setPaperSource(PaperSource); +%End + +%If (Qt_3_2_0 -) + void setOptionEnabled(PrinterOption,bool); + bool isOptionEnabled(PrinterOption); +%End + +private: + QPrinter(const QPrinter &); +}; + +%End diff --git a/sip/qt/qprocess.sip b/sip/qt/qprocess.sip new file mode 100644 index 0000000..c02c512 --- /dev/null +++ b/sip/qt/qprocess.sip @@ -0,0 +1,112 @@ +// This is the SIP interface definition for QProcess. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QProcess (Qt v3+) + +QProcess is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QProcess : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QProcess(QObject * /TransferThis/ = 0,const char * = 0); + QProcess(const QString &,QObject * /TransferThis/ = 0, + const char * = 0); + QProcess(const QStringList &,QObject * /TransferThis/ = 0, + const char * = 0); + + QStringList arguments() const; + void clearArguments(); + virtual void setArguments(const QStringList &); + virtual void addArgument(const QString &); + QDir workingDirectory() const; + virtual void setWorkingDirectory(const QDir &); + + enum Communication { + Stdin, + Stdout, + Stderr, + DupStderr + }; + + void setCommunication(int); + int communication() const; + + virtual bool start(QStringList * = 0); + virtual bool launch(const QString &, QStringList * = 0 ); + virtual bool launch(const QByteArray &,QStringList * = 0 ); + + bool isRunning() const; + bool normalExit() const; + int exitStatus() const; + + virtual QByteArray readStdout() /ReleaseGIL/; + virtual QByteArray readStderr() /ReleaseGIL/; + bool canReadLineStdout() const; + bool canReadLineStderr() const; + virtual QString readLineStdout() /ReleaseGIL/; + virtual QString readLineStderr() /ReleaseGIL/; + +%If (WS_X11 || WS_MACX || WS_QWS) + typedef long PID; +%End + + PID processIdentifier(); + + void flushStdin(); + +signals: + void readyReadStdout(); + void readyReadStderr(); + void processExited(); + void wroteToStdin(); + void launchFinished(); + +public slots: + void tryTerminate() const; + void kill() const; + + virtual void writeToStdin(const QByteArray &); + virtual void writeToStdin(const QString &); + virtual void closeStdin(); + +protected: + void connectNotify(const char *); + void disconnectNotify(const char *); + +private: +%If (Qt_3_1_0 -) + QProcess(const QProcess &); +%End +}; + +%End diff --git a/sip/qt/qprogressbar.sip b/sip/qt/qprogressbar.sip new file mode 100644 index 0000000..bcf3ad2 --- /dev/null +++ b/sip/qt/qprogressbar.sip @@ -0,0 +1,95 @@ +// This is the SIP interface definition for QProgressBar. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QProgressBar + +QProgressBar is fully implemented. + + +%End + + +class QProgressBar : QFrame +{ +%TypeHeaderCode +#include +%End + +public: + QProgressBar(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); + QProgressBar(int,QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); + + int totalSteps() const; + int progress() const; +%If (Qt_3_0_0 -) + const QString &progressString() const; +%End + + QSize sizeHint() const; +%If (Qt_2_00 - Qt_3_0_0) + QSizePolicy sizePolicy() const; +%End +%If (Qt_2_00 -) + QSize minimumSizeHint() const; + + void setCenterIndicator(bool); + bool centerIndicator() const; + + void setIndicatorFollowsStyle(bool); + bool indicatorFollowsStyle() const; +%End + +%If (Qt_3_0_0 -) + bool percentageVisible() const; + void setPercentageVisible(bool); +%End + + void show(); + +public slots: + void reset(); +%If (- Qt_2_00) + void setTotalSteps(int); + void setProgress(int); +%End +%If (Qt_2_00 -) + virtual void setTotalSteps(int); + virtual void setProgress(int); +%End +%If (Qt_3_1_0 -) + void setProgress(int,int); +%End + +protected: + void drawContents(QPainter *); + virtual bool setIndicator(QString &,int,int); +%If (Qt_2_00 - Qt_3_0_0) + void drawContentsMask(QPainter *); +%End +%If (Qt_2_00 -) + void styleChange(QStyle &); +%End + +private: + QProgressBar(const QProgressBar &); +}; diff --git a/sip/qt/qprogressdialog.sip b/sip/qt/qprogressdialog.sip new file mode 100644 index 0000000..4963041 --- /dev/null +++ b/sip/qt/qprogressdialog.sip @@ -0,0 +1,194 @@ +// This is the SIP interface definition for QProgressDialog. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QProgressDialog + +QProgressDialog is fully implemented. +value. + + +%End + + +%If (Qt_PROGRESSDIALOG) + +%If (Qt_3_0_0 -) + +class QProgressDialog : QDialog +{ +%TypeHeaderCode +#include +%End + +public: + QProgressDialog(QWidget * /TransferThis/ = 0,const char * = 0,bool = 0, + WFlags = 0); + QProgressDialog(const QString &,const QString &,int, + QWidget * /TransferThis/ = 0,const char * = 0,bool = 0, + WFlags = 0); + + void setLabel(QLabel *); + void setCancelButton(QPushButton *); + void setBar(QProgressBar *); + + bool wasCancelled() const; +%If (Qt_3_2_0 -) + bool wasCanceled() const; +%End + + int totalSteps() const; + int progress() const; + + QSize sizeHint() const; + + int minimumDuration() const; + + QString labelText() const; + + void setAutoReset(bool); + bool autoReset() const; + void setAutoClose(bool); + bool autoClose() const; + +public slots: + void cancel(); + void reset(); + void setTotalSteps(int); + void setProgress(int); +%If (Qt_3_1_0 -) + void setProgress(int,int); +%End + void setLabelText(const QString &); + void setCancelButtonText(const QString &); + + void setMinimumDuration(int); + +signals: + void cancelled(); +%If (Qt_3_2_0 -) + void canceled(); +%End + +protected: + void resizeEvent(QResizeEvent *); + void closeEvent(QCloseEvent *); + void styleChange(QStyle &); + void showEvent(QShowEvent *); + +protected slots: + void forceShow(); + +private: + QProgressDialog(const QProgressDialog &); +}; + +%End + + +%If (- Qt_3_0_0) + +class QProgressDialog : QSemiModal +{ +%TypeHeaderCode +#include +%End + +public: + QProgressDialog(QWidget * /TransferThis/ = 0,const char * = 0,bool = 0, + WFlags = 0); +%If (- Qt_2_00) + QProgressDialog(const char *,const char *,int,QWidget * /TransferThis/ = 0, + const char * = 0,bool = 0,WFlags = 0); +%End +%If (Qt_2_00 -) + QProgressDialog(const QString &,const QString &,int, + QWidget * /TransferThis/ = 0,const char * = 0,bool = 0, + WFlags = 0); +%End + + void setLabel(QLabel *); + void setCancelButton(QPushButton *); + void setBar(QProgressBar *); + + bool wasCancelled() const; + + int totalSteps() const; + int progress() const; + + QSize sizeHint() const; + + int minimumDuration() const; + +%If (Qt_2_1_0 -) + QString labelText() const; + + void setAutoReset(bool); + bool autoReset() const; + void setAutoClose(bool); + bool autoClose() const; +%End + +public slots: + void cancel(); + void reset(); + void setTotalSteps(int); + void setProgress(int); +%If (- Qt_2_00) + void setLabelText(const char *); + void setCancelButtonText(const char *); +%End +%If (Qt_2_00 -) + void setLabelText(const QString &); + void setCancelButtonText(const QString &); +%End + + void setMinimumDuration(int); + +signals: + void cancelled(); + +protected: + void resizeEvent(QResizeEvent *); +%If (- Qt_2_00) + void styleChange(GUIStyle); +%End +%If (Qt_2_00 -) + void closeEvent(QCloseEvent *); + void styleChange(QStyle &); +%End +%If (Qt_2_1_0 -) + void showEvent(QShowEvent *); +%End + +protected slots: +%If (Qt_2_2_0 -) + void forceShow(); +%End + +private: + QProgressDialog(const QProgressDialog &); +}; + +%End + +%End diff --git a/sip/qt/qptrlist.sip b/sip/qt/qptrlist.sip new file mode 100644 index 0000000..c49afad --- /dev/null +++ b/sip/qt/qptrlist.sip @@ -0,0 +1,111 @@ +// This is the SIP interface definition for all types based on the QPtrList +// template. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPtrList<type> (Qt v2+) + +Types based on the QPtrList template are automatically +converted to and from Python lists of the type. + + +%End + + +%If (Qt_2_00 -) + +template +%MappedType QPtrList +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + Type *dw; + int i; + PyObject *l; + + // Create the list. + + if ((l = PyList_New(sipCpp -> count())) == NULL) + return NULL; + + // Get it. + + i = 0; + + for (dw = sipCpp -> first(); dw != NULL; dw = sipCpp -> next()) + { + PyObject *dwobj; + + if ((dwobj = sipConvertFromInstance(dw,sipClass_Type,sipTransferObj)) == NULL || PyList_SetItem(l,i,dwobj) < 0) + { + Py_XDECREF(dwobj); + Py_DECREF(l); + + return NULL; + } + + ++i; + } + + return l; +%End + +%ConvertToTypeCode + if (sipIsErr == NULL) + { + if (!PyList_Check(sipPy)) + return 0; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + if (!sipCanConvertToInstance(PyList_GET_ITEM(sipPy,i),sipClass_Type,0)) + return 0; + + return 1; + } + + QPtrList *qpl = new QPtrList; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + { + // We apply the transfer to the list itself, not the elements. + // Note that any temporary element will never be destroyed. + // There is nothing that can be done about this. + qpl -> append(reinterpret_cast(sipConvertToInstance(PyList_GET_ITEM(sipPy,i),sipClass_Type,0,0,0,sipIsErr))); + + if (*sipIsErr) + { + delete qpl; + + return 0; + } + } + + *sipCppPtr = qpl; + + return sipGetState(sipTransferObj); +%End +}; + +%End diff --git a/sip/qt/qpushbutton.sip b/sip/qt/qpushbutton.sip new file mode 100644 index 0000000..93e6fa0 --- /dev/null +++ b/sip/qt/qpushbutton.sip @@ -0,0 +1,143 @@ +// This is the SIP interface definition for QPushButton. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QPushButton + +QPushButton is fully implemented. + + +%End + + +class QPushButton : QButton +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QPushButton(QWidget * /TransferThis/ = 0,const char * = 0); + QPushButton(const char *,QWidget * /TransferThis/ = 0,const char * = 0); +%End +%If (Qt_2_00 -) + QPushButton(QWidget * /TransferThis/,const char * = 0); + QPushButton(const QString &,QWidget * /TransferThis/,const char * = 0); +%End +%If (Qt_2_1_0 -) + QPushButton(const QIconSet &,const QString &,QWidget * /TransferThis/,const char * = 0); +%End + + QSize sizeHint() const; +%If (Qt_2_00 - Qt_3_0_0) + QSizePolicy sizePolicy() const; +%End + + void move(int,int); + void move(const QPoint &); + void resize(int,int); + void resize(const QSize &); +%If (- Qt_2_00) + void setGeometry(int,int,int,int); + + void setGeometry(const QRect &); + + void setToggleButton(bool); +%End +%If (Qt_2_00 - Qt_3_0_0) + virtual void setGeometry(int,int,int,int); + + virtual void setGeometry(const QRect &); + + virtual void setToggleButton(bool); +%End +%If (Qt_3_0_0 -) + void setGeometry(int,int,int,int); + + void setGeometry(const QRect &); + + void setToggleButton(bool); +%End + + bool autoDefault() const; +%If (- Qt_2_00) + void setAutoDefault(bool); +%End +%If (Qt_2_00 -) + virtual void setAutoDefault(bool); +%End + bool isDefault() const; +%If (- Qt_2_00) + void setDefault(bool); +%End +%If (Qt_2_00 -) + virtual void setDefault(bool); +%End + +%If (- Qt_2_00) + void setIsMenuButton(bool); +%End +%If (Qt_2_00 - Qt_3_0_0) + virtual void setIsMenuButton(bool); +%End +%If (- Qt_3_0_0) + bool isMenuButton() const; +%End + +%If (Qt_2_1_0 -) + void setPopup(QPopupMenu *); + QPopupMenu *popup() const; + + void setIconSet(const QIconSet &); + QIconSet *iconSet() const; +%End + +%If (Qt_2_2_0 -) + void setFlat(bool); + bool isFlat() const; +%End + +public slots: +%If (- Qt_2_00) + void setOn(bool); +%End +%If (Qt_2_00 -) + virtual void setOn(bool); +%End +%If (- Qt_3_0_0) + void toggle(); +%End + +protected: + void drawButton(QPainter *); + void drawButtonLabel(QPainter *); + void focusInEvent(QFocusEvent *); +%If (Qt_2_00 -) + void focusOutEvent(QFocusEvent *); + void resizeEvent(QResizeEvent *); + void updateMask(); +%End + +private: + QPushButton(const QPushButton &); +}; diff --git a/sip/qt/qradiobutton.sip b/sip/qt/qradiobutton.sip new file mode 100644 index 0000000..77c00db --- /dev/null +++ b/sip/qt/qradiobutton.sip @@ -0,0 +1,84 @@ +// This is the SIP interface definition for QRadioButton. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QRadioButton + +QRadioButton is fully implemented. + + +%End + + +class QRadioButton : QButton +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QRadioButton(QWidget * /TransferThis/ = 0,const char * = 0); + QRadioButton(const char *,QWidget * /TransferThis/ = 0,const char * = 0); +%End +%If (Qt_2_00 -) + QRadioButton(QWidget * /TransferThis/,const char * = 0); + QRadioButton(const QString &,QWidget * /TransferThis/,const char * = 0); +%End + + bool isChecked() const; + + QSize sizeHint() const; + +%If (- Qt_2_00) + void setChecked(bool); +%End +%If (Qt_2_00 - Qt_3_0_0) + virtual void setChecked(bool); + QSizePolicy sizePolicy() const; +%End + +public slots: +%If (Qt_3_0_0 -) + virtual void setChecked(bool); +%End + +protected: + bool hitButton(const QPoint &) const; + void drawButton(QPainter *); + void drawButtonLabel(QPainter *); +%If (- Qt_2_00) + void mouseReleaseEvent(QMouseEvent *); + void keyPressEvent(QKeyEvent *); +%End +%If (Qt_2_00 -) + void updateMask(); + + void resizeEvent(QResizeEvent *); +%End +%If (Qt_2_00 - Qt_3_0_0) + void focusInEvent(QFocusEvent *); +%End + +private: + QRadioButton(const QRadioButton &); +}; diff --git a/sip/qt/qrangecontrol.sip b/sip/qt/qrangecontrol.sip new file mode 100644 index 0000000..2c1c3af --- /dev/null +++ b/sip/qt/qrangecontrol.sip @@ -0,0 +1,79 @@ +// This is the SIP interface definition for QRangeControl. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QRangeControl + +QRangeControl is fully implemented. + + +%End + + +class QRangeControl +{ +%TypeHeaderCode +#include +%End + +public: + QRangeControl(); + QRangeControl(int,int,int,int,int); + + int value() const; + void setValue(int); + void addPage(); + void subtractPage(); + void addLine(); + void subtractLine(); + + int minValue() const; + int maxValue() const; + void setRange(int,int); +%If (Qt_3_0_0 -) + void setMinValue(int); + void setMaxValue(int); +%End + + int lineStep() const; + int pageStep() const; + void setSteps(int,int); + +%If (Qt_2_00 -) + int bound(int) const; +%End + +protected: +%If (Qt_2_00 -) + int positionFromValue(int,int) const; + int valueFromPosition(int,int) const; +%End + void directSetValue(int); + int prevValue() const; + + virtual void valueChange(); + virtual void rangeChange(); + virtual void stepChange(); + +private: + QRangeControl(const QRangeControl &); +}; diff --git a/sip/qt/qrect.sip b/sip/qt/qrect.sip new file mode 100644 index 0000000..0f5f213 --- /dev/null +++ b/sip/qt/qrect.sip @@ -0,0 +1,207 @@ +// This is the SIP interface definition for QRect. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QRect + +The Python +&, &=, +|, |=, +==, !=, in and +__nonzero__ operators are supported. + + + + void coords + int *x1 + int *y1 + int *x2 + int *y2 + + +This takes no parameters and returns a tuple containing the four values. + + + + void rect + int *x + int *y + int *w + int *h + + +This takes no parameters and returns a tuple containing the four values. + + + + QCOORD &rBottom + + + +Not implemented. (Qt v2+) + + + + QCOORD &rLeft + + + +Not implemented. (Qt v2+) + + + + QCOORD &rRight + + + +Not implemented. (Qt v2+) + + + + QCOORD &rTop + + + +Not implemented. (Qt v2+) + + +%End + + +class QRect +{ +%TypeHeaderCode +#include +%End + +public: + QRect(); + QRect(const QPoint &,const QPoint &); + QRect(const QPoint &,const QSize &); + QRect(int,int,int,int); + + bool isNull() const; + bool isEmpty() const; + bool isValid() const; + QRect normalize() const; + + int left() const; + int top() const; + int right() const; + int bottom() const; + +%If (Qt_2_00 -) +// QCOORD &rLeft(); +// QCOORD &rTop(); +// QCOORD &rRight(); +// QCOORD &rBottom(); +%End + + int x() const; + int y() const; + void setLeft(int); + void setTop(int); + void setRight(int); + void setBottom(int); + void setX(int); + void setY(int); + +%If (Qt_3_1_0 -) + void setTopLeft(const QPoint &); + void setBottomRight(const QPoint &); + void setTopRight(const QPoint &); + void setBottomLeft(const QPoint &); +%End + + QPoint topLeft() const; + QPoint bottomRight() const; + QPoint topRight() const; + QPoint bottomLeft() const; + QPoint center() const; + + void rect(int *,int *,int *,int *) const; + void coords(int *,int *,int *,int *) const; + +%If (Qt_3_1_0 -) + void moveLeft(int); + void moveTop(int); + void moveRight(int); + void moveBottom(int); +%End + void moveTopLeft(const QPoint &); + void moveBottomLeft(const QPoint &); + void moveTopRight(const QPoint &); + void moveBottomRight(const QPoint &); + void moveCenter(const QPoint &); + void moveBy(int,int); + + void setRect(int,int,int,int); + void setCoords(int,int,int,int); +%If (Qt_3_0_0 -) + void addCoords(int,int,int,int); +%End + + QSize size() const; + int width() const; + int height() const; + void setWidth(int); + void setHeight(int); + void setSize(const QSize &); + + QRect operator|(const QRect &) const; + QRect operator&(const QRect &) const; + QRect &operator|=(const QRect &); + QRect &operator&=(const QRect &); + + int __nonzero__() const; +%MethodCode + sipRes = sipCpp -> isValid(); +%End + + bool contains(const QPoint &,bool = 0) const; + + int __contains__(const QPoint &) const; +%MethodCode + sipRes = sipCpp -> contains(*a0); +%End + +%If (Qt_3_1_0 -) + bool contains(int,int) const; + bool contains(int,int,bool) const; +%End +%If (Qt_2_2_0 - Qt_3_1_0) + bool contains(int,int,bool = 0) const; +%End + bool contains(const QRect &,bool = 0) const; + + int __contains__(const QRect &) const; +%MethodCode + sipRes = sipCpp -> contains(*a0); +%End + + QRect unite(const QRect &) const; + QRect intersect(const QRect &) const; + bool intersects(const QRect &) const; +}; + +bool operator==(const QRect &,const QRect &); +bool operator!=(const QRect &,const QRect &); diff --git a/sip/qt/qregexp.sip b/sip/qt/qregexp.sip new file mode 100644 index 0000000..3d1dc40 --- /dev/null +++ b/sip/qt/qregexp.sip @@ -0,0 +1,139 @@ +// This is the SIP interface definition for QRegExp. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QRegExp + +The Python == and != operators are +supported. + + + + int match + const char *str + int index = 0 + int *len = 0 + + +This takes str and index parameters and +returns a tuple of the int result and the +len value. (Qt v1.x) + + + + int match + const QString &str + int index = 0 + int *len = 0 + + +This takes str and index parameters and +returns a tuple of the int result and the +len value. (Qt v2+) + + +%End + + +class QRegExp +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_1_0 -) + enum CaretMode { + CaretAtZero, + CaretAtOffset, + CaretWontMatch + }; +%End + + QRegExp(); +%If (- Qt_2_00) + QRegExp(const char *,bool = 1,bool = 0); +%End +%If (Qt_2_00 -) + QRegExp(const QString &,bool = 1,bool = 0); +%End + QRegExp(const QRegExp &); + + bool operator==(const QRegExp &) const; + bool operator!=(const QRegExp &) const; + + bool isEmpty() const; + bool isValid() const; +%If (- Qt_2_00) + const char *pattern() const; +%End +%If (Qt_2_00 -) + QString pattern() const; +%End +%If (Qt_2_2_0 -) + void setPattern(const QString &); +%End + bool caseSensitive() const; + void setCaseSensitive(bool); + bool wildcard() const; + void setWildcard(bool); +%If (Qt_3_0_0 -) + bool minimal() const; + void setMinimal(bool); + + bool exactMatch(const QString &) const; +%End + +%If (- Qt_2_00) + int match(const char *,int = 0,int * = 0) const; +%End +%If (Qt_2_00 - Qt_3_0_0) + int match(const QString &,int = 0,int * = 0) const; +%End + +%If (Qt_2_2_0 - Qt_3_0_0) + int find(const QString &,int); +%End + +%If (Qt_3_0_0 -) + int search(const QString &,int = 0) const; +%If (Qt_3_1_0 -) + int search(const QString &,int,CaretMode) const; +%End + int searchRev(const QString &,int = -1) const; +%If (Qt_3_1_0 -) + int searchRev(const QString &,int,CaretMode) const; +%End + int matchedLength() const; +%If (Qt_3_1_0 -) + int numCaptures() const; +%End + QStringList capturedTexts(); + QString cap(int = 0); + int pos(int = 0); +%End +%If (Qt_3_1_0 -) + QString errorString(); + + static QString escape(const QString &); +%End +}; diff --git a/sip/qt/qregion.sip b/sip/qt/qregion.sip new file mode 100644 index 0000000..38b9beb --- /dev/null +++ b/sip/qt/qregion.sip @@ -0,0 +1,128 @@ +// This is the SIP interface definition for QRegion. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QRegion + +The Python +|, |=, ++, +=, +&, &=, +-, -=, +^, ^=, +==, !=, in and +__nonzero__ operators are supported. + + + + QArray<QRect> rects + + + +Not implemented. + + + + void setRects + QRect *rects + int num + + +Not yet implemented. (Qt v2.2+) + + +%End + + +class QRegion +{ +%TypeHeaderCode +#include +%End + +public: + enum RegionType + { + Rectangle, + Ellipse + }; + + QRegion(); + QRegion(int,int,int,int,RegionType = Rectangle); + QRegion(const QRect &,RegionType = Rectangle); + QRegion(const QPointArray &,bool = 0); + QRegion(const QRegion &); +%If (Qt_1_43 -) + QRegion(const QBitmap &); +%End + + bool isNull() const; + bool isEmpty() const; + + bool contains(const QPoint &) const; + + int __contains__(const QPoint &) const; +%MethodCode + sipRes = sipCpp -> contains(*a0); +%End + + bool contains(const QRect &) const; + + int __contains__(const QRect &) const; +%MethodCode + sipRes = sipCpp -> contains(*a0); +%End + + void translate(int,int); + + QRegion unite(const QRegion &) const; + QRegion intersect(const QRegion &) const; + QRegion subtract(const QRegion &) const; + QRegion eor(const QRegion &) const; + + QRect boundingRect() const; +%If (Qt_3_0_0 -) + QMemArray rects() const; +%End +%If (Qt_2_2_0 -) +// void setRects(const QRect *,int); +%End + + const QRegion operator|(const QRegion &) const; + const QRegion operator+(const QRegion &) const; + const QRegion operator&(const QRegion &) const; + const QRegion operator-(const QRegion &) const; + const QRegion operator^(const QRegion &) const; + QRegion &operator|=(const QRegion &); + QRegion &operator+=(const QRegion &); + QRegion &operator&=(const QRegion &); + QRegion &operator-=(const QRegion &); + QRegion &operator^=(const QRegion &); + + int __nonzero__() const; +%MethodCode + sipRes = !sipCpp -> isNull(); +%End + + bool operator==(const QRegion &) const; + bool operator!=(const QRegion &) const; +}; diff --git a/sip/qt/qscrollbar.sip b/sip/qt/qscrollbar.sip new file mode 100644 index 0000000..20b8e5d --- /dev/null +++ b/sip/qt/qscrollbar.sip @@ -0,0 +1,170 @@ +// This is the SIP interface definition for QScrollBar. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QScrollBar + +QScrollBar is fully implemented. + + +%End + + +class QScrollBar : QWidget, QRangeControl +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + enum Orientation { + Horizontal, + Vertical + }; +%End + +%If (- Qt_2_00) + QScrollBar(QWidget * /TransferThis/ = 0,const char * = 0); + QScrollBar(Orientation,QWidget * /TransferThis/ = 0,const char * = 0); + QScrollBar(int,int,int,int,int,Orientation, + QWidget * /TransferThis/ = 0,const char * = 0); +%End +%If (Qt_2_00 -) + QScrollBar(QWidget * /TransferThis/,const char * = 0); + QScrollBar(Orientation,QWidget * /TransferThis/,const char * = 0); + QScrollBar(int,int,int,int,int,Orientation,QWidget * /TransferThis/, + const char * = 0); +%End + +%If (- Qt_2_00) + void setOrientation(Orientation); +%End +%If (Qt_2_00 -) + virtual void setOrientation(Orientation); +%End + Orientation orientation() const; +%If (- Qt_2_00) + void setTracking(bool); +%End +%If (Qt_2_00 -) + virtual void setTracking(bool); +%End + bool tracking() const; + bool draggingSlider() const; + +%If (Qt_2_00 -) + virtual void setPalette(const QPalette &); +%End +%If (- Qt_2_00) + void setPalette(const QPalette &); +%End +%If (Qt_3_1_0 -) + virtual QSize sizeHint() const; +%End +%If (- Qt_3_1_0) + QSize sizeHint() const; +%End +%If (Qt_3_1_0 -) + virtual void setSizePolicy(QSizePolicy); +%End +%If (Qt_3_2_0 -) + void setSizePolicy(QSizePolicy::SizeType,QSizePolicy::SizeType, + bool = 0); +%End +%If (Qt_2_00 - Qt_3_0_0) + QSizePolicy sizePolicy() const; +%End + +%If (Qt_2_1_0 -) + int minValue() const; + int maxValue() const; + void setMinValue(int); + void setMaxValue(int); + int lineStep() const; + int pageStep() const; + void setLineStep(int); + void setPageStep(int); + int value() const; +%End +%If (- Qt_3_0_0) + void setValue(int); +%End + +%If (Qt_3_0_0 -) + int sliderStart() const; + QRect sliderRect() const; +%End + +public slots: +%If (Qt_3_0_0 -) + void setValue(int); +%End + +signals: + void valueChanged(int); + void sliderPressed(); + void sliderMoved(int); + void sliderReleased(); + void nextLine(); + void prevLine(); + void nextPage(); + void prevPage(); + +protected: +%If (Qt_2_00 -) + void wheelEvent(QWheelEvent *); +%End + void keyPressEvent(QKeyEvent *); + void resizeEvent(QResizeEvent *); + void paintEvent(QPaintEvent *); + + void mousePressEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); +%If (Qt_3_0_0 -) + void contextMenuEvent(QContextMenuEvent *); +%End +%If (Qt_3_0_4 -) + void hideEvent(QHideEvent *); +%End + + void valueChange(); + void stepChange(); + void rangeChange(); + +%If (- Qt_3_0_0) + int sliderStart() const; + QRect sliderRect() const; +%End + +%If (- Qt_2_00) + void timerEvent(QTimerEvent *); +%End + +%If (Qt_2_00 -) + void styleChange(QStyle &); +%End + +private: + QScrollBar(const QScrollBar &); +}; diff --git a/sip/qt/qscrollview.sip b/sip/qt/qscrollview.sip new file mode 100644 index 0000000..4d7161f --- /dev/null +++ b/sip/qt/qscrollview.sip @@ -0,0 +1,325 @@ +// This is the SIP interface definition for QScrollView. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QScrollView + + void contentsToViewport + int x + int y + int &vx + int &vy + + +This takes the x and y parameters and +returns a tuple containing the vx and vy +values. (Qt v2+) + + + + void viewportToContents + int vx + int vy + int &x + int &y + + +This takes the vx and vy parameters and +returns a tuple containing the x and y +values. (Qt v2+) + + +%End + + +class QScrollView : QFrame +{ +%TypeHeaderCode +#include +%End + +public: + QScrollView(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); + + enum ResizePolicy { + Default, + Manual, + AutoOne, +%If (Qt_2_3_0 -) + AutoOneFit, +%End + }; + + virtual void setResizePolicy(ResizePolicy); + ResizePolicy resizePolicy() const; + +%If (Qt_2_1_0 -) + void styleChange(QStyle &); +%End + // The child was reparented when it was added, and it stays that way, + // so we don't transfer it back here. + void removeChild(QWidget *); +%If (- Qt_2_00) + void addChild(QWidget * /Transfer/); + virtual void addChild(QWidget * /Transfer/,int,int); +%End +%If (Qt_2_00 -) + virtual void addChild(QWidget * /Transfer/,int = 0,int = 0); +%End + virtual void moveChild(QWidget *,int,int); + int childX(QWidget *); + int childY(QWidget *); +%If (- Qt_3_0_0) + bool childIsVisible(QWidget *); + void showChild(QWidget *,bool = 1); +%End + + enum ScrollBarMode { + Auto, + AlwaysOff, + AlwaysOn + }; + + ScrollBarMode vScrollBarMode() const; + virtual void setVScrollBarMode(ScrollBarMode); + + ScrollBarMode hScrollBarMode() const; + virtual void setHScrollBarMode(ScrollBarMode); + + QWidget *cornerWidget() const; + virtual void setCornerWidget(QWidget * /Transfer/); + +%If (- Qt_2_00) + QScrollBar *horizontalScrollBar(); + QScrollBar *verticalScrollBar(); + QWidget *viewport(); +%End +%If (Qt_2_00 -) + QScrollBar *horizontalScrollBar() const; + QScrollBar *verticalScrollBar() const; + QWidget *viewport() const; + QWidget *clipper() const; + + int visibleWidth() const; + int visibleHeight() const; +%End + + int contentsWidth() const; + int contentsHeight() const; + int contentsX() const; + int contentsY() const; + + void resize(int,int); + void resize(const QSize &); + void show(); + +%If (Qt_2_00 -) + void updateContents(int,int,int,int); +%End +%If (Qt_2_1_0 -) + void updateContents(const QRect &); +%End +%If (Qt_3_0_0 -) + void updateContents(); +%End +%If (Qt_2_00 -) + void repaintContents(int,int,int,int,bool = 1); +%End +%If (Qt_2_1_0 -) + void repaintContents(const QRect &,bool = 1); +%End +%If (Qt_3_0_0 -) + void repaintContents(bool = 1); +%End + +%If (Qt_2_00 -) + // Note that this wasn't actually const until Qt v3.0.0. + void contentsToViewport(int,int,int &,int &) const; + + // Note that this wasn't actually const until Qt v3.0.0. + void viewportToContents(int,int,int &,int &) const; + +%If (- Qt_3_0_0) + QPoint contentsToViewport(const QPoint &); + QPoint viewportToContents(const QPoint &); +%End +%If (Qt_3_0_0 -) + QPoint contentsToViewport(const QPoint &) const; + QPoint viewportToContents(const QPoint &) const; +%End + void enableClipper(bool); + +%If (Qt_2_2_0 -) + void setStaticBackground(bool); + bool hasStaticBackground() const; +%End + + QSize viewportSize(int,int) const; +%If (Qt_2_1_0 -) + QSize sizeHint() const; +%End +%If (- Qt_3_0_0) + QSizePolicy sizePolicy() const; +%End + QSize minimumSizeHint() const; + + void removeChild(QObject * /TransferBack/); +%End + +%If (Qt_3_1_0 -) + bool isHorizontalSliderPressed(); + bool isVerticalSliderPressed(); +%End + +%If (Qt_DRAGANDDROP) +%If (Qt_2_1_0 - Qt_3_0_0) + void setDragAutoScroll(bool); +%End +%If (Qt_3_0_0 -) + virtual void setDragAutoScroll(bool); +%End +%If (Qt_2_1_0 -) + bool dragAutoScroll() const; +%End +%End + +signals: + void contentsMoving(int,int); +%If (Qt_3_1_0 -) + void horizontalSliderPressed(); + void horizontalSliderReleased(); + void verticalSliderPressed(); + void verticalSliderReleased(); +%End + +public slots: + virtual void resizeContents(int,int); + void scrollBy(int,int); +%If (- Qt_2_00) + void setContentsPos(int,int); +%End +%If (Qt_2_00 -) + virtual void setContentsPos(int,int); +%End + void ensureVisible(int,int); + void ensureVisible(int,int,int,int); + void center(int,int); + void center(int,int,float,float); + + void updateScrollBars(); +%If (Qt_2_00 -) + void setEnabled(bool); +%End + +protected: +%If (Qt_2_00 -) + virtual void drawContents(QPainter *,int,int,int,int); +%End + virtual void drawContentsOffset(QPainter *,int,int,int,int,int,int); + +%If (Qt_2_00 -) + virtual void contentsMousePressEvent(QMouseEvent *); + virtual void contentsMouseReleaseEvent(QMouseEvent *); + virtual void contentsMouseDoubleClickEvent(QMouseEvent *); + virtual void contentsMouseMoveEvent(QMouseEvent *); +%If (Qt_DRAGANDDROP) + virtual void contentsDragEnterEvent(QDragEnterEvent *); + virtual void contentsDragMoveEvent(QDragMoveEvent *); + virtual void contentsDragLeaveEvent(QDragLeaveEvent *); + virtual void contentsDropEvent(QDropEvent *); +%End + virtual void contentsWheelEvent(QWheelEvent *); +%End +%If (Qt_3_0_0 -) + virtual void contentsContextMenuEvent(QContextMenuEvent *); +%End + + virtual void viewportPaintEvent(QPaintEvent *); +%If (Qt_2_00 -) + virtual void viewportResizeEvent(QResizeEvent *); +%End + virtual void viewportMousePressEvent(QMouseEvent *); + virtual void viewportMouseReleaseEvent(QMouseEvent *); + virtual void viewportMouseDoubleClickEvent(QMouseEvent *); + virtual void viewportMouseMoveEvent(QMouseEvent *); +%If (Qt_2_00 -) +%If (Qt_DRAGANDDROP) + virtual void viewportDragEnterEvent(QDragEnterEvent *); + virtual void viewportDragMoveEvent(QDragMoveEvent *); + virtual void viewportDragLeaveEvent(QDragLeaveEvent *); + virtual void viewportDropEvent(QDropEvent *); +%End + virtual void viewportWheelEvent(QWheelEvent *); +%End +%If (Qt_3_0_0 -) + virtual void viewportContextMenuEvent(QContextMenuEvent *); +%End + + void frameChanged(); + +%If (- Qt_2_00) + void setMargins(int,int,int,int); +%End +%If (Qt_2_00 -) + virtual void setMargins(int,int,int,int); +%End + int leftMargin() const; + int topMargin() const; + int rightMargin() const; + int bottomMargin() const; + + bool focusNextPrevChild(bool); + +%If (Qt_2_00 -) + virtual void setHBarGeometry(QScrollBar &,int,int,int,int); + virtual void setVBarGeometry(QScrollBar &,int,int,int,int); +%End + + void resizeEvent(QResizeEvent *); +%If (Qt_3_0_0 -) + void mousePressEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseDoubleClickEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); +%End +%If (Qt_2_00 -) + void wheelEvent(QWheelEvent *); +%End +%If (Qt_3_0_0 -) + void contextMenuEvent(QContextMenuEvent *); +%End + bool eventFilter(QObject *,QEvent *); + +%If (Qt_3_1_0 -) + void setCachedSizeHint(const QSize &) const; + QSize cachedSizeHint() const; + void fontChange(const QFont &); +%End + +private: + QScrollView(const QScrollView &); + +public: +%If (Qt_3_1_0 -) + void disableSizeHintCaching(); +%End +}; diff --git a/sip/qt/qsemaphore.sip b/sip/qt/qsemaphore.sip new file mode 100644 index 0000000..5e1ba40 --- /dev/null +++ b/sip/qt/qsemaphore.sip @@ -0,0 +1,112 @@ +// This is the SIP interface definition for QSemaphore. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSemaphore (Qt v2.2+) + +QSemaphore is fully implemented. The += +and -= operators have also been implemented, but require +Python v2.0 or later. + + +%End + + +%If (Qt_THREAD_SUPPORT) + +%If (Qt_3_0_0 -) + +class QSemaphore +{ +%TypeHeaderCode +#include +%End + +public: + QSemaphore(int); + + int available() const; + int total() const; + + QSemaphore &operator+=(int); +%MethodCode + // Some versions of Qt v3 under Windows have a bug where the += + // operator doesn't work properly (but ++ does). This way we + // make sure that the most common value of n (ie. 1) works + // properly with the buggy version. + + Py_BEGIN_ALLOW_THREADS + if (a0 == 1) + (*sipCpp)++; + else + (*sipCpp) += a0; + Py_END_ALLOW_THREADS +%End + + QSemaphore &operator-=(int); +%MethodCode + // Some versions of Qt v3 under Windows have a bug where the -= + // operator doesn't work properly (but -- does). This way we + // make sure that the most common value of n (ie. 1) works + // properly with the buggy version. + + Py_BEGIN_ALLOW_THREADS + if (a0 == 1) + (*sipCpp)--; + else + (*sipCpp) -= a0; + Py_END_ALLOW_THREADS +%End + + bool tryAccess(int); + +private: + QSemaphore(const QSemaphore &); +}; + +%End + + +%If (Qt_2_2_0 - Qt_3_0_0) + +class QSemaphore : Qt +{ +%TypeHeaderCode +#include +%End + +public: + QSemaphore(int); + + int available() const; + int total() const; + + QSemaphore &operator+=(int); + QSemaphore &operator-=(int); + +private: + QSemaphore(const QSemaphore &); +}; + +%End + +%End diff --git a/sip/qt/qsemimodal.sip b/sip/qt/qsemimodal.sip new file mode 100644 index 0000000..0efc1c8 --- /dev/null +++ b/sip/qt/qsemimodal.sip @@ -0,0 +1,63 @@ +// This is the SIP interface definition for QSemiModal. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSemiModal (Qt v1, v2) + +QSemiModal is fully implemented. + + +%End + + +%If (Qt_SEMIMODAL) +%If (- Qt_3_0_0) + +class QSemiModal : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QSemiModal(QWidget * /TransferThis/ = 0,const char * = 0,bool = 0,WFlags = 0); + + void show(); + void move(int,int); + void move(const QPoint &); + void resize(int,int); + void resize(const QSize &); +%If (- Qt_2_00) + void setGeometry(int,int,int,int); + void setGeometry(const QRect &); +%End +%If (Qt_2_00 -) + virtual void setGeometry(int,int,int,int); + virtual void setGeometry(const QRect &); +%End + +private: + QSemiModal(const QSemiModal &); +}; + +%End +%End diff --git a/sip/qt/qsessionmanager.sip b/sip/qt/qsessionmanager.sip new file mode 100644 index 0000000..92ff03c --- /dev/null +++ b/sip/qt/qsessionmanager.sip @@ -0,0 +1,89 @@ +// This is the SIP interface definition for QSessionManager. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSessionManager (Qt v2+) + +QSessionManager is fully implemented. + + +%End + + +%If (Qt_2_00 -) + +class QSessionManager : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QString sessionId() const; +%If (Qt_3_1_0 -) + QString sessionKey() const; +%End + + bool allowsInteraction(); + bool allowsErrorInteraction(); + void release(); + + void cancel(); + + enum RestartHint { + RestartIfRunning, + RestartAnyway, + RestartImmediately, + RestartNever + }; + + void setRestartHint(RestartHint); + RestartHint restartHint() const; + + void setRestartCommand(const QStringList &); + QStringList restartCommand() const; + void setDiscardCommand(const QStringList &); + QStringList discardCommand() const; + +%If (- Qt_3_0_0) + void setProperty(const QString &,const QString &); + void setProperty(const QString &,const QStringList &); +%End +%If (Qt_3_0_0 -) + void setManagerProperty(const QString &,const QString &); + void setManagerProperty(const QString &,const QStringList &); +%End + + bool isPhase2() const; + void requestPhase2(); + +private: +%If (Qt_3_1_0 -) + QSessionManager(QApplication * /TransferThis/,QString &,QString &); +%End +%If (- Qt_3_1_0) + QSessionManager(QApplication * /TransferThis/,QString &); +%End + ~QSessionManager(); +}; + +%End diff --git a/sip/qt/qsettings.sip b/sip/qt/qsettings.sip new file mode 100644 index 0000000..122593e --- /dev/null +++ b/sip/qt/qsettings.sip @@ -0,0 +1,177 @@ +// This is the SIP interface definition for QSettings. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSettings (Qt v3+) + + bool readBoolEntry + const QString &key + bool def = 0 + bool *ok = 0 + + +The ok is not passed and the returned value is a tuple of +the bool result and the ok flag. + + + +double readDoubleEntry + const QString &key + double def = 0 + bool *ok = 0 + + +The ok is not passed and the returned value is a tuple of +the double result and the ok flag. + + + +QString readEntry + const QString &key + const QString &def = QString::null + bool *ok = 0 + + +The ok is not passed and the returned value is a tuple of +the QString result and the ok flag. + + + +QStringList readListEntry + const QString &key + bool *ok = 0 + + +The ok is not passed and the returned value is a tuple of +the QStringList result and the ok flag. + + + +QStringList readListEntry + const QString &key + const QChar &separator + bool *ok = 0 + + +The ok is not passed and the returned value is a tuple of +the QStringList result and the ok flag. + + + +int readNumEntry + const QString &key + int def = 0 + bool *ok = 0 + + +The ok is not passed and the returned value is a tuple of +the int result and the ok flag. + + + + bool writeEntry + const QString &key + bool value + + +Not implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QSettings +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_1_0 -) + enum Format { + Native, + Ini + }; +%End + + enum System { + Unix, + Windows, + Mac + }; + +%If (Qt_3_1_0 -) + enum Scope { + User, + Global + }; +%End + + QSettings(); +%If (Qt_3_1_0 -) + QSettings(Format); +%End + +// bool writeEntry(const QString &,bool); + bool writeEntry(const QString &,int /Constrained/); + bool writeEntry(const QString &,double); +// bool writeEntry(const QString &,const char *); + bool writeEntry(const QString &,const QString &); + bool writeEntry(const QString &,const QStringList &); + bool writeEntry(const QString &,const QStringList &,const QChar &); + + QStringList entryList(const QString &) const; + QStringList subkeyList(const QString &) const; + + QStringList readListEntry(const QString &,bool * = 0); + QStringList readListEntry(const QString &,const QChar &,bool * = 0); + QString readEntry(const QString &,const QString & = QString::null, + bool * = 0); + int readNumEntry(const QString &,int = 0,bool * = 0); + double readDoubleEntry(const QString &,double = 0,bool * = 0); + bool readBoolEntry(const QString &,bool = 0,bool * = 0); + + bool removeEntry(const QString &); + + void insertSearchPath(System,const QString &); + void removeSearchPath(System,const QString &); + +%If (Qt_3_1_0 -) + void setPath(const QString &,const QString &,Scope = Global); + + void beginGroup(const QString &); + void endGroup(); + void resetGroup(); + QString group() const; +%End + +%If (Qt_3_2_0 -) + bool sync(); +%End + +private: + QSettings(const QSettings &); +}; + +%End diff --git a/sip/qt/qsgistyle.sip b/sip/qt/qsgistyle.sip new file mode 100644 index 0000000..c2563ea --- /dev/null +++ b/sip/qt/qsgistyle.sip @@ -0,0 +1,157 @@ +// This is the SIP interface definition for QSGIStyle. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSGIStyle (Qt v2.2+) + + void scrollBarMetrics + const QScrollBar *sb + int &sliderMin + int &sliderMax + int &sliderLength + int &buttonDim + + +This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2) + + +%End + + +%If (Qt_STYLE_SGI) +%If (Qt_2_2_0 -) + +class QSGIStyle : QMotifStyle +{ +%TypeHeaderCode +#include +%End + +public: + QSGIStyle(bool = 0); + + void polish(QWidget *); + void unPolish(QWidget *); + void polish(QApplication *); + void unPolish(QApplication *); + +%If (- Qt_3_0_0) + void polish(QPalette &); + + int defaultFrameWidth() const; + + void drawPanel(QPainter *,int,int,int,int,const QColorGroup &,bool = 0, + int = 1,const QBrush * = 0); + void drawSeparator(QPainter *,int,int,int,int,const QColorGroup &, + bool = 1,int = 1,int = 0); + void drawButton(QPainter *,int,int,int,int,const QColorGroup &,bool = 0, + const QBrush * = 0); + void drawBevelButton(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,const QBrush * = 0); + void drawPushButton(QPushButton *,QPainter *); + void drawArrow(QPainter *,ArrowType,bool,int,int,int,int, + const QColorGroup &,bool,const QBrush * = 0); + + QSize indicatorSize() const; + void drawIndicator(QPainter *,int,int,int,int,const QColorGroup &,int, + bool = 0,bool = 1); + void drawCheckMark(QPainter *,int,int,int,int,const QColorGroup &, + bool,bool); + void drawIndicatorMask(QPainter *,int,int,int,int,int); + + QSize exclusiveIndicatorSize() const; + void drawExclusiveIndicator(QPainter *,int,int,int,int, + const QColorGroup &,bool,bool = 0,bool = 1); + void drawExclusiveIndicatorMask(QPainter *,int,int,int,int,bool); + + void drawComboButton(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,bool = 0,bool = 1,const QBrush * = 0); + QRect comboButtonRect(int,int,int,int); + QRect comboButtonFocusRect(int,int,int,int); + + void scrollBarMetrics(const QScrollBar *,int &,int &,int &,int &); + + void drawScrollBarControls(QPainter *,const QScrollBar *,int,uint,uint); + + void drawSlider(QPainter *,int,int,int,int,const QColorGroup &, + Orientation,bool,bool); + void drawSliderMask(QPainter *,int,int,int,int,Orientation,bool,bool); + void drawSliderGroove(QPainter *,int,int,int,int,const QColorGroup &, + QCOORD,Orientation); + void drawSliderGrooveMask(QPainter *,int,int,int,int,QCOORD, + Orientation); + + void drawTab(QPainter *,const QTabBar *,QTab *,bool); + void drawTabMask(QPainter *,const QTabBar *,QTab *,bool); + + int splitterWidth() const; + void drawSplitter(QPainter *,int,int,int,int,const QColorGroup &, + Orientation); + + int popupMenuItemHeight(bool,QMenuItem *,const QFontMetrics &); + void drawPopupPanel(QPainter *,int,int,int,int,const QColorGroup &, + int = 2,const QBrush * = 0); + void drawPopupMenuItem(QPainter *,bool,int,int,QMenuItem *, + const QPalette &,bool,bool,int,int,int,int); + void drawMenuBarItem(QPainter *,int,int,int,int,QMenuItem *, + QColorGroup &,bool,bool); +%End +%If (Qt_3_0_0 -) + void drawPrimitive(PrimitiveElement,QPainter *,const QRect &, + const QColorGroup &,SFlags = Style_Default, + const QStyleOption & = QStyleOption()) const; + + void drawControl(ControlElement,QPainter *,const QWidget *, + const QRect &,const QColorGroup &, + SFlags = Style_Default, + const QStyleOption & = QStyleOption()) const; + + void drawComplexControl(ComplexControl,QPainter *,const QWidget *, + const QRect &,const QColorGroup &, + SFlags = Style_Default,SCFlags = SC_All, + SCFlags = SC_None, + const QStyleOption & = QStyleOption()) const; + + int pixelMetric(PixelMetric,const QWidget * = 0) const; + + QSize sizeFromContents(ContentsType,const QWidget *,const QSize &, + const QStyleOption & = QStyleOption()) const; + + QRect subRect(SubRect,const QWidget *) const; + + QRect querySubControlMetrics(ComplexControl,const QWidget *, + SubControl, + const QStyleOption & = QStyleOption()) const; +%End + +protected: + bool eventFilter(QObject *,QEvent *); + +private: + QSGIStyle(const QSGIStyle &); +}; + +%End +%End diff --git a/sip/qt/qsignalmapper.sip b/sip/qt/qsignalmapper.sip new file mode 100644 index 0000000..d587723 --- /dev/null +++ b/sip/qt/qsignalmapper.sip @@ -0,0 +1,51 @@ +// This is the SIP interface definition for QSignalMapper +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSignalMapper + +QSignalMapper is fully implemented. + + +%End + + +class QSignalMapper : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QSignalMapper(QObject * /TransferThis/,const char * = 0); + + virtual void setMapping(const QObject *,int); + virtual void setMapping(const QObject *,const QString &); + void removeMappings(const QObject *); + +signals: + void mapped(int); + void mapped(const QString &); + +public slots: + void map(); +}; diff --git a/sip/qt/qsimplerichtext.sip b/sip/qt/qsimplerichtext.sip new file mode 100644 index 0000000..7b189c3 --- /dev/null +++ b/sip/qt/qsimplerichtext.sip @@ -0,0 +1,91 @@ +// This is the SIP interface definition for QSimpleRichText. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSimpleRichText (Qt v2+) + +QSimpleRichText is fully implemented. + + +%End + + +%If (Qt_2_00 -) + +class QSimpleRichText +{ +%TypeHeaderCode +#include +%End + +public: + QSimpleRichText(const QString &,const QFont &, + const QString & = QString::null, + const QStyleSheet * = 0); +%If (Qt_2_1_0 -) + QSimpleRichText(const QString &,const QFont &,const QString &, + const QStyleSheet *,const QMimeSourceFactory *, + int = -1,const QColor & = Qt::blue,bool = 1); +%End + +%If (Qt_2_1_0 -) + void setWidth(int); +%End + void setWidth(QPainter *,int); +%If (Qt_3_0_0 -) + void setDefaultFont(const QFont &); +%End + int width() const; + int widthUsed() const; + int height() const; +%If (Qt_2_1_0 -) + void adjustSize(); +%End + +%If (- Qt_3_0_0) + void draw(QPainter *,int,int,const QRegion &,const QPalette &, + const QBrush * = 0) const; + void draw(QPainter *,int,int,const QRegion &,const QColorGroup &, + const QBrush * = 0) const; +%End +%If (Qt_3_0_0 -) + void draw(QPainter *,int,int,const QRect &,const QColorGroup &, + const QBrush * = 0) const; +%End + + QString context() const; +%If (- Qt_3_0_0) + QString anchor(QPainter *,const QPoint &); +%End +%If (Qt_2_1_0 -) + QString anchorAt(const QPoint &) const; + + bool inText(const QPoint &) const; +%End + +private: +%If (Qt_3_0_0 -) + QSimpleRichText(const QSimpleRichText &); +%End +}; + +%End diff --git a/sip/qt/qsize.sip b/sip/qt/qsize.sip new file mode 100644 index 0000000..d802413 --- /dev/null +++ b/sip/qt/qsize.sip @@ -0,0 +1,112 @@ +// This is the SIP interface definition for QSize. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSize + +The Python ++, +=, +-, -=, +*, *=, +/, /=, +==, != and __nonzero__ +operators are supported. + + + + QCOORD &rheight + + + +Not implemented. + + + + QCOORD &rwidth + + + +Not implemented. + + +%End + + +class QSize +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_1_0 -) + enum ScaleMode { + ScaleFree, + ScaleMin, + ScaleMax + }; +%End + + QSize(); + QSize(int,int); + + bool isNull() const; + bool isEmpty() const; + bool isValid() const; + + int width() const; + int height() const; + void setWidth(int); + void setHeight(int); + void transpose(); + +%If (Qt_3_1_0 -) + void scale(int,int,ScaleMode); + void scale(const QSize &,ScaleMode); +%End + + QSize expandedTo(const QSize &) const; + QSize boundedTo(const QSize &) const; +// QCOORD &rwidth(); +// QCOORD &rheight(); + + QSize &operator+=(const QSize &); + QSize &operator-=(const QSize &); + QSize &operator*=(int /Constrained/); + QSize &operator*=(double); + QSize &operator/=(int /Constrained/); + QSize &operator/=(double); + + int __nonzero__() const; +%MethodCode + sipRes = sipCpp -> isValid(); +%End +}; + +bool operator==(const QSize &,const QSize &); +bool operator!=(const QSize &,const QSize &); +const QSize operator+(const QSize &,const QSize &); +const QSize operator-(const QSize &,const QSize &); +const QSize operator*(const QSize &,int /Constrained/); +const QSize operator*(const QSize &,double); +const QSize operator/(const QSize &,int /Constrained/); +const QSize operator/(const QSize &,double); diff --git a/sip/qt/qsizegrip.sip b/sip/qt/qsizegrip.sip new file mode 100644 index 0000000..af21e94 --- /dev/null +++ b/sip/qt/qsizegrip.sip @@ -0,0 +1,60 @@ +// This is the SIP interface definition for QSizeGrip. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSizeGrip (Qt v2+) + +QSizeGrip is fully implemented. + + +%End + + +%If (Qt_2_00 -) +%If (Qt_SIZEGRIP) + +class QSizeGrip : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QSizeGrip(QWidget * /TransferThis/,const char * = 0); + + QSize sizeHint() const; +%If (- Qt_3_0_0) + QSizePolicy sizePolicy() const; +%End + +protected: + void paintEvent(QPaintEvent *); + void mousePressEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); + +%If (Qt_3_0_0 -) + bool eventFilter(QObject *,QEvent *); +%End +}; + +%End +%End diff --git a/sip/qt/qsizepolicy.sip b/sip/qt/qsizepolicy.sip new file mode 100644 index 0000000..c26b54a --- /dev/null +++ b/sip/qt/qsizepolicy.sip @@ -0,0 +1,103 @@ +// This is the SIP interface definition for QSizePolicy. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSizePolicy (Qt v2+) + +QSizePolicy is fully implemented. + + +%End + + +%If (Qt_2_00 -) + +class QSizePolicy +{ +%TypeHeaderCode +#include +%End + +public: + enum SizeType + { + Fixed, + Minimum, + Maximum, + Preferred, + MinimumExpanding, + Expanding, +%If (Qt_3_0_0 -) + Ignored +%End + }; + + enum ExpandData + { + NoDirection, +%If (Qt_3_0_0 -) + Horizontally, + Vertically, +%End +%If (- Qt_3_0_0) + Horizontal, + Vertical, +%End + BothDirections + }; + + QSizePolicy(); + QSizePolicy(SizeType,SizeType,bool = 0); +%If (Qt_3_0_0 -) + // Note that Qt defines the 2nd and 3rd parameters as uchar, but it's + // really using them as numbers, not characters. + QSizePolicy(SizeType,SizeType,uint,uint,bool = 0); +%End + + SizeType horData() const; + SizeType verData() const; + + bool mayShrinkHorizontally() const; + bool mayShrinkVertically() const; + bool mayGrowHorizontally() const; + bool mayGrowVertically() const; + + ExpandData expanding() const; + + void setHorData(SizeType); + void setVerData(SizeType); + + void setHeightForWidth(bool); + bool hasHeightForWidth() const; + +%If (Qt_3_0_0 -) + uint horStretch() const; + uint verStretch() const; + void setHorStretch(uint); + void setVerStretch(uint); +%End +%If (Qt_3_1_0 -) + void transpose(); +%End +}; + +%End diff --git a/sip/qt/qslider.sip b/sip/qt/qslider.sip new file mode 100644 index 0000000..9560216 --- /dev/null +++ b/sip/qt/qslider.sip @@ -0,0 +1,187 @@ +// This is the SIP interface definition for QSlider. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSlider + +QSlider is fully implemented. + + +%End + + +class QSlider : QWidget, QRangeControl +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + enum Orientation { + Horizontal, + Vertical + }; +%End + + enum TickSetting { + NoMarks = 0, + Above = 1, + Left = Above, + Below = 2, + Right = Below, + Both = 3 + }; + +%If (- Qt_2_00) + QSlider(QWidget * /TransferThis/ = 0,const char * = 0); + QSlider(Orientation,QWidget * /TransferThis/ = 0,const char * = 0); + QSlider(int,int,int,int,Orientation,QWidget * /TransferThis/ = 0,const char * = 0); +%End +%If (Qt_2_00 -) + QSlider(QWidget * /TransferThis/,const char * = 0); + QSlider(Orientation,QWidget * /TransferThis/,const char * = 0); + QSlider(int,int,int,int,Orientation,QWidget * /TransferThis/,const char * = 0); +%End + +%If (- Qt_2_00) + void setOrientation(Orientation); +%End +%If (Qt_2_00 -) + virtual void setOrientation(Orientation); +%End + Orientation orientation() const; +%If (- Qt_2_00) + void setTracking(bool); +%End +%If (Qt_2_00 -) + virtual void setTracking(bool); +%End + bool tracking() const; +%If (- Qt_2_00) + void setPalette(const QPalette &); +%End +%If (Qt_2_00 -) + virtual void setPalette(const QPalette &); +%End + +%If (Qt_3_0_0 -) + int sliderStart() const; +%End + QRect sliderRect() const; + QSize sizeHint() const; +%If (Qt_3_1_0 -) + void setSizePolicy(QSizePolicy); +%End +%If (Qt_3_2_0 -) + void setSizePolicy(QSizePolicy::SizeType,QSizePolicy::SizeType, + bool = 0); +%End +%If (Qt_2_00 -) + QSizePolicy sizePolicy() const; + QSize minimumSizeHint() const; +%End + + virtual void setTickmarks(TickSetting); + TickSetting tickmarks() const; + + virtual void setTickInterval(int); + int tickInterval() const; + +%If (Qt_2_1_0 -) + int minValue() const; + int maxValue() const; + void setMinValue(int); + void setMaxValue(int); + int lineStep() const; + int pageStep() const; + void setLineStep(int); + void setPageStep(int); + int value() const; +%End + +public slots: +%If (- Qt_2_00) + void setValue(int); +%End +%If (Qt_2_00 -) + virtual void setValue(int); +%End + void addStep(); + void subtractStep(); +%If (Qt_3_1_0 -) + void addLine(); + void subtractLine(); +%End + +signals: + void valueChanged(int); + void sliderPressed(); + void sliderMoved(int); + void sliderReleased(); + +protected: + void resizeEvent(QResizeEvent *); + void paintEvent(QPaintEvent *); + + void keyPressEvent(QKeyEvent *); + void mousePressEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseMoveEvent(QMouseEvent *); +%If (Qt_2_00 -) + void wheelEvent(QWheelEvent *); +%End + void focusInEvent(QFocusEvent *); +%If (Qt_2_00 -) + void focusOutEvent(QFocusEvent *); +%End + +%If (Qt_2_00 -) + void styleChange(QStyle &); +%End + + void valueChange(); + void rangeChange(); + +%If (- Qt_3_0_0) + void drawWinGroove(QPainter *,QCOORD); + void drawTicks(QPainter *,int,int,int = 1) const; + virtual int thickness() const; +%End + +%If (- Qt_2_00) + virtual void paintSlider(QPainter *,const QRect &); +%End +%If (Qt_2_00 - Qt_3_0_0) + void updateMask(); + virtual void paintSlider(QPainter *,const QColorGroup &,const QRect &); + void drawTicks(QPainter *,const QColorGroup &,int,int,int = 1) const; +%End + +private: +%If (Qt_2_00 -) + int positionFromValue(int) const; + int valueFromPosition(int) const; +%End + + QSlider(const QSlider &); +}; diff --git a/sip/qt/qsocketnotifier.sip b/sip/qt/qsocketnotifier.sip new file mode 100644 index 0000000..1f1527a --- /dev/null +++ b/sip/qt/qsocketnotifier.sip @@ -0,0 +1,66 @@ +// This is the SIP interface definition for QSocketNotifier. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSocketNotifier + +QSocketNotifier is fully implemented. + + +%End + + +class QSocketNotifier : QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Type { + Read, + Write, + Exception + }; + + QSocketNotifier(int,Type,QObject * /TransferThis/ = 0,const char * = 0); + + int socket() const; + Type type() const; + + bool isEnabled() const; +%If (- Qt_2_00) + void setEnabled(bool); +%End +%If (Qt_2_00 -) + virtual void setEnabled(bool); +%End + +signals: + void activated(int); + +protected: + bool event(QEvent *); + +private: + QSocketNotifier(const QSocketNotifier &); +}; diff --git a/sip/qt/qsound.sip b/sip/qt/qsound.sip new file mode 100644 index 0000000..8cdbb1b --- /dev/null +++ b/sip/qt/qsound.sip @@ -0,0 +1,69 @@ +// This is the SIP interface definition for QSound. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSound (Qt v2.2+) + +QSound is fully implemented. + + +%End + + +%If (Qt_SOUND) +%If (Qt_2_2_0 -) + +class QSound : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QSound(const QString &,QObject * /TransferThis/ = 0,const char * = 0); + +%If (- Qt_3_0_0) + static bool available(); +%End +%If (Qt_3_0_0 -) + static bool isAvailable(); +%End + static void play(const QString &); + +%If (Qt_3_0_0 -) + int loops() const; + int loopsRemaining() const; + void setLoops(int); + QString fileName() const; + + bool isFinished() const; +%End + +public slots: + void play(); +%If (Qt_3_0_0 -) + void stop(); +%End +}; + +%End +%End diff --git a/sip/qt/qspinbox.sip b/sip/qt/qspinbox.sip new file mode 100644 index 0000000..fad9621 --- /dev/null +++ b/sip/qt/qspinbox.sip @@ -0,0 +1,268 @@ +// This is the SIP interface definition for QSpinBox. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSpinBox + + virtual int mapTextToValue + bool *ok + + +This returns a tuple of the int result and the modified +ok value. + + +%End + + +%If (Qt_3_0_0 -) + +class QSpinBox : QWidget, QRangeControl +{ +%TypeHeaderCode +#include +%End + +public: + QSpinBox(QWidget * /TransferThis/ = 0,const char * = 0); + QSpinBox(int,int,int = 1,QWidget * /TransferThis/ = 0,const char * = 0); + + QString text() const; + + virtual QString prefix() const; + virtual QString suffix() const; + virtual QString cleanText() const; + + virtual void setSpecialValueText(const QString &); + QString specialValueText() const; + + virtual void setWrapping(bool); + bool wrapping() const; + + enum ButtonSymbols { + UpDownArrows, + PlusMinus + }; + + virtual void setButtonSymbols(ButtonSymbols); + ButtonSymbols buttonSymbols() const; + + virtual void setValidator(const QValidator *); + const QValidator *validator() const; + + QSize sizeHint() const; + QSize minimumSizeHint() const; + + int minValue() const; + int maxValue() const; + void setMinValue(int); + void setMaxValue(int); + int lineStep() const; + void setLineStep(int); + int value() const; + + QRect upRect() const; + QRect downRect() const; + +public slots: + virtual void setValue(int); + virtual void setPrefix(const QString &); + virtual void setSuffix(const QString &); + virtual void stepUp(); + virtual void stepDown(); + virtual void setEnabled(bool); + virtual void selectAll(); + +signals: + void valueChanged(int); + void valueChanged(const QString &); + +protected: + virtual QString mapValueToText(int); + virtual int mapTextToValue(bool *); + QString currentValueText(); + + virtual void updateDisplay(); + virtual void interpretText(); + + QLineEdit *editor() const; + + virtual void valueChange(); + virtual void rangeChange(); + + bool eventFilter(QObject *,QEvent *); + void resizeEvent(QResizeEvent *); + void wheelEvent(QWheelEvent *); + void leaveEvent(QEvent *); + + void styleChange(QStyle &); + +protected slots: + void textChanged(); + +private: + QSpinBox(const QSpinBox &); +}; + +%End + + +%If (- Qt_3_0_0) + +class QSpinBox : QFrame, QRangeControl +{ +%TypeHeaderCode +#include +%End + +public: + QSpinBox(QWidget * /TransferThis/ = 0,const char * = 0); + QSpinBox(int,int,int = 1,QWidget * /TransferThis/ = 0,const char * = 0); + +%If (- Qt_2_00) + const char *text() const; + + virtual const char *prefix() const; + virtual const char *suffix() const; +%End +%If (Qt_2_00 -) + QString text() const; + + virtual QString prefix() const; + virtual QString suffix() const; +%End + virtual QString cleanText() const; + +%If (- Qt_2_00) + void setSpecialValueText(const char *); + const char *specialValueText() const; + + void setWrapping(bool); +%End +%If (Qt_2_00 -) + virtual void setSpecialValueText(const QString &); + QString specialValueText() const; + + virtual void setWrapping(bool); +%End + bool wrapping() const; + +%If (Qt_2_1_0 -) + enum ButtonSymbols { + UpDownArrows, + PlusMinus + }; +%End + +%If (Qt_2_1_0 -) + void setButtonSymbols(ButtonSymbols); + ButtonSymbols buttonSymbols() const; +%End + +%If (- Qt_2_00) + void setValidator(QValidator *); +%End +%If (Qt_2_00 -) + virtual void setValidator(const QValidator *); + const QValidator *validator() const; +%End + + QSize sizeHint() const; +%If (Qt_2_00 -) + QSizePolicy sizePolicy() const; +%End + +%If (Qt_2_1_0 -) + int minValue() const; + int maxValue() const; + void setMinValue(int); + void setMaxValue(int); + int lineStep() const; + void setLineStep(int); + int value() const; +%End + +public slots: + virtual void setValue(int); +%If (- Qt_2_00) + virtual void setPrefix(const char *); + virtual void setSuffix(const char *); +%End +%If (Qt_2_00 -) + virtual void setPrefix(const QString &); + virtual void setSuffix(const QString &); +%End + virtual void stepUp(); + virtual void stepDown(); +%If (Qt_2_00 -) + virtual void setEnabled(bool); +%End + +signals: + void valueChanged(int); +%If (- Qt_2_00) + void valueChanged(const char *); +%End +%If (Qt_2_00 -) + void valueChanged(const QString &); +%End + +protected: + virtual QString mapValueToText(int); + virtual int mapTextToValue(bool *); + QString currentValueText(); + + virtual void updateDisplay(); + virtual void interpretText(); + + QPushButton *upButton() const; + QPushButton *downButton() const; + + QLineEdit *editor() const; + + virtual void valueChange(); + virtual void rangeChange(); + + bool eventFilter(QObject *,QEvent *); + void resizeEvent(QResizeEvent *); +%If (- Qt_2_00) + void paletteChange(const QPalette &); + void enabledChange(bool); + void fontChange(const QFont &); + void styleChange(GUIStyle); +%End +%If (Qt_2_00 -) + void wheelEvent(QWheelEvent *); + void styleChange(QStyle &); +%End +%If (Qt_2_1_0 -) + void leaveEvent(QEvent *); +%End + +protected slots: + void textChanged(); + +private: + QSpinBox(const QSpinBox &); +}; + +%End diff --git a/sip/qt/qsplashscreen.sip b/sip/qt/qsplashscreen.sip new file mode 100644 index 0000000..8277f11 --- /dev/null +++ b/sip/qt/qsplashscreen.sip @@ -0,0 +1,61 @@ +// This is the SIP interface definition for QSplashScreen. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSplashScreen (Qt v3.2.0+) + +QSplashScreen is fully implemented. + + +%End + + +%If (Qt_3_2_0 -) + +class QSplashScreen : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QSplashScreen(const QPixmap & = QPixmap(),WFlags = 0); + virtual ~QSplashScreen(); + + void setPixmap(const QPixmap &); + QPixmap *pixmap() const; + void finish(QWidget *); + void repaint(); + +public slots: + void message(const QString &,int = AlignLeft,const QColor & = Qt::black); + void clear(); + +signals: + void messageChanged(const QString &); + +protected: + virtual void drawContents(QPainter *); + void mousePressEvent(QMouseEvent *); +}; + +%End diff --git a/sip/qt/qsplitter.sip b/sip/qt/qsplitter.sip new file mode 100644 index 0000000..167f8fc --- /dev/null +++ b/sip/qt/qsplitter.sip @@ -0,0 +1,160 @@ +// This is the SIP interface definition for QSplitter. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSplitter + + void getRange + int id + int *min + int *max + + +This takes the id parameter and returns the +min and max values as a tuple. (Qt v2+) + + +%End + + +%If (Qt_SPLITTER) + +class QSplitter : QFrame +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + enum Orientation { + Horizontal, + Vertical + }; +%End + + enum ResizeMode { + Stretch, + KeepSize, +%If (Qt_2_1_0 -) + FollowSizeHint, +%End +%If (Qt_3_1_0 -) + Auto +%End + }; + + QSplitter(QWidget * /TransferThis/ = 0,const char * = 0); + QSplitter(Orientation,QWidget * /TransferThis/ = 0,const char * = 0); + +%If (- Qt_2_00) + void setOrientation(Orientation); +%End +%If (Qt_2_00 -) + virtual void setOrientation(Orientation); +%End + Orientation orientation() const; + +%If (Qt_3_2_0 -) + void setChildrenCollapsible(bool); + bool childrenCollapsible() const; + + void setCollapsible(QWidget *,bool); +%End + +%If (- Qt_2_00) + void setResizeMode(QWidget *,ResizeMode); + void setOpaqueResize(bool = 1); +%End +%If (Qt_2_00 -) + virtual void setResizeMode(QWidget *,ResizeMode); + virtual void setOpaqueResize(bool = 1); +%End + bool opaqueResize() const; + + void moveToFirst(QWidget *); + void moveToLast(QWidget *); + + void refresh(); +%If (Qt_2_00 -) + QSize sizeHint() const; + QSize minimumSizeHint() const; +%End +%If (Qt_2_00 - Qt_3_0_0) + QSizePolicy sizePolicy() const; +%End + +%If (Qt_2_00 -) + QValueList sizes() const; + void setSizes(QValueList); +%End + +%If (Qt_3_2_0 -) + int handleWidth() const; + void setHandleWidth(int); +%End + +%If (- Qt_2_00) + bool event(QEvent *); +%End + +protected: +%If (Qt_2_00 -) + void childEvent(QChildEvent *); + + bool event(QEvent *); +%End + void resizeEvent(QResizeEvent *); + +%If (- Qt_2_00) + void childInsertEvent(QChildEvent *); + void childRemoveEvent(QChildEvent *); + void layoutHintEvent(QEvent *); + + void moveSplitter(QCOORD); +%End +%If (Qt_2_00 -) + int idAfter(QWidget *) const; + + void moveSplitter(QCOORD,int); +%End + virtual void drawSplitter(QPainter *,QCOORD,QCOORD,QCOORD,QCOORD); +%If (Qt_2_1_0 -) + void styleChange(QStyle &); +%End +%If (- Qt_2_00) + int adjustPos(int); + void setRubberband(int); +%End +%If (Qt_2_00 -) + int adjustPos(int,int); + virtual void setRubberband(int); + void getRange(int,int *,int *); +%End + +private: +%If (Qt_2_1_0 -) + QSplitter(const QSplitter &); +%End +}; + +%End diff --git a/sip/qt/qstatusbar.sip b/sip/qt/qstatusbar.sip new file mode 100644 index 0000000..4e1f704 --- /dev/null +++ b/sip/qt/qstatusbar.sip @@ -0,0 +1,94 @@ +// This is the SIP interface definition for QStatusBar. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QStatusBar + +QStatusBar is fully implemented. + + +%End + + +class QStatusBar : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QStatusBar(QWidget * /TransferThis/ = 0,const char * = 0); + +%If (- Qt_2_1_0) + void addWidget(QWidget * /Transfer/,int,bool = 0); +%End +%If (Qt_2_1_0 - Qt_3_0_0) + void addWidget(QWidget * /Transfer/,int = 0,bool = 0); +%End +%If (Qt_3_0_0 -) + virtual void addWidget(QWidget * /Transfer/,int = 0,bool = 0); +%End +%If (- Qt_3_0_0) + void removeWidget(QWidget * /TransferBack/); +%End +%If (Qt_3_0_0 -) + virtual void removeWidget(QWidget * /TransferBack/); +%End + +%If (Qt_2_1_0 -) + void setSizeGripEnabled(bool); + bool isSizeGripEnabled() const; +%End + +public slots: +%If (- Qt_2_00) + void message(const char *); + void message(const char *,int); +%End +%If (Qt_2_00 -) + void message(const QString &); + void message(const QString &,int); +%End + void clear(); + +signals: +%If (Qt_3_1_0 -) + void messageChanged(const QString &); +%End + +protected: + void paintEvent(QPaintEvent *); +%If (Qt_2_1_0 -) + void resizeEvent(QResizeEvent *); +%End + + void reformat(); + void hideOrShow(); +%If (Qt_2_1_0 -) + bool event(QEvent *); +%End + +private: +%If (Qt_2_1_0 -) + QStatusBar(const QStatusBar &); +%End +}; diff --git a/sip/qt/qstring.sip b/sip/qt/qstring.sip new file mode 100644 index 0000000..f0097f4 --- /dev/null +++ b/sip/qt/qstring.sip @@ -0,0 +1,1079 @@ +// This is the SIP interface definition for QChar and QString. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QChar (Qt v2+) + + uchar &cell const + + + +Not implemented. + + + + uchar &row const + + + +Not implemented. + + + +QString + +A Python string object (or Unicode object) can be used whenever a +QString can be used. A QString can be +converted to a Python string object using the Python str() +function, and to a Python Unicode object using the Python +unicode() function. + + + +The Python +, +=, *, +*=, len, [] +(for reading slices and individual characters), in and +comparison operators are supported. + + + + QCharRef at + uint i + + +Not yet implemented. (Qt v2+) + + + + QChar constref const + uint i + + +Not yet implemented. (Qt v2+) + + + + QChar &ref + uint i + + +Not yet implemented. (Qt v2+) + + + + QString &setUnicodeCodes + const ushort *unicode_as_shorts + uint len + + +Not yet implemented. (Qt v2.1+) + + + + QString &sprintf + const char *format + ... + + +Not implemented. + + + + short toShort + bool *ok = 0 + + +This returns a tuple of the short result and the +ok value. + + + + ushort toUShort + bool *ok = 0 + + +This returns a tuple of the ushort result and the +ok value. + + + + int toInt + bool *ok = 0 + + +This returns a tuple of the int result and the +ok value. + + + + uint toUInt + bool *ok = 0 + + +This returns a tuple of the uint result and the +ok value. + + + + long toLong + bool *ok = 0 + + +This returns a tuple of the long result and the +ok value. + + + + ulong toULong + bool *ok = 0 + + +This returns a tuple of the ulong result and the +ok value. + + + + float toFloat + bool *ok = 0 + + +This returns a tuple of the float result and the +ok value. + + + + double toDouble + bool *ok = 0 + + +This returns a tuple of the double result and the +ok value. + + +%End + + +%If (Qt_2_00 -) + +class QChar +{ +%TypeHeaderCode +#include +%End + +public: + QChar(); + QChar(char); +// QChar(uchar); + QChar(uchar,uchar); + QChar(const QChar &); +// QChar(ushort); +// QChar(short); +// QChar(uint); + QChar(int); + + static const QChar null; + static const QChar replacement; + static const QChar byteOrderMark; + static const QChar byteOrderSwapped; +%If (Qt_2_2_0 -) + static const QChar nbsp; +%End + +%If (- Qt_3_0_0) + enum Category { + NoCategory, + + Mark_NonSpacing, + Mark_SpacingCombining, + Mark_Enclosing, + + Number_DecimalDigit, + Number_Letter, + Number_Other, + + Separator_Space, + Separator_Line, + Separator_Paragraph, + + Other_Control, + Other_Format, + Other_Surrogate, + Other_PrivateUse, + Other_NotAssigned, + + Letter_Uppercase, + Letter_Lowercase, + Letter_Titlecase, + Letter_Modifier, + Letter_Other, + + Punctuation_Connector, + Punctuation_Dask, + Punctuation_Open, + Punctuation_Close, + Punctuation_InitialQuote, + Punctuation_FinalQuote, + Punctuation_Other, + + Symbol_Math, + Symbol_Currency, + Symbol_Modifier, + Symbol_Other + }; +%End +%If (Qt_3_0_0 -) + enum Category { + NoCategory, + + Mark_NonSpacing, + Mark_SpacingCombining, + Mark_Enclosing, + + Number_DecimalDigit, + Number_Letter, + Number_Other, + + Separator_Space, + Separator_Line, + Separator_Paragraph, + + Other_Control, + Other_Format, + Other_Surrogate, + Other_PrivateUse, + Other_NotAssigned, + + Letter_Uppercase, + Letter_Lowercase, + Letter_Titlecase, + Letter_Modifier, + Letter_Other, + + Punctuation_Connector, + Punctuation_Dash, + Punctuation_Open, + Punctuation_Close, + Punctuation_InitialQuote, + Punctuation_FinalQuote, + Punctuation_Other, + + Symbol_Math, + Symbol_Currency, + Symbol_Modifier, + Symbol_Other + }; +%End + +%If (- Qt_3_0_0) + enum Direction { + DirL, + DirR, + DirEN, + DirES, + DirET, + DirAN, + DirCS, + DirB, + DirS, + DirWS, + DirON + }; +%End +%If (Qt_3_0_0 -) + enum Direction { + DirL, + DirR, + DirEN, + DirES, + DirET, + DirAN, + DirCS, + DirB, + DirS, + DirWS, + DirON, + DirLRE, + DirLRO, + DirAL, + DirRLE, + DirRLO, + DirPDF, + DirNSM, + DirBN + }; +%End + + enum Decomposition { + Single, + Canonical, + Font, + NoBreak, + Initial, + Medial, + Final, + Isolated, + Circle, + Super, + Sub, + Vertical, + Wide, + Narrow, + Small, + Square, + Compat, + Fraction + }; + + enum Joining { + OtherJoining, + Dual, + Right, + Center + }; + +%If (Qt_3_0_0 -) + enum CombiningClass { + Combining_BelowLeftAttached, + Combining_BelowAttached, + Combining_BelowRightAttached, + Combining_LeftAttached, + Combining_RightAttached, + Combining_AboveLeftAttached, + Combining_AboveAttached, + Combining_AboveRightAttached, + + Combining_BelowLeft, + Combining_Below, + Combining_BelowRight, + Combining_Left, + Combining_Right, + Combining_AboveLeft, + Combining_Above, + Combining_AboveRight, + + Combining_DoubleBelow, + Combining_DoubleAbove, + Combining_IotaSubscript + }; +%End + + int digitValue() const; + QChar lower() const; + QChar upper() const; + + Category category() const; + Direction direction() const; + Joining joining() const; + bool mirrored() const; +%If (Qt_2_1_0 -) + QChar mirroredChar() const; +%End +%If (- Qt_3_0_0) + QString decomposition() const; +%End +%If (Qt_3_0_0 -) + const QString &decomposition() const; +%End + Decomposition decompositionTag() const; +%If (Qt_3_0_0 -) + unsigned char combiningClass() const; +%End + + char latin1() const; + ushort unicode() const; + + bool isNull() const; + bool isPrint() const; + bool isPunct() const; + bool isSpace() const; + bool isMark() const; + bool isLetter() const; + bool isNumber() const; +%If (Qt_2_1_0 -) + bool isLetterOrNumber() const; +%End + bool isDigit() const; +%If (Qt_3_0_0 -) + bool isSymbol() const; +%End + +// uchar& cell(); +// uchar& row(); + uchar cell() const; + uchar row() const; +%If (Qt_3_0_0 -) + void setCell(uchar); + void setRow(uchar); +%End + + static bool networkOrdered(); +}; + +bool operator==(QChar,char); +bool operator==(QChar,QChar); +bool operator!=(QChar,QChar); +bool operator!=(QChar,char); +bool operator<=(QChar,char); +bool operator<=(QChar,QChar); +bool operator>=(QChar,char); +bool operator>=(QChar,QChar); +bool operator<(QChar,char); +bool operator<(QChar,QChar); +bool operator>(QChar,char); +bool operator>(QChar,QChar); + + +class QString +{ +%TypeHeaderCode +#include +%End + +public: + QString(); + QString(QChar); + QString(const QString &); + QString(const QByteArray &); +// QString(const QChar *,uint); +// QString(const char *); + +%If (Qt_2_1_0 -) + // This is how we implement QUrl::operator QString() const. + QString(const QUrl &); +%End + +%If (Qt_3_0_0 -) + // This is how we implement QKeySequence::operator QString() const. + QString(const QKeySequence &); + + // This is how we implement QUuid::operator QString() const. + QString(const QUuid &); +%End + + static const QString null; + + bool isNull() const; + bool isEmpty() const; + uint length() const; + void truncate(uint); +%If (- Qt_3_0_0) + void fill(QChar,int = -1); +%End +%If (Qt_3_0_0 -) + QString &fill(QChar,int = -1); +%End + QString copy() const; + + QString arg(int /Constrained/,int = 0,int = 10) const; + QString arg(double /Constrained/,int = 0,char = 'g',int = -1) const; +%If (Qt_3_2_0 -) +// QString arg(Q_LLONG,int = 0,int = 10) const; +// QString arg(Q_ULLONG,int = 0,int = 10) const; +%End + QString arg(long,int = 0,int = 10) const; + QString arg(ulong,int = 0,int = 10) const; +// QString arg(uint,int = 0,int = 10) const; +// QString arg(short,int = 0,int = 10) const; +// QString arg(ushort,int = 0,int = 10) const; + QString arg(char,int = 0) const; + QString arg(QChar,int = 0) const; + QString arg(const QString&,int = 0) const; +%If (Qt_3_2_0 -) + QString arg(const QString &,const QString &) const; + QString arg(const QString &,const QString &,const QString &) const; + QString arg(const QString &,const QString &,const QString &, + const QString &) const; +%End + +// QString &sprintf(const char *,...); + + int find(QChar,int = 0,bool = 1) const; + int find(char,int = 0,bool = 1) const; + int find(const QString &,int = 0,bool = 1) const; + int find(const QRegExp &,int = 0) const; +// int find(const char *,int = 0) const; + int findRev(QChar,int = -1,bool = 1) const; + int findRev(char,int = -1,bool = 1) const; + int findRev(const QString &,int = -1,bool = 1) const; + int findRev(const QRegExp &,int = -1) const; +// int findRev(const char *,int = -1) const; + int contains(QChar,bool = 1) const; + int contains(char,bool = 1) const; +// int contains(const char *,bool = 1) const; + int contains(const QString &,bool = 1) const; + int contains(const QRegExp &) const; + +%If (Qt_3_0_0 -) + enum SectionFlags { + SectionDefault, + SectionSkipEmpty, + SectionIncludeLeadingSep, + SectionIncludeTrailingSep, + SectionCaseInsensitiveSeps + }; + + QString section(QChar,int,int = 0xffffffff,int = SectionDefault) const; +// QString section(char,int,int = 0xffffffff,int = SectionDefault) const; +// QString section(const char *,int,int = 0xffffffff, +// int = SectionDefault) const; + QString section(const QString &,int,int = 0xffffffff, + int = SectionDefault) const; + QString section(const QRegExp &,int,int = 0xffffffff, + int = SectionDefault) const; +%End + + QString left(uint) const; + QString right(uint) const; + QString mid(uint,uint = 0xffffffff) const; + QString leftJustify(uint,QChar = ' ',bool = 0) const; + QString rightJustify(uint,QChar = ' ',bool = 0) const; + QString lower() const; + QString upper() const; + QString stripWhiteSpace() const; + QString simplifyWhiteSpace() const; + + QString &insert(uint,const QString &); +%If (Qt_3_2_0 -) + QString &insert(uint,const QByteArray &); +// QString &insert(uint,const char *); +%End + QString &insert(uint,QChar *,uint); + QString &insert(uint,QChar); + QString &insert(uint,char); + + QString &append(char); +%If (Qt_2_2_0 -) + QString &append(QChar); +%End + QString &append(const QString &); + QString &prepend(char); +%If (Qt_2_2_0 -) + QString &prepend(QChar); +%End + QString &prepend(const QString &); + QString &remove(uint,uint); +%If (Qt_3_1_0 -) + QString &remove(const QString &); +%If (Qt_3_2_0 -) + QString &remove(const QString &,bool); +%End + QString &remove(QChar); + QString &remove(char); + QString &remove(const QRegExp &); +%End + QString &replace(uint,uint,const QString &); + QString &replace(uint,uint,const QChar *,uint); +%If (Qt_3_1_0 -) + QString &replace(uint,uint,QChar); + QString &replace(uint,uint,char); + QString &replace(QChar,const QString &); +%If (Qt_3_2_0 -) + QString &replace(QChar,const QString &,bool); +%End + QString &replace(char,const QString &); +%If (Qt_3_2_0 -) + QString &replace(char,const QString &,bool); +%End + QString &replace(const QString &,const QString &); +%If (Qt_3_2_0 -) + QString &replace(const QString &,const QString &,bool); +%End +%End + QString &replace(const QRegExp &,const QString &); +%If (Qt_3_1_0 -) + QString &replace(QChar,QChar); +%End + + short toShort(bool * = 0,int = 10) const; + ushort toUShort(bool * = 0,int = 10) const; + int toInt(bool * = 0,int = 10) const; + uint toUInt(bool * = 0,int = 10) const; + long toLong(bool * = 0,int = 10) const; + ulong toULong(bool * = 0,int = 10) const; +%If (Qt_3_2_0 -) +// Q_LLONG toLongLong(bool * = 0,int = 10) const; +// Q_ULLONG toULongLong(bool * = 0,int = 10) const; +%End + float toFloat(bool * = 0) const; + double toDouble(bool * = 0) const; + + QString &setNum(int /Constrained/,int = 10); + QString &setNum(double /Constrained/,char = 'g',int = 6); +// QString &setNum(short,int = 10); +// QString &setNum(ushort,int = 10); +// QString &setNum(uint,int = 10); + QString &setNum(long,int = 10); + QString &setNum(ulong,int = 10); +%If (Qt_3_2_0 -) +// QString &setNum(Q_LLONG,int = 10); +// QString &setNum(Q_ULLONG,int = 10); +%End +// QString &setNum(float,char = 'g',int = 6); + + static QString number(int /Constrained/,int = 10); + static QString number(double /Constrained/,char = 'g',int = 6); + static QString number(long,int = 10); + static QString number(ulong,int = 10); +%If (Qt_3_2_0 -) +// static QString number(Q_LLONG,int = 10); +// static QString number(Q_ULLONG,int = 10); +%End +// static QString number(uint,int = 10); + + void setExpand(uint,QChar); + + QString &operator+=(const QString &); +%If (Qt_3_3_0 -) + QString &operator+=(const QByteArray &); +%End + QString &operator+=(QChar); + //QString &operator+=(char); + + QString operator*(int); +%MethodCode + sipRes = new QString(); + + while (a0-- > 0) + *sipRes += *sipCpp; +%End + + QString &operator*=(int); +%MethodCode + QString orig(*sipCpp); + + sipCpp -> truncate(0); + + while (a0-- > 0) + *sipCpp += orig; +%End + + QChar at(uint) const; +// QCharRef at(uint); +// QChar constref(uint) const; +// QChar &ref(uint); +// const QChar *unicode() const; + const char *ascii() const; +%If (Qt_3_1_0 -) + static QString fromAscii(const char *,int = -1); +%End + const char *latin1() const; + static QString fromLatin1(const char *,int = -1); + QCString utf8() const; + static QString fromUtf8(const char *,int = -1); + QCString local8Bit() const; + static QString fromLocal8Bit(const char *,int = -1); + +%If (Qt_3_1_0 -) +// static QString fromUcs2(const unsigned short *); +// const unsigned short *ucs2() const; +%End + +%If (Qt_2_1_0 -) +// QString &setUnicode(const QChar *,uint); +// QString &setUnicodeCodes(const ushort *,uint); +%End +%If (Qt_3_1_0 -) + QString &setAscii(const char *,int = -1); +%End +%If (Qt_2_1_0 -) + QString &setLatin1(const char *,int = -1); +%End + + int compare(const QString &) const; + static int compare(const QString &,const QString &); + +%If (Qt_3_0_0 -) + int localeAwareCompare(const QString &) const; + static int localeAwareCompare(const QString &,const QString &); +%End + + void compose(); +%If (- Qt_3_0_0) + QChar::Direction basicDirection(); + QString visual(int = 0,int = -1); +%End +%If (Qt_2_2_0 -) + bool startsWith(const QString &) const; +%End +%If (Qt_3_2_0 -) + bool startsWith(const QString &,bool) const; +%End +%If (Qt_3_0_0 -) + bool endsWith(const QString &) const; +%End +%If (Qt_3_2_0 -) + bool endsWith(const QString &,bool) const; +%End + +%If (Qt_3_0_0 -) + void setLength(uint); +%End + +%If (Qt_3_2_0 -) + uint capacity() const; + void reserve(uint); + void squeeze(); +%End + +%If (Qt_3_0_0 -) + bool simpleText() const; + bool isRightToLeft() const; +%End + + // Force the numeric interpretation so that str + QString gets handled + // as we want. + const QString operator+(const QString &) /Numeric/; + + QString operator[](int) const; +%MethodCode + int len; + + len = sipCpp -> length(); + + if ((a0 = (int)sipConvertFromSequenceIndex(a0,len)) < 0) + sipIsErr = 1; + else + sipRes = new QString(sipCpp -> at(a0)); +%End + + QString operator[](SIP_PYSLICE) const; +%MethodCode +#if PY_VERSION_HEX >= 0x02050000 + Py_ssize_t len, start, stop, step, slicelength, i; +#else + int len, start, stop, step, slicelength, i; +#endif + + len = sipCpp -> length(); + + if (sipConvertFromSliceObject(a0,len,&start,&stop,&step,&slicelength) < 0) + sipIsErr = 1; + else + { + sipRes = new QString(); + + for (i = 0; i < slicelength; ++i) + { + sipRes -> append(sipCpp -> at(start)); + start += step; + } + } +%End + + int __len__() const; +%MethodCode + sipRes = sipCpp -> length(); +%End + + int __contains__(const QString &) const; +%MethodCode + sipRes = (sipCpp -> contains(*a0) > 0); +%End + + SIP_PYOBJECT __unicode__(); +%MethodCode +#if PY_VERSION_HEX >= 0x01060000 + sipRes = QStringToPyUnicode(sipCpp); +#else + Py_INCREF(Py_None); + sipRes = Py_None; +#endif +%End + + SIP_PYOBJECT __str__(); +%MethodCode +#if PY_VERSION_HEX >= 0x01060000 + sipRes = QStringToPyUnicode(sipCpp); +#else + const char *s; + + Py_BEGIN_ALLOW_THREADS + s = *sipCpp; + Py_END_ALLOW_THREADS + + if (s == NULL) + s = ""; + + sipRes = PyString_FromString(s); +#endif +%End + +%TypeCode +#include + +#if PY_VERSION_HEX >= 0x01060000 +// Convenience function for converting a QString to a Python Unicode object. +static PyObject *QStringToPyUnicode(QString *qs) +{ + PyObject *uobj; + + if ((uobj = PyUnicode_FromUnicode(NULL,qs -> length())) == NULL) + return NULL; + + Py_UNICODE *pyu = PyUnicode_AS_UNICODE(uobj); + + for (uint i = 0; i < qs -> length(); ++i) + *pyu++ = (qs -> at(i)).unicode(); + + return uobj; +} +#endif + +// Convenience function for converting a Python unicode or string object to a +// QString on the heap. +static QString *PyUnicodeStringToQString(PyObject *py) +{ +#if PY_VERSION_HEX >= 0x01060000 + if (PyUnicode_Check(py)) + { + QString *qs = new QString; + +#if defined(Py_UNICODE_WIDE) + PY_UNICODE_TYPE *ucode = PyUnicode_AS_UNICODE(py); + int len = PyUnicode_GET_SIZE(py); + + for (int i = 0; i < len; ++i) + qs->ref(i) = (uint)ucode[i]; +#else + qs -> setUnicodeCodes((ushort *)PyUnicode_AS_UNICODE(py),PyUnicode_GET_SIZE(py)); +#endif + + return qs; + } +#endif + + if (PyString_Check(py)) + return new QString(PyString_AS_STRING(py)); + + return 0; +} +%End + +%ConvertToTypeCode + // Allow a Python string (or a unicode string) whenever a QString is + // expected. + + if (sipIsErr == NULL) + return (PyString_Check(sipPy) || +#if PY_VERSION_HEX >= 0x01060000 + PyUnicode_Check(sipPy) || +#endif + sipCanConvertToInstance(sipPy,sipClass_QString,SIP_NO_CONVERTORS)); + + *sipCppPtr = PyUnicodeStringToQString(sipPy); + + if (*sipCppPtr) + return sipGetState(sipTransferObj); + + *sipCppPtr = reinterpret_cast(sipConvertToInstance(sipPy,sipClass_QString,sipTransferObj,SIP_NO_CONVERTORS,0,sipIsErr)); + + return 0; +%End + +%BIGetReadBufferCode + if (sipSegment != 0) + { + PyErr_SetString(PyExc_SystemError, "accessing non-existent QString segment"); + sipRes = -1; + } + else + { + *sipPtrPtr = (void *)sipCpp->ucs2(); + sipRes = sipCpp->length() * sizeof (ushort); + } +%End + +%BIGetSegCountCode + if (sipLenPtr) + *sipLenPtr = sipCpp->length() * sizeof (ushort); + + sipRes = 1; +%End + +%BIGetCharBufferCode + if (sipSegment != 0) + { + PyErr_SetString(PyExc_SystemError, "accessing non-existent QString segment"); + sipRes = -1; + } + else + { + static QTextCodec *codec = 0; + static bool check_codec = TRUE; + + // For the first time only, try and find a Qt codec that + // corresponds to the default Python codec. If one wasn't + // found then fall back to ASCII (which is actually the codec + // returned by QTextCodec::codecForCStrings()). + if (check_codec) + { + codec = QTextCodec::codecForName(PyUnicode_GetDefaultEncoding()); + check_codec = FALSE; + } + + if (codec) + { + // A Python string is the most convenient method to + // save the encoded version on the heap. + PyObject *encobj = ((sipSimpleWrapper *)sipSelf)->user; + QCString enc; + + Py_XDECREF(encobj); + + enc = codec->fromUnicode(*sipCpp); + + if ((encobj = PyString_FromString(enc.data())) != NULL) + { + *sipPtrPtr = (void *)PyString_AS_STRING(encobj); + sipRes = PyString_GET_SIZE(encobj); + + ((sipSimpleWrapper *)sipSelf)->user = encobj; + } + else + sipRes = -1; + } + else + { + const char *asc = sipCpp->ascii(); + + *sipPtrPtr = (void *)asc; + sipRes = qstrlen(asc); + } + } +%End +}; + +bool operator==(const QString &,const QString &); +bool operator!=(const QString &,const QString &); +bool operator<(const QString &,const QString &); +bool operator<=(const QString &,const QString &); +bool operator>(const QString &,const QString &); +bool operator>=(const QString &,const QString &); + +%End + + +%If (- Qt_2_00) + +class QString : QByteArray +{ +%TypeHeaderCode +#include +%End + +public: + QString(); + QString(int); + QString(const QString &); + QString(const char *); + QString(const char *,uint); + + bool isNull() const; + bool isEmpty() const; + uint length() const; + bool resize(uint); + bool truncate(uint); + bool fill(char,int = -1); + QString copy() const; +// QString &sprintf(const char *,...); + int find(char,int = 0,bool = 1) const; + int find(const char *,int = 0,bool = 1) const; + int find(const QRegExp &,int = 0) const; + int findRev(char,int = -1,bool = 1) const; + int findRev(const char *,int = -1,bool = 1) const; + int findRev(const QRegExp &,int = -1) const; + int contains(char,bool = 1) const; + int contains(const char *,bool = 1) const; + int contains(const QRegExp &) const; + QString left(uint) const; + QString right(uint) const; + QString mid(uint,uint) const; + QString leftJustify(uint,char = ' ',bool = 0) const; + QString rightJustify(uint,char = ' ',bool = 0) const; + QString lower() const; + QString upper() const; + QString stripWhiteSpace() const; + QString simplifyWhiteSpace() const; + QString &insert(uint,const char *); + QString &insert(uint,char); + QString &append(const char *); + QString &prepend(const char *); + QString &remove(uint,uint); + QString &replace(uint,uint,const char *); + QString &replace(const QRegExp &,const char *); + + short toShort(bool * = 0) const; + ushort toUShort(bool * = 0) const; + int toInt(bool * = 0) const; + uint toUInt(bool * = 0) const; + long toLong(bool * = 0) const; + ulong toULong(bool * = 0) const; + float toFloat(bool * = 0) const; + double toDouble(bool * = 0) const; + + QString &setStr(const char *); +// QString &setNum(short); +// QString &setNum(ushort); + QString &setNum(int /Constrained/); +// QString &setNum(uint); +// QString &setNum(long); +// QString &setNum(ulong); +// QString &setNum(float,char = 'g',int = 6); + QString &setNum(double,char = 'g',int = 6); + bool setExpand(uint,char); + + SIP_PYOBJECT __str__(); +%MethodCode + const char *s; + + Py_BEGIN_ALLOW_THREADS + s = *sipCpp; + Py_END_ALLOW_THREADS + + if (s == NULL) + s = ""; + + sipRes = PyString_FromString(s); +%End + +%ConvertToTypeCode + // Allow a Python string whenever a QString is expected. + + if (sipIsErr == NULL) + return (PyString_Check(sipPy) || + sipCanConvertToInstance(sipPy,sipClass_QString,SIP_NO_CONVERTORS)); + + if (PyString_Check(sipPy)) + { + *sipCppPtr = new QString(PyString_AS_STRING(sipPy)); + + return sipGetState(sipTransferObj); + } + + *sipCppPtr = reinterpret_cast(sipConvertToInstance(sipPy,sipClass_QString,sipTransferObj,SIP_NO_CONVERTORS,0,sipIsErr)); + + return 0; +%End +}; + +%End diff --git a/sip/qt/qstringlist.sip b/sip/qt/qstringlist.sip new file mode 100644 index 0000000..d95034c --- /dev/null +++ b/sip/qt/qstringlist.sip @@ -0,0 +1,247 @@ +// This is the SIP interface definition for QStringList. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QStringList (Qt v2+) + +The Python len, [] (for both reading and +writing slices and individual elements), del (for deleting +slices and individual elements), +, +=, +*, *=, ==, +!= and in operators are supported. + + + + Iterator append + const QString &x + + +This does not return a value. + + + + Iterator prepend + const QString &x + + +This does not return a value. + + +%End + + +%If (Qt_2_00 -) + +class QStringList +{ +%TypeHeaderCode +#include +%End + +public: + QStringList(); + QStringList(const QStringList &); + QStringList(const QString &); + + void sort(); +%If (Qt_2_1_0 -) + static QStringList fromStrList(const QStrList &); + static QStringList split(const QString &,const QString &,bool = 0); + static QStringList split(const QChar &,const QString &,bool = 0); + static QStringList split(const QRegExp &,const QString &,bool = 0); + QString join(const QString &) const; + QStringList grep(const QString &,bool = 1) const; + QStringList grep(const QRegExp &) const; +%End + +%If (Qt_3_2_0 -) + QStringList &gres(const QString &,const QString &,bool = 1); + QStringList &gres(const QRegExp &,const QString &); +%End + + // These are actually in QValueList, which isn't implemented so + // pretend they are here. + + bool isEmpty() const; + void append(const QString &); + void prepend(const QString &); + void remove(const QString &); + const QString &first() const; + const QString &last() const; + int findIndex(const QString &) const; + uint contains(const QString &) const; + uint count() const; + void clear(); + + int __len__(); +%MethodCode + sipRes = sipCpp -> count(); +%End + + void __setitem__(int,const QString &); +%MethodCode + int len; + + len = sipCpp -> count(); + + if ((a0 = (int)sipConvertFromSequenceIndex(a0,len)) < 0) + sipIsErr = 1; + else + (*sipCpp)[a0] = *a1; +%End + + void __setitem__(SIP_PYSLICE,const QStringList &); +%MethodCode +#if PY_VERSION_HEX >= 0x02050000 + Py_ssize_t len, start, stop, step, slicelength, i; +#else + int len, start, stop, step, slicelength, i; +#endif + + len = sipCpp -> count(); + + if (sipConvertFromSliceObject(a0,len,&start,&stop,&step,&slicelength) < 0) + sipIsErr = 1; + else + { + int vlen = a1 -> count(); + + if (vlen != slicelength) + { + sipBadLengthForSlice(vlen,slicelength); + sipIsErr = 1; + } + else + { + QStringList::ConstIterator it = a1 -> begin(); + + for (i = 0; i < slicelength; ++i) + { + (*sipCpp)[start] = *it; + start += step; + ++it; + } + } + } +%End + + void __delitem__(int); +%MethodCode + int len; + + len = sipCpp -> count(); + + if ((a0 = (int)sipConvertFromSequenceIndex(a0,len)) < 0) + sipIsErr = 1; + else + sipCpp -> remove(sipCpp -> at(a0)); +%End + + void __delitem__(SIP_PYSLICE); +%MethodCode +#if PY_VERSION_HEX >= 0x02050000 + Py_ssize_t len, start, stop, step, slicelength, i; +#else + int len, start, stop, step, slicelength, i; +#endif + + len = sipCpp -> count(); + + if (sipConvertFromSliceObject(a0,len,&start,&stop,&step,&slicelength) < 0) + sipIsErr = 1; + else + for (i = 0; i < slicelength; ++i) + { + sipCpp -> remove(sipCpp -> at(start)); + start += step - 1; + } +%End + + QString operator[](int); +%MethodCode + int len; + + len = sipCpp -> count(); + + if ((a0 = (int)sipConvertFromSequenceIndex(a0,len)) < 0) + sipIsErr = 1; + else + sipRes = new QString((*sipCpp)[a0]); +%End + + QStringList operator[](SIP_PYSLICE); +%MethodCode +#if PY_VERSION_HEX >= 0x02050000 + Py_ssize_t len, start, stop, step, slicelength, i; +#else + int len, start, stop, step, slicelength, i; +#endif + + len = sipCpp -> count(); + + if (sipConvertFromSliceObject(a0,len,&start,&stop,&step,&slicelength) < 0) + sipIsErr = 1; + else + { + sipRes = new QStringList(); + + for (i = 0; i < slicelength; ++i) + { + (*sipRes) += (*sipCpp)[start]; + start += step; + } + } +%End + + int __contains__(const QString &); +%MethodCode + sipRes = (sipCpp -> findIndex(*a0) >= 0); +%End + + QStringList operator+(const QStringList &); + QStringList &operator+=(const QStringList &); + + QStringList &operator+=(const QString &); + + QStringList operator*(int); +%MethodCode + sipRes = new QStringList(); + + while (a0-- > 0) + *sipRes += *sipCpp; +%End + + QStringList &operator*=(int); +%MethodCode + QStringList orig(*sipCpp); + + sipCpp -> clear(); + + while (a0-- > 0) + *sipCpp += orig; +%End + + bool operator==(const QStringList &); + bool operator!=(const QStringList &); +}; + +%End diff --git a/sip/qt/qstrlist.sip b/sip/qt/qstrlist.sip new file mode 100644 index 0000000..189e134 --- /dev/null +++ b/sip/qt/qstrlist.sip @@ -0,0 +1,100 @@ +// This is the SIP interface definition for QStrList. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QStrList + +This class isn't implemented. Whenever a QStrList is the +return type of a function or the type of an argument, a Python list of strings +is used instead. + + +%End + + +%MappedType QStrList +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + // Convert to a Python list of strings. + + char *s; + int i; + PyObject *l; + + // Create the list. + + if ((l = PyList_New(sipCpp -> count())) == NULL) + return NULL; + + // Get it. + + i = 0; + + for (s = sipCpp -> first(); s != NULL; s = sipCpp -> next()) + { + PyObject *ps; + + if ((ps = PyString_FromString(s)) == NULL || PyList_SetItem(l,i,ps) < 0) + { + Py_XDECREF(ps); + Py_DECREF(l); + return NULL; + } + + ++i; + } + + return l; +%End + +%ConvertToTypeCode + // Convert a Python list of strings to a QStrList on the heap. + + if (sipIsErr == NULL) + return PyList_Check(sipPy); + + QStrList *qsl = new QStrList; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + { + char *s; + + if ((s = PyString_AsString(PyList_GET_ITEM(sipPy,i))) == NULL) + { + *sipIsErr = 1; + delete qsl; + + return 0; + } + + qsl -> append(s); + } + + *sipCppPtr = qsl; + + return sipGetState(sipTransferObj); +%End +}; diff --git a/sip/qt/qstyle.sip b/sip/qt/qstyle.sip new file mode 100644 index 0000000..bbef81c --- /dev/null +++ b/sip/qt/qstyle.sip @@ -0,0 +1,862 @@ +// This is the SIP interface definition for QStyle and QStyleOption. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QStyle (Qt v2+) + + virtual void getButtonShift + int &x + int &y + + +This takes no parameters and returns a tuple of the x and +y values. (Qt v2) + + + + virtual void scrollBarMetrics + const QScrollBar *b + int &sliderMin + int &sliderMax + int &sliderLength + int &buttonDim + + +Thus takes only the b parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2) + + + + virtual void tabbarMetrics + const QTabBar *t + int &hframe + int &vframe + int &overlap + + +This takes only the t parameter and returns a tuple of the +hframe, vframe and +overlap values. (Qt v2) + + + +QStyleOption (Qt v3+) + +QStyleOption is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionDefault { + Default + }; + + QStyleOption(StyleOptionDefault /Constrained/ = Default); + +%If (Qt_3_2_0 -) + QStyleOption(int); +%End + QStyleOption(int,int); + QStyleOption(int,int,int,int); + QStyleOption(QMenuItem *); + QStyleOption(QMenuItem *,int); + QStyleOption(QMenuItem *,int,int); + QStyleOption(const QColor &); + QStyleOption(QTab *); + QStyleOption(QListViewItem *); +%If (Qt_3_1_0 -) + QStyleOption(QCheckListItem *); +%End + QStyleOption(Qt::ArrowType /Constrained/); +%If (Qt_3_1_0 -) + QStyleOption(const QRect &); + QStyleOption(QWidget *); +%End + + bool isDefault() const; + +%If (Qt_3_3_0 -) + int day() const; +%End + + int lineWidth() const; + int midLineWidth() const; + int frameShape() const; + int frameShadow() const; + +%If (Qt_3_2_0 -) + int headerSection() const; +%End + QMenuItem* menuItem() const; + int maxIconWidth() const; + int tabWidth() const; + + const QColor& color() const; + + QTab *tab() const; + +%If (Qt_3_1_0 -) + QCheckListItem *checkListItem() const; +%End + QListViewItem *listViewItem() const; + + Qt::ArrowType arrowType() const; +%If (Qt_3_1_0 -) + QRect rect() const; + QWidget *widget() const; +%End +}; + +%End + + +%If (Qt_3_0_0 -) +// Not yet defined in Qt v3Beta5. +class QStyleHintReturn; +%End + + +%If (Qt_2_00 -) + +class QStyle : QObject +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_0_0 -) + QStyle(); +%End + +%If (- Qt_3_0_0) + GUIStyle guiStyle() const; +%End + + virtual void polish(QWidget *); + virtual void unPolish(QWidget *); + + virtual void polish(QApplication *); + virtual void unPolish(QApplication *); + + virtual void polish(QPalette &); + +%If (Qt_3_0_0 -) + virtual void polishPopupMenu(QPopupMenu *) = 0; +%End + +%If (- Qt_3_0_0) + virtual QRect itemRect(QPainter *,int,int,int,int,int,bool, + const QPixmap *,const QString &,int = -1); + + virtual void drawItem(QPainter *,int,int,int,int,int, + const QColorGroup &,bool,const QPixmap *, + const QString &,int = -1,const QColor * = 0); +%End +%If (Qt_3_0_0 -) + virtual QRect itemRect(QPainter *,const QRect &,int,bool, + const QPixmap *,const QString &,int = -1) const; + + virtual void drawItem(QPainter *,const QRect &,int,const QColorGroup &, + bool,const QPixmap *,const QString &,int = -1, + const QColor * = 0) const; +%End + +%If (- Qt_3_0_0) + virtual void drawSeparator(QPainter *,int,int,int,int, + const QColorGroup &,bool = 1,int = 1, + int = 0); + virtual void drawRect(QPainter *,int,int,int,int,const QColor &, + int = 1,const QBrush * = 0); + virtual void drawRectStrong(QPainter *,int,int,int,int, + const QColorGroup &,bool = 0,int = 1, + int = 0,const QBrush * = 0); + virtual void drawButton(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,const QBrush * = 0) = 0; + virtual QRect buttonRect(int,int,int,int); + virtual void drawButtonMask(QPainter *,int,int,int,int); + virtual void drawBevelButton(QPainter *,int,int,int,int, + const QColorGroup &,bool = 0, + const QBrush * = 0) = 0; +%If (Qt_2_1_0 -) + QRect bevelButtonRect(int,int,int,int); +%End + virtual void drawToolButton(QPainter *,int,int,int,int, + const QColorGroup &,bool = 0, + const QBrush * = 0); +%If (Qt_2_1_0 -) + void drawToolButton(QToolButton *,QPainter *); + QRect toolButtonRect(int,int,int,int); +%End + virtual void drawPanel(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,int = 1,const QBrush * = 0); + virtual void drawPopupPanel(QPainter *,int,int,int,int, + const QColorGroup &,int = 2, + const QBrush * = 0); + virtual void drawArrow(QPainter *,Qt::ArrowType,bool,int,int,int,int, + const QColorGroup &,bool,const QBrush * = 0) = 0; + virtual QSize exclusiveIndicatorSize() const = 0; + virtual void drawExclusiveIndicator(QPainter *,int,int,int,int, + const QColorGroup &,bool,bool = 0, + bool = 1) = 0; + virtual void drawExclusiveIndicatorMask(QPainter *,int,int,int,int, + bool); + virtual QSize indicatorSize() const = 0; + virtual void drawIndicator(QPainter *,int,int,int,int, + const QColorGroup &,int,bool = 0, + bool = 1) = 0; + virtual void drawIndicatorMask(QPainter *,int,int,int,int,int); + virtual void drawFocusRect(QPainter *,const QRect &,const QColorGroup &, + const QColor * = 0,bool = 0) = 0; + virtual void drawComboButton(QPainter *,int,int,int,int, + const QColorGroup &,bool = 0,bool = 0, + bool = 1,const QBrush * = 0) = 0; + virtual QRect comboButtonRect(int,int,int,int) = 0; + virtual QRect comboButtonFocusRect(int,int,int,int) = 0; + virtual void drawComboButtonMask(QPainter *,int,int,int,int) = 0; + virtual void drawPushButton(QPushButton *,QPainter *) = 0; + virtual void drawPushButtonLabel(QPushButton *,QPainter *) = 0; + +%If (Qt_2_1_0 -) + QRect pushButtonContentsRect(QPushButton *); + int menuButtonIndicatorWidth(int); +%End + + virtual void getButtonShift(int &,int &) = 0; + virtual int defaultFrameWidth() const = 0; + virtual void tabbarMetrics(const QTabBar *,int &,int &,int &) = 0; + virtual void drawTab(QPainter *,const QTabBar *,QTab *,bool) = 0; + virtual void drawTabMask(QPainter *,const QTabBar* ,QTab* ,bool) = 0; + + enum ScrollControl + { + AddLine = 0x1, + SubLine = 0x2, + AddPage = 0x4, + SubPage = 0x8, + First = 0x10, + Last = 0x20, + Slider = 0x40, + NoScroll = 0x80 + }; + + virtual void scrollBarMetrics(const QScrollBar *,int &,int &,int &, + int &) = 0; + virtual void drawScrollBarControls(QPainter *,const QScrollBar *,int, + uint,uint) = 0; + virtual ScrollControl scrollBarPointOver(const QScrollBar *,int, + const QPoint &) = 0; + virtual int sliderLength() const = 0; + virtual void drawSlider(QPainter *,int,int,int,int,const QColorGroup &, + Orientation,bool,bool) = 0; + virtual void drawSliderMask(QPainter *,int,int,int,int,Orientation, + bool,bool) = 0; + virtual void drawSliderGroove(QPainter *,int,int,int,int, + const QColorGroup &,QCOORD, + Orientation) = 0; + virtual void drawSliderGrooveMask(QPainter *,int,int,int,int,QCOORD, + Orientation) = 0; + virtual int maximumSliderDragDistance() const = 0; + virtual int splitterWidth() const = 0; + virtual void drawSplitter(QPainter *,int,int,int,int, + const QColorGroup &,Orientation) = 0; + virtual void drawCheckMark(QPainter *,int,int,int,int, + const QColorGroup &,bool,bool) = 0; + virtual void polishPopupMenu(QPopupMenu *) = 0; + virtual int extraPopupMenuItemWidth(bool,int,QMenuItem *, + const QFontMetrics &) = 0; + virtual int popupSubmenuIndicatorWidth(const QFontMetrics &) = 0; + virtual int popupMenuItemHeight(bool,QMenuItem *, + const QFontMetrics &) = 0; + virtual void drawPopupMenuItem(QPainter *,bool,int,int,QMenuItem *, + const QPalette &,bool, bool,int,int,int, + int) = 0; +%If (Qt_2_2_0 -) + virtual void drawMenuBarItem(QPainter *,int,int,int,int,QMenuItem *, + QColorGroup &,bool,bool); +%End +%If (Qt_2_1_0 -) + QSize scrollBarExtent(); + int buttonDefaultIndicatorWidth() const; +%If (Qt_2_2_0 -) + int buttonMargin() const; + int toolBarHandleExtent() const; + int sliderThickness() const; +%End + int toolBarHandleExtend() const; + void drawToolBarHandle(QPainter *,const QRect &,Qt::Orientation,bool, + const QColorGroup &,bool = 0); +%End + +%End + +%If (Qt_3_0_0 -) + enum PrimitiveElement { + PE_ButtonCommand, + PE_ButtonDefault, + PE_ButtonBevel, + PE_ButtonTool, + PE_ButtonDropDown, + + PE_FocusRect, + + PE_ArrowUp, + PE_ArrowDown, + PE_ArrowRight, + PE_ArrowLeft, + + PE_SpinWidgetUp, + PE_SpinWidgetDown, + PE_SpinWidgetPlus, + PE_SpinWidgetMinus, + + PE_Indicator, + PE_IndicatorMask, + PE_ExclusiveIndicator, + PE_ExclusiveIndicatorMask, + + PE_DockWindowHandle, + PE_DockWindowSeparator, + PE_DockWindowResizeHandle, + + PE_Splitter, + + PE_Panel, + PE_PanelPopup, + PE_PanelMenuBar, + PE_PanelDockWindow, + + PE_TabBarBase, + + PE_HeaderSection, + PE_HeaderArrow, + PE_StatusBarSection, + + PE_GroupBoxFrame, + + PE_Separator, + + PE_SizeGrip, + + PE_CheckMark, + + PE_ScrollBarAddLine, + PE_ScrollBarSubLine, + PE_ScrollBarAddPage, + PE_ScrollBarSubPage, + PE_ScrollBarSlider, + PE_ScrollBarFirst, + PE_ScrollBarLast, + + PE_ProgressBarChunk, + +%If (Qt_3_0_1 -) + PE_PanelLineEdit, + PE_PanelTabWidget, + + PE_WindowFrame, +%End +%If (Qt_3_1_0 -) + PE_CheckListController, + PE_CheckListIndicator, + PE_CheckListExclusiveIndicator, + + PE_PanelGroupBox, +%End +%If (Qt_3_0_4 - Qt_3_0_5) + PE_PopupMenuScroller, +%End +%If (Qt_3_3_0 -) + PE_RubberBand, +%End + + PE_CustomBase + }; + + enum StyleFlags { + Style_Default, + Style_Enabled, + Style_Raised, + Style_Sunken, + Style_Off, + Style_NoChange, + Style_On, + Style_Down, + Style_Horizontal, + Style_HasFocus, + Style_Top, + Style_Bottom, + Style_FocusAtBorder, + Style_AutoRaise, + Style_MouseOver, + Style_Up, + Style_Selected, + Style_Active, + Style_ButtonDefault + }; + + typedef uint SFlags; + + virtual void drawPrimitive(PrimitiveElement,QPainter *,const QRect &, + const QColorGroup &,SFlags = Style_Default, + const QStyleOption & = QStyleOption()) const = 0; + + enum ControlElement { + CE_PushButton, + CE_PushButtonLabel, + + CE_CheckBox, + CE_CheckBoxLabel, + + CE_RadioButton, + CE_RadioButtonLabel, + + CE_TabBarTab, + CE_TabBarLabel, + + CE_ProgressBarGroove, + CE_ProgressBarContents, + CE_ProgressBarLabel, + + CE_PopupMenuItem, + CE_MenuBarItem, + + CE_ToolButtonLabel, +%If (Qt_3_1_0 -) + CE_MenuBarEmptyArea, +%End +%If (Qt_3_0_5 -) + CE_PopupMenuScroller, +%End +%If (Qt_3_1_0 -) + CE_DockWindowEmptyArea, +%End +%If (Qt_3_2_0 -) + CE_PopupMenuVerticalExtra, + CE_PopupMenuHorizontalExtra, + + CE_ToolBoxTab, + CE_HeaderLabel, +%End + + CE_CustomBase + }; + + virtual void drawControl(ControlElement,QPainter *,const QWidget *, + const QRect &,const QColorGroup &, + SFlags = Style_Default, + const QStyleOption & = QStyleOption()) const = 0; + virtual void drawControlMask(ControlElement,QPainter *,const QWidget *, + const QRect &, + const QStyleOption & = QStyleOption()) const = 0; + + enum SubRect { + SR_PushButtonContents, + SR_PushButtonFocusRect, + + SR_CheckBoxIndicator, + SR_CheckBoxContents, + SR_CheckBoxFocusRect, + + SR_RadioButtonIndicator, + SR_RadioButtonContents, + SR_RadioButtonFocusRect, + + SR_ComboBoxFocusRect, + + SR_SliderFocusRect, + + SR_DockWindowHandleRect, + + SR_ProgressBarGroove, + SR_ProgressBarContents, + SR_ProgressBarLabel, + + SR_ToolButtonContents, + +%If (Qt_3_2_0 -) + SR_DialogButtonAccept, + SR_DialogButtonReject, + SR_DialogButtonApply, + SR_DialogButtonHelp, + SR_DialogButtonAll, + SR_DialogButtonAbort, + SR_DialogButtonIgnore, + SR_DialogButtonRetry, + SR_DialogButtonCustom, + + SR_ToolBoxTabContents, +%End + + SR_CustomBase + }; + + virtual QRect subRect(SubRect,const QWidget *) const = 0; + + enum ComplexControl{ + CC_SpinWidget, + CC_ComboBox, + CC_ScrollBar, + CC_Slider, + CC_ToolButton, + CC_TitleBar, + CC_ListView, + + CC_CustomBase + }; + + enum SubControl { + SC_None, + + SC_ScrollBarAddLine, + SC_ScrollBarSubLine, + SC_ScrollBarAddPage, + SC_ScrollBarSubPage, + SC_ScrollBarFirst, + SC_ScrollBarLast, + SC_ScrollBarSlider, + SC_ScrollBarGroove, + + SC_SpinWidgetUp, + SC_SpinWidgetDown, + SC_SpinWidgetFrame, + SC_SpinWidgetEditField, + SC_SpinWidgetButtonField, + + SC_ComboBoxFrame, + SC_ComboBoxEditField, + SC_ComboBoxArrow, +%If (Qt_3_1_0 -) + SC_ComboBoxListBoxPopup, +%End + + SC_SliderGroove, + SC_SliderHandle, + SC_SliderTickmarks, + + SC_ToolButton, + SC_ToolButtonMenu, + + SC_TitleBarLabel, + SC_TitleBarSysMenu, + SC_TitleBarMinButton, + SC_TitleBarMaxButton, + SC_TitleBarCloseButton, + SC_TitleBarNormalButton, + SC_TitleBarShadeButton, + SC_TitleBarUnshadeButton, + + SC_ListView, + SC_ListViewBranch, + SC_ListViewExpand, + + SC_All + }; + + typedef uint SCFlags; + + virtual void drawComplexControl(ComplexControl,QPainter *, + const QWidget *,const QRect &, + const QColorGroup &, + SFlags = Style_Default, + SCFlags = SC_All,SCFlags = SC_None, + const QStyleOption & = QStyleOption()) const = 0; + virtual void drawComplexControlMask(ComplexControl,QPainter *, + const QWidget *,const QRect &, + const QStyleOption & = QStyleOption()) const = 0; + + virtual QRect querySubControlMetrics(ComplexControl, + const QWidget *,SubControl, + const QStyleOption & = QStyleOption()) const = 0; + virtual SubControl querySubControl(ComplexControl,const QWidget *, + const QPoint &, + const QStyleOption & = QStyleOption()) const = 0; + + enum PixelMetric { + PM_ButtonMargin, + PM_ButtonDefaultIndicator, + PM_MenuButtonIndicator, + PM_ButtonShiftHorizontal, + PM_ButtonShiftVertical, + + PM_DefaultFrameWidth, + PM_SpinBoxFrameWidth, + + PM_MaximumDragDistance, + + PM_ScrollBarExtent, + PM_ScrollBarSliderMin, + + PM_SliderThickness, + PM_SliderControlThickness, + PM_SliderLength, + PM_SliderTickmarkOffset, + PM_SliderSpaceAvailable, + + PM_DockWindowSeparatorExtent, + PM_DockWindowHandleExtent, + PM_DockWindowFrameWidth, + + PM_MenuBarFrameWidth, + + PM_TabBarTabOverlap, + PM_TabBarTabHSpace, + PM_TabBarTabVSpace, + PM_TabBarBaseHeight, + PM_TabBarBaseOverlap, + + PM_ProgressBarChunkWidth, + + PM_SplitterWidth, + PM_TitleBarHeight, + + PM_IndicatorWidth, + PM_IndicatorHeight, + PM_ExclusiveIndicatorWidth, + PM_ExclusiveIndicatorHeight, +%If (Qt_3_0_4 -) + PM_PopupMenuScrollerHeight, +%End +%If (Qt_3_1_0 -) + PM_CheckListButtonSize, +%End +%If (Qt_3_2_0 -) + PM_CheckListControllerSize, + PM_PopupMenuFrameHorizontalExtra, + PM_PopupMenuFrameVerticalExtra, + + PM_DialogButtonsSeparator, + PM_DialogButtonsButtonWidth, + PM_DialogButtonsButtonHeight, + + PM_MDIFrameWidth, + PM_MDIMinimizedWidth, + PM_HeaderMargin, + PM_HeaderMarkSize, + PM_HeaderGripMargin, + PM_TabBarTabShiftHorizontal, + PM_TabBarTabShiftVertical, +%End +%If (Qt_3_3_0 -) + PM_TabBarScrollButtonWidth, + + PM_MenuBarItemSpacing, + PM_ToolBarItemSpacing, +%End + + PM_CustomBase + }; + + virtual int pixelMetric(PixelMetric,const QWidget * = 0) const = 0; + + enum ContentsType { + CT_PushButton, + CT_CheckBox, + CT_RadioButton, + CT_ToolButton, + CT_ComboBox, + CT_Splitter, + CT_DockWindow, + CT_ProgressBar, + CT_PopupMenuItem, +%If (Qt_3_1_0 -) + CT_TabBarTab, + CT_Slider, + CT_Header, + CT_LineEdit, + CT_MenuBar, + CT_SpinBox, +%End +%If (Qt_3_2_0 -) + CT_SizeGrip, + CT_TabWidget, + CT_DialogButtons, +%End + + CT_CustomBase + }; + + virtual QSize sizeFromContents(ContentsType,const QWidget *, + const QSize &, + const QStyleOption & = QStyleOption()) const = 0; + + enum StyleHint { + SH_EtchDisabledText, + + SH_GUIStyle, + + SH_ScrollBar_BackgroundMode, + SH_ScrollBar_MiddleClickAbsolutePosition, + SH_ScrollBar_ScrollWhenPointerLeavesControl, + + SH_TabBar_SelectMouseType, + + SH_TabBar_Alignment, + + SH_Header_ArrowAlignment, + + SH_Slider_SnapToValue, + + SH_Slider_SloppyKeyEvents, + + SH_ProgressDialog_CenterCancelButton, + + SH_ProgressDialog_TextLabelAlignment, + + SH_PrintDialog_RightAlignButtons, + + SH_MainWindow_SpaceBelowMenuBar, + + SH_FontDialog_SelectAssociatedText, + + SH_PopupMenu_AllowActiveAndDisabled, + + SH_PopupMenu_SpaceActivatesItem, + + SH_PopupMenu_SubMenuPopupDelay, + + SH_ScrollView_FrameOnlyAroundContents, + + SH_MenuBar_AltKeyNavigation, + + SH_ComboBox_ListMouseTracking, + + SH_PopupMenu_MouseTracking, + + SH_MenuBar_MouseTracking, + + SH_ItemView_ChangeHighlightOnFocus, + + SH_Widget_ShareActivation, + + SH_Workspace_FillSpaceOnMaximize, + + SH_ComboBox_Popup, + +%If (Qt_3_0_1 -) + SH_TitleBar_NoBorder, + + SH_ScrollBar_StopMouseOverSlider, +%End + +%If (Qt_3_0_2 -) + SH_BlinkCursorWhenTextSelected, + + SH_RichText_FullWidthSelection, +%End + +%If (Qt_3_0_4 -) + SH_PopupMenu_Scrollable, +%End + +%If (Qt_3_1_0 -) + SH_GroupBox_TextLabelVerticalAlignment, + + SH_GroupBox_TextLabelColor, + + SH_PopupMenu_SloppySubMenus, +%End + +%If (Qt_3_2_0 -) + SH_Table_GridLineColor, + + SH_LineEdit_PasswordCharacter, + + SH_DialogButtons_DefaultButton, + + SH_ToolBox_SelectedPageTitleBold, + + SH_TabBar_PreferNoArrows, + + SH_ScrollBar_LeftClickAbsolutePosition, + + SH_ListViewExpand_SelectMouseType, +%End + +%If (Qt_3_3_0 -) + SH_UnderlineAccelerator, + + SH_ToolButton_Uses3D, +%End + + SH_CustomBase + }; + + virtual int styleHint(StyleHint,const QWidget * = 0, + const QStyleOption & = QStyleOption(), + QStyleHintReturn * = 0) const = 0; + + enum StylePixmap { + SP_TitleBarMinButton, + SP_TitleBarMaxButton, + SP_TitleBarCloseButton, + SP_TitleBarNormalButton, + SP_TitleBarShadeButton, + SP_TitleBarUnshadeButton, + SP_DockWindowCloseButton, + SP_MessageBoxInformation, + SP_MessageBoxWarning, + SP_MessageBoxCritical, +%If (Qt_3_2_0 -) + SP_MessageBoxQuestion, +%End + + SP_CustomBase + }; + + virtual QPixmap stylePixmap(StylePixmap,const QWidget * = 0, + const QStyleOption & = QStyleOption()) const = 0; + + static QRect visualRect(const QRect &,const QWidget *); + + static QRect visualRect(const QRect &,const QRect &); +%End + +protected: +%If (Qt_2_1_0 - Qt_3_0_0) + void setScrollBarExtent(int,int = -1); + void setButtonDefaultIndicatorWidth(int); +%End + +private: +%If (- Qt_3_0_0) + QStyle(); + QStyle(GUIStyle); +%End +%If (Qt_2_1_0 -) + QStyle(const QStyle &); +%End +}; + +%End diff --git a/sip/qt/qstylefactory.sip b/sip/qt/qstylefactory.sip new file mode 100644 index 0000000..9249c62 --- /dev/null +++ b/sip/qt/qstylefactory.sip @@ -0,0 +1,45 @@ +// This is the SIP interface definition for QStyleFactory. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QStyleFactory (Qt v3+) + +QStyleFactory is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QStyleFactory +{ +%TypeHeaderCode +#include +%End + +public: + static QStringList keys(); + static QStyle *create(const QString &) /Factory/; +}; + +%End diff --git a/sip/qt/qstylesheet.sip b/sip/qt/qstylesheet.sip new file mode 100644 index 0000000..c248e56 --- /dev/null +++ b/sip/qt/qstylesheet.sip @@ -0,0 +1,239 @@ +// This is the SIP interface definition for QStyleSheet and QStyleSheetItem. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QStyleSheet (Qt v2+) + +QStyleSheet is fully implemented. + + + +QStyleSheetItem (Qt v2+) + +QStyleSheetItem is fully implemented. + + +%End + + +%If (Qt_2_00 -) + +class QStyleSheetItem : Qt +{ +%TypeHeaderCode +#include +%End + +public: + QStyleSheetItem(QStyleSheet * /TransferThis/,const QString &); + + QString name() const; + + QStyleSheet *styleSheet(); +// const QStyleSheet *styleSheet() const; + + enum AdditionalStyleValues { + Undefined + }; + + enum DisplayMode { + DisplayBlock, + DisplayInline, + DisplayListItem, + DisplayNone + }; + + DisplayMode displayMode() const; + void setDisplayMode(DisplayMode); + + int alignment() const; + void setAlignment(int); + +%If (Qt_3_0_0 -) + enum VerticalAlignment { + VAlignBaseline, + VAlignSub, + VAlignSuper + }; + + VerticalAlignment verticalAlignment() const; + void setVerticalAlignment(VerticalAlignment); +%End + + int fontWeight() const; + void setFontWeight(int); + + int logicalFontSize() const; + void setLogicalFontSize(int); + + int logicalFontSizeStep() const; + void setLogicalFontSizeStep(int); + + int fontSize() const; + void setFontSize(int); + + QString fontFamily() const; + void setFontFamily(const QString &); + + int numberOfColumns() const; + void setNumberOfColumns(int); + + QColor color() const; + void setColor(const QColor &); + + bool fontItalic() const; + void setFontItalic(bool); + bool definesFontItalic() const; + + bool fontUnderline() const; + void setFontUnderline(bool); + bool definesFontUnderline() const; + +%If (Qt_3_0_5 -) + bool fontStrikeOut() const; + void setFontStrikeOut(bool); + bool definesFontStrikeOut() const; +%End + + bool isAnchor() const; + void setAnchor(bool); + +%If (- Qt_2_1_0) + enum WhiteSpaceMode { + WhiteSpaceNormal, + WhiteSpacePre + }; +%End +%If (Qt_2_1_0 -) + enum WhiteSpaceMode { + WhiteSpaceNormal, + WhiteSpacePre, + WhiteSpaceNoWrap + }; +%End + + WhiteSpaceMode whiteSpaceMode() const; + void setWhiteSpaceMode(WhiteSpaceMode); + +%If (- Qt_3_0_0) + enum Margin { + MarginLeft, + MarginRight, + MarginTop, + MarginBottom, + MarginAll, + MarginVertical, + MarginHorizontal + }; +%End +%If (Qt_3_0_0 -) + enum Margin { + MarginLeft, + MarginRight, + MarginTop, + MarginBottom, + MarginFirstLine, + MarginAll, + MarginVertical, + MarginHorizontal + }; +%End + + int margin(Margin) const; + void setMargin(Margin,int); + + enum ListStyle { + ListDisc, + ListCircle, + ListSquare, + ListDecimal, + ListLowerAlpha, + ListUpperAlpha + }; + + ListStyle listStyle() const; + void setListStyle(ListStyle); + + QString contexts() const; + void setContexts(const QString &); + bool allowedInContext(const QStyleSheetItem *) const; + + bool selfNesting() const; + void setSelfNesting(bool); + +%If (Qt_3_0_0 -) + void setLineSpacing(int); + int lineSpacing() const; +%End +}; + + +class QStyleSheet : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QStyleSheet(QObject * /TransferThis/ = 0,const char * = 0); + + static QStyleSheet *defaultSheet(); + static void setDefaultSheet(QStyleSheet *); + + QStyleSheetItem *item(const QString &); +// const QStyleSheetItem *item(const QString &) const; + + void insert(QStyleSheetItem *); + +%If (- Qt_3_0_0) +// virtual QTextNode *tag(const QString &,const QMap &, +// const QString &,const QMimeSourceFactory &, +// bool = 0) const; +%End +%If (Qt_3_0_0 -) +// virtual QTextCustomItem *tag(const QString &, +// const QMap &, +// const QString &, +// const QMimeSourceFactory &,bool, +// QTextDocument *) const; +%End + +%If (Qt_3_0_0 -) + static QString escape(const QString &); + static QString convertFromPlainText(const QString &, + QStyleSheetItem::WhiteSpaceMode = QStyleSheetItem::WhiteSpacePre); +%End +%If (- Qt_3_0_0) + static QString convertFromPlainText(const QString &); +%End + static bool mightBeRichText(const QString &); + + virtual void scaleFont(QFont &,int) const; + virtual void error(const QString &) const; + +private: +%If (Qt_3_1_0 -) + QStyleSheet(const QStyleSheet &); +%End +}; + +%End diff --git a/sip/qt/qsyntaxhighlighter.sip b/sip/qt/qsyntaxhighlighter.sip new file mode 100644 index 0000000..13d24e8 --- /dev/null +++ b/sip/qt/qsyntaxhighlighter.sip @@ -0,0 +1,57 @@ +// This is the SIP interface definition for QSyntaxHighlighter. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSyntaxHighlighter (Qt v3.1+) + +QSyntaxHighlighter is fully implemented. + + +%End + + +%If (Qt_3_1_0 -) + +class QSyntaxHighlighter : Qt +{ +%TypeHeaderCode +#include +%End + +public: + QSyntaxHighlighter(QTextEdit * /TransferThis/); + + virtual int highlightParagraph(const QString &,int) = 0; + + void setFormat(int,int,const QFont &,const QColor &); + void setFormat(int,int,const QColor &); + void setFormat(int,int,const QFont &); + QTextEdit *textEdit() const; + + void rehighlight(); + +%If (Qt_3_2_0 -) + int currentParagraph() const; +%End +}; + +%End diff --git a/sip/qt/qtabbar.sip b/sip/qt/qtabbar.sip new file mode 100644 index 0000000..d53ffab --- /dev/null +++ b/sip/qt/qtabbar.sip @@ -0,0 +1,266 @@ +// This is the SIP interface definition for QTab and QTabBar. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QTab + +QTab is fully implemented. + + + +QTabBar + + QList<QTab> tabList + + + +This returns a list of QTab instances. + + +%End + + +%If (Qt_3_0_0 -) + +class QTab : Qt +{ +%TypeHeaderCode +#include +%End + +public: + QTab(); + QTab(const QString &); + QTab(const QIconSet &,const QString & = QString::null); + virtual ~QTab(); + + void setText(const QString &); + QString text() const; + void setIconSet(const QIconSet &); + QIconSet *iconSet() const; + void setRect(const QRect &); + QRect rect() const; + void setEnabled(bool); + bool isEnabled() const; + void setIdentifier(int); + int identifier() const; +}; + +%End + +%If (- Qt_3_0_0) + +class QTab +{ +%TypeHeaderCode +#include +%End + +public: + QTab(); +%If (Qt_2_1_0 -) + QTab(const QString &); + QTab(const QIconSet &,const QString & = QString::null); +%End + virtual ~QTab(); + + QString label; + QRect r; + bool enabled; + int id; + QIconSet *iconset; +}; + +%End + + +class QTabBar : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QTabBar(QWidget * /TransferThis/ = 0,const char * = 0); + + enum Shape { + RoundedAbove, + RoundedBelow, + TriangularAbove, + TriangularBelow + }; + + Shape shape() const; +%If (- Qt_2_00) + void setShape(Shape); +%End +%If (Qt_2_00 -) + virtual void setShape(Shape); +%End + + void show(); + + virtual int addTab(QTab * /Transfer/); +%If (Qt_2_00 -) + virtual int insertTab(QTab * /Transfer/,int = -1); + virtual void removeTab(QTab *); +%End + +%If (- Qt_2_00) + void setTabEnabled(int,bool); +%End +%If (Qt_2_00 -) + virtual void setTabEnabled(int,bool); +%End + bool isTabEnabled(int) const; + + QSize sizeHint() const; +%If (Qt_2_2_0 -) + QSize minimumSizeHint() const; +%End +%If (Qt_2_00 -) + QSizePolicy sizePolicy() const; +%End + + int currentTab() const; + int keyboardFocusTab() const; + +%If (- Qt_3_0_0) + QTab *tab(int); +%End +%If (Qt_3_0_0 -) + QTab *tab(int) const; + QTab *tabAt(int) const; + int indexOf(int) const; +%End +%If (Qt_2_2_0 -) + int count() const; +%End + +%If (Qt_2_00 -) + virtual void layoutTabs(); +%End +%If (Qt_3_0_0 -) + virtual QTab *selectTab(const QPoint &) const; + + void removeToolTip(int); + void setToolTip(int,const QString &); + QString toolTip(int) const; +%End + +public slots: +%If (- Qt_2_00) + void setCurrentTab(int); + void setCurrentTab(QTab *); +%End +%If (Qt_2_00 -) + virtual void setCurrentTab(int); + virtual void setCurrentTab(QTab *); +%End + +signals: + void selected(int); +%If (Qt_3_2_0 -) + void layoutChanged(); +%End + +protected: + virtual void paint(QPainter *,QTab *,bool) const; +%If (Qt_2_00 -) + virtual void paintLabel(QPainter *,const QRect &,QTab *,bool) const; +%End + +%If (- Qt_3_0_0) + virtual QTab *selectTab(const QPoint &) const; +%End +%If (Qt_2_00 - Qt_3_0_0) + void updateMask(); +%End + +%If (Qt_2_1_0 -) + void focusInEvent(QFocusEvent *); + void focusOutEvent(QFocusEvent *); + + void resizeEvent(QResizeEvent *); +%End + void paintEvent(QPaintEvent *); + void mousePressEvent(QMouseEvent *); +%If (Qt_3_0_0 -) + void mouseMoveEvent(QMouseEvent *); +%End + void mouseReleaseEvent(QMouseEvent *); + void keyPressEvent(QKeyEvent *); +%If (Qt_2_1_0 -) + void styleChange(QStyle &); +%End +%If (Qt_3_0_0 -) + void fontChange(const QFont &); +%End + +%If (Qt_3_1_0 -) + bool event(QEvent *); +%End + + SIP_PYLIST tabList() [QList *()]; +%MethodCode + if ((sipRes = PyList_New(0)) == NULL) + sipIsErr = 1; + else + { + QList *tl; + QTab *tab; + + Py_BEGIN_ALLOW_THREADS + tl = sipCpp -> sipProtect_tabList(); + Py_END_ALLOW_THREADS + + // Convert the list. + for (QListIterator it(*tl); (tab = it.current()) != NULL; ++it) + { + PyObject *inst = sipBuildResult(&sipIsErr,"C",tab,sipClass_QTab,NULL); + + if (sipIsErr) + break; + + int rc = PyList_Append(sipRes,inst); + + Py_DECREF(inst); + + if (rc < 0) + { + sipIsErr = 1; + break; + } + } + + if (sipIsErr) + { + Py_DECREF(sipRes); + } + } +%End + +private: +%If (Qt_2_1_0 -) + QTabBar(const QTabBar &); +%End +}; diff --git a/sip/qt/qtabdialog.sip b/sip/qt/qtabdialog.sip new file mode 100644 index 0000000..115cf9d --- /dev/null +++ b/sip/qt/qtabdialog.sip @@ -0,0 +1,167 @@ +// This is the SIP interface definition for QTabDialog. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QTabDialog + +QTabDialog is fully implemented. + + +%End + + +%If (Qt_TABDIALOG) + +class QTabDialog : QDialog +{ +%TypeHeaderCode +#include +%End + +public: + QTabDialog(QWidget * /TransferThis/ = 0,const char * = 0,bool = 0, + WFlags = 0); + + void show(); + void setFont(const QFont &); + +%If (- Qt_2_00) + void addTab(QWidget *,const char *); +%End +%If (Qt_2_00 -) + void addTab(QWidget *,const QString &); + void addTab(QWidget *,const QIconSet &,const QString &); +%End + void addTab(QWidget *,QTab *); + +%If (Qt_2_00 -) + void insertTab(QWidget *,const QString &,int = -1); + void insertTab(QWidget *,const QIconSet &,const QString &,int = -1); + void insertTab(QWidget *,QTab *,int = -1); + + void changeTab(QWidget *,const QString &); + void changeTab(QWidget *,const QIconSet &,const QString &); +%End + +%If (Qt_2_00 -) + bool isTabEnabled(QWidget *) const; + void setTabEnabled(QWidget *,bool); +%End +%If (- Qt_3_0_0) + bool isTabEnabled(const char *) const; + void setTabEnabled(const char *,bool); +%End + + void showPage(QWidget *); +%If (Qt_2_00 -) + void removePage(QWidget *); + QString tabLabel(QWidget *); +%End +%If (- Qt_2_00) + const char *tabLabel(QWidget *); +%End + +%If (Qt_2_00 -) + QWidget *currentPage() const; +%End + +%If (- Qt_2_00) + void setDefaultButton(const char * = "Defaults"); +%End +%If (Qt_2_00 -) + void setDefaultButton(const QString &); + void setDefaultButton(); +%End + bool hasDefaultButton() const; + +%If (Qt_2_00 -) + void setHelpButton(const QString &); + void setHelpButton(); + bool hasHelpButton() const; +%End + +%If (- Qt_2_00) + void setCancelButton(const char * = "Cancel"); +%End +%If (Qt_2_00 -) + void setCancelButton(const QString &); + void setCancelButton(); +%End + bool hasCancelButton() const; + +%If (- Qt_2_00) + void setApplyButton(const char * = "Apply"); +%End +%If (Qt_2_00 -) + void setApplyButton(const QString &); + void setApplyButton(); +%End + bool hasApplyButton() const; + +%If (- Qt_2_00) + void setOkButton(const char * = "OK"); +%End +%If (Qt_2_00 -) + void setOkButton(const QString &); + void setOkButton(); +%End + bool hasOkButton() const; + +protected: + void paintEvent(QPaintEvent *); + void resizeEvent(QResizeEvent *); +%If (- Qt_2_00) + void styleChange(GUIStyle); +%End +%If (Qt_2_00 -) + void styleChange(QStyle &); +%End + void setTabBar(QTabBar *); + QTabBar *tabBar() const; + +signals: + void aboutToShow(); + + void applyButtonPressed(); + void cancelButtonPressed(); + void defaultButtonPressed(); +%If (Qt_2_00 -) + void helpButtonPressed(); +%End + +%If (Qt_2_2_0 -) + void currentChanged(QWidget *); +%End +%If (- Qt_2_00) + void selected(const char *); +%End +%If (Qt_2_00 - Qt_3_0_0) + void selected(const QString &); +%End + +private: +%If (Qt_2_1_0 -) + QTabDialog(const QTabDialog &); +%End +}; + +%End diff --git a/sip/qt/qtableview.sip b/sip/qt/qtableview.sip new file mode 100644 index 0000000..a2159be --- /dev/null +++ b/sip/qt/qtableview.sip @@ -0,0 +1,185 @@ +// This is the SIP interface definition for QTableView. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QTableView (Qt 1.x, Qt 2.x) + + bool colXPos + int col + int *xPos + + +This takes the col parameter and returns a tuple containing +the bool result and xPos. + + + + bool rowYPos + int row + int *yPos + + +This takes the row parameter and returns a tuple containing +the bool result and yPos. + + +%End + + +%If (Qt_TABLEVIEW) +%If (- Qt_3_0_0) + +%ModuleHeaderCode +#include +%End + +const uint Tbl_vScrollBar; +const uint Tbl_hScrollBar; +const uint Tbl_autoVScrollBar; +const uint Tbl_autoHScrollBar; +const uint Tbl_autoScrollBars; + +const uint Tbl_clipCellPainting; +const uint Tbl_cutCellsV; +const uint Tbl_cutCellsH; +const uint Tbl_cutCells; + +const uint Tbl_scrollLastHCell; +const uint Tbl_scrollLastVCell; +const uint Tbl_scrollLastCell; + +const uint Tbl_smoothHScrolling; +const uint Tbl_smoothVScrolling; +const uint Tbl_smoothScrolling; + +const uint Tbl_snapToHGrid; +const uint Tbl_snapToVGrid; +const uint Tbl_snapToGrid; + + +class QTableView : QFrame +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + void setBackgroundColor(const QColor &); + void setPalette(const QPalette &); +%End +%If (Qt_2_00 -) + virtual void setBackgroundColor(const QColor &); + virtual void setPalette(const QPalette &); +%End + void show(); + void repaint(bool = 1); + void repaint(int,int,int,int,bool = 1); + void repaint(const QRect &,bool = 1); + +protected: + QTableView(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); + ~QTableView(); + + int numRows() const; + int numCols() const; + int topCell() const; + int leftCell() const; + int xOffset() const; + int yOffset() const; + virtual int cellWidth(int); + virtual int cellHeight(int); + int cellWidth() const; + int cellHeight() const; + virtual int totalWidth(); + virtual int totalHeight(); + uint tableFlags() const; + bool testTableFlags(uint) const; + void clearTableFlags(uint = ~0); + bool autoUpdate() const; + void updateCell(int,int,bool = 1); + QRect cellUpdateRect() const; + QRect viewRect() const; + int lastRowVisible() const; + int lastColVisible() const; + bool rowIsVisible(int) const; + bool colIsVisible(int) const; + const QScrollBar *verticalScrollBar() const; + const QScrollBar *horizontalScrollBar() const; + virtual void paintCell(QPainter *,int,int) = 0; + virtual void setupPainter(QPainter *); + void paintEvent(QPaintEvent *); + void resizeEvent(QResizeEvent *); + int findRow(int) const; + int findCol(int) const; + bool rowYPos(int,int *) const; + bool colXPos(int,int *) const; + int maxXOffset(); + int maxYOffset(); + int maxColOffset(); + int maxRowOffset(); + int minViewX() const; + int minViewY() const; + int maxViewX() const; + int maxViewY() const; + int viewWidth() const; + int viewHeight() const; + void scroll(int,int); + void updateScrollBars(); + void updateTableSize(); + +%If (- Qt_2_00) + void setNumRows(int); + void setNumCols(int); + void setTopCell(int); + void setLeftCell(int); + void setTopLeftCell(int,int); + void setXOffset(int); + void setYOffset(int); + void setOffset(int,int,bool = 1); + void setCellWidth(int); + void setCellHeight(int); + void setTableFlags(uint); + void setAutoUpdate(bool); +%End + +%If (Qt_2_00 -) + virtual void setNumRows(int); + virtual void setNumCols(int); + virtual void setTopCell(int); + virtual void setLeftCell(int); + virtual void setTopLeftCell(int,int); + virtual void setXOffset(int); + virtual void setYOffset(int); + virtual void setOffset(int,int,bool = 1); + virtual void setCellWidth(int); + virtual void setCellHeight(int); + virtual void setTableFlags(uint); + virtual void setAutoUpdate(bool); +%End + +private: + QTableView(const QTableView &); +}; + +%End +%End diff --git a/sip/qt/qtabwidget.sip b/sip/qt/qtabwidget.sip new file mode 100644 index 0000000..2f78472 --- /dev/null +++ b/sip/qt/qtabwidget.sip @@ -0,0 +1,177 @@ +// This is the SIP interface definition for QTabWidget. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QTabWidget (Qt v2+) + +QTabWidget is fully implemented. + + +%End + + +%If (Qt_2_00 -) + +class QTabWidget : QWidget +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_0_0 -) + QTabWidget(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); +%End +%If (Qt_2_1_0 - Qt_3_0_0) + QTabWidget(QWidget * /TransferThis/,const char *,WFlags); +%End +%If (- Qt_3_0_0) + QTabWidget(QWidget * /TransferThis/ = 0,const char * = 0); +%End + + // The QWidget is passed to QWidgetStack::addWidget(). +%If (- Qt_3_0_0) + void addTab(QWidget * /Transfer/,const QString &); + void addTab(QWidget * /Transfer/,const QIconSet &,const QString &); + void addTab(QWidget * /Transfer/,QTab *); + + void insertTab(QWidget * /Transfer/,const QString &,int = -1); + void insertTab(QWidget * /Transfer/,const QIconSet &,const QString &, + int = -1); + void insertTab(QWidget * /Transfer/,QTab *,int = -1); +%End +%If (Qt_3_0_0 -) + virtual void addTab(QWidget * /Transfer/,const QString &); + virtual void addTab(QWidget * /Transfer/,const QIconSet &, + const QString &); + virtual void addTab(QWidget * /Transfer/,QTab *); + + virtual void insertTab(QWidget * /Transfer/,const QString &,int = -1); + virtual void insertTab(QWidget * /Transfer/,const QIconSet &, + const QString &,int = -1); + virtual void insertTab(QWidget * /Transfer/,QTab *,int = -1); +%End + + void changeTab(QWidget *,const QString &); + void changeTab(QWidget *,const QIconSet &,const QString &); + + bool isTabEnabled(QWidget *) const; + void setTabEnabled(QWidget *,bool); + +%If (Qt_3_2_0 -) + void setCornerWidget(QWidget *,Qt::Corner = Qt::TopRight); + QWidget *cornerWidget(Qt::Corner = Qt::TopRight) const; +%End + +%If (- Qt_3_0_0) + void showPage(QWidget *); + void removePage(QWidget *); + + QString tabLabel(QWidget *); +%End +%If (Qt_3_0_0 -) + QString tabLabel(QWidget *) const; + void setTabLabel(QWidget *,const QString &); + + QIconSet tabIconSet(QWidget *) const; + void setTabIconSet(QWidget *,const QIconSet &); + + void removeTabToolTip(QWidget *); + void setTabToolTip(QWidget *,const QString &); + QString tabToolTip(QWidget *) const; +%End + + QWidget *currentPage() const; +%If (Qt_3_0_0 -) + QWidget *page(int) const; + QString label(int) const; +%End +%If (Qt_2_2_0 -) + int currentPageIndex() const; +%End +%If (Qt_2_2_0 - Qt_3_0_0) + void setCurrentPage(int); +%End +%If (Qt_3_0_0 -) + int indexOf(QWidget *) const; +%End + + QSize sizeHint() const; + QSize minimumSizeHint() const; + + enum TabPosition { + Top, + Bottom + }; + + TabPosition tabPosition() const; + void setTabPosition(TabPosition); + +%If (Qt_2_2_0 -) + enum TabShape { + Rounded, + Triangular + }; + + TabShape tabShape() const; + void setTabShape(TabShape); +%End + + int margin() const; + void setMargin(int); + +%If (Qt_2_1_0 - Qt_3_0_0) + QSizePolicy sizePolicy() const; +%End + +%If (Qt_3_0_0 -) + int count() const; +%End + +public slots: +%If (Qt_3_0_0 -) + void setCurrentPage(int); + virtual void showPage(QWidget *); + virtual void removePage(QWidget *); +%End + +protected: + void showEvent(QShowEvent *); + void resizeEvent(QResizeEvent *); + void setTabBar(QTabBar *); + QTabBar *tabBar() const; + void styleChange(QStyle &); + void updateMask(); + bool eventFilter(QObject *,QEvent *); + +signals: +%If (Qt_2_2_0 -) + void currentChanged(QWidget *); +%End + +private: +%If (Qt_2_1_0 -) + QTabWidget(const QTabWidget &); +%End +}; + +%End diff --git a/sip/qt/qtextbrowser.sip b/sip/qt/qtextbrowser.sip new file mode 100644 index 0000000..d7f4570 --- /dev/null +++ b/sip/qt/qtextbrowser.sip @@ -0,0 +1,114 @@ +// This is the SIP interface definition for QTextBrowser. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QTextBrowser (Qt v2+) + +QTextBrowser is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QTextBrowser : QTextEdit +{ +%TypeHeaderCode +#include +%End + +public: + QTextBrowser(QWidget * /TransferThis/ = 0,const char * = 0); + + QString source() const; + +public slots: + virtual void setSource(const QString &); + virtual void backward(); + virtual void forward(); + virtual void home(); + virtual void reload(); + void setText(const QString &); + virtual void setText(const QString &,const QString &); + +signals: + void backwardAvailable(bool); + void forwardAvailable(bool); +%If (Qt_3_1_0 -) + void sourceChanged(const QString &); +%End + void highlighted(const QString &); + void linkClicked(const QString &); +%If (Qt_3_1_0 -) + void anchorClicked(const QString &,const QString &); +%End + +protected: + void keyPressEvent(QKeyEvent *); + +private: + QTextBrowser(const QTextBrowser &); +}; + +%End + +%If (Qt_2_00 - Qt_3_0_0) + +class QTextBrowser : QTextView +{ +%TypeHeaderCode +#include +%End + +public: + QTextBrowser(QWidget * /TransferThis/ = 0,const char * = 0); + + virtual void setSource(const QString &); + QString source() const; + void setText(const QString &,const QString & = QString::null); + void scrollToAnchor(const QString &); + +public slots: + virtual void backward(); + virtual void forward(); + virtual void home(); + +signals: + void backwardAvailable(bool); + void forwardAvailable(bool); + void highlighted(const QString &); + void textChanged(); + +protected: + void viewportMousePressEvent(QMouseEvent *); + void viewportMouseReleaseEvent(QMouseEvent *); + void viewportMouseMoveEvent(QMouseEvent *); + void keyPressEvent(QKeyEvent *); + +private: +%If (Qt_2_1_0 -) + QTextBrowser(const QTextBrowser &); +%End +}; + +%End diff --git a/sip/qt/qtextcodec.sip b/sip/qt/qtextcodec.sip new file mode 100644 index 0000000..626e12b --- /dev/null +++ b/sip/qt/qtextcodec.sip @@ -0,0 +1,146 @@ +// This is the SIP interface definition for QTextCodec, QTextDecoder and +// QTextEncoder. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QTextCodec (Qt v2+) + + virtual QCString fromUnicode + const QString &uc + int &lenInOut + + +The returned value is a tuple of the QCString result and the +updated lenInOut. + + + +QTextDecoder (Qt v2+) + +QTextDecoder is fully implemented. + + + +QTextEncoder (Qt v2+) + + virtual QCString fromUnicode = 0 + const QString &uc + int &lenInOut + + +The returned value is a tuple of the QCString result and the +updated lenInOut. + + +%End + + +%If (Qt_2_00 -) + +class QTextEncoder +{ +%TypeHeaderCode +#include +%End + +public: + virtual QCString fromUnicode(const QString &,int & /In,Out/) = 0; +}; + + +class QTextDecoder +{ +%TypeHeaderCode +#include +%End + +public: + virtual QString toUnicode(const char *,int) = 0; +}; + + +class QTextCodec +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_CODECS) + static QTextCodec *loadCharmap(QIODevice *); + static QTextCodec *loadCharmapFile(QString); +%End + static QTextCodec *codecForMib(int); + static QTextCodec *codecForName(const char *,int = 0); + static QTextCodec *codecForContent(const char *,int); + static QTextCodec *codecForIndex(int); + static QTextCodec *codecForLocale(); +%If (Qt_3_0_0 -) + static void setCodecForLocale(QTextCodec *); +%End + +%If (Qt_3_1_0 -) + static QTextCodec *codecForTr(); + static void setCodecForTr(QTextCodec *); + static QTextCodec *codecForCStrings(); + static void setCodecForCStrings(QTextCodec *); +%End + + static void deleteAllCodecs(); + + static const char *locale(); + + virtual const char *name() const = 0; +%If (Qt_3_0_0 -) + virtual const char *mimeName() const; +%End + virtual int mibEnum() const = 0; + + virtual QTextDecoder *makeDecoder() const /Factory/; + virtual QTextEncoder *makeEncoder() const /Factory/; + + virtual QString toUnicode(const char *,int) const; + virtual QCString fromUnicode(const QString &,int & /In,Out/) const; + QCString fromUnicode(const QString &) const; + QString toUnicode(const QByteArray &,int) const; + QString toUnicode(const QByteArray &) const; +%If (Qt_3_0_0 -) + QString toUnicode(const QCString &,int) const; + QString toUnicode(const QCString &) const; +%End + QString toUnicode(const char *) const; + virtual bool canEncode(QChar) const; + virtual bool canEncode(const QString &) const; + + virtual int heuristicContentMatch(const char *,int) const = 0; + virtual int heuristicNameMatch(const char *) const; + +%If (Qt_3_0_0 -) + virtual QByteArray fromUnicode(const QString &,int,int) const; + virtual unsigned short characterFromUnicode(const QString &,int) const; +%End + +protected: + QTextCodec(); +}; + +%End diff --git a/sip/qt/qtextedit.sip b/sip/qt/qtextedit.sip new file mode 100644 index 0000000..3576bf3 --- /dev/null +++ b/sip/qt/qtextedit.sip @@ -0,0 +1,437 @@ +// This is the SIP interface definition for QTextEdit. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QTextEdit (Qt v3+) + +int charAt + const QPoint &pos + int *para = 0 + + +This takes only the pos parameter and returns a tuple of the +value returned via the para pointer and the int result. + + + + void del + + + +This has been renamed delChar in Python. + + + +virtual bool find + const QString &expr + bool cs + bool wo + bool forward = TRUE + int *para = 0 + int *index = 0 + + +If the para and index parameters are +omitted then the bool result is returned. If both are supplied (as integers) +then a tuple of the bool result and the modified values of +para and index is returned. + + + +void getCursorPosition + int *para + int *index + + +This takes no parameters and returns a tuple of the values returned via the +para and index pointers. + + + +void getSelection + int *paraFrom + int *indexFrom + int *paraTo + int *indexTo + int selNum = 0 + + +This takes only the selNum parameter and returns a tuple of +the paraFrom, indexFrom, +paraTo and indexTo values. + + +%End + + +%If (Qt_3_0_0 -) + +// These aren't part of the public API in the Qt3 beta, so define them as +// opaque for the moment. + +class QTextDocument; +class QTextCursor; + + +class QTextEdit : QScrollView +{ +%TypeHeaderCode +#include +%End + +public: + enum WordWrap { + NoWrap, + WidgetWidth, + FixedPixelWidth, + FixedColumnWidth + }; + + enum WrapPolicy { + AtWordBoundary, + Anywhere, + AtWhiteSpace, +%If (Qt_3_1_0 -) + AtWordOrDocumentBoundary +%End + }; + +%If (Qt_3_1_0 -) + enum AutoFormatting { + AutoNone, + AutoBulletList, + AutoAll + }; +%End + + enum KeyboardAction { + ActionBackspace, + ActionDelete, + ActionReturn, + ActionKill, +%If (Qt_3_1_0 -) + ActionWordBackspace, + ActionWordDelete +%End + }; + + enum CursorAction { + MoveBackward, + MoveForward, + MoveWordBackward, + MoveWordForward, + MoveUp, + MoveDown, + MoveLineStart, + MoveLineEnd, + MoveHome, + MoveEnd, + MovePgUp, + MovePgDown + }; + + enum VerticalAlignment { + AlignNormal, + AlignSuperScript, + AlignSubScript + }; + +%If (Qt_3_1_0 -) + enum TextInsertionFlags { + RedoIndentation, + CheckNewLines, + RemoveSelected + }; +%End + + QTextEdit(const QString &,const QString & = QString::null, + QWidget * /TransferThis/ = 0,const char * = 0); + QTextEdit(QWidget * /TransferThis/ = 0,const char * = 0); + + void setPalette(const QPalette &); + + QString text() const; + QString text(int) const; + TextFormat textFormat() const; + QString context() const; + QString documentTitle() const; + + void getSelection(int *,int *,int *,int *,int = 0) const; + + // We implement find() as two separate methods as it's the easiest way + // to handle the somewhat strange Qt interface. + virtual bool find(const QString &,bool,bool,bool = 1); + virtual bool find(const QString &,bool,bool,bool,int * /In,Out/, + int * /In,Out/); + + int paragraphs() const; + int lines() const; + int linesOfParagraph(int) const; + int lineOfChar(int,int); + int length() const; + QRect paragraphRect(int) const; + int paragraphAt(const QPoint &) const; + + // Note that this is handwritten code because the generated code would + // return the values in the (correct but) reverse order. + SIP_PYTUPLE charAt(const QPoint &) const; +%MethodCode + int para, index; + + Py_BEGIN_ALLOW_THREADS + index = sipCpp -> QTextEdit::charAt(*a0,¶); + Py_END_ALLOW_THREADS + + sipRes = sipBuildResult(&sipIsErr,"(ii)",para,index); +%End + + int paragraphLength(int) const; + + QStyleSheet *styleSheet() const; + QMimeSourceFactory *mimeSourceFactory() const; + + QBrush paper() const; + bool linkUnderline() const; + + int heightForWidth(int) const; + + bool hasSelectedText() const; + QString selectedText() const; + bool isUndoAvailable() const; + bool isRedoAvailable() const; + + WordWrap wordWrap() const; + int wrapColumnOrWidth() const; + WrapPolicy wrapPolicy() const; + + int tabStopWidth() const; + + QString anchorAt(const QPoint &); +%If (Qt_3_1_0 -) + QString anchorAt(const QPoint &,AnchorAttribute); +%End + + QSize sizeHint() const; + + bool isReadOnly() const; + + void getCursorPosition(int *,int *) const; + + bool isModified() const; + bool italic() const; + bool bold() const; + bool underline() const; + QString family() const; + int pointSize() const; + QColor color() const; + QFont font() const; +%If (Qt_3_1_0 -) + QFont currentFont() const; +%End + int alignment() const; + int undoDepth() const; + + // These are undocumented and marked as "don't use". + //virtual bool getFormat(int,int,QFont *,QColor *,VerticalAlignment *); + //virtual bool getParagraphFormat(int,QFont *,QColor *, + // VerticalAlignment *,int *, + // QStyleSheetItem::DisplayMode *, + // QStyleSheetItem::ListStyle *, + // int *); + + bool isOverwriteMode() const; + QColor paragraphBackgroundColor(int) const; + + bool isUndoRedoEnabled() const; + bool eventFilter(QObject *,QEvent *); +%If (Qt_3_1_0 -) + bool tabChangesFocus() const; + + // Qt defines the following as uint rather than int because it uses the + // AutoFormatting enum as a set of flags. Because SIP implements enums + // as a subclass of int they are always signed. AutoAll is defined as + // 0xffffffff which Python converts to -1 and then fails to convert it + // to an unsigned. For the moment we just lie to SIP about the type + // and let the compiler handle it. + void setAutoFormatting(int); + int autoFormatting() const; +%End +%If (Qt_3_3_0 -) + QSyntaxHighlighter *syntaxHighlighter() const; +%End + +public slots: + void setEnabled(bool); + virtual void setMimeSourceFactory(QMimeSourceFactory *); + virtual void setStyleSheet(QStyleSheet *); + virtual void scrollToAnchor(const QString &); + virtual void setPaper(const QBrush &); + virtual void setLinkUnderline(bool); + + virtual void setWordWrap(WordWrap); + virtual void setWrapColumnOrWidth(int); + virtual void setWrapPolicy(WrapPolicy); + + virtual void copy(); + virtual void append(const QString &); + + void setText(const QString &); + virtual void setText(const QString &,const QString &); + virtual void setTextFormat(TextFormat); + + virtual void selectAll(bool = 1); + virtual void setTabStopWidth(int); + virtual void zoomIn(int); + virtual void zoomIn(); + virtual void zoomOut(int); + virtual void zoomOut(); + virtual void zoomTo(int); + + virtual void sync(); + virtual void setReadOnly(bool); + + virtual void undo(); + virtual void redo(); + virtual void cut(); + virtual void paste(); + virtual void pasteSubType(const QCString &); + virtual void clear(); + virtual void del() /PyName=delChar/; + virtual void indent(); + virtual void setItalic(bool); + virtual void setBold(bool); + virtual void setUnderline(bool); + virtual void setFamily(const QString &); + virtual void setPointSize(int); + virtual void setColor(const QColor &); + virtual void setFont(const QFont &); + virtual void setVerticalAlignment(VerticalAlignment); + virtual void setAlignment(int); + virtual void setParagType(QStyleSheetItem::DisplayMode, + QStyleSheetItem::ListStyle); + virtual void setCursorPosition(int,int); + virtual void setSelection(int,int,int,int,int = 0); + virtual void setSelectionAttributes(int,const QColor &,bool); + virtual void setModified(bool); + virtual void resetFormat(); + virtual void setUndoDepth(int); +// Marked as internal in the Qt3 beta. +// virtual void setFormat(QTextFormat *,int); + virtual void ensureCursorVisible(); + virtual void placeCursor(const QPoint &,QTextCursor * = 0); + virtual void moveCursor(CursorAction,bool); + virtual void doKeyboardAction(KeyboardAction); + virtual void removeSelectedText(int = 0); + virtual void removeSelection(int = 0); + virtual void setCurrentFont(const QFont &); + virtual void setOverwriteMode(bool); + + virtual void scrollToBottom(); + +%If (Qt_3_1_0 -) + void insert(const QString &,uint = CheckNewLines | RemoveSelected); + virtual void insert(const QString &,bool,bool = 1,bool = 1); +%End +%If (- Qt_3_1_0) + virtual void insert(const QString &,bool = 0,bool = 1,bool = 1); +%End + virtual void insertAt(const QString &,int,int); + virtual void removeParagraph(int); + virtual void insertParagraph(const QString &,int); + + virtual void setParagraphBackgroundColor(int,const QColor &); + virtual void clearParagraphBackground(int); + + virtual void setUndoRedoEnabled(bool); +%If (Qt_3_1_0 -) + void setTabChangesFocus(bool); + + void polish(); +%End +%If (Qt_3_2_0 -) + void setMaxLogLines(int); + int maxLogLines(); +%End + +signals: + void textChanged(); + void selectionChanged(); + void copyAvailable(bool); + void undoAvailable(bool); + void redoAvailable(bool); + void currentFontChanged(const QFont &); + void currentColorChanged(const QColor &); + void currentAlignmentChanged(int); + void currentVerticalAlignmentChanged(VerticalAlignment); + void cursorPositionChanged(QTextCursor *); + void cursorPositionChanged(int,int); + void returnPressed(); + void modificationChanged(bool); +%If (Qt_3_1_0 -) + void clicked(int,int); + void doubleClicked(int,int); +%End + +protected: + void repaintChanged(); + void updateStyles(); + void drawContents(QPainter *,int,int,int,int); + bool event(QEvent *); + void keyPressEvent(QKeyEvent *); + void resizeEvent(QResizeEvent *); + void viewportResizeEvent(QResizeEvent *); + void contentsMousePressEvent(QMouseEvent *); + void contentsMouseMoveEvent(QMouseEvent *); + void contentsMouseReleaseEvent(QMouseEvent *); + void contentsMouseDoubleClickEvent(QMouseEvent *); + void contentsWheelEvent(QWheelEvent *); + void imStartEvent(QIMEvent *); + void imComposeEvent(QIMEvent *); + void imEndEvent(QIMEvent *); + void contentsDragEnterEvent(QDragEnterEvent *); + void contentsDragMoveEvent(QDragMoveEvent *); + void contentsDragLeaveEvent(QDragLeaveEvent *); + void contentsDropEvent(QDropEvent *); + void contentsContextMenuEvent(QContextMenuEvent *); + bool focusNextPrevChild(bool); + QTextDocument *document() const; + QTextCursor *textCursor() const; + void setDocument(QTextDocument *); + virtual QPopupMenu *createPopupMenu(const QPoint &) /Factory/; + virtual QPopupMenu *createPopupMenu() /Factory/; + void drawCursor(bool); + + void windowActivationChange(bool); + +protected slots: + virtual void doChangeInterval(); +%If (Qt_3_1_0 -) + void sliderReleased(); +%End + +private: +%If (Qt_3_1_0 -) + QTextEdit(const QTextEdit &); +%End +}; + +%End diff --git a/sip/qt/qtextstream.sip b/sip/qt/qtextstream.sip new file mode 100644 index 0000000..7e8abcd --- /dev/null +++ b/sip/qt/qtextstream.sip @@ -0,0 +1,231 @@ +// This is the SIP interface definition for QTextStream, QTextIStream and +// QTextOStream. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QTextStream + + QTextStream + FILE *fp + int mode + + +Not implemented. + + + + QTextStream &readRawBytes + char *buf + uint len + + +Not yet implemented. + + + + QTextStream &writeRawBytes + const char *buf + uint len + + +Not yet implemented. + + + +QTextIStream (Qt v2+) + + QTextIStream + FILE *fp + int mode + + +Not implemented. + + + +QTextOStream (Qt v2+) + + QTextOStream + FILE *fp + int mode + + +Not implemented. + + +%End + + +class QTextStream +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_2_00 - Qt_2_2_0) + enum Encoding { + Locale, + Latin1, + Unicode, + UnicodeNetworkOrder, + UnicodeReverse, + RawUnicode + }; +%End +%If (Qt_2_2_0 -) + enum Encoding { + Locale, + Latin1, + Unicode, + UnicodeNetworkOrder, + UnicodeReverse, + RawUnicode, + UnicodeUTF8 + }; +%End + + QTextStream(); + QTextStream(QIODevice *); +%If (Qt_2_00 -) + QTextStream(QString *,int); +%End + QTextStream(QByteArray,int); +// QTextStream(FILE *,int); + +%If (Qt_2_00 -) + void setEncoding(Encoding); + void setCodec(QTextCodec *); +%End +%If (Qt_3_1_0 -) + QTextCodec *codec(); +%End + + QIODevice *device() const; + void setDevice(QIODevice *); + void unsetDevice(); + +%If (Qt_2_00 -) + bool atEnd() const; +%End + bool eof() const; + +// QTextStream &readRawBytes(char *,uint) /ReleaseGIL/; +// QTextStream &writeRawBytes(const char *,uint) /ReleaseGIL/; + + QString readLine() /ReleaseGIL/; +%If (Qt_2_00 -) + QString read() /ReleaseGIL/; + void skipWhiteSpace(); +%End + + enum { + skipws, + left, + right, + internal, + bin, + oct, + dec, + hex, + showbase, + showpoint, + uppercase, + showpos, + scientific, + fixed + }; + + static const int basefield; + static const int adjustfield; + static const int floatfield; + + int flags() const; + int flags(int); + int setf(int); + int setf(int,int); + int unsetf(int); + + void reset(); + + int width() const; + int width(int); + int fill() const; + int fill(int); + int precision() const; + int precision(int); + +%If (Qt_3_0_0 -) + // These are defined in qmainwindow.h as global operators so we have + // to implement them here and pretend they are class operators. + QTextStream &operator<<(const QMainWindow &); + QTextStream &operator>>(QMainWindow &); + + // These are defined in qdockarea.h as global operators so we have + // to implement them here and pretend they are class operators. + QTextStream &operator<<(const QDockArea &); + QTextStream &operator>>(QDockArea &); +%End + +private: + QTextStream(const QTextStream &); +}; + + +%If (Qt_2_00 -) + +class QTextIStream : QTextStream +{ +%TypeHeaderCode +#include +%End + +public: + QTextIStream(QString *); + QTextIStream(QByteArray); +// QTextIStream(FILE *); + +private: +%If (Qt_3_1_0 -) + QTextIStream(const QTextIStream &); +%End +}; + + +class QTextOStream : QTextStream +{ +%TypeHeaderCode +#include +%End + +public: + QTextOStream(QString *); + QTextOStream(QByteArray); +// QTextOStream(FILE *); + +private: +%If (Qt_3_1_0 -) + QTextOStream(const QTextOStream &); +%End +}; + +%End diff --git a/sip/qt/qtextview.sip b/sip/qt/qtextview.sip new file mode 100644 index 0000000..d79a34a --- /dev/null +++ b/sip/qt/qtextview.sip @@ -0,0 +1,128 @@ +// This is the SIP interface definition for QTextView. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QTextView (Qt v2+) + +QTextView is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QTextView : QTextEdit +{ +%TypeHeaderCode +#include +%End + +public: + QTextView(QWidget * /TransferThis/ = 0,const char * = 0); + QTextView(const QString &,const QString & = QString::null, + QWidget * /TransferThis/ = 0,const char * = 0); + +private: +%If (Qt_3_1_0 -) + QTextView(const QTextView &); +%End +}; + +%End + + +%If (Qt_2_00 - Qt_3_0_0) + +class QTextView : QScrollView +{ +%TypeHeaderCode +#include +%End + +public: + QTextView(QWidget * /TransferThis/ = 0,const char * = 0); + QTextView(const QString &,const QString & = QString::null, + QWidget * /TransferThis/ = 0,const char * = 0); + +%If (- Qt_2_1_0) + virtual void setText(const QString &,const QString & = QString::null); +%End +%If (Qt_2_1_0 -) + virtual void setText(const QString &,const QString &); + void setText(const QString &); +%End + virtual QString text() const; + virtual QString context() const; + Qt::TextFormat textFormat() const; + void setTextFormat(Qt::TextFormat); + QStyleSheet *styleSheet() const; + void setStyleSheet(QStyleSheet *); + void setPaper(const QBrush &); + const QBrush &paper(); + void setPaperColorGroup(const QColorGroup &); + const QColorGroup &paperColorGroup() const; + void setLinkColor(const QColor &); + const QColor &linkColor() const; + void setLinkUnderline(bool); + bool linkUnderline() const; + void setMimeSourceFactory(QMimeSourceFactory *); + QMimeSourceFactory *mimeSourceFactory() const; + QString documentTitle() const; + int heightForWidth(int) const; +%If (Qt_2_1_0 -) + void append(const QString &); + bool hasSelectedText() const; + QString selectedText() const; +%End + +public slots: +%If (Qt_2_1_0 -) +%If (Qt_CLIPBOARD) + void copy(); +%End + void selectAll(); +%End + +protected: + void drawContentsOffset(QPainter *,int,int,int,int,int,int); + void resizeEvent(QResizeEvent *); + void viewportResizeEvent(QResizeEvent *); + void viewportMousePressEvent(QMouseEvent *); + void viewportMouseReleaseEvent(QMouseEvent *); + void viewportMouseMoveEvent(QMouseEvent *); + void keyPressEvent(QKeyEvent *); +%If (Qt_2_1_0 -) + void showEvent(QShowEvent *); + void focusInEvent(QFocusEvent *); + void focusOutEvent(QFocusEvent *); +%End +// QRichText &richText() const; + void paletteChange(const QPalette &); + +private: +%If (Qt_2_1_0 -) + QTextView(const QTextView &); +%End +}; + +%End diff --git a/sip/qt/qthread.sip b/sip/qt/qthread.sip new file mode 100644 index 0000000..29966c6 --- /dev/null +++ b/sip/qt/qthread.sip @@ -0,0 +1,98 @@ +// This is the SIP interface definition for QThread. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QThread (Qt v2.2+) + +QThread is fully implemented. + + +%End + + +%If (Qt_THREAD_SUPPORT) +%If (Qt_2_2_0 -) + +class QThread : Qt /CreatesThread/ +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_0) + static HANDLE currentThread(); +%End +%If (Qt_3_0_0 -) + static Qt::HANDLE currentThread(); +%End + static void postEvent(QObject *,QEvent * /Transfer/) /ReleaseGIL/; +%If (Qt_3_0_0 -) + static void initialize(); + static void cleanup(); +%End + + static void exit() /ReleaseGIL/; + +%If (Qt_3_1_0 -) + QThread(unsigned int); +%End + QThread(); + + bool wait(unsigned long = ULONG_MAX) /ReleaseGIL/; + +%If (Qt_3_2_0 -) + enum Priority { + IdlePriority, + LowestPriority, + LowPriority, + NormalPriority, + HighPriority, + HighestPriority, + TimeCriticalPriority, + InheritPriority + }; + + void start(Priority) /ReleaseGIL/; +%End + void start() /ReleaseGIL/; + +%If (Qt_3_1_0 -) + void terminate(); +%End + + bool finished() const; + bool running() const; + +protected: + virtual void run() = 0 /NewThread/; + + static void sleep(unsigned long) /ReleaseGIL/; + static void msleep(unsigned long) /ReleaseGIL/; + static void usleep(unsigned long) /ReleaseGIL/; + +private: + QThread(const QThread &); +}; + +%End +%End diff --git a/sip/qt/qtimer.sip b/sip/qt/qtimer.sip new file mode 100644 index 0000000..62d20b2 --- /dev/null +++ b/sip/qt/qtimer.sip @@ -0,0 +1,59 @@ +// This is the SIP interface definition for QTimer. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QTimer + +QTimer is fully implemented. + + +%End + + +class QTimer : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QTimer(QObject * /TransferThis/ = 0,char * = 0); + + bool isActive() const; + int start(int,bool = 0); + void changeInterval(int); + void stop(); + static void singleShot(int,SIP_RXOBJ_CON,SIP_SLOT_CON()); + +%If (Qt_3_1_0 -) + int timerId() const; +%End + +signals: + void timeout(); + +protected: + bool event(QEvent *); + +private: + QTimer(const QTimer &); +}; diff --git a/sip/qt/qtmod.sip b/sip/qt/qtmod.sip new file mode 100644 index 0000000..045c779 --- /dev/null +++ b/sip/qt/qtmod.sip @@ -0,0 +1,286 @@ +// This is the SIP interface definition for the qt module of PyQt. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Module qt 2 + +%Plugin PyQt3 + +%Include versions.sip +%Include copying.sip + + +unsigned PYQT_VERSION; +const char *PYQT_VERSION_STR; + +%ModuleCode +static unsigned PYQT_VERSION = 0x031201; +static const char *PYQT_VERSION_STR = "3.18.1"; +%End + + +// Hook into the VendorID package if it is enabled. +%Feature VendorID + +%If (VendorID) + +%ModuleCode +#include +%End + +%PreInitialisationCode + if (!vendorid_check()) + { + PyErr_SetString(PyExc_RuntimeError, "PyQt cannot be used with this Python interpreter"); + return; + } +%End + +%End + +%DefaultMetatype qt.pyqtWrapperType +%DefaultSupertype qt.pyqtWrapper + +// Include the interface definitions for each class. + +// These contain enum and type definitions that need to be defined before they +// are used so they do not seem to be classes. + +%Include qglobal.sip +%Include qnamespace.sip +%Include qwindowdefs.sip +%Include qpen.sip + +%Include qpaintdevice.sip + +%Include qpixmap.sip +%Include qbitmap.sip + +%Include qsize.sip +%Include qsizepolicy.sip + +%Include qaccel.sip +%Include qaction.sip +%Include qapplication.sip +%Include qarray.sip +%Include qassistantclient.sip +%Include qbrush.sip +%Include qbutton.sip +%Include qbuttongroup.sip +%Include qbytearray.sip +%Include qcdestyle.sip +%Include qcheckbox.sip +%Include qclipboard.sip +%Include qcolor.sip +%Include qcolordialog.sip +%Include qcolorgroup.sip +%Include qcombobox.sip +%Include qcommonstyle.sip +%Include qcstring.sip +%Include qcursor.sip +%Include qdatastream.sip +%Include qdatetime.sip +%Include qdatetimeedit.sip +%Include qdesktopwidget.sip +%Include qdial.sip +%Include qdialog.sip +%Include qdir.sip +%Include qdockarea.sip +%Include qdockwindow.sip +%Include qdragobject.sip +%Include qdrawutil.sip +%Include qdropsite.sip +%Include qerrormessage.sip +%Include qevent.sip +%Include qeventloop.sip +%Include qfile.sip +%Include qfiledialog.sip +%Include qfileinfo.sip +%Include qfont.sip +%Include qfontdatabase.sip +%Include qfontdialog.sip +%Include qfontinfo.sip +%Include qfontmetrics.sip +%Include qframe.sip +%Include qgmanager.sip +%Include qgrid.sip +%Include qgridview.sip +%Include qgroupbox.sip +%Include qhbox.sip +%Include qhbuttongroup.sip +%Include qheader.sip +%Include qhgroupbox.sip +%Include qiconset.sip +%Include qiconview.sip +%Include qimage.sip +%Include qinputdialog.sip +%Include qinterlacestyle.sip +%Include qiodevice.sip +%Include qkeycode.sip +%Include qkeysequence.sip +%Include qlabel.sip +%Include qlayout.sip +%Include qlcdnumber.sip +%Include qlibrary.sip +%Include qlineedit.sip +%Include qlist.sip +%Include qlistbox.sip +%Include qlistview.sip +%Include qlocale.sip +%Include qmainwindow.sip +%Include qmemarray.sip +%Include qmenubar.sip +%Include qmenudata.sip +%Include qmessagebox.sip +%Include qmetaobject.sip +%Include qmime.sip +%Include qmotifplusstyle.sip +%Include qmotifstyle.sip +%Include qmovie.sip +%Include qmutex.sip +%Include qmultilinedit.sip +%Include qnetworkprotocol.sip +%Include qobject.sip +%Include qobjectcleanuphandler.sip +%Include qobjectlist.sip +%Include qpaintdevicemetrics.sip +%Include qpainter.sip +%Include qpair.sip +%Include qpalette.sip +%Include qpicture.sip +%Include qpixmapcache.sip +%Include qplatinumstyle.sip +%Include qpoint.sip +%Include qpointarray.sip +%Include qpopupmenu.sip +%Include qprintdialog.sip +%Include qprinter.sip +%Include qprocess.sip +%Include qprogressbar.sip +%Include qprogressdialog.sip +%Include qptrlist.sip +%Include qpushbutton.sip +%Include qradiobutton.sip +%Include qrangecontrol.sip +%Include qrect.sip +%Include qregexp.sip +%Include qregion.sip +%Include qscrollbar.sip +%Include qscrollview.sip +%Include qsemaphore.sip +%Include qsemimodal.sip +%Include qsessionmanager.sip +%Include qsettings.sip +%Include qsgistyle.sip +%Include qsignalmapper.sip +%Include qsimplerichtext.sip +%Include qsizegrip.sip +%Include qslider.sip +%Include qsocketnotifier.sip +%Include qsound.sip +%Include qspinbox.sip +%Include qsplashscreen.sip +%Include qsplitter.sip +%Include qstatusbar.sip +%Include qstring.sip +%Include qstringlist.sip +%Include qstrlist.sip +%Include qstyle.sip +%Include qstylefactory.sip +%Include qstylesheet.sip +%Include qsyntaxhighlighter.sip +%Include qtabbar.sip +%Include qtabdialog.sip +%Include qtableview.sip +%Include qtabwidget.sip +%Include qtextbrowser.sip +%Include qtextcodec.sip +%Include qtextedit.sip +%Include qtextstream.sip +%Include qtextview.sip +%Include qthread.sip +%Include qtimer.sip +%Include qtoolbar.sip +%Include qtoolbox.sip +%Include qtoolbutton.sip +%Include qtooltip.sip +%Include qtranslator.sip +%Include qurl.sip +%Include qurlinfo.sip +%Include qurloperator.sip +%Include quuid.sip +%Include qvalidator.sip +%Include qvaluelist.sip +%Include qvariant.sip +%Include qvbox.sip +%Include qvbuttongroup.sip +%Include qvgroupbox.sip +%Include qwaitcondition.sip +%Include qwhatsthis.sip +%Include qwidget.sip +%Include qwidgetlist.sip +%Include qwidgetstack.sip +%Include qwindow.sip +%Include qwindowsstyle.sip +%Include qwindowsxpstyle.sip +%Include qwizard.sip +%Include qwmatrix.sip +%Include qworkspace.sip + + +// The build file templates. + +%Makefile qt.pro.in +# The project file for the qt module. +# +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +TEMPLATE = lib +TARGET = @BLX_TARGET_LIB@ +DESTDIR = @PYQT_MODDIR@ +CONFIG += @BLX_CONFIG_LIB@ @PYQT_WARN@ +INCLUDEPATH = @BLX_INCLUDEPATH@ +DEFINES = @BLX_DEFINES@ +LIBS += @PYQT_QASSISTANTCLIENT_LIB@ @BLX_LIBS@ +macx:QMAKE_LFLAGS += -framework Python + +SOURCES = $B + +HEADERS = $H +%End diff --git a/sip/qt/qtoolbar.sip b/sip/qt/qtoolbar.sip new file mode 100644 index 0000000..7143ba0 --- /dev/null +++ b/sip/qt/qtoolbar.sip @@ -0,0 +1,160 @@ +// This is the SIP interface definition for QToolBar. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QToolBar + +QToolBar is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QToolBar : QDockWindow +{ +%TypeHeaderCode +#include +%End + +public: + QToolBar(const QString &,QMainWindow * /TransferThis/,Dock = DockTop, + bool = 0,const char * = 0); + QToolBar(const QString &,QMainWindow *,QWidget * /TransferThis/, + bool = 0,const char * = 0,WFlags = 0); + QToolBar(QMainWindow * /TransferThis/ = 0,const char * = 0); + + void addSeparator(); + + void show(); + void hide(); + + QMainWindow *mainWindow() const; + + virtual void setStretchableWidget(QWidget *); + + bool event(QEvent *); + + virtual void setLabel(const QString &); + QString label() const; + + virtual void clear(); + + QSize minimumSize() const; + QSize minimumSizeHint() const; + + void setOrientation(Orientation); + void setMinimumSize(int,int); + +protected: + void resizeEvent(QResizeEvent *); + void styleChange(QStyle &); + +private: + QToolBar(const QToolBar &); +}; + +%End + + +%If (- Qt_3_0_0) + +class QToolBar : QWidget +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_2_00) + QToolBar(const char *,QMainWindow * /TransferThis/, + QMainWindow::ToolBarDock = QMainWindow::Top, + bool = 0,const char * = 0); + QToolBar(const char *,QMainWindow *,QWidget * /TransferThis/,bool = 0, + const char * = 0,WFlags = 0); +%End +%If (Qt_2_00 -) + QToolBar(const QString &,QMainWindow * /TransferThis/, + QMainWindow::ToolBarDock = QMainWindow::Top,bool = 0, + const char * = 0); + QToolBar(const QString &,QMainWindow *,QWidget * /TransferThis/,bool = 0, + const char * = 0,WFlags = 0); +%End + QToolBar(QMainWindow * /TransferThis/ = 0,const char * = 0); + + void addSeparator(); + +%If (- Qt_2_00) + enum Orientation + { + Horizontal, + Vertical + }; +%End + + virtual void setOrientation(Orientation); + Orientation orientation() const; + void show(); + QMainWindow *mainWindow(); + bool event(QEvent *); +%If (- Qt_2_00) + void setStretchableWidget(QWidget *); +%End +%If (Qt_2_00 -) + virtual void setStretchableWidget(QWidget *); + bool eventFilter(QObject *,QEvent *); + virtual void setLabel(const QString &); + QString label() const; +%End +%If (Qt_2_1_0 -) + void hide(); + void setHorizontalStretchable(bool); + void setVerticalStretchable(bool); + bool isHorizontalStretchable() const; + bool isVerticalStretchable() const; + void clear(); + QSize minimumSize() const; + QSize minimumSizeHint() const; +%End + +protected: + void paintEvent(QPaintEvent *); +%If (Qt_2_1_0 -) + void resizeEvent(QResizeEvent *); +%End +%If (Qt_2_3_0 -) + void styleChange(QStyle &); +%End + +signals: +%If (Qt_2_1_0 -) + void orientationChanged(Orientation); +%End + +private: +%If (Qt_2_1_0 -) + QToolBar(const QToolBar &); +%End +}; + +%End diff --git a/sip/qt/qtoolbox.sip b/sip/qt/qtoolbox.sip new file mode 100644 index 0000000..804d7dd --- /dev/null +++ b/sip/qt/qtoolbox.sip @@ -0,0 +1,88 @@ +// This is the SIP interface definition for QToolBox. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QToolBox (Qt v3.2.0+) + +QToolBox is fully implemented. + + +%End + + +%If (Qt_3_2_0 -) + +class QToolBox : QFrame +{ +%TypeHeaderCode +#include +%End + +public: + QToolBox(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); + ~QToolBox(); + + int addItem(QWidget * /Transfer/,const QString &); + int addItem(QWidget * /Transfer/,const QIconSet &,const QString &); + int insertItem(int,QWidget * /Transfer/,const QString &); + int insertItem(int,QWidget * /Transfer/,const QIconSet &, + const QString &); + + // On return the QWidget will have the QToolBox as it's parent, so we + // don't transfer ownership back. + int removeItem(QWidget *); + + void setItemEnabled(int,bool); + bool isItemEnabled(int) const; + + void setItemLabel(int,const QString &); + QString itemLabel(int) const; + + void setItemIconSet(int,const QIconSet &); + QIconSet itemIconSet(int) const; + + void setItemToolTip(int,const QString &); + QString itemToolTip(int) const; + + QWidget *currentItem() const; + void setCurrentItem(QWidget *); + + int currentIndex() const; + QWidget *item(int) const; + int indexOf(QWidget *) const; + int count() const; + +public slots: + void setCurrentIndex(int); + +signals: + void currentChanged(int); + +protected: + virtual void itemInserted(int); + virtual void itemRemoved(int); + void showEvent(QShowEvent *); + void frameChanged(); + void styleChange(QStyle &); +}; + +%End diff --git a/sip/qt/qtoolbutton.sip b/sip/qt/qtoolbutton.sip new file mode 100644 index 0000000..7de2e90 --- /dev/null +++ b/sip/qt/qtoolbutton.sip @@ -0,0 +1,199 @@ +// This is the SIP interface definition for QToolButton. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QToolButton + +QToolButton is fully implemented. + + +%End + + +class QToolButton : QButton +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_1_0 -) + enum TextPosition { +%If (Qt_3_2_0 -) + BesideIcon, + BelowIcon, +%End + Right, // Obsolete + Under // Obsolete + }; +%End + +%If (- Qt_2_00) + QToolButton(QWidget * /TransferThis/ = 0,const char * = 0); + QToolButton(const QPixmap &,const char *,const char *,SIP_RXOBJ_CON, + SIP_SLOT_CON(),QToolBar * /TransferThis/,const char * = 0); + QToolButton(QIconSet,const char *,const char *,SIP_RXOBJ_CON, + SIP_SLOT_CON(),QToolBar * /TransferThis/,const char * = 0); +%End +%If (Qt_2_00 -) + QToolButton(QWidget * /TransferThis/,const char * = 0); +%End +%If (Qt_2_00 - Qt_3_0_0) + QToolButton(const QPixmap &,const QString &,const QString &, + SIP_RXOBJ_CON,SIP_SLOT_CON(),QToolBar * /TransferThis/, + const char * = 0); +%End +%If (Qt_2_00 -) + QToolButton(const QIconSet &,const QString &,const QString &, + SIP_RXOBJ_CON,SIP_SLOT_CON(),QToolBar * /TransferThis/, + const char * = 0); +%End +%If (Qt_2_1_0 -) + QToolButton(ArrowType,QWidget * /TransferThis/,const char * = 0); +%End + + QSize sizeHint() const; +%If (Qt_3_0_0 -) + QSize minimumSizeHint() const; +%End +%If (Qt_2_00 - Qt_3_0_0) + QSizePolicy sizePolicy() const; +%End + +%If (Qt_2_1_0 - Qt_3_0_0) + void setOnIconSet(const QIconSet &); + void setOffIconSet(const QIconSet &); +%End +%If (- Qt_2_00) + void setIconSet(const QIconSet &); +%End +%If (Qt_2_00 - Qt_3_0_0) + virtual void setIconSet(const QIconSet &,bool = 0); +%End +%If (Qt_2_1_0 - Qt_3_0_0) + QIconSet onIconSet() const; + QIconSet offIconSet() const; +%End +%If (- Qt_2_00) + QIconSet iconSet() const; +%End +%If (Qt_2_00 - Qt_3_0_0) + QIconSet iconSet(bool = 0) const; +%End +%If (Qt_3_0_0 -) + virtual void setIconSet(const QIconSet &); + QIconSet iconSet() const; +%End + + bool usesBigPixmap() const; + bool usesTextLabel() const; +%If (- Qt_2_00) + const char *textLabel() const; +%End +%If (Qt_2_00 -) + QString textLabel() const; +%End + +%If (Qt_2_1_0 -) + void setPopup(QPopupMenu *); + QPopupMenu* popup() const; + + void setPopupDelay(int); + int popupDelay() const; +%End + +%If (Qt_3_0_0 -) + void openPopup(); +%End + +%If (Qt_2_1_0 -) + void setAutoRaise(bool); + bool autoRaise() const; +%End +%If (Qt_3_1_0 -) + TextPosition textPosition() const; +%End + +%If (Qt_3_2_0 -) + void setText(const QString &); +%End + +public slots: + virtual void setUsesBigPixmap(bool); + virtual void setUsesTextLabel(bool); +%If (- Qt_2_00) + virtual void setTextLabel(const char *,bool = 1); +%End +%If (Qt_2_00 - Qt_3_0_0) + virtual void setTextLabel(const QString &,bool = 1); +%End +%If (Qt_3_0_0 -) + virtual void setTextLabel(const QString &,bool); +%End + +%If (- Qt_2_00) + void setToggleButton(bool); +%End +%If (Qt_2_00 -) + virtual void setToggleButton(bool); +%End + +%If (- Qt_2_00) + void setOn(bool); +%End +%If (Qt_2_00 -) + virtual void setOn(bool); +%End + void toggle(); +%If (Qt_3_0_0 -) + // This was actually introduced in Qt v2.1.0 but gives signature + // conflict until Qt v3.0.0. + void setTextLabel(const QString &); +%End +%If (Qt_3_1_0 -) + void setTextPosition(TextPosition); +%End + +protected: +%If (Qt_3_0_0 -) + void mousePressEvent(QMouseEvent *); +%End + void drawButton(QPainter *); + void drawButtonLabel(QPainter *); + + void enterEvent(QEvent *); + void leaveEvent(QEvent *); +%If (Qt_2_1_0 -) + void moveEvent(QMoveEvent *); +%End + + bool uses3D() const; + +%If (Qt_3_0_0 -) + bool eventFilter(QObject *,QEvent *); +%End + +private: +%If (Qt_2_1_0 -) + QToolButton(const QToolButton &); +%End +}; diff --git a/sip/qt/qtooltip.sip b/sip/qt/qtooltip.sip new file mode 100644 index 0000000..5dacad7 --- /dev/null +++ b/sip/qt/qtooltip.sip @@ -0,0 +1,169 @@ +// This is the SIP interface definition for QToolTip and QToolTipGroup. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QToolTip + +QToolTip is fully implemented. + + + +QToolTipGroup + +QToolTipGroup is fully implemented. + + +%End + + +class QToolTipGroup : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QToolTipGroup(QObject * /TransferThis/,const char * = 0); + +%If (Qt_2_00 -) + bool delay() const; +%End +%If (Qt_2_1_0 -) + bool enabled() const; +%End + +public slots: +%If (Qt_2_00 -) + void setDelay(bool); +%End +%If (Qt_2_1_0 -) + void setEnabled(bool); +%End + +signals: +%If (- Qt_2_00) + void showTip(const char *); +%End +%If (Qt_2_00 -) + void showTip(const QString &); +%End + void removeTip(); + +private: + QToolTipGroup(const QToolTipGroup &); +}; + + +%If (- Qt_2_00) + +class QToolTip +{ +%TypeHeaderCode +#include +%End + +public: + QToolTip(QWidget *,QToolTipGroup * = 0); + + static void add(QWidget *,const char *); + static void add(QWidget *,const char *,QToolTipGroup *,const char *); + static void remove(QWidget *); + static void add(QWidget *,const QRect &,const char *); + static void add(QWidget *,const QRect &,const char *,QToolTipGroup *,const char *); + static void remove(QWidget *,const QRect &); + static QFont font(); + static void setFont(const QFont &); + static QPalette palette(); + static void setPalette(const QPalette &); + QWidget *parentWidget() const; + QToolTipGroup *group() const; + +protected: + virtual void maybeTip(const QPoint &) = 0; + void tip(const QRect &,const char *); + void tip(const QRect &,const char *,const char *); + void clear(); +}; + +%End + +%If (Qt_2_00 -) + +class QToolTip : Qt +{ +%TypeHeaderCode +#include +%End + +public: + QToolTip(QWidget *,QToolTipGroup * = 0); + + static void add(QWidget *,const QString &); + static void add(QWidget *,const QString &,QToolTipGroup *, + const QString &); + static void remove(QWidget *); + + static void add(QWidget *,const QRect &,const QString &); + static void add(QWidget *,const QRect &,const QString &, + QToolTipGroup *,const QString &); + static void remove(QWidget *,const QRect &); + +%If (Qt_3_0_0 -) + static QString textFor(QWidget *,const QPoint & = QPoint()); +%End + +%If (Qt_2_1_0 -) + static void hide(); +%End + + static QFont font(); + static void setFont(const QFont &); + static QPalette palette(); + static void setPalette(const QPalette &); + +%If (Qt_3_0_0 -) + static void setGloballyEnabled(bool); + static bool isGloballyEnabled(); +%End +%If (Qt_2_1_0 - Qt_3_0_0) + static void setEnabled(bool); + static bool enabled(); +%End +%If (Qt_3_1_0 -) + static void setWakeUpDelay(int); +%End + + QWidget *parentWidget() const; + QToolTipGroup *group() const; + +protected: + virtual void maybeTip(const QPoint &) = 0; + void tip(const QRect &,const QString &); + void tip(const QRect &,const QString &,const QString &); +%If (Qt_3_1_0 -) + void tip(const QRect &,const QString &,const QRect &); + void tip(const QRect &,const QString &,const QString &,const QRect &); +%End + void clear(); +}; + +%End diff --git a/sip/qt/qtranslator.sip b/sip/qt/qtranslator.sip new file mode 100644 index 0000000..08200ad --- /dev/null +++ b/sip/qt/qtranslator.sip @@ -0,0 +1,177 @@ +// This is the SIP interface definition for QTranslator and QTranslatorMessage. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QTranslator (Qt v2+) + +QTranslator is fully implemented. + + + +QTranslatorMessage (Qt v2.2+) + +QTranslatorMessage is fully implemented. + + +%End + + +%If (Qt_2_2_0 -) + +class QTranslatorMessage +{ +%TypeHeaderCode +#include +%End + +public: + QTranslatorMessage(); + QTranslatorMessage(const char *,const char *,const char *, + const QString & = QString::null); + QTranslatorMessage(QDataStream &); + QTranslatorMessage(const QTranslatorMessage &); + + uint hash() const; + const char *context() const; + const char *sourceText() const; + const char *comment() const; + + void setTranslation(const QString &); + QString translation() const; + + enum Prefix { + NoPrefix, + Hash, + HashContext, + HashContextSourceText, + HashContextSourceTextComment + }; + +%If (- Qt_3_0_0) + void write(QDataStream &,bool, + Prefix = HashContextSourceTextComment) const /ReleaseGIL/; +%End +%If (Qt_3_0_0 -) + void write(QDataStream &,bool = 0, + Prefix = HashContextSourceTextComment) const /ReleaseGIL/; +%End + + Prefix commonPrefix(const QTranslatorMessage &) const; +}; + +%End + + +%If (Qt_2_00 -) + +class QTranslator : QObject +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_2_0 -) + QTranslator(QObject * /TransferThis/ = 0,const char * = 0); +%End +%If (- Qt_3_2_0) + QTranslator(QObject * /TransferThis/,const char * = 0); +%End + +%If (Qt_2_2_0 -) + QString find(const char *,const char *,const char *) const; +%End +%If (- Qt_3_0_0) + virtual QString find(const char *,const char *) const; +%End + +%If (Qt_2_2_0 - Qt_3_0_0) + QTranslatorMessage findMessage(const char *,const char *, + const char *) const; +%End +%If (Qt_3_0_0 - Qt_3_2_0) + virtual QTranslatorMessage findMessage(const char *,const char *, + const char *) const; +%End +%If (Qt_3_2_0 -) + virtual QTranslatorMessage findMessage(const char *,const char *, + const char * = 0) const; +%End + + bool load(const QString &,const QString & = QString::null, + const QString & = QString::null, + const QString & = QString::null); +%If (Qt_3_1_0 -) + bool load(const uchar *,int); +%End + + void clear(); + + enum SaveMode { + Everything, + Stripped + }; + + bool save(const QString &,SaveMode = Everything); + +%If (Qt_2_2_0 -) + void insert(const QTranslatorMessage &); +%End +%If (- Qt_3_0_0) + void insert(const char *,const char *,const QString &); +%End +%If (Qt_2_2_0 -) + void remove(const QTranslatorMessage &); +%End +%If (- Qt_3_0_0) + void remove(const char *,const char *); +%End +%If (- Qt_3_0_0) + bool contains(const char *,const char *) const; +%End +%If (Qt_2_2_0 - Qt_3_0_0) + bool contains(const char *,const char *,const char *) const; +%End +%If (Qt_3_0_0 -) + bool contains(const char *,const char *,const char * = 0) const; +%End + +%If (- Qt_3_0_0) + void squeeze(); +%End +%If (Qt_2_2_0 - Qt_3_0_0) + void squeeze(SaveMode); +%End +%If (Qt_3_0_0 -) + void squeeze(SaveMode = Everything); +%End + void unsqueeze(); + +%If (Qt_2_2_0 -) + QValueList messages() const; +%End + +private: + QTranslator(const QTranslator &); +}; + +%End diff --git a/sip/qt/qurl.sip b/sip/qt/qurl.sip new file mode 100644 index 0000000..7d343a9 --- /dev/null +++ b/sip/qt/qurl.sip @@ -0,0 +1,116 @@ +// This is the SIP interface definition for QUrl. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QUrl (Qt v2.1+) + +QUrl is fully implemented, including the +QString(), == and != +operators. + + +%End + + +%If (Qt_2_1_0 -) + +class QUrl +{ +%TypeHeaderCode +#include +%End + +public: + QUrl(); + QUrl(const QString &); + QUrl(const QUrl &); + QUrl(const QUrl &,const QString &,bool = 0); + + QString protocol() const; + virtual void setProtocol(const QString &); + + QString user() const; + virtual void setUser(const QString &); + bool hasUser() const; + + QString password() const; + virtual void setPassword(const QString &); + bool hasPassword() const; + + QString host() const; + virtual void setHost(const QString &); + bool hasHost() const; + + int port() const; + virtual void setPort(int); +%If (Qt_3_0_0 -) + bool hasPort() const; +%End + + QString path(bool = 1) const; + virtual void setPath(const QString &); + bool hasPath() const; + + virtual void setEncodedPathAndQuery(const QString &); + QString encodedPathAndQuery(); + + virtual void setQuery(const QString &); + QString query() const; + + QString ref() const; + virtual void setRef(const QString &); + bool hasRef() const; + + bool isValid() const; + bool isLocalFile() const; + + virtual void addPath(const QString &); + virtual void setFileName(const QString &); + + QString fileName() const; + QString dirPath() const; + + bool operator==(const QUrl &) const; + bool operator==(const QString &) const; + +%If (Qt_SIP_PRE_4_7_2) + // Qt doesn't implement these, but SIP doesn't support C++'s default + // handling of != when == is implemented. + bool operator!=(const QUrl &) const; + bool operator!=(const QString &) const; +%End + + static void decode(QString &); + static void encode(QString &); + + virtual QString toString(bool = 0,bool = 0) const; + + virtual bool cdUp(); + + static bool isRelativeUrl(const QString &); + +protected: + virtual void reset(); + virtual bool parse(const QString &); +}; + +%End diff --git a/sip/qt/qurlinfo.sip b/sip/qt/qurlinfo.sip new file mode 100644 index 0000000..7f2d5d3 --- /dev/null +++ b/sip/qt/qurlinfo.sip @@ -0,0 +1,96 @@ +// This is the SIP interface definition for QUrlInfo. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QUrlInfo (Qt v2.1+) + +QUrlInfo is fully implemented. + + +%End + + +%If (Qt_NETWORKPROTOCOL) +%If (Qt_2_1_0 -) + +class QUrlInfo +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_2_0 -) + enum PermissionSpec { + ReadOwner, WriteOwner, ExeOwner, + ReadGroup, WriteGroup, ExeGroup, + ReadOther, WriteOther, ExeOther + }; +%End + + QUrlInfo(); + QUrlInfo(const QUrlOperator &,const QString &); + QUrlInfo(const QUrlInfo &); + QUrlInfo(const QString &,int,const QString &,const QString &,uint, + const QDateTime &,const QDateTime &,bool,bool,bool,bool,bool, + bool); + QUrlInfo(const QUrl &,int,const QString &,const QString &,uint, + const QDateTime &,const QDateTime &,bool,bool,bool,bool,bool, + bool); + + virtual void setName(const QString &); + virtual void setDir(bool); + virtual void setFile(bool); + virtual void setSymLink(bool); + virtual void setOwner(const QString &); + virtual void setGroup(const QString &); + virtual void setSize(uint); + virtual void setWritable(bool); + virtual void setReadable(bool); + virtual void setPermissions(int); + virtual void setLastModified(const QDateTime &); + +%If (Qt_3_0_0 -) + bool isValid() const; +%End + + QString name() const; + int permissions() const; + QString owner() const; + QString group() const; + uint size() const; + QDateTime lastModified() const; + QDateTime lastRead() const; + bool isDir() const; + bool isFile() const; + bool isSymLink() const; + bool isWritable() const; + bool isReadable() const; + bool isExecutable() const; + + static bool greaterThan(const QUrlInfo &,const QUrlInfo &,int); + static bool lessThan(const QUrlInfo &,const QUrlInfo &,int); + static bool equal(const QUrlInfo &,const QUrlInfo &,int); +}; + +%End +%End diff --git a/sip/qt/qurloperator.sip b/sip/qt/qurloperator.sip new file mode 100644 index 0000000..b776516 --- /dev/null +++ b/sip/qt/qurloperator.sip @@ -0,0 +1,115 @@ +// This is the SIP interface definition for QUrlOperator. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QUrlOperator (Qt v2.1+) + + virtual bool isDir + bool *ok + + +This returns a tuple of the bool result and the +ok value. + + +%End + + +%If (Qt_NETWORKPROTOCOL) +%If (Qt_2_1_0 -) + +class QUrlOperator : QObject, QUrl +{ +%TypeHeaderCode +#include +%End + +public: + QUrlOperator(); + QUrlOperator(const QString &); + QUrlOperator(const QUrlOperator &); + QUrlOperator(const QUrlOperator &,const QString &,bool = 0); + + virtual void setPath(const QString &); + virtual bool cdUp(); + + virtual const QNetworkOperation *listChildren(); + virtual const QNetworkOperation *mkdir(const QString &); + virtual const QNetworkOperation *remove(const QString &); + virtual const QNetworkOperation *rename(const QString &, + const QString &); + virtual const QNetworkOperation *get(const QString & = QString::null); + virtual const QNetworkOperation *put(const QByteArray &, + const QString & = QString::null); +%If (- Qt_3_0_0) + virtual QList copy(const QString &,const QString &, + bool = 0); +%End +%If (Qt_3_0_0 -) + virtual QPtrList copy(const QString &, + const QString &,bool = 0, + bool = 1); +%End + virtual void copy(const QStringList &,const QString &,bool = 0); + virtual bool isDir(bool * = 0); + + virtual void setNameFilter(const QString &); + QString nameFilter() const; + + virtual QUrlInfo info(const QString &) const; + + virtual void stop(); + +signals: + void newChildren(const QValueList &,QNetworkOperation *); + void finished(QNetworkOperation *); + void start(QNetworkOperation *); + void createdDirectory(const QUrlInfo &,QNetworkOperation *); + void removed(QNetworkOperation *); + void itemChanged(QNetworkOperation *); + void data(const QByteArray &,QNetworkOperation *); + void dataTransferProgress(int,int,QNetworkOperation *); +%If (- Qt_3_0_0) + void startedNextCopy(const QList &); +%End +%If (Qt_3_0_0 -) + void startedNextCopy(const QPtrList &); +%End + void connectionStateChanged(int,const QString &); + +protected: +%If (- Qt_3_0_0) + virtual void reset(); + virtual bool parse(const QString &); +%End +%If (Qt_3_0_0 -) + void reset(); + bool parse(const QString &); +%End + virtual bool checkValid(); + virtual void clearEntries(); + void getNetworkProtocol(); + void deleteNetworkProtocol(); +}; + +%End +%End diff --git a/sip/qt/quuid.sip b/sip/qt/quuid.sip new file mode 100644 index 0000000..5836dfb --- /dev/null +++ b/sip/qt/quuid.sip @@ -0,0 +1,87 @@ +// This is the SIP interface definition for QUuid. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QUuid (Qt v3.0+) + +QUuid is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QUuid +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_3_0 -) + enum Variant + { + VarUnknown, + NCS, + DCE, + Microsoft, + Reserved + }; + + enum Version + { + VerUnknown, + Time, + EmbeddedPOSIX, + Name, + Random + }; +%End + + QUuid(); +%If (Qt_3_0_1 -) + QUuid(uint,ushort,ushort,uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar); +%End +%If (- Qt_3_0_1) + QUuid(ulong,ushort,ushort,uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar); +%End + QUuid(const QUuid &); + QUuid(const QString &); + + QString toString() const; + bool isNull() const; + + bool operator==(const QUuid &) const; + bool operator!=(const QUuid &) const; + +%If (Qt_3_3_0 -) + bool operator<(const QUuid &) const; + bool operator>(const QUuid &) const; + + static QUuid createUuid(); + QUuid::Variant variant() const; + QUuid::Version version() const; +%End +}; + +%End diff --git a/sip/qt/qvalidator.sip b/sip/qt/qvalidator.sip new file mode 100644 index 0000000..d3329db --- /dev/null +++ b/sip/qt/qvalidator.sip @@ -0,0 +1,227 @@ +// This is the SIP interface definition for QValidator, QDoubleValidator, +// QIntValidator and QRegExpValidator. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QValidator + + virtual State validate + QString& input + int& pos + + +The returned value is a tuple of the State result and the +updated pos. + + + +QDoubleValidator + + State validate + QString& input + int& pos + + +The returned value is a tuple of the State result and the +updated pos. + + + +QIntValidator + + State validate + QString& input + int& pos + + +The returned value is a tuple of the State result and the +updated pos. + + + +QRegExpValidator (Qt v3+) + + virtual State validate + QString& input + int& pos + + +The returned value is a tuple of the State result and the +updated pos. + + +%End + + +class QValidator : QObject +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_0) + QValidator(QWidget * /TransferThis/,const char * = 0); +%End +%If (Qt_3_0_0 -) + QValidator(QObject * /TransferThis/,const char * = 0); +%End + +%If (- Qt_2_1_0) + enum State + { + Invalid, + Valid, + Acceptable + }; +%End +%If (Qt_2_1_0 -) + enum State + { + Invalid, + Intermediate, + Valid = Intermediate, + Acceptable + }; +%End + +%If (Qt_2_00 -) + virtual State validate(QString &,int & /In,Out/) const = 0; + virtual void fixup(QString &) const; +%End +%If (- Qt_2_00) + virtual State validate(QString &,int & /In,Out/) = 0; + virtual void fixup(QString &); +%End + +private: +%If (Qt_2_1_0 -) + QValidator(const QValidator &); +%End +}; + + +class QIntValidator : QValidator +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_0_0 -) + QIntValidator(QObject * /TransferThis/,const char * = 0); + QIntValidator(int,int,QObject * /TransferThis/,const char * = 0); +%End +%If (- Qt_3_0_0) + QIntValidator(QWidget * /TransferThis/,const char * = 0); + QIntValidator(int,int,QWidget * /TransferThis/,const char * = 0); +%End + +%If (Qt_2_00 -) + QValidator::State validate(QString &,int & /In,Out/) const; +%End +%If (- Qt_2_00) + QValidator::State validate(QString &,int & /In,Out/); +%End + +%If (Qt_2_1_0 -) + void setBottom(int); + void setTop(int); +%End + virtual void setRange(int,int); + + int bottom() const; + int top() const; + +private: +%If (Qt_2_1_0 -) + QIntValidator(const QIntValidator &); +%End +}; + + +class QDoubleValidator : QValidator +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_3_0_0 -) + QDoubleValidator(QObject * /TransferThis/,const char * = 0); + QDoubleValidator(double,double,int,QObject * /TransferThis/, + const char * = 0); +%End +%If (- Qt_3_0_0) + QDoubleValidator(QWidget * /TransferThis/,const char * = 0); + QDoubleValidator(double,double,int,QWidget * /TransferThis/, + const char * = 0); +%End + +%If (Qt_2_00 -) + QValidator::State validate(QString &,int & /In,Out/) const; +%End +%If (- Qt_2_00) + QValidator::State validate(QString &,int & /In,Out/); +%End + + virtual void setRange(double,double,int = 0); +%If (Qt_2_1_0 -) + void setBottom(double); + void setTop(double); + void setDecimals(int); +%End + + double bottom() const; + double top() const; + int decimals() const; + +private: +%If (Qt_2_1_0 -) + QDoubleValidator(const QDoubleValidator &); +%End +}; + + +%If (Qt_3_0_0 -) + +class QRegExpValidator : QValidator +{ +%TypeHeaderCode +#include +%End + +public: + QRegExpValidator(QObject * /TransferThis/,const char * = 0); + QRegExpValidator(const QRegExp &,QObject * /TransferThis/, + const char * = 0); + + virtual QValidator::State validate(QString &,int & /In,Out/) const; + + void setRegExp(const QRegExp &); + const QRegExp ®Exp() const; + +private: + QRegExpValidator(const QRegExpValidator &); +}; + +%End diff --git a/sip/qt/qvaluelist.sip b/sip/qt/qvaluelist.sip new file mode 100644 index 0000000..732740d --- /dev/null +++ b/sip/qt/qvaluelist.sip @@ -0,0 +1,181 @@ +// This is the SIP interface definition for all types based on the QValueList +// template. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QValueList<type> (Qt v2+) + +Types based on the QValueList template are automatically +converted to and from Python lists of the type. + + +%End + + +%If (Qt_2_1_0 -) + +template +%MappedType QValueList +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + int i; + PyObject *l; + + // Create the list. + + if ((l = PyList_New(sipCpp -> count())) == NULL) + return NULL; + + // Get it. + + i = 0; + QValueListConstIterator it; + + for (it = sipCpp -> begin(); it != sipCpp -> end(); ++it) + { + PyObject *tmobj; + + if ((tmobj = sipConvertFromNewInstance(new Type(*it),sipClass_Type,sipTransferObj)) == NULL || PyList_SetItem(l,i,tmobj) < 0) + { + Py_XDECREF(tmobj); + Py_DECREF(l); + + return NULL; + } + + ++i; + } + + return l; +%End + +%ConvertToTypeCode + if (sipIsErr == NULL) + { + if (!PyList_Check(sipPy)) + return 0; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + if (!sipCanConvertToInstance(PyList_GET_ITEM(sipPy,i),sipClass_Type,SIP_NOT_NONE)) + return 0; + + return 1; + } + + QValueList *qvl = new QValueList; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + { + int iserr = 0, state; + + // We apply the transfer to the list itself, not the elements. + Type *itm = reinterpret_cast(sipConvertToInstance(PyList_GET_ITEM(sipPy,i),sipClass_Type,0,SIP_NOT_NONE,&state,&iserr)); + + if (iserr) + { + sipReleaseInstance(itm,sipClass_Type,state); + + *sipIsErr = 1; + delete qvl; + + return 0; + } + + qvl -> append(*itm); + + sipReleaseInstance(itm,sipClass_Type,state); + } + + *sipCppPtr = qvl; + + return sipGetState(sipTransferObj); +%End +}; + +%End + + +%If (Qt_2_00 -) + +%MappedType QValueList +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + // Convert to a Python list of integers. + + PyObject *l; + + // Create the list. + + if ((l = PyList_New(sipCpp -> count())) == NULL) + return NULL; + + // Get it. + + for (uint i = 0; i < sipCpp -> count(); ++i) + if (PyList_SetItem(l,i,PyInt_FromLong((long)(*sipCpp)[i])) < 0) + { + Py_DECREF(l); + + return NULL; + } + + return l; +%End + +%ConvertToTypeCode + // Convert a Python list of integers to a QValueList on the heap. + + if (sipIsErr == NULL) + return PyList_Check(sipPy); + + QValueList *qvl = new QValueList; + + PyErr_Clear(); + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + { + qvl -> append((int)PyInt_AsLong(PyList_GET_ITEM(sipPy,i))); + + if (PyErr_Occurred() != NULL) + { + delete qvl; + *sipIsErr = 1; + + return 0; + } + } + + *sipCppPtr = qvl; + + return 1; +%End +}; + +%End diff --git a/sip/qt/qvariant.sip b/sip/qt/qvariant.sip new file mode 100644 index 0000000..c942c3e --- /dev/null +++ b/sip/qt/qvariant.sip @@ -0,0 +1,420 @@ +// This is the SIP interface definition for QVariant. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QVariant (Qt v2.1+) + + QVariant + const char *val + + +Not implemented. + + + + QVariant + const QBitArray &val + + +Not yet implemented. (Qt v3+) + + + + QVariant + const QValueList<QVariant> &val + + +Not yet implemented. + + + + QVariant + const QMap<QString,QVariant> &val + + +Not yet implemented. + + + + QBitArray &asBitArray + + + +Not yet implemented. (Qt v3+) + + + + bool &asBool + + + +Not implemented. + + + + double &asDouble + + + +Not implemented. + + + + int &asInt + + + +Not implemented. + + + + QValueList<QVariant> &asList + + + +Not implemented. + + + + QMap<QString,QVariant> &asMap + + + +Not implemented. + + + + uint &asUInt + + + +Not implemented. + + + + QValueListConstIterator<QVariant>listBegin const + + + +Not implemented. + + + + QValueListConstIterator<QVariant>listEnd const + + + +Not implemented. + + + + QMapConstIterator<QString,QVariant>mapBegin const + + + +Not implemented. + + + + QMapConstIterator<QString,QVariant>mapEnd const + + + +Not implemented. + + + + QMapConstIterator<QString,QVariant>mapFind const + const QString &key + + +Not implemented. + + + + QValueListConstIterator<QString>stringListBegin const + + + +Not implemented. + + + + QValueListConstIterator<QString>stringListEnd const + + + +Not implemented. + + + + const QBitArray toBitArray const + + + +Not yet implemented. (Qt v3+) + + + + const QValueList<QVariant>toList const + + + +Not yet implemented. + + + + const QMap<QString,QVariant>toMap const + + + +Not yet implemented. + + +%End + + +%If (Qt_2_1_0 -) + +class QVariant +{ +%TypeHeaderCode +#include +%End + +public: + enum Type { + Invalid, + Map, + List, + String, + StringList, + Font, + Pixmap, + Brush, + Rect, + Size, + Color, + Palette, + ColorGroup, + IconSet, + Point, + Image, + Int, + UInt, + Bool, + Double, + CString, + PointArray, + Region, + Bitmap, + Cursor, +%If (Qt_2_2_0 -) + SizePolicy, +%End +%If (Qt_3_0_0 -) + Date, + Time, + DateTime, + ByteArray, + BitArray, + KeySequence, +%End +%If (Qt_3_1_0 -) + Pen, +%End +%If (Qt_3_2_0 -) + LongLong, + ULongLong, +%End + }; + + QVariant(); + QVariant(const QVariant &); + QVariant(QDataStream &); + + QVariant(const QString &); + QVariant(const QCString &); +// QVariant(const char *); + QVariant(const QStringList &); + QVariant(const QFont &); + QVariant(const QPixmap &); + QVariant(const QImage &); + QVariant(const QBrush &); + QVariant(const QPoint &); + QVariant(const QRect &); + QVariant(const QSize &); + QVariant(const QColor &); + QVariant(const QPalette &); + QVariant(const QColorGroup &); + QVariant(const QIconSet &); + QVariant(const QPointArray &); + QVariant(const QRegion &); + QVariant(const QBitmap &); + QVariant(const QCursor &); +%If (Qt_3_0_0 -) + QVariant(const QDate &); + QVariant(const QTime &); + QVariant(const QDateTime &); + QVariant(const QByteArray &); +// QVariant(const QBitArray &); +%End +// QVariant(const QValueList &); +// QVariant(const QMap &); + QVariant(int /Constrained/); +// QVariant(uint); +%If (Qt_3_2_0 -) +// QVariant(Q_LLONG); +// QVariant(Q_ULLONG); +%End + QVariant(bool,int); + QVariant(double); +%If (Qt_2_2_0 -) + QVariant(QSizePolicy); +%End +%If (Qt_3_0_0 -) + // This must appear after the QString, int and double ctors because + // each of those can be converted automatically to a QKeySequence and + // we want those to take precedence. + QVariant(const QKeySequence &); +%End +%If (Qt_3_1_0 -) + QVariant(const QPen &); +%End + + Type type() const; + const char* typeName() const; + + bool canCast(Type) const; +%If (Qt_3_0_0 -) + bool cast(Type); +%End + + bool isValid() const; +%If (Qt_3_1_0 -) + bool isNull() const; +%End + + void clear(); + + const QString toString() const; + const QCString toCString() const; + const QStringList toStringList() const; + const QFont toFont() const; + const QPixmap toPixmap() const; + const QImage toImage() const; + const QBrush toBrush() const; + const QPoint toPoint() const; + const QRect toRect() const; + const QSize toSize() const; + const QColor toColor() const; + const QPalette toPalette() const; + const QColorGroup toColorGroup() const; + const QIconSet toIconSet() const; + const QPointArray toPointArray() const; + const QBitmap toBitmap() const; + const QRegion toRegion() const; + const QCursor toCursor() const; +%If (Qt_3_0_0 -) + const QDate toDate() const; + const QTime toTime() const; + const QDateTime toDateTime() const; + const QByteArray toByteArray() const; +// const QBitArray toBitArray() const; + const QKeySequence toKeySequence() const; +%End +%If (Qt_3_1_0 -) + const QPen toPen() const; +%End + int toInt() const; + uint toUInt() const; +%If (Qt_3_2_0 -) +// Q_LLONG toLongLong(bool * = 0) const; +// Q_ULLONG toULongLong( bool * = 0) const; +%End + bool toBool() const; + double toDouble() const; +// const QValueList toList() const; +// const QMap toMap() const; +%If (Qt_2_2_0 -) + QSizePolicy toSizePolicy() const; +%End + +// QValueListConstIterator listBegin() const; +// QValueListConstIterator listEnd() const; +// QValueListConstIterator stringListBegin() const; +// QValueListConstIterator stringListEnd() const; +// QMapConstIterator mapBegin() const; +// QMapConstIterator mapEnd() const; +// QMapConstIterator mapFind(const QString &) const; + + QString & asString(); + QCString & asCString(); + QStringList & asStringList(); + QFont & asFont(); + QPixmap & asPixmap(); + QImage & asImage(); + QBrush & asBrush(); + QPoint & asPoint(); + QRect & asRect(); + QSize & asSize(); + QColor & asColor(); + QPalette & asPalette(); + QColorGroup & asColorGroup(); + QIconSet & asIconSet(); + QPointArray & asPointArray(); + QBitmap & asBitmap(); + QRegion & asRegion(); + QCursor & asCursor(); +%If (Qt_3_0_0 -) + QDate & asDate(); + QTime & asTime(); + QDateTime & asDateTime(); + QByteArray & asByteArray(); +// QBitArray & asBitArray(); + QKeySequence & asKeySequence(); +%End +%If (Qt_3_1_0 -) + QPen & asPen(); +%End +// int & asInt(); +// uint & asUInt(); +%If (Qt_3_2_0 -) +// Q_LLONG & asLongLong(); +// Q_ULLONG & asULongLong(); +%End +// bool & asBool(); +// double & asDouble(); +// QValueList & asList(); +// QMap & asMap(); +%If (Qt_2_2_0 -) + QSizePolicy & asSizePolicy(); +%End + + void load(QDataStream &); + void save(QDataStream &) const; + + static const char *typeToName(Type); + static Type nameToType(const char *); +}; + +%End diff --git a/sip/qt/qvbox.sip b/sip/qt/qvbox.sip new file mode 100644 index 0000000..9f0e811 --- /dev/null +++ b/sip/qt/qvbox.sip @@ -0,0 +1,55 @@ +// This is the SIP interface definition for QVBox. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QVBox (Qt v2+) + +QVBox is fully implemented. + + +%End + + +%If (Qt_2_00 -) + +class QVBox : QHBox +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_0) + QVBox(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0, + bool = 1); +%End +%If (Qt_3_0_0 -) + QVBox(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); +%End + +private: +%If (Qt_2_1_0 -) + QVBox(const QVBox &); +%End +}; + +%End diff --git a/sip/qt/qvbuttongroup.sip b/sip/qt/qvbuttongroup.sip new file mode 100644 index 0000000..9561ed5 --- /dev/null +++ b/sip/qt/qvbuttongroup.sip @@ -0,0 +1,48 @@ +// This is the SIP interface definition for QVButtonGroup. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QVButtonGroup (Qt v2+) + +QVButtonGroup is fully implemented. + + +%End + + +%If (Qt_2_00 -) + +class QVButtonGroup : QButtonGroup +{ +%TypeHeaderCode +#include +%End + +public: + QVButtonGroup(QWidget * /TransferThis/ = 0,const char * = 0); + QVButtonGroup(const QString &,QWidget * /TransferThis/ = 0,const char * = 0); + +private: + QVButtonGroup(const QVButtonGroup &); +}; + +%End diff --git a/sip/qt/qvgroupbox.sip b/sip/qt/qvgroupbox.sip new file mode 100644 index 0000000..06b355e --- /dev/null +++ b/sip/qt/qvgroupbox.sip @@ -0,0 +1,48 @@ +// This is the SIP interface definition for QVGroupBox. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QVGroupBox (Qt v2+) + +QVGroupBox is fully implemented. + + +%End + + +%If (Qt_2_00 -) + +class QVGroupBox : QGroupBox +{ +%TypeHeaderCode +#include +%End + +public: + QVGroupBox(QWidget * /TransferThis/ = 0,const char * = 0); + QVGroupBox(const QString &,QWidget * /TransferThis/ = 0,const char * = 0); + +private: + QVGroupBox(const QVGroupBox &); +}; + +%End diff --git a/sip/qt/qwaitcondition.sip b/sip/qt/qwaitcondition.sip new file mode 100644 index 0000000..5d8d66f --- /dev/null +++ b/sip/qt/qwaitcondition.sip @@ -0,0 +1,81 @@ +// This is the SIP interface definition for QWaitCondition. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QWaitCondition (Qt v2.2+) + +QWaitCondition is fully implemented. + + +%End + + +%If (Qt_THREAD_SUPPORT) + +%If (Qt_3_0_0 -) + +class QWaitCondition +{ +%TypeHeaderCode +#include +%End + +public: + QWaitCondition(); + + bool wait(unsigned long = ULONG_MAX) /ReleaseGIL/; + bool wait(QMutex *,unsigned long = ULONG_MAX) /ReleaseGIL/; + + void wakeOne(); + void wakeAll(); + +private: + QWaitCondition(const QWaitCondition &); +}; + +%End + + +%If (Qt_2_2_0 - Qt_3_0_0) + +class QWaitCondition : Qt +{ +%TypeHeaderCode +#include +%End + +public: + QWaitCondition(); + + bool wait(unsigned long = ULONG_MAX) /ReleaseGIL/; + bool wait(QMutex *,unsigned long = ULONG_MAX) /ReleaseGIL/; + + void wakeOne(); + void wakeAll(); + +private: + QWaitCondition(const QWaitCondition &); +}; + +%End + +%End diff --git a/sip/qt/qwhatsthis.sip b/sip/qt/qwhatsthis.sip new file mode 100644 index 0000000..b745449 --- /dev/null +++ b/sip/qt/qwhatsthis.sip @@ -0,0 +1,97 @@ +// This is the SIP interface definition for QWhatsThis. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QWhatsThis + +QWhatsThis is fully implemented. + + +%End + + +%If (- Qt_2_00) + +class QWhatsThis +{ +%TypeHeaderCode +#include +%End + +public: + static void add(QWidget *,const char *,bool = 1); + static void add(QWidget *,const QPixmap &,const char *,const char *,bool = 1); + static void remove(QWidget *); + static const char *textFor(QWidget *); + static QToolButton *whatsThisButton(QWidget *); +}; + +%End + +%If (Qt_2_00 -) + +class QWhatsThis : Qt +{ +%TypeHeaderCode +#include +%End + +public: + QWhatsThis(QWidget *); + + virtual QString text(const QPoint &); +%If (Qt_3_0_0 -) + virtual bool clicked(const QString &); +%End + +%If (Qt_3_1_0 -) + static void setFont(const QFont &); +%End + + static void add(QWidget *,const QString &); + static void remove(QWidget *); +%If (- Qt_3_0_0) + static QString textFor(QWidget *,const QPoint & = QPoint()); +%End +%If (Qt_3_0_0 -) + static QString textFor(QWidget *,const QPoint & = QPoint(),bool = 0); +%End + + static QToolButton *whatsThisButton(QWidget *); + + static void enterWhatsThisMode(); + static bool inWhatsThisMode(); +%If (- Qt_3_0_0) + static void leaveWhatsThisMode(const QString & = QString::null, + const QPoint & = QCursor::pos()); +%End +%If (Qt_3_0_0 -) + static void leaveWhatsThisMode(const QString & = QString::null, + const QPoint & = QCursor::pos(), + QWidget * = 0); + + static void display(const QString &,const QPoint & = QCursor::pos(), + QWidget * = 0); +%End +}; + +%End diff --git a/sip/qt/qwidget.sip b/sip/qt/qwidget.sip new file mode 100644 index 0000000..72b4304 --- /dev/null +++ b/sip/qt/qwidget.sip @@ -0,0 +1,664 @@ +// This is the SIP interface definition for QWidget. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QWidget + + QWExtra *extraData + + + +Not implemented. + + + + QFocusData *focusData + + + +Not implemented. + + + + void lower + + + +This has been renamed to lowerW in Python. + + + + void raise + + + +This has been renamed to raiseW in Python. + + +%End + + +class QWidget : QObject, QPaintDevice +{ +%TypeHeaderCode +#include +%End + +public: + QWidget(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); + + WId winId() const; + bool isTopLevel() const; +%If (Qt_3_0_0 -) + bool isDialog() const; +%End + bool isPopup() const; + bool isDesktop() const; + bool isModal() const; + bool isEnabled() const; + bool isEnabledTo(QWidget *) const; + bool isEnabledToTLW() const; + const QRect &geometry() const; + int x() const; + int y() const; + QPoint pos() const; + QSize size() const; + int width() const; + int height() const; + QRect rect() const; + QRect childrenRect() const; + QSize minimumSize() const; + QSize maximumSize() const; + void setMinimumSize(const QSize &); + void setMaximumSize(const QSize &); + void setMinimumWidth(int); + void setMinimumHeight(int); + void setMaximumWidth(int); + void setMaximumHeight(int); + QSize sizeIncrement() const; + void setSizeIncrement(const QSize &); + void setFixedSize(const QSize &); + void setFixedSize(int,int); + void setFixedWidth(int); + void setFixedHeight(int); + QPoint mapToGlobal(const QPoint &) const; + QPoint mapFromGlobal(const QPoint &) const; + QPoint mapToParent(const QPoint &) const; + QPoint mapFromParent(const QPoint &) const; +%If (Qt_2_2_0 -) + QPoint mapTo(QWidget *,const QPoint &) const; + QPoint mapFrom(QWidget *,const QPoint &) const; +%End + + QWidget *topLevelWidget() const; + + BackgroundMode backgroundMode() const; +%If (- Qt_3_0_0) + const QColor &backgroundColor() const; + virtual void setBackgroundColor(const QColor &); + const QPixmap *backgroundPixmap(); + virtual void setBackgroundPixmap(const QPixmap &); +%End + + const QColor &foregroundColor() const; + +%If (Qt_3_0_0 -) + const QColor &eraseColor() const; + virtual void setEraseColor(const QColor &); + + const QPixmap *erasePixmap() const; + virtual void setErasePixmap(const QPixmap &); +%End + + const QColorGroup &colorGroup() const; + const QPalette &palette() const; +%If (Qt_2_2_0 -) + bool ownPalette() const; +%End + virtual void setPalette(const QPalette &); +%If (Qt_2_1_0 -) + void unsetPalette(); +%End + +%If (Qt_3_0_0 -) + const QColor &paletteForegroundColor() const; + void setPaletteForegroundColor(const QColor &); + + const QColor &paletteBackgroundColor() const; + virtual void setPaletteBackgroundColor(const QColor &); + + const QPixmap *paletteBackgroundPixmap() const; + virtual void setPaletteBackgroundPixmap(const QPixmap &); + + const QBrush &backgroundBrush() const; +%End + +%If (Qt_2_2_0 -) + bool ownFont() const; +%End + virtual void setFont(const QFont &); + QFontMetrics fontMetrics() const; + QFontInfo fontInfo() const; + +%If (- Qt_3_0_0) + enum PropagationMode + { + NoChildren, + AllChildren, + SameFont, + SamePalette = SameFont + }; + + PropagationMode fontPropagation() const; + PropagationMode palettePropagation() const; +%End + + const QCursor &cursor() const; +%If (Qt_2_2_0 -) + bool ownCursor() const; +%End + virtual void setCursor(const QCursor &); + const QPixmap *icon() const; + bool hasMouseTracking() const; +%If (Qt_3_0_0 -) + bool hasMouse() const; +%End + + void clearMask(); + bool isActiveWindow() const; + bool isFocusEnabled() const; + FocusPolicy focusPolicy() const; + bool hasFocus() const; + static void setTabOrder(QWidget *,QWidget *); + QWidget *focusProxy() const; + +%If (Qt_3_2_0 -) + void setInputMethodEnabled(bool); + bool isInputMethodEnabled() const; +%End + + void grabMouse(); + void grabMouse(const QCursor &); + void releaseMouse(); + void grabKeyboard(); + void releaseKeyboard(); + static QWidget *mouseGrabber(); + static QWidget *keyboardGrabber(); + bool isUpdatesEnabled() const; + bool isVisible() const; + bool isVisibleTo(QWidget *) const; + bool isVisibleToTLW() const; + virtual QSize sizeHint() const; +%If (- Qt_3_1_0) + virtual void adjustSize(); +%End + void erase(); + void erase(int,int,int,int); + void erase(const QRect &); + void scroll(int,int); + QWidget *focusWidget() const; + bool acceptDrops() const; +%If (- Qt_3_0_0) + QWidget *parentWidget() const; + bool testWFlags(WFlags) const; +%End +%If (Qt_3_0_0 -) + QWidget *parentWidget(bool = 0) const; + WState testWState(WState) const; + WFlags testWFlags(WFlags) const; +%End + static QWidget *find(WId); + +%If (Qt_3_0_0 -) + QWidget *childAt(int,int,bool = 0) const; + QWidget *childAt(const QPoint &,bool = 0) const; +%End + +%If (Qt_3_3_0 -) + void setWindowOpacity(double); + double windowOpacity() const; +%End + +%If (- Qt_2_00) + GUIStyle style() const; + virtual void setStyle(GUIStyle); + const QRect &frameGeometry() const; + void setMinimumSize(int,int); + void setMaximumSize(int,int); + void setSizeIncrement(int,int); + + enum BackgroundMode + { + FixedColor, + FixedPixmap, + NoBackground, + PaletteForeground, + PaletteBackground, + PaletteLight, + PaletteMidlight, + PaletteDark, + PaletteMid, + PaletteText, + PaletteBase + }; + + void setBackgroundMode(BackgroundMode); + const QFont &font() const; + void setFontPropagation(PropagationMode); + void setPalettePropagation(PropagationMode); + const char *caption() const; + const char *iconText() const; + void setMask(QBitmap); + void setMask(const QRegion &); + + enum FocusPolicy + { + NoFocus = 0, + TabFocus = 1, + ClickFocus = 2, + StrongFocus = 3 + }; + + void setActiveWindow(); + void setFocusPolicy(FocusPolicy); + void setFocus(); + void clearFocus(); + void setFocusProxy(QWidget *); + virtual bool close(bool = 0); + void recreate(QWidget *,WFlags,const QPoint &,bool = 0); + void drawText(int,int,const char *); + void drawText(const QPoint &,const char *); + void setAcceptDrops(bool); +%End + +%If (Qt_2_00 -) + void setName(const char *); + QStyle &style() const; + void setStyle(QStyle *); +%If (Qt_3_0_0 -) + QStyle *setStyle(const QString &); +%End + QRect frameGeometry() const; + QSize frameSize() const; + QRegion childrenRegion() const; + int minimumWidth() const; + int minimumHeight() const; + int maximumWidth() const; + int maximumHeight() const; + virtual void setMinimumSize(int,int); + virtual void setMaximumSize(int,int); + virtual void setSizeIncrement(int,int); + QSize baseSize() const; + void setBaseSize(const QSize &); + void setBaseSize(int,int); + +%If (- Qt_2_2_0) + enum BackgroundMode + { + FixedColor, + FixedPixmap, + NoBackground, + PaletteForeground, + PaletteButton, + PaletteLight, + PaletteMidlight, + PaletteDark, + PaletteMid, + PaletteText, + PaletteBrightText, + PaletteBase, + PaletteBackground, + PaletteShadow, + PaletteHighlight, + PaletteHighlightedText + }; +%End +%If (Qt_2_2_0 - Qt_3_0_0) + enum BackgroundMode + { + FixedColor, + FixedPixmap, + NoBackground, + PaletteForeground, + PaletteButton, + PaletteLight, + PaletteMidlight, + PaletteDark, + PaletteMid, + PaletteText, + PaletteBrightText, + PaletteBase, + PaletteBackground, + PaletteShadow, + PaletteHighlight, + PaletteHighlightedText, + PaletteButtonText, + X11ParentRelative + }; +%End + + virtual void setBackgroundMode(BackgroundMode); +%If (Qt_3_0_0 -) + void setBackgroundMode(BackgroundMode,BackgroundMode); +%End + QFont font() const; +%If (- Qt_3_0_0) + void setPalette(const QPalette &,bool); + void setFont(const QFont &,bool); + virtual void setFontPropagation(PropagationMode); + virtual void setPalettePropagation(PropagationMode); +%End + virtual void unsetCursor(); + QString caption() const; + QString iconText() const; + virtual void setMask(const QBitmap &); + virtual void setMask(const QRegion &); + + enum FocusPolicy + { + NoFocus = 0, + TabFocus = 1, + ClickFocus = 2, + StrongFocus = 3, + WheelFocus = 7 + }; + + virtual void setActiveWindow(); + virtual void setFocusPolicy(FocusPolicy); + virtual void setFocusProxy(QWidget *); + virtual bool close(bool); + // Obsolete. + QRect visibleRect() const; + bool isMinimized() const; + virtual QSize minimumSizeHint() const; + virtual QSizePolicy sizePolicy() const; +%If (Qt_2_2_0 -) + bool isHidden() const; + bool isMaximized() const; +%End +%If (Qt_3_1_0 -) + bool isShown() const; + bool isFullScreen() const; +%End + +%If (Qt_3_3_0 -) + uint windowState() const; + void setWindowState(uint); +%End + +%If (Qt_3_0_0 -) + virtual void setSizePolicy(QSizePolicy); +%End +%If (Qt_3_1_0 -) + void setSizePolicy(QSizePolicy::SizeType,QSizePolicy::SizeType, + bool = 0); +%End +%If (Qt_2_2_0 - Qt_3_0_0) + void setSizePolicy(QSizePolicy); +%End + virtual int heightForWidth(int) const; + +%If (Qt_3_2_0 -) + QRegion clipRegion() const; +%End + + QLayout *layout() const; + void updateGeometry(); + + virtual void reparent(QWidget * /GetWrapper/,WFlags,const QPoint &, + bool = 0); +%MethodCode + if (sipCpp -> parent() != a0) + { + if (a0) + sipTransferTo(sipSelf,a0Wrapper); + else + sipTransferBack(sipSelf); + } + + Py_BEGIN_ALLOW_THREADS + sipSelfWasArg ? sipCpp->QWidget::reparent(a0, a1, *a2, a3) : sipCpp->reparent(a0, a1, *a2, a3); + Py_END_ALLOW_THREADS +%End + +%If (Qt_2_1_0 -) + void reparent(QWidget * /GetWrapper/,const QPoint &,bool = 0); +%MethodCode + if (sipCpp -> parent() != a0) + { + if (a0) + sipTransferTo(sipSelf,a0Wrapper); + else + sipTransferBack(sipSelf); + } + + Py_BEGIN_ALLOW_THREADS + sipCpp->reparent(a0, *a1, a2); + Py_END_ALLOW_THREADS +%End +%End + + void erase(const QRegion &); + void scroll(int,int,const QRect &); + void drawText(int,int,const QString &); + void drawText(const QPoint &,const QString &); + virtual void setAcceptDrops(bool); + virtual void setAutoMask(bool); + bool autoMask() const; + virtual bool customWhatsThis() const; +%If (- Qt_3_0_0) + bool testWState(uint) const; +%End +%End + +%If (Qt_2_1_0 -) + QRect microFocusHint() const; + void unsetFont(); +%End + +%If (Qt_2_1_0 -) + enum BackgroundOrigin { + WidgetOrigin, + ParentOrigin, +%If (Qt_3_0_0 -) + WindowOrigin, +%End +%If (Qt_3_1_0 -) + AncestorOrigin, +%End + }; +%End + +%If (Qt_2_1_0 - Qt_3_0_0) + void setBackgroundOrigin(BackgroundOrigin); +%End +%If (Qt_3_0_0 -) + virtual void setBackgroundOrigin(BackgroundOrigin); +%End +%If (Qt_2_1_0 -) + BackgroundOrigin backgroundOrigin() const; +%End + +%If (Qt_3_1_0 -) + QPoint backgroundOffset() const; +%End + +public slots: +%If (Qt_3_1_0 -) + virtual void adjustSize(); +%End + virtual void setEnabled(bool); +%If (Qt_2_2_0 -) + void setDisabled(bool); +%End + void update(); + void update(int,int,int,int); + void update(const QRect &); + void repaint(int,int,int,int,bool = 1); + void repaint(const QRect &,bool = 1); + virtual void show(); + virtual void hide(); +%If (Qt_3_1_0 -) + void setShown(bool); + void setHidden(bool); +%End + void raise() /PyName=raiseW/; + void lower() /PyName=lowerW/; + virtual void move(int,int); + void move(const QPoint &); + virtual void resize(int,int); + void resize(const QSize &); + virtual void setGeometry(int,int,int,int); + +%If (- Qt_2_00) + void setCaption(const char *); + void setIcon(const QPixmap &); + void setIconText(const char *); + void setMouseTracking(bool); + void setUpdatesEnabled(bool); + void repaint(bool = 1); + void iconify(); + void setGeometry(const QRect &); +%End + +%If (Qt_2_00 -) + virtual void setCaption(const QString &); + virtual void setIcon(const QPixmap &); + virtual void setIconText(const QString &); + virtual void setMouseTracking(bool); + virtual void setFocus(); + void clearFocus(); + virtual void setUpdatesEnabled(bool); + void repaint(); + void repaint(bool); + void repaint(const QRegion &,bool = 1); + virtual void showMinimized(); + virtual void showMaximized(); + virtual void showNormal(); + virtual void polish(); + bool close(); + virtual void setGeometry(const QRect &); +%End + +%If (Qt_2_1_0 -) + void showFullScreen(); + void constPolish() const; +%End + +%If (Qt_3_0_0 -) + // This was added before v3 but I can't be bothered to work out exactly + // when. + void stackUnder(QWidget *); +%End + +protected: + bool event(QEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void mouseDoubleClickEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual void keyReleaseEvent(QKeyEvent *); + virtual void focusInEvent(QFocusEvent *); + virtual void focusOutEvent(QFocusEvent *); + virtual void enterEvent(QEvent *); + virtual void leaveEvent(QEvent *); + virtual void paintEvent(QPaintEvent *); + virtual void moveEvent(QMoveEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void closeEvent(QCloseEvent *); +%If (Qt_3_0_0 -) + virtual void contextMenuEvent(QContextMenuEvent *); + virtual void imStartEvent(QIMEvent *); + virtual void imComposeEvent(QIMEvent *); + virtual void imEndEvent(QIMEvent *); + virtual void tabletEvent(QTabletEvent *); +%End + virtual void enabledChange(bool); +%If (- Qt_3_0_0) + virtual void backgroundColorChange(const QColor &); + virtual void backgroundPixmapChange(const QPixmap &); +%End + virtual void paletteChange(const QPalette &); + virtual void fontChange(const QFont &); +%If (Qt_3_0_0 -) + virtual void windowActivationChange(bool); + void resetInputContext(); +%End + WFlags getWFlags() const; + void clearWFlags(WFlags); + virtual bool focusNextPrevChild(bool); +// QWExtra *extraData(); +// QFocusData *focusData(); + +%If (- Qt_2_00) + virtual void styleChange(GUIStyle); + void create(WId); + void create(WId,bool,bool); + void destroy(bool,bool); + void setWFlags(WFlags); + void setFRect(const QRect &); + void setCRect(const QRect &); + void setSizeGrip(bool); +%End + +%If (Qt_2_00 -) + virtual void wheelEvent(QWheelEvent *); +%If (Qt_DRAGANDDROP) + virtual void dragEnterEvent(QDragEnterEvent *); + virtual void dragMoveEvent(QDragMoveEvent *); + virtual void dragLeaveEvent(QDragLeaveEvent *); + virtual void dropEvent(QDropEvent *); +%End + virtual void showEvent(QShowEvent *); + virtual void hideEvent(QHideEvent *); +%If (- Qt_3_0_0) + virtual void customEvent(QCustomEvent *); +%End + + + virtual void updateMask(); + + virtual void styleChange(QStyle &); + int metric(int) const; + virtual void create(WId = 0,bool = 1,bool = 1); + virtual void destroy(bool = 1,bool = 1); + uint getWState() const; + virtual void setWState(uint); + void clearWState(uint); + virtual void setWFlags(WFlags); +%If (- Qt_3_0_0) + virtual void setFRect(const QRect &); + virtual void setCRect(const QRect &); +%End + virtual void setKeyCompression(bool); +%If (- Qt_3_0_0) + virtual void setMicroFocusHint(int,int,int,int,bool = 1); +%End +%If (Qt_3_0_0 -) + virtual void setMicroFocusHint(int,int,int,int,bool = 1,QFont * = 0); +%End +%End + +private: + QWidget(const QWidget &); +}; diff --git a/sip/qt/qwidgetlist.sip b/sip/qt/qwidgetlist.sip new file mode 100644 index 0000000..9fdc1ad --- /dev/null +++ b/sip/qt/qwidgetlist.sip @@ -0,0 +1,107 @@ +// This is the SIP interface definition for QWidgetList. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QWidgetList + +This class isn't implemented. Whenever a QWidgetList is the +return type of a function or the type of an argument, a Python list of +instances is used instead. + + +%End + + +%MappedType QWidgetList +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + // Convert the list. + + PyObject *pl; + QWidget *obj; + + if ((pl = PyList_New(0)) == NULL) + return NULL; + + for (QWidgetListIt it(*sipCpp); (obj = it.current()) != NULL; ++it) + { + PyObject *inst; + + if ((inst = sipConvertFromInstance(obj,sipClass_QWidget,sipTransferObj)) == NULL || PyList_Append(pl,inst) < 0) + { + Py_XDECREF(inst); + Py_DECREF(pl); + + return NULL; + } + + Py_DECREF(inst); + } + + return pl; +%End + +%ConvertToTypeCode + // Convert a Python list of QWidget instances to a QWidgetList on the + // heap. + + if (sipIsErr == NULL) + { + if (!PyList_Check(sipPy)) + return 0; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + if (!sipCanConvertToInstance(PyList_GET_ITEM(sipPy,i),sipClass_QWidget,0)) + return 0; + + return 1; + } + + QWidgetList *qwl = new QWidgetList; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + { + QWidget *qw; + + // We apply the transfer to the list itself, not the elements. + // Note that any temporary element will never be destroyed. + // There is nothing that can be done about this. + qw = reinterpret_cast(sipConvertToInstance(PyList_GET_ITEM(sipPy,i),sipClass_QWidget,0,0,0,sipIsErr)); + + if (*sipIsErr) + { + delete qwl; + return 0; + } + + qwl -> append(qw); + } + + *sipCppPtr = qwl; + + return sipGetState(sipTransferObj); +%End +}; diff --git a/sip/qt/qwidgetstack.sip b/sip/qt/qwidgetstack.sip new file mode 100644 index 0000000..daf6694 --- /dev/null +++ b/sip/qt/qwidgetstack.sip @@ -0,0 +1,98 @@ +// This is the SIP interface definition for QWidgetStack. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QWidgetStack + +QWidgetStack is fully implemented. + + +%End + + +class QWidgetStack : QFrame +{ +%TypeHeaderCode +#include +%End + +public: + QWidgetStack(QWidget * /TransferThis/ = 0,const char * = 0); +%If (Qt_3_1_0 -) + QWidgetStack(QWidget * /TransferThis/,const char *,WFlags); +%End + + // The QWidget has it's parent changed to be `this' so it will be + // deleted automatically when `this' is deleted. It stays this way + // even if removeWidget() is called, so it isn't transferred back. +%If (- Qt_3_0_0) + void addWidget(QWidget * /Transfer/,int); +%End +%If (Qt_3_0_0 -) + int addWidget(QWidget * /Transfer/,int = -1); +%End + void removeWidget(QWidget *); + +%If (Qt_2_00 -) + QSize sizeHint() const; + QSize minimumSizeHint() const; +%End + void show(); + + QWidget *widget(int) const; + int id(QWidget *) const; + + QWidget *visibleWidget() const; + +%If (Qt_2_00 -) + void setFrameRect(const QRect &); +%End + +%If (- Qt_2_00) + bool event(QEvent *); +%End + +signals: + void aboutToShow(int); + void aboutToShow(QWidget *); + +public slots: + void raiseWidget(int); + void raiseWidget(QWidget *); + +protected: + void frameChanged(); +%If (- Qt_2_00) + void setChildGeometries(); +%End +%If (Qt_2_00 -) + void resizeEvent(QResizeEvent *); + + virtual void setChildGeometries(); + void childEvent(QChildEvent *); +%End + +private: +%If (Qt_2_1_0 -) + QWidgetStack(const QWidgetStack &); +%End +}; diff --git a/sip/qt/qwindow.sip b/sip/qt/qwindow.sip new file mode 100644 index 0000000..4305c42 --- /dev/null +++ b/sip/qt/qwindow.sip @@ -0,0 +1,47 @@ +// This is the SIP interface definition for QWindow. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QWindow + +QWindow is fully implemented (Qt v1.x). + + +%End + + +%If (- Qt_2_00) + +class QWindow : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QWindow(QWidget * = 0,const char * = 0,WFlags = 0); + +private: + QWindow(const QWindow &); +}; + +%End diff --git a/sip/qt/qwindowdefs.sip b/sip/qt/qwindowdefs.sip new file mode 100644 index 0000000..4638d71 --- /dev/null +++ b/sip/qt/qwindowdefs.sip @@ -0,0 +1,180 @@ +// This is the SIP interface definition for a variety of constant definitions. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +Qt Constants + +All constant values defined by Qt have equivalent constants defined to Python. + + +%End + + +%ModuleHeaderCode +#include +%End + + +%OptionalInclude qwindowdefs_mac.sip +%OptionalInclude qwindowdefs_qws.sip +%OptionalInclude qwindowdefs_win.sip +%OptionalInclude qwindowdefs_x11.sip + + +%If (- Qt_2_00) +typedef short QCOORD; + +const int QCOORD_MIN; +const int QCOORD_MAX; +%End + +%If (Qt_2_00 -) +typedef Q_INT32 QCOORD; + +const QCOORD QCOORD_MIN; +const QCOORD QCOORD_MAX; +%End + + +typedef unsigned QRgb; + +%If (- Qt_3_0_0) +char *qAppName(); +%End +%If (Qt_3_0_0 -) +const char *qAppName(); +%End + + +%If (- Qt_2_00) + +enum GUIStyle { + MacStyle, + WindowsStyle, + Win3Style, + PMStyle, + MotifStyle +}; + + +// Widget state flags. + +typedef uint WFlags; + +const uint WState_Created; +const uint WState_Disabled; +const uint WState_Visible; +const uint WState_DoHide; +const uint WState_ClickToFocus; +const uint WState_TrackMouse; +const uint WState_BlockUpdates; +const uint WState_PaintEvent; + +// Widget type flags. + +const uint WType_TopLevel; +const uint WType_Modal; +const uint WType_Popup; +const uint WType_Desktop; + +// Window style flags. + +const uint WStyle_Customize; +const uint WStyle_NormalBorder; +const uint WStyle_DialogBorder; +const uint WStyle_NoBorder; +const uint WStyle_Title; +const uint WStyle_SysMenu; +const uint WStyle_Minimize; +const uint WStyle_Maximize; +const uint WStyle_MinMax; +const uint WStyle_Tool; +const uint WStyle_Mask; + +// Miscellaneous widget flags. + +const uint WCursorSet; +const uint WDestructiveClose; +const uint WPaintDesktop; +const uint WPaintUnclipped; +const uint WPaintClever; +const uint WConfigPending; +const uint WResizeNoErase; +const uint WRecreated; +const uint WExportFontMetrics; +const uint WExportFontInfo; +const uint WFocusSet; +const uint WState_TabToFocus; + + +enum RasterOp { + CopyROP, + OrROP, + XorROP, + EraseROP, + NotCopyROP, + NotOrROP, + NotXorROP, + NotEraseROP, + NotROP +}; + + +// Text alignment flags. + +const int AlignLeft; +const int AlignRight; +const int AlignHCenter; +const int AlignTop; +const int AlignBottom; +const int AlignVCenter; +const int AlignCenter; + +// Miscellaneous text flags. + +const int SingleLine; +const int DontClip; +const int ExpandTabs; +const int ShowPrefix; +const int WordBreak; +const int GrayText; + +// Image conversion flags. + +const int ColorMode_Mask; +const int AutoColor; +const int ColorOnly; +const int MonoOnly; +const int AlphaDither_Mask; +const int ThresholdAlphaDither; +const int OrderedAlphaDither; +const int DiffuseAlphaDither; +const int Dither_Mask; +const int DiffuseDither; +const int OrderedDither; +const int ThresholdDither; +const int DitherMode_Mask; +const int AutoDither; +const int PreferDither; +const int AvoidDither; + +%End diff --git a/sip/qt/qwindowdefs_qws.sip b/sip/qt/qwindowdefs_qws.sip new file mode 100644 index 0000000..53f4b77 --- /dev/null +++ b/sip/qt/qwindowdefs_qws.sip @@ -0,0 +1,29 @@ +// This is the SIP interface definition for a variety of constant definitions +// for Qt/Embedded. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%If (WS_QWS) + +typedef unsigned WId; +typedef void *HANDLE; + +%End diff --git a/sip/qt/qwindowdefs_x11.sip b/sip/qt/qwindowdefs_x11.sip new file mode 100644 index 0000000..4ddfcd4 --- /dev/null +++ b/sip/qt/qwindowdefs_x11.sip @@ -0,0 +1,48 @@ +// This is the SIP interface definition for a variety of constant definitions +// for X11. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%If (WS_X11) + +%If (- Qt_3_0_0) +typedef unsigned HANDLE; +typedef unsigned WId; +%End + +%If (Qt_3_0_0 -) +typedef unsigned long WId; +%End + +typedef void Display; + +Display *qt_xdisplay(); +int qt_xscreen(); +WId qt_xrootwin(); +%If (Qt_3_1_0 -) +WId qt_xrootwin(int); +%End + +%If (Qt_3_3_0 -) +const char *qAppClass(); +%End + +%End diff --git a/sip/qt/qwindowsstyle.sip b/sip/qt/qwindowsstyle.sip new file mode 100644 index 0000000..34be426 --- /dev/null +++ b/sip/qt/qwindowsstyle.sip @@ -0,0 +1,192 @@ +// This is the SIP interface definition for QWindowsStyle. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QWindowsStyle (Qt v2+) + + void getButtonShift + int &x + int &y + + +This takes no parameters and returns a tuple of the x and +y values. (Qt v2) + + + + void scrollBarMetrics + const QTabBar *sb + int &sliderMin + int &sliderMax + int &sliderLength + int &buttonDim + + +This takes only the sb parameter and returns a tuple of the +sliderMin, sliderMax, +sliderLength and buttonDim values. +(Qt v2) + + + + void tabbarMetrics + const QTabBar *t + int &hframe + int &vframe + int &overlap + + +This takes only the t parameter and returns a tuple of the +hframe, vframe and +overlap values. (Qt v2) + + +%End + + +%If (Qt_STYLE_WINDOWS) +%If (Qt_2_00 -) + +class QWindowsStyle : QCommonStyle +{ +%TypeHeaderCode +#include +%End + +public: + QWindowsStyle(); + +%If (Qt_3_3_0 -) + void polish(QApplication *); + void unPolish(QApplication *); + + void polish(QWidget *); + void unPolish(QWidget *); + + void polish(QPalette &); +%End + +%If (- Qt_3_0_0) + void drawButton(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,const QBrush * = 0); + void drawBevelButton(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,const QBrush * = 0); + void drawFocusRect(QPainter *,const QRect &,const QColorGroup &, + const QColor * = 0,bool = 0); + void drawPushButton(QPushButton *,QPainter *); + + void getButtonShift(int &,int &); + + void drawPanel(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,int = 1,const QBrush * = 0); + void drawPopupPanel(QPainter *,int,int,int,int,const QColorGroup &, + int = 2,const QBrush * = 0); + void drawArrow(QPainter *,ArrowType,bool,int,int,int,int, + const QColorGroup &,bool,const QBrush * = 0); + QSize indicatorSize() const; + void drawIndicator(QPainter *,int,int,int,int,const QColorGroup &, + int,bool = 0,bool = 1); + QSize exclusiveIndicatorSize() const; + void drawExclusiveIndicator(QPainter *,int,int,int,int, + const QColorGroup &,bool,bool = 0,bool = 1); + void drawExclusiveIndicatorMask(QPainter *,int,int,int,int,bool); + void drawComboButton(QPainter *,int,int,int,int,const QColorGroup &, + bool = 0,bool = 0,bool = 1,const QBrush * = 0); + QRect comboButtonRect(int,int,int,int); + QRect comboButtonFocusRect(int,int,int,int); + + void tabbarMetrics(const QTabBar *,int &,int &,int &); + + void drawTab(QPainter *,const QTabBar *,QTab *,bool); + void drawTabMask(QPainter *,const QTabBar *,QTab *,bool); + + void scrollBarMetrics(const QScrollBar *,int &,int &,int &,int &); + + void drawScrollBarControls(QPainter *,const QScrollBar *,int,uint,uint); + int sliderLength() const; + void drawSlider(QPainter *,int,int,int,int,const QColorGroup &, + Orientation,bool,bool); + void drawSliderMask(QPainter *,int,int,int,int,Orientation,bool,bool); + void drawSliderGroove(QPainter *,int,int,int,int,const QColorGroup &, + QCOORD,Orientation); + int maximumSliderDragDistance() const; + int splitterWidth() const; + void drawSplitter(QPainter *,int,int,int,int,const QColorGroup &, + Orientation); + void drawCheckMark(QPainter *,int,int,int,int,const QColorGroup &,bool, + bool); + void polishPopupMenu(QPopupMenu *); + int extraPopupMenuItemWidth(bool,int,QMenuItem *,const QFontMetrics &); + int popupMenuItemHeight(bool,QMenuItem *,const QFontMetrics &); + void drawPopupMenuItem(QPainter *,bool,int,int,QMenuItem *, + const QPalette &,bool,bool,int,int,int,int); +%End +%If (Qt_3_0_0 -) + virtual void polishPopupMenu(QPopupMenu *); + + void drawPrimitive(PrimitiveElement,QPainter *,const QRect &, + const QColorGroup &,SFlags = Style_Default, + const QStyleOption & = QStyleOption()) const; + + void drawControl(ControlElement,QPainter *,const QWidget *, + const QRect &,const QColorGroup &, + SFlags = Style_Default, + const QStyleOption & = QStyleOption()) const; + + void drawComplexControl(ComplexControl,QPainter *,const QWidget *, + const QRect &,const QColorGroup &, + SFlags = Style_Default,SCFlags = SC_All, + SCFlags = SC_None, + const QStyleOption & = QStyleOption()) const; + + int pixelMetric(PixelMetric,const QWidget * = 0) const; + + QSize sizeFromContents(ContentsType,const QWidget *,const QSize &, + const QStyleOption & = QStyleOption()) const; + + int styleHint(StyleHint,const QWidget *, + const QStyleOption & = QStyleOption(), + QStyleHintReturn * = 0) const; + + QPixmap stylePixmap(StylePixmap,const QWidget * = 0, + const QStyleOption & = QStyleOption()) const; +%End + +%If (Qt_3_1_0 -) + QRect subRect(SubRect,const QWidget *) const; +%End + +protected: +%If (- Qt_3_0_0) + void drawWinShades(QPainter *,int,int,int,int,const QColor &, + const QColor &,const QColor &,const QColor &, + const QBrush *); +%End + +private: +%If (Qt_3_0_0 -) + QWindowsStyle(const QWindowsStyle &); +%End +}; + +%End +%End diff --git a/sip/qt/qwindowsxpstyle.sip b/sip/qt/qwindowsxpstyle.sip new file mode 100644 index 0000000..394bfad --- /dev/null +++ b/sip/qt/qwindowsxpstyle.sip @@ -0,0 +1,31 @@ +// This is the SIP interface definition for QWindowsXPStyle. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QWindowsXPStyle (Qt v3.0.1+, Windows) + +QWindowsXPStyle is fully implemented. + + +%End + + diff --git a/sip/qt/qwizard.sip b/sip/qt/qwizard.sip new file mode 100644 index 0000000..c062f65 --- /dev/null +++ b/sip/qt/qwizard.sip @@ -0,0 +1,122 @@ +// This is the SIP interface definition for QWizard. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QWizard (Qt v2+) + +QWizard is fully implemented. + + +%End + + +%If (Qt_WIZARD) +%If (Qt_2_00 -) + +class QWizard : QDialog +{ +%TypeHeaderCode +#include +%End + +public: + QWizard(QWidget * /TransferThis/ = 0,const char * = 0,bool = 0, + WFlags = 0); + + void show(); + + void setFont(const QFont &); + + // The QWidget is passed to QWidgetStack::addWidget(). + virtual void addPage(QWidget * /Transfer/, const QString &); +%If (Qt_3_0_0 -) + // The QWidget is passed to QWidgetStack::addWidget(). + virtual void insertPage(QWidget * /Transfer/, const QString &,int); +%End + virtual void removePage(QWidget *); + + QString title(QWidget *) const; +%If (Qt_2_2_0 -) + void setTitle(QWidget *,const QString &); +%End +%If (Qt_3_0_0 -) + QFont titleFont() const; + void setTitleFont(const QFont &); +%End + + virtual void showPage(QWidget *); + + QWidget *currentPage() const; + +%If (Qt_2_1_0 -) + QWidget *page(int) const; + int pageCount() const; +%End +%If (Qt_3_0_0 -) + int indexOf(QWidget *) const; +%End + + virtual bool appropriate(QWidget *) const; + virtual void setAppropriate(QWidget *,bool); + + QPushButton *backButton() const; + QPushButton *nextButton() const; + QPushButton *finishButton() const; + QPushButton *cancelButton() const; + QPushButton *helpButton() const; + + bool eventFilter(QObject *,QEvent *); + +public slots: + virtual void setBackEnabled(QWidget *,bool); + virtual void setNextEnabled(QWidget *,bool); + virtual void setFinishEnabled(QWidget *,bool); + + virtual void setHelpEnabled(QWidget *,bool); + +%If (- Qt_3_0_0) + virtual void setFinish(QWidget *,bool); +%End + +protected slots: + virtual void back(); + virtual void next(); + virtual void help(); + +signals: + void helpClicked(); +%If (Qt_2_2_0 -) + void selected(const QString &); +%End + +protected: + virtual void layOutButtonRow(QHBoxLayout *); + virtual void layOutTitleRow(QHBoxLayout *,const QString &); + +private: +%If (Qt_2_1_0 -) + QWizard(const QWizard &); +%End +}; + +%End +%End diff --git a/sip/qt/qwmatrix.sip b/sip/qt/qwmatrix.sip new file mode 100644 index 0000000..1bb8cdc --- /dev/null +++ b/sip/qt/qwmatrix.sip @@ -0,0 +1,178 @@ +// This is the SIP interface definition for QWMatrix. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QWMatrix + +The Python ==, != and +*= operators are supported. + + + + QWMatrix invert const + bool *invertible = 0 + + +This takes no parameters and returns a tuple of the QWMatrix +result and the invertible value. + + + + void map const + int x + int y + int *tx + int *ty + + +This takes the x and y parameters and +returns a tuple containing the tx and ty +values. + + + + void map const + float x + float y + float *tx + float *ty + + +This takes the x and y parameters and +returns a tuple containing the tx and ty +values. (Qt v1.x) + + + + void map const + double x + double y + double *tx + double *ty + + +This takes the x and y parameters and +returns a tuple containing the tx and ty +values. (Qt v2+) + + +%End + + +class QWMatrix +{ +%TypeHeaderCode +#include +%End + +public: + QWMatrix(); +%If (- Qt_2_00) + QWMatrix(float,float,float,float,float,float); +%End +%If (Qt_2_00 -) + QWMatrix(double,double,double,double,double,double); +%End + + void map(int /Constrained/,int /Constrained/,int *,int *) const; + +%If (Qt_3_0_0 -) + QRect mapRect(const QRect &) const; +%End + + QPoint map(const QPoint &) const; + QRect map(const QRect &); const + QPointArray map(const QPointArray &) const; +%If (Qt_3_1_0 -) + QRegion map(const QRegion &) const; + QRegion mapToRegion(const QRect &) const; + QPointArray mapToPolygon(const QRect &) const; +%End + + void reset(); +%If (Qt_3_0_0 -) + bool isIdentity() const; + + bool isInvertible() const; +%End +%If (Qt_3_1_0 -) + double det() const; +%End + + QWMatrix invert(bool * = 0) const; + + bool operator==(const QWMatrix &) const; + bool operator!=(const QWMatrix &) const; + QWMatrix &operator*=(const QWMatrix &); + +%If (Qt_3_0_0 -) + // These aren't documented but are used in Qt examples. + QPoint operator*(const QPoint &) const; + QRegion operator*(const QRect &) const; + QRegion operator*(const QRegion &) const; + QPointArray operator*(const QPointArray &) const; +%End + +%If (Qt_3_1_0 -) + enum TransformationMode { + Points, + Areas + }; + + static void setTransformationMode(TransformationMode); + static TransformationMode transformationMode(); +%End + +%If (- Qt_2_00) + void setMatrix(float,float,float,float,float,float); + float m11(); + float m12(); + float m21(); + float m22(); + float dx(); + float dy(); + + void map(float,float,float *,float *) const; + + QWMatrix &translate(float,float); + QWMatrix &scale(float,float); + QWMatrix &shear(float,float); + QWMatrix &rotate(float); +%End + +%If (Qt_2_00 -) + void setMatrix(double,double,double,double,double,double); + double m11(); + double m12(); + double m21(); + double m22(); + double dx(); + double dy(); + + void map(double,double,double *,double *) const; + + QWMatrix &translate(double,double); + QWMatrix &scale(double,double); + QWMatrix &shear(double,double); + QWMatrix &rotate(double); +%End +}; diff --git a/sip/qt/qworkspace.sip b/sip/qt/qworkspace.sip new file mode 100644 index 0000000..bbc9dfc --- /dev/null +++ b/sip/qt/qworkspace.sip @@ -0,0 +1,101 @@ +// This is the SIP interface definition for QWorkspace. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QWorkspace (Qt v2.1+) + +QWorkspace is fully implemented. + + +%End + + +%If (Qt_2_1_0 -) +%If (Qt_WORKSPACE) + +class QWorkspace : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QWorkspace(QWidget * /TransferThis/ = 0,const char * = 0); + +%If (Qt_3_2_0 -) + enum WindowOrder { + CreationOrder, + StackingOrder + }; +%End + + QWidget *activeWindow() const; + QWidgetList windowList() const; +%If (Qt_3_2_0 -) + QWidgetList windowList(WindowOrder) const; +%End + +%If (- Qt_3_0_0) + QSizePolicy sizePolicy() const; +%End + QSize sizeHint() const; + +%If (Qt_3_0_0 -) + bool scrollBarsEnabled() const; + void setScrollBarsEnabled(bool); + + void setPaletteBackgroundColor(const QColor &); + void setPaletteBackgroundPixmap(const QPixmap &); +%End + +signals: + void windowActivated(QWidget *); + +public slots: + void cascade(); + void tile(); +%If (Qt_3_2_0 -) + void closeActiveWindow(); + void closeAllWindows(); + void activateNextWindow(); + void activatePrevWindow(); +%End + +protected: +%If (Qt_3_0_0 -) + void styleChange(QStyle &); +%End + void childEvent(QChildEvent *); + void resizeEvent(QResizeEvent *); + bool eventFilter(QObject *,QEvent *); + void showEvent(QShowEvent *); +%If (Qt_3_0_0 -) + void hideEvent(QHideEvent *); + void wheelEvent(QWheelEvent *); +%End + +private: + QWorkspace(const QWorkspace &); +}; + +%End +%End diff --git a/sip/qt/versions.sip b/sip/qt/versions.sip new file mode 100644 index 0000000..09aed5c --- /dev/null +++ b/sip/qt/versions.sip @@ -0,0 +1,92 @@ +// This defines the different versions of Qt that PyQt knows about. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// Specify the releases over time - not all of them, just those that introduce +// something new. +%Timeline {Qt_1_43 + Qt_2_00 Qt_2_1_0 Qt_2_2_0 Qt_2_3_0 Qt_2_3_1 + Qt_3_0_0 Qt_3_0_1 Qt_3_0_2 Qt_3_0_4 Qt_3_0_5 Qt_3_0_6 + Qt_3_1_0 Qt_3_1_1 Qt_3_1_2 + Qt_3_2_0 + Qt_3_3_0 Qt_3_3_5 Qt_3_3_6} + + +// Specify the platforms. +%Platforms {WS_X11 WS_WIN WS_QWS WS_MACX} + + +// Specify the features. +%Feature Qt_THREAD_SUPPORT + +%Feature Qt_ACTION +%Feature Qt_ASSISTANTCLIENT +%Feature Qt_CLIPBOARD +%Feature Qt_CODECS +%Feature Qt_COLORDIALOG +%Feature Qt_DATASTREAM +%Feature Qt_DIAL +%Feature Qt_DNS +%Feature Qt_DOM +%Feature Qt_DRAGANDDROP +%Feature Qt_ICONVIEW +%Feature Qt_IMAGE_TEXT +%Feature Qt_INPUTDIALOG +%Feature Qt_FILEDIALOG +%Feature Qt_FONTDATABASE +%Feature Qt_FONTDIALOG +%Feature Qt_MESSAGEBOX +%Feature Qt_MIMECLIPBOARD +%Feature Qt_NETWORKPROTOCOL +%Feature Qt_NETWORKPROTOCOL_FTP +%Feature Qt_NETWORKPROTOCOL_HTTP +%Feature Qt_PICTURE +%Feature Qt_PRINTDIALOG +%Feature Qt_PRINTER +%Feature Qt_PROGRESSDIALOG +%Feature Qt_PROPERTIES +%Feature Qt_SEMIMODAL +%Feature Qt_SIZEGRIP +%Feature Qt_SOUND +%Feature Qt_SPLITTER +%Feature Qt_STYLE_CDE +%Feature Qt_STYLE_INTERLACE +%Feature Qt_STYLE_MOTIF +%Feature Qt_STYLE_MOTIFPLUS +%Feature Qt_STYLE_PLATINUM +%Feature Qt_STYLE_SGI +%Feature Qt_STYLE_WINDOWS +%Feature Qt_STYLE_WINDOWSXP +%Feature Qt_TABDIALOG +%Feature Qt_TABLE +%Feature Qt_TABLEVIEW +%Feature Qt_TRANSFORMATIONS +%Feature Qt_TRANSLATION +%Feature Qt_WIZARD +%Feature Qt_WORKSPACE + +// On Windows64 Q_LONG is defined as __int64 (which SIP doesn't handle) so +// this feature is disabled. +%Feature Qt_Q_LONG_IS_long + +// SIP v4.7.3 and later support automatic generation of missing complementary +// comparison operators. This fixes a problem with v4.7.2. +%Feature Qt_SIP_PRE_4_7_2 diff --git a/sip/qtaxcontainer/copying.sip b/sip/qtaxcontainer/copying.sip new file mode 100644 index 0000000..463904b --- /dev/null +++ b/sip/qtaxcontainer/copying.sip @@ -0,0 +1,51 @@ +// This is the SIP file defining the PyQt license. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Copying +Copyright (c) 2007 + Riverbank Computing Limited + +This file is part of PyQt. + +This copy of PyQt is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +PyQt is supplied 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 General Public License for more +details. + +You should have received a copy of the GNU General Public License along with +PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +%End + + +%OptionalInclude pyqt-internal.sip +%OptionalInclude pyqt-gpl.sip +%OptionalInclude pyqt-commercial.sip +%OptionalInclude pyqt-edu.sip +%OptionalInclude pyqt-eval.sip +%OptionalInclude pyqt-nc.sip +%OptionalInclude pyqt-tkc.sip diff --git a/sip/qtaxcontainer/qaxbase.sip b/sip/qtaxcontainer/qaxbase.sip new file mode 100644 index 0000000..fde55e2 --- /dev/null +++ b/sip/qtaxcontainer/qaxbase.sip @@ -0,0 +1,86 @@ +// This is the SIP interface definition for QAxBase. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QAxBase (Windows, Qt v3+) + + QAxObject + IUnknown *iface = 0 + + +Not implemented. + + + + long queryInterface + const QUuid &uuid + void **iface + + +Not implemented. + + + + PropertyBag propertyBag const + + + +Not implemented. + + + + void setPropertyBag + const PropertyBag &bag + + +Not implemented. + + + + unsigned long registerWeakActiveObject + const QString &guid + + +This is a utility method provided by PyQt to make it easier to use +Mark Hammond's win32com module to manipulate objects +created by the qtaxcontainer module. + + +The RegisterActiveObject() COM function is called to +register the QAxBase instance as a weak object with the +guid GUID. The revoke handle is returned. + + + + static void revokeActiveObject + unsigned long rhandle + + +This is a wrapper around the RevokeActiveObject() COM +function and is called to revoke the object registered using +registerWeakActiveObject(). rhandle is +the revoke handle returned by registerWeakActiveObject(). + + +%End + + diff --git a/sip/qtaxcontainer/qaxobject.sip b/sip/qtaxcontainer/qaxobject.sip new file mode 100644 index 0000000..0c0b0f8 --- /dev/null +++ b/sip/qtaxcontainer/qaxobject.sip @@ -0,0 +1,37 @@ +// This is the SIP interface definition for QAxObject. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QAxObject (Windows, Qt v3+) + + QAxObject + IUnknown *iface + QObject *parent = 0 + const char *name = 0 + + +Not implemented. + + +%End + + diff --git a/sip/qtaxcontainer/qaxwidget.sip b/sip/qtaxcontainer/qaxwidget.sip new file mode 100644 index 0000000..dbcc729 --- /dev/null +++ b/sip/qtaxcontainer/qaxwidget.sip @@ -0,0 +1,37 @@ +// This is the SIP interface definition for QAxWidget. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QAxWidget (Windows, Qt v3+) + + QAxWidget + IUnknown *iface + QWidget *parent = 0 + const char *name = 0 + + +Not implemented. + + +%End + + diff --git a/sip/qtaxcontainer/qtaxcontainermod.sip b/sip/qtaxcontainer/qtaxcontainermod.sip new file mode 100644 index 0000000..33864f1 --- /dev/null +++ b/sip/qtaxcontainer/qtaxcontainermod.sip @@ -0,0 +1,32 @@ +// This is the SIP interface definition for the qtaxcontainer module of PyQt. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Module qtaxcontainer 1 + +%Import qt/qtmod.sip + +%Include copying.sip + + +%Include qaxbase.sip +%Include qaxobject.sip +%Include qaxwidget.sip diff --git a/sip/qtcanvas/copying.sip b/sip/qtcanvas/copying.sip new file mode 100644 index 0000000..463904b --- /dev/null +++ b/sip/qtcanvas/copying.sip @@ -0,0 +1,51 @@ +// This is the SIP file defining the PyQt license. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Copying +Copyright (c) 2007 + Riverbank Computing Limited + +This file is part of PyQt. + +This copy of PyQt is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +PyQt is supplied 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 General Public License for more +details. + +You should have received a copy of the GNU General Public License along with +PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +%End + + +%OptionalInclude pyqt-internal.sip +%OptionalInclude pyqt-gpl.sip +%OptionalInclude pyqt-commercial.sip +%OptionalInclude pyqt-edu.sip +%OptionalInclude pyqt-eval.sip +%OptionalInclude pyqt-nc.sip +%OptionalInclude pyqt-tkc.sip diff --git a/sip/qtcanvas/qcanvas.sip b/sip/qtcanvas/qcanvas.sip new file mode 100644 index 0000000..f9ce8e2 --- /dev/null +++ b/sip/qtcanvas/qcanvas.sip @@ -0,0 +1,857 @@ +// This is the SIP interface definition for QCanvas, QCanvasEllipse, +// QCanvasItem, QCanvasItemList, QCanvasLine, QCanvasPixmap, +// QCanvasPixmapArray, QCanvasPolygon, QCanvasPolygonalItem, QCanvasRectangle, +// QCanvasSpline, QCanvasSprite, QCanvasText and QCanvasView. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QCanvas (Qt v2.2+) + +QCanvas is fully implemented. + + + +QCanvasEllipse (Qt v2.2+) + +QCanvasEllipse is fully implemented. + + + +QCanvasItem (Qt v2.2+) + +QCanvasItem is fully implemented. + + + +QCanvasItemList (Qt v2.2+) + +This class isn't implemented. Whenever a QCanvasItemList is +the return type of a function or the type of an argument, a Python list of +QCanvasItem instances is used instead. + + + +QCanvasLine (Qt v2.2+) + +QCanvasLine is fully implemented. + + + +QCanvasPixmap (Qt v2.2+) + +QCanvasPixmap is fully implemented. + + + +QCanvasPixmapArray (Qt v2.2+) + + QPixmapArray + QList<QPixmap> pixmaps + QList<QPoint> hotspots + + +The pixmaps argument is a Python list of QPixmap instances, +and the hotspots argument is a Python list of QPoint +instances. (Qt v2.2.0 - Qt v2.3.1) + + + + QPixmapArray + QValueList<QPixmap> pixmaps + QPointArray hotspots = QPointArray() + + +The pixmaps argument is a Python list of QPixmap instances. +(Qt v3+) + + + +QCanvasPolygon (Qt v2.2+) + +QCanvasPolygon is fully implemented. + + + +QCanvasPolygonalItem (Qt v2.2+) + +QCanvasPolygonalItem is fully implemented. + + + +QCanvasRectangle (Qt v2.2+) + +QCanvasRectangle is fully implemented. + + + +QCanvasSpline (Qt v3.0+) + +QCanvasSpline is fully implemented. + + + +QCanvasSprite (Qt v2.2+) + +QCanvasSprite is fully implemented. + + + +QCanvasText (Qt v2.2+) + +QCanvasText is fully implemented. + + + +QCanvasView (Qt v2.2+) + +QCanvasView is fully implemented. + + +%End + + +%If (Qt_2_2_0 -) + +%MappedType QCanvasItemList +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + // Convert to a Python list of QCanvasItem instances. + + int i; + PyObject *l; + + // Create the list. + + if ((l = PyList_New(sipCpp -> count())) == NULL) + return NULL; + + // Get it. + + i = 0; + + for (QCanvasItemList::Iterator it = sipCpp -> begin(); it != sipCpp -> end(); ++it) + { + PyObject *ci; + + if ((ci = sipConvertFromInstance(*it,sipClass_QCanvasItem,sipTransferObj)) == NULL || PyList_SetItem(l,i,ci) < 0) + { + Py_XDECREF(ci); + Py_DECREF(l); + + return NULL; + } + + ++i; + } + + return l; +%End + +%ConvertToTypeCode + // At the moment this will never be called, so provide a null + // implementation. + + if (sipIsErr == NULL) + return PyList_Check(sipPy); + + PyErr_Format(PyExc_TypeError,"Converting to QCanvasItemList not yet implemented"); + + *sipIsErr = 1; + + return 0; +%End +}; + + +class QCanvasItem : Qt +{ +%TypeHeaderCode +#include +%End + +public: + QCanvasItem(QCanvas * /TransferThis/); + +%ConvertToSubClassCode + Py_BEGIN_ALLOW_THREADS + + // Use the numeric type values for compatibility with Qt v2. + switch (sipCpp -> rtti()) + { + case 1: + sipClass = sipClass_QCanvasSprite; + break; + + case 2: + sipClass = sipClass_QCanvasPolygonalItem; + break; + + case 3: + sipClass = sipClass_QCanvasText; + break; + + case 4: + sipClass = sipClass_QCanvasPolygon; + break; + + case 5: + sipClass = sipClass_QCanvasRectangle; + break; + + case 6: + sipClass = sipClass_QCanvasEllipse; + break; + + case 7: + sipClass = sipClass_QCanvasLine; + break; + +#if QT_VERSION >= 0x030000 + case 8: + sipClass = sipClass_QCanvasSpline; + break; +#endif + + default: + sipClass = 0; + } + + Py_END_ALLOW_THREADS +%End + + double x() const; + double y() const; + double z() const; + + virtual void moveBy(double,double); + void move(double,double); + void setX(double); + void setY(double); + void setZ(double); + + bool animated() const; + virtual void setAnimated(bool); + virtual void setVelocity(double,double); + void setXVelocity(double); + void setYVelocity(double); + double xVelocity() const; + double yVelocity() const; + virtual void advance(int); + + virtual bool collidesWith(const QCanvasItem *) const = 0; + + QCanvasItemList collisions(bool) const; + + virtual void setCanvas(QCanvas * /GetWrapper/); +%MethodCode + if (sipCpp -> canvas() != a0) + { + if (a0) + sipTransferTo(sipSelf,a0Wrapper); + else + sipTransferBack(sipSelf); + } + + Py_BEGIN_ALLOW_THREADS + sipSelfWasArg ? sipCpp->QCanvasItem::setCanvas(a0) : sipCpp->setCanvas(a0); + Py_END_ALLOW_THREADS +%End + + virtual void draw(QPainter &) = 0; + + void show(); + void hide(); + + virtual void setVisible(bool); +%If (- Qt_3_0_0) + bool visible() const; +%End +%If (Qt_3_0_0 -) + bool isVisible() const; +%End + virtual void setSelected(bool); +%If (- Qt_3_0_0) + bool selected() const; +%End +%If (Qt_3_0_0 -) + bool isSelected() const; +%End + virtual void setEnabled(bool); +%If (- Qt_3_0_0) + bool enabled() const; +%End +%If (Qt_3_0_0 -) + bool isEnabled() const; +%End + virtual void setActive(bool); +%If (- Qt_3_0_0) + bool active() const; +%End +%If (Qt_3_0_0 -) + bool isActive() const; +%End + +%If (Qt_3_0_0 -) + enum RttiValues { + Rtti_Item, + Rtti_Sprite, + Rtti_PolygonalItem, + Rtti_Text, + Rtti_Polygon, + Rtti_Rectangle, + Rtti_Ellipse, + Rtti_Line, + Rtti_Spline + }; +%End + + virtual int rtti() const; + + virtual QRect boundingRect() const = 0; + virtual QRect boundingRectAdvanced() const; + + QCanvas *canvas() const; + +protected: +%If (Qt_3_0_0 -) + void update(); +%End + +private: + virtual bool collidesWith(const QCanvasSprite *, + const QCanvasPolygonalItem *, + const QCanvasRectangle *, + const QCanvasEllipse *, + const QCanvasText *) const = 0; +}; + + +class QCanvas : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QCanvas(QObject * /TransferThis/ = 0,const char * = 0); + QCanvas(int,int); + QCanvas(QPixmap,int,int,int,int); + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipWrapperType **type; + int yes, no; + } graph[] = { + {sipName_QCanvasView, &sipClass_QCanvasView, -1, 1}, + {sipName_QCanvas, &sipClass_QCanvas, -1, -1}, + }; + + int i = 0; + + sipClass = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipClass = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + + virtual void setTiles(QPixmap,int,int,int,int); + virtual void setBackgroundPixmap(const QPixmap &); + QPixmap backgroundPixmap() const; + + virtual void setBackgroundColor(const QColor &); + QColor backgroundColor() const; + + virtual void setTile(int,int,int); + int tile(int,int) const; + + int tilesHorizontally() const; + int tilesVertically() const; + + int tileWidth() const; + int tileHeight() const; + + virtual void resize(int,int); + int width() const; + int height() const; + QSize size() const; +%If (Qt_3_0_0 -) + QRect rect() const; +%End + bool onCanvas(int,int) const; + bool onCanvas(const QPoint &) const; + bool validChunk(int,int) const; + bool validChunk(const QPoint &) const; + + int chunkSize() const; + virtual void retune(int,int = 100); + + // These next three are marked as internal in the Qt v2.x + // documentation. +// bool sameChunk() const; +// virtual void setChangedChunk(int,int); +// virtual void setChangedChunkContaining(int,int); + virtual void setAllChanged(); + virtual void setChanged(const QRect &); +%If (Qt_3_0_0 -) + virtual void setUnchanged(const QRect &); +%End + + QCanvasItemList allItems(); + QCanvasItemList collisions(const QPoint &) const; + QCanvasItemList collisions(const QRect &) const; + QCanvasItemList collisions(const QPointArray &,const QCanvasItem *, + bool) const; + +%If (Qt_3_0_0 -) + void drawArea(const QRect &,QPainter *,bool = 0); +%End + + virtual void setAdvancePeriod(int); + virtual void setUpdatePeriod(int); + + virtual void setDoubleBuffering(bool); + +signals: + void resized(); + +public slots: + virtual void advance(); + virtual void update(); + +protected: + virtual void drawBackground(QPainter &,const QRect &); + virtual void drawForeground(QPainter &,const QRect &); + +private: +%If (Qt_3_1_0 -) + QCanvas(const QCanvas &); +%End +}; + + +class QCanvasView : QScrollView +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_0) + QCanvasView(QCanvas * = 0,QWidget * /TransferThis/ = 0, + const char * = 0,WFlags = 0); +%End +%If (Qt_3_0_0 -) + QCanvasView(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); + QCanvasView(QCanvas *,QWidget * /TransferThis/ = 0,const char * = 0, + WFlags = 0); +%End + + QCanvas* canvas() const; + void setCanvas(QCanvas *); + +%If (Qt_3_0_0 -) + const QWMatrix &worldMatrix() const; + const QWMatrix &inverseWorldMatrix() const; + bool setWorldMatrix(const QWMatrix &); +%End + +protected: + void drawContents(QPainter *,int,int,int,int); + QSize sizeHint() const; + +private: +%If (Qt_3_1_0 -) + QCanvasView(const QCanvasView &); +%End +}; + + +class QCanvasPixmap : QPixmap +{ +%TypeHeaderCode +#include +%End + +public: + QCanvasPixmap(const QString &); + QCanvasPixmap(const QImage &); +%If (- Qt_3_0_0) + QCanvasPixmap(const QPixmap &,QPoint); +%End +%If (Qt_3_0_0 -) + QCanvasPixmap(const QPixmap &,const QPoint &); +%End + + int offsetX() const; + int offsetY() const; + void setOffset(int,int); + +private: +%If (Qt_3_1_0 -) + QCanvasPixmap(const QCanvasPixmap &); +%End +}; + + +class QCanvasPixmapArray +{ +%TypeHeaderCode +#include +%End + +public: + QCanvasPixmapArray(); + QCanvasPixmapArray(const QString &,int = 0); +%If (- Qt_3_0_0) + QCanvasPixmapArray(QPtrList,QPtrList); +%End +%If (Qt_3_0_0 -) + QCanvasPixmapArray(QValueList,QPointArray = QPointArray()); +%End + + bool readPixmaps(const QString &,int = 0) /ReleaseGIL/; + bool readCollisionMasks(const QString &) /ReleaseGIL/; + +%If (Qt_3_0_0 -) + bool isValid() const; +%End + + QCanvasPixmap *image(int) const; + void setImage(int,QCanvasPixmap * /Transfer/); + uint count() const; + +private: +%If (Qt_3_1_0 -) + QCanvasPixmapArray(const QCanvasPixmapArray &); +%End +}; + + +class QCanvasSprite : QCanvasItem +{ +%TypeHeaderCode +#include +%End + +public: + QCanvasSprite(QCanvasPixmapArray *,QCanvas * /TransferThis/); + + void setSequence(QCanvasPixmapArray *); + + void move(double,double); + virtual void move(double,double,int); + void setFrame(int); + +%If (Qt_3_0_0 -) + enum FrameAnimationType { + Cycle, + Oscillate + }; + + virtual void setFrameAnimation(FrameAnimationType = Cycle,int = 1, + int = 0); +%End + int frame() const; + int frameCount() const; + +%If (- Qt_3_0_0) + virtual int rtti() const; +%End +%If (Qt_3_0_0 -) + int rtti() const; +%End + + bool collidesWith(const QCanvasItem *) const; + + QRect boundingRect() const; + +%If (Qt_3_0_0 -) + int width() const; + int height() const; + + int leftEdge() const; + int topEdge() const; + int rightEdge() const; + int bottomEdge() const; + + int leftEdge(int) const; + int topEdge(int) const; + int rightEdge(int) const; + int bottomEdge(int) const; + QCanvasPixmap *image() const; + virtual QCanvasPixmap *imageAdvanced() const; + QCanvasPixmap *image(int) const; + // This is really virtual, but we want to use the super-class's virtual + // handler. Having to do this is really a SIP bug. + void advance(int); + + void draw(QPainter &); +%End + +protected: +%If (- Qt_3_0_0) + void draw(QPainter &); + int width() const; + int height() const; + int absX() const; + int absY() const; + int absX2() const; + int absY2() const; + int absX(int) const; + int absY(int) const; + int absX2(int) const; + int absY2(int) const; + QCanvasPixmap *image() const; + virtual QCanvasPixmap *imageAdvanced() const; + QCanvasPixmap *image(int) const; +%End + +private: +%If (Qt_3_1_0 -) + QCanvasSprite(const QCanvasSprite &); +%End +}; + + +class QCanvasPolygonalItem : QCanvasItem +{ +%TypeHeaderCode +#include +%End + +public: + QCanvasPolygonalItem(QCanvas * /TransferThis/); + + bool collidesWith(const QCanvasItem *) const; + + virtual void setPen(QPen); + virtual void setBrush(QBrush); + + QPen pen() const; + QBrush brush() const; + + virtual QPointArray areaPoints() const = 0; + virtual QPointArray areaPointsAdvanced() const; + QRect boundingRect() const; + + int rtti() const; + +protected: + void draw(QPainter &); + virtual void drawShape(QPainter &) = 0; + + bool winding() const; + void setWinding(bool); + +%If (Qt_3_1_0 -) + void invalidate(); + bool isValid() const; +%End +}; + + +class QCanvasRectangle : QCanvasPolygonalItem +{ +%TypeHeaderCode +#include +%End + +public: + QCanvasRectangle(QCanvas * /TransferThis/); + QCanvasRectangle(const QRect &,QCanvas * /TransferThis/); + QCanvasRectangle(int,int,int,int,QCanvas * /TransferThis/); + + int width() const; + int height() const; + void setSize(int,int); + QSize size() const; + QPointArray areaPoints() const; + QRect rect() const; + + bool collidesWith(const QCanvasItem *) const; + + int rtti() const; + +protected: + void drawShape(QPainter &); + QPointArray chunks() const; +}; + + +class QCanvasPolygon : QCanvasPolygonalItem +{ +%TypeHeaderCode +#include +%End + +public: + QCanvasPolygon(QCanvas * /TransferThis/); + + void setPoints(QPointArray); + QPointArray points() const; + void moveBy(double,double); + + QPointArray areaPoints() const; + + int rtti() const; + +protected: + void drawShape(QPainter &); +}; + + +%If (Qt_3_0_0 -) + +class QCanvasSpline : QCanvasPolygon +{ +%TypeHeaderCode +#include +%End + +public: + QCanvasSpline(QCanvas * /TransferThis/); + + void setControlPoints(QPointArray,bool = 1); + QPointArray controlPoints() const; + bool closed() const; + + int rtti() const; +}; + +%End + + +class QCanvasLine : QCanvasPolygonalItem +{ +%TypeHeaderCode +#include +%End + +public: + QCanvasLine(QCanvas * /TransferThis/); + + void setPoints(int,int,int,int); + + QPoint startPoint() const; + QPoint endPoint() const; + + int rtti() const; + + void setPen(QPen); +%If (Qt_3_3_0 -) + void moveBy(double,double); +%End + +protected: + void drawShape(QPainter &); + QPointArray areaPoints() const; +}; + + +class QCanvasEllipse : QCanvasPolygonalItem +{ +%TypeHeaderCode +#include +%End + +public: + QCanvasEllipse(QCanvas * /TransferThis/); + QCanvasEllipse(int,int,QCanvas * /TransferThis/); + QCanvasEllipse(int,int,int,int,QCanvas * /TransferThis/); + + int width() const; + int height() const; + void setSize(int,int); + void setAngles(int,int); + int angleStart() const; + int angleLength() const; + QPointArray areaPoints() const; + + bool collidesWith(const QCanvasItem *) const; + + int rtti() const; + +protected: + void drawShape(QPainter &); +}; + + +class QCanvasText : QCanvasItem +{ +%TypeHeaderCode +#include +%End + +public: + QCanvasText(QCanvas * /TransferThis/); + QCanvasText(const QString &,QCanvas * /TransferThis/); + QCanvasText(const QString &,QFont,QCanvas * /TransferThis/); + + void setText(const QString &); + void setFont(const QFont &); + void setColor(const QColor &); + QString text() const; + QFont font() const; + QColor color() const; + + void moveBy(double,double); + + int textFlags() const; + void setTextFlags(int); + + QRect boundingRect() const; + + bool collidesWith(const QCanvasItem *) const; + +%If (- Qt_3_0_0) + virtual int rtti() const; +%End +%If (Qt_3_0_0 -) + int rtti() const; +%End + +protected: + virtual void draw(QPainter &); + +private: +%If (Qt_3_1_0 -) + QCanvasText(const QCanvasText &); +%End +}; + +%End diff --git a/sip/qtcanvas/qtcanvasmod.sip b/sip/qtcanvas/qtcanvasmod.sip new file mode 100644 index 0000000..1ef22ae --- /dev/null +++ b/sip/qtcanvas/qtcanvasmod.sip @@ -0,0 +1,70 @@ +// This is the SIP interface definition for the qtcanvas module of PyQt. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Module qtcanvas 1 + +%Import qt/qtmod.sip + +%Include copying.sip + + +%Include qcanvas.sip + + +// The build file template. + +%Makefile qtcanvas.pro.in +# The project file for the qtcanvas module. +# +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +TEMPLATE = lib +TARGET = @BLX_TARGET_LIB@ +DESTDIR = @PYQT_MODDIR@ +CONFIG += @BLX_CONFIG_LIB@ @PYQT_WARN@ +INCLUDEPATH = @BLX_INCLUDEPATH@ +DEFINES = @BLX_DEFINES@ +LIBS += @PYQT_QT_MODULE@ @BLX_LIBS@ +macx:QMAKE_LFLAGS += -framework Python + +SOURCES = $B + +HEADERS = $H +%End diff --git a/sip/qtext/copying.sip b/sip/qtext/copying.sip new file mode 100644 index 0000000..463904b --- /dev/null +++ b/sip/qtext/copying.sip @@ -0,0 +1,51 @@ +// This is the SIP file defining the PyQt license. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Copying +Copyright (c) 2007 + Riverbank Computing Limited + +This file is part of PyQt. + +This copy of PyQt is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +PyQt is supplied 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 General Public License for more +details. + +You should have received a copy of the GNU General Public License along with +PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +%End + + +%OptionalInclude pyqt-internal.sip +%OptionalInclude pyqt-gpl.sip +%OptionalInclude pyqt-commercial.sip +%OptionalInclude pyqt-edu.sip +%OptionalInclude pyqt-eval.sip +%OptionalInclude pyqt-nc.sip +%OptionalInclude pyqt-tkc.sip diff --git a/sip/qtext/qextscintilla.sip b/sip/qtext/qextscintilla.sip new file mode 100644 index 0000000..c03dc56 --- /dev/null +++ b/sip/qtext/qextscintilla.sip @@ -0,0 +1,411 @@ +// This is the SIP interface definition for QextScintilla. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +class QextScintilla : QextScintillaBase +{ +%TypeHeaderCode +#include +%End + +public: + enum { + AiMaintain, + AiOpening, + AiClosing + }; + + enum AutoCompletionSource { + AcsDocument, + AcsAPIs, +%If (QScintilla_1_7 -) + AcsAll, +%End + }; + + enum BraceMatch { + NoBraceMatch, + StrictBraceMatch, + SloppyBraceMatch + }; + +%If (QScintilla_1_4 -) + enum EdgeMode { + EdgeNone, + EdgeLine, + EdgeBackground + }; +%End + + enum EolMode { + EolWindows, + EolUnix, + EolMac + }; + + enum FoldStyle { + NoFoldStyle, + PlainFoldStyle, + CircledFoldStyle, + BoxedFoldStyle, + CircledTreeFoldStyle, + BoxedTreeFoldStyle + }; + + enum MarkerSymbol { + Circle, + Rectangle, + RightTriangle, + SmallRectangle, + RightArrow, + Invisible, + DownTriangle, + Minus, + Plus, + VerticalLine, + BottomLeftCorner, + LeftSideSplitter, + BoxedPlus, + BoxedPlusConnected, + BoxedMinus, + BoxedMinusConnected, + RoundedBottomLeftCorner, + LeftSideRoundedSplitter, + CircledPlus, + CircledPlusConnected, + CircledMinus, + CircledMinusConnected, + Background, + ThreeDots, + ThreeRightArrows + }; + + enum WhitespaceVisibility { + WsInvisible, + WsVisible, + WsVisibleAfterIndent + }; + + enum WrapMode { + WrapNone, + WrapWord, +%If (QScintilla_1_7 -) + WrapCharacter, +%End + }; + +%If (QScintilla_1_7 -) + enum WrapVisualFlag { + WrapFlagNone, + WrapFlagByText, + WrapFlagByBorder, + }; +%End + + QextScintilla(QWidget * /TransferThis/ = 0,const char * = 0, + WFlags = 0); + + bool autoCompletionCaseSensitivity(); +%If (QScintilla_1_7 -) + bool autoCompletionFillupsEnabled(); +%End + bool autoCompletionReplaceWord(); + bool autoCompletionShowSingle(); + AutoCompletionSource autoCompletionSource() const; + int autoCompletionThreshold() const; + bool autoIndent() const; + bool backspaceUnindents(); + void beginUndoAction(); + BraceMatch braceMatching() const; + int callTipsVisible() const; +%If (QScintilla_1_7 -) + void cancelList(); +%End + void clearRegisteredImages(); + void convertEols(EolMode); +%If (QScintilla_1_3 -) + QextScintillaDocument document(); +%End + void endUndoAction(); + +%If (QScintilla_1_4 -) + QColor edgeColor(); + int edgeColumn(); + EdgeMode edgeMode(); +%End + + EolMode eolMode(); + bool eolVisibility(); + +%If (QScintilla_1_7 -) + QColor color() const; + QColor paper() const; +%End + +%If (QScintilla_1_6 -) + virtual bool findFirst(const QString &,bool,bool,bool,bool,bool = 1, + int = -1,int = -1,bool = 1); +%End +%If (- QScintilla_1_6) + virtual bool findFirst(const QString &,bool,bool,bool,bool,bool = 1, + int = -1,int = -1); +%End + virtual bool findNext(); + +%If (QScintilla_1_7 -) + int firstVisibleLine(); +%End + + FoldStyle folding() const; + + void getCursorPosition(int *,int *); + void getSelection(int *,int *,int *,int *); + bool hasSelectedText(); + + int indentation(int); + bool indentationGuides(); + bool indentationsUseTabs(); + int indentationWidth(); + +%If (QScintilla_1_7 -) + bool isCallTipActive(); + bool isListActive(); +%End + bool isModified(); + bool isReadOnly(); + bool isRedoAvailable(); + bool isUndoAvailable(); + bool isUtf8(); + int lineAt(const QPoint &); + int lineLength(int); + int lines(); + int length(); +%If (QScintilla_1_7 -) + QextScintillaLexer *lexer() const; +%End + + bool marginLineNumbers(int); + int marginMarkerMask(int); + bool marginSensitivity(int); + int marginWidth(int); + + int markerDefine(MarkerSymbol,int = -1); + int markerDefine(char,int = -1); + int markerDefine(const QPixmap *,int = -1); + int markerAdd(int,int); + unsigned markersAtLine(int); + void markerDelete(int,int = -1); + void markerDeleteAll(int = -1); + void markerDeleteHandle(int); + int markerLine(int); + int markerFindNext(int,unsigned); + int markerFindPrevious(int,unsigned); +%If (QScintilla_1_3 -) + virtual void recolor(int = 0,int = -1); +%End + void registerImage(int,const QPixmap *); + virtual void replace(const QString &); + void resetFoldMarginColors(); + void setFoldMarginColors(const QColor &,const QColor &); + + void setAutoCompletionAPIs(QextScintillaAPIs * = 0); + void setAutoCompletionFillups(const char *); +%If (QScintilla_1_7 -) + void setAutoCompletionFillupsEnabled(bool); + void setAutoCompletionStartCharacters(const char *); +%End + + void setCallTipsAPIs(QextScintillaAPIs * = 0); + void setCallTipsBackgroundColor(const QColor &); + void setCallTipsForegroundColor(const QColor &); + void setCallTipsHighlightColor(const QColor &); + void setCallTipsVisible(int); + +%If (QScintilla_1_3 -) + void setDocument(const QextScintillaDocument &); +%End + +%If (QScintilla_1_4 -) + void setEdgeColor(const QColor &); + void setEdgeColumn(int); + void setEdgeMode(EdgeMode); +%End + +%If (QScintilla_1_7 -) + virtual void setFont(const QFont &); +%End + + void setMarkerBackgroundColor(const QColor &,int = -1); + void setMarkerForegroundColor(const QColor &,int = -1); + + void setMatchedBraceBackgroundColor(const QColor &); + void setMatchedBraceForegroundColor(const QColor &); + void setUnmatchedBraceBackgroundColor(const QColor &); + void setUnmatchedBraceForegroundColor(const QColor &); + +%If (QScintilla_1_7 -) + void setWrapVisualFlags(WrapVisualFlag, + WrapVisualFlag = QextScintilla::WrapFlagNone, int = 0); +%End + + QString selectedText(); +%If (QScintilla_1_7 -) + void showUserList(int, const QStringList &); +%End + QextScintillaCommandSet *standardCommands() const; + bool tabIndents(); + int tabWidth(); + QString text(); + QString text(int); +%If (QScintilla_1_7 -) + int textHeight(int); +%End + WhitespaceVisibility whitespaceVisibility(); +%If (QScintilla_1_4 -) + WrapMode wrapMode(); +%End + +public slots: + virtual void append(const QString &); +%If (QScintilla_1_7 -) + virtual void autoCompleteFromAll(); +%End + virtual void autoCompleteFromAPIs(); + virtual void autoCompleteFromDocument(); + virtual void callTip(); + virtual void clear(); + virtual void copy(); + virtual void cut(); + + virtual void ensureCursorVisible(); + virtual void ensureLineVisible(int); +%If (QScintilla_1_7 -) + virtual void foldAll(bool = 0); +%End +%If (- QScintilla_1_7) + virtual void foldAll(); +%End + virtual void foldLine(int); + virtual void indent(int); +%If (QScintilla_1_4 -) + virtual void insert(const QString &); +%End + virtual void insertAt(const QString &,int,int); + virtual void moveToMatchingBrace(); + virtual void paste(); + virtual void redo(); + virtual void removeSelectedText(); +%If (QScintilla_1_4 -) + virtual void resetSelectionBackgroundColor(); + virtual void resetSelectionForegroundColor(); +%End + virtual void selectAll(bool = 1); + virtual void selectToMatchingBrace(); + + virtual void setAutoCompletionCaseSensitivity(bool); + virtual void setAutoCompletionReplaceWord(bool); + virtual void setAutoCompletionShowSingle(bool); + virtual void setAutoCompletionSource(AutoCompletionSource); + virtual void setAutoCompletionThreshold(int); + virtual void setAutoIndent(bool); + virtual void setBraceMatching(BraceMatch); + virtual void setBackspaceUnindents(bool); +%If (QScintilla_1_3 -) + virtual void setCaretForegroundColor(const QColor &); + virtual void setCaretLineBackgroundColor(const QColor &); + virtual void setCaretLineVisible(bool); + virtual void setCaretWidth(int); +%End +%If (QScintilla_1_7 -) + virtual void setColor(const QColor &); +%End + virtual void setCursorPosition(int,int); + virtual void setEolMode(EolMode); + virtual void setEolVisibility(bool); + virtual void setFolding(FoldStyle); + + virtual void setIndentation(int,int); + virtual void setIndentationGuides(bool); + virtual void setIndentationGuidesBackgroundColor(const QColor &); + virtual void setIndentationGuidesForegroundColor(const QColor &); + virtual void setIndentationsUseTabs(bool); + virtual void setIndentationWidth(int); + + virtual void setLexer(QextScintillaLexer * = 0); + + virtual void setMarginsBackgroundColor(const QColor &); + virtual void setMarginsFont(const QFont &); + virtual void setMarginsForegroundColor(const QColor &); + + virtual void setMarginLineNumbers(int,bool); + virtual void setMarginMarkerMask(int,int); + virtual void setMarginSensitivity(int,bool); + virtual void setMarginWidth(int,int); + virtual void setMarginWidth(int,const QString &); + + virtual void setModified(bool); +%If (QScintilla_1_7 -) + virtual void setPaper(const QColor &); +%End + virtual void setReadOnly(bool); + virtual void setSelection(int,int,int,int); +%If (QScintilla_1_3 -) + virtual void setSelectionBackgroundColor(const QColor &); + virtual void setSelectionForegroundColor(const QColor &); +%End + virtual void setTabIndents(bool); + virtual void setTabWidth(int); + virtual void setText(const QString &); + virtual void setUtf8(bool); + virtual void setWhitespaceVisibility(WhitespaceVisibility); +%If (QScintilla_1_4 -) + virtual void setWrapMode(WrapMode); +%End + + virtual void undo(); + virtual void unindent(int); + + virtual void zoomIn(int); + virtual void zoomIn(); + virtual void zoomOut(int); + virtual void zoomOut(); + virtual void zoomTo(int); + +signals: + void cursorPositionChanged(int,int); + void copyAvailable(bool); + void marginClicked(int,int,Qt::ButtonState); + void modificationAttempted(); + void modificationChanged(bool); + void selectionChanged(); + void textChanged(); +%If (QScintilla_1_7 -) + void userListActivated(int, const QString &); +%End + +private: + QextScintilla(const QextScintilla &); + +}; diff --git a/sip/qtext/qextscintillaapis.sip b/sip/qtext/qextscintillaapis.sip new file mode 100644 index 0000000..ad388fb --- /dev/null +++ b/sip/qtext/qextscintillaapis.sip @@ -0,0 +1,42 @@ +// This is the SIP interface definition for QextScintillaAPIs. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +class QextScintillaAPIs +{ +%TypeHeaderCode +#include +%End + +public: + QextScintillaAPIs(); + + void add(const QString &); + bool load(const QString &); + void clear(); + +private: + QextScintillaAPIs(const QextScintillaAPIs &); +}; diff --git a/sip/qtext/qextscintillabase.sip b/sip/qtext/qextscintillabase.sip new file mode 100644 index 0000000..009ea0b --- /dev/null +++ b/sip/qtext/qextscintillabase.sip @@ -0,0 +1,1024 @@ +// This is the SIP interface definition for QextScintillaBase. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +class QextScintillaBase : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + enum { + SCI_START, + SCI_OPTIONAL_START, + SCI_LEXER_START, + SCI_ADDTEXT, + SCI_ADDSTYLEDTEXT, + SCI_INSERTTEXT, + SCI_CLEARALL, + SCI_CLEARDOCUMENTSTYLE, + SCI_GETLENGTH, + SCI_GETCHARAT, + SCI_GETCURRENTPOS, + SCI_GETANCHOR, + SCI_GETSTYLEAT, + SCI_REDO, + SCI_SETUNDOCOLLECTION, + SCI_SELECTALL, + SCI_SETSAVEPOINT, + SCI_GETSTYLEDTEXT, + SCI_CANREDO, + SCI_MARKERLINEFROMHANDLE, + SCI_MARKERDELETEHANDLE, + SCI_GETUNDOCOLLECTION, + SCI_GETVIEWWS, + SCI_SETVIEWWS, + SCI_POSITIONFROMPOINT, + SCI_POSITIONFROMPOINTCLOSE, + SCI_GOTOLINE, + SCI_GOTOPOS, + SCI_SETANCHOR, + SCI_GETCURLINE, + SCI_GETENDSTYLED, + SCI_CONVERTEOLS, + SCI_GETEOLMODE, + SCI_SETEOLMODE, + SCI_STARTSTYLING, + SCI_SETSTYLING, + SCI_GETBUFFEREDDRAW, + SCI_SETBUFFEREDDRAW, + SCI_SETTABWIDTH, + SCI_GETTABWIDTH, + SCI_SETCODEPAGE, + SCI_SETUSEPALETTE, + SCI_MARKERDEFINE, + SCI_MARKERSETFORE, + SCI_MARKERSETBACK, + SCI_MARKERADD, + SCI_MARKERDELETE, + SCI_MARKERDELETEALL, + SCI_MARKERGET, + SCI_MARKERNEXT, + SCI_MARKERPREVIOUS, + SCI_MARKERDEFINEPIXMAP, + SCI_SETMARGINTYPEN, + SCI_GETMARGINTYPEN, + SCI_SETMARGINWIDTHN, + SCI_GETMARGINWIDTHN, + SCI_SETMARGINMASKN, + SCI_GETMARGINMASKN, + SCI_SETMARGINSENSITIVEN, + SCI_GETMARGINSENSITIVEN, + SCI_STYLECLEARALL, + SCI_STYLESETFORE, + SCI_STYLESETBACK, + SCI_STYLESETBOLD, + SCI_STYLESETITALIC, + SCI_STYLESETSIZE, + SCI_STYLESETFONT, + SCI_STYLESETEOLFILLED, + SCI_STYLERESETDEFAULT, + SCI_STYLESETUNDERLINE, + SCI_STYLESETCASE, + SCI_STYLESETCHARACTERSET, + SCI_SETSELFORE, + SCI_SETSELBACK, + SCI_SETCARETFORE, + SCI_ASSIGNCMDKEY, + SCI_CLEARCMDKEY, + SCI_CLEARALLCMDKEYS, + SCI_SETSTYLINGEX, + SCI_STYLESETVISIBLE, + SCI_GETCARETPERIOD, + SCI_SETCARETPERIOD, + SCI_SETWORDCHARS, + SCI_BEGINUNDOACTION, + SCI_ENDUNDOACTION, + SCI_INDICSETSTYLE, + SCI_INDICGETSTYLE, + SCI_INDICSETFORE, + SCI_INDICGETFORE, + SCI_SETWHITESPACEFORE, + SCI_SETWHITESPACEBACK, + SCI_SETSTYLEBITS, + SCI_GETSTYLEBITS, + SCI_SETLINESTATE, + SCI_GETLINESTATE, + SCI_GETMAXLINESTATE, + SCI_GETCARETLINEVISIBLE, + SCI_SETCARETLINEVISIBLE, + SCI_GETCARETLINEBACK, + SCI_SETCARETLINEBACK, + SCI_STYLESETCHANGEABLE, + SCI_AUTOCSHOW, + SCI_AUTOCCANCEL, + SCI_AUTOCACTIVE, + SCI_AUTOCPOSSTART, + SCI_AUTOCCOMPLETE, + SCI_AUTOCSTOPS, + SCI_AUTOCSETSEPARATOR, + SCI_AUTOCGETSEPARATOR, + SCI_AUTOCSELECT, + SCI_AUTOCSETCANCELATSTART, + SCI_AUTOCGETCANCELATSTART, + SCI_AUTOCSETFILLUPS, + SCI_AUTOCSETCHOOSESINGLE, + SCI_AUTOCGETCHOOSESINGLE, + SCI_AUTOCSETIGNORECASE, + SCI_AUTOCGETIGNORECASE, + SCI_USERLISTSHOW, + SCI_AUTOCSETAUTOHIDE, + SCI_AUTOCGETAUTOHIDE, + SCI_AUTOCSETDROPRESTOFWORD, + SCI_AUTOCGETDROPRESTOFWORD, + SCI_SETINDENT, + SCI_GETINDENT, + SCI_SETUSETABS, + SCI_GETUSETABS, + SCI_SETLINEINDENTATION, + SCI_GETLINEINDENTATION, + SCI_GETLINEINDENTPOSITION, + SCI_GETCOLUMN, + SCI_SETHSCROLLBAR, + SCI_GETHSCROLLBAR, + SCI_SETINDENTATIONGUIDES, + SCI_GETINDENTATIONGUIDES, + SCI_SETHIGHLIGHTGUIDE, + SCI_GETHIGHLIGHTGUIDE, + SCI_GETLINEENDPOSITION, + SCI_GETCODEPAGE, + SCI_GETCARETFORE, + SCI_GETUSEPALETTE, + SCI_GETREADONLY, + SCI_SETCURRENTPOS, + SCI_SETSELECTIONSTART, + SCI_GETSELECTIONSTART, + SCI_SETSELECTIONEND, + SCI_GETSELECTIONEND, + SCI_SETPRINTMAGNIFICATION, + SCI_GETPRINTMAGNIFICATION, + SCI_SETPRINTCOLOURMODE, + SCI_GETPRINTCOLOURMODE, + SCI_FINDTEXT, + SCI_FORMATRANGE, + SCI_GETFIRSTVISIBLELINE, + SCI_GETLINE, + SCI_GETLINECOUNT, + SCI_SETMARGINLEFT, + SCI_GETMARGINLEFT, + SCI_SETMARGINRIGHT, + SCI_GETMARGINRIGHT, + SCI_GETMODIFY, + SCI_SETSEL, + SCI_GETSELTEXT, + SCI_GETTEXTRANGE, + SCI_HIDESELECTION, + SCI_POINTXFROMPOSITION, + SCI_POINTYFROMPOSITION, + SCI_LINEFROMPOSITION, + SCI_POSITIONFROMLINE, + SCI_LINESCROLL, + SCI_SCROLLCARET, + SCI_REPLACESEL, + SCI_SETREADONLY, + SCI_NULL, + SCI_CANPASTE, + SCI_CANUNDO, + SCI_EMPTYUNDOBUFFER, + SCI_UNDO, + SCI_CUT, + SCI_COPY, + SCI_PASTE, + SCI_CLEAR, + SCI_SETTEXT, + SCI_GETTEXT, + SCI_GETTEXTLENGTH, + SCI_GETDIRECTFUNCTION, + SCI_GETDIRECTPOINTER, + SCI_SETOVERTYPE, + SCI_GETOVERTYPE, + SCI_SETCARETWIDTH, + SCI_GETCARETWIDTH, + SCI_SETTARGETSTART, + SCI_GETTARGETSTART, + SCI_SETTARGETEND, + SCI_GETTARGETEND, + SCI_REPLACETARGET, + SCI_REPLACETARGETRE, + SCI_SEARCHINTARGET, + SCI_SETSEARCHFLAGS, + SCI_GETSEARCHFLAGS, + SCI_CALLTIPSHOW, + SCI_CALLTIPCANCEL, + SCI_CALLTIPACTIVE, + SCI_CALLTIPPOSSTART, + SCI_CALLTIPSETHLT, + SCI_CALLTIPSETBACK, + SCI_CALLTIPSETFORE, + SCI_CALLTIPSETFOREHLT, +%If (QScintilla_1_6 -) + SCI_AUTOCSETMAXWIDTH, + SCI_AUTOCGETMAXWIDTH, + SCI_AUTOCSETMAXHEIGHT, + SCI_AUTOCGETMAXHEIGHT, +%End +%If (QScintilla_1_7 -) + SCI_CALLTIPUSESTYLE, +%End + SCI_VISIBLEFROMDOCLINE, + SCI_DOCLINEFROMVISIBLE, + SCI_SETFOLDLEVEL, + SCI_GETFOLDLEVEL, + SCI_GETLASTCHILD, + SCI_GETFOLDPARENT, + SCI_SHOWLINES, + SCI_HIDELINES, + SCI_GETLINEVISIBLE, + SCI_SETFOLDEXPANDED, + SCI_GETFOLDEXPANDED, + SCI_TOGGLEFOLD, + SCI_ENSUREVISIBLE, + SCI_SETFOLDFLAGS, + SCI_ENSUREVISIBLEENFORCEPOLICY, +%If (QScintilla_1_6 -) + SCI_WRAPCOUNT, +%End + SCI_SETTABINDENTS, + SCI_GETTABINDENTS, + SCI_SETBACKSPACEUNINDENTS, + SCI_GETBACKSPACEUNINDENTS, + SCI_SETMOUSEDWELLTIME, + SCI_GETMOUSEDWELLTIME, + SCI_WORDSTARTPOSITION, + SCI_WORDENDPOSITION, + SCI_SETWRAPMODE, + SCI_GETWRAPMODE, + SCI_SETLAYOUTCACHE, + SCI_GETLAYOUTCACHE, + SCI_SETSCROLLWIDTH, + SCI_GETSCROLLWIDTH, + SCI_TEXTWIDTH, + SCI_SETENDATLASTLINE, + SCI_GETENDATLASTLINE, + SCI_TEXTHEIGHT, + SCI_SETVSCROLLBAR, + SCI_GETVSCROLLBAR, + SCI_APPENDTEXT, + SCI_GETTWOPHASEDRAW, + SCI_SETTWOPHASEDRAW, + SCI_AUTOCGETTYPESEPARATOR, + SCI_AUTOCSETTYPESEPARATOR, + SCI_TARGETFROMSELECTION, + SCI_LINESJOIN, + SCI_LINESSPLIT, + SCI_SETFOLDMARGINCOLOUR, + SCI_SETFOLDMARGINHICOLOUR, + SCI_LINEDOWN, + SCI_LINEDOWNEXTEND, + SCI_LINEUP, + SCI_LINEUPEXTEND, + SCI_CHARLEFT, + SCI_CHARLEFTEXTEND, + SCI_CHARRIGHT, + SCI_CHARRIGHTEXTEND, + SCI_WORDLEFT, + SCI_WORDLEFTEXTEND, + SCI_WORDRIGHT, + SCI_WORDRIGHTEXTEND, + SCI_HOME, + SCI_HOMEEXTEND, + SCI_LINEEND, + SCI_LINEENDEXTEND, + SCI_DOCUMENTSTART, + SCI_DOCUMENTSTARTEXTEND, + SCI_DOCUMENTEND, + SCI_DOCUMENTENDEXTEND, + SCI_PAGEUP, + SCI_PAGEUPEXTEND, + SCI_PAGEDOWN, + SCI_PAGEDOWNEXTEND, + SCI_EDITTOGGLEOVERTYPE, + SCI_CANCEL, + SCI_DELETEBACK, + SCI_TAB, + SCI_BACKTAB, + SCI_NEWLINE, + SCI_FORMFEED, + SCI_VCHOME, + SCI_VCHOMEEXTEND, + SCI_ZOOMIN, + SCI_ZOOMOUT, + SCI_DELWORDLEFT, + SCI_DELWORDRIGHT, + SCI_LINECUT, + SCI_LINEDELETE, + SCI_LINETRANSPOSE, + SCI_LOWERCASE, + SCI_UPPERCASE, + SCI_LINESCROLLDOWN, + SCI_LINESCROLLUP, + SCI_DELETEBACKNOTLINE, + SCI_HOMEDISPLAY, + SCI_HOMEDISPLAYEXTEND, + SCI_LINEENDDISPLAY, + SCI_LINEENDDISPLAYEXTEND, + SCI_MOVECARETINSIDEVIEW, + SCI_LINELENGTH, + SCI_BRACEHIGHLIGHT, + SCI_BRACEBADLIGHT, + SCI_BRACEMATCH, + SCI_GETVIEWEOL, + SCI_SETVIEWEOL, + SCI_GETDOCPOINTER, + SCI_SETDOCPOINTER, + SCI_SETMODEVENTMASK, + SCI_GETEDGECOLUMN, + SCI_SETEDGECOLUMN, + SCI_GETEDGEMODE, + SCI_SETEDGEMODE, + SCI_GETEDGECOLOUR, + SCI_SETEDGECOLOUR, + SCI_SEARCHANCHOR, + SCI_SEARCHNEXT, + SCI_SEARCHPREV, + SCI_LINESONSCREEN, + SCI_USEPOPUP, + SCI_SELECTIONISRECTANGLE, + SCI_SETZOOM, + SCI_GETZOOM, + SCI_CREATEDOCUMENT, + SCI_ADDREFDOCUMENT, + SCI_RELEASEDOCUMENT, + SCI_GETMODEVENTMASK, + SCI_SETFOCUS, + SCI_GETFOCUS, + SCI_SETSTATUS, + SCI_GETSTATUS, + SCI_SETMOUSEDOWNCAPTURES, + SCI_GETMOUSEDOWNCAPTURES, + SCI_SETCURSOR, + SCI_GETCURSOR, + SCI_SETCONTROLCHARSYMBOL, + SCI_GETCONTROLCHARSYMBOL, + SCI_WORDPARTLEFT, + SCI_WORDPARTLEFTEXTEND, + SCI_WORDPARTRIGHT, + SCI_WORDPARTRIGHTEXTEND, + SCI_SETVISIBLEPOLICY, + SCI_DELLINELEFT, + SCI_DELLINERIGHT, + SCI_SETXOFFSET, + SCI_GETXOFFSET, + SCI_CHOOSECARETX, + SCI_GRABFOCUS, + SCI_SETXCARETPOLICY, + SCI_SETYCARETPOLICY, + SCI_LINEDUPLICATE, + SCI_REGISTERIMAGE, + SCI_SETPRINTWRAPMODE, + SCI_GETPRINTWRAPMODE, + SCI_CLEARREGISTEREDIMAGES, + SCI_STYLESETHOTSPOT, + SCI_SETHOTSPOTACTIVEFORE, + SCI_SETHOTSPOTACTIVEBACK, + SCI_SETHOTSPOTACTIVEUNDERLINE, + SCI_PARADOWN, + SCI_PARADOWNEXTEND, + SCI_PARAUP, + SCI_PARAUPEXTEND, +%If (QScintilla_1_1 -) + SCI_POSITIONBEFORE, + SCI_POSITIONAFTER, + SCI_COPYRANGE, + SCI_COPYTEXT, +%End +%If (QScintilla_1_3 -) + SCI_SETSELECTIONMODE, + SCI_GETSELECTIONMODE, + SCI_GETLINESELSTARTPOSITION, + SCI_GETLINESELENDPOSITION, + SCI_LINEDOWNRECTEXTEND, + SCI_LINEUPRECTEXTEND, + SCI_CHARLEFTRECTEXTEND, + SCI_CHARRIGHTRECTEXTEND, + SCI_HOMERECTEXTEND, + SCI_VCHOMERECTEXTEND, + SCI_LINEENDRECTEXTEND, + SCI_PAGEUPRECTEXTEND, + SCI_PAGEDOWNRECTEXTEND, + SCI_STUTTEREDPAGEUP, + SCI_STUTTEREDPAGEUPEXTEND, + SCI_STUTTEREDPAGEDOWN, + SCI_STUTTEREDPAGEDOWNEXTEND, + SCI_WORDLEFTEND, + SCI_WORDLEFTENDEXTEND, + SCI_WORDRIGHTEND, + SCI_WORDRIGHTENDEXTEND, + SCI_SETWHITESPACECHARS, + SCI_SETCHARSDEFAULT, + SCI_AUTOCGETCURRENT, + SCI_ALLOCATE, +%End + SCI_HOMEWRAP, + SCI_HOMEWRAPEXTEND, + SCI_LINEENDWRAP, + SCI_LINEENDWRAPEXTEND, + SCI_VCHOMEWRAP, + SCI_VCHOMEWRAPEXTEND, +%If (QScintilla_1_1 -) + SCI_LINECOPY, +%End +%If (QScintilla_1_6 -) + SCI_FINDCOLUMN, + SCI_GETCARETSTICKY, + SCI_SETCARETSTICKY, + SCI_TOGGLECARETSTICKY, +%End +%If (QScintilla_1_3 -) + SCI_SETWRAPVISUALFLAGS, + SCI_GETWRAPVISUALFLAGS, + SCI_SETWRAPVISUALFLAGSLOCATION, + SCI_GETWRAPVISUALFLAGSLOCATION, + SCI_SETWRAPSTARTINDENT, + SCI_GETWRAPSTARTINDENT, +%End +%If (QScintilla_1_7 -) + SCI_MARKERADDSET, + SCI_SETPASTECONVERTENDINGS + SCI_GETPASTECONVERTENDINGS + SCI_SELECTIONDUPLICATE + SCI_SETCARETLINEBACKALPHA + SCI_GETCARETLINEBACKALPHA + SCI_MARKERSETALPHA, + SCI_GETSELALPHA, + SCI_SETSELALPHA, +%End + SCI_STARTRECORD, + SCI_STOPRECORD, + SCI_SETLEXER, + SCI_GETLEXER, + SCI_COLOURISE, + SCI_SETPROPERTY, + SCI_SETKEYWORDS, + SCI_SETLEXERLANGUAGE, +%If (QScintilla_1_6 -) + SCI_LOADLEXERLIBRARY, + SCI_GETPROPERTY, + SCI_GETPROPERTYEXPANDED, + SCI_GETPROPERTYINT, +%End +%If (QScintilla_1_7 -) + SCI_GETSTYLEBITSNEEDED, +%End + }; + +%If (QScintilla_1_7 -) + enum + { + SC_ALPHA_TRANSPARENT, + SC_ALPHA_OPAQUE, + SC_ALPHA_NOALPHA, + }; +%End + +%If (QScintilla_1_3 -) + enum + { + SC_WRAPVISUALFLAG_NONE, + SC_WRAPVISUALFLAG_END, + SC_WRAPVISUALFLAG_START + }; + + enum + { + SC_WRAPVISUALFLAGLOC_DEFAULT, + SC_WRAPVISUALFLAGLOC_END_BY_TEXT, + SC_WRAPVISUALFLAGLOC_START_BY_TEXT + }; + + enum { + SC_SEL_STREAM, + SC_SEL_RECTANGLE, + SC_SEL_LINES + }; +%End + + enum { + SCWS_INVISIBLE, + SCWS_VISIBLEALWAYS, + SCWS_VISIBLEAFTERINDENT + }; + + enum { + SC_EOL_CRLF, + SC_EOL_CR, + SC_EOL_LF + }; + + enum { + SC_CP_DBCS, + SC_CP_UTF8 + }; + + enum { + SC_MARK_CIRCLE, + SC_MARK_ROUNDRECT, + SC_MARK_ARROW, + SC_MARK_SMALLRECT, + SC_MARK_SHORTARROW, + SC_MARK_EMPTY, + SC_MARK_ARROWDOWN, + SC_MARK_MINUS, + SC_MARK_PLUS, + SC_MARK_VLINE, + SC_MARK_LCORNER, + SC_MARK_TCORNER, + SC_MARK_BOXPLUS, + SC_MARK_BOXPLUSCONNECTED, + SC_MARK_BOXMINUS, + SC_MARK_BOXMINUSCONNECTED, + SC_MARK_LCORNERCURVE, + SC_MARK_TCORNERCURVE, + SC_MARK_CIRCLEPLUS, + SC_MARK_CIRCLEPLUSCONNECTED, + SC_MARK_CIRCLEMINUS, + SC_MARK_CIRCLEMINUSCONNECTED, + SC_MARK_BACKGROUND, + SC_MARK_DOTDOTDOT, + SC_MARK_ARROWS, + SC_MARK_PIXMAP, +%If (QScintilla_1_6 -) + SC_MARK_FULLRECT, +%End + SC_MARK_CHARACTER + }; + + enum { + SC_MARKNUM_FOLDEREND, + SC_MARKNUM_FOLDEROPENMID, + SC_MARKNUM_FOLDERMIDTAIL, + SC_MARKNUM_FOLDERTAIL, + SC_MARKNUM_FOLDERSUB, + SC_MARKNUM_FOLDER, + SC_MARKNUM_FOLDEROPEN, + SC_MASK_FOLDERS + }; + + enum { + SC_MARGIN_SYMBOL, + SC_MARGIN_NUMBER, +%If (QScintilla_1_7 -) + SC_MARGIN_BACK, + SC_MARGIN_FORE, +%End + }; + + enum { + STYLE_DEFAULT, + STYLE_LINENUMBER, + STYLE_BRACELIGHT, + STYLE_BRACEBAD, + STYLE_CONTROLCHAR, + STYLE_INDENTGUIDE, +%If (QScintilla_1_7 -) + STYLE_CALLTIP, +%End + STYLE_LASTPREDEFINED, +%If (QScintilla_1_3 -) + STYLE_MAX +%End + }; + + enum { + SC_CHARSET_ANSI, + SC_CHARSET_DEFAULT, + SC_CHARSET_BALTIC, + SC_CHARSET_CHINESEBIG5, + SC_CHARSET_EASTEUROPE, + SC_CHARSET_GB2312, + SC_CHARSET_GREEK, + SC_CHARSET_HANGUL, + SC_CHARSET_MAC, + SC_CHARSET_OEM, + SC_CHARSET_RUSSIAN, + SC_CHARSET_SHIFTJIS, + SC_CHARSET_SYMBOL, + SC_CHARSET_TURKISH, + SC_CHARSET_JOHAB, + SC_CHARSET_HEBREW, + SC_CHARSET_ARABIC, + SC_CHARSET_VIETNAMESE, + SC_CHARSET_THAI, +%If (QScintilla_1_6 -) + SC_CHARSET_8859_15, +%End + }; + + enum { + SC_CASE_MIXED, + SC_CASE_UPPER, + SC_CASE_LOWER + }; + + enum { + INDIC_MAX, + INDIC_PLAIN, + INDIC_SQUIGGLE, + INDIC_TT, + INDIC_DIAGONAL, + INDIC_STRIKE, +%If (QScintilla_1_2 -) + INDIC_HIDDEN, +%End +%If (QScintilla_1_3 -) + INDIC_BOX, +%End +%If (QScintilla_1_7 -) + INDIC_ROUNDBOX, +%End + INDIC0_MASK, + INDIC1_MASK, + INDIC2_MASK, + INDICS_MASK + }; + + enum { + SC_PRINT_NORMAL, + SC_PRINT_INVERTLIGHT, + SC_PRINT_BLACKONWHITE, + SC_PRINT_COLOURONWHITE, + SC_PRINT_COLOURONWHITEDEFAULTBG + }; + + enum { + SCFIND_WHOLEWORD, + SCFIND_MATCHCASE, + SCFIND_WORDSTART, + SCFIND_REGEXP, + SCFIND_POSIX + }; + + enum { + SC_FOLDLEVELBASE, + SC_FOLDLEVELWHITEFLAG, + SC_FOLDLEVELHEADERFLAG, + SC_FOLDLEVELBOXHEADERFLAG, + SC_FOLDLEVELBOXFOOTERFLAG, + SC_FOLDLEVELCONTRACTED, + SC_FOLDLEVELUNINDENT, + SC_FOLDLEVELNUMBERMASK + }; + + enum + { + SC_FOLDFLAG_BOX, + SC_FOLDFLAG_LINEBEFORE_EXPANDED, + SC_FOLDFLAG_LINEBEFORE_CONTRACTED, + SC_FOLDFLAG_LINEAFTER_EXPANDED, + SC_FOLDFLAG_LINEAFTER_CONTRACTED, + SC_FOLDFLAG_LEVELNUMBERS + }; + + enum { + SC_TIME_FOREVER + }; + + enum { + SC_WRAP_NONE, + SC_WRAP_WORD, +%If (QScintilla_1_6 -) + SC_WRAP_CHAR, +%End + }; + + enum { + SC_CACHE_NONE, + SC_CACHE_CARET, + SC_CACHE_PAGE, + SC_CACHE_DOCUMENT + }; + + enum { + EDGE_NONE, + EDGE_LINE, + EDGE_BACKGROUND + }; + + enum { + SC_CURSORNORMAL, + SC_CURSORWAIT + }; + + enum { + VISIBLE_SLOP, + VISIBLE_STRICT + }; + + enum { + CARET_SLOP, + CARET_STRICT, + CARET_JUMPS, + CARET_EVEN + }; + + enum { + SC_MOD_INSERTTEXT, + SC_MOD_DELETETEXT, + SC_MOD_CHANGESTYLE, + SC_MOD_CHANGEFOLD, + SC_PERFORMED_USER, + SC_PERFORMED_UNDO, + SC_PERFORMED_REDO, +%If (QScintilla_1_6 -) + SC_MULTISTEPUNDOREDO, +%End + SC_LASTSTEPINUNDOREDO, + SC_MOD_CHANGEMARKER, + SC_MOD_BEFOREINSERT, + SC_MOD_BEFOREDELETE, +%If (QScintilla_1_6 -) + SC_MULTILINEUNDOREDO, +%End + SC_MODEVENTMASKALL + }; + + enum { + SCK_DOWN, + SCK_UP, + SCK_LEFT, + SCK_RIGHT, + SCK_HOME, + SCK_END, + SCK_PRIOR, + SCK_NEXT, + SCK_DELETE, + SCK_INSERT, + SCK_ESCAPE, + SCK_BACK, + SCK_TAB, + SCK_RETURN, + SCK_ADD, + SCK_SUBTRACT, + SCK_DIVIDE + }; + + enum { +%If (QScintilla_1_7 -) + SCMOD_NORM, +%End + SCMOD_SHIFT, + SCMOD_CTRL, + SCMOD_ALT + }; + + enum { + SCLEX_CONTAINER, + SCLEX_NULL, + SCLEX_PYTHON, + SCLEX_CPP, + SCLEX_HTML, + SCLEX_XML, + SCLEX_PERL, + SCLEX_SQL, + SCLEX_VB, + SCLEX_PROPERTIES, + SCLEX_ERRORLIST, + SCLEX_MAKEFILE, + SCLEX_BATCH, + SCLEX_LATEX, + SCLEX_LUA, + SCLEX_DIFF, + SCLEX_CONF, + SCLEX_PASCAL, + SCLEX_AVE, + SCLEX_ADA, + SCLEX_LISP, + SCLEX_RUBY, + SCLEX_EIFFEL, + SCLEX_EIFFELKW, + SCLEX_TCL, + SCLEX_NNCRONTAB, + SCLEX_BULLANT, + SCLEX_VBSCRIPT, + SCLEX_ASP, + SCLEX_PHP, + SCLEX_BAAN, + SCLEX_MATLAB, +%If (QScintilla_1_2 -) + SCLEX_SCRIPTOL, +%End + SCLEX_ASM, + SCLEX_CPPNOCASE, + SCLEX_FORTRAN, + SCLEX_F77, + SCLEX_CSS, + SCLEX_POV, +%If (QScintilla_1_1 -) + SCLEX_LOUT, + SCLEX_ESCRIPT, +%End +%If (QScintilla_1_2 -) + SCLEX_PS, + SCLEX_NSIS, + SCLEX_MMIXAL, +%End +%If (QScintilla_1_3 -) + SCLEX_CLW, + SCLEX_CLWNOCASE, + SCLEX_LOT, + SCLEX_YAML, + SCLEX_TEX, + SCLEX_METAPOST, + SCLEX_POWERBASIC, + SCLEX_FORTH, + SCLEX_ERLANG, + SCLEX_OCTAVE, + SCLEX_MSSQL, + SCLEX_VERILOG, + SCLEX_KIX, + SCLEX_GUI4CLI, + SCLEX_SPECMAN, + SCLEX_AU3, + SCLEX_APDL, + SCLEX_BASH, +%End +%If (QScintilla_1_5 -) + SCLEX_ASN1, + SCLEX_VHDL, +%End +%If (QScintilla_1_6 -) + SCLEX_CAML, + SCLEX_BLITZBASIC, + SCLEX_PUREBASIC, + SCLEX_HASKELL, + SCLEX_PHPSCRIPT, + SCLEX_TADS3, + SCLEX_REBOL, + SCLEX_SMALLTALK, + SCLEX_FLAGSHIP, + SCLEX_CSOUND, +%End +%If (QScintilla_1_7 -) + SCLEX_FREEBASIC, + SCLEX_INNOSETUP, + SCLEX_OPAL, + SCLEX_SPICE, +%End + }; + + QextScintillaBase(QWidget * /TransferThis/,const char *, + WFlags = 0); + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipWrapperType **type; + int yes, no; + } graph[] = { + {sipName_QextScintillaLexer, &sipClass_QextScintillaLexer, 3, 1}, + {sipName_QextScintillaBase, &sipClass_QextScintillaBase, 15, 2}, + {sipName_QextScintillaMacro, &sipClass_QextScintillaMacro, -1, -1}, +#if QSCINTILLA_VERSION >= 0x010300 + {sipName_QextScintillaLexerPerl, &sipClass_QextScintillaLexerPerl, -1, 4}, +#else + {NULL, NULL, -1, 4}, +#endif +#if QSCINTILLA_VERSION >= 0x010100 + {sipName_QextScintillaLexerHTML, &sipClass_QextScintillaLexerHTML, -1, 5}, +#else + {NULL, NULL, -1, 5}, +#endif +#if QSCINTILLA_VERSION >= 0x010500 + {sipName_QextScintillaLexerRuby, &sipClass_QextScintillaLexerRuby, -1, 6}, +#else + {NULL, NULL, -1, 6}, +#endif + {sipName_QextScintillaLexerCPP, &sipClass_QextScintillaLexerCPP, 11, 7}, + {sipName_QextScintillaLexerPython, &sipClass_QextScintillaLexerPython, -1, 8}, +#if QSCINTILLA_VERSION >= 0x010100 + {sipName_QextScintillaLexerSQL, &sipClass_QextScintillaLexerSQL, -1, 9}, +#else + {NULL, NULL, -1, 9}, +#endif +#if QSCINTILLA_VERSION >= 0x010400 + {sipName_QextScintillaLexerBash, &sipClass_QextScintillaLexerBash, -1, 10}, +#else + {NULL, NULL, -1, 10}, +#endif +#if QSCINTILLA_VERSION >= 0x010500 + {sipName_QextScintillaLexerLua, &sipClass_QextScintillaLexerLua, -1, -1}, +#else + {NULL, NULL, -1, -1}, +#endif + {sipName_QextScintillaLexerIDL, &sipClass_QextScintillaLexerIDL, -1, 12}, + {sipName_QextScintillaLexerJavaScript, &sipClass_QextScintillaLexerJavaScript, -1, 13}, + {sipName_QextScintillaLexerCSharp, &sipClass_QextScintillaLexerCSharp, -1, 14}, + {sipName_QextScintillaLexerJava, &sipClass_QextScintillaLexerJava, -1, -1}, + {sipName_QextScintilla, &sipClass_QextScintilla, -1, -1}, + }; + + int i = 0; + + sipClass = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipClass = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +%If (QScintilla_1_3 -) + QextScintillaBase *pool(); +%End + + long SendScintilla(unsigned int,unsigned long = 0,long = 0); + long SendScintilla(unsigned int,unsigned long,const char *); + long SendScintilla(unsigned int,const char *); + long SendScintilla(unsigned int,const char *,const char *); + long SendScintilla(unsigned int,long); + //long SendScintilla(unsigned int,int); + long SendScintilla(unsigned int,long,long,char *); + long SendScintilla(unsigned int,unsigned long,const QColor &); + long SendScintilla(unsigned int,const QColor &); + long SendScintilla(unsigned int,unsigned long,QPainter *,const QRect &, + long,long); + long SendScintilla(unsigned int,unsigned long,const QPixmap *); + + virtual QSize sizeHint() const; +%If (QScintilla_1_5 -) + QWidget *viewport() const; +%End + +signals: + void QSCN_SELCHANGED(bool); + + void SCEN_CHANGE(); + +%If (QScintilla_1_6 -) + void SCN_AUTOCSELECTION(const char *,int); +%End + void SCN_CHARADDED(int); + void SCN_CALLTIPCLICK(int); + void SCN_DOUBLECLICK(); + void SCN_DWELLEND(int,int,int); + void SCN_DWELLSTART(int,int,int); + void SCN_HOTSPOTCLICK(int,int); + void SCN_HOTSPOTDOUBLECLICK(int,int); + void SCN_MACRORECORD(unsigned int,unsigned long,long); + void SCN_MARGINCLICK(int,int,int); + void SCN_MODIFIED(int,int,const char *,int,int,int,int,int); + void SCN_MODIFYATTEMPTRO(); + void SCN_NEEDSHOWN(int,int); + void SCN_PAINTED(); + void SCN_SAVEPOINTLEFT(); + void SCN_SAVEPOINTREACHED(); + void SCN_STYLENEEDED(int); + void SCN_UPDATEUI(); + void SCN_USERLISTSELECTION(const char *,int); + void SCN_ZOOM(); + +protected: + bool eventFilter(QObject *,QEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual void focusInEvent(QFocusEvent *); + virtual void focusOutEvent(QFocusEvent *); + virtual bool focusNextPrevChild(bool); +%If (QScintilla_1_5 -) + virtual void startDrag(); +%End + +private: + QextScintillaBase(const QextScintillaBase &); +}; diff --git a/sip/qtext/qextscintillacommand.sip b/sip/qtext/qextscintillacommand.sip new file mode 100644 index 0000000..148fdd6 --- /dev/null +++ b/sip/qtext/qextscintillacommand.sip @@ -0,0 +1,44 @@ +// This is the SIP interface definition for QextScintillaCommand. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +class QextScintillaCommand +{ +%TypeHeaderCode +#include +%End + +public: + void setKey(int); + void setAlternateKey(int); + int key() const; + int alternateKey() const; + static bool validKey(int); + QString description() const; + +private: + QextScintillaCommand(QextScintilla *,int,int,const char *); + QextScintillaCommand(const QextScintillaCommand &); +}; diff --git a/sip/qtext/qextscintillacommandset.sip b/sip/qtext/qextscintillacommandset.sip new file mode 100644 index 0000000..ae1be22 --- /dev/null +++ b/sip/qtext/qextscintillacommandset.sip @@ -0,0 +1,52 @@ +// This is the SIP interface definition for the QextScintillaCommandSet. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +class QextScintillaCommandSet +{ +%TypeHeaderCode +#include +%End + +public: + bool readSettings(QSettings &,const char * = "/Scintilla"); + bool writeSettings(QSettings &,const char * = "/Scintilla"); + +%If (QScintilla_1_4 -) + QPtrList &commands(); +%End +%If (- QScintilla_1_4) + const QPtrList &commands() const; +%End + +%If (QScintilla_1_4 -) + void clearKeys(); + void clearAlternateKeys(); +%End + +private: + QextScintillaCommandSet(QextScintilla *); + QextScintillaCommandSet(const QextScintillaCommandSet &); +}; diff --git a/sip/qtext/qextscintilladocument.sip b/sip/qtext/qextscintilladocument.sip new file mode 100644 index 0000000..9108114 --- /dev/null +++ b/sip/qtext/qextscintilladocument.sip @@ -0,0 +1,42 @@ +// This is the SIP interface definition for QextScintillaDocument. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (QScintilla_1_3 -) + +class QextScintillaDocument +{ +%TypeHeaderCode +#include +%End + +public: + QextScintillaDocument(); + virtual ~QextScintillaDocument(); + + QextScintillaDocument(const QextScintillaDocument &); +}; + +%End diff --git a/sip/qtext/qextscintillalexer.sip b/sip/qtext/qextscintillalexer.sip new file mode 100644 index 0000000..ed10f46 --- /dev/null +++ b/sip/qtext/qextscintillalexer.sip @@ -0,0 +1,80 @@ +// This is the SIP interface definition for QextScintillaLexer. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +class QextScintillaLexer : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QextScintillaLexer(QObject * /TransferThis/ = 0,const char * = 0); + + virtual const char *language() const = 0; + virtual const char *lexer() const = 0; + int autoIndentStyle(); + virtual QColor color(int) const; + virtual bool eolFill(int) const; + virtual QFont font(int) const; + virtual const char *keywords(int) const; + virtual QString description(int) const = 0; + virtual QColor paper(int) const; + virtual QFont defaultFont() const; +%If (QScintilla_1_7 -) + virtual QColor defaultColor() const; + virtual QColor defaultPaper() const; +%End + virtual void refreshProperties(); + bool readSettings(QSettings &,const char * = "/Scintilla"); + bool writeSettings(QSettings &,const char * = "/Scintilla") const; + +public slots: + virtual void setAutoIndentStyle(int); + virtual void setColor(const QColor &,int = -1); + virtual void setDefaultFont(const QFont &); +%If (QScintilla_1_7 -) + virtual void setDefaultColor(const QColor &); + virtual void setDefaultPaper(const QColor &); +%End + virtual void setEolFill(bool,int = -1); + virtual void setFont(const QFont &,int = -1); + virtual void setPaper(const QColor &,int = -1); + +signals: + void colorChanged(const QColor &,int); + void eolFillChanged(bool,int); + void fontChanged(const QFont &,int); + void paperChanged(const QColor &,int); + void propertyChanged(const char *,const char *); + +protected: + virtual bool readProperties(QSettings &,const QString &); + virtual bool writeProperties(QSettings &,const QString &) const; + +private: + QextScintillaLexer(const QextScintillaLexer &); + +}; diff --git a/sip/qtext/qextscintillalexerbash.sip b/sip/qtext/qextscintillalexerbash.sip new file mode 100644 index 0000000..3a4099d --- /dev/null +++ b/sip/qtext/qextscintillalexerbash.sip @@ -0,0 +1,80 @@ +// This is the SIP interface definition for QextScintillaLexerBash. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (QScintilla_1_4 -) + +class QextScintillaLexerBash : QextScintillaLexer +{ +%TypeHeaderCode +#include +%End + +public: + enum { + Default, + Error, + Comment, + Number, + Keyword, + DoubleQuotedString, + SingleQuotedString, + Operator, + Identifier, + Scalar, + ParameterExpansion, + Backticks, + HereDocumentDelimiter, + SingleQuotedHereDocument + }; + + QextScintillaLexerBash(QObject * /TransferThis/ = 0,const char * = 0); + + const char *language() const; + const char *lexer() const; + QColor color(int) const; + bool eolFill(int) const; + QFont font(int) const; + const char *keywords(int) const; + QString description(int) const; + QColor paper(int) const; + + void refreshProperties(); + bool foldComments() const; + bool foldCompact() const; + +public slots: + virtual void setFoldComments(bool); + virtual void setFoldCompact(bool); + +protected: + bool readProperties(QSettings &,const QString &); + bool writeProperties(QSettings &,const QString &) const; + +private: + QextScintillaLexerBash(const QextScintillaLexerBash &); +}; + +%End diff --git a/sip/qtext/qextscintillalexerbatch.sip b/sip/qtext/qextscintillalexerbatch.sip new file mode 100644 index 0000000..f29f326 --- /dev/null +++ b/sip/qtext/qextscintillalexerbatch.sip @@ -0,0 +1,62 @@ +// This is the SIP interface definition for QextScintillaLexerBatch. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (QScintilla_1_6 -) + +class QextScintillaLexerBatch : QextScintillaLexer +{ +%TypeHeaderCode +#include +%End + +public: + enum { + Default, + Comment, + Keyword, + Label, + HideCommandChar, + ExternalCommand, + Variable, + Operator + }; + + QextScintillaLexerBatch(QObject * /TransferThis/ = 0,const char * = 0); + + const char *language() const; + const char *lexer() const; + QColor color(int) const; + bool eolFill(int) const; + QFont font(int) const; + const char *keywords(int) const; + QString description(int) const; + QColor paper(int) const; + +private: + QextScintillaLexerBatch(const QextScintillaLexerBatch &); +}; + +%End diff --git a/sip/qtext/qextscintillalexercpp.sip b/sip/qtext/qextscintillalexercpp.sip new file mode 100644 index 0000000..dab8cf2 --- /dev/null +++ b/sip/qtext/qextscintillalexercpp.sip @@ -0,0 +1,98 @@ +// This is the SIP interface definition for QextScintillaLexerCPP. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +class QextScintillaLexerCPP : QextScintillaLexer +{ +%TypeHeaderCode +#include +%End + +public: + enum { +%If (QScintilla_1_1 -) + Default, +%End + WhiteSpace, + Comment, + CommentLine, + CommentDoc, + Number, + Keyword, + DoubleQuotedString, + SingleQuotedString, + UUID, + PreProcessor, + Operator, + Identifier, + UnclosedString, + VerbatimString, + Regex, + CommentLineDoc, + KeywordSet2, + CommentDocKeyword, + CommentDocKeywordError, +%If (QScintilla_1_1 -) + GlobalClass, +%End + }; + + QextScintillaLexerCPP(QObject * /TransferThis/ = 0,const char * = 0, + bool = 0); + + const char *language() const; + const char *lexer() const; + QColor color(int) const; + bool eolFill(int) const; + QFont font(int) const; + const char *keywords(int) const; + QString description(int) const; + QColor paper(int) const; + + void refreshProperties(); +%If (QScintilla_1_1 -) + bool foldAtElse() const; +%End + bool foldComments() const; + bool foldCompact() const; + bool foldPreprocessor() const; + bool stylePreprocessor() const; + +public slots: +%If (QScintilla_1_1 -) + virtual void setFoldAtElse(bool); +%End + virtual void setFoldComments(bool); + virtual void setFoldCompact(bool); + virtual void setFoldPreprocessor(bool); + virtual void setStylePreprocessor(bool); + +protected: + bool readProperties(QSettings &,const QString &); + bool writeProperties(QSettings &,const QString &) const; + +private: + QextScintillaLexerCPP(const QextScintillaLexerCPP &); +}; diff --git a/sip/qtext/qextscintillalexercsharp.sip b/sip/qtext/qextscintillalexercsharp.sip new file mode 100644 index 0000000..9444248 --- /dev/null +++ b/sip/qtext/qextscintillalexercsharp.sip @@ -0,0 +1,47 @@ +// This is the SIP interface definition for QextScintillaLexerCSharp. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +class QextScintillaLexerCSharp : QextScintillaLexerCPP +{ +%TypeHeaderCode +#include +%End + +public: + QextScintillaLexerCSharp(QObject * /TransferThis/ = 0, + const char * = 0); + + const char *language() const; + QColor color(int) const; + bool eolFill(int) const; + QFont font(int) const; + const char *keywords(int) const; + QString description(int) const; + QColor paper(int) const; + +private: + QextScintillaLexerCSharp(const QextScintillaLexerCSharp &); +}; diff --git a/sip/qtext/qextscintillalexercss.sip b/sip/qtext/qextscintillalexercss.sip new file mode 100644 index 0000000..eb02a09 --- /dev/null +++ b/sip/qtext/qextscintillalexercss.sip @@ -0,0 +1,81 @@ +// This is the SIP interface definition for QextScintillaLexerCSS. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (QScintilla_1_6 -) + +class QextScintillaLexerCSS : QextScintillaLexer +{ +%TypeHeaderCode +#include +%End + +public: + enum { + Default, + Tag, + ClassSelector, + PseudoClass, + UnknownPseudoClass, + Operator, + CSS1Property, + UnknownProperty, + Value, + Comment, + IDSelector, + Important, + AtRule, + DoubleQuotedString, + SingleQuotedString, + CSS2Property, + Attribute + }; + + QextScintillaLexerCSS(QObject * /TransferThis/ = 0,const char * = 0); + + const char *language() const; + const char *lexer() const; + QColor color(int) const; + QFont font(int) const; + const char *keywords(int) const; + QString description(int) const; + + void refreshProperties(); + bool foldComments() const; + bool foldCompact() const; + +public slots: + virtual void setFoldComments(bool); + virtual void setFoldCompact(bool); + +protected: + bool readProperties(QSettings &,const QString &); + bool writeProperties(QSettings &,const QString &) const; + +private: + QextScintillaLexerCSS(const QextScintillaLexerCSS &); +}; + +%End diff --git a/sip/qtext/qextscintillalexerdiff.sip b/sip/qtext/qextscintillalexerdiff.sip new file mode 100644 index 0000000..adfcb77 --- /dev/null +++ b/sip/qtext/qextscintillalexerdiff.sip @@ -0,0 +1,57 @@ +// This is the SIP interface definition for QextScintillaLexerDiff. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (QScintilla_1_6 -) + +class QextScintillaLexerDiff : QextScintillaLexer +{ +%TypeHeaderCode +#include +%End + +public: + enum { + Default, + Comment, + Command, + Header, + Position, + LineRemoved, + LineAdded + }; + + QextScintillaLexerDiff(QObject * /TransferThis/ = 0,const char * = 0); + + const char *language() const; + const char *lexer() const; + QColor color(int) const; + QString description(int) const; + +private: + QextScintillaLexerDiff(const QextScintillaLexerDiff &); +}; + +%End diff --git a/sip/qtext/qextscintillalexerhtml.sip b/sip/qtext/qextscintillalexerhtml.sip new file mode 100644 index 0000000..6b59162 --- /dev/null +++ b/sip/qtext/qextscintillalexerhtml.sip @@ -0,0 +1,178 @@ +// This is the SIP interface definition for QextScintillaLexerHTML. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (QScintilla_1_1 -) + +class QextScintillaLexerHTML : QextScintillaLexer +{ +%TypeHeaderCode +#include +%End + +public: + enum { + Default, + Tag, + UnknownTag, + Attribute, + UnknownAttribute, + HTMLNumber, + HTMLDoubleQuotedString, + HTMLSingleQuotedString, + OtherInTag, + HTMLComment, + Entity, + XMLTagEnd, + XMLStart, + XMLEnd, + Script, + ASPAtStart, + ASPStart, + CDATA, + PHPStart, + HTMLValue, + ASPXCComment, + SGMLDefault, + SGMLCommand, + SGMLParameter, + SGMLDoubleQuotedString, + SGMLSingleQuotedString, + SGMLError, + SGMLSpecial, + SGMLEntity, + SGMLComment, + SGMLParameterComment, + SGMLBlockDefault, + JavaScriptStart, + JavaScriptDefault, + JavaScriptComment, + JavaScriptCommentLine, + JavaScriptCommentDoc, + JavaScriptNumber, + JavaScriptWord, + JavaScriptKeyword, + JavaScriptDoubleQuotedString, + JavaScriptSingleQuotedString, + JavaScriptSymbol, + JavaScriptUnclosedString, + JavaScriptRegex, + ASPJavaScriptStart, + ASPJavaScriptDefault, + ASPJavaScriptComment, + ASPJavaScriptCommentLine, + ASPJavaScriptCommentDoc, + ASPJavaScriptNumber, + ASPJavaScriptWord, + ASPJavaScriptKeyword, + ASPJavaScriptDoubleQuotedString, + ASPJavaScriptSingleQuotedString, + ASPJavaScriptSymbol, + ASPJavaScriptUnclosedString, + ASPJavaScriptRegex, + VBScriptStart, + VBScriptDefault, + VBScriptComment, + VBScriptNumber, + VBScriptKeyword, + VBScriptString, + VBScriptIdentifier, + VBScriptUnclosedString, + ASPVBScriptStart, + ASPVBScriptDefault, + ASPVBScriptComment, + ASPVBScriptNumber, + ASPVBScriptKeyword, + ASPVBScriptString, + ASPVBScriptIdentifier, + ASPVBScriptUnclosedString, + PythonStart, + PythonDefault, + PythonComment, + PythonNumber, + PythonDoubleQuotedString, + PythonSingleQuotedString, + PythonKeyword, + PythonTripleSingleQuotedString, + PythonTripleDoubleQuotedString, + PythonClassName, + PythonFunctionMethodName, + PythonOperator, + PythonIdentifier, + ASPPythonStart, + ASPPythonDefault, + ASPPythonComment, + ASPPythonNumber, + ASPPythonDoubleQuotedString, + ASPPythonSingleQuotedString, + ASPPythonKeyword, + ASPPythonTripleSingleQuotedString, + ASPPythonTripleDoubleQuotedString, + ASPPythonClassName, + ASPPythonFunctionMethodName, + ASPPythonOperator, + ASPPythonIdentifier, + PHPDefault, + PHPDoubleQuotedString, + PHPSingleQuotedString, + PHPKeyword, + PHPNumber, + PHPVariable, + PHPComment, + PHPCommentLine, + PHPDoubleQuotedVariable, + PHPOperator + }; + + QextScintillaLexerHTML(QObject * /TransferThis/ = 0,const char * = 0); + + const char *language() const; + const char *lexer() const; + QColor color(int) const; + bool eolFill(int) const; + QFont font(int) const; + const char *keywords(int) const; + QString description(int) const; + QColor paper(int) const; + + void refreshProperties(); + bool foldCompact() const; + bool foldPreprocessor() const; + bool caseSensitiveTags() const; + +public slots: + virtual void setFoldCompact(bool); + virtual void setFoldPreprocessor(bool); + virtual void setCaseSensitiveTags(bool); + +protected: + bool readProperties(QSettings &,const QString &); + bool writeProperties(QSettings &,const QString &) const; + +private: + QextScintillaLexerHTML(const QextScintillaLexerHTML &); +}; + +%End diff --git a/sip/qtext/qextscintillalexeridl.sip b/sip/qtext/qextscintillalexeridl.sip new file mode 100644 index 0000000..cf1fe5a --- /dev/null +++ b/sip/qtext/qextscintillalexeridl.sip @@ -0,0 +1,43 @@ +// This is the SIP interface definition for QextScintillaLexerIDL. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +class QextScintillaLexerIDL : QextScintillaLexerCPP +{ +%TypeHeaderCode +#include +%End + +public: + QextScintillaLexerIDL(QObject * /TransferThis/ = 0,const char * = 0); + + const char *language() const; + QColor color(int) const; + const char *keywords(int) const; + QString description(int) const; + +private: + QextScintillaLexerIDL(const QextScintillaLexerIDL &); +}; diff --git a/sip/qtext/qextscintillalexerjava.sip b/sip/qtext/qextscintillalexerjava.sip new file mode 100644 index 0000000..8db6bd4 --- /dev/null +++ b/sip/qtext/qextscintillalexerjava.sip @@ -0,0 +1,41 @@ +// This is the SIP interface definition for QextScintillaLexerJava. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +class QextScintillaLexerJava : QextScintillaLexerCPP +{ +%TypeHeaderCode +#include +%End + +public: + QextScintillaLexerJava(QObject * /TransferThis/ = 0,const char * = 0); + + const char *language() const; + const char *keywords(int) const; + +private: + QextScintillaLexerJava(const QextScintillaLexerJava &); +}; diff --git a/sip/qtext/qextscintillalexerjavascript.sip b/sip/qtext/qextscintillalexerjavascript.sip new file mode 100644 index 0000000..4b3c9a1 --- /dev/null +++ b/sip/qtext/qextscintillalexerjavascript.sip @@ -0,0 +1,47 @@ +// This is the SIP interface definition for QextScintillaLexerJavaScript. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +class QextScintillaLexerJavaScript : QextScintillaLexerCPP +{ +%TypeHeaderCode +#include +%End + +public: + QextScintillaLexerJavaScript(QObject * /TransferThis/ = 0, + const char * = 0); + + const char *language() const; + QColor color(int) const; + bool eolFill(int) const; + QFont font(int) const; + const char *keywords(int) const; + QString description(int) const; + QColor paper(int) const; + +private: + QextScintillaLexerJavaScript(const QextScintillaLexerJavaScript &); +}; diff --git a/sip/qtext/qextscintillalexerlua.sip b/sip/qtext/qextscintillalexerlua.sip new file mode 100644 index 0000000..fe05ea1 --- /dev/null +++ b/sip/qtext/qextscintillalexerlua.sip @@ -0,0 +1,79 @@ +// This is the SIP interface definition for QextScintillaLexerLua. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (QScintilla_1_5 -) + +class QextScintillaLexerLua : QextScintillaLexer +{ +%TypeHeaderCode +#include +%End + +public: + enum { + Default, + Comment, + LineComment, + Number, + Keyword, + String, + Character, + LiteralString, + Preprocessor, + Operator, + Identifier, + UnclosedString, + BasicFunctions, + StringTableMathsFunctions, + CoroutinesIOSystemFacilities + }; + + QextScintillaLexerLua(QObject * /TransferThis/ = 0,const char * = 0); + + const char *language() const; + const char *lexer() const; + QColor color(int) const; + bool eolFill(int) const; + QFont font(int) const; + const char *keywords(int) const; + QString description(int) const; + QColor paper(int) const; + + void refreshProperties(); + bool foldCompact() const; + +public slots: + virtual void setFoldCompact(bool); + +protected: + bool readProperties(QSettings &,const QString &); + bool writeProperties(QSettings &,const QString &) const; + +private: + QextScintillaLexerLua(const QextScintillaLexerLua &); +}; + +%End diff --git a/sip/qtext/qextscintillalexermakefile.sip b/sip/qtext/qextscintillalexermakefile.sip new file mode 100644 index 0000000..83c15b1 --- /dev/null +++ b/sip/qtext/qextscintillalexermakefile.sip @@ -0,0 +1,60 @@ +// This is the SIP interface definition for QextScintillaLexerMakefile. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (QScintilla_1_6 -) + +class QextScintillaLexerMakefile : QextScintillaLexer +{ +%TypeHeaderCode +#include +%End + +public: + enum { + Default, + Comment, + Preprocessor, + Variable, + Operator, + Target, + Error + }; + + QextScintillaLexerMakefile(QObject * /TransferThis/ = 0,const char * = 0); + + const char *language() const; + const char *lexer() const; + QColor color(int) const; + bool eolFill(int) const; + QFont font(int) const; + QString description(int) const; + QColor paper(int) const; + +private: + QextScintillaLexerMakefile(const QextScintillaLexerMakefile &); +}; + +%End diff --git a/sip/qtext/qextscintillalexerperl.sip b/sip/qtext/qextscintillalexerperl.sip new file mode 100644 index 0000000..a8db0a1 --- /dev/null +++ b/sip/qtext/qextscintillalexerperl.sip @@ -0,0 +1,96 @@ +// This is the SIP interface definition for QextScintillaLexerPerl. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (QScintilla_1_3 -) + +class QextScintillaLexerPerl : QextScintillaLexer +{ +%TypeHeaderCode +#include +%End + +public: + enum { + Default, + Error, + Comment, + POD, + Number, + Keyword, + DoubleQuotedString, + SingleQuotedString, + Operator, + Identifier, + Scalar, + Array, + Hash, + SymbolTable, + Regex, + Substitution, + Backticks, + DataSection, + HereDocumentDelimiter, + SingleQuotedHereDocument, + DoubleQuotedHereDocument, + BacktickHereDocument, + QuotedStringQ, + QuotedStringQQ, + QuotedStringQX, + QuotedStringQR, + QuotedStringQW, +%If (QScintilla_1_6 -) + PODVerbatim, +%End + }; + + QextScintillaLexerPerl(QObject * /TransferThis/ = 0,const char * = 0); + + const char *language() const; + const char *lexer() const; + QColor color(int) const; + bool eolFill(int) const; + QFont font(int) const; + const char *keywords(int) const; + QString description(int) const; + QColor paper(int) const; + + void refreshProperties(); + bool foldComments() const; + bool foldCompact() const; + +public slots: + virtual void setFoldComments(bool); + virtual void setFoldCompact(bool); + +protected: + bool readProperties(QSettings &,const QString &); + bool writeProperties(QSettings &,const QString &) const; + +private: + QextScintillaLexerPerl(const QextScintillaLexerPerl &); +}; + +%End diff --git a/sip/qtext/qextscintillalexerpov.sip b/sip/qtext/qextscintillalexerpov.sip new file mode 100644 index 0000000..862e48e --- /dev/null +++ b/sip/qtext/qextscintillalexerpov.sip @@ -0,0 +1,85 @@ +// This is the SIP interface definition for QextScintillaLexerPOV. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (QScintilla_1_6 -) + +class QextScintillaLexerPOV : QextScintillaLexer +{ +%TypeHeaderCode +#include +%End + +public: + enum { + Default, + Comment, + CommentLine, + Number, + Operator, + Identifier, + String, + UnclosedString, + Directive, + BadDirective, + ObjectsCSGAppearance, + TypesModifiersItems, + PredefinedIdentifiers, + PredefinedFunctions, + KeywordSet6, + KeywordSet7, + KeywordSet8 + }; + + QextScintillaLexerPOV(QObject * /TransferThis/ = 0,const char * = 0); + + const char *language() const; + const char *lexer() const; + QColor color(int) const; + bool eolFill(int) const; + QFont font(int) const; + const char *keywords(int) const; + QString description(int) const; + QColor paper(int) const; + + void refreshProperties(); + bool foldComments() const; + bool foldCompact() const; + bool foldDirectives() const; + +public slots: + virtual void setFoldComments(bool); + virtual void setFoldCompact(bool); + virtual void setFoldDirectives(bool); + +protected: + bool readProperties(QSettings &,const QString &); + bool writeProperties(QSettings &,const QString &) const; + +private: + QextScintillaLexerPOV(const QextScintillaLexerPOV &); +}; + +%End diff --git a/sip/qtext/qextscintillalexerproperties.sip b/sip/qtext/qextscintillalexerproperties.sip new file mode 100644 index 0000000..45c52e5 --- /dev/null +++ b/sip/qtext/qextscintillalexerproperties.sip @@ -0,0 +1,68 @@ +// This is the SIP interface definition for QextScintillaLexerProperties. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (QScintilla_1_6 -) + +class QextScintillaLexerProperties : QextScintillaLexer +{ +%TypeHeaderCode +#include +%End + +public: + enum { + Default, + Comment, + Section, + Assignment, + DefaultValue + }; + + QextScintillaLexerProperties(QObject * /TransferThis/ = 0,const char * = 0); + + const char *language() const; + const char *lexer() const; + QColor color(int) const; + bool eolFill(int) const; + QFont font(int) const; + QString description(int) const; + QColor paper(int) const; + + void refreshProperties(); + bool foldCompact() const; + +public slots: + virtual void setFoldCompact(bool); + +protected: + bool readProperties(QSettings &,const QString &); + bool writeProperties(QSettings &,const QString &) const; + +private: + QextScintillaLexerProperties(const QextScintillaLexerProperties &); +}; + +%End diff --git a/sip/qtext/qextscintillalexerpython.sip b/sip/qtext/qextscintillalexerpython.sip new file mode 100644 index 0000000..3a2bca5 --- /dev/null +++ b/sip/qtext/qextscintillalexerpython.sip @@ -0,0 +1,94 @@ +// This is the SIP interface definition for QextScintillaLexerPython. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +class QextScintillaLexerPython : QextScintillaLexer +{ +%TypeHeaderCode +#include +%End + +public: + enum { +%If (QScintilla_1_1 -) + Default, +%End + WhiteSpace, + Comment, + Number, + DoubleQuotedString, + SingleQuotedString, + Keyword, + TripleSingleQuotedString, + TripleDoubleQuotedString, + ClassName, + FunctionMethodName, + Operator, + Identifier, + CommentBlock, + UnclosedString, +%If (QScintilla_1_7 -) + HighlightedIdentifier, + Decorator, +%End + }; + + enum IndentationWarning { + NoWarning, + Inconsistent, + TabsAfterSpaces, + Spaces, + Tabs + }; + + QextScintillaLexerPython(QObject * /TransferThis/ = 0, + const char * = 0); + + const char *language() const; + const char *lexer() const; + QColor color(int) const; + bool eolFill(int) const; + QFont font(int) const; + const char *keywords(int) const; + QString description(int) const; + QColor paper(int) const; + void refreshProperties(); + + bool foldComments() const; + bool foldQuotes() const; + IndentationWarning indentationWarning() const; + +public slots: + virtual void setFoldComments(bool); + virtual void setFoldQuotes(bool); + virtual void setIndentationWarning(IndentationWarning); + +protected: + bool readProperties(QSettings &,const QString &); + bool writeProperties(QSettings &,const QString &) const; + +private: + QextScintillaLexerPython(const QextScintillaLexerPython &); +}; diff --git a/sip/qtext/qextscintillalexerruby.sip b/sip/qtext/qextscintillalexerruby.sip new file mode 100644 index 0000000..77beba0 --- /dev/null +++ b/sip/qtext/qextscintillalexerruby.sip @@ -0,0 +1,128 @@ +// This is the SIP interface definition for QextScintillaLexerRuby. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (QScintilla_1_5 -) + +class QextScintillaLexerRuby : QextScintillaLexer +{ +%TypeHeaderCode +#include +%End + +public: +%If (QScintilla_1_7 -) + enum { + Default, + Comment, + POD, + Number, + Keyword, + DoubleQuotedString, + SingleQuotedString, + ClassName, + FunctionMethodName, + Operator, + Identifier, + Regex, + Global, + Symbol, + ModuleName, + InstanceVariable, + ClassVariable, + Backticks, + DataSection, + HereDocumentDelimiter, + HereDocument, + PercentStringq, + PercentStringQ, + PercentStringx, + PercentStringr, + PercentStringw, + DemotedKeyword, + Stdin, + Stdout, + Stderr + }; +%End +%If (- QScintilla_1_7) + enum { + Default, + WhiteSpace, + Comment, + Number, + DoubleQuotedString, + SingleQuotedString, + Keyword, + TripleDoubleQuotedString, + ClassName, + FunctionMethodName, + Operator, + Identifier, + CommentBlock, + UnclosedString + }; + + enum IndentationWarning { + NoWarning, + Inconsistent, + TabsAfterSpaces, + Spaces, + Tabs + }; +%End + + QextScintillaLexerRuby(QObject * /TransferThis/ = 0,const char * = 0); + + const char *language() const; + const char *lexer() const; + QColor color(int) const; + bool eolFill(int) const; + QFont font(int) const; + const char *keywords(int) const; + QString description(int) const; + QColor paper(int) const; +%If (- QScintilla_1_7) + void refreshProperties(); + + IndentationWarning indentationWarning() const; +%End + +public slots: +%If (- QScintilla_1_7) + virtual void setIndentationWarning(IndentationWarning); +%End + +protected: +%If (- QScintilla_1_7) + bool readProperties(QSettings &,const QString &); + bool writeProperties(QSettings &,const QString &) const; +%End + +private: + QextScintillaLexerRuby(const QextScintillaLexerRuby &); +}; + +%End diff --git a/sip/qtext/qextscintillalexersql.sip b/sip/qtext/qextscintillalexersql.sip new file mode 100644 index 0000000..85a5e19 --- /dev/null +++ b/sip/qtext/qextscintillalexersql.sip @@ -0,0 +1,105 @@ +// This is the SIP interface definition for QextScintillaLexerSQL. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (QScintilla_1_1 -) + +class QextScintillaLexerSQL : QextScintillaLexer +{ +%TypeHeaderCode +#include +%End + +public: + enum { + Default, + Comment, +%If (QScintilla_1_6 -) + CommentLine, + CommentDoc, +%End + LineComment, // Obsolete. + Number, + Keyword, +%If (QScintilla_1_6 -) + DoubleQuotedString, +%End + SingleQuotedString, +%If (QScintilla_1_6 -) + PlusKeyword, + PlusPrompt, +%End + Operator, + Identifier, +%If (QScintilla_1_6 -) + PlusComment, + CommentLineHash, + CommentDocKeyword, + CommentDocKeywordError, + KeywordSet5, + KeywordSet6, + KeywordSet7, + KeywordSet8, +%End + }; + + QextScintillaLexerSQL(QObject * /TransferThis/ = 0,const char * = 0); + + const char *language() const; + const char *lexer() const; + QColor color(int) const; +%If (QScintilla_1_6 -) + bool eolFill(int) const; +%End + QFont font(int) const; + const char *keywords(int) const; + QString description(int) const; +%If (QScintilla_1_6 -) + QColor paper(int) const; + + void refreshProperties(); + bool foldComments() const; + bool foldCompact() const; + bool backslashEscapes() const; +%End + +public slots: +%If (QScintilla_1_6 -) + virtual void setFoldComments(bool); + virtual void setFoldCompact(bool); + virtual void setBackslashEscapes(bool); +%End + +protected: +%If (QScintilla_1_6 -) + bool readProperties(QSettings &,const QString &); + bool writeProperties(QSettings &,const QString &) const; +%End + +private: + QextScintillaLexerSQL(const QextScintillaLexerSQL &); +}; + +%End diff --git a/sip/qtext/qextscintillalexertex.sip b/sip/qtext/qextscintillalexertex.sip new file mode 100644 index 0000000..668fcd0 --- /dev/null +++ b/sip/qtext/qextscintillalexertex.sip @@ -0,0 +1,57 @@ +// This is the SIP interface definition for QextScintillaLexerTeX. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (QScintilla_1_6 -) + +class QextScintillaLexerTeX : QextScintillaLexer +{ +%TypeHeaderCode +#include +%End + +public: + enum { + Default, + Special, + Group, + Symbol, + Command, + Text + }; + + QextScintillaLexerTeX(QObject * /TransferThis/ = 0,const char * = 0); + + const char *language() const; + const char *lexer() const; + QColor color(int) const; + const char *keywords(int) const; + QString description(int) const; + +private: + QextScintillaLexerTeX(const QextScintillaLexerTeX &); +}; + +%End diff --git a/sip/qtext/qextscintillamacro.sip b/sip/qtext/qextscintillamacro.sip new file mode 100644 index 0000000..45615af --- /dev/null +++ b/sip/qtext/qextscintillamacro.sip @@ -0,0 +1,49 @@ +// This is the SIP interface definition for QextScintillaMacro. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +class QextScintillaMacro : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QextScintillaMacro(QextScintilla * /TransferThis/,const char * = 0); + QextScintillaMacro(const QCString &,QextScintilla * /TransferThis/, + const char * = 0); + + void clear(); + bool load(const QCString &); + QCString save() const; + +public slots: + virtual void play(); + virtual void startRecording(); + virtual void endRecording(); + +private: + QextScintillaMacro(const QextScintillaMacro &); +}; diff --git a/sip/qtext/qextscintillaprinter.sip b/sip/qtext/qextscintillaprinter.sip new file mode 100644 index 0000000..dce068b --- /dev/null +++ b/sip/qtext/qextscintillaprinter.sip @@ -0,0 +1,45 @@ +// This is the SIP interface definition for QextScintillaPrinter. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +class QextScintillaPrinter : QPrinter +{ +%TypeHeaderCode +#include +%End + +public: + QextScintillaPrinter(QPrinter::PrinterMode = QPrinter::ScreenResolution); + + virtual void formatPage(QPainter &,bool,QRect &,int); + virtual int printRange(QextScintillaBase *,int = -1,int = -1); + int magnification() const; + virtual void setMagnification(int); + QextScintilla::WrapMode wrapMode() const; + virtual void setWrapMode(QextScintilla::WrapMode); + +private: + QextScintillaPrinter(const QextScintillaPrinter &); +}; diff --git a/sip/qtext/qtextmod.sip b/sip/qtext/qtextmod.sip new file mode 100644 index 0000000..06024a6 --- /dev/null +++ b/sip/qtext/qtextmod.sip @@ -0,0 +1,107 @@ +// This is the SIP interface definition for the qtext module of PyQt. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Module qtext 4 + +%Import qt/qtmod.sip + +%Include copying.sip + + +// The QScintilla versions. +%Timeline {QScintilla_1_1 QScintilla_1_2 QScintilla_1_3 QScintilla_1_4 + QScintilla_1_5 QScintilla_1_6 QScintilla_1_7} + + +const unsigned QSCINTILLA_VERSION; +const char *QSCINTILLA_VERSION_STR; +const char *QSCINTILLA_BUILD; + + +%Include qextscintillaapis.sip +%Include qextscintillabase.sip +%Include qextscintilla.sip +%Include qextscintillacommand.sip +%Include qextscintillacommandset.sip +%Include qextscintilladocument.sip +%Include qextscintillalexer.sip +%Include qextscintillalexerbash.sip +%Include qextscintillalexerbatch.sip +%Include qextscintillalexercpp.sip +%Include qextscintillalexercsharp.sip +%Include qextscintillalexercss.sip +%Include qextscintillalexerdiff.sip +%Include qextscintillalexerhtml.sip +%Include qextscintillalexeridl.sip +%Include qextscintillalexerjava.sip +%Include qextscintillalexerjavascript.sip +%Include qextscintillalexerlua.sip +%Include qextscintillalexermakefile.sip +%Include qextscintillalexerperl.sip +%Include qextscintillalexerpov.sip +%Include qextscintillalexerproperties.sip +%Include qextscintillalexerpython.sip +%Include qextscintillalexerruby.sip +%Include qextscintillalexersql.sip +%Include qextscintillalexertex.sip +%Include qextscintillamacro.sip +%Include qextscintillaprinter.sip + + +// The build file template. + +%Makefile qtext.pro.in +# The project file for the qtext module. +# +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +TEMPLATE = lib +TARGET = @BLX_TARGET_LIB@ +DESTDIR = @PYQT_MODDIR@ +CONFIG += @BLX_CONFIG_LIB@ @PYQT_WARN@ +INCLUDEPATH = @BLX_INCLUDEPATH@ @PYQT_QSCINTILLA_INC@ +DEFINES = @BLX_DEFINES@ QEXTSCINTILLA_DLL +LIBS += @PYQT_QT_MODULE@ @PYQT_QSCINTILLA_LIB@ @BLX_LIBS@ +macx:QMAKE_LFLAGS += -framework Python + +SOURCES = $B + +HEADERS = $H +%End diff --git a/sip/qtgl/copying.sip b/sip/qtgl/copying.sip new file mode 100644 index 0000000..463904b --- /dev/null +++ b/sip/qtgl/copying.sip @@ -0,0 +1,51 @@ +// This is the SIP file defining the PyQt license. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Copying +Copyright (c) 2007 + Riverbank Computing Limited + +This file is part of PyQt. + +This copy of PyQt is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +PyQt is supplied 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 General Public License for more +details. + +You should have received a copy of the GNU General Public License along with +PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +%End + + +%OptionalInclude pyqt-internal.sip +%OptionalInclude pyqt-gpl.sip +%OptionalInclude pyqt-commercial.sip +%OptionalInclude pyqt-edu.sip +%OptionalInclude pyqt-eval.sip +%OptionalInclude pyqt-nc.sip +%OptionalInclude pyqt-tkc.sip diff --git a/sip/qtgl/qgl.sip b/sip/qtgl/qgl.sip new file mode 100644 index 0000000..e08b6a9 --- /dev/null +++ b/sip/qtgl/qgl.sip @@ -0,0 +1,298 @@ +// This is the SIP interface definition for QGL, QGLContext, QGLFormat and +// QGLWidget. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QGL + +QGL is fully implemented. + + + +QGLContext + +QGLContext is fully implemented. + + + +QGLFormat + +QGLFormat is fully implemented. + + + +QGLWidget + +QGLWidget is fully implemented. + + +%End + + +%If (Qt_2_00 -) + +const int QGL_VERSION; +const char *QGL_VERSION_STR; + +const char *qGLVersion(); + + +class QGL +{ +%TypeHeaderCode +#include +%End + +public: + enum FormatOption { + DoubleBuffer, + DepthBuffer, + Rgba, + AlphaChannel, + AccumBuffer, + StencilBuffer, + StereoBuffers, + DirectRendering, + HasOverlay, + SingleBuffer, + NoDepthBuffer, + ColorIndex, + NoAlphaChannel, + NoAccumBuffer, + NoStencilBuffer, + NoStereoBuffers, + IndirectRendering, + NoOverlay + }; +}; + + +class QGLFormat : QGL +{ +%TypeHeaderCode +#include +%End + +public: + QGLFormat(); + QGLFormat(int,int = 0); + + bool doubleBuffer() const; + void setDoubleBuffer(bool); + bool depth() const; + void setDepth(bool); + bool rgba() const; + void setRgba(bool); + bool alpha() const; + void setAlpha(bool); + bool accum() const; + void setAccum(bool); + bool stencil() const; + void setStencil(bool); + bool stereo() const; + void setStereo(bool); + bool directRendering() const; + void setDirectRendering(bool); + bool hasOverlay() const; + void setOverlay(bool); + + int plane() const; + void setPlane(int); + + void setOption(FormatOption); + bool testOption(FormatOption) const; + + static QGLFormat defaultFormat(); + static void setDefaultFormat(const QGLFormat &); + + static QGLFormat defaultOverlayFormat(); + static void setDefaultOverlayFormat(const QGLFormat &); + + static bool hasOpenGL(); + static bool hasOpenGLOverlays(); +}; + + +class QGLContext : QGL +{ +%TypeHeaderCode +#include +%End + +public: + QGLContext(const QGLFormat &,QPaintDevice *); +%If (Qt_3_2_0 -) + QGLContext(const QGLFormat &); +%End + + virtual bool create(const QGLContext * = 0); + bool isValid() const; + bool isSharing() const; + virtual void reset(); + + QGLFormat format() const; +%If (Qt_3_0_0 -) + QGLFormat requestedFormat() const; +%End + virtual void setFormat(const QGLFormat &); + + virtual void makeCurrent(); + virtual void swapBuffers() const; + + QPaintDevice *device() const; + + QColor overlayTransparentColor() const; + + static const QGLContext *currentContext(); + +protected: + virtual bool chooseContext(const QGLContext * = 0); + virtual void doneCurrent(); + +%If (WS_X11) + virtual void *tryVisual(const QGLFormat &,int = 1); + virtual void *chooseVisual(); +%End + + bool deviceIsPixmap() const; + bool windowCreated() const; + void setWindowCreated(bool); + bool initialized() const; + void setInitialized(bool); +%If (Qt_3_1_0 -) + void generateFontDisplayLists(const QFont &,int); +%End + + uint colorIndex(const QColor &) const; +%If (Qt_3_2_0 -) + void setValid(bool); + void setDevice(QPaintDevice *); +%End + +private: + QGLContext(); + QGLContext(const QGLContext &); +}; + + +class QGLWidget : QWidget, QGL +{ +%TypeHeaderCode +#include +%End + +public: + QGLWidget(QWidget * /TransferThis/ = 0,const char * = 0, + const QGLWidget * = 0,WFlags = 0); +%If (Qt_3_2_0 -) + QGLWidget(QGLContext * /Transfer/,QWidget * /TransferThis/ = 0,const char * = 0, + const QGLWidget * = 0,WFlags = 0); +%End + QGLWidget(const QGLFormat &,QWidget * /TransferThis/ = 0, + const char * = 0,const QGLWidget * = 0,WFlags = 0); + +%ConvertToSubClassCode + sipClass = (sipCpp->inherits(sipName_QGLWidget) ? sipClass_QGLWidget : NULL); +%End + + void qglColor(const QColor &) const; + void qglClearColor(const QColor &) const; + + bool isValid() const; + bool isSharing() const; + virtual void makeCurrent(); +%If (Qt_3_2_0 -) + void doneCurrent(); +%End + + bool doubleBuffer() const; + virtual void swapBuffers(); + + QGLFormat format() const; + + const QGLContext *context() const; + + virtual QPixmap renderPixmap(int = 0,int = 0,bool = 0); +%If (Qt_3_0_0 -) + virtual QImage grabFrameBuffer(bool = 0); +%End + + virtual void makeOverlayCurrent(); + const QGLContext *overlayContext() const; + + static QImage convertToGLFormat(const QImage &); + + void setMouseTracking(bool); + +%If (Qt_3_0_0 -) + virtual void reparent(QWidget * /GetWrapper/,WFlags,const QPoint &, + bool = 0); +%MethodCode + if (sipCpp -> parent() != a0) + if (a0) + sipTransferTo(sipSelf,a0Wrapper); + else + sipTransferBack(sipSelf); + + Py_BEGIN_ALLOW_THREADS + sipSelfWasArg ? sipCpp->QGLWidget::reparent(a0, a1, *a2, a3) : sipCpp->reparent(a0, a1, *a2, a3); + Py_END_ALLOW_THREADS +%End + + const QGLColormap &colormap() const; + void setColormap(const QGLColormap &); +%End + +%If (Qt_3_1_0 -) + void renderText(int,int,const QString &,const QFont & = QFont(), + int = 2000); + void renderText(double,double,double,const QString &, + const QFont & = QFont(),int = 2000); +%End + +public slots: + virtual void updateGL(); + virtual void updateOverlayGL(); + +protected: + virtual void initializeGL(); + virtual void resizeGL(int,int); + virtual void paintGL(); + + virtual void initializeOverlayGL(); + virtual void resizeOverlayGL(int,int); + virtual void paintOverlayGL(); + + void setAutoBufferSwap(bool); + bool autoBufferSwap() const; + + void paintEvent(QPaintEvent *); + void resizeEvent(QResizeEvent *); + + virtual void glInit(); + virtual void glDraw(); + +private: + QGLWidget(const QGLWidget &); +}; + +%End diff --git a/sip/qtgl/qglcolormap.sip b/sip/qtgl/qglcolormap.sip new file mode 100644 index 0000000..512897e --- /dev/null +++ b/sip/qtgl/qglcolormap.sip @@ -0,0 +1,63 @@ +// This is the SIP interface definition for QGLColormap. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QGLColormap (Qt v3.0+) + + void setEntries + int count + const QRgb *colors + int base = 0 + + +Not yet implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QGLColormap +{ +%TypeHeaderCode +#include +%End + +public: + QGLColormap(); + QGLColormap(const QGLColormap &); + + bool isEmpty() const; + int size() const; + void detach(); + +// void setEntries(int,const QRgb *,int = 0); + void setEntry(int,QRgb); + void setEntry(int,const QColor &); + QRgb entryRgb(int) const; + QColor entryColor(int) const; + int find(QRgb) const; + int findNearest(QRgb) const; +}; + +%End diff --git a/sip/qtgl/qtglmod.sip b/sip/qtgl/qtglmod.sip new file mode 100644 index 0000000..2d6a018 --- /dev/null +++ b/sip/qtgl/qtglmod.sip @@ -0,0 +1,71 @@ +// This is the SIP interface definition for the qtgl module of PyQt. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Module qtgl 1 + +%Import qt/qtmod.sip + +%Include copying.sip + + +%Include qgl.sip +%Include qglcolormap.sip + + +// The build file template. + +%Makefile qtgl.pro.in +# The project file for the qtgl module. +# +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +TEMPLATE = lib +TARGET = @BLX_TARGET_LIB@ +DESTDIR = @PYQT_MODDIR@ +CONFIG += @BLX_CONFIG_LIB@ opengl @PYQT_WARN@ +INCLUDEPATH = @BLX_INCLUDEPATH@ +DEFINES = @BLX_DEFINES@ +LIBS += @PYQT_QT_MODULE@ @BLX_LIBS@ +macx:QMAKE_LFLAGS += -framework Python + +SOURCES = $B + +HEADERS = $H +%End diff --git a/sip/qtnetwork/copying.sip b/sip/qtnetwork/copying.sip new file mode 100644 index 0000000..463904b --- /dev/null +++ b/sip/qtnetwork/copying.sip @@ -0,0 +1,51 @@ +// This is the SIP file defining the PyQt license. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Copying +Copyright (c) 2007 + Riverbank Computing Limited + +This file is part of PyQt. + +This copy of PyQt is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +PyQt is supplied 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 General Public License for more +details. + +You should have received a copy of the GNU General Public License along with +PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +%End + + +%OptionalInclude pyqt-internal.sip +%OptionalInclude pyqt-gpl.sip +%OptionalInclude pyqt-commercial.sip +%OptionalInclude pyqt-edu.sip +%OptionalInclude pyqt-eval.sip +%OptionalInclude pyqt-nc.sip +%OptionalInclude pyqt-tkc.sip diff --git a/sip/qtnetwork/qdns.sip b/sip/qtnetwork/qdns.sip new file mode 100644 index 0000000..b91bb9f --- /dev/null +++ b/sip/qtnetwork/qdns.sip @@ -0,0 +1,274 @@ +// This is the SIP interface definition for QDns. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QDns (Qt v2.2+) + +QDns is fully implemented. + + +%End + + +%If (Qt_DNS) +%If (Qt_2_2_0 -) + +class QDns : QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum RecordType { + None, + A, + Aaaa, + Mx, + Srv, + Cname, + Ptr, + Txt + }; + + QDns(); + QDns(const QString &,RecordType = A); + QDns(const QHostAddress &,RecordType = A); + + virtual void setLabel(const QString &); + virtual void setLabel(const QHostAddress &); + QString label() const; + + virtual void setRecordType(RecordType = A); + RecordType recordType() const; + + bool isWorking() const; + + QValueList addresses() const; + + class MailServer + { + public: + MailServer(const QString & = QString::null,Q_UINT16 = 0); + + QString name; + Q_UINT16 priority; + }; + + QValueList mailServers() const; + + class Server + { + public: + Server(const QString & = QString::null,Q_UINT16 = 0, + Q_UINT16 = 0,Q_UINT16 = 0); + + QString name; + Q_UINT16 priority; + Q_UINT16 weight; + Q_UINT16 port; + }; + + QValueList servers() const; + + QStringList hostNames() const; + + QStringList texts() const; + + QString canonicalName() const; + + QStringList qualifiedNames() const; + +signals: + void resultsReady(); +}; + + +%MappedType QValueList +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + // Convert to a Python list of QHostAddress instances. + + int i; + PyObject *l; + + // Create the list. + + if ((l = PyList_New(sipCpp -> count())) == NULL) + return NULL; + + // Get it. + + i = 0; + QValueListConstIterator it; + + for (it = sipCpp -> begin(); it != sipCpp -> end(); ++it) + { + PyObject *tmobj; + + if ((tmobj = sipConvertFromNewInstance(new QHostAddress(*it),sipClass_QHostAddress,sipTransferObj)) == NULL || PyList_SetItem(l,i,tmobj) < 0) + { + Py_XDECREF(tmobj); + Py_DECREF(l); + + return NULL; + } + + ++i; + } + + return l; +%End + +%ConvertToTypeCode + // At the moment this will never be called, so provide a null + // implementation. + + if (sipIsErr == NULL) + return PyList_Check(sipPy); + + PyErr_Format(PyExc_TypeError,"Converting to QValueList not yet implemented"); + + *sipIsErr = 1; + + return 0; +%End +}; + + +%MappedType QValueList +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + // Convert to a Python list of QDns::MailServer instances. + + int i; + PyObject *l; + + // Create the list. + + if ((l = PyList_New(sipCpp -> count())) == NULL) + return NULL; + + // Get it. + + i = 0; + QValueListConstIterator it; + + for (it = sipCpp -> begin(); it != sipCpp -> end(); ++it) + { + PyObject *tmobj; + + if ((tmobj = sipConvertFromNewInstance(new QDns::MailServer(*it),sipClass_QDns_MailServer,sipTransferObj)) == NULL || PyList_SetItem(l,i,tmobj) < 0) + { + Py_XDECREF(tmobj); + Py_DECREF(l); + + return NULL; + } + + ++i; + } + + return l; +%End + +%ConvertToTypeCode + // At the moment this will never be called, so provide a null + // implementation. + + if (sipIsErr == NULL) + return PyList_Check(sipPy); + + PyErr_Format(PyExc_TypeError,"Converting to QValueList not yet implemented"); + + *sipIsErr = 1; + + return 0; +%End +}; + + +%MappedType QValueList +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + // Convert to a Python list of QDns::Server instances. + + int i; + PyObject *l; + + // Create the list. + + if ((l = PyList_New(sipCpp -> count())) == NULL) + return NULL; + + // Get it. + + i = 0; + QValueListConstIterator it; + + for (it = sipCpp -> begin(); it != sipCpp -> end(); ++it) + { + PyObject *tmobj; + + if ((tmobj = sipConvertFromNewInstance(new QDns::Server(*it),sipClass_QDns_Server,sipTransferObj)) == NULL || PyList_SetItem(l,i,tmobj) < 0) + { + Py_XDECREF(tmobj); + Py_DECREF(l); + + return NULL; + } + + ++i; + } + + return l; +%End + +%ConvertToTypeCode + // At the moment this will never be called, so provide a null + // implementation. + + if (sipIsErr == NULL) + return PyList_Check(sipPy); + + PyErr_Format(PyExc_TypeError,"Converting to QValueList not yet implemented"); + + *sipIsErr = 1; + + return 0; +%End +}; + +%End +%End diff --git a/sip/qtnetwork/qftp.sip b/sip/qtnetwork/qftp.sip new file mode 100644 index 0000000..f79ecc1 --- /dev/null +++ b/sip/qtnetwork/qftp.sip @@ -0,0 +1,183 @@ +// This is the SIP interface definition for QFtp. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QFtp (Qt v2.2+) + + Q_LONG readBlock + char *data + Q_ULONG maxlen + + +This takes a single maxlen parameter. The +data is returned if there was no error, otherwise +None is returned. + + +%End + + +%If (Qt_NETWORKPROTOCOL_FTP) +%If (Qt_2_2_0 -) + +class QFtp : QNetworkProtocol +{ +%TypeHeaderCode +#include +%End + +public: + QFtp(); +%If (Qt_3_1_0 -) + QFtp(QObject * /TransferThis/,const char * = 0); +%End + virtual ~QFtp(); + +%If (Qt_3_0_0 -) + int supportedOperations() const; +%End +%If (- Qt_3_0_0) + virtual int supportedOperations() const; +%End + +%If (Qt_3_1_0 -) + enum State { + Unconnected, + HostLookup, + Connecting, + Connected, + LoggedIn, + Closing + }; + + enum Error { + NoError, + UnknownError, + HostNotFound, + ConnectionRefused, + NotConnected + }; + + enum Command { + None, + ConnectToHost, + Login, + Close, + List, + Cd, + Get, + Put, + Remove, + Mkdir, + Rmdir, + Rename, + RawCommand + }; + + int connectToHost(const QString &,Q_UINT16 = 21) /ReleaseGIL/; + int login(const QString & = QString::null, + const QString & = QString::null) /ReleaseGIL/; + int close() /ReleaseGIL/; + int list(const QString & = QString::null) /ReleaseGIL/; + int cd(const QString &) /ReleaseGIL/; + int get(const QString &,QIODevice * = 0) /ReleaseGIL/; + int put(const QByteArray &,const QString &) /ReleaseGIL/; + int put(QIODevice *,const QString &) /ReleaseGIL/; + int remove(const QString &) /ReleaseGIL/; + int mkdir(const QString &) /ReleaseGIL/; + int rmdir(const QString &) /ReleaseGIL/; + int rename(const QString &,const QString &) /ReleaseGIL/; + + int rawCommand(const QString &) /ReleaseGIL/; + + unsigned long bytesAvailable() const; + + SIP_PYOBJECT readBlock(Q_ULONG) /ReleaseGIL/ [Q_LONG (char *,Q_ULONG)]; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + Q_LONG actlen; + + Py_BEGIN_ALLOW_THREADS + actlen = sipCpp -> QFtp::readBlock(buf,a0); + Py_END_ALLOW_THREADS + + if (actlen < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else if ((sipRes = PyString_FromStringAndSize(buf,actlen)) == NULL) + sipIsErr = 1; + + sipFree((ANY *)buf); + } +%End + + QByteArray readAll() /ReleaseGIL/; + + int currentId() const; + QIODevice* currentDevice() const; + Command currentCommand() const; + bool hasPendingCommands() const; + void clearPendingCommands(); + + State state() const; + + Error error() const; + QString errorString() const; +%End + +public slots: +%If (Qt_3_1_0 -) + void abort(); +%End + +signals: +%If (Qt_3_1_0 -) + void stateChanged(int); + void listInfo(const QUrlInfo &); + void readyRead(); + void dataTransferProgress(int,int); + void rawCommandReply(int,const QString &); + + void commandStarted(int); + void commandFinished(int,bool); + void done(bool); +%End + +protected: + void parseDir(const QString &,QUrlInfo &); + virtual void operationListChildren(QNetworkOperation *); + virtual void operationMkDir(QNetworkOperation *); + virtual void operationRemove(QNetworkOperation *); + virtual void operationRename(QNetworkOperation *); + virtual void operationGet(QNetworkOperation *); + virtual void operationPut(QNetworkOperation *); +}; + +%End +%End diff --git a/sip/qtnetwork/qhostaddress.sip b/sip/qtnetwork/qhostaddress.sip new file mode 100644 index 0000000..e2379e2 --- /dev/null +++ b/sip/qtnetwork/qhostaddress.sip @@ -0,0 +1,99 @@ +// This is the SIP interface definition for QHostAddress. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QHostAddress (Qt v2.2+) + + QHostAddress + Q_UINT8 *ip6Addr + + +Not yet implemented. + + + + QHostAddress + const Q_IPV6ADDR &ip6Addr + + +Not yet implemented. + + + + void setAddress + Q_UINT8 *ip6Addr + + +Not yet implemented. + + + + Q_IPV6ADDR toIPv6Address const + + + +Not yet implemented. + + +%End + + +%If (Qt_2_2_0 -) + +class QHostAddress +{ +%TypeHeaderCode +#include +%End + +public: + QHostAddress(); + QHostAddress(Q_UINT32); +// QHostAddress(Q_UINT8 *); +%If (Qt_3_3_0 -) + //QHostAddress(const Q_IPV6ADDR &); + // This isn't mentioned in the documentation. + //QHostAddress(const QString &); +%End + QHostAddress(const QHostAddress &); + + void setAddress(Q_UINT32); +// void setAddress(Q_UINT8 *); + bool setAddress(const QString &); + bool isIp4Addr() const; + Q_UINT32 ip4Addr() const; + +%If (Qt_3_3_0 -) + bool isIPv4Address() const; + Q_UINT32 toIPv4Address() const; + bool isIPv6Address() const; + //Q_IPV6ADDR toIPv6Address() const; +%End + + QString toString() const; + +%If (Qt_3_2_0 -) + bool isNull() const; +%End +}; + +%End diff --git a/sip/qtnetwork/qhttp.sip b/sip/qtnetwork/qhttp.sip new file mode 100644 index 0000000..fbcc999 --- /dev/null +++ b/sip/qtnetwork/qhttp.sip @@ -0,0 +1,279 @@ +// This is the SIP interface definition for QHttp, QHttpHeader, +// QHttpRequestHeader and QHttpResponseHeader. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QHttp (Qt v3+) + + Q_LONG readBlock + char *data + Q_ULONG maxlen + + +This takes a single maxlen parameter. The +data is returned if there was no error, otherwise +None is returned. + + + +QHttpHeader (Qt v3.1+) + +QHttpHeader is fully implemented. + + + +QHttpRequestHeader (Qt v3.1+) + +QHttpRequestHeader is fully implemented. + + + +QHttpResponseHeader (Qt v3.1+) + +QHttpResponseHeader is fully implemented. + + +%End + + +%If (Qt_NETWORKPROTOCOL_HTTP) +%If (Qt_3_1_0 -) + +class QHttpHeader +{ +%TypeHeaderCode +#include +%End + +public: + QHttpHeader(); + QHttpHeader(const QHttpHeader &); + QHttpHeader(const QString &); + virtual ~QHttpHeader(); + + QString value(const QString &) const; + void setValue(const QString &,const QString &); + void removeValue(const QString &); + + QStringList keys() const; + bool hasKey(const QString &) const; + + bool hasContentLength() const; + uint contentLength() const; + void setContentLength(int); + + bool hasContentType() const; + QString contentType() const; + void setContentType(const QString &); + + virtual QString toString() const; + bool isValid() const; + + virtual int majorVersion() const = 0; + virtual int minorVersion() const = 0; + +protected: + virtual bool parseLine(const QString &,int); + bool parse(const QString &); + void setValid(bool); +}; + + +class QHttpResponseHeader : QHttpHeader +{ +%TypeHeaderCode +#include +%End + +public: + QHttpResponseHeader(); + QHttpResponseHeader(const QHttpResponseHeader &); + + int statusCode() const; + QString reasonPhrase() const; + + int majorVersion() const; + int minorVersion() const; + + QString toString() const; + +protected: + bool parseLine(const QString &,int); +}; + + +class QHttpRequestHeader : QHttpHeader +{ +%TypeHeaderCode +#include +%End + +public: + QHttpRequestHeader(); + QHttpRequestHeader(const QString &,const QString &,int = 1,int = 1); + QHttpRequestHeader(const QHttpRequestHeader &); + QHttpRequestHeader(const QString &); + + void setRequest(const QString &,const QString &,int = 1,int = 1); + + QString method() const; + QString path() const; + + int majorVersion() const; + int minorVersion() const; + + QString toString() const; + +protected: + bool parseLine(const QString &,int); +}; + +%End + + +%If (Qt_3_0_0 -) + +class QHttp : QNetworkProtocol +{ +%TypeHeaderCode +#include +%End + +public: + QHttp(); +%If (Qt_3_1_0 -) + QHttp(QObject * /TransferThis/,const char * = 0); + QHttp(const QString &,Q_UINT16 = 80,QObject * /TransferThis/ = 0, + const char * = 0); + virtual ~QHttp(); +%End + + int supportedOperations() const; + +%If (Qt_3_1_0 -) + enum State { + Unconnected, + HostLookup, + Connecting, + Sending, + Reading, + Connected, + Closing + }; + + enum Error { + NoError, + UnknownError, + HostNotFound, + ConnectionRefused, + UnexpectedClose, + InvalidResponseHeader, + WrongContentLength, + Aborted + }; + + int setHost(const QString &,Q_UINT16 = 80); + + int get(const QString &,QIODevice * = 0) /ReleaseGIL/; + int post(const QString &,QIODevice *,QIODevice * = 0) /ReleaseGIL/; + int post(const QString &,const QByteArray &, + QIODevice * = 0) /ReleaseGIL/; + int head(const QString &) /ReleaseGIL/; + int request(const QHttpRequestHeader &,QIODevice * = 0, + QIODevice * = 0) /ReleaseGIL/; + int request(const QHttpRequestHeader &,const QByteArray &, + QIODevice * = 0) /ReleaseGIL/; + + int closeConnection(); + + unsigned long bytesAvailable() const; + + SIP_PYOBJECT readBlock(Q_ULONG) /ReleaseGIL/ [Q_LONG (char *,Q_ULONG)]; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + Q_LONG actlen; + + Py_BEGIN_ALLOW_THREADS + actlen = sipCpp -> QHttp::readBlock(buf,a0); + Py_END_ALLOW_THREADS + + if (actlen < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else if ((sipRes = PyString_FromStringAndSize(buf,actlen)) == NULL) + sipIsErr = 1; + + sipFree((ANY *)buf); + } +%End + + QByteArray readAll() /ReleaseGIL/; + + int currentId() const; + QIODevice *currentSourceDevice() const; + QIODevice *currentDestinationDevice() const; + QHttpRequestHeader currentRequest() const; + bool hasPendingRequests() const; + void clearPendingRequests(); + + State state() const; + + Error error() const; + QString errorString() const; +%End + +public slots: +%If (Qt_3_1_0 -) + void abort(); +%End + +signals: +%If (Qt_3_1_0 -) + void stateChanged(int); + void responseHeaderReceived(const QHttpResponseHeader &); + void readyRead(const QHttpResponseHeader &); + void dataSendProgress(int,int); + void dataReadProgress(int,int); + + void requestStarted(int); + void requestFinished(int,bool); + void done(bool); +%End + +protected: + void operationGet(QNetworkOperation *); + void operationPut(QNetworkOperation *); + +%If (Qt_3_1_0 -) + void timerEvent(QTimerEvent *); +%End +}; + +%End +%End diff --git a/sip/qtnetwork/qlocalfs.sip b/sip/qtnetwork/qlocalfs.sip new file mode 100644 index 0000000..a8b816f --- /dev/null +++ b/sip/qtnetwork/qlocalfs.sip @@ -0,0 +1,56 @@ +// This is the SIP interface definition for QLocalFs. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QLocalFs (Qt v2.1+) + +QLocalFs is fully implemented. + + +%End + + +%If (Qt_NETWORKPROTOCOL) +%If (Qt_2_1_0 -) + +class QLocalFs : QNetworkProtocol +{ +%TypeHeaderCode +#include +%End + +public: + QLocalFs(); + + virtual int supportedOperations() const; + +protected: + virtual void operationListChildren(QNetworkOperation *); + virtual void operationMkDir(QNetworkOperation *); + virtual void operationRemove(QNetworkOperation *); + virtual void operationRename(QNetworkOperation *); + virtual void operationGet(QNetworkOperation *); + virtual void operationPut(QNetworkOperation *); +}; + +%End +%End diff --git a/sip/qtnetwork/qnetwork.sip b/sip/qtnetwork/qnetwork.sip new file mode 100644 index 0000000..6b87d4e --- /dev/null +++ b/sip/qtnetwork/qnetwork.sip @@ -0,0 +1,34 @@ +// This is the SIP interface definition for qInitNetworkProtocols. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%If (Qt_NETWORKPROTOCOL) +%If (Qt_2_2_0 -) + +%ModuleHeaderCode +#include +#include +%End + +void qInitNetworkProtocols(); + +%End +%End diff --git a/sip/qtnetwork/qserversocket.sip b/sip/qtnetwork/qserversocket.sip new file mode 100644 index 0000000..c130969 --- /dev/null +++ b/sip/qtnetwork/qserversocket.sip @@ -0,0 +1,70 @@ +// This is the SIP interface definition for QServerSocket. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QServerSocket (Qt v2.2+) + +QServerSocket is fully implemented. + + +%End + + +%If (Qt_2_2_0 -) + +class QServerSocket : QObject +{ +%TypeHeaderCode +#include +%End + +public: +%If (- Qt_3_0_0) + QServerSocket(Q_UINT16,int = 0,QObject * /TransferThis/ = 0, + const char * = 0); + QServerSocket(const QHostAddress &,Q_UINT16,int = 0, + QObject * /TransferThis/ = 0,const char * = 0); +%End +%If (Qt_3_0_0 -) + QServerSocket(Q_UINT16,int = 1,QObject * /TransferThis/ = 0, + const char * = 0); + QServerSocket(const QHostAddress &,Q_UINT16,int = 1, + QObject * /TransferThis/ = 0,const char * = 0); +%End + QServerSocket(QObject * /TransferThis/ = 0,const char * = 0); + + bool ok() const; + + Q_UINT16 port() const; + + int socket() const; + virtual void setSocket(int); + + QHostAddress address() const ; + + virtual void newConnection(int) = 0; + +protected: + QSocketDevice *socketDevice(); +}; + +%End diff --git a/sip/qtnetwork/qsocket.sip b/sip/qtnetwork/qsocket.sip new file mode 100644 index 0000000..9da9bfc --- /dev/null +++ b/sip/qtnetwork/qsocket.sip @@ -0,0 +1,348 @@ +// This is the SIP interface definition for QSocket. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSocket (Qt v2.2+) + + Q_LONG readBlock + char *data + Q_ULONG len + + +This takes a single len parameter. The +data is returned if there was no error, otherwise +Py_None is returned. + + + + Q_LONG readLine + char *data + Q_ULONG maxlen + + +This takes a single maxlen parameter. The +data is returned if there was no error, otherwise +Py_None is returned. + + + + Q_LONG writeBlock + const char *data + Q_ULONG len + + +len is derived from data and not passed +as a parameter. + + +%End + + +%If (Qt_2_2_0 -) + +class QSocket : QObject, QIODevice +{ +%TypeHeaderCode +#include +%End + +public: + enum Error { + ErrConnectionRefused, + ErrHostNotFound, + ErrSocketRead + }; + + QSocket(QObject * /TransferThis/ = 0,const char * = 0); + + enum State { + Idle, + HostLookup, + Connecting, +%If (Qt_3_0_0 -) + Connected, +%End +%If (- Qt_3_0_0) + Listening, +%End + Closing, + Connection + }; + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipWrapperType **type; + int yes, no; + } graph[] = { + {sipName_QServerSocket, &sipClass_QServerSocket, -1, 1}, + {sipName_QSocket, &sipClass_QSocket, -1, 2}, + {sipName_QFtp, &sipClass_QFtp, -1, 3}, + {sipName_QLocalFs, &sipClass_QLocalFs, -1, 4}, +#if QT_VERSION >= 0x030000 + {sipName_QHttp, &sipClass_QHttp, -1, 5}, +#else + {NULL, NULL, -1, 5}, +#endif + {sipName_QDns, &sipClass_QDns, -1, -1}, + }; + + int i = 0; + + sipClass = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipClass = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + + State state() const; + + int socket() const; + virtual void setSocket(int); + +%If (Qt_3_0_0 -) + QSocketDevice *socketDevice(); + virtual void setSocketDevice(QSocketDevice *); +%End + +%If (Qt_DNS) + virtual void connectToHost(const QString &,Q_UINT16) /ReleaseGIL/; +%End + QString peerName() const; + + bool open(int) /ReleaseGIL/; + void close() /ReleaseGIL/; + void flush() /ReleaseGIL/; +%If (Qt_3_0_0 -) + Offset size() const; + Offset at() const; + bool at(Offset); +%End +%If (- Qt_3_0_0) + uint size() const; + int at() const; + bool at(int); +%End + bool atEnd() const; + +%If (Qt_3_0_0 -) + Q_ULONG bytesAvailable() const; + Q_ULONG waitForMore(int) const /ReleaseGIL/; + //Q_ULONG waitForMore(int,bool *) const /ReleaseGIL/; + Q_ULONG bytesToWrite() const; +%End +%If (- Qt_3_0_0) + int bytesAvailable() const; + int waitForMore(int) const /ReleaseGIL/; + int bytesToWrite() const; +%End +%If (Qt_3_1_0 -) + void clearPendingData(); +%End + +%If (- Qt_3_0_0) + SIP_PYOBJECT readBlock(uint) /ReleaseGIL/ [int (char *,uint)]; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + int actlen; + + Py_BEGIN_ALLOW_THREADS + actlen = sipSelfWasArg ? sipCpp->QSocket::readBlock(buf, a0) : sipCpp->readBlock(buf, a0); + Py_END_ALLOW_THREADS + + if (actlen < 0) + { + sipFree((ANY *)buf); + + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = PyString_FromStringAndSize(buf,actlen); + + sipFree((ANY *)buf); + + if (sipRes == NULL) + sipIsErr = 1; + } + } +%End + + int writeBlock(const char * /Array/,uint /ArraySize/) /ReleaseGIL/; + + SIP_PYOBJECT readLine(uint) /ReleaseGIL/ [int (char *,uint)]; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + int actlen; + + Py_BEGIN_ALLOW_THREADS + actlen = sipCpp -> readLine(buf,a0); + Py_END_ALLOW_THREADS + + if (actlen < 0) + { + sipFree((ANY *)buf); + + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = PyString_FromStringAndSize(buf,actlen); + + sipFree((ANY *)buf); + + if (sipRes == NULL) + sipIsErr = 1; + } + } +%End +%End +%If (Qt_3_0_0 -) + SIP_PYOBJECT readBlock(Q_ULONG) /ReleaseGIL/ [Q_LONG (char *,Q_ULONG)]; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + Q_LONG actlen; + + Py_BEGIN_ALLOW_THREADS + actlen = sipSelfWasArg ? sipCpp->QSocket::readBlock(buf, a0) : sipCpp->readBlock(buf, a0); + Py_END_ALLOW_THREADS + + if (actlen < 0) + { + sipFree((ANY *)buf); + + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = PyString_FromStringAndSize(buf,actlen); + + sipFree((ANY *)buf); + + if (sipRes == NULL) + sipIsErr = 1; + } + } +%End + + Q_LONG writeBlock(const char * /Array/, + Q_ULONG /ArraySize/) /ReleaseGIL/; + + SIP_PYOBJECT readLine(Q_ULONG) /ReleaseGIL/ [Q_LONG (char *,Q_ULONG)]; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + Q_LONG actlen; + + Py_BEGIN_ALLOW_THREADS + actlen = sipCpp -> readLine(buf,a0); + Py_END_ALLOW_THREADS + + if (actlen < 0) + { + sipFree((ANY *)buf); + + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = PyString_FromStringAndSize(buf,actlen); + + sipFree((ANY *)buf); + + if (sipRes == NULL) + sipIsErr = 1; + } + } +%End +%End + + int getch() /ReleaseGIL/; + int putch(int) /ReleaseGIL/; + int ungetch(int); + + bool canReadLine() const; + virtual QString readLine() /ReleaseGIL/; + + Q_UINT16 port() const; + Q_UINT16 peerPort() const; + QHostAddress address() const; + QHostAddress peerAddress() const; + +%If (Qt_3_2_0 -) + void setReadBufferSize(Q_ULONG); + Q_ULONG readBufferSize() const; +%End + +signals: + void hostFound(); + void connected(); + void connectionClosed(); + void delayedCloseFinished(); + void readyRead(); + void bytesWritten(int); + void error(int); + +protected: +%If (- Qt_3_0_0) + QSocketDevice *socketDevice(); +%End + +private: + QSocket(const QSocket &); +}; + +%End diff --git a/sip/qtnetwork/qsocketdevice.sip b/sip/qtnetwork/qsocketdevice.sip new file mode 100644 index 0000000..3b48096 --- /dev/null +++ b/sip/qtnetwork/qsocketdevice.sip @@ -0,0 +1,224 @@ +// This is the SIP interface definition for QSocketDevice. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSocketDevice (Qt v2.2+) + + Q_LONG readBlock + char *data + Q_ULONG len + + +This takes a single len parameter. The +data is returned if there was no error, otherwise +None is returned. + + + + Q_LONG writeBlock + const char *data + Q_ULONG len + + +len is derived from data and not passed +as a parameter. + + +%End + + +%If (Qt_2_2_0 -) + +class QSocketDevice : QIODevice +{ +%TypeHeaderCode +#include +%End + +public: + enum Type { + Stream, + Datagram + }; + +%If (Qt_3_3_0 -) + enum Protocol { + IPv4, + IPv6, + Unknown + }; +%End + + QSocketDevice(Type = Stream); +%If (Qt_3_3_0 -) + QSocketDevice(Type,Protocol,int); +%End + QSocketDevice(int,Type); + + bool isValid() const; + Type type() const; +%If (Qt_3_3_0 -) + Protocol protocol() const; +%End + + int socket() const; + virtual void setSocket(int,Type); + + bool open(int) /ReleaseGIL/; + void close(); + void flush() /ReleaseGIL/; + +%If (- Qt_3_0_0) + uint size() const; + int at() const; + bool at(int); +%End +%If (Qt_3_0_0 -) + Offset size() const; + Offset at() const; + bool at(Offset); +%End + bool atEnd() const; + + bool blocking() const; + virtual void setBlocking(bool); + + bool addressReusable() const; + virtual void setAddressReusable(bool); + + int receiveBufferSize() const; + virtual void setReceiveBufferSize(uint); + int sendBufferSize() const; + virtual void setSendBufferSize(uint); + + virtual bool connect(const QHostAddress &,Q_UINT16); + + virtual bool bind(const QHostAddress &,Q_UINT16); + virtual bool listen(int); + virtual int accept(); + +%If (- Qt_3_0_0) + int bytesAvailable() const; + int waitForMore(int) const /ReleaseGIL/; +%End +%If (Qt_3_0_0 -) + Q_LONG bytesAvailable() const; + Q_LONG waitForMore(int) const /ReleaseGIL/; +%End + +%If (- Qt_3_0_0) + SIP_PYOBJECT readBlock(uint) /ReleaseGIL/ [int (char *,uint)]; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + int actlen; + + Py_BEGIN_ALLOW_THREADS + actlen = sipSelfWasArg ? sipCpp->QSocketDevice::readBlock(buf, a0) : sipCpp->readBlock(buf, a0); + Py_END_ALLOW_THREADS + + if (actlen < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else if ((sipRes = PyString_FromStringAndSize(buf,actlen)) == NULL) + sipIsErr = 1; + + sipFree((ANY *)buf); + } +%End + + int writeBlock(const char * /Array/,uint /ArraySize/) /ReleaseGIL/; + virtual int writeBlock(const char * /Array/,uint /ArraySize/, + const QHostAddress &,Q_UINT16) /ReleaseGIL/; +%End +%If (Qt_3_0_0 -) + SIP_PYOBJECT readBlock(Q_ULONG) /ReleaseGIL/ [Q_LONG (char *,Q_ULONG)]; +%MethodCode + char *buf; + + if ((buf = (char *)sipMalloc(a0)) == NULL) + sipIsErr = 1; + else + { + Q_LONG actlen; + + Py_BEGIN_ALLOW_THREADS + actlen = sipSelfWasArg ? sipCpp->QSocketDevice::readBlock(buf, a0) : sipCpp->readBlock(buf, a0); + Py_END_ALLOW_THREADS + + if (actlen < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else if ((sipRes = PyString_FromStringAndSize(buf,actlen)) == NULL) + sipIsErr = 1; + + sipFree((ANY *)buf); + } +%End + + + Q_LONG writeBlock(const char * /Array/, + Q_ULONG /ArraySize/) /ReleaseGIL/; + virtual Q_LONG writeBlock(const char * /Array/,Q_ULONG /ArraySize/, + const QHostAddress &,Q_UINT16) /ReleaseGIL/; +%End + + int getch(); + int putch(int); + int ungetch(int); + + Q_UINT16 port() const; + Q_UINT16 peerPort() const; + QHostAddress address() const; + QHostAddress peerAddress() const; + + enum Error { + NoError, + AlreadyBound, + Inaccessible, + NoResources, + Bug, + Impossible, + NoFiles, + ConnectionRefused, + NetworkFailure, + UnknownError + }; + + Error error() const; + +protected: + void setError(Error); + +private: + QSocketDevice(const QSocketDevice &); +}; + +%End diff --git a/sip/qtnetwork/qtnetworkmod.sip b/sip/qtnetwork/qtnetworkmod.sip new file mode 100644 index 0000000..ca580d7 --- /dev/null +++ b/sip/qtnetwork/qtnetworkmod.sip @@ -0,0 +1,78 @@ +// This is the SIP interface definition for the qtnetwork module of PyQt. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Module qtnetwork 1 + +%Import qt/qtmod.sip + +%Include copying.sip + + +%Include qdns.sip +%Include qhostaddress.sip +%Include qftp.sip +%Include qhttp.sip +%Include qlocalfs.sip +%Include qnetwork.sip +%Include qserversocket.sip +%Include qsocket.sip +%Include qsocketdevice.sip + + +// The build file template. + +%Makefile qtnetwork.pro.in +# The project file for the qtnetwork module. +# +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +TEMPLATE = lib +TARGET = @BLX_TARGET_LIB@ +DESTDIR = @PYQT_MODDIR@ +CONFIG += @BLX_CONFIG_LIB@ @PYQT_WARN@ +INCLUDEPATH = @BLX_INCLUDEPATH@ +DEFINES = @BLX_DEFINES@ +LIBS += @PYQT_QT_MODULE@ @BLX_LIBS@ +macx:QMAKE_LFLAGS += -framework Python + +SOURCES = $B + +HEADERS = $H +%End diff --git a/sip/qtpe/copying.sip b/sip/qtpe/copying.sip new file mode 100644 index 0000000..463904b --- /dev/null +++ b/sip/qtpe/copying.sip @@ -0,0 +1,51 @@ +// This is the SIP file defining the PyQt license. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Copying +Copyright (c) 2007 + Riverbank Computing Limited + +This file is part of PyQt. + +This copy of PyQt is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +PyQt is supplied 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 General Public License for more +details. + +You should have received a copy of the GNU General Public License along with +PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +%End + + +%OptionalInclude pyqt-internal.sip +%OptionalInclude pyqt-gpl.sip +%OptionalInclude pyqt-commercial.sip +%OptionalInclude pyqt-edu.sip +%OptionalInclude pyqt-eval.sip +%OptionalInclude pyqt-nc.sip +%OptionalInclude pyqt-tkc.sip diff --git a/sip/qtpe/qpeapplication.sip b/sip/qtpe/qpeapplication.sip new file mode 100644 index 0000000..f71240e --- /dev/null +++ b/sip/qtpe/qpeapplication.sip @@ -0,0 +1,223 @@ +// This is the SIP interface definition for QPEApplication. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (WS_QWS) + +class QPEApplication : QApplication +{ +%TypeHeaderCode +#include +#include +%End + +public: + QPEApplication(SIP_PYLIST,Type=GuiClient) [(int &,char **,Type=GuiClient)]; +%MethodCode + // The Python interface is a list of argument strings that is + // modified. + + int argc; + char **argv; + + // Convert the list. + if ((argv = pyArgvToC(a0,&argc)) == NULL) + sipIsErr = 1; + else + { + // Create it now the arguments are right. + int nargc = argc; + + Py_BEGIN_ALLOW_THREADS + sipCpp = new sipQPEApplication(nargc,argv,(QApplication::Type)a1); + Py_END_ALLOW_THREADS + + // Now modify the original list. + updatePyArgv(a0,argc,argv); + } +%End + + ~QPEApplication(); +%MethodCode + // See the comments in ~QApplication() to understand what's + // being done here. + + QWidgetList *tlw = QApplication::topLevelWidgets(); + QWidgetListIt it(*tlw); + QWidget *w; + + while ((w = it.current()) != 0) + { + PyObject *sw; + + if ((sw = sipGetWrapper(w,sipClass_QWidget)) != NULL) + sipTransferTo(sw,NULL); + + ++it; + } + + delete tlw; +%End + +%ConvertToSubClassCode + // The table of Python class objects indexed by their names. The table + // must be sorted by name. + + static sipStringTypeClassMap map[] = { + {sipName_FileSelector, &sipClass_FileSelector}, + {sipName_MenuButton, &sipClass_MenuButton}, + {sipName_QPEApplication, &sipClass_QPEApplication}, + {sipName_QPEMenuBar, &sipClass_QPEMenuBar}, + {sipName_QPEToolBar, &sipClass_QPEToolBar}, + }; + + sipClass = sipMapStringToClass(sipCpp -> className(),map, + sizeof (map)/sizeof (map[0])); +%End + + static QString qpeDir(); + static QString documentDir(); + void applyStyle(); + static int defaultRotation(); + static void setDefaultRotation(int); + static void grabKeyboard(); + static void ungrabKeyboard(); + + enum StylusMode { + LeftOnly, + RightOnHold + }; + + static void setStylusOperation(QWidget *,StylusMode); + static StylusMode stylusOperation(QWidget *); + + enum InputMethodHint { + Normal, + AlwaysOff, + AlwaysOn + }; + + enum screenSaverHint { + Disable, + DisableLightOff, + DisableSuspend, + Enable + }; + + static void setInputMethodHint(QWidget *,InputMethodHint); + static InputMethodHint inputMethodHint(QWidget *); + + void showMainWidget(QWidget *,bool = 0); + void showMainDocumentWidget(QWidget *,bool = 0); + + static void setKeepRunning(); + bool keepRunning() const; + + int exec() /PyName=exec_loop, ReleaseGIL, + PreHook=__pyQtPreEventLoopHook__, + PostHook=__pyQtPostEventLoopHook__/; + +signals: + void clientMoused(); + void timeChanged(); + void clockChanged(bool); + void volumeChanged(bool); + void appMessage(const QCString &,const QByteArray &); + void weekChanged(bool); + void dateFormatChanged(DateFormat); + void flush(); + void reload(); + +protected: +// bool qwsEventFilter(QWSEvent *); +// void internalSetStyle(const QString &); + void prepareForTermination(bool); + virtual void restart(); + virtual void shutdown(); + bool eventFilter(QObject *,QEvent *); + void timerEvent(QTimerEvent *); + bool keyboardGrabbed() const; + bool raiseAppropriateWindow(); + virtual void tryQuit(); + + +%TypeCode +#include + + +// Convert a Python argv list to a conventional C argc count and argv array. +static char **pyArgvToC(PyObject *argvlist,int *argcp) +{ + int argc; + char **argv; + + argc = PyList_Size(argvlist); + + // Allocate space for two copies of the argument pointers, plus the + // terminating NULL. + if ((argv = (char **)sipMalloc(2 * (argc + 1) * sizeof (char *))) == NULL) + return NULL; + + // Convert the list. + for (int a = 0; a < argc; ++a) + { + char *arg; + + // Get the argument and allocate memory for it. + if ((arg = PyString_AsString(PyList_GetItem(argvlist,a))) == NULL || + (argv[a] = (char *)sipMalloc(strlen(arg) + 1)) == NULL) + return NULL; + + // Copy the argument and save a pointer to it. + strcpy(argv[a],arg); + argv[a + argc + 1] = argv[a]; + } + + argv[argc + argc + 1] = argv[argc] = NULL; + + *argcp = argc; + + return argv; +} + + +// Remove arguments from the Python argv list that have been removed from the +// C argv array. +static void updatePyArgv(PyObject *argvlist,int argc,char **argv) +{ + for (int a = 0, na = 0; a < argc; ++a) + { + // See if it was removed. + if (argv[na] == argv[a + argc + 1]) + ++na; + else + PyList_SetSlice(argvlist,na,na + 1,NULL); + } +} +%End + +}; + +%End diff --git a/sip/qtpe/qpeapplnk.sip b/sip/qtpe/qpeapplnk.sip new file mode 100644 index 0000000..f817ae5 --- /dev/null +++ b/sip/qtpe/qpeapplnk.sip @@ -0,0 +1,157 @@ +// This is the SIP interface definition for AppLnk, AppLnkSet, DocLnk and +// DocLnkSet. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (WS_QWS) + +class AppLnk +{ +%TypeHeaderCode +#include +%End + +public: + AppLnk(); + AppLnk(const QString &); + AppLnk(const AppLnk &); + + bool isValid() const; + + static void setSmallIconSize(int); + static void setBigIconSize(int); + static int smallIconSize(); + static int bigIconSize(); + + QString name() const; + const QPixmap& pixmap() const; + const QPixmap& bigPixmap() const; + virtual QString exec() const /PyName=exec_property/; + QString type() const; + QString rotation() const; + QString comment() const; + QString file() const; + QString linkFile() const; + QStringList mimeTypes() const; + QStringList mimeTypeIcons() const; + const QArray &categories() const; + int id() const; + + bool fileKnown() const; + bool linkFileKnown() const; + + void execute() const /ReleaseGIL/; + void execute(const QStringList &) const /ReleaseGIL/; + void removeFiles(); + void removeLinkFile(); + + void setName(const QString &); + void setExec(const QString &); + void setFile(const QString &); + void setLinkFile(const QString &); + void setComment(const QString &); + void setType(const QString &); + void setIcon(const QString &); + void setCategories(const QArray &); + bool writeLink() const; + + void setProperty(const QString &,const QString &); + QString property(const QString &) const; + +protected: + virtual void invoke(const QStringList &) const; + bool ensureLinkExists() const; +// Undocumented and missing on the Zaurus. +// void storeLink() const; +}; + + +class DocLnk : AppLnk +{ +%TypeHeaderCode +#include +%End + +public: + DocLnk(); + DocLnk(const DocLnk &); + DocLnk(const QString &); + DocLnk(const QString &,bool); + + QString exec() const /PyName=exec_property/; + +protected: + void invoke(const QStringList &) const; +}; + + +class AppLnkSet +{ +%TypeHeaderCode +#include +%End + +public: + AppLnkSet(); + AppLnkSet(const QString &); + + const AppLnk *find(int) const; + const AppLnk *findExec(const QString &) const; + + QStringList types() const; + QString typeName(const QString &) const; + QPixmap typePixmap(const QString &) const; + QPixmap typeBigPixmap(const QString &) const; + + void add(AppLnk *); + bool remove(AppLnk *); + + const QList &children() const; + void detachChildren(); + +private: + AppLnkSet(const AppLnkSet &); +}; + + +class DocLnkSet : AppLnkSet +{ +%TypeHeaderCode +#include +%End + +public: + DocLnkSet(); + DocLnkSet(const QString &,const QString & = QString::null); + + const QList &children() const; + + void appendFrom(DocLnkSet &); + +private: + DocLnkSet(const DocLnkSet &); +}; + +%End diff --git a/sip/qtpe/qpeconfig.sip b/sip/qtpe/qpeconfig.sip new file mode 100644 index 0000000..a8f78d7 --- /dev/null +++ b/sip/qtpe/qpeconfig.sip @@ -0,0 +1,78 @@ +// This is the SIP interface definition for Config. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (WS_QWS) + +class Config +{ +%TypeHeaderCode +#include +%End + +public: + typedef QMap ConfigGroup; + + enum Domain { + File, + User + }; + + Config(const QString &,Domain = User); + + bool isValid() const; + bool hasKey(const QString &) const; + + void setGroup(const QString &); +// void writeEntry(const QString &,const char *); + void writeEntry(const QString &,const QString &); + void writeEntryCrypt(const QString &,const QString &); + void writeEntry(const QString &,int); +// void writeEntry(const QString &,bool); + void writeEntry(const QString &,const QStringList &,const QChar &); + void removeEntry(const QString &); + + QString readEntry(const QString &, + const QString & = QString::null) const; + QString readEntryCrypt(const QString &, + const QString & = QString::null) const; + QString readEntryDirect(const QString &, + const QString & = QString::null) const; + int readNumEntry(const QString &,int = -1) const; + bool readBoolEntry(const QString &,bool = 0) const; + QStringList readListEntry(const QString &,const QChar &) const; + + void clearGroup(); + + void write(const QString & = QString::null); + +protected: +// void read(); +// bool parse(const QString &); + +// static QString configFilename(const QString &,Domain); +}; + +%End diff --git a/sip/qtpe/qpefilemanager.sip b/sip/qtpe/qpefilemanager.sip new file mode 100644 index 0000000..d917980 --- /dev/null +++ b/sip/qtpe/qpefilemanager.sip @@ -0,0 +1,53 @@ +// This is the SIP interface definition for FileManager. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (WS_QWS) + +class FileManager +{ +%TypeHeaderCode +#include +%End + +public: + FileManager(); + + bool saveFile(const DocLnk &,const QByteArray &); + bool saveFile(const DocLnk &,const QString &); + bool loadFile(const DocLnk &,QByteArray &); + bool loadFile(const DocLnk &,QString &); + bool copyFile(const AppLnk &,const AppLnk &); + + QIODevice *openFile(const DocLnk &) /ReleaseGIL/; + QIODevice *saveFile(const DocLnk &) /ReleaseGIL/; + + bool exists(const DocLnk &); + +protected: + bool ensurePathExists(const QString &); +}; + +%End diff --git a/sip/qtpe/qpefileselector.sip b/sip/qtpe/qpefileselector.sip new file mode 100644 index 0000000..cfea063 --- /dev/null +++ b/sip/qtpe/qpefileselector.sip @@ -0,0 +1,69 @@ +// This is the SIP interface definition for FileSelector and FileSelectorItem. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (WS_QWS) + +class FileSelectorItem : QListViewItem +{ +%TypeHeaderCode +#include +%End + +public: + FileSelectorItem(QListView * /TransferThis/,const DocLnk &); + + DocLnk file() const; +}; + + +class FileSelector : QVBox +{ +%TypeHeaderCode +#include +%End + +public: + FileSelector(const QString &,QWidget * /TransferThis/,const char *, + bool = 1,bool = 1); + + void setNewVisible(bool); + void setCloseVisible(bool); + void reread(); + int fileCount(); +%If (- QtPE_1_6_0) + const DocLnk *selected(); +%End +%If (QtPE_1_6_0 -) + DocLnk selectedDocument(); +%End + +signals: + void fileSelected(const DocLnk &); + void newSelected(const DocLnk &); + void closeMe(); +}; + +%End diff --git a/sip/qtpe/qpefontdatabase.sip b/sip/qtpe/qpefontdatabase.sip new file mode 100644 index 0000000..2276b5b --- /dev/null +++ b/sip/qtpe/qpefontdatabase.sip @@ -0,0 +1,67 @@ +// This is the SIP interface definition for FontDatabase. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (WS_QWS) + +%If (Qt_FONTDATABASE) + +class FontDatabase : QFontDatabase +{ +%TypeHeaderCode +#include +%End + +public: + FontDatabase(); + + QStringList families() const; + + static void loadRenderers(); +}; + +%End + + +%If (!Qt_FONTDATABASE) + +class FontDatabase +{ +%TypeHeaderCode +#include +%End + +public: + FontDatabase(); + + QStringList families() const; + static QValueList standardSizes(); + + static void loadRenderers(); +}; + +%End + +%End diff --git a/sip/qtpe/qpeglobal.sip b/sip/qtpe/qpeglobal.sip new file mode 100644 index 0000000..f5b4482 --- /dev/null +++ b/sip/qtpe/qpeglobal.sip @@ -0,0 +1,83 @@ +// This is the SIP interface definition for Global. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (WS_QWS) + +class Global +{ +%TypeHeaderCode +#include +%End + +public: + Global(); + + static const QDawg &fixedDawg(); + static const QDawg &addedDawg(); + static const QDawg &dawg(const QString &); + + static void addWords(const QStringList &); + static void addWords(const QString &,const QStringList &); + + static void createDocDir(); + + static void findDocuments(DocLnkSet *,const QString & = QString::null); + + static QString applicationFileName(const QString &,const QString &); + +// struct Command { +// const char *file; +// QWidget *(*func)(bool); +// bool maximized; +// bool documentary; +// }; + +// static void setBuiltinCommands(Command *); + +%If (- QtPE_1_6_0) + static void invoke(const QString &); +%End + static void execute(const QString &,const QString & = QString::null) /ReleaseGIL/; + static void setDocument(QWidget *,const QString &); + static bool terminateBuiltin(const QString &); + static void terminate(const AppLnk *); + + static bool isBuiltinCommand(const QString &); + + static void applyStyle(); + static void statusMessage(const QString &); + static QWidget *shutdown(bool = 0); + static QWidget *restart(bool = 0); + static void hideInputMethod(); + static void showInputMethod(); + + static void writeHWClock(); + + static QString shellQuote(const QString &); + static QString stringQuote(const QString &); +}; + +%End diff --git a/sip/qtpe/qpemenubar.sip b/sip/qtpe/qpemenubar.sip new file mode 100644 index 0000000..4164843 --- /dev/null +++ b/sip/qtpe/qpemenubar.sip @@ -0,0 +1,42 @@ +// This is the SIP interface definition for QPEMenuBar. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (WS_QWS) + +class QPEMenuBar : QMenuBar +{ +%TypeHeaderCode +#include +%End + +public: + QPEMenuBar(QWidget * /TransferThis/ = 0,const char * = 0); + +protected: + virtual void keyPressEvent(QKeyEvent *); +}; + +%End diff --git a/sip/qtpe/qpemenubutton.sip b/sip/qtpe/qpemenubutton.sip new file mode 100644 index 0000000..ff3a729 --- /dev/null +++ b/sip/qtpe/qpemenubutton.sip @@ -0,0 +1,61 @@ +// This is the SIP interface definition for MenuButton. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (WS_QWS) + +class MenuButton : QPushButton +{ +%TypeHeaderCode +#include +%End + +public: + MenuButton(QWidget * /TransferThis/,const char * = 0); + MenuButton(const QStringList &,QWidget * /TransferThis/, + const char * = 0); + + void clear(); + + int currentItem() const; + QString currentText() const; + + void insertItems(const QStringList &); + void insertItem(const QIconSet &,const QString & = QString::null); + void insertItem(const QString &); + void insertSeparator(); + + void setLabel(const QString &); + +signals: + void selected(int); + void selected(const QString &); + +public slots: + void select(int); + void select(const QString &); +}; + +%End diff --git a/sip/qtpe/qpeqcopenvelope.sip b/sip/qtpe/qpeqcopenvelope.sip new file mode 100644 index 0000000..9bbff30 --- /dev/null +++ b/sip/qtpe/qpeqcopenvelope.sip @@ -0,0 +1,39 @@ +// This is the SIP interface definition for QCopEnvelope. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (WS_QWS) + +class QCopEnvelope : QDataStream +{ +%TypeHeaderCode +#include +%End + +public: + QCopEnvelope(const QCString &,const QCString &); +}; + +%End diff --git a/sip/qtpe/qpeqdawg.sip b/sip/qtpe/qpeqdawg.sip new file mode 100644 index 0000000..f04d642 --- /dev/null +++ b/sip/qtpe/qpeqdawg.sip @@ -0,0 +1,65 @@ +// This is the SIP interface definition for QDawg. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (WS_QWS) + +class QDawg +{ +%TypeHeaderCode +#include +%End + +public: + QDawg(); + + bool readFile(const QString &) /ReleaseGIL/; + bool read(QIODevice *) /ReleaseGIL/; + bool write(QIODevice *) const /ReleaseGIL/; + bool createFromWords(QIODevice *); + void createFromWords(const QStringList &); + QStringList allWords() const; + + bool contains(const QString &) const; + int countWords() const; + + class Node { + public: + QChar letter() const; + bool isWord() const; + bool isLast() const; + const QDawg::Node *next() const; + const QDawg::Node *jump() const; + + private: + Node(); + }; + + const QDawg::Node *root() const; + + void dump() const; +}; + +%End diff --git a/sip/qtpe/qperesource.sip b/sip/qtpe/qperesource.sip new file mode 100644 index 0000000..de094b0 --- /dev/null +++ b/sip/qtpe/qperesource.sip @@ -0,0 +1,50 @@ +// This is the SIP interface definition for Resource. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (WS_QWS) + +class Resource +{ +%TypeHeaderCode +#include +%End + +public: + Resource(); + + static QImage loadImage(const QString &); + + static QPixmap loadPixmap(const QString &); + static QBitmap loadBitmap(const QString &); + static QString findPixmap(const QString &); + + static QIconSet loadIconSet(const QString &); + + static QString findSound(const QString &); + static QStringList allSounds(); +}; + +%End diff --git a/sip/qtpe/qpetimestring.sip b/sip/qtpe/qpetimestring.sip new file mode 100644 index 0000000..4df6a4f --- /dev/null +++ b/sip/qtpe/qpetimestring.sip @@ -0,0 +1,71 @@ +// This is the SIP interface definition for DateFormat. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (WS_QWS) + +class DateFormat +{ +%TypeHeaderCode +#include +%End + +public: + enum Order { + DayMonthYear, + MonthDayYear, + YearMonthDay + }; + + DateFormat(QChar = '/',Order = MonthDayYear); + DateFormat(QChar,Order,Order); + DateFormat(const DateFormat &); + + enum Verbosity { + shortNumber, + longNumber, + padNumber, + shortWord, + longWord, + showWeekDay + }; + + QString toNumberString() const; + QString toWordString() const; + + QString numberDate(const QDate &,int = 0) const; + QString wordDate(const QDate &,int = 0) const; + +%If (Qt_DATASTREAM) + void load(QDataStream &); + void save(QDataStream &) const; +%End + + QChar separator() const; + Order shortOrder() const; + Order longOrder() const; +}; + +%End diff --git a/sip/qtpe/qpetoolbar.sip b/sip/qtpe/qpetoolbar.sip new file mode 100644 index 0000000..1d503ea --- /dev/null +++ b/sip/qtpe/qpetoolbar.sip @@ -0,0 +1,42 @@ +// This is the SIP interface definition for QPEToolBar. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +// The documentation is in the main documentation file because SIP isn't clever +// enough to handle the resulting %Timeline complexity. + + +%If (WS_QWS) + +class QPEToolBar : QToolBar +{ +%TypeHeaderCode +#include +%End + +public: + QPEToolBar(QMainWindow * /TransferThis/ = 0,const char * = 0); + +protected: + virtual void childEvent(QChildEvent *); +}; + +%End diff --git a/sip/qtpe/qtpemod.sip b/sip/qtpe/qtpemod.sip new file mode 100644 index 0000000..3194a03 --- /dev/null +++ b/sip/qtpe/qtpemod.sip @@ -0,0 +1,94 @@ +// This is the SIP interface definition for the qtpe module of PyQt. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Module qtpe 1 + +%Import qt/qtmod.sip + +%Include copying.sip + + +// QPE has it's own version numbering. +%Timeline {QtPE_1_5_0 QtPE_1_6_0} + + +%ModuleHeaderCode +#include +%End + +const char *QPE_VERSION; + + +%Include qpeapplication.sip +%Include qpeapplnk.sip +%Include qpeconfig.sip +%Include qpefilemanager.sip +%Include qpefileselector.sip +%Include qpefontdatabase.sip +%Include qpeglobal.sip +%Include qpemenubar.sip +%Include qpemenubutton.sip +%Include qpeqcopenvelope.sip +%Include qpeqdawg.sip +%Include qperesource.sip +%Include qpetimestring.sip +%Include qpetoolbar.sip + + +// The build file template. + +%Makefile qtpe.pro.in +# The project file for the qtpe module. +# +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +TEMPLATE = lib +TARGET = @BLX_TARGET_LIB@ +DESTDIR = @PYQT_MODDIR@ +CONFIG += @BLX_CONFIG_LIB@ @PYQT_WARN@ +INCLUDEPATH = @BLX_INCLUDEPATH@ +DEFINES = @BLX_DEFINES@ +LIBS += @PYQT_QT_MODULE@ @BLX_LIBS@ -lqpe +macx:QMAKE_LFLAGS += -framework Python + +SOURCES = $B + +HEADERS = $H +%End diff --git a/sip/qtsql/copying.sip b/sip/qtsql/copying.sip new file mode 100644 index 0000000..463904b --- /dev/null +++ b/sip/qtsql/copying.sip @@ -0,0 +1,51 @@ +// This is the SIP file defining the PyQt license. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Copying +Copyright (c) 2007 + Riverbank Computing Limited + +This file is part of PyQt. + +This copy of PyQt is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +PyQt is supplied 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 General Public License for more +details. + +You should have received a copy of the GNU General Public License along with +PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +%End + + +%OptionalInclude pyqt-internal.sip +%OptionalInclude pyqt-gpl.sip +%OptionalInclude pyqt-commercial.sip +%OptionalInclude pyqt-edu.sip +%OptionalInclude pyqt-eval.sip +%OptionalInclude pyqt-nc.sip +%OptionalInclude pyqt-tkc.sip diff --git a/sip/qtsql/qdatabrowser.sip b/sip/qtsql/qdatabrowser.sip new file mode 100644 index 0000000..ff2e4d8 --- /dev/null +++ b/sip/qtsql/qdatabrowser.sip @@ -0,0 +1,150 @@ +// This is the SIP interface definition for QDataBrowser. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QDataBrowser (Qt v3+) + + virtual void del + + + +This has been renamed delOnCursor in Python. + + +%End + + +%If (Qt_3_0_0 -) + +class QDataBrowser : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QDataBrowser(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); + + enum Boundary { + Unknown, + None, + BeforeBeginning, + Beginning, + End, + AfterEnd + }; + + Boundary boundary(); + void setBoundaryChecking(bool); + bool boundaryChecking() const; + + void setSort(const QSqlIndex &); + void setSort(const QStringList &); + QStringList sort() const; + void setFilter(const QString &); + QString filter() const; + + virtual void setSqlCursor(QSqlCursor * /GetWrapper/,bool = 0); +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipSelfWasArg ? sipCpp->QDataBrowser::setSqlCursor(a0, a1) : sipCpp->setSqlCursor(a0, a1); + Py_END_ALLOW_THREADS + + // Transfer ownership of the cursor if the autoDelete flag is + // set. + if (a0 && a1) + sipTransferTo(a0Wrapper,sipSelf); +%End + + QSqlCursor* sqlCursor() const; + virtual void setForm(QSqlForm *); + QSqlForm* form(); + + virtual void setConfirmEdits(bool); + virtual void setConfirmInsert(bool); + virtual void setConfirmUpdate(bool); + virtual void setConfirmDelete(bool); + virtual void setConfirmCancels(bool); + bool confirmEdits() const; + bool confirmInsert() const; + bool confirmUpdate() const; + bool confirmDelete() const; + bool confirmCancels() const; + + virtual void setReadOnly(bool); + bool isReadOnly() const; + virtual void setAutoEdit(bool); + bool autoEdit() const; + + virtual bool seek(int,bool = 0) /ReleaseGIL/; + +signals: + void firstRecordAvailable(bool); + void lastRecordAvailable(bool); + void nextRecordAvailable(bool); + void prevRecordAvailable(bool); + + void currentChanged(const QSqlRecord *); + void primeInsert(QSqlRecord *); + void primeUpdate(QSqlRecord *); + void primeDelete(QSqlRecord *); + void beforeInsert(QSqlRecord *); + void beforeUpdate(QSqlRecord *); + void beforeDelete(QSqlRecord *); + void cursorChanged(QSqlCursor::Mode); + +public slots: + virtual void refresh(); + + virtual void insert() /ReleaseGIL/; + virtual void update() /ReleaseGIL/; + virtual void del() /PyName=delOnCursor, ReleaseGIL/; + + virtual void first() /ReleaseGIL/; + virtual void last() /ReleaseGIL/; + virtual void next() /ReleaseGIL/; + virtual void prev() /ReleaseGIL/; + + virtual void readFields(); + virtual void writeFields(); + virtual void clearValues(); + + void updateBoundary(); + +protected: + virtual bool insertCurrent() /ReleaseGIL/; + virtual bool updateCurrent() /ReleaseGIL/; + virtual bool deleteCurrent() /ReleaseGIL/; + virtual bool currentEdited(); + + virtual QSql::Confirm confirmEdit(QSql::Op) /ReleaseGIL/; + virtual QSql::Confirm confirmCancel(QSql::Op) /ReleaseGIL/; + + virtual void handleError(const QSqlError &) /ReleaseGIL/; + +private: +%If (Qt_3_1_0 -) + QDataBrowser(const QDataBrowser &); +%End +}; + +%End diff --git a/sip/qtsql/qdatatable.sip b/sip/qtsql/qdatatable.sip new file mode 100644 index 0000000..bcb0290 --- /dev/null +++ b/sip/qtsql/qdatatable.sip @@ -0,0 +1,201 @@ +// This is the SIP interface definition for QDataTable. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QDataTable (Qt v3+) + +QDataTable is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QDataTable : QTable +{ +%TypeHeaderCode +#include +%End + +public: + QDataTable(QWidget* /TransferThis/ = 0,const char * = 0); + QDataTable(QSqlCursor *,bool = 0,QWidget * /TransferThis/ = 0, + const char * = 0); + + virtual void addColumn(const QString &,const QString & = QString::null, + int = -1,const QIconSet & = QIconSet()); + virtual void removeColumn(uint); + virtual void setColumn(uint,const QString &, + const QString & = QString::null,int = -1, + const QIconSet & = QIconSet()); + + QString nullText() const; + QString trueText() const; + QString falseText() const; + DateFormat dateFormat() const; + bool confirmEdits() const; + bool confirmInsert() const; + bool confirmUpdate() const; + bool confirmDelete() const; + bool confirmCancels() const; + bool autoDelete() const; + bool autoEdit() const; + QString filter() const; + QStringList sort() const; + + virtual void setSqlCursor(QSqlCursor * /GetWrapper/ = 0,bool = 0,bool = 0); +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipSelfWasArg ? sipCpp->QDataTable::setSqlCursor(a0, a1, a2) : sipCpp->setSqlCursor(a0, a1, a2); + Py_END_ALLOW_THREADS + + // Transfer ownership of the cursor if the autoDelete flag is + // set. + if (a0 && a2) + sipTransferTo(a0Wrapper,sipSelf); +%End + + QSqlCursor *sqlCursor() const; + + virtual void setNullText(const QString &); + virtual void setTrueText(const QString &); + virtual void setFalseText(const QString &); + virtual void setDateFormat(const DateFormat); + virtual void setConfirmEdits(bool); + virtual void setConfirmInsert(bool); + virtual void setConfirmUpdate(bool); + virtual void setConfirmDelete(bool); + virtual void setConfirmCancels(bool); + virtual void setAutoDelete(bool); + virtual void setAutoEdit(bool); + virtual void setFilter(const QString &); + virtual void setSort(const QStringList &); + virtual void setSort(const QSqlIndex &); + + enum Refresh { + RefreshData, + RefreshColumns, + RefreshAll + }; + + void refresh(Refresh); + void sortColumn(int,bool = 1,bool = 0); + QString text(int,int) const; + QVariant value(int,int) const; + QSqlRecord *currentRecord() const; + + void installEditorFactory(QSqlEditorFactory * /Transfer/); + void installPropertyMap(QSqlPropertyMap * /Transfer/); + + int numCols() const; + int numRows() const; + void setNumCols(int); + void setNumRows(int); + bool findBuffer(const QSqlIndex &,int = 0); + +%If (Qt_3_2_0 -) + void hideColumn(int); + void showColumn(int); +%End + +signals: + void currentChanged(QSqlRecord *); + void primeInsert(QSqlRecord *); + void primeUpdate(QSqlRecord *); + void primeDelete(QSqlRecord *); + void beforeInsert(QSqlRecord *); + void beforeUpdate(QSqlRecord *); + void beforeDelete(QSqlRecord *); + void cursorChanged(QSql::Op); + +public slots: + virtual void find(const QString &,bool,bool); + virtual void sortAscending(int); + virtual void sortDescending(int); + virtual void refresh(); + void setColumnWidth(int,int); +%If (Qt_3_0_5 -) + void adjustColumn(int); + void setColumnStretchable(int,bool); +%End +%If (Qt_3_1_0 -) + void swapColumns(int,int,bool = 0); +%End + +protected: + virtual bool insertCurrent(); + virtual bool updateCurrent(); + virtual bool deleteCurrent(); + + virtual QSql::Confirm confirmEdit(QSql::Op); + virtual QSql::Confirm confirmCancel(QSql::Op); + + virtual void handleError(const QSqlError &); + + virtual bool beginInsert(); + virtual QWidget *beginUpdate(int,int,bool); + + bool eventFilter(QObject *,QEvent *); +%If (Qt_3_2_0 -) + void keyPressEvent(QKeyEvent *); +%End + void resizeEvent(QResizeEvent *); + void contentsMousePressEvent(QMouseEvent *); + void contentsContextMenuEvent(QContextMenuEvent *); + void endEdit(int,int,bool,bool); + + // We don't specify /Factory/ for this because the returned QWidget + // will always have a parent which will own it. + QWidget *createEditor(int,int,bool) const; + + void activateNextCell(); + int indexOf(uint) const; + void reset(); + void setSize(QSqlCursor *); + void repaintCell(int,int); + void paintCell(QPainter *,int,int,const QRect &,bool, + const QColorGroup &); + virtual void paintField(QPainter *,const QSqlField *,const QRect &, + bool); +%If (Qt_3_1_0 -) + void drawContents(QPainter *,int,int,int,int); +%End + virtual int fieldAlignment(const QSqlField *); + void columnClicked(int); + void resizeData(int); + + QTableItem *item(int,int) const; + void setItem(int,int,QTableItem *); + void clearCell(int,int); + void setPixmap(int,int,const QPixmap &); + void takeItem(QTableItem *); + +private: + QWidget *beginEdit(int,int,bool); + +%If (Qt_3_1_0 -) + QDataTable(const QDataTable &); +%End +}; + +%End diff --git a/sip/qtsql/qdataview.sip b/sip/qtsql/qdataview.sip new file mode 100644 index 0000000..e6bb36e --- /dev/null +++ b/sip/qtsql/qdataview.sip @@ -0,0 +1,60 @@ +// This is the SIP interface definition for QDataView. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QDataView (Qt v3+) + +QDataView is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QDataView : QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QDataView(QWidget * /TransferThis/ = 0,const char * = 0,WFlags = 0); + + virtual void setForm(QSqlForm *); + QSqlForm *form(); + virtual void setRecord(QSqlRecord *); + QSqlRecord *record(); + +public slots: + virtual void refresh(QSqlRecord *); + virtual void readFields(); + virtual void writeFields(); + virtual void clearValues(); + +private: +%If (Qt_3_1_0 -) + QDataView(const QDataView &); +%End +}; + +%End diff --git a/sip/qtsql/qeditorfactory.sip b/sip/qtsql/qeditorfactory.sip new file mode 100644 index 0000000..49f932b --- /dev/null +++ b/sip/qtsql/qeditorfactory.sip @@ -0,0 +1,55 @@ +// This is the SIP interface definition for QEditorFactory. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QEditorFactory (Qt v3+) + +QEditorFactory is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QEditorFactory : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QEditorFactory(QObject * /TransferThis/ = 0,const char * = 0); + + virtual QWidget *createEditor(QWidget * /TransferThis/, + const QVariant &) /Factory/; + + static QEditorFactory *defaultFactory(); + static void installDefaultFactory(QEditorFactory * /Transfer/); + +private: +%If (Qt_3_1_0 -) + QEditorFactory(const QEditorFactory &); +%End +}; + +%End diff --git a/sip/qtsql/qsql.sip b/sip/qtsql/qsql.sip new file mode 100644 index 0000000..f2df075 --- /dev/null +++ b/sip/qtsql/qsql.sip @@ -0,0 +1,80 @@ +// This is the SIP interface definition for QSql. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSql (Qt v3+) + +QSql is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QSql +{ +%TypeHeaderCode +#include +%End + +public: + QSql(); + + enum Op { + None, + Insert, + Update, + Delete + }; + + enum Location { + BeforeFirst, + AfterLast + }; + + enum Confirm { + Cancel, + No, + Yes + }; + +%If (Qt_3_2_0 -) + enum ParameterType { + In, + Out, + InOut + }; + + enum TableType { + Tables, + SystemTables, + Views, + AllTables + }; +%End + +private: + QSql(const QSql &); +}; + +%End diff --git a/sip/qtsql/qsqlcursor.sip b/sip/qtsql/qsqlcursor.sip new file mode 100644 index 0000000..2e11c1b --- /dev/null +++ b/sip/qtsql/qsqlcursor.sip @@ -0,0 +1,148 @@ +// This is the SIP interface definition for QSqlCursor. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSqlCursor (Qt v3+) + + virtual int del + bool invalidate = TRUE + + +This has been renamed delRecords in Python. + + + + virtual int del + const QString &filter + bool invalidate = TRUE + + +This has been renamed delRecords in Python. + + + + bool exec + const QString &query + + +This has been renamed execQuery in Python. + + +%End + + +%If (Qt_3_0_0 -) + +class QSqlCursor : QSqlRecord, QSqlQuery +{ +%TypeHeaderCode +#include +%End + +public: + QSqlCursor(const QString & = QString::null,bool = 1,QSqlDatabase * = 0); + QSqlCursor(const QSqlCursor &); + + enum Mode { + ReadOnly, + Insert, + Update, + Delete, + Writable + }; + + QVariant value(int) const; + QVariant value(const QString &) const; +%If (Qt_3_1_0 -) + void setValue(int,const QVariant &); + void setValue(const QString &,const QVariant &); +%End + virtual QSqlIndex primaryIndex(bool = 1) const; + virtual QSqlIndex index(const QStringList &) const; + QSqlIndex index(const QString &) const; +// QSqlIndex index(const char *) const; + virtual void setPrimaryIndex(const QSqlIndex &); + + virtual void append(const QSqlFieldInfo &); + virtual void insert(int,const QSqlFieldInfo &); + void remove(int); + void clear(); + void setGenerated(const QString &,bool); + void setGenerated(int,bool); + + virtual QSqlRecord *editBuffer(bool = 0); + virtual QSqlRecord *primeInsert(); + virtual QSqlRecord *primeUpdate(); + virtual QSqlRecord *primeDelete(); + virtual int insert(bool = 1) /ReleaseGIL/; + virtual int update(bool = 1) /ReleaseGIL/; + virtual int del(bool = 1) /PyName=delRecords, ReleaseGIL/; + + virtual void setMode(int); + int mode() const; + virtual void setCalculated(const QString &,bool); + bool isCalculated(const QString &) const; + virtual void setTrimmed(const QString &,bool); + bool isTrimmed(const QString &) const; + + bool isReadOnly() const; + bool canInsert() const; + bool canUpdate() const; + bool canDelete() const; + + bool select() /ReleaseGIL/; + bool select(const QSqlIndex &) /ReleaseGIL/; + bool select(const QSqlIndex &,const QSqlIndex &) /ReleaseGIL/; + virtual bool select(const QString &,const QSqlIndex & = QSqlIndex()) /ReleaseGIL/; + + virtual void setSort(const QSqlIndex &); + QSqlIndex sort() const; + virtual void setFilter(const QString &); + QString filter() const; + virtual void setName(const QString &,bool = 1); + QString name() const; + QString toString(const QString & = QString::null, + const QString & = ",") const; + +%If (Qt_3_1_0 -) + bool isNull(int) const; + bool isNull(const QString &) const; +%End + +protected: + void afterSeek(); + bool exec(const QString &) /PyName=execQuery, ReleaseGIL/; + + virtual QVariant calculateField(const QString &); + virtual int update(const QString &,bool = 1); + virtual int del(const QString &,bool = 1) /PyName=delRecords, ReleaseGIL/; + + virtual QString toString(const QString &,QSqlField *, + const QString &) const; + virtual QString toString(QSqlRecord *,const QString &,const QString &, + const QString &) const; + virtual QString toString(const QSqlIndex &,QSqlRecord *, + const QString &,const QString &, + const QString &) const; +}; + +%End diff --git a/sip/qtsql/qsqldatabase.sip b/sip/qtsql/qsqldatabase.sip new file mode 100644 index 0000000..510499f --- /dev/null +++ b/sip/qtsql/qsqldatabase.sip @@ -0,0 +1,154 @@ +// This is the SIP interface definition for QSqlDatabase. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSqlDatabase (Qt v3+) + + QSqlQuery exec + const QString &query = QString::null + + +This has been renamed execStatement in Python. + + +%End + + +%If (Qt_3_0_0 -) + +class QSqlDatabase : QObject +{ +%TypeHeaderCode +#include +%End + +public: +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipWrapperType **type; + int yes, no; + } graph[] = { + {sipName_QSqlDriver, &sipClass_QSqlDriver, -1, 1}, + {sipName_QEditorFactory, &sipClass_QEditorFactory, 7, 2}, + {sipName_QSqlDatabase, &sipClass_QSqlDatabase, -1, 3}, + {sipName_QSqlForm, &sipClass_QSqlForm, -1, 4}, + {sipName_QDataView, &sipClass_QDataView, -1, 5}, + {sipName_QDataTable, &sipClass_QDataTable, -1, 6}, + {sipName_QDataBrowser, &sipClass_QDataBrowser, -1, -1}, + {sipName_QSqlEditorFactory, &sipClass_QSqlEditorFactory, -1, -1}, + }; + + int i = 0; + + sipClass = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipClass = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + + bool open() /ReleaseGIL/; + bool open(const QString &,const QString &) /ReleaseGIL/; + void close(); + bool isOpen() const; + bool isOpenError() const; + QStringList tables() const; +%If (Qt_3_2_0 -) + QStringList tables(QSql::TableType) const; +%End + QSqlIndex primaryIndex(const QString &) const; + QSqlRecord record(const QString &) const; + QSqlRecord record(const QSqlQuery &) const; + QSqlRecordInfo recordInfo(const QString &) const; + QSqlRecordInfo recordInfo(const QSqlQuery &) const; + QSqlQuery exec(const QString & = QString::null) const /PyName=execStatement, ReleaseGIL/; + QSqlError lastError() const; + + bool transaction(); + bool commit(); + bool rollback(); + + virtual void setDatabaseName(const QString &); + virtual void setUserName(const QString &); + virtual void setPassword(const QString &); + virtual void setHostName(const QString &); + virtual void setPort(int); +%If (Qt_3_2_0 -) + void setConnectOptions(const QString & = QString::null); +%End + QString databaseName() const; + QString userName() const; + QString password() const; + QString hostName() const; + QString driverName() const; + int port() const; +%If (Qt_3_2_0 -) + QString connectOptions() const; +%End + + QSqlDriver *driver() const; + + static QSqlDatabase *addDatabase(const QString &, + const QString & = QString(QSqlDatabase::defaultConnection)); +%If (Qt_3_2_0 -) + static QSqlDatabase *addDatabase(QSqlDriver *, + const QString & = QString(QSqlDatabase::defaultConnection)); +%End + static QSqlDatabase *database(const QString & = QString(QSqlDatabase::defaultConnection),bool = 1); + static void removeDatabase(const QString &); +%If (Qt_3_2_0 -) + static void removeDatabase(QSqlDatabase *); +%End + static bool contains(const QString & = QString(QSqlDatabase::defaultConnection)); + static QStringList drivers(); +// static void registerSqlDriver(const QString &, +// const QSqlDriverCreatorBase *); +%If (Qt_3_2_0 -) + static bool isDriverAvailable(const QString &); +%End + +protected: + QSqlDatabase(const QString &,const QString &, + QObject * /TransferThis/ = 0,const char * = 0); +%If (Qt_3_2_0 -) + QSqlDatabase(QSqlDriver *,QObject * /TransferThis/ = 0, + const char * = 0); +%End + +private: +%If (Qt_3_1_0 -) + QSqlDatabase(const QSqlDatabase &); +%End +}; + +%End diff --git a/sip/qtsql/qsqldriver.sip b/sip/qtsql/qsqldriver.sip new file mode 100644 index 0000000..3ebdaa9 --- /dev/null +++ b/sip/qtsql/qsqldriver.sip @@ -0,0 +1,93 @@ +// This is the SIP interface definition for QSqlDriver. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSqlDriver (Qt v3+) + +QSqlDriver is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QSqlDriver : QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum DriverFeature { + Transactions, + QuerySize, + BLOB, +%If (Qt_3_1_0 -) + Unicode, + PreparedQueries, + NamedPlaceholders, + PositionalPlaceholders +%End + }; + + QSqlDriver(QObject * /TransferThis/ = 0,const char * = 0); + + bool isOpen() const; + bool isOpenError() const; + + virtual bool beginTransaction(); + virtual bool commitTransaction(); + virtual bool rollbackTransaction(); + virtual QStringList tables(const QString &) const; + virtual QSqlIndex primaryIndex(const QString &) const; + virtual QSqlRecord record(const QString &) const; + virtual QSqlRecord record(const QSqlQuery &) const; + virtual QSqlRecordInfo recordInfo(const QString &) const; + virtual QSqlRecordInfo recordInfo(const QSqlQuery &) const; + virtual QString nullText() const; + virtual QString formatValue(const QSqlField *,bool = 0) const; + QSqlError lastError() const; + + virtual bool hasFeature(DriverFeature) const = 0; + virtual bool open(const QString &,const QString & = QString::null, + const QString & = QString::null, + const QString & = QString::null, + int = -1) = 0 /ReleaseGIL/; + virtual void close() = 0; + virtual QSqlQuery createQuery() const = 0; + +%If (Qt_3_2_0 -) + bool open(const QString &,const QString &,const QString &, + const QString &,int,const QString &) /ReleaseGIL/; +%End + +protected: + virtual void setOpen(bool); + virtual void setOpenError(bool); + virtual void setLastError(const QSqlError &); + +private: + QSqlDriver(const QSqlDriver &); +}; + +%End diff --git a/sip/qtsql/qsqleditorfactory.sip b/sip/qtsql/qsqleditorfactory.sip new file mode 100644 index 0000000..af93bd4 --- /dev/null +++ b/sip/qtsql/qsqleditorfactory.sip @@ -0,0 +1,57 @@ +// This is the SIP interface definition for QSqlEditorFactory. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSqlEditorFactory (Qt v3+) + +QSqlEditorFactory is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QSqlEditorFactory : QEditorFactory +{ +%TypeHeaderCode +#include +%End + +public: + QSqlEditorFactory(QObject * /TransferThis/ = 0,const char * = 0); + + virtual QWidget *createEditor(QWidget * /TransferThis/, + const QVariant &) /Factory/; + virtual QWidget *createEditor(QWidget * /TransferThis/, + const QSqlField *) /Factory/; + + static QSqlEditorFactory *defaultFactory(); + static void installDefaultFactory(QSqlEditorFactory * /Transfer/); + +private: +%If (Qt_3_1_0 -) + QSqlEditorFactory(const QSqlEditorFactory &); +%End +}; + +%End diff --git a/sip/qtsql/qsqlerror.sip b/sip/qtsql/qsqlerror.sip new file mode 100644 index 0000000..17f9504 --- /dev/null +++ b/sip/qtsql/qsqlerror.sip @@ -0,0 +1,68 @@ +// This is the SIP interface definition for QSqlError. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSqlError (Qt v3+) + +QSqlError is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QSqlError +{ +%TypeHeaderCode +#include +%End + +public: + enum Type { + None, + Connection, + Statement, + Transaction, + Unknown + }; + + QSqlError(const QString & = QString::null, + const QString & = QString::null,int = QSqlError::None, + int = -1); + QSqlError(const QSqlError &); + + QString driverText() const; + virtual void setDriverText(const QString &); + QString databaseText() const; + virtual void setDatabaseText(const QString &); + int type() const; + virtual void setType(int); + int number() const; + virtual void setNumber(int); +%If (Qt_3_2_0 -) + QString text() const; + void showMessage(const QString & = QString::null) const; +%End +}; + +%End diff --git a/sip/qtsql/qsqlfield.sip b/sip/qtsql/qsqlfield.sip new file mode 100644 index 0000000..39dc046 --- /dev/null +++ b/sip/qtsql/qsqlfield.sip @@ -0,0 +1,95 @@ +// This is the SIP interface definition for QSqlField and QSqlFieldInfo. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSqlField (Qt v3+) + +QSqlField is fully implemented. + + + +QSqlFieldInfo (Qt v3+) + +QSqlFieldInfo is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QSqlField +{ +%TypeHeaderCode +#include +%End + +public: + QSqlField(const QString & = QString::null, + QVariant::Type = QVariant::Invalid ); + QSqlField(const QSqlField &); + + virtual void setValue(const QVariant &); + virtual QVariant value() const; + virtual void setName(const QString &); + QString name() const; + virtual void setNull(); + bool isNull() const; + virtual void setReadOnly(bool); + bool isReadOnly() const; + void clear(bool = 1); + QVariant::Type type() const; +}; + + +class QSqlFieldInfo +{ +%TypeHeaderCode +#include +%End + +public: + QSqlFieldInfo(const QString & = QString::null, + QVariant::Type = QVariant::Invalid,int = -1,int = -1, + int = -1,const QVariant & = QVariant(),int = 0,bool = 1, + bool = 0,bool = 0); + QSqlFieldInfo(const QSqlFieldInfo &); + QSqlFieldInfo(const QSqlField &,bool = 1); + + QSqlField toField() const; + int isRequired() const; + QVariant::Type type() const; + int length() const; + int precision() const; + QVariant defaultValue() const; + QString name() const; + int typeID() const; + bool isGenerated() const; + bool isTrim() const; + bool isCalculated() const; + + virtual void setTrim(bool); + virtual void setGenerated(bool); + virtual void setCalculated(bool); +}; + +%End diff --git a/sip/qtsql/qsqlform.sip b/sip/qtsql/qsqlform.sip new file mode 100644 index 0000000..84e05b7 --- /dev/null +++ b/sip/qtsql/qsqlform.sip @@ -0,0 +1,74 @@ +// This is the SIP interface definition for QSqlForm. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSqlForm (Qt v3+) + +QSqlForm is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QSqlForm : QObject +{ +%TypeHeaderCode +#include +%End + +public: + QSqlForm(QObject * /TransferThis/ = 0,const char * = 0); + + virtual void insert(QWidget *,const QString &); + virtual void remove(const QString &); + uint count() const; + + QWidget *widget(uint) const; + QSqlField *widgetToField(QWidget *) const; + QWidget *fieldToWidget(QSqlField *) const; + + void installPropertyMap(QSqlPropertyMap * /Transfer/); + + virtual void setRecord(QSqlRecord *); + +public slots: + virtual void readField(QWidget *); + virtual void writeField(QWidget *); + virtual void readFields(); + virtual void writeFields(); + + virtual void clear(); + virtual void clearValues(bool = 0); + +protected: + virtual void insert(QWidget *,QSqlField *); + virtual void remove(QWidget *); + +private: +%If (Qt_3_1_0 -) + QSqlForm(const QSqlForm &); +%End +}; + +%End diff --git a/sip/qtsql/qsqlindex.sip b/sip/qtsql/qsqlindex.sip new file mode 100644 index 0000000..af88129 --- /dev/null +++ b/sip/qtsql/qsqlindex.sip @@ -0,0 +1,64 @@ +// This is the SIP interface definition for QSqlIndex. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSqlIndex (Qt v3+) + +QSqlIndex is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QSqlIndex : QSqlRecord +{ +%TypeHeaderCode +#include +%End + +public: + QSqlIndex(const QString & = QString::null, + const QString & = QString::null); + QSqlIndex(const QSqlIndex &); + + virtual void setCursorName(const QString &); + QString cursorName() const; + virtual void setName(const QString &); + QString name() const; + + void append(const QSqlField &); + virtual void append(const QSqlField &,bool); + + bool isDescending(int) const; + virtual void setDescending(int,bool); + + QString toString(const QString & = QString::null,const QString & = ",", + bool = 1) const; + QStringList toStringList(const QString & = QString::null, + bool = 1) const; + + static QSqlIndex fromStringList(const QStringList &,const QSqlCursor *); +}; + +%End diff --git a/sip/qtsql/qsqlpropertymap.sip b/sip/qtsql/qsqlpropertymap.sip new file mode 100644 index 0000000..c2f8ae8 --- /dev/null +++ b/sip/qtsql/qsqlpropertymap.sip @@ -0,0 +1,63 @@ +// This is the SIP interface definition for QSqlPropertyMap. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSqlPropertyMap (Qt v3+) + +QSqlPropertyMap is fully implemented. However, because PyQt +does not allow new properties to be defined, it is not possible to implement +custom editor widgets in Python and add them to a property map. These will +simply be ignored. + + + +This problem may be addressed in a future release of PyQt. + + +%End + + +%If (Qt_3_0_0 -) + +class QSqlPropertyMap +{ +%TypeHeaderCode +#include +%End + +public: + QSqlPropertyMap(); + + QVariant property(QWidget *); + virtual void setProperty(QWidget *,const QVariant &); + + void insert(const QString &,const QString &); + void remove(const QString &); + + static QSqlPropertyMap *defaultMap(); + static void installDefaultMap(QSqlPropertyMap * /Transfer/); + +private: + QSqlPropertyMap(const QSqlPropertyMap &); +}; + +%End diff --git a/sip/qtsql/qsqlquery.sip b/sip/qtsql/qsqlquery.sip new file mode 100644 index 0000000..a7284f1 --- /dev/null +++ b/sip/qtsql/qsqlquery.sip @@ -0,0 +1,115 @@ +// This is the SIP interface definition for QSqlQuery. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSqlQuery (Qt v3+) + + QMap<QString,QVariant> boundValues const + + + +Not yet implemented. (Qt v3.2.0+) + + + + virtual bool exec + const QString &query + + +This has been renamed execQuery in Python. + + + + bool exec + + + +This has been renamed execQuery in Python. (Qt v3.1+) + + +%End + + +%If (Qt_3_0_0 -) + +class QSqlQuery +{ +%TypeHeaderCode +#include +%End + +public: + QSqlQuery(QSqlResult *); + QSqlQuery(const QString & = QString::null,QSqlDatabase * = 0); +%If (Qt_3_2_0 -) + QSqlQuery(QSqlDatabase *); +%End + QSqlQuery(const QSqlQuery &); + + bool isValid() const; + bool isActive() const; + bool isNull(int) const; + int at() const; + QString lastQuery() const; + int numRowsAffected() const; + QSqlError lastError() const; + bool isSelect() const; + int size() const; + const QSqlDriver *driver() const; + const QSqlResult *result() const; +%If (Qt_3_1_0 -) + bool isForwardOnly() const; + void setForwardOnly(bool); +%End + + virtual bool exec(const QString &) /PyName=execQuery, ReleaseGIL/; + virtual QVariant value(int) const; + + virtual bool seek(int,bool = 0) /ReleaseGIL/; + virtual bool next() /ReleaseGIL/; + virtual bool prev() /ReleaseGIL/; + virtual bool first() /ReleaseGIL/; + virtual bool last() /ReleaseGIL/; + +%If (Qt_3_1_0 -) + bool exec() /PyName=execQuery, ReleaseGIL/; + bool prepare(const QString &); + void bindValue(const QString &,const QVariant &); + void bindValue(int,const QVariant &); + void addBindValue(const QVariant &); +%End +%If (Qt_3_2_0 -) + void bindValue(const QString &,const QVariant &,QSql::ParameterType); + void bindValue(int,const QVariant &,QSql::ParameterType); + void addBindValue(const QVariant &,QSql::ParameterType); + QVariant boundValue(const QString &) const; + QVariant boundValue(int) const; +// QMap boundValues() const; + QString executedQuery() const; +%End + +protected: + virtual void beforeSeek(); + virtual void afterSeek(); +}; + +%End diff --git a/sip/qtsql/qsqlrecord.sip b/sip/qtsql/qsqlrecord.sip new file mode 100644 index 0000000..5676bcc --- /dev/null +++ b/sip/qtsql/qsqlrecord.sip @@ -0,0 +1,177 @@ +// This is the SIP interface definition for QSqlRecord and QSqlRecordInfo. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSqlRecord (Qt v3+) + +QSqlRecord is fully implemented. + + + +QSqlRecordInfo (Qt v3+) + +QSqlRecordInfo is implemented as a Python list of +QSqlFieldInfo instances. + + +%End + + +%If (Qt_3_0_0 -) + +class QSqlRecord +{ +%TypeHeaderCode +#include +%End + +public: + QSqlRecord(); + QSqlRecord(const QSqlRecord &); + + virtual QVariant value(int) const; + virtual QVariant value(const QString &) const; + virtual void setValue(int,const QVariant &); + virtual void setValue(const QString &,const QVariant &); + bool isGenerated(int) const; + bool isGenerated(const QString &) const; + virtual void setGenerated(const QString &,bool); + virtual void setGenerated(int,bool); + virtual void setNull(int); + virtual void setNull(const QString &); + bool isNull(int); + bool isNull(const QString &); +%If (Qt_3_1_0 -) +// bool isNull(int) const; +// bool isNull(const QString &) const; +%End + + int position(const QString &) const; + QString fieldName(int) const; + QSqlField *field(int); + QSqlField *field(const QString &); +// const QSqlField *field(int) const; +// const QSqlField *field(const QString &) const; + + virtual void append(const QSqlField &); + virtual void insert(int,const QSqlField &); + virtual void remove(int); + + bool isEmpty() const; + bool contains(const QString &) const; + virtual void clear(); + virtual void clearValues(bool = 0); + uint count() const; + virtual QString toString(const QString & = QString::null, + const QString & = ",") const; + virtual QStringList toStringList(const QString & = QString::null) const; +}; + + +%MappedType QSqlRecordInfo +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + // Convert to a Python list of QSqlFieldInfo instances. + + int i; + PyObject *l; + + // Create the list. + + if ((l = PyList_New(sipCpp -> count())) == NULL) + return NULL; + + // Get it. + + i = 0; + QValueListConstIterator it; + + for (it = sipCpp -> begin(); it != sipCpp -> end(); ++it) + { + PyObject *tmobj; + + if ((tmobj = sipConvertFromNewInstance(new QSqlFieldInfo(*it),sipClass_QSqlFieldInfo,sipTransferObj)) == NULL || PyList_SetItem(l,i,tmobj) < 0) + { + Py_XDECREF(tmobj); + Py_DECREF(l); + + return NULL; + } + + ++i; + } + + return l; +%End + + +%ConvertToTypeCode + // Convert a Python list of QSqlFieldInfo instances to a QSqlRecordInfo + // on the heap. + + if (sipIsErr == NULL) + { + if (!PyList_Check(sipPy)) + return 0; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + if (!sipCanConvertToInstance(PyList_GET_ITEM(sipPy,i),sipClass_QSqlFieldInfo,SIP_NOT_NONE)) + return 0; + + return 1; + } + + QSqlRecordInfo *qri = new QSqlRecordInfo; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + { + int iserr = 0, state; + + // We apply the transfer to the list itself, not the elements. + QSqlFieldInfo *itm = reinterpret_cast(sipConvertToInstance(PyList_GET_ITEM(sipPy,i),sipClass_QSqlFieldInfo,0,SIP_NOT_NONE,&state,&iserr)); + + if (iserr) + { + sipReleaseInstance(itm,sipClass_QSqlFieldInfo,state); + + *sipIsErr = 1; + delete qri; + + return 0; + } + + qri -> append(*itm); + + sipReleaseInstance(itm,sipClass_QSqlFieldInfo,state); + } + + *sipCppPtr = qri; + + return sipGetState(sipTransferObj); +%End +}; + +%End diff --git a/sip/qtsql/qsqlresult.sip b/sip/qtsql/qsqlresult.sip new file mode 100644 index 0000000..f4fc7f6 --- /dev/null +++ b/sip/qtsql/qsqlresult.sip @@ -0,0 +1,73 @@ +// This is the SIP interface definition for QSqlResult. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSqlResult (Qt v3+) + +QSqlResult is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QSqlResult +{ +%TypeHeaderCode +#include +%End + +protected: + QSqlResult(const QSqlDriver *); + + int at() const; + QString lastQuery() const; + QSqlError lastError() const; + bool isValid() const; + bool isActive() const; + bool isSelect() const; + bool isForwardOnly() const; + const QSqlDriver *driver() const; + virtual void setAt(int); + virtual void setActive(bool); + virtual void setLastError(const QSqlError &); + virtual void setQuery(const QString &); + virtual void setSelect(bool); + virtual void setForwardOnly(bool); + + virtual QVariant data(int) = 0; + virtual bool isNull(int) = 0; + virtual bool reset(const QString &) = 0; + virtual bool fetch(int) = 0; + virtual bool fetchNext(); + virtual bool fetchPrev(); + virtual bool fetchFirst() = 0; + virtual bool fetchLast() = 0; + virtual int size() = 0; + virtual int numRowsAffected() = 0; + +private: + QSqlResult(const QSqlResult &); +}; + +%End diff --git a/sip/qtsql/qsqlselectcursor.sip b/sip/qtsql/qsqlselectcursor.sip new file mode 100644 index 0000000..289cc42 --- /dev/null +++ b/sip/qtsql/qsqlselectcursor.sip @@ -0,0 +1,92 @@ +// This is the SIP interface definition for QSqlSelectCursor. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QSqlSelectCursor (Qt v3.2.0+) + + int del + bool invalidate = TRUE + + +This has been renamed delRecords in Python. + + + + bool exec + const QString &query + + +This has been renamed execQuery in Python. + + +%End + + +%If (Qt_3_2_0 -) + +class QSqlSelectCursor : QSqlCursor +{ +%TypeHeaderCode +#include +%End + +public: + QSqlSelectCursor(const QString & = QString::null,QSqlDatabase * = 0); + QSqlSelectCursor(const QSqlSelectCursor &); + ~QSqlSelectCursor(); + + bool exec(const QString &) /PyName=execQuery, ReleaseGIL/; + bool select() /ReleaseGIL/; + +protected: + QSqlIndex primaryIndex(bool = 1) const; + QSqlIndex index(const QStringList &) const; + QSqlIndex index(const QString &) const; +// QSqlIndex index(const char *) const; + void setPrimaryIndex(const QSqlIndex &); + void append(const QSqlFieldInfo &); + void insert(int,const QSqlFieldInfo &); + void remove(int); + void clear(); + void setGenerated(const QString &,bool); + void setGenerated(int,bool); + QSqlRecord *editBuffer(bool = 0); + QSqlRecord *primeInsert(); + QSqlRecord *primeUpdate(); + QSqlRecord *primeDelete(); + int insert(bool = 1) /ReleaseGIL/; + int update(bool = 1) /ReleaseGIL/; + int del(bool = 1) /PyName=delRecords, ReleaseGIL/; + void setMode(int); + + void setSort(const QSqlIndex &); + QSqlIndex sort() const; + void setFilter(const QString &); + QString filter() const; + void setName(const QString &,bool = 1); + QString name() const; + QString toString(const QString & = QString::null, + const QString & = ",") const; + bool select(const QString &,const QSqlIndex & = QSqlIndex()) /ReleaseGIL/; +}; + +%End diff --git a/sip/qtsql/qtsqlmod.sip b/sip/qtsql/qtsqlmod.sip new file mode 100644 index 0000000..f780a9a --- /dev/null +++ b/sip/qtsql/qtsqlmod.sip @@ -0,0 +1,88 @@ +// This is the SIP interface definition for the qtsql module of PyQt. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Module qtsql 1 + +%Import qt/qtmod.sip +%Import qttable/qttablemod.sip + +%Include copying.sip + + +%Include qdatabrowser.sip +%Include qdatatable.sip +%Include qdataview.sip +%Include qeditorfactory.sip +%Include qsql.sip +%Include qsqlcursor.sip +%Include qsqldatabase.sip +%Include qsqldriver.sip +%Include qsqleditorfactory.sip +%Include qsqlerror.sip +%Include qsqlfield.sip +%Include qsqlform.sip +%Include qsqlindex.sip +%Include qsqlpropertymap.sip +%Include qsqlquery.sip +%Include qsqlrecord.sip +%Include qsqlresult.sip +%Include qsqlselectcursor.sip + + +// The build file template. + +%Makefile qtsql.pro.in +# The project file for the qtsql module. +# +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +TEMPLATE = lib +TARGET = @BLX_TARGET_LIB@ +DESTDIR = @PYQT_MODDIR@ +CONFIG += @BLX_CONFIG_LIB@ @PYQT_WARN@ +INCLUDEPATH = @BLX_INCLUDEPATH@ +DEFINES = @BLX_DEFINES@ +LIBS += @PYQT_QTTABLE_MODULE@ @BLX_LIBS@ +macx:QMAKE_LFLAGS += -framework Python + +SOURCES = $B + +HEADERS = $H +%End diff --git a/sip/qttable/copying.sip b/sip/qttable/copying.sip new file mode 100644 index 0000000..463904b --- /dev/null +++ b/sip/qttable/copying.sip @@ -0,0 +1,51 @@ +// This is the SIP file defining the PyQt license. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Copying +Copyright (c) 2007 + Riverbank Computing Limited + +This file is part of PyQt. + +This copy of PyQt is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +PyQt is supplied 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 General Public License for more +details. + +You should have received a copy of the GNU General Public License along with +PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +%End + + +%OptionalInclude pyqt-internal.sip +%OptionalInclude pyqt-gpl.sip +%OptionalInclude pyqt-commercial.sip +%OptionalInclude pyqt-edu.sip +%OptionalInclude pyqt-eval.sip +%OptionalInclude pyqt-nc.sip +%OptionalInclude pyqt-tkc.sip diff --git a/sip/qttable/qtable.sip b/sip/qttable/qtable.sip new file mode 100644 index 0000000..87a0be3 --- /dev/null +++ b/sip/qttable/qtable.sip @@ -0,0 +1,532 @@ +// This is the SIP interface definition for QTable, QTableItem, +// QCheckTableItem, QComboTableItem and QTableSelection. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QTable (Qt v2.2+) + +QTable is fully implemented. + + + +QTableItem (Qt v2.2+) + +QTableItem is fully implemented. + + + +QCheckTableItem (Qt v3+) + +QCheckTableItem is fully implemented. + + + +QComboTableItem (Qt v3+) + +QComboTableItem is fully implemented. + + + +QTableSelection (Qt v2.2+) + +QTableSelection is fully implemented. + + +%End + + +%If (Qt_TABLE) +%If (Qt_2_2_0 -) + +class QTableSelection +{ +%TypeHeaderCode +#include +%End + +public: + QTableSelection(); +%If (Qt_3_1_0 -) + QTableSelection(int,int,int,int); +%End + + void init(int,int); + void expandTo(int,int); + + int topRow() const; + int bottomRow() const; + int leftCol() const; + int rightCol() const; + int anchorRow() const; + int anchorCol() const; +%If (Qt_3_2_0 -) + int numRows() const; + int numCols() const; +%End + + bool isActive() const; +%If (Qt_3_2_0 -) + bool isEmpty() const; +%End +}; + + +class QTableItem : Qt +{ +%TypeHeaderCode +#include +%End + +public: + enum EditType { + Never, + OnTyping, + WhenCurrent, + Always + }; + + // Note that the Qt documentation is wrong. Ownership is only taken by + // QTable::setItem(). +%If (Qt_3_2_0 -) + QTableItem(QTable *,EditType); +%End + QTableItem(QTable *,EditType,const QString &); + QTableItem(QTable *,EditType,const QString &,const QPixmap &); + +%ConvertToSubClassCode + Py_BEGIN_ALLOW_THREADS + +#if QT_VERSION >= 0x030000 + int rtti = sipCpp -> rtti(); + + if (rtti == QCheckTableItem::RTTI) + sipClass = sipClass_QCheckTableItem; + else if (rtti == QComboTableItem::RTTI) + sipClass = sipClass_QComboTableItem; + else + sipClass = 0; +#else + sipClass = 0; +#endif + + Py_END_ALLOW_THREADS +%End + + virtual QPixmap pixmap() const; + virtual QString text() const; + virtual void setPixmap(const QPixmap &); + virtual void setText(const QString &); + QTable *table() const; + + virtual int alignment() const; + virtual void setWordWrap(bool); + bool wordWrap() const; + + EditType editType() const; + virtual QWidget *createEditor() const /Factory/; + virtual void setContentFromEditor(QWidget *); + virtual void setReplaceable(bool); + bool isReplaceable() const; + + virtual QString key() const; + virtual QSize sizeHint() const; + + virtual void setSpan(int,int); + int rowSpan() const; + int colSpan() const; + + virtual void setRow(int); + virtual void setCol(int); + int row() const; + int col() const; + + virtual void paint(QPainter *,const QColorGroup &,const QRect &,bool); + + void updateEditor(int,int); + +%If (Qt_3_0_0 -) + virtual void setEnabled(bool); + bool isEnabled() const; + + virtual int rtti() const; +%End + +protected: +%If (Qt_3_2_0 - Qt_3_3_0) + QString content() const; +%End +}; + + +%If (Qt_3_0_0 -) + +class QComboTableItem : QTableItem +{ +%TypeHeaderCode +#include +%End + +public: + // Note that the Qt documentation is wrong. Ownership is only taken by + // QTable::setItem(). + QComboTableItem(QTable *,const QStringList &,bool = 0); + + virtual QWidget *createEditor() const /Factory/; + virtual void setContentFromEditor(QWidget *); + virtual void paint(QPainter *,const QColorGroup &,const QRect &,bool); + virtual void setCurrentItem(int); + virtual void setCurrentItem(const QString &); + int currentItem() const; + QString currentText() const; + int count() const; + QString text(int) const; + virtual void setEditable(bool); + bool isEditable() const; + virtual void setStringList(const QStringList &); + + int rtti() const; + +%If (Qt_3_0_6 -) + QSize sizeHint() const; +%End +}; + +%End + + +%If (Qt_3_0_0 -) + +class QCheckTableItem : QTableItem +{ +%TypeHeaderCode +#include +%End + +public: + // Note that the Qt documentation is wrong. Ownership is only taken by + // QTable::setItem(). + QCheckTableItem(QTable *,const QString &); + +%If (Qt_3_2_0 -) + void setText(const QString &); +%End + virtual QWidget *createEditor() const /Factory/; + virtual void setContentFromEditor(QWidget *); + virtual void paint(QPainter *,const QColorGroup &,const QRect &,bool); + virtual void setChecked(bool); + bool isChecked() const; + + int rtti() const; + +%If (Qt_3_0_6 -) + QSize sizeHint() const; +%End +}; + +%End + + +class QTable : QScrollView +{ +%TypeHeaderCode +#include +%End + +public: + QTable(QWidget * /TransferThis/ = 0,const char * = 0); + QTable(int,int,QWidget * /TransferThis/ = 0,const char * = 0); + +%ConvertToSubClassCode + sipClass = (sipCpp->inherits(sipName_QTable) ? sipClass_QTable : NULL); +%End + + QHeader *horizontalHeader() const; + QHeader *verticalHeader() const; + +%If (- Qt_3_0_0) + enum SelectionMode { + Single, + Multi, + NoSelection + }; +%End +%If (Qt_3_0_0 -) + enum SelectionMode { + Single, + Multi, + SingleRow, + MultiRow, + NoSelection + }; +%End + + virtual void setSelectionMode(SelectionMode); + SelectionMode selectionMode() const; + + virtual void setItem(int,int,QTableItem * /Transfer/); + virtual void setText(int,int,const QString &); + virtual void setPixmap(int,int,const QPixmap &); + virtual QTableItem *item(int,int) const; + virtual QString text(int,int) const; + virtual QPixmap pixmap(int,int) const; + virtual void clearCell(int,int); + + virtual QRect cellGeometry(int,int) const; + virtual int columnWidth(int) const; + virtual int rowHeight(int) const; + virtual int columnPos(int) const; + virtual int rowPos(int) const; + virtual int columnAt(int) const; + virtual int rowAt(int) const; + +%If (- Qt_3_0_0) + int numRows() const; + int numCols() const; +%End +%If (Qt_3_0_0 -) + virtual int numRows() const; + virtual int numCols() const; +%End + + void updateCell(int,int); + + bool eventFilter(QObject *,QEvent *); + + int currentRow() const; + int currentColumn() const; + void ensureCellVisible(int,int); + + bool isSelected(int,int) const; + bool isRowSelected(int,bool = 0) const; + bool isColumnSelected(int,bool = 0) const; + int numSelections() const; + QTableSelection selection(int) const; + virtual int addSelection(const QTableSelection &); + virtual void removeSelection(const QTableSelection &); + virtual void removeSelection(int); + virtual int currentSelection() const; + +%If (Qt_3_1_0 -) + void selectCells(int,int,int,int); + void selectRow(int); + void selectColumn(int); +%End + + bool showGrid() const; + + bool columnMovingEnabled() const; + bool rowMovingEnabled() const; + + virtual void sortColumn(int,bool = 1,bool = 0); + + bool sorting() const; + + virtual void takeItem(QTableItem * /TransferBack/); + + virtual void setCellWidget(int,int,QWidget * /Transfer/); + virtual QWidget *cellWidget(int,int) const; + virtual void clearCellWidget(int,int); + +%If (Qt_3_0_0 -) + virtual QRect cellRect(int,int) const; +%End + + virtual void paintCell(QPainter *,int,int,const QRect &,bool); +%If (Qt_3_0_0 -) + virtual void paintCell(QPainter *,int,int,const QRect &,bool, + const QColorGroup &); +%End + virtual void paintFocus(QPainter *,const QRect &); + QSize sizeHint() const; + +%If (Qt_3_0_0 -) + bool isReadOnly() const; + bool isRowReadOnly(int) const; + bool isColumnReadOnly(int) const; + + void setEnabled(bool); + + void repaintSelections(); + + enum FocusStyle { + FollowStyle, + SpreadSheet + }; + + virtual void setFocusStyle(FocusStyle); + FocusStyle focusStyle() const; +%End + +%If (Qt_3_1_0 -) + void updateHeaderStates(); +%End + +public slots: + virtual void setNumRows(int); + virtual void setNumCols(int); + virtual void setShowGrid(bool); + virtual void hideRow(int); + virtual void hideColumn(int); + virtual void showRow(int); + virtual void showColumn(int); +%If (Qt_3_3_0 -) + bool isRowHidden(int) const; + bool isColumnHidden(int) const; +%End + + virtual void setColumnWidth(int,int); + virtual void setRowHeight(int,int); + + virtual void adjustColumn(int); + virtual void adjustRow(int); + + virtual void setColumnStretchable(int,bool); + virtual void setRowStretchable(int,bool); + bool isColumnStretchable(int) const; + bool isRowStretchable(int) const; + virtual void setSorting(bool); +%If (- Qt_3_0_0) + virtual void swapRows(int,int); + virtual void swapColumns(int,int); +%End +%If (Qt_3_0_0 -) + virtual void swapRows(int,int,bool = 0); + virtual void swapColumns(int,int,bool = 0); +%End + virtual void swapCells(int,int,int,int); + + virtual void setLeftMargin(int); + virtual void setTopMargin(int); + virtual void setCurrentCell(int,int); + void clearSelection(bool = 1); + virtual void setColumnMovingEnabled(bool); + virtual void setRowMovingEnabled(bool); + +%If (Qt_3_0_0 -) + virtual void setReadOnly(bool); + virtual void setRowReadOnly(int,bool); + virtual void setColumnReadOnly(int,bool); + + virtual void setDragEnabled(bool); + bool dragEnabled() const; + + virtual void insertRows(int,int = 1); + virtual void insertColumns(int,int = 1); + virtual void removeRow(int); + virtual void removeRows(const QMemArray &); + virtual void removeColumn(int); + virtual void removeColumns(const QMemArray &); + + virtual void editCell(int,int,bool = 0); +%End + +%If (Qt_3_1_0 -) + void setRowLabels(const QStringList &); + void setColumnLabels(const QStringList &); +%End + +protected: +%If (Qt_3_0_0 -) + enum EditMode { + NotEditing, + Editing, + Replacing + }; +%End + + void drawContents(QPainter *,int,int,int,int); + void contentsMousePressEvent(QMouseEvent *); + void contentsMouseMoveEvent(QMouseEvent *); + void contentsMouseDoubleClickEvent(QMouseEvent *); + void contentsMouseReleaseEvent(QMouseEvent *); +%If (Qt_3_0_0 -) + void contentsContextMenuEvent(QContextMenuEvent *); +%End + void keyPressEvent(QKeyEvent *); + void focusInEvent(QFocusEvent *); + void focusOutEvent(QFocusEvent *); +%If (- Qt_3_0_0) + void resizeEvent(QResizeEvent *); +%End +%If (Qt_3_0_0 -) + void viewportResizeEvent(QResizeEvent *); +%End + void showEvent(QShowEvent *); +%If (Qt_3_1_0 -) + void paintEvent(QPaintEvent *); +%End +%If (Qt_3_0_0 -) + void setEditMode(EditMode,int,int); + virtual void contentsDragEnterEvent(QDragEnterEvent *); + virtual void contentsDragMoveEvent(QDragMoveEvent *); + virtual void contentsDragLeaveEvent(QDragLeaveEvent *); + virtual void contentsDropEvent(QDropEvent *); + virtual QDragObject *dragObject(); + virtual void startDrag(); +%End + + virtual void paintEmptyArea(QPainter *,int,int,int,int); + virtual void activateNextCell(); + virtual QWidget *createEditor(int,int,bool) const /Factory/; + virtual void setCellContentFromEditor(int,int); + virtual QWidget *beginEdit(int,int,bool); + virtual void endEdit(int,int,bool,bool); + + virtual void resizeData(int); + virtual void insertWidget(int,int,QWidget *); + int indexOf(int,int) const; + +%If (Qt_3_0_0 -) + void windowActivationChange(bool); + bool isEditing() const; + EditMode editMode() const; + int currEditRow() const; + int currEditCol() const; +%End + +protected slots: + virtual void columnWidthChanged(int); + virtual void rowHeightChanged(int); + virtual void columnIndexChanged(int,int,int); + virtual void rowIndexChanged(int,int,int); + virtual void columnClicked(int); + +signals: + void currentChanged(int,int); + void clicked(int,int,int,const QPoint &); + void doubleClicked(int,int,int,const QPoint &); + void pressed(int,int,int,const QPoint &); + void selectionChanged(); + void valueChanged(int,int); +%If (Qt_3_0_0 -) + void contextMenuRequested(int,int,const QPoint &); + void dropped(QDropEvent *); +%End + +private: +%If (Qt_3_1_0 -) + QTable(const QTable &); +%End +}; + +%End +%End diff --git a/sip/qttable/qttablemod.sip b/sip/qttable/qttablemod.sip new file mode 100644 index 0000000..d470d22 --- /dev/null +++ b/sip/qttable/qttablemod.sip @@ -0,0 +1,70 @@ +// This is the SIP interface definition for the qttable module of PyQt. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Module qttable 1 + +%Import qt/qtmod.sip + +%Include copying.sip + + +%Include qtable.sip + + +// The build file template. + +%Makefile qttable.pro.in +# The project file for the qttable module. +# +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +TEMPLATE = lib +TARGET = @BLX_TARGET_LIB@ +DESTDIR = @PYQT_MODDIR@ +CONFIG += @BLX_CONFIG_LIB@ @PYQT_WARN@ +INCLUDEPATH = @BLX_INCLUDEPATH@ +DEFINES = @BLX_DEFINES@ +LIBS += @PYQT_QT_MODULE@ @BLX_LIBS@ +macx:QMAKE_LFLAGS += -framework Python + +SOURCES = $B + +HEADERS = $H +%End diff --git a/sip/qtui/copying.sip b/sip/qtui/copying.sip new file mode 100644 index 0000000..463904b --- /dev/null +++ b/sip/qtui/copying.sip @@ -0,0 +1,51 @@ +// This is the SIP file defining the PyQt license. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Copying +Copyright (c) 2007 + Riverbank Computing Limited + +This file is part of PyQt. + +This copy of PyQt is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +PyQt is supplied 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 General Public License for more +details. + +You should have received a copy of the GNU General Public License along with +PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +%End + + +%OptionalInclude pyqt-internal.sip +%OptionalInclude pyqt-gpl.sip +%OptionalInclude pyqt-commercial.sip +%OptionalInclude pyqt-edu.sip +%OptionalInclude pyqt-eval.sip +%OptionalInclude pyqt-nc.sip +%OptionalInclude pyqt-tkc.sip diff --git a/sip/qtui/qtuimod.sip b/sip/qtui/qtuimod.sip new file mode 100644 index 0000000..f6616b0 --- /dev/null +++ b/sip/qtui/qtuimod.sip @@ -0,0 +1,71 @@ +// This is the SIP interface definition for the qtui module of PyQt. Thanks to +// Hans-Peter Jansen for the original work. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Module qtui 1 + +%Import qt/qtmod.sip + +%Include copying.sip + + +%Include qwidgetfactory.sip + + +// The build file template. + +%Makefile qtui.pro.in +# The project file for the qtui module. +# +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +TEMPLATE = lib +TARGET = @BLX_TARGET_LIB@ +DESTDIR = @PYQT_MODDIR@ +CONFIG += @BLX_CONFIG_LIB@ @PYQT_WARN@ +INCLUDEPATH = @BLX_INCLUDEPATH@ +DEFINES = @BLX_DEFINES@ +LIBS += @PYQT_QT_MODULE@ @PYQT_QUI_LIB@ @BLX_LIBS@ +macx:QMAKE_LFLAGS += -framework Python + +SOURCES = $B + +HEADERS = $H +%End diff --git a/sip/qtui/qwidgetfactory.sip b/sip/qtui/qwidgetfactory.sip new file mode 100644 index 0000000..b011658 --- /dev/null +++ b/sip/qtui/qwidgetfactory.sip @@ -0,0 +1,63 @@ +// This is the SIP interface definition for QWidgetFactory. Thanks to +// Hans-Peter Jansen for the original work. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QWidgetFactory (Qt v3+) + +QWidgetFactory is fully implemented. + + +%End + + +%If (Qt_3_0_0 -) + +class QWidgetFactory +{ +%TypeHeaderCode +#include +%End + +public: + QWidgetFactory(); + virtual ~QWidgetFactory(); + + static QWidget *create(const QString &,QObject * = 0, + QWidget * /TransferThis/ = 0, + const char * = 0) /Factory/; + static QWidget *create(QIODevice *,QObject * = 0, + QWidget * /TransferThis/ = 0, + const char * = 0) /Factory/; + static void addWidgetFactory(QWidgetFactory * /Transfer/); + static void loadImages(const QString &); + + virtual QWidget *createWidget(const QString &,QWidget * /TransferThis/, + const char *) const /Factory/; + +%If (Qt_3_1_0 -) + static QStringList widgets(); + static bool supportsWidget(const QString &); +%End +}; + +%End diff --git a/sip/qtxml/copying.sip b/sip/qtxml/copying.sip new file mode 100644 index 0000000..463904b --- /dev/null +++ b/sip/qtxml/copying.sip @@ -0,0 +1,51 @@ +// This is the SIP file defining the PyQt license. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Copying +Copyright (c) 2007 + Riverbank Computing Limited + +This file is part of PyQt. + +This copy of PyQt is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +PyQt is supplied 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 General Public License for more +details. + +You should have received a copy of the GNU General Public License along with +PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +%End + + +%OptionalInclude pyqt-internal.sip +%OptionalInclude pyqt-gpl.sip +%OptionalInclude pyqt-commercial.sip +%OptionalInclude pyqt-edu.sip +%OptionalInclude pyqt-eval.sip +%OptionalInclude pyqt-nc.sip +%OptionalInclude pyqt-tkc.sip diff --git a/sip/qtxml/qdom.sip b/sip/qtxml/qdom.sip new file mode 100644 index 0000000..7a156d9 --- /dev/null +++ b/sip/qtxml/qdom.sip @@ -0,0 +1,874 @@ +// This is the SIP interface definition for the QDom classes. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%ExportedDoc +QDomImplementation (Qt v2.2+) + +QDomImplementation is fully implemented. + + + +QDomNode (Qt v2.2+) + +QDomNode is fully implemented, including the Python +== and != operators. + + + +QDomNodeList (Qt v2.2+) + +QDomNodeList is fully implemented. + + + +QDomDocument (Qt v2.2+) + + bool setContent + const QCString &buffer + bool namespaceProcessing + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +This takes the buffer and +namespaceProcessing parameters and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+) + + + + bool setContent + const QByteArray &buffer + bool namespaceProcessing + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +This takes the buffer and +namespaceProcessing parameters and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+) + + + + bool setContent + const QString &text + bool namespaceProcessing + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +This takes the text and +namespaceProcessing parameters and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+) + + + + bool setContent + const QIODevice *dev + bool namespaceProcessing + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +This takes the dev and +namespaceProcessing parameters and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+) + + + + bool setContent + const QCString &buffer + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +This takes the buffer parameter only and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+) + + + + bool setContent + const QByteArray &buffer + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +This takes the buffer parameter only and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+) + + + + bool setContent + const QString &text + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +This takes the text parameter only and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+) + + + + bool setContent + const QIODevice *dev + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +This takes the dev parameter only and returns a tuple +containing the bool result and the +errorMsg, errorLine and +errorColumn values. (Qt v3+) + + + + bool setContent + QXmlInputSource *source + QXmlReader *reader + QString *errorMsg = 0 + int *errorLine = 0 + int *errorColumn = 0 + + +Not yet implemented. (Qt v3.2.0+) + + + +QDomDocumentFragment (Qt v2.2+) + +QDomDocumentFragment is fully implemented. + + + +QDomDocumentType (Qt v2.2+) + +QDomDocumentType is fully implemented. + + + +QDomNamedNodeMap (Qt v2.2+) + +QDomNamedNodeMap is fully implemented. + + + +QDomCharacterData (Qt v2.2+) + +QDomCharacterData is fully implemented. + + + +QDomAttr (Qt v2.2+) + +QDomAttr is fully implemented. + + + +QDomElement (Qt v2.2+) + +QDomElement is fully implemented. + + + +QDomText (Qt v2.2+) + +QDomText is fully implemented. + + + +QDomComment (Qt v2.2+) + +QDomComment is fully implemented. + + + +QDomCDATASection (Qt v2.2+) + +QDomCDATASection is fully implemented. + + + +QDomNotation (Qt v2.2+) + +QDomNotation is fully implemented. + + + +QDomEntity (Qt v2.2+) + +QDomEntity is fully implemented. + + + +QDomEntityReference (Qt v2.2+) + +QDomEntityReference is fully implemented. + + + +QDomProcessingInstruction (Qt v2.2+) + +QDomProcessingInstruction is fully implemented. + + +%End + + +%If (Qt_DOM) +%If (Qt_2_2_0 -) + +class QDomImplementation +{ +%TypeHeaderCode +#include +%End + +public: + QDomImplementation(); + QDomImplementation(const QDomImplementation &); + + virtual bool hasFeature(const QString &,const QString &); +%If (Qt_3_0_0 -) + virtual QDomDocumentType createDocumentType(const QString &, + const QString &, + const QString &); + virtual QDomDocument createDocument(const QString &,const QString &, + const QDomDocumentType &); +%End + bool isNull(); +}; + + +class QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + enum NodeType { + ElementNode, + AttributeNode, + TextNode, + CDATASectionNode, + EntityReferenceNode, + EntityNode, + ProcessingInstructionNode, + CommentNode, + DocumentNode, + DocumentTypeNode, + DocumentFragmentNode, + NotationNode, + BaseNode, + CharacterDataNode + }; + + QDomNode(); + QDomNode(const QDomNode &); + + bool operator==(const QDomNode &) const; + bool operator!=(const QDomNode &) const; + + virtual QDomNode insertBefore(const QDomNode &,const QDomNode &); + virtual QDomNode insertAfter(const QDomNode &,const QDomNode &); + virtual QDomNode replaceChild(const QDomNode &,const QDomNode &); + virtual QDomNode removeChild(const QDomNode &); + virtual QDomNode appendChild(const QDomNode &); +%If (Qt_3_0_0 -) + virtual bool hasChildNodes() const; +%End + virtual QDomNode cloneNode(bool = 1) const; +%If (Qt_3_0_0 -) + virtual void normalize(); + virtual bool isSupported(const QString &,const QString &) const; +%End + + virtual QString nodeName() const; + virtual NodeType nodeType() const; + virtual QDomNode parentNode() const; + virtual QDomNodeList childNodes() const; + virtual QDomNode firstChild() const; + virtual QDomNode lastChild() const; + virtual QDomNode previousSibling() const; + virtual QDomNode nextSibling() const; + virtual QDomNamedNodeMap attributes() const; + virtual QDomDocument ownerDocument() const; +%If (Qt_3_0_0 -) + virtual QString namespaceURI() const; + virtual QString localName() const; + virtual bool hasAttributes() const; +%End + + virtual QString nodeValue() const; + virtual void setNodeValue(const QString &); +%If (Qt_3_0_0 -) + virtual QString prefix() const; + virtual void setPrefix(const QString &); +%End + + virtual bool isAttr() const; + virtual bool isCDATASection() const; + virtual bool isDocumentFragment() const; + virtual bool isDocument() const; + virtual bool isDocumentType() const; + virtual bool isElement() const; + virtual bool isEntityReference() const; + virtual bool isText() const; + virtual bool isEntity() const; + virtual bool isNotation() const; + virtual bool isProcessingInstruction() const; + virtual bool isCharacterData() const; + virtual bool isComment() const; + + QDomNode namedItem(const QString &) const; + + bool isNull() const; + void clear(); + + QDomAttr toAttr(); + QDomCDATASection toCDATASection(); + QDomDocumentFragment toDocumentFragment(); + QDomDocument toDocument(); + QDomDocumentType toDocumentType(); + QDomElement toElement(); + QDomEntityReference toEntityReference(); + QDomText toText(); + QDomEntity toEntity(); + QDomNotation toNotation(); + QDomProcessingInstruction toProcessingInstruction(); + QDomCharacterData toCharacterData(); + QDomComment toComment(); + + void save(QTextStream &,int) const; +}; + + +class QDomNodeList +{ +%TypeHeaderCode +#include +%End + +public: + QDomNodeList(); + QDomNodeList(const QDomNodeList &); + + virtual QDomNode item(int) const; + + virtual uint length() const; + uint count() const; +}; + + +class QDomDocumentType : QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomDocumentType(); + QDomDocumentType(const QDomDocumentType &); + + virtual QString name() const; + virtual QDomNamedNodeMap entities() const; + virtual QDomNamedNodeMap notations() const; +%If (Qt_3_0_0 -) + virtual QString publicId() const; + virtual QString systemId() const; + virtual QString internalSubset() const; +%End + + QDomNode::NodeType nodeType() const; + bool isDocumentType() const; +}; + + +class QDomDocument : QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomDocument(); + QDomDocument(const QString &); +%If (Qt_3_0_0 -) + QDomDocument(const QDomDocumentType &); +%End + QDomDocument(const QDomDocument &); + + QDomElement createElement(const QString &); + QDomDocumentFragment createDocumentFragment(); + QDomText createTextNode(const QString &); + QDomComment createComment(const QString &); + QDomCDATASection createCDATASection(const QString &); + QDomProcessingInstruction createProcessingInstruction(const QString &, + const QString &); + QDomAttr createAttribute(const QString &); + QDomEntityReference createEntityReference(const QString &); + QDomNodeList elementsByTagName(const QString &) const; +%If (Qt_3_0_0 -) + QDomElement elementById(const QString &); +%End + + QDomDocumentType doctype() const; + QDomImplementation implementation() const; + QDomElement documentElement() const; + +%If (- Qt_3_0_0) + bool setContent(const QCString &); + bool setContent(const QByteArray &); + bool setContent(const QString &); + bool setContent(QIODevice *); +%End +%If (Qt_3_0_0 -) + // Note that we need handwritten code for these because of the need to + // allocate storage for the error string. + SIP_PYTUPLE setContent(const QCString &,bool); +%MethodCode + bool res; + QString *emsg = new QString(); + int eline, ecol; + + Py_BEGIN_ALLOW_THREADS + res = sipCpp -> QDomDocument::setContent(*a0,a1,emsg,&eline,&ecol); + Py_END_ALLOW_THREADS + + sipRes = sipBuildResult(&sipIsErr, "(bNii)", res, emsg, + sipType_QString, (PyObject *)0, eline, ecol); +%End + + SIP_PYTUPLE setContent(const QByteArray &,bool); +%MethodCode + bool res; + QString *emsg = new QString(); + int eline, ecol; + + Py_BEGIN_ALLOW_THREADS + res = sipCpp -> QDomDocument::setContent(*a0,a1,emsg,&eline,&ecol); + Py_END_ALLOW_THREADS + + sipRes = sipBuildResult(&sipIsErr, "(bNii)", res, emsg, + sipType_QString, (PyObject *)0, eline, ecol); +%End + + SIP_PYTUPLE setContent(const QString &,bool); +%MethodCode + bool res; + QString *emsg = new QString(); + int eline, ecol; + + Py_BEGIN_ALLOW_THREADS + res = sipCpp -> QDomDocument::setContent(*a0,a1,emsg,&eline,&ecol); + Py_END_ALLOW_THREADS + + sipRes = sipBuildResult(&sipIsErr, "(bNii)", res, emsg, + sipType_QString, (PyObject *)0, eline, ecol); +%End + + SIP_PYTUPLE setContent(QIODevice *,bool); +%MethodCode + bool res; + QString *emsg = new QString(); + int eline, ecol; + + Py_BEGIN_ALLOW_THREADS + res = sipCpp -> QDomDocument::setContent(a0,a1,emsg,&eline,&ecol); + Py_END_ALLOW_THREADS + + sipRes = sipBuildResult(&sipIsErr, "(bNii)", res, emsg, + sipType_QString, (PyObject *)0, eline, ecol); +%End + + SIP_PYTUPLE setContent(const QCString &); +%MethodCode + bool res; + QString *emsg = new QString(); + int eline, ecol; + + Py_BEGIN_ALLOW_THREADS + res = sipCpp -> QDomDocument::setContent(*a0,emsg,&eline,&ecol); + Py_END_ALLOW_THREADS + + sipRes = sipBuildResult(&sipIsErr, "(bNii)", res, emsg, + sipType_QString, (PyObject *)0, eline, ecol); +%End + + SIP_PYTUPLE setContent(const QByteArray &); +%MethodCode + bool res; + QString *emsg = new QString(); + int eline, ecol; + + Py_BEGIN_ALLOW_THREADS + res = sipCpp -> QDomDocument::setContent(*a0,emsg,&eline,&ecol); + Py_END_ALLOW_THREADS + + sipRes = sipBuildResult(&sipIsErr, "(bNii)", res, emsg, + sipType_QString, (PyObject *)0, eline, ecol); +%End + + SIP_PYTUPLE setContent(const QString &); +%MethodCode + bool res; + QString *emsg = new QString(); + int eline, ecol; + + Py_BEGIN_ALLOW_THREADS + res = sipCpp -> QDomDocument::setContent(*a0,emsg,&eline,&ecol); + Py_END_ALLOW_THREADS + + sipRes = sipBuildResult(&sipIsErr, "(bNii)", res, emsg, + sipType_QString, (PyObject *)0, eline, ecol); +%End + + SIP_PYTUPLE setContent(QIODevice *); +%MethodCode + bool res; + QString *emsg = new QString(); + int eline, ecol; + + Py_BEGIN_ALLOW_THREADS + res = sipCpp -> QDomDocument::setContent(a0,emsg,&eline,&ecol); + Py_END_ALLOW_THREADS + + sipRes = sipBuildResult(&sipIsErr, "(bNii)", res, emsg, + sipType_QString, (PyObject *)0, eline, ecol); +%End + +%End + +%If (Qt_3_2_0 -) +// bool setContent(QXmlInputSource *,QXmlReader *,QString * = 0,int * = 0, +// int * = 0); +%End + + QDomNode::NodeType nodeType() const; + bool isDocument() const; + + QString toString() const; +%If (Qt_3_1_0 -) + QString toString(int) const; +%End + QCString toCString() const; +%If (Qt_3_1_0 -) + QCString toCString(int) const; +%End +}; + + +class QDomNamedNodeMap +{ +%TypeHeaderCode +#include +%End + +public: + QDomNamedNodeMap(); + QDomNamedNodeMap(const QDomNamedNodeMap &); + + QDomNode namedItem(const QString &) const; + QDomNode setNamedItem(const QDomNode &); + QDomNode removeNamedItem(const QString &); + QDomNode item(int) const; +%If (Qt_3_0_0 -) + QDomNode namedItemNS(const QString &,const QString &) const; + QDomNode setNamedItemNS(const QDomNode &); + QDomNode removeNamedItemNS(const QString &,const QString &); +%End + + uint length() const; +%If (Qt_3_0_0 -) + uint count() const; +%End + + bool contains(const QString &) const; +}; + + +class QDomDocumentFragment : QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomDocumentFragment(); + QDomDocumentFragment(const QDomDocumentFragment &); + + QDomNode::NodeType nodeType() const; + bool isDocumentFragment() const; +}; + + +class QDomCharacterData : QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomCharacterData(); + QDomCharacterData(const QDomCharacterData &); + + virtual QString substringData(unsigned long,unsigned long); + virtual void appendData(const QString &); + virtual void insertData(unsigned long,const QString &); + virtual void deleteData(unsigned long,unsigned long); + virtual void replaceData(unsigned long,unsigned long,const QString &); + + virtual uint length() const; + + virtual QString data() const; + virtual void setData(const QString &); + + QDomNode::NodeType nodeType() const; + bool isCharacterData() const; +}; + + +class QDomAttr : QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomAttr(); + QDomAttr(const QDomAttr&); + + virtual QString name() const; + virtual bool specified() const; +%If (Qt_3_0_0 -) + virtual QDomElement ownerElement() const; +%End + + virtual QString value() const; + virtual void setValue(const QString &); + + QDomNode::NodeType nodeType() const; + bool isAttr() const; +}; + + +class QDomElement : QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomElement(); + QDomElement(const QDomElement &); + + QString attribute(const QString &, + const QString & = QString::null) const; + void setAttribute(const QString &,const QString &); + void setAttribute(const QString &,int /Constrained/); +// void setAttribute(const QString &,uint); +%If (Qt_3_2_0 -) +// void setAttribute(const QString &,long); +// void setAttribute(const QString &,ulong); +%End + void setAttribute(const QString &,double); + void removeAttribute(const QString &); + QDomAttr attributeNode(const QString &); + QDomAttr setAttributeNode(const QDomAttr &); + QDomAttr removeAttributeNode(const QDomAttr &); + virtual QDomNodeList elementsByTagName(const QString &) const; + bool hasAttribute(const QString &) const; +%If (- Qt_3_0_0) + void normalize(); +%End + +%If (Qt_3_0_0 -) + QString attributeNS(const QString,const QString &, + const QString &) const; + void setAttributeNS(const QString,const QString &,const QString &); + void setAttributeNS(const QString,const QString &,int /Constrained/); +// void setAttributeNS(const QString,const QString &,uint); +%If (Qt_3_2_0 -) +// void setAttributeNS(const QString &,const QString &,long); +// void setAttributeNS(const QString &,const QString &,ulong); +%End + void setAttributeNS(const QString,const QString &,double); + void removeAttributeNS(const QString &,const QString &); + QDomAttr attributeNodeNS(const QString &,const QString &); + QDomAttr setAttributeNodeNS(const QDomAttr &); + virtual QDomNodeList elementsByTagNameNS(const QString &, + const QString &) const; + bool hasAttributeNS(const QString &,const QString &) const; +%End + + QString tagName() const; + void setTagName(const QString &); + + QDomNamedNodeMap attributes() const; + QDomNode::NodeType nodeType() const; + bool isElement() const; + + QString text() const; +}; + + +class QDomText : QDomCharacterData +{ +%TypeHeaderCode +#include +%End + +public: + QDomText(); + QDomText(const QDomText &); + + QDomText splitText(int); + + QDomNode::NodeType nodeType() const; + bool isText() const; +}; + + +class QDomComment : QDomCharacterData +{ +%TypeHeaderCode +#include +%End + +public: + QDomComment(); + QDomComment(const QDomComment &); + + QDomNode::NodeType nodeType() const; + bool isComment() const; +}; + + +class QDomCDATASection : QDomText +{ +%TypeHeaderCode +#include +%End + +public: + QDomCDATASection(); + QDomCDATASection(const QDomCDATASection&); + + QDomNode::NodeType nodeType() const; + bool isCDATASection() const; +}; + + +class QDomNotation : QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomNotation(); + QDomNotation(const QDomNotation &); + + QString publicId() const; + QString systemId() const; + + QDomNode::NodeType nodeType() const; + bool isNotation() const; +}; + + +class QDomEntity : QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomEntity(); + QDomEntity(const QDomEntity &); + + virtual QString publicId() const; + virtual QString systemId() const; + virtual QString notationName() const; + + QDomNode::NodeType nodeType() const; + bool isEntity() const; +}; + + +class QDomEntityReference : QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomEntityReference(); + QDomEntityReference(const QDomEntityReference &); + + QDomNode::NodeType nodeType() const; + bool isEntityReference() const; +}; + + +class QDomProcessingInstruction : QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomProcessingInstruction(); + QDomProcessingInstruction(const QDomProcessingInstruction &); + + virtual QString target() const; + + virtual QString data() const; + virtual void setData(const QString &); + + QDomNode::NodeType nodeType() const; + bool isProcessingInstruction() const; +}; + +%End +%End diff --git a/sip/qtxml/qtxmlmod.sip b/sip/qtxml/qtxmlmod.sip new file mode 100644 index 0000000..58eebf4 --- /dev/null +++ b/sip/qtxml/qtxmlmod.sip @@ -0,0 +1,80 @@ +// This is the SIP interface definition for the qtxml module of PyQt. +// +// Copyright (c) 2007 +// Riverbank Computing Limited +// +// This file is part of PyQt. +// +// This copy of PyQt is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2, or (at your option) any later +// version. +// +// PyQt is supplied 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 General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +%Module qtxml 0 + +%Import qt/qtmod.sip + +%Include copying.sip + + +%Include qdom.sip + + +// This is only needed on Windows to make sure that the DLL containing the C++ +// code of the main qt module is loaded before we import our own C++ code which +// has been linked against it. All other modules inherit from a class in the +// qt module which sorts it out, but this module doesn't so we add a dummy. It +// is ignored by SIP v4.x and later. +%PrePythonCode +from qt import QObject +%End + + +// The build file template. + +%Makefile qtxml.pro.in +# The project file for the qtxml module. +# +# Copyright (c) 2007 +# Riverbank Computing Limited +# +# This file is part of PyQt. +# +# This copy of PyQt is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2, or (at your option) any later +# version. +# +# PyQt is supplied 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# PyQt; see the file LICENSE. If not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +TEMPLATE = lib +TARGET = @BLX_TARGET_LIB@ +DESTDIR = @PYQT_MODDIR@ +CONFIG += @BLX_CONFIG_LIB@ @PYQT_WARN@ +INCLUDEPATH = @BLX_INCLUDEPATH@ +DEFINES = @BLX_DEFINES@ +LIBS += @PYQT_QT_MODULE@ @BLX_LIBS@ +macx:QMAKE_LFLAGS += -framework Python + +SOURCES = $B + +HEADERS = $H +%End -- cgit v1.2.3