summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraneejit1 <aneejit1@gmail.com>2022-07-28 15:46:19 +0000
committeraneejit1 <aneejit1@gmail.com>2022-07-30 17:54:15 +0000
commite602246539fd7435aaeb440fcb7f852c92c8426b (patch)
tree35e09f5d93c67158e6c1160d6d9b27ae8a0bf966
parentb34531364d5c0d3be7056d87011afd8bd538a0e7 (diff)
downloadpytqt-e602246539fd7435aaeb440fcb7f852c92c8426b.tar.gz
pytqt-e602246539fd7435aaeb440fcb7f852c92c8426b.zip
Remove Qt V2 support and example files
Build files for pyuic2 have been removed along with the examples for version 2 of Qt and the build/configure scripts have been amended accordingly. The "examples3" directory has been renamed to just "examples". Signed-off-by: aneejit1 <aneejit1@gmail.com>
-rw-r--r--build.py4
-rw-r--r--configure.py18
-rw-r--r--examples/README (renamed from examples3/README)0
-rw-r--r--examples/SQL/README (renamed from examples3/SQL/README)0
-rw-r--r--examples/SQL/connect.ui (renamed from examples3/SQL/connect.ui)0
-rw-r--r--examples/SQL/connect.ui.h (renamed from examples3/SQL/connect.ui.h)0
-rwxr-xr-xexamples/SQL/dbconnect.py (renamed from examples3/SQL/dbconnect.py)0
-rw-r--r--examples/SQL/dbpar.py (renamed from examples3/SQL/dbpar.py)0
-rw-r--r--examples/SQL/form1.ui (renamed from examples3/SQL/form1.ui)0
-rw-r--r--examples/SQL/form2.ui (renamed from examples3/SQL/form2.ui)0
-rw-r--r--examples/SQL/frmconnect.py (renamed from examples3/SQL/frmconnect.py)0
-rw-r--r--examples/SQL/frmconnect.ui (renamed from examples3/SQL/frmconnect.ui)0
-rwxr-xr-xexamples/SQL/runform1.py (renamed from examples3/SQL/runform1.py)0
-rwxr-xr-xexamples/SQL/runform2.py (renamed from examples3/SQL/runform2.py)0
-rwxr-xr-xexamples/SQL/runsqlex.py (renamed from examples3/SQL/runsqlex.py)0
-rwxr-xr-xexamples/SQL/sqlcustom1.py (renamed from examples3/SQL/sqlcustom1.py)0
-rw-r--r--examples/SQL/sqlex.ui (renamed from examples3/SQL/sqlex.ui)0
-rw-r--r--examples/SQL/sqlex.ui.h (renamed from examples3/SQL/sqlex.ui.h)0
-rwxr-xr-xexamples/SQL/sqlsubclass5.py (renamed from examples3/SQL/sqlsubclass5.py)0
-rwxr-xr-xexamples/SQL/sqltable4.py (renamed from examples3/SQL/sqltable4.py)0
-rw-r--r--examples/SQL/testdb_mysql.sql (renamed from examples3/SQL/testdb_mysql.sql)0
-rw-r--r--examples/SQL/testdb_pg.sql (renamed from examples3/SQL/testdb_pg.sql)0
-rwxr-xr-xexamples/aclock.py (renamed from examples2/aclock.py)0
-rwxr-xr-xexamples/addressbook.py (renamed from examples2/addressbook.py)0
-rwxr-xr-xexamples/application.py (renamed from examples3/application.py)0
-rwxr-xr-xexamples/biff.py (renamed from examples3/biff.py)0
-rwxr-xr-xexamples/bigtable.py (renamed from examples3/bigtable.py)0
-rwxr-xr-xexamples/buttongroups.py (renamed from examples3/buttongroups.py)0
-rw-r--r--examples/canvas/butterfly.png (renamed from examples3/canvas/butterfly.png)bin37832 -> 37832 bytes
-rwxr-xr-xexamples/canvas/canvas.py (renamed from examples3/canvas/canvas.py)0
-rw-r--r--examples/canvas/qt-trans.xpm (renamed from examples3/canvas/qt-trans.xpm)0
-rw-r--r--examples/canvas/qtlogo.png (renamed from examples3/canvas/qtlogo.png)bin22603 -> 22603 bytes
-rwxr-xr-xexamples/checklists.py (renamed from examples3/checklists.py)0
-rwxr-xr-xexamples/cursor.py (renamed from examples3/cursor.py)0
-rwxr-xr-xexamples/dclock.py (renamed from examples2/dclock.py)0
-rwxr-xr-xexamples/desktop.py (renamed from examples3/desktop.py)0
-rwxr-xr-xexamples/dirview.py (renamed from examples3/dirview.py)0
-rwxr-xr-xexamples/dragdrop.py (renamed from examples2/dragdrop.py)0
-rwxr-xr-xexamples/drawlines.py (renamed from examples3/drawlines.py)0
-rw-r--r--examples/dropsite.py (renamed from examples3/dropsite.py)0
-rw-r--r--examples/fileopen.xpm (renamed from examples3/fileopen.xpm)0
-rwxr-xr-xexamples/fontdisplayer.py (renamed from examples3/fontdisplayer.py)0
-rwxr-xr-xexamples/fonts.py (renamed from examples3/fonts.py)0
-rwxr-xr-xexamples/gears.py (renamed from examples3/gears.py)0
-rw-r--r--examples/i18n/i18n.pro (renamed from examples3/i18n/i18n.pro)0
-rwxr-xr-xexamples/i18n/i18n.py (renamed from examples3/i18n/i18n.py)0
-rw-r--r--examples/i18n/mywidget.py (renamed from examples3/i18n/mywidget.py)0
-rw-r--r--examples/i18n/mywidget_cs.qm (renamed from examples3/i18n/mywidget_cs.qm)bin818 -> 818 bytes
-rw-r--r--examples/i18n/mywidget_cs.ts (renamed from examples3/i18n/mywidget_cs.ts)0
-rw-r--r--examples/i18n/mywidget_de.qm (renamed from examples3/i18n/mywidget_de.qm)bin913 -> 913 bytes
-rw-r--r--examples/i18n/mywidget_de.ts (renamed from examples3/i18n/mywidget_de.ts)0
-rw-r--r--examples/i18n/mywidget_el.qm (renamed from examples3/i18n/mywidget_el.qm)bin832 -> 832 bytes
-rw-r--r--examples/i18n/mywidget_el.ts (renamed from examples3/i18n/mywidget_el.ts)0
-rw-r--r--examples/i18n/mywidget_en.qm (renamed from examples3/i18n/mywidget_en.qm)bin337 -> 337 bytes
-rw-r--r--examples/i18n/mywidget_en.ts (renamed from examples3/i18n/mywidget_en.ts)0
-rw-r--r--examples/i18n/mywidget_eo.qm (renamed from examples3/i18n/mywidget_eo.qm)bin835 -> 835 bytes
-rw-r--r--examples/i18n/mywidget_eo.ts (renamed from examples3/i18n/mywidget_eo.ts)0
-rw-r--r--examples/i18n/mywidget_fr.qm (renamed from examples3/i18n/mywidget_fr.qm)bin884 -> 884 bytes
-rw-r--r--examples/i18n/mywidget_fr.ts (renamed from examples3/i18n/mywidget_fr.ts)0
-rw-r--r--examples/i18n/mywidget_it.qm (renamed from examples3/i18n/mywidget_it.qm)bin763 -> 763 bytes
-rw-r--r--examples/i18n/mywidget_it.ts (renamed from examples3/i18n/mywidget_it.ts)0
-rw-r--r--examples/i18n/mywidget_jp.qm (renamed from examples3/i18n/mywidget_jp.qm)bin738 -> 738 bytes
-rw-r--r--examples/i18n/mywidget_jp.ts (renamed from examples3/i18n/mywidget_jp.ts)0
-rw-r--r--examples/i18n/mywidget_ko.qm (renamed from examples3/i18n/mywidget_ko.qm)bin738 -> 738 bytes
-rw-r--r--examples/i18n/mywidget_ko.ts (renamed from examples3/i18n/mywidget_ko.ts)0
-rw-r--r--examples/i18n/mywidget_no.qm (renamed from examples3/i18n/mywidget_no.qm)bin830 -> 830 bytes
-rw-r--r--examples/i18n/mywidget_no.ts (renamed from examples3/i18n/mywidget_no.ts)0
-rw-r--r--examples/i18n/mywidget_ru.qm (renamed from examples3/i18n/mywidget_ru.qm)bin799 -> 799 bytes
-rw-r--r--examples/i18n/mywidget_ru.ts (renamed from examples3/i18n/mywidget_ru.ts)0
-rw-r--r--examples/i18n/mywidget_zh.qm (renamed from examples3/i18n/mywidget_zh.qm)bin706 -> 706 bytes
-rw-r--r--examples/i18n/mywidget_zh.ts (renamed from examples3/i18n/mywidget_zh.ts)0
-rwxr-xr-xexamples/lineedits.py (renamed from examples3/lineedits.py)0
-rwxr-xr-xexamples/listbox.py (renamed from examples3/listbox.py)0
-rwxr-xr-xexamples/listboxcombo.py (renamed from examples3/listboxcombo.py)0
-rw-r--r--examples/marble.png (renamed from examples3/marble.png)bin25239 -> 25239 bytes
-rwxr-xr-xexamples/mdi.py (renamed from examples3/mdi.py)0
-rwxr-xr-xexamples/menu.py (renamed from examples3/menu.py)0
-rwxr-xr-xexamples/progress.py (renamed from examples3/progress.py)0
-rwxr-xr-xexamples/progressbar.py (renamed from examples3/progressbar.py)0
-rwxr-xr-xexamples/qdir.py (renamed from examples3/qdir.py)0
-rwxr-xr-xexamples/qmag.py (renamed from examples3/qmag.py)0
-rw-r--r--examples/qt.png (renamed from examples2/qt.png)bin355 -> 355 bytes
-rw-r--r--examples/qtlogo.png (renamed from examples3/qtlogo.png)bin12634 -> 12634 bytes
-rwxr-xr-xexamples/rangecontrols.py (renamed from examples3/rangecontrols.py)0
-rwxr-xr-xexamples/richtext.py (renamed from examples3/richtext.py)0
-rw-r--r--examples/secret.py (renamed from examples3/secret.py)0
-rwxr-xr-xexamples/semaphore.py (renamed from examples3/semaphore.py)0
-rwxr-xr-xexamples/smalltable.py (renamed from examples3/smalltable.py)0
-rwxr-xr-xexamples/splitter.py (renamed from examples3/splitter.py)0
-rwxr-xr-xexamples/tabdialog.py (renamed from examples3/tabdialog.py)0
-rwxr-xr-xexamples/tablestatistics.py (renamed from examples3/tablestatistics.py)0
-rwxr-xr-xexamples/tooltip.py (renamed from examples3/tooltip.py)0
-rw-r--r--examples/trolltech.bmp (renamed from examples2/trolltech.bmp)bin30055 -> 30055 bytes
-rw-r--r--examples/trolltech.gif (renamed from examples2/trolltech.gif)bin42629 -> 42629 bytes
-rw-r--r--examples/tt-logo.png (renamed from examples2/tt-logo.png)bin3133 -> 3133 bytes
-rwxr-xr-xexamples/tut1.py (renamed from examples3/tut1.py)0
-rwxr-xr-xexamples/tut10.py (renamed from examples3/tut10.py)0
-rwxr-xr-xexamples/tut11.py (renamed from examples3/tut11.py)0
-rwxr-xr-xexamples/tut12.py (renamed from examples3/tut12.py)0
-rwxr-xr-xexamples/tut13.py (renamed from examples3/tut13.py)0
-rwxr-xr-xexamples/tut14.py (renamed from examples3/tut14.py)0
-rwxr-xr-xexamples/tut2.py (renamed from examples3/tut2.py)0
-rwxr-xr-xexamples/tut3.py (renamed from examples3/tut3.py)0
-rwxr-xr-xexamples/tut4.py (renamed from examples3/tut4.py)0
-rwxr-xr-xexamples/tut5.py (renamed from examples3/tut5.py)0
-rwxr-xr-xexamples/tut6.py (renamed from examples3/tut6.py)0
-rwxr-xr-xexamples/tut7.py (renamed from examples3/tut7.py)0
-rwxr-xr-xexamples/tut8.py (renamed from examples3/tut8.py)0
-rwxr-xr-xexamples/tut9.py (renamed from examples3/tut9.py)0
-rw-r--r--examples/webbrowser/mainwindow.py (renamed from examples3/webbrowser/mainwindow.py)0
-rw-r--r--examples/webbrowser/mainwindow.ui (renamed from examples3/webbrowser/mainwindow.ui)0
-rw-r--r--examples/webbrowser/webbrowser.py (renamed from examples3/webbrowser/webbrowser.py)0
-rwxr-xr-xexamples/widgets.py (renamed from examples3/widgets.py)0
-rw-r--r--examples2/README11
-rwxr-xr-xexamples2/application.py277
-rwxr-xr-xexamples2/buttongroups.py113
-rwxr-xr-xexamples2/desktop.py219
-rwxr-xr-xexamples2/dirview.py76
-rw-r--r--examples2/dropsite.py96
-rwxr-xr-xexamples2/gears.py235
-rwxr-xr-xexamples2/menu.py301
-rw-r--r--examples2/qtlogo.pngbin3684 -> 0 bytes
-rw-r--r--examples2/secret.py65
-rwxr-xr-xexamples2/semaphore.py203
-rwxr-xr-xexamples2/splitter.py65
-rwxr-xr-xexamples2/table.py115
-rwxr-xr-xexamples2/themes.py2484
-rwxr-xr-xexamples2/tut1.py16
-rwxr-xr-xexamples2/tut10.py145
-rwxr-xr-xexamples2/tut11.py213
-rwxr-xr-xexamples2/tut12.py252
-rwxr-xr-xexamples2/tut13.py329
-rwxr-xr-xexamples2/tut14.py377
-rwxr-xr-xexamples2/tut2.py19
-rwxr-xr-xexamples2/tut3.py20
-rwxr-xr-xexamples2/tut4.py29
-rwxr-xr-xexamples2/tut5.py32
-rwxr-xr-xexamples2/tut6.py41
-rwxr-xr-xexamples2/tut7.py57
-rwxr-xr-xexamples2/tut8.py96
-rwxr-xr-xexamples2/tut9.py104
-rwxr-xr-xexamples2/widgets.py512
-rwxr-xr-xexamples3/aclock.py61
-rwxr-xr-xexamples3/addressbook.py457
-rwxr-xr-xexamples3/dclock.py58
-rwxr-xr-xexamples3/dragdrop.py57
-rw-r--r--examples3/qt.pngbin355 -> 0 bytes
-rw-r--r--examples3/trolltech.bmpbin30055 -> 0 bytes
-rw-r--r--examples3/trolltech.gifbin42629 -> 0 bytes
-rw-r--r--examples3/tt-logo.pngbin3133 -> 0 bytes
-rw-r--r--pyuic2/COPYING280
-rw-r--r--pyuic2/domtool.cpp260
-rw-r--r--pyuic2/domtool.h41
-rw-r--r--pyuic2/globaldefs.h33
-rw-r--r--pyuic2/pyuic.pro.in24
-rw-r--r--pyuic2/pyuic.sbf24
-rw-r--r--pyuic2/uic.cpp1600
-rw-r--r--pyuic2/uic.h133
-rw-r--r--pyuic2/widgetdatabase.cpp640
-rw-r--r--pyuic2/widgetdatabase.h75
160 files changed, 0 insertions, 10267 deletions
diff --git a/build.py b/build.py
index 890acad..80e48f9 100644
--- a/build.py
+++ b/build.py
@@ -689,10 +689,6 @@ def main(argv):
sip_tqt_config.inform("Creating Makefile for pyuic3.")
subdirs.append("pyuic3")
olddir = sip_tqt_config.push_dir("pyuic3")
- elif config.qt_version >= 0x020000:
- sip_tqt_config.inform("Creating Makefile for pyuic2.")
- subdirs.append("pyuic2")
- olddir = sip_tqt_config.push_dir("pyuic2")
config.create_makefile("pyuic.pro", [])
sip_tqt_config.pop_dir(olddir)
diff --git a/configure.py b/configure.py
index b5c4221..0981ad5 100644
--- a/configure.py
+++ b/configure.py
@@ -361,24 +361,6 @@ class ConfigurePyTQt3(ConfigureBase):
makefile.generate()
tool_dirs.append("pylupdate3")
- elif qt_version >= 0x020000:
- sip_tqt_config.inform("Creating pyuic Makefile...")
-
- makefile = sip_tqt_config.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
diff --git a/examples3/README b/examples/README
index fcebe5f..fcebe5f 100644
--- a/examples3/README
+++ b/examples/README
diff --git a/examples3/SQL/README b/examples/SQL/README
index 862e608..862e608 100644
--- a/examples3/SQL/README
+++ b/examples/SQL/README
diff --git a/examples3/SQL/connect.ui b/examples/SQL/connect.ui
index d33a783..d33a783 100644
--- a/examples3/SQL/connect.ui
+++ b/examples/SQL/connect.ui
diff --git a/examples3/SQL/connect.ui.h b/examples/SQL/connect.ui.h
index ceff8dc..ceff8dc 100644
--- a/examples3/SQL/connect.ui.h
+++ b/examples/SQL/connect.ui.h
diff --git a/examples3/SQL/dbconnect.py b/examples/SQL/dbconnect.py
index d1c1baf..d1c1baf 100755
--- a/examples3/SQL/dbconnect.py
+++ b/examples/SQL/dbconnect.py
diff --git a/examples3/SQL/dbpar.py b/examples/SQL/dbpar.py
index 19e6d9b..19e6d9b 100644
--- a/examples3/SQL/dbpar.py
+++ b/examples/SQL/dbpar.py
diff --git a/examples3/SQL/form1.ui b/examples/SQL/form1.ui
index 118a84e..118a84e 100644
--- a/examples3/SQL/form1.ui
+++ b/examples/SQL/form1.ui
diff --git a/examples3/SQL/form2.ui b/examples/SQL/form2.ui
index 4856e39..4856e39 100644
--- a/examples3/SQL/form2.ui
+++ b/examples/SQL/form2.ui
diff --git a/examples3/SQL/frmconnect.py b/examples/SQL/frmconnect.py
index 97fb406..97fb406 100644
--- a/examples3/SQL/frmconnect.py
+++ b/examples/SQL/frmconnect.py
diff --git a/examples3/SQL/frmconnect.ui b/examples/SQL/frmconnect.ui
index f2017ee..f2017ee 100644
--- a/examples3/SQL/frmconnect.ui
+++ b/examples/SQL/frmconnect.ui
diff --git a/examples3/SQL/runform1.py b/examples/SQL/runform1.py
index 2e01b7e..2e01b7e 100755
--- a/examples3/SQL/runform1.py
+++ b/examples/SQL/runform1.py
diff --git a/examples3/SQL/runform2.py b/examples/SQL/runform2.py
index 0184e9d..0184e9d 100755
--- a/examples3/SQL/runform2.py
+++ b/examples/SQL/runform2.py
diff --git a/examples3/SQL/runsqlex.py b/examples/SQL/runsqlex.py
index 2235699..2235699 100755
--- a/examples3/SQL/runsqlex.py
+++ b/examples/SQL/runsqlex.py
diff --git a/examples3/SQL/sqlcustom1.py b/examples/SQL/sqlcustom1.py
index 4da8f8a..4da8f8a 100755
--- a/examples3/SQL/sqlcustom1.py
+++ b/examples/SQL/sqlcustom1.py
diff --git a/examples3/SQL/sqlex.ui b/examples/SQL/sqlex.ui
index 64b3d0f..64b3d0f 100644
--- a/examples3/SQL/sqlex.ui
+++ b/examples/SQL/sqlex.ui
diff --git a/examples3/SQL/sqlex.ui.h b/examples/SQL/sqlex.ui.h
index 07edcd0..07edcd0 100644
--- a/examples3/SQL/sqlex.ui.h
+++ b/examples/SQL/sqlex.ui.h
diff --git a/examples3/SQL/sqlsubclass5.py b/examples/SQL/sqlsubclass5.py
index 0fdc78c..0fdc78c 100755
--- a/examples3/SQL/sqlsubclass5.py
+++ b/examples/SQL/sqlsubclass5.py
diff --git a/examples3/SQL/sqltable4.py b/examples/SQL/sqltable4.py
index a8484c5..a8484c5 100755
--- a/examples3/SQL/sqltable4.py
+++ b/examples/SQL/sqltable4.py
diff --git a/examples3/SQL/testdb_mysql.sql b/examples/SQL/testdb_mysql.sql
index 144d4c9..144d4c9 100644
--- a/examples3/SQL/testdb_mysql.sql
+++ b/examples/SQL/testdb_mysql.sql
diff --git a/examples3/SQL/testdb_pg.sql b/examples/SQL/testdb_pg.sql
index 73a4270..73a4270 100644
--- a/examples3/SQL/testdb_pg.sql
+++ b/examples/SQL/testdb_pg.sql
diff --git a/examples2/aclock.py b/examples/aclock.py
index 66283ef..66283ef 100755
--- a/examples2/aclock.py
+++ b/examples/aclock.py
diff --git a/examples2/addressbook.py b/examples/addressbook.py
index 14b5679..14b5679 100755
--- a/examples2/addressbook.py
+++ b/examples/addressbook.py
diff --git a/examples3/application.py b/examples/application.py
index 056e895..056e895 100755
--- a/examples3/application.py
+++ b/examples/application.py
diff --git a/examples3/biff.py b/examples/biff.py
index abee0cf..abee0cf 100755
--- a/examples3/biff.py
+++ b/examples/biff.py
diff --git a/examples3/bigtable.py b/examples/bigtable.py
index f2d9788..f2d9788 100755
--- a/examples3/bigtable.py
+++ b/examples/bigtable.py
diff --git a/examples3/buttongroups.py b/examples/buttongroups.py
index 3d6883e..3d6883e 100755
--- a/examples3/buttongroups.py
+++ b/examples/buttongroups.py
diff --git a/examples3/canvas/butterfly.png b/examples/canvas/butterfly.png
index 619f253..619f253 100644
--- a/examples3/canvas/butterfly.png
+++ b/examples/canvas/butterfly.png
Binary files differ
diff --git a/examples3/canvas/canvas.py b/examples/canvas/canvas.py
index 5f7f774..5f7f774 100755
--- a/examples3/canvas/canvas.py
+++ b/examples/canvas/canvas.py
diff --git a/examples3/canvas/qt-trans.xpm b/examples/canvas/qt-trans.xpm
index 225f684..225f684 100644
--- a/examples3/canvas/qt-trans.xpm
+++ b/examples/canvas/qt-trans.xpm
diff --git a/examples3/canvas/qtlogo.png b/examples/canvas/qtlogo.png
index 96202de..96202de 100644
--- a/examples3/canvas/qtlogo.png
+++ b/examples/canvas/qtlogo.png
Binary files differ
diff --git a/examples3/checklists.py b/examples/checklists.py
index 61734ba..61734ba 100755
--- a/examples3/checklists.py
+++ b/examples/checklists.py
diff --git a/examples3/cursor.py b/examples/cursor.py
index da9db7b..da9db7b 100755
--- a/examples3/cursor.py
+++ b/examples/cursor.py
diff --git a/examples2/dclock.py b/examples/dclock.py
index 302d454..302d454 100755
--- a/examples2/dclock.py
+++ b/examples/dclock.py
diff --git a/examples3/desktop.py b/examples/desktop.py
index 154b632..154b632 100755
--- a/examples3/desktop.py
+++ b/examples/desktop.py
diff --git a/examples3/dirview.py b/examples/dirview.py
index e6b1f58..e6b1f58 100755
--- a/examples3/dirview.py
+++ b/examples/dirview.py
diff --git a/examples2/dragdrop.py b/examples/dragdrop.py
index a715170..a715170 100755
--- a/examples2/dragdrop.py
+++ b/examples/dragdrop.py
diff --git a/examples3/drawlines.py b/examples/drawlines.py
index c1553f2..c1553f2 100755
--- a/examples3/drawlines.py
+++ b/examples/drawlines.py
diff --git a/examples3/dropsite.py b/examples/dropsite.py
index 8581e0e..8581e0e 100644
--- a/examples3/dropsite.py
+++ b/examples/dropsite.py
diff --git a/examples3/fileopen.xpm b/examples/fileopen.xpm
index 880417e..880417e 100644
--- a/examples3/fileopen.xpm
+++ b/examples/fileopen.xpm
diff --git a/examples3/fontdisplayer.py b/examples/fontdisplayer.py
index 1f616bf..1f616bf 100755
--- a/examples3/fontdisplayer.py
+++ b/examples/fontdisplayer.py
diff --git a/examples3/fonts.py b/examples/fonts.py
index 145b815..145b815 100755
--- a/examples3/fonts.py
+++ b/examples/fonts.py
diff --git a/examples3/gears.py b/examples/gears.py
index e98df55..e98df55 100755
--- a/examples3/gears.py
+++ b/examples/gears.py
diff --git a/examples3/i18n/i18n.pro b/examples/i18n/i18n.pro
index fc55895..fc55895 100644
--- a/examples3/i18n/i18n.pro
+++ b/examples/i18n/i18n.pro
diff --git a/examples3/i18n/i18n.py b/examples/i18n/i18n.py
index b4dc42a..b4dc42a 100755
--- a/examples3/i18n/i18n.py
+++ b/examples/i18n/i18n.py
diff --git a/examples3/i18n/mywidget.py b/examples/i18n/mywidget.py
index 8013c1c..8013c1c 100644
--- a/examples3/i18n/mywidget.py
+++ b/examples/i18n/mywidget.py
diff --git a/examples3/i18n/mywidget_cs.qm b/examples/i18n/mywidget_cs.qm
index f95090d..f95090d 100644
--- a/examples3/i18n/mywidget_cs.qm
+++ b/examples/i18n/mywidget_cs.qm
Binary files differ
diff --git a/examples3/i18n/mywidget_cs.ts b/examples/i18n/mywidget_cs.ts
index 2b82f04..2b82f04 100644
--- a/examples3/i18n/mywidget_cs.ts
+++ b/examples/i18n/mywidget_cs.ts
diff --git a/examples3/i18n/mywidget_de.qm b/examples/i18n/mywidget_de.qm
index 6433855..6433855 100644
--- a/examples3/i18n/mywidget_de.qm
+++ b/examples/i18n/mywidget_de.qm
Binary files differ
diff --git a/examples3/i18n/mywidget_de.ts b/examples/i18n/mywidget_de.ts
index 0a60c2b..0a60c2b 100644
--- a/examples3/i18n/mywidget_de.ts
+++ b/examples/i18n/mywidget_de.ts
diff --git a/examples3/i18n/mywidget_el.qm b/examples/i18n/mywidget_el.qm
index 15d7689..15d7689 100644
--- a/examples3/i18n/mywidget_el.qm
+++ b/examples/i18n/mywidget_el.qm
Binary files differ
diff --git a/examples3/i18n/mywidget_el.ts b/examples/i18n/mywidget_el.ts
index 0d7a5dc..0d7a5dc 100644
--- a/examples3/i18n/mywidget_el.ts
+++ b/examples/i18n/mywidget_el.ts
diff --git a/examples3/i18n/mywidget_en.qm b/examples/i18n/mywidget_en.qm
index 6bd22c4..6bd22c4 100644
--- a/examples3/i18n/mywidget_en.qm
+++ b/examples/i18n/mywidget_en.qm
Binary files differ
diff --git a/examples3/i18n/mywidget_en.ts b/examples/i18n/mywidget_en.ts
index 30a6e66..30a6e66 100644
--- a/examples3/i18n/mywidget_en.ts
+++ b/examples/i18n/mywidget_en.ts
diff --git a/examples3/i18n/mywidget_eo.qm b/examples/i18n/mywidget_eo.qm
index 372cf79..372cf79 100644
--- a/examples3/i18n/mywidget_eo.qm
+++ b/examples/i18n/mywidget_eo.qm
Binary files differ
diff --git a/examples3/i18n/mywidget_eo.ts b/examples/i18n/mywidget_eo.ts
index f4eaef4..f4eaef4 100644
--- a/examples3/i18n/mywidget_eo.ts
+++ b/examples/i18n/mywidget_eo.ts
diff --git a/examples3/i18n/mywidget_fr.qm b/examples/i18n/mywidget_fr.qm
index 12a8464..12a8464 100644
--- a/examples3/i18n/mywidget_fr.qm
+++ b/examples/i18n/mywidget_fr.qm
Binary files differ
diff --git a/examples3/i18n/mywidget_fr.ts b/examples/i18n/mywidget_fr.ts
index 3fa0191..3fa0191 100644
--- a/examples3/i18n/mywidget_fr.ts
+++ b/examples/i18n/mywidget_fr.ts
diff --git a/examples3/i18n/mywidget_it.qm b/examples/i18n/mywidget_it.qm
index 075bee2..075bee2 100644
--- a/examples3/i18n/mywidget_it.qm
+++ b/examples/i18n/mywidget_it.qm
Binary files differ
diff --git a/examples3/i18n/mywidget_it.ts b/examples/i18n/mywidget_it.ts
index 4fa708c..4fa708c 100644
--- a/examples3/i18n/mywidget_it.ts
+++ b/examples/i18n/mywidget_it.ts
diff --git a/examples3/i18n/mywidget_jp.qm b/examples/i18n/mywidget_jp.qm
index 8942dd7..8942dd7 100644
--- a/examples3/i18n/mywidget_jp.qm
+++ b/examples/i18n/mywidget_jp.qm
Binary files differ
diff --git a/examples3/i18n/mywidget_jp.ts b/examples/i18n/mywidget_jp.ts
index 029dd0e..029dd0e 100644
--- a/examples3/i18n/mywidget_jp.ts
+++ b/examples/i18n/mywidget_jp.ts
diff --git a/examples3/i18n/mywidget_ko.qm b/examples/i18n/mywidget_ko.qm
index dccc2ba..dccc2ba 100644
--- a/examples3/i18n/mywidget_ko.qm
+++ b/examples/i18n/mywidget_ko.qm
Binary files differ
diff --git a/examples3/i18n/mywidget_ko.ts b/examples/i18n/mywidget_ko.ts
index 632f8a7..632f8a7 100644
--- a/examples3/i18n/mywidget_ko.ts
+++ b/examples/i18n/mywidget_ko.ts
diff --git a/examples3/i18n/mywidget_no.qm b/examples/i18n/mywidget_no.qm
index 2adc136..2adc136 100644
--- a/examples3/i18n/mywidget_no.qm
+++ b/examples/i18n/mywidget_no.qm
Binary files differ
diff --git a/examples3/i18n/mywidget_no.ts b/examples/i18n/mywidget_no.ts
index b91293c..b91293c 100644
--- a/examples3/i18n/mywidget_no.ts
+++ b/examples/i18n/mywidget_no.ts
diff --git a/examples3/i18n/mywidget_ru.qm b/examples/i18n/mywidget_ru.qm
index ebc512e..ebc512e 100644
--- a/examples3/i18n/mywidget_ru.qm
+++ b/examples/i18n/mywidget_ru.qm
Binary files differ
diff --git a/examples3/i18n/mywidget_ru.ts b/examples/i18n/mywidget_ru.ts
index d279ed1..d279ed1 100644
--- a/examples3/i18n/mywidget_ru.ts
+++ b/examples/i18n/mywidget_ru.ts
diff --git a/examples3/i18n/mywidget_zh.qm b/examples/i18n/mywidget_zh.qm
index a890c09..a890c09 100644
--- a/examples3/i18n/mywidget_zh.qm
+++ b/examples/i18n/mywidget_zh.qm
Binary files differ
diff --git a/examples3/i18n/mywidget_zh.ts b/examples/i18n/mywidget_zh.ts
index 0dcb2df..0dcb2df 100644
--- a/examples3/i18n/mywidget_zh.ts
+++ b/examples/i18n/mywidget_zh.ts
diff --git a/examples3/lineedits.py b/examples/lineedits.py
index 0093f40..0093f40 100755
--- a/examples3/lineedits.py
+++ b/examples/lineedits.py
diff --git a/examples3/listbox.py b/examples/listbox.py
index fce0cc8..fce0cc8 100755
--- a/examples3/listbox.py
+++ b/examples/listbox.py
diff --git a/examples3/listboxcombo.py b/examples/listboxcombo.py
index baca5d2..baca5d2 100755
--- a/examples3/listboxcombo.py
+++ b/examples/listboxcombo.py
diff --git a/examples3/marble.png b/examples/marble.png
index 9c32530..9c32530 100644
--- a/examples3/marble.png
+++ b/examples/marble.png
Binary files differ
diff --git a/examples3/mdi.py b/examples/mdi.py
index ca3d33b..ca3d33b 100755
--- a/examples3/mdi.py
+++ b/examples/mdi.py
diff --git a/examples3/menu.py b/examples/menu.py
index 31fadd9..31fadd9 100755
--- a/examples3/menu.py
+++ b/examples/menu.py
diff --git a/examples3/progress.py b/examples/progress.py
index 3ebdd12..3ebdd12 100755
--- a/examples3/progress.py
+++ b/examples/progress.py
diff --git a/examples3/progressbar.py b/examples/progressbar.py
index e33362e..e33362e 100755
--- a/examples3/progressbar.py
+++ b/examples/progressbar.py
diff --git a/examples3/qdir.py b/examples/qdir.py
index 358c796..358c796 100755
--- a/examples3/qdir.py
+++ b/examples/qdir.py
diff --git a/examples3/qmag.py b/examples/qmag.py
index 186a473..186a473 100755
--- a/examples3/qmag.py
+++ b/examples/qmag.py
diff --git a/examples2/qt.png b/examples/qt.png
index d63e16f..d63e16f 100644
--- a/examples2/qt.png
+++ b/examples/qt.png
Binary files differ
diff --git a/examples3/qtlogo.png b/examples/qtlogo.png
index c83c7b2..c83c7b2 100644
--- a/examples3/qtlogo.png
+++ b/examples/qtlogo.png
Binary files differ
diff --git a/examples3/rangecontrols.py b/examples/rangecontrols.py
index 14588c8..14588c8 100755
--- a/examples3/rangecontrols.py
+++ b/examples/rangecontrols.py
diff --git a/examples3/richtext.py b/examples/richtext.py
index 2e6abac..2e6abac 100755
--- a/examples3/richtext.py
+++ b/examples/richtext.py
diff --git a/examples3/secret.py b/examples/secret.py
index 34560ed..34560ed 100644
--- a/examples3/secret.py
+++ b/examples/secret.py
diff --git a/examples3/semaphore.py b/examples/semaphore.py
index 79affb2..79affb2 100755
--- a/examples3/semaphore.py
+++ b/examples/semaphore.py
diff --git a/examples3/smalltable.py b/examples/smalltable.py
index 52f212a..52f212a 100755
--- a/examples3/smalltable.py
+++ b/examples/smalltable.py
diff --git a/examples3/splitter.py b/examples/splitter.py
index a220d08..a220d08 100755
--- a/examples3/splitter.py
+++ b/examples/splitter.py
diff --git a/examples3/tabdialog.py b/examples/tabdialog.py
index 00e66f6..00e66f6 100755
--- a/examples3/tabdialog.py
+++ b/examples/tabdialog.py
diff --git a/examples3/tablestatistics.py b/examples/tablestatistics.py
index d6b6b2e..d6b6b2e 100755
--- a/examples3/tablestatistics.py
+++ b/examples/tablestatistics.py
diff --git a/examples3/tooltip.py b/examples/tooltip.py
index 13025e3..13025e3 100755
--- a/examples3/tooltip.py
+++ b/examples/tooltip.py
diff --git a/examples2/trolltech.bmp b/examples/trolltech.bmp
index 9f399c7..9f399c7 100644
--- a/examples2/trolltech.bmp
+++ b/examples/trolltech.bmp
Binary files differ
diff --git a/examples2/trolltech.gif b/examples/trolltech.gif
index f674369..f674369 100644
--- a/examples2/trolltech.gif
+++ b/examples/trolltech.gif
Binary files differ
diff --git a/examples2/tt-logo.png b/examples/tt-logo.png
index 1b0e865..1b0e865 100644
--- a/examples2/tt-logo.png
+++ b/examples/tt-logo.png
Binary files differ
diff --git a/examples3/tut1.py b/examples/tut1.py
index 3e30fcc..3e30fcc 100755
--- a/examples3/tut1.py
+++ b/examples/tut1.py
diff --git a/examples3/tut10.py b/examples/tut10.py
index b16804e..b16804e 100755
--- a/examples3/tut10.py
+++ b/examples/tut10.py
diff --git a/examples3/tut11.py b/examples/tut11.py
index cb6444b..cb6444b 100755
--- a/examples3/tut11.py
+++ b/examples/tut11.py
diff --git a/examples3/tut12.py b/examples/tut12.py
index 452d1ac..452d1ac 100755
--- a/examples3/tut12.py
+++ b/examples/tut12.py
diff --git a/examples3/tut13.py b/examples/tut13.py
index c43d67b..c43d67b 100755
--- a/examples3/tut13.py
+++ b/examples/tut13.py
diff --git a/examples3/tut14.py b/examples/tut14.py
index 8f7404c..8f7404c 100755
--- a/examples3/tut14.py
+++ b/examples/tut14.py
diff --git a/examples3/tut2.py b/examples/tut2.py
index 80fe48f..80fe48f 100755
--- a/examples3/tut2.py
+++ b/examples/tut2.py
diff --git a/examples3/tut3.py b/examples/tut3.py
index 277c352..277c352 100755
--- a/examples3/tut3.py
+++ b/examples/tut3.py
diff --git a/examples3/tut4.py b/examples/tut4.py
index 41417f5..41417f5 100755
--- a/examples3/tut4.py
+++ b/examples/tut4.py
diff --git a/examples3/tut5.py b/examples/tut5.py
index 19cb6f7..19cb6f7 100755
--- a/examples3/tut5.py
+++ b/examples/tut5.py
diff --git a/examples3/tut6.py b/examples/tut6.py
index d10eaa5..d10eaa5 100755
--- a/examples3/tut6.py
+++ b/examples/tut6.py
diff --git a/examples3/tut7.py b/examples/tut7.py
index 3c9deea..3c9deea 100755
--- a/examples3/tut7.py
+++ b/examples/tut7.py
diff --git a/examples3/tut8.py b/examples/tut8.py
index 2e81a94..2e81a94 100755
--- a/examples3/tut8.py
+++ b/examples/tut8.py
diff --git a/examples3/tut9.py b/examples/tut9.py
index 3eafed7..3eafed7 100755
--- a/examples3/tut9.py
+++ b/examples/tut9.py
diff --git a/examples3/webbrowser/mainwindow.py b/examples/webbrowser/mainwindow.py
index 14929de..14929de 100644
--- a/examples3/webbrowser/mainwindow.py
+++ b/examples/webbrowser/mainwindow.py
diff --git a/examples3/webbrowser/mainwindow.ui b/examples/webbrowser/mainwindow.ui
index 446a717..446a717 100644
--- a/examples3/webbrowser/mainwindow.ui
+++ b/examples/webbrowser/mainwindow.ui
diff --git a/examples3/webbrowser/webbrowser.py b/examples/webbrowser/webbrowser.py
index 12f6f1c..12f6f1c 100644
--- a/examples3/webbrowser/webbrowser.py
+++ b/examples/webbrowser/webbrowser.py
diff --git a/examples3/widgets.py b/examples/widgets.py
index fe36049..fe36049 100755
--- a/examples3/widgets.py
+++ b/examples/widgets.py
diff --git a/examples2/README b/examples2/README
deleted file mode 100644
index a337e9b..0000000
--- a/examples2/README
+++ /dev/null
@@ -1,11 +0,0 @@
-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 TQt v2.x.
-
-A much better source of information about using PyTQt is Boudewijn Rempt's
-book at http://stage.linuxports.com/projects/pyqt/.
-
-Phil Thompson
-phil@riverbankcomputing.co.uk
diff --git a/examples2/application.py b/examples2/application.py
deleted file mode 100755
index 38a6cf5..0000000
--- a/examples2/application.py
+++ /dev/null
@@ -1,277 +0,0 @@
-#!/usr/bin/env python
-
-# A simple application.
-
-
-import sys, string
-from python_tqt.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 = \
-'''<img source="fileopen">
-Click this button to open a <em>new file</em>.<br><br>
-You can also select the <b>Open</b> command from the <b>File</b> menu.'''
-
-fileSaveText = \
-'''Click this button to save the file you are editing.<br><br>
-You will be prompted for a filename.<br><br>
-You can also select the <b>Save</b> command from the <b>File</b> menu.'''
-
-filePrintText = \
-'''Click this button to print the file you are editing.<br><br>
-You can also select the <b>Print</b> command from the <b>File</b> menu.'''
-
-
-editorList = []
-
-
-class ApplicationWindow(TQMainWindow):
- def __init__(self):
- TQMainWindow.__init__(self,None,'example application main window',TQt.WDestructiveClose)
-
- self.filename = TQString.null
- self.printer = TQPrinter()
-
- self.fileTools = TQToolBar(self,'file operations')
-
- openIcon = TQPixmap(fileopen)
- self.fileOpen = TQToolButton(TQIconSet(openIcon),'Open File',TQString.null,self.load,self.fileTools,'open file')
-
- saveIcon = TQPixmap(filesave)
- self.fileSave = TQToolButton(TQIconSet(saveIcon),'Save File',TQString.null,self.save,self.fileTools,'save file')
-
- printIcon = TQPixmap(fileprint)
- self.filePrint = TQToolButton(TQIconSet(printIcon),'Print File',TQString.null,self.printDoc,self.fileTools,'print file')
-
- TQWhatsThis.whatsThisButton(self.fileTools)
-
- TQWhatsThis.add(self.fileOpen,fileOpenText)
- TQMimeSourceFactory.defaultFactory().setPixmap('fileopen',openIcon)
- TQWhatsThis.add(self.fileSave,fileSaveText)
- TQWhatsThis.add(self.filePrint,filePrintText)
-
- self.file = TQPopupMenu(self)
- self.menuBar().insertItem('&File',self.file)
-
- self.file.insertItem('&New',self.newDoc,TQt.CTRL + TQt.Key_N)
-
- id = self.file.insertItem(TQIconSet(openIcon),'&Open',self.load,TQt.CTRL + TQt.Key_O)
- self.file.setWhatsThis(id,fileOpenText)
-
- id = self.file.insertItem(TQIconSet(saveIcon),'&Save',self.save,TQt.CTRL + TQt.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(TQIconSet(printIcon),'&Print',self.printDoc,TQt.CTRL + TQt.Key_P)
- self.file.setWhatsThis(id,filePrintText)
-
- self.file.insertSeparator()
-
- self.file.insertItem('&Close',self,SLOT('close()'),TQt.CTRL + TQt.Key_W)
- self.file.insertItem('&Quit',tqApp,SLOT('closeAllWindows()'),TQt.CTRL + TQt.Key_Q)
-
- self.help = TQPopupMenu(self)
- self.menuBar().insertSeparator()
- self.menuBar().insertItem('&Help',self.help)
-
- self.help.insertItem('&About',self.about,TQt.Key_F1)
- self.help.insertItem('About &TQt',self.aboutTQt)
-
- self.e = TQMultiLineEdit(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 = TQFileDialog.getOpenFileName(TQString.null,TQString.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(l.rstrip())
-
- 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 = TQFileDialog.getSaveFileName(TQString.null,TQString.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 = TQPainter()
- p.begin(self.printer)
- p.setFont(self.e.font())
- yPos = 0
- fm = p.fontMetrics()
- metrics = TQPaintDeviceMetrics(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(),TQt.ExpandTabs | TQt.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 = TQMessageBox.information(self,'TQt 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):
- TQMessageBox.about(self,'TQt Application Example',
- 'This example demonstrates simple use of TQMainWindow,\nTQMenuBar and TQToolBar.')
-
- def aboutTQt(self):
- TQMessageBox.aboutTQt(self,'TQt Application Example')
-
-
-a = TQApplication(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
deleted file mode 100755
index d3e0aaf..0000000
--- a/examples2/buttongroups.py
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/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 TQt. This example
-#** program may be used, distributed and modified without limitation.
-#**
-#*****************************************************************************/
-
-import sys
-from python_tqt.qt import *
-
-TRUE = 1
-FALSE = 0
-
-##
-# Creates all child widgets of the ButtonGroups window
-##
-
-class ButtonsGroups( TQWidget ):
- def __init__( self, *args ):
- TQWidget.__init__(*(self,) + args)
-
- # Create Widgets which allow easy layouting
- self.vbox = TQVBoxLayout( self )
- self.box1 = TQHBoxLayout( self.vbox )
- self.box2 = TQHBoxLayout( self.vbox )
-
- # ------- first group
-
- # Create an exclusive button group
- self.grp1 = TQButtonGroup( 1, TQGroupBox.Horizontal, "Button Group 1 (exclusive)", self )
- self.box1.addWidget( self.grp1 )
- self.grp1.setExclusive( TRUE )
-
- # insert 3 radiobuttons
- self.rb11 = TQRadioButton( "&Radiobutton 1", self.grp1 )
- self.rb11.setChecked( TRUE )
- TQRadioButton( "R&adiobutton 2", self.grp1 )
- TQRadioButton( "Ra&diobutton 3", self.grp1 )
-
- # ------- second group
-
- # Create a non-exclusive buttongroup
- self.grp2 = TQButtonGroup( 1, TQGroupBox.Horizontal, "Button Group 2 (non-exclusive)", self )
- self.box1.addWidget( self.grp2 )
- self.grp2.setExclusive( FALSE )
-
- # insert 3 checkboxes
- TQCheckBox( "&Checkbox 1", self.grp2 )
- self.cb12 = TQCheckBox( "C&heckbox 2", self.grp2 )
- self.cb12.setChecked( TRUE )
- self.cb13 = TQCheckBox( "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 = TQButtonGroup( 1, TQGroupBox.Horizontal, "Button Group 3 (Radiobutton-exclusive)", self )
- self.box2.addWidget( self.grp3 )
- self.grp3.setRadioButtonExclusive( TRUE )
-
- # insert three radiobuttons
- self.rb21 = TQRadioButton( "Rad&iobutton 1", self.grp3 )
- self.rb22 = TQRadioButton( "Radi&obutton 2", self.grp3 )
- self.rb23 = TQRadioButton( "Radio&button 3", self.grp3 )
- self.rb23.setChecked( TRUE )
-
- # insert a checkbox...
- self.state = TQCheckBox( "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 = TQButtonGroup( 1, TQGroupBox.Horizontal, "Groupbox with normal buttons", self )
- self.box2.addWidget( self.grp4 )
-
- # insert two pushbuttons...
- TQPushButton( "&Push Button", self.grp4 )
- self.tb = TQPushButton( "&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 = TQApplication( 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/desktop.py b/examples2/desktop.py
deleted file mode 100755
index 7f48159..0000000
--- a/examples2/desktop.py
+++ /dev/null
@@ -1,219 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-from python_tqt.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 = TQApplication.desktop()
- d.setPaletteBackgroundColor(white)
- xvel = [ 0 ] * 8
- yvel = [ 0 ] * 8
- head = 0
- tail = -maxcurves + 2
- a = TQPointArray() * 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 = TQPainter()
- paint.begin(d)
-
- for ntimes in range(2000):
- paint.setBrush(TQColor(kindaRand()%360,180,255, TQColor.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 = TQImage(w, h, 8, 128)
- for i in range(128):
- image.setColor(i, tqRgb(i,0,0))
- for y in range(h):
- for x in range(w):
- image.setPixel(x,y,(x+y)%128)
-
- pm = TQPixmap()
- pm.convertFromImage(image)
- #pm.optimize(1)
-
- d = TQApplication.desktop()
-
- for i in range(0,361,2):
- m = TQWMatrix()
- m.rotate(i)
- rpm = pm.xForm(m)
- d.setPaletteBackgroundPixmap(rpm)
- d.update()
-
-def generateStone(pm, c1, c2, c3):
- p = TQPainter()
- p1 = TQPen(c1, 0)
- p2 = TQPen(c2, 0)
- p3 = TQPen(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(TQWidget):
- def __init__(self, s, parent=None, name=''):
- TQWidget.__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 = TQPixmap(64, 64)
- generateStone(self.pm, c1, c2, c3)
- self.setPaletteBackgroundPixmap(self.pm)
- self.update()
- br = self.fontMetrics().boundingRect(self.text)
- offscreen = TQPixmap(br.width(), br.height())
- x = self.width()/2 - br.width()/2
- y = self.height()/2 - br.height()/2
- offscreen.fill(self, x, y)
- p = TQPainter()
- 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()
- tqApp.exec_loop()
-
-def desktopText(s='Troll Tech'):
- border = 20
-
- c1 = tqApp.palette().normal().background()
- c2 = c1.light(104)
- c3 = c1.dark(106)
-
- pm = TQPixmap(10, 10)
- p = TQPainter()
- p.begin(pm)
- r = p.fontMetrics().boundingRect(s)
- p.end()
-
- appWidth = tqApp.desktop().width()
- appHeight = tqApp.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()
-
- tqApp.desktop().setPaletteBackgroundPixmap(pm)
-
-a = TQApplication(sys.argv)
-if len(sys.argv) > 1:
- f = TQFont('charter', 96, TQFont.Weight.Black)
- f.setStyleHint(TQFont.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
deleted file mode 100755
index ef8bcd7..0000000
--- a/examples2/dirview.py
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-from python_tqt.qt import *
-
-class Directory(TQListViewItem):
- def __init__(self, parent, name=None):
- TQListViewItem.__init__(*(self,parent))
- if isinstance(parent, TQListView):
- 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 = TQDir(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 = TQListViewItem(self, fileName, 'Symbolic Link')
- elif f.isDir():
- d = Directory(self, fileName)
- else:
- if f.isFile():
- s = 'File'
- else:
- s = 'Special'
- d = TQListViewItem(self, fileName, s)
- self.c.append(d)
-
- TQListViewItem.setOpen(self, o)
-
- def setup(self):
- self.setExpandable(1)
- TQListViewItem.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 = TQApplication(sys.argv)
-mw = TQListView()
-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/dropsite.py b/examples2/dropsite.py
deleted file mode 100644
index 461b44e..0000000
--- a/examples2/dropsite.py
+++ /dev/null
@@ -1,96 +0,0 @@
-# This is part of the dragdrop example.
-
-
-from python_tqt.qt import *
-
-import secret
-
-
-class DropSite(TQLabel):
- def __init__(self, parent=None, name=None):
- TQLabel.__init__( self, parent, name )
- self.setAcceptDrops(1)
-
- # this is a normal event
- def mousePressEvent( self, e ):
- if ( self.pixmap() ) :
- drobj = TQImageDrag( self.pixmap().convertToImage(), self )
- pm = TQPixmap()
- pm.convertFromImage(self.pixmap().convertToImage().smoothScale(
- self.pixmap().width()/3,self.pixmap().height()/3))
- drobj.setPixmap(pm,TQPoint(-5,-7))
- else :
- drobj = TQTextDrag( 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
- TQTextDrag.canDecode( e ) or
- TQImageDrag.canDecode( e ) or
- TQUriDrag.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(TQString &)'), (TQString(t),))
- self.setPaletteBackgroundColor(TQt.white)
-
- def dragLeaveEvent( self, TQDragLeaveEvent ):
- # Give the user some feedback...
- self.emit(PYSIGNAL('message(TQString &)'), (TQString(''),))
- self.setPaletteBackgroundColor(TQt.lightGray)
-
- def dropEvent( self, e ):
- self.setPaletteBackgroundColor(TQt.lightGray)
- # Try to decode to the data you understand...
- str = TQString()
- if ( TQTextDrag.decode( e, str ) ) :
- self.setText( str )
- self.setMinimumSize( self.minimumSize().expandedTo(self.sizeHint()) )
- return
-
- pm = TQPixmap()
- if ( TQImageDrag.decode( e, pm ) ) :
- self.setPixmap( pm )
- self.setMinimumSize(self.minimumSize().expandedTo(self.sizeHint()))
- return
-
- # TQStrList strings
- #strings = TQStrList()
- strings = []
- if ( TQUriDrag.decode( e, strings ) ) :
- m = TQString("Full URLs:\n")
- for u in strings:
- m = m + " " + u + '\n'
- # TQStringList files
- files = []
- if ( TQUriDrag.decodeLocalFiles( e, files ) ) :
- m += "Files:\n"
- # for (TQStringList.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
deleted file mode 100755
index 54734cc..0000000
--- a/examples2/gears.py
+++ /dev/null
@@ -1,235 +0,0 @@
-#!/usr/bin/env python
-
-
-import sys
-import math
-from python_tqt.qt import *
-from python_tqt.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(TQGLWidget):
- def __init__(self,parent=None,name=None):
- TQGLWidget.__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__':
- TQApplication.setColorSpec(TQApplication.CustomColor)
- app=TQApplication(sys.argv)
-
- if not TQGLFormat.hasOpenGL():
- raise Exception('No TQt OpenGL support.')
-
- widget=GearWidget()
- app.setMainWidget(widget)
- widget.show()
- app.exec_loop()
diff --git a/examples2/menu.py b/examples2/menu.py
deleted file mode 100755
index 28e5a88..0000000
--- a/examples2/menu.py
+++ /dev/null
@@ -1,301 +0,0 @@
-#!/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 PyTQt. This example
-#** program may be used, distributed and modified without limitation.
-#**
-#*****************************************************************************/
-
-import sys, string
-from python_tqt.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( TQCustomMenuItem ):
-# def __init__( self, s=None, f=None ):
-# apply( TQCustomMenuItem.__init__,( self, s, f ) )
-# string = TQString( s )
-# font = TQFont( f )
-
-# def paint( self, p, TRUE, FALSE, x, y, w, h ) :
-# p.setFont ( font )
-# p.drawText( x, y, w, h, TQt.AlignLeft | TQt.AlignVCenter | TQt.ShowPrefix | TQt.DontClip, string )
-# def sizeHint( self ):
-# return TQFontMetrics( font ).size( TQt.AlignLeft | TQt.AlignVCenter | TQt.ShowPrefix | TQt.DontClip, string )
-
-
-#
-### Implementation of MenuExample class
-#
-
-class MenuExample( TQWidget ):
- def __init__( self, parent=None, name=None ):
- TQWidget.__init__(*(self, parent, name))
- self.p1 = TQIconSet( TQPixmap ( p1_xpm ) )
- self.p2 = TQIconSet( TQPixmap ( p2_xpm ) )
- self.p3 = TQIconSet( TQPixmap ( p3_xpm ) )
- self.p4 = TQIconSet( TQPixmap ( p4_xpm ) )
- #openIcon = TQPixmap()
- #saveIcon = TQPixmap()
- #printIcon = TQPixmap()
-
- self.printer = TQPopupMenu( self )
- #TQ_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 = TQPopupMenu( self )
- #TQ_CHECK_PTR( self.file );
- self.file.insertItem( self.p1, "&Open", self.open, TQt.CTRL+TQt.Key_O )
- self.file.insertItem( self.p2, "&New", self.news, TQt.CTRL+TQt.Key_N )
- self.file.insertItem( self.p3, "&Save", self.save, TQt.CTRL+TQt.Key_S )
- self.file.insertItem( "&Close", self.closeDoc, TQt.CTRL+TQt.Key_W )
- self.file.insertSeparator()
- self.file.insertItem( self.p4, "&Print", self.printer, TQt.CTRL+TQt.Key_P )
- self.file.insertSeparator()
- self.file.insertItem( "E&xit", tqApp, SLOT( "quit()" ), TQt.CTRL+TQt.Key_Q )
-
- self.edit = TQPopupMenu( self )
- #TQ_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 = TQPopupMenu( self )
- #TQ_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 = TQFont( self.options.font() )
- self.f.setBold( TRUE )
- self.boldID = self.options.insertItem( "&Bold" )
- self.options.setAccel( TQt.CTRL+TQt.Key_B, self.boldID )
- self.options.connectItem( self.boldID, self.bold )
-
- self.f = TQFont( self.options.font() )
- self.f.setUnderline( TRUE )
- self.underlineID = self.options.insertItem( "&Underline" )
- self.options.setAccel( TQt.CTRL+TQt.Key_U, self.underlineID )
- self.options.connectItem( self.underlineID, self.underline )
-
- self.isBold = FALSE
- self.isUnderline = FALSE
- self.options.setCheckable( TRUE )
-
- self.options = TQPopupMenu()
- #TQ_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 = TQPopupMenu( self )
- #TQ_CHECK_PTR( self.help )
- self.help.insertItem( "&About", self.about, TQt.CTRL+TQt.Key_H )
- self.help.insertItem( "About &TQt", self.aboutTQt )
-
- self.menu = TQMenuBar( self )
- #TQ_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( TQMenuBar.InWindowsStyle )
-
- self.label = TQLabel( self )
- #TQ_CHECK_PTR( self.label )
- self.label.setGeometry( 20, self.rect().center().y()-20, self.width()-40, 40 )
- self.label.setFrameStyle( TQFrame.Box | TQFrame.Raised )
- self.label.setLineWidth( 1 )
- self.label.setAlignment( TQt.AlignCenter )
-
- self.label.setFont( TQFont( "times", 12, TQFont.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 ):
- TQMessageBox.about( self, "TQt Menu Example",
- "This example demonstrates simple use of TQt menus.\n"
- "You can cut and paste lines from it to your own\n"
- "programs." )
-
- def aboutTQt( self ):
- TQMessageBox.aboutTQt( self, "TQt 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 = TQApplication( 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/qtlogo.png b/examples2/qtlogo.png
deleted file mode 100644
index d45fbd4..0000000
--- a/examples2/qtlogo.png
+++ /dev/null
Binary files differ
diff --git a/examples2/secret.py b/examples2/secret.py
deleted file mode 100644
index d68bd1b..0000000
--- a/examples2/secret.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# This is part of the dragdrop example.
-
-
-from python_tqt.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 TQString("The secret number is "+str(ord(payload)) )
-
- return None
-
-
-class SecretDrag(TQStoredDrag):
- def __init__(self, secret, parent=None, name=None):
- TQStoredDrag.__init__(self, 'secret/magic', parent, name)
- data = TQByteArray(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(TQLabel):
- def __init__(self, secret, parent=None, name=None):
- TQLabel.__init__(self, "Secret", parent, name)
- self.setPaletteBackgroundColor( TQt.blue.light() )
- self.setFrameStyle( TQLabel.Box | TQLabel.Sunken )
- self.setMinimumHeight( self.sizeHint().height()*2 )
- self.setAlignment( TQLabel.AlignCenter )
- self.mySecret = secret
-
- def mousePressEvent(self, e):
- sd = SecretDrag( self.mySecret, self )
- sd.setPixmap(TQPixmap(picture_xpm),TQPoint(8,8))
- sd.dragCopy()
- self.mySecret = self.mySecret + 1
diff --git a/examples2/semaphore.py b/examples2/semaphore.py
deleted file mode 100755
index f1a2b7a..0000000
--- a/examples2/semaphore.py
+++ /dev/null
@@ -1,203 +0,0 @@
-#!/usr/bin/env python
-#
-# A port of the semaphore example from TQt.
-
-
-import sys
-
-# Check if thread support was enabled.
-try:
- from python_tqt.qt import TQThread
-except:
- print("Thread support not enabled")
- sys.exit(1)
-
-from python_tqt.qt import *
-
-
-# The semaphore instances.
-yellowSem = None
-greenSem = None
-
-
-class YellowThread(TQThread):
- def __init__(self,o):
- TQThread.__init__(self)
-
- self.receiver = o
- self.stopped = 0
- self.mutex = TQMutex()
-
- def run(self):
- global yellowSem, greenSem
-
- for i in range(20):
- yellowSem += 1
-
- event = TQCustomEvent(12345)
- event.setData(TQString("Yellow!"))
- TQThread.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 = TQCustomEvent(12346)
- event.setData(TQString("Yellow!"))
- TQThread.postEvent(self.receiver,event)
-
- greenSem -= 1
-
- def stop(self):
- self.mutex.lock()
- self.stopped = 1
- self.mutex.unlock()
-
-
-class GreenThread(TQThread):
- def __init__(self,o):
- TQThread.__init__(self)
-
- self.receiver = o
- self.stopped = 0
- self.mutex = TQMutex()
-
- def run(self):
- global yellowSem, greenSem
-
- for i in range(20):
- greenSem += 1
-
- event = TQCustomEvent(12345)
- event.setData(TQString("Green!"))
- TQThread.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 = TQCustomEvent(12346)
- event.setData(TQString("Green!"))
- TQThread.postEvent(self.receiver,event)
- self.msleep(10)
-
- yellowSem -= 1
-
- def stop(self):
- self.mutex.lock()
- self.stopped = 1
- self.mutex.unlock()
-
-
-class SemaphoreExample(TQWidget):
- def __init__(self):
- TQWidget.__init__(self)
-
- self.yellowThread = YellowThread(self)
- self.greenThread = GreenThread(self)
-
- global yellowSem, greenSem
- yellowSem = TQSemaphore(1)
- greenSem = TQSemaphore(1)
-
- self.button = TQPushButton("&Ignition!",self)
- self.connect(self.button,SIGNAL("clicked()"),self.startExample)
-
- self.mlineedit = TQMultiLineEdit(self)
- self.label = TQLabel(self)
-
- vbox = TQVBoxLayout(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():
- TQMessageBox.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.setPaletteBackgroundColor(TQt.green)
- else:
- self.label.setPaletteBackgroundColor(TQt.yellow)
-
- self.label.setText(s)
-
- del s
- elif event.type() == 12346:
- s = event.data()
-
- TQMessageBox.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 = TQApplication(sys.argv)
-se = SemaphoreExample()
-app.setMainWidget(se)
-se.show()
-
-sys.exit(app.exec_loop())
diff --git a/examples2/splitter.py b/examples2/splitter.py
deleted file mode 100755
index 3d7450c..0000000
--- a/examples2/splitter.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-from python_tqt.qt import *
-
-class Test(TQWidget):
- def __init__(self, parent=None, name='Test', f=0):
- TQWidget.__init__(self, parent, name, f)
-
- def paintEvent(self, e):
- p = TQPainter(self)
- p.setClipRect(e.rect())
- d = 1000
- x1 = 0
- x2 = self.width() - 1
- y1 = 0
- y2 = self.height() - 1
-
- x = int((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 = int((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 = TQApplication(sys.argv)
-
- s1 = TQSplitter(TQt.Vertical, None, "main")
- s2 = TQSplitter(TQt.Horizontal, s1, "top")
-
- t1 = Test(s2)
- t1.setPaletteBackgroundColor(TQt.blue.light(180))
- t1.setMinimumSize(50,0)
-
- t2 = Test(s2)
- t2.setPaletteBackgroundColor(TQt.green.light(180))
- s2.setResizeMode(t2, TQSplitter.KeepSize)
- s2.moveToFirst(t2)
-
- s3 = TQSplitter(TQt.Horizontal, s1, "bottom")
-
- t3 = Test(s3)
- t3.setPaletteBackgroundColor(TQt.red)
- t4 = Test(s3)
- t4.setPaletteBackgroundColor(TQt.white)
-
- t5 = Test(s3)
- t5.setMaximumHeight(250)
- t5.setMinimumSize(80,50)
- t5.setPaletteBackgroundColor(TQt.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
deleted file mode 100755
index f9db886..0000000
--- a/examples2/table.py
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-from python_tqt.qt import *
-
-class Table(TQTableView):
- def __init__(self, numRows, numCols, parent=None, name=''):
- TQTableView.__init__(self, parent, name)
- self.curRow = self.curCol = 0
- self.setFocusPolicy(TQWidget.StrongFocus)
- self.setBackgroundMode(TQWidget.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(TQt.DotLine)
- p.drawRect(0, 0, x2, y2)
- p.setPen(TQt.SolidLine)
-
- p.drawText(0,0,w,h,TQt.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 = TQApplication(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
deleted file mode 100755
index 4465348..0000000
--- a/examples2/themes.py
+++ /dev/null
@@ -1,2484 +0,0 @@
-#!/usr/bin/env python
-
-# This is a port to PyTQt of the TQt 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 python_tqt.qt import *
-
-
-class ButtonsGroups(TQVBox):
-
- def __init__(self, parent=None, name=None):
- TQVBox.__init__(self, parent, name)
-
- # Create widgets which allow easy layouting
- box1=TQHBox(self)
- box2=TQHBox(self)
-
- # first group
-
- # Create an exclusive button group
- grp1=TQButtonGroup( 1
- , TQGroupBox.Horizontal
- , "Button Group 1 (exclusive)"
- , box1
- )
- grp1.setExclusive(TRUE)
-
- # insert 3 radiobuttons
- rb11=TQRadioButton("&Radiobutton 1", grp1)
- rb11.setChecked(TRUE)
- TQRadioButton("R&adiobutton 2", grp1)
- TQRadioButton("Ra&diobutton 3", grp1)
-
- # second group
-
- # Create a non-exclusive buttongroup
- grp2=TQButtonGroup( 1
- , TQGroupBox.Horizontal
- , "Button Group 2 (non-exclusive)"
- , box1
- )
- grp2.setExclusive(FALSE)
-
- # insert 3 checkboxes
- TQCheckBox("&Checkbox 1", grp2)
- cb12=TQCheckBox("C&heckbox 2", grp2)
- cb12.setChecked(TRUE)
- cb13=TQCheckBox("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=TQButtonGroup( 1
- , TQGroupBox.Horizontal
- , "Button Group 3 (Radiobutton-exclusive)"
- , box2
- )
- grp3.setRadioButtonExclusive(TRUE)
-
- # insert three radiobuttons
- self.rb21=TQRadioButton("Rad&iobutton 1", grp3)
- self.rb22=TQRadioButton("Radi&obutton 2", grp3)
- self.rb23=TQRadioButton("Radio&button 3", grp3)
- self.rb23.setChecked(TRUE)
-
- # insert a checkbox...
- self.state=TQCheckBox("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=TQGroupBox( 1
- , TQGroupBox.Horizontal
- , "Groupbox with normal buttons"
- , box2
- )
-
- # insert two pushbuttons...
- TQPushButton("&Push Button", grp4)
- tb=TQPushButton("&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(TQVBox):
-
- def __init__(self, parent=None, name=None):
- TQVBox.__init__(self, parent, name)
-
- self.setMargin(10)
-
- # Widget for layouting
- row1=TQHBox(self)
- row1.setMargin(5)
-
- # Create a label
- TQLabel("Echo Mode: ", row1)
-
- # Create a Combobox with three items...
- self.combo1=TQComboBox(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=TQLineEdit(self)
-
- # another widget which is used for layouting
- row2=TQHBox(self)
- row2.setMargin(5)
-
- # and the second label
- TQLabel("Validator: ", row2)
-
- # A second Combobox with again three items...
- self.combo2=TQComboBox(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=TQLineEdit(self)
-
- # yet another widget which is used for layouting
- row3=TQHBox(self)
- row3.setMargin(5)
-
- # we need a label for this too
- TQLabel("Alignment: ", row3)
-
- # A combo box for setting alignment
- self.combo3=TQComboBox(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=TQLineEdit(self)
-
- # give the first LineEdit the focus at the beginning
- self.lined1.setFocus()
-
- def slotEchoChanged(self, i):
- if i == 0:
- self.lined1.setEchoMode(TQLineEdit.EchoMode.Normal)
- elif i == 1:
- self.lined1.setEchoMode(TQLineEdit.EchoMode.Password)
- elif i == 2:
- self.lined1.setEchoMode(TQLineEdit.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=TQIntValidator(self.lined2)
- self.lined2.setValidator(self.validator)
- elif i == 2:
- self.validator=TQDoubleValidator(-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(TQt.AlignLeft)
- elif i == 1:
- self.lined3.setAlignment(TQt.AlignCenter)
- elif i == 2:
- self.lined3.setAlignment(TQt.AlignRight)
-
- self.lined3.setFocus()
-
-
-class ProgressBar(TQVBox):
-
- def __init__(self, parent=None, name=None):
- TQVBox.__init__(self, parent, name)
-
- self.timer=TQTimer()
-
- self.setMargin(10)
-
- # Create a radiobutton-exclusive Buttongroup which aligns its childs in two
- # columns
- bg=TQButtonGroup(2, TQGroupBox.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=TQRadioButton("&Slow", bg)
- self.start=TQPushButton("S&tart", bg)
- self.normal=TQRadioButton("&Normal", bg)
- self.reset=TQPushButton("&Reset", bg)
- self.fast=TQRadioButton("&Fast", bg)
-
- # Create the progressbar
- self.progress=TQProgressBar(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(TQVBox):
-
- def __init__(self, parent=None, name=None):
- TQVBox.__init__(self, parent, name)
-
- self.setMargin(5)
-
- row1=TQHBox(self)
- row1.setMargin(5)
-
- # Create a multi-selection ListBox...
- self.lb1=TQListBox(row1)
- self.lb1.setMultiSelection(TRUE)
-
- # ...insert a pixmap item...
- self.lb1.insertItem(TQPixmap("qtlogo.png"))
- # ...and 100 text items
- for i in range(100):
- str=TQString("Listbox Item %1").arg(i)
- self.lb1.insertItem(str)
-
- # Create a pushbutton...
- self.arrow1=TQPushButton(" -> ", 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=TQListBox(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(TQListBoxText(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(TQListBoxPixmap(item.pixmap()))
-
-
-class NorwegianWoodStyle(TQMotifStyle):
-
- def __init__(self):
- TQMotifStyle.__init__(self)
-
- def polish(self,o):
- if isinstance(o,TQApplication):
- self.polish_qapplication(o)
- elif isinstance(o,TQWidget):
- self.polish_qwidget(o)
- else:
- TQMotifStyle.polish(self,o)
-
- def unPolish(self,o):
- if isinstance(o,TQApplication):
- self.unPolish_qapplication(o)
- elif isinstance(o,TQWidget):
- self.unPolish_qwidget(o)
- else:
- TQMotifStyle.unPolish(self,o)
-
- def polish_qapplication(self,app):
- global button_xpm, polish_xpm
-
- self.oldPalette=app.palette()
-
- # we simply create a nice TQColorGroup with a couple of fancy wood pixmaps
- # here and apply it to all widgets
-
- img=TQImage(button_xpm)
- orig=TQImage(img)
- orig.detach()
- button=TQPixmap()
- button.convertFromImage(img)
-
- background=TQPixmap(polish_xpm)
-
- for i in range(img.numColors()):
- rgb=img.color(i)
- c=TQColor(rgb)
- (r, g, b)=c.dark().rgb()
- img.setColor(i,tqRgb(r, g, b))
- mid=TQPixmap()
- mid.convertFromImage(img)
-
- img=TQImage(orig)
- for i in range(img.numColors()):
- rgb=img.color(i)
- c=TQColor(rgb)
- (r, g, b)=c.light().rgb()
- img.setColor(i,tqRgb(r, g, b))
- light=TQPixmap()
- light.convertFromImage(img)
-
- img=TQImage(orig)
- for i in range(img.numColors()):
- rgb=img.color(i)
- c=TQColor(rgb)
- (r, g, b)=c.dark().rgb()
- img.setColor(i,tqRgb(r, g, b))
- dark=TQPixmap()
- dark.convertFromImage(img)
-
- op=TQPalette(TQColor(212,140,95))
-
- nor=TQColorGroup(TQBrush(op.normal().foreground()),
- TQBrush(op.normal().button(), button),
- TQBrush(op.normal().light(), light),
- TQBrush(op.normal().dark(), dark),
- TQBrush(op.normal().mid(), mid),
- TQBrush(op.normal().text()),
- TQBrush(TQt.white),
- TQBrush(TQColor(236,182,120)),
- TQBrush(op.normal().background(), background))
- disabled=TQColorGroup(TQBrush(op.disabled().foreground()),
- TQBrush(op.disabled().button(), button),
- TQBrush(op.disabled().light(), light),
- TQBrush(op.disabled().dark()),
- TQBrush(op.disabled().mid(), mid),
- TQBrush(op.disabled().text()),
- TQBrush(TQt.white),
- TQBrush(TQColor(236,182,120)),
- TQBrush(op.disabled().background(), background))
- active=TQColorGroup(TQBrush(op.active().foreground()),
- TQBrush(op.active().button(), button),
- TQBrush(op.active().light(), light),
- TQBrush(op.active().dark()),
- TQBrush(op.active().mid(), mid),
- TQBrush(op.active().text()),
- TQBrush(TQt.white),
- TQBrush(TQColor(236,182,120)),
- TQBrush(op.active().background(), background))
-
- app.setPalette(TQPalette(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("TQTipLabel"):
- return
-
- if w.inherits("TQLCDNumber"):
- return
-
- if not w.isTopLevel():
- if w.inherits("TQLabel") \
- or w.inherits("TQButton") \
- or w.inherits("TQComboBox") \
- or w.inherits("TQGroupBox") \
- or w.inherits("TQSlider") \
- or w.inherits("TQTabWidget") \
- or w.inherits("TQTabBar"):
- w.setAutoMask(TRUE)
-
- def unPolish_qwidget(self,w):
- if w.inherits("TQTipLabel"):
- return
-
- if w.inherits("TQLCDNumber"):
- return
-
- if not w.isTopLevel():
- if w.inherits("TQLabel") \
- or w.inherits("TQButton") \
- or w.inherits("TQComboBox") \
- or w.inherits("TQGroupBox") \
- or w.inherits("TQSlider") \
- or w.inherits("TQTabWidget") \
- or w.inherits("TQTabBar"):
- 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(TQt.NoPen)
- if fill != None:
- newBrush=fill
- else:
- if sunken:
- newBrush=g.brush(TQColorGroup.Mid)
- else:
- newBrush=g.brush(TQColorGroup.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):
- TQMotifStyle.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(TQBrush(g.button(),TQt.NoBrush))
-
- if btn.isDown():
- fill=g.brush(TQColorGroup.Mid)
- elif btn.isOn():
- fill=TQBrush(g.mid(),TQt.Dense4Pattern)
- else:
- fill=g.brush(TQColorGroup.Button)
-
- if btn.isDefault():
- a=TQPointArray([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(TQt.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, TQt.DownArrow, FALSE,
- x2-dx, dx, y1, y2-y1,
- g, btn.isEnabled())
-
- if p.brush().style != TQt.NoBrush:
- p.setBrush(TQt.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,
- TQt.AlignCenter|TQt.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 TQRect(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(TQWindowsStyle):
-
- def __init__(self):
- TQWindowsStyle.__init__(self)
-
- def polish(self,o):
- if isinstance(o,TQApplication):
- self.polish_qapplication(o)
- elif isinstance(o,TQWidget):
- self.polish_qwidget(o)
- else:
- TQWindowsStyle.polish(self,o)
-
- def unPolish(self,o):
- if isinstance(o,TQApplication):
- self.unPolish_qapplication(o)
- elif isinstance(o,TQWidget):
- self.unPolish_qwidget(o)
- else:
- TQWindowsStyle.unPolish(self,o)
-
- def polish_qapplication(self,app):
- global stone1_xpm, stonebright_xpm
-
- self.oldPalette=app.palette()
-
- # we simply create a nice TQColorGroup with a couple of fancy pixmaps here
- # and apply it to all widgets
-
- f=TQFont("times", app.font().pointSize())
- f.setBold(TRUE)
- f.setItalic(TRUE)
- app.setFont(f, TRUE, "TQMenuBar")
- app.setFont(f, TRUE, "TQPopupMenu")
-
- button=TQPixmap(stone1_xpm)
- background=TQPixmap(stonebright_xpm)
- dark=TQPixmap(1,1)
- dark.fill(TQt.red.dark())
- mid=TQPixmap(stone1_xpm)
- light=TQPixmap(stone1_xpm)
- op=app.palette()
-
- backCol=TQColor(227,227,227)
-
- nor=TQColorGroup(TQBrush(op.normal().foreground()),
- TQBrush(op.normal().button(), button),
- TQBrush(op.normal().light(), light),
- TQBrush(op.normal().dark(), dark),
- TQBrush(op.normal().mid(), mid),
- TQBrush(op.normal().text()),
- TQBrush(TQt.white),
- TQBrush(op.normal().base()),
- TQBrush(backCol, background))
- nor.setColor(TQColorGroup.ButtonText, TQt.white)
- nor.setColor(TQColorGroup.Shadow, TQt.black)
- disabled=TQColorGroup(TQBrush(op.disabled().foreground()),
- TQBrush(op.disabled().button(), button),
- TQBrush(op.disabled().light(), light),
- TQBrush(op.disabled().dark()),
- TQBrush(op.disabled().mid(), mid),
- TQBrush(op.disabled().text()),
- TQBrush(TQt.white),
- TQBrush(op.disabled().base()),
- TQBrush(backCol, background))
- active=TQColorGroup(TQBrush(op.active().foreground()),
- TQBrush(op.active().button(), button),
- TQBrush(op.active().light(), light),
- TQBrush(op.active().dark()),
- TQBrush(op.active().mid(), mid),
- TQBrush(op.active().text()),
- TQBrush(TQt.white),
- TQBrush(op.active().base()),
- TQBrush(backCol, background))
- active.setColor(TQColorGroup.ButtonText, TQt.white)
-
- newPalette=TQPalette(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("TQPushButton"):
- w.setBackgroundMode(TQWidget.NoBackground)
-
- def unPolish_qwidget(self,w):
- if w.inherits("TQPushButton"):
- w.setBackgroundMode(TQWidget.PaletteButton)
-
- def drawButton(self, p, x, y, w, h, g, sunken=FALSE, fill=None):
- global img1, metal_xpm
-
- if not img1:
- img1=TQImage(metal_xpm)
-
- scaledImage=img1.smoothScale(w, h)
- pix=TQPixmap()
- pix.convertFromImage(scaledImage)
- p.drawPixmap(x, y, pix)
- g2=TQColorGroup()
- g2.setColor(TQColorGroup.Light, TQt.white)
- g2.setColor(TQColorGroup.Dark, TQt.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(TQBrush(g.button(),TQt.NoBrush))
-
- if btn.isDown():
- fill=g.brush(TQColorGroup.Mid)
- elif btn.isOn():
- fill=TQBrush(g.mid(),TQt.Dense4Pattern)
- else:
- fill=g.brush(TQColorGroup.Button)
-
- if btn.isDefault():
- a=TQPointArray([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(TQt.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, TQt.DownArrow, FALSE,
- x2-dx, dx, y1, y2-y1,
- g, btn.isEnabled())
-
- if p.brush().style != TQt.NoBrush:
- p.setBrush(TQt.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,
- TQt.AlignCenter|TQt.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):
- TQStyle.drawPanel(self, p, x, y, w, h, g, sunken, lineWidth, fill)
-
-
-class Themes(TQMainWindow):
-
- def __init__(self, parent=None, name=None, f=TQt.WType_TopLevel):
- TQMainWindow.__init__(self, parent, name, f)
-
- self.appFont=TQApplication.font()
- self.tabwidget=TQTabWidget(self)
-
- self.buttonsgroups=ButtonsGroups(self.tabwidget)
- self.tabwidget.addTab(self.buttonsgroups,"Buttons/Groups")
- self.hbox=TQHBox(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=TQPopupMenu(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", tqApp.quit, TQt.CTRL | TQt.Key_Q)
-
- self.help=TQPopupMenu(self)
- self.menuBar().insertSeparator()
- self.menuBar().insertItem("&Help", self.help)
- self.help.insertItem("&About", self.about, TQt.Key_F1)
- self.help.insertItem("About &TQt", self.aboutTQt)
-
- self.style=NorwegianWoodStyle()
- tqApp.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()
- tqApp.setStyle(newstyle)
- self.style=newstyle
- tqApp.setFont(self.appFont, TRUE)
- self.selectStyleMenu(self.sWood)
-
- def styleMetal(self):
- newstyle=MetalStyle()
- tqApp.setStyle(newstyle)
- self.style=newstyle
- tqApp.setFont(self.appFont, TRUE)
- self.selectStyleMenu(self.sMetal)
-
- def stylePlatinum(self):
- newstyle=TQPlatinumStyle()
- tqApp.setStyle(newstyle)
- self.style=newstyle
- p=TQPalette(TQColor(239, 239, 239))
- tqApp.setPalette(p, TRUE)
- tqApp.setFont(self.appFont, TRUE)
- self.selectStyleMenu(self.sPlatinum)
-
- def styleWindows(self):
- newstyle=TQWindowsStyle()
- tqApp.setStyle(newstyle)
- self.style=newstyle
- tqApp.setFont(self.appFont, TRUE)
- self.selectStyleMenu(self.sWindows)
-
- def styleCDE(self):
- newstyle=TQCDEStyle(TRUE)
- tqApp.setStyle(newstyle)
- self.style=newstyle
- self.selectStyleMenu(self.sCDE)
-
- p=TQPalette(TQColor(75, 123, 130))
- p.setColor(TQPalette.Active, TQColorGroup.Base, TQColor(55, 77, 78));
- p.setColor(TQPalette.Inactive, TQColorGroup.Base, TQColor(55, 77, 78));
- p.setColor(TQPalette.Disabled, TQColorGroup.Base, TQColor(55, 77, 78));
- p.setColor(TQPalette.Active, TQColorGroup.Highlight, TQt.white);
- p.setColor(TQPalette.Active, TQColorGroup.HighlightedText, TQColor(55, 77, 78));
- p.setColor(TQPalette.Inactive, TQColorGroup.Highlight, TQt.white);
- p.setColor(TQPalette.Inactive, TQColorGroup.HighlightedText, TQColor(55, 77, 78));
- p.setColor(TQPalette.Disabled, TQColorGroup.Highlight, TQt.white);
- p.setColor(TQPalette.Disabled, TQColorGroup.HighlightedText, TQColor(55, 77, 78));
- p.setColor(TQPalette.Active, TQColorGroup.Foreground, TQt.white);
- p.setColor(TQPalette.Active, TQColorGroup.Text, TQt.white);
- p.setColor(TQPalette.Active, TQColorGroup.ButtonText, TQt.white);
- p.setColor(TQPalette.Inactive, TQColorGroup.Foreground, TQt.white);
- p.setColor(TQPalette.Inactive, TQColorGroup.Text, TQt.white);
- p.setColor(TQPalette.Inactive, TQColorGroup.ButtonText, TQt.white);
- p.setColor(TQPalette.Disabled, TQColorGroup.Foreground, TQt.lightGray);
- p.setColor(TQPalette.Disabled, TQColorGroup.Text, TQt.lightGray);
- p.setColor(TQPalette.Disabled, TQColorGroup.ButtonText, TQt.lightGray);
- tqApp.setPalette(p, TRUE)
- tqApp.setFont(TQFont("times", self.appFont.pointSize()), TRUE)
-
- def styleMotif(self):
- newstyle=TQMotifStyle(TRUE)
- tqApp.setStyle(newstyle)
- self.style=newstyle
- p=TQPalette(TQColor(192, 192, 192))
- tqApp.setPalette(p, TRUE)
- tqApp.setFont(self.appFont, TRUE)
- self.selectStyleMenu(self.sMotif)
-
- def styleMotifPlus(self):
- newstyle=TQMotifPlusStyle(TRUE)
- tqApp.setStyle(newstyle)
- self.style=newstyle
- p=TQPalette(TQColor(192, 192, 192))
- tqApp.setPalette(p, TRUE)
- tqApp.setFont(self.appFont, TRUE)
- self.selectStyleMenu(self.sMotifPlus)
-
- def about(self):
- TQMessageBox.about(self, "TQt Themes Example",
- "<p>This example demonstrates the concept of "
- "<b>generalized GUI styles </b> first introduced "
- " with the 2.0 release of TQt.</p>" )
-
- def aboutTQt(self):
- TQMessageBox.aboutTQt(self, "TQt 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):
- TQApplication.setColorSpec(TQApplication.CustomColor)
- TQApplication.setStyle(TQWindowsStyle())
- a=TQApplication(sys.argv)
-
- themes=Themes()
- themes.setCaption('Theme (TQStyle) 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",
-"DNDDDDDDDDDDNDNDNDNNiNNiNiNyiyiyqyyyyIyIcIcIcAsAsAAKAKeKememkmmmTQEQEEaoaoaaFRFFFftftlfPllllpxpxpxHbbbrbrzrzrJddddOdOOjOjOnwwwwwGwGG#GCGC#CCCCCCCMCMMMhMBhB",
-"DDDNDNDNDNDNDDNDiDNDNDiyNNiNNyNyiyqyqyIyIIcIcIAcAsAseAKeKekemkmkEmETQEEoaoaoRFRFFtFtftltlPllplpxpbpbHbbrbrrzrdrdJdddOOOOjOwOwOGwwwGwGGGCGCG#CvCCMCMCCMMMMMM",
-"NNDNDNDNDNDNDiDNDNiNiNNDNNyNyqNqyqyqycyIcIcIAIAsAsAKAKKeKkKmkmkEmTQQoQoEaoFoaFRtRFftftfPlPpllpxpbpbHbbbbrzrrdrdrdddOddOOwOOwOwwwwGwGwCGwCGGCvCCvCCChCMCBhMB",
-"DDiDNDNDNDiDNNNiNNDiNyNiyNiyNyyNyyyIqIIcIcIAIcAsAAseKeKemKmkmkQmEETQEoaEaoaFRoFFtttftltlPlPppxppxbpbHbrrrrzrzrdddJdOdjOOOjwOwwOGwGwGGw#CGGCvCvCCCMMCMhCMCBM",
-"iNNNiNiNiNNiDNDNNiNyNiNiNyNyiyqyqIqyIIyIcIcIcAsAsKAKAKeKeekmkmEkTQQEEQaooaRoFFtRFFftltflPllllppxpHbpbHbbzrrdrdrOrOddOOjOwOOGOwGwwGwGwCGGCGCCGCCMvCCMCMMhMMB",
-"NiNNNNNNNNiNiNiNiNNNiyNyiqyNyqyyyyIyIcIcIAcAsAsAAAseKeKmkmkmkQmEETQEoaEaoRoFRRFtfttftlPtllppxpxpbpbbrbrrbrzrdddddOdOOdOOwOwwOGOGwGGGGwCGGCGCCvCvCMMCMhMBChM",
-"iNNiiNiiNiNNiNiNyiyNyNyNyyqyqyyqIqycIcIcIsIsAsAAseKeKeeeKmkmmkTQQQoEQooaoFaFRFFRFtftPtlllPplpxpbpbbHbbbrrzrrdrdrdddOdwOOjOwOwwwwGwGwCGGGCGCGCGCCCMCMCMCMMMB",
-"NyNiNiNiNiNiyNiyNNyiNyqyNyyqyyqIIIIIcIcAIAcAsAsKAKKeKkmkmkmkTQEQEEQaoaoaaoFRFFtftftflPlPllpxppxpbbpbbrbrzrrdrdOJOdOOOOOwOwOwwOGwGwGGw#CGCGCvCCCvMCMMMhMhBMh",
-"yNiyNyNyiyNyiNyNiyqyyiyqyqyyyIIIycIcIAsIcAsAsAKAeKeKeeKmkmkmEmTQEQoEEaoRoRFRFRtFttltftlPlplppxpbpbHrbbrrrrdrddrOrdOdOdwOwOwOGwGwwGGwCGwCGCGCCvMCCMCMCCBMMMB",
-"qyNyiqyNyNyNyyqyyNyqyyqyyyqIIyIycIcIcIAcAsAAAKsKKeKemkmkmkmQkEETQEoaoaoaFFRFFtRftftlPllllpxpxpbbHpbbrrrzrzrdJrOdOOdOjOOOwOwwwOGGwGG#GGCGCGCvCCvCMCCMhMCMBMh",
-"NyqyqyNyqyqyqyNyqyqyqyyIqIIyIcIcIIcIAsIAsAsAsAeAKeKkKkKmkmETQEQEQaoEaoaRFoRFRfttftPflPlPplpxppHpbbrHbbzrrzrdrdddddOOdwOwOwwOwGwGwGwCwCGGCGCCGCCCCMMCMMMMhMB",
-"yqyqyyqyqyqyqyqyyqyyIyqIyIyIcIIcIsAIcAsAAsAKKKKeeKmemmmkmQkTQEQEoEaoaoFoFRFFtFtftftltlllpplpxbpbHbbbrrrzrdrdddJdOdOOOOjOwOwwwwwGwGGGGGCGCGCvCCGMMCMMhMBCBMB",
-"yyyyyqyyqyyqyyyqyyyIyIyIIcIcIIcIAIcAsAsAsKAeAKeKekKmkkmQkmTQEQEoQaooaoaFRFRtFttftPlPllPplpxpxpbpbbHrbzrrrrdrdrOddOdjOwOwOwwOGOGwGw#GGCGCGCCGCCMCCMChCMMMhMB",
-"IqyqyyqyyyqyyqIIIIqIIIIcIIcIccIscAsAsAAAKAsKeeKekmekmmkmEEETQEEoaoaoaRFoFFFtftftltlPlPplpxpxpbbbHbrbrrzrdzddddddOOOOOOwOwO#wGGwGGGCw#GCGCvCCvMCMCMMMMBCBMBM",
-"IyIIIIIIIIIIIIyIyIIIyIcIccIcIcAIAsAsAAsKsKKeKeKmeKmkmkEmTQQQEQaoEaoaRoFRFRtRFtftfltlPlplxpppbbpHbbbrbrrzrdrdrJOdOdOdwOwOwwwOwwGwwGwCGCGCGCCGCCCvMCMCMMhMhMB",
-"IIIyIyIyIyIyIyIcIcIccIcIcAIAcAsAsAsAsKKAeKeKekKkkmkmkmQkEEEQoEoaoaoFRFRtFftftftlPlllplppxxpbpbbbrHrzrzrdrddOddOOOjOOwOwOwwGwGwG#GGGCwCGCvCCMvMCMMMhMBMBMBh",
-"cIcIcIcIcIcIcIcIcIcIcIcIAscsAIAsAAsAKAKeKeKkeKmemkmkQmTQEQEQoEoaoaoFRRFFRtFttltPltPpPlppxppbpbHbHrbrrrrdrdrOrdOddOdwOjOwOGOwwGwGGwCGGvGCGCCvCCCMCMCMhCMMhMB",
-"IcIcIcIcIcIcIcIcIcIAIAcAIAAsAsAsAsKAKseKeKeKmkkmkmmQmkETQEEoaEaoaaRaoFFtFftftfPtllllppxppxbpbbbbbrrzrzrdrdddOdOdOOOOwOwwO#wGwGwG#CwCGCCvCvCCCMCMCMMMBMBhBMh",
-"IAccIcIcIcIcIccIAIAscsAsAIsAsAsAAKAeKeKeKemkemkmmkQkETQEEQoQoaoaoFoFFFRtRttftltllPlPllppxppbHbpHrbbrrrdrddrddOdOOOjOOwwOwwwwGwGGwGGGCGCGCCCvCvMCMhCMMhMMMBB",
-"csAIAsAsAsAAsAsAcsAIAAsAsAAAAAKKsKKKeKeKkeKmkmkmkQmETQEQoEaoaoaoRRFRFRtfFftftPlPlPlppxpxpbbHprrbrrzrzrdrdrOOddOOjOwOwOwO#OGwGwG#CwCGGCGCGCGMCMCMMMMBCBMBMhB",
-"IAsAIAIsIAsIAIAIAsAsAsAsAsAsKsAKeAeeKeKemkmkmkmkQmETQEQEaQoEaoaFoRFRtFFtttftlfltPplplppxpHpbbbbrbbrzrrdrdOdddOdOOOOwOwOwwGwGwGGwGGGCGCvCvCCMCCMCMCMhMMhMBMB",
-"sAsAsAsAsAsAsAsAsAsAsAAAKAKKKeKeKeKeekmKkmkmkmQmETQEQEEoEaoaoaoRFaFFRttftftltlPlpllpxpxpbxbpbHrbrrrrdzdrdrOdOdOjOjOwOwwwOGwwGGGCwGCGCGCCCGMCCMCMMhMBMBMBhBu",
-"sAAsAsAAAsAAsAAsAAAAAsKsKKsAeKKeKeeKkKmkmkmkmmTQEkETQEoQaooaoaRFoRFRFFfFtftftlPlPlplpxpbpbpbbrbrbrzrzrdrdOddOdOOOOOOwOwOwwwwGwGwGGGCGGCGCGCCMvCMMCMMCMMBMuMB",
-"AAsAAAAsAAAsAAsKAsKKAKKKeKeKeKeKekkmmemkmmkQmkETQEQEEoEoaoaoRoFRFFttRtftfftlPtllpPpxpxpbbHbHbbrrzrzrdrddrOddOOjOwOwOwO#wGOGGGw#CGCGCCvCvMCvCMMMCMhBMhhMBMBu",
-"KKAKKsAKKsAKAKKAKKKKKeAeKeKkKeeekKmKmkmkmkmTQEEQETQEoQaoaoaoFaFRFFRFFtfttltlllllplpxpppbpbpbbrbrbrrrdrdrdddOdOdOOOwOwOwGOwGGwGwCwGGCGGCGCCMCMCCMMMMCBMBMBMBB",
-"eAeKKeKKKKKKeKAeKAeeKeKeKeeKkmkmKmkmkmkmQmETQQEQEooQaooaoaRoFRFRFttfttfftlPPlpPppxppxbxbHbrbbrzrzrdrddddOddOOjOwOwOwwwOGwGwGGGGGC#CGCCCvCGMCMMCMhMMMhBMhBuB",
-"eKeKeKKeKeeKeKeKeeeKeKeKeKmemkKkmkmkmkTQQkEkEEQoETQEaEaoaFoaRFRFFRftFftftPltlPlllxppxpbpbpbHbrbrrzrzdrdrdJOdOdOOOOwOwOwwwwGwG#wCGGCGCvCGCCMCMCMhMMCBMBMBMBMB",
-"KeKeKeeKeKeKeKeKeKeKekkkmekmKmmkmmkTQQmETQEQETQEEoQaooaoaoRFFFRFFtFtftftlllPllpppppxpxbpbbrbrbrrzrrdrdddOddOdOjOwOwOwO#wGwGwGGGCwGCGCGCvCCvCMCCMCMhBCMhBMBuBu",
-"kkKeeKeKeeKeKkKkkkkkKmKmkkmkmkkmmkEmmEkTQEQEQoQaoaoaoaaFoFRRFFRtFfttltPtfllPllxlpxpbpbpbHbrbrzrrdrdrdrddOdOOOOdwOwOwwGOwwGw#wGGCGCGCGCCCMCMCMMMMMMhMBMMBMBB",
-"KmekmekekKmememKmKmemkmkmmkmmmmkTQQmkEETQEQoEoaEoEaoaaoFRRFFFRttfttfftllllPlppppxpxpbbHbbrbrrrrzrzdrOddOddOOjOwOwOwwOwwGGGGGCGCGG#CGCCvCvCMCMMChMBMBMMBhBuBu",
-"ekmKkmkmkmkkkmkkmkmkmkmkmkmkmkTQQEQEETQEQoEEaQoaoaoaoFRFoRFRFtFtFftPtfPltPplplxppxpbbpbHbHrbzrzrrdrdddJddOOdOOOjOwOw#OwwGwwGwGwCGCGCCGCCMCvMCMMMhCMMBMBuBMBB",
-"kmkmkmkmkmkmkmkmkmkmkmmkmQmTQQEEmkETQEQEEoQooaooaaRoFRoFFFFttFftftftlltllplPpppxpxpbpbbrbrbrrrzrdrddrOdOOOdjOwOwOwwOGGwGwG#GCGCG#CvCvCMGMCMCMMCMBMBMhBMBMBuB",
-"mkmmmkmmkmmkmmkmmkmmmkQmQkTQEkQETQEEQoEooEaEaoaoaoFaRFFRtRtRtfttftPltPllPllplxpxpbpHbbHbrbrrzrdrddrddOdddOOOOOwOwOwwwwwGwGGGGGGGCGCCGCCMCMCMChMhCMMBMMBuBuBB",
-"TQQQkQmkmmkmmkTQQmkTQQkETQEQETQEQEETQEoQoEoaQaoaoaaaoFRoFRFFFtFfttfftlftllPplppxpxpxpbbbprbrbrrrzrzdrdddddOOOjOjwOwOwwOGwOGwG#GCwC#CGCGCCvCCCMCMMMMBMBhMBhBMBMBu",
-"EkmEkTQQkQQkTQQEkTQEEQEmQkETQEQEEQoEQoEaQaoaoaoaoRFRRFFFRtRftFftftltllPllPlxppxpbpbbpbbHrbrbzrrdrrddrOdOdOdOOOOwOwOwwwGGGGwGwGGGCGCvCCvCCMvCMMCMhMMMMBuMBuBuBB",
-"TQEQETQEQETQEQEmTQEQmETQEQEETQEEQEoEaQaoaooaoaoRRFFoFRFFRFtFtFftftlPflPlplppppxpxpbxpbbbrbbrrrrzrzdrddOdJOdOOjOwOwOwwOGwwGwG#CGCGCGCGCGCCMvCMMMCMhBCBhBMBMBMBBuB",
-"ETQEQETQEQETQEQEETQEEETQEEQEETQEoQaQooEaoaoaoaFoaoRFRFFRtFftftftftltltlPlPplxppxpbpbbHbHbrbzrzrdrdrddOrdOdOjOdwOwOwwOwGwGwGGwGwC#GCGCvCMGCCMCCMMMMMMMBMMBMBuBuBB",
-"TQEEQEETQEEQEETQEQETQEEQooaooaoaooaoaoaaaoRFoFFFRFFFttFttftftPtlPllplpplpxppxpbHbpbbrbrbrrrzrzdrddrOdOdOOOOwOOwOwO#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/tut1.py b/examples2/tut1.py
deleted file mode 100755
index f6e4b47..0000000
--- a/examples2/tut1.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env python
-
-# TQt tutorial 1.
-
-import sys
-from python_tqt.qt import *
-
-
-a = TQApplication(sys.argv)
-
-hello = TQPushButton("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
deleted file mode 100755
index a19ba9c..0000000
--- a/examples2/tut10.py
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/usr/bin/env python
-
-# TQt tutorial 10.
-
-import sys
-from python_tqt.qt import *
-
-
-class LCDRange(TQVBox):
- def __init__(self,parent=None,name=None):
- TQVBox.__init__(self,parent,name)
-
- lcd = TQLCDNumber(2,self,'lcd')
- self.slider = TQSlider(TQt.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(TQWidget):
- def __init__(self,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- self.ang = 45
- self.f = 0
- self.setPalette(TQPalette(TQColor(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 = TQPixmap(cr.size())
- pix.fill(self,cr.topLeft())
-
- p = TQPainter(pix)
-
- p.setBrush(TQt.blue)
- p.setPen(TQt.NoPen)
-
- p.translate(0,pix.height() - 1)
- p.drawPie(TQRect(-35,-35,70,70),0,90 * 16)
- p.rotate(-self.ang)
- p.drawRect(TQRect(33,-4,15,8))
- p.end()
-
- p.begin(self)
- p.drawPixmap(cr.topLeft(),pix)
-
- def cannonRect(self):
- r = TQRect(0,0,50,50)
- r.moveBottomLeft(self.rect().bottomLeft())
- return r
-
- def sizePolicy(self):
- return TQSizePolicy(TQSizePolicy.Expanding,TQSizePolicy.Expanding)
-
-
-class MyWidget(TQWidget):
- def __init__(self,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- quit = TQPushButton('&Quit',self,'quit')
- quit.setFont(TQFont('Times',18,TQFont.Bold))
- self.connect(quit,SIGNAL('clicked()'),tqApp,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 = TQGridLayout(self,2,2,10)
-
- grid.addWidget(quit,0,0)
- grid.addWidget(self.cannonField,1,1)
- grid.setColStretch(1,10)
-
- leftBox = TQVBoxLayout()
-
- grid.addLayout(leftBox,1,0)
-
- leftBox.addWidget(self.angle)
- leftBox.addWidget(self.force)
-
- self.angle.setValue(60)
- self.force.setValue(25)
- self.angle.setFocus()
-
-
-TQApplication.setColorSpec(TQApplication.CustomColor)
-a = TQApplication(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
deleted file mode 100755
index 7979d3d..0000000
--- a/examples2/tut11.py
+++ /dev/null
@@ -1,213 +0,0 @@
-#!/usr/bin/env python
-
-# TQt tutorial 11.
-
-import sys
-import math
-from python_tqt.qt import *
-
-
-class LCDRange(TQVBox):
- def __init__(self,parent=None,name=None):
- TQVBox.__init__(self,parent,name)
-
- lcd = TQLCDNumber(2,self,'lcd')
- self.slider = TQSlider(TQt.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(TQWidget):
- def __init__(self,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- self.ang = 45
- self.f = 0
- self.timerCount = 0
-
- self.autoShootTimer = TQTimer(self,'movement handler')
- self.connect(self.autoShootTimer,SIGNAL('timeout()'),self.moveShot)
-
- self.shoot_ang = 0
- self.shoot_f = 0
-
- self.setPalette(TQPalette(TQColor(250,250,200)))
-
- self.barrelRect = TQRect(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 = TQRegion(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(TQRegion(shotR))
-
- self.repaint(r)
-
- def paintEvent(self,ev):
- updateR = ev.rect()
- p = TQPainter(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(TQt.black)
- p.setPen(TQt.NoPen)
- p.drawRect(self.shotRect())
-
- def paintCannon(self,p):
- cr = self.cannonRect()
- pix = TQPixmap(cr.size())
- pix.fill(self,cr.topLeft())
-
- tmp = TQPainter(pix)
- tmp.setBrush(TQt.blue)
- tmp.setPen(TQt.NoPen)
-
- tmp.translate(0,pix.height() - 1)
- tmp.drawPie(TQRect(-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 = TQRect(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 = TQRect(0,0,6,6)
- r.moveCenter(TQPoint(int(x),int(self.height() - 1 - y))))
- return r
-
- def sizePolicy(self):
- return TQSizePolicy(TQSizePolicy.Expanding,TQSizePolicy.Expanding)
-
-
-class MyWidget(TQWidget):
- def __init__(self,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- quit = TQPushButton('&Quit',self,'quit')
- quit.setFont(TQFont('Times',18,TQFont.Bold))
- self.connect(quit,SIGNAL('clicked()'),tqApp,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 = TQPushButton('&Shoot',self,'shoot')
- shoot.setFont(TQFont('Times',18,TQFont.Bold))
- self.connect(shoot,SIGNAL('clicked()'),self.cannonField.shoot)
-
- grid = TQGridLayout(self,2,2,10)
-
- grid.addWidget(quit,0,0)
- grid.addWidget(self.cannonField,1,1)
- grid.setColStretch(1,10)
-
- leftBox = TQVBoxLayout()
- grid.addLayout(leftBox,1,0)
- leftBox.addWidget(self.angle)
- leftBox.addWidget(self.force)
-
- topBox = TQHBoxLayout()
- grid.addLayout(topBox,0,1)
- topBox.addWidget(shoot)
- topBox.addStretch(1)
-
- self.angle.setValue(60)
- self.force.setValue(25)
- self.angle.setFocus()
-
-
-TQApplication.setColorSpec(TQApplication.CustomColor)
-a = TQApplication(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
deleted file mode 100755
index 8b2a700..0000000
--- a/examples2/tut12.py
+++ /dev/null
@@ -1,252 +0,0 @@
-#!/usr/bin/env python
-
-# TQt tutorial 12.
-
-import sys
-import math
-import random
-from python_tqt.qt import *
-
-
-class LCDRange(TQVBox):
- def __init__(self,s=None,parent=None,name=None):
- TQVBox.__init__(self,parent,name)
-
- lcd = TQLCDNumber(2,self,'lcd')
- self.slider = TQSlider(TQt.Horizontal,self,'slider')
- self.slider.setRange(0,99)
- self.slider.setValue(0)
-
- self.label = TQLabel(' ',self,'label')
- self.label.setAlignment(TQt.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(TQWidget):
- def __init__(self,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- self.ang = 45
- self.f = 0
- self.timerCount = 0
-
- self.autoShootTimer = TQTimer(self,'movement handler')
- self.connect(self.autoShootTimer,SIGNAL('timeout()'),self.moveShot)
-
- self.shoot_ang = 0
- self.shoot_f = 0
- self.target = TQPoint(0,0)
-
- self.setPalette(TQPalette(TQColor(250,250,200)))
-
- self.barrelRect = TQRect(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 = TQRegion(self.targetRect())
- self.target = TQPoint(random.randint(200,390),random.randint(10,265))
- self.repaint(r.unite(TQRegion(self.targetRect())))
-
- def moveShot(self):
- r = TQRegion(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(TQRegion(shotR))
-
- self.repaint(r)
-
- def paintEvent(self,ev):
- updateR = ev.rect()
- p = TQPainter(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(TQt.black)
- p.setPen(TQt.NoPen)
- p.drawRect(self.shotRect())
-
- def paintTarget(self,p):
- p.setBrush(TQt.red)
- p.setPen(TQt.black)
- p.drawRect(self.targetRect())
-
- def paintCannon(self,p):
- cr = self.cannonRect()
- pix = TQPixmap(cr.size())
- pix.fill(self,cr.topLeft())
-
- tmp = TQPainter(pix)
- tmp.setBrush(TQt.blue)
- tmp.setPen(TQt.NoPen)
-
- tmp.translate(0,pix.height() - 1)
- tmp.drawPie(TQRect(-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 = TQRect(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 = TQRect(0,0,6,6)
- r.moveCenter(TQPoint(int(x),int(self.height() - 1 - y)))
- return r
-
- def targetRect(self):
- r = TQRect(0,0,20,10)
- r.moveCenter(TQPoint(self.target.x(),self.height() - 1 - self.target.y()))
- return r
-
- def sizePolicy(self):
- return TQSizePolicy(TQSizePolicy.Expanding,TQSizePolicy.Expanding)
-
-
-class MyWidget(TQWidget):
- def __init__(self,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- quit = TQPushButton('&Quit',self,'quit')
- quit.setFont(TQFont('Times',18,TQFont.Bold))
- self.connect(quit,SIGNAL('clicked()'),tqApp,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 = TQPushButton('&Shoot',self,'shoot')
- shoot.setFont(TQFont('Times',18,TQFont.Bold))
- self.connect(shoot,SIGNAL('clicked()'),self.cannonField.shoot)
-
- grid = TQGridLayout(self,2,2,10)
-
- grid.addWidget(quit,0,0)
- grid.addWidget(self.cannonField,1,1)
- grid.setColStretch(1,10)
-
- leftBox = TQVBoxLayout()
- grid.addLayout(leftBox,1,0)
- leftBox.addWidget(self.angle)
- leftBox.addWidget(self.force)
-
- topBox = TQHBoxLayout()
- grid.addLayout(topBox,0,1)
- topBox.addWidget(shoot)
- topBox.addStretch(1)
-
- self.angle.setValue(60)
- self.force.setValue(25)
- self.angle.setFocus()
-
-
-TQApplication.setColorSpec(TQApplication.CustomColor)
-a = TQApplication(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
deleted file mode 100755
index f33c683..0000000
--- a/examples2/tut13.py
+++ /dev/null
@@ -1,329 +0,0 @@
-#!/usr/bin/env python
-
-# TQt tutorial 13.
-
-import sys
-import math
-import random
-from python_tqt.qt import *
-
-
-class LCDRange(TQWidget):
- def __init__(self,s=None,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- lcd = TQLCDNumber(2,self,'lcd')
- self.slider = TQSlider(TQt.Horizontal,self,'slider')
- self.slider.setRange(0,99)
- self.slider.setValue(0)
-
- self.label = TQLabel(' ',self,'label')
- self.label.setAlignment(TQt.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 = TQVBoxLayout(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(TQWidget):
- def __init__(self,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- self.ang = 45
- self.f = 0
- self.timerCount = 0
-
- self.autoShootTimer = TQTimer(self,'movement handler')
- self.connect(self.autoShootTimer,SIGNAL('timeout()'),self.moveShot)
-
- self.shoot_ang = 0
- self.shoot_f = 0
- self.target = TQPoint(0,0)
- self.gameEnded = 0
-
- self.setPalette(TQPalette(TQColor(250,250,200)))
-
- self.barrelRect = TQRect(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 = TQRegion(self.targetRect())
- self.target = TQPoint(random.randint(200,390),random.randint(10,265))
- self.repaint(r.unite(TQRegion(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 = TQRegion(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(TQRegion(shotR))
-
- self.repaint(r)
-
- def paintEvent(self,ev):
- updateR = ev.rect()
- p = TQPainter(self)
-
- if self.gameEnded:
- p.setPen(TQt.black)
- p.setFont(TQFont('Courier',48,TQFont.Bold))
- p.drawText(self.rect(),TQt.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(TQt.black)
- p.setPen(TQt.NoPen)
- p.drawRect(self.shotRect())
-
- def paintTarget(self,p):
- p.setBrush(TQt.red)
- p.setPen(TQt.black)
- p.drawRect(self.targetRect())
-
- def paintCannon(self,p):
- cr = self.cannonRect()
- pix = TQPixmap(cr.size())
- pix.fill(self,cr.topLeft())
-
- tmp = TQPainter(pix)
- tmp.setBrush(TQt.blue)
- tmp.setPen(TQt.NoPen)
-
- tmp.translate(0,pix.height() - 1)
- tmp.drawPie(TQRect(-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 = TQRect(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 = TQRect(0,0,6,6)
- r.moveCenter(TQPoint(int(x),int(self.height() - 1 - y)))
- return r
-
- def targetRect(self):
- r = TQRect(0,0,20,10)
- r.moveCenter(TQPoint(self.target.x(),self.height() - 1 - self.target.y()))
- return r
-
- def isShooting(self):
- return self.autoShootTimer.isActive()
-
- def sizePolicy(self):
- return TQSizePolicy(TQSizePolicy.Expanding,TQSizePolicy.Expanding)
-
-
-class GameBoard(TQWidget):
- def __init__(self,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- quit = TQPushButton('&Quit',self,'quit')
- quit.setFont(TQFont('Times',18,TQFont.Bold))
- self.connect(quit,SIGNAL('clicked()'),tqApp,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 = TQPushButton('&Shoot',self,'shoot')
- self.shoot.setFont(TQFont('Times',18,TQFont.Bold))
- self.connect(self.shoot,SIGNAL('clicked()'),self.fire)
- self.connect(self.cannonField,PYSIGNAL('canShoot(bool)'),self.shoot,SLOT('setEnabled(bool)'))
-
- restart = TQPushButton('&New Game',self,'newgame')
- restart.setFont(TQFont('Times',18,TQFont.Bold))
- self.connect(restart,SIGNAL('clicked()'),self.newGame)
-
- self.hits = TQLCDNumber(2,self,'hits')
- self.shotsLeft = TQLCDNumber(2,self,'shotsleft')
- hitsL = TQLabel('HITS',self,'hitsLabel')
- shotsLeftL = TQLabel('SHOTS LEFT',self,'shotsleftLabel')
-
- grid = TQGridLayout(self,2,2,10)
- grid.addWidget(quit,0,0)
- grid.addWidget(self.cannonField,1,1)
- grid.setColStretch(1,10)
-
- leftBox = TQVBoxLayout()
- grid.addLayout(leftBox,1,0)
- leftBox.addWidget(self.angle)
- leftBox.addWidget(self.force)
-
- topBox = TQHBoxLayout()
- 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()
-
-
-TQApplication.setColorSpec(TQApplication.CustomColor)
-a = TQApplication(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
deleted file mode 100755
index 998f26f..0000000
--- a/examples2/tut14.py
+++ /dev/null
@@ -1,377 +0,0 @@
-#!/usr/bin/env python
-
-# TQt tutorial 14.
-
-import sys
-import math
-import random
-from python_tqt.qt import *
-
-
-class LCDRange(TQWidget):
- def __init__(self,s=None,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- lcd = TQLCDNumber(2,self,'lcd')
- self.slider = TQSlider(TQt.Horizontal,self,'slider')
- self.slider.setRange(0,99)
- self.slider.setValue(0)
-
- self.label = TQLabel(' ',self,'label')
- self.label.setAlignment(TQt.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 = TQVBoxLayout(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(TQWidget):
- def __init__(self,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- self.ang = 45
- self.f = 0
- self.timerCount = 0
-
- self.autoShootTimer = TQTimer(self,'movement handler')
- self.connect(self.autoShootTimer,SIGNAL('timeout()'),self.moveShot)
-
- self.shoot_ang = 0
- self.shoot_f = 0
- self.target = TQPoint(0,0)
- self.gameEnded = 0
- self.barrelPressed = 0
-
- self.setPalette(TQPalette(TQColor(250,250,200)))
-
- self.barrelRect = TQRect(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 = TQRegion(self.targetRect())
- self.target = TQPoint(random.randint(200,390),random.randint(10,265))
- self.repaint(r.unite(TQRegion(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 = TQRegion(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(TQRegion(shotR))
-
- self.repaint(r)
-
- def mousePressEvent(self,ev):
- if ev.button() != TQt.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() == TQt.LeftButton:
- self.barrelPressed = 0
-
- def paintEvent(self,ev):
- updateR = ev.rect()
- p = TQPainter(self)
-
- if self.gameEnded:
- p.setPen(TQt.black)
- p.setFont(TQFont('Courier',48,TQFont.Bold))
- p.drawText(self.rect(),TQt.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(TQt.black)
- p.setPen(TQt.NoPen)
- p.drawRect(self.shotRect())
-
- def paintTarget(self,p):
- p.setBrush(TQt.red)
- p.setPen(TQt.black)
- p.drawRect(self.targetRect())
-
- def paintBarrier(self,p):
- p.setBrush(TQt.yellow)
- p.setPen(TQt.black)
- p.drawRect(self.barrierRect())
-
- def paintCannon(self,p):
- cr = self.cannonRect()
- pix = TQPixmap(cr.size())
- pix.fill(self,cr.topLeft())
-
- tmp = TQPainter(pix)
- tmp.setBrush(TQt.blue)
- tmp.setPen(TQt.NoPen)
-
- tmp.translate(0,pix.height() - 1)
- tmp.drawPie(TQRect(-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 = TQRect(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 = TQRect(0,0,6,6)
- r.moveCenter(TQPoint(int(x),int(self.height() - 1 - y)))
- return r
-
- def targetRect(self):
- r = TQRect(0,0,20,10)
- r.moveCenter(TQPoint(self.target.x(),self.height() - 1 - self.target.y()))
- return r
-
- def barrierRect(self):
- return TQRect(145,self.height() - 100,15,100)
-
- def barrelHit(self,p):
- mtx = TQWMatrix()
- 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 TQSizePolicy(TQSizePolicy.Expanding,TQSizePolicy.Expanding)
-
-
-class GameBoard(TQWidget):
- def __init__(self,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- quit = TQPushButton('&Quit',self,'quit')
- quit.setFont(TQFont('Times',18,TQFont.Bold))
- self.connect(quit,SIGNAL('clicked()'),tqApp,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 = TQVBox(self,'cannonFrame')
- box.setFrameStyle(TQFrame.WinPanel | TQFrame.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 = TQPushButton('&Shoot',self,'shoot')
- self.shoot.setFont(TQFont('Times',18,TQFont.Bold))
- self.connect(self.shoot,SIGNAL('clicked()'),self.fire)
- self.connect(self.cannonField,PYSIGNAL('canShoot(bool)'),self.shoot,SLOT('setEnabled(bool)'))
-
- restart = TQPushButton('&New Game',self,'newgame')
- restart.setFont(TQFont('Times',18,TQFont.Bold))
- self.connect(restart,SIGNAL('clicked()'),self.newGame)
-
- self.hits = TQLCDNumber(2,self,'hits')
- self.shotsLeft = TQLCDNumber(2,self,'shotsleft')
- hitsL = TQLabel('HITS',self,'hitsLabel')
- shotsLeftL = TQLabel('SHOTS LEFT',self,'shotsleftLabel')
-
- accel = TQAccel(self)
- accel.connectItem(accel.insertItem(TQt.Key_Enter),self.fire)
- accel.connectItem(accel.insertItem(TQt.Key_Return),self.fire)
- accel.connectItem(accel.insertItem(TQt.CTRL + TQt.Key_Q),tqApp,SLOT('quit()'))
-
- grid = TQGridLayout(self,2,2,10)
- grid.addWidget(quit,0,0)
- grid.addWidget(box,1,1)
- grid.setColStretch(1,10)
-
- leftBox = TQVBoxLayout()
- grid.addLayout(leftBox,1,0)
- leftBox.addWidget(self.angle)
- leftBox.addWidget(self.force)
-
- topBox = TQHBoxLayout()
- 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()
-
-
-TQApplication.setColorSpec(TQApplication.CustomColor)
-a = TQApplication(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
deleted file mode 100755
index 730b047..0000000
--- a/examples2/tut2.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env python
-
-# TQt tutorial 2.
-
-import sys
-from python_tqt.qt import *
-
-
-a = TQApplication(sys.argv)
-
-quit = TQPushButton("Quit",None)
-quit.resize(75,30)
-quit.setFont(TQFont("Times",18,TQFont.Bold))
-
-TQObject.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
deleted file mode 100755
index b1fe6ee..0000000
--- a/examples2/tut3.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env python
-
-# TQt tutorial 3.
-
-import sys
-from python_tqt.qt import *
-
-a = TQApplication(sys.argv)
-
-box = TQVBox()
-box.resize(200,120)
-
-quit = TQPushButton("Quit",box)
-quit.setFont(TQFont("Times",18,TQFont.Bold))
-
-TQObject.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
deleted file mode 100755
index 76d99bb..0000000
--- a/examples2/tut4.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env python
-
-# TQt tutorial 4.
-
-import sys
-from python_tqt.qt import *
-
-
-class MyWidget(TQWidget):
- def __init__(self,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- self.setMinimumSize(200,120)
- self.setMaximumSize(200,120)
-
- quit = TQPushButton("Quit",self,"quit")
- quit.setGeometry(62,40,75,30)
- quit.setFont(TQFont("Times",18,TQFont.Bold))
-
- self.connect(quit,SIGNAL("clicked()"),tqApp,SLOT("quit()"))
-
-
-a = TQApplication(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
deleted file mode 100755
index c77d843..0000000
--- a/examples2/tut5.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env python
-
-# TQt tutorial 5.
-
-import sys
-from python_tqt.qt import *
-
-
-class MyWidget(TQVBox):
- def __init__(self,parent=None,name=None):
- TQVBox.__init__(self,parent,name)
-
- quit = TQPushButton("Quit",self,"quit")
- quit.setFont(TQFont("Times",18,TQFont.Bold))
-
- self.connect(quit,SIGNAL("clicked()"),tqApp,SLOT("quit()"))
-
- lcd = TQLCDNumber(2,self,"lcd")
-
- slider = TQSlider(TQt.Horizontal,self,"slider")
- slider.setRange(0,99)
- slider.setValue(0)
-
- self.connect(slider,SIGNAL("valueChanged(int)"),lcd,SLOT("display(int)"))
-
-
-a = TQApplication(sys.argv)
-
-w = MyWidget()
-a.setMainWidget(w)
-w.show()
-a.exec_loop()
diff --git a/examples2/tut6.py b/examples2/tut6.py
deleted file mode 100755
index b26121a..0000000
--- a/examples2/tut6.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python
-
-# TQt tutorial 6.
-
-import sys
-from python_tqt.qt import *
-
-
-class LCDRange(TQVBox):
- def __init__(self,parent=None,name=None):
- TQVBox.__init__(self,parent,name)
-
- lcd = TQLCDNumber(2,self,"lcd")
- slider = TQSlider(TQt.Horizontal,self,"slider")
- slider.setRange(0,99)
- slider.setValue(0)
- self.connect(slider,SIGNAL("valueChanged(int)"),lcd,SLOT("display(int)"))
-
-
-class MyWidget(TQVBox):
- def __init__(self,parent=None,name=None):
- TQVBox.__init__(self,parent,name)
-
- quit = TQPushButton("Quit",self,"quit")
- quit.setFont(TQFont("Times",18,TQFont.Bold))
-
- self.connect(quit,SIGNAL("clicked()"),tqApp,SLOT("quit()"))
-
- grid = TQGrid(4,self)
-
- for c in range(4):
- for r in range(4):
- LCDRange(grid)
-
-
-a = TQApplication(sys.argv)
-
-w = MyWidget()
-a.setMainWidget(w)
-w.show()
-a.exec_loop()
diff --git a/examples2/tut7.py b/examples2/tut7.py
deleted file mode 100755
index 03098aa..0000000
--- a/examples2/tut7.py
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env python
-
-# TQt tutorial 7.
-
-import sys
-from python_tqt.qt import *
-
-
-class LCDRange(TQVBox):
- def __init__(self,parent=None,name=None):
- TQVBox.__init__(self,parent,name)
-
- lcd = TQLCDNumber(2,self,'lcd')
- self.slider = TQSlider(TQt.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(TQVBox):
- def __init__(self,parent=None,name=None):
- TQVBox.__init__(self,parent,name)
-
- quit = TQPushButton("Quit",self,"quit")
- quit.setFont(TQFont("Times",18,TQFont.Bold))
-
- self.connect(quit,SIGNAL("clicked()"),tqApp,SLOT("quit()"))
-
- grid = TQGrid(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 = TQApplication(sys.argv)
-
-w = MyWidget()
-a.setMainWidget(w)
-w.show()
-a.exec_loop()
diff --git a/examples2/tut8.py b/examples2/tut8.py
deleted file mode 100755
index 3266a89..0000000
--- a/examples2/tut8.py
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/usr/bin/env python
-
-# TQt tutorial 8.
-
-import sys
-from python_tqt.qt import *
-
-
-class LCDRange(TQVBox):
- def __init__(self,parent=None,name=None):
- TQVBox.__init__(self,parent,name)
-
- lcd = TQLCDNumber(2,self,'lcd')
- self.slider = TQSlider(TQt.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(TQWidget):
- def __init__(self,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- self.ang = 45
- self.setPalette(TQPalette(TQColor(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 = TQPainter(self)
- p.drawText(200,200,'Angle = %d' % (self.ang))
-
- def sizePolicy(self):
- return TQSizePolicy(TQSizePolicy.Expanding,TQSizePolicy.Expanding)
-
-
-class MyWidget(TQWidget):
- def __init__(self,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- quit = TQPushButton('Quit',self,'quit')
- quit.setFont(TQFont('Times',18,TQFont.Bold))
- self.connect(quit,SIGNAL('clicked()'),tqApp,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 = TQGridLayout(self,2,2,10)
-
- grid.addWidget(quit,0,0)
- grid.addWidget(self.angle,1,0,TQt.AlignTop)
- grid.addWidget(self.cannonField,1,1)
- grid.setColStretch(1,10)
-
- self.angle.setValue(60)
- self.angle.setFocus()
-
-
-a = TQApplication(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
deleted file mode 100755
index c413e00..0000000
--- a/examples2/tut9.py
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/env python
-
-# TQt tutorial 9.
-
-import sys
-from python_tqt.qt import *
-
-
-class LCDRange(TQVBox):
- def __init__(self,parent=None,name=None):
- TQVBox.__init__(self,parent,name)
-
- lcd = TQLCDNumber(2,self,'lcd')
- self.slider = TQSlider(TQt.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(TQWidget):
- def __init__(self,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- self.ang = 45
- self.setPalette(TQPalette(TQColor(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 = TQPainter(self)
-
- p.setBrush(TQt.blue)
- p.setPen(TQt.NoPen)
-
- p.translate(0,self.rect().bottom())
- p.drawPie(TQRect(-35,-35,70,70),0,90 * 16)
- p.rotate(-self.ang)
- p.drawRect(TQRect(33,-4,15,8))
-
- def sizePolicy(self):
- return TQSizePolicy(TQSizePolicy.Expanding,TQSizePolicy.Expanding)
-
-
-class MyWidget(TQWidget):
- def __init__(self,parent=None,name=None):
- TQWidget.__init__(self,parent,name)
-
- quit = TQPushButton('&Quit',self,'quit')
- quit.setFont(TQFont('Times',18,TQFont.Bold))
- self.connect(quit,SIGNAL('clicked()'),tqApp,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 = TQGridLayout(self,2,2,10)
-
- grid.addWidget(quit,0,0)
- grid.addWidget(self.angle,1,0,TQt.AlignTop)
- grid.addWidget(self.cannonField,1,1)
- grid.setColStretch(1,10)
-
- self.angle.setValue(60)
- self.angle.setFocus()
-
-
-TQApplication.setColorSpec(TQApplication.CustomColor)
-a = TQApplication(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
deleted file mode 100755
index cf235a8..0000000
--- a/examples2/widgets.py
+++ /dev/null
@@ -1,512 +0,0 @@
-#!/usr/bin/env python
-
-
-import sys, string
-from python_tqt.qt import *
-
-#
-## Constructs an analog clock widget that uses an internal TQTimer.
-#
-def TQMIN( x, y ):
- if y > x:
- return y
- return x
-
-#
-## Constructs an analog clock widget that uses an internal TQTimer.
-#
-
-class AnalogClock( TQWidget ):
- def __init__( self, *args ):
- TQWidget.__init__(*(self,) + args)
- self.time = TQTime.currentTime() # get current time
- internalTimer = TQTimer( self ) # create internal timer
- self.connect( internalTimer, SIGNAL("timeout()"), self.timeout )
- internalTimer.start( 5000 ) # emit signal every 5 seconds
-
-#
-## The TQTimer::timeout() signal is received by this slot.
-#
-
- def timeout( self ):
- new_time = TQTime.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 = TQTime.currentTime() # save current time
-
- pts = TQPointArray()
- paint = TQPainter( self )
- paint.setBrush( self.foregroundColor() ) # fill with foreground color
-
- cp = TQPoint( self.rect().center() ) # widget center point
- d = TQMIN( self.width(), self.height() ) # we want a circular clock
-
- matrix = TQWMatrix() # 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( TQLCDNumber ):
- def __init__( self, *args ):
- TQLCDNumber.__init__(*(self,) + args)
- self.showingColon = 0
- self.setFrameStyle(TQFrame.Panel | TQFrame.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() == TQt.LeftButton:
- self.showDate()
-
- def showDate( self ):
- if self.showDateTimer != -1:
- return
- d = TQDate.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(TQTime.currentTime().toString())[:5]) #.left(5)
- if not self.showingColon:
- s[2] = ' '
- if s[0] == '0':
- s[0] = ' '
- s = ''.join(s)
- self.display( s )
-
- def TQMIN( x, y ):
- if y > x:
- return y
- return x
-
-TRUE = 1
-FALSE = 0
-MOVIEFILENAME = "trolltech.gif"
-
-#
-# WidgetView contains lots of TQt widgets.
-#
-
-class WidgetView ( TQWidget ):
- def __init__( self, *args ):
- TQWidget.__init__(*(self,) + args)
-
- # Set the window caption/title
- self.setCaption( "TQt Widgets Demo Application" )
-
- # Install an application-global event filter
- tqApp.installEventFilter( self )
-
- # Create a layout to position the widgets
- self.topLayout = TQVBoxLayout( self, 10 )
-
- # Create a grid layout to hold most of the widgets
- self.grid = TQGridLayout( 6, 3 )
-
- # This layout will get all of the stretch
- self.topLayout.addLayout( self.grid, 10 )
-
- # Create a menubar
- self.menubar = TQMenuBar( self )
- #self.menubar.setSeparator( TQMenuBar.InWindowsStyle )
- self.menubar.setSeparator( 1 )
-
- # Create an easter egg
- TQToolTip.add( self.menubar, TQRect( 0, 0, 2, 2 ), "easter egg" )
-
- self.popup = TQPopupMenu()
- 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", tqApp, SLOT("quit()"), TQt.CTRL+TQt.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 = TQColor()
- col.setRgb( 0xaa, 0xbe, 0xff )
- self.dclock.setPalette( TQPalette( col ) )
-
- # make tool tips for both of them
- TQToolTip.add( self.aclock, "custom widget: analog clock" )
- TQToolTip.add( self.dclock, "custom widget: digital clock" )
-
- # Create a push button.
- self.pb = TQPushButton( 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, TQt.AlignVCenter )
- self.connect( self.pb, SIGNAL("clicked()"), self.button1Clicked )
- TQToolTip.add( self.pb, "push button 1" )
- self.pm = TQPixmap()
- self.pix = self.pm.load( "qt.png" ) # load pixmap for button 2
- if not self.pix:
- TQMessageBox.information( None, "TQt Widgets Example",
- "Could not load the file \"qt.png\", which\n"
- "contains an icon used...\n\n"
- "The text \"line 42\" will be substituted.",
- TQMessageBox.Ok + TQMessageBox.Default )
-
- # Create a label containing a TQMovie
- self.movielabel = TQLabel( self, "label0" )
- self.movie = TQMovie( MOVIEFILENAME )
- self.movie.connectStatus( self.movieStatus )
- self.movie.connectUpdate( self.movieUpdate )
- self.movielabel.setFrameStyle( TQFrame.Box | TQFrame.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, TQt.AlignCenter )
- TQToolTip.add( self.movielabel, "movie" )
-
- # Create a group of check boxes
- self.bg = TQButtonGroup( self, "checkGroup" )
- self.bg.setTitle( "Check Boxes" )
- self.grid.addWidget( self.bg, 1, 0 )
-
- # Create a layout for the check boxes
- self.vbox = TQVBoxLayout(self.bg, 10)
-
- self.vbox.addSpacing( self.bg.fontMetrics().height() )
-
- self.cb = list(range(3))
- self.cb[0] = TQCheckBox( self.bg )
- self.cb[0].setText( "Read" )
- self.vbox.addWidget( self.cb[0] )
- self.cb[0].setMinimumSize( self.cb[0].sizeHint() )
- self.cb[1] = TQCheckBox( self.bg )
- self.cb[1].setText( "Write" )
- self.vbox.addWidget( self.cb[1] )
- self.cb[1].setMinimumSize( self.cb[1].sizeHint() )
- self.cb[2] = TQCheckBox( 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 )
-
- TQToolTip.add( self.cb[0], "check box 1" )
- TQToolTip.add( self.cb[1], "check box 2" )
- TQToolTip.add( self.cb[2], "check box 3" )
-
- # Create a group of radio buttons
- self.bg = TQButtonGroup( self, "radioGroup" )
- self.bg.setTitle( "Radio buttons" )
-
- self.grid.addWidget( self.bg, 1, 1 )
-
- # Create a layout for the radio buttons
- self.vbox = TQVBoxLayout( self.bg, 10 )
-
- self.vbox.addSpacing( self.bg.fontMetrics().height() )
- self.rb = TQRadioButton( self.bg )
- self.rb.setText( "&AM" )
- self.rb.setChecked( TRUE )
- self.vbox.addWidget( self.rb )
- self.rb.setMinimumSize( self.rb.sizeHint() )
- TQToolTip.add( self.rb, "radio button 1" )
- self.rb = TQRadioButton( self.bg )
- self.rb.setText( "&FM" )
- self.vbox.addWidget( self.rb )
- self.rb.setMinimumSize( self.rb.sizeHint() )
- TQToolTip.add( self.rb, "radio button 2" )
- self.rb = TQRadioButton( 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 )
- TQToolTip.add( self.rb, "radio button 3" )
-
- # Create a list box
- self.lb = TQListBox( self, "listBox" )
- for i in range( 0, 100, 1 ): # fill list box
- txt = TQString()
- 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 )
- TQToolTip.add( self.lb, "list box" )
-
- self.vbox = TQVBoxLayout( 8 )
- self.grid.addLayout( self.vbox, 2, 1 )
-
- # Create a slider
- self.sb = TQSlider( 0, 300, 1, 100, TQSlider.Horizontal, self, "Slider" )
- #self.sb.setTickmarks( TQSlider.Below )
- self.sb.setTickmarks( 1 )
- self.sb.setTickInterval( 10 )
- #self.sb.setFocusPolicy( TQWidget.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 )
- TQToolTip.add( self.sb, "slider" )
-
- # Create a combo box
- self.combo = TQComboBox( 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 )
- TQToolTip.add( self.combo, "read-only combo box" )
-
- # Create an editable combo box
- self.edCombo = TQComboBox( 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 TQString &)"), self.edComboBoxItemActivated)
- TQToolTip.add( self.edCombo, "editable combo box" )
-
- self.edCombo.setAutoCompletion( TRUE )
-
- self.vbox.addStretch( 1 )
-
- self.vbox = TQVBoxLayout( 8 )
- self.grid.addLayout( self.vbox, 2, 2 )
-
- # Create a spin box
- self.spin = TQSpinBox( 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 TQString &)" ), self.spinBoxValueChanged )
- TQToolTip.add( self.spin, "spin box" )
- self.vbox.addWidget( self.spin )
-
- self.vbox.addStretch( 1 )
-
- # Create a multi line edit
- self.mle = TQMultiLineEdit( 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 TQMultiLineEdit widget,\n"
- "useful for small multi-line\n"
- "input fields.")
- TQToolTip.add( self.mle, "multi line editor" )
-
- # Create a single line edit
- self.le = TQLineEdit( 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 TQString &)"), self.lineEditTextChanged )
- TQToolTip.add( self.le, "single line editor" )
-
- # Create a horizontal line (sort of TQFrame) above the message line
- self.separator = TQFrame( self, "separatorLine" )
- self.separator.setFrameStyle( TQFrame.HLine | TQFrame.Sunken )
- self.separator.setFixedHeight( self.separator.sizeHint().height() )
- self.grid.addMultiCellWidget( self.separator, 5, 5, 0, 2 )
- TQToolTip.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 = TQHBoxLayout()
- self.topLayout.addLayout( self.hbox )
- self.msgLabel = TQLabel( self, "msgLabel" )
- self.msgLabel.setText( "Message:" )
- self.msgLabel.setAlignment( TQt.AlignHCenter | TQt.AlignVCenter )
- self.msgLabel.setFixedSize( self.msgLabel.sizeHint() )
- self.hbox.addWidget( self.msgLabel )
- TQToolTip.add( self.msgLabel, "label 1" )
-
- self.msg = TQLabel( self, "message" )
- self.msg.setFrameStyle( TQFrame.Panel | TQFrame.Sunken )
- self.msg.setAlignment( TQt.AlignCenter )
- self.msg.setFont( TQFont( "times", 12, TQFont.Bold ) )
- self.msg.setText( "Message" )
- self.msg.setFixedHeight( self.msg.sizeHint().height() )
- self.msg.setText( "" )
- self.hbox.addWidget( self.msg, 5 )
- TQToolTip.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 == TQMovie.SourceEmpty or s == TQMovie.UnrecognizedFormat:
- pm = TQPixmap('tt-logo.png')
- self.movielabel.setPixmap(pm)
- self.movielabel.setFixedSize(pm.size())
- else:
- if ( self.movielabel.movie() ): # for flicker-free animation:
- self.movielabel.setBackgroundMode( TQWidget.NoBackground )
-
- def button1Clicked( self ):
- self.msg.setText( "The first push button was clicked" )
-
- def checkBoxClicked( self, id ):
- txt = TQString()
- 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 = TQString()
- txt = "Editable Combo Box set to %s" % text
- self.msg.setText( txt )
-
- def radioButtonClicked( self, id ):
- txt = TQString()
- txt = "Radio button #%d clicked" % id
- self.msg.setText( txt )
-
- def listBoxItemSelected( self, index ):
- txt = TQString()
- txt = "List box item %d selected" % index
- self.msg.setText( txt )
-
- def sliderValueChanged( self, value ):
- txt = TQString()
- txt = "Movie set to %d%% of normal speed" % value
- self.msg.setText( txt )
- self.movie.setSpeed( value )
-
- def comboBoxItemActivated( self, index ):
- txt = TQString()
- txt = "Comboxo box item %d activated" % index
- self.msg.setText( txt )
- if index == 0:
- TQApplication.setWinStyleHighlightColor( TQt.darkBlue )
- elif index == 1:
- TQApplication.setWinStyleHighlightColor( TQt.darkRed )
- elif index == 2:
- TQApplication.setWinStyleHighlightColor( TQt.darkGreen )
- elif index == 3:
- TQApplication.setWinStyleHighlightColor( TQt.blue )
- elif index == 4:
- TQApplication.setWinStyleHighlightColor( TQt.red )
-
- def lineEditTextChanged( self, newText ):
- self.msg.setText("Line edit text: " + str(newText))
-
- def spinBoxValueChanged( self, valueText ):
- self.msg.setText("Spin box value: " + str(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 = TQMouseEvent( event )
- # if (e.button() == TQt.RightButton) and (e.state() & TQt.ControlButton) != 0:
- # txt = TQString( "The clicked widget is a\n" )
- # txt = txt + TQObect.className()
- # txt = txt + "\nThe widget's name is\n"
- # if TQObject.name():
- # txt = txt + TQObject.name()
- # else:
- # txt = txt + "<no name>"
- # identify_now = FALSE # don't do it in message box
- # TQMessageBox.message( "Identify Widget", txt, 0, TQObject )
- # identify_now = TRUE; # allow it again
- # return FALSE # don't eat event
-
-################################################################################################
-
-#TQApplication.setColourSpec( TQApplication.CustomColor )
-a = TQApplication( sys.argv )
-
-w = WidgetView()
-a.setMainWidget( w )
-w.show()
-a.exec_loop()
diff --git a/examples3/aclock.py b/examples3/aclock.py
deleted file mode 100755
index 66283ef..0000000
--- a/examples3/aclock.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-from python_tqt.qt import *
-
-def TQMIN(x, y):
- if y > x: return y
- return x
-class AnalogClock(TQWidget):
- def __init__(self, *args):
- TQWidget.__init__(*(self,) + args)
- self.time = TQTime.currentTime()
- internalTimer = TQTimer(self)
- self.connect(internalTimer, SIGNAL("timeout()"), self.timeout)
- internalTimer.start(5000)
-
- def timeout(self):
- new_time = TQTime.currentTime()
- if new_time.minute() != self.time.minute():
- self.update()
-
- def paintEvent(self, qe):
- if not self.isVisible():
- return
- self.time = TQTime.currentTime()
-
- pts = TQPointArray()
- paint = TQPainter(self)
- paint.setBrush(self.foregroundColor())
-
- cp = TQPoint(self.rect().center())
- d = TQMIN(self.width(), self.height())
- matrix = TQWMatrix()
- 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 = TQApplication(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
deleted file mode 100755
index 14b5679..0000000
--- a/examples3/addressbook.py
+++ /dev/null
@@ -1,457 +0,0 @@
-#!/usr/bin/env python
-
-# A port to PyTQt of the application example from TQt v2.x.
-
-
-import sys, string
-from python_tqt.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( TQWidget ):
- def __init__( self, *args ):
- TQWidget.__init__(*(self, ) + args)
- self.mainGrid = TQGridLayout( 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 = TQFile( filename )
- if not f.open( IO_WriteOnly ):
- return
-
- t = TQTextStream( f )
-
- #it = TQListViewItemIterator( self.listView )
-
- while not t.eof():
- item = TQListViewItem( 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 = TQFile( filename )
- if not f.open( IO_ReadOnly ):
- return
-
- t = TQTextStream( f )
-
- while not t.eof():
- item = TQListViewItem( self.listView )
- for i in range (0, 4):
- item.setText( i, t.readLine() )
-
- f.close();
-
-
- def setupTabWidget( self ):
- self.tabWidget = TQTabWidget( self )
-
- self.input = TQWidget( self.tabWidget )
- self.grid1 = TQGridLayout( self.input, 2, 5, 5, 5 )
-
- self.liFirstName = TQLabel( 'First &Name', self.input )
- self.liFirstName.resize( self.liFirstName.sizeHint() )
- self.grid1.addWidget( self.liFirstName, 0, 0 )
-
- self.liLastName = TQLabel( '&Last Name', self.input )
- self.liLastName.resize( self.liLastName.sizeHint() )
- self.grid1.addWidget( self.liLastName, 0, 1 )
-
- self.liAddress = TQLabel( '&Address', self.input )
- self.liAddress.resize( self.liAddress.sizeHint() )
- self.grid1.addWidget( self.liAddress, 0, 2 )
-
- self.liEMail = TQLabel( '&E-Mail', self.input )
- self.liEMail.resize( self.liEMail.sizeHint() )
- self.grid1.addWidget( self.liEMail, 0, 3 )
-
- self.add = TQPushButton( '&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 = TQLineEdit( self.input )
- self.iFirstName.resize( self.iFirstName.sizeHint() )
- self.grid1.addWidget( self.iFirstName, 1, 0 )
- self.liFirstName.setBuddy( self.iFirstName )
-
- self.iLastName = TQLineEdit( self.input )
- self.iLastName.resize( self.iLastName.sizeHint() )
- self.grid1.addWidget( self.iLastName, 1, 1 )
- self.liLastName.setBuddy( self.iLastName )
-
- self.iAddress = TQLineEdit( self.input )
- self.iAddress.resize( self.iAddress.sizeHint() )
- self.grid1.addWidget( self.iAddress, 1, 2 )
- self.liAddress.setBuddy( self.iAddress )
-
- self.iEMail = TQLineEdit( self.input )
- self.iEMail.resize( self.iEMail.sizeHint() )
- self.grid1.addWidget( self.iEMail, 1, 3 )
- self.liEMail.setBuddy( self.iEMail )
-
- self.change = TQPushButton( '&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 = TQWidget( self )
- self.grid2 = TQGridLayout( self.search, 2, 5, 5, 5 )
-
- self.cFirstName = TQCheckBox( '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 = TQCheckBox( '&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 = TQCheckBox( '&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 = TQCheckBox( '&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 = TQLineEdit( self.search )
- self.sFirstName.resize( self.sFirstName.sizeHint() )
- self.grid2.addWidget( self.sFirstName, 1, 0 )
-
- self.sLastName = TQLineEdit( self.search )
- self.sLastName.resize( self.sLastName.sizeHint() )
- self.grid2.addWidget( self.sLastName, 1, 1 )
-
- self.sAddress = TQLineEdit( self.search )
- self.sAddress.resize( self.sAddress.sizeHint() )
- self.grid2.addWidget( self.sAddress, 1, 2 )
-
- self.sEMail = TQLineEdit( self.search )
- self.sEMail.resize( self.sEMail.sizeHint() )
- self.grid2.addWidget( self.sEMail, 1, 3 )
-
- self.find = TQPushButton( '&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 = TQListView( self )
- self.listView.addColumn( 'First Name' )
- self.listView.addColumn( 'Last Name' )
- self.listView.addColumn( 'Address' )
- self.listView.addColumn( 'E-Mail' )
-
- self.listView.setSelectionMode( TQListView.Extended )
-
- self.connect( self.listView, SIGNAL( 'clicked( TQListViewItem* )' ), 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 = TQListViewItem( 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 = TQListViewItemIterator( 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(TQMainWindow):
- def __init__( self ):
- TQMainWindow.__init__( self, None, 'example addressbook application' )
-
- self.filename = TQString.null
- self.setupMenuBar()
- self.setupFileTools()
- self.setupStatusBar()
- self.setupCentralWidget()
-
- def setupMenuBar( self ):
- self.file = TQPopupMenu( self )
- self.menuBar().insertItem( '&File', self.file )
-
- openIcon = TQIconSet( TQPixmap( fileopen ) )
- self.file.insertItem( 'New', self.fileNew, TQt.CTRL + TQt.Key_N )
- self.file.insertItem( openIcon, 'Open', self.fileOpen, TQt.CTRL + TQt.Key_O )
- self.file.insertSeparator()
- saveIcon = TQIconSet( TQPixmap( filesave ) )
- self.file.insertItem( saveIcon, 'Save', self.fileSave, TQt.CTRL + TQt.Key_S )
- self.file.insertItem( 'Save As...', self.fileSaveAs )
- self.file.insertSeparator()
- printIcon = TQIconSet( TQPixmap( fileprint ) )
- self.file.insertItem( printIcon, 'Print...', self.filePrint, TQt.CTRL + TQt.Key_P )
- self.file.insertSeparator()
- #self.file.insertItem( 'Close', self.closeWindow, TQt.CTRL + TQt.Key_W )
- self.file.insertItem('Close', self, SLOT('close()'), TQt.CTRL+TQt.Key_W)
- self.file.insertItem( 'Quit', tqApp, SLOT( 'quit()' ), TQt.CTRL + TQt.Key_Q )
-
- def setupFileTools( self ):
- pass
- #self.fileTools = TQToolBar( 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 = TQFileDialog.getOpenFileName( TQString.null, TQString.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 = TQFileDialog.getSaveFileName( TQString.null, TQString.null, self )
- if not fn.isEmpty():
- self.filename = fn
- self.fileSave
-
- def filePrint( self ):
- pass
-
-
-a = TQApplication( 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/dclock.py b/examples3/dclock.py
deleted file mode 100755
index 302d454..0000000
--- a/examples3/dclock.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env python
-
-# A port to PyTQt of the dclock example from TQt v2.x.
-
-
-import sys, string
-from python_tqt.qt import *
-
-
-class DigitalClock(TQLCDNumber):
- def __init__(self, parent=None, name=None):
- TQLCDNumber.__init__(self, parent, name)
- self.showingColon = 0
- self.setFrameStyle(TQFrame.Panel | TQFrame.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() == TQt.LeftButton:
- self.showDate()
-
- def showDate(self):
- if self.showDateTimer != -1:
- return
- d = TQDate.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(TQTime.currentTime().toString())[:5]) #.left(5)
- if not self.showingColon:
- s[2] = ' '
- if s[0] == '0':
- s[0] = ' '
- s = ''.join(s)
- self.display(s)
-
-a = TQApplication(sys.argv)
-clock = DigitalClock()
-clock.resize(170,80)
-a.setMainWidget(clock)
-clock.show()
-a.exec_loop()
diff --git a/examples3/dragdrop.py b/examples3/dragdrop.py
deleted file mode 100755
index a715170..0000000
--- a/examples3/dragdrop.py
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env python
-
-# Ported to PyTQt by Issac Trotts on Jan 1, 2002
-
-import sys
-from python_tqt.qt import *
-
-import dropsite, secret
-
-
-def addStuff( parent, yn_image, yn_secret = 0 ):
- tll = TQVBoxLayout( parent, 10 )
- d = dropsite.DropSite( parent, 'dropsite' )
- d.setFrameStyle( TQFrame.Sunken + TQFrame.WinPanel )
- tll.addWidget( d )
- if yn_image:
- stuff = TQPixmap()
- if not stuff.load( "trolltech.bmp" ):
- stuff = TQPixmap(20,20)
- stuff.fill(TQt.green)
- d.setPixmap( stuff )
- else:
- d.setText("Drag and Drop")
- d.setFont(TQFont("Helvetica",18))
- if secret:
- s = secret.SecretSource( 42, parent )
- tll.addWidget( s )
-
- format = TQLabel( "\n\n\n\nNone\n\n\n\n", parent )
- tll.addWidget( format )
- tll.activate()
- parent.resize( parent.sizeHint() )
-
- TQObject.connect( d, PYSIGNAL('message(TQString &)'),
- format, SLOT('setText(TQString &)') )
-
-
-app = TQApplication( sys.argv )
-
-mw = TQWidget()
-addStuff( mw, 1 )
-mw.setCaption( "TQt Example - Drag and Drop" )
-mw.show()
-
-mw2 = TQWidget()
-addStuff( mw2, 0 )
-mw2.setCaption( "TQt Example - Drag and Drop" )
-mw2.show()
-
-mw3 = TQWidget()
-addStuff( mw3, 1, 1 )
-mw3.setCaption( "TQt Example - Drag and Drop" )
-mw3.show()
-
-TQObject.connect(tqApp,SIGNAL('lastWindowClosed()'),tqApp,SLOT('quit()'))
-
-app.exec_loop()
diff --git a/examples3/qt.png b/examples3/qt.png
deleted file mode 100644
index d63e16f..0000000
--- a/examples3/qt.png
+++ /dev/null
Binary files differ
diff --git a/examples3/trolltech.bmp b/examples3/trolltech.bmp
deleted file mode 100644
index 9f399c7..0000000
--- a/examples3/trolltech.bmp
+++ /dev/null
Binary files differ
diff --git a/examples3/trolltech.gif b/examples3/trolltech.gif
deleted file mode 100644
index f674369..0000000
--- a/examples3/trolltech.gif
+++ /dev/null
Binary files differ
diff --git a/examples3/tt-logo.png b/examples3/tt-logo.png
deleted file mode 100644
index 1b0e865..0000000
--- a/examples3/tt-logo.png
+++ /dev/null
Binary files differ
diff --git a/pyuic2/COPYING b/pyuic2/COPYING
deleted file mode 100644
index c7aea18..0000000
--- a/pyuic2/COPYING
+++ /dev/null
@@ -1,280 +0,0 @@
- 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
deleted file mode 100644
index 8a0cff2..0000000
--- a/pyuic2/domtool.cpp
+++ /dev/null
@@ -1,260 +0,0 @@
-/**********************************************************************
-** Copyright (C) 2000 Trolltech AS. All rights reserved.
-** Copyright (C) 2000, 2001 Phil Thompson <phil@river-bank.demon.co.uk>
-**
-** This file is part of TQt 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 <tqsizepolicy.h>
-#include <tqpalette.h>
-#include <tqcursor.h>
-#include <tqrect.h>
-#include <tqsize.h>
-#include <tqfont.h>
-
-
-/*!
- \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()
- */
-TQVariant DomTool::readProperty( const TQDomElement& e, const TQString& name, const TQVariant& defValue )
-{
- TQDomElement n;
- for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {
- if ( n.tagName() == "property" ) {
- TQDomElement n2 = n.firstChild().toElement();
- if ( n2.tagName() == "name" ) {
- TQString 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 TQDomElement& e, const TQString& name )
-{
- TQDomElement n;
- for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {
- if ( n.tagName() == "property" ) {
- TQDomElement n2 = n.firstChild().toElement();
- if ( n2.tagName() == "name" ) {
- TQString prop = n2.firstChild().toText().data();
- if ( prop == name )
- return TRUE;
- }
- }
- }
- return FALSE;
-}
-
-TQVariant DomTool::elementToVariant( const TQDomElement& e, const TQVariant& defValue )
-{
- TQString dummy;
- return elementToVariant( e, defValue, dummy );
-}
-
-/*!
- Interprets element \a e as variant and returns the result of the interpretation.
- */
-TQVariant DomTool::elementToVariant( const TQDomElement& e, const TQVariant& defValue, TQString &comment )
-{
- TQVariant v;
- if ( e.tagName() == "rect" ) {
- TQDomElement 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 = TQVariant( TQRect( x, y, w, h ) );
- } else if ( e.tagName() == "point" ) {
- TQDomElement 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 = TQVariant( TQPoint( x, y ) );
- } else if ( e.tagName() == "size" ) {
- TQDomElement 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 = TQVariant( TQSize( w, h ) );
- } else if ( e.tagName() == "color" ) {
- v = TQVariant( readColor( e ) );
- } else if ( e.tagName() == "font" ) {
- TQDomElement n3 = e.firstChild().toElement();
- TQFont 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 = TQVariant( f );
- } else if ( e.tagName() == "string" ) {
- v = TQVariant( e.firstChild().toText().data() );
- TQDomElement n = e;
- n = n.nextSibling().toElement();
- if ( n.tagName() == "comment" )
- comment = n.firstChild().toText().data();
- } else if ( e.tagName() == "cstring" ) {
- v = TQVariant( TQCString( e.firstChild().toText().data() ) );
- } else if ( e.tagName() == "number" ) {
- v = TQVariant( e.firstChild().toText().data().toInt() );
- } else if ( e.tagName() == "bool" ) {
- TQString t = e.firstChild().toText().data();
- v = TQVariant( t == "true" || t == "1" );
- } else if ( e.tagName() == "pixmap" ) {
- v = TQVariant( e.firstChild().toText().data() );
- } else if ( e.tagName() == "iconset" ) {
- v = TQVariant( e.firstChild().toText().data() );
- } else if ( e.tagName() == "image" ) {
- v = TQVariant( e.firstChild().toText().data() );
- } else if ( e.tagName() == "enum" ) {
- v = TQVariant( e.firstChild().toText().data() );
- } else if ( e.tagName() == "set" ) {
- v = TQVariant( e.firstChild().toText().data() );
- } else if ( e.tagName() == "sizepolicy" ) {
- TQDomElement n3 = e.firstChild().toElement();
- TQSizePolicy sp;
- while ( !n3.isNull() ) {
- if ( n3.tagName() == "hsizetype" )
- sp.setHorData( (TQSizePolicy::SizeType)n3.firstChild().toText().data().toInt() );
- else if ( n3.tagName() == "vsizetype" )
- sp.setVerData( (TQSizePolicy::SizeType)n3.firstChild().toText().data().toInt() );
- n3 = n3.nextSibling().toElement();
- }
- v = TQVariant( sp );
- } else if ( e.tagName() == "cursor" ) {
- v = TQVariant( TQCursor( e.firstChild().toText().data().toInt() ) );
- }
-
- return v;
-}
-
-
-/*! Returns the color which is returned in the dom element \a e.
- */
-
-TQColor DomTool::readColor( const TQDomElement &e )
-{
- TQDomElement 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 TQColor( 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()
- */
-TQVariant DomTool::readAttribute( const TQDomElement& e, const TQString& name, const TQVariant& defValue )
-{
- TQDomElement n;
- for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {
- if ( n.tagName() == "attribute" ) {
- TQDomElement n2 = n.firstChild().toElement();
- if ( n2.tagName() == "name" ) {
- TQString 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 TQDomElement& e, const TQString& name )
-{
- TQDomElement n;
- for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {
- if ( n.tagName() == "attribute" ) {
- TQDomElement n2 = n.firstChild().toElement();
- if ( n2.tagName() == "name" ) {
- TQString prop = n2.firstChild().toText().data();
- if ( prop == name )
- return TRUE;
- }
- }
- }
- return FALSE;
-}
diff --git a/pyuic2/domtool.h b/pyuic2/domtool.h
deleted file mode 100644
index b3f833c..0000000
--- a/pyuic2/domtool.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/**********************************************************************
-** Copyright (C) 2000 Troll Tech AS. All rights reserved.
-** Copyright (C) 2000, 2001 Phil Thompson <phil@river-bank.demon.co.uk>
-**
-** This file is part of TQt 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 <tqnamespace.h>
-#include <tqvariant.h>
-#include <tqdom.h>
-
-
-class DomTool : public TQt
-{
-public:
- static TQVariant readProperty( const TQDomElement& e, const TQString& name, const TQVariant& defValue );
- static bool hasProperty( const TQDomElement& e, const TQString& name );
- static TQVariant elementToVariant( const TQDomElement& e, const TQVariant& defValue );
- static TQVariant elementToVariant( const TQDomElement& e, const TQVariant& defValue, TQString &comment );
- static TQVariant readAttribute( const TQDomElement& e, const TQString& name, const TQVariant& defValue );
- static bool hasAttribute( const TQDomElement& e, const TQString& name );
- static TQColor readColor( const TQDomElement &e );
-
-};
-
-
-#endif // DOMTOOL_H
diff --git a/pyuic2/globaldefs.h b/pyuic2/globaldefs.h
deleted file mode 100644
index a5fa077..0000000
--- a/pyuic2/globaldefs.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/**********************************************************************
-** Copyright (C) 2000 Trolltech AS. All rights reserved.
-**
-** This file is part of TQt 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 <tqcolor.h>
-
-#define BOXLAYOUT_DEFAULT_MARGIN 11
-#define BOXLAYOUT_DEFAULT_SPACING 6
-
-static TQColor backColor1( 226, 244, 216 );
-static TQColor backColor2( 235, 235, 235 );
-static TQColor selectedBack( 192, 192, 192 );
-
-#endif
diff --git a/pyuic2/pyuic.pro.in b/pyuic2/pyuic.pro.in
deleted file mode 100644
index beeea65..0000000
--- a/pyuic2/pyuic.pro.in
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2000, 2001
-# Phil Thompson <phil@river-bank.demon.co.uk>
-# Copyright (c) 2002, 2003
-# Riverbank Computing Limited <info@riverbankcomputing.co.uk>
-#
-# The project file for pyuic for TQt v2.
-
-
-TEMPLATE = app
-CONFIG = qt console warn_on release
-INCLUDEPATH = @BLX_INCLUDEPATH@ $(TQTDIR)/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
deleted file mode 100644
index 9f1e8ef..0000000
--- a/pyuic2/pyuic.sbf
+++ /dev/null
@@ -1,24 +0,0 @@
-# This is the build file for pyuic for TQt v2.
-#
-# Copyright (c) 2007
-# Riverbank Computing Limited <info@riverbankcomputing.co.uk>
-#
-# This file is part of PyTQt.
-#
-# This copy of PyTQt is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2, or (at your option) any later
-# version.
-#
-# PyTQt is supplied in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# PyTQt; 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
deleted file mode 100644
index 045609d..0000000
--- a/pyuic2/uic.cpp
+++ /dev/null
@@ -1,1600 +0,0 @@
-// Copyright (c) 2000 - 2001 Phil Thompson <phil@river-bank.demon.co.uk>
-
-/**********************************************************************
-** Copyright (C) 2000 Troll Tech AS. All rights reserved.
-**
-** This file is part of TQt 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 <tqapplication.h>
-#include <tqfile.h>
-#include <tqfileinfo.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <tqstringlist.h>
-#include <tqstrlist.h>
-#include <tqdatetime.h>
-#include <widgetdatabase.h>
-#include <domtool.h>
-#include <globaldefs.h>
-#include <tqregexp.h>
-#include <zlib.h>
-
-static TQString mkBool( bool b )
-{
- return b? "1" : "0";
-}
-
-static TQString mkBool( const TQString& s )
-{
- return mkBool( s == "true" || s == "1" );
-}
-
-static bool toBool( const TQString& 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 TQString fixString( const TQString &str )
-{
- TQString s( str );
- s.replace( TQRegExp( "\\\\" ), "\\\\" );
- s.replace( TQRegExp( "\"" ), "\\\"" );
- s.replace( TQRegExp( "\n" ), "\\n\"\n\"" );
- s.replace( TQRegExp( "\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 = "TQString.fromUtf8(\"" + s + "\")";
- return s;
-}
-
-static TQString mkStdSet( const TQString& prop )
-{
- return TQString( "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 TQString className;
-
-Uic::Uic( TQTextStream &outStream, TQDomDocument doc, const TQString &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() );
-
- TQDomElement 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
- */
-TQString Uic::getClassName( const TQDomElement& e )
-{
- TQDomElement n;
- TQString cn;
- for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {
- if ( n.tagName() == "class" ) {
- TQString 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.
- */
-TQString Uic::getObjectName( const TQDomElement& e )
-{
- TQDomElement n;
- for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {
- if ( n.tagName() == "property" ) {
- TQDomElement n2 = n.firstChild().toElement();
- if ( n2.tagName() == "name" && n2.firstChild().toText().data() == "name" ) {
- return n2.nextSibling().toElement().firstChild().toText().data();
- }
- }
- }
- return TQString::null;
-}
-
-/*! Extracts an layout name from \a e. It's stored in the 'name'
- property of the preceeding sibling (the first child of a TQLayoutWidget).
- */
-TQString Uic::getLayoutName( const TQDomElement& e )
-{
- TQDomElement p = e.parentNode().toElement();
- TQString tail = TQString::null;
-
- if (getClassName(p) != "TQLayoutWidget")
- tail = "Layout";
-
- TQDomElement n;
- for ( n = p.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {
- if ( n.tagName() == "property" ) {
- TQDomElement n2 = n.firstChild().toElement();
- if ( n2.tagName() == "name" && n2.firstChild().toText().data() == "name" ) {
- return n2.nextSibling().toElement().firstChild().toText().data() + tail;
- }
- }
- }
- return e.tagName();
-}
-
-TQByteArray unzipXPM( TQString 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;
- TQByteArray 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 TQDomElement &e )
-{
- TQStringList::Iterator it;
- TQDomElement n;
- TQDomNodeList nl;
- int i;
- TQString objClass = getClassName( e );
- if ( objClass.isEmpty() )
- return;
- TQString objName = getObjectName( e );
-
- // Handle custom widgets.
- for (n = e; !n.isNull(); n = n.nextSibling().toElement())
- {
- if (n.tagName() != "customwidgets")
- continue;
-
- TQDomElement n2 = n.firstChild().toElement();
-
- while (!n2.isNull())
- {
- if (n2.tagName() == "customwidget")
- {
- TQDomElement n3 = n2.firstChild().toElement();
- TQString 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
- TQStringList requiredImages;
- nl = e.elementsByTagName( "pixmap" );
- for ( int j = 0; j < (int) nl.length(); j++ ) {
- requiredImages += nl.item(j).firstChild().toText().data();
- }
-
- TQStringList images;
- TQStringList 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++ ) {
- TQDomElement tmp = nl.item(i).firstChild().toElement();
- TQString img = registerObject( tmp.firstChild().toText().data() );
- if ( !requiredImages.contains( img ) )
- continue;
- tmp = tmp.nextSibling().toElement();
- TQString format = tmp.attribute("format", "PNG" );
- TQString data = tmp.firstChild().toText().data();
-
- out << endl;
- out << endl;
-
- if ( format == "XPM.GZ" ) {
- xpmImages += img;
- ulong length = tmp.attribute("length").toULong();
- TQByteArray 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" << TQString(data[2*a]) << TQString(data[2*a+1]);
- if ( a % 12 == 11 )
- out << "' \\" << endl << indent << "'";
- }
- out << "\\x" << TQString(data[2*a]) << TQString(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 == "TQDialog" || objClass == "TQWizard" ) {
- 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 == "TQWidget" ) { // standard TQWidget
- 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() ) {
- TQStringList::Iterator it;
- for ( it = images.begin(); it != images.end(); ++it ) {
- out << indent << (*it) << " = TQPixmap()" << 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) << " = TQPixmap(" << (*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" ) );
- TQDomElement n2 = n.firstChild().toElement();
-
- if ( n2.tagName() == "name" ) {
- TQString prop = n2.firstChild().toText().data();
- TQString value = setObjectProperty( objClass, TQString::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") {
- TQDomElement 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 << "',TQVariant(" << value << "))" << endl;
- }
-
- if (prop == "name") {
- popIndent();
- out << endl;
- }
- }
- }
- }
-
-
- // create all children, some forms have special requirements
-
- if ( objClass == "TQWizard" ) {
- for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {
- if ( tags.contains( n.tagName() ) ) {
- TQString page = createObjectImpl( n, objClass, "self" );
- TQString label = DomTool::readAttribute( n, "title", "" ).toString();
- out << indent << "self.addPage(" << page << ","<< trmacro << "(" << fixString( label ) << "))" << endl;
- TQVariant def( FALSE );
- 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.
-
- TQStringList userSlots;
-
- for ( n = e; !n.isNull(); n = n.nextSibling().toElement() ) {
- if ( n.tagName() == "connections" ) {
- for ( TQDomElement 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++ ) {
- TQString sender, receiver, signal, slot;
- for ( TQDomElement 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;
- TQString lastName;
- TQDomElement n2 = n.firstChild().toElement();
- while ( !n2.isNull() ) {
- if ( n2.tagName() == "tabstop" ) {
- TQString 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 ( TQValueList<Buddy>::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() == TQEvent.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.
-
- TQString 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()
- */
-TQString Uic::createObjectImpl( const TQDomElement &e, const TQString& parentClass, const TQString& parent, const TQString& layout )
-{
-
- TQDomElement n;
- TQString 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 );
-
- TQString definedName = objName;
- bool isTmpObject = objName.isEmpty() || objClass == "TQLayoutWidget";
- if ( isTmpObject ) {
- if ( objClass[0] == 'Q' )
- objName = objClass.mid(1);
- else
- objName = objClass.lower();
- }
-
- bool isLine = objClass == "Line";
- if ( isLine )
- objClass = "TQFrame";
-
- out << endl;
- if ( objClass == "TQLayoutWidget" ) {
- if ( layout.isEmpty() ) {
- // register the object and unify its name
- objName = registerObject( objName );
- out << indent << objName << " = TQWidget(" << parent << ",'" << definedName << "')" << endl;
- } else {
- // the layout widget is not necessary, hide it by creating its child in the parent
- TQString 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" ) );
- TQDomElement n2 = n.firstChild().toElement();
-
- if ( n2.tagName() == "name" ) {
- TQString prop = n2.firstChild().toText().data();
- TQString 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 = "TQFrame.HLine | TQFrame.Sunken";
- else
- value = "TQFrame.VLine | TQFrame.Sunken";
- }
- if ( prop == "buttonGroupId" ) {
- if ( parentClass == "TQButtonGroup" )
- 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 << "',TQVariant(" << value << "))" << endl;
- }
-
- }
- } else if ( n.tagName() == "item" ) {
- if ( objClass.mid(1) == "ListBox" ) {
- TQString s = createListBoxItemImpl( n, fullObjName );
- if ( !s.isEmpty() )
- out << indent << s << endl;
- } else if ( objClass.mid(1) == "ComboBox" ) {
- TQString s = createListBoxItemImpl( n, fullObjName );
- if ( !s.isEmpty() )
- out << indent << s << endl;
- } else if ( objClass.mid(1) == "IconView" ) {
- TQString s = createIconViewItemImpl( n, fullObjName );
- if ( !s.isEmpty() )
- out << indent << s << endl;
- } else if ( objClass.mid(1) == "ListView" ) {
- TQString s = createListViewItemImpl( n, fullObjName, TQString::null );
- if ( !s.isEmpty() )
- out << s << endl;
- }
- } else if ( n.tagName() == "column" ) {
- if ( objClass.mid(1) == "ListView" ) {
- TQString s = createListViewColumnImpl( n, fullObjName );
- if ( !s.isEmpty() )
- out << s;
- }
- }
- }
-
- // create all children, some widgets have special requirements
-
- if ( objClass == "TQTabWidget" ) {
- for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {
- if ( tags.contains( n.tagName() ) ) {
- TQString page = createObjectImpl( n, objClass, fullObjName );
- TQString 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.
-*/
-
-TQString Uic::createListBoxItemImpl( const TQDomElement &e, const TQString &parent )
-{
- TQDomElement n = e.firstChild().toElement();
- TQString txt;
- TQString pix;
- while ( !n.isNull() ) {
- if ( n.tagName() == "property" ) {
- TQDomElement n2 = n.firstChild().toElement();
- if ( n2.tagName() == "name" ) {
- TQString attrib = n2.firstChild().toText().data();
- TQVariant v = DomTool::elementToVariant( n2.nextSibling().toElement(), TQVariant() );
- 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.
-*/
-
-TQString Uic::createIconViewItemImpl( const TQDomElement &e, const TQString &parent )
-{
- TQDomElement n = e.firstChild().toElement();
- TQString txt;
- TQString pix;
- while ( !n.isNull() ) {
- if ( n.tagName() == "property" ) {
- TQDomElement n2 = n.firstChild().toElement();
- if ( n2.tagName() == "name" ) {
- TQString attrib = n2.firstChild().toText().data();
- TQVariant v = DomTool::elementToVariant( n2.nextSibling().toElement(), TQVariant() );
- 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 "TQIconViewItem(" + parent + "," + trmacro + "(" + fixString( txt ) + "))";
- return "TQIconViewItem(" + parent + "," + trmacro + "(" + fixString( txt ) + ")," + pix + ")";
-
-}
-
-/*!
- Creates implementation of an listview item tag.
-*/
-
-TQString Uic::createListViewItemImpl( const TQDomElement &e, const TQString &parent,
- const TQString &parentItem )
-{
- TQString s;
-
- TQDomElement n = e.firstChild().toElement();
-
- bool hasChildren = e.elementsByTagName( "item" ).count() > 0;
- TQString 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 += "TQListViewItem(" + parentItem + "," + lastItem + ")\n";
- else
- s += "TQListViewItem(" + parent + "," + lastItem + ")\n";
-
- TQStringList textes;
- TQStringList pixmaps;
- while ( !n.isNull() ) {
- if ( n.tagName() == "property" ) {
- TQDomElement n2 = n.firstChild().toElement();
- if ( n2.tagName() == "name" ) {
- TQString attrib = n2.firstChild().toText().data();
- TQVariant v = DomTool::elementToVariant( n2.nextSibling().toElement(), TQVariant() );
- if ( attrib == "text" )
- textes << v.toString();
- else if ( attrib == "pixmap" ) {
- TQString 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(" + TQString::number( i ) + "," + trmacro + "(" + fixString( textes[ i ] ) + "))\n";
- if ( !pixmaps[ i ].isEmpty() )
- s += indent + item + ".setPixmap(" + TQString::number( i ) + "," + pixmaps[ i ] + ")\n";
- }
-
- lastItem = item;
- return s;
-}
-
-/*!
- Creates implementation of an listview column tag.
-*/
-
-TQString Uic::createListViewColumnImpl( const TQDomElement &e, const TQString &parent )
-{
- TQDomElement n = e.firstChild().toElement();
- TQString txt;
- TQString pix;
- bool clickable = FALSE, resizeable = FALSE;
- while ( !n.isNull() ) {
- if ( n.tagName() == "property" ) {
- TQDomElement n2 = n.firstChild().toElement();
- if ( n2.tagName() == "name" ) {
- TQString attrib = n2.firstChild().toText().data();
- TQVariant v = DomTool::elementToVariant( n2.nextSibling().toElement(), TQVariant() );
- 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();
- }
-
- TQString 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().
- */
-TQString Uic::createLayoutImpl( const TQDomElement &e, const TQString& parentClass, const TQString& parent, const TQString& layout )
-{
- TQDomElement n;
- TQString objClass, objName;
- objClass = e.tagName();
-
- TQString qlayout = "TQVBoxLayout";
- if ( objClass == "hbox" )
- qlayout = "TQHBoxLayout";
- else if ( objClass == "grid" )
- qlayout = "TQGridLayout";
-
- 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 == "TQGroupBox" || parentClass == "TQButtonGroup") && layout.isEmpty() ) {
- // special case for group box
- out << indent << parent << ".setColumnLayout(0,TQt.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(TQt.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" ) {
- TQString child = createSpacerImpl( n, parentClass, parent, objName );
- out << indent << objName << ".addItem(" << child << ")" << endl;
- } else if ( tags.contains( n.tagName() ) ) {
- TQString 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() ) {
- TQDomElement 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" ) {
- TQString 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() ) ) {
- TQString child = createObjectImpl( n, parentClass, parent, objName );
- out << endl;
- TQString 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;
-}
-
-
-
-TQString Uic::createSpacerImpl( const TQDomElement &e, const TQString& /*parentClass*/, const TQString& /*parent*/, const TQString& /*layout*/)
-{
- TQDomElement n;
- TQString objClass, objName;
- objClass = e.tagName();
- objName = registerObject( "spacer" );
-
- TQSize size = DomTool::readProperty( e, "sizeHint", TQSize(0,0) ).toSize();
- TQString 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 TQt 2.2
- TQRect geom = DomTool::readProperty( e, "geometry", TQRect(0,0,0,0) ).toRect();
- size = geom.size();
- }
-
- if ( isVspacer )
- out << indent << objName << " = TQSpacerItem("
- << size.width() << "," << size.height()
- << ",TQSizePolicy.Minimum,TQSizePolicy." << sizeType << ")" << endl;
- else
- out << indent << objName << " = TQSpacerItem("
- << size.width() << "," << size.height()
- << ",TQSizePolicy." << sizeType << ",TQSizePolicy.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 TQDomElement & e, const TQString& exclusiveProp )
-{
- TQDomElement n;
- TQString objClass = getClassName( e );
- if ( objClass.isEmpty() )
- return;
- TQString 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" ) );
- TQDomElement n2 = n.firstChild().toElement();
- if ( n2.tagName() == "name" ) {
- TQString prop = n2.firstChild().toText().data();
- if ( prop != exclusiveProp )
- continue;
- TQString value = setObjectProperty( objClass, objName, prop, n2.nextSibling().toElement(), stdset );
- if ( value.isEmpty() )
- continue;
- out << indent << objName << ".setProperty('" << prop << "',TQVariant(" << 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.
- */
-TQString Uic::setObjectProperty( const TQString& objClass, const TQString& obj, const TQString &prop, const TQDomElement &e, bool stdset )
-{
- TQString v;
- if ( e.tagName() == "rect" ) {
- TQDomElement 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 = "TQRect(%1,%2,%3,%4)";
- v = v.arg(x).arg(y).arg(w).arg(h);
-
- } else if ( e.tagName() == "point" ) {
- TQDomElement 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 = "TQPoint(%1,%2)";
- v = v.arg(x).arg(y);
- } else if ( e.tagName() == "size" ) {
- TQDomElement 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 = "TQSize(%1,%2)";
- v = v.arg(w).arg(h);
- } else if ( e.tagName() == "color" ) {
- TQDomElement 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 = "TQColor(%1,%2,%3)";
- v = v.arg(r).arg(g).arg(b);
- } else if ( e.tagName() == "font" ) {
- TQDomElement n3 = e.firstChild().toElement();
- TQString fontname = "f";
- if ( !obj.isEmpty() ) {
- fontname = obj + "_font";
- out << indent << fontname << " = TQFont(self." << obj << ".font())" << endl;
- } else {
- out << indent << fontname << " = TQFont(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 << "TQToolTip.add(self." << obj << "," + trmacro + "(" << fixString( e.firstChild().toText().data() ) << "))" << endl;
- else
- out << indent << "TQToolTip.add(self," + trmacro + "(" << fixString( e.firstChild().toText().data() ) << "))" << endl;
- } else if ( prop == "whatsThis" ) {
- if ( !obj.isEmpty() )
- out << indent << "TQWhatsThis.add(self." << obj << "," << trmacro << "(" << fixString( e.firstChild().toText().data() ) << "))" << endl;
- else
- out << indent << "TQWhatsThis.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 = "TQIconSet(%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";
- TQString oc = objClass;
- TQString ev = e.firstChild().toText().data();
- if ( oc == "TQListView" && ev == "Manual" ) // #### workaround, rename TQListView::Manual of WithMode enum in 3.0
- oc = "TQScrollView";
- v = v.arg( oc ).arg( ev );
- } else if ( e.tagName() == "set" ) {
- TQString keys( e.firstChild().toText().data() );
- TQStringList lst = TQStringList::split( '|', keys );
- v = "";
- for ( TQStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) {
- v += objClass + "." + *it;
- if ( it != lst.fromLast() )
- v += " | ";
- }
- } else if ( e.tagName() == "sizepolicy" ) {
- TQDomElement n3 = e.firstChild().toElement();
- TQSizePolicy sp;
- while ( !n3.isNull() ) {
- if ( n3.tagName() == "hsizetype" )
- sp.setHorData( (TQSizePolicy::SizeType)n3.firstChild().toText().data().toInt() );
- else if ( n3.tagName() == "vsizetype" )
- sp.setVerData( (TQSizePolicy::SizeType)n3.firstChild().toText().data().toInt() );
- n3 = n3.nextSibling().toElement();
- }
- TQString tmp;
- if ( !obj.isEmpty() )
- tmp = "self." + obj;
- else
- tmp = "self";
- v = "TQSizePolicy(%1,%2," + tmp + ".sizePolicy().hasHeightForWidth())";
- v = v.arg( (int)sp.horData() ).arg( (int)sp.verData() );
- } else if ( e.tagName() == "palette" ) {
- TQPalette pal;
- bool no_pixmaps = e.elementsByTagName( "pixmap" ).count() == 0;
- TQDomElement n;
- if ( no_pixmaps ) {
- n = e.firstChild().toElement();
- while ( !n.isNull() ) {
- TQColorGroup 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 == TQPalette( pal.active().button(), pal.active().background() ) ) {
- v = "TQPalette(TQColor(%1,%2,%3),TQColor(%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 {
- TQString palette = "pal";
- if ( !pal_used ) {
- out << indent << palette << " = TQPalette()" << endl;
- pal_used = TRUE;
- }
- TQString cg = "cg";
- if ( !cg_used ) {
- out << indent << cg << " = TQColorGroup()" << 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 = "TQCursor(%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 TQString& name, const TQDomElement& e )
-{
- TQColorGroup cg;
- int r = -1;
- TQDomElement n = e.firstChild().toElement();
- TQString color;
- while ( !n.isNull() ) {
- if ( n.tagName() == "color" ) {
- r++;
- TQColor col = DomTool::readColor( n );
- color = "TQColor(%1,%2,%3)";
- color = color.arg( col.red() ).arg( col.green() ).arg( col.blue() );
- if ( col == white )
- color = "TQt.white";
- else if ( col == black )
- color = "TQt.black";
- if ( n.nextSibling().toElement().tagName() != "pixmap" ) {
- out << indent << name << ".setColor(TQColorGroup." << ColorRole[r] << "," << color << ")" << endl;
- }
- } else if ( n.tagName() == "pixmap" ) {
- TQString pixmap = n.firstChild().toText().data();
- if ( !pixmapLoaderFunction.isEmpty() ) {
- pixmap.prepend( pixmapLoaderFunction + "(" );
- pixmap.append( ")" );
- }
- out << indent << name << ".setBrush(TQColorGroup."
- << ColorRole[r] << ",TQBrush(" << color << "," << pixmap << "))" << endl;
- }
- n = n.nextSibling().toElement();
- }
-}
-
-/*!
- Auxiliary function to load a color group. The colorgroup must not
- contain pixmaps.
- */
-TQColorGroup Uic::loadColorGroup( const TQDomElement &e )
-{
- TQColorGroup cg;
- int r = -1;
- TQDomElement n = e.firstChild().toElement();
- TQColor col;
- while ( !n.isNull() ) {
- if ( n.tagName() == "color" ) {
- r++;
- cg.setColor( (TQColorGroup::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()
- */
-TQString Uic::registerObject( const TQString& name )
-{
- if ( objectNames.isEmpty() ) {
- // some temporary variables we need
- objectNames += "img";
- objectNames += "item";
- objectNames += "cg";
- objectNames += "pal";
- }
-
- TQString result = name;
- int i;
- while ( ( i = result.find(' ' )) != -1 ) {
- result[i] = '_';
- }
-
- if ( objectNames.contains( result ) ) {
- int i = 2;
- while ( objectNames.contains( result + "_" + TQString::number(i) ) )
- i++;
- result += "_";
- result += TQString::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()
- */
-TQString Uic::registeredName( const TQString& 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 TQString& name )
-{
- return objectMapper.contains( name );
-}
-
-
-/*!
- Unifies the entries in stringlist \a list. Should really be a TQStringList feature.
- */
-TQStringList Uic::unique( const TQStringList& list )
-{
- TQStringList result;
- if (list.isEmpty() )
- return result;
- TQStringList l = list;
- l.sort();
- result += l.first();
- for ( TQStringList::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
- */
-TQString Uic::createObjectInstance( const TQString& objClass, const TQString& parent, const TQString& objName )
-{
-
- if ( objClass.mid(1) == "ComboBox" ) {
- return objClass + "(0," + parent + ",'" + objName + "')";
- }
- return objClass + "(" + parent + ",'" + objName + "')";
-}
-
-bool Uic::isLayout( const TQString& name ) const
-{
- return layoutObjects.contains( name );
-}
-
-
-#if defined(BLACKADDER)
-#include "ba.h"
-
-int BA::compilePython(const TQString &fileName,const TQString &outputFile,
- const TQString &trmacro,bool execCode)
-{
-#else
-int main( int argc, char * argv[] )
-{
- const char *error = 0;
- TQString fileName;
- TQString outputFile;
- TQString trmacro;
- bool execCode = FALSE;
-
- for ( int n = 1; n < argc && error == 0; n++ ) {
- TQCString arg = argv[n];
- if ( arg[0] == '-' ) { // option
- TQCString 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, "PyTQt user interface compiler\n" );
- if ( error )
- fprintf( stderr, "pyuic: %s\n", error );
-
- fprintf( stderr, "Usage: %s [options] <uifile>\n"
- "\nGenerate PyTQt implementation:\n"
- " %s [options] <uifile>\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
-
- TQFile file( fileName );
- if ( !file.open( IO_ReadOnly ) )
- tqFatal( "pyuic: Could not open file '%s' ", (const char *)fileName );
-
- TQFile fileOut;
- if (!outputFile.isEmpty()) {
- fileOut.setName( outputFile );
- if (!fileOut.open( IO_WriteOnly ) )
- tqFatal( "pyuic: Could not open output file '%s'", (const char *)outputFile );
- } else {
- fileOut.open( IO_WriteOnly, stdout );
- }
- TQTextStream out( &fileOut );
- out.setEncoding( TQTextStream::UnicodeUTF8 );
-
- TQDomDocument doc;
- if ( !doc.setContent( &file ) )
- tqFatal( "pyuic: Failed to parse %s\n", (const char *)fileName );
-
- out << "# Form implementation generated from reading ui file '" << fileName << "'" << endl;
- out << "#" << endl;
- out << "# Created by: The Python User Interface Compiler (pyuic) " << PYTQT_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 python_tqt.qt import *" << endl;
-
- Uic( out, doc, trmacro.isEmpty() ? TQString("self.tr") : trmacro );
-
- if (execCode) {
- out << endl;
- out << endl;
- out << "if __name__ == '__main__':" << endl;
- out << " a = TQApplication(sys.argv)" << endl;
- out << " TQObject.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
deleted file mode 100644
index b772aca..0000000
--- a/pyuic2/uic.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/**********************************************************************
-** Copyright (C) 2000 Troll Tech AS. All rights reserved.
-** Copyright (C) 2000, 2001 Phil Thompson <phil@river-bank.demon.co.uk>
-**
-** This file is part of TQt 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 <tqnamespace.h>
-#include <tqdom.h>
-#include <tqstring.h>
-#include <tqstringlist.h>
-#include <tqmap.h>
-#include <tqtextstream.h>
-#include <tqcolor.h>
-
-
-#define PYTQT_VERSION "3.18.1"
-
-
-class Uic : public TQt
-{
-public:
- Uic( TQTextStream& out, TQDomDocument doc, const TQString &trm );
-
- void createFormImpl( const TQDomElement &e );
-
- TQString createObjectImpl( const TQDomElement &e, const TQString& parentClass, const TQString& parent, const TQString& layout = TQString::null );
- TQString createLayoutImpl( const TQDomElement &e, const TQString& parentClass, const TQString& parent, const TQString& layout = TQString::null );
- TQString createObjectInstance( const TQString& objClass, const TQString& parent, const TQString& objName );
- TQString createSpacerImpl( const TQDomElement &e, const TQString& parentClass, const TQString& parent, const TQString& layout = TQString::null );
- void createExclusiveProperty( const TQDomElement & e, const TQString& exclusiveProp );
- TQString createListBoxItemImpl( const TQDomElement &e, const TQString &parent );
- TQString createIconViewItemImpl( const TQDomElement &e, const TQString &parent );
- TQString createListViewColumnImpl( const TQDomElement &e, const TQString &parent );
- TQString createListViewItemImpl( const TQDomElement &e, const TQString &parent,
- const TQString &parentItem );
- void createColorGroupImpl( const TQString& cg, const TQDomElement& e );
- TQColorGroup loadColorGroup( const TQDomElement &e );
-
- TQString getClassName( const TQDomElement& e );
- TQString getObjectName( const TQDomElement& e );
- TQString getLayoutName( const TQDomElement& e );
-
- TQString setObjectProperty( const TQString& objClass, const TQString& obj, const TQString &prop, const TQDomElement &e, bool stdset );
-
- TQString registerObject( const TQString& name );
- TQString registeredName( const TQString& name );
- bool isObjectRegistered( const TQString& name );
- TQStringList unique( const TQStringList& );
-
-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;
- }
-
- TQString indent, newindent;
- int nrindents;
-
- TQTextStream& out;
- TQStringList objectNames;
- TQMap<TQString,TQString> objectMapper;
- TQStringList tags;
- TQStringList layouts;
- TQString formName;
- TQString lastItem;
- TQString trmacro;
-
- struct Buddy
- {
- Buddy( const TQString& k, const TQString& b )
- : key( k ), buddy( b ) {}
- Buddy(){}; // for valuelist
- TQString key;
- TQString buddy;
- bool operator==( const Buddy& other ) const
- { return (key == other.key); }
- };
- struct CustomInclude
- {
- TQString header;
- TQString location;
- };
- TQValueList<Buddy> buddies;
-
- TQStringList layoutObjects;
- bool isLayout( const TQString& name ) const;
-
- uint item_used : 1;
- uint cg_used : 1;
- uint pal_used : 1;
-
- TQString pixmapLoaderFunction;
- TQString nameOfClass;
-};
-
-#endif
diff --git a/pyuic2/widgetdatabase.cpp b/pyuic2/widgetdatabase.cpp
deleted file mode 100644
index c241ad0..0000000
--- a/pyuic2/widgetdatabase.cpp
+++ /dev/null
@@ -1,640 +0,0 @@
-/**********************************************************************
-** Copyright (C) 2000 Trolltech AS. All rights reserved.
-**
-** This file is part of TQt 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 <tqvariant.h> // HP-UX compiler needs this here
-
-#include "widgetdatabase.h"
-
-#if defined(DESIGNER)
-#include "../designer/formwindow.h"
-#include "../designer/pixmapchooser.h"
-#endif
-
-//#include "../integration/tdevelop/tdewidgets.h"
-
-#include <globaldefs.h>
-#include <tqstrlist.h>
-#include <tqdict.h>
-#include <tqfile.h>
-#include <tqtextstream.h>
-
-#include <tqmodules.h>
-
-const int dbsize = 300;
-const int dbcustom = 200;
-const int dbdictsize = 211;
-static WidgetDatabaseRecord* db[ dbsize ];
-static TQDict<int> *className2Id = 0;
-static int dbcount = 0;
-static int dbcustomcount = 200;
-static TQStrList *wGroups;
-static TQStrList *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 TQStrList;
- invisibleGroups = new TQStrList;
- invisibleGroups->append( "Forms" );
- invisibleGroups->append( "Temp" );
- className2Id = new TQDict<int>( dbdictsize );
- className2Id->setAutoDelete( TRUE );
-
- WidgetDatabaseRecord *r = 0;
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "pushbutton.xpm";
- r->name = "TQPushButton";
- r->group = widgetGroup( "Buttons" );
- r->toolTip = "Push Button";
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "toolbutton.xpm";
- r->name = "TQToolButton";
- r->group = widgetGroup( "Buttons" );
- r->toolTip = "Tool Button";
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "radiobutton.xpm";
- r->name = "TQRadioButton";
- r->group = widgetGroup( "Buttons" );
- r->toolTip = "Radio Button";
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "checkbox.xpm";
- r->name = "TQCheckBox";
- r->group = widgetGroup( "Buttons" );
- r->toolTip = "Check Box";
-
-
-
-
- append( r );
- r = new WidgetDatabaseRecord;
- r->iconSet = "groupbox.xpm";
- r->name = "TQGroupBox";
- r->group = widgetGroup( "Containers" );
- r->toolTip = "Group Box";
- r->isContainer = TRUE;
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "buttongroup.xpm";
- r->name = "TQButtonGroup";
- r->group = widgetGroup( "Containers" );
- r->toolTip = "Button Group";
- r->isContainer = TRUE;
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "frame.xpm";
- r->name = "TQFrame";
- r->group = widgetGroup( "Containers" );
- r->toolTip = "Frame";
- r->isContainer = TRUE;
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "tabwidget.xpm";
- r->name = "TQTabWidget";
- r->group = widgetGroup( "Containers" );
- r->toolTip = "Tabwidget";
- r->isContainer = TRUE;
-
- append( r );
-
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "listbox.xpm";
- r->name = "TQListBox";
- r->group = widgetGroup( "Views" );
- r->toolTip = "List Box";
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "listview.xpm";
- r->name = "TQListView";
- r->group = widgetGroup( "Views" );
- r->toolTip = "List View";
-
- append( r );
-
-#if defined(TQT_MODULE_ICONVIEW) || defined(UIC)
- r = new WidgetDatabaseRecord;
- r->iconSet = "iconview.xpm";
- r->name = "TQIconView";
- r->group = widgetGroup( "Views" );
- r->toolTip = "Icon View";
-
- append( r );
-#endif
-
-#if defined(TQT_MODULE_TABLE)
- r = new WidgetDatabaseRecord;
- r->iconSet = "table.xpm";
- r->name = "TQTable";
- r->group = widgetGroup( "Views" );
- r->toolTip = "Table";
-
- append( r );
-#endif
-
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "lineedit.xpm";
- r->name = "TQLineEdit";
- r->group = widgetGroup( "Input" );
- r->toolTip = "Line Edit";
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "spinbox.xpm";
- r->name = "TQSpinBox";
- r->group = widgetGroup( "Input" );
- r->toolTip = "Spin Box";
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "multilineedit.xpm";
- r->name = "TQMultiLineEdit";
- r->group = widgetGroup( "Input" );
- r->toolTip = "Multi Line Edit";
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "combobox.xpm";
- r->name = "TQComboBox";
- r->group = widgetGroup( "Input" );
- r->toolTip = "Combo Box";
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "slider.xpm";
- r->name = "TQSlider";
- r->group = widgetGroup( "Input" );
- r->toolTip = "Slider";
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "dial.xpm";
- r->name = "TQDial";
- r->group = widgetGroup( "Input" );
- r->toolTip = "Dial";
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "label.xpm";
- r->name = "TQLabel";
- 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 = "TQLCDNumber";
- 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 = "TQProgressBar";
- r->group = widgetGroup( "Display" );
- r->toolTip = "Progress Bar";
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "textview.xpm";
- r->name = "TQTextView";
- r->group = widgetGroup( "Display" );
- r->toolTip = "Text View";
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "textbrowser.xpm";
- r->name = "TQTextBrowser";
- 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 = "TQWidget";
- r->isContainer = FALSE;
- r->group = widgetGroup( "Forms" );
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->name = "TQDialog";
- r->group = widgetGroup( "Forms" );
- r->isContainer = FALSE;
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->name = "TQWizard";
- r->group = widgetGroup( "Forms" );
- r->isContainer = TRUE;
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->name = "TQDesignerWizard";
- r->group = widgetGroup( "Forms" );
- r->isContainer = TRUE;
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->name = "TQLayoutWidget";
- r->group = widgetGroup( "Temp" );
- r->includeFile = "";
- r->isContainer = TRUE;
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "tabwidget.xpm";
- r->name = "TQDesignerTabWidget";
- r->group = widgetGroup( "Temp" );
- r->isContainer = TRUE;
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "tabwidget.xpm";
- r->name = "TQDesignerWidget";
- r->group = widgetGroup( "Temp" );
- r->isContainer = TRUE;
-
- append( r );
-
- r = new WidgetDatabaseRecord;
- r->iconSet = "tabwidget.xpm";
- r->name = "TQDesignerDialog";
- r->group = widgetGroup( "Temp" );
- r->isContainer = TRUE;
-
- append( r );
-
-// tqt_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.
-*/
-
-TQIconSet WidgetDatabase::iconSet( int id )
-{
- setupDataBase();
- WidgetDatabaseRecord *r = at( id );
- if ( !r )
- return TQIconSet();
-#if defined(DESIGNER)
- if ( !r->icon )
- r->icon = new TQIconSet( PixmapChooser::loadPixmap( r->iconSet, PixmapChooser::Small ),
- PixmapChooser::loadPixmap( r->iconSet, PixmapChooser::Large ) );
- return *r->icon;
-#endif
-
- return TQIconSet();
-}
-
-/*!
- Returns the classname of the widget which is registered as \a id.
-*/
-
-TQString WidgetDatabase::className( int id )
-{
- setupDataBase();
- WidgetDatabaseRecord *r = at( id );
- if ( !r )
- return TQString::null;
- return r->name;
-}
-
-/*!
- Returns the group to which the widget registered as \a id belongs.
-*/
-
-TQString WidgetDatabase::group( int id )
-{
- setupDataBase();
- WidgetDatabaseRecord *r = at( id );
- if ( !r )
- return TQString::null;
- return r->group;
-}
-
-/*! Returns the tooltip text of the widget which is registered as \a
- id.
-*/
-
-TQString WidgetDatabase::toolTip( int id )
-{
- setupDataBase();
- WidgetDatabaseRecord *r = at( id );
- if ( !r )
- return TQString::null;
- return r->toolTip;
-}
-
-/*! Returns the what's this? test of the widget which is registered
- as \a id.
-*/
-
-TQString WidgetDatabase::whatsThis( int id )
-{
- setupDataBase();
- WidgetDatabaseRecord *r = at( id );
- if ( !r )
- return TQString::null;
- return r->whatsThis;
-}
-
-/*!
- Returns the include file if the widget which is registered as \a id.
-*/
-
-TQString WidgetDatabase::includeFile( int id )
-{
- setupDataBase();
- WidgetDatabaseRecord *r = at( id );
- if ( !r )
- return TQString::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;
-}
-
-TQString WidgetDatabase::createWidgetName( int id )
-{
- setupDataBase();
- TQString n = className( id );
- if ( n == "TQLayoutWidget" )
- n = "Layout";
- if ( n[ 0 ] == 'Q' )
- n = n.mid( 1 );
- WidgetDatabaseRecord *r = at( id );
- if ( !r )
- return n;
- n += TQString::number( ++r->nameCounter );
- return n;
-}
-
-/*! Returns the id for \a name or -1 if \a name is unknown.
- */
-int WidgetDatabase::idFromClassName( const TQString &name )
-{
- setupDataBase();
- if ( name.isEmpty() )
- return 0;
- int *i = className2Id->find( name );
- if ( i )
- return *i;
- if ( name == "FormWindow" )
- return idFromClassName( "TQLayoutWidget" );
- 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 = TQMAX( dbcount, index );
-}
-
-void WidgetDatabase::append( WidgetDatabaseRecord *r )
-{
- insert( dbcount++, r );
-}
-
-TQString WidgetDatabase::widgetGroup( const TQString &g )
-{
- if ( wGroups->find( g ) == -1 )
- wGroups->append( g );
- return g;
-}
-
-TQString WidgetDatabase::widgetGroup( int i )
-{
- setupDataBase();
- if ( i >= 0 && i < (int)wGroups->count() )
- return wGroups->at( i );
- return TQString::null;
-}
-
-int WidgetDatabase::numWidgetGroups()
-{
- setupDataBase();
- return wGroups->count();
-}
-
-bool WidgetDatabase::isGroupVisible( const TQString &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 TQString &docPath )
-{
- TQString whatsthisFile = docPath + "/whatsthis";
- TQFile f( whatsthisFile );
- if ( !f.open( IO_ReadOnly ) )
- return;
- TQTextStream ts( &f );
- while ( !ts.atEnd() ) {
- TQString s = ts.readLine();
- TQStringList l = TQStringList::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
deleted file mode 100644
index 9a44919..0000000
--- a/pyuic2/widgetdatabase.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/**********************************************************************
-** Copyright (C) 2000 Trolltech AS. All rights reserved.
-**
-** This file is part of TQt 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 <tqiconset.h>
-#include <tqstring.h>
-#include <tqstringlist.h>
-
-struct WidgetDatabaseRecord
-{
- WidgetDatabaseRecord();
- ~WidgetDatabaseRecord();
- TQString iconSet, name, group, toolTip, whatsThis, includeFile;
- uint isContainer : 1;
- TQIconSet *icon;
- int nameCounter;
-};
-
-class WidgetDatabase : public TQt
-{
-public:
- WidgetDatabase();
- static void setupDataBase();
-
- static int count();
- static int startCustom();
-
- static TQIconSet iconSet( int id );
- static TQString className( int id );
- static TQString group( int id );
- static TQString toolTip( int id );
- static TQString whatsThis( int id );
- static TQString includeFile( int id );
- static bool isContainer( int id );
-
- static int idFromClassName( const TQString &name );
- static TQString createWidgetName( int id );
-
- static WidgetDatabaseRecord *at( int index );
- static void insert( int index, WidgetDatabaseRecord *r );
- static void append( WidgetDatabaseRecord *r );
-
- static TQString widgetGroup( const TQString &g );
- static TQString widgetGroup( int i );
- static int numWidgetGroups();
- static bool isGroupVisible( const TQString &g );
-
- static int addCustomWidget( WidgetDatabaseRecord *r );
- static bool isCustomWidget( int id );
-
- static bool isWhatsThisLoaded();
- static void loadWhatsThis( const TQString &docPath );
-
-};
-
-#endif