summaryrefslogtreecommitdiffstats
path: root/kommander
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commite9ae80694875f869892f13f4fcaf1170a00dea41 (patch)
treeaa2f8d8a217e2d376224c8d46b7397b68d35de2d /kommander
downloadtdewebdev-e9ae80694875f869892f13f4fcaf1170a00dea41.tar.gz
tdewebdev-e9ae80694875f869892f13f4fcaf1170a00dea41.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdewebdev@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kommander')
-rw-r--r--kommander/AUTHORS5
-rw-r--r--kommander/COPYING339
-rw-r--r--kommander/ChangeLog611
-rw-r--r--kommander/INSTALL186
-rw-r--r--kommander/Kommander-TODO.kno313
-rw-r--r--kommander/Makefile.am15
-rw-r--r--kommander/NEWS1
-rw-r--r--kommander/README70
-rw-r--r--kommander/VERSION1
-rw-r--r--kommander/configure.in.in14
-rw-r--r--kommander/editor/Makefile.am53
-rw-r--r--kommander/editor/actiondnd.cpp1244
-rw-r--r--kommander/editor/actiondnd.h304
-rw-r--r--kommander/editor/actioneditor.ui201
-rw-r--r--kommander/editor/actioneditorimpl.cpp261
-rw-r--r--kommander/editor/actioneditorimpl.h64
-rw-r--r--kommander/editor/actionlistview.cpp111
-rw-r--r--kommander/editor/actionlistview.h75
-rw-r--r--kommander/editor/asciivalidator.cpp77
-rw-r--r--kommander/editor/asciivalidator.h46
-rw-r--r--kommander/editor/assistproc.cpp74
-rw-r--r--kommander/editor/assistproc.h47
-rw-r--r--kommander/editor/assoctexteditor.ui222
-rw-r--r--kommander/editor/assoctexteditorimpl.cpp506
-rw-r--r--kommander/editor/assoctexteditorimpl.h133
-rw-r--r--kommander/editor/choosewidget.ui150
-rw-r--r--kommander/editor/choosewidgetimpl.cpp128
-rw-r--r--kommander/editor/choosewidgetimpl.h45
-rw-r--r--kommander/editor/command.cpp1838
-rw-r--r--kommander/editor/command.h931
-rw-r--r--kommander/editor/connectioneditor.ui418
-rw-r--r--kommander/editor/connectioneditorimpl.cpp373
-rw-r--r--kommander/editor/connectioneditorimpl.h76
-rw-r--r--kommander/editor/createtemplate.ui222
-rw-r--r--kommander/editor/defs.cpp78
-rw-r--r--kommander/editor/defs.h35
-rw-r--r--kommander/editor/filechooser.cpp63
-rw-r--r--kommander/editor/filechooser.h42
-rw-r--r--kommander/editor/formfile.cpp302
-rw-r--r--kommander/editor/formfile.h74
-rw-r--r--kommander/editor/formsettings.ui338
-rw-r--r--kommander/editor/formsettingsimpl.cpp58
-rw-r--r--kommander/editor/formsettingsimpl.h43
-rw-r--r--kommander/editor/formwindow.cpp2609
-rw-r--r--kommander/editor/formwindow.h292
-rw-r--r--kommander/editor/functions.ui722
-rw-r--r--kommander/editor/functionsimpl.cpp392
-rw-r--r--kommander/editor/functionsimpl.h61
-rw-r--r--kommander/editor/globaldefs.h45
-rw-r--r--kommander/editor/hierarchyview.cpp724
-rw-r--r--kommander/editor/hierarchyview.h161
-rw-r--r--kommander/editor/iconvieweditor.ui450
-rw-r--r--kommander/editor/iconvieweditorimpl.cpp158
-rw-r--r--kommander/editor/iconvieweditorimpl.h52
-rw-r--r--kommander/editor/kmdr-editor.desktop129
-rw-r--r--kommander/editor/kommander-new.xml587
-rw-r--r--kommander/editor/kommander.xml998
-rw-r--r--kommander/editor/kommanderui.rc5
-rw-r--r--kommander/editor/layout.cpp956
-rw-r--r--kommander/editor/layout.h180
-rw-r--r--kommander/editor/listboxeditor.ui455
-rw-r--r--kommander/editor/listboxeditorimpl.cpp216
-rw-r--r--kommander/editor/listboxeditorimpl.h55
-rw-r--r--kommander/editor/listeditor.ui147
-rw-r--r--kommander/editor/listvieweditor.ui936
-rw-r--r--kommander/editor/listvieweditorimpl.cpp585
-rw-r--r--kommander/editor/listvieweditorimpl.h94
-rw-r--r--kommander/editor/main.cpp81
-rw-r--r--kommander/editor/mainwindow.cpp1903
-rw-r--r--kommander/editor/mainwindow.h317
-rw-r--r--kommander/editor/mainwindowactions.cpp1201
-rw-r--r--kommander/editor/messagelog.cpp149
-rw-r--r--kommander/editor/messagelog.h55
-rw-r--r--kommander/editor/metadatabase.cpp1219
-rw-r--r--kommander/editor/metadatabase.h222
-rw-r--r--kommander/editor/multilineeditor.ui225
-rw-r--r--kommander/editor/multilineeditorimpl.cpp98
-rw-r--r--kommander/editor/multilineeditorimpl.h61
-rw-r--r--kommander/editor/newform.ui210
-rw-r--r--kommander/editor/newformimpl.cpp202
-rw-r--r--kommander/editor/newformimpl.h73
-rw-r--r--kommander/editor/orderindicator.cpp107
-rw-r--r--kommander/editor/orderindicator.h52
-rw-r--r--kommander/editor/paletteeditor.ui518
-rw-r--r--kommander/editor/paletteeditoradvanced.ui766
-rw-r--r--kommander/editor/paletteeditoradvancedimpl.cpp638
-rw-r--r--kommander/editor/paletteeditoradvancedimpl.h90
-rw-r--r--kommander/editor/paletteeditorimpl.cpp299
-rw-r--r--kommander/editor/paletteeditorimpl.h70
-rw-r--r--kommander/editor/parser.cpp66
-rw-r--r--kommander/editor/parser.h33
-rw-r--r--kommander/editor/pics/Makefile.am5
-rw-r--r--kommander/editor/pics/arrow.xbm10
-rw-r--r--kommander/editor/pics/background.pngbin0 -> 15068 bytes
-rw-r--r--kommander/editor/pics/cross.xbm10
-rw-r--r--kommander/editor/pics/hand.xbm10
-rw-r--r--kommander/editor/pics/hsplit.xbm10
-rw-r--r--kommander/editor/pics/ibeam.xbm10
-rw-r--r--kommander/editor/pics/images.h10979
-rw-r--r--kommander/editor/pics/kfontcombo.pngbin0 -> 1194 bytes
-rw-r--r--kommander/editor/pics/kommandersplash.pngbin0 -> 242008 bytes
-rw-r--r--kommander/editor/pics/large/adjustsize.xpm187
-rw-r--r--kommander/editor/pics/large/buttongroup.xpm79
-rw-r--r--kommander/editor/pics/large/checkbox.xpm67
-rw-r--r--kommander/editor/pics/large/combobox.xpm192
-rw-r--r--kommander/editor/pics/large/connecttool.xpm187
-rw-r--r--kommander/editor/pics/large/customwidget.xpm41
-rw-r--r--kommander/editor/pics/large/datepicker.xpm121
-rw-r--r--kommander/editor/pics/large/dial.xpm51
-rw-r--r--kommander/editor/pics/large/disabled/adjustsize.xpm51
-rw-r--r--kommander/editor/pics/large/disabled/connecttool.xpm57
-rw-r--r--kommander/editor/pics/large/disabled/editbreaklayout.xpm54
-rw-r--r--kommander/editor/pics/large/disabled/editcopy.xpm69
-rw-r--r--kommander/editor/pics/large/disabled/editgrid.xpm49
-rw-r--r--kommander/editor/pics/large/disabled/editpaste.xpm69
-rw-r--r--kommander/editor/pics/large/disabled/editslots.xpm65
-rw-r--r--kommander/editor/pics/large/disabled/editvlayout.xpm55
-rw-r--r--kommander/editor/pics/large/disabled/layout.xpm52
-rw-r--r--kommander/editor/pics/large/disabled/left.xpm59
-rw-r--r--kommander/editor/pics/large/disabled/redo.xpm52
-rw-r--r--kommander/editor/pics/large/disabled/right.xpm57
-rw-r--r--kommander/editor/pics/large/disabled/undo.xpm52
-rw-r--r--kommander/editor/pics/large/editbreaklayout.xpm250
-rw-r--r--kommander/editor/pics/large/editcopy.xpm43
-rw-r--r--kommander/editor/pics/large/editcut.xpm42
-rw-r--r--kommander/editor/pics/large/editdelete.xpm226
-rw-r--r--kommander/editor/pics/large/editgrid.xpm206
-rw-r--r--kommander/editor/pics/large/edithlayout.xpm103
-rw-r--r--kommander/editor/pics/large/editlower.xpm144
-rw-r--r--kommander/editor/pics/large/editpaste.xpm46
-rw-r--r--kommander/editor/pics/large/editraise.xpm149
-rw-r--r--kommander/editor/pics/large/editslots.xpm264
-rw-r--r--kommander/editor/pics/large/editvlayout.xpm89
-rw-r--r--kommander/editor/pics/large/filenew.xpm42
-rw-r--r--kommander/editor/pics/large/fileopen.xpm44
-rw-r--r--kommander/editor/pics/large/filesave.xpm42
-rw-r--r--kommander/editor/pics/large/form.xpm91
-rw-r--r--kommander/editor/pics/large/frame.xpm58
-rw-r--r--kommander/editor/pics/large/groupbox.xpm60
-rw-r--r--kommander/editor/pics/large/help.xpm182
-rw-r--r--kommander/editor/pics/large/home.xpm250
-rw-r--r--kommander/editor/pics/large/iconview.xpm142
-rw-r--r--kommander/editor/pics/large/image.xpm267
-rw-r--r--kommander/editor/pics/large/label.xpm105
-rw-r--r--kommander/editor/pics/large/layout.xpm167
-rw-r--r--kommander/editor/pics/large/lcdnumber.xpm154
-rw-r--r--kommander/editor/pics/large/left.xpm181
-rw-r--r--kommander/editor/pics/large/line.xpm45
-rw-r--r--kommander/editor/pics/large/lineedit.xpm135
-rw-r--r--kommander/editor/pics/large/listbox.xpm121
-rw-r--r--kommander/editor/pics/large/listview.xpm148
-rw-r--r--kommander/editor/pics/large/multilineedit.xpm108
-rw-r--r--kommander/editor/pics/large/newform.xpm35
-rw-r--r--kommander/editor/pics/large/ordertool.xpm157
-rw-r--r--kommander/editor/pics/large/pixlabel.xpm204
-rw-r--r--kommander/editor/pics/large/pointer.xpm27
-rw-r--r--kommander/editor/pics/large/print.xpm155
-rw-r--r--kommander/editor/pics/large/progress.xpm145
-rw-r--r--kommander/editor/pics/large/project.xpm50
-rw-r--r--kommander/editor/pics/large/pushbutton.xpm72
-rw-r--r--kommander/editor/pics/large/radiobutton.xpm67
-rw-r--r--kommander/editor/pics/large/redo.xpm42
-rw-r--r--kommander/editor/pics/large/right.xpm181
-rw-r--r--kommander/editor/pics/large/slider.xpm133
-rw-r--r--kommander/editor/pics/large/spacer.xpm248
-rw-r--r--kommander/editor/pics/large/spinbox.xpm102
-rw-r--r--kommander/editor/pics/large/table.xpm69
-rw-r--r--kommander/editor/pics/large/tabwidget.xpm94
-rw-r--r--kommander/editor/pics/large/textbrowser.xpm196
-rw-r--r--kommander/editor/pics/large/textview.xpm103
-rw-r--r--kommander/editor/pics/large/toolbutton.xpm123
-rw-r--r--kommander/editor/pics/large/undo.xpm42
-rw-r--r--kommander/editor/pics/mini/down.xpm71
-rw-r--r--kommander/editor/pics/mini/form.xpm27
-rw-r--r--kommander/editor/pics/mini/image.xpm28
-rw-r--r--kommander/editor/pics/mini/left.xpm69
-rw-r--r--kommander/editor/pics/mini/resetproperty.xpm13
-rw-r--r--kommander/editor/pics/mini/right.xpm77
-rw-r--r--kommander/editor/pics/mini/up.xpm68
-rw-r--r--kommander/editor/pics/mkimages3
-rw-r--r--kommander/editor/pics/mkpics2
-rw-r--r--kommander/editor/pics/no.xbm10
-rw-r--r--kommander/editor/pics/qtlogo.pngbin0 -> 12615 bytes
-rw-r--r--kommander/editor/pics/sizeall.xbm10
-rw-r--r--kommander/editor/pics/sizeb.xbm10
-rw-r--r--kommander/editor/pics/sizef.xbm10
-rw-r--r--kommander/editor/pics/sizeh.xbm10
-rw-r--r--kommander/editor/pics/sizev.xbm10
-rw-r--r--kommander/editor/pics/small/adjustsize.pngbin0 -> 495 bytes
-rw-r--r--kommander/editor/pics/small/book.xpm32
-rw-r--r--kommander/editor/pics/small/buttongroup.pngbin0 -> 648 bytes
-rw-r--r--kommander/editor/pics/small/checkbox.pngbin0 -> 817 bytes
-rw-r--r--kommander/editor/pics/small/closebutton.pngbin0 -> 585 bytes
-rw-r--r--kommander/editor/pics/small/combobox.pngbin0 -> 549 bytes
-rw-r--r--kommander/editor/pics/small/connecttool.pngbin0 -> 553 bytes
-rw-r--r--kommander/editor/pics/small/customwidget.pngbin0 -> 1133 bytes
-rw-r--r--kommander/editor/pics/small/databrowser.xpm156
-rw-r--r--kommander/editor/pics/small/datatable.xpm156
-rw-r--r--kommander/editor/pics/small/dataview.xpm156
-rw-r--r--kommander/editor/pics/small/dateedit.pngbin0 -> 505 bytes
-rw-r--r--kommander/editor/pics/small/datepicker.pngbin0 -> 965 bytes
-rw-r--r--kommander/editor/pics/small/datetimeedit.pngbin0 -> 1074 bytes
-rw-r--r--kommander/editor/pics/small/dial.pngbin0 -> 1024 bytes
-rw-r--r--kommander/editor/pics/small/disabled/adjustsize.pngbin0 -> 659 bytes
-rw-r--r--kommander/editor/pics/small/disabled/connecttool.pngbin0 -> 836 bytes
-rw-r--r--kommander/editor/pics/small/disabled/editbreaklayout.pngbin0 -> 1126 bytes
-rw-r--r--kommander/editor/pics/small/disabled/editcopy.pngbin0 -> 931 bytes
-rw-r--r--kommander/editor/pics/small/disabled/editcut.xpm32
-rw-r--r--kommander/editor/pics/small/disabled/editgrid.pngbin0 -> 735 bytes
-rw-r--r--kommander/editor/pics/small/disabled/edithlayout.pngbin0 -> 601 bytes
-rw-r--r--kommander/editor/pics/small/disabled/edithlayoutsplit.pngbin0 -> 754 bytes
-rw-r--r--kommander/editor/pics/small/disabled/editpaste.pngbin0 -> 901 bytes
-rw-r--r--kommander/editor/pics/small/disabled/editslots.xpm44
-rw-r--r--kommander/editor/pics/small/disabled/editvlayout.pngbin0 -> 617 bytes
-rw-r--r--kommander/editor/pics/small/disabled/editvlayoutsplit.pngbin0 -> 752 bytes
-rw-r--r--kommander/editor/pics/small/disabled/filesave.pngbin0 -> 587 bytes
-rw-r--r--kommander/editor/pics/small/disabled/layout.xpm42
-rw-r--r--kommander/editor/pics/small/disabled/left.xpm32
-rw-r--r--kommander/editor/pics/small/disabled/redo.pngbin0 -> 531 bytes
-rw-r--r--kommander/editor/pics/small/disabled/right.xpm32
-rw-r--r--kommander/editor/pics/small/disabled/searchfind.pngbin0 -> 1013 bytes
-rw-r--r--kommander/editor/pics/small/disabled/undo.pngbin0 -> 541 bytes
-rw-r--r--kommander/editor/pics/small/editbreaklayout.pngbin0 -> 744 bytes
-rw-r--r--kommander/editor/pics/small/editcopy.pngbin0 -> 485 bytes
-rw-r--r--kommander/editor/pics/small/editcut.pngbin0 -> 649 bytes
-rw-r--r--kommander/editor/pics/small/editdelete.xpm226
-rw-r--r--kommander/editor/pics/small/editgrid.pngbin0 -> 520 bytes
-rw-r--r--kommander/editor/pics/small/edithlayout.pngbin0 -> 706 bytes
-rw-r--r--kommander/editor/pics/small/edithlayoutsplit.pngbin0 -> 809 bytes
-rw-r--r--kommander/editor/pics/small/editlower.xpm113
-rw-r--r--kommander/editor/pics/small/editpaste.pngbin0 -> 902 bytes
-rw-r--r--kommander/editor/pics/small/editraise.xpm110
-rw-r--r--kommander/editor/pics/small/editslots.pngbin0 -> 690 bytes
-rw-r--r--kommander/editor/pics/small/editvlayout.pngbin0 -> 289 bytes
-rw-r--r--kommander/editor/pics/small/editvlayoutsplit.pngbin0 -> 355 bytes
-rw-r--r--kommander/editor/pics/small/exec.pngbin0 -> 1408 bytes
-rw-r--r--kommander/editor/pics/small/filenew.pngbin0 -> 313 bytes
-rw-r--r--kommander/editor/pics/small/fileopen.pngbin0 -> 681 bytes
-rw-r--r--kommander/editor/pics/small/filesave.pngbin0 -> 328 bytes
-rw-r--r--kommander/editor/pics/small/form.xpm67
-rw-r--r--kommander/editor/pics/small/frame.pngbin0 -> 400 bytes
-rw-r--r--kommander/editor/pics/small/groupbox.pngbin0 -> 439 bytes
-rw-r--r--kommander/editor/pics/small/help.pngbin0 -> 837 bytes
-rw-r--r--kommander/editor/pics/small/home.xpm160
-rw-r--r--kommander/editor/pics/small/iconview.pngbin0 -> 613 bytes
-rw-r--r--kommander/editor/pics/small/image.xpm226
-rw-r--r--kommander/editor/pics/small/konsole.pngbin0 -> 1155 bytes
-rw-r--r--kommander/editor/pics/small/label.pngbin0 -> 953 bytes
-rw-r--r--kommander/editor/pics/small/layout.xpm121
-rw-r--r--kommander/editor/pics/small/lcdnumber.pngbin0 -> 558 bytes
-rw-r--r--kommander/editor/pics/small/left.xpm141
-rw-r--r--kommander/editor/pics/small/line.pngbin0 -> 287 bytes
-rw-r--r--kommander/editor/pics/small/lineedit.pngbin0 -> 461 bytes
-rw-r--r--kommander/editor/pics/small/listbox.pngbin0 -> 386 bytes
-rw-r--r--kommander/editor/pics/small/listview.pngbin0 -> 759 bytes
-rw-r--r--kommander/editor/pics/small/multilineedit.pngbin0 -> 454 bytes
-rw-r--r--kommander/editor/pics/small/newform.xpm35
-rw-r--r--kommander/editor/pics/small/ordertool.pngbin0 -> 587 bytes
-rw-r--r--kommander/editor/pics/small/pixlabel.pngbin0 -> 1229 bytes
-rw-r--r--kommander/editor/pics/small/pointer.pngbin0 -> 586 bytes
-rw-r--r--kommander/editor/pics/small/print.xpm117
-rw-r--r--kommander/editor/pics/small/progress.pngbin0 -> 609 bytes
-rw-r--r--kommander/editor/pics/small/pushbutton.pngbin0 -> 408 bytes
-rw-r--r--kommander/editor/pics/small/radiobutton.pngbin0 -> 586 bytes
-rw-r--r--kommander/editor/pics/small/redo.pngbin0 -> 592 bytes
-rw-r--r--kommander/editor/pics/small/richtextedit.pngbin0 -> 834 bytes
-rw-r--r--kommander/editor/pics/small/right.xpm141
-rw-r--r--kommander/editor/pics/small/scrollbar.pngbin0 -> 408 bytes
-rw-r--r--kommander/editor/pics/small/searchfind.pngbin0 -> 843 bytes
-rw-r--r--kommander/editor/pics/small/shellscript.pngbin0 -> 1053 bytes
-rw-r--r--kommander/editor/pics/small/slider.pngbin0 -> 729 bytes
-rw-r--r--kommander/editor/pics/small/spacer.pngbin0 -> 715 bytes
-rw-r--r--kommander/editor/pics/small/spinbox.pngbin0 -> 455 bytes
-rw-r--r--kommander/editor/pics/small/statusbar.pngbin0 -> 294 bytes
-rw-r--r--kommander/editor/pics/small/table.pngbin0 -> 483 bytes
-rw-r--r--kommander/editor/pics/small/tabwidget.pngbin0 -> 572 bytes
-rw-r--r--kommander/editor/pics/small/textbrowser.pngbin0 -> 514 bytes
-rw-r--r--kommander/editor/pics/small/textedit.pngbin0 -> 497 bytes
-rw-r--r--kommander/editor/pics/small/textview.pngbin0 -> 498 bytes
-rw-r--r--kommander/editor/pics/small/timeedit.pngbin0 -> 1520 bytes
-rw-r--r--kommander/editor/pics/small/timer.pngbin0 -> 1462 bytes
-rw-r--r--kommander/editor/pics/small/toolbutton.pngbin0 -> 1262 bytes
-rw-r--r--kommander/editor/pics/small/undo.pngbin0 -> 572 bytes
-rw-r--r--kommander/editor/pics/temp.tmp0
-rw-r--r--kommander/editor/pics/toolbox.pngbin0 -> 783 bytes
-rw-r--r--kommander/editor/pics/uparrow.xbm10
-rw-r--r--kommander/editor/pics/vsplit.xbm10
-rw-r--r--kommander/editor/pics/wait.xbm10
-rw-r--r--kommander/editor/pixmapchooser.cpp1105
-rw-r--r--kommander/editor/pixmapchooser.h86
-rw-r--r--kommander/editor/pixmapfunction.ui923
-rw-r--r--kommander/editor/preferences.ui669
-rw-r--r--kommander/editor/previewframe.cpp52
-rw-r--r--kommander/editor/previewframe.h53
-rw-r--r--kommander/editor/previewwidget.ui279
-rw-r--r--kommander/editor/previewwidgetimpl.cpp60
-rw-r--r--kommander/editor/previewwidgetimpl.h37
-rw-r--r--kommander/editor/propertyeditor.cpp3706
-rw-r--r--kommander/editor/propertyeditor.h670
-rw-r--r--kommander/editor/qcompletionedit.cpp185
-rw-r--r--kommander/editor/qcompletionedit.h53
-rw-r--r--kommander/editor/resource.cpp2858
-rw-r--r--kommander/editor/resource.h159
-rw-r--r--kommander/editor/sizehandle.cpp384
-rw-r--r--kommander/editor/sizehandle.h91
-rw-r--r--kommander/editor/styledbutton.cpp290
-rw-r--r--kommander/editor/styledbutton.h97
-rw-r--r--kommander/editor/tableeditor.ui813
-rw-r--r--kommander/editor/tableeditorimpl.cpp464
-rw-r--r--kommander/editor/tableeditorimpl.h56
-rw-r--r--kommander/editor/templates/Configuration_Dialog.ui156
-rw-r--r--kommander/editor/templates/Dialog_with_Buttons_(Bottom).ui114
-rw-r--r--kommander/editor/templates/Dialog_with_Buttons_(Right).ui114
-rw-r--r--kommander/editor/templates/Makefile.am0
-rw-r--r--kommander/editor/templates/Tab_Dialog.ui138
-rw-r--r--kommander/editor/templates/cpp_template16
-rw-r--r--kommander/editor/templates/header_template16
-rw-r--r--kommander/editor/timestamp.cpp81
-rw-r--r--kommander/editor/timestamp.h57
-rw-r--r--kommander/editor/widgetdatabase.cpp1029
-rw-r--r--kommander/editor/widgetdatabase.h87
-rw-r--r--kommander/editor/widgetfactory.cpp1928
-rw-r--r--kommander/editor/widgetfactory.h473
-rw-r--r--kommander/editor/widgetinterface.h29
-rw-r--r--kommander/editor/wizardeditor.ui320
-rw-r--r--kommander/editor/wizardeditorimpl.cpp220
-rw-r--r--kommander/editor/wizardeditorimpl.h64
-rw-r--r--kommander/editor/workspace.cpp787
-rw-r--r--kommander/editor/workspace.h170
-rw-r--r--kommander/examples/Makefile.am1
-rw-r--r--kommander/examples/current/Makefile.am3
-rwxr-xr-xkommander/examples/current/a1.kmdr258
-rwxr-xr-xkommander/examples/current/b1.kmdr135
-rwxr-xr-xkommander/examples/current/editor-poc.kmdr1068
-rw-r--r--kommander/examples/current/keyvaluecombo.kmdr388
-rwxr-xr-xkommander/examples/current/kpartmwframe.kmdr618
-rwxr-xr-xkommander/examples/current/kpartpart.kmdr171
-rw-r--r--kommander/examples/current/passvariables.kmdr416
-rwxr-xr-xkommander/examples/current/tableselect.kmdr502
-rw-r--r--kommander/examples/old/Makefile.am7
-rw-r--r--kommander/examples/old/checkmail.kmdr44
-rw-r--r--kommander/examples/old/ex1.kmdr105
-rw-r--r--kommander/examples/old/execprogram.kmdr104
-rw-r--r--kommander/examples/old/firstform.kmdr.kmdr88
-rw-r--r--kommander/examples/old/form1.kmdr96
-rw-r--r--kommander/examples/old/form2.kmdr118
-rw-r--r--kommander/examples/old/form3.kmdr62
-rw-r--r--kommander/examples/old/form4.kmdr88
-rw-r--r--kommander/examples/old/form5.kmdr346
-rw-r--r--kommander/examples/old/newfile.kmdr934
-rw-r--r--kommander/examples/old/populate.kmdr111
-rw-r--r--kommander/examples/old/resize.kmdr217
-rw-r--r--kommander/examples/old/selectedwidgettext.kmdr105
-rw-r--r--kommander/examples/old/settings.kmdr264
-rw-r--r--kommander/examples/old/simplelist.kmdr214
-rw-r--r--kommander/examples/old/tar.kmdr479
-rw-r--r--kommander/examples/old/tidy.kmdr1159
-rw-r--r--kommander/examples/old/widgetgenerator.kmdr438
-rwxr-xr-xkommander/examples/old/wizard.kmdr301
-rw-r--r--kommander/examples/tutorial/Makefile.am10
-rw-r--r--kommander/examples/tutorial/README123
-rw-r--r--kommander/examples/tutorial/append.kmdr115
-rw-r--r--kommander/examples/tutorial/arrays.kmdr204
-rw-r--r--kommander/examples/tutorial/calc.kmdr271
-rw-r--r--kommander/examples/tutorial/cmdline.kmdr108
-rw-r--r--kommander/examples/tutorial/dcop.kmdr139
-rw-r--r--kommander/examples/tutorial/dialogs.kmdr198
-rw-r--r--kommander/examples/tutorial/globals.kmdr96
-rw-r--r--kommander/examples/tutorial/initialize.kmdr120
-rw-r--r--kommander/examples/tutorial/loop.kmdr114
-rw-r--r--kommander/examples/tutorial/picview.kmdr148
-rw-r--r--kommander/examples/tutorial/progressbar.kmdr192
-rw-r--r--kommander/examples/tutorial/settings.kmdr177
-rw-r--r--kommander/examples/tutorial/slots.kmdr200
-rw-r--r--kommander/examples/tutorial/statusbar.kmdr99
-rw-r--r--kommander/examples/tutorial/strings.kmdr206
-rw-r--r--kommander/examples/tutorial/table.kmdr258
-rw-r--r--kommander/examples/tutorial/tree.kmdr170
-rw-r--r--kommander/examples/tutorial/widgets.kmdr133
-rw-r--r--kommander/executor/Makefile.am25
-rw-r--r--kommander/executor/dcopkommanderif.h82
-rw-r--r--kommander/executor/instance.cpp683
-rw-r--r--kommander/executor/instance.h137
-rw-r--r--kommander/executor/kmdr-executor.desktop82
-rw-r--r--kommander/executor/main.cpp102
-rw-r--r--kommander/executor/register.cpp104
-rw-r--r--kommander/executor/templates/cpp_template16
-rw-r--r--kommander/executor/templates/header_template16
-rw-r--r--kommander/factory/Makefile.am16
-rw-r--r--kommander/factory/domtool.cpp412
-rw-r--r--kommander/factory/domtool.h45
-rw-r--r--kommander/factory/kommanderfactory.cpp1486
-rw-r--r--kommander/factory/kommanderfactory.h160
-rw-r--r--kommander/factory/kommanderversion.h7
-rw-r--r--kommander/icons/Makefile.am4
-rw-r--r--kommander/icons/cr128-app-kommander.pngbin0 -> 21090 bytes
-rw-r--r--kommander/icons/cr16-app-kommander.pngbin0 -> 934 bytes
-rw-r--r--kommander/icons/cr22-app-kommander.pngbin0 -> 1480 bytes
-rw-r--r--kommander/icons/cr32-app-kommander.pngbin0 -> 2605 bytes
-rw-r--r--kommander/icons/cr64-app-kommander.pngbin0 -> 7232 bytes
-rw-r--r--kommander/icons/hi22-action-arrow.pngbin0 -> 583 bytes
-rw-r--r--kommander/kmdrtools/Makefile.am3
-rwxr-xr-xkommander/kmdrtools/dcoptool-oldparser.kmdr2125
-rwxr-xr-xkommander/kmdrtools/examples.kmdr154
-rw-r--r--kommander/kommander-editor.kdevelop285
-rw-r--r--kommander/kommander.kdevelop279
-rw-r--r--kommander/part/Makefile.am8
-rw-r--r--kommander/part/kommander_part.cpp86
-rw-r--r--kommander/part/kommander_part.desktop15
-rw-r--r--kommander/part/kommander_part.h48
-rw-r--r--kommander/plugin/Makefile.am17
-rw-r--r--kommander/plugin/kommanderplugin.cpp82
-rw-r--r--kommander/plugin/kommanderplugin.h103
-rw-r--r--kommander/plugin/specialinformation.cpp623
-rw-r--r--kommander/plugin/specialinformation.h119
-rw-r--r--kommander/plugin/specials.h77
-rw-r--r--kommander/pluginmanager/Makefile.am18
-rw-r--r--kommander/pluginmanager/main.cpp101
-rw-r--r--kommander/pluginmanager/mainwindow.cpp106
-rw-r--r--kommander/pluginmanager/mainwindow.h56
-rw-r--r--kommander/pluginmanager/pluginmanager.cpp89
-rw-r--r--kommander/pluginmanager/pluginmanager.h53
-rw-r--r--kommander/widget/Makefile.am20
-rw-r--r--kommander/widget/expression.cpp332
-rw-r--r--kommander/widget/expression.h80
-rw-r--r--kommander/widget/function.cpp135
-rw-r--r--kommander/widget/function.h73
-rw-r--r--kommander/widget/functionlib.cpp1476
-rw-r--r--kommander/widget/invokeclass.cpp61
-rw-r--r--kommander/widget/invokeclass.h56
-rw-r--r--kommander/widget/kmdrmainwindow.cpp36
-rw-r--r--kommander/widget/kmdrmainwindow.h37
-rw-r--r--kommander/widget/kommander_export.h35
-rw-r--r--kommander/widget/kommanderfunctions.cpp349
-rw-r--r--kommander/widget/kommanderwidget.cpp745
-rw-r--r--kommander/widget/kommanderwidget.h162
-rw-r--r--kommander/widget/kommanderwindow.cpp35
-rw-r--r--kommander/widget/kommanderwindow.h37
-rw-r--r--kommander/widget/myprocess.cpp137
-rw-r--r--kommander/widget/myprocess.h58
-rw-r--r--kommander/widget/parsenode.cpp262
-rw-r--r--kommander/widget/parsenode.h129
-rw-r--r--kommander/widget/parser.cpp1243
-rw-r--r--kommander/widget/parser.h197
-rw-r--r--kommander/widget/parserdata.cpp134
-rw-r--r--kommander/widget/parserdata.h50
-rw-r--r--kommander/widgets/Makefile.am35
-rw-r--r--kommander/widgets/aboutdialog.cpp295
-rw-r--r--kommander/widgets/aboutdialog.h72
-rw-r--r--kommander/widgets/buttongroup.cpp159
-rw-r--r--kommander/widgets/buttongroup.h67
-rw-r--r--kommander/widgets/checkbox.cpp151
-rw-r--r--kommander/widgets/checkbox.h67
-rw-r--r--kommander/widgets/closebutton.cpp183
-rw-r--r--kommander/widgets/closebutton.h72
-rw-r--r--kommander/widgets/combobox.cpp210
-rw-r--r--kommander/widgets/combobox.h70
-rw-r--r--kommander/widgets/datepicker.cpp130
-rw-r--r--kommander/widgets/datepicker.h70
-rw-r--r--kommander/widgets/dialog.cpp226
-rw-r--r--kommander/widgets/dialog.h87
-rw-r--r--kommander/widgets/execbutton.cpp241
-rw-r--r--kommander/widgets/execbutton.h94
-rw-r--r--kommander/widgets/fileselector.cpp240
-rw-r--r--kommander/widgets/fileselector.h102
-rw-r--r--kommander/widgets/fontdialog.cpp158
-rw-r--r--kommander/widgets/fontdialog.h50
-rw-r--r--kommander/widgets/groupbox.cpp152
-rw-r--r--kommander/widgets/groupbox.h70
-rw-r--r--kommander/widgets/konsole.cpp153
-rw-r--r--kommander/widgets/konsole.h74
-rw-r--r--kommander/widgets/label.cpp127
-rw-r--r--kommander/widgets/label.h64
-rw-r--r--kommander/widgets/lineedit.cpp182
-rw-r--r--kommander/widgets/lineedit.h72
-rw-r--r--kommander/widgets/listbox.cpp225
-rw-r--r--kommander/widgets/listbox.h67
-rw-r--r--kommander/widgets/pixmaplabel.cpp132
-rw-r--r--kommander/widgets/pixmaplabel.h66
-rw-r--r--kommander/widgets/pixmaps/textbold.xpm27
-rw-r--r--kommander/widgets/pixmaps/textcenter.xpm27
-rw-r--r--kommander/widgets/pixmaps/textitalic.xpm27
-rw-r--r--kommander/widgets/pixmaps/textleft.xpm27
-rw-r--r--kommander/widgets/pixmaps/textright.xpm27
-rw-r--r--kommander/widgets/pixmaps/textunder.xpm27
-rw-r--r--kommander/widgets/plugin.cpp138
-rw-r--r--kommander/widgets/popupmenu.cpp246
-rw-r--r--kommander/widgets/popupmenu.h61
-rw-r--r--kommander/widgets/progressbar.cpp144
-rw-r--r--kommander/widgets/progressbar.h63
-rw-r--r--kommander/widgets/radiobutton.cpp144
-rw-r--r--kommander/widgets/radiobutton.h66
-rw-r--r--kommander/widgets/richtexteditor.cpp249
-rw-r--r--kommander/widgets/richtexteditor.h85
-rw-r--r--kommander/widgets/scriptobject.cpp191
-rw-r--r--kommander/widgets/scriptobject.h68
-rw-r--r--kommander/widgets/slider.cpp121
-rw-r--r--kommander/widgets/slider.h60
-rw-r--r--kommander/widgets/spinboxint.cpp140
-rw-r--r--kommander/widgets/spinboxint.h68
-rw-r--r--kommander/widgets/statusbar.cpp131
-rw-r--r--kommander/widgets/statusbar.h65
-rw-r--r--kommander/widgets/subdialog.cpp146
-rw-r--r--kommander/widgets/subdialog.h70
-rw-r--r--kommander/widgets/table.cpp373
-rw-r--r--kommander/widgets/table.h73
-rw-r--r--kommander/widgets/tabwidget.cpp194
-rw-r--r--kommander/widgets/tabwidget.h60
-rw-r--r--kommander/widgets/textbrowser.cpp139
-rw-r--r--kommander/widgets/textbrowser.h63
-rw-r--r--kommander/widgets/textedit.cpp229
-rw-r--r--kommander/widgets/textedit.h70
-rw-r--r--kommander/widgets/timer.cpp189
-rw-r--r--kommander/widgets/timer.h71
-rw-r--r--kommander/widgets/toolbox.cpp190
-rw-r--r--kommander/widgets/toolbox.h54
-rw-r--r--kommander/widgets/treewidget.cpp512
-rw-r--r--kommander/widgets/treewidget.h87
-rw-r--r--kommander/widgets/widgets.desktop36
-rw-r--r--kommander/widgets/wizard.cpp194
-rw-r--r--kommander/widgets/wizard.h82
-rw-r--r--kommander/working/Makefile.am4
-rwxr-xr-xkommander/working/extractkmdr112
-rwxr-xr-xkommander/working/kmdr2po11
-rw-r--r--kommander/working/plugintemplate/Makefile.am17
-rw-r--r--kommander/working/plugintemplate/README.dox55
-rw-r--r--kommander/working/plugintemplate/app.kdevelop116
-rw-r--r--kommander/working/plugintemplate/kommanderplugin.kdevtemplate66
-rw-r--r--kommander/working/plugintemplate/kommanderplugin.pngbin0 -> 7232 bytes
-rw-r--r--kommander/working/plugintemplate/plugin.cpp29
-rw-r--r--kommander/working/plugintemplate/src-Makefile.am19
-rw-r--r--kommander/working/plugintemplate/widget.cpp116
-rw-r--r--kommander/working/plugintemplate/widget.h46
-rw-r--r--kommander/x-kommander.desktop55
534 files changed, 105643 insertions, 0 deletions
diff --git a/kommander/AUTHORS b/kommander/AUTHORS
new file mode 100644
index 00000000..058f0f78
--- /dev/null
+++ b/kommander/AUTHORS
@@ -0,0 +1,5 @@
+Derived from Qt Designer by Trolltech
+Original author: Marc Britton <consume@optusnet.com.au>
+Design team leader: Eric Laffoon <sequitur@kde.org>
+Current maintainer: Michal Rudolf <mrudolf@kdewebdev.org>
+Contributor: Andras Mantia <amantia@kde.org> \ No newline at end of file
diff --git a/kommander/COPYING b/kommander/COPYING
new file mode 100644
index 00000000..0b84a43f
--- /dev/null
+++ b/kommander/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/kommander/ChangeLog b/kommander/ChangeLog
new file mode 100644
index 00000000..dde3cebf
--- /dev/null
+++ b/kommander/ChangeLog
@@ -0,0 +1,611 @@
+2008-04-23 - Eric Laffoon <sequitur@kde.org>
+ o add a little color to tab widgets with icons
+2008-04-21 - Eric Laffoon <sequitur@kde.org>
+ o added the ability to set alignment in columns in Tree/list widget
+ o enhanced find to now use column and set additional parameters in TreeWidget
+ o renamed some new functions only released in special release recently as cleanup
+2008-04-17 - Eric Laffoon <sequitur@kde.org>
+ o added round function in strings to round number to x digits
+2008-04-14 - Eric Laffoon <sequitur@kde.org>
+ o added cut, copy and paste to editor popup menu
+ o added file exists function
+ 0 added geometry and hasFocus to primary data widgets
+2008-03-28 - Eric Laffoon <sequitur@kde.org>
+ o added test geometry function to buttons for popup use
+2008-03-23 - Eric Laffoon <sequitur@kde.org>
+ o it's about time scripts had a boolean execute slot!
+2008-03-23 - Eric Laffoon <sequitur@kde.org>
+ o Table - added keepCellVisible for my application - I will need to clean up the code if I want to release it as I want to rename some things and do other cleanup
+ o ComboBox - added popupList to bring up the list without using the mouse - faster data entry
+2008-03-22 - Eric Laffoon <sequitur@kde.org>
+ o LineEdit - added gotfocus event
+2008-03-20 - Eric Laffoon <sequitur@kde.org>
+ o made actions sort along with widgets in the connection dialog
+ o Tree/Detail (ListView) widget - enabled adding columns
+ o Tree/Detail (ListView) widget - enabled removing columns (copied from table widget)
+ o Tree/Detail (ListView) widget - return column count
+ o Tree/Detail (ListView) widget - return column caption for given index
+ o Tree/Detail (ListView) widget - set sort column and where ASC or DESC
+ o Tree/Detail (ListView) widget - set column width - serves as hide colum at 0 width
+ o Table widget - add column sort that does by whole rows - doesn't do well with float as strings :(
+ o TextEdit - added lostFocus event
+ o LineEdit - added gotFocus event
+ o fixed about dialog license to take text and files correctly
+2008-03-19 - Andras Mantia <amantia@kde.org>
+ o regression: add back the missing str_compare function.
+2008-03-18 - Eric Laffoon <sequitur@kde.org>
+ o raised the number of allowed paramaters for scripts
+2008-03-10 - Eric Laffoon <sequitur@kde.org>
+ o enable additional slots in dialog and restore slots for actions - you can now directly manipulate actions on a MainWindow via signals and slots from the dialog
+2008-01-20 - Eric Laffoon <sequitur@kde.org>
+ o set new functions only available to new parser such as createWidget to not be shown in the function browser if the old parser is run.
+
+January 2008 - Andras Mantia <amantia@kde.org>
+ o support executing of slots
+ o add "execute" method for PushButton
+ o possibility to pass parameters for ScriptObject added
+ o add "return" command to get back the result of a ScriptObject
+ o add createWidget function for on-the-fly widget creation
+ o add connect/disconnect function for on-the-fly signal/slot connection
+ o add widgetExists
+ o add execBackground
+ o add indexed array functions: array_indexedFromString, array_indexedToString, array_indexedRemoveElements, array_indexedInsertElements
+ o input_color and @Input.color accepts a default color argument
+ o fix "exit" command
+ o make a="Label1"; a.setText("foo") work
+ o make dcopid, pid, parentPid work in the new parser
+ o make TreeWidget.selection work in multi selection mode
+ o add TreeWidget.selectedIndexes
+ o make TreeWidget.setSelection show the selected item
+ o add setCellWidget/cellWidget for Table
+ o add setEditable(bool) for widgets that are editable
+ o add PopupMenu widget
+ o add ToolBox widget
+ o add AboutDialog widget
+ o optionally quote the strings inserted via function browser
+ o use combobox for booleans in the function browser
+ o use multiline insert box in function browser
+ o add highlighting for the new parser
+ o use the new parser by default for new dialogs
+ o make possible to open more associated editors at once
+ o fix problem with losing the parser type status in the editor when working with multiple dialogs
+ o @Array.fromString should append the new elements to the array, just like
+ it did before and how array_fromString does.
+ o fix @eval for addition/substraction and handle division by zero
+ o process code written in external script using the old parser
+ o make it possible to run external script in a ScriptObject
+ o "execute" DCOP call returns a string
+ o support shebang (#!/path_to/kmdr-executor) in the beginning of the .kmdr files.
+ Running .kmdr files is possible directly if you make them executable.
+ o store Kommander version in the VERSION/_VERSION global variable
+ o the editor does not save the dialog on running
+ o warn if a dialog file is not executable
+ o create backup files every 5 minutes
+ o add initialize/destroy signals to MainWindow
+ o add experimental Kommander KPart
+ o rework the plugin system
+ o bump version to 1.3
+
+Wed Jan 9 21:35:38 2008 - Andras Mantia <amantia@kde.org>
+ o add Table.selection to get back the selection coordinates
+
+Sun Dec 30 00:02:34 2007 - Andras Mantia <amantia@kde.org>
+ o don't do math operations in check only mode
+
+Thu Dec 22 00:38:31 2007 - Andras Mantia <amantia@kde.org>
+ o fix the for loop parsing if end < start
+
+Thu Dec 20 00:38:31 2007 - Andras Mantia <amantia@kde.org>
+ o insert the functions using the syntax of the new parser if #!kommander
+ is specified in the associated text
+ o add DatePicker widget
+
+Wed Dec 19 08:39:00 2007 - Eric Laffoon <eric@kdewebdev.org>
+ o fixed the bug in the input text dialog where entering a default value returned the caption.
+
+Sat Dec 15 23:58:45 2007 - Andras Mantia <amantia@kde.org>
+ o return the result of a division in floating form if the result is not an integer.
+ Changed the behavior in both the old and new parser.
+
+Wed Nov 28 13:21:34 2007 - Andras Mantia <amantia@kde.org>
+ o do not set array values when the assignment is in a code path which shouldn't be executed
+
+Tue Nov 20 20:03:34 2007 - Andras Mantia <amantia@kde.org>
+ o show the checked function for RadioButton widgets in the function browser
+
+Fri Oct 19 16:08:32 2007 - Andras Mantia <amantia@kde.org>
+ o make CheckBox.setChecked accept as argument false, "false", true, "true",
+ 0 (meaning false), everything else (meaning true)
+
+Sat Oct 6 17:53:47 2007 - Andras Mantia <amantia@kde.org>
+ o make multiplying work correctly for floating point values
+ o do not remove the whole text after undoing the changes in the editor [#147817]
+ o don't crash if opening a file the second time when the first try failed [#141110]
+ o don't close the dialogs with ESC (just like in real applications)
+ o fix ExecButton.setEnabled() [#113624]
+ o use icon instead of "..." in the file selector [#109985]
+ o make @echo really work [#138705]
+ o add DCOP method to get the winID [#111161]
+ o add DCOP method to change the cursor to the wait cursor and back [#109630]
+
+Thu Sep 14 20:01:18 2006 - Michal Rudolf <mrudolf@kdewebdev.org>
+(actually imported from a work branch on Sep 29, 2007 by Andras Mantia <amantia@kde.org>)
+ o function str_findrev works now
+ o fix crash when diving by zero
+ o make function names case insensitive
+ o fix dcop() function (external DCOP) in new parser
+ o add missing EOLs to array_values()
+ o don't open files with no filename given
+ o fix crash on incorrect syntax in new parser
+ o fix input_file() function
+ o add switch/case to new parser
+ o fix importing tables with empty cells
+ o Kommander 1.3.0 (development branch) released
+
+Thu Sep 7 20:01:18 2006 - Andras Mantia <amantia@kde.org>
+ o fix crash on exit in the editor
+
+Tue Sep 5 16:19:40 2006 - Andras Mantia <amantia@kde.org>
+ o use KTextEditor for the associated text editing
+
+Sun 16 sty 2005 00:44:39 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o add MessageLog to view output of dialogs run from Editor
+ o add @debug command
+
+Tue 11 sty 2005 23:00:00 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o update and unify version number
+ o Kommander 1.1dev3 released
+
+Sun 09 Jan 2005 15:22:05 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added support for Kommander dialog templates in Editor
+
+Tue 04 Jan 2004 14:30:00 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o implemented "Save All" files menu command
+ o implemented SingleShot option of Timer widget
+
+Thu 30 Dec 2004 14:00:32 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added setColumnCaption for TreeWidget
+
+Wed 29 Dec 2004 09:58:00 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added some new function for Table widget: removeRow,
+ removeColumn, setColumnCaption, setRowCaption
+ o fixed a bug with insertRow/insertColumn (incorrect number
+ of rows/columns inserted)
+ o added example of using Table widget to examples/tutorial
+
+Mon 20 Dec 2004 22:02:00 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added basic Table widget
+ o more Editor cleanup - remove obsolete code
+
+Sat 18 Dec 2004 22:17:00 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o remove obsolete include files and switch Editor to use
+ KMessageBox instead of QMessageBox
+
+Mon 13 Dec 2004 13:58:00 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o more flexible error handling: now you can continue, continue
+ ignoring next error, or stop application
+
+Fri 10 Dec 2004 19:00:00 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o compilation fix (solved problems with missing kmdrpligins link)
+
+Thu 09 Dec 2004 22:59:00 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o fixed problems with hiding ActionEditor
+
+Thu 02 Dec 2004 21:54:00 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o bug fixed: accept 0 as false value.
+ o significant speedup of TreeWidget.setText/insertItem for large trees
+
+Sun 28 Nov 2004 19:48:00 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o remove obsolete CustomWidget code
+ o fixed a nasty bug in && evaluation
+
+Sun 21 Nov 2004 18:19:49 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o bug fixed: opening files from command-line
+ o granted addUniqueItem for Combos
+ o use KDE-based tools layout (KDockWidget) in Editor
+
+Fri 19 Nov 2004 13:48:45 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added signal finished(), emitted when Konsole process finishes
+ o remove obsolete signal from ScriptObject
+
+Tue 16 Nov 2004 23:28:16 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o Editor shortcuts can be configured and remembered
+ o Editor Recent files submenu is now KDE based
+ o Editor configuration file is a standard KDE config file
+ o Editor has now Settings menu
+ o some obsolete Editor options were removed
+
+Sun 14 Nov 2004 22:39:38 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o massive cleanup and KDE-ification of Editor
+ o most actions converted to KActions, some were standarized
+ o some obsolete dialogs removed
+ o About dialog changed to use KAboutDialog
+
+Wed 03 Nov 2004 14:28:39 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o fix some problems detected by kdetestsscripts
+ o 1.1dev2 released
+
+Tue 02 Nov 2004 07:53:20 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o Signals and slots: disallow unmatched (signal, slot) connections.
+ Avoid duplicates in senders combo.
+
+Mon 01 Nov 2004 23:29:19 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o Signals and slots improved: slots that don't have any acceptable
+ signal in current sender are hidden now. For MainWindow dialogs,
+ actions are displayed together with widgets. Some rare crashes
+ were fixed. Connect/disconnect button should be properly
+ enabled/disabled now.
+ o Some tooltips for Function browser added.
+ o In Function Browser, don't add alone comma when optional
+ parameter is empty.
+ o Added missing %n in i18n() string in Function Browser.
+
+Sun 31 Oct 2004 22:14:13 CET - Michal Rudolf <mrudolf@kdewebdev.org>
+ o Complete rewrite of Signals & slots editor. All connections
+ are now displayed, it is possible to change both sender and
+ receiver without closing window. Both slots and signals
+ are sorted, more slots are filtered.
+
+Thu 28 Oct 2004 15:14:26 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added count() function for getting number of items in widget
+
+Wed 27 Oct 2004 23:58:56 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added <> and != for 'not equal to' condition in expressions
+
+Sun 24 Oct 2004 19:04:03 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added missing setMaximum for Slider
+
+Fri 22 Oct 2004 22:27:05 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added 'no-editor' FileSelector (only a button with configurable
+ caption)
+ o added warning for unmatched @if and @switch
+
+Tue 19 Oct 2004 23:23:28 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o Konsole now uses TextEdit widget
+ o improved EOL handling in Konsole
+ o compilation fixes
+
+Sat 16 Oct 2004 09:39:48 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o fix: recognize floating-point numbers in @String.isNumber
+
+Thu 14 Oct 2004 12:06:05 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added Timer widget
+
+Wed 13 Oct 2004 12:29:13 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added missing 'checked' function for RadioButton
+ o added @String.findRev function for searching string backwards
+
+Tue 12 Oct 2004 14:00:03 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o fix: don't add brackets to functions with no parameters
+
+Mon 11 Oct 2004 14:00:03 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o improved 'cancel'
+
+Sat 09 Oct 2004 16:54 PDT - Eric Laffoon <sequitur@kde.org>
+ o Edited specials text and added comment @# to function browser
+ o fixed function browser to support a fourth parameter
+
+Sat 09 Oct 2004 14:00:03 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o fix: bug in @File.append
+ o In Function Browser show common widget functions for each widget
+ o scroll content when process output is longer; show hourglass
+ in Konsole widget when process is running
+ o added new command 'cancel' to cancel script running in Konsole
+
+Tue 05 Oct 2004 11:19:41 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o fix: use "\n" as separator in multiselection mode of FileSelector
+ o preliminary version of Konsole widget
+
+Sat 02 Oct 2004 20:38:40 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added 'execute' command to ScriptObject widget
+ o fix: properly report failure when saving file and ask to
+ provide another file name
+
+Fri 01 Oct 2004 22:26:06 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o fix: output was not sent to stdout by ExecButton
+
+Sat 28 Aug 2004 19:20:06 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o fixed a crash in TreeWidget setText function
+ o added support for multiselection in ListBox (via selection
+ function)
+
+Tue 24 Aug 2004 11:00:16 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o Function Browser: don't show unnecessary 'widget' parameter
+ o Function Browser: make widget functions default
+ o Kommander Text Editor: focus on script text
+ o re-add new i18n descriptions for some new functions
+ o added new 'checked' function for checkboxes and buttonboxes
+ o bool values returned from DCOP calls are now supported
+
+Wed 18 Jul 2004 18:19:21 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o Kommander 1.0 released together with KDE 3.3
+
+Wed 04 Jul 2004 23:59:21 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added @switch..@case..@end statement
+ o added @if()...@endif statement
+
+Wed 04 Jul 2004 18:20:21 CEST - Eric Laffoon <eric@kdewebdev.org>
+ o fixed missing @ for Kommander functions in function browser
+
+Tue 03 Jul 2004 11:06:26 CEST - Eric Laffoon <eric@kdewebdev.org>
+ o added new background
+
+Mon 02 Aug 2004 23:58:01 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added DCOP-enabled Label and PixmapLabel widgets
+
+Sun 01 Aug 2004 17:32:11 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added support for string comparisons in @expr
+ o added support for floats in @expr
+
+Fri 30 Jul 2004 14:59:12 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added support for math expressions
+ o added @expr(string) function that parses and evaluates string
+
+Wed 28 Jul 2004 00:14:28 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o fixed about.ui which caused problems due to some Designer
+ incompatibility
+ o fixed i18n: tab pages and wizard pages titles were not
+ translated
+ o added some missing i18n strings
+ o added option to specify i18n catalogue from command-line
+ (useful for application-related dialogs)
+
+Sat 24 Jul 2004 10:15:10 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o bug fixed: crash with non-existing item in ListBox
+ o bug fixed: blocking button with no script was not unblocked
+ o automatically set tree mode for Tree Widget when adding nestes items
+ o release 1.0beta1
+
+Fri 23 Jul 2004 19:54:26 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added hourclass cursor when invoking ExecButton script with blocked GUI
+ o added missing i18n strings for *.ui files
+ o changed editor to use included background
+
+Fri 23 Jul 2004 18:34:26 CEST - Eric Laffoon <eric@kdewebdev.org>
+ o added new background and splash
+
+Thu 22 Jul 2004 22:17:49 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o ExecButton now has three modes: no blocking, block only ExecButton,
+ block whole GUI
+
+Wed 22 Jul 2004 24:10:59 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o optimized Tree Widget
+ o bug fixed: some missing i18n strings
+
+Tue 20 Jul 2004 19:51:32 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o bug fixed: @dcop with more than 4 arguments
+ o bug fixed: in @forEach, @var_count has incorrect value
+ o in @forEach, @var_index has now 1-based index, not 0-based
+ o setMaximum for ProgressBar
+
+Mon 19 Jul 2004 11:47:58 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added ScriptObject - hidden script container
+
+Fri 16 Jul 2004 15:37:41 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added Slider widget
+ o removed some obsolete code from editor
+
+Thu 15 Jul 2004 23:22:33 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added TextBrowser widget for rich text viewing, with clickable
+ links
+ o in @forEach, not only @var, but @var_index and @var_count are
+ expanded (first to index of current item, second to item count)
+ o bug fixed: incorrect version number in Editor
+
+Wed 14 Jul 2004 12:22:33 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added @String.args (based on Qt QString("%1").arg()
+ o support parameters in function browser
+
+Tue 13 Jul 2004 22:33:19 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added support for internationalization of Kommander dialogs
+ o added @i18n special for marking strings for translation
+
+Tue 13 Jul 2004 13:33:00 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o function browser: support for nested functions
+ o function browser: properly prefix function groups with @
+ o function browser: add information about obligatory and optional
+ parameters.
+ o function browser: add clear button
+ o Kommander Text Editor: change buttons order
+
+Tue 13 Jul 2004 01:10:34 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added function browser for editor
+
+Sat 10 Jul 2004 15:51:07 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o forEach(variable, list) function for internal loops
+ o for(variable, start, end, [step]) function for internal loops
+ o Kommander 1.0alpha7 released
+
+Fri 09 Jul 2004 17:39:43 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o TreeWidget optimized - it should be much faster for big trees now
+ o bug fixed: TreeWidget findItem function
+
+Thu 09 Jul 2004 13:27:47 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o StatusBar widget added
+ o ProgressBar widget added
+ o widgets icons updated
+ o removed obsolete ListView widget
+
+Tue 06 Jul 2004 10:12:44 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o bug fixed: calling @dcop with parameterless functions
+ o bug fixed: ListBox.setCurrentItem didn't work
+ o added setCurrentItem for ComboBox
+ o added setCurrentItem/currentItem for TabWidget, remove obsolete
+ text and setText
+ o bug fixed: itemDepth and itemPath
+ o bug fixed: adding items to TreeWidget failed sometimes
+ o added @String.section(string, substring, index) function, returning
+ section of a string
+ o added third (optional) index parameter to @String.find
+
+Fri 02 Jul 2004 23:33:46 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o more TreeView methods: itemDepth(index) and itemPath(index)
+ o setText, text and populate work for TreeView
+ o parser cleanup and fixes
+ o setPixmap(iconName, index) method for ListBoxes and TreeViews;
+ use index = -1 to set pixmaps for all items
+ o Kommander 1.0alpha6 released
+
+Thu 01 Jul 2004 16:03:20 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o add children(QString widget) DCOP call, returning list of
+ widgets that are direct children of the widget (or all widgets
+ if widget is null)
+ o added type(QString widget) DCOP call returning class of widget
+ o bug fixed: main dialog wasn't supported in @Widget.method syntax
+ o QStringList is now supported as DCOP return value
+
+Wed 30 Jun 2004 15:01:23 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o TreeView DCOP methods: insertItem(), insertItems(), clear(),
+ item(), setCurrentItem(), selection(), setSelection(),
+ removeItem()
+ o TreeView tree support: use / to separate nodes (f. e.
+ insertItem("Root/Node/Subnode")
+ o TreeView multiple column support: use \t to separate columns
+ (f. e. insertItem("document.txt\t45kb\t2004-06-30")
+
+Tue 29 Jun 2004 00:44:39 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o all DCOP functions are handled in appropriate widgets
+ o DCOP and specials are now registered together in single class
+ o it is now possible to create new methods for new (plugin) widgets
+ o setVisible() DCOP method added (show/hide widgets)
+ o setText() alias for changeWidgetText
+ o insertItem() alias for addListItem
+ o insertItems() alias for addListItems
+ o setEnabled() alias for enableWidget
+ o setCurrentItem() for setting current item on index base
+ o selection() for getting selected text/text of selected item
+ o setSelection() for setting selected text/text of selected item
+ (alias for setCurrentListItem() for ListBoxes)
+ o text() DCOP method to get content of widget
+ (@SomeWidget.text is equivalent to @SomeWidget with default script
+ set to @widgetText)
+ o clear() DCOP method handles LineEdit, TextEdit and FileSelector now
+ o text()/setText() work for spinbox
+
+Mon 21 Jun 2004 13:36:52 CEST - Eric Laffoon <eric@kdewebdev.org>
+ o added documentation
+
+Sat 19 Jun 2004 00:47:42 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added changeWidgetText support for listboxes and combos
+ o security fix: warning when running from /tmp directory
+ o added @null special
+ o Kommander 1.0alpha5 released
+
+Thu 17 Jun 2004 23:13:18 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added @String.find
+ o added specials descriptions
+ o fix: crash when opening main-window dialog (created in Designer)
+ in executor
+
+Wed 16 Jun 2004 13:04:30 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added @Array.count
+ o added @Array.read/write
+
+Tue 15 Jun 2004 23:24:52 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added file functions (@File: read, write, append)
+ o added warning for empty @Widget text
+
+Mon 15 Jun 2004 18:32:01 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added string-handling functions (@String: left, right,
+ contains, left, right, mid, compare, isEmpty, isNumber,
+ remove, replace, lower, upper)
+
+Mon 14 Jun 2004 10:23:12 CEST - Eric Laffoon <eric@kdewebdev.org>
+ o fix: parentPid bug
+ o fix: execBegin bug
+
+Sat 12 Jun 2004 01:49:07 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added more array functions: @Array.values(), @Array.clear()
+ and @Array.remove()
+ o rebuild parser to made it more flexible
+ o fix: FileSelector now opens file dialog in current directory
+ o added two new DCOP functions for ListBoxes: findItem()
+ and addUniqueItem()
+ o ButtonGroup now has 'checked' and 'unchecked' states, it
+ also supports setChecked()
+ o Kommander 1.0alpha4 released
+
+Thu 10 Jun 2004 00:49:07 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added DCOP information database that translates function
+ name to function prototype
+ o enhanced parser to handle @<widget>.<DCOP function> syntax
+
+Mon 07 Jun 2004 14:45:53 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added assotiative arrays: @Array.value(), @Array.keys() and
+ @Array.setValue() specials
+
+Sun 06 Jun 2004 23:13:34 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o fix compilation problems on Debian and Slackware
+ o @@ is now interpreted as @
+
+Sat 05 Jun 2004 10:12:05 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added @env(variable) special to get environment variable value
+ o added @dialog(dialog, params) that would call child dialog, setting
+ _PARENTPID and _PARENTDCOPID variables for it
+ o check for global variable _PARENTPID when getting @parentPid
+ o added _KMDIR and _NAME global variables that return
+ path/filename of current dialog
+ o @dialog now searches for a dialog in both dialog path
+ and current path
+ o parser fixes (improved handling of nested specials)
+ o Kommander 1.0alpha3 released
+
+Fri 04 Jun 2004 00:40:59 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o fixed: don't execute Initialization/Executor in Editor
+ o changed DCOP id of Editor to kmdr-editor
+ o version numbers unified
+
+Thu 02 Jun 2004 15:08:32 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o KDE widgets are now used for lists, buttons and combos
+ o added file completion to FileSelector
+
+Fri 28 May 2004 22:40:10 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o support for Kommander comments (in @# <comment> format)
+ o added two new specials: global(var) and setGlobal(var, value)
+ o removed obsolete Preview menu commands
+ o Kommander 1.0alpha2 released
+
+Wed 26 May 2004 23:22:46 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o changeWidgetText for FileSelector class is now handled
+ o added currentItem(QString) DCOP call for lists and combos
+ o added item(QString,int) DCOP call for lists and combos
+
+Wed 26 May 2004 01:10:01 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o parser of specials() rewritten
+ o added optional shebang argument for execBegin()
+ o handling of non-string @dcop() arguments fixed
+ o handling of multiple @dcop() arguments fixed
+ o Makefile.am dependencies for executor cleaned
+ o Kommander 1.0alpha1 released
+
+Thu Apr 27 2004 16:38:36 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added @parentPid evaluated to parent process pid
+ o install Kommander Editor and Executor desktop files
+
+Thu Apr 20 2004 16:38:36 CEST - Michal Rudolf <mrudolf@kdewebdev.org>
+ o added @pid evaluated to current process pid
+ o added @dcopid evaluated to current process DCOP id
+ o rebuilt Kommander Text editor
+ o added support for shebang (#!/bin/sh) for both ExecButton
+ script and @execBegin scripts
+ o added ChooseWidget dialog
+
+Thu Jan 29 13:48:49 2004 - Andras Mantia <amantia@kde.org>
+ o DCOP methods for modifying the widgets
+
+Sat Nov 1 17:00:03 AEST 2003
+ o New widget plugin system KommanderPlugin and KommanderFactory
+
+Sun 04 May 2003 07:38:42 PM EEST - Andras Mantia <amantia@kde.org>
+ o do not add the .kmdr extension to files ending with .kmdr
+ o remove some warning/error messages polluting the output
+ o flush the stdout buffer after writing to it
+
+Sat Sep 28 23:18:08 EST 2002 - Marc Britton <consume@optushome.com.au>
+ o Cleaned up and reworked file overview window
+ o Removed 'Source File' tab from hierarchy view
+ o Removed more disabled source files
+ o Now searches for templates in custom directory (default $KDEDIR/templates)
+
+Sun Sep 15 15:31:48 EST 2002 - Marc Britton <consume@optushome.com.au>
+ o Initial Creation
diff --git a/kommander/INSTALL b/kommander/INSTALL
new file mode 100644
index 00000000..e7c19dfc
--- /dev/null
+++ b/kommander/INSTALL
@@ -0,0 +1,186 @@
+2002-10-12 - Preview building instructions
+To build Kommander you need to created a link to the admin directory
+in the kommander directory. Then treat Kommander as a base direactory
+and run make -f Makefile.cvs and do your configure and amake.
+
+Basic Installation
+==================
+
+ These are generic installation instructions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+ The file `configure.in' is used to create `configure' by a program
+called `autoconf'. You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes awhile. While running, it prints some
+ messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 5. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. You can give `configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile the package for one architecture at a time
+in the source code directory. After you have installed the package for
+one architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Installation Names
+==================
+
+ By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on. Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+ CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+ If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+ Use and save the results of the tests in FILE instead of
+ `./config.cache'. Set FILE to `/dev/null' to disable caching, for
+ debugging `configure'.
+
+`--help'
+ Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made.
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--version'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
+
diff --git a/kommander/Kommander-TODO.kno b/kommander/Kommander-TODO.kno
new file mode 100644
index 00000000..ebbe5651
--- /dev/null
+++ b/kommander/Kommander-TODO.kno
@@ -0,0 +1,313 @@
+\NewEntry 0 GUI
+
+\NewEntry 1 Widgets
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p><span style="font-weight:600">Widgets available in Kommander</span></p>
+<ul type="disc"><div></div>
+<li>KJanusWidget</li>
+<li>Switch from using Qt widget to their KDE equivalents? - mostly done</li>
+<li>Menu</li>
+<li>KHistoryCombo<br /></li>
+<div></div></ul>
+<p></p>
+<ul type="disc"><div></div></ul>
+</body></html>
+
+\NewEntry 1 Editor
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p><span style="font-weight:600">Layout of Edit Kommander Text dialog<br /><br />Old ideas:</span></p>
+<ul type="disc"><li>better layout</li>
+<li>replace list of widgets with tree of widgets</li>
+<li>replace widget class with widget pixmap in combos</li>
+<li>redesign layout</li>
+<li>cleanup Connections, not it is unusable, may be obsolete</li>
+<li>find in scripts</li>
+<li>list of non-empty scripts for current dialog</li>
+<li>allow using custom Kommander dialog to generate code</li>
+<li>add DCOP per widget display</li>
+<li>DCOP editor (similar to Tag editor in Quanta)<br /></li></ul>
+<p></p>
+</body></html>
+
+\NewEntry 1 Usability
+\Link knowit://Source code
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p><span style="font-weight:600">Various GUI-related features (outdated, KDE3 version will not be changed)</span></p>
+<ul type="disc"><li>clean up popup menus, remove disabled items</li>
+<li>use KDE dialogs, not Qt ones if possible</li>
+<li>some widget information on mouseover</li>
+<li>review of event model</li>
+<li>add more layout-handling commands (center selected widgets horizontally/vertically, fit to window width/height)</li>
+<li>handle middle click</li>
+<li>carefully check defaults, choose most useful ones</li>
+<li>add wizards? (replace current New dialogs with Kommander-based ones?)</li>
+<li>better undo</li>
+<li>add WhatsThis for most items</li>
+<li>detect function name/widget name clash</li>
+<li>improve order of widget icons</li>
+<li>switch to KMDI (arghhhh!)</li></ul>
+</body></html>
+
+\NewEntry 1 Run/debug
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p><span style="font-weight:600">Running/testing inside Editor</span></p>
+<ul type="disc"><li>allow debugging</li>
+<div></div></ul>
+</body></html>
+
+\NewEntry 1 DCOP browser
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Georgia">
+<p><span style="font-weight:600">DCOP browser (preliminary ideas)</span></p>
+<ul type="disc"><li>DCOP browser for both local and external DCOP calls</li>
+<li>easy-to-use application DCOP browser</li>
+<li>use XML describing given application DCOP's</li>
+<li>two flags for a call: hiden and important</li>
+<li>three mode: important (only important calls), default (all except hidden), advanced (all calls)</li>
+<li>use some pattern matching to allow marking whole subtrees or function sets</li>
+<li>add purpose (for example all editor-related functions, all file-management-related functions)</li>
+<li>merge trees for given window (f. e. Editor#2, File#2, Structure#2 etc.)</li>
+<li>standalone application mode</li></ul>
+</body></html>
+
+\NewEntry 1 Other
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p><span style="font-weight:600">Other GUI-related issues</span></p>
+<ul type="disc"><li>cleanup slots/signals/connections interface</li>
+<li>find out why slots are shown only for current tab<br /></li></ul>
+<p><span style="font-weight:600">KDE4 ideas:<br /></span></p>
+<ul type="disc"><li>create a KDevelop plugin for the editor</li>
+<li>use KFormDesigner or the new Qt Designer</li></ul>
+</body></html>
+
+\NewEntry 0 Bugs
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p><span style="font-weight:600">Various bugs to be fixed</span></p>
+<ul type="disc"><li>Charset is sometimes incorrectly converted from/to local charset</li>
+<li>SubDialog crashes now</li>
+<li>Labels do not show up unless you edit their text</li>
+<li>toolbox editing is ugly after group layout is applied. Goes back to normal if the dialog is reloaded.</li>
+<div></div></ul>
+</body></html>
+
+\NewEntry 0 Help
+
+\NewEntry 1 Documentation
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p><span style="font-weight:600">Kommander tutorials, documentation etc.</span></p>
+<ul type="disc"><li>Update new parser docs</li>
+<li>Update docs, at least on website ?</li></ul>
+</body></html>
+
+\NewEntry 1 Examples
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Georgia">
+<p><span style="font-weight:600">Examples to be used with tutorial</span></p>
+<ul type="disc"><li>add a way to comment *.kmdr file</li>
+<li>create examples for tutorial</li>
+<li>clean up examples: reomve obsolete or unclear ones, add some more instructive ones</li></ul>
+</body></html>
+
+\NewEntry 1 Scripts
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Georgia">
+<p><span style="font-weight:600">Kommander scripts that can be useful</span></p>
+<ul type="disc"><li>improve script for Quick Start (Quanta): handle indentation with, quotation character and tag case</li>
+<li>create script for Quick List (Quanta)</li>
+<li>create scripts for common command-line programs to demonstrate power of Kommander (it would be nice if those could be documented somehow)</li>
+<li>create scripts for HTML templates</li></ul>
+<p></p>
+<p></p>
+</body></html>
+
+\NewEntry 0 Language
+
+\NewEntry 1 Syntax
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Georgia">
+<li type="disc"><span style="font-weight:600">Syntax-related problems</span></li>
+<ul type="disc"><li>better handling of lists</li>
+<li>better handling of other structures (trees, arrays etc.)</li>
+<li>add some way to define and use macros/aliases</li></ul>
+<p></p>
+<p></p>
+</body></html>
+
+\NewEntry 1 New functions
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p><span style="font-weight:600">New functions that could be useful</span></p>
+<ul type="disc"><li>capitalize, substring string handling functions?</li>
+<li>@if (a, b, c)? - or is BASH enough?<br /><span style="font-style:italic">This will be solved by new parser.</span></li>
+<li>add @include and @includelocal commands - to include external script or local (project script); that should make code more readable</li>
+<li>add @call to call local script (no need for external @call, as it is equivalent to @exec<br /><span style="font-style:italic">Naming: use @execlocal for consistency?</span></li>
+<li>add @requireVersion(command, version) that would detect version of program (presumably script language, like perl), compare it to given minimum and fail if it is not matched</li>
+<li>add function for string conversion (@String.cvs2tab, @Stringcvs2eol ...)</li>
+<li>add @ldcop for calling local DCOP functions</li></ul>
+</body></html>
+
+\NewEntry 1 Script languages
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p><span style="font-weight:600">Using script languages other than Bash</span></p>
+<ul type="disc"><li>detect incorrect path at shebang, allow user to choose correct one and remeber that pair</li>
+<div></div>
+<div></div></ul>
+<p><span style="font-weight:600">If we keep the old parser.<br /><br /></span><br />Make it possible to use any language with Kommander. The idea is to replace Kommander specials with language specific code in a way that it will not break conditions and loops, like now. example:<br />#!/bin/bash<br />array=&quot;1 2 3 4 5&quot;<br />for i in $array do<br /> @Label.setText($i)<br />done<br /><br />This does not work now. The idea is to replace @Widget.method() with a language specific DCOP call.<br />If the language has DCOP bindings, use those bindings to execute the dcop call. If not, use the command line<br />DCOP application. This is slower, but always works. In the above case, Kommander would replace <br />@Label.setText($i) <br />with<br />dcop kmdr-executor-PID KommanderIf setText Label $i<br /><br />Kommander will have description files for each supported language about how to execute DCOP calls.<br />If the language has DCOP bindings, this description tells the syntax of the bindings. If it doesn't have, the description gives a way how to execute external applications. This should always exists, as all languages can execute external applications.<br /><br />In KDE4, of course use DBUS instead of DCOP.<br /><br /></p>
+</body></html>
+
+\NewEntry 1 Aliases
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Georgia">
+<p><span style="font-weight:600">Aliases - easier access to Kommander features</span></p>
+<ul type="disc"><li>add @String.&lt;function&gt;(&lt;args&gt;) as alias to string-handling function</li>
+<li>add @&lt;widgetName&gt;.&lt;function&gt;(&lt;args&gt;) as alias to dcop @dcopid KommanderIf &lt;widgetName&gt; &lt;args&gt;</li>
+<li>add aliases to various widgets properties, f. e. text, selectedText, state, items etc.; syntax: @&lt;widgetName&gt;.&lt;attribute&gt;</li></ul>
+</body></html>
+
+\NewEntry 1 Signals
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Georgia">
+<p><span style="font-weight:600">New signals for existing widgets</span></p>
+<ul type="disc"><li>add signals for D&amp;D<br /><span style="font-style:italic">Requires dragContent and dragType, perhaps dragSource to be set.</span></li>
+<li></li></ul>
+</body></html>
+
+\NewEntry 1 Parser
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p><span style="font-weight:600">Features of new parser</span></p>
+<ul type="disc"><li>add syntax checking</li>
+<li>add debugger</li>
+<li>add step-by-step running</li>
+<li>add code-completion</li>
+<li>add syntax hints</li>
+<li>share code betwen the two parsers (new methods are needed to be added only once)</li></ul>
+</body></html>
+
+\NewEntry 0 1.3 release prep 2008
+
+\NewEntry 1 To Do
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p><span style="font-weight:600">Kommander Release Do list</span></p>
+<ul type="disc"><li><span style="color:#00ff00">Add missing functions in FB</span></li>
+<li>KPart create to go with KPart load</li>
+<li><span style="color:#ff0000">executor version required field/command - enable someone sharing dialogs to have an executing window check if the executor is capable of fully supporting it - Not the self checking Michal suggested, but better than nothing by far</span></li>
+<li><span style="color:#ff0000">ability to identify calling table widget from signal in a script slot - ideally by row and column in table grid </span></li></ul>
+</body></html>
+
+\NewEntry 1 Eric's To Do
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<ul type="disc"><li>Look into project tools, currently ready for 0.7 update</li></ul>
+</body></html>
+
+\NewEntry 1 Supplemental
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<ul type="disc"><li>We need to look at how to emulate KStfuff using HTTP and a Kommander dialog... will require KStuff back end and some PHP scripts</li>
+<li>Samples go into the install for use</li>
+<li>Web site needs docs and tutorials updated</li></ul>
+</body></html>
+
+\NewEntry 1 investigate
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p><span style="font-weight:600">Things to look into</span></p>
+<ul type="disc"><li>Qt database connection?</li>
+<li><span style="color:#ffff00">Code completion? If easy to do, otherwise we recommend users try the Kate completion plugin</span></li>
+<li><span style="color:#ffff00">D&amp;D of text/selection data</span></li>
+<li>simple DCOP functions in editor to enable Kommander based tools to call the editor and open a dialog to edit - otherwise any interfaces can at least make use of D&amp;D from file manager (KPart) views</li>
+<li><span style="color:#ff0000">Additional XML fields in dialog for author name, version of Kommander required, etc... - not required as KAbout would be better</span></li></ul>
+</body></html>
+
+\NewEntry 1 Bugs to squish
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p><span style="font-weight:600">Version 1.3 FIXME list</span></p>
+<ul type="disc"><li>link handling in TextBrowser opens file manager in execute directory even if calling another Kommander dialog. First it opens the file, then konqeror.</li></ul>
+</body></html>
+
+
+\NewEntry 1 Done
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p>New widgets include the DatePicker, Popup Menu and Toolbox. New functions inlcude widget creation, hooking and unhooking signals and slots and full slot access as well as passing and returning parameters in scripts. WooHoo! Take that do list!<br /></p>
+<ul type="disc"><li>fixed dcop functions</li>
+<li>added indexed array functions</li>
+<li>made color slot work in TextEdit</li>
+<li>Enhnaced function browser for easier widget creation</li>
+<li>quote handling in function browser - made user selectable</li></ul>
+<p>See changlog for more complete list</p>
+</body></html>
+
+\NewEntry 1 Won't Do
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p>The Kommander editor is effectively dead for KDE3. Porting is senseless as it is an old Qt Designer hack. Since Designer for Qt 4x is actually designed this time to be easy to extend and modify the first generation of the editor will be scrapped.<br /><br />Other parts of Kommander like the parser should be much more portable.<br /><br /> - creating table widgets means if you need to know the calling widget you need create scripts on the fly for this.</p>
+</body></html>
+
+\CurrentEntry 0 KDE4 prep
+
+\NewEntry 0 Executor
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p><span style="font-weight:600">Executing Kommander scripts</span></p>
+<ul type="disc"><li>detect and handle missing plugin widgets</li>
+<li>cache @pid, @dcopid, @parentPid, perhaps calculate and cache @parentdcopid</li>
+<li>handle multiple dialogs: they could be packaged in single *.tgz file, unpacked and executed internally</li>
+<div></div>
+<div><br /></div></ul>
+</body></html>
+
+\NewEntry 0 Refactoring, other ideas
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Sans Serif">
+<p><span style="font-weight:600">Kommander source code</span></p>
+<ul type="disc"><li>move all widgets into a library (mostly done)</li>
+<li>widgets should contain the code how they are displayed in the editor</li>
+<li>widgets should contain the functions they support. Share only very common functions, like show, execute, etc, otherwise soon it becomes confusing if insertItem expect and int, a string, or and int and a string. </li>
+<li>widgets and plugin should query the plugin manager for available method IDs (and register how many they need) OR on registering do not pass the ID, but get back. This makes sure you don't have plugins/widgets using the same function IDs. </li>
+<li>check if we can live without making specials.h public</li>
+<li>the icons used in the editor should be returned by the widgets itself (partly done)</li>
+<li>check if it is enough to have a public KommanderWidget instead of making KWidgetPlugin as well public</li>
+<li>get back a version number from plugins and from Kommander. This way both the plugins and the executor can decide if they are compatible or not.</li></ul>
+</body></html>
+
+\NewEntry 0 Last changes
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Georgia">
+<p><span style="font-weight:600">Last changes in TODO file</span></p>
+<ul type="disc"><li>remove done items</li></ul>
+<p><span style="color:#0000ff">2004-05-28, 17:35</span></p>
+<ul type="disc"><li>GUI/Widgets: Tree, History Combo, Picture Viewer, Table</li>
+<li>GUI/Other added</li>
+<li>Executor: handle multiple dialogs package</li>
+<li>Language/New functions: string conversion</li>
+<li>Language/Signals added</li></ul>
+<p><span style="color:#0000ff">2004-05-14, 12:44</span></p>
+<ul type="disc"><li>Bugs: added</li>
+<li>Language/New functions, Executor: added i18n</li></ul>
+<p><span style="color:#0000ff">2004-05-08, 23:00</span></p>
+<ul type="disc"><li>Widgets: Menu and popup menu</li>
+<li>added Language:Aliases</li>
+<li>Syntax: remove @dcop, moved aliases to new note, macros</li>
+<li>Editor: Connections</li>
+<li>New functions: @requireVersion</li>
+<li>Executor: detect loop, handle startup parameters, cache</li></ul>
+<p></p>
+</body></html>
+
+\NewEntry 0 Done
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Georgia">
+<li type="disc"><span style="font-weight:600">ChangeLog of Kommander</span></li>
+<li type="disc"><span style="font-style:italic">See ChangeLog file for details and dates</span></li>
+<ul type="disc"><li>added @parentPid evaluated to parent process pid</li>
+<li>added @pid evaluated to current process pid</li>
+<li>added @dcopid evaluated to current process DCOP id</li>
+<li>significantly improved Kommander Text editor usability</li>
+<li>added <span style="font-style:italic">initialization</span> and <span style="font-style:italic">destroy</span> scripts for main dialog</li>
+<li>global variables added (setGlobal and global DCOP calls)</li>
+<li>added support for shebang (#!/bin/sh) for both ExecButton script and @execBegin scripts</li>
+<li>added command-line parameters (<span style="font-style:italic">kmdr-executor dialog.kmdr VAR=VALUE ARG1 ARG2...)</span></li>
+<li>dialog setting are now stored with full path</li>
+<li>completely rebuilt @dcop() parser: check number of arguments, handle various types etc.</li>
+<li>support for @execBegin(&lt;program-name&gt;)</li>
+<li>avoid infinite loop when trying to run @&lt;widget&gt; inside &lt;widget&gt;:&lt;state&gt;</li>
+<li>handle other values for DCOP (not only <span style="font-style:italic">string</span> and <span style="font-style:italic">int</span>)</li>
+<li>add option to pass shebang as argument of @execBegin, f. e. @execBegin(/usr/bin/perl)</li>
+<li>add Run command to editor</li>
+<li>added global and setGlobal specials</li>
+<li>added warnings for missing specials</li>
+<div></div></ul>
+</body></html>
+
+\NewEntry 0 About this file
+<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:11pt;font-family:helvetica">
+<p>This file should document both what should be done in Kommander and what was done.</p>
+<p>All entries marked with a date without an author were made by Michal Rudolf</p>
+<p>When adding something important, please enter it in ChangeLog or Done and mark it with current date (in yyyy-MM-dd, hh:mm format) and your name.</p>
+</body></html>
+
diff --git a/kommander/Makefile.am b/kommander/Makefile.am
new file mode 100644
index 00000000..936bca9b
--- /dev/null
+++ b/kommander/Makefile.am
@@ -0,0 +1,15 @@
+SUBDIRS = icons plugin \
+ factory widget widgets \
+ pluginmanager editor executor part working examples kmdrtools
+
+mimetypedata_DATA = x-kommander.desktop
+mimetypedatadir = $(kde_mimedir)/application
+
+messages: rc.cpp
+ $(EXTRACTRC) `find . -name \*.ui` >> rc.cpp ; \
+ LIST=`find . -name \*.h -o -name \*.hh -o -name \*.H -o -name \*.hxx -o -name \*.hpp -o -name \*.cpp -o -name \*.cc -o -name \*.cxx -o -name \*.ecpp -o -name \*.C`; \
+ if test -n "$$LIST"; then \
+ $(XGETTEXT) $$LIST -o $(podir)/kommander.pot; \
+ fi;
+
+
diff --git a/kommander/NEWS b/kommander/NEWS
new file mode 100644
index 00000000..6c2f9bb5
--- /dev/null
+++ b/kommander/NEWS
@@ -0,0 +1 @@
+No news is good news.
diff --git a/kommander/README b/kommander/README
new file mode 100644
index 00000000..7de24937
--- /dev/null
+++ b/kommander/README
@@ -0,0 +1,70 @@
+Kommander v1.0Alpha series
+Eric Laffoon <sequitur@kde.org>
+----------------------------------------------------------------------
+Kommander is a visual dialog building tool which may be expanded to create
+full mainwindow applications. The primary objective is to create as much
+functionality as possible without using any scripting language. This is
+provided by the following features:
+* Specials - these are prefaced with an "@" like @widgetText. The offer
+special features like the value of a widget, functions, aliases, global
+variables and such.
+* DCOP integration - this allows Kommander dialogs to control and be
+controled in interactions with other KDE applicatins. It is a very powerful
+feature!
+* Signals and Slots - this is a little less intuitive to a new user. It is
+under review for how we process things in the first major release. These
+offer a limited event model for when a button is pushed or a widget is
+changed. Combined with "Population Text" it is rather powerful.
+
+The central key feature of Kommander dialogs is that you can bind text
+(Kommander Text) to a widget. So if you have @widget1 and @widget2 and
+they are line edits you can set Kommander to show their contents by
+entering @widgetText in their Kommander Text area. Then enter hello in
+@widget1 and world in @widget2. A button can have the string
+My first @widget1 @widget2 program in Kommander
+If you run this dialog from a console it will output
+My first hello world program in Kommander
+
+Hopefully you begin to see a small glimmering of the potential. Kommander
+enables a much faster design model for simple applications because if allows
+you to stop thinking so much about language and revert to the more basic and
+natural conceptual model. In computers language is a means to define concepts
+and as such it is a layer between concept and implementation that can impede
+progress with minutia. Kommander seeks to minimize that layer.
+
+Kommander also seeks to build on standards. It is built on the Qt Designer
+framework and creates *.ui files which it renames to *.kmdr. It can easily
+import any KDE widget and this can be done without having to rebuild
+Kommander, by using plugins.
+
+Kommander's other significant factor is how it addresses the requirements of
+language. Computer languages can be wonderful things but they tend to have
+their own dogmas and zealots often seeking to provide an advance to GUI
+design in an integrated development environment. Ironically the accpetance
+of such IDEs is limited by the number of people willing to adopt a new new
+language to gain access to a desired feature. It is really not reasonable to
+expect people to need to change over to a dozen languages to access various
+feature sets. By being language neutral and allowing a Kommander dialog to be
+extended by using any scripting language Kommander positions it's self in a
+unique position for wide spread adoption. Multiple script languages can be
+used in a single dialog and applications can be taken over by people using
+a different language than the original developer and gradually converting
+and extending it. New widgets and featurs can be instantly leveraged by all
+available languages.
+
+We hope that Kommander begins to get the developer support and recognition
+required to achieve the potential it offers. Our end goal is to make Kommander
+useful for novice users to extend and merge their applications. At the same
+time it should become a good prototyping tool. Also it opens the door to the
+promise of open source in a new way. We know that people can extend our GPL'd
+prgrams, but the fact remains very few have the skills. With Kommander those
+numbers see a huge multiplier! Some applications may be most logical as a
+Kommander application. We already use it in areas we want to allow
+extensibility in Quanta Plus.
+
+We hope you enjoy Kommander. Please help us with bug reports and example
+dialogs, as well as any requests you may have. You can join our user list
+for help developing Kommander applications at
+http://mail.kdewebdev.org/mailman/listinfo/kommander
+
+Best Regards from the Kommander development team!
diff --git a/kommander/VERSION b/kommander/VERSION
new file mode 100644
index 00000000..fc89135a
--- /dev/null
+++ b/kommander/VERSION
@@ -0,0 +1 @@
+Kommander 1.2.2
diff --git a/kommander/configure.in.in b/kommander/configure.in.in
new file mode 100644
index 00000000..6d8c8d93
--- /dev/null
+++ b/kommander/configure.in.in
@@ -0,0 +1,14 @@
+CPPFLAGS="$CPPFLAGS -DKOMMANDER -DDESIGNER -DQT_NO_SQL -DHAVE_KDE"
+
+# Process user input to configure
+build_kommander="yes"
+AC_ARG_WITH(kommander,
+[ --without-kommander don't build Kommander],
+[if test "$withval" = "no" ; then
+ build_kommander="no"
+fi])
+
+if test "$build_kommander" = "no"; then
+ DO_NOT_COMPILE="$DO_NOT_COMPILE kommander"
+fi
+
diff --git a/kommander/editor/Makefile.am b/kommander/editor/Makefile.am
new file mode 100644
index 00000000..aad9e81d
--- /dev/null
+++ b/kommander/editor/Makefile.am
@@ -0,0 +1,53 @@
+SUBDIRS = pics
+# this is the program that gets installed. it's name is used for all
+# of the other Makefile.am variables
+bin_PROGRAMS = kmdr-editor
+
+# set the include path for X, qt and KDE
+AM_CPPFLAGS = -I$(top_srcdir)/kommander/widget -I$(top_srcdir)/kommander/widgets -I$(top_srcdir)/kommander/plugin -I$(top_srcdir)/kommander/factory -Ishared -Iinterfaces -Ipics $(all_includes)
+
+# the library search path.
+kmdr_editor_LDFLAGS = $(KDE_RPATH) $(all_libraries)
+
+# the libraries to link against.
+kmdr_editor_LDADD = $(top_builddir)/kommander/factory/libkommanderfactory.la \
+ $(top_builddir)/kommander/widget/libkommanderwidget.la \
+ $(top_builddir)/kommander/widgets/libkommanderwidgets.la \
+ $(top_builddir)/kommander/plugin/libkommanderplugin.la -lktexteditor
+
+# which sources should be compiled for kmdr_editor
+kmdr_editor_SOURCES = actiondnd.cpp actioneditorimpl.cpp \
+ assoctexteditorimpl.cpp actionlistview.cpp asciivalidator.cpp assistproc.cpp command.cpp \
+ connectioneditorimpl.cpp defs.cpp filechooser.cpp formfile.cpp formsettingsimpl.cpp \
+ formwindow.cpp hierarchyview.cpp iconvieweditorimpl.cpp layout.cpp \
+ listboxeditorimpl.cpp listvieweditorimpl.cpp main.cpp mainwindow.cpp mainwindowactions.cpp \
+ metadatabase.cpp multilineeditorimpl.cpp newformimpl.cpp orderindicator.cpp \
+ paletteeditoradvancedimpl.cpp paletteeditorimpl.cpp parser.cpp pixmapchooser.cpp previewframe.cpp \
+ previewwidgetimpl.cpp propertyeditor.cpp qcompletionedit.cpp resource.cpp sizehandle.cpp \
+ styledbutton.cpp tableeditorimpl.cpp widgetdatabase.cpp widgetfactory.cpp \
+ wizardeditorimpl.cpp workspace.cpp actioneditor.ui assoctexteditor.ui connectioneditor.ui \
+ createtemplate.ui formsettings.ui iconvieweditor.ui listboxeditor.ui listeditor.ui \
+ listvieweditor.ui multilineeditor.ui newform.ui paletteeditor.ui paletteeditoradvanced.ui \
+ pixmapfunction.ui preferences.ui previewwidget.ui tableeditor.ui wizardeditor.ui \
+ choosewidget.ui choosewidgetimpl.cpp functions.ui functionsimpl.cpp messagelog.cpp
+
+# these are the headers for your project that won't be installed
+noinst_HEADERS = actiondnd.h actioneditorimpl.h actionlistview.h \
+ asciivalidator.h assistproc.h assoctexteditorimpl.h command.h connectioneditorimpl.h \
+ defs.h filechooser.h formfile.h formsettingsimpl.h formwindow.h globaldefs.h \
+ hierarchyview.h iconvieweditorimpl.h layout.h listboxeditorimpl.h listvieweditorimpl.h \
+ mainwindow.h metadatabase.h multilineeditorimpl.h newformimpl.h orderindicator.h \
+ paletteeditoradvancedimpl.h paletteeditorimpl.h parser.h pixmapchooser.h previewframe.h \
+ previewwidgetimpl.h propertyeditor.h qcompletionedit.h resource.h sizehandle.h \
+ styledbutton.h tableeditorimpl.h widgetdatabase.h widgetfactory.h widgetinterface.h \
+ wizardeditorimpl.h workspace.h choosewidgetimpl.h messagelog.h
+
+# let automoc handle all of the meta source files (moc)
+METASOURCES = AUTO
+
+xdg_apps_DATA = kmdr-editor.desktop
+
+syntaxkatedir = $(kde_datadir)/katepart/syntax
+syntaxkate_DATA = kommander.xml kommander-new.xml
+
+
diff --git a/kommander/editor/actiondnd.cpp b/kommander/editor/actiondnd.cpp
new file mode 100644
index 00000000..0da7c650
--- /dev/null
+++ b/kommander/editor/actiondnd.cpp
@@ -0,0 +1,1244 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qaction.h>
+#include <qapplication.h>
+#include <qbitmap.h>
+#include <qdragobject.h>
+#include <kinputdialog.h>
+#include <qlayout.h>
+#include <qmainwindow.h>
+#include <qmenudata.h>
+#include <qmessagebox.h>
+#include <qobjectlist.h>
+#include <qpainter.h>
+#include <qstyle.h>
+#include <qtimer.h>
+
+#include "actiondnd.h"
+#include "command.h"
+#include "defs.h"
+#include "formwindow.h"
+#include "mainwindow.h"
+#include "metadatabase.h"
+#include "widgetfactory.h"
+
+#include <klocale.h>
+
+bool QDesignerAction::addTo( QWidget *w )
+{
+ if ( !widgetToInsert )
+ return QAction::addTo( w );
+
+ if ( w->inherits( "QPopupMenu" ) )
+ return false;
+
+ widgetToInsert->reparent( w, QPoint( 0, 0 ), false );
+ addedTo( widgetToInsert, w );
+ return true;
+}
+
+bool QDesignerAction::removeFrom( QWidget *w )
+{
+ if ( !widgetToInsert )
+ return QAction::removeFrom( w );
+
+ remove();
+ return true;
+}
+
+void QDesignerAction::remove()
+{
+ if ( !widgetToInsert )
+ return;
+ MainWindow::self->formWindow()->selectWidget( widgetToInsert, false );
+ widgetToInsert->reparent( 0, QPoint( 0, 0 ), false );
+}
+
+QDesignerToolBarSeparator::QDesignerToolBarSeparator(Orientation o , QToolBar *parent,
+ const char* name )
+ : QWidget( parent, name )
+{
+ connect( parent, SIGNAL(orientationChanged(Orientation)),
+ this, SLOT(setOrientation(Orientation)) );
+ setOrientation( o );
+ setBackgroundMode( parent->backgroundMode() );
+ setBackgroundOrigin( ParentOrigin );
+ setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ) );
+}
+
+void QDesignerToolBarSeparator::setOrientation( Orientation o )
+{
+ orient = o;
+}
+
+void QDesignerToolBarSeparator::styleChange( QStyle& )
+{
+ setOrientation( orient );
+}
+
+QSize QDesignerToolBarSeparator::sizeHint() const
+{
+ int extent = style().pixelMetric( QStyle::PM_DockWindowSeparatorExtent,
+ this );
+ if ( orient == Horizontal )
+ return QSize( extent, 0 );
+ else
+ return QSize( 0, extent );
+}
+
+void QDesignerToolBarSeparator::paintEvent( QPaintEvent * )
+{
+ QPainter p( this );
+ QStyle::SFlags flags = QStyle::Style_Default;
+
+ if ( orientation() == Horizontal )
+ flags |= QStyle::Style_Horizontal;
+
+ style().drawPrimitive( QStyle::PE_DockWindowSeparator, &p, rect(),
+ colorGroup(), flags );
+}
+
+
+
+QSeparatorAction::QSeparatorAction( QObject *parent )
+ : QAction( parent, "qt_designer_separator" ), wid( 0 )
+{
+}
+
+bool QSeparatorAction::addTo( QWidget *w )
+{
+ if ( w->inherits( "QToolBar" ) ) {
+ QToolBar *tb = (QToolBar*)w;
+ wid = new QDesignerToolBarSeparator( tb->orientation(), tb );
+ return true;
+ } else if ( w->inherits( "QPopupMenu" ) ) {
+ idx = ( (QPopupMenu*)w )->count();
+ ( (QPopupMenu*)w )->insertSeparator( idx );
+ return true;
+ }
+ return false;
+}
+
+bool QSeparatorAction::removeFrom( QWidget *w )
+{
+ if ( w->inherits( "QToolBar" ) ) {
+ delete wid;
+ return true;
+ } else if ( w->inherits( "QPopupMenu" ) ) {
+ ( (QPopupMenu*)w )->removeItemAt( idx );
+ return true;
+ }
+ return false;
+}
+
+QWidget *QSeparatorAction::widget() const
+{
+ return wid;
+}
+
+
+
+
+QDesignerToolBar::QDesignerToolBar( QMainWindow *mw )
+ : QToolBar( mw ), lastIndicatorPos( -1, -1 )
+{
+ insertAnchor = 0;
+ afterAnchor = true;
+ setAcceptDrops( true );
+ MetaDataBase::addEntry( this );
+ lastIndicatorPos = QPoint( -1, -1 );
+ indicator = new QDesignerIndicatorWidget( this );
+ indicator->hide();
+ installEventFilter( this );
+ widgetInserting = false;
+ findFormWindow();
+ mw->setDockEnabled( DockTornOff, false );
+}
+
+QDesignerToolBar::QDesignerToolBar( QMainWindow *mw, Dock dock )
+ : QToolBar( QString::null, mw, dock), lastIndicatorPos( -1, -1 )
+{
+ insertAnchor = 0;
+ afterAnchor = true;
+ setAcceptDrops( true );
+ indicator = new QDesignerIndicatorWidget( this );
+ indicator->hide();
+ MetaDataBase::addEntry( this );
+ installEventFilter( this );
+ widgetInserting = false;
+ findFormWindow();
+ mw->setDockEnabled( DockTornOff, false );
+}
+
+void QDesignerToolBar::findFormWindow()
+{
+ QWidget *w = this;
+ while ( w ) {
+ if ( w->inherits( "FormWindow" ) )
+ formWindow = (FormWindow*)w;
+ w = w->parentWidget();
+ }
+}
+
+void QDesignerToolBar::addAction( QAction *a )
+{
+ actionList.append( a );
+ connect( a, SIGNAL( destroyed() ), this, SLOT( actionRemoved() ) );
+ if ( a->inherits( "QActionGroup" ) ) {
+ ( (QDesignerActionGroup*)a )->widget()->installEventFilter( this );
+ actionMap.insert( ( (QDesignerActionGroup*)a )->widget(), a );
+ } else if ( a->inherits( "QSeparatorAction" ) ) {
+ ( (QSeparatorAction*)a )->widget()->installEventFilter( this );
+ actionMap.insert( ( (QSeparatorAction*)a )->widget(), a );
+ } else {
+ ( (QDesignerAction*)a )->widget()->installEventFilter( this );
+ actionMap.insert( ( (QDesignerAction*)a )->widget(), a );
+ }
+}
+
+static void fixObject( QObject *&o )
+{
+ while ( o && o->parent() && !o->parent()->inherits( "QDesignerToolBar" ) )
+ o = o->parent();
+}
+
+bool QDesignerToolBar::eventFilter( QObject *o, QEvent *e )
+{
+ if ( !o || !e || o->inherits( "QDockWindowHandle" ) || o->inherits( "QDockWindowTitleBar" ) )
+ return QToolBar::eventFilter( o, e );
+
+ if ( o == this && e->type() == QEvent::MouseButtonPress &&
+ ( ( QMouseEvent*)e )->button() == LeftButton ) {
+ mousePressEvent( (QMouseEvent*)e );
+ return true;
+ }
+
+ if ( o == this )
+ return QToolBar::eventFilter( o, e );
+
+ if ( e->type() == QEvent::MouseButtonPress ) {
+ QMouseEvent *ke = (QMouseEvent*)e;
+ fixObject( o );
+ if ( !o )
+ return false;
+ buttonMousePressEvent( ke, o );
+ return true;
+ } else if(e->type() == QEvent::ContextMenu ) {
+ QContextMenuEvent *ce = (QContextMenuEvent*)e;
+ fixObject( o );
+ if( !o )
+ return false;
+ buttonContextMenuEvent( ce, o );
+ return true;
+ } else if ( e->type() == QEvent::MouseMove ) {
+ QMouseEvent *ke = (QMouseEvent*)e;
+ fixObject( o );
+ if ( !o )
+ return false;
+ buttonMouseMoveEvent( ke, o );
+ return true;
+ } else if ( e->type() == QEvent::MouseButtonRelease ) {
+ QMouseEvent *ke = (QMouseEvent*)e;
+ fixObject( o );
+ if ( !o )
+ return false;
+ buttonMouseReleaseEvent( ke, o );
+ return true;
+ } else if ( e->type() == QEvent::DragEnter ) {
+ QDragEnterEvent *de = (QDragEnterEvent*)e;
+ if ( de->provides( "application/x-designer-actions" ) ||
+ de->provides( "application/x-designer-actiongroup" ) ||
+ de->provides( "application/x-designer-separator" ) )
+ de->accept();
+ } else if ( e->type() == QEvent::DragMove ) {
+ QDragMoveEvent *de = (QDragMoveEvent*)e;
+ if ( de->provides( "application/x-designer-actions" ) ||
+ de->provides( "application/x-designer-actiongroup" ) ||
+ de->provides( "application/x-designer-separator" ) )
+ de->accept();
+ }
+
+ return QToolBar::eventFilter( o, e );
+}
+
+void QDesignerToolBar::paintEvent( QPaintEvent *e )
+{
+ QToolBar::paintEvent( e );
+ if ( e->rect() != rect() )
+ return;
+ lastIndicatorPos = QPoint( -1, -1 );
+}
+
+void QDesignerToolBar::contextMenuEvent( QContextMenuEvent *e )
+{
+ e->accept();
+ QPopupMenu menu( 0 );
+ menu.insertItem( i18n("Delete Toolbar" ), 1 );
+ int res = menu.exec( e->globalPos() );
+ if ( res != -1 ) {
+ RemoveToolBarCommand *cmd = new RemoveToolBarCommand( i18n("Delete Toolbar '%1'" ).arg( name() ),
+ formWindow, 0, this );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ }
+}
+
+void QDesignerToolBar::mousePressEvent( QMouseEvent *e )
+{
+ widgetInserting = false;
+ if ( e->button() == LeftButton &&
+ MainWindow::self->currentTool() != POINTER_TOOL &&
+ MainWindow::self->currentTool() != ORDER_TOOL ) {
+
+ if ( MainWindow::self->currentTool() == CONNECT_TOOL ) {
+
+ } else {
+ widgetInserting = true;
+ }
+
+ return;
+ }
+}
+
+void QDesignerToolBar::mouseReleaseEvent( QMouseEvent *e )
+{
+ if ( widgetInserting )
+ doInsertWidget( mapFromGlobal( e->globalPos() ) );
+ widgetInserting = false;
+}
+
+void QDesignerToolBar::buttonMouseReleaseEvent( QMouseEvent *e, QObject *w )
+{
+ if ( widgetInserting )
+ doInsertWidget( mapFromGlobal( e->globalPos() ) );
+ else if ( w->isWidgetType() && formWindow->widgets()->find( w ) ) {
+ formWindow->clearSelection( false );
+ formWindow->selectWidget( w );
+ }
+ widgetInserting = false;
+}
+
+void QDesignerToolBar::buttonContextMenuEvent( QContextMenuEvent *e, QObject *o )
+{
+ e->accept();
+ QPopupMenu menu( 0 );
+ const int ID_DELETE = 1;
+ const int ID_SEP = 2;
+ const int ID_DELTOOLBAR = 3;
+ QMap<QWidget*, QAction*>::Iterator it = actionMap.find( (QWidget*)o );
+ if ( it != actionMap.end() && (*it)->inherits( "QSeparatorAction" ) )
+ menu.insertItem( i18n("Delete Separator" ), ID_DELETE );
+ else
+ menu.insertItem( i18n("Delete Item" ), ID_DELETE );
+ menu.insertItem( i18n("Insert Separator" ), ID_SEP );
+ menu.insertSeparator();
+ menu.insertItem( i18n("Delete Toolbar" ), ID_DELTOOLBAR );
+ int res = menu.exec( e->globalPos() );
+ if ( res == ID_DELETE ) {
+ QMap<QWidget*, QAction*>::Iterator it = actionMap.find( (QWidget*)o );
+ if ( it == actionMap.end() )
+ return;
+ QAction *a = *it;
+ int index = actionList.find( a );
+ RemoveActionFromToolBarCommand *cmd = new RemoveActionFromToolBarCommand(
+ i18n("Delete Action '%1' From Toolbar '%2'" ).
+ arg( a->name() ).arg( caption() ),
+ formWindow, a, this, index );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ } else if ( res == ID_SEP ) {
+ calcIndicatorPos( mapFromGlobal( e->globalPos() ) );
+ QAction *a = new QSeparatorAction( 0 );
+ int index = actionList.findRef( *actionMap.find( insertAnchor ) );
+ if ( index != -1 && afterAnchor )
+ ++index;
+ if ( !insertAnchor )
+ index = 0;
+
+ AddActionToToolBarCommand *cmd = new AddActionToToolBarCommand(
+ i18n("Add Separator to Toolbar '%1'" ).
+ arg( a->name() ),
+ formWindow, a, this, index );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ } else if ( res == ID_DELTOOLBAR ) {
+ RemoveToolBarCommand *cmd = new RemoveToolBarCommand( i18n("Delete Toolbar '%1'" ).arg( name() ),
+ formWindow, 0, this );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ }
+}
+
+void QDesignerToolBar::buttonMousePressEvent( QMouseEvent *e, QObject * )
+{
+ widgetInserting = false;
+
+ if ( e->button() == MidButton )
+ return;
+
+ if ( e->button() == LeftButton &&
+ MainWindow::self->currentTool() != POINTER_TOOL &&
+ MainWindow::self->currentTool() != ORDER_TOOL ) {
+
+ if ( MainWindow::self->currentTool() == CONNECT_TOOL ) {
+
+ } else {
+ widgetInserting = true;
+ }
+
+ return;
+ }
+
+
+ dragStartPos = e->pos();
+}
+
+void QDesignerToolBar::removeWidget( QWidget *w )
+{
+ QMap<QWidget*, QAction*>::Iterator it = actionMap.find( w );
+ if ( it == actionMap.end() )
+ return;
+ QAction *a = *it;
+ int index = actionList.find( a );
+ RemoveActionFromToolBarCommand *cmd =
+ new RemoveActionFromToolBarCommand( i18n("Delete Action '%1' From Toolbar '%2'" ).
+ arg( a->name() ).arg( caption() ),
+ formWindow, a, this, index );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ QApplication::sendPostedEvents();
+ adjustSize();
+}
+
+void QDesignerToolBar::buttonMouseMoveEvent( QMouseEvent *e, QObject *o )
+{
+ if ( widgetInserting || ( e->state() & LeftButton ) == 0 )
+ return;
+ if ( QABS( QPoint( dragStartPos - e->pos() ).manhattanLength() ) < QApplication::startDragDistance() )
+ return;
+ QMap<QWidget*, QAction*>::Iterator it = actionMap.find( (QWidget*)o );
+ if ( it == actionMap.end() )
+ return;
+ QAction *a = *it;
+ if ( !a )
+ return;
+ int index = actionList.find( a );
+ RemoveActionFromToolBarCommand *cmd =
+ new RemoveActionFromToolBarCommand( i18n("Delete Action '%1' From Toolbar '%2'" ).
+ arg( a->name() ).arg( caption() ),
+ formWindow, a, this, index );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ QApplication::sendPostedEvents();
+ adjustSize();
+
+ QString type = a->inherits( "QActionGroup" ) ? QString( "application/x-designer-actiongroup" ) :
+ a->inherits( "QSeparatorAction" ) ? QString( "application/x-designer-separator" ) : QString( "application/x-designer-actions" );
+ QStoredDrag *drag = new QStoredDrag( type, this );
+ QString s = QString::number( (long)a ); // #### huha, that is evil
+ drag->setEncodedData( QCString( s.latin1() ) );
+ drag->setPixmap( a->iconSet().pixmap() );
+ if ( a->inherits( "QDesignerAction" ) ) {
+ if ( formWindow->widgets()->find( ( (QDesignerAction*)a )->widget() ) )
+ formWindow->selectWidget( ( (QDesignerAction*)a )->widget(), false );
+ }
+ if ( !drag->drag() ) {
+ AddActionToToolBarCommand *cmd = new AddActionToToolBarCommand( i18n("Add Action '%1' to Toolbar '%2'" ).
+ arg( a->name() ).arg( caption() ),
+ formWindow, a, this, index );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ }
+ lastIndicatorPos = QPoint( -1, -1 );
+ indicator->hide();
+}
+
+#ifndef QT_NO_DRAGANDDROP
+
+void QDesignerToolBar::dragEnterEvent( QDragEnterEvent *e )
+{
+ widgetInserting = false;
+ lastIndicatorPos = QPoint( -1, -1 );
+ if ( e->provides( "application/x-designer-actions" ) ||
+ e->provides( "application/x-designer-actiongroup" ) ||
+ e->provides( "application/x-designer-separator" ) )
+ e->accept();
+}
+
+void QDesignerToolBar::dragMoveEvent( QDragMoveEvent *e )
+{
+ if ( e->provides( "application/x-designer-actions" ) ||
+ e->provides( "application/x-designer-actiongroup" ) ||
+ e->provides( "application/x-designer-separator" ) )
+ e->accept();
+ else
+ return;
+ drawIndicator( calcIndicatorPos( e->pos() ) );
+}
+
+void QDesignerToolBar::dragLeaveEvent( QDragLeaveEvent * )
+{
+ indicator->hide();
+ insertAnchor = 0;
+ afterAnchor = true;
+}
+
+void QDesignerToolBar::dropEvent( QDropEvent *e )
+{
+ if ( e->provides( "application/x-designer-actions" ) ||
+ e->provides( "application/x-designer-actiongroup" ) ||
+ e->provides( "application/x-designer-separator" ) )
+ e->accept();
+ else
+ return;
+ QString s;
+ if ( e->provides( "application/x-designer-actiongroup" ) )
+ s = QString( e->encodedData( "application/x-designer-actiongroup" ) );
+ else if ( e->provides( "application/x-designer-separator" ) )
+ s = QString( e->encodedData( "application/x-designer-separator" ) );
+ else
+ s = QString( e->encodedData( "application/x-designer-actions" ) );
+
+ indicator->hide();
+ QAction *a = 0;
+ int index = actionList.findRef( *actionMap.find( insertAnchor ) );
+ if ( index != -1 && afterAnchor )
+ ++index;
+ if ( !insertAnchor )
+ index = 0;
+ if ( e->provides( "application/x-designer-actions" ) ||
+ e->provides( "application/x-designer-separator" ) ) {
+ if ( e->provides( "application/x-designer-actions" ) )
+ a = (QDesignerAction*)s.toLong();
+ else
+ a = (QSeparatorAction*)s.toLong();
+ } else {
+ a = (QDesignerActionGroup*)s.toLong();
+ }
+
+ if ( actionList.findRef( a ) != -1 ) {
+ QMessageBox::warning( MainWindow::self, i18n("Insert/Move Action" ),
+ i18n("Action '%1' has already been added to this toolbar.\n"
+ "An Action may only occur once in a given toolbar." ).
+ arg( a->name() ) );
+ return;
+ }
+
+ AddActionToToolBarCommand *cmd = new AddActionToToolBarCommand( i18n("Add Action '%1' to Toolbar '%2'" ).
+ arg( a->name() ).arg( caption() ),
+ formWindow, a, this, index );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+
+ lastIndicatorPos = QPoint( -1, -1 );
+}
+
+#endif
+
+void QDesignerToolBar::reInsert()
+{
+ QAction *a = 0;
+ actionMap.clear();
+ clear();
+ for ( a = actionList.first(); a; a = actionList.next() ) {
+ a->addTo( this );
+ if ( a->inherits( "QActionGroup" ) ) {
+ actionMap.insert( ( (QDesignerActionGroup*)a )->widget(), a );
+ if ( ( (QDesignerActionGroup*)a )->widget() )
+ ( (QDesignerActionGroup*)a )->widget()->installEventFilter( this );
+ } else if ( a->inherits( "QDesignerAction" ) ) {
+ actionMap.insert( ( (QDesignerAction*)a )->widget(), a );
+ ( (QDesignerAction*)a )->widget()->installEventFilter( this );
+ } else if ( a->inherits( "QSeparatorAction" ) ) {
+ actionMap.insert( ( (QSeparatorAction*)a )->widget(), a );
+ ( (QSeparatorAction*)a )->widget()->installEventFilter( this );
+ }
+ }
+ QApplication::sendPostedEvents();
+ adjustSize();
+}
+
+void QDesignerToolBar::actionRemoved()
+{
+ actionList.removeRef( (QAction*)sender() );
+}
+
+QPoint QDesignerToolBar::calcIndicatorPos( const QPoint &pos )
+{
+ if ( orientation() == Horizontal ) {
+ QPoint pnt( width() - 2, 0 );
+ insertAnchor = 0;
+ afterAnchor = true;
+ if ( !children() )
+ return pnt;
+ pnt = QPoint( 13, 0 );
+ QObjectListIt it( *children() );
+ QObject * obj;
+ while( (obj=it.current()) != 0 ) {
+ ++it;
+ if ( obj->isWidgetType() &&
+ qstrcmp( "qt_dockwidget_internal", obj->name() ) != 0 ) {
+ QWidget *w = (QWidget*)obj;
+ if ( w->x() < pos.x() ) {
+ pnt.setX( w->x() + w->width() + 1 );
+ insertAnchor = w;
+ afterAnchor = true;
+ }
+ }
+ }
+ return pnt;
+ } else {
+ QPoint pnt( 0, height() - 2 );
+ insertAnchor = 0;
+ afterAnchor = true;
+ if ( !children() )
+ return pnt;
+ pnt = QPoint( 0, 13 );
+ QObjectListIt it( *children() );
+ QObject * obj;
+ while( (obj=it.current()) != 0 ) {
+ ++it;
+ if ( obj->isWidgetType() &&
+ qstrcmp( "qt_dockwidget_internal", obj->name() ) != 0 ) {
+ QWidget *w = (QWidget*)obj;
+ if ( w->y() < pos.y() ) {
+ pnt.setY( w->y() + w->height() + 1 );
+ insertAnchor = w;
+ afterAnchor = true;
+ }
+ }
+ }
+ return pnt;
+ }
+}
+
+void QDesignerToolBar::drawIndicator( const QPoint &pos )
+{
+ if ( lastIndicatorPos == pos )
+ return;
+ bool wasVsisible = indicator->isVisible();
+ if ( orientation() == Horizontal ) {
+ indicator->resize( 3, height() );
+ if ( pos != QPoint( -1, -1 ) )
+ indicator->move( pos.x() - 1, 0 );
+ indicator->show();
+ indicator->raise();
+ lastIndicatorPos = pos;
+ } else {
+ indicator->resize( width(), 3 );
+ if ( pos != QPoint( -1, -1 ) )
+ indicator->move( 0, pos.y() - 1 );
+ indicator->show();
+ indicator->raise();
+ lastIndicatorPos = pos;
+ }
+ if ( !wasVsisible )
+ QApplication::sendPostedEvents();
+}
+
+void QDesignerToolBar::doInsertWidget( const QPoint &p )
+{
+ if ( formWindow != MainWindow::self->formWindow() )
+ return;
+ calcIndicatorPos( p );
+ QWidget *w = WidgetFactory::create( MainWindow::self->currentTool(), this, 0, true );
+ installEventFilters( w );
+ MainWindow::self->formWindow()->insertWidget( w, true );
+ QDesignerAction *a = new QDesignerAction( w, parent() );
+ int index = actionList.findRef( *actionMap.find( insertAnchor ) );
+ if ( index != -1 && afterAnchor )
+ ++index;
+ if ( !insertAnchor )
+ index = 0;
+ AddActionToToolBarCommand *cmd = new AddActionToToolBarCommand( i18n("Add Widget '%1' to Toolbar '%2'" ).
+ arg( w->name() ).arg( caption() ),
+ formWindow, a, this, index );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ MainWindow::self->resetTool();
+}
+
+void QDesignerToolBar::clear()
+{
+ for ( QAction *a = actionList.first(); a; a = actionList.next() ) {
+ if ( a->inherits( "QDesignerAction" ) )
+ ( (QDesignerAction*)a )->remove();
+ }
+ QToolBar::clear();
+}
+
+void QDesignerToolBar::installEventFilters( QWidget *w )
+{
+ if ( !w )
+ return;
+ QObjectList *l = w->queryList( "QWidget" );
+ for ( QObject *o = l->first(); o; o = l->next() )
+ o->installEventFilter( this );
+ delete l;
+}
+
+
+
+QDesignerMenuBar::QDesignerMenuBar( QWidget *mw )
+ : QMenuBar( mw, 0 )
+{
+ show();
+ setAcceptDrops( true );
+ MetaDataBase::addEntry( this );
+ itemNum = 0;
+ mousePressed = false;
+ lastIndicatorPos = QPoint( -1, -1 );
+ insertAt = -1;
+ indicator = new QDesignerIndicatorWidget( this );
+ indicator->hide();
+ findFormWindow();
+}
+
+void QDesignerMenuBar::findFormWindow()
+{
+ QWidget *w = this;
+ while ( w ) {
+ if ( w->inherits( "FormWindow" ) )
+ formWindow = (FormWindow*)w;
+ w = w->parentWidget();
+ }
+}
+
+void QDesignerMenuBar::contextMenuEvent( QContextMenuEvent *e )
+{
+ e->accept();
+ int itm = itemAtPos( e->pos() );
+ if ( itm == -1 ) {
+ if ( formWindow )
+ formWindow->mainWindow()->popupFormWindowMenu( e->globalPos(), formWindow );
+ return;
+ }
+ QPopupMenu menu( this );
+ menu.insertItem( i18n("Delete Item" ), 1 );
+ menu.insertItem( i18n("Rename Item..." ), 2 );
+ int res = menu.exec( e->globalPos() );
+ if ( res == 1 ) {
+ QMenuItem *item = findItem( idAt( itm ) );
+ RemoveMenuCommand *cmd = new RemoveMenuCommand( i18n("Delete Menu '%1'" ).arg( item->text() ),
+ formWindow,
+ (QMainWindow*)parentWidget(), this,
+ (QDesignerPopupMenu*)item->popup(),
+ idAt( itm ), itm, item->text() );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ // #### need to do a proper invalidate and re-layout
+ parentWidget()->layout()->invalidate();
+ parentWidget()->layout()->activate();
+ } else if ( res == 2 ) {
+ bool ok;
+ QString old = text( idAt( itm ) );
+ QString txt = KInputDialog::getText( i18n("Rename Menu Item" ), i18n("Menu text:" ),
+ text( idAt( itm ) ), &ok, 0 );
+ if ( ok ) {
+ RenameMenuCommand *cmd = new RenameMenuCommand(
+ i18n("Rename Menu '%1' to '%2'" ).arg( old ).arg( txt ),
+ formWindow, this, idAt( itm ), old, txt );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ }
+ }
+}
+
+void QDesignerMenuBar::mousePressEvent( QMouseEvent *e )
+{
+ lastIndicatorPos = QPoint( -1, -1 );
+ insertAt = -1;
+ mousePressed = true;
+ if ( e->button() == MidButton || e->button() == RightButton )
+ return;
+
+ dragStartPos = e->pos();
+ QMenuBar::mousePressEvent( e );
+}
+
+void QDesignerMenuBar::mouseMoveEvent( QMouseEvent *e )
+{
+ if ( !mousePressed || e->state() == NoButton ) {
+ QMenuBar::mouseMoveEvent( e );
+ return;
+ }
+ if ( QABS( QPoint( dragStartPos - e->pos() ).manhattanLength() ) < QApplication::startDragDistance() )
+ return;
+ hidePopups();
+ activateItemAt( -1 );
+ int itm = itemAtPos( dragStartPos );
+ if ( itm == -1 )
+ return;
+ QPopupMenu *popup = findItem( idAt( itm ) )->popup();
+ QString txt = findItem( idAt( itm ) )->text();
+ removeItemAt( itm );
+
+ QStoredDrag *drag = new QStoredDrag( "application/x-designer-menuitem", this );
+ QString s = QString::number( (long)popup );
+ s += "/" + txt;
+ drag->setEncodedData( QCString( s.latin1() ) );
+ QSize sz( fontMetrics().boundingRect( txt ).size() );
+ QPixmap pix( sz.width() + 20, sz.height() * 2 );
+ pix.fill( white );
+ QPainter p( &pix, this );
+ p.drawText( 2, 0, pix.width(), pix.height(), 0, txt );
+ p.end();
+ pix.setMask( pix.createHeuristicMask() );
+ drag->setPixmap( pix );
+ oldPos = itm;
+ if ( !drag->drag() ) {
+ insertItem( txt, popup, -1, itm );
+ }
+ lastIndicatorPos = QPoint( -1, -1 );
+ indicator->hide();
+ mousePressed = false;
+}
+
+void QDesignerMenuBar::mouseReleaseEvent( QMouseEvent *e )
+{
+ QMenuBar::mouseReleaseEvent( e );
+ mousePressed = false;
+}
+
+#ifndef QT_NO_DRAGANDDROP
+
+void QDesignerMenuBar::dragEnterEvent( QDragEnterEvent *e )
+{
+ if ( e->provides( "application/x-designer-actions" ) ||
+ e->provides( "application/x-designer-actiongroup" ) ||
+ e->provides( "application/x-designer-separator" ) )
+ e->accept();
+ if ( e->provides( "application/x-designer-menuitem" ) )
+ e->accept();
+ lastIndicatorPos = QPoint( -1, -1 );
+ insertAt = -1;
+}
+
+void QDesignerMenuBar::dragMoveEvent( QDragMoveEvent *e )
+{
+ if ( e->provides( "application/x-designer-actions" ) ||
+ e->provides( "application/x-designer-menuitem" ) ||
+ e->provides( "application/x-designer-actiongroup" ) ||
+ e->provides( "application/x-designer-separator" ) )
+ e->accept();
+ else
+ return;
+ if ( e->provides( "application/x-designer-actions" ) ||
+ e->provides( "application/x-designer-actiongroup" ) ||
+ e->provides( "application/x-designer-separator" ) ) {
+ int item = itemAtPos( e->pos() );
+ bool uieffect = QApplication::isEffectEnabled( UI_AnimateMenu );
+ QApplication::setEffectEnabled( UI_AnimateMenu, false );
+ if ( !qApp->activePopupWidget() )
+ actItem = -1;
+ activateItemAt( item );
+ QApplication::setEffectEnabled( UI_AnimateMenu, uieffect );
+ if ( item == -1 )
+ hidePopups();
+ } else {
+ drawIndicator( calcIndicatorPos( e->pos() ) );
+ }
+}
+
+void QDesignerMenuBar::dragLeaveEvent( QDragLeaveEvent * )
+{
+ mousePressed = false;
+ lastIndicatorPos = QPoint( -1, -1 );
+ insertAt = -1;
+}
+
+void QDesignerMenuBar::dropEvent( QDropEvent *e )
+{
+ mousePressed = false;
+ if ( !e->provides( "application/x-designer-menuitem" ) )
+ return;
+ e->accept();
+ QString s( e->encodedData( "application/x-designer-menuitem" ) );
+ QString s1 = s.left( s.find( "/" ) );
+ QString s2 = s.mid( s.find( "/" ) + 1 );
+ QPopupMenu *popup = (QPopupMenu*)s1.toLong(); // #### huha, that is evil
+ QString txt = s2;
+ insertItem( txt, popup, -1, insertAt );
+
+ MoveMenuCommand *cmd = new MoveMenuCommand( i18n("Move Menu '%1'" ).arg( txt ), formWindow,
+ this, (QDesignerPopupMenu*)popup, oldPos, insertAt, txt );
+ // do not execute, we did the work already
+ formWindow->commandHistory()->addCommand( cmd );
+
+ indicator->hide();
+}
+
+#endif
+
+QPoint QDesignerMenuBar::calcIndicatorPos( const QPoint &pos )
+{
+ int w = frameWidth();
+ insertAt = count();
+ for ( int i = 0; i < (int)count(); ++i ) {
+ QRect r = itemRect( i );
+ if ( pos.x() < w + r.width() / 2 ) {
+ insertAt = i;
+ break;
+ }
+ w += r.width();
+ }
+
+ return QPoint( w, 0 );
+}
+
+void QDesignerMenuBar::drawIndicator( const QPoint &pos )
+{
+ if ( lastIndicatorPos == pos )
+ return;
+ bool wasVsisible = indicator->isVisible();
+ indicator->resize( 3, height() );
+ indicator->move( pos.x() - 1, 0 );
+ indicator->show();
+ indicator->raise();
+ lastIndicatorPos = pos;
+ if ( !wasVsisible )
+ QApplication::sendPostedEvents();
+}
+
+void QDesignerMenuBar::setItemNumber( int num )
+{
+ itemNum = num;
+}
+
+int QDesignerMenuBar::itemNumber() const
+{
+ return itemNum;
+}
+
+void QDesignerMenuBar::setItemText( const QString &s )
+{
+ if ( itemNum < 0 || itemNum >= (int)count() )
+ return;
+ changeItem( idAt( itemNum ), s );
+}
+
+QString QDesignerMenuBar::itemText() const
+{
+ if ( itemNum < 0 || (int)itemNum >= (int)count() )
+ return QString::null;
+ return text( idAt( itemNum ) );
+}
+
+void QDesignerMenuBar::setItemName( const QCString &s )
+{
+ if ( itemNum < 0 || itemNum >= (int)count() )
+ return;
+ findItem( idAt( itemNum ) )->popup()->setName( s );
+}
+
+QCString QDesignerMenuBar::itemName() const
+{
+ if ( itemNum < 0 || itemNum >= (int)count() )
+ return "";
+ return findItem( idAt( itemNum ) )->popup()->name();
+}
+
+
+
+QDesignerPopupMenu::QDesignerPopupMenu( QWidget *w )
+ : QPopupMenu( w, 0 ),
+ popupMenu( 0 )
+{
+ findFormWindow();
+ setAcceptDrops( true );
+ insertAt = -1;
+ mousePressed = false;
+ lastIndicatorPos = QPoint( -1, -1 );
+ indicator = new QDesignerIndicatorWidget( this );
+ indicator->hide();
+}
+
+void QDesignerPopupMenu::contextMenuEvent( QContextMenuEvent *e )
+{
+#if defined( Q_WS_MAC ) //the mac needs us to use context menu rather than right click
+ e->accept();
+ QMouseEvent me( QEvent::MouseButtonPress, e->pos(), e->globalPos(), RightButton, RightButton );
+ mousePressEvent(&me);
+#else
+ Q_UNUSED( e );
+#endif
+}
+
+void QDesignerPopupMenu::mousePressEvent( QMouseEvent *e )
+{
+ if ( e->button() == MidButton )
+ return;
+
+ if ( e->button() == RightButton ) {
+ // A popup for a popup, we only need one, so make sure that
+ // we don't create multiple. The timer keeps the event loop sane.
+ popupPos = e->globalPos();
+ popupLocalPos = e->pos();
+ if ( popupMenu ) {
+ popupMenu->close();
+ }
+ e->accept();
+ QTimer::singleShot( 0, this, SLOT(createPopupMenu()) );
+ return;
+ }
+ mousePressed = true;
+ dragStartPos = e->pos();
+ QPopupMenu::mousePressEvent( e );
+}
+
+void QDesignerPopupMenu::createPopupMenu()
+{
+ // actually creates our popup for the popupmenu.
+ QPopupMenu menu( 0 );
+ popupMenu = &menu;
+ int itm;
+ const int ID_DELETE = 1;
+ const int ID_SEP = 2;
+ itm = itemAtPos( popupLocalPos, false );
+ if ( itm == -1 )
+ return;
+ QAction *a = actionList.at( itm );
+ if ( a && a->inherits( "QSeparatorAction" ) )
+ menu.insertItem( i18n("Delete Separator" ), ID_DELETE );
+ else
+ menu.insertItem( i18n("Delete Item" ), ID_DELETE );
+ menu.insertItem( i18n("Insert Separator" ), ID_SEP );
+ int res = menu.exec( popupPos );
+ if ( res == ID_DELETE ) {
+ QAction *a = actionList.at( itm );
+ if ( !a )
+ return;
+ RemoveActionFromPopupCommand *cmd = new RemoveActionFromPopupCommand(
+ i18n("Delete Action '%1' From Popup Menu '%2'" ).
+ arg( a->name() ).arg( caption() ),
+ formWindow, a, this, itm );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ } else if ( res == ID_SEP ) {
+ QPoint p( pos() );
+ calcIndicatorPos( mapFromGlobal( popupPos ) );
+ QAction *a = new QSeparatorAction( 0 );
+ AddActionToPopupCommand *cmd = new AddActionToPopupCommand(
+ i18n("Add Separator to Popup Menu '%1'" ).
+ arg( name() ),
+ formWindow, a, this, insertAt );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ ( (QDesignerMenuBar*)( (QMainWindow*)parentWidget() )->menuBar() )->hidePopups();
+ ( (QDesignerMenuBar*)( (QMainWindow*)parentWidget() )->menuBar() )->activateItemAt( -1 );
+ popup( p );
+ }
+ // set this back to zero so we know a popup (will soon) not exist.
+ popupMenu = 0;
+}
+
+void QDesignerPopupMenu::mouseMoveEvent( QMouseEvent *e )
+{
+ if ( !mousePressed || e->state() == NoButton ) {
+ QPopupMenu::mouseMoveEvent( e );
+ return;
+ }
+ if ( QABS( QPoint( dragStartPos - e->pos() ).manhattanLength() ) < QApplication::startDragDistance() ) {
+ QPopupMenu::mouseMoveEvent( e );
+ return;
+ }
+ int itm = itemAtPos( dragStartPos, false );
+ if ( itm == -1 )
+ return;
+ QAction *a = actionList.at( itm );
+ if ( !a )
+ return;
+ RemoveActionFromPopupCommand *cmd = new RemoveActionFromPopupCommand( i18n("Delete Action '%1' From Popup Menu '%2'" ).
+ arg( a->name() ).arg( caption() ),
+ formWindow, a, this, itm );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+
+ QString type = a->inherits( "QActionGroup" ) ? QString( "application/x-designer-actiongroup" ) :
+ a->inherits( "QSeparatorAction" ) ? QString( "application/x-designer-separator" ) : QString( "application/x-designer-actions" );
+ QStoredDrag *drag = new QStoredDrag( type, this );
+ QString s = QString::number( (long)a ); // #### huha, that is evil
+ drag->setEncodedData( QCString( s.latin1() ) );
+ drag->setPixmap( a->iconSet().pixmap() );
+ if ( !drag->drag() ) {
+ AddActionToPopupCommand *cmd = new AddActionToPopupCommand( i18n("Add Action '%1' to Popup Menu '%2'" ).
+ arg( a->name() ).arg( name() ),
+ formWindow, a, this, itm );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ }
+ indicator->hide();
+ lastIndicatorPos = QPoint( -1, -1 );
+ mousePressed = false;
+}
+
+void QDesignerPopupMenu::mouseReleaseEvent( QMouseEvent *e )
+{
+ mousePressed = false;
+ QPopupMenu::mouseReleaseEvent( e );
+}
+
+#ifndef QT_NO_DRAGANDDROP
+
+void QDesignerPopupMenu::dragEnterEvent( QDragEnterEvent *e )
+{
+ mousePressed = false;
+ lastIndicatorPos = QPoint( -1, -1 );
+ if ( e->provides( "application/x-designer-actions" ) ||
+ e->provides( "application/x-designer-actiongroup" ) ||
+ e->provides( "application/x-designer-separator" ) )
+ e->accept();
+}
+
+void QDesignerPopupMenu::dragMoveEvent( QDragMoveEvent *e )
+{
+ mousePressed = false;
+ if ( e->provides( "application/x-designer-actions" ) ||
+ e->provides( "application/x-designer-actiongroup" ) ||
+ e->provides( "application/x-designer-separator" ) )
+ e->accept();
+ else
+ return;
+ drawIndicator( calcIndicatorPos( e->pos() ) );
+}
+
+void QDesignerPopupMenu::dragLeaveEvent( QDragLeaveEvent * )
+{
+ mousePressed = false;
+ indicator->hide();
+ insertAt = -1;
+}
+
+void QDesignerPopupMenu::dropEvent( QDropEvent *e )
+{
+ mousePressed = false;
+ if ( e->provides( "application/x-designer-actions" ) ||
+ e->provides( "application/x-designer-actiongroup" ) ||
+ e->provides( "application/x-designer-separator" ) )
+ e->accept();
+ else
+ return;
+
+ QPoint p = pos();
+ QAction *a = 0;
+ if ( e->provides( "application/x-designer-actiongroup" ) ) {
+ QString s( e->encodedData( "application/x-designer-actiongroup" ) );
+ a = (QDesignerActionGroup*)s.toLong();
+ } else {
+ QString s;
+ if ( e->provides( "application/x-designer-separator" ) ) {
+ s = QString( e->encodedData( "application/x-designer-separator" ) );
+ a = (QSeparatorAction*)s.toLong();
+ } else {
+ s = QString( e->encodedData( "application/x-designer-actions" ) );
+ a = (QDesignerAction*)s.toLong();
+ }
+ }
+
+ if ( actionList.findRef( a ) != -1 ) {
+ QMessageBox::warning( MainWindow::self, i18n("Insert/Move Action" ),
+ i18n("Action '%1' has already been added to this menu.\n"
+ "An Action may only occur once in a given menu." ).
+ arg( a->name() ) );
+ return;
+ }
+
+ AddActionToPopupCommand *cmd = new AddActionToPopupCommand( i18n("Add Action '%1' to Popup Menu '%2'" ).
+ arg( a->name() ).arg( name() ),
+ formWindow, a, this, insertAt );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+
+ ( (QDesignerMenuBar*)( (QMainWindow*)parentWidget() )->menuBar() )->hidePopups();
+ ( (QDesignerMenuBar*)( (QMainWindow*)parentWidget() )->menuBar() )->activateItemAt( -1 );
+ indicator->hide();
+ popup( p );
+}
+
+#endif
+
+void QDesignerPopupMenu::reInsert()
+{
+ clear();
+ for ( QAction *a = actionList.first(); a; a = actionList.next() )
+ a->addTo( this );
+}
+
+void QDesignerPopupMenu::drawIndicator( const QPoint &pos )
+{
+ if ( lastIndicatorPos == pos )
+ return;
+ bool wasVsisible = indicator->isVisible();
+ indicator->resize( width(), 3 );
+ indicator->move( 0, pos.y() - 1 );
+ indicator->show();
+ indicator->raise();
+ lastIndicatorPos = pos;
+ if ( !wasVsisible )
+ QApplication::sendPostedEvents();
+}
+
+QPoint QDesignerPopupMenu::calcIndicatorPos( const QPoint &pos )
+{
+ int h = frameWidth();
+ insertAt = count();
+ for ( int i = 0; i < (int)count(); ++i ) {
+ QRect r = itemGeometry( i );
+ if ( pos.y() < h + r.height() / 2 ) {
+ insertAt = i;
+ break;
+ }
+ h += r.height();
+ }
+
+ return QPoint( 0, h );
+}
+
+void QDesignerPopupMenu::addAction( QAction *a )
+{
+ actionList.append( a );
+ connect( a, SIGNAL( destroyed() ), this, SLOT( actionRemoved() ) );
+}
+
+void QDesignerPopupMenu::actionRemoved()
+{
+ actionList.removeRef( (QAction*)sender() );
+}
+
+void QDesignerPopupMenu::paintEvent( QPaintEvent *e )
+{
+ QPopupMenu::paintEvent( e );
+ if ( e->rect() != rect() )
+ return;
+ lastIndicatorPos = QPoint( -1, -1 );
+}
+
+void QDesignerPopupMenu::findFormWindow()
+{
+ QWidget *w = this;
+ while ( w ) {
+ if ( w->inherits( "FormWindow" ) )
+ formWindow = (FormWindow*)w;
+ w = w->parentWidget();
+ }
+}
+
+#include "actiondnd.moc"
diff --git a/kommander/editor/actiondnd.h b/kommander/editor/actiondnd.h
new file mode 100644
index 00000000..d99cc54c
--- /dev/null
+++ b/kommander/editor/actiondnd.h
@@ -0,0 +1,304 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef ACTIONDND_H
+#define ACTIONDND_H
+
+#include <qaction.h>
+#include <qmap.h>
+#include <qmenubar.h>
+#include <qpixmap.h>
+#include <qpopupmenu.h>
+#include <qptrlist.h>
+#include <qtoolbar.h>
+#include <qguardedptr.h>
+
+class QDesignerPopupMenu;
+class QDesignerIndicatorWidget;
+class FormWindow;
+
+class QDesignerActionGroup : public QActionGroup
+{
+ Q_OBJECT
+
+public:
+ QDesignerActionGroup( QObject *parent )
+ : QActionGroup( !parent || parent->inherits( "QActionGroup" ) ? parent : 0 ), wid( 0 ), idx( -1 ) {}
+
+ QWidget *widget() const { return wid; }
+ QWidget *widget( QAction *a ) const { return *widgets.find( a ); }
+ int index() const { return idx; }
+
+protected:
+ void addedTo( QWidget *w, QWidget * ) {
+ wid = w;
+ }
+ void addedTo( QWidget *w, QWidget *, QAction *a ) {
+ widgets.insert( a, w );
+ }
+ void addedTo( int index, QPopupMenu * ) {
+ idx = index;
+ }
+
+private:
+ QWidget *wid;
+ QMap<QAction *, QWidget *> widgets;
+ int idx;
+
+};
+
+class QDesignerAction : public QAction
+{
+ Q_OBJECT
+
+public:
+ QDesignerAction( QObject *parent )
+ : QAction( !parent || parent->inherits( "QActionGroup" ) ? parent : 0 ), wid( 0 ), idx( -1 ), widgetToInsert( 0 ) {}
+ QDesignerAction( QWidget *w, QObject *parent )
+ : QAction( !parent || parent->inherits( "QActionGroup" ) ? parent : 0 ), wid( 0 ), idx( -1 ), widgetToInsert( w ) {}
+
+ QWidget *widget() const { return wid; }
+ int index() const { return idx; }
+
+ bool addTo( QWidget *w );
+ bool removeFrom( QWidget *w );
+
+ void remove();
+ bool supportsMenu() const { return !widgetToInsert; }
+
+protected:
+ void addedTo( QWidget *w, QWidget * ) {
+ wid = w;
+ }
+ void addedTo( int index, QPopupMenu * ) {
+ idx = index;
+ }
+
+private:
+ QWidget *wid;
+ int idx;
+ QWidget *widgetToInsert;
+
+};
+
+class QDesignerToolBarSeparator : public QWidget
+{
+ Q_OBJECT
+
+public:
+ QDesignerToolBarSeparator( Orientation, QToolBar *parent, const char* name=0 );
+
+ QSize sizeHint() const;
+ Orientation orientation() const { return orient; }
+public slots:
+ void setOrientation( Orientation );
+protected:
+ void styleChange( QStyle& );
+ void paintEvent( QPaintEvent * );
+private:
+ Orientation orient;
+};
+
+
+class QSeparatorAction : public QAction
+{
+ Q_OBJECT
+
+public:
+ QSeparatorAction( QObject *parent );
+
+ bool addTo( QWidget *w );
+ bool removeFrom( QWidget *w );
+ QWidget *widget() const;
+ int index() const;
+
+private:
+ QWidget *wid;
+ int idx;
+
+};
+
+class QDesignerToolBar : public QToolBar
+{
+ Q_OBJECT
+
+public:
+ QDesignerToolBar( QMainWindow *mw );
+ QDesignerToolBar( QMainWindow *mw, Dock dock );
+ QPtrList<QAction> insertedActions() const { return actionList; }
+ void addAction( QAction *a );
+
+ void clear();
+ void installEventFilters( QWidget *w );
+ void insertAction( QWidget *w, QAction *a ) { actionMap.insert( w, a ); }
+ void insertAction( int index, QAction *a ) { actionList.insert( index, a ); }
+ void appendAction( QAction *a ) { actionList.append( a ); }
+ void removeAction( QAction *a ) { actionList.remove( a ); }
+ void reInsert();
+ void removeWidget( QWidget *w );
+
+protected:
+ bool eventFilter( QObject *, QEvent * );
+ void paintEvent( QPaintEvent * );
+#ifndef QT_NO_DRAGANDDROP
+ void dragEnterEvent( QDragEnterEvent * );
+ void dragMoveEvent( QDragMoveEvent * );
+ void dragLeaveEvent( QDragLeaveEvent * );
+ void dropEvent( QDropEvent * );
+#endif
+ void contextMenuEvent( QContextMenuEvent *e );
+ void mousePressEvent( QMouseEvent *e );
+ void mouseReleaseEvent( QMouseEvent *e );
+
+private slots:
+ void actionRemoved();
+
+private:
+ void drawIndicator( const QPoint &pos );
+ QPoint calcIndicatorPos( const QPoint &pos );
+ void buttonContextMenuEvent( QContextMenuEvent *e, QObject *o );
+ void buttonMousePressEvent( QMouseEvent *e, QObject *o );
+ void buttonMouseMoveEvent( QMouseEvent *e, QObject *o );
+ void buttonMouseReleaseEvent( QMouseEvent *e, QObject *o );
+ void doInsertWidget( const QPoint &p );
+ void findFormWindow();
+
+private:
+ QPoint lastIndicatorPos;
+ QWidget *insertAnchor;
+ bool afterAnchor;
+ QPtrList<QAction> actionList;
+ QMap<QWidget*, QAction*> actionMap;
+ QPoint dragStartPos;
+ QDesignerIndicatorWidget *indicator;
+ bool widgetInserting;
+ FormWindow *formWindow;
+
+};
+
+class QDesignerMenuBar : public QMenuBar
+{
+ Q_OBJECT
+ friend class QDesignerPopupMenu;
+
+ Q_PROPERTY( int itemNumber WRITE setItemNumber READ itemNumber )
+ Q_PROPERTY( QString itemText WRITE setItemText READ itemText )
+ Q_PROPERTY( QCString itemName WRITE setItemName READ itemName )
+
+public:
+ QDesignerMenuBar( QWidget *mw );
+
+ void setItemNumber( int num );
+ int itemNumber() const;
+ void setItemText( const QString &s );
+ QString itemText() const;
+ void setItemName( const QCString &s );
+ QCString itemName() const;
+
+protected:
+ void mousePressEvent( QMouseEvent *e );
+ void mouseMoveEvent( QMouseEvent *e );
+ void mouseReleaseEvent( QMouseEvent *e );
+ void contextMenuEvent( QContextMenuEvent *e );
+#ifndef QT_NO_DRAGANDDROP
+ void dragEnterEvent( QDragEnterEvent * );
+ void dragMoveEvent( QDragMoveEvent * );
+ void dragLeaveEvent( QDragLeaveEvent * );
+ void dropEvent( QDropEvent * );
+#endif
+
+private:
+ void drawIndicator( const QPoint &pos );
+ QPoint calcIndicatorPos( const QPoint &pos );
+ void findFormWindow();
+
+private:
+ int itemNum;
+ QPoint dragStartPos;
+ bool mousePressed;
+ QPoint lastIndicatorPos;
+ int insertAt;
+ QDesignerIndicatorWidget *indicator;
+ FormWindow *formWindow;
+ int oldPos;
+
+};
+
+class QDesignerPopupMenu : public QPopupMenu
+{
+ Q_OBJECT
+
+public:
+ QDesignerPopupMenu( QWidget *w );
+ QPtrList<QAction> insertedActions() const { return actionList; }
+ void addAction( QAction *a );
+ void reInsert();
+ void insertAction( int index, QAction *a ) { actionList.insert( index, a ); }
+ void removeAction( QAction *a ) { actionList.remove( a ); }
+
+protected:
+ void mousePressEvent( QMouseEvent *e );
+ void mouseMoveEvent( QMouseEvent *e );
+ void mouseReleaseEvent( QMouseEvent *e );
+ void contextMenuEvent( QContextMenuEvent *e );
+ void paintEvent( QPaintEvent * );
+#ifndef QT_NO_DRAGANDDROP
+ void dragEnterEvent( QDragEnterEvent * );
+ void dragMoveEvent( QDragMoveEvent * );
+ void dragLeaveEvent( QDragLeaveEvent * );
+ void dropEvent( QDropEvent * );
+#endif
+
+private slots:
+ void actionRemoved();
+ void createPopupMenu();
+
+private:
+ void drawIndicator( const QPoint &pos );
+ QPoint calcIndicatorPos( const QPoint &pos );
+ void findFormWindow();
+
+private:
+ QPoint lastIndicatorPos;
+ int insertAt;
+ QPtrList<QAction> actionList;
+ QPoint dragStartPos;
+ bool mousePressed;
+ QDesignerIndicatorWidget *indicator;
+ FormWindow *formWindow;
+ QGuardedPtr<QPopupMenu> popupMenu;
+ QPoint popupPos;
+ QPoint popupLocalPos;
+
+};
+
+class QDesignerIndicatorWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ QDesignerIndicatorWidget( QWidget *p )
+ : QWidget( p, "qt_dockwidget_internal" ) {
+ setBackgroundColor( red );
+ }
+
+};
+
+#endif
diff --git a/kommander/editor/actioneditor.ui b/kommander/editor/actioneditor.ui
new file mode 100644
index 00000000..733e5b29
--- /dev/null
+++ b/kommander/editor/actioneditor.ui
@@ -0,0 +1,201 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>ActionEditorBase</class>
+<include location="local" implDecl="in declaration">actioneditor.ui.h</include>
+<forward>class QListViewItem;</forward>
+<layoutdefaults spacing="6" margin="11"/>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>ActionEditorBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>206</width>
+ <height>227</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Edit Actions</string>
+ </property>
+ <property name="layoutMargin" stdset="0">
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>4</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>buttonNewAction</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Create new Action</string>
+ </property>
+ </widget>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>buttonDeleteAction</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Delete current Action</string>
+ </property>
+ </widget>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>buttonConnect</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image2</pixmap>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Connect current Action</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="ActionListView">
+ <property name="name">
+ <cstring>listActions</cstring>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>ActionListView</class>
+ <header location="local">actionlistview.h</header>
+ <sizehint>
+ <width>200</width>
+ <height>200</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>7</hordata>
+ <verdata>7</verdata>
+ </sizepolicy>
+ <pixmap>image3</pixmap>
+ <signal>selectionChanged( QListViewItem * )</signal>
+ <signal>currentChanged( QListViewItem * )</signal>
+ <signal>clicked( QListViewItem * )</signal>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="721">789cedd2310ac23014c6f13da778245b11ab29c114f1088aa3200eaf2f151daaa07510f1eef64553ac696fe04787fcf90dc9d03481cd7a09492aae35d647023ae0051277abaafb76b77808a93534df0ca67224e4180856e753c967d59cd5c48fb3e0d4b9269d7312a741e30c723a4e9b596333ce92930c69329cc8b9f7f3b7f42e886a1709bea70a3524142812172892325024182892f681bff2f1bf74a5bb2f19fe0f7ae439172f13a0a94f</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="661">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523232520022630543251d2e253d856405bffcbc54105b19c856360003103711c6b53006abc40a90649491482ac92863955146d6822ca387474619c9301419a03842825819245bd064129513b1cb242602512216994430d44bc4904984c8c1a5e032897a3019a8144c26518f800c92715864d0ec81ab4dc4701b924fb0850e8a4cad351700fe117ccc</data>
+ </image>
+ <image name="image2">
+ <data format="XPM.GZ" length="1142">789cbdd1cb6e82401480e1bd4f4174671a1c70504cd3055e60d5a6cb264d17330378451450b44ddfbd73ce19489abae8caa30bbefccc108641df7a7b7db6fa834e59896aad2cb51285d58f4f59767dff78faea745dd7d2ffa16739dd874ed7b694f592ef13b85ee8eb1e630e971c786898605d1baad803ee5a622d1a2623e0b125d619d165b4f6d212ebd990d3dab225d60ae93bbe2f8121d061ae923170451cf2340506868a18217d7d33be9104baba2a5cbb6d483767c0e1849b07a5c491437509f4c478423c0105673ef3815343c5187083544dfd34343501aad8610eb206c69ec3897364d25018ea03005e81c9a8a9b9a1a97b64a21f848c8169ca19c76fdd238e27637c4145149ec0c3b16fce5d4b4fd0d8b21d2aa2a770e2c496e91267b5a62228c46263cb2d955d4665af07b6cb753a1c8b6359ee2a2a34b9fe9d6c599cf5ac7f15985a2728977f96ab0e9fb62ccb1bbbc18a2028ffee564f9b709e5199d7347a850cce380b3a1d136a389d308cc2288aeefc7d6e97efc7ce0ff25f14ae</data>
+ </image>
+ <image name="image3">
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
+ </image>
+</images>
+<connections>
+ <connection language="C++">
+ <sender>listActions</sender>
+ <signal>currentChanged( QListViewItem * )</signal>
+ <receiver>ActionEditorBase</receiver>
+ <slot>currentActionChanged(QListViewItem*)</slot>
+ </connection>
+ <connection language="C++">
+ <sender>listActions</sender>
+ <signal>clicked( QListViewItem * )</signal>
+ <receiver>ActionEditorBase</receiver>
+ <slot>currentActionChanged(QListViewItem*)</slot>
+ </connection>
+ <connection language="C++">
+ <sender>listActions</sender>
+ <signal>selectionChanged( QListViewItem * )</signal>
+ <receiver>ActionEditorBase</receiver>
+ <slot>currentActionChanged(QListViewItem*)</slot>
+ </connection>
+ <connection language="C++">
+ <sender>buttonNewAction</sender>
+ <signal>clicked()</signal>
+ <receiver>ActionEditorBase</receiver>
+ <slot>newAction()</slot>
+ </connection>
+ <connection language="C++">
+ <sender>buttonConnect</sender>
+ <signal>clicked()</signal>
+ <receiver>ActionEditorBase</receiver>
+ <slot>connectionsClicked()</slot>
+ </connection>
+ <connection language="C++">
+ <sender>buttonDeleteAction</sender>
+ <signal>clicked()</signal>
+ <receiver>ActionEditorBase</receiver>
+ <slot>deleteAction()</slot>
+ </connection>
+ <slot access="protected" language="C++" returnType="void">init()</slot>
+ <slot access="protected" language="C++" returnType="void">destroy()</slot>
+ <slot access="protected" language="C++" returnType="void">connectionsClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">currentActionChanged( QListViewItem * )</slot>
+ <slot access="protected" language="C++" returnType="void">deleteAction()</slot>
+ <slot access="protected" language="C++" returnType="void">newAction()</slot>
+</connections>
+</UI>
diff --git a/kommander/editor/actioneditorimpl.cpp b/kommander/editor/actioneditorimpl.cpp
new file mode 100644
index 00000000..0d694250
--- /dev/null
+++ b/kommander/editor/actioneditorimpl.cpp
@@ -0,0 +1,261 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "actioneditorimpl.h"
+#include "formwindow.h"
+#include "metadatabase.h"
+#include "actionlistview.h"
+#include "connectioneditorimpl.h"
+#include "mainwindow.h"
+
+#include <qaction.h>
+#include <qlineedit.h>
+#include <qlabel.h>
+#include <qtoolbutton.h>
+#include <qlistview.h>
+#include <qcheckbox.h>
+#include <qpushbutton.h>
+#include <qpopupmenu.h>
+#include <qobjectlist.h>
+
+#include <klocale.h>
+
+ActionEditor::ActionEditor( QWidget* parent, const char* name, WFlags fl )
+ : ActionEditorBase( parent, name, fl ), currentAction( 0 ), formWindow( 0 )
+{
+ listActions->addColumn( i18n("Actions" ) );
+ setEnabled( false );
+ buttonConnect->setEnabled( false );
+
+ QPopupMenu *popup = new QPopupMenu( this );
+ popup->insertItem( i18n("New &Action" ), this, SLOT( newAction() ) );
+ popup->insertItem( i18n("New Action &Group" ), this, SLOT( newActionGroup() ) );
+ popup->insertItem( i18n("New &Dropdown Action Group" ), this, SLOT( newDropDownActionGroup() ) );
+ buttonNewAction->setPopup( popup );
+ buttonNewAction->setPopupDelay( 0 );
+
+ connect( listActions, SIGNAL( insertAction() ), this, SLOT( newAction() ) );
+ connect( listActions, SIGNAL( insertActionGroup() ), this, SLOT( newActionGroup() ) );
+ connect( listActions, SIGNAL( insertDropDownActionGroup() ), this, SLOT( newDropDownActionGroup() ) );
+ connect( listActions, SIGNAL( deleteAction() ), this, SLOT( deleteAction() ) );
+ connect( listActions, SIGNAL( connectAction() ), this, SLOT( connectionsClicked() ) );
+}
+
+void ActionEditor::closeEvent( QCloseEvent *e )
+{
+ emit hidden();
+ e->accept();
+}
+
+void ActionEditor::currentActionChanged( QListViewItem *i )
+{
+ buttonConnect->setEnabled( i != 0 );
+ if ( !i )
+ return;
+ currentAction = ( (ActionItem*)i )->action();
+ if ( !currentAction )
+ currentAction = ( (ActionItem*)i )->actionGroup();
+ if ( formWindow && currentAction )
+ formWindow->setActiveObject( currentAction );
+}
+
+void ActionEditor::deleteAction()
+{
+ if ( !currentAction )
+ return;
+
+ QListViewItemIterator it( listActions );
+ while ( it.current() ) {
+ if ( ( (ActionItem*)it.current() )->action() == currentAction ) {
+ formWindow->actionList().removeRef( currentAction );
+ delete currentAction;
+ QValueList<MetaDataBase::Connection> conns =
+ MetaDataBase::connections( formWindow, currentAction );
+ for ( QValueList<MetaDataBase::Connection>::Iterator it2 = conns.begin();
+ it2 != conns.end(); ++it2 )
+ MetaDataBase::removeConnection( formWindow, (*it2).sender, (*it2).signal,
+ (*it2).receiver, (*it2).slot );
+ delete it.current();
+ break;
+ } else if ( ( (ActionItem*)it.current() )->actionGroup() == currentAction ) {
+ formWindow->actionList().removeRef( currentAction );
+ delete currentAction;
+ QValueList<MetaDataBase::Connection> conns =
+ MetaDataBase::connections( formWindow, currentAction );
+ for ( QValueList<MetaDataBase::Connection>::Iterator it2 = conns.begin();
+ it2 != conns.end(); ++it2 )
+ MetaDataBase::removeConnection( formWindow, (*it2).sender, (*it2).signal,
+ (*it2).receiver, (*it2).slot );
+ delete it.current();
+ break;
+ }
+ ++it;
+ }
+
+ if ( formWindow )
+ formWindow->setActiveObject( formWindow->mainContainer() );
+}
+
+void ActionEditor::newAction()
+{
+ ActionItem *actionParent = (ActionItem*)listActions->selectedItem();
+ if ( actionParent ) {
+ if ( !actionParent->actionGroup() ||
+ !actionParent->actionGroup()->inherits( "QActionGroup" ) )
+ actionParent = (ActionItem*)actionParent->parent();
+ }
+
+ ActionItem *i = 0;
+ if ( actionParent )
+ i = new ActionItem( actionParent );
+ else
+ i = new ActionItem( listActions, (bool)false );
+ MetaDataBase::addEntry( i->action() );
+ QString n = "Action";
+ formWindow->unify( i->action(), n, true );
+ i->setText( 0, n );
+ i->action()->setName( n );
+ i->action()->setText( i->action()->name() );
+ if ( actionParent && actionParent->actionGroup() &&
+ actionParent->actionGroup()->usesDropDown() ) {
+ i->action()->setToggleAction( true );
+ MetaDataBase::setPropertyChanged( i->action(), "toggleAction", true );
+ }
+ MetaDataBase::setPropertyChanged( i->action(), "text", true );
+ MetaDataBase::setPropertyChanged( i->action(), "name", true );
+ listActions->setCurrentItem( i );
+ if ( !actionParent )
+ formWindow->actionList().append( i->action() );
+}
+
+void ActionEditor::newActionGroup()
+{
+ ActionItem *actionParent = (ActionItem*)listActions->selectedItem();
+ if ( actionParent ) {
+ if ( !actionParent->actionGroup() ||
+ !actionParent->actionGroup()->inherits( "QActionGroup" ) )
+ actionParent = (ActionItem*)actionParent->parent();
+ }
+
+ ActionItem *i = 0;
+ if ( actionParent )
+ i = new ActionItem( actionParent, true );
+ else
+ i = new ActionItem( listActions, true );
+
+ MetaDataBase::addEntry( i->actionGroup() );
+ MetaDataBase::setPropertyChanged( i->actionGroup(), "usesDropDown", true );
+ QString n = "ActionGroup";
+ formWindow->unify( i->action(), n, true );
+ i->setText( 0, n );
+ i->actionGroup()->setName( n );
+ i->actionGroup()->setText( i->actionGroup()->name() );
+ MetaDataBase::setPropertyChanged( i->actionGroup(), "text", true );
+ MetaDataBase::setPropertyChanged( i->actionGroup(), "name", true );
+ listActions->setCurrentItem( i );
+ i->setOpen( true );
+ if ( !actionParent )
+ formWindow->actionList().append( i->actionGroup() );
+}
+
+void ActionEditor::newDropDownActionGroup()
+{
+ newActionGroup();
+ ( (ActionItem*)listActions->currentItem() )->actionGroup()->setUsesDropDown( true );
+}
+
+void ActionEditor::setFormWindow( FormWindow *fw )
+{
+ listActions->clear();
+ formWindow = fw;
+ if ( !formWindow ||
+ !formWindow->mainContainer() ||
+ !formWindow->mainContainer()->inherits( "QMainWindow" ) ) {
+ setEnabled( false );
+ } else {
+ setEnabled( true );
+ for ( QAction *a = formWindow->actionList().first(); a; a = formWindow->actionList().next() ) {
+ ActionItem *i = 0;
+ if ( a->parent() && a->parent()->inherits( "QAction" ) )
+ continue;
+ i = new ActionItem( listActions, a );
+ i->setText( 0, a->name() );
+ i->setPixmap( 0, a->iconSet().pixmap() );
+ if ( a->inherits( "QActionGroup" ) ) {
+ insertChildActions( i );
+ }
+ }
+ if ( listActions->firstChild() ) {
+ listActions->setCurrentItem( listActions->firstChild() );
+ listActions->setSelected( listActions->firstChild(), true );
+ }
+ }
+}
+
+void ActionEditor::insertChildActions( ActionItem *i )
+{
+ if ( !i->actionGroup() || !i->actionGroup()->children() )
+ return;
+ QObjectListIt it( *i->actionGroup()->children() );
+ while ( it.current() ) {
+ QObject *o = it.current();
+ ++it;
+ if ( !o->inherits( "QAction" ) )
+ continue;
+ QAction *a = (QAction*)o;
+ ActionItem *i2 = new ActionItem( (QListViewItem*)i, a );
+ i->setOpen( true );
+ i2->setText( 0, a->name() );
+ i2->setPixmap( 0, a->iconSet().pixmap() );
+ if ( a->inherits( "QActionGroup" ) )
+ insertChildActions( i2 );
+ }
+}
+
+void ActionEditor::updateActionName( QAction *a )
+{
+ QListViewItemIterator it( listActions );
+ while ( it.current() ) {
+ if ( ( (ActionItem*)it.current() )->action() == a )
+ ( (ActionItem*)it.current() )->setText( 0, a->name() );
+ else if ( ( (ActionItem*)it.current() )->actionGroup() == a )
+ ( (ActionItem*)it.current() )->setText( 0, a->name() );
+ ++it;
+ }
+}
+
+void ActionEditor::updateActionIcon( QAction *a )
+{
+ QListViewItemIterator it( listActions );
+ while ( it.current() ) {
+ if ( ( (ActionItem*)it.current() )->action() == a )
+ ( (ActionItem*)it.current() )->setPixmap( 0, a->iconSet().pixmap() );
+ else if ( ( (ActionItem*)it.current() )->actionGroup() == a )
+ ( (ActionItem*)it.current() )->setPixmap( 0, a->iconSet().pixmap() );
+ ++it;
+ }
+}
+
+void ActionEditor::connectionsClicked()
+{
+ ConnectionEditor editor( formWindow->mainWindow(), currentAction, formWindow, formWindow );
+ editor.exec();
+}
+#include "actioneditorimpl.moc"
diff --git a/kommander/editor/actioneditorimpl.h b/kommander/editor/actioneditorimpl.h
new file mode 100644
index 00000000..9ecfaaa5
--- /dev/null
+++ b/kommander/editor/actioneditorimpl.h
@@ -0,0 +1,64 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef ACTIONEDITOR_H
+#define ACTIONEDITOR_H
+
+#include "actioneditor.h"
+
+class QAction;
+class FormWindow;
+class ActionItem;
+
+class ActionEditor : public ActionEditorBase
+{
+ Q_OBJECT
+
+public:
+ ActionEditor( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ void setFormWindow( FormWindow *fw );
+ void updateActionName( QAction *a );
+ void updateActionIcon( QAction *a );
+ FormWindow *form() const { return formWindow; }
+
+protected:
+ void closeEvent( QCloseEvent *e );
+
+protected slots:
+ void currentActionChanged( QListViewItem * );
+ void deleteAction();
+ void newAction();
+ void newActionGroup();
+ void newDropDownActionGroup();
+ void connectionsClicked();
+
+signals:
+ void hidden();
+
+private:
+ void insertChildActions( ActionItem *i );
+
+private:
+ QAction *currentAction;
+ FormWindow *formWindow;
+
+};
+
+#endif // ACTIONEDITOR_H
diff --git a/kommander/editor/actionlistview.cpp b/kommander/editor/actionlistview.cpp
new file mode 100644
index 00000000..0db57f76
--- /dev/null
+++ b/kommander/editor/actionlistview.cpp
@@ -0,0 +1,111 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "actionlistview.h"
+#include <qdragobject.h>
+#include <qheader.h>
+
+#include <klocale.h>
+
+ActionListView::ActionListView( QWidget *parent, const char *name )
+ : QListView( parent, name )
+{
+ header()->setStretchEnabled( true );
+ setRootIsDecorated( true );
+ setSorting( -1 );
+ connect( this, SIGNAL( contextMenuRequested( QListViewItem *, const QPoint &, int ) ),
+ this, SLOT( rmbMenu( QListViewItem *, const QPoint & ) ) );
+}
+
+ActionItem::ActionItem( QListView *lv, QAction *ac )
+ : QListViewItem( lv ), a( 0 ), g( 0 )
+{
+ if ( ac->inherits( "QActionGroup" ) )
+ g = (QDesignerActionGroup*)ac;
+ else
+ a = (QDesignerAction*)ac;
+ setDragEnabled( true );
+}
+
+ActionItem::ActionItem( QListViewItem *i, QAction *ac )
+ : QListViewItem( i ), a( 0 ), g( 0 )
+{
+ if ( ac->inherits( "QActionGroup" ) )
+ g = (QDesignerActionGroup*)ac;
+ else
+ a = (QDesignerAction*)ac;
+ setDragEnabled( true );
+ moveToEnd();
+}
+
+void ActionItem::moveToEnd()
+{
+ QListViewItem *i = this;
+ while ( i->nextSibling() )
+ i = i->nextSibling();
+ if ( i != this )
+ moveItem( i );
+}
+
+QDragObject *ActionListView::dragObject()
+{
+ ActionItem *i = (ActionItem*)currentItem();
+ if ( !i )
+ return 0;
+ QStoredDrag *drag = 0;
+ if ( i->action() ) {
+ drag = new QStoredDrag( "application/x-designer-actions", viewport() );
+ QString s = QString::number( (long)i->action() ); // #### huha, that is evil
+ drag->setEncodedData( QCString( s.latin1() ) );
+ drag->setPixmap( i->action()->iconSet().pixmap() );
+ } else {
+ drag = new QStoredDrag( "application/x-designer-actiongroup", viewport() );
+ QString s = QString::number( (long)i->actionGroup() ); // #### huha, that is evil
+ drag->setEncodedData( QCString( s.latin1() ) );
+ drag->setPixmap( i->actionGroup()->iconSet().pixmap() );
+ }
+ return drag;
+}
+
+void ActionListView::rmbMenu( QListViewItem *i, const QPoint &p )
+{
+ QPopupMenu *popup = new QPopupMenu( this );
+ popup->insertItem( i18n("New &Action" ), 0 );
+ popup->insertItem( i18n("New Action &Group" ), 1 );
+ popup->insertItem( i18n("New &Dropdown Action Group" ), 2 );
+ if ( i ) {
+ popup->insertSeparator();
+ popup->insertItem( i18n("&Connect Action..." ), 3 );
+ popup->insertSeparator();
+ popup->insertItem( i18n("Delete Action" ), 4 );
+ }
+ int res = popup->exec( p );
+ if ( res == 0 )
+ emit insertAction();
+ else if ( res == 1 )
+ emit insertActionGroup();
+ else if ( res == 2 )
+ emit insertDropDownActionGroup();
+ else if ( res == 3 )
+ emit connectAction();
+ else if ( res == 4 )
+ emit deleteAction();
+}
+#include "actionlistview.moc"
diff --git a/kommander/editor/actionlistview.h b/kommander/editor/actionlistview.h
new file mode 100644
index 00000000..33709068
--- /dev/null
+++ b/kommander/editor/actionlistview.h
@@ -0,0 +1,75 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef ACTIONLISTVIEW_H
+#define ACTIONLISTVIEW_H
+
+#include <qlistview.h>
+#include "actiondnd.h"
+
+class ActionItem : public QListViewItem
+{
+public:
+ ActionItem( QListView *lv, bool group )
+ : QListViewItem( lv ),
+ a( group ? 0 : new QDesignerAction( 0 ) ),
+ g( group ? new QDesignerActionGroup( 0 ) : 0 ) { setDragEnabled( TRUE ); }
+ ActionItem( QListView *lv, QAction *ac );
+ ActionItem( QListViewItem *i, QAction *ac );
+ ActionItem( ActionItem *parent, bool group = FALSE )
+ : QListViewItem( parent ),
+ a( group ? 0 : new QDesignerAction( parent->actionGroup() ) ),
+ g( group ? new QDesignerActionGroup( parent->actionGroup() ) : 0 ) { setDragEnabled( TRUE ); moveToEnd(); }
+
+ QDesignerAction *action() const { return a; }
+ QDesignerActionGroup *actionGroup() const { return g; }
+
+private:
+ void moveToEnd();
+
+private:
+ QDesignerAction *a;
+ QDesignerActionGroup *g;
+
+};
+
+class ActionListView : public QListView
+{
+ Q_OBJECT
+
+public:
+ ActionListView( QWidget *parent = 0, const char *name = 0 );
+
+protected:
+ QDragObject *dragObject();
+
+private slots:
+ void rmbMenu( QListViewItem *i, const QPoint &p );
+
+signals:
+ void insertAction();
+ void insertActionGroup();
+ void insertDropDownActionGroup();
+ void deleteAction();
+ void connectAction();
+
+};
+
+#endif
diff --git a/kommander/editor/asciivalidator.cpp b/kommander/editor/asciivalidator.cpp
new file mode 100644
index 00000000..776e6e9f
--- /dev/null
+++ b/kommander/editor/asciivalidator.cpp
@@ -0,0 +1,77 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "asciivalidator.h"
+
+#include <qstring.h>
+
+AsciiValidator::AsciiValidator( QObject * parent, const char *name )
+ : QValidator( parent, name ), functionName( false )
+{
+}
+
+AsciiValidator::AsciiValidator( bool funcName, QObject * parent, const char *name )
+ : QValidator( parent, name ), functionName( funcName )
+{
+}
+
+AsciiValidator::AsciiValidator( const QString &allow, QObject * parent, const char *name )
+ : QValidator( parent, name ), functionName( false ), allowedChars( allow )
+{
+}
+
+AsciiValidator::~AsciiValidator()
+{
+}
+
+QValidator::State AsciiValidator::validate( QString &s, int & ) const
+{
+ bool inParen = false;
+ if ( !s.isEmpty() && s[0].row() == 0 && s[0].cell() >= '0' && s[0].cell() <= '9' ) {
+ s[0] = '_';
+ }
+ for ( int i = 0; i < (int) s.length(); i++ ) {
+ uchar r = s[i].row();
+ uchar c = s[i].cell();
+ if ( functionName && inParen ) {
+ if ( c != ')' )
+ continue;
+ s.truncate( i + 1 );
+ return QValidator::Acceptable;
+ }
+ if ( r == 0 && ( ( c >= '0' && c <= '9' ) ||
+ ( c >= 'a' && c <= 'z' ) ||
+ ( c >= 'A' && c <= 'Z' ) ) )
+ continue;
+ if ( functionName ) {
+ if ( c == '(' ) {
+ inParen = true;
+ continue;
+ }
+ }
+
+ if ( allowedChars.find( s[ i ] ) != -1 )
+ continue;
+
+ s[i] = '_';
+ }
+ return QValidator::Acceptable;
+}
+#include "asciivalidator.moc"
diff --git a/kommander/editor/asciivalidator.h b/kommander/editor/asciivalidator.h
new file mode 100644
index 00000000..50d273c2
--- /dev/null
+++ b/kommander/editor/asciivalidator.h
@@ -0,0 +1,46 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef ASCIIVALIDATOR_H
+#define ASCIIVALIDATOR_H
+
+
+#include <qvalidator.h>
+
+
+class AsciiValidator: public QValidator
+{
+ Q_OBJECT
+public:
+ AsciiValidator( QObject * parent, const char *name = 0 );
+ AsciiValidator( bool funcName, QObject * parent, const char *name = 0 );
+ AsciiValidator( const QString &allow, QObject * parent, const char *name = 0 );
+ ~AsciiValidator();
+
+ QValidator::State validate( QString &, int & ) const;
+
+private:
+ bool functionName;
+ QString allowedChars;
+
+};
+
+
+#endif
diff --git a/kommander/editor/assistproc.cpp b/kommander/editor/assistproc.cpp
new file mode 100644
index 00000000..58ac4f78
--- /dev/null
+++ b/kommander/editor/assistproc.cpp
@@ -0,0 +1,74 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "assistproc.h"
+
+AssistProc::AssistProc( QObject *parent, const char *name, const QString &path )
+ : QProcess( parent, name )
+{
+ assistantPath = path;
+ connect( this, SIGNAL(readyReadStdout()), this, SLOT(processOutput()) );
+ connect( this, SIGNAL(readyReadStderr()), this, SLOT(processErrOutput()) );
+}
+
+AssistProc::~AssistProc()
+{
+ tryTerminate();
+ QTimer::singleShot( 5000, this, SLOT(kill())); // If busy, kill in 5 sec...
+}
+
+bool AssistProc::run( const QString &path )
+{
+ if ( !path.isEmpty() )
+ assistantPath = path;
+
+ clearArguments();
+ addArgument( assistantPath );
+ addArgument( "-stdin" );
+
+ if ( !start() ) {
+ qWarning( "Assistant [exe]: Couldn't start \'%s\', please check path.", assistantPath.latin1() );
+ return false;
+ }
+ return true;
+}
+
+bool AssistProc::sendRequest( const QString &data )
+{
+ if ( isRunning() ) {
+ writeToStdin( data );
+ } else {
+ if ( run() ) // If not running, try to start
+ writeToStdin( data ); // and display requested page.
+ else
+ return false;
+ }
+ return true;
+}
+
+void AssistProc::processOutput()
+{
+ qWarning( "Assistant [out]: %s", readStdout().data() );
+}
+
+void AssistProc::processErrOutput()
+{
+ qWarning( "Assistant [err]: %s", readStderr().data() );
+}
+#include "assistproc.moc"
diff --git a/kommander/editor/assistproc.h b/kommander/editor/assistproc.h
new file mode 100644
index 00000000..1f584daf
--- /dev/null
+++ b/kommander/editor/assistproc.h
@@ -0,0 +1,47 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef ASSISTPROC_H
+#define ASSISTPROC_H
+
+#include <qprocess.h>
+#include <qtimer.h>
+#include <qsocket.h>
+#include <qstring.h>
+
+class AssistProc : public QProcess
+{
+ Q_OBJECT
+public:
+ AssistProc( QObject *parent=0, const char * name = 0, const QString &path = QString::null );
+ ~AssistProc();
+ bool run( const QString &path = QString::null );
+
+public slots:
+ bool sendRequest( const QString &data );
+
+private slots:
+ void processOutput();
+ void processErrOutput();
+
+private:
+ QString assistantPath;
+};
+
+#endif // ASSISTPROC_H
diff --git a/kommander/editor/assoctexteditor.ui b/kommander/editor/assoctexteditor.ui
new file mode 100644
index 00000000..e3258b73
--- /dev/null
+++ b/kommander/editor/assoctexteditor.ui
@@ -0,0 +1,222 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>AssocTextEditorBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>AssocTextEditorBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>627</width>
+ <height>457</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Edit Text</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Widget:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>widgetsComboBox</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>widgetsComboBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>3</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>treeWidgetButton</cstring>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Text for:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>stateComboBox</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>stateComboBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>2</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox" row="2" column="0">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Insert</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>functionButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Function...</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Wi&amp;dget:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>widgetComboBox</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>widgetComboBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>3</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>filePushButton</cstring>
+ </property>
+ <property name="text">
+ <string>Fi&amp;le...</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QFrame" row="1" column="0">
+ <property name="name">
+ <cstring>editorFrame</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>Box</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>AssocTextEditorBase</sender>
+ <signal>destroyed(QObject*)</signal>
+ <receiver>AssocTextEditorBase</receiver>
+ <slot>AssocTextEditorBase_destroyed(QObject*)</slot>
+ </connection>
+</connections>
+<slots>
+ <slot>AssocTextEditorBase_destroyed(QObject*)</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/editor/assoctexteditorimpl.cpp b/kommander/editor/assoctexteditorimpl.cpp
new file mode 100644
index 00000000..25ac7f30
--- /dev/null
+++ b/kommander/editor/assoctexteditorimpl.cpp
@@ -0,0 +1,506 @@
+/***************************************************************************
+ assoctexteditorimpl.cpp - Associated text editor implementation
+ -------------------
+ copyright : (C) 2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ (C) 2006 Andras Mantia <amantia@kde.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+/* KDE INCLUDES */
+#include <klocale.h>
+#include <kfiledialog.h>
+#include <kmessagebox.h>
+#include <kglobal.h>
+#include <kglobalsettings.h>
+#include <kiconloader.h>
+#include <kpushbutton.h>
+#include <ktextedit.h>
+#include <kdebug.h>
+#include <kpopupmenu.h>
+#include <kactioncollection.h>
+#include <kdebug.h>
+
+#include <ktexteditor/view.h>
+#include <ktexteditor/editorchooser.h>
+#include <ktexteditor/editinterface.h>
+#include <ktexteditor/viewcursorinterface.h>
+#include <ktexteditor/highlightinginterface.h>
+#include <ktexteditor/popupmenuinterface.h>
+#include <ktexteditor/undointerface.h>
+
+#include <kparts/partmanager.h>
+
+/* QT INCLUDES */
+#include <qstringlist.h>
+#include <qmetaobject.h>
+#include <qcombobox.h>
+#include <qstring.h>
+#include <qfile.h>
+#include <qobject.h>
+#include <qobjectlist.h>
+#include <qtimer.h>
+#include <qevent.h>
+#include <qvaluelist.h>
+
+/* OTHER INCLUDES */
+#include <cstdio>
+#include "assoctexteditorimpl.h"
+#include "kommanderwidget.h"
+#include "formwindow.h"
+#include "propertyeditor.h"
+#include "command.h"
+#include "metadatabase.h"
+#include "choosewidgetimpl.h"
+#include "functionsimpl.h"
+
+QValueList<QWidget *> openedWidgets;
+
+AssocTextEditor::AssocTextEditor(QWidget *a_widget, FormWindow* a_form,
+ PropertyEditor* a_property, KParts::PartManager *partManager, QWidget *a_parent, const char *a_name, bool a_modal)
+ : AssocTextEditorBase(a_parent, a_name, a_modal)
+{
+ // text editor
+/* associatedTextEdit->setFont(KGlobalSettings::fixedFont());
+ associatedTextEdit->setTabStopWidth(associatedTextEdit->fontMetrics().maxWidth() * 3);
+ associatedTextEdit->setTextFormat(Qt::PlainText);*/
+
+ // icon for non-empty scripts
+ scriptPixmap = KGlobal::iconLoader()->loadIcon("source", KIcon::Small);
+
+ // signals and slots connections
+ m_formWindow = a_form;
+ m_propertyEditor = a_property;
+ m_widget = a_widget;
+
+ // list of widgets that can be edited
+ buildWidgetList();
+ for (int i=0; i<widgetsComboBox->count(); i++)
+ if (widgetFromString(widgetsComboBox->text(i)) == m_widget)
+ {
+ widgetsComboBox->setCurrentItem(i);
+ break;
+ }
+
+ doc = KTextEditor::createDocument ("libkatepart", a_parent, "KTextEditor::Document");
+ QGridLayout *layout = new QGridLayout(editorFrame, 1, 1);
+ view = doc->createView(editorFrame);
+ layout->addWidget(view, 1,1);
+ partManager->addPart(doc, true);
+
+ //trick to import all the KatePart actions into the dialog
+ KPopupMenu *invisiblePopup = new KPopupMenu(this);
+ KActionCollection *ac = view->actionCollection();
+ uint count = ac->count();
+ for (uint i = 0; i < count; i++)
+ {
+ ac->action(i)->plug(invisiblePopup);
+ }
+
+ //add those KatePart actions to a popup menu that are important
+ KPopupMenu *popup = new KPopupMenu(this);
+ KAction *a = view->actionCollection()->action("edit_undo");
+ if (a)
+ a->plug(popup);
+ a = view->actionCollection()->action("edit_redo");
+ if (a)
+ a->plug(popup);
+ popup->insertSeparator();
+ a = view->actionCollection()->action("edit_find");
+ if (a)
+ a->plug(popup);
+ a = view->actionCollection()->action("edit_find_next");
+ if (a)
+ a->plug(popup);
+ a = view->actionCollection()->action("edit_find_prev");
+ if (a)
+ a->plug(popup);
+ a = view->actionCollection()->action("edit_replace");
+ if (a)
+ a->plug(popup);
+ popup->insertSeparator();
+ a = view->actionCollection()->action("edit_cut");
+ if (a)
+ a->plug(popup);
+ a = view->actionCollection()->action("edit_copy");
+ if (a)
+ a->plug(popup);
+ a = view->actionCollection()->action("edit_paste");
+ if (a)
+ a->plug(popup);
+ readOnlyAction = view->actionCollection()->action("tools_toggle_write_lock");
+ popup->insertSeparator();
+ highlightPopup = new KPopupMenu(popup);
+ connect(highlightPopup, SIGNAL(activated(int)), SLOT(slotHighlightingChanged(int)));
+
+ popup->insertItem(i18n("&Highlighting"), highlightPopup);
+
+ KTextEditor::PopupMenuInterface *popupIf = dynamic_cast<KTextEditor::PopupMenuInterface *>(view);
+ popupIf->installPopup(popup);
+
+ associatedTextEdit = dynamic_cast<KTextEditor::EditInterface*>(doc);
+ readOnly = true;
+ if (readOnlyAction)
+ readOnlyAction->activate();
+ setWidget(a_widget);
+
+ connect(doc, SIGNAL(textChanged()), SLOT(textEditChanged()));
+ connect(widgetsComboBox, SIGNAL(activated(int)), SLOT(widgetChanged(int)));
+ connect(stateComboBox, SIGNAL(activated(int)), SLOT(stateChanged(int)));
+ connect(filePushButton, SIGNAL(clicked()), SLOT(insertFile()));
+ connect(functionButton, SIGNAL(clicked()), SLOT(insertFunction()));
+ connect(widgetComboBox, SIGNAL(activated(int)), SLOT(insertWidgetName(int)));
+ connect(treeWidgetButton, SIGNAL(clicked()), SLOT(selectWidget()));
+
+ view->setFocus();
+}
+
+AssocTextEditor::~AssocTextEditor()
+{
+ save();
+ delete doc;
+ if (!readOnly)
+ openedWidgets.remove(m_widget);
+}
+
+void AssocTextEditor::setWidget(QWidget *a_widget)
+{
+ KommanderWidget *a_atw = dynamic_cast<KommanderWidget *>(a_widget);
+ if (!a_widget || !a_atw)
+ return;
+
+
+ if (!readOnly)
+ openedWidgets.remove(m_widget);
+ if (readOnly)
+ {
+ if (readOnlyAction)
+ readOnlyAction->activate();
+ readOnly = false;
+ setCaption(i18n("Edit text"));
+ }
+
+ m_widget = a_widget;
+ m_states = a_atw->states();
+ m_populationText = a_atw->populationText();
+
+ // list of states of current widget (plus population text)
+ stateComboBox->clear();
+ stateComboBox->insertStringList(a_atw->displayStates());
+ stateComboBox->insertItem("population");
+
+ // set states and population scripts
+ QStringList at = a_atw->associatedText();
+ m_atdict.clear();
+ QStringList::iterator at_it = at.begin();
+ for(QStringList::ConstIterator s_it = m_states.begin(); s_it != m_states.end(); ++s_it)
+ {
+ if(at_it != at.end())
+ {
+ m_atdict[(*s_it)] = (*at_it);
+ ++at_it;
+ }
+ else
+ m_atdict[(*s_it)] = QString::null;
+ }
+ m_populationText = a_atw->populationText();
+
+ // show pixmaps for nonempty scripts
+ int m_initialization = -1;
+ int p_population = stateComboBox->count()-1;
+ int active = -1;
+ for (int i = 0; i < p_population; i++)
+ {
+ if (!m_atdict[stateComboBox->text(i)].isEmpty())
+ {
+ stateComboBox->changeItem(scriptPixmap, stateComboBox->text(i), i);
+ if (active == -1) active = i;
+ }
+ if (stateComboBox->text(i) == "initialization")
+ m_initialization = i;
+ }
+ if (!m_populationText.isEmpty())
+ {
+ stateComboBox->changeItem(scriptPixmap, stateComboBox->text(p_population), p_population);
+ if (active == -1) active = p_population;
+ }
+ if (active == -1 && m_initialization != -1)
+ {
+ active = m_initialization;
+ }
+ if (active == -1) active = 0;
+
+ // initial text for initial state
+ stateComboBox->setCurrentItem(active);
+ m_currentState = stateComboBox->currentText();
+ stateChanged(active);
+
+ KTextEditor::UndoInterface *undoIf = dynamic_cast<KTextEditor::UndoInterface*>(doc);
+ undoIf->clearUndo();
+
+
+ if (openedWidgets.contains(m_widget))
+ {
+ if (readOnlyAction && !readOnly)
+ readOnlyAction->activate();
+ setCaption(i18n("Edit text - read only mode"));
+ readOnly = true;
+ }
+ else
+ {
+ openedWidgets.append(m_widget);
+ }
+
+}
+
+void AssocTextEditor::save() const
+{
+ KommanderWidget *atw = dynamic_cast<KommanderWidget *>(m_widget);
+ if (!atw)
+ return;
+
+ if (atw->associatedText() != associatedText())
+ {
+ QString text = i18n("Set the \'text association\' of \'%1\'").arg(m_widget->name());
+ SetPropertyCommand *cmd = new SetPropertyCommand(text, m_formWindow,
+ m_widget, m_propertyEditor, "associations", atw->associatedText(),
+ associatedText(), QString::null, QString::null, false);
+ cmd->execute();
+ m_formWindow->commandHistory()->addCommand(cmd);
+ MetaDataBase::setPropertyChanged(m_widget, "associations", true);
+ }
+ if (atw->populationText() != populationText())
+ {
+ QString text = i18n("Set the \'population text\' of \'%1\'").arg(m_widget->name());
+ SetPropertyCommand *cmd = new SetPropertyCommand(text, m_formWindow, m_widget,
+ m_propertyEditor, "populationText", atw->populationText(),
+ populationText(), QString::null, QString::null, false);
+ cmd->execute();
+ m_formWindow->commandHistory()->addCommand(cmd);
+ MetaDataBase::setPropertyChanged(m_widget, "populationText", true);
+ }
+}
+
+
+QStringList AssocTextEditor::associatedText() const
+{
+ QStringList at;
+ for(QStringList::ConstIterator it = m_states.begin(); it != m_states.end(); ++it)
+ at.append(m_atdict[(*it)]);
+ return at;
+}
+
+QString AssocTextEditor::populationText() const
+{
+ return m_populationText;
+}
+
+QStringList AssocTextEditor::buildWidgetList()
+{
+ QStringList widgetList;
+ QObject* thisObject = m_formWindow->mainContainer();
+ QObjectList *objectList = thisObject->queryList();
+ objectList->prepend(thisObject);
+
+ for (QObjectListIt it(*objectList); it.current(); ++it)
+ {
+ // There is a warning message with the property() function if it does not exist.
+ // Verify the property exists with the meta information first */
+ bool pExists = false;
+ QMetaObject *metaObj = it.current()->metaObject();
+ if(metaObj)
+ {
+ int id = metaObj->findProperty("KommanderWidget", true);
+ const QMetaProperty *metaProp = metaObj->property(id, true);
+ if(metaProp && metaProp->isValid())
+ pExists = true;
+ }
+ if(pExists)
+ {
+ QVariant flag = (it.current())->property("KommanderWidget");
+ if(flag.isValid() && !(QString(it.current()->name()).startsWith("qt_")))
+ {
+ widgetList.append( widgetToString( (QWidget*)it.current()) );
+ m_widgetList.insert(it.current()->name(), (QWidget*)it.current());
+ }
+ }
+ }
+ delete objectList;
+
+ widgetList.sort();
+ widgetComboBox->clear();
+ widgetComboBox->insertStringList(widgetList);
+ widgetsComboBox->clear();
+ widgetsComboBox->insertStringList(widgetList);
+ return widgetList;
+}
+
+void AssocTextEditor::stateChanged(int a_index)
+{
+ m_currentState = stateComboBox->text(a_index);
+ if (a_index == stateComboBox->count() - 1)
+ associatedTextEdit->setText(m_populationText);
+ else
+ associatedTextEdit->setText(m_atdict[m_currentState]);
+ KTextEditor::ViewCursorInterface *viewCursorIf = dynamic_cast<KTextEditor::ViewCursorInterface*>(view);
+ viewCursorIf->setCursorPositionReal(0, 0);
+ highlightPopup->clear();
+ QString hlType = "Kommander (old parser)";
+ if (useInternalParser())
+ hlType = "Kommander (new parser)";
+ KTextEditor::HighlightingInterface *hlIf = dynamic_cast<KTextEditor::HighlightingInterface*>(doc);
+ if (hlIf)
+ {
+ uint hlCount = hlIf->hlModeCount();
+ for (uint i = 0; i < hlCount; i++)
+ {
+ if (hlIf->hlModeSectionName(i) == "Scripts")
+ highlightPopup->insertItem(hlIf->hlModeName(i), i);
+ if (hlIf->hlModeName(i).contains(hlType, false) > 0)
+ {
+ hlIf->setHlMode(i);
+ highlightPopup->setItemChecked(i, true);
+ oldHlMode = i;
+ }
+ }
+ }
+
+}
+
+void AssocTextEditor::textEditChanged()
+{
+ if (m_currentState == "population")
+ m_populationText = associatedTextEdit->text();
+ m_atdict[m_currentState] = associatedTextEdit->text();
+ int index = stateComboBox->currentItem();
+ if (associatedTextEdit->text().isEmpty())
+ stateComboBox->changeItem(QPixmap(), stateComboBox->currentText(), index);
+ else if (!stateComboBox->pixmap(index) || stateComboBox->pixmap(index)->isNull())
+ stateComboBox->changeItem(scriptPixmap, stateComboBox->currentText(), index);
+}
+
+void AssocTextEditor::widgetChanged(int index)
+{
+ save();
+ setWidget( widgetFromString( widgetsComboBox->text(index)) ) ;
+}
+
+void AssocTextEditor::selectWidget()
+{
+ ChooseWidget cDialog(this);
+ cDialog.setWidget(m_formWindow->mainContainer());
+ if (cDialog.exec()) {
+ QString newWidget = cDialog.selection();
+ for (int i = 0; i<widgetsComboBox->count(); i++)
+ if (widgetsComboBox->text(i) == newWidget) {
+ widgetsComboBox->setCurrentItem(i);
+ widgetChanged(i);
+ break;
+ }
+ }
+}
+
+
+
+void AssocTextEditor::insertAssociatedText(const QString& a_text)
+{
+ uint line, col;
+ KTextEditor::ViewCursorInterface *viewCursorIf = dynamic_cast<KTextEditor::ViewCursorInterface*>(view);
+ viewCursorIf->cursorPositionReal(&line, &col);
+ associatedTextEdit->insertText(line, col, a_text);
+}
+
+void AssocTextEditor::insertFile()
+{
+ QString fileName = KFileDialog::getOpenFileName();
+
+ if(fileName.isEmpty())
+ return;
+
+ QFile insertFile(fileName);
+ if(!insertFile.open(IO_ReadOnly))
+ {
+ KMessageBox::error( this, i18n("<qt>Cannot open file<br><b>%1</b></qt").arg( fileName ) );
+ return;
+ }
+ QTextStream insertStream(&insertFile);
+ QString insertText = insertStream.read();
+ insertAssociatedText(insertText);
+ insertFile.close();
+}
+
+void AssocTextEditor::insertWidgetName(int index)
+{
+ QString prefix;
+ if (!useInternalParser())
+ prefix = QString(QChar(ESCCHAR));
+ insertAssociatedText(prefix + widgetToString(widgetFromString(widgetComboBox->text(index)), false));
+}
+
+void AssocTextEditor::insertFunction()
+{
+ FunctionsDialog pDialog(this, m_widgetList, useInternalParser(), 0);
+ if (pDialog.exec())
+ insertAssociatedText(pDialog.functionText());
+}
+
+QString AssocTextEditor::widgetToString(QWidget* widget, bool formatted)
+{
+ if (!widget)
+ return QString::null;
+ else if (formatted)
+ return QString("%1 (%2)").arg(widget->name()).arg(widget->className());
+ else
+ return widget->name();
+}
+
+QWidget* AssocTextEditor::widgetFromString(const QString& name)
+{
+ QString realname = name;
+ int i = realname.find(' ');
+ if (i != -1)
+ realname.truncate(i);
+ return m_widgetList[realname];
+}
+
+void AssocTextEditor::slotHighlightingChanged(int mode)
+{
+ highlightPopup->setItemChecked(oldHlMode, false);
+ KTextEditor::HighlightingInterface *hlIf = dynamic_cast<KTextEditor::HighlightingInterface*>(doc);
+ if (hlIf)
+ hlIf->setHlMode(mode);
+ highlightPopup->setItemChecked(mode, true);
+ oldHlMode = mode;
+}
+
+bool AssocTextEditor::useInternalParser()
+{
+ QString s = "";
+ int line = -1;
+ while (s.isEmpty() && line < (int)associatedTextEdit->numLines())
+ {
+ line++;
+ s = associatedTextEdit->textLine(line);
+ }
+ s = s.stripWhiteSpace();
+ if (s.startsWith("#!") && s != "#!kommander")
+ return false; //code is written in external script, old parser is used
+ if (KommanderWidget::useInternalParser || s == "#!kommander")
+ return true;
+ return false;
+}
+
+void AssocTextEditor::closeEvent ( QCloseEvent * e )
+{
+ deleteLater();
+ e->accept();
+}
+
+#include "assoctexteditorimpl.moc"
diff --git a/kommander/editor/assoctexteditorimpl.h b/kommander/editor/assoctexteditorimpl.h
new file mode 100644
index 00000000..65879cef
--- /dev/null
+++ b/kommander/editor/assoctexteditorimpl.h
@@ -0,0 +1,133 @@
+/***************************************************************************
+ assoctexteditorimpl.h - Associated text editor implementation
+ -------------------
+ copyright : (C) 2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ (C) 2006 Andras Mantia <amantia@kde.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef _HAVE_ASSOCTEXTEDITORIMPL_H_
+#define _HAVE_ASSOCTEXTEDITORIMPL_H_
+
+#include <qdict.h>
+#include <qstringlist.h>
+#include <qstring.h>
+#include <qwidget.h>
+#include <qobject.h>
+#include <qmap.h>
+#include <qptrvector.h>
+#include <qpixmap.h>
+
+
+#include "assoctexteditor.h"
+#include <kommanderwidget.h>
+
+class FormWindow;
+class PropertyEditor;
+
+namespace KTextEditor {
+ class EditInterface;
+ class Document;
+ class View;
+}
+
+namespace KParts{
+ class PartManager;
+}
+
+class KAction;
+class KPopupMenu;
+
+class AssocTextEditor : public AssocTextEditorBase
+{
+ Q_OBJECT
+public:
+ AssocTextEditor(QWidget*, FormWindow*, PropertyEditor*, KParts::PartManager *partManager, QWidget*, const char* = 0, bool = true);
+ ~AssocTextEditor();
+ // Set interface for given widget.
+ void setWidget(QWidget *);
+ // Save changes for current widget
+ void save() const;
+ // Return population text for current widget
+ QString populationText() const;
+ // Return associated text for current widget
+ QStringList associatedText() const;
+
+public slots:
+ // Current script text has changed - save it in m_atdict
+ void textEditChanged();
+ // Current widget has changed - store script and update interface
+ void widgetChanged(int);
+ // Current script has changed - store script and show new script
+ void stateChanged(int);
+ // Select widget via widget tree dialog
+ void selectWidget();
+
+ // Functions for script editing:
+
+ // Insert given text at cursor position for current widget and state
+ void insertAssociatedText(const QString&);
+ // Select file and insert its content at cursor position
+ void insertFile();
+ // Open function browser and insert chosen function at cursor position
+ void insertFunction();
+ // Insert selected function at cursor position
+ void insertWidgetName(int);
+
+protected:
+ virtual void closeEvent(QCloseEvent * e);
+
+protected slots:
+
+ void slotHighlightingChanged(int mode);
+
+private:
+ bool useInternalParser();
+
+ // Current widget
+ QWidget *m_widget;
+ KommanderWidget* m_kommanderWidget;
+//FIXME: could it be done more cleanly?
+ // Current form and property editor
+ FormWindow* m_formWindow;
+ PropertyEditor* m_propertyEditor;
+ // Current state
+ QString m_currentState;
+ // List of states for current widget
+ QStringList m_states;
+ // Current widget list
+ QDict<QWidget> m_widgetList;
+ // Dictionary for current widget; contains pairs (state, script associated with current state)
+ QMap<QString, QString> m_atdict;
+ // Current population text
+ QString m_populationText;
+ // Non-enmpty script pixmap
+ QPixmap scriptPixmap;
+
+ // Create list of all widgets on the same dialog as current widget
+ // Set store to true, to update m_widgetList;
+ QStringList buildWidgetList();
+ // Convert widget to string displayed in combos
+ // If formatted, return formatted string, else just widget's name
+ QString widgetToString(QWidget* widget, bool formatted = true);
+ // Conver combo string to widget
+ QWidget* widgetFromString(const QString& name);
+
+ KTextEditor::EditInterface *associatedTextEdit;
+ KTextEditor::Document *doc;
+ KTextEditor::View *view;
+ KPopupMenu *highlightPopup;
+ int oldHlMode;
+ bool readOnly;
+ KAction *readOnlyAction;
+};
+
+#endif
diff --git a/kommander/editor/choosewidget.ui b/kommander/editor/choosewidget.ui
new file mode 100644
index 00000000..809f38ea
--- /dev/null
+++ b/kommander/editor/choosewidget.ui
@@ -0,0 +1,150 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>ChooseWidgetBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>ChooseWidgetBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>431</width>
+ <height>390</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Choose Widget</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="2" column="0">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="KListView" row="0" column="0">
+ <property name="name">
+ <cstring>widgetView</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Find:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>nameEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<customwidgets>
+</customwidgets>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>ChooseWidgetBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>ChooseWidgetBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>klistview.h</includehint>
+</includehints>
+</UI>
diff --git a/kommander/editor/choosewidgetimpl.cpp b/kommander/editor/choosewidgetimpl.cpp
new file mode 100644
index 00000000..53580a6e
--- /dev/null
+++ b/kommander/editor/choosewidgetimpl.cpp
@@ -0,0 +1,128 @@
+ /***************************************************************************
+ choosewidgetimpl.cpp - dialog to choose widget
+ -------------------
+ begin : Thu 13 Apr 2004
+ copyright : (C) 2000 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+ /** KDE INCLUDES */
+#include <klistview.h>
+#include <klocale.h>
+
+/** QT INCLUDES */
+#include <qptrstack.h>
+#include <qobject.h>
+#include <qobjectlist.h>
+#include <qlineedit.h>
+#include "qmetaobject.h"
+
+/** OTHER INCLUDES */
+#include "choosewidgetimpl.h"
+#include "choosewidgetimpl.moc"
+
+ChooseWidget::ChooseWidget(QWidget* a_parent, const char* a_name, bool a_modal)
+ : ChooseWidgetBase(a_parent, a_name, a_modal)
+{
+ connect( nameEdit, SIGNAL(textChanged(const QString&)), SLOT(textChanged(const QString&)) );
+ connect( widgetView, SIGNAL(executed(QListViewItem*)), SLOT(selectedItem(QListViewItem*)));
+ widgetView->setFullWidth(true);
+ widgetView->addColumn(i18n("Widgets"));
+ widgetView->setRootIsDecorated(true);
+ nameEdit->setFocus();
+}
+
+ChooseWidget::~ChooseWidget()
+{
+
+}
+
+void ChooseWidget::setWidget(QWidget* w)
+{
+ widgetView->clear();
+ if (!w)
+ return;
+
+ QListViewItem* item;
+ QPtrStack<QWidget> p_widgets;
+ QPtrStack<QListViewItem> p_items;
+
+ item = new QListViewItem(widgetView, QString("%1 (%2)").arg(w->name()).arg(w->className()));
+ item->setOpen(true);
+
+ p_widgets.push(w);
+ p_items.push(item);
+
+ while (!p_widgets.isEmpty()) {
+ w = p_widgets.pop();
+ item = p_items.pop();
+ QObjectList *objectList = w->queryList(0, 0, true, false);
+ for (QObjectListIt it(*objectList); it.current(); ++it) {
+ QListViewItem* newItem = item;
+ if (isKommanderWidget(*it))
+ newItem = new QListViewItem(item, QString("%1 (%2)").arg((*it)->name()).arg((*it)->className()));
+ if ((*it)->children()) {
+ p_widgets.push((QWidget*)(*it));
+ p_items.push(newItem);
+ }
+ }
+ delete objectList;
+ }
+ if (widgetView->childCount()) {
+ widgetView->setCurrentItem(widgetView->firstChild());
+ widgetView->firstChild()->setSelected(true);
+ }
+}
+
+
+QString ChooseWidget::selection()
+{
+ if (widgetView->currentItem())
+ return widgetView->currentItem()->text(0);
+ else
+ return QString::null;
+}
+
+void ChooseWidget::textChanged(const QString& text)
+{
+ QListViewItem* item = widgetView->findItem(text, 0, Qt::BeginsWith);
+ if (item) {
+ widgetView->setCurrentItem(item);
+ widgetView->ensureItemVisible(item);
+ }
+}
+
+bool ChooseWidget::isKommanderWidget(QObject* w)
+{
+ bool pExists = false;
+ QMetaObject *metaObj = w->metaObject();
+ if (metaObj)
+ {
+ int id = metaObj->findProperty("KommanderWidget", true);
+ const QMetaProperty *metaProp = metaObj->property(id, true);
+ if (metaProp && metaProp->isValid())
+ pExists = true;
+ }
+ if (pExists)
+ {
+ QVariant flag = (w)->property("KommanderWidget");
+ if(flag.isValid() && !(QString(w->name()).startsWith("qt_")))
+ return true;
+ }
+ return false;
+}
+
+void ChooseWidget::selectedItem(QListViewItem* item)
+{
+ if (item)
+ accept();
+}
+
diff --git a/kommander/editor/choosewidgetimpl.h b/kommander/editor/choosewidgetimpl.h
new file mode 100644
index 00000000..877bcd07
--- /dev/null
+++ b/kommander/editor/choosewidgetimpl.h
@@ -0,0 +1,45 @@
+/***************************************************************************
+ choosewidgetimpl.h - dialog to choose widget
+ -------------------
+ begin : Thu 13 Apr 2004
+ copyright : (C) 2000 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_CHOOSEWIDGETIMPL_H_
+#define _HAVE_CHOOSEWIDGETIMPL_H_
+
+#include "choosewidget.h"
+
+class ChooseWidget : public ChooseWidgetBase
+{
+ Q_OBJECT
+public:
+ ChooseWidget(QWidget*, const char* = 0, bool=true);
+ ~ChooseWidget();
+ // Put current widget and all of its children in a tree
+ void setWidget(QWidget *);
+ // Return current widget
+ QString selection();
+
+public slots:
+ // Filter text changed - find matching widget
+ void textChanged(const QString&);
+ // Double clicked on listviwew
+ void selectedItem(QListViewItem *);
+private:
+ // Check if given widget is a Kommander widget
+ bool isKommanderWidget(QObject* w);
+
+};
+
+#endif
+
diff --git a/kommander/editor/command.cpp b/kommander/editor/command.cpp
new file mode 100644
index 00000000..b6bbe82c
--- /dev/null
+++ b/kommander/editor/command.cpp
@@ -0,0 +1,1838 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <scriptobject.h>
+#include "command.h"
+#include "formwindow.h"
+#include "widgetfactory.h"
+#include "propertyeditor.h"
+#include "metadatabase.h"
+#include "widgetdatabase.h"
+#include "mainwindow.h"
+#include "hierarchyview.h"
+#include "workspace.h"
+#include "actioneditorimpl.h"
+#include "actiondnd.h"
+#include "formfile.h"
+
+#include <qmap.h>
+#include <qfeatures.h>
+#include <qwidget.h>
+#include <qmetaobject.h>
+#include <qapplication.h>
+#include <qlayout.h>
+#include <qmessagebox.h>
+#include <qlistbox.h>
+#include <qiconview.h>
+#include <qmultilineedit.h>
+#include <qptrstack.h>
+#include <qheader.h>
+#ifndef QT_NO_TABLE
+#include <qtable.h>
+#endif
+#include <qaction.h>
+
+#include <klocale.h>
+
+
+CommandHistory::CommandHistory( int s )
+ : current( -1 ), steps( s ), savedAt( -1 )
+{
+ history.setAutoDelete( true );
+ modified = false;
+ compressedCommand = 0;
+}
+
+void CommandHistory::addCommand( Command *cmd, bool tryCompress )
+{
+ if ( tryCompress ) {
+ if ( !compressedCommand ||
+ compressedCommand->type() != cmd->type() ||
+ !compressedCommand->canMerge( cmd ) ) {
+ checkCompressedCommand();
+ compressedCommand = 0;
+ }
+
+ if ( compressedCommand ) {
+ compressedCommand->merge( cmd );
+ modified = true;
+ modificationChanged( modified );
+ return;
+ }
+ compressedCommand = cmd;
+ } else {
+ checkCompressedCommand();
+ }
+
+ if ( current < (int)history.count() - 1 ) {
+ if ( current < savedAt )
+ savedAt = -2;
+
+ QPtrList<Command> commands;
+ commands.setAutoDelete( false );
+
+ for( int i = 0; i <= current; ++i ) {
+ commands.insert( i, history.at( 0 ) );
+ history.take( 0 );
+ }
+
+ commands.append( cmd );
+ history.clear();
+ history = commands;
+ history.setAutoDelete( true );
+ } else {
+ history.append( cmd );
+ }
+
+ if ( (int)history.count() > steps ) {
+ savedAt--;
+ history.removeFirst();
+ } else {
+ ++current;
+ }
+
+ emitUndoRedo();
+ modified = true;
+ modificationChanged( modified );
+}
+
+void CommandHistory::undo()
+{
+ checkCompressedCommand();
+ compressedCommand = 0;
+ if ( current > -1 ) {
+ history.at( current )->unexecute();
+ --current;
+ }
+ emitUndoRedo();
+ modified = savedAt != current;
+ modificationChanged( modified );
+}
+
+void CommandHistory::redo()
+{
+ checkCompressedCommand();
+ compressedCommand = 0;
+ if ( current > -1 ) {
+ if ( current < (int)history.count() - 1 ) {
+ ++current;
+ history.at( current )->execute();
+ }
+ } else {
+ if ( history.count() > 0 ) {
+ ++current;
+ history.at( current )->execute();
+ }
+ }
+ emitUndoRedo();
+ modified = savedAt != current;
+ modificationChanged( modified );
+}
+
+void CommandHistory::emitUndoRedo()
+{
+ Command *undoCmd = 0;
+ Command *redoCmd = 0;
+
+ if ( current >= 0 && current < (int)history.count() )
+ undoCmd = history.at( current );
+ if ( current + 1 >= 0 && current + 1 < (int)history.count() )
+ redoCmd = history.at( current + 1 );
+
+ bool ua = (undoCmd != 0);
+ QString uc;
+ if ( ua )
+ uc = undoCmd->name();
+ bool ra = (redoCmd != 0);
+ QString rc;
+ if ( ra )
+ rc = redoCmd->name();
+ emit undoRedoChanged( ua, ra, uc, rc );
+}
+
+void CommandHistory::setModified( bool m )
+{
+ modified = m;
+ if ( !modified )
+ savedAt = current;
+ modificationChanged( modified );
+}
+
+bool CommandHistory::isModified() const
+{
+ return modified;
+}
+
+void CommandHistory::checkCompressedCommand()
+{
+ if ( compressedCommand && compressedCommand->type() == Command::SetProperty ) {
+ Command *c = compressedCommand;
+ compressedCommand = 0;
+ if ( !( (SetPropertyCommand*)c )->checkProperty() ) {
+ history.remove( current );
+ --current;
+ emitUndoRedo();
+ }
+ }
+}
+
+// ------------------------------------------------------------
+
+Command::Command( const QString &n, FormWindow *fw )
+ : cmdName( n ), formWin( fw )
+{
+}
+
+Command::~Command()
+{
+}
+
+QString Command::name() const
+{
+ return cmdName;
+}
+
+FormWindow *Command::formWindow() const
+{
+ return formWin;
+}
+
+void Command::merge( Command * )
+{
+}
+
+bool Command::canMerge( Command * )
+{
+ return false;
+}
+
+
+// ------------------------------------------------------------
+
+ResizeCommand::ResizeCommand( const QString &n, FormWindow *fw,
+ QWidget *w, const QRect &oldr, const QRect &nr )
+ : Command( n, fw ), widget( w ), oldRect( oldr ), newRect( nr )
+{
+}
+
+void ResizeCommand::execute()
+{
+ widget->setGeometry( newRect );
+ formWindow()->updateSelection( widget );
+ formWindow()->emitUpdateProperties( widget );
+ if ( WidgetFactory::layoutType( widget ) != WidgetFactory::NoLayout )
+ formWindow()->updateChildSelections( widget );
+}
+
+void ResizeCommand::unexecute()
+{
+ widget->setGeometry( oldRect );
+ formWindow()->updateSelection( widget );
+ formWindow()->emitUpdateProperties( widget );
+ if ( WidgetFactory::layoutType( widget ) != WidgetFactory::NoLayout )
+ formWindow()->updateChildSelections( widget );
+}
+
+// ------------------------------------------------------------
+
+InsertCommand::InsertCommand( const QString &n, FormWindow *fw,
+ QWidget *w, const QRect &g )
+ : Command( n, fw ), widget( w ), geometry( g )
+{
+}
+
+void InsertCommand::execute()
+{
+ if ( geometry.size() == QSize( 0, 0 ) ) {
+ widget->move( geometry.topLeft() );
+ widget->adjustSize();
+ } else {
+ QSize s = geometry.size().expandedTo( widget->minimumSize() );
+ s = s.expandedTo( widget->minimumSizeHint() );
+ QRect r( geometry.topLeft(), s );
+ widget->setGeometry( r );
+ }
+ widget->show();
+ formWindow()->widgets()->insert( widget, widget );
+ formWindow()->clearSelection( false );
+ formWindow()->selectWidget( widget );
+ formWindow()->mainWindow()->objectHierarchy()->widgetInserted( widget );
+}
+
+void InsertCommand::unexecute()
+{
+ widget->hide();
+ formWindow()->selectWidget( widget, false );
+ formWindow()->widgets()->remove( widget );
+ formWindow()->mainWindow()->objectHierarchy()->widgetRemoved( widget );
+ }
+
+// ------------------------------------------------------------
+
+MoveCommand::MoveCommand( const QString &n, FormWindow *fw,
+ const QWidgetList &w,
+ const QValueList<QPoint> op,
+ const QValueList<QPoint> np,
+ QWidget *opr, QWidget *npr )
+ : Command( n, fw ), widgets( w ), oldPos( op ), newPos( np ),
+ oldParent( opr ), newParent( npr )
+{
+ widgets.setAutoDelete( false );
+}
+
+void MoveCommand::merge( Command *c )
+{
+ MoveCommand *cmd = (MoveCommand*)c;
+ newPos = cmd->newPos;
+}
+
+bool MoveCommand::canMerge( Command *c )
+{
+ MoveCommand *cmd = (MoveCommand*)c;
+ return widgets == cmd->widgets;
+}
+
+
+void MoveCommand::execute()
+{
+ for ( QWidget *w = widgets.first(); w; w = widgets.next() ) {
+ if ( !w->parentWidget() || WidgetFactory::layoutType( w->parentWidget() ) == WidgetFactory::NoLayout ) {
+ if ( newParent && oldParent && newParent != oldParent ) {
+ QPoint pos = newParent->mapFromGlobal( w->mapToGlobal( QPoint( 0,0 ) ) );
+ w->reparent( newParent, pos, true );
+ formWindow()->raiseSelection( w );
+ formWindow()->raiseChildSelections( w );
+ formWindow()->widgetChanged( w );
+ formWindow()->mainWindow()->objectHierarchy()->widgetRemoved( w );
+ formWindow()->mainWindow()->objectHierarchy()->widgetInserted( w );
+ }
+ w->move( newPos[ widgets.at() ] );
+ }
+ formWindow()->updateSelection( w );
+ formWindow()->updateChildSelections( w );
+ formWindow()->emitUpdateProperties( w );
+ }
+}
+
+void MoveCommand::unexecute()
+{
+ for ( QWidget *w = widgets.first(); w; w = widgets.next() ) {
+ if ( !w->parentWidget() || WidgetFactory::layoutType( w->parentWidget() ) == WidgetFactory::NoLayout ) {
+ if ( newParent && oldParent && newParent != oldParent ) {
+ QPoint pos = oldParent->mapFromGlobal( w->mapToGlobal( QPoint( 0,0 ) ) );
+ w->reparent( oldParent, pos, true );
+ formWindow()->raiseSelection( w );
+ formWindow()->raiseChildSelections( w );
+ formWindow()->widgetChanged( w );
+ formWindow()->mainWindow()->objectHierarchy()->widgetRemoved( w );
+ formWindow()->mainWindow()->objectHierarchy()->widgetInserted( w );
+ }
+ w->move( oldPos[ widgets.at() ] );
+ }
+ formWindow()->updateSelection( w );
+ formWindow()->updateChildSelections( w );
+ formWindow()->emitUpdateProperties( w );
+ }
+}
+
+// ------------------------------------------------------------
+
+DeleteCommand::DeleteCommand( const QString &n, FormWindow *fw,
+ const QWidgetList &w )
+ : Command( n, fw ), widgets( w )
+{
+ widgets.setAutoDelete( false );
+}
+
+void DeleteCommand::execute()
+{
+ formWindow()->setPropertyShowingBlocked( true );
+ connections.clear();
+ for ( QWidget *w = widgets.first(); w; w = widgets.next() ) {
+ w->hide();
+ QString s = w->name();
+ s.prepend( "qt_dead_widget_" );
+ w->setName( s );
+ formWindow()->selectWidget( w, false );
+ formWindow()->widgets()->remove( w );
+ QValueList<MetaDataBase::Connection> conns = MetaDataBase::connections( formWindow(), w );
+ connections.insert( w, conns );
+ QValueList<MetaDataBase::Connection>::Iterator it = conns.begin();
+ for ( ; it != conns.end(); ++it ) {
+ MetaDataBase::removeConnection( formWindow(), (*it).sender,
+ (*it).signal, (*it).receiver, (*it).slot );
+ }
+ }
+ formWindow()->setPropertyShowingBlocked( false );
+ formWindow()->emitShowProperties();
+ formWindow()->mainWindow()->objectHierarchy()->widgetsRemoved( widgets );
+
+}
+
+void DeleteCommand::unexecute()
+{
+ formWindow()->setPropertyShowingBlocked( true );
+ formWindow()->clearSelection( false );
+ for ( QWidget *w = widgets.first(); w; w = widgets.next() ) {
+ w->show();
+ QString s = w->name();
+ s.remove( 0, QString( "qt_dead_widget_" ).length() );
+ w->setName( s );
+ formWindow()->widgets()->insert( w, w );
+ formWindow()->selectWidget( w );
+ QValueList<MetaDataBase::Connection> conns = *connections.find( w );
+ QValueList<MetaDataBase::Connection>::Iterator it = conns.begin();
+ for ( ; it != conns.end(); ++it ) {
+ MetaDataBase::addConnection( formWindow(), (*it).sender,
+ (*it).signal, (*it).receiver, (*it).slot );
+ }
+ }
+ formWindow()->setPropertyShowingBlocked( false );
+ formWindow()->emitShowProperties();
+ formWindow()->mainWindow()->objectHierarchy()->widgetsInserted( widgets );
+}
+
+// ------------------------------------------------------------
+
+SetPropertyCommand::SetPropertyCommand( const QString &n, FormWindow *fw,
+ QObject *w, PropertyEditor *e,
+ const QString &pn, const QVariant &ov,
+ const QVariant &nv, const QString &ncut,
+ const QString &ocut, bool reset )
+ : Command( n, fw ), widget( w ), editor( e ), propName( pn ),
+ oldValue( ov ), newValue( nv ), oldCurrentItemText( ocut ), newCurrentItemText( ncut ),
+ wasChanged( true ), isResetCommand( reset )
+{
+ wasChanged = MetaDataBase::isPropertyChanged( w, propName );
+}
+
+
+void SetPropertyCommand::execute()
+{
+ if ( !wasChanged )
+ MetaDataBase::setPropertyChanged( widget, propName, true );
+ if ( isResetCommand ) {
+ MetaDataBase::setPropertyChanged( widget, propName, false );
+ if ( WidgetFactory::resetProperty( widget, propName ) ) {
+ if ( !formWindow()->isWidgetSelected( widget ) && widget != formWindow() )
+ formWindow()->selectWidget( widget );
+ if ( editor->widget() != widget )
+ editor->setWidget( widget, formWindow() );
+ editor->propertyList()->setCurrentProperty( propName );
+ PropertyItem *i = (PropertyItem*)editor->propertyList()->currentItem();
+ if ( !i )
+ return;
+ i->setValue( widget->property( propName ) );
+ i->setChanged( false );
+ editor->refetchData();
+ editor->emitWidgetChanged();
+ return;
+ }
+ }
+ setProperty( newValue, newCurrentItemText );
+}
+
+void SetPropertyCommand::unexecute()
+{
+ if ( !wasChanged )
+ MetaDataBase::setPropertyChanged( widget, propName, false );
+ if ( isResetCommand )
+ MetaDataBase::setPropertyChanged( widget, propName, true );
+ setProperty( oldValue, oldCurrentItemText );
+}
+
+bool SetPropertyCommand::canMerge( Command *c )
+{
+ SetPropertyCommand *cmd = (SetPropertyCommand*)c;
+ const QMetaProperty *p =
+ widget->metaObject()->property( widget->metaObject()->findProperty( propName, true ), true );
+ if ( !p ) {
+ if ( propName == "toolTip" || propName == "whatsThis" )
+ return true;
+ if ( widget->inherits( "CustomWidget" ) ) {
+ MetaDataBase::CustomWidget *cw = ( (CustomWidget*)widget )->customWidget();
+ if ( !cw )
+ return false;
+ for ( QValueList<MetaDataBase::Property>::Iterator it = cw->lstProperties.begin(); it != cw->lstProperties.end(); ++it ) {
+ if ( QString( (*it ).property ) == propName ) {
+ if ( (*it).type == "String" || (*it).type == "CString" || (*it).type == "Int" || (*it).type == "UInt" )
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ QVariant::Type t = QVariant::nameToType( p->type() );
+ return ( cmd->propName == propName &&
+ t == QVariant::String || t == QVariant::CString || t == QVariant::Int || t == QVariant::UInt );
+}
+
+void SetPropertyCommand::merge( Command *c )
+{
+ SetPropertyCommand *cmd = (SetPropertyCommand*)c;
+ newValue = cmd->newValue;
+ newCurrentItemText = cmd->newCurrentItemText;
+}
+
+bool SetPropertyCommand::checkProperty()
+{
+ if ( propName == "name" /*|| propName == "itemName"*/ ) { // ### fix that
+ QString s = newValue.toString();
+ if ( !formWindow()->unify( widget, s, false ) ) {
+ QMessageBox::information( formWindow()->mainWindow(),
+ i18n("Set 'name' Property" ),
+ i18n("The name of a widget must be unique.\n"
+ "'%1' is already used in form '%2',\n"
+ "so the name has been reverted to '%3'." ).
+ arg( newValue.toString() ).
+ arg( formWindow()->name() ).
+ arg( oldValue.toString() ));
+ setProperty( oldValue, oldCurrentItemText, false );
+ return false;
+ }
+ if ( s.isEmpty() ) {
+ QMessageBox::information( formWindow()->mainWindow(),
+ i18n("Set 'name' Property" ),
+ i18n("The name of a widget must not be null.\n"
+ "The name has been reverted to '%1'." ).
+ arg( oldValue.toString() ));
+ setProperty( oldValue, oldCurrentItemText, false );
+ return false;
+ }
+
+ if ( widget->parent() && widget->parent()->inherits( "FormWindow" ) )
+ formWindow()->mainWindow()->formNameChanged( (FormWindow*)( (QWidget*)widget )->parentWidget() );
+ }
+ return true;
+}
+
+void SetPropertyCommand::setProperty( const QVariant &v, const QString &currentItemText, bool select )
+{
+ if ( !formWindow()->isWidgetSelected( widget ) && !formWindow()->isMainContainer( widget ) && select )
+ formWindow()->selectWidget( widget );
+ if ( editor->widget() != widget && select )
+ editor->setWidget( widget, formWindow() );
+ if ( select )
+ editor->propertyList()->setCurrentProperty( propName );
+
+ const QMetaProperty *p =
+ widget->metaObject()->property( widget->metaObject()->findProperty( propName, true ), true );
+ if ( !p ) {
+ if ( propName == "hAlign" ) {
+ p = widget->metaObject()->property( widget->metaObject()->findProperty( "alignment", true ), true );
+ int align = widget->property( "alignment" ).toInt();
+ align &= ~( AlignHorizontal_Mask );
+ align |= p->keyToValue( currentItemText );
+ widget->setProperty( "alignment", QVariant( align ) );
+ } else if ( propName == "vAlign" ) {
+ p = widget->metaObject()->property( widget->metaObject()->findProperty( "alignment", true ), true );
+ int align = widget->property( "alignment" ).toInt();
+ align &= ~( AlignVertical_Mask );
+ align |= p->keyToValue( currentItemText );
+ widget->setProperty( "alignment", QVariant( align ) );
+ } else if ( propName == "wordwrap" ) {
+ int align = widget->property( "alignment" ).toInt();
+ align &= ~WordBreak;
+ if ( v.toBool() )
+ align |= WordBreak;
+ widget->setProperty( "alignment", QVariant( align ) );
+ } else if ( propName == "layoutSpacing" ) {
+ MetaDataBase::setSpacing( WidgetFactory::containerOfWidget( (QWidget*)editor->widget() ), v.toInt() );
+ } else if ( propName == "layoutMargin" ) {
+ MetaDataBase::setMargin( WidgetFactory::containerOfWidget( (QWidget*)editor->widget() ), v.toInt() );
+ } else if ( propName == "toolTip" || propName == "whatsThis" || propName == "database" || propName == "frameworkCode" ) {
+ MetaDataBase::setFakeProperty( editor->widget(), propName, v );
+ } else if ( editor->widget()->inherits( "CustomWidget" ) ) {
+ MetaDataBase::CustomWidget *cw = ( (CustomWidget*)widget )->customWidget();
+ if ( cw ) {
+ MetaDataBase::setFakeProperty( editor->widget(), propName, v );
+ }
+ }
+ editor->refetchData();
+ editor->emitWidgetChanged();
+ ( ( PropertyItem* )editor->propertyList()->currentItem() )->setChanged( MetaDataBase::isPropertyChanged( widget, propName ) );
+#ifndef QT_NO_SQL
+ if ( propName == "database" )
+ formWindow()->mainWindow()->objectHierarchy()->databasePropertyChanged( (QWidget*)widget, MetaDataBase::fakeProperty( widget, "database" ).toStringList() );
+#endif
+ return;
+ }
+
+ if ( p->isSetType() ) {
+ ;
+ } else if ( p->isEnumType() ) {
+ widget->setProperty( propName, p->keyToValue( currentItemText ) );
+ } else {
+ QVariant ov;
+ if ( propName == "name" || propName == "itemName" )
+ ov = widget->property( propName );
+ int oldSerNum = -1;
+ if ( v.type() == QVariant::Pixmap )
+ oldSerNum = v.toPixmap().serialNumber();
+ widget->setProperty( propName, v );
+ if ( oldSerNum != -1 && oldSerNum != widget->property( propName ).toPixmap().serialNumber() )
+ MetaDataBase::setPixmapKey( formWindow(),
+ widget->property( propName ).toPixmap().serialNumber(),
+ MetaDataBase::pixmapKey( formWindow(), oldSerNum ) );
+ if ( propName == "cursor" )
+ MetaDataBase::setCursor( (QWidget*)widget, v.toCursor() );
+ if ( propName == "name" && widget->isWidgetType() ) {
+ formWindow()->mainWindow()->objectHierarchy()->namePropertyChanged( (QWidget*)widget, ov );
+ if ( formWindow()->isMainContainer( widget ) )
+ formWindow()->setName( v.toCString() );
+ }
+ if ( propName == "name" && widget->inherits( "QAction" ) &&
+ formWindow()->mainContainer() &&
+ formWindow()->mainContainer()->inherits( "QMainWindow" ) ) {
+ formWindow()->mainWindow()->actioneditor()->updateActionName( (QAction*)widget );
+ }
+ if ( propName == "iconSet" && widget->inherits( "QAction" ) &&
+ formWindow()->mainContainer() &&
+ formWindow()->mainContainer()->inherits( "QMainWindow" ) ) {
+ formWindow()->mainWindow()->actioneditor()->updateActionIcon( (QAction*)widget );
+ }
+ if ( propName == "caption" ) {
+ if ( formWindow()->isMainContainer( widget ) )
+ formWindow()->setCaption( v.toString() );
+ }
+ if ( propName == "icon" ) {
+ if ( formWindow()->isMainContainer( widget ) )
+ formWindow()->setIcon( v.toPixmap() );
+ }
+ }
+ editor->refetchData();
+ if ( editor->propertyList()->currentItem() && select ) {
+ ( ( PropertyItem* )editor->propertyList()->currentItem() )->showEditor();
+ ( ( PropertyItem* )editor->propertyList()->currentItem() )->setChanged( MetaDataBase::isPropertyChanged( widget, propName ) );
+ }
+ editor->emitWidgetChanged();
+ formWindow()->killAccels( widget );
+}
+
+// ------------------------------------------------------------
+
+LayoutHorizontalCommand::LayoutHorizontalCommand( const QString &n, FormWindow *fw,
+ QWidget *parent, QWidget *layoutBase,
+ const QWidgetList &wl )
+ : Command( n, fw ), layout( wl, parent, fw, layoutBase )
+{
+}
+
+void LayoutHorizontalCommand::execute()
+{
+ formWindow()->clearSelection( false );
+ layout.doLayout();
+ formWindow()->mainWindow()->objectHierarchy()->rebuild();
+}
+
+void LayoutHorizontalCommand::unexecute()
+{
+ formWindow()->clearSelection( false );
+ layout.undoLayout();
+ formWindow()->mainWindow()->objectHierarchy()->rebuild();
+}
+
+// ------------------------------------------------------------
+
+LayoutHorizontalSplitCommand::LayoutHorizontalSplitCommand( const QString &n, FormWindow *fw,
+ QWidget *parent, QWidget *layoutBase,
+ const QWidgetList &wl )
+ : Command( n, fw ), layout( wl, parent, fw, layoutBase, true, true )
+{
+}
+
+void LayoutHorizontalSplitCommand::execute()
+{
+ formWindow()->clearSelection( false );
+ layout.doLayout();
+ formWindow()->mainWindow()->objectHierarchy()->rebuild();
+}
+
+void LayoutHorizontalSplitCommand::unexecute()
+{
+ formWindow()->clearSelection( false );
+ layout.undoLayout();
+ formWindow()->mainWindow()->objectHierarchy()->rebuild();
+}
+
+// ------------------------------------------------------------
+
+LayoutVerticalCommand::LayoutVerticalCommand( const QString &n, FormWindow *fw,
+ QWidget *parent, QWidget *layoutBase,
+ const QWidgetList &wl )
+ : Command( n, fw ), layout( wl, parent, fw, layoutBase )
+{
+}
+
+void LayoutVerticalCommand::execute()
+{
+ formWindow()->clearSelection( false );
+ layout.doLayout();
+ formWindow()->mainWindow()->objectHierarchy()->rebuild();
+}
+
+void LayoutVerticalCommand::unexecute()
+{
+ formWindow()->clearSelection( false );
+ layout.undoLayout();
+ formWindow()->mainWindow()->objectHierarchy()->rebuild();
+}
+
+// ------------------------------------------------------------
+
+LayoutVerticalSplitCommand::LayoutVerticalSplitCommand( const QString &n, FormWindow *fw,
+ QWidget *parent, QWidget *layoutBase,
+ const QWidgetList &wl )
+ : Command( n, fw ), layout( wl, parent, fw, layoutBase, true, true )
+{
+}
+
+void LayoutVerticalSplitCommand::execute()
+{
+ formWindow()->clearSelection( false );
+ layout.doLayout();
+ formWindow()->mainWindow()->objectHierarchy()->rebuild();
+}
+
+void LayoutVerticalSplitCommand::unexecute()
+{
+ formWindow()->clearSelection( false );
+ layout.undoLayout();
+ formWindow()->mainWindow()->objectHierarchy()->rebuild();
+}
+
+// ------------------------------------------------------------
+
+LayoutGridCommand::LayoutGridCommand( const QString &n, FormWindow *fw,
+ QWidget *parent, QWidget *layoutBase,
+ const QWidgetList &wl, int xres, int yres )
+ : Command( n, fw ), layout( wl, parent, fw, layoutBase, QSize( QMAX(5,xres), QMAX(5,yres) ) )
+{
+}
+
+void LayoutGridCommand::execute()
+{
+ formWindow()->clearSelection( false );
+ layout.doLayout();
+ formWindow()->mainWindow()->objectHierarchy()->rebuild();
+}
+
+void LayoutGridCommand::unexecute()
+{
+ formWindow()->clearSelection( false );
+ layout.undoLayout();
+ formWindow()->mainWindow()->objectHierarchy()->rebuild();
+}
+
+// ------------------------------------------------------------
+
+BreakLayoutCommand::BreakLayoutCommand( const QString &n, FormWindow *fw,
+ QWidget *layoutBase, const QWidgetList &wl )
+ : Command( n, fw ), lb( layoutBase ), widgets( wl )
+{
+ WidgetFactory::LayoutType lay = WidgetFactory::layoutType( layoutBase );
+ spacing = MetaDataBase::spacing( layoutBase );
+ margin = MetaDataBase::margin( layoutBase );
+ layout = 0;
+ if ( lay == WidgetFactory::HBox )
+ layout = new HorizontalLayout( wl, layoutBase, fw, layoutBase, false, layoutBase->inherits( "QSplitter" ) );
+ else if ( lay == WidgetFactory::VBox )
+ layout = new VerticalLayout( wl, layoutBase, fw, layoutBase, false, layoutBase->inherits( "QSplitter" ) );
+ else if ( lay == WidgetFactory::Grid )
+ layout = new GridLayout( wl, layoutBase, fw, layoutBase, QSize( QMAX( 5, fw->grid().x()), QMAX( 5, fw->grid().y()) ), false );
+}
+
+void BreakLayoutCommand::execute()
+{
+ if ( !layout )
+ return;
+ formWindow()->clearSelection( false );
+ layout->breakLayout();
+ formWindow()->mainWindow()->objectHierarchy()->rebuild();
+ for ( QWidget *w = widgets.first(); w; w = widgets.next() )
+ w->resize( QMAX( 16, w->width() ), QMAX( 16, w->height() ) );
+}
+
+void BreakLayoutCommand::unexecute()
+{
+ if ( !layout )
+ return;
+ formWindow()->clearSelection( false );
+ layout->doLayout();
+ formWindow()->mainWindow()->objectHierarchy()->rebuild();
+ MetaDataBase::setSpacing( WidgetFactory::containerOfWidget( lb ), spacing );
+ MetaDataBase::setMargin( WidgetFactory::containerOfWidget( lb ), margin );
+}
+
+// ------------------------------------------------------------
+
+MacroCommand::MacroCommand( const QString &n, FormWindow *fw,
+ const QPtrList<Command> &cmds )
+ : Command( n, fw ), commands( cmds )
+{
+}
+
+void MacroCommand::execute()
+{
+ for ( Command *c = commands.first(); c; c = commands.next() )
+ c->execute();
+}
+
+void MacroCommand::unexecute()
+{
+ for ( Command *c = commands.last(); c; c = commands.prev() )
+ c->unexecute();
+}
+
+// ------------------------------------------------------------
+
+AddTabPageCommand::AddTabPageCommand( const QString &n, FormWindow *fw,
+ QTabWidget *tw, const QString &label )
+ : Command( n, fw ), tabWidget( tw ), tabLabel( label )
+{
+ tabPage = new QDesignerWidget( formWindow(), tabWidget, "tab" );
+ tabPage->hide();
+ index = -1;
+ MetaDataBase::addEntry( tabPage );
+}
+
+void AddTabPageCommand::execute()
+{
+ if ( index == -1 )
+ index = ( (QDesignerTabWidget*)tabWidget )->count();
+ tabWidget->insertTab( tabPage, tabLabel, index );
+ tabWidget->showPage( tabPage );
+ formWindow()->emitUpdateProperties( formWindow()->currentWidget() );
+ formWindow()->mainWindow()->objectHierarchy()->tabsChanged( tabWidget );
+}
+
+void AddTabPageCommand::unexecute()
+{
+ tabWidget->removePage( tabPage );
+ tabPage->hide();
+ formWindow()->emitUpdateProperties( formWindow()->currentWidget() );
+ formWindow()->mainWindow()->objectHierarchy()->tabsChanged( tabWidget );
+}
+
+// ------------------------------------------------------------
+// ------------------------------------------------------------
+
+AddToolBoxPageCommand::AddToolBoxPageCommand( const QString &n, FormWindow *fw,
+ QToolBox *tw, const QString &_label )
+ : Command( n, fw ), toolBox( tw ), label( _label )
+{
+ page = new QDesignerWidget( formWindow(), toolBox, "tab" );
+ page->hide();
+ index = -1;
+ MetaDataBase::addEntry( page );
+}
+
+void AddToolBoxPageCommand::execute()
+{
+ if ( index == -1 )
+ index = ( (EditorToolBox*)toolBox)->count();
+ toolBox->insertItem(index, page, label);
+ toolBox->setCurrentItem( page );
+ formWindow()->emitUpdateProperties( formWindow()->currentWidget() );
+ formWindow()->mainWindow()->objectHierarchy()->tabsChanged( toolBox );
+}
+
+void AddToolBoxPageCommand::unexecute()
+{
+ toolBox->removeItem( page );
+ page->hide();
+ formWindow()->emitUpdateProperties( formWindow()->currentWidget() );
+ formWindow()->mainWindow()->objectHierarchy()->tabsChanged( toolBox );
+}
+
+// ------------------------------------------------------------
+
+MoveTabPageCommand::MoveTabPageCommand( const QString &n, FormWindow *fw,
+ QTabWidget *tw, QWidget* page, const QString& label, int nIndex, int oIndex )
+ : Command( n, fw ), tabWidget( tw ), tabPage( page ), tabLabel( label )
+{
+ newIndex = nIndex;
+ oldIndex = oIndex;
+}
+
+void MoveTabPageCommand::execute()
+{
+ ((QDesignerTabWidget*)tabWidget )->removePage( tabPage );
+ ((QDesignerTabWidget*)tabWidget )->insertTab( tabPage, tabLabel, newIndex );
+ ((QDesignerTabWidget*)tabWidget )->showPage( tabPage );
+ formWindow()->emitUpdateProperties( formWindow()->currentWidget() );
+ formWindow()->mainWindow()->objectHierarchy()->tabsChanged( tabWidget );
+}
+
+void MoveTabPageCommand::unexecute()
+{
+ ((QDesignerTabWidget*)tabWidget )->removePage( tabPage );
+ ((QDesignerTabWidget*)tabWidget )->insertTab( tabPage, tabLabel, oldIndex );
+ ((QDesignerTabWidget*)tabWidget )->showPage( tabPage );
+ formWindow()->emitUpdateProperties( formWindow()->currentWidget() );
+ formWindow()->mainWindow()->objectHierarchy()->tabsChanged( tabWidget );
+}
+
+// ------------------------------------------------------------
+
+DeleteTabPageCommand::DeleteTabPageCommand( const QString &n, FormWindow *fw,
+ QTabWidget *tw, QWidget *page )
+ : Command( n, fw ), tabWidget( tw ), tabPage( page )
+{
+ tabLabel = ( (QDesignerTabWidget*)tabWidget )->pageTitle();
+ index = ( (QDesignerTabWidget*)tabWidget )->currentPage();
+}
+
+void DeleteTabPageCommand::execute()
+{
+ tabWidget->removePage( tabPage );
+ tabPage->hide();
+ formWindow()->emitUpdateProperties( formWindow()->currentWidget() );
+ formWindow()->mainWindow()->objectHierarchy()->tabsChanged( tabWidget );
+}
+
+void DeleteTabPageCommand::unexecute()
+{
+ tabWidget->insertTab( tabPage, tabLabel, index );
+ tabWidget->showPage( tabPage );
+ formWindow()->emitUpdateProperties( formWindow()->currentWidget() );
+ formWindow()->mainWindow()->objectHierarchy()->tabsChanged( tabWidget );
+}
+
+// ------------------------------------------------------------
+
+DeleteToolBoxPageCommand::DeleteToolBoxPageCommand( const QString &n, FormWindow *fw,
+ QToolBox *tw, QWidget *_page )
+ : Command( n, fw ), toolBox( tw ), page( _page )
+{
+ label = ( (EditorToolBox*)toolBox )->pageTitle();
+ index = ( (EditorToolBox*)toolBox )->currentPage();
+}
+
+void DeleteToolBoxPageCommand::execute()
+{
+ toolBox->removeItem( page );
+ page->hide();
+ formWindow()->emitUpdateProperties( formWindow()->currentWidget() );
+ formWindow()->mainWindow()->objectHierarchy()->tabsChanged( toolBox );
+}
+
+void DeleteToolBoxPageCommand::unexecute()
+{
+ toolBox->insertItem(index, page, label);
+ toolBox->setCurrentItem( page );
+ formWindow()->emitUpdateProperties( formWindow()->currentWidget() );
+ formWindow()->mainWindow()->objectHierarchy()->tabsChanged( toolBox );
+}
+
+// ------------------------------------------------------------
+
+AddWizardPageCommand::AddWizardPageCommand( const QString &n, FormWindow *fw,
+ QWizard *w, const QString &label, int i, bool s )
+ : Command( n, fw ), wizard( w ), pageLabel( label )
+{
+ page = new QDesignerWidget( formWindow(), wizard, "page" );
+ page->hide();
+ index = i;
+ show = s;
+ MetaDataBase::addEntry( page );
+}
+
+void AddWizardPageCommand::execute()
+{
+ if ( index == -1 )
+ index = wizard->pageCount();
+ wizard->insertPage( page, pageLabel, index );
+ if ( show )
+ ( (QDesignerWizard*)wizard )->setCurrentPage( ( (QDesignerWizard*)wizard )->pageNum( page ) );
+ formWindow()->emitUpdateProperties( formWindow()->currentWidget() );
+ formWindow()->mainWindow()->objectHierarchy()->pagesChanged( wizard );
+}
+
+void AddWizardPageCommand::unexecute()
+{
+ wizard->removePage( page );
+ page->hide();
+ formWindow()->emitUpdateProperties( formWindow()->currentWidget() );
+ formWindow()->mainWindow()->objectHierarchy()->pagesChanged( wizard );
+}
+
+// ------------------------------------------------------------
+
+DeleteWizardPageCommand::DeleteWizardPageCommand( const QString &n, FormWindow *fw,
+ QWizard *w, int i, bool s )
+ : Command( n, fw ), wizard( w ), index( i )
+{
+ show = s;
+}
+
+void DeleteWizardPageCommand::execute()
+{
+ page = wizard->page( index );
+ pageLabel = wizard->title( page );
+ wizard->removePage( page );
+ page->hide();
+ formWindow()->emitUpdateProperties( formWindow()->currentWidget() );
+ formWindow()->mainWindow()->objectHierarchy()->pagesChanged( wizard );
+}
+
+void DeleteWizardPageCommand::unexecute()
+{
+ wizard->insertPage( page, pageLabel, index );
+ if ( show )
+ ( (QDesignerWizard*)wizard )->setCurrentPage( ( (QDesignerWizard*)wizard )->pageNum( page ) );
+ formWindow()->emitUpdateProperties( formWindow()->currentWidget() );
+ formWindow()->mainWindow()->objectHierarchy()->pagesChanged( wizard );
+}
+
+// ------------------------------------------------------------
+
+RenameWizardPageCommand::RenameWizardPageCommand( const QString &n, FormWindow *fw,
+ QWizard *w, int i, const QString& name )
+ : Command( n, fw ), wizard( w ), index( i ), label( name )
+{
+
+}
+
+void RenameWizardPageCommand::execute()
+{
+ page = wizard->page( index );
+ QString oldLabel = wizard->title( page );
+
+ wizard->setTitle( page, label );
+ label = oldLabel;
+ formWindow()->emitUpdateProperties( formWindow()->currentWidget() );
+}
+
+void RenameWizardPageCommand::unexecute()
+{
+ execute();
+}
+
+// ------------------------------------------------------------
+
+SwapWizardPagesCommand::SwapWizardPagesCommand( const QString &n, FormWindow *fw, QWizard *w, int i1, int i2 )
+ : Command( n, fw ), wizard( w ), index1( i1 ), index2( i2 )
+{
+}
+
+void SwapWizardPagesCommand::execute()
+{
+ QWidget *page1 = wizard->page( index1 );
+ QWidget *page2 = wizard->page( index2 );
+ QString page1Label = wizard->title( page1 );
+ QString page2Label = wizard->title( page2 );
+ wizard->removePage( page1 );
+ wizard->removePage( page2 );
+ wizard->insertPage( page1, page1Label, index2 );
+ wizard->insertPage( page2, page2Label, index1 );
+ formWindow()->emitUpdateProperties( formWindow()->currentWidget() );
+ formWindow()->mainWindow()->objectHierarchy()->pagesChanged( wizard );
+}
+
+void SwapWizardPagesCommand::unexecute()
+{
+ execute();
+}
+
+// ------------------------------------------------------------
+
+AddConnectionCommand::AddConnectionCommand( const QString &name, FormWindow *fw,
+ MetaDataBase::Connection c )
+ : Command( name, fw ), connection( c )
+{
+}
+
+void AddConnectionCommand::execute()
+{
+ MetaDataBase::addConnection( formWindow(), connection.sender,
+ connection.signal, connection.receiver, connection.slot );
+#ifndef KOMMANDER
+ if ( connection.receiver == formWindow()->mainContainer() )
+ {
+ // qDebug("AddConnectionCommand::execute(): Would have called EventList::setup()");
+ formWindow()->mainWindow()->propertyeditor()->eventList()->setup();
+ }
+#endif
+}
+
+void AddConnectionCommand::unexecute()
+{
+ MetaDataBase::removeConnection( formWindow(), connection.sender,
+ connection.signal, connection.receiver, connection.slot );
+#ifndef KOMMANDER
+ if ( connection.receiver == formWindow()->mainContainer() )
+ {
+ // qDebug("AddConnectionCommand::unexecute(): Would have called EventList::setup()");
+ formWindow()->mainWindow()->propertyeditor()->eventList()->setup();
+ }
+#endif
+}
+
+// ------------------------------------------------------------
+
+RemoveConnectionCommand::RemoveConnectionCommand( const QString &name, FormWindow *fw,
+ MetaDataBase::Connection c )
+ : Command( name, fw ), connection( c )
+{
+}
+
+void RemoveConnectionCommand::execute()
+{
+ MetaDataBase::removeConnection( formWindow(), connection.sender,
+ connection.signal, connection.receiver, connection.slot );
+#ifndef KOMMANDER
+ if ( connection.receiver == formWindow()->mainContainer() )
+ {
+ // qDebug("RemoveConnectionCommand::execute(): Would have called EventList::setup()");
+ formWindow()->mainWindow()->propertyeditor()->eventList()->setup();
+ }
+#endif
+}
+
+void RemoveConnectionCommand::unexecute()
+{
+ MetaDataBase::addConnection( formWindow(), connection.sender,
+ connection.signal, connection.receiver, connection.slot );
+#ifndef KOMMANDER
+ if ( connection.receiver == formWindow()->mainContainer() )
+ {
+ // qDebug("RemoveConnectionCommand::unexecute(): Would have called EventList::setup()");
+ formWindow()->mainWindow()->propertyeditor()->eventList()->setup();
+ }
+#endif
+}
+
+// ------------------------------------------------------------
+
+/* TODO : We don't need these commands. */
+AddSlotCommand::AddSlotCommand( const QString &name, FormWindow *fw, const QCString &s,
+ const QString& spec, const QString &a, const QString &l, const QString &rt )
+ : Command( name, fw ), slot( s ), specifier( spec ), access( a ), language( l ), returnType( rt )
+{
+ // qDebug("AddSlotCommand::AddSlotCommand()");
+}
+
+void AddSlotCommand::execute()
+{
+ MetaDataBase::addSlot( formWindow(), slot, specifier, access, language, returnType );
+#ifndef KOMMANDER
+ formWindow()->mainWindow()->slotsChanged();
+#endif
+ if ( formWindow()->formFile() )
+ formWindow()->formFile()->setModified( true );
+}
+
+void AddSlotCommand::unexecute()
+{
+ MetaDataBase::removeSlot( formWindow(), slot, specifier, access, language, returnType );
+#ifndef KOMMANDER
+ formWindow()->mainWindow()->slotsChanged();
+#endif
+ if ( formWindow()->formFile() )
+ formWindow()->formFile()->setModified( true );
+}
+
+// ------------------------------------------------------------
+
+RemoveSlotCommand::RemoveSlotCommand( const QString &name, FormWindow *fw, const QCString &s,
+ const QString& spec, const QString &a, const QString &l, const QString &rt )
+ : Command( name, fw ), slot( s ), specifier( spec ), access( a ), language( l ), returnType( rt )
+{
+ // qDebug("RemoveSlotCommand::RemoveSlotCommand()");
+}
+
+void RemoveSlotCommand::execute()
+{
+ MetaDataBase::removeSlot( formWindow(), slot, specifier, access, language, returnType );
+#ifndef KOMMANDER
+ formWindow()->mainWindow()->slotsChanged();
+#endif
+ if ( formWindow()->formFile() )
+ formWindow()->formFile()->setModified( true );
+}
+
+void RemoveSlotCommand::unexecute()
+{
+ MetaDataBase::addSlot( formWindow(), slot, specifier, access, language, returnType );
+#ifndef KOMMANDER
+ formWindow()->mainWindow()->slotsChanged();
+#endif
+ if ( formWindow()->formFile() )
+ formWindow()->formFile()->setModified( true );
+}
+
+// ------------------------------------------------------------
+
+LowerCommand::LowerCommand( const QString &name, FormWindow *fw, const QWidgetList &w )
+ : Command( name, fw ), widgets( w )
+{
+}
+
+void LowerCommand::execute()
+{
+ for ( QWidget *w = widgets.first(); w; w = widgets.next() ) {
+ w->lower();
+ formWindow()->raiseSelection( w );
+ }
+
+}
+
+void LowerCommand::unexecute()
+{
+ for ( QWidget *w = widgets.first(); w; w = widgets.next() ) {
+ w->raise();
+ formWindow()->raiseSelection( w );
+ }
+}
+
+// ------------------------------------------------------------
+
+RaiseCommand::RaiseCommand( const QString &name, FormWindow *fw, const QWidgetList &w )
+ : Command( name, fw ), widgets( w )
+{
+}
+
+void RaiseCommand::execute()
+{
+ for ( QWidget *w = widgets.first(); w; w = widgets.next() ) {
+ w->raise();
+ formWindow()->raiseSelection( w );
+ }
+
+}
+
+void RaiseCommand::unexecute()
+{
+ for ( QWidget *w = widgets.first(); w; w = widgets.next() ) {
+ w->lower();
+ formWindow()->raiseSelection( w );
+ }
+}
+
+// ------------------------------------------------------------
+
+PasteCommand::PasteCommand( const QString &n, FormWindow *fw,
+ const QWidgetList &w )
+ : Command( n, fw ), widgets( w )
+{
+}
+
+void PasteCommand::execute()
+{
+ for ( QWidget *w = widgets.first(); w; w = widgets.next() ) {
+ w->show();
+ formWindow()->selectWidget( w );
+ formWindow()->widgets()->insert( w, w );
+ formWindow()->mainWindow()->objectHierarchy()->widgetInserted( w );
+ }
+}
+
+void PasteCommand::unexecute()
+{
+ for ( QWidget *w = widgets.first(); w; w = widgets.next() ) {
+ w->hide();
+ formWindow()->selectWidget( w, false );
+ formWindow()->widgets()->remove( w );
+ formWindow()->mainWindow()->objectHierarchy()->widgetRemoved( w );
+ }
+ }
+
+// ------------------------------------------------------------
+
+TabOrderCommand::TabOrderCommand( const QString &n, FormWindow *fw,
+ const QWidgetList &ol, const QWidgetList &nl )
+ : Command( n, fw ), oldOrder( ol ), newOrder( nl )
+{
+}
+
+void TabOrderCommand::merge( Command *c )
+{
+ TabOrderCommand *cmd = (TabOrderCommand*)c;
+ newOrder = cmd->newOrder;
+}
+
+bool TabOrderCommand::canMerge( Command * )
+{
+ return true;
+}
+
+void TabOrderCommand::execute()
+{
+ MetaDataBase::setTabOrder( formWindow(), newOrder );
+}
+
+void TabOrderCommand::unexecute()
+{
+ MetaDataBase::setTabOrder( formWindow(), oldOrder );
+}
+
+// ------------------------------------------------------------
+
+PopulateListBoxCommand::PopulateListBoxCommand( const QString &n, FormWindow *fw,
+ QListBox *lb, const QValueList<Item> &items )
+ : Command( n, fw ), newItems( items ), listbox( lb )
+{
+ QListBoxItem *i = 0;
+ for ( i = listbox->firstItem(); i; i = i->next() ) {
+ Item item;
+ if ( i->pixmap() )
+ item.pix = *i->pixmap();
+ item.text = i->text();
+ oldItems.append( item );
+ }
+}
+
+void PopulateListBoxCommand::execute()
+{
+ listbox->clear();
+ for ( QValueList<Item>::Iterator it = newItems.begin(); it != newItems.end(); ++it ) {
+ Item i = *it;
+ if ( !i.pix.isNull() )
+ (void)new QListBoxPixmap( listbox, i.pix, i.text );
+ else
+ (void)new QListBoxText( listbox, i.text );
+ }
+ formWindow()->mainWindow()->propertyeditor()->refetchData();
+}
+
+void PopulateListBoxCommand::unexecute()
+{
+ listbox->clear();
+ for ( QValueList<Item>::Iterator it = oldItems.begin(); it != oldItems.end(); ++it ) {
+ Item i = *it;
+ if ( !i.pix.isNull() )
+ (void)new QListBoxPixmap( listbox, i.pix, i.text );
+ else
+ (void)new QListBoxText( listbox, i.text );
+ }
+ formWindow()->mainWindow()->propertyeditor()->refetchData();
+}
+
+// ------------------------------------------------------------
+
+PopulateIconViewCommand::PopulateIconViewCommand( const QString &n, FormWindow *fw,
+ QIconView *iv, const QValueList<Item> &items )
+ : Command( n, fw ), newItems( items ), iconview( iv )
+{
+#ifndef QT_NO_ICONVIEW
+ QIconViewItem *i = 0;
+ for ( i = iconview->firstItem(); i; i = i->nextItem() ) {
+ Item item;
+ if ( i->pixmap() )
+ item.pix = *i->pixmap();
+ item.text = i->text();
+ oldItems.append( item );
+ }
+#endif
+}
+
+void PopulateIconViewCommand::execute()
+{
+#ifndef QT_NO_ICONVIEW
+ iconview->clear();
+ for ( QValueList<Item>::Iterator it = newItems.begin(); it != newItems.end(); ++it ) {
+ Item i = *it;
+ (void)new QIconViewItem( iconview, i.text, i.pix );
+ }
+#endif
+}
+
+void PopulateIconViewCommand::unexecute()
+{
+#ifndef QT_NO_ICONVIEW
+ iconview->clear();
+ for ( QValueList<Item>::Iterator it = oldItems.begin(); it != oldItems.end(); ++it ) {
+ Item i = *it;
+ (void)new QIconViewItem( iconview, i.text, i.pix );
+ }
+#endif
+}
+
+// ------------------------------------------------------------
+
+PopulateListViewCommand::PopulateListViewCommand( const QString &n, FormWindow *fw,
+ QListView *lv, QListView *from )
+ : Command( n, fw ), listview( lv )
+{
+ newItems = new QListView();
+ newItems->hide();
+ transferItems( from, newItems );
+ oldItems = new QListView();
+ oldItems->hide();
+ transferItems( listview, oldItems );
+}
+
+void PopulateListViewCommand::execute()
+{
+ listview->clear();
+ transferItems( newItems, listview );
+}
+
+void PopulateListViewCommand::unexecute()
+{
+ listview->clear();
+ transferItems( oldItems, listview );
+}
+
+void PopulateListViewCommand::transferItems( QListView *from, QListView *to )
+{
+ QHeader *header = to->header();
+ while ( header->count() )
+ to->removeColumn( 0 );
+ QHeader *h2 = from->header();
+ for ( int i = 0; i < h2->count(); ++i ) {
+ to->addColumn( h2->label( i ) );
+ if ( h2->iconSet( i ) && !h2->iconSet( i )->pixmap().isNull() )
+ header->setLabel( i, *h2->iconSet( i ), h2->label( i ) );
+ header->setResizeEnabled( h2->isResizeEnabled( i ), i );
+ header->setClickEnabled( h2->isClickEnabled( i ), i );
+ }
+
+ QListViewItemIterator it( from );
+ QPtrStack<QListViewItem> fromParents, toParents;
+ fromParents.push( 0 );
+ toParents.push( 0 );
+ QPtrStack<QListViewItem> toLasts;
+ QListViewItem *fromLast = 0;
+ toLasts.push( 0 );
+ int cols = from->columns();
+ to->setSorting( -1 );
+ from->setSorting( -1 );
+ for ( ; it.current(); ++it ) {
+ QListViewItem *i = it.current();
+ if ( i->parent() == fromParents.top() ) {
+ QListViewItem *pi = toParents.top();
+ QListViewItem *ni = 0;
+ if ( pi )
+ ni = new QListViewItem( pi, toLasts.top() );
+ else
+ ni = new QListViewItem( to, toLasts.top() );
+ for ( int c = 0; c < cols; ++c ) {
+ ni->setText( c, i->text( c ) );
+ if ( i->pixmap( c ) )
+ ni->setPixmap( c, *i->pixmap( c ) );
+ }
+ toLasts.pop();
+ toLasts.push( ni );
+ if ( pi )
+ pi->setOpen( true );
+ } else {
+ if ( i->parent() == fromLast ) {
+ fromParents.push( fromLast );
+ toParents.push( toLasts.top() );
+ toLasts.push( 0 );
+ QListViewItem *pi = toParents.top();
+ QListViewItem *ni = 0;
+ if ( pi )
+ ni = new QListViewItem( pi );
+ else
+ ni = new QListViewItem( to );
+ for ( int c = 0; c < cols; ++c ) {
+ ni->setText( c, i->text( c ) );
+ if ( i->pixmap( c ) )
+ ni->setPixmap( c, *i->pixmap( c ) );
+ }
+ toLasts.pop();
+ toLasts.push( ni );
+ if ( pi )
+ pi->setOpen( true );
+ } else {
+ while ( fromParents.top() != i->parent() ) {
+ fromParents.pop();
+ toParents.pop();
+ toLasts.pop();
+ }
+
+ QListViewItem *pi = toParents.top();
+ QListViewItem *ni = 0;
+ if ( pi )
+ ni = new QListViewItem( pi, toLasts.top() );
+ else
+ ni = new QListViewItem( to, toLasts.top() );
+ for ( int c = 0; c < cols; ++c ) {
+ ni->setText( c, i->text( c ) );
+ if ( i->pixmap( c ) )
+ ni->setPixmap( c, *i->pixmap( c ) );
+ }
+ if ( pi )
+ pi->setOpen( true );
+ toLasts.pop();
+ toLasts.push( ni );
+ }
+ }
+ fromLast = i;
+ }
+}
+
+
+
+// ------------------------------------------------------------
+
+PopulateMultiLineEditCommand::PopulateMultiLineEditCommand( const QString &n, FormWindow *fw,
+ QMultiLineEdit *mle, const QString &txt )
+ : Command( n, fw ), newText( txt ), mlined( mle )
+{
+ oldText = mlined->text();
+ wasChanged = MetaDataBase::isPropertyChanged( mlined, "text" );
+}
+
+void PopulateMultiLineEditCommand::execute()
+{
+ mlined->setText( newText );
+ MetaDataBase::setPropertyChanged( mlined, "text", true );
+ formWindow()->emitUpdateProperties( mlined );
+}
+
+void PopulateMultiLineEditCommand::unexecute()
+{
+ mlined->setText( oldText );
+ MetaDataBase::setPropertyChanged( mlined, "text", wasChanged );
+ formWindow()->emitUpdateProperties( mlined );
+}
+
+// ------------------------------------------------------------
+
+PopulateTableCommand::PopulateTableCommand( const QString &n, FormWindow *fw, QTable *t,
+ const QValueList<Row> &rows,
+ const QValueList<Column> &columns )
+ : Command( n, fw ), newRows( rows ), newColumns( columns ), table( t )
+{
+#ifndef QT_NO_TABLE
+ int i = 0;
+ QMap<QString, QString> columnFields = MetaDataBase::columnFields( table );
+ for ( i = 0; i < table->horizontalHeader()->count(); ++i ) {
+ PopulateTableCommand::Column col;
+ col.text = table->horizontalHeader()->label( i );
+ if ( table->horizontalHeader()->iconSet( i ) )
+ col.pix = table->horizontalHeader()->iconSet( i )->pixmap();
+ col.field = *columnFields.find( col.text );
+ oldColumns.append( col );
+ }
+ for ( i = 0; i < table->verticalHeader()->count(); ++i ) {
+ PopulateTableCommand::Row row;
+ row.text = table->verticalHeader()->label( i );
+ if ( table->verticalHeader()->iconSet( i ) )
+ row.pix = table->verticalHeader()->iconSet( i )->pixmap();
+ oldRows.append( row );
+ }
+#endif
+}
+
+void PopulateTableCommand::execute()
+{
+#ifndef QT_NO_TABLE
+ QMap<QString, QString> columnFields;
+ table->setNumCols( newColumns.count() );
+ int i = 0;
+ for ( QValueList<Column>::Iterator cit = newColumns.begin(); cit != newColumns.end(); ++cit, ++i ) {
+ table->horizontalHeader()->setLabel( i, (*cit).pix, (*cit).text );
+ if ( !(*cit).field.isEmpty() )
+ columnFields.insert( (*cit).text, (*cit).field );
+ }
+ MetaDataBase::setColumnFields( table, columnFields );
+ table->setNumRows( newRows.count() );
+ i = 0;
+ for ( QValueList<Row>::Iterator rit = newRows.begin(); rit != newRows.end(); ++rit, ++i )
+ table->verticalHeader()->setLabel( i, (*rit).pix, (*rit).text );
+#endif
+}
+
+void PopulateTableCommand::unexecute()
+{
+#ifndef QT_NO_TABLE
+ QMap<QString, QString> columnFields;
+ table->setNumCols( oldColumns.count() );
+ int i = 0;
+ for ( QValueList<Column>::Iterator cit = oldColumns.begin(); cit != oldColumns.end(); ++cit, ++i ) {
+ table->horizontalHeader()->setLabel( i, (*cit).pix, (*cit).text );
+ if ( !(*cit).field.isEmpty() )
+ columnFields.insert( (*cit).text, (*cit).field );
+ }
+ MetaDataBase::setColumnFields( table, columnFields );
+ table->setNumRows( oldRows.count() );
+ i = 0;
+ for ( QValueList<Row>::Iterator rit = oldRows.begin(); rit != oldRows.end(); ++rit, ++i )
+ table->verticalHeader()->setLabel( i, (*rit).pix, (*rit).text );
+#endif
+}
+
+// ------------------------------------------------------------
+
+AddActionToToolBarCommand::AddActionToToolBarCommand( const QString &n, FormWindow *fw,
+ QAction *a, QDesignerToolBar *tb, int idx )
+ : Command( n, fw ), action( a ), toolBar( tb ), index( idx )
+{
+}
+
+void AddActionToToolBarCommand::execute()
+{
+ action->addTo( toolBar );
+
+ if ( action->inherits( "QDesignerAction" ) ) {
+ QString s = ( (QDesignerAction*)action )->widget()->name();
+ if ( s.startsWith( "qt_dead_widget_" ) ) {
+ s.remove( 0, QString( "qt_dead_widget_" ).length() );
+ ( (QDesignerAction*)action )->widget()->setName( s );
+ }
+ }
+
+ if ( action->inherits( "QDesignerAction" ) ) {
+ toolBar->insertAction( ( (QDesignerAction*)action )->widget(), action );
+ ( (QDesignerAction*)action )->widget()->installEventFilter( toolBar );
+ } else if ( action->inherits( "QDesignerActionGroup" ) ) {
+ if ( ( (QDesignerActionGroup*)action )->usesDropDown() ) {
+ toolBar->insertAction( ( (QDesignerActionGroup*)action )->widget(), action );
+ ( (QDesignerActionGroup*)action )->widget()->installEventFilter( toolBar );
+ }
+ } else if ( action->inherits( "QSeparatorAction" ) ) {
+ toolBar->insertAction( ( (QSeparatorAction*)action )->widget(), action );
+ ( (QSeparatorAction*)action )->widget()->installEventFilter( toolBar );
+ }
+ if ( !action->inherits( "QActionGroup" ) || ( (QActionGroup*)action )->usesDropDown()) {
+ if ( index == -1 )
+ toolBar->appendAction( action );
+ else
+ toolBar->insertAction( index, action );
+ toolBar->reInsert();
+ QObject::connect( action, SIGNAL( destroyed() ), toolBar, SLOT( actionRemoved() ) );
+ } else {
+ QObjectListIt it( *action->children() );
+ if ( action->children() ) {
+ int i = 0;
+ while ( it.current() ) {
+ QObject *o = it.current();
+ ++it;
+ if ( !o->inherits( "QAction" ) )
+ continue;
+ // ### fix it for nested actiongroups
+ if ( o->inherits( "QDesignerAction" ) ) {
+ QDesignerAction *ac = (QDesignerAction*)o;
+ toolBar->insertAction( ac->widget(), ac );
+ ac->widget()->installEventFilter( toolBar );
+ if ( index == -1 )
+ toolBar->appendAction( ac );
+ else
+ toolBar->insertAction( index + (i++), ac );
+ }
+ }
+ }
+ toolBar->reInsert();
+ QObject::connect( action, SIGNAL( destroyed() ), toolBar, SLOT( actionRemoved() ) );
+ }
+}
+
+void AddActionToToolBarCommand::unexecute()
+{
+ if ( action->inherits( "QDesignerAction" ) ) {
+ QString s = ( (QDesignerAction*)action )->widget()->name();
+ s.prepend( "qt_dead_widget_" );
+ ( (QDesignerAction*)action )->widget()->setName( s );
+ }
+
+ toolBar->removeAction( action );
+ action->removeFrom( toolBar );
+ QObject::disconnect( action, SIGNAL( destroyed() ), toolBar, SLOT( actionRemoved() ) );
+ if ( !action->inherits( "QActionGroup" ) || ( (QActionGroup*)action )->usesDropDown()) {
+ action->removeEventFilter( toolBar );
+ } else {
+ if ( action->children() ) {
+ QObjectListIt it( *action->children() );
+ while ( it.current() ) {
+ QObject *o = it.current();
+ ++it;
+ if ( !o->inherits( "QAction" ) )
+ continue;
+ if ( o->inherits( "QDesignerAction" ) ) {
+ o->removeEventFilter( toolBar );
+ toolBar->removeAction( (QAction*)o );
+ }
+ }
+ }
+ }
+}
+
+// ------------------------------------------------------------
+
+AddActionToPopupCommand::AddActionToPopupCommand( const QString &n, FormWindow *fw,
+ QAction *a, QDesignerPopupMenu *p, int idx )
+ : Command( n, fw ), action( a ), popup( p ), index( idx )
+{
+}
+
+void AddActionToPopupCommand::execute()
+{
+ if ( action->inherits( "QActionGroup" ) ) {
+ if ( ( (QActionGroup*)action )->usesDropDown() ) {
+ action->addTo( popup );
+ popup->insertAction( index, action );
+ } else {
+ action->addTo( popup );
+ if ( action->children() ) {
+ QObjectListIt it( *action->children() );
+ int i = 0;
+ while ( it.current() ) {
+ QObject *o = it.current();
+ ++it;
+ if ( !o->inherits( "QAction" ) )
+ continue;
+ QDesignerAction *ac = (QDesignerAction*)o;
+ popup->insertAction( index + (i++), ac );
+ }
+ }
+ }
+ popup->reInsert();
+ QObject::connect( action, SIGNAL( destroyed() ), popup, SLOT( actionRemoved() ) );
+ } else {
+ if ( !action->inherits( "QDesignerAction" ) || ( (QDesignerAction*)action )->supportsMenu() ) {
+ action->addTo( popup );
+ popup->insertAction( index, action );
+ popup->reInsert();
+ QObject::connect( action, SIGNAL( destroyed() ), popup, SLOT( actionRemoved() ) );
+ }
+ }
+}
+
+void AddActionToPopupCommand::unexecute()
+{
+ action->removeFrom( popup );
+ popup->removeAction( action );
+ QObject::disconnect( action, SIGNAL( destroyed() ), popup, SLOT( actionRemoved() ) );
+ if ( !action->inherits( "QActionGroup" ) || ( (QActionGroup*)action )->usesDropDown()) {
+ action->removeEventFilter( popup );
+ } else {
+ if ( action->children() ) {
+ QObjectListIt it( *action->children() );
+ while ( it.current() ) {
+ QObject *o = it.current();
+ ++it;
+ if ( !o->inherits( "QAction" ) )
+ continue;
+ if ( o->inherits( "QDesignerAction" ) ) {
+ o->removeEventFilter( popup );
+ popup->removeAction( (QAction*)o );
+ }
+ }
+ }
+ }
+}
+
+// ------------------------------------------------------------
+
+AddMenuCommand::AddMenuCommand( const QString &n, FormWindow *fw, QMainWindow *mw )
+ : Command( n, fw ), menuBar( 0 ), popup( 0 ), mainWindow( mw ), id( -1 ), name( "Menu" )
+{
+}
+
+void AddMenuCommand::execute()
+{
+ if ( !popup ) {
+ QString n = "PopupMenu";
+ popup = new QDesignerPopupMenu( mainWindow );
+ formWindow()->unify( popup, n, true );
+ popup->setName( n );
+ }
+ if ( !mainWindow->child( 0, "QMenuBar" ) ) {
+ menuBar = new QDesignerMenuBar( (QWidget*)mainWindow );
+ menuBar->setName( "menubar" );
+ } else {
+ menuBar = (QDesignerMenuBar*)mainWindow->menuBar();
+ }
+ if ( id == -1 )
+ id = mainWindow->menuBar()->insertItem( name, popup );
+ else
+ id = mainWindow->menuBar()->insertItem( name, popup, id, index );
+ formWindow()->killAccels( formWindow() );
+}
+
+void AddMenuCommand::unexecute()
+{
+ if ( !popup || !menuBar )
+ return;
+ menuBar->removeItem( id );
+ formWindow()->killAccels( formWindow() );
+}
+
+// ------------------------------------------------------------
+
+RenameMenuCommand::RenameMenuCommand( const QString &n, FormWindow *fw, QDesignerMenuBar *mb,
+ int i, const QString &on, const QString &nn )
+ : Command( n, fw ), menuBar( mb ), id( i ), oldName( on ), newName( nn )
+{
+}
+
+void RenameMenuCommand::execute()
+{
+ menuBar->changeItem( id, newName );
+ formWindow()->killAccels( formWindow() );
+}
+
+void RenameMenuCommand::unexecute()
+{
+ menuBar->changeItem( id, oldName );
+ formWindow()->killAccels( formWindow() );
+}
+
+// ------------------------------------------------------------
+
+MoveMenuCommand::MoveMenuCommand( const QString &n, FormWindow *fw, QDesignerMenuBar *mb,
+ QDesignerPopupMenu *p, int fidx, int tidx, const QString &txt )
+ : Command( n, fw ), menuBar( mb ), popup( p ), fromIdx( fidx ), toIdx( tidx ), text( txt )
+{
+}
+
+void MoveMenuCommand::execute()
+{
+ menuBar->removeItem( menuBar->idAt( fromIdx ) );
+ menuBar->insertItem( text, popup, -1, toIdx );
+ formWindow()->killAccels( formWindow() );
+}
+
+void MoveMenuCommand::unexecute()
+{
+ menuBar->removeItem( menuBar->idAt( toIdx ) );
+ menuBar->insertItem( text, popup, -1, fromIdx );
+ formWindow()->killAccels( formWindow() );
+}
+
+// ------------------------------------------------------------
+
+AddToolBarCommand::AddToolBarCommand( const QString &n, FormWindow *fw, QMainWindow *mw )
+ : Command( n, fw ), toolBar( 0 ), mainWindow( mw )
+{
+}
+
+void AddToolBarCommand::execute()
+{
+ if ( !toolBar ) {
+ toolBar = new QDesignerToolBar( mainWindow );
+ QString n = "Toolbar";
+ formWindow()->unify( toolBar, n, true );
+ toolBar->setName( n );
+ mainWindow->addToolBar( toolBar, n );
+ } else {
+ toolBar->show();
+ }
+}
+
+void AddToolBarCommand::unexecute()
+{
+ toolBar->hide();
+}
+#include "command.moc"
diff --git a/kommander/editor/command.h b/kommander/editor/command.h
new file mode 100644
index 00000000..80a3e569
--- /dev/null
+++ b/kommander/editor/command.h
@@ -0,0 +1,931 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef COMMAND_H
+#define COMMAND_H
+
+#include "metadatabase.h"
+#include "layout.h"
+
+#include <qstring.h>
+#include <qrect.h>
+#include <qvaluelist.h>
+#include <qvariant.h>
+#include <qobject.h>
+#include <qlistview.h>
+#include <qptrlist.h>
+#include <qmap.h>
+
+class QWizard;
+class QTabWidget;
+class Command;
+class QWidget;
+class FormWindow;
+class PropertyEditor;
+class QListBox;
+class QIconView;
+class QMultiLineEdit;
+class QTable;
+class QAction;
+class QDesignerToolBar;
+class QMainWindow;
+class QDesignerPopupMenu;
+class QDesignerMenuBar;
+class QToolBox;
+
+class Command : public Qt
+{
+public:
+ Command( const QString &n, FormWindow *fw );
+ virtual ~Command();
+
+ enum Type {
+ Resize,
+ Insert,
+ Move,
+ Delete,
+ SetProperty,
+ LayoutHorizontal,
+ LayoutVertical,
+ LayoutHorizontalSplitter,
+ LayoutVerticalSplitter,
+ LayoutGrid,
+ BreakLayout,
+ Macro,
+ AddTabPage,
+ DeleteTabPage,
+ MoveTabPage,
+ AddWizardPage,
+ DeleteWizardPage,
+ SwapWizardPages,
+ RenameWizardPage,
+ AddConnection,
+ RemoveConnection,
+ AddSlot,
+ RemoveSlot,
+ Lower,
+ Raise,
+ Paste,
+ TabOrder,
+ PopulateListBox,
+ PopulateIconView,
+ PopulateListView,
+ PopulateMultiLineEdit,
+ PopulateTable,
+ AddActionToToolBar,
+ RemoveActionFromToolBar,
+ AddActionToPopup,
+ RemoveActionFromPopup,
+ AddMenu,
+ RemoveMenu,
+ RenameMenu,
+ MoveMenu,
+ AddToolBar,
+ RemoveToolBar,
+ AddToolBoxPage,
+ DeleteToolBoxPage
+ };
+
+ QString name() const;
+
+ virtual void execute() = 0;
+ virtual void unexecute() = 0;
+ virtual Type type() const = 0;
+ virtual void merge( Command *c );
+ virtual bool canMerge( Command *c );
+
+ FormWindow *formWindow() const;
+
+private:
+ QString cmdName;
+ FormWindow *formWin;
+
+};
+
+
+class CommandHistory : public QObject
+{
+ Q_OBJECT
+
+public:
+ CommandHistory( int s );
+
+ void addCommand( Command *cmd, bool tryCompress = FALSE );
+ void undo();
+ void redo();
+
+ void emitUndoRedo();
+
+ void setModified( bool m );
+ bool isModified() const;
+
+public slots:
+ void checkCompressedCommand();
+
+signals:
+ void undoRedoChanged( bool undoAvailable, bool redoAvailable,
+ const QString &undoCmd, const QString &redoCmd );
+ void modificationChanged( bool m );
+
+private:
+ QPtrList<Command> history;
+ int current, steps;
+ bool modified;
+ int savedAt;
+ Command *compressedCommand;
+
+};
+
+class ResizeCommand : public Command
+{
+public:
+ ResizeCommand( const QString &n, FormWindow *fw,
+ QWidget *w, const QRect &oldr, const QRect &nr );
+
+ void execute();
+ void unexecute();
+ Type type() const { return Resize; }
+
+private:
+ QWidget *widget;
+ QRect oldRect, newRect;
+
+};
+
+class InsertCommand : public Command
+{
+public:
+ InsertCommand( const QString &n, FormWindow *fw, QWidget *w, const QRect &g );
+
+ void execute();
+ void unexecute();
+ Type type() const { return Insert; }
+
+private:
+ QWidget *widget;
+ QRect geometry;
+
+};
+
+class MoveCommand : public Command
+{
+public:
+ MoveCommand( const QString &n, FormWindow *fw,
+ const QWidgetList &w,
+ const QValueList<QPoint> op,
+ const QValueList<QPoint> np,
+ QWidget *opr, QWidget *npr );
+ void execute();
+ void unexecute();
+ Type type() const { return Move; }
+ void merge( Command *c );
+ bool canMerge( Command *c );
+
+private:
+ QWidgetList widgets;
+ QValueList<QPoint> oldPos, newPos;
+ QWidget *oldParent, *newParent;
+
+};
+
+class DeleteCommand : public Command
+{
+public:
+ DeleteCommand( const QString &n, FormWindow *fw,
+ const QWidgetList &w );
+ void execute();
+ void unexecute();
+ Type type() const { return Delete; }
+
+private:
+ QWidgetList widgets;
+ QMap< QWidget*, QValueList<MetaDataBase::Connection> > connections;
+
+};
+
+class SetPropertyCommand : public Command
+{
+public:
+ SetPropertyCommand( const QString &n, FormWindow *fw,
+ QObject *w, PropertyEditor *e,
+ const QString &pn, const QVariant &ov,
+ const QVariant &nv, const QString &ncut,
+ const QString &ocut,
+ bool reset = FALSE );
+
+ void execute();
+ void unexecute();
+ Type type() const { return SetProperty; }
+ void merge( Command *c );
+ bool canMerge( Command *c );
+ bool checkProperty();
+
+private:
+ void setProperty( const QVariant &v, const QString &currentItemText, bool select = TRUE );
+
+ QObject *widget;
+ PropertyEditor *editor;
+ QString propName;
+ QVariant oldValue, newValue;
+ QString oldCurrentItemText, newCurrentItemText;
+ bool wasChanged;
+ bool isResetCommand;
+
+};
+
+class LayoutHorizontalCommand : public Command
+{
+public:
+ LayoutHorizontalCommand( const QString &n, FormWindow *fw,
+ QWidget *parent, QWidget *layoutBase,
+ const QWidgetList &wl );
+
+ void execute();
+ void unexecute();
+ Type type() const { return LayoutHorizontal; }
+
+private:
+ HorizontalLayout layout;
+
+};
+
+class LayoutHorizontalSplitCommand : public Command
+{
+public:
+ LayoutHorizontalSplitCommand( const QString &n, FormWindow *fw,
+ QWidget *parent, QWidget *layoutBase,
+ const QWidgetList &wl );
+
+ void execute();
+ void unexecute();
+ Type type() const { return LayoutHorizontalSplitter; }
+
+private:
+ HorizontalLayout layout;
+
+};
+
+class LayoutVerticalCommand : public Command
+{
+public:
+ LayoutVerticalCommand( const QString &n, FormWindow *fw,
+ QWidget *parent, QWidget *layoutBase,
+ const QWidgetList &wl );
+
+ void execute();
+ void unexecute();
+ Type type() const { return LayoutVertical; }
+
+private:
+ VerticalLayout layout;
+
+};
+
+class LayoutVerticalSplitCommand : public Command
+{
+public:
+ LayoutVerticalSplitCommand( const QString &n, FormWindow *fw,
+ QWidget *parent, QWidget *layoutBase,
+ const QWidgetList &wl );
+
+ void execute();
+ void unexecute();
+ Type type() const { return LayoutVerticalSplitter; }
+
+private:
+ VerticalLayout layout;
+
+};
+
+class LayoutGridCommand : public Command
+{
+public:
+ LayoutGridCommand( const QString &n, FormWindow *fw,
+ QWidget *parent, QWidget *layoutBase,
+ const QWidgetList &wl, int xres, int yres );
+
+ void execute();
+ void unexecute();
+ Type type() const { return LayoutGrid; }
+
+private:
+ GridLayout layout;
+
+};
+
+class BreakLayoutCommand : public Command
+{
+public:
+ BreakLayoutCommand( const QString &n, FormWindow *fw,
+ QWidget *layoutBase, const QWidgetList &wl );
+
+ void execute();
+ void unexecute();
+ Type type() const { return BreakLayout; }
+
+private:
+ Layout *layout;
+ int spacing;
+ int margin;
+ QWidget *lb;
+ QWidgetList widgets;
+
+};
+
+class MacroCommand : public Command
+{
+public:
+ MacroCommand( const QString &n, FormWindow *fw,
+ const QPtrList<Command> &cmds );
+
+ void execute();
+ void unexecute();
+ Type type() const { return Macro; }
+
+private:
+ QPtrList<Command> commands;
+
+};
+
+class AddTabPageCommand : public Command
+{
+public:
+ AddTabPageCommand( const QString &n, FormWindow *fw,
+ QTabWidget *tw, const QString &label );
+
+ void execute();
+ void unexecute();
+ Type type() const { return AddTabPage; }
+
+private:
+ QTabWidget *tabWidget;
+ int index;
+ QWidget *tabPage;
+ QString tabLabel;
+
+};
+
+class DeleteTabPageCommand : public Command
+{
+public:
+ DeleteTabPageCommand( const QString &n, FormWindow *fw,
+ QTabWidget *tw, QWidget *page );
+
+ void execute();
+ void unexecute();
+ Type type() const { return DeleteTabPage; }
+
+private:
+ QTabWidget *tabWidget;
+ int index;
+ QWidget *tabPage;
+ QString tabLabel;
+
+};
+
+class AddToolBoxPageCommand : public Command
+{
+public:
+ AddToolBoxPageCommand( const QString &n, FormWindow *fw,
+ QToolBox *tw, const QString &label );
+
+ void execute();
+ void unexecute();
+ Type type() const { return AddToolBoxPage; }
+
+private:
+ QToolBox *toolBox;
+ int index;
+ QWidget *page;
+ QString label;
+
+};
+
+class DeleteToolBoxPageCommand : public Command
+{
+public:
+ DeleteToolBoxPageCommand( const QString &n, FormWindow *fw,
+ QToolBox *tw, QWidget *page );
+
+ void execute();
+ void unexecute();
+ Type type() const { return DeleteToolBoxPage; }
+
+private:
+ QToolBox *toolBox;
+ int index;
+ QWidget *page;
+ QString label;
+
+};
+class MoveTabPageCommand : public Command
+{
+public:
+ MoveTabPageCommand(const QString &n, FormWindow *fw,
+ QTabWidget *tw, QWidget *page, const QString& label, int nIndex, int oIndex );
+
+ void execute();
+ void unexecute();
+ Type type() const { return MoveTabPage; }
+
+private:
+ QTabWidget *tabWidget;
+ int newIndex, oldIndex;
+ QWidget *tabPage;
+ QString tabLabel;
+
+};
+
+class AddWizardPageCommand : public Command
+{
+public:
+ AddWizardPageCommand( const QString &n, FormWindow *fw,
+ QWizard *w, const QString &label, int index = -1, bool show = TRUE );
+
+ void execute();
+ void unexecute();
+ Type type() const { return AddWizardPage; }
+
+private:
+ QWizard *wizard;
+ int index;
+ bool show;
+ QWidget *page;
+ QString pageLabel;
+
+};
+
+class DeleteWizardPageCommand : public Command
+{
+public:
+ DeleteWizardPageCommand( const QString &n, FormWindow *fw,
+ QWizard *w, int index, bool show = TRUE );
+
+ void execute();
+ void unexecute();
+ Type type() const { return DeleteWizardPage; }
+
+private:
+ QWizard *wizard;
+ int index;
+ bool show;
+ QWidget *page;
+ QString pageLabel;
+
+};
+
+class RenameWizardPageCommand : public Command
+{
+public:
+ RenameWizardPageCommand( const QString &n, FormWindow *fw,
+ QWizard *w, int index, const QString& name );
+
+ void execute();
+ void unexecute();
+ Type type() const { return RenameWizardPage; }
+
+private:
+ QWizard *wizard;
+ int index;
+ QWidget *page;
+ QString label;
+
+};
+
+class SwapWizardPagesCommand : public Command
+{
+public:
+ SwapWizardPagesCommand( const QString &n, FormWindow *fw,
+ QWizard *w, int index1, int index2 );
+
+ void execute();
+ void unexecute();
+ Type type() const { return SwapWizardPages; }
+
+private:
+ QWizard *wizard;
+ int index1, index2;
+
+};
+
+class AddConnectionCommand : public Command
+{
+public:
+ AddConnectionCommand( const QString &name, FormWindow *fw,
+ MetaDataBase::Connection c );
+
+ void execute();
+ void unexecute();
+ Type type() const { return AddConnection; }
+
+private:
+ MetaDataBase::Connection connection;
+
+};
+
+class RemoveConnectionCommand : public Command
+{
+public:
+ RemoveConnectionCommand( const QString &name, FormWindow *fw,
+ MetaDataBase::Connection c );
+
+ void execute();
+ void unexecute();
+ Type type() const { return RemoveConnection; }
+
+private:
+ MetaDataBase::Connection connection;
+
+};
+
+class AddSlotCommand : public Command
+{
+public:
+ AddSlotCommand( const QString &name, FormWindow *fw, const QCString &s, const QString& spec,
+ const QString &a, const QString &l, const QString &rt );
+
+ void execute();
+ void unexecute();
+ Type type() const { return AddSlot; }
+
+private:
+ QCString slot;
+ QString specifier;
+ QString access;
+ QString language;
+ QString returnType;
+
+};
+
+class RemoveSlotCommand : public Command
+{
+public:
+ RemoveSlotCommand( const QString &name, FormWindow *fw, const QCString &s, const QString& spec,
+ const QString &a, const QString &l, const QString &rt );
+
+ void execute();
+ void unexecute();
+ Type type() const { return RemoveSlot; }
+
+private:
+ QCString slot;
+ QString specifier;
+ QString access;
+ QString language;
+ QString returnType;
+
+};
+
+class LowerCommand : public Command
+{
+public:
+ LowerCommand( const QString &name, FormWindow *fw, const QWidgetList &w );
+
+ void execute();
+ void unexecute();
+ Type type() const { return Lower; }
+
+private:
+ QWidgetList widgets;
+
+};
+
+class RaiseCommand : public Command
+{
+public:
+ RaiseCommand( const QString &name, FormWindow *fw, const QWidgetList &w );
+
+ void execute();
+ void unexecute();
+ Type type() const { return Raise; }
+
+private:
+ QWidgetList widgets;
+
+};
+
+class PasteCommand : public Command
+{
+public:
+ PasteCommand( const QString &n, FormWindow *fw, const QWidgetList &w );
+
+ void execute();
+ void unexecute();
+ Type type() const { return Paste; }
+
+private:
+ QWidgetList widgets;
+
+};
+
+class TabOrderCommand : public Command
+{
+public:
+ TabOrderCommand( const QString &n, FormWindow *fw, const QWidgetList &ol, const QWidgetList &nl );
+
+ void execute();
+ void unexecute();
+ Type type() const { return TabOrder; }
+ void merge( Command *c );
+ bool canMerge( Command *c );
+
+private:
+ QWidgetList oldOrder, newOrder;
+
+};
+
+class PopulateListBoxCommand : public Command
+{
+public:
+ struct Item
+ {
+ QString text;
+ QPixmap pix;
+#if defined(Q_FULL_TEMPLATE_INSTANTIATION)
+ bool operator==( const Item & ) const { return FALSE; }
+#endif
+ };
+
+ PopulateListBoxCommand( const QString &n, FormWindow *fw,
+ QListBox *lb, const QValueList<Item> &items );
+ void execute();
+ void unexecute();
+ Type type() const { return PopulateListBox; }
+
+ bool operator==( const PopulateListBoxCommand & ) const;
+
+private:
+ QValueList<Item> oldItems, newItems;
+ QListBox *listbox;
+
+};
+
+class PopulateIconViewCommand : public Command
+{
+public:
+ struct Item
+ {
+ QString text;
+ QPixmap pix;
+#if defined(Q_FULL_TEMPLATE_INSTANTIATION)
+ bool operator==( const Item & ) const { return FALSE; }
+#endif
+ };
+
+ PopulateIconViewCommand( const QString &n, FormWindow *fw,
+ QIconView *iv, const QValueList<Item> &items );
+ void execute();
+ void unexecute();
+ Type type() const { return PopulateIconView; }
+
+ bool operator==( const PopulateIconViewCommand & ) const;
+
+private:
+ QValueList<Item> oldItems, newItems;
+ QIconView *iconview;
+
+};
+
+class PopulateListViewCommand : public Command
+{
+public:
+ PopulateListViewCommand( const QString &n, FormWindow *fw,
+ QListView *lv, QListView *from );
+ void execute();
+ void unexecute();
+ Type type() const { return PopulateListView; }
+ static void transferItems( QListView *from, QListView *to );
+
+ bool operator==( const PopulateListViewCommand & ) const;
+
+private:
+ QListView *oldItems, *newItems;
+ QListView *listview;
+
+};
+
+class PopulateMultiLineEditCommand : public Command
+{
+public:
+ PopulateMultiLineEditCommand( const QString &n, FormWindow *fw,
+ QMultiLineEdit *mle, const QString &txt );
+ void execute();
+ void unexecute();
+ Type type() const { return PopulateMultiLineEdit; }
+
+private:
+ QString newText, oldText;
+ QMultiLineEdit *mlined;
+ bool wasChanged;
+
+};
+
+class PopulateTableCommand : public Command
+{
+public:
+ struct Row
+ {
+ QString text;
+ QPixmap pix;
+#if defined(Q_FULL_TEMPLATE_INSTANTIATION)
+ bool operator==( const Row& ) const { return FALSE; }
+#endif
+ };
+
+ struct Column
+ {
+ QString text;
+ QPixmap pix;
+ QString field;
+#if defined(Q_FULL_TEMPLATE_INSTANTIATION)
+ bool operator==( const Column& ) const { return FALSE; }
+#endif
+ };
+
+ PopulateTableCommand( const QString &n, FormWindow *fw, QTable *t,
+ const QValueList<Row> &rows,
+ const QValueList<Column> &columns );
+
+ void execute();
+ void unexecute();
+ Type type() const { return PopulateTable; }
+
+private:
+ QValueList<Row> oldRows, newRows;
+ QValueList<Column> oldColumns, newColumns;
+ QTable *table;
+
+};
+
+class AddActionToToolBarCommand : public Command
+{
+public:
+ AddActionToToolBarCommand( const QString &n, FormWindow *fw,
+ QAction *a, QDesignerToolBar *tb, int idx );
+
+ void execute();
+ void unexecute();
+ Type type() const { return AddActionToToolBar; }
+
+private:
+ QAction *action;
+ QDesignerToolBar *toolBar;
+ int index;
+
+};
+
+class RemoveActionFromToolBarCommand : public AddActionToToolBarCommand
+{
+public:
+ RemoveActionFromToolBarCommand( const QString &n, FormWindow *fw,
+ QAction *a, QDesignerToolBar *tb, int idx )
+ : AddActionToToolBarCommand( n, fw, a, tb, idx ) {}
+
+ void execute() { AddActionToToolBarCommand::unexecute(); }
+ void unexecute() { AddActionToToolBarCommand::execute(); }
+ Type type() const { return RemoveActionFromToolBar; }
+
+};
+
+class AddActionToPopupCommand : public Command
+{
+public:
+ AddActionToPopupCommand( const QString &n, FormWindow *fw,
+ QAction *a, QDesignerPopupMenu *p, int idx );
+
+ void execute();
+ void unexecute();
+ Type type() const { return AddActionToPopup; }
+
+private:
+ QAction *action;
+ QDesignerPopupMenu *popup;
+ int index;
+
+};
+
+class RemoveActionFromPopupCommand : public AddActionToPopupCommand
+{
+public:
+ RemoveActionFromPopupCommand( const QString &n, FormWindow *fw,
+ QAction *a, QDesignerPopupMenu *p, int idx )
+ : AddActionToPopupCommand( n, fw, a, p, idx ) {}
+
+ void execute() { AddActionToPopupCommand::unexecute(); }
+ void unexecute() { AddActionToPopupCommand::execute(); }
+ Type type() const { return RemoveActionFromPopup; }
+
+};
+
+class AddMenuCommand : public Command
+{
+public:
+ AddMenuCommand( const QString &n, FormWindow *fw, QMainWindow *mw );
+
+ void execute();
+ void unexecute();
+ Type type() const { return AddMenu; }
+
+protected:
+ QDesignerMenuBar *menuBar;
+ QDesignerPopupMenu *popup;
+ QMainWindow *mainWindow;
+ int id;
+ int index;
+ QString name;
+
+};
+
+class RemoveMenuCommand : public AddMenuCommand
+{
+public:
+ RemoveMenuCommand( const QString &n, FormWindow *fw, QMainWindow *mw,
+ QDesignerMenuBar *mb, QDesignerPopupMenu *p, int i, int idx, const QString &mn )
+ : AddMenuCommand( n, fw, mw ) { menuBar = mb; popup = p; id = i; index = idx, name = mn; }
+
+ void execute() { AddMenuCommand::unexecute(); }
+ void unexecute() { AddMenuCommand::execute(); }
+ Type type() const { return RemoveMenu; }
+
+};
+
+class RenameMenuCommand : public Command
+{
+public:
+ RenameMenuCommand( const QString &n, FormWindow *fw, QDesignerMenuBar *mb,
+ int i, const QString &on, const QString &nn );
+
+ void execute();
+ void unexecute();
+ Type type() const { return RenameMenu; }
+
+private:
+ QDesignerMenuBar *menuBar;
+ int id;
+ QString oldName, newName;
+
+};
+
+class MoveMenuCommand : public Command
+{
+public:
+ MoveMenuCommand( const QString &n, FormWindow *fw, QDesignerMenuBar *mb,
+ QDesignerPopupMenu *p, int fidx, int tidx, const QString &txt );
+
+ void execute();
+ void unexecute();
+ Type type() const { return MoveMenu; }
+
+private:
+ QDesignerMenuBar *menuBar;
+ QDesignerPopupMenu *popup;
+ int fromIdx, toIdx;
+ QString text;
+
+};
+
+class AddToolBarCommand : public Command
+{
+public:
+ AddToolBarCommand( const QString &n, FormWindow *fw, QMainWindow *mw );
+
+ void execute();
+ void unexecute();
+ Type type() const { return AddToolBar; }
+
+protected:
+ QDesignerToolBar *toolBar;
+ QMainWindow *mainWindow;
+
+};
+
+class RemoveToolBarCommand : public AddToolBarCommand
+{
+public:
+ RemoveToolBarCommand( const QString &n, FormWindow *fw, QMainWindow *mw, QDesignerToolBar *tb )
+ : AddToolBarCommand( n, fw, mw ) { toolBar = tb; }
+
+ void execute() { AddToolBarCommand::unexecute(); }
+ void unexecute() { AddToolBarCommand::execute(); }
+ Type type() const { return RemoveToolBar; }
+
+};
+
+#endif
diff --git a/kommander/editor/connectioneditor.ui b/kommander/editor/connectioneditor.ui
new file mode 100644
index 00000000..d9e5a161
--- /dev/null
+++ b/kommander/editor/connectioneditor.ui
@@ -0,0 +1,418 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>ConnectionEditorBase</class>
+<comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>ConnectionEditorBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>780</width>
+ <height>538</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Edit Connections</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Edit Connections&lt;/b&gt;&lt;p&gt;Add and remove connections in the current form .&lt;/p&gt;&lt;p&gt;Select a signal and a corresponding slot then press the &lt;b&gt;Connect&lt;/b&gt;-button to create a connection.&lt;/p&gt;&lt;p&gt;Select a connection from the list then press the &lt;b&gt;Disconnect&lt;/b&gt;-button to delete the connection.&lt;/p&gt;</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KListView" row="3" column="0" rowspan="1" colspan="2">
+ <column>
+ <property name="text">
+ <string>Sender</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Signal</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Receiver</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Slot</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>connectionView</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="showSortIndicator">
+ <bool>true</bool>
+ </property>
+ <property name="fullWidth">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Displays the connections between the sender and the receiver.</string>
+ </property>
+ </widget>
+ <widget class="KListBox" row="1" column="1">
+ <property name="name">
+ <cstring>slotBox</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;A list of slots for the receiver.&lt;/b&gt;&lt;p&gt;The slots that are displayed are only those which have arguments that correspond with the arguments of the signal that is currently selected in the Signal-list.&lt;/b&gt;</string>
+ </property>
+ </widget>
+ <widget class="KListBox" row="1" column="0">
+ <property name="name">
+ <cstring>signalBox</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Displays the list of signals that the widget emits.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>labelSignal</cstring>
+ </property>
+ <property name="text">
+ <string>Si&amp;gnals:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>signalBox</cstring>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <property name="name">
+ <cstring>comboSender</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>labelSlot</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Slots:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>slotBox</cstring>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <property name="name">
+ <cstring>comboReceiver</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="4" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>disconnectButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Disconnect</string>
+ </property>
+ <property name="accel">
+ <string>Alt+D</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Remove the selected connection</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Remove the selected connection.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>71</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>okButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="accel">
+ <string>Alt+O</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and apply all the changes.</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>cancelButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="accel">
+ <string>Alt+C</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and discard any changes.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>230</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Connec&amp;tions:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>connectionView</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>231</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>connectButton</cstring>
+ </property>
+ <property name="text">
+ <string>Co&amp;nnect</string>
+ </property>
+ <property name="accel">
+ <string>Alt+N</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Create connection</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Create a connection between a signal and a slot.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>211</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<tabstops>
+ <tabstop>comboSender</tabstop>
+ <tabstop>signalBox</tabstop>
+ <tabstop>comboReceiver</tabstop>
+ <tabstop>slotBox</tabstop>
+ <tabstop>connectButton</tabstop>
+ <tabstop>connectionView</tabstop>
+ <tabstop>disconnectButton</tabstop>
+ <tabstop>okButton</tabstop>
+ <tabstop>cancelButton</tabstop>
+</tabstops>
+<slots>
+ <slot access="protected">init()</slot>
+ <slot access="protected">destroy()</slot>
+ <slot>addSlotClicked()</slot>
+ <slot access="protected">connectClicked()</slot>
+ <slot access="protected">connectionsChanged()</slot>
+ <slot access="protected">disconnectClicked()</slot>
+ <slot access="protected">receiverChanged( const QString &amp; )</slot>
+ <slot access="protected">okClicked()</slot>
+ <slot access="protected">signalChanged()</slot>
+ <slot access="protected">slotsChanged()</slot>
+ <slot access="protected">cancelClicked()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>klistview.h</includehint>
+ <includehint>klistbox.h</includehint>
+ <includehint>klistbox.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/kommander/editor/connectioneditorimpl.cpp b/kommander/editor/connectioneditorimpl.cpp
new file mode 100644
index 00000000..dafae5a7
--- /dev/null
+++ b/kommander/editor/connectioneditorimpl.cpp
@@ -0,0 +1,373 @@
+/**********************************************************************
+ This file is based on Qt Designer, Copyright (C) 2000 Trolltech AS. All rights reserved.
+
+ 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.
+
+ Modified for Kommander:
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+
+**********************************************************************/
+
+#include "connectioneditorimpl.h"
+#include "metadatabase.h"
+#include "formwindow.h"
+#include "mainwindow.h"
+#include "command.h"
+#include "widgetfactory.h"
+#include "pixmapchooser.h"
+#include <qmetaobject.h>
+#include <qlabel.h>
+#include <qregexp.h>
+
+#include <klistbox.h>
+#include <klistview.h>
+#include <kpushbutton.h>
+#include <kcombobox.h>
+#include <klocale.h>
+
+static const char *const ignore_slots[] = {
+ "destroyed()",
+ //"setCaption(const QString&)",
+ "setIcon(const QPixmap&)",
+ //"setIconText(const QString&)",
+ "setMouseTracking(bool)",
+ "clearFocus()",
+ "setUpdatesEnabled(bool)",
+ "update()",
+ "update(int,int,int,int)",
+ "update(const QRect&)",
+ "repaint()",
+ "repaint(bool)",
+ "repaint(int,int,int,int,bool)",
+ "repaint(const QRect&,bool)",
+ "repaint(const QRegion&,bool)",
+ "repaint(int,int,int,int)",
+ "repaint(const QRect&)",
+ "repaint(const QRegion&)",
+ //"show()",
+ //"hide()",
+ "iconify()",
+ "showMinimized()",
+ "showMaximized()",
+ "showFullScreen()",
+ "showNormal()",
+ "polish()",
+ "constPolish()",
+ //"raise()",
+ //"lower()",
+ "stackUnder(QWidget*)",
+ //"move(int,int)",
+ "move(const QPoint&)",
+ //"resize(int,int)",
+ "resize(const QSize&)",
+ //"setGeometry(int,int,int,int)",
+ "setGeometry(const QRect&)",
+ "focusProxyDestroyed()",
+ "showExtension(bool)",
+ "setUpLayout()",
+ //"showDockMenu(const QPoint&)",
+ "init()",
+ "destroy()",
+ "deleteLater()",
+ 0
+};
+
+static const char *const ignore_signals[] = {
+ "destroyed()",
+ "destroyed(QObject*)",
+ "accessibilityChanged(int)",
+ "accessibilityChanged(int,int)",
+ 0
+};
+
+
+ConnectionEditor::ConnectionEditor(QWidget* parent, QObject* sndr, QObject* rcvr, FormWindow* fw)
+ : ConnectionEditorBase(parent, 0, true), m_formWindow(fw)
+{
+ if (!rcvr || rcvr == m_formWindow)
+ rcvr = m_formWindow->mainContainer();
+ if (!sndr || sndr == m_formWindow)
+ sndr = m_formWindow->mainContainer();
+ m_sender = sndr;
+ m_receiver = rcvr;
+
+ /* Create widget list */
+ QStringList lst;
+ lst << m_formWindow->name();
+ for (QPtrDictIterator<QWidget> it(*m_formWindow->widgets()); it.current(); ++it)
+ {
+ if (it.current()->isVisibleTo(this) &&
+ !it.current()->inherits("QLayoutWidget") &&
+ !it.current()->inherits("Spacer") &&
+ qstrcmp(it.current()->name(), "central widget") &&
+ !m_formWindow->isMainContainer(it.current()) &&
+ !lst.contains(it.current()->name()))
+ lst << it.current()->name();
+ }
+
+ // Fill receiver combos with widget list
+// fillWidgetList(comboReceiver, lst, m_receiver->name());
+
+ // Fill receiver combos with widget and action list
+ for (QPtrListIterator<QAction> it(m_formWindow->actionList()); it.current(); ++it)
+ lst << it.current()->name();
+ lst.sort();
+ fillWidgetList(comboReceiver, lst, m_receiver->name());
+ fillWidgetList(comboSender, lst, m_sender->name());
+ senderChanged(m_sender->name());
+ fillConnectionsList();
+ updateConnectButton();
+ updateDisconnectButton();
+
+ // Connections
+ connect(comboSender, SIGNAL(activated(const QString&)), SLOT(senderChanged(const QString&)));
+ connect(comboReceiver, SIGNAL(activated(const QString&)), SLOT(receiverChanged(const QString&)));
+ connect(signalBox, SIGNAL(selectionChanged()), SLOT(updateConnectButton()));
+ connect(slotBox, SIGNAL(selectionChanged()), SLOT(updateConnectButton()));
+ connect(connectButton, SIGNAL(clicked()), SLOT(connectClicked()));
+ connect(disconnectButton, SIGNAL(clicked()), SLOT(disconnectClicked()));
+ connect(okButton, SIGNAL(clicked()), SLOT(okClicked()));
+ connect(cancelButton, SIGNAL(clicked()), SLOT(cancelClicked()));
+ connect(signalBox, SIGNAL(doubleClicked(QListBoxItem*)), SLOT(connectClicked()));
+ connect(slotBox, SIGNAL(doubleClicked(QListBoxItem*)), SLOT(connectClicked()));
+}
+
+ConnectionEditor::~ConnectionEditor()
+{
+}
+
+bool ConnectionEditor::isSignalIgnored(const char *signal) const
+{
+ for (int i = 0; ignore_signals[i]; i++)
+ if (!qstrcmp(signal, ignore_signals[i]))
+ return true;
+ return false;
+}
+
+bool ConnectionEditor::isSlotIgnored(const QMetaData* md)
+{
+ if (md->access != QMetaData::Public && (md->access != QMetaData::Protected ||
+ !m_formWindow->isMainContainer((QWidget*)m_receiver)))
+ return true;
+ for (int i = 0; ignore_slots[i]; i++)
+ if (!qstrcmp(md->name, ignore_slots[i]))
+ return true;
+ if (!m_formWindow->isMainContainer((QWidget *)m_receiver) && !qstrcmp(md->name, "close()"))
+ return true;
+ if (!qstrcmp(md->name, "setFocus()") && m_receiver->isWidgetType() &&
+ ((QWidget*)m_receiver)->focusPolicy() == QWidget::NoFocus)
+ return true;
+ for (int i = 0; i<comboSender->count(); i++)
+ if (checkConnectArgs(MetaDataBase::normalizeSlot(signalBox->text(i)).latin1(), m_receiver, md->name))
+ return false;
+ return true;
+}
+
+QObject* ConnectionEditor::objectByName(const QString& s) const
+{
+ for (QPtrDictIterator <QWidget> it(*m_formWindow->widgets()); it.current(); ++it)
+ if (QString(it.current()->name()) == s)
+ return it.current();
+
+ for (QPtrListIterator<QAction> it(m_formWindow->actionList()); it.current(); ++it)
+ if (QString(it.current()->name()) == s)
+ return it.current();
+
+ return 0;
+}
+
+
+void ConnectionEditor::connectClicked()
+{
+ if (signalBox->currentItem() == -1 || slotBox->currentItem() == -1)
+ return;
+ if (hasConnection(m_sender->name(), signalBox->currentText(), m_receiver->name(),
+ slotBox->currentText()))
+ return;
+ MetaDataBase::Connection conn;
+ conn.sender = m_sender;
+ conn.signal = signalBox->currentText();
+ conn.slot = slotBox->currentText();
+ conn.receiver = m_receiver;
+ KListViewItem *i = new KListViewItem(connectionView, m_sender->name(), conn.signal, m_receiver->name(),
+ conn.slot);
+ i->setPixmap(0, PixmapChooser::loadPixmap("connecttool.xpm"));
+ connectionView->setCurrentItem(i);
+ connectionView->setSelected(i, true);
+ m_connections.insert(i, conn);
+ connectButton->setEnabled(false);
+ updateDisconnectButton();
+}
+
+void ConnectionEditor::disconnectClicked()
+{
+ QListViewItem *p_item = connectionView->currentItem();
+ if (!p_item)
+ return;
+
+ QMap <QListViewItem*, MetaDataBase::Connection>::Iterator it = m_connections.find(p_item);
+ if (it != m_connections.end())
+ m_connections.remove(it);
+ delete p_item;
+ if (connectionView->currentItem())
+ connectionView->setSelected(connectionView->currentItem(), true);
+ updateConnectButton();
+ updateDisconnectButton();
+}
+
+void ConnectionEditor::okClicked()
+{
+ MacroCommand* rmConn = 0, *addConn = 0;
+ QString n = i18n("Connect/Disconnect the signals and slots of '%1' and '%2'").arg(m_sender->name()).
+ arg(m_receiver->name());
+ QValueList <MetaDataBase::Connection>::Iterator cit;
+ if (!m_oldConnections.isEmpty())
+ {
+ QPtrList <Command> commands;
+ for (cit = m_oldConnections.begin(); cit != m_oldConnections.end(); ++cit)
+ commands.append(new RemoveConnectionCommand(i18n("Remove Connection"), m_formWindow, *cit));
+ rmConn = new MacroCommand(i18n("Remove Connections"), m_formWindow, commands);
+ }
+ if (!m_connections.isEmpty())
+ {
+ QMap<QListViewItem*, MetaDataBase::Connection>::Iterator it = m_connections.begin();
+ QPtrList<Command> commands;
+ for (; it != m_connections.end(); ++it)
+ {
+ MetaDataBase::Connection conn = *it;
+ commands.append(new AddConnectionCommand(i18n("Add Connection"), m_formWindow, conn));
+ }
+ addConn = new MacroCommand(i18n("Add Connections"), m_formWindow, commands);
+ }
+
+ if (rmConn || addConn)
+ {
+ QPtrList < Command > commands;
+ if (rmConn)
+ commands.append(rmConn);
+ if (addConn)
+ commands.append(addConn);
+ MacroCommand *cmd = new MacroCommand(n, m_formWindow, commands);
+ m_formWindow->commandHistory()->addCommand(cmd);
+ cmd->execute();
+ }
+
+ accept();
+}
+
+void ConnectionEditor::cancelClicked()
+{
+ reject();
+}
+
+void ConnectionEditor::senderChanged(const QString& s)
+{
+ QObject* p_object = objectByName(s);
+ if (!p_object)
+ return;
+ m_sender = p_object;
+ QStrList p_sigs = m_sender->metaObject()->signalNames(true);
+ signalBox->clear();
+ for (QStrListIterator it(p_sigs); it.current(); ++it)
+ if (!isSignalIgnored(it.current()) && !signalBox->findItem(it.current(), Qt::ExactMatch))
+ signalBox->insertItem(it.current());
+ if (m_sender == m_formWindow->mainContainer())
+ signalBox->insertStringList(MetaDataBase::signalList(m_formWindow));
+ signalBox->sort();
+ signalBox->setCurrentItem(signalBox->firstItem());
+ // Update slots - some may (not) have their signal equivalents now.
+ receiverChanged(m_receiver->name());
+}
+
+void ConnectionEditor::receiverChanged(const QString& s)
+{
+ QObject* p_object = objectByName(s);
+ if (!p_object)
+ return;
+ m_receiver = p_object;
+ int n = m_receiver->metaObject()->numSlots(true);
+ slotBox->clear();
+ for (int i = 0; i < n; ++i)
+ {
+ const QMetaData* md = m_receiver->metaObject()->slot(i, true);
+ if (!isSlotIgnored(md) && !slotBox->findItem(md->name, Qt::ExactMatch))
+ slotBox->insertItem(md->name);
+ }
+ slotBox->sort();
+ slotBox->setCurrentItem(slotBox->firstItem());
+ updateConnectButton();
+}
+
+void ConnectionEditor::updateConnectButton()
+{
+ bool itemsSelected = signalBox->currentItem() != -1 && slotBox->currentItem() != -1;
+ bool notConnected = !itemsSelected || !hasConnection(m_sender->name(), signalBox->currentText(),
+ m_receiver->name(), slotBox->currentText());
+ bool connectionAllowed = notConnected && checkConnectArgs(MetaDataBase::normalizeSlot(signalBox->currentText()).latin1(),
+ m_receiver, MetaDataBase::normalizeSlot(slotBox->currentText()).latin1());
+ connectButton->setEnabled(itemsSelected && notConnected && connectionAllowed);
+}
+
+void ConnectionEditor::updateDisconnectButton()
+{
+ disconnectButton->setEnabled((connectionView->currentItem()));
+}
+
+bool ConnectionEditor::hasConnection(const QString& snder, const QString& signal,
+ const QString& rcvr, const QString& slot) const
+{
+ for (QListViewItemIterator it(connectionView); it.current(); ++it)
+ if (it.current()->text(0) == snder &&
+ it.current()->text(1) == signal &&
+ it.current()->text(2) == rcvr && it.current()->text(3) == slot)
+ return true;
+ return false;
+}
+
+void ConnectionEditor::fillConnectionsList()
+{
+ connectionView->clear();
+ m_connections.clear();
+ m_oldConnections = MetaDataBase::connections(m_formWindow);
+ if (!m_oldConnections.isEmpty())
+ {
+ QValueList <MetaDataBase::Connection>::Iterator it = m_oldConnections.begin();
+ for (; it != m_oldConnections.end(); ++it)
+ {
+ if (m_formWindow->isMainContainer((QWidget*)(*it).receiver) &&
+ !MetaDataBase::hasSlot(m_formWindow, MetaDataBase::normalizeSlot((*it).slot).latin1()))
+ continue;
+ MetaDataBase::Connection conn = *it;
+ KListViewItem *i = new KListViewItem(connectionView, conn.sender->name(), conn.signal,
+ conn.receiver->name(), conn.slot);
+ i->setPixmap(0, PixmapChooser::loadPixmap("connecttool.xpm"));
+ m_connections.insert(i, conn);
+ }
+ }
+ connectionView->setCurrentItem(connectionView->firstChild());
+ if (connectionView->currentItem())
+ connectionView->setSelected(connectionView->currentItem(), true);
+}
+
+void ConnectionEditor::fillWidgetList(KComboBox* a_combo, const QStringList& items, const QString& defaultWidget)
+{
+ a_combo->insertStringList(items);
+ for (int i = 0; i < a_combo->count(); ++i)
+ if (a_combo->text(i) == defaultWidget)
+ {
+ a_combo->setCurrentItem(i);
+ return;
+ }
+ if (a_combo->count())
+ a_combo->setCurrentItem(0);
+}
+
+#include "connectioneditorimpl.moc"
diff --git a/kommander/editor/connectioneditorimpl.h b/kommander/editor/connectioneditorimpl.h
new file mode 100644
index 00000000..95c6887b
--- /dev/null
+++ b/kommander/editor/connectioneditorimpl.h
@@ -0,0 +1,76 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef CONNECTIONEDITORIMPL_H
+#define CONNECTIONEDITORIMPL_H
+
+#include "connectioneditor.h"
+#include "metadatabase.h"
+
+#include <qmap.h>
+
+class QListViewItem;
+class FormWindow;
+
+class ConnectionEditor : public ConnectionEditorBase
+{
+Q_OBJECT public:
+ ConnectionEditor(QWidget* parent, QObject* sender, QObject* receiver, FormWindow* fw);
+ ~ConnectionEditor();
+
+protected slots:
+ // Add current pair <signal, slot> to the list
+ void connectClicked();
+ // Remove current pair <signal, slot> to the list
+ void disconnectClicked();
+ // Lists all connections defined in current dialog
+ void fillConnectionsList();
+ // Lists all widgets in sender or receiver combo
+ void fillWidgetList(KComboBox* a_combo, const QStringList& items, const QString& defaultWidget);
+ // Sender widget was changed - update signal list
+ void senderChanged(const QString & s);
+ // Receiver widget was changed - update slot list
+ void receiverChanged(const QString & s);
+ // Enable/disable 'Connect' button when pair <signal,slot> changes
+ void updateConnectButton();
+ // Enable/disable 'Disconnect' button when selection changes
+ void updateDisconnectButton();
+ // Accept and close button
+ void okClicked();
+ // Cancel and close button
+ void cancelClicked();
+
+private:
+ // Whether given signal should appear in the signal list
+ bool isSignalIgnored(const char*) const;
+ // Whether given slot should appear in the slot list
+ bool isSlotIgnored(const QMetaData* md);
+ // Finds widget by name
+ QObject* objectByName(const QString& s) const;
+ bool hasConnection(const QString & snder, const QString & signal,
+ const QString & rcvr, const QString & slot) const;
+ QMap <QListViewItem*, MetaDataBase::Connection> m_connections;
+ QValueList <MetaDataBase::Connection> m_oldConnections;
+ QObject* m_sender;
+ QObject* m_receiver;
+ FormWindow* m_formWindow;
+};
+
+#endif
diff --git a/kommander/editor/createtemplate.ui b/kommander/editor/createtemplate.ui
new file mode 100644
index 00000000..a6034d03
--- /dev/null
+++ b/kommander/editor/createtemplate.ui
@@ -0,0 +1,222 @@
+<!DOCTYPE UI><UI>
+<class>CreateTemplate</class><comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>CreateTemplate</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>347</width>
+ <height>248</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Create Template</string>
+ </property>
+ <property stdset="1">
+ <name>sizeGripEnabled</name>
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget row="0" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Template &amp;name:</string>
+ </property>
+ <property>
+ <name>buddy</name>
+ <cstring>editName</cstring>
+ </property>
+ </widget>
+ <widget row="0" column="1" >
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>editName</cstring>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string>Name of the new template</string>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>Enter the name of the new template</string>
+ </property>
+ </widget>
+ <widget row="1" column="1" rowspan="2" colspan="1" >
+ <class>QListBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>listClass</cstring>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string>Class of the new template</string>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>Enter the name of the class which should be used as the template's base class</string>
+ </property>
+ </widget>
+ <widget row="3" column="0" rowspan="1" colspan="2" >
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer1</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buttonCreate</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>C&amp;reate</string>
+ </property>
+ <property stdset="1">
+ <name>default</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>Creates the new template</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButton1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Cancel</string>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>Closes the Dialog</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget row="1" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Baseclass for template:</string>
+ </property>
+ <property>
+ <name>buddy</name>
+ <cstring>listClass</cstring>
+ </property>
+ </widget>
+ <spacer row="2" column="0" >
+ <property>
+ <name>name</name>
+ <cstring>Spacer2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonCreate</sender>
+ <signal>clicked()</signal>
+ <receiver>CreateTemplate</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>PushButton1</sender>
+ <signal>clicked()</signal>
+ <receiver>CreateTemplate</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+</UI>
diff --git a/kommander/editor/defs.cpp b/kommander/editor/defs.cpp
new file mode 100644
index 00000000..fdf06ce9
--- /dev/null
+++ b/kommander/editor/defs.cpp
@@ -0,0 +1,78 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "defs.h"
+
+int size_type_to_int( QSizePolicy::SizeType t )
+{
+ if ( t == QSizePolicy::Fixed )
+ return 0;
+ if ( t == QSizePolicy::Minimum )
+ return 1;
+ if ( t == QSizePolicy::Maximum )
+ return 2;
+ if ( t == QSizePolicy::Preferred )
+ return 3;
+ if ( t == QSizePolicy::MinimumExpanding )
+ return 4;
+ if ( t == QSizePolicy::Expanding )
+ return 5;
+ if ( t == QSizePolicy::Ignored )
+ return 6;
+ return 0;
+}
+
+QString size_type_to_string( QSizePolicy::SizeType t )
+{
+ if ( t == QSizePolicy::Fixed )
+ return "Fixed";
+ if ( t == QSizePolicy::Minimum )
+ return "Minimum";
+ if ( t == QSizePolicy::Maximum )
+ return "Maximum";
+ if ( t == QSizePolicy::Preferred )
+ return "Preferred";
+ if ( t == QSizePolicy::MinimumExpanding )
+ return "MinimumExpanding";
+ if ( t == QSizePolicy::Expanding )
+ return "Expanding";
+ if ( t == QSizePolicy::Ignored )
+ return "Ignored";
+ return 0;
+}
+
+QSizePolicy::SizeType int_to_size_type( int i )
+{
+ if ( i == 0 )
+ return QSizePolicy::Fixed;
+ if ( i == 1 )
+ return QSizePolicy::Minimum;
+ if ( i == 2 )
+ return QSizePolicy::Maximum;
+ if ( i == 3 )
+ return QSizePolicy::Preferred;
+ if ( i == 4 )
+ return QSizePolicy::MinimumExpanding;
+ if ( i == 5 )
+ return QSizePolicy::Expanding;
+ if ( i == 6 )
+ return QSizePolicy::Ignored;
+ return QSizePolicy::Preferred;
+}
diff --git a/kommander/editor/defs.h b/kommander/editor/defs.h
new file mode 100644
index 00000000..ade3fa4b
--- /dev/null
+++ b/kommander/editor/defs.h
@@ -0,0 +1,35 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef DEFS_H
+#define DEFS_H
+
+#include <qsizepolicy.h>
+#include <qstring.h>
+
+#define POINTER_TOOL 32000
+#define CONNECT_TOOL 32001
+#define ORDER_TOOL 32002
+
+int size_type_to_int( QSizePolicy::SizeType t );
+QString size_type_to_string( QSizePolicy::SizeType t );
+QSizePolicy::SizeType int_to_size_type( int i );
+
+#endif
diff --git a/kommander/editor/filechooser.cpp b/kommander/editor/filechooser.cpp
new file mode 100644
index 00000000..14bedb95
--- /dev/null
+++ b/kommander/editor/filechooser.cpp
@@ -0,0 +1,63 @@
+#include "filechooser.h"
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <kfiledialog.h>
+#include <qlayout.h>
+
+FileChooser::FileChooser( QWidget *parent, const char *name )
+ : QWidget( parent, name ), md( File )
+{
+ QHBoxLayout *layout = new QHBoxLayout( this );
+ layout->setMargin( 0 );
+
+ lineEdit = new QLineEdit( this, "filechooser_lineedit" );
+ layout->addWidget( lineEdit );
+
+ connect( lineEdit, SIGNAL( textChanged( const QString & ) ),
+ this, SIGNAL( fileNameChanged( const QString & ) ) );
+
+ button = new QPushButton( "...", this, "filechooser_button" );
+ button->setFixedWidth( button->fontMetrics().width( " ... " ) );
+ layout->addWidget( button );
+
+ connect( button, SIGNAL( clicked() ),
+ this, SLOT( chooseFile() ) );
+
+ setFocusProxy( lineEdit );
+}
+
+void FileChooser::setMode( Mode m )
+{
+ md = m;
+}
+
+FileChooser::Mode FileChooser::mode() const
+{
+ return md;
+}
+
+void FileChooser::setFileName( const QString &fn )
+{
+ lineEdit->setText( fn );
+}
+
+QString FileChooser::fileName() const
+{
+ return lineEdit->text();
+}
+
+void FileChooser::chooseFile()
+{
+ QString fn;
+ if ( mode() == File )
+ fn = KFileDialog::getOpenFileName( lineEdit->text(), QString::null, this );
+ else
+ fn = KFileDialog::getExistingDirectory( lineEdit->text(),this );
+
+ if ( !fn.isEmpty() ) {
+ lineEdit->setText( fn );
+ emit fileNameChanged( fn );
+ }
+}
+
+#include "filechooser.moc"
diff --git a/kommander/editor/filechooser.h b/kommander/editor/filechooser.h
new file mode 100644
index 00000000..e6bc98e3
--- /dev/null
+++ b/kommander/editor/filechooser.h
@@ -0,0 +1,42 @@
+#ifndef FILECHOOSER_H
+#define FILECHOOSER_H
+
+#include <qwidget.h>
+
+class QLineEdit;
+class QPushButton;
+
+class FileChooser : public QWidget
+{
+ Q_OBJECT
+
+ Q_ENUMS( Mode )
+ Q_PROPERTY( Mode mode READ mode WRITE setMode )
+ Q_PROPERTY( QString fileName READ fileName WRITE setFileName )
+
+public:
+ FileChooser( QWidget *parent = 0, const char *name = 0);
+
+ enum Mode { File, Directory };
+
+ QString fileName() const;
+ Mode mode() const;
+
+public slots:
+ void setFileName( const QString &fn );
+ void setMode( Mode m );
+
+signals:
+ void fileNameChanged( const QString & );
+
+private slots:
+ void chooseFile();
+
+private:
+ QLineEdit *lineEdit;
+ QPushButton *button;
+ Mode md;
+
+};
+
+#endif
diff --git a/kommander/editor/formfile.cpp b/kommander/editor/formfile.cpp
new file mode 100644
index 00000000..645b04ef
--- /dev/null
+++ b/kommander/editor/formfile.cpp
@@ -0,0 +1,302 @@
+/**********************************************************************
+ This file is based on Qt Designer, Copyright (C) 2000 Trolltech AS. All rights reserved.
+
+ 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.
+
+ Modified for Kommander:
+ (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+
+**********************************************************************/
+
+// Other includes
+#include "formfile.h"
+#include "timestamp.h"
+#include "formwindow.h"
+#include "command.h"
+#include "mainwindow.h"
+#include "resource.h"
+#include "workspace.h"
+
+// Qt includes
+#include <qfile.h>
+#include <qregexp.h>
+#include <qstatusbar.h>
+#include <qtimer.h>
+
+// KDE includes
+#include <kdebug.h>
+#include <kfiledialog.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kstatusbar.h>
+#include <kstdguiitem.h>
+
+#include <sys/stat.h>
+
+FormFile::FormFile(const QString &fn, bool temp)
+ : filename(fn), fileNameTemp(temp), fw(0)
+{
+ QTimer::singleShot(0, this, SLOT(init()));
+}
+
+void FormFile::init()
+{
+ connect(this, SIGNAL(addedFormFile(FormFile *)), MainWindow::self->workspace(),
+ SLOT(formFileAdded(FormFile*)));
+ connect(this, SIGNAL(removedFormFile(FormFile *)), MainWindow::self->workspace(),
+ SLOT(formFileRemoved(FormFile*)));
+ emit addedFormFile(this);
+}
+
+FormFile::~FormFile()
+{
+ if (formWindow())
+ formWindow()->setFormFile(0);
+}
+
+void FormFile::setFormWindow(FormWindow *f)
+{
+ if (f == fw)
+ return;
+ if (fw)
+ fw->setFormFile(0);
+ fw = f;
+ if (fw)
+ fw->setFormFile(this);
+}
+
+void FormFile::setFileName(const QString &fn)
+{
+ if (fn == filename)
+ return;
+ if (fn.isEmpty()) {
+ fileNameTemp = true;
+ if (filename.find("unnamed"))
+ filename = createUnnamedFileName();
+ return;
+ }
+ filename = fn;
+}
+
+FormWindow *FormFile::formWindow() const
+{
+ return fw;
+}
+
+QString FormFile::fileName() const
+{
+ return filename;
+}
+
+QString FormFile::absFileName() const
+{
+ return filename;
+}
+
+
+bool FormFile::save(bool withMsgBox)
+{
+ if (!formWindow())
+ return true;
+ if (fileNameTemp)
+ return saveAs();
+ if (!isModified())
+ return true;
+ else if (withMsgBox && !formWindow()->checkCustomWidgets())
+ return false;
+
+ Resource resource(MainWindow::self);
+ resource.setWidget(formWindow());
+ if (!resource.save(filename, false))
+ {
+ if (KMessageBox::questionYesNo(MainWindow::self, i18n("Failed to save file '%1'.\n"
+ "Do you want to use another file name?").arg(filename), QString::null, i18n("Try Another"), i18n("Do Not Try")) == KMessageBox::Yes)
+ return saveAs();
+ else
+ return false;
+ }
+ MainWindow::self->statusBar()->message(i18n("'%1' saved.").arg(filename), 3000);
+ ::chmod(filename.local8Bit(), S_IRWXU);
+ setModified(false);
+ return true;
+}
+
+bool FormFile::saveAs()
+{
+ QString f = fileName();
+ if(fileNameTemp)
+ f = QString(formWindow()->name()).lower() + ".kmdr";
+ bool saved = false;
+ while (!saved) {
+ QString fn = KFileDialog::getSaveFileName(QString::null,
+ i18n("*.kmdr|Kommander Files"), MainWindow::self,
+ i18n("Save Form '%1' As").arg(formWindow()->name()));
+ if (fn.isEmpty())
+ return false;
+ QFileInfo fi(fn);
+ if (fi.extension() != "kmdr")
+ fn += ".kmdr";
+ fileNameTemp = false;
+ filename = fn;
+
+ QFileInfo relfi(filename);
+ if (relfi.exists()) {
+ if (KMessageBox::warningContinueCancel(MainWindow::self,
+ i18n("The file already exists. Do you wish to overwrite it?"),
+ i18n("Overwrite File?"), i18n("Overwrite")) == KMessageBox::Continue)
+ saved = true;
+ else
+ filename = f;
+ }
+ else
+ saved = true;
+ }
+ setModified(true);
+ return save();
+}
+
+bool FormFile::close()
+{
+ if (formWindow())
+ return formWindow()->close();
+ return true;
+}
+
+bool FormFile::closeEvent()
+{
+ if (!isModified())
+ {
+ emit removedFormFile(this);
+ QFile f(filename + ".backup");
+ f.remove();
+ return true;
+ }
+
+ switch (KMessageBox::warningYesNoCancel(MainWindow::self, i18n("Dialog '%1' was modified."
+ "Do you want to save it?").arg(filename), i18n("Save File?"), KStdGuiItem::save(), KStdGuiItem::discard())) {
+ case KMessageBox::Yes:
+ if (!save())
+ return false;
+ case KMessageBox::No: //fall through
+ MainWindow::self->workspace()->update();
+ break;
+ case KMessageBox::Cancel:
+ return false;
+ default:
+ break;
+ }
+
+ emit removedFormFile(this);
+ setModified(false);
+ QFile f(filename + ".backup");
+ f.remove();
+ return true;
+}
+
+void FormFile::setModified(bool m)
+{
+ setFormWindowModified(m);
+}
+
+bool FormFile::isModified()
+{
+ return isFormWindowModified();
+}
+
+bool FormFile::isFormWindowModified() const
+{
+ if (!formWindow() || !formWindow()->commandHistory())
+ return false;
+ return formWindow()->commandHistory()->isModified();
+}
+
+void FormFile::setFormWindowModified(bool m)
+{
+ if (m == isFormWindowModified() || !formWindow() || !formWindow()->commandHistory())
+ return;
+ formWindow()->commandHistory()->setModified(m);
+ emit somethingChanged(this);
+}
+
+void FormFile::showFormWindow()
+{
+ if (formWindow())
+ {
+ formWindow()->setFocus();
+ return;
+ }
+ MainWindow::self->openFormWindow(filename, true, this);
+}
+
+
+static int ui_counter = 0;
+QString FormFile::createUnnamedFileName()
+{
+ return i18n("unnamed") + QString::number(++ui_counter) + QString(".kmdr");
+}
+
+QString FormFile::formName() const
+{
+ FormFile* that = (FormFile*) this;
+ if (formWindow()) {
+ that->cachedFormName = formWindow()->name();
+ return cachedFormName;
+ }
+ if (!cachedFormName.isNull())
+ return cachedFormName;
+ QFile f(filename);
+ if (f.open(IO_ReadOnly))
+ {
+ QTextStream ts(&f);
+ QString line;
+ QString className;
+ while (!ts.eof())
+ {
+ line = ts.readLine();
+ if (!className.isEmpty())
+ {
+ int end = line.find("</class>");
+ if (end == -1)
+ className += line;
+ else
+ {
+ className += line.left(end);
+ break;
+ }
+ continue;
+ }
+ int start;
+ if ((start = line.find("<class>")) != -1)
+ {
+ int end = line.find("</class>");
+ if (end == -1)
+ className = line.mid(start + 7);
+ else
+ {
+ className = line.mid(start + 7, end - (start + 7));
+ break;
+ }
+ }
+ }
+ that->cachedFormName = className;
+ }
+ if (cachedFormName.isEmpty())
+ that->cachedFormName = filename;
+ return cachedFormName;
+}
+
+void FormFile::formWindowChangedSomehow()
+{
+ emit somethingChanged(this);
+}
+
+#include "formfile.moc"
diff --git a/kommander/editor/formfile.h b/kommander/editor/formfile.h
new file mode 100644
index 00000000..39fecc67
--- /dev/null
+++ b/kommander/editor/formfile.h
@@ -0,0 +1,74 @@
+/**********************************************************************
+ This file is based on Qt Designer, Copyright (C) 2000 Trolltech AS. �All rights reserved.
+
+ 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.
+
+ Modified for Kommander:
+ (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+
+**********************************************************************/
+
+#ifndef FORMFILE_H
+#define FORMFILE_H
+
+#include <qobject.h>
+#include "timestamp.h"
+#include "metadatabase.h"
+
+class FormWindow;
+
+class FormFile : public QObject
+{
+ Q_OBJECT
+
+public:
+ FormFile(const QString &fn, bool temp);
+ ~FormFile();
+
+ void setFormWindow( FormWindow *f );
+ void setFileName( const QString &fn );
+ void setModified(bool m);
+ FormWindow *formWindow() const;
+ QString fileName() const;
+ QString absFileName() const;
+ bool save( bool withMsgBox = TRUE );
+ bool saveAs();
+ bool close();
+ bool closeEvent();
+ bool isModified();
+ void showFormWindow();
+ static QString createUnnamedFileName();
+ QString formName() const;
+ bool hasTempFileName() const {return fileNameTemp;}
+
+signals:
+ void addedFormFile(FormFile*);
+ void removedFormFile(FormFile*);
+ void somethingChanged(FormFile*);
+
+private slots:
+ void formWindowChangedSomehow();
+ void init();
+
+private:
+ bool isFormWindowModified() const;
+ void setFormWindowModified( bool m );
+
+private:
+ QString filename;
+ bool fileNameTemp;
+ FormWindow *fw;
+ QString cachedFormName;
+
+};
+
+#endif
diff --git a/kommander/editor/formsettings.ui b/kommander/editor/formsettings.ui
new file mode 100644
index 00000000..321de024
--- /dev/null
+++ b/kommander/editor/formsettings.ui
@@ -0,0 +1,338 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>FormSettingsBase</class>
+<comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>FormSettingsBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>497</width>
+ <height>490</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form Settings</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Form Settings&lt;/b&gt;&lt;p&gt;Change settings for the form. Settings like &lt;b&gt;Comment&lt;/b&gt; and &lt;b&gt;Author&lt;/b&gt; are for your own use and are not required.&lt;/p&gt;</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="2" column="0">
+ <property name="name">
+ <cstring>Layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and apply all the changes.</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and discard any changes.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox" row="1" column="0">
+ <property name="name">
+ <cstring>GroupBox2</cstring>
+ </property>
+ <property name="title">
+ <string>La&amp;youts</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>spinMargin</cstring>
+ </property>
+ <property name="value">
+ <number>11</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>spinSpacing</cstring>
+ </property>
+ <property name="value">
+ <number>6</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1_3</cstring>
+ </property>
+ <property name="text">
+ <string>Default mar&amp;gin:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>spinMargin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>D&amp;efault spacing:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>spinSpacing</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="0" column="0">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>Box</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="title">
+ <string>&amp;Settings</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QMultiLineEdit" row="3" column="1" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>editComment</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter a comment about the form.</string>
+ </property>
+ </widget>
+ <spacer row="4" column="0">
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>130</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Co&amp;mment:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>editComment</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel1_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;License:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>editAuthor</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>editLicense</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Enter your name</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter your name.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel1_2_3</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Version:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>editAuthor</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>A&amp;uthor:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>editAuthor</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>editAuthor</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Enter your name</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter your name.</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>editVersion</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Enter your name</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter your name.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+</widget>
+<customwidgets>
+</customwidgets>
+<connections>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSettingsBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSettingsBase</receiver>
+ <slot>okClicked()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>editAuthor</tabstop>
+ <tabstop>editVersion</tabstop>
+ <tabstop>editLicense</tabstop>
+ <tabstop>editComment</tabstop>
+ <tabstop>spinMargin</tabstop>
+ <tabstop>spinSpacing</tabstop>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+</tabstops>
+<slots>
+ <slot>okClicked()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+</includehints>
+</UI>
diff --git a/kommander/editor/formsettingsimpl.cpp b/kommander/editor/formsettingsimpl.cpp
new file mode 100644
index 00000000..4daec8ba
--- /dev/null
+++ b/kommander/editor/formsettingsimpl.cpp
@@ -0,0 +1,58 @@
+/**********************************************************************
+ This file is based on Qt Designer, Copyright (C) 2000 Trolltech AS. All rights reserved.
+
+ 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.
+
+ Modified for Kommander:
+ (C) 2005 Michal Rudolf <mrudolf@kdewebdev.org>
+
+**********************************************************************/
+
+#include "formsettingsimpl.h"
+#include "formwindow.h"
+#include "metadatabase.h"
+#include "command.h"
+#include "asciivalidator.h"
+#include "mainwindow.h"
+
+#include <qmultilineedit.h>
+#include <klineedit.h>
+#include <qspinbox.h>
+
+FormSettings::FormSettings( QWidget *parent, FormWindow *fw )
+ : FormSettingsBase( parent, 0, true ), formwindow( fw )
+{
+ MetaDataBase::MetaInfo info = MetaDataBase::metaInfo(fw);
+ editAuthor->setText(info.author);
+ editVersion->setText(info.version);
+ editLicense->setText(info.license);
+ editComment->setText(info.comment);
+ spinSpacing->setValue(formwindow->layoutDefaultSpacing());
+ spinMargin->setValue(formwindow->layoutDefaultMargin());
+}
+
+void FormSettings::okClicked()
+{
+ MetaDataBase::MetaInfo info;
+ info.author = editAuthor->text();
+ info.version = editVersion->text();
+ info.license = editLicense->text();
+ info.comment = editComment->text();
+ MetaDataBase::setMetaInfo(formwindow, info);
+ formwindow->commandHistory()->setModified(true);
+
+ formwindow->setLayoutDefaultSpacing(spinSpacing->value());
+ formwindow->setLayoutDefaultMargin(spinMargin->value());
+ accept();
+}
+
+#include "formsettingsimpl.moc"
+
diff --git a/kommander/editor/formsettingsimpl.h b/kommander/editor/formsettingsimpl.h
new file mode 100644
index 00000000..f33c2194
--- /dev/null
+++ b/kommander/editor/formsettingsimpl.h
@@ -0,0 +1,43 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef FORMSETTINGSIMPL_H
+#define FORMSETTINGSIMPL_H
+
+#include "formsettings.h"
+
+class FormWindow;
+
+class FormSettings : public FormSettingsBase
+{
+ Q_OBJECT
+
+public:
+ FormSettings( QWidget *parent, FormWindow *fw );
+
+protected slots:
+ void okClicked();
+
+private:
+ FormWindow *formwindow;
+
+};
+
+#endif
diff --git a/kommander/editor/formwindow.cpp b/kommander/editor/formwindow.cpp
new file mode 100644
index 00000000..0aa9b122
--- /dev/null
+++ b/kommander/editor/formwindow.cpp
@@ -0,0 +1,2609 @@
+/**********************************************************************
+ This file is based on Qt Designer, Copyright (C) 2000 Trolltech AS. All rights reserved.
+
+ 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.
+
+ Modified for Kommander:
+ (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+
+**********************************************************************/
+
+// Qt includes
+#include <qaccel.h>
+#include <qapplication.h>
+#include <qbitmap.h>
+#include <qevent.h>
+#include <qfeatures.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qmap.h>
+#include <qmetaobject.h>
+#include <qobjectlist.h>
+#include <qpainter.h>
+#include <qpalette.h>
+#include <qpen.h>
+#include <qpixmapcache.h>
+#include <qpopupmenu.h>
+#include <qpushbutton.h>
+#include <qsizegrip.h>
+#include <qspinbox.h>
+#include <qstatusbar.h>
+#include <qtimer.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+
+// KDE includes
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kstatusbar.h>
+
+// Other includes
+#include "formwindow.h"
+#include "defs.h"
+#include "mainwindow.h"
+#include "widgetfactory.h"
+#include "sizehandle.h"
+#include "metadatabase.h"
+#include "resource.h"
+#include "layout.h"
+#include "connectioneditorimpl.h"
+#include "widgetdatabase.h"
+#include "pixmapchooser.h"
+#include "orderindicator.h"
+#include "hierarchyview.h"
+
+#include "globaldefs.h"
+#include "formfile.h"
+
+#include <stdlib.h>
+
+
+static void setCursorToAll(const QCursor &c, QWidget *start)
+{
+ start->setCursor(c);
+ QObjectList *l = (QObjectList*)start->children();
+ if (l)
+ for (QObject *o = l->first(); o; o = l->next())
+ {
+ if (o->isWidgetType() && !o->inherits("SizeHandle"))
+ setCursorToAll(c, ((QWidget*)o));
+ }
+}
+
+static void restoreCursors(QWidget *start, FormWindow *fw)
+{
+ if (fw->widgets()->find(start))
+ start->setCursor(MetaDataBase::cursor(start));
+ else
+ start->setCursor(Qt::ArrowCursor);
+ QObjectList *l = (QObjectList*)start->children();
+ if (l)
+ for (QObject *o = l->first(); o; o = l->next())
+ {
+ if (o->isWidgetType() && !o->inherits("SizeHandle"))
+ restoreCursors(((QWidget*)o), fw);
+ }
+}
+
+
+/*
+ The FormWindow is the widget which is used as editor for forms. It
+ handles inserting, deleting, moving, resizing, etc. of widgets.
+
+ Normally multiple formwindows are used at the same time in the
+ Designer. So each formwindow has its own undo/redo buffer, etc.
+
+ Also the formwindow has some signals to inform e.g. about selection
+ changes which is interesting for the PropertyEditor.
+
+ For handling the events of the child widgets (moving, etc.) the
+ handleMousePress(), etc. functions are called from the application
+ event filter which is implemented in MainWindow::eventFilter().
+*/
+
+FormWindow::FormWindow(FormFile *f, MainWindow *mw, QWidget *parent, const char *name)
+ : QWidget(parent, name, WDestructiveClose), mainwindow(mw),
+ commands(100), pixInline(true)
+{
+ ff = f;
+ init();
+ initSlots();
+}
+
+FormWindow::FormWindow(FormFile *f, QWidget *parent, const char *name)
+ : QWidget(parent, name, WDestructiveClose), mainwindow(0),
+ commands(100), pixInline(true)
+{
+ ff = f;
+ init();
+}
+
+void FormWindow::init()
+{
+ MetaDataBase::addEntry(this);
+ ff->setFormWindow(this);
+ propertyWidget = 0;
+ toolFixed = false;
+ checkedSelectionsForMove = false;
+ mContainer = 0;
+ connectSender = connectReceiver = 0;
+ currTool = POINTER_TOOL;
+ unclippedPainter = 0;
+ widgetPressed = false;
+ drawRubber = false;
+ setFocusPolicy(ClickFocus);
+ sizePreviewLabel = 0;
+ checkSelectionsTimer = new QTimer(this, "checkSelectionsTimer");
+ connect(checkSelectionsTimer, SIGNAL(timeout()),
+ this, SLOT(invalidCheckedSelections()));
+ updatePropertiesTimer = new QTimer(this);
+ connect(updatePropertiesTimer, SIGNAL(timeout()),
+ this, SLOT(updatePropertiesTimerDone()));
+ showPropertiesTimer = new QTimer(this);
+ connect(showPropertiesTimer, SIGNAL(timeout()),
+ this, SLOT(showPropertiesTimerDone()));
+ selectionChangedTimer = new QTimer(this);
+ connect(selectionChangedTimer, SIGNAL(timeout()),
+ this, SLOT(selectionChangedTimerDone()));
+ insertParent = 0;
+ connect(&commands, SIGNAL(undoRedoChanged(bool, bool, const QString &, const QString &)),
+ this, SIGNAL(undoRedoChanged(bool, bool, const QString &, const QString &)));
+ propShowBlocked = false;
+
+ setIcon(PixmapChooser::loadPixmap("form.xpm", PixmapChooser::Mini));
+
+ connect(&commands, SIGNAL(modificationChanged(bool)),
+ this, SLOT(modificationChanged(bool)));
+ buffer = 0;
+
+ QWidget *w = WidgetFactory::create(WidgetDatabase::idFromClassName("QFrame"), this);
+ setMainContainer(w);
+ propertyWidget = w;
+ targetContainer = 0;
+ hadOwnPalette = false;
+
+ defSpacing = BOXLAYOUT_DEFAULT_SPACING;
+ defMargin = BOXLAYOUT_DEFAULT_MARGIN;
+}
+
+void FormWindow::setMainWindow(MainWindow *w)
+{
+ mainwindow = w;
+ MetaDataBase::addEntry(this);
+ initSlots();
+}
+
+void FormWindow::initSlots()
+{
+}
+
+FormWindow::~FormWindow()
+{
+ if (MainWindow::self->objectHierarchy()->formWindow() == this)
+ MainWindow::self->objectHierarchy()->setFormWindow(0, 0);
+ MetaDataBase::clear(this);
+ if (ff)
+ ff->setFormWindow(0);
+}
+
+void FormWindow::closeEvent(QCloseEvent *e)
+{
+ if (ff->closeEvent() && mainwindow->unregisterClient(this))
+ e->accept();
+ else
+ e->ignore();
+}
+
+void FormWindow::paintGrid(QWidget *w, QPaintEvent *e)
+{
+ if (!mainWindow()->showGrid())
+ return;
+ QPixmap grid;
+ QString grid_name;
+ grid_name.sprintf("FormWindowGrid_%d_%d", mainWindow()->grid().x(), mainWindow()->grid().y());
+ if(!QPixmapCache::find(grid_name, grid)) {
+ grid = QPixmap(350 + (350 % mainWindow()->grid().x()), 350 + (350 % mainWindow()->grid().y()));
+ grid.fill(colorGroup().color(QColorGroup::Foreground));
+ QBitmap mask(grid.width(), grid.height());
+ mask.fill(color0);
+ QPainter p(&mask);
+ p.setPen(color1);
+ for (int y = 0; y < grid.width(); y += mainWindow()->grid().y())
+ for (int x = 0; x < grid.height(); x += mainWindow()->grid().x())
+ p.drawPoint(x, y);
+ grid.setMask(mask);
+ QPixmapCache::insert(grid_name, grid);
+ }
+ QPainter p(w);
+ p.setClipRegion(e->rect());
+ p.drawTiledPixmap(QRect(0, 0, width(), height()), grid);
+}
+
+
+/*For operations like drawing a rubber band or drawing the rect
+ when inserting a new widget, a unclipped painter (which draws also
+ on child widgets) is needed. This method does all the initialization.
+*/
+
+void FormWindow::beginUnclippedPainter(bool doNot)
+{
+ endUnclippedPainter();
+ bool unclipped = testWFlags(WPaintUnclipped);
+ setWFlags(WPaintUnclipped);
+ unclippedPainter = new QPainter;
+ unclippedPainter->begin(this);
+ if (!unclipped)
+ clearWFlags(WPaintUnclipped);
+ if (doNot)
+ {
+ unclippedPainter->setPen(QPen(color0, 2));
+ unclippedPainter->setRasterOp(NotROP);
+ }
+}
+
+void FormWindow::endUnclippedPainter()
+{
+ if (unclippedPainter)
+ unclippedPainter->end();
+ delete unclippedPainter;
+ unclippedPainter = 0;
+}
+
+QPoint FormWindow::gridPoint(const QPoint &p)
+{
+ return QPoint((p.x() / grid().x()) * grid().x(),
+ (p.y() / grid().y()) * grid().y());
+}
+
+void FormWindow::drawSizePreview(const QPoint &pos, const QString& text)
+{
+ unclippedPainter->save();
+ unclippedPainter->setPen(QPen(colorGroup().foreground(), 1 ));
+ unclippedPainter->setRasterOp(CopyROP);
+ if (!sizePreviewPixmap.isNull())
+ unclippedPainter->drawPixmap(sizePreviewPos, sizePreviewPixmap);
+ if (text.isNull()) {
+ sizePreviewPixmap = QPixmap(); // set null again
+ unclippedPainter->restore();
+ return;
+ }
+ QRect r = fontMetrics().boundingRect(0, 0, 0, 0, AlignCenter, text);
+ r = QRect(pos + QPoint(10, 10), r.size() + QSize(5, 5));
+
+ checkPreviewGeometry(r);
+
+ sizePreviewPos = r.topLeft();
+ sizePreviewPixmap = QPixmap::grabWindow(winId(), r.x(), r.y(), r.width(), r.height());
+ unclippedPainter->setBrush(QColor(255, 255, 128));
+ unclippedPainter->drawRect(r);
+ unclippedPainter->drawText(r, AlignCenter, text);
+ unclippedPainter->restore();
+}
+
+void FormWindow::insertWidget()
+{
+ if (!insertParent || currTool == POINTER_TOOL)
+ return;
+
+ bool useSizeHint = !oldRectValid || (currRect.width() < 2 && currRect.height() < 2);
+ Orientation orient = Horizontal;
+ QString n = WidgetDatabase::className(currTool);
+ if (useSizeHint && (n == "Spacer" || n == "QSlider" || n == "Line" || n == "QScrollBar")) {
+ QPopupMenu m(mainWindow());
+ m.insertItem(i18n("&Horizontal"));
+ int ver = m.insertItem(i18n("&Vertical"));
+ int r = m.exec(QCursor::pos());
+ if (r == ver)
+ orient = Vertical;
+ }
+
+ QWidget *w = WidgetFactory::create(currTool, insertParent, 0, true, &currRect, orient);
+ if (!w)
+ return;
+
+ if (!savePixmapInline() && currTool == WidgetDatabase::idFromClassName("PixmapLabel"))
+ ((QLabel*)w)->setPixmap(PixmapChooser::loadPixmap("image.xpm"));
+ int id = WidgetDatabase::idFromClassName(WidgetFactory::classNameOf(w));
+ if (WidgetDatabase::isCustomWidget(id)) {
+ QWhatsThis::add(w, i18n("<b>A %1 (custom widget)</b> "
+ "<p>Click <b>Edit Custom Widgets...</b> in the <b>Tools|Custom</b> "
+ "menu to add and change custom widgets. You can add "
+ "properties as well as signals and slots to integrate custom widgets into "
+ "<i>Qt Designer</i>, and provide a pixmap which will be used to represent "
+ "the widget on the form.</p>")
+ .arg(WidgetDatabase::toolTip(id)));
+ QToolTip::add(w, i18n("A %1 (custom widget)").arg(WidgetDatabase::toolTip(id)));
+ }
+ else
+ {
+ QString tt = WidgetDatabase::toolTip(id);
+ QString wt = WidgetDatabase::whatsThis(id);
+ if (!wt.isEmpty() && !tt.isEmpty())
+ QWhatsThis::add(w, i18n("<b>A %1</b><p>%2</p>").arg(tt).arg(wt));
+ }
+
+ QString s = w->name();
+ unify(w, s, true);
+ w->setName(s);
+ insertWidget(w);
+ QRect r(currRect);
+ if (!oldRectValid || (currRect.width() < 2 && currRect.height() < 2))
+ r = QRect(rectAnchor, QSize(0, 0));
+
+ QPoint p = r.topLeft();
+ p = mapToGlobal(p);
+ p = insertParent->mapFromGlobal(p);
+ r = QRect(p, r.size());
+ if (useSizeHint)
+ {
+ r.setWidth(w->sizeHint().width());
+ r.setHeight(w->sizeHint().height());
+ }
+
+ if (r.width() < 2 * grid().x())
+ r.setWidth(2 * grid().x());
+ if (r.height() < 2 * grid().y())
+ r.setHeight(2 * grid().y());
+
+ const QObjectList *l = insertParent->children();
+ QObjectListIt it(*l);
+ QWidgetList lst;
+ if (WidgetDatabase::isContainer(WidgetDatabase::idFromClassName(WidgetFactory::classNameOf(w))))
+ for (; it.current();) {
+ QObject *o = it.current();
+ ++it;
+ if (o->isWidgetType() && ((QWidget*)o)->isVisibleTo(this) &&
+ insertedWidgets.find((QWidget*)o) && o != w)
+ {
+ QRect r2(((QWidget*)o)->pos(), ((QWidget*)o)->size());
+ if (r.contains(r2))
+ lst.append((QWidget*)o);
+ }
+ }
+
+ if (!lst.isEmpty())
+ {
+ QWidget *pw = WidgetFactory::containerOfWidget(w);
+ QValueList<QPoint> op, np;
+ for (QWidget *i = lst.first(); i; i = lst.next())
+ {
+ op.append(i->pos());
+ QPoint pos = pw->mapFromGlobal(i->mapToGlobal(QPoint(0, 0)));
+ pos -= r.topLeft();
+ np.append(pos);
+ }
+ MoveCommand *mv = new MoveCommand(i18n("Reparent Widgets"), this, lst, op, np, insertParent, pw);
+ if (!toolFixed)
+ mainwindow->resetTool();
+ else
+ setCursorToAll(CrossCursor, w);
+
+ InsertCommand *cmd = new InsertCommand(i18n("Insert %1").arg(w->name()), this, w, r);
+
+ QPtrList<Command> commands;
+ commands.append(mv);
+ commands.append(cmd);
+
+ MacroCommand *mc = new MacroCommand(i18n("Insert %1").arg(w->name()), this, commands);
+ commandHistory()->addCommand(mc);
+ mc->execute();
+ }
+ else
+ {
+ if (!toolFixed)
+ mainwindow->resetTool();
+ else
+ setCursorToAll(CrossCursor, w);
+
+ InsertCommand *cmd = new InsertCommand(i18n("Insert %1").arg(w->name()), this, w, r);
+ commandHistory()->addCommand(cmd);
+ cmd->execute();
+ }
+}
+
+void FormWindow::insertWidget(QWidget *w, bool checkName)
+{
+ if (checkName) {
+ QString s = w->name();
+ unify(w, s, true);
+ w->setName(s);
+ }
+
+ MetaDataBase::addEntry(w);
+ int id = WidgetDatabase::idFromClassName(WidgetFactory::classNameOf(w));
+ if (WidgetDatabase::isCustomWidget(id))
+ {
+ QWhatsThis::add(w, i18n("<b>A %1 (custom widget)</b> "
+ "<p>Click <b>Edit Custom Widgets...</b> in the <b>Tools|Custom</b> "
+ "menu to add and change custom widgets. You can add "
+ "properties as well as signals and slots to integrate custom widgets into "
+ "<i>Qt Designer</i>, and provide a pixmap which will be used to represent "
+ "the widget on the form.</p>")
+ .arg(WidgetDatabase::toolTip(id)));
+ QToolTip::add(w, i18n("A %1 (custom widget)").arg(WidgetDatabase::toolTip(id)));
+ }
+ else
+ {
+ QString tt = WidgetDatabase::toolTip(id);
+ QString wt = WidgetDatabase::whatsThis(id);
+ if (!wt.isEmpty() && !tt.isEmpty())
+ QWhatsThis::add(w, i18n("<b>A %1</b><p>%2</p>").arg(tt).arg(wt));
+ }
+
+ restoreCursors(w, this);
+ widgets()->insert(w, w);
+ w->show();
+}
+
+void FormWindow::removeWidget(QWidget *w)
+{
+ MetaDataBase::removeEntry(w);
+ widgets()->take(w);
+}
+
+void FormWindow::handleContextMenu(QContextMenuEvent *e, QWidget *w)
+{
+ switch (currTool) {
+ case POINTER_TOOL:
+ if (!isMainContainer(w) && qstrcmp(w->name(), "central widget"))
+ { // press on a child widget
+ raiseChildSelections(w); // raise selections and select widget
+ selectWidget(w);
+ // if widget is laid out, find the first non-laid out super-widget
+ QWidget *realWidget = w; // but store the original one
+ while (w->parentWidget() && (WidgetFactory::layoutType(w->parentWidget()) !=
+ WidgetFactory::NoLayout || !insertedWidgets.find(w)))
+ w = w->parentWidget();
+ if (mainContainer()->inherits("QMainWindow") &&
+ ((QMainWindow*)mainContainer())->centralWidget() == realWidget)
+ {
+ e->accept();
+ mainwindow->popupFormWindowMenu(e->globalPos(), this);
+ }
+ else
+ {
+ e->accept();
+ mainwindow->popupWidgetMenu(e->globalPos(), this, realWidget);
+ }
+ }
+ else
+ {
+ e->accept();
+ clearSelection();
+ mainwindow->popupFormWindowMenu(e->globalPos(), this);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void FormWindow::handleMousePress(QMouseEvent *e, QWidget *w)
+{
+ checkedSelectionsForMove = false;
+ checkSelectionsTimer->stop();
+ if (!sizePreviewLabel) {
+ sizePreviewLabel = new QLabel(this);
+ sizePreviewLabel->hide();
+ sizePreviewLabel->setBackgroundColor(QColor(255, 255, 128));
+ sizePreviewLabel->setFrameStyle(QFrame::Plain | QFrame::Box);
+ }
+
+ switch (currTool) {
+ case POINTER_TOOL:
+ if (!isMainContainer(w) && qstrcmp(w->name(), "central widget") != 0)
+ { // press on a child widget
+ // if the clicked widget is not in a layout, raise it
+ if (!w->parentWidget() || WidgetFactory::layoutType(w->parentWidget()) == WidgetFactory::NoLayout)
+ w->raise();
+ if ((e->state() & ControlButton))
+ { // with control pressed, always start rubber band selection
+ drawRubber = true;
+ currRect = QRect(0, 0, -1, -1);
+ startRectDraw(mapFromGlobal(e->globalPos()), e->globalPos(), this, Rubber);
+ break;
+ }
+
+ bool sel = isWidgetSelected(w);
+ if (!((e->state() & ControlButton) || (e->state() & ShiftButton)))
+ { // control not pressed...
+ if (!sel) // ...and widget no selectted: unselect all
+ clearSelection(false);
+ else
+ { // ...widget selected
+ // only if widget has a layout (it is a layout meta widget or a laid out container!),
+ // unselect its childs
+ if (WidgetFactory::layoutType(w) != WidgetFactory::NoLayout)
+ {
+ QObjectList *l = w->queryList("QWidget");
+ setPropertyShowingBlocked(true);
+ for (QObject *o = l->first(); o; o = l->next())
+ {
+ if (!o->isWidgetType())
+ continue;
+ if (insertedWidgets.find((QWidget*)o))
+ selectWidget((QWidget*)o, false);
+ }
+ setPropertyShowingBlocked(false);
+ delete l;
+ }
+ }
+ qApp->processEvents();
+ }
+ if (((e->state() & ControlButton) || (e->state() & ShiftButton)) &&
+ sel && e->button() == LeftButton)
+ { // control pressed and selected, unselect widget
+ selectWidget(w, false);
+ break;
+ }
+
+ raiseChildSelections(w); // raise selections and select widget
+ selectWidget(w);
+
+ // if widget is laid out, find the first non-laid out super-widget
+ while (w->parentWidget() &&
+ (WidgetFactory::layoutType(w->parentWidget()) != WidgetFactory::NoLayout
+ || !insertedWidgets.find(w)))
+ w = w->parentWidget();
+
+ if (e->button() == LeftButton)
+ { // left button: store original geometry and more as the widget might start moving
+ widgetPressed = true;
+ widgetGeom = QRect(w->pos(), w->size());
+ oldPressPos = w->mapFromGlobal(e->globalPos());
+ origPressPos = oldPressPos;
+ checkedSelectionsForMove = false;
+ moving.clear();
+ if (w->parentWidget() && !isMainContainer(w->parentWidget()) &&
+ !isCentralWidget(w->parentWidget()))
+ {
+ targetContainer = w->parentWidget();
+ hadOwnPalette = w->parentWidget()->ownPalette();
+ restorePalette = w->parentWidget()->palette();
+ }
+ }
+ }
+ else
+ { // press was on the formwindow
+ if (e->button() == LeftButton)
+ { // left button: start rubber selection and show formwindow properties
+ drawRubber = true;
+ if (!((e->state() & ControlButton) || (e->state() & ShiftButton)))
+ {
+ clearSelection(false);
+ QObject *opw = propertyWidget;
+ propertyWidget = mainContainer();
+ if (opw->isWidgetType())
+ repaintSelection((QWidget*)opw);
+ }
+ currRect = QRect(0, 0, -1, -1);
+ startRectDraw(mapFromGlobal(e->globalPos()), e->globalPos(), this, Rubber);
+ }
+ }
+ break;
+ case CONNECT_TOOL:
+ if (e->button() != LeftButton)
+ break;
+ saveBackground();
+ mainWindow()->statusBar()->message(i18n("Connect '%1' with...").arg(w->name()));
+ connectStartPos = mapFromGlobal(e->globalPos());
+ currentConnectPos = mapFromGlobal(e->globalPos());
+ connectSender = designerWidget(w);
+ connectReceiver = connectableObject(designerWidget(w), connectReceiver);
+ beginUnclippedPainter(false);
+ drawConnectLine();
+ break;
+ case ORDER_TOOL:
+ if (!isMainContainer(w))
+ { // press on a child widget
+ orderedWidgets.removeRef(w);
+ orderedWidgets.append(w);
+ for (QWidget *wid = orderedWidgets.last(); wid; wid = orderedWidgets.prev())
+ {
+ int i = stackedWidgets.findRef(wid);
+ if (i != -1)
+ {
+ stackedWidgets.removeRef(wid);
+ stackedWidgets.insert(0, wid);
+ }
+ }
+ QWidgetList oldl = MetaDataBase::tabOrder(this);
+ TabOrderCommand *cmd = new TabOrderCommand(i18n("Change Tab Order"), this,
+ oldl, stackedWidgets);
+ cmd->execute();
+ commandHistory()->addCommand(cmd, true);
+ updateOrderIndicators();
+ }
+ break;
+ default: // any insert widget tool
+ if (e->button() == LeftButton)
+ {
+ insertParent = WidgetFactory::containerOfWidget(mainContainer());
+ // default parent for new widget is the formwindow
+ if (!isMainContainer(w))
+ { // press was not on formwindow, check if we can find another parent
+ QWidget *wid = w;
+ for (;;)
+ {
+ int id = WidgetDatabase::idFromClassName(WidgetFactory::classNameOf(wid));
+ if ((WidgetDatabase::isContainer(id) || wid == mainContainer()) &&
+ !wid->inherits("QLayoutWidget") && !wid->inherits("QSplitter"))
+ {
+ insertParent = WidgetFactory::containerOfWidget(wid); // found another parent, store it
+ break;
+ }
+ else
+ {
+ wid = wid->parentWidget();
+ if (!wid)
+ break;
+ }
+ }
+ }
+ startRectDraw(w->mapFromGlobal(e->globalPos()), e->globalPos(), w, Insert);
+ }
+ break;
+ }
+}
+
+void FormWindow::handleMouseDblClick(QMouseEvent *, QWidget *w)
+{
+ switch (currTool) {
+ case ORDER_TOOL:
+ if (!isMainContainer(w))
+ { // press on a child widget
+ orderedWidgets.clear();
+ orderedWidgets.append(w);
+ for (QWidget *wid = orderedWidgets.last(); wid; wid = orderedWidgets.prev())
+ {
+ int i = stackedWidgets.findRef(wid);
+ if (i != -1)
+ {
+ stackedWidgets.removeRef(wid);
+ stackedWidgets.insert(0, wid);
+ }
+ }
+ QWidgetList oldl = MetaDataBase::tabOrder(this);
+ TabOrderCommand *cmd = new TabOrderCommand(i18n("Change Tab Order"), this, oldl, stackedWidgets);
+ cmd->execute();
+ commandHistory()->addCommand(cmd, true);
+ updateOrderIndicators();
+ }
+ default:
+ break;
+ }
+}
+
+void FormWindow::handleMouseMove(QMouseEvent *e, QWidget *w)
+{
+ if ((e->state() & LeftButton) != LeftButton)
+ return;
+
+ QWidget *newReceiver = (QWidget*)connectReceiver, *oldReceiver = (QWidget*)connectReceiver, *wid;
+ bool drawRecRect;
+ switch (currTool) {
+ case POINTER_TOOL:
+ if (widgetPressed && allowMove(w))
+ { // we are prepated for a move
+ // if widget is laid out, find the first non-laid out super-widget
+ while (w->parentWidget() && (WidgetFactory::layoutType(w->parentWidget()) !=
+ WidgetFactory::NoLayout || !insertedWidgets.find(w)))
+ w = w->parentWidget();
+ // calc correct position
+ QPoint pos = w->mapFromGlobal(e->globalPos());
+ // calc move distance and store it
+ QPoint d = oldPressPos - pos;
+ if (QABS(d.x()) < grid().x())
+ d.setX(0);
+ if (QABS(d.y()) < grid().y())
+ d.setY(0);
+ if (d.x() == 0)
+ pos.setX(oldPressPos.x());
+ if (d.y() == 0)
+ pos.setY(oldPressPos.y());
+ oldPressPos = pos;
+ // snap to grid
+ int x = widgetGeom.x() - d.x();
+ widgetGeom.setX(x);
+ x = (x / grid().x()) * grid().x();
+ int y = widgetGeom.y() - d.y();
+ widgetGeom.setY(y);
+ y = (y / grid().y()) * grid().y();
+ QPoint p = w->pos();
+
+ if (x - p.x() || y - p.y())
+ { // if we actually have to move
+ if (!checkedSelectionsForMove)
+ { // if not checked yet, check if the correct widget are selected...
+ if (!isWidgetSelected(w))
+ { // and unselect others. Only siblings can be moved at the same time
+ setPropertyShowingBlocked(true);
+ selectWidget(w);
+ setPropertyShowingBlocked(false);
+ }
+ checkSelectionsForMove(w);
+ }
+ // check whether we would have to reparent the selection and
+ // highlight the possible new parent container
+ QMapConstIterator<ulong, QPoint> it = moving.begin();
+ QWidget* wa = containerAt(e->globalPos(), ((QWidget*)it.key()));
+ if (wa && !isMainContainer(wa) && !isCentralWidget(wa))
+ {
+ wa = WidgetFactory::containerOfWidget(wa);
+ // ok, looks like we moved onto a container
+
+ if (wa != targetContainer)
+ {
+ if (targetContainer)
+ {
+ if (hadOwnPalette)
+ targetContainer->setPalette(restorePalette);
+ else
+ targetContainer->unsetPalette();
+ }
+ targetContainer = wa;
+ hadOwnPalette = wa->ownPalette();
+ restorePalette = wa->palette();
+ wa->setPaletteBackgroundColor(wa->colorGroup().midlight());
+ }
+ }
+ else if (targetContainer)
+ {
+ if(hadOwnPalette)
+ targetContainer->setPalette(restorePalette);
+ else
+ targetContainer->unsetPalette();
+ targetContainer = 0;
+ }
+
+ // finally move the selected widgets and show/update preview label
+ moveSelectedWidgets(x - p.x(), y - p.y());
+ sizePreviewLabel->setText(QString("%1/%2").arg(w->pos().x()).arg(w->pos().y()));
+ sizePreviewLabel->adjustSize();
+ QRect lg(mapFromGlobal(e->globalPos()) + QPoint(16, 16), sizePreviewLabel->size());
+ checkPreviewGeometry(lg);
+ sizePreviewLabel->setGeometry(lg);
+ sizePreviewLabel->raise();
+ sizePreviewLabel->show();
+ }
+ else
+ { // if we don't need to move, do some indication
+ QRect lg(mapFromGlobal(e->globalPos()) + QPoint(16, 16), sizePreviewLabel->size());
+ checkPreviewGeometry(lg);
+ sizePreviewLabel->move(lg.x(), lg.y());
+ }
+
+ oldPressPos += (p - w->pos());
+ }
+ else if (drawRubber)
+ // draw rubber if we are in rubber-selection mode
+ continueRectDraw(mapFromGlobal(e->globalPos()), e->globalPos(), this, Rubber);
+ break;
+ case CONNECT_TOOL:
+ restoreConnectionLine();
+ wid = qApp->widgetAt(e->globalPos(), true);
+ if (wid)
+ wid = designerWidget(wid);
+ if (wid && (isMainContainer(wid) || insertedWidgets.find(wid)) && wid->isVisibleTo(this))
+ newReceiver = wid;
+ if (newReceiver && (newReceiver->inherits("QLayoutWidget")
+ || newReceiver->inherits("Spacer")))
+ newReceiver = (QWidget*)connectReceiver;
+ drawRecRect = newReceiver != connectReceiver;
+ currentConnectPos = mapFromGlobal(e->globalPos());
+ if (newReceiver && (isMainContainer(newReceiver)
+ || insertedWidgets.find(newReceiver)) && !isCentralWidget(newReceiver))
+ connectReceiver = connectableObject(newReceiver, connectReceiver);
+ mainWindow()->statusBar()->message(i18n("Connect '%1' to '%2'").arg(connectSender->name()).
+ arg(connectReceiver->name()));
+ qApp->processEvents();
+ if (drawRecRect)
+ restoreRect(QRect(mapToForm(((QWidget*)oldReceiver)->parentWidget(),
+ ((QWidget*)oldReceiver)->pos()), ((QWidget*)oldReceiver)->size()));
+ drawConnectLine();
+ break;
+ case ORDER_TOOL:
+ break;
+ default: // we are in an insert-widget tool
+ if (insertParent) // draw insert rect
+ continueRectDraw(w->mapFromGlobal(e->globalPos()), e->globalPos(), w, Insert);
+ break;
+ }
+}
+
+void FormWindow::handleMouseRelease(QMouseEvent * e, QWidget * w)
+{
+ if (e->button() != LeftButton)
+ return;
+
+ switch (currTool)
+ {
+ case POINTER_TOOL:
+ if (widgetPressed && allowMove(w))
+ { // we moved the widget
+ sizePreviewLabel->hide();
+
+ if (moving.isEmpty() || w->pos() == *moving.find((ulong) w))
+ break;
+
+ // restore targetContainer
+ if (targetContainer)
+ {
+ if (hadOwnPalette)
+ targetContainer->setPalette(restorePalette);
+ else
+ targetContainer->unsetPalette();
+ }
+ // tell property editor to update
+ if (propertyWidget && propertyWidget->isWidgetType() && !isMainContainer(propertyWidget))
+ emitUpdateProperties(propertyWidget);
+
+ QMapConstIterator < ulong, QPoint > it = moving.begin();
+ QWidget *oldParent = ((QWidget *) it.key())->parentWidget();
+ QWidget *newParent = oldParent;
+ // check whether we have to reparent the selection
+ QWidget *wa = containerAt(e->globalPos(), ((QWidget *) it.key()));
+ if (wa)
+ {
+ wa = WidgetFactory::containerOfWidget(wa);
+ // ok, looks like we moved onto a container
+
+ // check whether we really have different parents.
+ if (wa == ((QWidget *) it.key())->parentWidget())
+ goto make_move_command;
+
+ // break layout if necessary
+ if (WidgetFactory::layoutType(wa) != WidgetFactory::NoLayout)
+ {
+ if (KMessageBox::questionYesNo(mainWindow(),
+ i18n("You tried to insert a widget into the "
+ "layout Container Widget '%1'.\n"
+ "This is not possible. "
+ "In order to insert the widget, the layout of '%1'\n"
+ "must first be broken.\n"
+ "Break the layout or cancel the operation?").
+ arg(wa->name()).arg(wa->name()), i18n("Inserting Widget"),
+ i18n("&Break Layout"), KStdGuiItem::cancel()) == KMessageBox::No)
+ goto make_move_command; // cancel
+ breakLayout(wa);
+ }
+ // doesn't need to be a command, the MoveCommand does reparenting too
+ bool emitSelChanged = false;
+ for (QMap < ulong, QPoint >::Iterator it = moving.begin(); it != moving.end(); ++it)
+ {
+ QWidget *i = (QWidget *) it.key();
+ if (!emitSelChanged && i->inherits("QButton"))
+ {
+ if (i->parentWidget() && i->parentWidget()->inherits("QButtonGroup") ||
+ wa->inherits("QButtonGroup"))
+ emitSelChanged = true;
+ if (!wa->inherits("QButtonGroup"))
+ {
+ MetaDataBase::setPropertyChanged(i, "buttonGroupId", false);
+ if (i->parentWidget() && i->parentWidget()->inherits("QButtonGroup"))
+ ((QButtonGroup *) i->parentWidget())->remove((QButton *) i);
+ }
+ }
+ QPoint pos = wa->mapFromGlobal(i->mapToGlobal(QPoint(0, 0)));
+ i->reparent(wa, pos, true);
+ raiseSelection(i);
+ raiseChildSelections(i);
+ widgetChanged(i);
+ mainWindow()->objectHierarchy()->widgetRemoved(i);
+ mainWindow()->objectHierarchy()->widgetInserted(i);
+ }
+ if (emitSelChanged)
+ {
+ emit showProperties(wa);
+ emit showProperties(propertyWidget);
+ }
+ newParent = wa;
+ }
+
+ make_move_command:
+ QWidgetList widgets; // collect the widgets and its old and new positions which have been moved
+ QValueList < QPoint > oldPos, newPos;
+ for (it = moving.begin(); it != moving.end(); ++it)
+ {
+ widgets.append((QWidget *) it.key());
+ oldPos.append(*it);
+ newPos.append(((QWidget *) it.key())->pos());
+ }
+ // add move command, don't execute it, this is just a summary of the operations we did during the move-event handling
+ commandHistory()->addCommand(new MoveCommand(i18n("Move"),
+ this, widgets, oldPos, newPos, oldParent, newParent));
+ } else if (drawRubber)
+ { // we were drawing a rubber selection
+ endRectDraw(); // get rid of the rectangle
+ blockSignals(true);
+ selectWidgets(); // select widgets which intersect the rect
+ blockSignals(false);
+ emitSelectionChanged(); // inform about selection changes
+ if (propertyWidget)
+ emitShowProperties(propertyWidget);
+ }
+ break;
+ case CONNECT_TOOL:
+ restoreConnectionLine();
+ if (connectSender)
+ restoreRect(QRect(mapToForm(((QWidget *) connectSender)->parentWidget(),
+ ((QWidget *) connectSender)->pos()), ((QWidget *) connectSender)->size()));
+ if (connectReceiver)
+ restoreRect(QRect(mapToForm(((QWidget *) connectReceiver)->parentWidget(),
+ ((QWidget *) connectReceiver)->pos()), ((QWidget *) connectReceiver)->size()));
+ endUnclippedPainter();
+ qApp->processEvents();
+ if (connectSender && connectReceiver)
+ editConnections();
+ break;
+ case ORDER_TOOL:
+ break;
+ default: // any insert widget tool is active
+ if (insertParent)
+ { // we should insert the new widget now
+ endRectDraw();
+ if (WidgetFactory::layoutType(insertParent) != WidgetFactory::NoLayout)
+ {
+ if (KMessageBox::questionYesNo(mainWindow(),
+ i18n("You tried to insert a widget into the "
+ "layout Container Widget '%1'.\n"
+ "This is not possible. "
+ "In order to insert the widget, the layout of '%1'\n"
+ "must first be broken.\n"
+ "Break the layout or cancel the operation?").
+ arg(insertParent->name()).
+ arg(insertParent->name()), i18n("Inserting Widget"),
+ i18n("&Break Layout"), KStdGuiItem::cancel()) == KMessageBox::Yes)
+ {
+ breakLayout(insertParent);
+ } else
+ {
+ if (!toolFixed)
+ mainWindow()->resetTool();
+ break;
+ }
+ }
+ insertWidget(); // so do it
+ }
+ break;
+ }
+ widgetPressed = false;
+ drawRubber = false;
+ insertParent = 0;
+ delete buffer;
+ buffer = 0;
+}
+
+void FormWindow::handleKeyPress(QKeyEvent * e, QWidget * w)
+{
+ e->ignore();
+ checkSelectionsTimer->stop();
+ if (!checkedSelectionsForMove &&
+ (e->key() == Key_Left ||
+ e->key() == Key_Right ||
+ e->key() == Key_Up || e->key() == Key_Down) && propertyWidget->isWidgetType())
+ checkSelectionsForMove((QWidget *) propertyWidget);
+ checkSelectionsTimer->start(1000, true);
+ if (e->key() == Key_Left || e->key() == Key_Right || e->key() == Key_Up || e->key() == Key_Down)
+ {
+ QWidgetList widgets;
+ QValueList < QPoint > oldPos, newPos;
+ for (WidgetSelection * s = selections.first(); s; s = selections.next())
+ {
+ if (s->isUsed())
+ {
+ int dx = 0, dy = 0;
+ bool control = e->state() & ControlButton;
+
+ switch (e->key())
+ {
+ case Key_Left:
+ {
+ e->accept();
+ if (control)
+ dx = -1;
+ else
+ dx = -grid().x();
+ }
+ break;
+ case Key_Right:
+ {
+ e->accept();
+ if (control)
+ dx = 1;
+ else
+ dx = grid().x();
+ }
+ break;
+ case Key_Up:
+ {
+ e->accept();
+ if (control)
+ dy = -1;
+ else
+ dy = -grid().y();
+ }
+ break;
+ case Key_Down:
+ {
+ e->accept();
+ if (control)
+ dy = 1;
+ else
+ dy = grid().y();
+ }
+ break;
+ default:
+ break;
+ }
+
+ widgets.append(s->widget());
+ oldPos.append(s->widget()->pos());
+ newPos.append(s->widget()->pos() + QPoint(dx, dy));
+ }
+ }
+ if (!widgets.isEmpty())
+ {
+ MoveCommand *cmd = new MoveCommand(i18n("Move"), this,
+ widgets, oldPos, newPos, 0, 0);
+ commandHistory()->addCommand(cmd, true);
+ cmd->execute();
+ }
+ }
+ if (!e->isAccepted())
+ {
+ QObjectList *l = queryList("QWidget");
+ if (!l)
+ return;
+ if (l->find(w) != -1)
+ e->accept();
+ delete l;
+ }
+
+}
+
+void FormWindow::handleKeyRelease(QKeyEvent * e, QWidget *)
+{
+ e->ignore();
+}
+
+void FormWindow::selectWidget(QObject * o, bool select)
+{
+ if (!o->isWidgetType())
+ {
+ // ########### do QObject stuff
+ return;
+ }
+
+ QWidget *w = (QWidget *) o;
+
+ if (isMainContainer(w))
+ {
+ QObject *opw = propertyWidget;
+ propertyWidget = mainContainer();
+ if (opw->isWidgetType())
+ repaintSelection((QWidget *) opw);
+ emitShowProperties(propertyWidget);
+ return;
+ }
+
+ if (mainContainer()->inherits("QMainWindow") &&
+ w == ((QMainWindow *) mainContainer())->centralWidget())
+ {
+ QObject *opw = propertyWidget;
+ propertyWidget = mainContainer();
+ if (opw->isWidgetType())
+ repaintSelection((QWidget *) opw);
+ emitShowProperties(propertyWidget);
+ return;
+ }
+
+ if (o->inherits("QDesignerToolBar") || o->inherits("QDesignerMenuBar"))
+ return;
+
+ if (select)
+ {
+ QObject *opw = propertyWidget;
+ propertyWidget = w;
+ if (opw->isWidgetType())
+ repaintSelection((QWidget *) opw);
+ if (!isPropertyShowingBlocked())
+ emitShowProperties(propertyWidget);
+ WidgetSelection *s = usedSelections.find(w);
+ if (s)
+ {
+ s->show();
+ return;
+ }
+
+ for (WidgetSelection * s2 = selections.first(); s2; s2 = selections.next())
+ {
+ if (!s2->isUsed())
+ {
+ s = s2;
+ }
+ }
+
+ if (!s)
+ {
+ s = new WidgetSelection(this, &usedSelections);
+ selections.append(s);
+ }
+
+ s->setWidget(w);
+ emitSelectionChanged();
+ } else
+ {
+ WidgetSelection *s = usedSelections.find(w);
+ if (s)
+ s->setWidget(0);
+ QObject *opw = propertyWidget;
+ if (!usedSelections.isEmpty())
+ propertyWidget = QPtrDictIterator < WidgetSelection > (usedSelections).current()->widget();
+ else
+ propertyWidget = mainContainer();
+ if (opw->isWidgetType())
+ repaintSelection((QWidget *) opw);
+ if (!isPropertyShowingBlocked())
+ emitShowProperties(propertyWidget);
+ emitSelectionChanged();
+ }
+}
+
+QPoint FormWindow::grid() const
+{
+ if (!mainWindow()->snapGrid())
+ return QPoint(1, 1);
+ return mainWindow()->grid();
+}
+
+void FormWindow::updateSelection(QWidget * w)
+{
+ WidgetSelection *s = usedSelections.find(w);
+ if (!w->isVisibleTo(this))
+ selectWidget(w, false);
+ else if (s)
+ s->updateGeometry();
+}
+
+void FormWindow::raiseSelection(QWidget * w)
+{
+ WidgetSelection *s = usedSelections.find(w);
+ if (s)
+ s->show();
+}
+
+void FormWindow::repaintSelection(QWidget * w)
+{
+ WidgetSelection *s = usedSelections.find(w);
+ if (s)
+ s->update();
+}
+
+void FormWindow::clearSelection(bool changePropertyDisplay)
+{
+ QPtrDictIterator < WidgetSelection > it(usedSelections);
+ for (; it.current(); ++it)
+ it.current()->setWidget(0, false);
+
+ usedSelections.clear();
+ if (changePropertyDisplay)
+ {
+ QObject *opw = propertyWidget;
+ propertyWidget = mainContainer();
+ if (opw->isWidgetType())
+ repaintSelection((QWidget *) opw);
+ emitShowProperties(propertyWidget);
+ }
+ emitSelectionChanged();
+}
+
+void FormWindow::startRectDraw(const QPoint & p, const QPoint & global, QWidget *, RectType t)
+{
+ QPoint pos(p);
+ pos = mapFromGlobal(global);
+ oldRectValid = false;
+ beginUnclippedPainter(true);
+ if (t == Rubber)
+ unclippedPainter->setPen(QPen(color0, 1));
+ if (t == Insert)
+ rectAnchor = gridPoint(pos);
+ else if (t == Rubber)
+ rectAnchor = pos;
+ currRect = QRect(rectAnchor, QPoint(0, 0));
+ if (t == Insert)
+ drawSizePreview(pos, i18n("Use Size Hint"));
+}
+
+void FormWindow::continueRectDraw(const QPoint & p, const QPoint & global, QWidget *, RectType t)
+{
+ QPoint pos = p;
+ pos = mapFromGlobal(global);
+ QPoint p2;
+ if (t == Insert)
+ p2 = gridPoint(pos);
+ else if (t == Rubber)
+ p2 = pos;
+ QRect r(rectAnchor, p2);
+ r = r.normalize();
+
+ if (currRect == r)
+ {
+ QString t("%1/%2");
+ t = t.arg(r.width() - 1).arg(r.height() - 1);
+ drawSizePreview(pos, t);
+ return;
+ }
+
+ if (oldRectValid)
+ unclippedPainter->drawRect(currRect);
+ if (r.width() > 1 || r.height() > 1)
+ {
+ oldRectValid = true;
+ currRect = r;
+ if (t == Insert)
+ {
+ QString t("%1/%2");
+ t = t.arg(r.width() - 1).arg(r.height() - 1);
+ drawSizePreview(pos, t);
+ }
+ unclippedPainter->setClipRegion(QRegion(rect()).subtract(QRect(sizePreviewPos,
+ sizePreviewPixmap.size())));
+ unclippedPainter->drawRect(currRect);
+ unclippedPainter->setClipping(false);
+ } else
+ {
+ oldRectValid = false;
+ if (t == Insert)
+ drawSizePreview(pos, i18n("Use Size Hint"));
+ }
+}
+
+void FormWindow::endRectDraw()
+{
+ if (!unclippedPainter)
+ return;
+
+ if (oldRectValid)
+ unclippedPainter->drawRect(currRect);
+ drawSizePreview(QPoint(-1, -1), QString::null);
+ endUnclippedPainter();
+}
+
+void FormWindow::selectWidgets()
+{
+ QObjectList *l = mainContainer()->queryList("QWidget");
+ if (l)
+ {
+ for (QObject * o = l->first(); o; o = l->next())
+ {
+ if (((QWidget *) o)->isVisibleTo(this) && insertedWidgets[(void *) o])
+ {
+ QPoint p = ((QWidget *) o)->mapToGlobal(QPoint(0, 0));
+ p = mapFromGlobal(p);
+ QRect r(p, ((QWidget *) o)->size());
+ if (r.intersects(currRect) && !r.contains(currRect))
+ selectWidget((QWidget *) o);
+ }
+ }
+ delete l;
+ }
+ emitSelectionChanged();
+}
+
+bool FormWindow::isWidgetSelected(QObject * w)
+{
+ if (w->isWidgetType())
+ return usedSelections.find((QWidget *) w) != 0;
+ return false; // #### do stuff for QObjects
+}
+
+void FormWindow::moveSelectedWidgets(int dx, int dy)
+{
+ QPtrDictIterator < WidgetSelection > it(usedSelections);
+ for (; it.current(); ++it)
+ {
+ WidgetSelection *s = it.current();
+ QWidget *w = s->widget();
+ if (w->parentWidget()
+ && WidgetFactory::layoutType(w->parentWidget()) != WidgetFactory::NoLayout)
+ continue;
+ w->move(w->x() + dx, w->y() + dy);
+ s->updateGeometry();
+ updateChildSelections(w);
+ }
+}
+
+CommandHistory *FormWindow::commandHistory()
+{
+ return &commands;
+}
+
+void FormWindow::undo()
+{
+ commandHistory()->undo();
+}
+
+void FormWindow::redo()
+{
+ commandHistory()->redo();
+}
+
+void FormWindow::raiseChildSelections(QWidget * w)
+{
+ QObjectList *l = w->queryList("QWidget");
+ if (!l || !l->first())
+ {
+ delete l;
+ return;
+ }
+
+ QPtrDictIterator < WidgetSelection > it(usedSelections);
+ for (; it.current(); ++it)
+ {
+ if (l->findRef(it.current()->widget()) != -1)
+ it.current()->show();
+ }
+ delete l;
+}
+
+void FormWindow::updateChildSelections(QWidget * w)
+{
+ QObjectList *l = w->queryList("QWidget");
+ if (l)
+ {
+ for (QObject * o = l->first(); o; o = l->next())
+ {
+ if (o->isWidgetType() && insertedWidgets.find((QWidget *) o))
+ updateSelection((QWidget *) o);
+ }
+ delete l;
+ }
+}
+
+void FormWindow::checkSelectionsForMove(QWidget * w)
+{
+ checkedSelectionsForMove = true;
+
+ QObjectList *l = w->parentWidget()->queryList("QWidget", 0, false, false);
+ moving.clear();
+ if (l)
+ {
+ QPtrDictIterator < WidgetSelection > it(usedSelections);
+ WidgetSelection *sel;
+ while ((sel = it.current()) != 0)
+ {
+ if (it.current()->widget() == mainContainer())
+ continue;
+ ++it;
+ if (l->find(sel->widget()) == -1)
+ {
+ if (WidgetFactory::layoutType(w) == WidgetFactory::NoLayout)
+ sel->setWidget(0);
+ } else
+ {
+ if (WidgetFactory::layoutType(sel->widget()->parentWidget()) == WidgetFactory::NoLayout)
+ {
+ moving.insert((ulong) sel->widget(), sel->widget()->pos());
+ sel->widget()->raise();
+ raiseChildSelections(sel->widget());
+ raiseSelection(sel->widget());
+ }
+ }
+ }
+ delete l;
+ }
+}
+
+void FormWindow::deleteWidgets()
+{
+ QWidgetList widgets;
+ QPtrDictIterator < WidgetSelection > it(usedSelections);
+ for (; it.current(); ++it)
+ {
+ QWidget *tb = 0;
+ if (!(tb = mainWindow()->isAToolBarChild(it.current()->widget())))
+ widgets.append(it.current()->widget());
+ else
+ ((QDesignerToolBar *) tb)->removeWidget(it.current()->widget());
+ }
+
+ if (widgets.isEmpty())
+ return;
+
+ DeleteCommand *cmd = new DeleteCommand(i18n("Delete"), this, widgets);
+ commandHistory()->addCommand(cmd);
+ cmd->execute();
+}
+
+void FormWindow::editAdjustSize()
+{
+ QPtrList < Command > commands;
+ QWidgetList widgets = selectedWidgets();
+ if (widgets.isEmpty())
+ {
+ QRect oldr = geometry();
+ mainContainer()->adjustSize();
+ resize(mainContainer()->size());
+ // check whether our own size constraint hit us
+ if (size() != mainContainer()->size())
+ mainContainer()->resize(size());
+ QRect nr = geometry();
+ if (oldr != nr)
+ {
+ ResizeCommand *cmd = new ResizeCommand(i18n("Adjust Size"), this, this, oldr, nr);
+ commandHistory()->addCommand(cmd);
+ }
+ return;
+ }
+ for (QWidget * w = widgets.first(); w; w = widgets.next())
+ {
+ if (w->parentWidget()
+ && WidgetFactory::layoutType(w->parentWidget()) != WidgetFactory::NoLayout)
+ continue;
+ QRect oldr = w->geometry();
+ w->adjustSize();
+ QRect nr = w->geometry();
+ if (oldr != nr)
+ commands.append(new ResizeCommand(i18n("Adjust Size"), this, w, oldr, nr));
+ }
+
+ if (commands.isEmpty())
+ return;
+ for (WidgetSelection * s = selections.first(); s; s = selections.next())
+ s->updateGeometry();
+
+ MacroCommand *cmd = new MacroCommand(i18n("Adjust Size"), this, commands);
+ commandHistory()->addCommand(cmd);
+}
+
+
+QWidgetList FormWindow::selectedWidgets() const
+{
+ QWidgetList widgets;
+ for (QPtrDictIterator<WidgetSelection> it(usedSelections); it.current(); ++it)
+ widgets.append(it.current()->widget());
+ return widgets;
+}
+
+void FormWindow::widgetChanged(QObject *w)
+{
+ if (w->isWidgetType())
+ updateSelection((QWidget*)w);
+}
+
+QLabel *FormWindow::sizePreview() const
+{
+ if (!sizePreviewLabel)
+ {
+ ((FormWindow*)this)->sizePreviewLabel = new QLabel((FormWindow*)this);
+ ((FormWindow*)this)->sizePreviewLabel->hide();
+ ((FormWindow*)this)->sizePreviewLabel->setBackgroundColor(QColor(255, 255, 128));
+ ((FormWindow*)this)->sizePreviewLabel->setFrameStyle(QFrame::Plain | QFrame::Box);
+ }
+ return sizePreviewLabel;
+}
+
+void FormWindow::invalidCheckedSelections()
+{
+ checkedSelectionsForMove = false;
+}
+
+void FormWindow::checkPreviewGeometry(QRect & r)
+{
+ if (rect().contains(r))
+ return;
+ if (r.left() < rect().left())
+ r.moveTopLeft(QPoint(0, r.top()));
+ if (r.right() > rect().right())
+ r.moveBottomRight(QPoint(rect().right(), r.bottom()));
+ if (r.top() < rect().top())
+ r.moveTopLeft(QPoint(r.left(), rect().top()));
+ if (r.bottom() > rect().bottom())
+ r.moveBottomRight(QPoint(r.right(), rect().bottom()));
+}
+
+void FormWindow::focusInEvent(QFocusEvent *)
+{
+ if (mContainer)
+ {
+ QVariant prop = mContainer->property("useInternalParser");
+ KommanderWidget::useInternalParser = prop.toBool();
+
+ }
+}
+
+void FormWindow::focusOutEvent(QFocusEvent *)
+{
+ if (propertyWidget && !isMainContainer(propertyWidget) && !isWidgetSelected(propertyWidget))
+ {
+ QObject *opw = propertyWidget;
+ propertyWidget = mainContainer();
+ if (opw->isWidgetType())
+ repaintSelection((QWidget *) opw);
+ }
+}
+
+void FormWindow::resizeEvent(QResizeEvent * e)
+{
+ QWidget::resizeEvent(e);
+ if (currTool == ORDER_TOOL)
+ repositionOrderIndicators();
+ if (isVisible())
+ formFile()->setModified(true);
+}
+
+QPtrDict < QWidget > *FormWindow::widgets()
+{
+ return &insertedWidgets;
+}
+
+QWidget *FormWindow::designerWidget(QObject * o) const
+{
+ if (!o || !o->isWidgetType())
+ return 0;
+ QWidget *w = (QWidget *) o;
+ while (w && !isMainContainer(w) && !insertedWidgets[(void *) w] || isCentralWidget(w))
+ w = (QWidget *) w->parent();
+ return w;
+}
+
+void FormWindow::emitShowProperties(QObject * w)
+{
+ if (w)
+ {
+ QObject *opw = propertyWidget;
+ propertyWidget = w;
+ if (opw->isWidgetType())
+ repaintSelection((QWidget *) opw);
+ }
+ showPropertiesTimer->stop();
+ showPropertiesTimer->start(0, true);
+}
+
+void FormWindow::emitUpdateProperties(QObject * w)
+{
+ if (w == propertyWidget)
+ {
+ updatePropertiesTimer->stop();
+ updatePropertiesTimer->start(0, true);
+ }
+}
+
+void FormWindow::emitSelectionChanged()
+{
+ selectionChangedTimer->stop();
+ selectionChangedTimer->start(0, true);
+}
+
+void FormWindow::updatePropertiesTimerDone()
+{
+ if (propertyWidget && mainWindow()->formWindow() == this)
+ emit updateProperties(propertyWidget);
+}
+
+void FormWindow::showPropertiesTimerDone()
+{
+ if (propertyWidget && mainWindow()->formWindow() == this)
+ emit showProperties(propertyWidget);
+}
+
+void FormWindow::selectionChangedTimerDone()
+{
+ emit selectionChanged();
+}
+
+void FormWindow::currentToolChanged()
+{
+ toolFixed = false;
+ int t = mainwindow->currentTool();
+ if (currTool == t && t != ORDER_TOOL)
+ return;
+
+ // tool cleanup
+ switch (currTool)
+ {
+ case ORDER_TOOL:
+ hideOrderIndicators();
+ break;
+ case CONNECT_TOOL:
+ restoreConnectionLine();
+ if (connectSender)
+ restoreRect(QRect(mapToForm(((QWidget *) connectSender)->parentWidget(),
+ ((QWidget *) connectSender)->pos()), ((QWidget *) connectSender)->size()));
+ if (connectReceiver)
+ restoreRect(QRect(mapToForm(((QWidget *) connectReceiver)->parentWidget(),
+ ((QWidget *) connectReceiver)->pos()), ((QWidget *) connectReceiver)->size()));
+ endUnclippedPainter();
+ break;
+ case POINTER_TOOL:
+ break;
+ default:
+ if (insertParent)
+ endRectDraw();
+ break;
+ }
+
+ connectSender = connectReceiver = 0;
+ widgetPressed = false;
+ drawRubber = false;
+ insertParent = 0;
+ delete buffer;
+ buffer = 0;
+
+ currTool = t;
+
+ if (hasFocus())
+ clearSelection(false);
+
+ mainWindow()->statusBar()->clear();
+
+ // tool setup
+ switch (currTool)
+ {
+ case POINTER_TOOL:
+ if (propertyWidget && !isMainContainer(propertyWidget) && !isWidgetSelected(propertyWidget))
+ emitShowProperties(mainContainer());
+ restoreCursors(this, this);
+ break;
+ case ORDER_TOOL:
+ if (mainWindow()->formWindow() == this)
+ {
+ mainWindow()->statusBar()->message(i18n("Click widgets to change the tab order..."));
+ orderedWidgets.clear();
+ showOrderIndicators();
+ if (mainWindow()->formWindow() == this)
+ emitShowProperties(mainContainer());
+ setCursorToAll(ArrowCursor, this);
+ }
+ break;
+ case CONNECT_TOOL:
+ mainWindow()->statusBar()->message(i18n("Drag a line to create a connection..."));
+ setCursorToAll(CrossCursor, this);
+ if (mainWindow()->formWindow() == this)
+ emitShowProperties(mainContainer());
+ break;
+ default:
+ mainWindow()->statusBar()->message(i18n("Click on the form to insert a %1...").
+ arg(WidgetDatabase::toolTip(currTool).lower()));
+ setCursorToAll(CrossCursor, this);
+ if (mainWindow()->formWindow() == this)
+ emitShowProperties(mainContainer());
+ break;
+ }
+}
+
+void FormWindow::showOrderIndicators()
+{
+ hideOrderIndicators();
+ orderIndicators.setAutoDelete(true);
+ QObjectList *l = mainContainer()->queryList("QWidget");
+ stackedWidgets = MetaDataBase::tabOrder(this);
+ if (l)
+ {
+ int order = 1;
+ for (QObject * o = l->first(); o; o = l->next())
+ {
+ QWidget *w = (QWidget *) o;
+ if (w->isVisibleTo(w->parentWidget()) &&
+ insertedWidgets[(void *) w] && w->focusPolicy() != NoFocus)
+ {
+ OrderIndicator *ind = new OrderIndicator(order++, w, this);
+ orderIndicators.append(ind);
+ if (stackedWidgets.findRef(w) == -1)
+ stackedWidgets.append(w);
+ }
+ }
+ delete l;
+ }
+ updateOrderIndicators();
+}
+
+void FormWindow::hideOrderIndicators()
+{
+ orderIndicators.clear();
+}
+
+void FormWindow::updateOrderIndicators()
+{
+ int order = 1;
+ for (QWidget * w = stackedWidgets.first(); w; w = stackedWidgets.next())
+ {
+ for (OrderIndicator * i = orderIndicators.first(); i; i = orderIndicators.next())
+ i->setOrder(order, w);
+ order++;
+ }
+}
+
+void FormWindow::repositionOrderIndicators()
+{
+ for (OrderIndicator * i = orderIndicators.first(); i; i = orderIndicators.next())
+ i->reposition();
+}
+
+void FormWindow::updateUndoInfo()
+{
+ commandHistory()->emitUndoRedo();
+}
+
+bool FormWindow::checkCustomWidgets()
+{
+ QStringList missingCustomWidgets;
+ QPtrDictIterator < QWidget > it(insertedWidgets);
+ for (; it.current(); ++it)
+ {
+ if (it.current()->isA("CustomWidget"))
+ {
+ QString className = WidgetFactory::classNameOf(it.current());
+ if (!MetaDataBase::hasCustomWidget(className))
+ missingCustomWidgets << className;
+ }
+ }
+ return true;
+}
+
+void FormWindow::setPropertyShowingBlocked(bool b)
+{
+ propShowBlocked = b;
+}
+
+bool FormWindow::isPropertyShowingBlocked() const
+{
+ return propShowBlocked;
+}
+
+
+int FormWindow::numSelectedWidgets() const
+{
+ return usedSelections.count();
+}
+
+QString FormWindow::copy()
+{
+ Resource resource(mainWindow());
+ resource.setWidget(this);
+ return resource.copy();
+}
+
+void FormWindow::lowerWidgets()
+{
+ QWidgetList widgets;
+ QPtrDictIterator < WidgetSelection > it(usedSelections);
+ for (; it.current(); ++it)
+ widgets.append(it.current()->widget());
+
+ LowerCommand *cmd = new LowerCommand(i18n("Lower"), this, widgets);
+ cmd->execute();
+ commandHistory()->addCommand(cmd);
+}
+
+static void find_accel(const QString & txt, QMap < QChar, QWidgetList > &accels, QWidget * w)
+{
+ int i = txt.find("&");
+ if (i == -1)
+ return;
+ QChar c = txt[i + 1];
+ if (c.isNull() || c == '&')
+ return;
+ c = c.lower();
+ QMap < QChar, QWidgetList >::Iterator it = accels.find(c);
+ if (it == accels.end())
+ {
+ QWidgetList wl;
+ wl.append(w);
+ accels.insert(c, wl);
+ } else
+ {
+ QWidgetList *wl = &*it;
+ wl->append(w);
+ }
+}
+
+void FormWindow::checkAccels()
+{
+ QMap < QChar, QWidgetList > accels;
+ QObjectList *l = mainContainer()->queryList("QWidget");
+ if (l)
+ {
+ for (QObject * o = l->first(); o; o = l->next())
+ {
+ if (((QWidget *) o)->isVisibleTo(this) && insertedWidgets[(void *) o])
+ {
+ QWidget *w = (QWidget *) o;
+ const QMetaProperty *text =
+ w->metaObject()->property(w->metaObject()->findProperty("text", true), true);
+ const QMetaProperty *title =
+ w->metaObject()->property(w->metaObject()->findProperty("title", true), true);
+ const QMetaProperty *pageTitle =
+ w->metaObject()->property(w->metaObject()->findProperty("pageTitle", true), true);
+ if (text)
+ find_accel(w->property("text").toString(), accels, w);
+ if (title)
+ find_accel(w->property("title").toString(), accels, w);
+ if (pageTitle)
+ find_accel(w->property("pageTitle").toString(), accels, w);
+ }
+ }
+ delete l;
+ }
+
+ bool ok = true;
+ QWidget *wid;
+ for (QMap < QChar, QWidgetList >::Iterator it = accels.begin(); it != accels.end(); ++it)
+ {
+ if ((*it).count() > 1)
+ {
+ ok = false;
+ if (KMessageBox::questionYesNo(mainWindow(),
+ i18n("Accelerator '%1' is used %2 times.").arg(it.key().upper()).arg((*it).count()),
+ i18n("Check Accelerators"), i18n("&Select"), KStdGuiItem::cancel()) == KMessageBox::Yes)
+ {
+ clearSelection(false);
+ for (wid = (*it).first(); wid; wid = (*it).next())
+ selectWidget(wid, true);
+ }
+ return;
+ }
+ }
+
+ if (ok)
+ KMessageBox::information(mainWindow(), i18n("No accelerator is used more than once."),
+ i18n("Check Accelerators"));
+}
+
+void FormWindow::raiseWidgets()
+{
+ QWidgetList widgets;
+ QPtrDictIterator < WidgetSelection > it(usedSelections);
+ for (; it.current(); ++it)
+ widgets.append(it.current()->widget());
+
+ RaiseCommand *cmd = new RaiseCommand(i18n("Raise"), this, widgets);
+ cmd->execute();
+ commandHistory()->addCommand(cmd);
+}
+
+void FormWindow::paste(const QString & cb, QWidget * parent)
+{
+ Resource resource(mainWindow());
+ resource.setWidget(this);
+ resource.paste(cb, parent);
+}
+
+void FormWindow::selectAll()
+{
+ checkedSelectionsForMove = false;
+ blockSignals(true);
+ QObjectList *l = mainContainer()->queryList("QWidget");
+ if (l)
+ {
+ for (QObject * o = l->first(); o; o = l->next())
+ {
+ if (((QWidget *) o)->isVisibleTo(this) && insertedWidgets[(void *) o])
+ {
+ selectWidget((QWidget *) o);
+ }
+ }
+ delete l;
+ }
+
+ blockSignals(false);
+ emitSelectionChanged();
+ if (propertyWidget)
+ emitShowProperties(propertyWidget);
+ emitSelectionChanged();
+}
+
+void FormWindow::layoutHorizontal()
+{
+ QWidgetList widgets(selectedWidgets());
+ LayoutHorizontalCommand *cmd = new LayoutHorizontalCommand(i18n("Lay Out Horizontally"),
+ this, mainContainer(), 0, widgets);
+ clearSelection(false);
+ commandHistory()->addCommand(cmd);
+ cmd->execute();
+}
+
+void FormWindow::layoutVertical()
+{
+ QWidgetList widgets(selectedWidgets());
+ LayoutVerticalCommand *cmd = new LayoutVerticalCommand(i18n("Lay Out Vertically"),
+ this, mainContainer(), 0, widgets);
+ clearSelection(false);
+ commandHistory()->addCommand(cmd);
+ cmd->execute();
+}
+
+void FormWindow::layoutHorizontalSplit()
+{
+ QWidgetList widgets(selectedWidgets());
+ LayoutHorizontalSplitCommand *cmd =
+ new LayoutHorizontalSplitCommand(i18n("Lay Out Horizontally (in splitter)"),
+ this, mainContainer(), 0, widgets);
+ clearSelection(false);
+ commandHistory()->addCommand(cmd);
+ cmd->execute();
+}
+
+void FormWindow::layoutVerticalSplit()
+{
+ QWidgetList widgets(selectedWidgets());
+ LayoutVerticalSplitCommand *cmd =
+ new LayoutVerticalSplitCommand(i18n("Lay Out Vertically (in splitter)"),
+ this, mainContainer(), 0, widgets);
+ clearSelection(false);
+ commandHistory()->addCommand(cmd);
+ cmd->execute();
+}
+
+void FormWindow::layoutGrid()
+{
+ int xres = grid().x();
+ int yres = grid().y();
+
+ QWidgetList widgets(selectedWidgets());
+ LayoutGridCommand *cmd = new LayoutGridCommand(i18n("Lay Out in a Grid"),
+ this, mainContainer(), 0, widgets, xres, yres);
+ clearSelection(false);
+ commandHistory()->addCommand(cmd);
+ cmd->execute();
+}
+
+void FormWindow::layoutHorizontalContainer(QWidget * w)
+{
+ if (w == this)
+ w = mainContainer();
+ QObjectList *l = (QObjectList *) WidgetFactory::containerOfWidget(w)->children();
+ if (!l)
+ return;
+ QWidgetList widgets;
+ for (QObject * o = l->first(); o; o = l->next())
+ {
+ if (o->isWidgetType() &&
+ ((QWidget *) o)->isVisibleTo(this) && insertedWidgets.find((QWidget *) o))
+ widgets.append((QWidget *) o);
+ }
+ LayoutHorizontalCommand *cmd = new LayoutHorizontalCommand(i18n("Lay Out Children Horizontally"),
+ this, mainContainer(), w, widgets);
+ clearSelection(false);
+ commandHistory()->addCommand(cmd);
+ cmd->execute();
+}
+
+void FormWindow::layoutVerticalContainer(QWidget * w)
+{
+ if (w == this)
+ w = mainContainer();
+ QObjectList *l = (QObjectList *) WidgetFactory::containerOfWidget(w)->children();
+ if (!l)
+ return;
+ QWidgetList widgets;
+ for (QObject * o = l->first(); o; o = l->next())
+ {
+ if (o->isWidgetType() &&
+ ((QWidget *) o)->isVisibleTo(this) && insertedWidgets.find((QWidget *) o))
+ widgets.append((QWidget *) o);
+ }
+ LayoutVerticalCommand *cmd = new LayoutVerticalCommand(i18n("Lay Out Children Vertically"),
+ this, mainContainer(), w, widgets);
+ clearSelection(false);
+ commandHistory()->addCommand(cmd);
+ cmd->execute();
+}
+
+void FormWindow::layoutGridContainer(QWidget * w)
+{
+ if (w == this)
+ w = mainContainer();
+ int xres = grid().x();
+ int yres = grid().y();
+
+ QObjectList *l = (QObjectList *) WidgetFactory::containerOfWidget(w)->children();
+ if (!l)
+ return;
+ QWidgetList widgets;
+ for (QObject * o = l->first(); o; o = l->next())
+ {
+ if (o->isWidgetType() &&
+ ((QWidget *) o)->isVisibleTo(this) && insertedWidgets.find((QWidget *) o))
+ widgets.append((QWidget *) o);
+ }
+ LayoutGridCommand *cmd = new LayoutGridCommand(i18n("Lay Out Children in a Grid"),
+ this, mainContainer(), w, widgets, xres, yres);
+ clearSelection(false);
+ commandHistory()->addCommand(cmd);
+ cmd->execute();
+}
+
+void FormWindow::breakLayout(QWidget * w)
+{
+ if (w == this)
+ w = mainContainer();
+ w = WidgetFactory::containerOfWidget(w);
+ QPtrList < Command > commands;
+
+ for (;;)
+ {
+ if (!w || w == this)
+ break;
+ if (WidgetFactory::layoutType(w) != WidgetFactory::NoLayout &&
+ WidgetDatabase::isContainer(WidgetDatabase::idFromClassName(WidgetFactory::classNameOf(w))))
+ {
+ Command *cmd = breakLayoutCommand(w);
+ if (cmd)
+ commands.insert(0, cmd);
+ if (!w->inherits("QLayoutWidget") && !w->inherits("QSplitter"))
+ break;
+ }
+ w = w->parentWidget();
+ }
+
+ if (commands.isEmpty())
+ return;
+
+ clearSelection(false);
+ MacroCommand *cmd = new MacroCommand(i18n("Break Layout"), this, commands);
+ commandHistory()->addCommand(cmd);
+ cmd->execute();
+}
+
+BreakLayoutCommand *FormWindow::breakLayoutCommand(QWidget * w)
+{
+ QObjectList *l = (QObjectList *) w->children();
+ if (!l)
+ return 0;
+
+ QWidgetList widgets;
+ for (QObject * o = l->first(); o; o = l->next())
+ {
+ if (o->isWidgetType() &&
+ !mainWindow()->isAToolBarChild((QWidget *) o) &&
+ ((QWidget *) o)->isVisibleTo(this) && insertedWidgets.find((QWidget *) o))
+ widgets.append((QWidget *) o);
+ }
+ return new BreakLayoutCommand(i18n("Break Layout"), this,
+ WidgetFactory::widgetOfContainer(w), widgets);
+}
+
+int FormWindow::numVisibleWidgets() const
+{
+ QPtrDictIterator < QWidget > it(insertedWidgets);
+ int visible = 0;
+ for (; it.current(); ++it)
+ {
+ if (it.current()->isVisibleTo((FormWindow *) this))
+ visible++;
+ }
+ return visible;
+}
+
+bool FormWindow::hasInsertedChildren(QWidget *w) const
+{
+ if (!w)
+ return false;
+ w = WidgetFactory::containerOfWidget(w);
+ if (!w)
+ return false;
+ QObjectList *l = w->queryList("QWidget");
+ if (!l || !l->first())
+ {
+ delete l;
+ return false;
+ }
+
+ for (QObject *o = l->first(); o; o = l->next())
+ if (o->isWidgetType() && ((QWidget*)o)->isVisibleTo((FormWindow*)this) &&
+ insertedWidgets.find((QWidget*)o))
+ {
+ delete l;
+ return true;
+ }
+ delete l;
+ return false;
+}
+
+bool FormWindow::allowMove(QWidget *w)
+{
+ w = w->parentWidget();
+ while (w)
+ {
+ if ((isMainContainer(w) || insertedWidgets.find(w)) && WidgetFactory::layoutType(w) ==
+ WidgetFactory::NoLayout)
+ return true;
+ w = w->parentWidget();
+ }
+ return false;
+}
+
+
+void FormWindow::editConnections()
+{
+ buffer = 0;
+ if (!connectSender || !connectReceiver)
+ return;
+ mainWindow()->statusBar()->clear();
+ ConnectionEditor editor(mainwindow, connectSender, connectReceiver, this);
+ mainWindow()->statusBar()->message(i18n("Edit connections..."));
+ editor.exec();
+ mainWindow()->statusBar()->clear();
+ if (!toolFixed)
+ mainwindow->resetTool();
+ connectSender = connectReceiver = 0;
+}
+
+void FormWindow::saveBackground()
+{
+ delete buffer;
+ buffer = new QPixmap(width(), height());
+ *buffer = QPixmap::grabWindow(winId());
+}
+
+void FormWindow::restoreConnectionLine()
+{
+ if (!unclippedPainter || !buffer)
+ return;
+
+ int a =QABS(connectStartPos.x() - currentConnectPos.x());
+ int b = QABS(connectStartPos.y() - currentConnectPos.y());
+ QRect r(connectStartPos, currentConnectPos);
+
+ if (a < 32 || b < 32)
+ { // special case: vertical or horizontal line
+ r = r.normalize();
+ unclippedPainter->drawPixmap(r.x() - 2, r.y() - 2, *buffer,
+ r.x() - 2, r.y() - 2, r.width() + 4, r.height() + 4);
+ return;
+ }
+
+ if (a <= 0)
+ a = 1;
+ if (b <= 0)
+ b = 1;
+ int w, h;
+ if (b > a)
+ {
+ h = 64;
+ w = (a * h) / b;
+ }
+ else
+ {
+ w = 64;
+ h = (b * w) / a;
+ }
+ int dx = 2 * w / 3;
+ int dy = 2 * h / 3;
+ QPoint p(connectStartPos);
+
+ if (r.x() > r.right())
+ {
+ dx = dx * -1;
+ p.setX(p.x() - 64);
+ r.moveBy(-64, 0);
+ }
+ if (r.y() > r.bottom()) {
+ dy = dy * -1;
+ p.setY(p.y() - 64);
+ r.moveBy(0, -64);
+ }
+
+ w = h = 64;
+ r = r.normalize();
+ while (r.contains(p))
+ {
+ unclippedPainter->drawPixmap(p, *buffer, QRect(p, QSize(w, h)));
+ unclippedPainter->setPen(red);
+ p.setX(p.x() + dx);
+ p.setY(p.y() + dy);
+ }
+
+ unclippedPainter->drawPixmap(connectStartPos.x() - 10, connectStartPos.y() - 10, *buffer,
+ connectStartPos.x() - 10, connectStartPos.y() - 10, 20, 20);
+}
+
+void FormWindow::restoreRect(const QRect &rect)
+{
+ if (!unclippedPainter)
+ return;
+ QRect r(rect);
+ r = r.normalize();
+ r = QRect(r.x() + 2, r.y() + 2, r.width() - 4, r.height() - 4);
+ unclippedPainter->drawPixmap(r.x() - 2, r.y() - 2, *buffer, r.x() - 2, r.y() - 2, r.width() + 4, 4);
+ unclippedPainter->drawPixmap(r.x() - 2, r.y() - 2, *buffer, r.x() - 2, r.y() - 2, 4, r.height() + 4);
+ unclippedPainter->drawPixmap(r.x() - 2, r.y() + r.height() - 3, *buffer, r.x() - 2,
+ r.y() + r.height() - 3, r.width() + 4, 5);
+ unclippedPainter->drawPixmap(r.x() + r.width() - 2, r.y(), *buffer, r.x() + r.width() - 2,
+ r.y(), 4, r.height() + 4);
+}
+
+void FormWindow::drawConnectLine()
+{
+ if (!unclippedPainter)
+ return;
+ unclippedPainter->setPen(QPen(white, 2));
+ unclippedPainter->drawLine(connectStartPos, currentConnectPos);
+ unclippedPainter->setPen(QPen(darkCyan, 1));
+ unclippedPainter->drawLine(connectStartPos, currentConnectPos);
+
+ unclippedPainter->setPen(QPen(magenta, 1));
+ if (connectSender)
+ {
+ QWidget *w = (QWidget*)connectSender;
+ QPoint p = mapToForm(w, QPoint(0,0));
+ unclippedPainter->drawRect(QRect(p + QPoint(2, 2), w->size() - QSize(4, 4)));
+ }
+ if (connectReceiver)
+ {
+ QWidget *w = (QWidget*)connectReceiver;
+ QPoint p = mapToForm(w, QPoint(0,0));
+ unclippedPainter->drawRect(QRect(p + QPoint(2, 2), w->size() - QSize(4, 4)));
+ }
+}
+
+QString FormWindow::fileName() const
+{
+ return ff->absFileName();
+}
+
+void FormWindow::setFileName(const QString &fn)
+{
+ ff->setFileName(fn);
+ emit fileNameChanged(ff->fileName(), this);
+}
+
+void FormWindow::modificationChanged(bool m)
+{
+ emit modificationChanged(m, this);
+ emit modificationChanged(m, ff->fileName());
+}
+
+bool FormWindow::unify(QObject *w, QString &s, bool changeIt)
+{
+ bool found = !isMainContainer(w) && !qstrcmp(name(), s.latin1());
+ if (!found)
+ {
+ QString orig = s;
+ int num = 1;
+ QPtrDictIterator<QWidget> it(insertedWidgets);
+ for (; it.current();)
+ if (it.current() != w && !qstrcmp(it.current()->name(), s.latin1()))
+ {
+ found = true;
+ if (!changeIt)
+ break;
+ s = orig + "_" + QString::number(++num);
+ it.toFirst();
+ }
+ else
+ ++it;
+
+ if (!found)
+ {
+ QPtrList<QAction> al;
+ QAction *a = 0;
+ for (a = actions.first(); a; a = actions.next())
+ {
+ QObjectList *l = a->queryList("QAction");
+ al.append(a);
+ for (QObject *ao = l->first(); ao; ao = l->next())
+ al.append((QAction*)ao);
+ delete l;
+ }
+ for (a = al.first(); a; a = al.next())
+ {
+ if (a != w && !qstrcmp(a->name(), s.latin1()))
+ {
+ found = true;
+ if (!changeIt)
+ break;
+ s = orig + "_" + QString::number(++num);
+ a = actions.first();
+ }
+ }
+ }
+
+ if (mainContainer()->inherits("QMainWindow"))
+ {
+ if (!found)
+ {
+ QObjectList *l = mainContainer()->queryList("QDockWindow", 0, true);
+ for (QObject *o = l->first(); o; o = l->next())
+ if (o != w && !qstrcmp(o->name(), s.latin1()))
+ {
+ found = true;
+ if (!changeIt)
+ break;
+ s = orig + "_" + QString::number(++num);
+ o = l->first();
+ }
+ delete l;
+ }
+ if (!found)
+ {
+ QObjectList *l = mainContainer()->queryList("QDesignerPopupMenu", 0, true);
+ for (QObject *o = l->first(); o; o = l->next())
+ if (o != w && !qstrcmp(o->name(), s.latin1()))
+ {
+ found = true;
+ if (!changeIt)
+ break;
+ s = orig + "_" + QString::number(++num);
+ o = l->first();
+ }
+ delete l;
+ }
+ }
+ }
+ if (!found)
+ return true;
+ return false;
+}
+
+bool FormWindow::isCustomWidgetUsed(MetaDataBase::CustomWidget *w)
+{
+ QPtrDictIterator<QWidget> it(insertedWidgets);
+ for (; it.current(); ++it)
+ if (it.current()->isA("CustomWidget") && !qstrcmp(WidgetFactory::classNameOf(it.current()),
+ w->className.utf8()))
+ return true;
+ return false;
+}
+
+bool FormWindow::isDatabaseWidgetUsed() const
+{
+#ifndef QT_NO_SQL
+ QStringList dbClasses;
+ dbClasses << "QDataTable"; // add more here
+ QPtrDictIterator<QWidget> it(insertedWidgets);
+ for (; it.current(); ++it)
+ {
+ QString c(it.current()->className());
+ if (dbClasses.contains(c) > 0)
+ return true;
+ }
+#endif
+ return false;
+}
+
+bool FormWindow::isDatabaseAware() const
+{
+#ifndef QT_NO_SQL
+ if (QString(mContainer->className()) == "QDesignerDataBrowser" ||
+ QString(mContainer->className()) == "QDesignerDataView")
+ return true;
+ return isDatabaseWidgetUsed();
+#else
+ return false;
+#endif
+}
+
+void FormWindow::visibilityChanged()
+{
+ if (currTool != ORDER_TOOL)
+ emitUpdateProperties(currentWidget());
+ else
+ {
+ updateOrderIndicators();
+ repositionOrderIndicators();
+ }
+}
+
+
+/*
+ Maps a pos in a w's coordinates to the form's coordinate system.
+
+ This is the equivalent to mapFromGlobal(w->mapToGlobal(pos)) but
+ avoids the two roundtrips to the X-Server on Unix/X11.
+ */
+QPoint FormWindow::mapToForm(const QWidget* w, const QPoint& pos) const
+{
+ QPoint p = pos;
+ const QWidget* i = w;
+ while (i && !i->isTopLevel() && !isMainContainer((QWidget*)i))
+ {
+ p = i->mapToParent(p);
+ i = i->parentWidget();
+ }
+ return mapFromGlobal(w->mapToGlobal(pos));
+}
+
+static int widgetDepth(QWidget *w)
+{
+ int d = -1;
+ while (w && !w->isTopLevel())
+ {
+ d++;
+ w = w->parentWidget();
+ }
+
+ return d;
+}
+
+static bool isChildOf(QWidget *c, QWidget *p)
+{
+ while (c && !c->isTopLevel())
+ {
+ if (c == p)
+ return true;
+ c = c->parentWidget();
+ }
+ return false;
+}
+
+QWidget *FormWindow::containerAt(const QPoint &pos, QWidget *notParentOf)
+{
+ QPtrDictIterator<QWidget> it(insertedWidgets);
+ QWidget *container = 0;
+ int depth = -1;
+ QWidgetList selected = selectedWidgets();
+ if (rect().contains(mapFromGlobal(pos)))
+ {
+ container = mainContainer();
+ depth = widgetDepth(container);
+ }
+
+ for (; it.current(); ++it) {
+ if (it.current()->inherits("QLayoutWidget"))
+ continue;
+ if (it.current()->inherits("QSplitter"))
+ continue;
+ if (!it.current()->isVisibleTo(this))
+ continue;
+ if (selected.find(it.current()) != -1)
+ continue;
+ if (!WidgetDatabase::isContainer(WidgetDatabase::idFromClassName(
+ WidgetFactory::classNameOf(it.current()))) && it.current() != mainContainer())
+ continue;
+
+ // the rectangles of all ancestors of the container must contain the insert position
+ QWidget *w = it.current();
+ while (w && !w->isTopLevel())
+ {
+ if (!w->rect().contains((w->mapFromGlobal(pos))))
+ break;
+ w = w->parentWidget();
+ }
+ if (w && !w->isTopLevel()) continue; // we did not get through the full while loop
+
+ int wd = widgetDepth(it.current());
+ if (wd == depth && container && ((QObjectList*)it.current()->parentWidget()->
+ children())->find(it.current()) >
+ ((QObjectList*)container->parentWidget()->children())->find(container))
+ wd++;
+ if (wd > depth && !isChildOf(it.current(), notParentOf)) {
+ depth = wd;
+ container = it.current();
+ }
+ }
+
+ return container;
+}
+
+bool FormWindow::isMainContainer(QObject *w) const
+{
+ return w && w->isWidgetType() && (w == (QWidget*)this || w == mainContainer());
+}
+
+void FormWindow::setMainContainer(QWidget *w)
+{
+ bool resetPropertyWidget = isMainContainer(propertyWidget);
+ if (mContainer)
+ insertedWidgets.remove(mContainer);
+ if (propertyWidget == mContainer)
+ propertyWidget = 0;
+ delete mContainer;
+ mContainer = w;
+ insertedWidgets.insert(mContainer, mContainer);
+ delete layout();
+ QHBoxLayout *l = new QHBoxLayout(this);
+ l->addWidget(w);
+ if (resetPropertyWidget)
+ {
+ QObject *opw = propertyWidget;
+ propertyWidget = mContainer;
+ if (opw && opw->isWidgetType())
+ repaintSelection((QWidget*)opw);
+ }
+}
+
+bool FormWindow::savePixmapInline() const
+{
+ return pixInline;
+}
+
+QString FormWindow::pixmapLoaderFunction() const
+{
+ return pixLoader;
+}
+
+void FormWindow::setSavePixmapInline(bool b)
+{
+ pixInline = b;
+}
+
+void FormWindow::setPixmapLoaderFunction(const QString &func)
+{
+ pixLoader = func;
+}
+
+void FormWindow::setActiveObject(QObject *o)
+{
+ emitShowProperties(o);
+ propertyWidget = o;
+}
+
+QAction *FormWindow::findAction(const QString &name)
+{
+ for (QAction *a = actionList().first(); a; a = actionList().next())
+ {
+ if (QString(a->name()) == name)
+ return a;
+ QAction *ac = (QAction*)a->child(name.latin1(), "QAction");
+ if (ac)
+ return ac;
+ }
+ return 0;
+}
+
+void FormWindow::killAccels(QObject *top)
+{
+ QObjectList *l = top->queryList("QAccel");
+ if (!l)
+ return;
+ for (QObject *o = l->first(); o; o = l->next())
+ ((QAccel*)o)->setEnabled(false);
+ delete l;
+}
+
+bool FormWindow::isCentralWidget(QObject *w) const
+{
+ if (!mainContainer()->inherits("QMainWindow"))
+ return false;
+ return w == ((QMainWindow*)mainContainer())->centralWidget();
+}
+
+QObject *FormWindow::connectableObject(QObject *w, QObject *)
+{
+ return w;
+}
+
+int FormWindow::layoutDefaultSpacing() const
+{
+ return defSpacing;
+}
+
+int FormWindow::layoutDefaultMargin() const
+{
+ return defMargin;
+}
+
+void FormWindow::setLayoutDefaultSpacing(int s)
+{
+ defSpacing = s;
+}
+
+void FormWindow::setLayoutDefaultMargin(int s)
+{
+ defMargin = s;
+}
+
+FormFile *FormWindow::formFile() const
+{
+ return ff;
+}
+
+void FormWindow::setFormFile(FormFile *f)
+{
+ ff = f;
+ if (ff)
+ connect(this, SIGNAL(modificationChanged(bool, const QString&)), ff, SLOT(formWindowChangedSomehow()));
+}
+#include "formwindow.moc"
diff --git a/kommander/editor/formwindow.h b/kommander/editor/formwindow.h
new file mode 100644
index 00000000..c6d871b0
--- /dev/null
+++ b/kommander/editor/formwindow.h
@@ -0,0 +1,292 @@
+/**********************************************************************
+ This file is based on Qt Designer, Copyright (C) 2000 Trolltech AS. All rights reserved.
+
+ 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.
+
+ Modified for Kommander:
+ (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+
+**********************************************************************/
+
+#ifndef FORMWINDOW_H
+#define FORMWINDOW_H
+
+#include "command.h"
+#include "metadatabase.h"
+#include "sizehandle.h"
+#include "actiondnd.h"
+
+
+#include <qwidget.h>
+#include <qmap.h>
+#include <qptrdict.h>
+#include <qpixmap.h>
+#include <qwidgetlist.h>
+#include <qmap.h>
+
+class QPaintEvent;
+class QMouseEvent;
+class QKeyEvent;
+class QPainter;
+class QLabel;
+class MainWindow;
+class QTimer;
+class QFocusEvent;
+class QCloseEvent;
+class Resource;
+class QResizeEvent;
+class BreakLayoutCommand;
+class QPixmap;
+class QSizeGrip;
+class FormFile;
+
+#if defined(Q_FULL_TEMPLATE_INSTANTIATION)
+#include "orderindicator.h"
+#else
+class OrderIndicator;
+#endif
+
+class FormWindow : public QWidget
+{
+ Q_OBJECT
+ Q_PROPERTY( QString fileName READ fileName WRITE setFileName )
+
+public:
+ FormWindow( FormFile *f, MainWindow *mw, QWidget *parent, const char *name = 0 );
+ FormWindow( FormFile *f, QWidget *parent, const char *name = 0 );
+ ~FormWindow();
+
+ void init();
+ virtual void setMainWindow( MainWindow *w );
+
+ virtual QString fileName() const;
+ virtual void setFileName( const QString &fn );
+
+ virtual QPoint grid() const;
+ virtual QPoint gridPoint( const QPoint &p );
+
+ virtual CommandHistory *commandHistory();
+
+ virtual void undo();
+ virtual void redo();
+ virtual QString copy();
+ virtual void paste( const QString &cb, QWidget *parent );
+ virtual void lowerWidgets();
+ virtual void raiseWidgets();
+ virtual void checkAccels();
+
+ virtual void layoutHorizontal();
+ virtual void layoutVertical();
+ virtual void layoutHorizontalSplit();
+ virtual void layoutVerticalSplit();
+ virtual void layoutGrid();
+
+ virtual void layoutHorizontalContainer( QWidget *w );
+ virtual void layoutVerticalContainer( QWidget *w );
+ virtual void layoutGridContainer( QWidget *w );
+
+ virtual void breakLayout( QWidget *w );
+
+ virtual void selectWidget( QObject *w, bool select = TRUE );
+ virtual void selectAll();
+ virtual void updateSelection( QWidget *w );
+ virtual void raiseSelection( QWidget *w );
+ virtual void repaintSelection( QWidget *w );
+ virtual void clearSelection( bool changePropertyDisplay = TRUE );
+ virtual void selectWidgets();
+ bool isWidgetSelected( QObject *w );
+ virtual void updateChildSelections( QWidget *w );
+ virtual void raiseChildSelections( QWidget *w );
+
+ virtual void emitUpdateProperties( QObject *w );
+ virtual void emitShowProperties( QObject *w = 0 );
+ virtual void emitSelectionChanged();
+
+ virtual void setPropertyShowingBlocked( bool b );
+ bool isPropertyShowingBlocked() const;
+
+ virtual QLabel *sizePreview() const;
+ virtual void checkPreviewGeometry( QRect &r );
+
+ virtual QPtrDict<QWidget> *widgets();
+ virtual QWidgetList selectedWidgets() const;
+
+ virtual QWidget *designerWidget( QObject *o ) const;
+
+ virtual void handleContextMenu( QContextMenuEvent *e, QWidget *w );
+ virtual void handleMousePress( QMouseEvent *e, QWidget *w );
+ virtual void handleMouseRelease( QMouseEvent *e, QWidget *w );
+ virtual void handleMouseDblClick( QMouseEvent *e, QWidget *w );
+ virtual void handleMouseMove( QMouseEvent *e, QWidget *w );
+ virtual void handleKeyPress( QKeyEvent *e, QWidget *w );
+ virtual void handleKeyRelease( QKeyEvent *e, QWidget *w );
+
+ virtual void updateUndoInfo();
+
+ virtual MainWindow *mainWindow() const { return mainwindow; }
+
+ bool checkCustomWidgets();
+ virtual void insertWidget( QWidget *w, bool checkName = FALSE );
+ virtual void removeWidget( QWidget *w );
+ virtual void deleteWidgets();
+ virtual void editAdjustSize();
+ virtual void editConnections();
+
+ virtual int numSelectedWidgets() const;
+ virtual int numVisibleWidgets() const;
+
+ virtual bool hasInsertedChildren( QWidget *w ) const;
+
+ virtual QWidget *currentWidget() const
+ { return propertyWidget && propertyWidget->isWidgetType() ? (QWidget*)propertyWidget : 0; }
+ virtual bool unify( QObject *w, QString &s, bool changeIt );
+
+ virtual bool isCustomWidgetUsed( MetaDataBase::CustomWidget *w );
+ virtual bool isDatabaseWidgetUsed() const;
+ virtual bool isDatabaseAware() const;
+
+ virtual QPoint mapToForm( const QWidget* w, const QPoint& ) const;
+
+ bool isMainContainer( QObject *w ) const;
+ bool isCentralWidget( QObject *w ) const;
+ QWidget *mainContainer() const { return mContainer; }
+ void setMainContainer( QWidget *w );
+
+ void paintGrid( QWidget *w, QPaintEvent *e );
+
+ bool savePixmapInline() const;
+ QString pixmapLoaderFunction() const;
+ void setSavePixmapInline( bool b );
+ void setPixmapLoaderFunction( const QString &func );
+
+ void setToolFixed() { toolFixed = TRUE; }
+
+ void setActiveObject( QObject *o );
+
+ QPtrList<QAction> &actionList() { return actions; }
+ QAction *findAction( const QString &name );
+
+ void killAccels( QObject *top );
+
+ int layoutDefaultSpacing() const;
+ int layoutDefaultMargin() const;
+ void setLayoutDefaultSpacing( int s );
+ void setLayoutDefaultMargin( int s );
+
+ void initSlots();
+ FormFile *formFile() const;
+ void setFormFile( FormFile *f );
+
+public slots:
+ virtual void widgetChanged( QObject *w );
+ virtual void currentToolChanged();
+ virtual void visibilityChanged();
+ virtual void modificationChanged( bool m );
+
+signals:
+ void showProperties( QObject *w );
+ void updateProperties( QObject *w );
+ void undoRedoChanged( bool undoAvailable, bool redoAvailable, const QString &undoCmd,
+ const QString &redoCmd );
+ void selectionChanged();
+ void modificationChanged( bool m, FormWindow *fw );
+ void modificationChanged( bool m, const QString &s );
+ void fileNameChanged( const QString &s, FormWindow *fw );
+
+protected:
+ virtual void closeEvent( QCloseEvent *e );
+ virtual void focusInEvent( QFocusEvent *e );
+ virtual void focusOutEvent( QFocusEvent *e );
+ virtual void resizeEvent( QResizeEvent *e );
+ void mouseDoubleClickEvent( QMouseEvent *e )
+ { handleMouseDblClick( e, mainContainer() ); }
+
+private:
+ enum RectType { Insert, Rubber };
+
+ virtual void beginUnclippedPainter( bool doNot );
+ virtual void endUnclippedPainter();
+ virtual void drawConnectLine();
+ virtual void drawSizePreview( const QPoint &pos, const QString& text );
+
+ virtual void insertWidget();
+ virtual void moveSelectedWidgets( int dx, int dy );
+
+ virtual void startRectDraw( const QPoint &p, const QPoint &global, QWidget *w, RectType t );
+ virtual void continueRectDraw( const QPoint &p, const QPoint &global, QWidget *w, RectType t );
+ virtual void endRectDraw();
+
+ virtual void checkSelectionsForMove( QWidget *w );
+ virtual BreakLayoutCommand *breakLayoutCommand( QWidget *w );
+
+ virtual bool allowMove( QWidget *w );
+
+ virtual void saveBackground();
+ virtual void restoreConnectionLine();
+ virtual void restoreRect( const QRect &rect ) ;
+
+ virtual void showOrderIndicators();
+ virtual void updateOrderIndicators();
+ virtual void repositionOrderIndicators();
+ virtual void hideOrderIndicators();
+
+ virtual QWidget *containerAt( const QPoint &pos, QWidget *notParentOf );
+
+ QObject *connectableObject( QObject *w, QObject *fallback );
+
+private slots:
+ virtual void invalidCheckedSelections();
+ virtual void updatePropertiesTimerDone();
+ virtual void showPropertiesTimerDone();
+ virtual void selectionChangedTimerDone();
+
+private:
+ int currTool;
+ bool oldRectValid, widgetPressed, drawRubber, checkedSelectionsForMove;
+ QRect currRect;
+ QPoint rectAnchor;
+ QPainter *unclippedPainter;
+ QPoint sizePreviewPos;
+ QPixmap sizePreviewPixmap;
+ MainWindow *mainwindow;
+ QPtrList<WidgetSelection> selections;
+ QPtrDict<WidgetSelection> usedSelections;
+ QRect widgetGeom, rubber;
+ QPoint oldPressPos, origPressPos;
+ CommandHistory commands;
+ QMap<ulong, QPoint> moving;
+ QWidget *insertParent;
+ QObject *propertyWidget;
+ QLabel *sizePreviewLabel;
+ QTimer *checkSelectionsTimer;
+ QPtrDict<QWidget> insertedWidgets;
+ bool propShowBlocked;
+ QTimer* updatePropertiesTimer, *showPropertiesTimer, *selectionChangedTimer;
+ QPoint connectStartPos, currentConnectPos;
+ QObject *connectSender, *connectReceiver;
+ QPixmap *buffer;
+ QPtrList<OrderIndicator> orderIndicators;
+ QWidgetList orderedWidgets;
+ QWidgetList stackedWidgets;
+ QWidget *mContainer;
+ bool pixInline;
+ QString pixLoader;
+ bool toolFixed;
+ QPtrList<QAction> actions;
+ QWidget* targetContainer;
+ QPalette restorePalette;
+ bool hadOwnPalette;
+ int defSpacing, defMargin;
+ FormFile *ff;
+};
+
+#endif
diff --git a/kommander/editor/functions.ui b/kommander/editor/functions.ui
new file mode 100644
index 00000000..48616099
--- /dev/null
+++ b/kommander/editor/functions.ui
@@ -0,0 +1,722 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>FunctionsDialogBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>FunctionsDialogBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>638</width>
+ <height>670</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Function Browser</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="2">
+ <property name="name">
+ <cstring>layout7_2</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Description:</string>
+ </property>
+ </widget>
+ <widget class="KTextBrowser">
+ <property name="name">
+ <cstring>descriptionText</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Group:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>groupComboBox</cstring>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <property name="name">
+ <cstring>groupComboBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Function:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>functionListBox</cstring>
+ </property>
+ </widget>
+ <widget class="KListBox">
+ <property name="name">
+ <cstring>functionListBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="0" column="1">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>250</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>&amp;Parameters</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>argLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Arg3</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="10" column="0">
+ <property name="name">
+ <cstring>argLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Arg5</string>
+ </property>
+ </widget>
+ <spacer row="14" column="0">
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton" row="15" column="0">
+ <property name="name">
+ <cstring>copyButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32767</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Insert function</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="8" column="0">
+ <property name="name">
+ <cstring>argLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Arg4</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="1" column="0">
+ <property name="name">
+ <cstring>widgetComboBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="3" column="0">
+ <property name="name">
+ <cstring>layout11</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>arg1Edit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>quote1</cstring>
+ </property>
+ <property name="text">
+ <string>Quote</string>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <property name="name">
+ <cstring>combo1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>argLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Arg1</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="5" column="0">
+ <property name="name">
+ <cstring>layout12</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>arg2Edit</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>quote2</cstring>
+ </property>
+ <property name="text">
+ <string>Quote</string>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <property name="name">
+ <cstring>combo2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="7" column="0">
+ <property name="name">
+ <cstring>layout13</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>arg3Edit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>quote3</cstring>
+ </property>
+ <property name="text">
+ <string>Quote</string>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <property name="name">
+ <cstring>combo3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>widgetLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Widget:</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="9" column="0">
+ <property name="name">
+ <cstring>layout14</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>arg4Edit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>quote4</cstring>
+ </property>
+ <property name="text">
+ <string>Quote</string>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <property name="name">
+ <cstring>combo4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="11" column="0">
+ <property name="name">
+ <cstring>layout15</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>arg5Edit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>quote5</cstring>
+ </property>
+ <property name="text">
+ <string>Quote</string>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <property name="name">
+ <cstring>combo5</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="13" column="0">
+ <property name="name">
+ <cstring>layout16</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>arg6Edit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>quote6</cstring>
+ </property>
+ <property name="text">
+ <string>Quote</string>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <property name="name">
+ <cstring>combo6</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="12" column="0">
+ <property name="name">
+ <cstring>argLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Arg6</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>argLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Arg2</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>100</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>100</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>layout12</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout11</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>clearButton</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32767</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Clear edited text</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Inserted &amp;text:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>insertedText</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="KTextEdit">
+ <property name="name">
+ <cstring>insertedText</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>StrongFocus</enum>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ <property name="linkUnderline">
+ <bool>false</bool>
+ </property>
+ <property name="autoFormatting">
+ <set>AutoAll</set>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>FunctionsDialogBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>FunctionsDialogBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>groupComboBox</tabstop>
+ <tabstop>functionListBox</tabstop>
+ <tabstop>widgetComboBox</tabstop>
+ <tabstop>arg1Edit</tabstop>
+ <tabstop>arg2Edit</tabstop>
+ <tabstop>arg3Edit</tabstop>
+ <tabstop>arg4Edit</tabstop>
+ <tabstop>arg5Edit</tabstop>
+ <tabstop>arg6Edit</tabstop>
+ <tabstop>copyButton</tabstop>
+ <tabstop>descriptionText</tabstop>
+ <tabstop>clearButton</tabstop>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>ktextbrowser.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>klistbox.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>ktextedit.h</includehint>
+</includehints>
+</UI>
diff --git a/kommander/editor/functionsimpl.cpp b/kommander/editor/functionsimpl.cpp
new file mode 100644
index 00000000..ad4924e5
--- /dev/null
+++ b/kommander/editor/functionsimpl.cpp
@@ -0,0 +1,392 @@
+/***************************************************************************
+ functionsimpl.cpp - Function browser implementation
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or mody *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* QT INCLUDES */
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qmetaobject.h>
+#include <qstringlist.h>
+#include <qregexp.h>
+
+/* KDE INCLUDES */
+#include <kcombobox.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <klistbox.h>
+#include <klineedit.h>
+#include <klocale.h>
+#include <kpushbutton.h>
+#include <ktextedit.h>
+#include <ktextbrowser.h>
+#include <kdebug.h>
+
+/* OTHER INCLUDES */
+#include "functionsimpl.h"
+#include "kommanderwidget.h"
+#include "invokeclass.h"
+#include "widgetdatabase.h"
+
+const int MaxFunctionArgs = 6;
+
+
+FunctionsDialog::FunctionsDialog(QWidget* a_parent, const QDict<QWidget>& a_widgetList, bool useInternalParser, char* a_name,
+ bool a_modal)
+ : FunctionsDialogBase(a_parent, a_name, a_modal), m_widgetList(a_widgetList), m_useInternalParser(useInternalParser)
+{
+ clearButton->setPixmap(KGlobal::iconLoader()->loadIcon("locationbar_erase", KIcon::Toolbar));
+ copyButton->setPixmap(KGlobal::iconLoader()->loadIcon("1downarrow", KIcon::Toolbar));
+
+ groupComboBox->insertStringList(SpecialInformation::groups());
+ connect(groupComboBox, SIGNAL(activated(int)), SLOT(groupChanged(int)));
+ connect(widgetComboBox, SIGNAL(activated(int)), SLOT(groupChanged(int)));
+ connect(functionListBox, SIGNAL(highlighted(int)), SLOT(functionChanged(int)));
+ connect(copyButton, SIGNAL(clicked()), SLOT(copyText()));
+ connect(clearButton, SIGNAL(clicked()), insertedText, SLOT(clear()));
+
+ // build widget name list
+ for (QDictIterator<QWidget> It(m_widgetList); It.current(); ++It)
+ m_widgetNames.append(It.currentKey());
+ m_widgetNames.sort();
+ widgetComboBox->insertStringList(m_widgetNames);
+
+ for (int j = 0; j < WidgetDatabase::count(); j++)
+ {
+ QString group = WidgetDatabase::group(j);
+ if (group == "Kommander" || group == "Custom")
+ m_widgetTypes << WidgetDatabase::className(j);
+ }
+ m_widgetTypes.sort();
+
+//TODO: Insert either the generic widget types or parse for on the fly created widget
+//names. The problem is that the rest of the code depends on the fact that the widget
+//from the widgetComboBox exists
+// widgetComboBox->insertStringList(m_widgetTypes);
+
+ m_acceptedSlots = InvokeClass::acceptedSlots();
+
+ m_DCOP = -1; // Select DCOP functions by default
+ m_Slots = -1;
+ for (int i=0; i<groupComboBox->count(); i++)
+ {
+ if (groupComboBox->text(i) == i18n("Slots"))
+ {
+ m_Slots = i;
+ break;
+ }
+ }
+ if (!useInternalParser)
+ {
+ groupComboBox->removeItem(m_Slots);
+ m_Slots = -1;
+ }
+ for (int i=0; i<groupComboBox->count(); i++)
+ {
+ if (groupComboBox->text(i) == "DCOP")
+ {
+ m_DCOP = i;
+ break;
+ }
+ }
+ groupComboBox->changeItem(i18n("Functions"), m_DCOP); //this is a quick way to rename this group in the UI
+ groupComboBox->setCurrentItem(m_DCOP);
+ groupChanged(groupComboBox->currentItem());
+}
+
+FunctionsDialog::~FunctionsDialog()
+{
+}
+
+QString FunctionsDialog::functionText() const
+{
+ return insertedText->text();
+}
+
+QString FunctionsDialog::currentFunctionText()
+{
+ QString prefix, function;
+ int index = groupComboBox->currentItem();
+ QString s = (index != m_DCOP ) ? groupComboBox->text(index) : "DCOP";
+ if (m_useInternalParser)
+ {
+ function = SpecialInformation::parserGroupName(s);
+ if (!function.isEmpty())
+ function += "_";
+ }
+ else
+ {
+ prefix = "@";
+ function = s + ".";
+ }
+ if (groupComboBox->currentText() == "Kommander")
+ return QString("%1%2%3").arg(prefix).arg(functionListBox->currentText()).arg(params());
+ else if (groupComboBox->currentItem() == m_DCOP || groupComboBox->currentItem() == m_Slots)
+ return QString("%1%2.%3%4").arg(prefix).arg(widgetComboBox->currentText().section(' ', 0, 0))
+ .arg(functionListBox->currentText().left(functionListBox->currentText().find('('))).arg(params());
+ else
+ return QString("%1%2%3%4").arg(prefix).arg(function)
+ .arg(functionListBox->currentText()).arg(params());
+}
+
+void FunctionsDialog::groupChanged(int index)
+{
+ index = groupComboBox->currentItem();
+ functionListBox->clear();
+ m_slotList.clear();
+ if (index == m_Slots)
+ {
+ KommanderWidget* a_atw = dynamic_cast<KommanderWidget *>(m_widgetList[widgetComboBox->currentText()]);
+ QStringList pFunctions = QStringList::fromStrList(a_atw->object()->metaObject()->slotNames(true));
+ for (uint i=0; i<pFunctions.count(); i++)
+ {
+ QString slot = pFunctions[i];
+ QString slotArgStr = slot.section(QRegExp("\\(|\\)"), 1);
+ if (slotArgStr.isEmpty() || m_acceptedSlots.contains(slotArgStr))
+ {
+ QString name = slot.remove("()");
+ if (!m_slotList.contains(name))
+ {
+ m_slotList[name] = slot;
+ functionListBox->insertItem(name);
+ }
+ }
+ }
+ } else
+ {
+ QString s = (index != m_DCOP ) ? groupComboBox->text(index) : "DCOP";
+ QStringList pFunctions = SpecialInformation::functions(s);
+ KommanderWidget* a_atw = 0;
+ if (index == m_DCOP)
+ a_atw = dynamic_cast<KommanderWidget *>(m_widgetList[widgetComboBox->currentText()]);
+ int pGroup = SpecialInformation::group(s);
+ SpecialFunction::ParserType pType = m_useInternalParser
+ ? SpecialFunction::InternalParser : SpecialFunction::MacroParser;
+
+ for (uint i=0; i<pFunctions.count(); i++)
+ {
+ int pFunction = SpecialInformation::function(pGroup, pFunctions[i]);
+ if (!SpecialInformation::isValid(pGroup, pFunction, pType))
+ continue;
+ if (a_atw && !a_atw->isFunctionSupported(pFunction) && !a_atw->isCommonFunction(pFunction))
+ continue;
+ functionListBox->insertItem(pFunctions[i]);
+ }
+ }
+
+ functionListBox->sort();
+ functionListBox->setCurrentItem(0);
+ functionChanged(functionListBox->currentItem());
+}
+
+void FunctionsDialog::functionChanged(int)
+{
+ if (groupComboBox->currentItem() == m_Slots)
+ {
+ KommanderWidget* w = dynamic_cast<KommanderWidget *>(m_widgetList[widgetComboBox->currentText()]);
+ QObject *o = w->object();
+ QString slotHelp = i18n("To learn more about the slot, look at the documentation of the base Qt/KDE class, most probably <i>%1</i>.").arg(o->metaObject()->superClassName() ? QString(o->metaObject()->superClassName()) : QString(o->className()) );
+ QString slotName = functionListBox->currentText();
+ QString slot = m_slotList[slotName];
+ descriptionText->clear();
+ descriptionText->setText(i18n("<qt><h3>%1</h3>"
+ "<p><b>Description:</b> %2\n<p><b>Syntax:</b> <i>%3</i>%4</qt>")
+ .arg(slotName).arg(slotHelp).arg(slot).arg(""));
+ } else
+ {
+ int index = groupComboBox->currentItem();
+ QString s = (index != m_DCOP ) ? groupComboBox->text(index) : "DCOP";
+ m_function = SpecialInformation::functionObject(s,
+ functionListBox->currentText());
+ QString defArgs;
+ if (m_function.minArg() < m_function.argumentCount())
+ if (!m_function.minArg())
+ defArgs = i18n("<p>Parameters are not obligatory.");
+ else
+ defArgs = i18n("<p>Only first argument is obligatory.",
+ "<p>Only first %n arguments are obligatory.",
+ m_function.minArg());
+
+ uint pflags = SpecialFunction::ShowArgumentNames;
+ if (m_function.maxArg() && m_function.argumentName(0) == "widget")
+ pflags = pflags | SpecialFunction::SkipFirstArgument;
+
+ descriptionText->clear();
+ descriptionText->setText(i18n("<qt><h3>%1</h3>"
+ "<p><b>Description:</b> %2\n<p><b>Syntax:</b> <i>%3</i>%4</qt>")
+ .arg(functionListBox->currentText()).arg(m_function.description())
+ .arg(m_function.prototype(pflags)).arg(defArgs));
+
+ }
+ showParameters();
+}
+
+void FunctionsDialog::copyText()
+{
+ QString text = currentFunctionText();
+ int para, i;
+ insertedText->getCursorPosition(&para, &i);
+// int cursorPos = insertedText->cursorPosition();
+ insertedText->insert(text);
+ insertedText->setCursorPosition(para, i + text.find('(') + 1);
+}
+
+void FunctionsDialog::showParameters()
+{
+ KLineEdit* edits[MaxFunctionArgs] = {arg1Edit, arg2Edit, arg3Edit, arg4Edit, arg5Edit, arg6Edit};
+ QLabel* labels[MaxFunctionArgs] = {argLabel1, argLabel2, argLabel3, argLabel4, argLabel5, argLabel6};
+ KComboBox* combos[MaxFunctionArgs] = {combo1, combo2, combo3, combo4, combo5, combo6};
+ QCheckBox* quotes[MaxFunctionArgs] = {quote1, quote2, quote3, quote4, quote5, quote6};
+
+ if (groupComboBox->currentItem() == m_Slots)
+ {
+ widgetComboBox->setShown(true);
+ widgetLabel->setShown(true);
+ QString slot = m_slotList[functionListBox->currentText()];
+ QStringList slotArgs = QStringList::split(',', slot.section(QRegExp("\\(|\\)"), 1), false);
+ int argsCount = slotArgs.count();
+ for (int i = 0; i < MaxFunctionArgs; i++)
+ {
+ labels[i]->setShown(i < argsCount);
+ QString type;
+ if (i < argsCount)
+ {
+ type = slotArgs[i].remove(QRegExp("\\*|\\&|const\\s"));
+ labels[i]->setText(QString("%1:").arg(type));
+ }
+ quotes[i]->setChecked(true);
+ quotes[i]->setShown(false);
+ if (type == "bool")
+ {
+ edits[i]->setShown(false);
+ combos[i]->setShown(i < argsCount);
+ combos[i]->clear();
+ combos[i]->setEditable(false);
+ combos[i]->insertItem("true");
+ combos[i]->insertItem("false");
+ } else
+ {
+ combos[i]->setShown(false);
+ edits[i]->setShown(i < argsCount);
+ edits[i]->clear();
+ if (type == "QString")
+ {
+ quotes[i]->setShown(i < argsCount);
+ }
+ }
+ }
+ } else
+ {
+ int start = (m_function.argumentCount() && m_function.argumentName(0) == "widget");
+
+ widgetComboBox->setShown(start);
+ widgetLabel->setShown(start);
+ if (start)
+ {
+ arg1Edit->setShown(false);
+ argLabel1->setShown(false);
+ combo1->setShown(false);
+ quote1->setShown(false);
+ }
+ int argsCount = m_function.argumentCount();
+ for (int i=start; i<MaxFunctionArgs; i++)
+ {
+ labels[i]->setShown(i < argsCount);
+ if (i < argsCount)
+ labels[i]->setText(QString("%1:").arg(m_function.argumentName(i)));
+ quotes[i]->setChecked(true);
+ quotes[i]->setShown(false);
+ if (m_function.argumentType(i) == "bool")
+ {
+ edits[i]->setShown(false);
+ combos[i]->setShown(i < argsCount);
+ combos[i]->setEditable(false);
+ combos[i]->clear();
+ combos[i]->insertItem("true");
+ combos[i]->insertItem("false");
+ } else
+ {
+//FIXME: big hack to show a combo for createWidgets. Good solution: extra flag for arguments telling if it is a file/widget/etc.
+ if (m_function.name() == "createWidget" && ( i == 1 || i == 2))
+ {
+ combos[i]->clear();
+ combos[i]->setEditable(true);
+ if ( i == 1)
+ {
+ combos[i]->insertStringList(m_widgetTypes);
+ } else
+ {
+ combos[i]->insertItem("");
+ combos[i]->insertStringList(m_widgetNames);
+ }
+ edits[i]->setShown(false);
+ combos[i]->setShown(true);
+ } else
+ {
+ combos[i]->setShown(false);
+ edits[i]->setShown(i < argsCount);
+ edits[i]->clear();
+ if (m_function.argumentType(i) == "QString")
+ {
+ quotes[i]->setShown(i < argsCount);
+ }
+ }
+ }
+ }
+ }
+}
+
+QString FunctionsDialog::params()
+{
+ QLabel* labels[MaxFunctionArgs] = {argLabel1, argLabel2, argLabel3, argLabel4, argLabel5, argLabel6};
+ KLineEdit* edits[MaxFunctionArgs] = {arg1Edit, arg2Edit, arg3Edit, arg4Edit, arg5Edit, arg6Edit};
+ KComboBox* combos[MaxFunctionArgs] = {combo1, combo2, combo3, combo4, combo5, combo6};
+ QStringList pars;
+ QCheckBox* quotes[MaxFunctionArgs] = {quote1, quote2, quote3, quote4, quote5, quote6};
+ bool params = false;
+ bool slotsShown = (groupComboBox->currentItem() == m_Slots);
+ for (int i=0; i<MaxFunctionArgs; i++)
+ {
+ if (edits[i]->isShown())
+ {
+ QString s = edits[i]->text();
+ if (!s.isEmpty() || i < m_function.minArg())
+ {
+ if (quotes[i]->isChecked() && ( (!slotsShown && m_function.argumentType(i) == "QString")
+ || (slotsShown && labels[i]->text().startsWith("QString")) ) )
+ s = '"' + s + '"';
+ pars.append(s);
+ }
+ params = true;
+ } else
+ if (combos[i]->isShown())
+ {
+ QString s = combos[i]->currentText();
+ if (!s.isEmpty() || i < m_function.minArg())
+ {
+ if (s != "true" && s !="false")
+ s = '"' + s + '"';
+ pars.append(s);
+ }
+ params = true;
+ }
+ }
+ QString a_param = pars.join(", ");
+ if (params)
+ return QString("(%1)").arg(a_param);
+ else
+ return a_param;
+}
+
+
+#include "functionsimpl.moc"
diff --git a/kommander/editor/functionsimpl.h b/kommander/editor/functionsimpl.h
new file mode 100644
index 00000000..fab8661d
--- /dev/null
+++ b/kommander/editor/functionsimpl.h
@@ -0,0 +1,61 @@
+/***************************************************************************
+ functionsimpl.h - Function browser implementation
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef _HAVE_FUNCTIONSIMPL_H_
+#define _HAVE_FUNCTIONSIMPL_H_
+
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qwidget.h>
+#include <qdict.h>
+
+#include "functions.h"
+#include "specialinformation.h"
+
+class FunctionsDialog : public FunctionsDialogBase
+{
+ Q_OBJECT
+public:
+ FunctionsDialog(QWidget*, const QDict<QWidget>&, bool m_useInternalParser, char* = 0, bool = true);
+ ~FunctionsDialog();
+ // Return current content of text box
+ QString functionText() const;
+ // Return current function and parameters
+ QString currentFunctionText();
+public slots:
+ // Update list of function availabe for given group
+ void groupChanged(int);
+ // Update syntax of chosen function
+ void functionChanged(int);
+ // Copy current function and parameters into text box
+ void copyText();
+ // Show widgets for current function's parameters
+ void showParameters();
+private:
+ // Calculate current parameters
+ QString params();
+ SpecialFunction m_function;
+ int m_DCOP;
+ int m_Slots;
+ const QDict<QWidget> m_widgetList;
+ QStringList m_widgetNames;
+ QStringList m_widgetTypes;
+ bool m_useInternalParser;
+ QStringList m_acceptedSlots;
+ QMap<QString, QString> m_slotList;
+};
+
+
+#endif
+
diff --git a/kommander/editor/globaldefs.h b/kommander/editor/globaldefs.h
new file mode 100644
index 00000000..cc6ed400
--- /dev/null
+++ b/kommander/editor/globaldefs.h
@@ -0,0 +1,45 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef GLOBALDEFS_H
+#define GLOBALDEFS_H
+
+#include <qcolor.h>
+
+#define BOXLAYOUT_DEFAULT_MARGIN 11
+#define BOXLAYOUT_DEFAULT_SPACING 6
+
+#ifndef NO_STATIC_COLORS
+static QColor *backColor1 = 0;
+static QColor *backColor2 = 0;
+static QColor *selectedBack = 0;
+
+static void init_colors()
+{
+ if ( backColor1 )
+ return;
+ backColor1 = new QColor( 236, 245, 255 );
+ backColor2 = new QColor( 250, 250, 250 );
+ selectedBack = new QColor( 221, 221, 221 );
+}
+
+#endif
+
+#endif
diff --git a/kommander/editor/hierarchyview.cpp b/kommander/editor/hierarchyview.cpp
new file mode 100644
index 00000000..b3f17713
--- /dev/null
+++ b/kommander/editor/hierarchyview.cpp
@@ -0,0 +1,724 @@
+/**********************************************************************
+** Copyright (C) 2000-2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "globaldefs.h"
+#include "hierarchyview.h"
+#include "formwindow.h"
+#include "mainwindow.h"
+#include "command.h"
+#include "widgetfactory.h"
+#include "widgetdatabase.h"
+#include "pixmapchooser.h"
+#include "propertyeditor.h"
+#include "listeditor.h"
+
+#include <qpalette.h>
+#include <qobjectlist.h>
+#include <qheader.h>
+#include <qpopupmenu.h>
+#include <qtabwidget.h>
+#include <qwizard.h>
+#include <qwidgetstack.h>
+#include <qtabbar.h>
+#include <qfeatures.h>
+#include <qapplication.h>
+#include <qtimer.h>
+#include <qworkspace.h>
+#include <qaccel.h>
+
+#include <klocale.h>
+
+#include <stdlib.h>
+
+static const char * const folder_xpm[]={
+ "16 16 6 1",
+ ". c None",
+ "b c #ffff00",
+ "d c #000000",
+ "* c #999999",
+ "a c #cccccc",
+ "c c #ffffff",
+ "................",
+ "................",
+ "..*****.........",
+ ".*ababa*........",
+ "*abababa******..",
+ "*cccccccccccc*d.",
+ "*cbababababab*d.",
+ "*cabababababa*d.",
+ "*cbababababab*d.",
+ "*cabababababa*d.",
+ "*cbababababab*d.",
+ "*cabababababa*d.",
+ "*cbababababab*d.",
+ "**************d.",
+ ".dddddddddddddd.",
+ "................"};
+
+QListViewItem *newItem = 0;
+
+HierarchyItem::HierarchyItem( Type type, QListViewItem *parent,
+ const QString &txt1, const QString &txt2, const QString &txt3 )
+ : QListViewItem( parent, txt1, txt2, txt3 ), typ( type )
+{
+}
+
+HierarchyItem::HierarchyItem( Type type, QListView *parent,
+ const QString &txt1, const QString &txt2, const QString &txt3 )
+ : QListViewItem( parent, txt1, txt2, txt3 ), typ( type )
+{
+}
+
+void HierarchyItem::paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int align )
+{
+ QColorGroup g( cg );
+ g.setColor( QColorGroup::Base, backgroundColor() );
+ g.setColor( QColorGroup::Foreground, Qt::black );
+ g.setColor( QColorGroup::Text, Qt::black );
+ QString txt = text( 0 );
+ if ( rtti() == Slot &&
+ ( txt == "init()" || txt == "destroy()" ) ) {
+ listView()->setUpdatesEnabled( false );
+ if ( txt == "init()" )
+ setText( 0, txt + " " + i18n( "(Constructor)" ) );
+ else
+ setText( 0, txt + " " + i18n( "(Destructor)" ) );
+ QListViewItem::paintCell( p, g, column, width, align );
+ setText( 0, txt );
+ listView()->setUpdatesEnabled( true );
+ } else {
+ QListViewItem::paintCell( p, g, column, width, align );
+ }
+ p->save();
+ p->setPen( QPen( cg.dark(), 1 ) );
+ if ( column == 0 )
+ p->drawLine( 0, 0, 0, height() - 1 );
+ if ( listView()->firstChild() != this ) {
+ if ( nextSibling() != itemBelow() && itemBelow()->depth() < depth() ) {
+ int d = depth() - itemBelow()->depth();
+ p->drawLine( -listView()->treeStepSize() * d, height() - 1, 0, height() - 1 );
+ }
+ }
+ p->drawLine( 0, height() - 1, width, height() - 1 );
+ p->drawLine( width - 1, 0, width - 1, height() );
+ p->restore();
+}
+
+QColor HierarchyItem::backgroundColor()
+{
+ updateBackColor();
+ return backColor;
+}
+
+void HierarchyItem::updateBackColor()
+{
+ if ( listView()->firstChild() == this ) {
+ backColor = *backColor1;
+ return;
+ }
+
+ QListViewItemIterator it( this );
+ --it;
+ if ( it.current() ) {
+ if ( ( ( HierarchyItem*)it.current() )->backColor == *backColor1 )
+ backColor = *backColor2;
+ else
+ backColor = *backColor1;
+ } else {
+ backColor = *backColor1;
+ }
+}
+
+void HierarchyItem::setWidget( QWidget *w )
+{
+ wid = w;
+}
+
+QWidget *HierarchyItem::widget() const
+{
+ return wid;
+}
+
+void HierarchyItem::okRename( int col )
+{
+ if ( newItem == this )
+ newItem = 0;
+ QListViewItem::okRename( col );
+}
+
+void HierarchyItem::cancelRename( int col )
+{
+ if ( newItem == this ) {
+ newItem = 0;
+ QListViewItem::cancelRename( col );
+ delete this;
+ return;
+ }
+ QListViewItem::cancelRename( col );
+}
+
+
+
+
+HierarchyList::HierarchyList( QWidget *parent, FormWindow *fw, bool doConnects )
+ : QListView( parent ), formWindow( fw )
+{
+ init_colors();
+
+ setDefaultRenameAction( Accept );
+ header()->setMovingEnabled( false );
+ header()->setStretchEnabled( true );
+ normalMenu = 0;
+ tabWidgetMenu = 0;
+ addColumn( i18n("Name" ) );
+ addColumn( i18n("Class" ) );
+ QPalette p( palette() );
+ p.setColor( QColorGroup::Base, QColor( *backColor2 ) );
+ (void)*selectedBack; // hack
+ setPalette( p );
+ disconnect( header(), SIGNAL( sectionClicked( int ) ),
+ this, SLOT( changeSortColumn( int ) ) );
+ setSorting( -1 );
+ setHScrollBarMode( AlwaysOff );
+ setVScrollBarMode( AlwaysOn );
+ if ( doConnects ) {
+ connect( this, SIGNAL( clicked( QListViewItem * ) ),
+ this, SLOT( objectClicked( QListViewItem * ) ) );
+ connect( this, SIGNAL( returnPressed( QListViewItem * ) ),
+ this, SLOT( objectClicked( QListViewItem * ) ) );
+ connect( this, SIGNAL( contextMenuRequested( QListViewItem *, const QPoint&, int ) ),
+ this, SLOT( showRMBMenu( QListViewItem *, const QPoint & ) ) );
+ }
+ deselect = true;
+ setColumnWidthMode( 1, Manual );
+}
+
+void HierarchyList::keyPressEvent( QKeyEvent *e )
+{
+ if ( e->key() == Key_Shift || e->key() == Key_Control )
+ deselect = false;
+ else
+ deselect = true;
+ QListView::keyPressEvent( e );
+}
+
+void HierarchyList::keyReleaseEvent( QKeyEvent *e )
+{
+ deselect = true;
+ QListView::keyReleaseEvent( e );
+}
+
+void HierarchyList::viewportMousePressEvent( QMouseEvent *e )
+{
+ if ( e->state() & ShiftButton || e->state() & ControlButton )
+ deselect = false;
+ else
+ deselect = true;
+ QListView::viewportMousePressEvent( e );
+}
+
+void HierarchyList::viewportMouseReleaseEvent( QMouseEvent *e )
+{
+ QListView::viewportMouseReleaseEvent( e );
+}
+
+void HierarchyList::objectClicked( QListViewItem *i )
+{
+ if ( !i )
+ return;
+
+ QWidget *w = findWidget( i );
+ if ( !w )
+ return;
+ if ( formWindow == w ) {
+ if ( deselect )
+ formWindow->clearSelection( false );
+ formWindow->emitShowProperties( formWindow );
+ return;
+ }
+
+ if ( !formWindow->widgets()->find( w ) ) {
+ if ( w->parent() && w->parent()->inherits( "QWidgetStack" ) &&
+ w->parent()->parent() &&
+ ( w->parent()->parent()->inherits( "QTabWidget" ) ||
+ w->parent()->parent()->inherits( "QWizard" ) ) ) {
+ if ( w->parent()->parent()->inherits( "QTabWidget" ) )
+ ( (QTabWidget*)w->parent()->parent() )->showPage( w );
+ else
+ ( (QDesignerWizard*)w->parent()->parent() )->setCurrentPage( ( (QDesignerWizard*)w->parent()->parent() )->pageNum( w ) );
+ w = (QWidget*)w->parent()->parent();
+ formWindow->emitUpdateProperties( formWindow->currentWidget() );
+ } else {
+ return;
+ }
+ }
+
+ if ( deselect )
+ formWindow->clearSelection( false );
+ if ( w->isVisibleTo( formWindow ) )
+ formWindow->selectWidget( w, true );
+}
+
+QWidget *HierarchyList::findWidget( QListViewItem *i )
+{
+ return ( (HierarchyItem*)i )->widget();
+}
+
+QListViewItem *HierarchyList::findItem( QWidget *w )
+{
+ QListViewItemIterator it( this );
+ while ( it.current() ) {
+ if ( ( (HierarchyItem*)it.current() )->widget() == w )
+ return it.current();
+ ++it;
+ }
+ return 0;
+}
+
+QWidget *HierarchyList::current() const
+{
+ if ( currentItem() )
+ return ( (HierarchyItem*)currentItem() )->widget();
+ return 0;
+}
+
+void HierarchyList::changeNameOf( QWidget *w, const QString &name )
+{
+ QListViewItem *item = findItem( w );
+ if ( !item )
+ return;
+ item->setText( 0, name );
+}
+
+
+void HierarchyList::changeDatabaseOf( QWidget *w, const QString & info )
+{
+#ifndef QT_NO_SQL
+ if ( !formWindow->isDatabaseAware() )
+ return;
+ QListViewItem *item = findItem( w );
+ if ( !item )
+ return;
+ item->setText( 2, info );
+#else
+ Q_UNUSED(w);
+ Q_UNUSED(info);
+#endif
+}
+
+void HierarchyList::setup()
+{
+ if ( !formWindow )
+ return;
+ clear();
+ QWidget *w = formWindow->mainContainer();
+#ifndef QT_NO_SQL
+ if ( formWindow->isDatabaseAware() ) {
+ if ( columns() == 2 ) {
+ addColumn( i18n("Database" ) );
+ header()->resizeSection( 0, 1 );
+ header()->resizeSection( 1, 1 );
+ header()->resizeSection( 2, 1 );
+ header()->adjustHeaderSize();
+ }
+ } else {
+ if ( columns() == 3 ) {
+ removeColumn( 2 );
+ }
+ }
+#endif
+ if ( w )
+ insertObject( w, 0 );
+}
+
+void HierarchyList::setOpen( QListViewItem *i, bool b )
+{
+ QListView::setOpen( i, b );
+}
+
+void HierarchyList::insertObject( QObject *o, QListViewItem *parent )
+{
+ bool fakeMainWindow = false;
+ if ( o && o->inherits( "QMainWindow" ) ) {
+ QObject *cw = ( (QMainWindow*)o )->centralWidget();
+ if ( cw ) {
+ o = cw;
+ fakeMainWindow = true;
+ }
+ }
+ QListViewItem *item = 0;
+ QString className = WidgetFactory::classNameOf( o );
+ if ( o->inherits( "QLayoutWidget" ) ) {
+ switch ( WidgetFactory::layoutType( (QWidget*)o ) ) {
+ case WidgetFactory::HBox:
+ className = "HBox";
+ break;
+ case WidgetFactory::VBox:
+ className = "VBox";
+ break;
+ case WidgetFactory::Grid:
+ className = "Grid";
+ break;
+ default:
+ break;
+ }
+ }
+
+ QString dbInfo;
+#ifndef QT_NO_SQL
+ dbInfo = MetaDataBase::fakeProperty( o, "database" ).toStringList().join(".");
+#endif
+
+ QString name = o->name();
+ if ( o->parent() && o->parent()->inherits( "QWidgetStack" ) &&
+ o->parent()->parent() ) {
+ if ( o->parent()->parent()->inherits( "QTabWidget" ) )
+ name = ( (QTabWidget*)o->parent()->parent() )->tabLabel( (QWidget*)o );
+ else if ( o->parent()->parent()->inherits( "QWizard" ) )
+ name = ( (QWizard*)o->parent()->parent() )->title( (QWidget*)o );
+ }
+
+ QToolBox *tb;
+ if ( o->parent() && o->parent()->parent() &&
+ (tb = ::qt_cast<QToolBox*>(o->parent()->parent()->parent())) )
+ name = tb->itemLabel( tb->indexOf((QWidget*)o) );
+
+
+ if ( fakeMainWindow ) {
+ name = o->parent()->name();
+ className = "QMainWindow";
+ }
+
+ if ( !parent )
+ item = new HierarchyItem( HierarchyItem::Widget, this, name, className, dbInfo );
+ else
+ item = new HierarchyItem( HierarchyItem::Widget, parent, name, className, dbInfo );
+ if ( !parent )
+ item->setPixmap( 0, PixmapChooser::loadPixmap( "form.xpm", PixmapChooser::Mini ) );
+ else if ( o->inherits( "QLayoutWidget") )
+ item->setPixmap( 0, PixmapChooser::loadPixmap( "layout.xpm", PixmapChooser::Small ) );
+ else
+ item->setPixmap( 0, WidgetDatabase::iconSet( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( o ) ) ).
+ pixmap( QIconSet::Small, QIconSet::Normal ) );
+ ( (HierarchyItem*)item )->setWidget( (QWidget*)o );
+
+ const QObjectList *l = o->children();
+ if ( !l )
+ return;
+ QObjectListIt it( *l );
+ it.toLast();
+ for ( ; it.current(); --it ) {
+ if ( !it.current()->isWidgetType() || ( (QWidget*)it.current() )->isHidden() )
+ continue;
+ if ( !formWindow->widgets()->find( (QWidget*)it.current() ) ) {
+ if ( it.current()->parent() &&
+ ( it.current()->parent()->inherits( "QTabWidget" ) ||
+ it.current()->parent()->inherits( "QWizard" ) ) &&
+ it.current()->inherits( "QWidgetStack" ) ) {
+ QObject *obj = it.current();
+ QObjectList *l2 = obj->queryList( "QWidget", 0, true, false );
+ QDesignerTabWidget *tw = 0;
+ QDesignerWizard *dw = 0;
+ if ( it.current()->parent()->inherits( "QTabWidget" ) )
+ tw = (QDesignerTabWidget*)it.current()->parent();
+ if ( it.current()->parent()->inherits( "QWizard" ) )
+ dw = (QDesignerWizard*)it.current()->parent();
+ QWidgetStack *stack = (QWidgetStack*)obj;
+ for ( obj = l2->last(); obj; obj = l2->prev() ) {
+ if ( qstrcmp( obj->className(), "QWidgetStackPrivate::Invisible" ) == 0 ||
+ ( tw && !tw->tabBar()->tab( stack->id( (QWidget*)obj ) ) ) ||
+ ( dw && dw->isPageRemoved( (QWidget*)obj ) ) )
+ continue;
+ insertObject( obj, item );
+ }
+ delete l2;
+ } else if ( ::qt_cast<QToolBox*>(it.current()->parent()) ) {
+ if ( !::qt_cast<QScrollView*>(it.current()) )
+ continue;
+ QToolBox *tb = (QToolBox*)it.current()->parent();
+ for ( int i = tb->count() - 1; i >= 0; --i )
+ insertObject( tb->item( i ), item );
+ }
+ continue;
+ }
+ insertObject( it.current(), item );
+ }
+
+ if ( item->firstChild() )
+ item->setOpen( true );
+}
+
+void HierarchyList::setCurrent( QWidget *w )
+{
+ QListViewItemIterator it( this );
+ while ( it.current() ) {
+ if ( ( (HierarchyItem*)it.current() )->widget() == w ) {
+ blockSignals( true );
+ setCurrentItem( it.current() );
+ ensureItemVisible( it.current() );
+ blockSignals( false );
+ return;
+ }
+ ++it;
+ }
+}
+
+void HierarchyList::showRMBMenu( QListViewItem *i, const QPoint & p )
+{
+ if ( !i )
+ return;
+
+
+ QWidget *w = findWidget( i );
+ if ( !w )
+ return;
+
+ if ( w != formWindow &&
+ !formWindow->widgets()->find( w ) )
+ return;
+
+ if ( w->isVisibleTo( formWindow ) ) {
+ if ( !w->inherits( "QTabWidget" ) && !w->inherits( "QWizard" ) ) {
+ if ( !normalMenu )
+ normalMenu = formWindow->mainWindow()->setupNormalHierarchyMenu( this );
+ normalMenu->popup( p );
+ } else {
+ if ( !tabWidgetMenu )
+ tabWidgetMenu =
+ formWindow->mainWindow()->setupTabWidgetHierarchyMenu( this, SLOT( addTabPage() ),
+ SLOT( removeTabPage() ) );
+ tabWidgetMenu->popup( p );
+ }
+ }
+}
+
+void HierarchyList::addTabPage()
+{
+ QWidget *w = current();
+ if ( !w )
+ return;
+ if ( w->inherits( "QTabWidget" ) ) {
+ QTabWidget *tw = (QTabWidget*)w;
+ AddTabPageCommand *cmd = new AddTabPageCommand( i18n("Add Page to %1" ).arg( tw->name() ), formWindow,
+ tw, "Tab" );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ } else if ( w->inherits( "QWizard" ) ) {
+ QWizard *wiz = (QWizard*)formWindow->mainContainer();
+ AddWizardPageCommand *cmd = new AddWizardPageCommand( i18n("Add Page to %1" ).arg( wiz->name() ), formWindow,
+ wiz, "Page" );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ }
+}
+
+void HierarchyList::removeTabPage()
+{
+ QWidget *w = current();
+ if ( !w )
+ return;
+ if ( w->inherits( "QTabWidget" ) ) {
+ QTabWidget *tw = (QTabWidget*)w;
+ if ( tw->currentPage() ) {
+ QDesignerTabWidget *dtw = (QDesignerTabWidget*)tw;
+ DeleteTabPageCommand *cmd = new DeleteTabPageCommand( i18n("Delete Page %1 of %2" ).
+ arg( dtw->pageTitle() ).arg( tw->name() ),
+ formWindow, tw, tw->currentPage() );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ }
+ } else if ( w->inherits( "QWizard" ) ) {
+ QWizard *wiz = (QWizard*)formWindow->mainContainer();
+ if ( wiz->currentPage() ) {
+ QDesignerWizard *dw = (QDesignerWizard*)wiz;
+ DeleteWizardPageCommand *cmd = new DeleteWizardPageCommand( i18n("Delete Page %1 of %2" ).
+ arg( dw->pageTitle() ).arg( wiz->name() ),
+ formWindow, wiz,
+ wiz->indexOf( wiz->currentPage() ), true );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ }
+ }
+}
+
+// ------------------------------------------------------------
+
+
+// ------------------------------------------------------------
+static HierarchyItem::Type getChildType( int type )
+{
+ switch ( (HierarchyItem::Type)type ) {
+ case HierarchyItem::Widget:
+ case HierarchyItem::SlotParent:
+ qWarning( "getChildType: Inserting childs dynamically to Widget or SlotParent is not allwowed!" );
+ return (HierarchyItem::Type)type;
+ case HierarchyItem::Public:
+ case HierarchyItem::Protected:
+ case HierarchyItem::Private:
+ case HierarchyItem::Slot:
+ return HierarchyItem::Slot;
+ case HierarchyItem::DefinitionParent:
+ case HierarchyItem::Definition:
+ return HierarchyItem::Definition;
+ case HierarchyItem::Event:
+ case HierarchyItem::EventFunction:
+ return HierarchyItem::Event;
+ }
+ return (HierarchyItem::Type)type;
+}
+
+void HierarchyList::insertEntry( QListViewItem *i, const QPixmap &pix, const QString &s )
+{
+ HierarchyItem *item = new HierarchyItem( getChildType( i->rtti() ), i, s,
+ QString::null, QString::null );
+ if ( !pix.isNull() )
+ item->setPixmap( 0, pix );
+ item->setRenameEnabled( 0, true );
+ setCurrentItem( item );
+ ensureItemVisible( item );
+ qApp->processEvents();
+ newItem = item;
+ item->startRename( 0 );
+}
+
+HierarchyView::HierarchyView( QWidget *parent )
+ : QTabWidget( parent, 0, WStyle_Customize | WStyle_NormalBorder | WStyle_Title |
+ WStyle_Tool |WStyle_MinMax | WStyle_SysMenu )
+{
+ formwindow = 0;
+ setIcon( PixmapChooser::loadPixmap( "logo" ) );
+ listview = new HierarchyList( this, formWindow() );
+ addTab( listview, i18n("Widgets" ) );
+}
+
+HierarchyView::~HierarchyView()
+{
+}
+
+void HierarchyView::clear()
+{
+ listview->clear();
+}
+
+void HierarchyView::setFormWindow( FormWindow *fw, QWidget *w )
+{
+ if (fw == 0 || w == 0)
+ {
+ listview->clear();
+ listview->setFormWindow(fw);
+ formwindow = 0;
+ }
+
+ if (fw == formwindow)
+ {
+ listview->setCurrent(w);
+ if (MainWindow::self->qWorkspace()->activeWindow() == fw)
+ showPage(listview);
+ return;
+ }
+
+ formwindow = fw;
+ listview->setFormWindow(fw);
+ listview->setup();
+ listview->setCurrent(w);
+
+ if (MainWindow::self->qWorkspace()->activeWindow() == fw)
+ showPage(listview);
+}
+
+FormWindow *HierarchyView::formWindow() const
+{
+ return formwindow;
+}
+
+void HierarchyView::closeEvent( QCloseEvent *e )
+{
+ emit hidden();
+ e->accept();
+}
+
+void HierarchyView::widgetInserted( QWidget * )
+{
+ listview->setup();
+}
+
+void HierarchyView::widgetRemoved( QWidget * )
+{
+ listview->setup();
+}
+
+void HierarchyView::widgetsInserted( const QWidgetList & )
+{
+ listview->setup();
+}
+
+void HierarchyView::widgetsRemoved( const QWidgetList & )
+{
+ listview->setup();
+}
+
+void HierarchyView::namePropertyChanged( QWidget *w, const QVariant & )
+{
+ QWidget *w2 = w;
+ if ( w->inherits( "QMainWindow" ) )
+ w2 = ( (QMainWindow*)w )->centralWidget();
+ listview->changeNameOf( w2, w->name() );
+}
+
+
+void HierarchyView::databasePropertyChanged( QWidget *w, const QStringList& info )
+{
+#ifndef QT_NO_SQL
+ QString i = info.join( "." );
+ listview->changeDatabaseOf( w, i );
+#else
+ Q_UNUSED(w);
+ Q_UNUSED(info);
+#endif
+}
+
+
+void HierarchyView::tabsChanged( QTabWidget * )
+{
+ listview->setup();
+}
+
+void HierarchyView::tabsChanged( QToolBox * )
+{
+ listview->setup();
+}
+
+void HierarchyView::pagesChanged( QWizard * )
+{
+ listview->setup();
+}
+
+void HierarchyView::rebuild()
+{
+ listview->setup();
+}
+
+void HierarchyView::closed( FormWindow *fw )
+{
+ if ( fw == formwindow )
+ listview->clear();
+}
+
+#include "hierarchyview.moc"
diff --git a/kommander/editor/hierarchyview.h b/kommander/editor/hierarchyview.h
new file mode 100644
index 00000000..54889ec2
--- /dev/null
+++ b/kommander/editor/hierarchyview.h
@@ -0,0 +1,161 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef HIRARCHYVIEW_H
+#define HIRARCHYVIEW_H
+
+#include <qvariant.h>
+#include <qlistview.h>
+#include <qtabwidget.h>
+#include <qguardedptr.h>
+#include <private/qcom_p.h>
+
+class FormWindow;
+class QCloseEvent;
+class QPopupMenu;
+class QKeyEvent;
+class QMouseEvent;
+class QWizard;
+class QToolBox;
+
+class HierarchyItem:public QListViewItem
+{
+public:
+ enum Type
+ {
+ Widget,
+ SlotParent,
+ Public,
+ Protected,
+ Private,
+ Slot,
+ DefinitionParent,
+ Definition,
+ Event,
+ EventFunction
+ };
+
+ HierarchyItem(Type type, QListViewItem * parent,
+ const QString & txt1, const QString & txt2, const QString & txt3);
+ HierarchyItem(Type type, QListView * parent,
+ const QString & txt1, const QString & txt2, const QString & txt3);
+
+ void paintCell(QPainter * p, const QColorGroup & cg, int column, int width, int align);
+ void updateBackColor();
+
+ void setWidget(QWidget * w);
+ QWidget *widget() const;
+
+ void setText(int col, const QString & txt) {if (!txt.isEmpty()) QListViewItem::setText(col, txt);}
+ int rtti() const { return (int) typ;}
+
+private:
+ void okRename(int col);
+ void cancelRename(int col);
+
+private:
+ QColor backgroundColor();
+ QColor backColor;
+ QWidget *wid;
+ Type typ;
+};
+
+class HierarchyList:public QListView
+{
+ Q_OBJECT
+public:
+ HierarchyList(QWidget * parent, FormWindow * fw, bool doConnects = TRUE);
+
+ virtual void setup();
+ virtual void setCurrent(QWidget * w);
+ void setOpen(QListViewItem * i, bool b);
+ void changeNameOf(QWidget * w, const QString & name);
+ void changeDatabaseOf(QWidget * w, const QString & info);
+ void setFormWindow(FormWindow * fw) {formWindow = fw;}
+ void drawContentsOffset(QPainter * p, int ox, int oy, int cx, int cy, int cw, int ch)
+ { setUpdatesEnabled(FALSE); triggerUpdate(); setUpdatesEnabled(TRUE);
+ QListView::drawContentsOffset(p, ox, oy, cx, cy, cw, ch); }
+ void insertEntry(QListViewItem * i, const QPixmap & pix = QPixmap(), const QString & s =
+ QString::null);
+
+protected:
+ void keyPressEvent(QKeyEvent * e);
+ void keyReleaseEvent(QKeyEvent * e);
+ void viewportMousePressEvent(QMouseEvent * e);
+ void viewportMouseReleaseEvent(QMouseEvent * e);
+
+public slots:
+ void addTabPage();
+ void removeTabPage();
+
+private:
+ void insertObject(QObject * o, QListViewItem * parent);
+ QWidget *findWidget(QListViewItem * i);
+ QListViewItem *findItem(QWidget * w);
+ QWidget *current() const;
+
+ private slots: virtual void objectClicked(QListViewItem * i);
+ virtual void showRMBMenu(QListViewItem *, const QPoint &);
+
+protected:
+ FormWindow * formWindow;
+ QPopupMenu *normalMenu, *tabWidgetMenu;
+ bool deselect;
+};
+
+class HierarchyView : public QTabWidget
+{
+ Q_OBJECT
+
+public:
+ HierarchyView( QWidget *parent );
+ ~HierarchyView();
+
+ void setFormWindow( FormWindow *fw, QWidget *w );
+ FormWindow *formWindow() const;
+ void clear();
+ void widgetInserted( QWidget *w );
+ void widgetRemoved( QWidget *w );
+ void widgetsInserted( const QWidgetList &l );
+ void widgetsRemoved( const QWidgetList &l );
+ void namePropertyChanged( QWidget *w, const QVariant &old );
+ void databasePropertyChanged( QWidget *w, const QStringList& info );
+ void tabsChanged( QTabWidget *w );
+ void tabsChanged( QToolBox *w );
+ void pagesChanged( QWizard *w );
+ void rebuild();
+ void closed( FormWindow *fw );
+
+protected slots:
+
+protected:
+ void closeEvent( QCloseEvent *e );
+
+signals:
+ void hidden();
+
+private:
+ FormWindow *formwindow;
+ HierarchyList *listview;
+
+};
+
+
+#endif
diff --git a/kommander/editor/iconvieweditor.ui b/kommander/editor/iconvieweditor.ui
new file mode 100644
index 00000000..afa18459
--- /dev/null
+++ b/kommander/editor/iconvieweditor.ui
@@ -0,0 +1,450 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>IconViewEditorBase</class>
+<comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>IconViewEditorBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>567</width>
+ <height>321</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Edit Iconview</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Edit Iconview&lt;/b&gt;&lt;p&gt;Add, edit or delete items in the icon view.&lt;/p&gt;&lt;p&gt;Click the &lt;b&gt;New Item&lt;/b&gt;-button to create a new item, then enter text and choose a pixmap.&lt;/p&gt;&lt;p&gt;Select an item from the view and click the &lt;b&gt;Delete Item&lt;/b&gt;-button to remove the item from the iconview.&lt;/p&gt;</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QIconView">
+ <property name="name">
+ <cstring>preview</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>All items in the iconview.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout5</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>itemNew</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;New Item</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Add an item</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Create a new item for the iconview.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>itemDelete</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Delete Item</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Delete item</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Delete the selected item.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Vertical Spacing1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>&amp;Item Properties</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>Label1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Text:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>itemText</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>itemText</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Change text</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Change the text for the selected item.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>Label2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Pixmap:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>itemChoosePixmap</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="1">
+ <property name="name">
+ <cstring>Layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>itemPixmap</cstring>
+ </property>
+ <property name="text">
+ <string>Label4</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>itemDeletePixmap</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Delete Pixmap</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Delete the selected item's pixmap.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>itemChoosePixmap</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Select a Pixmap</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Select a pixmap file for the current item.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and apply all the changes.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonApply</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Apply</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Apply all changes.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and discard any changes.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="409">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022630543251d2e253d856405bffcbc54105b19c856360003103711c6b53006ab440370316528264b4c198450c5808a94d1ed00aac214832b43124b544ec414d34b4c4c441103f11341120831309758313d0cf3b0840b7258d55a73010092c14eca</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>itemNew</sender>
+ <signal>clicked()</signal>
+ <receiver>IconViewEditorBase</receiver>
+ <slot>insertNewItem()</slot>
+ </connection>
+ <connection>
+ <sender>itemDelete</sender>
+ <signal>clicked()</signal>
+ <receiver>IconViewEditorBase</receiver>
+ <slot>deleteCurrentItem()</slot>
+ </connection>
+ <connection>
+ <sender>itemText</sender>
+ <signal>textChanged( const QString &amp; )</signal>
+ <receiver>IconViewEditorBase</receiver>
+ <slot>currentTextChanged(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>IconViewEditorBase</receiver>
+ <slot>okClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonApply</sender>
+ <signal>clicked()</signal>
+ <receiver>IconViewEditorBase</receiver>
+ <slot>applyClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>IconViewEditorBase</receiver>
+ <slot>cancelClicked()</slot>
+ </connection>
+ <connection>
+ <sender>itemChoosePixmap</sender>
+ <signal>clicked()</signal>
+ <receiver>IconViewEditorBase</receiver>
+ <slot>choosePixmap()</slot>
+ </connection>
+ <connection>
+ <sender>preview</sender>
+ <signal>selectionChanged(QIconViewItem*)</signal>
+ <receiver>IconViewEditorBase</receiver>
+ <slot>currentItemChanged(QIconViewItem*)</slot>
+ </connection>
+ <connection>
+ <sender>preview</sender>
+ <signal>currentChanged(QIconViewItem*)</signal>
+ <receiver>IconViewEditorBase</receiver>
+ <slot>currentItemChanged(QIconViewItem*)</slot>
+ </connection>
+ <connection>
+ <sender>itemDeletePixmap</sender>
+ <signal>clicked()</signal>
+ <receiver>IconViewEditorBase</receiver>
+ <slot>deletePixmap()</slot>
+ </connection>
+ <slot access="protected" language="C++" returnType="void">init()</slot>
+ <slot access="protected" language="C++" returnType="void">destroy()</slot>
+ <slot access="protected" language="C++" returnType="void">applyClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">cancelClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">choosePixmap()</slot>
+ <slot access="protected" language="C++" returnType="void">currentItemChanged( QIconViewItem * )</slot>
+ <slot access="protected" language="C++" returnType="void">currentTextChanged( const QString &amp; )</slot>
+ <slot access="protected" language="C++" returnType="void">deleteCurrentItem()</slot>
+ <slot access="protected" language="C++" returnType="void">insertNewItem()</slot>
+ <slot access="protected" language="C++" returnType="void">deletePixmap()</slot>
+ <slot access="protected" language="C++" returnType="void">okClicked()</slot>
+</connections>
+<tabstops>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+ <tabstop>preview</tabstop>
+ <tabstop>itemNew</tabstop>
+ <tabstop>itemDelete</tabstop>
+ <tabstop>itemText</tabstop>
+ <tabstop>itemDeletePixmap</tabstop>
+ <tabstop>itemChoosePixmap</tabstop>
+ <tabstop>buttonHelp</tabstop>
+ <tabstop>buttonApply</tabstop>
+</tabstops>
+</UI>
diff --git a/kommander/editor/iconvieweditorimpl.cpp b/kommander/editor/iconvieweditorimpl.cpp
new file mode 100644
index 00000000..f7552cee
--- /dev/null
+++ b/kommander/editor/iconvieweditorimpl.cpp
@@ -0,0 +1,158 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "iconvieweditorimpl.h"
+#include "formwindow.h"
+#include "mainwindow.h"
+#include "pixmapchooser.h"
+
+#include <qlineedit.h>
+#include <qlabel.h>
+#include <qiconview.h>
+#include <qpushbutton.h>
+#include <qcheckbox.h>
+
+#include <klocale.h>
+
+IconViewEditor::IconViewEditor( QWidget *parent, QWidget *editWidget, FormWindow *fw )
+ : IconViewEditorBase( parent, 0, true ), formwindow( fw )
+{
+ connect( buttonHelp, SIGNAL( clicked() ), MainWindow::self, SLOT( showDialogHelp() ) );
+ iconview = (QIconView*)editWidget;
+
+ itemText->setText( "" );
+ itemText->setEnabled( false );
+ itemPixmap->setText( "" );
+ itemChoosePixmap->setEnabled( false );
+ itemDeletePixmap->setEnabled( false );
+
+ QIconViewItem *i = 0;
+ for ( i = iconview->firstItem(); i; i = i->nextItem() ) {
+ (void)new QIconViewItem( preview, i->text(), *i->pixmap() );
+ }
+
+ if ( preview->firstItem() )
+ preview->setCurrentItem( preview->firstItem() );
+}
+
+void IconViewEditor::insertNewItem()
+{
+ QIconViewItem *i = new QIconViewItem( preview, i18n("New Item" ) );
+ preview->setCurrentItem( i );
+ preview->setSelected( i, true );
+}
+
+void IconViewEditor::deleteCurrentItem()
+{
+ delete preview->currentItem();
+ if ( preview->currentItem() )
+ preview->setSelected( preview->currentItem(), true );
+}
+
+void IconViewEditor::currentItemChanged( QIconViewItem *i )
+{
+ itemText->blockSignals( true );
+ itemText->setText( "" );
+ itemPixmap->setText( "" );
+ itemText->blockSignals( false );
+
+ if ( !i ) {
+ itemText->setEnabled( false );
+ itemChoosePixmap->setEnabled( false );
+ return;
+ }
+
+ itemText->blockSignals( true );
+ itemText->setEnabled( true );
+ itemChoosePixmap->setEnabled( true );
+ itemDeletePixmap->setEnabled( i->pixmap() && !i->pixmap()->isNull() );
+
+ itemText->setText( i->text() );
+ if ( i->pixmap() )
+ itemPixmap->setPixmap( *i->pixmap() );
+ itemText->blockSignals( false );
+}
+
+void IconViewEditor::currentTextChanged( const QString &txt )
+{
+ if ( !preview->currentItem() )
+ return;
+
+ preview->currentItem()->setText( txt );
+}
+
+void IconViewEditor::okClicked()
+{
+ applyClicked();
+ accept();
+}
+
+void IconViewEditor::cancelClicked()
+{
+ reject();
+}
+
+void IconViewEditor::applyClicked()
+{
+ QIconViewItem *i = 0;
+ QValueList<PopulateIconViewCommand::Item> items;
+ for ( i = preview->firstItem(); i; i = i->nextItem() ) {
+ PopulateIconViewCommand::Item item;
+ if ( i->pixmap() )
+ item.pix = *i->pixmap();
+ item.text = i->text();
+ items.append( item );
+ }
+
+ PopulateIconViewCommand *cmd = new PopulateIconViewCommand( i18n("Edit Items of '%1'" ).arg( iconview->name() ),
+ formwindow, iconview, items );
+ cmd->execute();
+ formwindow->commandHistory()->addCommand( cmd );
+}
+
+void IconViewEditor::choosePixmap()
+{
+ if ( !preview->currentItem() )
+ return;
+
+ QPixmap pix;
+ if ( preview->currentItem()->pixmap() )
+ pix = qChoosePixmap( this, formwindow, *preview->currentItem()->pixmap() );
+ else
+ pix = qChoosePixmap( this, formwindow, QPixmap() );
+
+ if ( pix.isNull() )
+ return;
+
+ preview->currentItem()->setPixmap( pix );
+ itemPixmap->setPixmap( pix );
+ itemDeletePixmap->setEnabled( true );
+}
+
+void IconViewEditor::deletePixmap()
+{
+ if ( !preview->currentItem() )
+ return;
+
+ preview->currentItem()->setPixmap( QPixmap() );
+ itemPixmap->setText( "" );
+ itemDeletePixmap->setEnabled( false );
+}
+#include "iconvieweditorimpl.moc"
diff --git a/kommander/editor/iconvieweditorimpl.h b/kommander/editor/iconvieweditorimpl.h
new file mode 100644
index 00000000..120f0bb6
--- /dev/null
+++ b/kommander/editor/iconvieweditorimpl.h
@@ -0,0 +1,52 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef ICONVIEWEDITOR_H
+#define ICONVIEWEDITOR_H
+
+#include "iconvieweditor.h"
+
+class FormWindow;
+
+class IconViewEditor : public IconViewEditorBase
+{
+ Q_OBJECT
+
+public:
+ IconViewEditor( QWidget *parent, QWidget *editWidget, FormWindow *fw );
+
+protected slots:
+ void insertNewItem();
+ void deleteCurrentItem();
+ void currentItemChanged( QIconViewItem * );
+ void currentTextChanged( const QString & );
+ void okClicked();
+ void cancelClicked();
+ void applyClicked();
+ void choosePixmap();
+ void deletePixmap();
+
+private:
+ QIconView *iconview;
+ FormWindow *formwindow;
+
+};
+
+#endif
diff --git a/kommander/editor/kmdr-editor.desktop b/kommander/editor/kmdr-editor.desktop
new file mode 100644
index 00000000..cdef1c5c
--- /dev/null
+++ b/kommander/editor/kmdr-editor.desktop
@@ -0,0 +1,129 @@
+[Desktop Entry]
+GenericName=Dynamic Dialog Editor
+GenericName[bg]=Редактор за диалогови прозорци
+GenericName[ca]=Editor de diàlegs dinàmics
+GenericName[cs]=Editor dynamických dialogů
+GenericName[da]=Dynamisk dialog-editor
+GenericName[de]=Editor für dynamische Dialoge
+GenericName[el]=Επεξεργαστής δυναμικών διαλόγων
+GenericName[en_GB]=Dynamic Dialogue Editor
+GenericName[es]=Editor de cuadros de diálogo dinámicos
+GenericName[et]=Dünaamiliste dialoogide redaktor
+GenericName[eu]=Elkarrizketa editore dinamikoa
+GenericName[fa]=ویرایشگر محاورۀ پویا
+GenericName[fi]=Dynaamisten dialogien editori
+GenericName[fr]=Éditeur dynamique de boîtes de dialogue
+GenericName[gl]=Editor de diálogos dinámicos
+GenericName[hi]=गतिशील संवाद संपादक
+GenericName[hu]=Párbeszédablak-szerkesztő
+GenericName[is]=Dynamic Dialog ritillinn
+GenericName[it]=Editor per le maschere dinamiche
+GenericName[ja]=動的ダイアログエディタ
+GenericName[ka]=დინამიურ დიალოგთა რედაქტორი
+GenericName[lt]=Dinaminė dialogų rengyklė
+GenericName[ms]=Penyunting Dialog Dinamik
+GenericName[nds]=Editor för dünaamsch Dialogen
+GenericName[ne]=गतिशील संवाद सम्पादक
+GenericName[nl]=Dynamische dialoog-editor
+GenericName[pl]=Edytor do dynamicznych okien dialogowych
+GenericName[pt]=Editor de Diálogos Dinâmicos
+GenericName[pt_BR]=Editor de Diálogo Dinâmico
+GenericName[ru]=Редактор диалогов
+GenericName[sk]=Dynamický editor dialógov
+GenericName[sl]=Urejevalnik dinamičnih pogovornih oken
+GenericName[sr]=Уређивач динамичких дијалога
+GenericName[sr@Latn]=Uređivač dinamičkih dijaloga
+GenericName[sv]=Editor för dynamiska dialogrutor
+GenericName[ta]=நிகழும் உரையாடல் திருத்தி
+GenericName[tg]=Муҳаррири диалоги динамика
+GenericName[tr]=Dinamik Diyalog Düzenleyicisi
+GenericName[uk]=Динамічний редактор вікон
+GenericName[zh_CN]=动态对话框编辑器
+GenericName[zh_HK]=動態對話盒編輯器
+GenericName[zh_TW]=動態對話盒編輯器
+Name=Kommander Editor
+Name[br]=Aozer Kommander
+Name[ca]=Editor Kommander
+Name[cs]=Editor Kommanderu
+Name[da]=Kommander-editor
+Name[de]=Kommander-Editor
+Name[el]=Επεξεργαστής Kommander
+Name[et]=Redaktor Kommander
+Name[eu]=Kommander editorea
+Name[fa]=ویرایشگر Kommander
+Name[fi]=Komentoeditori
+Name[fr]=Éditeur Kommander
+Name[ga]=Eagarthóir Kommander
+Name[hi]=कमांडर संपादक
+Name[hu]=Kommander
+Name[is]=Kommander ritillinn
+Name[it]=Editor Kommander
+Name[ja]=Kommander エディタ
+Name[lt]=Kommander rengyklė
+Name[ms]=Penyunting Kommander
+Name[nds]=Kommander-Editor
+Name[ne]=आदेश सम्पादक
+Name[pa]=Kommander ਸੰਪਾਦਕ
+Name[pl]=Edytor Kommander
+Name[pt]=Editor do Kommander
+Name[pt_BR]=Editor Kommander
+Name[ru]=Редактор Kommander
+Name[sl]=Urejevalnik Kommander
+Name[sr]=Kommander уређивач
+Name[sr@Latn]=Kommander uređivač
+Name[sv]=Kommander editor
+Name[ta]=Kகட்டளைத் திருத்தி
+Name[tg]=Муҳаррири Kommander
+Name[tr]=Kommander Düzenleyici
+Name[uk]=Редактор Kommander
+Name[zh_CN]=Kommander 编辑器
+Name[zh_HK]=Kommander 編輯器
+Name[zh_TW]=Kommander 編輯器
+Exec=kmdr-editor %F
+Icon=kommander
+Type=Application
+Comment=Dynamic Dialog Editor
+Comment[bg]=Редактор за диалогови прозорци
+Comment[ca]=Editor de diàlegs dinàmics
+Comment[cs]=Editor dynamických dialogů
+Comment[da]=Dynamisk dialog-editor
+Comment[de]=Editor für dynamische Dialoge
+Comment[el]=Επεξεργαστής δυναμικών διαλόγων
+Comment[en_GB]=Dynamic Dialogue Editor
+Comment[es]=Editor de cuadros de diálogo dinámicos
+Comment[et]=Dünaamiliste dialoogide redaktor
+Comment[eu]=Elkarrizketa editore dinamikoa
+Comment[fa]=ویرایشگر محاورۀ پویا
+Comment[fi]=Dynaamisten dialogien editori
+Comment[fr]=Éditeur dynamique de boîtes de dialogue
+Comment[gl]=Editor de diálogos dinámicos
+Comment[hi]=गतिशील संवाद संपादक
+Comment[hu]=Párbeszédablak-szerkesztő
+Comment[is]=Dynamic Dialog ritillinn
+Comment[it]=Editor per le maschere dinamiche
+Comment[ja]=動的ダイアログエディタ
+Comment[ka]=დინამიურ დიალოგთა რედაქტორი
+Comment[lt]=Dinaminė dialogų rengyklė
+Comment[ms]=Penyunting Dialog Dinamik
+Comment[nds]=Editor för dünaamsch Dialogen
+Comment[ne]=गतिशील संवाद सम्पादक
+Comment[nl]=Dynamische dialoog-editor
+Comment[pl]=Edytor do dynamicznych okien dialogowych
+Comment[pt]=Editor de diálogos dinâmicos
+Comment[pt_BR]=Editor de Diálogo Dinâmico
+Comment[ru]=Динамический редактор диалогов
+Comment[sk]=Dynamický editor dialógov
+Comment[sl]=Urejevalnik dinamičnih pogovornih oken
+Comment[sr]=Уређивач динамичких дијалога
+Comment[sr@Latn]=Uređivač dinamičkih dijaloga
+Comment[sv]=Editor för dynamiska dialogrutor
+Comment[ta]=நிகழும் உரையாடல் திருத்தி
+Comment[tg]=Муҳаррири диалоги динамика
+Comment[tr]=Dinamik Diyalog Düzenleyicisi
+Comment[uk]=Динамічний редактор вікон
+Comment[zh_CN]=动态对话框编辑器
+Comment[zh_HK]=動態對話盒編輯器
+Comment[zh_TW]=動態對話盒編輯器
+MimeType=application/x-kommander;
+DocPath=kommander/index.html
+Categories=Qt;KDE;Development;
diff --git a/kommander/editor/kommander-new.xml b/kommander/editor/kommander-new.xml
new file mode 100644
index 00000000..deb3d88a
--- /dev/null
+++ b/kommander/editor/kommander-new.xml
@@ -0,0 +1,587 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd"
+[
+ <!ENTITY funcname "[A-Za-z_:][A-Za-z0-9_:#&#37;@-]*">
+ <!ENTITY varname "[A-Za-z_][A-Za-z0-9_]*">
+ <!ENTITY word "[^|&amp;;()&lt;&gt;\s]+"> <!-- see man bash -->
+ <!ENTITY eos "(?=($|\s))"> <!-- eol or space following -->
+ <!ENTITY noword "(?![\w$+-])"> <!-- no word, $, + or - following -->
+]>
+<language name="Kommander (new parser)" version="1.0" kateversion="2.4" section="Scripts" extensions="*.kmdr" mimetype="application/x-shellscript" casesensitive="1" author="Wilbert Berendsen (wilbert@kde.nl), Andras Mantia (amantia@kde.org)" license="LGPL">
+
+<!-- (c) 2004 by Wilbert Berendsen, wilbert@kde.nl
+ Released under the LGPL, part of kdelibs/kate
+
+ Added Kommander specific highlighting.
+ (c) 2006 Andras Mantia, amantia@kde.org
+-->
+
+ <highlighting>
+
+ <list name="kmdrdcopfunctions">
+ <item>addUniqueItem</item>
+ <item>associatedText</item>
+ <item>cancel</item>
+ <item>cellText</item>
+ <item>clear</item>
+ <item>checked</item>
+ <item>children</item>
+ <item>columnCount</item>
+ <item>count</item>
+ <item>currentColumn</item>
+ <item>currentItem</item>
+ <item>currentRow</item>
+ <item>execute</item>
+ <item>findItem</item>
+ <item>geometry</item>
+ <item>global</item>
+ <item>hasFocus</item>
+ <item>insertColumn</item>
+ <item>insertItem</item>
+ <item>insertItems</item>
+ <item>insertRow</item>
+ <item>item</item>
+ <item>itemDepth</item>
+ <item>itemPath</item>
+ <item>removeColumn</item>
+ <item>removeItem</item>
+ <item>removeRow</item>
+ <item>rowCount</item>
+ <item>selection</item>
+ <item>setAssociatedText</item>
+ <item>setChecked</item>
+ <item>setCellText</item>
+ <item>setCurrentItem</item>
+ <item>setColumnCaption</item>
+ <item>setEnabled</item>
+ <item>setGlobal</item>
+ <item>setMaximum</item>
+ <item>setPixmap</item>
+ <item>setRowCaption</item>
+ <item>setSelection</item>
+ <item>setText</item>
+ <item>setVisible</item>
+ <item>text</item>
+ <item>type</item>
+ <item>setCellWidget</item>
+ <item>cellWidget</item>
+ <item>setEditable</item>
+ <item>type</item>
+ <item>insertTab</item>
+ </list>
+
+ <list name="kmdrfunctions">
+ <item>widgetText</item>
+ <item>selectedWidgetText</item>
+ <item>null</item>
+ <item>pid</item>
+ <item>dcopid</item>
+ <item>parentPid</item>
+ <item>debug</item>
+ <item>echo</item>
+ <item>env</item>
+ <item>exec</item>
+ <item>execBackground</item>
+ <item>global</item>
+ <item>i18n</item>
+ <item>dialog</item>
+ <item>readSetting</item>
+ <item>setGlobal</item>
+ <item>writeSetting</item>
+ <item>dcop</item>
+ <item>forBlock</item>
+ <item>forEachBlock</item>
+ <item>ifBlock</item>
+ <item>comment</item>
+ <item>createWidget</item>
+ <item>connect</item>
+ <item>disconnect</item>
+ <item>return</item>
+ <item>internalDcop</item>
+ <item>executeSlot</item>
+ <item>widgetExists</item>
+ </list>
+
+ <list name="kmdrarray">
+ <item>array_values</item>
+ <item>array_keys</item>
+ <item>array_clear</item>
+ <item>array_count</item>
+ <item>array_value</item>
+ <item>array_remove</item>
+ <item>array_setValue</item>
+ <item>array_fromString</item>
+ <item>array_toString</item>
+ <item>array_indexedFromString</item>
+ <item>array_indexedRemoveElements</item>
+ <item>array_indexedInsertElements</item>
+ <item>array_indexedToString</item>
+ <item>array_flipCopy</item>
+ </list>
+
+ <list name="kmdrmatrix">
+ <item>matrix_fromString</item>
+ <item>matrix_toString</item>
+ <item>matrix_clear</item>
+ <item>matrix_rows</item>
+ <item>matrix_columnToArray</item>
+ <item>matrix_columnToIndexedArray</item>
+ <item>matrix_rowToArray</item>
+ <item>matrix_columns</item>
+ <item>matrix_rowKeys</item>
+ <item>matrix_columnKeys</item>
+ <item>matrix_removeRow</item>
+ <item>matrix_removeColumn</item>
+ <item>matrix_addRow</item>
+ <item>matrix_findRow</item>
+ <!--<item>matrix_addColumn</item>
+ <item>matrix_indexedCopy</item>-->
+ </list>
+
+ <list name="kmdrstring">
+ <item>str_length</item>
+ <item>str_contains</item>
+ <item>str_find</item>
+ <item>str_findRev</item>
+ <item>str_left</item>
+ <item>str_right</item>
+ <item>str_mid</item>
+ <item>str_remove</item>
+ <item>str_replace</item>
+ <item>str_upper</item>
+ <item>str_lower</item>
+ <item>str_compare</item>
+ <item>str_isEmpty</item>
+ <item>str_isNumber</item>
+ <item>str_section</item>
+ <item>str_args</item>
+ <item>str_toint</item>
+ <item>str_todouble</item>
+ <item>str_round</item>
+ <item>str_sort</item>
+ <item>str_trim</item>
+ <item>str_padLeft</item>
+ <item>str_padRight</item>
+ <item>str_count</item>
+ </list>
+
+ <list name="kmdrfile">
+ <item>file_read</item>
+ <item>file_write</item>
+ <item>file_append</item>
+ <item>file_exists</item>
+ </list>
+
+ <list name="kmdrinput">
+ <item>input_color</item>
+ <item>input_text</item>
+ <item>input_password</item>
+ <item>input_value</item>
+ <item>input_double</item>
+ <item>input_valueDouble</item>
+ <item>input_openfile</item>
+ <item>input_openfiles</item>
+ <item>input_savefile</item>
+ <item>input_directory</item>
+ </list>
+
+ <list name="kmdrmessage">
+ <item>message_info</item>
+ <item>message_error</item>
+ <item>message_question</item>
+ <item>message_warning</item>
+ </list>
+
+
+ <list name="keywords">
+ <item> else </item>
+ <item> for </item>
+ <item> to </item>
+ <item> function </item>
+ <item> in </item>
+ <item> select </item>
+ <item> while </item>
+ <item> . </item>
+ <item> elseif </item>
+ <item> then </item>
+ <item> set </item>
+ <item> foreach </item>
+ <item> end </item>
+ <item> endif </item>
+ <item> do </item>
+ <item> break </item>
+ <item> continue </item>
+ <item> exit </item>
+ <item> switch </item>
+ <item> and </item>
+ <item> or </item>
+ <item> not </item>
+ <item> step </item>
+ <item> with </item>
+ </list>
+
+ <list name="booleans">
+ <item>true</item>
+ <item>false</item>
+ </list>
+
+ <contexts>
+ <context attribute="Normal Text" lineEndContext="#stay" name="Start">
+ <IncludeRules context="FindAll" />
+ </context>
+
+<!-- ====== The following rulessets are meant to be included ======== -->
+ <!-- FindAll tries to interpret everything -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="FindAll">
+ <IncludeRules context="FindComments" />
+ <IncludeRules context="FindBlockComments" />
+ <IncludeRules context="FindCommands" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <IncludeRules context="FindOthers" />
+ </context>
+
+ <!-- FindComments consumes shell comments till EOL -->
+ <context attribute="Normal Text" lineEndContext="#pop" name="FindComments">
+ <Detect2Chars attribute="Comment" context="Comment" char="/" char1="/" firstNonSpace="true"/>
+ <RegExpr attribute="Normal Text" context="Comment" String="[\s;](?=/)" />
+ </context>
+ <!-- FindBlockComments consumes comments to end of block -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="FindBlockComments">
+ <Detect2Chars attribute="Comment" context="twolinecomment" char="/" char1="&#42;" beginRegion="Comment" />
+ </context>
+ <context name="twolinecomment" attribute="Comment" lineEndContext="#stay">
+ <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment" />
+ </context>
+
+ <context attribute="Comment" lineEndContext="#pop" name="Comment">
+ <IncludeRules context="##Alerts" />
+ </context>
+
+ <!-- FindCommands matches many items that can be expected outside strings, substitutions etc. -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="FindCommands">
+ <!-- start expression in double parentheses -->
+ <Detect2Chars attribute="Keyword" context="ExprDblParen" char="(" char1="(" beginRegion="expression" />
+ <!-- start expression in double brackets -->
+ <RegExpr attribute="Keyword" context="ExprDblBracket" String="\[\[&eos;" beginRegion="expression" column="0"/>
+ <RegExpr attribute="Keyword" context="ExprDblBracket" String="\s\[\[&eos;" beginRegion="expression" />
+ <!-- start expression in single brackets -->
+ <RegExpr attribute="Builtin" context="ExprBracket" String="\[&eos;" beginRegion="expression" column="0"/>
+ <RegExpr attribute="Builtin" context="ExprBracket" String="\s\[&eos;" beginRegion="expression" />
+ <!-- start a group command with { -->
+ <RegExpr attribute="Keyword" context="Group" String="\{&eos;" beginRegion="group" />
+ <!-- match do and if blocks -->
+ <RegExpr attribute="Keyword" context="#stay" String="\bfor&noword;" beginRegion="for" />
+ <RegExpr attribute="Keyword" context="#stay" String="\bforeach&noword;" beginRegion="for" />
+ <RegExpr attribute="Keyword" context="#stay" String="\bwhile&noword;" beginRegion="for" />
+ <RegExpr attribute="Keyword" context="#stay" String="\bend&noword;" endRegion="for" />
+ <RegExpr attribute="Keyword" context="#stay" String="\bif&noword;" beginRegion="if" />
+ <RegExpr attribute="Keyword" context="#stay" String="\belseif&noword;" beginRegion="if" endRegion="if"/>
+ <RegExpr attribute="Keyword" context="#stay" String="\belse&noword;" beginRegion="if" endRegion="if"/>
+ <RegExpr attribute="Keyword" context="#stay" String="\bendif&noword;" endRegion="if"/>
+ <RegExpr attribute="Keyword" context="#stay" String="\}&eos;" endRegion="group"/>
+ <!-- handle case as a special case -->
+ <RegExpr attribute="Keyword" context="Case" String="\bcase&noword;" beginRegion="case" />
+ <!-- handle command line options -->
+ <RegExpr attribute="Option" context="#stay" String="-[A-Za-z0-9]+" />
+ <RegExpr attribute="Option" context="#stay" String="--[a-z][A-Za-z0-9_-]*" />
+ <!-- handle keywords -->
+ <keyword attribute="Keyword" context="#stay" String="keywords" />
+ <keyword attribute="Builtin" context="#stay" String="booleans" />
+ <!-- handle here-string -->
+ <StringDetect attribute="Redirection" context="#stay" String="&lt;&lt;&lt;" />
+ <!-- handle &, &&, | and || -->
+ <RegExpr attribute="Control" context="#stay" String="([|&amp;])\1?" />
+ <!-- Kommander rules -->
+ <RegExpr attribute="KmdrMethod" context="DetectKmdr" String="\b&varname;[\.|\[]" lookAhead="true"/>
+ <RegExpr attribute="KmdrMethod" context="DetectKmdrMethod" String="kmdrfunctions\(" />
+ <keyword attribute="DCOPMethod" context="#stay" String="kmdrfunctions" />
+ <keyword attribute="KmdrArray" context="#stay" String="kmdrarray" />
+ <keyword attribute="KmdrMatrix" context="#stay" String="kmdrmatrix" />
+ <keyword attribute="KmdrString" context="#stay" String="kmdrstring" />
+ <keyword attribute="KmdrFile" context="#stay" String="kmdrfile" />
+ <keyword attribute="KmdrInput" context="#stay" String="kmdrinput" />
+ <keyword attribute="KmdrMessage" context="#stay" String="kmdrmessage" />
+ <!-- handle variable assignments -->
+ <RegExpr attribute="GlobalVariable" context="#stay" String="\b_&varname;" />
+ <RegExpr attribute="Variable" context="#stay" String="\b&varname;" />
+ </context>
+
+ <!-- Kommander rules -->
+
+ <context attribute="KmdrVariable" lineEndContext="FindAll" name="DetectKmdr">
+ <RegExpr attribute="KmdrMethod" context="#stay" String="&varname;" />
+ <DetectChar attribute="Normal Text" context="#pop" char="(" lookAhead="true"/>
+ <DetectChar attribute="Normal Text" context="#pop" char=")" lookAhead="true"/>
+ <DetectChar attribute="Normal Text" context="#pop" char="[" lookAhead="true"/>
+ <DetectChar attribute="Normal Text" context="#pop" char="]" lookAhead="true"/>
+ <DetectChar attribute="Normal Text" context="#pop" char="{" lookAhead="true"/>
+ <DetectChar attribute="Normal Text" context="#pop" char="}" lookAhead="true"/>
+ <DetectChar attribute="KmdrMethod" context="DetectKmdrMethod" char="." lookAhead="true"/>
+ <RegExpr attribute="Normal Text" context="#pop" String="[\s\=\;\+\-\*\/\%]+" />
+
+ </context>
+ <context attribute="DCOPMethod" lineEndContext="FindAll" name="DetectKmdrMethod">
+ <DetectChar attribute="Normal Text" context="FindAll" char="(" lookAhead="true"/>
+ <DetectChar attribute="Normal Text" context="FindAll" char=")" lookAhead="true"/>
+ <RegExpr attribute="Normal Text" context="FindAll" String="[\s\=\;\+\-\*\/\%]+" />
+ </context>
+
+ <!-- FindOthers contains various rules to mark different shell input -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="FindOthers">
+ <RegExpr attribute="Escape" context="#stay" String="\\[][;&quot;\\'$`{}()|&amp;&lt;&gt;* ]" />
+ <RegExpr attribute="Keyword" context="#stay" String="\\$" />
+ <RegExpr attribute="Escape" context="#stay" String="\{(?!(\s|$))\S*\}" />
+ <RegExpr attribute="Path" context="#stay" String="\.?/[\w_@.+-]+(?=([\s/):]|$))" />
+ <!-- TODO: shell globs -->
+ </context>
+
+ <!-- FindStrings looks for single and double quoted strings, also with $-prefix -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="FindStrings">
+ <DetectChar attribute="String SingleQ" context="StringSQ" char="'" />
+ <DetectChar attribute="String DoubleQ" context="StringDQ" char="&quot;" />
+ <!-- <Detect2Chars attribute="String SingleQ" context="StringEsc" char="$" char1="'" /> -->
+ <!-- <Detect2Chars attribute="String Transl." context="StringDQ" char="$" char1="&quot;" /> -->
+ </context>
+
+ <!-- FindSubstitutions goes after anything starting with $ and ` and their escapes -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="FindSubstitutions">
+ <!-- <RegExpr attribute="Variable" context="#stay" String="\$[*@#?$!_0-9-]" />
+ <RegExpr attribute="Variable" context="Subscript" String="\$&varname;\[" />
+ <RegExpr attribute="Variable" context="#stay" String="\$&varname;" />
+ <RegExpr attribute="Variable" context="#stay" String="\$\{[*@#?$!_0-9-]\}" />
+ <RegExpr attribute="Variable" context="#stay" String="\$\{#&varname;\}" />
+ <RegExpr attribute="Variable" context="#stay" String="\$\{!&varname;\*?\}" />-->
+ <RegExpr attribute="Variable" context="VarBrace" String="\$\{&varname;" />
+ <RegExpr attribute="Variable" context="VarBrace" String="\$\{[*@#?$!_0-9-](?=[:#%/])" />
+ <StringDetect attribute="Variable" context="ExprDblParenSubst" String="$((" beginRegion="expression" />
+ <StringDetect attribute="Redirection" context="SubstFile" String="$(&lt;" />
+ <StringDetect attribute="Variable" context="SubstCommand" String="$(" />
+ <DetectChar attribute="Backquote" context="SubstBackq" char="`" />
+ <RegExpr attribute="Escape" context="#stay" String="\\[`$\\]" />
+ </context>
+
+
+
+
+
+<!-- ====== These are the contexts that can be branched to ======= -->
+
+ <!-- ExprDblParen consumes an expression started in command mode till )) -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParen">
+ <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")" endRegion="expression" />
+ <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+ <IncludeRules context="FindAll" />
+ </context>
+
+ <!-- ExprDblParenSubst like ExprDblParen but matches )) as Variable -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubst">
+ <Detect2Chars attribute="Variable" context="#pop" char=")" char1=")" endRegion="expression" />
+ <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+ <IncludeRules context="FindAll" />
+ </context>
+
+ <!-- ExprSubParen consumes an expression till ) -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="ExprSubParen">
+ <DetectChar attribute="Normal Text" context="#pop" char=")" />
+ <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+ <IncludeRules context="FindAll" />
+ </context>
+
+ <!-- ExprBracket consumes an expression till ] -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracket">
+ <RegExpr attribute="Builtin" context="#pop" String="\s\](?=($|[\s;|&amp;]))" endRegion="expression" />
+ <RegExpr attribute="Builtin" context="#pop" String="\](?=($|[\s;|&amp;]))" endRegion="expression" column="0"/>
+ <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+ <IncludeRules context="FindAll" />
+ </context>
+
+ <!-- ExprDblBracket consumes an expression till ]] -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracket">
+ <RegExpr attribute="Keyword" context="#pop" String="\s\]\](?=($|[\s;|&amp;]))" endRegion="expression" />
+ <RegExpr attribute="Keyword" context="#pop" String="\]\](?=($|[\s;|&amp;]))" endRegion="expression" column="0"/>
+ <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+ <IncludeRules context="FindAll" />
+ </context>
+
+ <!-- Group consumes shell input till } -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="Group">
+ <DetectChar attribute="Keyword" context="#pop" char="}" endRegion="group" />
+ <IncludeRules context="FindAll" />
+ </context>
+
+ <!-- SubShell consumes shell input till ) -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="SubShell">
+ <DetectChar attribute="Keyword" context="#pop" char=")" endRegion="subshell" />
+ <IncludeRules context="FindAll" />
+ </context>
+
+ <!-- Assign consumes an expression till EOL or whitespace -->
+ <context attribute="Normal Text" lineEndContext="#pop" name="Assign" fallthrough="true" fallthroughContext="#pop">
+ <DetectChar attribute="Variable" context="AssignArray" char="(" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <IncludeRules context="FindOthers" />
+ <RegExpr attribute="Normal Text" context="#stay" String="[\w:,+_./-]+" />
+ </context>
+
+ <!-- AssignArray consumes everything till ), marking assignments -->
+ <context attribute="Normal Text" lineEndContext="#pop" name="AssignArray">
+ <DetectChar attribute="Variable" context="#pop" char=")" />
+ <DetectChar attribute="Variable" context="Subscript" char="[" />
+ <DetectChar attribute="Variable" context="Assign" char="=" />
+ <IncludeRules context="FindAll" />
+ </context>
+
+ <!-- AssignSubscr first expects a [ then parses subscript and continues with '=value' -->
+ <context attribute="Normal Text" lineEndContext="#pop" name="AssignSubscr" fallthrough="true" fallthroughContext="#pop">
+ <DetectChar attribute="Variable" context="Subscript" char="[" />
+ <DetectChar attribute="Variable" context="Assign" char="=" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <IncludeRules context="FindOthers" />
+ </context>
+
+ <!-- Subscript consumes anything till ], marks as Variable -->
+ <context attribute="Variable" lineEndContext="#stay" name="Subscript">
+ <DetectChar attribute="Variable" context="#pop" char="]" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <IncludeRules context="FindOthers" />
+ </context>
+
+ <!-- FunctionDef consumes a name, possibly with (), marks as Function -->
+ <context attribute="Function" lineEndContext="#pop" name="FunctionDef" fallthrough="true" fallthroughContext="#pop">
+ <RegExpr attribute="Function" context="#pop" String="\s+&funcname;(\s*\(\))?" />
+ </context>
+
+ <!-- VarName consumes spare variable names and assignments -->
+ <context attribute="Normal Text" lineEndContext="#pop" name="VarName" fallthrough="true" fallthroughContext="#pop">
+ <!-- handle command line options -->
+ <RegExpr attribute="Option" context="#stay" String="-[A-Za-z0-9]+" />
+ <RegExpr attribute="Option" context="#stay" String="--[a-z][A-Za-z0-9_-]*" />
+ <RegExpr attribute="Variable" context="#stay" String="\b&varname;" />
+ <DetectChar attribute="Variable" context="Subscript" char="[" />
+ <DetectChar attribute="Variable" context="Assign" char="=" />
+ <IncludeRules context="FindAll" />
+ <!-- stay here in spaces and other safe characters -->
+ <RegExpr attribute="Normal Text" context="#stay" String="[^]})|;`&amp;&gt;&lt;]" />
+ </context>
+
+ <!-- StringSQ consumes anything till ' -->
+ <context attribute="String SingleQ" lineEndContext="#stay" name="StringSQ">
+
+ <DetectChar attribute="String SingleQ" context="#pop" char="'" />
+ </context>
+
+ <!-- StringDQ consumes anything till ", substitutes vars and expressions -->
+ <context attribute="String DoubleQ" lineEndContext="#stay" name="StringDQ">
+ <DetectChar attribute="String DoubleQ" context="#pop" char="&quot;" />
+ <RegExpr attribute="String Escape" context="#stay" String="\\[`&quot;\\$\n]" />
+ <IncludeRules context="FindSubstitutions" />
+ </context>
+
+ <!-- StringEsc eats till ', but escaping many characters -->
+ <context attribute="String SingleQ" lineEndContext="#stay" name="StringEsc">
+ <DetectChar attribute="String SingleQ" context="#pop" char="'" />
+ <RegExpr attribute="String Escape" context="#stay" String="\\[abefnrtv\\']" />
+ <RegExpr attribute="String Escape" context="#stay" String="\\([0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)" />
+ </context>
+
+ <!-- VarBrace is called as soon as ${xxx is encoutered -->
+ <context attribute="Variable" lineEndContext="#stay" name="VarBrace">
+ <DetectChar attribute="Variable" context="#pop" char="}" />
+ <DetectChar attribute="Variable" context="Subscript" char="[" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <!-- TODO: highlight various special parameter expansions } -->
+ </context>
+
+ <!-- SubstFile is called after a <( or >( is encoutered -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="SubstFile">
+ <DetectChar attribute="Redirection" context="#pop" char=")" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <IncludeRules context="FindOthers" />
+ </context>
+
+ <!-- SubstCommand is called after a $( is encountered -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="SubstCommand">
+ <DetectChar attribute="Variable" context="#pop" char=")" />
+ <IncludeRules context="FindCommands" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <IncludeRules context="FindOthers" />
+ </context>
+
+ <!-- SubstBackq is called when a backquote is encountered -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="SubstBackq">
+ <DetectChar attribute="Keyword" context="#pop" char="`" />
+ <IncludeRules context="FindCommands" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <IncludeRules context="FindOthers" />
+ </context>
+
+ <!-- Case is called after the case keyword is encoutered. We handle this because of
+ the lonely closing parentheses that would otherwise disturb the expr matching -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="Case">
+ <RegExpr attribute="Keyword" context="CaseIn" String="\sin\b" />
+ <IncludeRules context="FindAll" />
+ </context>
+
+ <!-- CaseIn is called when the construct 'case ... in' has been found. -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="CaseIn">
+ <RegExpr attribute="Keyword" context="#pop#pop" String="\besac(?=$|[\s;)])" endRegion="case" />
+ <DetectChar attribute="Keyword" context="CaseExpr" char=")" beginRegion="caseexpr" />
+ <AnyChar attribute="Keyword" context="#stay" String="(|" />
+ <IncludeRules context="FindAll" />
+ </context>
+
+ <!-- CaseExpr eats shell input till ;; -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="CaseExpr">
+ <Detect2Chars attribute="Keyword" context="#pop" char=";" char1=";" endRegion="caseexpr" />
+ <IncludeRules context="FindAll" />
+ </context>
+
+
+ </contexts>
+
+ <itemDatas>
+ <itemData name="Normal Text" defStyleNum="dsNormal" />
+ <itemData name="Comment" defStyleNum="dsComment" />
+ <itemData name="Keyword" defStyleNum="dsKeyword" />
+ <itemData name="Control" defStyleNum="dsKeyword" />
+ <itemData name="Builtin" defStyleNum="dsKeyword" color="#808" />
+ <itemData name="Command" defStyleNum="dsKeyword" color="#c0c" />
+ <itemData name="Redirection" defStyleNum="dsKeyword" color="#238" />
+ <itemData name="Escape" defStyleNum="dsDataType" />
+ <itemData name="String SingleQ" defStyleNum="dsString" />
+ <itemData name="String DoubleQ" defStyleNum="dsString" />
+ <itemData name="Backquote" defStyleNum="dsKeyword" />
+ <itemData name="String Transl." defStyleNum="dsString" />
+ <itemData name="String Escape" defStyleNum="dsDataType" />
+ <itemData name="Variable" defStyleNum="dsOthers" />
+ <itemData name="Expression" defStyleNum="dsOthers" />
+ <itemData name="Function" defStyleNum="dsChar" bold="1" />
+ <itemData name="Path" defStyleNum="dsNormal" />
+ <itemData name="Option" defStyleNum="dsNormal" />
+ <itemData name="GlobalVariable" defStyleNum="dsOthers" bold="1" />
+ <itemData name="KmdrMethod" defStyleNum="dsKeyword" italic="1" color="#008000" />
+ <itemData name="DCOPMethod" defStyleNum="dsKeyword" italic="1" color="#21E52B" />
+ <itemData name="KmdrString" defStyleNum="dsKeyword" italic="1" color="#D0D000" />
+ <itemData name="KmdrArray" defStyleNum="dsKeyword" italic="1" color="#C0C0FF" />
+ <itemData name="KmdrMatrix" defStyleNum="dsKeyword" italic="1" color="#5050AA" />
+ <itemData name="KmdrFile" defStyleNum="dsKeyword" italic="1" color="#FF0000" />
+ <itemData name="KmdrInput" defStyleNum="dsKeyword" italic="1" color="#FF8000" />
+ <itemData name="KmdrMessage" defStyleNum="dsKeyword" italic="1" color="#800000" />
+ </itemDatas>
+ </highlighting>
+ <general>
+ <comments>
+ <comment name="singleLine" start="//"/>
+ <comment name="multiLine" start="/*" end="*/" />
+ </comments>
+ <keywords casesensitive="1" weakDeliminator="^%#[]$._{}:-" additionalDeliminator="`."/>
+ </general>
+</language>
diff --git a/kommander/editor/kommander.xml b/kommander/editor/kommander.xml
new file mode 100644
index 00000000..f5880b2f
--- /dev/null
+++ b/kommander/editor/kommander.xml
@@ -0,0 +1,998 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd"
+[
+ <!ENTITY funcname "[A-Za-z_:][A-Za-z0-9_:#&#37;@-]*">
+ <!ENTITY varname "[A-Za-z_][A-Za-z0-9_]*">
+ <!ENTITY word "[^|&amp;;()&lt;&gt;\s]+"> <!-- see man bash -->
+ <!ENTITY eos "(?=($|\s))"> <!-- eol or space following -->
+ <!ENTITY noword "(?![\w$+-])"> <!-- no word, $, + or - following -->
+]>
+<language name="Kommander (old parser)" version="2.07" kateversion="2.4" section="Scripts" extensions="*.kmdr" mimetype="application/x-shellscript" casesensitive="1" author="Wilbert Berendsen (wilbert@kde.nl), Andras Mantia (amantia@kde.org)" license="LGPL">
+
+<!-- (c) 2004 by Wilbert Berendsen, wilbert@kde.nl
+ Released under the LGPL, part of kdelibs/kate
+
+ Added Kommander specific highlighting.
+ (c) 2006 Andras Mantia, amantia@kde.org
+-->
+
+ <highlighting>
+
+ <list name="kmdrdcopfunctions">
+ <item>addUniqueItem</item>
+ <item>associatedText</item>
+ <item>cancel</item>
+ <item>cellText</item>
+ <item>clear</item>
+ <item>checked</item>
+ <item>children</item>
+ <item>count</item>
+ <item>currentColumn</item>
+ <item>currentItem</item>
+ <item>currentRow</item>
+ <item>execute</item>
+ <item>findItem</item>
+ <item>geometry</item>
+ <item>global</item>
+ <item>hasFocus</item>
+ <item>insertColumn</item>
+ <item>insertItem</item>
+ <item>insertItems</item>
+ <item>insertRow</item>
+ <item>item</item>
+ <item>itemDepth</item>
+ <item>itemPath</item>
+ <item>removeColumn</item>
+ <item>removeItem</item>
+ <item>removeRow</item>
+ <item>selection</item>
+ <item>setAssociatedText</item>
+ <item>setChecked</item>
+ <item>setCellText</item>
+ <item>setCurrentItem</item>
+ <item>setColumnCaption</item>
+ <item>setEnabled</item>
+ <item>setGlobal</item>
+ <item>setMaximum</item>
+ <item>setPixmap</item>
+ <item>setRowCaption</item>
+ <item>setSelection</item>
+ <item>setText</item>
+ <item>setVisible</item>
+ <item>text</item>
+ <item>type</item>
+ </list>
+
+ <list name="kmdrfunctions">
+ <item>widgetText</item>
+ <item>selectedWidgetText</item>
+ <item>null</item>
+ <item>pid</item>
+ <item>dcopid</item>
+ <item>parentPid</item>
+ <item>debug</item>
+ <item>echo</item>
+ <item>env</item>
+ <item>exec</item>
+ <item>expr</item>
+ <item>global</item>
+ <item>i18n</item>
+ <item>dialog</item>
+ <item>readSetting</item>
+ <item>setGlobal</item>
+ <item>writeSetting</item>
+ <item>dcop</item>
+ <item>switchBlock</item>
+ <item>execBegin</item>
+ <item>forBlock</item>
+ <item>forEachBlock</item>
+ <item>ifBlock</item>
+ <item>comment</item>
+ </list>
+
+ <list name="kmdrarray">
+ <item>values</item>
+ <item>keys</item>
+ <item>clear</item>
+ <item>count</item>
+ <item>value</item>
+ <item>remove</item>
+ <item>setValue</item>
+ <item>fromString</item>
+ <item>toString</item>
+ </list>
+
+ <list name="kmdrstring">
+ <item>length</item>
+ <item>contains</item>
+ <item>find</item>
+ <item>findRev</item>
+ <item>left</item>
+ <item>right</item>
+ <item>mid</item>
+ <item>remove</item>
+ <item>replace</item>
+ <item>upper</item>
+ <item>lower</item>
+ <item>compare</item>
+ <item>isEmpty</item>
+ <item>isNumber</item>
+ <item>section</item>
+ <item>args</item>
+ <item>round</item>
+ </list>
+
+ <list name="kmdrfile">
+ <item>read</item>
+ <item>write</item>
+ <item>append</item>
+ <item>exists</item>
+ </list>
+
+ <list name="kmdrinput">
+ <item>color</item>
+ <item>text</item>
+ <item>password</item>
+ <item>value</item>
+ <item>double</item>
+ <item>valueDouble</item>
+ <item>openfile</item>
+ <item>openfiles</item>
+ <item>savefile</item>
+ <item>directory</item>
+ </list>
+
+ <list name="kmdrmessage">
+ <item>info</item>
+ <item>error</item>
+ <item>question</item>
+ <item>warning</item>
+ </list>
+
+
+ <list name="keywords">
+ <item> else </item>
+ <item> for </item>
+ <item> function </item>
+ <item> in </item>
+ <item> select </item>
+ <item> until </item>
+ <item> while </item>
+ <item> . </item>
+ <item> elif </item>
+ <item> then </item>
+ <item> set </item>
+ <item> foreach </item>
+ <item> end </item>
+ </list>
+
+
+ <list name="builtins">
+ <item> : </item>
+ <item> . </item>
+ <item> source </item>
+ <item> alias </item>
+ <item> bg </item>
+ <item> bind </item>
+ <item> break </item>
+ <item> builtin </item>
+ <item> cd </item>
+ <item> command </item>
+ <item> compgen </item>
+ <item> complete </item>
+ <item> continue </item>
+ <item> dirs </item>
+ <item> disown </item>
+ <item> echo </item>
+ <item> enable </item>
+ <item> eval </item>
+ <item> exec </item>
+ <item> exit </item>
+ <item> fc </item>
+ <item> fg </item>
+ <item> getopts </item>
+ <item> hash </item>
+ <item> help </item>
+ <item> history </item>
+ <item> jobs </item>
+ <item> kill </item>
+ <item> let </item>
+ <item> logout </item>
+ <item> popd </item>
+ <item> printf </item>
+ <item> pushd </item>
+ <item> pwd </item>
+ <item> return </item>
+ <item> set </item>
+ <item> shift </item>
+ <item> shopt </item>
+ <item> suspend </item>
+ <item> test </item>
+ <item> times </item>
+ <item> trap </item>
+ <item> type </item>
+ <item> ulimit </item>
+ <item> umask </item>
+ <item> unalias </item>
+ <item> wait </item>
+ </list>
+
+ <list name="builtins_var">
+ <item> export </item>
+ <item> unset </item>
+ <item> declare </item>
+ <item> typeset </item>
+ <item> local </item>
+ <item> read </item>
+ <item> readonly </item>
+ </list>
+
+ <list name="unixcommands">
+ <!-- /bin -->
+ <item> arch </item>
+ <item> awk </item>
+ <item> bash </item>
+ <item> bunzip2 </item>
+ <item> bzcat </item>
+ <item> bzcmp </item>
+ <item> bzdiff </item>
+ <item> bzegrep </item>
+ <item> bzfgrep </item>
+ <item> bzgrep </item>
+ <item> bzip2 </item>
+ <item> bzip2recover </item>
+ <item> bzless </item>
+ <item> bzmore </item>
+ <item> cat </item>
+ <item> chattr </item>
+ <item> chgrp </item>
+ <item> chmod </item>
+ <item> chown </item>
+ <item> chvt </item>
+ <item> cp </item>
+ <item> date </item>
+ <item> dd </item>
+ <item> deallocvt </item>
+ <item> df </item>
+ <item> dir </item>
+ <item> dircolors </item>
+ <item> dmesg </item>
+ <item> dnsdomainname </item>
+ <item> domainname </item>
+ <item> du </item>
+ <item> dumpkeys </item>
+ <item> echo </item>
+ <item> ed </item>
+ <item> egrep </item>
+ <item> false </item>
+ <item> fgconsole </item>
+ <item> fgrep </item>
+ <item> fuser </item>
+ <item> gawk </item>
+ <item> getkeycodes </item>
+ <item> gocr </item>
+ <item> grep </item>
+ <item> groups </item>
+ <item> gunzip </item>
+ <item> gzexe </item>
+ <item> gzip </item>
+ <item> hostname </item>
+ <item> igawk </item>
+ <item> install </item>
+ <item> kbd_mode </item>
+ <item> kbdrate </item>
+ <item> killall </item>
+ <item> last </item>
+ <item> lastb </item>
+ <item> link </item>
+ <item> ln </item>
+ <item> loadkeys </item>
+ <item> loadunimap </item>
+ <item> login </item>
+ <item> ls </item>
+ <item> lsattr </item>
+ <item> lsmod </item>
+ <item> lsmod.old </item>
+ <item> mapscrn </item>
+ <item> mesg </item>
+ <item> mkdir </item>
+ <item> mkfifo </item>
+ <item> mknod </item>
+ <item> mktemp </item>
+ <item> more </item>
+ <item> mount </item>
+ <item> mv </item>
+ <item> nano </item>
+ <item> netstat </item>
+ <item> nisdomainname </item>
+ <item> openvt </item>
+ <item> pgawk </item>
+ <item> pidof </item>
+ <item> ping </item>
+ <item> ps </item>
+ <item> pstree </item>
+ <item> pwd </item>
+ <item> rbash </item>
+ <item> readlink </item>
+ <item> red </item>
+ <item> resizecons </item>
+ <item> rm </item>
+ <item> rmdir </item>
+ <item> run-parts </item>
+ <item> sash </item>
+ <item> sed </item>
+ <item> setfont </item>
+ <item> setkeycodes </item>
+ <item> setleds </item>
+ <item> setmetamode </item>
+ <item> setserial </item>
+ <item> sh </item>
+ <item> showkey </item>
+ <item> shred </item>
+ <item> sleep </item>
+ <item> ssed </item>
+ <item> stat </item>
+ <item> stty </item>
+ <item> su </item>
+ <item> sync </item>
+ <item> tar </item>
+ <item> tempfile </item>
+ <item> touch </item>
+ <item> true </item>
+ <item> umount </item>
+ <item> uname </item>
+ <item> unicode_start </item>
+ <item> unicode_stop </item>
+ <item> unlink </item>
+ <item> utmpdump </item>
+ <item> uuidgen </item>
+ <item> vdir </item>
+ <item> wall </item>
+ <item> wc </item>
+ <item> ypdomainname </item>
+ <item> zcat </item>
+ <item> zcmp </item>
+ <item> zdiff </item>
+ <item> zegrep </item>
+ <item> zfgrep </item>
+ <item> zforce </item>
+ <item> zgrep </item>
+ <item> zless </item>
+ <item> zmore </item>
+ <item> znew </item>
+ <item> zsh </item>
+
+ <!-- some from /usr/bin -->
+ <item> aclocal </item>
+ <item> aconnect </item>
+ <item> aplay </item>
+ <item> apm </item>
+ <item> apmsleep </item>
+ <item> apropos </item>
+ <item> ar </item>
+ <item> arecord </item>
+ <item> as </item>
+ <item> as86 </item>
+ <item> autoconf </item>
+ <item> autoheader </item>
+ <item> automake </item>
+ <item> awk </item>
+ <item> basename </item>
+ <item> bc </item>
+ <item> bison </item>
+ <item> c++ </item>
+ <item> cal </item>
+ <item> cat </item>
+ <item> cc </item>
+ <item> cdda2wav </item>
+ <item> cdparanoia </item>
+ <item> cdrdao </item>
+ <item> cd-read </item>
+ <item> cdrecord </item>
+ <item> chfn </item>
+ <item> chgrp </item>
+ <item> chmod </item>
+ <item> chown </item>
+ <item> chroot </item>
+ <item> chsh </item>
+ <item> clear </item>
+ <item> cmp </item>
+ <item> co </item>
+ <item> col </item>
+ <item> comm </item>
+ <item> cp </item>
+ <item> cpio </item>
+ <item> cpp </item>
+ <item> cut </item>
+ <item> dc </item>
+ <item> dd </item>
+ <item> df </item>
+ <item> diff </item>
+ <item> diff3 </item>
+ <item> dir </item>
+ <item> dircolors </item>
+ <item> directomatic </item>
+ <item> dirname </item>
+ <item> du </item>
+ <item> env </item>
+ <item> expr </item>
+ <item> fbset </item>
+ <item> file </item>
+ <item> find </item>
+ <item> flex </item>
+ <item> flex++ </item>
+ <item> fmt </item>
+ <item> free </item>
+ <item> ftp </item>
+ <item> funzip </item>
+ <item> fuser </item>
+ <item> g++ </item>
+ <item> gawk </item>
+ <item> gc </item>
+ <item> gcc </item>
+ <item> gdb </item>
+ <item> getent </item>
+ <item> getopt </item>
+ <item> gettext </item>
+ <item> gettextize </item>
+ <item> gimp </item>
+ <item> gimp-remote </item>
+ <item> gimptool </item>
+ <item> gmake </item>
+ <item> gs </item>
+ <item> head </item>
+ <item> hexdump </item>
+ <item> id </item>
+ <item> install </item>
+ <item> join </item>
+ <item> kill </item>
+ <item> killall </item>
+ <item> ld </item>
+ <item> ld86 </item>
+ <item> ldd </item>
+ <item> less </item>
+ <item> lex </item>
+ <item> ln </item>
+ <item> locate </item>
+ <item> lockfile </item>
+ <item> logname </item>
+ <item> lp </item>
+ <item> lpr </item>
+ <item> ls </item>
+ <item> lynx </item>
+ <item> m4 </item>
+ <item> make </item>
+ <item> man </item>
+ <item> mkdir </item>
+ <item> mknod </item>
+ <item> msgfmt </item>
+ <item> mv </item>
+ <item> namei </item>
+ <item> nasm </item>
+ <item> nawk </item>
+ <item> nice </item>
+ <item> nl </item>
+ <item> nm </item>
+ <item> nm86 </item>
+ <item> nmap </item>
+ <item> nohup </item>
+ <item> nop </item>
+ <item> od </item>
+ <item> passwd </item>
+ <item> patch </item>
+ <item> pcregrep </item>
+ <item> pcretest </item>
+ <item> perl </item>
+ <item> perror </item>
+ <item> pidof </item>
+ <item> pr </item>
+ <item> printf </item>
+ <item> procmail </item>
+ <item> prune </item>
+ <item> ps2ascii </item>
+ <item> ps2epsi </item>
+ <item> ps2frag </item>
+ <item> ps2pdf </item>
+ <item> ps2ps </item>
+ <item> psbook </item>
+ <item> psmerge </item>
+ <item> psnup </item>
+ <item> psresize </item>
+ <item> psselect </item>
+ <item> pstops </item>
+ <item> rcs </item>
+ <item> rev </item>
+ <item> rm </item>
+ <item> scp </item>
+ <item> sed </item>
+ <item> seq </item>
+ <item> setterm </item>
+ <item> shred </item>
+ <item> size </item>
+ <item> size86 </item>
+ <item> skill </item>
+ <item> slogin </item>
+ <item> snice </item>
+ <item> sort </item>
+ <item> sox </item>
+ <item> split </item>
+ <item> ssh </item>
+ <item> ssh-add </item>
+ <item> ssh-agent </item>
+ <item> ssh-keygen </item>
+ <item> ssh-keyscan </item>
+ <item> stat </item>
+ <item> strings </item>
+ <item> strip </item>
+ <item> sudo </item>
+ <item> suidperl </item>
+ <item> sum </item>
+ <item> tac </item>
+ <item> tail </item>
+ <item> tee </item>
+ <item> test </item>
+ <item> tr </item>
+ <item> uniq </item>
+ <item> unlink </item>
+ <item> unzip </item>
+ <item> updatedb </item>
+ <item> updmap </item>
+ <item> uptime </item>
+ <item> users </item>
+ <item> vmstat </item>
+ <item> w </item>
+ <item> wc </item>
+ <item> wget </item>
+ <item> whatis </item>
+ <item> whereis </item>
+ <item> which </item>
+ <item> who </item>
+ <item> whoami </item>
+ <item> write </item>
+ <item> xargs </item>
+ <item> yacc </item>
+ <item> yes </item>
+ <item> zip </item>
+ <item> zsoelim </item>
+
+ <!-- others -->
+ <item> dcop </item>
+ <item> kdialog </item>
+ <item> kfile </item>
+ <item> xhost </item>
+ <item> xmodmap </item>
+ <item> xset </item>
+ </list>
+
+
+ <contexts>
+ <context attribute="Normal Text" lineEndContext="#stay" name="Start">
+ <IncludeRules context="FindAll" />
+ </context>
+
+<!-- ====== The following rulessets are meant to be included ======== -->
+ <!-- FindAll tries to interpret everything -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="FindAll">
+ <IncludeRules context="FindComments" />
+ <IncludeRules context="FindCommands" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <IncludeRules context="FindOthers" />
+ </context>
+
+ <!-- FindMost tries to interpret anything except commands -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="FindMost">
+ <IncludeRules context="FindComments" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <IncludeRules context="FindOthers" />
+ </context>
+
+
+ <!-- FindComments consumes shell comments till EOL -->
+ <context attribute="Normal Text" lineEndContext="#pop" name="FindComments">
+ <DetectChar attribute="Comment" context="Comment" char="#" firstNonSpace="true"/>
+ <RegExpr attribute="Normal Text" context="Comment" String="[\s;](?=#)" />
+ </context>
+ <context attribute="Comment" lineEndContext="#pop" name="Comment">
+ <IncludeRules context="##Alerts" />
+ </context>
+
+ <!-- FindCommentsParen consumes shell comments till EOL or a closing parenthese -->
+ <context attribute="Normal Text" lineEndContext="#pop" name="FindCommentsParen">
+ <DetectChar attribute="Comment" context="CommentParen" char="#" firstNonSpace="true"/>
+ <RegExpr attribute="Normal Text" context="CommentParen" String="[\s;](?=#)" />
+ </context>
+ <context attribute="Comment" lineEndContext="#pop" name="CommentParen">
+ <RegExpr attribute="Comment" context="#pop" String="[^)](?=\))" />
+ <IncludeRules context="##Alerts" />
+ </context>
+
+ <!-- FindCommentsBackq consumes shell comments till EOL or a backquote -->
+ <context attribute="Normal Text" lineEndContext="#pop" name="FindCommentsBackq">
+ <DetectChar attribute="Comment" context="CommentBackq" char="#" firstNonSpace="true"/>
+ <RegExpr attribute="Normal Text" context="CommentBackq" String="[\s;](?=#)" />
+ </context>
+ <context attribute="Comment" lineEndContext="#pop" name="CommentBackq">
+ <RegExpr attribute="Comment" context="#pop" String="[^`](?=`)" />
+ <IncludeRules context="##Alerts" />
+ </context>
+
+
+ <!-- FindCommands matches many items that can be expected outside strings, substitutions etc. -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="FindCommands">
+ <!-- start expression in double parentheses -->
+ <Detect2Chars attribute="Keyword" context="ExprDblParen" char="(" char1="(" beginRegion="expression" />
+ <!-- start expression in double brackets -->
+ <RegExpr attribute="Keyword" context="ExprDblBracket" String="\[\[&eos;" beginRegion="expression" column="0"/>
+ <RegExpr attribute="Keyword" context="ExprDblBracket" String="\s\[\[&eos;" beginRegion="expression" />
+ <!-- start expression in single brackets -->
+ <RegExpr attribute="Builtin" context="ExprBracket" String="\[&eos;" beginRegion="expression" column="0"/>
+ <RegExpr attribute="Builtin" context="ExprBracket" String="\s\[&eos;" beginRegion="expression" />
+ <!-- start a group command with { -->
+ <RegExpr attribute="Keyword" context="Group" String="\{&eos;" beginRegion="group" />
+ <!-- start a subshell -->
+ <DetectChar attribute="Keyword" context="SubShell" char="(" beginRegion="subshell" />
+ <!-- match do and if blocks -->
+ <RegExpr attribute="Keyword" context="#stay" String="\bdo&noword;" beginRegion="do" />
+ <RegExpr attribute="Keyword" context="#stay" String="\bdone&noword;" endRegion="do" />
+ <RegExpr attribute="Keyword" context="#stay" String="\bif&noword;" beginRegion="if" />
+ <RegExpr attribute="Keyword" context="#stay" String="\bfi&noword;" endRegion="if" />
+ <!-- handle case as a special case -->
+ <RegExpr attribute="Keyword" context="Case" String="\bcase&noword;" beginRegion="case" />
+ <!-- handle command line options -->
+ <RegExpr attribute="Option" context="#stay" String="-[A-Za-z0-9]+" />
+ <RegExpr attribute="Option" context="#stay" String="--[a-z][A-Za-z0-9_-]*" />
+ <!-- handle variable assignments -->
+ <RegExpr attribute="Variable" context="Assign" String="\b&varname;=" />
+ <RegExpr attribute="Variable" context="AssignSubscr" String="\b&varname;(?=\[[^]]+\]=)" />
+ <!-- handle functions with function keyword before keywords -->
+ <StringDetect attribute="Function" context="#stay" String=":()" />
+ <RegExpr attribute="Keyword" context="FunctionDef" String="\bfunction\b" />
+ <!-- handle keywords -->
+ <keyword attribute="Keyword" context="#stay" String="keywords" />
+ <keyword attribute="Builtin" context="#stay" String="builtins" />
+ <keyword attribute="Command" context="#stay" String="unixcommands" />
+ <!-- handle commands that have variable names as argument -->
+ <keyword attribute="Builtin" context="VarName" String="builtins_var" />
+ <!-- handle here-string -->
+ <StringDetect attribute="Redirection" context="#stay" String="&lt;&lt;&lt;" />
+ <!-- handle here document -->
+ <StringDetect attribute="Redirection" context="HereDoc" String="&lt;&lt;" lookAhead="true" />
+ <!-- handle process subst -->
+ <RegExpr attribute="Redirection" context="ProcessSubst" String="[&lt;&gt;]\(" />
+ <!-- handle redirection -->
+ <RegExpr attribute="Redirection" context="#stay" String="([0-9]*(&gt;{1,2}|&lt;)(&amp;[0-9]+-?)?|&amp;&gt;|&gt;&amp;|[0-9]*&lt;&gt;)" />
+ <!-- handle &, &&, | and || -->
+ <RegExpr attribute="Control" context="#stay" String="([|&amp;])\1?" />
+ <!-- mark function definitions without function keyword -->
+ <RegExpr attribute="Function" context="#stay" String="&funcname;\s*\(\)" />
+ <!-- Kommander rules -->
+ <RegExpr attribute="Comment" context="#stay" String="@#.*\s*" />
+ <DetectChar attribute="KmdrMethod" context="DetectKmdr" char="@" lookAhead="true"/>
+ </context>
+
+ <!-- Kommander rules -->
+
+ <context attribute="KmdrMethod" lineEndContext="#pop" name="DetectKmdr">
+ <RegExpr attribute="KmdrMethod" context="#stay" String="@&varname;" />
+ <DetectChar attribute="Normal Text" context="#pop" char="(" lookAhead="true"/>
+ <DetectChar attribute="Normal Text" context="#pop" char=")" lookAhead="true"/>
+ <RegExpr attribute="Normal Text" context="#pop" String="[\s\=\;\+\-\*\/\%]+" />
+ <keyword attribute="DCOPMethod" context="#pop" String="kmdrdcopfunctions" />
+ <keyword attribute="KmdrMethod" context="#pop" String="kmdrfunctions" />
+ <keyword attribute="KmdrArray" context="#pop" String="kmdrarray" />
+ <keyword attribute="KmdrString" context="#pop" String="kmdrstring" />
+ <keyword attribute="KmdrFile" context="#pop" String="kmdrfile" />
+ <keyword attribute="KmdrInput" context="#pop" String="kmdrinput" />
+ <keyword attribute="KmdrMessage" context="#pop" String="kmdrmessage" />
+ </context>
+
+ <!-- FindOthers contains various rules to mark different shell input -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="FindOthers">
+ <RegExpr attribute="Escape" context="#stay" String="\\[][;&quot;\\'$`{}()|&amp;&lt;&gt;* ]" />
+ <RegExpr attribute="Keyword" context="#stay" String="\\$" />
+ <RegExpr attribute="Escape" context="#stay" String="\{(?!(\s|$))\S*\}" />
+ <RegExpr attribute="Path" context="#stay" String="\.?/[\w_@.+-]+(?=([\s/):]|$))" />
+ <!-- TODO: shell globs -->
+ </context>
+
+ <!-- FindStrings looks for single and double quoted strings, also with $-prefix -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="FindStrings">
+ <DetectChar attribute="String SingleQ" context="StringSQ" char="'" />
+ <DetectChar attribute="String DoubleQ" context="StringDQ" char="&quot;" />
+ <Detect2Chars attribute="String SingleQ" context="StringEsc" char="$" char1="'" />
+ <Detect2Chars attribute="String Transl." context="StringDQ" char="$" char1="&quot;" />
+ </context>
+
+ <!-- FindSubstitutions goes after anything starting with $ and ` and their escapes -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="FindSubstitutions">
+ <RegExpr attribute="Variable" context="#stay" String="\$[*@#?$!_0-9-]" />
+ <RegExpr attribute="Variable" context="Subscript" String="\$&varname;\[" />
+ <RegExpr attribute="Variable" context="#stay" String="\$&varname;" />
+ <RegExpr attribute="Variable" context="#stay" String="\$\{[*@#?$!_0-9-]\}" />
+ <RegExpr attribute="Variable" context="#stay" String="\$\{#&varname;\}" />
+ <RegExpr attribute="Variable" context="#stay" String="\$\{!&varname;\*?\}" />
+ <RegExpr attribute="Variable" context="VarBrace" String="\$\{&varname;" />
+ <RegExpr attribute="Variable" context="VarBrace" String="\$\{[*@#?$!_0-9-](?=[:#%/])" />
+ <StringDetect attribute="Variable" context="ExprDblParenSubst" String="$((" beginRegion="expression" />
+ <StringDetect attribute="Redirection" context="SubstFile" String="$(&lt;" />
+ <StringDetect attribute="Variable" context="SubstCommand" String="$(" />
+ <DetectChar attribute="Backquote" context="SubstBackq" char="`" />
+ <RegExpr attribute="Escape" context="#stay" String="\\[`$\\]" />
+ </context>
+
+
+
+
+
+<!-- ====== These are the contexts that can be branched to ======= -->
+
+ <!-- ExprDblParen consumes an expression started in command mode till )) -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParen">
+ <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")" endRegion="expression" />
+ <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+ <IncludeRules context="FindMost" />
+ </context>
+
+ <!-- ExprDblParenSubst like ExprDblParen but matches )) as Variable -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubst">
+ <Detect2Chars attribute="Variable" context="#pop" char=")" char1=")" endRegion="expression" />
+ <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+ <IncludeRules context="FindMost" />
+ </context>
+
+ <!-- ExprSubParen consumes an expression till ) -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="ExprSubParen">
+ <DetectChar attribute="Normal Text" context="#pop" char=")" />
+ <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+ <IncludeRules context="FindMost" />
+ </context>
+
+ <!-- ExprBracket consumes an expression till ] -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracket">
+ <RegExpr attribute="Builtin" context="#pop" String="\s\](?=($|[\s;|&amp;]))" endRegion="expression" />
+ <RegExpr attribute="Builtin" context="#pop" String="\](?=($|[\s;|&amp;]))" endRegion="expression" column="0"/>
+ <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+ <IncludeRules context="FindMost" />
+ </context>
+
+ <!-- ExprDblBracket consumes an expression till ]] -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracket">
+ <RegExpr attribute="Keyword" context="#pop" String="\s\]\](?=($|[\s;|&amp;]))" endRegion="expression" />
+ <RegExpr attribute="Keyword" context="#pop" String="\]\](?=($|[\s;|&amp;]))" endRegion="expression" column="0"/>
+ <DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
+ <IncludeRules context="FindMost" />
+ </context>
+
+ <!-- Group consumes shell input till } -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="Group">
+ <DetectChar attribute="Keyword" context="#pop" char="}" endRegion="group" />
+ <IncludeRules context="FindAll" />
+ </context>
+
+ <!-- SubShell consumes shell input till ) -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="SubShell">
+ <DetectChar attribute="Keyword" context="#pop" char=")" endRegion="subshell" />
+ <IncludeRules context="FindAll" />
+ </context>
+
+ <!-- Assign consumes an expression till EOL or whitespace -->
+ <context attribute="Normal Text" lineEndContext="#pop" name="Assign" fallthrough="true" fallthroughContext="#pop">
+ <DetectChar attribute="Variable" context="AssignArray" char="(" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <IncludeRules context="FindOthers" />
+ <RegExpr attribute="Normal Text" context="#stay" String="[\w:,+_./-]+" />
+ </context>
+
+ <!-- AssignArray consumes everything till ), marking assignments -->
+ <context attribute="Normal Text" lineEndContext="#pop" name="AssignArray">
+ <DetectChar attribute="Variable" context="#pop" char=")" />
+ <DetectChar attribute="Variable" context="Subscript" char="[" />
+ <DetectChar attribute="Variable" context="Assign" char="=" />
+ <IncludeRules context="FindMost" />
+ </context>
+
+ <!-- AssignSubscr first expects a [ then parses subscript and continues with '=value' -->
+ <context attribute="Normal Text" lineEndContext="#pop" name="AssignSubscr" fallthrough="true" fallthroughContext="#pop">
+ <DetectChar attribute="Variable" context="Subscript" char="[" />
+ <DetectChar attribute="Variable" context="Assign" char="=" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <IncludeRules context="FindOthers" />
+ </context>
+
+ <!-- Subscript consumes anything till ], marks as Variable -->
+ <context attribute="Variable" lineEndContext="#stay" name="Subscript">
+ <DetectChar attribute="Variable" context="#pop" char="]" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <IncludeRules context="FindOthers" />
+ </context>
+
+ <!-- FunctionDef consumes a name, possibly with (), marks as Function -->
+ <context attribute="Function" lineEndContext="#pop" name="FunctionDef" fallthrough="true" fallthroughContext="#pop">
+ <RegExpr attribute="Function" context="#pop" String="\s+&funcname;(\s*\(\))?" />
+ </context>
+
+ <!-- VarName consumes spare variable names and assignments -->
+ <context attribute="Normal Text" lineEndContext="#pop" name="VarName" fallthrough="true" fallthroughContext="#pop">
+ <!-- handle command line options -->
+ <RegExpr attribute="Option" context="#stay" String="-[A-Za-z0-9]+" />
+ <RegExpr attribute="Option" context="#stay" String="--[a-z][A-Za-z0-9_-]*" />
+ <RegExpr attribute="Variable" context="#stay" String="\b&varname;" />
+ <DetectChar attribute="Variable" context="Subscript" char="[" />
+ <DetectChar attribute="Variable" context="Assign" char="=" />
+ <IncludeRules context="FindMost" />
+ <!-- stay here in spaces and other safe characters -->
+ <RegExpr attribute="Normal Text" context="#stay" String="[^]})|;`&amp;&gt;&lt;]" />
+ </context>
+
+ <!-- ProcessSubst handles <(command) and >(command) -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="ProcessSubst">
+ <DetectChar attribute="Redirection" context="#pop" char=")" />
+ <IncludeRules context="FindCommentsParen" />
+ <IncludeRules context="FindCommands" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <IncludeRules context="FindOthers" />
+ </context>
+
+ <!-- StringSQ consumes anything till ' -->
+ <context attribute="String SingleQ" lineEndContext="#stay" name="StringSQ">
+
+ <DetectChar attribute="KmdrMethod" context="DetectKmdr" char="@" lookAhead="true"/>
+ <DetectChar attribute="String SingleQ" context="#pop" char="'" />
+ </context>
+
+ <!-- StringDQ consumes anything till ", substitutes vars and expressions -->
+ <context attribute="String DoubleQ" lineEndContext="#stay" name="StringDQ">
+ <DetectChar attribute="KmdrMethod" context="DetectKmdr" char="@" lookAhead="true"/>
+ <DetectChar attribute="String DoubleQ" context="#pop" char="&quot;" />
+ <RegExpr attribute="String Escape" context="#stay" String="\\[`&quot;\\$\n]" />
+ <IncludeRules context="FindSubstitutions" />
+ </context>
+
+ <!-- StringEsc eats till ', but escaping many characters -->
+ <context attribute="String SingleQ" lineEndContext="#stay" name="StringEsc">
+ <DetectChar attribute="String SingleQ" context="#pop" char="'" />
+ <RegExpr attribute="String Escape" context="#stay" String="\\[abefnrtv\\']" />
+ <RegExpr attribute="String Escape" context="#stay" String="\\([0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)" />
+ </context>
+
+ <!-- VarBrace is called as soon as ${xxx is encoutered -->
+ <context attribute="Variable" lineEndContext="#stay" name="VarBrace">
+ <DetectChar attribute="Variable" context="#pop" char="}" />
+ <DetectChar attribute="Variable" context="Subscript" char="[" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <!-- TODO: highlight various special parameter expansions } -->
+ </context>
+
+ <!-- SubstFile is called after a <( or >( is encoutered -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="SubstFile">
+ <DetectChar attribute="Redirection" context="#pop" char=")" />
+ <IncludeRules context="FindCommentsParen" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <IncludeRules context="FindOthers" />
+ </context>
+
+ <!-- SubstCommand is called after a $( is encountered -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="SubstCommand">
+ <DetectChar attribute="Variable" context="#pop" char=")" />
+ <IncludeRules context="FindCommentsParen" />
+ <IncludeRules context="FindCommands" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <IncludeRules context="FindOthers" />
+ </context>
+
+ <!-- SubstBackq is called when a backquote is encountered -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="SubstBackq">
+ <DetectChar attribute="Keyword" context="#pop" char="`" />
+ <IncludeRules context="FindCommentsBackq" />
+ <IncludeRules context="FindCommands" />
+ <IncludeRules context="FindStrings" />
+ <IncludeRules context="FindSubstitutions" />
+ <IncludeRules context="FindOthers" />
+ </context>
+
+ <!-- Case is called after the case keyword is encoutered. We handle this because of
+ the lonely closing parentheses that would otherwise disturb the expr matching -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="Case">
+ <RegExpr attribute="Keyword" context="CaseIn" String="\sin\b" />
+ <IncludeRules context="FindMost" />
+ </context>
+
+ <!-- CaseIn is called when the construct 'case ... in' has been found. -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="CaseIn">
+ <RegExpr attribute="Keyword" context="#pop#pop" String="\besac(?=$|[\s;)])" endRegion="case" />
+ <DetectChar attribute="Keyword" context="CaseExpr" char=")" beginRegion="caseexpr" />
+ <AnyChar attribute="Keyword" context="#stay" String="(|" />
+ <IncludeRules context="FindMost" />
+ </context>
+
+ <!-- CaseExpr eats shell input till ;; -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="CaseExpr">
+ <Detect2Chars attribute="Keyword" context="#pop" char=";" char1=";" endRegion="caseexpr" />
+ <IncludeRules context="FindAll" />
+ </context>
+
+ <!-- HereDoc consumes Here-documents. It is called at the beginning of the "<<" construct. -->
+ <context attribute="Normal Text" lineEndContext="#stay" name="HereDoc">
+ <RegExpr attribute="Redirection" context="HereDocQ" String="(&lt;&lt;\s*&quot;(&word;)&quot;)" lookAhead="true" />
+ <RegExpr attribute="Redirection" context="HereDocQ" String="(&lt;&lt;\s*'(&word;)')" lookAhead="true" />
+ <RegExpr attribute="Redirection" context="HereDocQ" String="(&lt;&lt;\s*\\(&word;))" lookAhead="true" />
+ <RegExpr attribute="Redirection" context="HereDocNQ" String="(&lt;&lt;(?!-)\s*(&word;))" lookAhead="true" />
+ <RegExpr attribute="Redirection" context="HereDocIQ" String="(&lt;&lt;-\s*&quot;(&word;)&quot;)" lookAhead="true" />
+ <RegExpr attribute="Redirection" context="HereDocIQ" String="(&lt;&lt;-\s*'(&word;)')" lookAhead="true" />
+ <RegExpr attribute="Redirection" context="HereDocIQ" String="(&lt;&lt;-\s*\\(&word;))" lookAhead="true" />
+ <RegExpr attribute="Redirection" context="HereDocINQ" String="(&lt;&lt;-\s*(&word;))" lookAhead="true" />
+ <StringDetect attribute="Redirection" context="#pop" String="&lt;&lt;" /><!-- always met -->
+ </context>
+
+ <context attribute="Normal Text" lineEndContext="#pop" name="HereDocRemainder">
+ <IncludeRules context="FindAll" />
+ </context>
+
+ <context attribute="Normal Text" lineEndContext="#stay" name="HereDocQ" dynamic="true">
+ <RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
+ <RegExpr attribute="Redirection" context="#pop#pop" String="%2[\s;]*$" dynamic="true" column="0"/>
+ </context>
+
+ <context attribute="Normal Text" lineEndContext="#stay" name="HereDocNQ" dynamic="true">
+ <RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
+ <RegExpr attribute="Redirection" context="#pop#pop" String="%2[\s;]*$" dynamic="true" column="0"/>
+ <IncludeRules context="FindSubstitutions" />
+ </context>
+
+ <context attribute="Normal Text" lineEndContext="#stay" name="HereDocIQ" dynamic="true">
+ <RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
+ <RegExpr attribute="Redirection" context="#pop#pop" String="\s*%2[\s;]*$" dynamic="true" column="0"/>
+ </context>
+
+ <context attribute="Normal Text" lineEndContext="#stay" name="HereDocINQ" dynamic="true">
+ <RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
+ <RegExpr attribute="Redirection" context="#pop#pop" String="\s*%2[\s;]*$" dynamic="true" column="0"/>
+ <IncludeRules context="FindSubstitutions" />
+ </context>
+
+ </contexts>
+
+ <itemDatas>
+ <itemData name="Normal Text" defStyleNum="dsNormal" />
+ <itemData name="Comment" defStyleNum="dsComment" />
+ <itemData name="Keyword" defStyleNum="dsKeyword" />
+ <itemData name="Control" defStyleNum="dsKeyword" />
+ <itemData name="Builtin" defStyleNum="dsKeyword" color="#808" />
+ <itemData name="Command" defStyleNum="dsKeyword" color="#c0c" />
+ <itemData name="Redirection" defStyleNum="dsKeyword" color="#238" />
+ <itemData name="Escape" defStyleNum="dsDataType" />
+ <itemData name="String SingleQ" defStyleNum="dsString" />
+ <itemData name="String DoubleQ" defStyleNum="dsString" />
+ <itemData name="Backquote" defStyleNum="dsKeyword" />
+ <itemData name="String Transl." defStyleNum="dsString" />
+ <itemData name="String Escape" defStyleNum="dsDataType" />
+ <itemData name="Variable" defStyleNum="dsOthers" />
+ <itemData name="Expression" defStyleNum="dsOthers" />
+ <itemData name="Function" defStyleNum="dsChar" bold="1" />
+ <itemData name="Path" defStyleNum="dsNormal" />
+ <itemData name="Option" defStyleNum="dsNormal" />
+ <itemData name="KmdrMethod" defStyleNum="dsKeyword" italic="1" color="#008000" />
+ <itemData name="DCOPMethod" defStyleNum="dsKeyword" italic="1" color="#21E52B" />
+ <itemData name="KmdrString" defStyleNum="dsKeyword" italic="1" color="#D0D000" />
+ <itemData name="KmdrArray" defStyleNum="dsKeyword" italic="1" color="#C0C0FF" />
+ <itemData name="KmdrFile" defStyleNum="dsKeyword" italic="1" color="#FF0000" />
+ <itemData name="KmdrInput" defStyleNum="dsKeyword" italic="1" color="#FF8000" />
+ <itemData name="KmdrMessage" defStyleNum="dsKeyword" italic="1" color="#800000" />
+ </itemDatas>
+ </highlighting>
+ <general>
+ <comments>
+ <comment name="singleLine" start="@#"/>
+ </comments>
+ <keywords casesensitive="1" weakDeliminator="^%#[]$._{}:-" additionalDeliminator="`."/>
+ </general>
+</language>
diff --git a/kommander/editor/kommanderui.rc b/kommander/editor/kommanderui.rc
new file mode 100644
index 00000000..13679d7a
--- /dev/null
+++ b/kommander/editor/kommanderui.rc
@@ -0,0 +1,5 @@
+<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
+<kpartgui version="1" name="kommander" >
+ <MenuBar noMerge="0" >
+ </MenuBar>
+</kpartgui>
diff --git a/kommander/editor/layout.cpp b/kommander/editor/layout.cpp
new file mode 100644
index 00000000..da4669f1
--- /dev/null
+++ b/kommander/editor/layout.cpp
@@ -0,0 +1,956 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "formwindow.h"
+#include "layout.h"
+#include "widgetdatabase.h"
+#include "widgetfactory.h"
+
+#include <qlayout.h>
+#include <qevent.h>
+#include <qpainter.h>
+#include <qpen.h>
+#include <qbitmap.h>
+#include <qsplitter.h>
+
+bool operator<( const QGuardedPtr<QWidget> &p1, const QGuardedPtr<QWidget> &p2 )
+{
+ return p1.operator->() < p2.operator->();
+}
+
+/*!
+ \class Layout layout.h
+ \brief Baseclass for layouting widgets in the Designer
+
+ Classes derived from this abstract base class are used for layouting
+ operations in the Designer.
+
+*/
+
+/*! \a p specifies the parent of the layoutBase \a lb. The parent
+ might be changed in setup(). If the layoutBase is a
+ container, the parent and the layoutBase are the same. Also they
+ always have to be a widget known to the designer (e.g. in the case
+ of the tabwidget parent and layoutBase are the tabwidget and not the
+ page which actually gets laid out. For actual usage the correct
+ widget is found later by Layout.)
+ */
+
+Layout::Layout( const QWidgetList &wl, QWidget *p, FormWindow *fw, QWidget *lb, bool doSetup, bool splitter )
+ : widgets( wl ), parent( p ), formWindow( fw ), isBreak( !doSetup ), useSplitter( splitter )
+{
+ widgets.setAutoDelete( false );
+ layoutBase = lb;
+ if ( !doSetup && layoutBase )
+ oldGeometry = layoutBase->geometry();
+}
+
+/*! The widget list we got in the constructor might contain too much
+ widgets (like widgets with different parents, already laid out
+ widgets, etc.). Here we set up the list and so the only the "best"
+ widgets get laid out.
+*/
+
+void Layout::setup()
+{
+ startPoint = QPoint( 32767, 32767 );
+ QValueList<QWidgetList> lists;
+ QWidget *lastParent = 0;
+ QWidgetList *lastList = 0;
+ QWidget *w = 0;
+
+ // Go through all widgets of the list we got. As we can only
+ // layout widgets which have the same parent, we first do some
+ // sorting which means create a list for each parent containing
+ // its child here. After that we keep working on the list of
+ // childs which has the most entries.
+ // Widgets which are already laid out are thrown away here too
+ for ( w = widgets.first(); w; w = widgets.next() ) {
+ if ( w->parentWidget() && WidgetFactory::layoutType( w->parentWidget() ) != WidgetFactory::NoLayout )
+ continue;
+ if ( lastParent != w->parentWidget() ) {
+ lastList = 0;
+ lastParent = w->parentWidget();
+ QValueList<QWidgetList>::Iterator it = lists.begin();
+ for ( ; it != lists.end(); ++it ) {
+ if ( ( *it ).first()->parentWidget() == w->parentWidget() )
+ lastList = &( *it );
+ }
+ if ( !lastList ) {
+ QWidgetList l;
+ l.setAutoDelete( false );
+ lists.append( l );
+ lastList = &lists.last();
+ }
+ }
+ lastList->append( w );
+ }
+
+ // So, now find the list with the most entries
+ lastList = 0;
+ QValueList<QWidgetList>::Iterator it = lists.begin();
+ for ( ; it != lists.end(); ++it ) {
+ if ( !lastList || ( *it ).count() > lastList->count() )
+ lastList = &( *it );
+ }
+
+ // If we found no list (because no widget did fit at all) or the
+ // best list has only one entry and we do not layout a container,
+ // we leave here.
+ if ( !lastList || ( lastList->count() < 2 &&
+ ( !layoutBase ||
+ ( !WidgetDatabase::isContainer( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( layoutBase ) ) ) &&
+ layoutBase != formWindow->mainContainer() ) )
+ ) ) {
+ widgets.clear();
+ startPoint = QPoint( 0, 0 );
+ return;
+ }
+
+ // Now we have a new and clean widget list, which makes sense
+ // to layout
+ widgets = *lastList;
+ // Also use the only correct parent later, so store it
+ parent = WidgetFactory::widgetOfContainer( widgets.first()->parentWidget() );
+ // Now calculate the position where the layout-meta-widget should
+ // be placed and connect to widgetDestroyed() signals of the
+ // widgets to get informed if one gets deleted to be able to
+ // handle that and do not crash in this case
+ for ( w = widgets.first(); w; w = widgets.next() ) {
+ connect( w, SIGNAL( destroyed() ),
+ this, SLOT( widgetDestroyed() ) );
+ startPoint = QPoint( QMIN( startPoint.x(), w->x() ),
+ QMIN( startPoint.y(), w->y() ) );
+ geometries.insert( w, QRect( w->pos(), w->size() ) );
+ // Change the Z-order, as saving/loading uses the Z-order for
+ // writing/creating widgets and this has to be the same as in
+ // the layout. Else saving + loading will give different results
+ w->raise();
+ }
+}
+
+void Layout::widgetDestroyed()
+{
+ if ( sender() && sender()->isWidgetType() )
+ widgets.removeRef( (QWidget*)sender() );
+}
+
+bool Layout::prepareLayout( bool &needMove, bool &needReparent )
+{
+ if ( !widgets.count() )
+ return false;
+ for ( QWidget *w = widgets.first(); w; w = widgets.next() )
+ w->raise();
+ needMove = !layoutBase;
+ needReparent = needMove || layoutBase->inherits( "QLayoutWidget" ) || layoutBase->inherits( "QSplitter" );
+ if ( !layoutBase ) {
+ if ( !useSplitter )
+ layoutBase = WidgetFactory::create( WidgetDatabase::idFromClassName( "QLayoutWidget" ),
+ WidgetFactory::containerOfWidget( parent ) );
+ else
+ layoutBase = WidgetFactory::create( WidgetDatabase::idFromClassName( "QSplitter" ),
+ WidgetFactory::containerOfWidget( parent ) );
+ } else {
+ WidgetFactory::deleteLayout( layoutBase );
+ }
+
+ return true;
+}
+
+void Layout::finishLayout( bool needMove, QLayout *layout )
+{
+ if ( needMove )
+ layoutBase->move( startPoint );
+ QRect g( QRect( layoutBase->pos(), layoutBase->size() ) );
+ if ( WidgetFactory::layoutType( layoutBase->parentWidget() ) == WidgetFactory::NoLayout && !isBreak )
+ layoutBase->adjustSize();
+ else if ( isBreak )
+ layoutBase->setGeometry( oldGeometry );
+ oldGeometry = g;
+ layoutBase->show();
+ layout->activate();
+ formWindow->insertWidget( layoutBase );
+ formWindow->selectWidget( layoutBase );
+ QString n = layoutBase->name();
+ if ( n.find( "qt_dead_widget_" ) != -1 ) {
+ n.remove( 0, QString( "qt_dead_widget_" ).length() );
+ layoutBase->setName( n );
+ }
+}
+
+void Layout::undoLayout()
+{
+ if ( !widgets.count() )
+ return;
+ QMap<QGuardedPtr<QWidget>, QRect>::Iterator it = geometries.begin();
+ for ( ; it != geometries.end(); ++it ) {
+ if ( !it.key() )
+ continue;
+ it.key()->reparent( WidgetFactory::containerOfWidget( parent ), 0, ( *it ).topLeft(), it.key()->isVisibleTo( formWindow ) );
+ it.key()->resize( ( *it ).size() );
+ }
+ formWindow->selectWidget( layoutBase, false );
+ WidgetFactory::deleteLayout( layoutBase );
+ if ( parent != layoutBase && !layoutBase->inherits( "QMainWindow" ) ) {
+ layoutBase->hide();
+ QString n = layoutBase->name();
+ n.prepend( "qt_dead_widget_" );
+ layoutBase->setName( n );
+ } else {
+ layoutBase->setGeometry( oldGeometry );
+ }
+ if ( widgets.first() )
+ formWindow->selectWidget( widgets.first() );
+ else
+ formWindow->selectWidget( formWindow );
+}
+
+void Layout::breakLayout()
+{
+ QMap<QWidget*, QRect> rects;
+ if ( !widgets.isEmpty() ) {
+ QWidget *w;
+ for ( w = widgets.first(); w; w = widgets.next() )
+ rects.insert( w, w->geometry() );
+ }
+ WidgetFactory::deleteLayout( layoutBase );
+ bool needReparent = qstrcmp( layoutBase->className(), "QLayoutWidget" ) == 0 ||
+ qstrcmp( layoutBase->className(), "QSplitter" ) == 0 ||
+ ( !WidgetDatabase::isContainer( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( layoutBase ) ) ) &&
+ layoutBase != formWindow->mainContainer() );
+ bool needResize = qstrcmp( layoutBase->className(), "QSplitter" ) == 0;
+ bool add = geometries.isEmpty();
+ for ( QWidget *w = widgets.first(); w; w = widgets.next() ) {
+ if ( needReparent )
+ w->reparent( layoutBase->parentWidget(), 0,
+ layoutBase->pos() + w->pos(), true );
+ if ( needResize ) {
+ QMap<QWidget*, QRect>::Iterator it = rects.find( w );
+ if ( it != rects.end() )
+ w->setGeometry( QRect( layoutBase->pos() + (*it).topLeft(), (*it).size() ) );
+ }
+ if ( add )
+ geometries.insert( w, QRect( w->pos(), w->size() ) );
+ }
+ if ( needReparent ) {
+ layoutBase->hide();
+ parent = layoutBase->parentWidget();
+ QString n = layoutBase->name();
+ n.prepend( "qt_dead_widget_" );
+ layoutBase->setName( n );
+ } else {
+ parent = layoutBase;
+ }
+ if ( widgets.first() && widgets.first()->isVisibleTo( formWindow ) )
+ formWindow->selectWidget( widgets.first() );
+ else
+ formWindow->selectWidget( formWindow );
+}
+
+class HorizontalLayoutList : public QWidgetList
+{
+public:
+ HorizontalLayoutList( const QWidgetList &l )
+ : QWidgetList( l ) {}
+
+ int compareItems( QPtrCollection::Item item1, QPtrCollection::Item item2 ) {
+ QWidget *w1 = (QWidget*)item1;
+ QWidget *w2 = (QWidget*)item2;
+ if ( w1->x() == w2->x() )
+ return 0;
+ if ( w1->x() > w2->x() )
+ return 1;
+ return -1;
+ }
+
+};
+
+HorizontalLayout::HorizontalLayout( const QWidgetList &wl, QWidget *p, FormWindow *fw, QWidget *lb, bool doSetup, bool splitter )
+ : Layout( wl, p, fw, lb, doSetup, splitter )
+{
+ if ( doSetup )
+ setup();
+}
+
+void HorizontalLayout::setup()
+{
+ HorizontalLayoutList l( widgets );
+ l.sort();
+ widgets = l;
+ Layout::setup();
+}
+
+void HorizontalLayout::doLayout()
+{
+ bool needMove, needReparent;
+ if ( !prepareLayout( needMove, needReparent ) )
+ return;
+
+ QHBoxLayout *layout = (QHBoxLayout*)WidgetFactory::createLayout( layoutBase, 0, WidgetFactory::HBox );
+
+ for ( QWidget *w = widgets.first(); w; w = widgets.next() ) {
+ if ( needReparent && w->parent() != layoutBase )
+ w->reparent( layoutBase, 0, QPoint( 0, 0 ), false );
+ if ( !useSplitter ) {
+ if ( qstrcmp( w->className(), "Spacer" ) == 0 )
+ layout->addWidget( w, 0, ( (Spacer*)w )->alignment() );
+ else
+ layout->addWidget( w );
+ if ( w->inherits( "QLayoutWidget" ) )
+ ( (QLayoutWidget*)w )->updateSizePolicy();
+ }
+ w->show();
+ }
+
+ if ( layoutBase->inherits( "QSplitter" ) )
+ ( (QSplitter*)layoutBase )->setOrientation( Qt::Horizontal );
+
+ finishLayout( needMove, layout );
+}
+
+
+
+
+class VerticalLayoutList : public QWidgetList
+{
+public:
+ VerticalLayoutList( const QWidgetList &l )
+ : QWidgetList( l ) {}
+
+ int compareItems( QPtrCollection::Item item1, QPtrCollection::Item item2 ) {
+ QWidget *w1 = (QWidget*)item1;
+ QWidget *w2 = (QWidget*)item2;
+ if ( w1->y() == w2->y() )
+ return 0;
+ if ( w1->y() > w2->y() )
+ return 1;
+ return -1;
+ }
+
+};
+
+VerticalLayout::VerticalLayout( const QWidgetList &wl, QWidget *p, FormWindow *fw, QWidget *lb, bool doSetup, bool splitter )
+ : Layout( wl, p, fw, lb, doSetup, splitter )
+{
+ if ( doSetup )
+ setup();
+}
+
+void VerticalLayout::setup()
+{
+ VerticalLayoutList l( widgets );
+ l.sort();
+ widgets = l;
+ Layout::setup();
+}
+
+void VerticalLayout::doLayout()
+{
+ bool needMove, needReparent;
+ if ( !prepareLayout( needMove, needReparent ) )
+ return;
+
+ QVBoxLayout *layout = (QVBoxLayout*)WidgetFactory::createLayout( layoutBase, 0, WidgetFactory::VBox );
+
+ for ( QWidget *w = widgets.first(); w; w = widgets.next() ) {
+ if ( needReparent && w->parent() != layoutBase )
+ w->reparent( layoutBase, 0, QPoint( 0, 0 ), false );
+ if ( !useSplitter ) {
+ if ( qstrcmp( w->className(), "Spacer" ) == 0 )
+ layout->addWidget( w, 0, ( (Spacer*)w )->alignment() );
+ else
+ layout->addWidget( w );
+ if ( w->inherits( "QLayoutWidget" ) )
+ ( (QLayoutWidget*)w )->updateSizePolicy();
+ }
+ w->show();
+ }
+
+ if ( layoutBase->inherits( "QSplitter" ) )
+ ( (QSplitter*)layoutBase )->setOrientation( Qt::Vertical );
+
+ finishLayout( needMove, layout );
+}
+
+
+
+
+
+class Grid
+{
+public:
+ Grid( int rows, int cols );
+ ~Grid();
+
+ QWidget* cell( int row, int col ) const { return cells[ row * ncols + col]; }
+ void setCell( int row, int col, QWidget* w ) { cells[ row*ncols + col] = w; }
+ int numRows() const { return nrows; }
+ int numCols() const { return ncols; }
+
+ void simplify();
+ bool locateWidget( QWidget* w, int& row, int& col, int& rowspan, int& colspan );
+
+private:
+ void merge();
+ int countRow( int r, int c ) const;
+ int countCol( int r, int c ) const;
+ void setRow( int r, int c, QWidget* w, int count );
+ void setCol( int r, int c, QWidget* w, int count );
+ bool isWidgetStartCol( int c ) const;
+ bool isWidgetEndCol( int c ) const;
+ bool isWidgetStartRow( int r ) const;
+ bool isWidgetEndRow( int r ) const;
+ bool isWidgetTopLeft( int r, int c ) const;
+ void extendLeft();
+ void extendRight();
+ void extendUp();
+ void extendDown();
+ QWidget** cells;
+ bool* cols;
+ bool* rows;
+ int nrows, ncols;
+
+};
+
+Grid::Grid( int r, int c )
+ : nrows( r ), ncols( c )
+{
+ cells = new QWidget*[ r * c ];
+ memset( cells, 0, sizeof( cells ) * r * c );
+ rows = new bool[ r ];
+ cols = new bool[ c ];
+
+}
+
+Grid::~Grid()
+{
+ delete [] cells;
+ delete [] cols;
+ delete [] rows;
+}
+
+int Grid::countRow( int r, int c ) const
+{
+ QWidget* w = cell( r, c );
+ int i = c + 1;
+ while ( i < ncols && cell( r, i ) == w )
+ i++;
+ return i - c;
+}
+
+int Grid::countCol( int r, int c ) const
+{
+ QWidget* w = cell( r, c );
+ int i = r + 1;
+ while ( i < nrows && cell( i, c ) == w )
+ i++;
+ return i - r;
+}
+
+void Grid::setCol( int r, int c, QWidget* w, int count )
+{
+ for (int i = 0; i < count; i++ )
+ setCell( r + i, c, w );
+}
+
+void Grid::setRow( int r, int c, QWidget* w, int count )
+{
+ for (int i = 0; i < count; i++ )
+ setCell( r, c + i, w );
+}
+
+bool Grid::isWidgetStartCol( int c ) const
+{
+ int r;
+ for ( r = 0; r < nrows; r++ ) {
+ if ( cell( r, c ) && ( (c==0) || (cell( r, c) != cell( r, c-1) )) ) {
+ return true;
+ }
+ }
+ return false;
+}
+
+bool Grid::isWidgetEndCol( int c ) const
+{
+ int r;
+ for ( r = 0; r < nrows; r++ ) {
+ if ( cell( r, c ) && ((c == ncols-1) || (cell( r, c) != cell( r, c+1) )) )
+ return true;
+ }
+ return false;
+}
+
+bool Grid::isWidgetStartRow( int r ) const
+{
+ int c;
+ for ( c = 0; c < ncols; c++ ) {
+ if ( cell( r, c ) && ( (r==0) || (cell( r, c) != cell( r-1, c) )) )
+ return true;
+ }
+ return false;
+}
+
+bool Grid::isWidgetEndRow( int r ) const
+{
+ int c;
+ for ( c = 0; c < ncols; c++ ) {
+ if ( cell( r, c ) && ((r == nrows-1) || (cell( r, c) != cell( r+1, c) )) )
+ return true;
+ }
+ return false;
+}
+
+
+bool Grid::isWidgetTopLeft( int r, int c ) const
+{
+ QWidget* w = cell( r, c );
+ if ( !w )
+ return false;
+ return ( !r || cell( r-1, c) != w ) && (!c || cell( r, c-1) != w);
+}
+
+void Grid::extendLeft()
+{
+ int r,c,i;
+ for ( c = 1; c < ncols; c++ ) {
+ for ( r = 0; r < nrows; r++ ) {
+ QWidget* w = cell( r, c );
+ if ( !w )
+ continue;
+ int cc = countCol( r, c);
+ int stretch = 0;
+ for ( i = c-1; i >= 0; i-- ) {
+ if ( cell( r, i ) )
+ break;
+ if ( countCol( r, i ) < cc )
+ break;
+ if ( isWidgetEndCol( i ) )
+ break;
+ if ( isWidgetStartCol( i ) ) {
+ stretch = c - i;
+ break;
+ }
+ }
+ if ( stretch ) {
+ for ( i = 0; i < stretch; i++ )
+ setCol( r, c-i-1, w, cc );
+ }
+ }
+ }
+}
+
+
+void Grid::extendRight()
+{
+ int r,c,i;
+ for ( c = ncols - 2; c >= 0; c-- ) {
+ for ( r = 0; r < nrows; r++ ) {
+ QWidget* w = cell( r, c );
+ if ( !w )
+ continue;
+ int cc = countCol( r, c);
+ int stretch = 0;
+ for ( i = c+1; i < ncols; i++ ) {
+ if ( cell( r, i ) )
+ break;
+ if ( countCol( r, i ) < cc )
+ break;
+ if ( isWidgetStartCol( i ) )
+ break;
+ if ( isWidgetEndCol( i ) ) {
+ stretch = i - c;
+ break;
+ }
+ }
+ if ( stretch ) {
+ for ( i = 0; i < stretch; i++ )
+ setCol( r, c+i+1, w, cc );
+ }
+ }
+ }
+
+}
+
+void Grid::extendUp()
+{
+ int r,c,i;
+ for ( r = 1; r < nrows; r++ ) {
+ for ( c = 0; c < ncols; c++ ) {
+ QWidget* w = cell( r, c );
+ if ( !w )
+ continue;
+ int cr = countRow( r, c);
+ int stretch = 0;
+ for ( i = r-1; i >= 0; i-- ) {
+ if ( cell( i, c ) )
+ break;
+ if ( countRow( i, c ) < cr )
+ break;
+ if ( isWidgetEndRow( i ) )
+ break;
+ if ( isWidgetStartRow( i ) ) {
+ stretch = r - i;
+ break;
+ }
+ }
+ if ( stretch ) {
+ for ( i = 0; i < stretch; i++ )
+ setRow( r-i-1, c, w, cr );
+ }
+ }
+ }
+}
+
+void Grid::extendDown()
+{
+ int r,c,i;
+ for ( r = nrows - 2; r >= 0; r-- ) {
+ for ( c = 0; c < ncols; c++ ) {
+ QWidget* w = cell( r, c );
+ if ( !w )
+ continue;
+ int cr = countRow( r, c);
+ int stretch = 0;
+ for ( i = r+1; i < nrows; i++ ) {
+ if ( cell( i, c ) )
+ break;
+ if ( countRow( i, c ) < cr )
+ break;
+ if ( isWidgetStartRow( i ) )
+ break;
+ if ( isWidgetEndRow( i ) ) {
+ stretch = i - r;
+ break;
+ }
+ }
+ if ( stretch ) {
+ for ( i = 0; i < stretch; i++ )
+ setRow( r+i+1, c, w, cr );
+ }
+ }
+ }
+
+}
+
+void Grid::simplify()
+{
+ extendLeft();
+ extendRight();
+ extendUp();
+ extendDown();
+ merge();
+}
+
+
+void Grid::merge()
+{
+ int r,c;
+ for ( c = 0; c < ncols; c++ )
+ cols[c] = false;
+
+ for ( r = 0; r < nrows; r++ )
+ rows[r] = false;
+
+ for ( c = 0; c < ncols; c++ ) {
+ for ( r = 0; r < nrows; r++ ) {
+ if ( isWidgetTopLeft( r, c ) ) {
+ rows[r] = true;
+ cols[c] = true;
+ }
+ }
+ }
+}
+
+bool Grid::locateWidget( QWidget* w, int& row, int& col, int& rowspan, int & colspan )
+{
+ int r,c, r2, c2;
+ for ( c = 0; c < ncols; c++ ) {
+ for ( r = 0; r < nrows; r++ ) {
+ if ( cell( r, c ) == w ) {
+ row = 0;
+ for ( r2 = 1; r2 <= r; r2++ ) {
+ if ( rows[ r2-1 ] )
+ row++;
+ }
+ col = 0;
+ for ( c2 = 1; c2 <= c; c2++ ) {
+ if ( cols[ c2-1 ] )
+ col++;
+ }
+ rowspan = 0;
+ for ( r2 = r ; r2 < nrows && cell( r2, c) == w; r2++ ) {
+ if ( rows[ r2 ] )
+ rowspan++;
+ }
+ colspan = 0;
+ for ( c2 = c; c2 < ncols && cell( r, c2) == w; c2++ ) {
+ if ( cols[ c2] )
+ colspan++;
+ }
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+
+
+
+GridLayout::GridLayout( const QWidgetList &wl, QWidget *p, FormWindow *fw, QWidget *lb, const QSize &res, bool doSetup )
+ : Layout( wl, p, fw, lb, doSetup ), resolution( res )
+{
+ grid = 0;
+ if ( doSetup )
+ setup();
+}
+
+GridLayout::~GridLayout()
+{
+ delete grid;
+}
+
+void GridLayout::doLayout()
+{
+ bool needMove, needReparent;
+ if ( !prepareLayout( needMove, needReparent ) )
+ return;
+
+ QDesignerGridLayout *layout = (QDesignerGridLayout*)WidgetFactory::createLayout( layoutBase, 0, WidgetFactory::Grid );
+
+ if ( !grid )
+ buildGrid();
+
+ QWidget* w;
+ int r, c, rs, cs;
+ for ( w = widgets.first(); w; w = widgets.next() ) {
+ if ( grid->locateWidget( w, r, c, rs, cs) ) {
+ if ( needReparent && w->parent() != layoutBase )
+ w->reparent( layoutBase, 0, QPoint( 0, 0 ), false );
+ if ( rs * cs == 1 ) {
+ layout->addWidget( w, r, c, w->inherits( "Spacer" ) ? ( (Spacer*)w )->alignment() : 0 );
+ } else {
+ layout->addMultiCellWidget( w, r, r+rs-1, c, c+cs-1, w->inherits( "Spacer" ) ? ( (Spacer*)w )->alignment() : 0 );
+ }
+ if ( w->inherits( "QLayoutWidget" ) )
+ ( (QLayoutWidget*)w )->updateSizePolicy();
+ w->show();
+ } else {
+ qWarning("ooops, widget '%s' does not fit in layout", w->name() );
+ }
+ }
+ finishLayout( needMove, layout );
+}
+
+void GridLayout::setup()
+{
+ Layout::setup();
+ buildGrid();
+}
+
+void GridLayout::buildGrid()
+{
+ QWidget* w;
+ QRect br;
+ for ( w = widgets.first(); w; w = widgets.next() )
+ br = br.unite( w->geometry() );
+
+ delete grid;
+ grid = new Grid( br.height() / resolution.height() + 1,
+ br.width() / resolution.width() + 1 );
+
+ int r,c;
+ for ( r = 0; r < grid->numRows(); r++ ) {
+ for ( c = 0; c < grid->numCols(); c++ ) {
+ QPoint p( br.left() + c * resolution.width(),
+ br.top() + r* resolution.height() );
+ QRect cr( p, resolution );
+ for ( w = widgets.first(); w; w = widgets.next() ) {
+ // check that the overlap is significant
+ QRect intersect = cr.intersect( w->geometry() );
+ if ( intersect.size().width() > resolution.width()/2 &&
+ intersect.size().height() > resolution.height()/2 ) {
+ grid->setCell( r, c, w );
+ }
+ }
+ }
+ }
+ grid->simplify();
+}
+
+
+
+
+
+
+
+Spacer::Spacer( QWidget *parent, const char *name )
+ : QWidget( parent, name, WMouseNoMask ),
+ orient( Vertical ), interactive(true), sh( QSize(20,20) )
+{
+ setSizeType( Expanding );
+ setAutoMask( true );
+}
+
+void Spacer::paintEvent( QPaintEvent * )
+{
+ QPainter p( this );
+ p.setPen( Qt::blue );
+
+ if ( orient == Horizontal ) {
+ const int dist = 3;
+ const int amplitude = QMIN( 3, height() / 3 );
+ const int base = height() / 2;
+ int i = 0;
+ p.setPen( white );
+ for ( i = 0; i < width() / 3 +2; ++i )
+ p.drawLine( i * dist, base - amplitude, i * dist + dist / 2, base + amplitude );
+ p.setPen( blue );
+ for ( i = 0; i < width() / 3 +2; ++i )
+ p.drawLine( i * dist + dist / 2, base + amplitude, i * dist + dist, base - amplitude );
+ p.drawLine( 0, 0, 0, height() );
+ p.drawLine( width() - 1, 0, width() - 1, height());
+ } else {
+ const int dist = 3;
+ const int amplitude = QMIN( 3, width() / 3 );
+ const int base = width() / 2;
+ int i = 0;
+ p.setPen( white );
+ for ( i = 0; i < height() / 3 +2; ++i )
+ p.drawLine( base - amplitude, i * dist, base + amplitude,i * dist + dist / 2 );
+ p.setPen( blue );
+ for ( i = 0; i < height() / 3 +2; ++i )
+ p.drawLine( base + amplitude, i * dist + dist / 2, base - amplitude, i * dist + dist );
+ p.drawLine( 0, 0, width(), 0 );
+ p.drawLine( 0, height() - 1, width(), height() - 1 );
+ }
+}
+
+void Spacer::resizeEvent( QResizeEvent* e)
+{
+ QWidget::resizeEvent( e );
+ if ( !parentWidget() || WidgetFactory::layoutType( parentWidget() ) == WidgetFactory::NoLayout )
+ sh = size();
+}
+
+void Spacer::updateMask()
+{
+ QRegion r( rect() );
+ if ( orient == Horizontal ) {
+ const int amplitude = QMIN( 3, height() / 3 );
+ const int base = height() / 2;
+ r = r.subtract( QRect(1, 0, width() - 2, base - amplitude ) );
+ r = r.subtract( QRect(1, base + amplitude, width() - 2, height() - base - amplitude ) );
+ } else {
+ const int amplitude = QMIN( 3, width() / 3 );
+ const int base = width() / 2;
+ r = r.subtract( QRect(0, 1, base - amplitude, height() - 2 ) );
+ r = r.subtract( QRect( base + amplitude, 1, width() - base - amplitude, height() - 2 ) );
+ }
+ setMask( r );
+}
+
+void Spacer::setSizeType( SizeType t )
+{
+ QSizePolicy sizeP;
+ if ( orient == Vertical )
+ sizeP = QSizePolicy( QSizePolicy::Minimum, (QSizePolicy::SizeType)t );
+ else
+ sizeP = QSizePolicy( (QSizePolicy::SizeType)t, QSizePolicy::Minimum );
+ setSizePolicy( sizeP );
+}
+
+
+Spacer::SizeType Spacer::sizeType() const
+{
+ if ( orient == Vertical )
+ return (SizeType)sizePolicy().verData();
+ return (SizeType)sizePolicy().horData();
+}
+
+int Spacer::alignment() const
+{
+ if ( orient == Vertical )
+ return AlignHCenter;
+ return AlignVCenter;
+}
+
+QSize Spacer::minimumSize() const
+{
+ return QSize( 20, 20 );
+}
+
+QSize Spacer::sizeHint() const
+{
+ QSize s = sh.expandedTo( QSize(0,0) );
+ if ( sizeType() == Expanding )
+ if ( orient == Horizontal )
+ s.rheight() = 0;
+ else
+ s.rwidth() = 0;
+ return s;
+}
+
+
+void Spacer::setSizeHint( const QSize &s )
+{
+ sh = s;
+ if ( !parentWidget() || WidgetFactory::layoutType( parentWidget() ) == WidgetFactory::NoLayout )
+ resize( sizeHint() );
+ updateGeometry();
+}
+
+Qt::Orientation Spacer::orientation() const
+{
+ return orient;
+}
+
+void Spacer::setOrientation( Qt::Orientation o )
+{
+ if ( orient == o )
+ return;
+
+ SizeType st = sizeType();
+ orient = o;
+ setSizeType( st );
+ if ( interactive ) {
+ sh = QSize( sh.height(), sh.width() );
+ if (!parentWidget() || WidgetFactory::layoutType( parentWidget() ) == WidgetFactory::NoLayout )
+ resize( height(), width() );
+ }
+ updateMask();
+ update();
+ updateGeometry();
+}
+
+
+void QDesignerGridLayout::addWidget( QWidget *w, int row, int col, int align_ )
+{
+ items.insert( w, Item(row, col, 1, 1) );
+ QGridLayout::addWidget( w, row, col, align_ );
+}
+
+void QDesignerGridLayout::addMultiCellWidget( QWidget *w, int fromRow, int toRow,
+ int fromCol, int toCol, int align_ )
+{
+ items.insert( w, Item(fromRow, fromCol, toRow - fromRow + 1, toCol - fromCol +1) );
+ QGridLayout::addMultiCellWidget( w, fromRow, toRow, fromCol, toCol, align_ );
+}
+#include "layout.moc"
diff --git a/kommander/editor/layout.h b/kommander/editor/layout.h
new file mode 100644
index 00000000..06dce7ac
--- /dev/null
+++ b/kommander/editor/layout.h
@@ -0,0 +1,180 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef LAYOUT_H
+#define LAYOUT_H
+
+#include <qwidget.h>
+#include <qmap.h>
+#include <qguardedptr.h>
+#include <qobject.h>
+#include <qlayout.h>
+#include <qwidgetlist.h>
+
+class FormWindow;
+class QPaintEvent;
+
+class Layout : public QObject
+{
+ Q_OBJECT
+
+public:
+ Layout( const QWidgetList &wl, QWidget *p, FormWindow *fw, QWidget *lb, bool doSetup = TRUE, bool splitter = FALSE );
+ virtual ~Layout() {}
+
+ virtual void doLayout() = 0;
+ virtual void undoLayout();
+ virtual void breakLayout();
+ virtual bool prepareLayout( bool &needMove, bool &needReparent );
+ virtual void finishLayout( bool needMove, QLayout *layout );
+
+protected:
+ QWidgetList widgets;
+ QWidget *parent;
+ QPoint startPoint;
+ QMap<QGuardedPtr<QWidget>, QRect> geometries;
+ QWidget *layoutBase;
+ FormWindow *formWindow;
+ QRect oldGeometry;
+ bool isBreak;
+ bool useSplitter;
+
+protected:
+ virtual void setup();
+
+protected slots:
+ void widgetDestroyed();
+
+};
+
+class HorizontalLayout : public Layout
+{
+public:
+ HorizontalLayout( const QWidgetList &wl, QWidget *p, FormWindow *fw, QWidget *lb, bool doSetup = TRUE, bool splitter = FALSE );
+
+ void doLayout();
+
+protected:
+ void setup();
+
+};
+
+class VerticalLayout : public Layout
+{
+public:
+ VerticalLayout( const QWidgetList &wl, QWidget *p, FormWindow *fw, QWidget *lb, bool doSetup = TRUE, bool splitter = FALSE );
+
+ void doLayout();
+
+protected:
+ void setup();
+
+};
+
+class Grid;
+
+class GridLayout : public Layout
+{
+public:
+ GridLayout( const QWidgetList &wl, QWidget *p, FormWindow *fw, QWidget *lb, const QSize &res, bool doSetup = TRUE );
+ ~GridLayout();
+
+ void doLayout();
+
+protected:
+ void setup();
+
+protected:
+ void buildGrid();
+ QSize resolution;
+ Grid* grid;
+
+};
+
+class Spacer : public QWidget
+{
+ Q_OBJECT
+
+ Q_OVERRIDE( QCString name )
+ Q_PROPERTY( Orientation orientation READ orientation WRITE setOrientation )
+ Q_ENUMS( SizeType )
+ Q_PROPERTY( SizeType sizeType READ sizeType WRITE setSizeType )
+ Q_PROPERTY( QSize sizeHint READ sizeHint WRITE setSizeHint DESIGNABLE true STORED true )
+ Q_OVERRIDE( QRect geometry DESIGNABLE false )
+
+private:
+ enum { HSize = 6, HMask = 0x3f, VMask = HMask << HSize,
+ MayGrow = 1, ExpMask = 2, MayShrink = 4 };
+
+public:
+ enum SizeType { Fixed = 0,
+ Minimum = MayGrow,
+ Maximum = MayShrink,
+ Preferred = MayGrow|MayShrink ,
+ MinimumExpanding = Minimum|ExpMask,
+ Expanding = MinimumExpanding|MayShrink };
+
+ Spacer( QWidget *parent, const char *name );
+
+ QSize minimumSize() const;
+ QSize sizeHint() const;
+ void setSizeType( SizeType t );
+ SizeType sizeType() const;
+ int alignment() const;
+ Orientation orientation() const;
+ void setOrientation( Orientation o );
+ void setInteraciveMode( bool b ) { interactive = b; };
+ void setSizeHint( const QSize &s );
+
+protected:
+ void paintEvent( QPaintEvent *e );
+ void resizeEvent( QResizeEvent* e );
+ void updateMask();
+ Qt::Orientation orient;
+ bool interactive;
+ QSize sh;
+};
+
+class QDesignerGridLayout : public QGridLayout
+{
+ Q_OBJECT
+public:
+ QDesignerGridLayout( QWidget *parent ) : QGridLayout( parent ){};
+ QDesignerGridLayout( QLayout *parentLayout ) : QGridLayout( parentLayout ){};
+
+ void addWidget( QWidget *, int row, int col, int align = 0 );
+ void addMultiCellWidget( QWidget *, int fromRow, int toRow,
+ int fromCol, int toCol, int align = 0 );
+
+ struct Item
+ {
+ Item(): row(0), column(0),rowspan(1),colspan(1){}
+ Item( int r, int c, int rs, int cs): row(r), column(c), rowspan(rs), colspan(cs){}
+ int row;
+ int column;
+ int rowspan;
+ int colspan;
+ };
+
+ QMap<QWidget*, Item> items;
+};
+
+
+#endif
diff --git a/kommander/editor/listboxeditor.ui b/kommander/editor/listboxeditor.ui
new file mode 100644
index 00000000..2b462987
--- /dev/null
+++ b/kommander/editor/listboxeditor.ui
@@ -0,0 +1,455 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>ListBoxEditorBase</class>
+<comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>ListBoxEditorBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>461</width>
+ <height>196</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Edit Listbox</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Edit Listbox&lt;/b&gt;&lt;p&gt;Add, edit or delete items in the listbox.&lt;/p&gt;&lt;p&gt;Click the &lt;b&gt;New Item&lt;/b&gt;-button to create a new listbox entry, then enter text and choose a pixmap.&lt;/p&gt;&lt;p&gt;Select an item from the list and click the &lt;b&gt;Delete Item&lt;/b&gt;-button to remove the item from the list.&lt;/p&gt;</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="5" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>helpButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and apply all the changes.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonApply</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Apply</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Apply all changes.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and discard any changes.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QListBox" row="0" column="0" rowspan="5" colspan="1">
+ <property name="name">
+ <cstring>preview</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Delete Item</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The list of items.</string>
+ </property>
+ </widget>
+ <widget class="QGroupBox" row="0" column="2" rowspan="5" colspan="1">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>&amp;Item Properties</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>Label2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Pixmap:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>itemChoosePixmap</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>itemPixmap</cstring>
+ </property>
+ <property name="text">
+ <string>Label4</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="2">
+ <property name="name">
+ <cstring>itemDeletePixmap</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Delete Pixmap</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Delete the selected item's pixmap.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="3">
+ <property name="name">
+ <cstring>itemChoosePixmap</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Select a Pixmap</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Choose a pixmap file for the selected item.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>Label1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Text:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>itemText</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>itemText</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Change text</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Change the selected item's text.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>itemNew</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;New Item</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Add an item</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Add a new item.&lt;/b&gt;&lt;p&gt;New items are appended to the list.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>itemDelete</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Delete Item</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Delete Item</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Delete the selected item</string>
+ </property>
+ </widget>
+ <spacer row="2" column="1">
+ <property name="name">
+ <cstring>Vertical Spacing1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton" row="3" column="1">
+ <property name="name">
+ <cstring>itemUp</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Move up</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Moves the selected item up.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="4" column="1">
+ <property name="name">
+ <cstring>itemDown</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image2</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Move down</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Move the selected item down.</string>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="409">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022630543251d2e253d856405bffcbc54105b19c856360003103711c6b53006ab440370316528264b4c198450c5808a94d1ed00aac214832b43124b544ec414d34b4c4c441103f11341120831309758313d0cf3b0840b7258d55a73010092c14eca</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="1040">789c5dcf4d73a2401006e0bbbf82726ed61609ca0c4c6ded0125dfd1985baab6f600338c280a46fc08a6f6bf2f3ddd26abc0619eb7677a9aab9ef3361d3bbdab4ebd4db673e5a83cd9383dbd5bad9adf7f7e7d76ba9e70dacfe78ed7fdd1e9ba8e72265599c17adaae99773df033cb9818225f2cc38132027887f4af8d01ee817dc935720d1c7827d648c1910f969273cd8123e4a93a21d2d95ba0ef098d631864409b6f2c13c195063e210389d55720ef0b8dd56764e021c7c8905acd2c93b66aa71a224389fffb0e14fd4062f51119d290115252ab2391c6585ab653a5f6de033294f8fbf74849175544eacc80c120e478b644267451434c90a9659a78d8aa2066585d00c33425ae80d25702b92352756ea91475ce90ba8f4c80299cb5177d58ea8c5a6d819a67b4595b66865a29602632628e3406b9011a73a26b1f96a40c575f19536dc7d959c6543e5f1466f95fd646aba22cabf5fb57c636f9a24ddaa75e52c6b6f90ea3aada2f313b7ccc1b1b1da3e128a67df09aaa1addb82963dfb3b8b7cdf18e9dcfe70e8b687f91b1fba25acf2eb2a289460f17d9a28c4c7c9e1d8ae8f1e9227b1e4feafa859d9f8de378fa8afbfefeecfc030f08f1a3</data>
+ </image>
+ <image name="image2">
+ <data format="XPM.GZ" length="1085">789c5dd0cd6ee2301000e03b4f11911b5ad1189290a8da0324a5e90f29941e2aadf6e0d84ea10d1020849ad5befb7a3cceaa29e2e06f663c33ce55cf7a9dcfacde55e758d16acd2cb6a207abc74f9b8dfcf5fbe79f4e97f896fabb8145ba3f3addbec5ac74b715704ed5d9769c01cb73e0423368f80224c190e53e70091c389e83d98366e83942679f0c43cc7e0087c4f3307b63c8b1d559337459c6810f48df137aab49436c750f748917320f78418e4cf65993fa04b33572c4313b067a039f333de80e39e238680ff4d5d2581c69d2c0c3ad8e0db1f30619127cd1dcd00c7a4452824c80a321359d73cd8c129c1b1b0acc726030a414b31299f9989d1952a4d0ccc23073819f861c973c2133d3b904aacf6ceeda9a8c12bc5b219929de21f9005900a99bf9f8e9a8a159728a5477f5d77847367719305373b1788b14668d4c9337d95b2437ef5d03b9c84df10a28fc866fc05c9522fbf0b369c6b8d0c7ffb1fc6db57effb0bfc68acd7657ee0fedba63599dea73d18a7dca525ec6ed3aa16293a81d2bf232beb1bfc578d58a416731ad641da95381b1e3f496ca939432c9f3bb7b8c450f8fb39994b18c93493a36fda2a7b9aa8ae3e4b278b69b192aa822499dc2d6cddc68b94ff697f46c7fdd255ad6f5e2dbdbfac7c3cbd8ecf7f7baf30f538f0154</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>itemNew</sender>
+ <signal>clicked()</signal>
+ <receiver>ListBoxEditorBase</receiver>
+ <slot>insertNewItem()</slot>
+ </connection>
+ <connection>
+ <sender>itemDelete</sender>
+ <signal>clicked()</signal>
+ <receiver>ListBoxEditorBase</receiver>
+ <slot>deleteCurrentItem()</slot>
+ </connection>
+ <connection>
+ <sender>itemText</sender>
+ <signal>textChanged( const QString &amp; )</signal>
+ <receiver>ListBoxEditorBase</receiver>
+ <slot>currentTextChanged(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>ListBoxEditorBase</receiver>
+ <slot>okClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonApply</sender>
+ <signal>clicked()</signal>
+ <receiver>ListBoxEditorBase</receiver>
+ <slot>applyClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>ListBoxEditorBase</receiver>
+ <slot>cancelClicked()</slot>
+ </connection>
+ <connection>
+ <sender>itemChoosePixmap</sender>
+ <signal>clicked()</signal>
+ <receiver>ListBoxEditorBase</receiver>
+ <slot>choosePixmap()</slot>
+ </connection>
+ <connection>
+ <sender>itemDeletePixmap</sender>
+ <signal>clicked()</signal>
+ <receiver>ListBoxEditorBase</receiver>
+ <slot>deletePixmap()</slot>
+ </connection>
+ <connection>
+ <sender>itemUp</sender>
+ <signal>clicked()</signal>
+ <receiver>ListBoxEditorBase</receiver>
+ <slot>moveItemUp()</slot>
+ </connection>
+ <connection>
+ <sender>itemDown</sender>
+ <signal>clicked()</signal>
+ <receiver>ListBoxEditorBase</receiver>
+ <slot>moveItemDown()</slot>
+ </connection>
+ <connection>
+ <sender>preview</sender>
+ <signal>selectionChanged(QListBoxItem*)</signal>
+ <receiver>ListBoxEditorBase</receiver>
+ <slot>currentItemChanged(QListBoxItem*)</slot>
+ </connection>
+ <connection>
+ <sender>preview</sender>
+ <signal>currentChanged( QListBoxItem * )</signal>
+ <receiver>ListBoxEditorBase</receiver>
+ <slot>currentItemChanged(QListBoxItem*)</slot>
+ </connection>
+ <slot access="protected" language="C++" returnType="void">init()</slot>
+ <slot access="protected" language="C++" returnType="void">destroy()</slot>
+ <slot access="protected" language="C++" returnType="void">insertNewItem()</slot>
+ <slot access="protected" language="C++" returnType="void">deleteCurrentItem()</slot>
+ <slot access="protected" language="C++" returnType="void">currentItemChanged( QListBoxItem * )</slot>
+ <slot access="protected" language="C++" returnType="void">currentTextChanged( const QString &amp; )</slot>
+ <slot access="protected" language="C++" returnType="void">okClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">cancelClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">applyClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">choosePixmap()</slot>
+ <slot access="protected" language="C++" returnType="void">deletePixmap()</slot>
+ <slot access="protected" language="C++" returnType="void">moveItemUp()</slot>
+ <slot access="protected" language="C++" returnType="void">moveItemDown()</slot>
+</connections>
+<tabstops>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+ <tabstop>preview</tabstop>
+ <tabstop>itemNew</tabstop>
+ <tabstop>itemDelete</tabstop>
+ <tabstop>itemUp</tabstop>
+ <tabstop>itemDown</tabstop>
+ <tabstop>itemText</tabstop>
+ <tabstop>itemDeletePixmap</tabstop>
+ <tabstop>itemChoosePixmap</tabstop>
+ <tabstop>helpButton</tabstop>
+ <tabstop>buttonApply</tabstop>
+</tabstops>
+</UI>
diff --git a/kommander/editor/listboxeditorimpl.cpp b/kommander/editor/listboxeditorimpl.cpp
new file mode 100644
index 00000000..5a2aac9d
--- /dev/null
+++ b/kommander/editor/listboxeditorimpl.cpp
@@ -0,0 +1,216 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "listboxeditorimpl.h"
+#include "formwindow.h"
+#include "mainwindow.h"
+#include "pixmapchooser.h"
+#include "command.h"
+
+#include <qlineedit.h>
+#include <qlabel.h>
+#include <qlistbox.h>
+#include <qpushbutton.h>
+#include <qcheckbox.h>
+
+#include <klocale.h>
+
+ListBoxEditor::ListBoxEditor( QWidget *parent, QWidget *editWidget, FormWindow *fw )
+ : ListBoxEditorBase( parent, 0, true ), formwindow( fw )
+{
+ connect( helpButton, SIGNAL( clicked() ), MainWindow::self, SLOT( showDialogHelp() ) );
+ listbox = (QListBox*)editWidget;
+
+ itemText->setText( "" );
+ itemText->setEnabled( false );
+ itemPixmap->setText( "" );
+ itemChoosePixmap->setEnabled( false );
+ itemDeletePixmap->setEnabled( false );
+
+ QListBoxItem *i = 0;
+ for ( i = listbox->firstItem(); i; i = i->next() ) {
+ if ( i->pixmap() )
+ (void)new QListBoxPixmap( preview, *i->pixmap(), i->text() );
+ else
+ (void)new QListBoxText( preview, i->text() );
+ }
+
+ if ( preview->firstItem() )
+ preview->setCurrentItem( preview->firstItem() );
+}
+
+void ListBoxEditor::insertNewItem()
+{
+ QListBoxItem *i = new QListBoxText( preview, i18n("New Item") );
+ preview->setCurrentItem( i );
+ preview->setSelected( i, true );
+}
+
+void ListBoxEditor::deleteCurrentItem()
+{
+ delete preview->item( preview->currentItem() );
+ if ( preview->currentItem() != -1 )
+ preview->setSelected( preview->currentItem(), true );
+}
+
+void ListBoxEditor::currentItemChanged( QListBoxItem *i )
+{
+ itemText->blockSignals( true );
+ itemText->setText( "" );
+ itemPixmap->setText( "" );
+ itemText->blockSignals( false );
+
+ if ( !i ) {
+ itemText->setEnabled( false );
+ itemChoosePixmap->setEnabled( false );
+ itemDeletePixmap->setEnabled( false );
+ return;
+ }
+
+ itemText->blockSignals( true );
+ itemText->setEnabled( true );
+ itemChoosePixmap->setEnabled( true );
+ itemDeletePixmap->setEnabled( i->pixmap() && !i->pixmap()->isNull() );
+
+ itemText->setText( i->text() );
+ if ( i->pixmap() )
+ itemPixmap->setPixmap( *i->pixmap() );
+ itemText->blockSignals( false );
+}
+
+void ListBoxEditor::currentTextChanged( const QString &txt )
+{
+ if ( preview->currentItem() == -1 )
+ return;
+
+ preview->blockSignals( true );
+ if ( preview->item( preview->currentItem() )->pixmap() )
+ preview->changeItem( *preview->item( preview->currentItem() )->pixmap(), txt, preview->currentItem() );
+ else
+ preview->changeItem( txt, preview->currentItem() );
+ preview->blockSignals( false );
+}
+
+void ListBoxEditor::okClicked()
+{
+ applyClicked();
+ accept();
+}
+
+void ListBoxEditor::cancelClicked()
+{
+ reject();
+}
+
+void ListBoxEditor::applyClicked()
+{
+ QListBoxItem *i = 0;
+ QValueList<PopulateListBoxCommand::Item> items;
+ for ( i = preview->firstItem(); i; i = i->next() ) {
+ PopulateListBoxCommand::Item item;
+ if ( i->pixmap() )
+ item.pix = *i->pixmap();
+ item.text = i->text();
+ items.append( item );
+ }
+
+ PopulateListBoxCommand *cmd = new PopulateListBoxCommand( i18n("Edit Items of '%1'" ).arg( listbox->name() ),
+ formwindow, listbox, items );
+ cmd->execute();
+ formwindow->commandHistory()->addCommand( cmd );
+}
+
+void ListBoxEditor::choosePixmap()
+{
+ if ( preview->currentItem() == -1 )
+ return;
+
+ QPixmap pix;
+ if ( preview->item( preview->currentItem() )->pixmap() )
+ pix = qChoosePixmap( this, formwindow, *preview->item( preview->currentItem() )->pixmap() );
+ else
+ pix = qChoosePixmap( this, formwindow, QPixmap() );
+
+ if ( pix.isNull() )
+ return;
+
+ QString txt = preview->item( preview->currentItem() )->text();
+ preview->changeItem( pix, txt, preview->currentItem() );
+ itemDeletePixmap->setEnabled( true );
+}
+
+void ListBoxEditor::moveItemUp()
+{
+ if ( preview->currentItem() < 1 )
+ return;
+
+ QListBoxItem *i = preview->item( preview->currentItem() );
+ bool hasPix = (i->pixmap() != 0);
+ QPixmap pix;
+ if ( hasPix )
+ pix = *i->pixmap();
+ QString txt = i->text();
+
+ QListBoxItem *p = i->prev();
+ if ( p->pixmap() )
+ preview->changeItem( *p->pixmap(), p->text(), preview->currentItem() );
+ else
+ preview->changeItem( p->text(), preview->currentItem() );
+
+ if ( hasPix )
+ preview->changeItem( pix, txt, preview->currentItem() - 1 );
+ else
+ preview->changeItem( txt, preview->currentItem() - 1 );
+}
+
+void ListBoxEditor::moveItemDown()
+{
+ if ( preview->currentItem() == -1 || preview->currentItem() > (int)preview->count() - 2 )
+ return;
+
+ QListBoxItem *i = preview->item( preview->currentItem() );
+ bool hasPix = (i->pixmap() != 0);
+ QPixmap pix;
+ if ( hasPix )
+ pix = *i->pixmap();
+ QString txt = i->text();
+
+ QListBoxItem *n = i->next();
+ if ( n->pixmap() )
+ preview->changeItem( *n->pixmap(), n->text(), preview->currentItem() );
+ else
+ preview->changeItem( n->text(), preview->currentItem() );
+
+ if ( hasPix )
+ preview->changeItem( pix, txt, preview->currentItem() + 1 );
+ else
+ preview->changeItem( txt, preview->currentItem() + 1 );
+}
+
+void ListBoxEditor::deletePixmap()
+{
+ if ( preview->currentItem() == -1 )
+ return;
+
+ QListBoxItem *i = preview->item( preview->currentItem() );
+ preview->changeItem( i->text(), preview->currentItem() );
+ itemDeletePixmap->setEnabled( false );
+}
+#include "listboxeditorimpl.moc"
diff --git a/kommander/editor/listboxeditorimpl.h b/kommander/editor/listboxeditorimpl.h
new file mode 100644
index 00000000..294ce33e
--- /dev/null
+++ b/kommander/editor/listboxeditorimpl.h
@@ -0,0 +1,55 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef LISTBOXEDITOR_H
+#define LISTBOXEDITOR_H
+
+class QListBox;
+class FormWindow;
+
+#include "listboxeditor.h"
+
+class ListBoxEditor : public ListBoxEditorBase
+{
+ Q_OBJECT
+
+public:
+ ListBoxEditor( QWidget *parent, QWidget *editWidget, FormWindow *fw );
+
+protected slots:
+ void insertNewItem();
+ void deleteCurrentItem();
+ void currentItemChanged( QListBoxItem * );
+ void currentTextChanged( const QString & );
+ void okClicked();
+ void cancelClicked();
+ void applyClicked();
+ void choosePixmap();
+ void moveItemUp();
+ void moveItemDown();
+ void deletePixmap();
+
+private:
+ QListBox *listbox;
+ FormWindow *formwindow;
+
+};
+
+#endif
diff --git a/kommander/editor/listeditor.ui b/kommander/editor/listeditor.ui
new file mode 100644
index 00000000..6cafeed0
--- /dev/null
+++ b/kommander/editor/listeditor.ui
@@ -0,0 +1,147 @@
+<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
+<class>ListEditor</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>ListEditor</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>331</width>
+ <height>301</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Edit</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QListView" row="0" column="0" rowspan="5" colspan="1">
+ <column>
+ <property name="text">
+ <string>Column 1</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>listview</cstring>
+ </property>
+ <property name="selectionMode">
+ <enum>Extended</enum>
+ </property>
+ <property name="resizeMode">
+ <enum>AllColumns</enum>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>PushButton1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Add</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>PushButton2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Remove</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="2" column="1">
+ <property name="name">
+ <cstring>PushButton3</cstring>
+ </property>
+ <property name="text">
+ <string>Re&amp;name</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="4" column="1">
+ <property name="name">
+ <cstring>PushButton4</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Close</string>
+ </property>
+ </widget>
+ <spacer row="3" column="1">
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>PushButton1</sender>
+ <signal>clicked()</signal>
+ <receiver>ListEditor</receiver>
+ <slot>addItem()</slot>
+ </connection>
+ <connection>
+ <sender>PushButton2</sender>
+ <signal>clicked()</signal>
+ <receiver>ListEditor</receiver>
+ <slot>removeItems()</slot>
+ </connection>
+ <connection>
+ <sender>PushButton4</sender>
+ <signal>clicked()</signal>
+ <receiver>ListEditor</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>listview</sender>
+ <signal>itemRenamed(QListViewItem*,int)</signal>
+ <receiver>ListEditor</receiver>
+ <slot>renamed(QListViewItem*)</slot>
+ </connection>
+ <connection>
+ <sender>PushButton3</sender>
+ <signal>clicked()</signal>
+ <receiver>ListEditor</receiver>
+ <slot>renameItem()</slot>
+ </connection>
+</connections>
+<forwards>
+ <forward>class QStringList;</forward>
+</forwards>
+<slots>
+ <slot>init()</slot>
+ <slot>setList( const QStringList &amp; l )</slot>
+ <slot>addItem()</slot>
+ <slot>renamed( QListViewItem * i )</slot>
+ <slot>removeItems()</slot>
+ <slot returnType="QStringList">items()</slot>
+ <slot>renameItem()</slot>
+</slots>
+<pixmapinproject/>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/editor/listvieweditor.ui b/kommander/editor/listvieweditor.ui
new file mode 100644
index 00000000..32c5f135
--- /dev/null
+++ b/kommander/editor/listvieweditor.ui
@@ -0,0 +1,936 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>ListViewEditorBase</class>
+<comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>ListViewEditorBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>599</width>
+ <height>351</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Edit Listview</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Edit Listview&lt;/b&gt;&lt;p&gt;Use the controls on the &lt;b&gt;Items&lt;/b&gt;-tab to add, edit or delete items in the listview. Change the column configuration of the listview using the controls on the &lt;b&gt;Columns&lt;/b&gt;-tab.&lt;/p&gt;Click the &lt;b&gt;New Item&lt;/b&gt;-button to create a new item, then enter text and add a pixmap.&lt;/p&gt;&lt;p&gt;Select an item from the list and click the &lt;b&gt;Delete Item&lt;/b&gt;-button to remove the item from the list.&lt;/p&gt;</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>tabWidget</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>Widget10</cstring>
+ </property>
+ <attribute name="title">
+ <string>&amp;Items</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton" row="2" column="1">
+ <property name="name">
+ <cstring>itemDelete</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Delete Item</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Delete item</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Deletes the selected item.&lt;/b&gt;&lt;p&gt;Any sub-items are also deleted.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QGroupBox" row="0" column="2" rowspan="8" colspan="1">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Item &amp;Properties</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>Label2</cstring>
+ </property>
+ <property name="text">
+ <string>Pi&amp;xmap:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>itemChoosePixmap</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>Label1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Text:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>itemText</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>itemText</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Change text</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Change the text of the item.&lt;/b&gt;&lt;p&gt;The text will be changed in the current column of the selected item.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>itemColumn</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Change column</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Select the current column.&lt;/b&gt;&lt;p&gt;The item's text and pixmap will be changed for the current column&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>Label4</cstring>
+ </property>
+ <property name="text">
+ <string>Colu&amp;mn:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>itemColumn</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="1">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>itemPixmap</cstring>
+ </property>
+ <property name="text">
+ <string>Label4</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>itemDeletePixmap</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Delete Pixmap</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Delete the selected item's pixmap.&lt;/b&gt;&lt;p&gt;The pixmap in the current column of the selected item will be deleted.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>itemChoosePixmap</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Select a Pixmap</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Select a pixmap file for the item.&lt;/b&gt;&lt;p&gt;The pixmap will be changed in the current column of the selected item.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>itemNew</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;New Item</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Add an item</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Adds a new item to the list.&lt;/b&gt;&lt;p&gt;The item will be inserted at the top of the list and can be moved using the up- and down-buttons.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QListView" row="0" column="0" rowspan="8" colspan="1">
+ <property name="name">
+ <cstring>itemsPreview</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The list of items.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>itemNewSub</cstring>
+ </property>
+ <property name="text">
+ <string>New &amp;Subitem</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Add a subitem</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Create a new sub-item for the selected item.&lt;/b&gt;&lt;p&gt;New sub-items are inserted at the top of the list of sub-items, and new levels are created automatically.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <spacer row="3" column="1">
+ <property name="name">
+ <cstring>Vertical Spacing1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton" row="4" column="1">
+ <property name="name">
+ <cstring>itemUp</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Move up</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Move the selected item up.&lt;/b&gt;&lt;p&gt;The item will be moved within its level in the hierarchy.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="5" column="1">
+ <property name="name">
+ <cstring>itemDown</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image2</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Move down</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Move the selected item down.&lt;/b&gt;&lt;p&gt;The item will be moved within its level in the hierarchy.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="6" column="1">
+ <property name="name">
+ <cstring>itemLeft</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image3</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Move left</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Move the selected item one level up.&lt;/b&gt;&lt;p&gt;This will also change the level of the item's sub-items.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="7" column="1">
+ <property name="name">
+ <cstring>itemRight</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image4</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Move right</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Move the selected item one level down.&lt;/b&gt;&lt;p&gt;This will also change the level of the item's sub-items.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>Widget11</cstring>
+ </property>
+ <attribute name="title">
+ <string>Co&amp;lumns</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox" row="0" column="2" rowspan="5" colspan="1">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Column Properties</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>Label2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Pixmap:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>colChoosePixmap</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>colPixmap</cstring>
+ </property>
+ <property name="text">
+ <string>Label4</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="2">
+ <property name="name">
+ <cstring>colDeletePixmap</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Delete Pixmap</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Delete the pixmap of the selected column.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="3">
+ <property name="name">
+ <cstring>colChoosePixmap</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Select a Pixmap</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Select a pixmap file for the selected column.&lt;/b&gt;&lt;p&gt;The pixmap will be displayed in the header of the listview.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>Label1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Text:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>colText</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>colText</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Enter column text</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Enter the text for the selected column.&lt;/b&gt;&lt;p&gt;The text will be displayed in the header of the listview.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>colClickable</cstring>
+ </property>
+ <property name="text">
+ <string>Clicka&amp;ble</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>If this option is checked, the selected column will react to mouse clicks on the header.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>colResizeable</cstring>
+ </property>
+ <property name="text">
+ <string>Re&amp;sizable</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The column's width will be resizeable if this option is checked.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>colDelete</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Delete Column</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Delete column</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Deletes the selected Column.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="4" column="1">
+ <property name="name">
+ <cstring>colDown</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image2</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Move down</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Move the selected item down.&lt;/b&gt;&lt;p&gt;The top-most column will be the first column in the list.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>colNew</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;New Column</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Add a Column</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Create a new column.&lt;/b&gt;&lt;p&gt;New columns are appended at the end of (right of) the list and may be moved using the up- and down-buttons.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="3" column="1">
+ <property name="name">
+ <cstring>colUp</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Move up</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Move the selected item up.&lt;/b&gt;&lt;p&gt;The top-most column will be the first column in the list.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QListBox" row="0" column="0" rowspan="5" colspan="1">
+ <property name="name">
+ <cstring>colPreview</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The list of columns.</string>
+ </property>
+ </widget>
+ <spacer row="2" column="1">
+ <property name="name">
+ <cstring>Vertical Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>helpButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>okButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and apply all the changes.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>applyButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Apply</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Apply all changes.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>cancelButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and discard any changes.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="409">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022630543251d2e253d856405bffcbc54105b19c856360003103711c6b53006ab440370316528264b4c198450c5808a94d1ed00aac214832b43124b544ec414d34b4c4c441103f11341120831309758313d0cf3b0840b7258d55a73010092c14eca</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="1040">789c5dcf4d73a2401006e0bbbf82726ed61609ca0c4c6ded0125dfd1985baab6f600338c280a46fc08a6f6bf2f3ddd26abc0619eb7677a9aab9ef3361d3bbdab4ebd4db673e5a83cd9383dbd5bad9adf7f7e7d76ba9e70dacfe78ed7fdd1e9ba8e72265599c17adaae99773df033cb9818225f2cc38132027887f4af8d01ee817dc935720d1c7827d648c1910f969273cd8123e4a93a21d2d95ba0ef098d631864409b6f2c13c195063e210389d55720ef0b8dd56764e021c7c8905acd2c93b66aa71a224389fffb0e14fd4062f51119d290115252ab2391c6585ab653a5f6de033294f8fbf74849175544eacc80c120e478b644267451434c90a9659a78d8aa2066585d00c33425ae80d25702b92352756ea91475ce90ba8f4c80299cb5177d58ea8c5a6d819a67b4595b66865a29602632628e3406b9011a73a26b1f96a40c575f19536dc7d959c6543e5f1466f95fd646aba22cabf5fb57c636f9a24ddaa75e52c6b6f90ea3aada2f313b7ccc1b1b1da3e128a67df09aaa1addb82963dfb3b8b7cdf18e9dcfe70e8b687f91b1fba25acf2eb2a289460f17d9a28c4c7c9e1d8ae8f1e9227b1e4feafa859d9f8de378fa8afbfefeecfc030f08f1a3</data>
+ </image>
+ <image name="image2">
+ <data format="XPM.GZ" length="1085">789c5dd0cd6ee2301000e03b4f11911b5ad1189290a8da0324a5e90f29941e2aadf6e0d84ea10d1020849ad5befb7a3cceaa29e2e06f663c33ce55cf7a9dcfacde55e758d16acd2cb6a207abc74f9b8dfcf5fbe79f4e97f896fabb8145ba3f3addbec5ac74b715704ed5d9769c01cb73e0423368f80224c190e53e70091c389e83d98366e83942679f0c43cc7e0087c4f3307b63c8b1d559337459c6810f48df137aab49436c750f748917320f78418e4cf65993fa04b33572c4313b067a039f333de80e39e238680ff4d5d2581c69d2c0c3ad8e0db1f30619127cd1dcd00c7a4452824c80a321359d73cd8c129c1b1b0acc726030a414b31299f9989d1952a4d0ccc23073819f861c973c2133d3b904aacf6ceeda9a8c12bc5b219929de21f9005900a99bf9f8e9a8a159728a5477f5d77847367719305373b1788b14668d4c9337d95b2437ef5d03b9c84df10a28fc866fc05c9522fbf0b369c6b8d0c7ffb1fc6db57effb0bfc68acd7657ee0fedba63599dea73d18a7dca525ec6ed3aa16293a81d2bf232beb1bfc578d58a416731ad641da95381b1e3f496ca939432c9f3bb7b8c450f8fb39994b18c93493a36fda2a7b9aa8ae3e4b278b69b192aa822499dc2d6cddc68b94ff697f46c7fdd255ad6f5e2dbdbfac7c3cbd8ecf7f7baf30f538f0154</data>
+ </image>
+ <image name="image3">
+ <data format="XPM.GZ" length="1055">789c65d25f6fa2401000f0773f05913773b1202c422ef7a056ebffda3e5dd2f461d95d2aa2605129dea5dfbdbb336373a7460dbf9961665cbc6b59bf570bab75d7381cf931159658f3d26ac9d36e777e79fdf5b7d174034bbf7dfdddfcd168b62d612d8b5c99eb677d6d3ba12792c47069e83a5ea820fb88f47dcc8e80dfc563a4ef2481e19448d99e61c7f184648603e4a5d5191831863c187a2e6312e60e91818bd90930620eb67a400611666b43dfed52ab059007ae80e215910969f884ec4a2c9e1bb24e20313b4386d4ea1ec8431ad4370c3a5d164371818ca8f80f9047119e4645a441b661d70b23dc2a4772ba774de448098c438983b648eee243c9880a8b37c8b883fc300c3d4d58a3240698e5c098336c951a46bea0ec89486b2440a1b3d0ea0d29a9786f184b457c3714ecc21d504a5a3236944ad192c250058a061d91095101f59dc8f6d5eb3b66f39b188f05bf8a49a192ab3abdc8db5afe17d3f3d24d66b7b9e436dfdaf014762acdb3bcd826fbfdfbbe3cc0911c4f599e57599a7e94ebbc3ec3832f373a545545613e750ffe2a837b1dca87a3c179f8500fc73063329de992b9948b496f395ee02ef3c7baa8681779d979357a9addfcb6fef3d4be3983fef236f6ef597dfe6c7c016080f871</data>
+ </image>
+ <image name="image4">
+ <data format="XPM.GZ" length="1175">789c65d24b6fda401000e03bbfc2c2375411fc583f54f510d204688040020949d5c37ad7368eb14978242455ff7b3d0f9002960ffe66676647bb3e6b18b3d1c0689cd5d61bb9c994a1e6726534f4b6283e7efff9f1b756b73ca37a856b58f56fb57ad350c67059c6f03dadbecd56cb769304386606c41ed00a1c157bc05ba0dd725c2d8037443788b1d51019ba8af808742c1126583b38103bf7899e20de2143d1521a3822ee57bb4cae7d02ba96d0947c8f944247c809d1b3140e7941f4054df50b286cdfd2c86b62c01bcd90d20f29f99d18685a2d819eed0bda2825865cbb434a9fc7d0c440d0183f89219f46fb40aced10a545cc80be23b9b34446412815f08118f29026515a74471f4c491b29664cad7260e0441ef11959d552f21571bfba6472ab05935b15c0eab63979ce94c418a914275f12b54ddc00a55b113b9f1f88ab095269aefd24c6bcba0546aef6a8768dd49a877c3b109357c498878c804a27bcef2b93575f80904a6c1e3d5f62a63c8d454a9fc4e224d527b5f338d31493cfa6a9cd6653e68b459196185bbebcaed6ebcdf62d5779be78dfe1ad7e16c5bc88cf0b054ffb027fa9cbab5c6559072259daede1efddb9eef607c39b51156af7c7582b7bb777939d9465bb0a4defbfcef2900ea693a3f966fdf1e478e647c83a8a3d95a767b03fab7fdf6bff01e3b51256</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>cancelButton</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>itemNew</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>itemNewClicked()</slot>
+ </connection>
+ <connection>
+ <sender>itemDelete</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>itemDeleteClicked()</slot>
+ </connection>
+ <connection>
+ <sender>itemUp</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>itemUpClicked()</slot>
+ </connection>
+ <connection>
+ <sender>itemDown</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>itemDownClicked()</slot>
+ </connection>
+ <connection>
+ <sender>itemColumn</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>itemColChanged(int)</slot>
+ </connection>
+ <connection>
+ <sender>itemText</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>itemTextChanged(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>itemDeletePixmap</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>itemPixmapDeleted()</slot>
+ </connection>
+ <connection>
+ <sender>itemChoosePixmap</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>itemPixmapChoosen()</slot>
+ </connection>
+ <connection>
+ <sender>colNew</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>newColumnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>colDelete</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>deleteColumnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>colUp</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>columnUpClicked()</slot>
+ </connection>
+ <connection>
+ <sender>colDown</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>columnDownClicked()</slot>
+ </connection>
+ <connection>
+ <sender>colText</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>columnTextChanged(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>colDeletePixmap</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>columnPixmapDeleted()</slot>
+ </connection>
+ <connection>
+ <sender>colChoosePixmap</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>columnPixmapChosen()</slot>
+ </connection>
+ <connection>
+ <sender>colResizeable</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>columnResizable(bool)</slot>
+ </connection>
+ <connection>
+ <sender>colClickable</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>columnClickable(bool)</slot>
+ </connection>
+ <connection>
+ <sender>tabWidget</sender>
+ <signal>selected(const QString&amp;)</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>initTabPage(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>okButton</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>okClicked()</slot>
+ </connection>
+ <connection>
+ <sender>applyButton</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>applyClicked()</slot>
+ </connection>
+ <connection>
+ <sender>colPreview</sender>
+ <signal>currentChanged(QListBoxItem*)</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>currentColumnChanged(QListBoxItem*)</slot>
+ </connection>
+ <connection>
+ <sender>colPreview</sender>
+ <signal>selectionChanged(QListBoxItem*)</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>currentColumnChanged(QListBoxItem*)</slot>
+ </connection>
+ <connection>
+ <sender>itemsPreview</sender>
+ <signal>currentChanged(QListViewItem*)</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>currentItemChanged(QListViewItem*)</slot>
+ </connection>
+ <connection>
+ <sender>itemsPreview</sender>
+ <signal>selectionChanged(QListViewItem*)</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>currentItemChanged(QListViewItem*)</slot>
+ </connection>
+ <connection>
+ <sender>itemNewSub</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>itemNewSubClicked()</slot>
+ </connection>
+ <connection>
+ <sender>itemLeft</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>itemLeftClicked()</slot>
+ </connection>
+ <connection>
+ <sender>itemRight</sender>
+ <signal>clicked()</signal>
+ <receiver>ListViewEditorBase</receiver>
+ <slot>itemRightClicked()</slot>
+ </connection>
+ <slot access="protected" language="C++" returnType="void">init()</slot>
+ <slot access="protected" language="C++" returnType="void">destroy()</slot>
+ <slot access="protected" language="C++" returnType="void">applyClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">columnClickable(bool)</slot>
+ <slot access="protected" language="C++" returnType="void">columnDownClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">columnPixmapChosen()</slot>
+ <slot access="protected" language="C++" returnType="void">columnPixmapDeleted()</slot>
+ <slot access="protected" language="C++" returnType="void">columnResizable(bool)</slot>
+ <slot access="protected" language="C++" returnType="void">columnTextChanged(const QString &amp;)</slot>
+ <slot access="protected" language="C++" returnType="void">columnUpClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">currentColumnChanged(QListBoxItem*)</slot>
+ <slot access="protected" language="C++" returnType="void">currentItemChanged(QListViewItem*)</slot>
+ <slot access="protected" language="C++" returnType="void">deleteColumnClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">initTabPage(const QString &amp;)</slot>
+ <slot access="protected" language="C++" returnType="void">itemColChanged(int)</slot>
+ <slot access="protected" language="C++" returnType="void">itemDeleteClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">itemDownClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">itemLeftClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">itemNewClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">itemNewSubClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">itemPixmapChoosen()</slot>
+ <slot access="protected" language="C++" returnType="void">itemPixmapDeleted()</slot>
+ <slot access="protected" language="C++" returnType="void">itemTextChanged(const QString &amp;)</slot>
+ <slot access="protected" language="C++" returnType="void">itemUpClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">newColumnClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">itemRightClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">okClicked()</slot>
+</connections>
+<tabstops>
+ <tabstop>okButton</tabstop>
+ <tabstop>cancelButton</tabstop>
+ <tabstop>tabWidget</tabstop>
+ <tabstop>itemsPreview</tabstop>
+ <tabstop>itemNew</tabstop>
+ <tabstop>itemNewSub</tabstop>
+ <tabstop>itemDelete</tabstop>
+ <tabstop>itemUp</tabstop>
+ <tabstop>itemDown</tabstop>
+ <tabstop>itemLeft</tabstop>
+ <tabstop>itemRight</tabstop>
+ <tabstop>itemColumn</tabstop>
+ <tabstop>itemText</tabstop>
+ <tabstop>itemDeletePixmap</tabstop>
+ <tabstop>itemChoosePixmap</tabstop>
+ <tabstop>helpButton</tabstop>
+ <tabstop>applyButton</tabstop>
+ <tabstop>colPreview</tabstop>
+ <tabstop>colNew</tabstop>
+ <tabstop>colDelete</tabstop>
+ <tabstop>colUp</tabstop>
+ <tabstop>colDown</tabstop>
+ <tabstop>colText</tabstop>
+ <tabstop>colDeletePixmap</tabstop>
+ <tabstop>colChoosePixmap</tabstop>
+ <tabstop>colClickable</tabstop>
+ <tabstop>colResizeable</tabstop>
+</tabstops>
+</UI>
diff --git a/kommander/editor/listvieweditorimpl.cpp b/kommander/editor/listvieweditorimpl.cpp
new file mode 100644
index 00000000..3f30106a
--- /dev/null
+++ b/kommander/editor/listvieweditorimpl.cpp
@@ -0,0 +1,585 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "formwindow.h"
+#include "mainwindow.h"
+#include "listvieweditorimpl.h"
+#include "pixmapchooser.h"
+#include "command.h"
+
+#include <qlistview.h>
+#include <qheader.h>
+#include <qlistbox.h>
+#include <qlineedit.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qtabwidget.h>
+#include <qspinbox.h>
+#include <qpushbutton.h>
+#include <qptrstack.h>
+
+#include <klocale.h>
+
+ListViewEditor::ListViewEditor( QWidget *parent, QListView *lv, FormWindow *fw )
+ : ListViewEditorBase( parent, 0, true ), listview( lv ), formwindow( fw )
+{
+ connect( helpButton, SIGNAL( clicked() ), MainWindow::self, SLOT( showDialogHelp() ) );
+ itemText->setEnabled( false );
+ itemChoosePixmap->setEnabled( false );
+ itemDeletePixmap->setEnabled( false );
+ itemColumn->setEnabled( false );
+
+ setupColumns();
+ PopulateListViewCommand::transferItems( listview, itemsPreview );
+ setupItems();
+
+ itemsPreview->setShowSortIndicator( listview->showSortIndicator() );
+ itemsPreview->setAllColumnsShowFocus( listview->allColumnsShowFocus() );
+ itemsPreview->setRootIsDecorated( listview->rootIsDecorated() );
+
+ if ( itemsPreview->firstChild() ) {
+ itemsPreview->setCurrentItem( itemsPreview->firstChild() );
+ itemsPreview->setSelected( itemsPreview->firstChild(), true );
+ }
+}
+
+void ListViewEditor::applyClicked()
+{
+ setupItems();
+ PopulateListViewCommand *cmd = new PopulateListViewCommand( i18n("Edit Items and Columns of '%1'" ).arg( listview->name() ),
+ formwindow, listview, itemsPreview );
+ cmd->execute();
+ formwindow->commandHistory()->addCommand( cmd );
+}
+
+void ListViewEditor::okClicked()
+{
+ applyClicked();
+ accept();
+}
+
+
+
+void ListViewEditor::columnClickable( bool b )
+{
+ Column *c = findColumn( colPreview->item( colPreview->currentItem() ) );
+ if ( !c )
+ return;
+ c->clickable = b;
+}
+
+void ListViewEditor::columnDownClicked()
+{
+ if ( colPreview->currentItem() == -1 ||
+ colPreview->currentItem() > (int)colPreview->count() - 2 )
+ return;
+
+ colPreview->clearSelection();
+ QListBoxItem *i = colPreview->item( colPreview->currentItem() );
+ QListBoxItem *below = i->next();
+
+ colPreview->takeItem( i );
+ colPreview->insertItem( i, below );
+
+ colPreview->setCurrentItem( i );
+ colPreview->setSelected( i, true );
+}
+
+void ListViewEditor::columnPixmapChosen()
+{
+ Column *c = findColumn( colPreview->item( colPreview->currentItem() ) );
+ if ( !c )
+ return;
+
+ QPixmap pix;
+ if ( colPixmap->pixmap() )
+ pix = qChoosePixmap( this, formwindow, *colPixmap->pixmap() );
+ else
+ pix = qChoosePixmap( this, formwindow, QPixmap() );
+
+ if ( pix.isNull() )
+ return;
+
+ c->pixmap = pix;
+ colPreview->blockSignals( true );
+ if ( !c->pixmap.isNull() )
+ colPreview->changeItem( c->pixmap, c->text, colPreview->index( c->item ) );
+ else
+ colPreview->changeItem( c->text, colPreview->index( c->item ) );
+ c->item = colPreview->item( colPreview->currentItem() );
+ colPixmap->setPixmap( c->pixmap );
+ colPreview->blockSignals( false );
+ colDeletePixmap->setEnabled( true );
+}
+
+void ListViewEditor::columnPixmapDeleted()
+{
+ Column *c = findColumn( colPreview->item( colPreview->currentItem() ) );
+ if ( !c )
+ return;
+
+ c->pixmap = QPixmap();
+ colPreview->blockSignals( true );
+ if ( !c->pixmap.isNull() )
+ colPreview->changeItem( c->pixmap, c->text, colPreview->index( c->item ) );
+ else
+ colPreview->changeItem( c->text, colPreview->index( c->item ) );
+ c->item = colPreview->item( colPreview->currentItem() );
+ colPixmap->setText( "" );
+ colPreview->blockSignals( false );
+ colDeletePixmap->setEnabled( false );
+}
+
+void ListViewEditor::columnResizable( bool b )
+{
+ Column *c = findColumn( colPreview->item( colPreview->currentItem() ) );
+ if ( !c )
+ return;
+ c->resizable = b;
+}
+
+void ListViewEditor::columnTextChanged( const QString &txt )
+{
+ Column *c = findColumn( colPreview->item( colPreview->currentItem() ) );
+ if ( !c )
+ return;
+
+ c->text = txt;
+ colPreview->blockSignals( true );
+ if ( !c->pixmap.isNull() )
+ colPreview->changeItem( c->pixmap, c->text, colPreview->index( c->item ) );
+ else
+ colPreview->changeItem( c->text, colPreview->index( c->item ) );
+ c->item = colPreview->item( colPreview->currentItem() );
+ colPreview->blockSignals( false );
+}
+
+void ListViewEditor::columnUpClicked()
+{
+ if ( colPreview->currentItem() <= 0 )
+ return;
+
+ colPreview->clearSelection();
+ QListBoxItem *i = colPreview->item( colPreview->currentItem() );
+ QListBoxItem *above = i->prev();
+
+ colPreview->takeItem( above );
+ colPreview->insertItem( above, i );
+
+ colPreview->setCurrentItem( i );
+ colPreview->setSelected( i, true );
+}
+
+void ListViewEditor::currentColumnChanged( QListBoxItem *i )
+{
+ Column *c = findColumn( i );
+ if ( !i || !c ) {
+ colText->setEnabled( false );
+ colPixmap->setEnabled( false );
+ colDeletePixmap->setEnabled( false );
+ colText->blockSignals( true );
+ colText->setText( "" );
+ colText->blockSignals( false );
+ colClickable->setEnabled( false );
+ colResizeable->setEnabled( false );
+ return;
+ }
+
+ colText->setEnabled( true );
+ colPixmap->setEnabled( true );
+ colDeletePixmap->setEnabled( i->pixmap() && !i->pixmap()->isNull() );
+ colClickable->setEnabled( true );
+ colResizeable->setEnabled( true );
+
+ colText->blockSignals( true );
+ colText->setText( c->text );
+ colText->blockSignals( false );
+ if ( !c->pixmap.isNull() )
+ colPixmap->setPixmap( c->pixmap );
+ else
+ colPixmap->setText( "" );
+ colClickable->setChecked( c->clickable );
+ colResizeable->setChecked( c->resizable );
+}
+
+void ListViewEditor::newColumnClicked()
+{
+ Column col;
+ col.text = i18n("New Column" );
+ col.pixmap = QPixmap();
+ col.clickable = true;
+ col.resizable = true;
+ if ( !col.pixmap.isNull() )
+ col.item = new QListBoxPixmap( colPreview, col.pixmap, col.text );
+ else
+ col.item = new QListBoxText( colPreview, col.text );
+ columns.append( col );
+ colPreview->setCurrentItem( col.item );
+ colPreview->setSelected( col.item, true );
+}
+
+void ListViewEditor::deleteColumnClicked()
+{
+ QListBoxItem *i = colPreview->item( colPreview->currentItem() );
+ if ( !i )
+ return;
+
+ for ( QValueList<Column>::Iterator it = columns.begin(); it != columns.end(); ++it ) {
+ if ( ( *it ).item == i ) {
+ delete (*it).item;
+ columns.remove( it );
+ break;
+ }
+ }
+
+ if ( colPreview->currentItem() != -1 )
+ colPreview->setSelected( colPreview->currentItem(), true );
+}
+
+
+
+
+
+
+void ListViewEditor::currentItemChanged( QListViewItem *i )
+{
+ if ( !i ) {
+ itemText->setEnabled( false );
+ itemChoosePixmap->setEnabled( false );
+ itemDeletePixmap->setEnabled( false );
+ itemColumn->setEnabled( false );
+ return;
+ }
+
+ itemText->setEnabled( true );
+ itemChoosePixmap->setEnabled( true );
+ itemDeletePixmap->setEnabled( i->pixmap( itemColumn->value() ) &&
+ !i->pixmap( itemColumn->value() )->isNull() );
+ itemColumn->setEnabled( true );
+
+ displayItem( i, itemColumn->value() );
+}
+
+void ListViewEditor::displayItem( QListViewItem *i, int col )
+{
+ itemText->blockSignals( true );
+ itemText->setText( i->text( col ) );
+ itemText->blockSignals( false );
+
+ itemPixmap->blockSignals( true );
+ if ( i->pixmap( col ) )
+ itemPixmap->setPixmap( *i->pixmap( col ) );
+ else
+ itemPixmap->setText( "" );
+ itemPixmap->blockSignals( false );
+}
+
+void ListViewEditor::itemColChanged( int col )
+{
+ QListViewItem *i = itemsPreview->currentItem();
+ if ( !i )
+ return;
+
+ displayItem( i, col );
+ itemDeletePixmap->setEnabled( i->pixmap( col ) && !i->pixmap( col )->isNull() );
+}
+
+void ListViewEditor::itemDeleteClicked()
+{
+ QListViewItem *i = itemsPreview->currentItem();
+ if ( !i )
+ return;
+
+ delete i;
+ if ( itemsPreview->firstChild() ) {
+ itemsPreview->setCurrentItem( itemsPreview->firstChild() );
+ itemsPreview->setSelected( itemsPreview->firstChild(), true );
+ }
+}
+
+void ListViewEditor::itemDownClicked()
+{
+ QListViewItem *i = itemsPreview->currentItem();
+ if ( !i )
+ return;
+
+ QListViewItemIterator it( i );
+ QListViewItem *parent = i->parent();
+ it++;
+ while ( it.current() ) {
+ if ( it.current()->parent() == parent )
+ break;
+ it++;
+ }
+
+ if ( !it.current() )
+ return;
+ QListViewItem *other = it.current();
+
+ i->moveItem( other );
+}
+
+void ListViewEditor::itemNewClicked()
+{
+ QListViewItem *item = new QListViewItem( itemsPreview );
+ item->setText( 0, "Item" );
+ itemsPreview->setCurrentItem( item );
+ itemsPreview->setSelected( item, true );
+}
+
+void ListViewEditor::itemNewSubClicked()
+{
+ QListViewItem *parent = itemsPreview->currentItem();
+ QListViewItem *item = 0;
+ if ( parent ) {
+ item = new QListViewItem( parent );
+ parent->setOpen( true );
+ } else {
+ item = new QListViewItem( itemsPreview );
+ }
+ item->setText( 0, "Subitem" );
+ itemsPreview->setCurrentItem( item );
+ itemsPreview->setSelected( item, true );
+}
+
+void ListViewEditor::itemPixmapChoosen()
+{
+ QListViewItem *i = itemsPreview->currentItem();
+ if ( !i )
+ return;
+
+ QPixmap pix;
+ if ( itemPixmap->pixmap() )
+ pix = qChoosePixmap( this, formwindow, *itemPixmap->pixmap() );
+ else
+ pix = qChoosePixmap( this, formwindow, QPixmap() );
+
+ if ( pix.isNull() )
+ return;
+
+ i->setPixmap( itemColumn->value(), QPixmap( pix ) );
+ itemPixmap->setPixmap( pix );
+ itemDeletePixmap->setEnabled( true );
+}
+
+void ListViewEditor::itemPixmapDeleted()
+{
+ QListViewItem *i = itemsPreview->currentItem();
+ if ( !i )
+ return;
+
+ i->setPixmap( itemColumn->value(), QPixmap() );
+ itemPixmap->setText( "" );
+ itemDeletePixmap->setEnabled( false );
+}
+
+void ListViewEditor::itemTextChanged( const QString &txt )
+{
+ QListViewItem *i = itemsPreview->currentItem();
+ if ( !i )
+ return;
+ i->setText( itemColumn->value(), txt );
+}
+
+void ListViewEditor::itemUpClicked()
+{
+ QListViewItem *i = itemsPreview->currentItem();
+ if ( !i )
+ return;
+
+ QListViewItemIterator it( i );
+ QListViewItem *parent = i->parent();
+ --it;
+ while ( it.current() ) {
+ if ( it.current()->parent() == parent )
+ break;
+ --it;
+ }
+
+ if ( !it.current() )
+ return;
+ QListViewItem *other = it.current();
+
+ other->moveItem( i );
+}
+
+void ListViewEditor::itemRightClicked()
+{
+ QListViewItem *i = itemsPreview->currentItem();
+ if ( !i )
+ return;
+
+ QListViewItemIterator it( i );
+ QListViewItem *parent = i->parent();
+ parent = parent ? parent->firstChild() : itemsPreview->firstChild();
+ if ( !parent )
+ return;
+ it++;
+ while ( it.current() ) {
+ if ( it.current()->parent() == parent )
+ break;
+ it++;
+ }
+
+ if ( !it.current() )
+ return;
+ QListViewItem *other = it.current();
+
+ for ( int c = 0; c < itemsPreview->columns(); ++c ) {
+ QString s = i->text( c );
+ i->setText( c, other->text( c ) );
+ other->setText( c, s );
+ QPixmap pix;
+ if ( i->pixmap( c ) )
+ pix = *i->pixmap( c );
+ if ( other->pixmap( c ) )
+ i->setPixmap( c, *other->pixmap( c ) );
+ else
+ i->setPixmap( c, QPixmap() );
+ other->setPixmap( c, pix );
+ }
+
+ itemsPreview->setCurrentItem( other );
+ itemsPreview->setSelected( other, true );
+}
+
+void ListViewEditor::itemLeftClicked()
+{
+ QListViewItem *i = itemsPreview->currentItem();
+ if ( !i )
+ return;
+
+ QListViewItemIterator it( i );
+ QListViewItem *parent = i->parent();
+ if ( !parent )
+ return;
+ parent = parent->parent();
+ --it;
+ while ( it.current() ) {
+ if ( it.current()->parent() == parent )
+ break;
+ --it;
+ }
+
+ if ( !it.current() )
+ return;
+ QListViewItem *other = it.current();
+
+ for ( int c = 0; c < itemsPreview->columns(); ++c ) {
+ QString s = i->text( c );
+ i->setText( c, other->text( c ) );
+ other->setText( c, s );
+ QPixmap pix;
+ if ( i->pixmap( c ) )
+ pix = *i->pixmap( c );
+ if ( other->pixmap( c ) )
+ i->setPixmap( c, *other->pixmap( c ) );
+ else
+ i->setPixmap( c, QPixmap() );
+ other->setPixmap( c, pix );
+ }
+
+ itemsPreview->setCurrentItem( other );
+ itemsPreview->setSelected( other, true );
+}
+
+void ListViewEditor::setupColumns()
+{
+ QHeader *h = listview->header();
+ for ( int i = 0; i < (int)h->count(); ++i ) {
+ Column col;
+ col.text = h->label( i );
+ col.pixmap = QPixmap();
+ if ( h->iconSet( i ) )
+ col.pixmap = h->iconSet( i )->pixmap();
+ col.clickable = h->isClickEnabled( i );
+ col.resizable = h->isResizeEnabled( i );
+ if ( !col.pixmap.isNull() )
+ col.item = new QListBoxPixmap( colPreview, col.pixmap, col.text );
+ else
+ col.item = new QListBoxText( colPreview, col.text );
+ columns.append( col );
+ }
+
+ colText->setEnabled( false );
+ colPixmap->setEnabled( false );
+ colClickable->setEnabled( false );
+ colResizeable->setEnabled( false );
+
+ if ( colPreview->firstItem() )
+ colPreview->setCurrentItem( colPreview->firstItem() );
+ numColumns = colPreview->count();
+}
+
+void ListViewEditor::setupItems()
+{
+ itemColumn->setMinValue( 0 );
+ itemColumn->setMaxValue( QMAX( numColumns - 1, 0 ) );
+ int i = 0;
+ QHeader *header = itemsPreview->header();
+ for ( QListBoxItem *item = colPreview->firstItem(); item; item = item->next() ) {
+ Column *col = findColumn( item );
+ if ( !col )
+ continue;
+ if ( i >= itemsPreview->columns() )
+ itemsPreview->addColumn( col->text );
+ header->setLabel( i, col->pixmap, col->text );
+ header->setResizeEnabled( col->resizable, i );
+ header->setClickEnabled( col->clickable, i );
+ ++i;
+ }
+ while ( itemsPreview->columns() > i )
+ itemsPreview->removeColumn( i );
+
+ itemColumn->setValue( QMIN( numColumns - 1, itemColumn->value() ) );
+}
+
+ListViewEditor::Column *ListViewEditor::findColumn( QListBoxItem *i )
+{
+ if ( !i )
+ return 0;
+
+ for ( QValueList<Column>::Iterator it = columns.begin(); it != columns.end(); ++it ) {
+ if ( ( *it ).item == i )
+ return &( *it );
+ }
+
+ return 0;
+}
+
+void ListViewEditor::initTabPage( const QString &page )
+{
+ numColumns = colPreview->count();
+ if ( page == i18n("&Items" ) ) {
+ setupItems();
+ if ( numColumns == 0 ) {
+ itemNew->setEnabled( false );
+ itemNewSub->setEnabled( false );
+ itemText->setEnabled( false );
+ itemChoosePixmap->setEnabled( false );
+ itemDeletePixmap->setEnabled( false );
+ itemColumn->setEnabled( false );
+ } else {
+ itemNew->setEnabled( true );
+ itemNewSub->setEnabled( true );
+ }
+ }
+}
+#include "listvieweditorimpl.moc"
diff --git a/kommander/editor/listvieweditorimpl.h b/kommander/editor/listvieweditorimpl.h
new file mode 100644
index 00000000..91da67c8
--- /dev/null
+++ b/kommander/editor/listvieweditorimpl.h
@@ -0,0 +1,94 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef LISTVIEWEDITORIMPL_H
+#define LISTVIEWEDITORIMPL_H
+
+#include "listvieweditor.h"
+
+#include <qmap.h>
+#include <qpixmap.h>
+#include <qvaluelist.h>
+
+class FormWindow;
+
+class ListViewEditor : public ListViewEditorBase
+{
+ Q_OBJECT
+
+public:
+ ListViewEditor( QWidget *parent, QListView *lv, FormWindow *fw );
+
+protected slots:
+ void applyClicked();
+ void columnClickable(bool);
+ void columnDownClicked();
+ void columnPixmapChosen();
+ void columnPixmapDeleted();
+ void columnResizable(bool);
+ void columnTextChanged(const QString &);
+ void columnUpClicked();
+ void currentColumnChanged(QListBoxItem*);
+ void currentItemChanged(QListViewItem*);
+ void deleteColumnClicked();
+ void itemColChanged(int);
+ void itemDeleteClicked();
+ void itemDownClicked();
+ void itemNewClicked();
+ void itemNewSubClicked();
+ void itemPixmapChoosen();
+ void itemPixmapDeleted();
+ void itemTextChanged(const QString &);
+ void itemUpClicked();
+ void itemLeftClicked();
+ void itemRightClicked();
+ void newColumnClicked();
+ void okClicked();
+ void initTabPage( const QString &page );
+
+private:
+ struct Column
+ {
+ QListBoxItem *item;
+ QString text;
+ QPixmap pixmap;
+ bool clickable, resizable;
+#if defined(Q_FULL_TEMPLATE_INSTANTIATION)
+ bool operator==( const Column& ) const { return FALSE; }
+#endif
+ };
+
+private:
+ void setupColumns();
+ void setupItems();
+ Column *findColumn( QListBoxItem *i );
+ void transferItems( QListView *from, QListView *to );
+ void displayItem( QListViewItem *i, int col );
+
+private:
+ QListView *listview;
+ QValueList<Column> columns;
+ int numColumns;
+ FormWindow *formwindow;
+
+};
+
+
+#endif
diff --git a/kommander/editor/main.cpp b/kommander/editor/main.cpp
new file mode 100644
index 00000000..7be1f31d
--- /dev/null
+++ b/kommander/editor/main.cpp
@@ -0,0 +1,81 @@
+/***************************************************************************
+ main.cpp - initialization
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+// KDE includes
+#include <kaboutdata.h>
+#include <kapplication.h>
+#include <kcmdlineargs.h>
+#include <kconfig.h>
+#include <kiconloader.h>
+#include <klocale.h>
+#include <ksplashscreen.h>
+
+// Other includes
+#include "mainwindow.h"
+#include "kommanderwidget.h"
+#include "kommanderversion.h"
+
+static const char *description =
+ I18N_NOOP("Kommander is a graphical editor of scripted dialogs.");
+static const char *text =
+ I18N_NOOP("Based on Qt Designer, (C) 2000 Trolltech AS.");
+
+static KCmdLineOptions options[] =
+{
+ { "+file", I18N_NOOP("Dialog to open"), 0 },
+ { 0, 0, 0 }
+};
+
+int main( int argc, char *argv[] )
+{
+ KAboutData aboutData( "kommander", I18N_NOOP("Kommander"),
+ KOMMANDER_VERSION, description, KAboutData::License_GPL,
+ "(C) 2002-2005 Kommander authors", text);
+ aboutData.addAuthor("Eric Laffoon", I18N_NOOP("Project manager"), "eric@kdewebdev.org");
+ aboutData.addAuthor("Andras Mantia", I18N_NOOP("Current maintainer"), "amantia@kdewebdev.org");
+ aboutData.addAuthor("Michal Rudolf", I18N_NOOP("Previous maintainer"), "mrudolf@kdewebdev.org");
+ aboutData.addAuthor("Marc Britton", I18N_NOOP("Original author"), "consume@optusnet.com.au");
+ aboutData.setTranslator (I18N_NOOP("_: NAME OF TRANSLATORS\nYour names"),
+ I18N_NOOP("_: EMAIL OF TRANSLATORS\nYour emails"));
+ KCmdLineArgs::init(argc, argv, &aboutData);
+ KCmdLineArgs::addCmdLineOptions(options);
+
+ KommanderWidget::inEditor = true;
+
+ KLocale::setMainCatalogue("kommander");
+ KApplication a(true, true);
+
+ KConfig *config = kapp->config();
+ config->setGroup("General");
+ bool splashScreen = config->readBoolEntry("SplashScreen", true);
+ KSplashScreen* splash = 0;
+ if (splashScreen) {
+ splash = new KSplashScreen(UserIcon("kommandersplash"));
+ splash->show();
+ }
+
+ MainWindow *mw = new MainWindow(false);
+ a.setMainWidget(mw);
+ mw->setCaption(i18n("Kommander Dialog Editor"));
+ mw->show();
+
+ if (splashScreen) {
+ splash->finish(mw);
+ delete splash;
+ }
+
+ return a.exec();
+}
+
diff --git a/kommander/editor/mainwindow.cpp b/kommander/editor/mainwindow.cpp
new file mode 100644
index 00000000..a90a3b07
--- /dev/null
+++ b/kommander/editor/mainwindow.cpp
@@ -0,0 +1,1903 @@
+/**********************************************************************
+ This file is based on Qt Designer, Copyright (C) 2000 Trolltech AS. All rights reserved.
+
+ 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.
+
+ Modified for Kommander:
+ (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ (C) 2008 Andras Mantia <amantia@kde.org>
+
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+
+#include "actiondnd.h"
+#include "actioneditorimpl.h"
+#include "assoctexteditorimpl.h"
+#include "defs.h"
+#include "dialog.h"
+#include "formfile.h"
+#include "formwindow.h"
+#include "globaldefs.h"
+#include "hierarchyview.h"
+#include "kommanderfactory.h"
+#include "mainwindow.h"
+#include "messagelog.h"
+#include "metadatabase.h"
+#include "multilineeditorimpl.h"
+#include "newformimpl.h"
+#include "pixmapchooser.h"
+#include "propertyeditor.h"
+#include "resource.h"
+#include "specialinformation.h"
+#include "widgetdatabase.h"
+#include "widgetfactory.h"
+#include "wizardeditorimpl.h"
+#include "workspace.h"
+
+#include <qaccel.h>
+#include <qbuffer.h>
+#include <qclipboard.h>
+#include <qdir.h>
+#include <qfeatures.h>
+#include <qfile.h>
+#include <qlabel.h>
+#include <qmetaobject.h>
+#include <qpixmap.h>
+#include <qregexp.h>
+#include <qstylefactory.h>
+#include <qstyle.h>
+#include <qtimer.h>
+#include <qtooltip.h>
+#include <qvbox.h>
+#include <qwhatsthis.h>
+#include <qwidget.h>
+#include <qwizard.h>
+#include <qworkspace.h>
+
+
+#include "qcompletionedit.h"
+#include "assistproc.h"
+
+#include <kdebug.h>
+#include <kaction.h>
+#include <kapplication.h>
+#include <kcmdlineargs.h>
+#include <kconfig.h>
+#include <kinputdialog.h>
+#include <klocale.h>
+#include <kmenubar.h>
+#include <kmessagebox.h>
+#include <kommanderversion.h>
+#include <kommanderwidget.h>
+#include <kprocess.h>
+#include <kstatusbar.h>
+#include <ktoolbar.h>
+#include <kurl.h>
+#include <kparts/partmanager.h>
+#include <kio/netaccess.h>
+
+extern QMap<QWidget*, QString> *qwf_functions;
+extern QMap<QWidget*, QString> *qwf_forms;
+extern QString *qwf_language;
+extern bool qwf_execute_code;
+extern bool qwf_stays_on_top;
+extern void set_splash_status(const QString &txt);
+/*### static bool tbSettingsRead = false; */
+
+MainWindow *MainWindow::self = 0;
+
+QString assistantPath()
+{
+ return "assistant";
+}
+
+
+static QString textNoAccel(const QString& text)
+{
+ QString t = text;
+ int i;
+ while ((i = t.find('&'))>= 0) {
+ t.remove(i,1);
+ }
+ return t;
+}
+
+
+MainWindow::MainWindow(bool asClient)
+ : KParts::DockMainWindow(0, "mainwindow", WType_TopLevel | WDestructiveClose | WGroupLeader),
+ grd(10, 10), sGrid(true), snGrid(true), restoreConfig(true), splashScreen(true),
+ docPath("$QTDIR/doc/html"), client(asClient), databaseAutoEdit(false), previewing(false)
+{
+ m_partManager = new KParts::PartManager(this);
+ //connect(m_partManager, SIGNAL(activePartChanged(KParts::Part * )), this, SLOT(slotActivePartChanged(KParts::Part * )));
+
+ init_colors();
+ inDebugMode = true; //debugging kommander
+
+ setupPlugins();
+
+ kapp->setMainWidget(this);
+ self = this;
+
+ prefDia = 0;
+ windowMenu = 0;
+ hierarchyView = 0;
+ actionEditor = 0;
+ wspace = 0;
+
+ statusBar()->clear();
+ statusBar()->addWidget(new QLabel(i18n("Welcome to the Kommander Editor"), statusBar()), 1);
+
+ setupMDI();
+ setupFileActions();
+ setupEditActions();
+ layoutToolBar = new KToolBar(this, "Layout");
+ ((KToolBar *) layoutToolBar)->setFullSize(false);
+ addToolBar(layoutToolBar, i18n("Layout"));
+ setupToolActions();
+ setupLayoutActions();
+ setupWorkspace();
+ setupHierarchyView();
+ setupPropertyEditor();
+ setupActionEditor();
+ setupMessageLog();
+ setupRunActions();
+ setupWindowActions();
+ setupSettingsActions();
+ setupHelpActions();
+ setupRMBMenus();
+
+ emit hasActiveForm(false);
+ emit hasActiveWindow(false);
+
+ lastPressWidget = 0;
+ kapp->installEventFilter(this);
+
+ QSize as(kapp->desktop()->size());
+ as -= QSize(30, 30);
+ resize(QSize(1200, 1000).boundedTo(as));
+
+ connect(kapp->clipboard(), SIGNAL(dataChanged()), this, SLOT(clipboardChanged()));
+ clipboardChanged();
+ layoutChilds = false;
+ layoutSelected = false;
+ breakLayout = false;
+ backPix = true;
+
+ readConfig();
+
+ // hack to make WidgetFactory happy (so it knows QWidget and QDialog for resetting properties)
+ QWidget *w = WidgetFactory::create(WidgetDatabase::idFromClassName("QWidget"), this, 0, false);
+ delete w;
+ w = WidgetFactory::create(WidgetDatabase::idFromClassName("Dialog"), this, 0, false);
+
+ delete w;
+ w = WidgetFactory::create(WidgetDatabase::idFromClassName("QLabel"), this, 0, false);
+ delete w;
+ w = WidgetFactory::create(WidgetDatabase::idFromClassName("QTabWidget"), this, 0, false);
+ delete w;
+ w = WidgetFactory::create(WidgetDatabase::idFromClassName("QFrame"), this, 0, false);
+ delete w;
+
+ assistant = new AssistProc(this, "Internal Assistant", assistantPath());
+ statusBar()->setSizeGripEnabled(true);
+ SpecialInformation::registerSpecials();
+
+ backupTimer = new QTimer(this);
+ connect(backupTimer, SIGNAL(timeout()), this, SLOT(slotCreateBackups()));
+ backupTimer->start(1000*60*5); //fire it every five minutes
+ //createGUI(0);
+
+}
+
+MainWindow::~MainWindow()
+{
+ MetaDataBase::clearDataBase();
+}
+
+void MainWindow::setupMDI()
+{
+ KDockWidget* toolDock = createDockWidget("Workspace", QPixmap(), 0L, "main_workspace");
+ QVBox *vbox = new QVBox(toolDock);
+ vbox->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
+ vbox->setMargin(1);
+ vbox->setLineWidth(1);
+
+ toolDock->setWidget(vbox);
+ toolDock->setDockSite(KDockWidget::DockCorner);
+ toolDock->setEnableDocking(KDockWidget::DockNone);
+ setView(toolDock);
+ setMainDockWidget(toolDock);
+
+ qworkspace = new QWorkspace(vbox);
+ qworkspace->setBackgroundMode(PaletteDark);
+ qworkspace->setBackgroundPixmap(PixmapChooser::loadPixmap("background.png",
+ PixmapChooser::NoSize));
+ qworkspace->setPaletteBackgroundColor(QColor(238, 238, 238));
+ qworkspace->setScrollBarsEnabled(true);
+ connect(qworkspace, SIGNAL(windowActivated(QWidget *)),
+ this, SLOT(activeWindowChanged(QWidget *)));
+ lastActiveFormWindow = 0;
+ qworkspace->setAcceptDrops(true);
+}
+
+void MainWindow::setupPropertyEditor()
+{
+ KDockWidget *dw = createDockWidget("Property Editor", QPixmap(), 0, i18n("Properties"));
+ propertyEditor = new PropertyEditor(dw);
+ //addToolBar(dw, Qt::DockLeft);
+ dw->setWidget(propertyEditor);
+ dw->manualDock(getMainDockWidget(), KDockWidget::DockLeft, 20);
+ dw->setCaption(i18n("Property Editor"));
+ QWhatsThis::add(propertyEditor,
+ i18n("<h2>The Property Editor</h2>"
+ "<p>You can change the appearance and behavior of the selected widget in the "
+ "property editor.</p>"
+ "<p>You can set properties for components and forms at design time and see the "
+ "immediately see the effects of the changes. "
+ "Each property has its own editor which (depending on the property) can be used "
+ "to enter "
+ "new values, open a special dialog, or to select values from a predefined list. "
+ "Click <b>F1</b> to get detailed help for the selected property.</p>"
+ "<p>You can resize the columns of the editor by dragging the separators in the "
+ "list's header.</p>"
+ "<p><b>Signal Handlers</b></p>"
+ "<p>In the Signal Handlers tab you can define connections between "
+ "the signals emitted by widgets and the slots in the form. "
+ "(These connections can also be made using the connection tool.)"));
+
+}
+
+
+void MainWindow::setupHierarchyView()
+{
+ if (hierarchyView)
+ return;
+ KDockWidget *dw = createDockWidget("Object Explorer", QPixmap(), 0, i18n("Widgets"));
+ hierarchyView = new HierarchyView(dw);
+ dw->setWidget(hierarchyView);
+ dw->setCaption(i18n("Object Explorer"));
+ QWhatsThis::add(hierarchyView,
+ i18n("<h2>The Object Explorer</h2>"
+ "<p>The Object Explorer provides an overview of the relationships "
+ "between the widgets in a form. You can use the clipboard functions using "
+ "a context menu for each item in the view. It is also useful for selecting widgets "
+ "in forms that have complex layouts.</p>"
+ "<p>The columns can be resized by dragging the separator in the list's header.</p>"
+ "<p>The second tab shows all the form's slots, class variables, includes, etc.</p>"));
+}
+
+void MainWindow::setupWorkspace()
+{
+ KDockWidget *dw = createDockWidget("Dialogs", QPixmap(), 0, i18n("Dialogs"));
+ QVBox *vbox = new QVBox(dw);
+ QCompletionEdit *edit = new QCompletionEdit(vbox);
+ QToolTip::add(edit, i18n("Start typing the buffer you want to switch to here (ALT+B)"));
+ QAccel *a = new QAccel(this);
+ a->connectItem(a->insertItem(ALT + Key_B), edit, SLOT(setFocus()));
+ wspace = new Workspace(vbox, this);
+ wspace->setBufferEdit(edit);
+ dw->setWidget(vbox);
+ dw->setCaption(i18n("Dialogs"));
+ QWhatsThis::add(wspace, i18n("<h2>The File Overview Window</h2>"
+ "<p>The File Overview Window displays all open dialogs.</p>"));
+
+}
+
+void MainWindow::setupActionEditor()
+{
+ KDockWidget *dw = createDockWidget("Action Editor", QPixmap(), 0, i18n("Actions"));
+ actionEditor = new ActionEditor(dw, "ActionEditor");
+ //addToolBar(dw, Qt::DockLeft);
+ dw->setWidget(actionEditor);
+ dw->setCaption(i18n("Action Editor"));
+ QWhatsThis::add(actionEditor, i18n("<b>The Action Editor</b>"
+ "<p>The Action Editor is used to add actions and action groups to "
+ "a form, and to connect actions to slots. Actions and action "
+ "groups can be dragged into menus and into toolbars, and may "
+ "feature keyboard shortcuts and tooltips. If actions have pixmaps "
+ "these are displayed on toolbar buttons and beside their names in " "menus.</p>"));
+}
+
+void MainWindow::setupMessageLog()
+{
+ KDockWidget *dw = createDockWidget("Message Log", QPixmap(), 0, i18n("Message Log"));
+ messageLog = new MessageLog(dw, "MessageLog");
+ dw->setWidget(messageLog);
+ dw->setCaption(i18n("Message Log"));
+ dw->manualDock(getMainDockWidget(), KDockWidget::DockBottom, 20);
+}
+
+void MainWindow::setupRMBMenus()
+{
+ rmbWidgets = new QPopupMenu(this);
+ actionEditCut->plug(rmbWidgets);
+ actionEditCopy->plug(rmbWidgets);
+ actionEditPaste->plug(rmbWidgets);
+ actionEditDelete->plug(rmbWidgets);
+
+ rmbWidgets->insertSeparator();
+ actionEditAdjustSize->plug(rmbWidgets);
+ actionEditHLayout->plug(rmbWidgets);
+ actionEditVLayout->plug(rmbWidgets);
+ actionEditGridLayout->plug(rmbWidgets);
+ actionEditSplitHorizontal->plug(rmbWidgets);
+ actionEditSplitVertical->plug(rmbWidgets);
+ actionEditBreakLayout->plug(rmbWidgets);
+ rmbWidgets->insertSeparator();
+ actionEditConnections->plug(rmbWidgets);
+ rmbFormWindow = new QPopupMenu(this);
+ actionEditPaste->plug(rmbFormWindow);
+ actionEditSelectAll->plug(rmbFormWindow);
+ actionEditAccels->plug(rmbFormWindow);
+ rmbFormWindow->insertSeparator();
+ actionEditAdjustSize->plug(rmbFormWindow);
+ actionEditHLayout->plug(rmbFormWindow);
+ actionEditVLayout->plug(rmbFormWindow);
+ actionEditGridLayout->plug(rmbFormWindow);
+ actionEditBreakLayout->plug(rmbFormWindow);
+ rmbFormWindow->insertSeparator();
+ actionEditConnections->plug(rmbFormWindow);
+ rmbFormWindow->insertSeparator();
+ actionEditFormSettings->plug(rmbFormWindow);
+}
+
+void MainWindow::toolSelected()
+{
+ if (!(sender())->inherits("KAction"))
+ return;
+ actionCurrentTool = (KAction*)sender();
+ emit currentToolChanged();
+ if (formWindow())
+ formWindow()->commandHistory()->emitUndoRedo();
+}
+
+int MainWindow::currentTool() const
+{
+ if (!actionCurrentTool)
+ return POINTER_TOOL;
+ return QString::fromLatin1(actionCurrentTool->name()).toInt();
+}
+
+void MainWindow::slotCreateBackups()
+{
+//create a backup of the opened forms
+ QWidgetList windows = qworkspace->windowList(QWorkspace::StackingOrder);
+ for (int i = 0; i < (int)windows.count(); ++i)
+ {
+ FormWindow* form = dynamic_cast<FormWindow*>(windows.at(i));
+ if (!form || !form->formFile())
+ continue;
+ QString fileName = form->formFile()->fileName();
+ QString backupName = fileName + ".backup";
+ bool modified = form->formFile()->isModified();
+ if (form->formFile()->hasTempFileName())
+ continue; //no need to create a backup
+ if (!modified)
+ continue;
+
+ form->formFile()->setFileName(backupName);
+ form->formFile()->setModified(true);
+ if (!form->formFile()->save(false))
+ {
+ KMessageBox::error(this, i18n("<qt>Cannot create backup file <i>%1</i>.</qt>").arg(backupName));
+ }
+ form->formFile()->setFileName(fileName);
+ form->formFile()->setModified(modified);
+ }
+}
+
+void MainWindow::runForm()
+{
+ if (previewing)
+ {
+ KMessageBox::information(this, i18n("There is a dialog already running."), i18n("Run"));
+ return;
+ }
+ FormWindow* form = activeForm();
+ if (!form || !form->formFile())
+ return;
+
+ QObjectList *editors = queryList("AssocTextEditor");
+ QObjectListIt it(*editors);
+ QObject *editor;
+
+ while ((editor = it.current()) != 0L)
+ {
+ ++it;
+ static_cast<AssocTextEditor*>(editor)->save();
+ }
+ delete editors;
+
+ if (form->formFile()->hasTempFileName())
+ {
+ if (!form->formFile()->saveAs())
+ return;
+ }
+
+ m_fileName = form->formFile()->fileName();
+ m_backupName = m_fileName + ".running";
+ m_modified = form->formFile()->isModified();
+
+ bool readOnlyFile = !QFileInfo(m_fileName).isWritable();
+ struct stat statbuf;
+ ::stat(m_fileName.local8Bit(), &statbuf);
+ if (!readOnlyFile && !KIO::NetAccess::file_copy(KURL::fromPathOrURL(m_fileName), KURL::fromPathOrURL(m_backupName), statbuf.st_mode, true))
+ {
+ KMessageBox::error(this, i18n("<qt>Cannot create temporary file <i>%1</i>.</qt>").arg(m_backupName));
+ return;
+ }
+ form->formFile()->setFileName(m_fileName);
+ if (!readOnlyFile || m_modified)
+ form->formFile()->setModified(true);
+ if (form->formFile()->save(false))
+ {
+ if (!readOnlyFile && !KIO::NetAccess::file_copy(KURL::fromPathOrURL(m_fileName), KURL::fromPathOrURL(m_fileName + ".backup"), statbuf.st_mode, true))
+ {
+ KMessageBox::error(this, i18n("<qt>Cannot create backup file <i>%1</i>.</qt>").arg(m_fileName + ".backup"));
+ }
+ ::chmod(m_fileName.local8Bit(), S_IRWXU);
+ KProcess* process = new KProcess;
+ process->setUseShell(true);
+ (*process) << "kmdr-executor" << QString("\"%1\"").arg(form->formFile()->fileName());
+ connect(process, SIGNAL(receivedStdout(KProcess*, char*, int)), messageLog,
+ SLOT(receivedStdout(KProcess*, char*, int)));
+ connect(process, SIGNAL(receivedStderr(KProcess*, char*, int)), messageLog,
+ SLOT(receivedStderr(KProcess*, char*, int)));
+ connect(process, SIGNAL(processExited(KProcess*)), SLOT(closeRunningForm(KProcess*)));
+ messageLog->clear(MessageLog::All);
+ previewing = process->start(KProcess::NotifyOnExit, KProcess::AllOutput);
+ }
+}
+
+
+void MainWindow::runForm4()
+{
+ if (previewing)
+ {
+ KMessageBox::information(this, i18n("There is a dialog already running."), i18n("Run"));
+ return;
+ }
+ FormWindow* form = activeForm();
+ if (!form || !form->formFile())
+ return;
+
+ QObjectList *editors = queryList("AssocTextEditor");
+ QObjectListIt it(*editors);
+ QObject *editor;
+
+ while ((editor = it.current()) != 0L)
+ {
+ ++it;
+ static_cast<AssocTextEditor*>(editor)->save();
+ }
+ delete editors;
+
+ if (form->formFile()->hasTempFileName())
+ {
+ if (!form->formFile()->saveAs())
+ return;
+ }
+
+ m_fileName = form->formFile()->fileName();
+ m_backupName = m_fileName + ".running";
+ m_modified = form->formFile()->isModified();
+
+ bool readOnlyFile = !QFileInfo(m_fileName).isWritable();
+ struct stat statbuf;
+ ::stat(m_fileName.local8Bit(), &statbuf);
+ if (!readOnlyFile && !KIO::NetAccess::file_copy(KURL::fromPathOrURL(m_fileName), KURL::fromPathOrURL(m_backupName), statbuf.st_mode, true))
+ {
+ KMessageBox::error(this, i18n("<qt>Cannot create temporary file <i>%1</i>.</qt>").arg(m_backupName));
+ return;
+ }
+ form->formFile()->setFileName(m_fileName);
+ if (!readOnlyFile || m_modified)
+ form->formFile()->setModified(true);
+ if (form->formFile()->save(false))
+ {
+ if (!readOnlyFile && !KIO::NetAccess::file_copy(KURL::fromPathOrURL(m_fileName), KURL::fromPathOrURL(m_fileName + ".backup"), statbuf.st_mode, true))
+ {
+ KMessageBox::error(this, i18n("<qt>Cannot create backup file <i>%1</i>.</qt>").arg(m_fileName + ".backup"));
+ }
+ ::chmod(m_fileName.local8Bit(), S_IRWXU);
+ KProcess* process = new KProcess;
+ process->setUseShell(true);
+ (*process) << "kommander" << QString("\"%1\"").arg(form->formFile()->fileName());
+ connect(process, SIGNAL(receivedStdout(KProcess*, char*, int)), messageLog,
+ SLOT(receivedStdout(KProcess*, char*, int)));
+ connect(process, SIGNAL(receivedStderr(KProcess*, char*, int)), messageLog,
+ SLOT(receivedStderr(KProcess*, char*, int)));
+ connect(process, SIGNAL(processExited(KProcess*)), SLOT(closeRunningForm(KProcess*)));
+ messageLog->clear(MessageLog::All);
+ previewing = process->start(KProcess::NotifyOnExit, KProcess::AllOutput);
+ }
+}
+
+
+void MainWindow::closeRunningForm(KProcess* process)
+{
+ previewing = false;
+ delete process;
+
+ if (QFileInfo(m_backupName).exists())
+ {
+ struct stat statbuf;
+ ::stat(m_fileName.local8Bit(), &statbuf);
+ FormWindow* form = activeForm();
+ KIO::NetAccess::file_move(KURL::fromPathOrURL(m_backupName), KURL::fromPathOrURL(m_fileName), statbuf.st_mode, true);
+ form->formFile()->setModified(m_modified);
+ }
+}
+
+void MainWindow::showProperties(QObject *o)
+{
+ if (!o->isWidgetType()) {
+ propertyEditor->setWidget(o, lastActiveFormWindow);
+ if (lastActiveFormWindow)
+ hierarchyView->setFormWindow(lastActiveFormWindow, lastActiveFormWindow->mainContainer());
+ else
+ hierarchyView->setFormWindow(0, 0);
+ return;
+ }
+ QWidget *w = (QWidget*)o;
+ setupHierarchyView();
+ FormWindow *fw = (FormWindow*)isAFormWindowChild(w);
+ if (fw) {
+ propertyEditor->setWidget(w, fw);
+ hierarchyView->setFormWindow(fw, w);
+ } else {
+ propertyEditor->setWidget(0, 0);
+ hierarchyView->setFormWindow(0, 0);
+ }
+
+ if (currentTool() == POINTER_TOOL && fw &&
+ (!qworkspace->activeWindow() || !qworkspace->activeWindow()->inherits("SourceEditor")))
+ fw->setFocus();
+}
+
+void MainWindow::resetTool()
+{
+ actionPointerTool->setChecked(true);
+ actionCurrentTool = actionPointerTool;
+ emit currentToolChanged();
+}
+
+void MainWindow::updateProperties(QObject *)
+{
+ if (propertyEditor)
+ propertyEditor->refetchData();
+}
+
+bool MainWindow::eventFilter(QObject *o, QEvent *e)
+{
+ if (!o || !e || !o->isWidgetType())
+ return QMainWindow::eventFilter(o, e);
+
+ QWidget *w = 0;
+ bool passiveInteractor = WidgetFactory::isPassiveInteractor(o);
+ switch (e->type()) {
+ case QEvent::AccelOverride:
+ if (((QKeyEvent*)e)->key() == Key_F1 &&
+ (((QKeyEvent*)e)->state() & ShiftButton) != ShiftButton) {
+ w = (QWidget*)o;
+ while (w) {
+ if (w->inherits("PropertyList"))
+ break;
+ w = w->parentWidget(true);
+ }
+ if (w) {
+ propertyEditor->propertyList()->showCurrentWhatsThis();
+ ((QKeyEvent*)e)->accept();
+ return true;
+ }
+ }
+ break;
+ case QEvent::Accel:
+ if ((((QKeyEvent*)e)->key() == Key_A ||
+ ((QKeyEvent*)e)->key() == Key_E) &&
+ ((QKeyEvent*)e)->state() & ControlButton) {
+ if (qWorkspace()->activeWindow() &&
+ qWorkspace()->activeWindow()->inherits("SourceEditor")) {
+ ((QKeyEvent*)e)->ignore();
+ return true;
+ }
+ }
+ break;
+ case QEvent::MouseButtonPress:
+ if (((QMouseEvent*)e)->button() == MidButton && dynamic_cast<KommanderWidget *>(o))
+ {
+ AssocTextEditor *editor = new AssocTextEditor((QWidget*)o, formWindow(), propertyEditor, m_partManager,
+ this, "AssocTextEditor", false); //deletes itself!
+ editor->show();
+ ((QKeyEvent*)e)->accept();
+ return true;
+ }
+ case QEvent::ContextMenu:
+ if (o->inherits("QDesignerPopupMenu"))
+ break;
+ if (o && currentTool() == POINTER_TOOL && (o->inherits("QDesignerMenuBar") ||
+ o->inherits("QDesignerToolBar") ||
+ (o->inherits("QComboBox") || o->inherits("QToolButton") || o->inherits("QDesignerToolBarSeparator")) &&
+ o->parent() && o->parent()->inherits("QDesignerToolBar"))) {
+ QWidget *w = (QWidget*)o;
+ if (w->inherits("QToolButton") || w->inherits("QComboBox") || w->inherits("QDesignerToolBarSeparator"))
+ w = w->parentWidget();
+ QWidget *pw = w->parentWidget();
+ while (pw) {
+ if (pw->inherits("FormWindow")) {
+ ((FormWindow*)pw)->emitShowProperties(w);
+ if (!o->inherits("QDesignerToolBar"))
+ return !o->inherits("QToolButton") && !o->inherits("QMenuBar") &&
+ !o->inherits("QComboBox") && !o->inherits("QDesignerToolBarSeparator");
+ }
+ pw = pw->parentWidget();
+ }
+ }
+ if (o && (o->inherits("QDesignerToolBar") || o->inherits("QDockWindowHandle"))
+ && e->type() == QEvent::ContextMenu)
+ break;
+ if (isAToolBarChild(o) && currentTool() != CONNECT_TOOL)
+ break;
+ if (o && o->inherits("QSizeGrip"))
+ break;
+ if (!(w = isAFormWindowChild(o)) || o->inherits("SizeHandle") || o->inherits("OrderIndicator"))
+ break;
+ if (!w->hasFocus())
+ w->setFocus();
+ if (!passiveInteractor || currentTool() != ORDER_TOOL) {
+ if(e->type() == QEvent::ContextMenu) {
+ ((FormWindow*)w)->handleContextMenu((QContextMenuEvent*)e,
+ ((FormWindow*)w)->designerWidget(o));
+ return true;
+ } else {
+ ((FormWindow*)w)->handleMousePress((QMouseEvent*)e,
+ ((FormWindow*)w)->designerWidget(o));
+ }
+ }
+ lastPressWidget = (QWidget*)o;
+ if (passiveInteractor)
+ QTimer::singleShot(0, formWindow(), SLOT(visibilityChanged()));
+ if (currentTool() == CONNECT_TOOL)
+ return true;
+ return !passiveInteractor;
+ case QEvent::MouseButtonRelease:
+ lastPressWidget = 0;
+ if (isAToolBarChild(o) && currentTool() != CONNECT_TOOL)
+ break;
+ if (o && o->inherits("QSizeGrip"))
+ break;
+ if (!(w = isAFormWindowChild(o)) || o->inherits("SizeHandle") || o->inherits("OrderIndicator"))
+ break;
+ if (!passiveInteractor)
+ ((FormWindow*)w)->handleMouseRelease((QMouseEvent*)e, ((FormWindow*)w)->designerWidget(o));
+ if (passiveInteractor) {
+ selectionChanged();
+ QTimer::singleShot(0, formWindow(), SLOT(visibilityChanged()));
+ }
+ return !passiveInteractor;
+ case QEvent::MouseMove:
+ if (isAToolBarChild(o) && currentTool() != CONNECT_TOOL)
+ break;
+ w = isAFormWindowChild(o);
+ if (lastPressWidget != (QWidget*)o && w &&
+ !o->inherits("SizeHandle") && !o->inherits("OrderIndicator") &&
+ !o->inherits("QPopupMenu") && !o->inherits("QMenuBar") &&
+ !o->inherits("QSizeGrip"))
+ return true;
+ if (o && o->inherits("QSizeGrip"))
+ break;
+ if (lastPressWidget != (QWidget*)o ||
+ (!w || o->inherits("SizeHandle") || o->inherits("OrderIndicator")))
+ break;
+ if (!passiveInteractor)
+ ((FormWindow*)w)->handleMouseMove((QMouseEvent*)e, ((FormWindow*)w)->designerWidget(o));
+ return !passiveInteractor;
+ case QEvent::KeyPress:
+ if (((QKeyEvent*)e)->key() == Key_Escape && currentTool() != POINTER_TOOL) {
+ resetTool();
+ return false;
+ }
+ if (!(w = isAFormWindowChild(o)) || o->inherits("SizeHandle") || o->inherits("OrderIndicator"))
+ break;
+ ((FormWindow*)w)->handleKeyPress((QKeyEvent*)e, ((FormWindow*)w)->designerWidget(o));
+ if (((QKeyEvent*)e)->isAccepted())
+ return true;
+ break;
+ case QEvent::MouseButtonDblClick:
+ if (!(w = isAFormWindowChild(o)) || o->inherits("SizeHandle") || o->inherits("OrderIndicator")) {
+ if (o && o->inherits("QToolButton") && ((QToolButton*)o)->isOn() &&
+ o->parent() && o->parent()->inherits("QToolBar") && formWindow())
+ formWindow()->setToolFixed();
+ break;
+ }
+ if (currentTool() == ORDER_TOOL) {
+ ((FormWindow*)w)->handleMouseDblClick((QMouseEvent*)e, ((FormWindow*)w)->designerWidget(o));
+ return true;
+ }
+ if (!WidgetFactory::isPassiveInteractor(o))
+ return openEditor(((FormWindow*)w)->designerWidget(o), (FormWindow*)w);
+ return true;
+ case QEvent::KeyRelease:
+ if (!(w = isAFormWindowChild(o)) || o->inherits("SizeHandle") || o->inherits("OrderIndicator"))
+ break;
+ ((FormWindow*)w)->handleKeyRelease((QKeyEvent*)e, ((FormWindow*)w)->designerWidget(o));
+ if (((QKeyEvent*)e)->isAccepted())
+ return true;
+ break;
+ case QEvent::Hide:
+ if (!(w = isAFormWindowChild(o)) || o->inherits("SizeHandle") || o->inherits("OrderIndicator"))
+ break;
+ if (((FormWindow*)w)->isWidgetSelected((QWidget*)o))
+ ((FormWindow*)w)->selectWidget((QWidget*)o, false);
+ break;
+ case QEvent::Enter:
+ case QEvent::Leave:
+ if (!(w = isAFormWindowChild(o)) || o->inherits("SizeHandle") || o->inherits("OrderIndicator") || o->inherits("QDesignerMenuBar"))
+ break;
+ return true;
+ case QEvent::Resize:
+ case QEvent::Move:
+ if (!(w = isAFormWindowChild(o)) || o->inherits("SizeHandle") || o->inherits("OrderIndicator"))
+ break;
+ if (WidgetFactory::layoutType((QWidget*)o->parent()) != WidgetFactory::NoLayout) {
+ ((FormWindow*)w)->updateSelection((QWidget*)o);
+ if (e->type() != QEvent::Resize)
+ ((FormWindow*)w)->updateChildSelections((QWidget*)o);
+ }
+ break;
+ case QEvent::Close:
+ break;
+ case QEvent::DragEnter:
+ if (o == qWorkspace() || o == workspace() || o == workspace()->viewport()) {
+ workspace()->contentsDragEnterEvent((QDragEnterEvent*)e);
+ return true;
+ }
+ break;
+ case QEvent::DragMove:
+ if (o == qWorkspace() || o == workspace() || o == workspace()->viewport()) {
+ workspace()->contentsDragMoveEvent((QDragMoveEvent*)e);
+ return true;
+ }
+ break;
+ case QEvent::Drop:
+ if (o == qWorkspace() || o == workspace() || o == workspace()->viewport()) {
+ workspace()->contentsDropEvent((QDropEvent*)e);
+ return true;
+ }
+ break;
+ case QEvent::Show:
+ if (o != this)
+ break;
+ if (((QShowEvent*)e)->spontaneous())
+ break;
+ QApplication::sendPostedEvents(qworkspace, QEvent::ChildInserted);
+ showEvent((QShowEvent*)e);
+ checkTempFiles();
+ return true;
+ case QEvent::Wheel:
+ if (!(w = isAFormWindowChild(o)) || o->inherits("SizeHandle") || o->inherits("OrderIndicator"))
+ break;
+ return true;
+ case QEvent::FocusIn:
+ if (!o->inherits("FormWindow") && isAFormWindowChild(o))
+ return true;
+ break;
+ case QEvent::FocusOut:
+ if (!o->inherits("FormWindow") && isAFormWindowChild(o))
+ return true;
+ break;
+ default:
+ return QMainWindow::eventFilter(o, e);
+ }
+
+ return QMainWindow::eventFilter(o, e);
+}
+
+QWidget *MainWindow::isAFormWindowChild(QObject *o) const
+{
+ if (o->parent() && o->parent()->inherits("QWizard") && !o->inherits("QPushButton"))
+ return 0;
+ while (o) {
+ if (o->inherits("FormWindow"))
+ return (QWidget*)o;
+ o = o->parent();
+ }
+ return 0;
+}
+
+QWidget *MainWindow::isAToolBarChild(QObject *o) const
+{
+ while (o) {
+ if (o->inherits("QDesignerToolBar"))
+ return (QWidget*)o;
+ if (o->inherits("FormWindow"))
+ return 0;
+ o = o->parent();
+ }
+ return 0;
+}
+
+FormWindow *MainWindow::formWindow()
+{
+ if (qworkspace->activeWindow()) {
+ FormWindow *fw = 0;
+ if (qworkspace->activeWindow()->inherits("FormWindow"))
+ fw = (FormWindow*)qworkspace->activeWindow();
+ else if (lastActiveFormWindow &&
+ qworkspace->windowList().find(lastActiveFormWindow) != -1)
+ fw = lastActiveFormWindow;
+ return fw;
+ }
+ return 0;
+}
+
+void MainWindow::insertFormWindow(FormWindow *fw)
+{
+ if (fw)
+ QWhatsThis::add(fw, i18n("<b>The Form Window</b>"
+ "<p>Use the various tools to add widgets or to change the layout "
+ "and behavior of the components in the form. Select one or multiple "
+ "widgets to move them or lay them out. If a single widget is chosen it can "
+ "be resized using the resize handles.</p>"
+ "<p>Changes in the <b>Property Editor</b> are visible at design time, "
+ "and you can preview the form in different styles.</p>"
+ "<p>You can change the grid resolution, or turn the grid off in the "
+ "<b>Preferences</b> dialog from the <b>Edit</b> menu."
+ "<p>You can have several forms open, and all open forms are listed "
+ "in the <b>Form List</b>."));
+
+ connect(fw, SIGNAL(showProperties(QObject *)),
+ this, SLOT(showProperties(QObject *)));
+ connect(fw, SIGNAL(updateProperties(QObject *)),
+ this, SLOT(updateProperties(QObject *)));
+ connect(this, SIGNAL(currentToolChanged()),
+ fw, SLOT(currentToolChanged()));
+ connect(fw, SIGNAL(selectionChanged()),
+ this, SLOT(selectionChanged()));
+ connect(fw, SIGNAL(undoRedoChanged(bool, bool, const QString &, const QString &)),
+ this, SLOT(updateUndoRedo(bool, bool, const QString &, const QString &)));
+
+ fw->show();
+ fw->currentToolChanged();
+ if (fw->caption().isEmpty() && qstrlen(fw->name()) )
+ fw->setCaption(fw->name());
+ fw->mainContainer()->setCaption(fw->caption());
+ WidgetFactory::saveDefaultProperties(fw->mainContainer(),
+ WidgetDatabase::
+ idFromClassName(WidgetFactory::classNameOf(fw->mainContainer())));
+ activeWindowChanged(fw);
+ emit formWindowsChanged();
+}
+
+
+
+bool MainWindow::unregisterClient(FormWindow *w)
+{
+ propertyEditor->closed(w);
+ objectHierarchy()->closed(w);
+ if (w == lastActiveFormWindow)
+ lastActiveFormWindow = 0;
+
+ if (actionEditor->form() == w)
+ actionEditor->setFormWindow(0);
+
+ return true;
+}
+
+void MainWindow::activeWindowChanged(QWidget *w)
+{
+ QWidget *old = formWindow();
+ if (w && w->inherits("FormWindow"))
+ {
+ FormWindow *fw = (FormWindow *) w;
+ lastActiveFormWindow = fw;
+ lastActiveFormWindow->updateUndoInfo();
+ emit hasActiveForm(true);
+ if (formWindow())
+ {
+ formWindow()->emitShowProperties();
+ emit formModified(formWindow()->commandHistory()->isModified());
+ if (currentTool() != POINTER_TOOL)
+ formWindow()->clearSelection();
+ }
+ workspace()->activeFormChanged(fw);
+ actionEditor->setFormWindow(lastActiveFormWindow);
+ emit formWindowChanged();
+
+ } else if (w == propertyEditor)
+ {
+ propertyEditor->resetFocus();
+ } else if (!lastActiveFormWindow)
+ {
+ emit formWindowChanged();
+ emit hasActiveForm(false);
+ actionEditUndo->setEnabled(false);
+ actionEditRedo->setEnabled(false);
+ }
+
+ if (!w)
+ {
+ emit formWindowChanged();
+ emit hasActiveForm(false);
+ propertyEditor->clear();
+ hierarchyView->clear();
+ updateUndoRedo(false, false, QString::null, QString::null);
+ }
+
+ selectionChanged();
+
+ if (currentTool() == ORDER_TOOL && w != old)
+ emit currentToolChanged();
+
+ emit hasActiveWindow(!!qworkspace->activeWindow());
+}
+
+
+void MainWindow::updateUndoRedo(bool undoAvailable, bool redoAvailable,
+ const QString &undoCmd, const QString &redoCmd)
+{
+ actionEditUndo->setEnabled(undoAvailable);
+ actionEditRedo->setEnabled(redoAvailable);
+ if (!undoCmd.isEmpty())
+ actionEditUndo->setText(i18n("&Undo: %1").arg(undoCmd));
+ else
+ actionEditUndo->setText(i18n("&Undo: Not Available"));
+ if (!redoCmd.isEmpty())
+ actionEditRedo->setText(i18n("&Redo: %1").arg(redoCmd));
+ else
+ actionEditRedo->setText(i18n("&Redo: Not Available"));
+
+ actionEditUndo->setToolTip(textNoAccel(actionEditUndo->text()));
+ actionEditRedo->setToolTip(textNoAccel(actionEditRedo->text()));
+
+ if (currentTool() == ORDER_TOOL) {
+ actionEditUndo->setEnabled(false);
+ actionEditRedo->setEnabled(false);
+ }
+}
+
+QWorkspace *MainWindow::qWorkspace() const
+{
+ return qworkspace;
+}
+
+void MainWindow::popupFormWindowMenu(const QPoint & gp, FormWindow *fw)
+{
+ QValueList<int> ids;
+ QMap<QString, int> commands;
+
+ setupRMBSpecialCommands(ids, commands, fw);
+ setupRMBProperties(ids, commands, fw);
+
+ kapp->processEvents();
+ int r = rmbFormWindow->exec(gp);
+
+ handleRMBProperties(r, commands, fw);
+ handleRMBSpecialCommands(r, commands, fw);
+
+ for (QValueList<int>::Iterator i = ids.begin(); i != ids.end(); ++i)
+ rmbFormWindow->removeItem(*i);
+}
+
+void MainWindow::popupWidgetMenu(const QPoint &gp, FormWindow * /*fw*/, QWidget * w)
+{
+ QValueList<int> ids;
+ QMap<QString, int> commands;
+
+ setupRMBSpecialCommands(ids, commands, w);
+ setupRMBProperties(ids, commands, w);
+
+ kapp->processEvents();
+ int r = rmbWidgets->exec(gp);
+
+ handleRMBProperties(r, commands, w);
+ handleRMBSpecialCommands(r, commands, w);
+
+ for (QValueList<int>::Iterator i = ids.begin(); i != ids.end(); ++i)
+ rmbWidgets->removeItem(*i);
+}
+
+void MainWindow::setupRMBProperties(QValueList<int> &ids, QMap<QString, int> &props, QWidget *w)
+{
+ const QMetaProperty* text = w->metaObject()->property(w->metaObject()->findProperty("text", true), true);
+ if (text && qstrcmp(text->type(), "QString") != 0)
+ text = 0;
+ const QMetaProperty* title = w->metaObject()->property(w->metaObject()->findProperty("title", true), true);
+ if (title && qstrcmp(title->type(), "QString") != 0)
+ title = 0;
+ const QMetaProperty* pagetitle =
+ w->metaObject()->property(w->metaObject()->findProperty("pageTitle", true), true);
+ if (pagetitle && qstrcmp(pagetitle->type(), "QString") != 0)
+ pagetitle = 0;
+ const QMetaProperty* pixmap =
+ w->metaObject()->property(w->metaObject()->findProperty("pixmap", true), true);
+ if (pixmap && qstrcmp(pixmap->type(), "QPixmap") != 0)
+ pixmap = 0;
+
+ if (text && text->designable(w) ||
+ title && title->designable(w) ||
+ pagetitle && pagetitle->designable(w) ||
+ pixmap && pixmap->designable(w)) {
+ int id = 0;
+ if (ids.isEmpty())
+ ids << rmbWidgets->insertSeparator(0);
+ if (pixmap && pixmap->designable(w)) {
+ ids << (id = rmbWidgets->insertItem(i18n("Choose Pixmap..."), -1, 0));
+ props.insert("pixmap", id);
+ }
+ if (text && text->designable(w) && !w->inherits("QTextEdit")) {
+ ids << (id = rmbWidgets->insertItem(i18n("Edit Text..."), -1, 0));
+ props.insert("text", id);
+ }
+ if (title && title->designable(w)) {
+ ids << (id = rmbWidgets->insertItem(i18n("Edit Title..."), -1, 0));
+ props.insert("title", id);
+ }
+ if (pagetitle && pagetitle->designable(w)) {
+ ids << (id = rmbWidgets->insertItem(i18n("Edit Page Title..."), -1, 0));
+ props.insert("pagetitle", id);
+ }
+ }
+}
+
+void MainWindow::setupRMBSpecialCommands(QValueList<int> &ids, QMap<QString, int> &commands, QWidget *w)
+{
+ int id;
+ // KommanderWidget doesn't derive from QObject
+ KommanderWidget *atw = dynamic_cast<KommanderWidget *>(w);
+ if(atw)
+ {
+ if(ids.isEmpty())
+ ids << rmbWidgets->insertSeparator(0);
+
+ ids << (id = rmbWidgets->insertItem(i18n("Edit Kommander Text..."), -1, 0));
+
+ commands.insert("assoc", id);
+ }
+
+ if (w->inherits("QTabWidget")) {
+ if (ids.isEmpty())
+ ids << rmbWidgets->insertSeparator(0);
+ if (((QDesignerTabWidget*)w)->count() > 1) {
+ ids << (id = rmbWidgets->insertItem(i18n("Delete Page"), -1, 0));
+ commands.insert("remove", id);
+ }
+ ids << (id = rmbWidgets->insertItem(i18n("Add Page"), -1, 0));
+ commands.insert("add", id);
+ }
+ if (w->inherits("QToolBox")) {
+ if (ids.isEmpty())
+ ids << rmbWidgets->insertSeparator(0);
+ if (((QToolBox*)w)->count() > 1) {
+ ids << (id = rmbWidgets->insertItem(i18n("Delete Page"), -1, 0));
+ commands.insert("remove", id);
+ }
+ ids << (id = rmbWidgets->insertItem(i18n("Add Page"), -1, 0));
+ commands.insert("add", id);
+ }
+ if (WidgetFactory::hasSpecialEditor(WidgetDatabase::idFromClassName(WidgetFactory::classNameOf(w))))
+ {
+ if (ids.isEmpty())
+ ids << rmbWidgets->insertSeparator(0);
+ ids << (id = rmbWidgets->insertItem(i18n("Edit..."), -1, 0));
+ commands.insert("edit", id);
+ }
+}
+
+void MainWindow::setupRMBSpecialCommands(QValueList<int> &ids, QMap<QString, int> &commands, FormWindow *fw)
+{
+ int id;
+
+ // KommanderWidget doesn't derive from QObject
+ KommanderWidget *atw = dynamic_cast<KommanderWidget *>(fw->mainContainer());
+ if(atw)
+ {
+ if(ids.isEmpty())
+ ids << rmbFormWindow->insertSeparator(0);
+
+ ids << (id = rmbFormWindow->insertItem(i18n("Edit Kommander Text..."), -1, 0));
+
+ commands.insert("assoc", id);
+ }
+
+ if (fw->mainContainer()->inherits("QWizard")) {
+ if (ids.isEmpty())
+ ids << rmbFormWindow->insertSeparator(0);
+
+ if (((QWizard*)fw->mainContainer())->pageCount() > 1) {
+ ids << (id = rmbFormWindow->insertItem(i18n("Delete Page"), -1, 0));
+ commands.insert("remove", id);
+ }
+
+ ids << (id = rmbFormWindow->insertItem(i18n("Add Page"), -1, 0));
+ commands.insert("add", id);
+
+ ids << (id = rmbFormWindow->insertItem(i18n("Edit Page Title..."), -1, 0));
+ commands.insert("rename", id);
+
+ ids << (id = rmbFormWindow->insertItem(i18n("Edit Pages..."), -1, 0));
+ commands.insert("edit", id);
+
+ } else if (fw->mainContainer()->inherits("QMainWindow")) {
+ if (ids.isEmpty())
+ ids << rmbFormWindow->insertSeparator(0);
+ ids << (id = rmbFormWindow->insertItem(i18n("Add Menu Item"), -1, 0));
+ commands.insert("add_menu_item", id);
+ ids << (id = rmbFormWindow->insertItem(i18n("Add Toolbar"), -1, 0));
+ commands.insert("add_toolbar", id);
+ }
+}
+
+void MainWindow::handleRMBProperties(int id, QMap<QString, int> &props, QWidget *w)
+{
+ if (id == props[ "text" ]) {
+ bool ok = false;
+ QString text;
+ if (w->inherits("QTextView") || w->inherits("QLabel")) {
+ text = TextEditor::getText(this, w->property("text").toString());
+ ok = !text.isEmpty();
+ } else {
+ text = KInputDialog::getText(i18n("Text"), i18n("New text:"), w->property("text").toString(), &ok, this);
+ }
+ if (ok) {
+ QString pn(i18n("Set the 'text' of '%1'").arg(w->name()));
+ SetPropertyCommand *cmd = new SetPropertyCommand(pn, formWindow(), w, propertyEditor,
+ "text", w->property("text"),
+ text, QString::null, QString::null);
+ cmd->execute();
+ formWindow()->commandHistory()->addCommand(cmd);
+ MetaDataBase::setPropertyChanged(w, "text", true);
+ }
+ } else if (id == props[ "title" ]) {
+ bool ok = false;
+ QString title = KInputDialog::getText(i18n("Title"), i18n("New title:"), w->property("title").toString(), &ok, this);
+ if (ok) {
+ QString pn(i18n("Set the 'title' of '%1'").arg(w->name()));
+ SetPropertyCommand *cmd = new SetPropertyCommand(pn, formWindow(), w, propertyEditor,
+ "title", w->property("title"),
+ title, QString::null, QString::null);
+ cmd->execute();
+ formWindow()->commandHistory()->addCommand(cmd);
+ MetaDataBase::setPropertyChanged(w, "title", true);
+ }
+ } else if (id == props[ "pagetitle" ]) {
+ bool ok = false;
+ QString text = KInputDialog::getText(i18n("Page Title"), i18n("New page title:"), w->property("pageTitle").toString(), &ok, this);
+ if (ok) {
+ QString pn(i18n("Set the 'pageTitle' of '%1'").arg(w->name()));
+ SetPropertyCommand *cmd = new SetPropertyCommand(pn, formWindow(), w, propertyEditor,
+ "pageTitle", w->property("pageTitle"),
+ text, QString::null, QString::null);
+ cmd->execute();
+ formWindow()->commandHistory()->addCommand(cmd);
+ MetaDataBase::setPropertyChanged(w, "pageTitle", true);
+ }
+ } else if (id == props[ "pixmap" ]) {
+ QPixmap oldPix = w->property("pixmap").toPixmap();
+ QPixmap pix = qChoosePixmap(this, formWindow(), oldPix);
+ if (!pix.isNull()) {
+ QString pn(i18n("Set the 'pixmap' of '%1'").arg(w->name()));
+ SetPropertyCommand *cmd = new SetPropertyCommand(pn, formWindow(), w, propertyEditor,
+ "pixmap", w->property("pixmap"),
+ pix, QString::null, QString::null);
+ cmd->execute();
+ formWindow()->commandHistory()->addCommand(cmd);
+ MetaDataBase::setPropertyChanged(w, "pixmap", true);
+ }
+ }
+}
+
+void MainWindow::handleRMBSpecialCommands(int id, QMap<QString, int> &commands, QWidget *w)
+{
+ // associated text menu
+ // we assume all widgets derive from KommanderWidget [MB02]
+ if(id == commands["assoc"])
+ {
+ AssocTextEditor *editor = new AssocTextEditor(w, formWindow(), propertyEditor, m_partManager,
+ this, "AssocTextEditor", false); //deletes itself!
+ editor->show();
+ }
+
+ if (w->inherits("QTabWidget")) {
+ QTabWidget *tw = (QTabWidget*)w;
+ if (id == commands[ "add" ]) {
+ AddTabPageCommand *cmd = new AddTabPageCommand(i18n("Add Page to %1").arg(tw->name()), formWindow(),
+ tw, "Tab");
+ formWindow()->commandHistory()->addCommand(cmd);
+ cmd->execute();
+ } else if (id == commands[ "remove" ]) {
+ if (tw->currentPage()) {
+ QDesignerTabWidget *dtw = (QDesignerTabWidget*)tw;
+ DeleteTabPageCommand *cmd = new DeleteTabPageCommand(i18n("Delete Page %1 of %2").
+ arg(dtw->pageTitle()).arg(tw->name()),
+ formWindow(), tw, tw->currentPage());
+ formWindow()->commandHistory()->addCommand(cmd);
+ cmd->execute();
+ }
+ }
+ }
+ if (w->inherits("QToolBox")) {
+ QToolBox *tw = (QToolBox*)w;
+ if (id == commands[ "add" ]) {
+ AddToolBoxPageCommand *cmd = new AddToolBoxPageCommand(i18n("Add Page to %1").arg(tw->name()), formWindow(),
+ tw, "Page");
+ formWindow()->commandHistory()->addCommand(cmd);
+ cmd->execute();
+ } else if (id == commands[ "remove" ]) {
+ if (tw->currentItem()) {
+ EditorToolBox *dtw = (EditorToolBox*)tw;
+ DeleteToolBoxPageCommand *cmd = new DeleteToolBoxPageCommand(i18n("Delete Page %1 of %2").
+ arg(dtw->pageTitle()).arg(tw->name()),
+ formWindow(), tw, tw->currentItem());
+ formWindow()->commandHistory()->addCommand(cmd);
+ cmd->execute();
+ }
+ }
+ }
+ if (WidgetFactory::hasSpecialEditor(WidgetDatabase::idFromClassName(WidgetFactory::classNameOf(w)))) {
+ if (id == commands[ "edit" ])
+ WidgetFactory::editWidget(WidgetDatabase::idFromClassName(WidgetFactory::classNameOf(w)), this, w, formWindow());
+ }
+}
+
+void MainWindow::handleRMBSpecialCommands(int id, QMap<QString, int> &commands, FormWindow *fw)
+{
+
+ if(id == commands["assoc"])
+ {
+ AssocTextEditor *editor = new AssocTextEditor(fw->mainContainer(), formWindow(), propertyEditor, m_partManager,
+ this, "AssocTextEditor", false); //deletes itself!
+ editor->show();
+ }
+
+
+ if (fw->mainContainer()->inherits("QWizard")) {
+ QWizard *wiz = (QWizard*)fw->mainContainer();
+ if (id == commands[ "add" ]) {
+ AddWizardPageCommand *cmd = new AddWizardPageCommand(i18n("Add Page to %1").arg(wiz->name()), formWindow(),
+ wiz, "Page");
+ formWindow()->commandHistory()->addCommand(cmd);
+ cmd->execute();
+ } else if (id == commands[ "remove" ]) {
+ if (wiz->currentPage()) {
+ QDesignerWizard *dw = (QDesignerWizard*)wiz;
+ DeleteWizardPageCommand *cmd = new DeleteWizardPageCommand(i18n("Delete Page %1 of %2").
+ arg(dw->pageTitle()).arg(wiz->name()),
+ formWindow(), wiz, wiz->indexOf(wiz->currentPage()));
+ formWindow()->commandHistory()->addCommand(cmd);
+ cmd->execute();
+ }
+ } else if (id == commands[ "edit" ]) {
+ WizardEditor *e = new WizardEditor(this, wiz, fw);
+ e->exec();
+ delete e;
+ } else if (id == commands[ "rename" ]) {
+
+ bool ok = false;
+ QDesignerWizard *dw = (QDesignerWizard*)wiz;
+ QString text = KInputDialog::getText(i18n("Page Title"), i18n("New page title:"), dw->pageTitle(), &ok, this);
+ if (ok) {
+ QString pn(i18n("Rename page %1 of %2").arg(dw->pageTitle()).arg(wiz->name()));
+ RenameWizardPageCommand *cmd = new RenameWizardPageCommand(pn, formWindow()
+ , wiz, wiz->indexOf(wiz->currentPage()), text);
+ formWindow()->commandHistory()->addCommand(cmd);
+ cmd->execute();
+ }
+ }
+ } else if (fw->mainContainer()->inherits("QMainWindow")) {
+ QMainWindow *mw = (QMainWindow*)fw->mainContainer();
+ if (id == commands[ "add_toolbar" ]) {
+ AddToolBarCommand *cmd = new AddToolBarCommand(i18n("Add Toolbar to '%1'").arg(formWindow()->name()), formWindow(), mw);
+ formWindow()->commandHistory()->addCommand(cmd);
+ cmd->execute();
+ } else if (id == commands[ "add_menu_item" ]) {
+ AddMenuCommand *cmd = new AddMenuCommand(i18n("Add Menu to '%1'").arg(formWindow()->name()), formWindow(), mw);
+ formWindow()->commandHistory()->addCommand(cmd);
+ cmd->execute();
+ }
+ }
+}
+
+void MainWindow::clipboardChanged()
+{
+ QString text(kapp->clipboard()->text());
+ QString start("<!DOCTYPE UI-SELECTION>");
+ actionEditPaste->setEnabled(text.left(start.length()) == start);
+}
+
+void MainWindow::selectionChanged()
+{
+ layoutChilds = false;
+ layoutSelected = false;
+ breakLayout = false;
+ if (!formWindow()) {
+ actionEditCut->setEnabled(false);
+ actionEditCopy->setEnabled(false);
+ actionEditDelete->setEnabled(false);
+ actionEditAdjustSize->setEnabled(false);
+ actionEditHLayout->setEnabled(false);
+ actionEditVLayout->setEnabled(false);
+ actionEditSplitHorizontal->setEnabled(false);
+ actionEditSplitVertical->setEnabled(false);
+ actionEditGridLayout->setEnabled(false);
+ actionEditBreakLayout->setEnabled(false);
+ actionEditLower->setEnabled(false);
+ actionEditRaise->setEnabled(false);
+ actionEditAdjustSize->setEnabled(false);
+ return;
+ }
+
+ int selectedWidgets = formWindow()->numSelectedWidgets();
+ bool enable = selectedWidgets > 0;
+ actionEditCut->setEnabled(enable);
+ actionEditCopy->setEnabled(enable);
+ actionEditDelete->setEnabled(enable);
+ actionEditLower->setEnabled(enable);
+ actionEditRaise->setEnabled(enable);
+
+ actionEditAdjustSize->setEnabled(false);
+ actionEditSplitHorizontal->setEnabled(false);
+ actionEditSplitVertical->setEnabled(false);
+
+ enable = false;
+ QWidgetList widgets = formWindow()->selectedWidgets();
+ if (selectedWidgets > 1) {
+ int unlaidout = 0;
+ int laidout = 0;
+ for (QWidget *w = widgets.first(); w; w = widgets.next()) {
+ if (!w->parentWidget() || WidgetFactory::layoutType(w->parentWidget()) == WidgetFactory::NoLayout)
+ unlaidout++;
+ else
+ laidout++;
+ }
+ actionEditHLayout->setEnabled(unlaidout > 1);
+ actionEditVLayout->setEnabled(unlaidout > 1);
+ actionEditSplitHorizontal->setEnabled(unlaidout > 1);
+ actionEditSplitVertical->setEnabled(unlaidout > 1);
+ actionEditGridLayout->setEnabled(unlaidout > 1);
+ actionEditBreakLayout->setEnabled(laidout > 0);
+ actionEditAdjustSize->setEnabled(laidout > 0);
+ layoutSelected = unlaidout > 1;
+ breakLayout = laidout > 0;
+ } else if (selectedWidgets == 1) {
+ QWidget *w = widgets.first();
+ bool isContainer = WidgetDatabase::isContainer(WidgetDatabase::idFromClassName(WidgetFactory::classNameOf(w))) ||
+ w == formWindow()->mainContainer();
+ actionEditAdjustSize->setEnabled(!w->parentWidget() ||
+ WidgetFactory::layoutType(w->parentWidget()) == WidgetFactory::NoLayout);
+
+ if (!isContainer) {
+ actionEditHLayout->setEnabled(false);
+ actionEditVLayout->setEnabled(false);
+ actionEditGridLayout->setEnabled(false);
+ if (w->parentWidget() && WidgetFactory::layoutType(w->parentWidget()) != WidgetFactory::NoLayout) {
+ actionEditBreakLayout->setEnabled(!isAToolBarChild(w));
+ breakLayout = true;
+ } else {
+ actionEditBreakLayout->setEnabled(false);
+ }
+ } else {
+ if (WidgetFactory::layoutType(w) == WidgetFactory::NoLayout) {
+ if (!formWindow()->hasInsertedChildren(w)) {
+ actionEditHLayout->setEnabled(false);
+ actionEditVLayout->setEnabled(false);
+ actionEditGridLayout->setEnabled(false);
+ actionEditBreakLayout->setEnabled(false);
+ } else {
+ actionEditHLayout->setEnabled(true);
+ actionEditVLayout->setEnabled(true);
+ actionEditGridLayout->setEnabled(true);
+ actionEditBreakLayout->setEnabled(false);
+ layoutChilds = true;
+ }
+ if (w->parentWidget() && WidgetFactory::layoutType(w->parentWidget()) != WidgetFactory::NoLayout) {
+ actionEditBreakLayout->setEnabled(!isAToolBarChild(w));
+ breakLayout = true;
+ }
+ } else {
+ actionEditHLayout->setEnabled(false);
+ actionEditVLayout->setEnabled(false);
+ actionEditGridLayout->setEnabled(false);
+ actionEditBreakLayout->setEnabled(!isAToolBarChild(w));
+ breakLayout = true;
+ }
+ }
+ } else if (selectedWidgets == 0 && formWindow()) {
+ actionEditAdjustSize->setEnabled(true);
+ QWidget *w = formWindow()->mainContainer();
+ if (WidgetFactory::layoutType(w) == WidgetFactory::NoLayout) {
+ if (!formWindow()->hasInsertedChildren(w)) {
+ actionEditHLayout->setEnabled(false);
+ actionEditVLayout->setEnabled(false);
+ actionEditGridLayout->setEnabled(false);
+ actionEditBreakLayout->setEnabled(false);
+ } else {
+ actionEditHLayout->setEnabled(true);
+ actionEditVLayout->setEnabled(true);
+ actionEditGridLayout->setEnabled(true);
+ actionEditBreakLayout->setEnabled(false);
+ layoutChilds = true;
+ }
+ } else {
+ actionEditHLayout->setEnabled(false);
+ actionEditVLayout->setEnabled(false);
+ actionEditGridLayout->setEnabled(false);
+ actionEditBreakLayout->setEnabled(true);
+ breakLayout = true;
+ }
+ } else {
+ actionEditHLayout->setEnabled(false);
+ actionEditVLayout->setEnabled(false);
+ actionEditGridLayout->setEnabled(false);
+ actionEditBreakLayout->setEnabled(false);
+ }
+}
+
+void MainWindow::writeConfig()
+{
+ KConfig* config = kapp->config();
+
+ config->setGroup("General");
+ config->writeEntry("RestoreWorkspace", restoreConfig);
+ config->writeEntry("SplashScreen", splashScreen);
+ config->writeEntry("DocPath", docPath);
+ config->writeEntry("TemplatePath", templPath);
+
+ config->setGroup("Grid");
+ config->writeEntry("Snap", snGrid);
+ config->writeEntry("Show", sGrid);
+ config->writeEntry("x", grid().x());
+ config->writeEntry("y", grid().y());
+
+ config->setGroup("Background");
+ config->writeEntry("UsePixmap", backPix);
+ config->writeEntry("Color", qworkspace->backgroundColor().name());
+
+ /*
+ config->setGroup("Geometry");
+ config->writeEntry("MainWindow", size());
+ config->writeEntry("MainWindowMax", isMaximized());
+ */
+ writeDockConfig(config, "Docks");
+
+ config->setGroup("View");
+ config->writeEntry("TextLabels", usesTextLabel());
+ config->writeEntry("BigIcons", usesBigPixmaps());
+
+ actionCollection()->writeShortcutSettings("Keys", config);
+
+ config->deleteGroup("Recent Files");
+ actionRecent->saveEntries(config, "Recent Files");
+}
+
+void MainWindow::readConfig()
+{
+ KConfig *config = kapp->config();
+
+ config->setGroup("General");
+ restoreConfig = config->readBoolEntry("RestoreWorkspace", true);
+ splashScreen = config->readBoolEntry("SplashScreen", true);
+ docPath = config->readEntry("DocPath", docPath);
+ templPath = config->readEntry("TemplatePath", QString::null);
+
+ config->setGroup("Grid");
+ sGrid = config->readBoolEntry("Snap", true);
+ snGrid = config->readBoolEntry("Show", true);
+ grd.setX(config->readNumEntry("x", 10));
+ grd.setY(config->readNumEntry("y", 10));
+
+ config->setGroup("Background");
+ if (config->readBoolEntry("UsePixmap", true))
+ qworkspace->setBackgroundPixmap(PixmapChooser::loadPixmap("background.png", PixmapChooser::NoSize));
+ else
+ qworkspace->setBackgroundColor(QColor(config->readEntry("Color", "#f0f0f0")).rgb());
+
+ /*
+ config->setGroup("Geometry");
+ QSize winSize = size();
+ resize(config->readSizeEntry("MainWindow", &winSize));
+ if (config->readBoolEntry("MainWindowMax", false))
+ showMaximized();
+ */
+ readDockConfig(config, "Docks");
+
+
+ config->setGroup("View");
+ setUsesTextLabel(config->readBoolEntry("TextLabels", false));
+ setUsesBigPixmaps(config->readBoolEntry("BigIcons", false));
+
+ actionCollection()->readShortcutSettings("Keys", config);
+
+ actionRecent->loadEntries(config, "Recent Files");
+
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+ for(int i = 0; i < args->count(); i++)
+ {
+ QFileInfo fi(args->url(i).path());
+ if (fi.exists() && openFormWindow(args->url(i).path()))
+ actionRecent->addURL(args->url(i));
+ }
+ args->clear();
+}
+
+
+HierarchyView *MainWindow::objectHierarchy() const
+{
+ if (!hierarchyView)
+ ((MainWindow *) this)->setupHierarchyView();
+ return hierarchyView;
+}
+
+QPopupMenu *MainWindow::setupNormalHierarchyMenu(QWidget *parent)
+{
+ QPopupMenu *menu = new QPopupMenu(parent);
+
+ actionEditCut->plug(menu);
+ actionEditCopy->plug(menu);
+ actionEditPaste->plug(menu);
+ actionEditDelete->plug(menu);
+
+ return menu;
+}
+
+QPopupMenu *MainWindow::setupTabWidgetHierarchyMenu(QWidget *parent, const char *addSlot, const char *removeSlot)
+{
+ QPopupMenu *menu = new QPopupMenu(parent);
+
+ menu->insertItem(i18n("Add Page"), parent, addSlot);
+ menu->insertItem(i18n("Delete Page"), parent, removeSlot);
+ menu->insertSeparator();
+ actionEditCut->plug(menu);
+ actionEditCopy->plug(menu);
+ actionEditPaste->plug(menu);
+ actionEditDelete->plug(menu);
+
+ return menu;
+}
+
+void MainWindow::closeEvent(QCloseEvent *e)
+{
+ QWidgetList windows = qWorkspace()->windowList();
+ QWidgetListIt wit(windows);
+ while (wit.current())
+ {
+ QWidget *w = wit.current();
+ ++wit;
+ if (w->inherits("FormWindow"))
+ {
+ if (!((FormWindow *) w)->formFile()->close())
+ {
+ e->ignore();
+ return;
+ }
+ }
+ }
+
+ writeConfig();
+ hide();
+ e->accept();
+
+ if (client)
+ {
+ QDir home(QDir::homeDirPath());
+ home.remove(".designerpid");
+ }
+}
+
+Workspace *MainWindow::workspace() const
+{
+ if (!wspace)
+ ((MainWindow*)this)->setupWorkspace();
+ return wspace;
+}
+
+PropertyEditor *MainWindow::propertyeditor() const
+{
+ if (!propertyEditor)
+ ((MainWindow*)this)->setupPropertyEditor();
+ return propertyEditor;
+}
+
+ActionEditor *MainWindow::actioneditor() const
+{
+ if (!actionEditor)
+ ((MainWindow*)this)->setupActionEditor();
+ return actionEditor;
+}
+
+bool MainWindow::openEditor(QWidget* w, FormWindow*)
+{
+ if (WidgetFactory::hasSpecialEditor(WidgetDatabase::idFromClassName(WidgetFactory::classNameOf(w)))) {
+ statusBar()->message(i18n("Edit %1...").arg(w->className()));
+ WidgetFactory::editWidget(WidgetDatabase::idFromClassName(WidgetFactory::classNameOf(w)), this, w, formWindow());
+ statusBar()->clear();
+ return true;
+ }
+
+ const QMetaProperty* text = w->metaObject()->property(w->metaObject()->findProperty("text", true), true);
+ const QMetaProperty* title = w->metaObject()->property(w->metaObject()->findProperty("title", true), true);
+ if (text && text->designable(w)) {
+ bool ok = false;
+ QString text;
+ if (w->inherits("QTextView") || w->inherits("QLabel")) {
+ text = TextEditor::getText(this, w->property("text").toString());
+ ok = !text.isEmpty();
+ } else {
+ text = KInputDialog::getText(i18n("Text"), i18n("New text:"), w->property("text").toString(), &ok, this);
+ }
+ if (ok) {
+ QString pn(i18n("Set the 'text' of '%2'").arg(w->name()));
+ SetPropertyCommand *cmd = new SetPropertyCommand(pn, formWindow(), w, propertyEditor,
+ "text", w->property("text"),
+ text, QString::null, QString::null);
+ cmd->execute();
+ formWindow()->commandHistory()->addCommand(cmd);
+ MetaDataBase::setPropertyChanged(w, "text", true);
+ }
+ return true;
+ }
+ if (title && title->designable(w)) {
+ bool ok = false;
+ QString text;
+ text = KInputDialog::getText(i18n("Title"), i18n("New title:"), w->property("title").toString(), &ok, this);
+ if (ok) {
+ QString pn(i18n("Set the 'title' of '%2'").arg(w->name()));
+ SetPropertyCommand *cmd = new SetPropertyCommand(pn, formWindow(), w, propertyEditor,
+ "title", w->property("title"),
+ text, QString::null, QString::null);
+ cmd->execute();
+ formWindow()->commandHistory()->addCommand(cmd);
+ MetaDataBase::setPropertyChanged(w, "title", true);
+ }
+ return true;
+ }
+
+ return true;
+}
+
+void MainWindow::setGrid(const QPoint &p)
+{
+ if (p == grd)
+ return;
+ grd = p;
+ QWidgetList windows = qWorkspace()->windowList();
+ for (QWidget *w = windows.first(); w; w = windows.next()) {
+ if (!w->inherits("FormWindow"))
+ continue;
+ ((FormWindow*)w)->mainContainer()->update();
+ }
+}
+
+void MainWindow::setShowGrid(bool b)
+{
+ if (b == sGrid)
+ return;
+ sGrid = b;
+ QWidgetList windows = qWorkspace()->windowList();
+ for (QWidget *w = windows.first(); w; w = windows.next()) {
+ if (!w->inherits("FormWindow"))
+ continue;
+ ((FormWindow*)w)->mainContainer()->update();
+ }
+}
+
+void MainWindow::setSnapGrid(bool b)
+{
+ if (b == snGrid)
+ return;
+ snGrid = b;
+}
+
+QString MainWindow::documentationPath() const
+{
+ QString result = docPath;
+
+ if (docPath[0] == '$') {
+ int fs = docPath.find('/');
+ if (fs == -1)
+ fs = docPath.find('\\');
+
+ if (fs > -1) {
+ result = docPath.mid(1, fs-1);
+ } else {
+ fs=docPath.length();
+ result = docPath.right(fs-1);
+ }
+ result = getenv(result.latin1()) + docPath.right(docPath.length()-fs);
+ }
+
+ return result;
+}
+
+void MainWindow::windowsMenuActivated(int id)
+{
+ QWidget* w = qworkspace->windowList().at(id);
+ if (w)
+ w->setFocus();
+}
+
+
+
+void MainWindow::checkTempFiles()
+{
+ QString s = QDir::homeDirPath() + "/.designer";
+ QString baseName = s+ "/saved-form-";
+ if (!QFile::exists(baseName + "1.kmdr"))
+ return;
+ QDir d(s);
+ d.setNameFilter("*.kmdr");
+ QStringList lst = d.entryList();
+ QApplication::restoreOverrideCursor();
+ bool load = KMessageBox::questionYesNo(this,
+ i18n("Kommander found some temporary saved files, which were\n"
+ "written when Kommander crashed last time. Do you want to\n"
+ "load these files?"), i18n("Restoring Last Session"), i18n("Load"), i18n("Do Not Load")) == KMessageBox::Yes;
+ QApplication::setOverrideCursor(waitCursor);
+ for (QStringList::Iterator it = lst.begin(); it != lst.end(); ++it) {
+ if (load)
+ openFormWindow(s + "/" + *it, false);
+ d.remove(*it);
+ }
+}
+
+void MainWindow::showDialogHelp()
+{
+ QWidget *w = (QWidget*)sender();
+ w = w->topLevelWidget();
+
+ QString link = "designer-manual-12.html#";
+
+ if (w->inherits("NewFormBase"))
+ link += "dialog-file-new";
+ else if (w->inherits("CreateTemplate"))
+ link += "dialog-file-create-template";
+ else if (w->inherits("EditSlotsBase"))
+ link += "dialog-edit-slots";
+ else if (w->inherits("ConnectionViewerBase"))
+ link += "dialog-view-connections";
+ else if (w->inherits("FormSettingsBase"))
+ link += "dialog-edit-form-settings";
+ else if (w->inherits("Preferences"))
+ link += "dialog-edit-preferences";
+ else if (w->inherits("PixmapCollectionEditor"))
+ link += "dialog-image-collection";
+ else if (w->inherits("DatabaseConnectionBase"))
+ link += "dialog-edit-database-connections";
+ else if (w->inherits("FindDialog"))
+ link += "dialog-find-text";
+ else if (w->inherits("ReplaceDialog"))
+ link += "dialog-replace-text";
+ else if (w->inherits("GotoLineDialog"))
+ link += "dialog-go-to-line";
+ else if (w->inherits("ConnectionEditorBase"))
+ link += "dialog-edit-connections";
+ else if (w->inherits("PaletteEditorBase"))
+ link += "dialog-edit-palette";
+ else if (w->inherits("ListBoxEditorBase"))
+ link += "dialog-edit-listbox";
+ else if (w->inherits("ListViewEditorBase"))
+ link += "dialog-edit-listview";
+ else if (w->inherits("IconViewEditorBase"))
+ link += "dialog-edit-iconview";
+ else if (w->inherits("TableEditorBase"))
+ link += "dialog-edit-table";
+
+ else {
+ KMessageBox::information(this,
+ i18n("There is no help available for this dialog at the moment."), i18n("Help"));
+ return;
+ }
+
+ if (assistant)
+ assistant->sendRequest(link+'\n');
+}
+
+
+
+void MainWindow::fileOpenRecent(const KURL& filename)
+{
+ if (!QFile::exists(filename.path()))
+ {
+ KMessageBox::error(this, i18n("<qt>Could not open file:<br><b>%1</b><br>File does not exist.</qt>").
+ arg(filename.path()), i18n("Open File"));
+ actionRecent->removeURL(filename);
+ }
+ else
+ fileOpen(filename.path());
+}
+
+void MainWindow::setupPlugins()
+{
+ KommanderFactory::loadPlugins();
+}
+
+
+
+void MainWindow::setModified(bool b, QWidget *window)
+{
+ QWidget *w = window;
+ while (w)
+ {
+ if (w->inherits("FormWindow"))
+ {
+ ((FormWindow *) w)->modificationChanged(b);
+ return;
+ }
+ w = w->parentWidget(true);
+ if (w->inherits("FormWindow"))
+ {
+ ((FormWindow *) w)->modificationChanged(b);
+ return;
+ }
+ w = w->parentWidget(true);
+ }
+}
+
+
+void MainWindow::updateWorkspace()
+{
+}
+
+QWidget *MainWindow::findRealForm(QWidget *wid)
+{
+ QWidgetList windows = qWorkspace()->windowList();
+ for (QWidget *w = windows.first(); w; w = windows.next()) {
+ if (QString(w->name()) == QString(wid->name()))
+ return w;
+ }
+ return 0;
+}
+
+void MainWindow::formNameChanged(FormWindow*)
+{
+}
+
+
+int MainWindow::currentLayoutDefaultSpacing() const
+{
+ if (((MainWindow*)this)->formWindow())
+ return ((MainWindow*)this)->formWindow()->layoutDefaultSpacing();
+ return BOXLAYOUT_DEFAULT_SPACING;
+}
+
+int MainWindow::currentLayoutDefaultMargin() const
+{
+ if (((MainWindow*)this)->formWindow())
+ return ((MainWindow*)this)->formWindow()->layoutDefaultMargin();
+ return BOXLAYOUT_DEFAULT_MARGIN;
+}
+
+QString MainWindow::whatsThisFrom(const QString&)
+{
+ return QString::null;
+}
+
+void MainWindow::slotActivePartChanged(KParts::Part * part)
+{
+// kdDebug(24000) << "ActivePartChanged" << part << endl;
+ if (part) // if part == 0L the pointer m_oldKTextEditor is not useable
+ {
+ // guiFactory()->removeClient(part);
+ }
+ createGUI(part);
+ if (part)
+ {
+ guiFactory()->addClient(part);
+ }
+}
+
+#include "mainwindow.moc"
+
diff --git a/kommander/editor/mainwindow.h b/kommander/editor/mainwindow.h
new file mode 100644
index 00000000..7a18438f
--- /dev/null
+++ b/kommander/editor/mainwindow.h
@@ -0,0 +1,317 @@
+/**********************************************************************
+ This file is based on Qt Designer, Copyright (C) 2000 Trolltech AS. All rights reserved.
+
+ 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.
+
+ Modified for Kommander:
+ (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+
+**********************************************************************/
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include "metadatabase.h"
+
+#include <kparts/dockmainwindow.h>
+#include <kdockwidget.h>
+
+#include <qmap.h>
+#include <qguardedptr.h>
+#include <qobjectlist.h>
+
+class ActionEditor;
+class AssistProc;
+class FindDialog;
+class FormFile;
+class FormWindow;
+class GotoLineDialog;
+class HierarchyView;
+class KAction;
+class KActionCollection;
+class KProcess;
+class KRecentFilesAction;
+class KToggleAction;
+class KToolBar;
+class KURL;
+class PropertyEditor;
+class QCloseEvent;
+class QMenuBar;
+class QTimer;
+class QWidget;
+class QWorkspace;
+class MessageLog;
+class ReplaceDialog;
+class Workspace;
+
+#if defined(Q_FULL_TEMPLATE_INSTANTIATION)
+#include <qtoolbar.h>
+#else
+class QToolBar;
+#endif
+class Preferences;
+
+namespace KParts {
+ class PartManager;
+}
+
+
+class MainWindow : public KParts::DockMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow( bool asClient );
+ ~MainWindow();
+
+ HierarchyView *objectHierarchy() const;
+ Workspace *workspace() const;
+ PropertyEditor *propertyeditor() const;
+ ActionEditor *actioneditor() const;
+
+ void resetTool();
+ int currentTool() const;
+
+ FormWindow *formWindow();
+
+ bool unregisterClient( FormWindow *w );
+ QWidget *isAFormWindowChild( QObject *o ) const;
+ QWidget *isAToolBarChild( QObject *o ) const;
+
+ void insertFormWindow( FormWindow *fw );
+ QWorkspace *qWorkspace() const;
+
+ void popupFormWindowMenu( const QPoint &gp, FormWindow *fw );
+ void popupWidgetMenu( const QPoint &gp, FormWindow *fw, QWidget *w );
+
+ QPopupMenu *setupNormalHierarchyMenu( QWidget *parent );
+ QPopupMenu *setupTabWidgetHierarchyMenu( QWidget *parent, const char *addSlot, const char *removeSlot );
+
+ FormWindow *openFormWindow( const QString &fn, bool validFileName = TRUE, FormFile *ff = 0 );
+
+ void setGrid( const QPoint &p );
+ void setShowGrid( bool b );
+ void setSnapGrid( bool b );
+ QPoint grid() const { return grd; }
+ bool showGrid() const { return sGrid; }
+ bool snapGrid() const { return snGrid && sGrid; }
+
+ QString documentationPath() const;
+
+ static MainWindow *self;
+ void saveAllTemp();
+
+ QString templatePath() const { return templPath; }
+
+ bool isPreviewing() const { return previewing; }
+
+ FormWindow *activeForm() const { return lastActiveFormWindow; }
+
+ void setModified( bool b, QWidget *window );
+ void updateWorkspace();
+
+ void formNameChanged( FormWindow *fw );
+
+ int currentLayoutDefaultSpacing() const;
+ int currentLayoutDefaultMargin() const;
+
+
+public slots:
+ void showProperties( QObject *w );
+ void updateProperties( QObject *w );
+ void showDialogHelp();
+ void slotActivePartChanged(KParts::Part * );
+
+signals:
+ void addedFormFile(FormFile *);
+ void removedFormFile(FormFile *);
+ void currentToolChanged();
+ void hasActiveForm( bool );
+ void hasActiveWindow( bool );
+
+ void formModified( bool );
+ void formWindowsChanged();
+ void formWindowChanged();
+
+protected:
+ bool eventFilter( QObject *o, QEvent *e );
+ void closeEvent( QCloseEvent *e );
+
+public slots:
+ void fileNew();
+ void fileClose();
+ void fileOpen();
+ void fileOpen(const QString &filename);
+ void fileOpenRecent(const KURL& name);
+ bool fileSave();
+ bool fileSaveForm(); // not visible in menu, called from fileSave
+ bool fileSaveAs();
+ void fileSaveAll();
+ void fileCreateTemplate();
+
+ void editUndo();
+ void editRedo();
+ void editCut();
+ void editCopy();
+ void editPaste();
+ void editDelete();
+ void editSelectAll();
+ void editLower();
+ void editRaise();
+ void editAdjustSize();
+ void editLayoutHorizontal();
+ void editLayoutVertical();
+ void editLayoutHorizontalSplit();
+ void editLayoutVerticalSplit();
+ void editLayoutGrid();
+ void editLayoutContainerHorizontal();
+ void editLayoutContainerVertical();
+ void editLayoutContainerGrid();
+ void editBreakLayout();
+ void editAccels();
+ void editConnections();
+ void editFindGlobal();
+
+ void editFormSettings();
+ void editPreferences();
+ void editShortcuts();
+ void editPlugins();
+ void editExternalTool(int id);
+ void editToolExited(KProcess*);
+ void editToolOutput(KProcess*, char*, int);
+ void configureEditor();
+
+ void runForm();
+ void runForm4();
+
+private slots:
+ void activeWindowChanged( QWidget *w );
+ void updateUndoRedo( bool, bool, const QString &, const QString & );
+
+ void toolSelected();
+
+ void clipboardChanged();
+ void selectionChanged();
+
+ void chooseDocPath();
+ void windowsMenuActivated( int id );
+ void setupWindowActions();
+ void createNewTemplate();
+
+ void closeRunningForm(KProcess* process);
+ void slotCreateBackups();
+
+private:
+ void setupMDI();
+ void setupEditActions();
+ void setupToolActions();
+ void setupLayoutActions();
+ void setupFileActions();
+ void setupSettingsActions();
+ void setupRunActions();
+ void setupHelpActions();
+ void setupRMBMenus();
+
+ void setupPropertyEditor();
+ void setupHierarchyView();
+ void setupWorkspace();
+ void setupActionEditor();
+ void setupMessageLog();
+ void setupPlugins();
+
+ QWidget* previewFormInternal( QStyle* style = 0, QPalette* pal = 0 );
+
+ void writeConfig();
+ void readConfig();
+
+ void setupRMBProperties( QValueList<int> &ids, QMap<QString, int> &props, QWidget *w );
+ void handleRMBProperties( int id, QMap<QString, int> &props, QWidget *w );
+ void setupRMBSpecialCommands( QValueList<int> &ids, QMap<QString, int> &commands, QWidget *w );
+ void handleRMBSpecialCommands( int id, QMap<QString, int> &commands, QWidget *w );
+ void setupRMBSpecialCommands( QValueList<int> &ids, QMap<QString, int> &commands, FormWindow *w );
+ void handleRMBSpecialCommands( int id, QMap<QString, int> &commands, FormWindow *w );
+ bool openEditor( QWidget *w, FormWindow *fw );
+ void checkTempFiles();
+
+ void addRecentlyOpened(const QString &fn);
+ QWidget *findRealForm( QWidget *w );
+
+ QString whatsThisFrom( const QString &key );
+
+private:
+ PropertyEditor *propertyEditor;
+ HierarchyView *hierarchyView;
+ Workspace *wspace;
+ QWidget *lastPressWidget;
+ QWorkspace *qworkspace;
+ KMenuBar *menubar;
+ FormWindow *lastActiveFormWindow;
+ bool breakLayout, layoutChilds, layoutSelected;
+ QPoint grd;
+ bool sGrid, snGrid;
+ bool restoreConfig;
+ bool backPix;
+ bool splashScreen;
+ QString docPath;
+
+ KAction *actionEditUndo, *actionEditRedo, *actionEditCut, *actionEditCopy,
+ *actionEditPaste, *actionEditDelete, *actionEditAdjustSize,
+ *actionEditHLayout, *actionEditVLayout, *actionEditGridLayout,
+ *actionEditSplitHorizontal, *actionEditSplitVertical,
+ *actionEditSelectAll, *actionEditBreakLayout, *actionEditConnections,
+ *actionEditLower, *actionEditRaise, *actionEditFindGlobal;
+
+ KToggleAction* actionPointerTool, *actionConnectTool, *actionOrderTool;
+ KAction* actionCurrentTool;
+ KAction *actionEditFormSettings, *actionEditAccels;
+ KRecentFilesAction* actionRecent;
+
+ QPopupMenu *rmbWidgets;
+ QPopupMenu *rmbFormWindow;
+ QPopupMenu *windowMenu, *fileMenu;
+
+ QToolBar *layoutToolBar;
+ KToolBar *fileTb;
+
+ Preferences *prefDia;
+ QMap<QString,QString> propertyDocumentation;
+ bool client;
+ QString templPath;
+ ActionEditor *actionEditor;
+
+ bool databaseAutoEdit;
+ QTimer *updateSlotsTimer;
+ QTimer *backupTimer;
+ bool inDebugMode;
+ QObjectList debuggingForms;
+ QString lastOpenFilter;
+ QString menuHelpFile;
+ AssistProc *assistant;
+
+ bool previewing;
+ MessageLog* messageLog;
+
+ // Paths of external Kommander tools for Editor
+ QStringList m_editorTools;
+ QString m_toolOutput;
+ KParts::PartManager *m_partManager;
+
+ QString m_fileName;
+ QString m_backupName;
+ bool m_modified;
+
+public:
+ QString lastSaveFilter;
+
+};
+
+#endif
diff --git a/kommander/editor/mainwindowactions.cpp b/kommander/editor/mainwindowactions.cpp
new file mode 100644
index 00000000..f7657d26
--- /dev/null
+++ b/kommander/editor/mainwindowactions.cpp
@@ -0,0 +1,1201 @@
+/**********************************************************************
+ This file is based on Qt Designer, Copyright (C) 2000 Trolltech AS. All rights reserved.
+
+ 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.
+
+ Modified for Kommander:
+ (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+
+**********************************************************************/
+
+#include "mainwindow.h"
+
+#include <qapplication.h>
+#include <qclipboard.h>
+#include <qfileinfo.h>
+#include <qlineedit.h>
+#include <qlistbox.h>
+#include <qsignalmapper.h>
+#include <qspinbox.h>
+#include <qstatusbar.h>
+#include <qstylefactory.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qworkspace.h>
+
+#include "defs.h"
+#include "widgetdatabase.h"
+#include "widgetfactory.h"
+#include "preferences.h"
+#include "formwindow.h"
+#include "newformimpl.h"
+#include "resource.h"
+#include "workspace.h"
+#include "createtemplate.h"
+#include "hierarchyview.h"
+#include "formsettingsimpl.h"
+#include "styledbutton.h"
+#include "connectioneditorimpl.h"
+#include "actioneditorimpl.h"
+#include "formfile.h"
+#ifndef QT_NO_SQL
+#include "dbconnectionsimpl.h"
+#include "dbconnectionimpl.h"
+#endif
+#include "command.h"
+
+
+#include <kaction.h>
+#include <kapplication.h>
+#include <kfiledialog.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <kkeydialog.h>
+#include <klocale.h>
+#include <kmenubar.h>
+#include <kmessagebox.h>
+#include <kpopupmenu.h>
+#include <kprocess.h>
+#include <kstandarddirs.h>
+#include <kstatusbar.h>
+#include <kstdguiitem.h>
+#include <kurl.h>
+
+#include <ktexteditor/document.h>
+#include <ktexteditor/view.h>
+#include <ktexteditor/configinterface.h>
+
+#include <stdlib.h>
+
+const QString toolbarHelp = "<p>Toolbars contain a number of buttons to "
+"provide quick access to often used functions.%1"
+"<br>Click on the toolbar handle to hide the toolbar, "
+"or drag and place the toolbar to a different location.</p>";
+
+static QIconSet createIconSet( const QString &name )
+{
+ QIconSet ic( PixmapChooser::loadPixmap( name, PixmapChooser::Small ) );
+ ic.setPixmap( PixmapChooser::loadPixmap( name, PixmapChooser::Disabled ), QIconSet::Small, QIconSet::Disabled );
+ return ic;
+}
+
+int forms = 0;
+
+void MainWindow::setupEditActions()
+{
+ actionEditUndo = KStdAction::undo(this, SLOT(editUndo()), actionCollection());
+ actionEditUndo->setText(i18n("&Undo: Not Available"));
+ actionEditUndo->setToolTip(i18n("Undoes the last action"));
+ actionEditUndo->setWhatsThis(whatsThisFrom("Edit|Undo"));
+ actionEditUndo->setEnabled(false);
+
+ actionEditRedo = KStdAction::redo(this, SLOT(editRedo()), actionCollection());
+ actionEditRedo->setText(i18n("&Redo: Not Available"));
+ actionEditRedo->setToolTip(i18n("Redoes the last undone operation"));
+ actionEditRedo->setWhatsThis(whatsThisFrom("Edit|Redo"));
+ actionEditRedo->setEnabled(false);
+
+ actionEditCut = KStdAction::cut(this, SLOT(editCut()), actionCollection());
+ actionEditCut->setToolTip(i18n("Cuts the selected widgets and puts them on the clipboard"));
+ actionEditCut->setWhatsThis(whatsThisFrom("Edit|Cut"));
+ actionEditCut->setEnabled(false);
+
+ actionEditCopy = KStdAction::copy(this, SLOT(editCopy()), actionCollection());
+ actionEditCopy->setToolTip(i18n("Copies the selected widgets to the clipboard"));
+ actionEditCopy->setWhatsThis(whatsThisFrom("Edit|Copy"));
+ actionEditCopy->setEnabled(false);
+
+ actionEditPaste = KStdAction::paste(this, SLOT(editPaste()), actionCollection());
+ actionEditPaste->setToolTip(i18n("Pastes the clipboard's contents"));
+ actionEditPaste->setWhatsThis(whatsThisFrom("Edit|Paste"));
+ actionEditPaste->setEnabled(false);
+
+ actionEditDelete = new KAction(i18n("Delete"), Key_Delete, this, SLOT(editDelete()),
+ actionCollection(), "edit_delete");
+ actionEditDelete->setToolTip(i18n("Deletes the selected widgets"));
+ actionEditDelete->setWhatsThis(whatsThisFrom("Edit|Delete"));
+ actionEditDelete->setEnabled(false);
+
+ actionEditSelectAll = KStdAction::selectAll(this, SLOT(editSelectAll()), actionCollection());
+ actionEditSelectAll->setToolTip(i18n("Selects all widgets"));
+ actionEditSelectAll->setWhatsThis(whatsThisFrom("Edit|Select All"));
+
+ actionEditRaise = new KAction(i18n("Bring to Front"), createIconSet("editraise.xpm"),
+ KShortcut::null(), this, SLOT(editRaise()), actionCollection(), "edit_raise");
+ actionEditRaise->setToolTip(i18n("Raises the selected widgets"));
+ actionEditRaise->setEnabled(false);
+
+ actionEditLower = new KAction(i18n("Send to Back"), createIconSet("editlower.xpm"),
+ KShortcut::null(), this, SLOT(editLower()), actionCollection(), "edit_lower");
+ actionEditLower->setToolTip(i18n("Lowers the selected widgets"));
+ actionEditLower->setWhatsThis(i18n("Lowers the selected widgets"));
+ actionEditLower->setEnabled(false);
+
+ actionEditFindGlobal = new KAction(i18n("Find in Form..."), CTRL + ALT + Key_F, this, SLOT(editFindGlobal()), actionCollection(), "edit_find_global");
+ actionEditFindGlobal->setToolTip(i18n("Search for a text in the whole form."));
+ actionEditFindGlobal->setWhatsThis(whatsThisFrom("Edit|Find in Form"));
+ connect(this, SIGNAL(hasActiveForm(bool)), actionEditFindGlobal, SLOT(setEnabled(bool)));
+
+ actionEditAccels = new KAction(i18n("Check Accelerators"), ALT + Key_R, this, SLOT(editAccels()),
+ actionCollection(), "edit_check_accel");
+ actionEditAccels->setToolTip(i18n("Checks if the accelerators used in the form are unique"));
+ actionEditAccels->setWhatsThis(whatsThisFrom("Edit|Check Accelerator"));
+ connect(this, SIGNAL(hasActiveForm(bool)), actionEditAccels, SLOT(setEnabled(bool)));
+
+ actionEditConnections = new KAction(i18n("Connections"), createIconSet("connecttool.xpm"),
+ KShortcut::null(), this, SLOT(editConnections()), actionCollection(),
+ "edit_connections");
+ actionEditConnections->setToolTip(i18n("Opens a dialog for editing connections"));
+ actionEditConnections->setWhatsThis(whatsThisFrom("Edit|Connections"));
+ connect(this, SIGNAL(hasActiveForm(bool)), actionEditConnections, SLOT(setEnabled(bool)));
+
+ actionEditFormSettings = new KAction(i18n("Form Settings..."), KShortcut::null(),
+ this, SLOT(editFormSettings()), actionCollection(), "edit_form");
+ actionEditFormSettings->setToolTip(i18n("Opens a dialog to change the form's settings"));
+ actionEditFormSettings->setWhatsThis(whatsThisFrom("Edit|Form Settings"));
+ connect(this, SIGNAL(hasActiveForm(bool)), actionEditFormSettings, SLOT(setEnabled(bool)));
+
+ KToolBar *tb = new KToolBar(this, "Edit");
+ tb->setFullSize(false);
+ QWhatsThis::add(tb, i18n("<b>The Edit toolbar</b>%1").arg(toolbarHelp));
+ addToolBar(tb, i18n("Edit"));
+ actionEditUndo->plug(tb);
+ actionEditRedo->plug(tb);
+ tb->addSeparator();
+ actionEditCut->plug(tb);
+ actionEditCopy->plug(tb);
+ actionEditPaste->plug(tb);
+
+ QPopupMenu *menu = new QPopupMenu(this, "Edit");
+ menuBar()->insertItem(i18n("&Edit"), menu);
+ actionEditUndo->plug(menu);
+ actionEditRedo->plug(menu);
+ menu->insertSeparator();
+ actionEditCut->plug(menu);
+ actionEditCopy->plug(menu);
+ actionEditPaste->plug(menu);
+ actionEditDelete->plug(menu);
+ actionEditSelectAll->plug(menu);
+ actionEditAccels->plug(menu);
+ menu->insertSeparator();
+// actionEditFindGlobal->plug(menu); //enable when implemented
+ actionEditConnections->plug(menu);
+ actionEditFormSettings->plug(menu);
+ menu->insertSeparator();
+
+}
+
+
+void MainWindow::setupLayoutActions()
+{
+ actionEditAdjustSize = new KAction(i18n("Adjust Size"), createIconSet("adjustsize.xpm"),
+ CTRL + Key_J, this, SLOT(editAdjustSize()), actionCollection(), "edit_adjust_size");
+ actionEditAdjustSize->setToolTip(i18n("Adjusts the size of the selected widget"));
+ actionEditAdjustSize->setWhatsThis(whatsThisFrom("Layout|Adjust Size"));
+ actionEditAdjustSize->setEnabled(false);
+
+ actionEditHLayout = new KAction(i18n("Lay Out Horizontally"), createIconSet("edithlayout.xpm"),
+ CTRL + Key_H, this, SLOT(editLayoutHorizontal()), actionCollection(), "edit_layout_h");
+ actionEditHLayout->setToolTip(i18n("Lays out the selected widgets horizontally"));
+ actionEditHLayout->setWhatsThis(whatsThisFrom("Layout|Lay Out Horizontally"));
+ actionEditHLayout->setEnabled(false);
+
+ actionEditVLayout = new KAction(i18n("Lay Out Vertically"), createIconSet("editvlayout.xpm"),
+ CTRL + Key_L, this, SLOT(editLayoutVertical()), actionCollection(), "edit_layout_v");
+ actionEditVLayout->setToolTip(i18n("Lays out the selected widgets vertically"));
+ actionEditVLayout->setWhatsThis(whatsThisFrom("Layout|Lay Out Vertically"));
+ actionEditVLayout->setEnabled(false);
+
+ actionEditGridLayout = new KAction(i18n("Lay Out in a Grid"), createIconSet("editgrid.xpm"),
+ CTRL + Key_G, this, SLOT(editLayoutGrid()), actionCollection(), "edit_layout_grid");
+ actionEditGridLayout->setToolTip(i18n("Lays out the selected widgets in a grid"));
+ actionEditGridLayout->setWhatsThis(whatsThisFrom("Layout|Lay Out in a Grid"));
+ actionEditGridLayout->setEnabled(false);
+
+ actionEditSplitHorizontal = new KAction(i18n("Lay Out Horizontally in Splitter"), createIconSet("editvlayoutsplit.xpm"),
+ KShortcut::null(), this, SLOT(editLayoutHorizontalSplit()), actionCollection(),
+ "edit_split_h");
+ actionEditSplitHorizontal->setToolTip(i18n("Lays out the selected widgets horizontally in a splitter"));
+ actionEditSplitHorizontal->setWhatsThis(whatsThisFrom("Layout|Lay Out Horizontally in Splitter"));
+ actionEditSplitHorizontal->setEnabled(false);
+
+ actionEditSplitVertical = new KAction(i18n("Lay Out Vertically in Splitter"), createIconSet("edithlayoutsplit.xpm"),
+ KShortcut::null(), this, SLOT(editLayoutVerticalSplit()), actionCollection(),
+ "edit_split_v");
+ actionEditSplitVertical->setToolTip(i18n("Lays out the selected widgets vertically in a splitter"));
+ actionEditSplitVertical->setWhatsThis(whatsThisFrom("Layout|Lay Out Vertically (in Splitter)"));
+ actionEditSplitVertical->setEnabled(false);
+
+ actionEditBreakLayout = new KAction(i18n("Break Layout"), createIconSet("editbreaklayout.xpm"),
+ CTRL + Key_B, this, SLOT(editBreakLayout()), actionCollection(), "edit_break_layout");
+ actionEditBreakLayout->setToolTip(i18n("Breaks the selected layout"));
+ actionEditBreakLayout->setWhatsThis(whatsThisFrom("Layout|Break Layout"));
+
+ int id = WidgetDatabase::idFromClassName("Spacer");
+ KToggleAction *a = new KToggleAction(i18n("Spacer"), createIconSet("spacer.xpm"), KShortcut::null(), this, SLOT(toolSelected()),
+ actionCollection(), QString::number(id).latin1());
+ a->setExclusiveGroup("tool");
+ a->setText(i18n("Add ") + WidgetDatabase::className(id));
+ a->setToolTip(i18n("Insert a %1").arg(WidgetDatabase::toolTip(id)));
+ a->setWhatsThis(i18n("<b>A %1</b><p>%2</p>"
+ "<p>Click to insert a single %3,"
+ "or double click to keep the tool selected.").arg(WidgetDatabase::toolTip(id)).
+ arg(WidgetDatabase::whatsThis(id)).arg(WidgetDatabase::toolTip(id)));
+
+ QWhatsThis::add(layoutToolBar, i18n("<b>The Layout toolbar</b>%1").arg(toolbarHelp));
+ actionEditAdjustSize->plug(layoutToolBar);
+ layoutToolBar->addSeparator();
+ actionEditHLayout->plug(layoutToolBar);
+ actionEditVLayout->plug(layoutToolBar);
+ actionEditGridLayout->plug(layoutToolBar);
+ actionEditSplitHorizontal->plug(layoutToolBar);
+ actionEditSplitVertical->plug(layoutToolBar);
+ actionEditBreakLayout->plug(layoutToolBar);
+ layoutToolBar->addSeparator();
+ a->plug(layoutToolBar);
+
+ QPopupMenu *menu = new QPopupMenu(this, "Layout");
+ menuBar()->insertItem(i18n("&Layout"), menu);
+ actionEditAdjustSize->plug(menu);
+ menu->insertSeparator();
+ actionEditHLayout->plug(menu);
+ actionEditVLayout->plug(menu);
+ actionEditGridLayout->plug(menu);
+ actionEditSplitHorizontal->plug(menu);
+ actionEditSplitVertical->plug(menu);
+ actionEditBreakLayout->plug(menu);
+ menu->insertSeparator();
+ a->plug(menu);
+}
+
+void MainWindow::setupToolActions()
+{
+ actionPointerTool = new KToggleAction(i18n("Pointer"), "arrow", Key_F2,
+ this, SLOT(toolSelected()), actionCollection(),
+ QString::number(POINTER_TOOL).latin1());
+ actionPointerTool->setToolTip(i18n("Selects the pointer tool"));
+ actionPointerTool->setWhatsThis(whatsThisFrom("Tools|Pointer"));
+ actionPointerTool->setExclusiveGroup("tool");
+
+ actionConnectTool = new KToggleAction(i18n("Connect Signal/Slots"), createIconSet("connecttool.xpm"),
+ Key_F3, this, SLOT(toolSelected()), actionCollection(),
+ QString::number(CONNECT_TOOL).latin1());
+ actionConnectTool->setToolTip(i18n("Selects the connection tool"));
+ actionConnectTool->setWhatsThis(whatsThisFrom("Tools|Connect Signals and Slots"));
+ actionConnectTool->setExclusiveGroup("tool");
+
+ actionOrderTool = new KToggleAction(i18n("Tab Order"), createIconSet("ordertool.xpm"),
+ Key_F4, this, SLOT(toolSelected()), actionCollection(),
+ QString::number(ORDER_TOOL).latin1());
+ actionOrderTool->setToolTip(i18n("Selects the tab order tool"));
+ actionOrderTool->setWhatsThis(whatsThisFrom("Tools|Tab Order"));
+ actionOrderTool->setExclusiveGroup("tool");
+
+ KToolBar *tb = new KToolBar(this, "Tools");
+ tb->setFullSize(false);
+ QWhatsThis::add(tb, i18n("<b>The Tools toolbar</b>%1").arg(toolbarHelp));
+
+ addToolBar(tb, i18n("Tools"), QMainWindow::DockTop, true);
+ actionPointerTool->plug(tb);
+ actionConnectTool->plug(tb);
+ actionOrderTool->plug(tb);
+
+ QPopupMenu *mmenu = new QPopupMenu(this, "Tools");
+ menuBar()->insertItem(i18n("&Tools"), mmenu);
+ actionPointerTool->plug(mmenu);
+ actionConnectTool->plug(mmenu);
+ actionOrderTool->plug(mmenu);
+ mmenu->insertSeparator();
+
+ for (int j = 0; j < WidgetDatabase::numWidgetGroups(); ++j)
+ {
+ QString grp = WidgetDatabase::widgetGroup(j);
+ if (!WidgetDatabase::isGroupVisible(grp) || WidgetDatabase::isGroupEmpty(grp))
+ continue;
+ KToolBar *tb = new KToolBar(this, grp.latin1());
+ tb->setFullSize(false);
+ bool plural = grp[(int) grp.length() - 1] == 's';
+ if (plural)
+ {
+ QWhatsThis::add(tb, i18n("<b>The %1</b>%2").arg(grp).arg(toolbarHelp).
+ arg(i18n(" Click on a button to insert a single widget, "
+ "or double click to insert multiple %1.")).arg(grp));
+ } else
+ {
+ QWhatsThis::add(tb, i18n("<b>The %1 Widgets</b>%2").arg(grp).arg(toolbarHelp).
+ arg(i18n(" Click on a button to insert a single %1 widget, "
+ "or double click to insert multiple widgets.")).arg(grp));
+ }
+ addToolBar(tb, grp);
+ QPopupMenu *menu = new QPopupMenu(this, grp.latin1());
+ mmenu->insertItem(grp, menu);
+
+ for (int i = 0; i < WidgetDatabase::count(); ++i)
+ {
+ if (WidgetDatabase::group(i) != grp)
+ continue; // only widgets, i.e. not forms and temp stuff
+ KToggleAction *a = new KToggleAction(WidgetDatabase::className(i), KShortcut::null(),
+ this, SLOT(toolSelected()), actionCollection(), QString::number(i).latin1());
+ a->setExclusiveGroup("tool");
+ QString atext = WidgetDatabase::className(i);
+ if (atext[0] == 'Q')
+ atext = atext.mid(1);
+ while (atext.length() && atext[0] >= 'a' && atext[0] <= 'z')
+ atext = atext.mid(1);
+ if (atext.isEmpty())
+ atext = WidgetDatabase::className(i);
+ a->setText(atext);
+ QString ttip = WidgetDatabase::toolTip(i);
+ a->setIconSet(WidgetDatabase::iconSet(i));
+ a->setToolTip(ttip);
+ if (!WidgetDatabase::isWhatsThisLoaded())
+ WidgetDatabase::loadWhatsThis(documentationPath());
+ a->setToolTip(i18n("Insert a %1").arg(WidgetDatabase::className(i)));
+
+ QString whats = i18n("<b>A %1</b>").arg(WidgetDatabase::className(i));
+ if (!WidgetDatabase::whatsThis(i).isEmpty())
+ whats += QString("<p>%1</p>").arg(WidgetDatabase::whatsThis(i));
+ a->setWhatsThis(whats + i18n("<p>Double click on this tool to keep it selected.</p>"));
+
+ if (grp != "KDE")
+ a->plug(tb);
+ a->plug(menu);
+ }
+ }
+
+ // add external Kommander dialogs for Editor
+ m_editorTools.clear();
+ QPopupMenu* editMenu = new QPopupMenu(this);
+ QStringList searchPaths = KGlobal::dirs()->findDirs("data", "kmdr-editor/editor");
+ for (QStringList::ConstIterator it = searchPaths.begin(); it != searchPaths.end(); ++it)
+ {
+ if (!QFile::exists(*it))
+ continue;
+ QDir dir(*it);
+ const QFileInfoList* fileList = dir.entryInfoList(QDir::DefaultFilter, QDir::DirsFirst | QDir::Name);
+ if (fileList)
+ for (QFileInfoListIterator fit(*fileList); fit.current(); ++fit)
+ {
+ QFileInfo* fi = fit.current();
+ if (!fi->isFile() || fi->extension() != "kmdr")
+ continue;
+ QString name = fi->baseName();
+ name = name.replace("_", " ");
+ editMenu->insertItem(name, this, SLOT(editExternalTool(int)), 0, m_editorTools.count());
+ m_editorTools.append(fi->filePath());
+ }
+ }
+ if (editMenu->count())
+ mmenu->insertItem(i18n("Editor"), editMenu);
+
+ resetTool();
+}
+
+void MainWindow::setupFileActions()
+{
+ fileTb = new KToolBar(this, "File");
+ fileTb->setFullSize(false);
+
+ QWhatsThis::add(fileTb, i18n("<b>The File toolbar</b>%1").arg(toolbarHelp));
+ addToolBar(fileTb, i18n("File"));
+ fileMenu = new QPopupMenu(this, "File");
+ menuBar()->insertItem(i18n("&File"), fileMenu);
+
+ KAction *a = KStdAction::openNew(this, SLOT(fileNew()), actionCollection());
+ a->setToolTip(i18n("Creates a new dialog"));
+ a->setWhatsThis(whatsThisFrom("File|New"));
+ a->plug(fileTb);
+ a->plug(fileMenu);
+
+ a = KStdAction::open(this, SLOT(fileOpen()), actionCollection());
+ a->setToolTip(i18n("Opens an existing dialog"));
+ a->setWhatsThis(whatsThisFrom("File|Open"));
+ a->plug(fileTb);
+ a->plug(fileMenu);
+
+ actionRecent = KStdAction::openRecent(this, SLOT(fileOpenRecent(const KURL&)), actionCollection());
+ actionRecent->setToolTip(i18n("Opens recently open file"));
+ actionRecent->plug(fileMenu);
+
+ fileMenu->insertSeparator();
+ a = KStdAction::close(this, SLOT(fileClose()), actionCollection());
+ a->setToolTip(i18n("Closes the current dialog"));
+ a->setWhatsThis(whatsThisFrom("File|Close"));
+ connect(this, SIGNAL(hasActiveWindow(bool)), a, SLOT(setEnabled(bool)));
+ a->plug(fileMenu);
+
+ fileMenu->insertSeparator();
+
+ a = KStdAction::save(this, SLOT(fileSave()), actionCollection());
+ a->setToolTip(i18n("Saves the current dialog"));
+ a->setWhatsThis(whatsThisFrom("File|Save"));
+ connect(this, SIGNAL(hasActiveWindow(bool)), a, SLOT(setEnabled(bool)));
+ a->plug(fileTb);
+ a->plug(fileMenu);
+
+ a = KStdAction::saveAs(this, SLOT(fileSaveAs()), actionCollection());
+ a->setToolTip(i18n("Saves the current dialog with a new filename"));
+ a->setWhatsThis(whatsThisFrom("File|Save As"));
+ connect(this, SIGNAL(hasActiveWindow(bool)), a, SLOT(setEnabled(bool)));
+ a->plug(fileMenu);
+
+ a = new KAction(i18n("Save All"), "save_all", KShortcut::null(), this, SLOT(fileSaveAll()),
+ actionCollection(), "file_close_all");
+ a->setToolTip(i18n("Saves all open dialogs"));
+ a->setWhatsThis(whatsThisFrom("File|Save All"));
+ connect(this, SIGNAL(hasActiveWindow(bool)), a, SLOT(setEnabled(bool)));
+ a->plug(fileMenu);
+
+ fileMenu->insertSeparator();
+
+ a = KStdAction::quit(kapp, SLOT(closeAllWindows()), actionCollection());
+ a->setToolTip(i18n("Quits the application and prompts to save any changed dialogs"));
+ a->setWhatsThis(whatsThisFrom("File|Exit"));
+ a->plug(fileMenu);
+}
+
+
+void MainWindow::setupRunActions()
+{
+ QPopupMenu *menu = new QPopupMenu(this, "Run");
+ menuBar()->insertItem(i18n("&Run"), menu);
+
+ KAction* a = new KAction(i18n("Run Dialog"), "run", CTRL + Key_R,
+ this, SLOT(runForm()), actionCollection(), "run");
+ a->setToolTip(i18n("Executes dialog"));
+ a->setWhatsThis(whatsThisFrom("Run|Run dialog"));
+ connect(this, SIGNAL(hasActiveForm(bool)), a, SLOT(setEnabled(bool)));
+ a->plug(fileTb);
+ a->plug(menu);
+ // add KDE4 executor
+
+ KAction* b = new KAction(i18n("Run Dialog K4"), "launch", CTRL + SHIFT + Qt::Key_R,
+ this, SLOT(runForm4()), actionCollection(), "run4");
+ b->setToolTip(i18n("Executes dialog in KDE4"));
+ b->setWhatsThis(whatsThisFrom("Run|Run dialog"));
+ connect(this, SIGNAL(hasActiveForm(bool)), b, SLOT(setEnabled(bool)));
+ b->plug(menu);
+}
+
+void MainWindow::setupWindowActions()
+{
+ static bool windowActionsSetup = false;
+ if (!windowActionsSetup)
+ {
+ windowActionsSetup = true;
+
+ KAction* actionWindowTile = new KAction(i18n("Tile"), KShortcut::null(), qworkspace, SLOT(tile()),
+ actionCollection(), "window_tile");
+ actionWindowTile->setToolTip(i18n("Tiles the windows so that they are all visible"));
+ actionWindowTile->setWhatsThis(whatsThisFrom("Window|Tile"));
+
+ KAction* actionWindowCascade = new KAction(i18n("Cascade"), KShortcut::null(), qworkspace, SLOT(cascade()),
+ actionCollection(), "window_cascade");
+ actionWindowCascade->setToolTip(i18n("Cascades the windows so that all their title bars are visible"));
+ actionWindowCascade->setWhatsThis(whatsThisFrom("Window|Cascade"));
+
+ KAction* actionWindowClose = new KAction(i18n("Cascade"), KShortcut::null(), qworkspace, SLOT(closeActiveWindow()),
+ actionCollection(), "window_close");
+ actionWindowClose->setToolTip(i18n("Closes the active window"));
+ actionWindowClose->setWhatsThis(whatsThisFrom("Window|Close"));
+
+ KAction* actionWindowCloseAll = new KAction(i18n("Close All"), KShortcut::null(), qworkspace,
+ SLOT(closeAllWindows()), actionCollection(), "window_close_all");
+ actionWindowCloseAll->setToolTip(i18n("Closes all form windows"));
+ actionWindowCloseAll->setWhatsThis(whatsThisFrom("Window|Close All"));
+
+ KAction* actionWindowNext = new KAction(i18n("Next"), Key_F6, qworkspace,
+ SLOT(activateNextWindow()), actionCollection(), "window_next");
+ actionWindowNext->setToolTip(i18n("Activates the next window"));
+ actionWindowNext->setWhatsThis(whatsThisFrom("Window|Next"));
+
+ KAction* actionWindowPrevious = new KAction(i18n("Previous"), CTRL + SHIFT + Key_F6, qworkspace,
+ SLOT(activatePreviousWindow()), actionCollection(), "window_prev");
+ actionWindowPrevious->setToolTip(i18n("Activates the previous window"));
+ actionWindowPrevious->setWhatsThis(whatsThisFrom("Window|Previous"));
+
+ windowMenu = new KPopupMenu(this, "Window");
+ menuBar()->insertItem(i18n("&Window"), windowMenu);
+ connect(windowMenu, SIGNAL(aboutToShow()), this, SLOT(setupWindowActions()));
+
+ actionWindowClose->plug(windowMenu);
+ actionWindowCloseAll->plug(windowMenu);
+ windowMenu->insertSeparator();
+ actionWindowNext->plug(windowMenu);
+ actionWindowPrevious->plug(windowMenu);
+ windowMenu->insertSeparator();
+ actionWindowTile->plug(windowMenu);
+ actionWindowCascade->plug(windowMenu);
+ windowMenu->insertSeparator();
+ windowMenu->insertItem(i18n("Vie&ws"), dockHideShowMenu());
+ windowMenu->insertItem(i18n("Tool&bars"), createDockWindowMenu(OnlyToolBars));
+ }
+
+ //FIXME find a better way to remove only menu items linked to dialogs/forms
+ while (windowMenu->count() > 11)
+ windowMenu->removeItemAt(windowMenu->count() - 1);
+
+ QWidgetList windows = qworkspace->windowList();
+ if (windows.count() && formWindow())
+ windowMenu->insertSeparator();
+ int j = 0;
+ for (int i = 0; i < int (windows.count()); ++i)
+ {
+ QWidget *w = windows.at(i);
+ if (!w->inherits("FormWindow") && !w->inherits("SourceEditor"))
+ continue;
+ j++;
+ QString itemText;
+ if (j < 10)
+ itemText = QString("&%1 ").arg(j);
+ if (w->inherits("FormWindow"))
+ itemText += w->name();
+ else
+ itemText += w->caption();
+
+ int id = windowMenu->insertItem(itemText, this, SLOT(windowsMenuActivated(int)));
+ windowMenu->setItemParameter(id, i);
+ windowMenu->setItemChecked(id, qworkspace->activeWindow() == windows.at(i));
+ }
+}
+
+
+void MainWindow::setupSettingsActions()
+{
+ KPopupMenu *settings = new KPopupMenu(this, "Settings");
+ KAction* a = KStdAction::keyBindings(this, SLOT(editShortcuts()), actionCollection());
+ a->setToolTip(i18n("Opens a dialog to change shortcuts"));
+ a->plug(settings);
+
+ a = new KAction(i18n("Configure &Plugins..."), KShortcut::null(), this, SLOT(editPlugins()),
+ actionCollection(), "configure_plugins");
+ a->setToolTip(i18n("Opens a dialog to configure plugins"));
+ a->plug(settings);
+
+ a = new KAction(i18n("&Configure Editor..."), KShortcut::null(), this, SLOT(configureEditor()),
+ actionCollection(), "configure_editor");
+ a->setToolTip(i18n("Configure various aspects of this editor."));
+ a->plug(settings);
+
+ a = KStdAction::preferences(this, SLOT(editPreferences()), actionCollection());
+ a->setToolTip(i18n("Opens a dialog to change preferences"));
+ a->setWhatsThis(whatsThisFrom("Edit|Preferences"));
+ a->plug(settings);
+
+ menuBar()->insertItem( i18n("&Settings"), settings);
+}
+
+void MainWindow::setupHelpActions()
+{
+ KPopupMenu *help = helpMenu();
+ menuBar()->insertItem( i18n("&Help"), help);
+}
+
+
+void MainWindow::fileNew()
+{
+ statusBar()->message(i18n("Create a new dialog..."));
+ NewForm dlg(this, QString::null);
+ dlg.exec();
+ statusBar()->clear();
+}
+
+void MainWindow::fileClose()
+{
+ QWidget *w = qworkspace->activeWindow();
+ if (w->inherits("FormWindow"))
+ {
+ emit removedFormFile(((FormWindow *) w)->formFile());
+ ((FormWindow *) w)->formFile()->close();
+ }
+}
+
+void MainWindow::fileOpen() // as called by the menu
+{
+ fileOpen("");
+}
+
+void MainWindow::fileOpen(const QString & fn)
+{
+ statusBar()->message(i18n("Open a file..."));
+ QStringList additionalSources;
+
+ QStringList filenames;
+ if (fn.isEmpty())
+ filenames = KFileDialog::getOpenFileNames(QString::null, i18n("*.kmdr|Kommander Files"), this, i18n("Open Files"));
+ else
+ filenames << fn;
+ for (QStringList::ConstIterator fit = filenames.constBegin(); fit != filenames.constEnd(); ++fit)
+ {
+ QString filename = *fit;
+ if (!filename.isEmpty())
+ {
+ QFileInfo fi(filename);
+ if (fi.exists() && openFormWindow(filename))
+ actionRecent->addURL(filename);
+ }
+ }
+}
+
+
+
+FormWindow *MainWindow::openFormWindow(const QString &filename, bool validFileName, FormFile *ff)
+{
+ if (filename.isEmpty())
+ return 0;
+
+ bool makeNew = false;
+
+ if (!QFile::exists(filename))
+ {
+ makeNew = true;
+ } else
+ {
+ QFile f(filename);
+ f.open(IO_ReadOnly);
+ QTextStream ts(&f);
+ makeNew = ts.read().length() < 2;
+ }
+ if (!makeNew)
+ {
+ statusBar()->message(i18n("Reading file '%1'...").arg(filename));
+ if (QFile::exists(filename))
+ {
+ QApplication::setOverrideCursor(WaitCursor);
+ Resource resource(this);
+ if (!ff)
+ ff = new FormFile(filename, false);
+ bool b = resource.load(ff) && (FormWindow *) resource.widget();
+ if (!validFileName && resource.widget())
+ ((FormWindow *) resource.widget())->setFileName(QString::null);
+ QApplication::restoreOverrideCursor();
+ if (b)
+ {
+ statusBar()->message(i18n("Loaded file '%1'").arg(filename), 3000);
+ } else
+ {
+ emit removedFormFile(ff);
+ ff->close();
+ delete ff;
+ statusBar()->message(i18n("Could not load file '%1'").arg(filename), 5000);
+ KMessageBox::information(this, i18n("Could not load file '%1'").arg(filename), i18n("Load File"));
+ }
+ return (FormWindow *) resource.widget();
+ } else
+ {
+ statusBar()->clear();
+ }
+ } else
+ {
+ fileNew();
+ if (formWindow())
+ formWindow()->setFileName(filename);
+ return formWindow();
+ }
+ return 0;
+}
+
+bool MainWindow::fileSave()
+{
+ return fileSaveForm();
+}
+
+bool MainWindow::fileSaveForm()
+{
+ FormWindow* fw = 0;
+ if (!fw)
+ fw = formWindow();
+ if (!fw || !fw->formFile()->save())
+ return false;
+ QApplication::restoreOverrideCursor();
+ return true;
+}
+
+bool MainWindow::fileSaveAs()
+{
+ statusBar()->message(i18n("Enter a filename..."));
+
+ QWidget *w = qworkspace->activeWindow();
+ if (!w)
+ return true;
+ if (w->inherits("FormWindow"))
+ return ((FormWindow *) w)->formFile()->saveAs();
+ return false;
+}
+
+void MainWindow::fileSaveAll()
+{
+ QWidgetList windows = qworkspace->windowList(QWorkspace::StackingOrder);
+ for (int i = 0; i < (int)windows.count(); ++i)
+ {
+ FormWindow* fw = dynamic_cast<FormWindow*>(windows.at(i));
+ if (fw)
+ fw->formFile()->save();
+ }
+}
+
+static bool inSaveAllTemp = false;
+
+void MainWindow::saveAllTemp()
+{
+ if (inSaveAllTemp)
+ return;
+ inSaveAllTemp = true;
+ statusBar()->message(i18n("Qt Designer is crashing. Attempting to save files..."));
+ QWidgetList windows = qWorkspace()->windowList();
+ QString baseName = QDir::homeDirPath() + "/.designer/saved-form-";
+ int i = 1;
+ for (QWidget * w = windows.first(); w; w = windows.next())
+ {
+ if (!w->inherits("FormWindow"))
+ continue;
+
+ QString fn = baseName + QString::number(i++) + ".kmdr";
+ ((FormWindow *) w)->setFileName(fn);
+ ((FormWindow *) w)->formFile()->save();
+ }
+ inSaveAllTemp = false;
+}
+
+void MainWindow::fileCreateTemplate()
+{
+ CreateTemplate dia(this, 0, true);
+
+ int i = 0;
+ for (i = 0; i < WidgetDatabase::count(); ++i)
+ {
+ if (WidgetDatabase::isForm(i) && WidgetDatabase::widgetGroup(i) != "Temp")
+ {
+ dia.listClass->insertItem(WidgetDatabase::className(i));
+ }
+ }
+ for (i = 0; i < WidgetDatabase::count(); ++i)
+ {
+ if (WidgetDatabase::isContainer(i) && !WidgetDatabase::isForm(i) &&
+ WidgetDatabase::className(i) != "QTabWidget" && WidgetDatabase::widgetGroup(i) != "Temp")
+ {
+ dia.listClass->insertItem(WidgetDatabase::className(i));
+ }
+ }
+
+ dia.editName->setText(i18n("NewTemplate"));
+ connect(dia.buttonCreate, SIGNAL(clicked()), this, SLOT(createNewTemplate()));
+ dia.exec();
+}
+
+void MainWindow::createNewTemplate()
+{
+ CreateTemplate *dia = (CreateTemplate *) sender()->parent();
+ QString fn = dia->editName->text();
+ QString cn = dia->listClass->currentText();
+ if (fn.isEmpty() || cn.isEmpty())
+ {
+ KMessageBox::information(this, i18n("Could not create the template"), i18n("Create Template"));
+ return;
+ }
+
+ QStringList templRoots;
+ const char *qtdir = getenv("QTDIR");
+ if (qtdir)
+ templRoots << qtdir;
+#ifdef QT_INSTALL_PREFIX
+ templRoots << QT_INSTALL_PREFIX;
+#endif
+#ifdef QT_INSTALL_DATA
+ templRoots << QT_INSTALL_DATA;
+#endif
+ if (qtdir) //try the tools/designer directory last!
+ templRoots << QString(qtdir) + "/tools/designer";
+ QFile f;
+ for (QStringList::Iterator it = templRoots.begin(); it != templRoots.end(); ++it)
+ {
+ if (QFile::exists((*it) + "/templates/"))
+ {
+ QString tmpfn = (*it) + "/templates/" + fn + ".kmdr";
+ f.setName(tmpfn);
+ if (f.open(IO_WriteOnly))
+ break;
+ }
+ }
+ if (!f.isOpen())
+ {
+ KMessageBox::information(this, i18n("Could not create the template"), i18n("Create Template"));
+ return;
+ }
+ QTextStream ts(&f);
+
+ ts << "<!DOCTYPE UI><UI>" << endl;
+ ts << "<widget>" << endl;
+ ts << "<class>" << cn << "</class>" << endl;
+ ts << "<property stdset=\"1\">" << endl;
+ ts << " <name>name</name>" << endl;
+ ts << " <cstring>" << cn << "Form</cstring>" << endl;
+ ts << "</property>" << endl;
+ ts << "<property stdset=\"1\">" << endl;
+ ts << " <name>geometry</name>" << endl;
+ ts << " <rect>" << endl;
+ ts << " <width>300</width>" << endl;
+ ts << " <height>400</height>" << endl;
+ ts << " </rect>" << endl;
+ ts << "</property>" << endl;
+ ts << "</widget>" << endl;
+ ts << "</UI>" << endl;
+
+ dia->editName->setText(i18n("NewTemplate"));
+
+ f.close();
+}
+
+void MainWindow::editUndo()
+{
+ if (formWindow())
+ formWindow()->undo();
+}
+
+void MainWindow::editRedo()
+{
+ if (formWindow())
+ formWindow()->redo();
+}
+
+void MainWindow::editCut()
+{
+ editCopy();
+ editDelete();
+}
+
+void MainWindow::editCopy()
+{
+ if (formWindow())
+ qApp->clipboard()->setText(formWindow()->copy());
+}
+
+void MainWindow::editPaste()
+{
+ if (!formWindow())
+ return;
+
+ QWidget *w = formWindow()->mainContainer();
+ QWidgetList l(formWindow()->selectedWidgets());
+ if (l.count() == 1)
+ {
+ w = l.first();
+ if (WidgetFactory::layoutType(w) != WidgetFactory::NoLayout ||
+ (!WidgetDatabase::isContainer(WidgetDatabase::idFromClassName(WidgetFactory::
+ classNameOf(w))) && w != formWindow()->mainContainer()))
+ w = formWindow()->mainContainer();
+ }
+
+ if (w && WidgetFactory::layoutType(w) == WidgetFactory::NoLayout)
+ {
+ formWindow()->paste(qApp->clipboard()->text(), WidgetFactory::containerOfWidget(w));
+ hierarchyView->widgetInserted(0);
+ formWindow()->commandHistory()->setModified(true);
+ } else
+ {
+ KMessageBox::information(this, i18n("Cannot paste widgets. Designer could not find a container\n"
+ "to paste into which does not contain a layout. Break the layout\n"
+ "of the container you want to paste into and select this container\n"
+ "and then paste again."), i18n("Paste Error"));
+ }
+}
+
+void MainWindow::editDelete()
+{
+ if (formWindow())
+ formWindow()->deleteWidgets();
+}
+
+void MainWindow::editSelectAll()
+{
+ if (formWindow())
+ formWindow()->selectAll();
+}
+
+void MainWindow::editLower()
+{
+ if (formWindow())
+ formWindow()->lowerWidgets();
+}
+
+void MainWindow::editRaise()
+{
+ if (formWindow())
+ formWindow()->raiseWidgets();
+}
+
+void MainWindow::editAdjustSize()
+{
+ if (formWindow())
+ formWindow()->editAdjustSize();
+}
+
+void MainWindow::editLayoutHorizontal()
+{
+ if (layoutChilds)
+ editLayoutContainerHorizontal();
+ else if (layoutSelected && formWindow())
+ formWindow()->layoutHorizontal();
+}
+
+void MainWindow::editLayoutVertical()
+{
+ if (layoutChilds)
+ editLayoutContainerVertical();
+ else if (layoutSelected && formWindow())
+ formWindow()->layoutVertical();
+}
+
+void MainWindow::editLayoutHorizontalSplit()
+{
+ if (layoutChilds)
+ ; // no way to do that
+ else if (layoutSelected && formWindow())
+ formWindow()->layoutHorizontalSplit();
+}
+
+void MainWindow::editLayoutVerticalSplit()
+{
+ if (layoutChilds)
+ ; // no way to do that
+ else if (layoutSelected && formWindow())
+ formWindow()->layoutVerticalSplit();
+}
+
+void MainWindow::editLayoutGrid()
+{
+ if (layoutChilds)
+ editLayoutContainerGrid();
+ else if (layoutSelected && formWindow())
+ formWindow()->layoutGrid();
+}
+
+void MainWindow::editLayoutContainerVertical()
+{
+ if (!formWindow())
+ return;
+ QWidget *w = formWindow()->mainContainer();
+ QWidgetList l(formWindow()->selectedWidgets());
+ if (l.count() == 1)
+ w = l.first();
+ if (w)
+ formWindow()->layoutVerticalContainer(w);
+}
+
+void MainWindow::editLayoutContainerHorizontal()
+{
+ if (!formWindow())
+ return;
+ QWidget *w = formWindow()->mainContainer();
+ QWidgetList l(formWindow()->selectedWidgets());
+ if (l.count() == 1)
+ w = l.first();
+ if (w)
+ formWindow()->layoutHorizontalContainer(w);
+}
+
+void MainWindow::editLayoutContainerGrid()
+{
+ if (!formWindow())
+ return;
+ QWidget *w = formWindow()->mainContainer();
+ QWidgetList l(formWindow()->selectedWidgets());
+ if (l.count() == 1)
+ w = l.first();
+ if (w)
+ formWindow()->layoutGridContainer(w);
+}
+
+
+void MainWindow::editBreakLayout()
+{
+ if (!formWindow() || !breakLayout)
+ {
+ return;
+ }
+ QWidget *w = formWindow()->mainContainer();
+ if (formWindow()->currentWidget())
+ w = formWindow()->currentWidget();
+ if (WidgetFactory::layoutType(w) != WidgetFactory::NoLayout ||
+ w->parentWidget() && WidgetFactory::layoutType(w->parentWidget()) != WidgetFactory::NoLayout)
+ {
+ formWindow()->breakLayout(w);
+ return;
+ }
+ else
+ {
+ QWidgetList widgets = formWindow()->selectedWidgets();
+ for (w = widgets.first(); w; w = widgets.next())
+ {
+ if (WidgetFactory::layoutType(w) != WidgetFactory::NoLayout ||
+ w->parentWidget()
+ && WidgetFactory::layoutType(w->parentWidget()) != WidgetFactory::NoLayout)
+ break;
+ }
+ if (w)
+ {
+ formWindow()->breakLayout(w);
+ return;
+ }
+ }
+
+ w = formWindow()->mainContainer();
+ if (WidgetFactory::layoutType(w) != WidgetFactory::NoLayout ||
+ w->parentWidget() && WidgetFactory::layoutType(w->parentWidget()) != WidgetFactory::NoLayout)
+ {
+ formWindow()->breakLayout(w);
+ }
+}
+
+void MainWindow::editAccels()
+{
+ if (formWindow())
+ formWindow()->checkAccels();
+}
+
+
+void MainWindow::editConnections()
+{
+ if (!formWindow())
+ return;
+
+ statusBar()->message(i18n("Edit connections..."));
+ ConnectionEditor editor(this, 0, 0, formWindow());
+ editor.exec();
+ statusBar()->clear();
+}
+
+void MainWindow::editFindGlobal()
+{
+ if (!formWindow())
+ return;
+
+}
+
+
+void MainWindow::editFormSettings()
+{
+ if (!formWindow())
+ return;
+
+ statusBar()->message(i18n("Edit the current form's settings..."));
+ FormSettings dlg(this, formWindow());
+ dlg.exec();
+ statusBar()->clear();
+}
+
+void MainWindow::editPreferences()
+{
+ statusBar()->message(i18n("Edit preferences..."));
+ Preferences *dia = new Preferences(this, 0, true);
+ prefDia = dia;
+ connect(dia->helpButton, SIGNAL(clicked()), MainWindow::self, SLOT(showDialogHelp()));
+ dia->buttonColor->setEditor(StyledButton::ColorEditor);
+ dia->buttonPixmap->setEditor(StyledButton::PixmapEditor);
+ dia->checkBoxShowGrid->setChecked(sGrid);
+ dia->checkBoxGrid->setChecked(snGrid);
+ dia->spinGridX->setValue(grid().x());
+ dia->spinGridY->setValue(grid().y());
+ dia->checkBoxWorkspace->setChecked(restoreConfig);
+ dia->checkBoxBigIcons->setChecked(usesBigPixmaps());
+ dia->checkBoxBigIcons->hide(); // ##### disabled for now
+ dia->checkBoxTextLabels->setChecked(usesTextLabel());
+ dia->buttonColor->setColor(qworkspace->backgroundColor());
+ if (qworkspace->backgroundPixmap())
+ dia->buttonPixmap->setPixmap(*qworkspace->backgroundPixmap());
+ if (backPix)
+ dia->radioPixmap->setChecked(true);
+ else
+ dia->radioColor->setChecked(true);
+ dia->checkBoxSplash->setChecked(splashScreen);
+ dia->editDocPath->setText(docPath);
+ dia->checkAutoEdit->setChecked(!databaseAutoEdit);
+ connect(dia->buttonDocPath, SIGNAL(clicked()), this, SLOT(chooseDocPath()));
+
+ if (dia->exec() == QDialog::Accepted)
+ {
+ setSnapGrid(dia->checkBoxGrid->isChecked());
+ setShowGrid(dia->checkBoxShowGrid->isChecked());
+ setGrid(QPoint(dia->spinGridX->value(), dia->spinGridY->value()));
+ restoreConfig = dia->checkBoxWorkspace->isChecked();
+ setUsesBigPixmaps(false /*dia->checkBoxBigIcons->isChecked() */ ); // ### disable for now
+ setUsesTextLabel(dia->checkBoxTextLabels->isChecked());
+ if (dia->radioPixmap->isChecked() && dia->buttonPixmap->pixmap())
+ {
+ qworkspace->setBackgroundPixmap(*dia->buttonPixmap->pixmap());
+ backPix = true;
+ } else
+ {
+ qworkspace->setBackgroundColor(dia->buttonColor->color());
+ backPix = false;
+ }
+ splashScreen = dia->checkBoxSplash->isChecked();
+ docPath = dia->editDocPath->text();
+ databaseAutoEdit = !dia->checkAutoEdit->isChecked();
+ }
+ delete dia;
+ prefDia = 0;
+ statusBar()->clear();
+}
+
+void MainWindow::editShortcuts()
+{
+ KKeyDialog K(false);
+ K.configure(actionCollection());
+}
+
+void MainWindow::editPlugins()
+{
+ KProcess process;
+ process << "kmdr-plugins";
+ process.start(KProcess::Block);
+}
+
+void MainWindow::configureEditor()
+{
+ KTextEditor::Document *doc = KTextEditor::createDocument ("libkatepart", 0L, "KTextEditor::Document");
+ KTextEditor::View *view = doc->createView(0);
+ KTextEditor::ConfigInterface *configIf = KTextEditor::configInterface(doc);
+ configIf->configDialog();
+ delete doc;
+}
+
+void MainWindow::editExternalTool(int id)
+{
+ KProcess* process = new KProcess;
+ (*process) << "kmdr-executor" << m_editorTools[id];
+ connect(process, SIGNAL(processExited(KProcess*)), SLOT(editToolExited(KProcess*)));
+ connect(process, SIGNAL(receivedStdout(KProcess*, char*, int)), SLOT(editToolOutput(KProcess*, char*, int)));
+ m_toolOutput = '\0';
+ process->start(KProcess::NotifyOnExit, KProcess::Stdout);
+}
+
+void MainWindow::editToolExited(KProcess* process)
+{
+ delete process;
+}
+
+void MainWindow::editToolOutput(KProcess*, char* buffer, int buflen)
+{
+ m_toolOutput += QString::fromLocal8Bit(buffer, buflen);
+}
+
+void MainWindow::chooseDocPath()
+{
+ if (!prefDia)
+ return;
+ QString fn = KFileDialog::getExistingDirectory(QString::null, this);
+ if (!fn.isEmpty())
+ prefDia->editDocPath->setText(fn);
+}
+
+
diff --git a/kommander/editor/messagelog.cpp b/kommander/editor/messagelog.cpp
new file mode 100644
index 00000000..952dd19f
--- /dev/null
+++ b/kommander/editor/messagelog.cpp
@@ -0,0 +1,149 @@
+/***************************************************************************
+ messagelog.cpp - Kommander dialog output
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "messagelog.h"
+
+#include <kapplication.h>
+#include <kfiledialog.h>
+#include <kiconloader.h>
+#include <klistbox.h>
+#include <kmessagebox.h>
+#include <kpopupmenu.h>
+#include <kprocess.h>
+
+#include <qclipboard.h>
+#include <qfile.h>
+#include <qtextstream.h>
+
+MessageLog::MessageLog(QWidget* parent, const char* name) : QTabWidget(parent, name)
+{
+ m_popupMenu = new KPopupMenu(this);
+ m_popupMenu->insertItem(SmallIconSet("editcopy"), i18n("Copy Current &Line"), this, SLOT(copyLine()));
+ m_popupMenu->insertItem(SmallIconSet("editcopy"), i18n("&Copy Content"), this, SLOT(copyContent()));
+ m_popupMenu->insertItem(SmallIconSet("filesaveas"), i18n("&Save As..."), this, SLOT(saveToFile()));
+ m_popupMenu->insertSeparator();
+ m_popupMenu->insertItem(SmallIconSet("editclear"), i18n("Clear"), this, SLOT(clearContent()));
+
+ for (int i = 0; i < m_listCount; i++)
+ {
+ m_lists[i] = new KListBox(this);
+ addTab(m_lists[i], m_listNames[i]);
+ m_seenEOL[i] = false;
+ connect(m_lists[i], SIGNAL(contextMenuRequested(QListBoxItem*, const QPoint&)),
+ this, SLOT(showMenu(QListBoxItem*, const QPoint&)));
+ }
+}
+
+MessageLog::~MessageLog()
+{
+}
+
+void MessageLog::insertItem(InfoType i, QString text)
+{
+ bool seenEOL = text.endsWith("\n");
+ if (seenEOL)
+ text.truncate(text.length() - 1);
+ QStringList items(QStringList::split('\n', text));
+ for (QStringList::ConstIterator it = items.begin(); it != items.end(); ++it )
+ {
+ if (!m_seenEOL[i] && m_lists[i]->count() && it == items.begin())
+ m_lists[i]->changeItem(m_lists[i]->text(m_lists[i]->count() - 1) + *it, m_lists[i]->count() - 1);
+ else
+ m_lists[i]->insertItem(*it);
+ }
+ m_seenEOL[i] = seenEOL;
+ m_lists[i]->setCurrentItem(m_lists[i]->count()-1);
+ m_lists[i]->ensureCurrentVisible();
+}
+
+QString MessageLog::content()
+{
+ QString p_content;
+ KListBox* list = m_lists[currentPageIndex()];
+ for (uint i=0; i < list->count(); i++)
+ p_content.append(list->text(i) + "\n");
+ return p_content;
+}
+
+void MessageLog::clear(InfoType i)
+{
+ if (i != All)
+ {
+ m_lists[(int)i]->clear();
+ m_seenEOL[i] = false;
+ }
+ else
+ for (int i = 0; i < m_listCount; i++)
+ clear((InfoType)i);
+}
+
+void MessageLog::receivedStdout(KProcess*, char* buffer, int buflen)
+{
+ insertItem(Stdout, QString::fromLocal8Bit(buffer, buflen));
+}
+
+void MessageLog::receivedStderr(KProcess*, char* buffer, int buflen)
+{
+ insertItem(Stderr, QString::fromLocal8Bit(buffer, buflen));
+}
+
+void MessageLog::clearContent()
+{
+ clear((InfoType)currentPageIndex());
+}
+
+void MessageLog::copyLine()
+{
+ if (m_lists[currentPageIndex()]->count())
+ kapp->clipboard()->setText(m_lists[currentPageIndex()]->currentText(), QClipboard::Clipboard);
+}
+
+void MessageLog::copyContent()
+{
+ kapp->clipboard()->setText(content(), QClipboard::Clipboard);
+}
+
+void MessageLog::saveToFile()
+{
+ KURL url=KFileDialog::getSaveURL(QDir::currentDirPath(),
+ i18n("*.log|Log Files (*.log)\n*|All Files"), this, i18n("Save Log File"));
+ if (url.isEmpty())
+ return;
+ QFileInfo fileinfo(url.path());
+ if (fileinfo.exists() && KMessageBox::warningContinueCancel(0,
+ i18n("<qt>File<br><b>%1</b><br>already exists. Overwrite it?</qt>")
+ .arg(url.path()), QString::null, i18n("Overwrite")) == KMessageBox::Cancel)
+ return;
+ QFile file(url.path());
+ if (!file.open(IO_WriteOnly)) {
+ KMessageBox::error(0, i18n("<qt>Cannot save log file<br><b>%1</b></qt>")
+ .arg(url.url()));
+ return;
+ }
+ QTextStream textfile(&file);
+ textfile << content();
+ file.close();
+}
+
+void MessageLog::showMenu(QListBoxItem*, const QPoint& l_point)
+{
+ m_popupMenu->exec(l_point);
+}
+
+QString MessageLog::m_listNames[m_listCount] = {i18n("Stdout"), i18n("Stderr")};
+
+#include "messagelog.moc"
+
diff --git a/kommander/editor/messagelog.h b/kommander/editor/messagelog.h
new file mode 100644
index 00000000..6b071cf4
--- /dev/null
+++ b/kommander/editor/messagelog.h
@@ -0,0 +1,55 @@
+/***************************************************************************
+ messagelog.h - Kommander dialog output
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef MESSAGELOG_H
+#define MESSAGELOG_H
+
+#include <qtabwidget.h>
+
+#include <klocale.h>
+
+class KListBox;
+class KProcess;
+class KPopupMenu;
+class QListBoxItem;
+
+class MessageLog : public QTabWidget
+{
+ Q_OBJECT
+public:
+ enum InfoType {Stdout, Stderr, All};
+ MessageLog(QWidget* parent = 0, const char* name = 0);
+ ~MessageLog();
+ virtual void insertItem(InfoType i, QString text);
+ virtual void clear(InfoType i = All);
+ QString content();
+public slots:
+ void receivedStdout(KProcess *proc, char *buffer, int buflen);
+ void receivedStderr(KProcess *proc, char *buffer, int buflen);
+ void clearContent();
+ void copyLine();
+ void copyContent();
+ void saveToFile();
+ void showMenu(QListBoxItem*, const QPoint& l_point);
+private:
+ static const int m_listCount = 2;
+ static QString m_listNames[m_listCount];
+ KListBox* m_lists[m_listCount];
+ bool m_seenEOL[m_listCount];
+ KPopupMenu* m_popupMenu;
+};
+
+#endif
diff --git a/kommander/editor/metadatabase.cpp b/kommander/editor/metadatabase.cpp
new file mode 100644
index 00000000..b902f2f4
--- /dev/null
+++ b/kommander/editor/metadatabase.cpp
@@ -0,0 +1,1219 @@
+/**********************************************************************
+ This file is based on Qt Designer, Copyright (C) 2000 Trolltech AS. All rights reserved.
+
+ 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.
+
+ Modified for Kommander:
+ (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+
+**********************************************************************/
+
+#include "metadatabase.h"
+#include "widgetfactory.h"
+#include "formwindow.h"
+#include "parser.h"
+#include "widgetdatabase.h"
+#include "formfile.h"
+
+#include <qapplication.h>
+#include <qobject.h>
+#include <qlayout.h>
+#include <qptrdict.h>
+#include <qobjectlist.h>
+#include <qstrlist.h>
+#include <qmetaobject.h>
+#include <qwidgetlist.h>
+#include <qmainwindow.h>
+#include <qregexp.h>
+#include <private/qpluginmanager_p.h>
+#include <qdatetime.h>
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qtextstream.h>
+
+#include <stdlib.h>
+
+
+class MetaDataBaseRecord
+{
+public:
+ QObject *object;
+ QStringList changedProperties;
+ QMap<QString,QVariant> fakeProperties;
+ QMap<QString, QString> propertyComments;
+ int spacing, margin;
+ QValueList<MetaDataBase::Connection> connections;
+ QValueList<MetaDataBase::Slot> slotList;
+ QValueList<MetaDataBase::Include> includes;
+ QStringList forwards, variables, sigs;
+ QWidgetList tabOrder;
+ MetaDataBase::MetaInfo metaInfo;
+ QCursor cursor;
+ QMap<int, QString> pixmapArguments;
+ QMap<int, QString> pixmapKeys;
+ QMap<QString, QString> columnFields;
+ QMap<QString, QStringList> eventFunctions;
+ QMap<QString, QString> functionBodies;
+ QMap<QString, QString> functionComments;
+ QValueList<int> breakPoints;
+ QString exportMacro;
+};
+
+static QPtrDict<MetaDataBaseRecord> *db = 0;
+static QPtrList<MetaDataBase::CustomWidget> *cWidgets = 0;
+static bool doUpdate = true;
+static QStringList langList;
+static QStringList editorLangList;
+
+/*!
+ \class MetaDataBase metadatabase.h
+ \brief Database which stores meta data of widgets
+
+ The MetaDataBase stores meta information of widgets, which are not
+ stored directly in widgets (properties). This is e.g. the
+ information which properties have been modified.
+*/
+
+MetaDataBase::MetaDataBase()
+{
+}
+
+inline void setupDataBase()
+{
+ if ( !db || !cWidgets ) {
+ db = new QPtrDict<MetaDataBaseRecord>( 1481 );
+ db->setAutoDelete( true );
+ cWidgets = new QPtrList<MetaDataBase::CustomWidget>;
+ cWidgets->setAutoDelete( true );
+ }
+}
+
+void MetaDataBase::clearDataBase()
+{
+ delete db;
+ db = 0;
+ delete cWidgets;
+ cWidgets = 0;
+}
+
+void MetaDataBase::addEntry( QObject *o )
+{
+ if ( !o )
+ return;
+ setupDataBase();
+ if ( db->find( o ) )
+ return;
+ MetaDataBaseRecord *r = new MetaDataBaseRecord;
+ r->object = o;
+ r->spacing = r->margin = -1;
+ db->insert( (void*)o, r );
+
+ WidgetFactory::initChangedProperties( o );
+}
+
+void MetaDataBase::removeEntry( QObject *o )
+{
+ setupDataBase();
+ db->remove( o );
+}
+
+void MetaDataBase::setPropertyChanged( QObject *o, const QString &property, bool changed )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ if ( changed ) {
+ if ( r->changedProperties.findIndex( property ) == -1 )
+ r->changedProperties.append( property );
+ } else {
+ if ( r->changedProperties.findIndex( property ) != -1 )
+ r->changedProperties.remove( property );
+ }
+
+ if ( doUpdate &&
+ ( property == "hAlign" || property == "vAlign" || property == "wordwrap" ) ) {
+ doUpdate = false;
+ setPropertyChanged( o, "alignment", changed ||
+ isPropertyChanged( o, "hAlign" ) ||
+ isPropertyChanged( o, "vAlign" ) ||
+ isPropertyChanged( o, "wordwrap" ) );
+ doUpdate = true;
+ }
+
+ if ( doUpdate && property == "alignment" ) {
+ doUpdate = false;
+ setPropertyChanged( o, "hAlign", changed );
+ setPropertyChanged( o, "vAlign", changed );
+ setPropertyChanged( o, "wordwrap", changed );
+ doUpdate = true;
+ }
+}
+
+bool MetaDataBase::isPropertyChanged( QObject *o, const QString &property )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return false;
+ }
+
+ return r->changedProperties.findIndex( property ) != -1;
+}
+
+QStringList MetaDataBase::changedProperties( QObject *o )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return QStringList();
+ }
+
+ QStringList lst( r->changedProperties );
+ return lst;
+}
+
+void MetaDataBase::setPropertyComment( QObject *o, const QString &property, const QString &comment )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ r->propertyComments.insert( property, comment );
+}
+
+QString MetaDataBase::propertyComment( QObject *o, const QString &property )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return QString::null;
+ }
+
+ return *r->propertyComments.find( property );
+}
+
+void MetaDataBase::setFakeProperty( QObject *o, const QString &property, const QVariant& value )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+ r->fakeProperties[property] = value;
+}
+
+QVariant MetaDataBase::fakeProperty( QObject * o, const QString &property)
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return QVariant();
+ }
+ QMap<QString, QVariant>::Iterator it = r->fakeProperties.find( property );
+ if ( it != r->fakeProperties.end() )
+ return r->fakeProperties[property];
+ return WidgetFactory::defaultValue( o, property );
+
+}
+
+QMap<QString,QVariant>* MetaDataBase::fakeProperties( QObject* o )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return 0;
+ }
+ return &r->fakeProperties;
+}
+
+void MetaDataBase::setSpacing( QObject *o, int spacing )
+{
+ if ( !o )
+ return;
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r || !o->isWidgetType() ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ r->spacing = spacing;
+ QLayout * layout = 0;
+ WidgetFactory::layoutType( (QWidget*)o, layout );
+ if ( layout )
+ layout->setSpacing( spacing );
+}
+
+int MetaDataBase::spacing( QObject *o )
+{
+ if ( !o )
+ return -1;
+ setupDataBase();
+ if ( o->inherits( "QMainWindow" ) )
+ o = ( (QMainWindow*)o )->centralWidget();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r || !o->isWidgetType() ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return -1;
+ }
+
+ return r->spacing;
+}
+
+void MetaDataBase::setMargin( QObject *o, int margin )
+{
+ if ( !o )
+ return;
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r || !o->isWidgetType() ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ r->margin = margin;
+ QLayout * layout = 0;
+ WidgetFactory::layoutType( (QWidget*)o, layout );
+ if ( margin < 1 )
+ margin = 1;
+ if ( layout )
+ layout->setMargin( margin );
+}
+
+int MetaDataBase::margin( QObject *o )
+{
+ if ( !o )
+ return -1;
+ setupDataBase();
+ if ( o->inherits( "QMainWindow" ) )
+ o = ( (QMainWindow*)o )->centralWidget();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r || !o->isWidgetType() ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return -1;
+ }
+
+ return r->margin;
+}
+
+void MetaDataBase::addConnection( QObject *o, QObject *sender, const QCString &signal,
+ QObject *receiver, const QCString &slot )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+ Connection conn;
+ conn.sender = sender;
+ conn.signal = signal;
+ conn.receiver = receiver;
+ conn.slot = slot;
+ r->connections.append( conn );
+}
+
+void MetaDataBase::removeConnection( QObject *o, QObject *sender, const QCString &signal,
+ QObject *receiver, const QCString &slot )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ for ( QValueList<Connection>::Iterator it = r->connections.begin(); it != r->connections.end(); ++it ) {
+ Connection conn = *it;
+ if ( conn.sender == sender &&
+ conn.signal == signal &&
+ conn.receiver == receiver &&
+ conn.slot == slot ) {
+ r->connections.remove( it );
+ break;
+ }
+ }
+}
+
+QValueList<MetaDataBase::Connection> MetaDataBase::connections( QObject *o )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return QValueList<Connection>();
+ }
+ return r->connections;
+}
+
+QValueList<MetaDataBase::Connection> MetaDataBase::connections( QObject *o, QObject *sender,
+ QObject *receiver )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return QValueList<Connection>();
+ }
+ QValueList<Connection>::Iterator it = r->connections.begin();
+ QValueList<Connection> ret;
+ QValueList<Connection>::Iterator conn;
+ while ( ( conn = it ) != r->connections.end() ) {
+ ++it;
+ if ( (*conn).sender == sender &&
+ (*conn).receiver == receiver )
+ ret << *conn;
+ }
+
+ return ret;
+}
+
+QValueList<MetaDataBase::Connection> MetaDataBase::connections( QObject *o, QObject *object )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return QValueList<Connection>();
+ }
+ QValueList<Connection>::Iterator it = r->connections.begin();
+ QValueList<Connection> ret;
+ QValueList<Connection>::Iterator conn;
+ while ( ( conn = it ) != r->connections.end() ) {
+ ++it;
+ if ( (*conn).sender == object ||
+ (*conn).receiver == object )
+ ret << *conn;
+ }
+ return ret;
+}
+
+void MetaDataBase::doConnections( QObject *o )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ QObject *sender = 0, *receiver = 0;
+ QObjectList *l = 0;
+ QValueList<Connection>::Iterator it = r->connections.begin();
+ for ( ; it != r->connections.end(); ++it ) {
+ Connection conn = *it;
+ if ( qstrcmp( conn.sender->name(), o->name() ) == 0 ) {
+ sender = o;
+ } else {
+ l = o->queryList( 0, conn.sender->name(), false );
+ if ( !l || !l->first() ) {
+ delete l;
+ continue;
+ }
+ sender = l->first();
+ delete l;
+ }
+ if ( qstrcmp( conn.receiver->name(), o->name() ) == 0 ) {
+ receiver = o;
+ } else {
+ l = o->queryList( 0, conn.receiver->name(), false );
+ if ( !l || !l->first() ) {
+ delete l;
+ continue;
+ }
+ receiver = l->first();
+ delete l;
+ }
+ QString s = "2""%1";
+ s = s.arg( conn.signal );
+ QString s2 = "1""%1";
+ s2 = s2.arg( conn.slot );
+
+ QStrList signalList = sender->metaObject()->signalNames( true );
+ QStrList slotList = receiver->metaObject()->slotNames( true );
+
+ // avoid warnings
+ if ( signalList.find( conn.signal ) == -1 ||
+ slotList.find( conn.slot ) == -1 )
+ continue;
+
+ QObject::connect( sender, s, receiver, s2 );
+ }
+}
+
+void MetaDataBase::addSlot( QObject *o, const QCString &slot, const QString& specifier,
+ const QString &access, const QString &language, const QString &returnType )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ Slot s;
+ s.slot = slot;
+ s.specifier = specifier;
+ s.access = access;
+ s.language = language;
+ s.returnType = returnType;
+ QValueList<MetaDataBase::Slot>::Iterator it = r->slotList.find( s );
+ if ( it != r->slotList.end() )
+ r->slotList.remove( it );
+ r->slotList.append( s );
+#ifndef KOMMANDER
+ ( (FormWindow*)o )->formFile()->addSlotCode( s );
+#endif
+}
+
+void MetaDataBase::setSlotList( QObject *o, const QValueList<Slot> &slotList )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+ r->slotList = slotList;
+}
+
+void MetaDataBase::removeSlot( QObject *o, const QCString &slot, const QString& specifier,
+ const QString &access, const QString &language, const QString &returnType )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ for ( QValueList<Slot>::Iterator it = r->slotList.begin(); it != r->slotList.end(); ++it ) {
+ Slot s = *it;
+ if ( s.slot == slot &&
+ s.specifier == specifier &&
+ s.access == access &&
+ ( language.isEmpty() || s.language == language ) &&
+ ( returnType.isEmpty() || s.returnType == returnType ) ) {
+ r->slotList.remove( it );
+ break;
+ }
+ }
+}
+
+void MetaDataBase::removeSlot( QObject *o, const QString &slot )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ for ( QValueList<Slot>::Iterator it = r->slotList.begin(); it != r->slotList.end(); ++it ) {
+ Slot s = *it;
+ if ( normalizeSlot( s.slot ) == normalizeSlot( slot ) ) {
+ r->slotList.remove( it );
+ break;
+ }
+ }
+}
+
+QValueList<MetaDataBase::Slot> MetaDataBase::slotList( QObject *o )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return QValueList<Slot>();
+ }
+
+ return r->slotList;
+}
+
+bool MetaDataBase::isSlotUsed( QObject *o, const QCString &slot )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return false;
+ }
+
+ QValueList<Connection> conns = connections( o );
+ for ( QValueList<Connection>::Iterator it = conns.begin(); it != conns.end(); ++it ) {
+ if ( (*it).slot == slot )
+ return true;
+ }
+ return false;
+}
+
+void MetaDataBase::changeSlot( QObject *o, const QCString &slot, const QCString &newName )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ for ( QValueList<Slot>::Iterator it = r->slotList.begin(); it != r->slotList.end(); ++it ) {
+ Slot s = *it;
+ if ( normalizeSlot( s.slot ) == normalizeSlot( slot ) ) {
+ (*it).slot = newName;
+ return;
+ }
+ }
+}
+
+void MetaDataBase::changeSlotAttributes( QObject *o, const QCString &slot,
+ const QString& specifier, const QString &access,
+ const QString &language, const QString &returnType )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ for ( QValueList<Slot>::Iterator it = r->slotList.begin(); it != r->slotList.end(); ++it ) {
+ Slot s = *it;
+ if ( normalizeSlot( s.slot ) == normalizeSlot( slot ) ) {
+ (*it).specifier = specifier;
+ (*it).access = access;
+ (*it).language = language;
+ (*it).returnType = returnType;
+ return;
+ }
+ }
+}
+
+bool MetaDataBase::hasSlot( QObject *o, const QCString &slot, bool onlyCustom )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return false;
+ }
+
+ if ( !onlyCustom ) {
+ QStrList slotList = o->metaObject()->slotNames( true );
+ if ( slotList.find( slot ) != -1 )
+ return true;
+
+ if ( o->inherits( "FormWindow" ) ) {
+ o = ( (FormWindow*)o )->mainContainer();
+ slotList = o->metaObject()->slotNames( true );
+ if ( slotList.find( slot ) != -1 )
+ return true;
+ }
+
+ if ( o->inherits( "CustomWidget" ) ) {
+ MetaDataBase::CustomWidget *w = ( (::CustomWidget*)o )->customWidget();
+ for ( QValueList<Slot>::Iterator it = w->lstSlots.begin(); it != w->lstSlots.end(); ++it ) {
+ QCString s = (*it).slot;
+ if ( !s.data() )
+ continue;
+ if ( s == slot )
+ return true;
+ }
+ }
+ }
+
+ for ( QValueList<Slot>::Iterator it = r->slotList.begin(); it != r->slotList.end(); ++it ) {
+ Slot s = *it;
+ if ( normalizeSlot( s.slot ) == normalizeSlot( slot ) )
+ return true;
+ }
+
+ return false;
+}
+
+QString MetaDataBase::languageOfSlot( QObject *o, const QCString &slot )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return QString::null;
+ }
+
+ QString sl = slot;
+ sl = normalizeSlot( sl );
+ for ( QValueList<Slot>::Iterator it = r->slotList.begin(); it != r->slotList.end(); ++it ) {
+ Slot s = *it;
+ QString sl2 = s.slot;
+ sl2 = normalizeSlot( sl2 );
+ if ( sl == sl2 )
+ return s.language;
+ }
+ return QString::null;
+}
+
+bool MetaDataBase::addCustomWidget( CustomWidget *wid )
+{
+ setupDataBase();
+
+ for ( CustomWidget *w = cWidgets->first(); w; w = cWidgets->next() ) {
+ if ( *wid == *w ) {
+ for ( QValueList<QCString>::ConstIterator it = wid->lstSignals.begin(); it != wid->lstSignals.end(); ++it ) {
+ if ( !w->hasSignal( *it ) )
+ w->lstSignals.append( *it );
+ }
+ for ( QValueList<Slot>::ConstIterator it2 = wid->lstSlots.begin(); it2 != wid->lstSlots.end(); ++it2 ) {
+ if ( !w->hasSlot( MetaDataBase::normalizeSlot( (*it2).slot ).latin1() ) )
+ w->lstSlots.append( *it2 );
+ }
+ for ( QValueList<Property>::ConstIterator it3 = wid->lstProperties.begin(); it3 != wid->lstProperties.end(); ++it3 ) {
+ if ( !w->hasProperty( (*it3).property ) )
+ w->lstProperties.append( *it3 );
+ }
+ delete wid;
+ return false;
+ }
+ }
+
+
+ WidgetDatabaseRecord *r = new WidgetDatabaseRecord;
+ r->name = wid->className;
+ r->group = WidgetDatabase::widgetGroup( "Custom" );
+ r->toolTip = wid->className;
+ r->iconSet = new QIconSet( *wid->pixmap, *wid->pixmap );
+ r->isContainer = wid->isContainer;
+ wid->id = WidgetDatabase::addCustomWidget( r );
+ cWidgets->append( wid );
+ return true;
+}
+
+void MetaDataBase::removeCustomWidget( CustomWidget *w )
+{
+ cWidgets->removeRef( w );
+}
+
+QPtrList<MetaDataBase::CustomWidget> *MetaDataBase::customWidgets()
+{
+ setupDataBase();
+ return cWidgets;
+}
+
+MetaDataBase::CustomWidget *MetaDataBase::customWidget( int id )
+{
+ for ( CustomWidget *w = cWidgets->first(); w; w = cWidgets->next() ) {
+ if ( id == w->id )
+ return w;
+ }
+ return 0;
+}
+
+bool MetaDataBase::isWidgetNameUsed( CustomWidget *wid )
+{
+ for ( CustomWidget *w = cWidgets->first(); w; w = cWidgets->next() ) {
+ if ( w == wid )
+ continue;
+ if ( wid->className == w->className )
+ return true;
+ }
+ return false;
+}
+
+bool MetaDataBase::hasCustomWidget( const QString &className )
+{
+ for ( CustomWidget *w = cWidgets->first(); w; w = cWidgets->next() ) {
+ if ( w->className == className )
+ return true;
+ }
+ return false;
+}
+
+void MetaDataBase::setTabOrder( QWidget *w, const QWidgetList &order )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*) w );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ w, w->name(), w->className() );
+ return;
+ }
+
+ r->tabOrder = order;
+}
+
+QWidgetList MetaDataBase::tabOrder( QWidget *w )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*) w );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ w, w->name(), w->className() );
+ return QWidgetList();
+ }
+
+ return r->tabOrder;
+}
+
+void MetaDataBase::setIncludes( QObject *o, const QValueList<Include> &incs )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ r->includes = incs;
+}
+
+QValueList<MetaDataBase::Include> MetaDataBase::includes( QObject *o )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return QValueList<Include>();
+ }
+
+ return r->includes;
+}
+
+void MetaDataBase::setForwards( QObject *o, const QStringList &fwds )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ r->forwards = fwds;
+}
+
+QStringList MetaDataBase::forwards( QObject *o )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return QStringList();
+ }
+
+ return r->forwards;
+}
+
+void MetaDataBase::setSignalList( QObject *o, const QStringList &sigs )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ r->sigs.clear();
+
+ for ( QStringList::ConstIterator it = sigs.begin(); it != sigs.end(); ++it ) {
+ QString s = (*it).simplifyWhiteSpace();
+ bool hasSemicolon = s.endsWith( ";" );
+ if ( hasSemicolon )
+ s = s.left( s.length() - 1 );
+ int p = s.find( '(' );
+ if ( p < 0 )
+ p = s.length();
+ int sp = s.find( ' ' );
+ if ( sp >= 0 && sp < p ) {
+ s = s.mid( sp+1 );
+ p -= sp + 1;
+ }
+ if ( p == (int) s.length() )
+ s += "()";
+ if ( hasSemicolon )
+ s += ";";
+ r->sigs << s;
+ }
+}
+
+QStringList MetaDataBase::signalList( QObject *o )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return QStringList();
+ }
+
+ return r->sigs;
+}
+
+void MetaDataBase::setMetaInfo( QObject *o, MetaInfo mi )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ r->metaInfo = mi;
+}
+
+MetaDataBase::MetaInfo MetaDataBase::metaInfo( QObject *o )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return MetaInfo();
+ }
+
+ return r->metaInfo;
+}
+
+
+
+
+MetaDataBase::CustomWidget::CustomWidget()
+{
+ className = "MyCustomWidget";
+ includeFile = "mywidget.h";
+ includePolicy = Local;
+ sizeHint = QSize( -1, -1 );
+ pixmap = new QPixmap( PixmapChooser::loadPixmap( "customwidget.xpm" ) );
+ id = -1;
+ sizePolicy = QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred );
+ isContainer = false;
+}
+
+MetaDataBase::CustomWidget::CustomWidget( const CustomWidget &w )
+{
+ className = w.className;
+ includeFile = w.includeFile;
+ includePolicy = w.includePolicy;
+ sizeHint = w.sizeHint;
+ if ( w.pixmap )
+ pixmap = new QPixmap( *w.pixmap );
+ else
+ pixmap = 0;
+ id = w.id;
+ isContainer = w.isContainer;
+}
+
+void MetaDataBase::setCursor( QWidget *w, const QCursor &c )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)w );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ w, w->name(), w->className() );
+ return;
+ }
+
+ r->cursor = c;
+}
+
+QCursor MetaDataBase::cursor( QWidget *w )
+{
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)w );
+ if ( !r ) {
+ w->unsetCursor();
+ return w->cursor();
+ }
+
+ return r->cursor;
+}
+
+bool MetaDataBase::CustomWidget::operator==( const CustomWidget &w ) const
+{
+ return className == w.className;
+}
+
+MetaDataBase::CustomWidget &MetaDataBase::CustomWidget::operator=( const CustomWidget &w )
+{
+ delete pixmap;
+ className = w.className;
+ includeFile = w.includeFile;
+ includePolicy = w.includePolicy;
+ sizeHint = w.sizeHint;
+ if ( w.pixmap )
+ pixmap = new QPixmap( *w.pixmap );
+ else
+ pixmap = 0;
+ lstSignals = w.lstSignals;
+ lstSlots = w.lstSlots;
+ lstProperties = w.lstProperties;
+ id = w.id;
+ isContainer = w.isContainer;
+ return *this;
+}
+
+bool MetaDataBase::CustomWidget::hasSignal( const QCString &signal ) const
+{
+ QStrList sigList = QWidget::staticMetaObject()->signalNames( true );
+ if ( sigList.find( signal ) != -1 )
+ return true;
+ for ( QValueList<QCString>::ConstIterator it = lstSignals.begin(); it != lstSignals.end(); ++it ) {
+ if ( normalizeSlot( *it ) == normalizeSlot( signal ) )
+ return true;
+ }
+ return false;
+}
+
+bool MetaDataBase::CustomWidget::hasSlot( const QCString &slot ) const
+{
+ QStrList slotList = QWidget::staticMetaObject()->slotNames( true );
+ if ( slotList.find( normalizeSlot( slot ) ) != -1 )
+ return true;
+
+ for ( QValueList<MetaDataBase::Slot>::ConstIterator it = lstSlots.begin(); it != lstSlots.end(); ++it ) {
+ if ( normalizeSlot( (*it).slot ) == normalizeSlot( slot ) )
+ return true;
+ }
+ return false;
+}
+
+bool MetaDataBase::CustomWidget::hasProperty( const QCString &prop ) const
+{
+ QStrList propList = QWidget::staticMetaObject()->propertyNames( true );
+ if ( propList.find( prop ) != -1 )
+ return true;
+
+ for ( QValueList<MetaDataBase::Property>::ConstIterator it = lstProperties.begin(); it != lstProperties.end(); ++it ) {
+ if ( (*it).property == prop )
+ return true;
+ }
+ return false;
+}
+
+void MetaDataBase::setPixmapArgument( QObject *o, int pixmap, const QString &arg )
+{
+ if ( !o )
+ return;
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ r->pixmapArguments.remove( pixmap );
+ r->pixmapArguments.insert( pixmap, arg );
+}
+
+QString MetaDataBase::pixmapArgument( QObject *o, int pixmap )
+{
+ if ( !o )
+ return QString::null;
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return QString::null;
+ }
+
+ return *r->pixmapArguments.find( pixmap );
+}
+
+void MetaDataBase::clearPixmapArguments( QObject *o )
+{
+ if ( !o )
+ return;
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ r->pixmapArguments.clear();
+}
+
+
+void MetaDataBase::setPixmapKey( QObject *o, int pixmap, const QString &arg )
+{
+ if ( !o )
+ return;
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ r->pixmapKeys.remove( pixmap );
+ r->pixmapKeys.insert( pixmap, arg );
+}
+
+QString MetaDataBase::pixmapKey( QObject *o, int pixmap )
+{
+ if ( !o )
+ return QString::null;
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return QString::null;
+ }
+
+ return *r->pixmapKeys.find( pixmap );
+}
+
+void MetaDataBase::clearPixmapKeys( QObject *o )
+{
+ if ( !o )
+ return;
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ r->pixmapKeys.clear();
+}
+
+
+
+void MetaDataBase::setColumnFields( QObject *o, const QMap<QString, QString> &columnFields )
+{
+ if ( !o )
+ return;
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ r->columnFields = columnFields;
+}
+
+QMap<QString, QString> MetaDataBase::columnFields( QObject *o )
+{
+ if ( !o )
+ return QMap<QString, QString>();
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return QMap<QString, QString>();
+ }
+
+ return r->columnFields;
+}
+
+QString MetaDataBase::normalizeSlot( const QString &s )
+{
+ return Parser::cleanArgs( s );
+}
+
+void MetaDataBase::clear( QObject *o )
+{
+ if ( !o )
+ return;
+ setupDataBase();
+ db->remove( (void*)o );
+ for ( QPtrDictIterator<QWidget> it( *( (FormWindow*)o )->widgets() ); it.current(); ++it )
+ db->remove( (void*)it.current() );
+}
+
+void MetaDataBase::setExportMacro( QObject *o, const QString &macro )
+{
+ if ( !o )
+ return;
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return;
+ }
+
+ r->exportMacro = macro;
+}
+
+QString MetaDataBase::exportMacro( QObject *o )
+{
+ if ( !o )
+ return "";
+ setupDataBase();
+ MetaDataBaseRecord *r = db->find( (void*)o );
+ if ( !r ) {
+ qWarning( "No entry for %p (%s, %s) found in MetaDataBase",
+ o, o->name(), o->className() );
+ return "";
+ }
+
+ return r->exportMacro;
+}
+
+bool MetaDataBase::hasObject( QObject *o )
+{
+ return !!db->find( o );
+}
+
diff --git a/kommander/editor/metadatabase.h b/kommander/editor/metadatabase.h
new file mode 100644
index 00000000..8bb79c38
--- /dev/null
+++ b/kommander/editor/metadatabase.h
@@ -0,0 +1,222 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef METADATABASE_H
+#define METADATABASE_H
+
+#include <qvariant.h>
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qmap.h>
+#include <qptrlist.h>
+#include <qsizepolicy.h>
+#include <qsize.h>
+#include <qwidgetlist.h>
+#include <qcursor.h>
+
+#include "pixmapchooser.h"
+
+class QObject;
+class QPixmap;
+
+class MetaDataBase
+{
+public:
+ struct Connection
+ {
+ QObject *sender, *receiver;
+ QCString signal, slot;
+ bool operator==( const Connection &c ) const {
+ return sender == c.sender && receiver == c.receiver &&
+ signal == c.signal && slot == c.slot ;
+ }
+ };
+
+ struct Slot
+ {
+ QString returnType;
+ QCString slot;
+ QString specifier;
+ QString access;
+ QString language;
+ bool operator==( const Slot &s ) const {
+ return ( returnType == s.returnType &&
+ slot == s.slot &&
+ access == s.access &&
+ specifier == s.specifier &&
+ language == s.language
+ );
+ }
+ };
+
+ struct Property
+ {
+ QCString property;
+ QString type;
+ bool operator==( const Property &p ) const {
+ return property == p.property &&
+ type == p.type;
+ }
+ };
+
+ struct CustomWidget
+ {
+ CustomWidget();
+ CustomWidget( const CustomWidget &w );
+ ~CustomWidget() { delete pixmap; } // inlined to work around 2.7.2.3 bug
+ bool operator==( const CustomWidget &w ) const;
+ CustomWidget &operator=( const CustomWidget &w );
+
+ bool hasSignal( const QCString &signal ) const;
+ bool hasSlot( const QCString &slot ) const;
+ bool hasProperty( const QCString &prop ) const;
+
+ enum IncludePolicy { Global, Local };
+ QString className;
+ QString includeFile;
+ IncludePolicy includePolicy;
+ QSize sizeHint;
+ QSizePolicy sizePolicy;
+ QPixmap *pixmap;
+ QValueList<QCString> lstSignals;
+ QValueList<Slot> lstSlots;
+ QValueList<Property> lstProperties;
+ int id;
+ bool isContainer;
+ };
+
+ struct Include
+ {
+ Include() : header(), location(), implDecl( "in implementation" ) {}
+ QString header;
+ QString location;
+ bool operator==( const Include &i ) const {
+ return header == i.header && location == i.location;
+ }
+ QString implDecl;
+ };
+
+ struct MetaInfo
+ {
+ QString license;
+ QString version;
+ QString comment;
+ QString author;
+ };
+
+ struct EventDescription
+ {
+ QString name;
+ QStringList args;
+#if defined(Q_FULL_TEMPLATE_INSTANTIATION)
+ bool operator==( const EventDescription& ) const { return FALSE; }
+#endif
+ };
+
+ MetaDataBase();
+ static void clearDataBase();
+
+ static void addEntry( QObject *o );
+ static void removeEntry( QObject *o );
+ static void setPropertyChanged( QObject *o, const QString &property, bool changed );
+ static bool isPropertyChanged( QObject *o, const QString &property );
+ static void setPropertyComment( QObject *o, const QString &property, const QString &comment );
+ static QString propertyComment( QObject *o, const QString &property );
+ static QStringList changedProperties( QObject *o );
+
+ static void setFakeProperty( QObject *o, const QString &property, const QVariant& value );
+ static QVariant fakeProperty( QObject * o, const QString &property );
+ static QMap<QString,QVariant>* fakeProperties( QObject* o );
+
+ static void setSpacing( QObject *o, int spacing );
+ static int spacing( QObject *o );
+ static void setMargin( QObject *o, int margin );
+ static int margin( QObject *o );
+
+ static void addConnection( QObject *o, QObject *sender, const QCString &signal,
+ QObject *receiver, const QCString &slot );
+ static void removeConnection( QObject *o, QObject *sender, const QCString &signal,
+ QObject *receiver, const QCString &slot );
+ static QValueList<Connection> connections( QObject *o );
+ static QValueList<Connection> connections( QObject *o, QObject *sender, QObject *receiver );
+ static QValueList<Connection> connections( QObject *o, QObject *object );
+ static void doConnections( QObject *o );
+
+ static void addSlot( QObject *o, const QCString &slot, const QString& specifier, const QString &access, const QString &language, const QString &returnType );
+ static void removeSlot( QObject *o, const QCString &slot, const QString& specifier, const QString &access, const QString &language, const QString &returnType );
+ static void removeSlot( QObject *o, const QString &slot );
+ static QValueList<Slot> slotList( QObject *o );
+ static bool isSlotUsed( QObject *o, const QCString &slot );
+ static bool hasSlot( QObject *o, const QCString &slot, bool onlyCustom = FALSE );
+ static void changeSlot( QObject *o, const QCString &slot, const QCString &newName );
+ static void changeSlotAttributes( QObject *o, const QCString &slot,
+ const QString& specifier, const QString &access,
+ const QString &language, const QString &returnType );
+ static QString languageOfSlot( QObject *o, const QCString &slot );
+ static void setSlotList( QObject *o, const QValueList<Slot> &slotList );
+
+ static bool addCustomWidget( CustomWidget *w );
+ static void removeCustomWidget( CustomWidget *w );
+ static QPtrList<CustomWidget> *customWidgets();
+ static CustomWidget *customWidget( int id );
+ static bool isWidgetNameUsed( CustomWidget *w );
+ static bool hasCustomWidget( const QString &className );
+
+ static void setTabOrder( QWidget *w, const QWidgetList &order );
+ static QWidgetList tabOrder( QWidget *w );
+
+ static void setIncludes( QObject *o, const QValueList<Include> &incs );
+ static QValueList<Include> includes( QObject *o );
+
+ static void setForwards( QObject *o, const QStringList &fwds );
+ static QStringList forwards( QObject *o );
+
+ static void setSignalList( QObject *o, const QStringList &sigs );
+ static QStringList signalList( QObject *o );
+
+ static void setMetaInfo( QObject *o, MetaInfo mi );
+ static MetaInfo metaInfo( QObject *o );
+
+ static void setCursor( QWidget *w, const QCursor &c );
+ static QCursor cursor( QWidget *w );
+
+ static void setPixmapArgument( QObject *o, int pixmap, const QString &arg );
+ static QString pixmapArgument( QObject *o, int pixmap );
+ static void clearPixmapArguments( QObject *o );
+
+ static void setPixmapKey( QObject *o, int pixmap, const QString &arg );
+ static QString pixmapKey( QObject *o, int pixmap );
+ static void clearPixmapKeys( QObject *o );
+
+ static void setColumnFields( QObject *o, const QMap<QString, QString> &columnFields );
+ static QMap<QString, QString> columnFields( QObject *o );
+
+ static QString normalizeSlot( const QString &slot );
+
+ static void clear( QObject *o );
+
+ static void setExportMacro( QObject *o, const QString &macro );
+ static QString exportMacro( QObject *o );
+
+ static bool hasObject( QObject *o );
+
+};
+
+#endif
diff --git a/kommander/editor/multilineeditor.ui b/kommander/editor/multilineeditor.ui
new file mode 100644
index 00000000..9b9cbe9f
--- /dev/null
+++ b/kommander/editor/multilineeditor.ui
@@ -0,0 +1,225 @@
+<!DOCTYPE UI><UI>
+<class>MultiLineEditorBase</class><comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>MultiLineEditorBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>421</width>
+ <height>275</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Edit Multiline Edit</string>
+ </property>
+ <property stdset="1">
+ <name>sizeGripEnabled</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>&lt;b&gt;Edit Multiline Edit&lt;/b&gt;&lt;p&gt;Enter the text and click the &lt;b&gt;OK&lt;/b&gt;-Button to apply the changes.&lt;/p&gt;</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Text:</string>
+ </property>
+ <property>
+ <name>buddy</name>
+ <cstring>preview</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QMultiLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>preview</cstring>
+ </property>
+ <property stdset="1">
+ <name>wordWrap</name>
+ <enum>WidgetWidth</enum>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>Enter your text here.</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Help</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buttonOk</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;OK</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>default</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>Close the dialog and apply all the changes.</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buttonApply</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Apply</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>Apply all changes.</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Cancel</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>Close the dialog and discard any changes.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>MultiLineEditorBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>MultiLineEditorBase</receiver>
+ <slot>okClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonApply</sender>
+ <signal>clicked()</signal>
+ <receiver>MultiLineEditorBase</receiver>
+ <slot>applyClicked()</slot>
+ </connection>
+ <slot access="protected">applyClicked()</slot>
+ <slot access="protected">okClicked()</slot>
+</connections>
+</UI>
diff --git a/kommander/editor/multilineeditorimpl.cpp b/kommander/editor/multilineeditorimpl.cpp
new file mode 100644
index 00000000..1b823d3f
--- /dev/null
+++ b/kommander/editor/multilineeditorimpl.cpp
@@ -0,0 +1,98 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "multilineeditorimpl.h"
+#include "formwindow.h"
+#include "command.h"
+#include "mainwindow.h"
+
+#include <qmultilineedit.h>
+#include <qpushbutton.h>
+
+#include <klocale.h>
+
+MultiLineEditor::MultiLineEditor( QWidget *parent, QWidget *editWidget, FormWindow *fw )
+ : MultiLineEditorBase( parent, 0, true ), formwindow( fw )
+{
+ connect( buttonHelp, SIGNAL( clicked() ), MainWindow::self, SLOT( showDialogHelp() ) );
+ mlined = (QMultiLineEdit*)editWidget;
+ // #### complete list of properties here
+ preview->setAlignment( mlined->alignment() );
+ preview->setMaxLines( mlined->maxLines() );
+ preview->setWordWrap( mlined->wordWrap() );
+ preview->setWrapColumnOrWidth( mlined->wrapColumnOrWidth() );
+ preview->setWrapPolicy( mlined->wrapPolicy() );
+ //preview->setTextFormat( mlined->textFormat() );
+ preview->setText( mlined->text() );
+ preview->setFocus();
+ preview->selectAll();
+}
+
+void MultiLineEditor::okClicked()
+{
+ applyClicked();
+ accept();
+}
+
+void MultiLineEditor::applyClicked()
+{
+ PopulateMultiLineEditCommand *cmd = new PopulateMultiLineEditCommand( i18n("Set Text of '%1'" ).arg( mlined->name() ),
+ formwindow, mlined, preview->text() );
+ cmd->execute();
+ formwindow->commandHistory()->addCommand( cmd );
+ preview->setFocus();
+}
+
+
+TextEditor::TextEditor( QWidget *parent, const QString &text )
+ : MultiLineEditorBase( parent, 0, true )
+{
+ buttonApply->hide();
+ setCaption( i18n("Text" ) );
+ preview->setText( text );
+ preview->setFocus();
+ preview->selectAll();
+}
+
+QString TextEditor::getText( QWidget *parent, const QString &text )
+{
+ TextEditor dlg( parent, text );
+ if ( dlg.exec() == QDialog::Accepted ) {
+ QString txt = dlg.preview->text();
+ int i = txt.length() - 1;
+ while ( i >= 0 &&
+ ( txt[ i ] == '\n' || txt[ i ] == ' ' || txt[ i ] == '\t' || txt[ i ].isSpace() ) ) {
+ txt.remove( i, 1 );
+ i--;
+ }
+ return txt;
+ }
+ return QString::null;
+}
+
+void TextEditor::okClicked()
+{
+ accept();
+}
+
+void TextEditor::applyClicked()
+{
+}
+#include "multilineeditorimpl.moc"
diff --git a/kommander/editor/multilineeditorimpl.h b/kommander/editor/multilineeditorimpl.h
new file mode 100644
index 00000000..16314b2a
--- /dev/null
+++ b/kommander/editor/multilineeditorimpl.h
@@ -0,0 +1,61 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef MULTILINEEDITORIMPL_H
+#define MULTILINEEDITORIMPL_H
+
+#include "multilineeditor.h"
+
+class FormWindow;
+class QMultiLineEdit;
+
+class MultiLineEditor : public MultiLineEditorBase
+{
+ Q_OBJECT
+
+public:
+ MultiLineEditor( QWidget *parent, QWidget *editWidget, FormWindow *fw );
+
+protected slots:
+ void okClicked();
+ void applyClicked();
+
+private:
+ QMultiLineEdit *mlined;
+ FormWindow *formwindow;
+
+};
+
+class TextEditor : public MultiLineEditorBase
+{
+ Q_OBJECT
+
+public:
+ TextEditor( QWidget *parent, const QString &text );
+
+ static QString getText( QWidget *parent, const QString &text );
+
+protected slots:
+ void okClicked();
+ void applyClicked();
+
+};
+
+#endif
diff --git a/kommander/editor/newform.ui b/kommander/editor/newform.ui
new file mode 100644
index 00000000..16bb0365
--- /dev/null
+++ b/kommander/editor/newform.ui
@@ -0,0 +1,210 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>NewFormBase</class>
+<comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>NewFormBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>557</width>
+ <height>436</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>New File</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;New Form&lt;/b&gt;&lt;p&gt;Select a template for the new form and click the &lt;b&gt;OK&lt;/b&gt;-button to create it.&lt;/p&gt;</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>helpButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Create a new form using the selected template.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog without creating a new form.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QIconView" row="1" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>templateView</cstring>
+ </property>
+ <property name="gridX">
+ <number>120</number>
+ </property>
+ <property name="resizeMode">
+ <enum>Adjust</enum>
+ </property>
+ <property name="itemsMovable">
+ <bool>false</bool>
+ </property>
+ <property name="wordWrapIconText">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Displays a list of the available templates.</string>
+ </property>
+ </widget>
+ <spacer row="0" column="2">
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>NewFormBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>NewFormBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>templateView</sender>
+ <signal>currentChanged(QIconViewItem*)</signal>
+ <receiver>NewFormBase</receiver>
+ <slot>itemChanged(QIconViewItem*)</slot>
+ </connection>
+ <connection>
+ <sender>templateView</sender>
+ <signal>doubleClicked(QIconViewItem*)</signal>
+ <receiver>NewFormBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>templateView</sender>
+ <signal>returnPressed(QIconViewItem*)</signal>
+ <receiver>NewFormBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>templateView</tabstop>
+ <tabstop>helpButton</tabstop>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+</tabstops>
+<slots>
+ <slot access="protected">itemChanged( QIconViewItem * )</slot>
+ <slot access="protected">projectChanged( const QString &amp; )</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/editor/newformimpl.cpp b/kommander/editor/newformimpl.cpp
new file mode 100644
index 00000000..70e7b1df
--- /dev/null
+++ b/kommander/editor/newformimpl.cpp
@@ -0,0 +1,202 @@
+/**********************************************************************
+ This file is based on Qt Designer, Copyright (C) 2000 Trolltech AS. �All rights reserved.
+
+ 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.
+
+ Modified for Kommander:
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+
+**********************************************************************/
+
+#include "newformimpl.h"
+#include "mainwindow.h"
+#include "pixmapchooser.h"
+#include "metadatabase.h"
+#include "formwindow.h"
+#include "widgetfactory.h"
+#include "widgetdatabase.h"
+#include "actioneditorimpl.h"
+#include "hierarchyview.h"
+#include "resource.h"
+#include "formfile.h"
+
+#include <qiconview.h>
+#include <qlabel.h>
+#include <qfileinfo.h>
+#include <qdir.h>
+#include <qregexp.h>
+#include <qpushbutton.h>
+#include <stdlib.h>
+#include <qcombobox.h>
+#include <qworkspace.h>
+#include <qmessagebox.h>
+
+#include <klocale.h>
+#include <kglobal.h>
+#include <kstandarddirs.h>
+
+#include "dialog.h"
+
+static int _forms = 0;
+
+FormItem::FormItem(QIconView *view, const QString &text) : NewItem(view, text)
+{
+}
+
+void FormItem::insert()
+{
+ QString n = "Form" + QString::number(++_forms);
+ FormWindow *fw = 0;
+ FormFile *ff = new FormFile(FormFile::createUnnamedFileName(), true);
+ fw = new FormWindow(ff, MainWindow::self, MainWindow::self->qWorkspace(), n);
+ MetaDataBase::addEntry(fw);
+ QWidget *w = 0L;
+ if (fType == Dialog)
+ {
+ w = WidgetFactory::create(WidgetDatabase::idFromClassName("Dialog"), fw, n.latin1());
+ fw->setMainContainer(w);
+ }
+ else if (fType == Wizard)
+ {
+ w = WidgetFactory::create(WidgetDatabase::idFromClassName("Wizard"), fw, n.latin1());
+ fw->setMainContainer(w);
+ }
+ if (w)
+ {
+ w->setProperty("useInternalParser", true);
+ MetaDataBase::setPropertyChanged(w, "useInternalParser", true);
+ }
+ fw->setCaption(n);
+ fw->resize(600, 480);
+ MainWindow::self->insertFormWindow(fw);
+
+ // the wizard might have changed a lot, lets update everything
+ MainWindow::self->actioneditor()->setFormWindow(fw);
+ MainWindow::self->objectHierarchy()->setFormWindow(fw, fw);
+ fw->killAccels(fw);
+ fw->setFocus();
+}
+
+
+
+CustomFormItem::CustomFormItem(QIconView *view, const QString &text)
+ : NewItem(view, text)
+{
+}
+
+static void unifyFormName(FormWindow *fw, QWorkspace *qworkspace)
+{
+ QStringList lst;
+ QWidgetList windows = qworkspace->windowList();
+ for (QWidget* w = windows.first(); w; w = windows.next())
+ if (w != fw)
+ lst << w->name();
+
+ if (lst.findIndex(fw->name()) == -1)
+ return;
+ QString origName = fw->name();
+ QString n = origName;
+ int i = 1;
+ while (lst.findIndex(n) != -1)
+ n = origName + QString::number(i++);
+ fw->setName(n);
+ fw->setCaption(n);
+}
+
+void CustomFormItem::insert()
+{
+ QString filename = templateFileName();
+ if (!filename.isEmpty() && QFile::exists(filename))
+ {
+ Resource resource(MainWindow::self);
+ FormFile *ff = new FormFile(filename, true);
+ if (!resource.load(ff))
+ {
+ QMessageBox::information(MainWindow::self, i18n("Load Template"),
+ i18n("Could not load form description from template '%1'").arg(filename));
+ delete ff;
+ return;
+ }
+ ff->setFileName(QString::null);
+ if (MainWindow::self->formWindow())
+ {
+ MainWindow::self->formWindow()->setFileName(QString::null);
+ unifyFormName(MainWindow::self->formWindow(), MainWindow::self->qWorkspace());
+ }
+ }
+}
+
+
+NewForm::NewForm(QWidget *parent, const QString &templatePath)
+ : NewFormBase(parent, 0, true)
+{
+ connect(helpButton, SIGNAL(clicked()), MainWindow::self, SLOT(showDialogHelp()));
+
+ QIconViewItem *cur = 0;
+ FormItem *fi = new FormItem(templateView, i18n("Dialog"));
+ allItems.append(fi);
+ fi->setFormType(FormItem::Dialog);
+ fi->setPixmap(PixmapChooser::loadPixmap("newform.xpm"));
+ fi->setDragEnabled(false);
+ cur = fi;
+ fi = new FormItem(templateView, i18n("Wizard"));
+ allItems.append(fi);
+ fi->setFormType(FormItem::Wizard);
+ fi->setPixmap(PixmapChooser::loadPixmap("newform.xpm"));
+ fi->setDragEnabled(false);
+
+
+ QStringList searchPaths = KGlobal::dirs()->findDirs("data", "kmdr-editor/templates");
+ if (!templatePath.isEmpty())
+ searchPaths.append(templatePath);
+
+
+ // search each path
+ for (QStringList::ConstIterator it = searchPaths.begin(); it != searchPaths.end(); ++it)
+ {
+ if (!QFile::exists(*it))
+ continue;
+ QDir dir(*it);
+ const QFileInfoList* fileList = dir.entryInfoList(QDir::DefaultFilter, QDir::DirsFirst | QDir::Name);
+ if (fileList)
+ for (QFileInfoListIterator fit(*fileList); fit.current(); ++fit)
+ {
+ QFileInfo* fi = fit.current();
+ if (!fi->isFile() || fi->extension() != "kmdr")
+ continue;
+ QString name = fi->baseName();
+ name = name.replace("_", " ");
+ CustomFormItem *ci = new CustomFormItem(templateView, name);
+ allItems.append(ci);
+ ci->setDragEnabled(false);
+ ci->setPixmap(PixmapChooser::loadPixmap("newform.xpm"));
+ ci->setTemplateFile(fi->absFilePath());
+ }
+ }
+ templateView->viewport()->setFocus();
+ templateView->setCurrentItem(cur);
+}
+
+void NewForm::accept()
+{
+ if (!templateView->currentItem())
+ return;
+ ((NewItem *) templateView->currentItem())->insert();
+ NewFormBase::accept();
+}
+
+
+void NewForm::itemChanged(QIconViewItem *item)
+{
+ Q_UNUSED(item);
+}
+
+#include "newformimpl.moc"
diff --git a/kommander/editor/newformimpl.h b/kommander/editor/newformimpl.h
new file mode 100644
index 00000000..12fec22c
--- /dev/null
+++ b/kommander/editor/newformimpl.h
@@ -0,0 +1,73 @@
+/**********************************************************************
+ This file is based on Qt Designer, Copyright (C) 2000 Trolltech AS. All rights reserved.
+
+ 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.
+
+ Modified for Kommander:
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+
+**********************************************************************/
+
+#ifndef NEWFORMIMPL_H
+#define NEWFORMIMPL_H
+
+#include "newform.h"
+#include <qiconview.h>
+
+class FormFile;
+
+
+class NewItem : public QIconViewItem
+{
+public:
+ enum Type {Form, CustomForm};
+ NewItem( QIconView *view, const QString &text ) : QIconViewItem( view, text ) {}
+ virtual void insert( ) = 0;
+};
+
+class FormItem : public NewItem
+{
+public:
+ enum FormType {Dialog, Wizard, MainWindow};
+ FormItem( QIconView *view, const QString &text);
+ void insert();
+ int rtti() const {return (int)Form;}
+ void setFormType(FormType ft) {fType = ft;}
+ FormType formType() const {return fType;}
+private:
+ FormType fType;
+};
+
+class CustomFormItem : public NewItem
+{
+public:
+ CustomFormItem( QIconView *view, const QString &text );
+ void insert();
+ int rtti() const {return (int)CustomForm; }
+ void setTemplateFile(const QString &tf) {templFile = tf;}
+ QString templateFileName() const {return templFile;}
+private:
+ QString templFile;
+};
+
+class NewForm : public NewFormBase
+{
+ Q_OBJECT
+public:
+ NewForm( QWidget *parent, const QString &templatePath );
+ void accept();
+protected slots:
+ void itemChanged(QIconViewItem *item);
+private:
+ QPtrList<QIconViewItem> allItems;
+};
+
+#endif
diff --git a/kommander/editor/orderindicator.cpp b/kommander/editor/orderindicator.cpp
new file mode 100644
index 00000000..31450bbf
--- /dev/null
+++ b/kommander/editor/orderindicator.cpp
@@ -0,0 +1,107 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qvariant.h> // HP-UX compiler need this here
+
+#include "orderindicator.h"
+#include "formwindow.h"
+
+#include <qpainter.h>
+#include <qbitmap.h>
+#include <qapplication.h>
+
+OrderIndicator::OrderIndicator( int i, QWidget* w, FormWindow *fw )
+ : QWidget( fw, "order_indicator", WMouseNoMask ), formWindow( fw )
+{
+ order = -1;
+ widget = w;
+ setBackgroundMode( NoBackground );
+ setAutoMask( true );
+ setOrder( i, w );
+}
+
+
+OrderIndicator::~OrderIndicator()
+{
+}
+
+
+void OrderIndicator::setOrder( int i, QWidget* wid )
+{
+ if ( widget != wid )
+ return;
+ if ( !wid->isVisibleTo( formWindow ) ) {
+ hide();
+ return;
+ }
+
+ if ( order == i ) {
+ show();
+ raise();
+ return;
+ }
+ order = i;
+ int w = fontMetrics().width( QString::number( i ) ) + 10;
+ int h = fontMetrics().lineSpacing() * 3 / 2;
+ QFont f( font() );
+ f.setBold( true );
+ setFont( f );
+ resize( QMAX( w, h ), h );
+ update(); // in case the size didn't change
+ reposition();
+ show();
+ raise();
+}
+
+void OrderIndicator::reposition()
+{
+ QPoint p =parentWidget()->mapFromGlobal( widget->mapToGlobal( widget->rect().topLeft() ) );
+ move( p - QPoint( width()/3, height()/3 ) );
+}
+
+
+void OrderIndicator::paintEvent( QPaintEvent * )
+{
+ QPainter p( this );
+ p.setPen( white );
+ p.setBrush( blue );
+ p.drawEllipse( rect() );
+ p.drawText( rect(), AlignCenter, QString::number( order ) );
+}
+
+
+void OrderIndicator::updateMask()
+{
+ QBitmap bm( size() );
+ bm.fill( color0 );
+ {
+ QPainter p( &bm, this );
+ p.setPen( color1 );
+ p.setBrush( color1 );
+ p.drawEllipse( rect() );
+ }
+ setMask( bm );
+}
+
+void OrderIndicator::mousePressEvent( QMouseEvent *e )
+{
+ QApplication::sendEvent( widget, e );
+}
+#include "orderindicator.moc"
diff --git a/kommander/editor/orderindicator.h b/kommander/editor/orderindicator.h
new file mode 100644
index 00000000..28cc7816
--- /dev/null
+++ b/kommander/editor/orderindicator.h
@@ -0,0 +1,52 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef ORDER_INDICATOR_H
+#define ORDER_INDICATOR_H
+
+#include <qwidget.h>
+
+class FormWindow;
+
+class OrderIndicator : public QWidget
+{
+ Q_OBJECT
+
+public:
+ OrderIndicator( int i, QWidget* w, FormWindow* fw );
+ ~OrderIndicator();
+
+ void setOrder( int i, QWidget* w );
+ void reposition();
+
+protected:
+ void paintEvent( QPaintEvent * );
+ void mousePressEvent( QMouseEvent *e );
+ void updateMask();
+
+private:
+ int order;
+ QWidget* widget;
+ FormWindow *formWindow;
+
+};
+
+
+#endif
diff --git a/kommander/editor/paletteeditor.ui b/kommander/editor/paletteeditor.ui
new file mode 100644
index 00000000..31a4cd8a
--- /dev/null
+++ b/kommander/editor/paletteeditor.ui
@@ -0,0 +1,518 @@
+<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
+<class>PaletteEditorBase</class>
+<comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>PaletteEditorBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>449</width>
+ <height>443</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="caption">
+ <string>Edit Palette</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupAutoPalette</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Build Palette</string>
+ </property>
+ <property name="alignment">
+ <set>AlignAuto</set>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>labelMainColor</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>50</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="lineWidth">
+ <number>1</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="midLineWidth">
+ <number>0</number>
+ </property>
+ <property name="text">
+ <string>&amp;3D effects:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter</set>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>buttonMainColor</cstring>
+ </property>
+ </widget>
+ <widget class="StyledButton">
+ <property name="name">
+ <cstring>buttonMainColor</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>StrongFocus</enum>
+ </property>
+ <property name="scale" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Choose a color</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Choose the effect-color for the generated palette.</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>labelMainColor2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>50</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="lineWidth">
+ <number>1</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="midLineWidth">
+ <number>0</number>
+ </property>
+ <property name="text">
+ <string>Back&amp;ground:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter</set>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>buttonMainColor2</cstring>
+ </property>
+ </widget>
+ <widget class="StyledButton">
+ <property name="name">
+ <cstring>buttonMainColor2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>StrongFocus</enum>
+ </property>
+ <property name="scale" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Choose a color</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Choose the background color for the generated palette.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>btnAdvanced</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Tune Palette...</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox126</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Preview</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Select &amp;palette:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>paletteCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Active Palette</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Inactive Palette</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Disabled Palette</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>paletteCombo</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="PreviewFrame">
+ <property name="name">
+ <cstring>previewFrame</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing11</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and apply all the changes.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and discard any changes.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>StyledButton</class>
+ <header location="local">styledbutton.h</header>
+ <sizehint>
+ <width>40</width>
+ <height>25</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ <signal>clicked()</signal>
+ <signal>changed()</signal>
+ <property type="Color">color</property>
+ <property type="Pixmap">pixmap</property>
+ <property type="Bool">scale</property>
+ </customwidget>
+ <customwidget>
+ <class>PreviewFrame</class>
+ <header location="local">previewframe.h</header>
+ <sizehint>
+ <width>200</width>
+ <height>200</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image1</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="1112">789c9dd2cb8e9b301406e07d9e0225bba89a09601350d505302c5b7559a9eac23e6672b363620c0ca9faeef53949da2e2a55eab123f9e38f2f217e5e475f3e7f8cd6cf8bde0b7f8008f6c2456b3518337ffdf6e1fb62992451e8691ac5cb778be55304d1277b6e71fc12c6ab0d157222e61bd8e4c812196f6216535a13f318624a6764b2495842e99558249014c81e99c6294b69d3376291424ae9806431638cd28628183081f4489e70ce13e4852878c129ad905992f18cd291283295517a466ed32ddfa64847945bb595c80e99a739cf29d54499ab9c528b2c58c10b86344428540148400a26b8a0541241b482d215523299494a0551c9562ae409091c32e0c82351410b942aa4e22a53941e882d36e41ed966d8903b2215f215f99a6143b6442afaafff5aff485658622584a091941256948443d1cabbdd6ebf3f28753c09a9e9cdc1fe703c9e4ea19f689a0430fa4c8908082be093d08d016bbb0bbd5e7ceafade5b30de19d083b3fa9e008cd39b9fafd69495b473af7fcfb15325c1d61eea0afaf005ddf97b5295c658a866338f97591babef7340fa396c6c5ca9e7fe650807d0bf566b4262299986ba335a3b4a2cc84b69ac85b1b673037d8fabf95b023a9c09cc7530e104dd5419ed6e27083fb09a7c752db5a9bd31cde4ec634ed8a39aebbe337618c3f6fdc5dee6d8b0bb0d6b5b8b1fad43d78fe4e14e3f6aace8e29d9d736777fea3c686eee0138c9726d4d00c548df7a315ff750f7ebc5ffc04a0e5308d</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>buttonMainColor2</sender>
+ <signal>clicked()</signal>
+ <receiver>PaletteEditorBase</receiver>
+ <slot>onChoose2ndMainColor()</slot>
+ </connection>
+ <connection>
+ <sender>paletteCombo</sender>
+ <signal>activated(int)</signal>
+ <receiver>PaletteEditorBase</receiver>
+ <slot>paletteSelected(int)</slot>
+ </connection>
+ <connection>
+ <sender>btnAdvanced</sender>
+ <signal>clicked()</signal>
+ <receiver>PaletteEditorBase</receiver>
+ <slot>onTune()</slot>
+ </connection>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>PaletteEditorBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>PaletteEditorBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>buttonMainColor</sender>
+ <signal>changed()</signal>
+ <receiver>PaletteEditorBase</receiver>
+ <slot>onChooseMainColor()</slot>
+ </connection>
+ <connection>
+ <sender>buttonMainColor</sender>
+ <signal>clicked()</signal>
+ <receiver>PaletteEditorBase</receiver>
+ <slot>onChooseMainColor()</slot>
+ </connection>
+ <connection>
+ <sender>buttonMainColor2</sender>
+ <signal>changed()</signal>
+ <receiver>PaletteEditorBase</receiver>
+ <slot>onChoose2ndMainColor()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+ <tabstop>buttonMainColor</tabstop>
+ <tabstop>buttonMainColor2</tabstop>
+ <tabstop>btnAdvanced</tabstop>
+ <tabstop>paletteCombo</tabstop>
+ <tabstop>buttonHelp</tabstop>
+</tabstops>
+<slots>
+ <slot access="protected">init()</slot>
+ <slot access="protected">destroy()</slot>
+ <slot access="protected">onTune()</slot>
+ <slot access="protected">onChoose2ndMainColor()</slot>
+ <slot access="protected">onChooseMainColor()</slot>
+ <slot access="protected">paletteSelected(int)</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>styledbutton.h</includehint>
+ <includehint>styledbutton.h</includehint>
+ <includehint>previewframe.h</includehint>
+</includehints>
+</UI>
diff --git a/kommander/editor/paletteeditoradvanced.ui b/kommander/editor/paletteeditoradvanced.ui
new file mode 100644
index 00000000..cf868b69
--- /dev/null
+++ b/kommander/editor/paletteeditoradvanced.ui
@@ -0,0 +1,766 @@
+<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
+<class>PaletteEditorAdvancedBase</class>
+<comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>PaletteEditorAdvancedBase</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>430</width>
+ <height>368</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Tune Palette</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Edit Palette&lt;/b&gt;&lt;p&gt;Change the current widget or form's palette.&lt;/p&gt;&lt;p&gt;Use a generated palette or select colors for each color group and each color role.&lt;/p&gt;&lt;p&gt;The palette can be tested with different widget layouts in the preview section.&lt;/p&gt;</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout14</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>MShape</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>MShadow</enum>
+ </property>
+ <property name="text">
+ <string>Select &amp;palette:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>paletteCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Active Palette</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Inactive Palette</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Disabled Palette</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>paletteCombo</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>ButtonGroup1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Auto</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkBuildInactive</cstring>
+ </property>
+ <property name="text">
+ <string>Build the inactive palette from the active palette.</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkBuildDisabled</cstring>
+ </property>
+ <property name="text">
+ <string>Build the disabled palette from the active palette.</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupCentral</cstring>
+ </property>
+ <property name="title">
+ <string>Central Color &amp;Roles</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Background</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Foreground</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Button</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Base</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Text</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>BrightText</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>ButtonText</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Highlight</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>HighlightText</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Link</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>LinkVisited</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>comboCentral</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Choose the central color role</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Select a color role.&lt;/b&gt;&lt;p&gt;Available central color roles are: &lt;ul&gt; &lt;li&gt;Background - general background color.&lt;/li&gt; &lt;li&gt;Foreground - general foreground color. &lt;/li&gt; &lt;li&gt;Base - used as the background color for example, for text entry widgets; it is usually white or another light color. &lt;/li&gt; &lt;li&gt;Text - the forground color used with Base. Usually this is the same as the Foreground, in which case it must provide good contrast both with the Background and with the Base. &lt;/li&gt; &lt;li&gt;Button - general button background color; useful where buttons need a background different from Background, as in the Macintosh style. &lt;/li&gt; &lt;li&gt;ButtonText - a foreground color used with the Button color. &lt;/li&gt; &lt;li&gt;Highlight - a color used to indicate a selected or highlighted item. &lt;/li&gt; &lt;li&gt;HighlightedText - a text color that contrasts to Highlight. &lt;/li&gt; &lt;li&gt;BrightText - a text color that is very different from Foreground and contrasts well with, for example, black. &lt;/li&gt; &lt;/ul&gt; &lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout32_2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal_Spacing1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>labelPixmap</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Choose pi&amp;xmap:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>buttonPixmap</cstring>
+ </property>
+ </widget>
+ <widget class="StyledButton">
+ <property name="name">
+ <cstring>buttonPixmap</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>TabFocus</enum>
+ </property>
+ <property name="scale" stdset="0">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Select a pixmap</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Choose a pixmap file for the selected central color role.</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>labelCentral</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>&amp;Select color:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>buttonCentral</cstring>
+ </property>
+ </widget>
+ <widget class="StyledButton">
+ <property name="name">
+ <cstring>buttonCentral</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>TabFocus</enum>
+ </property>
+ <property name="scale" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Choose a color</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Choose a color for the selected central color role.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupEffect</cstring>
+ </property>
+ <property name="title">
+ <string>3D Shadow &amp;Effects</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout32_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkBuildEffect</cstring>
+ </property>
+ <property name="text">
+ <string>Build &amp;from button color:</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Generate shadings</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Check to let 3D-effect colors be calculated from the button-color.</string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Light</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Midlight</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Mid</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Dark</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Shadow</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>comboEffect</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Choose 3D-effect color role</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Select a color effect role.&lt;/b&gt;&lt;p&gt;Available effect roles are: &lt;ul&gt; &lt;li&gt;Light - lighter than Button color. &lt;/li&gt; &lt;li&gt;Midlight - between Button and Light. &lt;/li&gt; &lt;li&gt;Mid - between Button and Dark. &lt;/li&gt; &lt;li&gt;Dark - darker than Button. &lt;/li&gt; &lt;li&gt;Shadow - a very dark color. &lt;/li&gt; &lt;/ul&gt;</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout31_2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal_Spacing3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>labelEffect</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Select co&amp;lor:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>buttonEffect</cstring>
+ </property>
+ </widget>
+ <widget class="StyledButton">
+ <property name="name">
+ <cstring>buttonEffect</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>TabFocus</enum>
+ </property>
+ <property name="scale" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Choose a color</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Choose a color for the selected effect color role.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal_Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and apply all the changes.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and discard any changes.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>StyledButton</class>
+ <header location="local">styledbutton.h</header>
+ <sizehint>
+ <width>40</width>
+ <height>25</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ <signal>clicked()</signal>
+ <signal>changed()</signal>
+ <property type="Color">color</property>
+ <property type="Pixmap">pixmap</property>
+ <property type="Bool">scale</property>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="1112">789c9dd2cb8e9b301406e07d9e0225bba89a09601350d505302c5b7559a9eac23e6672b363620c0ca9faeef53949da2e2a55eab123f9e38f2f217e5e475f3e7f8cd6cf8bde0b7f8008f6c2456b3518337ffdf6e1fb62992451e8691ac5cb778be55304d1277b6e71fc12c6ab0d157222e61bd8e4c812196f6216535a13f318624a6764b2495842e99558249014c81e99c6294b69d3376291424ae9806431638cd28628183081f4489e70ce13e4852878c129ad905992f18cd291283295517a466ed32ddfa64847945bb595c80e99a739cf29d54499ab9c528b2c58c10b86344428540148400a26b8a0541241b482d215523299494a0551c9562ae409091c32e0c82351410b942aa4e22a53941e882d36e41ed966d8903b2215f215f99a6143b6442afaafff5aff485658622584a091941256948443d1cabbdd6ebf3f28753c09a9e9cdc1fe703c9e4ea19f689a0430fa4c8908082be093d08d016bbb0bbd5e7ceafade5b30de19d083b3fa9e008cd39b9fafd69495b473af7fcfb15325c1d61eea0afaf005ddf97b5295c658a866338f97591babef7340fa396c6c5ca9e7fe650807d0bf566b4262299986ba335a3b4a2cc84b69ac85b1b673037d8fabf95b023a9c09cc7530e104dd5419ed6e27083fb09a7c752db5a9bd31cde4ec634ed8a39aebbe337618c3f6fdc5dee6d8b0bb0d6b5b8b1fad43d78fe4e14e3f6aace8e29d9d736777fea3c686eee0138c9726d4d00c548df7a315ff750f7ebc5ffc04a0e5308d</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>PaletteEditorAdvancedBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>PaletteEditorAdvancedBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>paletteCombo</sender>
+ <signal>activated(int)</signal>
+ <receiver>PaletteEditorAdvancedBase</receiver>
+ <slot>paletteSelected(int)</slot>
+ </connection>
+ <connection>
+ <sender>comboCentral</sender>
+ <signal>activated(int)</signal>
+ <receiver>PaletteEditorAdvancedBase</receiver>
+ <slot>onCentral(int)</slot>
+ </connection>
+ <connection>
+ <sender>buttonPixmap</sender>
+ <signal>clicked()</signal>
+ <receiver>PaletteEditorAdvancedBase</receiver>
+ <slot>onChoosePixmap()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCentral</sender>
+ <signal>clicked()</signal>
+ <receiver>PaletteEditorAdvancedBase</receiver>
+ <slot>onChooseCentralColor()</slot>
+ </connection>
+ <connection>
+ <sender>buttonEffect</sender>
+ <signal>clicked()</signal>
+ <receiver>PaletteEditorAdvancedBase</receiver>
+ <slot>onChooseEffectColor()</slot>
+ </connection>
+ <connection>
+ <sender>comboEffect</sender>
+ <signal>activated(int)</signal>
+ <receiver>PaletteEditorAdvancedBase</receiver>
+ <slot>onEffect(int)</slot>
+ </connection>
+ <connection>
+ <sender>checkBuildEffect</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>PaletteEditorAdvancedBase</receiver>
+ <slot>onToggleBuildEffects(bool)</slot>
+ </connection>
+ <connection>
+ <sender>buttonHelp</sender>
+ <signal>clicked()</signal>
+ <receiver>PaletteEditorAdvancedBase</receiver>
+ <slot>showHelp()</slot>
+ </connection>
+ <connection>
+ <sender>checkBuildEffect</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>comboEffect</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>checkBuildEffect</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>buttonEffect</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>checkBuildInactive</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>PaletteEditorAdvancedBase</receiver>
+ <slot>onToggleBuildInactive(bool)</slot>
+ </connection>
+ <connection>
+ <sender>checkBuildDisabled</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>PaletteEditorAdvancedBase</receiver>
+ <slot>onToggleBuildDisabled(bool)</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+ <tabstop>paletteCombo</tabstop>
+ <tabstop>checkBuildInactive</tabstop>
+ <tabstop>checkBuildDisabled</tabstop>
+ <tabstop>comboCentral</tabstop>
+ <tabstop>buttonPixmap</tabstop>
+ <tabstop>buttonCentral</tabstop>
+ <tabstop>checkBuildEffect</tabstop>
+ <tabstop>comboEffect</tabstop>
+ <tabstop>buttonEffect</tabstop>
+ <tabstop>buttonHelp</tabstop>
+</tabstops>
+<slots>
+ <slot access="protected">init()</slot>
+ <slot access="protected">destroy()</slot>
+ <slot access="protected">onToggleBuildDisabled(bool)</slot>
+ <slot access="protected">onCentral(int)</slot>
+ <slot access="protected">onChooseCentralColor()</slot>
+ <slot access="protected">onChooseEffectColor()</slot>
+ <slot access="protected">onChoosePixmap()</slot>
+ <slot access="protected">onEffect(int)</slot>
+ <slot access="protected">onToggleBuildEffects(bool)</slot>
+ <slot access="protected">onToggleBuildInactive(bool)</slot>
+ <slot access="protected">paletteSelected(int)</slot>
+ <slot>showHelp()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>styledbutton.h</includehint>
+ <includehint>styledbutton.h</includehint>
+ <includehint>styledbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/kommander/editor/paletteeditoradvancedimpl.cpp b/kommander/editor/paletteeditoradvancedimpl.cpp
new file mode 100644
index 00000000..3b5ccffd
--- /dev/null
+++ b/kommander/editor/paletteeditoradvancedimpl.cpp
@@ -0,0 +1,638 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "paletteeditoradvancedimpl.h"
+#include "styledbutton.h"
+#include "mainwindow.h"
+#include "formwindow.h"
+
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <qapplication.h>
+#include <qpushbutton.h>
+#include <qlistbox.h>
+#include <qpainter.h>
+#include <qgroupbox.h>
+
+/*!
+ Class used by PaletteEditor for bold combobox items
+*/
+
+class BoldListBoxText : public QListBoxText
+{
+public:
+ BoldListBoxText( QString text, QListBox* lb = 0 );
+
+protected:
+ virtual void paint( QPainter* );
+};
+
+BoldListBoxText::BoldListBoxText( QString text, QListBox* lb )
+ : QListBoxText( lb )
+{
+ setText( text );
+}
+
+void BoldListBoxText::paint( QPainter* painter )
+{
+ QFont f = painter->font();
+ f.setBold( true );
+ painter->setFont( f );
+
+ QListBoxText::paint( painter );
+}
+
+PaletteEditorAdvanced::PaletteEditorAdvanced( FormWindow *fw, QWidget * parent,
+ const char * name, bool modal, WFlags f )
+ : PaletteEditorAdvancedBase( parent, name, modal, f ), formWindow( fw ), selectedPalette(0)
+{
+ connect( buttonHelp, SIGNAL( clicked() ), MainWindow::self, SLOT( showDialogHelp() ) );
+
+ buttonPixmap->setEditor( StyledButton::PixmapEditor );
+
+ editPalette = QApplication::palette();
+ setPreviewPalette( editPalette );
+
+ buttonPixmap->setFormWindow( formWindow );
+
+ // force toggle event
+ checkBuildEffect->setChecked(false);
+ checkBuildEffect->setChecked(true);
+}
+
+PaletteEditorAdvanced::~PaletteEditorAdvanced()
+{
+}
+
+void PaletteEditorAdvanced::onToggleBuildInactive( bool v )
+{
+ if (selectedPalette == 1) {
+ groupCentral->setDisabled(v);
+ groupEffect->setDisabled(v);
+ }
+
+ if (v) {
+ buildInactive();
+ updateStyledButtons();
+ }
+}
+
+void PaletteEditorAdvanced::onToggleBuildDisabled( bool v )
+{
+ if (selectedPalette == 2) {
+ groupCentral->setDisabled(v);
+ groupEffect->setDisabled(v);
+ }
+
+ if (v) {
+ buildDisabled();
+ updateStyledButtons();
+ }
+}
+
+void PaletteEditorAdvanced::paletteSelected(int p)
+{
+ selectedPalette = p;
+
+ if(p == 1) { // inactive
+ groupCentral->setDisabled(checkBuildInactive->isChecked());
+ groupEffect->setDisabled(checkBuildInactive->isChecked());
+ }
+ else if (p == 2) { // disabled
+ groupCentral->setDisabled(checkBuildDisabled->isChecked());
+ groupEffect->setDisabled(checkBuildDisabled->isChecked());
+ }
+ else {
+ groupCentral->setEnabled(true);
+ groupEffect->setEnabled(true);
+ }
+ updateStyledButtons();
+}
+
+void PaletteEditorAdvanced::onChooseCentralColor()
+{
+ switch(selectedPalette) {
+ case 0:
+ default:
+ mapToActiveCentralRole( buttonCentral->color() );
+ break;
+ case 1:
+ mapToInactiveCentralRole( buttonCentral->color() );
+ break;
+ case 2:
+ mapToDisabledCentralRole( buttonCentral->color() );
+ break;
+ }
+ updateStyledButtons();
+}
+
+void PaletteEditorAdvanced::onChooseEffectColor()
+{
+ switch(selectedPalette) {
+ case 0:
+ default:
+ mapToActiveEffectRole( buttonEffect->color() );
+ break;
+ case 1:
+ mapToInactiveEffectRole( buttonEffect->color() );
+ break;
+ case 2:
+ mapToDisabledEffectRole( buttonEffect->color() );
+ break;
+ }
+ updateStyledButtons();
+}
+
+void PaletteEditorAdvanced::onChoosePixmap()
+{
+ if (buttonPixmap->pixmap()) {
+ switch(selectedPalette) {
+ case 0:
+ default:
+ mapToActivePixmapRole( *buttonPixmap->pixmap() );
+ break;
+ case 1:
+ mapToInactivePixmapRole( *buttonPixmap->pixmap() );
+ break;
+ case 2:
+ mapToDisabledPixmapRole( *buttonPixmap->pixmap() );
+ break;
+ }
+ }
+ updateStyledButtons();
+}
+
+void PaletteEditorAdvanced::onToggleBuildEffects( bool on )
+{
+ if (!on) return;
+ buildActiveEffect();
+ buildInactiveEffect();
+ buildDisabledEffect();
+}
+
+QColorGroup::ColorRole PaletteEditorAdvanced::centralFromItem( int item )
+{
+ switch( item ) {
+ case 0:
+ return QColorGroup::Background;
+ case 1:
+ return QColorGroup::Foreground;
+ case 2:
+ return QColorGroup::Button;
+ case 3:
+ return QColorGroup::Base;
+ case 4:
+ return QColorGroup::Text;
+ case 5:
+ return QColorGroup::BrightText;
+ case 6:
+ return QColorGroup::ButtonText;
+ case 7:
+ return QColorGroup::Highlight;
+ case 8:
+ return QColorGroup::HighlightedText;
+ case 9:
+ return QColorGroup::Link;
+ case 10:
+ return QColorGroup::LinkVisited;
+ default:
+ return QColorGroup::NColorRoles;
+ }
+}
+
+QColorGroup::ColorRole PaletteEditorAdvanced::effectFromItem( int item )
+{
+ switch( item ) {
+ case 0:
+ return QColorGroup::Light;
+ case 1:
+ return QColorGroup::Midlight;
+ case 2:
+ return QColorGroup::Mid;
+ case 3:
+ return QColorGroup::Dark;
+ case 4:
+ return QColorGroup::Shadow;
+ default:
+ return QColorGroup::NColorRoles;
+ }
+}
+
+void PaletteEditorAdvanced::onCentral( int item )
+{
+ QPixmap* p = 0;
+ QColor c;
+
+ switch(selectedPalette) {
+ case 0:
+ default:
+ c = editPalette.active().color( centralFromItem(item) );
+ p = editPalette.active().brush( centralFromItem(item) ).pixmap();
+ break;
+ case 1:
+ c = editPalette.inactive().color( centralFromItem(item) );
+ p = editPalette.inactive().brush( centralFromItem(item) ).pixmap();
+ break;
+ case 2:
+ c = editPalette.disabled().color( centralFromItem(item) );
+ p = editPalette.disabled().brush( centralFromItem(item) ).pixmap();
+ break;
+ }
+
+ buttonCentral->setColor(c);
+
+ if (p)
+ buttonPixmap->setPixmap( *p );
+ else
+ buttonPixmap->setPixmap( QPixmap() );
+}
+
+void PaletteEditorAdvanced::onEffect( int item )
+{
+ QColor c;
+ switch(selectedPalette) {
+ case 0:
+ default:
+ c = editPalette.active().color( effectFromItem(item) );
+ break;
+ case 1:
+ editPalette.inactive().color( effectFromItem(item) );
+ break;
+ case 2:
+ editPalette.disabled().color( effectFromItem(item) );
+ break;
+ }
+ buttonEffect->setColor(c);
+}
+
+void PaletteEditorAdvanced::mapToActiveCentralRole( const QColor& c )
+{
+ QColorGroup cg = editPalette.active();
+ cg.setColor( centralFromItem(comboCentral->currentItem()), c );
+ editPalette.setActive( cg );
+
+ buildActiveEffect();
+ if(checkBuildInactive->isChecked())
+ buildInactive();
+ if(checkBuildDisabled->isChecked())
+ buildDisabled();
+
+ setPreviewPalette( editPalette );
+}
+
+void PaletteEditorAdvanced::mapToActiveEffectRole( const QColor& c )
+{
+ QColorGroup cg = editPalette.active();
+ cg.setColor( effectFromItem(comboEffect->currentItem()), c );
+ editPalette.setActive( cg );
+
+ if(checkBuildInactive->isChecked())
+ buildInactive();
+ if(checkBuildDisabled->isChecked())
+ buildDisabled();
+
+ setPreviewPalette( editPalette );
+}
+
+void PaletteEditorAdvanced::mapToActivePixmapRole( const QPixmap& pm )
+{
+ QColorGroup::ColorRole role = centralFromItem(comboCentral->currentItem());
+ QColorGroup cg = editPalette.active();
+ if ( !pm.isNull() )
+ cg.setBrush( role, QBrush( cg.color( role ), pm ) );
+ else
+ cg.setBrush( role, QBrush( cg.color( role ) ) );
+ editPalette.setActive( cg );
+
+
+ buildActiveEffect();
+ if(checkBuildInactive->isChecked())
+ buildInactive();
+ if(checkBuildDisabled->isChecked())
+ buildDisabled();
+
+ setPreviewPalette( editPalette );
+}
+
+void PaletteEditorAdvanced::mapToInactiveCentralRole( const QColor& c )
+{
+ QColorGroup cg = editPalette.inactive();
+ cg.setColor( centralFromItem(comboCentral->currentItem()), c );
+ editPalette.setInactive( cg );
+
+ buildInactiveEffect();
+
+ setPreviewPalette( editPalette );
+}
+
+void PaletteEditorAdvanced::mapToInactiveEffectRole( const QColor& c )
+{
+ QColorGroup cg = editPalette.inactive();
+ cg.setColor( effectFromItem(comboEffect->currentItem()), c );
+ editPalette.setInactive( cg );
+
+ setPreviewPalette( editPalette );
+}
+
+void PaletteEditorAdvanced::mapToInactivePixmapRole( const QPixmap& pm )
+{
+ QColorGroup::ColorRole role = centralFromItem(comboCentral->currentItem());
+ QColorGroup cg = editPalette.inactive();
+ if ( !pm.isNull() )
+ cg.setBrush( role, QBrush( cg.color( role ), pm ) );
+ else
+ cg.setBrush( role, QBrush( cg.color( role ) ) );
+ editPalette.setInactive( cg );
+
+ setPreviewPalette( editPalette );
+}
+
+void PaletteEditorAdvanced::mapToDisabledCentralRole( const QColor& c )
+{
+ QColorGroup cg = editPalette.disabled();
+ cg.setColor( centralFromItem(comboCentral->currentItem()), c );
+ editPalette.setDisabled( cg );
+
+ buildDisabledEffect();
+
+ setPreviewPalette( editPalette );
+}
+
+void PaletteEditorAdvanced::mapToDisabledEffectRole( const QColor& c )
+{
+ QColorGroup cg = editPalette.disabled();
+ cg.setColor( effectFromItem(comboEffect->currentItem()), c );
+ editPalette.setDisabled( cg );
+
+ setPreviewPalette( editPalette );
+}
+
+void PaletteEditorAdvanced::mapToDisabledPixmapRole( const QPixmap& pm )
+{
+ QColorGroup::ColorRole role = centralFromItem(comboCentral->currentItem());
+ QColorGroup cg = editPalette.disabled();
+ if ( !pm.isNull() )
+ cg.setBrush( role, QBrush( cg.color( role ), pm ) );
+ else
+ cg.setBrush( role, QBrush( cg.color( role ) ) );
+
+ editPalette.setDisabled( cg );
+
+ setPreviewPalette( editPalette );
+}
+
+void PaletteEditorAdvanced::buildActiveEffect()
+{
+ QColorGroup cg = editPalette.active();
+ QColor btn = cg.color( QColorGroup::Button );
+
+ QPalette temp( btn, btn );
+
+ for (int i = 0; i<5; i++)
+ cg.setColor( effectFromItem(i), temp.active().color( effectFromItem(i) ) );
+
+ editPalette.setActive( cg );
+ setPreviewPalette( editPalette );
+
+ updateStyledButtons();
+}
+
+void PaletteEditorAdvanced::buildInactive()
+{
+ editPalette.setInactive( editPalette.active() );
+ buildInactiveEffect();
+}
+
+void PaletteEditorAdvanced::buildInactiveEffect()
+{
+ QColorGroup cg = editPalette.inactive();
+
+ QColor light, midlight, mid, dark, shadow;
+ QColor btn = cg.color( QColorGroup::Button );
+
+ light = btn.light(150);
+ midlight = btn.light(115);
+ mid = btn.dark(150);
+ dark = btn.dark();
+ shadow = black;
+
+ cg.setColor( QColorGroup::Light, light );
+ cg.setColor( QColorGroup::Midlight, midlight );
+ cg.setColor( QColorGroup::Mid, mid );
+ cg.setColor( QColorGroup::Dark, dark );
+ cg.setColor( QColorGroup::Shadow, shadow );
+
+ editPalette.setInactive( cg );
+ setPreviewPalette( editPalette );
+ updateStyledButtons();
+}
+
+void PaletteEditorAdvanced::buildDisabled()
+{
+ QColorGroup cg = editPalette.active();
+ cg.setColor( QColorGroup::ButtonText, darkGray );
+ cg.setColor( QColorGroup::Foreground, darkGray );
+ editPalette.setDisabled( cg );
+
+ buildDisabledEffect();
+}
+
+void PaletteEditorAdvanced::buildDisabledEffect()
+{
+ QColorGroup cg = editPalette.disabled();
+
+ QColor light, midlight, mid, dark, shadow;
+ QColor btn = cg.color( QColorGroup::Button );
+
+ light = btn.light(150);
+ midlight = btn.light(115);
+ mid = btn.dark(150);
+ dark = btn.dark();
+ shadow = black;
+
+ cg.setColor( QColorGroup::Light, light );
+ cg.setColor( QColorGroup::Midlight, midlight );
+ cg.setColor( QColorGroup::Mid, mid );
+ cg.setColor( QColorGroup::Dark, dark );
+ cg.setColor( QColorGroup::Shadow, shadow );
+
+ editPalette.setDisabled( cg );
+ setPreviewPalette( editPalette );
+ updateStyledButtons();
+}
+
+void PaletteEditorAdvanced::setPreviewPalette( const QPalette& pal )
+{
+ QColorGroup cg;
+
+ switch (selectedPalette) {
+ case 0:
+ default:
+ cg = pal.active();
+ break;
+ case 1:
+ cg = pal.inactive();
+ break;
+ case 2:
+ cg = pal.disabled();
+ break;
+ }
+ previewPalette.setActive( cg );
+ previewPalette.setInactive( cg );
+ previewPalette.setDisabled( cg );
+}
+
+void PaletteEditorAdvanced::updateStyledButtons()
+{
+ QColor central, effect;
+ QPixmap *pm = 0;
+ switch (selectedPalette) {
+ case 0:
+ default:
+ central = editPalette.active().color( centralFromItem( comboCentral->currentItem() ) );
+ effect = editPalette.active().color( effectFromItem( comboEffect->currentItem() ) );
+ pm = editPalette.active().brush( centralFromItem( comboCentral->currentItem() ) ).pixmap();
+ break;
+ case 1:
+ central = editPalette.inactive().color( centralFromItem( comboCentral->currentItem() ) );
+ effect = editPalette.inactive().color( effectFromItem( comboEffect->currentItem() ) );
+ pm = editPalette.inactive().brush( centralFromItem( comboCentral->currentItem() ) ).pixmap();
+ break;
+ case 2:
+ central = editPalette.disabled().color( centralFromItem( comboCentral->currentItem() ) );
+ effect = editPalette.disabled().color( effectFromItem( comboEffect->currentItem() ) );
+ pm = editPalette.disabled().brush( centralFromItem( comboCentral->currentItem() ) ).pixmap();
+ break;
+ }
+
+ buttonCentral->setColor(central);
+ buttonEffect->setColor(effect);
+ if ( pm && !pm->isNull() )
+ buttonPixmap->setPixmap( *pm );
+ else
+ buttonPixmap->setPixmap(QPixmap());
+}
+
+void PaletteEditorAdvanced::setPal( const QPalette& pal )
+{
+ editPalette = pal;
+ setPreviewPalette( pal );
+ updateStyledButtons();
+}
+
+QPalette PaletteEditorAdvanced::pal() const
+{
+ return editPalette;
+}
+
+void PaletteEditorAdvanced::setupBackgroundMode( BackgroundMode mode )
+{
+ int initRole = 0;
+
+ switch( mode ) {
+ case PaletteBackground:
+ initRole = 0;
+ break;
+ case PaletteForeground:
+ initRole = 1;
+ break;
+ case PaletteButton:
+ initRole = 2;
+ break;
+ case PaletteBase:
+ initRole = 3;
+ break;
+ case PaletteText:
+ initRole = 4;
+ break;
+ case PaletteBrightText:
+ initRole = 5;
+ break;
+ case PaletteButtonText:
+ initRole = 6;
+ break;
+ case PaletteHighlight:
+ initRole = 7;
+ break;
+ case PaletteHighlightedText:
+ initRole = 8;
+ break;
+ case PaletteLight:
+ initRole = 9;
+ break;
+ case PaletteMidlight:
+ initRole = 10;
+ break;
+ case PaletteDark:
+ initRole = 11;
+ break;
+ case PaletteMid:
+ initRole = 12;
+ break;
+ case PaletteShadow:
+ initRole = 13;
+ break;
+ default:
+ initRole = -1;
+ break;
+ }
+
+ if ( initRole <= -1 ) return;
+
+ if (initRole > 8 ) {
+ comboEffect->setCurrentItem( initRole - 9 );
+ if ( comboEffect->listBox() ) {
+ QString text = comboEffect->currentText();
+ comboEffect->listBox()->changeItem( new BoldListBoxText( text ), initRole - 9 );
+ }
+ }
+ else {
+ comboCentral->setCurrentItem( initRole );
+ if ( comboCentral->listBox() ) {
+ QString text = comboCentral->currentText();
+ comboCentral->listBox()->changeItem( new BoldListBoxText( text ), initRole );
+ }
+ }
+}
+
+QPalette PaletteEditorAdvanced::getPalette( bool *ok, const QPalette &init,
+ BackgroundMode mode, QWidget* parent,
+ const char* name, FormWindow *fw )
+{
+ PaletteEditorAdvanced* dlg = new PaletteEditorAdvanced( fw, parent, name, true );
+ dlg->setupBackgroundMode( mode );
+
+ if ( init != QPalette() )
+ dlg->setPal( init );
+ int resultCode = dlg->exec();
+
+ QPalette result = init;
+ if ( resultCode == QDialog::Accepted ) {
+ if ( ok )
+ *ok = true;
+ result = dlg->pal();
+ } else {
+ if ( ok )
+ *ok = false;
+ }
+ delete dlg;
+ return result;
+}
+#include "paletteeditoradvancedimpl.moc"
diff --git a/kommander/editor/paletteeditoradvancedimpl.h b/kommander/editor/paletteeditoradvancedimpl.h
new file mode 100644
index 00000000..a1b56c06
--- /dev/null
+++ b/kommander/editor/paletteeditoradvancedimpl.h
@@ -0,0 +1,90 @@
+#ifndef PALETTEEDITORADVANCEDIMPL_H
+#define PALETTEEDITORADVANCEDIMPL_H
+
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "paletteeditoradvanced.h"
+
+class FormWindow;
+
+class PaletteEditorAdvanced : public PaletteEditorAdvancedBase
+{
+ Q_OBJECT
+public:
+ PaletteEditorAdvanced( FormWindow *fw, QWidget * parent=0, const char * name=0,
+ bool modal=FALSE, WFlags f=0 );
+ ~PaletteEditorAdvanced();
+
+ static QPalette getPalette( bool *ok, const QPalette &pal, BackgroundMode mode = PaletteBackground,
+ QWidget* parent = 0, const char* name = 0, FormWindow *fw = 0 );
+
+protected slots:
+ void paletteSelected(int);
+
+ void onCentral( int );
+ void onEffect( int );
+
+ void onChooseCentralColor();
+ void onChooseEffectColor();
+ void onChoosePixmap();
+
+ void onToggleBuildEffects( bool );
+ void onToggleBuildInactive( bool );
+ void onToggleBuildDisabled( bool );
+
+protected:
+ void mapToActiveCentralRole( const QColor& );
+ void mapToActiveEffectRole( const QColor& );
+ void mapToActivePixmapRole( const QPixmap& );
+ void mapToInactiveCentralRole( const QColor& );
+ void mapToInactiveEffectRole( const QColor& );
+ void mapToInactivePixmapRole( const QPixmap& );
+ void mapToDisabledCentralRole( const QColor& );
+ void mapToDisabledEffectRole( const QColor& );
+ void mapToDisabledPixmapRole( const QPixmap& );
+
+
+ void buildPalette();
+ void buildActiveEffect();
+ void buildInactive();
+ void buildInactiveEffect();
+ void buildDisabled();
+ void buildDisabledEffect();
+
+private:
+ void setPreviewPalette( const QPalette& );
+ void updateStyledButtons();
+ void setupBackgroundMode( BackgroundMode );
+
+ QPalette pal() const;
+ void setPal( const QPalette& );
+
+ QColorGroup::ColorRole centralFromItem( int );
+ QColorGroup::ColorRole effectFromItem( int );
+ QPalette editPalette;
+ QPalette previewPalette;
+
+ FormWindow *formWindow;
+
+ int selectedPalette;
+};
+
+#endif
diff --git a/kommander/editor/paletteeditorimpl.cpp b/kommander/editor/paletteeditorimpl.cpp
new file mode 100644
index 00000000..9264c810
--- /dev/null
+++ b/kommander/editor/paletteeditorimpl.cpp
@@ -0,0 +1,299 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "paletteeditorimpl.h"
+#include "paletteeditoradvancedimpl.h"
+#include "previewframe.h"
+#include "styledbutton.h"
+#include "mainwindow.h"
+#include "formwindow.h"
+
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <qapplication.h>
+#include <qpushbutton.h>
+
+PaletteEditor::PaletteEditor( FormWindow *fw, QWidget * parent, const char * name, bool modal, WFlags f )
+ : PaletteEditorBase( parent, name, modal, f ), formWindow( fw )
+{
+ connect( buttonHelp, SIGNAL( clicked() ), MainWindow::self, SLOT( showDialogHelp() ) );
+
+ editPalette = QApplication::palette();
+ setPreviewPalette( editPalette );
+
+ buttonMainColor->setColor( editPalette.active().color( QColorGroup::Button ) );
+ buttonMainColor2->setColor( editPalette.active().color( QColorGroup::Background ) );
+}
+
+PaletteEditor::~PaletteEditor()
+{
+}
+
+void PaletteEditor::onTune()
+{
+ bool ok;
+ QPalette pal = PaletteEditorAdvanced::getPalette( &ok, editPalette, backgroundMode, this, "tune_palette", formWindow);
+ if (!ok) return;
+
+ editPalette = pal;
+ setPreviewPalette( editPalette );
+}
+
+void PaletteEditor::onChooseMainColor()
+{
+ buildPalette();
+}
+
+void PaletteEditor::onChoose2ndMainColor()
+{
+ buildPalette();
+}
+
+void PaletteEditor::paletteSelected(int)
+{
+ setPreviewPalette(editPalette);
+}
+
+QColorGroup::ColorRole PaletteEditor::centralFromItem( int item )
+{
+ switch( item )
+ {
+ case 0:
+ return QColorGroup::Background;
+ case 1:
+ return QColorGroup::Foreground;
+ case 2:
+ return QColorGroup::Button;
+ case 3:
+ return QColorGroup::Base;
+ case 4:
+ return QColorGroup::Text;
+ case 5:
+ return QColorGroup::BrightText;
+ case 6:
+ return QColorGroup::ButtonText;
+ case 7:
+ return QColorGroup::Highlight;
+ case 8:
+ return QColorGroup::HighlightedText;
+ default:
+ return QColorGroup::NColorRoles;
+ }
+}
+
+QColorGroup::ColorRole PaletteEditor::effectFromItem( int item )
+{
+ switch( item )
+ {
+ case 0:
+ return QColorGroup::Light;
+ case 1:
+ return QColorGroup::Midlight;
+ case 2:
+ return QColorGroup::Mid;
+ case 3:
+ return QColorGroup::Dark;
+ case 4:
+ return QColorGroup::Shadow;
+ default:
+ return QColorGroup::NColorRoles;
+ }
+}
+
+void PaletteEditor::buildPalette()
+{
+ int i;
+ QColorGroup cg;
+ QColor btn = buttonMainColor->color();
+ QColor back = buttonMainColor2->color();
+ QPalette automake( btn, back );
+
+ for (i = 0; i<9; i++)
+ cg.setColor( centralFromItem(i), automake.active().color( centralFromItem(i) ) );
+
+ editPalette.setActive( cg );
+ buildActiveEffect();
+
+ cg = editPalette.inactive();
+
+ QPalette temp( editPalette.active().color( QColorGroup::Button ),
+ editPalette.active().color( QColorGroup::Background ) );
+
+ for (i = 0; i<9; i++)
+ cg.setColor( centralFromItem(i), temp.inactive().color( centralFromItem(i) ) );
+
+ editPalette.setInactive( cg );
+ buildInactiveEffect();
+
+ cg = editPalette.disabled();
+
+ for (i = 0; i<9; i++)
+ cg.setColor( centralFromItem(i), temp.disabled().color( centralFromItem(i) ) );
+
+ editPalette.setDisabled( cg );
+ buildDisabledEffect();
+
+ updateStyledButtons();
+}
+
+void PaletteEditor::buildActiveEffect()
+{
+ QColorGroup cg = editPalette.active();
+ QColor btn = cg.color( QColorGroup::Button );
+
+ QPalette temp( btn, btn );
+
+ for (int i = 0; i<5; i++)
+ cg.setColor( effectFromItem(i), temp.active().color( effectFromItem(i) ) );
+
+ editPalette.setActive( cg );
+ setPreviewPalette( editPalette );
+
+ updateStyledButtons();
+}
+
+void PaletteEditor::buildInactive()
+{
+ editPalette.setInactive( editPalette.active() );
+ buildInactiveEffect();
+}
+
+void PaletteEditor::buildInactiveEffect()
+{
+ QColorGroup cg = editPalette.inactive();
+
+ QColor light, midlight, mid, dark, shadow;
+ QColor btn = cg.color( QColorGroup::Button );
+
+ light = btn.light(150);
+ midlight = btn.light(115);
+ mid = btn.dark(150);
+ dark = btn.dark();
+ shadow = black;
+
+ cg.setColor( QColorGroup::Light, light );
+ cg.setColor( QColorGroup::Midlight, midlight );
+ cg.setColor( QColorGroup::Mid, mid );
+ cg.setColor( QColorGroup::Dark, dark );
+ cg.setColor( QColorGroup::Shadow, shadow );
+
+ editPalette.setInactive( cg );
+ setPreviewPalette( editPalette );
+ updateStyledButtons();
+}
+
+void PaletteEditor::buildDisabled()
+{
+ QColorGroup cg = editPalette.active();
+ cg.setColor( QColorGroup::ButtonText, darkGray );
+ cg.setColor( QColorGroup::Foreground, darkGray );
+ editPalette.setDisabled( cg );
+
+ buildDisabledEffect();
+}
+
+void PaletteEditor::buildDisabledEffect()
+{
+ QColorGroup cg = editPalette.disabled();
+
+ QColor light, midlight, mid, dark, shadow;
+ QColor btn = cg.color( QColorGroup::Button );
+
+ light = btn.light(150);
+ midlight = btn.light(115);
+ mid = btn.dark(150);
+ dark = btn.dark();
+ shadow = black;
+
+ cg.setColor( QColorGroup::Light, light );
+ cg.setColor( QColorGroup::Midlight, midlight );
+ cg.setColor( QColorGroup::Mid, mid );
+ cg.setColor( QColorGroup::Dark, dark );
+ cg.setColor( QColorGroup::Shadow, shadow );
+
+ editPalette.setDisabled( cg );
+ setPreviewPalette( editPalette );
+ updateStyledButtons();
+}
+
+void PaletteEditor::setPreviewPalette( const QPalette& pal )
+{
+ QColorGroup cg;
+
+ switch (paletteCombo->currentItem()) {
+ case 0:
+ default:
+ cg = pal.active();
+ break;
+ case 1:
+ cg = pal.inactive();
+ break;
+ case 2:
+ cg = pal.disabled();
+ break;
+ }
+ previewPalette.setActive( cg );
+ previewPalette.setInactive( cg );
+ previewPalette.setDisabled( cg );
+
+ previewFrame->setPreviewPalette(previewPalette);
+}
+
+void PaletteEditor::updateStyledButtons()
+{
+ buttonMainColor->setColor( editPalette.active().color( QColorGroup::Button ));
+ buttonMainColor2->setColor( editPalette.active().color( QColorGroup::Background ));
+}
+
+void PaletteEditor::setPal( const QPalette& pal )
+{
+ editPalette = pal;
+ setPreviewPalette( pal );
+ updateStyledButtons();
+}
+
+QPalette PaletteEditor::pal() const
+{
+ return editPalette;
+}
+
+QPalette PaletteEditor::getPalette( bool *ok, const QPalette &init, BackgroundMode mode,
+ QWidget* parent, const char* name, FormWindow *fw )
+{
+ PaletteEditor* dlg = new PaletteEditor( fw, parent, name, true );
+ dlg->setupBackgroundMode( mode );
+
+ if ( init != QPalette() )
+ dlg->setPal( init );
+ int resultCode = dlg->exec();
+
+ QPalette result = init;
+ if ( resultCode == QDialog::Accepted ) {
+ if ( ok )
+ *ok = true;
+ result = dlg->pal();
+ } else {
+ if ( ok )
+ *ok = false;
+ }
+ delete dlg;
+ return result;
+}
+#include "paletteeditorimpl.moc"
diff --git a/kommander/editor/paletteeditorimpl.h b/kommander/editor/paletteeditorimpl.h
new file mode 100644
index 00000000..258d0978
--- /dev/null
+++ b/kommander/editor/paletteeditorimpl.h
@@ -0,0 +1,70 @@
+#ifndef PALETTEEDITORIMPL_H
+#define PALETTEEDITORIMPL_H
+
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "paletteeditor.h"
+
+class FormWindow;
+
+class PaletteEditor : public PaletteEditorBase
+{
+ Q_OBJECT
+
+public:
+ PaletteEditor( FormWindow *fw, QWidget * parent=0, const char * name=0, bool modal=FALSE, WFlags f=0 );
+ ~PaletteEditor();
+
+ static QPalette getPalette( bool *ok, const QPalette &pal, BackgroundMode mode = PaletteBackground,
+ QWidget* parent = 0, const char* name = 0, FormWindow *fw = 0 );
+
+protected slots:
+ void onChooseMainColor();
+ void onChoose2ndMainColor();
+ void onTune();
+ void paletteSelected(int);
+
+protected:
+ void buildPalette();
+ void buildActiveEffect();
+ void buildInactive();
+ void buildInactiveEffect();
+ void buildDisabled();
+ void buildDisabledEffect();
+
+private:
+ void setPreviewPalette( const QPalette& );
+ void updateStyledButtons();
+ void setupBackgroundMode( BackgroundMode mode ) { backgroundMode = mode; }
+
+ QPalette pal() const;
+ void setPal( const QPalette& );
+
+ QColorGroup::ColorRole centralFromItem( int );
+ QColorGroup::ColorRole effectFromItem( int );
+ QPalette editPalette;
+ QPalette previewPalette;
+
+ FormWindow *formWindow;
+ BackgroundMode backgroundMode;
+};
+
+#endif
diff --git a/kommander/editor/parser.cpp b/kommander/editor/parser.cpp
new file mode 100644
index 00000000..4fc13c5f
--- /dev/null
+++ b/kommander/editor/parser.cpp
@@ -0,0 +1,66 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "parser.h"
+#include <qobject.h>
+#include <qstringlist.h>
+
+class NormalizeObject : public QObject
+{
+public:
+ NormalizeObject() : QObject() {}
+ static QCString normalizeSignalSlot( const char *signalSlot ) { return QObject::normalizeSignalSlot( signalSlot ); }
+};
+
+QString Parser::cleanArgs( const QString &func )
+{
+ QString slot( func );
+ int begin = slot.find( "(" ) + 1;
+ QString args = slot.mid( begin );
+ args = args.left( args.find( ")" ) );
+ QStringList lst = QStringList::split( ',', args );
+ QString res = slot.left( begin );
+ for ( QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) {
+ if ( it != lst.begin() )
+ res += ",";
+ QString arg = *it;
+ int pos = 0;
+ if ( ( pos = arg.find( "&" ) ) != -1 ) {
+ arg = arg.left( pos + 1 );
+ } else if ( ( pos = arg.find( "*" ) ) != -1 ) {
+ arg = arg.left( pos + 1 );
+ } else {
+ arg = arg.simplifyWhiteSpace();
+ if ( ( pos = arg.find( ':' ) ) != -1 )
+ arg = arg.left( pos ).simplifyWhiteSpace() + ":" + arg.mid( pos + 1 ).simplifyWhiteSpace();
+ QStringList l = QStringList::split( ' ', arg );
+ if ( l.count() == 2 ) {
+ if ( l[ 0 ] != "const" && l[ 0 ] != "unsigned" && l[ 0 ] != "var" )
+ arg = l[ 0 ];
+ } else if ( l.count() == 3 ) {
+ arg = l[ 0 ] + " " + l[ 1 ];
+ }
+ }
+ res += arg;
+ }
+ res += ")";
+
+ return QString::fromLatin1( NormalizeObject::normalizeSignalSlot( res.latin1() ) );
+}
diff --git a/kommander/editor/parser.h b/kommander/editor/parser.h
new file mode 100644
index 00000000..5a5671ad
--- /dev/null
+++ b/kommander/editor/parser.h
@@ -0,0 +1,33 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef PARSER_H
+#define PARSER_H
+
+#include <qstring.h>
+
+class Parser
+{
+public:
+ static QString cleanArgs( const QString &func );
+
+};
+
+#endif
diff --git a/kommander/editor/pics/Makefile.am b/kommander/editor/pics/Makefile.am
new file mode 100644
index 00000000..2306b047
--- /dev/null
+++ b/kommander/editor/pics/Makefile.am
@@ -0,0 +1,5 @@
+kmdr_editordir = ${kde_datadir}/kommander/pics
+
+kmdr_editor_DATA = kommandersplash.png toolbox.png kfontcombo.png
+
+
diff --git a/kommander/editor/pics/arrow.xbm b/kommander/editor/pics/arrow.xbm
new file mode 100644
index 00000000..076875d4
--- /dev/null
+++ b/kommander/editor/pics/arrow.xbm
@@ -0,0 +1,10 @@
+#define arrow_width 25
+#define arrow_height 25
+static unsigned char arrow_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x01,0x00,
+ 0x00,0x80,0x02,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x08,0x00,0x00,0x80,0x10,
+ 0x00,0x00,0x80,0x20,0x00,0x00,0x80,0x40,0x00,0x00,0x80,0x80,0x00,0x00,0x80,
+ 0x00,0x01,0x00,0x80,0x00,0x02,0x00,0x80,0xc0,0x07,0x00,0x80,0x48,0x00,0x00,
+ 0x80,0x4c,0x00,0x00,0x80,0x92,0x00,0x00,0x80,0x91,0x00,0x00,0x80,0x20,0x01,
+ 0x00,0x00,0x20,0x01,0x00,0x00,0x40,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x80,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
diff --git a/kommander/editor/pics/background.png b/kommander/editor/pics/background.png
new file mode 100644
index 00000000..d2102bac
--- /dev/null
+++ b/kommander/editor/pics/background.png
Binary files differ
diff --git a/kommander/editor/pics/cross.xbm b/kommander/editor/pics/cross.xbm
new file mode 100644
index 00000000..e6334a16
--- /dev/null
+++ b/kommander/editor/pics/cross.xbm
@@ -0,0 +1,10 @@
+#define cross_width 25
+#define cross_height 25
+static unsigned char cross_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,
+ 0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+ 0x10,0x00,0x00,0xf0,0xff,0x1f,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,
+ 0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,
+ 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
diff --git a/kommander/editor/pics/hand.xbm b/kommander/editor/pics/hand.xbm
new file mode 100644
index 00000000..19513f38
--- /dev/null
+++ b/kommander/editor/pics/hand.xbm
@@ -0,0 +1,10 @@
+#define hand_width 25
+#define hand_height 25
+static unsigned char hand_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,
+ 0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x1c,0x00,0x00,0x80,0xe4,
+ 0x00,0x00,0x80,0x24,0x03,0x00,0x80,0x24,0x05,0x00,0xb8,0x24,0x09,0x00,0xc8,
+ 0x00,0x09,0x00,0x88,0x00,0x08,0x00,0x90,0x00,0x08,0x00,0xa0,0x00,0x08,0x00,
+ 0x20,0x00,0x08,0x00,0x40,0x00,0x08,0x00,0x40,0x00,0x04,0x00,0x80,0x00,0x04,
+ 0x00,0x80,0x00,0x04,0x00,0x00,0x01,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0xff,
+ 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
diff --git a/kommander/editor/pics/hsplit.xbm b/kommander/editor/pics/hsplit.xbm
new file mode 100644
index 00000000..8d053797
--- /dev/null
+++ b/kommander/editor/pics/hsplit.xbm
@@ -0,0 +1,10 @@
+#define hsplit_width 25
+#define hsplit_height 25
+static unsigned char hsplit_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
+ 0x00,0x00,0x1c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,
+ 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0xf0,
+ 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x07,0x00,
+ 0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,
+ 0x00,0x00,0x08,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x08,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
diff --git a/kommander/editor/pics/ibeam.xbm b/kommander/editor/pics/ibeam.xbm
new file mode 100644
index 00000000..479c5134
--- /dev/null
+++ b/kommander/editor/pics/ibeam.xbm
@@ -0,0 +1,10 @@
+#define ibeam_width 25
+#define ibeam_height 25
+static unsigned char ibeam_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xee,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,
+ 0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+ 0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,
+ 0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,
+ 0x00,0x00,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
diff --git a/kommander/editor/pics/images.h b/kommander/editor/pics/images.h
new file mode 100644
index 00000000..adec0936
--- /dev/null
+++ b/kommander/editor/pics/images.h
@@ -0,0 +1,10979 @@
+#ifndef _QEMBED_1804289383
+#define _QEMBED_1804289383
+static const unsigned int arrow_xbm_len = 601;
+static const unsigned char arrow_xbm_data[] = {
+ 0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x61,0x72,0x72,0x6f,0x77,0x5f,
+ 0x77,0x69,0x64,0x74,0x68,0x20,0x32,0x35,0x0a,0x23,0x64,0x65,0x66,0x69,
+ 0x6e,0x65,0x20,0x61,0x72,0x72,0x6f,0x77,0x5f,0x68,0x65,0x69,0x67,0x68,
+ 0x74,0x20,0x32,0x35,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x75,0x6e,
+ 0x73,0x69,0x67,0x6e,0x65,0x64,0x20,0x63,0x68,0x61,0x72,0x20,0x61,0x72,
+ 0x72,0x6f,0x77,0x5f,0x62,0x69,0x74,0x73,0x5b,0x5d,0x20,0x3d,0x20,0x7b,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x30,
+ 0x31,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x30,0x32,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x30,
+ 0x34,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x38,0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x38,0x30,0x2c,0x30,0x78,0x32,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x34,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,
+ 0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x31,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x32,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x63,0x30,0x2c,0x30,0x78,
+ 0x30,0x37,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,
+ 0x78,0x34,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x34,0x63,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,
+ 0x78,0x39,0x32,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x39,0x31,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x32,
+ 0x30,0x2c,0x30,0x78,0x30,0x31,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x32,0x30,0x2c,0x30,0x78,0x30,0x31,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x34,
+ 0x30,0x2c,0x30,0x78,0x30,0x32,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x34,0x30,0x2c,0x30,0x78,0x30,0x32,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x31,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x20,0x7d,0x3b,0x0a
+};
+
+/* Generated by qembed */
+static const unsigned int cross_xbm_len = 601;
+static const unsigned char cross_xbm_data[] = {
+ 0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x63,0x72,0x6f,0x73,0x73,0x5f,
+ 0x77,0x69,0x64,0x74,0x68,0x20,0x32,0x35,0x0a,0x23,0x64,0x65,0x66,0x69,
+ 0x6e,0x65,0x20,0x63,0x72,0x6f,0x73,0x73,0x5f,0x68,0x65,0x69,0x67,0x68,
+ 0x74,0x20,0x32,0x35,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x75,0x6e,
+ 0x73,0x69,0x67,0x6e,0x65,0x64,0x20,0x63,0x68,0x61,0x72,0x20,0x63,0x72,
+ 0x6f,0x73,0x73,0x5f,0x62,0x69,0x74,0x73,0x5b,0x5d,0x20,0x3d,0x20,0x7b,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x31,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x66,0x30,
+ 0x2c,0x30,0x78,0x66,0x66,0x2c,0x30,0x78,0x31,0x66,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x20,0x7d,0x3b,0x0a
+};
+
+static const unsigned int hand_xbm_len = 598;
+static const unsigned char hand_xbm_data[] = {
+ 0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x68,0x61,0x6e,0x64,0x5f,0x77,
+ 0x69,0x64,0x74,0x68,0x20,0x32,0x35,0x0a,0x23,0x64,0x65,0x66,0x69,0x6e,
+ 0x65,0x20,0x68,0x61,0x6e,0x64,0x5f,0x68,0x65,0x69,0x67,0x68,0x74,0x20,
+ 0x32,0x35,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x75,0x6e,0x73,0x69,
+ 0x67,0x6e,0x65,0x64,0x20,0x63,0x68,0x61,0x72,0x20,0x68,0x61,0x6e,0x64,
+ 0x5f,0x62,0x69,0x74,0x73,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x20,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x33,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,
+ 0x30,0x2c,0x30,0x78,0x30,0x34,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x30,0x34,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,
+ 0x30,0x2c,0x30,0x78,0x30,0x34,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x30,0x34,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,
+ 0x30,0x78,0x31,0x63,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x65,0x34,0x2c,0x0a,0x20,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,
+ 0x30,0x78,0x32,0x34,0x2c,0x30,0x78,0x30,0x33,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x32,0x34,0x2c,0x30,0x78,0x30,
+ 0x35,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x62,0x38,0x2c,0x30,0x78,
+ 0x32,0x34,0x2c,0x30,0x78,0x30,0x39,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x63,0x38,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x39,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x38,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x39,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x61,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,
+ 0x78,0x32,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x34,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x34,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x34,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x34,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x34,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x31,0x2c,0x30,
+ 0x78,0x30,0x32,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x31,0x2c,0x30,0x78,0x30,0x32,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x66,0x66,0x2c,0x0a,0x20,0x30,
+ 0x78,0x30,0x33,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x20,0x7d,0x3b,0x0a
+};
+
+static const unsigned int hsplit_xbm_len = 604;
+static const unsigned char hsplit_xbm_data[] = {
+ 0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x68,0x73,0x70,0x6c,0x69,0x74,
+ 0x5f,0x77,0x69,0x64,0x74,0x68,0x20,0x32,0x35,0x0a,0x23,0x64,0x65,0x66,
+ 0x69,0x6e,0x65,0x20,0x68,0x73,0x70,0x6c,0x69,0x74,0x5f,0x68,0x65,0x69,
+ 0x67,0x68,0x74,0x20,0x32,0x35,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,
+ 0x75,0x6e,0x73,0x69,0x67,0x6e,0x65,0x64,0x20,0x63,0x68,0x61,0x72,0x20,
+ 0x68,0x73,0x70,0x6c,0x69,0x74,0x5f,0x62,0x69,0x74,0x73,0x5b,0x5d,0x20,
+ 0x3d,0x20,0x7b,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x63,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x33,0x65,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x38,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x66,0x30,0x2c,0x0a,0x20,0x30,0x78,
+ 0x66,0x66,0x2c,0x30,0x78,0x30,0x37,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x66,
+ 0x30,0x2c,0x30,0x78,0x66,0x66,0x2c,0x30,0x78,0x30,0x37,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x38,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x33,0x65,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x63,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x38,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x20,0x7d,
+ 0x3b,0x0a
+};
+
+static const unsigned int ibeam_xbm_len = 601;
+static const unsigned char ibeam_xbm_data[] = {
+ 0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x69,0x62,0x65,0x61,0x6d,0x5f,
+ 0x77,0x69,0x64,0x74,0x68,0x20,0x32,0x35,0x0a,0x23,0x64,0x65,0x66,0x69,
+ 0x6e,0x65,0x20,0x69,0x62,0x65,0x61,0x6d,0x5f,0x68,0x65,0x69,0x67,0x68,
+ 0x74,0x20,0x32,0x35,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x75,0x6e,
+ 0x73,0x69,0x67,0x6e,0x65,0x64,0x20,0x63,0x68,0x61,0x72,0x20,0x69,0x62,
+ 0x65,0x61,0x6d,0x5f,0x62,0x69,0x74,0x73,0x5b,0x5d,0x20,0x3d,0x20,0x7b,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x65,0x65,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x31,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x65,0x65,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x20,0x7d,0x3b,0x0a
+};
+
+static const unsigned int no_xbm_len = 592;
+static const unsigned char no_xbm_data[] = {
+ 0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x6e,0x6f,0x5f,0x77,0x69,0x64,
+ 0x74,0x68,0x20,0x32,0x35,0x0a,0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,
+ 0x6e,0x6f,0x5f,0x68,0x65,0x69,0x67,0x68,0x74,0x20,0x32,0x35,0x0a,0x73,
+ 0x74,0x61,0x74,0x69,0x63,0x20,0x75,0x6e,0x73,0x69,0x67,0x6e,0x65,0x64,
+ 0x20,0x63,0x68,0x61,0x72,0x20,0x6e,0x6f,0x5f,0x62,0x69,0x74,0x73,0x5b,
+ 0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x37,0x65,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x66,0x66,
+ 0x2c,0x30,0x78,0x30,0x31,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x63,
+ 0x30,0x2c,0x30,0x78,0x63,0x33,0x2c,0x30,0x78,0x30,0x33,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x65,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x37,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x66,0x30,0x2c,
+ 0x30,0x78,0x30,0x31,0x2c,0x0a,0x20,0x30,0x78,0x30,0x65,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x62,0x30,0x2c,0x30,0x78,0x30,0x33,0x2c,0x30,
+ 0x78,0x30,0x63,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x33,0x38,0x2c,
+ 0x30,0x78,0x30,0x37,0x2c,0x30,0x78,0x31,0x63,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x31,0x38,0x2c,0x30,0x78,0x30,0x65,0x2c,0x30,0x78,0x31,
+ 0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x38,0x2c,0x0a,0x20,
+ 0x30,0x78,0x31,0x63,0x2c,0x30,0x78,0x31,0x38,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x31,0x38,0x2c,0x30,0x78,0x33,0x38,0x2c,0x30,0x78,0x31,
+ 0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x38,0x2c,0x30,0x78,
+ 0x37,0x30,0x2c,0x30,0x78,0x31,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x33,0x38,0x2c,0x30,0x78,0x65,0x30,0x2c,0x30,0x78,0x31,0x63,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x33,0x30,0x2c,0x30,0x78,
+ 0x63,0x30,0x2c,0x30,0x78,0x30,0x64,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x37,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x30,0x66,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x65,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x37,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x63,
+ 0x30,0x2c,0x30,0x78,0x63,0x33,0x2c,0x30,0x78,0x30,0x33,0x2c,0x0a,0x20,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x66,0x66,
+ 0x2c,0x30,0x78,0x30,0x31,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x37,0x65,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x20,0x7d,0x3b,0x0a
+};
+
+static const unsigned int sizeall_xbm_len = 607;
+static const unsigned char sizeall_xbm_data[] = {
+ 0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x73,0x69,0x7a,0x65,0x61,0x6c,
+ 0x6c,0x5f,0x77,0x69,0x64,0x74,0x68,0x20,0x32,0x35,0x0a,0x23,0x64,0x65,
+ 0x66,0x69,0x6e,0x65,0x20,0x73,0x69,0x7a,0x65,0x61,0x6c,0x6c,0x5f,0x68,
+ 0x65,0x69,0x67,0x68,0x74,0x20,0x32,0x35,0x0a,0x73,0x74,0x61,0x74,0x69,
+ 0x63,0x20,0x75,0x6e,0x73,0x69,0x67,0x6e,0x65,0x64,0x20,0x63,0x68,0x61,
+ 0x72,0x20,0x73,0x69,0x7a,0x65,0x61,0x6c,0x6c,0x5f,0x62,0x69,0x74,0x73,
+ 0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,
+ 0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x33,
+ 0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x37,0x63,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x66,0x65,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x31,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x34,0x30,
+ 0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x34,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x36,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,
+ 0x30,0x63,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x37,0x30,0x2c,0x0a,
+ 0x20,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x31,0x63,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x66,0x38,0x2c,0x30,0x78,0x66,0x66,0x2c,0x30,0x78,
+ 0x33,0x66,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x37,0x30,0x2c,0x30,
+ 0x78,0x31,0x30,0x2c,0x30,0x78,0x31,0x63,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x36,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x63,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x34,0x30,0x2c,0x30,
+ 0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x34,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x66,0x65,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,
+ 0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x37,
+ 0x63,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x33,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x20,0x7d,0x3b,0x0a
+};
+
+static const unsigned int sizeb_xbm_len = 601;
+static const unsigned char sizeb_xbm_data[] = {
+ 0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x73,0x69,0x7a,0x65,0x62,0x5f,
+ 0x77,0x69,0x64,0x74,0x68,0x20,0x32,0x35,0x0a,0x23,0x64,0x65,0x66,0x69,
+ 0x6e,0x65,0x20,0x73,0x69,0x7a,0x65,0x62,0x5f,0x68,0x65,0x69,0x67,0x68,
+ 0x74,0x20,0x32,0x35,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x75,0x6e,
+ 0x73,0x69,0x67,0x6e,0x65,0x64,0x20,0x63,0x68,0x61,0x72,0x20,0x73,0x69,
+ 0x7a,0x65,0x62,0x5f,0x62,0x69,0x74,0x73,0x5b,0x5d,0x20,0x3d,0x20,0x7b,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x63,0x30,0x2c,0x30,0x78,0x30,0x37,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x63,0x30,0x2c,0x30,0x78,0x30,0x33,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x63,0x30,0x2c,0x30,0x78,0x30,0x31,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x63,0x30,0x2c,0x30,0x78,0x30,0x32,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x34,0x30,
+ 0x2c,0x30,0x78,0x30,0x34,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x38,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x32,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x34,0x30,0x2c,0x30,0x78,0x30,0x34,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,
+ 0x30,0x36,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x37,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x30,0x37,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x63,
+ 0x30,0x2c,0x30,0x78,0x30,0x37,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x20,0x7d,0x3b,0x0a
+};
+
+static const unsigned int sizef_xbm_len = 601;
+static const unsigned char sizef_xbm_data[] = {
+ 0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x73,0x69,0x7a,0x65,0x66,0x5f,
+ 0x77,0x69,0x64,0x74,0x68,0x20,0x32,0x35,0x0a,0x23,0x64,0x65,0x66,0x69,
+ 0x6e,0x65,0x20,0x73,0x69,0x7a,0x65,0x66,0x5f,0x68,0x65,0x69,0x67,0x68,
+ 0x74,0x20,0x32,0x35,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x75,0x6e,
+ 0x73,0x69,0x67,0x6e,0x65,0x64,0x20,0x63,0x68,0x61,0x72,0x20,0x73,0x69,
+ 0x7a,0x65,0x66,0x5f,0x62,0x69,0x74,0x73,0x5b,0x5d,0x20,0x3d,0x20,0x7b,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x65,0x30,0x2c,0x30,0x78,0x30,0x33,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x63,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x33,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x30,0x33,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x34,0x30,0x2c,
+ 0x30,0x78,0x30,0x33,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x32,0x30,0x2c,0x30,0x78,0x30,0x32,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x31,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x34,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x32,0x30,0x2c,0x30,
+ 0x78,0x30,0x32,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x36,0x30,0x2c,0x30,0x78,0x30,0x31,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x65,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x65,0x30,0x2c,0x30,0x78,0x30,0x31,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x65,0x30,0x2c,0x30,0x78,0x30,
+ 0x33,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x20,0x7d,0x3b,0x0a
+};
+
+static const unsigned int sizeh_xbm_len = 601;
+static const unsigned char sizeh_xbm_data[] = {
+ 0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x73,0x69,0x7a,0x65,0x68,0x5f,
+ 0x77,0x69,0x64,0x74,0x68,0x20,0x32,0x35,0x0a,0x23,0x64,0x65,0x66,0x69,
+ 0x6e,0x65,0x20,0x73,0x69,0x7a,0x65,0x68,0x5f,0x68,0x65,0x69,0x67,0x68,
+ 0x74,0x20,0x32,0x35,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x75,0x6e,
+ 0x73,0x69,0x67,0x6e,0x65,0x64,0x20,0x63,0x68,0x61,0x72,0x20,0x73,0x69,
+ 0x7a,0x65,0x68,0x5f,0x62,0x69,0x74,0x73,0x5b,0x5d,0x20,0x3d,0x20,0x7b,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x34,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x34,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x36,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x63,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x37,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x63,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x66,0x38,0x2c,0x0a,0x20,0x30,0x78,0x66,0x66,0x2c,
+ 0x30,0x78,0x33,0x66,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x37,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x63,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x36,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x63,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x34,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x34,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x20,0x7d,0x3b,0x0a
+};
+
+static const unsigned int sizev_xbm_len = 601;
+static const unsigned char sizev_xbm_data[] = {
+ 0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x73,0x69,0x7a,0x65,0x76,0x5f,
+ 0x77,0x69,0x64,0x74,0x68,0x20,0x32,0x35,0x0a,0x23,0x64,0x65,0x66,0x69,
+ 0x6e,0x65,0x20,0x73,0x69,0x7a,0x65,0x76,0x5f,0x68,0x65,0x69,0x67,0x68,
+ 0x74,0x20,0x32,0x35,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x75,0x6e,
+ 0x73,0x69,0x67,0x6e,0x65,0x64,0x20,0x63,0x68,0x61,0x72,0x20,0x73,0x69,
+ 0x7a,0x65,0x76,0x5f,0x62,0x69,0x74,0x73,0x5b,0x5d,0x20,0x3d,0x20,0x7b,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x63,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x33,
+ 0x65,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x37,0x66,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x38,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x37,
+ 0x66,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x33,0x65,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,
+ 0x63,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x20,0x7d,0x3b,0x0a
+};
+
+static const unsigned int uparrow_xbm_len = 607;
+static const unsigned char uparrow_xbm_data[] = {
+ 0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x75,0x70,0x61,0x72,0x72,0x6f,
+ 0x77,0x5f,0x77,0x69,0x64,0x74,0x68,0x20,0x32,0x35,0x0a,0x23,0x64,0x65,
+ 0x66,0x69,0x6e,0x65,0x20,0x75,0x70,0x61,0x72,0x72,0x6f,0x77,0x5f,0x68,
+ 0x65,0x69,0x67,0x68,0x74,0x20,0x32,0x35,0x0a,0x73,0x74,0x61,0x74,0x69,
+ 0x63,0x20,0x75,0x6e,0x73,0x69,0x67,0x6e,0x65,0x64,0x20,0x63,0x68,0x61,
+ 0x72,0x20,0x75,0x70,0x61,0x72,0x72,0x6f,0x77,0x5f,0x62,0x69,0x74,0x73,
+ 0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,
+ 0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x33,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x37,0x63,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x66,0x65,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,
+ 0x20,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,
+ 0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x31,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x20,0x7d,0x3b,0x0a
+};
+
+static const unsigned int vsplit_xbm_len = 604;
+static const unsigned char vsplit_xbm_data[] = {
+ 0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x76,0x73,0x70,0x6c,0x69,0x74,
+ 0x5f,0x77,0x69,0x64,0x74,0x68,0x20,0x32,0x35,0x0a,0x23,0x64,0x65,0x66,
+ 0x69,0x6e,0x65,0x20,0x76,0x73,0x70,0x6c,0x69,0x74,0x5f,0x68,0x65,0x69,
+ 0x67,0x68,0x74,0x20,0x32,0x35,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,
+ 0x75,0x6e,0x73,0x69,0x67,0x6e,0x65,0x64,0x20,0x63,0x68,0x61,0x72,0x20,
+ 0x76,0x73,0x70,0x6c,0x69,0x74,0x5f,0x62,0x69,0x74,0x73,0x5b,0x5d,0x20,
+ 0x3d,0x20,0x7b,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x32,0x34,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x32,0x34,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x32,0x34,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x32,0x34,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x32,0x34,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x31,0x30,0x2c,0x30,0x78,0x32,0x34,0x2c,0x30,0x78,0x30,0x38,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x38,0x2c,0x0a,0x20,0x30,0x78,
+ 0x32,0x34,0x2c,0x30,0x78,0x31,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x66,0x63,0x2c,0x30,0x78,0x65,0x37,0x2c,0x30,0x78,0x33,0x66,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,0x38,0x2c,0x30,0x78,0x32,0x34,
+ 0x2c,0x30,0x78,0x31,0x38,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x31,
+ 0x30,0x2c,0x30,0x78,0x32,0x34,0x2c,0x30,0x78,0x30,0x38,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x32,0x34,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x32,0x34,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x32,0x34,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x32,0x34,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x32,0x34,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x32,0x34,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x20,0x7d,
+ 0x3b,0x0a
+};
+
+static const unsigned int wait_xbm_len = 598;
+static const unsigned char wait_xbm_data[] = {
+ 0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x77,0x61,0x69,0x74,0x5f,0x77,
+ 0x69,0x64,0x74,0x68,0x20,0x32,0x35,0x0a,0x23,0x64,0x65,0x66,0x69,0x6e,
+ 0x65,0x20,0x77,0x61,0x69,0x74,0x5f,0x68,0x65,0x69,0x67,0x68,0x74,0x20,
+ 0x32,0x35,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x75,0x6e,0x73,0x69,
+ 0x67,0x6e,0x65,0x64,0x20,0x63,0x68,0x61,0x72,0x20,0x77,0x61,0x69,0x74,
+ 0x5f,0x62,0x69,0x74,0x73,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x20,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x63,0x30,0x2c,0x30,0x78,0x66,0x66,
+ 0x2c,0x30,0x78,0x30,0x37,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x63,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x36,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x63,0x30,0x2c,0x30,0x78,0x66,0x66,0x2c,0x30,
+ 0x78,0x30,0x37,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x32,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x32,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,
+ 0x30,0x78,0x35,0x34,0x2c,0x30,0x78,0x30,0x32,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x32,0x38,0x2c,0x0a,0x20,0x30,
+ 0x78,0x30,0x32,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,
+ 0x30,0x78,0x31,0x31,0x2c,0x30,0x78,0x30,0x33,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x33,0x2c,0x30,0x78,0x30,
+ 0x31,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x64,0x36,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,0x78,0x36,0x63,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,
+ 0x36,0x63,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,
+ 0x78,0x30,0x30,0x2c,0x30,0x78,0x63,0x36,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x39,0x33,
+ 0x2c,0x30,0x78,0x30,0x31,0x2c,0x30,0x78,0x30,0x30,0x2c,0x0a,0x20,0x30,
+ 0x78,0x38,0x30,0x2c,0x30,0x78,0x30,0x31,0x2c,0x30,0x78,0x30,0x33,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x31,0x30,
+ 0x2c,0x30,0x78,0x30,0x32,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,
+ 0x30,0x2c,0x30,0x78,0x32,0x38,0x2c,0x30,0x78,0x30,0x32,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x38,0x30,0x2c,0x30,0x78,0x35,0x34,0x2c,0x30,
+ 0x78,0x30,0x32,0x2c,0x0a,0x20,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x38,
+ 0x30,0x2c,0x30,0x78,0x61,0x61,0x2c,0x30,0x78,0x30,0x32,0x2c,0x30,0x78,
+ 0x30,0x30,0x2c,0x30,0x78,0x63,0x30,0x2c,0x30,0x78,0x66,0x66,0x2c,0x30,
+ 0x78,0x30,0x37,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x63,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x36,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x63,0x30,0x2c,0x30,0x78,0x66,0x66,0x2c,0x0a,0x20,0x30,
+ 0x78,0x30,0x37,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,
+ 0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,
+ 0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,0x30,0x2c,0x30,0x78,0x30,
+ 0x30,0x2c,0x30,0x78,0x30,0x30,0x20,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_book_xpm_len = 767;
+static const unsigned char small_book_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x2f,0x2a,0x20,0x44,
+ 0x72,0x61,0x77,0x6e,0x20,0x20,0x62,0x79,0x20,0x4d,0x61,0x72,0x6b,0x20,
+ 0x44,0x6f,0x6e,0x6f,0x68,0x6f,0x65,0x20,0x66,0x6f,0x72,0x20,0x74,0x68,
+ 0x65,0x20,0x4b,0x20,0x44,0x65,0x73,0x6b,0x74,0x6f,0x70,0x20,0x45,0x6e,
+ 0x76,0x69,0x72,0x6f,0x6e,0x6d,0x65,0x6e,0x74,0x20,0x2a,0x2f,0x0a,0x2f,
+ 0x2a,0x20,0x53,0x65,0x65,0x20,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,
+ 0x77,0x77,0x2e,0x6b,0x64,0x65,0x2e,0x6f,0x72,0x67,0x20,0x2a,0x2f,0x0a,
+ 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x2a,0x6f,0x70,
+ 0x65,0x6e,0x62,0x6f,0x6f,0x6b,0x5b,0x5d,0x3d,0x7b,0x0a,0x22,0x32,0x32,
+ 0x20,0x32,0x32,0x20,0x34,0x20,0x31,0x22,0x2c,0x0a,0x22,0x23,0x20,0x63,
+ 0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x22,0x2c,0x0a,0x22,0x61,0x20,
+ 0x63,0x20,0x23,0x38,0x30,0x38,0x30,0x38,0x30,0x22,0x2c,0x0a,0x22,0x62,
+ 0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,
+ 0x2e,0x20,0x63,0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x22,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x2e,0x2e,0x2e,0x23,0x23,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,
+ 0x0a,0x22,0x2e,0x2e,0x2e,0x2e,0x23,0x61,0x62,0x23,0x2e,0x2e,0x2e,0x2e,
+ 0x23,0x23,0x23,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,
+ 0x2e,0x2e,0x2e,0x2e,0x23,0x61,0x62,0x62,0x23,0x2e,0x23,0x23,0x62,0x62,
+ 0x23,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2e,
+ 0x2e,0x2e,0x23,0x61,0x62,0x62,0x62,0x23,0x61,0x62,0x62,0x62,0x23,0x23,
+ 0x23,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x2e,0x2e,
+ 0x23,0x61,0x62,0x62,0x62,0x23,0x62,0x62,0x62,0x62,0x23,0x61,0x23,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x2e,0x2e,0x23,0x61,
+ 0x62,0x62,0x62,0x23,0x61,0x62,0x62,0x62,0x23,0x61,0x23,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x2e,0x2e,0x23,0x61,0x62,0x62,
+ 0x62,0x23,0x62,0x62,0x62,0x62,0x23,0x61,0x23,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x2e,0x2e,0x23,0x61,0x62,0x62,0x62,0x23,
+ 0x61,0x62,0x62,0x62,0x23,0x61,0x23,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,
+ 0x0a,0x22,0x2e,0x2e,0x2e,0x2e,0x23,0x61,0x62,0x62,0x62,0x23,0x62,0x62,
+ 0x62,0x62,0x23,0x61,0x23,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x23,0x61,0x62,0x62,0x23,0x61,0x62,0x62,0x23,
+ 0x23,0x61,0x23,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x23,0x61,0x62,0x23,0x62,0x23,0x23,0x62,0x62,0x61,
+ 0x23,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x23,0x61,0x23,0x23,0x61,0x61,0x61,0x61,0x61,0x23,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x23,0x23,0x61,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x23,0x23,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,
+ 0x0a,0x22,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x7d,0x3b,0x0a,0x0a
+};
+
+static const unsigned int small_databrowser_xpm_len = 3100;
+static const unsigned char small_databrowser_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x31,0x32,0x38,0x20,0x32,0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x63,
+ 0x20,0x23,0x63,0x32,0x63,0x32,0x64,0x33,0x22,0x2c,0x0a,0x22,0x2e,0x20,
+ 0x20,0x63,0x20,0x23,0x39,0x36,0x39,0x36,0x61,0x33,0x22,0x2c,0x0a,0x22,
+ 0x58,0x20,0x20,0x63,0x20,0x23,0x61,0x62,0x61,0x62,0x62,0x62,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x20,0x20,0x63,0x20,0x23,0x64,0x62,0x64,0x62,0x65,0x66,
+ 0x22,0x2c,0x0a,0x22,0x4f,0x20,0x20,0x63,0x20,0x47,0x68,0x6f,0x73,0x74,
+ 0x57,0x68,0x69,0x74,0x65,0x22,0x2c,0x0a,0x22,0x2b,0x20,0x20,0x63,0x20,
+ 0x23,0x37,0x64,0x37,0x64,0x38,0x39,0x22,0x2c,0x0a,0x22,0x40,0x20,0x20,
+ 0x63,0x20,0x23,0x37,0x65,0x37,0x65,0x38,0x39,0x22,0x2c,0x0a,0x22,0x23,
+ 0x20,0x20,0x63,0x20,0x23,0x36,0x31,0x36,0x31,0x36,0x61,0x22,0x2c,0x0a,
+ 0x22,0x24,0x20,0x20,0x63,0x20,0x23,0x34,0x31,0x34,0x31,0x34,0x37,0x22,
+ 0x2c,0x0a,0x22,0x25,0x20,0x20,0x63,0x20,0x23,0x64,0x61,0x64,0x61,0x65,
+ 0x65,0x22,0x2c,0x0a,0x22,0x26,0x20,0x20,0x63,0x20,0x23,0x64,0x38,0x64,
+ 0x38,0x65,0x63,0x22,0x2c,0x0a,0x22,0x2a,0x20,0x20,0x63,0x20,0x23,0x37,
+ 0x31,0x37,0x31,0x37,0x62,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x20,0x63,0x20,
+ 0x23,0x34,0x36,0x34,0x36,0x34,0x63,0x22,0x2c,0x0a,0x22,0x2d,0x20,0x20,
+ 0x63,0x20,0x23,0x34,0x37,0x34,0x37,0x34,0x65,0x22,0x2c,0x0a,0x22,0x3b,
+ 0x20,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x66,0x65,0x22,0x2c,0x0a,
+ 0x22,0x3a,0x20,0x20,0x63,0x20,0x23,0x61,0x63,0x61,0x63,0x62,0x63,0x22,
+ 0x2c,0x0a,0x22,0x3e,0x20,0x20,0x63,0x20,0x23,0x63,0x31,0x63,0x31,0x64,
+ 0x33,0x22,0x2c,0x0a,0x22,0x2c,0x20,0x20,0x63,0x20,0x23,0x64,0x39,0x64,
+ 0x39,0x65,0x64,0x22,0x2c,0x0a,0x22,0x3c,0x20,0x20,0x63,0x20,0x23,0x64,
+ 0x64,0x64,0x64,0x66,0x31,0x22,0x2c,0x0a,0x22,0x31,0x20,0x20,0x63,0x20,
+ 0x23,0x66,0x36,0x66,0x36,0x66,0x66,0x22,0x2c,0x0a,0x22,0x32,0x20,0x20,
+ 0x63,0x20,0x23,0x64,0x64,0x64,0x64,0x66,0x30,0x22,0x2c,0x0a,0x22,0x33,
+ 0x20,0x20,0x63,0x20,0x23,0x66,0x34,0x66,0x34,0x66,0x66,0x22,0x2c,0x0a,
+ 0x22,0x34,0x20,0x20,0x63,0x20,0x23,0x61,0x31,0x61,0x31,0x61,0x64,0x22,
+ 0x2c,0x0a,0x22,0x35,0x20,0x20,0x63,0x20,0x23,0x36,0x30,0x36,0x30,0x36,
+ 0x39,0x22,0x2c,0x0a,0x22,0x36,0x20,0x20,0x63,0x20,0x23,0x38,0x32,0x38,
+ 0x32,0x38,0x65,0x22,0x2c,0x0a,0x22,0x37,0x20,0x20,0x63,0x20,0x23,0x39,
+ 0x38,0x39,0x37,0x61,0x33,0x22,0x2c,0x0a,0x22,0x38,0x20,0x20,0x63,0x20,
+ 0x23,0x63,0x32,0x63,0x32,0x63,0x61,0x22,0x2c,0x0a,0x22,0x39,0x20,0x20,
+ 0x63,0x20,0x23,0x39,0x34,0x39,0x34,0x61,0x31,0x22,0x2c,0x0a,0x22,0x30,
+ 0x20,0x20,0x63,0x20,0x23,0x64,0x35,0x64,0x35,0x65,0x39,0x22,0x2c,0x0a,
+ 0x22,0x71,0x20,0x20,0x63,0x20,0x23,0x36,0x31,0x36,0x31,0x36,0x62,0x22,
+ 0x2c,0x0a,0x22,0x77,0x20,0x20,0x63,0x20,0x23,0x66,0x31,0x66,0x31,0x66,
+ 0x65,0x22,0x2c,0x0a,0x22,0x65,0x20,0x20,0x63,0x20,0x23,0x61,0x64,0x61,
+ 0x64,0x62,0x63,0x22,0x2c,0x0a,0x22,0x72,0x20,0x20,0x63,0x20,0x23,0x66,
+ 0x32,0x66,0x32,0x66,0x66,0x22,0x2c,0x0a,0x22,0x74,0x20,0x20,0x63,0x20,
+ 0x23,0x39,0x66,0x39,0x66,0x61,0x62,0x22,0x2c,0x0a,0x22,0x79,0x20,0x20,
+ 0x63,0x20,0x23,0x39,0x35,0x39,0x35,0x61,0x33,0x22,0x2c,0x0a,0x22,0x75,
+ 0x20,0x20,0x63,0x20,0x23,0x36,0x30,0x36,0x30,0x36,0x38,0x22,0x2c,0x0a,
+ 0x22,0x69,0x20,0x20,0x63,0x20,0x23,0x62,0x30,0x62,0x30,0x62,0x61,0x22,
+ 0x2c,0x0a,0x22,0x70,0x20,0x20,0x63,0x20,0x23,0x37,0x30,0x36,0x66,0x37,
+ 0x37,0x22,0x2c,0x0a,0x22,0x61,0x20,0x20,0x63,0x20,0x23,0x34,0x35,0x34,
+ 0x35,0x34,0x62,0x22,0x2c,0x0a,0x22,0x73,0x20,0x20,0x63,0x20,0x23,0x65,
+ 0x35,0x65,0x35,0x66,0x34,0x22,0x2c,0x0a,0x22,0x64,0x20,0x20,0x63,0x20,
+ 0x23,0x66,0x65,0x66,0x65,0x66,0x66,0x22,0x2c,0x0a,0x22,0x66,0x20,0x20,
+ 0x63,0x20,0x23,0x39,0x61,0x39,0x61,0x61,0x37,0x22,0x2c,0x0a,0x22,0x67,
+ 0x20,0x20,0x63,0x20,0x23,0x39,0x37,0x39,0x37,0x61,0x35,0x22,0x2c,0x0a,
+ 0x22,0x68,0x20,0x20,0x63,0x20,0x23,0x66,0x35,0x66,0x35,0x66,0x66,0x22,
+ 0x2c,0x0a,0x22,0x6a,0x20,0x20,0x63,0x20,0x23,0x35,0x63,0x35,0x63,0x36,
+ 0x30,0x22,0x2c,0x0a,0x22,0x6b,0x20,0x20,0x63,0x20,0x23,0x33,0x66,0x33,
+ 0x66,0x34,0x35,0x22,0x2c,0x0a,0x22,0x6c,0x20,0x20,0x63,0x20,0x23,0x33,
+ 0x64,0x33,0x64,0x34,0x33,0x22,0x2c,0x0a,0x22,0x7a,0x20,0x20,0x63,0x20,
+ 0x23,0x35,0x31,0x35,0x31,0x35,0x37,0x22,0x2c,0x0a,0x22,0x78,0x20,0x20,
+ 0x63,0x20,0x23,0x38,0x32,0x38,0x31,0x38,0x34,0x22,0x2c,0x0a,0x22,0x63,
+ 0x20,0x20,0x63,0x20,0x23,0x33,0x38,0x33,0x38,0x33,0x64,0x22,0x2c,0x0a,
+ 0x22,0x76,0x20,0x20,0x63,0x20,0x23,0x34,0x30,0x34,0x30,0x34,0x36,0x22,
+ 0x2c,0x0a,0x22,0x62,0x20,0x20,0x63,0x20,0x23,0x39,0x61,0x39,0x61,0x61,
+ 0x39,0x22,0x2c,0x0a,0x22,0x6e,0x20,0x20,0x63,0x20,0x23,0x64,0x61,0x64,
+ 0x61,0x65,0x64,0x22,0x2c,0x0a,0x22,0x6d,0x20,0x20,0x63,0x20,0x23,0x37,
+ 0x65,0x37,0x65,0x38,0x61,0x22,0x2c,0x0a,0x22,0x4d,0x20,0x20,0x63,0x20,
+ 0x23,0x34,0x31,0x34,0x31,0x34,0x36,0x22,0x2c,0x0a,0x22,0x4e,0x20,0x20,
+ 0x63,0x20,0x23,0x34,0x62,0x34,0x62,0x35,0x30,0x22,0x2c,0x0a,0x22,0x42,
+ 0x20,0x20,0x63,0x20,0x23,0x34,0x61,0x34,0x61,0x35,0x30,0x22,0x2c,0x0a,
+ 0x22,0x56,0x20,0x20,0x63,0x20,0x23,0x66,0x31,0x66,0x31,0x66,0x66,0x22,
+ 0x2c,0x0a,0x22,0x43,0x20,0x20,0x63,0x20,0x23,0x64,0x63,0x64,0x63,0x66,
+ 0x30,0x22,0x2c,0x0a,0x22,0x5a,0x20,0x20,0x63,0x20,0x23,0x39,0x65,0x39,
+ 0x65,0x61,0x62,0x22,0x2c,0x0a,0x22,0x41,0x20,0x20,0x63,0x20,0x23,0x66,
+ 0x33,0x66,0x33,0x66,0x66,0x22,0x2c,0x0a,0x22,0x53,0x20,0x20,0x63,0x20,
+ 0x23,0x66,0x39,0x66,0x39,0x66,0x66,0x22,0x2c,0x0a,0x22,0x44,0x20,0x20,
+ 0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x62,0x30,0x22,0x2c,0x0a,0x22,0x46,
+ 0x20,0x20,0x63,0x20,0x23,0x35,0x39,0x35,0x39,0x35,0x66,0x22,0x2c,0x0a,
+ 0x22,0x47,0x20,0x20,0x63,0x20,0x23,0x65,0x38,0x65,0x38,0x65,0x62,0x22,
+ 0x2c,0x0a,0x22,0x48,0x20,0x20,0x63,0x20,0x23,0x66,0x37,0x66,0x37,0x66,
+ 0x66,0x22,0x2c,0x0a,0x22,0x4a,0x20,0x20,0x63,0x20,0x23,0x36,0x32,0x36,
+ 0x32,0x36,0x62,0x22,0x2c,0x0a,0x22,0x4b,0x20,0x20,0x63,0x20,0x23,0x61,
+ 0x64,0x61,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x4c,0x20,0x20,0x63,0x20,
+ 0x23,0x39,0x36,0x39,0x36,0x61,0x34,0x22,0x2c,0x0a,0x22,0x50,0x20,0x20,
+ 0x63,0x20,0x23,0x30,0x30,0x30,0x30,0x37,0x62,0x22,0x2c,0x0a,0x22,0x49,
+ 0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x55,
+ 0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x31,0x30,0x30,0x22,0x2c,0x0a,
+ 0x22,0x59,0x20,0x20,0x63,0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x22,
+ 0x54,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x52,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x45,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x57,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x51,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x21,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x7e,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x5e,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x2f,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x28,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x29,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x5f,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x60,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x27,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x5d,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x5b,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x7b,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x7d,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x7c,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x20,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x2e,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x58,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x6f,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x4f,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x2b,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x40,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x23,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x24,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x25,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x26,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x2a,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x3d,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x2d,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x3b,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x3a,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x3e,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x2c,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x3c,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x31,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x32,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x33,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x34,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x35,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x36,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x37,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x38,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x39,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x30,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x71,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x77,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x65,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x72,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x74,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x79,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x75,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x2f,
+ 0x2a,0x20,0x70,0x69,0x78,0x65,0x6c,0x73,0x20,0x2a,0x2f,0x0a,0x22,0x59,
+ 0x20,0x59,0x20,0x6f,0x20,0x6f,0x20,0x4b,0x20,0x4b,0x20,0x4b,0x20,0x4b,
+ 0x20,0x4b,0x20,0x4b,0x20,0x4b,0x20,0x4b,0x20,0x4b,0x20,0x4b,0x20,0x4b,
+ 0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,
+ 0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x20,0x20,0x62,0x20,0x2e,0x20,0x40,
+ 0x20,0x40,0x20,0x4a,0x20,0x4a,0x20,0x4a,0x20,0x4a,0x20,0x4a,0x20,0x4a,
+ 0x20,0x4a,0x20,0x4a,0x20,0x4a,0x20,0x70,0x20,0x59,0x20,0x59,0x20,0x59,
+ 0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x58,
+ 0x20,0x20,0x20,0x20,0x20,0x2e,0x20,0x2e,0x20,0x2b,0x20,0x2b,0x20,0x2b,
+ 0x20,0x2b,0x20,0x23,0x20,0x23,0x20,0x23,0x20,0x24,0x20,0x63,0x20,0x4d,
+ 0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x22,
+ 0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x4f,0x20,0x3c,
+ 0x20,0x58,0x20,0x58,0x20,0x58,0x20,0x2e,0x20,0x40,0x20,0x71,0x20,0x23,
+ 0x20,0x2d,0x20,0x24,0x20,0x42,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,
+ 0x20,0x59,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x4f,0x20,0x4f,0x20,0x32,0x20,0x20,0x20,0x58,
+ 0x20,0x2e,0x20,0x6d,0x20,0x4a,0x20,0x2d,0x20,0x24,0x20,0x4e,0x20,0x59,
+ 0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x22,0x2c,0x0a,
+ 0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x53,
+ 0x20,0x3c,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,
+ 0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,
+ 0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x4f,0x20,0x32,0x20,0x49,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x49,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,
+ 0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x4f,0x20,0x43,
+ 0x20,0x49,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x50,0x20,0x55,
+ 0x20,0x50,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x49,0x20,0x59,
+ 0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x48,0x20,0x6f,0x20,0x49,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x50,0x20,0x50,0x20,0x55,0x20,0x50,0x20,0x50,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x49,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,
+ 0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x31,0x20,0x6f,0x20,0x49,
+ 0x20,0x55,0x20,0x55,0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x55,0x20,0x50,
+ 0x20,0x50,0x20,0x50,0x20,0x55,0x20,0x55,0x20,0x49,0x20,0x59,0x20,0x22,
+ 0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x31,0x20,0x6f,0x20,0x49,0x20,0x55,0x20,0x50,0x20,0x50,0x20,0x50,
+ 0x20,0x50,0x20,0x55,0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x55,
+ 0x20,0x49,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x68,0x20,0x25,0x20,0x49,0x20,0x55,
+ 0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x55,0x20,0x50,0x20,0x50,
+ 0x20,0x50,0x20,0x50,0x20,0x55,0x20,0x49,0x20,0x59,0x20,0x22,0x2c,0x0a,
+ 0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x33,
+ 0x20,0x25,0x20,0x49,0x20,0x55,0x20,0x55,0x20,0x50,0x20,0x50,0x20,0x50,
+ 0x20,0x55,0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x55,0x20,0x55,0x20,0x49,
+ 0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x33,0x20,0x25,0x20,0x49,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x50,0x20,0x50,0x20,0x55,0x20,0x50,0x20,0x50,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x49,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,
+ 0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x41,0x20,0x6e,
+ 0x20,0x49,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x50,0x20,0x55,
+ 0x20,0x50,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x49,0x20,0x59,
+ 0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x72,0x20,0x2c,0x20,0x49,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x49,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,
+ 0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x56,0x20,0x2c,0x20,0x49,
+ 0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,
+ 0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x59,0x20,0x22,
+ 0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x77,0x20,0x26,0x20,0x3e,0x20,0x3a,0x20,0x4c,0x20,0x40,0x20,0x35,
+ 0x20,0x3d,0x20,0x6b,0x20,0x6a,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,
+ 0x20,0x59,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x3b,0x20,0x26,0x20,0x3e,0x20,0x65,
+ 0x20,0x4c,0x20,0x40,0x20,0x35,0x20,0x3d,0x20,0x76,0x20,0x7a,0x20,0x59,
+ 0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x22,0x2c,0x0a,
+ 0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x64,0x20,0x3b,
+ 0x20,0x26,0x20,0x20,0x20,0x3a,0x20,0x4c,0x20,0x2b,0x20,0x75,0x20,0x61,
+ 0x20,0x6c,0x20,0x46,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,
+ 0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x44,0x20,0x34,0x20,0x69,
+ 0x20,0x38,0x20,0x47,0x20,0x73,0x20,0x30,0x20,0x20,0x20,0x58,0x20,0x4c,
+ 0x20,0x36,0x20,0x2a,0x20,0x2a,0x20,0x2a,0x20,0x78,0x20,0x59,0x20,0x59,
+ 0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,
+ 0x20,0x59,0x20,0x74,0x20,0x34,0x20,0x5a,0x20,0x66,0x20,0x67,0x20,0x4c,
+ 0x20,0x4c,0x20,0x4c,0x20,0x4c,0x20,0x79,0x20,0x39,0x20,0x37,0x20,0x2e,
+ 0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,
+ 0x20,0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_datatable_xpm_len = 3100;
+static const unsigned char small_datatable_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x31,0x32,0x38,0x20,0x32,0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x63,
+ 0x20,0x23,0x63,0x32,0x63,0x32,0x64,0x33,0x22,0x2c,0x0a,0x22,0x2e,0x20,
+ 0x20,0x63,0x20,0x23,0x39,0x36,0x39,0x36,0x61,0x33,0x22,0x2c,0x0a,0x22,
+ 0x58,0x20,0x20,0x63,0x20,0x23,0x61,0x62,0x61,0x62,0x62,0x62,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x20,0x20,0x63,0x20,0x23,0x64,0x62,0x64,0x62,0x65,0x66,
+ 0x22,0x2c,0x0a,0x22,0x4f,0x20,0x20,0x63,0x20,0x47,0x68,0x6f,0x73,0x74,
+ 0x57,0x68,0x69,0x74,0x65,0x22,0x2c,0x0a,0x22,0x2b,0x20,0x20,0x63,0x20,
+ 0x23,0x37,0x64,0x37,0x64,0x38,0x39,0x22,0x2c,0x0a,0x22,0x40,0x20,0x20,
+ 0x63,0x20,0x23,0x37,0x65,0x37,0x65,0x38,0x39,0x22,0x2c,0x0a,0x22,0x23,
+ 0x20,0x20,0x63,0x20,0x23,0x36,0x31,0x36,0x31,0x36,0x61,0x22,0x2c,0x0a,
+ 0x22,0x24,0x20,0x20,0x63,0x20,0x23,0x34,0x31,0x34,0x31,0x34,0x37,0x22,
+ 0x2c,0x0a,0x22,0x25,0x20,0x20,0x63,0x20,0x23,0x64,0x61,0x64,0x61,0x65,
+ 0x65,0x22,0x2c,0x0a,0x22,0x26,0x20,0x20,0x63,0x20,0x23,0x64,0x38,0x64,
+ 0x38,0x65,0x63,0x22,0x2c,0x0a,0x22,0x2a,0x20,0x20,0x63,0x20,0x23,0x37,
+ 0x31,0x37,0x31,0x37,0x62,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x20,0x63,0x20,
+ 0x23,0x34,0x36,0x34,0x36,0x34,0x63,0x22,0x2c,0x0a,0x22,0x2d,0x20,0x20,
+ 0x63,0x20,0x23,0x34,0x37,0x34,0x37,0x34,0x65,0x22,0x2c,0x0a,0x22,0x3b,
+ 0x20,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x66,0x65,0x22,0x2c,0x0a,
+ 0x22,0x3a,0x20,0x20,0x63,0x20,0x23,0x61,0x63,0x61,0x63,0x62,0x63,0x22,
+ 0x2c,0x0a,0x22,0x3e,0x20,0x20,0x63,0x20,0x23,0x63,0x31,0x63,0x31,0x64,
+ 0x33,0x22,0x2c,0x0a,0x22,0x2c,0x20,0x20,0x63,0x20,0x23,0x64,0x39,0x64,
+ 0x39,0x65,0x64,0x22,0x2c,0x0a,0x22,0x3c,0x20,0x20,0x63,0x20,0x23,0x64,
+ 0x64,0x64,0x64,0x66,0x31,0x22,0x2c,0x0a,0x22,0x31,0x20,0x20,0x63,0x20,
+ 0x23,0x66,0x36,0x66,0x36,0x66,0x66,0x22,0x2c,0x0a,0x22,0x32,0x20,0x20,
+ 0x63,0x20,0x23,0x64,0x64,0x64,0x64,0x66,0x30,0x22,0x2c,0x0a,0x22,0x33,
+ 0x20,0x20,0x63,0x20,0x23,0x66,0x34,0x66,0x34,0x66,0x66,0x22,0x2c,0x0a,
+ 0x22,0x34,0x20,0x20,0x63,0x20,0x23,0x61,0x31,0x61,0x31,0x61,0x64,0x22,
+ 0x2c,0x0a,0x22,0x35,0x20,0x20,0x63,0x20,0x23,0x36,0x30,0x36,0x30,0x36,
+ 0x39,0x22,0x2c,0x0a,0x22,0x36,0x20,0x20,0x63,0x20,0x23,0x38,0x32,0x38,
+ 0x32,0x38,0x65,0x22,0x2c,0x0a,0x22,0x37,0x20,0x20,0x63,0x20,0x23,0x39,
+ 0x38,0x39,0x37,0x61,0x33,0x22,0x2c,0x0a,0x22,0x38,0x20,0x20,0x63,0x20,
+ 0x23,0x63,0x32,0x63,0x32,0x63,0x61,0x22,0x2c,0x0a,0x22,0x39,0x20,0x20,
+ 0x63,0x20,0x23,0x39,0x34,0x39,0x34,0x61,0x31,0x22,0x2c,0x0a,0x22,0x30,
+ 0x20,0x20,0x63,0x20,0x23,0x64,0x35,0x64,0x35,0x65,0x39,0x22,0x2c,0x0a,
+ 0x22,0x71,0x20,0x20,0x63,0x20,0x23,0x36,0x31,0x36,0x31,0x36,0x62,0x22,
+ 0x2c,0x0a,0x22,0x77,0x20,0x20,0x63,0x20,0x23,0x66,0x31,0x66,0x31,0x66,
+ 0x65,0x22,0x2c,0x0a,0x22,0x65,0x20,0x20,0x63,0x20,0x23,0x61,0x64,0x61,
+ 0x64,0x62,0x63,0x22,0x2c,0x0a,0x22,0x72,0x20,0x20,0x63,0x20,0x23,0x66,
+ 0x32,0x66,0x32,0x66,0x66,0x22,0x2c,0x0a,0x22,0x74,0x20,0x20,0x63,0x20,
+ 0x23,0x39,0x66,0x39,0x66,0x61,0x62,0x22,0x2c,0x0a,0x22,0x79,0x20,0x20,
+ 0x63,0x20,0x23,0x39,0x35,0x39,0x35,0x61,0x33,0x22,0x2c,0x0a,0x22,0x75,
+ 0x20,0x20,0x63,0x20,0x23,0x36,0x30,0x36,0x30,0x36,0x38,0x22,0x2c,0x0a,
+ 0x22,0x69,0x20,0x20,0x63,0x20,0x23,0x62,0x30,0x62,0x30,0x62,0x61,0x22,
+ 0x2c,0x0a,0x22,0x70,0x20,0x20,0x63,0x20,0x23,0x37,0x30,0x36,0x66,0x37,
+ 0x37,0x22,0x2c,0x0a,0x22,0x61,0x20,0x20,0x63,0x20,0x23,0x34,0x35,0x34,
+ 0x35,0x34,0x62,0x22,0x2c,0x0a,0x22,0x73,0x20,0x20,0x63,0x20,0x23,0x65,
+ 0x35,0x65,0x35,0x66,0x34,0x22,0x2c,0x0a,0x22,0x64,0x20,0x20,0x63,0x20,
+ 0x23,0x66,0x65,0x66,0x65,0x66,0x66,0x22,0x2c,0x0a,0x22,0x66,0x20,0x20,
+ 0x63,0x20,0x23,0x39,0x61,0x39,0x61,0x61,0x37,0x22,0x2c,0x0a,0x22,0x67,
+ 0x20,0x20,0x63,0x20,0x23,0x39,0x37,0x39,0x37,0x61,0x35,0x22,0x2c,0x0a,
+ 0x22,0x68,0x20,0x20,0x63,0x20,0x23,0x66,0x35,0x66,0x35,0x66,0x66,0x22,
+ 0x2c,0x0a,0x22,0x6a,0x20,0x20,0x63,0x20,0x23,0x35,0x63,0x35,0x63,0x36,
+ 0x30,0x22,0x2c,0x0a,0x22,0x6b,0x20,0x20,0x63,0x20,0x23,0x33,0x66,0x33,
+ 0x66,0x34,0x35,0x22,0x2c,0x0a,0x22,0x6c,0x20,0x20,0x63,0x20,0x23,0x33,
+ 0x64,0x33,0x64,0x34,0x33,0x22,0x2c,0x0a,0x22,0x7a,0x20,0x20,0x63,0x20,
+ 0x23,0x35,0x31,0x35,0x31,0x35,0x37,0x22,0x2c,0x0a,0x22,0x78,0x20,0x20,
+ 0x63,0x20,0x23,0x38,0x32,0x38,0x31,0x38,0x34,0x22,0x2c,0x0a,0x22,0x63,
+ 0x20,0x20,0x63,0x20,0x23,0x33,0x38,0x33,0x38,0x33,0x64,0x22,0x2c,0x0a,
+ 0x22,0x76,0x20,0x20,0x63,0x20,0x23,0x34,0x30,0x34,0x30,0x34,0x36,0x22,
+ 0x2c,0x0a,0x22,0x62,0x20,0x20,0x63,0x20,0x23,0x39,0x61,0x39,0x61,0x61,
+ 0x39,0x22,0x2c,0x0a,0x22,0x6e,0x20,0x20,0x63,0x20,0x23,0x64,0x61,0x64,
+ 0x61,0x65,0x64,0x22,0x2c,0x0a,0x22,0x6d,0x20,0x20,0x63,0x20,0x23,0x37,
+ 0x65,0x37,0x65,0x38,0x61,0x22,0x2c,0x0a,0x22,0x4d,0x20,0x20,0x63,0x20,
+ 0x23,0x34,0x31,0x34,0x31,0x34,0x36,0x22,0x2c,0x0a,0x22,0x4e,0x20,0x20,
+ 0x63,0x20,0x23,0x34,0x62,0x34,0x62,0x35,0x30,0x22,0x2c,0x0a,0x22,0x42,
+ 0x20,0x20,0x63,0x20,0x23,0x34,0x61,0x34,0x61,0x35,0x30,0x22,0x2c,0x0a,
+ 0x22,0x56,0x20,0x20,0x63,0x20,0x23,0x66,0x31,0x66,0x31,0x66,0x66,0x22,
+ 0x2c,0x0a,0x22,0x43,0x20,0x20,0x63,0x20,0x23,0x64,0x63,0x64,0x63,0x66,
+ 0x30,0x22,0x2c,0x0a,0x22,0x5a,0x20,0x20,0x63,0x20,0x23,0x39,0x65,0x39,
+ 0x65,0x61,0x62,0x22,0x2c,0x0a,0x22,0x41,0x20,0x20,0x63,0x20,0x23,0x66,
+ 0x33,0x66,0x33,0x66,0x66,0x22,0x2c,0x0a,0x22,0x53,0x20,0x20,0x63,0x20,
+ 0x23,0x66,0x39,0x66,0x39,0x66,0x66,0x22,0x2c,0x0a,0x22,0x44,0x20,0x20,
+ 0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x62,0x30,0x22,0x2c,0x0a,0x22,0x46,
+ 0x20,0x20,0x63,0x20,0x23,0x35,0x39,0x35,0x39,0x35,0x66,0x22,0x2c,0x0a,
+ 0x22,0x47,0x20,0x20,0x63,0x20,0x23,0x65,0x38,0x65,0x38,0x65,0x62,0x22,
+ 0x2c,0x0a,0x22,0x48,0x20,0x20,0x63,0x20,0x23,0x66,0x37,0x66,0x37,0x66,
+ 0x66,0x22,0x2c,0x0a,0x22,0x4a,0x20,0x20,0x63,0x20,0x23,0x36,0x32,0x36,
+ 0x32,0x36,0x62,0x22,0x2c,0x0a,0x22,0x4b,0x20,0x20,0x63,0x20,0x23,0x61,
+ 0x64,0x61,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x4c,0x20,0x20,0x63,0x20,
+ 0x23,0x39,0x36,0x39,0x36,0x61,0x34,0x22,0x2c,0x0a,0x22,0x50,0x20,0x20,
+ 0x63,0x20,0x23,0x38,0x36,0x38,0x36,0x39,0x32,0x22,0x2c,0x0a,0x22,0x49,
+ 0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x55,
+ 0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x31,0x30,0x30,0x22,0x2c,0x0a,
+ 0x22,0x59,0x20,0x20,0x63,0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x22,
+ 0x54,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x52,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x45,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x57,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x51,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x21,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x7e,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x5e,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x2f,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x28,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x29,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x5f,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x60,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x27,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x5d,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x5b,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x7b,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x7d,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x7c,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x20,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x2e,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x58,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x6f,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x4f,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x2b,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x40,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x23,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x24,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x25,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x26,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x2a,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x3d,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x2d,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x3b,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x3a,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x3e,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x2c,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x3c,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x31,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x32,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x33,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x34,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x35,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x36,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x37,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x38,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x39,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x30,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x71,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x77,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x65,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x72,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x74,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x79,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x75,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x2f,
+ 0x2a,0x20,0x70,0x69,0x78,0x65,0x6c,0x73,0x20,0x2a,0x2f,0x0a,0x22,0x59,
+ 0x20,0x59,0x20,0x6f,0x20,0x6f,0x20,0x4b,0x20,0x4b,0x20,0x4b,0x20,0x4b,
+ 0x20,0x4b,0x20,0x4b,0x20,0x4b,0x20,0x4b,0x20,0x4b,0x20,0x4b,0x20,0x4b,
+ 0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,
+ 0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x20,0x20,0x62,0x20,0x2e,0x20,0x40,
+ 0x20,0x40,0x20,0x4a,0x20,0x4a,0x20,0x4a,0x20,0x4a,0x20,0x4a,0x20,0x4a,
+ 0x20,0x4a,0x20,0x4a,0x20,0x4a,0x20,0x70,0x20,0x59,0x20,0x59,0x20,0x59,
+ 0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x58,
+ 0x20,0x20,0x20,0x20,0x20,0x2e,0x20,0x2e,0x20,0x2b,0x20,0x2b,0x20,0x2b,
+ 0x20,0x2b,0x20,0x23,0x20,0x23,0x20,0x23,0x20,0x24,0x20,0x63,0x20,0x4d,
+ 0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x22,
+ 0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x4f,0x20,0x3c,
+ 0x20,0x58,0x20,0x58,0x20,0x58,0x20,0x2e,0x20,0x40,0x20,0x71,0x20,0x23,
+ 0x20,0x2d,0x20,0x24,0x20,0x42,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,
+ 0x20,0x59,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x4f,0x20,0x4f,0x20,0x32,0x20,0x20,0x20,0x58,
+ 0x20,0x2e,0x20,0x6d,0x20,0x4a,0x20,0x2d,0x20,0x24,0x20,0x4e,0x20,0x59,
+ 0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x22,0x2c,0x0a,
+ 0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x53,
+ 0x20,0x3c,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,
+ 0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,
+ 0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x4f,0x20,0x32,0x20,0x49,0x20,0x55,0x20,0x55,
+ 0x20,0x49,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x49,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,
+ 0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x4f,0x20,0x43,
+ 0x20,0x49,0x20,0x55,0x20,0x55,0x20,0x49,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x49,0x20,0x59,
+ 0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x48,0x20,0x6f,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,
+ 0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,
+ 0x20,0x49,0x20,0x49,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,
+ 0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x31,0x20,0x6f,0x20,0x49,
+ 0x20,0x55,0x20,0x55,0x20,0x49,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x49,0x20,0x59,0x20,0x22,
+ 0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x31,0x20,0x6f,0x20,0x49,0x20,0x50,0x20,0x50,0x20,0x49,0x20,0x50,
+ 0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x50,
+ 0x20,0x49,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x68,0x20,0x25,0x20,0x49,0x20,0x55,
+ 0x20,0x55,0x20,0x49,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x49,0x20,0x59,0x20,0x22,0x2c,0x0a,
+ 0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x33,
+ 0x20,0x25,0x20,0x49,0x20,0x50,0x20,0x50,0x20,0x49,0x20,0x50,0x20,0x50,
+ 0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x49,
+ 0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x33,0x20,0x25,0x20,0x49,0x20,0x55,0x20,0x55,
+ 0x20,0x49,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x49,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,
+ 0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x41,0x20,0x6e,
+ 0x20,0x49,0x20,0x50,0x20,0x50,0x20,0x49,0x20,0x50,0x20,0x50,0x20,0x50,
+ 0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x50,0x20,0x49,0x20,0x59,
+ 0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x72,0x20,0x2c,0x20,0x49,0x20,0x55,0x20,0x55,0x20,0x49,
+ 0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x55,0x20,0x49,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,
+ 0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x56,0x20,0x2c,0x20,0x49,
+ 0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,
+ 0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x59,0x20,0x22,
+ 0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,
+ 0x20,0x77,0x20,0x26,0x20,0x3e,0x20,0x3a,0x20,0x4c,0x20,0x40,0x20,0x35,
+ 0x20,0x3d,0x20,0x6b,0x20,0x6a,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,
+ 0x20,0x59,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4c,0x20,0x55,
+ 0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x3b,0x20,0x26,0x20,0x3e,0x20,0x65,
+ 0x20,0x4c,0x20,0x40,0x20,0x35,0x20,0x3d,0x20,0x76,0x20,0x7a,0x20,0x59,
+ 0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x22,0x2c,0x0a,
+ 0x22,0x59,0x20,0x4c,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x64,0x20,0x3b,
+ 0x20,0x26,0x20,0x20,0x20,0x3a,0x20,0x4c,0x20,0x2b,0x20,0x75,0x20,0x61,
+ 0x20,0x6c,0x20,0x46,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,
+ 0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,0x20,0x44,0x20,0x34,0x20,0x69,
+ 0x20,0x38,0x20,0x47,0x20,0x73,0x20,0x30,0x20,0x20,0x20,0x58,0x20,0x4c,
+ 0x20,0x36,0x20,0x2a,0x20,0x2a,0x20,0x2a,0x20,0x78,0x20,0x59,0x20,0x59,
+ 0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x22,0x2c,0x0a,0x22,0x59,
+ 0x20,0x59,0x20,0x74,0x20,0x34,0x20,0x5a,0x20,0x66,0x20,0x67,0x20,0x4c,
+ 0x20,0x4c,0x20,0x4c,0x20,0x4c,0x20,0x79,0x20,0x39,0x20,0x37,0x20,0x2e,
+ 0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,0x20,0x59,
+ 0x20,0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_dataview_xpm_len = 3164;
+static const unsigned char small_dataview_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x31,0x32,0x38,0x20,0x32,0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x63,
+ 0x20,0x23,0x61,0x62,0x61,0x62,0x62,0x62,0x22,0x2c,0x0a,0x22,0x2e,0x20,
+ 0x20,0x63,0x20,0x23,0x39,0x36,0x39,0x36,0x61,0x33,0x22,0x2c,0x0a,0x22,
+ 0x58,0x20,0x20,0x63,0x20,0x23,0x63,0x32,0x63,0x32,0x64,0x33,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x20,0x20,0x63,0x20,0x23,0x37,0x65,0x37,0x65,0x38,0x39,
+ 0x22,0x2c,0x0a,0x22,0x4f,0x20,0x20,0x63,0x20,0x23,0x37,0x64,0x37,0x64,
+ 0x38,0x39,0x22,0x2c,0x0a,0x22,0x2b,0x20,0x20,0x63,0x20,0x47,0x68,0x6f,
+ 0x73,0x74,0x57,0x68,0x69,0x74,0x65,0x22,0x2c,0x0a,0x22,0x40,0x20,0x20,
+ 0x63,0x20,0x23,0x64,0x62,0x64,0x62,0x65,0x66,0x22,0x2c,0x0a,0x22,0x23,
+ 0x20,0x20,0x63,0x20,0x23,0x36,0x31,0x36,0x31,0x36,0x61,0x22,0x2c,0x0a,
+ 0x22,0x24,0x20,0x20,0x63,0x20,0x23,0x37,0x31,0x37,0x31,0x37,0x62,0x22,
+ 0x2c,0x0a,0x22,0x25,0x20,0x20,0x63,0x20,0x23,0x64,0x61,0x64,0x61,0x65,
+ 0x65,0x22,0x2c,0x0a,0x22,0x26,0x20,0x20,0x63,0x20,0x23,0x34,0x31,0x34,
+ 0x31,0x34,0x37,0x22,0x2c,0x0a,0x22,0x2a,0x20,0x20,0x63,0x20,0x23,0x64,
+ 0x38,0x64,0x38,0x65,0x63,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x20,0x63,0x20,
+ 0x47,0x72,0x61,0x79,0x35,0x36,0x22,0x2c,0x0a,0x22,0x2d,0x20,0x20,0x63,
+ 0x20,0x23,0x64,0x39,0x64,0x39,0x65,0x64,0x22,0x2c,0x0a,0x22,0x3b,0x20,
+ 0x20,0x63,0x20,0x23,0x64,0x64,0x64,0x64,0x66,0x30,0x22,0x2c,0x0a,0x22,
+ 0x3a,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x39,0x34,0x22,0x2c,0x0a,
+ 0x22,0x3e,0x20,0x20,0x63,0x20,0x23,0x63,0x31,0x63,0x31,0x64,0x33,0x22,
+ 0x2c,0x0a,0x22,0x2c,0x20,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x66,
+ 0x65,0x22,0x2c,0x0a,0x22,0x3c,0x20,0x20,0x63,0x20,0x23,0x34,0x36,0x34,
+ 0x36,0x34,0x63,0x22,0x2c,0x0a,0x22,0x31,0x20,0x20,0x63,0x20,0x23,0x61,
+ 0x31,0x61,0x31,0x61,0x64,0x22,0x2c,0x0a,0x22,0x32,0x20,0x20,0x63,0x20,
+ 0x23,0x61,0x63,0x61,0x63,0x62,0x63,0x22,0x2c,0x0a,0x22,0x33,0x20,0x20,
+ 0x63,0x20,0x23,0x34,0x37,0x34,0x37,0x34,0x65,0x22,0x2c,0x0a,0x22,0x34,
+ 0x20,0x20,0x63,0x20,0x23,0x66,0x34,0x66,0x34,0x66,0x66,0x22,0x2c,0x0a,
+ 0x22,0x35,0x20,0x20,0x63,0x20,0x23,0x66,0x36,0x66,0x36,0x66,0x66,0x22,
+ 0x2c,0x0a,0x22,0x36,0x20,0x20,0x63,0x20,0x23,0x36,0x30,0x36,0x30,0x36,
+ 0x39,0x22,0x2c,0x0a,0x22,0x37,0x20,0x20,0x63,0x20,0x23,0x64,0x64,0x64,
+ 0x64,0x66,0x31,0x22,0x2c,0x0a,0x22,0x38,0x20,0x20,0x63,0x20,0x23,0x62,
+ 0x32,0x62,0x32,0x62,0x32,0x22,0x2c,0x0a,0x22,0x39,0x20,0x20,0x63,0x20,
+ 0x23,0x62,0x63,0x62,0x63,0x62,0x63,0x22,0x2c,0x0a,0x22,0x30,0x20,0x20,
+ 0x63,0x20,0x67,0x61,0x69,0x6e,0x73,0x62,0x6f,0x72,0x6f,0x22,0x2c,0x0a,
+ 0x22,0x71,0x20,0x20,0x63,0x20,0x23,0x33,0x38,0x33,0x38,0x33,0x64,0x22,
+ 0x2c,0x0a,0x22,0x77,0x20,0x20,0x63,0x20,0x23,0x39,0x35,0x39,0x35,0x61,
+ 0x33,0x22,0x2c,0x0a,0x22,0x65,0x20,0x20,0x63,0x20,0x23,0x61,0x35,0x61,
+ 0x35,0x62,0x30,0x22,0x2c,0x0a,0x22,0x72,0x20,0x20,0x63,0x20,0x23,0x37,
+ 0x31,0x37,0x31,0x37,0x31,0x22,0x2c,0x0a,0x22,0x74,0x20,0x20,0x63,0x20,
+ 0x23,0x30,0x32,0x30,0x32,0x30,0x32,0x22,0x2c,0x0a,0x22,0x79,0x20,0x20,
+ 0x63,0x20,0x23,0x37,0x62,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x75,
+ 0x20,0x20,0x63,0x20,0x23,0x33,0x65,0x33,0x65,0x33,0x65,0x22,0x2c,0x0a,
+ 0x22,0x69,0x20,0x20,0x63,0x20,0x23,0x62,0x30,0x62,0x30,0x62,0x61,0x22,
+ 0x2c,0x0a,0x22,0x70,0x20,0x20,0x63,0x20,0x23,0x39,0x61,0x39,0x61,0x61,
+ 0x37,0x22,0x2c,0x0a,0x22,0x61,0x20,0x20,0x63,0x20,0x23,0x66,0x65,0x66,
+ 0x65,0x66,0x66,0x22,0x2c,0x0a,0x22,0x73,0x20,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x36,0x22,0x2c,0x0a,0x22,0x64,0x20,0x20,0x63,0x20,0x23,0x33,
+ 0x66,0x33,0x66,0x34,0x35,0x22,0x2c,0x0a,0x22,0x66,0x20,0x20,0x63,0x20,
+ 0x23,0x36,0x32,0x36,0x32,0x36,0x32,0x22,0x2c,0x0a,0x22,0x67,0x20,0x20,
+ 0x63,0x20,0x23,0x37,0x65,0x37,0x65,0x38,0x61,0x22,0x2c,0x0a,0x22,0x68,
+ 0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x35,0x33,0x22,0x2c,0x0a,0x22,
+ 0x6a,0x20,0x20,0x63,0x20,0x23,0x34,0x36,0x34,0x36,0x34,0x36,0x22,0x2c,
+ 0x0a,0x22,0x6b,0x20,0x20,0x63,0x20,0x23,0x37,0x63,0x37,0x63,0x37,0x63,
+ 0x22,0x2c,0x0a,0x22,0x6c,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x31,
+ 0x35,0x22,0x2c,0x0a,0x22,0x7a,0x20,0x20,0x63,0x20,0x23,0x64,0x35,0x64,
+ 0x35,0x65,0x39,0x22,0x2c,0x0a,0x22,0x78,0x20,0x20,0x63,0x20,0x23,0x64,
+ 0x64,0x64,0x64,0x64,0x64,0x22,0x2c,0x0a,0x22,0x63,0x20,0x20,0x63,0x20,
+ 0x23,0x64,0x63,0x64,0x63,0x66,0x30,0x22,0x2c,0x0a,0x22,0x76,0x20,0x20,
+ 0x63,0x20,0x23,0x38,0x32,0x38,0x31,0x38,0x34,0x22,0x2c,0x0a,0x22,0x62,
+ 0x20,0x20,0x63,0x20,0x23,0x33,0x64,0x33,0x64,0x34,0x33,0x22,0x2c,0x0a,
+ 0x22,0x6e,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x39,0x22,0x2c,0x0a,
+ 0x22,0x6d,0x20,0x20,0x63,0x20,0x23,0x65,0x39,0x65,0x39,0x65,0x39,0x22,
+ 0x2c,0x0a,0x22,0x4d,0x20,0x20,0x63,0x20,0x23,0x35,0x39,0x35,0x39,0x35,
+ 0x66,0x22,0x2c,0x0a,0x22,0x4e,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,
+ 0x34,0x22,0x2c,0x0a,0x22,0x42,0x20,0x20,0x63,0x20,0x23,0x33,0x35,0x33,
+ 0x35,0x33,0x35,0x22,0x2c,0x0a,0x22,0x56,0x20,0x20,0x63,0x20,0x23,0x39,
+ 0x37,0x39,0x37,0x61,0x35,0x22,0x2c,0x0a,0x22,0x43,0x20,0x20,0x63,0x20,
+ 0x23,0x35,0x63,0x35,0x63,0x36,0x30,0x22,0x2c,0x0a,0x22,0x5a,0x20,0x20,
+ 0x63,0x20,0x47,0x72,0x61,0x79,0x38,0x30,0x22,0x2c,0x0a,0x22,0x41,0x20,
+ 0x20,0x63,0x20,0x23,0x39,0x38,0x39,0x37,0x61,0x33,0x22,0x2c,0x0a,0x22,
+ 0x53,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x39,0x33,0x22,0x2c,0x0a,
+ 0x22,0x44,0x20,0x20,0x63,0x20,0x23,0x30,0x62,0x30,0x62,0x30,0x62,0x22,
+ 0x2c,0x0a,0x22,0x46,0x20,0x20,0x63,0x20,0x23,0x38,0x30,0x38,0x30,0x38,
+ 0x30,0x22,0x2c,0x0a,0x22,0x47,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,
+ 0x39,0x35,0x22,0x2c,0x0a,0x22,0x48,0x20,0x20,0x63,0x20,0x23,0x66,0x37,
+ 0x66,0x37,0x66,0x66,0x22,0x2c,0x0a,0x22,0x4a,0x20,0x20,0x63,0x20,0x23,
+ 0x34,0x35,0x34,0x35,0x34,0x62,0x22,0x2c,0x0a,0x22,0x4b,0x20,0x20,0x63,
+ 0x20,0x23,0x34,0x30,0x34,0x30,0x34,0x36,0x22,0x2c,0x0a,0x22,0x4c,0x20,
+ 0x20,0x63,0x20,0x23,0x63,0x31,0x63,0x31,0x63,0x31,0x22,0x2c,0x0a,0x22,
+ 0x50,0x20,0x20,0x63,0x20,0x23,0x66,0x33,0x66,0x33,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x49,0x20,0x20,0x63,0x20,0x23,0x35,0x38,0x35,0x38,0x35,0x38,
+ 0x22,0x2c,0x0a,0x22,0x55,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x38,
+ 0x34,0x22,0x2c,0x0a,0x22,0x59,0x20,0x20,0x63,0x20,0x23,0x39,0x30,0x39,
+ 0x30,0x39,0x30,0x22,0x2c,0x0a,0x22,0x54,0x20,0x20,0x63,0x20,0x23,0x32,
+ 0x61,0x32,0x61,0x32,0x61,0x22,0x2c,0x0a,0x22,0x52,0x20,0x20,0x63,0x20,
+ 0x23,0x34,0x62,0x34,0x62,0x35,0x30,0x22,0x2c,0x0a,0x22,0x45,0x20,0x20,
+ 0x63,0x20,0x47,0x72,0x61,0x79,0x32,0x33,0x22,0x2c,0x0a,0x22,0x57,0x20,
+ 0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x39,0x36,0x22,0x2c,0x0a,0x22,0x51,
+ 0x20,0x20,0x63,0x20,0x23,0x34,0x34,0x34,0x34,0x34,0x34,0x22,0x2c,0x0a,
+ 0x22,0x21,0x20,0x20,0x63,0x20,0x23,0x66,0x39,0x66,0x39,0x66,0x66,0x22,
+ 0x2c,0x0a,0x22,0x7e,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x33,0x35,
+ 0x22,0x2c,0x0a,0x22,0x5e,0x20,0x20,0x63,0x20,0x23,0x31,0x31,0x31,0x31,
+ 0x31,0x31,0x22,0x2c,0x0a,0x22,0x2f,0x20,0x20,0x63,0x20,0x47,0x72,0x61,
+ 0x79,0x33,0x34,0x22,0x2c,0x0a,0x22,0x28,0x20,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x34,0x34,0x22,0x2c,0x0a,0x22,0x29,0x20,0x20,0x63,0x20,0x23,
+ 0x65,0x38,0x65,0x38,0x65,0x62,0x22,0x2c,0x0a,0x22,0x5f,0x20,0x20,0x63,
+ 0x20,0x23,0x65,0x35,0x65,0x35,0x66,0x34,0x22,0x2c,0x0a,0x22,0x60,0x20,
+ 0x20,0x63,0x20,0x23,0x63,0x32,0x63,0x32,0x63,0x61,0x22,0x2c,0x0a,0x22,
+ 0x27,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x37,0x34,0x22,0x2c,0x0a,
+ 0x22,0x5d,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x35,0x32,0x22,0x2c,
+ 0x0a,0x22,0x5b,0x20,0x20,0x63,0x20,0x23,0x39,0x65,0x39,0x65,0x61,0x62,
+ 0x22,0x2c,0x0a,0x22,0x7b,0x20,0x20,0x63,0x20,0x23,0x66,0x31,0x66,0x31,
+ 0x66,0x65,0x22,0x2c,0x0a,0x22,0x7d,0x20,0x20,0x63,0x20,0x23,0x66,0x65,
+ 0x66,0x65,0x66,0x65,0x22,0x2c,0x0a,0x22,0x7c,0x20,0x20,0x63,0x20,0x23,
+ 0x66,0x39,0x66,0x39,0x66,0x39,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x20,0x63,
+ 0x20,0x23,0x34,0x31,0x34,0x31,0x34,0x36,0x22,0x2c,0x0a,0x22,0x2e,0x2e,
+ 0x20,0x63,0x20,0x23,0x66,0x31,0x66,0x31,0x66,0x66,0x22,0x2c,0x0a,0x22,
+ 0x58,0x2e,0x20,0x63,0x20,0x23,0x39,0x66,0x39,0x66,0x61,0x62,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x2e,0x20,0x63,0x20,0x23,0x66,0x32,0x66,0x32,0x66,0x66,
+ 0x22,0x2c,0x0a,0x22,0x4f,0x2e,0x20,0x63,0x20,0x23,0x35,0x31,0x35,0x31,
+ 0x35,0x37,0x22,0x2c,0x0a,0x22,0x2b,0x2e,0x20,0x63,0x20,0x23,0x34,0x61,
+ 0x34,0x61,0x35,0x30,0x22,0x2c,0x0a,0x22,0x40,0x2e,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x35,0x22,0x2c,0x0a,0x22,0x23,0x2e,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x31,0x22,0x2c,0x0a,0x22,0x24,0x2e,0x20,0x63,0x20,0x23,
+ 0x36,0x30,0x36,0x30,0x36,0x38,0x22,0x2c,0x0a,0x22,0x25,0x2e,0x20,0x63,
+ 0x20,0x23,0x64,0x61,0x64,0x61,0x65,0x64,0x22,0x2c,0x0a,0x22,0x26,0x2e,
+ 0x20,0x63,0x20,0x23,0x36,0x38,0x36,0x38,0x36,0x38,0x22,0x2c,0x0a,0x22,
+ 0x2a,0x2e,0x20,0x63,0x20,0x23,0x37,0x30,0x36,0x66,0x37,0x37,0x22,0x2c,
+ 0x0a,0x22,0x3d,0x2e,0x20,0x63,0x20,0x23,0x39,0x61,0x39,0x61,0x61,0x39,
+ 0x22,0x2c,0x0a,0x22,0x2d,0x2e,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,
+ 0x62,0x63,0x22,0x2c,0x0a,0x22,0x3b,0x2e,0x20,0x63,0x20,0x23,0x66,0x35,
+ 0x66,0x35,0x66,0x66,0x22,0x2c,0x0a,0x22,0x3a,0x2e,0x20,0x63,0x20,0x23,
+ 0x39,0x34,0x39,0x34,0x61,0x31,0x22,0x2c,0x0a,0x22,0x3e,0x2e,0x20,0x63,
+ 0x20,0x23,0x36,0x31,0x36,0x31,0x36,0x62,0x22,0x2c,0x0a,0x22,0x2c,0x2e,
+ 0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x37,0x37,0x22,0x2c,0x0a,0x22,0x3c,
+ 0x2e,0x20,0x63,0x20,0x23,0x38,0x32,0x38,0x32,0x38,0x65,0x22,0x2c,0x0a,
+ 0x22,0x31,0x2e,0x20,0x63,0x20,0x23,0x36,0x32,0x36,0x32,0x36,0x62,0x22,
+ 0x2c,0x0a,0x22,0x32,0x2e,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x62,
+ 0x64,0x22,0x2c,0x0a,0x22,0x33,0x2e,0x20,0x63,0x20,0x23,0x39,0x36,0x39,
+ 0x36,0x61,0x34,0x22,0x2c,0x0a,0x22,0x34,0x2e,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x35,0x2e,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x31,0x30,0x30,0x22,0x2c,0x0a,0x22,0x36,0x2e,0x20,0x63,0x20,
+ 0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x22,0x37,0x2e,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x38,0x2e,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x39,0x2e,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x30,0x2e,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x71,0x2e,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x77,0x2e,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x65,0x2e,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x72,0x2e,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x74,0x2e,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x79,0x2e,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x75,0x2e,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x2f,0x2a,0x20,0x70,0x69,0x78,0x65,
+ 0x6c,0x73,0x20,0x2a,0x2f,0x0a,0x22,0x36,0x2e,0x36,0x2e,0x40,0x20,0x40,
+ 0x20,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x36,0x2e,0x36,0x2e,0x36,
+ 0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x22,0x2c,0x0a,0x22,0x36,
+ 0x2e,0x58,0x20,0x3d,0x2e,0x2e,0x20,0x6f,0x20,0x6f,0x20,0x31,0x2e,0x31,
+ 0x2e,0x31,0x2e,0x31,0x2e,0x31,0x2e,0x31,0x2e,0x31,0x2e,0x31,0x2e,0x31,
+ 0x2e,0x2a,0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,
+ 0x2e,0x22,0x2c,0x0a,0x22,0x36,0x2e,0x20,0x20,0x58,0x20,0x58,0x20,0x2e,
+ 0x20,0x2e,0x20,0x4f,0x20,0x4f,0x20,0x4f,0x20,0x4f,0x20,0x23,0x20,0x23,
+ 0x20,0x23,0x20,0x26,0x20,0x71,0x20,0x20,0x2e,0x36,0x2e,0x36,0x2e,0x36,
+ 0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x22,0x2c,0x0a,0x22,0x36,0x2e,0x33,
+ 0x2e,0x35,0x2e,0x35,0x2e,0x2b,0x20,0x37,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x2e,0x20,0x6f,0x20,0x3e,0x2e,0x23,0x20,0x33,0x20,0x26,0x20,0x2b,
+ 0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x22,
+ 0x2c,0x0a,0x22,0x36,0x2e,0x33,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x2b,
+ 0x20,0x2b,0x20,0x3b,0x20,0x58,0x20,0x20,0x20,0x2e,0x20,0x67,0x20,0x31,
+ 0x2e,0x33,0x20,0x26,0x20,0x52,0x20,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,
+ 0x2e,0x36,0x2e,0x36,0x2e,0x22,0x2c,0x0a,0x22,0x36,0x2e,0x33,0x2e,0x35,
+ 0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x21,0x20,0x37,0x20,0x34,0x2e,0x34,
+ 0x2e,0x34,0x2e,0x34,0x2e,0x34,0x2e,0x34,0x2e,0x34,0x2e,0x34,0x2e,0x34,
+ 0x2e,0x34,0x2e,0x34,0x2e,0x34,0x2e,0x34,0x2e,0x36,0x2e,0x22,0x2c,0x0a,
+ 0x22,0x36,0x2e,0x33,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x2b,
+ 0x20,0x3b,0x20,0x34,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,
+ 0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x34,
+ 0x2e,0x36,0x2e,0x22,0x2c,0x0a,0x22,0x36,0x2e,0x33,0x2e,0x35,0x2e,0x35,
+ 0x2e,0x35,0x2e,0x35,0x2e,0x2b,0x20,0x63,0x20,0x34,0x2e,0x35,0x2e,0x35,
+ 0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,
+ 0x2e,0x35,0x2e,0x35,0x2e,0x34,0x2e,0x36,0x2e,0x22,0x2c,0x0a,0x22,0x36,
+ 0x2e,0x33,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x48,0x20,0x40,
+ 0x20,0x34,0x2e,0x55,0x20,0x46,0x20,0x6a,0x20,0x6c,0x20,0x54,0x20,0x7e,
+ 0x20,0x59,0x20,0x78,0x20,0x3a,0x20,0x53,0x20,0x35,0x2e,0x34,0x2e,0x36,
+ 0x2e,0x22,0x2c,0x0a,0x22,0x36,0x2e,0x33,0x2e,0x35,0x2e,0x35,0x2e,0x35,
+ 0x2e,0x35,0x2e,0x35,0x20,0x40,0x20,0x34,0x2e,0x4e,0x20,0x44,0x20,0x40,
+ 0x2e,0x34,0x2e,0x34,0x2e,0x75,0x20,0x2f,0x20,0x6e,0x20,0x3d,0x20,0x2c,
+ 0x2e,0x6d,0x20,0x34,0x2e,0x36,0x2e,0x22,0x2c,0x0a,0x22,0x36,0x2e,0x33,
+ 0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x20,0x40,0x20,0x34,
+ 0x2e,0x34,0x2e,0x51,0x20,0x66,0x20,0x34,0x2e,0x34,0x2e,0x73,0x20,0x5e,
+ 0x20,0x28,0x20,0x3a,0x20,0x5d,0x20,0x38,0x20,0x34,0x2e,0x36,0x2e,0x22,
+ 0x2c,0x0a,0x22,0x36,0x2e,0x33,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,
+ 0x2e,0x3b,0x2e,0x25,0x20,0x34,0x2e,0x23,0x2e,0x49,0x20,0x4c,0x20,0x45,
+ 0x20,0x34,0x2e,0x74,0x20,0x42,0x20,0x30,0x20,0x35,0x2e,0x39,0x20,0x3d,
+ 0x20,0x34,0x2e,0x36,0x2e,0x22,0x2c,0x0a,0x22,0x36,0x2e,0x33,0x2e,0x35,
+ 0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x34,0x20,0x25,0x20,0x34,0x2e,0x27,
+ 0x20,0x72,0x20,0x6b,0x20,0x68,0x20,0x26,0x2e,0x79,0x20,0x5a,0x20,0x57,
+ 0x20,0x7c,0x20,0x47,0x20,0x7d,0x20,0x34,0x2e,0x36,0x2e,0x22,0x2c,0x0a,
+ 0x22,0x36,0x2e,0x33,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x34,
+ 0x20,0x25,0x20,0x34,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,
+ 0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x34,
+ 0x2e,0x36,0x2e,0x22,0x2c,0x0a,0x22,0x36,0x2e,0x33,0x2e,0x35,0x2e,0x35,
+ 0x2e,0x35,0x2e,0x35,0x2e,0x50,0x20,0x25,0x2e,0x34,0x2e,0x35,0x2e,0x35,
+ 0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,
+ 0x2e,0x35,0x2e,0x35,0x2e,0x34,0x2e,0x36,0x2e,0x22,0x2c,0x0a,0x22,0x36,
+ 0x2e,0x33,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x6f,0x2e,0x2d,
+ 0x20,0x34,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,
+ 0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x34,0x2e,0x36,
+ 0x2e,0x22,0x2c,0x0a,0x22,0x36,0x2e,0x33,0x2e,0x35,0x2e,0x35,0x2e,0x35,
+ 0x2e,0x35,0x2e,0x2e,0x2e,0x2d,0x20,0x34,0x2e,0x34,0x2e,0x34,0x2e,0x34,
+ 0x2e,0x34,0x2e,0x34,0x2e,0x34,0x2e,0x34,0x2e,0x34,0x2e,0x34,0x2e,0x34,
+ 0x2e,0x34,0x2e,0x34,0x2e,0x36,0x2e,0x22,0x2c,0x0a,0x22,0x36,0x2e,0x33,
+ 0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x7b,0x20,0x2a,0x20,0x3e,
+ 0x20,0x32,0x20,0x33,0x2e,0x6f,0x20,0x36,0x20,0x3c,0x20,0x64,0x20,0x43,
+ 0x20,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x22,
+ 0x2c,0x0a,0x22,0x36,0x2e,0x33,0x2e,0x35,0x2e,0x35,0x2e,0x35,0x2e,0x35,
+ 0x2e,0x2c,0x20,0x2a,0x20,0x3e,0x20,0x2d,0x2e,0x33,0x2e,0x6f,0x20,0x36,
+ 0x20,0x3c,0x20,0x4b,0x20,0x4f,0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,
+ 0x2e,0x36,0x2e,0x36,0x2e,0x22,0x2c,0x0a,0x22,0x36,0x2e,0x33,0x2e,0x35,
+ 0x2e,0x35,0x2e,0x35,0x2e,0x61,0x20,0x2c,0x20,0x2a,0x20,0x58,0x20,0x32,
+ 0x20,0x33,0x2e,0x4f,0x20,0x24,0x2e,0x4a,0x20,0x62,0x20,0x4d,0x20,0x36,
+ 0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x22,0x2c,0x0a,
+ 0x22,0x36,0x2e,0x65,0x20,0x31,0x20,0x69,0x20,0x60,0x20,0x29,0x20,0x5f,
+ 0x20,0x7a,0x20,0x58,0x20,0x20,0x20,0x33,0x2e,0x3c,0x2e,0x24,0x20,0x24,
+ 0x20,0x24,0x20,0x76,0x20,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,
+ 0x2e,0x36,0x2e,0x22,0x2c,0x0a,0x22,0x36,0x2e,0x36,0x2e,0x58,0x2e,0x31,
+ 0x20,0x5b,0x20,0x70,0x20,0x56,0x20,0x33,0x2e,0x33,0x2e,0x33,0x2e,0x33,
+ 0x2e,0x77,0x20,0x3a,0x2e,0x41,0x20,0x2e,0x20,0x36,0x2e,0x36,0x2e,0x36,
+ 0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x36,0x2e,0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_editdelete_xpm_len = 4330;
+static const unsigned char small_editdelete_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x20,0x65,0x64,0x69,0x74,
+ 0x64,0x65,0x6c,0x65,0x74,0x65,0x5f,0x78,0x70,0x6d,0x5b,0x5d,0x20,0x3d,
+ 0x20,0x7b,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,0x20,0x32,0x30,0x31,0x20,
+ 0x32,0x22,0x2c,0x0a,0x22,0x20,0x20,0x09,0x63,0x20,0x4e,0x6f,0x6e,0x65,
+ 0x22,0x2c,0x0a,0x22,0x2e,0x20,0x09,0x63,0x20,0x23,0x34,0x35,0x34,0x35,
+ 0x34,0x35,0x22,0x2c,0x0a,0x22,0x2b,0x20,0x09,0x63,0x20,0x23,0x38,0x42,
+ 0x38,0x42,0x38,0x42,0x22,0x2c,0x0a,0x22,0x40,0x20,0x09,0x63,0x20,0x23,
+ 0x32,0x38,0x32,0x38,0x32,0x38,0x22,0x2c,0x0a,0x22,0x23,0x20,0x09,0x63,
+ 0x20,0x23,0x34,0x36,0x34,0x36,0x34,0x36,0x22,0x2c,0x0a,0x22,0x24,0x20,
+ 0x09,0x63,0x20,0x23,0x36,0x46,0x36,0x46,0x36,0x46,0x22,0x2c,0x0a,0x22,
+ 0x25,0x20,0x09,0x63,0x20,0x23,0x46,0x37,0x46,0x37,0x46,0x37,0x22,0x2c,
+ 0x0a,0x22,0x26,0x20,0x09,0x63,0x20,0x23,0x46,0x44,0x46,0x44,0x46,0x44,
+ 0x22,0x2c,0x0a,0x22,0x2a,0x20,0x09,0x63,0x20,0x23,0x35,0x41,0x35,0x41,
+ 0x35,0x41,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x09,0x63,0x20,0x23,0x43,0x32,
+ 0x43,0x32,0x43,0x32,0x22,0x2c,0x0a,0x22,0x2d,0x20,0x09,0x63,0x20,0x23,
+ 0x34,0x32,0x34,0x32,0x34,0x32,0x22,0x2c,0x0a,0x22,0x3b,0x20,0x09,0x63,
+ 0x20,0x23,0x46,0x30,0x46,0x30,0x46,0x30,0x22,0x2c,0x0a,0x22,0x3e,0x20,
+ 0x09,0x63,0x20,0x23,0x44,0x37,0x44,0x37,0x44,0x37,0x22,0x2c,0x0a,0x22,
+ 0x2c,0x20,0x09,0x63,0x20,0x23,0x43,0x44,0x43,0x44,0x43,0x44,0x22,0x2c,
+ 0x0a,0x22,0x27,0x20,0x09,0x63,0x20,0x23,0x45,0x42,0x45,0x42,0x45,0x42,
+ 0x22,0x2c,0x0a,0x22,0x29,0x20,0x09,0x63,0x20,0x23,0x43,0x46,0x43,0x46,
+ 0x43,0x46,0x22,0x2c,0x0a,0x22,0x21,0x20,0x09,0x63,0x20,0x23,0x41,0x41,
+ 0x41,0x41,0x41,0x41,0x22,0x2c,0x0a,0x22,0x7e,0x20,0x09,0x63,0x20,0x23,
+ 0x45,0x35,0x45,0x35,0x45,0x35,0x22,0x2c,0x0a,0x22,0x7b,0x20,0x09,0x63,
+ 0x20,0x23,0x36,0x38,0x36,0x38,0x36,0x38,0x22,0x2c,0x0a,0x22,0x5d,0x20,
+ 0x09,0x63,0x20,0x23,0x46,0x35,0x46,0x35,0x46,0x35,0x22,0x2c,0x0a,0x22,
+ 0x5e,0x20,0x09,0x63,0x20,0x23,0x43,0x39,0x43,0x39,0x43,0x39,0x22,0x2c,
+ 0x0a,0x22,0x2f,0x20,0x09,0x63,0x20,0x23,0x33,0x31,0x33,0x31,0x33,0x31,
+ 0x22,0x2c,0x0a,0x22,0x28,0x20,0x09,0x63,0x20,0x23,0x46,0x34,0x46,0x34,
+ 0x46,0x34,0x22,0x2c,0x0a,0x22,0x5f,0x20,0x09,0x63,0x20,0x23,0x44,0x43,
+ 0x44,0x43,0x44,0x43,0x22,0x2c,0x0a,0x22,0x3a,0x20,0x09,0x63,0x20,0x23,
+ 0x45,0x30,0x45,0x30,0x45,0x30,0x22,0x2c,0x0a,0x22,0x3c,0x20,0x09,0x63,
+ 0x20,0x23,0x45,0x33,0x45,0x33,0x45,0x33,0x22,0x2c,0x0a,0x22,0x5b,0x20,
+ 0x09,0x63,0x20,0x23,0x44,0x30,0x44,0x30,0x44,0x30,0x22,0x2c,0x0a,0x22,
+ 0x7d,0x20,0x09,0x63,0x20,0x23,0x36,0x35,0x36,0x33,0x36,0x33,0x22,0x2c,
+ 0x0a,0x22,0x7c,0x20,0x09,0x63,0x20,0x23,0x42,0x35,0x42,0x35,0x42,0x35,
+ 0x22,0x2c,0x0a,0x22,0x31,0x20,0x09,0x63,0x20,0x23,0x41,0x38,0x41,0x38,
+ 0x41,0x38,0x22,0x2c,0x0a,0x22,0x32,0x20,0x09,0x63,0x20,0x23,0x32,0x35,
+ 0x32,0x35,0x32,0x35,0x22,0x2c,0x0a,0x22,0x33,0x20,0x09,0x63,0x20,0x23,
+ 0x46,0x31,0x46,0x31,0x46,0x31,0x22,0x2c,0x0a,0x22,0x34,0x20,0x09,0x63,
+ 0x20,0x23,0x42,0x38,0x42,0x38,0x42,0x38,0x22,0x2c,0x0a,0x22,0x35,0x20,
+ 0x09,0x63,0x20,0x23,0x45,0x37,0x45,0x37,0x45,0x37,0x22,0x2c,0x0a,0x22,
+ 0x36,0x20,0x09,0x63,0x20,0x23,0x42,0x39,0x42,0x39,0x42,0x39,0x22,0x2c,
+ 0x0a,0x22,0x37,0x20,0x09,0x63,0x20,0x23,0x44,0x32,0x44,0x32,0x44,0x32,
+ 0x22,0x2c,0x0a,0x22,0x38,0x20,0x09,0x63,0x20,0x23,0x42,0x33,0x42,0x33,
+ 0x42,0x33,0x22,0x2c,0x0a,0x22,0x39,0x20,0x09,0x63,0x20,0x23,0x45,0x38,
+ 0x45,0x38,0x45,0x38,0x22,0x2c,0x0a,0x22,0x30,0x20,0x09,0x63,0x20,0x23,
+ 0x39,0x45,0x39,0x44,0x39,0x44,0x22,0x2c,0x0a,0x22,0x61,0x20,0x09,0x63,
+ 0x20,0x23,0x37,0x41,0x37,0x39,0x37,0x41,0x22,0x2c,0x0a,0x22,0x62,0x20,
+ 0x09,0x63,0x20,0x23,0x36,0x37,0x36,0x37,0x36,0x37,0x22,0x2c,0x0a,0x22,
+ 0x63,0x20,0x09,0x63,0x20,0x23,0x34,0x45,0x34,0x45,0x34,0x45,0x22,0x2c,
+ 0x0a,0x22,0x64,0x20,0x09,0x63,0x20,0x23,0x31,0x36,0x31,0x36,0x31,0x36,
+ 0x22,0x2c,0x0a,0x22,0x65,0x20,0x09,0x63,0x20,0x23,0x41,0x35,0x41,0x34,
+ 0x41,0x34,0x22,0x2c,0x0a,0x22,0x66,0x20,0x09,0x63,0x20,0x23,0x42,0x34,
+ 0x42,0x34,0x42,0x34,0x22,0x2c,0x0a,0x22,0x67,0x20,0x09,0x63,0x20,0x23,
+ 0x44,0x46,0x44,0x46,0x44,0x46,0x22,0x2c,0x0a,0x22,0x68,0x20,0x09,0x63,
+ 0x20,0x23,0x38,0x46,0x38,0x45,0x38,0x45,0x22,0x2c,0x0a,0x22,0x69,0x20,
+ 0x09,0x63,0x20,0x23,0x39,0x46,0x39,0x46,0x39,0x45,0x22,0x2c,0x0a,0x22,
+ 0x6a,0x20,0x09,0x63,0x20,0x23,0x46,0x32,0x46,0x30,0x45,0x45,0x22,0x2c,
+ 0x0a,0x22,0x6b,0x20,0x09,0x63,0x20,0x23,0x45,0x37,0x45,0x32,0x44,0x46,
+ 0x22,0x2c,0x0a,0x22,0x6c,0x20,0x09,0x63,0x20,0x23,0x44,0x31,0x43,0x42,
+ 0x43,0x36,0x22,0x2c,0x0a,0x22,0x6d,0x20,0x09,0x63,0x20,0x23,0x41,0x43,
+ 0x41,0x33,0x39,0x44,0x22,0x2c,0x0a,0x22,0x6e,0x20,0x09,0x63,0x20,0x23,
+ 0x32,0x31,0x31,0x46,0x31,0x45,0x22,0x2c,0x0a,0x22,0x6f,0x20,0x09,0x63,
+ 0x20,0x23,0x46,0x32,0x46,0x32,0x46,0x32,0x22,0x2c,0x0a,0x22,0x70,0x20,
+ 0x09,0x63,0x20,0x23,0x43,0x31,0x43,0x31,0x43,0x31,0x22,0x2c,0x0a,0x22,
+ 0x71,0x20,0x09,0x63,0x20,0x23,0x44,0x38,0x44,0x37,0x44,0x37,0x22,0x2c,
+ 0x0a,0x22,0x72,0x20,0x09,0x63,0x20,0x23,0x42,0x45,0x42,0x45,0x42,0x45,
+ 0x22,0x2c,0x0a,0x22,0x73,0x20,0x09,0x63,0x20,0x23,0x45,0x45,0x45,0x45,
+ 0x45,0x45,0x22,0x2c,0x0a,0x22,0x74,0x20,0x09,0x63,0x20,0x23,0x44,0x31,
+ 0x44,0x31,0x44,0x31,0x22,0x2c,0x0a,0x22,0x75,0x20,0x09,0x63,0x20,0x23,
+ 0x43,0x38,0x43,0x36,0x43,0x35,0x22,0x2c,0x0a,0x22,0x76,0x20,0x09,0x63,
+ 0x20,0x23,0x43,0x43,0x43,0x38,0x43,0x34,0x22,0x2c,0x0a,0x22,0x77,0x20,
+ 0x09,0x63,0x20,0x23,0x44,0x31,0x43,0x42,0x43,0x35,0x22,0x2c,0x0a,0x22,
+ 0x78,0x20,0x09,0x63,0x20,0x23,0x44,0x43,0x44,0x32,0x43,0x41,0x22,0x2c,
+ 0x0a,0x22,0x79,0x20,0x09,0x63,0x20,0x23,0x45,0x34,0x44,0x37,0x43,0x44,
+ 0x22,0x2c,0x0a,0x22,0x7a,0x20,0x09,0x63,0x20,0x23,0x32,0x45,0x32,0x42,
+ 0x32,0x39,0x22,0x2c,0x0a,0x22,0x41,0x20,0x09,0x63,0x20,0x23,0x45,0x46,
+ 0x45,0x45,0x45,0x45,0x22,0x2c,0x0a,0x22,0x42,0x20,0x09,0x63,0x20,0x23,
+ 0x45,0x32,0x44,0x45,0x44,0x43,0x22,0x2c,0x0a,0x22,0x43,0x20,0x09,0x63,
+ 0x20,0x23,0x44,0x37,0x44,0x32,0x43,0x45,0x22,0x2c,0x0a,0x22,0x44,0x20,
+ 0x09,0x63,0x20,0x23,0x44,0x36,0x43,0x45,0x43,0x38,0x22,0x2c,0x0a,0x22,
+ 0x45,0x20,0x09,0x63,0x20,0x23,0x44,0x42,0x44,0x31,0x43,0x38,0x22,0x2c,
+ 0x0a,0x22,0x46,0x20,0x09,0x63,0x20,0x23,0x45,0x34,0x44,0x36,0x43,0x43,
+ 0x22,0x2c,0x0a,0x22,0x47,0x20,0x09,0x63,0x20,0x23,0x45,0x36,0x44,0x36,
+ 0x43,0x38,0x22,0x2c,0x0a,0x22,0x48,0x20,0x09,0x63,0x20,0x23,0x32,0x45,
+ 0x32,0x41,0x32,0x37,0x22,0x2c,0x0a,0x22,0x49,0x20,0x09,0x63,0x20,0x23,
+ 0x45,0x43,0x45,0x43,0x45,0x43,0x22,0x2c,0x0a,0x22,0x4a,0x20,0x09,0x63,
+ 0x20,0x23,0x41,0x34,0x41,0x33,0x41,0x33,0x22,0x2c,0x0a,0x22,0x4b,0x20,
+ 0x09,0x63,0x20,0x23,0x43,0x44,0x43,0x44,0x43,0x43,0x22,0x2c,0x0a,0x22,
+ 0x4c,0x20,0x09,0x63,0x20,0x23,0x41,0x31,0x41,0x30,0x39,0x46,0x22,0x2c,
+ 0x0a,0x22,0x4d,0x20,0x09,0x63,0x20,0x23,0x42,0x45,0x42,0x42,0x42,0x39,
+ 0x22,0x2c,0x0a,0x22,0x4e,0x20,0x09,0x63,0x20,0x23,0x45,0x34,0x44,0x45,
+ 0x44,0x38,0x22,0x2c,0x0a,0x22,0x4f,0x20,0x09,0x63,0x20,0x23,0x42,0x41,
+ 0x42,0x33,0x41,0x44,0x22,0x2c,0x0a,0x22,0x50,0x20,0x09,0x63,0x20,0x23,
+ 0x39,0x44,0x39,0x35,0x38,0x45,0x22,0x2c,0x0a,0x22,0x51,0x20,0x09,0x63,
+ 0x20,0x23,0x42,0x36,0x41,0x43,0x41,0x32,0x22,0x2c,0x0a,0x22,0x52,0x20,
+ 0x09,0x63,0x20,0x23,0x42,0x41,0x41,0x43,0x41,0x31,0x22,0x2c,0x0a,0x22,
+ 0x53,0x20,0x09,0x63,0x20,0x23,0x45,0x33,0x44,0x30,0x43,0x30,0x22,0x2c,
+ 0x0a,0x22,0x54,0x20,0x09,0x63,0x20,0x23,0x32,0x44,0x32,0x39,0x32,0x36,
+ 0x22,0x2c,0x0a,0x22,0x55,0x20,0x09,0x63,0x20,0x23,0x39,0x33,0x39,0x32,
+ 0x39,0x31,0x22,0x2c,0x0a,0x22,0x56,0x20,0x09,0x63,0x20,0x23,0x43,0x35,
+ 0x43,0x32,0x43,0x30,0x22,0x2c,0x0a,0x22,0x57,0x20,0x09,0x63,0x20,0x23,
+ 0x39,0x35,0x39,0x31,0x38,0x45,0x22,0x2c,0x0a,0x22,0x58,0x20,0x09,0x63,
+ 0x20,0x23,0x39,0x45,0x39,0x38,0x39,0x33,0x22,0x2c,0x0a,0x22,0x59,0x20,
+ 0x09,0x63,0x20,0x23,0x42,0x38,0x41,0x46,0x41,0x37,0x22,0x2c,0x0a,0x22,
+ 0x5a,0x20,0x09,0x63,0x20,0x23,0x38,0x46,0x38,0x36,0x37,0x46,0x22,0x2c,
+ 0x0a,0x22,0x60,0x20,0x09,0x63,0x20,0x23,0x39,0x37,0x38,0x44,0x38,0x33,
+ 0x22,0x2c,0x0a,0x22,0x20,0x2e,0x09,0x63,0x20,0x23,0x43,0x46,0x42,0x45,
+ 0x41,0x46,0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x09,0x63,0x20,0x23,0x45,0x31,
+ 0x43,0x43,0x42,0x39,0x22,0x2c,0x0a,0x22,0x2b,0x2e,0x09,0x63,0x20,0x23,
+ 0x32,0x44,0x32,0x38,0x32,0x34,0x22,0x2c,0x0a,0x22,0x40,0x2e,0x09,0x63,
+ 0x20,0x23,0x46,0x33,0x46,0x33,0x46,0x33,0x22,0x2c,0x0a,0x22,0x23,0x2e,
+ 0x09,0x63,0x20,0x23,0x44,0x31,0x44,0x30,0x43,0x46,0x22,0x2c,0x0a,0x22,
+ 0x24,0x2e,0x09,0x63,0x20,0x23,0x44,0x46,0x44,0x42,0x44,0x38,0x22,0x2c,
+ 0x0a,0x22,0x25,0x2e,0x09,0x63,0x20,0x23,0x43,0x45,0x43,0x38,0x43,0x32,
+ 0x22,0x2c,0x0a,0x22,0x26,0x2e,0x09,0x63,0x20,0x23,0x43,0x35,0x42,0x45,
+ 0x42,0x37,0x22,0x2c,0x0a,0x22,0x2a,0x2e,0x09,0x63,0x20,0x23,0x44,0x33,
+ 0x43,0x38,0x42,0x45,0x22,0x2c,0x0a,0x22,0x3d,0x2e,0x09,0x63,0x20,0x23,
+ 0x43,0x33,0x42,0x36,0x41,0x43,0x22,0x2c,0x0a,0x22,0x2d,0x2e,0x09,0x63,
+ 0x20,0x23,0x44,0x31,0x43,0x31,0x42,0x34,0x22,0x2c,0x0a,0x22,0x3b,0x2e,
+ 0x09,0x63,0x20,0x23,0x44,0x34,0x43,0x32,0x42,0x33,0x22,0x2c,0x0a,0x22,
+ 0x3e,0x2e,0x09,0x63,0x20,0x23,0x44,0x32,0x42,0x44,0x41,0x42,0x22,0x2c,
+ 0x0a,0x22,0x2c,0x2e,0x09,0x63,0x20,0x23,0x44,0x46,0x43,0x35,0x42,0x30,
+ 0x22,0x2c,0x0a,0x22,0x27,0x2e,0x09,0x63,0x20,0x23,0x32,0x43,0x32,0x37,
+ 0x32,0x33,0x22,0x2c,0x0a,0x22,0x29,0x2e,0x09,0x63,0x20,0x23,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x22,0x2c,0x0a,0x22,0x21,0x2e,0x09,0x63,0x20,0x23,
+ 0x36,0x45,0x36,0x45,0x36,0x45,0x22,0x2c,0x0a,0x22,0x7e,0x2e,0x09,0x63,
+ 0x20,0x23,0x45,0x46,0x45,0x44,0x45,0x43,0x22,0x2c,0x0a,0x22,0x7b,0x2e,
+ 0x09,0x63,0x20,0x23,0x43,0x35,0x43,0x31,0x42,0x45,0x22,0x2c,0x0a,0x22,
+ 0x5d,0x2e,0x09,0x63,0x20,0x23,0x44,0x38,0x44,0x31,0x43,0x43,0x22,0x2c,
+ 0x0a,0x22,0x5e,0x2e,0x09,0x63,0x20,0x23,0x43,0x34,0x42,0x42,0x42,0x34,
+ 0x22,0x2c,0x0a,0x22,0x2f,0x2e,0x09,0x63,0x20,0x23,0x42,0x41,0x42,0x30,
+ 0x41,0x37,0x22,0x2c,0x0a,0x22,0x28,0x2e,0x09,0x63,0x20,0x23,0x43,0x41,
+ 0x42,0x43,0x42,0x31,0x22,0x2c,0x0a,0x22,0x5f,0x2e,0x09,0x63,0x20,0x23,
+ 0x42,0x37,0x41,0x38,0x39,0x43,0x22,0x2c,0x0a,0x22,0x3a,0x2e,0x09,0x63,
+ 0x20,0x23,0x43,0x38,0x42,0x36,0x41,0x37,0x22,0x2c,0x0a,0x22,0x3c,0x2e,
+ 0x09,0x63,0x20,0x23,0x43,0x43,0x42,0x38,0x41,0x35,0x22,0x2c,0x0a,0x22,
+ 0x5b,0x2e,0x09,0x63,0x20,0x23,0x43,0x38,0x42,0x31,0x39,0x44,0x22,0x2c,
+ 0x0a,0x22,0x7d,0x2e,0x09,0x63,0x20,0x23,0x44,0x42,0x42,0x46,0x41,0x37,
+ 0x22,0x2c,0x0a,0x22,0x7c,0x2e,0x09,0x63,0x20,0x23,0x32,0x38,0x32,0x33,
+ 0x31,0x45,0x22,0x2c,0x0a,0x22,0x31,0x2e,0x09,0x63,0x20,0x23,0x33,0x33,
+ 0x33,0x33,0x33,0x33,0x22,0x2c,0x0a,0x22,0x32,0x2e,0x09,0x63,0x20,0x23,
+ 0x36,0x45,0x36,0x45,0x36,0x46,0x22,0x2c,0x0a,0x22,0x33,0x2e,0x09,0x63,
+ 0x20,0x23,0x38,0x30,0x38,0x30,0x38,0x30,0x22,0x2c,0x0a,0x22,0x34,0x2e,
+ 0x09,0x63,0x20,0x23,0x36,0x44,0x36,0x43,0x36,0x42,0x22,0x2c,0x0a,0x22,
+ 0x35,0x2e,0x09,0x63,0x20,0x23,0x45,0x39,0x45,0x34,0x45,0x30,0x22,0x2c,
+ 0x0a,0x22,0x36,0x2e,0x09,0x63,0x20,0x23,0x39,0x39,0x39,0x33,0x38,0x46,
+ 0x22,0x2c,0x0a,0x22,0x37,0x2e,0x09,0x63,0x20,0x23,0x39,0x42,0x39,0x34,
+ 0x38,0x45,0x22,0x2c,0x0a,0x22,0x38,0x2e,0x09,0x63,0x20,0x23,0x41,0x33,
+ 0x39,0x39,0x39,0x31,0x22,0x2c,0x0a,0x22,0x39,0x2e,0x09,0x63,0x20,0x23,
+ 0x39,0x45,0x39,0x32,0x38,0x39,0x22,0x2c,0x0a,0x22,0x30,0x2e,0x09,0x63,
+ 0x20,0x23,0x41,0x45,0x41,0x30,0x39,0x34,0x22,0x2c,0x0a,0x22,0x61,0x2e,
+ 0x09,0x63,0x20,0x23,0x42,0x41,0x41,0x39,0x39,0x41,0x22,0x2c,0x0a,0x22,
+ 0x62,0x2e,0x09,0x63,0x20,0x23,0x39,0x41,0x38,0x39,0x37,0x42,0x22,0x2c,
+ 0x0a,0x22,0x63,0x2e,0x09,0x63,0x20,0x23,0x39,0x44,0x38,0x41,0x37,0x41,
+ 0x22,0x2c,0x0a,0x22,0x64,0x2e,0x09,0x63,0x20,0x23,0x41,0x43,0x39,0x35,
+ 0x38,0x32,0x22,0x2c,0x0a,0x22,0x65,0x2e,0x09,0x63,0x20,0x23,0x44,0x39,
+ 0x42,0x39,0x39,0x45,0x22,0x2c,0x0a,0x22,0x66,0x2e,0x09,0x63,0x20,0x23,
+ 0x33,0x38,0x33,0x33,0x32,0x45,0x22,0x2c,0x0a,0x22,0x67,0x2e,0x09,0x63,
+ 0x20,0x23,0x39,0x39,0x39,0x39,0x39,0x39,0x22,0x2c,0x0a,0x22,0x68,0x2e,
+ 0x09,0x63,0x20,0x23,0x35,0x30,0x35,0x30,0x35,0x30,0x22,0x2c,0x0a,0x22,
+ 0x69,0x2e,0x09,0x63,0x20,0x23,0x32,0x44,0x32,0x44,0x32,0x44,0x22,0x2c,
+ 0x0a,0x22,0x6a,0x2e,0x09,0x63,0x20,0x23,0x41,0x34,0x41,0x34,0x41,0x34,
+ 0x22,0x2c,0x0a,0x22,0x6b,0x2e,0x09,0x63,0x20,0x23,0x35,0x45,0x35,0x45,
+ 0x35,0x46,0x22,0x2c,0x0a,0x22,0x6c,0x2e,0x09,0x63,0x20,0x23,0x34,0x42,
+ 0x34,0x42,0x34,0x42,0x22,0x2c,0x0a,0x22,0x6d,0x2e,0x09,0x63,0x20,0x23,
+ 0x36,0x43,0x36,0x41,0x36,0x37,0x22,0x2c,0x0a,0x22,0x6e,0x2e,0x09,0x63,
+ 0x20,0x23,0x46,0x32,0x45,0x41,0x45,0x32,0x22,0x2c,0x0a,0x22,0x6f,0x2e,
+ 0x09,0x63,0x20,0x23,0x46,0x36,0x45,0x41,0x45,0x31,0x22,0x2c,0x0a,0x22,
+ 0x70,0x2e,0x09,0x63,0x20,0x23,0x46,0x34,0x45,0x36,0x44,0x42,0x22,0x2c,
+ 0x0a,0x22,0x71,0x2e,0x09,0x63,0x20,0x23,0x46,0x32,0x45,0x32,0x44,0x33,
+ 0x22,0x2c,0x0a,0x22,0x72,0x2e,0x09,0x63,0x20,0x23,0x46,0x31,0x44,0x45,
+ 0x43,0x44,0x22,0x2c,0x0a,0x22,0x73,0x2e,0x09,0x63,0x20,0x23,0x45,0x46,
+ 0x44,0x38,0x43,0x35,0x22,0x2c,0x0a,0x22,0x74,0x2e,0x09,0x63,0x20,0x23,
+ 0x45,0x44,0x44,0x34,0x42,0x45,0x22,0x2c,0x0a,0x22,0x75,0x2e,0x09,0x63,
+ 0x20,0x23,0x45,0x42,0x43,0x46,0x42,0x37,0x22,0x2c,0x0a,0x22,0x76,0x2e,
+ 0x09,0x63,0x20,0x23,0x45,0x41,0x43,0x41,0x42,0x30,0x22,0x2c,0x0a,0x22,
+ 0x77,0x2e,0x09,0x63,0x20,0x23,0x45,0x38,0x43,0x35,0x41,0x38,0x22,0x2c,
+ 0x0a,0x22,0x78,0x2e,0x09,0x63,0x20,0x23,0x44,0x37,0x42,0x34,0x39,0x36,
+ 0x22,0x2c,0x0a,0x22,0x79,0x2e,0x09,0x63,0x20,0x23,0x32,0x44,0x32,0x36,
+ 0x32,0x31,0x22,0x2c,0x0a,0x22,0x7a,0x2e,0x09,0x63,0x20,0x23,0x38,0x31,
+ 0x38,0x31,0x38,0x31,0x22,0x2c,0x0a,0x22,0x41,0x2e,0x09,0x63,0x20,0x23,
+ 0x37,0x41,0x37,0x41,0x37,0x41,0x22,0x2c,0x0a,0x22,0x42,0x2e,0x09,0x63,
+ 0x20,0x23,0x37,0x30,0x37,0x30,0x37,0x30,0x22,0x2c,0x0a,0x22,0x43,0x2e,
+ 0x09,0x63,0x20,0x23,0x34,0x44,0x34,0x44,0x34,0x44,0x22,0x2c,0x0a,0x22,
+ 0x44,0x2e,0x09,0x63,0x20,0x23,0x34,0x34,0x34,0x34,0x34,0x34,0x22,0x2c,
+ 0x0a,0x22,0x45,0x2e,0x09,0x63,0x20,0x23,0x34,0x41,0x34,0x41,0x34,0x41,
+ 0x22,0x2c,0x0a,0x22,0x46,0x2e,0x09,0x63,0x20,0x23,0x35,0x37,0x35,0x35,
+ 0x35,0x32,0x22,0x2c,0x0a,0x22,0x47,0x2e,0x09,0x63,0x20,0x23,0x42,0x32,
+ 0x41,0x41,0x41,0x33,0x22,0x2c,0x0a,0x22,0x48,0x2e,0x09,0x63,0x20,0x23,
+ 0x42,0x31,0x41,0x36,0x39,0x45,0x22,0x2c,0x0a,0x22,0x49,0x2e,0x09,0x63,
+ 0x20,0x23,0x42,0x30,0x41,0x33,0x39,0x39,0x22,0x2c,0x0a,0x22,0x4a,0x2e,
+ 0x09,0x63,0x20,0x23,0x41,0x44,0x39,0x44,0x39,0x30,0x22,0x2c,0x0a,0x22,
+ 0x4b,0x2e,0x09,0x63,0x20,0x23,0x41,0x43,0x39,0x39,0x38,0x41,0x22,0x2c,
+ 0x0a,0x22,0x4c,0x2e,0x09,0x63,0x20,0x23,0x41,0x41,0x39,0x36,0x38,0x35,
+ 0x22,0x2c,0x0a,0x22,0x4d,0x2e,0x09,0x63,0x20,0x23,0x41,0x39,0x39,0x32,
+ 0x37,0x46,0x22,0x2c,0x0a,0x22,0x4e,0x2e,0x09,0x63,0x20,0x23,0x41,0x38,
+ 0x38,0x46,0x37,0x41,0x22,0x2c,0x0a,0x22,0x4f,0x2e,0x09,0x63,0x20,0x23,
+ 0x41,0x36,0x38,0x42,0x37,0x33,0x22,0x2c,0x0a,0x22,0x50,0x2e,0x09,0x63,
+ 0x20,0x23,0x41,0x33,0x38,0x35,0x36,0x43,0x22,0x2c,0x0a,0x22,0x51,0x2e,
+ 0x09,0x63,0x20,0x23,0x32,0x35,0x32,0x30,0x31,0x42,0x22,0x2c,0x0a,0x22,
+ 0x52,0x2e,0x09,0x63,0x20,0x23,0x35,0x39,0x35,0x39,0x35,0x39,0x22,0x2c,
+ 0x0a,0x22,0x53,0x2e,0x09,0x63,0x20,0x23,0x33,0x41,0x33,0x41,0x33,0x41,
+ 0x22,0x2c,0x0a,0x22,0x54,0x2e,0x09,0x63,0x20,0x23,0x34,0x33,0x34,0x33,
+ 0x34,0x33,0x22,0x2c,0x0a,0x22,0x55,0x2e,0x09,0x63,0x20,0x23,0x33,0x46,
+ 0x33,0x46,0x33,0x46,0x22,0x2c,0x0a,0x22,0x56,0x2e,0x09,0x63,0x20,0x23,
+ 0x32,0x39,0x32,0x39,0x32,0x39,0x22,0x2c,0x0a,0x22,0x57,0x2e,0x09,0x63,
+ 0x20,0x23,0x30,0x34,0x30,0x34,0x30,0x34,0x22,0x2c,0x0a,0x22,0x58,0x2e,
+ 0x09,0x63,0x20,0x23,0x32,0x42,0x32,0x42,0x32,0x42,0x22,0x2c,0x0a,0x22,
+ 0x59,0x2e,0x09,0x63,0x20,0x23,0x35,0x34,0x35,0x34,0x35,0x34,0x22,0x2c,
+ 0x0a,0x22,0x5a,0x2e,0x09,0x63,0x20,0x23,0x36,0x44,0x36,0x44,0x36,0x44,
+ 0x22,0x2c,0x0a,0x22,0x60,0x2e,0x09,0x63,0x20,0x23,0x33,0x44,0x33,0x44,
+ 0x33,0x44,0x22,0x2c,0x0a,0x22,0x20,0x2b,0x09,0x63,0x20,0x23,0x32,0x31,
+ 0x32,0x31,0x32,0x31,0x22,0x2c,0x0a,0x22,0x2e,0x2b,0x09,0x63,0x20,0x23,
+ 0x38,0x39,0x38,0x39,0x38,0x39,0x22,0x2c,0x0a,0x22,0x2b,0x2b,0x09,0x63,
+ 0x20,0x23,0x32,0x37,0x32,0x37,0x32,0x37,0x22,0x2c,0x0a,0x22,0x40,0x2b,
+ 0x09,0x63,0x20,0x23,0x30,0x31,0x30,0x31,0x30,0x31,0x22,0x2c,0x0a,0x22,
+ 0x23,0x2b,0x09,0x63,0x20,0x23,0x37,0x38,0x37,0x38,0x37,0x38,0x22,0x2c,
+ 0x0a,0x22,0x24,0x2b,0x09,0x63,0x20,0x23,0x36,0x41,0x36,0x41,0x36,0x41,
+ 0x22,0x2c,0x0a,0x22,0x25,0x2b,0x09,0x63,0x20,0x23,0x36,0x30,0x36,0x30,
+ 0x36,0x30,0x22,0x2c,0x0a,0x22,0x26,0x2b,0x09,0x63,0x20,0x23,0x30,0x42,
+ 0x30,0x42,0x30,0x42,0x22,0x2c,0x0a,0x22,0x2a,0x2b,0x09,0x63,0x20,0x23,
+ 0x35,0x35,0x35,0x35,0x35,0x35,0x22,0x2c,0x0a,0x22,0x3d,0x2b,0x09,0x63,
+ 0x20,0x23,0x35,0x32,0x35,0x32,0x35,0x32,0x22,0x2c,0x0a,0x22,0x2d,0x2b,
+ 0x09,0x63,0x20,0x23,0x38,0x36,0x38,0x36,0x38,0x36,0x22,0x2c,0x0a,0x22,
+ 0x3b,0x2b,0x09,0x63,0x20,0x23,0x35,0x31,0x35,0x31,0x35,0x31,0x22,0x2c,
+ 0x0a,0x22,0x3e,0x2b,0x09,0x63,0x20,0x23,0x30,0x43,0x30,0x43,0x30,0x43,
+ 0x22,0x2c,0x0a,0x22,0x2c,0x2b,0x09,0x63,0x20,0x23,0x37,0x37,0x37,0x37,
+ 0x37,0x37,0x22,0x2c,0x0a,0x22,0x27,0x2b,0x09,0x63,0x20,0x23,0x37,0x43,
+ 0x37,0x43,0x37,0x43,0x22,0x2c,0x0a,0x22,0x29,0x2b,0x09,0x63,0x20,0x23,
+ 0x33,0x34,0x33,0x34,0x33,0x34,0x22,0x2c,0x0a,0x22,0x21,0x2b,0x09,0x63,
+ 0x20,0x23,0x31,0x37,0x31,0x37,0x31,0x37,0x22,0x2c,0x0a,0x22,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x2e,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,
+ 0x2b,0x20,0x40,0x20,0x23,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x24,0x20,0x25,0x20,0x26,0x20,0x26,0x20,
+ 0x26,0x20,0x26,0x20,0x26,0x20,0x26,0x20,0x2a,0x20,0x3d,0x20,0x2d,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x2c,
+ 0x0a,0x22,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0x20,
+ 0x3b,0x20,0x3e,0x20,0x2c,0x20,0x27,0x20,0x29,0x20,0x21,0x20,0x7e,0x20,
+ 0x7b,0x20,0x5d,0x20,0x5e,0x20,0x2f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x24,0x20,0x28,0x20,0x5f,0x20,0x27,0x20,0x3a,0x20,
+ 0x3c,0x20,0x5b,0x20,0x3b,0x20,0x7d,0x20,0x7c,0x20,0x5b,0x20,0x31,0x20,
+ 0x32,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x2c,0x0a,0x22,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0x20,0x33,0x20,
+ 0x34,0x20,0x35,0x20,0x36,0x20,0x37,0x20,0x38,0x20,0x39,0x20,0x30,0x20,
+ 0x61,0x20,0x62,0x20,0x63,0x20,0x64,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x24,0x20,0x27,0x20,0x65,0x20,0x66,0x20,0x67,0x20,0x5e,0x20,
+ 0x68,0x20,0x69,0x20,0x6a,0x20,0x6b,0x20,0x6c,0x20,0x6d,0x20,0x6e,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x2c,0x0a,0x22,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0x20,0x6f,0x20,0x70,0x20,
+ 0x71,0x20,0x72,0x20,0x73,0x20,0x74,0x20,0x75,0x20,0x76,0x20,0x77,0x20,
+ 0x78,0x20,0x79,0x20,0x7a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x24,0x20,0x28,0x20,0x37,0x20,0x3c,0x20,0x5b,0x20,0x41,0x20,0x42,0x20,
+ 0x43,0x20,0x44,0x20,0x45,0x20,0x46,0x20,0x47,0x20,0x48,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x24,0x20,0x49,0x20,0x4a,0x20,0x4b,0x20,
+ 0x4c,0x20,0x4d,0x20,0x4e,0x20,0x4f,0x20,0x50,0x20,0x51,0x20,0x52,0x20,
+ 0x53,0x20,0x54,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x2c,
+ 0x0a,0x22,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0x20,
+ 0x73,0x20,0x30,0x20,0x55,0x20,0x56,0x20,0x57,0x20,0x58,0x20,0x59,0x20,
+ 0x5a,0x20,0x60,0x20,0x20,0x2e,0x2e,0x2e,0x2b,0x2e,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x24,0x20,0x40,0x2e,0x23,0x2e,0x24,0x2e,0x25,0x2e,
+ 0x26,0x2e,0x2a,0x2e,0x3d,0x2e,0x2d,0x2e,0x3b,0x2e,0x3e,0x2e,0x2c,0x2e,
+ 0x27,0x2e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x2c,0x0a,0x22,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x29,0x2e,0x21,0x2e,0x7e,0x2e,
+ 0x7b,0x2e,0x5d,0x2e,0x5e,0x2e,0x2f,0x2e,0x28,0x2e,0x5f,0x2e,0x3a,0x2e,
+ 0x3c,0x2e,0x5b,0x2e,0x7d,0x2e,0x7c,0x2e,0x29,0x2e,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x20,0x31,0x2e,0x32,0x2e,
+ 0x33,0x2e,0x34,0x2e,0x35,0x2e,0x36,0x2e,0x37,0x2e,0x38,0x2e,0x39,0x2e,
+ 0x30,0x2e,0x61,0x2e,0x62,0x2e,0x63,0x2e,0x64,0x2e,0x65,0x2e,0x66,0x2e,
+ 0x67,0x2e,0x68,0x2e,0x69,0x2e,0x20,0x20,0x22,0x2c,0x0a,0x22,0x20,0x20,
+ 0x29,0x2e,0x6a,0x2e,0x6b,0x2e,0x6c,0x2e,0x6d,0x2e,0x6e,0x2e,0x6f,0x2e,
+ 0x70,0x2e,0x71,0x2e,0x72,0x2e,0x73,0x2e,0x74,0x2e,0x75,0x2e,0x76,0x2e,
+ 0x77,0x2e,0x78,0x2e,0x79,0x2e,0x23,0x20,0x7a,0x2e,0x41,0x2e,0x20,0x20,
+ 0x22,0x2c,0x0a,0x22,0x20,0x20,0x42,0x2e,0x43,0x2e,0x44,0x2e,0x45,0x2e,
+ 0x46,0x2e,0x47,0x2e,0x48,0x2e,0x49,0x2e,0x30,0x2e,0x4a,0x2e,0x4b,0x2e,
+ 0x4c,0x2e,0x4d,0x2e,0x4e,0x2e,0x4f,0x2e,0x50,0x2e,0x51,0x2e,0x2d,0x20,
+ 0x52,0x2e,0x24,0x20,0x53,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x20,0x41,0x2e,
+ 0x54,0x2e,0x55,0x2e,0x56,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,
+ 0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,
+ 0x29,0x2e,0x57,0x2e,0x58,0x2e,0x59,0x2e,0x5a,0x2e,0x60,0x2e,0x22,0x2c,
+ 0x0a,0x22,0x20,0x20,0x20,0x2b,0x2e,0x2b,0x2b,0x2b,0x40,0x2b,0x29,0x2e,
+ 0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,
+ 0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,0x57,0x2e,0x2e,0x20,
+ 0x23,0x2b,0x20,0x20,0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x20,0x24,0x2b,
+ 0x25,0x2b,0x2e,0x20,0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,
+ 0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,0x29,0x2e,
+ 0x26,0x2b,0x2a,0x2b,0x7b,0x20,0x3d,0x2b,0x20,0x20,0x22,0x2c,0x0a,0x22,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x58,0x2e,0x44,0x2e,0x2d,0x2b,0x2d,0x2b,
+ 0x3b,0x2b,0x3e,0x2b,0x3e,0x2b,0x3e,0x2b,0x3e,0x2b,0x3e,0x2b,0x3e,0x2b,
+ 0x3e,0x2b,0x2c,0x2b,0x2d,0x2b,0x27,0x2b,0x29,0x2b,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x29,0x2e,0x29,0x2e,0x44,0x2e,0x41,0x2e,0x41,0x2e,0x41,0x2e,
+ 0x41,0x2e,0x41,0x2e,0x41,0x2e,0x41,0x2e,0x21,0x2b,0x29,0x2e,0x29,0x2e,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x2c,0x0a,0x22,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x22,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_editlower_xpm_len = 2428;
+static const unsigned char small_editlower_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x38,0x35,0x20,0x31,0x22,0x2c,0x0a,0x22,0x20,0x20,0x63,0x20,0x23,
+ 0x64,0x65,0x64,0x65,0x35,0x61,0x35,0x61,0x33,0x39,0x33,0x39,0x22,0x2c,
+ 0x0a,0x22,0x2e,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x35,0x61,0x35,
+ 0x61,0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,0x22,0x58,0x20,0x63,0x20,0x23,
+ 0x66,0x66,0x66,0x66,0x36,0x33,0x36,0x33,0x33,0x39,0x33,0x39,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,0x36,0x62,0x36,
+ 0x62,0x35,0x32,0x35,0x32,0x22,0x2c,0x0a,0x22,0x4f,0x20,0x63,0x20,0x23,
+ 0x64,0x36,0x64,0x36,0x37,0x33,0x37,0x33,0x35,0x61,0x35,0x61,0x22,0x2c,
+ 0x0a,0x22,0x2b,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x37,0x33,0x37,
+ 0x33,0x36,0x33,0x36,0x33,0x22,0x2c,0x0a,0x22,0x40,0x20,0x63,0x20,0x23,
+ 0x63,0x65,0x63,0x65,0x37,0x62,0x37,0x62,0x36,0x62,0x36,0x62,0x22,0x2c,
+ 0x0a,0x22,0x23,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x37,0x62,0x37,
+ 0x62,0x37,0x33,0x37,0x33,0x22,0x2c,0x0a,0x22,0x24,0x20,0x63,0x20,0x23,
+ 0x64,0x36,0x64,0x36,0x37,0x33,0x37,0x33,0x36,0x33,0x36,0x33,0x22,0x2c,
+ 0x0a,0x22,0x25,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x36,0x33,0x36,
+ 0x33,0x34,0x32,0x34,0x32,0x22,0x2c,0x0a,0x22,0x26,0x20,0x63,0x20,0x23,
+ 0x65,0x37,0x65,0x37,0x36,0x33,0x36,0x33,0x34,0x61,0x34,0x61,0x22,0x2c,
+ 0x0a,0x22,0x2a,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x36,0x33,0x36,
+ 0x33,0x34,0x32,0x34,0x32,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x63,0x20,0x23,
+ 0x65,0x66,0x65,0x66,0x37,0x62,0x37,0x62,0x35,0x61,0x35,0x61,0x22,0x2c,
+ 0x0a,0x22,0x2d,0x20,0x63,0x20,0x23,0x66,0x37,0x66,0x37,0x36,0x62,0x36,
+ 0x62,0x34,0x61,0x34,0x61,0x22,0x2c,0x0a,0x22,0x3b,0x20,0x63,0x20,0x23,
+ 0x66,0x66,0x66,0x66,0x36,0x33,0x36,0x33,0x34,0x32,0x34,0x32,0x22,0x2c,
+ 0x0a,0x22,0x3a,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x36,0x62,0x36,
+ 0x62,0x34,0x32,0x34,0x32,0x22,0x2c,0x0a,0x22,0x3e,0x20,0x63,0x20,0x23,
+ 0x66,0x66,0x66,0x66,0x36,0x62,0x36,0x62,0x34,0x61,0x34,0x61,0x22,0x2c,
+ 0x0a,0x22,0x2c,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x37,0x33,0x37,
+ 0x33,0x34,0x61,0x34,0x61,0x22,0x2c,0x0a,0x22,0x3c,0x20,0x63,0x20,0x23,
+ 0x66,0x66,0x66,0x66,0x37,0x33,0x37,0x33,0x35,0x32,0x35,0x32,0x22,0x2c,
+ 0x0a,0x22,0x31,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x37,0x62,0x37,
+ 0x62,0x35,0x61,0x35,0x61,0x22,0x2c,0x0a,0x22,0x32,0x20,0x63,0x20,0x23,
+ 0x39,0x34,0x39,0x34,0x38,0x34,0x38,0x34,0x37,0x62,0x37,0x62,0x22,0x2c,
+ 0x0a,0x22,0x33,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x38,0x34,0x38,
+ 0x34,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x34,0x20,0x63,0x20,0x23,
+ 0x63,0x65,0x63,0x65,0x38,0x34,0x38,0x34,0x37,0x33,0x37,0x33,0x22,0x2c,
+ 0x0a,0x22,0x35,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x38,0x63,0x38,
+ 0x63,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x36,0x20,0x63,0x20,0x23,
+ 0x64,0x36,0x64,0x36,0x38,0x34,0x38,0x34,0x37,0x33,0x37,0x33,0x22,0x2c,
+ 0x0a,0x22,0x37,0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,0x38,0x63,0x38,
+ 0x63,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x38,0x20,0x63,0x20,0x23,
+ 0x65,0x37,0x65,0x37,0x38,0x34,0x38,0x34,0x36,0x62,0x36,0x62,0x22,0x2c,
+ 0x0a,0x22,0x39,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x38,0x34,0x38,
+ 0x34,0x36,0x33,0x36,0x33,0x22,0x2c,0x0a,0x22,0x30,0x20,0x63,0x20,0x23,
+ 0x65,0x66,0x65,0x66,0x38,0x63,0x38,0x63,0x37,0x33,0x37,0x33,0x22,0x2c,
+ 0x0a,0x22,0x71,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x39,0x34,0x39,
+ 0x34,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x77,0x20,0x63,0x20,0x23,
+ 0x66,0x66,0x66,0x66,0x38,0x34,0x38,0x34,0x36,0x33,0x36,0x33,0x22,0x2c,
+ 0x0a,0x22,0x65,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x38,0x63,0x38,
+ 0x63,0x37,0x33,0x37,0x33,0x22,0x2c,0x0a,0x22,0x72,0x20,0x63,0x20,0x23,
+ 0x66,0x66,0x66,0x66,0x39,0x34,0x39,0x34,0x37,0x62,0x37,0x62,0x22,0x2c,
+ 0x0a,0x22,0x74,0x20,0x63,0x20,0x23,0x39,0x34,0x39,0x34,0x38,0x63,0x38,
+ 0x63,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,0x79,0x20,0x63,0x20,0x23,
+ 0x39,0x63,0x39,0x63,0x38,0x63,0x38,0x63,0x38,0x63,0x38,0x63,0x22,0x2c,
+ 0x0a,0x22,0x75,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,0x39,0x34,0x39,
+ 0x34,0x39,0x34,0x39,0x34,0x22,0x2c,0x0a,0x22,0x69,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x36,0x31,0x22,0x2c,0x0a,0x22,0x70,0x20,0x63,0x20,0x23,
+ 0x62,0x35,0x62,0x35,0x39,0x34,0x39,0x34,0x39,0x34,0x39,0x34,0x22,0x2c,
+ 0x0a,0x22,0x61,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x61,0x35,0x61,
+ 0x35,0x39,0x63,0x39,0x63,0x22,0x2c,0x0a,0x22,0x73,0x20,0x63,0x20,0x23,
+ 0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x22,0x2c,
+ 0x0a,0x22,0x64,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x61,0x35,0x61,
+ 0x35,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x66,0x20,0x63,0x20,0x23,
+ 0x62,0x35,0x62,0x35,0x61,0x64,0x61,0x64,0x61,0x64,0x61,0x64,0x22,0x2c,
+ 0x0a,0x22,0x67,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x61,0x64,0x61,
+ 0x64,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x68,0x20,0x63,0x20,0x23,
+ 0x62,0x64,0x62,0x64,0x62,0x35,0x62,0x35,0x62,0x35,0x62,0x35,0x22,0x2c,
+ 0x0a,0x22,0x6a,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x62,0x64,0x62,
+ 0x64,0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,0x6b,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x37,0x34,0x22,0x2c,0x0a,0x22,0x6c,0x20,0x63,0x20,0x23,
+ 0x63,0x65,0x63,0x65,0x38,0x63,0x38,0x63,0x38,0x34,0x38,0x34,0x22,0x2c,
+ 0x0a,0x22,0x7a,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x39,0x34,0x39,
+ 0x34,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,0x78,0x20,0x63,0x20,0x23,
+ 0x63,0x65,0x63,0x65,0x39,0x34,0x39,0x34,0x38,0x63,0x38,0x63,0x22,0x2c,
+ 0x0a,0x22,0x63,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x39,0x63,0x39,
+ 0x63,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,0x76,0x20,0x63,0x20,0x23,
+ 0x63,0x36,0x63,0x36,0x39,0x63,0x39,0x63,0x39,0x34,0x39,0x34,0x22,0x2c,
+ 0x0a,0x22,0x62,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x39,0x63,0x39,
+ 0x63,0x39,0x63,0x39,0x63,0x22,0x2c,0x0a,0x22,0x6e,0x20,0x63,0x20,0x23,
+ 0x64,0x36,0x64,0x36,0x39,0x63,0x39,0x63,0x38,0x63,0x38,0x63,0x22,0x2c,
+ 0x0a,0x22,0x6d,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x61,0x35,0x61,
+ 0x35,0x39,0x63,0x39,0x63,0x22,0x2c,0x0a,0x22,0x4d,0x20,0x63,0x20,0x23,
+ 0x63,0x36,0x63,0x36,0x61,0x64,0x61,0x64,0x61,0x35,0x61,0x35,0x22,0x2c,
+ 0x0a,0x22,0x4e,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x62,0x35,0x62,
+ 0x35,0x61,0x64,0x61,0x64,0x22,0x2c,0x0a,0x22,0x42,0x20,0x63,0x20,0x23,
+ 0x63,0x36,0x63,0x36,0x62,0x35,0x62,0x35,0x62,0x35,0x62,0x35,0x22,0x2c,
+ 0x0a,0x22,0x56,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x62,0x64,0x62,
+ 0x64,0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x43,0x20,0x63,0x20,0x23,
+ 0x65,0x66,0x65,0x66,0x39,0x63,0x39,0x63,0x38,0x34,0x38,0x34,0x22,0x2c,
+ 0x0a,0x22,0x5a,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x39,0x63,0x39,
+ 0x63,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,0x41,0x20,0x63,0x20,0x23,
+ 0x65,0x66,0x65,0x66,0x61,0x35,0x61,0x35,0x39,0x34,0x39,0x34,0x22,0x2c,
+ 0x0a,0x22,0x53,0x20,0x63,0x20,0x23,0x63,0x30,0x63,0x30,0x63,0x30,0x63,
+ 0x30,0x63,0x30,0x63,0x30,0x22,0x2c,0x0a,0x22,0x44,0x20,0x63,0x20,0x23,
+ 0x63,0x36,0x63,0x36,0x63,0x36,0x63,0x36,0x63,0x36,0x63,0x36,0x22,0x2c,
+ 0x0a,0x22,0x46,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x63,0x36,0x63,
+ 0x36,0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x47,0x20,0x63,0x20,0x23,
+ 0x63,0x65,0x63,0x65,0x63,0x65,0x63,0x65,0x63,0x36,0x63,0x36,0x22,0x2c,
+ 0x0a,0x22,0x48,0x20,0x63,0x20,0x23,0x64,0x36,0x64,0x36,0x63,0x65,0x63,
+ 0x65,0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x4a,0x20,0x63,0x20,0x23,
+ 0x64,0x36,0x64,0x36,0x64,0x36,0x64,0x36,0x63,0x65,0x63,0x65,0x22,0x2c,
+ 0x0a,0x22,0x4b,0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,0x64,0x36,0x64,
+ 0x36,0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,0x22,0x4c,0x20,0x63,0x20,0x23,
+ 0x64,0x65,0x64,0x65,0x64,0x65,0x64,0x65,0x64,0x36,0x64,0x36,0x22,0x2c,
+ 0x0a,0x22,0x50,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x64,0x65,0x64,
+ 0x65,0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,0x22,0x49,0x20,0x63,0x20,0x23,
+ 0x65,0x37,0x65,0x37,0x64,0x65,0x64,0x65,0x64,0x65,0x64,0x65,0x22,0x2c,
+ 0x0a,0x22,0x55,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x65,0x37,0x65,
+ 0x37,0x64,0x65,0x64,0x65,0x22,0x2c,0x0a,0x22,0x59,0x20,0x63,0x20,0x23,
+ 0x66,0x66,0x66,0x66,0x65,0x66,0x65,0x66,0x64,0x65,0x64,0x65,0x22,0x2c,
+ 0x0a,0x22,0x54,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x65,0x37,0x65,
+ 0x37,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,0x52,0x20,0x63,0x20,0x23,
+ 0x65,0x66,0x65,0x66,0x65,0x37,0x65,0x37,0x65,0x37,0x65,0x37,0x22,0x2c,
+ 0x0a,0x22,0x45,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x65,0x66,0x65,
+ 0x66,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,0x57,0x20,0x63,0x20,0x23,
+ 0x66,0x37,0x66,0x37,0x65,0x66,0x65,0x66,0x65,0x37,0x65,0x37,0x22,0x2c,
+ 0x0a,0x22,0x51,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x65,0x66,0x65,
+ 0x66,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,0x21,0x20,0x63,0x20,0x23,
+ 0x66,0x37,0x66,0x37,0x66,0x37,0x66,0x37,0x65,0x66,0x65,0x66,0x22,0x2c,
+ 0x0a,0x22,0x7e,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x66,0x37,0x66,
+ 0x37,0x65,0x66,0x65,0x66,0x22,0x2c,0x0a,0x22,0x5e,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x39,0x37,0x22,0x2c,0x0a,0x22,0x2f,0x20,0x63,0x20,0x23,
+ 0x66,0x66,0x66,0x66,0x66,0x37,0x66,0x37,0x66,0x37,0x66,0x37,0x22,0x2c,
+ 0x0a,0x22,0x28,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x66,0x66,0x66,
+ 0x66,0x66,0x37,0x66,0x37,0x22,0x2c,0x0a,0x22,0x29,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x31,0x30,0x30,0x22,0x2c,0x0a,0x22,0x5f,0x20,0x63,0x20,
+ 0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x2f,0x2a,0x20,0x70,0x69,0x78,0x65,
+ 0x6c,0x73,0x20,0x2a,0x2f,0x0a,0x22,0x2b,0x26,0x6f,0x4f,0x2b,0x24,0x40,
+ 0x23,0x33,0x34,0x35,0x7a,0x70,0x7a,0x76,0x6b,0x5f,0x5f,0x5f,0x5f,0x5f,
+ 0x5f,0x22,0x2c,0x0a,0x22,0x3d,0x2c,0x3c,0x3e,0x3e,0x3e,0x2c,0x3e,0x3a,
+ 0x3e,0x3e,0x3a,0x3a,0x3e,0x20,0x69,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x22,
+ 0x2c,0x0a,0x22,0x38,0x3e,0x3e,0x3e,0x2c,0x3e,0x3e,0x2c,0x3e,0x2c,0x3e,
+ 0x3e,0x3e,0x2c,0x25,0x75,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x22,0x2c,0x0a,
+ 0x22,0x36,0x3a,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,
+ 0x3e,0x25,0x74,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x22,0x2c,0x0a,0x22,0x37,
+ 0x3a,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x2c,0x2a,
+ 0x74,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x22,0x2c,0x0a,0x22,0x6c,0x3a,0x3e,
+ 0x3e,0x3a,0x3e,0x3e,0x3a,0x3e,0x3e,0x3a,0x3e,0x3e,0x3e,0x2a,0x79,0x5f,
+ 0x5f,0x5f,0x5f,0x5f,0x5f,0x22,0x2c,0x0a,0x22,0x78,0x3e,0x3a,0x3e,0x3e,
+ 0x3e,0x3a,0x3b,0x58,0x58,0x58,0x58,0x58,0x58,0x2e,0x32,0x5f,0x5f,0x5f,
+ 0x5f,0x5f,0x5f,0x22,0x2c,0x0a,0x22,0x63,0x3a,0x3e,0x3e,0x3a,0x3a,0x31,
+ 0x41,0x5a,0x43,0x43,0x71,0x30,0x30,0x39,0x79,0x6b,0x6b,0x6b,0x68,0x68,
+ 0x6b,0x22,0x2c,0x0a,0x22,0x61,0x3b,0x3a,0x3e,0x3a,0x3b,0x72,0x29,0x29,
+ 0x29,0x5e,0x5e,0x28,0x5e,0x5e,0x21,0x45,0x52,0x55,0x49,0x54,0x73,0x22,
+ 0x2c,0x0a,0x22,0x6d,0x3e,0x3a,0x3e,0x3a,0x58,0x65,0x28,0x28,0x28,0x28,
+ 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x64,0x22,0x2c,0x0a,
+ 0x22,0x67,0x3e,0x3a,0x3b,0x3a,0x3b,0x77,0x28,0x2f,0x7e,0x7e,0x7e,0x2f,
+ 0x7e,0x2f,0x7e,0x7e,0x2f,0x7e,0x7e,0x29,0x64,0x22,0x2c,0x0a,0x22,0x66,
+ 0x2d,0x3b,0x3e,0x3a,0x3b,0x31,0x7e,0x28,0x7e,0x2f,0x2f,0x7e,0x7e,0x7e,
+ 0x7e,0x2f,0x7e,0x28,0x7e,0x29,0x73,0x22,0x2c,0x0a,0x22,0x4e,0x2d,0x3a,
+ 0x3b,0x3b,0x3b,0x3c,0x51,0x28,0x7e,0x7e,0x7e,0x2f,0x7e,0x2f,0x7e,0x7e,
+ 0x7e,0x7e,0x7e,0x29,0x66,0x22,0x2c,0x0a,0x22,0x42,0x6f,0x3b,0x3a,0x3b,
+ 0x3b,0x3c,0x59,0x2f,0x7e,0x2f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,
+ 0x7e,0x28,0x6a,0x22,0x2c,0x0a,0x22,0x56,0x4d,0x6d,0x62,0x76,0x6e,0x6e,
+ 0x55,0x28,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x29,
+ 0x6a,0x22,0x2c,0x0a,0x22,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x6b,0x54,0x2f,
+ 0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x28,0x6b,0x22,
+ 0x2c,0x0a,0x22,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x44,0x4b,0x28,0x7e,0x7e,
+ 0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x29,0x6a,0x22,0x2c,0x0a,
+ 0x22,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x6b,0x49,0x7e,0x7e,0x7e,0x7e,0x7e,
+ 0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x28,0x6b,0x22,0x2c,0x0a,0x22,0x5f,
+ 0x5f,0x5f,0x5f,0x5f,0x5f,0x6b,0x4b,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,
+ 0x7e,0x7e,0x21,0x7e,0x7e,0x28,0x6a,0x22,0x2c,0x0a,0x22,0x5f,0x5f,0x5f,
+ 0x5f,0x5f,0x5f,0x44,0x47,0x2f,0x7e,0x7e,0x7e,0x21,0x7e,0x7e,0x21,0x7e,
+ 0x7e,0x7e,0x7e,0x28,0x56,0x22,0x2c,0x0a,0x22,0x5f,0x5f,0x5f,0x5f,0x5f,
+ 0x5f,0x5f,0x4b,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,
+ 0x7e,0x28,0x56,0x22,0x2c,0x0a,0x22,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
+ 0x6b,0x47,0x44,0x6b,0x48,0x46,0x44,0x4b,0x4a,0x48,0x50,0x4b,0x4c,0x57,
+ 0x46,0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_editraise_xpm_len = 2365;
+static const unsigned char small_editraise_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x38,0x32,0x20,0x31,0x22,0x2c,0x0a,0x22,0x20,0x20,0x63,0x20,0x23,
+ 0x61,0x64,0x61,0x64,0x35,0x61,0x35,0x61,0x34,0x61,0x34,0x61,0x22,0x2c,
+ 0x0a,0x22,0x2e,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x35,0x61,0x35,
+ 0x61,0x34,0x32,0x34,0x32,0x22,0x2c,0x0a,0x22,0x58,0x20,0x63,0x20,0x23,
+ 0x62,0x64,0x62,0x64,0x35,0x61,0x35,0x61,0x34,0x32,0x34,0x32,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x36,0x33,0x36,
+ 0x33,0x34,0x61,0x34,0x61,0x22,0x2c,0x0a,0x22,0x4f,0x20,0x63,0x20,0x23,
+ 0x61,0x35,0x61,0x35,0x36,0x33,0x36,0x33,0x35,0x32,0x35,0x32,0x22,0x2c,
+ 0x0a,0x22,0x2b,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x36,0x33,0x36,
+ 0x33,0x35,0x32,0x35,0x32,0x22,0x2c,0x0a,0x22,0x40,0x20,0x63,0x20,0x23,
+ 0x64,0x36,0x64,0x36,0x35,0x32,0x35,0x32,0x33,0x39,0x33,0x39,0x22,0x2c,
+ 0x0a,0x22,0x23,0x20,0x63,0x20,0x23,0x64,0x36,0x64,0x36,0x35,0x61,0x35,
+ 0x61,0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,0x22,0x24,0x20,0x63,0x20,0x23,
+ 0x64,0x65,0x64,0x65,0x35,0x32,0x35,0x32,0x33,0x39,0x33,0x39,0x22,0x2c,
+ 0x0a,0x22,0x25,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x34,0x61,0x34,
+ 0x61,0x32,0x39,0x32,0x39,0x22,0x2c,0x0a,0x22,0x26,0x20,0x63,0x20,0x23,
+ 0x66,0x66,0x66,0x66,0x35,0x61,0x35,0x61,0x33,0x31,0x33,0x31,0x22,0x2c,
+ 0x0a,0x22,0x2a,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x35,0x61,0x35,
+ 0x61,0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x63,0x20,0x23,
+ 0x66,0x66,0x66,0x66,0x36,0x33,0x36,0x33,0x33,0x39,0x33,0x39,0x22,0x2c,
+ 0x0a,0x22,0x2d,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x35,0x61,0x35,
+ 0x61,0x34,0x32,0x34,0x32,0x22,0x2c,0x0a,0x22,0x3b,0x20,0x63,0x20,0x23,
+ 0x64,0x36,0x64,0x36,0x35,0x61,0x35,0x61,0x34,0x32,0x34,0x32,0x22,0x2c,
+ 0x0a,0x22,0x3a,0x20,0x63,0x20,0x23,0x64,0x36,0x64,0x36,0x36,0x62,0x36,
+ 0x62,0x35,0x61,0x35,0x61,0x22,0x2c,0x0a,0x22,0x3e,0x20,0x63,0x20,0x23,
+ 0x64,0x65,0x64,0x65,0x36,0x62,0x36,0x62,0x35,0x32,0x35,0x32,0x22,0x2c,
+ 0x0a,0x22,0x2c,0x20,0x63,0x20,0x23,0x64,0x36,0x64,0x36,0x37,0x33,0x37,
+ 0x33,0x35,0x61,0x35,0x61,0x22,0x2c,0x0a,0x22,0x3c,0x20,0x63,0x20,0x23,
+ 0x63,0x65,0x63,0x65,0x37,0x33,0x37,0x33,0x36,0x33,0x36,0x33,0x22,0x2c,
+ 0x0a,0x22,0x31,0x20,0x63,0x20,0x23,0x64,0x36,0x64,0x36,0x37,0x33,0x37,
+ 0x33,0x36,0x33,0x36,0x33,0x22,0x2c,0x0a,0x22,0x32,0x20,0x63,0x20,0x23,
+ 0x64,0x65,0x64,0x65,0x37,0x62,0x37,0x62,0x36,0x33,0x36,0x33,0x22,0x2c,
+ 0x0a,0x22,0x33,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x36,0x33,0x36,
+ 0x33,0x34,0x61,0x34,0x61,0x22,0x2c,0x0a,0x22,0x34,0x20,0x63,0x20,0x23,
+ 0x65,0x66,0x65,0x66,0x37,0x33,0x37,0x33,0x35,0x32,0x35,0x32,0x22,0x2c,
+ 0x0a,0x22,0x35,0x20,0x63,0x20,0x23,0x66,0x37,0x66,0x37,0x36,0x62,0x36,
+ 0x62,0x34,0x61,0x34,0x61,0x22,0x2c,0x0a,0x22,0x36,0x20,0x63,0x20,0x23,
+ 0x66,0x66,0x66,0x66,0x36,0x33,0x36,0x33,0x34,0x32,0x34,0x32,0x22,0x2c,
+ 0x0a,0x22,0x37,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x36,0x62,0x36,
+ 0x62,0x34,0x32,0x34,0x32,0x22,0x2c,0x0a,0x22,0x38,0x20,0x63,0x20,0x23,
+ 0x66,0x66,0x66,0x66,0x36,0x62,0x36,0x62,0x34,0x61,0x34,0x61,0x22,0x2c,
+ 0x0a,0x22,0x39,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x37,0x33,0x37,
+ 0x33,0x34,0x61,0x34,0x61,0x22,0x2c,0x0a,0x22,0x30,0x20,0x63,0x20,0x23,
+ 0x66,0x37,0x66,0x37,0x37,0x33,0x37,0x33,0x35,0x32,0x35,0x32,0x22,0x2c,
+ 0x0a,0x22,0x71,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x38,0x34,0x38,
+ 0x34,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x77,0x20,0x63,0x20,0x23,
+ 0x63,0x36,0x63,0x36,0x38,0x34,0x38,0x34,0x37,0x33,0x37,0x33,0x22,0x2c,
+ 0x0a,0x22,0x65,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x38,0x63,0x38,
+ 0x63,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x72,0x20,0x63,0x20,0x23,
+ 0x64,0x36,0x64,0x36,0x38,0x34,0x38,0x34,0x37,0x33,0x37,0x33,0x22,0x2c,
+ 0x0a,0x22,0x74,0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,0x38,0x63,0x38,
+ 0x63,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x79,0x20,0x63,0x20,0x23,
+ 0x65,0x37,0x65,0x37,0x38,0x34,0x38,0x34,0x36,0x62,0x36,0x62,0x22,0x2c,
+ 0x0a,0x22,0x75,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x38,0x63,0x38,
+ 0x63,0x38,0x34,0x38,0x34,0x22,0x2c,0x0a,0x22,0x69,0x20,0x63,0x20,0x23,
+ 0x62,0x35,0x62,0x35,0x39,0x34,0x39,0x34,0x38,0x63,0x38,0x63,0x22,0x2c,
+ 0x0a,0x22,0x70,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x39,0x63,0x39,
+ 0x63,0x39,0x63,0x39,0x63,0x22,0x2c,0x0a,0x22,0x61,0x20,0x63,0x20,0x23,
+ 0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x22,0x2c,
+ 0x0a,0x22,0x73,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x61,0x35,0x61,
+ 0x35,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x64,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x36,0x38,0x22,0x2c,0x0a,0x22,0x66,0x20,0x63,0x20,0x23,
+ 0x62,0x64,0x62,0x64,0x61,0x64,0x61,0x64,0x61,0x35,0x61,0x35,0x22,0x2c,
+ 0x0a,0x22,0x67,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x37,0x31,0x22,0x2c,
+ 0x0a,0x22,0x68,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x62,0x35,0x62,
+ 0x35,0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,0x6a,0x20,0x63,0x20,0x23,
+ 0x62,0x64,0x62,0x64,0x62,0x64,0x62,0x64,0x62,0x35,0x62,0x35,0x22,0x2c,
+ 0x0a,0x22,0x6b,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x37,0x34,0x22,0x2c,
+ 0x0a,0x22,0x6c,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x63,0x36,0x63,
+ 0x36,0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x7a,0x20,0x63,0x20,0x23,
+ 0x63,0x65,0x63,0x65,0x38,0x63,0x38,0x63,0x38,0x34,0x38,0x34,0x22,0x2c,
+ 0x0a,0x22,0x78,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x39,0x34,0x39,
+ 0x34,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,0x63,0x20,0x63,0x20,0x23,
+ 0x63,0x65,0x63,0x65,0x39,0x34,0x39,0x34,0x38,0x34,0x38,0x34,0x22,0x2c,
+ 0x0a,0x22,0x76,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x39,0x63,0x39,
+ 0x63,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,0x62,0x20,0x63,0x20,0x23,
+ 0x63,0x65,0x63,0x65,0x61,0x35,0x61,0x35,0x39,0x63,0x39,0x63,0x22,0x2c,
+ 0x0a,0x22,0x6e,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x61,0x64,0x61,
+ 0x64,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x6d,0x20,0x63,0x20,0x23,
+ 0x63,0x36,0x63,0x36,0x61,0x64,0x61,0x64,0x61,0x64,0x61,0x64,0x22,0x2c,
+ 0x0a,0x22,0x4d,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x62,0x35,0x62,
+ 0x35,0x61,0x64,0x61,0x64,0x22,0x2c,0x0a,0x22,0x4e,0x20,0x63,0x20,0x23,
+ 0x63,0x36,0x63,0x36,0x62,0x64,0x62,0x64,0x62,0x64,0x62,0x64,0x22,0x2c,
+ 0x0a,0x22,0x42,0x20,0x63,0x20,0x23,0x66,0x37,0x66,0x37,0x61,0x35,0x61,
+ 0x35,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,0x56,0x20,0x63,0x20,0x23,
+ 0x66,0x66,0x66,0x66,0x61,0x64,0x61,0x64,0x39,0x63,0x39,0x63,0x22,0x2c,
+ 0x0a,0x22,0x43,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x62,0x35,0x62,
+ 0x35,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x5a,0x20,0x63,0x20,0x23,
+ 0x63,0x36,0x63,0x36,0x63,0x36,0x63,0x36,0x62,0x64,0x62,0x64,0x22,0x2c,
+ 0x0a,0x22,0x41,0x20,0x63,0x20,0x23,0x64,0x36,0x64,0x36,0x63,0x36,0x63,
+ 0x36,0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,0x53,0x20,0x63,0x20,0x23,
+ 0x66,0x66,0x66,0x66,0x63,0x36,0x63,0x36,0x62,0x35,0x62,0x35,0x22,0x2c,
+ 0x0a,0x22,0x44,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x63,0x65,0x63,
+ 0x65,0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x46,0x20,0x63,0x20,0x23,
+ 0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x22,0x2c,
+ 0x0a,0x22,0x47,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x63,0x36,0x63,
+ 0x36,0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x48,0x20,0x63,0x20,0x23,
+ 0x63,0x65,0x63,0x65,0x63,0x36,0x63,0x36,0x63,0x36,0x63,0x36,0x22,0x2c,
+ 0x0a,0x22,0x4a,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x63,0x65,0x63,
+ 0x65,0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x4b,0x20,0x63,0x20,0x23,
+ 0x63,0x65,0x63,0x65,0x63,0x65,0x63,0x65,0x63,0x65,0x63,0x65,0x22,0x2c,
+ 0x0a,0x22,0x4c,0x20,0x63,0x20,0x23,0x64,0x36,0x64,0x36,0x63,0x65,0x63,
+ 0x65,0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x50,0x20,0x63,0x20,0x23,
+ 0x64,0x65,0x64,0x65,0x63,0x65,0x63,0x65,0x63,0x36,0x63,0x36,0x22,0x2c,
+ 0x0a,0x22,0x49,0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,0x64,0x36,0x64,
+ 0x36,0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x55,0x20,0x63,0x20,0x23,
+ 0x64,0x65,0x64,0x65,0x64,0x36,0x64,0x36,0x64,0x36,0x64,0x36,0x22,0x2c,
+ 0x0a,0x22,0x59,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x64,0x65,0x64,
+ 0x65,0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,0x22,0x54,0x20,0x63,0x20,0x23,
+ 0x65,0x66,0x65,0x66,0x64,0x65,0x64,0x65,0x64,0x36,0x64,0x36,0x22,0x2c,
+ 0x0a,0x22,0x52,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x64,0x36,0x64,
+ 0x36,0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x45,0x20,0x63,0x20,0x23,
+ 0x65,0x37,0x65,0x37,0x65,0x37,0x65,0x37,0x64,0x65,0x64,0x65,0x22,0x2c,
+ 0x0a,0x22,0x57,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x65,0x66,0x65,
+ 0x66,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,0x51,0x20,0x63,0x20,0x23,
+ 0x66,0x66,0x66,0x66,0x66,0x37,0x66,0x37,0x65,0x66,0x65,0x66,0x22,0x2c,
+ 0x0a,0x22,0x21,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x66,0x37,0x66,
+ 0x37,0x66,0x37,0x66,0x37,0x22,0x2c,0x0a,0x22,0x7e,0x20,0x63,0x20,0x23,
+ 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x37,0x66,0x37,0x22,0x2c,
+ 0x0a,0x22,0x5e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x31,0x30,0x30,0x22,
+ 0x2c,0x0a,0x22,0x2f,0x20,0x63,0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,
+ 0x2f,0x2a,0x20,0x70,0x69,0x78,0x65,0x6c,0x73,0x20,0x2a,0x2f,0x0a,0x22,
+ 0x2c,0x33,0x3e,0x3a,0x3c,0x31,0x3c,0x77,0x71,0x77,0x65,0x75,0x69,0x78,
+ 0x66,0x4e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x22,0x2c,0x0a,0x22,0x30,0x39,
+ 0x39,0x38,0x37,0x39,0x38,0x38,0x37,0x38,0x37,0x36,0x36,0x36,0x4f,0x6b,
+ 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x22,0x2c,0x0a,0x22,0x32,0x38,0x38,0x38,
+ 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x2b,0x68,0x2f,0x2f,
+ 0x2f,0x2f,0x2f,0x2f,0x22,0x2c,0x0a,0x22,0x79,0x37,0x38,0x38,0x38,0x38,
+ 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x6f,0x67,0x2f,0x2f,0x2f,0x2f,
+ 0x2f,0x2f,0x22,0x2c,0x0a,0x22,0x72,0x37,0x38,0x38,0x38,0x38,0x38,0x38,
+ 0x38,0x37,0x38,0x38,0x38,0x39,0x20,0x68,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,
+ 0x22,0x2c,0x0a,0x22,0x74,0x37,0x38,0x38,0x37,0x38,0x38,0x37,0x38,0x38,
+ 0x38,0x37,0x38,0x39,0x2e,0x67,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x22,0x2c,
+ 0x0a,0x22,0x7a,0x38,0x37,0x38,0x37,0x38,0x37,0x38,0x37,0x38,0x37,0x38,
+ 0x37,0x38,0x58,0x67,0x6b,0x2f,0x2f,0x2f,0x2f,0x2f,0x22,0x2c,0x0a,0x22,
+ 0x63,0x37,0x38,0x37,0x38,0x38,0x37,0x38,0x38,0x37,0x38,0x37,0x38,0x37,
+ 0x2d,0x67,0x48,0x5a,0x4e,0x6a,0x6b,0x64,0x22,0x2c,0x0a,0x22,0x76,0x37,
+ 0x38,0x37,0x38,0x37,0x38,0x37,0x37,0x38,0x37,0x38,0x37,0x37,0x3b,0x45,
+ 0x5e,0x7e,0x7e,0x7e,0x5e,0x61,0x22,0x2c,0x0a,0x22,0x70,0x37,0x36,0x38,
+ 0x36,0x37,0x38,0x36,0x38,0x36,0x38,0x36,0x38,0x37,0x23,0x55,0x7e,0x7e,
+ 0x21,0x21,0x5e,0x73,0x22,0x2c,0x0a,0x22,0x62,0x37,0x37,0x37,0x37,0x38,
+ 0x36,0x37,0x37,0x37,0x37,0x37,0x36,0x38,0x40,0x49,0x7e,0x51,0x51,0x51,
+ 0x5e,0x73,0x22,0x2c,0x0a,0x22,0x66,0x38,0x36,0x38,0x37,0x36,0x38,0x36,
+ 0x38,0x36,0x38,0x36,0x38,0x37,0x40,0x49,0x7e,0x21,0x21,0x51,0x5e,0x61,
+ 0x22,0x2c,0x0a,0x22,0x6e,0x36,0x37,0x36,0x36,0x37,0x36,0x37,0x36,0x37,
+ 0x36,0x37,0x36,0x37,0x24,0x50,0x7e,0x51,0x51,0x51,0x5e,0x67,0x22,0x2c,
+ 0x0a,0x22,0x6d,0x36,0x36,0x37,0x36,0x36,0x37,0x36,0x36,0x36,0x37,0x36,
+ 0x38,0x37,0x24,0x50,0x7e,0x51,0x51,0x51,0x7e,0x6a,0x22,0x2c,0x0a,0x22,
+ 0x67,0x32,0x34,0x30,0x35,0x38,0x36,0x36,0x36,0x3d,0x2a,0x2a,0x2a,0x26,
+ 0x25,0x41,0x7e,0x51,0x51,0x51,0x5e,0x6b,0x22,0x2c,0x0a,0x22,0x6b,0x6a,
+ 0x4e,0x68,0x67,0x4d,0x6d,0x6e,0x52,0x44,0x53,0x43,0x43,0x56,0x42,0x54,
+ 0x21,0x51,0x51,0x51,0x5e,0x6a,0x22,0x2c,0x0a,0x22,0x2f,0x2f,0x2f,0x2f,
+ 0x2f,0x2f,0x2f,0x6c,0x7e,0x5e,0x7e,0x5e,0x5e,0x7e,0x5e,0x21,0x51,0x51,
+ 0x51,0x51,0x7e,0x6a,0x22,0x2c,0x0a,0x22,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,
+ 0x2f,0x4a,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,
+ 0x7e,0x6b,0x22,0x2c,0x0a,0x22,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x6b,
+ 0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x7e,0x6a,
+ 0x22,0x2c,0x0a,0x22,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x6b,0x51,0x51,
+ 0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x7e,0x4e,0x22,0x2c,
+ 0x0a,0x22,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x4e,0x51,0x51,0x51,0x51,
+ 0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x7e,0x5a,0x22,0x2c,0x0a,0x22,
+ 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x6b,0x6b,0x47,0x6b,0x47,0x4b,0x5a,
+ 0x4c,0x55,0x4b,0x55,0x59,0x55,0x57,0x48,0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_form_xpm_len = 1483;
+static const unsigned char small_form_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x33,0x39,0x20,0x31,0x22,0x2c,0x0a,0x22,0x20,0x20,0x63,0x20,0x23,
+ 0x34,0x61,0x34,0x61,0x39,0x66,0x39,0x66,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x2e,0x20,0x63,0x20,0x23,0x35,0x33,0x35,0x33,0x39,0x66,0x39,
+ 0x66,0x66,0x36,0x66,0x36,0x22,0x2c,0x0a,0x22,0x58,0x20,0x63,0x20,0x23,
+ 0x34,0x66,0x34,0x66,0x61,0x34,0x61,0x34,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x20,0x63,0x20,0x23,0x35,0x36,0x35,0x36,0x61,0x37,0x61,
+ 0x37,0x66,0x65,0x66,0x65,0x22,0x2c,0x0a,0x22,0x4f,0x20,0x63,0x20,0x23,
+ 0x35,0x37,0x35,0x37,0x61,0x64,0x61,0x64,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x2b,0x20,0x63,0x20,0x23,0x35,0x65,0x35,0x65,0x61,0x66,0x61,
+ 0x66,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x40,0x20,0x63,0x20,0x23,
+ 0x35,0x65,0x35,0x65,0x62,0x32,0x62,0x32,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x23,0x20,0x63,0x20,0x23,0x36,0x31,0x36,0x31,0x61,0x65,0x61,
+ 0x65,0x66,0x37,0x66,0x37,0x22,0x2c,0x0a,0x22,0x24,0x20,0x63,0x20,0x23,
+ 0x36,0x30,0x36,0x30,0x61,0x66,0x61,0x66,0x66,0x38,0x66,0x38,0x22,0x2c,
+ 0x0a,0x22,0x25,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x63,0x35,0x63,
+ 0x35,0x63,0x31,0x63,0x31,0x22,0x2c,0x0a,0x22,0x26,0x20,0x63,0x20,0x23,
+ 0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x22,0x2c,
+ 0x0a,0x22,0x2a,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x64,0x30,0x64,
+ 0x30,0x63,0x63,0x63,0x63,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x63,0x20,0x23,
+ 0x63,0x64,0x63,0x64,0x64,0x37,0x64,0x37,0x64,0x33,0x64,0x33,0x22,0x2c,
+ 0x0a,0x22,0x2d,0x20,0x63,0x20,0x23,0x64,0x31,0x64,0x31,0x64,0x63,0x64,
+ 0x63,0x64,0x37,0x64,0x37,0x22,0x2c,0x0a,0x22,0x3b,0x20,0x63,0x20,0x23,
+ 0x64,0x34,0x64,0x34,0x64,0x66,0x64,0x66,0x64,0x62,0x64,0x62,0x22,0x2c,
+ 0x0a,0x22,0x3a,0x20,0x63,0x20,0x23,0x64,0x37,0x64,0x37,0x65,0x34,0x65,
+ 0x34,0x64,0x66,0x64,0x66,0x22,0x2c,0x0a,0x22,0x3e,0x20,0x63,0x20,0x23,
+ 0x64,0x61,0x64,0x61,0x65,0x35,0x65,0x35,0x64,0x66,0x64,0x66,0x22,0x2c,
+ 0x0a,0x22,0x2c,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x65,0x32,0x65,
+ 0x32,0x65,0x38,0x65,0x38,0x22,0x2c,0x0a,0x22,0x3c,0x20,0x63,0x20,0x23,
+ 0x64,0x32,0x64,0x32,0x65,0x37,0x65,0x37,0x65,0x66,0x65,0x66,0x22,0x2c,
+ 0x0a,0x22,0x31,0x20,0x63,0x20,0x23,0x64,0x34,0x64,0x34,0x65,0x38,0x65,
+ 0x38,0x65,0x66,0x65,0x66,0x22,0x2c,0x0a,0x22,0x32,0x20,0x63,0x20,0x23,
+ 0x64,0x64,0x64,0x64,0x65,0x37,0x65,0x37,0x65,0x32,0x65,0x32,0x22,0x2c,
+ 0x0a,0x22,0x33,0x20,0x63,0x20,0x23,0x64,0x66,0x64,0x66,0x65,0x63,0x65,
+ 0x63,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,0x34,0x20,0x63,0x20,0x23,
+ 0x64,0x37,0x64,0x37,0x65,0x63,0x65,0x63,0x66,0x34,0x66,0x34,0x22,0x2c,
+ 0x0a,0x22,0x35,0x20,0x63,0x20,0x23,0x64,0x61,0x64,0x61,0x65,0x66,0x65,
+ 0x66,0x66,0x36,0x66,0x36,0x22,0x2c,0x0a,0x22,0x36,0x20,0x63,0x20,0x23,
+ 0x64,0x63,0x64,0x63,0x66,0x30,0x66,0x30,0x66,0x37,0x66,0x37,0x22,0x2c,
+ 0x0a,0x22,0x37,0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,0x66,0x30,0x66,
+ 0x30,0x66,0x61,0x66,0x61,0x22,0x2c,0x0a,0x22,0x38,0x20,0x63,0x20,0x23,
+ 0x65,0x32,0x65,0x32,0x65,0x65,0x65,0x65,0x65,0x37,0x65,0x37,0x22,0x2c,
+ 0x0a,0x22,0x39,0x20,0x63,0x20,0x23,0x65,0x34,0x65,0x34,0x65,0x66,0x65,
+ 0x66,0x65,0x61,0x65,0x61,0x22,0x2c,0x0a,0x22,0x30,0x20,0x63,0x20,0x23,
+ 0x65,0x37,0x65,0x37,0x66,0x33,0x66,0x33,0x65,0x65,0x65,0x65,0x22,0x2c,
+ 0x0a,0x22,0x71,0x20,0x63,0x20,0x23,0x65,0x38,0x65,0x38,0x66,0x30,0x66,
+ 0x30,0x65,0x36,0x65,0x36,0x22,0x2c,0x0a,0x22,0x77,0x20,0x63,0x20,0x23,
+ 0x65,0x66,0x65,0x66,0x66,0x37,0x66,0x37,0x65,0x63,0x65,0x63,0x22,0x2c,
+ 0x0a,0x22,0x65,0x20,0x63,0x20,0x23,0x65,0x30,0x65,0x30,0x66,0x31,0x66,
+ 0x31,0x66,0x64,0x66,0x64,0x22,0x2c,0x0a,0x22,0x72,0x20,0x63,0x20,0x23,
+ 0x65,0x63,0x65,0x63,0x66,0x37,0x66,0x37,0x66,0x32,0x66,0x32,0x22,0x2c,
+ 0x0a,0x22,0x74,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x66,0x63,0x66,
+ 0x63,0x66,0x36,0x66,0x36,0x22,0x2c,0x0a,0x22,0x79,0x20,0x63,0x20,0x23,
+ 0x66,0x31,0x66,0x31,0x66,0x61,0x66,0x61,0x65,0x66,0x65,0x66,0x22,0x2c,
+ 0x0a,0x22,0x75,0x20,0x63,0x20,0x23,0x66,0x37,0x66,0x37,0x66,0x66,0x66,
+ 0x66,0x66,0x36,0x66,0x36,0x22,0x2c,0x0a,0x22,0x69,0x20,0x63,0x20,0x23,
+ 0x66,0x39,0x66,0x39,0x66,0x66,0x66,0x66,0x66,0x37,0x66,0x37,0x22,0x2c,
+ 0x0a,0x22,0x70,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x31,0x30,0x30,0x22,
+ 0x2c,0x0a,0x22,0x61,0x20,0x63,0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,
+ 0x2f,0x2a,0x20,0x70,0x69,0x78,0x65,0x6c,0x73,0x20,0x2a,0x2f,0x0a,0x22,
+ 0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x2b,0x23,0x2b,
+ 0x2e,0x2b,0x2e,0x2b,0x2e,0x2b,0x2e,0x23,0x22,0x2c,0x0a,0x22,0x23,0x2b,
+ 0x2b,0x2b,0x4f,0x2b,0x6f,0x4f,0x6f,0x6f,0x6f,0x58,0x58,0x6f,0x58,0x6f,
+ 0x58,0x20,0x20,0x20,0x20,0x2e,0x22,0x2c,0x0a,0x22,0x23,0x40,0x2b,0x2b,
+ 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x6f,0x2b,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x2e,0x22,0x2c,0x0a,0x22,0x3c,0x65,0x37,0x37,0x37,0x37,
+ 0x35,0x37,0x34,0x34,0x34,0x35,0x34,0x34,0x34,0x31,0x34,0x3c,0x3c,0x34,
+ 0x2c,0x3b,0x22,0x2c,0x0a,0x22,0x79,0x70,0x69,0x75,0x75,0x75,0x75,0x75,
+ 0x75,0x75,0x75,0x79,0x79,0x79,0x79,0x77,0x77,0x77,0x77,0x71,0x77,0x38,
+ 0x22,0x2c,0x0a,0x22,0x77,0x74,0x75,0x74,0x74,0x74,0x74,0x72,0x72,0x72,
+ 0x36,0x77,0x72,0x30,0x30,0x30,0x30,0x30,0x39,0x39,0x39,0x3e,0x22,0x2c,
+ 0x0a,0x22,0x39,0x74,0x74,0x74,0x72,0x74,0x72,0x72,0x72,0x72,0x77,0x30,
+ 0x77,0x30,0x30,0x30,0x39,0x30,0x39,0x39,0x39,0x3a,0x22,0x2c,0x0a,0x22,
+ 0x32,0x75,0x74,0x72,0x74,0x72,0x72,0x72,0x77,0x36,0x77,0x30,0x30,0x30,
+ 0x39,0x30,0x39,0x38,0x39,0x39,0x39,0x3b,0x22,0x2c,0x0a,0x22,0x32,0x74,
+ 0x72,0x72,0x72,0x72,0x36,0x77,0x36,0x77,0x30,0x30,0x30,0x39,0x30,0x38,
+ 0x39,0x39,0x33,0x33,0x38,0x2d,0x22,0x2c,0x0a,0x22,0x3e,0x74,0x72,0x72,
+ 0x72,0x77,0x77,0x30,0x77,0x30,0x30,0x30,0x39,0x30,0x38,0x39,0x39,0x33,
+ 0x38,0x33,0x38,0x2d,0x22,0x2c,0x0a,0x22,0x3b,0x74,0x77,0x36,0x77,0x36,
+ 0x30,0x30,0x39,0x30,0x39,0x30,0x39,0x39,0x38,0x39,0x33,0x38,0x33,0x33,
+ 0x33,0x3b,0x22,0x2c,0x0a,0x22,0x3e,0x77,0x36,0x77,0x30,0x77,0x30,0x30,
+ 0x30,0x39,0x39,0x39,0x39,0x38,0x39,0x38,0x33,0x33,0x32,0x32,0x33,0x2d,
+ 0x22,0x2c,0x0a,0x22,0x32,0x72,0x77,0x30,0x30,0x39,0x30,0x39,0x39,0x39,
+ 0x39,0x38,0x33,0x33,0x33,0x33,0x32,0x32,0x33,0x32,0x33,0x3d,0x22,0x2c,
+ 0x0a,0x22,0x3e,0x30,0x30,0x39,0x30,0x39,0x30,0x38,0x39,0x39,0x31,0x38,
+ 0x38,0x33,0x33,0x32,0x33,0x32,0x33,0x3e,0x32,0x3d,0x22,0x2c,0x0a,0x22,
+ 0x3b,0x30,0x39,0x30,0x39,0x39,0x38,0x39,0x38,0x38,0x38,0x33,0x32,0x33,
+ 0x32,0x32,0x33,0x32,0x32,0x3e,0x33,0x2a,0x22,0x2c,0x0a,0x22,0x2d,0x30,
+ 0x30,0x39,0x38,0x31,0x39,0x38,0x33,0x38,0x33,0x33,0x32,0x33,0x32,0x33,
+ 0x32,0x3e,0x3e,0x3e,0x32,0x2a,0x22,0x2c,0x0a,0x22,0x2d,0x30,0x38,0x33,
+ 0x38,0x38,0x38,0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x3a,0x3e,0x3a,
+ 0x32,0x3a,0x3a,0x3d,0x22,0x2c,0x0a,0x22,0x2a,0x30,0x38,0x38,0x38,0x33,
+ 0x33,0x33,0x32,0x33,0x32,0x33,0x32,0x32,0x32,0x3a,0x3e,0x3a,0x3a,0x3a,
+ 0x3a,0x3d,0x22,0x2c,0x0a,0x22,0x2a,0x39,0x38,0x33,0x33,0x33,0x32,0x33,
+ 0x33,0x32,0x32,0x3e,0x32,0x32,0x3a,0x3e,0x3e,0x3e,0x3a,0x3a,0x3a,0x2a,
+ 0x22,0x2c,0x0a,0x22,0x3b,0x39,0x32,0x33,0x32,0x33,0x32,0x33,0x3e,0x3e,
+ 0x3a,0x32,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3a,0x3b,0x3a,0x2a,0x22,0x2c,
+ 0x0a,0x22,0x2d,0x33,0x32,0x33,0x32,0x32,0x32,0x3e,0x32,0x32,0x32,0x3a,
+ 0x3e,0x3a,0x3a,0x3a,0x3b,0x3a,0x3b,0x2d,0x3e,0x61,0x22,0x2c,0x0a,0x22,
+ 0x2a,0x32,0x3e,0x3a,0x3e,0x3a,0x3a,0x3a,0x3b,0x3a,0x3b,0x3b,0x3b,0x3b,
+ 0x2d,0x3b,0x2d,0x2d,0x2d,0x2d,0x3b,0x25,0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_home_xpm_len = 3981;
+static const unsigned char small_home_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x31,0x33,0x32,0x20,0x32,0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x63,
+ 0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x20,0x63,
+ 0x20,0x23,0x30,0x38,0x30,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x22,0x2c,0x0a,0x22,0x58,0x20,0x20,0x63,0x20,0x23,0x30,0x38,0x30,0x38,
+ 0x30,0x38,0x30,0x38,0x30,0x30,0x30,0x30,0x22,0x2c,0x0a,0x22,0x6f,0x20,
+ 0x20,0x63,0x20,0x23,0x30,0x38,0x30,0x38,0x31,0x30,0x31,0x30,0x30,0x38,
+ 0x30,0x38,0x22,0x2c,0x0a,0x22,0x4f,0x20,0x20,0x63,0x20,0x23,0x31,0x30,
+ 0x31,0x30,0x31,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x22,0x2c,0x0a,0x22,
+ 0x2b,0x20,0x20,0x63,0x20,0x23,0x32,0x39,0x32,0x39,0x32,0x31,0x32,0x31,
+ 0x30,0x30,0x30,0x30,0x22,0x2c,0x0a,0x22,0x40,0x20,0x20,0x63,0x20,0x23,
+ 0x33,0x31,0x33,0x31,0x32,0x39,0x32,0x39,0x30,0x30,0x30,0x30,0x22,0x2c,
+ 0x0a,0x22,0x23,0x20,0x20,0x63,0x20,0x23,0x33,0x39,0x33,0x39,0x32,0x39,
+ 0x32,0x39,0x30,0x30,0x30,0x30,0x22,0x2c,0x0a,0x22,0x24,0x20,0x20,0x63,
+ 0x20,0x23,0x33,0x39,0x33,0x39,0x33,0x31,0x33,0x31,0x30,0x30,0x30,0x30,
+ 0x22,0x2c,0x0a,0x22,0x25,0x20,0x20,0x63,0x20,0x23,0x33,0x39,0x33,0x39,
+ 0x33,0x39,0x33,0x39,0x30,0x38,0x30,0x38,0x22,0x2c,0x0a,0x22,0x26,0x20,
+ 0x20,0x63,0x20,0x23,0x33,0x39,0x33,0x39,0x33,0x39,0x33,0x39,0x31,0x30,
+ 0x31,0x30,0x22,0x2c,0x0a,0x22,0x2a,0x20,0x20,0x63,0x20,0x23,0x33,0x39,
+ 0x33,0x39,0x33,0x31,0x33,0x31,0x32,0x39,0x32,0x39,0x22,0x2c,0x0a,0x22,
+ 0x3d,0x20,0x20,0x63,0x20,0x23,0x33,0x31,0x33,0x31,0x33,0x39,0x33,0x39,
+ 0x33,0x31,0x33,0x31,0x22,0x2c,0x0a,0x22,0x2d,0x20,0x20,0x63,0x20,0x23,
+ 0x34,0x61,0x34,0x61,0x34,0x32,0x34,0x32,0x30,0x38,0x30,0x38,0x22,0x2c,
+ 0x0a,0x22,0x3b,0x20,0x20,0x63,0x20,0x23,0x35,0x32,0x35,0x32,0x35,0x32,
+ 0x35,0x32,0x31,0x38,0x31,0x38,0x22,0x2c,0x0a,0x22,0x3a,0x20,0x20,0x63,
+ 0x20,0x23,0x34,0x32,0x34,0x32,0x34,0x32,0x34,0x32,0x33,0x31,0x33,0x31,
+ 0x22,0x2c,0x0a,0x22,0x3e,0x20,0x20,0x63,0x20,0x23,0x34,0x32,0x34,0x32,
+ 0x34,0x32,0x34,0x32,0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,0x22,0x2c,0x20,
+ 0x20,0x63,0x20,0x23,0x34,0x32,0x34,0x32,0x34,0x61,0x34,0x61,0x33,0x31,
+ 0x33,0x31,0x22,0x2c,0x0a,0x22,0x3c,0x20,0x20,0x63,0x20,0x23,0x35,0x32,
+ 0x35,0x32,0x35,0x61,0x35,0x61,0x32,0x31,0x32,0x31,0x22,0x2c,0x0a,0x22,
+ 0x31,0x20,0x20,0x63,0x20,0x23,0x36,0x33,0x36,0x33,0x35,0x32,0x35,0x32,
+ 0x30,0x30,0x30,0x30,0x22,0x2c,0x0a,0x22,0x32,0x20,0x20,0x63,0x20,0x23,
+ 0x36,0x33,0x36,0x33,0x35,0x61,0x35,0x61,0x30,0x38,0x30,0x38,0x22,0x2c,
+ 0x0a,0x22,0x33,0x20,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,0x35,0x61,
+ 0x35,0x61,0x30,0x30,0x30,0x30,0x22,0x2c,0x0a,0x22,0x34,0x20,0x20,0x63,
+ 0x20,0x23,0x36,0x62,0x36,0x62,0x35,0x61,0x35,0x61,0x31,0x30,0x31,0x30,
+ 0x22,0x2c,0x0a,0x22,0x35,0x20,0x20,0x63,0x20,0x23,0x37,0x33,0x37,0x33,
+ 0x37,0x33,0x37,0x33,0x31,0x38,0x31,0x38,0x22,0x2c,0x0a,0x22,0x36,0x20,
+ 0x20,0x63,0x20,0x23,0x36,0x33,0x36,0x33,0x36,0x62,0x36,0x62,0x32,0x31,
+ 0x32,0x31,0x22,0x2c,0x0a,0x22,0x37,0x20,0x20,0x63,0x20,0x23,0x36,0x62,
+ 0x36,0x62,0x37,0x33,0x37,0x33,0x32,0x31,0x32,0x31,0x22,0x2c,0x0a,0x22,
+ 0x38,0x20,0x20,0x63,0x20,0x23,0x37,0x33,0x37,0x33,0x37,0x33,0x37,0x33,
+ 0x32,0x39,0x32,0x39,0x22,0x2c,0x0a,0x22,0x39,0x20,0x20,0x63,0x20,0x23,
+ 0x37,0x33,0x37,0x33,0x37,0x62,0x37,0x62,0x32,0x39,0x32,0x39,0x22,0x2c,
+ 0x0a,0x22,0x30,0x20,0x20,0x63,0x20,0x23,0x37,0x62,0x37,0x62,0x37,0x62,
+ 0x37,0x62,0x32,0x31,0x32,0x31,0x22,0x2c,0x0a,0x22,0x71,0x20,0x20,0x63,
+ 0x20,0x23,0x37,0x62,0x37,0x62,0x37,0x62,0x37,0x62,0x32,0x39,0x32,0x39,
+ 0x22,0x2c,0x0a,0x22,0x77,0x20,0x20,0x63,0x20,0x23,0x34,0x32,0x34,0x32,
+ 0x34,0x61,0x34,0x61,0x34,0x61,0x34,0x61,0x22,0x2c,0x0a,0x22,0x65,0x20,
+ 0x20,0x63,0x20,0x23,0x34,0x61,0x34,0x61,0x34,0x32,0x34,0x32,0x34,0x32,
+ 0x34,0x32,0x22,0x2c,0x0a,0x22,0x72,0x20,0x20,0x63,0x20,0x47,0x72,0x61,
+ 0x79,0x32,0x39,0x22,0x2c,0x0a,0x22,0x74,0x20,0x20,0x63,0x20,0x23,0x34,
+ 0x61,0x34,0x61,0x35,0x32,0x35,0x32,0x35,0x32,0x35,0x32,0x22,0x2c,0x0a,
+ 0x22,0x79,0x20,0x20,0x63,0x20,0x23,0x35,0x32,0x35,0x32,0x34,0x61,0x34,
+ 0x61,0x34,0x61,0x34,0x61,0x22,0x2c,0x0a,0x22,0x75,0x20,0x20,0x63,0x20,
+ 0x23,0x35,0x61,0x35,0x61,0x35,0x32,0x35,0x32,0x34,0x61,0x34,0x61,0x22,
+ 0x2c,0x0a,0x22,0x69,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x33,0x32,
+ 0x22,0x2c,0x0a,0x22,0x70,0x20,0x20,0x63,0x20,0x23,0x35,0x61,0x35,0x61,
+ 0x35,0x61,0x35,0x61,0x35,0x32,0x35,0x32,0x22,0x2c,0x0a,0x22,0x61,0x20,
+ 0x20,0x63,0x20,0x23,0x35,0x32,0x35,0x32,0x36,0x33,0x36,0x33,0x35,0x61,
+ 0x35,0x61,0x22,0x2c,0x0a,0x22,0x73,0x20,0x20,0x63,0x20,0x23,0x36,0x33,
+ 0x36,0x33,0x36,0x33,0x36,0x33,0x35,0x61,0x35,0x61,0x22,0x2c,0x0a,0x22,
+ 0x64,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x33,0x39,0x22,0x2c,0x0a,
+ 0x22,0x66,0x20,0x20,0x63,0x20,0x23,0x36,0x33,0x36,0x33,0x36,0x62,0x36,
+ 0x62,0x36,0x33,0x36,0x33,0x22,0x2c,0x0a,0x22,0x67,0x20,0x20,0x63,0x20,
+ 0x23,0x36,0x62,0x36,0x62,0x36,0x62,0x36,0x62,0x36,0x33,0x36,0x33,0x22,
+ 0x2c,0x0a,0x22,0x68,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x34,0x32,
+ 0x22,0x2c,0x0a,0x22,0x6a,0x20,0x20,0x63,0x20,0x23,0x37,0x33,0x37,0x33,
+ 0x36,0x62,0x36,0x62,0x36,0x33,0x36,0x33,0x22,0x2c,0x0a,0x22,0x6b,0x20,
+ 0x20,0x63,0x20,0x23,0x37,0x33,0x37,0x33,0x36,0x62,0x36,0x62,0x36,0x62,
+ 0x36,0x62,0x22,0x2c,0x0a,0x22,0x6c,0x20,0x20,0x63,0x20,0x23,0x37,0x62,
+ 0x37,0x62,0x37,0x33,0x37,0x33,0x36,0x62,0x36,0x62,0x22,0x2c,0x0a,0x22,
+ 0x7a,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x34,0x35,0x22,0x2c,0x0a,
+ 0x22,0x78,0x20,0x20,0x63,0x20,0x23,0x37,0x62,0x37,0x62,0x37,0x33,0x37,
+ 0x33,0x37,0x33,0x37,0x33,0x22,0x2c,0x0a,0x22,0x63,0x20,0x20,0x63,0x20,
+ 0x23,0x37,0x62,0x37,0x62,0x37,0x62,0x37,0x62,0x37,0x33,0x37,0x33,0x22,
+ 0x2c,0x0a,0x22,0x76,0x20,0x20,0x63,0x20,0x23,0x37,0x62,0x37,0x62,0x37,
+ 0x62,0x37,0x62,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x62,0x20,0x20,
+ 0x63,0x20,0x23,0x37,0x62,0x37,0x62,0x38,0x34,0x38,0x34,0x37,0x62,0x37,
+ 0x62,0x22,0x2c,0x0a,0x22,0x6e,0x20,0x20,0x63,0x20,0x23,0x38,0x63,0x38,
+ 0x63,0x37,0x62,0x37,0x62,0x30,0x38,0x30,0x38,0x22,0x2c,0x0a,0x22,0x6d,
+ 0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,0x34,0x37,0x62,0x37,0x62,0x31,
+ 0x38,0x31,0x38,0x22,0x2c,0x0a,0x22,0x4d,0x20,0x20,0x63,0x20,0x23,0x38,
+ 0x63,0x38,0x63,0x37,0x62,0x37,0x62,0x31,0x30,0x31,0x30,0x22,0x2c,0x0a,
+ 0x22,0x4e,0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,0x34,0x37,0x62,0x37,
+ 0x62,0x37,0x33,0x37,0x33,0x22,0x2c,0x0a,0x22,0x42,0x20,0x20,0x63,0x20,
+ 0x23,0x38,0x63,0x38,0x63,0x38,0x34,0x38,0x34,0x31,0x38,0x31,0x38,0x22,
+ 0x2c,0x0a,0x22,0x56,0x20,0x20,0x63,0x20,0x23,0x39,0x34,0x39,0x34,0x38,
+ 0x34,0x38,0x34,0x30,0x38,0x30,0x38,0x22,0x2c,0x0a,0x22,0x43,0x20,0x20,
+ 0x63,0x20,0x23,0x38,0x34,0x38,0x34,0x38,0x34,0x38,0x34,0x32,0x39,0x32,
+ 0x39,0x22,0x2c,0x0a,0x22,0x5a,0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,
+ 0x34,0x38,0x34,0x38,0x34,0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,0x22,0x41,
+ 0x20,0x20,0x63,0x20,0x23,0x39,0x34,0x39,0x34,0x38,0x34,0x38,0x34,0x32,
+ 0x31,0x32,0x31,0x22,0x2c,0x0a,0x22,0x53,0x20,0x20,0x63,0x20,0x23,0x61,
+ 0x35,0x61,0x35,0x39,0x34,0x39,0x34,0x32,0x31,0x32,0x31,0x22,0x2c,0x0a,
+ 0x22,0x44,0x20,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x39,0x63,0x39,
+ 0x63,0x32,0x31,0x32,0x31,0x22,0x2c,0x0a,0x22,0x46,0x20,0x20,0x63,0x20,
+ 0x23,0x62,0x35,0x62,0x35,0x61,0x35,0x61,0x35,0x30,0x38,0x30,0x38,0x22,
+ 0x2c,0x0a,0x22,0x47,0x20,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x61,
+ 0x35,0x61,0x35,0x31,0x38,0x31,0x38,0x22,0x2c,0x0a,0x22,0x48,0x20,0x20,
+ 0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x61,0x35,0x61,0x35,0x32,0x31,0x32,
+ 0x31,0x22,0x2c,0x0a,0x22,0x4a,0x20,0x20,0x63,0x20,0x23,0x62,0x64,0x62,
+ 0x64,0x61,0x64,0x61,0x64,0x32,0x39,0x32,0x39,0x22,0x2c,0x0a,0x22,0x4b,
+ 0x20,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x61,0x64,0x61,0x64,0x33,
+ 0x31,0x33,0x31,0x22,0x2c,0x0a,0x22,0x4c,0x20,0x20,0x63,0x20,0x23,0x38,
+ 0x63,0x38,0x63,0x39,0x34,0x39,0x34,0x35,0x32,0x35,0x32,0x22,0x2c,0x0a,
+ 0x22,0x50,0x20,0x20,0x63,0x20,0x23,0x39,0x34,0x39,0x34,0x39,0x34,0x39,
+ 0x34,0x34,0x61,0x34,0x61,0x22,0x2c,0x0a,0x22,0x49,0x20,0x20,0x63,0x20,
+ 0x23,0x39,0x34,0x39,0x34,0x39,0x34,0x39,0x34,0x35,0x32,0x35,0x32,0x22,
+ 0x2c,0x0a,0x22,0x55,0x20,0x20,0x63,0x20,0x23,0x39,0x34,0x39,0x34,0x39,
+ 0x63,0x39,0x63,0x35,0x61,0x35,0x61,0x22,0x2c,0x0a,0x22,0x59,0x20,0x20,
+ 0x63,0x20,0x23,0x38,0x63,0x38,0x63,0x38,0x63,0x38,0x63,0x36,0x62,0x36,
+ 0x62,0x22,0x2c,0x0a,0x22,0x54,0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,
+ 0x34,0x38,0x34,0x38,0x34,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x52,
+ 0x20,0x20,0x63,0x20,0x23,0x38,0x63,0x38,0x63,0x38,0x34,0x38,0x34,0x37,
+ 0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x45,0x20,0x20,0x63,0x20,0x23,0x39,
+ 0x63,0x39,0x63,0x39,0x63,0x39,0x63,0x36,0x33,0x36,0x33,0x22,0x2c,0x0a,
+ 0x22,0x57,0x20,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,0x39,0x63,0x39,
+ 0x63,0x36,0x62,0x36,0x62,0x22,0x2c,0x0a,0x22,0x51,0x20,0x20,0x63,0x20,
+ 0x23,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x37,0x33,0x37,0x33,0x22,
+ 0x2c,0x0a,0x22,0x21,0x20,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x62,
+ 0x64,0x62,0x64,0x32,0x31,0x32,0x31,0x22,0x2c,0x0a,0x22,0x7e,0x20,0x20,
+ 0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x62,0x35,0x62,0x35,0x33,0x31,0x33,
+ 0x31,0x22,0x2c,0x0a,0x22,0x5e,0x20,0x20,0x63,0x20,0x23,0x63,0x36,0x63,
+ 0x36,0x62,0x35,0x62,0x35,0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,0x22,0x2f,
+ 0x20,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x63,0x36,0x63,0x36,0x33,
+ 0x31,0x33,0x31,0x22,0x2c,0x0a,0x22,0x28,0x20,0x20,0x63,0x20,0x23,0x64,
+ 0x36,0x64,0x36,0x63,0x36,0x63,0x36,0x33,0x31,0x33,0x31,0x22,0x2c,0x0a,
+ 0x22,0x29,0x20,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x64,0x36,0x64,
+ 0x36,0x31,0x38,0x31,0x38,0x22,0x2c,0x0a,0x22,0x5f,0x20,0x20,0x63,0x20,
+ 0x23,0x66,0x37,0x66,0x37,0x64,0x65,0x64,0x65,0x31,0x38,0x31,0x38,0x22,
+ 0x2c,0x0a,0x22,0x60,0x20,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x64,
+ 0x36,0x64,0x36,0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,0x22,0x27,0x20,0x20,
+ 0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x64,0x65,0x64,0x65,0x33,0x31,0x33,
+ 0x31,0x22,0x2c,0x0a,0x22,0x5d,0x20,0x20,0x63,0x20,0x23,0x65,0x66,0x65,
+ 0x66,0x64,0x65,0x64,0x65,0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,0x22,0x5b,
+ 0x20,0x20,0x63,0x20,0x23,0x66,0x37,0x66,0x37,0x65,0x37,0x65,0x37,0x31,
+ 0x38,0x31,0x38,0x22,0x2c,0x0a,0x22,0x7b,0x20,0x20,0x63,0x20,0x23,0x66,
+ 0x66,0x66,0x66,0x65,0x37,0x65,0x37,0x31,0x38,0x31,0x38,0x22,0x2c,0x0a,
+ 0x22,0x7d,0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,0x34,0x38,0x34,0x38,
+ 0x34,0x38,0x34,0x38,0x34,0x22,0x2c,0x0a,0x22,0x7c,0x20,0x20,0x63,0x20,
+ 0x23,0x38,0x34,0x38,0x34,0x38,0x63,0x38,0x63,0x38,0x34,0x38,0x34,0x22,
+ 0x2c,0x0a,0x22,0x20,0x2e,0x20,0x63,0x20,0x23,0x38,0x63,0x38,0x63,0x38,
+ 0x34,0x38,0x34,0x38,0x34,0x38,0x34,0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x20,
+ 0x63,0x20,0x23,0x38,0x63,0x38,0x63,0x38,0x63,0x38,0x63,0x38,0x34,0x38,
+ 0x34,0x22,0x2c,0x0a,0x22,0x58,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,
+ 0x35,0x35,0x22,0x2c,0x0a,0x22,0x6f,0x2e,0x20,0x63,0x20,0x23,0x39,0x34,
+ 0x39,0x34,0x38,0x63,0x38,0x63,0x38,0x34,0x38,0x34,0x22,0x2c,0x0a,0x22,
+ 0x4f,0x2e,0x20,0x63,0x20,0x23,0x39,0x34,0x39,0x34,0x39,0x34,0x39,0x34,
+ 0x38,0x34,0x38,0x34,0x22,0x2c,0x0a,0x22,0x2b,0x2e,0x20,0x63,0x20,0x23,
+ 0x39,0x34,0x39,0x34,0x39,0x34,0x39,0x34,0x38,0x63,0x38,0x63,0x22,0x2c,
+ 0x0a,0x22,0x40,0x2e,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,0x39,0x34,
+ 0x39,0x34,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,0x23,0x2e,0x20,0x63,
+ 0x20,0x23,0x39,0x63,0x39,0x63,0x39,0x63,0x39,0x63,0x38,0x63,0x38,0x63,
+ 0x22,0x2c,0x0a,0x22,0x24,0x2e,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,
+ 0x39,0x63,0x39,0x63,0x39,0x34,0x39,0x34,0x22,0x2c,0x0a,0x22,0x25,0x2e,
+ 0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x36,0x31,0x22,0x2c,0x0a,0x22,0x26,
+ 0x2e,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,0x61,0x35,0x61,0x35,0x39,
+ 0x63,0x39,0x63,0x22,0x2c,0x0a,0x22,0x2a,0x2e,0x20,0x63,0x20,0x23,0x39,
+ 0x63,0x39,0x63,0x61,0x64,0x61,0x64,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,
+ 0x22,0x3d,0x2e,0x20,0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x39,0x34,0x39,
+ 0x34,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,0x2d,0x2e,0x20,0x63,0x20,
+ 0x23,0x61,0x35,0x61,0x35,0x39,0x63,0x39,0x63,0x39,0x34,0x39,0x34,0x22,
+ 0x2c,0x0a,0x22,0x3b,0x2e,0x20,0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x39,
+ 0x63,0x39,0x63,0x39,0x63,0x39,0x63,0x22,0x2c,0x0a,0x22,0x3a,0x2e,0x20,
+ 0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x39,0x63,0x39,
+ 0x63,0x22,0x2c,0x0a,0x22,0x3e,0x2e,0x20,0x63,0x20,0x23,0x61,0x64,0x61,
+ 0x64,0x61,0x35,0x61,0x35,0x39,0x63,0x39,0x63,0x22,0x2c,0x0a,0x22,0x2c,
+ 0x2e,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x61,0x35,0x61,0x35,0x39,
+ 0x63,0x39,0x63,0x22,0x2c,0x0a,0x22,0x3c,0x2e,0x20,0x63,0x20,0x23,0x61,
+ 0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,
+ 0x22,0x31,0x2e,0x20,0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x61,0x64,0x61,
+ 0x64,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x32,0x2e,0x20,0x63,0x20,
+ 0x23,0x61,0x35,0x61,0x35,0x61,0x64,0x61,0x64,0x61,0x64,0x61,0x64,0x22,
+ 0x2c,0x0a,0x22,0x33,0x2e,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x61,
+ 0x64,0x61,0x64,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x34,0x2e,0x20,
+ 0x63,0x20,0x47,0x72,0x61,0x79,0x36,0x38,0x22,0x2c,0x0a,0x22,0x35,0x2e,
+ 0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x62,0x35,0x62,0x35,0x61,0x64,
+ 0x61,0x64,0x22,0x2c,0x0a,0x22,0x36,0x2e,0x20,0x63,0x20,0x23,0x61,0x35,
+ 0x61,0x35,0x62,0x64,0x62,0x64,0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,
+ 0x37,0x2e,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x62,0x35,0x62,0x35,
+ 0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,0x38,0x2e,0x20,0x63,0x20,0x23,
+ 0x62,0x35,0x62,0x35,0x61,0x64,0x61,0x64,0x61,0x35,0x61,0x35,0x22,0x2c,
+ 0x0a,0x22,0x39,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x37,0x31,0x22,
+ 0x2c,0x0a,0x22,0x30,0x2e,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x62,
+ 0x64,0x62,0x64,0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,0x71,0x2e,0x20,
+ 0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x62,0x35,0x62,0x35,0x62,0x35,0x62,
+ 0x35,0x22,0x2c,0x0a,0x22,0x77,0x2e,0x20,0x63,0x20,0x23,0x62,0x64,0x62,
+ 0x64,0x62,0x64,0x62,0x64,0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,0x65,
+ 0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x37,0x34,0x22,0x2c,0x0a,0x22,
+ 0x72,0x2e,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x63,0x36,0x63,0x36,
+ 0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x74,0x2e,0x20,0x63,0x20,0x23,
+ 0x62,0x64,0x62,0x64,0x63,0x36,0x63,0x36,0x62,0x64,0x62,0x64,0x22,0x2c,
+ 0x0a,0x22,0x79,0x2e,0x20,0x63,0x20,0x23,0x63,0x30,0x63,0x30,0x63,0x30,
+ 0x63,0x30,0x63,0x30,0x63,0x30,0x22,0x2c,0x0a,0x22,0x75,0x2e,0x20,0x63,
+ 0x20,0x23,0x63,0x36,0x63,0x36,0x64,0x36,0x64,0x36,0x63,0x65,0x63,0x65,
+ 0x22,0x2c,0x0a,0x22,0x69,0x2e,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,
+ 0x64,0x65,0x64,0x65,0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,0x22,0x70,0x2e,
+ 0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x64,0x65,0x64,0x65,0x64,0x36,
+ 0x64,0x36,0x22,0x2c,0x0a,0x22,0x61,0x2e,0x20,0x63,0x20,0x23,0x64,0x36,
+ 0x64,0x36,0x65,0x37,0x65,0x37,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,
+ 0x73,0x2e,0x20,0x63,0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x2f,0x2a,
+ 0x20,0x70,0x69,0x78,0x65,0x6c,0x73,0x20,0x2a,0x2f,0x0a,0x22,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x33,0x2e,0x25,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x22,0x2c,0x0a,0x22,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x39,0x2e,0x65,0x2e,0x7c,0x20,
+ 0x34,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x22,0x2c,0x0a,0x22,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x65,0x2e,
+ 0x3a,0x2e,0x70,0x2e,0x26,0x2e,0x67,0x20,0x65,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x22,0x2c,
+ 0x0a,0x22,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x3c,0x2e,0x32,0x2e,0x35,0x2e,0x52,0x20,0x74,0x20,
+ 0x7d,0x20,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x22,0x2c,0x0a,0x22,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x39,0x2e,0x26,0x2e,0x36,0x2e,
+ 0x26,0x2e,0x20,0x2e,0x64,0x20,0x74,0x20,0x25,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x22,0x2c,0x0a,0x22,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x65,0x2e,
+ 0x3b,0x2e,0x3e,0x2e,0x31,0x2e,0x69,0x2e,0x26,0x2e,0x6c,0x20,0x70,0x20,
+ 0x79,0x20,0x39,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x22,0x2c,0x0a,0x22,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x25,0x2e,0x2d,0x2e,0x2d,0x2e,0x33,0x2e,0x61,0x2e,
+ 0x3e,0x2e,0x4e,0x20,0x73,0x20,0x65,0x20,0x64,0x20,0x65,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x22,0x2c,0x0a,0x22,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x34,0x2e,0x7c,0x20,0x36,0x2e,
+ 0x74,0x2e,0x32,0x2e,0x3a,0x2e,0x3a,0x2e,0x4e,0x20,0x69,0x20,0x61,0x20,
+ 0x77,0x20,0x58,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x22,0x2c,0x0a,0x22,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x65,0x2e,
+ 0x2b,0x2e,0x2a,0x2e,0x72,0x2e,0x35,0x2e,0x31,0x2e,0x25,0x2e,0x2e,0x2e,
+ 0x62,0x20,0x73,0x20,0x66,0x20,0x61,0x20,0x3d,0x20,0x3c,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x22,0x2c,0x0a,0x22,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x65,0x2e,0x24,0x2e,0x3d,0x2e,0x3e,0x2e,0x40,0x2e,0x3b,0x2e,
+ 0x30,0x2e,0x75,0x2e,0x2d,0x2e,0x3a,0x2e,0x6b,0x20,0x6a,0x20,0x75,0x20,
+ 0x2a,0x20,0x72,0x20,0x39,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x22,0x2c,
+ 0x0a,0x22,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x34,0x2e,0x6f,0x2e,0x31,0x2e,
+ 0x38,0x2e,0x3e,0x2e,0x33,0x2e,0x75,0x2e,0x61,0x2e,0x2c,0x2e,0x38,0x2e,
+ 0x78,0x20,0x67,0x20,0x67,0x20,0x79,0x20,0x3d,0x20,0x7d,0x20,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x22,0x2c,0x0a,0x22,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x65,0x2e,0x37,0x2e,0x31,0x2e,0x76,0x20,0x6b,0x20,0x7a,0x20,0x62,0x20,
+ 0x54,0x20,0x52,0x20,0x63,0x20,0x73,0x20,0x3a,0x20,0x2a,0x20,0x7a,0x20,
+ 0x34,0x2e,0x65,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x22,0x2c,0x0a,0x22,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x39,0x2e,0x34,0x20,
+ 0x31,0x20,0x2d,0x20,0x24,0x20,0x2b,0x20,0x4f,0x20,0x4f,0x20,0x2e,0x20,
+ 0x4f,0x20,0x58,0x20,0x63,0x20,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x22,0x2c,0x0a,0x22,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x77,0x2e,0x21,0x20,0x5b,0x20,0x5d,0x20,0x60,0x20,0x2f,0x20,
+ 0x44,0x20,0x4d,0x20,0x32,0x20,0x40,0x20,0x4f,0x20,0x63,0x20,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x22,0x2c,0x0a,0x22,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x65,0x2e,0x7e,0x20,0x29,0x20,
+ 0x27,0x20,0x5d,0x20,0x5d,0x20,0x28,0x20,0x48,0x20,0x56,0x20,0x33,0x20,
+ 0x40,0x20,0x63,0x20,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x22,0x2c,0x0a,0x22,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x65,0x2e,0x7e,0x20,0x29,0x20,0x27,0x20,0x4b,0x20,0x41,0x20,0x53,0x20,
+ 0x47,0x20,0x4d,0x20,0x31,0x20,0x40,0x20,0x76,0x20,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x22,0x2c,0x0a,0x22,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x65,0x2e,0x5e,0x20,0x5f,0x20,0x44,0x20,
+ 0x4f,0x20,0x20,0x20,0x4f,0x20,0x34,0x20,0x6e,0x20,0x32,0x20,0x24,0x20,
+ 0x54,0x20,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x22,0x2c,
+ 0x0a,0x22,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x71,0x2e,
+ 0x4a,0x20,0x5f,0x20,0x6d,0x20,0x20,0x20,0x4f,0x20,0x58,0x20,0x40,0x20,
+ 0x4d,0x20,0x33,0x20,0x23,0x20,0x3e,0x20,0x68,0x20,0x76,0x20,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x22,0x2c,0x0a,0x22,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x65,0x2e,0x59,0x20,0x46,0x20,0x7b,0x20,0x42,0x20,0x20,0x20,
+ 0x58,0x20,0x20,0x20,0x25,0x20,0x4d,0x20,0x33,0x20,0x40,0x20,0x2e,0x20,
+ 0x4f,0x20,0x2c,0x20,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x22,0x2c,0x0a,0x22,
+ 0x73,0x2e,0x73,0x2e,0x73,0x2e,0x74,0x2e,0x4f,0x2e,0x36,0x20,0x42,0x20,
+ 0x29,0x20,0x42,0x20,0x6f,0x20,0x26,0x20,0x3c,0x20,0x30,0x20,0x6e,0x20,
+ 0x32,0x20,0x2d,0x20,0x3b,0x20,0x39,0x20,0x59,0x20,0x73,0x2e,0x73,0x2e,
+ 0x73,0x2e,0x22,0x2c,0x0a,0x22,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x23,0x2e,
+ 0x37,0x20,0x39,0x20,0x71,0x20,0x43,0x20,0x43,0x20,0x38,0x20,0x39,0x20,
+ 0x39,0x20,0x39,0x20,0x35,0x20,0x38,0x20,0x71,0x20,0x43,0x20,0x71,0x20,
+ 0x4f,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,0x22,0x2c,0x0a,0x22,0x73,0x2e,
+ 0x73,0x2e,0x73,0x2e,0x51,0x20,0x57,0x20,0x57,0x20,0x57,0x20,0x45,0x20,
+ 0x45,0x20,0x55,0x20,0x55,0x20,0x4c,0x20,0x49,0x20,0x4c,0x20,0x50,0x20,
+ 0x50,0x20,0x50,0x20,0x5a,0x20,0x3a,0x2e,0x73,0x2e,0x73,0x2e,0x73,0x2e,
+ 0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_image_xpm_len = 5406;
+static const unsigned char small_image_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x31,0x39,0x38,0x20,0x32,0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x63,
+ 0x20,0x47,0x72,0x61,0x79,0x33,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x20,0x63,
+ 0x20,0x23,0x30,0x38,0x30,0x38,0x30,0x38,0x30,0x38,0x31,0x30,0x31,0x30,
+ 0x22,0x2c,0x0a,0x22,0x58,0x20,0x20,0x63,0x20,0x23,0x31,0x30,0x31,0x30,
+ 0x31,0x30,0x31,0x30,0x31,0x30,0x31,0x30,0x22,0x2c,0x0a,0x22,0x6f,0x20,
+ 0x20,0x63,0x20,0x23,0x31,0x30,0x31,0x30,0x31,0x38,0x31,0x38,0x31,0x38,
+ 0x31,0x38,0x22,0x2c,0x0a,0x22,0x4f,0x20,0x20,0x63,0x20,0x23,0x31,0x38,
+ 0x31,0x38,0x31,0x38,0x31,0x38,0x31,0x38,0x31,0x38,0x22,0x2c,0x0a,0x22,
+ 0x2b,0x20,0x20,0x63,0x20,0x23,0x31,0x38,0x31,0x38,0x31,0x38,0x31,0x38,
+ 0x32,0x31,0x32,0x31,0x22,0x2c,0x0a,0x22,0x40,0x20,0x20,0x63,0x20,0x23,
+ 0x31,0x38,0x31,0x38,0x32,0x31,0x32,0x31,0x32,0x31,0x32,0x31,0x22,0x2c,
+ 0x0a,0x22,0x23,0x20,0x20,0x63,0x20,0x23,0x31,0x38,0x31,0x38,0x32,0x31,
+ 0x32,0x31,0x32,0x39,0x32,0x39,0x22,0x2c,0x0a,0x22,0x24,0x20,0x20,0x63,
+ 0x20,0x23,0x32,0x39,0x32,0x39,0x32,0x31,0x32,0x31,0x31,0x30,0x31,0x30,
+ 0x22,0x2c,0x0a,0x22,0x25,0x20,0x20,0x63,0x20,0x23,0x32,0x39,0x32,0x39,
+ 0x32,0x31,0x32,0x31,0x31,0x38,0x31,0x38,0x22,0x2c,0x0a,0x22,0x26,0x20,
+ 0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x31,0x33,0x22,0x2c,0x0a,0x22,0x2a,
+ 0x20,0x20,0x63,0x20,0x23,0x32,0x31,0x32,0x31,0x32,0x31,0x32,0x31,0x32,
+ 0x39,0x32,0x39,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x31,0x36,0x22,0x2c,0x0a,0x22,0x2d,0x20,0x20,0x63,0x20,0x23,
+ 0x33,0x31,0x33,0x31,0x33,0x31,0x33,0x31,0x33,0x31,0x33,0x31,0x22,0x2c,
+ 0x0a,0x22,0x3b,0x20,0x20,0x63,0x20,0x23,0x33,0x31,0x33,0x31,0x33,0x39,
+ 0x33,0x39,0x34,0x32,0x34,0x32,0x22,0x2c,0x0a,0x22,0x3a,0x20,0x20,0x63,
+ 0x20,0x23,0x33,0x39,0x33,0x39,0x34,0x32,0x34,0x32,0x34,0x32,0x34,0x32,
+ 0x22,0x2c,0x0a,0x22,0x3e,0x20,0x20,0x63,0x20,0x23,0x34,0x32,0x34,0x32,
+ 0x33,0x31,0x33,0x31,0x32,0x39,0x32,0x39,0x22,0x2c,0x0a,0x22,0x2c,0x20,
+ 0x20,0x63,0x20,0x23,0x34,0x32,0x34,0x32,0x34,0x32,0x34,0x32,0x33,0x31,
+ 0x33,0x31,0x22,0x2c,0x0a,0x22,0x3c,0x20,0x20,0x63,0x20,0x23,0x34,0x32,
+ 0x34,0x32,0x34,0x32,0x34,0x32,0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,0x22,
+ 0x31,0x20,0x20,0x63,0x20,0x23,0x34,0x61,0x34,0x61,0x34,0x32,0x34,0x32,
+ 0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,0x22,0x32,0x20,0x20,0x63,0x20,0x23,
+ 0x34,0x61,0x34,0x61,0x34,0x61,0x34,0x61,0x33,0x31,0x33,0x31,0x22,0x2c,
+ 0x0a,0x22,0x33,0x20,0x20,0x63,0x20,0x23,0x34,0x61,0x34,0x61,0x34,0x61,
+ 0x34,0x61,0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,0x22,0x34,0x20,0x20,0x63,
+ 0x20,0x23,0x36,0x33,0x36,0x33,0x35,0x61,0x35,0x61,0x33,0x39,0x33,0x39,
+ 0x22,0x2c,0x0a,0x22,0x35,0x20,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,
+ 0x35,0x61,0x35,0x61,0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,0x22,0x36,0x20,
+ 0x20,0x63,0x20,0x23,0x34,0x61,0x34,0x61,0x34,0x61,0x34,0x61,0x34,0x32,
+ 0x34,0x32,0x22,0x2c,0x0a,0x22,0x37,0x20,0x20,0x63,0x20,0x47,0x72,0x61,
+ 0x79,0x32,0x39,0x22,0x2c,0x0a,0x22,0x38,0x20,0x20,0x63,0x20,0x23,0x35,
+ 0x32,0x35,0x32,0x34,0x61,0x34,0x61,0x34,0x61,0x34,0x61,0x22,0x2c,0x0a,
+ 0x22,0x39,0x20,0x20,0x63,0x20,0x23,0x35,0x61,0x35,0x61,0x34,0x61,0x34,
+ 0x61,0x34,0x32,0x34,0x32,0x22,0x2c,0x0a,0x22,0x30,0x20,0x20,0x63,0x20,
+ 0x23,0x35,0x61,0x35,0x61,0x35,0x32,0x35,0x32,0x34,0x61,0x34,0x61,0x22,
+ 0x2c,0x0a,0x22,0x71,0x20,0x20,0x63,0x20,0x23,0x35,0x61,0x35,0x61,0x35,
+ 0x61,0x35,0x61,0x34,0x32,0x34,0x32,0x22,0x2c,0x0a,0x22,0x77,0x20,0x20,
+ 0x63,0x20,0x23,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x34,0x61,0x34,
+ 0x61,0x22,0x2c,0x0a,0x22,0x65,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,
+ 0x33,0x32,0x22,0x2c,0x0a,0x22,0x72,0x20,0x20,0x63,0x20,0x23,0x35,0x61,
+ 0x35,0x61,0x35,0x32,0x35,0x32,0x35,0x32,0x35,0x32,0x22,0x2c,0x0a,0x22,
+ 0x74,0x20,0x20,0x63,0x20,0x23,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x61,
+ 0x35,0x32,0x35,0x32,0x22,0x2c,0x0a,0x22,0x79,0x20,0x20,0x63,0x20,0x23,
+ 0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x22,0x2c,
+ 0x0a,0x22,0x75,0x20,0x20,0x63,0x20,0x23,0x34,0x61,0x34,0x61,0x35,0x32,
+ 0x35,0x32,0x36,0x33,0x36,0x33,0x22,0x2c,0x0a,0x22,0x69,0x20,0x20,0x63,
+ 0x20,0x23,0x36,0x33,0x36,0x33,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x61,
+ 0x22,0x2c,0x0a,0x22,0x70,0x20,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,
+ 0x36,0x62,0x36,0x62,0x35,0x32,0x35,0x32,0x22,0x2c,0x0a,0x22,0x61,0x20,
+ 0x20,0x63,0x20,0x23,0x37,0x33,0x37,0x33,0x36,0x33,0x36,0x33,0x35,0x61,
+ 0x35,0x61,0x22,0x2c,0x0a,0x22,0x73,0x20,0x20,0x63,0x20,0x23,0x37,0x62,
+ 0x37,0x62,0x37,0x33,0x37,0x33,0x35,0x32,0x35,0x32,0x22,0x2c,0x0a,0x22,
+ 0x64,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x33,0x39,0x22,0x2c,0x0a,
+ 0x22,0x66,0x20,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,0x36,0x33,0x36,
+ 0x33,0x36,0x33,0x36,0x33,0x22,0x2c,0x0a,0x22,0x67,0x20,0x20,0x63,0x20,
+ 0x23,0x36,0x62,0x36,0x62,0x36,0x62,0x36,0x62,0x36,0x33,0x36,0x33,0x22,
+ 0x2c,0x0a,0x22,0x68,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x34,0x32,
+ 0x22,0x2c,0x0a,0x22,0x6a,0x20,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,
+ 0x37,0x33,0x37,0x33,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x6b,0x20,
+ 0x20,0x63,0x20,0x23,0x37,0x33,0x37,0x33,0x36,0x62,0x36,0x62,0x36,0x33,
+ 0x36,0x33,0x22,0x2c,0x0a,0x22,0x6c,0x20,0x20,0x63,0x20,0x23,0x37,0x33,
+ 0x37,0x33,0x36,0x62,0x36,0x62,0x36,0x62,0x36,0x62,0x22,0x2c,0x0a,0x22,
+ 0x7a,0x20,0x20,0x63,0x20,0x23,0x37,0x33,0x37,0x33,0x37,0x33,0x37,0x33,
+ 0x36,0x62,0x36,0x62,0x22,0x2c,0x0a,0x22,0x78,0x20,0x20,0x63,0x20,0x23,
+ 0x37,0x62,0x37,0x62,0x37,0x33,0x37,0x33,0x37,0x33,0x37,0x33,0x22,0x2c,
+ 0x0a,0x22,0x63,0x20,0x20,0x63,0x20,0x23,0x37,0x62,0x37,0x62,0x37,0x62,
+ 0x37,0x62,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x76,0x20,0x20,0x63,
+ 0x20,0x23,0x36,0x62,0x36,0x62,0x37,0x33,0x37,0x33,0x38,0x34,0x38,0x34,
+ 0x22,0x2c,0x0a,0x22,0x62,0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,0x34,
+ 0x37,0x62,0x37,0x62,0x35,0x61,0x35,0x61,0x22,0x2c,0x0a,0x22,0x6e,0x20,
+ 0x20,0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x37,0x33,0x37,0x33,0x35,0x32,
+ 0x35,0x32,0x22,0x2c,0x0a,0x22,0x6d,0x20,0x20,0x63,0x20,0x23,0x62,0x35,
+ 0x62,0x35,0x37,0x62,0x37,0x62,0x35,0x32,0x35,0x32,0x22,0x2c,0x0a,0x22,
+ 0x4d,0x20,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,0x38,0x34,0x38,0x34,
+ 0x35,0x32,0x35,0x32,0x22,0x2c,0x0a,0x22,0x4e,0x20,0x20,0x63,0x20,0x23,
+ 0x39,0x63,0x39,0x63,0x38,0x34,0x38,0x34,0x35,0x61,0x35,0x61,0x22,0x2c,
+ 0x0a,0x22,0x42,0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,0x34,0x38,0x34,
+ 0x38,0x34,0x36,0x62,0x36,0x62,0x22,0x2c,0x0a,0x22,0x56,0x20,0x20,0x63,
+ 0x20,0x23,0x38,0x63,0x38,0x63,0x38,0x34,0x38,0x34,0x36,0x62,0x36,0x62,
+ 0x22,0x2c,0x0a,0x22,0x43,0x20,0x20,0x63,0x20,0x23,0x39,0x34,0x39,0x34,
+ 0x38,0x34,0x38,0x34,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x5a,0x20,
+ 0x20,0x63,0x20,0x23,0x39,0x34,0x39,0x34,0x38,0x63,0x38,0x63,0x37,0x62,
+ 0x37,0x62,0x22,0x2c,0x0a,0x22,0x41,0x20,0x20,0x63,0x20,0x23,0x39,0x63,
+ 0x39,0x63,0x38,0x63,0x38,0x63,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,
+ 0x53,0x20,0x20,0x63,0x20,0x23,0x39,0x34,0x39,0x34,0x39,0x34,0x39,0x34,
+ 0x37,0x33,0x37,0x33,0x22,0x2c,0x0a,0x22,0x44,0x20,0x20,0x63,0x20,0x23,
+ 0x39,0x63,0x39,0x63,0x61,0x35,0x61,0x35,0x37,0x62,0x37,0x62,0x22,0x2c,
+ 0x0a,0x22,0x46,0x20,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x38,0x34,
+ 0x38,0x34,0x35,0x61,0x35,0x61,0x22,0x2c,0x0a,0x22,0x47,0x20,0x20,0x63,
+ 0x20,0x23,0x62,0x64,0x62,0x64,0x38,0x63,0x38,0x63,0x35,0x61,0x35,0x61,
+ 0x22,0x2c,0x0a,0x22,0x48,0x20,0x20,0x63,0x20,0x23,0x61,0x35,0x61,0x35,
+ 0x38,0x63,0x38,0x63,0x36,0x33,0x36,0x33,0x22,0x2c,0x0a,0x22,0x4a,0x20,
+ 0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x38,0x63,0x38,0x63,0x36,0x33,
+ 0x36,0x33,0x22,0x2c,0x0a,0x22,0x4b,0x20,0x20,0x63,0x20,0x23,0x61,0x64,
+ 0x61,0x64,0x39,0x63,0x39,0x63,0x36,0x62,0x36,0x62,0x22,0x2c,0x0a,0x22,
+ 0x4c,0x20,0x20,0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x39,0x63,0x39,0x63,
+ 0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x50,0x20,0x20,0x63,0x20,0x23,
+ 0x62,0x64,0x62,0x64,0x61,0x35,0x61,0x35,0x36,0x62,0x36,0x62,0x22,0x2c,
+ 0x0a,0x22,0x49,0x20,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x61,0x35,
+ 0x61,0x35,0x37,0x33,0x37,0x33,0x22,0x2c,0x0a,0x22,0x55,0x20,0x20,0x63,
+ 0x20,0x23,0x62,0x64,0x62,0x64,0x61,0x64,0x61,0x64,0x37,0x33,0x37,0x33,
+ 0x22,0x2c,0x0a,0x22,0x59,0x20,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,
+ 0x61,0x35,0x61,0x35,0x36,0x62,0x36,0x62,0x22,0x2c,0x0a,0x22,0x54,0x20,
+ 0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x61,0x64,0x61,0x64,0x36,0x62,
+ 0x36,0x62,0x22,0x2c,0x0a,0x22,0x52,0x20,0x20,0x63,0x20,0x23,0x63,0x36,
+ 0x63,0x36,0x61,0x64,0x61,0x64,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,
+ 0x45,0x20,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x61,0x64,0x61,0x64,
+ 0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x57,0x20,0x20,0x63,0x20,0x23,
+ 0x63,0x65,0x63,0x65,0x62,0x35,0x62,0x35,0x37,0x33,0x37,0x33,0x22,0x2c,
+ 0x0a,0x22,0x51,0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,0x34,0x38,0x34,
+ 0x38,0x34,0x38,0x34,0x38,0x34,0x22,0x2c,0x0a,0x22,0x21,0x20,0x20,0x63,
+ 0x20,0x23,0x38,0x34,0x38,0x34,0x38,0x34,0x38,0x34,0x38,0x63,0x38,0x63,
+ 0x22,0x2c,0x0a,0x22,0x7e,0x20,0x20,0x63,0x20,0x23,0x38,0x63,0x38,0x63,
+ 0x38,0x63,0x38,0x63,0x38,0x34,0x38,0x34,0x22,0x2c,0x0a,0x22,0x5e,0x20,
+ 0x20,0x63,0x20,0x23,0x38,0x63,0x38,0x63,0x38,0x63,0x38,0x63,0x39,0x34,
+ 0x39,0x34,0x22,0x2c,0x0a,0x22,0x2f,0x20,0x20,0x63,0x20,0x23,0x38,0x63,
+ 0x38,0x63,0x39,0x34,0x39,0x34,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,
+ 0x28,0x20,0x20,0x63,0x20,0x23,0x38,0x63,0x38,0x63,0x39,0x34,0x39,0x34,
+ 0x39,0x63,0x39,0x63,0x22,0x2c,0x0a,0x22,0x29,0x20,0x20,0x63,0x20,0x23,
+ 0x39,0x34,0x39,0x34,0x39,0x34,0x39,0x34,0x38,0x63,0x38,0x63,0x22,0x2c,
+ 0x0a,0x22,0x5f,0x20,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,0x39,0x63,
+ 0x39,0x63,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,0x60,0x20,0x20,0x63,
+ 0x20,0x23,0x39,0x34,0x39,0x34,0x39,0x34,0x39,0x34,0x39,0x63,0x39,0x63,
+ 0x22,0x2c,0x0a,0x22,0x27,0x20,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,
+ 0x39,0x34,0x39,0x34,0x39,0x34,0x39,0x34,0x22,0x2c,0x0a,0x22,0x5d,0x20,
+ 0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x36,0x31,0x22,0x2c,0x0a,0x22,0x5b,
+ 0x20,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,0x61,0x35,0x61,0x35,0x61,
+ 0x64,0x61,0x64,0x22,0x2c,0x0a,0x22,0x7b,0x20,0x20,0x63,0x20,0x23,0x39,
+ 0x63,0x39,0x63,0x61,0x35,0x61,0x35,0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,
+ 0x22,0x7d,0x20,0x20,0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x39,0x34,0x39,
+ 0x34,0x38,0x34,0x38,0x34,0x22,0x2c,0x0a,0x22,0x7c,0x20,0x20,0x63,0x20,
+ 0x23,0x61,0x35,0x61,0x35,0x39,0x63,0x39,0x63,0x38,0x63,0x38,0x63,0x22,
+ 0x2c,0x0a,0x22,0x20,0x2e,0x20,0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x39,
+ 0x63,0x39,0x63,0x39,0x34,0x39,0x34,0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x20,
+ 0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x39,0x63,0x39,0x63,0x39,0x63,0x39,
+ 0x63,0x22,0x2c,0x0a,0x22,0x58,0x2e,0x20,0x63,0x20,0x23,0x61,0x35,0x61,
+ 0x35,0x61,0x35,0x61,0x35,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,0x6f,
+ 0x2e,0x20,0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x39,
+ 0x63,0x39,0x63,0x22,0x2c,0x0a,0x22,0x4f,0x2e,0x20,0x63,0x20,0x23,0x61,
+ 0x64,0x61,0x64,0x61,0x35,0x61,0x35,0x39,0x63,0x39,0x63,0x22,0x2c,0x0a,
+ 0x22,0x2b,0x2e,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x61,0x35,0x61,
+ 0x35,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,0x40,0x2e,0x20,0x63,0x20,
+ 0x23,0x62,0x64,0x62,0x64,0x61,0x64,0x61,0x64,0x39,0x34,0x39,0x34,0x22,
+ 0x2c,0x0a,0x22,0x23,0x2e,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x62,
+ 0x35,0x62,0x35,0x39,0x63,0x39,0x63,0x22,0x2c,0x0a,0x22,0x24,0x2e,0x20,
+ 0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x62,0x64,0x62,0x64,0x39,0x63,0x39,
+ 0x63,0x22,0x2c,0x0a,0x22,0x25,0x2e,0x20,0x63,0x20,0x23,0x61,0x35,0x61,
+ 0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x26,
+ 0x2e,0x20,0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x61,
+ 0x64,0x61,0x64,0x22,0x2c,0x0a,0x22,0x2a,0x2e,0x20,0x63,0x20,0x23,0x61,
+ 0x35,0x61,0x35,0x61,0x64,0x61,0x64,0x61,0x64,0x61,0x64,0x22,0x2c,0x0a,
+ 0x22,0x3d,0x2e,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x61,0x64,0x61,
+ 0x64,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x2d,0x2e,0x20,0x63,0x20,
+ 0x47,0x72,0x61,0x79,0x36,0x38,0x22,0x2c,0x0a,0x22,0x3b,0x2e,0x20,0x63,
+ 0x20,0x23,0x61,0x64,0x61,0x64,0x61,0x64,0x61,0x64,0x62,0x35,0x62,0x35,
+ 0x22,0x2c,0x0a,0x22,0x3a,0x2e,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,
+ 0x61,0x64,0x61,0x64,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x3e,0x2e,
+ 0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x61,0x64,0x61,0x64,0x61,0x64,
+ 0x61,0x64,0x22,0x2c,0x0a,0x22,0x2c,0x2e,0x20,0x63,0x20,0x23,0x62,0x35,
+ 0x62,0x35,0x62,0x35,0x62,0x35,0x61,0x64,0x61,0x64,0x22,0x2c,0x0a,0x22,
+ 0x3c,0x2e,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x62,0x35,0x62,0x35,
+ 0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x31,0x2e,0x20,0x63,0x20,0x23,
+ 0x62,0x64,0x62,0x64,0x62,0x64,0x62,0x64,0x61,0x35,0x61,0x35,0x22,0x2c,
+ 0x0a,0x22,0x32,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x37,0x31,0x22,
+ 0x2c,0x0a,0x22,0x33,0x2e,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x62,
+ 0x64,0x62,0x64,0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,0x34,0x2e,0x20,
+ 0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x62,0x35,0x62,0x35,0x62,0x35,0x62,
+ 0x35,0x22,0x2c,0x0a,0x22,0x35,0x2e,0x20,0x63,0x20,0x23,0x62,0x64,0x62,
+ 0x64,0x62,0x64,0x62,0x64,0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,0x36,
+ 0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x37,0x34,0x22,0x2c,0x0a,0x22,
+ 0x37,0x2e,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x62,0x64,0x62,0x64,
+ 0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x38,0x2e,0x20,0x63,0x20,0x23,
+ 0x62,0x35,0x62,0x35,0x62,0x64,0x62,0x64,0x63,0x36,0x63,0x36,0x22,0x2c,
+ 0x0a,0x22,0x39,0x2e,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x63,0x36,
+ 0x63,0x36,0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,0x30,0x2e,0x20,0x63,
+ 0x20,0x23,0x62,0x64,0x62,0x64,0x63,0x36,0x63,0x36,0x63,0x36,0x63,0x36,
+ 0x22,0x2c,0x0a,0x22,0x71,0x2e,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,
+ 0x62,0x35,0x62,0x35,0x38,0x34,0x38,0x34,0x22,0x2c,0x0a,0x22,0x77,0x2e,
+ 0x20,0x63,0x20,0x23,0x64,0x36,0x64,0x36,0x62,0x64,0x62,0x64,0x38,0x34,
+ 0x38,0x34,0x22,0x2c,0x0a,0x22,0x65,0x2e,0x20,0x63,0x20,0x23,0x64,0x65,
+ 0x64,0x65,0x62,0x64,0x62,0x64,0x38,0x34,0x38,0x34,0x22,0x2c,0x0a,0x22,
+ 0x72,0x2e,0x20,0x63,0x20,0x23,0x64,0x36,0x64,0x36,0x62,0x35,0x62,0x35,
+ 0x39,0x34,0x39,0x34,0x22,0x2c,0x0a,0x22,0x74,0x2e,0x20,0x63,0x20,0x23,
+ 0x64,0x65,0x64,0x65,0x62,0x35,0x62,0x35,0x39,0x34,0x39,0x34,0x22,0x2c,
+ 0x0a,0x22,0x79,0x2e,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x62,0x64,
+ 0x62,0x64,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x75,0x2e,0x20,0x63,
+ 0x20,0x23,0x63,0x65,0x63,0x65,0x62,0x64,0x62,0x64,0x61,0x35,0x61,0x35,
+ 0x22,0x2c,0x0a,0x22,0x69,0x2e,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,
+ 0x62,0x35,0x62,0x35,0x38,0x34,0x38,0x34,0x22,0x2c,0x0a,0x22,0x70,0x2e,
+ 0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x62,0x64,0x62,0x64,0x38,0x34,
+ 0x38,0x34,0x22,0x2c,0x0a,0x22,0x61,0x2e,0x20,0x63,0x20,0x23,0x65,0x66,
+ 0x65,0x66,0x62,0x64,0x62,0x64,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,
+ 0x73,0x2e,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x62,0x35,0x62,0x35,
+ 0x39,0x34,0x39,0x34,0x22,0x2c,0x0a,0x22,0x64,0x2e,0x20,0x63,0x20,0x23,
+ 0x65,0x66,0x65,0x66,0x62,0x64,0x62,0x64,0x39,0x34,0x39,0x34,0x22,0x2c,
+ 0x0a,0x22,0x66,0x2e,0x20,0x63,0x20,0x23,0x66,0x37,0x66,0x37,0x62,0x64,
+ 0x62,0x64,0x38,0x34,0x38,0x34,0x22,0x2c,0x0a,0x22,0x67,0x2e,0x20,0x63,
+ 0x20,0x23,0x66,0x37,0x66,0x37,0x62,0x64,0x62,0x64,0x38,0x63,0x38,0x63,
+ 0x22,0x2c,0x0a,0x22,0x68,0x2e,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,
+ 0x63,0x36,0x63,0x36,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,0x6a,0x2e,
+ 0x20,0x63,0x20,0x23,0x64,0x36,0x64,0x36,0x63,0x36,0x63,0x36,0x38,0x63,
+ 0x38,0x63,0x22,0x2c,0x0a,0x22,0x6b,0x2e,0x20,0x63,0x20,0x23,0x64,0x65,
+ 0x64,0x65,0x64,0x36,0x64,0x36,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,
+ 0x6c,0x2e,0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,0x64,0x36,0x64,0x36,
+ 0x39,0x34,0x39,0x34,0x22,0x2c,0x0a,0x22,0x7a,0x2e,0x20,0x63,0x20,0x23,
+ 0x63,0x36,0x63,0x36,0x63,0x36,0x63,0x36,0x61,0x64,0x61,0x64,0x22,0x2c,
+ 0x0a,0x22,0x78,0x2e,0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,0x64,0x65,
+ 0x64,0x65,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x63,0x2e,0x20,0x63,
+ 0x20,0x23,0x65,0x66,0x65,0x66,0x63,0x36,0x63,0x36,0x38,0x63,0x38,0x63,
+ 0x22,0x2c,0x0a,0x22,0x76,0x2e,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,
+ 0x63,0x36,0x63,0x36,0x39,0x34,0x39,0x34,0x22,0x2c,0x0a,0x22,0x62,0x2e,
+ 0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x64,0x65,0x64,0x65,0x39,0x34,
+ 0x39,0x34,0x22,0x2c,0x0a,0x22,0x6e,0x2e,0x20,0x63,0x20,0x23,0x65,0x37,
+ 0x65,0x37,0x64,0x65,0x64,0x65,0x39,0x63,0x39,0x63,0x22,0x2c,0x0a,0x22,
+ 0x6d,0x2e,0x20,0x63,0x20,0x23,0x66,0x37,0x66,0x37,0x63,0x65,0x63,0x65,
+ 0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,0x4d,0x2e,0x20,0x63,0x20,0x23,
+ 0x66,0x37,0x66,0x37,0x64,0x36,0x64,0x36,0x39,0x63,0x39,0x63,0x22,0x2c,
+ 0x0a,0x22,0x4e,0x2e,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x64,0x65,
+ 0x64,0x65,0x61,0x64,0x61,0x64,0x22,0x2c,0x0a,0x22,0x42,0x2e,0x20,0x63,
+ 0x20,0x23,0x65,0x37,0x65,0x37,0x65,0x37,0x65,0x37,0x61,0x35,0x61,0x35,
+ 0x22,0x2c,0x0a,0x22,0x56,0x2e,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,
+ 0x65,0x37,0x65,0x37,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x43,0x2e,
+ 0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x65,0x37,0x65,0x37,0x61,0x64,
+ 0x61,0x64,0x22,0x2c,0x0a,0x22,0x5a,0x2e,0x20,0x63,0x20,0x23,0x65,0x66,
+ 0x65,0x66,0x65,0x66,0x65,0x66,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,
+ 0x41,0x2e,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x65,0x66,0x65,0x66,
+ 0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,0x53,0x2e,0x20,0x63,0x20,0x23,
+ 0x66,0x37,0x66,0x37,0x65,0x66,0x65,0x66,0x61,0x64,0x61,0x64,0x22,0x2c,
+ 0x0a,0x22,0x44,0x2e,0x20,0x63,0x20,0x23,0x66,0x37,0x66,0x37,0x65,0x66,
+ 0x65,0x66,0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,0x46,0x2e,0x20,0x63,
+ 0x20,0x23,0x66,0x37,0x66,0x37,0x66,0x37,0x66,0x37,0x62,0x35,0x62,0x35,
+ 0x22,0x2c,0x0a,0x22,0x47,0x2e,0x20,0x63,0x20,0x23,0x66,0x37,0x66,0x37,
+ 0x66,0x37,0x66,0x37,0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x48,0x2e,
+ 0x20,0x63,0x20,0x23,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,
+ 0x63,0x30,0x22,0x2c,0x0a,0x22,0x4a,0x2e,0x20,0x63,0x20,0x23,0x63,0x36,
+ 0x63,0x36,0x63,0x36,0x63,0x36,0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,
+ 0x4b,0x2e,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x63,0x36,0x63,0x36,
+ 0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x4c,0x2e,0x20,0x63,0x20,0x23,
+ 0x63,0x36,0x63,0x36,0x63,0x65,0x63,0x65,0x63,0x65,0x63,0x65,0x22,0x2c,
+ 0x0a,0x22,0x50,0x2e,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x63,0x36,
+ 0x63,0x36,0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x49,0x2e,0x20,0x63,
+ 0x20,0x23,0x63,0x65,0x63,0x65,0x63,0x65,0x63,0x65,0x63,0x36,0x63,0x36,
+ 0x22,0x2c,0x0a,0x22,0x55,0x2e,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,
+ 0x63,0x65,0x63,0x65,0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x59,0x2e,
+ 0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x64,0x36,0x64,0x36,0x63,0x65,
+ 0x63,0x65,0x22,0x2c,0x0a,0x22,0x54,0x2e,0x20,0x63,0x20,0x23,0x63,0x65,
+ 0x63,0x65,0x64,0x36,0x64,0x36,0x64,0x65,0x64,0x65,0x22,0x2c,0x0a,0x22,
+ 0x52,0x2e,0x20,0x63,0x20,0x23,0x64,0x36,0x64,0x36,0x63,0x65,0x63,0x65,
+ 0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x45,0x2e,0x20,0x63,0x20,0x23,
+ 0x64,0x36,0x64,0x36,0x64,0x36,0x64,0x36,0x63,0x36,0x63,0x36,0x22,0x2c,
+ 0x0a,0x22,0x57,0x2e,0x20,0x63,0x20,0x23,0x64,0x36,0x64,0x36,0x64,0x36,
+ 0x64,0x36,0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x51,0x2e,0x20,0x63,
+ 0x20,0x23,0x64,0x65,0x64,0x65,0x64,0x36,0x64,0x36,0x63,0x36,0x63,0x36,
+ 0x22,0x2c,0x0a,0x22,0x21,0x2e,0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,
+ 0x64,0x36,0x64,0x36,0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x7e,0x2e,
+ 0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,0x64,0x65,0x64,0x65,0x63,0x36,
+ 0x63,0x36,0x22,0x2c,0x0a,0x22,0x5e,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,
+ 0x79,0x38,0x34,0x22,0x2c,0x0a,0x22,0x2f,0x2e,0x20,0x63,0x20,0x23,0x64,
+ 0x36,0x64,0x36,0x64,0x65,0x64,0x65,0x64,0x65,0x64,0x65,0x22,0x2c,0x0a,
+ 0x22,0x28,0x2e,0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,0x64,0x36,0x64,
+ 0x36,0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,0x22,0x29,0x2e,0x20,0x63,0x20,
+ 0x23,0x64,0x65,0x64,0x65,0x64,0x65,0x64,0x65,0x64,0x36,0x64,0x36,0x22,
+ 0x2c,0x0a,0x22,0x5f,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x38,0x37,
+ 0x22,0x2c,0x0a,0x22,0x60,0x2e,0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,
+ 0x64,0x65,0x64,0x65,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,0x27,0x2e,
+ 0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x65,0x37,0x65,0x37,0x64,0x65,
+ 0x64,0x65,0x22,0x2c,0x0a,0x22,0x5d,0x2e,0x20,0x63,0x20,0x23,0x65,0x66,
+ 0x65,0x66,0x65,0x37,0x65,0x37,0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,0x22,
+ 0x5b,0x2e,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x65,0x37,0x65,0x37,
+ 0x64,0x65,0x64,0x65,0x22,0x2c,0x0a,0x22,0x7b,0x2e,0x20,0x63,0x20,0x23,
+ 0x66,0x37,0x66,0x37,0x66,0x37,0x66,0x37,0x64,0x36,0x64,0x36,0x22,0x2c,
+ 0x0a,0x22,0x7d,0x2e,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x66,0x66,
+ 0x66,0x66,0x64,0x65,0x64,0x65,0x22,0x2c,0x0a,0x22,0x7c,0x2e,0x20,0x63,
+ 0x20,0x23,0x65,0x37,0x65,0x37,0x65,0x37,0x65,0x37,0x65,0x37,0x65,0x37,
+ 0x22,0x2c,0x0a,0x22,0x20,0x58,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,
+ 0x65,0x37,0x65,0x37,0x65,0x66,0x65,0x66,0x22,0x2c,0x0a,0x22,0x2e,0x58,
+ 0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x65,0x66,0x65,0x66,0x65,0x66,
+ 0x65,0x66,0x22,0x2c,0x0a,0x22,0x58,0x58,0x20,0x63,0x20,0x23,0x65,0x66,
+ 0x65,0x66,0x65,0x66,0x65,0x66,0x65,0x66,0x65,0x66,0x22,0x2c,0x0a,0x22,
+ 0x6f,0x58,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x65,0x66,0x65,0x66,
+ 0x66,0x37,0x66,0x37,0x22,0x2c,0x0a,0x22,0x4f,0x58,0x20,0x63,0x20,0x23,
+ 0x65,0x66,0x65,0x66,0x65,0x66,0x65,0x66,0x66,0x37,0x66,0x37,0x22,0x2c,
+ 0x0a,0x22,0x2b,0x58,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x66,0x37,
+ 0x66,0x37,0x66,0x37,0x66,0x37,0x22,0x2c,0x0a,0x22,0x40,0x58,0x20,0x63,
+ 0x20,0x23,0x66,0x37,0x66,0x37,0x65,0x66,0x65,0x66,0x65,0x66,0x65,0x66,
+ 0x22,0x2c,0x0a,0x22,0x23,0x58,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x39,
+ 0x37,0x22,0x2c,0x0a,0x22,0x24,0x58,0x20,0x63,0x20,0x23,0x66,0x37,0x66,
+ 0x37,0x66,0x37,0x66,0x37,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x25,
+ 0x58,0x20,0x63,0x20,0x23,0x66,0x37,0x66,0x37,0x66,0x66,0x66,0x66,0x66,
+ 0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x26,0x58,0x20,0x63,0x20,0x23,0x66,
+ 0x66,0x66,0x66,0x66,0x37,0x66,0x37,0x66,0x37,0x66,0x37,0x22,0x2c,0x0a,
+ 0x22,0x2a,0x58,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x66,0x66,0x66,
+ 0x66,0x66,0x37,0x66,0x37,0x22,0x2c,0x0a,0x22,0x3d,0x58,0x20,0x63,0x20,
+ 0x47,0x72,0x61,0x79,0x31,0x30,0x30,0x22,0x2c,0x0a,0x22,0x2d,0x58,0x20,
+ 0x63,0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x2f,0x2a,0x20,0x70,0x69,
+ 0x78,0x65,0x6c,0x73,0x20,0x2a,0x2f,0x0a,0x22,0x75,0x2e,0x63,0x2e,0x6e,
+ 0x2e,0x78,0x2e,0x42,0x2e,0x41,0x2e,0x41,0x2e,0x53,0x2e,0x44,0x2e,0x46,
+ 0x2e,0x47,0x2e,0x46,0x2e,0x53,0x2e,0x4d,0x2e,0x70,0x2e,0x67,0x2e,0x5a,
+ 0x2e,0x56,0x2e,0x42,0x2e,0x6e,0x2e,0x5a,0x2e,0x4e,0x2e,0x22,0x2c,0x0a,
+ 0x22,0x72,0x2e,0x57,0x20,0x3c,0x20,0x30,0x20,0x5a,0x20,0x52,0x2e,0x57,
+ 0x2e,0x3d,0x2e,0x45,0x2e,0x3b,0x2e,0x5f,0x20,0x21,0x2e,0x57,0x2e,0x5d,
+ 0x2e,0x5b,0x2e,0x5b,0x2e,0x5b,0x2e,0x27,0x2e,0x59,0x2e,0x2f,0x20,0x44,
+ 0x20,0x43,0x2e,0x22,0x2c,0x0a,0x22,0x74,0x2e,0x55,0x20,0x40,0x20,0x2b,
+ 0x20,0x36,0x20,0x51,0x20,0x25,0x2e,0x32,0x2e,0x30,0x2e,0x32,0x2e,0x2d,
+ 0x2e,0x4a,0x2e,0x4b,0x2e,0x60,0x2e,0x3d,0x58,0x3d,0x58,0x3d,0x58,0x3d,
+ 0x58,0x3d,0x58,0x4f,0x58,0x7e,0x2e,0x78,0x2e,0x22,0x2c,0x0a,0x22,0x73,
+ 0x2e,0x50,0x20,0x2a,0x20,0x4f,0x20,0x6b,0x20,0x5e,0x2e,0x26,0x58,0x23,
+ 0x58,0x58,0x58,0x60,0x2e,0x5e,0x2e,0x4a,0x2e,0x33,0x2e,0x32,0x2e,0x29,
+ 0x2e,0x3d,0x58,0x3d,0x58,0x3d,0x58,0x3d,0x58,0x3d,0x58,0x7d,0x2e,0x6e,
+ 0x2e,0x22,0x2c,0x0a,0x22,0x74,0x2e,0x47,0x20,0x2a,0x20,0x26,0x20,0x3d,
+ 0x20,0x6b,0x20,0x57,0x2e,0x7c,0x2e,0x7c,0x2e,0x58,0x58,0x7c,0x2e,0x5e,
+ 0x2e,0x4a,0x2e,0x26,0x2e,0x5d,0x20,0x51,0x20,0x7e,0x20,0x3e,0x2e,0x5e,
+ 0x2e,0x58,0x58,0x7b,0x2e,0x6c,0x2e,0x22,0x2c,0x0a,0x22,0x73,0x2e,0x6d,
+ 0x20,0x2a,0x20,0x4f,0x20,0x4f,0x20,0x2d,0x20,0x37,0x20,0x65,0x20,0x6c,
+ 0x20,0x2e,0x2e,0x49,0x2e,0x3d,0x58,0x3d,0x58,0x2b,0x58,0x4a,0x2e,0x6a,
+ 0x20,0x2b,0x20,0x20,0x20,0x58,0x20,0x2b,0x20,0x73,0x20,0x56,0x2e,0x22,
+ 0x2c,0x0a,0x22,0x64,0x2e,0x4a,0x20,0x25,0x20,0x51,0x20,0x21,0x20,0x72,
+ 0x20,0x63,0x20,0x7a,0x20,0x2d,0x2e,0x2a,0x2e,0x78,0x20,0x5b,0x2e,0x3d,
+ 0x58,0x58,0x58,0x5e,0x2e,0x4c,0x2e,0x60,0x20,0x35,0x2e,0x28,0x20,0x3a,
+ 0x20,0x71,0x20,0x6e,0x2e,0x22,0x2c,0x0a,0x22,0x76,0x2e,0x4a,0x20,0x6f,
+ 0x20,0x43,0x20,0x2a,0x58,0x2e,0x58,0x40,0x58,0x3d,0x58,0x3d,0x58,0x25,
+ 0x58,0x60,0x20,0x51,0x2e,0x3d,0x58,0x3d,0x58,0x3d,0x58,0x3d,0x58,0x3d,
+ 0x58,0x3d,0x58,0x3d,0x58,0x3d,0x58,0x59,0x2e,0x42,0x2e,0x22,0x2c,0x0a,
+ 0x22,0x61,0x2e,0x46,0x20,0x40,0x20,0x3d,0x20,0x6b,0x20,0x2c,0x2e,0x5e,
+ 0x2e,0x55,0x2e,0x3d,0x58,0x37,0x2e,0x37,0x20,0x51,0x2e,0x3d,0x58,0x3d,
+ 0x58,0x3d,0x58,0x3d,0x58,0x3d,0x58,0x3d,0x58,0x3d,0x58,0x24,0x58,0x39,
+ 0x2e,0x6c,0x2e,0x22,0x2c,0x0a,0x22,0x67,0x2e,0x6e,0x20,0x40,0x20,0x26,
+ 0x20,0x72,0x20,0x3a,0x2e,0x5f,0x2e,0x30,0x2e,0x55,0x2e,0x75,0x20,0x25,
+ 0x20,0x20,0x2e,0x2f,0x2e,0x36,0x2e,0x29,0x2e,0x3d,0x58,0x3d,0x58,0x3d,
+ 0x58,0x3d,0x58,0x6f,0x58,0x7e,0x20,0x6b,0x2e,0x22,0x2c,0x0a,0x22,0x69,
+ 0x2e,0x4e,0x20,0x2e,0x20,0x61,0x20,0x40,0x58,0x25,0x58,0x20,0x58,0x36,
+ 0x2e,0x2d,0x2e,0x6a,0x20,0x64,0x20,0x69,0x20,0x4f,0x2e,0x7c,0x2e,0x26,
+ 0x58,0x3d,0x58,0x3d,0x58,0x2b,0x58,0x23,0x58,0x7b,0x20,0x77,0x20,0x62,
+ 0x2e,0x22,0x2c,0x0a,0x22,0x66,0x2e,0x4d,0x20,0x38,0x20,0x21,0x2e,0x25,
+ 0x58,0x5d,0x20,0x68,0x20,0x79,0x20,0x29,0x20,0x25,0x2e,0x6f,0x2e,0x23,
+ 0x58,0x3d,0x58,0x7c,0x2e,0x55,0x2e,0x4a,0x2e,0x55,0x2e,0x28,0x2e,0x5b,
+ 0x20,0x23,0x20,0x32,0x20,0x56,0x2e,0x22,0x2c,0x0a,0x22,0x66,0x2e,0x71,
+ 0x2e,0x29,0x2e,0x23,0x58,0x23,0x58,0x54,0x2e,0x21,0x20,0x52,0x2e,0x3d,
+ 0x58,0x3d,0x58,0x3b,0x2e,0x2e,0x2e,0x5e,0x20,0x65,0x20,0x66,0x20,0x7e,
+ 0x20,0x50,0x2e,0x7c,0x2e,0x7c,0x2e,0x76,0x20,0x2c,0x20,0x5a,0x2e,0x22,
+ 0x2c,0x0a,0x22,0x6d,0x2e,0x4b,0x20,0x3a,0x20,0x78,0x20,0x34,0x2e,0x5b,
+ 0x20,0x5f,0x20,0x40,0x58,0x3d,0x58,0x3d,0x58,0x3d,0x58,0x25,0x58,0x24,
+ 0x58,0x60,0x2e,0x5b,0x20,0x68,0x20,0x3d,0x2e,0x38,0x2e,0x63,0x20,0x3b,
+ 0x20,0x33,0x20,0x4e,0x2e,0x22,0x2c,0x0a,0x22,0x59,0x20,0x4e,0x20,0x34,
+ 0x20,0x62,0x20,0x53,0x20,0x56,0x20,0x58,0x2e,0x24,0x2e,0x23,0x2e,0x3c,
+ 0x2e,0x7a,0x2e,0x79,0x2e,0x31,0x2e,0x7c,0x20,0x39,0x20,0x35,0x20,0x4c,
+ 0x20,0x7c,0x20,0x42,0x20,0x77,0x20,0x70,0x20,0x68,0x2e,0x22,0x2c,0x0a,
+ 0x22,0x26,0x2e,0x25,0x2e,0x25,0x2e,0x25,0x2e,0x25,0x2e,0x25,0x2e,0x7e,
+ 0x20,0x24,0x20,0x51,0x20,0x25,0x2e,0x3c,0x20,0x31,0x20,0x25,0x2e,0x67,
+ 0x20,0x3e,0x20,0x27,0x20,0x2e,0x2e,0x5d,0x20,0x5d,0x20,0x5d,0x20,0x5d,
+ 0x20,0x6f,0x2e,0x22,0x2c,0x0a,0x22,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x2d,
+ 0x58,0x2d,0x58,0x2d,0x58,0x3c,0x2e,0x48,0x20,0x35,0x2e,0x2d,0x58,0x36,
+ 0x20,0x79,0x20,0x2d,0x58,0x3e,0x2e,0x54,0x20,0x3d,0x2e,0x2d,0x58,0x2d,
+ 0x58,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x22,0x2c,0x0a,0x22,0x2d,
+ 0x58,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x36,0x2e,0x6a,0x2e,0x7d,
+ 0x20,0x2d,0x58,0x2d,0x58,0x38,0x20,0x69,0x20,0x2d,0x58,0x36,0x2e,0x65,
+ 0x2e,0x40,0x2e,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x2d,
+ 0x58,0x22,0x2c,0x0a,0x22,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x2d,
+ 0x58,0x35,0x2e,0x57,0x20,0x25,0x2e,0x2d,0x58,0x2d,0x58,0x38,0x20,0x69,
+ 0x20,0x2d,0x58,0x2d,0x58,0x40,0x2e,0x57,0x20,0x36,0x2e,0x2d,0x58,0x2d,
+ 0x58,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x22,0x2c,0x0a,0x22,0x2d,0x58,0x2d,
+ 0x58,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x79,0x2e,0x49,0x20,0x32,0x2e,0x2d,
+ 0x58,0x2d,0x58,0x38,0x20,0x69,0x20,0x2d,0x58,0x2d,0x58,0x2c,0x2e,0x65,
+ 0x2e,0x3d,0x2e,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x22,
+ 0x2c,0x0a,0x22,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x36,0x2e,0x6a,
+ 0x2e,0x41,0x20,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x38,0x20,0x69,0x20,0x2d,
+ 0x58,0x2d,0x58,0x35,0x2e,0x77,0x2e,0x2b,0x2e,0x2d,0x58,0x2d,0x58,0x2d,
+ 0x58,0x2d,0x58,0x2d,0x58,0x22,0x2c,0x0a,0x22,0x2d,0x58,0x2d,0x58,0x2d,
+ 0x58,0x2d,0x58,0x35,0x2e,0x45,0x20,0x2e,0x2e,0x2d,0x58,0x2d,0x58,0x2d,
+ 0x58,0x74,0x20,0x67,0x20,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x40,0x2e,0x52,
+ 0x20,0x36,0x2e,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x2d,0x58,0x22,0x0a,0x7d,
+ 0x3b,0x0a
+};
+
+static const unsigned int small_layout_xpm_len = 3179;
+static const unsigned char small_layout_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x39,0x33,0x20,0x32,0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x63,0x20,
+ 0x23,0x32,0x31,0x32,0x31,0x30,0x38,0x30,0x38,0x30,0x30,0x30,0x30,0x22,
+ 0x2c,0x0a,0x22,0x2e,0x20,0x20,0x63,0x20,0x23,0x32,0x39,0x32,0x39,0x30,
+ 0x38,0x30,0x38,0x30,0x30,0x30,0x30,0x22,0x2c,0x0a,0x22,0x58,0x20,0x20,
+ 0x63,0x20,0x23,0x33,0x31,0x33,0x31,0x30,0x38,0x30,0x38,0x30,0x30,0x30,
+ 0x30,0x22,0x2c,0x0a,0x22,0x6f,0x20,0x20,0x63,0x20,0x23,0x33,0x31,0x33,
+ 0x31,0x30,0x38,0x30,0x38,0x30,0x38,0x30,0x38,0x22,0x2c,0x0a,0x22,0x4f,
+ 0x20,0x20,0x63,0x20,0x23,0x33,0x31,0x33,0x31,0x31,0x30,0x31,0x30,0x30,
+ 0x38,0x30,0x38,0x22,0x2c,0x0a,0x22,0x2b,0x20,0x20,0x63,0x20,0x23,0x33,
+ 0x31,0x33,0x31,0x31,0x30,0x31,0x30,0x31,0x30,0x31,0x30,0x22,0x2c,0x0a,
+ 0x22,0x40,0x20,0x20,0x63,0x20,0x23,0x33,0x31,0x33,0x31,0x31,0x38,0x31,
+ 0x38,0x31,0x30,0x31,0x30,0x22,0x2c,0x0a,0x22,0x23,0x20,0x20,0x63,0x20,
+ 0x23,0x33,0x39,0x33,0x39,0x31,0x38,0x31,0x38,0x31,0x30,0x31,0x30,0x22,
+ 0x2c,0x0a,0x22,0x24,0x20,0x20,0x63,0x20,0x23,0x33,0x39,0x33,0x39,0x32,
+ 0x31,0x32,0x31,0x31,0x38,0x31,0x38,0x22,0x2c,0x0a,0x22,0x25,0x20,0x20,
+ 0x63,0x20,0x23,0x34,0x32,0x34,0x32,0x32,0x39,0x32,0x39,0x32,0x31,0x32,
+ 0x31,0x22,0x2c,0x0a,0x22,0x26,0x20,0x20,0x63,0x20,0x23,0x34,0x61,0x34,
+ 0x61,0x33,0x31,0x33,0x31,0x32,0x39,0x32,0x39,0x22,0x2c,0x0a,0x22,0x2a,
+ 0x20,0x20,0x63,0x20,0x23,0x34,0x61,0x34,0x61,0x33,0x31,0x33,0x31,0x33,
+ 0x31,0x33,0x31,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x20,0x63,0x20,0x23,0x35,
+ 0x32,0x35,0x32,0x33,0x39,0x33,0x39,0x33,0x31,0x33,0x31,0x22,0x2c,0x0a,
+ 0x22,0x2d,0x20,0x20,0x63,0x20,0x23,0x36,0x33,0x36,0x33,0x31,0x30,0x31,
+ 0x30,0x30,0x30,0x30,0x30,0x22,0x2c,0x0a,0x22,0x3b,0x20,0x20,0x63,0x20,
+ 0x23,0x36,0x62,0x36,0x62,0x31,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x22,
+ 0x2c,0x0a,0x22,0x3a,0x20,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,0x31,
+ 0x30,0x31,0x30,0x30,0x38,0x30,0x38,0x22,0x2c,0x0a,0x22,0x3e,0x20,0x20,
+ 0x63,0x20,0x23,0x36,0x62,0x36,0x62,0x31,0x38,0x31,0x38,0x30,0x38,0x30,
+ 0x38,0x22,0x2c,0x0a,0x22,0x2c,0x20,0x20,0x63,0x20,0x23,0x37,0x33,0x37,
+ 0x33,0x31,0x38,0x31,0x38,0x30,0x38,0x30,0x38,0x22,0x2c,0x0a,0x22,0x3c,
+ 0x20,0x20,0x63,0x20,0x23,0x36,0x33,0x36,0x33,0x32,0x31,0x32,0x31,0x31,
+ 0x30,0x31,0x30,0x22,0x2c,0x0a,0x22,0x31,0x20,0x20,0x63,0x20,0x23,0x36,
+ 0x62,0x36,0x62,0x32,0x31,0x32,0x31,0x31,0x30,0x31,0x30,0x22,0x2c,0x0a,
+ 0x22,0x32,0x20,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,0x32,0x39,0x32,
+ 0x39,0x31,0x38,0x31,0x38,0x22,0x2c,0x0a,0x22,0x33,0x20,0x20,0x63,0x20,
+ 0x23,0x37,0x33,0x37,0x33,0x32,0x31,0x32,0x31,0x31,0x30,0x31,0x30,0x22,
+ 0x2c,0x0a,0x22,0x34,0x20,0x20,0x63,0x20,0x23,0x37,0x33,0x37,0x33,0x33,
+ 0x31,0x33,0x31,0x32,0x39,0x32,0x39,0x22,0x2c,0x0a,0x22,0x35,0x20,0x20,
+ 0x63,0x20,0x23,0x37,0x62,0x37,0x62,0x33,0x31,0x33,0x31,0x32,0x39,0x32,
+ 0x39,0x22,0x2c,0x0a,0x22,0x36,0x20,0x20,0x63,0x20,0x23,0x37,0x62,0x37,
+ 0x62,0x34,0x32,0x34,0x32,0x33,0x31,0x33,0x31,0x22,0x2c,0x0a,0x22,0x37,
+ 0x20,0x20,0x63,0x20,0x23,0x36,0x33,0x36,0x33,0x35,0x32,0x35,0x32,0x34,
+ 0x61,0x34,0x61,0x22,0x2c,0x0a,0x22,0x38,0x20,0x20,0x63,0x20,0x23,0x37,
+ 0x33,0x37,0x33,0x36,0x33,0x36,0x33,0x36,0x33,0x36,0x33,0x22,0x2c,0x0a,
+ 0x22,0x39,0x20,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x33,0x39,0x33,
+ 0x39,0x32,0x31,0x32,0x31,0x22,0x2c,0x0a,0x22,0x30,0x20,0x20,0x63,0x20,
+ 0x23,0x62,0x35,0x62,0x35,0x33,0x39,0x33,0x39,0x32,0x39,0x32,0x39,0x22,
+ 0x2c,0x0a,0x22,0x71,0x20,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x33,
+ 0x39,0x33,0x39,0x32,0x31,0x32,0x31,0x22,0x2c,0x0a,0x22,0x77,0x20,0x20,
+ 0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x33,0x39,0x33,0x39,0x32,0x39,0x32,
+ 0x39,0x22,0x2c,0x0a,0x22,0x65,0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,
+ 0x34,0x34,0x32,0x34,0x32,0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,0x22,0x72,
+ 0x20,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x34,0x32,0x34,0x32,0x33,
+ 0x31,0x33,0x31,0x22,0x2c,0x0a,0x22,0x74,0x20,0x20,0x63,0x20,0x23,0x62,
+ 0x64,0x62,0x64,0x34,0x32,0x34,0x32,0x32,0x39,0x32,0x39,0x22,0x2c,0x0a,
+ 0x22,0x79,0x20,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x34,0x32,0x34,
+ 0x32,0x33,0x31,0x33,0x31,0x22,0x2c,0x0a,0x22,0x75,0x20,0x20,0x63,0x20,
+ 0x23,0x62,0x35,0x62,0x35,0x34,0x61,0x34,0x61,0x33,0x31,0x33,0x31,0x22,
+ 0x2c,0x0a,0x22,0x69,0x20,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x34,
+ 0x61,0x34,0x61,0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,0x22,0x70,0x20,0x20,
+ 0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x34,0x32,0x34,0x32,0x33,0x31,0x33,
+ 0x31,0x22,0x2c,0x0a,0x22,0x61,0x20,0x20,0x63,0x20,0x23,0x62,0x64,0x62,
+ 0x64,0x34,0x61,0x34,0x61,0x33,0x31,0x33,0x31,0x22,0x2c,0x0a,0x22,0x73,
+ 0x20,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x34,0x61,0x34,0x61,0x33,
+ 0x39,0x33,0x39,0x22,0x2c,0x0a,0x22,0x64,0x20,0x20,0x63,0x20,0x23,0x38,
+ 0x63,0x38,0x63,0x35,0x32,0x35,0x32,0x34,0x61,0x34,0x61,0x22,0x2c,0x0a,
+ 0x22,0x66,0x20,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x35,0x32,0x35,
+ 0x32,0x34,0x32,0x34,0x32,0x22,0x2c,0x0a,0x22,0x67,0x20,0x20,0x63,0x20,
+ 0x23,0x62,0x35,0x62,0x35,0x35,0x32,0x35,0x32,0x34,0x32,0x34,0x32,0x22,
+ 0x2c,0x0a,0x22,0x68,0x20,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x35,
+ 0x32,0x35,0x32,0x34,0x61,0x34,0x61,0x22,0x2c,0x0a,0x22,0x6a,0x20,0x20,
+ 0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x35,0x32,0x35,0x32,0x34,0x32,0x34,
+ 0x32,0x22,0x2c,0x0a,0x22,0x6b,0x20,0x20,0x63,0x20,0x23,0x62,0x64,0x62,
+ 0x64,0x35,0x32,0x35,0x32,0x34,0x61,0x34,0x61,0x22,0x2c,0x0a,0x22,0x6c,
+ 0x20,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x36,0x33,0x36,0x33,0x35,
+ 0x32,0x35,0x32,0x22,0x2c,0x0a,0x22,0x7a,0x20,0x20,0x63,0x20,0x23,0x61,
+ 0x64,0x61,0x64,0x36,0x62,0x36,0x62,0x35,0x61,0x35,0x61,0x22,0x2c,0x0a,
+ 0x22,0x78,0x20,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x36,0x33,0x36,
+ 0x33,0x35,0x32,0x35,0x32,0x22,0x2c,0x0a,0x22,0x63,0x20,0x20,0x63,0x20,
+ 0x23,0x61,0x64,0x61,0x64,0x37,0x33,0x37,0x33,0x36,0x33,0x36,0x33,0x22,
+ 0x2c,0x0a,0x22,0x76,0x20,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x36,
+ 0x62,0x36,0x62,0x36,0x33,0x36,0x33,0x22,0x2c,0x0a,0x22,0x62,0x20,0x20,
+ 0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x37,0x62,0x37,0x62,0x37,0x33,0x37,
+ 0x33,0x22,0x2c,0x0a,0x22,0x6e,0x20,0x20,0x63,0x20,0x23,0x63,0x36,0x63,
+ 0x36,0x34,0x32,0x34,0x32,0x32,0x39,0x32,0x39,0x22,0x2c,0x0a,0x22,0x6d,
+ 0x20,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x34,0x32,0x34,0x32,0x33,
+ 0x31,0x33,0x31,0x22,0x2c,0x0a,0x22,0x4d,0x20,0x20,0x63,0x20,0x23,0x63,
+ 0x65,0x63,0x65,0x34,0x32,0x34,0x32,0x33,0x31,0x33,0x31,0x22,0x2c,0x0a,
+ 0x22,0x4e,0x20,0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,0x36,0x62,0x36,
+ 0x62,0x35,0x61,0x35,0x61,0x22,0x2c,0x0a,0x22,0x42,0x20,0x20,0x63,0x20,
+ 0x23,0x64,0x65,0x64,0x65,0x37,0x62,0x37,0x62,0x36,0x62,0x36,0x62,0x22,
+ 0x2c,0x0a,0x22,0x56,0x20,0x20,0x63,0x20,0x23,0x66,0x37,0x66,0x37,0x35,
+ 0x61,0x35,0x61,0x34,0x32,0x34,0x32,0x22,0x2c,0x0a,0x22,0x43,0x20,0x20,
+ 0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x35,0x61,0x35,0x61,0x34,0x32,0x34,
+ 0x32,0x22,0x2c,0x0a,0x22,0x5a,0x20,0x20,0x63,0x20,0x23,0x65,0x66,0x65,
+ 0x66,0x36,0x33,0x36,0x33,0x34,0x61,0x34,0x61,0x22,0x2c,0x0a,0x22,0x41,
+ 0x20,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x36,0x62,0x36,0x62,0x35,
+ 0x61,0x35,0x61,0x22,0x2c,0x0a,0x22,0x53,0x20,0x20,0x63,0x20,0x23,0x65,
+ 0x66,0x65,0x66,0x36,0x62,0x36,0x62,0x35,0x61,0x35,0x61,0x22,0x2c,0x0a,
+ 0x22,0x44,0x20,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x36,0x33,0x36,
+ 0x33,0x34,0x32,0x34,0x32,0x22,0x2c,0x0a,0x22,0x46,0x20,0x20,0x63,0x20,
+ 0x23,0x66,0x66,0x66,0x66,0x36,0x33,0x36,0x33,0x34,0x61,0x34,0x61,0x22,
+ 0x2c,0x0a,0x22,0x47,0x20,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x36,
+ 0x62,0x36,0x62,0x34,0x61,0x34,0x61,0x22,0x2c,0x0a,0x22,0x48,0x20,0x20,
+ 0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x36,0x62,0x36,0x62,0x35,0x32,0x35,
+ 0x32,0x22,0x2c,0x0a,0x22,0x4a,0x20,0x20,0x63,0x20,0x23,0x66,0x37,0x66,
+ 0x37,0x37,0x33,0x37,0x33,0x35,0x61,0x35,0x61,0x22,0x2c,0x0a,0x22,0x4b,
+ 0x20,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x37,0x33,0x37,0x33,0x35,
+ 0x32,0x35,0x32,0x22,0x2c,0x0a,0x22,0x4c,0x20,0x20,0x63,0x20,0x23,0x66,
+ 0x66,0x66,0x66,0x37,0x33,0x37,0x33,0x35,0x61,0x35,0x61,0x22,0x2c,0x0a,
+ 0x22,0x50,0x20,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x37,0x33,0x37,
+ 0x33,0x36,0x33,0x36,0x33,0x22,0x2c,0x0a,0x22,0x49,0x20,0x20,0x63,0x20,
+ 0x23,0x65,0x37,0x65,0x37,0x37,0x62,0x37,0x62,0x36,0x33,0x36,0x33,0x22,
+ 0x2c,0x0a,0x22,0x55,0x20,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x37,
+ 0x62,0x37,0x62,0x36,0x33,0x36,0x33,0x22,0x2c,0x0a,0x22,0x59,0x20,0x20,
+ 0x63,0x20,0x23,0x66,0x37,0x66,0x37,0x37,0x62,0x37,0x62,0x36,0x33,0x36,
+ 0x33,0x22,0x2c,0x0a,0x22,0x54,0x20,0x20,0x63,0x20,0x23,0x66,0x37,0x66,
+ 0x37,0x37,0x62,0x37,0x62,0x36,0x62,0x36,0x62,0x22,0x2c,0x0a,0x22,0x52,
+ 0x20,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x37,0x62,0x37,0x62,0x36,
+ 0x33,0x36,0x33,0x22,0x2c,0x0a,0x22,0x45,0x20,0x20,0x63,0x20,0x23,0x62,
+ 0x35,0x62,0x35,0x38,0x34,0x38,0x34,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,
+ 0x22,0x57,0x20,0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,0x38,0x34,0x38,
+ 0x34,0x37,0x33,0x37,0x33,0x22,0x2c,0x0a,0x22,0x51,0x20,0x20,0x63,0x20,
+ 0x23,0x65,0x37,0x65,0x37,0x38,0x34,0x38,0x34,0x36,0x62,0x36,0x62,0x22,
+ 0x2c,0x0a,0x22,0x21,0x20,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x38,
+ 0x63,0x38,0x63,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x7e,0x20,0x20,
+ 0x63,0x20,0x23,0x66,0x37,0x66,0x37,0x38,0x34,0x38,0x34,0x36,0x62,0x36,
+ 0x62,0x22,0x2c,0x0a,0x22,0x5e,0x20,0x20,0x63,0x20,0x23,0x66,0x66,0x66,
+ 0x66,0x38,0x34,0x38,0x34,0x36,0x33,0x36,0x33,0x22,0x2c,0x0a,0x22,0x2f,
+ 0x20,0x20,0x63,0x20,0x23,0x66,0x66,0x66,0x66,0x38,0x34,0x38,0x34,0x36,
+ 0x62,0x36,0x62,0x22,0x2c,0x0a,0x22,0x28,0x20,0x20,0x63,0x20,0x23,0x66,
+ 0x37,0x66,0x37,0x38,0x34,0x38,0x34,0x37,0x33,0x37,0x33,0x22,0x2c,0x0a,
+ 0x22,0x29,0x20,0x20,0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x61,0x35,0x61,
+ 0x35,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x5f,0x20,0x20,0x63,0x20,
+ 0x47,0x72,0x61,0x79,0x36,0x38,0x22,0x2c,0x0a,0x22,0x60,0x20,0x20,0x63,
+ 0x20,0x47,0x72,0x61,0x79,0x37,0x31,0x22,0x2c,0x0a,0x22,0x27,0x20,0x20,
+ 0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x62,0x35,0x62,0x35,0x62,0x35,0x62,
+ 0x35,0x22,0x2c,0x0a,0x22,0x5d,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,
+ 0x37,0x34,0x22,0x2c,0x0a,0x22,0x5b,0x20,0x20,0x63,0x20,0x23,0x64,0x65,
+ 0x64,0x65,0x39,0x34,0x39,0x34,0x38,0x34,0x38,0x34,0x22,0x2c,0x0a,0x22,
+ 0x7b,0x20,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x62,0x64,0x62,0x64,
+ 0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x7d,0x20,0x20,0x63,0x20,0x23,
+ 0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x22,0x2c,
+ 0x0a,0x22,0x7c,0x20,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x63,0x36,
+ 0x63,0x36,0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x20,0x63,
+ 0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x2f,0x2a,0x20,0x70,0x69,0x78,
+ 0x65,0x6c,0x73,0x20,0x2a,0x2f,0x0a,0x22,0x20,0x2e,0x6a,0x20,0x71,0x20,
+ 0x77,0x20,0x77,0x20,0x77,0x20,0x77,0x20,0x71,0x20,0x71,0x20,0x70,0x20,
+ 0x5d,0x20,0x5d,0x20,0x67,0x20,0x71,0x20,0x71,0x20,0x77,0x20,0x71,0x20,
+ 0x77,0x20,0x71,0x20,0x71,0x20,0x73,0x20,0x20,0x2e,0x22,0x2c,0x0a,0x22,
+ 0x20,0x2e,0x59,0x20,0x4c,0x20,0x4b,0x20,0x4c,0x20,0x4b,0x20,0x4c,0x20,
+ 0x4b,0x20,0x4c,0x20,0x4a,0x20,0x5d,0x20,0x7b,0x20,0x50,0x20,0x48,0x20,
+ 0x48,0x20,0x48,0x20,0x48,0x20,0x48,0x20,0x48,0x20,0x47,0x20,0x4a,0x20,
+ 0x20,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x54,0x20,0x52,0x20,0x52,0x20,
+ 0x52,0x20,0x52,0x20,0x52,0x20,0x52,0x20,0x52,0x20,0x59,0x20,0x5d,0x20,
+ 0x5d,0x20,0x42,0x20,0x52,0x20,0x4c,0x20,0x4a,0x20,0x4c,0x20,0x4a,0x20,
+ 0x4c,0x20,0x4a,0x20,0x4a,0x20,0x20,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,
+ 0x75,0x20,0x30,0x20,0x30,0x20,0x30,0x20,0x30,0x20,0x30,0x20,0x30,0x20,
+ 0x39,0x20,0x72,0x20,0x27,0x20,0x5d,0x20,0x66,0x20,0x39,0x20,0x30,0x20,
+ 0x30,0x20,0x30,0x20,0x39,0x20,0x30,0x20,0x39,0x20,0x79,0x20,0x20,0x2e,
+ 0x22,0x2c,0x0a,0x22,0x20,0x2e,0x32,0x20,0x3a,0x20,0x2d,0x20,0x3e,0x20,
+ 0x3a,0x20,0x2d,0x20,0x3a,0x20,0x3a,0x20,0x3c,0x20,0x5d,0x20,0x5d,0x20,
+ 0x34,0x20,0x2d,0x20,0x3a,0x20,0x2d,0x20,0x3e,0x20,0x3a,0x20,0x3a,0x20,
+ 0x3a,0x20,0x3c,0x20,0x20,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x2a,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x4f,0x20,0x20,0x20,0x4f,0x20,0x20,0x20,
+ 0x2b,0x20,0x5d,0x20,0x5d,0x20,0x26,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x25,0x20,0x20,0x2e,0x22,0x2c,
+ 0x0a,0x22,0x20,0x2e,0x60,0x20,0x29,0x20,0x5f,0x20,0x5f,0x20,0x29,0x20,
+ 0x5f,0x20,0x29,0x20,0x29,0x20,0x5f,0x20,0x5d,0x20,0x7c,0x20,0x5f,0x20,
+ 0x29,0x20,0x5f,0x20,0x5f,0x20,0x5f,0x20,0x5f,0x20,0x5f,0x20,0x29,0x20,
+ 0x5f,0x20,0x20,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x22,0x2c,0x0a,0x22,
+ 0x20,0x2e,0x62,0x20,0x67,0x20,0x68,0x20,0x68,0x20,0x68,0x20,0x68,0x20,
+ 0x68,0x20,0x67,0x20,0x6c,0x20,0x5d,0x20,0x5d,0x20,0x7a,0x20,0x67,0x20,
+ 0x67,0x20,0x68,0x20,0x67,0x20,0x68,0x20,0x67,0x20,0x67,0x20,0x63,0x20,
+ 0x20,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x50,0x20,0x46,0x20,0x5a,0x20,
+ 0x44,0x20,0x47,0x20,0x56,0x20,0x47,0x20,0x56,0x20,0x5a,0x20,0x60,0x20,
+ 0x7c,0x20,0x4e,0x20,0x44,0x20,0x56,0x20,0x56,0x20,0x56,0x20,0x56,0x20,
+ 0x56,0x20,0x56,0x20,0x53,0x20,0x20,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,
+ 0x21,0x20,0x2f,0x20,0x2f,0x20,0x2f,0x20,0x2f,0x20,0x2f,0x20,0x5e,0x20,
+ 0x2f,0x20,0x55,0x20,0x60,0x20,0x5d,0x20,0x51,0x20,0x52,0x20,0x5e,0x20,
+ 0x52,0x20,0x5e,0x20,0x52,0x20,0x52,0x20,0x52,0x20,0x7e,0x20,0x20,0x2e,
+ 0x22,0x2c,0x0a,0x22,0x20,0x2e,0x78,0x20,0x6e,0x20,0x6d,0x20,0x6d,0x20,
+ 0x6d,0x20,0x74,0x20,0x6d,0x20,0x6e,0x20,0x73,0x20,0x60,0x20,0x5d,0x20,
+ 0x68,0x20,0x6d,0x20,0x6d,0x20,0x74,0x20,0x6d,0x20,0x74,0x20,0x6e,0x20,
+ 0x74,0x20,0x6a,0x20,0x20,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x36,0x20,
+ 0x3e,0x20,0x3e,0x20,0x3e,0x20,0x3e,0x20,0x2c,0x20,0x3e,0x20,0x3e,0x20,
+ 0x31,0x20,0x60,0x20,0x7c,0x20,0x35,0x20,0x3b,0x20,0x3e,0x20,0x3e,0x20,
+ 0x3a,0x20,0x3e,0x20,0x3e,0x20,0x3a,0x20,0x35,0x20,0x20,0x2e,0x22,0x2c,
+ 0x0a,0x22,0x20,0x2e,0x37,0x20,0x2e,0x20,0x6f,0x20,0x58,0x20,0x4f,0x20,
+ 0x6f,0x20,0x4f,0x20,0x2e,0x20,0x24,0x20,0x60,0x20,0x5d,0x20,0x26,0x20,
+ 0x6f,0x20,0x4f,0x20,0x6f,0x20,0x4f,0x20,0x6f,0x20,0x4f,0x20,0x2e,0x20,
+ 0x3d,0x20,0x20,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x60,0x20,0x5f,0x20,
+ 0x5f,0x20,0x5f,0x20,0x5f,0x20,0x5f,0x20,0x5f,0x20,0x5f,0x20,0x5f,0x20,
+ 0x5d,0x20,0x7c,0x20,0x5f,0x20,0x5f,0x20,0x5f,0x20,0x5f,0x20,0x5f,0x20,
+ 0x5f,0x20,0x5f,0x20,0x5f,0x20,0x60,0x20,0x20,0x2e,0x22,0x2c,0x0a,0x22,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x45,0x20,0x72,0x20,0x69,0x20,
+ 0x66,0x20,0x69,0x20,0x69,0x20,0x69,0x20,0x69,0x20,0x66,0x20,0x27,0x20,
+ 0x5d,0x20,0x6c,0x20,0x69,0x20,0x69,0x20,0x69,0x20,0x69,0x20,0x69,0x20,
+ 0x69,0x20,0x72,0x20,0x63,0x20,0x20,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,
+ 0x57,0x20,0x46,0x20,0x5a,0x20,0x46,0x20,0x47,0x20,0x5a,0x20,0x46,0x20,
+ 0x46,0x20,0x5a,0x20,0x60,0x20,0x5d,0x20,0x41,0x20,0x56,0x20,0x5a,0x20,
+ 0x5a,0x20,0x44,0x20,0x5a,0x20,0x44,0x20,0x43,0x20,0x49,0x20,0x20,0x2e,
+ 0x22,0x2c,0x0a,0x22,0x20,0x2e,0x5b,0x20,0x2f,0x20,0x2f,0x20,0x2f,0x20,
+ 0x2f,0x20,0x2f,0x20,0x2f,0x20,0x2f,0x20,0x54,0x20,0x60,0x20,0x7c,0x20,
+ 0x51,0x20,0x2f,0x20,0x52,0x20,0x52,0x20,0x52,0x20,0x52,0x20,0x52,0x20,
+ 0x52,0x20,0x28,0x20,0x20,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x76,0x20,
+ 0x4d,0x20,0x6d,0x20,0x6d,0x20,0x6d,0x20,0x6d,0x20,0x6d,0x20,0x6d,0x20,
+ 0x61,0x20,0x60,0x20,0x5d,0x20,0x6b,0x20,0x6e,0x20,0x6d,0x20,0x6e,0x20,
+ 0x6d,0x20,0x6e,0x20,0x6d,0x20,0x74,0x20,0x6b,0x20,0x20,0x2e,0x22,0x2c,
+ 0x0a,0x22,0x20,0x2e,0x64,0x20,0x2c,0x20,0x2c,0x20,0x2c,0x20,0x2c,0x20,
+ 0x2c,0x20,0x2c,0x20,0x2c,0x20,0x33,0x20,0x60,0x20,0x5d,0x20,0x35,0x20,
+ 0x2c,0x20,0x2c,0x20,0x2c,0x20,0x3e,0x20,0x2c,0x20,0x3e,0x20,0x2c,0x20,
+ 0x65,0x20,0x20,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x38,0x20,0x2e,0x20,
+ 0x40,0x20,0x23,0x20,0x40,0x20,0x23,0x20,0x40,0x20,0x2b,0x20,0x24,0x20,
+ 0x60,0x20,0x5d,0x20,0x3d,0x20,0x4f,0x20,0x2b,0x20,0x23,0x20,0x23,0x20,
+ 0x23,0x20,0x23,0x20,0x4f,0x20,0x37,0x20,0x20,0x2e,0x22,0x0a,0x7d,0x3b,
+ 0x0a
+};
+
+static const unsigned int small_left_xpm_len = 3621;
+static const unsigned char small_left_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x31,0x31,0x33,0x20,0x32,0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x63,
+ 0x20,0x23,0x30,0x38,0x30,0x38,0x32,0x39,0x32,0x39,0x65,0x66,0x65,0x66,
+ 0x22,0x2c,0x0a,0x22,0x2e,0x20,0x20,0x63,0x20,0x23,0x30,0x30,0x30,0x30,
+ 0x32,0x39,0x32,0x39,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x58,0x20,
+ 0x20,0x63,0x20,0x23,0x30,0x38,0x30,0x38,0x32,0x39,0x32,0x39,0x66,0x37,
+ 0x66,0x37,0x22,0x2c,0x0a,0x22,0x6f,0x20,0x20,0x63,0x20,0x23,0x30,0x38,
+ 0x30,0x38,0x33,0x31,0x33,0x31,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,
+ 0x4f,0x20,0x20,0x63,0x20,0x23,0x31,0x30,0x31,0x30,0x32,0x39,0x32,0x39,
+ 0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,0x2b,0x20,0x20,0x63,0x20,0x23,
+ 0x31,0x30,0x31,0x30,0x32,0x39,0x32,0x39,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x40,0x20,0x20,0x63,0x20,0x23,0x31,0x38,0x31,0x38,0x33,0x31,
+ 0x33,0x31,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,0x23,0x20,0x20,0x63,
+ 0x20,0x23,0x31,0x38,0x31,0x38,0x33,0x39,0x33,0x39,0x65,0x37,0x65,0x37,
+ 0x22,0x2c,0x0a,0x22,0x24,0x20,0x20,0x63,0x20,0x23,0x31,0x30,0x31,0x30,
+ 0x33,0x31,0x33,0x31,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x25,0x20,
+ 0x20,0x63,0x20,0x23,0x31,0x30,0x31,0x30,0x33,0x39,0x33,0x39,0x66,0x66,
+ 0x66,0x66,0x22,0x2c,0x0a,0x22,0x26,0x20,0x20,0x63,0x20,0x23,0x32,0x31,
+ 0x32,0x31,0x33,0x39,0x33,0x39,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,
+ 0x2a,0x20,0x20,0x63,0x20,0x23,0x31,0x30,0x31,0x30,0x34,0x32,0x34,0x32,
+ 0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x20,0x63,0x20,0x23,
+ 0x31,0x38,0x31,0x38,0x34,0x32,0x34,0x32,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x2d,0x20,0x20,0x63,0x20,0x23,0x32,0x39,0x32,0x39,0x34,0x32,
+ 0x34,0x32,0x64,0x65,0x64,0x65,0x22,0x2c,0x0a,0x22,0x3b,0x20,0x20,0x63,
+ 0x20,0x23,0x33,0x31,0x33,0x31,0x34,0x32,0x34,0x32,0x64,0x36,0x64,0x36,
+ 0x22,0x2c,0x0a,0x22,0x3a,0x20,0x20,0x63,0x20,0x23,0x33,0x39,0x33,0x39,
+ 0x35,0x32,0x35,0x32,0x64,0x65,0x64,0x65,0x22,0x2c,0x0a,0x22,0x3e,0x20,
+ 0x20,0x63,0x20,0x23,0x32,0x31,0x32,0x31,0x34,0x32,0x34,0x32,0x65,0x37,
+ 0x65,0x37,0x22,0x2c,0x0a,0x22,0x2c,0x20,0x20,0x63,0x20,0x23,0x32,0x39,
+ 0x32,0x39,0x34,0x32,0x34,0x32,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,
+ 0x3c,0x20,0x20,0x63,0x20,0x23,0x32,0x31,0x32,0x31,0x35,0x32,0x35,0x32,
+ 0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x31,0x20,0x20,0x63,0x20,0x23,
+ 0x32,0x39,0x32,0x39,0x35,0x32,0x35,0x32,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x32,0x20,0x20,0x63,0x20,0x23,0x32,0x39,0x32,0x39,0x35,0x61,
+ 0x35,0x61,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x33,0x20,0x20,0x63,
+ 0x20,0x23,0x33,0x31,0x33,0x31,0x36,0x33,0x36,0x33,0x66,0x66,0x66,0x66,
+ 0x22,0x2c,0x0a,0x22,0x34,0x20,0x20,0x63,0x20,0x23,0x33,0x39,0x33,0x39,
+ 0x36,0x33,0x36,0x33,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x35,0x20,
+ 0x20,0x63,0x20,0x23,0x33,0x39,0x33,0x39,0x36,0x62,0x36,0x62,0x66,0x66,
+ 0x66,0x66,0x22,0x2c,0x0a,0x22,0x36,0x20,0x20,0x63,0x20,0x23,0x35,0x61,
+ 0x35,0x61,0x36,0x62,0x36,0x62,0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,
+ 0x37,0x20,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,0x37,0x33,0x37,0x33,
+ 0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,0x38,0x20,0x20,0x63,0x20,0x23,
+ 0x34,0x32,0x34,0x32,0x35,0x32,0x35,0x32,0x63,0x36,0x63,0x36,0x22,0x2c,
+ 0x0a,0x22,0x39,0x20,0x20,0x63,0x20,0x23,0x34,0x61,0x34,0x61,0x35,0x61,
+ 0x35,0x61,0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x30,0x20,0x20,0x63,
+ 0x20,0x23,0x34,0x32,0x34,0x32,0x35,0x32,0x35,0x32,0x64,0x36,0x64,0x36,
+ 0x22,0x2c,0x0a,0x22,0x71,0x20,0x20,0x63,0x20,0x23,0x35,0x32,0x35,0x32,
+ 0x36,0x33,0x36,0x33,0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x77,0x20,
+ 0x20,0x63,0x20,0x23,0x35,0x61,0x35,0x61,0x36,0x62,0x36,0x62,0x63,0x36,
+ 0x63,0x36,0x22,0x2c,0x0a,0x22,0x65,0x20,0x20,0x63,0x20,0x23,0x34,0x32,
+ 0x34,0x32,0x36,0x33,0x36,0x33,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,
+ 0x72,0x20,0x20,0x63,0x20,0x23,0x34,0x32,0x34,0x32,0x36,0x62,0x36,0x62,
+ 0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x74,0x20,0x20,0x63,0x20,0x23,
+ 0x34,0x32,0x34,0x32,0x37,0x33,0x37,0x33,0x65,0x66,0x65,0x66,0x22,0x2c,
+ 0x0a,0x22,0x79,0x20,0x20,0x63,0x20,0x23,0x34,0x32,0x34,0x32,0x37,0x33,
+ 0x37,0x33,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x75,0x20,0x20,0x63,
+ 0x20,0x23,0x34,0x61,0x34,0x61,0x37,0x33,0x37,0x33,0x66,0x66,0x66,0x66,
+ 0x22,0x2c,0x0a,0x22,0x69,0x20,0x20,0x63,0x20,0x23,0x34,0x61,0x34,0x61,
+ 0x37,0x62,0x37,0x62,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x70,0x20,
+ 0x20,0x63,0x20,0x23,0x37,0x62,0x37,0x62,0x38,0x34,0x38,0x34,0x62,0x35,
+ 0x62,0x35,0x22,0x2c,0x0a,0x22,0x61,0x20,0x20,0x63,0x20,0x23,0x35,0x32,
+ 0x35,0x32,0x38,0x34,0x38,0x34,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,
+ 0x73,0x20,0x20,0x63,0x20,0x23,0x35,0x61,0x35,0x61,0x38,0x63,0x38,0x63,
+ 0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x64,0x20,0x20,0x63,0x20,0x23,
+ 0x36,0x62,0x36,0x62,0x38,0x63,0x38,0x63,0x64,0x65,0x64,0x65,0x22,0x2c,
+ 0x0a,0x22,0x66,0x20,0x20,0x63,0x20,0x23,0x37,0x62,0x37,0x62,0x38,0x34,
+ 0x38,0x34,0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x67,0x20,0x20,0x63,
+ 0x20,0x23,0x37,0x62,0x37,0x62,0x38,0x63,0x38,0x63,0x63,0x36,0x63,0x36,
+ 0x22,0x2c,0x0a,0x22,0x68,0x20,0x20,0x63,0x20,0x23,0x37,0x62,0x37,0x62,
+ 0x38,0x63,0x38,0x63,0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x6a,0x20,
+ 0x20,0x63,0x20,0x23,0x37,0x33,0x37,0x33,0x38,0x63,0x38,0x63,0x64,0x36,
+ 0x64,0x36,0x22,0x2c,0x0a,0x22,0x6b,0x20,0x20,0x63,0x20,0x23,0x37,0x62,
+ 0x37,0x62,0x38,0x63,0x38,0x63,0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,0x22,
+ 0x6c,0x20,0x20,0x63,0x20,0x23,0x37,0x62,0x37,0x62,0x39,0x34,0x39,0x34,
+ 0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,0x22,0x7a,0x20,0x20,0x63,0x20,0x23,
+ 0x37,0x62,0x37,0x62,0x39,0x63,0x39,0x63,0x64,0x36,0x64,0x36,0x22,0x2c,
+ 0x0a,0x22,0x78,0x20,0x20,0x63,0x20,0x23,0x36,0x33,0x36,0x33,0x38,0x34,
+ 0x38,0x34,0x65,0x66,0x65,0x66,0x22,0x2c,0x0a,0x22,0x63,0x20,0x20,0x63,
+ 0x20,0x23,0x36,0x33,0x36,0x33,0x38,0x63,0x38,0x63,0x66,0x66,0x66,0x66,
+ 0x22,0x2c,0x0a,0x22,0x76,0x20,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,
+ 0x39,0x34,0x39,0x34,0x65,0x66,0x65,0x66,0x22,0x2c,0x0a,0x22,0x62,0x20,
+ 0x20,0x63,0x20,0x23,0x36,0x33,0x36,0x33,0x39,0x34,0x39,0x34,0x66,0x66,
+ 0x66,0x66,0x22,0x2c,0x0a,0x22,0x6e,0x20,0x20,0x63,0x20,0x23,0x36,0x33,
+ 0x36,0x33,0x39,0x63,0x39,0x63,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,
+ 0x6d,0x20,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,0x39,0x63,0x39,0x63,
+ 0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x4d,0x20,0x20,0x63,0x20,0x23,
+ 0x37,0x33,0x37,0x33,0x39,0x34,0x39,0x34,0x65,0x37,0x65,0x37,0x22,0x2c,
+ 0x0a,0x22,0x4e,0x20,0x20,0x63,0x20,0x23,0x37,0x33,0x37,0x33,0x39,0x63,
+ 0x39,0x63,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,0x42,0x20,0x20,0x63,
+ 0x20,0x23,0x37,0x33,0x37,0x33,0x39,0x63,0x39,0x63,0x66,0x37,0x66,0x37,
+ 0x22,0x2c,0x0a,0x22,0x56,0x20,0x20,0x63,0x20,0x23,0x37,0x33,0x37,0x33,
+ 0x61,0x35,0x61,0x35,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x43,0x20,
+ 0x20,0x63,0x20,0x23,0x37,0x62,0x37,0x62,0x61,0x64,0x61,0x64,0x66,0x66,
+ 0x66,0x66,0x22,0x2c,0x0a,0x22,0x5a,0x20,0x20,0x63,0x20,0x23,0x37,0x62,
+ 0x37,0x62,0x62,0x35,0x62,0x35,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,
+ 0x41,0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,0x34,0x39,0x34,0x39,0x34,
+ 0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x53,0x20,0x20,0x63,0x20,0x23,
+ 0x38,0x63,0x38,0x63,0x39,0x34,0x39,0x34,0x62,0x64,0x62,0x64,0x22,0x2c,
+ 0x0a,0x22,0x44,0x20,0x20,0x63,0x20,0x23,0x39,0x34,0x39,0x34,0x39,0x34,
+ 0x39,0x34,0x61,0x64,0x61,0x64,0x22,0x2c,0x0a,0x22,0x46,0x20,0x20,0x63,
+ 0x20,0x23,0x39,0x34,0x39,0x34,0x39,0x34,0x39,0x34,0x62,0x35,0x62,0x35,
+ 0x22,0x2c,0x0a,0x22,0x47,0x20,0x20,0x63,0x20,0x23,0x39,0x34,0x39,0x34,
+ 0x39,0x63,0x39,0x63,0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x48,0x20,
+ 0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,0x39,0x63,0x39,0x63,0x62,0x64,
+ 0x62,0x64,0x22,0x2c,0x0a,0x22,0x4a,0x20,0x20,0x63,0x20,0x23,0x39,0x63,
+ 0x39,0x63,0x61,0x35,0x61,0x35,0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,
+ 0x4b,0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x36,0x38,0x22,0x2c,0x0a,
+ 0x22,0x4c,0x20,0x20,0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x61,0x35,0x61,
+ 0x35,0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x50,0x20,0x20,0x63,0x20,
+ 0x23,0x61,0x64,0x61,0x64,0x61,0x64,0x61,0x64,0x62,0x35,0x62,0x35,0x22,
+ 0x2c,0x0a,0x22,0x49,0x20,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x61,
+ 0x64,0x61,0x64,0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x55,0x20,0x20,
+ 0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x62,0x35,0x62,0x35,0x62,0x64,0x62,
+ 0x64,0x22,0x2c,0x0a,0x22,0x59,0x20,0x20,0x63,0x20,0x23,0x62,0x35,0x62,
+ 0x35,0x62,0x64,0x62,0x64,0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x54,
+ 0x20,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x37,0x34,0x22,0x2c,0x0a,0x22,
+ 0x52,0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,0x34,0x39,0x34,0x39,0x34,
+ 0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x45,0x20,0x20,0x63,0x20,0x23,
+ 0x38,0x63,0x38,0x63,0x39,0x63,0x39,0x63,0x63,0x36,0x63,0x36,0x22,0x2c,
+ 0x0a,0x22,0x57,0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,0x34,0x61,0x35,
+ 0x61,0x35,0x65,0x66,0x65,0x66,0x22,0x2c,0x0a,0x22,0x51,0x20,0x20,0x63,
+ 0x20,0x23,0x38,0x63,0x38,0x63,0x61,0x35,0x61,0x35,0x65,0x37,0x65,0x37,
+ 0x22,0x2c,0x0a,0x22,0x21,0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,0x34,
+ 0x61,0x64,0x61,0x64,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x7e,0x20,
+ 0x20,0x63,0x20,0x23,0x38,0x63,0x38,0x63,0x62,0x35,0x62,0x35,0x65,0x66,
+ 0x65,0x66,0x22,0x2c,0x0a,0x22,0x5e,0x20,0x20,0x63,0x20,0x23,0x38,0x34,
+ 0x38,0x34,0x62,0x35,0x62,0x35,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,
+ 0x2f,0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,0x34,0x62,0x64,0x62,0x64,
+ 0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x28,0x20,0x20,0x63,0x20,0x23,
+ 0x38,0x63,0x38,0x63,0x62,0x64,0x62,0x64,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x29,0x20,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,0x62,0x35,
+ 0x62,0x35,0x66,0x37,0x66,0x37,0x22,0x2c,0x0a,0x22,0x5f,0x20,0x20,0x63,
+ 0x20,0x23,0x39,0x63,0x39,0x63,0x62,0x64,0x62,0x64,0x66,0x37,0x66,0x37,
+ 0x22,0x2c,0x0a,0x22,0x60,0x20,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,
+ 0x61,0x64,0x61,0x64,0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x27,0x20,
+ 0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x62,0x35,0x62,0x35,0x63,0x36,
+ 0x63,0x36,0x22,0x2c,0x0a,0x22,0x5d,0x20,0x20,0x63,0x20,0x23,0x62,0x35,
+ 0x62,0x35,0x62,0x64,0x62,0x64,0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,
+ 0x5b,0x20,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x62,0x64,0x62,0x64,
+ 0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x7b,0x20,0x20,0x63,0x20,0x23,
+ 0x61,0x64,0x61,0x64,0x62,0x64,0x62,0x64,0x65,0x66,0x65,0x66,0x22,0x2c,
+ 0x0a,0x22,0x7d,0x20,0x20,0x63,0x20,0x23,0x39,0x34,0x39,0x34,0x63,0x36,
+ 0x63,0x36,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x7c,0x20,0x20,0x63,
+ 0x20,0x23,0x39,0x34,0x39,0x34,0x63,0x65,0x63,0x65,0x66,0x66,0x66,0x66,
+ 0x22,0x2c,0x0a,0x22,0x20,0x2e,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,
+ 0x63,0x65,0x63,0x65,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x2e,0x2e,
+ 0x20,0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x64,0x36,0x64,0x36,0x66,0x66,
+ 0x66,0x66,0x22,0x2c,0x0a,0x22,0x58,0x2e,0x20,0x63,0x20,0x23,0x61,0x64,
+ 0x61,0x64,0x64,0x65,0x64,0x65,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,
+ 0x6f,0x2e,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x63,0x65,0x63,0x65,
+ 0x66,0x37,0x66,0x37,0x22,0x2c,0x0a,0x22,0x4f,0x2e,0x20,0x63,0x20,0x23,
+ 0x62,0x35,0x62,0x35,0x64,0x65,0x64,0x65,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x2b,0x2e,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x64,0x36,
+ 0x64,0x36,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x40,0x2e,0x20,0x63,
+ 0x20,0x23,0x61,0x64,0x61,0x64,0x65,0x37,0x65,0x37,0x66,0x66,0x66,0x66,
+ 0x22,0x2c,0x0a,0x22,0x23,0x2e,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,
+ 0x65,0x37,0x65,0x37,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x24,0x2e,
+ 0x20,0x63,0x20,0x23,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,
+ 0x63,0x30,0x22,0x2c,0x0a,0x22,0x25,0x2e,0x20,0x63,0x20,0x23,0x63,0x65,
+ 0x63,0x65,0x64,0x65,0x64,0x65,0x66,0x37,0x66,0x37,0x22,0x2c,0x0a,0x22,
+ 0x26,0x2e,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x65,0x37,0x65,0x37,
+ 0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x2a,0x2e,0x20,0x63,0x20,0x23,
+ 0x63,0x36,0x63,0x36,0x65,0x66,0x65,0x66,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x3d,0x2e,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x65,0x37,
+ 0x65,0x37,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x2d,0x2e,0x20,0x63,
+ 0x20,0x23,0x64,0x36,0x64,0x36,0x65,0x37,0x65,0x37,0x66,0x66,0x66,0x66,
+ 0x22,0x2c,0x0a,0x22,0x3b,0x2e,0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,
+ 0x65,0x37,0x65,0x37,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x3a,0x2e,
+ 0x20,0x63,0x20,0x23,0x64,0x36,0x64,0x36,0x66,0x66,0x66,0x66,0x66,0x66,
+ 0x66,0x66,0x22,0x2c,0x0a,0x22,0x3e,0x2e,0x20,0x63,0x20,0x23,0x64,0x65,
+ 0x64,0x65,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,
+ 0x2c,0x2e,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x66,0x66,0x66,0x66,
+ 0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x3c,0x2e,0x20,0x63,0x20,0x23,
+ 0x66,0x37,0x66,0x37,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x31,0x2e,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x31,0x30,0x30,
+ 0x22,0x2c,0x0a,0x22,0x32,0x2e,0x20,0x63,0x20,0x4e,0x6f,0x6e,0x65,0x22,
+ 0x2c,0x0a,0x2f,0x2a,0x20,0x70,0x69,0x78,0x65,0x6c,0x73,0x20,0x2a,0x2f,
+ 0x0a,0x22,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x22,0x2c,0x0a,0x22,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x22,0x2c,0x0a,0x22,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x47,0x20,0x51,0x20,0x6b,0x20,0x55,0x20,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x22,0x2c,0x0a,0x22,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x46,0x20,0x29,0x20,0x31,0x2e,0x7b,0x20,0x27,0x20,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x22,0x2c,0x0a,0x22,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x54,0x20,0x45,0x20,0x6f,0x2e,0x31,0x2e,
+ 0x3e,0x2e,0x7e,0x20,0x55,0x20,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x22,0x2c,0x0a,0x22,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x54,0x20,0x53,0x20,
+ 0x2d,0x2e,0x31,0x2e,0x3a,0x2e,0x2e,0x2e,0x4e,0x20,0x5d,0x20,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x22,0x2c,0x0a,0x22,0x32,0x2e,0x32,0x2e,
+ 0x54,0x20,0x52,0x20,0x25,0x2e,0x31,0x2e,0x3a,0x2e,0x20,0x2e,0x28,0x20,
+ 0x4d,0x20,0x55,0x20,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x22,0x2c,
+ 0x0a,0x22,0x32,0x2e,0x55,0x20,0x67,0x20,0x3b,0x2e,0x31,0x2e,0x26,0x2e,
+ 0x7d,0x20,0x5e,0x20,0x5a,0x20,0x42,0x20,0x46,0x20,0x54,0x20,0x5b,0x20,
+ 0x59,0x20,0x27,0x20,0x48,0x20,0x52,0x20,0x67,0x20,0x6a,0x20,0x4d,0x20,
+ 0x6a,0x20,0x4c,0x20,0x22,0x2c,0x0a,0x22,0x5b,0x20,0x68,0x20,0x2d,0x2e,
+ 0x31,0x2e,0x2a,0x2e,0x2f,0x20,0x43,0x20,0x43,0x20,0x43,0x20,0x6d,0x20,
+ 0x74,0x20,0x64,0x20,0x6c,0x20,0x7a,0x20,0x57,0x20,0x5f,0x20,0x58,0x2e,
+ 0x3d,0x2e,0x2a,0x2e,0x23,0x2e,0x6e,0x20,0x30,0x20,0x22,0x2c,0x0a,0x22,
+ 0x41,0x20,0x2b,0x2e,0x3c,0x2e,0x2a,0x2e,0x7d,0x20,0x21,0x20,0x43,0x20,
+ 0x56,0x20,0x56,0x20,0x56,0x20,0x43,0x20,0x2e,0x2e,0x4f,0x2e,0x23,0x2e,
+ 0x26,0x2e,0x4f,0x2e,0x58,0x2e,0x20,0x2e,0x28,0x20,0x43,0x20,0x35,0x20,
+ 0x2c,0x20,0x22,0x2c,0x0a,0x22,0x57,0x20,0x2c,0x2e,0x40,0x2e,0x28,0x20,
+ 0x43,0x20,0x43,0x20,0x56,0x20,0x56,0x20,0x56,0x20,0x56,0x20,0x43,0x20,
+ 0x43,0x20,0x21,0x20,0x43,0x20,0x56,0x20,0x56,0x20,0x56,0x20,0x6d,0x20,
+ 0x6d,0x20,0x62,0x20,0x32,0x20,0x3e,0x20,0x22,0x2c,0x0a,0x22,0x63,0x20,
+ 0x7c,0x20,0x5e,0x20,0x21,0x20,0x43,0x20,0x56,0x20,0x56,0x20,0x56,0x20,
+ 0x56,0x20,0x56,0x20,0x56,0x20,0x56,0x20,0x6d,0x20,0x6d,0x20,0x6d,0x20,
+ 0x6d,0x20,0x6d,0x20,0x62,0x20,0x62,0x20,0x73,0x20,0x31,0x20,0x23,0x20,
+ 0x22,0x2c,0x0a,0x22,0x71,0x20,0x31,0x20,0x73,0x20,0x6d,0x20,0x56,0x20,
+ 0x6d,0x20,0x6d,0x20,0x6d,0x20,0x56,0x20,0x6d,0x20,0x75,0x20,0x34,0x20,
+ 0x35,0x20,0x79,0x20,0x69,0x20,0x61,0x20,0x61,0x20,0x73,0x20,0x61,0x20,
+ 0x61,0x20,0x3c,0x20,0x2c,0x20,0x22,0x2c,0x0a,0x22,0x4b,0x20,0x3b,0x20,
+ 0x2a,0x20,0x75,0x20,0x62,0x20,0x6d,0x20,0x6d,0x20,0x6d,0x20,0x56,0x20,
+ 0x62,0x20,0x2b,0x20,0x4f,0x20,0x40,0x20,0x20,0x20,0x58,0x20,0x24,0x20,
+ 0x3d,0x20,0x3d,0x20,0x3c,0x20,0x31,0x20,0x25,0x20,0x2d,0x20,0x22,0x2c,
+ 0x0a,0x22,0x32,0x2e,0x4a,0x20,0x2d,0x20,0x3d,0x20,0x72,0x20,0x63,0x20,
+ 0x62,0x20,0x6d,0x20,0x6d,0x20,0x63,0x20,0x37,0x20,0x4a,0x20,0x49,0x20,
+ 0x44,0x20,0x66,0x20,0x36,0x20,0x38,0x20,0x3b,0x20,0x2d,0x20,0x2c,0x20,
+ 0x2d,0x20,0x70,0x20,0x22,0x2c,0x0a,0x22,0x32,0x2e,0x32,0x2e,0x55,0x20,
+ 0x30,0x20,0x6f,0x20,0x33,0x20,0x61,0x20,0x62,0x20,0x62,0x20,0x76,0x20,
+ 0x55,0x20,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x54,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x32,0x2e,0x22,0x2c,0x0a,0x22,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x50,0x20,0x39,0x20,0x6f,0x20,0x33,0x20,
+ 0x73,0x20,0x73,0x20,0x78,0x20,0x49,0x20,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x22,0x2c,0x0a,0x22,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x59,0x20,0x77,0x20,0x6f,0x20,0x32,0x20,0x79,0x20,0x65,0x20,0x49,0x20,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x22,0x2c,0x0a,0x22,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x54,0x20,0x37,0x20,0x2e,0x20,
+ 0x2a,0x20,0x2c,0x20,0x60,0x20,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x22,0x2c,0x0a,0x22,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x54,0x20,0x70,0x20,0x26,0x20,0x3a,0x20,0x55,0x20,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x22,0x2c,0x0a,0x22,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x22,0x2c,
+ 0x0a,0x22,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,
+ 0x32,0x2e,0x32,0x2e,0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_newform_xpm_len = 1131;
+static const unsigned char small_newform_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x20,0x6e,0x65,0x77,0x66,
+ 0x6f,0x72,0x6d,0x5f,0x78,0x70,0x6d,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,
+ 0x22,0x33,0x34,0x20,0x32,0x36,0x20,0x36,0x20,0x31,0x22,0x2c,0x0a,0x22,
+ 0x20,0x09,0x63,0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x22,0x2e,0x09,
+ 0x63,0x20,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2c,0x0a,0x22,0x2b,
+ 0x09,0x63,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x22,0x2c,0x0a,0x22,
+ 0x40,0x09,0x63,0x20,0x23,0x30,0x30,0x30,0x30,0x46,0x46,0x22,0x2c,0x0a,
+ 0x22,0x23,0x09,0x63,0x20,0x23,0x43,0x30,0x43,0x30,0x43,0x30,0x22,0x2c,
+ 0x0a,0x22,0x24,0x09,0x63,0x20,0x23,0x38,0x30,0x38,0x30,0x38,0x30,0x22,
+ 0x2c,0x0a,0x22,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,
+ 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,
+ 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,
+ 0x2b,0x2b,0x2b,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2b,0x40,0x40,0x40,
+ 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+ 0x40,0x40,0x40,0x40,0x40,0x40,0x2b,0x23,0x2b,0x23,0x2b,0x23,0x2b,0x24,
+ 0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,
+ 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,
+ 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x24,0x2e,0x22,0x2c,0x0a,
+ 0x22,0x2e,0x2b,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2b,0x24,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2b,0x2e,
+ 0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,
+ 0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x24,
+ 0x2b,0x24,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2b,0x2e,0x2e,0x23,0x2e,0x23,
+ 0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,
+ 0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x24,0x2b,0x24,0x2e,0x22,
+ 0x2c,0x0a,0x22,0x2e,0x2b,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,
+ 0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,
+ 0x23,0x2e,0x23,0x2e,0x23,0x24,0x2b,0x24,0x2e,0x22,0x2c,0x0a,0x22,0x2e,
+ 0x2b,0x2e,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,
+ 0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,
+ 0x2e,0x24,0x2b,0x24,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2b,0x2e,0x23,0x2e,
+ 0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,
+ 0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x24,0x2b,0x24,
+ 0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2b,0x2e,0x2e,0x23,0x2e,0x23,0x2e,0x23,
+ 0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,
+ 0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x24,0x2b,0x24,0x2e,0x22,0x2c,0x0a,
+ 0x22,0x2e,0x2b,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,
+ 0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,
+ 0x23,0x2e,0x23,0x24,0x2b,0x24,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2b,0x2e,
+ 0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,
+ 0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x24,
+ 0x2b,0x24,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2b,0x2e,0x23,0x2e,0x23,0x2e,
+ 0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,
+ 0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x24,0x2b,0x24,0x2e,0x22,
+ 0x2c,0x0a,0x22,0x2e,0x2b,0x2e,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,
+ 0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,
+ 0x2e,0x23,0x2e,0x23,0x2e,0x24,0x2b,0x24,0x2e,0x22,0x2c,0x0a,0x22,0x2e,
+ 0x2b,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,
+ 0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,
+ 0x23,0x24,0x2b,0x24,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2b,0x2e,0x2e,0x23,
+ 0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,
+ 0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x24,0x2b,0x24,
+ 0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2b,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,
+ 0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,
+ 0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x24,0x2b,0x24,0x2e,0x22,0x2c,0x0a,
+ 0x22,0x2e,0x2b,0x2e,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,
+ 0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,
+ 0x2e,0x23,0x2e,0x24,0x2b,0x24,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2b,0x2e,
+ 0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,
+ 0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x24,
+ 0x2b,0x24,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2b,0x2e,0x2e,0x23,0x2e,0x23,
+ 0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,
+ 0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x24,0x2b,0x24,0x2e,0x22,
+ 0x2c,0x0a,0x22,0x2e,0x2b,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,
+ 0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,0x23,0x2e,
+ 0x23,0x2e,0x23,0x2e,0x23,0x24,0x2b,0x24,0x2e,0x22,0x2c,0x0a,0x22,0x2e,
+ 0x2b,0x2e,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x2b,0x24,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2b,0x2b,0x2b,0x2b,
+ 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,
+ 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x24,
+ 0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x2e,0x22,0x2c,0x0a,
+ 0x22,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_print_xpm_len = 2434;
+static const unsigned char small_print_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x38,0x39,0x20,0x31,0x22,0x2c,0x0a,0x22,0x20,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x63,0x20,0x23,0x31,
+ 0x30,0x31,0x30,0x30,0x38,0x30,0x38,0x31,0x30,0x31,0x30,0x22,0x2c,0x0a,
+ 0x22,0x58,0x20,0x63,0x20,0x23,0x31,0x30,0x31,0x30,0x31,0x30,0x31,0x30,
+ 0x31,0x30,0x31,0x30,0x22,0x2c,0x0a,0x22,0x6f,0x20,0x63,0x20,0x23,0x31,
+ 0x30,0x31,0x30,0x31,0x30,0x31,0x30,0x31,0x38,0x31,0x38,0x22,0x2c,0x0a,
+ 0x22,0x4f,0x20,0x63,0x20,0x23,0x31,0x38,0x31,0x38,0x31,0x30,0x31,0x30,
+ 0x31,0x38,0x31,0x38,0x22,0x2c,0x0a,0x22,0x2b,0x20,0x63,0x20,0x23,0x31,
+ 0x38,0x31,0x38,0x31,0x38,0x31,0x38,0x31,0x38,0x31,0x38,0x22,0x2c,0x0a,
+ 0x22,0x40,0x20,0x63,0x20,0x23,0x31,0x38,0x31,0x38,0x31,0x38,0x31,0x38,
+ 0x32,0x31,0x32,0x31,0x22,0x2c,0x0a,0x22,0x23,0x20,0x63,0x20,0x23,0x32,
+ 0x31,0x32,0x31,0x31,0x38,0x31,0x38,0x32,0x31,0x32,0x31,0x22,0x2c,0x0a,
+ 0x22,0x24,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x31,0x33,0x22,0x2c,0x0a,
+ 0x22,0x25,0x20,0x63,0x20,0x23,0x32,0x31,0x32,0x31,0x32,0x31,0x32,0x31,
+ 0x32,0x39,0x32,0x39,0x22,0x2c,0x0a,0x22,0x26,0x20,0x63,0x20,0x23,0x32,
+ 0x39,0x32,0x39,0x32,0x31,0x32,0x31,0x32,0x39,0x32,0x39,0x22,0x2c,0x0a,
+ 0x22,0x2a,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x31,0x36,0x22,0x2c,0x0a,
+ 0x22,0x3d,0x20,0x63,0x20,0x23,0x32,0x39,0x32,0x39,0x32,0x39,0x32,0x39,
+ 0x33,0x31,0x33,0x31,0x22,0x2c,0x0a,0x22,0x2d,0x20,0x63,0x20,0x23,0x33,
+ 0x31,0x33,0x31,0x32,0x39,0x32,0x39,0x33,0x31,0x33,0x31,0x22,0x2c,0x0a,
+ 0x22,0x3b,0x20,0x63,0x20,0x23,0x33,0x31,0x33,0x31,0x33,0x31,0x33,0x31,
+ 0x33,0x31,0x33,0x31,0x22,0x2c,0x0a,0x22,0x3a,0x20,0x63,0x20,0x23,0x33,
+ 0x31,0x33,0x31,0x33,0x31,0x33,0x31,0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,
+ 0x22,0x3e,0x20,0x63,0x20,0x23,0x33,0x39,0x33,0x39,0x33,0x31,0x33,0x31,
+ 0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,0x22,0x2c,0x20,0x63,0x20,0x23,0x33,
+ 0x39,0x33,0x39,0x33,0x39,0x33,0x39,0x33,0x39,0x33,0x39,0x22,0x2c,0x0a,
+ 0x22,0x3c,0x20,0x63,0x20,0x23,0x33,0x39,0x33,0x39,0x33,0x39,0x33,0x39,
+ 0x34,0x32,0x34,0x32,0x22,0x2c,0x0a,0x22,0x31,0x20,0x63,0x20,0x23,0x34,
+ 0x32,0x34,0x32,0x33,0x39,0x33,0x39,0x34,0x32,0x34,0x32,0x22,0x2c,0x0a,
+ 0x22,0x32,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x32,0x36,0x22,0x2c,0x0a,
+ 0x22,0x33,0x20,0x63,0x20,0x23,0x34,0x61,0x34,0x61,0x34,0x61,0x34,0x61,
+ 0x35,0x32,0x35,0x32,0x22,0x2c,0x0a,0x22,0x34,0x20,0x63,0x20,0x23,0x35,
+ 0x61,0x35,0x61,0x35,0x32,0x35,0x32,0x35,0x61,0x35,0x61,0x22,0x2c,0x0a,
+ 0x22,0x35,0x20,0x63,0x20,0x23,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x61,
+ 0x36,0x33,0x36,0x33,0x22,0x2c,0x0a,0x22,0x36,0x20,0x63,0x20,0x23,0x36,
+ 0x62,0x36,0x62,0x36,0x33,0x36,0x33,0x36,0x62,0x36,0x62,0x22,0x2c,0x0a,
+ 0x22,0x37,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x34,0x32,0x22,0x2c,0x0a,
+ 0x22,0x38,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,0x36,0x62,0x36,0x62,
+ 0x37,0x33,0x37,0x33,0x22,0x2c,0x0a,0x22,0x39,0x20,0x63,0x20,0x23,0x37,
+ 0x33,0x37,0x33,0x36,0x62,0x36,0x62,0x37,0x33,0x37,0x33,0x22,0x2c,0x0a,
+ 0x22,0x30,0x20,0x63,0x20,0x23,0x37,0x62,0x37,0x62,0x37,0x33,0x37,0x33,
+ 0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,0x22,0x71,0x20,0x63,0x20,0x23,0x37,
+ 0x62,0x37,0x62,0x37,0x33,0x37,0x33,0x38,0x34,0x38,0x34,0x22,0x2c,0x0a,
+ 0x22,0x77,0x20,0x63,0x20,0x23,0x30,0x38,0x30,0x38,0x66,0x66,0x66,0x66,
+ 0x30,0x38,0x30,0x38,0x22,0x2c,0x0a,0x22,0x65,0x20,0x63,0x20,0x23,0x32,
+ 0x39,0x32,0x39,0x66,0x66,0x66,0x66,0x32,0x39,0x32,0x39,0x22,0x2c,0x0a,
+ 0x22,0x72,0x20,0x63,0x20,0x23,0x33,0x31,0x33,0x31,0x66,0x66,0x66,0x66,
+ 0x33,0x31,0x33,0x31,0x22,0x2c,0x0a,0x22,0x74,0x20,0x63,0x20,0x23,0x35,
+ 0x61,0x35,0x61,0x63,0x65,0x63,0x65,0x35,0x61,0x35,0x61,0x22,0x2c,0x0a,
+ 0x22,0x79,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,0x66,0x66,0x66,0x66,
+ 0x36,0x33,0x36,0x33,0x22,0x2c,0x0a,0x22,0x75,0x20,0x63,0x20,0x23,0x37,
+ 0x62,0x37,0x62,0x66,0x66,0x66,0x66,0x37,0x62,0x37,0x62,0x22,0x2c,0x0a,
+ 0x22,0x69,0x20,0x63,0x20,0x23,0x38,0x34,0x38,0x34,0x37,0x62,0x37,0x62,
+ 0x38,0x34,0x38,0x34,0x22,0x2c,0x0a,0x22,0x70,0x20,0x63,0x20,0x23,0x38,
+ 0x34,0x38,0x34,0x37,0x62,0x37,0x62,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,
+ 0x22,0x61,0x20,0x63,0x20,0x23,0x38,0x63,0x38,0x63,0x37,0x62,0x37,0x62,
+ 0x39,0x34,0x39,0x34,0x22,0x2c,0x0a,0x22,0x73,0x20,0x63,0x20,0x23,0x38,
+ 0x34,0x38,0x34,0x38,0x34,0x38,0x34,0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,
+ 0x22,0x64,0x20,0x63,0x20,0x23,0x38,0x63,0x38,0x63,0x38,0x34,0x38,0x34,
+ 0x38,0x63,0x38,0x63,0x22,0x2c,0x0a,0x22,0x66,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x35,0x35,0x22,0x2c,0x0a,0x22,0x67,0x20,0x63,0x20,0x23,0x38,
+ 0x63,0x38,0x63,0x38,0x34,0x38,0x34,0x39,0x34,0x39,0x34,0x22,0x2c,0x0a,
+ 0x22,0x68,0x20,0x63,0x20,0x23,0x38,0x63,0x38,0x63,0x38,0x63,0x38,0x63,
+ 0x39,0x34,0x39,0x34,0x22,0x2c,0x0a,0x22,0x6a,0x20,0x63,0x20,0x23,0x39,
+ 0x34,0x39,0x34,0x38,0x63,0x38,0x63,0x39,0x34,0x39,0x34,0x22,0x2c,0x0a,
+ 0x22,0x6b,0x20,0x63,0x20,0x23,0x39,0x34,0x39,0x34,0x38,0x63,0x38,0x63,
+ 0x39,0x63,0x39,0x63,0x22,0x2c,0x0a,0x22,0x6c,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x35,0x38,0x22,0x2c,0x0a,0x22,0x7a,0x20,0x63,0x20,0x23,0x39,
+ 0x34,0x39,0x34,0x39,0x34,0x39,0x34,0x39,0x63,0x39,0x63,0x22,0x2c,0x0a,
+ 0x22,0x78,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,0x39,0x34,0x39,0x34,
+ 0x39,0x63,0x39,0x63,0x22,0x2c,0x0a,0x22,0x63,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x36,0x31,0x22,0x2c,0x0a,0x22,0x76,0x20,0x63,0x20,0x23,0x39,
+ 0x63,0x39,0x63,0x39,0x34,0x39,0x34,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,
+ 0x22,0x62,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,0x39,0x63,0x39,0x63,
+ 0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x6e,0x20,0x63,0x20,0x23,0x61,
+ 0x35,0x61,0x35,0x39,0x63,0x39,0x63,0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,
+ 0x22,0x6d,0x20,0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x39,0x63,0x39,0x63,
+ 0x61,0x64,0x61,0x64,0x22,0x2c,0x0a,0x22,0x4d,0x20,0x63,0x20,0x23,0x61,
+ 0x64,0x61,0x64,0x39,0x63,0x39,0x63,0x61,0x64,0x61,0x64,0x22,0x2c,0x0a,
+ 0x22,0x4e,0x20,0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,
+ 0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x42,0x20,0x63,0x20,0x23,0x61,
+ 0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x64,0x61,0x64,0x22,0x2c,0x0a,
+ 0x22,0x56,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x61,0x35,0x61,0x35,
+ 0x61,0x64,0x61,0x64,0x22,0x2c,0x0a,0x22,0x43,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x36,0x38,0x22,0x2c,0x0a,0x22,0x5a,0x20,0x63,0x20,0x23,0x61,
+ 0x64,0x61,0x64,0x61,0x64,0x61,0x64,0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,
+ 0x22,0x41,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x61,0x64,0x61,0x64,
+ 0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,0x53,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x37,0x31,0x22,0x2c,0x0a,0x22,0x44,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x37,0x34,0x22,0x2c,0x0a,0x22,0x46,0x20,0x63,0x20,0x23,0x39,
+ 0x34,0x39,0x34,0x63,0x36,0x63,0x36,0x39,0x34,0x39,0x34,0x22,0x2c,0x0a,
+ 0x22,0x47,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,0x63,0x65,0x63,0x65,
+ 0x61,0x35,0x61,0x35,0x22,0x2c,0x0a,0x22,0x48,0x20,0x63,0x20,0x23,0x62,
+ 0x64,0x62,0x64,0x64,0x36,0x64,0x36,0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,
+ 0x22,0x4a,0x20,0x63,0x20,0x23,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,
+ 0x63,0x30,0x63,0x30,0x22,0x2c,0x0a,0x22,0x4b,0x20,0x63,0x20,0x23,0x63,
+ 0x36,0x63,0x36,0x63,0x36,0x63,0x36,0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,
+ 0x22,0x4c,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x63,0x36,0x63,0x36,
+ 0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x50,0x20,0x63,0x20,0x23,0x63,
+ 0x65,0x63,0x65,0x63,0x65,0x63,0x65,0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,
+ 0x22,0x49,0x20,0x63,0x20,0x23,0x63,0x65,0x63,0x65,0x63,0x65,0x63,0x65,
+ 0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,0x22,0x55,0x20,0x63,0x20,0x23,0x64,
+ 0x36,0x64,0x36,0x63,0x65,0x63,0x65,0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,
+ 0x22,0x59,0x20,0x63,0x20,0x23,0x64,0x36,0x64,0x36,0x63,0x65,0x63,0x65,
+ 0x64,0x65,0x64,0x65,0x22,0x2c,0x0a,0x22,0x54,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x38,0x34,0x22,0x2c,0x0a,0x22,0x52,0x20,0x63,0x20,0x23,0x64,
+ 0x36,0x64,0x36,0x64,0x36,0x64,0x36,0x64,0x65,0x64,0x65,0x22,0x2c,0x0a,
+ 0x22,0x45,0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,0x64,0x36,0x64,0x36,
+ 0x64,0x65,0x64,0x65,0x22,0x2c,0x0a,0x22,0x57,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x38,0x37,0x22,0x2c,0x0a,0x22,0x51,0x20,0x63,0x20,0x23,0x64,
+ 0x65,0x64,0x65,0x64,0x36,0x64,0x36,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,
+ 0x22,0x21,0x20,0x63,0x20,0x23,0x64,0x65,0x64,0x65,0x64,0x65,0x64,0x65,
+ 0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,0x7e,0x20,0x63,0x20,0x23,0x64,
+ 0x36,0x64,0x36,0x66,0x66,0x66,0x66,0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,
+ 0x22,0x5e,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x64,0x65,0x64,0x65,
+ 0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,0x2f,0x20,0x63,0x20,0x23,0x65,
+ 0x37,0x65,0x37,0x65,0x37,0x65,0x37,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,
+ 0x22,0x28,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x65,0x37,0x65,0x37,
+ 0x65,0x66,0x65,0x66,0x22,0x2c,0x0a,0x22,0x29,0x20,0x63,0x20,0x23,0x65,
+ 0x66,0x65,0x66,0x65,0x37,0x65,0x37,0x65,0x66,0x65,0x66,0x22,0x2c,0x0a,
+ 0x22,0x5f,0x20,0x63,0x20,0x23,0x65,0x66,0x65,0x66,0x65,0x66,0x65,0x66,
+ 0x65,0x66,0x65,0x66,0x22,0x2c,0x0a,0x22,0x60,0x20,0x63,0x20,0x23,0x65,
+ 0x37,0x65,0x37,0x66,0x66,0x66,0x66,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,
+ 0x22,0x27,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x39,0x37,0x22,0x2c,0x0a,
+ 0x22,0x5d,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x31,0x30,0x30,0x22,0x2c,
+ 0x0a,0x22,0x5b,0x20,0x63,0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x2f,
+ 0x2a,0x20,0x70,0x69,0x78,0x65,0x6c,0x73,0x20,0x2a,0x2f,0x0a,0x22,0x5b,
+ 0x5b,0x5b,0x5b,0x5b,0x5b,0x53,0x44,0x50,0x50,0x50,0x50,0x4b,0x4b,0x44,
+ 0x44,0x43,0x44,0x5b,0x5b,0x5b,0x5b,0x22,0x2c,0x0a,0x22,0x5b,0x5b,0x5b,
+ 0x5b,0x5b,0x5b,0x44,0x5f,0x2f,0x2f,0x2f,0x2f,0x2f,0x5f,0x5f,0x5f,0x57,
+ 0x44,0x5b,0x5b,0x5b,0x5b,0x22,0x2c,0x0a,0x22,0x5b,0x5b,0x5b,0x5b,0x5b,
+ 0x5b,0x44,0x4b,0x4b,0x4b,0x50,0x50,0x4b,0x4b,0x4b,0x4b,0x44,0x4b,0x5b,
+ 0x5b,0x5b,0x5b,0x22,0x2c,0x0a,0x22,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x53,
+ 0x44,0x44,0x44,0x44,0x53,0x44,0x44,0x53,0x53,0x43,0x44,0x5b,0x5b,0x5b,
+ 0x5b,0x22,0x2c,0x0a,0x22,0x5b,0x5b,0x5b,0x5b,0x5b,0x4b,0x43,0x4b,0x44,
+ 0x4b,0x4b,0x4b,0x44,0x44,0x44,0x4b,0x53,0x5b,0x5b,0x5b,0x5b,0x5b,0x22,
+ 0x2c,0x0a,0x22,0x5b,0x5b,0x5b,0x5b,0x5b,0x44,0x44,0x53,0x44,0x44,0x44,
+ 0x44,0x44,0x44,0x4b,0x4b,0x53,0x5b,0x5b,0x5b,0x5b,0x5b,0x22,0x2c,0x0a,
+ 0x22,0x5b,0x5b,0x5b,0x5b,0x5b,0x44,0x53,0x4b,0x44,0x44,0x44,0x44,0x44,
+ 0x4b,0x44,0x4b,0x43,0x5b,0x5b,0x5b,0x5b,0x5b,0x22,0x2c,0x0a,0x22,0x5b,
+ 0x5b,0x5b,0x5b,0x5b,0x4b,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
+ 0x44,0x53,0x5b,0x5b,0x5b,0x5b,0x5b,0x22,0x2c,0x0a,0x22,0x5b,0x5b,0x5b,
+ 0x5b,0x5b,0x43,0x50,0x2f,0x57,0x57,0x57,0x57,0x57,0x57,0x54,0x57,0x4e,
+ 0x4e,0x5a,0x5b,0x5b,0x5b,0x22,0x2c,0x0a,0x22,0x5b,0x5b,0x5b,0x44,0x63,
+ 0x39,0x53,0x54,0x50,0x54,0x50,0x54,0x50,0x54,0x57,0x57,0x6a,0x34,0x32,
+ 0x37,0x53,0x5b,0x22,0x2c,0x0a,0x22,0x5b,0x5b,0x44,0x7a,0x69,0x71,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x70,0x61,0x67,0x38,0x3c,0x25,0x40,0x32,
+ 0x4e,0x22,0x2c,0x0a,0x22,0x5b,0x44,0x63,0x45,0x28,0x21,0x45,0x52,0x52,
+ 0x52,0x52,0x55,0x59,0x47,0x74,0x46,0x6e,0x32,0x23,0x23,0x4f,0x3c,0x22,
+ 0x2c,0x0a,0x22,0x44,0x62,0x29,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,
+ 0x5d,0x7e,0x65,0x77,0x65,0x50,0x61,0x3b,0x40,0x58,0x23,0x22,0x2c,0x0a,
+ 0x22,0x56,0x27,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x60,
+ 0x79,0x72,0x75,0x5d,0x51,0x30,0x40,0x20,0x23,0x22,0x2c,0x0a,0x22,0x42,
+ 0x52,0x49,0x4c,0x49,0x54,0x52,0x52,0x57,0x5e,0x21,0x45,0x21,0x52,0x48,
+ 0x55,0x49,0x4c,0x68,0x4f,0x20,0x40,0x22,0x2c,0x0a,0x22,0x6a,0x41,0x5a,
+ 0x56,0x42,0x6d,0x42,0x6e,0x6d,0x6d,0x4e,0x6d,0x6e,0x6d,0x4d,0x76,0x7a,
+ 0x68,0x36,0x6f,0x20,0x23,0x22,0x2c,0x0a,0x22,0x6a,0x5a,0x5a,0x6d,0x42,
+ 0x6e,0x6e,0x6e,0x62,0x6e,0x62,0x62,0x62,0x62,0x76,0x78,0x78,0x67,0x36,
+ 0x6f,0x20,0x2b,0x22,0x2c,0x0a,0x22,0x6c,0x6d,0x6d,0x6e,0x62,0x6e,0x62,
+ 0x62,0x62,0x76,0x63,0x76,0x78,0x78,0x78,0x76,0x6a,0x73,0x36,0x4f,0x20,
+ 0x33,0x22,0x2c,0x0a,0x22,0x6a,0x42,0x6e,0x6e,0x76,0x63,0x76,0x78,0x76,
+ 0x63,0x76,0x78,0x76,0x78,0x7a,0x6a,0x68,0x64,0x38,0x6f,0x2b,0x43,0x22,
+ 0x2c,0x0a,0x22,0x6c,0x73,0x64,0x67,0x66,0x67,0x64,0x68,0x67,0x64,0x68,
+ 0x68,0x6a,0x68,0x6a,0x6b,0x68,0x67,0x36,0x2b,0x6c,0x5b,0x22,0x2c,0x0a,
+ 0x22,0x53,0x39,0x25,0x40,0x24,0x25,0x26,0x26,0x26,0x3d,0x2d,0x2d,0x3a,
+ 0x3a,0x3e,0x3e,0x3a,0x2d,0x3a,0x6c,0x5b,0x5b,0x22,0x2c,0x0a,0x22,0x5b,
+ 0x5b,0x43,0x35,0x31,0x31,0x2c,0x3a,0x3b,0x3b,0x3b,0x2a,0x2a,0x25,0x2b,
+ 0x2b,0x2e,0x32,0x63,0x5b,0x5b,0x5b,0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_right_xpm_len = 3634;
+static const unsigned char small_right_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x31,0x31,0x33,0x20,0x32,0x22,0x2c,0x0a,0x22,0x20,0x20,0x20,0x63,
+ 0x20,0x23,0x30,0x30,0x30,0x30,0x31,0x38,0x31,0x38,0x66,0x37,0x66,0x37,
+ 0x22,0x2c,0x0a,0x22,0x2e,0x20,0x20,0x63,0x20,0x23,0x30,0x30,0x30,0x30,
+ 0x31,0x38,0x31,0x38,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x58,0x20,
+ 0x20,0x63,0x20,0x23,0x30,0x30,0x30,0x30,0x32,0x31,0x32,0x31,0x66,0x37,
+ 0x66,0x37,0x22,0x2c,0x0a,0x22,0x6f,0x20,0x20,0x63,0x20,0x23,0x30,0x30,
+ 0x30,0x30,0x32,0x31,0x32,0x31,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,
+ 0x4f,0x20,0x20,0x63,0x20,0x23,0x30,0x30,0x30,0x30,0x32,0x39,0x32,0x39,
+ 0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x2b,0x20,0x20,0x63,0x20,0x23,
+ 0x31,0x30,0x31,0x30,0x33,0x31,0x33,0x31,0x65,0x66,0x65,0x66,0x22,0x2c,
+ 0x0a,0x22,0x40,0x20,0x20,0x63,0x20,0x23,0x31,0x38,0x31,0x38,0x33,0x31,
+ 0x33,0x31,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,0x23,0x20,0x20,0x63,
+ 0x20,0x23,0x31,0x38,0x31,0x38,0x33,0x39,0x33,0x39,0x65,0x37,0x65,0x37,
+ 0x22,0x2c,0x0a,0x22,0x24,0x20,0x20,0x63,0x20,0x23,0x31,0x30,0x31,0x30,
+ 0x33,0x31,0x33,0x31,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x25,0x20,
+ 0x20,0x63,0x20,0x23,0x31,0x30,0x31,0x30,0x33,0x39,0x33,0x39,0x66,0x66,
+ 0x66,0x66,0x22,0x2c,0x0a,0x22,0x26,0x20,0x20,0x63,0x20,0x23,0x32,0x39,
+ 0x32,0x39,0x33,0x39,0x33,0x39,0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,0x22,
+ 0x2a,0x20,0x20,0x63,0x20,0x23,0x33,0x31,0x33,0x31,0x33,0x39,0x33,0x39,
+ 0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x20,0x63,0x20,0x23,
+ 0x31,0x30,0x31,0x30,0x34,0x32,0x34,0x32,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x2d,0x20,0x20,0x63,0x20,0x23,0x31,0x38,0x31,0x38,0x34,0x32,
+ 0x34,0x32,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x3b,0x20,0x20,0x63,
+ 0x20,0x23,0x33,0x39,0x33,0x39,0x34,0x61,0x34,0x61,0x63,0x36,0x63,0x36,
+ 0x22,0x2c,0x0a,0x22,0x3a,0x20,0x20,0x63,0x20,0x23,0x32,0x39,0x32,0x39,
+ 0x35,0x32,0x35,0x32,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x3e,0x20,
+ 0x20,0x63,0x20,0x23,0x32,0x39,0x32,0x39,0x35,0x61,0x35,0x61,0x66,0x66,
+ 0x66,0x66,0x22,0x2c,0x0a,0x22,0x2c,0x20,0x20,0x63,0x20,0x23,0x33,0x31,
+ 0x33,0x31,0x35,0x32,0x35,0x32,0x65,0x66,0x65,0x66,0x22,0x2c,0x0a,0x22,
+ 0x3c,0x20,0x20,0x63,0x20,0x23,0x33,0x31,0x33,0x31,0x35,0x61,0x35,0x61,
+ 0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x31,0x20,0x20,0x63,0x20,0x23,
+ 0x33,0x31,0x33,0x31,0x36,0x33,0x36,0x33,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x32,0x20,0x20,0x63,0x20,0x23,0x33,0x39,0x33,0x39,0x36,0x62,
+ 0x36,0x62,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x33,0x20,0x20,0x63,
+ 0x20,0x23,0x34,0x61,0x34,0x61,0x35,0x61,0x35,0x61,0x62,0x64,0x62,0x64,
+ 0x22,0x2c,0x0a,0x22,0x34,0x20,0x20,0x63,0x20,0x23,0x36,0x33,0x36,0x33,
+ 0x36,0x62,0x36,0x62,0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x35,0x20,
+ 0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,0x37,0x33,0x37,0x33,0x62,0x35,
+ 0x62,0x35,0x22,0x2c,0x0a,0x22,0x36,0x20,0x20,0x63,0x20,0x23,0x37,0x33,
+ 0x37,0x33,0x37,0x62,0x37,0x62,0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,
+ 0x37,0x20,0x20,0x63,0x20,0x23,0x34,0x32,0x34,0x32,0x34,0x61,0x34,0x61,
+ 0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x38,0x20,0x20,0x63,0x20,0x23,
+ 0x34,0x61,0x34,0x61,0x35,0x32,0x35,0x32,0x63,0x36,0x63,0x36,0x22,0x2c,
+ 0x0a,0x22,0x39,0x20,0x20,0x63,0x20,0x23,0x34,0x61,0x34,0x61,0x35,0x61,
+ 0x35,0x61,0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x30,0x20,0x20,0x63,
+ 0x20,0x23,0x35,0x32,0x35,0x32,0x35,0x61,0x35,0x61,0x63,0x36,0x63,0x36,
+ 0x22,0x2c,0x0a,0x22,0x71,0x20,0x20,0x63,0x20,0x23,0x35,0x32,0x35,0x32,
+ 0x36,0x33,0x36,0x33,0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x77,0x20,
+ 0x20,0x63,0x20,0x23,0x35,0x32,0x35,0x32,0x36,0x62,0x36,0x62,0x63,0x65,
+ 0x63,0x65,0x22,0x2c,0x0a,0x22,0x65,0x20,0x20,0x63,0x20,0x23,0x35,0x61,
+ 0x35,0x61,0x36,0x62,0x36,0x62,0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,
+ 0x72,0x20,0x20,0x63,0x20,0x23,0x34,0x61,0x34,0x61,0x37,0x33,0x37,0x33,
+ 0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,0x74,0x20,0x20,0x63,0x20,0x23,
+ 0x34,0x61,0x34,0x61,0x37,0x33,0x37,0x33,0x65,0x66,0x65,0x66,0x22,0x2c,
+ 0x0a,0x22,0x79,0x20,0x20,0x63,0x20,0x23,0x34,0x32,0x34,0x32,0x37,0x33,
+ 0x37,0x33,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x75,0x20,0x20,0x63,
+ 0x20,0x23,0x34,0x61,0x34,0x61,0x37,0x62,0x37,0x62,0x66,0x66,0x66,0x66,
+ 0x22,0x2c,0x0a,0x22,0x69,0x20,0x20,0x63,0x20,0x23,0x35,0x32,0x35,0x32,
+ 0x37,0x62,0x37,0x62,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x70,0x20,
+ 0x20,0x63,0x20,0x23,0x36,0x33,0x36,0x33,0x37,0x33,0x37,0x33,0x63,0x36,
+ 0x63,0x36,0x22,0x2c,0x0a,0x22,0x61,0x20,0x20,0x63,0x20,0x23,0x36,0x33,
+ 0x36,0x33,0x37,0x33,0x37,0x33,0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,
+ 0x73,0x20,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,0x37,0x62,0x37,0x62,
+ 0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x64,0x20,0x20,0x63,0x20,0x23,
+ 0x37,0x62,0x37,0x62,0x38,0x34,0x38,0x34,0x62,0x35,0x62,0x35,0x22,0x2c,
+ 0x0a,0x22,0x66,0x20,0x20,0x63,0x20,0x23,0x35,0x61,0x35,0x61,0x38,0x34,
+ 0x38,0x34,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,0x67,0x20,0x20,0x63,
+ 0x20,0x23,0x35,0x61,0x35,0x61,0x38,0x34,0x38,0x34,0x65,0x66,0x65,0x66,
+ 0x22,0x2c,0x0a,0x22,0x68,0x20,0x20,0x63,0x20,0x23,0x35,0x32,0x35,0x32,
+ 0x38,0x34,0x38,0x34,0x66,0x37,0x66,0x37,0x22,0x2c,0x0a,0x22,0x6a,0x20,
+ 0x20,0x63,0x20,0x23,0x35,0x32,0x35,0x32,0x38,0x34,0x38,0x34,0x66,0x66,
+ 0x66,0x66,0x22,0x2c,0x0a,0x22,0x6b,0x20,0x20,0x63,0x20,0x23,0x35,0x61,
+ 0x35,0x61,0x38,0x63,0x38,0x63,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,
+ 0x6c,0x20,0x20,0x63,0x20,0x23,0x35,0x61,0x35,0x61,0x39,0x34,0x39,0x34,
+ 0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x7a,0x20,0x20,0x63,0x20,0x23,
+ 0x36,0x62,0x36,0x62,0x38,0x34,0x38,0x34,0x64,0x36,0x64,0x36,0x22,0x2c,
+ 0x0a,0x22,0x78,0x20,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,0x38,0x63,
+ 0x38,0x63,0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,0x22,0x63,0x20,0x20,0x63,
+ 0x20,0x23,0x37,0x33,0x37,0x33,0x38,0x34,0x38,0x34,0x63,0x36,0x63,0x36,
+ 0x22,0x2c,0x0a,0x22,0x76,0x20,0x20,0x63,0x20,0x23,0x37,0x62,0x37,0x62,
+ 0x38,0x63,0x38,0x63,0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x62,0x20,
+ 0x20,0x63,0x20,0x23,0x36,0x33,0x36,0x33,0x38,0x34,0x38,0x34,0x65,0x37,
+ 0x65,0x37,0x22,0x2c,0x0a,0x22,0x6e,0x20,0x20,0x63,0x20,0x23,0x36,0x33,
+ 0x36,0x33,0x38,0x63,0x38,0x63,0x65,0x66,0x65,0x66,0x22,0x2c,0x0a,0x22,
+ 0x6d,0x20,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,0x38,0x34,0x38,0x34,
+ 0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,0x4d,0x20,0x20,0x63,0x20,0x23,
+ 0x36,0x33,0x36,0x33,0x39,0x34,0x39,0x34,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x4e,0x20,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,0x39,0x34,
+ 0x39,0x34,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x42,0x20,0x20,0x63,
+ 0x20,0x23,0x36,0x62,0x36,0x62,0x39,0x63,0x39,0x63,0x66,0x66,0x66,0x66,
+ 0x22,0x2c,0x0a,0x22,0x56,0x20,0x20,0x63,0x20,0x23,0x37,0x33,0x37,0x33,
+ 0x39,0x63,0x39,0x63,0x65,0x37,0x65,0x37,0x22,0x2c,0x0a,0x22,0x43,0x20,
+ 0x20,0x63,0x20,0x23,0x37,0x33,0x37,0x33,0x39,0x63,0x39,0x63,0x66,0x66,
+ 0x66,0x66,0x22,0x2c,0x0a,0x22,0x5a,0x20,0x20,0x63,0x20,0x23,0x37,0x33,
+ 0x37,0x33,0x61,0x35,0x61,0x35,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,
+ 0x41,0x20,0x20,0x63,0x20,0x23,0x37,0x62,0x37,0x62,0x61,0x64,0x61,0x64,
+ 0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x53,0x20,0x20,0x63,0x20,0x23,
+ 0x38,0x34,0x38,0x34,0x38,0x34,0x38,0x34,0x62,0x35,0x62,0x35,0x22,0x2c,
+ 0x0a,0x22,0x44,0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,0x34,0x38,0x63,
+ 0x38,0x63,0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x46,0x20,0x20,0x63,
+ 0x20,0x23,0x38,0x63,0x38,0x63,0x39,0x34,0x39,0x34,0x62,0x35,0x62,0x35,
+ 0x22,0x2c,0x0a,0x22,0x47,0x20,0x20,0x63,0x20,0x23,0x39,0x34,0x39,0x34,
+ 0x39,0x34,0x39,0x34,0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,0x48,0x20,
+ 0x20,0x63,0x20,0x23,0x39,0x34,0x39,0x34,0x39,0x63,0x39,0x63,0x62,0x35,
+ 0x62,0x35,0x22,0x2c,0x0a,0x22,0x4a,0x20,0x20,0x63,0x20,0x23,0x39,0x63,
+ 0x39,0x63,0x39,0x63,0x39,0x63,0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,
+ 0x4b,0x20,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,0x39,0x63,0x39,0x63,
+ 0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x4c,0x20,0x20,0x63,0x20,0x23,
+ 0x61,0x35,0x61,0x35,0x61,0x35,0x61,0x35,0x62,0x35,0x62,0x35,0x22,0x2c,
+ 0x0a,0x22,0x50,0x20,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x61,0x64,
+ 0x61,0x64,0x62,0x35,0x62,0x35,0x22,0x2c,0x0a,0x22,0x49,0x20,0x20,0x63,
+ 0x20,0x23,0x61,0x64,0x61,0x64,0x61,0x64,0x61,0x64,0x62,0x64,0x62,0x64,
+ 0x22,0x2c,0x0a,0x22,0x55,0x20,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,
+ 0x62,0x35,0x62,0x35,0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x59,0x20,
+ 0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x62,0x64,0x62,0x64,0x62,0x64,
+ 0x62,0x64,0x22,0x2c,0x0a,0x22,0x54,0x20,0x20,0x63,0x20,0x47,0x72,0x61,
+ 0x79,0x37,0x34,0x22,0x2c,0x0a,0x22,0x52,0x20,0x20,0x63,0x20,0x23,0x38,
+ 0x34,0x38,0x34,0x39,0x34,0x39,0x34,0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,
+ 0x22,0x45,0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,0x34,0x39,0x34,0x39,
+ 0x34,0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x57,0x20,0x20,0x63,0x20,
+ 0x23,0x38,0x63,0x38,0x63,0x61,0x35,0x61,0x35,0x63,0x65,0x63,0x65,0x22,
+ 0x2c,0x0a,0x22,0x51,0x20,0x20,0x63,0x20,0x23,0x38,0x63,0x38,0x63,0x61,
+ 0x64,0x61,0x64,0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,0x22,0x21,0x20,0x20,
+ 0x63,0x20,0x23,0x39,0x63,0x39,0x63,0x61,0x35,0x61,0x35,0x63,0x36,0x63,
+ 0x36,0x22,0x2c,0x0a,0x22,0x7e,0x20,0x20,0x63,0x20,0x23,0x39,0x34,0x39,
+ 0x34,0x61,0x64,0x61,0x64,0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,0x22,0x5e,
+ 0x20,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,0x61,0x64,0x61,0x64,0x64,
+ 0x36,0x64,0x36,0x22,0x2c,0x0a,0x22,0x2f,0x20,0x20,0x63,0x20,0x23,0x39,
+ 0x63,0x39,0x63,0x62,0x64,0x62,0x64,0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,
+ 0x22,0x28,0x20,0x20,0x63,0x20,0x23,0x38,0x63,0x38,0x63,0x61,0x64,0x61,
+ 0x64,0x65,0x66,0x65,0x66,0x22,0x2c,0x0a,0x22,0x29,0x20,0x20,0x63,0x20,
+ 0x23,0x38,0x34,0x38,0x34,0x61,0x64,0x61,0x64,0x66,0x66,0x66,0x66,0x22,
+ 0x2c,0x0a,0x22,0x5f,0x20,0x20,0x63,0x20,0x23,0x38,0x34,0x38,0x34,0x62,
+ 0x35,0x62,0x35,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x60,0x20,0x20,
+ 0x63,0x20,0x23,0x38,0x63,0x38,0x63,0x62,0x35,0x62,0x35,0x66,0x37,0x66,
+ 0x37,0x22,0x2c,0x0a,0x22,0x27,0x20,0x20,0x63,0x20,0x23,0x38,0x63,0x38,
+ 0x63,0x62,0x35,0x62,0x35,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x5d,
+ 0x20,0x20,0x63,0x20,0x23,0x38,0x63,0x38,0x63,0x62,0x64,0x62,0x64,0x66,
+ 0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x5b,0x20,0x20,0x63,0x20,0x23,0x39,
+ 0x34,0x39,0x34,0x62,0x64,0x62,0x64,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,
+ 0x22,0x7b,0x20,0x20,0x63,0x20,0x23,0x61,0x35,0x61,0x35,0x62,0x64,0x62,
+ 0x64,0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,0x22,0x7d,0x20,0x20,0x63,0x20,
+ 0x23,0x62,0x35,0x62,0x35,0x62,0x35,0x62,0x35,0x63,0x36,0x63,0x36,0x22,
+ 0x2c,0x0a,0x22,0x7c,0x20,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x62,
+ 0x64,0x62,0x64,0x63,0x36,0x63,0x36,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x20,
+ 0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x62,0x64,0x62,0x64,0x65,0x66,0x65,
+ 0x66,0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x20,0x63,0x20,0x23,0x38,0x63,0x38,
+ 0x63,0x63,0x36,0x63,0x36,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x58,
+ 0x2e,0x20,0x63,0x20,0x23,0x39,0x34,0x39,0x34,0x63,0x36,0x63,0x36,0x66,
+ 0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x6f,0x2e,0x20,0x63,0x20,0x23,0x39,
+ 0x34,0x39,0x34,0x63,0x65,0x63,0x65,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,
+ 0x22,0x4f,0x2e,0x20,0x63,0x20,0x23,0x39,0x63,0x39,0x63,0x63,0x65,0x63,
+ 0x65,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x2b,0x2e,0x20,0x63,0x20,
+ 0x23,0x61,0x35,0x61,0x35,0x64,0x36,0x64,0x36,0x66,0x66,0x66,0x66,0x22,
+ 0x2c,0x0a,0x22,0x40,0x2e,0x20,0x63,0x20,0x23,0x61,0x64,0x61,0x64,0x64,
+ 0x65,0x64,0x65,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x23,0x2e,0x20,
+ 0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x64,0x36,0x64,0x36,0x66,0x66,0x66,
+ 0x66,0x22,0x2c,0x0a,0x22,0x24,0x2e,0x20,0x63,0x20,0x23,0x61,0x64,0x61,
+ 0x64,0x65,0x37,0x65,0x37,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x25,
+ 0x2e,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x65,0x37,0x65,0x37,0x66,
+ 0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x26,0x2e,0x20,0x63,0x20,0x23,0x62,
+ 0x64,0x62,0x64,0x65,0x37,0x65,0x37,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,
+ 0x22,0x2a,0x2e,0x20,0x63,0x20,0x23,0x62,0x64,0x62,0x64,0x65,0x66,0x65,
+ 0x66,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x3d,0x2e,0x20,0x63,0x20,
+ 0x23,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x22,
+ 0x2c,0x0a,0x22,0x2d,0x2e,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x63,
+ 0x65,0x63,0x65,0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x3b,0x2e,0x20,
+ 0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x65,0x66,0x65,0x66,0x66,0x66,0x66,
+ 0x66,0x22,0x2c,0x0a,0x22,0x3a,0x2e,0x20,0x63,0x20,0x23,0x63,0x65,0x63,
+ 0x65,0x65,0x66,0x65,0x66,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x3e,
+ 0x2e,0x20,0x63,0x20,0x23,0x63,0x36,0x63,0x36,0x66,0x37,0x66,0x37,0x66,
+ 0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x2c,0x2e,0x20,0x63,0x20,0x23,0x63,
+ 0x65,0x63,0x65,0x66,0x37,0x66,0x37,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,
+ 0x22,0x3c,0x2e,0x20,0x63,0x20,0x23,0x64,0x36,0x64,0x36,0x66,0x37,0x66,
+ 0x37,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x31,0x2e,0x20,0x63,0x20,
+ 0x23,0x65,0x37,0x65,0x37,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x22,
+ 0x2c,0x0a,0x22,0x32,0x2e,0x20,0x63,0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,
+ 0x0a,0x2f,0x2a,0x20,0x70,0x69,0x78,0x65,0x6c,0x73,0x20,0x2a,0x2f,0x0a,
+ 0x22,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x22,0x2c,0x0a,0x22,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x22,0x2c,0x0a,0x22,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x54,0x20,0x21,0x20,0x66,0x20,0x47,
+ 0x20,0x54,0x20,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x22,0x2c,0x0a,0x22,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x59,
+ 0x20,0x2d,0x2e,0x3b,0x2e,0x74,0x20,0x44,0x20,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x22,0x2c,0x0a,0x22,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x54,0x20,0x7b,0x20,0x2a,0x2e,0x6f,0x2e,0x68,
+ 0x20,0x70,0x20,0x54,0x20,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x22,
+ 0x2c,0x0a,0x22,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x59,0x20,0x2f,
+ 0x20,0x4f,0x2e,0x2b,0x2e,0x4f,0x2e,0x75,0x20,0x36,0x20,0x54,0x20,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x22,0x2c,0x0a,0x22,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x54,0x20,0x51,0x20,0x58,0x2e,0x58,0x2e,0x6f,0x2e,0x4f,
+ 0x2e,0x6b,0x20,0x61,0x20,0x55,0x20,0x32,0x2e,0x32,0x2e,0x22,0x2c,0x0a,
+ 0x22,0x50,0x20,0x45,0x20,0x6d,0x20,0x7a,0x20,0x63,0x20,0x52,0x20,0x4b,
+ 0x20,0x7d,0x20,0x54,0x20,0x7c,0x20,0x54,0x20,0x48,0x20,0x56,0x20,0x5d,
+ 0x20,0x5d,0x20,0x5d,0x20,0x58,0x2e,0x58,0x2e,0x6c,0x20,0x39,0x20,0x49,
+ 0x20,0x32,0x2e,0x22,0x2c,0x0a,0x22,0x78,0x20,0x3c,0x2e,0x31,0x2e,0x3a,
+ 0x2e,0x23,0x2e,0x4f,0x2e,0x60,0x20,0x28,0x20,0x57,0x20,0x7e,0x20,0x5e,
+ 0x20,0x20,0x2e,0x27,0x20,0x41,0x20,0x5f,0x20,0x5f,0x20,0x5d,0x20,0x5d,
+ 0x20,0x5d,0x20,0x6a,0x20,0x77,0x20,0x50,0x20,0x22,0x2c,0x0a,0x22,0x67,
+ 0x20,0x3e,0x2e,0x25,0x2e,0x24,0x2e,0x40,0x2e,0x25,0x2e,0x25,0x2e,0x26,
+ 0x2e,0x3b,0x2e,0x2c,0x2e,0x3c,0x2e,0x3b,0x2e,0x5b,0x20,0x41,0x20,0x5f,
+ 0x20,0x5f,0x20,0x5f,0x20,0x29,0x20,0x5f,0x20,0x5d,0x20,0x75,0x20,0x71,
+ 0x20,0x22,0x2c,0x0a,0x22,0x6e,0x20,0x24,0x2e,0x4f,0x2e,0x5b,0x20,0x5d,
+ 0x20,0x5d,0x20,0x5d,0x20,0x5f,0x20,0x5d,0x20,0x5d,0x20,0x5d,0x20,0x5f,
+ 0x20,0x41,0x20,0x29,0x20,0x41,0x20,0x29,0x20,0x41,0x20,0x41,0x20,0x5a,
+ 0x20,0x5a,0x20,0x4d,0x20,0x2c,0x20,0x22,0x2c,0x0a,0x22,0x67,0x20,0x4f,
+ 0x2e,0x58,0x2e,0x5f,0x20,0x5f,0x20,0x41,0x20,0x41,0x20,0x41,0x20,0x41,
+ 0x20,0x41,0x20,0x41,0x20,0x41,0x20,0x5f,0x20,0x41,0x20,0x41,0x20,0x41,
+ 0x20,0x41,0x20,0x5a,0x20,0x4e,0x20,0x6a,0x20,0x3e,0x20,0x23,0x20,0x22,
+ 0x2c,0x0a,0x22,0x72,0x20,0x2e,0x2e,0x5f,0x20,0x5a,0x20,0x42,0x20,0x4d,
+ 0x20,0x6b,0x20,0x6b,0x20,0x75,0x20,0x32,0x20,0x32,0x20,0x6b,0x20,0x41,
+ 0x20,0x41,0x20,0x41,0x20,0x41,0x20,0x43,0x20,0x42,0x20,0x69,0x20,0x3a,
+ 0x20,0x6f,0x20,0x33,0x20,0x22,0x2c,0x0a,0x22,0x65,0x20,0x79,0x20,0x31,
+ 0x20,0x3a,0x20,0x2d,0x20,0x24,0x20,0x2b,0x20,0x40,0x20,0x26,0x20,0x3b,
+ 0x20,0x3b,0x20,0x2b,0x20,0x6b,0x20,0x29,0x20,0x5a,0x20,0x5a,0x20,0x42,
+ 0x20,0x75,0x20,0x2d,0x20,0x6f,0x20,0x37,0x20,0x55,0x20,0x22,0x2c,0x0a,
+ 0x22,0x4c,0x20,0x39,0x20,0x26,0x20,0x26,0x20,0x33,0x20,0x34,0x20,0x53,
+ 0x20,0x4a,0x20,0x55,0x20,0x54,0x20,0x54,0x20,0x46,0x20,0x62,0x20,0x5a,
+ 0x20,0x43,0x20,0x4e,0x20,0x6a,0x20,0x2d,0x20,0x6f,0x20,0x2a,0x20,0x4c,
+ 0x20,0x32,0x2e,0x22,0x2c,0x0a,0x22,0x32,0x2e,0x59,0x20,0x50,0x20,0x59,
+ 0x20,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x54,0x20,0x57,0x20,0x4d,0x20,0x4d,0x20,0x79,0x20,0x25,0x20,0x6f,
+ 0x20,0x38,0x20,0x50,0x20,0x32,0x2e,0x32,0x2e,0x22,0x2c,0x0a,0x22,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x57,0x20,0x6a,0x20,0x79,
+ 0x20,0x3d,0x20,0x2e,0x20,0x30,0x20,0x59,0x20,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x22,0x2c,0x0a,0x22,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x76,0x20,0x3c,0x20,0x25,0x20,0x58,0x20,0x34,0x20,0x50,0x20,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x22,0x2c,0x0a,0x22,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x73,0x20,0x4f,0x20,0x20,0x20,0x35,
+ 0x20,0x7c,0x20,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x22,
+ 0x2c,0x0a,0x22,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x44,
+ 0x20,0x26,0x20,0x64,0x20,0x54,0x20,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x22,0x2c,0x0a,0x22,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x22,0x2c,0x0a,
+ 0x22,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,0x2e,0x32,
+ 0x2e,0x32,0x2e,0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_adjustsize_png_len = 495;
+static const unsigned char small_adjustsize_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x04,0x00,0x00,
+ 0x00,0x6e,0xbd,0xa4,0xb0,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0x81,0x49,0x44,0x41,0x54,0x28,0x15,0x05,0xc1,
+ 0x3b,0x6e,0x13,0x41,0x00,0x00,0xd0,0x37,0xeb,0xb1,0xc9,0x5a,0x96,0x50,
+ 0x10,0x14,0x71,0x44,0x42,0x83,0x90,0xa8,0x88,0x28,0xb8,0x47,0x6e,0x41,
+ 0x81,0xa0,0xa2,0x40,0x42,0xb4,0x40,0x9b,0xe4,0x0c,0x50,0x50,0xd3,0xd0,
+ 0x70,0x19,0x0c,0xa2,0xc0,0x90,0x58,0xd9,0xcc,0xee,0x7c,0x78,0x2f,0x36,
+ 0x21,0x98,0x99,0xe9,0x04,0x01,0x40,0xd3,0x54,0x45,0x69,0x0d,0x80,0x18,
+ 0x82,0x85,0xa5,0x95,0xde,0x42,0x07,0xa0,0xca,0x46,0x83,0x31,0x4c,0x9a,
+ 0xaa,0xc8,0x4a,0x34,0xb3,0x3c,0xfd,0x03,0x00,0x00,0x8f,0xf5,0xe6,0xe6,
+ 0x3a,0xbc,0x5c,0xdb,0x19,0xa2,0x99,0x55,0xf5,0x19,0x00,0xc0,0x85,0x27,
+ 0xd6,0xee,0x58,0x59,0x38,0x63,0x6d,0x63,0x8a,0x3a,0x7d,0x95,0x00,0x00,
+ 0x64,0xbf,0x2d,0xf5,0x16,0x3a,0x95,0x7d,0x5b,0x97,0x51,0xb0,0x28,0xae,
+ 0x01,0x00,0x8c,0xb6,0xee,0x1a,0xf4,0x3a,0x85,0x5e,0xd4,0x45,0x41,0x37,
+ 0xd9,0x01,0x00,0x48,0xae,0x25,0xc9,0xa8,0x53,0x00,0x11,0x8a,0x1d,0xe0,
+ 0x04,0x3c,0x74,0x2e,0x29,0x26,0xa3,0x24,0xc8,0x80,0x08,0xd9,0x0e,0x00,
+ 0x0f,0x7c,0xb0,0x34,0x9a,0x8c,0x46,0x49,0x30,0x01,0x22,0x64,0x3b,0x00,
+ 0xf7,0x5d,0xf9,0xa5,0x97,0x4c,0x46,0x49,0x42,0x06,0x44,0xc8,0xae,0x00,
+ 0x47,0xde,0xb8,0xf2,0xce,0x6b,0x49,0x36,0x4a,0x12,0x26,0x40,0xd4,0xd4,
+ 0xec,0x1a,0xf0,0xca,0x9e,0x3d,0x2f,0xbc,0xf7,0xcc,0x81,0x6c,0x74,0xa3,
+ 0xca,0x80,0xa8,0xc9,0xd5,0x57,0x00,0xc0,0x53,0xdf,0x1d,0x3b,0x96,0xfd,
+ 0x70,0x20,0x03,0xa2,0x6a,0x7c,0xe4,0xc4,0x3f,0x83,0x0c,0xe0,0xd0,0x91,
+ 0x4f,0xee,0x29,0x3e,0xba,0x30,0x01,0xa2,0x62,0xe8,0xac,0xcc,0x4c,0x2a,
+ 0x80,0xce,0xa1,0xe7,0xce,0xed,0xd9,0xb8,0x91,0x01,0x51,0x31,0x32,0x17,
+ 0x54,0x0d,0x40,0xd0,0x29,0x6e,0xd9,0x20,0xc9,0x80,0xd8,0x5a,0x98,0x9a,
+ 0xce,0x5c,0x03,0x00,0x7f,0x9d,0xf9,0x09,0x46,0x13,0x20,0xa2,0x55,0x05,
+ 0x00,0xc0,0x6d,0x6f,0x01,0x49,0x01,0x44,0xd4,0xe2,0x1b,0x00,0x00,0x00,
+ 0xc0,0x20,0xab,0x11,0xe5,0xcb,0xda,0xda,0xbe,0x1e,0x00,0x00,0xc0,0x60,
+ 0x6b,0x50,0x22,0xb2,0x9d,0x8d,0xad,0x08,0x00,0x00,0x20,0x1b,0xec,0xe4,
+ 0x88,0x62,0x30,0xb9,0xd4,0x01,0x00,0x00,0xa8,0x8a,0xac,0xfc,0x07,0xf0,
+ 0x84,0xac,0x17,0x4d,0x9c,0xec,0x12,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,
+ 0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_buttongroup_png_len = 648;
+static const unsigned char small_buttongroup_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x02,0x1a,0x49,0x44,0x41,0x54,0x48,0xc7,0xb5,0x94,
+ 0xbf,0x8b,0x1a,0x41,0x14,0xc7,0x97,0x80,0x20,0x78,0x57,0xe4,0x9f,0xb0,
+ 0xb3,0x4b,0x65,0x40,0xf0,0x17,0x57,0x9c,0xdb,0x88,0x6b,0x11,0x41,0x2c,
+ 0x02,0x82,0x88,0x85,0x68,0x63,0x21,0x16,0x16,0x0a,0x16,0x12,0x10,0x44,
+ 0x10,0x11,0xc5,0x1f,0x8d,0x68,0x11,0xb0,0x11,0x22,0x11,0xb1,0xb2,0xb0,
+ 0x31,0x85,0x8d,0x8d,0x85,0x8d,0x85,0x85,0x20,0xc8,0xcb,0xbc,0xc7,0xce,
+ 0xb0,0xdc,0xa8,0x47,0xf0,0x22,0x7c,0x98,0x99,0xaf,0xbb,0x1f,0xc7,0x37,
+ 0xcc,0x53,0x00,0x40,0xf9,0x1f,0xc8,0x81,0xa2,0x68,0x8c,0x5f,0x0c,0xb8,
+ 0x03,0x7e,0xaf,0xbd,0x2b,0x66,0x9f,0x4f,0x0c,0x13,0xc3,0xcc,0xf8,0xfd,
+ 0x8e,0x94,0x83,0xcf,0x3d,0x1b,0x78,0x62,0x58,0x74,0x87,0x89,0xa4,0x4e,
+ 0xa7,0xf3,0x9b,0xdb,0xed,0x9e,0x79,0x3c,0x1e,0x78,0x04,0x97,0xcb,0xb5,
+ 0xb0,0xdb,0xed,0x51,0xe6,0xfc,0x8c,0x62,0x13,0x4a,0x57,0xab,0x15,0x5c,
+ 0x2e,0x97,0x87,0x40,0x07,0xdb,0xe4,0x92,0x39,0xad,0x28,0x36,0xe3,0xaf,
+ 0x9d,0xcf,0x67,0x62,0x3c,0x1e,0xc3,0x70,0x38,0x84,0x6e,0xb7,0x0b,0xc5,
+ 0x62,0x51,0xe4,0xbc,0x04,0xf3,0xf9,0x5c,0x64,0xd7,0x40,0x17,0x7b,0xce,
+ 0x8e,0x62,0x0b,0x2e,0x4e,0xa7,0x13,0x31,0x18,0x0c,0xe0,0xcb,0xcf,0xef,
+ 0xa0,0x74,0x3d,0x10,0x8b,0xc5,0x44,0x8e,0x94,0x4a,0x25,0x92,0x1b,0xb3,
+ 0xb7,0xe8,0xe2,0x17,0x14,0x3f,0xe1,0xe2,0x78,0x3c,0x12,0xed,0x76,0x9b,
+ 0xa4,0xca,0x8f,0xaf,0x10,0x89,0x44,0x44,0x8e,0x42,0xe3,0x78,0x0b,0x5d,
+ 0xfc,0x8a,0xe2,0x67,0x5c,0x1c,0x0e,0x07,0x22,0x9f,0xcf,0x43,0x34,0x1a,
+ 0x85,0x70,0x38,0x0c,0xc1,0x60,0x50,0xe4,0xf1,0x78,0x5c,0x94,0xa3,0x50,
+ 0x28,0x50,0xf6,0x76,0x44,0x74,0xb1,0x2a,0xc4,0xfb,0xfd,0xfe,0x43,0x90,
+ 0xc4,0xbb,0xdd,0x8e,0x18,0x8d,0x46,0xd0,0xeb,0xf5,0xa0,0xd1,0x68,0x40,
+ 0x36,0x9b,0x15,0x39,0xee,0x94,0xcf,0xef,0x21,0x89,0xb7,0xdb,0x2d,0xd1,
+ 0xe9,0x74,0xc4,0xe1,0x61,0x8d,0x79,0xce,0xcb,0x90,0xcb,0xe5,0x44,0x76,
+ 0x0d,0x49,0xbc,0xd9,0x6c,0x88,0x5a,0xad,0x26,0x0e,0x0f,0x6b,0xcc,0x73,
+ 0x94,0x1a,0xc7,0x5b,0x48,0xe2,0xf5,0x7a,0x4d,0xa4,0xd3,0x69,0x08,0x85,
+ 0x42,0x10,0x08,0x04,0x40,0x55,0x55,0x91,0xf3,0x1d,0x67,0x32,0x19,0x5a,
+ 0xdf,0x1a,0x25,0x31,0xde,0x9a,0x8f,0x40,0x12,0x2f,0x97,0x4b,0xa2,0xdf,
+ 0xef,0xd3,0xc1,0x55,0x2a,0x15,0x48,0x26,0x93,0x22,0x6f,0xb5,0x5a,0xb4,
+ 0xe3,0x54,0x2a,0x25,0xb2,0x6b,0x48,0xe2,0xc5,0x62,0x41,0xd4,0xeb,0x75,
+ 0x71,0x78,0x9a,0xa6,0x89,0x1c,0xa5,0x7c,0x7e,0x0f,0x49,0x3c,0x9b,0xcd,
+ 0x88,0x72,0xb9,0x2c,0x0e,0x0f,0x6b,0xcc,0x73,0x14,0xf3,0xf9,0x3d,0x8c,
+ 0x62,0xba,0xd2,0xd3,0xe9,0x94,0xc0,0xfe,0xe0,0xf7,0xfb,0xc1,0xe7,0xf3,
+ 0x81,0xd7,0xeb,0x15,0x79,0xb5,0x5a,0x25,0x79,0x22,0x91,0xa0,0xf5,0xad,
+ 0xd1,0x78,0xa5,0x2d,0xd8,0x47,0x9b,0xcd,0x26,0x4c,0x26,0x93,0x87,0x40,
+ 0x87,0xc3,0xe1,0xf8,0xc3,0x9b,0x90,0x19,0x9b,0x33,0xf6,0xd1,0x47,0x1b,
+ 0x3d,0x4a,0x6d,0x36,0x5b,0x89,0xb7,0x4d,0x93,0xde,0xf1,0xad,0x7a,0xf0,
+ 0xa2,0xff,0x15,0xf5,0x1f,0x79,0xd5,0xdf,0x45,0x87,0xf5,0x2f,0xff,0xbc,
+ 0x8d,0x3a,0x81,0x5d,0xdc,0x05,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,
+ 0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_checkbox_png_len = 817;
+static const unsigned char small_checkbox_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x02,0xc3,0x49,0x44,0x41,0x54,0x48,0xc7,0xcd,0xd5,
+ 0xdd,0x4b,0x53,0x71,0x1c,0xc7,0xf1,0x19,0x4b,0x06,0xba,0x34,0xbd,0x69,
+ 0x12,0xa2,0x5e,0x68,0x74,0x93,0xba,0xf2,0xa2,0x89,0xc3,0x39,0x6f,0xd4,
+ 0xcd,0x21,0x08,0xd1,0x1f,0x90,0xbb,0x88,0xcd,0x3d,0x34,0x63,0x93,0xe6,
+ 0xc3,0xa6,0x6d,0xea,0x36,0x1f,0x26,0xdb,0x45,0xed,0x79,0x16,0x74,0xd3,
+ 0x75,0x50,0x74,0x19,0x04,0x5d,0x94,0xe2,0x8d,0xf8,0xa7,0x7c,0xfa,0xfc,
+ 0x8e,0xe7,0x94,0x5b,0xa6,0x53,0x08,0x1a,0xbc,0x61,0xb2,0xdf,0xef,0xb5,
+ 0xb3,0xc3,0xf7,0x77,0x54,0x01,0x50,0xfd,0x8b,0x54,0xff,0x2d,0xcc,0xd7,
+ 0x03,0x96,0x61,0x41,0x76,0x8b,0x5d,0xfb,0x05,0xf3,0x55,0xc7,0xd4,0x4c,
+ 0xc3,0x1a,0x98,0xb6,0xc6,0x8c,0xac,0xb8,0x3b,0x30,0x80,0xe7,0xcd,0xcd,
+ 0x02,0x7a,0xc5,0xda,0x25,0x4b,0x86,0xd5,0xc1,0x60,0x10,0x4e,0xa7,0x13,
+ 0x33,0x33,0x33,0x35,0x35,0x3d,0x3d,0x8d,0xce,0xce,0x4e,0xa4,0x4c,0x26,
+ 0x1c,0x8d,0x8e,0xe2,0x3b,0xaf,0xf1,0x29,0xa3,0x15,0x95,0x2e,0x4e,0x86,
+ 0x35,0x02,0x7d,0xb3,0xb7,0x87,0x4c,0xe6,0x35,0xb2,0xd9,0x2c,0x72,0xb9,
+ 0x1c,0xf2,0xac,0x50,0xc8,0xa3,0x58,0x2c,0xa2,0x54,0x2a,0xa2,0x5c,0x2e,
+ 0x49,0x6b,0xa2,0xd1,0x28,0xc6,0xc7,0xc7,0x25,0xf4,0x78,0x62,0x02,0x3f,
+ 0x08,0xbe,0x63,0xb3,0x27,0xf0,0x7b,0x76,0x53,0x81,0x1b,0xc4,0x55,0x08,
+ 0x74,0x65,0x65,0x05,0x2f,0x57,0x57,0x11,0x89,0x44,0x08,0x44,0xb0,0xbe,
+ 0xb6,0x86,0x8d,0x8d,0x75,0xc4,0x63,0x31,0x24,0x12,0x71,0x3c,0x9f,0x9b,
+ 0xc3,0xf0,0xf0,0x70,0x05,0xfa,0x96,0x3d,0x39,0x41,0x3f,0xb2,0xc7,0xac,
+ 0x45,0x81,0xb5,0x02,0xce,0x66,0x33,0x67,0xa0,0x1b,0xb5,0xa2,0x5f,0x98,
+ 0x83,0x75,0xb0,0xc6,0x0a,0x58,0xfc,0x7c,0x81,0x2e,0x2d,0x2e,0xc2,0x66,
+ 0xb3,0xc1,0x68,0x34,0xc2,0xeb,0xf1,0x20,0x11,0x8f,0x61,0xee,0x7c,0x94,
+ 0xb7,0x58,0xf5,0x82,0xdd,0x63,0xcd,0xec,0xfa,0x1f,0xb0,0x40,0x4d,0xdc,
+ 0x3c,0xdf,0xdb,0x8b,0x2d,0x9d,0x0e,0x43,0x43,0x43,0xf0,0x78,0xdc,0xe7,
+ 0xa1,0xa2,0x24,0x1b,0x65,0xb7,0x25,0x54,0x4c,0xd9,0x69,0x38,0x9f,0xcf,
+ 0xc1,0x36,0x39,0x29,0xa1,0xc7,0x56,0x2b,0x0e,0xdb,0xdb,0x11,0xe7,0xc6,
+ 0xb6,0xb6,0x36,0xa4,0x08,0x57,0xa3,0x77,0x7a,0x7a,0x14,0x98,0x7f,0xaa,
+ 0xee,0x4b,0xf7,0x96,0xe8,0xe9,0x39,0x96,0xe0,0x42,0xa1,0x80,0xc1,0xc1,
+ 0x41,0xec,0x12,0x3a,0xec,0xe8,0xc0,0x41,0x6b,0x2b,0xf6,0xb5,0x5a,0x7c,
+ 0xd6,0xeb,0x71,0x64,0x36,0x57,0xa0,0xfd,0xfd,0xfd,0x98,0x9a,0x9a,0x52,
+ 0xe0,0x47,0xec,0x2e,0xbb,0x51,0x71,0xf2,0x14,0x58,0x8c,0x95,0xdb,0xed,
+ 0x86,0xc1,0xf0,0x10,0xdb,0xfc,0x48,0xa0,0x07,0x4d,0x4d,0x38,0x68,0x69,
+ 0xc1,0xb7,0x2a,0xd4,0x6e,0xb7,0xc3,0xe5,0x9a,0x55,0x60,0x1b,0xeb,0x11,
+ 0xce,0x99,0x70,0x89,0x70,0x8c,0x53,0xe0,0x76,0xb9,0xa0,0xe3,0xfd,0xfd,
+ 0xc4,0x2b,0xdf,0xaf,0xaf,0xc7,0x07,0x2e,0xcb,0x55,0xa1,0x62,0x04,0xfd,
+ 0x7e,0xbf,0x02,0x5b,0x59,0xf7,0x5f,0xe1,0x72,0xa9,0xc4,0x09,0x88,0x4b,
+ 0xe3,0x65,0xb5,0x58,0x10,0x68,0x6c,0xc4,0x57,0x2e,0x29,0x2b,0x68,0x5f,
+ 0x9f,0x74,0xea,0x04,0x9a,0x4e,0xa7,0xb1,0xb0,0x10,0x54,0x60,0xcb,0xb9,
+ 0xf0,0x5e,0xb9,0x8c,0xcd,0xcd,0x04,0xb6,0xb6,0x36,0x11,0x0e,0x87,0x31,
+ 0x32,0x62,0x82,0x53,0x3e,0x51,0x7a,0xde,0x67,0xbb,0x5d,0x41,0x53,0x9c,
+ 0xa0,0x2c,0x42,0xa1,0xe5,0xda,0x60,0x71,0x5c,0x05,0xba,0xb3,0xb3,0x8d,
+ 0x64,0x32,0xc9,0x53,0x18,0x86,0x95,0xd3,0x61,0x30,0x18,0xe0,0x70,0x38,
+ 0xa4,0x5f,0x92,0x4e,0x11,0xe5,0x91,0x2f,0x16,0x0b,0xfc,0xf2,0xd0,0xc5,
+ 0xf0,0xd8,0xd8,0x18,0xe2,0x3c,0x08,0x5e,0xaf,0x17,0x3e,0x9f,0x4f,0x3a,
+ 0x10,0xe2,0xa4,0x89,0xf7,0x3e,0xdf,0x33,0xa9,0x40,0xc0,0x0f,0xf1,0xb0,
+ 0x0a,0x2d,0x2f,0x21,0x1c,0x0a,0x61,0x3e,0x10,0xb8,0x10,0x6e,0x50,0xfd,
+ 0x1e,0xf6,0xab,0x64,0x66,0x5d,0xc2,0xa9,0x86,0xc5,0x73,0x58,0xc7,0xf4,
+ 0xf2,0x22,0xcb,0x25,0x32,0xcb,0xfb,0xc4,0x7e,0x4d,0x35,0xac,0x96,0x1f,
+ 0xdc,0x3a,0xf9,0x9b,0xbb,0x2f,0x51,0x97,0xbc,0x4f,0xec,0x57,0x57,0xc3,
+ 0x57,0xfd,0x0f,0xa2,0x95,0xd7,0x6b,0xe4,0xfd,0x75,0x0a,0xfc,0x13,0xde,
+ 0x0c,0x36,0x4e,0x07,0x4d,0xc5,0xde,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,
+ 0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_closebutton_png_len = 585;
+static const unsigned char small_closebutton_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x19,0x74,0x45,0x58,0x74,0x53,
+ 0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,0x65,0x20,
+ 0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c,
+ 0x00,0x00,0x01,0xeb,0x49,0x44,0x41,0x54,0x78,0x9c,0xa5,0x95,0xcb,0x6a,
+ 0xdb,0x50,0x10,0x86,0x3f,0xd9,0xb2,0x53,0x15,0x8b,0xa6,0xd4,0x25,0x86,
+ 0x6e,0x9c,0x8d,0xbd,0xee,0xaa,0xd0,0xbc,0x48,0xdf,0xa0,0xd0,0x17,0x31,
+ 0x86,0xbe,0x43,0xf6,0x7d,0x0b,0x83,0x37,0x01,0xb7,0x38,0x02,0x9b,0xba,
+ 0x18,0xd2,0x65,0x4a,0x4f,0x20,0xc2,0x6a,0x84,0xa5,0x73,0xc9,0x42,0x17,
+ 0x24,0x45,0x35,0xb6,0xf3,0xc3,0xc0,0xb9,0xcc,0xf9,0x34,0x67,0xe6,0x30,
+ 0xb2,0x80,0xc6,0x78,0x3c,0xfe,0xa4,0xb5,0xfe,0x22,0x84,0xb8,0x08,0x82,
+ 0x80,0x43,0xe5,0xfb,0x3e,0x9e,0xe7,0x5d,0x2d,0x97,0xcb,0x4b,0xe0,0x1b,
+ 0xf0,0x00,0xd0,0x1a,0x8d,0x46,0xd3,0xf5,0x7a,0x6d,0x94,0x52,0x47,0xdb,
+ 0x64,0x32,0x31,0xc0,0x0f,0x60,0x00,0xbc,0xb6,0x81,0xa6,0x10,0xe2,0xa2,
+ 0xdf,0xef,0xa3,0x94,0x3a,0x38,0xda,0x4c,0x8e,0xe3,0x00,0xbc,0x07,0xba,
+ 0xc0,0x3f,0x1b,0x68,0x06,0x41,0x80,0x94,0x12,0x63,0xcc,0xd1,0xe0,0x28,
+ 0x8a,0xb2,0xa1,0x0b,0x9c,0xd8,0x80,0x05,0xa0,0xb5,0x2e,0x45,0xdc,0x71,
+ 0x5d,0x00,0x82,0xcd,0xe6,0x09,0xa4,0x6e,0xaf,0x70,0xd6,0x06,0x9a,0x39,
+ 0x58,0x29,0x55,0x9b,0x8a,0x8e,0xeb,0xe2,0xdf,0xdf,0xe7,0xf3,0x57,0xa7,
+ 0xa7,0x75,0x30,0xb4,0xd6,0xd9,0xb0,0x01,0x58,0x8d,0xa2,0x93,0x94,0x32,
+ 0xb7,0x3b,0x21,0x4a,0x30,0x29,0x65,0x09,0x7a,0x27,0x44,0xc9,0xbf,0x1a,
+ 0x94,0x5d,0x05,0x17,0xf5,0xe7,0xf6,0x96,0xb3,0x5e,0x0f,0x80,0x37,0xdd,
+ 0x6e,0x69,0x9d,0x8a,0x6f,0x15,0x9c,0x47,0x5c,0x85,0x96,0x20,0x3b,0xe6,
+ 0x00,0x71,0x1c,0x13,0xc7,0x71,0x7d,0xc4,0x52,0xca,0x62,0x65,0x73,0xf5,
+ 0xcf,0xcf,0x4b,0xf3,0xb3,0x5e,0x8f,0xdf,0x37,0x37,0x44,0x51,0x44,0xbb,
+ 0xdd,0xde,0x2f,0xe2,0x28,0x8a,0x4a,0x56,0x84,0xfe,0x5a,0xad,0x9e,0x7c,
+ 0xac,0xe8,0x5b,0xbd,0x71,0x6d,0xf1,0x00,0x06,0xc3,0x61,0xee,0xb4,0x5c,
+ 0x2c,0x90,0x52,0xb2,0x5c,0x2c,0xf2,0xb5,0xc1,0x70,0xb8,0xb3,0x78,0x39,
+ 0x38,0xcb,0x53,0x1c,0xc7,0x84,0x61,0x98,0x3b,0x5c,0xcf,0xe7,0xa5,0xbd,
+ 0xeb,0xf9,0x9c,0xba,0x33,0xd5,0x88,0xff,0xfb,0x2a,0xbe,0xcf,0x66,0x59,
+ 0x8e,0xa8,0xaa,0x6e,0x6f,0x27,0xb8,0x5a,0xd9,0x43,0xb4,0xf3,0x1d,0x3f,
+ 0xa7,0x09,0xd5,0x81,0x8d,0xef,0xfb,0xb5,0x05,0xd8,0x57,0xdb,0xed,0x96,
+ 0x42,0x1f,0xd7,0x80,0xb1,0x01,0xe3,0x79,0xde,0xd5,0x74,0x3a,0xfd,0xe0,
+ 0x38,0xce,0x51,0xf0,0x30,0x0c,0x99,0x25,0x79,0x5f,0x01,0x12,0x50,0x00,
+ 0x2f,0x80,0xcf,0x24,0x4d,0xda,0x3c,0xc3,0x7e,0x02,0x5f,0x81,0x8f,0xc0,
+ 0x3b,0x0b,0x68,0x01,0x1d,0xe0,0x2d,0x49,0x93,0x76,0x49,0x52,0x94,0x3f,
+ 0xc5,0x3d,0xa4,0xd3,0x48,0x37,0x80,0x00,0xfe,0x5a,0x29,0xa0,0x05,0xbc,
+ 0x4c,0xed,0x04,0x68,0x92,0xb6,0xd3,0x3d,0x65,0xd2,0xeb,0x6f,0x49,0xfe,
+ 0x77,0x0f,0x96,0x31,0x06,0xcb,0xb2,0x1a,0x29,0x2c,0x33,0xeb,0x08,0x70,
+ 0x06,0x57,0x80,0x7a,0x04,0xa5,0x20,0xa7,0x6d,0xec,0x70,0x28,0x0f,0x00,
+ 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_combobox_png_len = 549;
+static const unsigned char small_combobox_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0xb7,0x49,0x44,0x41,0x54,0x48,0xc7,0xad,0x95,
+ 0x3f,0x48,0x02,0x51,0x18,0xc0,0x1f,0x4d,0x41,0xb4,0xb4,0x05,0xed,0x2d,
+ 0x12,0xa8,0x8b,0x34,0xd8,0x72,0x26,0x04,0x65,0x09,0x21,0xb4,0x27,0xcd,
+ 0x0d,0x62,0xbb,0x93,0x42,0x8b,0x83,0x28,0x88,0xa0,0xcb,0x0d,0x82,0xe0,
+ 0xe2,0xe2,0xa2,0x9e,0x1e,0xa2,0x90,0x82,0x48,0x74,0x82,0x21,0x38,0xb8,
+ 0x88,0x6e,0x6e,0x5f,0xef,0x7b,0x79,0xd7,0xa9,0x4f,0xe9,0xee,0x1c,0x7e,
+ 0xbc,0x7f,0xf7,0x7e,0xef,0xf1,0xbd,0x77,0xdf,0x23,0x84,0x90,0x27,0xca,
+ 0x27,0x05,0xf6,0x80,0x42,0x79,0xa1,0x9c,0x50,0x88,0x54,0xab,0xd5,0x60,
+ 0xb1,0x58,0xfc,0x8b,0x64,0x32,0xb9,0x75,0x0c,0x3d,0xd4,0xf7,0x41,0x39,
+ 0x47,0x31,0x4c,0xa7,0x53,0x8d,0x7c,0x3e,0xbf,0xb3,0x1e,0x8f,0xc7,0x59,
+ 0xc9,0xdb,0xb1,0xae,0xff,0x92,0x89,0x47,0xa3,0x11,0x23,0x97,0xcb,0x6d,
+ 0xd4,0xd7,0xcb,0x58,0x2c,0xa6,0xb5,0xf5,0x52,0x75,0x7c,0xd9,0xf6,0x32,
+ 0x71,0xbf,0xdf,0xd7,0x48,0xa5,0x52,0x3b,0xeb,0x91,0x48,0x64,0xa5,0x0f,
+ 0xe7,0xeb,0xbf,0x5b,0x8a,0x6f,0x50,0xdc,0x4c,0xa7,0xd3,0x20,0xcb,0x32,
+ 0x48,0x92,0x04,0xd5,0x6a,0x15,0x2a,0x95,0xca,0x56,0x42,0xa1,0xd0,0x4a,
+ 0x3b,0x1a,0x8d,0x6a,0xf5,0x44,0x22,0x81,0xd2,0x2f,0xca,0x2d,0x59,0x9e,
+ 0xe2,0xb7,0xcf,0xe7,0x03,0x8f,0xc7,0x03,0x82,0x20,0x98,0xc6,0x6e,0xb7,
+ 0xab,0x3b,0x66,0x62,0xbc,0x1a,0x17,0x28,0x9d,0xcf,0xe7,0x30,0x9b,0xcd,
+ 0x4c,0xa3,0x3b,0x3c,0x3f,0x8a,0x0f,0x29,0x67,0xb8,0x22,0x0e,0xd8,0xae,
+ 0x6c,0xe0,0xba,0x73,0x81,0xfb,0xd1,0x6d,0x98,0x5e,0xaf,0xa7,0x8a,0x1f,
+ 0x50,0x7c,0x80,0xbb,0x46,0xf1,0x64,0x32,0x61,0xd2,0xc0,0x5b,0x00,0x82,
+ 0xef,0x41,0xc3,0x74,0x3a,0x1d,0x55,0x7c,0x4f,0x00,0xb0,0x24,0xc7,0x28,
+ 0x1e,0x8f,0xc7,0x6c,0x65,0xfc,0x28,0x2c,0x86,0x0d,0xd3,0x6e,0xb7,0xff,
+ 0x62,0xac,0x17,0x0f,0x87,0x43,0x18,0x0c,0x06,0xa6,0xc1,0x9b,0xc5,0x15,
+ 0x2b,0x8a,0x02,0x8e,0x6b,0x07,0x78,0x9f,0xbd,0xe0,0x7f,0xf5,0x1b,0x06,
+ 0xaf,0x2a,0x57,0x8c,0x17,0xdc,0x4a,0x8c,0xcb,0xe5,0x32,0x5f,0xdc,0xed,
+ 0x76,0x2d,0xc5,0xb8,0x54,0x2a,0xf1,0xc5,0xad,0x56,0x0b,0xea,0xf5,0xba,
+ 0x69,0x8a,0xc5,0x22,0x5f,0xdc,0x68,0x34,0x2c,0xc5,0x18,0x33,0x20,0x57,
+ 0x8c,0xff,0xbb,0x95,0x18,0x8b,0xa2,0xc8,0x17,0x63,0xf0,0xad,0xc4,0x38,
+ 0x9b,0xcd,0x6e,0x8a,0x31,0x81,0x14,0x0a,0x05,0xc8,0x64,0x32,0xa6,0xc1,
+ 0xd7,0x65,0x5d,0x7c,0xb4,0xa7,0x37,0x4f,0x45,0x50,0xc5,0x98,0x88,0x4e,
+ 0x29,0x4e,0xd6,0xf9,0x9b,0xf6,0xcc,0x82,0xf3,0x9d,0x3f,0xa1,0xa1,0x27,
+ 0x2c,0x4e,0xc5,0xe2,0x38,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,
+ 0x42,0x60,0x82
+};
+
+static const unsigned int small_connecttool_png_len = 553;
+static const unsigned char small_connecttool_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0xbb,0x49,0x44,0x41,0x54,0x48,0xc7,0xdd,0xd4,
+ 0xbb,0x4b,0x42,0x61,0x18,0xc7,0xf1,0xe3,0x93,0x99,0xd0,0x8d,0x1a,0xa2,
+ 0x82,0x16,0x87,0x82,0x5a,0xce,0x20,0x5d,0x68,0x0a,0xd4,0x2e,0x5b,0x4b,
+ 0x38,0x37,0xb8,0x76,0x5b,0xa2,0x82,0x2e,0x43,0x51,0x8b,0x46,0x50,0x66,
+ 0x06,0x99,0x11,0x44,0x4b,0x08,0xd6,0x5a,0x91,0x44,0x76,0x19,0xba,0x50,
+ 0x04,0x49,0xff,0xc9,0xd3,0xef,0xf5,0x7d,0x35,0xd3,0x34,0xc5,0x5a,0x3a,
+ 0xf0,0xe1,0x45,0x3d,0xe7,0x7b,0xde,0xe3,0x39,0xe7,0xd5,0x98,0x59,0xfb,
+ 0x0b,0xda,0xff,0x0a,0x63,0xa3,0x5f,0x0f,0x63,0xeb,0x37,0xe2,0x67,0x8c,
+ 0x03,0x50,0x02,0x86,0xdf,0x0a,0x87,0xf6,0x74,0x9d,0x3b,0x65,0x7c,0x08,
+ 0xca,0x0a,0xb9,0x82,0x5c,0x61,0x8e,0x39,0x1c,0xbc,0x8d,0xb1,0x49,0xc6,
+ 0x7b,0xc0,0x94,0xef,0xcc,0x73,0x86,0xdf,0xec,0x76,0x8e,0x62,0x5c,0x06,
+ 0x93,0x8c,0x77,0x41,0x69,0x3e,0x71,0xb1,0xad,0x6b,0xf2,0xa0,0x0c,0xb1,
+ 0xde,0x5e,0x7e,0xc4,0x28,0x2c,0x41,0x45,0x96,0xfd,0xd2,0x6c,0x82,0x31,
+ 0x3e,0xb3,0x77,0xa7,0x93,0xdf,0x6c,0xb6,0x2f,0x44,0xf4,0xd5,0x6a,0x4d,
+ 0x86,0x1f,0xc0,0x4d,0xc4,0x66,0x8c,0x33,0x6b,0x3a,0x87,0x1e,0x6d,0x1c,
+ 0x7e,0xb6,0xf3,0xf1,0xcb,0xa7,0xc0,0x35,0x25,0xe2,0x95,0xf2,0x92,0x11,
+ 0x4a,0x04,0x7e,0xb2,0x8f,0xb8,0xb8,0xa1,0x13,0xab,0xc4,0x3b,0x57,0xc4,
+ 0xbb,0xb7,0xc4,0xc1,0x3b,0x69,0x21,0x98,0x0c,0x37,0x14,0x1c,0xbe,0x07,
+ 0x3f,0x54,0xc3,0xc8,0x0a,0x71,0x20,0x25,0x9e,0x12,0xb6,0x14,0x1c,0x16,
+ 0x2e,0x61,0x0d,0xf4,0x6e,0x9c,0xe4,0x02,0xf1,0x9b,0x8c,0x70,0x73,0xc1,
+ 0xe1,0x1b,0x08,0xc1,0x3c,0xb4,0xb5,0x6b,0xec,0x3d,0x45,0x38,0x5a,0x64,
+ 0x58,0x44,0x8f,0x60,0x0c,0x08,0x86,0xa7,0x88,0xbd,0x67,0x45,0x86,0xd3,
+ 0xa3,0xae,0x79,0xe2,0xd5,0x13,0x62,0x7f,0xa4,0x88,0xbf,0x22,0x23,0x3a,
+ 0x4b,0xec,0x09,0x13,0xfb,0xce,0xe5,0x6c,0xbf,0xb9,0x79,0x32,0x2c,0xee,
+ 0xf4,0x41,0x9a,0x48,0x96,0xe8,0xa0,0x8b,0x78,0xdc,0x43,0x3c,0xed,0x23,
+ 0x9e,0x0b,0x20,0xb6,0x2b,0x83,0xc2,0xe4,0xc6,0xd7,0xa7,0x62,0x2b,0xdb,
+ 0x5b,0xf4,0x64,0x32,0x25,0xa3,0x5a,0xfe,0x0e,0x13,0xcf,0xb1,0x78,0xf7,
+ 0x6b,0xd5,0xf4,0x3b,0xd4,0x62,0x63,0x8f,0x87,0xcd,0xe6,0xe4,0x4c,0xf1,
+ 0x79,0x51,0x7d,0x6f,0x85,0x56,0x68,0x51,0xc7,0xa4,0xb2,0xa8,0x68,0xfc,
+ 0xcd,0x33,0xa8,0x78,0xb9,0x3a,0x41,0x1d,0xd4,0xc3,0x89,0xfb,0x33,0x3a,
+ 0x0a,0x3a,0x34,0xa9,0x7d,0xaa,0xd4,0xc1,0xe9,0x44,0xc3,0x1c,0x5f,0x2b,
+ 0x72,0xac,0x4e,0x7d,0x2a,0xea,0x84,0x46,0xa8,0xc9,0x77,0x65,0x13,0x3e,
+ 0x00,0x84,0xce,0x9d,0x42,0x55,0x40,0xaa,0x56,0x00,0x00,0x00,0x00,0x49,
+ 0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_customwidget_png_len = 1133;
+static const unsigned char small_customwidget_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x03,0xff,0x49,0x44,0x41,0x54,0x48,0xc7,0xb5,0x95,
+ 0xef,0x4f,0x5b,0x55,0x18,0xc7,0x97,0xe6,0x52,0x29,0xb4,0xf4,0xd2,0x9b,
+ 0xdb,0xb4,0x37,0xbd,0x37,0xbd,0x97,0xb5,0xd4,0xc2,0x82,0xdd,0x4c,0x44,
+ 0x5f,0x28,0x9a,0xcc,0xc4,0xa4,0xee,0x17,0x6e,0x86,0x31,0xa8,0x8c,0x76,
+ 0x3a,0x66,0x89,0x6e,0xb3,0x55,0xc8,0x5e,0xf8,0x4a,0x8a,0x2e,0xfb,0x81,
+ 0x19,0xdb,0x80,0xd1,0x0e,0xd4,0xb0,0x45,0x47,0xb1,0x95,0xc2,0xdc,0x0c,
+ 0xc6,0x4d,0x8d,0xbe,0xf4,0x85,0x89,0xc9,0x12,0x5f,0xec,0xef,0xf8,0xfa,
+ 0x9c,0xd3,0xd3,0x4d,0xc9,0xac,0xfa,0xc2,0x26,0xdf,0xf4,0x26,0xf7,0x9c,
+ 0xcf,0x79,0x9e,0xe7,0x7b,0x9e,0xe7,0x6e,0x01,0xb0,0xa5,0x26,0xfa,0xd9,
+ 0x48,0x0d,0x24,0x07,0xa9,0x99,0xe4,0x24,0xb9,0xfe,0x41,0x4e,0xb1,0xd6,
+ 0x21,0xf6,0xda,0x38,0xab,0x06,0x1d,0x1f,0x1f,0x6f,0x29,0x14,0x0a,0x99,
+ 0xa9,0xa9,0xa9,0x5f,0xc7,0xc6,0xc6,0x90,0x4e,0xa7,0xff,0x95,0x12,0x89,
+ 0x04,0xba,0xbb,0xbb,0x7f,0xb3,0xdb,0xed,0xef,0x13,0xd4,0x10,0x87,0x48,
+ 0x0f,0x22,0x65,0xd0,0xca,0xd7,0x9f,0x61,0x75,0xe3,0x43,0x94,0x36,0xde,
+ 0xc2,0x8d,0xdb,0xc3,0x58,0xfe,0x26,0x89,0xe2,0x46,0x12,0xe5,0x3b,0x49,
+ 0xac,0x7e,0x9f,0x42,0xe5,0x47,0xd2,0x0f,0x29,0x7a,0x4e,0x56,0x45,0xcf,
+ 0xa5,0xbb,0x03,0xf8,0xf8,0x93,0x67,0xf1,0xd4,0xf3,0x0e,0x06,0x9a,0x24,
+ 0x05,0x38,0x5c,0x80,0x1b,0x58,0xa4,0x0c,0x3a,0xbf,0xfc,0x22,0x4e,0x2f,
+ 0x98,0xc8,0xe5,0x7d,0x38,0xbb,0xe4,0xc5,0xe9,0x45,0x03,0xd9,0x49,0x13,
+ 0xa9,0x8c,0x86,0xd4,0x3b,0x41,0x64,0x73,0x21,0x9c,0xbb,0x66,0x60,0xf6,
+ 0x2b,0x0d,0xd3,0x45,0x3f,0xa6,0x57,0x34,0x5c,0x2c,0x6a,0x88,0xf7,0x39,
+ 0x19,0xe8,0x77,0x52,0x17,0x49,0xad,0x81,0x1d,0x2c,0xfd,0x32,0x45,0xca,
+ 0xa0,0x13,0x57,0x15,0x82,0x06,0x30,0x7a,0xca,0x44,0x47,0x4c,0x85,0xcd,
+ 0xe6,0x24,0xd9,0x84,0x5c,0xb0,0x22,0x2a,0x5e,0x7f,0xcf,0xc2,0x95,0x4a,
+ 0x08,0xb3,0xab,0x1a,0x3f,0xe4,0x95,0xc3,0x2d,0x0c,0xc4,0xd4,0xc3,0x4b,
+ 0x22,0xc0,0xcd,0xac,0x5e,0x2c,0xfd,0x5c,0xde,0xcb,0xa1,0x7d,0x6f,0x04,
+ 0x08,0xd2,0xc4,0xa1,0x2e,0xb7,0x8c,0xae,0x27,0x7d,0x88,0x3d,0xe3,0x87,
+ 0x2f,0xa0,0x88,0x83,0x9a,0xb0,0xbb,0x5f,0x47,0xe1,0x66,0x10,0xf9,0x9b,
+ 0x7e,0xec,0x7b,0xcd,0x55,0x03,0xbf,0x44,0xda,0x5a,0x03,0x3b,0x19,0x98,
+ 0xd5,0x94,0xa5,0x3f,0x7a,0x2a,0x48,0x1b,0x1b,0x49,0x76,0xec,0xdc,0xad,
+ 0x23,0x37,0x1b,0xc4,0xe5,0x15,0x13,0x57,0xd6,0x0d,0x5c,0x58,0x8e,0xa0,
+ 0x7f,0xc4,0x82,0x24,0xb9,0xe8,0xbd,0x84,0x23,0x27,0xc2,0xb8,0xf6,0x5d,
+ 0xe4,0xcf,0x11,0xc7,0x49,0xa1,0x1a,0xd8,0xc5,0xc0,0xcc,0x28,0x56,0xd3,
+ 0x68,0x97,0xc2,0x37,0xed,0xdc,0x15,0xc0,0xcc,0x97,0x16,0x2e,0x95,0x54,
+ 0x82,0x2a,0xf4,0x2e,0x8c,0xde,0x61,0x03,0xf9,0xf5,0x4e,0x24,0x4f,0x58,
+ 0xfc,0x70,0xaf,0xdf,0x83,0xb9,0x62,0x14,0xaf,0xa6,0xdc,0x35,0xf0,0xcb,
+ 0xa4,0xf0,0x5f,0xc0,0xcc,0xfd,0x6c,0xce,0x84,0x44,0xa9,0xca,0xb2,0x87,
+ 0x47,0x7a,0xa9,0x4c,0x1b,0x2b,0x2a,0x19,0x66,0xa1,0x73,0xbb,0xc6,0x61,
+ 0x3d,0x71,0x1f,0x16,0x6e,0x6d,0x43,0x64,0x5b,0x35,0x80,0xec,0x44,0x1b,
+ 0x0e,0x1e,0xad,0x03,0x66,0x57,0x2a,0x99,0xd1,0xf8,0xe2,0xae,0x1d,0x1a,
+ 0x2e,0x17,0x4d,0xcc,0xad,0xa9,0x38,0xbf,0x14,0x46,0xc7,0x0e,0x95,0x43,
+ 0x55,0xaf,0x87,0xdf,0x8c,0x2f,0x7e,0x0e,0x61,0xcf,0x21,0x9d,0xaf,0x1d,
+ 0x3c,0x66,0xa0,0xff,0x58,0xeb,0xdf,0x83,0xd9,0x1d,0x4d,0x9d,0x0c,0x72,
+ 0xf7,0x63,0x4f,0xfb,0x08,0x6a,0xe0,0xa3,0x85,0xf0,0x83,0x48,0x59,0xcd,
+ 0x03,0x3a,0x99,0xfb,0x69,0x14,0x2b,0xbf,0x04,0xd1,0x7b,0xd8,0xe4,0xe0,
+ 0x43,0x54,0xf3,0x81,0xb4,0x52,0x07,0x4c,0x0d,0x90,0xc9,0x99,0xfc,0x4a,
+ 0x79,0xc9,0x7d,0x66,0xd4,0xde,0xa1,0xaa,0x91,0x1e,0x8f,0x07,0x9a,0xe6,
+ 0xad,0xc2,0x2d,0x19,0x67,0x16,0x63,0xe8,0x7e,0xce,0x4f,0x65,0xb3,0x53,
+ 0x29,0x22,0x48,0x8c,0xb6,0xd6,0x2f,0xc5,0xb9,0x25,0x1d,0x66,0xd8,0xcb,
+ 0xaf,0xd4,0xc1,0xa3,0x16,0xe6,0xd7,0x3a,0xf0,0xc2,0x2e,0x3f,0xde,0xa5,
+ 0xf4,0xcf,0x2e,0x76,0x12,0xd4,0xc3,0x33,0x92,0x3d,0x0a,0x9a,0x1a,0x1b,
+ 0xa1,0xa8,0x2e,0x14,0xd6,0xda,0x31,0x98,0xae,0x57,0xe3,0xbb,0x49,0xcc,
+ 0x96,0x35,0x8c,0x64,0x2c,0x0e,0x96,0x24,0x27,0x92,0x27,0xdb,0xc8,0xa8,
+ 0x4e,0x7c,0xfe,0x93,0x45,0xe9,0xeb,0x38,0xb3,0xb0,0x1d,0xaa,0xcf,0x43,
+ 0x91,0xda,0xe8,0xbd,0x84,0x03,0xa9,0x20,0x6e,0xdf,0x6b,0xa3,0x52,0xb4,
+ 0xd4,0x8f,0x78,0x7a,0x59,0x43,0xa1,0x44,0xc6,0xf4,0xe9,0xa2,0xd3,0x9a,
+ 0x10,0x79,0x42,0xc5,0x1e,0x6a,0x86,0xde,0x21,0x83,0xd2,0xd7,0xd0,0x68,
+ 0x77,0x72,0x28,0x93,0xd5,0xae,0xe2,0xe2,0x4a,0x07,0x86,0x8e,0xcb,0x8f,
+ 0x04,0x3b,0xd9,0x94,0x2a,0xdd,0x19,0xe0,0xfd,0x3f,0x57,0xf6,0xa3,0xb0,
+ 0x6e,0xe2,0xc8,0xf1,0x76,0x68,0x01,0x99,0xd7,0x95,0x99,0x54,0x3d,0x48,
+ 0xa2,0xf4,0x9d,0x3c,0x52,0x23,0xa4,0x40,0xd5,0xdd,0x38,0x7f,0xfd,0x71,
+ 0xec,0x1f,0x7e,0x74,0x83,0x34,0xb3,0xd1,0xc7,0xa6,0xd4,0x34,0x0d,0x94,
+ 0x99,0x72,0x00,0xf3,0xeb,0x3a,0x96,0xbe,0x6d,0xc3,0x0c,0x19,0x98,0x99,
+ 0xb0,0x90,0x18,0x09,0x62,0x90,0xdc,0xcf,0x7e,0x10,0x41,0xbe,0xd2,0x8e,
+ 0x5b,0xf7,0x42,0x34,0x80,0xa2,0x04,0x8d,0xe2,0xc2,0x0d,0x1d,0xd1,0xd8,
+ 0x63,0x0c,0x74,0x7f,0x73,0x4b,0x3b,0xd8,0x3c,0x65,0xa3,0x8f,0x4d,0xa9,
+ 0x5e,0x6a,0xcf,0x7d,0x09,0x37,0xfd,0xbb,0x70,0x20,0xe9,0xa6,0xb9,0xe1,
+ 0xa6,0x36,0x96,0x31,0xf0,0xa6,0x42,0x26,0xb5,0x52,0x3d,0x65,0x5e,0xd3,
+ 0xa1,0xb7,0x65,0x8a,0x54,0x26,0x28,0xeb,0x40,0x89,0x81,0x16,0x37,0x0f,
+ 0xa1,0x06,0x31,0xa4,0x27,0xc5,0xe8,0xc3,0x7f,0xd4,0x7d,0x01,0xdd,0xbb,
+ 0x79,0x6c,0xda,0xc4,0xe4,0x0f,0x88,0x17,0x3d,0x22,0xa5,0xb8,0x30,0xa3,
+ 0x9e,0xe2,0x62,0x6d,0x8f,0xd8,0xfb,0x70,0xd0,0x0b,0xb8,0x24,0xe0,0xaa,
+ 0x88,0x7e,0x2b,0x37,0x81,0x39,0x5c,0x5f,0x21,0xb1,0xd6,0x10,0x7b,0x1f,
+ 0x7e,0x9a,0xfe,0x8f,0x8f,0xe9,0x1f,0x75,0x09,0xbb,0x54,0x76,0xdd,0xcd,
+ 0xec,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_dateedit_png_len = 505;
+static const unsigned char small_dateedit_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0x8b,0x49,0x44,0x41,0x54,0x48,0xc7,0xbd,0x95,
+ 0xb1,0x6a,0x83,0x40,0x18,0x80,0x15,0x1c,0x04,0xc9,0x98,0x21,0x74,0x6b,
+ 0x21,0x50,0x42,0x68,0x4a,0xa9,0xd0,0xb1,0xe2,0x5c,0xb3,0x74,0x0c,0x58,
+ 0x4a,0x49,0x91,0x2e,0x42,0x97,0xbe,0x80,0x4f,0xe1,0xe6,0x10,0xd7,0x2e,
+ 0x12,0xc4,0x07,0x48,0xa6,0x2c,0xbe,0x40,0xc1,0x41,0x1c,0x84,0x3e,0xc1,
+ 0xf5,0xff,0xed,0x7f,0xe1,0x52,0xb4,0xda,0x26,0xed,0xc1,0xc7,0xe9,0xe9,
+ 0x7d,0xf7,0x9f,0x77,0xf7,0x2b,0x31,0xc6,0xa4,0xbf,0x40,0xfa,0x17,0x31,
+ 0x14,0x19,0x50,0x00,0x15,0xd0,0x80,0x5e,0x07,0x34,0x7a,0x1f,0xfb,0xc9,
+ 0x4d,0x62,0xc5,0x75,0x5d,0x66,0xdb,0x36,0xb3,0x2c,0xab,0x15,0x5d,0xd7,
+ 0xb1,0x13,0x72,0x09,0x1c,0xd1,0x00,0x72,0x9d,0x58,0x45,0xe9,0x6a,0xb5,
+ 0x62,0x71,0x1c,0xb7,0x12,0x04,0xc1,0xa7,0x78,0x6c,0x61,0x7d,0x0d,0xf4,
+ 0x31,0xb8,0x3a,0xb1,0x86,0x91,0x60,0xa7,0x30,0x0c,0x5b,0xf1,0x3c,0x8f,
+ 0x47,0x8c,0xdc,0x01,0x27,0x18,0x5c,0x9d,0xb8,0x87,0xd3,0xc3,0x48,0xb0,
+ 0x53,0x1b,0x8e,0xe3,0x88,0x62,0x17,0x18,0x63,0x70,0xb5,0x62,0xe1,0xc5,
+ 0x9f,0xf2,0x02,0x9c,0xa3,0xa3,0x51,0xbc,0x5e,0xaf,0x59,0x14,0x45,0x9d,
+ 0x10,0xc4,0xcf,0xad,0xe2,0xb2,0x2c,0x59,0x9e,0xe7,0x15,0x29,0xdc,0xf3,
+ 0x9a,0xf3,0xb6,0x58,0x6c,0x9f,0x0b,0xe2,0xa7,0x56,0x31,0x2f,0x5c,0xf4,
+ 0xb5,0x88,0x6d,0x82,0xf8,0xb1,0xb3,0x58,0x94,0xbc,0x2f,0x97,0xdb,0x81,
+ 0xf0,0xfa,0x60,0x62,0xac,0x8b,0xa2,0x60,0x69,0x9a,0xee,0x70,0x10,0xf1,
+ 0xeb,0xf7,0xbb,0x62,0x0e,0x4c,0x3a,0x8b,0x77,0x06,0xa1,0x08,0xf1,0x70,
+ 0xf8,0xbe,0x5f,0x5d,0x9b,0xa6,0xc9,0xc5,0xf7,0xc0,0xd9,0x5e,0x62,0x2e,
+ 0x35,0x0c,0x83,0x25,0x49,0xc2,0xc5,0x33,0x60,0xb4,0x97,0x98,0x4b,0xf1,
+ 0xe8,0x6f,0x36,0x1b,0xde,0x76,0x0b,0x9c,0x36,0x89,0xb5,0x2e,0xa7,0x0c,
+ 0xa7,0x8f,0x91,0xa2,0x34,0xcb,0x32,0xde,0x3e,0x05,0x86,0x4d,0x62,0xb5,
+ 0x4a,0x24,0x57,0x0f,0xbf,0x39,0xd2,0x26,0x70,0xdc,0x94,0x2b,0x14,0x4a,
+ 0x7d,0xb8,0xba,0x37,0x80,0x4d,0xdb,0x48,0x64,0x4e,0x0b,0x35,0xa3,0xe9,
+ 0x4f,0x49,0x7a,0x01,0x0c,0x9a,0xb2,0x9b,0x4c,0x51,0xf7,0x29,0x05,0x8e,
+ 0x69,0x6f,0x8a,0x4c,0x68,0xf5,0x47,0xf4,0x4d,0x87,0x14,0xe9,0x80,0xd6,
+ 0x48,0xa9,0xfd,0xe7,0x1d,0xea,0xf7,0xf4,0x01,0xf1,0x64,0x94,0x3a,0x02,
+ 0x52,0x67,0x4a,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,
+ 0x82
+};
+
+static const unsigned int small_datepicker_png_len = 965;
+static const unsigned char small_datepicker_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8f,0x0b,0xfc,0x61,0x05,0x00,0x00,0x00,0x06,0x62,0x4b,0x47,
+ 0x44,0x00,0x00,0x00,0x00,0x00,0x00,0xf9,0x43,0xbb,0x7f,0x00,0x00,0x00,
+ 0x09,0x70,0x48,0x59,0x73,0x00,0x00,0x0b,0x12,0x00,0x00,0x0b,0x12,0x01,
+ 0xd2,0xdd,0x7e,0xfc,0x00,0x00,0x00,0x07,0x74,0x49,0x4d,0x45,0x07,0xd2,
+ 0x03,0x19,0x13,0x1c,0x1b,0x8b,0xe1,0xfc,0xd9,0x00,0x00,0x03,0x42,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0xb5,0x95,0x4f,0x68,0x9a,0x67,0x1c,0xc7,0x3f,
+ 0x6f,0x62,0x46,0xc3,0x02,0x6a,0x48,0x6a,0xc7,0x6c,0xb1,0xc6,0xd6,0x34,
+ 0xab,0xcb,0x21,0xb8,0x6a,0x36,0xb6,0xc3,0x70,0x93,0x80,0xe9,0x29,0xa5,
+ 0x97,0x5e,0x7a,0xd9,0x25,0x27,0x59,0x2e,0xdb,0x61,0xee,0x3c,0xd2,0xc3,
+ 0xe8,0xa5,0xa7,0x1d,0x96,0x43,0x50,0xca,0xaa,0xac,0x30,0xb6,0x53,0x20,
+ 0x4c,0x21,0xa4,0x07,0x69,0x68,0x5a,0x6a,0x53,0xaa,0x66,0xa8,0xf1,0x55,
+ 0x37,0x5d,0x8c,0x9a,0xfc,0x76,0x78,0x51,0xfc,0xf3,0x86,0x8c,0xc1,0xbe,
+ 0xf0,0xf2,0x3c,0xef,0xef,0xcf,0xf7,0xf9,0x3e,0xbf,0xdf,0xc3,0xf3,0x28,
+ 0x22,0x42,0x1b,0xa6,0x79,0x9f,0x54,0x0a,0x39,0xfe,0x0b,0x8c,0x93,0x16,
+ 0xca,0xbf,0xff,0xa6,0xb4,0xff,0x0d,0x00,0x97,0x6f,0x7f,0x21,0xaf,0xb7,
+ 0xe3,0xf8,0x67,0xaf,0xf1,0xa7,0xf2,0x37,0x07,0x07,0x07,0xd4,0x6a,0x35,
+ 0xba,0x17,0xd5,0x83,0x88,0xd0,0x6a,0xb5,0x30,0x1a,0x8d,0xf8,0xe7,0xa6,
+ 0x51,0xae,0xbc,0x2f,0xb6,0x39,0x2f,0x7b,0xeb,0x0f,0x94,0x21,0x80,0x36,
+ 0xa9,0xe3,0x9d,0xf3,0xe4,0xf3,0x79,0x8a,0xc5,0x22,0x99,0x4c,0x06,0xbb,
+ 0xdd,0x8e,0xaa,0xaa,0x3d,0x5f,0x36,0x9b,0xed,0xd8,0x4b,0xa5,0x12,0x95,
+ 0x4a,0x85,0xa3,0xa3,0x23,0x02,0x81,0x00,0xdf,0x7f,0xf5,0x25,0xaf,0xb7,
+ 0xe3,0x9a,0x62,0xd3,0xbc,0x4f,0xda,0xa4,0x81,0x40,0x80,0x68,0x34,0x4a,
+ 0xbd,0x5e,0x27,0x95,0x4a,0x61,0xb3,0xd9,0xd8,0xdc,0xdc,0xec,0x51,0xd9,
+ 0x6f,0x0f,0x85,0x42,0x8c,0x8f,0x8f,0xe3,0x76,0xbb,0xf1,0xf9,0x4c,0x58,
+ 0x2c,0x16,0x4c,0xf3,0x3e,0x31,0x54,0x0a,0x39,0xcc,0xce,0x8b,0xd8,0xed,
+ 0x76,0xdc,0x6e,0x37,0x2b,0x2b,0x2b,0xd4,0x6a,0x35,0x9e,0xee,0x3c,0x65,
+ 0x6d,0x6d,0x8d,0x50,0x28,0xd4,0x21,0x2d,0x97,0xcb,0xa4,0x5f,0xa6,0x07,
+ 0xec,0x4e,0xa7,0x13,0xb3,0xd9,0x0c,0xc0,0xf4,0xd4,0x65,0xb4,0x3e,0x39,
+ 0x5c,0xb2,0xbc,0xbc,0x2c,0xe1,0x70,0x58,0x1a,0x8d,0x86,0xb4,0x31,0x3c,
+ 0x3c,0x2c,0x80,0x34,0x1a,0x0d,0xc9,0x6f,0x6c,0x48,0xe9,0xc5,0x0b,0xa9,
+ 0x56,0xab,0x02,0xc8,0x34,0xc8,0x1f,0xc9,0xa4,0x14,0x0a,0x05,0xc9,0xe5,
+ 0x72,0xa2,0xaa,0x6a,0x27,0xaf,0xd9,0x6c,0x0a,0x0e,0x97,0x18,0xda,0xab,
+ 0x8e,0x8d,0x8d,0x31,0x32,0x32,0xd2,0x51,0xd1,0x6a,0xb5,0x3a,0xf3,0xfd,
+ 0xfb,0xf7,0x01,0x98,0x0d,0x87,0x11,0x11,0x36,0x2e,0x5d,0x82,0xdd,0x5d,
+ 0x26,0x5c,0xae,0x81,0x86,0xd6,0xeb,0x75,0x00,0x86,0xf4,0xba,0xad,0xdc,
+ 0x7d,0x88,0x72,0xf7,0xa1,0xee,0x49,0x28,0x27,0x12,0x9c,0xb3,0x5a,0x4f,
+ 0x8d,0x55,0x4b,0x65,0x10,0x19,0x24,0x3e,0x8d,0xd0,0xe8,0xf5,0x52,0x4e,
+ 0x24,0xc8,0x45,0x22,0x98,0xbc,0x5e,0x5d,0x31,0xaf,0xf2,0x55,0x9e,0xa5,
+ 0xde,0x0c,0x12,0xdf,0xfb,0xe5,0xb9,0x2e,0x29,0xc0,0x85,0xa5,0x25,0x72,
+ 0x91,0x08,0xe5,0x78,0x1c,0xa3,0xc7,0xa3,0x1b,0xf3,0xe8,0x49,0x96,0x92,
+ 0x5a,0x04,0x39,0xe9,0x25,0x0e,0xfa,0x9d,0xac,0xde,0xba,0xae,0x9b,0x74,
+ 0xce,0x6a,0xa5,0x9e,0x4e,0xeb,0xaa,0x05,0x58,0xbd,0x75,0x9d,0xa0,0xdf,
+ 0xc9,0xbb,0xe7,0xc7,0xb5,0x1d,0xe0,0x70,0xc9,0xb2,0xff,0x13,0x16,0x16,
+ 0x16,0x68,0x36,0x1b,0x00,0xbc,0x7c,0x6b,0x1a,0x00,0x47,0x63,0x97,0xc5,
+ 0xc5,0x9b,0x94,0x13,0x09,0x4c,0x1e,0xcf,0x40,0x7d,0x7f,0x7d,0xb2,0xdd,
+ 0x13,0x0b,0x70,0xe3,0x86,0x87,0x0b,0x1f,0x7e,0x8a,0xa1,0x7b,0xd5,0xc5,
+ 0xc5,0x9b,0x3d,0x2a,0x62,0x31,0x2d,0xb8,0x7a,0x75,0x96,0xaa,0x7a,0x88,
+ 0xd5,0xe3,0x21,0xa3,0x1e,0x12,0x4f,0x95,0xf0,0x4e,0x99,0x3b,0xbb,0xd4,
+ 0xa0,0x8d,0x5b,0x3b,0x29,0xe0,0x94,0x53,0xd1,0x8f,0xe0,0xfa,0x0e,0xf1,
+ 0x54,0xa9,0x33,0xef,0x1e,0xfb,0xb1,0xff,0x66,0x0f,0x4e,0x4e,0x7a,0x15,
+ 0xc7,0x62,0xd1,0x81,0xc0,0x44,0x97,0xba,0x58,0x2c,0x4a,0xf0,0xf3,0x8f,
+ 0xf1,0x4c,0x99,0x89,0x6c,0xed,0xeb,0xe6,0x8c,0x8e,0xbe,0x0d,0x70,0x56,
+ 0x29,0xa2,0x78,0xa6,0xcc,0xa4,0xd5,0xc3,0x1e,0x7f,0x22,0x55,0xe2,0xe2,
+ 0xf8,0xa8,0x6e,0x4e,0x32,0x99,0x04,0x65,0xe8,0xdf,0x95,0xa2,0x1b,0x19,
+ 0xf5,0x90,0xc8,0xd6,0x3e,0xab,0xb7,0xdf,0xd3,0xf5,0x4f,0x4c,0x4c,0x80,
+ 0xa2,0x68,0xc4,0xc5,0x6a,0x8d,0x56,0xab,0xc5,0xf1,0xf1,0xf1,0x99,0xc4,
+ 0xc1,0xf5,0x9d,0x9e,0x52,0xf4,0x23,0x9d,0x2f,0x80,0xa2,0x60,0x30,0x4e,
+ 0x5a,0x28,0xfd,0xa5,0x5d,0xea,0x8f,0x1f,0xff,0x3c,0x10,0x18,0x8b,0x45,
+ 0xf1,0x7e,0xf4,0x59,0x67,0xbe,0xe4,0x76,0x0f,0xf8,0xdb,0x70,0xbb,0x3f,
+ 0xe0,0x55,0x3a,0x8b,0x71,0xd2,0xa2,0xbd,0x02,0x38,0x5c,0xf2,0xcd,0x77,
+ 0xf7,0xa4,0x1f,0xd1,0xe8,0xa3,0x01,0xdb,0x69,0xfe,0x5c,0x2e,0x27,0x3f,
+ 0xfe,0x14,0x13,0x1c,0x2e,0x11,0x11,0xad,0x79,0xb6,0x39,0x2f,0xdf,0x3e,
+ 0xf8,0x81,0x99,0x99,0x19,0xae,0x39,0xec,0xb8,0xae,0x5e,0x39,0xb3,0x24,
+ 0x6d,0x88,0x08,0xc9,0xdd,0xe7,0x3c,0x4b,0xed,0x71,0x67,0xe5,0x6b,0x4d,
+ 0x2d,0xa0,0xfc,0x5f,0x8f,0xe9,0x3f,0x94,0xe3,0xe0,0xb7,0x5d,0x5b,0xab,
+ 0x32,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_datetimeedit_png_len = 1074;
+static const unsigned char small_datetimeedit_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x03,0xc4,0x49,0x44,0x41,0x54,0x48,0xc7,0x95,0x95,
+ 0x7d,0x4c,0x53,0x57,0x18,0x87,0x0f,0x77,0x57,0x47,0x90,0x0e,0xa6,0x32,
+ 0x75,0xab,0xdb,0x94,0xc4,0x2c,0x33,0x64,0xda,0x45,0xcc,0x24,0x19,0x63,
+ 0x7f,0xc8,0x94,0x8c,0x26,0x66,0x2e,0xd1,0x2c,0xa4,0x66,0x21,0xe1,0xe3,
+ 0x0f,0x53,0x4d,0x30,0x26,0x1b,0x4a,0x34,0x24,0xcd,0x3e,0x33,0x63,0xd9,
+ 0x30,0x4c,0x6b,0x87,0x74,0x77,0x91,0x0d,0xa1,0x15,0xaa,0x73,0xb4,0x20,
+ 0xa5,0x80,0x92,0xa8,0x25,0xa0,0xd6,0x82,0x14,0xa5,0x8a,0x50,0x74,0xe0,
+ 0xd8,0x46,0x7f,0x7b,0xcf,0xe5,0x76,0xe9,0xb4,0x50,0x76,0x92,0x27,0xa7,
+ 0xb7,0xf7,0xbc,0xcf,0x79,0xef,0x79,0xef,0x39,0x97,0x31,0xc6,0x44,0x22,
+ 0x9e,0x58,0x44,0xa8,0xe6,0xc1,0x22,0x65,0x3c,0x8f,0x8b,0x03,0xc0,0xa2,
+ 0xc1,0xf4,0x7a,0x3d,0x74,0x3a,0x1d,0xb4,0x5a,0x6d,0x4c,0xd2,0xd3,0xd3,
+ 0x29,0x82,0x71,0x36,0x10,0x2f,0x29,0x13,0x44,0x95,0x33,0x2e,0x6d,0x6f,
+ 0x6f,0x87,0xdd,0x6e,0x8f,0x89,0xd9,0x6c,0x9e,0x11,0xa7,0x69,0x79,0x9f,
+ 0x45,0xa4,0xf0,0xcc,0xa3,0x8a,0x79,0x26,0x3c,0xc8,0x62,0xb1,0xc4,0xa4,
+ 0xbc,0xbc,0x3c,0x9c,0x31,0x67,0x17,0x91,0xca,0xb3,0x8e,0x2a,0xe6,0x8f,
+ 0xc7,0x33,0xe1,0x41,0xb1,0x28,0x2a,0x2a,0x8a,0x14,0xeb,0x89,0x34,0xbe,
+ 0xe6,0x51,0xc5,0x11,0x03,0xff,0x2f,0xfb,0x89,0xf5,0xbc,0xa0,0xb3,0x8a,
+ 0xdd,0x6e,0x37,0x6c,0x36,0xdb,0xbc,0x10,0xc4,0x85,0x10,0xe3,0x55,0x10,
+ 0x55,0x29,0x26,0x51,0xf5,0x42,0x31,0x5d,0xbf,0x49,0x8e,0xe7,0x88,0x05,
+ 0x4f,0x89,0x47,0x47,0x47,0x31,0x3c,0x3c,0x2c,0x73,0x8d,0xae,0xc3,0x7d,
+ 0x98,0x81,0x9a,0x1a,0x78,0x3c,0x3d,0xa8,0x3c,0x29,0x21,0xeb,0xc3,0x02,
+ 0xec,0xdc,0xf3,0x29,0x0a,0xca,0x0c,0x0f,0xb5,0xbb,0xcb,0xfc,0xab,0x73,
+ 0x0a,0x9d,0xe2,0x4a,0x4d,0x09,0x79,0x5e,0x57,0x5e,0x47,0xe1,0x5f,0x71,
+ 0xb8,0x85,0x45,0x4f,0xb6,0xb3,0xaa,0x64,0x1c,0xaa,0x90,0x70,0xb8,0xa2,
+ 0x12,0x1d,0xdd,0x75,0xf0,0xfa,0x1a,0xd1,0xd3,0x7b,0x06,0x81,0x07,0x0e,
+ 0xd8,0xdd,0x56,0x68,0x0f,0x54,0x86,0xd8,0xda,0x5c,0x2b,0x13,0xc4,0x6c,
+ 0xf2,0x2d,0xe5,0xf2,0xff,0x88,0xc3,0x72,0xde,0xc6,0x1b,0x1b,0xe5,0xdf,
+ 0x2d,0xa2,0x88,0x32,0xc3,0x31,0x54,0x49,0x26,0xf4,0xf7,0x9f,0x85,0xcf,
+ 0x67,0x23,0x61,0x2b,0xf2,0x4a,0xcd,0x70,0x76,0xd4,0x63,0x68,0xd0,0x86,
+ 0xdf,0xa7,0x2e,0x23,0xef,0x73,0x13,0x58,0x6a,0xa6,0x9d,0x7c,0xef,0x12,
+ 0x09,0xb3,0x8a,0x79,0x1f,0x08,0x04,0xf0,0xcd,0xb1,0x93,0x28,0x3d,0x5a,
+ 0x85,0x2b,0x57,0x6b,0x31,0x16,0x74,0x62,0x62,0xc2,0x85,0xb1,0x47,0x1d,
+ 0xc8,0x2d,0x39,0x85,0x5e,0x5f,0x33,0x26,0x27,0x2f,0x62,0xa0,0xdf,0x0e,
+ 0xdf,0x1d,0x27,0x32,0x0a,0xcb,0xff,0x64,0xf1,0xc9,0x5f,0x90,0x53,0x3d,
+ 0xa7,0xf8,0x38,0x15,0x6a,0xcb,0xae,0x12,0x58,0x9b,0x25,0x0c,0x0d,0x9d,
+ 0xc3,0xd8,0x98,0x83,0xee,0x74,0xe3,0xce,0x88,0x0b,0x9b,0xf7,0xfc,0x80,
+ 0xc1,0x40,0x1b,0x10,0xea,0x44,0x6f,0x5f,0x3d,0xa6,0xff,0xee,0xc2,0xd1,
+ 0xd3,0x12,0x68,0xbd,0x5b,0xc9,0xb9,0xee,0x29,0x71,0x64,0xb3,0x48,0x12,
+ 0xb6,0xe9,0x0d,0x70,0xb8,0x7e,0xc2,0xc0,0x40,0x13,0x42,0xa1,0x2e,0xfa,
+ 0xf7,0x32,0xba,0xaf,0x3b,0xa0,0xc9,0x37,0xe1,0x7e,0xd0,0x25,0x4f,0x14,
+ 0x08,0xfc,0x86,0xdb,0xb7,0x9b,0xd0,0x76,0xed,0x1c,0x96,0x6b,0xb2,0x6f,
+ 0x92,0xf3,0x9d,0x39,0xc5,0x55,0xc7,0x4d,0xc8,0xd9,0xfd,0x19,0x9c,0xee,
+ 0x5a,0x39,0x78,0x46,0x7c,0x09,0xf7,0x48,0xf8,0xfe,0xbe,0x6a,0x2a,0xdc,
+ 0x79,0x59,0x3c,0x3e,0xde,0x42,0xf7,0x7f,0x45,0x77,0xdf,0x05,0xac,0xda,
+ 0xb8,0x75,0x90,0x9c,0xef,0xcd,0x29,0xae,0xae,0xb1,0x60,0x63,0x5e,0x29,
+ 0x2e,0xb8,0xeb,0xe1,0xf7,0xdb,0xf1,0x60,0xd4,0x21,0x67,0x3c,0x1d,0xba,
+ 0x84,0x83,0xdf,0xff,0x82,0xd7,0x74,0x27,0xb0,0xdf,0x58,0x0b,0x4f,0x6f,
+ 0x03,0x42,0xd3,0x5d,0xb0,0xb7,0x35,0x60,0xc5,0xda,0x0c,0x2f,0x39,0xb7,
+ 0xce,0xbd,0xf3,0x04,0x01,0x2f,0x67,0x7d,0x84,0xbd,0xdf,0x56,0xc3,0x3f,
+ 0xd8,0x84,0x91,0x91,0x66,0x04,0x83,0xad,0x72,0xd6,0x7c,0x82,0x1e,0x6f,
+ 0x33,0x8c,0xd2,0xcf,0xb8,0xda,0x63,0xc5,0x1f,0x53,0x6e,0x1c,0x32,0x7e,
+ 0x07,0x71,0xc9,0xca,0xce,0x70,0xc6,0xa9,0xec,0xad,0xfc,0x59,0xe5,0xf1,
+ 0x4b,0xd4,0x78,0xf1,0x63,0x23,0x6a,0x5b,0x6d,0x18,0xa7,0x8c,0x3d,0x9e,
+ 0x3a,0xdc,0xa7,0x09,0xfa,0x6e,0x34,0x60,0xf8,0x2e,0xbd,0x0d,0xb7,0x1a,
+ 0x78,0xa9,0xd1,0xd8,0x62,0xc5,0xfa,0xcd,0x3b,0x26,0x29,0xe6,0xc7,0xf0,
+ 0x1a,0xa7,0x28,0x55,0xcc,0x25,0x74,0x44,0x41,0x04,0xc5,0xc4,0xc1,0x85,
+ 0x69,0x5b,0xae,0x2c,0xd7,0x1d,0x81,0xf1,0xcc,0x69,0x04,0x1f,0xb9,0xf0,
+ 0xf8,0xb1,0x4b,0x96,0xf3,0xac,0x83,0x0f,0x5d,0xa8,0x3b,0x5f,0x87,0xb7,
+ 0xb7,0x17,0xff,0x25,0x24,0x2c,0xee,0xe0,0xe3,0x09,0x0d,0x53,0x0e,0xeb,
+ 0x14,0xe5,0x08,0x4c,0x53,0x0e,0x96,0x48,0x36,0xd1,0x46,0x2a,0x14,0xd7,
+ 0x64,0x5e,0x4c,0xcc,0xd9,0x37,0x95,0x53,0xf2,0x15,0x0c,0x26,0x33,0x2a,
+ 0xa4,0x53,0xf8,0xd2,0x74,0x02,0xf9,0x9f,0x18,0xb0,0x26,0x73,0xdb,0x84,
+ 0x90,0x28,0x4b,0xbf,0x26,0xb6,0x13,0xaf,0x72,0x71,0x5c,0x8c,0xcf,0x53,
+ 0x12,0xf1,0x0a,0x2f,0x88,0x90,0x90,0x7c,0x84,0xa9,0xdf,0x70,0xb1,0x55,
+ 0x19,0x5e,0x61,0xf5,0x26,0x3f,0x53,0xaf,0xf3,0xb2,0xa4,0x15,0x9d,0xca,
+ 0xe3,0xf3,0x4c,0x3f,0x50,0xce,0x8c,0x24,0x36,0xdb,0x37,0xeb,0x89,0x93,
+ 0x4a,0x50,0xb6,0xa9,0x5a,0x59,0xb6,0x4c,0x22,0x5b,0xa9,0x7e,0xb6,0xb2,
+ 0xa6,0x1a,0x25,0x53,0x9e,0xc8,0x82,0x79,0x89,0x15,0x79,0x9c,0x1c,0x30,
+ 0xf3,0x54,0xcf,0x2b,0xcb,0xb7,0x4c,0xe9,0x17,0x13,0x89,0xc4,0xb3,0xc4,
+ 0x33,0x7c,0xfc,0x3f,0xa4,0x48,0xee,0xab,0x12,0x6e,0x96,0x1e,0x00,0x00,
+ 0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_dial_png_len = 1024;
+static const unsigned char small_dial_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x03,0x92,0x49,0x44,0x41,0x54,0x48,0xc7,0xb5,0x95,
+ 0x59,0x48,0x54,0x51,0x1c,0xc6,0x1d,0x19,0x04,0x85,0xb0,0x0d,0x41,0x70,
+ 0xcb,0xca,0x07,0x9d,0x30,0x17,0x46,0x67,0x34,0xc9,0xd9,0x7a,0x68,0xb1,
+ 0x0d,0x27,0x4a,0xcc,0x5e,0xca,0xa1,0x41,0x54,0x12,0x43,0x33,0x7b,0xc8,
+ 0x6a,0x92,0x52,0x69,0x03,0xa3,0x45,0x33,0x35,0x51,0xb4,0x22,0x0b,0x2b,
+ 0x5b,0xa0,0x88,0x16,0xb3,0x65,0x48,0x2b,0xaa,0x87,0xc4,0x28,0x22,0x22,
+ 0xa3,0x08,0x9a,0xaf,0xf3,0x5d,0xce,0x8d,0x69,0x9c,0x36,0xa2,0x0b,0x1f,
+ 0x33,0xdc,0xb9,0xe7,0x77,0xff,0xe7,0xff,0x7d,0xff,0x33,0x01,0x00,0x02,
+ 0xfe,0x87,0xfe,0xee,0xe1,0x80,0x80,0xb9,0xff,0x0c,0x16,0x57,0x8c,0x90,
+ 0x46,0x48,0x2b,0x14,0x24,0x14,0xac,0xd5,0x6a,0x6b,0xc4,0x67,0x08,0xbf,
+ 0xcb,0x7b,0x53,0x85,0x26,0xfd,0x31,0x58,0x02,0x1b,0x2a,0x5c,0x79,0x75,
+ 0xd5,0xf5,0x79,0x83,0x25,0x5b,0x16,0x8d,0x15,0x14,0x67,0x78,0x56,0x39,
+ 0xd3,0xe0,0xdc,0x6c,0x1d,0x2b,0x77,0xe5,0xdc,0xaf,0xac,0x5b,0xba,0x4d,
+ 0x3c,0xd3,0x2a,0x14,0x2e,0x5f,0xae,0xf9,0x25,0x98,0x0f,0xd4,0x1f,0x2d,
+ 0x9e,0x5b,0xbd,0x3b,0xff,0x5e,0x99,0x6b,0x91,0x67,0x6f,0x57,0x3e,0x4e,
+ 0x5c,0x77,0xa0,0xf7,0x51,0x11,0x4e,0xb9,0x0b,0xd1,0x74,0xd5,0x0e,0x57,
+ 0xbb,0x0d,0xce,0x1a,0xfd,0xd7,0x35,0x1b,0x52,0x47,0x9d,0x55,0xd6,0x25,
+ 0x62,0x4d,0xa8,0xdc,0x81,0xc6,0x2f,0x58,0x85,0x56,0xd5,0xe6,0xbd,0xd8,
+ 0xd7,0x55,0x80,0xbe,0xc7,0x65,0x38,0xff,0xac,0x14,0xbd,0x4f,0xd6,0xe1,
+ 0xf4,0x70,0x01,0x4e,0x0e,0xaf,0x44,0xcf,0xb0,0x1d,0x1d,0x83,0xcb,0x71,
+ 0xe0,0x82,0x0d,0x35,0xc7,0x8d,0x28,0xac,0x32,0x8e,0xd8,0xd7,0x1a,0xec,
+ 0x6c,0x89,0x37,0xdc,0xb7,0xa7,0x0d,0xac,0x94,0xd0,0xfe,0xe7,0xe5,0x38,
+ 0xfb,0xb4,0x50,0x81,0x75,0x3e,0xca,0x41,0x87,0x7b,0x1e,0x5a,0x06,0x2d,
+ 0xa8,0xef,0xcd,0xc4,0xae,0xb6,0x65,0xe8,0xb9,0xb2,0x13,0x7b,0xfa,0x32,
+ 0xb1,0x7e,0x7b,0x02,0x56,0x38,0xf4,0x43,0x62,0xad,0x43,0x4a,0xeb,0x0b,
+ 0xd6,0xb0,0xa7,0x65,0xae,0x05,0x1e,0x56,0x4a,0x68,0xf7,0x50,0xae,0x02,
+ 0x6c,0x7f,0x68,0xc1,0xde,0xbe,0x0c,0x6c,0x3e,0x64,0x44,0xff,0x9d,0xc3,
+ 0xf8,0xfc,0xe5,0x23,0x76,0xb6,0x2e,0x16,0x2f,0x31,0xa2,0xe2,0x60,0x32,
+ 0x2c,0xf6,0x48,0x8f,0xd1,0x3a,0xbd,0x5f,0x30,0x22,0xa4,0xb9,0x1a,0x6f,
+ 0xb0,0x96,0x46,0xb1,0xa7,0xdc,0x3e,0x2b,0x25,0xb4,0xe9,0x56,0x36,0x76,
+ 0x9d,0x32,0xa0,0xf9,0xdc,0x06,0xbc,0x7d,0xff,0x12,0xbc,0x2e,0x0f,0x34,
+ 0xa3,0xee,0x8c,0x11,0xfb,0x2f,0x65,0xa1,0xb4,0x21,0x11,0x0b,0xd7,0xc4,
+ 0xc0,0x92,0x33,0xeb,0x89,0x60,0xe8,0x84,0x26,0x2b,0x66,0x7a,0x81,0x83,
+ 0xe8,0xbe,0x62,0x94,0xe8,0x29,0xb7,0xdf,0x26,0x2a,0xad,0x6c,0x4c,0xc5,
+ 0x0d,0x77,0x37,0xd4,0xeb,0xdd,0x87,0x57,0x4a,0xe5,0xc7,0x06,0x4c,0x68,
+ 0xba,0x6d,0x42,0xc9,0xee,0x59,0x30,0xe7,0x46,0x60,0x76,0x7a,0xd4,0x27,
+ 0xc1,0x30,0xc8,0x94,0x04,0x79,0x83,0x83,0x19,0x29,0xba,0x4f,0xa3,0xd4,
+ 0x16,0xb0,0xe2,0x6d,0xcd,0x56,0x8c,0xbe,0x7d,0xaa,0x80,0x8f,0xf7,0x6d,
+ 0x14,0xbd,0xcd,0x50,0x7e,0x6b,0x19,0x34,0xc3,0xb9,0x43,0x07,0xbd,0x39,
+ 0x0c,0x51,0x71,0xa1,0x1e,0xc1,0x30,0x09,0x45,0x2b,0x39,0x57,0x27,0x8a,
+ 0xe1,0x67,0x4e,0x19,0x29,0xb6,0xa1,0xfd,0xa1,0x55,0x59,0x4c,0xed,0xbf,
+ 0x98,0x89,0xad,0x4d,0x66,0x5c,0x7b,0xd0,0xa1,0xb4,0x45,0xbd,0x7f,0xe4,
+ 0x46,0x36,0x56,0x97,0xc7,0x29,0xe0,0xc8,0x99,0x13,0x10,0x18,0x18,0x78,
+ 0x4c,0xb0,0xca,0x94,0x3e,0x7b,0x55,0x1c,0xc2,0xf0,0x33,0xa7,0x8c,0xd4,
+ 0x09,0xb7,0xed,0x3b,0x40,0xa9,0xfc,0x8e,0x09,0x15,0x8d,0x29,0xca,0xa7,
+ 0x7a,0xaf,0xb6,0xc7,0x80,0x79,0x2b,0x23,0x91,0x94,0x35,0x05,0xf1,0xb3,
+ 0x23,0x3e,0x0b,0x86,0x4d,0x28,0xd6,0x17,0x1c,0xcc,0x89,0x62,0xf8,0x7b,
+ 0x86,0x44,0x56,0xdd,0xf3,0x7f,0x00,0xfb,0xea,0xe8,0xcd,0x6c,0x14,0xd5,
+ 0xea,0x90,0x66,0x0d,0x43,0x82,0x7e,0x22,0x92,0x0d,0x33,0x9f,0x8f,0x6b,
+ 0x85,0x6a,0x1e,0xc7,0x94,0x13,0xd5,0x71,0x3f,0x47,0x01,0xb7,0xfd,0x02,
+ 0x5a,0xd1,0x98,0x0c,0xf3,0xf2,0x08,0xe8,0x2d,0x61,0x88,0x4d,0x08,0xf5,
+ 0x24,0xa6,0xc4,0x76,0xfe,0xcc,0x3c,0x1e,0x28,0x07,0xf2,0x4b,0x53,0x5e,
+ 0x73,0xa2,0x5a,0xee,0x9a,0xb1,0xef,0x42,0xa6,0x12,0x29,0xba,0x4f,0xa3,
+ 0xd8,0x53,0x6e,0x9f,0x95,0x12,0xaa,0x56,0xab,0x4b,0x89,0x1a,0x11,0x6b,
+ 0xcf,0x0b,0x15,0xf9,0x8b,0x1b,0x47,0x32,0x9c,0xb3,0xcf,0x31,0xe5,0x44,
+ 0x31,0xfc,0xcc,0x29,0x23,0x45,0xf7,0x69,0x14,0x7b,0x4a,0x20,0x2b,0x25,
+ 0x34,0x31,0x75,0xda,0x9b,0xb8,0xf8,0xa8,0x4d,0x62,0x6d,0xba,0x50,0xfc,
+ 0xb8,0x01,0x51,0x87,0x84,0x07,0x0a,0x67,0x9f,0x63,0xca,0x89,0x62,0xf8,
+ 0x99,0x53,0x3a,0x4f,0xd1,0x28,0x02,0xb9,0xfd,0x84,0xa4,0xc8,0x51,0x09,
+ 0x9d,0x23,0x34,0x43,0x1e,0x46,0x5a,0xbf,0x87,0x90,0x3c,0x48,0x58,0xbd,
+ 0x83,0x63,0xca,0x89,0x62,0xf8,0x99,0x53,0x46,0x8a,0xee,0xd3,0xa8,0xa4,
+ 0xb4,0xb8,0x56,0xb9,0xfd,0x74,0x09,0xf5,0x7f,0x08,0xf9,0x81,0x3b,0xe4,
+ 0xec,0xeb,0xa4,0x29,0x26,0x99,0x53,0x9b,0x74,0xdf,0x20,0x7b,0x9a,0xfe,
+ 0xdb,0x63,0xd3,0x07,0xae,0x95,0xfd,0x9a,0x2c,0x9d,0x8e,0x96,0xe1,0x8f,
+ 0x95,0xdf,0xc3,0xe5,0x6f,0x21,0x7f,0x74,0xd0,0xff,0xe4,0x05,0x41,0xf2,
+ 0xef,0x28,0xc4,0xe7,0xaf,0x69,0x1c,0x50,0xd5,0x37,0x1f,0x12,0x9f,0x65,
+ 0x93,0x3f,0xe3,0x89,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,
+ 0x60,0x82
+};
+
+static const unsigned int small_editbreaklayout_png_len = 744;
+static const unsigned char small_editbreaklayout_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x02,0x7a,0x49,0x44,0x41,0x54,0x48,0xc7,0x95,0x95,
+ 0xb1,0x6b,0x5a,0x51,0x14,0xc6,0x8d,0x48,0xb0,0x2f,0x49,0x2d,0x5d,0x9a,
+ 0x44,0x0c,0xa2,0x10,0xa8,0x25,0x4b,0x14,0x2c,0xda,0xba,0xc4,0x76,0x10,
+ 0x6d,0x50,0x74,0xc8,0x56,0x84,0x0e,0x2a,0xdd,0xd4,0x25,0x50,0xb7,0x0e,
+ 0x2e,0x62,0x06,0x97,0xae,0xd6,0xa1,0x14,0xad,0x4b,0x5b,0x9c,0x9a,0xff,
+ 0xa3,0x08,0x29,0x25,0xff,0x84,0x2d,0xa7,0xdf,0xb9,0x3d,0x57,0x6e,0x5e,
+ 0xf4,0xf5,0x55,0xf8,0xf1,0xb8,0xf7,0x9e,0xfb,0xbd,0xf3,0xce,0xf9,0xee,
+ 0xd5,0xe3,0xf1,0x78,0x36,0x80,0x0f,0xf8,0xc1,0x16,0xd8,0xb1,0xc1,0x73,
+ 0x96,0xac,0x5b,0x0e,0x31,0x7e,0xd1,0xd9,0x20,0x22,0x0f,0xff,0x7c,0xd5,
+ 0x6a,0x95,0x2a,0x95,0x0a,0x95,0x4a,0xa5,0x1b,0xa4,0xd3,0x69,0x8e,0x60,
+ 0x0e,0x5c,0xc4,0xec,0xc9,0x4b,0x7c,0x5a,0xd8,0xcf,0x1b,0xa6,0xd3,0x29,
+ 0x4d,0x26,0x13,0x1a,0x8f,0xc7,0x8a,0xe1,0x70,0x48,0xbd,0x5e,0x4f,0x6f,
+ 0x7a,0xe2,0x22,0x26,0x2e,0xe2,0x7e,0x2d,0xbc,0xc5,0x6f,0x1e,0x8d,0x46,
+ 0x34,0x18,0x0c,0xa8,0xdf,0xef,0x2b,0xba,0xdd,0x2e,0xb5,0xdb,0x6d,0xbd,
+ 0xe9,0xd4,0x45,0x4c,0x16,0x44,0x58,0x4f,0x0b,0xef,0xf0,0xe7,0xf0,0x9b,
+ 0x5b,0xad,0x16,0xd5,0x6a,0x35,0x45,0xbd,0x5e,0xa7,0x46,0xa3,0xa1,0x37,
+ 0x9d,0xb9,0x88,0x29,0x80,0x43,0xd6,0x5b,0x66,0x2c,0x0b,0x4e,0x9c,0xba,
+ 0x88,0xb9,0x95,0x31,0x77,0xfa,0x80,0xeb,0x28,0x02,0x67,0x36,0x78,0xee,
+ 0x19,0x38,0x07,0x5f,0xc1,0x4f,0xf0,0x0b,0x5c,0x83,0x4b,0x70,0x01,0x4a,
+ 0xe0,0xa9,0xe8,0x58,0xcb,0xe6,0xb9,0xe8,0xf8,0xf8,0xd5,0xfe,0x3e,0x7d,
+ 0x38,0x3a,0xa2,0x39,0xe6,0x16,0x27,0x27,0xea,0xc9,0x63,0x9e,0x97,0x98,
+ 0x0a,0x08,0x81,0x3b,0xcb,0x8c,0xd7,0x75,0xbc,0xd3,0xe9,0x50,0xd4,0xb2,
+ 0xe8,0x5d,0x2c,0x46,0xbf,0x21,0x46,0xd9,0xec,0x2d,0x78,0x9e,0xd7,0x39,
+ 0x0e,0x5a,0xcf,0x41,0x40,0xce,0xc6,0x7a,0x57,0xa4,0x52,0x29,0xb5,0x49,
+ 0x8b,0xcc,0x8e,0x8f,0xa9,0x15,0x0e,0xd3,0xe3,0x40,0x40,0x3d,0x2f,0xe3,
+ 0xf1,0xe5,0x1a,0xc7,0xf1,0x97,0x81,0x5d,0x39,0x28,0xab,0x5d,0x51,0x28,
+ 0x14,0xd4,0x67,0xea,0x4c,0xdf,0x46,0xa3,0xb4,0xe9,0xf5,0x52,0x26,0x93,
+ 0xa1,0x64,0x32,0x49,0xb1,0xed,0x6d,0xfa,0x8e,0x7d,0x66,0xe6,0x52,0x96,
+ 0xd7,0xd2,0xb7,0xf5,0xae,0xe0,0x1a,0xea,0x4c,0x59,0x54,0xcf,0x9b,0xa2,
+ 0xfc,0xd4,0x99,0x73,0x3c,0xd6,0x3f,0x81,0xfb,0x4e,0xae,0xb8,0x9e,0xcb,
+ 0x66,0xfe,0x6c,0x8c,0x47,0xe0,0xbd,0x5d,0x94,0xc7,0xbc,0xce,0xe3,0xf9,
+ 0xdf,0x66,0x5f,0x81,0xe0,0x5a,0x57,0x78,0x91,0xe1,0x42,0xca,0xc0,0x35,
+ 0x8d,0x23,0xab,0x55,0xa2,0xa1,0x50,0x48,0xad,0xf3,0x1c,0xc7,0x43,0x6f,
+ 0x01,0xc2,0x6b,0x5d,0x11,0x89,0x44,0xc8,0xcc,0xd8,0x2e,0xca,0x2e,0x28,
+ 0x97,0xcb,0x54,0x2c,0x16,0xed,0x19,0xff,0x90,0x83,0xb2,0xda,0x15,0xdc,
+ 0x24,0x5d,0x63,0xae,0xa1,0x5d,0x34,0x97,0xcb,0x51,0xb3,0xd9,0x54,0xb5,
+ 0xe7,0x1e,0x18,0x35,0xfe,0xac,0x33,0x5e,0xe9,0x8a,0x7c,0x3e,0x7f,0xc3,
+ 0x15,0xa6,0x68,0x22,0x91,0x50,0x87,0x87,0x45,0xd9,0x2d,0x36,0x57,0xbc,
+ 0xd1,0x35,0x76,0xbc,0x2b,0x4c,0x1f,0x7f,0x43,0xe6,0xa6,0x8f,0x75,0xa6,
+ 0x86,0x8f,0x67,0x20,0xa1,0x5d,0xe1,0x97,0x7b,0x34,0x2e,0x17,0x49,0x41,
+ 0x78,0x01,0x1a,0xff,0x79,0xf2,0x5e,0x82,0xa8,0xf6,0xb1,0x4f,0x6e,0xfe,
+ 0x3d,0x29,0xfa,0xa1,0xc1,0x43,0x90,0x03,0x1f,0xff,0x71,0x57,0xcc,0x44,
+ 0xf4,0x91,0x64,0xab,0x4e,0x9e,0xd3,0x7f,0xde,0x5d,0x70,0x0f,0x3c,0x00,
+ 0x75,0x31,0xff,0x95,0x58,0x8a,0xbb,0xff,0x45,0x6a,0x9a,0x90,0x4c,0x59,
+ 0x74,0x53,0x69,0xf2,0x4d,0xe4,0x84,0xf1,0x62,0x4b,0x36,0x06,0xa5,0xeb,
+ 0x11,0x79,0x06,0x65,0xde,0x32,0xff,0x4c,0xff,0x00,0xcd,0x57,0xa8,0x51,
+ 0xaa,0xbd,0x58,0xdd,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,
+ 0x60,0x82
+};
+
+static const unsigned int small_editcopy_png_len = 485;
+static const unsigned char small_editcopy_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x04,0x00,0x00,
+ 0x00,0x6e,0xbd,0xa4,0xb0,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0x77,0x49,0x44,0x41,0x54,0x28,0xcf,0x85,0xd3,
+ 0xc1,0x6a,0x13,0x51,0x18,0xc5,0xf1,0xdf,0x24,0xb7,0xda,0x56,0x88,0x0a,
+ 0x2e,0x6a,0x7d,0x07,0x37,0xba,0xb0,0x45,0x10,0xc4,0x7d,0xd7,0xae,0x5c,
+ 0x8b,0xb8,0xf1,0x09,0x14,0x44,0x7c,0x01,0xf1,0x11,0x7c,0x00,0x77,0xd2,
+ 0x95,0x48,0x74,0xa7,0x2b,0x77,0x95,0x6e,0xd2,0x42,0x51,0x07,0x6d,0xcc,
+ 0x24,0x99,0x3b,0x33,0x2e,0x92,0x49,0xa6,0x49,0xc4,0x73,0x57,0xf7,0xf2,
+ 0xe7,0x9c,0xf3,0x5d,0xf8,0x42,0x65,0xae,0x24,0xd1,0x16,0xb4,0xb5,0x66,
+ 0x4f,0x95,0x52,0x54,0x54,0x05,0x04,0x4d,0xb5,0x6f,0xe6,0xa3,0xc6,0x75,
+ 0xe0,0xc0,0xbd,0xde,0xfe,0x0d,0x7f,0x92,0x61,0x15,0x17,0xe1,0x30,0xf2,
+ 0xc5,0x3c,0xeb,0xab,0xeb,0xf6,0xaf,0xdd,0xfe,0xfc,0x61,0x47,0x9a,0x0c,
+ 0xaa,0x18,0xce,0x84,0x6f,0x96,0x7e,0xa9,0x24,0x12,0x41,0x4b,0xc4,0x6b,
+ 0x0f,0xaf,0xee,0x7e,0xea,0xee,0x90,0x0c,0xc2,0x62,0xf8,0x1d,0x03,0x07,
+ 0xee,0x7b,0x69,0xc3,0x18,0x9b,0x5e,0x79,0xb4,0xb5,0xfb,0xb1,0x7b,0x4b,
+ 0x19,0x56,0x87,0xbf,0x31,0xf4,0x42,0x86,0x07,0xa0,0xbb,0xe5,0x8a,0x61,
+ 0x40,0x9b,0xbc,0x51,0x7c,0x1a,0xae,0xf0,0xc4,0x3b,0xe7,0xb4,0xa4,0xf6,
+ 0xb8,0xe4,0x47,0x40,0x8b,0xd8,0x70,0x2e,0xea,0x70,0x95,0x67,0x3a,0xd6,
+ 0x9d,0xc0,0x79,0x6b,0xa1,0x06,0xca,0x33,0xce,0x93,0xf0,0xb7,0x1e,0xa3,
+ 0x3d,0xc9,0x6d,0x4b,0xa6,0x70,0xae,0x98,0xc1,0x17,0xbd,0x07,0xa9,0x3d,
+ 0xa9,0x75,0x17,0x8c,0xeb,0x9f,0x5d,0x86,0x3b,0x3a,0xe0,0x04,0x03,0x43,
+ 0xe3,0xd9,0x44,0x2b,0xe0,0x5a,0x39,0xc6,0xc6,0x72,0x71,0x11,0x8e,0x4b,
+ 0xf0,0x18,0x51,0x6e,0xb4,0x5c,0x23,0x5f,0xe9,0x1c,0xa7,0xe7,0xbf,0x70,
+ 0x44,0x6a,0x4d,0xb2,0xec,0x3c,0x5a,0x59,0xe3,0xe9,0xfc,0x9a,0x89,0xa1,
+ 0x76,0x89,0x2b,0x9d,0x3d,0xd7,0xd3,0x43,0x26,0x95,0x05,0x38,0xd5,0xf7,
+ 0x73,0xa5,0xb3,0x9e,0x6f,0x0e,0x11,0x65,0xfa,0x01,0xe5,0xa1,0xbb,0xfe,
+ 0xa1,0x23,0xc7,0x8e,0x51,0x2a,0x26,0x35,0x0a,0xdb,0xb6,0x5d,0xb6,0xb1,
+ 0x84,0x66,0x52,0xdf,0xab,0x53,0x8d,0x01,0xa3,0xbe,0x23,0xe9,0xc2,0xd6,
+ 0xa8,0xc3,0x1b,0x8b,0x84,0x42,0x26,0xf7,0xbb,0xb1,0xa6,0xb5,0x4a,0x45,
+ 0x73,0xf2,0xbf,0xb0,0x14,0xa3,0x81,0xb1,0x86,0x26,0x8d,0x00,0x00,0x00,
+ 0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_editcut_png_len = 649;
+static const unsigned char small_editcut_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x04,0x00,0x00,
+ 0x00,0x6e,0xbd,0xa4,0xb0,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x02,0x1b,0x49,0x44,0x41,0x54,0x28,0xcf,0x7d,0xd3,
+ 0x4b,0x48,0x94,0x51,0x18,0xc6,0xf1,0xff,0xd7,0x34,0x17,0x30,0x44,0x74,
+ 0x10,0x33,0xcb,0x56,0x76,0x01,0x6d,0x25,0x6d,0xc2,0x50,0xca,0x45,0xa0,
+ 0x65,0xe4,0xd4,0x80,0xb4,0xe8,0x82,0x85,0x84,0xb8,0x29,0xa3,0x26,0x17,
+ 0x05,0x89,0x34,0xb9,0x30,0x8b,0x70,0x15,0x2e,0xa2,0x7b,0xe4,0x20,0xa3,
+ 0x09,0x93,0x61,0x4a,0x58,0x42,0x3a,0x83,0x89,0xa3,0x92,0x88,0x88,0xdd,
+ 0x2c,0x90,0x6a,0x6c,0x7a,0x5a,0xcc,0x7c,0xa3,0x59,0xc9,0x59,0xbd,0xe7,
+ 0xfc,0x38,0x9c,0xf7,0xe1,0xbc,0x08,0x81,0x45,0x90,0xce,0x06,0xac,0x62,
+ 0xa5,0x85,0x60,0x35,0x19,0x9c,0xe2,0x22,0x75,0xec,0x26,0x79,0x45,0x8c,
+ 0x41,0x26,0x97,0x19,0x43,0x4c,0x72,0x9b,0x62,0x6c,0x89,0x23,0x83,0x26,
+ 0x22,0xf1,0x22,0xc2,0x0d,0xec,0x60,0xa3,0x8a,0x19,0xc4,0x47,0x42,0x4c,
+ 0xd2,0x4a,0x11,0x4e,0x93,0xba,0x15,0x56,0x58,0x23,0x1a,0x56,0x9f,0x72,
+ 0x44,0x3e,0x64,0xd2,0x86,0x98,0xa3,0x95,0xb3,0xf4,0x30,0xc1,0x2d,0x8a,
+ 0x70,0xc4,0xe8,0x98,0xc2,0x0a,0xa9,0x47,0x8f,0x55,0x24,0x1e,0xb0,0x11,
+ 0xb2,0xe9,0x40,0xcc,0xe3,0xa5,0x98,0x1a,0x82,0x4c,0xd2,0xcc,0x7a,0xae,
+ 0xc5,0x68,0x50,0x6d,0x6a,0x51,0x81,0x08,0x50,0x48,0x16,0x24,0x73,0x9a,
+ 0x30,0x51,0xe6,0xf0,0x52,0x46,0x0b,0x11,0x46,0xb9,0xbb,0x8c,0xbe,0xc4,
+ 0x45,0x1e,0xa9,0x60,0x21,0x07,0x0f,0x53,0x88,0x4f,0x34,0x71,0x95,0x2f,
+ 0x5b,0xf5,0x17,0x3d,0x48,0x1e,0x69,0x58,0x63,0x7d,0xa7,0xe2,0x61,0x18,
+ 0x31,0xcd,0xc4,0xce,0xff,0x53,0xc3,0x8c,0x29,0x83,0x4b,0xcc,0xa0,0x15,
+ 0x6e,0x35,0xc4,0x62,0xa6,0x5b,0xa8,0x67,0xf6,0x90,0x46,0xe5,0x51,0xad,
+ 0x49,0x47,0xa8,0x60,0x9b,0x49,0xe3,0x18,0x83,0x75,0xec,0xa5,0x9a,0xf1,
+ 0x6a,0x85,0x54,0xab,0x4a,0xb5,0xa8,0x40,0x9b,0xc4,0x00,0x55,0xac,0xc5,
+ 0x16,0xa3,0x26,0x76,0x72,0x92,0xa7,0x8c,0xf3,0x9e,0xaf,0x47,0xd5,0xad,
+ 0x56,0x15,0x68,0x87,0xae,0xeb,0x8c,0xe8,0xa4,0x14,0x47,0x02,0xb3,0x8a,
+ 0x6c,0x8e,0x10,0x60,0x9a,0x20,0xdd,0xb4,0xf3,0x63,0x9f,0x0a,0x95,0xab,
+ 0x9b,0xf2,0xa9,0x57,0x0d,0xc2,0xc7,0x1e,0xec,0xf1,0x67,0xe0,0xe4,0x18,
+ 0x01,0xa6,0xb8,0xc7,0x05,0x9a,0x79,0xc5,0x77,0xa2,0xcc,0xf2,0xf6,0xbc,
+ 0x7a,0xf5,0x46,0x83,0xba,0xb2,0x84,0x83,0x9b,0xe7,0x7c,0xe0,0x0e,0x07,
+ 0x28,0xe7,0x3e,0xf3,0x2c,0xd0,0xc3,0x09,0x8e,0xd3,0xe5,0xd5,0xa0,0x82,
+ 0x1a,0x5a,0xc2,0xc1,0xcb,0x2f,0xde,0x51,0xc3,0x61,0x9e,0x10,0xe5,0x27,
+ 0xdd,0xec,0xc7,0xca,0x1a,0x4a,0xf1,0x37,0x6a,0xe8,0x4f,0x4e,0x1d,0x51,
+ 0xbe,0xf1,0x8c,0x4e,0x84,0xe8,0xc7,0x45,0xb2,0xc0,0xc0,0x41,0x09,0xfe,
+ 0x46,0x0d,0xe8,0x85,0xfa,0x4c,0x4e,0x21,0x41,0x16,0x10,0x0b,0x44,0xe8,
+ 0xc0,0x85,0x25,0x91,0xbc,0x83,0x12,0xfc,0xf5,0xf2,0xe9,0x91,0x7c,0x3a,
+ 0x27,0x1e,0x42,0x12,0x15,0xf4,0x33,0xcd,0x67,0x5e,0x53,0xbe,0xf8,0xf5,
+ 0x13,0xbc,0x3d,0x5e,0x76,0xe1,0x46,0x60,0x67,0x17,0x95,0x34,0x50,0xb6,
+ 0x7c,0xa8,0x30,0x70,0x90,0xce,0x66,0xf2,0xd9,0x4e,0x2e,0x59,0xe6,0xb6,
+ 0xf3,0xdf,0xd3,0x87,0x81,0x95,0x24,0x52,0x48,0x23,0x85,0xa4,0xdf,0x75,
+ 0x37,0x8b,0x00,0xeb,0xd0,0xf0,0x20,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,
+ 0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_editgrid_png_len = 520;
+static const unsigned char small_editgrid_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0x9a,0x49,0x44,0x41,0x54,0x48,0xc7,0xed,0x55,
+ 0x3d,0x4b,0xc3,0x50,0x14,0x4d,0x21,0x43,0x48,0xc9,0xe6,0xd2,0x25,0x83,
+ 0x43,0x97,0xa0,0x82,0x55,0xba,0xc5,0x60,0xa2,0x28,0xa5,0xc4,0xa5,0xb8,
+ 0x17,0x14,0x9c,0x8a,0x38,0x08,0xa2,0xe0,0xe0,0xe0,0x20,0x82,0xb3,0x93,
+ 0x60,0x8b,0x1f,0x7b,0xb5,0x9b,0x8a,0xbb,0x1f,0xd8,0xc9,0x08,0xf5,0x97,
+ 0x5c,0xdf,0x49,0xee,0xeb,0x90,0x26,0xb6,0x01,0x1d,0x04,0x87,0x93,0x47,
+ 0x4e,0xde,0x3d,0xef,0xbe,0x7b,0x2e,0x37,0x0a,0x11,0x29,0xbf,0x81,0xe8,
+ 0xa1,0x28,0x39,0x01,0x55,0x40,0x13,0xc8,0x0b,0x18,0xbc,0xea,0xcc,0xe9,
+ 0x23,0xf2,0x1a,0xeb,0xe4,0xa4,0xb0,0xea,0xfb,0x3e,0xb9,0xae,0x4b,0x8e,
+ 0xe3,0x90,0x65,0x59,0x20,0x01,0x33,0x23,0x5f,0xe0,0x43,0x54,0x29,0xac,
+ 0x61,0xd3,0x5d,0x6f,0x9b,0x3a,0x1f,0x1b,0x74,0xd5,0x5d,0x96,0x1b,0x6d,
+ 0x08,0xdc,0xf7,0x76,0xa8,0x13,0x24,0xf3,0x37,0xc1,0x1a,0x35,0x5f,0x5c,
+ 0xc9,0x97,0x58,0x5c,0x93,0xc2,0x79,0x9c,0x1c,0x89,0x2e,0xd1,0xe1,0x75,
+ 0x99,0xa6,0xed,0xb1,0x70,0x73,0x63,0x6f,0x85,0x6e,0x83,0x75,0xba,0xec,
+ 0x2e,0x26,0xf2,0x17,0x6f,0x1e,0x1d,0xb4,0x66,0xa5,0xb0,0x27,0x30,0x1e,
+ 0x96,0x85,0x85,0x0d,0x5c,0x07,0x19,0x21,0xb8,0x71,0x34,0x21,0x37,0xd6,
+ 0x0d,0xc3,0xa0,0xe6,0xb3,0x1b,0x06,0xa7,0xf1,0x9b,0xc7,0x93,0x92,0xaf,
+ 0x0a,0x14,0xc3,0x72,0xc8,0x8c,0xf9,0x43,0x3f,0x23,0xc6,0x6a,0x46,0x7e,
+ 0x21,0x9e,0x31,0xdc,0x35,0x51,0x3b,0x99,0x11,0x07,0x57,0x04,0x1c,0x5e,
+ 0x87,0xf1,0x35,0x8e,0x37,0x43,0x3d,0x69,0x1e,0xcc,0x00,0x50,0x3b,0x5c,
+ 0x93,0x03,0x9c,0x8c,0x7c,0x39,0x6e,0x9e,0x8e,0xae,0x80,0xcb,0x30,0x04,
+ 0xb5,0xe3,0x8d,0x15,0x04,0x3f,0x7c,0xee,0xa6,0xf2,0xed,0xf7,0x3a,0x9d,
+ 0x3e,0xce,0xf5,0xbb,0x25,0x9e,0x71,0xd4,0x15,0xa2,0xa5,0xe0,0x3e,0x0c,
+ 0x49,0x73,0x3f,0xce,0xb7,0x5e,0x5d,0xda,0x3f,0x9b,0x49,0xad,0xf1,0x7f,
+ 0x57,0xfc,0xf5,0xae,0xc0,0x40,0x49,0x72,0x1f,0xc1,0x70,0x3f,0x89,0x3f,
+ 0x7f,0x9a,0x1f,0xde,0x15,0x98,0x52,0x31,0x97,0x43,0xf7,0x91,0x11,0x82,
+ 0xd3,0xf8,0xad,0x93,0xa9,0xe1,0x5d,0x11,0x43,0x2d,0x23,0x3f,0x30,0xdd,
+ 0x34,0x2e,0x7a,0x89,0x3f,0x56,0xf9,0x5a,0x36,0x1b,0x62,0xf3,0xfb,0x77,
+ 0xbc,0x97,0x34,0x8f,0x55,0x9e,0xfc,0x05,0x3e,0xb1,0xc8,0xab,0xc9,0x9c,
+ 0x39,0x22,0x3f,0xf0,0x07,0xf9,0xf1,0x7f,0xde,0x17,0x06,0xe3,0x4a,0xec,
+ 0x21,0xdc,0x6e,0x6a,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,
+ 0x60,0x82
+};
+
+static const unsigned int small_edithlayout_png_len = 706;
+static const unsigned char small_edithlayout_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x02,0x4d,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xfc,0xff,0xff,0x3f,0x03,0x2d,0x00,0x40,
+ 0x00,0x31,0xd1,0xc4,0x54,0x20,0x00,0x08,0x20,0x9a,0x19,0x0c,0x10,0x40,
+ 0x34,0x33,0x18,0x20,0x80,0x68,0x66,0x30,0x40,0x00,0xd1,0xcc,0x60,0x80,
+ 0x00,0xa2,0x99,0xc1,0x00,0x01,0xc4,0x02,0x22,0x8e,0xdc,0x7a,0xff,0xff,
+ 0xd4,0xfd,0x8f,0x0c,0xb7,0x5e,0x7c,0x65,0x38,0x7d,0xe7,0x0d,0xc3,0xbb,
+ 0x2b,0x7b,0x18,0xee,0xaf,0x6f,0x66,0x84,0xc9,0x1d,0xba,0xf5,0x8e,0xe1,
+ 0xd2,0xe3,0xcf,0x0c,0xfb,0xaf,0xbe,0x64,0xf8,0x72,0x7d,0x2f,0xc3,0xd7,
+ 0xbd,0x5d,0x60,0xb9,0x1d,0x97,0x5e,0xfd,0xdf,0x75,0xe9,0x39,0xc3,0x85,
+ 0x7b,0x6f,0x18,0xf6,0x5f,0x7c,0xc0,0xc0,0xf0,0xe0,0x08,0xc3,0xff,0xb3,
+ 0xf3,0xc1,0x72,0x00,0x01,0x04,0x36,0xf8,0xd4,0xbd,0x0f,0x0c,0x8b,0x0f,
+ 0xdc,0x62,0xf8,0xfd,0xe5,0x1d,0x90,0xf7,0x9f,0xe1,0xef,0xcf,0x6f,0x70,
+ 0x9b,0x2f,0x3e,0xfe,0xc4,0x30,0x7d,0xfb,0x35,0x86,0xef,0x9f,0xdf,0x32,
+ 0xfc,0xfa,0xfd,0x97,0xe1,0xf7,0x8f,0xaf,0x70,0xb9,0xd3,0x77,0xdf,0x32,
+ 0xf4,0xaf,0x3d,0xc5,0xc0,0xf0,0xfd,0x2d,0x03,0xc3,0xdf,0x3f,0x0c,0x0c,
+ 0x7f,0x7e,0xc0,0xe5,0x00,0x02,0x08,0x6c,0xf0,0xad,0x97,0xdf,0x18,0x7e,
+ 0xbc,0x79,0xc8,0xc0,0xc8,0xc4,0xc2,0xc0,0x2e,0x24,0xc3,0xc0,0xc8,0xc6,
+ 0x05,0x57,0xf0,0xe4,0xdd,0x4f,0x86,0x6f,0xaf,0x1f,0x32,0xfc,0xfe,0xcf,
+ 0xc8,0xf0,0x8b,0x4b,0x82,0xe1,0x37,0x13,0x27,0x42,0xee,0xcd,0x67,0x06,
+ 0x86,0x8f,0x8f,0x40,0x6e,0x61,0x60,0xe0,0x12,0x62,0x60,0x60,0x66,0x85,
+ 0xcb,0x01,0x04,0x10,0x38,0x8c,0x7f,0xfe,0xfe,0xc7,0xc0,0x08,0x14,0x64,
+ 0xe5,0x13,0x65,0x90,0x10,0x13,0x62,0xf8,0xcf,0x8a,0x30,0xf8,0xcf,0xbf,
+ 0x7f,0x40,0x43,0x99,0x19,0x7e,0xb1,0x09,0x31,0x48,0x88,0x08,0x03,0x35,
+ 0xb3,0x21,0x02,0xf2,0xdf,0x5f,0x20,0x01,0xf4,0x39,0x3b,0x2f,0x83,0xbc,
+ 0x24,0x48,0x8e,0x03,0x2e,0x05,0x10,0x40,0x2c,0xc8,0x01,0xfe,0xe7,0xdf,
+ 0x7f,0x86,0x3f,0x7f,0xff,0x01,0x31,0x22,0x9b,0x83,0xd8,0x3f,0xff,0xfc,
+ 0x63,0xf8,0xc5,0xf4,0x0f,0x68,0xd0,0x6f,0xa8,0x61,0x50,0xf0,0x1f,0x28,
+ 0xf6,0x1f,0xc8,0xff,0xf7,0x07,0xc2,0x46,0x02,0x00,0x01,0x04,0x76,0x31,
+ 0xd8,0x18,0x36,0x1e,0x06,0x46,0x2e,0x41,0x06,0x2e,0x36,0x66,0xb0,0x05,
+ 0x30,0xf0,0xe1,0xdb,0x6f,0xa0,0xa1,0x5c,0x0c,0x8c,0xec,0x3c,0x0c,0x42,
+ 0x9c,0x8c,0x10,0x43,0xa0,0xe0,0xeb,0xf7,0x9f,0x60,0x1f,0x30,0x72,0xf0,
+ 0x32,0x08,0xf1,0x70,0xa0,0x18,0x0c,0x10,0x40,0x60,0x17,0x9f,0xbf,0x0f,
+ 0x8c,0x98,0x5f,0x40,0x45,0x3f,0x7f,0x31,0x5c,0x78,0xf4,0x97,0xe1,0xe7,
+ 0xd7,0x8f,0x70,0x05,0x0b,0x8e,0x3c,0x65,0x60,0xf8,0xfd,0x8d,0xe1,0xff,
+ 0x2f,0x2e,0x86,0xf3,0x77,0x81,0x11,0xf7,0x13,0x21,0xb7,0x74,0xff,0x75,
+ 0x60,0xa4,0xfd,0x06,0x3a,0xf6,0x2f,0xc3,0xf9,0x7b,0xaf,0x81,0xea,0x10,
+ 0x11,0x0b,0x10,0x40,0x60,0x83,0xdf,0x5c,0xdc,0xc1,0xf0,0xfb,0xe7,0x0f,
+ 0x86,0x7f,0x2c,0x5c,0x0c,0xbf,0xff,0xfc,0x61,0xf8,0xf5,0xee,0x09,0xc2,
+ 0xea,0x9b,0x5b,0x81,0x1a,0x7e,0x40,0x22,0x06,0x14,0x14,0x9f,0x5f,0x20,
+ 0xe4,0x1e,0x1e,0x85,0x88,0x7d,0x78,0x08,0x09,0x8a,0xaf,0x6f,0xe0,0x52,
+ 0x00,0x01,0xc4,0x48,0xab,0x62,0x13,0x20,0x80,0x68,0x96,0xf3,0x00,0x02,
+ 0x88,0x66,0x06,0x03,0x04,0x10,0xcd,0x0c,0x06,0x08,0x20,0x9a,0x19,0x0c,
+ 0x10,0x40,0x34,0x33,0x18,0x20,0x80,0x68,0x66,0x30,0x40,0x80,0x01,0x00,
+ 0x52,0xb6,0xe5,0x8b,0xaa,0x4e,0x11,0xd1,0x00,0x00,0x00,0x00,0x49,0x45,
+ 0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_edithlayoutsplit_png_len = 809;
+static const unsigned char small_edithlayoutsplit_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x02,0xb4,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xfc,0xff,0xff,0x3f,0x03,0x2d,0x00,0x40,
+ 0x00,0xb1,0xe0,0x93,0x3c,0x72,0xeb,0xfd,0xff,0x53,0xf7,0x3f,0x32,0xdc,
+ 0x7a,0xf1,0x95,0xe1,0xe7,0xef,0x7f,0x60,0x31,0x90,0x33,0xce,0xdf,0x7f,
+ 0xcb,0xf0,0xe6,0xe2,0x0e,0x86,0xa7,0x5b,0x3a,0x18,0x71,0xe9,0x05,0x08,
+ 0x20,0xbc,0x06,0x9f,0xba,0xf7,0x81,0x61,0xf1,0x81,0x5b,0x0c,0x3f,0xde,
+ 0x3c,0x64,0x60,0x64,0x66,0x85,0x08,0xb2,0xf1,0x30,0xfc,0xfa,0xf5,0x93,
+ 0xe1,0xf7,0xcf,0x1f,0x78,0x5d,0x0c,0x10,0x40,0x78,0x0d,0xbe,0xf5,0xf2,
+ 0x1b,0xc3,0xef,0x2f,0xef,0x18,0x18,0x99,0x58,0x18,0x58,0x79,0x45,0x18,
+ 0xfe,0xfc,0xfb,0xcf,0xc0,0xc8,0x25,0xc8,0xc0,0xf0,0xf3,0x17,0xc3,0x3f,
+ 0x16,0x2e,0xbc,0x06,0x03,0x04,0x10,0x13,0x3e,0xc9,0xd3,0x77,0xde,0x30,
+ 0x80,0x3c,0xcf,0x2e,0x24,0xc3,0x70,0x51,0xf9,0x09,0x83,0x94,0xa4,0x04,
+ 0x83,0xb2,0x28,0x17,0xc3,0xef,0x7f,0xcc,0x0c,0xbf,0xff,0xfc,0xc1,0x6b,
+ 0x30,0x40,0x00,0xe1,0x75,0xf1,0xdb,0x4b,0x3b,0x19,0xfe,0xfd,0xfe,0xc9,
+ 0xf0,0xa8,0x2b,0x11,0x18,0xe0,0xf7,0x18,0x36,0x9d,0xeb,0x67,0x90,0xff,
+ 0xae,0xc3,0xf0,0xf3,0xeb,0x47,0x86,0x5f,0xef,0x9e,0xe0,0x35,0x18,0x20,
+ 0x80,0x18,0x09,0xa6,0x8a,0xe3,0xc7,0xff,0x33,0x3c,0x7d,0xca,0xf0,0xf7,
+ 0xc2,0x05,0x86,0x6b,0xaf,0x5f,0x33,0xbc,0xfb,0xfe,0x9d,0xc1,0x7e,0xd1,
+ 0x22,0x9c,0x91,0x06,0x03,0x00,0x01,0x84,0x37,0x28,0x18,0xf6,0xee,0x05,
+ 0x1b,0xfa,0xe1,0xfd,0x7b,0x86,0x73,0xec,0xec,0x0c,0xd7,0xd8,0xd8,0x18,
+ 0xee,0x71,0x72,0x32,0x6c,0x2c,0x2a,0x22,0x98,0x46,0x01,0x02,0x88,0xa0,
+ 0x8b,0x83,0x82,0x82,0xc0,0x0a,0x1a,0x42,0x43,0x19,0x1a,0x56,0xaf,0x46,
+ 0x91,0x5b,0xb7,0x6e,0x1d,0x4e,0x97,0x03,0x04,0x10,0x03,0xc8,0x60,0x62,
+ 0xf0,0x8f,0x27,0x4f,0xfe,0x07,0x06,0x06,0xfe,0x27,0x56,0x3d,0x40,0x00,
+ 0x41,0x5c,0xfc,0xef,0x1f,0x88,0x07,0x4c,0x9f,0xbf,0x18,0xfe,0xfe,0xfd,
+ 0xcb,0xc0,0xcc,0xcc,0x0c,0xc7,0x0c,0x8c,0x8c,0x0c,0xaf,0x5e,0xbe,0x64,
+ 0x10,0x10,0x10,0x60,0x38,0x7e,0xe2,0x04,0x83,0xbc,0x9c,0x1c,0x83,0xa0,
+ 0xa0,0x20,0x03,0x2b,0x2b,0x24,0x5d,0x33,0x02,0xe5,0x41,0x7a,0xbe,0x7d,
+ 0xfb,0xc6,0xf0,0xf9,0xf3,0x67,0x06,0x65,0x35,0x35,0xb0,0x2f,0x00,0x02,
+ 0x08,0x1e,0x14,0x30,0x2f,0xe3,0x02,0x4b,0x17,0x2e,0x64,0x88,0x8e,0x8f,
+ 0x27,0x14,0xb4,0xf0,0x20,0x02,0x08,0x20,0xa2,0x83,0xe2,0xff,0xd3,0xa7,
+ 0x24,0x05,0x05,0x40,0x00,0xe1,0x8f,0xbc,0x6b,0xd7,0xfe,0x33,0x00,0x53,
+ 0x01,0x03,0x28,0x33,0xbc,0x7a,0xc5,0xf0,0xfe,0xd1,0x23,0x86,0x87,0x40,
+ 0xfa,0xeb,0xcf,0x9f,0x0c,0xd6,0x65,0x65,0x78,0x93,0x1c,0x40,0x00,0x11,
+ 0x4e,0xc7,0x53,0xa6,0xfc,0x67,0xf8,0xfa,0x95,0xe1,0xe9,0x9b,0x37,0x0c,
+ 0xe7,0x9f,0x3f,0x67,0x78,0xf4,0xf1,0x23,0xc3,0x1e,0x68,0xf8,0xe2,0x4b,
+ 0x15,0x00,0x01,0x84,0x37,0xe7,0x6d,0xbd,0xf0,0xf2,0xff,0x5e,0x01,0x5b,
+ 0x86,0xc4,0xad,0x15,0x0c,0xd7,0x3f,0x7d,0x02,0xe3,0x89,0x3f,0xb9,0x19,
+ 0xde,0x7f,0xfe,0xce,0xc0,0x20,0xae,0x83,0xd7,0x3d,0x00,0x01,0x84,0x37,
+ 0x83,0xec,0xb9,0xfc,0x82,0xa1,0x7f,0xed,0x29,0x06,0xbd,0x9f,0x26,0x0c,
+ 0xdf,0x80,0x2e,0x6d,0x78,0xf1,0x9b,0xe1,0xfd,0x87,0x4f,0x0c,0x0c,0x1a,
+ 0xbe,0x0c,0x0c,0x7f,0x7f,0xe1,0x35,0x18,0x20,0x80,0xf0,0x1a,0x7c,0xf1,
+ 0x3e,0xb0,0x10,0xfa,0xfe,0x16,0x5c,0x08,0x27,0xca,0xc4,0x31,0x30,0x30,
+ 0x31,0x33,0x30,0x5a,0x64,0x32,0x30,0x70,0x8b,0x30,0x30,0xb0,0x70,0xe0,
+ 0x35,0x18,0x20,0x80,0xf0,0x06,0xc5,0xfe,0x8b,0x0f,0x80,0x2e,0x03,0x46,
+ 0x1c,0x97,0x10,0x83,0xbc,0xa4,0x30,0x03,0x83,0x74,0x29,0x83,0x10,0x0f,
+ 0x07,0xc3,0xf9,0x7b,0xaf,0x81,0x96,0xfd,0xc3,0x6b,0x30,0x40,0x00,0xe1,
+ 0x35,0x98,0xe1,0xc1,0x11,0x60,0x8a,0x00,0x16,0xe8,0xc0,0x42,0xfe,0xe1,
+ 0x2b,0x88,0x0b,0x1f,0x82,0x88,0xdf,0x5f,0x19,0x18,0xbe,0xbe,0xc1,0xab,
+ 0x15,0x20,0x80,0x08,0xa7,0x0a,0x32,0x01,0x40,0x00,0xe1,0x2f,0xdd,0x28,
+ 0x00,0x00,0x01,0x06,0x00,0x52,0xb4,0x82,0xa9,0xfa,0xab,0x43,0xd9,0x00,
+ 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_editpaste_png_len = 902;
+static const unsigned char small_editpaste_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x03,0x11,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xfc,0xff,0xff,0x3f,0x03,0x2d,0x00,0x40,
+ 0x00,0xb1,0x10,0x52,0xc0,0xc8,0xc8,0x08,0xb7,0x19,0xe8,0x08,0x46,0x62,
+ 0x0d,0x06,0x08,0x20,0xbc,0x06,0x83,0x0c,0xfd,0xfa,0xf5,0x2b,0xc3,0xe3,
+ 0xc7,0x8f,0x19,0x2e,0x5f,0xbe,0x0c,0xe6,0x13,0x6b,0x38,0x40,0x00,0x81,
+ 0x0d,0xae,0xab,0xab,0xfb,0x7f,0xfb,0xf6,0x6d,0x86,0xf7,0xef,0xdf,0xc3,
+ 0x25,0x76,0xee,0xdc,0xc9,0xf0,0xf7,0xef,0x5f,0xb0,0x81,0xd7,0xae,0x5d,
+ 0x63,0xe0,0xe4,0xe4,0x64,0x98,0x31,0x63,0x06,0xd8,0x70,0x77,0x77,0x77,
+ 0xb8,0xba,0x37,0x6f,0xde,0x30,0x9c,0x3d,0x7b,0x16,0xc3,0x37,0x00,0x01,
+ 0xc4,0x02,0x32,0xd4,0xca,0x4a,0x9e,0x41,0x4e,0xee,0x27,0xc3,0xe7,0xcf,
+ 0xbc,0x20,0x0f,0x33,0x14,0x15,0xcd,0x01,0x29,0x64,0xb8,0x72,0xe5,0x0a,
+ 0xc3,0xe2,0xc5,0x8b,0x19,0x7a,0x7b,0x7b,0x19,0x96,0x2c,0x59,0xc2,0xa0,
+ 0xa8,0xa8,0xc8,0xd0,0xd7,0xd7,0x07,0x94,0x2f,0x02,0xd2,0x29,0x60,0x03,
+ 0xbe,0x7f,0x17,0x64,0x50,0x51,0xf9,0x8e,0xe1,0x1b,0x80,0x00,0x62,0x02,
+ 0xb9,0xf4,0xc9,0x93,0x5b,0x0c,0x37,0x6e,0x9c,0x64,0xb8,0x7b,0xf7,0x3c,
+ 0xd8,0xd0,0x57,0xaf,0x5e,0x31,0xdc,0xb9,0x73,0x87,0x61,0xdb,0xb6,0x6d,
+ 0x60,0x43,0x41,0x20,0x26,0x26,0x06,0x6c,0xd9,0xf7,0xef,0xdf,0x19,0xd2,
+ 0xd3,0xd3,0xc1,0xea,0xee,0xde,0xbd,0xc0,0xf0,0xec,0xd9,0x1d,0x86,0x4f,
+ 0x9f,0x7e,0x62,0x04,0x05,0x40,0x00,0xb1,0x80,0xbc,0xff,0xf9,0x33,0x0f,
+ 0xc3,0x8f,0x1f,0x5f,0xe1,0x82,0x6b,0xd7,0xae,0x05,0x7b,0xff,0xc5,0x8b,
+ 0x17,0x0c,0xc9,0xc9,0xc9,0x0c,0x6a,0x6a,0x6a,0x0c,0xec,0xec,0xec,0x0c,
+ 0x7b,0xf7,0xee,0x65,0x78,0xf0,0xe0,0x01,0x03,0x7a,0x4a,0xc2,0x96,0xb0,
+ 0x00,0x02,0x08,0x23,0xf2,0xb2,0xb3,0x4d,0x18,0x32,0x33,0x33,0xf1,0xc5,
+ 0x0b,0x5c,0x1d,0x3e,0x00,0x10,0x40,0x58,0x53,0x05,0x21,0x4d,0xc4,0x00,
+ 0x80,0x00,0x62,0xa2,0xd8,0x04,0x1c,0x00,0x20,0x80,0x08,0x66,0x10,0xb0,
+ 0x22,0x96,0x2c,0x86,0xdf,0xbf,0xff,0x32,0xfc,0xfc,0xf9,0x1b,0x18,0x79,
+ 0xbf,0x80,0xf4,0x1f,0x20,0x0d,0x4a,0x45,0x3f,0x18,0xde,0xbd,0xfb,0xc2,
+ 0xf0,0xfa,0xf5,0x47,0x06,0x61,0xe1,0x0f,0x28,0x7a,0x00,0x02,0x88,0xa0,
+ 0xc1,0x20,0x43,0x27,0x4c,0x48,0xc4,0xab,0x46,0x58,0x38,0x1e,0x18,0x81,
+ 0x6e,0x28,0x62,0x00,0x01,0x44,0xd0,0x60,0x90,0x4b,0x41,0x20,0x31,0x31,
+ 0x11,0x98,0xac,0x3e,0x31,0x80,0x72,0xe2,0xb7,0x6f,0xdf,0x80,0xa9,0xe8,
+ 0x07,0x83,0x82,0xc2,0x1a,0x86,0x55,0xab,0xe4,0x80,0x86,0xfe,0x63,0xb8,
+ 0x7a,0xb5,0x97,0x41,0x40,0x20,0xf8,0xff,0x87,0x0f,0x6b,0xc1,0x69,0x19,
+ 0x20,0x80,0x08,0x1a,0x0c,0xf2,0x3e,0x08,0xcc,0x9f,0x3f,0x1f,0xab,0x3c,
+ 0x24,0xe9,0xfd,0x67,0xf8,0xf5,0xeb,0x17,0xc3,0xe1,0xc3,0x0d,0x0c,0xfc,
+ 0xfc,0x3e,0xff,0x3f,0x7e,0xdc,0xc2,0x08,0x10,0x40,0x04,0x0d,0x06,0x85,
+ 0x29,0x08,0x80,0xb2,0xf1,0xc7,0x8f,0x1f,0x19,0xbe,0x7c,0xf9,0x02,0x76,
+ 0xed,0xcf,0x9f,0x3f,0x19,0xb4,0xb4,0x0e,0x33,0x6c,0xdd,0x2a,0x03,0x36,
+ 0xd8,0xc0,0xa0,0x84,0xe1,0xdf,0xbf,0x9f,0x40,0x8b,0xfe,0x32,0xf0,0xf1,
+ 0xb9,0xfd,0x07,0x08,0x20,0x82,0x06,0x7f,0xfd,0x0a,0xc9,0x55,0xa0,0xb2,
+ 0x03,0x19,0xfc,0xfb,0xf7,0x0f,0xec,0xda,0xdf,0xbf,0x7f,0x33,0xdc,0xba,
+ 0x35,0x91,0xe1,0xed,0xdb,0xb7,0x60,0xfc,0xee,0xdd,0x3b,0x86,0xc8,0xc8,
+ 0x5e,0x06,0x80,0x00,0x62,0x01,0x71,0x40,0xf9,0x1d,0x17,0x78,0xff,0xfe,
+ 0x0b,0x98,0x56,0x56,0x56,0x06,0x87,0x31,0x66,0xae,0xfb,0x0f,0xc7,0x8a,
+ 0x8a,0x13,0x19,0x4a,0x4b,0x59,0x81,0xec,0xdf,0x0c,0x00,0x01,0xc4,0x72,
+ 0xe6,0xcc,0x19,0xa0,0xa6,0x6f,0xe0,0xfc,0x8e,0x2d,0x6b,0xbe,0x7c,0xf9,
+ 0x11,0x4c,0x83,0x4a,0x39,0x50,0xc4,0x81,0xca,0x8a,0x3f,0x7f,0xfe,0x80,
+ 0x4b,0x3e,0x10,0x00,0xb1,0x41,0xe2,0xa0,0xa2,0x01,0xe4,0xc8,0x0f,0x1f,
+ 0x3e,0x80,0x0d,0x06,0x08,0x20,0x16,0x50,0x89,0x84,0x5c,0x98,0xa3,0x03,
+ 0x21,0xa1,0x8f,0x60,0xc5,0x20,0x17,0x83,0xbc,0x0f,0x73,0x25,0x36,0x57,
+ 0x4b,0x49,0x95,0x31,0xa4,0xa4,0x70,0x00,0x45,0xfe,0x32,0x00,0x04,0x10,
+ 0x0b,0x54,0x02,0x67,0xe1,0x2d,0x24,0x14,0xf5,0x1f,0x54,0xe6,0x6e,0xdf,
+ 0xbe,0x1d,0x1c,0x14,0xa0,0xa4,0x06,0x4a,0x01,0xb0,0x30,0x06,0xb9,0x1c,
+ 0x14,0x99,0x20,0x71,0x10,0x06,0x45,0x2a,0x08,0x00,0x04,0x10,0x23,0x31,
+ 0x75,0x1e,0x3f,0xbf,0x1f,0x50,0x19,0x28,0xa8,0x7e,0x01,0xf1,0x1f,0xa0,
+ 0xc8,0x3f,0x28,0x86,0x95,0x6c,0x10,0x3e,0x28,0x3d,0x03,0x7d,0x0f,0x0c,
+ 0x9a,0x33,0x8c,0x00,0x01,0x44,0x94,0xc1,0xe4,0x00,0x80,0x00,0x03,0x00,
+ 0xd3,0x6a,0xb5,0xa8,0xf4,0x4a,0x8f,0x34,0x00,0x00,0x00,0x00,0x49,0x45,
+ 0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_editslots_png_len = 690;
+static const unsigned char small_editslots_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x02,0x44,0x49,0x44,0x41,0x54,0x48,0xc7,0xb5,0xd4,
+ 0xe1,0x6b,0x12,0x71,0x1c,0xc7,0x71,0xb7,0x56,0x2b,0x28,0x62,0xc1,0x1a,
+ 0x8b,0x82,0x06,0x91,0x50,0x8c,0x36,0x11,0x7a,0x90,0xe0,0xf0,0xb4,0x61,
+ 0x94,0x14,0x34,0x84,0xb2,0x82,0xf5,0x60,0x7b,0x12,0xc1,0xe8,0xc9,0x08,
+ 0x7a,0xb0,0x90,0x8a,0x1e,0xb4,0x43,0xb0,0xeb,0x88,0x95,0xec,0x81,0x91,
+ 0x73,0x26,0x1c,0xa3,0x1e,0x04,0xda,0xb3,0x34,0x85,0xb1,0x4b,0xe6,0xa8,
+ 0x9d,0x50,0x0c,0xec,0x8f,0xd8,0xa7,0xef,0xd7,0x7e,0x0e,0xb7,0x5d,0x91,
+ 0x79,0x3d,0x78,0x3d,0xb8,0xfb,0x71,0x6f,0xbf,0xf7,0xbb,0xf3,0x6c,0x00,
+ 0x6c,0xff,0xc3,0xe6,0x03,0x9b,0x2d,0x48,0x32,0x42,0xd0,0x92,0x30,0x87,
+ 0x02,0x57,0x06,0x11,0x4d,0x5f,0xc7,0x93,0xe4,0x05,0x48,0x23,0x87,0xd1,
+ 0x4a,0xbc,0x31,0x9c,0xe1,0xa8,0xb6,0x32,0x8a,0xb8,0xee,0xc5,0x84,0x7c,
+ 0x8a,0x4f,0x66,0x2c,0x09,0xf3,0xa4,0x1c,0x8d,0xbe,0x77,0x61,0xfc,0xfe,
+ 0x49,0xcb,0xc2,0x41,0xbe,0x7d,0x9e,0x94,0xa3,0x4e,0xa9,0xdb,0xb2,0xad,
+ 0x78,0x4a,0xb0,0x85,0x4a,0x76,0x92,0xf6,0x7f,0x0a,0x73,0xd4,0xe7,0x1b,
+ 0x46,0xb9,0x6c,0xa0,0x54,0xfa,0x5a,0xb3,0xb4,0xb4,0x02,0x8f,0xc7,0xcb,
+ 0x8b,0x2f,0xc8,0xb0,0xf8,0x81,0xb6,0x66,0xc3,0x28,0x14,0x4a,0x98,0x9a,
+ 0x7a,0x08,0xa7,0xf3,0x34,0x5c,0x2e,0x37,0xa6,0xa7,0xa3,0xc8,0xe7,0x75,
+ 0x84,0xc3,0x8f,0x20,0x49,0x3e,0x98,0xdc,0x0d,0xfe,0x74,0x87,0xf5,0xb0,
+ 0xc2,0x0b,0xe3,0x7d,0x7d,0xc8,0xb9,0xdd,0xc8,0xd9,0xed,0x18,0xa3,0x63,
+ 0x8e,0x17,0x0a,0x9f,0xb1,0xb8,0x58,0x86,0xae,0x7f,0xd9,0xb8,0x9b,0x46,
+ 0xab,0xab,0xdf,0x51,0xad,0xfe,0xc0,0xda,0x5a,0x15,0xa1,0x50,0x88,0x63,
+ 0x37,0xc9,0xee,0x7a,0x78,0x07,0xf9,0xc0,0x51,0x38,0x1c,0x58,0xa7,0xe8,
+ 0x3c,0xe1,0xad,0xf8,0x35,0x75,0x78,0x13,0x45,0x51,0xa0,0x69,0x1a,0x8a,
+ 0xc5,0x22,0x2a,0x95,0x4a,0x8d,0x61,0x18,0x50,0x55,0x95,0x63,0x39,0x72,
+ 0xa0,0x1e,0x6e,0x23,0x59,0x9e,0x94,0xa3,0xdf,0xc8,0x0c,0xf1,0x7a,0xcf,
+ 0x6e,0x0b,0x9b,0x45,0x99,0xae,0xeb,0x90,0x65,0x99,0x63,0x05,0xd2,0x5b,
+ 0x0f,0x47,0x79,0x2b,0xc6,0xc4,0xa4,0x1c,0xbd,0x48,0x22,0x11,0x05,0xe9,
+ 0xf4,0x3b,0xc4,0xe3,0x29,0xcc,0xce,0x26,0xc8,0xeb,0x6d,0x12,0x89,0x34,
+ 0x16,0x16,0xde,0x22,0x99,0x4c,0xc1,0xef,0xf7,0x73,0xec,0x6e,0x63,0x18,
+ 0xcb,0xcb,0x06,0x4d,0x33,0x53,0x9b,0x92,0xc9,0xb2,0x82,0x58,0xec,0x15,
+ 0x02,0x81,0x4b,0xb4,0x3b,0xce,0xbf,0x7d,0x78,0x29,0x62,0x6f,0xdc,0x0a,
+ 0x65,0x68,0x48,0xc2,0xdc,0x9c,0xb6,0x31,0x89,0xaa,0xc6,0x30,0x30,0xe0,
+ 0xe0,0x45,0x8d,0xdc,0x22,0x0e,0x72,0x42,0x5c,0x78,0xdc,0xc4,0x31,0x72,
+ 0xa4,0x16,0x6d,0x78,0x78,0x1d,0xe4,0xb9,0xc9,0x04,0x6f,0xc8,0x20,0x39,
+ 0x4a,0xba,0xc9,0x7e,0xb2,0xef,0x37,0xf6,0x92,0x3d,0x5b,0x5f,0xb7,0x76,
+ 0x72,0xed,0xdc,0x48,0x3f,0x1e,0xbc,0xbc,0x8c,0x7b,0xcf,0xbc,0x38,0x73,
+ 0xbe,0x97,0x17,0xee,0x90,0x43,0xe2,0xc2,0x8e,0xa6,0xff,0x20,0x22,0x9e,
+ 0x8d,0xcc,0x87,0x90,0xd2,0x6f,0x20,0xf6,0xc9,0x83,0xdb,0x8f,0xfb,0xf9,
+ 0x64,0x9e,0x1c,0x24,0x9d,0xad,0x7c,0x2b,0xb2,0x26,0x5f,0x37,0x7e,0x75,
+ 0x7a,0xc8,0xae,0x56,0xc2,0x57,0x4d,0xbe,0x6e,0x93,0x56,0x84,0x79,0xd3,
+ 0x47,0xc9,0x47,0x31,0xe9,0xa4,0x78,0xd2,0x5d,0xbc,0xd6,0x4a,0x98,0x1f,
+ 0x60,0xa7,0x08,0xf5,0x08,0x5d,0xe2,0x5c,0xd3,0x9f,0xcd,0x9f,0x09,0x9b,
+ 0x14,0x3c,0x6f,0xbc,0x09,0x28,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,
+ 0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_editvlayout_png_len = 289;
+static const unsigned char small_editvlayout_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x00,0xb3,0x49,0x44,0x41,0x54,0x48,0xc7,0x63,0xf8,
+ 0xff,0xff,0x3f,0x03,0x0c,0x03,0x01,0x23,0x10,0xb3,0x00,0x31,0x07,0x10,
+ 0x73,0x03,0x31,0x2f,0x11,0x98,0x1b,0xaa,0x1e,0xa4,0x8f,0x11,0x6e,0x16,
+ 0x9a,0xc1,0x2c,0xad,0xad,0xad,0xff,0xf3,0xf3,0xf3,0xff,0x27,0x26,0x26,
+ 0x12,0xc4,0x8e,0x8e,0x8e,0x20,0x4d,0x20,0x2c,0x09,0xb5,0x84,0x05,0x97,
+ 0xc1,0x1c,0x20,0x43,0x8f,0x3f,0x6e,0xfb,0xbf,0xef,0x7e,0x31,0x41,0xbc,
+ 0xf8,0xac,0x13,0xcc,0x60,0x63,0xa8,0xe1,0x1c,0xb8,0x0c,0xe6,0x06,0xb9,
+ 0x02,0xa4,0xa1,0xb0,0x5f,0x8f,0x20,0x4e,0xaa,0x56,0x87,0x19,0xec,0x02,
+ 0xc4,0x4a,0x20,0xfd,0x38,0x0d,0x86,0x2a,0x24,0x15,0x13,0x34,0x98,0x03,
+ 0xea,0x25,0x63,0xa8,0x62,0x5f,0x22,0xb0,0x0b,0x31,0x41,0xc1,0x02,0x8d,
+ 0x04,0x49,0xa8,0x0b,0xd4,0x88,0xc0,0x4a,0xc4,0x44,0x1e,0x33,0xd4,0xd5,
+ 0x82,0x40,0x2c,0x0e,0xd5,0x40,0x08,0x8b,0x43,0xd5,0x83,0xf4,0x31,0x8f,
+ 0x26,0xb7,0xd1,0xe4,0x36,0x9a,0xdc,0x46,0x93,0xdb,0xa0,0x4c,0x6e,0x54,
+ 0xab,0x4c,0x01,0x44,0xb6,0x99,0x20,0xa4,0x19,0xbb,0xc3,0x00,0x00,0x00,
+ 0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_editvlayoutsplit_png_len = 355;
+static const unsigned char small_editvlayoutsplit_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x00,0xf5,0x49,0x44,0x41,0x54,0x48,0xc7,0x63,0xf8,
+ 0xff,0xff,0x3f,0x03,0x2d,0x30,0xc3,0xa8,0xc1,0x64,0x19,0xcc,0x00,0x56,
+ 0x4e,0x82,0xc1,0x40,0xc0,0x08,0xc4,0x2c,0x40,0xcc,0x01,0xc4,0xdc,0x50,
+ 0xcc,0x01,0x15,0x63,0xc4,0x63,0x11,0x6e,0x7d,0x50,0x05,0x2c,0xa1,0xa1,
+ 0xa1,0xff,0x7d,0x7c,0x7c,0xfe,0x9b,0x98,0x98,0x80,0x04,0x40,0x58,0x12,
+ 0x88,0x79,0x41,0x72,0xb8,0x5c,0x8c,0x57,0x1f,0x54,0x01,0x07,0x48,0x72,
+ 0xdb,0xed,0xf4,0xff,0xcb,0x2f,0xbb,0xc0,0x14,0x18,0x43,0x15,0x71,0xe0,
+ 0x71,0x31,0x6e,0x7d,0x50,0x05,0xdc,0x5e,0x5e,0x5e,0xff,0x37,0xdd,0x8c,
+ 0xfb,0xdf,0xba,0xd2,0x0c,0xa6,0xc0,0x05,0x88,0x95,0x40,0x72,0x78,0x5c,
+ 0x8c,0x5b,0x1f,0x54,0x01,0x2f,0x16,0x05,0xbe,0x40,0xac,0x06,0x0d,0x8e,
+ 0x10,0x34,0x03,0x43,0x08,0xea,0x23,0xc2,0xe0,0x58,0x98,0x4b,0x91,0x69,
+ 0x90,0xe1,0x94,0x18,0x9c,0x0b,0x65,0xa3,0x07,0x01,0x4c,0x4d,0x2c,0x39,
+ 0x06,0x77,0x20,0x19,0x80,0x13,0x9b,0x99,0x99,0x0d,0x1e,0x17,0xd3,0x34,
+ 0x8c,0x69,0x9a,0x2a,0x78,0xf1,0xa4,0x63,0xc2,0x06,0x83,0xb2,0x24,0x28,
+ 0xf7,0x54,0xce,0x32,0xc4,0x69,0x30,0x96,0x9c,0x87,0x5b,0x1f,0x2c,0x07,
+ 0x61,0x89,0x71,0xa2,0x72,0x1e,0x4e,0x7d,0xb0,0x3c,0x0f,0x2d,0x17,0x8c,
+ 0xa1,0x12,0x2e,0xc4,0x96,0x15,0x38,0xf5,0xc1,0x4a,0x29,0x68,0x24,0x49,
+ 0x42,0x5d,0xa9,0x44,0x6c,0xe9,0x86,0x53,0x1f,0xad,0xca,0x63,0x00,0x42,
+ 0x86,0x4b,0xcc,0xc3,0x5b,0xa9,0xcc,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,
+ 0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_exec_png_len = 1408;
+static const unsigned char small_exec_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x06,0x62,0x4b,0x47,0x44,0x00,
+ 0xff,0x00,0xff,0x00,0xff,0xa0,0xbd,0xa7,0x93,0x00,0x00,0x00,0x09,0x70,
+ 0x48,0x59,0x73,0x00,0x00,0x0b,0x12,0x00,0x00,0x0b,0x12,0x01,0xd2,0xdd,
+ 0x7e,0xfc,0x00,0x00,0x00,0x07,0x74,0x49,0x4d,0x45,0x07,0xd3,0x09,0x02,
+ 0x16,0x03,0x37,0x74,0x5c,0x47,0xd5,0x00,0x00,0x05,0x0d,0x49,0x44,0x41,
+ 0x54,0x78,0xda,0x9d,0x95,0x59,0x6c,0x54,0x55,0x1c,0xc6,0xbf,0x73,0xce,
+ 0xbd,0xb7,0x77,0xee,0x74,0x66,0x4a,0xa7,0x2b,0xa5,0x54,0x28,0x14,0x03,
+ 0x08,0xc8,0x22,0x48,0xa2,0x46,0xf0,0xc1,0x17,0x37,0x4c,0xd0,0x44,0x45,
+ 0x62,0x22,0x98,0x20,0x89,0x89,0xc6,0xa8,0x51,0x13,0xe3,0x46,0x34,0x51,
+ 0x03,0xf2,0x82,0x21,0xd1,0x1a,0x05,0x65,0x51,0x43,0x0c,0x82,0x2c,0x4d,
+ 0x8d,0x95,0xb0,0xb7,0x05,0x0a,0x03,0x94,0xa5,0x9d,0xae,0xd3,0xce,0xd6,
+ 0x3b,0x73,0x97,0xb3,0xf8,0xd0,0x25,0x48,0x25,0x18,0xbf,0xa7,0xf3,0x70,
+ 0xce,0xef,0x9c,0xff,0xf6,0x1d,0x82,0x9b,0xf4,0xec,0xde,0x9c,0xe5,0x53,
+ 0xf2,0x48,0x52,0x27,0x0f,0xea,0xae,0x18,0xd2,0xfa,0x07,0x36,0x41,0x0b,
+ 0xe7,0x20,0xd5,0x32,0xee,0xf3,0x36,0xa9,0xe8,0xc5,0xbd,0x2f,0x44,0xf3,
+ 0xb8,0x8d,0xc8,0xe8,0x62,0xf5,0x01,0xc7,0x04,0xa0,0xfb,0x9e,0x8c,0xc4,
+ 0x39,0xdb,0xd5,0x36,0x59,0xbb,0x27,0xe4,0x0b,0x7f,0xda,0xb5,0xa1,0x7d,
+ 0x86,0x43,0x3a,0x3b,0xca,0x8c,0xa7,0x95,0x2f,0xba,0x8b,0xba,0xb2,0x5b,
+ 0x90,0x4e,0x7d,0xd9,0xf0,0xda,0x2c,0x7e,0x5b,0xf0,0xea,0x03,0x8e,0x69,
+ 0x33,0xf2,0x99,0x4d,0xf0,0xa8,0xee,0x8a,0x7d,0xd7,0x32,0xec,0xb1,0xd6,
+ 0x3a,0x23,0xaa,0xc2,0x80,0x99,0x13,0x2a,0x9c,0xe1,0x32,0x5b,0xc8,0x18,
+ 0x18,0x41,0x6d,0xcb,0xc0,0x15,0xa3,0xa5,0x6d,0x75,0x20,0x5a,0x77,0x51,
+ 0x08,0xa5,0x35,0xbd,0x5e,0xd5,0x71,0x4b,0xf0,0xf3,0xfb,0x9d,0xa5,0x2d,
+ 0x26,0xfb,0xfd,0x7c,0x19,0xb3,0x8a,0x73,0x12,0x39,0x9d,0x20,0x43,0x80,
+ 0x70,0x5b,0x1a,0x56,0xc2,0x81,0xe6,0x0b,0x10,0x53,0x83,0x28,0xb3,0x80,
+ 0x00,0x43,0x38,0xe1,0x5e,0x31,0x6c,0x79,0x19,0x2e,0x17,0xac,0x6f,0xf0,
+ 0x8d,0xe3,0xef,0xcf,0x3a,0x7d,0x33,0x58,0x03,0x00,0x21,0xe4,0xfc,0xf8,
+ 0x71,0x5d,0xcf,0xcf,0x20,0x88,0xd7,0x30,0x68,0x36,0x47,0xe5,0x1f,0x3d,
+ 0x88,0x24,0x87,0xc0,0x14,0x1f,0xbe,0x9d,0x00,0xb4,0x4b,0x83,0x16,0xb1,
+ 0x90,0x9b,0x14,0x99,0x72,0xb9,0x36,0x3c,0x85,0xda,0xbe,0x9c,0x3c,0x98,
+ 0xe2,0xd3,0x57,0x7d,0xfb,0xe2,0xc5,0xfa,0xe7,0xba,0xc7,0x81,0xa5,0x00,
+ 0x8f,0x08,0x89,0xfe,0x3e,0x0a,0x55,0x0e,0x84,0x63,0x59,0x94,0x70,0x57,
+ 0x6a,0x11,0xde,0x2d,0x3d,0xb7,0x8f,0x6a,0x7a,0x98,0x16,0x98,0xd5,0x84,
+ 0x10,0x03,0x70,0x11,0x1d,0xc8,0x20,0x48,0x09,0xae,0x16,0x1a,0xd4,0x77,
+ 0xf2,0x7a,0x2a,0xd6,0x10,0x18,0x97,0x8a,0x95,0x7b,0xec,0x87,0x1d,0x90,
+ 0x8f,0xd3,0x1e,0xe6,0x36,0x87,0x0a,0x48,0x26,0x08,0x54,0x9e,0x19,0x10,
+ 0x25,0xf1,0x73,0xdf,0x25,0x8e,0xed,0xd8,0x06,0x29,0x13,0xc6,0x84,0x4a,
+ 0x12,0x28,0xab,0xae,0x29,0x9a,0xbd,0x78,0x9d,0x1e,0x0c,0x2d,0x21,0x94,
+ 0x9a,0x3a,0xd3,0x90,0xb1,0x0a,0x11,0xef,0xb2,0xed,0x82,0x0b,0xd7,0xdf,
+ 0xd4,0x44,0x64,0xa7,0x92,0xaa,0x3f,0xb6,0xb1,0x8e,0x03,0x80,0x96,0x16,
+ 0x64,0xd9,0xa9,0xa0,0x31,0xaf,0x2f,0xc2,0x00,0x00,0xd4,0x53,0x50,0x42,
+ 0x24,0x7a,0x1b,0xf7,0x6c,0xeb,0x69,0xd8,0x7c,0x18,0x80,0x3b,0xf2,0x88,
+ 0x63,0x73,0xdf,0xae,0x6f,0x98,0x30,0x67,0xc9,0x5a,0x33,0x5a,0xfc,0x16,
+ 0xa1,0xd4,0x2a,0x13,0x0a,0x03,0xd5,0x91,0xe0,0xa0,0x3e,0x6d,0xa3,0xd5,
+ 0x65,0xbf,0xca,0xda,0x2f,0xaf,0x02,0xd0,0x38,0xcc,0xc9,0xa2,0xca,0x4b,
+ 0x13,0x20,0x0f,0xc0,0x01,0x24,0x27,0x10,0x81,0x40,0x71,0xb0,0x76,0x51,
+ 0xe9,0x0d,0x50,0x00,0x40,0xf3,0x07,0xab,0x12,0x5e,0xaa,0xe3,0x73,0x2d,
+ 0x44,0x37,0x9b,0xa5,0x01,0x59,0x50,0xa2,0xa1,0x38,0xc0,0x90,0xae,0x8e,
+ 0x60,0xb0,0xa6,0xa8,0xc6,0x0b,0x58,0x2f,0x8d,0xa6,0x97,0x0a,0x57,0x79,
+ 0xea,0xbc,0x02,0x8e,0x00,0x88,0x01,0xc8,0x01,0x99,0x90,0xa5,0x07,0x66,
+ 0xde,0xbb,0x7e,0xde,0xfa,0x5d,0x55,0x37,0xe7,0xae,0x69,0xcd,0xf2,0x9c,
+ 0x59,0x1a,0xd8,0x64,0x14,0xe9,0x7f,0xea,0xc5,0x06,0x4c,0x9d,0x82,0xe5,
+ 0x14,0x68,0x87,0xc7,0x65,0x2a,0xc3,0x01,0x4c,0x00,0x00,0xaa,0x33,0xd1,
+ 0x59,0x51,0xe8,0xa3,0x90,0x09,0x68,0x49,0x05,0x0c,0x01,0x0e,0xd5,0x91,
+ 0x28,0x29,0x99,0x17,0x9a,0x3a,0xff,0x9d,0xfb,0x37,0x34,0x47,0xc7,0xb5,
+ 0x92,0x69,0xc6,0x09,0xa5,0x0d,0x94,0x10,0x4e,0x04,0x01,0xc9,0x4b,0x04,
+ 0x7a,0xba,0x62,0xce,0xd9,0x1d,0x3f,0x02,0xc8,0x02,0x00,0x35,0x44,0xa6,
+ 0xbe,0xc2,0x3e,0xb5,0x6e,0x81,0x79,0xe1,0x9b,0x9a,0x22,0xdb,0xa6,0x79,
+ 0x05,0xe5,0x02,0xbd,0x86,0xa5,0xb7,0x97,0x54,0xae,0x95,0xa5,0x13,0xeb,
+ 0x57,0x6c,0x1f,0x58,0xb0,0xf2,0xa7,0xac,0x39,0x0a,0xde,0x5e,0x49,0xa4,
+ 0xc6,0x49,0x07,0x06,0xe1,0x5f,0x4d,0x02,0x1e,0xa7,0xc8,0x97,0x97,0xcf,
+ 0xd4,0x17,0xad,0x5b,0x1b,0x7d,0xfc,0x60,0xd1,0x8d,0x23,0x5d,0xb0,0xe4,
+ 0xdd,0xa6,0xbb,0x73,0xe5,0x33,0x76,0x9e,0x0b,0x16,0x55,0x71,0x42,0x01,
+ 0x02,0x10,0x05,0x14,0x13,0xae,0xea,0x0c,0xbf,0xbd,0x3a,0xa8,0x9a,0x82,
+ 0x01,0xd6,0xa8,0x15,0xb0,0x84,0x6e,0xd0,0x49,0x43,0xa0,0x4f,0x36,0xf7,
+ 0xe3,0xbe,0xb3,0x49,0x30,0xae,0x00,0x22,0x14,0x02,0xed,0x7d,0xae,0x71,
+ 0xb4,0x71,0x4d,0x6a,0xdf,0xca,0xef,0xb5,0x11,0xb0,0xab,0x2a,0xa7,0x2f,
+ 0xec,0xb1,0xac,0x89,0x9c,0x53,0x40,0x00,0x60,0x80,0xa2,0xc0,0x00,0xd7,
+ 0xc8,0x51,0x57,0xab,0x6d,0xb1,0xd5,0xd4,0xa8,0xa9,0x9e,0xb2,0x74,0x22,
+ 0x73,0x82,0xb0,0x41,0x07,0x9a,0xcd,0x41,0x14,0x00,0x04,0x01,0xa5,0x03,
+ 0x70,0x7c,0xe9,0xf5,0xb7,0xa6,0x00,0xb0,0x51,0x30,0x7c,0x4a,0x1e,0xca,
+ 0x95,0x32,0x02,0x67,0x24,0x4b,0xd1,0x91,0xfa,0xa6,0x00,0x91,0x04,0x6c,
+ 0x45,0x88,0xed,0x12,0x63,0x9c,0x29,0x18,0xc3,0x7b,0xf5,0x78,0x16,0xac,
+ 0xab,0xf3,0xb8,0x13,0x3f,0x78,0x0d,0x80,0x18,0x03,0xeb,0x8e,0xff,0x73,
+ 0x34,0x9b,0x5f,0xe6,0x55,0xd3,0x90,0x45,0x1c,0xdf,0x48,0x7b,0x7e,0x6a,
+ 0x72,0xc8,0xf2,0x4b,0x34,0xa8,0x18,0x80,0xe4,0xc8,0x46,0x13,0x80,0x8e,
+ 0xe1,0xa8,0xf2,0x00,0x4b,0xb9,0xb0,0x5a,0xe2,0x52,0x25,0x7b,0x1a,0xbd,
+ 0x63,0x5f,0x6d,0xf0,0x7b,0x9b,0xda,0x01,0xf0,0x31,0xb0,0x4a,0xa6,0x76,
+ 0x95,0x64,0xed,0x49,0x7a,0x32,0xf7,0x8a,0x76,0xa9,0x7d,0x3f,0x4f,0x25,
+ 0xda,0x02,0x75,0xb3,0x57,0x0c,0xce,0x29,0xbb,0x2b,0x6b,0x14,0xb2,0x31,
+ 0xcb,0x9a,0x01,0x60,0xe2,0x70,0xcf,0xe3,0x04,0x20,0xa4,0x01,0x99,0x97,
+ 0xb6,0x8a,0x1d,0xfd,0xc1,0x8d,0x7d,0x7d,0x74,0xb4,0x2b,0xd8,0x28,0x38,
+ 0xde,0xb0,0xd9,0x2b,0x5b,0xf0,0xcc,0x09,0xff,0x4c,0xd3,0xc1,0xee,0xfd,
+ 0x9f,0x1c,0x1e,0x3c,0xbd,0x63,0x6f,0x71,0xf9,0xf2,0x63,0x94,0x5a,0x0f,
+ 0x64,0xab,0xc2,0x51,0x38,0x80,0x9e,0x77,0x11,0xba,0xd2,0x3b,0xa4,0x27,
+ 0xf2,0xd2,0xbf,0xc3,0xd2,0x10,0x22,0xd0,0x7a,0x6d,0xc5,0x2e,0x5e,0x3d,
+ 0xe9,0xb5,0x6e,0xdd,0x2a,0xb3,0x97,0x3a,0x00,0xc8,0x31,0x13,0x1a,0x9b,
+ 0xac,0x4f,0x17,0xdb,0x18,0x1e,0x95,0x91,0xb0,0x2b,0x3a,0x95,0x44,0x0e,
+ 0x77,0x02,0x64,0x9a,0x82,0xb5,0xb3,0x2f,0xa5,0x1d,0x3a,0xf8,0x05,0x2b,
+ 0xab,0x9d,0xc0,0x35,0xfa,0xb2,0x08,0x30,0xa2,0x37,0x5f,0x3b,0xc3,0x8f,
+ 0x6f,0xf9,0x90,0xc7,0x7f,0x8b,0x01,0xf0,0xff,0xe1,0x6e,0xb7,0x92,0x14,
+ 0xd2,0xd5,0x3b,0x73,0xe9,0xa2,0x7d,0xdd,0x79,0xa9,0x51,0xaa,0x9f,0x3c,
+ 0xf7,0x4b,0xe6,0xd4,0xa6,0xdd,0xd6,0xa2,0x8f,0xf2,0xc6,0xa1,0x78,0x15,
+ 0x4f,0x5d,0xef,0xe7,0xad,0xbb,0xf7,0xf8,0x9d,0xbf,0x9e,0x04,0x90,0xf9,
+ 0xd7,0xaf,0xe9,0x56,0x2a,0xa8,0x58,0x68,0x5a,0xd3,0x9f,0x58,0x4a,0x83,
+ 0xd5,0x35,0xe9,0xbf,0xde,0x3b,0xc2,0xd3,0x97,0xaf,0x0e,0x97,0x0d,0x06,
+ 0x80,0x08,0x80,0x34,0x00,0x0f,0xff,0x53,0x64,0xa4,0x17,0x8c,0xff,0x7a,
+ 0xe0,0x6f,0x77,0xe3,0x54,0x57,0x80,0x6c,0x28,0xa3,0x00,0x00,0x00,0x00,
+ 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_filenew_png_len = 313;
+static const unsigned char small_filenew_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x04,0x00,0x00,
+ 0x00,0x6e,0xbd,0xa4,0xb0,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x00,0xcb,0x49,0x44,0x41,0x54,0x28,0xcf,0x9d,0xd3,
+ 0x3d,0x0a,0xc2,0x30,0x18,0xc6,0xf1,0x7f,0xa5,0x28,0x22,0xe2,0xea,0xe2,
+ 0xe0,0x01,0xbc,0x82,0x78,0x07,0x57,0x27,0x27,0x0f,0x20,0xde,0x41,0xef,
+ 0xe5,0xee,0xea,0xe2,0xea,0xa6,0x08,0x05,0xa5,0x1f,0x79,0x1d,0x6c,0x43,
+ 0xd2,0xbc,0x4a,0x6b,0x96,0x64,0xf8,0xf1,0xbc,0x1f,0x90,0x58,0x68,0x7e,
+ 0x62,0xfe,0xc1,0x51,0x50,0x42,0xa2,0x1f,0xc9,0x79,0x79,0x1b,0x6e,0x1c,
+ 0xd9,0x12,0x49,0x9d,0x3b,0xd8,0xd8,0xdb,0x20,0xcc,0x58,0x06,0xdc,0xc3,
+ 0x62,0xb1,0x41,0xd8,0x90,0xd6,0xb8,0x83,0x0b,0x8b,0x0b,0x0a,0x20,0x61,
+ 0x5d,0xe3,0x5e,0xcf,0x15,0xce,0x11,0x84,0x04,0x58,0x79,0x5c,0x4d,0x16,
+ 0x3a,0x0c,0xb8,0x00,0xb0,0xe0,0x6e,0xb9,0x87,0x3f,0x23,0x0a,0x30,0xe2,
+ 0xca,0x9e,0x14,0x80,0x97,0xbe,0xba,0x0a,0xc7,0x8c,0xd9,0x71,0x27,0x43,
+ 0x80,0x33,0x87,0xef,0x18,0x84,0x21,0x53,0x26,0x4e,0x25,0xa5,0xe7,0xc2,
+ 0xd9,0x69,0x8f,0x6e,0xf9,0xea,0x6b,0x38,0xf3,0xb0,0x1b,0xa2,0x26,0xe7,
+ 0x6d,0xb0,0x9e,0x6c,0xf4,0x6d,0xb4,0x48,0x6e,0x85,0x4d,0x9b,0x01,0x9f,
+ 0x9c,0x54,0xfc,0xd0,0xf0,0xbc,0xf9,0xb7,0x0a,0x3f,0x51,0x78,0xde,0x2d,
+ 0xfa,0x60,0x2c,0x45,0xbe,0xf6,0x7b,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,
+ 0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_fileopen_png_len = 681;
+static const unsigned char small_fileopen_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x02,0x3b,0x49,0x44,0x41,0x54,0x48,0xc7,0xb5,0x95,
+ 0xcb,0x6f,0x12,0x51,0x1c,0x85,0xfb,0xc7,0xb5,0x58,0xeb,0x8b,0x18,0xe2,
+ 0xc2,0xb6,0x20,0x26,0x46,0x91,0xd2,0x62,0xb1,0xb4,0x05,0x86,0x3e,0x98,
+ 0x96,0x0e,0xb4,0x86,0x88,0xd0,0x08,0x4a,0x0a,0x55,0x1a,0xc4,0x27,0x3e,
+ 0x62,0xc2,0x96,0x2d,0x61,0x63,0x60,0xc1,0x02,0x12,0x16,0x10,0x36,0xc0,
+ 0x02,0x36,0x34,0x39,0x32,0xb7,0xcc,0x95,0xc9,0x5c,0xa0,0x86,0x74,0x71,
+ 0x12,0x2e,0x73,0xf9,0xbe,0xdf,0x3d,0x30,0xc3,0x14,0x80,0xa9,0xab,0x88,
+ 0x7c,0xd1,0x5b,0xf6,0xa3,0xe9,0x87,0xae,0x27,0x06,0x27,0x93,0x49,0x09,
+ 0x86,0xd3,0x3f,0x27,0x30,0xbd,0x30,0x82,0x25,0x18,0x27,0x53,0x80,0xcf,
+ 0xcf,0xcf,0xd1,0xed,0x76,0x91,0x48,0x24,0x46,0x0a,0xc6,0x9d,0x46,0x01,
+ 0xee,0x74,0x3a,0x68,0xb7,0xdb,0x24,0xe2,0xeb,0x78,0x3c,0xce,0x14,0x8c,
+ 0x3a,0x4d,0x9f,0x25,0xb3,0x23,0x16,0x8b,0xa1,0xd1,0x68,0xd0,0x34,0x9b,
+ 0x4d,0xb4,0x5a,0x2d,0xf2,0xfe,0xa0,0x60,0x30,0x2c,0x01,0x99,0x52,0xe7,
+ 0xd0,0x42,0xef,0xd4,0xd1,0x8b,0xe1,0x70,0x18,0xd5,0x6a,0x55,0x96,0x5a,
+ 0xad,0x86,0x7a,0xbd,0x8e,0x48,0x24,0x42,0xf7,0x89,0x40,0x96,0x80,0x82,
+ 0x17,0xd6,0xe7,0xe1,0xfd,0x29,0xe0,0xe8,0xb7,0x17,0x7a,0xee,0x9f,0x20,
+ 0x18,0x0c,0xa2,0x54,0x2a,0xc9,0x52,0x2e,0x97,0x51,0xa9,0x54,0x10,0x0a,
+ 0x85,0x98,0x82,0x41,0x30,0xa9,0x62,0xff,0x33,0x8f,0x83,0x6f,0xfb,0xf0,
+ 0xfc,0x38,0xe8,0x09,0x3c,0x78,0x30,0x20,0xf0,0xf9,0x7c,0xc8,0xe7,0xf3,
+ 0xb2,0x14,0x0a,0x05,0x14,0x8b,0x45,0x04,0x02,0x01,0x59,0x45,0x14,0x2c,
+ 0x7d,0x69,0xf7,0xcc,0x1a,0xb8,0x3e,0x6c,0x63,0xef,0x93,0x0b,0xee,0xaf,
+ 0x7b,0xf0,0x7c,0x77,0xe3,0xf0,0x97,0x87,0xd4,0x24,0x7d,0x50,0x10,0x04,
+ 0x64,0xb3,0x59,0x59,0x72,0xb9,0x1c,0xd2,0xe9,0xf4,0x50,0x30,0x99,0x9a,
+ 0x8b,0xd9,0xb0,0xf5,0x9e,0xc3,0x6e,0x62,0x0b,0xfc,0xc7,0x5d,0xb8,0xbf,
+ 0xf0,0x10,0x52,0x6e,0x52,0x93,0xce,0xbe,0x48,0x05,0x2e,0x97,0x0b,0x99,
+ 0x4c,0x86,0x26,0x1a,0x8d,0xb2,0xc1,0xd2,0xd4,0x77,0x1e,0xdf,0xc6,0xe6,
+ 0x5b,0x2b,0x1c,0x51,0x1b,0x9c,0xef,0x1c,0xd8,0x39,0x73,0xf6,0x4e,0xb1,
+ 0x23,0xab,0x69,0x50,0xc0,0x71,0x1c,0x99,0x56,0xea,0x7b,0x18,0x98,0x4c,
+ 0x6d,0x09,0x98,0x61,0x7d,0x6d,0xc1,0xc6,0x1b,0x2b,0xec,0x27,0x9b,0xe0,
+ 0x4e,0xed,0xd8,0x3e,0xe3,0x14,0x35,0x69,0x6d,0x17,0x82,0x54,0x2a,0x05,
+ 0xbf,0xdf,0x3f,0x1c,0x2c,0x4d,0x3d,0xab,0xbb,0x86,0x15,0x9f,0x09,0xab,
+ 0xaf,0xcc,0x58,0x3b,0xb6,0x60,0x3d,0xbc,0x06,0x5b,0x64,0x83,0x59,0x93,
+ 0xb8,0x5f,0xbc,0x43,0xbd,0x5e,0xef,0x58,0x30,0xbd,0x59,0x66,0xb5,0x2a,
+ 0x2c,0xf7,0x04,0xcf,0xfc,0x2b,0xb0,0x1c,0xaf,0xc2,0x1a,0x7a,0xae,0xa8,
+ 0x49,0xdc,0x67,0x34,0x1a,0xc1,0xf3,0xfc,0x68,0x30,0x53,0xb0,0xa8,0x22,
+ 0xbf,0x53,0xf3,0xcb,0x65,0x45,0x4d,0x1a,0xd3,0x5d,0xda,0xf5,0xa5,0xc0,
+ 0x2c,0x81,0x6a,0x41,0x85,0xa5,0xa3,0xa7,0x8a,0x9a,0xc4,0x6b,0x6a,0xb5,
+ 0xfa,0xff,0xc0,0x4c,0xc1,0xfc,0x0c,0x96,0x0e,0x0d,0xb4,0xa6,0x5b,0x8f,
+ 0x6e,0x0e,0xbf,0x41,0x2e,0xfd,0xf0,0x96,0x09,0xa6,0x61,0xf4,0x18,0x48,
+ 0x4d,0x37,0x1e,0xce,0x4d,0x06,0x66,0x09,0x66,0xee,0x4f,0xc3,0x20,0x3c,
+ 0x21,0x35,0xcd,0xe9,0xaf,0x4f,0x06,0x66,0x09,0x14,0x8f,0xcd,0xab,0xfa,
+ 0x33,0xfd,0x0b,0x6b,0x4c,0x83,0xb2,0x3e,0x78,0x0a,0x5d,0x00,0x00,0x00,
+ 0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_filesave_png_len = 328;
+static const unsigned char small_filesave_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x00,0xda,0x49,0x44,0x41,0x54,0x48,0xc7,0x63,0xf8,
+ 0xff,0xff,0x3f,0x03,0x2d,0x30,0x84,0x60,0x60,0x08,0x01,0xe2,0xff,0x54,
+ 0xc2,0x21,0xc8,0x06,0xff,0x4f,0x6c,0x4d,0xf8,0xdf,0x76,0xa0,0xf9,0x3f,
+ 0x39,0x60,0xf5,0xea,0xd5,0x60,0xbd,0x2e,0x25,0x4e,0x60,0xc3,0x51,0x0c,
+ 0x06,0x49,0x64,0x6c,0x48,0x21,0xdb,0x60,0x90,0x5e,0xff,0x56,0x1f,0xec,
+ 0x06,0x6b,0xb9,0x69,0xc0,0x15,0xa7,0xa5,0xa5,0xe1,0xc4,0xc8,0xf2,0x24,
+ 0x1b,0x4c,0x55,0x17,0x23,0x07,0x05,0x55,0x5d,0x4c,0xb3,0x30,0xc6,0xe5,
+ 0x62,0x7c,0xfc,0xc1,0xe3,0x62,0xaa,0x1b,0x0c,0x52,0x44,0x0e,0x26,0x68,
+ 0x30,0x25,0x18,0xaf,0xc1,0xc2,0x12,0xc2,0x24,0x97,0x0f,0x72,0x4a,0x72,
+ 0x84,0x0d,0x06,0xb1,0xb3,0xb2,0xb2,0xfe,0x17,0x16,0x16,0x12,0x85,0xeb,
+ 0xeb,0xeb,0xc1,0x7a,0x88,0x32,0x18,0xa4,0xa1,0xa1,0xa1,0x01,0x2b,0x76,
+ 0x70,0x70,0x80,0x63,0x10,0xbf,0xb7,0xb7,0x77,0xb8,0x19,0x1c,0x54,0x1b,
+ 0xf0,0x3f,0x63,0x3d,0xf9,0x06,0x47,0x4c,0x09,0xf9,0x6f,0x10,0xa0,0x87,
+ 0x61,0x30,0xb8,0x06,0xb1,0x4a,0xb2,0x00,0x4b,0x80,0x22,0x04,0xa4,0x01,
+ 0x1b,0x76,0x77,0x77,0x87,0x63,0x10,0x7f,0xd2,0xa4,0x49,0x60,0x3d,0x30,
+ 0x43,0x51,0x6a,0x10,0x2a,0x56,0x4f,0x21,0x28,0x75,0x1e,0x2d,0x30,0x00,
+ 0x03,0x3b,0xbe,0x90,0x7a,0x5c,0xaf,0x5d,0x00,0x00,0x00,0x00,0x49,0x45,
+ 0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_frame_png_len = 400;
+static const unsigned char small_frame_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x04,0x00,0x00,
+ 0x00,0x6e,0xbd,0xa4,0xb0,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0x22,0x49,0x44,0x41,0x54,0x28,0xcf,0xb5,0x93,
+ 0x31,0x4e,0xc3,0x40,0x10,0x45,0xdf,0x7a,0xc7,0xc4,0xc4,0x0e,0x51,0x24,
+ 0xd3,0x53,0xd1,0xa4,0x42,0x34,0x94,0x1c,0x81,0x96,0x50,0x50,0x71,0x83,
+ 0x48,0x1c,0x83,0x53,0x50,0xa4,0x49,0x1b,0x1a,0xa4,0x20,0x0e,0xc0,0x19,
+ 0x52,0x59,0x8a,0x50,0x84,0x6c,0xd9,0x32,0x89,0xd7,0x4b,0xe1,0x00,0x05,
+ 0x76,0x42,0x90,0xd8,0x69,0xb6,0x78,0xfa,0xfa,0xa3,0x3f,0x5f,0x59,0x7e,
+ 0xff,0x9c,0x1d,0x58,0x04,0x94,0x83,0x46,0xa3,0x51,0xa8,0x06,0xca,0x62,
+ 0x31,0x18,0x85,0x33,0xbc,0x8b,0xae,0x67,0x5d,0xb3,0x41,0xd1,0xe0,0xc7,
+ 0xde,0x68,0x72,0x0b,0xee,0xd5,0xdb,0x93,0x35,0x5b,0x66,0x62,0x4f,0x12,
+ 0x8e,0x05,0x3d,0xeb,0x9e,0x31,0x64,0xda,0xa8,0xeb,0x31,0xe0,0x82,0x28,
+ 0x20,0x14,0xb4,0xa1,0x60,0xca,0xcb,0x0d,0x29,0x39,0x45,0xdd,0x5e,0xfd,
+ 0xf1,0x00,0xa0,0x23,0x28,0x2a,0x22,0x25,0x62,0x41,0x5e,0x27,0x1d,0x22,
+ 0x00,0x22,0x28,0x58,0x01,0xe4,0x2c,0x98,0x93,0xd6,0xc0,0xfe,0x9a,0x70,
+ 0x04,0xd6,0xdf,0x82,0x9c,0xd4,0x26,0x3f,0x59,0xf5,0x49,0x54,0xa1,0x2c,
+ 0xb7,0xc6,0xb1,0xfc,0x86,0x57,0x5b,0xe1,0xd5,0x1f,0xe1,0x7f,0xb1,0x21,
+ 0x55,0xf6,0x1e,0x08,0x1e,0x7e,0xed,0x25,0xf9,0xad,0x2f,0xd8,0x1a,0xe0,
+ 0x9c,0xfe,0x38,0x6c,0x50,0x6d,0x71,0x44,0x4c,0x09,0xa5,0x60,0xfd,0xf8,
+ 0xf9,0xe0,0x94,0x80,0xbd,0x46,0x13,0x19,0x0f,0xf4,0xb2,0x79,0x21,0x18,
+ 0x6f,0x74,0x7f,0x19,0x05,0x9b,0x1c,0x97,0xf4,0xb2,0xfd,0x47,0x12,0x85,
+ 0x4b,0xc0,0x21,0x21,0x1d,0xa4,0xb1,0x37,0x25,0x05,0x09,0xaf,0x0a,0x07,
+ 0x97,0x36,0x6d,0x5a,0xe8,0x0d,0x4d,0x31,0xbc,0x93,0x29,0xbb,0x43,0xad,
+ 0x3e,0x00,0x5a,0x69,0x7f,0x4b,0x28,0x09,0xf5,0x31,0x00,0x00,0x00,0x00,
+ 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_groupbox_png_len = 439;
+static const unsigned char small_groupbox_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x04,0x00,0x00,
+ 0x00,0x6e,0xbd,0xa4,0xb0,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0x49,0x49,0x44,0x41,0x54,0x28,0xcf,0xcd,0xd3,
+ 0x3f,0x4e,0x02,0x41,0x14,0xc7,0xf1,0xef,0xfc,0x01,0x0c,0x88,0x85,0xc1,
+ 0x98,0x58,0x1b,0x7b,0x6c,0xb6,0xe0,0x22,0x9e,0x81,0xc6,0x13,0x78,0x08,
+ 0x2f,0x20,0xd6,0xd6,0xb6,0x34,0xc6,0x86,0x98,0x50,0xd1,0x90,0x10,0x1a,
+ 0x2d,0x4c,0xd4,0xc4,0xb0,0xc2,0x66,0x61,0x66,0x9e,0xc5,0x6e,0x14,0x58,
+ 0xc1,0xc4,0xca,0xdf,0x54,0x33,0xf3,0xc9,0xe4,0xcd,0x9b,0x8c,0x12,0x00,
+ 0x94,0xc2,0x60,0x31,0x68,0x96,0x13,0xf0,0x38,0xbc,0x64,0x08,0x9b,0x2f,
+ 0x9b,0x8b,0xc5,0x84,0xf5,0x0c,0xe8,0x1e,0xf1,0x41,0x82,0xfb,0xc2,0x4a,
+ 0x63,0xa8,0x4d,0xb8,0x2c,0xe0,0x08,0x8e,0x79,0xe6,0x5d,0x25,0x08,0x1e,
+ 0x6f,0x95,0xbe,0x3e,0x93,0xf6,0x5b,0xeb,0x91,0x9f,0xd2,0xbe,0xdb,0xa3,
+ 0xc6,0x9c,0x51,0x6f,0xdc,0xe9,0xdd,0x40,0xa9,0x73,0xff,0x24,0xb1,0x9c,
+ 0x0b,0x85,0x11,0x49,0x57,0xc6,0x12,0x8b,0x97,0x07,0x39,0xed,0x73,0x62,
+ 0x31,0x71,0xeb,0x90,0x29,0x03,0xa2,0xc2,0xb9,0x0b,0x2c,0xe0,0x71,0x08,
+ 0x69,0x93,0x86,0xc5,0xcc,0x70,0x04,0xae,0x78,0x61,0x42,0xba,0x82,0x2b,
+ 0xd4,0x30,0x04,0x1c,0x29,0x0e,0xea,0x16,0x05,0x0e,0x28,0xb3,0x4f,0x95,
+ 0xb0,0x82,0x35,0x3b,0x94,0x01,0x87,0x07,0xb0,0x16,0x05,0x1e,0x9f,0x6f,
+ 0xac,0x63,0x8d,0xc6,0x13,0xb2,0xde,0x69,0x0b,0xe0,0x70,0x80,0xc2,0x60,
+ 0x0a,0x75,0x07,0x02,0xe4,0x8d,0xb6,0xd9,0x45,0xe6,0x6c,0xcf,0xe2,0x1b,
+ 0xbb,0x7c,0xb2,0x39,0xee,0x8f,0xf8,0x3f,0x94,0x21,0xd3,0x5f,0xf1,0x9c,
+ 0x98,0x00,0xc1,0x22,0xa3,0x5e,0x3f,0x0a,0xd9,0x1b,0x6d,0x48,0xc2,0x80,
+ 0x64,0x88,0xb3,0xf8,0x71,0x67,0x58,0x4e,0x9b,0x6e,0x0b,0x0e,0x24,0xc3,
+ 0xe4,0x96,0x58,0x51,0x62,0x97,0x03,0x1a,0xd4,0xb1,0x6b,0x9f,0x6a,0x59,
+ 0x3b,0x62,0x5e,0x15,0x9a,0x12,0x55,0xaa,0x54,0x30,0xa8,0x0d,0x58,0xf0,
+ 0xa4,0xcc,0x94,0x64,0xdf,0xca,0x60,0x50,0x5b,0xb0,0xe0,0xf1,0x9f,0xe4,
+ 0x0e,0x9a,0x91,0xbd,0x00,0x0b,0xaa,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,
+ 0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_help_png_len = 837;
+static const unsigned char small_help_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x02,0xd0,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xfc,0xff,0xff,0x3f,0x03,0x2d,0x00,0x40,
+ 0x00,0x31,0xd1,0xc4,0x54,0x20,0x00,0x08,0x20,0x16,0x72,0x35,0xa6,0xa6,
+ 0xec,0xf8,0xff,0xf0,0xc1,0x47,0x86,0x47,0x8f,0x3f,0x33,0x3c,0x7b,0xfa,
+ 0x99,0xe1,0xd3,0x97,0x42,0x46,0x64,0x79,0x80,0x00,0x62,0x44,0x0e,0x0a,
+ 0x57,0x57,0xd7,0xff,0xbb,0x77,0xef,0x66,0xc4,0x30,0x05,0x0d,0x24,0xc4,
+ 0x6d,0xfd,0x7f,0xee,0xfc,0x4b,0x86,0xeb,0xd7,0xde,0x02,0x79,0xbf,0x81,
+ 0xf8,0x1f,0x10,0xff,0x61,0xf8,0xcf,0xf0,0x93,0xe1,0xcf,0xdf,0x76,0xb0,
+ 0x7e,0x80,0x00,0x42,0x71,0x31,0x1b,0x1b,0x1b,0x83,0x84,0x84,0xc4,0xff,
+ 0x17,0x2f,0x5e,0xe0,0x34,0x3c,0x2a,0x62,0xd3,0xff,0x5d,0xbb,0x1e,0x30,
+ 0x7c,0xfc,0xf8,0x0a,0x68,0xd0,0x57,0xa0,0x08,0x33,0x03,0x23,0x03,0x1b,
+ 0x03,0xc4,0x79,0x3f,0xe0,0xea,0x00,0x02,0x08,0x23,0x8c,0x5f,0x3c,0x7a,
+ 0xc1,0xc0,0xc8,0xc8,0x88,0x35,0x46,0x3d,0xdd,0x57,0xff,0xdf,0xbc,0xf9,
+ 0x2e,0xc3,0x87,0x8f,0x4f,0x18,0xfe,0xff,0x7f,0x01,0x74,0x5d,0x3f,0xe3,
+ 0x9f,0xbf,0x3d,0x48,0x8a,0xff,0x30,0xb0,0x30,0x25,0x83,0xb9,0x00,0x01,
+ 0x84,0x62,0xf0,0xbf,0x7f,0xff,0xc0,0xf4,0xd7,0x77,0x5f,0xb1,0x1a,0xbe,
+ 0x67,0xcf,0x7d,0x86,0xef,0x3f,0x9e,0x33,0x30,0xfc,0x7f,0xcd,0xf0,0xe7,
+ 0xdf,0x1c,0xb8,0xaf,0xfe,0xfc,0x6d,0x63,0x64,0x64,0x60,0x85,0x06,0x09,
+ 0xc4,0xd5,0x00,0x01,0x84,0x62,0x30,0xd0,0x30,0x30,0xcd,0xc1,0xc1,0xc1,
+ 0xf0,0xf2,0xf1,0x4b,0x0c,0xc3,0xff,0x33,0x7c,0x00,0x12,0x1f,0xc1,0x2e,
+ 0xc3,0x04,0xcc,0x40,0x39,0x50,0x38,0x43,0xe4,0x00,0x02,0x08,0x6b,0xaa,
+ 0x60,0x62,0x62,0x62,0xe0,0xe2,0xe4,0x62,0x78,0x7a,0xff,0x29,0xd8,0x70,
+ 0x20,0x60,0x84,0xb9,0x0c,0x9b,0x7a,0x2d,0xcd,0x39,0x40,0x07,0xfc,0x02,
+ 0xb2,0x7e,0x32,0xfc,0xfd,0xb7,0x12,0xac,0x06,0x20,0x80,0x50,0x0c,0x86,
+ 0xb9,0x18,0x18,0x1b,0x60,0x57,0xff,0xf9,0xf3,0x07,0xc3,0x70,0x74,0xe0,
+ 0xe3,0xb5,0xe6,0xff,0xed,0x5b,0x6f,0x81,0x2e,0xfd,0xc8,0x80,0x1c,0x79,
+ 0x00,0x01,0x84,0x33,0x1d,0xb3,0xb0,0xb0,0x30,0xb0,0xb3,0xb3,0x83,0xc3,
+ 0xfd,0xf1,0xdd,0xc7,0x58,0x0d,0x0f,0x0a,0x58,0xff,0xff,0xe2,0x45,0x50,
+ 0xea,0x78,0x0b,0x0e,0xa2,0x3f,0xff,0x56,0xc0,0xe5,0x01,0x02,0x08,0x25,
+ 0x8c,0xd1,0xb3,0x37,0x33,0x33,0x33,0x38,0x58,0xfe,0xfe,0xfd,0xcb,0x70,
+ 0xe9,0xcc,0x25,0x8c,0x30,0xbf,0x75,0xfb,0x1d,0xc3,0x8b,0x17,0xaf,0x80,
+ 0x1a,0xdf,0x01,0x0d,0x5d,0x84,0x62,0x29,0x40,0x00,0xa1,0x18,0xfc,0xeb,
+ 0xd7,0x2f,0xa8,0x0d,0xc0,0x64,0xff,0xfb,0x37,0x98,0xff,0xf3,0xd7,0x4f,
+ 0x86,0x2f,0x5f,0xbe,0x30,0xbc,0x7d,0xf7,0x96,0x61,0xe3,0x9a,0x8d,0x28,
+ 0x86,0xdf,0xba,0xf9,0x0e,0xa8,0xf4,0x0b,0x4a,0x10,0xc0,0x00,0x40,0x00,
+ 0xa1,0x04,0xc5,0xfb,0xf7,0xef,0xc1,0x86,0x7e,0xfc,0xf8,0x91,0xe1,0xd7,
+ 0xef,0x5f,0xe0,0x60,0xf8,0xfa,0xf5,0x2b,0x83,0x8e,0x91,0x0e,0x8a,0x26,
+ 0x58,0xb0,0xfc,0xff,0xff,0x0f,0xe2,0x0a,0x06,0xcc,0x22,0x07,0x20,0x80,
+ 0xc0,0xde,0x87,0x61,0x3e,0x3e,0xbe,0xff,0xc0,0x0c,0xf2,0xff,0xf2,0xd9,
+ 0xcb,0x20,0xd5,0xff,0xef,0x5c,0xbb,0xf3,0xff,0xc6,0xa5,0x1b,0xff,0x21,
+ 0xa1,0xf4,0x9f,0x81,0x14,0x0c,0x10,0x40,0xa8,0x1c,0xa0,0x01,0xa7,0x8e,
+ 0x9c,0x82,0x1b,0x04,0x33,0xfc,0xf8,0xa1,0xe3,0x58,0x0d,0x97,0x96,0x9c,
+ 0xfa,0x9f,0x85,0xa9,0xfa,0x3f,0x33,0x63,0x3a,0x86,0x1c,0x40,0x00,0x61,
+ 0xa4,0x0a,0x33,0x1b,0x33,0x06,0xe4,0xd8,0xe7,0xe6,0xe6,0x06,0x87,0x37,
+ 0x36,0xf0,0xf2,0xe5,0x27,0x60,0x40,0x7c,0x67,0x00,0xa5,0x5f,0x74,0x00,
+ 0x10,0x40,0x18,0x06,0x23,0x1b,0x0a,0x62,0x83,0xc2,0x13,0x94,0x96,0xcf,
+ 0x1e,0x3f,0x8b,0x25,0xc9,0x7d,0x02,0x2a,0x02,0x45,0xde,0x2f,0x0c,0x83,
+ 0x01,0x02,0x08,0xc5,0x60,0x5c,0x99,0x00,0x94,0x9e,0x41,0x25,0x1f,0x3a,
+ 0xf8,0x8d,0x23,0x27,0x82,0x00,0x40,0x00,0x11,0xac,0x41,0x40,0x96,0x89,
+ 0x48,0x89,0x80,0x93,0xde,0xfa,0x55,0xeb,0x71,0x96,0x7c,0xe8,0x00,0x20,
+ 0x80,0x88,0xae,0x9a,0x3e,0x7d,0xfe,0xc4,0xf0,0xf1,0xd3,0x47,0x62,0x95,
+ 0x33,0x00,0x04,0x10,0x4a,0x0d,0x82,0x57,0x21,0xd4,0xa5,0xb8,0x82,0x0b,
+ 0x1d,0x00,0x04,0x18,0x00,0x29,0x15,0x9b,0x2c,0x53,0x95,0xae,0x38,0x00,
+ 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_iconview_png_len = 613;
+static const unsigned char small_iconview_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0xf7,0x49,0x44,0x41,0x54,0x38,0xcb,0xed,0xd5,
+ 0x4b,0x4b,0x95,0x51,0x14,0xc6,0xf1,0x9f,0x9e,0x93,0x77,0x93,0x04,0x2b,
+ 0x91,0x28,0x2b,0x23,0xb3,0xf2,0x16,0x74,0xb5,0x20,0xa8,0x81,0x15,0x54,
+ 0xd6,0x20,0x0c,0x44,0x1a,0x44,0x08,0x41,0xa3,0x90,0x0a,0x22,0x13,0x3f,
+ 0x41,0x91,0x96,0x23,0x73,0x6c,0x93,0x1a,0xe5,0x20,0xb5,0x59,0x8d,0xfa,
+ 0x0a,0x45,0x34,0x69,0x50,0x73,0x57,0x93,0xed,0xe5,0xa4,0x47,0x0f,0x41,
+ 0x34,0x69,0xb0,0xe1,0x7d,0xd9,0xff,0xfd,0xec,0x87,0xb5,0xd6,0xc3,0x16,
+ 0x11,0xfe,0xc6,0xca,0xfd,0xa1,0x08,0x19,0x64,0xd3,0x2a,0x5e,0x71,0xa0,
+ 0x00,0x26,0x47,0x38,0x1d,0x68,0x57,0xec,0x1e,0x9e,0xa2,0x1e,0x35,0xa8,
+ 0xc0,0x86,0x24,0x56,0x5c,0x00,0x53,0xb4,0x28,0x9c,0x44,0x4b,0x35,0xfb,
+ 0x30,0x3e,0xf3,0x3c,0x5a,0x1e,0x1d,0x08,0xfb,0x7c,0xb6,0xc3,0x94,0x2a,
+ 0x63,0xd8,0x9b,0x04,0xaa,0xd7,0x60,0x5a,0xb0,0x11,0x25,0x28,0x5a,0x10,
+ 0xce,0xba,0x2c,0x74,0x0b,0x27,0xc5,0xc0,0xb3,0xde,0x18,0x79,0x33,0x12,
+ 0x57,0x27,0x7b,0x63,0x70,0xee,0x6e,0x38,0xee,0x1b,0x9a,0xd6,0x64,0x8e,
+ 0xf9,0x8e,0xc6,0x64,0x20,0xbb,0x20,0x5c,0xe2,0x90,0xb9,0xd9,0xf9,0x77,
+ 0xd1,0x3a,0xd6,0x12,0x5a,0x84,0x2e,0x31,0xf0,0xa4,0x2f,0x86,0xdf,0x0f,
+ 0x87,0xeb,0x02,0x5d,0xda,0xf2,0x30,0x73,0x43,0xe1,0x9a,0xc0,0x61,0x34,
+ 0xa0,0x6c,0x49,0x98,0xce,0xf2,0x87,0xe5,0x11,0x11,0x31,0xfe,0x65,0x3c,
+ 0xdc,0x11,0xda,0xc4,0xad,0x97,0xfd,0xe1,0x8c,0x79,0x9c,0x47,0xf7,0x6a,
+ 0xcc,0xcd,0x89,0xbe,0x70,0x4a,0xe0,0x2c,0x76,0xa2,0x72,0xa9,0x14,0xd4,
+ 0xe2,0x81,0x41,0x31,0xf2,0x69,0x28,0x26,0xbf,0x4e,0x44,0xcf,0xeb,0x9e,
+ 0x28,0xba,0x2d,0x74,0x08,0x5c,0x4c,0x8e,0x1e,0xff,0xce,0x18,0x10,0xf6,
+ 0x8b,0x74,0xf9,0x1e,0x54,0x2f,0x6f,0x5e,0x79,0xea,0xf2,0x15,0x59,0x6f,
+ 0x5d,0x17,0x97,0xa6,0xce,0x45,0xe7,0x68,0x7b,0xa8,0x13,0xb8,0x80,0x83,
+ 0x68,0x42,0xcf,0x72,0xa6,0x7d,0xb4,0x35,0xd4,0xac,0x22,0x9c,0xc4,0x33,
+ 0x69,0x6c,0xea,0x53,0x87,0xfb,0x65,0xcc,0x38,0x2a,0xf0,0x03,0xa7,0xb1,
+ 0x1b,0x75,0xd8,0x9a,0xc3,0x1c,0xc9,0x61,0x1a,0x17,0x4b,0xb1,0x4c,0x3c,
+ 0x8b,0x4a,0x6c,0xc6,0x2e,0xb4,0xe1,0x04,0xba,0xd2,0x77,0x3d,0xaa,0x0a,
+ 0x60,0xca,0x56,0x06,0x24,0xe3,0x7e,0x1a,0xfe,0xc6,0xb4,0x9a,0x92,0x40,
+ 0x43,0x1a,0xa5,0xce,0x75,0x98,0xea,0xe5,0xe3,0x96,0x2f,0x20,0xaf,0x54,
+ 0x7a,0x91,0x9c,0x6c,0xc1,0x26,0xcd,0x3e,0xe6,0x61,0x3a,0x52,0x99,0x2a,
+ 0x90,0xf9,0x1f,0x90,0x7f,0x17,0x90,0xe9,0x02,0x02,0x32,0xfd,0xa7,0x01,
+ 0xb9,0x21,0x6b,0x36,0x0d,0xff,0xcf,0x3c,0x01,0x59,0x8d,0x59,0x35,0x20,
+ 0x99,0xe4,0xbc,0x16,0xdb,0x93,0xc3,0x85,0xe1,0x6f,0x4f,0x97,0x56,0x16,
+ 0xc0,0x94,0xc9,0xf3,0xf4,0x64,0x93,0xfb,0xda,0xd4,0xe5,0x6d,0xc9,0x65,
+ 0x55,0xda,0x5b,0x9f,0xc9,0xfb,0x18,0x2e,0x1d,0x2e,0x4d,0x0e,0xcb,0x16,
+ 0x44,0x0b,0x61,0x7e,0x01,0x51,0x63,0x2c,0x0f,0x0d,0xdc,0x47,0xb4,0x00,
+ 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_konsole_png_len = 1155;
+static const unsigned char small_konsole_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xaf,0xc8,0x37,0x05,0x8a,0xe9,0x00,0x00,0x00,0x06,0x62,0x4b,0x47,
+ 0x44,0x00,0xff,0x00,0xff,0x00,0xff,0xa0,0xbd,0xa7,0x93,0x00,0x00,0x00,
+ 0x09,0x70,0x48,0x59,0x73,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x48,0x00,
+ 0x46,0xc9,0x6b,0x3e,0x00,0x00,0x04,0x13,0x49,0x44,0x41,0x54,0x38,0xcb,
+ 0x95,0x95,0xcf,0x6b,0x14,0x67,0x18,0xc7,0xbf,0xcf,0x3b,0xef,0xcc,0xfe,
+ 0x74,0xa9,0x66,0x83,0x96,0x44,0x1b,0x4c,0x02,0x81,0x42,0xb1,0xc1,0x2a,
+ 0x48,0x0f,0x82,0x97,0x1e,0x04,0x0f,0x5e,0x8b,0xb7,0x5e,0x05,0x0f,0x05,
+ 0xff,0x04,0xa1,0x3d,0x08,0x1e,0x2c,0x3d,0xe4,0x94,0x5b,0x28,0xd4,0x6b,
+ 0x9b,0x1c,0xf6,0x20,0xa9,0x8d,0x25,0x63,0x6b,0x82,0x89,0xab,0x21,0xbb,
+ 0xd9,0xac,0xeb,0xae,0x1b,0x57,0x77,0x66,0x76,0xe6,0x7d,0xe7,0x7d,0x7a,
+ 0x71,0xc7,0xdd,0xc4,0x56,0x1d,0x78,0x18,0xe6,0x61,0x9e,0xcf,0xf3,0x7d,
+ 0x9e,0xe7,0x9d,0x67,0xa8,0x50,0x28,0x1c,0x9b,0x9d,0x9d,0xbd,0x50,0x2c,
+ 0x16,0x8f,0x30,0x33,0xe3,0x23,0x2f,0x66,0x06,0x11,0x51,0x14,0x45,0xda,
+ 0x75,0xdd,0xe5,0x6a,0xb5,0xea,0x02,0x00,0xdd,0xb8,0x71,0xe3,0xd7,0x2b,
+ 0x57,0xae,0x7c,0x53,0x28,0x14,0xe4,0x87,0x72,0xfb,0xef,0xf5,0xef,0x44,
+ 0x04,0xa5,0x14,0x2d,0x2d,0x2d,0x3d,0xba,0x7a,0xf5,0xea,0xb7,0xcf,0x9e,
+ 0x3d,0x5b,0xa5,0x72,0xb9,0xac,0x4f,0x9c,0x38,0x61,0xad,0xaf,0xaf,0xc3,
+ 0xb2,0x2c,0x64,0x32,0x99,0x8f,0x52,0x1c,0xc7,0x31,0x5e,0xbd,0x7a,0x85,
+ 0x99,0x99,0x19,0x84,0x61,0x88,0xcb,0x97,0x2f,0x7f,0x5f,0x2a,0x95,0x7e,
+ 0x94,0xb6,0x6d,0x5b,0xaf,0x5f,0xbf,0xc6,0x2f,0x77,0xee,0xe0,0xab,0x73,
+ 0xe7,0xd0,0x6e,0x34,0xd0,0x7e,0xfe,0x1c,0xc6,0x18,0x10,0xd1,0x7b,0xc1,
+ 0x5a,0x6b,0xb8,0xae,0x8b,0xeb,0xd7,0xaf,0x63,0x7c,0x7c,0x1c,0x52,0xca,
+ 0x0c,0x00,0x48,0x21,0x04,0x88,0x08,0xe9,0x54,0x0a,0x99,0x7c,0x1e,0xa7,
+ 0x67,0x66,0xd0,0x6e,0x36,0x71,0x77,0x71,0x11,0xcf,0xeb,0xf5,0x0f,0x82,
+ 0x8f,0x8c,0x8c,0x00,0x00,0xa2,0x28,0x4a,0x7c,0x92,0x88,0x20,0x84,0x40,
+ 0xbb,0xd5,0xc2,0x83,0x95,0x15,0x8c,0x1e,0x3d,0x8a,0xf1,0x89,0x09,0x28,
+ 0x63,0xb0,0xbb,0xbb,0x0b,0x21,0xc4,0x7b,0xc1,0x96,0x65,0xc1,0xf7,0x7d,
+ 0x74,0xbb,0xdd,0x44,0x88,0x24,0x22,0x18,0x63,0xf0,0x49,0xb1,0x88,0x53,
+ 0x67,0xcf,0xa2,0xb4,0xb8,0x88,0x3f,0xef,0xde,0xc5,0x6e,0xa5,0x02,0xad,
+ 0x14,0x40,0x84,0x7e,0xf2,0xfd,0xc3,0xeb,0xc7,0x06,0x41,0x80,0x20,0x08,
+ 0x10,0xc7,0xf1,0x5b,0xb0,0x10,0x02,0x52,0x4a,0xfc,0x75,0xef,0x1e,0x7e,
+ 0xbe,0x7d,0x1b,0x52,0x08,0xd8,0xb6,0x8d,0xcf,0x4e,0x9e,0xc4,0x17,0xa7,
+ 0x4f,0x83,0x88,0x10,0xf6,0x7a,0x58,0x5d,0x59,0x81,0xef,0x79,0x30,0xc6,
+ 0x20,0x8e,0x63,0x18,0x63,0x60,0x8c,0x41,0xa7,0xd3,0x49,0x12,0x0c,0xce,
+ 0x45,0xd2,0x1b,0x45,0x9d,0x97,0x2f,0x51,0xdd,0xde,0x46,0x3e,0x9f,0x47,
+ 0x2e,0x9b,0x85,0xd7,0xed,0xa2,0xd7,0xeb,0x41,0x08,0x81,0x5e,0x18,0xc2,
+ 0xf3,0x3c,0x78,0xdd,0x2e,0x8c,0x31,0x50,0x4a,0x21,0x8a,0x22,0x78,0x9e,
+ 0x07,0xdf,0xf7,0x31,0x3a,0x3a,0xfa,0xdf,0x60,0xc7,0x71,0x90,0xc9,0x64,
+ 0x90,0x4e,0xa7,0x61,0x49,0x89,0x9d,0x4a,0x05,0xbb,0x3b,0x3b,0x10,0x42,
+ 0x0c,0x99,0x31,0xe6,0xed,0x80,0xa4,0x84,0x6d,0xdb,0x20,0x22,0x30,0xf3,
+ 0xbb,0xc1,0xe9,0x74,0x1a,0xd9,0x6c,0x16,0xd9,0x6c,0x16,0xa9,0x54,0x0a,
+ 0x8e,0xe3,0x40,0x4a,0x09,0xcb,0xb2,0x86,0x02,0x95,0x52,0x50,0x4a,0xc1,
+ 0xb6,0x6d,0x58,0x96,0x05,0x00,0xb0,0x6d,0xfb,0xa0,0xe2,0xfe,0x50,0xfa,
+ 0x8a,0xfb,0xe0,0x54,0x2a,0x95,0x04,0xf7,0xc1,0x71,0x1c,0x43,0x6b,0x8d,
+ 0x28,0x8a,0x86,0xfc,0xa9,0x54,0x2a,0x49,0x9c,0x54,0x33,0x58,0x96,0xe3,
+ 0x38,0x70,0x1c,0x07,0xe9,0x74,0x7a,0x48,0xb5,0x10,0x02,0xcc,0x0c,0xad,
+ 0x35,0x94,0x52,0xc9,0x73,0xbf,0x02,0x29,0x65,0x92,0x78,0xa8,0x15,0x00,
+ 0x30,0x35,0x35,0x85,0x28,0x8a,0x90,0xcb,0xe5,0x86,0x14,0x4b,0x29,0x13,
+ 0x65,0x7d,0x70,0x18,0x86,0x08,0xc3,0x10,0xbd,0x5e,0x0f,0xbe,0xef,0x27,
+ 0x42,0x86,0x5a,0x11,0x86,0xa1,0x2a,0x14,0x0a,0xf6,0xb5,0x6b,0xd7,0x10,
+ 0x45,0x51,0xa2,0x64,0xbf,0xf5,0x8f,0x58,0x1c,0xc7,0x07,0xac,0x0f,0x34,
+ 0xc6,0x20,0x8a,0x22,0x05,0x00,0x56,0x3e,0x9f,0xff,0xfc,0xf8,0xf1,0xe3,
+ 0x93,0x00,0x2c,0xad,0xb5,0x51,0x4a,0x99,0x28,0x8a,0x62,0x22,0x12,0xcc,
+ 0x4c,0x83,0xc0,0x01,0x30,0x07,0x41,0xa0,0x95,0x52,0xe6,0x4d,0xdf,0x59,
+ 0x29,0xc5,0xab,0xab,0xab,0x5b,0x0b,0x0b,0x0b,0x3f,0x79,0x9e,0xb7,0x45,
+ 0x8e,0xe3,0x1c,0x9d,0x98,0x98,0x38,0x7f,0xe8,0xd0,0xa1,0x63,0xc6,0x18,
+ 0x93,0xcd,0x66,0x8f,0xcc,0xce,0xce,0x9e,0xbf,0x74,0xe9,0xd2,0xd7,0xc5,
+ 0x62,0x51,0x0e,0xaa,0x32,0xc6,0x80,0x99,0xb1,0xb7,0xb7,0x67,0x96,0x97,
+ 0x97,0x1f,0xdd,0xbf,0x7f,0x7f,0xa9,0xd1,0x68,0x94,0x89,0x88,0xb4,0xd6,
+ 0x71,0xa5,0x52,0xf9,0xbb,0xd3,0xe9,0xfc,0x01,0xe0,0xed,0xd2,0x00,0x80,
+ 0xc9,0xc9,0xc9,0x2f,0xe7,0xe6,0xe6,0x7e,0xab,0xd5,0x6a,0x7e,0xa5,0x52,
+ 0xe1,0x6a,0xb5,0xca,0xcd,0x66,0x93,0x5b,0xad,0x16,0xb7,0x5a,0x2d,0x6e,
+ 0x36,0x9b,0xbc,0xbd,0xbd,0xcd,0xe5,0x72,0x99,0xdb,0xed,0xb6,0x2e,0x95,
+ 0x4a,0x8f,0x2f,0x5e,0xbc,0xf8,0x1d,0x11,0x59,0xff,0xb7,0x48,0xec,0x5b,
+ 0xb7,0x6e,0x2d,0x30,0x33,0x6b,0xad,0xb9,0xdb,0xed,0x72,0xad,0x56,0xe3,
+ 0x9d,0x9d,0x1d,0xae,0xd7,0xeb,0x5c,0xab,0xd5,0xf8,0xc9,0x93,0x27,0xec,
+ 0xba,0x2e,0x6f,0x6c,0x6c,0x70,0x10,0x04,0xcc,0xcc,0xec,0xba,0x6e,0x63,
+ 0x6c,0x6c,0xec,0xcc,0x7e,0x5e,0x72,0xdc,0xe2,0x38,0x36,0x9b,0x9b,0x9b,
+ 0x2f,0x6a,0xb5,0x1a,0xf2,0xf9,0x3c,0x8c,0x31,0xb0,0x6d,0x3b,0xf9,0x7c,
+ 0x8d,0x31,0x10,0x42,0x60,0x64,0x64,0x04,0x8e,0xe3,0xa0,0xd7,0xeb,0x21,
+ 0x08,0x02,0xac,0xad,0xad,0x29,0xdf,0xf7,0x0f,0x28,0x1e,0x74,0xf0,0xc3,
+ 0x87,0x0f,0xff,0xd9,0xda,0xda,0xca,0x0a,0x21,0x3e,0x25,0xa2,0x8c,0x31,
+ 0x46,0x0c,0xfe,0xae,0x98,0x19,0x4a,0x29,0xec,0xed,0xed,0xf1,0xfa,0xfa,
+ 0xba,0x37,0x3f,0x3f,0xff,0xe0,0xe6,0xcd,0x9b,0x3f,0x34,0x1a,0x8d,0xdf,
+ 0x01,0xe8,0x41,0xf0,0xbb,0xb6,0x78,0xee,0xf0,0xe1,0xc3,0x67,0xa6,0xa7,
+ 0xa7,0x2f,0x4c,0x4d,0x4d,0x9d,0x1a,0x1b,0x1b,0x1b,0xcf,0xe5,0x72,0x39,
+ 0x22,0xa2,0x30,0x0c,0x75,0xb3,0xd9,0x7c,0xf1,0xf4,0xe9,0xd3,0xf2,0xc6,
+ 0xc6,0xc6,0x72,0xbd,0x5e,0x2f,0xc5,0x71,0xfc,0x78,0x3f,0x14,0x00,0xfe,
+ 0x05,0x28,0xfb,0xab,0x02,0x0e,0x36,0xd1,0x14,0x00,0x00,0x00,0x00,0x49,
+ 0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_label_png_len = 953;
+static const unsigned char small_label_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x03,0x4b,0x49,0x44,0x41,0x54,0x48,0xc7,0xb5,0x94,
+ 0x6d,0x48,0x53,0x61,0x14,0xc7,0x97,0x99,0x58,0xcd,0x0a,0x87,0x32,0x97,
+ 0x89,0x53,0xb0,0x51,0x8d,0x8c,0x04,0xcb,0x24,0xa7,0x6b,0x95,0x61,0x7e,
+ 0xc9,0xb2,0x08,0xd2,0xe9,0xb2,0x08,0xf4,0x8b,0x04,0x7d,0x88,0x0a,0x5a,
+ 0xa4,0x11,0x44,0x51,0x69,0x91,0xa1,0x29,0xa1,0x26,0x6a,0xa1,0x89,0x0a,
+ 0x42,0x2f,0x90,0x51,0x68,0xf3,0x2d,0x28,0x2a,0x2a,0x7b,0x5b,0xea,0xdc,
+ 0x96,0xd3,0x6a,0xdb,0xbf,0xf3,0x6c,0xf7,0xda,0x36,0xef,0xac,0x3e,0x74,
+ 0xe0,0xc7,0x1e,0x2e,0x77,0xbf,0x9d,0x9d,0x73,0x9e,0x23,0x02,0x20,0xfa,
+ 0x1f,0xfc,0x3e,0x88,0x44,0x73,0x72,0x72,0x72,0xa0,0xd5,0x6a,0xa1,0xd3,
+ 0xe9,0xbc,0x60,0xcf,0x55,0x2a,0x15,0xe4,0x72,0xf9,0x9e,0xe0,0xe0,0xe0,
+ 0xf9,0xf4,0x6e,0xc0,0xbf,0x88,0xb3,0x35,0x1a,0x0d,0xda,0x4a,0x77,0xc3,
+ 0x71,0xff,0x24,0x1c,0x0f,0x4e,0x71,0xe8,0xe1,0xe8,0x2c,0x46,0x77,0x49,
+ 0x2a,0x7b,0xa9,0x9f,0xc4,0xc9,0xf4,0xf9,0x47,0x39,0x8b,0x2c,0x02,0xbe,
+ 0x38,0x5e,0xb4,0xe1,0x67,0xcb,0x41,0x37,0x0d,0xbb,0x30,0x55,0xad,0x86,
+ 0x54,0x2a,0x75,0x28,0x14,0x8a,0x67,0xb1,0xb1,0xb1,0x7b,0xc5,0x62,0xf1,
+ 0x92,0xd9,0xe4,0x22,0x4e,0xc4,0xe4,0x0b,0x93,0x92,0x92,0x30,0x75,0xa7,
+ 0x00,0xf6,0xa1,0x66,0xb4,0x96,0x1d,0xc1,0xe4,0x8d,0xb4,0x69,0xa6,0x6a,
+ 0x33,0x61,0xba,0x7b,0x04,0x5d,0x7a,0x35,0x28,0x6b,0x63,0x40,0x40,0x40,
+ 0x36,0x7d,0x67,0x01,0x31,0xd7,0x6f,0xc6,0xdc,0x21,0x84,0x89,0x27,0x9a,
+ 0xf7,0xe3,0x5b,0xdd,0x4e,0x58,0x2b,0x53,0x7f,0x53,0xb5,0x09,0x43,0x2d,
+ 0xe7,0xf1,0xe6,0x61,0x1d,0x2c,0x55,0x9b,0x11,0x1a,0x1a,0xea,0xa4,0x7a,
+ 0x77,0xcb,0x64,0xb2,0x4d,0xfe,0xca,0x32,0x43,0x6c,0x69,0xc8,0x83,0xf9,
+ 0xe6,0x0e,0x8c,0x5d,0x53,0xc1,0x54,0xe1,0xa6,0xbf,0xe9,0x0c,0x7a,0x7a,
+ 0x7a,0x30,0x3c,0xfc,0x1e,0xc6,0xc1,0x7b,0x30,0x75,0x9c,0x40,0x93,0x3e,
+ 0x8b,0x35,0x73,0x5c,0x22,0x91,0xe4,0x71,0xf2,0xb9,0x7e,0xc5,0x4a,0xa5,
+ 0x12,0x23,0x55,0x99,0xf8,0x5a,0xa1,0xc1,0xa7,0xf2,0x8d,0x30,0x5e,0x4d,
+ 0x81,0xa1,0xb1,0x14,0x06,0x83,0x01,0x16,0x8b,0x05,0x0e,0x87,0x03,0x93,
+ 0x93,0x93,0x30,0xbf,0xea,0xc6,0x68,0x7d,0x3e,0xda,0x8f,0x25,0xb3,0xec,
+ 0x7b,0xc3,0xc3,0xc3,0x67,0x34,0xd4,0x4b,0xcc,0xea,0x5d,0x9c,0x11,0x85,
+ 0xe1,0xcb,0xc9,0x2e,0x7a,0x9b,0xce,0x4e,0x4b,0xf9,0x60,0x72,0xeb,0xf8,
+ 0x28,0x3e,0x3f,0x69,0xc4,0xa7,0xba,0x7c,0x5c,0x29,0xdc,0x80,0x98,0x98,
+ 0x98,0xe7,0xc4,0x01,0xcf,0x86,0xf2,0x53,0xb1,0x96,0x35,0x8f,0x58,0x49,
+ 0x38,0x1f,0xeb,0x13,0x31,0x50,0x55,0x84,0x81,0x81,0x01,0x58,0xad,0x56,
+ 0xf8,0x86,0xdd,0x6e,0x87,0xd9,0x6c,0x86,0xf1,0xe5,0x53,0x7c,0xbc,0x55,
+ 0x88,0x3b,0x87,0xe3,0x41,0xcd,0x7c,0x1f,0x18,0x18,0x98,0xce,0x97,0x85,
+ 0x4f,0x7b,0x2d,0xf7,0x60,0x39,0x51,0x51,0x98,0xbe,0x0c,0xbd,0x0d,0x25,
+ 0xf8,0x31,0x31,0x0e,0x7f,0xe1,0x74,0x3a,0xa9,0x2c,0x36,0x7c,0x78,0x7a,
+ 0x1b,0x83,0xe7,0x52,0x10,0x16,0x16,0x66,0x8f,0x8b,0x8b,0x7b,0x4c,0x35,
+ 0xdf,0xe3,0x9a,0x16,0x4e,0xbc,0x85,0x98,0x47,0x48,0x08,0x0d,0xd1,0x1c,
+ 0x14,0x14,0x64,0xeb,0xb8,0x78,0x08,0x96,0x77,0x7d,0x70,0xd2,0xdf,0x17,
+ 0x0a,0x96,0x39,0x63,0x6a,0xec,0x03,0xfa,0x4a,0x13,0x71,0xa5,0x40,0xc1,
+ 0x64,0x26,0x42,0xca,0x8b,0xe3,0x09,0x19,0x37,0x97,0x91,0x44,0x22,0x51,
+ 0x46,0xd8,0x1e,0x5d,0xd6,0xc2,0x36,0x3a,0x8c,0xd9,0xe2,0xf5,0x93,0xbb,
+ 0x38,0xbc,0x3d,0x0a,0x09,0x31,0x21,0x4c,0x76,0x9c,0x50,0x78,0x8e,0x07,
+ 0x93,0x07,0x12,0x8b,0x08,0x39,0x97,0x79,0xab,0x56,0x2d,0x47,0xd7,0xf5,
+ 0xa3,0xf8,0xf6,0xe5,0x8d,0xa0,0xf4,0x59,0x47,0x0d,0x0a,0xd4,0x91,0x58,
+ 0x1d,0x25,0x66,0x92,0x0b,0x44,0x26,0xb1,0xc6,0x77,0xa8,0x65,0x5c,0x49,
+ 0x16,0x73,0x72,0x15,0xab,0x39,0x31,0xd2,0x56,0xb2,0x03,0xa6,0xb7,0xfd,
+ 0x5e,0xd2,0xde,0x8e,0x6a,0xe4,0xa7,0xca,0xa0,0x74,0x4b,0xcb,0x89,0x5c,
+ 0x62,0x2b,0xb1,0xc2,0x57,0x1c,0xc1,0xb6,0x1c,0x27,0xe7,0x33,0x5f,0x4f,
+ 0xd4,0xeb,0xd2,0x22,0xd1,0x59,0x5e,0x8c,0xef,0x13,0x66,0x97,0xb4,0xa7,
+ 0xbd,0x1a,0x79,0x2a,0x19,0x56,0x2d,0x9b,0x96,0xe6,0x71,0xd9,0xb2,0x41,
+ 0x58,0xea,0x2b,0x8e,0xf7,0x38,0xf3,0xf2,0x68,0x62,0x3b,0x51,0x4b,0x58,
+ 0x1b,0x4f,0xef,0x83,0xa1,0xb3,0x06,0xb9,0xaa,0x08,0x21,0x69,0x02,0xd7,
+ 0xa3,0x85,0x42,0xcb,0x23,0x82,0xdf,0xcf,0x3e,0x72,0x96,0x79,0x25,0xf1,
+ 0xa3,0x88,0xc6,0x71,0xe5,0x6c,0x52,0x7e,0x8e,0x85,0xc4,0x02,0x99,0xb3,
+ 0xb2,0x64,0xb0,0x86,0x72,0x1b,0xf1,0x12,0xa1,0x15,0x92,0x7a,0x2d,0x7a,
+ 0x7f,0x72,0x8f,0xcc,0xf9,0x86,0xae,0xe3,0x4a,0xc3,0x6e,0xec,0x36,0xae,
+ 0xa6,0x5e,0x52,0xbf,0x62,0x81,0x1f,0xf2,0x94,0x47,0xbb,0xc6,0xc9,0x3d,
+ 0xeb,0x4a,0x57,0xa3,0x7c,0xa4,0x7f,0x2d,0xf6,0x91,0xb3,0x65,0x15,0xe6,
+ 0xba,0x5d,0xee,0x9b,0x2a,0xb8,0xec,0x7f,0x01,0xc8,0xec,0xb4,0x80,0x13,
+ 0x27,0x47,0xab,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,
+ 0x82
+};
+
+static const unsigned int small_lcdnumber_png_len = 558;
+static const unsigned char small_lcdnumber_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0xc0,0x49,0x44,0x41,0x54,0x38,0xcb,0xb5,0x55,
+ 0x4d,0x4b,0xc3,0x40,0x10,0xdd,0x4d,0x5b,0x6a,0xc5,0x1c,0x04,0x3d,0x49,
+ 0xa1,0xbd,0xd8,0xb3,0x50,0x90,0xea,0xaf,0xf0,0xe6,0xd5,0x83,0x08,0xfa,
+ 0x07,0xbc,0x08,0x82,0x87,0x52,0xf0,0xea,0xc9,0x83,0x77,0x11,0xfc,0x0d,
+ 0x85,0x40,0x11,0x8a,0x87,0x1e,0x8a,0x85,0x42,0x7f,0x80,0x39,0xb4,0xb4,
+ 0xb6,0xa4,0x1f,0x59,0xe7,0x2d,0xbb,0x21,0x09,0x69,0x63,0x23,0x1d,0x78,
+ 0xd9,0x9d,0xd9,0xd9,0x97,0xd9,0x61,0xf3,0xc2,0x19,0x63,0x46,0xad,0x56,
+ 0x3b,0x77,0x5d,0xf7,0xda,0xb6,0xed,0xd3,0xd1,0x68,0xc4,0xd6,0xb5,0xc1,
+ 0x60,0xc0,0x5a,0xad,0xd6,0x47,0xbb,0xdd,0x7e,0x21,0xf7,0x95,0x30,0x46,
+ 0x3c,0x53,0xad,0x56,0xad,0x6e,0xb7,0x2b,0x16,0x8b,0x45,0x62,0xd4,0xeb,
+ 0x75,0x41,0x5c,0x9f,0x84,0x43,0xc2,0x6e,0x9a,0x1e,0x29,0x54,0x5a,0x28,
+ 0x14,0x18,0x25,0xb0,0xa4,0x96,0xcb,0xe5,0x30,0x1c,0x11,0xf6,0x08,0x3f,
+ 0x92,0x18,0xc7,0x9f,0xcf,0xe7,0x4c,0x08,0x91,0x98,0x78,0x3a,0x9d,0xea,
+ 0xa9,0x49,0xc8,0x82,0x98,0xc3,0xa3,0x1e,0xc7,0x56,0x6c,0x9e,0x99,0xde,
+ 0x7c,0xf8,0x3e,0x0c,0xac,0xf9,0xf6,0xca,0x62,0x0d,0x4d,0x8c,0x05,0x00,
+ 0x9b,0xf5,0x3c,0xec,0xf7,0xdf,0xfa,0x1e,0xc2,0x79,0x28,0x4c,0x99,0xe4,
+ 0x4c,0xfb,0xdf,0x88,0x76,0xc0,0xf4,0xa8,0x2d,0xec,0x47,0xc5,0xc3,0xa7,
+ 0xdd,0x3c,0x31,0x92,0x66,0xb3,0x99,0x9c,0xeb,0x51,0x5b,0xd8,0x8f,0x8a,
+ 0x87,0x73,0x02,0xc4,0x40,0xef,0xb9,0xc7,0xf2,0x17,0x79,0x2f,0x01,0xbe,
+ 0xae,0xac,0x78,0x59,0x8c,0x8c,0xc7,0x56,0xac,0xaf,0x4c,0xe7,0xa9,0xe3,
+ 0x25,0x80,0x0c,0x7e,0xe9,0xa6,0x14,0x88,0xfb,0xae,0x57,0x64,0xbb,0x22,
+ 0x7b,0xbc,0xac,0x97,0xcb,0xd6,0x57,0x56,0x8c,0x1e,0xc5,0xf5,0x72,0xd9,
+ 0xfa,0x46,0x2b,0x5e,0x49,0x1c,0x55,0x51,0xe3,0xa1,0x21,0xe3,0x18,0xcb,
+ 0xb7,0xe5,0x40,0xbc,0x72,0x57,0x91,0x63,0xec,0x3d,0x8e,0xfb,0xa4,0xad,
+ 0x7b,0x2b,0xd0,0x53,0xf8,0x7a,0x4f,0x14,0xb1,0x80,0x9e,0xe2,0x28,0x49,
+ 0xd5,0xcd,0x71,0x1c,0xe6,0xd3,0x71,0x7c,0xdb,0x42,0x12,0x43,0xa4,0x2d,
+ 0xcb,0x3a,0x86,0xf4,0x25,0x21,0x9f,0x4c,0x26,0xac,0xd9,0x6c,0xca,0x9b,
+ 0x8a,0x76,0xe3,0x00,0x70,0xb6,0x08,0x57,0x4a,0xa4,0xc5,0x3f,0xf0,0x45,
+ 0x78,0x24,0x9c,0x10,0x0e,0xa0,0x6c,0x19,0xc2,0x0e,0x61,0x5f,0x89,0xb4,
+ 0xa9,0x5a,0x64,0xac,0x51,0xb4,0xab,0x2a,0x85,0x96,0xda,0x84,0x6f,0xae,
+ 0x08,0x40,0xbe,0xad,0x90,0x85,0x9e,0x6a,0x39,0xfd,0xa3,0x09,0x75,0x7c,
+ 0x47,0xfd,0xef,0xc6,0x1c,0x7f,0x0d,0xce,0xb9,0xa1,0xc8,0x52,0x3e,0xd2,
+ 0x75,0x89,0x35,0xb9,0xc4,0x2f,0x75,0xa7,0xa1,0xa5,0x37,0x35,0xaa,0x69,
+ 0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_lineedit_png_len = 461;
+static const unsigned char small_lineedit_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x19,0x74,0x45,0x58,0x74,0x53,
+ 0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,0x65,0x20,
+ 0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,0x65,0x3c,
+ 0x00,0x00,0x01,0x6f,0x49,0x44,0x41,0x54,0x78,0x9c,0xed,0x94,0x4d,0x4e,
+ 0xc2,0x50,0x10,0xc7,0x7f,0xd3,0x16,0x14,0x3f,0xc2,0x42,0x59,0x79,0x05,
+ 0x37,0xac,0x4c,0x3c,0x8c,0x5b,0xcf,0xe0,0x8e,0x03,0x48,0xdc,0x70,0x0b,
+ 0x0f,0xd2,0x18,0x12,0x43,0x48,0x48,0x34,0xe1,0x02,0xa4,0x2e,0xa4,0x35,
+ 0x10,0xa1,0x8f,0x71,0xd1,0x16,0x9f,0xe5,0xa3,0x96,0x04,0x57,0x4e,0x32,
+ 0x9b,0x79,0x7d,0xbf,0xf7,0x9f,0x99,0xce,0x88,0xaa,0xb2,0x0f,0x73,0xf6,
+ 0x42,0xfd,0x07,0xff,0x09,0xd8,0x03,0x10,0x11,0x17,0xb0,0x5d,0x76,0x60,
+ 0x29,0x60,0x32,0x17,0xc0,0x6d,0xb7,0xdb,0x0f,0x51,0x14,0xdd,0x04,0x41,
+ 0x50,0x8f,0xe3,0xb8,0x34,0xd1,0x18,0xc3,0x60,0x30,0x08,0x7d,0xdf,0x7f,
+ 0x04,0xee,0x80,0x0f,0x80,0x6a,0xab,0xd5,0x7a,0xd7,0x9c,0x19,0x63,0x0a,
+ 0xdd,0xfe,0x6e,0x34,0x1a,0x29,0x10,0x01,0x97,0x40,0xc3,0x03,0xdc,0x20,
+ 0x08,0xea,0x79,0x15,0x8e,0xb3,0xbd,0xfc,0x22,0x82,0xaa,0xe2,0xba,0x2e,
+ 0xaa,0xca,0x70,0x38,0x04,0x38,0x01,0xce,0x80,0xc8,0x03,0x5c,0x3b,0x7d,
+ 0x91,0xef,0xf2,0x66,0x53,0x69,0xc7,0xb2,0xb8,0xaa,0x2e,0xe1,0x00,0xf3,
+ 0xf9,0x3c,0x3b,0x3e,0x06,0xaa,0x1e,0x56,0xa3,0x9a,0xcd,0x26,0xf6,0x88,
+ 0xdb,0x17,0x37,0xc5,0x33,0x9b,0xcd,0x66,0xcb,0x64,0x01,0xf1,0xec,0xc3,
+ 0x5e,0xaf,0xb7,0xa2,0x6e,0x5b,0x26,0xb6,0x59,0x8a,0x05,0xd2,0xdf,0x2d,
+ 0x9f,0x66,0x11,0xac,0x40,0x31,0x6b,0xc1,0x9b,0xac,0x48,0xf1,0x56,0x70,
+ 0xfe,0xc2,0xba,0xfa,0xda,0x0f,0xd9,0x0d,0xcc,0x83,0x1d,0x40,0xc7,0xe3,
+ 0xf1,0x6f,0x85,0x6f,0x7c,0x34,0x0c,0xc3,0xec,0x68,0x01,0xa8,0x07,0x68,
+ 0xbf,0xdf,0x7f,0xea,0x74,0x3a,0x57,0xb5,0x5a,0x0d,0x63,0x4c,0xe9,0x47,
+ 0xa6,0xd3,0x29,0xdd,0x6e,0x17,0xe0,0x15,0x88,0x49,0xc6,0x9a,0x43,0xe0,
+ 0x16,0x78,0x26,0x99,0xf7,0x5d,0xfd,0x05,0xb8,0x07,0xae,0x81,0x0b,0x01,
+ 0x2a,0x24,0x13,0xd3,0x00,0xce,0x81,0x53,0x92,0xda,0x97,0xd9,0x7c,0x8b,
+ 0x54,0x69,0x04,0xbc,0x01,0x81,0xa4,0x80,0x0a,0x70,0x94,0xfa,0x01,0xe5,
+ 0x37,0x5c,0xb6,0xd9,0x3e,0x81,0x09,0x30,0x91,0xb4,0xb3,0x0e,0xab,0x6b,
+ 0xb3,0x2c,0xf8,0xc7,0xda,0xfc,0x02,0xf9,0x12,0x02,0x4b,0xeb,0xbb,0x9d,
+ 0xd4,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_line_png_len = 287;
+static const unsigned char small_line_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x04,0x00,0x00,
+ 0x00,0x6e,0xbd,0xa4,0xb0,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x00,0xb1,0x49,0x44,0x41,0x54,0x28,0xcf,0xb5,0x93,
+ 0xb1,0x0a,0x83,0x30,0x14,0x45,0x8f,0x98,0x60,0x30,0x75,0x70,0xb0,0x90,
+ 0xa5,0x43,0x0a,0x1d,0x14,0x0b,0xc5,0x45,0x4a,0x07,0x41,0xd7,0xd2,0xff,
+ 0xff,0x9a,0x74,0x8c,0xd8,0x18,0x54,0x28,0x67,0x3d,0x3c,0xee,0x7d,0x79,
+ 0xc1,0xb1,0x1d,0x0e,0xc8,0x24,0x08,0x14,0x9a,0x22,0x80,0x46,0x21,0x48,
+ 0xbc,0x9c,0x9e,0x63,0x23,0x4b,0x14,0xa9,0x97,0x05,0x05,0x06,0xcb,0x2d,
+ 0x80,0xc5,0x50,0x20,0x0e,0xca,0xf2,0xe9,0xae,0x2b,0xe0,0xb0,0x94,0x48,
+ 0x2f,0x67,0xd1,0x35,0xd4,0x54,0x64,0x73,0xb9,0xa2,0xa6,0x67,0x08,0xd0,
+ 0x2f,0x65,0x49,0x89,0xa5,0xa5,0x0b,0xd0,0x2e,0x63,0xc8,0x8f,0x1b,0xdd,
+ 0x10,0xa0,0x09,0x64,0x56,0x77,0x77,0x5a,0xcf,0xdc,0x61,0x50,0x5e,0xce,
+ 0xa3,0x05,0x5f,0x5c,0xc8,0x67,0x93,0x31,0x74,0x4c,0xbc,0x03,0x4c,0xcb,
+ 0xc9,0x7f,0x2c,0x38,0xba,0xc7,0xda,0xfb,0xfd,0x14,0xd4,0x4d,0xac,0xe0,
+ 0x84,0x45,0xcf,0x64,0x76,0xc8,0xbb,0xb6,0xb1,0xeb,0x44,0x37,0x7d,0xab,
+ 0x2f,0x16,0x3a,0x2d,0xfe,0x87,0x4f,0x5c,0x7f,0x00,0x00,0x00,0x00,0x49,
+ 0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_listbox_png_len = 386;
+static const unsigned char small_listbox_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x04,0x00,0x00,
+ 0x00,0x6e,0xbd,0xa4,0xb0,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0x14,0x49,0x44,0x41,0x54,0x28,0xcf,0x8d,0x93,
+ 0xbf,0x2b,0x84,0x61,0x00,0xc7,0x3f,0x99,0x94,0x2c,0xb7,0x29,0xbb,0x4d,
+ 0x5d,0x36,0xf3,0x2b,0xa5,0x2e,0x3f,0x16,0x65,0x34,0x59,0xcc,0xfe,0x07,
+ 0xd9,0xe5,0x4a,0xe4,0x16,0xc3,0x95,0xb2,0x28,0x59,0x5e,0x77,0x48,0x14,
+ 0x57,0xba,0x84,0xa2,0x2b,0xca,0xf2,0xc6,0x66,0xfb,0x18,0xde,0xc3,0x43,
+ 0xdd,0xf3,0xea,0x53,0xdf,0xe7,0xfb,0xd4,0xa7,0x6f,0xcf,0xf2,0xc0,0x02,
+ 0xb7,0x58,0xc8,0x3d,0x4b,0x94,0xa0,0xd9,0xf0,0xa3,0x90,0x86,0x5c,0x31,
+ 0x02,0x66,0x66,0xd6,0xff,0x64,0xdd,0xba,0x59,0xb0,0x9c,0x89,0x8c,0x83,
+ 0x1d,0x3b,0xd6,0xbe,0x33,0x6f,0x5f,0x3d,0x57,0x6b,0x76,0x44,0x26,0xc1,
+ 0xb6,0x6d,0xab,0x56,0x6d,0x5b,0xed,0xf6,0x30,0xe9,0x36,0x64,0x0a,0xce,
+ 0x37,0x3d,0xb3,0xe9,0xb1,0xa9,0xa9,0xa9,0xab,0xdd,0x33,0xfd,0x75,0x5f,
+ 0x97,0x3b,0x2a,0xb0,0xc4,0xd3,0xb4,0x13,0x26,0x51,0xca,0x22,0x15,0x28,
+ 0x31,0x3a,0xe1,0xbb,0x6f,0x51,0x32,0x91,0x39,0xe8,0x67,0x38,0x31,0x73,
+ 0xde,0x65,0x57,0x7a,0x72,0x23,0x32,0x0b,0x7d,0x94,0x12,0x5f,0x7d,0x89,
+ 0x72,0x2d,0x32,0x83,0x30,0x98,0xf8,0xec,0xa2,0x6b,0x6e,0xf7,0xe4,0x32,
+ 0x7f,0x73,0x2e,0x3f,0xfa,0x10,0xe5,0x2c,0x94,0xef,0x0b,0x96,0x8f,0x43,
+ 0xb9,0x6d,0x2b,0xca,0x51,0x28,0xb7,0x0a,0x96,0x0f,0x42,0xf9,0xc2,0x93,
+ 0x28,0xfb,0xa1,0x7c,0x5a,0xb0,0x5c,0x0f,0xe5,0xd4,0xc3,0x28,0xbb,0xa1,
+ 0x7c,0x54,0xb0,0xbc,0xf3,0x23,0x97,0xdd,0x73,0x2b,0xca,0xc6,0xb7,0x3c,
+ 0xf0,0x8f,0x3f,0x28,0x92,0x20,0xf4,0x33,0xc4,0x18,0x09,0x95,0x28,0x09,
+ 0x63,0x9f,0xe1,0x1b,0x9b,0x55,0xd0,0xe5,0xa7,0x9c,0x00,0x00,0x00,0x00,
+ 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_listview_png_len = 759;
+static const unsigned char small_listview_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x02,0x89,0x49,0x44,0x41,0x54,0x48,0xc7,0xb5,0x95,
+ 0x4d,0x48,0x14,0x61,0x1c,0xc6,0x7f,0xba,0xe3,0xee,0xb6,0xee,0xb6,0x7e,
+ 0x80,0x34,0xb4,0x5b,0x56,0x14,0x85,0x21,0xb5,0x06,0x06,0x96,0x85,0x95,
+ 0x1e,0xb2,0x50,0x48,0xf2,0x60,0x87,0x0d,0xc1,0x4b,0x44,0x6d,0x91,0xae,
+ 0x9b,0xc5,0xb2,0x78,0xe8,0xd0,0xa9,0xc5,0x8f,0xa4,0x43,0x1f,0xe7,0xba,
+ 0x44,0xa7,0x2e,0x8a,0x74,0xea,0xb6,0xe8,0x4d,0x06,0xa5,0x25,0x03,0x41,
+ 0x48,0x11,0x4f,0x3e,0x1d,0x7c,0x0d,0x5d,0x74,0x2b,0x97,0x06,0xfe,0x33,
+ 0xcc,0x30,0xef,0x6f,0x9e,0x77,0xde,0xe7,0xf9,0xbf,0x48,0xe2,0x7f,0xd4,
+ 0xfa,0x09,0x8a,0x00,0x17,0x60,0x99,0x2a,0xfe,0xab,0xc1,0x5b,0xc7,0x95,
+ 0x98,0x72,0x99,0xe7,0x14,0x01,0xa7,0x29,0x26,0x01,0x0c,0x01,0x36,0x10,
+ 0x04,0x7c,0x9b,0x5f,0xdc,0x01,0x7a,0x26,0x18,0x0c,0x3e,0xf1,0x7a,0xbd,
+ 0x8f,0x2d,0xcb,0x4a,0x02,0xb7,0x80,0x32,0x60,0x0f,0x80,0x87,0x1a,0xbe,
+ 0x8e,0x8e,0x0f,0xab,0x2c,0x59,0x29,0x6a,0xf8,0xc6,0x61,0x3e,0xe0,0xe7,
+ 0x25,0x70,0x1c,0xd8,0x0b,0xb8,0x73,0xe1,0x80,0xcb,0xb6,0xed,0xe1,0xe5,
+ 0xe5,0x65,0x49,0x52,0x26,0x93,0x51,0x38,0x1c,0x16,0x90,0x58,0x17,0xd7,
+ 0x81,0xb8,0x86,0xb8,0x88,0xba,0x87,0xda,0x95,0xfa,0x94,0xd2,0xd5,0x77,
+ 0xed,0x7a,0x30,0x19,0x13,0x8d,0xfc,0x00,0x0e,0x99,0x19,0x58,0x39,0xe0,
+ 0x92,0x40,0x20,0xf0,0x42,0xe6,0x98,0x9d,0x9d,0x55,0x5b,0x5b,0x9b,0xaa,
+ 0xab,0xab,0x05,0x5c,0x81,0x7a,0x26,0x27,0xd6,0xc6,0x65,0x8f,0x96,0x89,
+ 0x93,0x88,0x0b,0xa8,0x3b,0xdd,0xa1,0xe4,0x97,0xa4,0x88,0x22,0xa0,0x1e,
+ 0xd8,0x0f,0x78,0x73,0xc0,0x6e,0x9f,0xcf,0x97,0x5e,0x58,0x58,0xd0,0xea,
+ 0xea,0xaa,0x96,0x96,0x96,0x24,0x49,0x83,0x83,0x83,0x02,0xee,0x03,0xd4,
+ 0x31,0x80,0x24,0x69,0x2c,0x3b,0x26,0x62,0x88,0x08,0xba,0xfd,0xf6,0xa6,
+ 0x68,0x61,0x0d,0x68,0x06,0x04,0x94,0x02,0x32,0x50,0x01,0x1e,0x9f,0xcf,
+ 0x97,0x76,0x1c,0x47,0xf3,0xf3,0xf3,0x9a,0x9b,0x9b,0x93,0x24,0x25,0x12,
+ 0x09,0x01,0xbd,0x00,0x15,0xc0,0x00,0xbd,0x28,0x95,0x79,0xaa,0x37,0xdf,
+ 0x5f,0xab,0xf9,0x63,0xb3,0xb8,0x87,0xa8,0x43,0x40,0x2b,0x70,0x0c,0xf0,
+ 0xe7,0x28,0xf6,0xf8,0xfd,0xfe,0xf4,0xd4,0xd4,0x94,0x66,0x66,0x66,0x34,
+ 0x3d,0x3d,0xad,0xc5,0xc5,0x45,0xc5,0x62,0x31,0x01,0x71,0xcc,0x0a,0xda,
+ 0xc0,0x0d,0x2c,0x3e,0x13,0x45,0x97,0xdf,0x37,0xea,0xc0,0x48,0x48,0x54,
+ 0x6d,0x01,0x07,0x36,0x14,0x6f,0x80,0x43,0xa1,0xd0,0x2b,0xc7,0x71,0x94,
+ 0xcd,0x66,0xe5,0x38,0x8e,0x56,0x56,0x56,0x14,0x8f,0xc7,0x05,0x0c,0x60,
+ 0xec,0xe4,0x33,0xf0,0x1a,0x20,0x8a,0xc5,0x04,0x0d,0x08,0xf8,0x09,0x34,
+ 0x99,0x05,0x2c,0xcd,0xfd,0xc7,0x96,0x65,0xa5,0xa3,0xd1,0xa8,0xba,0xba,
+ 0xba,0xd4,0xd9,0xd9,0xa9,0x9e,0x9e,0x1e,0x45,0x22,0x11,0x01,0xfd,0xbf,
+ 0xad,0x63,0x94,0x57,0x00,0x07,0x81,0x5a,0xe0,0x1c,0x70,0x1e,0x38,0x65,
+ 0x3e,0xea,0xcd,0x51,0x5c,0x02,0x54,0x02,0xd7,0x81,0xbb,0xc0,0x43,0x63,
+ 0xb5,0x3e,0xe0,0x52,0xae,0xe1,0x2d,0xa3,0xbe,0xc2,0x38,0x21,0x0c,0xec,
+ 0x03,0xfc,0xdb,0xd8,0xcd,0x05,0x34,0x04,0x02,0x81,0x67,0x6e,0xb7,0xfb,
+ 0xb9,0x65,0x59,0x43,0x40,0x3f,0x70,0x16,0x38,0xb1,0x53,0x4c,0x2d,0xc0,
+ 0x63,0x66,0xe1,0x35,0xf7,0x45,0x39,0x8a,0x5d,0xb6,0x6d,0x8f,0x6c,0x13,
+ 0x90,0x14,0x70,0x74,0xf7,0x4d,0x26,0x7f,0x40,0x5a,0xfe,0x15,0xb6,0xd9,
+ 0xc7,0xf9,0x03,0x52,0x80,0xe2,0xfc,0x01,0x29,0x04,0x9c,0x37,0x20,0x85,
+ 0x80,0xf3,0x06,0xa4,0x00,0xf0,0x9f,0x03,0xb2,0x5b,0x57,0x18,0xbf,0xb7,
+ 0x02,0x77,0x4c,0x47,0xeb,0x03,0x1e,0x01,0x4d,0x85,0x80,0x8b,0x8d,0xcf,
+ 0xab,0x80,0x23,0xa6,0x1d,0xd4,0x9a,0xeb,0xa1,0xc2,0x36,0xcc,0xf5,0xf4,
+ 0x79,0x4d,0x83,0x2a,0x37,0x33,0x28,0x07,0x02,0xbf,0x00,0x34,0xf2,0x8f,
+ 0x1f,0xa8,0x5e,0xd8,0x06,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,
+ 0x42,0x60,0x82
+};
+
+static const unsigned int small_multilineedit_png_len = 454;
+static const unsigned char small_multilineedit_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x04,0x00,0x00,
+ 0x00,0x6e,0xbd,0xa4,0xb0,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0x58,0x49,0x44,0x41,0x54,0x28,0xcf,0x7d,0xd2,
+ 0x31,0x6a,0x1b,0x41,0x14,0x87,0xf1,0x9f,0xb4,0x83,0x8d,0x02,0x82,0x14,
+ 0x3a,0x40,0x52,0xb9,0x36,0x08,0x4c,0x50,0x91,0x53,0x04,0x72,0x06,0x57,
+ 0xb9,0x46,0x4e,0xa1,0xde,0x75,0x7a,0x37,0x02,0x61,0x30,0x21,0x18,0x62,
+ 0xa2,0x5a,0x4d,0xc0,0x2a,0x62,0x56,0x96,0x90,0x77,0x67,0x37,0x85,0x46,
+ 0xeb,0xb5,0x6c,0x6b,0x9a,0xf7,0x31,0xf3,0xf1,0xe7,0xbd,0xb7,0x1b,0x74,
+ 0xbf,0x7f,0xad,0xce,0x17,0xa3,0xa5,0xb7,0xce,0xbd,0x9b,0xab,0xdb,0xb1,
+ 0x0b,0xab,0x20,0xab,0xce,0xbf,0x8c,0x3e,0x3a,0x74,0x26,0x67,0x9f,0x8f,
+ 0x5c,0xba,0x0b,0xb2,0xc5,0xe8,0x83,0x78,0x50,0xee,0x71,0x6a,0xe0,0x21,
+ 0xc8,0x96,0x4a,0xb5,0x1e,0x58,0x6f,0x9f,0x5a,0xbc,0xd6,0x33,0x81,0xbe,
+ 0xe3,0xa0,0x43,0xe5,0x9d,0x3c,0x65,0xe4,0xb4,0x38,0xd7,0x93,0xfb,0x09,
+ 0x41,0x16,0x74,0x88,0xe8,0xa7,0xbc,0x27,0xfe,0x97,0x9a,0x8b,0x2a,0xe8,
+ 0xea,0x84,0x9d,0xb0,0x00,0x03,0x65,0xc3,0xef,0x53,0x2d,0x9b,0x89,0x1a,
+ 0xb9,0x4c,0x17,0x25,0x06,0xe0,0x6f,0xba,0xdb,0x93,0x4b,0x73,0x05,0x98,
+ 0x2b,0xcc,0xd3,0x53,0xd1,0xd4,0xe2,0xb9,0x5c,0x1e,0x58,0xdc,0x8b,0xe4,
+ 0x47,0x27,0x60,0x46,0xa2,0x2d,0xc3,0x63,0x13,0x95,0x7a,0x3e,0xf1,0x1b,
+ 0x52,0x6d,0xf3,0x8b,0xe4,0xa2,0xe9,0xf0,0x57,0x8b,0x77,0xb5,0xd8,0x4f,
+ 0xde,0x6d,0x63,0xe8,0x7a,0x6f,0x33,0xed,0x89,0x92,0x3c,0x35,0x04,0x53,
+ 0x05,0x2d,0xfe,0x64,0x6a,0x68,0xfc,0x5c,0x8e,0xdb,0xef,0x2f,0x92,0x68,
+ 0xc7,0xd1,0xc4,0x9f,0x46,0xae,0xef,0x5b,0x23,0xbc,0x76,0x36,0x96,0x50,
+ 0xa9,0x83,0xfa,0xe6,0x6a,0x72,0xd6,0x3b,0xa0,0xaf,0x5d,0x33,0x53,0x8a,
+ 0x41,0xbc,0x1d,0x7f,0x3b,0x72,0x7a,0xf0,0x87,0x9e,0xf9,0x21,0xb7,0x09,
+ 0xa2,0x0b,0x97,0x06,0xfa,0x82,0xee,0xab,0x6a,0xa5,0x94,0x5b,0x58,0x05,
+ 0xd1,0xca,0x9d,0x07,0xc7,0x32,0x9d,0x57,0xe5,0x5a,0xb4,0xb1,0xb2,0x0a,
+ 0x75,0xd5,0x29,0x2c,0xad,0x65,0x3a,0x6f,0xca,0xb5,0x28,0x8a,0xff,0x01,
+ 0x48,0x40,0x9e,0xd7,0x6c,0x2b,0x5f,0xd2,0x00,0x00,0x00,0x00,0x49,0x45,
+ 0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_ordertool_png_len = 587;
+static const unsigned char small_ordertool_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0xdd,0x49,0x44,0x41,0x54,0x48,0xc7,0xcd,0x94,
+ 0xcb,0x4b,0x42,0x41,0x14,0xc6,0x2d,0x1f,0x3d,0x7c,0x44,0xe1,0x4d,0x7b,
+ 0xa0,0x11,0x98,0x62,0x59,0x41,0x11,0x11,0x3d,0x4c,0x6c,0x23,0x85,0x62,
+ 0x0b,0x91,0x56,0xfd,0x11,0x51,0xbb,0x56,0xd5,0x2e,0x0b,0xc4,0x45,0x50,
+ 0x10,0xb8,0xa8,0xb4,0x45,0xb4,0x28,0x82,0x82,0x88,0xa0,0x4d,0xbb,0x36,
+ 0xfd,0x35,0xa7,0x33,0xf1,0x4d,0x4c,0x17,0x93,0x1a,0x37,0x5d,0xf8,0x71,
+ 0x19,0x66,0xee,0x37,0xdf,0x39,0xf3,0xdd,0xb1,0x10,0x91,0x45,0xc2,0x4f,
+ 0x13,0x63,0x65,0x6c,0x78,0x37,0xa9,0xf3,0x7f,0xc1,0x2c,0xda,0xc2,0x88,
+ 0x41,0x07,0xd3,0xae,0x6c,0xe0,0xc0,0xd8,0xc5,0xb8,0xeb,0xe0,0xc2,0x3a,
+ 0x87,0x2a,0x6c,0x85,0xa8,0x20,0xc8,0x78,0x19,0x67,0x3e,0x9f,0xdf,0xc9,
+ 0x66,0xb3,0x94,0x4c,0x26,0xeb,0x92,0x48,0x24,0x28,0x12,0x89,0x88,0x6f,
+ 0x0b,0x8c,0xa1,0x0a,0xdb,0x20,0x26,0x06,0x51,0xa6,0x8f,0xe9,0xcc,0x64,
+ 0x32,0x74,0x78,0xb1,0x40,0x07,0x97,0xc3,0x54,0xa8,0x46,0xa9,0x78,0x35,
+ 0x46,0x47,0x37,0xd3,0x74,0xfa,0xb0,0x48,0xe7,0xcf,0x29,0xba,0x7a,0x5d,
+ 0xa5,0xdb,0xb7,0x35,0xba,0x7f,0x5f,0xa7,0xea,0xcb,0xb2,0x34,0x16,0x33,
+ 0x3b,0xee,0xc2,0xc4,0x08,0xd3,0xcf,0x74,0x0b,0x17,0x9b,0xa5,0x66,0xda,
+ 0x28,0x36,0xd3,0x56,0xa9,0x9d,0xb6,0x8f,0x0d,0xda,0x2b,0x0f,0xd0,0x7e,
+ 0x25,0x4a,0xa5,0xeb,0x49,0x3a,0xb9,0x9b,0xa7,0xf2,0xe3,0x12,0x9d,0x3d,
+ 0xa5,0xd8,0x40,0x5c,0x0a,0xcf,0x99,0x7b,0xec,0xc1,0x44,0x88,0xf1,0xa3,
+ 0x82,0x82,0xd2,0xa2,0xdf,0x50,0xf9,0x26,0x0c,0xf1,0x56,0x51,0x3e,0xd3,
+ 0x83,0xb7,0xe7,0xb3,0x5f,0xa2,0x34,0x8b,0x25,0xce,0xa4,0x98,0x95,0x3a,
+ 0xa4,0xb0,0x2e,0x26,0x9d,0xda,0x20,0xda,0x01,0x97,0x06,0x4e,0xb9,0x15,
+ 0xa7,0x6c,0xe0,0x40,0x45,0x25,0x43,0x75,0x08,0x61,0x9d,0x61,0x4e,0x83,
+ 0xc4,0x8f,0x4d,0x5a,0x80,0x0b,0x1b,0xfa,0x50,0xcd,0x4f,0xf8,0xb0,0xce,
+ 0x25,0xd3,0x20,0x4a,0x0e,0x20,0x0d,0xa3,0x10,0x17,0x0b,0x3d,0xb9,0x5c,
+ 0x6e,0x57,0x2b,0x6e,0x8a,0xb0,0xea,0x38,0x8a,0x8d,0xbc,0xe9,0x74,0x5a,
+ 0x2f,0x6e,0xfc,0xd8,0x31,0x10,0x3d,0x9a,0x62,0x66,0x99,0x09,0x66,0x50,
+ 0x94,0xa6,0x1d,0x37,0xe5,0x37,0x36,0x13,0x40,0xcf,0x0e,0xb5,0xe2,0x06,
+ 0x61,0x2f,0x1c,0x8f,0xc3,0xed,0x57,0x2b,0xd0,0x6b,0xad,0xb8,0xd9,0x91,
+ 0x80,0x80,0x12,0xa7,0xa0,0x12,0x39,0xb7,0x6e,0xdc,0x6c,0x35,0xca,0x91,
+ 0x93,0x22,0xc3,0x6d,0xff,0x2e,0x6e,0xe2,0x07,0x71,0x9a,0x1c,0xc7,0x64,
+ 0x2a,0x1a,0x89,0x9b,0x15,0x7d,0x0c,0xe0,0xf0,0x66,0x94,0xf8,0xf5,0x86,
+ 0xc3,0x61,0xed,0xb8,0xd5,0xfa,0xa5,0xa5,0xe3,0x9e,0x46,0xe2,0x56,0xab,
+ 0xc7,0x11,0xe5,0x86,0xf3,0xeb,0xc6,0xcd,0xaa,0x5c,0x97,0x3e,0xe5,0x1e,
+ 0x96,0xb7,0x9b,0x53,0x27,0x6e,0x1f,0xac,0x71,0xb5,0x00,0x3b,0xb1,0x41,
+ 0x4e,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_pixlabel_png_len = 1229;
+static const unsigned char small_pixlabel_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x04,0x5f,0x49,0x44,0x41,0x54,0x48,0xc7,0xa5,0x95,
+ 0x4d,0x6c,0x54,0x55,0x18,0x86,0x9f,0x73,0xee,0x99,0x3b,0x3f,0xbd,0xed,
+ 0xf4,0x8f,0xb6,0xd2,0x00,0xa2,0x06,0x44,0x50,0x04,0x13,0x09,0x6d,0xd0,
+ 0x08,0x9a,0x20,0xba,0x21,0x2e,0x34,0x31,0x2c,0xd4,0x44,0x23,0x71,0xe7,
+ 0xa2,0x1b,0x13,0xe3,0x4e,0x13,0x37,0x2e,0x4d,0x4c,0xdc,0xe8,0x42,0xe2,
+ 0xa6,0x75,0x21,0x4a,0x42,0x11,0x21,0x14,0x4d,0xac,0x05,0x3a,0xd3,0x29,
+ 0xfd,0x9d,0x76,0x6a,0xe7,0xa7,0xe3,0x30,0xb7,0x73,0x3b,0x73,0x7f,0xce,
+ 0x75,0x41,0x8b,0x12,0x4b,0x22,0xf1,0x4b,0xbe,0xe4,0xac,0x9e,0xf3,0x9e,
+ 0xf7,0xfd,0xf2,0x1d,0x01,0xc8,0x81,0x81,0x81,0xd7,0xb4,0xd6,0xa7,0x4b,
+ 0xa5,0x52,0xbf,0x6d,0xdb,0xdc,0x6f,0x55,0xab,0x55,0x52,0xa9,0xd4,0xd5,
+ 0xc5,0xc5,0xc5,0x2f,0x81,0x33,0x80,0xa3,0x00,0x43,0x6b,0x7d,0x3a,0xf1,
+ 0xf0,0x33,0xfd,0x2d,0x3b,0x93,0xc4,0x02,0xe8,0xe9,0xdd,0x4e,0x61,0xe2,
+ 0x22,0x4b,0xdf,0x7d,0xc6,0xc0,0x7b,0x47,0xd9,0xff,0xf2,0x2b,0x48,0xd3,
+ 0x22,0x0c,0x5d,0x90,0x02,0xaf,0x3a,0x4b,0xf5,0x7a,0x9a,0x0b,0x67,0xc6,
+ 0xf8,0x61,0xba,0xcc,0xd2,0xad,0x55,0x2a,0xc5,0x95,0x43,0x80,0x09,0x0c,
+ 0x03,0x45,0x05,0x18,0xa5,0x52,0xa9,0xbf,0x7b,0xff,0x83,0x4c,0x64,0x72,
+ 0x24,0xac,0x24,0x2d,0x35,0x9b,0x5f,0x07,0xbf,0x40,0xdf,0x1c,0xa3,0x51,
+ 0xdd,0xcd,0xad,0x95,0x09,0x94,0x61,0x10,0xaa,0x28,0x0d,0xaf,0x86,0xbb,
+ 0xb2,0x40,0x39,0x73,0x0d,0xd3,0xce,0xd1,0x9a,0xcf,0xb3,0x96,0xb7,0x91,
+ 0xc2,0x00,0x38,0x00,0x74,0x02,0x35,0x05,0x18,0xb6,0x6d,0xd3,0xa9,0x25,
+ 0x66,0x2c,0xc1,0xb6,0x9e,0x0e,0xaa,0x37,0x86,0x98,0x1d,0xbd,0xc4,0x0b,
+ 0xbb,0x7a,0xe8,0xdc,0xd2,0x8e,0x08,0x1c,0x02,0x19,0x05,0xaf,0x41,0x22,
+ 0x9e,0x24,0x12,0x8f,0xa1,0x1f,0xe9,0x65,0x4f,0x53,0x33,0xed,0xbd,0x1d,
+ 0x04,0xe7,0xa7,0x98,0x1d,0x5f,0xd8,0x70,0xa6,0x19,0x88,0x2a,0x40,0x00,
+ 0x74,0x24,0x2d,0xf6,0x9a,0x71,0x92,0x31,0x9f,0xab,0xe3,0x97,0x28,0xba,
+ 0x9a,0x9e,0xee,0x66,0xac,0x64,0x0b,0x7e,0xc5,0x26,0xb6,0xc5,0xc4,0x88,
+ 0x45,0x58,0x9d,0x9e,0xa1,0x98,0x9e,0x22,0xde,0x6e,0xa1,0xc3,0x08,0xb5,
+ 0x40,0xb2,0xea,0x7a,0x68,0x1d,0x6e,0x80,0x15,0x60,0xdc,0x01,0x37,0x3c,
+ 0x9f,0xba,0x0b,0xb5,0xf2,0x1f,0x2c,0xcf,0x4f,0x62,0x49,0x98,0xc8,0x39,
+ 0x9c,0xfd,0xea,0x0a,0xab,0xa5,0x0a,0x87,0x4e,0xee,0xe2,0x81,0xee,0x2e,
+ 0x3e,0x79,0x7f,0x90,0xee,0x96,0x28,0x91,0xf6,0x16,0x46,0xd2,0x4b,0xac,
+ 0xd6,0x1a,0x24,0x9b,0x62,0xc4,0x0c,0x41,0xf5,0x36,0x58,0x02,0x42,0x6e,
+ 0x5c,0x13,0x31,0xc0,0xb1,0x4b,0xa4,0xa6,0xb2,0x14,0x6d,0x0f,0x53,0x4a,
+ 0x0a,0xe5,0x1a,0xf3,0x0b,0x25,0xa6,0x17,0x1d,0x72,0xa3,0x39,0x66,0xa6,
+ 0x56,0xf0,0x9c,0x3a,0x27,0x4e,0x1d,0xa6,0xe6,0xb9,0x74,0xb7,0x18,0xbc,
+ 0xf5,0xf6,0x11,0x8e,0x3e,0xf5,0x10,0x8a,0xf0,0xae,0x49,0x51,0x1b,0x87,
+ 0xd1,0x8b,0x83,0x5c,0x1e,0x3e,0xcb,0xf6,0xc7,0xfa,0x08,0x35,0x54,0x7c,
+ 0xcd,0x1b,0x27,0x9f,0xe0,0xf9,0x63,0x7b,0x98,0x4f,0x2d,0xb2,0xf5,0x60,
+ 0x37,0xa5,0x45,0xcd,0x73,0x47,0xb6,0xd1,0xf9,0xa8,0xc5,0xab,0x6f,0xf6,
+ 0x61,0xb6,0x25,0xe9,0xea,0x68,0xe6,0x9b,0xcc,0x59,0xbc,0x80,0xcd,0xc1,
+ 0x85,0xcc,0x15,0xec,0xfc,0x1c,0x2b,0x4e,0x16,0x51,0x2f,0xa3,0x91,0xe0,
+ 0x37,0xd8,0x7a,0x60,0x17,0x3d,0x7d,0x87,0x09,0x5c,0x1b,0xa3,0x3e,0x4d,
+ 0xbc,0x6f,0x07,0xed,0x7b,0x0f,0xd2,0x75,0x78,0x0f,0xee,0x4a,0x9a,0xb9,
+ 0x33,0x3f,0x92,0xca,0x94,0x68,0x48,0xb1,0x39,0xd8,0xad,0xdd,0x22,0x74,
+ 0x6d,0xca,0x79,0x9b,0x78,0x00,0x0a,0xcd,0x8d,0xf4,0x32,0x9e,0x5d,0xa7,
+ 0x5e,0xaf,0x10,0x8d,0x59,0xa8,0x44,0x27,0x81,0xb3,0x44,0xad,0x58,0xc5,
+ 0x74,0xa7,0x70,0xa7,0xb3,0x8c,0xff,0xb2,0xcc,0x4c,0xd5,0x06,0x71,0x0f,
+ 0x2b,0x42,0xad,0xf1,0xdd,0x35,0x74,0xc3,0x05,0x0d,0xa6,0x94,0x8c,0x8e,
+ 0x97,0xc8,0x0c,0xdf,0xa0,0x7d,0x77,0x1b,0x05,0x27,0xc1,0x4f,0xe7,0x67,
+ 0x28,0x4e,0xdf,0xe4,0xdd,0x13,0xfd,0x38,0x0b,0x73,0xa4,0xcf,0x5d,0x63,
+ 0x6c,0xba,0x40,0xc5,0xf5,0x31,0xc4,0xdd,0x8a,0xef,0x84,0x67,0x28,0x85,
+ 0x94,0x06,0x52,0x4a,0x5c,0x09,0x48,0x49,0xb6,0xd6,0x60,0x74,0x68,0x9c,
+ 0xb0,0xb8,0x8a,0x8a,0x1a,0x0c,0x0f,0x5e,0xc4,0xf7,0x04,0xd9,0x73,0xa3,
+ 0xe4,0x47,0x52,0xd8,0xcb,0x36,0xe2,0x6f,0xc4,0xe6,0x60,0x1d,0x6a,0xb4,
+ 0x0e,0x11,0x4a,0x21,0x91,0x58,0x52,0x51,0xd1,0x1a,0x5b,0x19,0xcc,0x5e,
+ 0xcb,0x53,0xcb,0x15,0x38,0x75,0xec,0x49,0x74,0xc9,0xe7,0xf7,0x4b,0x29,
+ 0x64,0x73,0x1c,0x61,0x46,0x71,0x82,0x80,0x46,0x18,0x22,0xb8,0x87,0x62,
+ 0x89,0x44,0xc5,0x9a,0x88,0x98,0x71,0x4c,0x25,0xf1,0x81,0x3a,0x30,0x74,
+ 0x3d,0x4b,0xa2,0xab,0x85,0xae,0x1d,0x6d,0xe8,0x98,0x66,0xf7,0xce,0x24,
+ 0xdb,0x7b,0x3b,0xf9,0x73,0xce,0x26,0x33,0x91,0x67,0xbe,0xe2,0xb0,0xa6,
+ 0x05,0x42,0xa8,0x7b,0x80,0x23,0x26,0x66,0x53,0x3b,0x51,0xab,0x03,0xd0,
+ 0x04,0x5a,0xd3,0xa6,0x14,0x97,0x0b,0x45,0x3e,0xfe,0xfc,0x3c,0x28,0x93,
+ 0xe3,0x1f,0xbd,0xce,0xd3,0x2f,0x3d,0x4e,0xad,0xe0,0x30,0x7c,0x61,0x92,
+ 0x9f,0xa7,0x72,0x94,0x3d,0x8f,0x35,0xdf,0x47,0x87,0xfe,0xe6,0xe1,0x21,
+ 0x0d,0x54,0xa2,0x15,0x81,0x8f,0x2e,0x65,0x89,0x4a,0x4d,0x80,0xc6,0x52,
+ 0x26,0xdf,0xcf,0x15,0xf9,0xe0,0xc3,0x6f,0x79,0xf1,0xd9,0x7d,0xcc,0x8f,
+ 0x2f,0x31,0x32,0x96,0x25,0x67,0x3b,0xb8,0x12,0x1c,0x61,0x80,0x01,0xc2,
+ 0xfb,0xf7,0x1c,0x87,0xd5,0x6a,0x95,0x88,0xb5,0x03,0xab,0x2b,0x09,0xda,
+ 0xa5,0xbe,0x90,0xc6,0x77,0x57,0xf1,0x90,0xf8,0x68,0x4c,0x65,0xf2,0xf5,
+ 0xc8,0x24,0x43,0x23,0x93,0x58,0x98,0x04,0x31,0x13,0xa5,0x40,0x0a,0x03,
+ 0x2b,0x26,0x69,0x55,0x06,0x8a,0x80,0xb2,0x73,0x3b,0x2e,0x20,0x54,0x40,
+ 0x98,0x4a,0xa5,0xae,0x06,0x1d,0xe2,0x10,0x22,0x24,0xf4,0x3d,0x74,0xdc,
+ 0xc2,0xab,0x55,0x88,0x18,0x8a,0x80,0x10,0xad,0x01,0x0c,0xb6,0x6d,0x6d,
+ 0x65,0x5f,0x77,0x1b,0xe9,0xa5,0x0a,0xf6,0x9a,0x4b,0x73,0x54,0xd1,0xd1,
+ 0x14,0x21,0x61,0x2a,0x56,0xd6,0x6a,0x00,0x19,0xc0,0x07,0x02,0x80,0x18,
+ 0xf0,0x0e,0xf0,0x1b,0x10,0xfe,0x8f,0x9e,0x00,0x3e,0x05,0xfa,0x80,0x5e,
+ 0x01,0x44,0x00,0x0b,0xd8,0xb2,0xbe,0xa4,0x9b,0xd7,0x2d,0x92,0xf7,0xf1,
+ 0x3b,0xe9,0x75,0xa5,0x36,0x50,0x02,0x8a,0x62,0x1d,0x10,0x01,0x12,0xeb,
+ 0x1d,0x05,0x8c,0x8d,0x75,0xfa,0x1f,0x2b,0x5c,0x7f,0x7e,0x03,0x70,0x00,
+ 0x47,0x84,0x61,0x88,0x10,0x42,0xae,0xc3,0x8c,0x7f,0x40,0xef,0x17,0xbc,
+ 0x01,0x0f,0x80,0xe0,0x2f,0x1e,0x77,0x0d,0xd9,0xcc,0xde,0x09,0xba,0x00,
+ 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_pointer_png_len = 586;
+static const unsigned char small_pointer_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0xdc,0x49,0x44,0x41,0x54,0x48,0xc7,0x9d,0x95,
+ 0x4b,0x4b,0x02,0x51,0x18,0x86,0xa7,0xd3,0x80,0x92,0x48,0x08,0x66,0x48,
+ 0x1b,0x49,0x90,0xd0,0xa4,0x20,0xc9,0x32,0xa9,0x18,0x1a,0x22,0x2b,0xac,
+ 0x85,0xae,0x5a,0x04,0x41,0x22,0xb8,0x90,0x82,0x20,0x08,0xba,0x51,0x14,
+ 0x15,0x11,0xd1,0xa2,0x1b,0x65,0x44,0x44,0x05,0x81,0x05,0x45,0x20,0xb4,
+ 0xea,0x6f,0x7d,0x7d,0xc7,0x3e,0x47,0x8b,0xe6,0xcc,0x8c,0xc2,0xc3,0x9c,
+ 0x85,0xf3,0xf8,0x9e,0xf7,0x5c,0x94,0x00,0x40,0xfa,0x0b,0x7e,0x1a,0x90,
+ 0x46,0x44,0xa6,0x67,0xc3,0x7f,0xdf,0x13,0x21,0xe9,0x88,0xe5,0x54,0x2a,
+ 0xc5,0x07,0xcd,0x88,0x13,0xb1,0x59,0x95,0xeb,0x89,0xed,0x24,0xe6,0xf8,
+ 0x90,0x16,0xab,0x72,0x3d,0xb1,0x23,0x9b,0xcd,0x42,0x7a,0x2e,0x5c,0x91,
+ 0x77,0x5a,0x95,0xeb,0x89,0x9d,0xb9,0x5c,0x0e,0x4e,0x8b,0x09,0xe8,0x1f,
+ 0x93,0xea,0x92,0xeb,0x8a,0x33,0x99,0x0c,0x9c,0x15,0x47,0x61,0xe5,0x82,
+ 0x41,0x2c,0x61,0x5d,0x2e,0x14,0x9f,0xbf,0xaa,0xb0,0x56,0x60,0xb0,0x7a,
+ 0xc5,0x60,0x60,0xc2,0x9a,0x5c,0x28,0xbe,0x7c,0x53,0x61,0xf3,0x96,0x95,
+ 0xd9,0xb8,0x61,0x30,0x38,0x69,0x5e,0x2e,0x14,0x5f,0x7f,0xa8,0xb0,0x7d,
+ 0xcf,0x34,0xb6,0xee,0x18,0x0c,0x25,0xcd,0xc9,0x85,0xe2,0x42,0x49,0x85,
+ 0xdd,0x47,0xf6,0x8b,0x9d,0x07,0x06,0xc3,0x53,0xc6,0x72,0xa1,0xf8,0xf6,
+ 0x53,0x85,0xbd,0x67,0xa6,0xb1,0x8e,0x75,0x2c,0x1e,0x31,0xc8,0xef,0x63,
+ 0xe7,0x06,0x0b,0x2a,0xee,0xb8,0xd4,0x05,0x4b,0x27,0x0c,0x96,0x4f,0x31,
+ 0xed,0x13,0x2b,0x8f,0x3b,0x7a,0x34,0x61,0x2d,0x3e,0x3a,0xa1,0x8d,0x86,
+ 0xe2,0x74,0x3a,0x0d,0x87,0x2f,0x0c,0x82,0x91,0x9f,0x97,0x47,0x52,0x52,
+ 0x79,0x11,0x49,0x94,0x45,0x66,0x90,0x09,0xa4,0x0f,0xf1,0xd3,0xf1,0x97,
+ 0x0d,0xc5,0x8a,0xa2,0xd4,0x1e,0x8e,0xf9,0x50,0x28,0x04,0x97,0x9f,0x3e,
+ 0x88,0x57,0x77,0xc6,0x24,0xd2,0x4b,0x52,0x5e,0x45,0x93,0xa9,0xc4,0x1e,
+ 0x8f,0xa7,0x22,0x98,0xe6,0x04,0x02,0x01,0x98,0xcd,0x07,0xe1,0xa0,0xa8,
+ 0xa5,0x1e,0x47,0xc2,0x48,0x2b,0x49,0x65,0x33,0x1d,0x3b,0xe8,0xe5,0x28,
+ 0x12,0x43,0x22,0x48,0x0f,0x4f,0x5d,0xf8,0xf2,0xc1,0x50,0x75,0x57,0x74,
+ 0x23,0xee,0xda,0x0a,0x0c,0x6f,0x37,0x9a,0x9e,0x9f,0x16,0xc6,0x8b,0xb4,
+ 0xf1,0xd4,0x73,0x0b,0x41,0x38,0x7e,0xd7,0x52,0x2b,0x48,0x3b,0x05,0x31,
+ 0xb5,0xdd,0x64,0x9a,0x5e,0xe5,0x3e,0xb6,0xd3,0xb3,0x9d,0xa7,0xbe,0xf8,
+ 0xc2,0x53,0x98,0x14,0xa7,0x96,0xcc,0xfe,0x83,0xd0,0xd8,0xcd,0x53,0x27,
+ 0x66,0x24,0x88,0x28,0x9a,0x38,0xce,0x67,0xc3,0xf7,0xb1,0xa1,0x58,0xf0,
+ 0x63,0x0e,0xaa,0xa6,0x22,0x4d,0xd2,0x3a,0x78,0xeb,0x16,0xd7,0x54,0xe4,
+ 0x42,0x02,0x24,0x8c,0xd2,0xd8,0x65,0xaa,0x0a,0x83,0xd4,0x36,0x12,0x79,
+ 0x09,0xd7,0x7f,0x77,0xc5,0x37,0x58,0xff,0x81,0x01,0x6f,0x58,0xf6,0xf8,
+ 0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_progress_png_len = 609;
+static const unsigned char small_progress_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x01,0xec,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xfc,0xff,0xff,0x3f,0x03,0x2d,0x00,0x40,
+ 0x00,0x31,0xd1,0xc4,0x54,0x20,0x00,0x08,0x20,0x9a,0x19,0x0c,0x10,0x40,
+ 0x34,0x33,0x18,0x20,0x80,0x68,0x66,0x30,0x40,0x00,0xd1,0xcc,0x60,0x80,
+ 0x00,0x62,0x41,0xe6,0x30,0xaa,0xea,0x51,0x94,0x44,0xfe,0xdf,0xbe,0xc4,
+ 0x08,0x63,0x03,0x04,0x10,0x0b,0xba,0xe4,0x87,0x33,0x87,0x19,0xfe,0xfe,
+ 0xfd,0x0b,0xc6,0xff,0xfe,0xfd,0x63,0xc0,0x95,0x1c,0x41,0xe2,0x20,0x35,
+ 0x5f,0xbf,0x7e,0x65,0x78,0xf8,0xf0,0x21,0x83,0x7b,0x76,0x09,0x8a,0x3c,
+ 0x40,0x00,0x61,0x04,0x85,0x80,0x53,0x2b,0x83,0xb0,0x6b,0x07,0x58,0x93,
+ 0x8c,0x5f,0x3f,0x83,0x5e,0xcc,0x0c,0x30,0x3b,0xa4,0x72,0x35,0x43,0x7a,
+ 0xc7,0x16,0x30,0xbb,0x7b,0xc9,0x31,0x86,0xb9,0x9b,0xce,0x31,0xfc,0xfe,
+ 0xfd,0x9b,0xe1,0xfd,0xfb,0xf7,0x0c,0x6f,0xdf,0xbe,0xc5,0xb0,0x18,0x20,
+ 0x80,0x30,0x5c,0x2c,0x29,0x29,0x05,0xa6,0xff,0xfc,0xf9,0xc3,0x20,0x29,
+ 0x21,0xc5,0xc0,0xcf,0xcd,0x06,0x66,0x0b,0x09,0x09,0x31,0x08,0xf0,0xb0,
+ 0x83,0xd9,0xdc,0xdc,0xdc,0x0c,0x1c,0x1c,0xac,0x0c,0xdf,0xbf,0x7f,0x67,
+ 0xf8,0xf4,0xe9,0x13,0xc3,0xc7,0x8f,0x1f,0x31,0x0c,0x06,0x08,0x20,0x0c,
+ 0x83,0x95,0x95,0x95,0xc1,0x34,0x28,0x18,0x94,0x95,0x95,0x18,0xb8,0xd9,
+ 0x99,0xc1,0xae,0x94,0x94,0x94,0x64,0xe0,0xe3,0x64,0x01,0xb3,0x05,0x04,
+ 0x04,0x80,0xe2,0x4c,0x0c,0x3f,0x7f,0xfe,0x64,0xf8,0xf5,0xeb,0x17,0x18,
+ 0xa3,0x03,0x80,0x00,0xc2,0x30,0x58,0x54,0x54,0x14,0x4c,0x83,0x0c,0x10,
+ 0x11,0x11,0x61,0xe0,0x62,0x63,0x02,0xbb,0x92,0x8f,0x8f,0x1f,0x68,0x18,
+ 0x23,0x98,0xcd,0xc1,0xc1,0xc1,0xc0,0xc6,0xfa,0x1f,0x68,0xe0,0x4f,0x70,
+ 0x70,0x80,0xc4,0xd0,0x01,0x40,0x00,0x61,0x18,0x0c,0xf2,0x1a,0x08,0x7c,
+ 0xff,0xce,0x07,0x66,0xff,0x01,0xba,0xec,0xf3,0x67,0x66,0x86,0x4f,0x9f,
+ 0x3f,0x31,0xfc,0xfb,0xc5,0x08,0x64,0xff,0x07,0xe2,0xef,0x0c,0xbf,0x59,
+ 0xfe,0x33,0x7c,0xe1,0xfc,0x05,0x0e,0x0e,0x6c,0x2e,0x06,0x08,0x20,0x0c,
+ 0x83,0x6f,0xdf,0xba,0x05,0xa6,0x9f,0x3c,0x61,0x60,0xb8,0x73,0xeb,0x36,
+ 0x03,0x17,0x07,0x13,0x90,0x2d,0xc5,0x70,0xef,0xce,0x6b,0x06,0x1e,0x10,
+ 0x5b,0x56,0x98,0xe1,0xc1,0xfd,0x4f,0x0c,0x9c,0x6c,0x8c,0x0c,0xa2,0x0c,
+ 0x4c,0x0c,0xef,0xde,0xbd,0x63,0xf8,0xf6,0xed,0x1b,0x86,0xc1,0x00,0x01,
+ 0xc4,0x88,0x9c,0x9c,0x40,0xe9,0x78,0xe7,0xd4,0x1e,0x70,0x2c,0x83,0x22,
+ 0x04,0xe4,0x12,0x50,0x58,0x63,0x03,0x20,0x71,0x90,0x3c,0xc8,0xd0,0x2f,
+ 0x5f,0xbe,0x30,0xf4,0x6f,0xde,0x83,0x92,0x8e,0x01,0x02,0x08,0xc3,0x60,
+ 0xac,0xa6,0x10,0x09,0x90,0x0d,0x06,0x08,0x20,0x46,0x5a,0x95,0xc7,0x00,
+ 0x01,0x44,0xb3,0xb2,0x02,0x20,0x80,0x68,0x66,0x30,0x40,0x00,0xd1,0xcc,
+ 0x60,0x80,0x00,0xa2,0x99,0xc1,0x00,0x01,0x44,0x33,0x83,0x01,0x02,0x0c,
+ 0x00,0x3d,0xd7,0xd8,0x42,0x12,0x79,0x14,0x47,0x00,0x00,0x00,0x00,0x49,
+ 0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_pushbutton_png_len = 408;
+static const unsigned char small_pushbutton_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x04,0x00,0x00,
+ 0x00,0x6e,0xbd,0xa4,0xb0,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0x2a,0x49,0x44,0x41,0x54,0x28,0xcf,0x95,0x92,
+ 0xb1,0x6e,0xc2,0x30,0x14,0x45,0x4f,0x92,0x27,0x10,0x03,0x1b,0x03,0x0b,
+ 0x52,0x99,0x98,0x99,0x18,0x32,0xf4,0x2b,0x2a,0xf5,0x1b,0x98,0xfa,0x1b,
+ 0xfd,0x0a,0x76,0xe6,0xee,0x2c,0x2c,0x48,0x1d,0x10,0x52,0x90,0x32,0x75,
+ 0x60,0x41,0x82,0x05,0x11,0x82,0xc0,0x76,0xdc,0x21,0x2e,0x85,0x88,0x84,
+ 0xf6,0x2d,0xb6,0xae,0x8e,0x8f,0xae,0x6c,0x0b,0xfe,0xfb,0x6b,0x36,0xdc,
+ 0x86,0x09,0x65,0xb3,0x63,0x31,0x5b,0x8e,0x18,0x93,0x0a,0x41,0x36,0x7c,
+ 0x09,0xbb,0x54,0xcd,0x74,0xf0,0x5c,0x63,0xc2,0x46,0x08,0xb6,0xe1,0x13,
+ 0xa6,0x12,0x6e,0x40,0x9f,0x16,0x07,0x21,0x48,0xd0,0xd8,0x4a,0xf8,0x0c,
+ 0xd0,0xa4,0x2e,0x78,0x90,0x3d,0x30,0x1b,0x00,0x21,0x10,0x3c,0x30,0x0f,
+ 0xe0,0x0c,0xc0,0xc7,0x93,0xfc,0xa4,0x7e,0x6c,0x06,0x6e,0xe0,0x36,0x00,
+ 0x6b,0xa0,0xcd,0xda,0x25,0xeb,0x22,0xac,0x51,0x40,0x87,0x95,0x03,0x56,
+ 0x70,0x49,0x94,0xdb,0x5f,0xc1,0xb9,0xf9,0xa7,0x8c,0x06,0x3a,0xc0,0x97,
+ 0x4b,0x0a,0xe6,0xf3,0xef,0x15,0xb9,0x35,0x06,0xba,0xc4,0x37,0x92,0xab,
+ 0xce,0x11,0x3d,0x00,0x22,0xb4,0x03,0x22,0x7a,0x44,0x45,0xb3,0x72,0xad,
+ 0xe6,0xe0,0x1a,0xce,0x2f,0x89,0xba,0x6f,0x2e,0x9f,0x02,0xac,0xfe,0x73,
+ 0xcf,0xe6,0x8f,0xb0,0xdd,0xa1,0x2b,0xe1,0x13,0x49,0xfe,0xe6,0x56,0xb0,
+ 0x8b,0xd9,0x74,0xd0,0xa8,0xc0,0x8f,0x7c,0x42,0x8c,0xc6,0x08,0x66,0x39,
+ 0x7a,0xab,0xd1,0xaf,0xec,0x11,0xf3,0xc1,0x9e,0x93,0x60,0x18,0x33,0xa1,
+ 0x45,0x13,0xc1,0x2f,0xf9,0x74,0x9a,0x3d,0x5b,0x52,0xc1,0x90,0xb2,0xe1,
+ 0x40,0x9d,0x00,0xef,0x2e,0x6c,0x31,0x9c,0x48,0x49,0xc5,0x66,0x9e,0x22,
+ 0xe1,0x48,0x80,0x57,0x0a,0x5b,0x0c,0x06,0xf3,0x0d,0xc5,0x5b,0x86,0xab,
+ 0x30,0x5c,0xf4,0x11,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,
+ 0x60,0x82
+};
+
+static const unsigned int small_radiobutton_png_len = 586;
+static const unsigned char small_radiobutton_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x04,0x00,0x00,
+ 0x00,0x6e,0xbd,0xa4,0xb0,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0xdc,0x49,0x44,0x41,0x54,0x28,0xcf,0xcd,0xd2,
+ 0x4d,0x48,0xd3,0x01,0x18,0xc7,0xf1,0xdf,0xf8,0xcb,0xd8,0x0b,0xb2,0x4e,
+ 0x6e,0x81,0x8d,0x36,0x29,0x46,0x31,0xda,0x56,0x2c,0x92,0xa0,0x51,0x2c,
+ 0x10,0x09,0x32,0x42,0x28,0xa3,0xc3,0x28,0xf5,0x60,0x61,0x75,0xc8,0x6c,
+ 0x18,0x09,0x16,0x11,0x64,0x87,0x35,0x22,0x4a,0x82,0xba,0x0c,0xea,0x92,
+ 0xb6,0x4b,0x44,0x87,0xc1,0x76,0x29,0x69,0x14,0x4a,0x2f,0x64,0x11,0x45,
+ 0x1d,0x77,0x18,0xbe,0x2c,0xfe,0xdf,0x0e,0xc6,0x16,0xff,0x94,0x3a,0xc6,
+ 0x73,0xfd,0xf0,0xf0,0xbc,0xfc,0x84,0xfe,0xbd,0xf4,0x5f,0x62,0xd9,0x64,
+ 0xc8,0x2e,0xa7,0x5c,0x72,0xc9,0x29,0xbb,0x0c,0xd9,0x56,0xc1,0x32,0x4e,
+ 0xa7,0x8e,0x14,0x76,0x56,0xd6,0x9a,0x3e,0xb3,0xbd,0xd2,0x5d,0x4a,0x0d,
+ 0xc8,0x23,0x87,0x8c,0x15,0xb0,0x9a,0x7a,0x73,0xdb,0xe7,0x47,0x99,0xe2,
+ 0x35,0x65,0x1e,0x32,0x4c,0x6c,0xa1,0x7b,0x52,0x3e,0xb9,0xd5,0x64,0xc1,
+ 0x32,0x8e,0xe7,0x4e,0xd6,0x5e,0xf0,0x9d,0x2f,0x7c,0xe6,0x13,0x73,0xbc,
+ 0x63,0x8a,0x9e,0x5a,0x57,0x5e,0xad,0x72,0x2f,0x77,0xaf,0xcf,0x3a,0x98,
+ 0x8a,0xcf,0x3f,0xe7,0x1b,0x1f,0x79,0xcf,0x5b,0x66,0x28,0x33,0x4d,0x89,
+ 0xdb,0x84,0x17,0x3b,0xd3,0xf2,0xc9,0x21,0x5b,0x03,0x1b,0x87,0x0a,0x23,
+ 0x7c,0xe5,0x03,0x25,0xce,0x13,0x25,0xc2,0x19,0x1e,0xf3,0x94,0x7b,0xf4,
+ 0xb2,0xbb,0xac,0x90,0x3c,0x32,0x1a,0xd8,0xbe,0xa3,0xf2,0x80,0x39,0x66,
+ 0x38,0x57,0x5f,0xa2,0x8f,0x3c,0xb7,0x18,0x63,0x73,0x55,0x71,0x79,0x65,
+ 0x6f,0x60,0x67,0x8b,0x59,0xe2,0x0d,0x2f,0x89,0xd4,0xf1,0x46,0x72,0xdc,
+ 0x20,0xc3,0x1a,0x53,0x09,0xf9,0xe5,0x6c,0x60,0x57,0x8b,0xf9,0x8c,0x57,
+ 0x14,0x09,0xd7,0x71,0x1b,0x77,0x18,0xe7,0x2a,0x1e,0x53,0x49,0x05,0xe4,
+ 0xfa,0x0d,0x6f,0xad,0xdc,0x64,0x9a,0x27,0xf4,0xd7,0xf1,0x41,0xb2,0x8c,
+ 0x31,0xc8,0x86,0xaa,0x15,0x3b,0x3b,0x4a,0xfd,0x14,0x78,0xc4,0x04,0x3d,
+ 0x04,0x09,0x72,0x80,0xcb,0x5c,0x63,0x88,0x7d,0xc4,0x66,0xad,0x63,0xd8,
+ 0xf7,0x0f,0x84,0x16,0xb2,0xdc,0xe7,0x2e,0x13,0x64,0xb9,0xce,0x38,0x57,
+ 0x38,0xcb,0x51,0xfc,0x4b,0xe1,0x8c,0x75,0x41,0x43,0x9e,0x3d,0x93,0x1d,
+ 0xb5,0x11,0x2e,0x31,0xca,0x45,0x2e,0x30,0xcc,0x29,0x0e,0x13,0xfb,0x11,
+ 0x29,0x2a,0x69,0x3d,0x9d,0x4d,0x0e,0xf9,0x76,0xe5,0xdb,0x16,0xbb,0x38,
+ 0x41,0x9a,0x21,0x8e,0xb1,0x97,0x75,0x4b,0x5b,0x8a,0xea,0x54,0xd4,0xf2,
+ 0x14,0x24,0x43,0x6e,0xb5,0xb6,0xa7,0xb7,0x95,0x83,0xd5,0x66,0xb3,0xd9,
+ 0x5c,0x5f,0x0d,0xcf,0x6e,0xca,0x28,0xa9,0xe8,0x1f,0xef,0x5e,0x0e,0x92,
+ 0xdc,0xf2,0x29,0xa4,0xb8,0x12,0x4a,0x2a,0xa9,0x84,0xe2,0x0a,0xad,0x18,
+ 0xa4,0x5f,0xdd,0x1d,0xf2,0xc8,0x2b,0xbf,0x02,0x0a,0xc8,0x2f,0xef,0xaa,
+ 0x11,0xfd,0x7b,0xf8,0x7f,0x02,0x6c,0x38,0xbb,0x71,0x07,0xb6,0xcc,0x62,
+ 0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_redo_png_len = 592;
+static const unsigned char small_redo_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0xe2,0x49,0x44,0x41,0x54,0x48,0xc7,0xd5,0x95,
+ 0x39,0x4b,0x03,0x41,0x14,0xc7,0xa7,0xb1,0x11,0x16,0xd3,0x2c,0x58,0x84,
+ 0x6c,0x61,0x97,0x48,0x6c,0x02,0x16,0x6e,0x67,0x6d,0xe1,0xd7,0xf0,0x13,
+ 0x08,0x76,0x82,0x85,0xa0,0x78,0x5f,0xc1,0x23,0x28,0xa2,0x78,0xa0,0x88,
+ 0x28,0xa2,0x88,0x22,0x8a,0x78,0x82,0x85,0x42,0xc0,0x42,0x0b,0xef,0xa3,
+ 0x10,0x04,0x11,0x79,0xfe,0x67,0xe7,0xed,0x3a,0xd9,0x24,0xba,0x11,0x2c,
+ 0x0c,0xfc,0xd8,0x49,0xb2,0xf9,0xbd,0xff,0xe3,0xcd,0x4e,0x04,0x11,0x89,
+ 0xbf,0x40,0xfc,0x7f,0x31,0x5e,0xc5,0xc0,0x02,0x51,0x46,0xae,0x8b,0x7f,
+ 0x2d,0xd6,0x84,0x09,0x40,0x3e,0x12,0x85,0x16,0xd0,0xa5,0x51,0x57,0x54,
+ 0x95,0xaa,0xa2,0xd8,0x60,0x8c,0x62,0xa9,0x18,0x85,0x93,0x61,0xbd,0x40,
+ 0x34,0xa8,0xdc,0x15,0xcb,0x34,0x64,0x8f,0xd8,0x14,0x4f,0xc6,0xc9,0xea,
+ 0xb5,0x48,0xb4,0x42,0xd4,0x0e,0x3a,0x05,0x19,0xc3,0x06,0x85,0x27,0xbc,
+ 0x02,0xf1,0x20,0x72,0x37,0xad,0xd3,0xbe,0x94,0x8a,0x66,0xf1,0x25,0xed,
+ 0x02,0x03,0x60,0x18,0xa4,0xc0,0x98,0x08,0x2c,0xf7,0xd2,0x46,0xba,0x23,
+ 0x24,0xea,0xf1,0xa3,0x06,0xd0,0xe6,0x93,0x4a,0xe1,0x24,0x98,0x02,0xb3,
+ 0xf9,0xe5,0x1c,0xd2,0xe4,0x2b,0x0f,0xab,0x59,0x1b,0x56,0x07,0xe8,0xf7,
+ 0x49,0xa7,0xc1,0x3c,0x58,0x04,0x2b,0xd9,0x72,0xbd,0x73,0x0e,0x8b,0xb4,
+ 0x7d,0x48,0x5b,0xe7,0x7c,0x50,0x03,0x6a,0x9d,0x2f,0x07,0xc1,0xa8,0x4f,
+ 0xba,0x0c,0xd6,0xc0,0x06,0xd8,0xca,0x90,0x9b,0xfa,0xf0,0x79,0x8d,0x45,
+ 0x8b,0xf3,0xa6,0x82,0x29,0xe5,0x9b,0x49,0x8c,0x83,0x19,0xb0,0xa0,0x49,
+ 0x37,0xc1,0x0e,0xd8,0x07,0x47,0x9e,0xa8,0x5a,0x5e,0x8d,0x2b,0x43,0x2f,
+ 0xa6,0x26,0xcf,0x52,0xd9,0x42,0x11,0xb7,0xa5,0xe4,0x73,0x60,0x09,0xac,
+ 0x6b,0xd2,0x03,0x70,0x02,0x4e,0x41,0x5a,0xc9,0xed,0x7b,0x9b,0xc4,0x9e,
+ 0x57,0xa8,0x52,0x89,0x9b,0xbc,0xf8,0xa6,0x6f,0x10,0x4a,0xbe,0xca,0xed,
+ 0xef,0x82,0x43,0x96,0x9e,0x81,0x73,0x70,0x21,0x28,0x74,0x1d,0x22,0xeb,
+ 0x11,0x5b,0xb4,0xc7,0x13,0xdb,0x42,0xab,0x20,0xd3,0x96,0xe4,0x98,0xb2,
+ 0x92,0x6f,0x6b,0x49,0x5d,0xe9,0x25,0xb8,0x06,0x77,0xe0,0x89,0x07,0xee,
+ 0x13,0x97,0xb1,0xa4,0x28,0xcf,0xd9,0xa1,0xe4,0xc7,0xdc,0x7e,0x2e,0xe9,
+ 0x0b,0x48,0x66,0x8a,0xcd,0x00,0x9b,0xfd,0x4b,0x9e,0x56,0xed,0x3b,0xd2,
+ 0x07,0xf0,0xcc,0xd2,0x57,0xde,0x49,0xae,0x38,0xf0,0xa1,0xa2,0x02,0x38,
+ 0xd3,0x0f,0xdd,0x86,0xb2,0xa5,0x6f,0x60,0xa4,0x40,0xb1,0x7e,0x48,0xd9,
+ 0x8f,0x36,0x59,0x4f,0x56,0xa6,0xf4,0x1d,0x7c,0xf0,0x63,0x1f,0x54,0xac,
+ 0x3f,0x51,0xc6,0x8d,0xa1,0x76,0x45,0x2f,0x0f,0x4a,0xb6,0x3e,0xc4,0x49,
+ 0xa5,0xb4,0xb1,0x30,0xb1,0x99,0xe3,0x7c,0xfe,0x89,0xf2,0xa0,0x89,0xdd,
+ 0x7f,0x94,0x38,0x6f,0x4d,0xfb,0x1b,0xca,0xe5,0xb6,0xfd,0x04,0x86,0x5a,
+ 0x64,0x75,0x88,0xdb,0x84,0x51,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,
+ 0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_richtextedit_png_len = 834;
+static const unsigned char small_richtextedit_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x02,0xd4,0x49,0x44,0x41,0x54,0x48,0xc7,0x9d,0x95,
+ 0x4d,0x48,0x1b,0x41,0x18,0x86,0x17,0x41,0x2a,0x68,0x0f,0x1e,0x14,0xc5,
+ 0x5b,0x21,0x0a,0x82,0x27,0x3d,0x04,0x15,0x09,0x46,0xe2,0x21,0x46,0xaf,
+ 0x5a,0x2f,0xde,0x02,0xe2,0x4d,0x2f,0x5e,0x3c,0x09,0x56,0xaa,0xd4,0x5e,
+ 0x42,0x85,0xf8,0x1f,0x24,0x2a,0x1e,0x14,0x41,0x92,0xaa,0xc1,0x1a,0x48,
+ 0x11,0x59,0x04,0x6b,0x68,0x4a,0xd0,0xda,0x10,0x50,0x50,0x50,0x22,0x49,
+ 0x8c,0x59,0xdf,0xce,0x37,0xce,0x2e,0x0b,0xee,0x65,0x73,0x78,0x98,0x77,
+ 0x66,0x32,0xcf,0xee,0xec,0x66,0xbe,0x95,0x24,0x49,0x2a,0x9a,0x9c,0x9c,
+ 0xfc,0x38,0x31,0x31,0x11,0x1e,0x1e,0x1e,0x86,0xdb,0xed,0x36,0x4d,0x6f,
+ 0x6f,0x2f,0xea,0xeb,0xeb,0x7f,0x32,0x97,0x9b,0x51,0xce,0x78,0xc7,0x90,
+ 0x8a,0x49,0x1a,0x8f,0xc7,0xa1,0x28,0x4a,0xc1,0x1c,0x1e,0x1e,0x82,0xb9,
+ 0x64,0x46,0xad,0x90,0x4b,0x25,0x74,0xa7,0xf9,0x7c,0x1e,0xb9,0x5c,0xae,
+ 0x60,0x8e,0x8f,0x8f,0x49,0x4c,0x34,0x33,0x6a,0x48,0x5c,0x4a,0xdb,0xc9,
+ 0x66,0xb3,0xc8,0x64,0x32,0x9c,0x86,0x86,0x06,0x8c,0x8d,0x8d,0xf1,0xfc,
+ 0x74,0x74,0x84,0x97,0xea,0x6a,0x28,0x3d,0x3d,0x78,0x61,0xe3,0x39,0xbf,
+ 0x9f,0x8f,0x93,0x44,0xdf,0x86,0xc3,0x61,0x55,0xdc,0xc9,0xf8,0x40,0xe2,
+ 0x32,0x12,0xa7,0xd3,0x69,0xa4,0x52,0x29,0xc8,0xb2,0x8c,0xee,0xee,0x6e,
+ 0x54,0x33,0x19,0xf5,0x33,0x6c,0x8b,0x79,0xd6,0xe7,0x79,0x7b,0x5b,0xcb,
+ 0x04,0x89,0xd4,0x2c,0x1e,0x05,0xe1,0x64,0x58,0x48,0xfc,0x9e,0xc4,0x34,
+ 0x79,0x7f,0x7f,0x8f,0xa1,0xa1,0x21,0xac,0xac,0xac,0xf0,0x76,0x6b,0x6b,
+ 0x0b,0x8f,0x07,0x07,0xfc,0x8e,0x9f,0x5d,0x2e,0x28,0x6d,0x6d,0x78,0x62,
+ 0xe3,0xf4,0x3b,0x82,0x44,0x6a,0x0e,0x85,0x42,0xaa,0xd8,0x25,0x9e,0xf3,
+ 0xab,0x98,0x26,0x6f,0x6f,0x6f,0xf9,0x9d,0x76,0x75,0x75,0xa1,0xb5,0xb5,
+ 0x15,0x83,0x83,0x83,0x78,0x08,0x06,0x91,0x63,0x7d,0x9a,0x23,0xd8,0x4a,
+ 0x2d,0x4b,0xba,0xbc,0xb7,0xb7,0x67,0x2c,0xbe,0xbb,0xbb,0xc3,0xfc,0xfc,
+ 0x3c,0xfa,0xfa,0xfa,0x70,0x7d,0x7d,0xcd,0xa9,0xaa,0xaa,0xc2,0xbf,0xf5,
+ 0x75,0x28,0xac,0x7d,0x72,0x3a,0xf1,0xdc,0xd2,0x82,0xd4,0xf8,0xb8,0x36,
+ 0x4f,0x22,0x35,0x07,0x02,0x01,0x63,0xf1,0xcd,0xcd,0x0d,0x12,0x89,0x84,
+ 0x29,0x48,0xa4,0xe6,0x9d,0x9d,0x1d,0x63,0x71,0x32,0x99,0xc4,0xe5,0xe5,
+ 0xa5,0x29,0x48,0xa4,0x66,0x7a,0x1f,0x86,0xe2,0xab,0xab,0x2b,0xc8,0xbf,
+ 0x64,0x38,0xbe,0x3a,0x38,0xd6,0xcf,0x56,0xec,0x46,0x76,0xb1,0xb1,0x91,
+ 0x40,0x65,0xa5,0x02,0x87,0x23,0x0d,0xab,0x35,0x8b,0xc5,0xc5,0x24,0x62,
+ 0xb1,0x18,0x87,0x44,0x6a,0xde,0xdc,0xdc,0x34,0x16,0x5f,0x5c,0x5c,0x60,
+ 0xc0,0x3b,0x80,0xd1,0xb5,0x51,0x9c,0x9f,0x9f,0x63,0x2e,0x38,0xc7,0xf3,
+ 0xda,0xda,0x5f,0x74,0x74,0x3c,0xf2,0xb1,0x50,0xe8,0x0f,0xea,0xea,0x72,
+ 0x3c,0x13,0x24,0x52,0xf3,0x3a,0x7b,0x17,0x86,0x62,0xba,0xaa,0xfd,0x8b,
+ 0x1d,0xbe,0xef,0x3e,0x9c,0x9e,0x9e,0x6a,0xf8,0x7c,0x71,0xd8,0xed,0x29,
+ 0xad,0xcf,0xd6,0xea,0xb2,0xa4,0xe5,0xd5,0xd5,0x55,0x63,0x71,0x34,0x1a,
+ 0x45,0xff,0xb7,0x7e,0x8c,0xf8,0x46,0x70,0x72,0x72,0x02,0xcf,0xb6,0x87,
+ 0xe7,0xa5,0xa5,0x18,0xda,0xdb,0x53,0x7c,0x8c,0x72,0x53,0x53,0x9a,0x67,
+ 0x82,0x44,0x6a,0x5e,0x5e,0x5e,0x36,0x16,0x9f,0x9d,0x9d,0x61,0xff,0xc7,
+ 0x3e,0x6c,0x53,0x36,0x4e,0xe3,0xa7,0x46,0xf8,0x03,0x7e,0xf6,0x17,0x8c,
+ 0xa2,0xa2,0x22,0x0f,0x9b,0xed,0x01,0x16,0x4b,0x96,0xf7,0x23,0x91,0x08,
+ 0x97,0xe8,0xdb,0x85,0x85,0x05,0x63,0x31,0x6d,0x87,0xce,0x7b,0xa1,0x78,
+ 0xbd,0xde,0x37,0xe2,0x32,0xaa,0xa7,0xb4,0x1d,0x3a,0xef,0x85,0x10,0x64,
+ 0xa7,0x73,0x66,0x66,0xe6,0x4d,0xad,0x28,0xa5,0x22,0x4d,0x13,0xb3,0xb3,
+ 0xb3,0xf0,0x78,0x3c,0xa6,0x99,0x9e,0x9e,0xe6,0x27,0x96,0xb9,0x7e,0xeb,
+ 0xab,0x5b,0x89,0xa8,0xfc,0xb2,0xb8,0x62,0xa1,0x90,0x74,0x4a,0x5f,0x8f,
+ 0x8b,0x45,0xc5,0xaf,0x15,0x83,0x9d,0x62,0x3b,0x2e,0x13,0x38,0xc5,0xba,
+ 0x66,0xfd,0x17,0xa4,0x48,0x7c,0xa3,0xca,0xc5,0x95,0x3e,0x88,0x67,0x54,
+ 0x6b,0x02,0x8b,0x58,0x57,0xa3,0x7d,0xf3,0x40,0x85,0xf0,0x55,0x5e,0x2c,
+ 0x1e,0x4b,0x29,0xbd,0x50,0xfa,0xb7,0x98,0xa0,0x4c,0xac,0x2b,0x11,0x9e,
+ 0xa2,0xff,0x1d,0x6e,0x08,0xba,0x78,0xe7,0x80,0x2a,0x00,0x00,0x00,0x00,
+ 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_scrollbar_png_len = 408;
+static const unsigned char small_scrollbar_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0x2a,0x49,0x44,0x41,0x54,0x48,0xc7,0xed,0x94,
+ 0x31,0x4b,0xc3,0x60,0x10,0x86,0x0f,0x41,0xb0,0xd8,0x2e,0x9d,0xbb,0x49,
+ 0xf5,0x3f,0xd8,0x1f,0x50,0xc5,0x3a,0xb9,0xd9,0x41,0x10,0x14,0x71,0xad,
+ 0xa0,0xa0,0xa0,0x0e,0x0e,0x82,0x20,0x08,0x2a,0x41,0x5c,0x5c,0xe2,0xe4,
+ 0xe6,0xa6,0x9b,0x0e,0x4e,0x2e,0x19,0x0a,0x0e,0x4e,0xfe,0x8e,0xd7,0xf7,
+ 0x95,0xfb,0x92,0x20,0x56,0x68,0x4d,0x17,0x69,0xe0,0x19,0xee,0x72,0xf7,
+ 0x70,0x1c,0x97,0x18,0x00,0x1b,0x06,0x36,0x12,0x8f,0xc4,0xff,0x41,0xcc,
+ 0x67,0x8c,0x8c,0x93,0x12,0x99,0x24,0x65,0x52,0x19,0x80,0xb2,0xf7,0x97,
+ 0xdc,0x67,0xcb,0xa4,0x4b,0x50,0x00,0x6f,0x64,0x83,0x54,0x25,0x7e,0x8a,
+ 0xe3,0x18,0x49,0x92,0xfc,0x19,0x79,0xe8,0x7b,0x25,0x33,0x12,0xa7,0x2f,
+ 0xa2,0x28,0x42,0x88,0xe7,0xdb,0x86,0xa5,0x4d,0x43,0x7b,0xcb,0xb0,0xba,
+ 0x6b,0x58,0xdb,0xcf,0x50,0xac,0xbc,0xea,0x54,0xaf,0xbe,0xe0,0xf0,0xc9,
+ 0x67,0x53,0x71,0x90,0x86,0x58,0xd2,0xf5,0x43,0x43,0xe7,0xcc,0xb0,0x77,
+ 0x6d,0x38,0xb8,0xc9,0x50,0xac,0x7c,0x4e,0x94,0xca,0x3d,0x6e,0x5a,0x48,
+ 0xe6,0x77,0xa5,0x02,0x4d,0xa4,0xe6,0xa3,0x5b,0xc3,0xe9,0xbd,0xe1,0xfc,
+ 0x21,0x43,0xb1,0xf2,0x79,0xf1,0x37,0xcf,0x42,0xcf,0x89,0x57,0x76,0x0c,
+ 0xdb,0x97,0x86,0xe3,0x3b,0xc3,0xc5,0xa3,0xe1,0xea,0x39,0x43,0xb1,0xf2,
+ 0xbf,0x4c,0xbc,0xd8,0x73,0xc7,0xfd,0x4c,0xfc,0xc3,0x8e,0xbf,0x26,0x7e,
+ 0x29,0xf8,0x2a,0xba,0x61,0xc7,0xba,0xbb,0xf7,0x82,0xee,0xf8,0x83,0x9c,
+ 0x84,0xab,0xa8,0xfa,0xdd,0x35,0xc8,0x1c,0x69,0xf9,0x8e,0xfa,0xa5,0xe5,
+ 0xfd,0x8d,0x70,0xc7,0x13,0x2e,0xaf,0x91,0x29,0x52,0x27,0xd3,0x03,0x50,
+ 0xf7,0xfe,0x5a,0xf8,0xf2,0x86,0xf2,0xaf,0xf8,0x04,0x10,0x4f,0xeb,0x55,
+ 0xd2,0x98,0x8b,0x23,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,
+ 0x60,0x82
+};
+
+static const unsigned int small_searchfind_png_len = 843;
+static const unsigned char small_searchfind_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x02,0xdd,0x49,0x44,0x41,0x54,0x38,0xcb,0xb5,0x95,
+ 0x5f,0x48,0x53,0x51,0x1c,0xc7,0xbf,0xd3,0xab,0x43,0x74,0xf8,0xb2,0xd5,
+ 0x08,0xe6,0x30,0x0d,0xf2,0x61,0x68,0xae,0x61,0x2d,0x90,0xa1,0xe4,0xa8,
+ 0xc7,0x2d,0xc5,0x91,0x20,0xac,0x58,0xae,0x87,0x92,0x58,0x56,0x4f,0x3e,
+ 0x84,0x95,0x2b,0xc4,0xa0,0xd0,0x40,0xc3,0x5e,0x14,0x91,0x7a,0xdb,0xc3,
+ 0x85,0x05,0xbe,0x48,0xf5,0x20,0x0c,0xf6,0x24,0x4c,0x5f,0x56,0xf3,0xa9,
+ 0x99,0x60,0x6c,0xea,0xae,0xeb,0xfc,0x8e,0x9e,0xb5,0xab,0x5b,0x0d,0xc1,
+ 0x1f,0xfc,0xb8,0x3b,0xec,0xde,0xcf,0xf9,0xfe,0xfe,0x9c,0xdf,0x91,0xb2,
+ 0xd9,0x2c,0x4e,0xc2,0x24,0x9c,0x90,0x15,0x05,0x6b,0x34,0x9a,0xff,0x86,
+ 0xc2,0xa2,0xd5,0x1c,0x4b,0x71,0x26,0x93,0x51,0xad,0xf7,0xf6,0xf6,0x90,
+ 0x4c,0x26,0xb1,0xb4,0xb4,0x84,0x40,0x20,0xc0,0x37,0x2f,0x06,0xff,0x27,
+ 0x98,0x40,0x87,0xd7,0xe4,0x54,0x17,0x8b,0xc5,0x02,0xb7,0xdb,0x5d,0x14,
+ 0x2e,0x1d,0x0a,0xdf,0xc1,0x1e,0x1e,0xe6,0x4e,0x5a,0xfb,0xfd,0x7e,0xf4,
+ 0xf4,0xf4,0xa0,0xbd,0xbd,0x5d,0x05,0x16,0xf0,0x81,0x81,0x01,0xec,0xec,
+ 0xec,0x14,0x84,0x4b,0x79,0xd0,0x5b,0x67,0xac,0x8e,0xa9,0x06,0xa7,0x07,
+ 0xa6,0xcb,0x9c,0x8b,0xd6,0x1f,0x32,0x46,0x9e,0x3d,0x47,0x2c,0x16,0x43,
+ 0x7f,0x7f,0x3f,0x07,0x2a,0x8a,0xc2,0x9d,0x6c,0x6b,0x6b,0x0b,0x5e,0xaf,
+ 0xb7,0x20,0x5c,0x12,0x4a,0x09,0x7a,0x69,0xf0,0x15,0xf4,0x4d,0xd6,0xdc,
+ 0xae,0xde,0x6b,0x3e,0xb4,0xb4,0x5a,0xf1,0xe4,0x61,0x00,0x66,0xb3,0x19,
+ 0x76,0xbb,0x9d,0xe7,0x9d,0xd4,0x92,0x13,0x98,0xac,0xaf,0xaf,0xef,0x08,
+ 0x5c,0x28,0xf6,0x90,0xd2,0x7c,0x28,0x0f,0x9d,0x79,0xf3,0x05,0x2b,0x6e,
+ 0xf4,0x7a,0xb0,0xb0,0xb0,0x80,0xb6,0xb6,0x36,0x0e,0x2c,0x2b,0x2b,0x43,
+ 0x75,0x75,0x35,0xd6,0xd6,0xd6,0x72,0xef,0x3a,0x1c,0x0e,0x6c,0x6c,0x6c,
+ 0xe4,0xe0,0x02,0xec,0x14,0xe1,0xab,0xc0,0xac,0xe1,0xa8,0xe7,0x3a,0xaf,
+ 0x3a,0x11,0x1c,0x79,0x9a,0x4b,0x41,0x6d,0x6d,0x2d,0xd6,0xd7,0xd7,0x31,
+ 0x3a,0x3a,0xca,0x95,0x0a,0x4b,0xa7,0xd3,0x25,0x76,0x45,0x76,0x5f,0xb5,
+ 0x92,0xd7,0x7e,0x92,0x24,0xc1,0x68,0x34,0x62,0x68,0x68,0x88,0x2b,0xdc,
+ 0xdd,0xdd,0x85,0x38,0xbd,0x2b,0x2b,0x2b,0x08,0x06,0x83,0x2a,0xb0,0x1c,
+ 0xff,0x22,0xfb,0x9a,0x5c,0x3e,0x15,0x58,0x39,0x50,0x1c,0x96,0x65,0xde,
+ 0x19,0xa4,0x98,0x20,0x3a,0x9d,0x0e,0xf5,0xf5,0xf5,0x30,0x99,0x4c,0xaa,
+ 0x96,0xcc,0x1f,0x0f,0x02,0x3c,0xb7,0x2a,0xcf,0xf9,0x0c,0x2c,0xc7,0xf9,
+ 0x79,0xa6,0x4f,0x22,0xcb,0xcb,0xf8,0x38,0x3f,0x87,0xf3,0xe7,0x1a,0x90,
+ 0x48,0x24,0x60,0x30,0x18,0xf8,0x7f,0x5a,0xad,0x16,0x95,0x95,0x95,0x2a,
+ 0x21,0x55,0x55,0x55,0x6a,0x30,0xdb,0x69,0x91,0x25,0xfd,0xf6,0xd7,0xf1,
+ 0x80,0xaa,0xdd,0x66,0xbe,0xc9,0xf8,0x34,0x3f,0x8b,0x4c,0x3a,0x85,0xef,
+ 0xd1,0x10,0x9c,0x9d,0xef,0x71,0xf7,0xde,0x23,0xde,0x05,0xe5,0xe5,0xe5,
+ 0x54,0x28,0x75,0x84,0x8a,0x72,0x34,0xc7,0x0c,0x3e,0xcd,0x5e,0x5c,0x4d,
+ 0x2c,0x2f,0x8a,0x03,0x62,0xce,0xb0,0xc3,0x71,0xb6,0xce,0x84,0x64,0xec,
+ 0x33,0xbc,0x4e,0x23,0xae,0xd4,0x25,0xf1,0x72,0xfc,0x05,0x2f,0x18,0xc1,
+ 0x2b,0x2a,0x2a,0x54,0xf0,0x82,0x60,0xa1,0x9c,0x3d,0x16,0xc5,0x10,0x1a,
+ 0x1e,0x1e,0x46,0x3c,0x1e,0x47,0xaf,0x7b,0x16,0x2d,0xa7,0x7f,0xe2,0x54,
+ 0x4d,0x06,0xfe,0x0e,0xe0,0xdd,0xe4,0x18,0x87,0x10,0x9c,0x8a,0x49,0xed,
+ 0x77,0x78,0x04,0xfc,0x77,0x08,0xe9,0xf5,0x7a,0x78,0xef,0x0c,0xe2,0xcd,
+ 0xc4,0x18,0x6e,0xda,0x01,0x83,0x0e,0x70,0x5f,0x04,0xa6,0x26,0x5f,0xf3,
+ 0x03,0x43,0x07,0x87,0xe0,0xa4,0xbc,0xa8,0xe2,0x42,0x60,0x72,0x97,0xcb,
+ 0x85,0xed,0xed,0x6d,0x7c,0x98,0x7e,0x8b,0xeb,0xcd,0xc0,0xaf,0xdf,0x80,
+ 0x8e,0xd5,0x29,0x1c,0x0e,0x73,0xd5,0x07,0x11,0x96,0x0e,0x16,0x03,0x87,
+ 0xac,0xbb,0xbb,0x9b,0xff,0x9e,0x99,0x9e,0x40,0x8d,0x16,0xb0,0xd8,0x3a,
+ 0xd0,0xd5,0xd5,0xc5,0x37,0xa6,0x42,0x52,0x3a,0x4a,0x06,0xa7,0x52,0x29,
+ 0x44,0x22,0x91,0x5c,0x8f,0x36,0x36,0x36,0xe2,0xfe,0x83,0xc7,0x88,0x46,
+ 0xa3,0xb0,0xd9,0x6c,0x7c,0x38,0x51,0xcb,0x89,0x54,0x6c,0x6e,0x6e,0x96,
+ 0x06,0x16,0xe3,0xb2,0x90,0x85,0x42,0xa1,0xe3,0x5d,0x4d,0xc5,0x6e,0x06,
+ 0xcd,0xdf,0xfe,0xd2,0xec,0xbf,0x56,0xf8,0x36,0xfe,0x03,0x31,0xcf,0x73,
+ 0x51,0x2e,0x4c,0xd6,0x43,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,
+ 0x42,0x60,0x82
+};
+
+static const unsigned int small_shellscript_png_len = 1053;
+static const unsigned char small_shellscript_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x09,0x70,0x48,0x59,0x73,0x00,
+ 0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01,0x00,0x9a,0x9c,0x18,0x00,0x00,
+ 0x00,0x04,0x67,0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51,0x93,
+ 0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4d,0x00,0x00,0x7a,0x25,0x00,0x00,
+ 0x80,0x83,0x00,0x00,0xf9,0xff,0x00,0x00,0x80,0xe9,0x00,0x00,0x75,0x30,
+ 0x00,0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17,0x6f,0x92,0x5f,
+ 0xc5,0x46,0x00,0x00,0x03,0x93,0x49,0x44,0x41,0x54,0x78,0xda,0x62,0xfc,
+ 0xff,0xff,0x3f,0xc3,0x8c,0x19,0x33,0xfe,0x33,0x50,0x11,0x64,0x64,0x64,
+ 0x30,0x02,0x04,0x10,0x0b,0x8c,0x63,0xed,0x9f,0xc1,0xf0,0xed,0x07,0x03,
+ 0xc3,0xf7,0x5f,0x0c,0x0c,0xdc,0x1c,0x0c,0x0c,0x97,0x1e,0xfe,0x65,0xf8,
+ 0xfa,0xe3,0x1f,0xc3,0x83,0x57,0x3f,0x18,0x5e,0x7d,0xfa,0xcd,0xf0,0xe3,
+ 0xd7,0x1f,0x86,0x1f,0x7f,0xfe,0x31,0xfc,0x04,0xd2,0xdf,0x7f,0xff,0x05,
+ 0xf2,0xff,0x32,0x7c,0x03,0x89,0xfd,0xfa,0x07,0xd4,0xf3,0x97,0xe1,0xc3,
+ 0xb7,0x3f,0x0c,0x8e,0x7a,0x22,0x0c,0x7e,0xdc,0x9b,0xc1,0xe6,0x01,0x04,
+ 0xe0,0x71,0x5c,0x52,0x00,0x84,0x81,0x28,0x16,0x3a,0xa3,0x0b,0xbd,0xff,
+ 0x4d,0xd5,0xaa,0x9d,0x8f,0x03,0x42,0x17,0x8f,0x6c,0x42,0x78,0x33,0xdc,
+ 0x2f,0x28,0x8f,0x5e,0xb1,0x77,0x24,0xfb,0x3a,0xd8,0x34,0x79,0xee,0xe4,
+ 0x38,0x8d,0xa6,0x83,0x96,0x81,0x88,0x17,0x1d,0x89,0x9f,0x5a,0x5b,0x30,
+ 0xc2,0xbd,0x7c,0x9b,0xaf,0x3f,0x01,0x04,0x37,0xd8,0x4c,0x19,0xc6,0x62,
+ 0x82,0xd2,0xcc,0x50,0x9a,0x93,0xe1,0x1f,0x03,0x1f,0xc3,0x3f,0x68,0x60,
+ 0xfd,0xfd,0xc7,0x00,0x66,0x83,0x82,0xf0,0xff,0xdf,0xff,0x40,0x36,0x10,
+ 0xff,0xfb,0x07,0xa4,0xff,0x31,0xf0,0x70,0xb1,0x33,0xcc,0x9d,0x05,0x51,
+ 0x07,0x10,0x40,0x2c,0x98,0x21,0x04,0x32,0x81,0x11,0x89,0x0d,0xb4,0x0a,
+ 0xa8,0x99,0x11,0x64,0x10,0x98,0xfe,0x0b,0xa4,0x81,0x32,0xff,0xfe,0x83,
+ 0x0d,0x03,0x8a,0x32,0x70,0x70,0x71,0x40,0x1c,0xc4,0x88,0x30,0x05,0x20,
+ 0x80,0x50,0x0c,0xbe,0x7f,0xff,0x3e,0x83,0x90,0x90,0x10,0x98,0x0d,0x72,
+ 0x05,0xc8,0x20,0x14,0x2b,0xa1,0xfc,0xff,0x30,0x4b,0x18,0x19,0x19,0x3e,
+ 0x7f,0xfe,0x0c,0x16,0x93,0x91,0x91,0x61,0x60,0x65,0x65,0x86,0xab,0x05,
+ 0x08,0x20,0x98,0xbf,0x19,0x5e,0xbf,0x7e,0xcd,0x20,0x21,0x21,0xc1,0xf0,
+ 0xeb,0xd7,0x2f,0x86,0xf7,0xef,0xdf,0x83,0xc3,0x8c,0x85,0x85,0x05,0x05,
+ 0xb3,0xb2,0xb2,0x82,0x31,0x1b,0x1b,0x1b,0x03,0x3b,0x3b,0x3b,0xc3,0x5f,
+ 0xa0,0x1a,0x45,0x45,0x45,0xb0,0x25,0x9f,0x3e,0x7d,0x42,0x71,0x04,0x40,
+ 0x00,0xa1,0xb8,0x98,0x93,0x93,0x93,0xa1,0xa2,0xb2,0x92,0x41,0x51,0x49,
+ 0x89,0xe1,0xdf,0x9f,0x3f,0x0c,0x1f,0x3f,0x7c,0x60,0xe0,0x00,0x8a,0x61,
+ 0x03,0x20,0x8b,0x2e,0x5f,0xbe,0xcc,0xd0,0xd5,0xd5,0x05,0xd6,0x87,0xee,
+ 0x3b,0x80,0x00,0x82,0x1b,0xcc,0xc4,0x04,0x71,0xbc,0xa8,0x88,0x08,0x83,
+ 0x00,0x30,0x38,0x1c,0x5c,0x5c,0x18,0x4e,0x1d,0x3b,0xc6,0xb0,0x69,0xed,
+ 0x5a,0x60,0xd8,0x31,0x82,0xbd,0x0d,0x03,0x20,0x36,0x2c,0x28,0x40,0x3e,
+ 0xfc,0x03,0x74,0x04,0x17,0x17,0x17,0x8a,0xc1,0x00,0x01,0x84,0x61,0xf0,
+ 0xb3,0x67,0xcf,0x18,0xf8,0xc5,0xc4,0x18,0xde,0xbe,0x7b,0xc7,0x70,0xf3,
+ 0xc6,0x0d,0x86,0x8b,0x97,0x2e,0x81,0xc5,0x41,0xde,0x07,0x05,0x03,0x72,
+ 0x78,0x83,0x82,0x02,0x14,0xc6,0x20,0xd7,0xc3,0xf4,0xc3,0x00,0x40,0x00,
+ 0x61,0xa4,0x8a,0x9f,0x3f,0x7f,0x32,0x4c,0x99,0x38,0x91,0xa1,0xae,0xbc,
+ 0x9c,0x81,0x09,0xe8,0x22,0x77,0x1f,0x1f,0x06,0x4e,0xa0,0x6b,0x6e,0x5e,
+ 0xbb,0xc6,0x70,0xfd,0xca,0x15,0x06,0x46,0xa0,0x01,0xa0,0x88,0xfd,0xf6,
+ 0xed,0x1b,0x58,0x3d,0xc8,0xb5,0x20,0x83,0x99,0x99,0x99,0x51,0xcc,0x01,
+ 0x08,0x20,0xb8,0xc1,0x20,0xc5,0x30,0x83,0x6f,0x01,0x0d,0x01,0x01,0x6e,
+ 0x6e,0x6e,0x86,0x6f,0x5f,0xbe,0x80,0x9c,0xc7,0xf0,0xf5,0xeb,0x57,0x60,
+ 0x46,0xf9,0x0a,0x76,0x25,0x08,0x23,0xbb,0x1c,0x84,0xd1,0x5d,0x0c,0x10,
+ 0x40,0x70,0x83,0x7f,0xff,0xfe,0x0d,0x8f,0x40,0x10,0xe0,0xe1,0xe1,0x01,
+ 0xc7,0xfc,0xa1,0x03,0x07,0xc0,0x9a,0x98,0x81,0xae,0x02,0x25,0x45,0x50,
+ 0x98,0x82,0x5c,0xfb,0xe3,0xc7,0x0f,0xb0,0x4b,0x41,0x2e,0x86,0x85,0x3b,
+ 0x32,0x00,0x08,0x20,0xb8,0xc1,0x30,0xaf,0x80,0xc2,0x12,0x04,0xf8,0xf9,
+ 0xf9,0xc1,0x11,0x02,0x0b,0x5b,0x90,0xab,0x40,0x96,0xc3,0x0c,0x04,0xf1,
+ 0x41,0xe2,0x30,0xd7,0x83,0xc4,0x90,0x01,0x40,0x00,0xb1,0x20,0x27,0x1f,
+ 0x98,0x4b,0xc5,0x80,0x91,0x27,0x2e,0x2e,0x0e,0x36,0x18,0x14,0x1c,0x20,
+ 0xc3,0x41,0x06,0x80,0x0c,0xfe,0xfe,0xfd,0x3b,0x38,0xc2,0x60,0x16,0x82,
+ 0xc4,0x41,0xae,0x46,0x77,0x31,0x40,0x00,0xa1,0xa4,0x0a,0x50,0x38,0x97,
+ 0x95,0x95,0x31,0xa4,0xa5,0xa5,0x81,0xc5,0x40,0xde,0x86,0xb9,0x0e,0xa4,
+ 0x19,0x64,0x30,0xc8,0x20,0x90,0xe1,0xa0,0x34,0x0c,0x02,0x97,0xa0,0xa9,
+ 0xe6,0xc8,0x91,0x23,0x28,0x06,0x03,0x04,0x10,0xdc,0x60,0x5e,0x5e,0x5e,
+ 0x86,0x37,0x6f,0xde,0x80,0x2d,0x00,0x05,0x03,0xc8,0x12,0x58,0x44,0xfd,
+ 0x85,0xe6,0x42,0x58,0x90,0xc0,0x22,0x1a,0x58,0xee,0xa2,0x18,0x06,0x2c,
+ 0xd7,0x19,0x32,0x33,0x33,0xe5,0x40,0xe2,0x00,0x01,0x84,0xe2,0x62,0x51,
+ 0x51,0x51,0xb8,0xb7,0xd0,0xbd,0x06,0xe3,0x83,0x68,0x50,0xca,0x39,0x73,
+ 0xe6,0x0c,0xd8,0x42,0x58,0xdc,0x40,0x0d,0xd5,0x04,0x32,0x1f,0x83,0xf8,
+ 0x00,0x01,0xc4,0x82,0xae,0x19,0x39,0x13,0xe0,0x02,0xa0,0xd4,0x02,0x4b,
+ 0x49,0x20,0x1f,0xcc,0x99,0x33,0x07,0x64,0xa8,0x24,0x50,0xe8,0x05,0x4c,
+ 0x0d,0x40,0x00,0xb1,0x90,0x53,0xf5,0xc0,0x5c,0x0f,0x0a,0xba,0x2d,0x5b,
+ 0xb6,0x60,0x18,0x0a,0x02,0x00,0x01,0xc4,0x42,0x49,0xdd,0x06,0x35,0x14,
+ 0x54,0xce,0xbe,0x47,0x97,0x03,0x08,0x20,0x16,0xe4,0x80,0x27,0x15,0x00,
+ 0x0d,0x15,0x04,0x52,0x1f,0xb0,0xc9,0x01,0x04,0x18,0x00,0xf8,0x8e,0xa8,
+ 0xba,0x67,0x19,0x36,0x31,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,
+ 0x42,0x60,0x82
+};
+
+static const unsigned int small_slider_png_len = 729;
+static const unsigned char small_slider_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x02,0x6b,0x49,0x44,0x41,0x54,0x48,0xc7,0xbd,0x95,
+ 0xdf,0x6b,0x52,0x61,0x18,0xc7,0x5f,0x1c,0x96,0xcb,0x75,0x33,0x2a,0x08,
+ 0x82,0x2e,0xc4,0x09,0xbb,0xcb,0x81,0x17,0x05,0x41,0x45,0x6b,0x1a,0x5d,
+ 0x74,0x2e,0x86,0xce,0x60,0x2d,0xa8,0xd4,0x84,0x72,0x8e,0x30,0x42,0xc2,
+ 0x46,0x85,0x21,0x54,0x98,0x14,0x42,0xc6,0xa1,0x35,0x6c,0xc9,0x5a,0x8e,
+ 0xa4,0x82,0x41,0xa3,0xa8,0x06,0xb1,0x15,0xc8,0x98,0x0d,0xb6,0xab,0x55,
+ 0x17,0xd5,0xbf,0xf0,0xed,0x79,0xce,0x79,0x77,0x60,0xe2,0x85,0x3f,0xaa,
+ 0x03,0x1f,0xe4,0x78,0x9e,0xf7,0xe3,0xfb,0xbe,0xe7,0xfb,0x3e,0x0a,0x00,
+ 0xe2,0x5f,0x20,0xfe,0x9b,0x98,0x2e,0x13,0x61,0x26,0xda,0x09,0x2b,0xd1,
+ 0x21,0x3f,0xdb,0xe5,0xf7,0xa6,0x86,0xc5,0x3c,0x28,0x1c,0x0e,0x0f,0x04,
+ 0x02,0x81,0x25,0xaf,0xd7,0x0b,0x45,0x51,0xe0,0xf1,0x78,0x60,0xb7,0xdb,
+ 0x97,0xe9,0x59,0x80,0xe8,0x24,0x2c,0xf5,0xc8,0xab,0xc5,0xe6,0x60,0x30,
+ 0xf8,0x6e,0xea,0xfd,0x39,0xcc,0xae,0xfa,0x31,0xb3,0xa2,0x60,0xba,0xe2,
+ 0xc2,0x15,0x55,0xf0,0xc3,0x05,0xc2,0x21,0xe5,0xe6,0x46,0xc5,0x16,0xbf,
+ 0xdf,0x8f,0xd9,0x95,0x41,0xbc,0xaa,0xb8,0x51,0x5c,0x74,0xe2,0xd1,0xbc,
+ 0xc0,0x8d,0x09,0x4d,0xcc,0xec,0x25,0x76,0x71,0x5d,0xa3,0x62,0x2b,0x2f,
+ 0xff,0x75,0x45,0xc1,0xb3,0x72,0x0f,0xd4,0x4f,0x02,0xa9,0xa2,0xc0,0xc8,
+ 0x5d,0x43,0x7c,0x84,0xb0,0x71,0x5d,0xa3,0xe2,0x0e,0x16,0xbf,0x5c,0x54,
+ 0x50,0xf8,0xec,0xc4,0xc3,0x8f,0x02,0x37,0x27,0x05,0x86,0xef,0x18,0xe2,
+ 0xa3,0x84,0x9d,0xeb,0x1a,0x15,0x6f,0x65,0xf1,0x8b,0xb2,0x82,0xdf,0xf8,
+ 0x8a,0x33,0x63,0x02,0x3f,0x50,0x86,0xe7,0xa2,0x21,0x3e,0x46,0x74,0x71,
+ 0x5d,0x5d,0x62,0xba,0xda,0x88,0x4d,0xc4,0x0e,0x16,0x4f,0x7f,0xd1,0xc5,
+ 0xa7,0x55,0x5d,0xec,0x1e,0x31,0xc4,0xfd,0xc4,0x1e,0x62,0x27,0xcb,0x6b,
+ 0xc0,0xd1,0xdc,0x22,0x5d,0x9a,0xf4,0x9a,0x1c,0xa8,0x45,0xec,0xf9,0xbc,
+ 0x2e,0x3e,0xf5,0x40,0xe0,0x3b,0x89,0x7b,0x87,0x0d,0x71,0x3d,0xdc,0x22,
+ 0xb6,0x0b,0x19,0x7a,0x44,0x22,0x11,0x64,0xb3,0x59,0x4d,0x3c,0x39,0xa7,
+ 0xe0,0x17,0x89,0x4f,0xde,0xd7,0xc5,0x87,0xcf,0xeb,0x83,0xe2,0xf1,0x38,
+ 0xd2,0xe9,0x34,0x54,0x55,0x45,0x3e,0x9f,0xdf,0x40,0xa1,0x50,0x40,0xa9,
+ 0x54,0xd2,0x3c,0x54,0xdb,0xcd,0xe2,0xcd,0x44,0xca,0xe5,0x72,0x81,0x32,
+ 0xac,0x89,0x9f,0x7e,0x50,0xf0,0x93,0xc4,0x27,0x32,0x02,0xdf,0x48,0x7c,
+ 0x28,0xac,0x8b,0x7d,0x3e,0x1f,0x42,0xa1,0x10,0xa2,0xd1,0x28,0x62,0xb1,
+ 0xd8,0x06,0x12,0x89,0x04,0x72,0xb9,0x1c,0x92,0xc9,0xe4,0x63,0xaa,0xed,
+ 0x59,0x9f,0xf1,0x36,0xf9,0x2b,0x7d,0x2c,0x7e,0xf2,0x56,0x17,0x0f,0x50,
+ 0x1a,0xd6,0x48,0x7c,0x30,0x68,0x2c,0x73,0x54,0x9e,0xc0,0x7e,0xf9,0x22,
+ 0xab,0xf1,0x10,0xfb,0xd7,0x67,0xdc,0x26,0x37,0x9c,0xf7,0xa5,0x9b,0xc5,
+ 0xe3,0x6f,0x14,0xdc,0x2b,0x39,0x71,0x7d,0x42,0xcf,0xf0,0xd0,0x65,0x43,
+ 0xcc,0xd2,0x5e,0xf9,0x02,0xbb,0x6a,0xc0,0x51,0xdc,0xad,0xb9,0x6a,0xa5,
+ 0x62,0x6c,0x46,0x41,0xa6,0xe8,0xc4,0xe8,0x38,0x65,0xf8,0xb6,0xc0,0x60,
+ 0xac,0x89,0x54,0x54,0x1f,0x10,0xb7,0xdb,0x8d,0xcc,0x94,0xde,0x1f,0x2e,
+ 0xa4,0x04,0xce,0x5e,0xa5,0xbd,0x8d,0xb4,0x7e,0x40,0xac,0x0e,0x87,0x63,
+ 0x6e,0xe8,0x92,0x2e,0xf4,0x53,0xcc,0xbc,0x94,0x88,0x03,0xc7,0x35,0xe9,
+ 0x52,0x2b,0x47,0xda,0x22,0xf7,0x71,0xb5,0x2a,0x9b,0x6b,0x9c,0x9c,0x56,
+ 0x9a,0x90,0x59,0xb6,0x45,0x6e,0x8f,0xfb,0x38,0x25,0x72,0xf9,0x7d,0xf2,
+ 0xbe,0xe9,0xb6,0x69,0x92,0xb3,0xee,0x94,0x33,0xb3,0xc9,0x3d,0xb5,0xc9,
+ 0xfb,0xe6,0x1a,0xfd,0xdf,0xfc,0x6b,0xfa,0x03,0x1c,0x60,0x85,0x9a,0xe9,
+ 0x45,0x38,0x23,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,
+ 0x82
+};
+
+static const unsigned int small_spacer_png_len = 715;
+static const unsigned char small_spacer_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x02,0x5d,0x49,0x44,0x41,0x54,0x48,0xc7,0x63,0xf8,
+ 0xff,0xff,0x3f,0x03,0x2d,0x30,0xc3,0xa8,0xc1,0xb4,0x37,0x18,0x08,0x18,
+ 0x81,0x98,0x05,0x88,0x39,0x80,0x98,0x1b,0x8a,0x39,0xa0,0x62,0x8c,0x44,
+ 0x18,0x80,0x4b,0x3f,0x03,0x4b,0x68,0x68,0xe8,0x7f,0x1f,0x1f,0x9f,0xff,
+ 0x26,0x26,0x26,0x20,0x95,0x20,0x2c,0x09,0xc4,0xbc,0x20,0x39,0x22,0x0c,
+ 0xc6,0xa5,0x9f,0x81,0x03,0x24,0xb8,0x79,0xf3,0xe6,0xff,0x8b,0x17,0x2f,
+ 0x86,0x49,0xc0,0xb0,0x15,0x10,0x6b,0x00,0x71,0x38,0x92,0x18,0xc8,0x42,
+ 0x7b,0x20,0xce,0x83,0x89,0x61,0xd1,0x6f,0x0c,0x32,0x98,0xdb,0xcb,0xcb,
+ 0xeb,0xff,0xaa,0x55,0xab,0xfe,0xd7,0xd5,0xd5,0x81,0x25,0x6e,0x3e,0x7b,
+ 0xf7,0xff,0xf0,0x95,0xbb,0x30,0x45,0x60,0x43,0xaf,0x3f,0x79,0xf3,0xbf,
+ 0x77,0xe1,0x2a,0xb0,0x58,0x5a,0x69,0xcd,0x5c,0x10,0x7d,0xfe,0xde,0xb3,
+ 0xff,0x42,0x0a,0xaa,0xff,0x5d,0x5d,0x5d,0x51,0xf4,0x03,0xb1,0x0b,0xc8,
+ 0x60,0x5e,0x90,0xc1,0x4b,0x97,0x2e,0xfd,0x5f,0x51,0x51,0x01,0x96,0x38,
+ 0x7c,0xe3,0xd1,0x3f,0x64,0x97,0x9f,0xb8,0xfd,0xe4,0xff,0xf6,0xe3,0x17,
+ 0x7e,0x22,0x8b,0x1d,0xbb,0xf1,0xe8,0xff,0xe4,0x25,0x6b,0xef,0x80,0xd8,
+ 0xe8,0xfa,0x81,0xd8,0x17,0x6e,0xf0,0xfc,0xf9,0xf3,0xff,0x17,0x15,0x15,
+ 0xc1,0x35,0xf2,0x0a,0x08,0x80,0xe9,0xf5,0xc7,0xaf,0x7c,0x5b,0x7d,0xe8,
+ 0x02,0x8a,0x45,0x5b,0xcf,0xdd,0xfa,0xbf,0x68,0xdb,0x41,0xb8,0x45,0x58,
+ 0xf4,0x23,0x0c,0x9e,0x31,0x63,0xc6,0xff,0xdc,0xdc,0x5c,0xb0,0x84,0x63,
+ 0x48,0xcc,0x2e,0x10,0x9d,0x55,0xdf,0xf5,0x7f,0xda,0xf6,0x13,0x60,0x31,
+ 0x0e,0x2e,0xae,0x52,0x10,0x3d,0x79,0xcd,0xae,0xff,0x13,0xd7,0xef,0x87,
+ 0x19,0x60,0x09,0xa2,0xed,0xed,0xed,0x51,0xf4,0xa3,0x18,0x3c,0x69,0xd2,
+ 0xa4,0xff,0xe9,0xe9,0xe9,0x60,0x09,0x36,0x0e,0xae,0xf9,0x20,0xba,0x79,
+ 0xc9,0xf6,0xff,0x05,0x93,0x96,0x20,0x47,0xe4,0xff,0xda,0xc5,0x3b,0xfe,
+ 0x27,0x54,0xb4,0xc3,0xc4,0x62,0x40,0xb4,0xb1,0xb1,0x31,0x8a,0x7e,0x14,
+ 0x83,0xbb,0xba,0xba,0xfe,0x27,0x26,0x26,0xc2,0xbd,0x9b,0xd6,0x3e,0xe3,
+ 0x41,0x42,0x0f,0xc4,0x50,0x26,0x16,0x96,0x12,0x10,0x5d,0x30,0x6d,0xd5,
+ 0xb7,0xb0,0xea,0x7e,0x98,0x1a,0x73,0x10,0xed,0xdb,0xb1,0xf0,0xbf,0xae,
+ 0xae,0x2e,0xba,0x7e,0x84,0xc1,0xcd,0xcd,0xcd,0xff,0x23,0x23,0x23,0xe1,
+ 0x06,0x47,0xb7,0xcf,0xfb,0xef,0x98,0x5a,0x81,0x92,0xfc,0xfc,0x6a,0xa7,
+ 0xfd,0x37,0xf4,0x0c,0x83,0xc4,0x81,0x90,0x30,0x98,0x76,0xc8,0x6f,0xfb,
+ 0x03,0x32,0x18,0x4d,0x3f,0xc2,0xe0,0x9a,0x9a,0x9a,0xff,0xc1,0xc1,0xc1,
+ 0x60,0x89,0xe0,0xb2,0x9e,0xb7,0x76,0xd9,0xcd,0x28,0x86,0xfa,0x57,0x4f,
+ 0xfe,0x6b,0x12,0x95,0xf7,0x03,0x59,0xcc,0xb9,0xb8,0xe7,0xbf,0xb6,0x4f,
+ 0xd4,0x4d,0x33,0x33,0x33,0x14,0xfd,0x28,0x06,0x97,0x96,0x96,0xfe,0xf7,
+ 0xf5,0xf5,0x05,0x4b,0x58,0x65,0xb5,0x40,0x82,0x80,0x8d,0xab,0x0e,0x44,
+ 0x5b,0x26,0x57,0x3f,0x32,0x8e,0x2b,0x81,0x69,0xb2,0x05,0xd1,0x76,0xd9,
+ 0x2d,0x3f,0x75,0x03,0x52,0xc0,0x16,0x39,0x3a,0x3a,0xa2,0xe8,0x87,0x1b,
+ 0x0c,0xca,0x8a,0x11,0x11,0x11,0x60,0x05,0x48,0x2e,0xaa,0x86,0xe6,0x30,
+ 0x0d,0x24,0x31,0x50,0xc2,0xe7,0x03,0x62,0x3b,0x24,0x31,0x37,0x2c,0xfa,
+ 0xc1,0x06,0x73,0xa3,0x65,0x63,0x98,0x01,0x4a,0x20,0x39,0x22,0xca,0x0a,
+ 0x5c,0xfa,0xc1,0x25,0x91,0x24,0x34,0x7f,0xbb,0x40,0xb1,0x31,0x54,0x8c,
+ 0x83,0x08,0x83,0x71,0xe9,0x07,0x17,0x79,0xbc,0x50,0x49,0x25,0x28,0x26,
+ 0xa9,0x74,0xc3,0xa1,0x9f,0x36,0xe5,0x31,0x00,0xda,0xdd,0x5c,0xc0,0x6d,
+ 0x57,0xec,0xdb,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,
+ 0x82
+};
+
+static const unsigned int small_spinbox_png_len = 455;
+static const unsigned char small_spinbox_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x04,0x00,0x00,
+ 0x00,0x6e,0xbd,0xa4,0xb0,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0x59,0x49,0x44,0x41,0x54,0x28,0xcf,0x7d,0xd3,
+ 0xb1,0x4a,0x5b,0x51,0x1c,0x80,0xf1,0x8f,0x40,0x48,0x20,0xc9,0x70,0xe7,
+ 0x6c,0x81,0x64,0xf0,0x11,0xf2,0x02,0x19,0x82,0xbb,0xf5,0x05,0xee,0x03,
+ 0xf8,0x10,0x52,0xb0,0xe0,0x54,0x28,0x68,0x45,0x45,0x87,0x40,0x87,0x42,
+ 0x97,0x96,0x42,0x09,0x86,0x46,0x24,0x88,0x50,0x5a,0x14,0xc4,0x50,0x82,
+ 0xa0,0xa0,0x20,0x08,0x2a,0xc1,0xf2,0x75,0x48,0x4c,0x8e,0x70,0x12,0x7e,
+ 0xdc,0xc3,0x7f,0xf8,0xe0,0xc0,0xe1,0x7f,0x21,0xf3,0x76,0x79,0xb5,0xb3,
+ 0x62,0x3a,0xd3,0x92,0x0b,0x87,0xa4,0x24,0xe4,0x20,0xbb,0xda,0x39,0xf7,
+ 0xdf,0x5c,0x6d,0x39,0xa6,0x46,0x02,0xf9,0x15,0x9f,0x1d,0xce,0xf0,0xd3,
+ 0xa1,0x43,0x8f,0x44,0xea,0x94,0xa1,0x90,0xfa,0xe4,0x63,0xd4,0x81,0x78,
+ 0xe0,0xa3,0x1d,0x91,0x06,0x15,0x28,0xa6,0x3e,0x78,0x1f,0xd1,0x16,0x11,
+ 0xdb,0xa3,0xa9,0x49,0x15,0x4a,0xa9,0xf7,0xde,0x45,0x30,0xf1,0x43,0x64,
+ 0x91,0x1a,0x94,0x52,0xef,0x6c,0x89,0xd8,0xf2,0x26,0x98,0xa6,0xbe,0x87,
+ 0xf1,0xad,0x78,0xe5,0x95,0x8c,0xbf,0x97,0xf3,0xc5,0xd7,0x30,0xbe,0x76,
+ 0x57,0xc4,0x5d,0x07,0x0e,0xc6,0x57,0x0f,0x02,0x5f,0xc2,0xf8,0x52,0xec,
+ 0xdb,0x1f,0x9f,0xaf,0xa7,0xbe,0x7d,0x3f,0x87,0xf1,0x5f,0x37,0x45,0xdc,
+ 0xf4,0x2c,0x98,0xa6,0x3e,0x85,0xf1,0x85,0xbf,0x23,0xa6,0xaf,0xd1,0x0a,
+ 0xe3,0x33,0x4f,0x22,0xf6,0xc6,0xe9,0x9e,0xfb,0x61,0xfc,0xc7,0x5e,0xd4,
+ 0xb6,0xb8,0x6d,0xcf,0x9d,0x30,0xfe,0x65,0x77,0x86,0x8f,0x76,0xed,0xba,
+ 0x15,0xc6,0x27,0x76,0xe6,0xda,0x98,0xc4,0xc5,0x25,0x7b,0xb6,0xe7,0xf8,
+ 0xe6,0xfa,0x64,0x37,0x0a,0x0b,0x87,0xeb,0x7e,0xf0,0xfd,0x4c,0xef,0x7c,
+ 0x23,0xa7,0xa3,0xad,0xcb,0x93,0x72,0x8c,0x73,0x9d,0xb2,0x36,0xda,0xe7,
+ 0x2c,0x09,0x35,0xea,0x34,0x68,0xb2,0x18,0xd5,0xa4,0x41,0x7d,0xf4,0xa7,
+ 0x64,0xc8,0x91,0x50,0xa6,0x42,0x95,0x5a,0x54,0x95,0x0a,0x65,0x12,0x72,
+ 0x08,0x19,0xb2,0xe4,0x29,0x50,0xa4,0x14,0x55,0xa4,0x40,0x9e,0x2c,0x99,
+ 0xff,0x6a,0xa0,0x52,0xe8,0x80,0x5e,0x8e,0x49,0x00,0x00,0x00,0x00,0x49,
+ 0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_statusbar_png_len = 294;
+static const unsigned char small_statusbar_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0xed,0x49,0x44,0x41,0x54,0x78,
+ 0x9c,0xb5,0xd4,0xb1,0x0e,0x82,0x30,0x10,0x06,0xe0,0xbf,0x80,0x8b,0x10,
+ 0xc3,0xa6,0x89,0xb8,0xf1,0x00,0x37,0xb1,0x99,0x38,0x9a,0x98,0xb0,0x78,
+ 0x0f,0xe9,0xc0,0xe6,0x8b,0xf0,0x00,0x6c,0xc6,0xc1,0xcd,0x45,0x17,0x51,
+ 0x1c,0x4c,0x6b,0x21,0x48,0x25,0xd0,0x5b,0x5a,0x0a,0xf9,0x8e,0xfc,0x90,
+ 0x13,0x55,0x55,0xc1,0x46,0x39,0x56,0x54,0x9b,0xb0,0x18,0x1b,0xb4,0x15,
+ 0xad,0xc2,0x05,0x36,0xb0,0xd2,0xc2,0xf3,0x1f,0x5b,0xac,0x17,0x33,0x84,
+ 0x93,0xf1,0xe2,0x3e,0x9e,0xae,0xf0,0x6e,0x97,0x33,0xc2,0x55,0x88,0x24,
+ 0x49,0x90,0xa6,0xe9,0x60,0xf4,0xfe,0x7c,0xe1,0xb0,0xdb,0x7f,0xff,0x8a,
+ 0x28,0x8a,0x06,0xa3,0x00,0x30,0x75,0x3f,0xa4,0x82,0x83,0x20,0xa8,0x3d,
+ 0xc0,0xcc,0x60,0x66,0xc4,0x71,0xac,0xce,0xf4,0xbd,0xa9,0x5a,0x83,0x95,
+ 0x40,0x96,0x65,0x20,0xa2,0x5e,0x60,0x27,0x2c,0x51,0x7d,0x6d,0x36,0x36,
+ 0x35,0x6b,0x85,0x89,0xe8,0xe7,0xb5,0x04,0x8b,0xa2,0xe8,0x0f,0x9b,0xca,
+ 0x84,0x76,0xc2,0xcc,0xac,0xd6,0x3c,0xcf,0x6b,0xf7,0xfe,0xc9,0xdc,0xa1,
+ 0xc0,0x05,0x00,0x94,0x65,0xa9,0x0e,0x65,0xae,0x12,0xd7,0xdf,0x50,0xee,
+ 0x4d,0xb8,0x27,0x37,0xcd,0xe1,0xd1,0xf6,0xd1,0x24,0x6a,0x8a,0xc2,0x9f,
+ 0x2f,0x21,0x88,0xc8,0xe2,0x38,0xb2,0x50,0xa3,0xce,0x63,0x3d,0xce,0x5e,
+ 0x70,0x9f,0x21,0x2e,0x6c,0x4d,0xfc,0x37,0x31,0xad,0x4f,0x4d,0xa2,0x0d,
+ 0xe1,0x14,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_table_png_len = 483;
+static const unsigned char small_table_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x04,0x00,0x00,
+ 0x00,0x6e,0xbd,0xa4,0xb0,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0x75,0x49,0x44,0x41,0x54,0x28,0x15,0x05,0xc1,
+ 0x3f,0x4b,0x94,0x01,0x1c,0x00,0xe0,0xe7,0xbd,0xfb,0xe1,0x21,0x24,0xb7,
+ 0x28,0xad,0xe5,0x26,0x4e,0x4e,0x0e,0x37,0x84,0x0e,0x37,0x44,0x0d,0x12,
+ 0x45,0x9f,0xc1,0xa9,0xaf,0xd1,0x67,0x88,0x70,0x8a,0xe2,0x1c,0x8c,0x94,
+ 0x1a,0x5d,0x24,0x10,0xa2,0x3f,0x07,0xa7,0x39,0x35,0x54,0x83,0x78,0x8b,
+ 0x78,0xde,0x71,0xbd,0xef,0xef,0x7d,0x7b,0x9e,0xd0,0x7a,0xf9,0xbc,0xde,
+ 0x1d,0xf7,0x26,0x00,0x00,0x00,0xae,0x0d,0x4f,0xcf,0xf6,0x0c,0x4c,0x43,
+ 0xbb,0xde,0x7d,0xda,0xbb,0x0f,0xb6,0x75,0x1d,0x00,0x80,0x81,0x67,0x38,
+ 0xd9,0x7c,0xb0,0xe0,0xd8,0x55,0x68,0x8f,0x7b,0xf7,0x24,0xe8,0x5a,0x97,
+ 0x00,0x20,0x25,0x16,0xd9,0xb0,0xec,0x36,0xb4,0x27,0xde,0x6a,0x40,0xc7,
+ 0x8a,0x77,0x00,0xe0,0x54,0x8d,0x5f,0xb0,0xa4,0x13,0x0a,0x9e,0x48,0x70,
+ 0x88,0x1d,0x00,0xd0,0xd8,0xc1,0x57,0x08,0xed,0x50,0x90,0x12,0x40,0x02,
+ 0x80,0x94,0xa8,0xa1,0xa5,0x08,0x78,0xa4,0xab,0x83,0xbb,0x3a,0xde,0x38,
+ 0x77,0x09,0x80,0x4f,0x00,0x08,0xe8,0x5a,0xb7,0x82,0x8e,0x3b,0x58,0xb3,
+ 0x0a,0x00,0x60,0x1f,0x04,0xbc,0xf2,0x0f,0x7c,0xc0,0x36,0x00,0x38,0xf4,
+ 0x18,0x3f,0x00,0x01,0x95,0x0a,0x9c,0x5b,0x53,0x01,0x80,0x54,0x21,0x01,
+ 0x01,0x07,0x4a,0x70,0x69,0xd5,0x7b,0x00,0xf0,0x5d,0x85,0xdf,0x80,0x80,
+ 0x87,0x66,0xe0,0x33,0xfa,0x00,0x20,0xf5,0x31,0x02,0x04,0x94,0x4a,0x00,
+ 0x25,0x00,0x48,0x25,0x2a,0x40,0xc0,0x91,0x39,0x80,0x8f,0x00,0x60,0x28,
+ 0xf1,0x17,0x10,0xd0,0x37,0x01,0xdf,0xb0,0x05,0x00,0xd2,0x16,0x7e,0x02,
+ 0x02,0x52,0x02,0x48,0x00,0x50,0x4b,0x24,0x20,0x34,0xd7,0x2a,0x09,0x20,
+ 0x01,0x40,0x2d,0xcd,0x4d,0xa0,0xd6,0x84,0x66,0x78,0x7a,0xb2,0xb9,0x28,
+ 0x01,0x23,0x00,0xf0,0xc7,0xc8,0xcc,0x17,0x2e,0x54,0x32,0xe4,0xd9,0xde,
+ 0x8b,0x05,0x1b,0xc0,0x3e,0x00,0x80,0xd7,0x70,0xe1,0xc8,0x8d,0x79,0x48,
+ 0x03,0xc7,0x96,0x2d,0x09,0x2d,0x00,0x00,0x50,0xab,0xdc,0x18,0x9b,0x86,
+ 0x34,0x75,0xe5,0x56,0x47,0x5b,0x01,0x00,0x00,0x1a,0x69,0x6e,0x6a,0x1a,
+ 0x4d,0x5d,0x94,0x26,0x66,0xda,0x0a,0x05,0x00,0x00,0x68,0x34,0x52,0xca,
+ 0xff,0xf8,0x11,0x91,0x01,0x37,0xfc,0x06,0x6a,0x00,0x00,0x00,0x00,0x49,
+ 0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_tabwidget_png_len = 572;
+static const unsigned char small_tabwidget_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0xce,0x49,0x44,0x41,0x54,0x48,0xc7,0xd5,0x95,
+ 0xbd,0x6e,0xd4,0x40,0x10,0x80,0xbf,0x19,0xef,0xe9,0x72,0x09,0xd6,0x91,
+ 0x44,0x22,0x11,0x12,0xdd,0xb9,0x3b,0x9e,0x80,0x16,0x4a,0xa4,0x74,0x20,
+ 0x1e,0x21,0x25,0x0d,0x12,0xbc,0x48,0x0a,0xde,0x22,0x45,0x5a,0x5a,0xa8,
+ 0x10,0x12,0x1d,0xa4,0x02,0x9d,0x52,0x38,0x16,0xe0,0xe0,0x3b,0xff,0x2d,
+ 0x85,0xd7,0xbe,0x35,0x17,0x09,0x71,0x47,0x0a,0x46,0x1a,0xcd,0x78,0xbc,
+ 0xfb,0x79,0x3c,0xb3,0x1e,0x8b,0xb5,0x96,0x9b,0x10,0xe5,0x86,0xe4,0xff,
+ 0x03,0x8b,0xd3,0x00,0x30,0xce,0xfa,0x0f,0xab,0x81,0x0a,0x28,0x9d,0x6d,
+ 0xf7,0xa8,0xb7,0xd7,0x17,0xeb,0xb4,0x36,0x40,0x30,0x9d,0x4e,0x8b,0x3c,
+ 0xcf,0xf1,0x1b,0x99,0xa6,0x29,0xb3,0xd9,0x8c,0xc9,0x64,0x82,0xb5,0x16,
+ 0x11,0x41,0x44,0x7a,0xf7,0xa2,0x28,0x5a,0x59,0x0f,0x84,0x40,0x6e,0x00,
+ 0x93,0xe7,0x39,0x8f,0x8f,0xaf,0xa8,0xea,0x05,0x08,0xa8,0xc2,0xcf,0x79,
+ 0xcc,0xc9,0x0b,0x48,0x9e,0xbc,0xa6,0x0e,0x0f,0x91,0xed,0xdb,0xc8,0x60,
+ 0x08,0x40,0x9c,0xd5,0xf0,0x7c,0x9f,0x77,0x97,0x97,0xcb,0x57,0x8b,0x63,
+ 0xf6,0x1b,0x37,0x04,0x7e,0x18,0x20,0xb0,0xd6,0x52,0xd5,0x0b,0xae,0xe6,
+ 0x31,0xaa,0x20,0x0a,0x5f,0x3f,0x37,0xab,0xbe,0x7d,0xf9,0x44,0x19,0xa6,
+ 0x30,0xda,0x85,0xc1,0x56,0x13,0xfc,0x70,0x0a,0xc0,0x79,0x1c,0x77,0xe0,
+ 0xd3,0x65,0x39,0xc6,0x40,0x61,0xba,0x9a,0xba,0x4c,0x45,0x1b,0x7b,0xe7,
+ 0x1e,0xdc,0x7f,0x00,0x17,0x67,0x2f,0x19,0x8f,0xc7,0xab,0xdd,0x89,0x22,
+ 0x9e,0x7a,0x97,0x69,0x9a,0x42,0x53,0x8a,0x3d,0x20,0x33,0xdd,0xf1,0xf0,
+ 0xa0,0xa2,0xb0,0x1d,0xc2,0xc3,0x67,0x03,0xb6,0x86,0x0b,0x8c,0x49,0x50,
+ 0x05,0x0d,0xe8,0x6c,0x10,0xb8,0xf5,0x41,0xa3,0xf3,0x22,0xe6,0xd5,0x11,
+ 0x00,0x07,0x40,0xd2,0x81,0x7d,0x68,0xbb,0x19,0x29,0xc9,0xcb,0xef,0x94,
+ 0xd6,0x01,0x6a,0x07,0xb5,0xa0,0x6d,0x8c,0xc6,0x7f,0xff,0xa6,0x4b,0x7e,
+ 0x07,0x18,0xea,0x75,0x19,0xb7,0x59,0x5c,0xe7,0x07,0x81,0x17,0xf3,0xe2,
+ 0x22,0xfd,0x6f,0xa3,0x03,0x8b,0xac,0x0f,0x6d,0x93,0x72,0x92,0x01,0x45,
+ 0x2f,0xe3,0x4d,0xa0,0x1e,0xb8,0x00,0xaa,0x65,0xf3,0xda,0x1a,0xae,0x01,
+ 0xfd,0xad,0x14,0x15,0x50,0x6b,0x0f,0xbc,0x26,0x54,0xb5,0x07,0xee,0x0f,
+ 0x21,0xd9,0x04,0xaa,0xab,0x53,0xc3,0xb4,0x87,0x7b,0x9e,0xc7,0x7c,0x7c,
+ 0xeb,0x35,0xd1,0x65,0xd1,0xd6,0x4f,0x5b,0xdf,0x8b,0x89,0xb8,0x4c,0x05,
+ 0x92,0x8b,0xd5,0xe9,0xb6,0x03,0xa4,0xff,0x70,0x62,0x3e,0x02,0xce,0x8d,
+ 0x2b,0xf6,0x5d,0xa7,0xbb,0xc0,0x68,0x03,0x68,0x06,0x24,0x40,0x26,0xae,
+ 0x1c,0x23,0xe0,0x96,0xb3,0x66,0x03,0x70,0xe9,0xe0,0xe9,0x9f,0x06,0xfd,
+ 0xdf,0x4a,0xf7,0x63,0xf8,0x05,0xcf,0xaa,0x90,0x2f,0xd4,0xc0,0xa1,0x02,
+ 0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_textbrowser_png_len = 514;
+static const unsigned char small_textbrowser_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x04,0x00,0x00,
+ 0x00,0x6e,0xbd,0xa4,0xb0,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0x94,0x49,0x44,0x41,0x54,0x28,0xcf,0x7d,0x93,
+ 0x31,0x48,0x42,0x51,0x14,0x86,0x0f,0x82,0x24,0x68,0x43,0x73,0x9b,0xa0,
+ 0x41,0xd0,0x5e,0xd6,0xee,0x20,0x0e,0xd1,0x62,0xad,0x0d,0x0f,0xb7,0xa0,
+ 0xa9,0xa5,0xa8,0x21,0x0b,0x0a,0x9c,0xa2,0x20,0x0a,0x03,0x1b,0xa2,0x86,
+ 0xa0,0x86,0x22,0x0c,0x49,0xc8,0x32,0x44,0x88,0x22,0x21,0x92,0x88,0xa0,
+ 0xc0,0x40,0x08,0x2a,0xa2,0xf8,0xfb,0xef,0x7d,0x0f,0xbb,0x85,0xca,0xc7,
+ 0xbd,0xe7,0x5c,0xef,0xf7,0x38,0xf7,0xf9,0xee,0x11,0x71,0xcd,0x8f,0x24,
+ 0x72,0xe3,0xb0,0x9a,0x12,0x43,0x77,0x5e,0x2c,0xe9,0x90,0x36,0x11,0x77,
+ 0x22,0x77,0x8b,0xef,0x96,0x64,0x21,0x45,0x09,0x52,0x17,0xcf,0x38,0xbe,
+ 0xf0,0xe9,0x50,0xa9,0x67,0x26,0xe7,0x10,0x48,0x48,0x3a,0x45,0xbc,0x16,
+ 0x3e,0xf0,0xee,0x30,0x54,0xcf,0x6c,0x4e,0xf4,0x9c,0x53,0x72,0x58,0xfc,
+ 0x22,0x3e,0x0b,0x6f,0x78,0xd5,0x14,0xf8,0x63,0xc1,0xc9,0x15,0x2c,0xcf,
+ 0x61,0x47,0x89,0x48,0x40,0xa4,0xdd,0xe2,0xb2,0xa6,0x99,0xc6,0x20,0x47,
+ 0xcd,0x21,0xa3,0x14,0x92,0xc1,0xb1,0x8a,0x51,0x9e,0x5a,0xc9,0x35,0x54,
+ 0x35,0x93,0x58,0x44,0x8f,0x93,0x57,0x1d,0x55,0x71,0x64,0xca,0x2f,0x78,
+ 0x22,0x45,0x2c,0x73,0xa8,0xc2,0x4f,0xff,0x38,0x30,0xe5,0x67,0x3c,0x90,
+ 0x39,0x5c,0x73,0x1e,0xc0,0x84,0x5e,0x99,0xec,0x99,0xf2,0x23,0xff,0xb2,
+ 0x0a,0xe2,0xd8,0x26,0x71,0xf4,0xeb,0x95,0xc9,0xae,0x29,0xdf,0xa3,0xcc,
+ 0xe2,0x16,0x66,0x34,0xea,0x20,0xe5,0x3f,0xec,0x98,0xf2,0x1d,0xae,0x30,
+ 0x85,0x33,0xce,0x8a,0x3e,0xe6,0x2a,0xfe,0xbe,0xe0,0x96,0x29,0x97,0x51,
+ 0xc2,0x28,0x87,0xcd,0x18,0x7a,0x75,0x4c,0x3b,0x6a,0x1a,0x9b,0xa6,0x7c,
+ 0xcd,0x97,0xea,0xc2,0x3e,0x2e,0x48,0x96,0x5f,0x51,0x30,0xab,0xf3,0x14,
+ 0xb3,0x14,0xe3,0x86,0x29,0x5f,0xe2,0xb4,0x09,0x6b,0x7a,0x5e,0x37,0xe5,
+ 0x12,0xbf,0x7e,0x2b,0x56,0xeb,0xb2,0x2f,0xa6,0x8b,0x37,0xe7,0x10,0xc9,
+ 0xfa,0xdd,0xf0,0x76,0xe7,0x93,0x58,0xc1,0x52,0x53,0x16,0x31,0x0c,0xb9,
+ 0xb1,0x6f,0x9d,0x87,0x5d,0x50,0x14,0xb4,0xe4,0x46,0x16,0xec,0xfb,0xec,
+ 0x66,0x07,0x04,0x99,0x86,0x59,0x28,0xda,0x90,0x08,0xf7,0x42,0x76,0xa7,
+ 0xb8,0xd8,0x5b,0x1d,0x7c,0xca,0xcf,0x33,0x05,0x1b,0x12,0xe0,0x5e,0xa7,
+ 0xee,0x41,0x28,0xdd,0xcd,0xc3,0x78,0xc5,0x27,0xed,0x0d,0xf1,0x71,0xcf,
+ 0x43,0xc7,0xf5,0x03,0x70,0x91,0x55,0x5a,0x29,0x33,0x10,0x51,0x00,0x00,
+ 0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_textedit_png_len = 497;
+static const unsigned char small_textedit_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x04,0x00,0x00,
+ 0x00,0x6e,0xbd,0xa4,0xb0,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0x83,0x49,0x44,0x41,0x54,0x28,0xcf,0x7d,0xd2,
+ 0x3d,0x6b,0x93,0x61,0x14,0xc6,0xf1,0x5f,0xfa,0xdc,0xa4,0x04,0xcc,0x56,
+ 0xf0,0x6d,0x51,0x41,0x74,0x11,0xec,0x62,0x87,0x16,0xfc,0x06,0x81,0x0a,
+ 0x8a,0xb3,0x83,0x43,0x5d,0x04,0x33,0x88,0xdf,0xc0,0x4f,0xe0,0x58,0x07,
+ 0x17,0x0b,0x6e,0x12,0x5f,0x86,0x16,0x24,0x50,0x0b,0x99,0x0a,0x06,0x3b,
+ 0xfa,0x8a,0xd0,0x2c,0x25,0x69,0x4a,0x9a,0xe7,0xc5,0x21,0x8f,0xed,0x63,
+ 0x69,0x9e,0x33,0x9c,0xe1,0x3a,0xff,0x73,0x71,0x71,0x9f,0x3b,0x98,0x79,
+ 0x7e,0x3f,0x5d,0xe9,0x2d,0x0e,0x4c,0xab,0x3d,0xdb,0x5b,0xdd,0x55,0x6b,
+ 0x86,0x41,0x94,0xae,0xdc,0x5d,0xbc,0xac,0xac,0xda,0x0b,0xb7,0xab,0x36,
+ 0xec,0x06,0x51,0x6f,0xf1,0x92,0x24,0x97,0x7f,0xb9,0x78,0x0a,0x5c,0x63,
+ 0xde,0x9c,0xfd,0x20,0x1a,0x88,0x65,0xb9,0xdc,0xf4,0xea,0x18,0x70,0x90,
+ 0xf7,0x43,0xa8,0x9b,0x0d,0x2a,0xa4,0xb9,0xf3,0x57,0x6f,0x3c,0x75,0x1d,
+ 0xf4,0x51,0xd3,0x47,0x3c,0x99,0x06,0x51,0x50,0x21,0xc9,0xe1,0x96,0x65,
+ 0x2d,0x57,0x0b,0x01,0x26,0x7a,0x0a,0x33,0x2a,0x61,0x22,0xc5,0xf9,0x68,
+ 0xc9,0x4b,0x8f,0x0a,0x70,0x5c,0x58,0xa1,0x00,0xff,0x76,0xc1,0x2d,0x4f,
+ 0x7c,0x71,0xad,0x0c,0x8e,0x8d,0xf1,0x51,0x43,0xdd,0x92,0xf7,0xae,0x1c,
+ 0xc1,0xe3,0x42,0x3f,0x82,0x63,0x7c,0xd3,0xc5,0x0d,0x9f,0x3c,0x2c,0x77,
+ 0x3e,0xf4,0x47,0xaa,0x8b,0xf3,0x5e,0xf8,0xee,0x5c,0x3e,0x3e,0x2c,0xac,
+ 0x14,0x32,0xaf,0x7b,0xe0,0x0c,0x78,0x67,0xdd,0xbd,0xe9,0xce,0x63,0x63,
+ 0x3f,0xcd,0xe6,0xd9,0x16,0x7c,0xb0,0xfc,0x5f,0xe6,0x13,0xce,0xaf,0xb5,
+ 0xdd,0x71,0x16,0xfb,0x7e,0xf8,0xac,0xe5,0x19,0x3a,0x6e,0xa2,0x73,0x12,
+ 0x6e,0x68,0xe4,0x3e,0x55,0x4d,0x4d,0x6c,0x62,0x9c,0xf7,0x13,0xef,0x9c,
+ 0x94,0xfe,0xba,0x63,0x38,0xdb,0xfb,0x77,0xfd,0x29,0x35,0x32,0x98,0xdc,
+ 0x3c,0x0b,0xb2,0xed,0xad,0xf6,0x42,0xad,0x04,0x3f,0xd0,0x61,0x47,0x2c,
+ 0x09,0x92,0xee,0xea,0xe3,0xaa,0xf9,0xd2,0x1c,0x3b,0xde,0xea,0x1b,0x05,
+ 0x89,0x35,0x1b,0xe6,0xd4,0x05,0x33,0xa7,0xa2,0xa9,0x58,0x5f,0xcf,0x30,
+ 0x48,0x0c,0xed,0xda,0x37,0x2b,0x52,0x39,0x15,0xce,0x24,0x46,0x86,0x86,
+ 0x21,0x4b,0x2b,0x63,0x03,0x07,0x22,0x95,0xa9,0x70,0x26,0x91,0x48,0xfe,
+ 0x02,0x5a,0x81,0x9f,0x13,0x68,0xe3,0xbf,0x39,0x00,0x00,0x00,0x00,0x49,
+ 0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_textview_png_len = 498;
+static const unsigned char small_textview_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x04,0x00,0x00,
+ 0x00,0x6e,0xbd,0xa4,0xb0,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0x84,0x49,0x44,0x41,0x54,0x28,0xcf,0x7d,0xd2,
+ 0xbf,0x6b,0x14,0x51,0x14,0xc5,0xf1,0xcf,0xcc,0xec,0x92,0x6c,0x30,0x45,
+ 0x24,0x2a,0x92,0xc6,0xca,0x2e,0x85,0x82,0x08,0xa6,0x11,0x2c,0x44,0x30,
+ 0x60,0x69,0x63,0xab,0xa0,0x6d,0xfe,0x87,0x20,0x58,0x69,0x69,0x21,0x36,
+ 0x49,0x30,0xa6,0xb1,0xb0,0xb0,0x52,0xb2,0x20,0x0b,0x21,0x45,0x50,0x31,
+ 0x20,0xd8,0x88,0x82,0x2e,0x64,0x63,0xd6,0x95,0x64,0x7e,0x59,0xec,0xb8,
+ 0xcc,0x64,0x93,0xbd,0xa7,0x79,0xf7,0xbe,0x2f,0x87,0x73,0x1f,0x2f,0x10,
+ 0x3e,0xbc,0x9d,0xdd,0x6f,0xcf,0x75,0x1d,0x57,0xbb,0xb6,0x5a,0x9f,0x9e,
+ 0x79,0xa1,0x47,0x7d,0xb1,0xf9,0x25,0x4f,0x47,0xea,0x5d,0x6e,0xd3,0x79,
+ 0x53,0x35,0x51,0x7b,0xee,0x9c,0xb4,0xe4,0xf4,0xdb,0x9e,0x99,0x8a,0x77,
+ 0x83,0x0b,0xa6,0xfd,0x09,0x45,0x5d,0x89,0xb4,0xa4,0x15,0x0b,0x95,0x3e,
+ 0x75,0x00,0x93,0xc6,0x42,0x01,0x99,0xa4,0xa4,0xa7,0xd6,0x7c,0xa8,0x4c,
+ 0x52,0xa8,0x89,0x42,0x81,0x8a,0xcb,0x7b,0x53,0x58,0xae,0xcc,0x32,0x08,
+ 0x05,0x21,0xa4,0x25,0x97,0xd7,0x1e,0x9b,0xb5,0x6c,0xe7,0xb0,0x33,0x0e,
+ 0xc1,0x3b,0xbe,0x3a,0xed,0x8e,0x1f,0x56,0x8f,0x83,0x13,0x71,0xa1,0x35,
+ 0xd7,0xc5,0x6e,0x3a,0xeb,0xf9,0x60,0x16,0x8b,0xab,0xf0,0x7f,0x35,0xdd,
+ 0x90,0x68,0xb8,0xe5,0xa3,0xd6,0x90,0x73,0xad,0x0f,0x1f,0x80,0x75,0x1b,
+ 0x1e,0x80,0x0e,0x5e,0x9a,0x2d,0xa0,0xa4,0x0c,0xa7,0x45,0xfb,0xc6,0x92,
+ 0x33,0xc5,0xc5,0x82,0x15,0x77,0x8b,0xae,0x92,0xb9,0x9f,0xeb,0x9b,0xcc,
+ 0xc9,0x41,0xca,0xab,0x78,0x55,0x9c,0x93,0xe1,0xd7,0x78,0xeb,0x62,0x29,
+ 0xfd,0x35,0x2c,0x0d,0xba,0x0a,0x1c,0x5b,0xb5,0x68,0xdb,0xf7,0xc2,0xab,
+ 0x63,0x1d,0x3f,0x3d,0xd1,0x11,0x57,0x17,0x4c,0xa5,0xe6,0xcd,0x97,0xf2,
+ 0x8d,0xbb,0xa4,0x59,0x20,0x69,0x09,0xce,0x77,0x4b,0x8f,0x73,0x54,0xed,
+ 0xeb,0x42,0x26,0xaf,0xc9,0xb7,0x5a,0xcd,0xcb,0x8d,0x11,0xf8,0x5f,0x1b,
+ 0x6c,0xf7,0x1d,0xc7,0xdd,0xb3,0x29,0x1f,0xa9,0xcf,0x1e,0xb9,0x62,0x26,
+ 0x50,0x77,0xc2,0x29,0xd3,0x26,0xd5,0xfa,0xeb,0x0e,0x55,0x26,0xb1,0xa7,
+ 0xed,0x57,0x20,0x54,0x37,0x61,0xc2,0x98,0x48,0x70,0x24,0x9c,0x4b,0xed,
+ 0xeb,0xe9,0x05,0xb9,0x20,0x14,0x89,0x44,0x82,0x63,0xe1,0xbc,0xff,0xb1,
+ 0xff,0x01,0x08,0xb2,0x0b,0x7e,0xbc,0x39,0x06,0x4b,0x00,0x00,0x00,0x00,
+ 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_timeedit_png_len = 1520;
+static const unsigned char small_timeedit_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x05,0x82,0x49,0x44,0x41,0x54,0x48,0xc7,0x4d,0x95,
+ 0xcb,0x6f,0xdc,0x57,0x15,0xc7,0x3f,0xf7,0xf7,0x9a,0xd7,0x6f,0x5e,0xf6,
+ 0x78,0x3c,0xb6,0xe3,0x78,0xfc,0xea,0xd8,0x49,0x5c,0x9a,0xc4,0xb5,0x84,
+ 0x69,0x2a,0x68,0xdc,0x22,0x45,0xe2,0xa1,0x22,0x21,0x60,0xc5,0x06,0x76,
+ 0x48,0x48,0x2c,0x90,0xd8,0xb2,0x40,0x82,0x7f,0x00,0xb1,0x45,0x42,0x42,
+ 0x82,0x82,0x84,0xa8,0x90,0x50,0xa1,0x34,0x4d,0x20,0x35,0x4a,0x6b,0xb7,
+ 0xb1,0x1d,0xdb,0x93,0xc4,0x19,0xdb,0xf3,0xf0,0xcc,0x78,0xde,0x8f,0xdf,
+ 0xeb,0xb2,0xe8,0xcf,0x28,0x57,0xba,0xba,0x47,0x67,0xf1,0xd1,0x39,0xe7,
+ 0x9e,0x73,0xbe,0x42,0x4a,0xc9,0xc5,0x11,0x42,0x28,0x23,0x99,0x49,0xa5,
+ 0xd3,0x6c,0xc6,0xa7,0x66,0x73,0x57,0x26,0xe6,0x96,0x57,0x6d,0xa9,0xce,
+ 0xda,0x9e,0x48,0x59,0xae,0xcb,0x70,0x60,0x75,0xac,0x5e,0xeb,0xe4,0xfc,
+ 0xd9,0xa3,0x9d,0xee,0x79,0x29,0x2f,0x5d,0xa7,0x0a,0xb2,0x03,0xf4,0x81,
+ 0xa1,0x94,0xd2,0xfb,0x3f,0xeb,0x02,0x2c,0x84,0xd0,0x03,0xe1,0x48,0x78,
+ 0x26,0xb7,0x72,0xe3,0xda,0xfa,0x9b,0xdf,0x37,0x93,0x93,0x1b,0x42,0x38,
+ 0xe9,0x64,0x54,0xd3,0xe2,0xb1,0x10,0x9e,0x07,0xf5,0x8e,0xc3,0xe3,0xf2,
+ 0xc0,0x29,0x94,0x9b,0xd5,0xd6,0xf3,0x9d,0xcd,0xda,0xa3,0x7f,0xfe,0xd5,
+ 0xaa,0x97,0xb7,0x90,0x6e,0x09,0xa8,0x01,0x3d,0xc0,0x93,0x52,0x4a,0x01,
+ 0x08,0x40,0x33,0xe3,0x23,0xf1,0x57,0x6f,0x7f,0xed,0x9b,0x57,0xd7,0xde,
+ 0xf8,0x89,0x6b,0x75,0x97,0x66,0xc7,0x3d,0x6e,0xad,0x66,0x18,0x1f,0x8b,
+ 0xe2,0x0c,0x2d,0x62,0x66,0x10,0x3d,0x68,0x50,0xa8,0xf4,0x79,0x7f,0xab,
+ 0xc1,0x1f,0x3e,0x6a,0xb1,0xb7,0x9f,0x3f,0x6a,0x3e,0xfc,0xcb,0x1f,0xed,
+ 0xe2,0xfe,0x7b,0xb8,0xce,0x21,0x50,0x02,0xba,0x80,0xa7,0x02,0x8a,0x11,
+ 0x08,0x47,0xd7,0xbf,0xfa,0xf6,0xdb,0xaf,0xbc,0x7e,0xe7,0xe7,0xb2,0x5f,
+ 0xc9,0x6e,0xac,0x86,0x79,0xeb,0x4b,0x33,0xcc,0xcf,0xa4,0x19,0x8d,0x47,
+ 0xb8,0xff,0xdf,0x22,0xf9,0x13,0x87,0xec,0x74,0x9c,0x91,0x08,0x7c,0x71,
+ 0x39,0xce,0xea,0x62,0x8c,0xe7,0xed,0x60,0xe2,0xc8,0x49,0xe7,0x68,0x95,
+ 0x86,0x6e,0xbb,0x7e,0xee,0x43,0x7b,0x3e,0x58,0xa8,0x73,0x2b,0x37,0xd6,
+ 0x5e,0xbb,0xf3,0xbd,0x5f,0xb8,0xbd,0xca,0xcc,0xb7,0x36,0xc6,0x79,0xe3,
+ 0xb5,0x1c,0x3b,0xbb,0x25,0x86,0x03,0x8b,0xf4,0x78,0x8c,0x3f,0xdd,0xef,
+ 0xf1,0xcb,0x77,0xda,0x5c,0x4e,0x7a,0x0c,0x1a,0x67,0xa8,0xba,0xc1,0xf2,
+ 0x7c,0x86,0xf5,0x65,0x93,0xbd,0x12,0xa1,0x67,0x6d,0xe3,0x92,0x57,0xd9,
+ 0xaf,0x49,0x7b,0x58,0xf5,0x4b,0xe2,0xa8,0x81,0x50,0x24,0xf1,0xd6,0x77,
+ 0x7e,0xf8,0x53,0x23,0x14,0xbc,0x7d,0x73,0x5e,0xf2,0x95,0xf5,0x05,0x6c,
+ 0xdb,0x23,0x95,0x32,0x19,0x19,0x35,0x31,0x8c,0x10,0xbb,0x47,0x03,0x8e,
+ 0x8a,0x3d,0xbe,0xbd,0x91,0xe2,0x0b,0xcb,0x29,0xa2,0xf1,0x10,0xf5,0x7a,
+ 0x8b,0x54,0xcc,0xe0,0xca,0x74,0x98,0x0f,0x0f,0xbc,0x68,0xa3,0x56,0x33,
+ 0x9c,0x5a,0xe1,0x29,0x70,0x04,0x58,0xca,0xe4,0x5c,0xee,0x6a,0x3a,0x9b,
+ 0x7b,0xd3,0x90,0x0d,0x6e,0xad,0xcd,0xf0,0xf0,0xe3,0x02,0xc5,0x72,0x83,
+ 0x64,0x32,0x41,0x24,0x12,0x06,0x5c,0x7a,0x7d,0x1b,0xd7,0x95,0x04,0x0c,
+ 0x0d,0xd3,0x4c,0xa2,0xeb,0x1a,0x9f,0xee,0x9c,0x70,0x90,0xaf,0x70,0x7d,
+ 0x21,0xc9,0x77,0x5f,0x9f,0x40,0xcb,0x5c,0x59,0x12,0x21,0xf3,0x2a,0x60,
+ 0x02,0x86,0x32,0xfd,0xd2,0xcb,0xab,0xb6,0xa7,0x8d,0x5f,0x9b,0x8b,0x32,
+ 0x37,0x33,0xc6,0xe2,0x42,0x9a,0xf4,0x58,0x0c,0x70,0x00,0x89,0xeb,0x49,
+ 0xaa,0x2d,0x87,0x81,0x07,0x48,0x09,0x58,0x48,0x0f,0x16,0x66,0xd3,0x64,
+ 0x32,0x09,0x40,0xe5,0xcb,0x2f,0x27,0x59,0x98,0x99,0x88,0x29,0x91,0x91,
+ 0x45,0x20,0x02,0xe8,0x8a,0xd0,0x83,0xd9,0xee,0xc0,0x52,0x2f,0x65,0x4c,
+ 0x2a,0x67,0x2d,0x74,0x5d,0x65,0x24,0x19,0x05,0x3e,0x6f,0xc3,0x56,0xcf,
+ 0xe1,0xf0,0x78,0x80,0x6d,0x7b,0x18,0x01,0x01,0x80,0xae,0x69,0x5c,0x9a,
+ 0x4a,0x70,0x7e,0xde,0xa5,0xd5,0x6e,0x72,0x39,0x13,0x66,0xe9,0x72,0x5c,
+ 0xa0,0x47,0x52,0x40,0x10,0xd0,0x35,0x50,0xc7,0x86,0xae,0x44,0xe2,0x71,
+ 0x72,0x5a,0xc7,0x91,0x2a,0xa9,0x54,0x14,0x45,0x51,0x00,0x50,0x15,0x18,
+ 0x8b,0xa9,0x14,0x23,0x2a,0x66,0x48,0x03,0x54,0x40,0xd2,0xed,0x59,0x1c,
+ 0x3c,0xa9,0xa0,0xa9,0x92,0x54,0x26,0xc5,0x68,0x34,0x88,0xa6,0x05,0x42,
+ 0x2e,0xe8,0x80,0xaa,0xd8,0xae,0x27,0xfa,0x43,0x17,0x50,0x99,0x9b,0x9b,
+ 0x62,0x39,0x37,0xe1,0x43,0x25,0xe0,0x11,0x0d,0xeb,0xdc,0xba,0x91,0xa0,
+ 0xd1,0xf6,0xf8,0xdd,0xbb,0x55,0x8a,0xe7,0x7d,0x40,0x21,0x1e,0x0b,0x73,
+ 0xf3,0x7a,0x96,0x74,0x7a,0x04,0xc7,0xf1,0x50,0x91,0xa8,0x38,0x2a,0xa0,
+ 0x00,0x8a,0xd6,0xed,0x75,0x5a,0x03,0xc7,0xa3,0x3d,0x54,0x88,0x45,0x83,
+ 0x1c,0x15,0xaa,0xf4,0xfa,0x43,0xd2,0xa9,0x28,0x20,0x10,0x28,0x4c,0x8f,
+ 0x1b,0x24,0xc2,0x82,0x9f,0xfd,0xf6,0x84,0x7f,0x6c,0x37,0xf9,0xc1,0x9d,
+ 0x34,0xaf,0xcc,0x09,0xd2,0xa9,0x20,0xe1,0x70,0x98,0x6a,0xa9,0x49,0xab,
+ 0xd9,0x45,0xb8,0x96,0x7d,0x31,0xd2,0x4a,0xab,0x51,0x3d,0xb1,0x85,0x70,
+ 0x37,0x0f,0x3a,0x34,0x9b,0x6d,0x9e,0x1c,0x96,0x69,0xd4,0xbb,0x7e,0xa9,
+ 0x14,0xc0,0x61,0xe9,0x72,0x88,0x5f,0xfd,0x28,0xcb,0xaf,0x7f,0x9c,0x45,
+ 0x51,0x74,0xfe,0x7c,0xaf,0xc5,0x83,0x87,0xa7,0x9c,0x1e,0x37,0x00,0x8f,
+ 0xe3,0xd2,0x80,0xe7,0xc7,0x55,0xe9,0xf4,0x5b,0x5d,0x3f,0x55,0xa9,0x9d,
+ 0x1d,0x6c,0xef,0x64,0x6e,0xd6,0xce,0xfe,0xd3,0xd7,0x33,0x5b,0xf9,0x73,
+ 0xd6,0xd6,0xe6,0xb0,0x1d,0x97,0x52,0xa9,0x8a,0xae,0x0b,0x46,0x47,0x4d,
+ 0x12,0xa6,0xc1,0xab,0xcb,0x41,0xae,0x2f,0x04,0x59,0x9e,0xf0,0x10,0x9a,
+ 0xc1,0x64,0x32,0x41,0x66,0x2c,0x82,0x65,0xbb,0xfc,0x7b,0xab,0x44,0xb1,
+ 0xf0,0xb4,0x3f,0x6c,0xd7,0x2b,0x80,0x0b,0x78,0x4a,0xf7,0xbc,0x9c,0x3f,
+ 0xdd,0xdb,0x7c,0x50,0xb2,0x82,0xfc,0xe6,0xbd,0x33,0x5c,0x45,0x23,0x12,
+ 0x32,0xd8,0xfa,0xf4,0x88,0xc2,0x71,0x1d,0xcb,0xb2,0x39,0xcc,0x17,0xa9,
+ 0x54,0x6a,0xb4,0x3b,0x7d,0x86,0x8d,0x1a,0x53,0x71,0x8b,0xf9,0x6c,0x8a,
+ 0x48,0xc4,0xe4,0x5f,0x0f,0xca,0xdc,0xdf,0xcc,0x73,0xfa,0x64,0xbb,0x8c,
+ 0x33,0x2c,0x01,0x16,0xe0,0xa8,0x48,0x2f,0xd0,0x3b,0xaf,0x48,0x25,0x95,
+ 0x5d,0x79,0x3a,0x88,0x27,0x6a,0x95,0x26,0xab,0xb9,0x38,0x2f,0xcd,0xc4,
+ 0x49,0x8e,0x98,0xb8,0x9e,0x64,0x67,0xb7,0x88,0xed,0xb8,0x4c,0x4d,0x24,
+ 0x88,0xc5,0x03,0xa4,0x52,0x51,0x74,0xdd,0xe0,0x83,0x8f,0xca,0xfc,0xfe,
+ 0xdd,0x5d,0x3e,0xbc,0xfb,0x7e,0xab,0x72,0xb0,0xb5,0x2d,0x3d,0xe7,0x33,
+ 0x60,0x07,0x68,0xaa,0x80,0xea,0x0d,0xfa,0xb6,0xd3,0xae,0xa1,0x25,0xa7,
+ 0x72,0x5b,0x55,0x3d,0xbc,0x93,0xaf,0x93,0x9d,0x30,0x99,0x9d,0x8c,0x13,
+ 0x08,0xe8,0x64,0x2f,0x27,0x98,0xc8,0x24,0x51,0xb5,0x20,0xa6,0x19,0xa2,
+ 0xd1,0x72,0xf9,0xdb,0xdd,0x13,0xde,0xf9,0xfb,0x2e,0x1f,0xdc,0xbd,0xd7,
+ 0x7f,0xf6,0xc9,0xbd,0x47,0xde,0xb0,0xf3,0x08,0xd8,0x05,0xf2,0x40,0x5b,
+ 0x00,0x21,0x60,0x1c,0x55,0xcb,0x05,0xc7,0xe7,0xbf,0x1e,0xbe,0x76,0xfb,
+ 0x1b,0x24,0x66,0xa6,0xd2,0x51,0x85,0xdb,0xcb,0x31,0x6e,0xad,0x8c,0x92,
+ 0x8c,0x06,0x3e,0x9f,0x42,0x5b,0x72,0x52,0xee,0xf1,0xc9,0xe3,0x33,0x1e,
+ 0xe7,0x0b,0xec,0x6f,0x7f,0xdc,0x2a,0xee,0x6d,0xee,0xd9,0xbd,0xe6,0x36,
+ 0x70,0x71,0xf7,0x81,0x86,0xf0,0xbf,0x3e,0x02,0x4c,0x20,0xc4,0x82,0x1a,
+ 0x8e,0xaf,0x07,0xa7,0x57,0x36,0x8c,0xc9,0xc5,0x25,0x2d,0x94,0x88,0x05,
+ 0x54,0x4d,0x04,0x34,0x05,0xd5,0x73,0x10,0xae,0x83,0x90,0x3d,0x3a,0xd5,
+ 0xd3,0xde,0xd9,0xd1,0x6e,0xd9,0xae,0x14,0x0e,0x3d,0xd7,0x3a,0xf0,0x61,
+ 0xbb,0xc0,0x13,0xe0,0x0c,0xe8,0x09,0x29,0x25,0x42,0x08,0xcd,0x8f,0x7c,
+ 0x0c,0x98,0x02,0xb1,0x28,0x02,0xc1,0xab,0x4a,0x2c,0xbd,0x88,0x16,0x1a,
+ 0x55,0x54,0x25,0x8c,0xeb,0x2a,0xae,0x33,0xb4,0xbd,0x7e,0xa7,0x4b,0xbf,
+ 0x51,0xc5,0x75,0x8a,0xc0,0x29,0x50,0xf0,0x37,0x5a,0xf1,0x05,0x15,0xb1,
+ 0x2f,0xc0,0x17,0x91,0xeb,0x40,0xc0,0xcf,0xc0,0xf4,0xdf,0xa0,0xef,0x57,
+ 0xfc,0xde,0x97,0x7e,0x4b,0x59,0xc0,0xe0,0x85,0xe5,0xde,0x03,0x86,0x80,
+ 0x0d,0x78,0x2f,0x6a,0xde,0x85,0x4c,0xa9,0x80,0x06,0x18,0x3e,0x50,0xf7,
+ 0x7d,0x2f,0x82,0x3d,0x7f,0xfd,0x39,0x3e,0xc8,0xf6,0x6d,0xef,0x42,0xf3,
+ 0xfe,0x07,0xd9,0x3f,0x88,0x22,0xef,0xd9,0x4f,0x79,0x00,0x00,0x00,0x00,
+ 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_timer_png_len = 1462;
+static const unsigned char small_timer_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x06,0x62,0x4b,0x47,0x44,0x00,
+ 0xff,0x00,0xff,0x00,0xff,0xa0,0xbd,0xa7,0x93,0x00,0x00,0x00,0x09,0x70,
+ 0x48,0x59,0x73,0x00,0x00,0x0b,0x0e,0x00,0x00,0x0b,0x0e,0x01,0x40,0xbe,
+ 0xe1,0x41,0x00,0x00,0x00,0x07,0x74,0x49,0x4d,0x45,0x07,0xd3,0x09,0x02,
+ 0x0f,0x2b,0x1c,0x96,0x4a,0x88,0xc0,0x00,0x00,0x05,0x43,0x49,0x44,0x41,
+ 0x54,0x78,0xda,0x75,0x95,0x4d,0x6c,0x5c,0x57,0x15,0x80,0xbf,0xf7,0x33,
+ 0x6f,0xc6,0xf6,0x8c,0x67,0xec,0xf9,0xc9,0x58,0xfe,0x1b,0x3c,0x89,0x6b,
+ 0x2c,0xbb,0x44,0x6d,0x8a,0x4b,0x70,0x68,0xa3,0x62,0x51,0x81,0xac,0x34,
+ 0x2a,0x15,0x15,0x42,0xa8,0x84,0x0a,0x76,0x41,0x54,0x15,0x5b,0x76,0xac,
+ 0x58,0x20,0x24,0xab,0x2a,0x0b,0x58,0x20,0x28,0x88,0xb2,0x69,0x8a,0x0c,
+ 0x24,0xc2,0x45,0x2e,0x25,0xfc,0xb4,0xc8,0x4e,0x88,0xc1,0x96,0x13,0xcf,
+ 0xc4,0xf6,0x78,0xfe,0x3a,0x33,0x1e,0x7b,0xde,0xbc,0xf7,0xee,0xbd,0x8f,
+ 0x45,0x6c,0xcb,0x8e,0xc2,0x91,0x8e,0x74,0xcf,0xb9,0x47,0x9f,0xce,0x3d,
+ 0x3f,0xba,0xda,0xd8,0xd8,0x18,0x07,0x92,0x38,0x9b,0x8d,0xfd,0xb4,0xc3,
+ 0x32,0x66,0x5d,0xa1,0xb0,0x1d,0x51,0xba,0x93,0x6f,0x7e,0x1e,0xb8,0xc5,
+ 0xa3,0x65,0xf2,0xfc,0x78,0xfc,0x86,0xa1,0x93,0xf2,0x81,0xdd,0x96,0xb8,
+ 0xb6,0x7c,0xb7,0x71,0x05,0xa8,0x00,0x98,0x87,0x51,0x13,0x99,0xee,0x37,
+ 0xaf,0x5e,0xca,0xce,0xf6,0x84,0x03,0x94,0xea,0x2e,0xab,0x9b,0xcd,0xd4,
+ 0x9d,0x7c,0xf3,0x0a,0xf0,0xdd,0xff,0x03,0xbe,0xf2,0x9d,0x17,0xce,0xa4,
+ 0xd2,0xbd,0x41,0x5c,0xe1,0x73,0x27,0xb7,0x3b,0x3b,0x77,0x6d,0xfd,0xcd,
+ 0xd5,0xcd,0xe6,0x8b,0x87,0xe0,0xc4,0x44,0xa6,0xfb,0x27,0xdf,0xff,0xda,
+ 0xf8,0x0b,0x86,0x06,0xc5,0x9a,0x43,0x75,0xd7,0xa5,0xaf,0x37,0xf4,0x27,
+ 0xe0,0x8f,0x4f,0x9c,0x8e,0x2d,0x9a,0x86,0x3e,0xe1,0x03,0xbe,0x0f,0xe0,
+ 0xe3,0x49,0xff,0xf6,0xd2,0x7a,0xfd,0x07,0x86,0xce,0x99,0xfd,0xb6,0x7c,
+ 0xc6,0x76,0x45,0x38,0xda,0x65,0xf2,0x8d,0x99,0xe1,0xcb,0x6f,0xbc,0xbb,
+ 0xfe,0xdb,0x7c,0xd9,0xfe,0xb6,0xf6,0xf2,0x97,0x9e,0x7e,0xe7,0xea,0xa5,
+ 0xec,0x6c,0xac,0x2b,0x40,0xb9,0xe1,0x52,0xac,0xb7,0xb7,0x96,0xef,0x35,
+ 0x6e,0xdd,0xba,0xb7,0xeb,0x7d,0x71,0x2a,0x3d,0xfb,0xdc,0xd9,0x14,0x89,
+ 0xee,0x20,0xca,0xf7,0x51,0xca,0x47,0xf9,0x50,0xac,0xb7,0x59,0x58,0x2a,
+ 0xf3,0xbb,0xbf,0x15,0x7e,0xf3,0xd9,0xf1,0x84,0x7d,0xf1,0xf1,0xe4,0x73,
+ 0x8e,0x27,0xfb,0x9b,0xb6,0x60,0xbd,0xb0,0xc7,0xfc,0x3f,0x76,0xae,0x99,
+ 0x86,0xae,0x4d,0xe8,0xba,0x46,0xa9,0xee,0x50,0x6a,0x38,0x5b,0x37,0xfe,
+ 0x55,0x7a,0xe3,0xdc,0x68,0xef,0xeb,0xaf,0x7c,0x61,0x24,0x96,0x4a,0x0f,
+ 0xa0,0xc5,0x46,0xd1,0x7a,0xc6,0xf0,0xad,0x18,0xad,0x56,0x8b,0x80,0xda,
+ 0x27,0x55,0x5d,0xe1,0x72,0x62,0x95,0xf3,0xe3,0xc9,0x97,0x16,0x97,0x4b,
+ 0xf5,0x5f,0xfd,0xf9,0xfe,0x0f,0x9f,0x99,0x8c,0x7f,0xcb,0x76,0x55,0xbf,
+ 0xae,0x21,0x0c,0x5d,0x1b,0x37,0x3c,0x3d,0xfc,0x87,0xea,0xae,0x33,0x7d,
+ 0xbf,0x62,0xb7,0x3f,0x5a,0xab,0xff,0xec,0xe9,0xf1,0xf8,0x6b,0x5f,0xb9,
+ 0x38,0x12,0x0b,0x0f,0x7e,0x9a,0xfd,0xd4,0x0c,0xc4,0x3f,0x85,0xd9,0x95,
+ 0xc2,0x37,0x3a,0x58,0xfa,0xf7,0x1a,0xe9,0xcc,0x38,0x6e,0x68,0x88,0xb6,
+ 0xd5,0x4f,0x38,0xa8,0x91,0x8d,0xb7,0x43,0xc5,0x5a,0xeb,0x89,0x1b,0x1f,
+ 0x15,0x7f,0x54,0xae,0x39,0x03,0xb7,0x73,0xcd,0xbb,0x77,0x77,0x5a,0x2f,
+ 0x9b,0xc0,0x7f,0x16,0x6f,0x57,0x2f,0x01,0xe7,0xbf,0xf9,0x7c,0xe6,0xc7,
+ 0x97,0xa7,0x33,0x31,0xbd,0xff,0x59,0xcc,0xfe,0x0b,0x84,0xa4,0x41,0x3e,
+ 0x9f,0x27,0x93,0xc9,0x20,0xa5,0x64,0x7e,0x7e,0x9e,0xc9,0xc9,0x49,0x0a,
+ 0x85,0x02,0xa9,0xd4,0x29,0xb4,0xae,0x19,0x74,0xbd,0x93,0x99,0x27,0x45,
+ 0xac,0xb1,0xe7,0xbd,0xf6,0xf6,0xe2,0xe6,0x55,0xe0,0x03,0x20,0xaf,0x1f,
+ 0x74,0x38,0xff,0xd8,0x40,0xe4,0xdc,0xd9,0x6c,0x2c,0x69,0xc6,0x3f,0xc9,
+ 0x7e,0xf8,0x2c,0x6d,0xa1,0x63,0x18,0x06,0x43,0x43,0x43,0x08,0x21,0x90,
+ 0x52,0x52,0xab,0xd5,0x10,0x42,0xd0,0xd7,0xd7,0x87,0xa6,0x69,0xb8,0x52,
+ 0xa7,0xdd,0x3d,0x89,0xd1,0x93,0x65,0x6c,0x30,0x9c,0xcc,0xa4,0xbb,0xce,
+ 0x01,0x79,0x80,0x43,0x70,0x67,0x32,0x6a,0xbd,0x3a,0x99,0x4d,0x62,0x0c,
+ 0x5c,0xc4,0x08,0x76,0x91,0xcf,0xe7,0x8f,0x80,0x52,0x4a,0x84,0x10,0xf8,
+ 0xbe,0x7f,0x74,0x96,0x52,0x52,0x2a,0x95,0xd0,0x03,0x1d,0x98,0xe9,0xcf,
+ 0x70,0x66,0xb0,0x97,0xde,0x70,0xe0,0x55,0xa0,0xf3,0x38,0x78,0xee,0xf5,
+ 0x97,0x1e,0x8b,0xfa,0xdd,0x59,0x7c,0xab,0x07,0xd3,0x34,0x19,0x18,0x18,
+ 0x40,0x08,0x71,0x42,0x7d,0xdf,0x3f,0x82,0x0a,0x21,0x88,0xc7,0xe3,0xe8,
+ 0xba,0x8e,0x0a,0x44,0xf1,0xc3,0x43,0x7c,0x7d,0x66,0x38,0x0a,0xcc,0x9d,
+ 0x58,0x10,0xa9,0x14,0x84,0x92,0x08,0x74,0x7c,0x29,0x51,0x4a,0x9d,0x50,
+ 0x79,0xe0,0x93,0x8f,0xba,0xf3,0x35,0x7c,0xab,0x07,0x29,0xfd,0xa3,0xed,
+ 0x39,0x02,0x7b,0xc2,0x47,0x68,0x1d,0x6c,0xac,0xad,0xe3,0xba,0x2e,0x83,
+ 0x83,0x83,0x04,0x02,0x01,0x94,0x52,0xf8,0xbe,0x4f,0x2e,0x97,0xa3,0xd9,
+ 0x6c,0x52,0xad,0x56,0x89,0x44,0x22,0x28,0xa5,0xb0,0x6d,0x9b,0x5c,0x2e,
+ 0x87,0x69,0x9a,0x24,0xb4,0x20,0xe2,0x51,0x60,0xa1,0x7c,0x84,0xe7,0x30,
+ 0x3c,0x3c,0xf4,0x60,0x11,0x1e,0xca,0x6e,0x71,0x71,0x91,0xe9,0xe9,0xe9,
+ 0x23,0xbf,0x94,0x12,0xd3,0x34,0xc9,0x64,0x32,0xf8,0x4a,0xb1,0x9f,0xcf,
+ 0xe1,0x3d,0x12,0x2c,0x7c,0x9c,0x66,0x11,0xdd,0xb5,0x71,0x5c,0x85,0xae,
+ 0x3f,0x28,0xbf,0x52,0x8a,0x95,0x95,0x15,0x52,0xa9,0x14,0x53,0x53,0x53,
+ 0x07,0xb1,0x02,0xa5,0x14,0x42,0x08,0x5c,0xd7,0xc5,0xd0,0x7d,0xda,0x7b,
+ 0x15,0x84,0x54,0x47,0xe0,0xc3,0xe6,0xbd,0xb5,0xb0,0x54,0xb2,0xdb,0xd5,
+ 0x0d,0xec,0x66,0x9d,0x72,0xb9,0x8c,0xe7,0x79,0x48,0x29,0x69,0xb5,0x5a,
+ 0x5c,0xbf,0x7e,0x9d,0x91,0x91,0x91,0x07,0xbd,0x38,0x36,0x15,0x9e,0xe7,
+ 0x51,0x2e,0x97,0x69,0x35,0x1b,0xb4,0xeb,0x9b,0x7c,0xb8,0x5a,0xb3,0x81,
+ 0xb7,0x00,0x8c,0x44,0x22,0x01,0xb0,0xee,0x08,0xf5,0xe2,0xc4,0x40,0xa8,
+ 0xcf,0x0a,0x75,0x10,0x49,0x9d,0x06,0x4d,0xc7,0x71,0x1c,0x00,0x46,0x47,
+ 0x47,0x89,0x46,0xa3,0x47,0xa5,0x39,0xcc,0x54,0xd7,0x75,0xac,0x80,0x49,
+ 0x7b,0x67,0x99,0xea,0xd6,0x2a,0x0b,0x4b,0xe5,0xdb,0xf5,0x3d,0xef,0x7b,
+ 0xc7,0xc1,0x54,0x1a,0xee,0x7f,0xbb,0x3b,0xcd,0x57,0x06,0x23,0x2d,0xf4,
+ 0x8e,0x24,0xca,0x08,0x53,0xd8,0xd9,0xc1,0xb2,0x2c,0x82,0xc1,0x20,0x95,
+ 0x4a,0x85,0x60,0x30,0x88,0x52,0x0a,0xc7,0x71,0x0e,0x6c,0x0b,0x6f,0xf7,
+ 0x3e,0xbb,0x1b,0x7f,0xe1,0xef,0x2b,0x65,0xfe,0xb9,0x56,0xfb,0x2a,0xb0,
+ 0x71,0x02,0x0c,0x54,0x1a,0xfb,0x5e,0x64,0x38,0x69,0x3d,0x69,0x79,0x25,
+ 0x9d,0x40,0x17,0xa1,0xee,0x24,0x86,0x19,0x40,0x4a,0xc9,0xd6,0xd6,0x16,
+ 0xd1,0x68,0x14,0xa5,0x14,0x9a,0x06,0xa6,0x69,0xe0,0x7e,0xbc,0x41,0xe3,
+ 0xee,0xfb,0x6c,0xef,0x54,0xc5,0x7b,0xcb,0xe5,0xb9,0xfd,0xb6,0xf8,0x39,
+ 0xe0,0x3e,0x0c,0x76,0x77,0x5b,0x62,0x7e,0x7d,0x7b,0x2f,0x79,0x2a,0xc2,
+ 0x94,0x65,0xe7,0x50,0xae,0xfd,0x60,0x42,0x34,0x03,0x29,0xc1,0x0a,0x04,
+ 0x90,0xce,0x1e,0x4e,0x63,0x9b,0x56,0xe1,0x16,0xbb,0xb9,0x9b,0xe4,0x0b,
+ 0x15,0xde,0xb9,0x59,0x98,0x2b,0xd6,0xda,0x57,0x0f,0xa1,0x27,0xa6,0xe2,
+ 0x40,0x3a,0x82,0x01,0x23,0x6b,0xea,0x1a,0xd7,0x3e,0xc8,0xf3,0xb9,0xc7,
+ 0xdb,0x58,0xdb,0x77,0x30,0xac,0x30,0xbe,0x6e,0x52,0xce,0xf9,0x28,0xe9,
+ 0xe1,0xd9,0x7b,0xd8,0xf6,0x3e,0x7f,0x5d,0xa9,0xf0,0xd4,0x68,0x0f,0x5d,
+ 0x41,0x23,0x0b,0x74,0x00,0xf6,0x21,0xe8,0x78,0xc6,0xe9,0xd1,0xfe,0xc8,
+ 0xaf,0xbf,0x7c,0x61,0xe0,0xf9,0x70,0xa7,0xc9,0xef,0x3f,0xdc,0xd9,0x7b,
+ 0xf7,0x66,0xe1,0x97,0x9a,0x12,0xe9,0x72,0xb5,0x16,0xde,0xdc,0x2a,0xb3,
+ 0x59,0x28,0xb3,0x5d,0xfc,0x98,0xb5,0xfb,0xb5,0x9d,0x5f,0x2c,0xe4,0xdf,
+ 0xf6,0xa4,0x3a,0x7d,0x61,0x22,0x69,0x8d,0xf6,0x47,0xce,0x94,0xea,0xce,
+ 0x53,0xd5,0xa6,0x7b,0x03,0xd8,0x03,0xd0,0x8e,0x7d,0xa6,0xcf,0x9e,0xea,
+ 0x09,0x2d,0xf4,0x44,0x02,0x00,0x6c,0xec,0xb4,0x36,0xda,0xae,0xfc,0x04,
+ 0x30,0x0d,0x24,0x1e,0x7a,0x59,0x05,0x78,0x3f,0x64,0x19,0xf7,0x32,0xe9,
+ 0xce,0x0c,0x40,0xad,0xe9,0x51,0xac,0xb5,0x2f,0x02,0xef,0x01,0xfc,0x0f,
+ 0x0a,0x3e,0xe9,0x1a,0x33,0xf0,0xe7,0x05,0x00,0x00,0x00,0x00,0x49,0x45,
+ 0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_toolbutton_png_len = 1262;
+static const unsigned char small_toolbutton_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x04,0x80,0x49,0x44,0x41,0x54,0x38,0xcb,0x95,0x55,
+ 0x5b,0x48,0x5c,0x57,0x14,0x5d,0x77,0xee,0x63,0xee,0x8c,0x6f,0x67,0x9c,
+ 0xf1,0x95,0xfa,0x2c,0x21,0x3e,0xf0,0xdd,0xf8,0x8a,0x36,0x06,0x1b,0x13,
+ 0x3f,0xec,0x87,0xd8,0x4f,0x3f,0x13,0xfa,0xd1,0x62,0xfa,0xd5,0x3f,0xc1,
+ 0x6f,0xbf,0xac,0x84,0x42,0x91,0x80,0xd6,0xc4,0x26,0x22,0x52,0x09,0x62,
+ 0xc1,0x28,0x34,0x21,0xa9,0x4d,0xa4,0x01,0xa9,0x18,0xc4,0x2a,0x36,0xd4,
+ 0x38,0x8e,0x13,0x9c,0xd1,0x71,0x9c,0x99,0xdb,0xbd,0x4f,0xe6,0x4a,0x4c,
+ 0x22,0xb4,0x07,0xce,0xdc,0x3b,0xf7,0x9c,0xbb,0xce,0xda,0x6b,0xaf,0xbd,
+ 0xaf,0x02,0x40,0xea,0xed,0xed,0x2d,0xd3,0x75,0xfd,0x3b,0x8f,0xc7,0xd3,
+ 0xb0,0xb7,0xb7,0x87,0xff,0x3b,0x76,0x76,0x76,0xb0,0xb8,0xb8,0xf8,0x64,
+ 0x75,0x75,0xf5,0x5b,0xfa,0xbb,0x48,0x73,0x5f,0xa1,0x1f,0x99,0x41,0xeb,
+ 0xea,0xea,0x1a,0x4a,0x4b,0x4b,0x61,0x18,0xc6,0xa9,0x00,0xbc,0x26,0x49,
+ 0xd2,0xf1,0x9e,0xb7,0xef,0x87,0x87,0x87,0xcf,0xf7,0xf4,0xf4,0xf4,0xd3,
+ 0x6d,0x17,0x4d,0x0f,0x03,0x2b,0xcc,0xb4,0xa4,0xa4,0x04,0xa1,0x50,0x08,
+ 0xd1,0x68,0xf4,0x54,0x50,0x1e,0xd1,0xa8,0x41,0xf7,0xd1,0x18,0xb0,0x05,
+ 0x16,0x8b,0x24,0xee,0x99,0x14,0x8d,0x0a,0x9a,0xce,0x63,0xc6,0x1c,0x7e,
+ 0x38,0x1c,0xc6,0xd1,0xd1,0xd1,0xa9,0xa0,0x07,0x07,0x07,0x98,0x9a,0x9a,
+ 0x42,0x5f,0x5f,0x1f,0xba,0xba,0xbe,0x40,0x67,0x67,0x27,0xb2,0xb3,0xb3,
+ 0xa1,0x69,0x1a,0x14,0x45,0xa6,0xf5,0xa0,0xb9,0x3d,0x91,0xa6,0xce,0xc0,
+ 0xe2,0xc8,0x48,0x24,0x22,0xe6,0x87,0xc6,0xda,0xda,0x1a,0xa6,0xa7,0xa7,
+ 0xb1,0xb5,0xb5,0x85,0x5b,0xb7,0x46,0x30,0x3f,0x3f,0x8b,0x81,0x81,0x01,
+ 0x5c,0xbc,0xd8,0x82,0x0b,0x17,0x1a,0x11,0x17,0x67,0x17,0xc4,0x62,0x43,
+ 0x65,0xb2,0xc7,0xc0,0x2c,0xc1,0x87,0x80,0x99,0x2d,0x47,0x12,0x08,0xec,
+ 0xa3,0xa5,0xa5,0x0d,0x67,0xcf,0x16,0x21,0x33,0x33,0x07,0x4f,0x9f,0x2e,
+ 0xe0,0xee,0xdd,0x51,0xb1,0x56,0x5f,0x5f,0x8f,0xc3,0xc3,0x37,0x8c,0x2d,
+ 0x16,0x8b,0x4c,0x58,0x92,0x62,0x02,0xf0,0x89,0x6f,0x9d,0x7a,0x02,0x38,
+ 0x33,0x33,0x13,0xed,0xed,0xed,0x18,0x19,0x19,0x15,0x21,0x57,0x55,0xd5,
+ 0xa0,0xa2,0xa2,0x1a,0x1b,0x1b,0xeb,0x98,0x9c,0x9c,0x84,0xdb,0xed,0xa6,
+ 0xfc,0x1c,0x9a,0xaf,0x08,0xa2,0xc7,0xc0,0xcc,0xf6,0x5d,0x8d,0x4d,0x17,
+ 0x84,0xc3,0x11,0x24,0x27,0x27,0xe1,0xf2,0xe5,0xcf,0x30,0x36,0x36,0x46,
+ 0x7b,0xa3,0xa8,0xae,0xfe,0x84,0x12,0x56,0x46,0xb2,0x3c,0xc0,0x93,0x27,
+ 0xbf,0x21,0x37,0x37,0x47,0xbc,0x43,0x9a,0x2b,0xa1,0x50,0x58,0x3a,0x01,
+ 0x6c,0x4a,0xc1,0xcc,0x97,0x96,0x96,0xa0,0xeb,0x36,0xe4,0xe5,0xe5,0xc2,
+ 0x74,0x60,0x46,0x46,0x06,0x1a,0x1b,0x1b,0xc9,0x5a,0x3f,0xd0,0xf3,0x3c,
+ 0x38,0x1c,0x0e,0x31,0xd7,0xd7,0xd7,0x91,0x92,0x92,0x1c,0x93,0x42,0x91,
+ 0x15,0x25,0x7a,0x12,0x98,0x01,0x99,0xa5,0xd7,0xeb,0x25,0x26,0xf3,0x14,
+ 0x41,0x18,0xad,0xad,0xad,0xc8,0xca,0xca,0x82,0x2c,0xcb,0x50,0x55,0x05,
+ 0x05,0x05,0x05,0xc2,0x66,0xb2,0x2c,0x11,0x3b,0x2b,0x69,0x1b,0x8a,0xe5,
+ 0x20,0x20,0x70,0x64,0x86,0x8d,0x86,0x4f,0x6a,0xcc,0x3e,0x66,0x60,0xd6,
+ 0x8d,0x72,0x20,0x6c,0x35,0x34,0xf4,0x3d,0x9a,0x9a,0x9a,0x91,0x9f,0x9f,
+ 0x0b,0xab,0x55,0xc7,0xe6,0xe6,0x06,0xd9,0x4b,0x81,0xdd,0xae,0xd3,0x1e,
+ 0xab,0x78,0xd7,0xeb,0xdd,0x86,0xdf,0x6f,0x02,0xcb,0x72,0x24,0x62,0x79,
+ 0x9f,0x31,0xbb,0x63,0x70,0x70,0x10,0x33,0x33,0x73,0x38,0x73,0x26,0x07,
+ 0x6d,0x6d,0x1d,0x94,0xfd,0x1f,0x71,0xe9,0x52,0x8b,0x60,0x3a,0x37,0xf7,
+ 0x00,0xd7,0xaf,0x7f,0x49,0xa1,0x3b,0xa8,0x94,0x5f,0xa3,0xbc,0xbc,0x12,
+ 0x13,0x13,0xab,0x64,0xc5,0x7f,0x62,0xc0,0xaa,0xa6,0xaa,0x86,0xf2,0x1e,
+ 0x30,0x5f,0xbb,0xbb,0xbb,0x71,0xe7,0xce,0x08,0xae,0x5d,0xfb,0x9a,0xb2,
+ 0x5f,0x49,0x4c,0xad,0xe4,0xdb,0x7e,0xb1,0xef,0xc6,0x8d,0x6f,0x44,0xd2,
+ 0xb6,0xb7,0x3d,0xd8,0xdf,0x3f,0x40,0x5d,0x5d,0x3d,0x45,0x1a,0xc4,0xfd,
+ 0xfb,0x3f,0x8b,0x75,0xab,0x55,0x4b,0x90,0x65,0x8b,0x76,0x42,0x0a,0xd6,
+ 0x8a,0x19,0x37,0x37,0x7f,0x8a,0xdb,0xb7,0x47,0xf1,0xf0,0xe1,0x3c,0x6a,
+ 0x6b,0x1b,0x50,0x5c,0x5c,0x82,0x9b,0x37,0x87,0x60,0xb3,0x69,0x62,0xaf,
+ 0xc7,0xb3,0x83,0xdd,0x5d,0x9f,0x90,0x8e,0x7c,0x8b,0x86,0x86,0x26,0x51,
+ 0x3c,0x2b,0x2b,0xcb,0x2c,0x57,0x6a,0x7c,0xbc,0x9a,0x78,0x0c,0x6c,0x16,
+ 0x08,0x5f,0xe3,0xe3,0xe3,0x50,0x59,0x59,0x85,0x7b,0xf7,0x46,0x85,0x57,
+ 0x6b,0x6a,0x6a,0xe9,0x59,0x3c,0x25,0x4f,0x13,0xec,0x83,0xc1,0xa0,0x98,
+ 0xba,0xae,0x09,0x9b,0x79,0xbd,0x3e,0xe1,0x75,0x1e,0x49,0x49,0x89,0x6e,
+ 0x45,0xd1,0x52,0xde,0x61,0xcc,0x05,0x62,0x50,0x72,0x54,0x62,0x59,0x2c,
+ 0x22,0x98,0x9d,0xfd,0x05,0x8f,0x1e,0xfd,0x2a,0x0e,0x63,0xdb,0xe5,0xe7,
+ 0x17,0x92,0x9f,0xaf,0x8a,0x04,0x96,0x97,0x97,0xc1,0xe9,0x74,0x10,0xf3,
+ 0x23,0x3c,0x7f,0xfe,0x07,0xd2,0xd3,0xd3,0x91,0x9a,0xea,0x70,0x10,0x70,
+ 0x12,0x03,0x1b,0xdc,0x4f,0x19,0x84,0xbb,0x16,0xbf,0x4c,0x35,0x21,0x98,
+ 0x15,0x15,0x15,0x53,0x61,0xa4,0x62,0x79,0xf9,0x4f,0xbc,0x7a,0xb5,0x4d,
+ 0x12,0x78,0xe8,0xa0,0x19,0x72,0xc0,0x3e,0x3a,0x3a,0x3e,0xa7,0x68,0x36,
+ 0x99,0x21,0xd9,0x4e,0xc5,0x95,0x2b,0x57,0x45,0x89,0x93,0xaf,0x75,0x8a,
+ 0xcc,0x26,0x80,0xb9,0x49,0x8f,0x8f,0x8f,0x9f,0x67,0x8f,0x9a,0xd5,0xc7,
+ 0xed,0x91,0xa3,0xe0,0x1e,0xe0,0x76,0xbb,0x84,0x14,0x2e,0x97,0x1b,0x3e,
+ 0xdf,0x2e,0x9e,0x3d,0x7b,0x4c,0xa5,0xed,0x47,0x61,0xe1,0xc7,0xd4,0x33,
+ 0x7e,0x17,0xa0,0x1c,0xc1,0xb9,0x73,0xc5,0x87,0xe4,0x1c,0x83,0x23,0x66,
+ 0xe0,0x08,0x77,0x7e,0xb2,0x58,0x7f,0xac,0x9f,0xfe,0xa7,0xf1,0xe2,0xc5,
+ 0x8a,0xb8,0xba,0x5c,0x2e,0x2c,0x2c,0x3c,0x26,0x0b,0x7e,0x65,0x64,0x67,
+ 0x7f,0xf4,0xd2,0xe7,0xf3,0xee,0x92,0x14,0x01,0x06,0x0e,0xc7,0x3e,0x27,
+ 0x5d,0xb1,0x26,0x9d,0x18,0x6b,0x7d,0x94,0x70,0xd1,0xc5,0x25,0xae,0x7f,
+ 0x2e,0x55,0xae,0x2a,0x95,0xe2,0xa4,0x8a,0x8b,0xa3,0x72,0x77,0x26,0x24,
+ 0x24,0xa6,0xa5,0xa5,0x39,0x9d,0x91,0x88,0x61,0x9f,0x98,0xf8,0x49,0xa5,
+ 0x2f,0xd1,0xae,0xa6,0xe9,0xcb,0x64,0xb9,0x97,0x82,0x31,0x77,0x7c,0x76,
+ 0x51,0xec,0xaa,0xb3,0xcf,0x19,0xd0,0xfc,0x9a,0x88,0xa6,0x42,0xf5,0xcf,
+ 0xa5,0x4a,0x95,0xc9,0x07,0x58,0x69,0x29,0x81,0xf2,0x90,0xac,0xeb,0xd6,
+ 0x14,0x62,0x68,0xa3,0xc6,0x64,0xa1,0x86,0x15,0xb0,0xd9,0x6c,0x7f,0x93,
+ 0xee,0x7f,0x29,0xb4,0xd1,0xa0,0x07,0x2c,0xac,0x9f,0x66,0xd0,0x04,0x35,
+ 0xdb,0xdf,0x1b,0xbd,0xb9,0xdc,0xcd,0x7f,0x41,0xc9,0xef,0x7f,0xcd,0xd1,
+ 0xa8,0x81,0x80,0x97,0x3f,0x20,0xba,0xdd,0xae,0xa9,0xa1,0x90,0x46,0xc0,
+ 0x7a,0x58,0x92,0xc2,0x7b,0xba,0xae,0x04,0xfe,0x05,0x00,0x12,0x29,0xd3,
+ 0x40,0xbb,0x4e,0xd5,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,
+ 0x60,0x82
+};
+
+static const unsigned int small_undo_png_len = 572;
+static const unsigned char small_undo_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xd6,0xd8,0xd4,0x4f,0x58,0x32,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x41,0x64,0x6f,0x62,
+ 0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x52,0x65,0x61,0x64,0x79,0x71,0xc9,
+ 0x65,0x3c,0x00,0x00,0x01,0xce,0x49,0x44,0x41,0x54,0x48,0xc7,0xdd,0xd4,
+ 0x3f,0x28,0x84,0x61,0x1c,0xc0,0xf1,0x5b,0x2c,0x57,0x62,0xb9,0x4d,0x6e,
+ 0xb8,0xed,0xe4,0x06,0x29,0x72,0x37,0x28,0xab,0xc9,0xa2,0xb0,0x50,0x18,
+ 0x90,0x0c,0x32,0x30,0xde,0x46,0x51,0x38,0x11,0xf9,0x3b,0x21,0x37,0x89,
+ 0x4d,0x0c,0xa2,0x64,0xa0,0x2c,0x52,0xca,0x49,0x47,0x29,0x91,0x88,0x7a,
+ 0x7c,0x1f,0xf7,0x7b,0xbd,0xcf,0x3d,0x71,0x7f,0x94,0x85,0xfa,0x7a,0x1e,
+ 0x6f,0xdd,0xe7,0x7d,0x3d,0xcf,0x73,0xaf,0x47,0x29,0xe5,0xf9,0x8b,0x3c,
+ 0xff,0x1f,0xe6,0xc7,0x4b,0x7e,0x0a,0x4a,0x7a,0xee,0xfd,0x35,0x6c,0x80,
+ 0x95,0xa4,0xac,0x2a,0xed,0x1b,0xe4,0x83,0x06,0x1d,0x68,0x3d,0x1c,0x56,
+ 0xcb,0x65,0x65,0x6a,0x9e,0x62,0x25,0x25,0xe6,0x0d,0x82,0x0e,0x9e,0x17,
+ 0xba,0x05,0x18,0x0f,0x85,0xd4,0xb2,0xdf,0xaf,0xc6,0xf9,0x7b,0x8c,0x86,
+ 0x69,0xb4,0xb0,0x50,0x45,0x5d,0x3c,0x90,0x15,0x36,0xd1,0x9d,0x48,0x44,
+ 0xc5,0x01,0x17,0x99,0xcf,0x50,0x8c,0x1c,0x7c,0x84,0x06,0x5c,0xb8,0x56,
+ 0x3e,0xf7,0xf9,0xcb,0x67,0x6f,0x80,0x89,0xee,0x83,0x6e,0x83,0xae,0x31,
+ 0x5f,0x21,0x13,0xef,0xa5,0x66,0x1a,0xa4,0x76,0xe3,0xa9,0x3d,0xb2,0xe8,
+ 0xce,0x06,0x78,0x6d,0xf4,0x18,0x74,0x17,0x74,0x93,0xf9,0x06,0x99,0x78,
+ 0x3f,0xd5,0x1b,0x9b,0x38,0x92,0xfe,0xd4,0xee,0xa6,0xc8,0xdc,0xe7,0x5c,
+ 0x3b,0x03,0x3d,0x04,0xdd,0x61,0xbe,0x4d,0x26,0x3e,0x44,0x0d,0xee,0xe7,
+ 0xda,0xa8,0x66,0xae,0xb4,0x54,0x75,0xba,0xd7,0x52,0xc8,0x1d,0x9b,0x22,
+ 0x17,0xea,0xf4,0x78,0x01,0x7a,0x02,0x7a,0xc8,0x7c,0x4f,0xaf,0xb1,0x81,
+ 0xeb,0x8d,0x6a,0x74,0x81,0x26,0xf9,0xd7,0x0b,0xa8,0xa8,0xc7,0x86,0xef,
+ 0x81,0xaf,0xe4,0xe2,0x35,0xe8,0x39,0xe8,0x29,0xf3,0x23,0x32,0x71,0x7d,
+ 0x0a,0x5a,0xbe,0x41,0x65,0x09,0x0b,0xc6,0x6c,0xf8,0x81,0x33,0x99,0x64,
+ 0x4c,0x16,0x17,0xab,0x04,0xe8,0x85,0x5e,0x0a,0x32,0x71,0x7d,0x0a,0x5a,
+ 0x7f,0x40,0x9d,0xa2,0x36,0xfc,0x08,0x7c,0xcf,0x78,0x4b,0x37,0x74,0xa9,
+ 0x97,0xc3,0xc0,0xf5,0x29,0xe8,0xc8,0x82,0xca,0x53,0x57,0xa5,0xc1,0xcf,
+ 0xc0,0x0f,0x7a,0x49,0x04,0x4f,0x18,0xf8,0x12,0x75,0xe7,0x80,0x0a,0x1c,
+ 0x48,0x83,0x5f,0x81,0x9f,0xf4,0x92,0x58,0xf8,0x2a,0xf5,0xe5,0x88,0x1a,
+ 0x47,0xd5,0xf7,0x05,0xbf,0x03,0xbf,0x30,0xda,0xf8,0x81,0x8b,0x76,0x51,
+ 0x79,0x26,0xd4,0xba,0x41,0x0a,0x56,0xc0,0x6f,0x8c,0x36,0x9e,0x94,0x25,
+ 0x11,0xbc,0xe2,0xbb,0x57,0x64,0x46,0x58,0xa3,0x0b,0x34,0x47,0xb3,0x34,
+ 0x4d,0x53,0x34,0x49,0x13,0xf2,0x4e,0x10,0xbc,0x3a,0x17,0xdc,0xfc,0x4a,
+ 0xe7,0x93,0x2f,0x17,0xd8,0x79,0x81,0x87,0xe4,0xa8,0x44,0x32,0x54,0x25,
+ 0x9b,0x97,0xf5,0x89,0x3f,0x00,0xc7,0x8d,0x6d,0x93,0x39,0x21,0x73,0x78,
+ 0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_disabled_editcut_xpm_len = 733;
+static const unsigned char small_disabled_editcut_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x34,0x20,0x31,0x22,0x2c,0x0a,0x22,0x20,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x31,0x30,0x30,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x63,0x20,0x23,
+ 0x38,0x34,0x38,0x32,0x38,0x34,0x22,0x2c,0x0a,0x22,0x58,0x20,0x63,0x20,
+ 0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x6f,0x20,0x63,0x20,0x6e,
+ 0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x2f,0x2a,0x20,0x70,0x69,0x78,0x65,0x6c,
+ 0x73,0x20,0x2a,0x2f,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x20,0x6f,
+ 0x6f,0x6f,0x6f,0x2e,0x20,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x20,0x6f,0x6f,0x6f,
+ 0x6f,0x2e,0x20,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x20,0x6f,0x6f,0x6f,0x2e,0x2e,
+ 0x20,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x2e,0x6f,0x6f,0x6f,0x2e,0x20,0x20,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x2e,0x20,0x6f,0x6f,0x2e,0x20,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x2e,0x2e,0x6f,0x2e,0x2e,0x20,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x2e,0x2e,0x2e,0x20,0x20,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,
+ 0x2e,0x2e,0x20,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x20,
+ 0x20,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x20,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x6f,0x2e,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x2e,0x2e,0x20,0x2e,0x2e,0x2e,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x2e,0x6f,0x2e,0x20,0x2e,0x20,0x20,0x2e,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x6f,
+ 0x20,0x2e,0x20,0x2e,0x20,0x6f,0x6f,0x2e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x6f,0x20,0x6f,0x2e,
+ 0x20,0x2e,0x20,0x6f,0x6f,0x6f,0x2e,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x2e,0x6f,0x20,0x6f,0x6f,0x2e,0x20,0x2e,
+ 0x20,0x6f,0x6f,0x6f,0x2e,0x20,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,
+ 0x6f,0x6f,0x6f,0x6f,0x2e,0x20,0x6f,0x6f,0x6f,0x2e,0x20,0x6f,0x2e,0x6f,
+ 0x6f,0x6f,0x2e,0x20,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,
+ 0x6f,0x6f,0x2e,0x20,0x6f,0x6f,0x6f,0x2e,0x20,0x6f,0x2e,0x20,0x6f,0x2e,
+ 0x6f,0x20,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,
+ 0x2e,0x20,0x6f,0x6f,0x2e,0x6f,0x20,0x6f,0x6f,0x2e,0x2e,0x6f,0x20,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,
+ 0x2e,0x2e,0x6f,0x20,0x6f,0x6f,0x6f,0x6f,0x20,0x20,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x20,0x20,
+ 0x20,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_disabled_editslots_xpm_len = 899;
+static const unsigned char small_disabled_editslots_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x31,0x36,0x20,0x31,0x22,0x2c,0x0a,0x22,0x20,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x31,0x30,0x30,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x63,0x20,
+ 0x23,0x66,0x65,0x66,0x65,0x66,0x65,0x22,0x2c,0x0a,0x22,0x58,0x20,0x63,
+ 0x20,0x47,0x72,0x61,0x79,0x39,0x39,0x22,0x2c,0x0a,0x22,0x6f,0x20,0x63,
+ 0x20,0x23,0x63,0x38,0x39,0x61,0x36,0x64,0x22,0x2c,0x0a,0x22,0x4f,0x20,
+ 0x63,0x20,0x23,0x63,0x38,0x39,0x35,0x34,0x34,0x22,0x2c,0x0a,0x22,0x2b,
+ 0x20,0x63,0x20,0x23,0x63,0x35,0x38,0x64,0x35,0x32,0x22,0x2c,0x0a,0x22,
+ 0x40,0x20,0x63,0x20,0x23,0x38,0x34,0x38,0x32,0x38,0x34,0x22,0x2c,0x0a,
+ 0x22,0x23,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,
+ 0x24,0x20,0x63,0x20,0x6e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x22,0x25,0x20,
+ 0x63,0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x26,0x20,0x63,
+ 0x20,0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x2a,0x20,0x63,0x20,
+ 0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x2d,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x3b,0x20,0x63,0x20,0x47,0x72,0x61,
+ 0x79,0x30,0x22,0x2c,0x0a,0x22,0x3a,0x20,0x63,0x20,0x47,0x72,0x61,0x79,
+ 0x30,0x22,0x2c,0x0a,0x2f,0x2a,0x20,0x70,0x69,0x78,0x65,0x6c,0x73,0x20,
+ 0x2a,0x2f,0x0a,0x22,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x22,0x2c,
+ 0x0a,0x22,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x22,0x2c,0x0a,0x22,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x22,0x2c,0x0a,0x22,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x22,0x2c,0x0a,0x22,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x40,0x40,0x40,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x22,0x2c,0x0a,0x22,0x24,0x24,0x24,0x24,0x24,0x40,
+ 0x40,0x20,0x40,0x20,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x22,0x2c,0x0a,0x22,0x24,0x24,0x24,0x24,0x40,0x40,0x20,0x20,
+ 0x40,0x20,0x24,0x24,0x24,0x40,0x40,0x40,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x22,0x2c,0x0a,0x22,0x24,0x24,0x24,0x40,0x40,0x20,0x20,0x24,0x40,0x20,
+ 0x24,0x40,0x40,0x40,0x20,0x40,0x40,0x40,0x24,0x24,0x24,0x24,0x22,0x2c,
+ 0x0a,0x22,0x24,0x24,0x24,0x40,0x20,0x20,0x24,0x24,0x40,0x20,0x24,0x40,
+ 0x20,0x20,0x20,0x24,0x20,0x40,0x20,0x24,0x24,0x24,0x22,0x2c,0x0a,0x22,
+ 0x24,0x24,0x40,0x40,0x20,0x24,0x24,0x24,0x40,0x20,0x40,0x40,0x20,0x24,
+ 0x24,0x24,0x24,0x40,0x40,0x24,0x24,0x24,0x22,0x2c,0x0a,0x22,0x40,0x40,
+ 0x40,0x20,0x20,0x24,0x24,0x24,0x40,0x20,0x40,0x20,0x20,0x24,0x24,0x24,
+ 0x24,0x24,0x40,0x40,0x40,0x40,0x22,0x2c,0x0a,0x22,0x40,0x40,0x40,0x20,
+ 0x24,0x24,0x24,0x24,0x40,0x20,0x40,0x20,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x40,0x40,0x40,0x40,0x22,0x2c,0x0a,0x22,0x24,0x20,0x40,0x40,0x24,0x24,
+ 0x24,0x24,0x40,0x20,0x40,0x40,0x24,0x24,0x24,0x24,0x24,0x40,0x40,0x20,
+ 0x20,0x20,0x22,0x2c,0x0a,0x22,0x24,0x24,0x24,0x40,0x20,0x24,0x24,0x24,
+ 0x40,0x20,0x24,0x40,0x20,0x24,0x24,0x24,0x24,0x40,0x20,0x20,0x24,0x24,
+ 0x22,0x2c,0x0a,0x22,0x24,0x24,0x24,0x40,0x40,0x24,0x24,0x24,0x40,0x20,
+ 0x24,0x40,0x40,0x40,0x24,0x40,0x40,0x40,0x20,0x24,0x24,0x24,0x22,0x2c,
+ 0x0a,0x22,0x24,0x24,0x24,0x24,0x40,0x40,0x24,0x24,0x40,0x20,0x24,0x24,
+ 0x20,0x40,0x40,0x40,0x20,0x20,0x20,0x24,0x24,0x24,0x22,0x2c,0x0a,0x22,
+ 0x24,0x24,0x24,0x24,0x24,0x40,0x40,0x24,0x40,0x20,0x24,0x24,0x24,0x24,
+ 0x20,0x20,0x20,0x24,0x24,0x24,0x24,0x24,0x22,0x2c,0x0a,0x22,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x40,0x40,0x40,0x20,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x22,0x2c,0x0a,0x22,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x20,0x20,0x20,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x22,0x2c,0x0a,0x22,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x22,0x2c,0x0a,0x22,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x22,0x2c,0x0a,0x22,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x22,0x0a,
+ 0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_disabled_layout_xpm_len = 931;
+static const unsigned char small_disabled_layout_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x31,0x34,0x20,0x31,0x22,0x2c,0x0a,0x22,0x20,0x20,0x63,0x20,0x23,
+ 0x36,0x37,0x36,0x37,0x36,0x37,0x36,0x37,0x36,0x37,0x36,0x37,0x22,0x2c,
+ 0x0a,0x22,0x2e,0x20,0x63,0x20,0x23,0x36,0x66,0x36,0x66,0x36,0x66,0x36,
+ 0x66,0x36,0x66,0x36,0x66,0x22,0x2c,0x0a,0x22,0x58,0x20,0x63,0x20,0x23,
+ 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x35,0x30,0x22,0x2c,
+ 0x0a,0x22,0x4f,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x35,0x33,0x22,0x2c,
+ 0x0a,0x22,0x2b,0x20,0x63,0x20,0x47,0x72,0x61,0x79,0x35,0x36,0x22,0x2c,
+ 0x0a,0x22,0x40,0x20,0x63,0x20,0x23,0x39,0x37,0x39,0x37,0x39,0x37,0x39,
+ 0x37,0x39,0x37,0x39,0x37,0x22,0x2c,0x0a,0x22,0x23,0x20,0x63,0x20,0x23,
+ 0x39,0x66,0x39,0x66,0x39,0x66,0x39,0x66,0x39,0x66,0x39,0x66,0x22,0x2c,
+ 0x0a,0x22,0x24,0x20,0x63,0x20,0x23,0x61,0x37,0x61,0x37,0x61,0x37,0x61,
+ 0x37,0x61,0x37,0x61,0x37,0x22,0x2c,0x0a,0x22,0x25,0x20,0x63,0x20,0x23,
+ 0x61,0x66,0x61,0x66,0x61,0x66,0x61,0x66,0x61,0x66,0x61,0x66,0x22,0x2c,
+ 0x0a,0x22,0x26,0x20,0x63,0x20,0x23,0x62,0x37,0x62,0x37,0x62,0x37,0x62,
+ 0x37,0x62,0x37,0x62,0x37,0x22,0x2c,0x0a,0x22,0x2a,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x37,0x35,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x37,0x38,0x22,0x2c,0x0a,0x22,0x2d,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x38,0x31,0x22,0x2c,0x0a,0x2f,0x2a,0x20,0x70,0x69,0x78,
+ 0x65,0x6c,0x73,0x20,0x2a,0x2f,0x0a,0x22,0x2a,0x2a,0x3d,0x3d,0x3d,0x3d,
+ 0x3d,0x3d,0x3d,0x2a,0x2a,0x2a,0x2a,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,
+ 0x3d,0x2a,0x22,0x2c,0x0a,0x22,0x3d,0x3d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,
+ 0x2d,0x3d,0x2a,0x2a,0x2a,0x2d,0x3d,0x2d,0x2d,0x3d,0x2d,0x2d,0x3d,0x3d,
+ 0x22,0x2c,0x0a,0x22,0x3d,0x2d,0x3d,0x2d,0x3d,0x2d,0x3d,0x3d,0x3d,0x2a,
+ 0x2a,0x2a,0x2a,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x22,0x2c,
+ 0x0a,0x22,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,
+ 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x22,0x2c,0x0a,0x22,
+ 0x25,0x2b,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x40,0x25,0x25,0x23,0x4f,
+ 0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x2b,0x25,0x22,0x2c,0x0a,0x22,0x25,0x4f,
+ 0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x2b,0x25,0x25,0x2b,0x58,0x58,0x58,
+ 0x58,0x58,0x58,0x58,0x4f,0x24,0x22,0x2c,0x0a,0x22,0x26,0x24,0x23,0x23,
+ 0x23,0x23,0x23,0x23,0x23,0x24,0x26,0x26,0x24,0x23,0x23,0x23,0x23,0x23,
+ 0x23,0x23,0x24,0x26,0x22,0x2c,0x0a,0x22,0x2a,0x26,0x26,0x26,0x2a,0x26,
+ 0x2a,0x26,0x2a,0x26,0x2a,0x2a,0x2a,0x26,0x2a,0x26,0x2a,0x26,0x2a,0x26,
+ 0x26,0x2a,0x22,0x2c,0x0a,0x22,0x2a,0x2a,0x3d,0x3d,0x2a,0x3d,0x3d,0x3d,
+ 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x3d,0x3d,0x2a,0x3d,0x3d,0x2a,0x2a,0x2a,
+ 0x22,0x2c,0x0a,0x22,0x3d,0x3d,0x2d,0x2d,0x2d,0x2d,0x2d,0x3d,0x2d,0x2a,
+ 0x2a,0x2a,0x3d,0x2d,0x3d,0x2d,0x2d,0x3d,0x2d,0x3d,0x3d,0x3d,0x22,0x2c,
+ 0x0a,0x22,0x2a,0x3d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2a,0x26,0x2a,
+ 0x2a,0x3d,0x2d,0x2d,0x3d,0x3d,0x3d,0x2d,0x3d,0x3d,0x22,0x2c,0x0a,0x22,
+ 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x26,0x26,0x26,0x26,
+ 0x26,0x25,0x26,0x26,0x26,0x25,0x26,0x26,0x22,0x2c,0x0a,0x22,0x25,0x40,
+ 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x40,0x25,0x25,0x23,0x2b,0x2b,0x2b,
+ 0x2b,0x2b,0x2b,0x2b,0x40,0x25,0x22,0x2c,0x0a,0x22,0x25,0x2b,0x6f,0x6f,
+ 0x6f,0x58,0x6f,0x58,0x6f,0x2b,0x25,0x25,0x40,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x4f,0x25,0x22,0x2c,0x0a,0x22,0x26,0x24,0x23,0x23,0x23,0x23,
+ 0x23,0x23,0x23,0x24,0x26,0x26,0x25,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
+ 0x24,0x26,0x22,0x2c,0x0a,0x22,0x2a,0x26,0x26,0x26,0x26,0x26,0x26,0x26,
+ 0x26,0x26,0x2a,0x2a,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x2a,
+ 0x22,0x2c,0x0a,0x22,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x26,
+ 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x22,0x2c,
+ 0x0a,0x22,0x2a,0x3d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2a,0x2a,0x2a,
+ 0x3d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x3d,0x2a,0x22,0x2c,0x0a,0x22,
+ 0x2a,0x3d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2a,0x2a,0x26,0x3d,0x3d,
+ 0x2d,0x2d,0x2d,0x2d,0x2d,0x3d,0x3d,0x3d,0x22,0x2c,0x0a,0x22,0x26,0x26,
+ 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x26,0x26,0x26,0x26,0x26,0x26,
+ 0x26,0x26,0x26,0x26,0x26,0x2a,0x22,0x2c,0x0a,0x22,0x26,0x23,0x2b,0x2b,
+ 0x2b,0x2b,0x2b,0x2b,0x2b,0x40,0x25,0x25,0x23,0x2b,0x2b,0x2b,0x2b,0x2b,
+ 0x2b,0x2b,0x23,0x25,0x22,0x2c,0x0a,0x22,0x25,0x4f,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x4f,0x24,0x25,0x4f,0x2e,0x2e,0x2e,0x20,0x2e,0x2e,0x2e,
+ 0x6f,0x24,0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_disabled_left_xpm_len = 733;
+static const unsigned char small_disabled_left_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x34,0x20,0x31,0x22,0x2c,0x0a,0x22,0x20,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x31,0x30,0x30,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x63,0x20,0x23,
+ 0x38,0x34,0x38,0x32,0x38,0x34,0x22,0x2c,0x0a,0x22,0x58,0x20,0x63,0x20,
+ 0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x6f,0x20,0x63,0x20,0x6e,
+ 0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x2f,0x2a,0x20,0x70,0x69,0x78,0x65,0x6c,
+ 0x73,0x20,0x2a,0x2f,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x2e,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x2e,0x2e,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x2e,0x2e,0x2e,0x2e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x2e,0x2e,0x2e,0x2e,0x2e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x2e,0x2e,
+ 0x2e,0x20,0x2e,0x2e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x2e,0x2e,0x2e,0x6f,0x20,
+ 0x2e,0x2e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x2e,0x2e,0x2e,0x6f,0x6f,0x20,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x2e,0x2e,0x2e,0x6f,0x6f,0x6f,0x20,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,
+ 0x2e,0x2e,0x2e,0x6f,0x6f,0x6f,0x6f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2e,
+ 0x2e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x20,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x2e,0x2e,
+ 0x6f,0x6f,0x6f,0x6f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x20,0x2e,0x2e,0x2e,0x6f,
+ 0x6f,0x20,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x6f,0x20,0x20,0x2e,0x2e,0x2e,0x6f,0x20,
+ 0x2e,0x2e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,
+ 0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x20,0x20,0x2e,0x2e,0x2e,0x20,0x2e,0x2e,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x6f,0x6f,0x20,0x20,0x2e,0x2e,0x2e,0x2e,0x2e,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,
+ 0x6f,0x6f,0x6f,0x6f,0x20,0x20,0x2e,0x2e,0x2e,0x2e,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x20,0x20,0x2e,0x2e,0x2e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x20,0x20,0x2e,0x2e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x20,0x20,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_disabled_right_xpm_len = 733;
+static const unsigned char small_disabled_right_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x32,0x32,0x20,0x32,0x32,
+ 0x20,0x34,0x20,0x31,0x22,0x2c,0x0a,0x22,0x20,0x20,0x63,0x20,0x47,0x72,
+ 0x61,0x79,0x31,0x30,0x30,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x63,0x20,0x23,
+ 0x38,0x34,0x38,0x32,0x38,0x34,0x22,0x2c,0x0a,0x22,0x58,0x20,0x63,0x20,
+ 0x47,0x72,0x61,0x79,0x30,0x22,0x2c,0x0a,0x22,0x6f,0x20,0x63,0x20,0x6e,
+ 0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x2f,0x2a,0x20,0x70,0x69,0x78,0x65,0x6c,
+ 0x73,0x20,0x2a,0x2f,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x2e,0x2e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x2e,
+ 0x2e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x2e,0x2e,0x2e,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x2e,0x2e,0x2e,0x2e,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x2e,0x20,0x2e,0x2e,0x2e,0x6f,0x6f,
+ 0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x2e,0x2e,0x20,0x6f,0x2e,0x2e,0x2e,0x6f,0x6f,0x6f,
+ 0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x20,0x6f,0x6f,0x2e,0x2e,0x2e,0x6f,0x6f,0x22,0x2c,
+ 0x0a,0x22,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x20,0x6f,0x6f,0x6f,0x2e,0x2e,0x2e,0x6f,0x22,0x2c,0x0a,0x22,
+ 0x2e,0x2e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x6f,0x6f,0x6f,0x6f,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2e,
+ 0x20,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x6f,0x6f,0x6f,0x6f,
+ 0x2e,0x2e,0x2e,0x20,0x22,0x2c,0x0a,0x22,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x20,0x6f,0x6f,0x2e,0x2e,0x2e,
+ 0x20,0x20,0x22,0x2c,0x0a,0x22,0x6f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x2e,0x2e,0x20,0x6f,0x2e,0x2e,0x2e,0x20,0x20,0x6f,
+ 0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x2e,0x2e,0x20,0x2e,0x2e,0x2e,0x20,0x20,0x6f,0x6f,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x20,0x20,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x2e,
+ 0x2e,0x2e,0x20,0x20,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x2e,0x2e,0x20,
+ 0x20,0x6f,0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x2e,0x2e,0x20,0x20,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x20,0x20,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x22,0x2c,0x0a,0x22,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int small_disabled_adjustsize_png_len = 659;
+static const unsigned char small_disabled_adjustsize_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x02,0x1e,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xf8,0xff,0xff,0x3f,0x03,0x31,0xf8,0xfa,
+ 0xf5,0xeb,0xff,0x89,0x55,0x0b,0xc2,0x00,0x01,0xc4,0xc4,0x40,0x02,0x08,
+ 0x0a,0x0a,0xfa,0x4f,0xac,0x5a,0x80,0x00,0x22,0xc9,0x60,0x52,0x00,0x40,
+ 0x00,0x31,0x82,0x9c,0x8d,0x0f,0xdc,0xb8,0x71,0x03,0xae,0xe0,0xd4,0xa9,
+ 0x53,0x0c,0x1f,0x3e,0x7c,0x60,0xc8,0xcb,0xcb,0x63,0x24,0x64,0x30,0x40,
+ 0x00,0x11,0x34,0x18,0x04,0x4e,0x9f,0x3e,0xfd,0xff,0xc2,0x85,0x0b,0x0c,
+ 0x57,0xae,0x5c,0x61,0x78,0xfc,0xf8,0x31,0x58,0x6c,0xdd,0xba,0x75,0x78,
+ 0x0d,0x07,0x08,0x20,0xa2,0x82,0xc2,0xd4,0xd4,0x94,0xf1,0xc9,0x93,0x27,
+ 0x44,0x1b,0x0a,0x02,0x00,0x01,0x44,0x74,0x2c,0x83,0x70,0x60,0x60,0x20,
+ 0xd1,0x29,0x03,0x20,0x80,0x88,0x0a,0x0a,0x72,0x00,0x40,0x00,0xa1,0x04,
+ 0x05,0x72,0x44,0xc1,0x15,0x30,0x31,0xfd,0x97,0x96,0x96,0xfe,0x2f,0x29,
+ 0x29,0x09,0xc6,0x62,0x62,0x62,0xff,0x95,0x95,0x95,0xff,0x13,0xd2,0x07,
+ 0x10,0x40,0x2c,0xe8,0x02,0xa0,0x88,0x02,0x85,0x29,0x8c,0x0f,0x34,0x8c,
+ 0x61,0xda,0xb4,0x69,0x0c,0x0f,0x1f,0x3e,0x64,0xe0,0xe3,0xe3,0x63,0xf8,
+ 0xf9,0xf3,0x27,0xc3,0x91,0x23,0x47,0x18,0xf6,0xee,0xdd,0xfb,0xdf,0xd9,
+ 0xd9,0x99,0x11,0x66,0x28,0x28,0x8d,0x23,0x87,0x3d,0x40,0x00,0x31,0x81,
+ 0x24,0x60,0x18,0x24,0x00,0x8a,0xfd,0xfa,0xfa,0x7a,0xb8,0x0b,0xfe,0xfd,
+ 0xfb,0xc7,0xf0,0xe0,0xc1,0x03,0x86,0xa7,0x4f,0x9f,0x82,0xd9,0xbc,0xbc,
+ 0xbc,0x0c,0xfc,0xfc,0xfc,0x0c,0x0a,0x0a,0x0a,0x70,0x97,0xde,0xbd,0x7b,
+ 0x97,0xc1,0xcd,0xcd,0x8d,0x61,0xd1,0xa2,0x45,0xff,0x37,0x6d,0xda,0x04,
+ 0x16,0x03,0x08,0x20,0x16,0x0d,0x0d,0x0d,0x46,0x58,0x8e,0x0a,0x08,0x08,
+ 0x80,0x27,0x29,0x64,0x17,0x80,0x0c,0x02,0x19,0xa8,0xa4,0xa4,0x04,0x76,
+ 0x31,0x33,0x33,0x33,0xd8,0x52,0x90,0xde,0xed,0xdb,0xb7,0xff,0x3f,0x7f,
+ 0xfe,0x3c,0xc3,0xb9,0x73,0xe7,0xe0,0xbe,0x5e,0xb0,0x60,0xc1,0x7f,0x80,
+ 0x00,0x02,0x07,0x05,0xcc,0x80,0x49,0x93,0x26,0xfd,0x47,0x4f,0x52,0x7f,
+ 0xff,0xfe,0x65,0xf8,0xfe,0xfd,0x3b,0x03,0x0f,0x0f,0x0f,0xc3,0x8f,0x1f,
+ 0x3f,0x18,0x5e,0xbc,0x78,0xc1,0xf0,0xf1,0xe3,0x47,0xb8,0x21,0x9e,0x9e,
+ 0x9e,0x8c,0x27,0x4e,0x9c,0xf8,0x8f,0xac,0x07,0x04,0x00,0x02,0x08,0x25,
+ 0x8c,0x41,0x39,0xea,0xc0,0x81,0x03,0x28,0x61,0x05,0x72,0x29,0x28,0x4c,
+ 0x41,0xe1,0xcb,0xca,0xca,0x0a,0x36,0x14,0x64,0x38,0x32,0x68,0x6c,0x6c,
+ 0x64,0x44,0x2f,0x47,0x00,0x02,0x88,0xa8,0xe4,0x06,0x8a,0x28,0x50,0x98,
+ 0x22,0x03,0x45,0x45,0x45,0x50,0x8a,0xc1,0x99,0x51,0x00,0x02,0x88,0xe8,
+ 0xcc,0x41,0x6a,0xb1,0x09,0x10,0x40,0x44,0x65,0x69,0x58,0xec,0x83,0x22,
+ 0x8a,0x18,0xf5,0x20,0x00,0x10,0x40,0x04,0x0d,0x46,0x4e,0x52,0x67,0xcf,
+ 0x9e,0x45,0x49,0x8a,0xf8,0x00,0x40,0x00,0x11,0x15,0xc6,0xa0,0x88,0x01,
+ 0xa5,0xd3,0x5d,0xbb,0x76,0xc1,0xc5,0x08,0x15,0x44,0x00,0x01,0x44,0x74,
+ 0x98,0x2d,0x5c,0xb8,0xf0,0x3f,0x29,0x85,0x10,0x40,0x00,0x11,0x5d,0x83,
+ 0x08,0x08,0x08,0x10,0xab,0x14,0x0c,0x00,0x02,0x88,0x68,0x83,0xfd,0xfc,
+ 0xfc,0x08,0x97,0xc1,0x48,0x00,0x20,0xc0,0x00,0x03,0xf1,0xf0,0x41,0xde,
+ 0x11,0x65,0xed,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,
+ 0x82
+};
+
+static const unsigned int small_disabled_connecttool_png_len = 836;
+static const unsigned char small_disabled_connecttool_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x02,0xcf,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xfc,0xff,0xff,0x3f,0x03,0x2d,0x00,0x40,
+ 0x00,0x31,0xd1,0xc4,0x54,0x20,0x00,0x08,0x20,0x9a,0x19,0x0c,0x10,0x40,
+ 0x34,0x33,0x18,0x20,0x80,0x68,0x66,0x30,0x40,0x00,0xb1,0xc0,0x6d,0x60,
+ 0x62,0xfa,0x2f,0x26,0x26,0x06,0x97,0xf8,0xf7,0xef,0x1f,0xc3,0xaf,0x5f,
+ 0xbf,0xc0,0x98,0x8d,0x8d,0x8d,0x81,0x85,0x85,0x85,0x81,0x99,0x99,0x99,
+ 0x81,0x91,0x91,0x11,0xc3,0x10,0x50,0x02,0x10,0x16,0x16,0x66,0x90,0x97,
+ 0x97,0x97,0xd9,0xbe,0x7d,0xfb,0x53,0x90,0x18,0x40,0x00,0x31,0x82,0x04,
+ 0x41,0x86,0x46,0x44,0x44,0x30,0x34,0x36,0x36,0x82,0x0d,0x04,0x89,0xfd,
+ 0xf9,0xf3,0x87,0xe1,0xdb,0xb7,0x6f,0x0c,0xfb,0xf6,0xed,0x63,0x38,0x71,
+ 0xe2,0x04,0x43,0x78,0x78,0x38,0x83,0x86,0x86,0x06,0x03,0x2b,0x2b,0x2b,
+ 0xd8,0x30,0x64,0x0b,0x40,0x6a,0x9f,0x3c,0x79,0xc2,0x30,0x6b,0xd6,0x2c,
+ 0x10,0xd7,0x64,0xe3,0xc6,0x8d,0x67,0x01,0x02,0x70,0x38,0x07,0x35,0x00,
+ 0xc4,0x20,0x14,0x44,0xff,0x5a,0xa8,0x04,0x34,0xac,0x88,0xba,0xaa,0x32,
+ 0x2c,0x60,0x80,0x6a,0x68,0x0f,0x5c,0x48,0x08,0x49,0x5b,0xce,0x93,0xbc,
+ 0xcc,0xed,0x5f,0xa1,0x63,0x0c,0xb8,0x3b,0x22,0xa2,0xe0,0x77,0xba,0xf7,
+ 0x86,0x99,0x41,0x55,0x21,0x22,0xe8,0xbd,0x83,0x88,0x0a,0x7d,0xf7,0x77,
+ 0xa8,0xe0,0xcc,0xc4,0x5a,0x0b,0x73,0x4e,0x30,0x33,0x5a,0x6b,0xff,0x11,
+ 0x40,0x8c,0xe2,0xe2,0xe2,0xff,0x0f,0x1c,0x38,0xc0,0xf0,0xe1,0xc3,0x07,
+ 0x86,0xd7,0xaf,0x5f,0x83,0x0d,0x02,0x29,0x84,0x05,0x07,0xc8,0x35,0x20,
+ 0xfa,0xd9,0xb3,0x67,0x0c,0xe7,0xcf,0x9f,0x67,0x30,0x32,0x32,0x62,0x90,
+ 0x96,0x96,0x06,0x07,0x0d,0x08,0xc3,0x82,0xe2,0xeb,0xd7,0xaf,0x0c,0xaf,
+ 0x5e,0xbd,0x02,0xfb,0xce,0xcd,0xcd,0x8d,0x01,0x20,0x80,0x98,0x60,0x36,
+ 0xfe,0xfc,0xf9,0x13,0xc5,0x50,0x68,0xb8,0x83,0x35,0x83,0x5c,0x08,0x74,
+ 0x00,0x83,0xae,0xae,0x2e,0xd8,0xe5,0x6f,0xde,0xbc,0x61,0x10,0x11,0x11,
+ 0x61,0x10,0x14,0x14,0x84,0x07,0x0d,0xcc,0x21,0x20,0xb5,0x26,0x26,0x26,
+ 0x0c,0x00,0x01,0xc4,0x04,0xb3,0x11,0x24,0x88,0x6c,0x28,0x0c,0x80,0x14,
+ 0x82,0xe4,0x40,0x2e,0xe2,0xe6,0xe6,0x66,0xd0,0xd6,0xd6,0x66,0x38,0x7e,
+ 0xfc,0x38,0x38,0x28,0x40,0x11,0x06,0x12,0x83,0x99,0x81,0x9c,0x8b,0x01,
+ 0x02,0x88,0x05,0xc3,0x24,0xb4,0xd8,0x06,0x85,0xf9,0x97,0x2f,0x5f,0xc0,
+ 0x41,0x05,0xb2,0x00,0xe6,0x42,0x29,0x29,0x29,0x30,0xcd,0xc9,0xc9,0x09,
+ 0x8e,0x0b,0x98,0x7a,0x10,0x00,0xa5,0x22,0x80,0x00,0xc2,0x69,0x30,0xcc,
+ 0xd0,0x4f,0x9f,0x3e,0x81,0x35,0x82,0x82,0x0a,0x14,0xa1,0x0f,0x1e,0x3c,
+ 0x60,0xa8,0xac,0xac,0x64,0xe0,0xe2,0xe2,0x02,0xfb,0x02,0x96,0x8a,0x60,
+ 0x34,0x4c,0x2f,0x40,0x00,0xb1,0x20,0xa7,0x57,0x6c,0x86,0x82,0x62,0x1b,
+ 0x94,0x5a,0x40,0x06,0x3f,0x7a,0xf4,0x88,0xa1,0xb8,0xb8,0x18,0x14,0xeb,
+ 0x60,0x3e,0xc8,0x60,0x90,0x1a,0x90,0x5a,0x50,0xd2,0x04,0xd1,0x20,0x00,
+ 0xa2,0x01,0x02,0x88,0x05,0xa4,0x08,0x94,0x4c,0x40,0x06,0x83,0x24,0x41,
+ 0x86,0x82,0xc2,0x1a,0xc4,0x06,0x69,0xfa,0xfe,0xfd,0x3b,0x38,0x28,0x5e,
+ 0xbc,0x78,0xc1,0x90,0x92,0x92,0xc2,0xc0,0xcf,0xcf,0x0f,0x8e,0x64,0x90,
+ 0x18,0x28,0xa5,0x80,0x82,0x08,0x16,0x54,0x20,0x33,0x60,0x49,0x10,0x20,
+ 0x80,0xc0,0x19,0xc4,0xdb,0xdb,0xfb,0xbf,0xb9,0xb9,0x39,0x58,0x10,0x64,
+ 0x1b,0xc8,0x17,0x20,0x1a,0x84,0x41,0xc1,0x00,0x72,0xb5,0xab,0xab,0x2b,
+ 0x83,0x8e,0x8e,0x0e,0xd8,0x90,0x97,0x2f,0x5f,0x32,0xbc,0x7d,0xfb,0x16,
+ 0x6c,0x39,0xc8,0x11,0x20,0x75,0x20,0x43,0xaf,0x5d,0xbb,0xc6,0xb0,0x6c,
+ 0xd9,0x32,0x30,0x1f,0x20,0x80,0x18,0x61,0xe1,0xe2,0xec,0xec,0xfc,0x1f,
+ 0x96,0x75,0x61,0x62,0x20,0x8b,0x60,0x2e,0x40,0x07,0xe8,0x61,0x0a,0x52,
+ 0xb7,0x70,0xe1,0x42,0x06,0x3e,0x3e,0x3e,0x50,0x8a,0x61,0x04,0x08,0x20,
+ 0x46,0xe4,0x24,0xd2,0xdf,0xdf,0xff,0xdf,0xcc,0xcc,0x0c,0xc5,0x00,0x50,
+ 0xa6,0x81,0x01,0x51,0x51,0x51,0x3c,0x69,0x88,0x81,0x41,0x55,0x55,0x95,
+ 0x01,0x58,0xde,0x80,0xf3,0x3a,0x40,0x00,0x31,0xd2,0xaa,0x06,0x01,0x08,
+ 0x20,0x9a,0x15,0x9b,0x00,0x01,0x44,0x33,0x83,0x01,0x02,0x88,0x66,0x06,
+ 0x03,0x04,0x18,0x00,0x71,0xa8,0xa9,0xb5,0x42,0xc3,0xb2,0xce,0x00,0x00,
+ 0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_disabled_editbreaklayout_png_len = 1126;
+static const unsigned char small_disabled_editbreaklayout_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x03,0xf1,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xf8,0xff,0xff,0x3f,0x03,0x08,0x33,0x32,
+ 0x32,0xfe,0x37,0x34,0x34,0xfc,0x0f,0xe3,0x93,0x82,0xc5,0xc5,0xc5,0x31,
+ 0xf4,0x01,0x04,0x10,0x13,0x03,0x10,0x30,0x31,0x31,0xfd,0xf7,0xf1,0xf1,
+ 0x61,0xb0,0xb7,0xb7,0x67,0x70,0x70,0x70,0xf8,0xaf,0xac,0xac,0xfc,0x9f,
+ 0x81,0x08,0x00,0xd2,0x27,0x2b,0x2b,0xfb,0xdf,0xc0,0xc0,0x80,0x21,0x23,
+ 0x23,0x03,0x45,0x0f,0x40,0x00,0x36,0xe7,0xd8,0x06,0x60,0x10,0x06,0x80,
+ 0xe0,0xb3,0x01,0xb5,0x47,0x60,0x1d,0xc4,0x06,0xde,0xcf,0x85,0x57,0xa1,
+ 0x80,0x8a,0xc6,0x23,0xb8,0x46,0x51,0x52,0xa7,0x7f,0x9d,0xbe,0xbc,0xa7,
+ 0xbd,0x77,0xc6,0x18,0xac,0xb5,0xc8,0x4c,0xee,0xbd,0xec,0xbd,0x99,0x73,
+ 0x72,0xce,0x29,0x7f,0xa0,0x88,0xd0,0x5a,0x43,0x55,0xa9,0xb5,0x12,0x11,
+ 0xb8,0x3b,0x66,0xf6,0xf5,0x8f,0x00,0x1c,0x8e,0xb1,0x0d,0x00,0x31,0x08,
+ 0x03,0xfd,0xd2,0x83,0x44,0x8a,0x8c,0x90,0x05,0xd2,0x92,0x86,0x3e,0x63,
+ 0xa7,0xa5,0x61,0xa8,0xfc,0x43,0x67,0xc9,0x96,0xef,0xde,0x2c,0xd7,0x5a,
+ 0xa5,0x3f,0xe7,0x04,0x11,0xa1,0xb5,0x06,0x55,0xc5,0x39,0x07,0x66,0x76,
+ 0xdd,0xbd,0xc6,0x63,0x8c,0x9b,0xd0,0xbd,0x37,0x52,0x46,0x44,0xd0,0x7b,
+ 0x4f,0x10,0x98,0xb9,0xf2,0xff,0x75,0x23,0xe2,0xf9,0x04,0xe0,0x80,0x0c,
+ 0x8d,0x00,0x08,0x61,0x20,0x78,0xbc,0xc2,0x50,0x06,0x15,0x50,0x67,0x9a,
+ 0xa0,0x92,0x18,0x3c,0x2a,0x2e,0x86,0x1e,0x32,0x4c,0x14,0x4f,0xd0,0x77,
+ 0x62,0x77,0xbf,0x4b,0x95,0x5a,0x6b,0x10,0x91,0xa0,0x43,0x29,0x05,0x39,
+ 0x67,0xb8,0x7b,0x74,0x47,0xef,0x1d,0xaa,0xfa,0x34,0xd7,0x5a,0xe9,0xa6,
+ 0x42,0xad,0x15,0x66,0xf6,0xbe,0x7b,0x6f,0xcc,0x39,0x31,0xc6,0x00,0x11,
+ 0x81,0x99,0x63,0x3b,0xbf,0x00,0x62,0x04,0xb9,0x14,0x06,0x80,0x2e,0xfc,
+ 0x0f,0xb2,0x00,0x68,0x00,0x58,0x63,0x53,0x53,0x13,0x83,0x90,0x90,0x10,
+ 0xc8,0x45,0x28,0xc1,0xe1,0xec,0xec,0xfc,0x5f,0x41,0x41,0x81,0x41,0x44,
+ 0x44,0x84,0xe1,0xe3,0xc7,0x8f,0x0c,0x2d,0x2d,0x2d,0x60,0xd7,0x83,0x7c,
+ 0x03,0xb4,0x0c,0xac,0x16,0x20,0x80,0xb0,0xc6,0x32,0xd0,0xab,0xff,0x6f,
+ 0xdf,0xbe,0xfd,0xff,0xef,0xdf,0xbf,0x38,0x53,0x09,0x30,0x4e,0xc0,0x6a,
+ 0x80,0xae,0xfd,0x0f,0x8c,0x17,0x0c,0x75,0x00,0x01,0x04,0x67,0x80,0x22,
+ 0xd1,0xd1,0xd1,0x11,0xae,0x00,0x9b,0x62,0x74,0xbc,0x70,0xe1,0x42,0xb0,
+ 0x9a,0xce,0xce,0x4e,0x0c,0xb5,0x00,0x01,0x04,0x0e,0x0a,0x58,0x72,0xb3,
+ 0xb6,0xb6,0x66,0x38,0x7e,0xfc,0x38,0x03,0xd0,0x25,0x0c,0x57,0xaf,0x5e,
+ 0xc5,0x48,0x0d,0xe8,0x00,0x14,0x99,0x39,0x39,0x39,0x0c,0x3b,0x76,0xec,
+ 0x60,0x90,0x91,0x91,0x01,0xc5,0x07,0x5c,0x0f,0x40,0x00,0x81,0x93,0x5b,
+ 0x60,0x60,0x20,0x38,0x96,0x41,0x49,0x0c,0x14,0xb6,0x7f,0xfe,0xfc,0x61,
+ 0xb8,0x75,0xeb,0x16,0x38,0x42,0x1f,0x3c,0x78,0x80,0x35,0xb9,0x49,0x4a,
+ 0x4a,0x32,0xa8,0xab,0xab,0x33,0xc4,0xc6,0xc6,0x32,0xf0,0xf3,0xf3,0x83,
+ 0x93,0xdb,0xce,0x9d,0x3b,0x19,0xb6,0x6e,0xdd,0x0a,0x56,0x0f,0x10,0x80,
+ 0x63,0x32,0xc4,0x01,0x18,0x00,0x61,0x60,0x17,0x48,0x30,0xbc,0x06,0x85,
+ 0xc6,0xf3,0x66,0x2c,0xbf,0xda,0x56,0x5c,0xc5,0xa9,0xcb,0xf5,0x72,0x63,
+ 0x15,0x14,0xcf,0x2d,0x22,0x97,0x5b,0x44,0x60,0x66,0x90,0x99,0xef,0xee,
+ 0x1e,0xcc,0x33,0x90,0xab,0x2a,0x74,0x37,0xcc,0x0c,0xee,0x7e,0xf5,0xa8,
+ 0xea,0xed,0xff,0x2c,0xf4,0xfe,0x7c,0x02,0x08,0x9c,0xdc,0xcc,0xcd,0xcd,
+ 0xc1,0x99,0x03,0x96,0xdc,0x40,0x31,0xfc,0xeb,0xd7,0x2f,0xb0,0x86,0x25,
+ 0x4b,0x96,0xc0,0x93,0xdb,0xe3,0xc7,0x8f,0x19,0x6d,0x6d,0x6d,0x19,0x94,
+ 0x94,0x94,0xc0,0x19,0x09,0xe4,0x00,0x90,0x0f,0x2f,0x5e,0xbc,0xc8,0x70,
+ 0xea,0xd4,0x29,0x86,0xa9,0x53,0xa7,0x82,0x93,0x1d,0x28,0xb9,0x01,0x04,
+ 0x10,0x46,0x72,0xbb,0x74,0xe9,0x12,0x38,0xb9,0x7d,0xfb,0xf6,0x8d,0xa1,
+ 0xb5,0xb5,0x15,0x6b,0x72,0xb3,0xb3,0xb3,0xfb,0x0f,0x0c,0x5f,0x06,0x41,
+ 0x41,0x41,0x86,0xcf,0x9f,0x3f,0x33,0xf4,0xf4,0xf4,0x60,0x24,0x37,0x80,
+ 0x00,0xc2,0x1a,0xdb,0xa0,0x74,0x4a,0x28,0xb9,0xf9,0xf9,0xf9,0xe1,0x4d,
+ 0x6e,0x00,0x01,0x84,0x92,0xdc,0x40,0x05,0x10,0x39,0xc9,0xad,0xae,0xae,
+ 0x0e,0x43,0x2d,0x40,0x00,0xc1,0x93,0x9b,0x97,0x97,0x17,0x28,0xa2,0x18,
+ 0x4e,0x9e,0x3c,0xc9,0x70,0xe7,0xce,0x1d,0x86,0xeb,0xd7,0xaf,0x13,0x4c,
+ 0x6e,0xa0,0xc8,0x4c,0x4f,0x4f,0x07,0xa7,0x06,0x50,0x2a,0x59,0xb5,0x6a,
+ 0x15,0x5c,0x0f,0x40,0x00,0x81,0x93,0x9b,0xbf,0xbf,0x3f,0x43,0x40,0x40,
+ 0x00,0x4a,0x72,0x03,0xa5,0x65,0x50,0x84,0x82,0xca,0x07,0x6c,0xc9,0x0d,
+ 0x58,0x06,0x33,0x00,0x8b,0x57,0x86,0xb0,0xb0,0x30,0x78,0x72,0x03,0x95,
+ 0x13,0xbb,0x77,0xef,0x06,0xab,0x07,0x08,0xc0,0x41,0x19,0x1a,0x01,0x10,
+ 0x84,0x30,0x30,0x37,0xf3,0x8e,0x46,0x30,0x50,0x01,0x9a,0xc6,0xb1,0x38,
+ 0x0a,0xba,0xbf,0xe0,0x22,0xa2,0x32,0x9b,0xfd,0x54,0x15,0x4f,0xf0,0x78,
+ 0x7b,0x82,0x99,0xb8,0x51,0x42,0xee,0x8e,0xaa,0xa2,0xe5,0x6e,0x77,0x6f,
+ 0xf9,0x9d,0x60,0x71,0x8b,0x08,0x64,0xe6,0xf6,0x88,0x18,0xed,0x46,0x2b,
+ 0x8a,0x08,0xcc,0xec,0xce,0xcc,0xf9,0x05,0xe0,0xa1,0x0c,0x8e,0x00,0x80,
+ 0x21,0x20,0x78,0x49,0x23,0xba,0x50,0xad,0x02,0x54,0xa3,0xa6,0xdc,0x7a,
+ 0xc4,0x97,0x31,0x8c,0x5d,0xd7,0x12,0x1c,0x8c,0x43,0x08,0xcb,0xb0,0x49,
+ 0x2e,0xcc,0x77,0x23,0xba,0xfb,0xe3,0xe6,0xa9,0x4e,0x66,0x2a,0x22,0x96,
+ 0x1a,0xea,0xd8,0xd0,0x8d,0x34,0x33,0xaa,0x2a,0x99,0xf9,0xc5,0xed,0x09,
+ 0x20,0x8c,0xe4,0xb6,0x6b,0xd7,0x2e,0x86,0x4f,0x9f,0x3e,0x81,0x8b,0x43,
+ 0x50,0x32,0xc2,0x96,0xdc,0x40,0x99,0x46,0x5a,0x5a,0x1a,0x9e,0xdc,0x40,
+ 0xe9,0x17,0x3d,0xb9,0x01,0x04,0x10,0xd6,0xd8,0x06,0xe6,0x3a,0x82,0xc9,
+ 0x0d,0x18,0x54,0x60,0x35,0xa0,0xd4,0x03,0x74,0x08,0x86,0x3a,0x80,0x00,
+ 0xc2,0x99,0x94,0x80,0x29,0x83,0x60,0x72,0xc3,0xa7,0x06,0x20,0xc0,0x00,
+ 0xb7,0x9e,0x55,0xda,0x49,0xd3,0x2b,0x6a,0x00,0x00,0x00,0x00,0x49,0x45,
+ 0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_disabled_editcopy_png_len = 931;
+static const unsigned char small_disabled_editcopy_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x03,0x2e,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0x64,0x64,0x64,0xfc,0x2f,0x24,0x24,0xc4,
+ 0x00,0x02,0xff,0xff,0xff,0x67,0x80,0x01,0x10,0x5b,0x4a,0x4a,0x8a,0xe1,
+ 0xca,0x95,0x2b,0x8c,0x0c,0x64,0x00,0x80,0x00,0x62,0x14,0x16,0x16,0xfe,
+ 0x7f,0xf6,0xec,0x59,0xb8,0x61,0xc8,0x78,0xf1,0xe2,0xc5,0x0c,0x8f,0x1e,
+ 0x3d,0x62,0x98,0x37,0x6f,0x1e,0xc9,0x86,0x03,0x04,0x10,0x13,0xb2,0x0b,
+ 0xd1,0x31,0x27,0x27,0x27,0x43,0x70,0x70,0x30,0x43,0x74,0x74,0xf4,0x7f,
+ 0x7c,0x86,0x60,0x03,0x00,0x01,0xc4,0x02,0x33,0x64,0xd7,0xae,0x5d,0x0c,
+ 0x7f,0xff,0xfe,0x05,0x63,0x0d,0x0d,0x0d,0x06,0x79,0x79,0x79,0xb0,0x38,
+ 0x3f,0x3f,0x3f,0x83,0xaf,0xaf,0x2f,0xc8,0x82,0xff,0x6b,0xd7,0xae,0x25,
+ 0xda,0xe5,0x00,0x01,0xc4,0x08,0x0c,0x5f,0x70,0x50,0xa0,0xbb,0x16,0x64,
+ 0xc1,0xba,0x75,0xeb,0x18,0xbe,0x7d,0xfb,0xc6,0xf0,0xfd,0xfb,0x77,0x86,
+ 0x77,0xef,0xde,0x31,0xbc,0x7a,0xf5,0x8a,0x61,0xcb,0x96,0x2d,0x44,0x19,
+ 0x0e,0x10,0x40,0x60,0x83,0xcf,0x9c,0x39,0xc3,0xb0,0x63,0xc7,0x0e,0xb8,
+ 0x8b,0x35,0x35,0x35,0xc1,0x2e,0xfe,0xf8,0xf1,0x23,0xc3,0xdb,0xb7,0x6f,
+ 0xc1,0x06,0xbe,0x7f,0xff,0x9e,0xe1,0xc4,0x89,0x13,0x0c,0x6e,0x6e,0x6e,
+ 0x0c,0x49,0x49,0x49,0x04,0x0d,0x07,0x08,0x20,0xb8,0xc1,0x30,0x97,0x82,
+ 0x00,0xcc,0xc5,0x5f,0xbf,0x7e,0x65,0xf8,0xf0,0xe1,0x03,0x83,0x8b,0x8b,
+ 0x0b,0x83,0xa8,0xa8,0x28,0x5c,0x0e,0x19,0x28,0x28,0x28,0x30,0x9c,0x3a,
+ 0x75,0x0a,0xc3,0x22,0x80,0x00,0x62,0x81,0x31,0xb6,0x6f,0xdf,0x0e,0x36,
+ 0xec,0xdf,0xbf,0x7f,0x60,0x0c,0x62,0xff,0xfc,0xf9,0x13,0x6c,0x38,0xc8,
+ 0xd0,0xab,0x57,0xaf,0xc2,0x35,0x21,0x3b,0x62,0xc3,0x86,0x0d,0x0c,0x65,
+ 0x65,0x65,0xff,0xbb,0xba,0xba,0x50,0x0c,0x07,0x08,0x20,0x16,0x98,0x42,
+ 0x0f,0x0f,0x0f,0xb0,0x81,0x20,0xc3,0x40,0x86,0xfe,0xfe,0xfd,0x1b,0x6c,
+ 0x28,0x28,0x6c,0x81,0xc9,0x0d,0xc5,0x50,0x64,0x36,0x0f,0x0f,0x0f,0x83,
+ 0x97,0x97,0x17,0x43,0x5e,0x5e,0xde,0xff,0x49,0x93,0x26,0xc1,0x0d,0x07,
+ 0x08,0x20,0x70,0xaa,0x00,0x19,0x08,0x8c,0x71,0x86,0x5f,0xbf,0x7e,0x81,
+ 0x0d,0x44,0x76,0x31,0x28,0xf2,0x60,0x86,0xc1,0x52,0x0e,0x48,0x5e,0x4d,
+ 0x4d,0x8d,0x41,0x51,0x51,0x11,0xcc,0x16,0x10,0x10,0x00,0x07,0x57,0x6a,
+ 0x6a,0xea,0xff,0xd9,0xb3,0x67,0x83,0x0d,0x07,0x08,0x20,0xb0,0x8b,0x3f,
+ 0x7d,0xfa,0xc4,0x60,0x61,0x61,0xc1,0xf0,0xe5,0xcb,0x17,0xb0,0x61,0x20,
+ 0x0b,0xfe,0xfc,0xf9,0xc3,0xf0,0xe3,0xc7,0x0f,0x86,0xcf,0x9f,0x3f,0xc3,
+ 0x5d,0xe7,0xea,0xea,0x8a,0x12,0x0f,0x20,0x35,0x20,0xfa,0xf8,0xf1,0xe3,
+ 0x60,0x07,0x80,0x72,0x70,0x4c,0x4c,0xcc,0xff,0x25,0x4b,0x96,0x30,0x02,
+ 0x04,0x10,0x8b,0xb8,0xb8,0x38,0xc3,0xdd,0xbb,0x77,0x19,0x98,0x99,0x99,
+ 0xc1,0x06,0x83,0x92,0x16,0xc8,0xd5,0x20,0x0c,0xb2,0x04,0xc4,0x87,0x01,
+ 0x58,0xca,0x01,0xb9,0x12,0x96,0xd6,0x8d,0x8d,0x8d,0x19,0xde,0xbc,0x79,
+ 0xc3,0xf0,0xe2,0xc5,0x0b,0x70,0xb0,0x80,0x1c,0x02,0x54,0xf7,0x1f,0x20,
+ 0x80,0x58,0xae,0x5f,0xbf,0xce,0x18,0x12,0x12,0xf2,0x9f,0x8b,0x8b,0x8b,
+ 0x81,0x89,0x89,0x09,0xee,0x5a,0x58,0x70,0x80,0xd8,0x30,0xe0,0xee,0xee,
+ 0x8e,0x12,0xce,0x20,0x39,0x16,0x16,0x16,0x06,0x76,0x76,0x76,0x06,0x6e,
+ 0x6e,0x6e,0xb0,0x0f,0x59,0x59,0x59,0x19,0x94,0x94,0x94,0x18,0x00,0x02,
+ 0x08,0x1c,0x14,0x6b,0xd6,0xac,0x61,0x04,0x46,0xd0,0x7f,0x7d,0x7d,0x7d,
+ 0xf4,0x54,0x03,0x06,0x9e,0x9e,0x9e,0xf0,0x94,0x03,0x4b,0x35,0x30,0x8b,
+ 0x41,0x86,0x81,0x7c,0x2a,0x28,0x28,0xc8,0xc0,0xc6,0xc6,0x06,0x76,0x18,
+ 0x08,0x00,0x04,0x10,0x3c,0xb9,0x11,0x48,0xf4,0xff,0x41,0xae,0x04,0x59,
+ 0x00,0x4b,0x39,0x20,0xd7,0x82,0x82,0x0b,0x64,0x28,0x28,0xe5,0x80,0x82,
+ 0x03,0x84,0x61,0x06,0x03,0x04,0x10,0x0b,0x1e,0xc3,0xd0,0x4d,0x06,0xa7,
+ 0x1c,0x90,0xa1,0x20,0x03,0x61,0xb9,0x14,0xe4,0x62,0x50,0xb2,0x04,0x95,
+ 0x29,0xa0,0x20,0x01,0xc9,0x81,0x00,0x40,0x00,0x11,0x65,0x30,0xc8,0x50,
+ 0x50,0xf6,0x36,0x37,0x37,0x07,0x47,0x0e,0xc8,0x30,0x58,0x5c,0x80,0x22,
+ 0x17,0x94,0xaa,0x40,0x18,0x64,0x01,0xc8,0x32,0x10,0x00,0x08,0x20,0xa2,
+ 0x0c,0x96,0x95,0x95,0x65,0xb8,0x7d,0xfb,0x36,0x38,0xe5,0x80,0x0c,0x86,
+ 0xa5,0x1c,0x90,0xe1,0xb0,0x94,0x03,0x13,0x03,0x56,0x1c,0x60,0x3d,0x00,
+ 0x01,0xc4,0x88,0x9e,0xf7,0x71,0x81,0xb4,0xb4,0xb4,0xff,0xa0,0xe4,0x04,
+ 0x4a,0x39,0x20,0x17,0xc3,0x52,0x0e,0xc8,0x30,0x18,0x1b,0x64,0x28,0x28,
+ 0x97,0x82,0xe4,0x01,0x02,0x88,0x68,0x83,0x41,0x00,0x94,0x3e,0x41,0x49,
+ 0x09,0x1f,0x90,0x90,0x90,0x60,0xe0,0xe3,0xe3,0x63,0x04,0x08,0x20,0x92,
+ 0x0c,0x26,0x05,0x00,0x04,0x10,0x13,0x61,0x25,0xe4,0x01,0x80,0x00,0x03,
+ 0x00,0xdb,0xac,0x42,0x6a,0x5e,0x37,0x98,0xca,0x00,0x00,0x00,0x00,0x49,
+ 0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_disabled_editgrid_png_len = 735;
+static const unsigned char small_disabled_editgrid_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x02,0x6a,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xfc,0xff,0xff,0x3f,0x03,0x2d,0x00,0x40,
+ 0x00,0x2e,0xe7,0xd0,0x06,0x00,0x18,0x04,0xa2,0x28,0x25,0xb5,0x04,0x0b,
+ 0xfb,0x6f,0x05,0x61,0x14,0x68,0x03,0xa2,0xa2,0xe2,0xbe,0x79,0xe6,0x76,
+ 0x07,0x11,0x8f,0xaa,0x42,0x55,0xcd,0x98,0x19,0xcc,0x6c,0xfd,0x96,0x99,
+ 0x63,0xee,0xfe,0x4c,0x44,0xa0,0xcf,0xb5,0x11,0x11,0x44,0xc4,0xd8,0x15,
+ 0x40,0x60,0x83,0x41,0x1a,0x67,0xce,0x9c,0xc9,0xf0,0xfe,0xfd,0x7b,0xb0,
+ 0x01,0x47,0x8e,0x1c,0x61,0xd8,0xbb,0x77,0xef,0x7f,0x67,0x67,0x67,0x46,
+ 0x90,0xdc,0xd4,0xa9,0x53,0xe1,0x72,0x47,0x8f,0x1e,0x45,0x91,0xeb,0xef,
+ 0xef,0x87,0xcb,0x1d,0x3f,0x7e,0x1c,0x2e,0x07,0x10,0x40,0x60,0x83,0x41,
+ 0x82,0x20,0x49,0x4e,0x4e,0x4e,0x06,0x01,0x01,0x01,0x06,0x11,0x11,0x11,
+ 0x06,0x05,0x05,0x05,0xb0,0x97,0x40,0xae,0x01,0xc9,0x71,0x70,0x70,0x80,
+ 0x5d,0x2b,0x2c,0x2c,0x0c,0x97,0x83,0xe9,0x83,0xc9,0x09,0x0a,0x0a,0xc2,
+ 0xe5,0x00,0x02,0x88,0x09,0xa6,0x00,0x16,0x04,0xcc,0xcc,0xcc,0x60,0x6f,
+ 0xc1,0x00,0x88,0x4d,0x8c,0x1c,0x8c,0x0f,0x03,0x00,0x01,0xa8,0xa0,0x63,
+ 0x1b,0x00,0x80,0x10,0x06,0x62,0xfb,0x0f,0x9a,0xb0,0xc6,0xcb,0x5f,0x20,
+ 0x51,0x9b,0xe2,0xc2,0x2f,0x06,0xe6,0x2b,0x85,0x49,0xf6,0xc0,0xdf,0xcc,
+ 0x57,0xca,0xda,0x1e,0x33,0x5f,0x29,0x9b,0x99,0xb5,0x27,0x80,0x18,0x61,
+ 0xa9,0x02,0x14,0x36,0x30,0x6f,0x80,0x80,0xa2,0xa2,0x22,0x28,0x72,0x18,
+ 0xc9,0x95,0x03,0x08,0x20,0x46,0x5a,0x25,0x37,0x80,0x00,0x42,0x49,0x6e,
+ 0xc8,0xc9,0xe6,0xce,0x9d,0x3b,0x58,0x93,0x1b,0x72,0x92,0x82,0x25,0x37,
+ 0x98,0x1c,0x17,0x17,0x17,0xc3,0xc3,0x87,0x0f,0xc1,0x72,0x00,0x01,0x04,
+ 0x4f,0x6e,0xa0,0x24,0xf5,0xee,0xdd,0x3b,0xbc,0x49,0x0a,0xa4,0x19,0x39,
+ 0x49,0x81,0x0c,0x6d,0x69,0x69,0x81,0xcb,0x9d,0x3e,0x7d,0x1a,0x2e,0x07,
+ 0x10,0x40,0xf0,0xe4,0x06,0x32,0x14,0x96,0x6c,0x90,0x93,0x1b,0xba,0x9c,
+ 0x90,0x90,0x10,0x86,0x1c,0x3b,0x3b,0x3b,0x03,0x0f,0x0f,0x0f,0x38,0xa9,
+ 0xc2,0xe4,0x00,0x02,0x08,0x9c,0xdc,0x88,0x4d,0x52,0x8c,0x8c,0x8c,0x28,
+ 0x72,0x7f,0xfe,0xfc,0x01,0xcb,0x81,0x0c,0x45,0x97,0x03,0x08,0x20,0x78,
+ 0x72,0x03,0x79,0x1f,0x96,0xdc,0x90,0x93,0x14,0x48,0x13,0xc8,0xfb,0x20,
+ 0x97,0x62,0x93,0x03,0x79,0x1f,0xe4,0x52,0x90,0xdc,0xcb,0x97,0x2f,0xe1,
+ 0x72,0x00,0x01,0x44,0xb3,0xe4,0x06,0x10,0x40,0x34,0x4b,0x6e,0x00,0x01,
+ 0x84,0x51,0xba,0x81,0xbc,0x04,0xf2,0xe2,0xbd,0x7b,0xf7,0x30,0x92,0x14,
+ 0x28,0x4c,0x41,0x72,0x0f,0x1e,0x3c,0x80,0xcb,0x89,0x8b,0x8b,0xc3,0xe5,
+ 0x40,0xc9,0xed,0xf1,0xe3,0xc7,0x60,0x39,0x80,0x00,0x02,0x1b,0x0c,0xd2,
+ 0xd8,0xd7,0xd7,0x07,0x2f,0xa5,0x8e,0x1d,0x3b,0x86,0x92,0xa4,0x9a,0x9b,
+ 0x9b,0xe1,0x72,0xa7,0x4e,0x9d,0x82,0xcb,0x81,0x0c,0x2d,0x2b,0x2b,0x63,
+ 0xf8,0xf8,0xf1,0x23,0x58,0xee,0xc2,0x85,0x0b,0x70,0x39,0x80,0x00,0x42,
+ 0x29,0xdd,0x40,0x49,0x8a,0x8f,0x8f,0x0f,0xa3,0x04,0x83,0x25,0x37,0x6e,
+ 0x6e,0x6e,0x94,0x12,0x0c,0x24,0x07,0x32,0x94,0x8d,0x8d,0x0d,0x2c,0x07,
+ 0x4a,0x04,0x30,0x39,0x80,0x00,0x42,0x49,0x6e,0x20,0x43,0x41,0xc9,0x06,
+ 0xe4,0x2d,0x18,0x80,0x25,0x29,0x90,0x46,0x5c,0xc9,0x0d,0x24,0x07,0x0c,
+ 0x16,0x30,0x1b,0x06,0x00,0x02,0x08,0xec,0x62,0x90,0x81,0x20,0xef,0xc3,
+ 0x92,0x14,0x72,0x29,0x05,0xd2,0x04,0x4a,0x52,0xb0,0x12,0x0c,0x39,0x49,
+ 0x81,0xc2,0x14,0xe4,0x7d,0x90,0x4b,0x41,0x86,0xbe,0x7e,0xfd,0x1a,0x2e,
+ 0x07,0x10,0x40,0x34,0x4b,0x6e,0x00,0x01,0x44,0xb3,0xe4,0x06,0x10,0x60,
+ 0x00,0xd8,0x8f,0xea,0x4f,0x23,0xea,0x8f,0x33,0x00,0x00,0x00,0x00,0x49,
+ 0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_disabled_edithlayout_png_len = 601;
+static const unsigned char small_disabled_edithlayout_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x01,0xe4,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xfc,0xff,0xff,0x3f,0x03,0x2d,0x00,0x40,
+ 0x00,0x31,0xd1,0xc4,0x54,0x20,0x00,0x08,0x20,0x9a,0x19,0x0c,0x10,0x40,
+ 0x34,0x33,0x18,0x20,0x80,0x68,0x66,0x30,0x40,0x00,0xd1,0xcc,0x60,0x80,
+ 0x00,0xa2,0x99,0xc1,0x00,0x01,0x98,0xa4,0x63,0x14,0x80,0x81,0x10,0x0a,
+ 0xa2,0x3f,0x4b,0xba,0x05,0x2d,0xc5,0xfb,0xdf,0x4a,0xac,0x3c,0x87,0xba,
+ 0x21,0x16,0x21,0xf5,0x83,0xa9,0xe6,0x9e,0xfa,0x5a,0x47,0x55,0xf1,0xae,
+ 0x57,0x55,0x60,0x66,0x98,0xd9,0xf5,0xb7,0xee,0x1e,0x23,0x22,0xb8,0xfb,
+ 0x67,0x22,0x32,0x96,0x99,0xd8,0x7b,0x23,0x22,0xc6,0x1e,0x01,0x78,0x98,
+ 0x63,0x23,0x00,0x60,0x08,0x80,0xa2,0xb2,0x85,0x7d,0xec,0x65,0x0b,0x8d,
+ 0x5d,0x54,0xb4,0x46,0x71,0x46,0x48,0x8e,0x22,0xf5,0xbb,0xff,0x77,0x3c,
+ 0xa1,0xaa,0x42,0x77,0xef,0xdc,0xdd,0xc1,0xcc,0x2e,0x11,0x9d,0x31,0x11,
+ 0x81,0xaa,0xda,0x41,0x44,0x7c,0x43,0x44,0x60,0xe6,0xb5,0x19,0x67,0xe6,
+ 0xb7,0x27,0x00,0x0f,0x64,0x74,0x03,0x00,0x10,0xc1,0xd0,0xce,0x80,0x01,
+ 0xec,0xbf,0x95,0x98,0x01,0xbf,0x77,0x24,0x7c,0xbf,0xa4,0xaf,0xed,0x5c,
+ 0xd1,0x61,0xdf,0x84,0xaa,0x02,0x33,0x43,0x44,0xa0,0xaa,0x58,0x66,0x66,
+ 0xc8,0xcc,0x59,0x42,0x44,0xc7,0x5a,0xe4,0xee,0x88,0x88,0x69,0xdb,0x7c,
+ 0xd9,0x13,0x40,0x2c,0x30,0xcd,0xac,0xac,0xac,0x60,0x43,0x41,0x18,0xa4,
+ 0x08,0x19,0x30,0x33,0x33,0xc3,0x0d,0x65,0x67,0x67,0xc7,0x08,0x4f,0x1e,
+ 0x1e,0x1e,0xb0,0x3e,0x36,0x36,0x36,0xb8,0x18,0x40,0x00,0xa1,0x44,0x1e,
+ 0xc8,0x02,0x10,0x06,0xb9,0x04,0x19,0x80,0xf8,0x20,0x71,0x90,0x77,0x41,
+ 0x18,0x19,0x80,0xc2,0x1d,0x24,0x8f,0xae,0x07,0x20,0x80,0xe0,0x06,0x83,
+ 0x5c,0x09,0x72,0x11,0xc8,0x75,0xc8,0xe5,0x07,0x88,0xcd,0xc9,0xc9,0x09,
+ 0x76,0x15,0x23,0x23,0x23,0xd8,0x20,0x64,0x39,0x90,0x0f,0x40,0x7a,0x39,
+ 0x38,0x38,0x50,0x0c,0x06,0x08,0x20,0x16,0x98,0x8b,0x7e,0xfd,0xfa,0x05,
+ 0xc6,0x20,0x17,0x7d,0xfa,0xf4,0x09,0xc5,0x45,0xa0,0xb0,0x07,0x61,0x50,
+ 0x58,0x7e,0xfc,0xf8,0x11,0x2e,0xf7,0xfb,0xf7,0x6f,0x86,0x9f,0x3f,0x7f,
+ 0x82,0xd5,0xbc,0x7a,0xf5,0x0a,0x1c,0x0f,0x30,0x00,0x10,0x40,0x60,0x83,
+ 0x41,0x49,0x08,0x94,0x12,0x40,0xe1,0x04,0x52,0xf4,0xf4,0xe9,0x53,0xb8,
+ 0x02,0x90,0x6b,0x8e,0x1d,0x3b,0x06,0x0e,0x63,0x90,0x41,0x2f,0x5e,0xbc,
+ 0x80,0xcb,0x81,0x7c,0x72,0xf9,0xf2,0x65,0x06,0x01,0x01,0x01,0xb0,0xe3,
+ 0xde,0xbc,0x79,0x03,0x97,0x03,0x08,0x20,0x46,0x98,0xb7,0x41,0xc9,0x04,
+ 0x16,0xa3,0x20,0xa0,0xa8,0xa8,0x08,0x4a,0xa7,0x8c,0xe4,0xca,0x01,0x04,
+ 0x10,0x23,0xad,0xca,0x63,0x80,0x00,0xa2,0x59,0x96,0x06,0x08,0x20,0x9a,
+ 0x19,0x0c,0x10,0x40,0x34,0x33,0x18,0x20,0x80,0x68,0x66,0x30,0x40,0x00,
+ 0xd1,0xcc,0x60,0x80,0x00,0x03,0x00,0x1a,0x11,0xec,0xf2,0x8a,0xf2,0x73,
+ 0x35,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_disabled_edithlayoutsplit_png_len = 754;
+static const unsigned char small_disabled_edithlayoutsplit_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x02,0x7d,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xfc,0xff,0xff,0x3f,0x03,0x2d,0x00,0x40,
+ 0x00,0xb1,0xe0,0x93,0x64,0x62,0x62,0xfa,0x2f,0x29,0x29,0xc9,0x00,0xb2,
+ 0x1c,0xd9,0x01,0xff,0xfe,0xfd,0x63,0xe0,0xe3,0xe3,0x63,0xb8,0x7d,0xfb,
+ 0x36,0x23,0x2e,0xbd,0x00,0x01,0x84,0xd7,0x60,0x90,0xa1,0xb3,0x66,0xcd,
+ 0x62,0x78,0xf4,0xe8,0x11,0x03,0x2b,0x2b,0x2b,0x58,0x8c,0x9b,0x9b,0x9b,
+ 0xe1,0xd7,0xaf,0x5f,0x0c,0x87,0x0f,0x1f,0x66,0xd8,0xbb,0x77,0xef,0x7f,
+ 0x67,0x67,0x67,0xac,0x86,0x03,0x04,0x10,0x5e,0x83,0x41,0xae,0x7c,0xff,
+ 0xfe,0x3d,0x03,0x0b,0x0b,0x0b,0x83,0xb0,0xb0,0x30,0x98,0x2f,0x24,0x24,
+ 0x04,0x36,0x18,0xc4,0x57,0x50,0x50,0xc0,0xa9,0x17,0x20,0x80,0xf0,0x1a,
+ 0xfc,0xf7,0xef,0x5f,0xb0,0x61,0xd2,0xd2,0xd2,0x0c,0xc6,0xc6,0xc6,0x0c,
+ 0xf7,0xef,0xdf,0x67,0x60,0x66,0x66,0x66,0xf8,0xf3,0xe7,0x0f,0x58,0x0e,
+ 0x1f,0x00,0x08,0x20,0x26,0x7c,0x92,0xa0,0x70,0x04,0x79,0xd9,0xde,0xde,
+ 0x1e,0x1c,0xae,0x1c,0x1c,0x1c,0x0c,0xdb,0xb7,0x6f,0x67,0xd8,0xb1,0x63,
+ 0x07,0xc3,0xd3,0xa7,0x4f,0xf1,0x1a,0x0c,0x10,0x40,0x8c,0x84,0x52,0x05,
+ 0x30,0x28,0xfe,0x7f,0xff,0xfe,0x1d,0x1c,0x24,0x77,0xef,0xde,0x65,0xf8,
+ 0xf8,0xf1,0x23,0x83,0x95,0x95,0x15,0x58,0x4e,0x51,0x51,0x11,0x14,0xc1,
+ 0x58,0xc3,0x18,0x20,0x80,0xf0,0x1a,0xfc,0xf8,0xf1,0xe3,0xff,0x3f,0x7e,
+ 0xfc,0x60,0xf8,0xf0,0xe1,0x03,0xc3,0x83,0x07,0x0f,0x18,0x9e,0x3c,0x79,
+ 0xc2,0x00,0xb2,0x84,0x9f,0x9f,0x9f,0x21,0x3b,0x3b,0x1b,0x67,0x8a,0x00,
+ 0x01,0x80,0x00,0x22,0xe8,0xe2,0xa0,0xa0,0x20,0xb0,0x82,0xf8,0xf8,0x78,
+ 0x86,0x85,0x0b,0x17,0xa2,0xc8,0xad,0x5b,0xb7,0x0e,0xa7,0xe1,0x00,0x01,
+ 0x04,0x4f,0xa3,0x84,0xf0,0xc5,0x8b,0x17,0xff,0x07,0x06,0x06,0xfe,0x27,
+ 0x56,0x3d,0x40,0x00,0x1a,0xe9,0xd8,0x06,0x00,0x18,0x84,0x81,0xa0,0x2b,
+ 0x2a,0xe6,0x62,0x5e,0x96,0xa3,0x40,0x14,0x04,0x5b,0x0a,0x1b,0xe0,0x3f,
+ 0xa9,0xb8,0xda,0x3b,0x33,0xe8,0x6e,0xd5,0x66,0xf9,0xdb,0x4e,0x76,0xcd,
+ 0x0c,0x99,0x89,0xf3,0x0a,0x77,0x97,0x5d,0x46,0xfd,0xae,0x79,0x0c,0xcb,
+ 0x89,0xaa,0x0a,0x11,0xa1,0x2f,0x9e,0x00,0x82,0x07,0x05,0xcc,0xcb,0xb8,
+ 0x40,0x5d,0x5d,0x1d,0x43,0x53,0x53,0x13,0xde,0x60,0x43,0x0e,0x22,0x80,
+ 0x00,0x22,0x3a,0x28,0x40,0xbe,0x22,0x25,0x28,0x00,0x02,0x08,0x6f,0xe4,
+ 0xbd,0x7a,0xf5,0xea,0x3f,0xc8,0xcb,0x20,0xaf,0x7e,0xf9,0xf2,0x85,0xe1,
+ 0xe5,0xcb,0x97,0x0c,0xcf,0x9e,0x3d,0x63,0xf8,0xf6,0xed,0x1b,0x43,0x54,
+ 0x54,0x14,0xde,0x54,0x01,0x10,0x40,0x04,0x53,0x05,0x30,0xed,0xfe,0x07,
+ 0x85,0xfb,0xf3,0xe7,0xcf,0x19,0xae,0x5f,0xbf,0x0e,0xa6,0x2f,0x5f,0xbe,
+ 0x8c,0xf0,0x32,0x0e,0x00,0x10,0x40,0x04,0x4b,0x37,0x71,0x71,0x71,0x86,
+ 0x99,0x33,0x67,0x82,0x33,0xc7,0xbd,0x7b,0xf7,0xc0,0x85,0x12,0xc8,0x31,
+ 0x62,0x62,0x62,0x78,0x1d,0x04,0x10,0x40,0x78,0xb3,0x34,0xc8,0xd0,0xfa,
+ 0xfa,0x7a,0x86,0x93,0x27,0x4f,0x32,0x80,0x32,0xca,0xae,0x5d,0xbb,0x18,
+ 0x94,0x94,0x94,0x18,0x8a,0x8a,0x8a,0x18,0xf4,0xf5,0xf5,0xc1,0x29,0x04,
+ 0x97,0x5e,0x80,0x00,0xc2,0xeb,0x62,0x50,0xd8,0xbe,0x7d,0xfb,0x16,0x91,
+ 0x36,0x81,0xa5,0x5c,0x4a,0x4a,0x0a,0x38,0x49,0x0a,0x08,0x08,0xe0,0x2d,
+ 0xdd,0x00,0x02,0x08,0xaf,0xc1,0xa0,0x52,0x0c,0x84,0x41,0x45,0x25,0xa8,
+ 0x98,0x04,0xb9,0x14,0x54,0x10,0x01,0x23,0x15,0x6c,0x29,0x3e,0x00,0x10,
+ 0x40,0x78,0x0d,0x06,0x15,0xea,0x67,0xcf,0x9e,0x05,0x97,0x0d,0xa0,0x8c,
+ 0x02,0x03,0xa0,0x54,0xf1,0xe6,0xcd,0x1b,0xbc,0x06,0x03,0x04,0x10,0xc1,
+ 0x54,0x01,0x0a,0x47,0x5c,0x5e,0xc6,0x57,0xba,0x01,0x04,0x10,0x41,0x83,
+ 0xc9,0x05,0x00,0x01,0x06,0x00,0x15,0xce,0x9c,0x41,0x6d,0xbf,0xbf,0x0b,
+ 0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_disabled_editpaste_png_len = 901;
+static const unsigned char small_disabled_editpaste_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x03,0x10,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xfc,0xff,0xff,0x3f,0x03,0x2d,0x00,0x40,
+ 0x00,0x31,0x11,0x52,0xc0,0xc8,0xc8,0xf8,0x9f,0x8f,0x8f,0xef,0xbf,0x92,
+ 0x92,0x12,0x49,0x2e,0x00,0x08,0x20,0x46,0x7c,0x2e,0x06,0x19,0xea,0xe5,
+ 0xe5,0xc5,0x90,0x92,0x92,0xc2,0xf0,0xf8,0xf1,0x63,0x86,0xfd,0xfb,0xf7,
+ 0x33,0xac,0x5f,0xbf,0x9e,0x91,0x18,0x83,0x01,0x02,0x08,0x6c,0x30,0x13,
+ 0x13,0xd3,0x7f,0x7e,0x7e,0x7e,0x06,0x74,0x4b,0x6c,0x6c,0x6c,0x18,0x12,
+ 0x12,0x12,0x18,0xbe,0x7c,0xf9,0x02,0x52,0xc3,0xf0,0xfa,0xf5,0x6b,0x86,
+ 0xcd,0x9b,0x37,0x33,0x5c,0xb8,0x70,0x01,0x45,0x9d,0x90,0x90,0x10,0xc3,
+ 0xbd,0x7b,0xf7,0x50,0x2c,0x04,0x08,0x20,0x46,0x90,0xab,0x1c,0x1c,0x1c,
+ 0x18,0x42,0x43,0x43,0x19,0x7e,0xff,0xfe,0x0d,0x16,0xbc,0x73,0xe7,0x0e,
+ 0x83,0xaf,0xaf,0x2f,0xc3,0xa7,0x4f,0x9f,0xc0,0x2e,0x05,0x6a,0x62,0x30,
+ 0x34,0x34,0x64,0x60,0x63,0x63,0x03,0x5b,0x72,0xf5,0xea,0x55,0x06,0x15,
+ 0x15,0x15,0xb0,0xda,0xbf,0x7f,0xff,0x32,0x3c,0x7b,0xf6,0x0c,0xac,0x07,
+ 0xd9,0x37,0x00,0x01,0xc4,0x04,0x72,0x29,0xc8,0x50,0x90,0x21,0x9f,0x3f,
+ 0x7f,0x06,0x2b,0x70,0x73,0x73,0x63,0xf8,0xfa,0xf5,0x2b,0xc3,0xab,0x57,
+ 0xaf,0xc0,0x86,0x82,0xc0,0xf9,0xf3,0xe7,0xe1,0x06,0xc9,0xcb,0xcb,0x83,
+ 0xd5,0x81,0xd4,0x7f,0xfb,0xf6,0x8d,0x81,0x93,0x93,0x93,0x41,0x58,0x58,
+ 0x98,0xa1,0xb1,0xb1,0x11,0xee,0x65,0x80,0x00,0x62,0x01,0x79,0x1f,0xe4,
+ 0xd2,0x3f,0x7f,0xfe,0xc0,0xbd,0xf1,0xfc,0xf9,0x73,0xb0,0xcb,0x7e,0xfc,
+ 0xf8,0xc1,0x20,0x27,0x27,0xc7,0xc0,0xcd,0xcd,0x0d,0x0e,0x8a,0x37,0x6f,
+ 0xde,0x80,0x0d,0xc2,0x06,0xb8,0xb8,0xb8,0x18,0x6c,0x6d,0x6d,0xe1,0x7c,
+ 0x80,0x00,0x62,0x41,0x57,0x20,0x2e,0x2e,0xce,0x70,0xf9,0xf2,0x65,0x3c,
+ 0xd1,0x82,0x50,0x87,0x0f,0x00,0x04,0x10,0x86,0xc1,0xc4,0x68,0x22,0x06,
+ 0x00,0x04,0x10,0xc1,0x74,0x4c,0x2e,0x00,0x08,0x20,0xac,0x2e,0x46,0x06,
+ 0xb5,0xb5,0xb5,0x0c,0xa2,0xa2,0xa2,0x70,0x3e,0x2c,0x49,0x82,0x68,0x18,
+ 0x06,0xf9,0xd0,0xc5,0xc5,0x05,0x45,0x1f,0x40,0x00,0xe1,0x35,0x18,0x64,
+ 0x68,0x6c,0x6c,0x2c,0x43,0x67,0x67,0x27,0xd8,0x80,0x7f,0xff,0xfe,0xc1,
+ 0x69,0x18,0xde,0xb5,0x6b,0x17,0x38,0xf5,0x48,0x4b,0x4b,0xa3,0xe8,0x05,
+ 0x08,0x20,0xbc,0x06,0x83,0x5c,0x0a,0x32,0xf4,0xf4,0xe9,0xd3,0x0c,0x3f,
+ 0x7f,0xfe,0x04,0xa7,0x1e,0x58,0x0a,0x52,0x50,0x50,0x00,0xa7,0x18,0x10,
+ 0x1b,0xe4,0xda,0xc3,0x87,0x0f,0x33,0x28,0x2a,0x2a,0xc2,0xf5,0x02,0x04,
+ 0x10,0xc1,0xa0,0x00,0xb9,0xd0,0xc8,0xc8,0x08,0xc5,0x95,0xb0,0x20,0x00,
+ 0xa5,0x69,0x10,0xff,0xd7,0xaf,0x5f,0x60,0x17,0xcf,0x9e,0x3d,0x9b,0xc1,
+ 0xc9,0xc9,0x09,0xac,0x0f,0x20,0x80,0x08,0x1a,0x0c,0xd2,0x78,0xf0,0xe0,
+ 0x41,0xb0,0x8b,0x41,0x06,0x80,0x5c,0x08,0x32,0x50,0x4d,0x4d,0x0d,0xec,
+ 0x6a,0x90,0xfc,0xb1,0x63,0xc7,0xc0,0x19,0x0a,0x94,0xd9,0x02,0x03,0x03,
+ 0xff,0x83,0x72,0x20,0x40,0x00,0xe1,0x35,0x18,0x16,0x9e,0xd6,0xd6,0xd6,
+ 0x70,0xd7,0x21,0x87,0x35,0xc8,0x12,0x2b,0x2b,0x2b,0x86,0x0f,0x1f,0x3e,
+ 0x30,0xbc,0x7f,0xff,0x9e,0xe1,0xe3,0xc7,0x8f,0x0c,0x87,0x0e,0x1d,0x62,
+ 0x58,0xb1,0x62,0xc5,0x7f,0x80,0x00,0x02,0x1b,0x0c,0xd2,0x84,0xcb,0x60,
+ 0x90,0xdc,0xd6,0xad,0x5b,0xc1,0xb9,0x10,0x64,0x10,0x2c,0x38,0x60,0xbe,
+ 0x01,0xf9,0x04,0x94,0x1b,0x41,0x59,0x1a,0x94,0xfb,0x98,0x99,0x99,0x19,
+ 0xb4,0xb4,0xb4,0x18,0x00,0x02,0x88,0x05,0x54,0x32,0x81,0x0a,0x11,0x50,
+ 0x7e,0xc7,0x66,0x30,0xc8,0x30,0x50,0x56,0xfd,0xfe,0xfd,0x3b,0xd8,0x70,
+ 0x90,0x45,0x30,0x87,0x80,0x68,0x90,0x38,0xc8,0xa5,0x20,0x57,0x83,0xca,
+ 0x1b,0x90,0x1a,0x10,0x00,0x08,0x20,0x16,0x50,0x71,0x07,0x0a,0x17,0x98,
+ 0x8d,0xe8,0x06,0x83,0x34,0x6d,0xd8,0xb0,0x01,0xac,0x01,0x94,0x22,0x40,
+ 0x86,0xc1,0xd2,0x32,0xc8,0xc5,0x20,0x31,0x90,0xe1,0x02,0x02,0x02,0x0c,
+ 0x3c,0x3c,0x3c,0xf0,0x32,0x07,0x20,0x80,0xc0,0x41,0x01,0x0a,0x6c,0x50,
+ 0xc9,0x84,0x5c,0x88,0x80,0xc0,0xbe,0x7d,0xfb,0x18,0xee,0xde,0xbd,0xcb,
+ 0x60,0x60,0x60,0x00,0x2e,0x94,0x40,0x06,0x80,0x0c,0x82,0x05,0x05,0xc8,
+ 0x12,0x50,0x50,0x80,0x2c,0x05,0xc9,0x81,0x22,0x17,0x06,0x00,0x02,0x08,
+ 0x6f,0x0d,0x02,0x02,0x51,0x51,0x51,0xff,0x41,0x2e,0x01,0x96,0xdb,0x60,
+ 0x43,0x60,0x91,0x88,0x1c,0x07,0xb0,0xb0,0x07,0xa9,0x59,0xb2,0x64,0x09,
+ 0x58,0x1d,0x40,0x00,0x11,0x34,0x18,0x04,0x40,0xb1,0x0c,0x8a,0x10,0x62,
+ 0x80,0xac,0xac,0x2c,0x83,0xa0,0xa0,0x20,0x23,0x40,0x80,0x01,0x00,0x44,
+ 0x54,0xe5,0xc1,0x18,0x2f,0x14,0x22,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,
+ 0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_disabled_editvlayout_png_len = 617;
+static const unsigned char small_disabled_editvlayout_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x01,0xf4,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xfc,0xff,0xff,0x3f,0x03,0x2d,0x00,0x40,
+ 0x00,0xb1,0xe0,0x93,0x64,0x62,0x62,0xfa,0x2f,0x29,0x29,0xc9,0x00,0xb2,
+ 0x1c,0xd9,0x01,0xff,0xfe,0xfd,0x63,0xe0,0xe3,0xe3,0x63,0xb8,0x7d,0xfb,
+ 0x36,0x23,0x2e,0xbd,0x00,0x01,0x84,0xd7,0x60,0x90,0xa1,0xb3,0x66,0xcd,
+ 0x62,0x78,0xf4,0xe8,0x11,0x03,0x2b,0x2b,0x2b,0x58,0x8c,0x9b,0x9b,0x9b,
+ 0xe1,0xd7,0xaf,0x5f,0x0c,0x87,0x0f,0x1f,0x66,0xd8,0xbb,0x77,0xef,0x7f,
+ 0x67,0x67,0x67,0xac,0x86,0x03,0x04,0x10,0x5e,0x83,0x41,0xae,0x7c,0xff,
+ 0xfe,0x3d,0x03,0x0b,0x0b,0x0b,0x83,0xb0,0xb0,0x30,0x98,0x2f,0x24,0x24,
+ 0x04,0x36,0x18,0xc4,0x57,0x50,0x50,0xc0,0xa9,0x17,0x20,0x80,0xf0,0x1a,
+ 0xfc,0xf7,0xef,0x5f,0xb0,0x61,0xd2,0xd2,0xd2,0x70,0x83,0x99,0x99,0x99,
+ 0x19,0xfe,0xfc,0xf9,0x03,0x96,0xc3,0x07,0x00,0x02,0x08,0xaf,0xc1,0xfc,
+ 0xfc,0xfc,0x60,0x2f,0x8b,0x88,0x88,0x80,0x83,0x00,0x14,0xb6,0x20,0xc3,
+ 0x3f,0x7d,0xfa,0xc4,0xf0,0xf4,0xe9,0x53,0xbc,0x06,0x03,0x04,0x10,0x23,
+ 0xa1,0x54,0x01,0x0a,0x47,0x5c,0x5e,0x56,0x54,0x54,0x04,0x45,0x30,0xd6,
+ 0x30,0x06,0x08,0x20,0x82,0x06,0x93,0x0b,0x00,0x02,0x88,0xe8,0xe4,0x06,
+ 0x03,0x20,0x36,0x28,0x7c,0x41,0x41,0x73,0xff,0xfe,0x7d,0x9c,0xc9,0x0d,
+ 0x20,0x80,0x08,0x26,0xb7,0xa9,0x53,0xa7,0x32,0x3c,0x7c,0xf8,0x10,0x1c,
+ 0x69,0xa0,0x30,0xe6,0xe4,0xe4,0x64,0xf8,0xfe,0xfd,0x3b,0xc3,0xb1,0x63,
+ 0xc7,0xf0,0x26,0x37,0x80,0x00,0xc2,0x6b,0x30,0xc8,0xa0,0xb7,0x6f,0xdf,
+ 0x82,0x5c,0x0e,0x8e,0x48,0x90,0x6b,0x79,0x78,0x78,0xc0,0x06,0x83,0xf8,
+ 0xf8,0x92,0x1b,0x40,0x00,0x11,0x4c,0x6e,0x20,0xc3,0xc5,0xc5,0xc5,0xc1,
+ 0xe9,0x17,0x94,0xcc,0x18,0x19,0x19,0x19,0xbe,0x7e,0xfd,0xca,0xf0,0xfb,
+ 0xf7,0x6f,0x7c,0x5a,0x19,0x00,0x02,0x08,0xaf,0xc1,0xa0,0x6c,0x7b,0xe4,
+ 0xc8,0x11,0xb0,0xa1,0xec,0xec,0xec,0xf0,0xf4,0xfb,0xf1,0xe3,0x47,0x86,
+ 0x17,0x2f,0x5e,0xe0,0x35,0x18,0x20,0x80,0x68,0x96,0xdc,0x00,0x02,0x88,
+ 0x66,0xc9,0x0d,0x20,0x80,0x08,0x26,0x37,0x09,0x09,0x09,0x70,0x38,0xc3,
+ 0x00,0xc8,0x21,0xa0,0xf0,0x05,0xa5,0x0e,0x60,0xee,0xc3,0x99,0xdc,0x00,
+ 0x02,0x08,0xaf,0xc1,0xa0,0x48,0xab,0xab,0xab,0x63,0x78,0xfc,0xf8,0x31,
+ 0x98,0x0f,0x0a,0x5f,0x50,0x58,0xff,0xfc,0xf9,0x93,0xe1,0xf2,0xe5,0xcb,
+ 0x78,0x93,0x1b,0x40,0x00,0x11,0x95,0xdc,0x60,0xc9,0x0c,0xc4,0x07,0x65,
+ 0x0c,0x90,0x05,0x02,0x02,0x02,0x78,0x93,0x1b,0x40,0x00,0xe1,0x35,0x18,
+ 0x94,0x0a,0x40,0x18,0x94,0x2a,0x40,0xa5,0x1b,0xc8,0x60,0x0e,0x0e,0x0e,
+ 0x86,0x57,0xaf,0x5e,0xa1,0x04,0x0f,0x36,0x00,0x10,0x40,0x78,0x0d,0x06,
+ 0xb9,0xee,0xec,0xd9,0xb3,0xe0,0xcc,0xc0,0xc6,0xc6,0x06,0x17,0xff,0xf6,
+ 0xed,0x1b,0xc3,0x9b,0x37,0x6f,0xf0,0x1a,0x0c,0x10,0x40,0x34,0x4b,0x6e,
+ 0x00,0x01,0x44,0xb3,0xe4,0x06,0x10,0x60,0x00,0xc0,0x62,0xf3,0xb9,0xf2,
+ 0x11,0x7d,0x86,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,
+ 0x82
+};
+
+static const unsigned int small_disabled_editvlayoutsplit_png_len = 752;
+static const unsigned char small_disabled_editvlayoutsplit_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x02,0x7b,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xfc,0xff,0xff,0x3f,0x03,0x2d,0x00,0x40,
+ 0x00,0x31,0x11,0xab,0xf0,0xfe,0xfd,0xfb,0x24,0xb9,0x00,0x20,0x80,0x88,
+ 0x36,0xf8,0xf7,0xef,0xdf,0x0c,0x41,0x41,0x41,0x44,0x1b,0x0e,0x10,0x40,
+ 0x44,0x1b,0xfc,0xf3,0xe7,0x4f,0x62,0x95,0x82,0x01,0x40,0x00,0x11,0x6d,
+ 0xf0,0xdf,0xbf,0x7f,0x49,0x32,0x18,0x20,0x80,0x88,0x36,0x98,0x99,0x99,
+ 0x99,0x24,0x83,0x01,0x02,0x88,0x68,0x83,0x99,0x98,0x88,0x56,0x0a,0x06,
+ 0x00,0x01,0x78,0xa4,0x63,0x14,0x00,0x62,0x10,0x88,0xa2,0x0a,0x6b,0x25,
+ 0xa4,0x8c,0xa4,0xf0,0xfe,0x87,0xb2,0xd3,0xce,0x33,0x84,0x18,0x5c,0x96,
+ 0xed,0xff,0x2b,0x06,0xe6,0xf9,0x50,0xad,0xb5,0xa0,0xaf,0xd7,0x93,0xc7,
+ 0x18,0x60,0x66,0x18,0x11,0xa5,0xaa,0xd8,0x0d,0x11,0xfd,0x28,0x33,0x6b,
+ 0xce,0x89,0xed,0x44,0x04,0xce,0x39,0xb0,0xf7,0x06,0x66,0x06,0x77,0x7f,
+ 0xfb,0x2b,0x80,0xc0,0x06,0x83,0x0c,0x9d,0x35,0x6b,0x16,0xc3,0xfb,0xf7,
+ 0xef,0xc1,0x86,0x1f,0x3e,0x7c,0x18,0xc4,0xfe,0xff,0xe3,0xc7,0x0f,0x70,
+ 0x4a,0x58,0xb7,0x6e,0x1d,0x23,0x1b,0x1b,0x1b,0xdc,0x60,0x90,0x25,0x77,
+ 0xef,0xde,0x05,0x1b,0x5a,0x5f,0x5f,0xcf,0xf0,0xf6,0xed,0x5b,0xb0,0xc1,
+ 0x67,0xcf,0x9e,0x65,0xd8,0xbb,0x77,0xef,0x7f,0x67,0x67,0x67,0x46,0x80,
+ 0x00,0x3c,0x8f,0xa1,0x11,0x00,0x30,0x08,0x03,0xb3,0x01,0x82,0x05,0xd8,
+ 0x18,0xcd,0x16,0x8c,0x86,0xe1,0xb0,0x85,0x88,0xba,0x17,0xb9,0x24,0x4f,
+ 0xbf,0x2b,0xdb,0x25,0xcc,0x0c,0x54,0x15,0xee,0x4e,0xae,0xaa,0x5f,0x96,
+ 0x99,0x9f,0xef,0xe1,0x99,0x45,0x04,0xd6,0x0a,0xdd,0xcd,0xb7,0x22,0x02,
+ 0x33,0x63,0xe6,0x09,0x20,0x16,0x98,0xc1,0x20,0x57,0x80,0x0c,0x35,0x36,
+ 0x36,0x66,0xf8,0xf4,0xe9,0x13,0xd8,0xf5,0x0f,0x1e,0x3c,0x60,0x88,0x8f,
+ 0x8f,0x67,0xb8,0x74,0xe9,0x12,0xc8,0x15,0x0c,0x0e,0x0e,0x0e,0x20,0xb1,
+ 0xff,0x8c,0x8c,0x8c,0x0c,0xcf,0x9f,0x3f,0x07,0xb9,0x9a,0x81,0x87,0x87,
+ 0x07,0xac,0x1f,0xa4,0x17,0xd9,0x57,0x00,0x01,0xc4,0x82,0x1c,0xe0,0x20,
+ 0x05,0xc0,0x1c,0xc6,0xc0,0xc1,0xc1,0x01,0xf6,0xc1,0x93,0x27,0x4f,0xc0,
+ 0xc1,0x02,0x02,0x20,0x03,0xbe,0x7c,0xf9,0x02,0x66,0x57,0x54,0x54,0x30,
+ 0x5c,0xbf,0x7e,0x9d,0xe1,0xde,0xbd,0x7b,0x0c,0xbb,0x76,0xed,0x62,0x60,
+ 0x61,0x61,0x61,0x28,0x2a,0x2a,0x42,0x89,0x3c,0x80,0x00,0x82,0x47,0x35,
+ 0xc8,0x2b,0x42,0x42,0x42,0xe0,0x64,0xb5,0x69,0xd3,0x26,0x86,0x8f,0x1f,
+ 0x3f,0x82,0x83,0x03,0x04,0x40,0x61,0x0c,0x72,0x39,0x8c,0xfd,0xec,0xd9,
+ 0x33,0xb0,0x8b,0x41,0xf1,0x02,0x4a,0x2d,0x29,0x29,0x29,0x60,0xc7,0x20,
+ 0x03,0x80,0x00,0x62,0x82,0x85,0xd9,0xaf,0x5f,0xbf,0xc0,0x18,0x64,0x20,
+ 0x28,0x28,0xac,0xac,0xac,0xc0,0x61,0x06,0x03,0xa0,0x94,0x02,0x03,0xdf,
+ 0xbe,0x7d,0x63,0xb8,0x7c,0xf9,0x32,0xd8,0x87,0xfe,0xfe,0xfe,0xe0,0xf0,
+ 0x06,0xa6,0x14,0xb0,0x38,0x0c,0x00,0x04,0x10,0x0b,0x4c,0x13,0xc8,0xcb,
+ 0xa0,0x70,0x02,0x29,0x7a,0xfa,0xf4,0x29,0x58,0x32,0x3b,0x3b,0x9b,0x11,
+ 0x14,0xcb,0xe8,0xc9,0x2d,0x2a,0x2a,0x8a,0x71,0xcd,0x9a,0x35,0xa0,0x24,
+ 0x07,0xb6,0x40,0x40,0x40,0x00,0xec,0xb8,0x37,0x6f,0xde,0xc0,0xd5,0x00,
+ 0x04,0x10,0xd8,0x60,0x50,0x9a,0x05,0x19,0x00,0x8b,0x51,0x10,0x50,0x54,
+ 0x54,0x84,0x7b,0x9d,0x01,0x0b,0x80,0x89,0xe3,0xd2,0x07,0x10,0x40,0xf0,
+ 0xc8,0x03,0xa5,0x3d,0x6c,0x06,0x10,0x02,0xb8,0xf4,0x01,0x04,0x10,0xd1,
+ 0xf9,0x14,0xe4,0x55,0x52,0x00,0x40,0x00,0x11,0x6d,0x30,0x2c,0x85,0x10,
+ 0x0b,0x00,0x02,0x88,0x68,0x83,0x41,0xb9,0x8b,0x14,0x00,0x10,0x40,0x44,
+ 0x1b,0xec,0xe6,0xe6,0x46,0x52,0x1c,0x00,0x04,0x10,0x23,0xad,0x2a,0x53,
+ 0x80,0x00,0x03,0x00,0x83,0xcb,0x1a,0xf1,0x99,0x41,0xce,0x33,0x00,0x00,
+ 0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_disabled_filesave_png_len = 587;
+static const unsigned char small_disabled_filesave_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x01,0xd6,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xfc,0xff,0xff,0x3f,0x03,0x2d,0x00,0x40,
+ 0x00,0xb1,0xc0,0x18,0x4c,0x4c,0x4c,0xff,0x05,0x04,0x04,0x18,0xc8,0xb1,
+ 0x08,0xa4,0x07,0x84,0x85,0x85,0x85,0x19,0xee,0xdd,0xbb,0xc7,0x08,0x12,
+ 0x03,0x08,0x20,0x46,0x90,0x00,0xc8,0x50,0x07,0x07,0x07,0x86,0xa8,0xa8,
+ 0x28,0x86,0x57,0xaf,0x5e,0x31,0x18,0x1b,0x1b,0x93,0x64,0xf0,0xc1,0x83,
+ 0x07,0x19,0x38,0x38,0x38,0x18,0x3e,0x7d,0xfa,0xc4,0x70,0xfb,0xf6,0x6d,
+ 0x86,0x8d,0x1b,0x37,0x32,0x02,0x04,0x60,0x74,0x0e,0x4a,0x00,0x00,0x42,
+ 0x20,0x00,0xee,0x4f,0xb0,0x95,0xcd,0x6c,0x66,0x2a,0x17,0x5f,0x7a,0x68,
+ 0x82,0x2b,0x30,0xcc,0x8d,0x77,0xba,0x68,0x55,0x21,0x33,0xd1,0xdd,0x88,
+ 0x88,0x2f,0xd4,0xcc,0x40,0x12,0x22,0x02,0x55,0xbd,0xb5,0xbb,0xcf,0x13,
+ 0x40,0x2c,0x30,0xaf,0xfc,0xfa,0xf5,0x0b,0x8c,0x41,0x86,0x83,0x0c,0xb6,
+ 0xb7,0xb7,0x27,0xca,0x60,0x90,0xda,0x3f,0x7f,0xfe,0x30,0xbc,0x7e,0xfd,
+ 0x9a,0x41,0x50,0x50,0x10,0x6c,0xb8,0xad,0xad,0x2d,0x03,0x40,0x00,0xc1,
+ 0xc3,0xf8,0xef,0xdf,0xbf,0x60,0x05,0x20,0x1a,0x64,0xd1,0x8e,0x1d,0x3b,
+ 0x88,0x32,0xd8,0xc3,0xc3,0x03,0xab,0x38,0x40,0x00,0xc1,0x0d,0x86,0x45,
+ 0x1a,0x8c,0xc6,0xa5,0x01,0x17,0x10,0x11,0x11,0x01,0x3b,0x0a,0x06,0x00,
+ 0x02,0x88,0x05,0x97,0x42,0x4a,0x5d,0x0c,0x10,0x40,0x38,0x0d,0x26,0xd5,
+ 0xc5,0xe8,0x00,0x20,0x80,0x68,0xe6,0x62,0x80,0x00,0xa2,0x99,0x8b,0x01,
+ 0x02,0x08,0xc3,0x60,0x31,0x31,0x31,0xa2,0x5d,0x8b,0xac,0x07,0x94,0xec,
+ 0x90,0x01,0x40,0x00,0x61,0x75,0xb1,0xb8,0xb8,0x38,0x5e,0x83,0x60,0x59,
+ 0x18,0x99,0x8f,0x0e,0x00,0x02,0x88,0x89,0x24,0xa7,0x21,0x19,0x0a,0xc2,
+ 0x20,0x57,0xe2,0x2a,0x5b,0x00,0x02,0x08,0xab,0x8b,0x5f,0xbe,0x7c,0x49,
+ 0x92,0x65,0xa2,0xa2,0xa2,0x18,0x62,0x00,0x01,0x84,0x33,0xf2,0x70,0x01,
+ 0x77,0x77,0x77,0x86,0xdf,0xbf,0x7f,0x83,0xb3,0xff,0x91,0x23,0x47,0xc0,
+ 0x62,0x8c,0x8c,0x8c,0x18,0xea,0x00,0x02,0x88,0x64,0x83,0xb1,0x01,0x98,
+ 0xc1,0xc8,0x16,0x00,0x04,0x10,0x38,0x8c,0x41,0xe1,0x04,0x72,0x05,0xac,
+ 0xac,0xc0,0x07,0x40,0xe1,0x8a,0x1e,0xb6,0xc8,0xe1,0x0e,0x03,0x00,0x01,
+ 0x04,0x2f,0xdd,0x40,0xc5,0x25,0xba,0x24,0x36,0x00,0x0a,0x02,0x90,0x03,
+ 0x40,0x0e,0xc1,0x67,0x30,0x40,0x00,0x81,0x0d,0x06,0x95,0xa1,0xa0,0x42,
+ 0x1a,0x54,0xe4,0x11,0x32,0x18,0xe4,0x00,0x90,0xaf,0x90,0xd3,0x2d,0xac,
+ 0x44,0x44,0x16,0x03,0x08,0x20,0x46,0x98,0x41,0xfe,0xfe,0xfe,0xff,0x41,
+ 0x16,0x80,0x0c,0xa7,0x04,0x14,0x16,0x16,0x82,0xcd,0x00,0x08,0x20,0x46,
+ 0x64,0x17,0x82,0x4a,0x7e,0x50,0x21,0x4d,0x09,0xd0,0xd2,0xd2,0x62,0x90,
+ 0x94,0x94,0x64,0x04,0x08,0x30,0x00,0xcf,0x8a,0xfa,0x9c,0xfa,0xe5,0x97,
+ 0x27,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_disabled_redo_png_len = 531;
+static const unsigned char small_disabled_redo_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x01,0x9e,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xfc,0xff,0xff,0x3f,0x03,0x2d,0x00,0x40,
+ 0x00,0x31,0xd1,0xc4,0x54,0x20,0x00,0x08,0x20,0x9a,0x19,0x0c,0x10,0x40,
+ 0x34,0x33,0x18,0x20,0x80,0x68,0x66,0x30,0x40,0x00,0xd1,0xcc,0x60,0x80,
+ 0x00,0x62,0xc1,0x6b,0x2b,0x13,0xd3,0x7f,0x3e,0x3e,0x3e,0x38,0x5f,0x42,
+ 0x42,0x82,0xe1,0xc6,0x8d,0x1b,0x8c,0xc4,0x18,0x0c,0x10,0x40,0x8c,0xb8,
+ 0x92,0x1b,0xc8,0x50,0x03,0x03,0x03,0x06,0x6b,0x6b,0x6b,0x86,0x3f,0x7f,
+ 0xfe,0x80,0xc5,0x7e,0xfd,0xfa,0xc5,0xf0,0xe4,0xc9,0x13,0x86,0x87,0x0f,
+ 0x1f,0x62,0x58,0x20,0x20,0x20,0xf0,0xff,0xc3,0x87,0x0f,0x70,0x31,0x80,
+ 0x00,0xc2,0x6a,0x30,0xc8,0x50,0x3d,0x3d,0x3d,0x06,0x33,0x33,0x33,0x86,
+ 0xca,0xca,0x4a,0x06,0x7e,0x7e,0x7e,0x90,0x41,0x70,0xf9,0x17,0x2f,0x5e,
+ 0x30,0x1c,0x3d,0x7a,0x94,0xa1,0xb7,0xb7,0x97,0x11,0xa6,0x5e,0x5b,0x5b,
+ 0x9b,0x21,0x25,0x25,0x85,0x21,0x3f,0x3f,0x1f,0x2c,0x06,0x10,0x40,0x0c,
+ 0x20,0x83,0xd1,0x31,0xd0,0xa0,0xff,0xf7,0xee,0xdd,0xfb,0xff,0xf6,0xed,
+ 0xdb,0xff,0x2f,0x5f,0xbe,0xfc,0x8f,0x4d,0x4d,0x49,0x49,0xc9,0xff,0xa8,
+ 0xa8,0xa8,0xff,0x42,0x42,0x42,0xff,0x4d,0x4c,0x4c,0xfe,0x67,0x67,0x67,
+ 0xff,0x07,0x5a,0x06,0x57,0x0b,0x10,0x40,0x38,0x23,0x0f,0xe4,0x4a,0xa0,
+ 0x26,0x46,0x31,0x31,0x31,0xac,0x61,0xda,0xdd,0xdd,0x0d,0x16,0x2f,0x28,
+ 0x28,0x60,0x70,0x73,0x73,0x63,0xf8,0xfd,0xfb,0x37,0x8a,0x3c,0x40,0x00,
+ 0xe1,0x34,0x18,0xd9,0xeb,0xd8,0x00,0xc8,0xfb,0xb7,0x6e,0xdd,0x62,0xf8,
+ 0xfe,0xfd,0x3b,0xc3,0xd7,0xaf,0x5f,0xe1,0xf1,0x00,0x03,0x00,0x01,0x84,
+ 0x35,0x55,0x80,0x62,0x1f,0x14,0x8e,0xb8,0x00,0x28,0xa2,0x40,0x61,0x6a,
+ 0x6e,0x6e,0xce,0x00,0x0c,0x2e,0xb0,0xa1,0xe8,0x06,0x03,0x04,0x10,0xce,
+ 0x54,0x91,0x9b,0x9b,0xfb,0xff,0xc7,0x8f,0x1f,0x0c,0xb3,0x67,0xcf,0xc6,
+ 0x1a,0x14,0x13,0x27,0x4e,0xfc,0x6f,0x6a,0x6a,0x8a,0x22,0x06,0xb2,0x88,
+ 0x99,0x99,0x19,0xac,0x1e,0x20,0x80,0xb0,0x46,0x1e,0x0c,0x27,0x24,0x24,
+ 0xfc,0x3f,0x72,0xe4,0x08,0xd6,0xc8,0x23,0x84,0x01,0x02,0x08,0xa7,0x8b,
+ 0x61,0xe0,0xdd,0xbb,0x77,0xa0,0x98,0x27,0x2a,0x53,0x20,0x03,0x80,0x00,
+ 0x22,0x68,0x30,0xb9,0x00,0x20,0x80,0x68,0x56,0x56,0x00,0x04,0x10,0xcd,
+ 0x0c,0x06,0x08,0x20,0x9a,0x19,0x0c,0x10,0x40,0x34,0x33,0x18,0x20,0x80,
+ 0x68,0x66,0x30,0x40,0x80,0x01,0x00,0xf7,0xb3,0xec,0x5d,0x7c,0xf2,0xab,
+ 0x77,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_disabled_searchfind_png_len = 1013;
+static const unsigned char small_disabled_searchfind_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x03,0x80,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xfc,0xff,0xff,0x3f,0x03,0x2d,0x00,0x40,
+ 0x00,0xb1,0x60,0x13,0x64,0x62,0x62,0xfa,0x2f,0x2c,0x2c,0xcc,0x80,0xcd,
+ 0x52,0x98,0x98,0x84,0x84,0x04,0xc3,0xd5,0xab,0x57,0x19,0x71,0x19,0x0c,
+ 0x10,0x40,0x8c,0xe8,0x9a,0x41,0x86,0x86,0x85,0x85,0x31,0x34,0x34,0x34,
+ 0xe0,0x75,0xd1,0xb2,0x65,0xcb,0x18,0x5e,0xbc,0x78,0xc1,0x30,0x6b,0xd6,
+ 0x2c,0xac,0x86,0x03,0x04,0x10,0x13,0xba,0x00,0xc8,0xa5,0x84,0x0c,0x05,
+ 0x01,0x5e,0x5e,0x5e,0x86,0xf0,0xf0,0x70,0x86,0xb4,0xb4,0x34,0xac,0x61,
+ 0x09,0x10,0x40,0x18,0x41,0x01,0xf2,0xc1,0xbf,0x7f,0xff,0xc0,0xf4,0xb6,
+ 0x6d,0xdb,0x18,0x38,0x38,0x38,0x18,0xfe,0xfe,0xfd,0x0b,0xe6,0xab,0xab,
+ 0xab,0x33,0x28,0x29,0x29,0xc1,0xd5,0x8a,0x89,0x89,0xc1,0x0d,0x47,0x77,
+ 0x39,0x40,0x00,0x61,0x0d,0xe3,0x9f,0x3f,0x7f,0x82,0x0d,0x77,0x72,0x72,
+ 0x82,0x78,0x8b,0x89,0x89,0x81,0x99,0x99,0x19,0x8c,0x91,0x83,0x0e,0xc4,
+ 0x07,0x19,0x1e,0x1a,0x1a,0x8a,0x61,0x38,0x40,0x00,0xa1,0x84,0x31,0x28,
+ 0x7c,0xf9,0xf9,0xf9,0xe1,0x7c,0x01,0x01,0x01,0x86,0xe4,0xe4,0x64,0x06,
+ 0x6e,0x6e,0x6e,0xb0,0x45,0xaa,0xaa,0xaa,0x0c,0xca,0xca,0xca,0x60,0x8b,
+ 0xb6,0x6c,0xd9,0x82,0xe2,0x98,0xcf,0x9f,0x3f,0xa3,0x84,0x39,0x40,0x00,
+ 0xc1,0x0d,0x06,0x19,0xea,0xee,0xee,0xce,0x50,0x53,0x53,0xc3,0xc0,0xc6,
+ 0xc6,0xc6,0xf0,0xeb,0xd7,0x2f,0xb0,0xe2,0x5d,0xbb,0x76,0x31,0x78,0x7a,
+ 0x7a,0x82,0x5d,0x07,0xb2,0x00,0x14,0x34,0x2c,0x2c,0x2c,0x60,0xc3,0x19,
+ 0x19,0x19,0x19,0xbe,0x7c,0xf9,0xc2,0xf0,0xed,0xdb,0x37,0x30,0x3e,0x76,
+ 0xec,0x18,0x83,0xac,0xac,0x2c,0x43,0x6a,0x6a,0x2a,0x23,0x40,0x00,0xb1,
+ 0xc0,0x0c,0xf5,0xf3,0xf3,0x63,0x68,0x69,0x69,0x61,0x78,0xf3,0xe6,0x0d,
+ 0xd8,0xa5,0x20,0x8d,0x20,0x0b,0xfc,0xfd,0xfd,0x19,0xf6,0xee,0xdd,0x0b,
+ 0x0e,0xdb,0x3f,0x7f,0xfe,0x80,0x0d,0x80,0xc5,0x01,0x28,0xcc,0x15,0x14,
+ 0x14,0xe0,0xc1,0x04,0x8a,0x50,0x03,0x03,0x03,0xb0,0x43,0x01,0x02,0x08,
+ 0x6c,0x30,0xc8,0xfb,0xad,0xad,0xad,0x60,0x97,0x7c,0xfa,0xf4,0x89,0x41,
+ 0x48,0x48,0x88,0xe1,0xe1,0xc3,0x87,0x70,0x6f,0x6a,0x6a,0x6a,0x82,0x5d,
+ 0x03,0xb2,0x9c,0x8b,0x8b,0x0b,0x8c,0xd9,0xd9,0xd9,0xc1,0x96,0x83,0x2c,
+ 0x81,0x45,0x3a,0x32,0x00,0x08,0x20,0x78,0xe4,0x81,0xbc,0x05,0x02,0xbf,
+ 0x7f,0xff,0x06,0xdb,0x2e,0x2a,0x2a,0xca,0xf0,0xf5,0xeb,0x57,0xb0,0x38,
+ 0x28,0x82,0x40,0x96,0x3d,0x7f,0xfe,0x9c,0xe1,0xfd,0xfb,0xf7,0x60,0xc3,
+ 0x40,0x58,0x43,0x43,0x83,0x41,0x51,0x51,0x11,0x5b,0xfc,0x33,0x00,0x04,
+ 0x10,0xdc,0x60,0x90,0x8d,0x20,0xaf,0xc2,0xd8,0xaf,0x5f,0xbf,0x86,0x2b,
+ 0x02,0x85,0x2d,0xc8,0x9b,0x20,0x97,0x83,0xc2,0x94,0x8f,0x8f,0x0f,0x1c,
+ 0xd6,0x20,0x07,0xc0,0x5c,0x8c,0x0e,0x00,0x02,0x08,0x6c,0xb0,0xb4,0xb4,
+ 0x34,0xc3,0x83,0x07,0x0f,0x18,0xe4,0xe4,0xe4,0x18,0x58,0x59,0x59,0xc1,
+ 0xae,0x14,0x11,0x11,0x01,0xbb,0x18,0x64,0x20,0x32,0xb8,0x74,0xe9,0x12,
+ 0xdc,0x72,0x50,0x2a,0xc1,0xe5,0x62,0x80,0x00,0x02,0x1b,0x7c,0xe5,0xca,
+ 0x15,0x46,0x50,0x3a,0x0c,0x0e,0x0e,0x06,0xbb,0x06,0x14,0x76,0xa0,0x48,
+ 0x04,0x01,0x1e,0x1e,0x1e,0x86,0x93,0x27,0x4f,0x32,0x48,0x49,0x49,0x81,
+ 0xf9,0x3a,0x3a,0x3a,0x60,0x31,0x4e,0x4e,0x4e,0x70,0x9c,0xe0,0x02,0x00,
+ 0x01,0x04,0x97,0x01,0xa5,0x3f,0x90,0xe1,0xde,0xde,0xde,0x60,0x83,0x41,
+ 0xe1,0x0a,0x0a,0x1a,0x90,0xa1,0xa0,0x20,0xf8,0xf0,0xe1,0x03,0x38,0x42,
+ 0x41,0x41,0xf1,0xf1,0xe3,0x47,0xb0,0x8b,0x41,0x69,0x1a,0x39,0x27,0x22,
+ 0x03,0x80,0x00,0x42,0xb1,0x12,0x66,0xb8,0xa4,0xa4,0x24,0x3c,0x08,0x4c,
+ 0x4c,0x4c,0xc0,0x29,0x05,0x14,0x96,0x20,0xfa,0xce,0x9d,0x3b,0x0c,0x8e,
+ 0x8e,0x8e,0xe0,0x30,0x06,0xb9,0x1a,0x64,0x39,0xc8,0x12,0xf4,0x54,0x01,
+ 0x10,0x40,0x18,0x85,0xd0,0xda,0xb5,0x6b,0x19,0x64,0x64,0x64,0x18,0xec,
+ 0xed,0xed,0xc1,0x18,0x14,0x71,0xdf,0xbf,0x7f,0x07,0x6b,0x14,0x17,0x17,
+ 0x07,0xbb,0x72,0xdf,0xbe,0x7d,0x60,0x31,0x50,0x1c,0x80,0xd2,0x35,0x28,
+ 0x33,0x81,0xca,0x13,0x64,0x00,0x10,0x40,0x18,0x06,0x83,0x0c,0xb0,0xb6,
+ 0xb6,0x06,0x67,0x0e,0x50,0xac,0x83,0x82,0x05,0x64,0xd8,0xa3,0x47,0x8f,
+ 0xc0,0xe1,0x0e,0x2a,0x87,0x41,0x91,0xb6,0x7f,0xff,0x7e,0xb0,0xc1,0xa0,
+ 0xdc,0x09,0xa2,0x41,0x86,0x23,0x03,0x80,0x00,0xc2,0x08,0x7d,0x50,0x30,
+ 0x3c,0x7d,0xfa,0x14,0x1c,0x14,0x20,0x57,0xc0,0x92,0x93,0x9d,0x9d,0x1d,
+ 0xc3,0xd1,0xa3,0x47,0xc1,0x6c,0x90,0xcb,0x41,0x29,0x07,0xc4,0x37,0x36,
+ 0x36,0x06,0x3b,0x00,0x96,0x0f,0x60,0x00,0x20,0x80,0x30,0x0c,0x06,0xd5,
+ 0x0a,0xa0,0x70,0x06,0xb9,0x0c,0x39,0xa9,0x81,0x52,0x00,0x08,0x83,0x22,
+ 0x10,0x96,0x69,0x40,0x34,0x28,0x79,0x82,0x92,0x2a,0xa8,0x44,0x4c,0x4c,
+ 0x4c,0x84,0xab,0x07,0x08,0x20,0x8c,0x1a,0x04,0x06,0x66,0xcf,0x9e,0xfd,
+ 0x1f,0x96,0xef,0x91,0x83,0x09,0x64,0x18,0xa8,0x9c,0x06,0xa5,0x7d,0x50,
+ 0x51,0x60,0x6a,0x6a,0x0a,0x0e,0x22,0x90,0x1c,0x28,0x4d,0x03,0xd3,0x3f,
+ 0xd8,0xe9,0x00,0x01,0x04,0x8f,0x51,0x52,0xf1,0x8e,0x1d,0x3b,0xfe,0x5f,
+ 0xbf,0x7e,0xfd,0x3f,0x30,0xb8,0xfe,0x63,0x93,0x07,0x08,0x30,0x00,0xad,
+ 0x91,0xb8,0x43,0x2d,0xea,0x93,0x7f,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,
+ 0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int small_disabled_undo_png_len = 541;
+static const unsigned char small_disabled_undo_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x08,0x06,0x00,0x00,
+ 0x00,0xc4,0xb4,0x6c,0x3b,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8b,0x0c,0x91,0xa5,0x1c,0x00,0x00,0x00,0x20,0x63,0x48,0x52,
+ 0x4d,0x00,0x00,0x6e,0x9a,0x00,0x00,0x74,0x0f,0x00,0x00,0xef,0x68,0x00,
+ 0x00,0x87,0x88,0x00,0x00,0x6a,0xb8,0x00,0x00,0xf5,0x93,0x00,0x00,0x48,
+ 0x46,0x00,0x00,0x1e,0x75,0x20,0x95,0x94,0xb3,0x00,0x00,0x01,0xa8,0x49,
+ 0x44,0x41,0x54,0x78,0x9c,0x62,0xfc,0xff,0xff,0x3f,0x03,0x2d,0x00,0x40,
+ 0x00,0x31,0xd1,0xc4,0x54,0x20,0x00,0x08,0x20,0x9a,0x19,0x0c,0x10,0x40,
+ 0x34,0x33,0x18,0x20,0x80,0x68,0x66,0x30,0x40,0x00,0xd1,0xcc,0x60,0x80,
+ 0x00,0x62,0x21,0x55,0x03,0x13,0x13,0xd3,0x7f,0x3e,0x3e,0x3e,0x38,0x5f,
+ 0x42,0x42,0x82,0xe1,0xc6,0x8d,0x1b,0x8c,0xe8,0xea,0x00,0x02,0x88,0x11,
+ 0x5b,0x72,0x13,0x16,0x16,0xfe,0xff,0xf6,0xed,0x5b,0x14,0xc5,0x20,0x03,
+ 0xf9,0xf9,0xf9,0x19,0xe4,0xe4,0xe4,0x18,0xec,0xec,0xec,0xc0,0x62,0xec,
+ 0xec,0xec,0x0c,0x3f,0x7f,0xfe,0x64,0x78,0xf5,0xea,0x15,0xc3,0xca,0x95,
+ 0x2b,0x51,0xd4,0x03,0x04,0x10,0x4e,0x83,0xbd,0xbd,0xbd,0x19,0x16,0x2d,
+ 0x5a,0xc4,0x08,0x33,0x54,0x57,0x57,0x97,0x61,0xc3,0x86,0x0d,0x0c,0x20,
+ 0xc3,0x81,0x2e,0x84,0xab,0xdd,0xb8,0x71,0x23,0xc3,0xef,0xdf,0xbf,0x19,
+ 0xee,0xdf,0xbf,0xcf,0xb0,0x7e,0xfd,0x7a,0xb8,0xe1,0x00,0x01,0x84,0xd5,
+ 0x60,0x41,0x41,0xc1,0xff,0x29,0x29,0x29,0x0c,0xd7,0xae,0x5d,0x63,0x38,
+ 0x7e,0xfc,0x38,0x83,0xac,0xac,0x2c,0xd8,0x50,0x90,0x6b,0x99,0x99,0x99,
+ 0x31,0xbc,0x1d,0x17,0x17,0xf7,0x1f,0xa8,0x87,0x41,0x49,0x49,0x89,0x21,
+ 0x3f,0x3f,0x1f,0x2c,0x0f,0x10,0x40,0x38,0x23,0x8f,0x97,0x97,0x97,0xc1,
+ 0xc4,0xc4,0x84,0x21,0x2d,0x2d,0x0d,0xaf,0xa1,0x20,0x00,0xf2,0x19,0xc8,
+ 0x11,0xa6,0xa6,0xa6,0x70,0x31,0x80,0x00,0xc2,0x6a,0x30,0xc8,0x17,0xbf,
+ 0x7e,0xfd,0x62,0xf8,0xf1,0xe3,0x07,0x98,0x3e,0x76,0xec,0x18,0x4e,0x43,
+ 0x61,0xe0,0xcc,0x99,0x33,0x28,0x7c,0x80,0x00,0xc2,0x6a,0xb0,0xa8,0xa8,
+ 0x28,0xc3,0xd3,0xa7,0x4f,0x19,0xde,0xbf,0x7f,0xcf,0xf0,0xf9,0xf3,0x67,
+ 0x86,0xed,0xdb,0xb7,0x33,0xf8,0xf8,0xf8,0xe0,0x2c,0x54,0x40,0x71,0x20,
+ 0x23,0x23,0x83,0x22,0x06,0x10,0x40,0x58,0xc3,0x18,0x04,0x26,0x4e,0x9c,
+ 0xf8,0x1f,0xd9,0x6b,0x1a,0x1a,0x1a,0x60,0x5a,0x48,0x48,0x08,0x23,0xb5,
+ 0xe8,0xe8,0xe8,0x80,0x23,0x91,0x9b,0x9b,0x9b,0x41,0x4c,0x4c,0x0c,0x2c,
+ 0x0f,0x10,0x40,0x60,0x6f,0x53,0x82,0x55,0x54,0x54,0xfe,0x1f,0x39,0x72,
+ 0xe4,0xff,0x9f,0x3f,0x7f,0xfe,0x23,0x8b,0x03,0x04,0x10,0xc5,0x39,0xef,
+ 0xf6,0xed,0xdb,0x8c,0x40,0x80,0x11,0x07,0x00,0x01,0x84,0x33,0x28,0x28,
+ 0x05,0x00,0x01,0x44,0xb3,0xb2,0x02,0x20,0x80,0x68,0x66,0x30,0x40,0x00,
+ 0xd1,0xcc,0x60,0x80,0x00,0xa2,0x99,0xc1,0x00,0x01,0x44,0x33,0x83,0x01,
+ 0x02,0x0c,0x00,0x57,0x5a,0xba,0x0b,0x05,0xcd,0x84,0xac,0x00,0x00,0x00,
+ 0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+static const unsigned int mini_down_xpm_len = 1447;
+static const unsigned char mini_down_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x31,0x36,0x20,0x31,0x36,
+ 0x20,0x34,0x39,0x20,0x31,0x22,0x2c,0x0a,0x22,0x20,0x20,0x63,0x20,0x23,
+ 0x30,0x36,0x30,0x36,0x32,0x64,0x32,0x64,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x2e,0x20,0x63,0x20,0x23,0x30,0x38,0x30,0x38,0x32,0x65,0x32,
+ 0x65,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x58,0x20,0x63,0x20,0x23,
+ 0x31,0x62,0x31,0x62,0x33,0x66,0x33,0x66,0x66,0x31,0x66,0x31,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x20,0x63,0x20,0x23,0x33,0x64,0x33,0x64,0x34,0x65,0x34,
+ 0x65,0x62,0x62,0x62,0x62,0x22,0x2c,0x0a,0x22,0x4f,0x20,0x63,0x20,0x23,
+ 0x32,0x66,0x32,0x66,0x35,0x30,0x35,0x30,0x65,0x31,0x65,0x31,0x22,0x2c,
+ 0x0a,0x22,0x2b,0x20,0x63,0x20,0x23,0x32,0x36,0x32,0x36,0x35,0x31,0x35,
+ 0x31,0x66,0x62,0x66,0x62,0x22,0x2c,0x0a,0x22,0x40,0x20,0x63,0x20,0x23,
+ 0x32,0x62,0x32,0x62,0x35,0x39,0x35,0x39,0x66,0x65,0x66,0x65,0x22,0x2c,
+ 0x0a,0x22,0x23,0x20,0x63,0x20,0x23,0x33,0x31,0x33,0x31,0x35,0x34,0x35,
+ 0x34,0x65,0x32,0x65,0x32,0x22,0x2c,0x0a,0x22,0x24,0x20,0x63,0x20,0x23,
+ 0x33,0x37,0x33,0x37,0x35,0x65,0x35,0x65,0x66,0x33,0x66,0x33,0x22,0x2c,
+ 0x0a,0x22,0x25,0x20,0x63,0x20,0x23,0x33,0x63,0x33,0x63,0x36,0x35,0x36,
+ 0x35,0x65,0x65,0x65,0x65,0x22,0x2c,0x0a,0x22,0x26,0x20,0x63,0x20,0x23,
+ 0x33,0x61,0x33,0x61,0x36,0x35,0x36,0x35,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x2a,0x20,0x63,0x20,0x23,0x34,0x34,0x34,0x34,0x35,0x62,0x35,
+ 0x62,0x63,0x32,0x63,0x32,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x63,0x20,0x23,
+ 0x34,0x38,0x34,0x38,0x36,0x30,0x36,0x30,0x63,0x35,0x63,0x35,0x22,0x2c,
+ 0x0a,0x22,0x2d,0x20,0x63,0x20,0x23,0x35,0x30,0x35,0x30,0x36,0x66,0x36,
+ 0x66,0x63,0x63,0x63,0x63,0x22,0x2c,0x0a,0x22,0x3b,0x20,0x63,0x20,0x23,
+ 0x34,0x37,0x34,0x37,0x37,0x35,0x37,0x35,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x3a,0x20,0x63,0x20,0x23,0x34,0x64,0x34,0x64,0x37,0x64,0x37,
+ 0x64,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x3e,0x20,0x63,0x20,0x23,
+ 0x35,0x33,0x35,0x33,0x37,0x63,0x37,0x63,0x65,0x62,0x65,0x62,0x22,0x2c,
+ 0x0a,0x22,0x2c,0x20,0x63,0x20,0x23,0x36,0x63,0x36,0x63,0x38,0x34,0x38,
+ 0x34,0x62,0x61,0x62,0x61,0x22,0x2c,0x0a,0x22,0x3c,0x20,0x63,0x20,0x23,
+ 0x36,0x65,0x36,0x65,0x38,0x37,0x38,0x37,0x63,0x37,0x63,0x37,0x22,0x2c,
+ 0x0a,0x22,0x31,0x20,0x63,0x20,0x23,0x36,0x62,0x36,0x62,0x39,0x32,0x39,
+ 0x32,0x65,0x32,0x65,0x32,0x22,0x2c,0x0a,0x22,0x32,0x20,0x63,0x20,0x23,
+ 0x36,0x35,0x36,0x35,0x39,0x37,0x39,0x37,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x33,0x20,0x63,0x20,0x23,0x36,0x63,0x36,0x63,0x39,0x64,0x39,
+ 0x64,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x34,0x20,0x63,0x20,0x23,
+ 0x36,0x63,0x36,0x63,0x61,0x31,0x61,0x31,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x35,0x20,0x63,0x20,0x23,0x37,0x65,0x37,0x65,0x61,0x32,0x61,
+ 0x32,0x65,0x61,0x65,0x61,0x22,0x2c,0x0a,0x22,0x36,0x20,0x63,0x20,0x23,
+ 0x37,0x36,0x37,0x36,0x61,0x36,0x61,0x36,0x66,0x65,0x66,0x65,0x22,0x2c,
+ 0x0a,0x22,0x37,0x20,0x63,0x20,0x23,0x37,0x66,0x37,0x66,0x61,0x66,0x61,
+ 0x66,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x38,0x20,0x63,0x20,0x23,
+ 0x38,0x66,0x38,0x66,0x39,0x39,0x39,0x39,0x62,0x37,0x62,0x37,0x22,0x2c,
+ 0x0a,0x22,0x39,0x20,0x63,0x20,0x23,0x39,0x66,0x39,0x66,0x61,0x32,0x61,
+ 0x32,0x62,0x33,0x62,0x33,0x22,0x2c,0x0a,0x22,0x30,0x20,0x63,0x20,0x23,
+ 0x38,0x65,0x38,0x65,0x39,0x65,0x39,0x65,0x63,0x30,0x63,0x30,0x22,0x2c,
+ 0x0a,0x22,0x71,0x20,0x63,0x20,0x23,0x38,0x32,0x38,0x32,0x61,0x39,0x61,
+ 0x39,0x65,0x38,0x65,0x38,0x22,0x2c,0x0a,0x22,0x77,0x20,0x63,0x20,0x23,
+ 0x38,0x37,0x38,0x37,0x62,0x37,0x62,0x37,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x65,0x20,0x63,0x20,0x23,0x38,0x37,0x38,0x37,0x62,0x38,0x62,
+ 0x38,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x72,0x20,0x63,0x20,0x23,
+ 0x38,0x65,0x38,0x65,0x62,0x65,0x62,0x65,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x74,0x20,0x63,0x20,0x23,0x61,0x34,0x61,0x34,0x62,0x34,0x62,
+ 0x34,0x63,0x64,0x63,0x64,0x22,0x2c,0x0a,0x22,0x79,0x20,0x63,0x20,0x23,
+ 0x61,0x36,0x61,0x36,0x62,0x61,0x62,0x61,0x65,0x63,0x65,0x63,0x22,0x2c,
+ 0x0a,0x22,0x75,0x20,0x63,0x20,0x23,0x39,0x37,0x39,0x37,0x63,0x38,0x63,
+ 0x38,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x69,0x20,0x63,0x20,0x23,
+ 0x39,0x64,0x39,0x64,0x63,0x65,0x63,0x65,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x70,0x20,0x63,0x20,0x23,0x39,0x66,0x39,0x66,0x64,0x33,0x64,
+ 0x33,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x61,0x20,0x63,0x20,0x23,
+ 0x61,0x32,0x61,0x32,0x63,0x65,0x63,0x65,0x66,0x36,0x66,0x36,0x22,0x2c,
+ 0x0a,0x22,0x73,0x20,0x63,0x20,0x23,0x61,0x32,0x61,0x32,0x64,0x31,0x64,
+ 0x31,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x64,0x20,0x63,0x20,0x23,
+ 0x62,0x32,0x62,0x32,0x63,0x39,0x63,0x39,0x65,0x65,0x65,0x65,0x22,0x2c,
+ 0x0a,0x22,0x66,0x20,0x63,0x20,0x23,0x62,0x39,0x62,0x39,0x63,0x61,0x63,
+ 0x61,0x65,0x65,0x65,0x65,0x22,0x2c,0x0a,0x22,0x67,0x20,0x63,0x20,0x23,
+ 0x62,0x61,0x62,0x61,0x64,0x36,0x64,0x36,0x66,0x38,0x66,0x38,0x22,0x2c,
+ 0x0a,0x22,0x68,0x20,0x63,0x20,0x23,0x62,0x35,0x62,0x35,0x65,0x62,0x65,
+ 0x62,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x6a,0x20,0x63,0x20,0x23,
+ 0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x22,0x2c,
+ 0x0a,0x22,0x6b,0x20,0x63,0x20,0x23,0x64,0x61,0x64,0x61,0x66,0x61,0x66,
+ 0x61,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x6c,0x20,0x63,0x20,0x23,
+ 0x65,0x31,0x65,0x31,0x66,0x61,0x66,0x61,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x7a,0x20,0x63,0x20,0x23,0x66,0x36,0x66,0x36,0x66,0x66,0x66,
+ 0x66,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x78,0x20,0x63,0x20,0x4e,
+ 0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x2f,0x2a,0x20,0x70,0x69,0x78,0x65,0x6c,
+ 0x73,0x20,0x2a,0x2f,0x0a,0x22,0x78,0x78,0x78,0x78,0x78,0x39,0x79,0x66,
+ 0x64,0x71,0x38,0x78,0x78,0x78,0x78,0x78,0x22,0x2c,0x0a,0x22,0x78,0x78,
+ 0x78,0x78,0x78,0x35,0x7a,0x6c,0x6b,0x73,0x23,0x39,0x78,0x78,0x78,0x78,
+ 0x22,0x2c,0x0a,0x22,0x78,0x78,0x78,0x78,0x74,0x31,0x68,0x70,0x75,0x32,
+ 0x4f,0x78,0x78,0x78,0x78,0x78,0x22,0x2c,0x0a,0x22,0x78,0x78,0x78,0x78,
+ 0x78,0x3c,0x75,0x69,0x72,0x3a,0x6f,0x74,0x78,0x78,0x78,0x78,0x22,0x2c,
+ 0x0a,0x22,0x78,0x78,0x78,0x78,0x78,0x30,0x77,0x75,0x77,0x3b,0x2d,0x78,
+ 0x78,0x78,0x78,0x78,0x22,0x2c,0x0a,0x22,0x78,0x78,0x78,0x78,0x78,0x38,
+ 0x77,0x75,0x77,0x26,0x2c,0x78,0x78,0x78,0x78,0x78,0x22,0x2c,0x0a,0x22,
+ 0x78,0x78,0x78,0x78,0x78,0x74,0x35,0x75,0x37,0x24,0x39,0x78,0x78,0x78,
+ 0x78,0x78,0x22,0x2c,0x0a,0x22,0x78,0x78,0x78,0x78,0x78,0x74,0x71,0x69,
+ 0x37,0x24,0x39,0x78,0x78,0x78,0x78,0x78,0x22,0x2c,0x0a,0x22,0x78,0x74,
+ 0x78,0x78,0x78,0x38,0x61,0x69,0x77,0x3a,0x2c,0x74,0x78,0x78,0x74,0x78,
+ 0x22,0x2c,0x0a,0x22,0x78,0x3c,0x61,0x67,0x79,0x77,0x72,0x77,0x77,0x77,
+ 0x36,0x35,0x35,0x3e,0x2a,0x78,0x22,0x2c,0x0a,0x22,0x78,0x2c,0x25,0x34,
+ 0x65,0x65,0x77,0x77,0x37,0x77,0x37,0x36,0x26,0x20,0x2d,0x78,0x22,0x2c,
+ 0x0a,0x22,0x78,0x78,0x2c,0x40,0x33,0x77,0x77,0x77,0x37,0x37,0x36,0x3b,
+ 0x2e,0x3d,0x39,0x78,0x22,0x2c,0x0a,0x22,0x78,0x78,0x78,0x2c,0x40,0x33,
+ 0x37,0x37,0x36,0x36,0x3a,0x20,0x6f,0x74,0x78,0x78,0x22,0x2c,0x0a,0x22,
+ 0x78,0x78,0x78,0x78,0x2c,0x2b,0x32,0x36,0x32,0x3b,0x20,0x6f,0x39,0x78,
+ 0x78,0x78,0x22,0x2c,0x0a,0x22,0x78,0x78,0x78,0x78,0x78,0x2c,0x2b,0x3a,
+ 0x3a,0x2e,0x6f,0x74,0x78,0x78,0x78,0x78,0x22,0x2c,0x0a,0x22,0x78,0x78,
+ 0x78,0x78,0x78,0x78,0x3c,0x4f,0x58,0x2d,0x39,0x78,0x78,0x78,0x78,0x78,
+ 0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int mini_form_xpm_len = 991;
+static const unsigned char mini_form_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x20,0x66,0x6f,0x72,0x6d,
+ 0x5f,0x78,0x70,0x6d,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x22,0x32,0x30,
+ 0x20,0x32,0x30,0x20,0x34,0x20,0x32,0x22,0x2c,0x0a,0x22,0x20,0x20,0x09,
+ 0x63,0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x09,0x63,
+ 0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x22,0x2b,0x20,0x09,0x63,0x20,
+ 0x23,0x30,0x30,0x30,0x30,0x37,0x39,0x22,0x2c,0x0a,0x22,0x40,0x20,0x09,
+ 0x63,0x20,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2c,0x0a,0x22,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x22,0x2c,0x0a,
+ 0x22,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x22,
+ 0x2c,0x0a,0x22,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x2e,0x20,0x2b,0x20,0x2b,0x20,0x2b,
+ 0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,
+ 0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2e,
+ 0x20,0x2e,0x20,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x2e,0x20,0x2b,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2b,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x2b,0x20,0x2e,0x20,0x2e,0x20,0x2b,
+ 0x20,0x2e,0x20,0x2e,0x20,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x2e,0x20,0x2b,
+ 0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,
+ 0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,
+ 0x20,0x2b,0x20,0x2e,0x20,0x2e,0x20,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x2e,
+ 0x20,0x2b,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x2b,0x20,0x2e,0x20,0x2e,0x20,0x22,0x2c,0x0a,0x22,0x2e,
+ 0x20,0x2e,0x20,0x2b,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x2b,0x20,0x2e,0x20,0x2e,0x20,0x22,0x2c,0x0a,
+ 0x22,0x2e,0x20,0x2e,0x20,0x2b,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x2b,0x20,0x2e,0x20,0x2e,0x20,0x22,
+ 0x2c,0x0a,0x22,0x2e,0x20,0x2e,0x20,0x2b,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x2b,0x20,0x2e,0x20,0x2e,
+ 0x20,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x2e,0x20,0x2b,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x2b,0x20,0x2e,
+ 0x20,0x2e,0x20,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x2e,0x20,0x2b,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x2b,
+ 0x20,0x2e,0x20,0x2e,0x20,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x2e,0x20,0x2b,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x2b,0x20,0x2e,0x20,0x2e,0x20,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x2e,
+ 0x20,0x2b,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x2b,0x20,0x2e,0x20,0x2e,0x20,0x22,0x2c,0x0a,0x22,0x2e,
+ 0x20,0x2e,0x20,0x2b,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x2b,0x20,0x2e,0x20,0x2e,0x20,0x22,0x2c,0x0a,
+ 0x22,0x2e,0x20,0x2e,0x20,0x2b,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,
+ 0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x2b,0x20,0x2e,0x20,0x2e,0x20,0x22,
+ 0x2c,0x0a,0x22,0x2e,0x20,0x2e,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,
+ 0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,
+ 0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2b,0x20,0x2e,0x20,0x2e,
+ 0x20,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x22,0x2c,0x0a,0x22,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x2e,
+ 0x20,0x2e,0x20,0x2e,0x20,0x2e,0x20,0x22,0x7d,0x3b,0x0a
+};
+
+static const unsigned int mini_image_xpm_len = 510;
+static const unsigned char mini_image_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x63,0x68,0x61,0x72,0x20,
+ 0x2a,0x69,0x6d,0x61,0x67,0x65,0x5f,0x78,0x70,0x6d,0x5b,0x5d,0x20,0x3d,
+ 0x20,0x7b,0x0a,0x22,0x31,0x37,0x20,0x31,0x35,0x20,0x39,0x20,0x31,0x22,
+ 0x2c,0x0a,0x22,0x20,0x09,0x63,0x20,0x23,0x37,0x46,0x37,0x46,0x37,0x46,
+ 0x22,0x2c,0x0a,0x22,0x2e,0x09,0x63,0x20,0x23,0x46,0x46,0x46,0x46,0x46,
+ 0x46,0x22,0x2c,0x0a,0x22,0x58,0x09,0x63,0x20,0x23,0x30,0x30,0x42,0x36,
+ 0x46,0x46,0x22,0x2c,0x0a,0x22,0x6f,0x09,0x63,0x20,0x23,0x42,0x46,0x42,
+ 0x46,0x42,0x46,0x22,0x2c,0x0a,0x22,0x4f,0x09,0x63,0x20,0x23,0x46,0x46,
+ 0x36,0x43,0x30,0x30,0x22,0x2c,0x0a,0x22,0x2b,0x09,0x63,0x20,0x23,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x22,0x2c,0x0a,0x22,0x40,0x09,0x63,0x20,0x23,
+ 0x30,0x30,0x30,0x30,0x46,0x46,0x22,0x2c,0x0a,0x22,0x23,0x09,0x63,0x20,
+ 0x23,0x36,0x43,0x46,0x46,0x30,0x30,0x22,0x2c,0x0a,0x22,0x24,0x09,0x63,
+ 0x20,0x23,0x46,0x46,0x42,0x36,0x39,0x31,0x22,0x2c,0x0a,0x22,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2e,0x2e,0x58,
+ 0x58,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x6f,0x20,0x20,0x20,0x2e,0x58,0x58,0x58,0x22,0x2c,0x0a,0x22,0x20,0x2e,
+ 0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x6f,0x2e,0x20,0x20,0x58,0x58,0x58,
+ 0x2b,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x4f,0x40,0x40,0x40,0x40,0x40,0x40,
+ 0x2b,0x2b,0x2b,0x58,0x58,0x58,0x2b,0x2b,0x22,0x2c,0x0a,0x22,0x20,0x2e,
+ 0x4f,0x40,0x40,0x40,0x40,0x40,0x40,0x4f,0x2e,0x58,0x58,0x58,0x2b,0x2b,
+ 0x2b,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x4f,0x40,0x40,0x40,0x40,0x40,0x40,
+ 0x4f,0x58,0x58,0x58,0x2b,0x2b,0x2b,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,
+ 0x4f,0x23,0x23,0x23,0x23,0x23,0x23,0x58,0x58,0x58,0x2b,0x2b,0x2e,0x2e,
+ 0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x4f,0x23,0x23,0x23,0x23,0x23,0x58,
+ 0x58,0x58,0x2b,0x2b,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,
+ 0x4f,0x23,0x23,0x24,0x23,0x24,0x58,0x58,0x2b,0x6f,0x2b,0x2e,0x2e,0x2e,
+ 0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x4f,0x23,0x24,0x24,0x24,0x24,0x24,
+ 0x2b,0x2e,0x6f,0x2b,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,
+ 0x4f,0x23,0x23,0x24,0x24,0x23,0x23,0x4f,0x2e,0x6f,0x2b,0x2e,0x2e,0x2e,
+ 0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,
+ 0x4f,0x2e,0x6f,0x2b,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x20,0x2e,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x6f,0x2b,0x2e,0x2e,0x2e,
+ 0x2e,0x22,0x2c,0x0a,0x22,0x20,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x6f,0x6f,0x6f,0x2b,0x2e,0x2e,0x2e,0x2e,0x22,0x2c,0x0a,0x22,0x2b,0x2b,
+ 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2e,0x2e,0x2e,
+ 0x2e,0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int mini_left_xpm_len = 1405;
+static const unsigned char mini_left_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x31,0x36,0x20,0x31,0x36,
+ 0x20,0x34,0x37,0x20,0x31,0x22,0x2c,0x0a,0x22,0x20,0x20,0x63,0x20,0x23,
+ 0x30,0x66,0x30,0x66,0x33,0x63,0x33,0x63,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x2e,0x20,0x63,0x20,0x23,0x31,0x36,0x31,0x36,0x33,0x39,0x33,
+ 0x39,0x65,0x66,0x65,0x66,0x22,0x2c,0x0a,0x22,0x58,0x20,0x63,0x20,0x23,
+ 0x31,0x38,0x31,0x38,0x33,0x66,0x33,0x66,0x66,0x62,0x66,0x62,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x20,0x63,0x20,0x23,0x32,0x37,0x32,0x37,0x33,0x66,0x33,
+ 0x66,0x64,0x31,0x64,0x31,0x22,0x2c,0x0a,0x22,0x4f,0x20,0x63,0x20,0x23,
+ 0x31,0x37,0x31,0x37,0x34,0x35,0x34,0x35,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x2b,0x20,0x63,0x20,0x23,0x31,0x64,0x31,0x64,0x34,0x33,0x34,
+ 0x33,0x66,0x32,0x66,0x32,0x22,0x2c,0x0a,0x22,0x40,0x20,0x63,0x20,0x23,
+ 0x31,0x64,0x31,0x64,0x34,0x63,0x34,0x63,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x23,0x20,0x63,0x20,0x23,0x33,0x30,0x33,0x30,0x35,0x36,0x35,
+ 0x36,0x64,0x38,0x64,0x38,0x22,0x2c,0x0a,0x22,0x24,0x20,0x63,0x20,0x23,
+ 0x33,0x61,0x33,0x61,0x35,0x32,0x35,0x32,0x64,0x34,0x64,0x34,0x22,0x2c,
+ 0x0a,0x22,0x25,0x20,0x63,0x20,0x23,0x32,0x30,0x32,0x30,0x34,0x37,0x34,
+ 0x37,0x66,0x63,0x66,0x63,0x22,0x2c,0x0a,0x22,0x26,0x20,0x63,0x20,0x23,
+ 0x32,0x63,0x32,0x63,0x35,0x36,0x35,0x36,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x2a,0x20,0x63,0x20,0x23,0x33,0x34,0x33,0x34,0x36,0x32,0x36,
+ 0x32,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x63,0x20,0x23,
+ 0x33,0x62,0x33,0x62,0x36,0x62,0x36,0x62,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x2d,0x20,0x63,0x20,0x23,0x36,0x33,0x36,0x33,0x37,0x37,0x37,
+ 0x37,0x62,0x38,0x62,0x38,0x22,0x2c,0x0a,0x22,0x3b,0x20,0x63,0x20,0x23,
+ 0x34,0x62,0x34,0x62,0x36,0x33,0x36,0x33,0x63,0x34,0x63,0x34,0x22,0x2c,
+ 0x0a,0x22,0x3a,0x20,0x63,0x20,0x23,0x34,0x38,0x34,0x38,0x36,0x37,0x36,
+ 0x37,0x63,0x39,0x63,0x39,0x22,0x2c,0x0a,0x22,0x3e,0x20,0x63,0x20,0x23,
+ 0x35,0x31,0x35,0x31,0x36,0x64,0x36,0x64,0x63,0x64,0x63,0x64,0x22,0x2c,
+ 0x0a,0x22,0x2c,0x20,0x63,0x20,0x23,0x34,0x35,0x34,0x35,0x37,0x34,0x37,
+ 0x34,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x3c,0x20,0x63,0x20,0x23,
+ 0x34,0x63,0x34,0x63,0x37,0x64,0x37,0x64,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x31,0x20,0x63,0x20,0x23,0x37,0x61,0x37,0x61,0x38,0x63,0x38,
+ 0x63,0x62,0x64,0x62,0x64,0x22,0x2c,0x0a,0x22,0x32,0x20,0x63,0x20,0x23,
+ 0x35,0x36,0x35,0x36,0x38,0x35,0x38,0x35,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x33,0x20,0x63,0x20,0x23,0x35,0x66,0x35,0x66,0x38,0x62,0x38,
+ 0x62,0x66,0x61,0x66,0x61,0x22,0x2c,0x0a,0x22,0x34,0x20,0x63,0x20,0x23,
+ 0x37,0x36,0x37,0x36,0x38,0x62,0x38,0x62,0x63,0x30,0x63,0x30,0x22,0x2c,
+ 0x0a,0x22,0x35,0x20,0x63,0x20,0x23,0x36,0x37,0x36,0x37,0x39,0x37,0x39,
+ 0x37,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x36,0x20,0x63,0x20,0x23,
+ 0x36,0x61,0x36,0x61,0x39,0x38,0x39,0x38,0x66,0x34,0x66,0x34,0x22,0x2c,
+ 0x0a,0x22,0x37,0x20,0x63,0x20,0x23,0x36,0x66,0x36,0x66,0x39,0x66,0x39,
+ 0x66,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x38,0x20,0x63,0x20,0x23,
+ 0x37,0x66,0x37,0x66,0x61,0x33,0x61,0x33,0x65,0x39,0x65,0x39,0x22,0x2c,
+ 0x0a,0x22,0x39,0x20,0x63,0x20,0x23,0x37,0x36,0x37,0x36,0x61,0x36,0x61,
+ 0x36,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x30,0x20,0x63,0x20,0x23,
+ 0x37,0x36,0x37,0x36,0x61,0x38,0x61,0x38,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x71,0x20,0x63,0x20,0x23,0x37,0x65,0x37,0x65,0x61,0x66,0x61,
+ 0x66,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x77,0x20,0x63,0x20,0x23,
+ 0x37,0x66,0x37,0x66,0x62,0x31,0x62,0x31,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x65,0x20,0x63,0x20,0x23,0x38,0x66,0x38,0x66,0x61,0x36,0x61,
+ 0x36,0x65,0x39,0x65,0x39,0x22,0x2c,0x0a,0x22,0x72,0x20,0x63,0x20,0x23,
+ 0x38,0x33,0x38,0x33,0x62,0x31,0x62,0x31,0x66,0x35,0x66,0x35,0x22,0x2c,
+ 0x0a,0x22,0x74,0x20,0x63,0x20,0x23,0x38,0x32,0x38,0x32,0x62,0x35,0x62,
+ 0x35,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x79,0x20,0x63,0x20,0x23,
+ 0x39,0x34,0x39,0x34,0x63,0x34,0x63,0x34,0x66,0x61,0x66,0x61,0x22,0x2c,
+ 0x0a,0x22,0x75,0x20,0x63,0x20,0x23,0x39,0x37,0x39,0x37,0x63,0x62,0x63,
+ 0x62,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x69,0x20,0x63,0x20,0x23,
+ 0x39,0x66,0x39,0x66,0x63,0x36,0x63,0x36,0x66,0x31,0x66,0x31,0x22,0x2c,
+ 0x0a,0x22,0x70,0x20,0x63,0x20,0x23,0x39,0x66,0x39,0x66,0x64,0x34,0x64,
+ 0x34,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x61,0x20,0x63,0x20,0x23,
+ 0x62,0x62,0x62,0x62,0x65,0x34,0x65,0x34,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x73,0x20,0x63,0x20,0x23,0x63,0x30,0x63,0x30,0x63,0x30,0x63,
+ 0x30,0x63,0x30,0x63,0x30,0x22,0x2c,0x0a,0x22,0x64,0x20,0x63,0x20,0x23,
+ 0x63,0x65,0x63,0x65,0x64,0x63,0x64,0x63,0x66,0x64,0x66,0x64,0x22,0x2c,
+ 0x0a,0x22,0x66,0x20,0x63,0x20,0x23,0x63,0x33,0x63,0x33,0x65,0x36,0x65,
+ 0x36,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x67,0x20,0x63,0x20,0x23,
+ 0x64,0x38,0x64,0x38,0x65,0x31,0x65,0x31,0x66,0x39,0x66,0x39,0x22,0x2c,
+ 0x0a,0x22,0x68,0x20,0x63,0x20,0x23,0x65,0x36,0x65,0x36,0x65,0x61,0x65,
+ 0x61,0x66,0x61,0x66,0x61,0x22,0x2c,0x0a,0x22,0x6a,0x20,0x63,0x20,0x23,
+ 0x65,0x34,0x65,0x34,0x66,0x39,0x66,0x39,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x6b,0x20,0x63,0x20,0x23,0x65,0x65,0x65,0x65,0x66,0x66,0x66,
+ 0x66,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x6c,0x20,0x63,0x20,0x4e,
+ 0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x2f,0x2a,0x20,0x70,0x69,0x78,0x65,0x6c,
+ 0x73,0x20,0x2a,0x2f,0x0a,0x22,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,
+ 0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x22,0x2c,0x0a,0x22,0x6c,0x6c,
+ 0x6c,0x6c,0x6c,0x34,0x65,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,
+ 0x22,0x2c,0x0a,0x22,0x6c,0x6c,0x6c,0x6c,0x65,0x67,0x68,0x65,0x6c,0x6c,
+ 0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x22,0x2c,0x0a,0x22,0x6c,0x6c,0x6c,0x31,
+ 0x68,0x6b,0x69,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x22,0x2c,
+ 0x0a,0x22,0x6c,0x6c,0x31,0x6b,0x6b,0x70,0x30,0x31,0x6c,0x6c,0x6c,0x6c,
+ 0x6c,0x6c,0x6c,0x6c,0x22,0x2c,0x0a,0x22,0x6c,0x34,0x6b,0x6b,0x79,0x77,
+ 0x71,0x34,0x6c,0x65,0x31,0x65,0x34,0x65,0x38,0x34,0x22,0x2c,0x0a,0x22,
+ 0x31,0x64,0x6b,0x79,0x39,0x71,0x39,0x35,0x38,0x69,0x61,0x61,0x66,0x61,
+ 0x74,0x23,0x22,0x2c,0x0a,0x22,0x69,0x6a,0x75,0x71,0x39,0x39,0x37,0x71,
+ 0x79,0x79,0x72,0x74,0x30,0x39,0x2c,0x26,0x22,0x2c,0x0a,0x22,0x36,0x74,
+ 0x77,0x39,0x39,0x37,0x37,0x37,0x35,0x35,0x37,0x37,0x35,0x35,0x2c,0x6f,
+ 0x22,0x2c,0x0a,0x22,0x2d,0x25,0x33,0x39,0x37,0x37,0x39,0x2a,0x58,0x25,
+ 0x26,0x2a,0x3d,0x2c,0x2a,0x2b,0x22,0x2c,0x0a,0x22,0x6c,0x24,0x40,0x32,
+ 0x35,0x37,0x37,0x3e,0x31,0x31,0x3b,0x24,0x6f,0x2e,0x2b,0x3b,0x22,0x2c,
+ 0x0a,0x22,0x6c,0x6c,0x3e,0x4f,0x2c,0x35,0x37,0x31,0x6c,0x6c,0x6c,0x6c,
+ 0x6c,0x6c,0x31,0x6c,0x22,0x2c,0x0a,0x22,0x6c,0x6c,0x6c,0x3a,0x58,0x3c,
+ 0x32,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x22,0x2c,0x0a,0x22,
+ 0x6c,0x6c,0x6c,0x6c,0x2d,0x20,0x40,0x34,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,
+ 0x6c,0x6c,0x22,0x2c,0x0a,0x22,0x6c,0x6c,0x6c,0x6c,0x6c,0x2d,0x2e,0x34,
+ 0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x22,0x2c,0x0a,0x22,0x6c,0x6c,
+ 0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,
+ 0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int mini_resetproperty_xpm_len = 180;
+static const unsigned char mini_resetproperty_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x20,0x72,0x65,0x73,0x65,
+ 0x74,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x5f,0x78,0x70,0x6d,0x5b,
+ 0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x22,0x37,0x20,0x36,0x20,0x34,0x20,0x31,
+ 0x22,0x2c,0x0a,0x22,0x20,0x09,0x63,0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,
+ 0x0a,0x22,0x2e,0x09,0x63,0x20,0x23,0x43,0x30,0x30,0x30,0x30,0x30,0x22,
+ 0x2c,0x0a,0x22,0x2b,0x09,0x63,0x20,0x23,0x46,0x46,0x30,0x30,0x30,0x30,
+ 0x22,0x2c,0x0a,0x22,0x40,0x09,0x63,0x20,0x4e,0x6f,0x6e,0x65,0x22,0x2c,
+ 0x0a,0x22,0x2e,0x2b,0x40,0x40,0x40,0x2b,0x2e,0x22,0x2c,0x0a,0x22,0x40,
+ 0x2e,0x2b,0x40,0x2b,0x2e,0x40,0x22,0x2c,0x0a,0x22,0x40,0x40,0x2e,0x2b,
+ 0x2e,0x40,0x40,0x22,0x2c,0x0a,0x22,0x40,0x40,0x2b,0x2e,0x2b,0x40,0x40,
+ 0x22,0x2c,0x0a,0x22,0x40,0x2b,0x2e,0x40,0x2e,0x2b,0x40,0x22,0x2c,0x0a,
+ 0x22,0x2b,0x2e,0x40,0x40,0x40,0x2e,0x2b,0x22,0x7d,0x3b,0x0a
+};
+
+static const unsigned int mini_right_xpm_len = 1573;
+static const unsigned char mini_right_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x31,0x36,0x20,0x31,0x36,
+ 0x20,0x35,0x35,0x20,0x31,0x22,0x2c,0x0a,0x22,0x20,0x20,0x63,0x20,0x23,
+ 0x30,0x32,0x30,0x32,0x32,0x35,0x32,0x35,0x66,0x65,0x66,0x65,0x22,0x2c,
+ 0x0a,0x22,0x2e,0x20,0x63,0x20,0x23,0x30,0x36,0x30,0x36,0x32,0x61,0x32,
+ 0x61,0x66,0x62,0x66,0x62,0x22,0x2c,0x0a,0x22,0x58,0x20,0x63,0x20,0x23,
+ 0x31,0x63,0x31,0x63,0x33,0x63,0x33,0x63,0x65,0x35,0x65,0x35,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x20,0x63,0x20,0x23,0x32,0x32,0x32,0x32,0x33,0x37,0x33,
+ 0x37,0x64,0x36,0x64,0x36,0x22,0x2c,0x0a,0x22,0x4f,0x20,0x63,0x20,0x23,
+ 0x33,0x62,0x33,0x62,0x35,0x33,0x35,0x33,0x63,0x62,0x63,0x62,0x22,0x2c,
+ 0x0a,0x22,0x2b,0x20,0x63,0x20,0x23,0x32,0x36,0x32,0x36,0x34,0x61,0x34,
+ 0x61,0x65,0x62,0x65,0x62,0x22,0x2c,0x0a,0x22,0x40,0x20,0x63,0x20,0x23,
+ 0x32,0x63,0x32,0x63,0x34,0x66,0x34,0x66,0x65,0x65,0x65,0x65,0x22,0x2c,
+ 0x0a,0x22,0x23,0x20,0x63,0x20,0x23,0x33,0x33,0x33,0x33,0x35,0x62,0x35,
+ 0x62,0x66,0x31,0x66,0x31,0x22,0x2c,0x0a,0x22,0x24,0x20,0x63,0x20,0x23,
+ 0x33,0x32,0x33,0x32,0x35,0x61,0x35,0x61,0x66,0x61,0x66,0x61,0x22,0x2c,
+ 0x0a,0x22,0x25,0x20,0x63,0x20,0x23,0x33,0x35,0x33,0x35,0x36,0x35,0x36,
+ 0x35,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x26,0x20,0x63,0x20,0x23,
+ 0x33,0x39,0x33,0x39,0x36,0x34,0x36,0x34,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x2a,0x20,0x63,0x20,0x23,0x33,0x65,0x33,0x65,0x36,0x39,0x36,
+ 0x39,0x66,0x65,0x66,0x65,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x63,0x20,0x23,
+ 0x34,0x39,0x34,0x39,0x35,0x64,0x35,0x64,0x62,0x63,0x62,0x63,0x22,0x2c,
+ 0x0a,0x22,0x2d,0x20,0x63,0x20,0x23,0x36,0x32,0x36,0x32,0x37,0x37,0x37,
+ 0x37,0x62,0x62,0x62,0x62,0x22,0x2c,0x0a,0x22,0x3b,0x20,0x63,0x20,0x23,
+ 0x36,0x38,0x36,0x38,0x37,0x64,0x37,0x64,0x62,0x38,0x62,0x38,0x22,0x2c,
+ 0x0a,0x22,0x3a,0x20,0x63,0x20,0x23,0x34,0x30,0x34,0x30,0x35,0x64,0x35,
+ 0x64,0x63,0x61,0x63,0x61,0x22,0x2c,0x0a,0x22,0x3e,0x20,0x63,0x20,0x23,
+ 0x34,0x39,0x34,0x39,0x36,0x33,0x36,0x33,0x63,0x36,0x63,0x36,0x22,0x2c,
+ 0x0a,0x22,0x2c,0x20,0x63,0x20,0x23,0x35,0x30,0x35,0x30,0x37,0x31,0x37,
+ 0x31,0x64,0x66,0x64,0x66,0x22,0x2c,0x0a,0x22,0x3c,0x20,0x63,0x20,0x23,
+ 0x34,0x63,0x34,0x63,0x37,0x35,0x37,0x35,0x65,0x39,0x65,0x39,0x22,0x2c,
+ 0x0a,0x22,0x31,0x20,0x63,0x20,0x23,0x35,0x63,0x35,0x63,0x37,0x61,0x37,
+ 0x61,0x65,0x61,0x65,0x61,0x22,0x2c,0x0a,0x22,0x32,0x20,0x63,0x20,0x23,
+ 0x37,0x39,0x37,0x39,0x38,0x39,0x38,0x39,0x61,0x66,0x61,0x66,0x22,0x2c,
+ 0x0a,0x22,0x33,0x20,0x63,0x20,0x23,0x35,0x34,0x35,0x34,0x38,0x34,0x38,
+ 0x34,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x34,0x20,0x63,0x20,0x23,
+ 0x35,0x64,0x35,0x64,0x38,0x65,0x38,0x65,0x66,0x64,0x66,0x64,0x22,0x2c,
+ 0x0a,0x22,0x35,0x20,0x63,0x20,0x23,0x36,0x65,0x36,0x65,0x38,0x35,0x38,
+ 0x35,0x63,0x35,0x63,0x35,0x22,0x2c,0x0a,0x22,0x36,0x20,0x63,0x20,0x23,
+ 0x36,0x37,0x36,0x37,0x39,0x36,0x39,0x36,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x37,0x20,0x63,0x20,0x23,0x36,0x64,0x36,0x64,0x39,0x38,0x39,
+ 0x38,0x66,0x30,0x66,0x30,0x22,0x2c,0x0a,0x22,0x38,0x20,0x63,0x20,0x23,
+ 0x36,0x64,0x36,0x64,0x39,0x62,0x39,0x62,0x66,0x61,0x66,0x61,0x22,0x2c,
+ 0x0a,0x22,0x39,0x20,0x63,0x20,0x23,0x37,0x39,0x37,0x39,0x39,0x38,0x39,
+ 0x38,0x65,0x38,0x65,0x38,0x22,0x2c,0x0a,0x22,0x30,0x20,0x63,0x20,0x23,
+ 0x36,0x63,0x36,0x63,0x61,0x30,0x61,0x30,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x71,0x20,0x63,0x20,0x23,0x37,0x66,0x37,0x66,0x61,0x30,0x61,
+ 0x30,0x65,0x33,0x65,0x33,0x22,0x2c,0x0a,0x22,0x77,0x20,0x63,0x20,0x23,
+ 0x37,0x36,0x37,0x36,0x61,0x36,0x61,0x36,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x65,0x20,0x63,0x20,0x23,0x37,0x63,0x37,0x63,0x61,0x38,0x61,
+ 0x38,0x66,0x32,0x66,0x32,0x22,0x2c,0x0a,0x22,0x72,0x20,0x63,0x20,0x23,
+ 0x37,0x66,0x37,0x66,0x61,0x66,0x61,0x66,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x74,0x20,0x63,0x20,0x23,0x38,0x38,0x38,0x38,0x61,0x32,0x61,
+ 0x32,0x66,0x30,0x66,0x30,0x22,0x2c,0x0a,0x22,0x79,0x20,0x63,0x20,0x23,
+ 0x38,0x36,0x38,0x36,0x62,0x36,0x62,0x36,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x75,0x20,0x63,0x20,0x23,0x38,0x38,0x38,0x38,0x62,0x37,0x62,
+ 0x37,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x69,0x20,0x63,0x20,0x23,
+ 0x38,0x63,0x38,0x63,0x62,0x38,0x62,0x38,0x66,0x30,0x66,0x30,0x22,0x2c,
+ 0x0a,0x22,0x70,0x20,0x63,0x20,0x23,0x38,0x66,0x38,0x66,0x62,0x66,0x62,
+ 0x66,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x61,0x20,0x63,0x20,0x23,
+ 0x39,0x35,0x39,0x35,0x63,0x37,0x63,0x37,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x73,0x20,0x63,0x20,0x23,0x39,0x37,0x39,0x37,0x63,0x38,0x63,
+ 0x38,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x64,0x20,0x63,0x20,0x23,
+ 0x39,0x64,0x39,0x64,0x63,0x66,0x63,0x66,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x66,0x20,0x63,0x20,0x23,0x39,0x66,0x39,0x66,0x64,0x32,0x64,
+ 0x32,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x67,0x20,0x63,0x20,0x23,
+ 0x61,0x32,0x61,0x32,0x64,0x30,0x64,0x30,0x66,0x30,0x66,0x30,0x22,0x2c,
+ 0x0a,0x22,0x68,0x20,0x63,0x20,0x23,0x61,0x31,0x61,0x31,0x64,0x30,0x64,
+ 0x30,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x6a,0x20,0x63,0x20,0x23,
+ 0x61,0x39,0x61,0x39,0x64,0x65,0x64,0x65,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x6b,0x20,0x63,0x20,0x23,0x62,0x31,0x62,0x31,0x64,0x37,0x64,
+ 0x37,0x66,0x32,0x66,0x32,0x22,0x2c,0x0a,0x22,0x6c,0x20,0x63,0x20,0x23,
+ 0x62,0x65,0x62,0x65,0x64,0x62,0x64,0x62,0x66,0x35,0x66,0x35,0x22,0x2c,
+ 0x0a,0x22,0x7a,0x20,0x63,0x20,0x23,0x62,0x63,0x62,0x63,0x64,0x39,0x64,
+ 0x39,0x66,0x65,0x66,0x65,0x22,0x2c,0x0a,0x22,0x78,0x20,0x63,0x20,0x23,
+ 0x61,0x64,0x61,0x64,0x65,0x32,0x65,0x32,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x63,0x20,0x63,0x20,0x23,0x62,0x39,0x62,0x39,0x65,0x35,0x65,
+ 0x35,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x76,0x20,0x63,0x20,0x23,
+ 0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x63,0x30,0x22,0x2c,
+ 0x0a,0x22,0x62,0x20,0x63,0x20,0x23,0x63,0x63,0x63,0x63,0x66,0x30,0x66,
+ 0x30,0x66,0x32,0x66,0x32,0x22,0x2c,0x0a,0x22,0x6e,0x20,0x63,0x20,0x23,
+ 0x63,0x64,0x63,0x64,0x66,0x36,0x66,0x36,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x6d,0x20,0x63,0x20,0x23,0x65,0x32,0x65,0x32,0x66,0x66,0x66,
+ 0x66,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x4d,0x20,0x63,0x20,0x4e,
+ 0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x2f,0x2a,0x20,0x70,0x69,0x78,0x65,0x6c,
+ 0x73,0x20,0x2a,0x2f,0x0a,0x22,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
+ 0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x22,0x2c,0x0a,0x22,0x4d,0x4d,
+ 0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x71,0x32,0x4d,0x4d,0x4d,0x4d,0x4d,
+ 0x22,0x2c,0x0a,0x22,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x62,
+ 0x72,0x35,0x4d,0x4d,0x4d,0x4d,0x22,0x2c,0x0a,0x22,0x4d,0x4d,0x4d,0x4d,
+ 0x4d,0x4d,0x4d,0x4d,0x4d,0x64,0x6a,0x36,0x35,0x4d,0x4d,0x4d,0x22,0x2c,
+ 0x0a,0x22,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x71,0x73,0x64,
+ 0x77,0x35,0x4d,0x4d,0x22,0x2c,0x0a,0x22,0x32,0x74,0x71,0x71,0x35,0x71,
+ 0x4d,0x4d,0x32,0x79,0x70,0x70,0x61,0x36,0x2d,0x4d,0x22,0x2c,0x0a,0x22,
+ 0x69,0x6d,0x6e,0x63,0x6c,0x6c,0x67,0x6b,0x7a,0x79,0x72,0x79,0x79,0x70,
+ 0x34,0x3b,0x22,0x2c,0x0a,0x22,0x65,0x78,0x61,0x61,0x73,0x61,0x64,0x68,
+ 0x61,0x72,0x72,0x72,0x72,0x72,0x38,0x3c,0x22,0x2c,0x0a,0x22,0x37,0x66,
+ 0x75,0x79,0x72,0x77,0x77,0x30,0x72,0x72,0x72,0x72,0x77,0x36,0x2a,0x58,
+ 0x22,0x2c,0x0a,0x22,0x2c,0x30,0x33,0x2a,0x25,0x24,0x40,0x2b,0x26,0x72,
+ 0x72,0x77,0x38,0x25,0x2e,0x3b,0x22,0x2c,0x0a,0x22,0x32,0x58,0x6f,0x4f,
+ 0x3e,0x3b,0x32,0x32,0x2d,0x38,0x77,0x38,0x25,0x20,0x3d,0x4d,0x22,0x2c,
+ 0x0a,0x22,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x39,0x36,0x24,
+ 0x20,0x3e,0x4d,0x4d,0x22,0x2c,0x0a,0x22,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
+ 0x4d,0x4d,0x4d,0x31,0x25,0x2e,0x3e,0x4d,0x4d,0x4d,0x22,0x2c,0x0a,0x22,
+ 0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x23,0x20,0x3e,0x4d,0x4d,
+ 0x4d,0x4d,0x22,0x2c,0x0a,0x22,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
+ 0x4d,0x3a,0x2d,0x4d,0x4d,0x4d,0x4d,0x4d,0x22,0x2c,0x0a,0x22,0x4d,0x4d,
+ 0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
+ 0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int mini_up_xpm_len = 1378;
+static const unsigned char mini_up_xpm_data[] = {
+ 0x2f,0x2a,0x20,0x58,0x50,0x4d,0x20,0x2a,0x2f,0x0a,0x73,0x74,0x61,0x74,
+ 0x69,0x63,0x20,0x63,0x68,0x61,0x72,0x20,0x2a,0x6d,0x61,0x67,0x69,0x63,
+ 0x6b,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x2f,0x2a,0x20,0x63,0x6f,0x6c,
+ 0x75,0x6d,0x6e,0x73,0x20,0x72,0x6f,0x77,0x73,0x20,0x63,0x6f,0x6c,0x6f,
+ 0x72,0x73,0x20,0x63,0x68,0x61,0x72,0x73,0x2d,0x70,0x65,0x72,0x2d,0x70,
+ 0x69,0x78,0x65,0x6c,0x20,0x2a,0x2f,0x0a,0x22,0x31,0x36,0x20,0x31,0x36,
+ 0x20,0x34,0x36,0x20,0x31,0x22,0x2c,0x0a,0x22,0x20,0x20,0x63,0x20,0x23,
+ 0x31,0x36,0x31,0x36,0x33,0x36,0x33,0x36,0x65,0x62,0x65,0x62,0x22,0x2c,
+ 0x0a,0x22,0x2e,0x20,0x63,0x20,0x23,0x31,0x37,0x31,0x37,0x33,0x61,0x33,
+ 0x61,0x65,0x63,0x65,0x63,0x22,0x2c,0x0a,0x22,0x58,0x20,0x63,0x20,0x23,
+ 0x31,0x61,0x31,0x61,0x33,0x66,0x33,0x66,0x66,0x33,0x66,0x33,0x22,0x2c,
+ 0x0a,0x22,0x6f,0x20,0x63,0x20,0x23,0x31,0x62,0x31,0x62,0x34,0x33,0x34,
+ 0x33,0x66,0x65,0x66,0x65,0x22,0x2c,0x0a,0x22,0x4f,0x20,0x63,0x20,0x23,
+ 0x33,0x66,0x33,0x66,0x35,0x36,0x35,0x36,0x64,0x31,0x64,0x31,0x22,0x2c,
+ 0x0a,0x22,0x2b,0x20,0x63,0x20,0x23,0x32,0x62,0x32,0x62,0x35,0x63,0x35,
+ 0x63,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x40,0x20,0x63,0x20,0x23,
+ 0x33,0x31,0x33,0x31,0x35,0x66,0x35,0x66,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x23,0x20,0x63,0x20,0x23,0x33,0x36,0x33,0x36,0x36,0x37,0x36,
+ 0x37,0x66,0x65,0x66,0x65,0x22,0x2c,0x0a,0x22,0x24,0x20,0x63,0x20,0x23,
+ 0x33,0x62,0x33,0x62,0x36,0x36,0x36,0x36,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x25,0x20,0x63,0x20,0x23,0x33,0x66,0x33,0x66,0x36,0x65,0x36,
+ 0x65,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x26,0x20,0x63,0x20,0x23,
+ 0x36,0x39,0x36,0x39,0x37,0x62,0x37,0x62,0x62,0x38,0x62,0x38,0x22,0x2c,
+ 0x0a,0x22,0x2a,0x20,0x63,0x20,0x23,0x34,0x64,0x34,0x64,0x36,0x35,0x36,
+ 0x35,0x63,0x63,0x63,0x63,0x22,0x2c,0x0a,0x22,0x3d,0x20,0x63,0x20,0x23,
+ 0x35,0x31,0x35,0x31,0x36,0x63,0x36,0x63,0x63,0x65,0x63,0x65,0x22,0x2c,
+ 0x0a,0x22,0x2d,0x20,0x63,0x20,0x23,0x35,0x35,0x35,0x35,0x37,0x32,0x37,
+ 0x32,0x63,0x65,0x63,0x65,0x22,0x2c,0x0a,0x22,0x3b,0x20,0x63,0x20,0x23,
+ 0x35,0x38,0x35,0x38,0x37,0x31,0x37,0x31,0x63,0x37,0x63,0x37,0x22,0x2c,
+ 0x0a,0x22,0x3a,0x20,0x63,0x20,0x23,0x34,0x32,0x34,0x32,0x36,0x64,0x36,
+ 0x64,0x65,0x64,0x65,0x64,0x22,0x2c,0x0a,0x22,0x3e,0x20,0x63,0x20,0x23,
+ 0x34,0x37,0x34,0x37,0x37,0x37,0x37,0x37,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x2c,0x20,0x63,0x20,0x23,0x34,0x61,0x34,0x61,0x37,0x61,0x37,
+ 0x61,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x3c,0x20,0x63,0x20,0x23,
+ 0x36,0x34,0x36,0x34,0x37,0x62,0x37,0x62,0x63,0x30,0x63,0x30,0x22,0x2c,
+ 0x0a,0x22,0x31,0x20,0x63,0x20,0x23,0x37,0x32,0x37,0x32,0x38,0x37,0x38,
+ 0x37,0x62,0x62,0x62,0x62,0x22,0x2c,0x0a,0x22,0x32,0x20,0x63,0x20,0x23,
+ 0x35,0x30,0x35,0x30,0x38,0x35,0x38,0x35,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x33,0x20,0x63,0x20,0x23,0x35,0x63,0x35,0x63,0x38,0x61,0x38,
+ 0x61,0x66,0x37,0x66,0x37,0x22,0x2c,0x0a,0x22,0x34,0x20,0x63,0x20,0x23,
+ 0x36,0x61,0x36,0x61,0x38,0x39,0x38,0x39,0x64,0x37,0x64,0x37,0x22,0x2c,
+ 0x0a,0x22,0x35,0x20,0x63,0x20,0x23,0x36,0x30,0x36,0x30,0x38,0x65,0x38,
+ 0x65,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x36,0x20,0x63,0x20,0x23,
+ 0x36,0x36,0x36,0x36,0x39,0x37,0x39,0x37,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x37,0x20,0x63,0x20,0x23,0x36,0x37,0x36,0x37,0x39,0x38,0x39,
+ 0x38,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x38,0x20,0x63,0x20,0x23,
+ 0x36,0x61,0x36,0x61,0x39,0x62,0x39,0x62,0x66,0x34,0x66,0x34,0x22,0x2c,
+ 0x0a,0x22,0x39,0x20,0x63,0x20,0x23,0x36,0x65,0x36,0x65,0x39,0x65,0x39,
+ 0x65,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x30,0x20,0x63,0x20,0x23,
+ 0x37,0x36,0x37,0x36,0x61,0x37,0x61,0x37,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x71,0x20,0x63,0x20,0x23,0x37,0x37,0x37,0x37,0x61,0x39,0x61,
+ 0x39,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x77,0x20,0x63,0x20,0x23,
+ 0x37,0x38,0x37,0x38,0x61,0x31,0x61,0x31,0x66,0x37,0x66,0x37,0x22,0x2c,
+ 0x0a,0x22,0x65,0x20,0x63,0x20,0x23,0x37,0x65,0x37,0x65,0x61,0x66,0x61,
+ 0x66,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x72,0x20,0x63,0x20,0x23,
+ 0x38,0x39,0x38,0x39,0x62,0x64,0x62,0x64,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x74,0x20,0x63,0x20,0x23,0x39,0x30,0x39,0x30,0x63,0x36,0x63,
+ 0x36,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x79,0x20,0x63,0x20,0x23,
+ 0x39,0x36,0x39,0x36,0x63,0x63,0x63,0x63,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x75,0x20,0x63,0x20,0x23,0x39,0x39,0x39,0x39,0x63,0x39,0x63,
+ 0x39,0x66,0x39,0x66,0x39,0x22,0x2c,0x0a,0x22,0x69,0x20,0x63,0x20,0x23,
+ 0x39,0x64,0x39,0x64,0x64,0x31,0x64,0x31,0x66,0x66,0x66,0x66,0x22,0x2c,
+ 0x0a,0x22,0x70,0x20,0x63,0x20,0x23,0x62,0x32,0x62,0x32,0x63,0x36,0x63,
+ 0x36,0x66,0x34,0x66,0x34,0x22,0x2c,0x0a,0x22,0x61,0x20,0x63,0x20,0x23,
+ 0x62,0x66,0x62,0x66,0x65,0x36,0x65,0x36,0x66,0x65,0x66,0x65,0x22,0x2c,
+ 0x0a,0x22,0x73,0x20,0x63,0x20,0x23,0x63,0x30,0x63,0x30,0x63,0x30,0x63,
+ 0x30,0x63,0x30,0x63,0x30,0x22,0x2c,0x0a,0x22,0x64,0x20,0x63,0x20,0x23,
+ 0x64,0x31,0x64,0x31,0x65,0x30,0x65,0x30,0x66,0x63,0x66,0x63,0x22,0x2c,
+ 0x0a,0x22,0x66,0x20,0x63,0x20,0x23,0x64,0x62,0x64,0x62,0x66,0x39,0x66,
+ 0x39,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x67,0x20,0x63,0x20,0x23,
+ 0x65,0x34,0x65,0x34,0x65,0x62,0x65,0x62,0x66,0x63,0x66,0x63,0x22,0x2c,
+ 0x0a,0x22,0x68,0x20,0x63,0x20,0x23,0x65,0x37,0x65,0x37,0x66,0x66,0x66,
+ 0x66,0x66,0x66,0x66,0x66,0x22,0x2c,0x0a,0x22,0x6a,0x20,0x63,0x20,0x47,
+ 0x72,0x61,0x79,0x31,0x30,0x30,0x22,0x2c,0x0a,0x22,0x6b,0x20,0x63,0x20,
+ 0x4e,0x6f,0x6e,0x65,0x22,0x2c,0x0a,0x2f,0x2a,0x20,0x70,0x69,0x78,0x65,
+ 0x6c,0x73,0x20,0x2a,0x2f,0x0a,0x22,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x31,
+ 0x70,0x77,0x31,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x22,0x2c,0x0a,0x22,0x6b,
+ 0x6b,0x6b,0x6b,0x6b,0x31,0x67,0x66,0x69,0x3e,0x3b,0x6b,0x6b,0x6b,0x6b,
+ 0x6b,0x22,0x2c,0x0a,0x22,0x6b,0x6b,0x6b,0x6b,0x31,0x67,0x68,0x75,0x72,
+ 0x65,0x3e,0x26,0x6b,0x6b,0x6b,0x6b,0x22,0x2c,0x0a,0x22,0x6b,0x6b,0x6b,
+ 0x31,0x67,0x68,0x74,0x65,0x30,0x30,0x39,0x40,0x3c,0x6b,0x6b,0x6b,0x22,
+ 0x2c,0x0a,0x22,0x6b,0x6b,0x31,0x6a,0x68,0x72,0x30,0x30,0x39,0x39,0x39,
+ 0x39,0x23,0x26,0x6b,0x6b,0x22,0x2c,0x0a,0x22,0x6b,0x31,0x64,0x68,0x79,
+ 0x30,0x30,0x39,0x39,0x39,0x39,0x39,0x39,0x2b,0x26,0x6b,0x22,0x2c,0x0a,
+ 0x22,0x6b,0x34,0x61,0x75,0x71,0x30,0x39,0x39,0x39,0x39,0x37,0x36,0x33,
+ 0x24,0x2e,0x6b,0x22,0x2c,0x0a,0x22,0x6b,0x31,0x6b,0x31,0x6b,0x31,0x3e,
+ 0x39,0x39,0x24,0x2a,0x6b,0x77,0x31,0x31,0x6b,0x22,0x2c,0x0a,0x22,0x6b,
+ 0x6b,0x6b,0x6b,0x6b,0x6b,0x3a,0x71,0x37,0x6f,0x31,0x6b,0x6b,0x6b,0x6b,
+ 0x6b,0x22,0x2c,0x0a,0x22,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x33,0x65,0x36,
+ 0x2b,0x31,0x6b,0x6b,0x6b,0x6b,0x6b,0x22,0x2c,0x0a,0x22,0x6b,0x6b,0x6b,
+ 0x6b,0x6b,0x31,0x38,0x65,0x39,0x40,0x3b,0x6b,0x6b,0x6b,0x6b,0x6b,0x22,
+ 0x2c,0x0a,0x22,0x6b,0x6b,0x6b,0x6b,0x6b,0x31,0x65,0x71,0x36,0x24,0x4f,
+ 0x6b,0x6b,0x6b,0x6b,0x6b,0x22,0x2c,0x0a,0x22,0x6b,0x6b,0x6b,0x6b,0x6b,
+ 0x31,0x72,0x30,0x36,0x3e,0x2e,0x6b,0x6b,0x6b,0x6b,0x6b,0x22,0x2c,0x0a,
+ 0x22,0x6b,0x6b,0x6b,0x6b,0x6b,0x34,0x65,0x36,0x35,0x2c,0x2e,0x6b,0x6b,
+ 0x6b,0x6b,0x6b,0x22,0x2c,0x0a,0x22,0x6b,0x6b,0x6b,0x6b,0x6b,0x2d,0x32,
+ 0x25,0x23,0x23,0x58,0x31,0x6b,0x6b,0x6b,0x6b,0x22,0x2c,0x0a,0x22,0x6b,
+ 0x6b,0x6b,0x6b,0x6b,0x31,0x2e,0x2e,0x2e,0x20,0x3d,0x6b,0x6b,0x6b,0x6b,
+ 0x6b,0x22,0x0a,0x7d,0x3b,0x0a
+};
+
+static const unsigned int background_png_len = 15068;
+static const unsigned char background_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xa5,0x08,0x02,0x00,0x00,
+ 0x00,0x47,0xb7,0x21,0x3d,0x00,0x00,0x00,0x07,0x74,0x49,0x4d,0x45,0x07,
+ 0xd4,0x08,0x03,0x00,0x22,0x0a,0x20,0xd9,0xbf,0x88,0x00,0x00,0x00,0x06,
+ 0x62,0x4b,0x47,0x44,0x00,0xff,0x00,0xff,0x00,0xff,0xa0,0xbd,0xa7,0x93,
+ 0x00,0x00,0x00,0x09,0x70,0x48,0x59,0x73,0x00,0x00,0x0b,0x10,0x00,0x00,
+ 0x0b,0x10,0x01,0xad,0x23,0xbd,0x75,0x00,0x00,0x3a,0x69,0x49,0x44,0x41,
+ 0x54,0x78,0xda,0xb5,0x7d,0xdb,0x92,0xe3,0x48,0x8e,0x25,0x00,0x77,0x4a,
+ 0x8a,0xc8,0x2e,0xb3,0x7d,0xea,0xff,0x7f,0xea,0x4f,0x9b,0x97,0x9d,0x59,
+ 0xb3,0xe9,0x0c,0x5d,0xe9,0xee,0xd8,0x07,0x90,0x20,0xe8,0x37,0xba,0x94,
+ 0xd5,0xd1,0xd5,0x59,0x51,0x91,0x0a,0x8a,0x22,0x1c,0xf7,0x83,0x03,0xfc,
+ 0xd7,0xbf,0xfe,0x05,0x00,0x88,0xc8,0xcc,0xcc,0x0c,0x00,0xfa,0xa7,0x7c,
+ 0x13,0x63,0xe4,0x14,0xbc,0xf7,0xde,0x7b,0x24,0xe2,0x94,0x52,0x8c,0x89,
+ 0x13,0x30,0x00,0x82,0xfc,0x2e,0x00,0x20,0xe0,0x7a,0x1d,0x40,0xc4,0xf3,
+ 0xe5,0xcc,0x40,0x21,0x84,0x94,0x12,0x33,0xcb,0x6b,0xe4,0x82,0x21,0x84,
+ 0xd7,0xeb,0x75,0x3a,0x9d,0xfe,0xfa,0xeb,0xaf,0xd7,0xeb,0xf5,0x7a,0xbd,
+ 0xf4,0xbd,0xf4,0x6b,0xb9,0x26,0xa2,0x7c,0x23,0xdf,0xc7,0x18,0x43,0x08,
+ 0xe7,0xf3,0xf9,0xd7,0xaf,0x5f,0x88,0x18,0x42,0x90,0xeb,0x97,0xf7,0xac,
+ 0x5f,0xd9,0x87,0xb2,0x97,0x95,0x5f,0x74,0xce,0x8d,0xff,0x4a,0x76,0x7b,
+ 0xcc,0x1c,0x63,0x64,0x66,0xe7,0xdc,0x5f,0x7f,0xfd,0xe5,0x9c,0xbb,0xdd,
+ 0x6e,0x7a,0x3f,0xf6,0x22,0x7a,0x65,0xfd,0xab,0x18,0xa3,0x73,0x6e,0x9a,
+ 0x26,0x79,0xfd,0xfa,0x82,0xf4,0x7a,0xcd,0x44,0x38,0x4d,0xa7,0xbf,0xfe,
+ 0xfa,0x07,0x22,0xdd,0x6e,0x37,0x00,0x40,0x04,0xf9,0xd5,0x94,0x38,0xa5,
+ 0x94,0x52,0x94,0x4b,0x7d,0x7f,0xff,0xf2,0xde,0xdf,0xef,0x77,0x79,0xc8,
+ 0x7a,0xfd,0xce,0x3d,0xeb,0x9f,0x64,0xef,0xc9,0xde,0xdc,0xee,0x17,0xd0,
+ 0x85,0x79,0x0e,0xf3,0xcc,0x31,0x21,0x22,0x39,0x47,0x48,0x48,0x08,0x80,
+ 0x60,0xa4,0xbe,0x7c,0x4f,0x48,0x84,0xf2,0x93,0xe5,0x6a,0xeb,0xa7,0x65,
+ 0xe6,0x94,0x12,0x27,0x7d,0xa0,0x72,0x8b,0x08,0xfb,0xaf,0xea,0x7d,0xeb,
+ 0x47,0x72,0xce,0x95,0x8f,0x32,0xbb,0xe7,0x52,0x84,0x7a,0xb5,0xec,0xb2,
+ 0xfa,0x5b,0xe5,0x0b,0x70,0xff,0x05,0xed,0xaf,0x18,0xa3,0xbe,0x61,0xf9,
+ 0x30,0xb3,0x5b,0x5a,0xdf,0xae,0xfa,0x01,0x97,0x9f,0x13,0x11,0x00,0x99,
+ 0x13,0x06,0x7a,0xa4,0x11,0x45,0x6a,0xc8,0x0c,0xd7,0xeb,0xf5,0xf5,0x7a,
+ 0x9e,0xcf,0x67,0x22,0xb2,0x8f,0x48,0x7f,0xb1,0x25,0x75,0x00,0x20,0x7d,
+ 0x45,0xa9,0xf1,0xf2,0x73,0x22,0x42,0x44,0x20,0xf7,0x7a,0x85,0x10,0xe6,
+ 0x94,0x12,0x22,0x12,0x39,0x44,0x5a,0x6f,0x1c,0xf5,0xb3,0xa8,0xfa,0xdb,
+ 0xf7,0x83,0x4c,0x81,0x96,0x9f,0x2d,0xc7,0x54,0x9f,0x57,0x47,0xea,0xf2,
+ 0x9f,0xcb,0x9d,0xd4,0x9e,0x69,0x55,0xbd,0xac,0x50,0xad,0x20,0xf5,0x87,
+ 0xfa,0xbc,0x96,0x67,0x41,0x24,0xa7,0x2a,0x93,0x77,0xeb,0x21,0xea,0x0b,
+ 0xbc,0xf7,0xf2,0x6e,0x55,0x45,0x6f,0x7c,0x61,0xe3,0x47,0x08,0x20,0x87,
+ 0x9b,0x5b,0x9f,0xce,0x7c,0x0a,0xbe,0x5e,0x6f,0x62,0x05,0xe5,0xb3,0x94,
+ 0x02,0x6e,0x6a,0x7c,0x66,0x24,0xab,0x4f,0x50,0x1e,0x3b,0x3a,0x91,0x7d,
+ 0xe0,0xc4,0xe8,0xc8,0x39,0x47,0x44,0x88,0xb4,0xda,0x7b,0x5c,0xcd,0xfd,
+ 0xa2,0xfa,0x56,0x00,0xe5,0xc5,0xf5,0x1d,0x46,0xa4,0x9e,0x19,0x58,0xfd,
+ 0xa6,0xbc,0x78,0x29,0xf5,0xaa,0x25,0xe7,0xf5,0xdc,0x11,0xd1,0xe9,0x74,
+ 0x12,0x4f,0x67,0x4f,0x43,0x4b,0xd7,0x4b,0xd5,0x2f,0xcf,0x62,0x55,0xf6,
+ 0xfb,0x83,0x08,0x6a,0xe1,0xed,0xa7,0xc3,0xf5,0x64,0x87,0x10,0x86,0xb4,
+ 0x11,0x90,0x08,0xaf,0xd7,0x9f,0xd7,0xeb,0x75,0xb9,0x5c,0xe4,0x87,0xe5,
+ 0x6d,0x67,0x0f,0x50,0xfe,0xd6,0xb7,0xb4,0x27,0x7b,0x63,0x79,0x22,0x8c,
+ 0x10,0x42,0x44,0x80,0x09,0x4f,0x48,0x44,0x0e,0x39,0x45,0x66,0x94,0xd3,
+ 0xb9,0x1a,0x7d,0x51,0x6a,0x04,0x80,0xbd,0x03,0xab,0x1c,0xdb,0xaa,0xd4,
+ 0x3b,0x66,0x9f,0x88,0x88,0xc8,0xfa,0xf5,0xce,0x3d,0x97,0xa6,0x2f,0x8b,
+ 0x36,0xe4,0x61,0x01,0xc0,0x3c,0xcf,0x29,0x25,0xb9,0x78,0xdf,0xaa,0x97,
+ 0x8f,0x92,0x99,0x43,0x08,0x55,0xfd,0xe9,0x5c,0x60,0x35,0x2d,0xf5,0xf3,
+ 0xe4,0xbd,0xb7,0x16,0xa1,0x25,0xfb,0x94,0xa2,0x08,0xe7,0x7e,0xbf,0x33,
+ 0xf3,0xd7,0xd7,0xd7,0xeb,0xf5,0x5a,0xfd,0x4e,0xf3,0x86,0x97,0x5f,0xaf,
+ 0x06,0x74,0xad,0x4f,0x8b,0x48,0x48,0x6e,0x0e,0x21,0xc4,0xc0,0x9c,0x08,
+ 0x90,0xc8,0x11,0x11,0x12,0x88,0xb3,0xb6,0xd6,0xbe,0xef,0x80,0x33,0x63,
+ 0x60,0x4f,0x43,0x4b,0xc9,0xe4,0x9b,0x7e,0x34,0x57,0xc6,0x04,0xd5,0xc3,
+ 0xe1,0x9c,0xfb,0xf5,0xeb,0xd7,0xe9,0x74,0x4a,0x29,0x85,0x10,0x24,0x46,
+ 0x2b,0x9f,0x4e,0x2b,0xf8,0xc8,0x7e,0x2e,0x11,0xa2,0x9e,0xf2,0xd6,0x2d,
+ 0x95,0xbe,0x66,0xb1,0x94,0xfa,0xb7,0xeb,0xc5,0x63,0x0c,0x50,0xb3,0x1f,
+ 0xc5,0xb3,0xa2,0xf5,0xf7,0xf8,0x7e,0xbf,0x85,0x30,0x9f,0x4e,0x27,0x1b,
+ 0x03,0x15,0x6f,0xb7,0x3d,0x0a,0x3f,0x18,0x12,0xab,0xc2,0x31,0x33,0xe3,
+ 0x34,0xcf,0x33,0x03,0x4c,0xde,0x3b,0x72,0x8c,0xcc,0x8c,0x6c,0xe3,0x7c,
+ 0x40,0x40,0x60,0x4e,0xd5,0xe8,0x26,0x2d,0xc1,0x1d,0x94,0x91,0x73,0xf5,
+ 0x49,0x65,0x1f,0x40,0x1f,0x71,0xd5,0x98,0xb7,0x8e,0x82,0x8d,0xef,0x2e,
+ 0x97,0x8b,0x7c,0xf3,0x78,0x3c,0xe4,0x52,0x44,0x24,0xe2,0x1f,0xd4,0x78,
+ 0x6b,0x42,0x24,0x44,0xef,0x8b,0xbc,0x34,0x6c,0x99,0xf1,0x33,0x1f,0x18,
+ 0x98,0x01,0x10,0x53,0x62,0xe7,0xac,0xcf,0xac,0x5c,0x9c,0x08,0x01,0x28,
+ 0xa5,0x84,0x80,0x8c,0x78,0xbd,0x5e,0xbf,0xbf,0xbf,0xce,0xe7,0xf3,0xeb,
+ 0x35,0x5b,0xbd,0xcf,0x1e,0xa3,0xdc,0xb3,0x1f,0x0c,0x89,0x6d,0x04,0xc4,
+ 0xcc,0x0c,0x3e,0x86,0x88,0x80,0x38,0x2d,0x9e,0x85,0x13,0x32,0x32,0x83,
+ 0xfc,0x0f,0x20,0x81,0x08,0xb8,0x26,0x15,0x11,0x36,0xf5,0x63,0xf8,0xc3,
+ 0xe8,0x7a,0xc4,0xb5,0x67,0x7a,0x3c,0x4d,0x93,0x28,0x84,0x18,0xe7,0xaa,
+ 0x9c,0x4a,0x1f,0xd4,0x91,0x7a,0xf9,0x9f,0x9d,0x48,0xbe,0xfa,0x16,0xf2,
+ 0x8d,0xf9,0xa4,0xc4,0x9c,0x38,0x71,0x4a,0xc9,0x39,0x97,0xbd,0x51,0x29,
+ 0x22,0x44,0x20,0xc2,0x94,0x08,0x81,0x11,0xe1,0xf1,0x78,0x00,0xe0,0xe9,
+ 0x74,0x9a,0x67,0x94,0x40,0xa1,0x8c,0x90,0x16,0x6f,0xd2,0x72,0x93,0xd5,
+ 0x70,0x66,0xbb,0x3f,0xe7,0x52,0xc2,0x18,0xa3,0x23,0x44,0x9c,0x88,0x00,
+ 0x1d,0x72,0xc2,0xc4,0x89,0x39,0x01,0x42,0xea,0x2a,0x9f,0x9c,0xd6,0xcc,
+ 0x3c,0xee,0x6e,0x51,0xed,0xde,0x12,0x3d,0x2e,0x67,0x0e,0x80,0xcb,0x74,
+ 0xae,0x1a,0x5b,0x65,0xba,0x2e,0x41,0x9c,0x73,0x4e,0x53,0xff,0xf2,0x59,
+ 0x7c,0xfc,0x25,0xc2,0x23,0x22,0xef,0xbd,0xa6,0xd4,0x55,0x79,0x9b,0xef,
+ 0xb7,0x0f,0x65,0x23,0x21,0x7d,0xa5,0xfc,0x50,0x94,0xa7,0xf1,0xa1,0xc0,
+ 0xa4,0x27,0xc8,0x9c,0x98,0xc5,0xe6,0xdf,0x89,0xe8,0x74,0x9a,0x34,0xcf,
+ 0x2c,0xb3,0xe2,0xc5,0xc7,0x67,0x77,0x59,0xbd,0xef,0x32,0x50,0x74,0xce,
+ 0x91,0xf3,0x73,0x08,0x21,0x04,0x66,0x00,0x24,0x74,0x48,0x48,0x40,0x44,
+ 0x8e,0x00,0xd8,0x56,0x15,0xcc,0x65,0x13,0x00,0xfe,0xcf,0xff,0xfc,0x37,
+ 0x91,0x5b,0x2f,0x88,0x12,0x55,0x69,0x08,0x49,0x1a,0x9e,0xae,0xae,0x43,
+ 0xaf,0xe3,0x9c,0x17,0xc1,0xc7,0x18,0xe5,0xfa,0x65,0x6d,0xa4,0xbc,0xed,
+ 0xd3,0xe9,0x34,0x4d,0x13,0x00,0xd8,0xd8,0xa7,0x34,0xe9,0x1a,0x4b,0x57,
+ 0xad,0x7d,0xe6,0x8f,0x54,0x5f,0x45,0x48,0x8f,0xc7,0xe3,0xf1,0xb8,0x8b,
+ 0x20,0xa7,0x69,0xf2,0xde,0x4f,0xd3,0x34,0x4d,0x93,0x8d,0xb4,0xb3,0xab,
+ 0xc9,0x47,0x50,0xb5,0x36,0x29,0x2b,0x88,0xdf,0x89,0x31,0x4e,0xd3,0xa4,
+ 0x36,0x32,0x4b,0xfc,0xcc,0x0d,0x00,0x11,0x3a,0x47,0x44,0x80,0x88,0x84,
+ 0x78,0xbb,0x5e,0x5f,0xaf,0xd7,0xf9,0x7c,0xb6,0x17,0xcf,0x1e,0x94,0x1f,
+ 0x39,0xf2,0x9d,0x1a,0x10,0x90,0x8f,0x29,0x62,0x80,0x69,0xf2,0x62,0xbf,
+ 0x31,0x02,0x20,0xa6,0x68,0xa5,0x02,0x7a,0xeb,0xcc,0xc0,0x9c,0xfe,0xf9,
+ 0xcf,0x7f,0xea,0xa1,0x26,0xca,0x1c,0xfc,0x56,0xa9,0x00,0x63,0xed,0xad,
+ 0x3d,0x4c,0x29,0xc9,0x53,0xab,0x86,0x8a,0x5b,0xe0,0x4a,0x24,0x5a,0x68,
+ 0x6a,0x2c,0x15,0x47,0x9b,0x85,0xfa,0x23,0xc1,0x7c,0x96,0x9b,0xc8,0xed,
+ 0xc5,0x98,0x62,0x4c,0x7b,0x6d,0x46,0x44,0xf0,0xde,0xdb,0x5a,0xa1,0xb9,
+ 0xcd,0xa4,0x07,0x7d,0xff,0xd6,0xc8,0x6b,0x8d,0x6e,0xfd,0xbc,0x9c,0x1b,
+ 0x4d,0x71,0x97,0x6b,0x05,0x45,0xfe,0x21,0xc2,0x94,0x12,0x03,0x20,0xe2,
+ 0xe3,0xfe,0x00,0xc0,0xcb,0xe5,0x3c,0xcf,0x4b,0xe8,0x9a,0x29,0x86,0x1f,
+ 0x74,0xed,0xd5,0x47,0xb0,0xf8,0x7b,0x46,0x79,0xac,0xf2,0x88,0x9d,0x73,
+ 0x08,0x94,0x38,0x18,0x49,0x14,0xd1,0x29,0x40,0x08,0xb3,0xba,0xf9,0xe5,
+ 0xe7,0x4b,0x21,0xa0,0x52,0x41,0xb3,0xe2,0x14,0x91,0x67,0xea,0x5e,0xa6,
+ 0x70,0xce,0x39,0x79,0xe2,0xf2,0xe2,0x6a,0x94,0xdb,0x0f,0xbf,0x47,0x5c,
+ 0x80,0xad,0x02,0x59,0xb1,0xc8,0x4d,0xad,0x6f,0x1b,0xf5,0x65,0x44,0xe4,
+ 0xbd,0x14,0x89,0x71,0x75,0x79,0x84,0x48,0xcc,0xd1,0xbc,0x35,0xa4,0x04,
+ 0x9c,0x58,0x8a,0xc1,0x35,0x5f,0xc0,0xa6,0xe2,0x63,0x14,0x12,0x90,0x88,
+ 0x34,0xa6,0x7e,0xdc,0x6f,0xde,0xbb,0xd3,0xe9,0xf4,0x7a,0xbd,0x34,0xe1,
+ 0xdc,0xa2,0xfa,0x96,0x9b,0xac,0x56,0x00,0x32,0x79,0xac,0x7e,0x17,0x42,
+ 0xe0,0xe7,0xf3,0xb9,0xd8,0x7f,0x72,0x89,0x6d,0xd2,0x85,0xe5,0x5b,0x10,
+ 0x62,0x4a,0x8c,0x68,0xe5,0xb1,0x84,0x7b,0x36,0x65,0x97,0xbf,0xcd,0xd2,
+ 0xa4,0xaa,0xd4,0xed,0xa3,0x11,0x63,0x2b,0x87,0x52,0x3e,0x70,0xb5,0x16,
+ 0x5b,0x8d,0x04,0x25,0x9b,0x2f,0xb5,0xbf,0x55,0xe8,0xed,0x1c,0xa0,0x4c,
+ 0x61,0xe4,0x9e,0x53,0x4a,0xf3,0x8b,0x91,0x90,0x88,0xa6,0xc9,0x23,0x11,
+ 0x00,0x38,0x47,0x29,0x59,0x07,0x84,0x00,0x3c,0xcf,0x33,0x11,0x3a,0xf7,
+ 0xe5,0x9c,0x8b,0x31,0xe8,0x9d,0xea,0x1f,0xb9,0xef,0xd0,0x22,0x0a,0x3a,
+ 0xe6,0x24,0xb9,0xc1,0xcf,0xcf,0xcf,0xaf,0xef,0xef,0xd3,0xf9,0x42,0x44,
+ 0xf3,0xbc,0x84,0xfa,0x72,0xb7,0xbe,0xda,0x42,0xe8,0x1b,0xf9,0xbc,0xdb,
+ 0x11,0xa3,0x28,0xba,0x26,0x1f,0xab,0x60,0xf2,0xc7,0xa1,0x02,0x5b,0xca,
+ 0xbd,0xb5,0xf2,0x78,0xf6,0x34,0xed,0x5d,0x95,0xe5,0x91,0x4c,0xea,0x62,
+ 0x36,0x45,0x4b,0xf4,0x8c,0x57,0xdf,0x22,0xbb,0x82,0x9a,0x62,0x11,0x7c,
+ 0x5f,0xe3,0x3f,0x0e,0x06,0x71,0xed,0x65,0x2c,0xad,0x2f,0x66,0xef,0x51,
+ 0x4a,0xe0,0x59,0xdc,0xb0,0x06,0x01,0x72,0x3f,0xc5,0xcd,0xa0,0x1a,0xf9,
+ 0x4c,0xea,0xfa,0xb7,0xc4,0xc0,0x0c,0xec,0x08,0x1f,0xf7,0x3b,0x30,0x9f,
+ 0x2e,0x5f,0x36,0xf3,0x5c,0x7c,0x7c,0x55,0xde,0x07,0xae,0x7d,0x8b,0x6b,
+ 0x62,0x4c,0x29,0xc5,0x30,0x4d,0x5e,0xfa,0x0b,0xa2,0xee,0x56,0x29,0xb3,
+ 0xb7,0x20,0xe9,0xe2,0x20,0x8a,0x6b,0x28,0xcb,0xc3,0x65,0xd5,0xa2,0x7a,
+ 0x28,0xad,0xd4,0xc5,0x2a,0x4e,0xd3,0x24,0xf2,0x2b,0xa5,0x9e,0x7d,0x84,
+ 0xf2,0x52,0x62,0xae,0xe4,0x9b,0x7e,0x51,0x68,0xc4,0xf7,0x1f,0xe6,0x81,
+ 0xb6,0x14,0x61,0xcb,0x91,0x65,0x85,0x60,0x31,0xa2,0x29,0x14,0x75,0x7e,
+ 0xac,0x76,0x00,0x10,0x10,0x08,0x90,0x81,0x19,0x45,0xfc,0xd7,0xdb,0x0d,
+ 0x08,0x4f,0xd3,0x59,0xed,0x25,0x48,0x0b,0xa8,0xfa,0xe8,0xfb,0x4d,0xbd,
+ 0xed,0x03,0xc4,0x94,0x52,0x70,0x8e,0x9c,0xf3,0x44,0x08,0x88,0x31,0xc6,
+ 0x79,0x9e,0x4d,0x35,0x3e,0xaf,0xcf,0x4b,0x83,0x87,0x16,0x2b,0xe7,0x54,
+ 0x0c,0xa5,0x5a,0x97,0xff,0xd9,0xaa,0x62,0xca,0x31,0x12,0x45,0x37,0x76,
+ 0x05,0xab,0xb2,0xaf,0x5e,0xd3,0x16,0xf0,0xab,0xde,0xad,0x5f,0x25,0x1c,
+ 0xb4,0x04,0xf6,0x5d,0xf4,0x7b,0x1b,0xdf,0x49,0x5a,0x28,0x0f,0x47,0x4e,
+ 0x30,0x00,0x48,0x4a,0xb2,0xb7,0xa0,0xa8,0xff,0x89,0xe6,0x24,0xac,0xdd,
+ 0x12,0x6d,0x69,0x49,0xea,0x8d,0x3f,0xbf,0x7f,0xee,0x8f,0xbb,0xf7,0x4e,
+ 0xdb,0x39,0x54,0x2d,0x77,0x8c,0xe4,0x33,0x00,0x12,0x80,0x24,0x47,0xce,
+ 0x4f,0x13,0xae,0x41,0x99,0x18,0x93,0x46,0x95,0x9e,0x11,0x4d,0x83,0x88,
+ 0x28,0x93,0x6e,0x55,0x36,0x23,0xbd,0xb8,0x4e,0x9d,0x35,0xbb,0xf3,0x32,
+ 0xdd,0xb7,0x92,0x6e,0x25,0xdf,0x7f,0x9e,0xeb,0x57,0xfb,0x4c,0x9a,0x9e,
+ 0x88,0x94,0x4a,0x47,0xa6,0xb2,0x97,0xdc,0xa7,0x6c,0xe6,0xa1,0x69,0xea,
+ 0x2d,0xff,0xb5,0x44,0xc8,0x60,0x7a,0x78,0x40,0x88,0xf7,0xdb,0xed,0x71,
+ 0xbf,0x39,0xe7,0xa4,0x29,0xe5,0xab,0xed,0x93,0x6a,0xdd,0xa6,0x7c,0x82,
+ 0x31,0x45,0x44,0xf2,0xde,0xad,0x05,0x17,0x92,0x4f,0xd2,0x51,0x08,0x39,
+ 0x89,0x7a,0x1a,0xab,0xda,0x39,0xd2,0x6e,0xaf,0x16,0xc8,0xb2,0x8a,0x58,
+ 0x35,0xa0,0xeb,0xf8,0x8e,0xec,0xbc,0xfe,0xe7,0xbe,0x6c,0x9f,0x49,0x6c,
+ 0x6f,0x66,0x5f,0x55,0x25,0x62,0x5c,0x32,0x02,0xe7,0x7c,0x4a,0xaf,0x8a,
+ 0x85,0xdf,0x80,0x10,0xe6,0x20,0xac,0xcd,0x70,0x51,0x7d,0x46,0x96,0xd3,
+ 0x70,0xbb,0xde,0x10,0xe9,0x74,0x3a,0xc3,0xf9,0x4c,0xb6,0x8d,0x5f,0xed,
+ 0x40,0x57,0x9b,0xd3,0xab,0x80,0xd9,0x7b,0x5a,0x5a,0x05,0x44,0x9c,0x78,
+ 0x9e,0x83,0x0d,0xe2,0x8a,0x00,0x58,0x52,0x5b,0x52,0x6b,0x56,0x95,0x7a,
+ 0x35,0xde,0x3e,0xac,0xc6,0xdb,0xc7,0x57,0xb6,0x43,0xaa,0x52,0xaf,0x66,
+ 0x71,0x9a,0x3d,0x1f,0xe2,0x2f,0x3e,0x8b,0xf8,0x6c,0xea,0x2f,0x52,0x0f,
+ 0x21,0x68,0xc4,0x63,0x1d,0xbf,0x24,0x44,0x31,0x86,0x79,0x9e,0x9d,0x93,
+ 0x82,0x84,0x4d,0xde,0x60,0x87,0x86,0xd8,0x5a,0x64,0x6a,0xa2,0x98,0x81,
+ 0x11,0x80,0x70,0x01,0xc6,0x90,0xa3,0xdf,0xbf,0x7f,0x8b,0xde,0x93,0x77,
+ 0x74,0x3a,0x9d,0x6c,0x73,0x62,0x44,0xd7,0x53,0x4a,0x00,0x4c,0x4b,0x83,
+ 0x48,0x32,0x75,0x0e,0x36,0xc3,0x36,0x16,0x72,0xdf,0xed,0x76,0xf6,0x99,
+ 0x56,0xcd,0x4c,0x07,0xc7,0x52,0xcd,0xb2,0xec,0x89,0xc9,0xba,0x2c,0xad,
+ 0x34,0xac,0x0e,0x34,0x02,0xa8,0x66,0xfc,0x7f,0xd7,0x57,0x51,0xa1,0x43,
+ 0xeb,0xe9,0x9d,0xdb,0x55,0x72,0xa4,0x10,0x2b,0x55,0xdb,0x94,0x62,0x4a,
+ 0x2c,0xb5,0xb9,0x12,0xb6,0xb1,0x73,0xed,0xf6,0x53,0xb2,0x39,0x20,0x2b,
+ 0x68,0xc6,0x11,0xde,0x6e,0xb7,0xc7,0xed,0x4a,0xcf,0xe7,0xc3,0x3b,0xa7,
+ 0xb2,0xef,0x84,0xf1,0xb9,0xd1,0x06,0x70,0x8b,0x91,0x47,0x22,0x08,0x91,
+ 0xb5,0xe4,0xd9,0x7a,0xca,0xfa,0x99,0x5b,0x52,0x6c,0xe1,0xfe,0x3a,0x0e,
+ 0xbe,0x53,0x63,0xc8,0x4a,0x40,0xfd,0x92,0xbe,0x3d,0x3d,0x83,0x52,0x1f,
+ 0x0f,0xe6,0x3b,0xd8,0x18,0x55,0x7a,0x66,0xc8,0x4e,0xad,0x1a,0xc5,0x18,
+ 0xd3,0x1c,0x02,0x22,0x49,0x94,0x87,0x0d,0xf8,0x8e,0x29,0xe7,0x2c,0x80,
+ 0x20,0x60,0x90,0xb4,0x1a,0xb5,0x01,0x42,0x88,0x88,0xd7,0xdf,0xff,0x97,
+ 0x7e,0xfe,0xfb,0xbf,0xee,0xf7,0x9b,0x77,0xee,0x72,0xb9,0x64,0xad,0xdc,
+ 0xca,0x9f,0x88,0x49,0x02,0x51,0x04,0x3f,0x79,0x04,0x02,0x04,0x42,0x08,
+ 0x11,0x24,0x92,0x57,0x3b,0x09,0x46,0x30,0x22,0x3f,0x71,0x54,0xab,0xc7,
+ 0x72,0xfb,0xb4,0x1e,0x4b,0xd9,0x74,0x1a,0x86,0xad,0x27,0x68,0xa0,0x29,
+ 0x95,0x30,0xbe,0xe3,0xda,0xed,0xdb,0xd9,0xc4,0xfa,0xef,0x92,0x7a,0x27,
+ 0x08,0x15,0x75,0x97,0xca,0xbc,0x94,0x1a,0x6b,0x85,0x23,0xe6,0x18,0xe7,
+ 0x39,0x20,0xd2,0x69,0x9a,0xb6,0x1e,0xc6,0xde,0xc8,0x33,0x02,0x30,0xf0,
+ 0x52,0xcf,0xdd,0x74,0x7e,0xa9,0xef,0x12,0xd2,0x5a,0x27,0x73,0xa7,0xbf,
+ 0x88,0xbe,0xfe,0xcf,0xe3,0xf1,0xfb,0xf1,0xb8,0x3b,0x42,0xd1,0xfb,0x4e,
+ 0x0a,0x97,0x62,0x4c,0x31,0x22,0xb0,0x73,0x6e,0x3d,0x40,0x10,0x13,0xac,
+ 0x65,0x81,0x64,0x31,0x55,0x72,0x09,0x63,0xe4,0x51,0x05,0x63,0xc5,0xdc,
+ 0x71,0xc0,0x83,0x68,0xaa,0x6a,0x44,0xf2,0xc1,0x79,0x1a,0x94,0x65,0xe9,
+ 0xa7,0xde,0x32,0xf2,0x16,0xd1,0xa4,0xfe,0x45,0xa3,0xf7,0x4c,0xf6,0x52,
+ 0x8c,0x62,0x86,0xc4,0x1c,0x63,0x0c,0x31,0x91,0x23,0xe7,0x3d,0x1a,0xa0,
+ 0xa3,0x1a,0x79,0x5c,0x65,0xbc,0xfc,0xc9,0xbb,0x4e,0xc9,0x5a,0x38,0x5b,
+ 0x8c,0x3e,0x11,0x21,0xe1,0xe9,0x76,0xff,0x7f,0xaf,0xd7,0xd3,0xb9,0x25,
+ 0xcf,0xab,0x56,0xe8,0x96,0xbe,0x08,0x27,0x7d,0xb8,0x84,0x90,0x18,0x62,
+ 0x8a,0x6b,0x62,0xba,0xb4,0x0b,0x37,0xa1,0x6e,0x2d,0x17,0x29,0x53,0x6c,
+ 0x3d,0x09,0x85,0x5d,0x57,0xd3,0x98,0x41,0x34,0x55,0xbf,0x8b,0xdf,0x0a,
+ 0x17,0x3a,0x41,0x43,0xdf,0xc7,0xb5,0xf2,0x8e,0xb7,0x12,0xb9,0x4e,0x72,
+ 0xaf,0x39,0x7d,0x35,0xe4,0x8c,0x31,0x86,0x79,0x8e,0x31,0x39,0xe7,0x9c,
+ 0xf7,0x8a,0x70,0x5e,0xe1,0xab,0xfb,0x4f,0xb7,0x29,0x3d,0xab,0xdc,0x97,
+ 0x74,0x7a,0xb1,0xd3,0x84,0x48,0xe8,0xdd,0xaf,0xeb,0xcf,0xff,0x3e,0xee,
+ 0x57,0x47,0xa4,0xed,0xbc,0x0c,0x85,0x9e,0x52,0xe2,0x14,0x01,0xd8,0x79,
+ 0x27,0x1a,0x9c,0x00,0xe7,0x10,0x63,0xd4,0x72,0x04,0x64,0xaa,0xac,0xdf,
+ 0x4f,0x7e,0xf2,0x7e,0x5a,0x61,0xb5,0x4d,0x83,0x79,0x08,0xaa,0x69,0x15,
+ 0xde,0x35,0x48,0xee,0x84,0x8a,0x1d,0xa9,0x5b,0x8d,0xb7,0x2e,0xa3,0x83,
+ 0xb4,0x3c,0xac,0xe7,0xb4,0x02,0xcc,0xea,0x97,0x73,0xce,0x7b,0x27,0x23,
+ 0x06,0x52,0x7f,0xdc,0xf7,0x81,0xb4,0x01,0x18,0x43,0x08,0x31,0x26,0xef,
+ 0xbd,0x77,0x93,0x3e,0x83,0x45,0xc0,0xbc,0x37,0xee,0x59,0x98,0xb7,0xba,
+ 0x00,0x44,0xa0,0x25,0xa9,0x16,0xf5,0x75,0xd3,0xe3,0xf1,0x78,0x3c,0x96,
+ 0x96,0x8e,0x02,0x8d,0xb7,0x0f,0xc9,0x09,0x11,0xa6,0x69,0x12,0xbd,0x4d,
+ 0x0c,0x76,0x9e,0x61,0x39,0x67,0x46,0xea,0x5a,0x9e,0xf2,0xde,0x9d,0xcf,
+ 0x27,0x3d,0xb6,0x5a,0x1f,0xdd,0x5d,0xbc,0x8b,0xce,0x1b,0xa9,0x2a,0x66,
+ 0x65,0xaf,0x32,0x54,0x1c,0x8c,0x1b,0x5a,0x4d,0x8a,0x56,0x93,0xe6,0x2d,
+ 0x8f,0x5e,0x3d,0x31,0x6b,0x51,0x85,0x52,0x4a,0xcf,0xe7,0x93,0x99,0x35,
+ 0xb5,0x5b,0x2f,0xb2,0x9d,0x42,0x91,0x7d,0x08,0xd1,0x79,0xa7,0x7e,0x41,
+ 0xc5,0xbb,0x21,0xa0,0x16,0x23,0xcf,0x59,0x3f,0x0f,0x78,0x05,0x3d,0x48,
+ 0xa7,0x88,0x50,0xfe,0x8d,0xf7,0xfb,0xfd,0xf5,0x7c,0x6a,0x9c,0xaf,0x4f,
+ 0x50,0x04,0x2c,0xd0,0x25,0x72,0xc4,0x0c,0xf3,0x1c,0xa4,0xfd,0xbc,0x06,
+ 0x74,0xe5,0x33,0x92,0x52,0x1d,0x4e,0xd3,0x49,0x70,0xdc,0x52,0xb8,0x50,
+ 0x48,0xd0,0xc8,0x68,0xc4,0x21,0x24,0xa4,0xf4,0xeb,0xb6,0x0a,0x36,0x1e,
+ 0x2a,0xb6,0x0e,0xd3,0xdf,0x92,0xb8,0x57,0x6d,0x8c,0x9a,0x96,0xf3,0xf9,
+ 0xac,0xb5,0xac,0x18,0xe3,0xeb,0xf5,0xd2,0xf8,0xd7,0x46,0xf8,0xb4,0xa6,
+ 0x64,0x8b,0xd9,0x0f,0x11,0xc9,0x7b,0x3f,0xe1,0xa6,0xe3,0x16,0xf8,0x60,
+ 0xd4,0xde,0x9a,0xfc,0x35,0x20,0x94,0x54,0x7c,0x11,0xbb,0x43,0x37,0x39,
+ 0x7f,0xbd,0xfe,0xbe,0x3f,0x6e,0xce,0x2d,0x36,0x5f,0x6b,0x35,0x82,0x2b,
+ 0x41,0x72,0x9c,0xe0,0xf9,0x7a,0xad,0xd8,0xa0,0x54,0xa2,0x2d,0x6c,0x15,
+ 0xe2,0x72,0x39,0x7b,0xef,0x15,0x37,0xa1,0x93,0x50,0x65,0x94,0xd4,0x91,
+ 0xba,0xed,0xa1,0xb5,0xf0,0xd7,0x5a,0x34,0xcc,0x0c,0xc9,0x78,0x15,0xc8,
+ 0x86,0x5a,0x36,0xf8,0x6a,0xc1,0xd6,0x3e,0x08,0xe0,0xcb,0x77,0x97,0x0e,
+ 0xb2,0x42,0x3d,0x05,0x08,0x14,0x42,0x70,0x79,0xda,0x0e,0x8b,0xa2,0x6e,
+ 0x37,0x19,0x43,0x08,0x80,0xe4,0xbc,0x47,0x22,0xc0,0xac,0x9c,0xcf,0xbb,
+ 0xf6,0x3d,0xe7,0x45,0x3f,0x5a,0x1a,0xf8,0x32,0x12,0x45,0x00,0x08,0xde,
+ 0xf9,0xe7,0xfd,0xf1,0xb8,0xdf,0x05,0xbe,0x22,0x35,0x20,0x47,0xe4,0xfd,
+ 0x04,0x48,0x29,0xa6,0x79,0x9e,0xb5,0x35,0x9e,0xa1,0x03,0xf6,0xd9,0x30,
+ 0x78,0x3f,0x4d,0xd3,0x49,0xbb,0x81,0xb6,0xc5,0x5e,0x0d,0xa4,0x5b,0x52,
+ 0x3f,0x6c,0x1f,0x68,0x6f,0xad,0x6c,0x31,0x1f,0x4a,0x3d,0xab,0xf1,0x69,
+ 0x0d,0xaa,0xd2,0x9b,0x68,0xbb,0x8c,0xf1,0xac,0xcf,0xde,0x9b,0xc2,0xf4,
+ 0x14,0x24,0x23,0x91,0xef,0xeb,0xf5,0xb2,0xa8,0xac,0xaa,0x6d,0x13,0x8c,
+ 0x4e,0x08,0x21,0x31,0x10,0x12,0x92,0x5b,0x4b,0xb5,0xbb,0xfb,0xe3,0x2c,
+ 0xd1,0x5a,0xd0,0x3a,0x8a,0x81,0x11,0x9d,0xd7,0x3f,0x1c,0x3e,0xee,0xb7,
+ 0xf9,0xf5,0x00,0x4e,0xce,0x11,0x21,0x4e,0xa7,0x13,0x20,0xa5,0x18,0x43,
+ 0x8c,0x51,0x74,0xdd,0x80,0x35,0xcc,0x1b,0x21,0x00,0x70,0x4a,0x52,0x83,
+ 0x14,0xc8,0x9f,0xc4,0x2c,0x6a,0xde,0x35,0x4e,0xd1,0x42,0x5b,0xa9,0x49,
+ 0x87,0x33,0x94,0xad,0x96,0xab,0x3d,0x5e,0x87,0x38,0xd2,0xa3,0x21,0x82,
+ 0xbc,0xe8,0xfb,0xe7,0x16,0x3e,0x2b,0x39,0x48,0xbf,0x44,0xc6,0x39,0x0c,
+ 0x98,0x91,0x98,0x59,0x9d,0x7d,0x29,0x7b,0xf5,0x65,0x6b,0xac,0x17,0xa3,
+ 0x00,0xae,0x68,0x49,0xd5,0x35,0xac,0x37,0x0e,0xdf,0x94,0xcd,0x11,0x10,
+ 0xc0,0xa3,0xa9,0xfa,0x11,0xe2,0x72,0x40,0x10,0x1d,0xc1,0xfd,0xfe,0x98,
+ 0x26,0x0f,0x48,0xe7,0xf3,0x05,0x10,0x53,0x8a,0x21,0x2e,0x7e,0x9d,0x05,
+ 0xd1,0xc9,0x8a,0xa4,0x02,0x1b,0x5a,0x8b,0x80,0xcf,0xe7,0x0b,0x33,0xcc,
+ 0xf3,0x2b,0x9b,0x59,0x74,0xce,0x49,0xeb,0x56,0xa1,0x45,0x9d,0xe6,0xdb,
+ 0x60,0x9b,0x58,0x5f,0x2f,0x5d,0x8d,0x0c,0xe0,0xd6,0xb9,0x72,0x79,0x59,
+ 0x75,0x2b,0x59,0x09,0xef,0x2d,0x75,0xaf,0xf6,0x03,0xb3,0xfb,0x91,0x28,
+ 0xca,0x4a,0xdd,0x98,0x74,0x10,0x00,0xe7,0xe5,0x72,0x39,0x9d,0x4e,0x22,
+ 0xdd,0x6a,0x16,0x23,0xe2,0x5f,0xc2,0x7e,0xc9,0xd7,0x10,0x11,0xd2,0xe6,
+ 0x79,0x99,0x33,0x23,0x2f,0x12,0xf7,0xdb,0x5d,0xda,0x87,0x8b,0x08,0x0c,
+ 0xe8,0x5c,0x62,0x26,0xc4,0x05,0x34,0x94,0xe2,0x0a,0x95,0x2f,0xf1,0x5f,
+ 0x5b,0x0d,0x1f,0x11,0x25,0x2f,0x90,0x7b,0xb2,0x85,0xb0,0xed,0x9b,0x05,
+ 0x76,0x17,0x6c,0x07,0xa8,0xaa,0x8b,0x2d,0xd4,0x7d,0xf5,0xe1,0xea,0x38,
+ 0x5c,0x0b,0x92,0xdc,0xaa,0xf5,0x5a,0x65,0xb2,0xa3,0xdd,0xa5,0x93,0xfe,
+ 0x93,0xc4,0xdd,0x1a,0x79,0x05,0xd3,0x55,0xfb,0x81,0xda,0x8f,0x7f,0x3e,
+ 0x9f,0x97,0xcb,0x45,0x2a,0xb5,0x59,0x49,0xd1,0xf6,0xb5,0x53,0x62,0x00,
+ 0x26,0x42,0x66,0x48,0xbc,0xa6,0xf6,0x8c,0x00,0x09,0xd0,0xfa,0x7b,0xd4,
+ 0x62,0x9f,0x47,0x24,0x10,0xf4,0x3a,0x0a,0x2c,0x08,0x59,0x5b,0xed,0xbc,
+ 0x85,0x6f,0xe2,0x51,0x6c,0x5e,0xb8,0x7b,0x08,0xb8,0xc5,0x5f,0x9a,0x9c,
+ 0xc8,0x13,0xac,0x4f,0xc4,0x11,0x41,0x8c,0x89,0x53,0x08,0x41,0x52,0x97,
+ 0x52,0x9b,0x5b,0xbf,0xdb,0xaa,0xc9,0x8b,0xc8,0x05,0xb2,0x72,0xd8,0xc8,
+ 0xef,0x9c,0x27,0x71,0xba,0x25,0x3a,0xef,0x4f,0xfc,0x7a,0xf9,0x25,0x31,
+ 0x5d,0xa9,0xee,0x45,0xa1,0x3e,0x49,0x2d,0xfc,0x74,0x3a,0xc9,0x8b,0xdb,
+ 0x1e,0x47,0xb1,0x9d,0xb6,0x66,0x27,0x6a,0x4c,0xb0,0x45,0xf8,0xcb,0x07,
+ 0xf3,0xbc,0xb8,0x79,0x5c,0x55,0x77,0xd3,0x69,0x79,0x95,0xfa,0xe3,0x5a,
+ 0xec,0xcd,0x6b,0xa1,0x70,0x41,0xd3,0x3a,0xef,0x2e,0xe7,0x0b,0x33,0xdb,
+ 0xbb,0xac,0x96,0x53,0x88,0x08,0xd2,0x32,0xd1,0xa2,0xb2,0x97,0x9f,0x77,
+ 0xf0,0x33,0x55,0xa9,0xeb,0x5f,0xa9,0xd4,0x3b,0x36,0xb6,0xef,0x3b,0x54,
+ 0x0b,0xb5,0x24,0x60,0x3f,0xfb,0x9f,0x48,0xdd,0xda,0xa4,0xcb,0xe5,0xe2,
+ 0xbd,0x9f,0xe7,0x39,0x6b,0x6b,0x95,0xb2,0x67,0xc6,0x94,0xd2,0xeb,0xf5,
+ 0x92,0xb3,0x12,0x63,0x10,0x0d,0xac,0x41,0x48,0x24,0x7a,0xd8,0xa0,0x2e,
+ 0xac,0x1f,0x96,0xcd,0xdc,0xd2,0x22,0x6a,0x34,0xda,0xb6,0x3e,0x4f,0x5b,
+ 0xbb,0xce,0xe6,0xd7,0x1b,0xb2,0x17,0x41,0xa2,0xf7,0x5e,0x62,0xf8,0x52,
+ 0xd7,0x3b,0xa3,0x4f,0x22,0x7b,0x8b,0xc1,0xca,0x3c,0xeb,0x61,0x9b,0xd8,
+ 0xfe,0xad,0x16,0x88,0x0e,0x8b,0x01,0x6f,0x05,0xe1,0x6f,0x41,0xea,0xfa,
+ 0xa9,0xbf,0xd4,0x42,0xa4,0x2b,0x33,0x58,0xf5,0x13,0x45,0x5a,0x2b,0xf9,
+ 0x29,0x43,0x3c,0xc0,0x6e,0x84,0x16,0xab,0x60,0xf3,0x5d,0x70,0x07,0x80,
+ 0x88,0xde,0x96,0x3e,0xad,0xa1,0x68,0x01,0x16,0x8a,0x1f,0x32,0x33,0x08,
+ 0x7b,0x87,0x28,0xae,0x26,0x7b,0xd0,0x98,0x3e,0xb1,0x8d,0x5d,0xf9,0x5e,
+ 0x9c,0xbd,0x58,0xbf,0xe7,0xf3,0x29,0xfe,0xaf,0x0c,0xfa,0x3a,0x25,0xf4,
+ 0xaa,0x4e,0xf7,0x3b,0x3a,0xf5,0xd1,0xb0,0xbf,0x15,0x68,0x05,0x95,0xf9,
+ 0x56,0x14,0x87,0xad,0xf9,0xdb,0xc0,0x49,0x5a,0x2c,0xb6,0x58,0x88,0xaf,
+ 0xaf,0x0b,0x11,0x89,0x0d,0x18,0x81,0x75,0x57,0x01,0x99,0x0a,0xb6,0xcc,
+ 0x40,0xab,0xbc,0x1f,0x82,0xa9,0x27,0xd6,0x8a,0x9f,0xf4,0xde,0x9d,0xcf,
+ 0x17,0xa1,0x73,0xb1,0x99,0x5b,0x15,0x57,0xb3,0xab,0xc9,0xec,0xdd,0xb3,
+ 0x64,0x29,0x3a,0xde,0x46,0x44,0xd5,0x8e,0x45,0xe7,0x3c,0x01,0x34,0x01,
+ 0xbe,0x50,0x67,0x94,0x80,0xb2,0xb7,0x2b,0xb7,0xd1,0x99,0xec,0x1f,0x2f,
+ 0xd7,0xec,0x51,0x15,0xa4,0x45,0x3a,0x89,0xd2,0xc7,0x1b,0xb9,0x16,0xb0,
+ 0x74,0xbb,0xdd,0x99,0xf9,0x74,0x3a,0x09,0x2b,0xd1,0xe0,0x69,0xdb,0xc5,
+ 0x76,0x0c,0xbb,0xa8,0xde,0x9e,0x00,0xd8,0xa7,0x6a,0xd5,0xbc,0x48,0x59,
+ 0x40,0x4e,0xa7,0x09,0x71,0x89,0x53,0x32,0x43,0x3d,0xe2,0xf0,0xa4,0x58,
+ 0xad,0x4a,0x20,0x35,0x0d,0xc9,0x5e,0xb2,0x71,0xd1,0x6a,0x40,0x57,0x76,
+ 0xd3,0x53,0x4a,0x16,0xc6,0x34,0x12,0xd0,0x95,0x20,0xad,0xec,0xf8,0xbe,
+ 0x6b,0x03,0xb2,0xb3,0xa8,0xc3,0x5c,0x12,0x34,0xbc,0x85,0xec,0xb3,0xf5,
+ 0x09,0xc1,0x66,0xde,0xef,0x77,0x91,0xba,0x7d,0x6e,0xad,0x84,0xa8,0x75,
+ 0x55,0x6f,0x40,0x1b,0xa6,0xa7,0xb7,0x03,0xef,0x54,0x31,0x93,0x5b,0x52,
+ 0x4e,0xe4,0x14,0x16,0x58,0x56,0x3c,0xaa,0xc9,0x8c,0x4a,0x5d,0x91,0xd1,
+ 0x52,0xae,0x5a,0xe9,0x55,0x96,0x2e,0xb0,0x1c,0x2c,0x4b,0x3b,0xd0,0x69,
+ 0xb9,0x66,0x3f,0xb1,0x48,0xce,0x11,0xa7,0x5e,0xf6,0xa0,0xc7,0xa1,0x38,
+ 0x9d,0x1a,0xbe,0x06,0x1c,0x2a,0xfe,0x7e,0x40,0xd7,0xe9,0x4a,0xa8,0x89,
+ 0x14,0x61,0xcb,0x48,0xa5,0x4d,0x0b,0xed,0x09,0xa8,0xdc,0xb6,0xce,0xa8,
+ 0x22,0x22,0x82,0xaf,0x45,0x5d,0x43,0x80,0x27,0x99,0x63,0x4e,0x29,0xcd,
+ 0xf3,0x2c,0x8d,0x7c,0x0d,0x80,0x5b,0x2e,0xb6,0x94,0xba,0x24,0x2a,0x88,
+ 0x28,0x85,0x2a,0x1d,0x30,0x53,0x5c,0x8a,0x1c,0x8b,0x0c,0x06,0xd9,0x31,
+ 0xc2,0x9a,0x19,0x67,0xf6,0x60,0xb0,0x0a,0x64,0x13,0x04,0x1d,0xa7,0xfa,
+ 0x93,0x76,0xbb,0xd4,0x33,0xe6,0x79,0x9e,0xe7,0x99,0x88,0x24,0x9e,0xb7,
+ 0xf5,0xbb,0x77,0x1d,0x87,0x73,0x84,0x48,0x92,0xb8,0xcb,0x65,0xe5,0xf9,
+ 0x1c,0x98,0x93,0xdd,0x87,0x44,0xd1,0x78,0xd8,0x4f,0x33,0x56,0x63,0xb1,
+ 0x94,0x49,0xdd,0x72,0x2c,0xc9,0x9b,0xa9,0xe5,0xd1,0x26,0x47,0xcb,0xe1,
+ 0x59,0x4f,0xaf,0x3e,0x4f,0x6b,0x1a,0xb6,0xc1,0xb3,0x96,0xa5,0xc8,0x56,
+ 0xad,0x55,0x87,0x5a,0xb1,0x67,0x69,0xfa,0x06,0xa5,0x9e,0x9d,0x95,0xb7,
+ 0x52,0xb8,0x96,0x6d,0x97,0xe7,0x23,0x98,0xb7,0xe7,0xf3,0x29,0x1f,0xf9,
+ 0x5d,0xd9,0x6f,0xae,0x87,0x90,0x96,0x09,0xc3,0xed,0x0d,0x4d,0xb7,0x93,
+ 0x9c,0x73,0xda,0xd6,0x33,0x43,0xb2,0x2b,0x52,0x8b,0x19,0x04,0x71,0x8b,
+ 0xe0,0xa5,0xff,0xa6,0xa5,0xb7,0xaa,0xd7,0xd4,0x63,0xb1,0x41,0x6f,0x0c,
+ 0x6c,0x52,0xc4,0x26,0x7a,0x2f,0xa3,0xe1,0x72,0x2b,0x25,0xc6,0x2d,0x73,
+ 0xed,0x5a,0xc4,0x90,0x32,0x8e,0x96,0xa0,0x33,0x3c,0x85,0xa2,0x8f,0x6d,
+ 0x92,0x5d,0x9d,0xac,0xb3,0x15,0x4d,0x3d,0x43,0x83,0xb5,0xbf,0xd6,0x8c,
+ 0xa3,0xce,0x37,0x75,0x46,0x6b,0x33,0xa9,0x6b,0x86,0xb2,0x4d,0x6d,0x02,
+ 0x12,0x51,0x4c,0xf1,0xf9,0x7a,0x22,0xe2,0xe9,0x34,0xad,0xdd,0xaf,0xba,
+ 0xec,0xab,0xbd,0x2b,0x5a,0xa1,0xe9,0xc5,0xb9,0x5c,0x26,0x73,0x53,0x4a,
+ 0x2b,0x4d,0x9e,0x80,0x74,0xfc,0x82,0x7e,0xcb,0x4b,0xc2,0x08,0x00,0x7e,
+ 0xd3,0xfe,0x15,0x9b,0xa5,0x38,0x19,0x1d,0xe1,0x5c,0x5f,0xbd,0xcd,0xfa,
+ 0xaa,0xc6,0xdb,0xfb,0x16,0xd5,0xd7,0x13,0xbd,0x0e,0x52,0x71,0x35,0xa0,
+ 0x13,0xac,0x87,0x30,0x15,0x74,0xa4,0xae,0xf9,0x9e,0x1e,0x14,0x75,0xc0,
+ 0xd5,0x5c,0x43,0x5c,0x8f,0x34,0x94,0x61,0x8c,0x5d,0xa7,0x25,0x4b,0xb1,
+ 0xa2,0xfa,0xc4,0xed,0xa8,0x69,0xc7,0x09,0x4a,0xe8,0xae,0x55,0x39,0x1b,
+ 0x12,0x91,0x81,0x5a,0x48,0x58,0x5e,0x4e,0x1d,0xd5,0x15,0xdd,0x0e,0x44,
+ 0x55,0x06,0xff,0x6c,0x5e,0x26,0x5c,0x6a,0x41,0x3b,0xd4,0xce,0x91,0x8c,
+ 0xce,0xaf,0x84,0x6a,0xcb,0xb9,0x91,0xf7,0xe6,0x75,0xea,0x02,0x99,0xc1,
+ 0xb9,0x45,0x8f,0xe7,0x79,0x9e,0xa6,0x53,0x8b,0x14,0xd0,0x06,0x5c,0xd6,
+ 0xaf,0x8b,0x33,0x93,0xb0,0x53,0xa9,0x66,0xec,0x84,0xb3,0xd5,0xf5,0x75,
+ 0x28,0x30,0x97,0x7a,0x59,0xc1,0x50,0x9b,0x6f,0xd1,0x60,0xa5,0xc1,0x17,
+ 0x5b,0x97,0x57,0x2d,0xc6,0x6a,0x7f,0xb6,0x3d,0x63,0x83,0x0c,0xbd,0x72,
+ 0x75,0xe0,0xcb,0x86,0x93,0x32,0xa1,0x8d,0x88,0xaf,0x15,0xaf,0x50,0xf6,
+ 0x02,0xb4,0x12,0x67,0x19,0xaa,0x5a,0x71,0x55,0x66,0xc0,0xf4,0xb1,0x1f,
+ 0x96,0x95,0x4c,0xb5,0x40,0x14,0xd8,0x89,0xc1,0x16,0xab,0xc0,0xbc,0x9a,
+ 0x7a,0x5a,0x74,0x77,0xf9,0x98,0x22,0x75,0xdb,0xe2,0xb4,0x4e,0x3d,0xfb,
+ 0xf0,0x25,0xdb,0x80,0xf5,0xfa,0xd2,0x76,0xb4,0xba,0x2e,0x3f,0x97,0x96,
+ 0xa2,0x06,0x6e,0x99,0xd4,0xab,0xc0,0x78,0xbd,0x25,0x15,0x6d,0xf5,0xe1,
+ 0xaa,0xfc,0xe4,0x29,0x0f,0x42,0x6b,0x1a,0x04,0x5d,0x79,0x87,0x49,0x35,
+ 0x26,0x23,0x7a,0xd1,0x6c,0x2d,0xad,0x5f,0x25,0x24,0x44,0x2b,0x16,0x22,
+ 0x7b,0x25,0x63,0xca,0x47,0xfc,0x57,0x4e,0x01,0xab,0xe8,0x99,0xd4,0x33,
+ 0x84,0x6a,0x16,0xf0,0x6a,0x26,0x2c,0x62,0xce,0xd8,0x56,0x16,0xc1,0x4b,
+ 0xa1,0xad,0x2c,0xa3,0xa6,0x94,0x74,0xd6,0xa9,0x1c,0x65,0xed,0x3b,0x48,
+ 0x79,0x99,0x40,0x88,0x44,0x09,0xd4,0xec,0x8b,0x46,0xaa,0xd4,0xab,0xba,
+ 0xde,0xaa,0xcf,0xcb,0xf3,0xd2,0xf3,0x64,0xed,0xde,0xee,0x04,0x98,0xd9,
+ 0xe3,0x6a,0xc5,0xb7,0xc3,0x95,0xbb,0xeb,0x79,0x2c,0x44,0x5e,0x79,0x31,
+ 0x44,0x6b,0x4d,0x96,0x56,0x4a,0x72,0x93,0xd7,0xeb,0xa5,0xc1,0x50,0xf5,
+ 0x3c,0xe9,0x59,0xd4,0x8e,0xbb,0xe8,0xbd,0xfc,0x50,0x5d,0x18,0xc2,0x82,
+ 0x84,0xb4,0x69,0x85,0x6d,0xe5,0xb5,0xd2,0x36,0xdb,0xab,0x3d,0x9d,0x4e,
+ 0x00,0x10,0x63,0x02,0xc0,0x6c,0xc8,0x9e,0x99,0xbd,0x24,0x06,0xd5,0x6c,
+ 0xd8,0x6a,0x79,0x35,0xba,0xe9,0x54,0xe3,0xb5,0x3b,0x9e,0x99,0x68,0xf1,
+ 0x9a,0xb6,0x21,0xdb,0x91,0x7a,0xc9,0x86,0xa2,0xed,0x1f,0x3d,0x8e,0x7b,
+ 0x75,0xdc,0xcd,0x4e,0x1c,0x12,0xf9,0x76,0xe0,0xb6,0x29,0x69,0x3b,0x7b,
+ 0x8b,0xa8,0x97,0x71,0x85,0x35,0xe3,0x50,0xf3,0x23,0x5a,0xab,0xb5,0xea,
+ 0x0e,0xac,0x08,0xf6,0x13,0x93,0x6a,0xf3,0x45,0xea,0x9b,0x75,0x21,0x44,
+ 0xa8,0x78,0xd5,0x91,0xe0,0xdf,0xda,0x03,0x4b,0x21,0xa5,0x2d,0x37,0x58,
+ 0x89,0x11,0xb8,0x43,0x74,0xd6,0x19,0x77,0xea,0xd4,0xd1,0x32,0x64,0x84,
+ 0x2a,0xb7,0x84,0xb2,0x86,0x34,0x85,0x0e,0xcf,0x53,0xa9,0xfa,0x72,0x9c,
+ 0x4b,0x02,0x3f,0xb9,0xb8,0xfc,0x55,0x08,0x61,0x99,0x36,0xea,0xca,0xbe,
+ 0x3f,0x2b,0x6f,0xdb,0xf3,0x00,0x80,0x2c,0x7a,0x43,0x6a,0x6c,0xd5,0xbc,
+ 0x97,0x43,0xf9,0x7d,0x07,0xac,0xaf,0x49,0x9c,0xc4,0x2e,0xda,0xde,0x74,
+ 0x06,0x0f,0xc9,0x7c,0xca,0x08,0xfa,0xc3,0xe2,0x9d,0xc4,0xda,0x03,0xe4,
+ 0x25,0x2f,0x9f,0x55,0xe3,0xb7,0x54,0x18,0xd8,0xa2,0x6c,0x3b,0x15,0xa5,
+ 0x2a,0x7c,0x3d,0xc3,0xd6,0x85,0x10,0xc4,0xf2,0x98,0x2e,0x13,0x96,0x52,
+ 0xaf,0x82,0x9a,0xcb,0xda,0x91,0x7a,0x5f,0x45,0xdb,0xc9,0x27,0x14,0x26,
+ 0x7c,0xbd,0xac,0x14,0x34,0xfa,0x27,0xb5,0x4d,0xda,0xbc,0x2b,0xb7,0xc9,
+ 0x03,0x49,0x09,0x10,0xa3,0x54,0x2a,0x45,0x53,0x35,0x9b,0x3d,0x72,0x1c,
+ 0x95,0x88,0x35,0xa5,0x84,0xbc,0xb0,0xee,0xb7,0x7a,0x45,0x55,0xc5,0xe8,
+ 0x5f,0x59,0x1f,0xf8,0xfa,0x88,0xc8,0xc0,0xaf,0xf7,0x1a,0x5f,0x05,0x28,
+ 0x8a,0xa9,0x29,0x0b,0x52,0x6f,0xa1,0xcd,0x33,0x2c,0xa9,0xb4,0x70,0x34,
+ 0xee,0x38,0x9c,0x84,0xea,0xb7,0x49,0x98,0x13,0x22,0x79,0x3f,0x89,0x60,
+ 0xf4,0x09,0x66,0x23,0xf2,0x2d,0xbd,0xef,0x64,0x65,0xe2,0x98,0xac,0x7f,
+ 0xcd,0xc0,0xce,0x55,0xf3,0x5b,0xde,0x70,0x9f,0x4a,0x43,0x43,0xdd,0x56,
+ 0x8a,0xf1,0xae,0xd4,0xab,0x11,0x6e,0x55,0xea,0x90,0xd1,0x9d,0x95,0x29,
+ 0x69,0x07,0xd5,0x5a,0xbe,0x4d,0x76,0x7a,0xf4,0xb9,0x48,0xec,0x2a,0x2d,
+ 0xa9,0xbe,0xd4,0x0f,0x81,0xad,0xfb,0x08,0x19,0x52,0xda,0xea,0x74,0x2b,
+ 0x14,0x29,0x29,0xcf,0x96,0xad,0xf7,0x75,0x02,0x91,0xaa,0xde,0x97,0x92,
+ 0x2e,0xa3,0x0d,0x05,0x44,0x97,0x5d,0x8c,0x11,0x90,0xb5,0xfc,0x8d,0x6d,
+ 0x4f,0x54,0x39,0x60,0xde,0xfa,0x32,0x60,0xac,0x04,0x35,0xb2,0x6f,0xcd,
+ 0xf8,0x7d,0x2b,0x8f,0xb4,0x1c,0xde,0x2d,0xd2,0x8a,0xd6,0x54,0xa2,0xad,
+ 0x49,0x29,0x82,0x58,0xcf,0x41,0x2b,0x4e,0x39,0x34,0xc5,0xa5,0xe1,0x91,
+ 0xf1,0x03,0x6d,0x55,0x09,0x0f,0xbc,0x14,0x98,0x05,0x9a,0x9e,0x31,0x23,
+ 0x76,0x5c,0x7b,0xa7,0x32,0x93,0x0d,0x3b,0xda,0xc9,0x8d,0x56,0x78,0x75,
+ 0x68,0x8d,0x57,0x1a,0x5a,0x67,0xa1,0xf2,0x87,0xbf,0xfe,0x96,0xba,0xa7,
+ 0x94,0x74,0x1a,0xcb,0x48,0x7d,0xb9,0x06,0x35,0xa0,0xa8,0xb9,0x83,0xaf,
+ 0x56,0xb6,0xfb,0x34,0x13,0x76,0xec,0xa3,0x1c,0x8d,0xee,0x87,0x8a,0xd0,
+ 0x98,0x74,0xac,0xda,0x09,0xc5,0x30,0x39,0xe7,0x2d,0x1e,0xd9,0x9e,0xdd,
+ 0x7e,0x33,0xb7,0xf3,0x88,0xb3,0x99,0xf5,0x8c,0xb7,0xe8,0x90,0xfe,0x95,
+ 0x6b,0x5f,0xf6,0xca,0x9d,0xd2,0x48,0x49,0xfb,0xf0,0x96,0xf6,0x9b,0x8c,
+ 0x7f,0xeb,0xbe,0xaa,0xd9,0xf7,0x25,0xf1,0xe8,0x9a,0xf9,0xd1,0x60,0x3a,
+ 0x74,0x38,0xac,0xa4,0x48,0xea,0xaa,0xba,0xf7,0xad,0x71,0xeb,0xbc,0x67,
+ 0x09,0x9b,0xce,0x18,0x0b,0xab,0xeb,0xca,0x8c,0x8e,0x1d,0xd0,0x5f,0xbf,
+ 0x97,0xfa,0x41,0x07,0xb6,0xec,0x0b,0x77,0x5e,0x5c,0xd2,0x82,0x8c,0xf4,
+ 0xd1,0x0f,0xe7,0xb7,0x2d,0x68,0xd1,0x14,0xaf,0xb8,0xdc,0x07,0xe2,0x6b,
+ 0xdd,0x77,0xce,0xfa,0x6f,0x2d,0xd9,0xf7,0x0d,0xa6,0x66,0x6b,0x16,0x32,
+ 0x96,0xb1,0x23,0x1d,0xf2,0xd0,0x75,0xb8,0xce,0xb2,0x08,0x79,0x9e,0xe7,
+ 0x18,0x93,0xf7,0x82,0x0f,0x58,0x38,0x17,0xe5,0x1d,0xc7,0xef,0xb9,0x13,
+ 0xc9,0x1e,0x36,0xf2,0x0f,0xa7,0x3f,0x2d,0xe5,0x55,0x69,0x15,0x46,0x80,
+ 0x02,0x2d,0x93,0xd9,0x0a,0x41,0x14,0x24,0x91,0xf5,0x57,0x73,0xbe,0x7a,
+ 0x3b,0x45,0x90,0x95,0x8d,0x0e,0x65,0x73,0x78,0x1e,0xe7,0x79,0xd6,0x41,
+ 0x49,0x3b,0xe4,0xd6,0x0f,0xbb,0xa0,0x3d,0x53,0x0e,0xfb,0x0d,0x0a,0xe2,
+ 0xdd,0x99,0x75,0x99,0xcf,0x31,0xd5,0x4a,0x47,0xea,0x65,0xfd,0xa7,0x75,
+ 0x14,0xc6,0x21,0x3a,0xe3,0x23,0x19,0x55,0x5b,0xa2,0xdd,0xb9,0x7e,0xab,
+ 0xb0,0x5a,0xe9,0x2b,0xaf,0xe9,0x0f,0xb1,0x1f,0xa5,0x09,0x1a,0x9f,0x45,
+ 0xcd,0x1e,0x8a,0xc8,0x5e,0xdc,0xb0,0xad,0x77,0x56,0x1d,0x70,0xeb,0xfa,
+ 0x9d,0x0d,0x0a,0xe2,0xa7,0x9c,0x73,0x44,0xcb,0x6e,0x33,0xdb,0xd4,0x39,
+ 0x3c,0x4f,0x99,0x0e,0xf4,0x11,0x5a,0xad,0x14,0x6e,0xdc,0x13,0x8f,0x54,
+ 0x42,0x6d,0x65,0x45,0xf3,0x94,0x91,0x3d,0x0a,0x76,0xdb,0x52,0x55,0x34,
+ 0x1e,0x0a,0xea,0x75,0xed,0x71,0x95,0xc5,0xb8,0x0f,0x08,0x2c,0xb2,0x87,
+ 0xae,0x10,0x71,0x6d,0x74,0xb6,0x08,0xd5,0xe1,0x88,0xc0,0xa2,0xc5,0x83,
+ 0xbb,0x8c,0x8c,0xa5,0x98,0x62,0x44,0x93,0x98,0x8c,0x5c,0x79,0x44,0xea,
+ 0x9d,0xfe,0x29,0x74,0x49,0xb1,0x47,0x8e,0xc2,0xda,0x59,0xd9,0xa9,0x56,
+ 0x06,0x07,0xea,0xab,0x7b,0x39,0x68,0x60,0x0b,0x59,0x9b,0xc6,0x57,0x19,
+ 0x3c,0xb3,0xcf,0x70,0x48,0x30,0xd1,0xd7,0xc8,0xec,0xfa,0xda,0xb7,0xcd,
+ 0x64,0xdf,0x91,0xc4,0x9b,0xa8,0x18,0x4c,0x29,0x25,0x06,0x5e,0x08,0xd9,
+ 0x8e,0xad,0xc8,0x48,0x45,0xac,0xf5,0xcd,0x5b,0xc0,0xfb,0xc1,0x9a,0x6b,
+ 0xab,0x74,0x51,0x6d,0x48,0x76,0x62,0x91,0x8e,0x53,0xf0,0xd5,0x0f,0xdf,
+ 0xc2,0x35,0x8f,0x04,0xdb,0x87,0x35,0xe4,0xac,0x70,0x6b,0x0f,0xe3,0x20,
+ 0xc3,0xdd,0x31,0x35,0x06,0x10,0x02,0xa4,0x94,0x9c,0x1b,0x75,0xed,0x2d,
+ 0xf0,0xf5,0x20,0x20,0x6e,0x5c,0xea,0x1f,0xa0,0x37,0x65,0xd8,0x48,0x39,
+ 0x9f,0x0f,0xc7,0x0d,0x6c,0x9d,0xbf,0x1a,0x3f,0x31,0xb3,0xd7,0x12,0x95,
+ 0xad,0x75,0x94,0x34,0x81,0xe3,0xc1,0x76,0x07,0xce,0x6c,0x6d,0x86,0xf8,
+ 0x7b,0xa5,0x05,0xf8,0xc3,0x2b,0x57,0x6f,0x35,0x84,0xa0,0x05,0x5d,0x18,
+ 0x58,0xb6,0x35,0x82,0xd0,0x82,0x4f,0x99,0x70,0xca,0x53,0x3b,0x78,0x98,
+ 0xc4,0xc8,0x8b,0xd4,0xfb,0x21,0x7d,0x2b,0xe9,0xb5,0xb0,0x7c,0x55,0x3f,
+ 0x6d,0x0a,0xa1,0x14,0x6d,0x24,0xff,0xd1,0x62,0xa7,0x05,0x42,0x8d,0x07,
+ 0xdb,0xd0,0xdd,0x2d,0xa5,0xdf,0xdb,0xc6,0x94,0x1d,0x0d,0x19,0x99,0x72,
+ 0x3d,0xac,0x31,0x48,0xe1,0x42,0x91,0x30,0x23,0x84,0x28,0x23,0x0a,0xda,
+ 0x79,0xc4,0x7f,0x6e,0xe4,0xab,0x52,0x57,0x3d,0x6c,0x15,0x8b,0x3a,0xf1,
+ 0x5d,0x8c,0xf1,0xf1,0x78,0x38,0xe7,0xcb,0x07,0xa8,0x3f,0xda,0x94,0x49,
+ 0xd9,0x6f,0xaa,0xc9,0xc0,0xb8,0x6b,0x6f,0x21,0xdd,0xac,0xcd,0x17,0x79,
+ 0x0b,0x4a,0x73,0x44,0xf6,0xe3,0xbb,0x53,0x2d,0xd2,0x74,0x24,0x54,0xec,
+ 0x1f,0xd3,0x3e,0xc9,0xe7,0x07,0xfa,0xdd,0x7a,0x97,0x12,0x8b,0x6c,0x89,
+ 0xfd,0x0f,0x1d,0x7c,0x69,0xba,0x52,0x4a,0xcc,0x73,0xf9,0x02,0x5f,0x5d,
+ 0x3f,0xa0,0xdd,0x46,0xd8,0x2f,0x8b,0x18,0x91,0xfa,0xa1,0xe3,0xb1,0xb2,
+ 0x97,0xf1,0x7f,0xd9,0x12,0x25,0xdb,0x53,0xfe,0xf0,0xca,0xe3,0x55,0xc5,
+ 0xea,0x6e,0x86,0x71,0xa9,0x0f,0x6e,0x13,0x3d,0xcc,0x0e,0x3a,0x09,0xa1,
+ 0x6d,0x35,0x1d,0x16,0x79,0xca,0x47,0x64,0x97,0xe4,0x96,0xa7,0xd0,0x67,
+ 0x80,0x0d,0x9b,0x35,0xc2,0xd8,0xc6,0xdc,0xfe,0x92,0xba,0x96,0x9b,0x34,
+ 0xab,0xd5,0xd2,0xe3,0xf1,0x90,0x73,0x3d,0x4d,0x93,0x80,0xcf,0xfb,0xb2,
+ 0x19,0x21,0x44,0x81,0x61,0xee,0xbc,0xbe,0xd9,0xec,0xf4,0x70,0xff,0xfc,
+ 0xab,0x8c,0x7e,0xca,0x18,0xb6,0xa5,0xee,0x2d,0xd2,0x8d,0xc3,0x60,0x3c,
+ 0x2f,0xd9,0x56,0x01,0x17,0x83,0x47,0xfb,0x5d,0xda,0x92,0x32,0xd6,0x13,
+ 0x79,0x8b,0xcd,0x97,0x98,0x7f,0xb0,0x23,0x0c,0x63,0x5c,0xf7,0x7d,0x7f,
+ 0xfc,0x6e,0x40,0x77,0x28,0xfb,0x43,0x0b,0xdf,0x7a,0x0e,0x59,0x33,0xde,
+ 0xc2,0x70,0x3f,0x2b,0xe0,0xb7,0xf4,0x93,0x3a,0xf6,0xb3,0x55,0xa1,0xab,
+ 0xce,0xc4,0x8c,0xef,0x34,0xc9,0x10,0x26,0xfa,0xca,0xe7,0xf3,0x19,0x63,
+ 0x10,0xbd,0x6f,0x19,0xf9,0xc3,0x51,0x98,0xce,0x4a,0x9b,0x7e,0x37,0xe5,
+ 0xd0,0x8a,0x8c,0xd3,0x5f,0x8d,0xd4,0x03,0x3a,0xeb,0x49,0xed,0xca,0x12,
+ 0x25,0x41,0xe9,0x60,0xef,0xdf,0xcd,0x1b,0xb7,0xe0,0xae,0xd3,0x0e,0x3f,
+ 0xac,0x9c,0x8f,0xa4,0x58,0xad,0x2c,0x48,0xe3,0x6d,0xf5,0x49,0x21,0x44,
+ 0xa2,0xe5,0x98,0x8b,0x0d,0x78,0x6b,0x14,0xe6,0x2d,0x5e,0xc3,0x91,0xf5,
+ 0xd1,0x9d,0x72,0xca,0x07,0x0f,0xbd,0x5f,0xf1,0xb5,0x5f,0x76,0x8f,0x1f,
+ 0xfc,0x4d,0x7b,0x33,0xb2,0xf7,0xa2,0x3f,0x0f,0x8e,0xfa,0x61,0x7c,0xa3,
+ 0xaa,0x9a,0x43,0x9d,0x64,0xee,0x0b,0x80,0x1f,0x8f,0xbb,0x4e,0x63,0x75,
+ 0x0c,0x66,0x6b,0x83,0xc2,0xc8,0x3d,0xdb,0xe5,0x45,0x19,0x0d,0x26,0x8c,
+ 0x81,0x71,0xa1,0x4b,0x47,0x3c,0x68,0xe4,0xfb,0x7d,0xdb,0x3e,0x82,0xe1,
+ 0xcf,0xbf,0x7c,0x55,0x36,0x87,0xed,0xcb,0xce,0x2a,0xe6,0x41,0xa9,0x67,
+ 0x54,0x33,0xce,0x7b,0x04,0x94,0xce,0xbd,0x6c,0xf7,0x16,0xd0,0xb1,0x01,
+ 0x0d,0xe2,0x5b,0xe7,0xa9,0x13,0x84,0x4a,0x0f,0xf7,0xeb,0xeb,0x22,0x6b,
+ 0x51,0x17,0x5a,0xaf,0xfd,0x2c,0x66,0x27,0x8e,0xf9,0xc0,0xd7,0x1e,0x76,
+ 0x77,0xb2,0xca,0xbc,0xb6,0x33,0xaa,0xb4,0x58,0x83,0xb5,0xbf,0xfe,0x71,
+ 0xf1,0x1f,0xb4,0x5c,0x3f,0x60,0x1f,0xcc,0xaa,0x40,0xe5,0x98,0x23,0xa1,
+ 0x12,0x9f,0x20,0x00,0x8b,0x9d,0xd7,0x29,0x85,0x3f,0x0f,0xe3,0xb3,0x82,
+ 0x34,0x00,0x3c,0xee,0x8f,0xf3,0xc9,0x23,0x39,0x21,0x14,0x74,0x6e,0x42,
+ 0x02,0x00,0x42,0x40,0x34,0x5b,0xe0,0x54,0xe1,0x3e,0xf6,0xeb,0xef,0x16,
+ 0xda,0xec,0x42,0xb2,0xff,0x90,0xba,0x2f,0x1c,0x38,0xef,0xb6,0x5c,0x3f,
+ 0x08,0xe3,0xb3,0x1e,0x9d,0x25,0x2c,0xd1,0x41,0xa1,0x3d,0x40,0x03,0x9e,
+ 0xcf,0x07,0x22,0x9c,0xcf,0x17,0xad,0xed,0xf7,0x4f,0xd5,0x61,0xcb,0xd5,
+ 0xde,0xf3,0x32,0x0a,0x13,0x93,0x63,0x40,0x80,0x04,0x1c,0xd3,0x73,0x61,
+ 0x7c,0x23,0x44,0x72,0x24,0x87,0x91,0x9c,0xa5,0x61,0x5d,0x46,0x68,0x85,
+ 0x58,0x6e,0x3f,0xba,0xf0,0x59,0x3d,0xa0,0xbc,0x5b,0x81,0x4e,0xc8,0x89,
+ 0xef,0xc0,0x73,0xb3,0x79,0xc5,0x0f,0xc0,0x01,0xbe,0x25,0x9b,0xb7,0x5c,
+ 0x7b,0xdf,0x13,0xb7,0xd2,0x42,0x95,0x81,0x4e,0x14,0xa7,0x94,0x90,0x10,
+ 0x92,0xd0,0xea,0xf1,0xfd,0xfe,0x20,0x5a,0x78,0xb4,0xa5,0xb6,0xd3,0xf7,
+ 0xc1,0xe3,0xf7,0xbc,0xad,0x43,0xe6,0x84,0xc0,0x7e,0x4f,0x8d,0xc7,0x31,
+ 0xa4,0xd5,0xfa,0x08,0xb5,0x13,0x22,0x12,0x3a,0x61,0x72,0x8e,0x21,0x02,
+ 0x11,0x18,0x3b,0x3c,0x32,0xe6,0x72,0x58,0xfb,0xb3,0x8c,0xbf,0x76,0x6c,
+ 0x6d,0x24,0x5d,0x2c,0xcf,0xc1,0xa1,0xdf,0xf1,0x87,0xe4,0x9b,0x9d,0x46,
+ 0xfb,0x48,0x6f,0xb1,0xfa,0x32,0xed,0x19,0xe8,0xaa,0xf8,0xcd,0x99,0xf1,
+ 0xee,0x77,0x1f,0x8f,0x87,0xee,0x85,0x96,0x11,0x9c,0x0e,0x38,0x60,0x64,
+ 0x1b,0x81,0xbd,0x07,0x06,0xe0,0x84,0x31,0x24,0x42,0x72,0xde,0xc9,0x62,
+ 0x4e,0x58,0x36,0x71,0xcb,0xbd,0x00,0x08,0x6f,0x24,0xa7,0x00,0x81,0x81,
+ 0xc3,0xfc,0xd2,0x15,0xe1,0xba,0x3e,0xc8,0xb9,0x49,0x26,0x94,0x2c,0xbc,
+ 0xb8,0x53,0x16,0xac,0x6a,0xb3,0x65,0x88,0xcc,0x5e,0x09,0xc3,0xeb,0x14,
+ 0xdf,0x30,0xf5,0x9f,0xb9,0xf6,0xc1,0x2c,0xab,0x24,0x0f,0x2a,0x91,0xd7,
+ 0x58,0xb0,0x4c,0xd9,0xeb,0x11,0x61,0x08,0x81,0x16,0x72,0xdc,0xb3,0xfa,
+ 0xfb,0xf1,0x0a,0x5d,0xa7,0x75,0x24,0x96,0x9d,0x11,0x43,0x08,0x08,0xe0,
+ 0xfd,0xe4,0x1c,0x01,0x51,0x4c,0x69,0x25,0x13,0x60,0x40,0x40,0x06,0x5e,
+ 0x76,0xfd,0xac,0x8b,0x9d,0x98,0x63,0x02,0x66,0x88,0xba,0xca,0x97,0xc8,
+ 0x89,0x5f,0x40,0xa5,0xfc,0xee,0x71,0xf5,0x94,0xf7,0x6c,0xb7,0xbc,0x2b,
+ 0x16,0xa3,0x45,0x1e,0xd6,0xf1,0x2c,0x83,0x25,0x64,0xff,0x77,0xb5,0x5c,
+ 0xb3,0x36,0x4c,0xd6,0x27,0xc8,0x9c,0x93,0x8e,0x8a,0x49,0x73,0x16,0xf6,
+ 0x5c,0x48,0x0a,0xfb,0x14,0x5d,0xf7,0xde,0xdf,0x1f,0x8f,0x69,0xf2,0xe7,
+ 0xf3,0x19,0xf1,0xac,0xfe,0xfe,0x6f,0xb9,0x67,0x5c,0x77,0x71,0x86,0x18,
+ 0x19,0xe0,0x44,0x13,0x91,0xf3,0xe4,0x52,0x0c,0x31,0x25,0x48,0x6c,0x56,
+ 0x00,0x88,0xed,0x47,0x86,0x65,0xfc,0x50,0xe6,0x8d,0x93,0x30,0xff,0xc6,
+ 0x04,0x31,0x45,0x42,0xe7,0xbc,0xac,0x55,0x56,0xba,0xb6,0x4c,0x89,0x6d,
+ 0xeb,0xa8,0xdc,0x90,0x2e,0x63,0x59,0x19,0x6d,0x53,0xb9,0x57,0x3d,0x6b,
+ 0xb4,0xb7,0xb6,0xa7,0xb6,0x64,0xbf,0x69,0xfc,0x9f,0x3c,0x41,0xb3,0x26,
+ 0x9a,0xaa,0x4e,0x68,0xa5,0xe2,0xde,0xde,0x55,0x3e,0xb9,0x72,0x58,0xfb,
+ 0x69,0x87,0x85,0x15,0xd6,0xce,0x85,0x46,0x66,0x19,0x09,0x60,0xa9,0xe7,
+ 0x9f,0xcf,0x17,0x1d,0xb8,0xff,0xac,0x4d,0x5c,0x1e,0x7f,0x21,0x85,0xe1,
+ 0x75,0x89,0xef,0xe4,0x01,0xc9,0xa1,0x73,0xc4,0x90,0x88,0x39,0x2e,0xbb,
+ 0xdb,0x36,0x3a,0xb0,0x95,0x53,0x06,0xcc,0x0a,0x38,0xe5,0x7e,0x26,0x42,
+ 0x02,0x0a,0xab,0x12,0x4b,0xb0,0x26,0xd3,0x1d,0x5b,0x60,0xb5,0x96,0xdf,
+ 0x65,0xe2,0xc0,0xf2,0x45,0x68,0xdf,0xbd,0x1a,0x44,0xdb,0xed,0x05,0x55,
+ 0x9f,0x3b,0x9e,0x02,0xf8,0xc3,0x30,0xbe,0x25,0xf5,0x2c,0x29,0x17,0x73,
+ 0xbd,0x1d,0x73,0x42,0x47,0x0e,0x77,0x6e,0x8f,0x95,0x58,0x26,0x23,0xc8,
+ 0x48,0x71,0x19,0x7f,0xd1,0x4b,0xc2,0xb2,0x6d,0x9c,0xfc,0xca,0x1b,0x40,
+ 0xb4,0xf8,0x78,0x91,0xbd,0xc6,0x7a,0xef,0xd6,0x97,0x9a,0xcd,0x5c,0x22,
+ 0x60,0x8c,0x91,0x01,0x82,0xf7,0x80,0x44,0xe4,0x88,0x23,0x23,0xc6,0x75,
+ 0x26,0x4b,0x4e,0xee,0xb6,0xe3,0x69,0x3d,0xca,0x7b,0xe1,0x37,0x92,0x1a,
+ 0xf9,0xa4,0x96,0x18,0x6c,0x1d,0x02,0x71,0x9a,0xda,0x48,0x4d,0x29,0x83,
+ 0x41,0xa8,0x96,0xcb,0x29,0xd1,0x95,0x0c,0x23,0x0d,0xdf,0x9e,0x8f,0x7f,
+ 0xab,0x2e,0x5b,0xd5,0x1e,0x8d,0x65,0x84,0x60,0x3b,0xe3,0x1a,0x84,0xfd,
+ 0xf4,0x49,0x76,0x59,0xa5,0x91,0x54,0x7b,0xb0,0x92,0x70,0x2f,0x63,0x31,
+ 0x44,0xee,0x35,0x3f,0x75,0x48,0xe0,0xf1,0x78,0x00,0xc0,0xf9,0x7c,0x39,
+ 0x9d,0x4e,0x5a,0xd3,0xfd,0xf3,0x36,0x31,0x18,0x9e,0x92,0x10,0x43,0x8c,
+ 0x71,0x9a,0x4e,0xce,0xa1,0x23,0x92,0x11,0x13,0xa3,0xef,0xa8,0x4b,0x5e,
+ 0x70,0xb7,0xe8,0x95,0xd5,0x09,0x93,0x27,0x4a,0x3a,0xb1,0xb6,0x2c,0x82,
+ 0x56,0x1d,0x50,0x7e,0xba,0x75,0xb5,0x4c,0xc8,0xe0,0x6e,0xc9,0x60,0x08,
+ 0xd4,0xd3,0x0b,0xde,0x52,0xe3,0xdc,0xb7,0x86,0x73,0xab,0x5f,0xf4,0x6e,
+ 0xd3,0xba,0x93,0x43,0x2b,0xef,0x8d,0x30,0xa9,0x44,0xb3,0x6a,0xb6,0x0f,
+ 0x7d,0xc9,0xe0,0xb6,0xba,0x21,0x75,0xb3,0x1e,0xcb,0xb8,0x2f,0x12,0xd1,
+ 0xf3,0xf9,0x7a,0x3e,0x9f,0xce,0x91,0x3d,0x64,0x23,0x8d,0xf6,0xc3,0x36,
+ 0xf1,0xfa,0x8d,0x4b,0x89,0xe7,0xf9,0x15,0x62,0x62,0x00,0x02,0xd9,0xd3,
+ 0x45,0x7a,0x75,0x80,0x62,0x93,0xbb,0xee,0x46,0x5f,0xf6,0xfa,0x82,0x19,
+ 0xab,0xdb,0x7d,0xea,0xd2,0x3d,0x43,0xb1,0x7b,0x60,0xdb,0xe2,0x57,0xdc,
+ 0x76,0x46,0x6a,0xf2,0xb1,0x9d,0x07,0x45,0xd9,0x7e,0xfc,0x04,0xab,0x7d,
+ 0xb3,0x56,0x2b,0xaf,0x5a,0x33,0xcf,0x40,0xdc,0x72,0x54,0x34,0xbf,0x07,
+ 0x80,0x18,0xd3,0x42,0xa7,0xcf,0x9c,0x98,0x01,0xf8,0xf9,0x7c,0x30,0x27,
+ 0xa9,0xed,0x88,0x0d,0x78,0x2b,0xd5,0xa9,0x5a,0xfe,0xdd,0x58,0x24,0xb9,
+ 0x18,0x03,0xf3,0x0b,0xa6,0x89,0xd0,0x2d,0x63,0xb8,0x91,0x18,0xe2,0x4e,
+ 0xde,0x00,0x76,0x9f,0xab,0x25,0x1f,0x00,0xc3,0x9a,0x51,0x3e,0x13,0x65,
+ 0xcc,0xcd,0x1e,0x4b,0x8a,0x89,0xa1,0x47,0x7e,0xa1,0xd5,0xeb,0xec,0xf4,
+ 0xf4,0x9b,0x08,0xd5,0x84,0x90,0x46,0x9a,0xd6,0x23,0x08,0xd4,0x6c,0x93,
+ 0x73,0x19,0x2a,0x1e,0xe6,0xfd,0xdb,0xf2,0xbc,0x3d,0xd7,0x12,0xac,0xeb,
+ 0x90,0x45,0xfd,0x61,0xe5,0xf2,0xbd,0xdf,0xef,0xce,0xd1,0xe5,0x72,0xe9,
+ 0x03,0x63,0xca,0xed,0x32,0xfd,0xaa,0xe2,0x62,0xf6,0x9d,0x8f,0x91,0x9f,
+ 0xcf,0x57,0x4c,0x01,0x80,0xd7,0x05,0x50,0x64,0x91,0x6a,0x7a,0x6f,0xe6,
+ 0x0c,0x08,0x7b,0x60,0x1d,0xfd,0x62,0x3c,0x1a,0xac,0x9b,0x3e,0xc1,0x8e,
+ 0x60,0xc6,0x14,0x95,0x62,0xee,0xb0,0xd3,0x33,0x52,0xa4,0x2b,0x0b,0xe4,
+ 0xfa,0xfd,0x86,0x40,0xed,0xcf,0x09,0x77,0x20,0x69,0xfd,0xc4,0xba,0xba,
+ 0xc6,0xb9,0x74,0xf9,0x06,0x19,0xbd,0x7d,0xb0,0xc5,0x60,0x8a,0x67,0x45,
+ 0xe0,0x6d,0x47,0x2d,0x12,0xe1,0xe3,0xf1,0x78,0x3e,0x9f,0xc2,0x2b,0xf7,
+ 0x56,0x55,0x71,0x70,0x7e,0x96,0x1c,0x25,0xe6,0xd7,0x6b,0x8e,0x31,0xf2,
+ 0x32,0x46,0xba,0xae,0x66,0xdd,0xa8,0x41,0xb7,0x34,0x4f,0x36,0x00,0x24,
+ 0x43,0x46,0x58,0xbe,0x2f,0x91,0xac,0x49,0x4b,0x90,0xf3,0x45,0x1f,0x8c,
+ 0x57,0x77,0xb6,0xaa,0x76,0xfa,0x87,0x99,0xbc,0xd5,0xed,0xc6,0x18,0x17,
+ 0xf6,0xd3,0x16,0xe2,0xf8,0xb0,0xe5,0x3a,0x02,0x1f,0xeb,0xb9,0x0f,0xa2,
+ 0xec,0x32,0xea,0xe0,0x8b,0x1a,0xa4,0xfe,0x49,0x0b,0x8f,0x2e,0xc2,0xfd,
+ 0xfe,0xb8,0xdd,0xae,0x88,0x28,0xb2,0x1f,0xa7,0x2c,0x3e,0x9c,0x9f,0x85,
+ 0x65,0x29,0x90,0x13,0xaa,0xad,0x18,0x22,0x00,0x90,0x43,0x42,0x87,0x84,
+ 0xab,0xc8,0x45,0xdb,0x17,0x9d,0x5f,0x2a,0x02,0x5d,0x9d,0xb3,0xe9,0xcc,
+ 0x78,0x31,0x2e,0xab,0x88,0x54,0x47,0xfc,0xfb,0x06,0x3b,0x13,0x4d,0x8c,
+ 0x71,0xb7,0xd1,0x50,0x7a,0xc0,0x3a,0x9c,0x97,0x11,0x2a,0x8e,0xe0,0xe9,
+ 0x6c,0xb6,0xd6,0x1f,0x1a,0x85,0x6d,0x37,0x42,0x16,0x27,0x6e,0x84,0xfe,
+ 0xdb,0x66,0xa4,0xdd,0x87,0x61,0xbb,0x0d,0xf0,0xf5,0x7a,0x5d,0xaf,0x57,
+ 0xe5,0x93,0x1c,0x41,0xec,0xf4,0x9b,0xb9,0x39,0xcc,0x9e,0x5c,0x4a,0xfc,
+ 0x7a,0x3d,0x43,0x88,0xcc,0x40,0x8e,0x08,0xdd,0xba,0x91,0xdb,0xc8,0x7e,
+ 0x15,0xbb,0x10,0x56,0x75,0x4e,0x95,0xdd,0x15,0x0b,0xb5,0xc9,0xdf,0x56,
+ 0xd0,0xae,0x50,0xf4,0xc3,0x60,0xbe,0xb5,0x6c,0xcb,0x4a,0x93,0x74,0x58,
+ 0xce,0x2e,0x83,0x19,0x21,0x8d,0xc9,0x5e,0x99,0xf1,0x8f,0x8d,0x74,0x30,
+ 0x13,0xa7,0xf2,0x28,0xa8,0x8d,0xb4,0x25,0xcc,0xea,0x13,0x5c,0xfd,0x28,
+ 0x85,0x30,0xdf,0xef,0x37,0x5d,0xfe,0x60,0x3f,0xe4,0x08,0x9a,0xaa,0x13,
+ 0x84,0xae,0x0f,0x69,0x89,0xf3,0x65,0xf5,0x1a,0xb9,0x75,0x27,0xeb,0x6a,
+ 0x9e,0x96,0x8b,0xe5,0xb1,0x5e,0x5d,0xed,0x74,0x16,0x0e,0xc6,0x46,0xb2,
+ 0x95,0xe0,0x49,0x83,0xbb,0xd2,0x6d,0x43,0x7b,0xbc,0xa9,0x05,0x0e,0x26,
+ 0xc1,0xba,0x68,0xdb,0xdf,0xc6,0x68,0x2d,0x8f,0x52,0xfd,0x49,0x36,0x96,
+ 0xd7,0x01,0xa8,0x6c,0x32,0x96,0x1c,0xa9,0xb8,0x98,0x76,0x41,0x8e,0x1c,
+ 0xc7,0xc6,0xad,0xfb,0x7a,0xbd,0x6e,0xb7,0x9b,0xd5,0xfb,0x91,0x76,0x59,
+ 0xbf,0x5e,0x69,0xe3,0x61,0x72,0x9e,0x19,0xe6,0x79,0x8e,0x21,0x29,0x4d,
+ 0x3f,0x21,0xc1,0xe2,0xef,0x8d,0xed,0xc2,0xdd,0x26,0x67,0x7b,0x4d,0x4b,
+ 0xc7,0x35,0xa2,0x4b,0xa5,0x65,0x2d,0xbb,0x76,0x87,0x7b,0x59,0xeb,0x2a,
+ 0x97,0x12,0x7d,0x7f,0x7f,0x4b,0x53,0x41,0x09,0xdd,0x06,0x31,0x68,0xe5,
+ 0x37,0x59,0xa1,0xa6,0x33,0xd4,0xb9,0x0b,0xaf,0xc0,0x5e,0x67,0xa8,0xd9,
+ 0x6a,0x53,0x26,0x22,0x92,0x4b,0xbe,0xe6,0xd7,0xf5,0x76,0x95,0x95,0xb8,
+ 0x9d,0x85,0x26,0xd0,0xa5,0x5a,0xa9,0x1e,0x53,0xd5,0x7b,0x06,0x78,0xcd,
+ 0xaf,0x14,0x22,0x00,0xe0,0xd2,0x94,0x41,0xdd,0xdf,0xbe,0x44,0x1e,0xb0,
+ 0x90,0x86,0xb6,0x04,0xc0,0xb5,0x33,0xd1,0x87,0x35,0xb4,0xe9,0x8b,0x87,
+ 0xf6,0xb2,0x66,0xbf,0xc8,0xcc,0xe7,0xf3,0x79,0x69,0x84,0x67,0x6b,0x13,
+ 0x0e,0x07,0x07,0xcb,0x90,0x78,0xb0,0x4f,0x60,0x33,0xb4,0x9a,0xdf,0xcd,
+ 0x8f,0xd1,0x21,0xc8,0x42,0xc9,0x1b,0x1d,0x51,0x0c,0xe1,0x76,0xbb,0x23,
+ 0xc2,0xf9,0x7c,0xea,0xa3,0x42,0x46,0x10,0x85,0xb9,0xd2,0x13,0x11,0x39,
+ 0x00,0x9c,0xc3,0x9c,0x96,0xc6,0xb9,0x23,0x72,0x8b,0xf6,0xe2,0xd6,0xf3,
+ 0x39,0x68,0x87,0x4b,0xe1,0xf7,0x1d,0xa9,0xdb,0x3c,0x1e,0xba,0x3b,0x73,
+ 0x3b,0x30,0x51,0xf9,0xc6,0x7b,0x7f,0xb9,0x5c,0xce,0xe7,0x33,0xe9,0x74,
+ 0x59,0x8b,0x35,0x7c,0x04,0xd8,0x55,0x36,0x9a,0xfa,0x99,0x86,0x92,0xde,
+ 0xb7,0x66,0x82,0xd6,0xf5,0x17,0xf1,0x30,0xf6,0x96,0x0d,0x8b,0xa2,0x79,
+ 0xce,0x51,0x08,0xf3,0xe3,0x71,0x47,0xc4,0xcb,0xe5,0xd2,0x7a,0x94,0x23,
+ 0xf5,0xa5,0xea,0x73,0x24,0x22,0x72,0x94,0x58,0xe8,0x03,0x23,0x80,0x54,
+ 0xf5,0xdc,0x52,0xda,0xdb,0x5c,0x3d,0xa4,0x46,0x89,0x5a,0xfb,0xd1,0xa5,
+ 0x52,0x0e,0xf2,0x30,0x54,0x39,0xbb,0xe1,0x88,0x57,0x40,0x6e,0xfe,0x7c,
+ 0x3e,0xeb,0x5e,0x53,0xfa,0x70,0x85,0x55,0xf1,0x1a,0x65,0x1f,0xa9,0x92,
+ 0xe7,0xf4,0x23,0x6d,0xfb,0x2b,0x52,0xa5,0x61,0x06,0x4e,0x4b,0xd1,0xbe,
+ 0x1b,0x37,0x64,0x36,0x9f,0xe4,0x53,0x5d,0xaf,0x57,0x91,0x7d,0x56,0x48,
+ 0xe9,0xd4,0x97,0x46,0x9a,0x52,0xeb,0x0e,0x00,0x9f,0x18,0x74,0x49,0x24,
+ 0x11,0x3a,0x72,0x8b,0xbf,0x67,0x16,0xf6,0xf8,0x72,0xbb,0xd8,0x5e,0xc5,
+ 0x97,0x1f,0xb4,0x74,0xdd,0xc6,0xe1,0xda,0x98,0xc9,0xfc,0xd7,0x21,0x73,
+ 0xbe,0xfd,0xde,0x7b,0xff,0xf5,0xf5,0x25,0x6c,0x83,0xa2,0xea,0x54,0x35,
+ 0x26,0x83,0x22,0xcf,0xd8,0x4b,0xe5,0x59,0xf8,0xed,0xcb,0xd9,0xdb,0x2d,
+ 0x39,0x3c,0xf4,0xfc,0xee,0x05,0x23,0x75,0x1a,0xc5,0x26,0xa4,0xa6,0x15,
+ 0x31,0xf2,0x92,0x7e,0xe8,0x4a,0x14,0xe2,0x62,0x8c,0xf7,0xfb,0x0d,0xd6,
+ 0xc5,0xbd,0xd5,0xdb,0x7e,0xb7,0x99,0xbb,0xef,0x32,0x7b,0x06,0x9c,0xc3,
+ 0x1c,0x39,0x2d,0x1c,0xa0,0x6e,0x59,0xd5,0x8a,0x84,0x5c,0xc3,0xce,0xf2,
+ 0xb2,0x8e,0x93,0xef,0xb7,0xab,0xc4,0x25,0xd5,0x44,0x97,0xa4,0x29,0x49,
+ 0xb4,0x27,0x2c,0xdf,0xe8,0xde,0xa1,0xe0,0x46,0xe3,0x46,0x01,0x48,0x15,
+ 0x49,0x46,0x13,0xa5,0x09,0xae,0x54,0xc9,0xbe,0xac,0x06,0x77,0x94,0xbe,
+ 0x85,0xa3,0xd2,0x91,0x77,0xa1,0xa5,0x86,0x75,0x67,0x8e,0xbc,0xdc,0x6e,
+ 0xd3,0x28,0x59,0x43,0xc4,0xf1,0x98,0xa4,0x00,0x57,0xd6,0x4a,0xa1,0xdf,
+ 0x4e,0xde,0xfb,0x10,0xe6,0xaa,0x80,0x6a,0xd9,0xa0,0x94,0xfa,0x29,0x84,
+ 0x70,0xbf,0xdf,0xbf,0xbf,0xbf,0x04,0xb7,0x33,0x68,0x12,0x47,0x6a,0x7f,
+ 0xeb,0x03,0x75,0xc0,0x29,0xcc,0x81,0x60,0x42,0x2f,0x19,0x86,0x64,0x5b,
+ 0x24,0x78,0xcc,0xd6,0x39,0xfd,0xfa,0xfe,0x45,0xe4,0xd8,0x64,0xa4,0xd9,
+ 0xbb,0xc8,0xce,0xd6,0x05,0xf4,0xb1,0x17,0xa4,0x34,0x64,0xcb,0x8d,0x43,
+ 0x4d,0xda,0x8b,0x95,0x4e,0x61,0xa3,0x62,0xd6,0x4d,0x93,0x60,0xc6,0xe7,
+ 0xc1,0xb0,0xe2,0x8d,0x2f,0xe1,0x84,0x62,0x8d,0x01,0x00,0x84,0x10,0x99,
+ 0x83,0xad,0x1e,0x28,0xf9,0xd8,0x46,0xaf,0xba,0x40,0x89,0x51,0x0a,0x47,
+ 0xf6,0xcc,0x89,0x31,0xd0,0x1d,0x60,0xce,0xb9,0x18,0x22,0x67,0xcf,0x31,
+ 0x3f,0x8b,0xf2,0x91,0xe4,0x4a,0x09,0x11,0x43,0x98,0x6f,0xb7,0xf4,0x8f,
+ 0x5f,0x7f,0x5d,0x2e,0xe7,0xe7,0xf3,0x35,0x42,0x83,0x33,0x38,0xe9,0xbd,
+ 0xfe,0x15,0xa5,0x94,0xe6,0x10,0x3c,0x80,0x73,0x08,0x08,0x8e,0x08,0x10,
+ 0x63,0x88,0x96,0x49,0x32,0xbb,0xbe,0x73,0x04,0xc0,0xd1,0x44,0xd3,0x88,
+ 0xdb,0xa2,0x77,0xb1,0x79,0x4b,0x81,0xa8,0x78,0x6b,0x5d,0x33,0x66,0x23,
+ 0xaa,0x2a,0x63,0x8a,0xb2,0x18,0x59,0xca,0x57,0x7b,0x94,0x7d,0xa6,0xeb,
+ 0x9d,0x14,0x73,0xd0,0xd9,0x67,0xcf,0xc8,0x2a,0xba,0x32,0x5d,0x69,0xfe,
+ 0x2d,0x5b,0xa8,0xb4,0x17,0x9e,0xfd,0xa2,0xb4,0xab,0x65,0x37,0xf5,0xae,
+ 0x33,0x06,0xfa,0x21,0x6d,0xa7,0x4c,0xdd,0xa7,0x44,0x09,0xc9,0x11,0xc6,
+ 0x10,0x6f,0xf7,0xeb,0xf7,0xf7,0xaf,0xf3,0xf9,0x5c,0x2e,0xf1,0xfd,0x6c,
+ 0xe6,0xd7,0x7e,0x2f,0x4b,0x17,0x5e,0xcf,0xc7,0xe9,0x7c,0x21,0x42,0x09,
+ 0xfb,0xf7,0xb0,0xaa,0x8a,0x49,0x7f,0xbd,0x5e,0x2b,0xa9,0xb4,0x7e,0x80,
+ 0xbc,0x66,0x57,0xe6,0x6f,0x5a,0x66,0xcf,0xa4,0x5e,0x5d,0xce,0xa2,0xc0,
+ 0xe5,0x56,0x9c,0xe8,0xb3,0x93,0xa2,0x7b,0x62,0xa0,0x98,0x9f,0xed,0x70,
+ 0x55,0x77,0xa8,0x9e,0xaa,0x68,0x40,0x31,0xec,0x31,0x46,0xe7,0x08,0xc9,
+ 0x55,0x59,0xb9,0x60,0x4f,0xf8,0x84,0xa8,0xfb,0x4e,0xd9,0x94,0xc8,0xb0,
+ 0xac,0xf3,0x4b,0x3d,0x85,0x81,0x18,0xd9,0x11,0x85,0x10,0xee,0xb7,0xdb,
+ 0xf7,0xf7,0xb7,0xac,0x80,0x53,0xe0,0xc3,0x48,0x53,0xaa,0xdf,0x91,0x32,
+ 0xb4,0xf3,0x0b,0x46,0x83,0x08,0x63,0xe2,0x8c,0x46,0xa4,0xa8,0x0a,0x68,
+ 0x77,0x7f,0x13,0x34,0x22,0x41,0x6d,0xf4,0xb3,0x5c,0xb3,0x95,0xb1,0x55,
+ 0x64,0x7e,0x5d,0x46,0x4e,0xf5,0xb9,0x75,0x1a,0xd0,0x39,0x89,0x71,0xb6,
+ 0xc5,0x7b,0xa4,0x0b,0x34,0x22,0xfe,0xf2,0x09,0x9a,0xdc,0xc6,0x69,0xb9,
+ 0xd0,0xde,0x86,0x38,0x9d,0x10,0x82,0x14,0x64,0x88,0xdc,0xae,0x38,0xb8,
+ 0xb7,0xf0,0x65,0x7f,0x9c,0x10,0x99,0x91,0x99,0x1d,0x41,0x98,0xe7,0x9f,
+ 0x9f,0x9f,0xef,0x5f,0xbf,0xa4,0x97,0x53,0x8e,0x61,0x67,0x70,0x50,0x18,
+ 0x1b,0x11,0x59,0x21,0x24,0xec,0x84,0x63,0x09,0x29,0x25,0xf1,0x71,0x6c,
+ 0xa9,0xa2,0x61,0x3f,0x24,0x6a,0x9b,0x20,0xad,0xfe,0x56,0xab,0x93,0x59,
+ 0xee,0x02,0xc8,0x88,0xe1,0x15,0xab,0x73,0xd8,0x80,0xae,0x2c,0xf8,0xa8,
+ 0xee,0xbb,0xed,0xf3,0x6f,0xbe,0x85,0xee,0xb6,0x1d,0xe8,0x95,0x8e,0x92,
+ 0xb5,0x1e,0x59,0x5a,0x97,0x95,0x12,0x93,0x20,0xc7,0xbe,0x54,0x2a,0x23,
+ 0xd6,0x72,0x6a,0x7e,0x8f,0x8e,0x42,0x08,0xb7,0xeb,0x35,0xc5,0x20,0x7b,
+ 0xbf,0xaa,0x87,0xf8,0xdd,0x25,0x75,0x31,0x46,0x4e,0x91,0x63,0xf4,0xde,
+ 0xd1,0xd2,0x38,0xe6,0xfd,0xbe,0xf9,0xcd,0x84,0x08,0xba,0x44,0xc8,0x17,
+ 0x6d,0x9e,0xb6,0x7f,0x14,0xf5,0x2e,0x6a,0xa7,0xe5,0xaa,0xd1,0xb1,0xc4,
+ 0x7d,0xb6,0xfc,0xda,0xea,0xa2,0x6d,0x40,0x8c,0xc3,0xd2,0xcf,0x38,0x81,
+ 0xf2,0xb8,0xc6,0xdb,0xe1,0x34,0x4b,0xdb,0x58,0x64,0xd5,0x69,0x85,0x9b,
+ 0x79,0x5b,0xbd,0xcf,0x74,0xdd,0xa2,0xdf,0x10,0xb4,0x3d,0x26,0xfd,0x73,
+ 0x40,0x00,0xe7,0x30,0x84,0xf9,0x7a,0xbb,0xa6,0x18,0x5b,0x7b,0xbf,0xde,
+ 0x6d,0xe6,0x8a,0x74,0xbc,0xa0,0x74,0x08,0x00,0x68,0x9e,0x43,0x75,0xda,
+ 0x2d,0xad,0x2b,0x6e,0x74,0x7d,0x5f,0x63,0x75,0x60,0xbd,0xc6,0x70,0x48,
+ 0xec,0xa0,0x5b,0x00,0xc6,0x5b,0x91,0x94,0xed,0x32,0x6c,0x69,0xfc,0xdf,
+ 0xfe,0x65,0x7a,0xcc,0xdb,0x8e,0x19,0xab,0x6a,0x6b,0xce,0x2a,0xa8,0xe7,
+ 0xdd,0x2e,0xb4,0xcc,0xb4,0x6f,0x40,0x08,0x8b,0x7b,0xb3,0xb0,0x18,0x20,
+ 0x60,0x24,0xa4,0xf0,0x9a,0x7f,0x7e,0x7e,0xcb,0x56,0x44,0x69,0xe5,0x0d,
+ 0x96,0x98,0xca,0x27,0x98,0x52,0x82,0xb4,0xc0,0x26,0xc5,0x73,0x8b,0xde,
+ 0xf6,0x63,0x46,0xcd,0xce,0xcb,0x66,0xe6,0x21,0x8b,0x64,0xcb,0xaf,0xb7,
+ 0xe6,0xf7,0xfa,0x0d,0x68,0x2a,0x6d,0xdd,0xc7,0xa4,0x9c,0x6f,0xfd,0x56,
+ 0x86,0xd3,0xb2,0x6e,0xbe,0x3c,0x88,0xf3,0x1c,0x74,0x49,0x5d,0x1e,0xc6,
+ 0x6b,0x9f,0x07,0x0d,0xf2,0x71,0x8d,0x02,0x99,0x19,0x65,0x1a,0x86,0x04,
+ 0x42,0x4d,0x31,0x84,0xdb,0xcf,0xef,0x94,0x72,0xbd,0x1f,0x9f,0xf9,0x5d,
+ 0x5b,0xc6,0xc9,0x79,0x2f,0x61,0xbc,0xf4,0x89,0x62,0x88,0x2d,0xe3,0x6c,
+ 0x71,0xb4,0x76,0x2e,0xa2,0xcc,0x9c,0x5b,0xbf,0x7b,0xf8,0xe4,0x4b,0x66,
+ 0xfe,0x7e,0x03,0x9a,0xaa,0x46,0x38,0xdb,0xd3,0xfa,0x9f,0x50,0x77,0xfb,
+ 0x76,0x6a,0xed,0x33,0xef,0x6b,0x10,0x89,0x29,0x84,0xc0,0x0c,0xde,0x4f,
+ 0xba,0x0e,0xb5,0x8c,0xeb,0x8d,0xa2,0xaf,0xe3,0x4e,0x4b,0x21,0x10,0x10,
+ 0x68,0xf9,0x97,0xa3,0x39,0x84,0xeb,0xcf,0x8f,0xf8,0xfb,0x6c,0x13,0xe9,
+ 0xc8,0x38,0x58,0x58,0xd2,0x74,0x26,0x27,0x58,0x1c,0x06,0xa2,0x18,0x62,
+ 0x58,0x41,0x6c,0xad,0xda,0x97,0x56,0x3b,0xaa,0x3b,0x5f,0xca,0x28,0x6a,
+ 0x84,0x95,0xcf,0x4a,0x34,0xab,0x51,0xf6,0x1b,0xd0,0xd4,0xda,0x17,0x51,
+ 0x46,0x9e,0x7f,0x8b,0x77,0x2f,0x2f,0xae,0xe9,0xa9,0x72,0xdc,0x66,0xb2,
+ 0x07,0x80,0x18,0x53,0x88,0x21,0xa5,0xe4,0x1c,0x4d,0xde,0x6d,0x53,0x0c,
+ 0x68,0x95,0xbe,0x44,0xbe,0xe8,0xbf,0x60,0x2d,0xa7,0xca,0x3e,0x37,0x9c,
+ 0xe7,0xfb,0xef,0x7f,0xff,0x2f,0x73,0x14,0x9b,0x3f,0xd8,0x23,0x31,0xde,
+ 0x3a,0x4d,0xde,0xcb,0x90,0xa5,0x23,0x4c,0x31,0x85,0x18,0xb7,0x70,0xac,
+ 0xc2,0x98,0xc2,0x36,0xa0,0x2b,0xb1,0x9d,0x23,0xf0,0x8a,0xb2,0xe5,0x9a,
+ 0x03,0x67,0x8d,0xbc,0x0e,0xe9,0x61,0xa8,0x7a,0x7c,0xc6,0xdd,0xfc,0xdf,
+ 0x62,0x0f,0x64,0xe8,0x5c,0x54,0xbf,0xc9,0xa1,0x2b,0x38,0x88,0x98,0x9c,
+ 0xf7,0x6b,0x84,0x6f,0x5d,0x3d,0x5a,0x8d,0x57,0x17,0x09,0x9b,0xe2,0xb3,
+ 0x3d,0x7a,0x8e,0xa6,0x10,0x6f,0x3f,0xbf,0x7f,0x52,0x5a,0xe2,0xfc,0x43,
+ 0xd7,0x6e,0x0e,0x14,0x7b,0xe7,0x10,0x89,0x65,0x66,0x16,0x20,0xec,0x71,
+ 0x8b,0x58,0xe0,0x07,0xf5,0x04,0x97,0xe4,0x2b,0x55,0xb0,0xec,0xe0,0x9c,
+ 0x72,0x95,0x4a,0x29,0x73,0xed,0x2d,0x7a,0x18,0x6a,0xa5,0x8f,0x23,0x7c,
+ 0x8c,0x6f,0xad,0x4b,0x69,0x11,0x6b,0x2d,0xce,0x65,0x1d,0x2b,0x51,0xee,
+ 0x97,0x2c,0x64,0x65,0x66,0x60,0x58,0x0d,0xbe,0x27,0xc2,0x2d,0xb0,0x33,
+ 0xad,0x7d,0xd6,0xff,0xf3,0xae,0xa0,0xbf,0x81,0x77,0x69,0x09,0xfe,0x9c,
+ 0xfb,0x0e,0xe1,0xe7,0x7a,0xbd,0x72,0x0a,0x76,0xa7,0x7b,0x07,0xb8,0x11,
+ 0x53,0x62,0x4e,0xde,0x11,0x92,0x5b,0x31,0x42,0x18,0x22,0xc7,0x98,0x34,
+ 0xea,0xda,0x6b,0xd8,0x8e,0x03,0x40,0x83,0xf9,0x6c,0x17,0xe6,0x21,0x02,
+ 0xac,0x05,0x75,0xcf,0x9e,0x67,0xb9,0x58,0xa2,0x73,0xe5,0xfa,0x04,0xde,
+ 0xe1,0x1e,0xa5,0xc3,0xb4,0x7e,0xd0,0x48,0xe8,0x09,0xd5,0x8d,0xa8,0x92,
+ 0x95,0x66,0x9f,0x41,0x64,0x1f,0x62,0x48,0x31,0xca,0xa4,0xb4,0x9f,0x26,
+ 0xb7,0xec,0xc6,0xde,0xd7,0xec,0x64,0x8e,0x59,0x8e,0xc9,0xba,0x5f,0x7b,
+ 0x2d,0x9a,0x33,0xc3,0x52,0x5f,0x13,0xe0,0x8c,0x77,0xdf,0x21,0x5c,0x7f,
+ 0x7e,0x7e,0x8b,0xec,0x85,0x87,0xa2,0xb5,0x7f,0x36,0x84,0xc0,0x29,0x12,
+ 0x20,0x92,0x43,0x40,0x47,0x08,0x00,0x21,0x26,0x29,0x8b,0x6a,0x5c,0x54,
+ 0x23,0xae,0xdf,0x96,0x4b,0x64,0x0d,0x11,0xf8,0xb3,0x89,0xd5,0x4c,0xf1,
+ 0xec,0xf2,0xa5,0xc3,0x2b,0x53,0x0b,0x08,0x3b,0x12,0xd9,0x8d,0x8b,0xbc,
+ 0x4f,0xc3,0x68,0xcb,0x71,0x31,0x86,0x72,0xae,0x58,0xef,0x44,0x86,0xb2,
+ 0xe6,0x39,0x28,0x6d,0x95,0x66,0xf2,0x6b,0xff,0x92,0xf3,0x1a,0x8f,0x1c,
+ 0x02,0xd0,0xd1,0x27,0x75,0x90,0x04,0x08,0x9e,0xbe,0x62,0x0c,0xd7,0x9f,
+ 0x6b,0x8a,0x41,0x86,0x55,0xab,0x59,0x50,0x08,0x01,0x80,0x21,0x25,0x72,
+ 0x32,0x2f,0x01,0x80,0x18,0xe3,0xe2,0x13,0xd3,0xd2,0x8e,0xe3,0xb2,0x61,
+ 0xa8,0x40,0x1d,0x68,0x4c,0x6e,0x7c,0x46,0x3c,0x53,0x6a,0x60,0x99,0xc4,
+ 0xf7,0xd1,0x98,0x94,0x9d,0x05,0x9b,0xca,0x57,0x51,0xd5,0x1f,0xcf,0xea,
+ 0x1d,0x62,0xb9,0xa6,0x69,0x22,0x72,0xf3,0x1c,0x42,0x98,0xa5,0xd3,0x50,
+ 0x46,0x2e,0xb2,0x59,0x2e,0xc6,0x18,0x42,0x14,0x0a,0x02,0x12,0x51,0x18,
+ 0xa9,0xab,0x4f,0xdf,0x7f,0x5c,0xd6,0x97,0x68,0x7e,0x27,0x03,0x12,0xce,
+ 0x4d,0x31,0x86,0xeb,0xf5,0x9a,0x52,0x1e,0xeb,0x2d,0xd6,0x48,0x8a,0xe4,
+ 0x31,0x92,0x73,0xb8,0x60,0xad,0x28,0x44,0x0e,0x5a,0xa4,0x5b,0xcf,0x52,
+ 0xb5,0x0c,0x2c,0x31,0x44,0x99,0x2b,0xbd,0x4b,0x12,0xdc,0x21,0x08,0xcd,
+ 0xe1,0x81,0x0d,0x31,0xed,0x1a,0xaa,0xd5,0xa8,0x41,0x23,0x91,0xce,0xe6,
+ 0xf5,0x3f,0x11,0x79,0x49,0x7c,0xa5,0x95,0xd4,0x94,0xd2,0xf3,0xf9,0xd2,
+ 0x9d,0x1a,0xa5,0xb3,0x07,0x80,0x94,0xe2,0xb2,0xe1,0x1e,0xc9,0x4f,0x27,
+ 0x47,0x1e,0xf7,0x52,0xdf,0x2b,0x3d,0x6f,0x0d,0x52,0x5e,0x5b,0x62,0xb8,
+ 0x42,0xa9,0x16,0xb2,0x23,0x17,0x63,0xb8,0xfe,0xfe,0x2d,0x75,0x3d,0xb5,
+ 0xf9,0xcb,0x33,0x4d,0x89,0xd3,0x62,0x0f,0xbc,0x23,0x44,0x17,0xd6,0x29,
+ 0x57,0x5b,0x4d,0x29,0xf7,0x48,0x30,0xa7,0xcb,0x65,0xab,0x14,0xc9,0xae,
+ 0x4d,0x68,0x8c,0xb9,0xb7,0xea,0xb2,0xfd,0x38,0xc9,0x42,0x8c,0xb2,0x32,
+ 0x70,0xa7,0xce,0xbf,0x0b,0xee,0xf2,0x2a,0x74,0xb7,0x7c,0xfb,0xee,0xe2,
+ 0x9d,0x3e,0xcd,0xbb,0x40,0xbc,0x85,0x97,0x40,0xee,0x5b,0xe9,0xcc,0x8b,
+ 0xb2,0x8f,0x3c,0x32,0xe9,0x4c,0x2f,0x4f,0x9f,0x84,0x4f,0x65,0x19,0x5d,
+ 0x37,0x81,0xdd,0xaa,0x8c,0xbb,0x0e,0xbe,0x6d,0xee,0x88,0xd6,0x13,0x09,
+ 0xd5,0x4a,0xe2,0x78,0xbb,0xfd,0x88,0xcd,0x17,0xbd,0x5f,0xc3,0x8e,0x28,
+ 0x33,0xdb,0xce,0x39,0x40,0x12,0x6c,0xea,0xfe,0xe0,0x82,0xa9,0xc8,0xda,
+ 0x8d,0xba,0x27,0xef,0x27,0x4b,0x6d,0xa2,0xab,0xc6,0x2d,0xec,0xae,0xe5,
+ 0xda,0xab,0xb1,0x76,0x35,0xf5,0x10,0x2b,0xd8,0xd9,0xfe,0x5d,0xd9,0x5e,
+ 0xd0,0xcf,0x10,0xf6,0x00,0xa0,0xb7,0xcb,0x73,0xd0,0xdd,0xd4,0xae,0x2a,
+ 0xe2,0xd7,0x4e,0xa2,0x56,0xb2,0x24,0xad,0x2f,0x4b,0x3a,0x06,0xf0,0x8a,
+ 0x6b,0x35,0x37,0xa4,0x94,0xc8,0x2d,0x80,0xd7,0x02,0xa8,0xb1,0xb5,0x4a,
+ 0x76,0x26,0xdf,0x34,0x70,0x57,0xa3,0x8f,0xde,0xf9,0x18,0xe3,0xed,0x76,
+ 0x4d,0x71,0x16,0xfd,0x5e,0x6e,0x09,0x68,0xf2,0x13,0x2d,0x52,0x8f,0x21,
+ 0x86,0x15,0x47,0xd5,0xeb,0xe5,0x7b,0xef,0x74,0xe7,0x92,0xad,0xd0,0x65,
+ 0x0b,0xae,0x0f,0x17,0xe4,0x1c,0xee,0x61,0xc9,0xfa,0x5b,0x83,0x2b,0xfb,
+ 0xa8,0x4c,0x0f,0x64,0x57,0x48,0x59,0x3c,0x6f,0x6d,0x46,0xfc,0x00,0xa3,
+ 0x67,0xd5,0x65,0x9a,0x26,0xef,0x9c,0xe4,0x72,0x16,0x39,0xf9,0x7a,0xbd,
+ 0x74,0x5d,0x59,0x2d,0xf0,0xa4,0xb5,0xea,0x27,0x50,0xb2,0x94,0x00,0x10,
+ 0x05,0xf4,0x08,0x56,0xf3,0x37,0x23,0x6f,0x5b,0x3a,0x66,0xa2,0x5d,0xda,
+ 0x78,0x48,0x08,0x84,0xce,0xbb,0x18,0xe2,0xcf,0xf5,0x27,0xc5,0xb0,0xc6,
+ 0x19,0xec,0xa7,0x89,0xbc,0x97,0x42,0x82,0xe4,0x93,0xeb,0xcd,0x57,0xc6,
+ 0x72,0xc5,0x97,0x7b,0xef,0xa6,0xe9,0x34,0x4d,0x93,0x42,0xd7,0xd5,0x0e,
+ 0x6b,0x63,0xa2,0xdc,0x25,0xfc,0xae,0xd4,0x6d,0x35,0x6c,0x70,0xe1,0x92,
+ 0xfe,0xd0,0x97,0x0a,0x2d,0x6c,0xd9,0xd5,0xda,0xef,0x5b,0x05,0xe4,0x56,
+ 0xae,0xbf,0x5b,0x66,0xed,0xbd,0x28,0x56,0x86,0x8d,0x21,0xc2,0x94,0x16,
+ 0xb2,0x10,0xc1,0x0a,0xea,0x9a,0x76,0x73,0x4b,0xd2,0x17,0x61,0x44,0x0e,
+ 0x71,0xa1,0xa4,0x14,0x56,0x13,0x80,0xc4,0x4a,0x5d,0x91,0x45,0xf9,0xdb,
+ 0xdc,0x8b,0xa9,0xf1,0x23,0xad,0x51,0x02,0xa3,0x77,0x9c,0xd2,0xfd,0x76,
+ 0x9b,0x4e,0x13,0xa2,0x98,0x6b,0x0f,0xc0,0x21,0x46,0xcb,0x55,0x01,0x06,
+ 0x19,0xa2,0x6d,0x37,0x1d,0x45,0x9a,0xa6,0x93,0x73,0xce,0x82,0x10,0x15,
+ 0xeb,0xa0,0x1e,0xad,0x55,0x08,0x19,0x69,0x18,0x56,0x3b,0x34,0x59,0xf9,
+ 0xab,0x1f,0x2a,0x52,0xd5,0x6e,0x64,0x92,0xf8,0xcc,0xd4,0x77,0x72,0x7d,
+ 0x35,0xf2,0x8a,0x1e,0x2c,0x2e,0xbb,0xe4,0xee,0xf3,0x3c,0x57,0x4b,0xb9,
+ 0xf2,0xd0,0xd6,0x58,0x06,0x38,0x49,0x11,0x28,0xa5,0xc4,0x31,0x41,0x62,
+ 0x5c,0x49,0xd9,0x71,0xe7,0xdd,0x1b,0x7d,0xd7,0x85,0xc6,0x42,0xe0,0xd3,
+ 0x42,0x16,0x8e,0x18,0x42,0x92,0xdb,0x60,0xe6,0x10,0x62,0x8c,0x31,0x31,
+ 0x67,0xe8,0xaf,0xfd,0x30,0xc9,0x22,0xf5,0xd3,0x69,0x72,0xce,0xc5,0x98,
+ 0xca,0x7d,0x0f,0x5a,0xb0,0x12,0x67,0x5f,0xd6,0xed,0x5b,0x1b,0x14,0x3a,
+ 0xea,0x6e,0x5b,0x3e,0xd0,0xa0,0xad,0x2b,0xcf,0x93,0xaf,0x62,0x8c,0x34,
+ 0xaa,0xca,0x16,0x90,0x7f,0x60,0xe4,0x5b,0x26,0x48,0xa8,0xbd,0x84,0x3a,
+ 0xa5,0x35,0x56,0x21,0x88,0x2b,0x71,0xf6,0x82,0xce,0xb3,0xfb,0x29,0x61,
+ 0x3f,0x89,0xa8,0x2c,0xb0,0xb0,0x07,0x5e,0x03,0x10,0x90,0x25,0x2b,0xb2,
+ 0x8a,0x2e,0xcd,0x9b,0x85,0xf8,0x8a,0x90,0x12,0xe8,0xd5,0x92,0x74,0x32,
+ 0x52,0x8c,0x0c,0x90,0x8d,0x39,0x5a,0x9c,0x85,0xb5,0xd5,0xce,0xb9,0xd3,
+ 0x69,0x72,0xce,0x8b,0x3d,0xaf,0x12,0xd5,0xe9,0xe0,0x8a,0x94,0x29,0xb3,
+ 0xa7,0x54,0x96,0x3a,0x0e,0x27,0x6c,0x44,0x40,0xfa,0xe7,0x61,0x77,0x67,
+ 0x39,0x70,0x2d,0x20,0xa9,0xda,0xa8,0xcf,0x1a,0xb5,0xfd,0x12,0xb4,0x94,
+ 0xe7,0x4e,0xa7,0x93,0x42,0x69,0xdb,0x9e,0x82,0xc4,0x02,0xbd,0x5e,0x2f,
+ 0x09,0xfe,0xab,0x81,0xeb,0x3a,0x7b,0x83,0xd9,0xf2,0x83,0x95,0x76,0x16,
+ 0x01,0x08,0xd0,0x01,0x12,0x80,0x03,0x20,0x00,0x02,0x94,0x7f,0x10,0x90,
+ 0x18,0x09,0x76,0x52,0xdf,0x70,0xf0,0xa9,0x80,0x33,0x97,0xdb,0x78,0xb5,
+ 0x31,0x7a,0x3a,0x9d,0x54,0xea,0xd0,0x18,0xe4,0xd0,0xe7,0x99,0x41,0x9e,
+ 0xfb,0x55,0xed,0xce,0x0b,0x54,0xe3,0x4b,0x38,0x5e,0xd5,0xc1,0x2b,0xc9,
+ 0x5b,0x13,0x59,0x96,0x75,0x8b,0xc7,0xd5,0xbd,0x4f,0xd9,0x20,0xec,0x4d,
+ 0xc2,0xe4,0xa7,0xf3,0x28,0x9d,0x4b,0x89,0xa4,0x65,0x04,0x84,0x88,0xa6,
+ 0xc9,0x67,0x41,0x6c,0x86,0xc2,0x33,0x73,0x46,0xa9,0xd8,0x6f,0xbb,0x16,
+ 0x78,0x57,0xca,0x12,0x58,0x99,0x2c,0x4c,0x5f,0x67,0xb5,0xde,0x6b,0x9a,
+ 0x54,0x62,0x99,0xf5,0xee,0xac,0xd4,0xcf,0xe7,0x93,0x80,0x6e,0x2d,0xa2,
+ 0x19,0x1a,0x83,0x1c,0x72,0x93,0xaf,0xd7,0x2b,0x23,0x7e,0x6a,0x11,0x12,
+ 0x74,0x10,0x60,0xb6,0xbc,0x58,0x6d,0xb2,0x54,0xab,0x40,0x95,0x7d,0xd1,
+ 0x5a,0xbc,0x7b,0x37,0x94,0xeb,0x94,0x6b,0x60,0x3f,0x7d,0x28,0x8a,0x5b,
+ 0x0e,0x06,0x74,0x64,0x2f,0xaf,0x17,0x2a,0x7b,0x5d,0x5f,0xd2,0x4a,0x55,
+ 0xd5,0xf7,0x77,0xbb,0x09,0xb8,0xeb,0xf0,0xac,0x9d,0xde,0x0c,0x21,0xd9,
+ 0xed,0x9a,0x6c,0x90,0xb7,0xf3,0xf9,0xec,0x9c,0x0f,0x21,0xea,0xd3,0xef,
+ 0x48,0xdd,0x56,0xf7,0x64,0xa0,0x49,0xb1,0x53,0x96,0x5c,0xbb,0x93,0xbf,
+ 0x41,0x7b,0xf0,0x3d,0x33,0xcf,0xad,0xe9,0x4c,0x6a,0x1d,0xa8,0xea,0xa4,
+ 0xd6,0x07,0xc8,0x9c,0x8c,0x97,0x41,0x22,0x79,0xe7,0x9d,0x38,0xb9,0x77,
+ 0x71,0x5a,0xcc,0xfc,0x7c,0x3e,0xc5,0x3b,0x2a,0xae,0xb4,0xf5,0xbe,0x1d,
+ 0x82,0x09,0x30,0xe2,0xce,0xe0,0xcc,0x55,0x3a,0x1a,0x73,0x86,0xf2,0xf4,
+ 0x44,0x16,0xa7,0x49,0x0e,0x2c,0x10,0xb1,0xc3,0x47,0x51,0x62,0x0f,0x65,
+ 0xda,0x44,0x69,0xef,0x5a,0x2b,0x5e,0xfb,0x74,0x73,0xe5,0xa6,0xaa,0x4e,
+ 0x58,0xe6,0x5b,0x8d,0x48,0x11,0x8c,0xee,0xad,0xfe,0xc3,0x72,0x8d,0xc6,
+ 0x3e,0x12,0x9f,0x5b,0x7c,0xfb,0x5b,0x3d,0x1e,0xf9,0x20,0xcf,0xe7,0x33,
+ 0xa5,0x24,0xf5,0x35,0x9d,0xd9,0x1b,0x75,0x3a,0xca,0x4b,0xbd,0xc6,0xfb,
+ 0x32,0xa7,0x57,0x4b,0x56,0x39,0x7b,0x86,0xf6,0x1b,0xf1,0x15,0xd3,0x74,
+ 0x3a,0x9d,0x26,0x09,0xe0,0x2d,0x8e,0xbd,0xd5,0x15,0xcd,0x70,0xb4,0x99,
+ 0x3d,0x50,0xd6,0x43,0x4d,0xfa,0xcb,0xd6,0x0b,0xb4,0xb1,0xd8,0xd9,0xde,
+ 0xf0,0x16,0x18,0x7a,0x9b,0x9d,0x2b,0xa5,0x6e,0x23,0xf9,0x41,0x66,0xad,
+ 0x8e,0xe1,0xb5,0x8d,0x6a,0x69,0xa9,0x65,0x84,0xa4,0xe3,0x27,0x09,0x11,
+ 0xc5,0x73,0xbf,0xe6,0xa5,0x9e,0x2f,0x0a,0xa7,0x9e,0xb5,0xa4,0x05,0xa8,
+ 0x5e,0xae,0x63,0x8a,0x0f,0x39,0x26,0xf4,0xf7,0xa4,0x44,0x23,0x27,0xaf,
+ 0xca,0x95,0xd8,0xd2,0x75,0xcb,0x14,0x24,0xd5,0x3d,0x09,0x5f,0x74,0xe8,
+ 0x49,0x00,0x86,0x55,0xd9,0x57,0xb9,0x0e,0xf4,0xe2,0x72,0x68,0x60,0x80,
+ 0xc0,0x99,0x3a,0x31,0xa4,0xdd,0xf5,0xfb,0x56,0x24,0x9f,0xfd,0x8a,0xb6,
+ 0xda,0x54,0x2d,0xca,0x4a,0xf0,0xa0,0xec,0x53,0x5a,0x72,0x6b,0x47,0x4e,
+ 0xee,0x50,0x2d,0xbf,0xf7,0xde,0x4f,0xbe,0x9c,0x8d,0x2d,0x0c,0x7c,0xb3,
+ 0x3e,0x9d,0xb5,0x5b,0xaa,0x47,0x79,0xf3,0x1b,0x6b,0x25,0x5f,0x6a,0x8b,
+ 0x55,0x36,0x3d,0x38,0x5a,0xcd,0x2a,0xf5,0x7f,0x2d,0x3c,0x5b,0xad,0x93,
+ 0x73,0xac,0xa7,0xa1,0x5a,0x67,0x6b,0xdd,0x6a,0x26,0xfb,0xaa,0x77,0xf0,
+ 0x9d,0x20,0xdc,0x0e,0x53,0x7e,0x90,0xbf,0xe9,0xb2,0xa7,0x25,0xd6,0x4d,
+ 0x31,0xc5,0xf4,0x7c,0x3e,0x89,0x96,0xaa,0x08,0x1c,0xad,0x58,0x6a,0x35,
+ 0x3a,0xb3,0x0f,0x26,0x05,0x66,0x19,0xba,0x10,0x3f,0x52,0x2f,0x0a,0x19,
+ 0xcc,0x86,0x21,0xb1,0x80,0xfd,0xd4,0x4b,0x6b,0xd7,0xf4,0x2e,0x98,0xd7,
+ 0x1b,0x98,0xe7,0x59,0x10,0xd6,0x5a,0x95,0xeb,0x38,0x75,0xfb,0x91,0xc5,
+ 0x55,0x49,0xbb,0x56,0x0b,0x79,0x60,0x66,0x9b,0xe5,0xe7,0x3a,0xe6,0x5d,
+ 0x6d,0xe1,0x67,0x5f,0x62,0x7b,0x64,0x84,0xea,0x90,0xca,0xd7,0x97,0xfe,
+ 0xc3,0x52,0xcc,0x6a,0x67,0xe9,0x30,0x95,0x2f,0x6d,0xa3,0x88,0x5c,0xcf,
+ 0x2f,0x21,0xa1,0xc3,0x10,0xc2,0xf5,0x7a,0xfb,0xfe,0xfe,0xd6,0x1a,0x51,
+ 0x7f,0x35,0x76,0x66,0x45,0x2c,0x4a,0x33,0x5b,0x3c,0xbf,0x36,0xa8,0x16,
+ 0x6a,0x8c,0x8d,0xf8,0x1d,0x96,0x2d,0x13,0x96,0x22,0xd7,0x5e,0x79,0x4d,
+ 0x5c,0x99,0x01,0x74,0x27,0xd2,0x2a,0xc2,0x0d,0x3b,0xb9,0xa6,0x78,0x64,
+ 0xc9,0x17,0xb5,0xc0,0xa0,0xb3,0xc0,0x7a,0x57,0x55,0xd7,0xae,0x52,0x97,
+ 0xc4,0x24,0x2a,0xa0,0x68,0xcf,0x5b,0xad,0xe7,0x40,0x04,0x29,0xa7,0xb9,
+ 0xba,0x0c,0xbd,0x9c,0x3c,0x87,0x75,0x94,0xb3,0xe3,0x7a,0xb6,0x65,0x44,
+ 0x2d,0xf3,0x28,0x7e,0xd4,0xd2,0x6d,0x0d,0x21,0x27,0x53,0x92,0x02,0xbb,
+ 0x72,0xb6,0x67,0x6d,0x8c,0xc7,0xe3,0x71,0x3e,0x9f,0x0f,0xf5,0xde,0x94,
+ 0x42,0x97,0x02,0xbe,0x64,0x76,0x55,0xf8,0x8a,0x05,0x58,0x4a,0x91,0x75,
+ 0x9b,0x52,0x23,0xcc,0x30,0x49,0x19,0x08,0x42,0xd5,0x9a,0x97,0x6d,0x43,
+ 0xf9,0x23,0x55,0xee,0x96,0xb2,0x2f,0x62,0xf7,0xaa,0x88,0xfc,0xf4,0x23,
+ 0xb7,0x84,0xa4,0x52,0xd7,0x2e,0x94,0x85,0x64,0x65,0x0f,0x53,0x1c,0x99,
+ 0xbc,0x6c,0x3f,0x9f,0x05,0xd5,0x17,0xdb,0xd2,0x45,0xa7,0x99,0xeb,0x3b,
+ 0x05,0xa3,0xac,0x62,0x6f,0xc3,0xc5,0x4e,0x1b,0x51,0x78,0x26,0xe5,0x83,
+ 0xd9,0x4c,0xdd,0x2e,0xcc,0x91,0xcb,0x0a,0xc4,0x71,0xc5,0xac,0xa5,0xb2,
+ 0xb9,0xa9,0x46,0xd8,0x3e,0x6e,0x7b,0xbc,0x46,0x12,0xa7,0x10,0x02,0x12,
+ 0xa6,0x98,0x74,0x2d,0x06,0x11,0xea,0xbb,0x2d,0x1d,0xbc,0xb4,0xc9,0x1e,
+ 0x8d,0xf3,0xd6,0xa7,0x62,0x21,0xf1,0x76,0xe8,0xd3,0x1e,0x3e,0xed,0x23,
+ 0x6b,0x40,0x53,0xea,0x83,0xa4,0xec,0xa2,0x12,0xf2,0x7a,0x05,0x65,0x64,
+ 0x5b,0x29,0xec,0x2f,0xce,0xf3,0x2c,0xd8,0x10,0x65,0xaa,0xaf,0x6a,0xbc,
+ 0x1e,0x68,0x6b,0xd2,0x5a,0xb5,0x3f,0xdf,0x5a,0x79,0xc2,0xcc,0xb4,0x7b,
+ 0x04,0xb9,0x73,0xad,0x52,0xf4,0xe9,0x70,0xb6,0xb6,0x23,0xf3,0x59,0xbd,
+ 0x35,0x5f,0x90,0x70,0xe6,0xeb,0xeb,0x4b,0x65,0x9f,0x61,0x4f,0x55,0x82,
+ 0x65,0x35,0x43,0x0b,0x1d,0x25,0x27,0x80,0xbd,0x19,0x29,0xef,0x8b,0x2d,
+ 0x25,0x4f,0x19,0x70,0x25,0xc6,0x44,0x24,0xec,0x15,0xe0,0x3c,0x29,0x22,
+ 0x36,0x46,0x31,0xc0,0xf7,0xf3,0xf9,0x57,0x95,0x42,0xa7,0x6a,0x5d,0xd5,
+ 0xfb,0x88,0x68,0x89,0x88,0x81,0x53,0xdc,0x46,0x21,0x75,0x49,0xb0,0x4c,
+ 0x6b,0x4b,0x5e,0x23,0x51,0x61,0xe7,0x82,0xfa,0xb7,0x62,0xf3,0x15,0x9c,
+ 0x52,0xad,0x73,0x6b,0x16,0xa0,0x11,0x62,0x67,0xd2,0xdb,0x43,0x7b,0x26,
+ 0x92,0x0b,0xdb,0x6e,0x6d,0x5d,0xd9,0x58,0xd3,0x1e,0xab,0xe2,0x4c,0xaa,
+ 0xfd,0x7b,0x2b,0xbf,0xe7,0xf3,0xa9,0x7a,0x9f,0x53,0x67,0x21,0xc8,0xf0,
+ 0x43,0x39,0x6c,0xd5,0x6a,0xea,0x58,0x2d,0x11,0x19,0x78,0xef,0xa5,0x5b,
+ 0x2a,0x83,0x4e,0x3a,0xad,0x27,0xc1,0x9a,0x5e,0x27,0xc6,0xc8,0xcb,0xfa,
+ 0x29,0x96,0xea,0x9b,0x73,0x67,0x45,0x7a,0x65,0xd1,0x65,0x07,0xfe,0xa6,
+ 0x42,0x92,0xdf,0xb5,0x35,0x50,0x0d,0x75,0x55,0xd7,0x75,0x22,0xac,0x3f,
+ 0x80,0xac,0x61,0xe3,0x3c,0xcf,0x36,0x7d,0x28,0x4f,0x4c,0x09,0x9f,0xe9,
+ 0x0c,0x06,0xf9,0xce,0xd2,0xdc,0xaa,0x17,0xb1,0x40,0x71,0x7b,0xd6,0x6c,
+ 0xed,0xa9,0x0f,0xd2,0xb2,0x1e,0x28,0xb3,0xf9,0xa2,0x88,0x42,0x78,0x44,
+ 0x48,0x65,0xd3,0xba,0x24,0xbf,0x83,0x3a,0x3b,0x38,0x1b,0x53,0x9c,0xb2,
+ 0x8f,0x62,0x68,0x4a,0x76,0x91,0xc1,0x8a,0x84,0xdf,0xa4,0xdb,0xee,0x1a,
+ 0xd7,0x23,0x50,0x4d,0xbb,0x75,0xed,0x88,0x8a,0x4d,0x99,0xab,0xc4,0xd4,
+ 0xb5,0xa4,0xde,0xda,0xf8,0xaa,0xe6,0xa4,0x5c,0xb9,0x5b,0x2d,0x99,0x58,
+ 0x86,0x91,0x6a,0xfd,0xc7,0xb7,0xfc,0xb4,0x65,0xc3,0x5f,0xd9,0xa7,0x70,
+ 0x37,0x02,0xb1,0xd6,0x76,0x74,0x38,0xdb,0x56,0xd0,0xfa,0x2d,0x7c,0x3d,
+ 0xb0,0x22,0x7b,0x66,0x56,0x9b,0x4f,0x04,0x6b,0x1a,0xb1,0x2b,0x1b,0xdb,
+ 0x70,0xe9,0xad,0x82,0xcf,0xea,0x4a,0x10,0x00,0x8b,0xa4,0x3a,0x4b,0xb7,
+ 0x14,0xa6,0xc5,0x2a,0x98,0x91,0xd5,0xf2,0x59,0xf3,0x4d,0x2f,0x28,0x65,
+ 0x99,0x65,0xcb,0xda,0xda,0xf3,0xd4,0xe2,0xcc,0xb8,0xd4,0x6d,0x6d,0x4e,
+ 0x98,0xda,0x33,0x4c,0x83,0xed,0xf6,0x56,0x03,0x85,0xf2,0x9e,0x7d,0xb5,
+ 0x20,0x60,0xbb,0xfa,0xab,0x47,0x5c,0x1d,0xf0,0x02,0x6e,0x22,0x93,0xa6,
+ 0x53,0x5c,0x9d,0xd9,0x78,0x71,0xd7,0x16,0x07,0xc5,0x88,0xd9,0xe0,0x2b,
+ 0x8b,0x25,0xab,0xe1,0xee,0x21,0x08,0x40,0x6b,0x20,0xfb,0xbb,0xda,0x89,
+ 0x7b,0x7f,0x9d,0x3c,0x50,0xea,0xc8,0x06,0x8e,0x06,0x4b,0xb6,0xd0,0x12,
+ 0x51,0x72,0x1c,0xa1,0x99,0x29,0x37,0x0e,0xb5,0x64,0x53,0x42,0xa7,0xb5,
+ 0x44,0xb1,0xe7,0x5e,0x73,0xb6,0xd7,0xc7,0xcc,0x92,0xfd,0x67,0x30,0x90,
+ 0xec,0x9e,0x7d,0xb5,0xba,0xa4,0x56,0xce,0x96,0x91,0x4d,0x32,0xca,0x44,
+ 0x6c,0x86,0x60,0xf6,0xb1,0x95,0x72,0xb3,0x35,0xfa,0x45,0xa5,0xec,0x75,
+ 0x05,0x17,0x22,0xca,0xe1,0x29,0xf9,0x71,0xe1,0xfd,0xaf,0xfd,0x59,0x44,
+ 0x8b,0xae,0x2f,0xab,0x5e,0x6a,0x24,0x2d,0x93,0x73,0xf5,0xce,0x0f,0xb7,
+ 0xf1,0x96,0x56,0x57,0x75,0x5d,0x63,0xf8,0x11,0x56,0x91,0xf2,0xca,0xd6,
+ 0xdc,0x12,0xa1,0x73,0x5e,0x9d,0x91,0x2e,0x01,0xaa,0x16,0xdc,0x7a,0x1a,
+ 0x5f,0xca,0xde,0x9a,0x3b,0x8b,0x13,0x52,0x2f,0xa0,0x1d,0x85,0xb2,0x16,
+ 0x2e,0x79,0x51,0x15,0x8a,0x53,0x54,0xf7,0x16,0xd0,0x74,0x99,0x5f,0x94,
+ 0x89,0xc3,0x48,0x9b,0x38,0xd3,0x95,0xda,0x26,0xd2,0xed,0xdb,0xec,0x82,
+ 0x0a,0x9b,0x69,0xc2,0x3d,0xba,0x3b,0x4e,0xcb,0x91,0x01,0xe9,0x22,0x02,
+ 0x80,0x98,0xe8,0x8c,0x0d,0xa4,0x73,0xe5,0x4e,0xfb,0x60,0x6d,0x58,0x6c,
+ 0xfb,0x8b,0xac,0x87,0xd5,0x76,0x5f,0xb5,0x41,0xac,0x57,0xf6,0x9d,0xa6,
+ 0xbb,0x55,0xbb,0x72,0x22,0x57,0xe7,0xd4,0x4b,0x74,0x4a,0x06,0x3f,0xed,
+ 0x94,0xf4,0xcb,0x79,0xec,0x6a,0x41,0x6a,0x5c,0xea,0x50,0x4c,0x2a,0xd5,
+ 0x18,0x56,0x2a,0x52,0x2f,0x37,0xcf,0x96,0x71,0x4f,0xe9,0x89,0x5b,0xb2,
+ 0x51,0x63,0x23,0x52,0x97,0x30,0xbe,0x23,0xf5,0x4e,0x7a,0xd2,0x80,0xfd,
+ 0x2c,0xb6,0x5d,0x1c,0xc7,0xca,0x1e,0xb2,0xae,0xe7,0x6d,0xdf,0xf3,0xf6,
+ 0x01,0x3b,0x15,0xff,0x6a,0xb6,0x60,0xc2,0xe6,0xb4,0x1f,0x3d,0xae,0xcb,
+ 0x2f,0xad,0x5f,0xd0,0x5c,0x06,0x90,0xcf,0x7f,0xfc,0xf9,0xd2,0x74,0x7d,
+ 0xc4,0x0a,0x6d,0x2e,0xe0,0xf6,0xdc,0x02,0xb1,0x6b,0xa2,0x55,0xd2,0x4e,
+ 0x76,0x96,0xd6,0xb7,0xea,0xf3,0x36,0xfd,0x69,0x01,0x29,0x5b,0x61,0x5d,
+ 0x7f,0x83,0x82,0xe2,0x38,0x6c,0x2f,0x47,0x53,0x59,0x1b,0xf4,0x55,0x13,
+ 0x10,0xea,0xd4,0xff,0x06,0xa0,0x54,0x9b,0x5c,0xab,0x02,0xb3,0x8d,0xb8,
+ 0x52,0x39,0x14,0x26,0xdb,0xe8,0x80,0x1d,0xe3,0x90,0xfa,0x4a,0x6f,0xab,
+ 0xaa,0x5c,0xe4,0x70,0x50,0x5b,0xd7,0x23,0x3c,0x8c,0x2d,0xd0,0x63,0xab,
+ 0x31,0xda,0xe2,0x9f,0x17,0xd8,0x08,0xac,0x94,0xba,0xfd,0x91,0xa8,0xc1,
+ 0x2b,0x97,0x86,0xf3,0xf9,0x7c,0xa6,0x18,0x15,0x99,0x62,0x99,0x95,0x3a,
+ 0x57,0xf6,0xd0,0x5d,0x65,0xf0,0x01,0xf2,0xa2,0x35,0x64,0x5f,0xee,0x38,
+ 0xaf,0x0e,0x7b,0x66,0x35,0xb8,0xce,0xd2,0x82,0x91,0xfb,0x31,0xd5,0x43,
+ 0x34,0xed,0x96,0xa6,0x82,0xa6,0x94,0xa4,0xc1,0x3b,0x12,0x76,0x75,0x64,
+ 0x63,0xcb,0xba,0xcf,0xe7,0x53,0x30,0x23,0xe5,0x52,0x80,0x7e,0x40,0xd7,
+ 0xfa,0xb0,0x65,0x8d,0xf6,0x35,0xcf,0x9e,0x19,0x11,0xbc,0x77,0xc2,0xd4,
+ 0xa2,0x2c,0xb1,0xad,0x50,0x91,0x3a,0x0f,0xb1,0x05,0x67,0xe8,0x4b,0xa5,
+ 0xea,0xaa,0x3b,0xb5,0xe5,0x2c,0x23,0xb2,0x3e,0xa2,0xaa,0x22,0xe5,0x30,
+ 0x65,0x55,0xea,0xc5,0x91,0xca,0xa5,0x5e,0x7d,0xa0,0x0a,0x47,0xeb,0xef,
+ 0x5a,0x3b,0x9c,0x6d,0xce,0x30,0x04,0xd2,0x8c,0x29,0x71,0x82,0xad,0x2b,
+ 0xf7,0xe7,0x1d,0xcb,0x2d,0x43,0xcc,0x02,0x43,0x62,0xe5,0x52,0x83,0x82,
+ 0xce,0x23,0x1f,0x8b,0x86,0xb1,0xed,0x92,0x7d,0xa9,0x8f,0xd0,0x29,0x54,
+ 0xd3,0x2d,0xfb,0x55,0x5e,0xdf,0x2e,0xde,0x54,0x87,0x72,0x68,0xf9,0xf7,
+ 0x44,0x45,0x41,0xdb,0xca,0xfd,0x5e,0x8e,0x7d,0x4c,0xe5,0x98,0x70,0x35,
+ 0x71,0x6f,0xc9,0xde,0xc6,0xad,0x16,0x54,0x29,0x36,0xbf,0x65,0xde,0x3f,
+ 0xd8,0x9b,0x61,0x90,0xa8,0x92,0xca,0x47,0xc5,0x6f,0x65,0x4b,0x0f,0x4b,
+ 0x3f,0x5b,0x5f,0x83,0xd9,0xda,0x0d,0xd9,0x61,0x73,0xee,0x2b,0xd3,0xb8,
+ 0x9b,0x28,0x09,0x3d,0xd5,0x4c,0xe9,0x8a,0xbc,0x43,0x72,0xed,0x92,0x81,
+ 0xbf,0x85,0x3d,0x2d,0x7b,0x0a,0x2a,0xf8,0x96,0xf5,0x86,0x81,0xed,0xa9,
+ 0x55,0xc3,0x23,0x2d,0x0c,0x43,0x8d,0xd7,0x0c,0x15,0x47,0xf6,0x66,0x64,
+ 0x1a,0xb2,0xe6,0x59,0xa0,0xcb,0xb1,0xaa,0xf1,0xd3,0x2e,0xaa,0xef,0x03,
+ 0x5b,0x47,0x9e,0xef,0xc7,0x18,0xdc,0xc1,0x03,0x61,0x01,0x0e,0xef,0x02,
+ 0x00,0x15,0x9e,0xd1,0x8f,0x15,0x68,0x87,0xc6,0xc3,0xd2,0xf0,0xf4,0xc1,
+ 0x93,0xd5,0x87,0x9b,0x45,0xa6,0xca,0xec,0xa5,0x63,0x21,0x1d,0x34,0xd5,
+ 0xe0,0x42,0xef,0x1d,0x62,0x9a,0x08,0x80,0x63,0x8a,0xf3,0xfc,0x8a,0x29,
+ 0x66,0xbc,0x62,0xd9,0x3d,0xd3,0xe1,0x81,0x6a,0x19,0xf9,0x16,0xc2,0x77,
+ 0x9c,0xf7,0xec,0x5d,0x9c,0xae,0x36,0x25,0xab,0xe9,0x43,0x0b,0xf5,0x56,
+ 0xa5,0xf5,0xaf,0x44,0xe0,0x6b,0xa2,0x51,0x36,0xe5,0x3e,0x90,0x4d,0x66,
+ 0x8a,0x6d,0x8f,0x43,0xe3,0x7c,0xd5,0xfb,0xce,0xea,0xc3,0xce,0xa3,0x68,
+ 0x90,0x95,0x10,0x00,0x11,0x12,0xb4,0x59,0x74,0x2a,0xe4,0x47,0xe3,0x52,
+ 0xff,0x2c,0x05,0x68,0xd9,0xc3,0xc3,0x08,0x51,0x24,0x27,0x8a,0xd2,0xff,
+ 0xdd,0x56,0xc8,0x66,0xc5,0x59,0xd2,0xed,0xb5,0xa8,0x01,0xab,0x8f,0x78,
+ 0x44,0xf6,0xe5,0x18,0xb3,0xf5,0x89,0xda,0x8c,0xcf,0xc0,0x83,0x87,0xbc,
+ 0x86,0xfd,0xed,0xce,0x66,0x87,0x25,0x64,0x05,0x8c,0xf2,0xca,0x1e,0xda,
+ 0x4b,0xe2,0x3b,0xea,0x78,0x48,0xb1,0x32,0xa2,0xf4,0x65,0x18,0xd1,0x9f,
+ 0x8e,0xb0,0x1b,0x59,0x0e,0xfb,0xf1,0x59,0x50,0x5d,0xb2,0x8f,0xec,0xde,
+ 0x7d,0xdd,0x14,0x27,0x4d,0x94,0xcc,0xe5,0x43,0x9b,0x2d,0xae,0x7a,0x94,
+ 0x5b,0xa3,0x4f,0x59,0xac,0x77,0xb9,0x5c,0x4e,0xa7,0x93,0x54,0x60,0x46,
+ 0x02,0x3a,0x18,0xa0,0x59,0xd6,0xfe,0x7d,0x4c,0xac,0xf4,0x22,0xd5,0x2b,
+ 0xfb,0x0f,0x28,0xea,0x5a,0x80,0xfe,0x3f,0xf1,0xe5,0x9d,0x89,0x2f,0xf1,
+ 0xee,0x92,0x0b,0x55,0x51,0x18,0xfd,0x31,0x33,0xd1,0xb0,0x82,0xe3,0x31,
+ 0xe9,0x7a,0x55,0x1b,0xcc,0x2b,0x9a,0xbd,0xba,0x3b,0x67,0x30,0xa0,0x83,
+ 0xee,0x74,0xa3,0xf6,0x3f,0x1f,0x8f,0x87,0xac,0x80,0x7b,0x3e,0x9f,0xad,
+ 0x12,0xf5,0xbb,0x53,0xd3,0x19,0x50,0xb3,0x53,0x30,0x25,0xe8,0x0e,0xe5,
+ 0x1e,0x4a,0xfd,0x4f,0x0c,0x7e,0xbf,0x92,0x6f,0x8b,0xde,0x55,0x60,0x5a,
+ 0xdf,0x89,0xb4,0x26,0xd0,0xb4,0x4e,0x5c,0x46,0x06,0xba,0x53,0xd9,0xce,
+ 0xf0,0x0e,0xd6,0xd1,0x46,0xb4,0x33,0x2b,0x6c,0x8b,0xec,0x63,0x8c,0xd9,
+ 0x08,0xf0,0xc8,0x62,0xac,0xce,0x09,0xcb,0x9a,0x02,0xad,0x7b,0xf6,0x23,
+ 0x52,0xef,0xeb,0x25,0xfc,0x19,0x31,0x4e,0x6b,0xf3,0x67,0x06,0xa6,0xe8,
+ 0x57,0x2e,0x5b,0xbf,0x98,0x2d,0xdc,0x28,0x97,0xad,0x94,0x37,0x60,0x11,
+ 0x1f,0x55,0xa9,0x77,0x1c,0xf0,0xe1,0xca,0x75,0x7b,0x1b,0x3a,0x47,0x21,
+ 0x5b,0x5e,0x07,0x97,0xb9,0x1f,0x6e,0x50,0x68,0x0d,0xd9,0x64,0x57,0xa6,
+ 0x81,0x82,0xfc,0xc1,0x78,0xe6,0xdf,0xfe,0x95,0x35,0x78,0x0c,0xcb,0x59,
+ 0x3a,0xb4,0xa8,0xfd,0x66,0x60,0xb5,0x85,0x6a,0x57,0xe2,0xda,0x6a,0x52,
+ 0xcb,0x41,0x8e,0xac,0x2b,0x6b,0x2d,0x10,0xcc,0x5e,0x20,0xb2,0xbf,0xdd,
+ 0x6e,0xb0,0x32,0x3f,0x1c,0xba,0x8f,0xc1,0x66,0x2e,0x74,0x37,0x91,0xe6,
+ 0x05,0x9c,0x56,0xb9,0x0a,0x8e,0xa6,0x21,0x07,0x03,0xec,0xc3,0x68,0xb1,
+ 0x3c,0xaa,0x87,0x31,0x5d,0xff,0xaf,0x5a,0x87,0x75,0xa4,0xa3,0xff,0xe7,
+ 0x01,0x5d,0x3f,0x07,0xb6,0x57,0x96,0x10,0x4f,0xd7,0x21,0x57,0xf1,0x17,
+ 0x7d,0x4b,0xd9,0x21,0x3e,0xaf,0xb3,0x5e,0x8d,0x87,0x8b,0x23,0xf9,0xcc,
+ 0x5b,0x7d,0x94,0x8e,0x91,0x57,0x88,0xa3,0xce,0xdd,0xb5,0xd4,0xfd,0x5d,
+ 0x17,0xd3,0x9a,0x3b,0xff,0xac,0x8e,0x36,0x18,0x76,0x55,0x0b,0xf8,0x59,
+ 0xea,0x21,0x23,0xd6,0x5a,0xcf,0x3f,0xcc,0xda,0xdf,0x6a,0x13,0x97,0x1f,
+ 0x87,0xaa,0xf3,0x8b,0x9d,0x49,0xca,0x77,0xf7,0x73,0xb6,0xee,0xbe,0xea,
+ 0xb4,0xca,0xbb,0xd4,0x59,0xb8,0xff,0x90,0x5b,0x19,0x6c,0x87,0xf7,0x89,
+ 0x85,0x0f,0x65,0x93,0x5d,0xd9,0x3a,0x17,0x5d,0x1d,0x9b,0x12,0xdf,0x6e,
+ 0xb7,0x94,0x92,0xac,0x43,0x86,0xe1,0x95,0x58,0x1f,0x90,0x21,0x23,0x22,
+ 0x2d,0x44,0x9d,0x2b,0xbf,0x19,0x16,0xbd,0x9d,0xb7,0xd4,0xab,0x92,0x22,
+ 0x8f,0x19,0x92,0xec,0x16,0xb5,0x62,0xd3,0xf7,0xee,0x7f,0xbb,0xec,0x07,
+ 0x03,0x3a,0xe8,0x4e,0x20,0x43,0x9b,0xb0,0x24,0x6b,0x57,0x2a,0x4c,0x99,
+ 0x88,0x84,0xa2,0xf7,0xf9,0x7c,0x6a,0x9c,0xff,0xee,0x95,0x0f,0xc3,0xed,
+ 0x25,0x88,0x89,0x71,0x9a,0x26,0x8f,0x9c,0xa4,0xc1,0x93,0x88,0x9c,0x5b,
+ 0x96,0xdd,0x56,0x37,0x58,0x0e,0x1a,0xf9,0x71,0x61,0x77,0xaa,0x40,0x56,
+ 0x1b,0x3a,0xb0,0xf6,0xc3,0x02,0xd1,0x88,0x2f,0x87,0xc6,0x3e,0x87,0x43,
+ 0xd7,0xde,0x09,0xe3,0x5b,0xc1,0x36,0xec,0x67,0x42,0xec,0x84,0x82,0xbc,
+ 0x43,0x8c,0xf1,0x7e,0xbf,0xcb,0x7a,0x44,0x71,0xfc,0x87,0x57,0x1e,0x91,
+ 0xbd,0x7d,0x14,0x31,0xc6,0xdb,0xf5,0xc7,0xdf,0xef,0x0f,0xef,0x1d,0x12,
+ 0x71,0x4a,0xd1,0xf9,0x55,0xed,0x1d,0x39,0xaf,0x53,0x6b,0xea,0x71,0xfb,
+ 0xc1,0xd1,0x08,0x2d,0xdf,0x48,0x15,0x48,0x86,0xee,0x74,0xaa,0xb2,0xaa,
+ 0xee,0x1d,0xa3,0x32,0xd8,0xc5,0x19,0x69,0x5a,0x7f,0x4c,0x27,0x7d,0x28,
+ 0xf5,0x6c,0x3d,0xd1,0xda,0x82,0x42,0x01,0x35,0xdd,0x6e,0xd7,0xaf,0xaf,
+ 0xef,0xaf,0xaf,0xaf,0xc7,0xe3,0x51,0x8d,0xbe,0x5b,0xb6,0x64,0xe4,0x9e,
+ 0x85,0x40,0xd6,0x03,0xb9,0x98,0x78,0x22,0x42,0x27,0x33,0x1f,0x0c,0x0c,
+ 0x09,0x13,0x84,0x79,0x61,0x7f,0xd3,0x15,0xa0,0x88,0x48,0x02,0xea,0x20,
+ 0x4d,0x76,0x55,0x1d,0xcb,0x26,0xf4,0x07,0x55,0x20,0x30,0x7c,0x1e,0x9d,
+ 0xdc,0xbd,0xe3,0x50,0xde,0xe2,0x62,0x1c,0x61,0x66,0x1e,0xc9,0x5f,0x0e,
+ 0x29,0x8a,0x5a,0x4b,0xe4,0xb2,0x31,0x2b,0xb3,0x14,0x21,0xde,0xef,0xf7,
+ 0x7f,0xfc,0xe3,0x1f,0x97,0xcb,0x45,0x78,0x5f,0x60,0x60,0xa9,0x58,0xeb,
+ 0x9e,0xeb,0x54,0xbb,0x44,0xc4,0x29,0x85,0x30,0x9f,0x2f,0xe7,0xf5,0x85,
+ 0xc0,0xc0,0x28,0x73,0x27,0x32,0xf8,0xb7,0x12,0x43,0xea,0xf2,0xeb,0x65,
+ 0x0e,0x9b,0x08,0xd1,0xad,0x64,0x51,0xac,0xc3,0xe8,0x7d,0x7f,0x5c,0xd6,
+ 0x52,0xaa,0x31,0xdd,0x60,0xd2,0xf5,0x99,0xd7,0x6f,0xf1,0x0e,0x1e,0xd6,
+ 0x6a,0x6c,0x9e,0xf9,0x56,0x24,0x54,0x4e,0x29,0x29,0x69,0xfa,0x56,0x28,
+ 0xc4,0x6d,0x95,0x42,0x4a,0xf1,0x7e,0xbf,0xfd,0xfa,0xf5,0x0f,0x59,0x83,
+ 0x9e,0x31,0xe2,0xbd,0x9b,0x64,0x95,0xf7,0xec,0x89,0x08,0x88,0x52,0x4a,
+ 0xaf,0xe7,0xeb,0x74,0x3e,0x39,0xe7,0x01,0xd7,0x60,0x8a,0x19,0x00,0x79,
+ 0xe1,0x81,0x5b,0xfe,0x97,0x20,0xa5,0x10,0xd7,0xb1,0x46,0x60,0x96,0x2d,
+ 0x1d,0xe8,0x1c,0x21,0xe2,0xe4,0xfd,0x72,0x4c,0x56,0xf5,0x6d,0xcd,0x24,
+ 0x94,0x91,0xa7,0x5d,0x37,0x5d,0x76,0x1d,0x0e,0x67,0xb2,0x3e,0x68,0x18,
+ 0x56,0xab,0x5d,0xad,0x1a,0xe7,0x67,0x9b,0x48,0xab,0xdb,0x00,0xe5,0x13,
+ 0x39,0xe7,0x90,0x10,0x10,0x93,0x36,0x8e,0x59,0x80,0xf1,0xcb,0xeb,0x62,
+ 0x94,0x7a,0xfe,0xb9,0xa5,0xf7,0x23,0xf7,0xdc,0x0a,0x42,0xfd,0xf6,0x70,
+ 0x13,0xcc,0x73,0x80,0x09,0xbd,0x77,0xce,0x7b,0x48,0x29,0xa4,0x28,0x8b,
+ 0x92,0xd7,0xcb,0x88,0xde,0x23,0x23,0xaf,0x1c,0xed,0xb2,0xba,0x21,0x01,
+ 0x40,0x8c,0x01,0x00,0x63,0x98,0x17,0x4a,0x79,0x24,0x29,0xba,0x69,0x4a,
+ 0x36,0x48,0x8d,0x2a,0xaa,0x90,0x6d,0xc2,0xca,0x57,0x46,0x18,0x38,0xde,
+ 0x67,0xd9,0x3c,0x0c,0x2c,0xe8,0x6a,0xd5,0x88,0x46,0x56,0xcb,0xb7,0x28,
+ 0x6b,0x14,0x07,0x26,0xf9,0xfa,0x7e,0xab,0xc1,0xee,0x70,0xd3,0x3a,0x94,
+ 0xf8,0x7a,0xbd,0xa6,0xe9,0x94,0xe9,0xfd,0x5b,0x98,0xcc,0xea,0x49,0x35,
+ 0x63,0xd2,0x8e,0x80,0x61,0x9e,0x5f,0x44,0x17,0x72,0x48,0xe4,0x3d,0x40,
+ 0x84,0xc4,0x29,0x42,0x02,0xc3,0x03,0xb3,0x5b,0x01,0x81,0x28,0xfb,0x7f,
+ 0xb6,0xc5,0x5f,0x89,0x13,0x01,0x69,0xf9,0x53,0xa6,0x87,0xb2,0x35,0x4c,
+ 0xbb,0xec,0x62,0x95,0xa2,0x8e,0xba,0x49,0x63,0xb4,0x3a,0xa1,0x6d,0xb9,
+ 0x21,0xaa,0xb3,0x67,0x83,0xa4,0x8c,0x1d,0xf8,0x7a,0xc7,0xb5,0xb7,0x02,
+ 0x3a,0x1d,0x5c,0x2a,0x2f,0x6b,0x11,0x7f,0xc2,0x6f,0x1c,0xe3,0x72,0xdb,
+ 0xa2,0xc4,0xde,0x3b,0xab,0xca,0xcc,0xba,0x85,0x96,0xa6,0xc9,0x3b,0x47,
+ 0x8f,0xc7,0x1c,0xc2,0xf5,0xd7,0xaf,0xbf,0xb4,0x8f,0x07,0x6d,0x0a,0xb5,
+ 0xf1,0xaa,0xe2,0x36,0x24,0x25,0xe4,0xbe,0xcc,0xf0,0x7a,0x3d,0xa7,0xe9,
+ 0x04,0x0e,0x80,0x9c,0x5b,0x9c,0x4e,0x5c,0x57,0x7a,0xad,0x52,0x37,0x66,
+ 0x80,0x95,0x4d,0x54,0xae,0xb4,0x62,0x55,0x33,0x2e,0x0c,0x45,0xcc,0x59,
+ 0x54,0x05,0xac,0xdb,0x68,0x94,0x61,0x4b,0x09,0x23,0xaa,0xe4,0xac,0x32,
+ 0x27,0x6c,0xf9,0x73,0x3e,0x88,0xe9,0x5a,0x59,0x5f,0xeb,0x09,0x66,0xa5,
+ 0xd3,0xb2,0x14,0x03,0x66,0x4e,0x56,0xcc,0x95,0x1e,0x74,0xfd,0xf9,0xda,
+ 0x95,0x59,0x09,0x4f,0x57,0x9e,0x0b,0x8b,0x2a,0x5b,0x95,0x81,0x9d,0x17,
+ 0x52,0x9d,0x69,0xdd,0xc9,0xc7,0xd7,0xeb,0xf5,0xd7,0xaf,0xef,0xaf,0xaf,
+ 0x2f,0x39,0x2e,0x23,0xf7,0xdc,0xaf,0x2a,0xfa,0xe2,0xf3,0xb8,0x94,0x60,
+ 0x9e,0x67,0xe6,0xe4,0x9d,0x03,0x44,0x87,0x14,0x31,0xe1,0x36,0x77,0xc4,
+ 0xdb,0xfc,0xe1,0x4a,0xdc,0xbe,0x4a,0x7d,0x63,0x92,0x92,0x2c,0x00,0xf6,
+ 0xa1,0x7e,0xc9,0xb8,0x2b,0xf2,0x16,0xf4,0xb1,0x48,0x5d,0x31,0xed,0x65,
+ 0xdf,0x5d,0x37,0x12,0xae,0x15,0x8f,0xf4,0xf1,0x9a,0x9c,0x96,0x9b,0xec,
+ 0x48,0xbd,0x4a,0x29,0xb3,0xdb,0xb3,0xe1,0x7d,0x46,0x1b,0x60,0x3b,0x40,
+ 0xd9,0x98,0xb7,0x5a,0x02,0x1b,0x12,0xc1,0x42,0xda,0x00,0x84,0x4b,0x83,
+ 0x38,0xc4,0x80,0x48,0x00,0x89,0x39,0x49,0x7e,0x2f,0x7a,0x9f,0x5d,0xed,
+ 0x30,0xf1,0x29,0x83,0x50,0x2a,0x1d,0x1e,0x22,0x31,0xe0,0xfc,0x7a,0x85,
+ 0x10,0x39,0x31,0x22,0xe0,0xb2,0xe9,0x69,0xe5,0x84,0x4c,0xfb,0x85,0x0f,
+ 0xa0,0x6b,0x1f,0xb6,0x7d,0x50,0x84,0xe0,0x36,0x4e,0xee,0xfc,0x9e,0x04,
+ 0x1c,0x62,0xf7,0xcb,0xed,0xcd,0x1d,0x67,0xd1,0x80,0xe6,0xf7,0x1d,0xac,
+ 0xf4,0xc7,0x6d,0xc0,0x8f,0x2b,0x74,0x36,0x37,0x3b,0x9f,0xcf,0x97,0xcb,
+ 0x45,0x1b,0x6e,0xb2,0x2b,0x49,0x16,0x15,0x64,0xe4,0x8b,0x60,0x49,0xb4,
+ 0x8a,0x4d,0x25,0xfa,0x2e,0xd2,0xa4,0x90,0xbd,0x39,0x22,0xa6,0x94,0xf8,
+ 0x7a,0xbd,0x01,0xb0,0x62,0xb4,0x3f,0x70,0xed,0x3b,0x20,0x46,0x99,0x20,
+ 0x12,0x11,0x90,0x7f,0xbe,0x5e,0xf3,0x3c,0xc7,0xc4,0x84,0xb8,0xac,0xdd,
+ 0xda,0x96,0xb9,0x66,0xd3,0x67,0x76,0xf5,0x1f,0x2e,0x3e,0x7f,0xbb,0x60,
+ 0x6e,0xae,0x11,0x81,0x39,0x95,0x63,0xb6,0x0a,0xa8,0x55,0xdf,0xdf,0x4a,
+ 0xbb,0x4b,0x9c,0xc5,0x67,0x55,0xc5,0x56,0x0a,0xd7,0xe2,0xa5,0x69,0x25,
+ 0x6f,0xca,0x3f,0x13,0xed,0x92,0xd9,0x81,0x89,0xc4,0xec,0xc4,0xdb,0x41,
+ 0xd2,0xc5,0x30,0x10,0x3a,0xb7,0x8d,0x17,0xfe,0xfb,0xdf,0xbf,0x63,0x0c,
+ 0x5f,0x5f,0x5f,0x0a,0x35,0xe8,0xd7,0x97,0x5a,0xa6,0xce,0xb7,0x12,0x0f,
+ 0x79,0xf7,0x79,0x0e,0xcc,0xe0,0x26,0x47,0x80,0x89,0x08,0x65,0xe1,0xc7,
+ 0x12,0xea,0xa3,0x35,0xef,0xfb,0x21,0xf4,0x85,0x3e,0x2a,0xdb,0xfa,0xad,
+ 0x03,0x6c,0xf2,0x8f,0x6e,0xc3,0xd8,0x4d,0xf9,0xc6,0x98,0xd6,0x58,0xa2,
+ 0x7a,0xeb,0x19,0x13,0xdc,0xb8,0x5a,0x67,0x55,0xbf,0xc3,0x22,0xf4,0x5b,
+ 0xeb,0x57,0xde,0x85,0xa8,0x94,0x1b,0xdb,0x4d,0x70,0x67,0x4f,0x33,0xac,
+ 0xfc,0x7a,0x92,0xcb,0x00,0x73,0xba,0xdd,0xee,0x5f,0x5f,0xa0,0xbc,0xef,
+ 0x9d,0x20,0xb4,0x73,0x58,0xa9,0x13,0x19,0x21,0x11,0x10,0xbe,0xc2,0x2b,
+ 0x86,0x98,0x20,0xad,0x1b,0x23,0x68,0xa7,0xed,0xfb,0x0d,0x9f,0x9b,0x72,
+ 0xec,0x26,0x39,0xb2,0x0f,0x0c,0xfb,0xe8,0x60,0xf7,0xb7,0x31,0x25,0x4e,
+ 0xbd,0xc8,0x3c,0x5b,0xfc,0x3d,0x22,0x30,0x5b,0x32,0xd3,0xc9,0xfe,0xc1,
+ 0x0a,0x5d,0xbf,0xf9,0x96,0x49,0xb1,0x55,0x47,0x6b,0x39,0xe3,0xda,0xc6,
+ 0x62,0xdc,0xcf,0xea,0x32,0x2e,0x8b,0x53,0xc4,0xe0,0x2f,0x2e,0xef,0x7a,
+ 0xfd,0x01,0x83,0xd1,0x6e,0x9d,0xb3,0x4e,0x83,0xe7,0xff,0x03,0x6e,0x81,
+ 0xc2,0x4c,0x3e,0x77,0xa0,0xd5,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,
+ 0xae,0x42,0x60,0x82
+};
+
+static const unsigned int qtlogo_png_len = 12615;
+static const unsigned char qtlogo_png_data[] = {
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,
+ 0x44,0x52,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x08,0x02,0x00,0x00,
+ 0x00,0xff,0x80,0x02,0x03,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,
+ 0x00,0xb1,0x8f,0x0b,0xfc,0x61,0x05,0x00,0x00,0x00,0x38,0x74,0x45,0x58,
+ 0x74,0x53,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x00,0x58,0x56,0x20,0x56,
+ 0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x2e,0x31,0x30,0x61,0x20,0x20,
+ 0x52,0x65,0x76,0x3a,0x20,0x31,0x32,0x2f,0x32,0x39,0x2f,0x39,0x34,0x20,
+ 0x28,0x50,0x4e,0x47,0x20,0x70,0x61,0x74,0x63,0x68,0x20,0x31,0x2e,0x32,
+ 0x29,0xdd,0x15,0x2e,0x49,0x00,0x00,0x30,0xba,0x49,0x44,0x41,0x54,0x78,
+ 0xda,0xed,0xbd,0x69,0x93,0x64,0x69,0x71,0x2e,0xf8,0xb8,0xbf,0xcb,0x39,
+ 0x27,0x22,0xd7,0xaa,0xca,0xda,0xf7,0xea,0xae,0xea,0x95,0x86,0xa6,0xbb,
+ 0x69,0x16,0x81,0x04,0x02,0xd1,0x92,0x35,0xf7,0x22,0x24,0x5d,0x06,0x8d,
+ 0x74,0xaf,0x5d,0x69,0xc6,0xec,0x7e,0x98,0x2f,0x63,0xf3,0x1b,0xc6,0xe6,
+ 0xcb,0xd8,0x7c,0x1f,0x93,0xc9,0x46,0x17,0x2d,0x98,0x04,0x08,0x84,0xd8,
+ 0xe1,0x22,0x10,0x34,0xa8,0x1b,0x04,0xbd,0x43,0x37,0xd5,0x5d,0x5d,0x7b,
+ 0x55,0xee,0x19,0xcb,0x59,0xde,0xf7,0x75,0x9f,0x0f,0x27,0x22,0x33,0xb2,
+ 0x2a,0xab,0x51,0x17,0x42,0x63,0x83,0xdd,0xb0,0xb4,0xb2,0xb4,0x8a,0xc8,
+ 0x88,0x38,0x1e,0xee,0xfe,0xba,0x3f,0xfe,0x3c,0x1e,0xf4,0x5f,0xbf,0x33,
+ 0x8f,0x5f,0xe8,0x4d,0xed,0x2d,0xee,0xa0,0x9b,0xfe,0x87,0x01,0x69,0xff,
+ 0x66,0x7c,0x2f,0x4f,0xdc,0x2b,0x80,0x02,0x00,0x45,0x40,0x40,0x0a,0x08,
+ 0xc0,0x50,0xda,0xfe,0xb0,0x5f,0xe0,0xcd,0xfe,0xc2,0x5f,0x81,0xe2,0x4e,
+ 0x46,0x01,0xf4,0xe6,0x2b,0x1c,0x5b,0x8a,0x64,0x7c,0xaf,0x4c,0x5a,0x1d,
+ 0x00,0x48,0xf0,0xff,0xdd,0xed,0x17,0x6d,0x2c,0x01,0xa5,0x91,0x0b,0xdc,
+ 0x60,0xac,0x6d,0xbe,0x33,0x36,0x1f,0xc9,0xc8,0x40,0xaf,0x67,0x94,0xd6,
+ 0xad,0xf0,0x6f,0xe6,0x50,0xff,0x86,0x9e,0x75,0x4b,0x8f,0x53,0x00,0x50,
+ 0xd9,0xf2,0x20,0xe2,0x09,0x17,0xe3,0x9b,0x4c,0x3c,0x61,0x6b,0xfd,0xe5,
+ 0xf4,0x2c,0xde,0x9e,0xb3,0xe4,0xc6,0xdf,0x69,0xf2,0xba,0xd3,0x38,0x01,
+ 0xf1,0x36,0x8f,0x1b,0x45,0xe1,0x4d,0xfe,0xd8,0x7a,0x22,0x85,0xed,0x4f,
+ 0xfb,0xff,0x6f,0x63,0xf1,0x44,0x2e,0xe7,0xed,0x21,0x26,0x50,0x1a,0xdb,
+ 0x6b,0xec,0x5c,0x3a,0x69,0x56,0xb9,0xf1,0x3c,0xd8,0xca,0x65,0x13,0x31,
+ 0xfb,0x4b,0x17,0x86,0xb7,0x8e,0x1c,0xa5,0x9b,0x62,0x10,0x13,0x16,0xdc,
+ 0x6e,0x0e,0x1a,0x3b,0x9d,0xd2,0xbf,0x7d,0xda,0xfa,0xc5,0x27,0x78,0xf0,
+ 0x2d,0x2c,0xc5,0xdb,0xa3,0x6c,0xbb,0x1f,0xa9,0xec,0x60,0xc1,0x6d,0xd6,
+ 0xe4,0xf1,0xc3,0xf8,0x97,0xc7,0xb3,0x88,0x13,0x11,0x11,0x91,0x08,0x44,
+ 0x44,0x55,0x0d,0x39,0x63,0x0c,0x40,0x31,0xc6,0x94,0x54,0x55,0x0d,0xb7,
+ 0xff,0x03,0x45,0x52,0x55,0x22,0x25,0x1a,0x45,0x9d,0x88,0x88,0x88,0x22,
+ 0x79,0xef,0x9b,0xa6,0x51,0x4d,0xd6,0x5a,0x22,0x8a,0x51,0x88,0x28,0xcb,
+ 0xb2,0x10,0xea,0x5f,0xaa,0x30,0x8c,0x31,0x8a,0x08,0x00,0x66,0xcb,0xcc,
+ 0xa2,0x31,0xd6,0x11,0x00,0x11,0x1b,0xc3,0xd6,0x66,0xcc,0x0c,0x40,0x44,
+ 0x52,0x02,0x33,0x8b,0x8c,0x8c,0x48,0x44,0xc6,0x58,0xef,0x8d,0x31,0xa6,
+ 0xaa,0x2a,0x15,0x6b,0x4c,0xe6,0xac,0x05,0xa0,0x12,0x44,0x24,0x34,0x09,
+ 0xc4,0xbf,0x34,0x09,0x1e,0x79,0xde,0x69,0x9a,0xa6,0x69,0x1a,0x55,0x35,
+ 0xc6,0x18,0x63,0x54,0x35,0xa2,0x89,0x31,0x32,0x01,0x64,0x62,0xaa,0x25,
+ 0x48,0x4a,0x29,0xa5,0xa4,0xaa,0x9d,0xce,0x14,0x48,0x41,0x80,0x92,0x2a,
+ 0x89,0x10,0x94,0x25,0x29,0x93,0x17,0x48,0x0c,0x22,0x49,0x54,0x93,0x88,
+ 0x10,0x2b,0x00,0x36,0xbf,0x44,0x09,0xbe,0x2c,0x07,0x6d,0x64,0x19,0x33,
+ 0x72,0x20,0x40,0x99,0xd9,0xb9,0xd1,0x55,0xaa,0x2a,0x00,0x66,0x6e,0xe3,
+ 0xab,0xae,0x6b,0x66,0x6b,0xd8,0x59,0x67,0x55,0x4c,0x4a,0xda,0x24,0x49,
+ 0x31,0x66,0x59,0xc6,0x64,0x5c,0xe6,0x98,0xa1,0x08,0x29,0x35,0x31,0xa6,
+ 0x24,0x89,0x8d,0xf9,0xa5,0x31,0x96,0x34,0xa1,0x76,0xce,0x38,0x67,0x01,
+ 0x84,0x50,0x85,0x26,0x8a,0x80,0x88,0xb2,0xac,0x20,0x22,0xa8,0x61,0x22,
+ 0x10,0x00,0x56,0x55,0x28,0x2c,0x83,0x99,0x99,0x2d,0xa9,0x05,0x88,0xa0,
+ 0xd0,0x08,0x24,0x80,0x15,0xb1,0xae,0x4b,0xd1,0x9a,0x38,0x38,0x8f,0xac,
+ 0x43,0xcc,0x26,0x34,0x09,0x6a,0x7e,0x49,0x3c,0xab,0x28,0x1c,0xb1,0x42,
+ 0x55,0x44,0x09,0xd6,0xbb,0xdc,0x9a,0xc2,0xda,0xbc,0x2a,0x93,0xaa,0x23,
+ 0x64,0xc6,0x64,0x86,0x33,0x55,0x84,0x26,0x85,0x90,0x54,0x29,0x0a,0x54,
+ 0x89,0xd9,0x5a,0x6b,0xb3,0x2c,0x9b,0x99,0x72,0xce,0xf3,0x60,0xb8,0x62,
+ 0x5c,0x04,0x55,0x21,0xf5,0x44,0x07,0x64,0x1a,0xd1,0xb2,0xaa,0x2a,0xc3,
+ 0xc5,0x2f,0x8b,0x67,0x91,0x2a,0x52,0x68,0x82,0x24,0x32,0xdc,0xc9,0xb3,
+ 0x59,0x67,0x66,0x34,0x75,0x62,0xe3,0x32,0xea,0xae,0xae,0x34,0x57,0x2e,
+ 0xad,0x5e,0xbd,0xbc,0xb4,0xb4,0xd8,0x5b,0xba,0xde,0x5f,0x5c,0xac,0x36,
+ 0xd6,0x11,0x03,0x54,0x40,0x04,0xe7,0x50,0x14,0x98,0x9e,0xc9,0xa7,0xa6,
+ 0x5d,0xde,0xd1,0xd3,0x77,0x1d,0xda,0xb3,0x2f,0xdf,0xbb,0x3f,0x9f,0xdd,
+ 0x55,0xe4,0xdd,0x46,0x69,0xd0,0x1f,0x2c,0xf5,0xfb,0x2b,0xb3,0xb3,0xff,
+ 0x76,0x61,0x48,0x6f,0x1c,0xa2,0x11,0x21,0xb0,0x42,0x08,0xac,0x13,0xb5,
+ 0xd2,0xa8,0x0d,0x9e,0xa8,0x24,0x49,0x01,0x90,0x4a,0x08,0x22,0xb1,0xc8,
+ 0xdd,0x9e,0xdc,0xed,0xab,0x86,0xfe,0xf2,0x85,0xfe,0xb5,0x2b,0x83,0xef,
+ 0x7c,0xeb,0xd9,0xa5,0xeb,0xb8,0x72,0x19,0x83,0xb5,0x31,0x24,0x23,0x63,
+ 0x18,0x46,0x27,0x4a,0xf6,0xb6,0xff,0x31,0x00,0x50,0xcc,0xe0,0xd0,0x11,
+ 0x1c,0x3d,0x81,0xd3,0x77,0xef,0xba,0xeb,0x9e,0xc3,0x07,0x0f,0xcf,0xe7,
+ 0x5d,0xac,0x6d,0x5c,0x01,0xd5,0xa0,0x00,0x0a,0xa0,0x08,0x4a,0xe3,0x7a,
+ 0xd5,0x6e,0x03,0x36,0xb6,0xde,0x1b,0xef,0x54,0x09,0xca,0x2f,0xc2,0x58,
+ 0x22,0x9c,0x94,0x84,0x94,0x15,0x4c,0x6a,0xa0,0xb6,0x4d,0x19,0x06,0x06,
+ 0x24,0xd6,0xa0,0xae,0x07,0x75,0x33,0x9c,0x99,0xed,0x58,0xcb,0xcb,0x4b,
+ 0xbd,0xcc,0x4c,0x4f,0x77,0x0e,0x3b,0xda,0xbf,0x7c,0x8d,0x9f,0xf9,0xc1,
+ 0xb5,0xa7,0xbe,0xfb,0xda,0x8b,0xcf,0xad,0xad,0x2c,0x82,0x68,0x7b,0xad,
+ 0x3a,0xfa,0x9d,0x55,0xcc,0x18,0x5a,0x90,0x6d,0xa5,0x3f,0x4d,0xfc,0x30,
+ 0xe6,0xf7,0xe0,0xfe,0x37,0xe5,0x77,0x3f,0x70,0xe4,0xed,0xef,0x3e,0xdd,
+ 0x99,0xaf,0x95,0x57,0x7b,0xc3,0x4b,0x49,0xd7,0xba,0x53,0x96,0xd9,0x0e,
+ 0x07,0x8d,0x77,0x33,0x31,0x30,0x93,0xb5,0xd6,0x86,0x58,0xd6,0xcd,0xc0,
+ 0x39,0x3b,0x3d,0xdd,0xad,0x06,0xd5,0x76,0x03,0xc8,0xc4,0xc7,0x8c,0xd7,
+ 0xb7,0xda,0x1b,0x33,0x96,0x90,0x80,0x82,0x92,0x8c,0x3a,0x64,0x35,0x80,
+ 0x25,0x31,0x00,0x2c,0xf3,0x60,0xd0,0x2b,0x72,0x57,0x14,0x59,0xaf,0x37,
+ 0x18,0x0e,0x87,0xb3,0x33,0xbb,0x76,0xcd,0x1c,0x9a,0xf2,0xc7,0x5e,0x7c,
+ 0xf6,0xfa,0xb7,0xbf,0xf9,0xc2,0xf7,0xbf,0xb7,0x76,0xe1,0x15,0x54,0x7d,
+ 0x40,0x1c,0xa3,0x48,0x69,0x02,0xc9,0x9b,0x30,0x9b,0xea,0x76,0xe8,0x4a,
+ 0x5b,0xbf,0x62,0x85,0x32,0xd8,0x79,0x22,0x8e,0x4d,0xa8,0x44,0xe1,0x73,
+ 0x4c,0xcd,0xa1,0xbb,0x1b,0xef,0x7a,0xdf,0xc2,0xaf,0xfe,0xfa,0x7d,0x0b,
+ 0x07,0x30,0x6c,0x2e,0x0e,0xab,0xeb,0xcc,0x30,0xc6,0x38,0xdb,0x01,0x6c,
+ 0x8c,0x31,0xa5,0xe4,0x1c,0x65,0x59,0x56,0xd5,0xc3,0x8d,0x8d,0x8d,0xd9,
+ 0xa9,0xe9,0xb1,0x27,0xeb,0x4d,0x7e,0xf7,0xaf,0x6e,0x2c,0xa8,0xf2,0xe8,
+ 0x32,0x48,0x0d,0x46,0x91,0x28,0xa4,0x89,0x19,0x04,0x54,0xa5,0x30,0xba,
+ 0xf3,0xb3,0x47,0x38,0x75,0x17,0xaf,0xc8,0x57,0x3e,0xf7,0xfc,0x2b,0x2f,
+ 0xad,0xfd,0xf8,0x85,0xd8,0xdf,0x00,0x12,0x98,0x60,0xa8,0x10,0x21,0x15,
+ 0x1a,0x75,0xc2,0x94,0x80,0xb8,0xd9,0x6b,0xeb,0x8d,0xee,0x66,0xa0,0x0e,
+ 0xb0,0x80,0x51,0x28,0x00,0xcb,0x44,0x1c,0x42,0x1c,0x8e,0x22,0xd4,0x21,
+ 0x9f,0xc6,0xb1,0x93,0x78,0xe4,0x9d,0xfb,0x1e,0x7d,0xd7,0xc9,0x23,0xc7,
+ 0xa7,0xea,0xb8,0xb4,0xba,0x76,0x99,0x6d,0xc8,0x73,0xc7,0x46,0x9a,0xa6,
+ 0x22,0x72,0xde,0x15,0x29,0x9a,0xe1,0x70,0x98,0x17,0x0c,0x4a,0xdb,0xbd,
+ 0x09,0xbf,0x90,0x30,0x14,0x02,0x20,0x4a,0x9b,0xe9,0x7b,0x13,0x03,0x50,
+ 0x67,0xc8,0xb9,0x2c,0x54,0x5a,0x97,0xae,0xe3,0x8f,0xb2,0xec,0x79,0xfa,
+ 0xa9,0x73,0x5f,0xfb,0xd2,0x73,0x4f,0x7d,0x1b,0xd2,0x00,0x80,0x61,0x58,
+ 0xe3,0x00,0x1b,0x9a,0x24,0x2a,0x4c,0x9b,0x08,0x84,0x4c,0xbe,0x6f,0xd5,
+ 0x9b,0xda,0x6c,0xb5,0x80,0xf1,0xae,0x1b,0x42,0x12,0x00,0x10,0x43,0x30,
+ 0x86,0xd8,0x08,0x18,0xc6,0xbb,0x41,0x7f,0x05,0x06,0xc5,0x3c,0x1e,0x7c,
+ 0xc4,0x3c,0xfc,0xf6,0x13,0xf7,0x3d,0x70,0xe8,0xd0,0xb1,0xe2,0xea,0xe2,
+ 0x8f,0xc1,0x3d,0xe3,0x02,0x51,0x12,0xe1,0x14,0xd9,0x99,0xb9,0x3c,0xcf,
+ 0xcb,0x6a,0x65,0x27,0xf0,0x16,0xbf,0x20,0x63,0x41,0x37,0xcd,0x44,0x02,
+ 0x24,0x46,0x04,0x49,0x6c,0x92,0x44,0x57,0xf8,0x03,0xdd,0xec,0xd8,0xf5,
+ 0x0b,0xf8,0x6f,0x5f,0x7e,0xfe,0xeb,0x5f,0xb9,0xb6,0x78,0x19,0x26,0x39,
+ 0x43,0xd3,0xcc,0x2a,0xda,0xc4,0x54,0x8b,0x8c,0xde,0x28,0xf3,0x04,0xee,
+ 0x4e,0x93,0x49,0xd1,0x8c,0xff,0x33,0x4d,0x98,0xcc,0x40,0x09,0x30,0xcc,
+ 0x99,0xaa,0xaa,0x4e,0x9e,0x02,0x1e,0x4c,0xc6,0x87,0x94,0x36,0xc0,0x98,
+ 0xdb,0x8f,0xf7,0x3f,0xb6,0xef,0xbd,0x1f,0xb8,0x77,0xe1,0x60,0x0a,0x7a,
+ 0x25,0xea,0x92,0xa2,0x22,0x32,0x4c,0x0e,0xd2,0x25,0xa2,0x28,0x03,0x20,
+ 0xbe,0x1e,0xa6,0x74,0xeb,0x9b,0xf9,0xf0,0x1f,0xbd,0x81,0x3a,0x85,0x00,
+ 0x05,0x83,0x0c,0xb5,0xbf,0x52,0x02,0x09,0x51,0x04,0xa8,0x1c,0xa4,0x5d,
+ 0xb3,0x27,0x8c,0x1e,0x7a,0xf1,0x99,0xf5,0x2f,0x7e,0xe6,0xd9,0xaf,0x7e,
+ 0x71,0x65,0x7d,0x19,0x48,0xd0,0x34,0x95,0xc4,0xc5,0x94,0x92,0x44,0xc3,
+ 0x6c,0x1d,0xd8,0xe8,0x38,0xbb,0x4f,0xe2,0x7c,0x04,0x52,0x28,0xab,0xe6,
+ 0x80,0xdb,0x4a,0xe6,0xb4,0x79,0x17,0x88,0xd9,0x5a,0x12,0x49,0xed,0x91,
+ 0x49,0x44,0x04,0x03,0x18,0x28,0x34,0x31,0x60,0x90,0x9a,0xaa,0xc4,0x95,
+ 0xab,0x83,0xe7,0x9f,0x7f,0xf5,0xd8,0xb1,0x85,0xa9,0xe9,0xee,0xec,0xec,
+ 0x54,0x8c,0xb1,0xae,0x4b,0x36,0x44,0x8c,0xaa,0xee,0x1b,0xa3,0xa3,0x76,
+ 0x6a,0xf3,0x67,0xdb,0xe8,0x84,0xfe,0xd5,0x8c,0x05,0xb0,0x82,0x69,0xf4,
+ 0x22,0xca,0x94,0x88,0x02,0x29,0x48,0xb3,0xcc,0xee,0xb7,0x7a,0xe4,0x99,
+ 0x7f,0x5a,0xfb,0xeb,0x8f,0xff,0xf0,0x7b,0xdf,0x6a,0x42,0x09,0x06,0xbc,
+ 0x75,0x86,0x7c,0x92,0x06,0x08,0x40,0x14,0x6d,0x00,0x15,0x51,0x49,0x20,
+ 0x78,0xc0,0x00,0x16,0xea,0xa0,0x6e,0x94,0x9b,0xd4,0x2b,0x32,0xc0,0x8d,
+ 0xeb,0x05,0x86,0xb6,0x8e,0xc6,0x45,0xa7,0xeb,0x9c,0x13,0x49,0x29,0x05,
+ 0x40,0x8c,0x65,0xeb,0x98,0x38,0x89,0x36,0x40,0x03,0x24,0x30,0x03,0x04,
+ 0x49,0x55,0x1f,0x4b,0xd7,0xb0,0xbc,0x74,0xd9,0xb2,0xdb,0xb3,0x7b,0xc1,
+ 0x5a,0xd3,0x34,0x43,0x91,0x9a,0xa8,0x02,0x6a,0x36,0x34,0x4e,0x87,0xe3,
+ 0x19,0xd2,0x36,0x93,0xd1,0x76,0x2f,0xdb,0x76,0x0e,0xdc,0x46,0x51,0x4a,
+ 0x5b,0x33,0x18,0xc8,0xe8,0x4c,0x4c,0xb3,0xb9,0x3d,0xf6,0x8f,0x5f,0x3f,
+ 0xf7,0xc9,0x8f,0x9f,0xbb,0xf4,0x2a,0x10,0xe1,0x9d,0x6d,0x42,0xac,0x63,
+ 0xb0,0xa6,0x76,0xb6,0x7d,0x55,0x27,0xc2,0x29,0xa5,0xd1,0xe1,0x3f,0x09,
+ 0x37,0x4f,0xce,0x29,0x34,0xed,0x74,0x48,0x51,0x55,0xd5,0x44,0x24,0x29,
+ 0x02,0x20,0x66,0xe7,0x5c,0x8c,0x4d,0x8c,0x35,0x0c,0x46,0x87,0x4c,0x8a,
+ 0xa3,0x84,0x0f,0x41,0x4c,0x3f,0xfc,0x2e,0xaa,0xf2,0xd5,0xcc,0x4f,0xdf,
+ 0xff,0xe0,0xae,0xe9,0x69,0x6a,0xe4,0x4a,0xd4,0x25,0x90,0x8c,0x47,0x47,
+ 0xb7,0x83,0x82,0xbd,0x51,0xcf,0x22,0xcb,0x8e,0x41,0x31,0x0e,0xac,0x55,
+ 0x89,0xa9,0x1a,0x6a,0x66,0x0f,0x78,0x3a,0xfe,0xd5,0xcf,0xbd,0xfc,0xf7,
+ 0x9f,0xbc,0x70,0xf1,0x2c,0x28,0x81,0xd4,0x49,0xa2,0xcc,0x03,0xaa,0x3e,
+ 0x73,0x75,0x53,0x8b,0x28,0xc4,0x5a,0xee,0x26,0xb5,0x40,0x4e,0x70,0xa3,
+ 0xf9,0x0c,0x27,0xe2,0xa8,0xa8,0x15,0x49,0x91,0x94,0x12,0xfb,0xa8,0x26,
+ 0x82,0x23,0x38,0x82,0x12,0x38,0xb1,0xb5,0xc6,0x39,0x6b,0xb3,0xd8,0x84,
+ 0x51,0xd8,0x2a,0xc5,0x98,0x44,0xd5,0xe5,0x99,0xa6,0x00,0x55,0x68,0x7b,
+ 0x4a,0x10,0xb1,0x81,0x38,0x08,0x20,0xb2,0xba,0x84,0x17,0x9e,0xbb,0xd6,
+ 0xc9,0xe5,0xbe,0xfb,0xee,0x04,0xca,0x7e,0x7f,0x69,0x7a,0x36,0x93,0x64,
+ 0x63,0x54,0xc3,0x96,0x89,0x01,0x6a,0xea,0x66,0x30,0x18,0xe6,0x79,0xb1,
+ 0x53,0x18,0xea,0x0d,0xb0,0xe5,0x1b,0x36,0x16,0xc1,0xf6,0xfb,0xbd,0xac,
+ 0x30,0x59,0xe6,0xab,0x61,0xdc,0x35,0x7b,0xc2,0xc8,0xa1,0x6f,0x7f,0xe3,
+ 0xfc,0xdf,0x7f,0xf2,0xb5,0xf3,0x67,0x81,0x88,0xcc,0xcf,0x10,0x19,0x55,
+ 0x21,0x92,0x94,0x54,0x01,0x82,0x55,0x25,0x85,0x49,0xca,0x96,0x9c,0xb3,
+ 0x86,0x59,0x80,0x4a,0x69,0x28,0x14,0xc1,0x62,0x32,0xd8,0x0c,0x36,0x87,
+ 0xc9,0x31,0xb3,0x80,0xa9,0x79,0x4c,0xcf,0x63,0x6a,0x0e,0xae,0x80,0x00,
+ 0x31,0x24,0x91,0x90,0x52,0x05,0x4a,0xe4,0x92,0xcf,0x3c,0xc8,0x68,0x12,
+ 0xc0,0x89,0xc2,0x32,0x5b,0xc7,0xd6,0x59,0x22,0x26,0x62,0x66,0x4b,0xe4,
+ 0x54,0x0d,0xe0,0x0c,0xa3,0xa9,0xa5,0xd7,0x5f,0x07,0x97,0x07,0x0f,0x2d,
+ 0xec,0xde,0xd3,0x59,0x5a,0x5e,0xca,0x7c,0x17,0x30,0x44,0x9c,0x92,0x10,
+ 0x71,0x9e,0x17,0xde,0x67,0xde,0x67,0x29,0xc9,0xeb,0x27,0xac,0xdb,0x09,
+ 0x43,0x06,0x75,0xf2,0xc2,0x50,0x48,0x41,0x73,0xbf,0x3b,0xd5,0xf3,0xcf,
+ 0x3d,0xb5,0xf2,0xe9,0xbf,0x38,0x7b,0xf1,0xa7,0x40,0x62,0x86,0x97,0x98,
+ 0xa2,0x94,0x80,0xc4,0xd8,0x22,0x7f,0xb0,0xc6,0x7a,0xeb,0x63,0x4c,0x82,
+ 0x18,0xb5,0x8e,0xb1,0x06,0x45,0x18,0xf8,0x02,0x33,0x73,0x58,0xd8,0x87,
+ 0xc3,0x47,0x71,0xfc,0xc4,0xa1,0xa3,0xc7,0x0e,0xce,0xef,0xe9,0xfa,0xae,
+ 0xb2,0x25,0x26,0x1f,0x83,0xf6,0x7b,0xcd,0xca,0x72,0x6f,0x79,0xa9,0xdf,
+ 0xdf,0x48,0xdf,0x7b,0xe2,0xec,0xf5,0xab,0x58,0x5f,0x44,0x13,0x4a,0x08,
+ 0xc8,0x4f,0x69,0xf2,0x10,0x13,0x53,0x6d,0x84,0x88,0x52,0x8c,0x15,0x90,
+ 0x8c,0x65,0xa2,0x44,0x44,0xaa,0x04,0xc9,0x42,0x15,0x7e,0xf2,0x1c,0x9a,
+ 0x78,0x71,0x6a,0x3a,0x7b,0xc7,0x7b,0x8e,0x76,0x7c,0x64,0x24,0x67,0x23,
+ 0x11,0x52,0xac,0x25,0x01,0xd6,0x12,0x69,0x5d,0x87,0xed,0x4d,0x8f,0xec,
+ 0x78,0x3e,0xbe,0x61,0x63,0x95,0x55,0x7f,0x76,0x66,0xae,0xd7,0x5f,0x83,
+ 0xf8,0xb9,0xa9,0xa3,0xcf,0xfc,0x60,0xf5,0x53,0x9f,0x78,0xe1,0xe2,0x2b,
+ 0x20,0x31,0xde,0xcd,0x49,0x6a,0xa2,0x54,0x13,0x2f,0xc6,0xce,0xe6,0x31,
+ 0x4a,0x42,0x69,0x0c,0x24,0x55,0x6d,0x18,0xe5,0x5d,0x1c,0x3b,0x89,0xd3,
+ 0x77,0x77,0x1e,0x7e,0xf4,0xf4,0x5d,0xf7,0x1c,0x9e,0x9d,0xf7,0x31,0x0d,
+ 0x86,0xe5,0x7a,0x1d,0x57,0xd4,0x34,0x64,0x60,0x8c,0x33,0xec,0xe6,0xf7,
+ 0xbb,0xc3,0xa7,0x32,0x49,0x1d,0x4d,0xf9,0x23,0xef,0xda,0xbf,0xb2,0x18,
+ 0xcf,0xbe,0xb4,0xfc,0xa3,0x1f,0x9c,0x7f,0xfe,0xe9,0x26,0x0d,0xfb,0x50,
+ 0x9e,0x99,0x3d,0xb8,0xb1,0x56,0x43,0x8d,0xa8,0xb6,0x0d,0xa4,0x48,0x24,
+ 0x6a,0x21,0x32,0xab,0xca,0x86,0x7d,0x4a,0xcd,0xab,0x2f,0xe3,0x0b,0x9f,
+ 0x3d,0x9b,0x65,0xd9,0xbb,0x7e,0xf5,0xcd,0x57,0x57,0x9f,0x17,0xea,0x13,
+ 0x11,0xb3,0x03,0x10,0x82,0xa4,0x24,0xaa,0x62,0xad,0x05,0xfd,0x8c,0xea,
+ 0xf4,0x8d,0x1a,0x4b,0x9a,0x66,0xb8,0xd1,0x23,0x43,0xd3,0xb9,0x3f,0x70,
+ 0xfd,0x02,0x7d,0xeb,0x2b,0x2f,0xbd,0xf0,0x23,0x20,0x02,0xea,0x44,0x52,
+ 0x94,0x0a,0x08,0x9d,0xcc,0x02,0x68,0x1a,0x21,0x93,0x35,0x31,0x39,0x4b,
+ 0xc6,0xc5,0xaa,0x89,0xf0,0x70,0x39,0x1e,0x7a,0x1b,0x1e,0x78,0xf0,0xe0,
+ 0xdb,0xdf,0x75,0xaf,0x2f,0x2a,0x97,0x35,0x31,0xbd,0x72,0x65,0x79,0x3d,
+ 0x49,0xe5,0x3c,0x65,0x1d,0x47,0xd6,0x44,0x09,0x4d,0x08,0xb1,0x69,0x44,
+ 0x84,0x88,0x08,0x8e,0x29,0x3b,0x74,0x6a,0xff,0xd1,0x53,0xb3,0x77,0xbf,
+ 0xe9,0xce,0x07,0x1f,0x39,0xfa,0xfc,0xd3,0x8b,0x3f,0xfa,0xfe,0x6b,0x3f,
+ 0x7e,0x61,0x63,0x63,0xf1,0x22,0xc0,0x84,0xae,0x77,0x0e,0xc4,0x21,0x54,
+ 0x31,0x35,0x0a,0x21,0x18,0x45,0x43,0xb0,0x44,0x64,0x2d,0x04,0x78,0xfa,
+ 0x49,0x4c,0xe5,0x3f,0x3d,0x71,0xec,0x2e,0x37,0x3b,0x17,0xa5,0xac,0xeb,
+ 0xda,0x79,0x9b,0xe7,0x5e,0x44,0xc8,0x18,0xe7,0x4d,0xd3,0x94,0x3b,0xcd,
+ 0x80,0xe9,0xe7,0xc9,0x59,0xd2,0xe9,0xb8,0x5e,0xaf,0x5a,0xd8,0x75,0x5a,
+ 0xc3,0xc2,0xe7,0x3f,0xfd,0xa3,0xaf,0x7d,0x69,0x10,0x4b,0x64,0xce,0xa5,
+ 0x04,0x45,0x1c,0x99,0xcd,0x72,0x8c,0x31,0x89,0x32,0x3b,0x08,0x94,0x62,
+ 0x48,0xd1,0x64,0x38,0x76,0x0a,0x1f,0xf8,0xad,0xce,0x07,0x1f,0xbf,0xe7,
+ 0xad,0x8f,0x1e,0x0c,0x7a,0x51,0xcd,0x52,0xc2,0xaa,0x52,0x8f,0x6d,0x63,
+ 0x5d,0x60,0x9b,0x94,0x9a,0x26,0x96,0x49,0x1b,0x45,0xc3,0x2c,0xd6,0xb5,
+ 0x3f,0xc9,0xd8,0x54,0xd5,0xeb,0xfd,0xe1,0x72,0x4c,0x83,0x85,0xbd,0xd3,
+ 0xf7,0xdc,0x77,0xfc,0xf8,0xc9,0x05,0xa5,0xe5,0xe5,0x95,0x6a,0xd8,0x57,
+ 0x91,0x26,0xc6,0xd2,0x18,0x22,0x70,0x12,0x01,0x34,0xcb,0x7c,0x4a,0xc1,
+ 0x58,0x0e,0x21,0xa4,0xa8,0x79,0x4e,0xa1,0xc1,0xda,0x4a,0x8a,0xa9,0x7f,
+ 0xdf,0x5b,0x0e,0xe4,0x5d,0x84,0x10,0x53,0x4c,0xce,0xf9,0x76,0x38,0x60,
+ 0xad,0x4d,0x29,0x8c,0xcb,0xba,0x84,0x1b,0x0b,0x09,0xba,0x2d,0x63,0x91,
+ 0xe4,0x39,0x1b,0xee,0x64,0x7a,0xe8,0x07,0x4f,0x5c,0xf9,0xf4,0x27,0xce,
+ 0xad,0x2f,0x81,0x81,0x18,0x25,0xf3,0x42,0x14,0x45,0x14,0x80,0x26,0x4e,
+ 0xda,0x22,0xc6,0x32,0x33,0x33,0x37,0xac,0x7b,0x2e,0xc7,0xdb,0xde,0x99,
+ 0xff,0xde,0xef,0xdf,0xf7,0x6b,0x1f,0xb8,0x73,0xd7,0xbe,0xaa,0x5f,0x9f,
+ 0x75,0xf9,0x80,0x5d,0xcd,0x9c,0x8c,0x61,0x63,0x2c,0x93,0x57,0xe1,0x94,
+ 0x10,0x55,0x94,0x98,0x4d,0x6e,0x6c,0x46,0x54,0x80,0x9c,0x88,0x4d,0x02,
+ 0xb0,0xb1,0xce,0x28,0xd7,0x65,0xbd,0x56,0xc5,0xa5,0xce,0x4c,0xbc,0xf3,
+ 0xde,0xdd,0xbf,0xf2,0x9e,0x33,0x2b,0x4b,0x57,0x86,0xfd,0x54,0x56,0x48,
+ 0x31,0xb6,0x33,0x24,0x80,0x5a,0x63,0xa9,0xc6,0x36,0x20,0x09,0xde,0x30,
+ 0x95,0x03,0xb9,0xb6,0xb8,0x71,0xec,0x4e,0xd9,0x7b,0xb0,0xc8,0xb3,0xbc,
+ 0xae,0x1a,0x10,0x89,0xa8,0x48,0xda,0x3a,0xfb,0x46,0xe4,0x1c,0x8c,0x43,
+ 0x72,0xab,0x72,0x9d,0x34,0x96,0x6c,0x27,0xfa,0xd0,0x4d,0xc3,0xbe,0xf6,
+ 0x6c,0x96,0x7e,0xbf,0xbf,0x30,0x7b,0xea,0xea,0x85,0xfc,0x93,0x7f,0xf9,
+ 0xe4,0x4b,0xcf,0xc1,0x10,0x9c,0xe1,0x16,0x42,0x48,0xa3,0x78,0x67,0x63,
+ 0x32,0x66,0x4b,0xaa,0xc6,0x4b,0xbf,0x1a,0xf8,0x29,0xbc,0xf7,0x83,0x0b,
+ 0x1f,0xfd,0xc3,0x77,0x9f,0xb9,0x7f,0x66,0xa5,0xf7,0xe3,0xa5,0xb5,0xb3,
+ 0x79,0x37,0x55,0xa1,0x97,0xb4,0x51,0x90,0xa8,0xa6,0xa4,0x49,0x14,0x30,
+ 0x30,0x04,0x12,0x30,0x08,0x4e,0x95,0x55,0x49,0x92,0x4a,0x12,0x51,0x09,
+ 0x21,0x18,0xc3,0xc6,0x20,0x49,0x9d,0x64,0x68,0x5c,0xe9,0xf3,0xa6,0x28,
+ 0xcc,0x3d,0xf7,0xdc,0x3b,0x1c,0xae,0xbd,0x76,0xbe,0x4c,0x11,0xc6,0x90,
+ 0xa4,0x16,0x8c,0x26,0x9f,0xd9,0x26,0x04,0xe7,0x0c,0xb3,0x09,0x41,0x09,
+ 0x4e,0xc5,0x96,0x65,0xac,0x64,0xfd,0x8e,0x3b,0x16,0x76,0xef,0x9a,0xab,
+ 0x9b,0x1e,0x50,0x93,0x89,0xce,0xb2,0x75,0x24,0x12,0xc6,0xe5,0xde,0xd8,
+ 0x3a,0x44,0x13,0xd8,0xd0,0x96,0xb1,0x64,0xd4,0x01,0xa0,0xed,0xf2,0x19,
+ 0x20,0x85,0x7a,0xef,0xb2,0xcc,0xd5,0x75,0xa5,0x2a,0x3e,0x33,0x31,0x95,
+ 0xce,0x78,0x8a,0x9d,0x7d,0x73,0x6f,0xfe,0xcb,0x3f,0x7d,0xf2,0x6b,0x9f,
+ 0xaf,0x1c,0x5c,0x0a,0x39,0x33,0x2b,0xa2,0x8c,0x6d,0x9b,0x67,0xdd,0x26,
+ 0x24,0x66,0x37,0x35,0x3d,0xd3,0xaf,0xfa,0x76,0x0e,0x1f,0xfb,0xa3,0xfd,
+ 0xff,0xee,0xf7,0xde,0x3a,0xb5,0xab,0x3f,0x68,0xce,0xdb,0xbc,0xce,0x0a,
+ 0x47,0x4c,0x6c,0x32,0x66,0x0f,0x32,0x20,0x02,0x11,0xb1,0x01,0x19,0x90,
+ 0x8a,0x69,0xd8,0xa8,0x77,0x5d,0x66,0x13,0x42,0x65,0x1d,0x39,0xaf,0x31,
+ 0x35,0x45,0x5e,0x54,0x65,0x70,0xb6,0x20,0x38,0x90,0xaa,0xa6,0xa6,0x19,
+ 0x4e,0xcd,0x78,0xe2,0xf2,0xa1,0x47,0xdf,0x94,0xe5,0xd5,0xb3,0xcf,0xad,
+ 0xa7,0x5a,0xf2,0xce,0x4c,0x4c,0x9c,0x52,0x8a,0x29,0x10,0x8b,0xa8,0x2a,
+ 0x84,0x89,0x55,0x89,0x60,0x89,0xc2,0xc5,0xd7,0x50,0xe4,0xe1,0xe1,0x47,
+ 0xee,0xaa,0x9b,0xeb,0x8a,0x35,0xe3,0x03,0x24,0xb0,0x21,0xd5,0x9a,0x36,
+ 0x3d,0x46,0x1d,0x60,0x85,0xda,0xba,0x87,0x6f,0xc8,0x59,0x3a,0x11,0x9c,
+ 0x6d,0x75,0x4b,0x44,0x0a,0x68,0x4a,0x31,0xa5,0xe4,0x33,0xc7,0x4c,0x75,
+ 0x3d,0x54,0xb1,0xd3,0xd9,0xb1,0xd7,0x5e,0x0e,0x5f,0xff,0xc2,0xd9,0x2b,
+ 0x17,0xd4,0xd1,0x4c,0x14,0x4a,0xa9,0x66,0x56,0x55,0x58,0x0b,0x55,0x13,
+ 0xa3,0x00,0x2a,0x5a,0x57,0x75,0xbf,0x98,0xc5,0x47,0xff,0xd3,0xbe,0x87,
+ 0xde,0xb9,0x77,0xe1,0x20,0xd5,0x69,0xb1,0x4e,0x4b,0x51,0xca,0x98,0x62,
+ 0x4c,0xc9,0x18,0xbf,0xe5,0xbf,0xd4,0xfa,0x3f,0x83,0xc4,0x38,0xa9,0xaa,
+ 0x61,0x08,0xed,0x15,0x6a,0x39,0x6c,0x52,0xe4,0x22,0xdb,0x63,0x69,0xcf,
+ 0x6b,0xaf,0xae,0x4f,0x77,0x0e,0xce,0xcf,0xed,0xed,0xf5,0x7a,0x3e,0x33,
+ 0x45,0xc7,0xaf,0xac,0x5e,0x23,0xdb,0x44,0x29,0xf7,0xee,0x39,0xd8,0xed,
+ 0xf0,0xd9,0x57,0xd6,0xaa,0x7e,0x69,0xac,0xd5,0x94,0x88,0x5a,0x16,0x45,
+ 0x1b,0x86,0x9b,0x4d,0x28,0xa9,0xa4,0xa9,0x2e,0x1f,0x3d,0x3e,0x3b,0xb7,
+ 0x8b,0x9b,0xb4,0x4a,0x54,0x77,0x8a,0x6e,0x68,0xaa,0x09,0x0b,0x18,0xc0,
+ 0x62,0xd4,0x8e,0x0a,0x4d,0x14,0x5f,0xe6,0xc3,0x7f,0xd4,0x9d,0xe0,0x16,
+ 0xd0,0x38,0x06,0x89,0x18,0xaa,0x12,0x42,0xa3,0xaa,0x79,0x96,0x03,0xa8,
+ 0xab,0x8a,0x64,0x6a,0x26,0xbf,0xeb,0x0b,0x7f,0xfb,0xa3,0x6f,0x7f,0xa3,
+ 0x0c,0x15,0xbc,0xf3,0x31,0x06,0x20,0x1a,0x43,0x80,0x12,0x59,0xc3,0x99,
+ 0x48,0x02,0x45,0x18,0x35,0x19,0xde,0xf7,0xd8,0xbe,0xc7,0x7f,0xe7,0x4d,
+ 0x7b,0x0e,0x42,0xa8,0x57,0x56,0xcb,0xe0,0xca,0x79,0x32,0x86,0x8d,0xe1,
+ 0xad,0x86,0x66,0xd3,0xcd,0x89,0x00,0x58,0xc3,0x4c,0xdc,0xed,0x14,0x86,
+ 0xb8,0x2e,0x43,0x66,0xe6,0xa6,0xb2,0xe3,0x71,0xb0,0xf7,0xcb,0x9f,0x7d,
+ 0xf1,0x8b,0x9f,0xed,0x0d,0xd6,0x37,0x8e,0x1c,0xbc,0xa3,0xc8,0xf3,0x72,
+ 0x38,0x08,0xcd,0x30,0xcf,0x8c,0xa0,0x51,0x95,0x23,0x87,0x8e,0x1f,0x3c,
+ 0x78,0x64,0x6d,0x6d,0xf9,0x95,0x73,0x03,0x0d,0x81,0x2c,0x8d,0x09,0x39,
+ 0x04,0x30,0xb5,0xe4,0x14,0x6a,0x11,0xa0,0x54,0x56,0xa1,0x3b,0x3d,0xbc,
+ 0xe7,0xbe,0x13,0x09,0x43,0x55,0xe9,0x4e,0x75,0x07,0x83,0x21,0x1b,0x86,
+ 0x1a,0x10,0x8d,0xed,0x25,0x4a,0x0a,0xda,0x56,0xa7,0x9a,0x0f,0xff,0x51,
+ 0x67,0x9c,0xd8,0xb6,0x19,0x4b,0x45,0x89,0x48,0x24,0x32,0xb3,0x73,0x2e,
+ 0xc5,0xa4,0x6a,0x0b,0x7f,0x60,0xfd,0xfa,0xcc,0x27,0xff,0xe2,0xf9,0x2b,
+ 0x17,0x61,0x08,0x44,0x9c,0x52,0x00,0x12,0x33,0x11,0xb2,0x98,0xd4,0x50,
+ 0x66,0x5d,0x4a,0x48,0xe4,0xf0,0xc8,0x3b,0xdc,0x47,0xfe,0x87,0x47,0x67,
+ 0xf6,0x0c,0xea,0x74,0xad,0xac,0x97,0x41,0x95,0xf3,0xb0,0x96,0xd8,0x58,
+ 0x66,0xd3,0x1e,0x05,0xe3,0x84,0x3a,0xf6,0x2c,0x28,0x1b,0x02,0x34,0xcb,
+ 0xf2,0xd0,0x48,0x6c,0xfc,0xde,0xdd,0x77,0xd7,0xfd,0x85,0x6f,0x7e,0xf5,
+ 0x95,0xbf,0xf9,0x8b,0xcb,0x57,0x5e,0xc5,0xa5,0x8b,0x31,0xf3,0x7a,0xe6,
+ 0xcc,0xe9,0xf9,0x5d,0xd3,0x83,0xc1,0xfa,0xf4,0x4c,0xa7,0x49,0xfd,0x2c,
+ 0xb3,0xc3,0xc1,0x30,0xcf,0xf3,0x23,0x87,0x8f,0xac,0xac,0x5c,0xbc,0x74,
+ 0x3e,0x7a,0x2f,0x12,0x75,0xd4,0x8a,0x83,0xb7,0xb5,0x30,0x9a,0xaa,0x1a,
+ 0x4d,0x2c,0xdf,0xfc,0xe0,0xf1,0x99,0xb9,0x4c,0xb4,0x26,0xd2,0x98,0x1a,
+ 0x22,0x03,0x30,0x88,0x36,0x91,0x7b,0x25,0x05,0xe9,0x4e,0xc6,0xc2,0x64,
+ 0xe7,0xcd,0x00,0x89,0x24,0x6b,0x0d,0x91,0x32,0xb3,0x88,0x88,0xb0,0x77,
+ 0x53,0xb9,0x39,0xfc,0xe4,0x37,0x57,0xbf,0xf1,0xe5,0xab,0xa1,0x42,0xe6,
+ 0x6d,0x68,0x1a,0x63,0x20,0xaa,0x44,0x50,0x71,0x0a,0xab,0x0a,0x36,0x95,
+ 0x30,0x4e,0x9e,0xc6,0xef,0x7c,0xec,0xfe,0xd3,0xf7,0x4d,0x57,0x72,0xa9,
+ 0x8e,0x4b,0xa0,0xda,0x79,0x02,0x24,0x84,0x90,0x22,0x44,0x98,0x88,0xc7,
+ 0x36,0x1a,0xdb,0x0b,0x0c,0x12,0x66,0x19,0x0c,0xfa,0xc3,0x41,0xb0,0x3c,
+ 0x37,0xdb,0x3d,0xbe,0xb1,0x3c,0xf5,0xf5,0x2f,0xbc,0xf2,0xc9,0xbf,0x7c,
+ 0xb1,0x77,0x0d,0x10,0xae,0x06,0x7a,0xf6,0xec,0x9a,0x73,0xd5,0x99,0xbb,
+ 0x4e,0x3a,0x4f,0xd7,0x17,0x2f,0x1a,0x9f,0x9c,0xc7,0xca,0xca,0xb5,0x24,
+ 0xe5,0xc9,0x93,0xc7,0xbc,0x77,0x67,0x7f,0x7a,0x75,0x6d,0x09,0xa4,0x0a,
+ 0x6d,0x81,0x0d,0xa6,0x49,0xd8,0x1a,0xcc,0x2c,0xeb,0x1b,0x38,0x75,0x6a,
+ 0xe6,0xf8,0xa9,0xfd,0x40,0xd5,0x1f,0x2e,0x67,0x99,0x95,0x2d,0x6a,0xd8,
+ 0x28,0x39,0x28,0xb5,0x16,0xd1,0x9f,0x8d,0x75,0xa9,0x82,0x88,0xac,0xb5,
+ 0xc4,0x08,0x21,0x11,0xac,0x33,0x33,0xd5,0xc0,0x3f,0xf9,0xc4,0x2b,0x55,
+ 0x1f,0x86,0x00,0xb5,0xa2,0x20,0x16,0x63,0xa0,0x4a,0xa2,0xc6,0xc0,0x2b,
+ 0x52,0x88,0xea,0x0b,0x3c,0xfa,0xae,0xa9,0x37,0x3f,0xbc,0x77,0xa3,0x7c,
+ 0x99,0x6d,0x8f,0x4c,0x63,0x9d,0x1a,0xab,0x31,0xc6,0x18,0x41,0xe4,0x0c,
+ 0xbb,0x89,0xd6,0x7f,0x8c,0x94,0x92,0x02,0x12,0x53,0xcd,0x6c,0x9d,0x99,
+ 0x9b,0xed,0x1e,0x6f,0x06,0x0b,0x5f,0xf8,0xec,0x33,0x9f,0xf8,0xf3,0xe7,
+ 0xd6,0xaf,0x01,0x32,0x87,0x38,0x67,0x79,0xbe,0xbf,0x84,0xbf,0xfa,0xf8,
+ 0xb9,0xcf,0x7d,0xfa,0xc9,0xaa,0x3f,0xb3,0x7b,0xee,0x4e,0x8d,0xdd,0xba,
+ 0x4e,0xdd,0x29,0x4b,0x76,0x7d,0xa3,0x7c,0xf9,0xbe,0x37,0xef,0x7e,0xef,
+ 0x07,0x0e,0x8d,0x5c,0x8a,0xb6,0x03,0x18,0x23,0x0c,0x83,0xbd,0xf5,0x4d,
+ 0x89,0x7f,0x7e,0xea,0x5c,0x6f,0x8d,0x9c,0x9d,0xa9,0xca,0x68,0x2d,0xdf,
+ 0xc8,0x20,0x1b,0x3f,0x78,0xd2,0x44,0xbc,0x0d,0xc0,0x6d,0x83,0x82,0x04,
+ 0x80,0x31,0x06,0xda,0xfa,0x94,0x88,0xc0,0x9a,0x8e,0xa6,0xfc,0xf2,0x85,
+ 0xfe,0x0b,0xcf,0xae,0x43,0x9c,0xe5,0x6e,0x8c,0x02,0x40,0x04,0xaa,0x50,
+ 0x25,0x80,0x9d,0x73,0x40,0x00,0xe3,0x2d,0x0f,0xe1,0x6d,0xef,0xbc,0xc3,
+ 0x64,0x2b,0x65,0x73,0x89,0x4c,0xdd,0x22,0x93,0x2a,0xa4,0x4a,0xd6,0x64,
+ 0x79,0xd6,0xb5,0x36,0x1b,0x1f,0xbb,0x37,0xa2,0x31,0x9a,0xa4,0xf0,0xd3,
+ 0xb3,0x9d,0xe3,0x2b,0x57,0xf2,0xaf,0xfc,0xdd,0x4f,0xbe,0xf8,0xb7,0x17,
+ 0x86,0xcb,0x30,0xa6,0x93,0x65,0x1d,0x00,0x96,0x7d,0x51,0x74,0x9a,0x0d,
+ 0x7c,0xf1,0xb3,0x17,0xbe,0xfd,0xf5,0xb3,0x0e,0x47,0x72,0x7b,0x54,0xc2,
+ 0x54,0x51,0x74,0x7d,0xa6,0x1b,0x83,0xf3,0xc5,0x4c,0xff,0xc1,0x47,0x8e,
+ 0xde,0xf7,0x60,0x6b,0xac,0xe6,0x26,0x7a,0x57,0xfb,0x9e,0x19,0x82,0x17,
+ 0x9e,0xdd,0xb8,0x74,0x61,0x83,0x51,0x58,0x6b,0x45,0xd2,0x4d,0xac,0x26,
+ 0xb9,0x19,0x0b,0xe4,0x1d,0xa8,0x52,0x2d,0x8e,0x6b,0x9c,0x88,0xb4,0x64,
+ 0x0d,0x82,0xb1,0xa6,0x48,0x21,0xbf,0x76,0x65,0xb8,0xb6,0x0c,0x46,0xa1,
+ 0xca,0x31,0x0a,0x14,0x29,0x41,0x12,0x54,0x99,0x60,0x14,0x11,0x14,0x3b,
+ 0xd3,0x78,0xeb,0x23,0x87,0x8f,0x9f,0x9a,0x5b,0xef,0x9f,0xef,0x4e,0x83,
+ 0x8d,0x30,0x33,0x33,0x8f,0x86,0xf5,0x6c,0x45,0x50,0x95,0xcd,0x66,0xe1,
+ 0x06,0x4a,0x5b,0x35,0x9d,0x3a,0x43,0xd3,0xa1,0x9a,0x1e,0xac,0x4d,0x7d,
+ 0xff,0xbb,0x97,0x3f,0xf5,0x89,0x17,0xd7,0xae,0xc1,0xb9,0x3c,0xd5,0xa9,
+ 0x6e,0xfa,0x40,0x53,0x0d,0xfb,0x65,0xaf,0x82,0xe0,0xca,0x39,0xfc,0xe5,
+ 0x9f,0xbd,0xf2,0xd9,0xbf,0xfe,0xc1,0x4c,0x76,0x87,0xe3,0x7d,0x75,0x69,
+ 0x62,0x8c,0xd6,0x85,0x28,0x2b,0x73,0xbb,0xf1,0xfe,0x0f,0x3e,0x30,0xce,
+ 0xbd,0x61,0x62,0x7a,0x24,0xe3,0x8e,0x2d,0x42,0x70,0xed,0x0a,0xae,0x5d,
+ 0xd9,0x80,0x66,0x59,0x96,0xc5,0xd4,0xdc,0xc4,0x23,0xdc,0x01,0x84,0xe0,
+ 0xf1,0xc7,0x3b,0xb6,0xd7,0xb8,0x84,0x65,0xe6,0x18,0x53,0x4c,0xa1,0xa5,
+ 0x6c,0x94,0xc3,0xc8,0x98,0xf9,0xc7,0x6f,0x3e,0x43,0x84,0x94,0x34,0x06,
+ 0x61,0x32,0xcc,0xcc,0xc4,0x4c,0x9e,0xe1,0x15,0xa9,0x09,0x7d,0x30,0x8e,
+ 0x1c,0xc7,0xdb,0xde,0x71,0x77,0x6f,0x70,0xd9,0x79,0x89,0xa9,0x0e,0x21,
+ 0x18,0xe3,0x54,0x29,0x25,0x75,0x2e,0x23,0xa2,0x18,0xa3,0xb1,0x4a,0x2c,
+ 0xa2,0xb5,0x75,0xea,0xb3,0x51,0xbb,0x6f,0x8d,0x23,0xed,0x58,0x1c,0xf2,
+ 0xe9,0xe4,0x3f,0x7c,0xe9,0xa5,0x3f,0xff,0x93,0x67,0xd7,0xaf,0x81,0x35,
+ 0x8b,0x15,0x11,0x03,0xd2,0xb7,0xbe,0x06,0x4a,0x40,0x10,0xc1,0x82,0xfe,
+ 0x22,0x3e,0xfe,0x27,0x17,0x3e,0xf9,0x57,0xdf,0xe5,0x74,0x60,0xd7,0xec,
+ 0xc9,0xba,0x62,0x55,0x2d,0xeb,0x35,0xc1,0xda,0x83,0x0f,0x9f,0x3c,0x7d,
+ 0x37,0x94,0xc0,0x36,0xaa,0x06,0x66,0x56,0x55,0x11,0x51,0x4d,0x44,0x02,
+ 0x48,0x96,0x15,0xde,0xe1,0xdb,0xdf,0x7a,0x5a,0xd2,0x28,0x15,0x88,0x24,
+ 0x91,0xa8,0x9a,0x54,0x47,0x56,0x1b,0xc3,0xd6,0x37,0x34,0xd2,0x37,0xce,
+ 0x85,0x46,0xa4,0x2a,0x22,0x6a,0x67,0x30,0x44,0xac,0x6a,0x57,0x97,0x9b,
+ 0xa5,0xeb,0x93,0xfe,0x3c,0xe6,0x57,0xb7,0xa0,0x30,0x44,0xd1,0xb8,0x1c,
+ 0xa7,0xef,0xee,0x66,0x45,0x93,0x4c,0xa5,0x10,0x66,0xbb,0xd3,0xf8,0x37,
+ 0x81,0x24,0xa5,0x46,0x11,0xea,0xa6,0x56,0x85,0x24,0x22,0x58,0x65,0x36,
+ 0x3a,0x6f,0xe5,0xf8,0xdf,0xff,0xfd,0x0f,0x3f,0xff,0x99,0x8b,0x6b,0x8b,
+ 0x60,0x38,0x46,0x47,0x59,0x8c,0x4d,0xa2,0x31,0x49,0x60,0x0b,0xe7,0x72,
+ 0xa8,0xad,0xab,0x0a,0x14,0xd1,0xe0,0x2b,0x5f,0xb8,0x38,0x68,0xae,0xbd,
+ 0xf7,0x03,0xc7,0x17,0x0e,0x1c,0xae,0xc2,0xd5,0x94,0xea,0xce,0x14,0xc5,
+ 0x72,0xe3,0xce,0xbb,0x66,0x5f,0x79,0x79,0x5d,0x03,0x40,0x31,0x89,0x42,
+ 0x99,0x08,0x44,0xa3,0xe6,0x46,0x12,0x85,0x88,0xd5,0x15,0xac,0xae,0xf4,
+ 0xfd,0x8c,0x1f,0xa7,0x4e,0xc2,0xeb,0x12,0xa1,0x79,0x3b,0x17,0x78,0xcb,
+ 0x15,0x53,0x54,0x66,0x6b,0x46,0x84,0x1e,0x26,0xf8,0x2b,0x97,0x56,0xaf,
+ 0x5c,0xc2,0x78,0x32,0x9a,0x30,0x1a,0xb5,0x9a,0xf6,0xc4,0x61,0x10,0x18,
+ 0x33,0xf3,0x78,0xf8,0x6d,0x67,0x6c,0x56,0x11,0x47,0x28,0x31,0xb9,0x89,
+ 0xa7,0x15,0x50,0x02,0x05,0x50,0x03,0x0a,0x3e,0x23,0x50,0xc8,0x32,0x97,
+ 0x67,0x85,0x24,0x47,0xda,0xcd,0xec,0x5e,0x4a,0xfb,0xbf,0xf8,0x99,0xb3,
+ 0x9f,0xff,0xf4,0xc5,0xc5,0x4b,0xb0,0x06,0xd6,0x14,0x31,0x85,0x94,0xa2,
+ 0x88,0xc4,0x90,0x88,0x60,0xad,0x49,0x29,0xd5,0x55,0x0d,0x18,0xa6,0x0e,
+ 0x1b,0x5c,0xbb,0x88,0x17,0x5f,0x08,0x1b,0x6b,0xc1,0x99,0x19,0xa8,0x53,
+ 0x88,0xf5,0x91,0x4c,0xff,0xa1,0xb7,0x9d,0x9e,0xdb,0x0d,0x25,0x80,0xd0,
+ 0xf2,0xe2,0x5a,0xe6,0x53,0x1b,0x5b,0x2d,0x63,0x67,0xf1,0x3a,0xae,0x5c,
+ 0x5e,0xb1,0xa6,0x50,0x9d,0xc0,0xca,0x27,0xfd,0x66,0xbb,0x0f,0xed,0x28,
+ 0x73,0x10,0x00,0xaa,0x64,0x5b,0x8e,0x9d,0x2a,0x11,0x59,0x9b,0x5f,0xbd,
+ 0xbc,0x3e,0x58,0x6f,0x4d,0x9f,0xb6,0x47,0x38,0x8f,0xe8,0x90,0x8c,0x85,
+ 0x7d,0xb8,0xeb,0xde,0xa3,0x31,0xf5,0x40,0x01,0x60,0x82,0xbb,0x49,0x49,
+ 0x31,0x52,0x92,0xb0,0x81,0x2a,0x41,0xbd,0x4a,0x6e,0x30,0x3f,0x3f,0x7d,
+ 0x2a,0x56,0xbb,0x9f,0xf8,0xc6,0x2b,0x7f,0xf9,0x67,0x2f,0x2c,0x5e,0x02,
+ 0x12,0x32,0x3f,0xd5,0x34,0x75,0x5b,0x58,0xc4,0x10,0x00,0x38,0xeb,0x45,
+ 0x10,0x43,0x00,0xd4,0x79,0xa3,0x68,0x24,0x61,0x7e,0x2f,0xde,0xfa,0xd0,
+ 0xec,0xdc,0xdc,0xdc,0xc6,0x46,0x0f,0x60,0x66,0x2e,0xab,0x55,0xf0,0xf0,
+ 0xcc,0xdd,0x07,0x76,0x2f,0x40,0x74,0x1b,0x72,0x20,0xe3,0xa6,0x8c,0xc9,
+ 0x43,0xb1,0xbe,0x86,0xcb,0x17,0x57,0xad,0xe9,0x4a,0x32,0x5b,0x47,0xf3,
+ 0xd6,0x45,0xdd,0x08,0x2b,0xf3,0x04,0xf6,0xbc,0xed,0xaa,0x8c,0x31,0x6d,
+ 0x85,0xa5,0xaa,0x50,0x36,0xec,0x97,0x16,0x7b,0xe3,0x23,0x42,0x80,0x78,
+ 0x03,0x95,0x58,0x24,0x1a,0x8b,0x23,0x47,0xb3,0xd9,0x39,0x5f,0xd5,0x3d,
+ 0xd1,0x08,0xb0,0xc8,0x66,0xf7,0x30,0x79,0x86,0x08,0x80,0xa6,0x8e,0x92,
+ 0x4c,0x7f,0x23,0x56,0x03,0xdf,0xcd,0x8e,0x97,0x1b,0xbb,0xbe,0xf5,0xb5,
+ 0x73,0x1f,0xff,0xd3,0x57,0xca,0x0d,0x40,0x2c,0x94,0x07,0xbd,0x21,0x20,
+ 0xd6,0x88,0x69,0x8b,0x4a,0xb5,0xa4,0x36,0x36,0x04,0xb5,0xdd,0x6e,0x96,
+ 0xd2,0x50,0x29,0xba,0x0e,0x3e,0xfa,0x07,0x27,0xde,0xf3,0xbe,0x7b,0xe7,
+ 0x77,0xe7,0x21,0x56,0xd6,0x78,0x55,0x2d,0xab,0x0d,0xb6,0xf5,0xec,0xbc,
+ 0xdd,0x7f,0x10,0xaa,0xdb,0xd2,0xf4,0x78,0xde,0x68,0x8d,0xf1,0x50,0x20,
+ 0xe1,0xea,0xe5,0x75,0x46,0x57,0xa2,0xbb,0x69,0xae,0x33,0x11,0x10,0x3f,
+ 0x13,0xfc,0x6b,0x03,0x30,0xa5,0xc0,0x6c,0x41,0x50,0x31,0x4b,0xd7,0xfb,
+ 0xe3,0x27,0x94,0xcd,0x21,0xe2,0x44,0xb1,0x27,0xc6,0xe2,0xc4,0xc9,0x83,
+ 0x51,0x06,0x49,0x2a,0x8b,0x28,0x62,0x24,0x31,0x33,0x8f,0x4e,0x16,0xd2,
+ 0x1b,0xce,0x5b,0x82,0xb5,0xdc,0x99,0x9f,0x39,0x55,0x6e,0xcc,0x7e,0xfe,
+ 0x33,0xff,0xfc,0x77,0x9f,0xba,0xda,0xbb,0x0e,0x63,0x00,0x35,0x49,0x04,
+ 0x40,0x91,0xe7,0x21,0x84,0x24,0x81,0x89,0x89,0x51,0x55,0x0d,0x60,0xbc,
+ 0x33,0x65,0x35,0x10,0xc2,0x81,0x23,0xf8,0x8d,0xc7,0x8f,0xbd,0xe3,0x3d,
+ 0x27,0xdc,0xd4,0x46,0x0a,0x83,0xa2,0x63,0xad,0x93,0xa6,0x4c,0xc4,0x42,
+ 0xdc,0x24,0xed,0x1f,0x3b,0xb1,0x87,0xed,0x92,0x44,0x10,0x8c,0x2a,0x8d,
+ 0x2f,0x9b,0x09,0x96,0x46,0x53,0xb8,0xb8,0x78,0xbd,0xa7,0x29,0x57,0xf1,
+ 0xa4,0xad,0xfe,0xe0,0xc6,0x3a,0x63,0xf2,0x1a,0x6f,0x4e,0xc0,0x93,0xc3,
+ 0x61,0x49,0x29,0x59,0x6b,0x55,0x28,0x84,0xb4,0xb8,0x58,0x8d,0x1d,0x73,
+ 0x7c,0x20,0x90,0x4c,0x8c,0xdb,0x85,0x19,0x47,0x8f,0x1d,0x2c,0xcb,0x9e,
+ 0xf3,0x04,0xd2,0xd1,0xd4,0xab,0x4d,0x6a,0x94,0xb6,0x73,0x66,0xd8,0x5a,
+ 0xa7,0xc9,0x64,0x76,0xf7,0x60,0xdd,0x7f,0xeb,0xeb,0x2f,0xb4,0x96,0xea,
+ 0x76,0x8a,0x41,0xaf,0x04,0x6a,0x10,0xf2,0x2c,0x27,0xe2,0x98,0x52,0x5b,
+ 0x64,0xa4,0x16,0xd3,0xa2,0x3c,0xc6,0xa6,0xb5,0xd4,0x47,0xfe,0xc3,0x7d,
+ 0xbf,0xfa,0xc1,0x13,0x29,0x3f,0x37,0x0c,0x57,0x35,0xaa,0xf7,0x46,0x24,
+ 0x31,0xc3,0x79,0x4a,0x52,0x37,0x61,0x70,0xf2,0xd4,0x61,0x9f,0x2d,0x55,
+ 0x15,0x98,0x39,0xc9,0xa8,0x15,0x21,0x18,0x85,0x09,0x41,0x99,0x9c,0x68,
+ 0x5c,0x59,0x46,0x0c,0x06,0xea,0x81,0x66,0xbb,0xb8,0x41,0x76,0x82,0x95,
+ 0xb7,0xc8,0x2a,0x80,0xba,0xd1,0xe7,0xdf,0xa2,0x4c,0x29,0xaa,0x2a,0x91,
+ 0x01,0x10,0x9a,0xb8,0xb1,0x7e,0xd3,0x33,0x6c,0x5d,0x7f,0x02,0x89,0x32,
+ 0x76,0x2d,0x4c,0x55,0xe1,0x9a,0xef,0x98,0xa4,0x08,0x75,0x82,0xb1,0xba,
+ 0xcd,0xa1,0x36,0xff,0xde,0xa4,0xe0,0x8d,0xce,0xa7,0xe1,0xde,0x27,0xbe,
+ 0x79,0xf6,0x13,0xff,0xcf,0xb9,0xde,0x22,0xba,0x9d,0x62,0xd0,0x6f,0x98,
+ 0x21,0x11,0x04,0xaa,0xaa,0x96,0x1d,0x09,0x82,0x11,0x49,0x4c,0x5e,0x54,
+ 0xd8,0x86,0x90,0x1a,0xdf,0xc5,0x07,0x1f,0x3f,0xf5,0x6b,0x1f,0x3c,0xd1,
+ 0xab,0x5f,0x8a,0xb2,0xe8,0x0a,0x09,0x49,0xfb,0x65,0xd9,0xc9,0xad,0xb5,
+ 0x36,0x02,0x29,0x86,0x86,0x07,0xfb,0xf6,0xcf,0x79,0x8f,0xaa,0x75,0x26,
+ 0x51,0x66,0x88,0x82,0x19,0x29,0xc5,0x28,0x15,0xa0,0x50,0x0c,0x7a,0x48,
+ 0x71,0x02,0x3e,0x56,0x0b,0xd0,0x98,0xdb,0x73,0xe3,0xd8,0xd5,0x82,0x02,
+ 0x94,0x40,0x76,0xe4,0x02,0xaa,0xa0,0x06,0x88,0x49,0x2a,0x63,0xa9,0xdb,
+ 0x9d,0x6e,0xea,0x64,0x19,0x00,0x87,0x1a,0x10,0xa8,0x12,0xc6,0xb8,0x85,
+ 0xc2,0x41,0x2d,0xa0,0x40,0x60,0x87,0xce,0x2c,0x6c,0x11,0xd5,0x36,0xec,
+ 0xa8,0x69,0x92,0x18,0x62,0x4e,0x89,0x6b,0x6b,0xd9,0xa8,0x07,0x00,0x4a,
+ 0x31,0x35,0x9a,0xc4,0xd0,0x4c,0x66,0x77,0x49,0x75,0xf8,0x6b,0x5f,0x78,
+ 0xf5,0x13,0x1f,0xff,0x69,0x6f,0x05,0xd6,0xa2,0x2e,0x4b,0x26,0x68,0x34,
+ 0xa4,0x6e,0xdc,0xfd,0xca,0x38,0xa1,0x3a,0x51,0x9e,0x99,0xce,0x36,0x06,
+ 0xcb,0x73,0x0b,0xf8,0x83,0x3f,0xbe,0xe3,0xd1,0xf7,0xec,0xeb,0x87,0x1f,
+ 0xb8,0x4e,0xcd,0xd6,0x57,0x75,0xf0,0xde,0x67,0x39,0xc5,0x38,0x84,0x92,
+ 0x71,0xf9,0xb0,0x6c,0xc8,0xaf,0x67,0x53,0xb3,0xc6,0x03,0x40,0x52,0x00,
+ 0xa2,0x2c,0x10,0x24,0x09,0xc4,0x6d,0xaa,0x0f,0x00,0x42,0x83,0x18,0x61,
+ 0xbc,0x21,0x66,0xc0,0xaa,0xe6,0x00,0x80,0x06,0x94,0x54,0xb9,0xc5,0x11,
+ 0x27,0xc3,0x50,0xb6,0x14,0x33,0xea,0x47,0x0c,0x13,0x52,0x36,0xa2,0x0a,
+ 0x4d,0x4a,0x64,0x88,0x8c,0x6c,0x32,0xcb,0xb6,0x09,0x8e,0x68,0x7c,0xc0,
+ 0x25,0x01,0x8c,0x05,0x5b,0x25,0x23,0x51,0x6a,0x25,0x81,0x69,0xf9,0x08,
+ 0x5a,0x96,0x65,0x66,0xc1,0xcc,0xc3,0x61,0xcf,0x18,0x57,0xf8,0xe9,0x50,
+ 0x4d,0x59,0xdd,0xf5,0xe5,0xcf,0xfd,0xf0,0xf3,0x9f,0xbe,0xd0,0x5b,0x06,
+ 0xc4,0x02,0x56,0xa8,0x92,0x04,0x52,0x03,0xb8,0xf1,0x8b,0xc9,0xb8,0x34,
+ 0xe3,0xa9,0x62,0x6e,0xa3,0xb7,0x38,0xb7,0x9b,0x7f,0xf7,0x3f,0x3c,0xfc,
+ 0x8e,0x5f,0x39,0xe0,0xbb,0x17,0xca,0x38,0x30,0x2e,0x36,0x51,0x53,0x92,
+ 0x36,0xe4,0xeb,0x26,0x32,0x73,0x27,0xf7,0x9d,0xa9,0x42,0x42,0x32,0x0e,
+ 0xa3,0xca,0x47,0x15,0x44,0xdb,0x06,0x83,0x14,0xda,0xa7,0x97,0x04,0x11,
+ 0xb1,0xcc,0x0a,0xd9,0x76,0xe2,0x51,0x44,0xfb,0x01,0xdf,0xa8,0x09,0x19,
+ 0x25,0x3f,0x9d,0x1c,0x9c,0x19,0x63,0x54,0x49,0x04,0x04,0x03,0x25,0x15,
+ 0x1a,0xf1,0x5e,0xb6,0x55,0x22,0x09,0x14,0x47,0xd1,0x28,0x60,0x02,0xb3,
+ 0x35,0xc6,0x85,0x10,0x54,0xd5,0x18,0xc7,0xe4,0xbd,0x9d,0x6d,0x5b,0x8a,
+ 0x3c,0xcf,0x25,0x39,0x92,0xd9,0x8c,0xef,0x40,0x7d,0xf2,0xab,0x9f,0x7f,
+ 0xf9,0x8b,0x7f,0x77,0xe1,0xfa,0xe5,0x11,0xa3,0x26,0xa6,0x46,0x05,0xa3,
+ 0x83,0x0f,0x09,0x08,0x40,0x33,0x22,0x3f,0x22,0x01,0xb1,0x55,0x52,0x34,
+ 0xb5,0xa4,0x68,0x67,0xa6,0x0e,0xe4,0x6e,0xcf,0xb0,0x4f,0x75,0xa5,0xc4,
+ 0xd1,0xb8,0x86,0x4d,0x30,0x16,0x0c,0x6a,0xaa,0x50,0x96,0x8d,0x08,0x08,
+ 0xd6,0x18,0xc7,0x5b,0xa7,0xbd,0x41,0x1a,0xf9,0x89,0x6a,0x6b,0xbd,0x91,
+ 0x19,0x53,0xd4,0x51,0x39,0x49,0x13,0xc7,0xdf,0x48,0x9f,0xc5,0xdb,0x73,
+ 0x96,0xd2,0x4e,0x75,0x10,0xda,0x2a,0x4e,0x04,0x86,0x19,0x60,0x22,0x72,
+ 0xee,0x26,0x68,0x7e,0xc4,0x1b,0x90,0x4d,0xbc,0x3f,0x06,0x35,0xec,0x62,
+ 0x13,0x8d,0x53,0x26,0xab,0x60,0x11,0xca,0x7c,0xa1,0xc2,0x55,0x93,0xba,
+ 0xc5,0xfe,0x99,0xce,0xb1,0xd5,0xab,0xc5,0x53,0x4f,0x5c,0xfa,0xd4,0x5f,
+ 0xbd,0xb6,0xbe,0x0c,0x67,0xc9,0xd9,0xce,0xb0,0x5f,0x02,0xf0,0xae,0x88,
+ 0xed,0x60,0xb6,0xa5,0x04,0x51,0x1a,0xc1,0x06,0x14,0xa0,0x52,0xc7,0x61,
+ 0xe6,0xb3,0xe1,0xa0,0xfe,0xdb,0x4f,0x7d,0xc7,0x64,0x4b,0xef,0xfe,0xf5,
+ 0xe3,0x53,0xf9,0xd1,0xb2,0xb9,0xc8,0x2e,0x28,0x2a,0x25,0x32,0xd6,0x75,
+ 0x3a,0x1d,0xa0,0x12,0x91,0x94,0xd4,0x93,0x0f,0x8d,0x8e,0x23,0x46,0xc1,
+ 0x04,0x61,0xa6,0x11,0xb9,0x4c,0x95,0x89,0x46,0x27,0x78,0x2b,0xfd,0xd8,
+ 0x56,0x67,0x91,0xe2,0xd6,0x6a,0x23,0xbe,0x49,0xdc,0xd6,0x22,0x97,0x23,
+ 0x78,0x4b,0x95,0xac,0xf5,0x45,0x41,0x13,0x59,0x9d,0xc7,0x25,0x6f,0xdc,
+ 0xf4,0xc7,0xba,0x42,0xbf,0xd7,0x10,0x99,0x76,0xde,0xd7,0x22,0x0d,0x75,
+ 0x5d,0xa5,0x94,0x7a,0x1b,0x65,0x35,0x34,0xdd,0xec,0x70,0xb9,0x31,0xf7,
+ 0xad,0xaf,0x9d,0xff,0xf3,0x3f,0x7d,0x7e,0xed,0x3a,0x1c,0x15,0xac,0x33,
+ 0xc3,0x7e,0x24,0xd8,0x6e,0x67,0x9a,0xc9,0xa5,0x4d,0x4c,0x85,0x12,0x90,
+ 0x26,0x88,0x41,0x89,0x10,0x52,0x4a,0x4c,0x76,0x75,0x09,0x7f,0xf5,0xf1,
+ 0x9f,0x7c,0xf3,0x6b,0x3f,0x76,0x38,0x36,0x3f,0x7d,0xba,0xad,0xda,0x9b,
+ 0x6a,0x10,0x9a,0xd2,0x58,0xed,0x74,0xf2,0x4e,0x96,0x67,0x36,0x63,0xf8,
+ 0xde,0x5a,0xd9,0x34,0x9b,0xec,0x9f,0xf6,0x23,0x77,0x2a,0x44,0x60,0x26,
+ 0xa7,0x4a,0x20,0x14,0x05,0xac,0x63,0xdd,0x3c,0xd3,0x49,0xc6,0x54,0x37,
+ 0x9e,0x68,0x9c,0x7f,0x56,0x9d,0xd5,0xbe,0x33,0x25,0x52,0x21,0x55,0xc9,
+ 0x73,0x3f,0x35,0x5d,0x80,0x86,0x5b,0x69,0x6b,0x34,0x62,0xd3,0x71,0x19,
+ 0x81,0xe1,0x00,0x2b,0xcb,0xbd,0xc3,0xa7,0xb2,0x56,0xd9,0xa4,0xaa,0xa2,
+ 0xd1,0x79,0x1a,0xf4,0x9b,0xc2,0xce,0x2f,0xec,0x3a,0xb3,0x7a,0x3d,0xff,
+ 0xc2,0x67,0x9f,0xfe,0xe2,0xdf,0x9e,0xdf,0x58,0x84,0xa1,0x1c,0xd2,0xa9,
+ 0x43,0x0d,0x58,0xe7,0x10,0x42,0x68,0x42,0xd8,0x3a,0xb6,0x95,0xc7,0x6e,
+ 0xb5,0x79,0xf0,0xc6,0x98,0xc8,0xbb,0x42,0xa9,0xdf,0x5f,0xd7,0xcf,0x7e,
+ 0xea,0x35,0x55,0x7e,0xec,0xdf,0xbf,0x29,0x2f,0x36,0xbc,0x35,0xd5,0x70,
+ 0x58,0x0e,0x6b,0xc9,0x88,0xc8,0x40,0x00,0xf5,0x0e,0xee,0xda,0xd5,0xb5,
+ 0x41,0x7f,0x93,0x49,0xcd,0x00,0x49,0x82,0xb6,0x4d,0x18,0x19,0x91,0x1a,
+ 0x84,0x99,0x59,0xeb,0xbd,0x4d,0x29,0x8d,0x03,0x2e,0xbd,0x0e,0xd2,0xc7,
+ 0x3b,0xe1,0x33,0xa3,0x46,0xda,0x18,0x63,0x8c,0x4d,0x49,0x45,0x24,0x2f,
+ 0xfc,0xd4,0xb4,0xdf,0x86,0xea,0x6f,0xe9,0x1a,0x5a,0x3d,0x49,0xd6,0x0c,
+ 0xb1,0xbc,0xd4,0x97,0x64,0x88,0x1c,0x11,0x89,0x46,0x91,0x60,0x9d,0x3a,
+ 0xe7,0x3b,0xd9,0xc1,0xfe,0xea,0xec,0x3f,0x7c,0xf9,0xfc,0xdf,0x7d,0xf2,
+ 0xfc,0xea,0x55,0x78,0x5f,0x40,0x8d,0x68,0x2b,0x18,0x83,0x08,0x9a,0xd0,
+ 0x00,0x89,0xa9,0x4d,0x13,0x2d,0xc2,0x69,0xb6,0xf7,0x1b,0x42,0xd0,0x26,
+ 0x44,0xd2,0x4e,0x66,0xb0,0x78,0x19,0x9f,0xf9,0xeb,0x57,0xff,0xfe,0xd3,
+ 0xcf,0x6c,0x2c,0x66,0x46,0xf6,0x14,0xd9,0x02,0xc1,0xc7,0xa6,0x4e,0x61,
+ 0x18,0x9a,0x41,0x68,0x2a,0x82,0xbf,0x7a,0x65,0x35,0x94,0xf0,0xce,0x11,
+ 0x98,0xda,0x39,0xa6,0x08,0xc0,0xcc,0x23,0x65,0x0c,0x18,0x33,0xb3,0x45,
+ 0x9e,0xfb,0x18,0x9b,0xb1,0xec,0x31,0x8e,0x3c,0x4b,0x69,0x0c,0x4f,0xf2,
+ 0xcf,0x46,0x4a,0x45,0xc0,0x6c,0x98,0xad,0xaa,0x8a,0x44,0xeb,0x34,0xcb,
+ 0x37,0x87,0x40,0x0c,0xd8,0x76,0x04,0xb2,0xa5,0x94,0x63,0x0b,0x45,0x7f,
+ 0x23,0x69,0xca,0x99,0x32,0x22,0x56,0x4d,0x8a,0x54,0xd7,0x75,0xa7,0x98,
+ 0x0b,0xd5,0xf4,0x37,0xbe,0xf2,0xe2,0xa7,0x3e,0xf1,0x4c,0x7f,0x11,0xce,
+ 0x4d,0x35,0x35,0x11,0x2b,0x71,0x70,0x8e,0x40,0x31,0xa6,0xc6,0xb0,0xf1,
+ 0xde,0xb6,0x4d,0xd2,0x98,0xc0,0xc5,0x23,0x63,0x69,0xab,0xd4,0xc8,0x00,
+ 0x65,0xd8,0x18,0xb8,0xae,0xac,0x01,0x06,0xeb,0xf8,0xb3,0x3f,0x79,0xf5,
+ 0xc7,0xcf,0xf6,0x57,0xaf,0xe7,0x24,0xbb,0xbd,0x9d,0xf7,0xae,0xeb,0x9c,
+ 0xcb,0x72,0x93,0x65,0x19,0x24,0x5b,0x5f,0x6d,0x20,0x30,0x5c,0x6c,0xe6,
+ 0x23,0xd5,0xd4,0xa6,0x17,0x6e,0x1b,0x7f,0x8b,0xa2,0x0b,0xeb,0x54,0xb6,
+ 0x0e,0x7b,0x19,0xe9,0x6b,0x77,0xf2,0x21,0xde,0x3e,0x43,0xdd,0xba,0x39,
+ 0xe7,0xaa,0xaa,0x52,0x55,0xef,0xbd,0x75,0xd4,0x1f,0xac,0xdc,0x75,0xef,
+ 0x91,0xf6,0x42,0x14,0x06,0x30,0xde,0x15,0x10,0x03,0xe1,0xa2,0x28,0x88,
+ 0x88,0xc9,0x40,0xf1,0xc4,0xb7,0xcf,0xae,0x2e,0x37,0x53,0x9d,0x7d,0x90,
+ 0xac,0xed,0x01,0x9c,0xcd,0x19,0x53,0x5f,0xfc,0xdc,0x3f,0xfd,0xd7,0x3f,
+ 0x7d,0x61,0xf5,0x32,0x98,0x77,0x59,0x9a,0x43,0xa2,0x18,0x2a,0x50,0xd9,
+ 0xc4,0x0d,0xd5,0xda,0x30,0x1b,0x4b,0x21,0x04,0x66,0x56,0xa4,0x4e,0xd1,
+ 0xb1,0xc6,0x2b,0xd8,0x70,0xa1,0xc2,0x9a,0x60,0x0d,0xd5,0x75,0x20,0x1a,
+ 0xb5,0x2c,0x8c,0x4c,0x53,0xd6,0x94,0x40,0xc4,0xff,0xf5,0xbf,0xbf,0xfc,
+ 0xe4,0x37,0xaf,0xce,0x17,0xa7,0x33,0x5e,0xa8,0xfa,0xf0,0x36,0xaf,0xab,
+ 0x60,0x38,0x43,0xcc,0x9e,0x7a,0x62,0x99,0x14,0x29,0xb4,0x09,0x49,0x08,
+ 0x62,0x18,0xd6,0xd8,0x18,0x63,0x8c,0x0d,0x08,0x22,0xb8,0xe7,0xde,0x13,
+ 0xc3,0x72,0xdd,0x67,0x66,0x8b,0xe2,0x30,0x1a,0x9d,0xf0,0xad,0x20,0x9a,
+ 0xed,0x1d,0xa3,0x52,0x2b,0x3b,0x6a,0x31,0x33,0x22,0x15,0x69,0xc0,0xd5,
+ 0xec,0x3c,0x67,0x53,0xa3,0x21,0x9c,0x42,0x43,0x48,0x80,0x21,0x6e,0x89,
+ 0x51,0xd4,0x94,0x35,0x14,0xd7,0xaf,0x62,0x65,0xa9,0x31,0x98,0x0f,0xb5,
+ 0x27,0xb8,0x2c,0xcb,0xea,0x2a,0xbd,0xf8,0xc2,0xd9,0xef,0x3e,0xd1,0x1b,
+ 0xae,0x01,0xc6,0x4a,0x83,0x72,0x38,0x04,0x28,0xef,0x64,0x0a,0x61,0x03,
+ 0xe7,0xad,0x75,0xdc,0x34,0x51,0x95,0x44,0x64,0x66,0x26,0x1b,0x94,0x8b,
+ 0x21,0xf5,0xf3,0xcc,0x31,0xb7,0x64,0x49,0x17,0x1a,0x33,0xae,0xad,0x37,
+ 0xdf,0x27,0x43,0x7d,0x8b,0xfa,0xfc,0xcd,0x5f,0x5c,0xf9,0xab,0x8f,0xff,
+ 0x43,0x2c,0xe7,0xe7,0x67,0x4e,0x84,0xaa,0xc3,0x98,0x4a,0xc1,0xfd,0xf4,
+ 0xa5,0xab,0x1b,0x6b,0x50,0xc1,0x08,0xde,0x23,0xd9,0x1c,0x2c,0x88,0x8a,
+ 0x75,0x04,0x42,0x31,0x8d,0x5d,0x0b,0xde,0xfa,0x94,0xa4,0x06,0x6d,0xca,
+ 0x3c,0x70,0x93,0xb4,0xfb,0x96,0x4d,0xd0,0xa8,0xf2,0x52,0x55,0x63,0x58,
+ 0x24,0xb2,0x11,0xd1,0x5a,0x31,0xdc,0x77,0xa0,0x7b,0xe8,0x08,0x40,0x70,
+ 0xde,0x00,0x22,0x10,0x66,0x67,0x4d,0x16,0x42,0x90,0x94,0x00,0xb0,0x45,
+ 0x6f,0x19,0x2f,0xbf,0xb8,0x1c,0xca,0x69,0xd2,0xd9,0x96,0x02,0x63,0x6d,
+ 0x76,0xfc,0xd8,0xc9,0x87,0x1f,0x29,0xe6,0xf6,0x02,0x1a,0x4d,0x26,0x79,
+ 0xc7,0x01,0x5a,0x0d,0x6b,0x15,0x78,0xe7,0x88,0xa8,0xa9,0x23,0x60,0x2c,
+ 0x77,0xbd,0xf7,0x1b,0xfd,0xb5,0xb9,0xdd,0xd2,0x9d,0x89,0x55,0xd3,0x4f,
+ 0x52,0x39,0x9b,0x01,0x9e,0x90,0x43,0xdd,0x98,0xc5,0x1c,0xb6,0xc4,0x27,
+ 0x0a,0x6d,0xd0,0x5f,0xc4,0x27,0xff,0xe2,0xca,0xd7,0xbe,0xf0,0x0c,0xe2,
+ 0x3e,0x47,0x07,0x53,0x39,0x9d,0xf3,0xfe,0x1f,0x7c,0xef,0xa7,0x6b,0x4b,
+ 0xad,0x6d,0x95,0x90,0x18,0x4a,0x34,0x32,0x16,0xa0,0xcc,0x02,0xc6,0x81,
+ 0x43,0x38,0x70,0x68,0x8a,0xb8,0xd2,0x1b,0xf8,0xcb,0x3a,0x56,0xc0,0xec,
+ 0xec,0x59,0x37,0x55,0x16,0x63,0xcf,0x12,0x36,0x2a,0x5a,0x29,0x0d,0x77,
+ 0xef,0x75,0xa7,0x4e,0x13,0x08,0xc4,0xd1,0x32,0x01,0xa2,0x4a,0x31,0x4a,
+ 0x68,0xe2,0x38,0x72,0x73,0x08,0x7e,0xf8,0xfd,0xd7,0xae,0x5c,0x6c,0xa6,
+ 0x8b,0x23,0x12,0x7d,0xd3,0x34,0x21,0x84,0xdd,0x7b,0xa6,0x1f,0xff,0xf7,
+ 0xbf,0xfa,0xef,0x3e,0x72,0x22,0x9f,0x43,0x92,0x35,0x76,0x7d,0x50,0x09,
+ 0x12,0x6b,0x73,0x11,0x6e,0xea,0x40,0x44,0x79,0xe6,0x44,0xeb,0x26,0x56,
+ 0xd3,0xbb,0xf0,0xbb,0xbf,0xff,0xf6,0x8f,0xfd,0xc7,0x77,0xef,0x39,0x80,
+ 0x84,0x24,0xe8,0x3b,0x4b,0x4c,0x66,0xab,0xa4,0x18,0xe5,0xe0,0x38,0xca,
+ 0x1b,0xc9,0x77,0x8a,0x7c,0xb0,0x82,0xcf,0x7e,0x72,0xf1,0x4b,0x7f,0xf7,
+ 0x5c,0xdd,0x5b,0x38,0xb4,0xf7,0xa1,0xfe,0x5a,0xf1,0xcc,0x3f,0x0f,0x24,
+ 0x8c,0x74,0xc7,0x40,0x04,0xb5,0x93,0x2d,0x88,0x08,0x91,0x8a,0x06,0x10,
+ 0x4e,0xdc,0x81,0xdd,0x7b,0xb3,0x3a,0xac,0x59,0xb7,0x59,0x88,0xf2,0x18,
+ 0x30,0xbc,0x11,0x0d,0xdd,0xa4,0xa1,0xeb,0x4d,0xb8,0x17,0x6f,0xc2,0xcf,
+ 0xaa,0x81,0x4c,0x23,0x18,0x64,0x9d,0x70,0xfa,0xee,0x83,0x20,0x34,0x61,
+ 0x48,0x1c,0x0d,0x61,0xc4,0x48,0x07,0x88,0x19,0x90,0x18,0x80,0x84,0xe7,
+ 0x7e,0xd4,0xbc,0xf0,0xf4,0x92,0xa5,0xbd,0x86,0x3b,0x92,0x00,0xe8,0xe5,
+ 0xab,0x67,0xc9,0xad,0x3c,0xfe,0xdb,0x6f,0xf9,0xe8,0x1f,0x9e,0xa0,0x2e,
+ 0x86,0xd5,0x80,0x73,0x31,0x96,0x99,0x7c,0x53,0x09,0xd4,0x16,0x1d,0xd7,
+ 0xc4,0xbe,0x50,0xd3,0x99,0xc1,0x1f,0xfc,0xd1,0x99,0xf7,0x3e,0x76,0xf8,
+ 0x23,0x1f,0x7b,0xd3,0xef,0x7c,0xec,0x9e,0xa9,0x79,0x24,0x80,0xcc,0x30,
+ 0x69,0xb5,0x55,0x5e,0xb7,0x2d,0xc4,0xf8,0xa8,0xb1,0xc6,0x0f,0x37,0x22,
+ 0x14,0xeb,0x8b,0xf8,0xf8,0xff,0x7d,0xfe,0xc9,0x6f,0x5e,0x37,0xe1,0x8e,
+ 0xef,0x7f,0xe7,0xf2,0xe5,0xf3,0x80,0xb4,0xda,0x82,0xc4,0x48,0xa4,0x81,
+ 0xc5,0x02,0x1c,0x53,0xf2,0xde,0x86,0x28,0x60,0x9c,0xb9,0x7b,0x8f,0xf5,
+ 0x55,0x59,0xaf,0x39,0xb7,0x3d,0x43,0xa9,0xdd,0x31,0x67,0x99,0x0f,0xff,
+ 0x71,0xb6,0x35,0xe3,0x1c,0x01,0x9b,0xed,0xa9,0x47,0xed,0xf1,0x4f,0x2c,
+ 0x40,0x03,0x08,0x21,0xb7,0x98,0x7b,0xea,0x89,0x2b,0x65,0x0f,0x2a,0xd1,
+ 0x5a,0xd7,0xd2,0x66,0x8c,0x61,0x9f,0xb9,0x18,0xa3,0x26,0x65,0x9f,0x4b,
+ 0x13,0x6c,0x1e,0x8f,0x1e,0xdf,0x33,0x35,0x17,0xc8,0x0e,0x55,0x93,0xcf,
+ 0x4c,0x55,0x0e,0xe7,0xe6,0xa7,0x4f,0x9f,0x39,0x51,0x14,0xbd,0xab,0x57,
+ 0x37,0x7a,0x6b,0x30,0xa4,0xa1,0x51,0x28,0xfb,0xcc,0x37,0xcd,0x40,0x08,
+ 0x87,0x8e,0xe1,0xc3,0xbf,0x77,0xe6,0x5d,0xef,0xdb,0x5b,0xcc,0xac,0x5a,
+ 0x3f,0xdc,0xbb,0x7f,0x66,0x7a,0x5a,0xcf,0xbf,0xb6,0xda,0xdb,0x50,0xc3,
+ 0x32,0x71,0xb4,0xdf,0x20,0x56,0x61,0x55,0x18,0x47,0x4c,0x12,0x2b,0x5c,
+ 0xbf,0xba,0x76,0xed,0xca,0xf2,0x53,0xdf,0xfb,0xf1,0x95,0x0b,0x09,0x02,
+ 0xc3,0x20,0x16,0xb4,0x10,0x26,0x8c,0x82,0x09,0x70,0x9e,0x42,0x4a,0xfb,
+ 0x0f,0xe3,0x43,0xbf,0x7b,0xe7,0xd4,0x5c,0x39,0xac,0x16,0x8b,0x8e,0x8d,
+ 0x6d,0xeb,0x48,0x02,0x18,0x68,0x06,0xb0,0x52,0x0b,0x47,0xe8,0xe4,0x44,
+ 0xda,0x4d,0x38,0x94,0x1b,0xfd,0x01,0x29,0x93,0x69,0x85,0x0c,0x22,0xb5,
+ 0xf3,0x29,0xa5,0xd8,0x54,0xd8,0x3d,0x7b,0xe2,0xfc,0xd9,0xeb,0x57,0x2e,
+ 0x36,0x29,0xc1,0x39,0x17,0xa3,0x12,0x19,0x6b,0x39,0xa6,0x46,0xa1,0x50,
+ 0x26,0xd3,0xd1,0x54,0xf7,0xcb,0x41,0xc2,0xd2,0x99,0xfb,0xe6,0x7d,0x51,
+ 0xd5,0xcd,0x70,0x6a,0xba,0xd3,0xd4,0x83,0xf5,0xf5,0x65,0xe7,0x70,0xe2,
+ 0xc4,0xf1,0x6e,0x41,0xcf,0x3f,0xbf,0xd2,0x0c,0x01,0x49,0xd6,0x16,0xa0,
+ 0x94,0x34,0x1e,0x3e,0x81,0xdf,0xfe,0xbd,0xfb,0x7f,0xfd,0xb7,0x4e,0xd6,
+ 0x78,0x31,0xd1,0xa5,0x95,0xf5,0xd7,0xf2,0x82,0xcf,0x9c,0xb9,0xdb,0x59,
+ 0x79,0xed,0xd5,0x95,0xa6,0x86,0x6a,0x1a,0x53,0xa8,0xc6,0x39,0x45,0x2d,
+ 0x88,0x54,0xa2,0x2b,0x32,0x09,0x90,0xc6,0x18,0x9a,0x5d,0x5d,0x2e,0x5f,
+ 0x78,0xee,0xca,0xea,0x72,0x42,0x20,0x26,0x9f,0x24,0x81,0x94,0x09,0xa2,
+ 0x00,0x1c,0xc1,0x19,0xa6,0x84,0xca,0x58,0x3c,0xfc,0xf6,0xb9,0xf7,0xfd,
+ 0xe6,0x9d,0x83,0xfa,0xbc,0xcb,0x12,0x28,0x8a,0x6c,0x9e,0x03,0x0c,0xf5,
+ 0x00,0x29,0x45,0x50,0xa2,0x5b,0x17,0xa5,0x5b,0x05,0xc4,0x18,0xe1,0x27,
+ 0x11,0x61,0xb6,0xaa,0x54,0x56,0x1b,0x33,0x73,0xf6,0xde,0xfb,0x0f,0x4f,
+ 0xcf,0x01,0x04,0x6a,0x8f,0x58,0x25,0xd1,0x98,0x52,0x95,0xe7,0xb6,0x15,
+ 0x3c,0x75,0xa7,0x16,0xd6,0xaf,0xe3,0x3b,0xdf,0x58,0xad,0x37,0x66,0xa8,
+ 0xd9,0xbd,0x77,0xcf,0xb1,0xa5,0xa5,0x25,0x36,0x61,0xf7,0x5e,0xb7,0xda,
+ 0xfb,0xa9,0xc9,0xaf,0xbf,0xf7,0xb1,0x7b,0x3e,0xf2,0xd1,0xc3,0xdc,0x01,
+ 0x2c,0xc4,0xf6,0x83,0x56,0xae,0x8b,0xf7,0xff,0xd6,0xf1,0x5f,0x7b,0xec,
+ 0x64,0x29,0x3f,0xf5,0x9d,0xda,0xf8,0xe0,0x8a,0x6a,0x18,0x2e,0xd9,0xee,
+ 0xd2,0x6f,0xfe,0xf6,0x03,0x8f,0xff,0xce,0x9d,0x81,0xa0,0x06,0xca,0xa2,
+ 0x04,0x05,0x43,0xad,0x8e,0xb3,0x2d,0x1b,0x0a,0xe5,0x90,0x88,0x00,0x97,
+ 0x84,0xf2,0x6c,0x17,0x83,0x63,0x03,0x82,0x6f,0xd9,0x42,0x29,0x61,0x3c,
+ 0x41,0x15,0x66,0x36,0xce,0xc7,0x04,0x5b,0xe0,0xd8,0x1d,0x73,0x73,0xbb,
+ 0xf2,0x41,0xdd,0x2b,0x8a,0xa2,0x0e,0x6d,0x80,0xc7,0xf1,0x54,0x25,0x4e,
+ 0xb4,0xd3,0x93,0x61,0xf8,0x9f,0xf3,0x2d,0xa6,0x11,0xb5,0xcd,0x91,0x02,
+ 0xa2,0x63,0x1a,0x1c,0xb3,0x11,0x21,0xe6,0x2c,0xcb,0x8a,0x72,0x58,0x1f,
+ 0x3b,0x72,0xe7,0x77,0xfe,0xf1,0xa5,0xb5,0x15,0xe4,0xce,0x37,0x8d,0x35,
+ 0x70,0x22,0x25,0x48,0x62,0x8c,0x3e,0xe3,0x14,0xa8,0xa9,0x1b,0xe6,0x34,
+ 0xec,0xeb,0xb5,0x2b,0xe7,0xee,0xbf,0xff,0x01,0xa5,0xca,0xf8,0x86,0x4c,
+ 0x0a,0xd2,0x67,0x57,0x57,0x4d,0x5f,0x90,0x1e,0x78,0xe0,0x3e,0xe7,0x06,
+ 0x97,0xae,0x6d,0x0c,0x07,0xd8,0x73,0x04,0x7f,0xf8,0x3f,0xdf,0xf1,0xce,
+ 0xf7,0x1d,0xa1,0xce,0x79,0x31,0x2b,0x62,0x4c,0x10,0x4b,0xce,0x90,0xa3,
+ 0x32,0x6e,0xc0,0xc5,0xbd,0xfb,0x67,0xef,0xbc,0x6b,0xf6,0xbb,0xdf,0xb9,
+ 0x3e,0xae,0x19,0x3d,0xc8,0xa8,0x8a,0x52,0x68,0xdf,0x27,0x01,0xaa,0x42,
+ 0x10,0x42,0x4c,0xa9,0x04,0x12,0x01,0x02,0x95,0x51,0x37,0x36,0xde,0x0e,
+ 0x04,0x24,0x95,0xa8,0x0a,0x8e,0x0f,0xbe,0x93,0x3f,0xf0,0xf8,0x5d,0xd9,
+ 0x74,0x8f,0x6c,0x35,0x18,0xd4,0xd6,0xe5,0x3a,0x3a,0x3a,0x6a,0x50,0x1c,
+ 0xf3,0x3e,0x0c,0xc1,0x6c,0xf2,0x96,0x36,0x89,0x21,0xb4,0xa5,0x9b,0xd8,
+ 0x6a,0x31,0x26,0xc5,0x44,0xed,0xf0,0x43,0x09,0x66,0xaa,0x33,0x57,0x0e,
+ 0xd6,0x5f,0xfe,0x71,0x39,0xe8,0x05,0xcb,0x85,0xaa,0x51,0xd4,0xad,0x3f,
+ 0x3a,0xc7,0x12,0x0c,0x93,0x75,0xd6,0xa5,0x58,0x97,0x43,0xf4,0x7b,0xcb,
+ 0x6f,0x7d,0xe4,0xfe,0x90,0x2a,0x45,0xf2,0x99,0x71,0x99,0x8a,0xd6,0x49,
+ 0xea,0x28,0xe1,0xd4,0x1d,0xa7,0xa2,0x5e,0xa3,0xac,0x79,0xdb,0xbb,0xa6,
+ 0x1f,0xfd,0x95,0x53,0xbb,0xf6,0xa7,0x5a,0x2e,0x57,0x61,0x3d,0x46,0x1b,
+ 0x82,0x2a,0x62,0x4c,0x75,0xd2,0xca,0x67,0x28,0xba,0x59,0x77,0xaa,0x7b,
+ 0xe0,0x40,0x7e,0xf6,0xd5,0x95,0x7a,0x88,0xe9,0xb9,0xa2,0xae,0x2a,0x90,
+ 0xe6,0x53,0x79,0x0c,0xb1,0x85,0x48,0xc6,0x53,0xac,0x34,0x8e,0x0c,0x72,
+ 0xce,0x32,0xb7,0xdd,0xd4,0x28,0x01,0xb7,0x0d,0xb9,0x2b,0x58,0x6c,0x7a,
+ 0xf7,0x07,0x66,0xde,0xfa,0x8e,0x85,0x32,0x5c,0x6a,0x42,0xaf,0xdb,0x9d,
+ 0x11,0xd1,0x31,0xa3,0x6f,0x33,0x7d,0x8f,0x09,0x45,0x5b,0x13,0xd2,0x37,
+ 0x2c,0x74,0x32,0xde,0x64,0xfb,0xf7,0x1e,0x79,0xe1,0xd9,0x73,0x8b,0xd7,
+ 0xe1,0x6d,0xa6,0xe2,0x74,0x64,0x56,0x31,0x26,0x53,0x61,0x55,0xb2,0xc6,
+ 0xc5,0x54,0x57,0xa5,0xbe,0x76,0xbe,0xb2,0x76,0xb8,0xb0,0xe7,0xe0,0x91,
+ 0x43,0xc7,0xca,0xe1,0x60,0x65,0xf9,0x5a,0x96,0x51,0xb7,0xe3,0x62,0x1c,
+ 0xec,0xdb,0x37,0x37,0x3b,0xeb,0xee,0xbc,0x73,0xe6,0xee,0x7b,0x8e,0xec,
+ 0xda,0x63,0x9a,0x66,0xa5,0xaa,0xd6,0x45,0x35,0xcb,0x0a,0x66,0x58,0x4b,
+ 0xc6,0x50,0x8a,0x8d,0x26,0x58,0x6b,0x8b,0xa2,0x78,0xe0,0xfe,0xfb,0x9a,
+ 0xb0,0xf8,0x93,0x97,0xfa,0x65,0xbf,0x69,0xeb,0xec,0xd1,0x26,0x8d,0x5b,
+ 0x30,0xfd,0x53,0x4a,0xe3,0xcd,0x1b,0x23,0xf2,0x00,0x11,0x19,0xa7,0x31,
+ 0xa5,0xfb,0x1f,0xc6,0x6f,0x7c,0xe8,0x8e,0x7d,0x87,0x53,0xaf,0x7c,0x0d,
+ 0x5c,0x79,0x97,0xa5,0xa4,0xe3,0x19,0x28,0x8d,0xf5,0xc2,0x34,0xb2,0xfe,
+ 0xf6,0x04,0xff,0x46,0x8c,0xa5,0x54,0x55,0x83,0x3d,0xbb,0xf6,0x6f,0xac,
+ 0x97,0x67,0x5f,0xee,0x95,0x83,0x9a,0x60,0x89,0x58,0x37,0xc5,0x5b,0x42,
+ 0x02,0x55,0x51,0x63,0x8c,0x48,0x90,0x84,0x67,0x9f,0xd9,0xe8,0x76,0x71,
+ 0xe8,0xe0,0xd1,0xa2,0xe8,0x88,0xd6,0x40,0x02,0x35,0x49,0xea,0xd5,0xd5,
+ 0xc5,0xb9,0x5d,0xc5,0xbe,0x03,0xb3,0xc6,0xd7,0xc3,0x6a,0x29,0xca,0xd0,
+ 0x18,0x01,0xab,0x77,0x0e,0x94,0xac,0x63,0xef,0x5b,0xba,0x61,0xdd,0x84,
+ 0x4a,0x11,0x24,0x35,0x27,0x4f,0x1d,0xe9,0x76,0x86,0xaf,0x5d,0xe8,0x57,
+ 0x25,0xac,0x83,0x04,0x03,0xf5,0x44,0xfa,0xfa,0x63,0x64,0x22,0x6a,0x19,
+ 0x1b,0xaa,0x2a,0x04,0x78,0x7c,0xe4,0xf7,0x8f,0x3d,0xf8,0xe8,0xee,0x41,
+ 0x7d,0x8e,0xec,0xc0,0x79,0xaa,0xaa,0xc4,0xe4,0xda,0x51,0xc3,0x44,0xbd,
+ 0xa9,0xdb,0xc4,0x50,0xb7,0xe5,0x59,0x12,0xe3,0x90,0x08,0x0b,0xbb,0x8f,
+ 0x2d,0x5d,0xbf,0x7a,0xee,0x95,0xa8,0x12,0x5a,0x21,0x0e,0xa3,0xa5,0xcd,
+ 0x25,0x1d,0xe5,0x11,0xf6,0x3e,0x77,0xd6,0xc6,0x26,0xbc,0x7a,0x6e,0x7d,
+ 0x7d,0x7d,0xf5,0xc8,0xe1,0x63,0x27,0x4e,0x1e,0x57,0xc4,0xfe,0x60,0x83,
+ 0x38,0x25,0xa9,0x9c,0x4f,0xa2,0xfd,0x26,0xae,0xb3,0x6d,0xa6,0x67,0x9c,
+ 0xcf,0x38,0xa6,0x20,0x5a,0xd7,0xa1,0x4c,0xa1,0xb1,0xd6,0x38,0xe7,0x00,
+ 0x81,0x44,0x6b,0x52,0x39,0x5c,0x9f,0x9e,0xc9,0xce,0x9c,0x39,0xe3,0x7d,
+ 0xf5,0xfc,0xd3,0xeb,0x61,0x08,0x67,0xa6,0x54,0xfc,0x78,0xe2,0x7b,0xd3,
+ 0x24,0xc6,0xda,0xb6,0xae,0x36,0xc6,0x8c,0xfb,0x64,0xc0,0xe0,0x1d,0xef,
+ 0xc7,0x7b,0x1f,0x3b,0x3c,0xb7,0x50,0x6d,0x0c,0xce,0xfb,0x0c,0xc6,0xd8,
+ 0x50,0xb3,0xe1,0xac,0xc5,0xdf,0x46,0x92,0x74,0xa2,0x09,0x5e,0xdf,0x6d,
+ 0xeb,0x0d,0x49,0xf2,0x1c,0x55,0x55,0x1d,0xdc,0x7f,0xbc,0xae,0xf0,0xd2,
+ 0x4f,0x96,0x86,0x03,0x55,0x6d,0x18,0xce,0x18,0x83,0x16,0xc2,0x42,0x6a,
+ 0x91,0xdb,0x94,0x34,0xc6,0x54,0x74,0x67,0xca,0x5e,0x75,0xee,0xb5,0xc1,
+ 0xca,0xca,0x25,0xe7,0xdc,0x9e,0x3d,0x7b,0x67,0x67,0xe7,0xac,0xb5,0xc6,
+ 0x72,0x4c,0x31,0xc4,0x9a,0x59,0x8c,0x45,0x92,0x90,0x52,0xb2,0x86,0xc0,
+ 0x9a,0x24,0x35,0x75,0x90,0x04,0x6b,0x9c,0xaa,0xa8,0x04,0x63,0x91,0x65,
+ 0x5c,0x95,0xa5,0x2a,0x1d,0x3c,0x70,0x7c,0xef,0xae,0x99,0x2b,0x97,0xaf,
+ 0xaf,0x2d,0x37,0xce,0xe5,0x22,0xcd,0x8e,0xc6,0x1a,0x6b,0x38,0xe1,0x9c,
+ 0x6b,0x87,0x60,0x59,0x96,0xcd,0xee,0x4e,0xff,0xe5,0x7f,0x7d,0xcf,0xec,
+ 0xc2,0x20,0xe9,0x2a,0xdb,0x20,0x2a,0x2a,0xd6,0xbb,0x29,0xdd,0xd4,0x9a,
+ 0x6e,0xae,0x2e,0xa3,0x4d,0xe0,0x41,0x6f,0xdf,0xb3,0xac,0xd1,0x14,0xc5,
+ 0xfb,0x6c,0x66,0x66,0x56,0xd2,0xe0,0xca,0x95,0xb2,0x1c,0x82,0x59,0x52,
+ 0x02,0x93,0x05,0x25,0x22,0x25,0x12,0x20,0xb5,0x40,0x5a,0x8c,0x6a,0x9c,
+ 0x95,0x3a,0x5e,0x3c,0x17,0xce,0x9e,0xbd,0x1c,0xea,0x98,0xbb,0x59,0x46,
+ 0x87,0x34,0x27,0xf5,0xce,0x66,0x86,0x39,0x84,0xa6,0x1c,0x96,0x92,0xa2,
+ 0x75,0x96,0x0c,0x39,0x9b,0xa9,0x90,0x2a,0x1c,0x1b,0x15,0x49,0xb1,0xb1,
+ 0xc6,0xa4,0x18,0x99,0x6d,0xac,0xe4,0xf0,0x81,0x53,0xf7,0xdd,0xfd,0xf0,
+ 0xf2,0x62,0xff,0xb9,0x67,0x2f,0x3b,0xa3,0x49,0xc2,0x2d,0xc8,0x78,0x3a,
+ 0x39,0x5a,0x27,0xa2,0x4e,0xa7,0x33,0xbb,0x3b,0xfd,0xc6,0x87,0xee,0x33,
+ 0xf9,0x46,0x92,0x7a,0xd4,0xa5,0xab,0xb1,0x36,0x4f,0x51,0x88,0x30,0x3e,
+ 0x1f,0x74,0x9c,0xe3,0x6f,0xa4,0xb8,0xbf,0x61,0x25,0x6b,0x55,0x56,0xde,
+ 0xf9,0xc1,0xa0,0x3c,0x7c,0xf8,0xf0,0xec,0xec,0xec,0x73,0xcf,0x5d,0x58,
+ 0xbc,0x0e,0x26,0x95,0x24,0x44,0xed,0xc4,0x3f,0x1a,0x03,0xeb,0xc8,0x58,
+ 0x58,0x6b,0x53,0x4c,0x2a,0x02,0xa6,0x2c,0xc7,0xea,0x75,0x3c,0xf3,0xc3,
+ 0xf5,0xcb,0x97,0x2f,0x4c,0x77,0xf7,0xec,0x5b,0x38,0x96,0xb9,0x69,0x6b,
+ 0xf2,0x14,0x89,0xe0,0x8a,0x7c,0xd6,0x98,0xa2,0xa9,0x52,0x5d,0x37,0xce,
+ 0x17,0x86,0x73,0x26,0xef,0x4c,0x07,0xea,0x34,0x79,0x67,0x67,0xbc,0x9d,
+ 0x87,0xcc,0x74,0xb3,0xc3,0x2b,0xd7,0xf1,0xf5,0x2f,0xff,0xf0,0x9f,0x9e,
+ 0x78,0x71,0x75,0x29,0x86,0x26,0x8d,0xb1,0xef,0x1b,0x6f,0xde,0xfb,0xd4,
+ 0xb6,0xf7,0xcc,0x21,0x84,0x94,0x52,0x8c,0xd1,0xf8,0x78,0xf4,0xe4,0xd4,
+ 0x81,0x43,0x7b,0x98,0x68,0x38,0xac,0x8a,0xa2,0x60,0xe6,0xba,0xae,0x15,
+ 0xc2,0x64,0xc6,0x13,0xab,0x31,0x62,0x7e,0xd3,0xd1,0xf1,0xc6,0x34,0xd2,
+ 0xa4,0x70,0xec,0x0c,0x73,0xbf,0x37,0x64,0x74,0x67,0xba,0xc7,0xce,0xfe,
+ 0x78,0xf8,0x89,0x3f,0x7b,0xe6,0xfb,0xdf,0x05,0x02,0x5a,0xfa,0x38,0x41,
+ 0x15,0x23,0xa6,0xb4,0xf7,0x14,0xa2,0x6e,0x81,0xd9,0x6d,0x5b,0xc7,0x80,
+ 0xc1,0x9b,0xde,0x82,0x53,0xa7,0xe7,0xdf,0xf2,0xf0,0x89,0x3b,0xcf,0x1c,
+ 0x98,0x9e,0xe5,0x24,0x55,0x5d,0x97,0x01,0x83,0x88,0x15,0xe2,0xc8,0xec,
+ 0x99,0x32,0x83,0x8c,0x29,0x27,0x78,0xd2,0x3c,0xd5,0xfe,0xa5,0x17,0xaf,
+ 0x3e,0xf9,0x9d,0x97,0x9e,0xfb,0x51,0xef,0xea,0x45,0xd4,0x03,0x68,0x28,
+ 0x04,0xac,0xa8,0x9d,0xa3,0x10,0xc2,0x58,0x55,0x92,0x5a,0x0c,0x6e,0x3c,
+ 0xfb,0xb8,0x81,0x32,0x20,0x28,0xf0,0x87,0x7f,0x7c,0xfc,0xb1,0xc7,0xdf,
+ 0x4a,0x6e,0x69,0x7d,0xf8,0x53,0x97,0x95,0xd6,0x49,0x08,0xc1,0x9a,0xce,
+ 0x18,0x69,0x90,0x09,0x54,0x83,0xc7,0x68,0xc7,0xed,0x18,0x8b,0x59,0x32,
+ 0xef,0x4c,0x4c,0x65,0x68,0x52,0xee,0xe7,0x53,0xbd,0xeb,0xa9,0xef,0x2c,
+ 0x7d,0xf5,0xf3,0xe7,0x9e,0xfd,0x01,0x58,0xc1,0x28,0x88,0x0c,0xb3,0x82,
+ 0x9a,0x24,0x21,0x46,0x90,0x69,0xfd,0xda,0x8e,0x37,0x0e,0x08,0xa8,0x06,
+ 0x47,0x25,0x64,0x5d,0xec,0x5a,0xc0,0x9e,0xbd,0xd8,0xbb,0x0f,0x47,0x8f,
+ 0xef,0x3d,0x76,0xec,0xc8,0xc2,0xde,0x19,0x5b,0x34,0xc6,0x8b,0x31,0x2e,
+ 0x06,0xf4,0xd6,0xca,0x6b,0x57,0xd7,0xae,0x5e,0x59,0x5d,0x5f,0x8d,0x4f,
+ 0x7f,0x7f,0x6d,0x7d,0x05,0xab,0x8b,0xd0,0x38,0x96,0xfb,0xa3,0x0b,0x48,
+ 0xc2,0xd0,0x5a,0xb4,0xa6,0xa1,0xb1,0x20,0xac,0x75,0xa8,0x1d,0x8c,0xc5,
+ 0xa2,0x8c,0xf9,0x03,0xf8,0xcd,0x0f,0x9d,0x7a,0xec,0x43,0x6f,0x9a,0xda,
+ 0xb5,0xb6,0xb4,0xf6,0x22,0x99,0xfe,0xfc,0xfc,0x6c,0xbf,0xd7,0x6c,0xa1,
+ 0x40,0x5c,0x8f,0xab,0x53,0x40,0xfd,0x26,0x80,0xfe,0x46,0x55,0x61,0xcc,
+ 0x94,0x85,0x3a,0x19,0xcf,0xc6,0x36,0x41,0xd6,0xe6,0xe6,0xe7,0x1e,0x7e,
+ 0xfb,0xf1,0xdc,0xcf,0x5f,0xb9,0xf4,0xc3,0xde,0x0a,0x9a,0xaa,0x74,0xdc,
+ 0x55,0x45,0xd3,0x28,0xc0,0x74,0x73,0xea,0x55,0x03,0x64,0x10,0xb6,0xae,
+ 0x49,0x15,0x16,0x2f,0xe3,0xda,0x25,0x3c,0x07,0x18,0x73,0x3d,0xcb,0xae,
+ 0x7b,0x0f,0x9b,0x81,0x19,0xc6,0x40,0x15,0x4d,0x83,0x41,0x1f,0x55,0x6f,
+ 0x0b,0xef,0x25,0x05,0xc1,0x32,0x0c,0x91,0x49,0x3a,0x68,0xef,0x50,0xa5,
+ 0xcd,0xe6,0x6c,0x32,0x5b,0xed,0x94,0xc9,0x60,0x98,0x57,0x2f,0xcb,0xe7,
+ 0x3e,0x7d,0xd6,0x5a,0xfe,0xc0,0xe3,0x77,0xec,0x9e,0x3b,0xd1,0x2b,0x5f,
+ 0xdd,0xd8,0xd8,0x60,0xf6,0x40,0x84,0xda,0x2d,0xea,0xad,0xf2,0x0d,0xc2,
+ 0xb0,0x37,0x5a,0x67,0x19,0x6f,0x3b,0xa1,0x09,0xa2,0x0d,0xb3,0x2a,0x62,
+ 0x4a,0xd1,0xd9,0x7c,0xf7,0xee,0xdd,0xde,0xcb,0xc6,0xc6,0xda,0xd2,0x12,
+ 0x92,0x04,0xe7,0x28,0x46,0x05,0xc8,0xd9,0x4c,0x74,0x3c,0x59,0x6a,0xcf,
+ 0xe3,0xd1,0xa9,0x0c,0x89,0x90,0x24,0x12,0x47,0x9e,0x22,0x01,0xa1,0x42,
+ 0xd5,0xc7,0xb0,0x87,0xc1,0x2a,0x7a,0x2b,0xe8,0xaf,0xa2,0xdc,0x40,0xac,
+ 0x60,0xd9,0x79,0xdb,0x45,0xcc,0x0c,0x77,0x0c,0x15,0x96,0x33,0x1a,0x31,
+ 0x91,0x23,0x71,0xbb,0xf6,0x8e,0xda,0x14,0x6e,0x8c,0x71,0xce,0xb5,0x19,
+ 0x7d,0x67,0x93,0x11,0x81,0x32,0xe3,0x51,0xf6,0xe4,0x95,0xd7,0x56,0xa6,
+ 0x67,0xaa,0xc3,0x47,0xf6,0x58,0xdf,0x34,0xb1,0xcf,0x3c,0x52,0x15,0x8c,
+ 0xb6,0x0a,0x60,0x73,0x19,0xa3,0xb9,0xed,0x04,0xcf,0x9a,0xd8,0x59,0x2b,
+ 0x1a,0x45,0xc5,0x30,0xd5,0x75,0x15,0x42,0xd5,0xed,0x66,0xf7,0xdd,0x7f,
+ 0x9a,0xb8,0xb9,0xbe,0xb8,0xba,0xbe,0x01,0x68,0x2a,0x0a,0xc7,0xf0,0x21,
+ 0x08,0xc1,0x90,0x9a,0xb1,0x91,0x84,0x90,0x08,0x89,0xa0,0xed,0x6a,0x31,
+ 0x28,0x11,0x98,0xd5,0x31,0x2c,0xc3,0x02,0x96,0x69,0x1a,0xc8,0x01,0x0f,
+ 0x58,0x08,0x43,0xad,0xa4,0x91,0x22,0x5a,0x34,0x89,0xc6,0xa4,0x15,0xb4,
+ 0x51,0x0d,0x4c,0xca,0x96,0x5a,0x98,0x88,0x99,0xdb,0x92,0xbd,0xad,0xd7,
+ 0x43,0x08,0x3b,0x27,0x7e,0x82,0xa6,0x60,0x33,0xab,0x94,0xea,0x01,0x5e,
+ 0xbd,0xb8,0xc1,0xf6,0xc2,0xbe,0x83,0xdd,0xa9,0x69,0x9f,0xa4,0x1e,0x2d,
+ 0xeb,0xdd,0xaa,0xda,0x5b,0xfa,0x27,0xdd,0x76,0xbb,0x83,0xa6,0xaa,0xa6,
+ 0xba,0x1d,0x22,0x84,0x26,0x58,0xcb,0xc6,0x40,0x74,0x48,0xa6,0x62,0x1b,
+ 0x0e,0x1d,0xde,0xb3,0x77,0x5f,0xbe,0xbe,0xbe,0x7c,0xe5,0x32,0x42,0x93,
+ 0x08,0x4a,0xb0,0x63,0x8d,0x07,0xc6,0xbd,0x5b,0xdc,0xdc,0x52,0xd7,0xce,
+ 0x84,0x0c,0x7b,0x22,0x56,0x85,0x68,0x82,0x92,0xca,0x78,0xbe,0xae,0x13,
+ 0xa3,0x5c,0x08,0x93,0x1a,0xab,0x96,0x85,0x49,0x99,0xa4,0xbd,0x3f,0xc9,
+ 0x26,0xf2,0x36,0xca,0x56,0xed,0x7c,0x37,0xa5,0x74,0x2b,0x63,0x81,0x34,
+ 0x85,0x64,0x33,0x48,0x42,0x59,0x62,0x76,0x8f,0xde,0xf7,0xc0,0x3c,0xb8,
+ 0x24,0xbe,0x69,0x3d,0xc1,0x08,0xf5,0xd7,0xdb,0x36,0x96,0x1a,0x86,0x6a,
+ 0x92,0xc4,0xed,0xb6,0x43,0x62,0x21,0x53,0x0a,0x7a,0xab,0x1b,0x57,0xe7,
+ 0x77,0xdb,0x43,0x87,0xf6,0xcf,0xce,0xe6,0xa1,0x59,0x5b,0x5f,0xd5,0xa6,
+ 0x16,0xc3,0x5e,0xa4,0xc5,0x33,0xda,0x1e,0x35,0x8d,0x5d,0xbd,0x4d,0xc6,
+ 0x48,0x22,0x22,0x49,0xb4,0x01,0x45,0x9f,0xa9,0xcf,0xd9,0x3a,0x82,0x51,
+ 0xc2,0xa8,0x52,0x63,0x23,0xd6,0x26,0xeb,0xda,0x8d,0x80,0x49,0x54,0x14,
+ 0xc2,0xad,0x8f,0xc3,0x68,0x1b,0x23,0xb4,0x95,0xda,0xb3,0x2c,0xeb,0x74,
+ 0x3a,0x31,0xc6,0x5b,0x84,0xa1,0xb4,0x25,0x94,0x44,0x70,0x81,0x33,0xf7,
+ 0xe3,0xfd,0x8f,0x1d,0x3e,0x7e,0xc7,0x4c,0xd5,0xac,0x1a,0xdb,0xce,0x44,
+ 0xdc,0x38,0x63,0x4c,0xf6,0xd5,0xb7,0x5b,0x67,0x4d,0x4f,0x17,0xcb,0xab,
+ 0xcb,0x31,0xa5,0xa9,0xe9,0xe9,0x24,0xa1,0xaa,0xfb,0xe0,0x06,0x8c,0xb9,
+ 0x5d,0xf9,0xf2,0xca,0xb2,0x28,0xee,0xba,0xfb,0xde,0x3b,0x4f,0x9f,0x8e,
+ 0xa9,0x77,0xf5,0x7a,0xaf,0x3f,0x08,0x34,0x22,0x89,0x6d,0x82,0xd7,0x6d,
+ 0xbd,0x07,0x11,0x55,0x88,0x61,0xcb,0xdc,0x26,0x69,0x15,0x55,0x91,0x14,
+ 0x42,0x94,0x14,0x55,0x22,0x28,0x51,0x8b,0x47,0x25,0x4d,0x09,0xce,0x6e,
+ 0xf1,0xe6,0x44,0x41,0x6c,0x8d,0x7a,0x80,0x05,0x0a,0x56,0xe3,0x46,0x8c,
+ 0xcc,0xd9,0xdd,0x69,0x76,0x77,0x32,0x3e,0x0e,0xcb,0xb1,0xd6,0x85,0xc6,
+ 0x4b,0x3b,0xc6,0xa2,0xaa,0x99,0x3d,0x68,0x14,0xc7,0x4e,0xe1,0x3f,0xfd,
+ 0x4f,0x8f,0x3e,0xf4,0xe8,0xf1,0xde,0xf0,0x22,0x99,0xb6,0x46,0xa5,0x51,
+ 0xc9,0x4e,0xe3,0x49,0x3b,0xe9,0x36,0x41,0xeb,0x1b,0x5d,0x36,0x46,0x37,
+ 0x13,0xda,0x46,0x47,0x2c,0x13,0x72,0xd2,0x4e,0x6c,0x72,0x83,0x39,0xc6,
+ 0xd4,0xf3,0xcf,0xfd,0xf4,0x2b,0x5f,0x38,0xff,0xd4,0x37,0xda,0x12,0x6c,
+ 0x44,0xe6,0xdc,0x7a,0x61,0x1a,0x8d,0x3c,0x27,0x9e,0xd9,0xb1,0x91,0x24,
+ 0x09,0x04,0x26,0x10,0x41,0x05,0x2d,0x70,0xd0,0x76,0x2d,0xa3,0x9d,0xa5,
+ 0xaa,0x04,0x43,0x44,0x0c,0x56,0x42,0x02,0xb9,0x3c,0x85,0xd0,0xc0,0xe1,
+ 0x1d,0xef,0xc5,0xef,0x7e,0xf4,0x3d,0xb3,0xb3,0xb3,0x3f,0x79,0xe1,0xd2,
+ 0xff,0xf9,0x7f,0xfc,0x20,0xb6,0xa7,0xa5,0x3a,0xa4,0x00,0x33,0x22,0x2f,
+ 0xb9,0x29,0x84,0x06,0x77,0xbf,0x05,0x7f,0xfc,0x5f,0xde,0x75,0xf2,0x74,
+ 0xd1,0x2b,0xcf,0x29,0x6f,0xe4,0x05,0xd5,0x75,0x7d,0x03,0x45,0x78,0xe2,
+ 0xf8,0xe6,0xdb,0xd3,0x48,0x63,0xa4,0x4e,0xda,0x84,0x09,0x49,0xdb,0xa6,
+ 0x81,0x39,0x67,0xf6,0xd6,0x3a,0x85,0x08,0x55,0xdd,0x19,0x3a,0x78,0x64,
+ 0xf6,0xae,0xbb,0x0f,0x14,0x59,0x98,0x9a,0xe2,0xc1,0xb0,0xa9,0x6a,0x00,
+ 0x92,0x79,0xe3,0x9c,0x53,0x81,0xe8,0x24,0xfa,0x61,0x09,0x5e,0xe1,0x54,
+ 0xc1,0x26,0x6d,0x89,0x87,0xc0,0x86,0x33,0x6b,0xbd,0xb5,0xbe,0x09,0xa2,
+ 0xaa,0x4c,0x6c,0x2c,0x13,0x09,0x51,0x52,0x8a,0x30,0x51,0x29,0x8a,0x4d,
+ 0xf7,0x3f,0x8c,0x8f,0xfc,0xfe,0xb1,0xf7,0x3e,0x76,0x78,0x76,0x61,0x60,
+ 0xb2,0xde,0x81,0x43,0xbb,0x3b,0x45,0x3a,0x77,0x7e,0xbd,0xee,0xc3,0x17,
+ 0x36,0xeb,0x64,0xa1,0x0e,0x60,0x74,0xe6,0x50,0x57,0x78,0xfb,0x7b,0xf1,
+ 0xd1,0x3f,0x78,0xe4,0xe8,0xc9,0xbc,0x0c,0x17,0x9a,0xb4,0x3c,0x66,0x35,
+ 0xd1,0xf6,0x41,0x97,0x4e,0xa4,0x30,0xfa,0x39,0x8c,0x85,0xc9,0x22,0xa0,
+ 0x55,0xf6,0xa1,0xae,0x43,0x4a,0xc2,0xcc,0xaa,0x34,0x1c,0x0c,0xcb,0x72,
+ 0xc8,0x4c,0xdd,0x4e,0xfe,0xe0,0x5b,0x4f,0x1f,0x3d,0x3e,0x3d,0x3d,0x57,
+ 0x09,0x86,0x83,0x01,0xca,0x4a,0x62,0x0c,0x2a,0x29,0xcb,0x72,0x26,0xcf,
+ 0x64,0xad,0xe9,0x7a,0x37,0xe5,0x6c,0x07,0xea,0x5b,0xd0,0x5f,0x55,0x46,
+ 0xf4,0x13,0xb5,0x44,0x86,0x88,0xdb,0xf9,0x91,0x73,0xec,0x1c,0x40,0x41,
+ 0x21,0x4a,0xb0,0x0e,0xae,0x83,0x07,0xdf,0xc9,0xef,0xfe,0xc0,0xcc,0x6f,
+ 0x7c,0xe8,0x8e,0x07,0x1f,0xdd,0x3d,0xb7,0x50,0x25,0x5d,0x4d,0x5a,0x33,
+ 0xd1,0x3d,0x77,0xbf,0x49,0xa4,0x7a,0xe5,0xd5,0xd5,0xaa,0x9f,0x92,0x06,
+ 0x5f,0x70,0x0a,0x1a,0x80,0xbb,0xdf,0x8c,0x8f,0xfe,0xc1,0x23,0x6f,0x79,
+ 0xe8,0x58,0xd9,0x5c,0x6b,0xe2,0x52,0x5e,0x10,0x20,0x31,0x26,0x66,0x3b,
+ 0x81,0x34,0xdc,0xf0,0xef,0x6d,0xae,0xb1,0xbb,0x15,0x5b,0x97,0x01,0x96,
+ 0x04,0x63,0xbc,0xb3,0x59,0x8c,0xa8,0xab,0xa8,0x4a,0xa4,0x3c,0x55,0xe4,
+ 0x8e,0xbb,0xa9,0x99,0x5e,0xbc,0x9a,0x7e,0xfc,0xec,0xf2,0xd3,0xff,0x7c,
+ 0xe1,0xa5,0x17,0xfb,0x8b,0xd7,0xc0,0x84,0x11,0xcb,0x7d,0x1c,0xa1,0x4c,
+ 0x4e,0x55,0x15,0xd5,0x0e,0x33,0x60,0x82,0x75,0x88,0x69,0x0c,0x5e,0x1a,
+ 0x1c,0x3d,0x86,0xd3,0x67,0x76,0x1d,0x3c,0xd6,0x7d,0xeb,0x3b,0x0e,0xef,
+ 0x3d,0x82,0xbc,0x3b,0xdc,0x18,0x5c,0xac,0x9a,0xe5,0x2c,0xcb,0x48,0xa7,
+ 0xca,0xbe,0xdb,0x33,0x7b,0x6f,0xd9,0x9b,0xf9,0xd2,0xe7,0x9e,0xfe,0xf4,
+ 0xdf,0xbc,0x32,0x5c,0x05,0x14,0xb6,0xc0,0xe1,0x63,0xf8,0x5f,0xfe,0xb7,
+ 0x77,0x1f,0x3e,0x61,0x94,0x7b,0x1b,0xfd,0x4b,0x79,0x27,0xe5,0x05,0x35,
+ 0x4d,0x23,0x32,0xf1,0xf5,0x11,0x24,0xb7,0x5a,0x3f,0x76,0x1b,0xc6,0xda,
+ 0x71,0x39,0x34,0xb2,0xac,0x88,0x41,0x42,0x88,0xed,0x2c,0x8f,0xc8,0x49,
+ 0x52,0x42,0x2a,0x87,0x4b,0xcc,0x5c,0x64,0x0b,0x53,0xc5,0x21,0x4b,0x0b,
+ 0xab,0x4b,0xe9,0xdc,0x2b,0x8b,0x97,0x2f,0xae,0x3f,0xf9,0xbd,0x17,0x57,
+ 0x57,0x70,0xfd,0x1a,0x36,0xd6,0x47,0xcc,0xa5,0x6d,0x3f,0x37,0xec,0xf9,
+ 0x33,0x00,0xd0,0x9d,0xc5,0x91,0x63,0x38,0x76,0x12,0x27,0x4e,0xed,0x3a,
+ 0x75,0xe7,0x81,0x13,0x27,0x0f,0x2c,0xec,0x9b,0x5e,0xde,0xb8,0xd8,0xaf,
+ 0xae,0x34,0xe9,0xba,0xf5,0xc1,0x18,0x15,0x61,0x48,0xe1,0xcc,0x6c,0x7f,
+ 0x83,0xf6,0xcc,0xdf,0x31,0x58,0xcf,0xbf,0xfd,0x0f,0x2f,0xfc,0xed,0xa7,
+ 0x2e,0x5c,0xbf,0x88,0xbb,0xee,0xc7,0x47,0xff,0xc7,0x87,0x1e,0x78,0x68,
+ 0x77,0xbf,0x3a,0x17,0xa5,0x6f,0x6c,0x00,0x85,0x24,0x0d,0x93,0x71,0x2e,
+ 0x8b,0x61,0x02,0x9e,0xfe,0x57,0x32,0xd6,0x04,0xbf,0x6b,0xfb,0x93,0x36,
+ 0x4d,0xcc,0xf3,0x5c,0x12,0xea,0xba,0x21,0x32,0x44,0xa4,0x42,0xd6,0xa1,
+ 0xc8,0x62,0x08,0x75,0x6c,0x1c,0xb4,0xf0,0x66,0x2e,0xf3,0x73,0xde,0x4e,
+ 0x33,0xe5,0x4d,0xad,0xab,0x2b,0xfd,0x2b,0x97,0xd7,0x2e,0x5f,0x5c,0xbe,
+ 0x7a,0x79,0x7d,0xf1,0x7a,0x6f,0x65,0x09,0x83,0x3e,0x9a,0x7a,0x94,0xd7,
+ 0xad,0x43,0x51,0x60,0x66,0xd6,0xce,0xcc,0x16,0x45,0x17,0xf7,0xdc,0x7b,
+ 0x62,0xf7,0xde,0xec,0xe0,0xe1,0xe9,0x5d,0x0b,0xde,0xb8,0xb2,0x6a,0x56,
+ 0xfb,0x83,0xe5,0x32,0x0c,0xba,0xdd,0xa2,0x0a,0x7d,0x70,0x3f,0xcb,0xc9,
+ 0x18,0x13,0x03,0xab,0x58,0x6b,0x8a,0xd0,0x68,0x68,0xec,0xae,0xd9,0xe3,
+ 0xd5,0xc0,0x7f,0xf5,0xcb,0xdf,0x3d,0xf7,0x6a,0x7c,0xf4,0xed,0x87,0xdf,
+ 0xf6,0xf6,0x7b,0x7b,0xe5,0xab,0x4d,0x5c,0xc9,0x0b,0xe3,0x33,0x1e,0x0c,
+ 0x7a,0xa2,0xa9,0xdd,0x69,0x62,0x8d,0xdf,0xbe,0x72,0x49,0x6e,0x26,0x1a,
+ 0xfd,0x1c,0xc6,0xda,0xae,0x6e,0xe9,0xf7,0xfb,0x73,0x73,0x73,0xc6,0x98,
+ 0x18,0xc4,0x5a,0x2b,0x22,0x4d,0x13,0xac,0x35,0xa1,0xda,0xe8,0x74,0x3a,
+ 0x45,0xd1,0x8d,0x01,0xbd,0x5e,0x7f,0x38,0xa8,0x98,0xed,0xa8,0x29,0x21,
+ 0x6f,0x4d,0x61,0x4d,0x97,0xd1,0x55,0xf1,0xb1,0x71,0x29,0x22,0x46,0x88,
+ 0x88,0x24,0x80,0xc4,0x18,0x93,0x65,0x2e,0xcb,0x9c,0xf3,0xa8,0x9b,0xbe,
+ 0xa0,0x8c,0xa9,0x17,0xa5,0x27,0x28,0x41,0xb5,0xb1,0x4a,0xc6,0x54,0xa5,
+ 0x76,0xa6,0xba,0xa0,0x7a,0x58,0xf6,0x54,0x50,0x14,0x5d,0x66,0x5b,0x55,
+ 0x55,0x51,0xb8,0xe1,0xb0,0x82,0x66,0xde,0x4e,0xf7,0x7b,0x81,0xe0,0xe6,
+ 0x77,0x4d,0x97,0xd5,0x06,0xb8,0x4c,0xa9,0x31,0x2d,0xc6,0x3f,0xaa,0x5d,
+ 0xb9,0xa9,0xa3,0xf7,0x7e,0x2c,0x4b,0xda,0xce,0x94,0x9c,0xf8,0xf6,0x95,
+ 0xdb,0x33,0xd6,0x0e,0xab,0x18,0x5b,0x60,0xa4,0xae,0xeb,0x94,0x52,0xa7,
+ 0xd3,0x69,0xb7,0x24,0x5b,0x6b,0x0d,0x21,0x85,0x3a,0x84,0x44,0x44,0xce,
+ 0x39,0x6b,0x59,0x55,0x92,0x84,0xb6,0x6e,0x50,0x25,0x49,0x46,0xa2,0x53,
+ 0xf1,0x50,0x0f,0x25,0x6b,0x6d,0x8b,0x05,0xb7,0xd4,0xb0,0x94,0x52,0x4a,
+ 0x21,0xa5,0x56,0x37,0x91,0x88,0x85,0x4d,0x64,0x56,0x50,0x54,0x6d,0xb7,
+ 0x57,0xe4,0x00,0x8f,0xa5,0x6f,0x9b,0x8c,0xc3,0xa0,0x1a,0x66,0x67,0x67,
+ 0x37,0x36,0x36,0x54,0x69,0xaa,0x3b,0x57,0xd7,0x4d,0x5d,0x57,0x00,0xa6,
+ 0x67,0xba,0x2d,0x03,0xc3,0x5a,0x6b,0xad,0xad,0xaa,0x4a,0x12,0xba,0xdd,
+ 0x6e,0x08,0x61,0x9b,0x4f,0xfd,0xeb,0x19,0x6b,0xe7,0x65,0x22,0xdb,0x43,
+ 0x7d,0x93,0xc2,0x3e,0xae,0xeb,0xb6,0xeb,0x7c,0x27,0xc4,0xa3,0x2d,0xe9,
+ 0x6b,0x44,0x2f,0x18,0xcb,0x57,0x26,0x15,0x6b,0xb4,0x6d,0x3f,0xcc,0xb6,
+ 0xe7,0x6f,0x09,0xb5,0x9b,0x0b,0xdc,0xe4,0x06,0x2d,0xc3,0xc4,0xf5,0xdf,
+ 0xc0,0x11,0xa5,0x1b,0xb5,0x0f,0x3b,0x88,0x33,0x7f,0xde,0x2d,0x47,0xb2,
+ 0xfd,0xbb,0x24,0x5e,0xe7,0x61,0xba,0x4d,0x85,0xa1,0xdb,0xbf,0xc6,0xa3,
+ 0x2d,0x0e,0xb6,0xf4,0x7d,0x0a,0x0a,0xe3,0x0b,0xb0,0x37,0x52,0x81,0x69,
+ 0x3b,0x6e,0x39,0xb9,0x57,0x6d,0x34,0xad,0xe2,0x31,0x69,0x7a,0xbc,0x2f,
+ 0xae,0x55,0x41,0x2a,0x8f,0x96,0x7a,0x52,0x82,0xca,0xa8,0xd7,0xdb,0x32,
+ 0xe5,0x24,0x3d,0x59,0x6e,0xfc,0x84,0x76,0x52,0xa4,0xd8,0xdb,0xac,0x18,
+ 0x6e,0x36,0xd9,0x4e,0x0a,0xcf,0x91,0x5b,0xe8,0x78,0xb8,0xb7,0xe5,0xd2,
+ 0x06,0x23,0xf5,0xfd,0xf6,0xcf,0x53,0x5b,0x8d,0x03,0x43,0x37,0x57,0x72,
+ 0xa6,0xed,0x5f,0xe1,0x84,0x91,0x75,0xc6,0xd4,0xd7,0x56,0xab,0x37,0x9e,
+ 0x2f,0x8c,0x77,0x50,0x8e,0x94,0x07,0x3c,0x16,0x80,0x8c,0x97,0x0e,0x2b,
+ 0xdf,0xa8,0x66,0xda,0x39,0x6e,0xc6,0x5b,0x08,0xe8,0x5f,0xa6,0x0a,0xfb,
+ 0x59,0xe5,0x95,0x8c,0xc6,0xfd,0x37,0xda,0xeb,0x86,0x48,0x1c,0x07,0x88,
+ 0xee,0x5c,0x70,0xdc,0xc4,0x6b,0xa5,0xd7,0x11,0x5e,0xed,0xf0,0x55,0x1f,
+ 0x23,0xc6,0xb4,0x80,0xda,0x4d,0x76,0x69,0xe2,0x5b,0x56,0xe4,0x26,0xee,
+ 0xe7,0x38,0x2c,0x48,0x6e,0xbd,0x15,0x9d,0x6e,0x0a,0x61,0xfc,0x3c,0x61,
+ 0xb8,0xf9,0x25,0x5d,0x9b,0x42,0xba,0x5b,0x87,0xe4,0x78,0x25,0xeb,0xd6,
+ 0x6e,0xa0,0x71,0x12,0xa1,0x1d,0x75,0xed,0x14,0x81,0x06,0xa4,0x13,0x5f,
+ 0x31,0xb3,0xf9,0x3c,0x66,0xeb,0x78,0xd9,0xe4,0x4f,0x51,0x04,0xd1,0xc4,
+ 0xf2,0xe9,0x49,0x39,0x7f,0x18,0xaf,0x2a,0x90,0x4d,0xcd,0x0c,0x30,0x99,
+ 0x28,0x27,0xbe,0x6d,0xeb,0xe6,0x05,0xd5,0xa3,0xbd,0xbc,0x3a,0x99,0xe0,
+ 0x6f,0xcf,0xb3,0x26,0x3f,0xbd,0x1d,0x29,0xcf,0x0c,0x95,0xf1,0x98,0x84,
+ 0x6e,0x55,0xe3,0xed,0x54,0xe5,0x6e,0x92,0x58,0x78,0xbb,0x5a,0x66,0x33,
+ 0x3d,0x9b,0x6d,0xe9,0x4f,0x2d,0xe0,0xc7,0x4b,0x5a,0x5b,0x0e,0x97,0x19,
+ 0x0b,0xdb,0x5a,0x4d,0x0b,0x4f,0xe0,0xc2,0x37,0x27,0x26,0xdc,0xc4,0x8e,
+ 0x9c,0xb0,0x14,0xb7,0xad,0xb5,0xdf,0xcc,0x72,0xb7,0x65,0xac,0x16,0x15,
+ 0x6a,0x53,0xcf,0x36,0x07,0xd6,0x9b,0x71,0x68,0xa1,0x30,0xe1,0x7a,0x3c,
+ 0xb1,0x18,0x68,0x92,0x94,0xb6,0x19,0x2f,0xa4,0x3a,0xa2,0x47,0xed,0xb0,
+ 0x49,0x61,0x04,0x33,0x6d,0xd7,0x2d,0xb7,0xcb,0x71,0x29,0x4c,0xc4,0x29,
+ 0x8f,0x72,0x19,0x25,0xa8,0x01,0xb5,0xb3,0x12,0xfc,0x8b,0xbf,0x17,0x44,
+ 0x47,0x96,0xa2,0x6a,0xec,0xc5,0xe6,0xb6,0x8d,0xc5,0x13,0xcb,0x6b,0x27,
+ 0x15,0x3c,0xba,0x53,0x6e,0xdf,0x14,0x46,0xf1,0xa6,0xba,0x60,0x64,0x08,
+ 0xdd,0x41,0x00,0xb3,0x2d,0xb9,0x6e,0x7d,0xd4,0xbc,0x5d,0xdf,0x28,0xdb,
+ 0x5f,0x97,0x77,0xfa,0xd6,0x36,0xde,0x96,0x80,0x76,0x7e,0x2d,0xdd,0x09,
+ 0x1a,0xe4,0xed,0x30,0x16,0xff,0x3c,0x39,0x8b,0x47,0xe4,0xc4,0x1b,0xf9,
+ 0xbb,0xb7,0x2c,0x4f,0x58,0x6f,0x95,0xb0,0xd3,0xc4,0x1b,0xde,0x74,0x55,
+ 0xda,0xce,0x8a,0x91,0xd7,0x6b,0xe0,0x75,0x3c,0xe3,0xbb,0xb9,0x14,0x68,
+ 0x85,0xa6,0xd0,0xad,0x0f,0xec,0x86,0x90,0xdf,0x61,0x65,0xf7,0xc4,0x42,
+ 0x36,0x25,0xc0,0x8f,0x5a,0xeb,0x89,0xa3,0xe0,0xb6,0x3c,0xeb,0x67,0x20,
+ 0x10,0xff,0x72,0xac,0xe2,0x5f,0xe5,0x4f,0xe4,0x75,0x3f,0xd7,0x5b,0x3d,
+ 0x46,0x5e,0xf7,0xd9,0x6e,0xf0,0x89,0x9f,0x25,0x47,0xf9,0xef,0xb7,0x7f,
+ 0xa1,0x9b,0xfc,0xf7,0xdb,0xce,0xb7,0xff,0x17,0xf0,0xc3,0x93,0x96,0x33,
+ 0xe5,0xd9,0x1c,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,
+ 0x82
+};
+
+#include <qcstring.h>
+#include <qdict.h>
+static struct Embed {
+ unsigned int size;
+ const unsigned char *data;
+ const char *name;
+} embed_vec[] = {
+ { 601, arrow_xbm_data, "arrow.xbm" },
+ { 601, cross_xbm_data, "cross.xbm" },
+ { 598, hand_xbm_data, "hand.xbm" },
+ { 604, hsplit_xbm_data, "hsplit.xbm" },
+ { 601, ibeam_xbm_data, "ibeam.xbm" },
+ { 592, no_xbm_data, "no.xbm" },
+ { 607, sizeall_xbm_data, "sizeall.xbm" },
+ { 601, sizeb_xbm_data, "sizeb.xbm" },
+ { 601, sizef_xbm_data, "sizef.xbm" },
+ { 601, sizeh_xbm_data, "sizeh.xbm" },
+ { 601, sizev_xbm_data, "sizev.xbm" },
+ { 607, uparrow_xbm_data, "uparrow.xbm" },
+ { 604, vsplit_xbm_data, "vsplit.xbm" },
+ { 598, wait_xbm_data, "wait.xbm" },
+ { 767, small_book_xpm_data, "small/book.xpm" },
+ { 3100, small_databrowser_xpm_data, "small/databrowser.xpm" },
+ { 3100, small_datatable_xpm_data, "small/datatable.xpm" },
+ { 3164, small_dataview_xpm_data, "small/dataview.xpm" },
+ { 4330, small_editdelete_xpm_data, "small/editdelete.xpm" },
+ { 2428, small_editlower_xpm_data, "small/editlower.xpm" },
+ { 2365, small_editraise_xpm_data, "small/editraise.xpm" },
+ { 1483, small_form_xpm_data, "small/form.xpm" },
+ { 3981, small_home_xpm_data, "small/home.xpm" },
+ { 5406, small_image_xpm_data, "small/image.xpm" },
+ { 3179, small_layout_xpm_data, "small/layout.xpm" },
+ { 3621, small_left_xpm_data, "small/left.xpm" },
+ { 1131, small_newform_xpm_data, "small/newform.xpm" },
+ { 2434, small_print_xpm_data, "small/print.xpm" },
+ { 3634, small_right_xpm_data, "small/right.xpm" },
+ { 495, small_adjustsize_png_data, "small/adjustsize.png" },
+ { 648, small_buttongroup_png_data, "small/buttongroup.png" },
+ { 817, small_checkbox_png_data, "small/checkbox.png" },
+ { 585, small_closebutton_png_data, "small/closebutton.png" },
+ { 549, small_combobox_png_data, "small/combobox.png" },
+ { 553, small_connecttool_png_data, "small/connecttool.png" },
+ { 1133, small_customwidget_png_data, "small/customwidget.png" },
+ { 505, small_dateedit_png_data, "small/dateedit.png" },
+ { 965, small_datepicker_png_data, "small/datepicker.png" },
+ { 1074, small_datetimeedit_png_data, "small/datetimeedit.png" },
+ { 1024, small_dial_png_data, "small/dial.png" },
+ { 744, small_editbreaklayout_png_data, "small/editbreaklayout.png" },
+ { 485, small_editcopy_png_data, "small/editcopy.png" },
+ { 649, small_editcut_png_data, "small/editcut.png" },
+ { 520, small_editgrid_png_data, "small/editgrid.png" },
+ { 706, small_edithlayout_png_data, "small/edithlayout.png" },
+ { 809, small_edithlayoutsplit_png_data, "small/edithlayoutsplit.png" },
+ { 902, small_editpaste_png_data, "small/editpaste.png" },
+ { 690, small_editslots_png_data, "small/editslots.png" },
+ { 289, small_editvlayout_png_data, "small/editvlayout.png" },
+ { 355, small_editvlayoutsplit_png_data, "small/editvlayoutsplit.png" },
+ { 1408, small_exec_png_data, "small/exec.png" },
+ { 313, small_filenew_png_data, "small/filenew.png" },
+ { 681, small_fileopen_png_data, "small/fileopen.png" },
+ { 328, small_filesave_png_data, "small/filesave.png" },
+ { 400, small_frame_png_data, "small/frame.png" },
+ { 439, small_groupbox_png_data, "small/groupbox.png" },
+ { 837, small_help_png_data, "small/help.png" },
+ { 613, small_iconview_png_data, "small/iconview.png" },
+ { 1155, small_konsole_png_data, "small/konsole.png" },
+ { 953, small_label_png_data, "small/label.png" },
+ { 558, small_lcdnumber_png_data, "small/lcdnumber.png" },
+ { 461, small_lineedit_png_data, "small/lineedit.png" },
+ { 287, small_line_png_data, "small/line.png" },
+ { 386, small_listbox_png_data, "small/listbox.png" },
+ { 759, small_listview_png_data, "small/listview.png" },
+ { 454, small_multilineedit_png_data, "small/multilineedit.png" },
+ { 587, small_ordertool_png_data, "small/ordertool.png" },
+ { 1229, small_pixlabel_png_data, "small/pixlabel.png" },
+ { 586, small_pointer_png_data, "small/pointer.png" },
+ { 609, small_progress_png_data, "small/progress.png" },
+ { 408, small_pushbutton_png_data, "small/pushbutton.png" },
+ { 586, small_radiobutton_png_data, "small/radiobutton.png" },
+ { 592, small_redo_png_data, "small/redo.png" },
+ { 834, small_richtextedit_png_data, "small/richtextedit.png" },
+ { 408, small_scrollbar_png_data, "small/scrollbar.png" },
+ { 843, small_searchfind_png_data, "small/searchfind.png" },
+ { 1053, small_shellscript_png_data, "small/shellscript.png" },
+ { 729, small_slider_png_data, "small/slider.png" },
+ { 715, small_spacer_png_data, "small/spacer.png" },
+ { 455, small_spinbox_png_data, "small/spinbox.png" },
+ { 294, small_statusbar_png_data, "small/statusbar.png" },
+ { 483, small_table_png_data, "small/table.png" },
+ { 572, small_tabwidget_png_data, "small/tabwidget.png" },
+ { 514, small_textbrowser_png_data, "small/textbrowser.png" },
+ { 497, small_textedit_png_data, "small/textedit.png" },
+ { 498, small_textview_png_data, "small/textview.png" },
+ { 1520, small_timeedit_png_data, "small/timeedit.png" },
+ { 1462, small_timer_png_data, "small/timer.png" },
+ { 1262, small_toolbutton_png_data, "small/toolbutton.png" },
+ { 572, small_undo_png_data, "small/undo.png" },
+ { 733, small_disabled_editcut_xpm_data, "small/disabled/editcut.xpm" },
+ { 899, small_disabled_editslots_xpm_data, "small/disabled/editslots.xpm" },
+ { 931, small_disabled_layout_xpm_data, "small/disabled/layout.xpm" },
+ { 733, small_disabled_left_xpm_data, "small/disabled/left.xpm" },
+ { 733, small_disabled_right_xpm_data, "small/disabled/right.xpm" },
+ { 659, small_disabled_adjustsize_png_data, "small/disabled/adjustsize.png" },
+ { 836, small_disabled_connecttool_png_data, "small/disabled/connecttool.png" },
+ { 1126, small_disabled_editbreaklayout_png_data, "small/disabled/editbreaklayout.png" },
+ { 931, small_disabled_editcopy_png_data, "small/disabled/editcopy.png" },
+ { 735, small_disabled_editgrid_png_data, "small/disabled/editgrid.png" },
+ { 601, small_disabled_edithlayout_png_data, "small/disabled/edithlayout.png" },
+ { 754, small_disabled_edithlayoutsplit_png_data, "small/disabled/edithlayoutsplit.png" },
+ { 901, small_disabled_editpaste_png_data, "small/disabled/editpaste.png" },
+ { 617, small_disabled_editvlayout_png_data, "small/disabled/editvlayout.png" },
+ { 752, small_disabled_editvlayoutsplit_png_data, "small/disabled/editvlayoutsplit.png" },
+ { 587, small_disabled_filesave_png_data, "small/disabled/filesave.png" },
+ { 531, small_disabled_redo_png_data, "small/disabled/redo.png" },
+ { 1013, small_disabled_searchfind_png_data, "small/disabled/searchfind.png" },
+ { 541, small_disabled_undo_png_data, "small/disabled/undo.png" },
+ { 1447, mini_down_xpm_data, "mini/down.xpm" },
+ { 991, mini_form_xpm_data, "mini/form.xpm" },
+ { 510, mini_image_xpm_data, "mini/image.xpm" },
+ { 1405, mini_left_xpm_data, "mini/left.xpm" },
+ { 180, mini_resetproperty_xpm_data, "mini/resetproperty.xpm" },
+ { 1573, mini_right_xpm_data, "mini/right.xpm" },
+ { 1378, mini_up_xpm_data, "mini/up.xpm" },
+ { 15068, background_png_data, "background.png" },
+ { 12615, qtlogo_png_data, "qtlogo.png" },
+ { 0, 0, 0 }
+};
+
+static const QByteArray& qembed_findData( const char* name )
+{
+ static QDict<QByteArray> dict;
+ QByteArray* ba = dict.find( name );
+ if ( !ba ) {
+ for ( int i = 0; embed_vec[i].data; i++ ) {
+ if ( strcmp(embed_vec[i].name, name) == 0 ) {
+ ba = new QByteArray;
+ ba->setRawData( (char*)embed_vec[i].data,
+ embed_vec[i].size );
+ dict.insert( name, ba );
+ break;
+ }
+ }
+ if ( !ba ) {
+ static QByteArray dummy;
+ return dummy;
+ }
+ }
+ return *ba;
+}
+
+#endif
diff --git a/kommander/editor/pics/kfontcombo.png b/kommander/editor/pics/kfontcombo.png
new file mode 100644
index 00000000..87835d6c
--- /dev/null
+++ b/kommander/editor/pics/kfontcombo.png
Binary files differ
diff --git a/kommander/editor/pics/kommandersplash.png b/kommander/editor/pics/kommandersplash.png
new file mode 100644
index 00000000..cbc8f863
--- /dev/null
+++ b/kommander/editor/pics/kommandersplash.png
Binary files differ
diff --git a/kommander/editor/pics/large/adjustsize.xpm b/kommander/editor/pics/large/adjustsize.xpm
new file mode 100644
index 00000000..26afadb6
--- /dev/null
+++ b/kommander/editor/pics/large/adjustsize.xpm
@@ -0,0 +1,187 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 149 2",
+" c #181800000000",
+". c #212108080808",
+"X c #292900000000",
+"o c #292908080808",
+"O c #292918181818",
+"+ c #313108080000",
+"@ c #4a4a08080000",
+"# c #424218181818",
+"$ c #525208080000",
+"% c #525210100000",
+"& c #636310100808",
+"* c #737318180808",
+"= c #7b7b10100000",
+"- c #7b7b21211010",
+"; c #7b7b29291818",
+": c #6b6b39393131",
+"> c #737329292121",
+", c #737339393131",
+"< c #636342423939",
+"1 c #7b7b42423131",
+"2 c #5a5a4a4a4242",
+"3 c #7b7b5a5a5252",
+"4 c #7b7b6b6b6363",
+"5 c #7b7b73737373",
+"6 c #7b7b7b7b7b7b",
+"7 c #848421211010",
+"8 c #848429291818",
+"9 c #8c8c29291818",
+"0 c #949421211010",
+"q c #8c8c39392929",
+"w c #848439393131",
+"e c #949431312121",
+"r c #949439392929",
+"t c #a5a521210808",
+"y c #a5a529291818",
+"u c #adad31311818",
+"i c #bdbd31311818",
+"p c #a5a539392929",
+"a c #b5b539392121",
+"s c #bdbd39392929",
+"d c #949442423131",
+"f c #adad4a4a3939",
+"g c #b5b542422929",
+"h c #bdbd42422929",
+"j c #bdbd42423131",
+"k c #bdbd4a4a3131",
+"l c #8c8c4a4a4242",
+"z c #848452524a4a",
+"x c #84845a5a5252",
+"c c #8c8c5a5a5252",
+"v c #949452524a4a",
+"b c #9c9c52524242",
+"n c #949463635a5a",
+"m c #84846b6b6363",
+"M c #8c8c6b6b6363",
+"N c #8c8c6b6b6b6b",
+"B c #8c8c73736b6b",
+"V c #8c8c7b7b7b7b",
+"C c #9c9c73736b6b",
+"Z c #949473737373",
+"A c #9c9c7b7b7373",
+"S c #a5a552524a4a",
+"D c #a5a55a5a5252",
+"F c #b5b552524242",
+"G c #bdbd52524242",
+"H c #bdbd5a5a4a4a",
+"J c #adad63635a5a",
+"K c #a5a57b7b7373",
+"L c #adad7b7b7b7b",
+"P c #b5b56b6b6363",
+"I c #d6d631311818",
+"U c #c6c639392929",
+"Y c #c6c642422929",
+"T c #c6c642423131",
+"R c #c6c64a4a3131",
+"E c #c6c64a4a3939",
+"W c #cece42423131",
+"Q c #cece4a4a3131",
+"! c #cece4a4a3939",
+"~ c #cece52523939",
+"^ c #d6d64a4a3131",
+"/ c #d6d64a4a3939",
+"( c #d6d652523939",
+") c #dede52523939",
+"_ c #e7e742422121",
+"` c #cece52524242",
+"' c #d6d652524242",
+"] c #dede52524242",
+"[ c #dede5a5a4242",
+"{ c #c6c66b6b5a5a",
+"} c #cece63635252",
+"| c #dede63635252",
+" . c #c6c673736363",
+".. c #c6c673736b6b",
+"X. c #cece7b7b6b6b",
+"o. c #d6d673736363",
+"O. c #e7e75a5a4242",
+"+. c #e7e75a5a4a4a",
+"@. c #ffff5a5a4242",
+"#. c #e7e763634a4a",
+"$. c #efef63634a4a",
+"%. c #e7e76b6b5252",
+"&. c #efef6b6b5252",
+"*. c #ffff6b6b5252",
+"=. c #f7f773735a5a",
+"-. c #ffff73735a5a",
+";. c #ffff7b7b6363",
+":. c #949484847b7b",
+">. c #adad84847b7b",
+",. c #b5b584847b7b",
+"<. c #bdbd8c8c7b7b",
+"1. c #cece8c8c7b7b",
+"2. c #ffff84846b6b",
+"3. c #ffff8c8c6b6b",
+"4. c #ffff9c9c7b7b",
+"5. c #949484848484",
+"6. c #94948c8c8c8c",
+"7. c #9c9c8c8c8c8c",
+"8. c #9c9c94949494",
+"9. c Gray61",
+"0. c #a5a584848484",
+"q. c #adad8c8c8484",
+"w. c #adad94948c8c",
+"e. c #a5a59c9c9c9c",
+"r. c #adad9c9c9494",
+"t. c #adad9c9c9c9c",
+"y. c #bdbd8c8c8484",
+"u. c #b5b594948c8c",
+"i. c #bdbd94948c8c",
+"p. c #b5b594949494",
+"a. c #b5b59c9c9c9c",
+"s. c #bdbd9c9c9494",
+"d. c #bdbda5a59c9c",
+"f. c #a5a5a5a5a5a5",
+"g. c #adada5a5a5a5",
+"h. c #adadadada5a5",
+"j. c Gray68",
+"k. c #b5b5a5a5a5a5",
+"l. c #b5b5adadadad",
+"z. c #bdbda5a5a5a5",
+"x. c #bdbdadada5a5",
+"c. c Gray71",
+"v. c #bdbdb5b5b5b5",
+"b. c Gray74",
+"n. c #c6c694948484",
+"m. c #c6c694948c8c",
+"M. c #c0c0c0c0c0c0",
+"N. c #c6c6c6c6c6c6",
+"B. c None",
+/* pixels */
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.y.=.#.w.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B. .$.( M B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.K ] T N B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.>.) h V B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.w.( j 8.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.p.] g 8.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.b.<.1.} ' R H ..K b.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.C U ( ~ ~ ! y 3 B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.b.b T ~ ! a , c.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.j.p T h ; f.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.e.e 8 6.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.g.g.N.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.b.i.r.N.B.B.B.B.B.v.u.q.t.b.B.B.B.B.B.z.y.b.B.B.B.B.B.",
+"B.B.B.B.B.b.X.^ L b.B.B.B.t.Y _ I 0 c b.B.B.b.s.2.o.b.B.B.B.B.B.",
+"k.i.a.x.v.v.{ ) ( J c.B.c.h @.3.*.i = 4 B.b.n.;.O.G l.v.x.d.m.k.",
+"| &.#.#.+.%.' ! ~ ^ S b.0.I -.4.=.a * # v.<.-.( E R ( #.#.+.) d ",
+"` ) Q Y j h Q ~ ! h 9 j.A t ^ [ j 9 & o e.H ^ ! R ! h g s h Y q ",
+"C w z m V :.F Q g - 6.B.7.* 0 0 7 & + O b.f.q s Q k 5 5.B x 1 N ",
+"b.b.b.B.B.B.P u > 9.B.B.b.< $ % @ X 6 B.B.j.l a F b.B.B.b.b.b.",
+"B.B.B.B.B.B.n : j.B.B.B.B.c.2 . . . 5 b.B.B.B.b.M w b.B.B.B.B.B.",
+"B.B.B.B.B.B.c.v.B.B.B.B.B.B.b.j.e.c.N.B.B.B.B.B.b.c.b.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.b.1.{ h.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.b.n.=.) f c.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.a.-.( ! T D b.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.l.=.[ Q R Q U A B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.,.[ E R ! R j r c.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.v.c.t.k s M c.c.b.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.b.` h Z B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.l.~ Y M B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.a./ Y v b.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.w.W Y d b.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.g.q 8 x b.B.B.B.B.B.B.B.B.B.B.B.B.B."
+};
diff --git a/kommander/editor/pics/large/buttongroup.xpm b/kommander/editor/pics/large/buttongroup.xpm
new file mode 100644
index 00000000..ee18a3ab
--- /dev/null
+++ b/kommander/editor/pics/large/buttongroup.xpm
@@ -0,0 +1,79 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 41 1",
+" c #060606060606",
+". c #0e0e0e0e0e0e",
+"X c #1e1e00000000",
+"o c #161616161616",
+"O c #1e1e1e1e1e1e",
+"+ c #262600000000",
+"@ c Gray15",
+"# c #282828282626",
+"$ c Gray18",
+"% c Gray21",
+"& c #3e3e3e3e3e3e",
+"* c #4e4e00000000",
+"= c #5e5e00000000",
+"- c #6c6c00000000",
+"; c #464646464646",
+": c #4e4e4e4e4e4e",
+"> c #565656565656",
+", c Gray37",
+"< c Gray40",
+"1 c Gray43",
+"2 c #767676767676",
+"3 c Gray",
+"4 c #000000008686",
+"5 c #000000008e8e",
+"6 c #000000009696",
+"7 c #000000009c9c",
+"8 c #00000000a4a4",
+"9 c #00000000aeae",
+"0 c #00000000b6b6",
+"q c #00000000bcbc",
+"w c #aaaa00000000",
+"e c #bebe00000000",
+"r c #c6c600000000",
+"t c #cccc00000000",
+"y c #d4d400000000",
+"u c Red",
+"i c #848484848484",
+"p c Gray55",
+"a c Gray59",
+"s c #c0c0c0c0c0c0",
+"d c None",
+/* pixels */
+"ddddddaOo.........$ddddddddddddd",
+"ddaaaa% 1iiiapp3ipadd",
+"daaaip@ <3221222221id",
+"dp311< $&&&&;:,1<1<d",
+"d31<O,< oaaaaaai1$11,d",
+"d32&1ddaaaaaaaaaaaddddddddda:1>d",
+"d22Oaddddddddddddddddddddddd:2,d",
+"d12.adae:add1:::::::::::>idd>1<d",
+"d12.ddruw%daqqqqqqqqqqqqq$dd>2,d",
+"d22.dawe*.daqqq0000009989$dd<2,d",
+"d12.dd# $da6554444444446$dd<2,d",
+"d12.dda>,addi122222222221add,2,d",
+"d12.dddddddddddddddddddddddd>2,d",
+"d12.dddddddddddddddddddddddd>2>d",
+"d22.ddd:,add1,,<,,pddddddddd,2>d",
+"d22.ddeur$daqqqqqq;ddddddddd,2>d",
+"d22.dawt=.aaq99998;ddddddddd,2:d",
+"d22.dd$X $da865556;ddddddddd,2:d",
+"d22 dda:>add1,:::,pddddddddd,2,d",
+"d12.dddddddddddddddddddddddd,2,d",
+"d12oaddddddddddddddddddddddd,2>d",
+"d12oada>>add2,<,<,<,<,<,,add>2:d",
+"d32@adtur@ddqqqqqqqqqqqqq;dd,2>d",
+"d22@adwy-.aa9998999988876&dd,1,d",
+"d22Oad%+ @dd7767666666666;dd>2,d",
+"d12@ada,,add<>>>>>>>>>>>:ida<1>d",
+"d31%3dddddddddddddddddddddda<1,d",
+"d22:>ddddddddddddddddddddddp21,d",
+"d211@,paadaadaaddddddddaaaai21>d",
+"di1<2112223323211111112333i3<11d",
+"da,11111121211221222221111111:pd",
+"dda<>>,>:>,<,,>:::::>::>,>:>,3dd"
+};
diff --git a/kommander/editor/pics/large/checkbox.xpm b/kommander/editor/pics/large/checkbox.xpm
new file mode 100644
index 00000000..7baf3ccb
--- /dev/null
+++ b/kommander/editor/pics/large/checkbox.xpm
@@ -0,0 +1,67 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 29 1",
+" c #272727272727",
+". c Gray18",
+"X c #373737373737",
+"o c #3f3f3f3f3f3f",
+"O c Gray28",
+"+ c Gray31",
+"@ c Gray34",
+"# c #5f5f5f5f5f5f",
+"$ c #676767676767",
+"% c Gray42",
+"& c #777777777777",
+"* c Gray50",
+"= c Gray52",
+"- c Gray56",
+"; c #929292929292",
+": c #9f9f9f9f9f9f",
+"> c #a7a7a7a7a7a7",
+", c #afafafafafaf",
+"< c #b4b4b4b4b4b4",
+"1 c Gray75",
+"2 c #c0c0c0c0c0c0",
+"3 c Gray78",
+"4 c #cbcbcbcbcbcb",
+"5 c #d5d5d5d5d5d5",
+"6 c #dadadadadada",
+"7 c Gray89",
+"8 c Gray97",
+"9 c Gray100",
+"0 c None",
+/* pixels */
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000>&$##@@#@@+@@@#:00000000",
+"0000000,&$++OoOoOOOOOO@o:0000000",
+"0000000&@.+-::>>>>::;#XO@0000000",
+"0000000#O@+<999999994#&OO0000000",
+"0000000@o,1o,9999993+<8@o0000000",
+"0000000@o<9<o,99993O,98$X0000000",
+"0000000@o199>X,993O:998$X0000000",
+"0000000+o1999,X=>+:9998$X0000000",
+"0000000+o19999*Xo$99998$X0000000",
+"0000000@o19999;oX$99998$X0000000",
+"0000000@o<9996++$X<9999#X0000000",
+"0000000@o<995@=88>o<998#X0000000",
+"0000000#X,97@=9999:X198$X0000000",
+"0000000#o:7@-999999,X19#o0000000",
+"0000000#o*$=99999999>X<#o0000000",
+"0000000&oO&9999999999:$o+0000000",
+"0000000>.o#%====*=*=&%O -0000000",
+"00000000;+X..........Xo*10000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000"
+};
diff --git a/kommander/editor/pics/large/combobox.xpm b/kommander/editor/pics/large/combobox.xpm
new file mode 100644
index 00000000..e82d7b7d
--- /dev/null
+++ b/kommander/editor/pics/large/combobox.xpm
@@ -0,0 +1,192 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 154 2",
+" c Gray0",
+". c #737300002929",
+"X c #424200006363",
+"o c #424200007b7b",
+"O c Gray39",
+"+ c #6b6b6b6b6363",
+"@ c Gray42",
+"# c #737373736b6b",
+"$ c #73737b7b6b6b",
+"% c #7b7b7b7b6b6b",
+"& c Gray45",
+"* c #7b7b7b7b7373",
+"= c #7b7b7b7b7b7b",
+"- c #181800008c8c",
+"; c #08080808b5b5",
+": c #08080808bdbd",
+"> c #10100000adad",
+", c #18181818a5a5",
+"< c #18181818adad",
+"1 c #10101010b5b5",
+"2 c #18181818bdbd",
+"3 c #313100009c9c",
+"4 c #393900009494",
+"5 c #21210000bdbd",
+"6 c #292929298c8c",
+"7 c #292929299494",
+"8 c #313131318c8c",
+"9 c #393939399494",
+"0 c #29292929adad",
+"q c #21212121bdbd",
+"w c #29292929b5b5",
+"e c #00000000cece",
+"r c #08080808c6c6",
+"t c #08080808cece",
+"y c #00000000d6d6",
+"u c #00000000dede",
+"i c #08080808d6d6",
+"p c #08080808dede",
+"a c #10101010c6c6",
+"s c #10101010cece",
+"d c #18181818cece",
+"f c #10101010d6d6",
+"g c #10101010dede",
+"h c #18181818d6d6",
+"j c #00000000e7e7",
+"k c #00000000efef",
+"l c #08080808e7e7",
+"z c #00000000f7f7",
+"x c Blue",
+"c c #00000808ffff",
+"v c #08080808ffff",
+"b c #10100000f7f7",
+"n c #10101010e7e7",
+"m c #18181818efef",
+"M c #10101010ffff",
+"N c #21210000c6c6",
+"B c #21210000cece",
+"V c #29290000cece",
+"C c #21212121c6c6",
+"Z c #21212121cece",
+"A c #21212929cece",
+"S c #21212121d6d6",
+"D c #21212121dede",
+"F c #29292929dede",
+"G c #29292929e7e7",
+"H c #21212121ffff",
+"J c #21212929ffff",
+"K c #29292929ffff",
+"L c #31313131efef",
+"P c #39393939ffff",
+"I c #39394242ffff",
+"U c #39394a4affff",
+"Y c #4a4a4a4a9494",
+"T c #42424242b5b5",
+"R c #52525252b5b5",
+"E c #5a5a5a5abdbd",
+"W c #6b6b6b6b9494",
+"Q c #7b7b7b7b8484",
+"! c #7b7b7b7b9c9c",
+"~ c #63636b6ba5a5",
+"^ c #63636b6badad",
+"/ c #7b7b7b7bb5b5",
+"( c #4a4a4a4acece",
+") c #4a4a4a4affff",
+"_ c #52525a5affff",
+"` c #5a5a5a5affff",
+"' c #6b6b6b6bc6c6",
+"] c #6b6b6b6bcece",
+"[ c #6b6b6b6bd6d6",
+"{ c #73737373cece",
+"} c #63636363ffff",
+"| c #63636b6bffff",
+" . c #6b6b6b6bffff",
+".. c #7b7b7b7be7e7",
+"X. c #9c9c00001010",
+"o. c #bdbd00001818",
+"O. c #a5a500003131",
+"+. c #bdbd00002121",
+"@. c #efef00000000",
+"#. c #f7f700000000",
+"$. c Red",
+"%. c #848484847b7b",
+"&. c #8c8c8c8c7b7b",
+"*. c #8c8c8c8c8484",
+"=. c Gray55",
+"-. c #949494948484",
+";. c #949494948c8c",
+":. c Gray58",
+">. c #9c9c9c9c9494",
+",. c #84848484bdbd",
+"<. c #94949494bdbd",
+"1. c #9c9c9c9cb5b5",
+"2. c #a5a5a5a59c9c",
+"3. c #a5a5a5a5a5a5",
+"4. c Gray68",
+"5. c #a5a5a5a5b5b5",
+"6. c #adadadadb5b5",
+"7. c Gray74",
+"8. c #84848484c6c6",
+"9. c #8c8c8c8ccece",
+"0. c #94949494cece",
+"q. c #94949494d6d6",
+"w. c #9c9c9c9cd6d6",
+"e. c #84848484ffff",
+"r. c #8c8c8c8cffff",
+"t. c #94949494ffff",
+"y. c #a5a5a5a5dede",
+"u. c #adadadadd6d6",
+"i. c #b5b5b5b5c6c6",
+"p. c #bdbdbdbdcece",
+"a. c #b5b5b5b5d6d6",
+"s. c #bdbdbdbdd6d6",
+"d. c #adadadade7e7",
+"f. c #bdbdbdbde7e7",
+"g. c #bdbdbdbdffff",
+"h. c #c0c0c0c0c0c0",
+"j. c #d6d6d6d6cece",
+"k. c #dedededed6d6",
+"l. c Gray87",
+"z. c #ceced6d6ffff",
+"x. c #dedededef7f7",
+"c. c #dedededeffff",
+"v. c #efefefefdede",
+"b. c #e7e7e7e7e7e7",
+"n. c #e7e7e7e7efef",
+"m. c #efefefeff7f7",
+"M. c #efefefefffff",
+"N. c #efeff7f7e7e7",
+"B. c #f7f7f7f7e7e7",
+"V. c #ffffffffefef",
+"C. c Gray97",
+"Z. c #fffffffff7f7",
+"A. c Gray100",
+"S. c None",
+/* pixels */
+"W A m l l l l l v v v v v v v v l l l l l l l p v v v n f Z Y 4.",
+"f x k h F F F D A A Z Z Z Z Z Z Z Z S S d d g x B N N N V V b Y ",
+"p x w v.V.V.V.Z.Z.Z.Z.V.Z.Z.V.Z.V.Z.V.V.V.Z.m.L o.$.$.$.#.#.4 q ",
+"p x R Z.M.r.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.d.A.U o $.$.$.$.X.k 2 ",
+"p x E Z.g.z x x z x z x z z z x z x z x z 6 V.) z +.$.$.@.- x 2 ",
+"p x E Z.n.{ [ ] ] ] ] ' ' ' ' ' ] ] ] ] ] 1.A.) x 3 $.$.. z x t ",
+"p x ( Z.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.P x x O.@.> x x t ",
+"l x M _ } } } } } } } } } } } } | } } } ` _ _ c x x 5 X x x x t ",
+"< i i y u x x x k k k k k k k z k k k k k k j k j j j k z x x t ",
+"4.3.3.2.Q j z T 9.y.u.u.a.a.f.f.s.s.s.p.p.S.p.i.6.6.5.<...v x t ",
+"S.S.S.S.S.g y j.B.2.*.*.*.*.*.*.*.*.*.*.=.=.*.*.=.=.>.N.A.K x t ",
+"S.S.S.S.7.S t C.# = A.P x t ",
+"S.S.S.S.7.q s Z.@ + A.I x t ",
+"S.S.S.S.7.C a Z.@ + A.P x t ",
+"S.S.S.S.7.q h A.@ = A.I x t ",
+"S.S.S.S.7.q Z Z.k.-.&.% % % % % % % % % % % % % % &.-.k.A.P x t ",
+"S.S.S.S.7.q S V.c.t.t.r.r.r.r.r.r.r.r.r.r.r.r.r.r.t.t.x.A.P x t ",
+"S.S.S.S.7.q S V. .x x x x x x x x x x x x x x x x x k / A.P x t ",
+"S.S.S.S.7.q F Z. .x x x x x x x x x x x x x x x x x j ^ A.I x t ",
+"S.S.S.S.7.q G V. .x x x x x x x x x x x x x x x x x k ~ A.P x t ",
+"S.S.S.S.7.q D Z.{ k k k k k k k j k j k k j k k k k e ! A.P x t ",
+"S.S.S.S.7.q F V.l.w.0.9.8.8.,.,.,.,.,.,.,.,.8.8.9.0.0.b.A.P x t ",
+"S.S.S.S.7.q Z C.l.>.*.&.% $ * $ # # # # # * $ % %.-.;.l.A.I x t ",
+"S.S.S.S.7.q S A.@ * A.I x t ",
+"S.S.S.S.7.q h Z.@ O A.P x t ",
+"S.S.S.S.7.q a Z.@ + A.P x t ",
+"S.S.S.S.7.q t A.& %.A.P x r ",
+"S.S.S.S.7.q p b.b.3.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.2.b.A.K x 1 ",
+"S.S.S.S.7.q x q.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.z.v x 2 ",
+"S.S.S.S.7.0 x x H J P P P I I I P P P P I I I P P P J H M x x , ",
+"S.S.S.S.S.9 x x x x x x x x x x x x x x x x x x x x x x x x x 8 ",
+"S.S.S.S.S.:.7 < ; r t t t r t t t t t t t t r r t t r : 1 , 8 :."
+};
diff --git a/kommander/editor/pics/large/connecttool.xpm b/kommander/editor/pics/large/connecttool.xpm
new file mode 100644
index 00000000..8a13ff93
--- /dev/null
+++ b/kommander/editor/pics/large/connecttool.xpm
@@ -0,0 +1,187 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 149 2",
+" c #101021217b7b",
+". c #181829297b7b",
+"X c #292931317b7b",
+"o c #39394a4a7b7b",
+"O c #7b7b08080808",
+"+ c #7b7b18181818",
+"@ c #7b7b21212121",
+"# c #000008089494",
+"$ c #00001010a5a5",
+"% c #00001818b5b5",
+"& c #00001818bdbd",
+"* c #101021218484",
+"= c #181829299c9c",
+"- c #10102929adad",
+"; c #18182929adad",
+": c #21213131adad",
+"> c #21213939bdbd",
+", c #00001818efef",
+"< c #00002121d6d6",
+"1 c #00002121dede",
+"2 c #10102929d6d6",
+"3 c #10103131cece",
+"4 c #18183939c6c6",
+"5 c #00002121e7e7",
+"6 c #00002121efef",
+"7 c #00002929efef",
+"8 c #00002121f7f7",
+"9 c #00002929f7f7",
+"0 c #00002929ffff",
+"q c #08082929f7f7",
+"w c #08083131f7f7",
+"e c #08083131ffff",
+"r c #10103131efef",
+"t c #10103131f7f7",
+"y c #10103939ffff",
+"u c #18183939ffff",
+"i c #29294242bdbd",
+"p c #31314242b5b5",
+"a c #31314242bdbd",
+"s c #31314a4abdbd",
+"d c #39394a4abdbd",
+"f c #39395252bdbd",
+"g c #18184242ffff",
+"h c #21214242efef",
+"j c #21214a4affff",
+"k c #29295252ffff",
+"l c #31315252ffff",
+"z c #39396363ffff",
+"x c #4a4a52528c8c",
+"c c #52525a5a8484",
+"v c #4a4a5a5abdbd",
+"b c #52526363b5b5",
+"n c #7b7b7b7b9494",
+"m c #6b6b7373b5b5",
+"M c #42425252d6d6",
+"N c #4a4a6363d6d6",
+"B c #52527373ffff",
+"V c #63637b7bffff",
+"C c #7b7b8484b5b5",
+"Z c #73739494ffff",
+"A c #73739c9cffff",
+"S c #7b7ba5a5ffff",
+"D c #848408080808",
+"F c #9c9c08080808",
+"G c #848431312929",
+"H c #848439393939",
+"J c #8c8c39393131",
+"K c #a5a508080808",
+"L c #adad08080808",
+"P c #b5b508080808",
+"I c #bdbd10101010",
+"U c #b5b531313131",
+"Y c #84844a4a4242",
+"T c #949442424242",
+"R c #94944a4a4a4a",
+"E c #9c9c4a4a4a4a",
+"W c #949452525252",
+"Q c #94945a5a5a5a",
+"! c #9c9c5a5a5a5a",
+"~ c #9c9c6b6b6b6b",
+"^ c #adad73737373",
+"/ c #bdbd63636363",
+"( c #bdbd73737373",
+") c #c6c610101010",
+"_ c #c6c618181818",
+"` c #cece10101010",
+"' c #cece18181818",
+"] c #d6d610101010",
+"[ c #dede10101010",
+"{ c #dede18181818",
+"} c #c6c621212121",
+"| c #cece21212121",
+" . c #cece31313131",
+".. c #dede31313131",
+"X. c #e7e710101010",
+"o. c #e7e718181818",
+"O. c #efef10101010",
+"+. c #efef18181818",
+"@. c #f7f710101010",
+"#. c #f7f718181818",
+"$. c #ffff18181818",
+"%. c #efef21212121",
+"&. c #e7e731313131",
+"*. c #f7f721212121",
+"=. c #ffff21212121",
+"-. c #ffff29292929",
+";. c #cece52525252",
+":. c #d6d642424242",
+">. c #dede42424242",
+",. c #d6d65a5a5a5a",
+"<. c #cece63636363",
+"1. c #ffff4a4a4a4a",
+"2. c #ffff5a5a5a5a",
+"3. c #ffff63636363",
+"4. c #ffff6b6b6b6b",
+"5. c #ffff73737373",
+"6. c #8c8c84849494",
+"7. c #9c9c84848484",
+"8. c #94948c8c9c9c",
+"9. c #8c8c9494b5b5",
+"0. c #94949494adad",
+"q. c #9c9c9c9cadad",
+"w. c #94949494b5b5",
+"e. c #94949c9cb5b5",
+"r. c #9c9ca5a5b5b5",
+"t. c #9c9ca5a5bdbd",
+"y. c #adad8c8c8c8c",
+"u. c #adad94949494",
+"i. c #adad9c9c9c9c",
+"p. c #bdbd8c8c8c8c",
+"a. c #a5a5a5a5adad",
+"s. c #adada5a5a5a5",
+"d. c #adadadada5a5",
+"f. c Gray68",
+"g. c #a5a5adadb5b5",
+"h. c #b5b5adadadad",
+"j. c Gray71",
+"k. c #b5b5bdbdbdbd",
+"l. c #bdbdb5b5b5b5",
+"z. c Gray74",
+"x. c #8484adadffff",
+"c. c #bdbdc6c6c6c6",
+"v. c #ffffa5a5a5a5",
+"b. c #ffffb5b5b5b5",
+"n. c #ffffbdbdbdbd",
+"m. c #c0c0c0c0c0c0",
+"M. c #c6c6c6c6c6c6",
+"N. c #ffffc6c6c6c6",
+"B. c None",
+/* pixels */
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.l./ .| | ' | ' _ } U ! y.z.B.B.e.v d s a s d i p f b m 0.z.B.",
+"z.,.3.5.5.5.4.4.3.2.1.%.[ L R j.k.h l l k j u y w t w 7 5 % x z.",
+"( 1.b.n.n.n.N.N.n.b.v.4.-.{ L G i.N V Z Z S x.x.A V B z j 7 # n ",
+">.$.#.*.#.*.*.=.*.*.#.*.%.+.{ L @ 6.3 , 8 7 q r t t w q 7 6 % o ",
+"&.#.+.+.+.+.+.o.+.X.o.o.o.o.o.' P J 6.4 5 5 5 5 5 5 5 5 5 1 & X ",
+"..#.+.o.o.o.o.o.o.o.o.o.o.o.o.o.{ K G 8.i 5 5 5 5 5 5 5 1 1 & . ",
+"..#.o.o.o.o.o.{ o.o.o.{ o.o.o.o.o.' K Y a.> 5 1 5 1 5 1 5 < & . ",
+">.+.o.o.o.o.{ o.o.o.{ o.o.{ { o.o.o.` O i.q.< 5 1 5 1 5 1 1 & ",
+":.#.+.o.o.o.o.o.{ { o.{ { X.o.{ { { ' D s.z.2 5 5 1 5 1 1 1 & * ",
+";.#.o.o.o.{ o.{ o.[ o.{ o.{ { [ { ] I Y B.w.9 6 5 1 5 5 1 < & * ",
+"<.@.o.o.{ o.{ X.{ o.{ { [ { { { ' I + h.t.r e 7 5 5 1 5 1 1 & ",
+"( O.o.o.o.[ { o.{ { [ o.{ { [ _ L @ f.9.9 g w 5 5 5 1 5 1 < & . ",
+"p.+.o.{ { { { { [ { { { { { ` K + d.r.q g u 5 5 5 1 5 1 1 1 % X ",
+"h.{ X.{ [ { ' { { { ' [ ' ` K @ s.g.q y t 5 5 5 1 5 1 5 1 < $ c ",
+"c.^ ) ) ) ) ) ) ) ` ` ) ) F H f.B.M 0 q 5 1 5 1 5 1 1 1 < & . f.",
+"B.c.u.~ Q W E R T T R W Q 7.z.B.M.C s : ; = - - - - - - = x a.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.",
+"B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B."
+};
diff --git a/kommander/editor/pics/large/customwidget.xpm b/kommander/editor/pics/large/customwidget.xpm
new file mode 100644
index 00000000..bc56d75a
--- /dev/null
+++ b/kommander/editor/pics/large/customwidget.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 3 1",
+" c #a1a1c4c41010",
+". c #c0c0c0c0c0c0",
+"X c None",
+/* pixels */
+"XXXXXXXXXXXX XXXXXXXXXXXXX",
+"XXXXXXXXX XXXXXXXXXX",
+"XXXXXXX XXXXXXXX",
+"XXXXXX XXXXXX",
+"XXXXX XXXXX",
+"XXXX XXXX",
+"XXX XXXXXXXX XXX",
+"XX XXXXXXXXXXXX XXX",
+"XX XXXXXXXXXXXXXX XX",
+"XX XXXXXXXXXX XXXX XX",
+"X XXXXXXXXXX XXXX X",
+"X XXXXXXXXX XXX X",
+"X XXXXXXXXX XXX X",
+" XXXXXXXX XXX ",
+" XXXXXXXX XXXX ",
+" XXXXXX XXXXX ",
+" XXXXXX XXXXXX ",
+" XXXX XXXX ",
+"X XXXX XXX ",
+"X XXX XX X",
+"X XXX X",
+"X XXXX XX X",
+"XX XXXX XXXX X",
+"XX XXXXXXXXXX XX",
+"XXX XXXXXXXXXX XX",
+"XXX XXXXXXXX XX",
+"XXXX X",
+"XXXXX ",
+"XXXXXX ",
+"XXXXXXXX X X",
+"XXXXXXXXXX XXXX XXX",
+"XXXXXXXXXXXXX XXXXXXXX XXX"
+};
diff --git a/kommander/editor/pics/large/datepicker.xpm b/kommander/editor/pics/large/datepicker.xpm
new file mode 100644
index 00000000..f815c73e
--- /dev/null
+++ b/kommander/editor/pics/large/datepicker.xpm
@@ -0,0 +1,121 @@
+/* XPM */
+static char *datepicker[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 93 2",
+" c black",
+". c gray1",
+"X c #060606",
+"o c gray3",
+"O c #0B0B0B",
+"+ c #131313",
+"@ c #151515",
+"# c #191919",
+"$ c gray10",
+"% c #1B1B1B",
+"& c #1D1D1D",
+"* c #280000",
+"= c #002129",
+"- c #00222B",
+"; c #00232B",
+": c #00232C",
+"> c #00242D",
+", c gray14",
+"< c gray15",
+"1 c #3A3A3A",
+"2 c #3C3C3C",
+"3 c #0F3944",
+"4 c #205766",
+"5 c #485356",
+"6 c gray36",
+"7 c #596061",
+"8 c #6C6C6C",
+"9 c gray44",
+"0 c #C01D1D",
+"q c #C83939",
+"w c #D05555",
+"e c #D87272",
+"r c #0061AC",
+"t c #7F8B8E",
+"y c #5595CB",
+"u c #72A7D4",
+"i c #808080",
+"p c gray53",
+"a c #8E8E8E",
+"s c #929292",
+"d c #929EA1",
+"f c #AAAAAA",
+"g c #A3AFB2",
+"h c #A7ADB2",
+"j c #A6B2B5",
+"k c #A7B3B6",
+"l c #A9B5B8",
+"z c #B0B1B0",
+"x c #B1B1B0",
+"c c #B1B1B1",
+"v c #B2B2B2",
+"b c #B6B6B6",
+"n c #B0B6BB",
+"m c #B9B9B9",
+"M c #B9BABB",
+"N c #BFB8BF",
+"B c #DF8E8E",
+"V c #E7AAAA",
+"C c #8DB7D8",
+"Z c #8EB8DC",
+"A c #B8BFC5",
+"S c #AACAE5",
+"D c #C2C3C4",
+"F c #C8CFD0",
+"G c #CAD4DC",
+"H c gray82",
+"J c #D0D6D7",
+"K c #D1D8D9",
+"L c #D2D9DA",
+"P c gainsboro",
+"I c #EAC1C1",
+"U c #EFC7C7",
+"Y c #E7D2D2",
+"T c #EFDADA",
+"R c #C7DCEE",
+"E c #DDE9F3",
+"W c #E1E2E3",
+"Q c gray90",
+"! c #E6E6E6",
+"~ c gray91",
+"^ c #E9E9E9",
+"/ c gray92",
+"( c #EEEEEE",
+") c #F7E3E3",
+"_ c #E3EDF6",
+"` c #F3F3F3",
+"' c #F4F4F4",
+"] c gray98",
+"[ c #FBFBFB",
+"{ c gray99",
+"} c #FEFEFE",
+"| c gray100",
+" . c None",
+/* pixels */
+" . . .3 > > > > > > > > > > > > > > 3 . . .",
+" .4 > 5 1 < % $ $ $ $ $ $ $ $ # @ , 8 > 4 .",
+" .> 5 8 , + | 2 o o o o | 2 o o X & m d > .",
+"3 5 8 m & O P 6 P 6 i s ( } l 3 ",
+"> 7 a ( s p z i i i 9 N i i i m | | K > ",
+"> 8 f ] | | . ] I T ' * Y / ^ ( | | [ > ",
+"> 8 b | | | | | | w w | | 0 V | | | | | ` > ",
+"> 8 b | | r r | | w w | U q V | r r | | W : ",
+"> 8 b | r r r | | w B U e e V | r r r E A - ",
+"> 8 b C r r r | | w ) e q V V | r r r C h = ",
+"> 8 b | C r r | | w | w e V V | r r C | D = ",
+"> 8 b x x C C x | U | U ) ) ) x C C x x ~ ; ",
+"> 8 b | | | | x | _ _ | _ S _ x | | | | G ; ",
+"> 8 b | | | | x | y S | y S y x | | | | n = ",
+"> 8 b x x x x x R Z S x R | y x x x x x M = ",
+"> 8 b | | | | x | S S | | R u x | | | | H - ",
+"> 8 b | | | | x | S S | _ u | x | | | | Q : ",
+"> 7 v { | | | x | S S | y S S x | | | | F > ",
+"3 5 c x x x x x x _ _ x S S S x x x x ! j 3 ",
+" .> t | | | | x | | | | | | | x | | ^ g > .",
+" .4 > l L | | x | | | | | | | x } J k > 3 .",
+" . . .3 > > > > > > > > > > > > > > 3 . . ."
+};
diff --git a/kommander/editor/pics/large/dial.xpm b/kommander/editor/pics/large/dial.xpm
new file mode 100644
index 00000000..fe28e2a1
--- /dev/null
+++ b/kommander/editor/pics/large/dial.xpm
@@ -0,0 +1,51 @@
+/* XPM */
+static char *dial[]={
+"32 32 16 1",
+"h c #764cf3",
+"# c None",
+"m c #3e05e9",
+"n c #6f56bb",
+"g c #8b68f2",
+"a c None",
+"i c #c4b6ec",
+"j c #472d93",
+"b c #d3d6da",
+"c c #a4a4a5",
+". c None",
+"f c #353535",
+"e c #606060",
+"l c #b19dee",
+"d c #8a7eab",
+"k c #4203fe",
+"..........#abcdeeedcba#.........",
+"........#abdefffffffedca#.......",
+"......#aceffffeecdeefffecb#.....",
+".....#acfffedbbbbbbbcefffdb#....",
+"....#acffecbbbghhhgibbceffdb#...",
+"...#bcffdbbigcjkkkkkhlbbcffdb#..",
+"..#bcffebihkmcemkkkkkkhibcffdb#.",
+"..acffebihkkkccjkkkkkkkkibdffca.",
+"..befebihkkkkcbemkkkkkkkkibefeb.",
+".#bffcbhkkkkkcbcjkkkkkkkkhbcffc#",
+".acffbikkkkkkdbbemkkkkkkkklbefea",
+"#befebgkkkkkkdbbcjkkkkkkkkhbcffb",
+"acffcbkkkkkkkdbbbemkkkkkkkklbefd",
+"adfeblkkkkkkknbbbcjkkkkkkkkgbdfe",
+"befebgkkkkkkknbbbbemkkkkkkkhbcfe",
+"befcbhkkkkkkknbbbbcjkkkkkkkkbcff",
+"befdbhkkkkkkkmccccdjkkkkkkkhbcff",
+"befebgkkkkkkkkmmmkkkkkkkkkkhbcfe",
+"acfebikkkkkkkkkkkkkkkkkkkkklbefe",
+"#bffcbhkkkkkkkkkkkkkkkkkkkkbbffc",
+"#befeblkkkkkkkkkkkkkkkkkkkgbcfeb",
+".acffbbhkkkkkkkkkkkkkkkkkkibefca",
+".#befdbikkkkkkkkkkkkkkkkklbcffb#",
+"..acffcblkkkkkkkkkkkkkkkgbbefea.",
+"..#befecblkkkkkkkkkkkkkgbbefeb#.",
+"...abefecbihkkkkkkkkkhlbbefeca..",
+"....abefecbbigkkkkkgibbcefeca...",
+".....#beffecbbbiiibbbceffeca....",
+"......#beffffdcbbbcdefffeca.....",
+".......#acdfffffefffffecb#......",
+".........#abcefffffecba#........",
+"...........#abbbbbbaa#.........."};
diff --git a/kommander/editor/pics/large/disabled/adjustsize.xpm b/kommander/editor/pics/large/disabled/adjustsize.xpm
new file mode 100644
index 00000000..1cc64ae8
--- /dev/null
+++ b/kommander/editor/pics/large/disabled/adjustsize.xpm
@@ -0,0 +1,51 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 13 1",
+" c #767676767676",
+". c Gray49",
+"X c Gray53",
+"o c Gray56",
+"O c #979797979797",
+"+ c #9f9f9f9f9f9f",
+"@ c #a7a7a7a7a7a7",
+"# c #afafafafafaf",
+"$ c #b7b7b7b7b7b7",
+"% c Gray75",
+"& c #c0c0c0c0c0c0",
+"* c #c5c5c5c5c5c5",
+"= c None",
+/* pixels */
+"===========%%%%*%$$%%===========",
+"===========%%%%%$##%%===========",
+"===========%%$$$@@$%%===========",
+"==========%*%$#@@+#%*%==========",
+"=========*%%%$##+@#%%%*=========",
+"=========%%%$$##@@##%%%=========",
+"========%*%$$$##@++@$%*%========",
+"=========%%$#@@@@Oo+#%%=========",
+"=========*%$#+++Ooo@#%%=========",
+"====%*%%%%%%$@+OooO#%%%%*%*%====",
+"===%%%%%%%%%$#+ooO#$%%*%%%%%%===",
+"%%%*%%%%%%*%%$#+O@#%%%%%%%%%%*%%",
+"%%%%%%$$$%%%%$#@+@#$%%%%%%%%%%%%",
+"%%%%%$$$#$$$$@@#@++@$%%**%$%%%$$",
+"$%$%$%$$#@###@#%$Oo+#%**%$$$$##@",
+"$$$$$$##@++@+@$*$+Xo@#$$#@@@#@+X",
+"@#@@@@@++oO++O@#@o.XO@@@+++++OX.",
+"@++++++OooO@+OooX..o+@OOoOO++Ooo",
+"##@##@OXoO@#@OX....O@#+OoO+#@#@@",
+"%$$%$#+O+#$$$@Oo.XO@$$#@OO#$%$$%",
+"%%%%%$#@#$%%%$@+++@$%%%$##$%%%%%",
+"%%*%%%$%%%%%%%%$#@$$%%%%%$%%%%%%",
+"====%%%%%%%*%%%%#@@$%%%%%%%%%===",
+"=====%%%%%*%%**$@++#$%%%%%%%====",
+"=========%%%%%%#@OO+#%%%========",
+"=========%%%$$#@OOO+#%%*========",
+"=========%%%%$@+OO+#$%%%========",
+"=========%%%%$#+OO@$%%%%========",
+"==========%%%$#+OO#$%%%=========",
+"===========%%$@OoO@%%%==========",
+"===========%%$@oXo@$%%==========",
+"===========%%#+. X@%%%=========="
+};
diff --git a/kommander/editor/pics/large/disabled/connecttool.xpm b/kommander/editor/pics/large/disabled/connecttool.xpm
new file mode 100644
index 00000000..8d2f32b2
--- /dev/null
+++ b/kommander/editor/pics/large/disabled/connecttool.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 19 1",
+" c #373737373737",
+". c #3f3f3f3f3f3f",
+"X c Gray28",
+"o c Gray31",
+"O c Gray34",
+"+ c #5f5f5f5f5f5f",
+"@ c #676767676767",
+"# c #6f6f6f6f6f6f",
+"$ c #777777777777",
+"% c Gray",
+"& c Gray53",
+"* c #8e8e8e8e8e8e",
+"= c #979797979797",
+"- c #9f9f9f9f9f9f",
+"; c #a4a4a4a4a4a4",
+": c Gray68",
+"> c #b6b6b6b6b6b6",
+", c #c0c0c0c0c0c0",
+"< c None",
+/* pixels */
+"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<",
+"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<",
+"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<",
+"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<",
+"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<",
+"><<><<><<><<><<<><<><<><<><<><<>",
+"<><>>>>>>>>>>>><<>>>>>>>>>>>>><<",
+">>>:::::::;::>>>>>:;;;;;-;;;:>>>",
+">:;-====***&*=;::-&&%%$%$$$%&*-:",
+";-----=-==*%$$&*=&$#####@@@++@$=",
+"=*=------=*&$##$$$####$##@+OOoO#",
+"%&&&*****&%%##@@@@@++++++OOoXXXo",
+"$$$$$$$$$$$###@+++++OooXXXXXX...",
+"$$#$##########@@@++@+oXXXXX... ",
+"$##########@###@@@++#+oX..X... ",
+"$$###@##@#@##@##@++#$$OXX.... ",
+"$########@#@##@@#@@#&%+X.X.... ",
+"%$###@#@#@#@@@#@@+@$&$+oX.X... ",
+"%$##@#@#@#@##@@@+@#%$#OXX..X. ",
+"&$##@#@@#@#@@@@++#$$#OoX.X.... ",
+"*%##@@@@@@@@@@++#$$@OoXX...X....",
+"-&#@@@@@@@@@@+@$%%#OooXX.X....o+",
+":=%$##@#@@#@@#%*=&#OooXXoXXXXO@&",
+">:=*&%%%%%%%&*-:;=%#@@@@@@@@#$*;",
+">>>;;;;;;;;;;:>>>:--=========-:>",
+"<>>>>>>>>>>>>><><>>>>>>>>>>>>>><",
+"<<<<<<<<<><<<<<<<<<<><><>>>><<<>",
+"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<",
+"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<",
+"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<",
+"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<",
+"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
+};
diff --git a/kommander/editor/pics/large/disabled/editbreaklayout.xpm b/kommander/editor/pics/large/disabled/editbreaklayout.xpm
new file mode 100644
index 00000000..c43703c3
--- /dev/null
+++ b/kommander/editor/pics/large/disabled/editbreaklayout.xpm
@@ -0,0 +1,54 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 16 1",
+" c #565656565656",
+". c #5f5f5f5f5f5f",
+"X c #676767676767",
+"o c #6f6f6f6f6f6f",
+"O c #777777777777",
+"+ c Gray50",
+"@ c Gray53",
+"# c Gray56",
+"$ c #979797979797",
+"% c #9f9f9f9f9f9f",
+"& c #a7a7a7a7a7a7",
+"* c #afafafafafaf",
+"= c #b7b7b7b7b7b7",
+"- c Gray75",
+"; c Gray78",
+": c #cdcdcdcdcdcd",
+/* pixels */
+";;;;;:;:;:;:;;----;;:;:;:;:;;;;;",
+"-;;::;:::::::;----;;:::::;:::;;-",
+";;;:;;;;;::::;----;::::::;;;::;;",
+"--;-=**--;;;;------;;;;;-==-;;;-",
+"-=*&%##$**==*=======*==*&&&&***-",
+"=%$@OOO+#$$$%%&==*%%$%%%$##@@#&*",
+"*$OoXXXoOO+++#%*=%#@++@##@OXXO#*",
+"*@oX.XXXXXoXO+%**%@OoO+@@oX .o#&",
+"*$@+OooXXX.Xo@%==&@+O+@@oXXoO@$*",
+"=*&%$#OoXXXo+$&==*%#@@+OXo@$%&*=",
+"--===&$+XXXoO#&==*&$#@OXO#%*==--",
+"-----=&$OoXoo+#&&&$$@oXo#&=-----",
+";-;;;;-*$+oXXo+#$%$@ooO#*=;;;;-;",
+"-;;;;;;-*%@oooo+##+ooO$*-;;;;;;-",
+"-;;;:;;;-=%@oXoO@+oXO$*-;;;;;;;;",
+";--;---;--*#+OOOOoXX@&=-;-;-;---",
+"-********&&$@@+OoX.o@%*********-",
+"=%$#$$#$#$###@OXXXXoO@##$#$#$$%*",
+"*$+++O+O++@#@OoXXXXXooOOOOO+++#*",
+"*#+OOOOoO+@@OooO+OoXXXXXXOOOO+#*",
+"=%$###@++@@Ooo+$%@OoXXXXo+@##$%=",
+"-=**&%$$#@OXo@%*=&#OoXXXO#%&**=-",
+"--==*&%#@OXo@%*-==&#OXXoo+#&*=--",
+"--=*&%$@OXo@&=---==&#OoXoO+$&=--",
+"--=&%#@OXO#&--------*$OoXoo@$=--",
+";--&%@oXO#*-;;----;;-*$+oXoO$*-;",
+"-;-*$+XO#*-;;;----;;;;*$+oo+%=-;",
+"-==*$OO@%*=--===-===-==&#OO#%=--",
+"=*&$#++#$&&&%&*==*&&&%%%#@@#%%*=",
+"*$@@@++@@@@@##%=*&#@@@@@+++@@@$*",
+"&@OooooXooooo+$**$+ooooooooooO@&",
+"%+.. . ... .o#**$O. . . ..+&"
+};
diff --git a/kommander/editor/pics/large/disabled/editcopy.xpm b/kommander/editor/pics/large/disabled/editcopy.xpm
new file mode 100644
index 00000000..8138eabd
--- /dev/null
+++ b/kommander/editor/pics/large/disabled/editcopy.xpm
@@ -0,0 +1,69 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 31 1",
+" c #0e0e0e0e0e0e",
+". c #151515151515",
+"X c Gray12",
+"o c #272727272727",
+"O c #2f2f2f2f2f2f",
+"+ c #373737373737",
+"@ c #3f3f3f3f3f3f",
+"# c #464646464646",
+"$ c Gray31",
+"% c #565656565656",
+"& c #5d5d5d5d5d5d",
+"* c Gray40",
+"= c #6f6f6f6f6f6f",
+"- c Gray46",
+"; c Gray",
+": c #818181818181",
+"> c Gray56",
+", c #959595959595",
+"< c #9f9f9f9f9f9f",
+"1 c #a7a7a7a7a7a7",
+"2 c #afafafafafaf",
+"3 c #b7b7b7b7b7b7",
+"4 c Gray75",
+"5 c #c0c0c0c0c0c0",
+"6 c #c6c6c6c6c6c6",
+"7 c #cececececece",
+"8 c Gray84",
+"9 c #dddddddddddd",
+"0 c #e6e6e6e6e6e6",
+"q c Gray93",
+"w c None",
+/* pixels */
+"33233233233344wwwwwwwwwwwwwwwwww",
+"::::::::::>,134wwwwwwwwwwwwwwwww",
+"@#$$$%$%$$#%;134wwwwwwwwwwwwwwww",
+".o#%&&&&%#Oo$-134wwwwwwwwwwwwwww",
+" @;123321;@Xo$;<34wwwwwwwwwwwwww",
+".#<8000q81$oO+$;134444444wwwwwww",
+".$20qqqq02%@$#@$;<23333344wwwwww",
+".$18643682&#&%+O$->>>>><244wwwww",
+".$14>==,41*@##++@%&*&&&*:134wwww",
+".$13,==>44;%@@%&*=-==&##&:144www",
+".$173113762;%&>234342>%+#*:144ww",
+".$1741<121<;%*29qqq092*@#$*:144w",
+".$13>=&*&*&$#=30qqqq03=%*%$*:134",
+".$14>=*&*&&$#*38633683=&=*##&:24",
+".$1731<<<<,-&=24>-=,43-%%%#+#=<3",
+".$1741<<<<,-&=24>==>64,-==*%#&>3",
+".$13>=&*&&&%#=3741137742121:&&,3",
+".$<4>=*&*&&$#*3741<1221<1362=*>3",
+".#<431<<<<,;%=24>=&*&&&*=>42=*>3",
+" +-<<<<<<<,-%=24>=**&***=>42=*>3",
+".o#%&&&&&%%$#=3731<<<<<<1473=*>3",
+"@#$$$$$$$$$#@*3741<<<<<<1373=*,3",
+"::::::::::;*$=24>=&*&&*&=>42=*>3",
+"33333333332:&=24>=**&*&*=>42=*>3",
+"44444444442,*=1631<<1<1<1361=*>3",
+"wwwwwwwww43>&&>121111111121>&&>3",
+"wwwwwwwww43,&$&====-===-===&$*,3",
+"wwwwwwwww43<-&&&**********&&&-<3",
+"wwwwwwwww442<,,,>,>>>,>>>,,>,<24",
+"wwwwwwwwww4433333333333333333344",
+"wwwwwwwwwww44444444444444444444w",
+"wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"
+};
diff --git a/kommander/editor/pics/large/disabled/editgrid.xpm b/kommander/editor/pics/large/disabled/editgrid.xpm
new file mode 100644
index 00000000..55f7ca93
--- /dev/null
+++ b/kommander/editor/pics/large/disabled/editgrid.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 11 1",
+" c Gray53",
+". c Gray56",
+"X c #979797979797",
+"o c #9f9f9f9f9f9f",
+"O c #a7a7a7a7a7a7",
+"+ c #afafafafafaf",
+"@ c #b7b7b7b7b7b7",
+"# c Gray75",
+"$ c #c0c0c0c0c0c0",
+"% c Gray78",
+"& c None",
+/* pixels */
+"&&###@#@OXX+@##&&&###@@@OXX+##&&",
+"&&##@@#@O..O###&&&##@@#+O.XO@##&",
+"#####@@@OXXO@#%######@@@O..+##%#",
+"#%###@#@O..O#####%##@@@@O.XO@###",
+"#######@OXXO@########@#@OXX+@###",
+"#%#%####+oo+#%#%#%#####@Ooo@##%#",
+"#%%%%%%#++@#%%%%%%%%%%##++@#%%#%",
+"##%%%%##@@##%#%#%#%%####@@######",
+"+O+O+O+@@++O++++++O++++@++O+O+OO",
+"X....XO+Oo...........oO+Oo......",
+"... XO+O. ........XO+O. ...",
+"+OOoOO+@+X .oOOOOOOOOO@@O. XoOOO",
+"@@@@@+@@+. o+@@@@@@@@@@@O..O@@@#",
+"####@@#@+X.o@#######@@@@OX.O@###",
+"#####@@@OX.O@########@@@O.XO###%",
+"&&###@#@+X.o@##&&&##@@#@OX.O@##&",
+"&&###@#@+X.o@##&&&###@@@O.XO###&",
+"&&###@@@+X.o@##&&&##@@@@OX.O@##&",
+"#######@+X.o@########@#@O..O####",
+"#####@@@+X.o@#######@@@@OX.O@###",
+"####@##@+o.o+#######@@@@OXXO@###",
+"########+Oo+@##########@+oo+####",
+"@##%%#%#@++##%#%%%%%%#%#@++##%#%",
+"@@%######@@############@@@@####@",
+"+OOOOO++@+OOOOOOOOoOOO+@++oOoOoO",
+"OXX...oO+o. .........Xo++X......",
+"Oo....o+Oo ........XO+OX ...X",
+"@+OOOO+@+X .oOO+O+O+OO@@O. XOO++",
+"##@#@@@@+o.X+@#@#@@@@@@@+X.o@@@#",
+"#####@@@+o.o+########@@@OX.O@###",
+"&&###@@@+o.o+##&&&##@@#@OX.O###&",
+"&&#%#@@@+oXo+##&&&###@@@OXXO@##&"
+};
diff --git a/kommander/editor/pics/large/disabled/editpaste.xpm b/kommander/editor/pics/large/disabled/editpaste.xpm
new file mode 100644
index 00000000..150c4fb2
--- /dev/null
+++ b/kommander/editor/pics/large/disabled/editpaste.xpm
@@ -0,0 +1,69 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 31 1",
+" c #070707070707",
+". c Gray6",
+"X c Gray9",
+"o c Gray12",
+"O c #272727272727",
+"+ c #2f2f2f2f2f2f",
+"@ c #373737373737",
+"# c #3e3e3e3e3e3e",
+"$ c Gray28",
+"% c Gray31",
+"& c Gray34",
+"* c #5f5f5f5f5f5f",
+"= c #676767676767",
+"- c #6f6f6f6f6f6f",
+"; c #777777777777",
+": c Gray50",
+"> c #818181818181",
+", c Gray56",
+"< c #939393939393",
+"1 c #9f9f9f9f9f9f",
+"2 c #afafafafafaf",
+"3 c #b6b6b6b6b6b6",
+"4 c #bebebebebebe",
+"5 c #c0c0c0c0c0c0",
+"6 c Gray78",
+"7 c Gray81",
+"8 c #d3d3d3d3d3d3",
+"9 c #dddddddddddd",
+"0 c #e7e7e7e7e7e7",
+"q c #efefefefefef",
+"w c None",
+/* pixels */
+"wwwwwwww443333333344wwwwwwwwwwww",
+"w444444431<>>>>>><144444444wwwww",
+"443333321:&$$%$$$&:123333344wwww",
+"41<>>>>:-$Oo+##+oO$-:>>>><134www",
+"1:*%$$$#+oXO%;;%OXX+#$$$%*:144ww",
+"-%++@@+OX.O%:,,:%OXXO+@@+@%:144w",
+"+O@$&%$+o+%:>;;>:%Oo+$%&$@@*<34w",
+"Xo$=-=$++%:1>==>1>%++%*-=$+$,34w",
+".O%-;*@O#-<1<>><1<-#+@*;-&@$>24w",
+" O&-;&@O$=>>::::>:=$O+&;-&@$>34w",
+".O&;-*+O+#$$$$$$$$#+O@*-;&@$>24w",
+" O&-;=$++@@@@@@@@@@++#*;-&@$>34w",
+".O&;;-**&&&&%%%%%%%%&*---&@$>34w",
+".O&;::;;;;--**&&*&*&&****$+$>34w",
+" O&;;:::;:;=%$$%%%%%%%%$#+O$>24w",
+".O&-::::::;=$#*==--=--=&#OO$>34w",
+".O&;::;:::;*%&,24434432,%++$;144",
+".O&-:::::;;=%=290qqqq092=#$$=>14",
+" O&;::::::;*%-30qqq0qq03-&=&%=>1",
+".O&;;:::::;=%-3974444793;&==$#*:",
+".O&;:::;:;;*%-261>;;>163;&*&$@#$",
+".O&-::::::;*%-261:;;:166,;--=%#+",
+" O&;::::::;=%-376222248842122>%+",
+".O%-;:;::;;*%=3842212233223462*+",
+"Xo$=-;;-;--*$-261:;;;;;;;;:142=+",
+"+O@$&&&&&*&$$=241:;;;;;;;;:162=+",
+"-$@+@@@@@@@+@=1742221212122461*@",
+"1:&$$$$$$$##@&<12221222122122,%+",
+"31<,>>>>>>:-%$*----;---;--;--*$+",
+"44333333322<-**=============**&&",
+"w444444444421<,,,,,,,,,,,,,,,,,,",
+"wwwwwwwwww4433333333333333333333"
+};
diff --git a/kommander/editor/pics/large/disabled/editslots.xpm b/kommander/editor/pics/large/disabled/editslots.xpm
new file mode 100644
index 00000000..25c68514
--- /dev/null
+++ b/kommander/editor/pics/large/disabled/editslots.xpm
@@ -0,0 +1,65 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 27 1",
+" c #373737373737",
+". c #3f3f3f3f3f3f",
+"X c #464646464646",
+"o c #4e4e4e4e4e4e",
+"O c Gray34",
+"+ c #5f5f5f5f5f5f",
+"@ c #676767676767",
+"# c #6f6f6f6f6f6f",
+"$ c #777777777777",
+"% c Gray50",
+"& c Gray53",
+"* c Gray56",
+"= c #979797979797",
+"- c #9f9f9f9f9f9f",
+"; c #a7a7a7a7a7a7",
+": c #afafafafafaf",
+"> c #b7b7b7b7b7b7",
+", c Gray75",
+"< c #c0c0c0c0c0c0",
+"1 c Gray78",
+"2 c Gray81",
+"3 c #d7d7d7d7d7d7",
+"4 c #dfdfdfdfdfdf",
+"5 c #e7e7e7e7e7e7",
+"6 c #efefefefefef",
+"7 c Gray97",
+"8 c None",
+/* pixels */
+"88888888888888888888888888888888",
+"88888888888888888888888888888888",
+"88888888888888888888888888888888",
+"88888888888888888888888888888888",
+"8888888,1,,,1,888888888888888888",
+"8888881,,,,,,,,88,1,,,,1,8888888",
+"88888,,,,1,,>,,,1,,,,,,,1,188888",
+"8888,1,,11,>;:,,,,,,>,>>,,,,8888",
+"8881,,11221;=;>,,,>>>::>>>,,1888",
+"88,,,112331;&->>>,>,>>:;;:>,,,88",
+"8,1,,123442-&=:,>,122,>;--;>,1,8",
+"1,,,1235552;*=:>,245431:-**;>,,1",
+",,,,1245663:=-:>2466652>-&&*:>,,",
+"1,1,1345664,-;;,2577763>-&$%->,,",
+"11,123456641:;;>2577752>-%@#=>,,",
+",,,113455542,;;>1456641:*$++&;>,",
+">::>,2344542,:-;>23431>-%@OO$=;:",
+"::::>,233332,:--;>,,,:-&#OXo$=-;",
+">>>:::,1121,,:=*=--;-=%#+XX+&;:>",
+",,>>:;;:>::>>:-*%%&&%$#OX.X$->>,",
+",,,>:==*===-;:;*$##@@Oo...@*:,,,",
+"8,,,:-&%%$$&-::-%@OooX. .+&;>,,8",
+"88,,>;*%@@+#*;>:-%@OoXoo#&;>,,88",
+"881,,>;&$+O+%;>>:-*%$#$&=:>,1888",
+"888,,,>;=%$$*:,,,>:;-;;:>,,,8888",
+"8888,,,>>;--;>,,,,,,>>>,,,,88888",
+"888888,,,>>>>,,88,,,,,,,,8888888",
+"8888888,,,,,,,888888888888888888",
+"88888888888888888888888888888888",
+"88888888888888888888888888888888",
+"88888888888888888888888888888888",
+"88888888888888888888888888888888"
+};
diff --git a/kommander/editor/pics/large/disabled/editvlayout.xpm b/kommander/editor/pics/large/disabled/editvlayout.xpm
new file mode 100644
index 00000000..fbc382f4
--- /dev/null
+++ b/kommander/editor/pics/large/disabled/editvlayout.xpm
@@ -0,0 +1,55 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 17 1",
+" c #5b5b5b5b5b5b",
+". c #676767676767",
+"X c #6f6f6f6f6f6f",
+"o c #777777777777",
+"O c Gray50",
+"+ c Gray53",
+"@ c #8e8e8e8e8e8e",
+"# c Gray59",
+"$ c #9f9f9f9f9f9f",
+"% c #a7a7a7a7a7a7",
+"& c #acacacacacac",
+"* c Gray71",
+"= c Gray75",
+"- c #c0c0c0c0c0c0",
+"; c Gray78",
+": c #cdcdcdcdcdcd",
+"> c None",
+/* pixels */
+">>>>>>;=;;;;;;;;;;;;;;;;;=>>>>>>",
+">>>>>>===;;;;;:;;;;;:;;==;>>>>>>",
+">>>>>>;=;;::::::::::::;;;=>>>>>>",
+">>>>>>=;==;;;;;;;;;;;;;===>>>>>>",
+">>>>>>===**************===>>>>>>",
+">>>>>>==*%$$$$$$$$$$$$%*==>>>>>>",
+">>>>>>==&#+OOOOOOOOOO+#&==>>>>>>",
+">>>>>>=*%+oooXoXoXoXoo+%==>>>>>>",
+">>>>>>;=&#+OOOOOOOOOO+#&*;>>>>>>",
+">>>>>>==*&%%%%%%%%%%%%&*==>>>>>>",
+">>>>>>>==*=****=**=***===>>>>>>>",
+">>>>>>=;==;=;;;;=;==;;==;=>>>>>>",
+">>>>>>;==;;;;;;;;;;;;;;===>>>>>>",
+">>>>>>==;;;;:::;;;;:;;;=;=>>>>>>",
+">>>>>>=;=;:::;:;:::;;;;==;>>>>>>",
+">>>>>>==;====;=;====;=====>>>>>>",
+">>>>>>==**&&&&&&&&&&&&**==>>>>>>",
+">>>>>>==*$##@#@#@#@#@#$*==>>>>>>",
+">>>>>>=*&#OOoOoOoOOoOO#&==>>>>>>",
+">>>>>>==&@OoOoooooooOO#&==>>>>>>",
+">>>>>>;=&%#@#@#@###@##%*==>>>>>>",
+">>>>>>===*&&*&*&&&*&&**==>>>>>>>",
+">>>>>>===================;>>>>>>",
+">>>>>>;==;;;;;;;;;;;;;;;==>>>>>>",
+">>>>>>==;;;;=;;=;;=;;=;===>>>>>>",
+">>>>>>==;;;;;;;:;;:;;;;;=;>>>>>>",
+">>>>>>;===;:;:;;;;;;:;;===>>>>>>",
+">>>>>>====*=*=*=====*=*===>>>>>>",
+">>>>>>==*%%$%$%$$$$$%%&*==>>>>>>",
+">>>>>>==&#@+++++++++++$&==>>>>>>",
+">>>>>>==%+XXXX.XXXXXXX+%==>>>>>>",
+">>>>>>=*$O. .o%*=>>>>>>"
+};
diff --git a/kommander/editor/pics/large/disabled/layout.xpm b/kommander/editor/pics/large/disabled/layout.xpm
new file mode 100644
index 00000000..f204e0ff
--- /dev/null
+++ b/kommander/editor/pics/large/disabled/layout.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 14 1",
+" c #676767676767",
+". c #6d6d6d6d6d6d",
+"X c #777777777777",
+"o c Gray50",
+"O c Gray53",
+"+ c Gray56",
+"@ c #979797979797",
+"# c #9f9f9f9f9f9f",
+"$ c #a7a7a7a7a7a7",
+"% c #afafafafafaf",
+"& c #b7b7b7b7b7b7",
+"* c Gray75",
+"= c Gray78",
+"- c Gray81",
+/* pixels */
+"***=*==*==*==*******==*==*==*=**",
+"====-==-==-===**&**=============",
+"*=-----------=****=-----------==",
+"===------=-===**&*==============",
+"*******&**&**&&*&&&&******&*&*&*",
+"&%$$$#$$$$$#$$%&&%$$$$#$$$$$#$%&",
+"%#+OO+OOOOO+O+#%&$@+OO+OOOOOO+#%",
+"%+ooXXXXXoXXXO@%%#OXXXXXXXXXXo+%",
+"&@OooooooooooO#%&$+ooooooooooO@%",
+"&%$#########$$%&&%$$###$####$#%&",
+"*&&&&&&&&&&&&&&***&&&&&&&&&&&&&*",
+"********************************",
+"****=*=*=*=****&****=*=**=******",
+"**=---=-=-=-==&***===-=-==-=-=*=",
+"*=-----------=*&**=----------===",
+"**==---=--=-=*&*&*=============*",
+"**&**&&**&*&&&&&&&&&&*&&&&&&&&&*",
+"&$$##$######$$$&&%$$##$$#$###$%&",
+"%#++OOOOOOOOO+#%%$++OOOOOOOOO+#&",
+"&@OooooooooooO#%&#+ooooooooooO@%",
+"&$@++++++++++@$&&$#++++++++++@$%",
+"*&%$$$$$$$$$$%&&*&%$$$$$$$$$%$&*",
+"*&&&&&&&&&&&&&&**&*&&&&&&&&&&&&*",
+"*&*&*&*&*&*&*&&****&********&***",
+"***=========***&***===*==*===***",
+"**=----------=&***==-------====*",
+"*==----------=*&**=----------===",
+"**==-==-=====*&&***===========**",
+"*%&&&&&%&&&&%%%&&&%&%&%&%&&%&%&*",
+"&$#@@@#@@@@#@#$&&$#@#@@@#@@#@#$&",
+"%#OooooooooooO@%%#+oXoooXooXoO#%",
+"&@X X+$%@X .+%"
+};
diff --git a/kommander/editor/pics/large/disabled/left.xpm b/kommander/editor/pics/large/disabled/left.xpm
new file mode 100644
index 00000000..6c32a0f5
--- /dev/null
+++ b/kommander/editor/pics/large/disabled/left.xpm
@@ -0,0 +1,59 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 21 1",
+" c Gray34",
+". c #5f5f5f5f5f5f",
+"X c #676767676767",
+"o c #6f6f6f6f6f6f",
+"O c #777777777777",
+"+ c Gray50",
+"@ c Gray53",
+"# c Gray56",
+"$ c #979797979797",
+"% c #9f9f9f9f9f9f",
+"& c #a7a7a7a7a7a7",
+"* c #afafafafafaf",
+"= c #b7b7b7b7b7b7",
+"- c Gray75",
+"; c #c0c0c0c0c0c0",
+": c Gray78",
+"> c Gray81",
+", c Gray84",
+"< c #dfdfdfdfdfdf",
+"1 c #e7e7e7e7e7e7",
+"2 c None",
+/* pixels */
+"22222222222222222222222222222222",
+"222222222-:---:-2222222222222222",
+"22222222---------222222222222222",
+"2222222:---====---22222222222222",
+"222222:--====**=--22222222222222",
+"2222:---===:::==--22222222222222",
+"222----=-->,,>==--22222222222222",
+"22:---=-:,<1<:=---222222-:---:-2",
+"2---==-:<11<>=*=---:---:-------:",
+":---==:<11<>-**=---------=------",
+"--==-><11<:-=&%*=----====*=*=**=",
+"-=*-><1<,--**%%%***=*==****=*%%$",
+"==-><1<>-=**&%$$&***===--:--=%@+",
+"*=><1<,-=*&&&%%%*=---::::::-&#oX",
+"&-,<,>-=*&&&%&&**=------==*&$@X.",
+"%->>:-*&&&%&%&%&&*****&&&&%$#O. ",
+"$&===*&&&%&%&%%%$%$$%$%%$$$#@o. ",
+"+@#$%%&%%%%%%%##@+@@@@#@#@@@+o. ",
+"@+O+@#$%%%%%%$@OooooOoOOOOOOoX..",
+"%@OoO+##$%$%%#+oooooooXXXXXXXX.X",
+"=&@OooO@##$$$#@@##$#@+OOooooooO+",
+"-=&#+oXo+@#$$$$%&=**&&%%$$$###$&",
+"--=*$+oXo+@###%*=----=====***==-",
+"---=*$+oXoO+@#$*----------------",
+"2---=*%@OXooO+#*=-222-:---------",
+"222:--*%#OXXXo#&--22222222222222",
+"2222---=&#OXXo@*--22222222222222",
+"22222---=&$@O@%*--22222222222222",
+"222222----*&&&*=--22222222222222",
+"22222222---===---222222222222222",
+"222222222-------2222222222222222",
+"22222222222222222222222222222222"
+};
diff --git a/kommander/editor/pics/large/disabled/redo.xpm b/kommander/editor/pics/large/disabled/redo.xpm
new file mode 100644
index 00000000..a4425f9c
--- /dev/null
+++ b/kommander/editor/pics/large/disabled/redo.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 14 1",
+" c Gray12",
+". c #272727272727",
+"X c #2f2f2f2f2f2f",
+"o c Gray21",
+"O c #3e3e3e3e3e3e",
+"+ c Gray28",
+"@ c #4e4e4e4e4e4e",
+"# c Gray34",
+"$ c #5d5d5d5d5d5d",
+"% c Gray40",
+"& c #6d6d6d6d6d6d",
+"* c #808080808080",
+"= c #c0c0c0c0c0c0",
+"- c None",
+/* pixels */
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"-------***********--------------",
+"------**&%%%%%%%**---------*----",
+"-----**$##$$$$$##%**-----****---",
+"----**#@$*******$#&***---*&**---",
+"---**$@%**-----**%#$&*-**$@%*---",
+"---*&@$*---------*%##%&&$Oo#*---",
+"---*%#**----------**$@++o.X#*---",
+"---*$$*------------*&+o...X#*---",
+"---*%%*------------**+.. X#*---",
+"---*&$*-----------**%o. .X@*---",
+"---*&%**----------*%O.. . X#*---",
+"----*%&**--------*&+oXXXXXo%*---",
+"----*&%**-------**&##@@@@@$**---",
+"-----*&%**--------**********----",
+"------***-----------------------",
+"--------**----------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------"
+};
diff --git a/kommander/editor/pics/large/disabled/right.xpm b/kommander/editor/pics/large/disabled/right.xpm
new file mode 100644
index 00000000..a95b4f27
--- /dev/null
+++ b/kommander/editor/pics/large/disabled/right.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 19 1",
+" c #5f5f5f5f5f5f",
+". c Gray40",
+"X c #6f6f6f6f6f6f",
+"o c #777777777777",
+"O c Gray50",
+"+ c Gray53",
+"@ c Gray56",
+"# c #979797979797",
+"$ c #9f9f9f9f9f9f",
+"% c #a7a7a7a7a7a7",
+"& c #afafafafafaf",
+"* c #b7b7b7b7b7b7",
+"= c Gray75",
+"- c #c0c0c0c0c0c0",
+"; c Gray78",
+": c Gray81",
+"> c #d5d5d5d5d5d5",
+", c gainsboro",
+"< c None",
+/* pixels */
+"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<",
+"<<<<<<<<<<<<<<<<=;===;=<<<<<<<<<",
+"<<<<<<<<<<<<<<<=======;=<<<<<<<<",
+"<<<<<<<<<<<<<<=;==**&**=;<<<<<<<",
+"<<<<<<<<<<<<<<;==**&%%*===<<<<<<",
+"<<<<<<<<<<<<<<=====*%$%&*=;=<<<<",
+"<<<<<<<<<<<<<<====:;*$$$&*=;=<<<",
+"<=;===;=<<<<<<==*=;:=*$#$%&==;<<",
+";=======;===;====*;;;=&$##&&===<",
+"======*=========***====&$$#%&*==",
+"*****&*&***====*&&**====&%##$&==",
+"%&***&&&&&****=**%&******&$@@$%*",
+"$*:::;==*=*======*&&&*****&$@@#%",
+"@*>,>:::;;;;;:::;=*&&&&**&&%$@++",
+"@*:>::;;;;;;:;::;=*&&&&&&&&%$@oo",
+"@&;;;==*=*****=***&&&&&&%%$$#+o.",
+"@%==*&&&%%&%%%%%%%&&%&%%%$$@+X. ",
+"O$&&%$$###@#@@@@#$%%%%%%$#@OX. .",
+"O@##@++OOOOoooooO+$%%%%$#@OX. X+",
+"+OOoXX.XXXoooooooO#$%$$#@o. X+$",
+"$@OoXXooO+@##$$$@@#$$$@+o. X+%*",
+"&%##@#$$%%&&****%$###@+X. o@%*=",
+"=**&*&****======*&$@+OX .o#%*==",
+"=================&#+oX .O#&*===",
+"<========<<<<<==*%+o. XO#&====<",
+"<<<<<<<<<<<<<<===%O. X+%**==<<<",
+"<<<<<<<<<<<<<<==*%O. o@%*=;=<<<<",
+"<<<<<<<<<<<<<<;=*&@O+#%*===<<<<<",
+"<<<<<<<<<<<<<<===*&%%&*==<<<<<<<",
+"<<<<<<<<<<<<<<<===**====<<<<<<<<",
+"<<<<<<<<<<<<<<<<=======<<<<<<<<<",
+"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
+};
diff --git a/kommander/editor/pics/large/disabled/undo.xpm b/kommander/editor/pics/large/disabled/undo.xpm
new file mode 100644
index 00000000..b49b97db
--- /dev/null
+++ b/kommander/editor/pics/large/disabled/undo.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 14 1",
+" c Gray12",
+". c #272727272727",
+"X c #2f2f2f2f2f2f",
+"o c Gray21",
+"O c #3e3e3e3e3e3e",
+"+ c Gray28",
+"@ c #4e4e4e4e4e4e",
+"# c Gray34",
+"$ c #5d5d5d5d5d5d",
+"% c Gray40",
+"& c #6d6d6d6d6d6d",
+"* c #808080808080",
+"= c #c0c0c0c0c0c0",
+"- c None",
+/* pixels */
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------***********-------",
+"----*---------**%%%%%%%&**------",
+"----***-----**%##$$$$$##$**-----",
+"---*&***---**%#$*******$@#**----",
+"---*%+%****&$#%**-----**%@#**---",
+"---*#oO%**%@#%*---------*$@&*---",
+"---*@X.o+++$***---------**#&*---",
+"---*#X..XX+**------------*$%*---",
+"---*$X X+&-------------*%$*---",
+"---*#X . .o#**-----------*$%*---",
+"---*@X. ..o&**---------**$&*---",
+"---*$oXXXXXo@&*---------*&%*----",
+"---**$@#@@###&*--------*&%&*----",
+"----**********--------**%&*-----",
+"----------------------****------",
+"------------------------*-------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------",
+"--------------------------------"
+};
diff --git a/kommander/editor/pics/large/editbreaklayout.xpm b/kommander/editor/pics/large/editbreaklayout.xpm
new file mode 100644
index 00000000..687571f9
--- /dev/null
+++ b/kommander/editor/pics/large/editbreaklayout.xpm
@@ -0,0 +1,250 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 212 2",
+" c #101000000000",
+". c #181800000000",
+"X c #181808080000",
+"o c #181808080808",
+"O c #212100000000",
+"+ c #292900000000",
+"@ c #292918181818",
+"# c #313100000000",
+"$ c #313108080000",
+"% c #393908080000",
+"& c #313110100808",
+"* c #393918181010",
+"= c #313129292121",
+"- c #313129292929",
+"; c #393931313131",
+": c #4a4a08080000",
+"> c #525208080000",
+", c #525210100000",
+"< c #5a5a10100000",
+"1 c #5a5a18180808",
+"2 c #525221211818",
+"3 c #5a5a39393131",
+"4 c #636310100000",
+"5 c #6b6b10100000",
+"6 c #6b6b10100808",
+"7 c #737318180808",
+"8 c #7b7b10100000",
+"9 c #7b7b18180808",
+"0 c #636329292121",
+"q c #636342423939",
+"w c #525242424242",
+"e c #5a5a52524a4a",
+"r c #5a5a52525252",
+"t c #63635a5a5a5a",
+"y c #6b6b52525252",
+"u c #7b7b5a5a5252",
+"i c #6b6b63635a5a",
+"p c #6b6b63636363",
+"a c #73736b6b6b6b",
+"s c #7b7b73737373",
+"d c #848418180808",
+"f c #8c8c18180000",
+"g c #8c8c18180808",
+"h c #949418180808",
+"j c #9c9c21210808",
+"k c #9c9c21211010",
+"l c #9c9c29291010",
+"z c #9c9c39392929",
+"x c #a5a521210808",
+"c c #adad21210808",
+"v c #adad21211010",
+"b c #b5b529291010",
+"n c #bdbd29291010",
+"m c #bdbd31312121",
+"M c #b5b54a4a3939",
+"N c #84845a5a5a5a",
+"B c #8c8c6b6b6b6b",
+"V c #a5a55a5a4a4a",
+"C c #adad63635252",
+"Z c #b5b563635252",
+"A c #a5a56b6b6363",
+"S c #c6c629291010",
+"D c #cece29291010",
+"F c #d6d629290808",
+"G c #d6d631311818",
+"H c #dede31311818",
+"J c #dede39391818",
+"K c #c6c639392121",
+"L c #dede39392121",
+"P c #e7e729290808",
+"I c #e7e739391818",
+"U c #efef31311010",
+"Y c #f7f731311010",
+"T c #f7f739391010",
+"R c #f7f739391818",
+"E c #ffff39391010",
+"W c #ffff39391818",
+"Q c #e7e739392121",
+"! c #d6d64a4a3131",
+"~ c #d6d652523939",
+"^ c #efef42422121",
+"/ c #f7f742422929",
+"( c #f7f74a4a2929",
+") c #ffff42422121",
+"_ c #ffff4a4a2121",
+"` c #ffff4a4a2929",
+"' c #f7f74a4a3131",
+"] c #ffff4a4a3131",
+"[ c #ffff52522929",
+"{ c #f7f752523131",
+"} c #f7f75a5a3939",
+"| c #ffff52523131",
+" . c #ffff5a5a3131",
+".. c #ffff5a5a3939",
+"X. c #f7f763633939",
+"o. c #ffff63633939",
+"O. c #ffff6b6b3939",
+"+. c #c6c65a5a4a4a",
+"@. c #cece52524242",
+"#. c #c6c663635252",
+"$. c #dede6b6b5252",
+"%. c #dede73735a5a",
+"&. c #cece73736363",
+"*. c #cece7b7b6b6b",
+"=. c #efef6b6b4a4a",
+"-. c #e7e76b6b5252",
+";. c #efef6b6b5252",
+":. c #e7e773735a5a",
+">. c #f7f763634242",
+",. c #f7f76b6b4a4a",
+"<. c #ffff63634242",
+"1. c #ffff6b6b4242",
+"2. c #ffff6b6b4a4a",
+"3. c #ffff73734242",
+"4. c #ffff73734a4a",
+"5. c #ffff7b7b4242",
+"6. c #ffff7b7b4a4a",
+"7. c #ffff73735252",
+"8. c #ffff7b7b5252",
+"9. c #ffff7b7b5a5a",
+"0. c #b5b584847b7b",
+"q. c #c6c684847373",
+"w. c #c6c68c8c7b7b",
+"e. c #d6d684846b6b",
+"r. c #ffff84845252",
+"t. c #ffff84845a5a",
+"y. c #ffff8c8c5a5a",
+"u. c #f7f78c8c6b6b",
+"i. c #ffff84846363",
+"p. c #ffff8c8c6363",
+"a. c #ffff8c8c6b6b",
+"s. c #ffff94946363",
+"d. c #ffff94946b6b",
+"f. c #ffff9c9c6b6b",
+"g. c #ffff94947373",
+"h. c #ffff9c9c7373",
+"j. c #ffff9c9c7b7b",
+"k. c #ffffa5a57373",
+"l. c #ffffa5a57b7b",
+"z. c #ffffadad7b7b",
+"x. c #848484848484",
+"c. c #8c8c84848484",
+"v. c Gray55",
+"b. c Gray58",
+"n. c #9c9c94949494",
+"m. c Gray61",
+"M. c #a5a584848484",
+"N. c #a5a59c9c9c9c",
+"B. c #adad9c9c9494",
+"V. c #adad9c9c9c9c",
+"C. c #b5b58c8c8484",
+"Z. c #b5b58c8c8c8c",
+"A. c #bdbd8c8c8484",
+"S. c #b5b594948c8c",
+"D. c #b5b594949494",
+"F. c #b5b59c9c9494",
+"G. c #b5b59c9c9c9c",
+"H. c #bdbd9c9c9494",
+"J. c #b5b5a5a59c9c",
+"K. c #bdbda5a59c9c",
+"L. c #a5a5a5a5a5a5",
+"P. c Gray68",
+"I. c #b5b5a5a5a5a5",
+"U. c #b5b5adada5a5",
+"Y. c #b5b5adadadad",
+"T. c #bdbdadada5a5",
+"R. c #bdbdadadadad",
+"E. c #bdbdb5b5adad",
+"W. c Gray71",
+"Q. c #bdbdb5b5b5b5",
+"!. c #bdbdbdbdb5b5",
+"~. c Gray74",
+"^. c #bdbdc6c6c6c6",
+"/. c #c6c68c8c8484",
+"(. c #cece8c8c8484",
+"). c #c6c694948484",
+"_. c #c6c694948c8c",
+"`. c #c6c69c9c9494",
+"'. c #c6c6a5a59c9c",
+"]. c #c6c6adad9c9c",
+"[. c #c6c6adada5a5",
+"{. c #c6c6bdbdadad",
+"}. c #c6c6bdbdbdbd",
+"|. c #ffffa5a58484",
+" X c #ffffadad8484",
+".X c #ffffb5b58484",
+"XX c #ffffb5b58c8c",
+"oX c #ffffb5b59494",
+"OX c #ffffbdbd9494",
+"+X c #ffffbdbd9c9c",
+"@X c #c6c6c6c6bdbd",
+"#X c #ffffc6c69494",
+"$X c #ffffd6d6a5a5",
+"%X c #ffffd6d6adad",
+"&X c NavajoWhite",
+"*X c #ffffd6d6b5b5",
+"=X c #ffffdedeb5b5",
+"-X c #ffffe7e7bdbd",
+";X c #c0c0c0c0c0c0",
+":X c #c6c6c6c6c6c6",
+">X c #dedededec6c6",
+",X c #dedededecece",
+"<X c #e7e7dedec6c6",
+"1X c #ffffe7e7c6c6",
+"2X c #ffffefefc6c6",
+"3X c #fffff7f7cece",
+"4X c #ffffffffcece",
+"5X c #fffff7f7d6d6",
+"6X c #ffffffffd6d6",
+"7X c #ffffffffe7e7",
+"8X c #ffffffffefef",
+"9X c None",
+/* pixels */
+"9X9X9X9X9X9X9X9X9X9X9XE._.Q.9X9X9X9X9XA.+.I.@X9X9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9XE.).%.} r.[.9X9X9X9X!.;._ Y #.G.~.9X9X9X9X9X9X9X",
+"9X9X9X9X9XE._.$.X.8.l.$X4X,X~.9X9X9X'.h.t.<._ T @.D.~.9X9X9X9X9X",
+"9X9XQ.).$.X.6.z.%X3X6X7X5X%XQ.9X9XQ.u.j.|.h.t.1.[ E ~ S.~.9X9X9X",
+"9X9X).6.z.%X3X7X6X5X=XXXd.2./.9X9Xq.] 4.p.j.|.j.p.2.[ E ! C.9X9X",
+"9X9XQ.3X6X7X3X=XoXa.2.{ L S z ~.Y.l n Q ] 1.i.h.l.l.p.2.[ *.9X9X",
+"9X9X~.>X-XXXa.2.{ L S k 9 < # m.c.% 4 h n L ( 2.t.g.|.l.p.Q.9X9X",
+"9X9X9XK.2.' L S j 9 1 % O . = n.^.n.w & < h b H / <.9.g.'.9X9X9X",
+"9X9X9XQ.m x 9 , % O . - a L.~.9X9X9X:XN.e & < g b G ( =.Q.9X9X9X",
+"9X9X9X9Xu # O X ; a L.:X9X9X9X9X9X9X9X9X9XP.t & , d c 0.9X9X9X9X",
+"9X9X9X9Xb.= a L.~.9X9XR.(.!.9X9X9X9X9XA.#.Y.9XW.a & 0 Q.9X9X9X9X",
+"9X9X9X9X~.~.9X9XE.).-.o.y.T.9X9X9X9X~.;.) Y #.J.9XW.L.9X9X9X9X9X",
+"9X9X9X9X9XQ._.-.o.r.z.&X6X,X~.9X9X9X].h.t.1._ R @.F.}.9X9X9X9X9X",
+"9X9XQ._.%.X.6.z.%X3X7X7X3X%XQ.9X9XQ.u.j.l.h.i.1._ W ~ Z.~.9X9X9X",
+"9X9Xw.6.k.$X3X7X7X3X*XXXp.<./.9X9Xq.] 2.p.j.l.j.p.1.` E ! C.9X9X",
+"9X9XQ.2X6X7X5X=XXXa.2.( L n z ~.Y.k n I ] 2.i.h.l.l.a.4.[ &.9X9X",
+"9X9X~.>X-XOXg.2.{ L S k 7 > + b.c.% 4 k b J ( 2.t.g.l.l.a.E.9X9X",
+"9X9X9XK.7.| Q S k 9 , $ O X ; n.~.m.w % 4 h b H ( <.9.g.'.9X9X9X",
+"9X9X9XQ.K k 9 1 % O X ; s L.}.9X9X9X~.L.r * < g v G / ,.Q.9X9X9X",
+"9X9X9X9XN % O . - a P.!.~.9X9X9X9X9X9X9X~.B r * < d c 0.9X9X9X9X",
+"9X9X9X9Xm.@ p N.^.}.`.>.K.9X9X9X9X9X9X^.w.U C L.a & 0 ~.9X9X9X9X",
+"9X9X9X9X~.~.9X^.`.=.5.#X<X~.9X9X9X9X9X`.1.` U M W.W.L.9X9X9X9X9X",
+"9X9X9X9X9X9XK.$.3..X2X8X7X{.9X9X9X9XH.p.a.4.| Y m V.9X9X9X9X9X9X",
+"9X9X9X9XR.%.O.k.1X7X8X-X X7.Y.9X9XD.( 2.p.a.9. .R F M.9X9X9X9X9X",
+"9X9XR.*.o.f.-X7X8X2XXX9.' D V 9Xn.h D ( <.i.d.9.o.) F A ~.9X9X9X",
+"9X9Xe.s.&X7X8X3XOXi.| G k 6 % v.L.2 f S ^ <.9.d.i.<._ P V W.9X9X",
+"9X9XY.5X8X5X+Xa...J v 7 : . o x.9XW.3 8 n I ..9.a.a.2.` P Z 9X9X",
+"9X9X9X@X%Xd.<.Q b 9 : O o i W.9X9X9X~.y 5 v H | 7.p.a.7.} Y.9X9X",
+"9X9X9X~.:.^ n d , O o r P.9X9X9X9X9X9X~.s 4 x G ` 2.p.u.Y.9X9X9X",
+"9X9X9X9XB.g < + w N.^.9X9X9X9X9X9X9X9X9Xv.1 h D / ,.U.9X9X9X9X",
+"9X9X9X9X^.y ; n.^.9X9X9X9X9X9X9X9X9X9X9X9Xm.0 f S G.9X9X9X9X9X",
+"9X9X9X9X9XP.c.~.9X9X9X9X9X9X9X9X9X9X9X9X9X9X9XP.q n.9X9X9X9X9X9X"
+};
diff --git a/kommander/editor/pics/large/editcopy.xpm b/kommander/editor/pics/large/editcopy.xpm
new file mode 100644
index 00000000..d9f4a9d5
--- /dev/null
+++ b/kommander/editor/pics/large/editcopy.xpm
@@ -0,0 +1,43 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 5 1",
+" c Gray0",
+". c #000000008080",
+"X c #c0c0c0c0c0c0",
+"o c Gray100",
+"O c None",
+/* pixels */
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+" OOOOOOOOOOOOOOOOOOOO",
+" OOOOOOOOOOOOOOOOOOO",
+" oooooooo OOOOOOOOOOOOOOOOOO",
+" oooooooo OOOOOOOOOOOOOOOOO",
+" oooooooo o OOOOOOOOOOOOOOOO",
+" oooooooo oo OOOOOOOOOOOOOOO",
+" oo oo ............OOOOOOOO",
+" oo oo .............OOOOOOO",
+" oooooooooo..oooooooo....OOOOOO",
+" oooooooooo..oooooooo.....OOOOO",
+" oo ..oooooooo..o...OOOO",
+" oo ..oooooooo..oo...OOO",
+" oooooooooo..oo oo........OO",
+" oooooooooo..oo oo........OO",
+" oo ..oooooooooooooo..OO",
+" oo ..oooooooooooooo..OO",
+" oooooooooo..oo oo..OO",
+" oooooooooo..oo oo..OO",
+" ..oooooooooooooo..OO",
+" ..oooooooooooooo..OO",
+"OOOOOOOOOOOO..oo oo..OO",
+"OOOOOOOOOOOO..oo oo..OO",
+"OOOOOOOOOOOO..oooooooooooooo..OO",
+"OOOOOOOOOOOO..oooooooooooooo..OO",
+"OOOOOOOOOOOO..................OO",
+"OOOOOOOOOOOO..................OO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"
+};
diff --git a/kommander/editor/pics/large/editcut.xpm b/kommander/editor/pics/large/editcut.xpm
new file mode 100644
index 00000000..fcae0bd0
--- /dev/null
+++ b/kommander/editor/pics/large/editcut.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 4 1",
+" c Gray0",
+". c #000000008080",
+"X c #c0c0c0c0c0c0",
+"o c None",
+/* pixels */
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooo oooooo oooooooooooo",
+"oooooooooo oooooo oooooooooooo",
+"oooooooooo oooooo oooooooooooo",
+"oooooooooo oooooo oooooooooooo",
+"oooooooooo oooo oooooooooooo",
+"oooooooooo oooo oooooooooooo",
+"ooooooooooo oooo ooooooooooooo",
+"ooooooooooo oo ooooooooooooo",
+"ooooooooooo oo ooooooooooooo",
+"oooooooooooo oo oooooooooooooo",
+"oooooooooooo oooooooooooooo",
+"oooooooooooo oooooooooooooo",
+"ooooooooooooo ooooooooooooooo",
+"oooooooooooooo oooooooooooooooo",
+"ooooooooooooo. .ooooooooooooooo",
+"ooooooooooooo. ..oooooooooooooo",
+"oooooooooooo..oo......oooooooooo",
+"ooooooooooo...oo.......ooooooooo",
+"oooooooo......oo...oo...oooooooo",
+"ooooooo.......oo..oooo..oooooooo",
+"oooooo...oo...oo..oooo..oooooooo",
+"oooooo..oooo..oo..oooo..oooooooo",
+"oooooo..oooo..oo..oooo..oooooooo",
+"oooooo..oooo..oo...oo...oooooooo",
+"oooooo..oooo..ooo......ooooooooo",
+"oooooo...oo...oooo....oooooooooo",
+"ooooooo......ooooooooooooooooooo",
+"oooooooo....oooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo"
+};
diff --git a/kommander/editor/pics/large/editdelete.xpm b/kommander/editor/pics/large/editdelete.xpm
new file mode 100644
index 00000000..2221114f
--- /dev/null
+++ b/kommander/editor/pics/large/editdelete.xpm
@@ -0,0 +1,226 @@
+/* XPM */
+static char * editdelete_xpm[] = {
+"22 22 201 2",
+" c None",
+". c #454545",
+"+ c #8B8B8B",
+"@ c #282828",
+"# c #464646",
+"$ c #6F6F6F",
+"% c #F7F7F7",
+"& c #FDFDFD",
+"* c #5A5A5A",
+"= c #C2C2C2",
+"- c #424242",
+"; c #F0F0F0",
+"> c #D7D7D7",
+", c #CDCDCD",
+"' c #EBEBEB",
+") c #CFCFCF",
+"! c #AAAAAA",
+"~ c #E5E5E5",
+"{ c #686868",
+"] c #F5F5F5",
+"^ c #C9C9C9",
+"/ c #313131",
+"( c #F4F4F4",
+"_ c #DCDCDC",
+": c #E0E0E0",
+"< c #E3E3E3",
+"[ c #D0D0D0",
+"} c #656363",
+"| c #B5B5B5",
+"1 c #A8A8A8",
+"2 c #252525",
+"3 c #F1F1F1",
+"4 c #B8B8B8",
+"5 c #E7E7E7",
+"6 c #B9B9B9",
+"7 c #D2D2D2",
+"8 c #B3B3B3",
+"9 c #E8E8E8",
+"0 c #9E9D9D",
+"a c #7A797A",
+"b c #676767",
+"c c #4E4E4E",
+"d c #161616",
+"e c #A5A4A4",
+"f c #B4B4B4",
+"g c #DFDFDF",
+"h c #8F8E8E",
+"i c #9F9F9E",
+"j c #F2F0EE",
+"k c #E7E2DF",
+"l c #D1CBC6",
+"m c #ACA39D",
+"n c #211F1E",
+"o c #F2F2F2",
+"p c #C1C1C1",
+"q c #D8D7D7",
+"r c #BEBEBE",
+"s c #EEEEEE",
+"t c #D1D1D1",
+"u c #C8C6C5",
+"v c #CCC8C4",
+"w c #D1CBC5",
+"x c #DCD2CA",
+"y c #E4D7CD",
+"z c #2E2B29",
+"A c #EFEEEE",
+"B c #E2DEDC",
+"C c #D7D2CE",
+"D c #D6CEC8",
+"E c #DBD1C8",
+"F c #E4D6CC",
+"G c #E6D6C8",
+"H c #2E2A27",
+"I c #ECECEC",
+"J c #A4A3A3",
+"K c #CDCDCC",
+"L c #A1A09F",
+"M c #BEBBB9",
+"N c #E4DED8",
+"O c #BAB3AD",
+"P c #9D958E",
+"Q c #B6ACA2",
+"R c #BAACA1",
+"S c #E3D0C0",
+"T c #2D2926",
+"U c #939291",
+"V c #C5C2C0",
+"W c #95918E",
+"X c #9E9893",
+"Y c #B8AFA7",
+"Z c #8F867F",
+"` c #978D83",
+" . c #CFBEAF",
+".. c #E1CCB9",
+"+. c #2D2824",
+"@. c #F3F3F3",
+"#. c #D1D0CF",
+"$. c #DFDBD8",
+"%. c #CEC8C2",
+"&. c #C5BEB7",
+"*. c #D3C8BE",
+"=. c #C3B6AC",
+"-. c #D1C1B4",
+";. c #D4C2B3",
+">. c #D2BDAB",
+",. c #DFC5B0",
+"'. c #2C2723",
+"). c #000000",
+"!. c #6E6E6E",
+"~. c #EFEDEC",
+"{. c #C5C1BE",
+"]. c #D8D1CC",
+"^. c #C4BBB4",
+"/. c #BAB0A7",
+"(. c #CABCB1",
+"_. c #B7A89C",
+":. c #C8B6A7",
+"<. c #CCB8A5",
+"[. c #C8B19D",
+"}. c #DBBFA7",
+"|. c #28231E",
+"1. c #333333",
+"2. c #6E6E6F",
+"3. c #808080",
+"4. c #6D6C6B",
+"5. c #E9E4E0",
+"6. c #99938F",
+"7. c #9B948E",
+"8. c #A39991",
+"9. c #9E9289",
+"0. c #AEA094",
+"a. c #BAA99A",
+"b. c #9A897B",
+"c. c #9D8A7A",
+"d. c #AC9582",
+"e. c #D9B99E",
+"f. c #38332E",
+"g. c #999999",
+"h. c #505050",
+"i. c #2D2D2D",
+"j. c #A4A4A4",
+"k. c #5E5E5F",
+"l. c #4B4B4B",
+"m. c #6C6A67",
+"n. c #F2EAE2",
+"o. c #F6EAE1",
+"p. c #F4E6DB",
+"q. c #F2E2D3",
+"r. c #F1DECD",
+"s. c #EFD8C5",
+"t. c #EDD4BE",
+"u. c #EBCFB7",
+"v. c #EACAB0",
+"w. c #E8C5A8",
+"x. c #D7B496",
+"y. c #2D2621",
+"z. c #818181",
+"A. c #7A7A7A",
+"B. c #707070",
+"C. c #4D4D4D",
+"D. c #444444",
+"E. c #4A4A4A",
+"F. c #575552",
+"G. c #B2AAA3",
+"H. c #B1A69E",
+"I. c #B0A399",
+"J. c #AD9D90",
+"K. c #AC998A",
+"L. c #AA9685",
+"M. c #A9927F",
+"N. c #A88F7A",
+"O. c #A68B73",
+"P. c #A3856C",
+"Q. c #25201B",
+"R. c #595959",
+"S. c #3A3A3A",
+"T. c #434343",
+"U. c #3F3F3F",
+"V. c #292929",
+"W. c #040404",
+"X. c #2B2B2B",
+"Y. c #545454",
+"Z. c #6D6D6D",
+"`. c #3D3D3D",
+" + c #212121",
+".+ c #898989",
+"++ c #272727",
+"@+ c #010101",
+"#+ c #787878",
+"$+ c #6A6A6A",
+"%+ c #606060",
+"&+ c #0B0B0B",
+"*+ c #555555",
+"=+ c #525252",
+"-+ c #868686",
+";+ c #515151",
+">+ c #0C0C0C",
+",+ c #777777",
+"'+ c #7C7C7C",
+")+ c #343434",
+"!+ c #171717",
+" ",
+" . + + + + + + + @ # ",
+" $ % & & & & & & * = - ",
+" $ ; > , ' ) ! ~ { ] ^ / ",
+" $ ( _ ' : < [ ; } | [ 1 2 ",
+" $ 3 4 5 6 7 8 9 0 a b c d ",
+" $ ' e f g ^ h i j k l m n ",
+" $ o p q r s t u v w x y z ",
+" $ ( 7 < [ A B C D E F G H ",
+" $ I J K L M N O P Q R S T ",
+" $ s 0 U V W X Y Z ` ...+. ",
+" $ @.#.$.%.&.*.=.-.;.>.,.'. ",
+" ).!.~.{.].^./.(._.:.<.[.}.|.). ",
+" 1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i. ",
+" ).j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.# z.A. ",
+" B.C.D.E.F.G.H.I.0.J.K.L.M.N.O.P.Q.- R.$ S.",
+" A.T.U.V.).).).).).).).).).).).).W.X.Y.Z.`.",
+" +.+++@+).).).).).).).).).).).).).W.. #+ ",
+" $+%+. ).).).).).).).).).).).).&+*+{ =+ ",
+" X.D.-+-+;+>+>+>+>+>+>+>+,+-+'+)+ ",
+" ).).D.A.A.A.A.A.A.A.!+).). ",
+" "};
diff --git a/kommander/editor/pics/large/editgrid.xpm b/kommander/editor/pics/large/editgrid.xpm
new file mode 100644
index 00000000..bbec2531
--- /dev/null
+++ b/kommander/editor/pics/large/editgrid.xpm
@@ -0,0 +1,206 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 168 2",
+" c #292910100808",
+". c #313108080808",
+"X c #393908080000",
+"o c #313110100808",
+"O c #393910100808",
+"+ c #313110101010",
+"@ c #393918181818",
+"# c #393921211818",
+"$ c #313121212121",
+"% c #393929292121",
+"& c #393929292929",
+"* c #424208080000",
+"= c #4a4a08080000",
+"- c #424218181010",
+"; c #525208080000",
+": c #5a5a08080000",
+"> c #525210100000",
+", c #5a5a10100000",
+"< c #525218181010",
+"1 c #5a5a18181010",
+"2 c #424221211818",
+"3 c #5a5a21211818",
+"4 c #424229292121",
+"5 c #424229292929",
+"6 c #4a4a29292929",
+"7 c #424231312929",
+"8 c #4a4a31312929",
+"9 c #424231313131",
+"0 c #4a4a31313131",
+"q c #4a4a39393131",
+"w c #525239393939",
+"e c #636310100000",
+"r c #636310100808",
+"t c #6b6b10100808",
+"y c #6b6b18180808",
+"u c #737318180808",
+"i c #7b7b18180808",
+"p c #636321211010",
+"a c #737321211010",
+"s c #6b6b29292121",
+"d c #636331312929",
+"f c #7b7b31312121",
+"g c #525242424242",
+"h c #52524a4a4242",
+"j c #52524a4a4a4a",
+"k c #5a5a42424242",
+"l c #5a5a4a4a4a4a",
+"z c #5a5a52524a4a",
+"x c #5a5a52525252",
+"c c #63634a4a4242",
+"v c #6b6b5a5a5a5a",
+"b c #6b6b63636363",
+"n c #73736b6b6b6b",
+"m c #848421211010",
+"M c #8c8c21211010",
+"N c #8c8c29291818",
+"B c #9c9c29291818",
+"V c #949431311818",
+"C c #9c9c31311818",
+"Z c #949439392929",
+"A c #9c9c39392121",
+"S c #9c9c39392929",
+"D c #a5a529291010",
+"F c #a5a529291818",
+"G c #adad29291818",
+"H c #a5a531311818",
+"J c #b5b529291010",
+"K c #b5b531311818",
+"L c #bdbd31311818",
+"P c #a5a531312121",
+"I c #a5a539392929",
+"U c #adad39392121",
+"Y c #adad39392929",
+"T c #b5b539392121",
+"R c #b5b539392929",
+"E c #bdbd31312121",
+"W c #bdbd39392121",
+"Q c #a5a542423131",
+"! c #adad4a4a3939",
+"~ c #b5b542422929",
+"^ c #bdbd42422929",
+"/ c #b5b542423131",
+"( c #b5b54a4a3939",
+") c #bdbd42423131",
+"_ c #9c9c5a5a5252",
+"` c #9c9c63635252",
+"' c #9c9c63635a5a",
+"] c #9c9c6b6b6363",
+"[ c #9c9c73736b6b",
+"{ c #9c9c7b7b7373",
+"} c #a5a54a4a4242",
+"| c #adad4a4a4242",
+" . c #b5b552524242",
+".. c #a5a563635a5a",
+"X. c #adad6b6b5a5a",
+"o. c #b5b56b6b5a5a",
+"O. c #adad6b6b6363",
+"+. c #a5a573736b6b",
+"@. c #adad73736b6b",
+"#. c #a5a573737373",
+"$. c #a5a57b7b7373",
+"%. c #a5a57b7b7b7b",
+"&. c #b5b573736b6b",
+"*. c #bdbd73736363",
+"=. c #c6c639392121",
+"-. c #cece39392121",
+";. c #c6c642422929",
+":. c #c6c642423131",
+">. c #c6c64a4a3131",
+",. c #c6c64a4a3939",
+"<. c #cece4a4a3131",
+"1. c #cece4a4a3939",
+"2. c #d6d642422929",
+"3. c #d6d64a4a3131",
+"4. c #d6d64a4a3939",
+"5. c #dede4a4a3131",
+"6. c #dede4a4a3939",
+"7. c #dede52523939",
+"8. c #e7e752523939",
+"9. c #efef52523939",
+"0. c #efef5a5a3939",
+"q. c #cece5a5a4242",
+"w. c #d6d65a5a4242",
+"e. c #d6d65a5a4a4a",
+"r. c #dede52524242",
+"t. c #dede5a5a4242",
+"y. c #dede63634a4a",
+"u. c #dede63635252",
+"i. c #e7e75a5a4242",
+"p. c #efef5a5a4242",
+"a. c #e7e763634a4a",
+"s. c #efef63634a4a",
+"d. c #efef63635252",
+"f. c #f7f763634242",
+"g. c #f7f763634a4a",
+"h. c #ffff63634a4a",
+"j. c #f7f773735a5a",
+"k. c #ffff73735a5a",
+"l. c #efef7b7b6363",
+"z. c #efef7b7b6b6b",
+"x. c #ffff7b7b6363",
+"c. c #a5a584847b7b",
+"v. c #b5b584847b7b",
+"b. c #ffff84846b6b",
+"n. c #f7f784847373",
+"m. c #8c8c84848484",
+"M. c Gray55",
+"N. c #9c9c8c8c8c8c",
+"B. c Gray58",
+"V. c #a5a584848484",
+"C. c #a5a58c8c8484",
+"Z. c #adad94948c8c",
+"A. c #a5a59c9c9c9c",
+"S. c #adad94949494",
+"D. c #b5b58c8c8484",
+"F. c #a5a5a5a59c9c",
+"G. c #adada5a59c9c",
+"H. c #b5b5a5a59c9c",
+"J. c #a5a5a5a5a5a5",
+"K. c #adada5a5a5a5",
+"L. c Gray68",
+"P. c #b5b5a5a5a5a5",
+"I. c #b5b5adadadad",
+"U. c Gray71",
+"Y. c Gray74",
+"T. c #c6c69c9c9494",
+"R. c #c0c0c0c0c0c0",
+"E. c None",
+/* pixels */
+"E.E.E.E.E.{ ;.u./ p k E.E.E.E.E.E.E.E.E.E.[ ,.u.I 3 v E.E.E.E.E.",
+"E.E.E.E.E.+.=.i.Y r 9 Y.E.E.E.E.E.E.E.E.E.' -.a.P ; l E.E.E.E.E.",
+"E.E.E.E.E.+.E a.~ r 8 Y.E.E.E.E.E.E.E.E.E.' ;.i.P : z Y.E.E.E.E.",
+"E.E.E.E.E.#.=.i.~ r 7 Y.E.E.E.E.E.E.E.E.E.] -.a.P > l E.E.E.E.E.",
+"E.E.E.E.E.c.L i.~ e & E.E.E.E.E.E.E.E.E.E.[ -.i.P , j E.E.E.E.E.",
+"D.*.&.&.&.| K a.~ r < &.*.&.&.&.&.&.&.&.&.Q ;.a.P ; s &.&.&.&.v.",
+"y.p.0.p.0.0.7.i.R N 7.9.p.0.0.9.0.0.9.0.0.9.7.t.H f 8.9.0.9.9.t.",
+"n.b.b.b.b.b.b.d.,.j.b.b.b.b.x.b.b.x.b.x.b.x.x.a.,.x.x.x.x.x.x.z.",
+" .~ ~ ) R ^ R >.,.~ / ^ R R ^ R R ~ R ~ R R R >.:.~ R ~ R ~ R ! ",
+"d ; ; > ; = y 1.) y > > r > r > r > r > r = m t.P r > r > r > 3 ",
+"n $ % % & # F i.) u & & & & & & & & & & 2 ^ i.U r & & & & g ",
+"Y.Y.Y.Y.Y.S.J i.) u + U.Y.E.E.E.E.E.E.E.E.[ =.i.U r w Y.Y.E.E.Y.",
+"E.E.E.E.E.Z.G 7.>.u - U.E.E.E.E.E.E.E.E.E.$.=.i.I , w Y.E.E.E.E.",
+"E.E.E.E.E.S.G i.) u o L.E.E.E.E.E.E.E.E.E.$.W i.U r q E.E.E.E.E.",
+"E.E.E.E.E.G.G 7.>.a o L.E.E.E.E.E.E.E.E.E.$.W i.Y r 0 Y.E.E.E.E.",
+"E.E.E.E.E.A.G 7.>.i . L.E.E.E.E.E.E.E.E.E.c.E i.Y e q Y.E.E.E.E.",
+"E.E.E.E.E.G.G 7.>.a o K.E.E.E.E.E.E.E.E.E.%.L i.U r 8 Y.E.E.E.E.",
+"E.E.E.E.E.P.G 7.>.i O J.E.E.E.E.E.E.E.E.E.c.W t.Y y 0 Y.E.E.E.E.",
+"E.E.E.E.E.P.F 7.1.a . F.E.E.E.E.E.E.E.E.E.V.L i.Y e 6 Y.E.E.E.E.",
+"E.E.E.E.E.P.F 7.>.m O A.E.E.E.E.E.E.E.E.E.C.L t.T r 4 Y.E.E.E.E.",
+"E.E.E.E.E.I.D 6.>.i . J.E.E.E.E.E.E.E.E.E.N.K i.Y e 5 Y.E.E.E.E.",
+"I.@.@.@.@...D 4.1.a = _ @.O.O.O.O.O.O.O.O.} L r.R , 1 X.o.X.o.@.",
+"T.f.f.f.f.g.s.r.>.V w.h.f.g.g.f.g.f.f.g.f.g.p.t.U S s.h.g.g.g.g.",
+"H.x.x.b.x.x.x.j.<.u.x.x.x.x.x.x.x.x.x.l.x.x.l.a.>.j.k.j.j.j.j.l.",
+"Z.P P P P P P Y >.U P P P P A F A F A F H C B ^ ) C B A B A B S ",
+"N.= = = = * = ~ 4.a > * = = = O = O = = = * y r.R r * = * = * = ",
+"L.l h h j j a 5.1.M X 9 j j l l l l z x j w H 8.R y o x x x x b ",
+"E.Y.E.E.Y.Y.A 3.1.M O M.E.E.E.E.E.E.E.E.E.S.L t.R y 2 Y.E.E.E.E.",
+"E.E.E.E.E.Y.S 2.1.M * m.E.E.E.E.E.E.E.E.E.S.G 7.R y 2 Y.E.E.E.E.",
+"E.E.E.E.E.Y.Z 2.1.N * m.E.E.E.E.E.E.E.E.E.S.K 7.~ t @ Y.E.E.E.E.",
+"E.E.E.E.E.Y.Q ;.4.M X m.E.E.E.E.E.E.E.E.E.S.K 8.R u O U.E.E.E.E.",
+"E.E.E.E.E.Y.` 1.q.Z 4 B.E.E.E.E.E.E.E.E.E.K.! e.( d c Y.E.E.E.E."
+};
diff --git a/kommander/editor/pics/large/edithlayout.xpm b/kommander/editor/pics/large/edithlayout.xpm
new file mode 100644
index 00000000..4370cac8
--- /dev/null
+++ b/kommander/editor/pics/large/edithlayout.xpm
@@ -0,0 +1,103 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 65 1",
+" c #26260a0a0606",
+". c #2f2f08080202",
+"X c #252512120f0f",
+"o c #2d2d13130f0f",
+"O c #272715151212",
+"+ c #2c2c1f1f1d1d",
+"@ c #303009090303",
+"# c #373713130e0e",
+"$ c #333327272525",
+"% c #41410c0c0202",
+"& c #51510f0f0404",
+"* c #515110100505",
+"= c #545418180e0e",
+"- c #404035353333",
+"; c #4b4b3a3a3737",
+": c #636314140707",
+"> c #636315150808",
+", c #66661e1e1212",
+"< c #707019190a0a",
+"1 c #7a7a1f1f0f0f",
+"2 c #727222221414",
+"3 c #767632322626",
+"4 c #707042423939",
+"5 c #8e8e21210f0f",
+"6 c #818127271818",
+"7 c #818128281919",
+"8 c #8a8a23231212",
+"9 c #8d8d29291919",
+"0 c #9c9c23230f0f",
+"q c #9c9c25251212",
+"w c #9a9a2a2a1717",
+"e c #9b9b2d2d1a1a",
+"r c #818130302323",
+"t c #999934342323",
+"y c #adad27271111",
+"u c #adad28281212",
+"i c #aaaa2e2e1a1a",
+"p c #baba30301a1a",
+"a c #a7a736362323",
+"s c #a5a53a3a2828",
+"d c #a8a834342121",
+"f c #b4b438382424",
+"g c #b7b73e3e2a2a",
+"h c #b3b344443232",
+"j c #c7c73f3f2929",
+"k c #c9c93c3c2626",
+"l c #c3c342422d2d",
+"z c #c4c44f4f3b3b",
+"x c #cece4c4c3737",
+"c c #d5d547473030",
+"v c #d4d448483131",
+"b c #d7d755553f3f",
+"n c #dede51513939",
+"m c #cfcf57574343",
+"M c #d5d555554040",
+"N c #dede5c5c4747",
+"B c #dede5e5e4848",
+"V c #dfdf62624c4c",
+"C c #e7e75f5f4747",
+"Z c #e6e65f5f4848",
+"A c #e7e761614949",
+"S c #eaea60604747",
+"D c #e9e960604848",
+"F c #c0c0c0c0c0c0",
+"G c None",
+/* pixels */
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"sgBVms3=;GGGqlAVzr7+4GGVtbABs7,$",
+"9ibAxe<@;GGV0jCNg8*.GGG4yvAMd1%o",
+"9pnZxe<%;GGG9kCNg8>#4GGVuvDbd1*#",
+"9pnZx9<%;GGV6kCNg8>.4GG4evDba1&O",
+"9pnZxe<%;GGG5kCCg8>#GGGVwvDbd1*#",
+"9pnZxe<%;GGV0knNg8>X4GG4uvDbi1*O",
+"9pnZxe<%;GGG9kCCg8>+4GGVuvDba1*#",
+"9pnZxe<%;GGV6kCNg8>@GGG4evDba1&O",
+"9pnZxe<%;GGG5kCNg8> 4GGVwvDbi1*#",
+"9pnZxe<%;GGV0knCg8:$4GG4uvDbd1*O",
+"9pnZxe<%;GGG9kCNg8: GGGVuvDbd1*#",
+"9pnZxe<%;GGV6kCNg8>.4GG4evDba1&O",
+"8pnCxe<%-GGG5kCCf8:o4GGBwcSbi1&o",
+"sgBVms6$4GGVtlVVzr2+GGG4dmVBh7,$",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG",
+"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG"
+};
diff --git a/kommander/editor/pics/large/editlower.xpm b/kommander/editor/pics/large/editlower.xpm
new file mode 100644
index 00000000..b243115c
--- /dev/null
+++ b/kommander/editor/pics/large/editlower.xpm
@@ -0,0 +1,144 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 106 2",
+" c #b5b552523939",
+". c #84847b7b7b7b",
+"X c #bdbd73736b6b",
+"o c #c6c652523939",
+"O c #cece52523939",
+"+ c #d6d65a5a3939",
+"@ c #dede5a5a3939",
+"# c #efef5a5a3939",
+"$ c #ffff63633939",
+"% c #d6d65a5a4242",
+"& c #cece6b6b5a5a",
+"* c #d6d66b6b5252",
+"= c #d6d66b6b5a5a",
+"- c #dede73735a5a",
+"; c #c6c673736363",
+": c #c6c67b7b6b6b",
+"> c #cece7b7b7373",
+", c #dede7b7b6363",
+"< c #efef5a5a4242",
+"1 c #efef63634242",
+"2 c #e7e76b6b5252",
+"3 c #e7e773735a5a",
+"4 c #efef73735252",
+"5 c #efef73735a5a",
+"6 c #f7f763634242",
+"7 c #f7f76b6b4a4a",
+"8 c #ffff63634242",
+"9 c #ffff6b6b4242",
+"0 c #ffff6b6b4a4a",
+"q c #ffff73734a4a",
+"w c #f7f773735252",
+"e c #f7f773735a5a",
+"r c #ffff73735252",
+"t c #ffff7b7b5a5a",
+"y c #efef7b7b6363",
+"u c #bdbd8c8c7b7b",
+"i c #c6c684847b7b",
+"p c #c6c68c8c7b7b",
+"a c #cece84847373",
+"s c #cece8c8c7b7b",
+"d c #dede84847373",
+"f c #e7e784846b6b",
+"g c #ffff84846363",
+"h c #ffff8c8c6b6b",
+"j c #ffff8c8c7373",
+"k c #8c8c84848484",
+"l c #94948c8c8c8c",
+"z c #949494948c8c",
+"x c Gray58",
+"c c #9c9c94949494",
+"v c Gray61",
+"b c #adad94948c8c",
+"n c #b5b58c8c8484",
+"m c #bdbd94948c8c",
+"M c #b5b59c9c9494",
+"N c #bdbd9c9c9c9c",
+"B c #bdbda5a59c9c",
+"V c #a5a5a5a5a5a5",
+"C c #adada5a5a5a5",
+"Z c Gray68",
+"A c #b5b5a5a5a5a5",
+"S c #b5b5adadadad",
+"D c #b5b5b5b5adad",
+"F c #bdbdb5b5adad",
+"G c Gray71",
+"H c #bdbdb5b5b5b5",
+"J c #bdbdbdbdb5b5",
+"K c Gray74",
+"L c #c6c68c8c8484",
+"P c #cece9c9c8c8c",
+"I c #c6c69c9c9494",
+"U c #d6d694948c8c",
+"Y c #c6c6a5a59c9c",
+"T c #ceceadada5a5",
+"R c #c6c6b5b5adad",
+"E c #c6c6bdbdbdbd",
+"W c #dedeb5b5a5a5",
+"Q c #e7e7bdbdb5b5",
+"! c #e7e7c6c6b5b5",
+"~ c #e7e7c6c6bdbd",
+"^ c #e7e7cecebdbd",
+"/ c #ffffcecebdbd",
+"( c #c0c0c0c0c0c0",
+") c #c6c6c6c6c6c6",
+"_ c #cecec6c6c6c6",
+"` c #cecececec6c6",
+"' c #cececececece",
+"] c #d6d6cececece",
+"[ c Gray84",
+"{ c #deded6d6d6d6",
+"} c #e7e7cecec6c6",
+"| c #e7e7d6d6cece",
+" . c #e7e7deded6d6",
+".. c #e7e7dededede",
+"X. c #ffffd6d6c6c6",
+"o. c #ffffdeded6d6",
+"O. c #efefe7e7dede",
+"+. c #f7f7efefe7e7",
+"@. c #f7f7efefefef",
+"#. c #ffffefefe7e7",
+"$. c #f7f7f7f7efef",
+"%. c #fffff7f7efef",
+"&. c #fffff7f7f7f7",
+"*. c #fffffffff7f7",
+"=. c Gray100",
+"-. c None",
+/* pixels */
+": % * = & ; X : > i u n b m I N B A S R K E K -.-.-.-.-.-.-.-.-.",
+"3 0 0 0 0 9 8 9 0 9 8 8 8 6 6 6 6 # # < 6 Z -.-.-.-.-.-.-.-.-.",
+"f q 0 q 0 q 0 0 0 0 q 0 q 0 0 0 0 q q q q v -.-.-.-.-.-.-.-.-.",
+"d 0 0 0 0 0 0 0 q 0 0 0 0 0 q 0 q 0 0 0 q o v -.-.-.-.-.-.-.-.-.",
+"s 9 0 0 0 0 0 0 0 0 q 0 0 0 0 0 0 0 0 0 q o c -.-.-.-.-.-.-.-.-.",
+"L 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 O x -.-.-.-.-.-.-.-.-.",
+"U 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 q + x -.-.-.-.-.-.-.-.-.",
+"P 0 0 9 0 0 9 0 0 9 0 0 9 0 0 9 0 0 9 0 0 @ l -.-.-.-.-.-.-.-.-.",
+"M 0 9 0 0 9 0 0 9 0 0 9 0 0 9 0 0 9 0 0 0 < k -.-.-.-.-.-.-.-.-.",
+"Y 0 0 0 0 0 0 0 0 9 9 9 9 9 0 9 9 0 9 9 9 1 . -.-.-.-.-.-.-.-.-.",
+"T 0 0 9 9 0 9 9 0 0 5 e w 7 0 7 9 7 8 6 9 # . -.) -.-.-.-.-.-.-.",
+"S 0 9 0 0 9 0 0 8 h O.O. . .| | } ^ ~ ! Q W F J H H G D S Z S Z ",
+"F 7 9 9 0 9 0 9 $ j =.*.=.*.=.*.=.=.=.=.=.=.*.*.*.*.%.&.%.%.$.l ",
+"E w 8 0 9 0 9 0 8 g %.*.&.&.*.&.%.*.&.%.*.%.&.&.&.&.*.%.*.*.&.l ",
+"K 5 9 8 0 9 8 9 8 t %.*.%.%.%.%.*.%.%.&.%.*.%.%.%.%.%.&.%.&.*.z ",
+"K - 8 0 9 8 0 9 8 r #.&.%.*.&.*.&.%.&.*.%.&.%.*.&.*.&.*.%.%.*.l ",
+"E , 9 8 9 0 9 8 8 r #.*.%.%.%.%.%.*.%.%.%.&.%.&.%.%.%.%.&.*.*.l ",
+"-.f 9 0 8 9 0 9 8 0 o.*.&.%.&.%.&.%.%.&.%.%.&.%.%.&.%.&.%.%.=.l ",
+"-.a 8 8 9 8 8 8 8 9 o.*.&.%.&.%.%.&.%.%.&.%.%.&.%.%.%.%.%.%.*.v ",
+"-.p 8 9 8 8 9 9 9 8 X.*.%.%.%.%.&.%.%.%.%.%.%.%.%.%.&.%.&.%.*.V ",
+"-.Y 3 y 5 2 4 w 7 8 / *.%.&.%.%.%.%.&.%.&.%.%.%.&.%.%.%.%.%.=.V ",
+"-.E K ) K K K E K F [ *.%.%.%.&.%.%.%.%.%.%.%.%.%.%.%.%.%.%.*.V ",
+"-.-.-.-.-.-.-.-.-.-.] &.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.=.V ",
+"-.-.-.-.-.-.-.-.-.-._ *.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.*.C ",
+"-.-.-.-.-.-.-.-.-.-._ *.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.=.V ",
+"-.-.-.-.-.-.-.-.-.-.] %.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.*.V ",
+"-.-.-.-.-.-.-.-.-.-.' %.%.%.%.%.%.%.%.%.%.@.%.%.@.%.%.@.%.%.*.C ",
+"-.-.-.-.-.-.-.-.-.-.E %.%.@.%.@.%.@.%.@.%.%.%.%.%.%.%.%.%.%.*.V ",
+"-.-.-.-.-.-.-.-.-.-.J &.%.%.%.%.%.%.%.%.%.@.%.@.%.@.%.%.@.%.*.C ",
+"-.-.-.-.-.-.-.-.-.-._ %.%.%.%.%.%.@.%.%.%.%.#.%.%.#.@.%.#.$.*.S ",
+"-.-.-.-.-.-.-.-.-.-.) O.O.+.+.+.+.@.%.#.$.@.%.%.%.%.%.%.%.%.*.F ",
+"-.-.-.-.-.-.-.-.-.-.K K ) K G K ) ` G K _ ] ' E ' { { ' | ..O.H "
+};
diff --git a/kommander/editor/pics/large/editpaste.xpm b/kommander/editor/pics/large/editpaste.xpm
new file mode 100644
index 00000000..612bb258
--- /dev/null
+++ b/kommander/editor/pics/large/editpaste.xpm
@@ -0,0 +1,46 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 8 1",
+" c Gray0",
+". c #000000008080",
+"X c #808080800000",
+"o c Yellow",
+"O c #808080808080",
+"+ c #c0c0c0c0c0c0",
+"@ c Gray100",
+"# c None",
+/* pixels */
+"################################",
+"################################",
+"########## ##############",
+"######### #############",
+"## oo ######",
+"# oooo #####",
+" XOXOX oo oo OXOXO ####",
+" XOXOX oo oo OXOXO ####",
+" OXOX ++++++++++ OXOX ####",
+" XOXO ++++++++++++ XOXO ####",
+" OXOX OXOX ####",
+" XOXO XOXO ####",
+" OXOXOXOXOXOXOXOXOXOXOXOX ####",
+" XOXOXOXOXOXOXOXOXOXOXOXO ####",
+" OXOXOXOXOX.............. ####",
+" XOXOXOXOXO............... ####",
+" OXOXOXOXOX..@@@@@@@@@@....####",
+" XOXOXOXOXO..@@@@@@@@@@.....###",
+" OXOXOXOXOX..@@@@@@@@@@..@...##",
+" XOXOXOXOXO..@@@@@@@@@@..@@...#",
+" OXOXOXOXOX..@@......@@........",
+" XOXOXOXOXO..@@......@@........",
+" OXOXOXOXOX..@@@@@@@@@@@@@@@@..",
+" XOXOXOXOXO..@@@@@@@@@@@@@@@@..",
+" OXOXOXOXOX..@@............@@..",
+" OXOXOXOXO..@@............@@..",
+"# ..@@@@@@@@@@@@@@@@..",
+"## ..@@@@@@@@@@@@@@@@..",
+"############....................",
+"############....................",
+"################################",
+"################################"
+};
diff --git a/kommander/editor/pics/large/editraise.xpm b/kommander/editor/pics/large/editraise.xpm
new file mode 100644
index 00000000..0ab21ec7
--- /dev/null
+++ b/kommander/editor/pics/large/editraise.xpm
@@ -0,0 +1,149 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 111 2",
+" c #b5b552523939",
+". c #bdbd52523939",
+"X c #8c8c5a5a4a4a",
+"o c #84845a5a5252",
+"O c #949452524242",
+"+ c #9c9c52524242",
+"@ c #848463635a5a",
+"# c #848463636363",
+"$ c #84846b6b6363",
+"% c #84846b6b6b6b",
+"& c #b5b55a5a4242",
+"* c #b5b55a5a4a4a",
+"= c #adad63635252",
+"- c #bdbd73736b6b",
+"; c #c6c652523939",
+": c #d6d64a4a3131",
+"> c #d6d652523939",
+", c #dede52523939",
+"< c #efef52523131",
+"1 c #efef5a5a3939",
+"2 c #f7f75a5a3939",
+"3 c #ffff5a5a3939",
+"4 c #ffff63633939",
+"5 c #d6d65a5a4242",
+"6 c #cece6b6b5a5a",
+"7 c #d6d663634a4a",
+"8 c #dede73735a5a",
+"9 c #c6c673736363",
+"0 c #cece7b7b7373",
+"q c #dede7b7b6363",
+"w c #efef6b6b5252",
+"e c #e7e773735252",
+"r c #efef73735252",
+"t c #f7f763634242",
+"y c #f7f76b6b4a4a",
+"u c #ffff63634242",
+"i c #ffff6b6b4242",
+"p c #ffff6b6b4a4a",
+"a c #f7f76b6b5252",
+"s c #ffff73734a4a",
+"d c #f7f773735252",
+"f c #e7e77b7b6363",
+"g c #e7e77b7b6b6b",
+"h c #9c9c84847b7b",
+"j c #bdbd84847b7b",
+"k c #c6c684847373",
+"l c #c6c68c8c7b7b",
+"z c #dede84846b6b",
+"x c #d6d684847373",
+"c c #e7e784847373",
+"v c #94948c8c8c8c",
+"b c #949494948c8c",
+"n c Gray58",
+"m c #adad94948c8c",
+"M c #b5b58c8c8484",
+"N c #bdbd94948c8c",
+"B c #bdbd9c9c9494",
+"V c #bdbd9c9c9c9c",
+"C c #a5a5a5a59c9c",
+"Z c #bdbda5a59c9c",
+"A c #a5a5a5a5a5a5",
+"S c #adada5a5a5a5",
+"D c Gray68",
+"F c #b5b5a5a5a5a5",
+"G c #b5b5adadadad",
+"H c #b5b5b5b5adad",
+"J c Gray71",
+"K c #bdbdb5b5b5b5",
+"L c Gray74",
+"P c #cece94948484",
+"I c #c6c69c9c9494",
+"U c #d6d69c9c8c8c",
+"Y c #c6c6adada5a5",
+"T c #c6c6b5b5b5b5",
+"R c #c6c6bdbdbdbd",
+"E c #efef9c9c8c8c",
+"W c #ffffa5a58c8c",
+"Q c #ffffadad9494",
+"! c #ffffadad9c9c",
+"~ c #ffffb5b5a5a5",
+"^ c #ffffbdbdadad",
+"/ c #c6c6c6c6bdbd",
+"( c #ffffc6c6b5b5",
+") c #ffffcecebdbd",
+"_ c #c0c0c0c0c0c0",
+"` c #c6c6c6c6c6c6",
+"' c #cecececec6c6",
+"] c #cececececece",
+"[ c #d6d6c6c6c6c6",
+"{ c #d6d6cececece",
+"} c #d6d6d6d6cece",
+"| c #deded6d6cece",
+" . c #deded6d6d6d6",
+".. c #efefd6d6cece",
+"X. c #e7e7deded6d6",
+"o. c #e7e7dededede",
+"O. c #ffffd6d6c6c6",
+"+. c #ffffdeded6d6",
+"@. c #e7e7e7e7dede",
+"#. c #efefe7e7dede",
+"$. c #e7e7e7e7e7e7",
+"%. c #e7e7efefe7e7",
+"&. c #efefe7e7e7e7",
+"*. c #f7f7efefe7e7",
+"=. c #f7f7efefefef",
+"-. c #f7f7f7f7efef",
+";. c #fffff7f7efef",
+":. c #fffff7f7f7f7",
+">. c #fffffffff7f7",
+",. c Gray100",
+"<. c None",
+/* pixels */
+"6 5 7 6 6 9 - - 0 k j M m N I V Z F G T K R <.<.<.<.<.<.<.<.<.<.",
+"d p p p i i i i i p u u 4 2 2 1 1 1 < 1 , h <.<.<.<.<.<.<.<.<.<.",
+"8 s p s p p p p p p p p p s s p s p s d t % <.<.<.<.<.<.<.<.<.<.",
+"f p p p p p p p p p p s p p p p p p p p t $ <.<.<.<.<.<.<.<.<.<.",
+"c i p p p p s p s p p p p p p p p p p p i # <.<.<.<.<.<.<.<.<.<.",
+"x p p p p p p p p p p p p p p p p p p p i @ <.<.<.<.<.<.<.<.<.<.",
+"l i p p p p p p p p p i p p i p p i p p p o <.<.<.<.<.<.<.<.<.<.",
+"P i p i p p i p p i p p p p p p i p p p i o <.<.<.<.<.<.<.<.<.<.",
+"U p p p p i p p i p p i p i p i p p i i p X L <.<.<.<.<.<.<.<.<.",
+"I i p i p p i p p i p i p i p p i p p p i O <.<.<.<.<.<.<.<.<.<.",
+"V p i p i i p i p i p i p p i p i p i i p + D H G J J J H J K L ",
+"Y p p i p p p i p p i p p i p i p p i p u = %.:.;.-.*.&.#.@. .b ",
+"Y i u p u i u p u i p u i p u p u i u p i * %.>.>.:.>.>.>.>.>.v ",
+"G y i p i p i p p u p i p u i p p i p u i & $.>.;.;.;.;.:.:.>.v ",
+"K y i u p u p u i p u i u p i u i u i p u @.>.:.>.:.:.;.;.>.b ",
+"R d u p i i i i p u p i p u p i p i p u i @.>.;.;.;.;.;.:.>.v ",
+"L w i i u p u p u i i u i i u u p u i i p o.>.:.;.:.;.:.;.>.v ",
+"L e u i i u i u i u i p u i i u u i u u i . X.>.;.:.;.:.;.>.>.n ",
+"L f i u i u i u p i u u u u p i u p i i u ; | >.;.;.;.;.;.:.>.C ",
+"` f u p u i u i u u u i p i u u i u u u i ; | >.;.;.:.;.;.;.>.A ",
+"L q u u u u u u u i u u u u u i u u i u u > { >.;.:.;.;.;.;.,.C ",
+"L B x z g 8 e r a p t p i u u u 4 3 3 3 4 : [ >.;.;.;.;.;.;.,.C ",
+"<.<.<.<.<.L L L R H G ..+.O.) ( ^ ~ ! Q W E #.:.;.;.;.;.;.;.,.S ",
+"<.<.<.<.<.<.<.<.<.<.R @.>.:.>.>.>.,.>.,.>.>.;.;.;.;.;.;.;.;.,.C ",
+"<.<.<.<.<.<.<.<.<.<.` o.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.>.A ",
+"<.<.<.<.<.<.<.<.<.<.L #.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.,.C ",
+"<.<.<.<.<.<.<.<.<.<.L .;.;.;.=.;.;.=.;.;.=.;.;.=.;.;.=.;.;.>.S ",
+"<.<.<.<.<.<.<.<.<.<.L } ;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.,.C ",
+"<.<.<.<.<.<.<.<.<.<.` ] :.;.=.;.=.;.;.=.;.;.=.;.;.=.;.;.=.;.>.S ",
+"<.<.<.<.<.<.<.<.<.<.<.X.;.;.;.;.;.;.=.;.=.*.;.=.*.;.=.*.;.=.>.G ",
+"<.<.<.<.<.<.<.<.<.<.<.' #.&.*.*.*.*.;.*.;.;.;.>.;.;.;.;.;.;.>.H ",
+"<.<.<.<.<.<.<.<.<.<.<.L L L L J L ' ` K / ] { R ' | .{ | .&.K "
+};
diff --git a/kommander/editor/pics/large/editslots.xpm b/kommander/editor/pics/large/editslots.xpm
new file mode 100644
index 00000000..729adb8f
--- /dev/null
+++ b/kommander/editor/pics/large/editslots.xpm
@@ -0,0 +1,264 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 226 2",
+" c #181808080000",
+". c #080821212929",
+"X c #181829292929",
+"o c #292910100000",
+"O c #313110100000",
+"+ c #393918180000",
+"@ c #393918180808",
+"# c #313121212121",
+"$ c #393931312929",
+"% c #000031314242",
+"& c #080842425252",
+"* c #181842424a4a",
+"= c #000052526b6b",
+"- c #080863637b7b",
+"; c #313142424a4a",
+": c #4a4a21210000",
+"> c #525229290000",
+", c #636329290000",
+"< c #6b6b29290000",
+"1 c #6b6b31310000",
+"2 c #7b7b31310000",
+"3 c #6b6b4a4a3131",
+"4 c #73734a4a3131",
+"5 c #42424a4a5252",
+"6 c #5a5a52524a4a",
+"7 c #42425a5a6363",
+"8 c #636363635a5a",
+"9 c #73736b6b6363",
+"0 c #73737b7b7b7b",
+"q c #7b7b73737373",
+"w c #7b7b7b7b7373",
+"e c #00006b6b8484",
+"r c #08086b6b8484",
+"t c #000073739494",
+"y c #08088c8c9c9c",
+"u c #08088484adad",
+"i c #08088c8cadad",
+"p c #08089494b5b5",
+"a c #18188484a5a5",
+"s c #1818a5a5bdbd",
+"d c #31319c9cadad",
+"f c #31319c9cb5b5",
+"g c #08089c9cc6c6",
+"h c #1010a5a5cece",
+"j c #1010adadd6d6",
+"k c #1010bdbdefef",
+"l c #1818bdbde7e7",
+"z c #2929a5a5c6c6",
+"x c #3131bdbdd6d6",
+"c c #1010c6c6efef",
+"v c #1010ceceffff",
+"b c #1818c6c6f7f7",
+"n c #1818ceceffff",
+"m c #1010d6d6ffff",
+"M c #1818e7e7ffff",
+"N c #1818efefffff",
+"B c #1818ffffffff",
+"V c #3131c6c6c6c6",
+"C c #3939c6c6c6c6",
+"Z c #2121dedeefef",
+"A c #3939dedee7e7",
+"S c #2121e7e7e7e7",
+"D c #2121efefffff",
+"F c #2121ffffffff",
+"G c #2929ffffffff",
+"H c #3939efefefef",
+"J c #3131f7f7ffff",
+"K c #3131ffffffff",
+"L c #3939ffffffff",
+"P c #4242a5a5b5b5",
+"I c #5a5ab5b5b5b5",
+"U c #6b6b84848c8c",
+"Y c #737384848c8c",
+"T c #7b7b84848484",
+"R c #7373a5a5adad",
+"E c #7373adadb5b5",
+"W c #7b7bb5b5bdbd",
+"Q c #7b7bbdbdc6c6",
+"! c #4a4ad6d6d6d6",
+"~ c #4a4ad6d6dede",
+"^ c #5252d6d6dede",
+"/ c #5252dededede",
+"( c #4242e7e7efef",
+") c #4a4affffffff",
+"_ c #5252ffffffff",
+"` c #6363dededede",
+"' c #6b6bdededede",
+"] c #7b7bc6c6c6c6",
+"[ c #7373c6c6d6d6",
+"{ c #6b6befefefef",
+"} c #6363ffffffff",
+"| c #7373f7f7ffff",
+" . c #7373ffffffff",
+".. c #848439390000",
+"X. c #949442420000",
+"o. c #9c9c42420000",
+"O. c #94945a5a1818",
+"+. c #a5a542420000",
+"@. c #adad42420000",
+"#. c #adad4a4a0000",
+"$. c #b5b54a4a0000",
+"%. c #b5b552520000",
+"&. c #bdbd52520000",
+"*. c #adad6b6b3939",
+"=. c #8c8c63634a4a",
+"-. c #94946b6b4242",
+";. c #84847b7b7b7b",
+":. c #adad73734a4a",
+">. c #c6c65a5a0808",
+",. c #d6d65a5a0000",
+"<. c #dede63630808",
+"1. c #d6d66b6b1818",
+"2. c #e7e763630000",
+"3. c #efef6b6b0808",
+"4. c #e7e773731818",
+"5. c #f7f763630000",
+"6. c #f7f76b6b1010",
+"7. c #ffff73730808",
+"8. c #ffff7b7b0000",
+"9. c #f7f773731010",
+"0. c #ffff7b7b1010",
+"q. c #ffff7b7b1818",
+"w. c #bdbd9c9c3939",
+"e. c #b5b58c8c7373",
+"r. c #d6d68c8c2929",
+"t. c #d6d68c8c3131",
+"y. c #ffff84840808",
+"u. c #ffff8c8c0808",
+"i. c #ffff84841818",
+"p. c #ffff8c8c1010",
+"a. c #ffff8c8c1818",
+"s. c #ffff94940808",
+"d. c #ffff9c9c0808",
+"f. c #ffff94941818",
+"g. c #ffff9c9c1010",
+"h. c #efef84842121",
+"j. c #efef94942929",
+"k. c #ffff94942121",
+"l. c #ffff94942929",
+"z. c #ffff9c9c3131",
+"x. c #ffffa5a50808",
+"c. c #ffffa5a52121",
+"v. c #ffffa5a52929",
+"b. c #ffffa5a53131",
+"n. c #ffffadad3939",
+"m. c #ffffb5b52929",
+"M. c #ffffbdbd2121",
+"N. c #ffffbdbd3131",
+"B. c #d6d694945252",
+"V. c #d6d694945a5a",
+"C. c #cece9c9c6363",
+"Z. c #c6c69c9c7b7b",
+"A. c #ffffb5b54242",
+"S. c #ffffc6c63131",
+"D. c #ffffcece3131",
+"F. c #ffffc6c64a4a",
+"G. c #ffffc6c65252",
+"H. c #ffffd6d64242",
+"J. c #ffffdede4a4a",
+"K. c #ffffd6d65252",
+"L. c #ffffd6d65a5a",
+"P. c #ffffdede5a5a",
+"I. c #f7f7d6d66363",
+"U. c #ffffe7e76363",
+"Y. c #ffffe7e76b6b",
+"T. c #ffffefef6b6b",
+"R. c #fffff7f76363",
+"E. c #fffff7f77373",
+"W. c #ffffffff7373",
+"Q. c #84848c8c8c8c",
+"!. c #94948c8c8484",
+"~. c #94948c8c8c8c",
+"^. c #9c9c94948c8c",
+"/. c #9c9c9c9c9494",
+"(. c Gray61",
+"). c #8c8c9c9ca5a5",
+"_. c #9494a5a5a5a5",
+"`. c #9c9ca5a5a5a5",
+"'. c #9494bdbdbdbd",
+"]. c #a5a59c9c9494",
+"[. c #b5b5a5a59494",
+"{. c #bdbda5a59494",
+"}. c #a5a5a5a5a5a5",
+"|. c Gray68",
+" X c #a5a5bdbdbdbd",
+".X c #adadb5b5b5b5",
+"XX c #adadbdbdbdbd",
+"oX c #bdbdadada5a5",
+"OX c Gray71",
+"+X c #b5b5bdbdbdbd",
+"@X c #bdbdb5b5b5b5",
+"#X c Gray74",
+"$X c #8c8cbdbdc6c6",
+"%X c #8484c6c6c6c6",
+"&X c #8484ffffffff",
+"*X c #8c8cffffffff",
+"=X c #9494efefefef",
+"-X c #9c9ce7e7e7e7",
+";X c #9494ffffffff",
+":X c #9c9cffffffff",
+">X c #adadffffffff",
+",X c #b5b5ffffffff",
+"<X c #bdbdffffffff",
+"1X c #c6c6a5a58484",
+"2X c #c6c6adad9c9c",
+"3X c #c6c6b5b5adad",
+"4X c #c6c6bdbdbdbd",
+"5X c #ffffffff8484",
+"6X c #ffffffff8c8c",
+"7X c #ffffffff9494",
+"8X c #ffffffff9c9c",
+"9X c #ffffffffadad",
+"0X c #ffffffffbdbd",
+"qX c #c0c0c0c0c0c0",
+"wX c #c6c6c6c6c6c6",
+"eX c #c6c6ffffffff",
+"rX c #ceceffffffff",
+"tX c #d6d6ffffffff",
+"yX c #dedeffffffff",
+"uX c #ffffffffc6c6",
+"iX c #ffffffffcece",
+"pX c #ffffffffd6d6",
+"aX c #ffffffffdede",
+"sX c #e7e7ffffffff",
+"dX c Gray100",
+"fX c None",
+/* pixels */
+"fXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfXfX#X%X^ Z U fXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfX'.H B G S ; #XfXfXfXfX#X2XZ.Z.{.@XfXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfX] B K ) _ C X #XfXfX#X1Xj.s.s.u.8.4.e.#XfXfXfXfXfXfX",
+"fXfXfXfXfX'.F L } &X;XI . OXfX#XB.d.M.D.S.m.f.y.5.*.OXfXfXfXfXfX",
+"fXfXfXfXOXG K } ;X<XrXE & |.fXC.x.H.U.W.W.P.N.f.7.,.-.#XfXfXfXfX",
+"fXfXfXfXQ F ) &X<XyXsXW e .XoXs.m.R.8X0X9X5XK.c.0.2.o.^.fXfXfXfX",
+"fXfXfXwXA G _ ;XeXsXdXQ p |.V.g.H.6XuXaXiX8XU.b.0.<.@.4 #XfXfXfX",
+"XX X.X$XN G _ *X<XtXsX[ l }.h.f.J.6X0XpXuX7XL.b.0.<.+.> [.3X3X@X",
+":X;X;X| M G ) .:X>X,X' ( /.9.f.S.T.8X9X8XE.F.k.6.>.X.: w.P.L.I.",
+"P f d z m F L _ . .&X` { ].3.p.v.G.T.E.Y.G.z.q.<.#...+ O.t.r.t.",
+"|.(.`._.c M G L ) _ _ / =X}.1.7.a.v.n.A.n.l.q.<.&.X., o q !.;.~.",
+"fXfXfX4Xz v n D J J J ~ -X.X:.2.7.0.i.i.i.9.<.&.o.2 + # #XfXfXfX",
+"fXfXfXfXR j k b n b b x ' OX(.#.,.<.<.6.<.>.%.X.2 : w fXfXfXfX",
+"fXfXfXfXOXa g j j j h s ! @X#X=.X.$.%.#.+.o...1 : $ #XfXfXfXfX",
+"fXfXfXfXfX).t u i u a y V #XfX+X3 < 2 ..2 1 > O # |.fXfXfXfXfX",
+"fXfXfXfXfX4XY = - r - - d #XfXfX#X9 @ O O o 6 OXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfXQ.* % % % 7 4XfXfXfXfX|.T 9 8 ;.}.fXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfXfXOXT 5 X 0 fXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX",
+"fXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfXfX"
+};
diff --git a/kommander/editor/pics/large/editvlayout.xpm b/kommander/editor/pics/large/editvlayout.xpm
new file mode 100644
index 00000000..9e1b618e
--- /dev/null
+++ b/kommander/editor/pics/large/editvlayout.xpm
@@ -0,0 +1,89 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 51 1",
+" c #1e1e05050202",
+". c #262606060000",
+"X c #25250e0e0b0b",
+"o c #272710100d0d",
+"O c #242415151313",
+"+ c #2d2d1f1f1d1d",
+"@ c #36360b0b0303",
+"# c #333327272525",
+"$ c #353529292727",
+"% c #4a4a0f0f0505",
+"& c #4e4e17170e0e",
+"* c #4f4f19191010",
+"= c #5a5a13130707",
+"- c #45453a3a3838",
+"; c #666616160909",
+": c #68681e1e1212",
+"> c #78781c1c0d0d",
+", c #696920201414",
+"< c #797925251717",
+"1 c #4a4a40403e3e",
+"2 c #7c7c44443b3b",
+"3 c #4c4c42424040",
+"4 c #8b8b25251414",
+"5 c #8a8a2d2d1e1e",
+"6 c #9b9b2d2d1b1b",
+"7 c #959535352424",
+"8 c #94943b3b2c2c",
+"9 c #a2a22f2f1b1b",
+"0 c #b7b72a2a1212",
+"q c #b2b231311b1b",
+"w c #aeae37372424",
+"e c #adad38382525",
+"r c #aaaa3d3d2c2c",
+"t c #c7c749493434",
+"y c #c2c24d4d3a3a",
+"u c #d7d746462e2e",
+"i c #eded52523838",
+"p c #d3d35b5b4848",
+"a c #dcdc57574141",
+"s c #e6e66a6a5555",
+"d c #efef68685151",
+"f c #fdfd66664b4b",
+"g c #f6f676765e5e",
+"h c #ffff75755b5b",
+"j c #f6f67e7e6767",
+"k c #f6f67f7f6868",
+"l c #ffff7f7f6666",
+"z c #f6f683836c6c",
+"x c #ffff83836a6a",
+"c c #c0c0c0c0c0c0",
+"v c None",
+/* pixels */
+"vvvvvvvvvtqqqqqqqqqqqqrvvvvvvvvv",
+"vvvvvvvvvaiiiiiiiiiiiiivvvvvvvvv",
+"vvvvvvvvvzlllllllllllxzvvvvvvvvv",
+"vvvvvvvvvklhlhlhlhlhlhkvvvvvvvvv",
+"vvvvvvvvvyttttttttttttyvvvvvvvvv",
+"vvvvvvvvv8<444444444448vvvvvvvvv",
+"vvvvvvvvv,============,vvvvvvvvv",
+"vvvvvvvvv+............+vvvvvvvvv",
+"vvvvvvvvv311111111111-3vvvvvvvvv",
+"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv",
+"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv",
+"vvvvvvvvvzvzvzvzvzvzvzvvvvvvvvvv",
+"vvvvvvvvvr090909090900wvvvvvvvvv",
+"vvvvvvvvvgffffffffffffgvvvvvvvvv",
+"vvvvvvvvvzxxxxxxxxxxxxzvvvvvvvvv",
+"vvvvvvvvvgddddddddddddsvvvvvvvvv",
+"vvvvvvvvvreeeeeeeeeeeervvvvvvvvv",
+"vvvvvvvvv7:>>>>>>>>>>>5vvvvvvvvv",
+"vvvvvvvvv*%%%%%%%%%%%&*vvvvvvvvv",
+"vvvvvvvvv+ +vvvvvvvvv",
+"vvvvvvvvvz3z3v2z3v2z3z2vvvvvvvvv",
+"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv",
+"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv",
+"vvvvvvvvvsppppppppppppsvvvvvvvvv",
+"vvvvvvvvvyuuruuuruuuruyvvvvvvvvv",
+"vvvvvvvvvjghhhghhhghhhjvvvvvvvvv",
+"vvvvvvvvvzllllllllllllzvvvvvvvvv",
+"vvvvvvvvvpaaaaaaaaaaaapvvvvvvvvv",
+"vvvvvvvvv86666666666668vvvvvvvvv",
+"vvvvvvvvv5;;;;;;;;;;;;5vvvvvvvvv",
+"vvvvvvvvv*@@@@@@@@@@@@*vvvvvvvvv",
+"vvvvvvvvv$ooOOOOOOOOOX#vvvvvvvvv"
+};
diff --git a/kommander/editor/pics/large/filenew.xpm b/kommander/editor/pics/large/filenew.xpm
new file mode 100644
index 00000000..0cb2496e
--- /dev/null
+++ b/kommander/editor/pics/large/filenew.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 4 1",
+" c Gray0",
+". c #c0c0c0c0c0c0",
+"X c Gray100",
+"o c None",
+/* pixels */
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooo oooooooooooo",
+"oooo ooooooooooo",
+"oooo XXXXXXXXXXXX oooooooooo",
+"oooo XXXXXXXXXXXX ooooooooo",
+"oooo XXXXXXXXXXXX X oooooooo",
+"oooo XXXXXXXXXXXX XX ooooooo",
+"oooo XXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXXXXXXXX oooooo",
+"oooo XXXXXXXXXXXXXXXXXX oooooo",
+"oooo oooooo",
+"oooo oooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo"
+};
diff --git a/kommander/editor/pics/large/fileopen.xpm b/kommander/editor/pics/large/fileopen.xpm
new file mode 100644
index 00000000..dc66dca4
--- /dev/null
+++ b/kommander/editor/pics/large/fileopen.xpm
@@ -0,0 +1,44 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 6 1",
+" c Gray0",
+". c #808080800000",
+"X c Yellow",
+"o c #c0c0c0c0c0c0",
+"O c Gray100",
+"+ c None",
+/* pixels */
+"++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++",
+"++++++++++++++++++ ++++++++",
+"+++++++++++++++++ +++++++",
+"++++++++++++++++ ++++ ++ ++",
+"++++++++++++++++ ++++++ + ++",
+"+++++++++++++++++++++++++ ++",
+"++++++++++++++++++++++++++ ++",
+"++ ++++++++++++++++ ++",
+"+ +++++++++++++++ ++",
+" OXOX ++++++++++",
+" OXOXOX ++++++++++",
+" XOXOXOXOXOXOXOXOXO ++++++++++",
+" OXOXOXOXOXOXOXOXOX ++++++++++",
+" XOXOXOXOXOXOXOXOXO ++++++++++",
+" OXOXOXOXOXOXOXOXOX ++++++++++",
+" XOXOXOXO ",
+" OXOXOXO ",
+" XOXOXO ................. +",
+" OXOXO ................. ++",
+" XOXO ................. +++",
+" OXO ................. ++++",
+" XO ................. +++++",
+" O ................. ++++++",
+" ................. +++++++",
+" ................. ++++++++",
+" +++++++++",
+" ++++++++++",
+"++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++"
+};
diff --git a/kommander/editor/pics/large/filesave.xpm b/kommander/editor/pics/large/filesave.xpm
new file mode 100644
index 00000000..c882806f
--- /dev/null
+++ b/kommander/editor/pics/large/filesave.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 4 1",
+" c Gray0",
+". c #808080800000",
+"X c #c0c0c0c0c0c0",
+"o c None",
+/* pixels */
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oo oo",
+"oo oo",
+"oo .. XXXXXXXXXXXXXXXX XX oo",
+"oo .. XXXXXXXXXXXXXXXX XX oo",
+"oo .. XXXXXXXXXXXXXXXX oo",
+"oo .. XXXXXXXXXXXXXXXX oo",
+"oo .. XXXXXXXXXXXXXXXX .. oo",
+"oo .. XXXXXXXXXXXXXXXX .. oo",
+"oo .. XXXXXXXXXXXXXXXX .. oo",
+"oo .. XXXXXXXXXXXXXXXX .. oo",
+"oo .. XXXXXXXXXXXXXXXX .. oo",
+"oo .. XXXXXXXXXXXXXXXX .. oo",
+"oo .. XXXXXXXXXXXXXXXX .. oo",
+"oo .. XXXXXXXXXXXXXXXX .. oo",
+"oo ... ... oo",
+"oo .... .... oo",
+"oo ........................ oo",
+"oo ........................ oo",
+"oo .... .. oo",
+"oo .... .. oo",
+"oo .... XXXX .. oo",
+"oo .... XXXX .. oo",
+"oo .... XXXX .. oo",
+"oo .... XXXX .. oo",
+"oo .... XXXX .. oo",
+"oo .... XXXX .. oo",
+"ooo oo",
+"oooo oo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo"
+};
diff --git a/kommander/editor/pics/large/form.xpm b/kommander/editor/pics/large/form.xpm
new file mode 100644
index 00000000..bb59212e
--- /dev/null
+++ b/kommander/editor/pics/large/form.xpm
@@ -0,0 +1,91 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 53 1",
+" c #42429c9cffff",
+". c #4a4a9c9cf7f7",
+"X c #52529c9cf7f7",
+"o c #4a4aa5a5ffff",
+"O c #5252a5a5f7f7",
+"+ c #5252a5a5ffff",
+"@ c #5252adadffff",
+"# c #5a5aa5a5f7f7",
+"$ c #5a5aa5a5ffff",
+"% c #5a5aadadffff",
+"& c #5a5ab5b5ffff",
+"* c #6363adadf7f7",
+"= c #6363adadffff",
+"- c #6b6bb5b5efef",
+"; c #6363b5b5ffff",
+": c #b5b5bdbdbdbd",
+"> c Gray74",
+", c #bdbdc6c6bdbd",
+"< c #9c9cc6c6e7e7",
+"1 c #9c9ccecef7f7",
+"2 c #bdbdc6c6c6c6",
+"3 c #a5a5ceceefef",
+"4 c #a5a5cecef7f7",
+"5 c #a5a5ceceffff",
+"6 c #a5a5d6d6ffff",
+"7 c #adadd6d6ffff",
+"8 c #adaddedeffff",
+"9 c #c6c6c6c6c6c6",
+"0 c #c6c6cecec6c6",
+"q c #c6c6cececece",
+"w c #cececececece",
+"e c #ceced6d6cece",
+"r c #ceced6d6d6d6",
+"t c #cecededed6d6",
+"y c #d6d6deded6d6",
+"u c #d6d6dededede",
+"i c #d6d6e7e7dede",
+"p c #dedee7e7dede",
+"a c #dedee7e7e7e7",
+"s c #dedeefefe7e7",
+"d c #e7e7efefe7e7",
+"f c #e7e7efefefef",
+"g c #efefefefefef",
+"h c #e7e7f7f7efef",
+"j c #efeff7f7efef",
+"k c #efeff7f7f7f7",
+"l c #efeffffff7f7",
+"z c #f7f7f7f7efef",
+"x c #f7f7ffffefef",
+"c c #f7f7fffff7f7",
+"v c #f7f7ffffffff",
+"b c #fffffffff7f7",
+"n c Gray100",
+/* pixels */
+"-;*;*;*=*=*=*=#=#%#%#%#$#$#$#$O*",
+"*&%&%%%%%%%@%@%@%+%+++++++oooooX",
+"-&%%%%%%%%%%@$%+@++++++++o++++o#",
+"#++@+@o+oooooooooooooo o o .",
+"3876767667647464544144414141111<",
+"dnbbbbbbbcbccbxcxccxczxzjzjzjzdp",
+"hvlvllllllllljljkjhjhhhhhfhdddja",
+"fclclclkljkkjkhkjhkhfhfhfhdfffsp",
+"flllklklkkjkjkjkhhhhhfhfdffsdsfu",
+"dlcklkljlkhkhhhhjhghfhfdhsdfsdsu",
+"alkljljkkjkjhkhjfhhfhdhfdffsfsfy",
+"pklkkkkjhkhhhjhhhhfffhdsfssdsdsr",
+"ulkjkhjkhhjkhhffffhdddfdsdfssade",
+"uljkhkhhjhhhfhhhhdfhfsdfsssdasse",
+"ylkhjhkhhjfhhffdfhsdsfssddassaau",
+"rkhhkhhhhfhffhdhfdfsfdsdsasaaasy",
+"ykhjhhghfhfhdfddsfsdssdassaspspr",
+"phjhghhffhdhfdffdsdfsassaasaapsr",
+"uhfhhffhfdffsfdssdsadssaaspapaae",
+"ujhffhdfdhdsfssfdsassaaaspapaipq",
+"yhfhdfhdfsfsdsdssasaaspspapaips0",
+"rhdfhsdfsdsdsdsassaspsapaiaiaia2",
+"efhdsdfsdsfssadsaaspaapapaipiip9",
+"whfsffsdsdsadsaapapappapiiipipir",
+"qfsdsssssasaaasasapapaiiapiuiuie",
+"0hsdsdadasasspappaiaiiaiuipiuiuq",
+",fdsassasaspaspaappiaipipuiuiuiq",
+"qdsasaasaspaapiaiiapipiuiuiuiui9",
+"ysasaspapapapiaipaiiuiuiuiuiyui,",
+"rasapsaspapiapiaiipiiuiuiuyuyui>",
+"wsspaappaiapiapipuiuiiuiuuiyuyi>",
+"0apiiiiuiiuiuyuyuyuyyyyyyttrttu:"
+};
diff --git a/kommander/editor/pics/large/frame.xpm b/kommander/editor/pics/large/frame.xpm
new file mode 100644
index 00000000..7984aca6
--- /dev/null
+++ b/kommander/editor/pics/large/frame.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 20 1",
+" c #0e0e0e0e0e0e",
+". c #161616161616",
+"X c Gray12",
+"o c #272727272727",
+"O c #2f2f2f2f2f2f",
+"+ c #373737373737",
+"@ c #3f3f3f3f3f3f",
+"# c Gray28",
+"$ c Gray31",
+"% c #555555555555",
+"& c #5f5f5f5f5f5f",
+"* c #676767676767",
+"= c #6f6f6f6f6f6f",
+"- c #777777777777",
+"; c Gray50",
+": c Gray53",
+"> c #8d8d8d8d8d8d",
+", c #939393939393",
+"< c #c0c0c0c0c0c0",
+"1 c None",
+/* pixels */
+"1,,,,>,,,,,>>:::;::::::;:::--:>1",
+",,>--=====*******************=*;",
+":-&*%#@++OO++OOOOOOOO+O++@#%&&*&",
+"-**.#;:,,,,,,,,,,,,,,,,,,>:&+&*$",
+"=*#$111111111111111111111111-&*#",
+"==o;111111111111111111111111,%*$",
+"==.>1111111111111111111111111$*%",
+"== ,1111111111111111111111111$*&",
+"== ,1111111111111111111111111%*$",
+"== ,1111111111111111111111111%=%",
+"==.,1111111111111111111111111%*%",
+"*=.,1111111111111111111111111%=$",
+"== ,1111111111111111111111111%*#",
+"*=.,1111111111111111111111111%*#",
+"**.,1111111111111111111111111**#",
+"*= ,1111111111111111111111111&*#",
+"*= ,1111111111111111111111111$*@",
+"*=.,1111111111111111111111111$*#",
+"&=.,111111111111111111111111,%*%",
+"=*X,1111111111111111111111111&*$",
+"-*X,1111111111111111111111111%*#",
+"=*X>1111111111111111111111111%*#",
+"==X:111111111111111111111111,&*#",
+"**o:111111111111111111111111,&*%",
+"==O;111111111111111111111111,**%",
+";*+=111111111111111111111111,**$",
+"**#&111111111111111111111111:&*%",
+"=*%o111111111111111111111111=**%",
+";**@O=;:,,,,,,,,,,1,,1,,,,>;:**$",
+":*&*=**==-----=---=;---;==-;*&&=",
+",$&&*********&*********&**&**&#,",
+"1,=%%$$%$#@#$$$$#@@@@@#@@$$@$%>1"
+};
diff --git a/kommander/editor/pics/large/groupbox.xpm b/kommander/editor/pics/large/groupbox.xpm
new file mode 100644
index 00000000..4241ece5
--- /dev/null
+++ b/kommander/editor/pics/large/groupbox.xpm
@@ -0,0 +1,60 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 22 1",
+" c #060606060606",
+". c Gray6",
+"X c Gray9",
+"o c Gray12",
+"O c #272727272727",
+"+ c #2f2f2f2f2f2f",
+"@ c #373737373737",
+"# c #3f3f3f3f3f3f",
+"$ c Gray28",
+"% c Gray31",
+"& c Gray34",
+"* c #5f5f5f5f5f5f",
+"= c #676767676767",
+"- c #6f6f6f6f6f6f",
+"; c #777777777777",
+": c Gray50",
+"> c Gray53",
+", c #8d8d8d8d8d8d",
+"< c #959595959595",
+"1 c #9f9f9f9f9f9f",
+"2 c #c0c0c0c0c0c0",
+"3 c None",
+/* pixels */
+"333333<o..........+3333333333333",
+"331111# ;,,,1<<>>,133",
+"311<,<+ ->::;:::::;>3",
+"3,>;;-. @$$$$%&=;-;-3",
+"3>;-O*= X11111<>-@;;=3",
+"3>:$-3311111111111333333333<&;*3",
+"3::o133333333333333333333333&:=3",
+"3;:X133333333333333333333333&;-3",
+"3::X333333333333333333333333*:=3",
+"3;:X333333333333333333333333=:=3",
+"3;:X333333333333333333333333-:=3",
+"3;:o133333333333333333333333=:=3",
+"3;:X333333333333333333333333*:*3",
+"3;:X333333333333333333333333*:*3",
+"3::X333333333333333333333333*:*3",
+"3::X333333333333333333333333=:*3",
+"3::X333333333333333333333333*:&3",
+"3::X333333333333333333333333=:&3",
+"3::X333333333333333333333333=:=3",
+"3;:o133333333333333333333333=:=3",
+"3;:o133333333333333333333333*:*3",
+"3;:o133333333333333333333333*:&3",
+"3::O133333333333333333333333*:*3",
+"3::O133333333333333333333333=:=3",
+"3::+133333333333333333333333*;=3",
+"3;:+,33333333333333333333331=:*3",
+"3::#:33333333333333333333331-;=3",
+"3;:&&3333333333333333333333,:;*3",
+"3:;;+=<1113113133333333111<,:;*3",
+"3>;-;;;;:::>:;;;;;;;;;:::>,>-;-3",
+"31=;;;;;;:;:::::;:::::;:;;;;;&,3",
+"33<-*&=*&*=-=**&&&&&*&&&=*&**:33"
+};
diff --git a/kommander/editor/pics/large/help.xpm b/kommander/editor/pics/large/help.xpm
new file mode 100644
index 00000000..4f3a1ff7
--- /dev/null
+++ b/kommander/editor/pics/large/help.xpm
@@ -0,0 +1,182 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 144 2",
+" c #212100002121",
+". c #313100003131",
+"X c #393900003131",
+"o c #393900003939",
+"O c #313118182929",
+"+ c #393910103939",
+"@ c #424218183939",
+"# c #424221213939",
+"$ c #424239393939",
+"% c #4a4a08084a4a",
+"& c #4a4a10104242",
+"* c #5a5a00005252",
+"= c #5a5a08085252",
+"- c #525218184a4a",
+"; c #424231314242",
+": c #4a4a39394a4a",
+"> c #525239394a4a",
+", c #636318185a5a",
+"< c #6b6b00006363",
+"1 c #6b6b18186363",
+"2 c #737300006b6b",
+"3 c #6b6b31316b6b",
+"4 c #737339397373",
+"5 c #525242425252",
+"6 c #5a5a42425a5a",
+"7 c #6b6b4a4a6b6b",
+"8 c #7b7b7b7b7b7b",
+"9 c #848400007373",
+"0 c #848400007b7b",
+"q c #84846b6b7b7b",
+"w c #8c8c08088484",
+"e c #8c8c18188484",
+"r c #9c9c00008c8c",
+"t c #949410108c8c",
+"y c #848431318484",
+"u c #9c9c21219494",
+"i c #9c9c39399494",
+"p c #a5a508089c9c",
+"a c #adad0808a5a5",
+"s c #adad1010a5a5",
+"d c #b5b51010adad",
+"f c #b5b51818adad",
+"g c #bdbd1010adad",
+"h c #bdbd1010b5b5",
+"j c #b5b53939adad",
+"k c #848442428484",
+"l c #8c8c73738c8c",
+"z c #8c8c7b7b8c8c",
+"x c #94947b7b9494",
+"c c #bdbd5252b5b5",
+"v c #adad7b7badad",
+"b c #b5b57b7badad",
+"n c #cece1818c6c6",
+"m c #d6d60808c6c6",
+"M c #d6d61818cece",
+"N c #dede1818cece",
+"B c #dede1010d6d6",
+"V c #dede1818d6d6",
+"C c #cece2929cece",
+"Z c #d6d62929cece",
+"A c #dede2929d6d6",
+"S c #dede3131dede",
+"D c #dede3939d6d6",
+"F c #e7e71010d6d6",
+"G c #e7e71010dede",
+"H c #e7e71818dede",
+"J c #efef1818e7e7",
+"K c #f7f71818efef",
+"L c #ffff1818f7f7",
+"P c #e7e72929dede",
+"I c #e7e73131dede",
+"U c #efef2121e7e7",
+"Y c #efef2929e7e7",
+"T c #e7e73131e7e7",
+"R c #e7e73939e7e7",
+"E c #efef3131efef",
+"W c #f7f72121efef",
+"Q c #f7f72929f7f7",
+"! c #ffff2121f7f7",
+"~ c #ffff2929f7f7",
+"^ c #ffff2929ffff",
+"/ c #f7f73131f7f7",
+"( c #f7f73939f7f7",
+") c #ffff3131ffff",
+"_ c #ffff3939f7f7",
+"` c #ffff3939ffff",
+"' c #c6c64a4abdbd",
+"] c #d6d64242cece",
+"[ c #d6d64a4acece",
+"{ c #dede5252dede",
+"} c #cece6363cece",
+"| c #c6c67373c6c6",
+" . c #cece7373cece",
+".. c #e7e74242e7e7",
+"X. c #efef4242efef",
+"o. c #e7e75252e7e7",
+"O. c #efef5252efef",
+"+. c #ffff4242ffff",
+"@. c #ffff4a4affff",
+"#. c #ffff5252ffff",
+"$. c #ffff5a5affff",
+"%. c #ffff6363ffff",
+"&. c #ffff6b6bffff",
+"*. c #ffff7373ffff",
+"=. c #ffff7b7bffff",
+"-. c #848484848484",
+";. c Gray55",
+":. c #94948c8c9494",
+">. c #9c9c84849c9c",
+",. c #9c9c8c8c9494",
+"<. c #9c9c8c8c9c9c",
+"1. c #9c9c94949c9c",
+"2. c Gray61",
+"3. c #a5a58484a5a5",
+"4. c #a5a59c9ca5a5",
+"5. c #bdbd8c8cbdbd",
+"6. c #b5b59494b5b5",
+"7. c #b5b59c9cb5b5",
+"8. c #bdbd9494b5b5",
+"9. c #bdbd9494bdbd",
+"0. c #bdbd9c9cbdbd",
+"q. c #a5a5a5a5a5a5",
+"w. c #adada5a5adad",
+"e. c Gray68",
+"r. c #b5b5a5a5b5b5",
+"t. c #b5b5adadb5b5",
+"y. c #bdbdadadbdbd",
+"u. c Gray71",
+"i. c #b5b5bdbdb5b5",
+"p. c #bdbdb5b5bdbd",
+"a. c Gray74",
+"s. c #c6c68484bdbd",
+"d. c #ffff8484ffff",
+"f. c #ffff8c8cffff",
+"g. c #ffff9494ffff",
+"h. c #ffff9c9cffff",
+"j. c #ffffa5a5ffff",
+"k. c #ffffadadffff",
+"l. c #ffffb5b5ffff",
+"z. c #c0c0c0c0c0c0",
+"x. c #c6c6c6c6c6c6",
+"c. c #ffffc6c6ffff",
+"v. c #ffffceceffff",
+"b. c None",
+/* pixels */
+"b.b.b.b.b.b.b.b.b.b.a.0.| [ D S Z ] ' b 7.a.b.b.b.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.a.5...` &.f.g.f.=.&.+.! F j 3.a.b.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.y.{ #.=.j.l.l.j.h.f.d.*.$.+.L B i w.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.t.O.&.f.f.&.%.%.$.$.$.$.$.@.@.X.W G t 4.b.b.b.b.b.b.",
+"b.b.b.b.b.p.o.d.v.v.j.*.#.( T S I E _ $.%.%.#.) F e e.b.b.b.b.b.",
+"b.b.b.b.b.| %.l.k.=.#.P w 3 q z z -.k f _ $.&.#.^ m 4 a.b.b.b.b.",
+"b.b.b.b.r.` f.h.%.` d X 8 a.b.b.b.b.a.2.y A @.$.+.U r :.b.b.b.b.",
+"b.b.b.b.| @.f.&.@.h ;.b.b.b.b.b.b.b.b.e.u W @.#.~ a 7 b.b.b.b.",
+"b.b.b.b.R $.=.#.~ * $ a.b.b.b.b.b.b.b.b.b.v K #.#.` d - b.b.b.b.",
+"b.b.b.b.c C X._ Z o ;.b.b.b.b.b.b.b.b.b.b.6.L #.#.` g & b.b.b.b.",
+"b.b.b.b.a.q.:.x l 1.x.b.b.b.b.b.b.b.b.b.b.8.^ %.$.` s @ b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.u.R #.=.#.Q 9 5 b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.y.R %.l.*.+.n X :.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.r.Y *.c.f.+.V * : a.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.7./ g.v.d.+.U 2 O e.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.5.^ k.c.*.` ~ p + q.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.6.) k.l.$.) W p & q.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.b.t.E =.=.#.+.H < $ e.b.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.b.} ) @.@.#.~ 0 $ u.b.b.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.p.Q #.=.%.+.s ; u.b.b.b.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.9.` f.=.@.d # u.b.b.b.b.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.s.$.g.@.M . 8 b.b.b.b.b.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b. .%.%.+.N * -.b.b.b.b.b.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.b N Q +.Y = q.b.b.b.b.b.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.a.1.>.3.<.e.b.b.b.b.b.b.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.p.7.7.u.b.b.b.b.b.b.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.b.8.Q L K s ,.b.b.b.b.b.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.p.X.h.h.*.U , i.b.b.b.b.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.0.` l.c.d.M % e.b.b.b.b.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.r.! #.$.) g + e.b.b.b.b.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.a.C L J N 0 > a.b.b.b.b.b.b.b.b.b.b.b.",
+"b.b.b.b.b.b.b.b.b.b.b.b.b.b.q.k 1 , 6 e.b.b.b.b.b.b.b.b.b.b.b.b."
+};
diff --git a/kommander/editor/pics/large/home.xpm b/kommander/editor/pics/large/home.xpm
new file mode 100644
index 00000000..f70e0e4f
--- /dev/null
+++ b/kommander/editor/pics/large/home.xpm
@@ -0,0 +1,250 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 212 2",
+" c Gray0",
+". c #080808080000",
+"X c #101008080000",
+"o c #101010100000",
+"O c #101010100808",
+"+ c #181810100000",
+"@ c #181818180000",
+"# c #181818180808",
+"$ c #181818181010",
+"% c #212118180000",
+"& c #212118180808",
+"* c #292921210000",
+"= c #212121211010",
+"- c #212121211818",
+"; c #292921211010",
+": c #292929291010",
+"> c #292929291818",
+", c #313129290000",
+"< c #313129291818",
+"1 c #393931310000",
+"2 c #393931310808",
+"3 c Gray13",
+"4 c #292929292121",
+"5 c #313129292929",
+"6 c #313131313131",
+"7 c #393939393131",
+"8 c #393939393939",
+"9 c #424239393939",
+"0 c #4a4a42420000",
+"q c #4a4a42421010",
+"w c #4a4a52521818",
+"e c #525242420000",
+"r c #52524a4a0000",
+"t c #52524a4a0808",
+"y c #5a5a4a4a0000",
+"u c #5a5a52520808",
+"i c #5a5a52521010",
+"p c #4a4a42423939",
+"a c #4a4a4a4a3939",
+"s c #636352520808",
+"d c #6b6b5a5a0000",
+"f c #63635a5a1010",
+"g c #737363630000",
+"h c #737363630808",
+"j c #73736b6b1010",
+"k c #7b7b73731818",
+"l c #636363632121",
+"z c #636373732929",
+"x c #6b6b73732121",
+"c c #6b6b73732929",
+"v c #6b6b73733131",
+"b c #737373732929",
+"n c #73737b7b2929",
+"m c #7b7b7b7b2121",
+"M c #7b7b7b7b2929",
+"N c #42424a4a4242",
+"B c #4a4a4a4a4242",
+"V c #4a4a52525252",
+"C c #4a4a5a5a5252",
+"Z c #52524a4a4a4a",
+"A c #5a5a52524a4a",
+"S c Gray32",
+"D c #52525a5a5252",
+"F c #5a5a5a5a5252",
+"G c #5a5a5a5a5a5a",
+"H c #525263635a5a",
+"J c #5a5a63635a5a",
+"K c #525263636363",
+"L c #63635a5a5252",
+"P c #63635a5a5a5a",
+"I c #636363635a5a",
+"U c #6b6b63635a5a",
+"Y c #7b7b7b7b5a5a",
+"T c Gray39",
+"R c #63636b6b6b6b",
+"E c #6b6b63636363",
+"W c #6b6b6b6b6363",
+"Q c #73736b6b6363",
+"! c #737373736b6b",
+"~ c Gray45",
+"^ c #73737b7b7373",
+"/ c #7b7b73737373",
+"( c #7b7b7b7b7373",
+") c #7b7b7b7b7b7b",
+"_ c #7b7b84843131",
+"` c #7b7b84844a4a",
+"' c #7b7b84847b7b",
+"] c #848473730808",
+"[ c #8c8c7b7b0808",
+"{ c #848473731010",
+"} c #8c8c7b7b1010",
+"| c #94947b7b0808",
+" . c #84847b7b2121",
+".. c #84847b7b2929",
+"X. c #84847b7b7373",
+"o. c #84847b7b7b7b",
+"O. c #94947b7b7373",
+"+. c #94948c8c1010",
+"@. c #94948c8c1818",
+"#. c #9c9c8c8c1010",
+"$. c #9c9c8c8c1818",
+"%. c #9c9c94941818",
+"&. c #848484842121",
+"*. c #848484842929",
+"=. c #848484843131",
+"-. c #94948c8c2929",
+";. c #9c9c8c8c2929",
+":. c #a5a594940000",
+">. c #a5a594941818",
+",. c #adad9c9c1010",
+"<. c #adad9c9c1818",
+"1. c #a5a59c9c2929",
+"2. c #b5b5a5a51818",
+"3. c #b5b5a5a52929",
+"4. c #bdbdadad2929",
+"5. c #bdbda5a53939",
+"6. c #bdbdadad3131",
+"7. c #848484844a4a",
+"8. c #949494944242",
+"9. c #94949c9c4a4a",
+"0. c #9c9c9c9c4a4a",
+"q. c #94949c9c5a5a",
+"w. c #9c9c9c9c5252",
+"e. c #9c9c9c9c5a5a",
+"r. c #8c8c8c8c6363",
+"t. c #8c8c8c8c7b7b",
+"y. c #94949c9c6363",
+"u. c #9c9c9c9c6b6b",
+"i. c #9c9ca5a56b6b",
+"p. c #9c9ca5a57373",
+"a. c #b5b5a5a54242",
+"s. c #b5b5a5a54a4a",
+"d. c #bdbdadad4242",
+"f. c #b5b5adad5252",
+"g. c #a5a5a5a57373",
+"h. c #a5a5adad7b7b",
+"j. c #adadadad7b7b",
+"k. c #c6c6b5b51010",
+"l. c #cecebdbd3131",
+"z. c #dedec6c60808",
+"x. c #d6d6c6c61010",
+"c. c #dedecece1010",
+"v. c #d6d6c6c63131",
+"b. c #dedecece3131",
+"n. c #e7e7cece0808",
+"m. c #efefdede1010",
+"M. c #e7e7d6d62121",
+"N. c #efefdede2121",
+"B. c #efefdede2929",
+"V. c #e7e7d6d63131",
+"C. c #e7e7d6d63939",
+"Z. c #e7e7dede3939",
+"A. c #f7f7e7e72929",
+"S. c #f7f7e7e73939",
+"D. c #848484848484",
+"F. c #8c8c84848484",
+"G. c #8c8c8c8c8484",
+"H. c #8c8c94948c8c",
+"J. c #94948c8c8484",
+"K. c #949494948484",
+"L. c #949494948c8c",
+"P. c #9c9c94948c8c",
+"I. c Gray58",
+"U. c #94949c9c9494",
+"Y. c #9c9c9c9c9494",
+"T. c Gray61",
+"R. c #9494a5a59c9c",
+"E. c #9c9ca5a59c9c",
+"W. c #8c8cadada5a5",
+"Q. c #9c9ca5a5a5a5",
+"!. c #9c9cbdbdb5b5",
+"~. c #a5a594948c8c",
+"^. c #a5a59c9c8c8c",
+"/. c #a5a59c9c9494",
+"(. c #a5a59c9c9c9c",
+"). c #adad9c9c9494",
+"_. c #a5a5a5a58484",
+"`. c #adadadad8484",
+"'. c #a5a5a5a59c9c",
+"]. c #adada5a59c9c",
+"[. c #b5b5a5a59494",
+"{. c #b5b5a5a59c9c",
+"}. c #b5b5adad9c9c",
+"|. c #bdbda5a59c9c",
+" X c #a5a5a5a5a5a5",
+".X c #a5a5adada5a5",
+"XX c #a5a5adadadad",
+"oX c #adadadada5a5",
+"OX c Gray68",
+"+X c #a5a5b5b5adad",
+"@X c #adadb5b5adad",
+"#X c #a5a5bdbdb5b5",
+"$X c #b5b5adada5a5",
+"%X c #b5b5b5b5adad",
+"&X c #bdbdb5b5adad",
+"*X c Gray71",
+"=X c #b5b5bdbdb5b5",
+"-X c #b5b5bdbdbdbd",
+";X c Gray74",
+":X c #a5a5c6c6bdbd",
+">X c #b5b5cecec6c6",
+",X c #bdbdcecec6c6",
+"<X c #c6c6c6c6bdbd",
+"1X c #c0c0c0c0c0c0",
+"2X c #c6c6cececece",
+"3X c #ceced6d6cece",
+"4X c #c6c6deded6d6",
+"5X c #ceced6d6d6d6",
+"6X c #cecedededede",
+"7X c #dedeefefe7e7",
+"8X c #dedeefefefef",
+"9X c None",
+/* pixels */
+"9X9X9X9X9X9X9X9X9X9X9X9X9X9X9XoXT.9X9X9X9X9X9X9X9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X9X9X9X9X9X9X;X Xo.*X9X9X9X9X9X9X9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X9X9X9X9X9X9X].4XE.! ;X9X9X9X9X9X9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X9X9X9X9X9X%XY.7X*XB I.9X9X9X9X9X9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X9X9X9X9X;XT..X2X'.P S OX9X9X9X9X9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X9X9X9X9XU.R.:XY.G.G C T ;X9X9X9X9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X9X9X9XOXY.!.XXY.L.W J V D.9X9X9X9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X9X9X;XoXoX.X+X;X X( ~ F 8 OX9X9X9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X9X9XT.^.[./.-X8X.XX.Q L p S ;X9X9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X9XOX^./.(.Y.,X8X/.O.! T A 6 ) 9X9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X;XG.H.:X=X@X+X%XoX$XU F J H 6 X9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9XI.' W.2X<X.X@XG.G.G.I S D K S N ;X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9XOXL.oX#X>XE.Q..X/.H.H.^ I R T C 5 ~ 9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X;XF./.]./.~.'.@X,X3XJ.&XI.E ( U Z 5 3 X9X9X9X9X9X9X",
+"9X9X9X9X9X9X(.J.~.[.J.P.$XY.5X6XJ.'.P.L W Q Z 9 5 8 *X9X9X9X9X9X",
+"9X9X9X9X9X;XG.P..XOX{.]..X@X7X3X).|.].! E W I D B 4 I.9X9X9X9X9X",
+"9X9X9X9X9X;X*X X#X.X}.U.'.Q.+X'.oXoXH./ L B a R E.%X;X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X;X< # O $ - - - > ; = & @ + X ! 9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X;X;.:.@.j s t 2 @ + o . X o o ! 9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X;X6.m.A.S.S.Z.v.4.$.{ u 1 + o / 9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X;X5.x.M.V.C.C.b.l.4.,.[ d 1 + ( 9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X;Xd.c.M.V.Z.C.C.v.2.<.} h r * / 9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X9Xs.z.M.V.C.3.1.3.4.<.{ d r % ( 9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X9Xf.n.N.V.i o . + f $.] d y * ( 9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X9Xf.c.B.>.. X + o o j | h y % ( 9X9X9X9X9X9X9X9X",
+"9X9X9X9X9X9X9X9X;Xa.z.A.@.X + o + X u } d 0 , 7 W R ( 9X9X9X9X9X",
+"9X9X9X9X9X9X9X9XK.#.c.B.>.. . X . u +.h r , . 4 9X9X9X9X9X",
+"9X9X9X9X9X9X9X'.z #.c.N.%.. . # : j [ h e * X : w Y 9X9X9X9X9X",
+"9X9X9X9X9X9X%Xv c .k.N.>.. : w z M &.[ g u q l =.*.t.9X9X9X9X9X",
+"9X9X9X9X9X;X` x b b M -.*.l n c c b m k x b .._ b b Y.9X9X9X9X9X",
+"9X9X9X9X9Xr.n n M =..._ n _ =.n n n c c n ..M =.M v oX9X9X9X9X9X",
+"9X9X9X9X9X`.j._.h.h.p.g.u.u.i.y.y.e.e.q.w.w.9.0.8.7.;X9X9X9X9X9X"
+};
diff --git a/kommander/editor/pics/large/iconview.xpm b/kommander/editor/pics/large/iconview.xpm
new file mode 100644
index 00000000..61d9dafd
--- /dev/null
+++ b/kommander/editor/pics/large/iconview.xpm
@@ -0,0 +1,142 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 104 2",
+" c Gray3",
+". c #080810101010",
+"X c #101008081010",
+"o c #101010100808",
+"O c #101010101010",
+"+ c #101010101818",
+"@ c #101018181818",
+"# c #181818181010",
+"$ c #181818181818",
+"% c Gray13",
+"& c Gray16",
+"* c #313131313131",
+"= c #393939393939",
+"- c Gray26",
+"; c Gray29",
+": c Gray32",
+"> c #5a5a5a5a5a5a",
+", c Gray39",
+"< c #6b6b63636b6b",
+"1 c Gray42",
+"2 c Gray45",
+"3 c #7b7b7b7b7b7b",
+"4 c Blue",
+"5 c #08080808ffff",
+"6 c #10101010f7f7",
+"7 c #6b6b6b6bd6d6",
+"8 c #73737373cece",
+"9 c Green",
+"0 c #1010f7f71010",
+"q c #1818f7f71818",
+"w c #2121f7f72121",
+"e c #5a5acece5a5a",
+"r c #5a5ae7e75a5a",
+"t c #6363c6c66b6b",
+"y c #6b6bc6c66b6b",
+"u c #6363dede6363",
+"i c #6363e7e76363",
+"p c Red",
+"a c #f7f718181818",
+"s c #efef21212121",
+"d c #c6c67b7b7b7b",
+"f c #cece7b7b7b7b",
+"g c #dede63636363",
+"h c #e7e75a5a5a5a",
+"j c #dede3939dede",
+"k c Magenta",
+"l c #ffff0808ffff",
+"z c #d6d64242d6d6",
+"x c #d6d64a4ad6d6",
+"c c #dede4242dede",
+"v c #dededede3939",
+"b c Yellow",
+"n c #f7f7f7f71010",
+"m c #f7f7f7f71818",
+"M c #efefefef2929",
+"N c #efefefef3131",
+"B c #dededede4242",
+"V c #dededede4a4a",
+"C c #d6d6d6d65252",
+"Z c #dededede6363",
+"A c #d6d6d6d67b7b",
+"S c #e7e7e7e76363",
+"D c #848484848484",
+"F c Gray55",
+"G c #8c8c94949494",
+"H c Gray58",
+"J c #9c9c94949c9c",
+"K c Gray61",
+"L c #9c9cbdbd9c9c",
+"P c #bdbd9c9c9c9c",
+"I c #bdbd9c9cbdbd",
+"U c #a5a5a5a5a5a5",
+"Y c Gray68",
+"T c #adadadadbdbd",
+"R c #a5a5bdbda5a5",
+"E c #adadb5b5b5b5",
+"W c #bdbda5a5a5a5",
+"Q c #b5b5adadb5b5",
+"! c #b5b5b5b5adad",
+"~ c Gray71",
+"^ c #b5b5b5b5bdbd",
+"/ c #bdbdb5b5b5b5",
+"( c Gray74",
+") c #84848484cece",
+"_ c #8c8c8c8cc6c6",
+"` c #adadadadc6c6",
+"' c #bdbdbdbdc6c6",
+"] c #9c9cc6c69c9c",
+"[ c #9c9ccece9c9c",
+"{ c #adadc6c6adad",
+"} c #bdbdc6c6bdbd",
+"| c #c6c68c8c8c8c",
+" . c #c6c6a5a5a5a5",
+".. c #c6c6bdbdbdbd",
+"X. c #cece8484cece",
+"o. c #c6c69c9cc6c6",
+"O. c #c6c6adadc6c6",
+"+. c #c6c6b5b5c6c6",
+"@. c #c6c6bdbdc6c6",
+"#. c #cececece8c8c",
+"$. c #c6c6c6c6bdbd",
+"%. c #c0c0c0c0c0c0",
+"&. c #c6c6c6c6c6c6",
+"*. c None",
+/* pixels */
+"*.Y H , : ; = = = * * * & & % % % % & % % & & & & * * = - > K ( ",
+"Y & O O O O O O O O O O O O O O O O O H ",
+"1 O O O O . O O + # $ + $ $ $ + $ $ O $ $ O $ O O O O ; ",
+"- O O O 1 G K U Y ~ Y Y Y Y Y Y ~ Y Y Y Y Y ~ Y U K H < O O & ",
+"* O 3 *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.1 O % ",
+"& O . U .h g g g g / *.&.#.Z Z Z S A $.*.L r u u u i ~ H X $ ",
+"% O Y f p p p p p P *.( B b b b b M $.*.y 9 9 9 9 9 [ K X O $ ",
+"% O @ ~ f p p p p p P *.' B b b b b M $.*.t 9 9 9 9 9 ] U O $ ",
+"% @ ( f p p p p p P *.$.v b b b b M ( *.t 9 9 9 9 9 R U O O % ",
+"% O $ ( d p p p p p P *.' v b b b b N ( *.e 9 9 9 9 9 { U X % ",
+"% o O ^ | a a s a s W *.' C m m M n V $.*.y 0 q w q w R U O % ",
+"% . $ ~ *./ ( ( ( ( ..*.*.$.( ( ( ( ( *.*.( } ( ( ( ( *.J O O % ",
+"% o $ E *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.K O & ",
+"% . $ ! *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.K O * ",
+"% X O Q *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.K O * ",
+"& O # E ( ` ` ` ` ` ' *.} +.O.O.O.O.+.*.*.*.*.*.*.*.*.*.H O * ",
+"& # ^ 7 4 5 5 4 6 T *.@.z k l l k c } *.*.*.*.*.*.*.*.F O = ",
+"& O o / 7 4 4 4 4 5 T *.( j k k k k c } *.*.*.*.*.*.*.*.H O = ",
+"* O O ~ 7 4 4 4 4 5 ` *.( j k k k k z @.*.*.*.*.*.*.*.*.H O - ",
+"* # ~ 8 4 4 4 4 5 T *.( j k k k k x } *.*.*.*.*.*.*.*.D O - ",
+"= # ~ 8 4 4 4 4 5 T *.( j k k k k x @.*.*.*.*.*.*.*.*.D : ",
+"= . O Y T ) _ ) _ _ ( *.@.I X.X.X.X.o.*.*.*.*.*.*.*.*.*.F ; ",
+"= o O U *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.3 O : ",
+"- O U *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.3 > ",
+"; O K *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.2 > ",
+"; X H *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*., 1 ",
+": F *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.> 1 ",
+"> , *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.( & 2 ",
+"1 O , F K U U Y Y Y Y Y Y Y Y Y Y Y Y Y ~ Y U K D : % D ",
+"F O O O $ $ $ % $ $ $ $ $ $ $ $ $ $ $ O O O O $ O O K ",
+"~ % O O O O O O O O O O O O O = ( ",
+"*.Y > - * & & & % % $ $ $ $ $ $ $ $ $ $ $ $ $ $ % % & * - , Y *."
+};
diff --git a/kommander/editor/pics/large/image.xpm b/kommander/editor/pics/large/image.xpm
new file mode 100644
index 00000000..3ea1d3e4
--- /dev/null
+++ b/kommander/editor/pics/large/image.xpm
@@ -0,0 +1,267 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 229 2",
+" c #080800000000",
+". c Gray3",
+"X c #101010101010",
+"o c #101010101818",
+"O c #101018181818",
+"+ c #181818181818",
+"@ c #181818182121",
+"# c #181821212121",
+"$ c #212118181818",
+"% c Gray13",
+"& c #292921212121",
+"* c Gray16",
+"= c #292929293131",
+"- c #212131313939",
+"; c #313131312929",
+": c #393931312929",
+"> c #393931313131",
+", c #393939393131",
+"< c #393942424242",
+"1 c #424239393131",
+"2 c #424239393939",
+"3 c #4a4a39393131",
+"4 c #4a4a42423939",
+"5 c #4a4a4a4a3939",
+"6 c #52524a4a3939",
+"7 c #5a5a4a4a3939",
+"8 c #73735a5a3939",
+"9 c Gray26",
+"0 c #424242424a4a",
+"q c Gray29",
+"w c #4a4a52525a5a",
+"e c #52524a4a4242",
+"r c #52524a4a4a4a",
+"t c #5a5a52524242",
+"y c Gray32",
+"u c #5a5a52525252",
+"i c #5a5a5a5a6363",
+"p c #525263637373",
+"a c #5a5a6b6b7b7b",
+"s c #636352524242",
+"d c #63635a5a4a4a",
+"f c #6b6b52524242",
+"g c #63635a5a5a5a",
+"h c #6b6b63634a4a",
+"j c #6b6b6b6b4a4a",
+"k c #737363634a4a",
+"l c #73736b6b4a4a",
+"z c #7b7b63634242",
+"x c #737363635a5a",
+"c c #7b7b6b6b5a5a",
+"v c #7b7b73735252",
+"b c #7b7b7b7b5252",
+"n c Gray39",
+"m c #636363636b6b",
+"M c #6b6b63636363",
+"N c Gray42",
+"B c #6b6b6b6b7373",
+"V c #73736b6b6b6b",
+"C c #7b7b73736b6b",
+"Z c Gray45",
+"A c #737373737b7b",
+"S c #73737b7b7b7b",
+"D c #7b7b7b7b7373",
+"F c #7b7b7b7b7b7b",
+"G c #73737b7b8484",
+"H c #7b7b84848c8c",
+"J c #84846b6b4a4a",
+"K c #84847b7b5a5a",
+"L c #9c9c7b7b5252",
+"P c #8c8c73736363",
+"I c #84847b7b7373",
+"U c #848484845252",
+"Y c #848484845a5a",
+"T c #8c8c84845a5a",
+"R c #9c9c84845a5a",
+"E c #848484846363",
+"W c #8c8c84846363",
+"Q c #8c8c84847373",
+"! c #94948c8c6363",
+"~ c #94948c8c6b6b",
+"^ c #9c9c8c8c7b7b",
+"/ c #9c9c94946363",
+"( c #9c9c9c9c6b6b",
+") c #9c9c9c9c7373",
+"_ c #adad8c8c5252",
+"` c #b5b594945a5a",
+"' c #a5a59c9c6363",
+"] c #adad9c9c7373",
+"[ c #bdbd9c9c7373",
+"{ c #adada5a56b6b",
+"} c #a5a5a5a57373",
+"| c #adadadad7b7b",
+" . c #b5b5a5a56b6b",
+".. c #bdbdadad7373",
+"X. c #bdbdb5b57b7b",
+"o. c #ceceadad6b6b",
+"O. c #ceceadad7373",
+"+. c #cecebdbd7b7b",
+"@. c #dedea5a57b7b",
+"#. c #efefa5a57b7b",
+"$. c #e7e7b5b57b7b",
+"%. c #e7e7bdbd7373",
+"&. c #f7f7adad6b6b",
+"*. c #ffffadad6b6b",
+"=. c #f7f7adad7373",
+"-. c #ffffb5b57373",
+";. c #e7e7c6c67b7b",
+":. c #efefcece7b7b",
+">. c #ffffc6c67b7b",
+",. c #ffffd6d67b7b",
+"<. c #848484848484",
+"1. c #84848c8c8c8c",
+"2. c #8c8c84848484",
+"3. c Gray55",
+"4. c #84848c8c9c9c",
+"5. c #94948c8c8484",
+"6. c #94948c8c8c8c",
+"7. c #949494948c8c",
+"8. c #9c9c94948c8c",
+"9. c #949494949c9c",
+"0. c #9c9c94949494",
+"q. c #9c9c9c9c9494",
+"w. c Gray61",
+"e. c #94949c9ca5a5",
+"r. c #9c9c9c9ca5a5",
+"t. c #9c9c9c9cadad",
+"y. c #9c9ca5a59c9c",
+"u. c #9494a5a5bdbd",
+"i. c #a5a59c9c8c8c",
+"p. c #a5a59c9c9c9c",
+"a. c #adad9c9c9494",
+"s. c #adada5a59c9c",
+"d. c #b5b5a5a59494",
+"f. c #b5b5adad9c9c",
+"g. c #a5a5a5a5a5a5",
+"h. c #a5a5adadadad",
+"j. c #adada5a5a5a5",
+"k. c Gray68",
+"l. c #a5a5adadb5b5",
+"z. c #b5b5adadadad",
+"x. c #bdbdb5b5a5a5",
+"c. c #bdbdb5b5adad",
+"v. c Gray71",
+"b. c #bdbdb5b5b5b5",
+"n. c Gray74",
+"m. c #adadbdbdc6c6",
+"M. c #adadbdbdcece",
+"N. c #bdbdbdbdc6c6",
+"B. c #bdbdc6c69c9c",
+"V. c #bdbdc6c6c6c6",
+"C. c #bdbdc6c6cece",
+"Z. c #b5b5c6c6d6d6",
+"A. c #c6c6adad8c8c",
+"S. c #ceceadad9494",
+"D. c #cecebdbd9c9c",
+"F. c #d6d6adad9494",
+"G. c #d6d6b5b58484",
+"H. c #dedeb5b58c8c",
+"J. c #dedeb5b59494",
+"K. c #c6c6bdbda5a5",
+"L. c #c6c6bdbdadad",
+"P. c #c6c6bdbdbdbd",
+"I. c #e7e7b5b58c8c",
+"U. c #f7f7bdbd8484",
+"Y. c #cececece8c8c",
+"T. c #c6c6c6c69494",
+"R. c #d6d6cece9c9c",
+"E. c #dedecece9c9c",
+"W. c #cecec6c6a5a5",
+"Q. c #d6d6c6c6b5b5",
+"!. c #d6d6d6d6a5a5",
+"~. c #d6d6dedeadad",
+"^. c #dedededea5a5",
+"/. c #efefcece8c8c",
+"(. c #e7e7d6d69c9c",
+"). c #efefdede9c9c",
+"_. c #f7f7cece8c8c",
+"`. c #ffffc6c68484",
+"'. c #ffffcece8484",
+"]. c #f7f7d6d68484",
+"[. c #f7f7dede8c8c",
+"{. c #ffffd6d68c8c",
+"}. c #efefc6c6a5a5",
+"|. c #e7e7dedea5a5",
+" X c #efefe7e79c9c",
+".X c #e7e7e7e7a5a5",
+"XX c #efefe7e7a5a5",
+"oX c #efefe7e7adad",
+"OX c #efefefefadad",
+"+X c #efefefefbdbd",
+"@X c #f7f7e7e7adad",
+"#X c #f7f7efefa5a5",
+"$X c #f7f7f7f7adad",
+"%X c #fffff7f7adad",
+"&X c #f7f7f7f7b5b5",
+"*X c #c0c0c0c0c0c0",
+"=X c #c6c6c6c6c6c6",
+"-X c #c6c6cececece",
+";X c #cecececec6c6",
+":X c #cececececece",
+">X c #cecececed6d6",
+",X c #d6d6cecec6c6",
+"<X c #dedececec6c6",
+"1X c #d6d6d6d6cece",
+"2X c Gray84",
+"3X c #d6d6d6d6dede",
+"4X c #dedededed6d6",
+"5X c Gray87",
+"6X c #dedee7e7e7e7",
+"7X c #dedee7e7efef",
+"8X c #e7e7dedecece",
+"9X c #efefdedec6c6",
+"0X c #efefe7e7dede",
+"qX c #ffffefefc6c6",
+"wX c #f7f7efefdede",
+"eX c #ffffffffcece",
+"rX c #ffffffffd6d6",
+"tX c #e7e7e7e7e7e7",
+"yX c #efefefefefef",
+"uX c #efefefeff7f7",
+"iX c #efeff7f7f7f7",
+"pX c #f7f7efefe7e7",
+"aX c #f7f7efefefef",
+"sX c #f7f7f7f7e7e7",
+"dX c Gray97",
+"fX c #f7f7ffffffff",
+"gX c #fffffffff7f7",
+"hX c Gray100",
+"jX c None",
+/* pixels */
+"jXL.$.|.oXOXoXoXoXoX.X XXXOXOX&XXX X X/.U.U./.#X#X#X&X$X&X$X^.jX",
+"jXL.>.+.! { } R.+XeXrX+XrXrX+XqXrXrXrXqX}.}.@XoX~.!.B.| } XoXjX",
+"jXd.{.v o 9 q w.=X>Xl.3.b.C.a D ;X-X=X5XfX7XfXuXuXuX>Xt.B Y.OXjX",
+"jXS.{.b @ * * q g D p.g.k.k.6.0.v.g.v.,XgXhXhXhXhXhXhXfX6X.X!.jX",
+"jXF.'.v @ % & d.5XyXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXOX^.jX",
+"jXF.`.l @ % ; 5.z.0XtX2X2X:Xn.h.w.3.A <.c.aXhXhXhXhXhXhXhX@XE.jX",
+"jXS.-.k # * % % h P.5XtXtXyXtXtX6X5X=Xr.F m N 0.b.4XdXhXhX%X^.jX",
+"jXD.*.f # * % > y 2.w.z.n.pXhXhXhXhXhXhXhX7Xp X + & , g D R.(.jX",
+"jXF.-.s % % % % $ % X % % 2 n 5.gXhXhX3X0.S g 0 * * X X . . XjX",
+"jXJ.`.s + x V.w r j.S Q 4X-Xl.u wXhXhXiXtXuXC.1.c.3XG 0 @ { #XjX",
+"jXF.'.s O c hXiX>XP.aXhXhXhXhX1.9XhXhXhXhXhXhXhXhXhXhXhXZ.T.OXjX",
+"jXF.>.t # : x.5XaXhXhXhXhXhXZ.r <XhXhXhXhXhXhXhXhXhXhXhXiX~.XXjX",
+"jXH.>.7 % % 1 V s.-XV.1XhXiXa 4 W.hXhXhXhXhXhXhXhXhXhXhXZ.X.).jX",
+"jXI.&.6 % % % r 8.P.n.3.8Xu.= 9 Q.hXfX3X5XhXhXhXhXhXhXhXu.] XjX",
+"jXJ.*.e % & ^ b.0XhXhX3X6Xa > $ 1 F p.9.L.gXhXhXhXhXhXhXa ' #XjX",
+"jX@.>.5 O 3 sXhXhXfXV.g.v.w.1.3.B I 0XhXhXhXhXfXyX5XdXM.- / #XjX",
+"jX#.>., : a.gX6X1.i y 9 M 1.Z f.hXhXhXhXhXhXdXaXyX6XH * o { #XjX",
+"jXU.:.h <XhXhXhXm.3.0.c.tXhX3X3.,XyXm.1.i y M 7.z.n.e.w o ( $XjX",
+"jX#.[.D.yX3XtXyXuX4.^ hXhXhXiXt.0.G g > C p.P.gXhXhXhXM.o / $XjX",
+"jX=.[.r < g q.n.l.i x.hXhXhXhXhXfXhXhX6X>Xt.q q.N.G i < o ( &XjX",
+"jXU._.5 : d 8.y.D L.sXgXyXsXhXhXhXhXhX6Xm 2 j f.v.y.N y * ) &XjX",
+"jXR L T T T W T E W Y U Y E W W T T U z 8 z J ~ ~ ~ K j j W } jX",
+"jXk.h.k.k.g.k.g.j.k.9 3.k.p.& $ g.k.n B k.p.g.r.g.g.g.g.j.jX",
+"jXjXjXjXjXjXjXjXjXn...8 n.jXV.; : n.jXj.` ^ jXjXjXjXjXjXjXjXjXjX",
+"jXjXjXjXjXjXjXjXjXc.].Q jXjXP.; > n.jXn.:.+.n.jXjXjXjXjXjXjXjXjX",
+"jXjXjXjXjXjXjXjXjXK.o.0.jXjXN.: : n.jXjXA.:.j.jXjXjXjXjXjXjXjXjX",
+"jXjXjXjXjXjXjXjXn.).R v.jXjXP.: > n.jXjXs.,.i.jXjXjXjXjXjXjXjXjX",
+"jXjXjXjXjXjXjXjXc.[.Q jXjXjXV.; > n.jXjXv.:.[ n.jXjXjXjXjXjXjXjX",
+"jXjXjXjXjXjXjXjXK.;.0.jXjXjXP.: > n.jXjX=XA.%.k.jXjXjXjXjXjXjXjX",
+"jXjXjXjXjXjXjXn.E._ k.jXjXjXN.; , n.jXjXjXf.].a.jXjXjXjXjXjXjXjX",
+"jXjXjXjXjXjXjXv.[.P n.jXjXjX=X: > n.jXjXjXz.:.] jXjXjXjXjXjXjXjX",
+"jXjXjXjXjXjXjXx.%.2.jXjXjXjXn., 2 n.jXjXjXn.G.O.n.jXjXjXjXjXjXjX"
+};
diff --git a/kommander/editor/pics/large/label.xpm b/kommander/editor/pics/large/label.xpm
new file mode 100644
index 00000000..dd8c5ee4
--- /dev/null
+++ b/kommander/editor/pics/large/label.xpm
@@ -0,0 +1,105 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 67 1",
+" c #000008081010",
+". c #101010101818",
+"X c #000000003131",
+"o c #000000003939",
+"O c #000008083131",
+"+ c #000008083939",
+"@ c #080810103131",
+"# c #080810103939",
+"$ c #181818183939",
+"% c #212121213939",
+"& c #292929293131",
+"* c #393939393939",
+"= c #000000004242",
+"- c #000008084242",
+"; c #000008084a4a",
+": c #080808084242",
+"> c #080810104a4a",
+", c #181818184a4a",
+"< c #181818185252",
+"1 c #181821214242",
+"2 c #181821215252",
+"3 c #212121215252",
+"4 c #212129295252",
+"5 c #292929295252",
+"6 c #313131314242",
+"7 c #313131314a4a",
+"8 c #313131315a5a",
+"9 c #313139395a5a",
+"0 c #313139396363",
+"q c #393942425a5a",
+"w c #393942426363",
+"e c Gray26",
+"r c #424242424a4a",
+"t c #4a4a4a4a5252",
+"y c #4a4a4a4a5a5a",
+"u c #5a5a5a5a5a5a",
+"i c #424242426363",
+"p c #42424a4a6b6b",
+"a c #4a4a4a4a6b6b",
+"s c #5a5a5a5a6363",
+"d c #5a5a5a5a7373",
+"f c #5a5a63637b7b",
+"g c Gray39",
+"h c Gray42",
+"j c #6b6b6b6b7373",
+"k c #6b6b6b6b7b7b",
+"l c Gray45",
+"z c #6b6b6b6b8484",
+"x c #7b7b7b7b8484",
+"c c #7b7b84848c8c",
+"v c #848484848484",
+"b c #848484848c8c",
+"n c Gray55",
+"m c #848484849494",
+"M c #8c8c8c8c9494",
+"N c Gray58",
+"B c #949494949c9c",
+"V c #9c9c9c9ca5a5",
+"C c #a5a5a5a59c9c",
+"Z c #a5a5a5a5a5a5",
+"A c #a5a5a5a5adad",
+"S c Gray68",
+"D c Gray71",
+"F c #b5b5b5b5bdbd",
+"G c Gray74",
+"H c #c0c0c0c0c0c0",
+"J c None",
+/* pixels */
+"JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ",
+"JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ",
+"JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ",
+"JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ",
+"JJJJJJJJJJJJJJJxtGJJJJJJJJJJJJJJ",
+"JJJJJJJJJJJJJJG8OSJJJJJJJJJJJJJJ",
+"JJJJJJJJJJJJJJB;-jJJJJJJJJJJJJJJ",
+"JJJJJJJJJJJJJJd-;%GJJJJJJJJJJJJJ",
+"JJJJJJJJJJJJJD<;>#NJJJJJJJJJJJJJ",
+"JJJJJJJJJJJJJc->>=yJJJJJJJJJJJJJ",
+"JJJJJJJJJJJJG08w->#SJJJJJJJJJJJJ",
+"JJJJJJJJJJJJA-bm=>+xJJJJJJJJJJJJ",
+"JJJJJJJJJJJGa>GD2--6DJJJJJJJJJJJ",
+"JJJJJJJJJJJV-dJJb->XlJJJJJJJJJJJ",
+"JJJJJJJJJJJf-BJJF,;-%GJJJJJJJJJJ",
+"JJJJJJJJJJD<4GJJJf->@NJJJJJJJJJJ",
+"JJJJJJJJJJm-mJJJJA::=yJJJJJJJJJJ",
+"JJJJJJJJJG8wJJJJJJa-:#DJJJJJJJJJ",
+"JJJJJJJJJS>7gggggg7->OxJJJJJJJJJ",
+"JJJJJJJJJz=+O++++O+::-6GJJJJJJJJ",
+"JJJJJJJJD,iMMMMMMMBp--#NJJJJJJJJ",
+"JJJJJJJJB-BJJJJJJJJB-:osJJJJJJJJ",
+"JJJJJJJF82GJJJJJJJJGi--$ZJJJJJJJ",
+"JJJJJJJMokJJJJJJJJJJV::XrGJJJJJJ",
+"JJJJJJG9-VJJJJJJJJJJG4--@CJJJJJJ",
+"JJJJJGb-#nGJJJJJJJJJGi-:+rSJJJJJ",
+"JJJJn&O-o enJJJJJJGh*@---X.uJJJJ",
+"JJJJq,45531vJJJJJJG7,5555547JJJJ",
+"JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ",
+"JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ",
+"JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ",
+"JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ"
+};
diff --git a/kommander/editor/pics/large/layout.xpm b/kommander/editor/pics/large/layout.xpm
new file mode 100644
index 00000000..9c4becda
--- /dev/null
+++ b/kommander/editor/pics/large/layout.xpm
@@ -0,0 +1,167 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 129 2",
+" c #212100000000",
+". c #212108080000",
+"X c #292900000000",
+"o c #292910101010",
+"O c #292918181010",
+"+ c #292918181818",
+"@ c #313108080000",
+"# c #4a4a08080000",
+"$ c #4a4a21211818",
+"% c #525239393939",
+"& c #636310100000",
+"* c #636310100808",
+"= c #6b6b10100808",
+"- c #6b6b18180808",
+"; c #737321211818",
+": c #737331312121",
+"> c #737339393131",
+", c #52524a4a4a4a",
+"< c #737352524a4a",
+"1 c #73735a5a5a5a",
+"2 c #6b6b63635a5a",
+"3 c #6b6b63636363",
+"4 c #73736b6b6b6b",
+"5 c #7b7b63636363",
+"6 c #7b7b6b6b6b6b",
+"7 c #737373736b6b",
+"8 c #7b7b73737373",
+"9 c #848418180808",
+"0 c #949421211010",
+"q c #949429291010",
+"w c #9c9c21211010",
+"e c #9c9c29291818",
+"r c #9c9c31312121",
+"t c #adad31311818",
+"y c #b5b529291010",
+"u c #b5b531311818",
+"i c #adad31312121",
+"p c #bdbd39392121",
+"a c #bdbd39392929",
+"s c #9c9c42423131",
+"d c #adad4a4a3939",
+"f c #bdbd42422929",
+"g c #848452524a4a",
+"h c #949452524242",
+"j c #9c9c5a5a5252",
+"k c #84846b6b6b6b",
+"l c #8c8c73736b6b",
+"z c #8c8c73737373",
+"x c #949473736b6b",
+"c c #9c9c73736b6b",
+"v c #9c9c73737373",
+"b c #adad5a5a5252",
+"n c #adad63635252",
+"m c #bdbd63635252",
+"M c #bdbd6b6b5a5a",
+"N c #a5a573736b6b",
+"B c #a5a57b7b7373",
+"V c #b5b573736b6b",
+"C c #cece31311010",
+"Z c #d6d629291010",
+"A c #c6c639392121",
+"S c #cece4a4a3131",
+"D c #d6d64a4a3131",
+"F c #d6d64a4a3939",
+"G c #d6d652523939",
+"H c #dede52523939",
+"J c #e7e74a4a2929",
+"K c #e7e74a4a3131",
+"L c #efef52523939",
+"P c #f7f752523131",
+"I c #f7f752523939",
+"U c #cece5a5a4a4a",
+"Y c #d6d652524242",
+"T c #dede5a5a4a4a",
+"R c #dede6b6b5252",
+"E c #c6c673736363",
+"W c #cece7b7b6b6b",
+"Q c #ffff63634a4a",
+"! c #f7f76b6b5252",
+"~ c #f7f76b6b5a5a",
+"^ c #ffff6b6b5252",
+"/ c #f7f773735a5a",
+"( c #ffff73735252",
+") c #ffff73735a5a",
+"_ c #ffff7b7b5a5a",
+"` c #ffff7b7b6363",
+"' c #ffff7b7b6b6b",
+"] c #9c9c84847b7b",
+"[ c #adad84847b7b",
+"{ c #b5b584847b7b",
+"} c #bdbd84847b7b",
+"| c #c6c684847b7b",
+" . c #dede84847373",
+".. c #dede8c8c7b7b",
+"X. c #e7e784847373",
+"o. c #f7f784846b6b",
+"O. c #ffff84846363",
+"+. c #ffff84846b6b",
+"@. c #ffff8c8c6b6b",
+"#. c #f7f784847373",
+"$. c #ffff8c8c7373",
+"%. c #94948c8c8c8c",
+"&. c #9c9c8c8c8c8c",
+"*. c #949494948c8c",
+"=. c Gray58",
+"-. c #9c9c94949494",
+";. c Gray61",
+":. c #a5a58c8c8c8c",
+">. c #adad94948c8c",
+",. c #adad9c9c9494",
+"<. c #adad9c9c9c9c",
+"1. c #b5b58c8c8484",
+"2. c #b5b594948c8c",
+"3. c #b5b594949494",
+"4. c #b5b59c9c9494",
+"5. c #bdbd9c9c9494",
+"6. c #bdbd9c9c9c9c",
+"7. c #bdbda5a59c9c",
+"8. c #b5b5adada5a5",
+"9. c #b5b5adadadad",
+"0. c #bdbdb5b5b5b5",
+"q. c Gray74",
+"w. c #c6c694948c8c",
+"e. c #cece94948c8c",
+"r. c #c6c69c9c9494",
+"t. c #dede94948484",
+"y. c #efef94948484",
+"u. c #c0c0c0c0c0c0",
+"i. c None",
+/* pixels */
+"i.n t i i i i i i i i i i t { i.i.,.t i i i i i i i i i i t d i.",
+"i.T K K K K K K K K K K K J | i.i.4.K K K K K K K J K J J J H i.",
+"i.o.O.+.O.O.O.O.` O.` O.` ` e.i.i.6.` _ ` _ _ _ ` _ ) ` ) ) ` i.",
+"i.#.+.' +.' +.' +.` +.` ` O.e.i.i.<.` ` ` ` ` ` ` ` ` ` ) ` ` i.",
+"i.U H Y G G Y G Y G Y G Y G } i.i.4.G G G F G F F F G F G F Y i.",
+"i.s e e e e e e e e e e e w ] i.i.>.e e e e e e e e e e e e r i.",
+"i.: - - - - - - - - - - - = x i.i.&.- - - * - * - * - * - * ; i.",
+"i.% @ @ @ @ @ @ @ @ @ @ @ @ 5 i.i.&.@ @ @ @ @ @ @ @ @ @ @ @ $ i.",
+"i.2 o + + + + + + + + + + O 8 i.i.-.O + + + + + + + + + + O , i.",
+"i.q.q.q.q.q.q.q.q.q.q.q.q.q.q.i.i.q.q.q.q.i.q.i.q.i.q.i.q.q.q.i.",
+"i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.",
+"i.q.9.9.9.9.9.9.9.9.9.9.9.9.q.i.i.q.9.9.9.9.9.9.9.9.9.9.9.9.0.i.",
+"i.V y u u u u u u u u u u y [ i.i.3.y u u u u u u u u u u y b i.",
+"i.W I L I L L I L L I L L P 1.i.i.4.I L L L L L L L L L L P R i.",
+"i.t.+.@.@.+.@.+.+.+.+.+.+.O.2.i.i.7.` O.` O.` ` ` ` ` ` ` ` #.i.",
+"i...` ` ` ` ` ` ` ` ` ` ` ` 1.i.i.6.) ` ` ` ) ` ) ) ) ) ) / o.i.",
+"i.E G G G G G G G F G F F D [ i.i.3.F S S S F S F F S F S S m i.",
+"i.j 0 e e e e e e q e q e 0 z i.i.:.q e e e q e q e q e e 0 s i.",
+"i.g & * * * * * * * * * * & l i.i.&.* * * * * * * * * * * * > i.",
+"i.1 X . X . . X . X X 6 i.i.%.X . . . . % i.",
+"i.;.3 7 4 4 4 4 4 4 4 4 7 3 ;.i.i.8.4 7 8 7 8 7 8 7 8 7 8 4 =.i.",
+"i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.",
+"i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.",
+"i.9.c B B B B B B B B B B N <.i.i.9.N B B N N B N B N B N N ,.i.",
+"i.} Z C C C C C C C C C C Z B i.i.2.C C C C C C C C C C C Z M i.",
+"i.e.( ) ^ ) ) ^ ) ) ^ ) ^ ^ { i.i.5.^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ Q .i.",
+"i.r.$.$.$.$.$.$.$.$.$.$.@.$.1.i.i.7.+.+.+.+.+.+.+.+.' +.` O.y.i.",
+"i.w.) / / / ~ ~ ~ ! ~ ! ~ ) { i.i.5.~ ! ! ! ! ! ! ! ! ! ! ! X.i.",
+"i.[ A a f a f f f f a f a p v i.i.>.a a a a a a a p a p a p b i.",
+"i.c 9 0 9 ; 9 0 9 ; 9 9 0 9 l i.i.:.9 9 ; 9 9 9 ; 9 ; 9 ; 9 h i.",
+"i.z # # * # # # # # # # # # k i.i.&.# # # # # # # # # # # # < i.",
+"i.%.. O O + O + + + O + + . 8 i.i.*.O O + O + + O + + + + . 4 i."
+};
diff --git a/kommander/editor/pics/large/lcdnumber.xpm b/kommander/editor/pics/large/lcdnumber.xpm
new file mode 100644
index 00000000..007e8c93
--- /dev/null
+++ b/kommander/editor/pics/large/lcdnumber.xpm
@@ -0,0 +1,154 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 116 2",
+" c #000000001818",
+". c #000000002121",
+"X c #000000002929",
+"o c #080808082929",
+"O c #000000003131",
+"+ c #000000003939",
+"@ c #080808083131",
+"# c #181818182121",
+"$ c #101010103131",
+"% c #101010103939",
+"& c #181818183131",
+"* c #212121213131",
+"= c #212121213939",
+"- c #292921213939",
+"; c #292929293131",
+": c #292929293939",
+"> c #000000004242",
+", c #000000004a4a",
+"< c #080808084a4a",
+"1 c #000000005252",
+"2 c #000000005a5a",
+"3 c #080800005252",
+"4 c #080800005a5a",
+"5 c #080808085252",
+"6 c #080808085a5a",
+"7 c #101008084a4a",
+"8 c #101010104242",
+"9 c #181818184242",
+"0 c #101010105252",
+"q c #101010105a5a",
+"w c #181818185a5a",
+"e c #000000006363",
+"r c #000000006b6b",
+"t c #080800006363",
+"y c #080800006b6b",
+"u c #080808086363",
+"i c #080808086b6b",
+"p c #000000007373",
+"a c #000000007b7b",
+"s c #080808087373",
+"d c #080808087b7b",
+"f c #101010106363",
+"g c #101010106b6b",
+"h c #181818186b6b",
+"j c #101010107b7b",
+"k c #181810107373",
+"l c #181818187373",
+"z c #181818187b7b",
+"x c #212121214242",
+"c c #292929294242",
+"v c #212121215252",
+"b c #313131314242",
+"n c #313131314a4a",
+"m c #393939394a4a",
+"M c #212121216b6b",
+"N c #292929296363",
+"B c #424242424a4a",
+"V c #424242425252",
+"C c #4a4a42425a5a",
+"Z c #4a4a4a4a5252",
+"A c #4a4a4a4a5a5a",
+"S c Gray32",
+"D c #5a5a5a5a5a5a",
+"F c #424242426363",
+"G c #525252526363",
+"H c #5a5a5a5a6363",
+"J c Gray39",
+"K c #636363636b6b",
+"L c Gray42",
+"P c #6b6b6b6b7373",
+"I c #6b6b6b6b7b7b",
+"U c Gray45",
+"Y c #7b7b7b7b7373",
+"T c #7b7b7b7b7b7b",
+"R c #000000008c8c",
+"E c #080808088484",
+"W c #080808089494",
+"Q c #080808089c9c",
+"! c #181818188484",
+"~ c #10100808a5a5",
+"^ c #292929299494",
+"/ c #313131319c9c",
+"( c #393931319c9c",
+") c #29292929a5a5",
+"_ c #31313131adad",
+"` c #4a4a4a4a9c9c",
+"' c #525252528c8c",
+"] c #5a5a5a5a9c9c",
+"[ c #6b6b6b6b8484",
+"{ c #6b6b6b6b8c8c",
+"} c #6b6b6b6b9494",
+"| c #737373738c8c",
+" . c #7b7b7b7b8484",
+".. c #7b7b7b7b8c8c",
+"X. c #737373739494",
+"o. c #7b7b7b7b9c9c",
+"O. c #848484848484",
+"+. c #848484848c8c",
+"@. c Gray55",
+"#. c #848484849494",
+"$. c #848484849c9c",
+"%. c #8c8c8c8c9494",
+"&. c Gray58",
+"*. c #949494949c9c",
+"=. c #9c9c9c9c9494",
+"-. c Gray61",
+";. c #9c9c9c9ca5a5",
+":. c #a5a59c9cadad",
+">. c #a5a5a5a5a5a5",
+",. c Gray68",
+"<. c Gray71",
+"1. c #b5b5bdbdbdbd",
+"2. c Gray74",
+"3. c #c0c0c0c0c0c0",
+"4. c #c6c6c6c6c6c6",
+"5. c None",
+/* pixels */
+"5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.",
+"5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.",
+"5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.2.o./ z z l k l h F <.5.5.",
+"5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.*.W d i u u u u u , m 5.5.",
+"<.{ ,.5.5.5.5.5.5.5.5.5.:.| 2.5.5.5.5.,.- O > < > < + O H X.2.",
+"] R n 2.5.5.5.5.5.5.5.1.) e +.5.5.5.5.5.<.O.Y L L L U T -.] a K ",
+"! d + >.5.5.5.5.5.5.5.-.E 2 A 2.5.5.5.5.5.5.5.5.5.5.5.5.<.j y 9 ",
+"h i > &.5.5.5.5.5.5.5.*.i u n 2.5.5.5.5.5.5.5.5.5.5.5.5.>.q u % ",
+"f i < O.5.5.5.5.5.5.5.%.u u c 2.5.5.5.5.5.5.5.5.5.5.5.5.>.6 6 % ",
+"w i + O.5.5.5.5.5.5.5.%.u 6 c 2.5.5.5.5.5.5.5.5.5.5.5.5.>.5 6 % ",
+"w i + O.5.5.5.5.5.5.5.-.u 6 x 2.5.5.5.5.5.5.5.5.5.5.5.5.>.0 6 % ",
+"N u > T 5.5.5.5.5.5.5.-.6 2 = 2.5.5.5.5.5.5.5.5.5.5.5.5.:.0 6 % ",
+"N u + T 5.5.5.5.5.5.5.>.6 3 = 2.5.5.5.5.5.5.5.5.5.5.5.5.,.< 5 % ",
+"C 1 X @.5.5.5.5.5.5.5.<.7 , : 2.5.5.5.5.5.5.5.5.5.5.5.5.2.8 > & ",
+"%.X # *.$.| [ [ { [ | -.V U 5.5.5.5.5.<.$.[ [ X.X.[ [ *.J J ",
+"4.O.I _ W d s s s s i 5 K T 2.5.5.5.5.1.( Q s r e e e u , G T 2.",
+"5.5.%.> 1 5 3 3 5 5 < X S ,.5.5.5.5.2.%.8 > , < , < > > X m 5.5.",
+"5.5.2.T n - = = = : b D } j &.5.5.2.` M Y A m b b b m B J <.5.5.",
+"5.5.5.5.2.2.2.2.2.2.2.4.^ p c 2.5.;.Q 1 P 5.2.4.2.2.2.2.5.5.5.5.",
+"5.5.5.5.5.5.5.5.5.5.5.<.g u % <.5.*.i 1 V 5.5.5.5.5.5.5.5.5.5.5.",
+"5.5.5.5.5.5.5.5.5.5.5.<.q 6 @ ,.5.*.6 1 V 2.5.5.5.5.5.5.5.5.5.5.",
+"5.5.5.5.5.5.5.5.5.5.5.<.w 6 % ,.5.%.6 , m 2.5.5.5.5.5.5.5.5.5.5.",
+"5.5.5.5.5.5.5.5.5.5.5.2.0 4 @ >.5.+.6 1 m 2.5.5.5.5.5.5.5.5.5.5.",
+"5.5.5.5.5.5.5.5.5.5.5.2.w 6 @ >.5.%.6 < n 2.5.5.5.5.5.5.5.5.5.5.",
+"5.5.5.5.5.5.5.5.5.5.5.2.w 5 @ >.5.&.3 , b 4.5.5.5.5.5.5.5.5.5.5.",
+"5.5.5.5.5.5.5.5.5.5.5.2.v < o ,.5.;.< > m 5.5.5.5.5.5.5.5.5.5.5.",
+"5.5.5.5.5.5.5.5.5.5.5.2.H X ; 2.5.2.& . L >.#. ...%.#...-.2.5.5.",
+"5.5.5.5.5.5.5.5.5.5.5.5.<.Z >.5.5.5.-.D ' ~ d i i t e 6 , P 2.5.",
+"5.5.5.5.5.5.5.5.5.5.5.5.5.4.5.5.5.5.5.<.q 1 < < , < > < X & 2.5.",
+"5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.=.b & $ & & & * Z >.5.5.",
+"5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.",
+"5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5."
+};
diff --git a/kommander/editor/pics/large/left.xpm b/kommander/editor/pics/large/left.xpm
new file mode 100644
index 00000000..c467bccc
--- /dev/null
+++ b/kommander/editor/pics/large/left.xpm
@@ -0,0 +1,181 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 143 2",
+" c #00001010f7f7",
+". c #18183131dede",
+"X c #00002121efef",
+"o c #00002121f7f7",
+"O c #00002121ffff",
+"+ c #00002929ffff",
+"@ c #08082929f7f7",
+"# c #00003131ffff",
+"$ c #08083131ffff",
+"% c #08083939ffff",
+"& c #10102929e7e7",
+"* c #18183131e7e7",
+"= c #10103939ffff",
+"- c #29293939c6c6",
+"; c #29293939d6d6",
+": c #21213939e7e7",
+"> c #39394a4abdbd",
+", c #10104242ffff",
+"< c #18184242ffff",
+"1 c #18184a4affff",
+"2 c #29294242cece",
+"3 c #21214242dede",
+"4 c #29294242dede",
+"5 c #39394a4adede",
+"6 c #31315252dede",
+"7 c #21214a4affff",
+"8 c #21215252ffff",
+"9 c #29295252ffff",
+"0 c #29295a5affff",
+"q c #31315252e7e7",
+"w c #31315a5affff",
+"e c #31316363ffff",
+"r c #39396363ffff",
+"t c #39396b6bffff",
+"y c #5a5a6363adad",
+"u c #63636b6bbdbd",
+"i c #6b6b7373bdbd",
+"p c #42425252d6d6",
+"a c #42425252dede",
+"s c #4a4a5a5ad6d6",
+"d c #52526363c6c6",
+"f c #52526363cece",
+"g c #52527373d6d6",
+"h c #52527b7bdede",
+"j c #42426363efef",
+"k c #42426b6bffff",
+"l c #42427373ffff",
+"z c #4a4a7373ffff",
+"x c #4a4a7b7bffff",
+"c c #52527373e7e7",
+"v c #52527b7bf7f7",
+"b c #63637b7bc6c6",
+"n c #63637b7bcece",
+"m c #6b6b7373c6c6",
+"M c #63637b7bd6d6",
+"N c #73737b7bcece",
+"B c #73738484b5b5",
+"V c #7b7b8484b5b5",
+"C c #7b7b8c8cbdbd",
+"Z c #7b7b9494bdbd",
+"A c #4a4a8484ffff",
+"S c #5a5a8484efef",
+"D c #52528484ffff",
+"F c #5a5a8484ffff",
+"G c #5a5a8c8cffff",
+"H c #6b6b8484cece",
+"J c #63638484dede",
+"K c #73738484c6c6",
+"L c #73738c8ccece",
+"P c #73738c8cd6d6",
+"I c #63638c8cefef",
+"U c #63638c8cffff",
+"Y c #63639494ffff",
+"T c #6b6b9494ffff",
+"R c #6b6b9c9cffff",
+"E c #73739c9ce7e7",
+"W c #7b7ba5a5e7e7",
+"Q c #7373a5a5ffff",
+"! c #7373adadffff",
+"~ c #7b7badadffff",
+"^ c #7b7bb5b5ffff",
+"/ c #848484849c9c",
+"( c #84848484adad",
+") c #8c8c9494adad",
+"_ c #84849494bdbd",
+"` c #8c8c9494b5b5",
+"' c #8c8c9c9cbdbd",
+"] c #94949494a5a5",
+"[ c #94949494bdbd",
+"{ c #94949c9cbdbd",
+"} c #9c9ca5a5adad",
+"| c #9c9ca5a5b5b5",
+" . c #a5a5a5a5b5b5",
+".. c #a5a5a5a5bdbd",
+"X. c #adadadadb5b5",
+"o. c Gray71",
+"O. c #b5b5b5b5bdbd",
+"+. c Gray74",
+"@. c #84848c8cc6c6",
+"#. c #84849c9cc6c6",
+"$. c #8c8c9c9ccece",
+"%. c #94949494c6c6",
+"&. c #8c8ca5a5efef",
+"*. c #8484adadffff",
+"=. c #8c8cadadf7f7",
+"-. c #8484b5b5ffff",
+";. c #8484bdbdffff",
+":. c #8c8cbdbdffff",
+">. c #9c9cbdbdf7f7",
+",. c #b5b5bdbdc6c6",
+"<. c #bdbdbdbdc6c6",
+"1. c #9494c6c6ffff",
+"2. c #9494ceceffff",
+"3. c #9c9cc6c6ffff",
+"4. c #9c9cceceffff",
+"5. c #9c9cd6d6ffff",
+"6. c #a5a5ceceffff",
+"7. c #adadc6c6ffff",
+"8. c #a5a5d6d6ffff",
+"9. c #adadd6d6ffff",
+"0. c #b5b5ceceffff",
+"q. c #b5b5d6d6ffff",
+"w. c #b5b5dedeffff",
+"e. c #bdbdd6d6ffff",
+"r. c #bdbde7e7ffff",
+"t. c #c0c0c0c0c0c0",
+"y. c #ceced6d6ffff",
+"u. c #c6c6e7e7ffff",
+"i. c #c6c6efefffff",
+"p. c #cecee7e7ffff",
+"a. c #ceceefefffff",
+"s. c #c6c6f7f7ffff",
+"d. c #cecef7f7ffff",
+"f. c #d6d6efefffff",
+"g. c #dedeefefffff",
+"h. c #d6d6f7f7ffff",
+"j. c #dedef7f7ffff",
+"k. c #dedeffffffff",
+"l. c #e7e7ffffffff",
+"z. c #efefffffffff",
+"x. c #f7f7ffffffff",
+"c. c Gray100",
+"v. c None",
+/* pixels */
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.<.` E c ` v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.O.b =.c.y.@.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.O.K 7.c.c.f.$.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.` W g.c.x.a.1.$.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.+.) >.c.c.z.s.5.*.$.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.B &.c.c.z.w.5.1.R ' v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.o.` 0.c.c.z.r.1.:.:.Q Z v.v.v.v.v.v.v.v.v.v.+.+.,.,.,.v.v.",
+"v.v. .g q.c.c.a.5.:.-.*.~ ~ J .v.v.v.+.+.,.` C H f h S S J n X.",
+"v.<.J p.c.c.d.4.-.*.~ ~ ~ ~ l q M P H b c I =.3.q.f.j.h.d.4.8 f ",
+"+.n e.c.x.d.8.;.-.~ ~ Q Q ~ U ^ 2.6.w.i.l.j.h.h.a.u.9.1.:.Y < a ",
+"b 6.c.k.r.2.-.*.~ Q Q Q Q Q Q :.3.8.8.4.1.:.;.-.^ Q ! Q Y l , 4 ",
+"I x.i.5.4.-.*.~ Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q R R R U k = 3 ",
+"v 8.1.:.-.^ ~ Q Q Q Q Q Q R Q R R Q R Q R R R R T R Y Y G t $ 4 ",
+"6 e Y Q Q ~ Q Q R R R Q Q R R Y U G G U Y Y Y U Y G U G D r % 4 ",
+"] & < k D Y R Q R Q R R R Q F 7 < < 1 7 w r l l z x x l k e $ 5 ",
+"+./ @ = e x U T R T R R Q Q r X . & X o O + $ = = 1 8 9 7 + p ",
+"v.v.B @ = w l G Y T Y R T Q j y ] +...] V m > - . X X @ @ + & ( ",
+"v.v.+.} s $ 1 r x G Y Y Y Y L v.v.v.v.v.v.v.+.+.O.X.| [ %.{ X.+.",
+"v.v.v.v.O.2 O < e z G U Y G #.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.o.d $ , w x G G A @.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.+.u & = 0 k x t i v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.<. .; # < 9 < i v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.} . + $ # N v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.} u : * _ v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v."
+};
diff --git a/kommander/editor/pics/large/line.xpm b/kommander/editor/pics/large/line.xpm
new file mode 100644
index 00000000..93e0439e
--- /dev/null
+++ b/kommander/editor/pics/large/line.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 7 1",
+" c #060606060505",
+". c #010101010a0a",
+"X c #090908083b3b",
+"o c #1d1d1d1d2121",
+"O c #0a0a0a0a4747",
+"+ c #c0c0c0c0c0c0",
+"@ c None",
+/* pixels */
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"oooooooooooooooooooooooooooooooo",
+"O@OO@OO@O@O@O@O@OO@OO@OO@O@O@O@O",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"OXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXO",
+"................................",
+". .",
+"o..............................o",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
+};
diff --git a/kommander/editor/pics/large/lineedit.xpm b/kommander/editor/pics/large/lineedit.xpm
new file mode 100644
index 00000000..1677865b
--- /dev/null
+++ b/kommander/editor/pics/large/lineedit.xpm
@@ -0,0 +1,135 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 97 2",
+" c Gray0",
+". c Gray8",
+"X c #191919191919",
+"o c #2f2f2f2f2f2f",
+"O c #373737373737",
+"+ c #000000004b4b",
+"@ c #000000005757",
+"# c #000000005f5f",
+"$ c #000000006464",
+"% c #000000006b6b",
+"& c #000000007373",
+"* c #000000007d7d",
+"= c #41413e3e3c3c",
+"- c #464646464646",
+"; c Gray30",
+": c #525252524d4d",
+"> c Gray34",
+", c #5f5f5f5f5a5a",
+"< c #646464645c5c",
+"1 c #707069695555",
+"2 c #666664646464",
+"3 c #696966666161",
+"4 c Gray43",
+"5 c #000005058484",
+"6 c #000000008e8e",
+"7 c #000000009696",
+"8 c #14141e1e8484",
+"9 c #00000000a5a5",
+"0 c #00000000aaaa",
+"q c #00000000b2b2",
+"w c #00000a0ab2b2",
+"e c #00000202cdcd",
+"r c #00000000d7d7",
+"t c #00000000dfdf",
+"y c #00000000e6e6",
+"u c #00000000eeee",
+"i c #00000000f5f5",
+"p c Blue",
+"a c #00000c0cffff",
+"s c #19193737e9e9",
+"d c #11115555ffff",
+"f c #25254646eeee",
+"g c #32325f5fffff",
+"h c #39396161ffff",
+"j c #5f5f6666b4b4",
+"k c #6e6e6e6e8484",
+"l c #757570708282",
+"z c #46466e6effff",
+"x c #50507a7affff",
+"c c #70707878c3c3",
+"v c #55558282ffff",
+"b c #7d7d8989eeee",
+"n c #73739898ffff",
+"m c #8e8e8e8e8e8e",
+"M c Gray59",
+"N c #9d9d9d9d9d9d",
+"B c #98989696a3a3",
+"V c #a5a5a5a5a5a5",
+"C c #afafafafafaf",
+"Z c #b2b2aaaaafaf",
+"A c #b2b2afafb7b7",
+"S c #b2b2afafb9b9",
+"D c #bebebebebebe",
+"F c #87879191ebeb",
+"G c #8e8e9898fafa",
+"H c #9d9da3a3dada",
+"J c #9d9dafafffff",
+"K c #bebebebec1c1",
+"L c #a5a5bebeffff",
+"P c #b9b9c1c1e4e4",
+"I c #b4b4c6c6ffff",
+"U c #c1c1bebebebe",
+"Y c #c6c6c1c1b9b9",
+"T c #c0c0c0c0c0c0",
+"R c #c3c3c3c3c3c3",
+"E c #cdcdcdcdcdcd",
+"W c #dcdcd5d5c6c6",
+"Q c #dfdfdadacdcd",
+"! c #d7d7d7d7d7d7",
+"~ c gainsboro",
+"^ c #c3c3cbcbfdfd",
+"/ c #c1c1d5d5ffff",
+"( c #cbcbdcdcffff",
+") c #d7d7e1e1ffff",
+"_ c #dcdce6e6ffff",
+"` c #dfdfe9e9ffff",
+"' c #f3f3eeeedcdc",
+"] c #fafaf0f0cbcb",
+"[ c #ffffffffd7d7",
+"{ c #ffffffffdfdf",
+"} c #e4e4eeeeffff",
+"| c #eeeef5f5ffff",
+" . c #ffffffffe6e6",
+".. c Gray96",
+"X. c #fffffffff5f5",
+"o. c Gray100",
+"O. c None",
+/* pixels */
+"O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.",
+"O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.",
+"O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.",
+"O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.",
+"O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.",
+"O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.",
+"A 4 = O X o X X . . . . X X X X X X X X . X X X O 2 C ",
+"; - ",
+"X D o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.~ X ",
+"X o.o.o.o.o.o.o.o.o.o.| p 7 .o.o.o.o... o.o.M X ",
+". o o.o.o.o.o.o.o.o.o.o.) p # ] o.o.o.o.o.N m o 4 m C o.o.R . ",
+". - o.o.o.o.o.o.o.o.o.o.) p # [ o.o.o.o.o.o.o.E o.o.o.o.o.E ",
+" > o.o.o./ v g J o.o.o.) p # ] n h ^ o.o.o.o.R o.o.o.o.o.E ",
+" , o.( p i i p p t K o.) p 6 y u i i r X.o.o.R o.o.o.o.o.! ",
+" 2 o.p q & H F i y % X.) p i * j b p r 8 o.o.R o.o.o.o.o.~ ",
+". 3 o.u $ { o.o.o.p # [ _ p 7 l o.o.^ p $ ' o.R o.o.o.o.o.~ ",
+" 2 o.X.X.o.I z a p # ] ` p @ [ o.o.o.p * A o.R o.o.o.o.o.~ . ",
+" 4 o.( a p i y e p $ [ _ p @ .o.o.o.p 9 k o.R o.o.o.o.o.! ",
+" < | p e q e c P p # ] ` p # { o.o.o.p 5 B o.R o.o.o.o.o.! ",
+". 1 n y + { o.o.L p # [ } p $ ] o.o.o.p @ Q o.R o.o.o.o.o.! ",
+" 1 x y & X.o.| p p # ] ` p t w o.o.d t + o.o.E o.o.o.o.o.! ",
+"X = } p u p p u 7 y % W } p 9 t p p u $ Y K C = m V D o.o.E . ",
+"X . o.G p u e 9 Z f 0 S o.y 5 s u e 7 U o. o.o.C . ",
+"X o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.= X ",
+"- X = : < 2 , , > > > > , , , , > > > , , 2 4 4 > ; o = ",
+"C > o X X . . . . . . . . . X o ; V ",
+"O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.",
+"O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.",
+"O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.",
+"O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.",
+"O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.",
+"O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O."
+};
diff --git a/kommander/editor/pics/large/listbox.xpm b/kommander/editor/pics/large/listbox.xpm
new file mode 100644
index 00000000..13ff67ef
--- /dev/null
+++ b/kommander/editor/pics/large/listbox.xpm
@@ -0,0 +1,121 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 83 1",
+" c Gray0",
+". c #080808080000",
+"X c Gray3",
+"o c #080808081010",
+"O c #101008080808",
+"+ c #101010101010",
+"@ c #101010101818",
+"# c #181818181818",
+"$ c #080810102929",
+"% c Gray13",
+"& c Gray16",
+"* c #313131313131",
+"= c #393939393939",
+"- c #101018184242",
+"; c #101018185252",
+": c #101021216b6b",
+"> c #181829297b7b",
+", c #212131316363",
+"< c #212131317373",
+"1 c #424239393939",
+"2 c #424242423939",
+"3 c #4a4a42423939",
+"4 c Gray26",
+"5 c Gray29",
+"6 c #52524a4a4242",
+"7 c #525252524a4a",
+"8 c Gray32",
+"9 c #5a5a5a5a5a5a",
+"0 c Gray39",
+"q c Gray42",
+"w c Gray45",
+"e c #7b7b7b7b7b7b",
+"r c #101029298484",
+"t c #10103131b5b5",
+"y c #10103131cece",
+"u c #00002121e7e7",
+"i c #00002121efef",
+"p c #08082929e7e7",
+"a c #08083131efef",
+"s c #08083131f7f7",
+"d c #18183939efef",
+"f c #18183939f7f7",
+"g c #18183939ffff",
+"h c #18184242ffff",
+"j c #31315252dede",
+"k c #21214242ffff",
+"l c #21214a4affff",
+"z c #31315a5affff",
+"x c #6b6b8484f7f7",
+"c c #73738c8cefef",
+"v c #73738484f7f7",
+"b c #73738c8cf7f7",
+"n c #7b7b8c8cf7f7",
+"m c #7b7b9494f7f7",
+"M c #848484848484",
+"N c Gray55",
+"B c Gray58",
+"V c Gray61",
+"C c #a5a59c9c9c9c",
+"Z c #a5a5a5a59c9c",
+"A c #a5a5a5a5a5a5",
+"S c #adadadada5a5",
+"D c Gray68",
+"F c Gray71",
+"G c Gray74",
+"H c #94949c9cdede",
+"J c #9c9ca5a5dede",
+"K c #9494a5a5ffff",
+"L c #b5b5bdbde7e7",
+"P c #b5b5bdbdf7f7",
+"I c #bdbdc6c6f7f7",
+"U c #bdbdcecef7f7",
+"Y c #c6c6c6c6c6c6",
+"T c #cececececece",
+"R c Gray84",
+"E c Gray87",
+"W c #ceced6d6ffff",
+"Q c #e7e7e7e7e7e7",
+"! c #efefefefefef",
+"~ c #efefefefffff",
+"^ c Gray97",
+"/ c #f7f7f7f7ffff",
+"( c Gray100",
+/* pixels */
+"N0095544==&&&&%%%%%&%&&*=212377e",
+"5X+*====44=444444444==**+@,<>:$5",
+"5 w!FFFFDFDDDDDDDDDDDD^(0ojzkh;4",
+"4 BA=4444=========*==*G(e rkhtO4",
+"4 BF*=4==444=4====4===T(e @yd-.4",
+"= q^TTTYYGGGGGGGYGYTTR!^0 O;rO+=",
+"=++#%%%%#%##############@OXXXXO=",
+"*+&8899000qqwwqqq009985#X*qew4o*",
+"&X0(((((((((((((((((((!* w(((AX*",
+"&X0((((((((((((((((((((= w(^^AX&",
+"& q(F0q00000999999900T(4 qYN8BX%",
+"&Xq(M*=4============&A(4 qw45M+%",
+"&Xw(M*==============&V(5 q8&=MX%",
+"&Xw(V*44444=4444=4===G(8 eB8MVX%",
+"%Xw(!YGFFFFFDDDFFFGGY^(8 e(((DX%",
+"&Xw(F5999888888888885Y(8 e(((A %",
+"%Xe(N*===4==========&A(8 e(((AX%",
+"& e(N&==============&V(9 e(((A %",
+"&Xw(F7777777667677777T(9 e(((AX%",
+"*Xw(~UIIPLPPPPPLPPIIU/(9 e(((D &",
+"=Xw(KgllkkhkhkhhhkfhdL(8 e(((A *",
+"= w(nsffffffddfdddddpH(8 e(((A *",
+"= q(miaadadadadaadaauJ(8 e(((AX=",
+"4 q(WcnbxvxxxxxvbvbncQ(5 e(((V =",
+"4 0(QSSZZZZCVVCZCZZZS!(5 e(((V 4",
+"6 9(V&*=************&D(4 e(((V 4",
+"5 9(B*1==2==========&V(4 e(((V 4",
+"8 8(A%**************&F(= e(((V 5",
+"9 8(!FFFFFFFDDFFFFFFG!(* e(((V 9",
+"9X*VDYYTTTRRERRTTTYYGDB% 4GTY0 9",
+"0XXX XXX++X+++++++XXX X+X +XXX9",
+"N45===**&%%#%######%#%%%&&**===N"
+};
diff --git a/kommander/editor/pics/large/listview.xpm b/kommander/editor/pics/large/listview.xpm
new file mode 100644
index 00000000..de987cc4
--- /dev/null
+++ b/kommander/editor/pics/large/listview.xpm
@@ -0,0 +1,148 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 110 2",
+" c Gray0",
+". c Gray3",
+"X c #101010100808",
+"o c #101010101010",
+"O c #101010101818",
+"+ c #181818181818",
+"@ c Gray13",
+"# c Gray16",
+"$ c #313131313131",
+"% c #393939393939",
+"& c #424231311010",
+"* c #424242422929",
+"= c #5a5a52523131",
+"- c Gray26",
+"; c #424242424a4a",
+": c Gray29",
+"> c Gray32",
+", c #5a5a5a5a5a5a",
+"< c #73736b6b5252",
+"1 c Gray39",
+"2 c Gray42",
+"3 c Gray45",
+"4 c #737373737b7b",
+"5 c #7b7b7b7b7b7b",
+"6 c #7b7b84848484",
+"7 c #84847b7b5a5a",
+"8 c #b5b59c9c3131",
+"9 c #bdbd9c9c3131",
+"0 c #8c8c84846b6b",
+"q c #9c9c94947b7b",
+"w c #b5b59c9c5a5a",
+"e c #bdbd9c9c5a5a",
+"r c #a5a594946b6b",
+"t c #adad9c9c6363",
+"y c #a5a594947373",
+"u c #adad9c9c7373",
+"i c #adad9c9c7b7b",
+"p c #b5b59c9c6363",
+"a c #bdbda5a54242",
+"s c #b5b5a5a57b7b",
+"d c #f7f7bdbd3131",
+"f c #c6c6a5a54242",
+"g c #c6c6a5a54a4a",
+"h c #cecea5a54242",
+"j c #ceceb5b55a5a",
+"k c #d6d6bdbd5252",
+"l c #f7f7c6c63131",
+"z c #f7f7c6c63939",
+"x c #ffffcece3939",
+"c c #dedecece4a4a",
+"v c #efefd6d64a4a",
+"b c #efefdede5252",
+"n c #f7f7cece4242",
+"m c #ffffcece4242",
+"M c #ffffd6d64242",
+"N c #ffffdede4242",
+"B c #ffffdede4a4a",
+"V c #e7e7d6d66363",
+"C c #ffffe7e74a4a",
+"Z c #ffffe7e75252",
+"A c #ffffefef5252",
+"S c #ffffefef5a5a",
+"D c #fffff7f75a5a",
+"F c #fffff7f76363",
+"G c #ffffffff6363",
+"H c #ffffffff6b6b",
+"J c #fffff7f77373",
+"K c #ffffffff7373",
+"L c #ffffffff7b7b",
+"P c #848484848484",
+"I c Gray55",
+"U c #949494948484",
+"Y c #949494948c8c",
+"T c #9c9c94948c8c",
+"R c Gray58",
+"E c #9c9c94949494",
+"W c Gray61",
+"Q c #9c9ca5a5a5a5",
+"! c #a5a59c9c8484",
+"~ c #adad9c9c8484",
+"^ c #a5a59c9c9494",
+"/ c #a5a59c9c9c9c",
+"( c #a5a5a5a59c9c",
+") c #b5b5adad8c8c",
+"_ c #bdbdb5b59494",
+"` c #bdbdb5b59c9c",
+"' c #bdbdbdbd9494",
+"] c #bdbdbdbd9c9c",
+"[ c #a5a5a5a5a5a5",
+"{ c #adadadada5a5",
+"} c Gray68",
+"| c #b5b5adada5a5",
+" . c #b5b5b5b5a5a5",
+".. c #b5b5b5b5adad",
+"X. c #bdbdb5b5a5a5",
+"o. c #bdbdb5b5adad",
+"O. c #bdbdbdbda5a5",
+"+. c #bdbdbdbdadad",
+"@. c Gray71",
+"#. c #bdbdbdbdb5b5",
+"$. c Gray74",
+"%. c #c6c6bdbd8c8c",
+"&. c #c6c6bdbd9494",
+"*. c #c6c6bdbda5a5",
+"=. c #d6d6cece8c8c",
+"-. c #d6d6cece9494",
+";. c #d6d6d6d69494",
+":. c #c0c0c0c0c0c0",
+">. c #c6c6c6c6c6c6",
+",. c None",
+/* pixels */
+",.} R 2 > : % $ $ $ # # # @ @ + + + @ @ + @ + @ @ # # $ - , W ,.",
+"[ % + . . . . . . . . . . . W ",
+"2 o . . . . : ",
+"- . . ; P Y E [ W ( [ [ W W W W W W W R W [ W I P 5 - # ",
+"$ . , ,.#.-.-.;.-.-.=...,.,.,.,.,.,.,.,.,.,.,.,.,.,.>.> + ",
+"# . R ,.' L K K K H F ! ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.R o ",
+"@ . W ,.&.K H H H G S q ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.W o ",
+"@ . . [ ,.&.H H F F F S q ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.[ . o ",
+"+ . . @.,.' H F F F F S q ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.} . . ",
+"+ . . @.,.%.H G F F F Z q ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.} . o ",
+"+ o } ,.| a f 9 9 f 8 ( ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.} . o ",
+"+ . . @.,.$.$.@.- $ @.@.>.,.,.$.+.O.*.*.O.O.#.,.,.,.,.,.} . . ",
+"+ o @.,.,.,.,.; % ,.,.,.,.,.o.J H H F F D s ,.,.,.,.,.} . o ",
+"+ . @.,.,.,.,.> @ P P P P 6 0 F S S S S A t ,.,.,.,.,.[ . o ",
+"+ . } ,.,.,.,.> . @ + + + O * F S S Z Z Z w ,.,.,.,.,.} . o ",
+"+ . . @.,.,.,.,.: $ $.$.$.$.>.` F S Z Z Z C p ,.,.,.,.,.} . o ",
+"o o } ,.,.,.,.> $ ,.,.,.,.,._ S A S Z Z C t ,.,.,.,.,.} . o ",
+"+ . @.,.,.,.,.> $ ,.,.,.,.,. .b m n m n x u ,.,.,.,.,.} . + ",
+"+ . } ,.,.,.,.> $ ,.,.,.,.,.$./ E < & U T @.,.,.,.,.,.} + ",
+"+ . } ,.,.,.,.> $ ,.,.,.,.,.,.,.,.6 O $.,.,.,.,.,.,.,.[ . + ",
+"@ . } ,.,.,.,.> $ $.*.X.] ` X.` $.P o X.O.` ] ` ` +.,.Q @ ",
+"@ . } ,.,.,.,.> % | H F F F F A ) P X V D D S S A j ,./ @ ",
+"# } ,.,.,.,.I O 7 D S Z Z Z B i Q o c A Z B B C f ,.[ @ ",
+"# . [ ,.,.,.,.>.4 = S Z Z Z Z N r ,.Y c Z B B B B h ,.[ # ",
+"# W ,.,.,.,.,.,._ D Z Z B B N y ,.$.b C B B B M h ,.R # ",
+"$ R ,.,.,.,.,.,.` A Z B Z B N y ,.#.v Z B M M N g ,.I $ ",
+"% I ,.,.,.,.,.,.| v z z z z d ~ ,.$.k z d z z l e ,.5 % ",
+"- 1 ,.,.,.,.,.,.$.{ / { { / ( $.,.,.@.^ ( { / / @.,., - ",
+"> . P } @.$.$.$.$.>.,.,.,.,.,.$.$.$.$.,.,.,.$.@.} P $ > ",
+"3 . o + # # $ $ $ # # # # # # $ # # # @ + . . . . 3 ",
+"} . . } ",
+",.[ , $ @ @ o o o o o . o . o . . . o . o o o o o + @ # % , [ ,."
+};
diff --git a/kommander/editor/pics/large/multilineedit.xpm b/kommander/editor/pics/large/multilineedit.xpm
new file mode 100644
index 00000000..e87a5713
--- /dev/null
+++ b/kommander/editor/pics/large/multilineedit.xpm
@@ -0,0 +1,108 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 70 1",
+" c #040404040404",
+". c Gray5",
+"X c #111111111111",
+"o c Gray24",
+"O c #000000007d7d",
+"+ c #414141414141",
+"@ c #4e4e4e4e4e4e",
+"# c Gray34",
+"$ c #5b5b5b5b5b5b",
+"% c Gray39",
+"& c #6c6c6c6c6c6c",
+"* c Gray44",
+"= c Gray49",
+"- c #000000008a8a",
+"; c #00000000a4a4",
+": c #00000000bebe",
+"> c #343434348282",
+", c #00000000c3c3",
+"< c #00000000d4d4",
+"1 c #00000000d8d8",
+"2 c #00000000e1e1",
+"3 c #00000000f6f6",
+"4 c #04040404ffff",
+"5 c #00000d0dffff",
+"6 c #09091a1affff",
+"7 c #16161616ffff",
+"8 c #11111e1effff",
+"9 c #16162323ffff",
+"0 c #1e1e2727ffff",
+"q c #1a1a3434ffff",
+"w c #30303030cbcb",
+"e c #27272727ffff",
+"r c #34343434ffff",
+"t c #38383838ffff",
+"y c #6c6c7070baba",
+"u c #52525f5fffff",
+"i c #4e4e6868ffff",
+"p c #57576363ffff",
+"a c #5f5f6363ffff",
+"s c #5b5b6868ffff",
+"d c #63637979ffff",
+"f c #75757979ffff",
+"g c #79797d7dffff",
+"h c #68688686ffff",
+"j c #7d7d8f8fffff",
+"k c #868686868686",
+"l c #939393939393",
+"z c Gray61",
+"x c #a0a0a0a0a0a0",
+"c c #a9a9a9a9a9a9",
+"v c #bebebebebebe",
+"b c #86868686e5e5",
+"n c #82828f8fffff",
+"m c #93939393ffff",
+"M c #9797adadffff",
+"N c #adadadadffff",
+"B c #adadb6b6ffff",
+"V c #bebec7c7ffff",
+"C c #b1b1d0d0ffff",
+"Z c #c0c0c0c0c0c0",
+"A c Gray83",
+"S c #cbcbd0d0ffff",
+"D c #d4d4d4d4ffff",
+"F c #ddddd8d8f6f6",
+"G c #d4d4e5e5ffff",
+"H c #e9e9e9e9e9e9",
+"J c #e9e9eeeeffff",
+"K c #eeeefbfbffff",
+"L c Gray100",
+"P c None",
+/* pixels */
+"v*oXXXX................XXXXXoo&v",
+"& . . . $",
+"o &HLLLLLLLLLLLLLLLLLLLLLLHl X",
+"X kLLLLLLLLLLLLLLLLLLLLLLLLLLL X",
+". LLLLLLLLLLLLLLL65LLLLLLLLLLL .",
+". LLLLLLLLLLLLLLL44LLLLLLLLLLL .",
+". LLLLLLLLLLLLLLL44LLLLLLLLLLL .",
+". LLLL444fLLLC44a44LLLd444LLLL .",
+". LLL444444Lh444444LL444444LLL .",
+". LL44DLL44L44LLN44Ln47LLB44LL .",
+". LL44LLLLLL44LLL44L44qspi44LL .",
+"X LL44LLLLLB4tLLL44L44444444LL .",
+"X LL44LLLLpS44LLL44L44LLLLLLLL X",
+"X LL44GLL44L44LLK44Lr40LLJ44LL X",
+"X LLL444444Ln444444LL444444LLL X",
+"X LLLL444aLLLS44er7LLLe444LLLL X",
+"X.LLLLLLLLLLLLLLLLLLLLLLLLLLLL X",
+"o LLLLLLLLLLL42LLLLL. vLLL X",
+"X LLLLLLLLLLL4,LLLLLLLk LLLLLL o",
+"o LLLLLLnLLLL4,LLBLLLLc LLLLLL X",
+"o LLLM44444LL444444NLLc LLLLLL o",
+"o LLL4;LL44OL444LS41LLx LLLLLL X",
+"o LLL4FLLL4OL44bLLr4wLz LLLLLL o",
+"o HLLL44444-L4;LLLL4<Lz LLLLLL o",
+"o ALL4444V4;L4;LLLL42Lz LLLLLL o",
+"@ cL44>LLG4OL44yLL84mLz LLLLLL o",
+"@ kL44;Lj44OL443gu44LL@ LLLLLL o",
+"# oLL444444:L934444L LLLL +",
+"% LLLLLLLLLLLLLLLLLLLLLLLLLLL #",
+"= LLLLLLLLLLLLLLLLLLLLLLLLLL %",
+"x. +&=kk=*&%#$#####@oo. l",
+"PkoXX................ ...XXXXokP"
+};
diff --git a/kommander/editor/pics/large/newform.xpm b/kommander/editor/pics/large/newform.xpm
new file mode 100644
index 00000000..d8e9bc4b
--- /dev/null
+++ b/kommander/editor/pics/large/newform.xpm
@@ -0,0 +1,35 @@
+/* XPM */
+static char * newform_xpm[] = {
+"34 26 6 1",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+"@ c #0000FF",
+"# c #C0C0C0",
+"$ c #808080",
+"..................................",
+".+++++++++++++++++++++++++++++++..",
+".+@@@@@@@@@@@@@@@@@@@@@@@+#+#+#+$.",
+".+++++++++++++++++++++++++++++++$.",
+".+.............................+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+..#.#.#.#.#.#.#.#.#.#.#.#.#.$+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+..#.#.#.#.#.#.#.#.#.#.#.#.#.$+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+..#.#.#.#.#.#.#.#.#.#.#.#.#.$+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+..#.#.#.#.#.#.#.#.#.#.#.#.#.$+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+..#.#.#.#.#.#.#.#.#.#.#.#.#.$+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+..#.#.#.#.#.#.#.#.#.#.#.#.#.$+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+..#.#.#.#.#.#.#.#.#.#.#.#.#.$+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+..#.#.#.#.#.#.#.#.#.#.#.#.#.$+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+.$$$$$$$$$$$$$$$$$$$$$$$$$$$$+$.",
+".+++++++++++++++++++++++++++++++$.",
+"..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.",
+".................................."};
diff --git a/kommander/editor/pics/large/ordertool.xpm b/kommander/editor/pics/large/ordertool.xpm
new file mode 100644
index 00000000..71c05d6d
--- /dev/null
+++ b/kommander/editor/pics/large/ordertool.xpm
@@ -0,0 +1,157 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 119 2",
+" c Gray0",
+". c Gray3",
+"X c #101010101010",
+"o c #181818181818",
+"O c Gray13",
+"+ c Gray16",
+"@ c #313131313131",
+"# c #393939393939",
+"$ c Gray26",
+"% c Gray29",
+"& c Gray32",
+"* c #5a5a5a5a5a5a",
+"= c Gray39",
+"- c Gray42",
+"; c Gray45",
+": c #7b7b7b7b7b7b",
+"> c #29293131adad",
+", c #29293131b5b5",
+"< c #31313131adad",
+"1 c #31313939a5a5",
+"2 c #31313939adad",
+"3 c #31313939b5b5",
+"4 c #31313939bdbd",
+"5 c #393942429c9c",
+"6 c #39394242a5a5",
+"7 c #39394242ffff",
+"8 c #39394a4affff",
+"9 c #424242429c9c",
+"0 c #525252529c9c",
+"q c #42424242a5a5",
+"w c #42424a4aa5a5",
+"e c #42424a4aadad",
+"r c #4a4a4a4ab5b5",
+"t c #4a4a4a4abdbd",
+"y c #4a4a5252adad",
+"u c #4a4a5252b5b5",
+"i c #52525252a5a5",
+"p c #52525a5aa5a5",
+"a c #52525a5aadad",
+"s c #5a5a5a5aa5a5",
+"d c #52525252b5b5",
+"f c #52525a5ab5b5",
+"g c #52525a5abdbd",
+"h c #5a5a6363adad",
+"j c #5a5a6363b5b5",
+"k c #63636363bdbd",
+"l c #63636b6bbdbd",
+"z c #6b6b6b6bb5b5",
+"x c #7b7b7b7bb5b5",
+"c c #4a4a5252dede",
+"v c #42424a4affff",
+"b c #4a4a5252e7e7",
+"n c #4a4a5a5aefef",
+"m c #42425252ffff",
+"M c #4a4a5252ffff",
+"N c #4a4a5a5affff",
+"B c #52525a5aefef",
+"V c #52525a5af7f7",
+"C c #52525a5affff",
+"Z c #5a5a6363c6c6",
+"A c #52526363efef",
+"S c #5a5a6363efef",
+"D c #52526363f7f7",
+"F c #52526363ffff",
+"G c #5a5a6363f7f7",
+"H c #5a5a6363ffff",
+"J c #5a5a6b6bffff",
+"K c #63636b6bdede",
+"L c #7b7b7b7bcece",
+"P c #7b7b7b7bd6d6",
+"I c #63636b6befef",
+"U c #63636b6bffff",
+"Y c #63637373ffff",
+"T c #6b6b7373ffff",
+"R c #6b6b7b7bffff",
+"E c #73737b7bffff",
+"W c #7b7b8484bdbd",
+"Q c #7b7b8484c6c6",
+"! c #7b7b8484cece",
+"~ c #73738484dede",
+"^ c #7b7b8484e7e7",
+"/ c #73738484ffff",
+"( c #7b7b8484ffff",
+") c #7b7b8c8cffff",
+"_ c #848484848484",
+"` c Gray55",
+"' c #84848c8c9c9c",
+"] c Gray58",
+"[ c Gray61",
+"{ c #84848484adad",
+"} c #84848c8ca5a5",
+"| c #8c8c8c8cadad",
+" . c #84848484bdbd",
+".. c #84848c8cbdbd",
+"X. c #8c8c8c8cb5b5",
+"o. c #9c9c9c9cb5b5",
+"O. c #a5a5a5a5a5a5",
+"+. c #a5a5a5a5adad",
+"@. c Gray68",
+"#. c #a5a5a5a5b5b5",
+"$. c #adadadadb5b5",
+"%. c #adadadadbdbd",
+"&. c Gray71",
+"*. c #b5b5b5b5bdbd",
+"=. c Gray74",
+"-. c #84848484c6c6",
+";. c #84848c8cffff",
+":. c #84849494ffff",
+">. c #8c8c9494ffff",
+",. c #8c8c9c9cffff",
+"<. c #94949c9cffff",
+"1. c #9494a5a5ffff",
+"2. c #9c9ca5a5ffff",
+"3. c #bdbdbdbdc6c6",
+"4. c #a5a5adadffff",
+"5. c #a5a5b5b5ffff",
+"6. c #c0c0c0c0c0c0",
+"7. c #c6c6c6c6c6c6",
+"8. c None",
+/* pixels */
+"8.8.@.+ X =.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.",
+"8.O.+ . &.8.8.8.8.8.8.8.8.$.-.! L P P P P P P P P ! L ! W #.8.",
+"[ X . &.8.8.8.8.8.8.8.*.^ 5.1.2.1.2.1.1.2.1.1.<.,.>.;.E t 8.",
+"` . . &.8.8.8.8.8.8.8.&.S >.) ( ) ( ( / / / E / E R T H 3 8.",
+"=.O._ . &.8.8.8.8.8.8.8.$.G ;.E R R T T T T T T Y Y U U C 4 8.",
+"8.8.` . &.8.8.8.8.8.8.8.%.S ) E T T T Y T Y Y Y U U U J N , 8.",
+"8.8.` . &.8.8.8.8.8.8.8.$.S ( R T Y Y Y U U U U U U J H N , 8.",
+"8.8.] . &.8.8.8.8.8.8.8.$.B E Y Y U H U U J U J H H H F M < 8.",
+"8.8.&.. . &.8.8.8.8.8.8.8.*.c H C M m m v m v m v v m v m 8 1 8.",
+"8.8.=.& % =.8.8.8.8.8.8.8.=.| h h s s 0 0 0 0 0 0 0 p s s s ' 8.",
+"8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.7.=.=.7.=.7.=.=.7.=.7.3.=.8.8.8.",
+"8.] $ @ # ; =.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.",
+"[ . = 8.8.8.8.8.8.8.%.X... . .Q Q .Q .Q . . ...X.#.8.",
+"% O ] # o =.8.8.8.8.8.=.~ 4.<.1.1.<.1.<.1.<.,.,.>.:.) T u 8.",
+"- O ; 8.- X =.8.8.8.8.8.$.I :.) ( ( ( ( / / E ( / E R T H 3 8.",
+"8.=.8._ * 8.8.8.8.8.8.$.G ( R T T Y Y U T Y U U U U H N 2 8.",
+"8.8.: + &.8.8.8.8.8.8.%.A ( T Y Y U U U Y U U U J J H M > 8.",
+"8.- $ =.8.8.8.8.8.8.8.$.D / T U Y U U U J J J U J H F m < 8.",
+"` . & = - =.8.8.8.8.8.$.B R U U J J J J H H H H H H C m 1 8.",
+"o . &.8.8.8.8.8.&.b H C N M v M M m M m v m v m 7 6 8.",
+"$ @ # @ # @ % =.8.8.8.8.8.7.{ j a y w q 6 5 5 5 q 6 w w e y } 8.",
+"8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.7.=.=.=.=.=.=.=.=.=.=.=.8.8.8.",
+"8.O.& $ * O.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.",
+"@.o . [ 8.8.8.8.8.8.8.o.l l k Z Z Z Z Z Z Z Z k k z z +.8.",
+"% O = X - 8.8.8.8.8.8.=.K ) ( ( ( ( ( ( ( ( / E R R Y V i 8.",
+"= o - O.o - 8.8.8.8.8.8.$.I ,.;.;.;.:.) ) ;.) ) ;.( / R J q 8.",
+"8.8.$ _ 8.8.8.8.8.8.$.S / T Y Y U Y U J U U U J H H M 1 8.",
+"8.8.= o # 8.8.8.8.8.8.$.D E Y U U U U J U J J H H H F v 1 8.",
+"_ & ] 8.= . &.8.8.8.8.8.%.B R U U J J J H H H H H H H C 8 6 8.",
+"@ @ [ % o =.8.8.8.8.8.$.n T J J H H H H H F H F F C C v 5 8.",
+": - 8.8.8.8.8.8.&.b F C M M m m M m M m M m m m 7 9 8.",
+"8.; O X O = =.8.8.8.8.8.8.=.x g f u y y y e w e e e r u d u } 8."
+};
diff --git a/kommander/editor/pics/large/pixlabel.xpm b/kommander/editor/pics/large/pixlabel.xpm
new file mode 100644
index 00000000..96c69bf4
--- /dev/null
+++ b/kommander/editor/pics/large/pixlabel.xpm
@@ -0,0 +1,204 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 166 2",
+" c #000008084a4a",
+". c #b5b5b5b5d6d6",
+"X c #c6c6bdbdd6d6",
+"o c #bdbdb5b5d6d6",
+"O c #c6c6c6c6d6d6",
+"+ c #cecec6c6d6d6",
+"@ c #d6d6ceced6d6",
+"# c #cecececed6d6",
+"$ c #b5b5adadd6d6",
+"% c #d6d6cecedede",
+"& c #bdbdbdbdd6d6",
+"* c #adadadadd6d6",
+"= c #a5a5a5a5d6d6",
+"- c #bdbdbdbdcece",
+"; c #c6c6bdbdcece",
+": c #adada5a5d6d6",
+"> c #c6c6c6c6cece",
+", c #b5b5a5a5d6d6",
+"< c #deded6d6d6d6",
+"1 c #dedececed6d6",
+"2 c #d6d6c6c6d6d6",
+"3 c #ceceb5b5dede",
+"4 c #efefd6d6dede",
+"5 c #9c9c9c9cd6d6",
+"6 c #f7f7d6d6dede",
+"7 c #f7f7cecee7e7",
+"8 c #ffffdededede",
+"9 c #e7e7cecedede",
+"0 c #ffffdedee7e7",
+"q c #ffffefefefef",
+"w c #fffff7f7efef",
+"e c #dedececedede",
+"r c #ffffe7e7efef",
+"t c Gray100",
+"y c #ffffefefffff",
+"u c #cecec6c6c6c6",
+"i c #c6c6c6c6c6c6",
+"p c #cecec6c6dede",
+"a c #adadb5b5b5b5",
+"s c #fffff7f7f7f7",
+"d c #f7f7deded6d6",
+"f c #bdbdadad7373",
+"g c #84848c8c3939",
+"h c #7b7b8c8c4242",
+"j c #9c9ca5a58c8c",
+"k c #adadb5b5adad",
+"l c #8c8c9c9c6b6b",
+"z c #73738c8c4a4a",
+"x c #848494947373",
+"c c #848494946b6b",
+"v c #6b6b84843131",
+"b c #636373733131",
+"n c #fffffffff7f7",
+"m c #ffffefefb5b5",
+"M c #cecea5a54a4a",
+"N c #8c8c84842929",
+"B c #7b7b84843131",
+"V c #6b6b7b7b2929",
+"C c #636373732929",
+"Z c #5a5a6b6b2121",
+"A c #5a5a73732121",
+"S c #5a5a7b7b2121",
+"D c #5a5a7b7b2929",
+"F c #cecebdbddede",
+"G c #fffff7f7bdbd",
+"H c #f7f7bdbd4a4a",
+"J c #b5b58c8c3939",
+"K c #73737b7b3131",
+"L c #6b6b7b7b3131",
+"P c #5a5a73732929",
+"I c #5a5a6b6b2929",
+"U c #bdbdbdbddede",
+"Y c #b5b5b5b5dede",
+"T c #adada5a5dede",
+"R c #bdbdadaddede",
+"E c #d6d6b5b5e7e7",
+"W c #e7e7adad6b6b",
+"Q c #bdbd84843939",
+"! c #8c8c73733131",
+"~ c #737373733131",
+"^ c #525263632929",
+"/ c #52526b6b2929",
+"( c #94949c9c9494",
+") c #8c8c9c9c7373",
+"_ c #a5a5adad9c9c",
+"` c #bdbdb5b5bdbd",
+"' c #cecebdbdadad",
+"] c #dedebdbdadad",
+"[ c #94947b7b3131",
+"{ c #7b7b73733131",
+"} c #6b6b6b6b2929",
+"| c #63636b6b2929",
+" . c #63637b7b2929",
+".. c #7b7b8c8c6363",
+"X. c #63637b7b2121",
+"o. c #73738c8c3131",
+"O. c #8c8c9c9c5252",
+"+. c #848494944242",
+"@. c #7b7b8c8c3939",
+"#. c #7b7b7b7b3131",
+"$. c #73736b6b2929",
+"%. c #9c9ca5a59c9c",
+"&. c #6b6b7b7b5252",
+"*. c #6b6b8c8c3131",
+"=. c #7b7b94943131",
+"-. c #7b7b94943939",
+";. c #7b7b8c8c3131",
+":. c #6b6b73732929",
+">. c #52526b6b2121",
+",. c #4a4a63631818",
+"<. c #525263632121",
+"1. c #5a5a6b6b3131",
+"2. c #4a4a63632121",
+"3. c #4a4a5a5a3939",
+"4. c #4a4a5a5a2929",
+"5. c #737384843131",
+"6. c #4a4a5a5a2121",
+"7. c #42424a4a3939",
+"8. c #42424a4a3131",
+"9. c #424252522929",
+"0. c #5a5a63633131",
+"q. c #52525a5a3939",
+"w. c #5a5a63633939",
+"e. c #52525a5a3131",
+"r. c #4a4a52522929",
+"t. c #393942422929",
+"y. c #313139392121",
+"u. c #292931312121",
+"i. c #292929291818",
+"p. c #292939391818",
+"a. c #313139391818",
+"s. c #39394a4a2121",
+"d. c #393942423939",
+"f. c #424242423939",
+"g. c #393942423131",
+"h. c #39394a4a3131",
+"j. c #39394a4a2929",
+"k. c #4a4a52523131",
+"l. c #5a5a5a5a3131",
+"z. c #42424a4a2929",
+"x. c #212129291818",
+"c. c #181821211818",
+"v. c #181821211010",
+"b. c #212121211818",
+"n. c #212131311818",
+"m. c #4a4a52523939",
+"M. c #393942422121",
+"N. c #52525a5a4a4a",
+"B. c #4a4a52524242",
+"V. c #4a4a5a5a4242",
+"C. c #525263634a4a",
+"Z. c #424252523131",
+"A. c #525263633939",
+"S. c #292931311818",
+"D. c #5a5a63634a4a",
+"F. c #424252523939",
+"G. c #525252523131",
+"H. c #5a5a63635252",
+"J. c #52525a5a4242",
+"K. c #424242422929",
+"L. c #101010101010",
+"P. c #5a5a6b6b5252",
+"I. c #525263634242",
+"U. c #5a5a63634242",
+"Y. c #5a5a6b6b4242",
+"T. c #63636b6b4242",
+/* pixels */
+" ",
+" ",
+" . X o O + o . + @ + # X X + + + + # X $ o o + # O o O % ",
+" . & . & & * & O O X X . * + + & X + + O O # # O $ = & X ",
+" # . * - . . ; * : . ; & X + + X + # # + O > @ > = * - - ",
+" O . > O - . - * . . & + X + @ @ + + # ; X - - O = * - . ",
+" O > & - O ; & > X > + o , + < 1 + + + & O . = ; * = & O ",
+" & > . * & > . = $ # 2 o 3 1 4 1 2 2 X $ $ : 5 - > * - # ",
+" & # > - - X & : . + 2 1 4 6 7 8 9 2 + ; & - X > O - & & ",
+" X O O O > > & > + X 1 9 0 q w 0 6 4 e 1 # # O # O O # & ",
+" - * * - & > O + + X 1 6 r t t y r 6 u i p p X ; & & - a ",
+" * = . - $ & X > + 2 e 8 s t t t d f g h j k l z x c v b ",
+" X - > O ; - O @ @ 1 < 0 n t t m M N B V V C Z A A S b D ",
+" . . - & & > X . X 1 F 9 s t G H J g K L C P I I P P b v ",
+" = 5 5 > X U Y T $ + R E r s W Q ! ~ L C I I ^ / I P P b ",
+" . . 5 * - ( ) _ ; ; ` ' ' ] [ { { } | I I I I P I P P . ",
+" p O . . ..A X.o.O.+.@.K #.{ $.$.} | I I I P C C P P D b ",
+" %...c &.A .v *.o.=.-.;.:.| | | :.L C C P P b b b .D b ",
+" I >.,.<.P b b v o.-.-.g -.:.C K L L b C I I P P D 1.P b ",
+" <.2.2./ / P .b v v o.-.-.@.@.;.v .P I / / / / I P P P ",
+" 3.4.<.2.<./ P .b b *.o.o.5.v b 1.^ ^ <.6.<.<.^ / P P P ",
+" 7.8.9.9.6.<./ I P b 1.0.q.w.w.e.r.t.y.u.i.u.p.a.s.4./ I ",
+" 7.d.f.g.h.h.j.8.8.8.8.k.e.e.l.w.k.z.y.u.u.x.x.c.v.b.n.y. ",
+" f.d.7.7.7.7.7.g.h.8.m.q.w.w.w.w.k.k.t.M.y.u.x.x.x.x.c.b. ",
+" N.B.B.V.C.B.7.g.g.8.Z.k.q.A.w.A.e.z.j.t.y.u.u.u.u.S.S.n. ",
+" D.C.C.V.F.g.g.g.g.g.8.8.k.G.k.r.z.M.y.y.u.n.x.x.x.c.c.x. ",
+" H.C.J.V.m.F.m.F.k.8.8.8.k.k.k.z.t.K.t.y.b.v.x.x.v.L.a.b ",
+" P.P.H.C.J.N.I.J.A.q.m.k.k.k.z.K.z.z.K.t.y.x.c.v.L.S.D v ",
+" P.H.D.N.D.D.D.D.U.U.Y.w.e.k.k.k.k.k.z.y.x.u.i.c.x.P b D ",
+" D.D.C.J.V.J.V.3.A.U.T.T.U.k.r.k.q.k.Z.k.t.y.y.M.P .D C ",
+" ",
+" "
+};
diff --git a/kommander/editor/pics/large/pointer.xpm b/kommander/editor/pics/large/pointer.xpm
new file mode 100644
index 00000000..57af144d
--- /dev/null
+++ b/kommander/editor/pics/large/pointer.xpm
@@ -0,0 +1,27 @@
+/* XPM */
+static char * pointer_xpm[] = {
+"22 22 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . ",
+" .. ",
+" ... ",
+" .... ",
+" ..... ",
+" ...... ",
+" ....... ",
+" ..... ",
+" ..... ",
+" . ... ",
+" ... ",
+" ... ",
+" ... ",
+" ",
+" ",
+" ",
+" "};
diff --git a/kommander/editor/pics/large/print.xpm b/kommander/editor/pics/large/print.xpm
new file mode 100644
index 00000000..c412d1b2
--- /dev/null
+++ b/kommander/editor/pics/large/print.xpm
@@ -0,0 +1,155 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 117 2",
+" c Gray0",
+". c #000000000808",
+"X c #080800000808",
+"o c Gray3",
+"O c #080808081010",
+"+ c #101008081010",
+"@ c #101010101010",
+"# c #101010101818",
+"$ c #181818181818",
+"% c #181818182121",
+"& c #212118182121",
+"* c Gray13",
+"= c #212121212929",
+"- c #292921212929",
+"; c Gray16",
+": c #292929293131",
+"> c #313129293131",
+", c #313131313131",
+"< c #313131313939",
+"1 c #393931313939",
+"2 c #393939393939",
+"3 c #393939394242",
+"4 c #424239394242",
+"5 c Gray26",
+"6 c #424242424a4a",
+"7 c #4a4a42424a4a",
+"8 c Gray29",
+"9 c #4a4a4a4a5252",
+"0 c #52524a4a5252",
+"q c Gray32",
+"w c #525252525a5a",
+"e c #5a5a5a5a5a5a",
+"r c #5a5a5a5a6363",
+"t c #63635a5a6363",
+"y c Gray39",
+"u c #636363636b6b",
+"i c #6b6b63636b6b",
+"p c Gray42",
+"a c #6b6b6b6b7373",
+"s c #73736b6b7373",
+"d c Gray45",
+"f c #737373737b7b",
+"g c #7b7b73738484",
+"h c #7b7b7b7b8484",
+"j c Green",
+"k c #1818ffff1010",
+"l c #3131ffff3131",
+"z c #3939ffff4242",
+"x c #4a4affff4a4a",
+"c c #7b7bffff7b7b",
+"v c #7b7befef8484",
+"b c #84847b7b8484",
+"n c #84847b7b8c8c",
+"m c #848484848484",
+"M c #848484848c8c",
+"N c #8c8c84848c8c",
+"B c Gray55",
+"V c #8c8c84849494",
+"C c #8c8c8c8c9494",
+"Z c #94948c8c9494",
+"A c #94948c8c9c9c",
+"S c Gray58",
+"D c #949494949c9c",
+"F c #9c9c94949c9c",
+"G c Gray61",
+"H c #9c9c9494a5a5",
+"J c #9c9c9c9ca5a5",
+"K c #8c8cbdbd9494",
+"L c #9c9cbdbd9c9c",
+"P c #a5a59c9ca5a5",
+"I c #a5a59c9cadad",
+"U c #a5a5a5a5a5a5",
+"Y c #a5a5a5a5adad",
+"T c #adada5a5adad",
+"R c Gray68",
+"E c #adada5a5b5b5",
+"W c #adadadadb5b5",
+"Q c #b5b5adadb5b5",
+"! c #b5b5adadbdbd",
+"~ c Gray71",
+"^ c #b5b5b5b5bdbd",
+"/ c #bdbdb5b5bdbd",
+"( c Gray74",
+") c #bdbdb5b5c6c6",
+"_ c #bdbdbdbdc6c6",
+"` c #8c8cffff8c8c",
+"' c #a5a5ffffa5a5",
+"] c #bdbdffffbdbd",
+"[ c #c6c6b5b5c6c6",
+"{ c #c6c6b5b5cece",
+"} c #c6c6bdbdc6c6",
+"| c #c6c6bdbdcece",
+" . c #c0c0c0c0c0c0",
+".. c #c6c6c6c6c6c6",
+"X. c #c6c6c6c6cece",
+"o. c #cecec6c6cece",
+"O. c #cececececece",
+"+. c #cecec6c6d6d6",
+"@. c #cecececed6d6",
+"#. c #d6d6ceced6d6",
+"$. c #d6d6cecedede",
+"%. c Gray84",
+"&. c #d6d6d6d6dede",
+"*. c #deded6d6dede",
+"=. c Gray87",
+"-. c #deded6d6e7e7",
+";. c #cecef7f7cece",
+":. c #d6d6ffffd6d6",
+">. c #e7e7e7e7e7e7",
+",. c #efefefefefef",
+"<. c #e7e7ffffe7e7",
+"1. c #f7f7efeff7f7",
+"2. c Gray97",
+"3. c #f7f7f7f7ffff",
+"4. c #fffff7f7ffff",
+"5. c Gray100",
+"6. c None",
+/* pixels */
+"6.6.6.6.6.6.6.6.6.( U ( O.O.%.%.%.O.O.....( ( ~ ~ 6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.6.6...O.%.O.O...............O.O...R 6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.6.6.~ ,.2.5.2.5.5.5.5.5.5.5.5.5.2...6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.6.6.( ~ ( ~ ~ ( ~ ( ~ ~ ~ ~ R R R ( 6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.6.6.........O.O.O.O.%.%.%.%.%.%...( 6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.6.6.R ~ R R ~ R R R U U U G G G S ( 6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.6.6.R ( ..( ( ( ( ( ( ( ( ( ....( 6.6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.6.6...O.O.%.%.%.%.%.%.%.%.%.%.%.( 6.6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.6.6.U U U U G U U G U U R R R ~ U 6.6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.6.6.R O...........O.O.O...O.O.O.R 6.6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.6.6...%.%.%.O.O.O.........( ( ~ ~ 6.6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.6.6.R U U U U R R R ~ ~ ~ ~ ( ( ~ 6.6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.6.~ ( 2.,.,.,.>.>.>.>.=.=.=.%.=.G U U ( 6.6.6.6.6.",
+"6.6.6.6.6.6.6.U s ( 2.,.,.2.2.2.2.2.2.2.2.2.5.F r r 7 m 6.6.6.6.",
+"6.6.6.6.6.( S a u f m m m M m M m m B S G G U f t 6 - & y ~ 6.6.",
+"6.6.6.6.( D N M b b b h b h b h b b h b n n b i 5 ; = % $ 4 R 6.",
+"6.6.6.( S } -.&.$.#.+.+.@.+.o.o.X._ { _ K L ) D 9 = & * & # q 6.",
+"6.6.( S | 3.5.5.5.5.5.5.5.5.5.5.5.5.<.z j j v [ n 2 * & % @ & 6.",
+"6.6.G @.4.5.5.5.5.5.5.5.5.5.5.5.5.5.c k x j z $.E a : * $ X % 6.",
+"6.G &.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.] l l j ' 4.>.I w & O X % 6.",
+"6.I 1.,.,.,.,.1.3.5.4.5.5.5.5.5.5.5.5.:.` ;.4.2.3.*.h & . X $ 6.",
+"6.N / _ ) ! Q ^ ^ / / ) _ X.o.| } } } { { / W E Y F u @ X o $ 6.",
+"6.N W ! Q W E T T Y Y I Y P I U I I Y P P P J F Z M t # . X $ 6.",
+"6.M W Q W T Y Y Y P I P P I J I J P J P J H H F D n t # X X $ 6.",
+"6.M T E T Y P P J I J P J P J J P J J H G F F D V b r @ X . & 6.",
+"6.C P Y I J P J P J J J J G H G H F H F H F D Z M g t $ . y 6.",
+"6.C J J P J J H J F H F F H F H F G F F D D Z C N h t $ = R 6.",
+"6.B P I J H J F F F F F F F F D F D D D D A Z C N b t # X B 6.6.",
+"6.F b C B C Z C V C V V C N V C C Z Z Z Z A Z C N n t O p 6.6.6.",
+"6.^ d - - : > , < 1 2 3 3 4 5 6 7 7 9 9 0 q w 0 0 6 > e ( 6.6.6.",
+"6.6.6.G 7 O X O O + O X o O + o O O + O O o O . o d ( 6.6.6.6.",
+"6.6.6.6.( B e q q 9 8 7 5 5 3 4 2 , < ; & & % $ , D 6.6.6.6.6.6."
+};
diff --git a/kommander/editor/pics/large/progress.xpm b/kommander/editor/pics/large/progress.xpm
new file mode 100644
index 00000000..924ef598
--- /dev/null
+++ b/kommander/editor/pics/large/progress.xpm
@@ -0,0 +1,145 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 107 2",
+" c #000000002929",
+". c #000008082929",
+"X c #080808082929",
+"o c #000000003131",
+"O c #000008083131",
+"+ c #000008083939",
+"@ c #080808083131",
+"# c #080808083939",
+"$ c #080810103131",
+"% c #080810103939",
+"& c #101010103131",
+"* c #101010103939",
+"= c #101018183131",
+"- c #101018183939",
+"; c #181818183939",
+": c #181821213939",
+"> c #101010104242",
+", c #101018184242",
+"< c #181818184242",
+"1 c #181818184a4a",
+"2 c #181821214242",
+"3 c #212121214a4a",
+"4 c #212129294a4a",
+"5 c #212121215252",
+"6 c #212129295252",
+"7 c #292929295252",
+"8 c #292931314a4a",
+"9 c #313131314a4a",
+"0 c #313131315252",
+"q c #393939395a5a",
+"w c #313139396363",
+"e c #393939396363",
+"r c #393942426363",
+"t c #393942426b6b",
+"y c #424242425252",
+"u c #424242426363",
+"i c #424242426b6b",
+"p c #42424a4a6363",
+"a c #4a4a52526363",
+"s c #4a4a52526b6b",
+"d c #525252527373",
+"f c #52525a5a7b7b",
+"g c #10101010cece",
+"h c #10101010d6d6",
+"j c #10101818dede",
+"k c #00000000e7e7",
+"l c #08080808f7f7",
+"z c #08081010f7f7",
+"x c #08081010ffff",
+"c c #10101818efef",
+"v c #18181818e7e7",
+"b c #18181818f7f7",
+"n c #18181818ffff",
+"m c #18182121ffff",
+"M c #21212121e7e7",
+"N c #21212121efef",
+"B c #21212929efef",
+"V c #21212929f7f7",
+"C c #21212929ffff",
+"Z c #29292929f7f7",
+"A c #29293131ffff",
+"S c #5a5a63638484",
+"D c #42424242ffff",
+"F c #42424a4affff",
+"G c #4a4a5252ffff",
+"H c #7b7b8c8cb5b5",
+"J c #94949c9c9c9c",
+"K c Gray61",
+"L c #8c8c9494a5a5",
+"P c #9c9ca5a5adad",
+"I c #a5a5a5a5a5a5",
+"U c #a5a5a5a5adad",
+"Y c #84848c8ccece",
+"T c #84848c8cd6d6",
+"R c #84849494c6c6",
+"E c #8c8c9494cece",
+"W c #8c8c9494d6d6",
+"Q c #94949494dede",
+"! c #9494a5a5cece",
+"~ c #9c9ca5a5d6d6",
+"^ c #9c9cadadd6d6",
+"/ c #adadbdbdc6c6",
+"( c #adadb5b5dede",
+") c #adadbdbddede",
+"_ c #a5a5adade7e7",
+"` c #adadbdbde7e7",
+"' c #b5b5c6c6c6c6",
+"] c #b5b5c6c6cece",
+"[ c #bdbdc6c6cece",
+"{ c #bdbdcececece",
+"} c #b5b5c6c6e7e7",
+"| c #bdbdcecee7e7",
+" . c #bdbdceceefef",
+".. c #bdbdd6d6efef",
+"X. c #c0c0c0c0c0c0",
+"o. c #cecededeefef",
+"O. c #cecee7e7efef",
+"+. c #d6d6efeff7f7",
+"@. c #e7e7efeff7f7",
+"#. c #e7e7f7f7f7f7",
+"$. c #e7e7fffff7f7",
+"%. c #e7e7ffffffff",
+"&. c #efeff7f7f7f7",
+"*. c #efeff7f7ffff",
+"=. c #efefffffffff",
+"-. c #f7f7ffffffff",
+";. c None",
+/* pixels */
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+"U s q 7 5 3 1 < % # # % * # > # , > > > , > , > % * > > < 3 u I ",
+"q o $ = : - : : : < : : : ; : : : ; ; ; ; - ; ; * - & O o q ",
+"1 9 H E R ' ~ E E [ ! T E { ! Y E { { { { { { { { { { ' s 4 ",
+", . d D A M ( G C M } G C V .F n V +.$.#.#.$.#.#.$.#.$.-.P o 2 ",
+"* . f m x h ^ C l j ) A l v } C l v o.#.#.#.#.#.#.#.#.#.%./ o < ",
+"> X f C l h ^ A l j ) Z l v ) C l v O.$.#.+.#.+.#.#.+.#.=./ O < ",
+"> S V z h ! A z h ) A z j } Z z j o.#.#.#.#.#.+.#.#.#.=.] @ ; ",
+"* X S n z h ! A l h ) Z l v ) Z l v o.$.#.+.#.#.#.#.#.#.=.[ O < ",
+"% X S C z g ^ C l h ) Z z j } V l j O.#.#.#.#.+.#.#.+.$.=.] O < ",
+"* O S b z h ^ Z z h ) Z z j } V l M o.$.#.+.#.#.#.#.#.#.=.[ O ; ",
+"* X f V z g ! A z h ) Z l j } V l j o.$.#.#.#.$.+.#.#.#.=.] # - ",
+"> X f b z h ^ V l h ) Z l j } V l v O.$.#.#.#.#.#.$.#.#.=.[ O ; ",
+"* . f c k g ) N k g | B k j ..N k j +.&.%.$.$.%.$.#.$.%.-.' o < ",
+"> a E W ^ @._ Q ( *.` Q ( *.` Q ( *.=.=.=.=.#.=.%.#.#.&.L o 2 ",
+"8 o + 0 p p r s s s i s s s u s s s i r u r r t r e e w 6 + o 9 ",
+"J y 8 ; ; * & @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ & @ & & ; ; ; 8 y K ",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;."
+};
diff --git a/kommander/editor/pics/large/project.xpm b/kommander/editor/pics/large/project.xpm
new file mode 100644
index 00000000..68040ba4
--- /dev/null
+++ b/kommander/editor/pics/large/project.xpm
@@ -0,0 +1,50 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 12 1",
+" c Gray0",
+". c Gray19",
+"X c #585858",
+"o c #ffa858",
+"O c #808080",
+"+ c #a0a0a4",
+"@ c #ffdca8",
+"# c #c0c0c0",
+"$ c gainsboro",
+"% c #ffffc0",
+"& c Gray100",
+"* c None",
+/* pixels */
+"********************************",
+"*************** **************",
+"************** #&# *************",
+"************** $&$ *************",
+"******* ***. ### .*** .******",
+"****** $&# X O$&&&$O X #&$ *****",
+"***** +$$++$&#OXXXO#&$$+$$+ ****",
+"***** X#+$&+XXOO+OOXX+&$+#X ****",
+"***** XX#$OXOoooo@oo+XO$#XX ****",
+"****** $OX+oo@o@o@@o+XO$ *****",
+"****** $+O+oo@o@@@@%@@+X+$ *****",
+"**X O$O+oo@@@X.X@@%@o+O#O X*",
+"** $&$+$Ooo@o@X.+.X@@%@oO$+$&$ *",
+"* #$$#+$Oo@@%@O#*#O@%@%oO&+#&$# ",
+"* +$$$+$+oo%@%@O.O@%&%@o+$+$$$+ ",
+"* .OO+X#$Oo@%@%@@@&&%%@O#$X+OO. ",
+"** XXX.O##Oo@%%%&&&%%@O+&+.XXX *",
+"*** +$+Oo@%%%&%@@O#$# **",
+"****** OO#$#O+o@@@o++$&#OO *****",
+"***** X#+O#$&#+OOO+$&$#O+#O ****",
+"*****.$&$+OO#$$$$&$$#+O+$&$ ****",
+"**** $$&&$O.XO+$$$+OX.O$$&$$.***",
+"**** +$$+OX ..OOOOO.. XO+$$+ ***",
+"**** X+OOX **.#$$$#.** XOO+X ***",
+"***** XX *** O$&&O *** XX ****",
+"****** ***** O$&$O ***** *****",
+"************** +++ *************",
+"************** XXX *************",
+"*************** **************",
+"********************************",
+"********************************",
+"********************************"
+};
diff --git a/kommander/editor/pics/large/pushbutton.xpm b/kommander/editor/pics/large/pushbutton.xpm
new file mode 100644
index 00000000..5ad0bcd4
--- /dev/null
+++ b/kommander/editor/pics/large/pushbutton.xpm
@@ -0,0 +1,72 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 34 1",
+" c #070707070707",
+". c #0e0e0e0e0e0e",
+"X c Gray9",
+"o c Gray12",
+"O c #272727272727",
+"+ c #2f2f2f2f2f2f",
+"@ c #373737373737",
+"# c #3f3f3f3f3f3f",
+"$ c #464646464646",
+"% c Gray31",
+"& c Gray34",
+"* c #5f5f5f5f5f5f",
+"= c #676767676767",
+"- c #6f6f6f6f6f6f",
+"; c #777777777777",
+": c Gray50",
+"> c Gray53",
+", c Gray56",
+"< c #979797979797",
+"1 c #9f9f9f9f9f9f",
+"2 c #a7a7a7a7a7a7",
+"3 c #afafafafafaf",
+"4 c #b7b7b7b7b7b7",
+"5 c Gray75",
+"6 c #c0c0c0c0c0c0",
+"7 c #c5c5c5c5c5c5",
+"8 c Gray81",
+"9 c Gray84",
+"0 c #dfdfdfdfdfdf",
+"q c #e7e7e7e7e7e7",
+"w c #efefefefefef",
+"e c #f6f6f6f6f6f6",
+"r c Gray100",
+"t c None",
+/* pixels */
+"tttttttttttttttttttttttttttttttt",
+"tttttttttttttttttttttttttttttttt",
+"tttttttttttttttttttttttttttttttt",
+"tttttttttttttttttttttttttttttttt",
+"tt5332332323333323222223211235tt",
+"t48qqwwwwqwqqqq00000999887743<2t",
+"47rreewwwweewwqqq0009987554321-3",
+"17q97555444444455433332222111<-;",
+"145533333333222222221211211<<,-*",
+"<34322221:;>12111<,<11111>><<,-*",
+",333222:o o-111- -2111# &1<,;&",
+"123222= o*;=O &21- =111# &<<,>;%",
+"13222> O<2121@ :2- =21% %1<<,,-$",
+"<2323% ;21<11> $3- =2* $1<<<,>;%",
+"13222@ <1<1<11Oo1- -; @1<<<<,>;%",
+"<2221oX<11<1<1#.1- $. %1<<<,,>;%",
+"<2221Xo<1<<<11# <- +# ;1<<,,>-%",
+"<2221O <<1<1<1+X1- o,,XX,<<<,>;%",
+",2222$ :2<<<1,.@2- *21= %1<,,>-%",
+",2211> O<1111% -2- *1<1+ -1,,>;$",
+"122112* +:,:$ @<1- *1<<> X><,>-%",
+"<121<<1= #<<1- &1<<1& +,,>-%",
+"<1111<<1>*%&:<<<<>=:<,,<,==,,>=&",
+"<12<<<<,<<1<<,<,,<<<,,<,,<<,>>*&",
+"1,1<<<,,,,,,,,,>,>,,,,,,,,,,>>&-",
+"4:,,,>,>,>>:>:>::>::::>>>:>>>-#1",
+"t<====-=========*=====*===*&&$;5",
+"tt2:*%$####@@@@@#@@@#@##$$%*;1tt",
+"tttttttttttttttttttttttttttttttt",
+"tttttttttttttttttttttttttttttttt",
+"tttttttttttttttttttttttttttttttt",
+"tttttttttttttttttttttttttttttttt"
+};
diff --git a/kommander/editor/pics/large/radiobutton.xpm b/kommander/editor/pics/large/radiobutton.xpm
new file mode 100644
index 00000000..17ef6339
--- /dev/null
+++ b/kommander/editor/pics/large/radiobutton.xpm
@@ -0,0 +1,67 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 29 1",
+" c #2a2a2a2a2a2a",
+". c #373737373737",
+"X c #3f3f3f3f3f3f",
+"o c Gray28",
+"O c Gray31",
+"+ c Gray34",
+"@ c #5f5f5f5f5f5f",
+"# c Gray40",
+"$ c Gray43",
+"% c #777777777777",
+"& c Gray50",
+"* c Gray53",
+"= c #8e8e8e8e8e8e",
+"- c #979797979797",
+"; c #989898989898",
+": c #a4a4a4a4a4a4",
+"> c #afafafafafaf",
+", c #b4b4b4b4b4b4",
+"< c Gray75",
+"1 c #c0c0c0c0c0c0",
+"2 c #c6c6c6c6c6c6",
+"3 c Gray81",
+"4 c #d7d7d7d7d7d7",
+"5 c #dfdfdfdfdfdf",
+"6 c #e2e2e2e2e2e2",
+"7 c #efefefefefef",
+"8 c Gray96",
+"9 c Gray100",
+"0 c None",
+/* pixels */
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"000000000000>=%###*>000000000000",
+"0000000000,*+O@%%#oo%,0000000000",
+"000000000,#.%489996:o+>000000000",
+"00000000,#X<94:*%=,96#O,00000000",
+"00000000&X<9:#+O++O#58@$00000000",
+"0000000>X*9-+++++O+o+73X:0000000",
+"0000000&o5<+++++O+O+X*9*%0000000",
+"0000000@$9%++++O+OOOoo8<+0000000",
+"0000000o=7@+O+OOOOOOOX45o0000000",
+"0000000X-6@O+OOOOOOoo.36O0000000",
+"0000000O*8+OOOOOOOOOo.75+0000000",
+"0000000%@9*oOOOOOooo.@9>#0000000",
+"0000000:.25XoOOoooOX 39$-0000000",
+"0000000<##9<X.oooo :9,@<0000000",
+"00000000>o=94$X. .@394O:00000000",
+"000000000:o*79733799<O;000000000",
+"0000000000>@O-3774>$O:0000000000",
+"00000000000<;$OOOO@-<00000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000",
+"00000000000000000000000000000000"
+};
diff --git a/kommander/editor/pics/large/redo.xpm b/kommander/editor/pics/large/redo.xpm
new file mode 100644
index 00000000..1ee1f563
--- /dev/null
+++ b/kommander/editor/pics/large/redo.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 4 1",
+" c #000000008080",
+". c #808080808080",
+"X c #c0c0c0c0c0c0",
+"o c None",
+/* pixels */
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"ooooooo. ooooooooooooooo",
+"oooooo. ooooooooo oooo",
+"ooooo. ooooooo ooooooo oooo",
+"oooo. ooooooooo oooo oooo",
+"oooo ooooooooooo oo oooo",
+"oooo oooooooooooooo oooo",
+"oooo ooooooooooooooo oooo",
+"oooo ooooooooooooooo oooo",
+"oooo oooooooooooooo oooo",
+"oooo ooooooooooooo oooo",
+"oooo. ooooooooooo oooo",
+"ooooo. ooooooooo oooo",
+"oooooo .ooooooooooooooooooooooo",
+"ooooooo .oooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo"
+};
diff --git a/kommander/editor/pics/large/right.xpm b/kommander/editor/pics/large/right.xpm
new file mode 100644
index 00000000..a8410132
--- /dev/null
+++ b/kommander/editor/pics/large/right.xpm
@@ -0,0 +1,181 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 143 2",
+" c #00001818e7e7",
+". c #00001818efef",
+"X c #00001818ffff",
+"o c #10102121d6d6",
+"O c #10102121dede",
+"+ c #10102929d6d6",
+"@ c #18183131cece",
+"# c #00002121efef",
+"$ c #00002121ffff",
+"% c #00002929ffff",
+"& c #08082929ffff",
+"* c #08083131ffff",
+"= c #10102929e7e7",
+"- c #10103939f7f7",
+"; c #10103939ffff",
+": c #21213131c6c6",
+"> c #21213131cece",
+", c #21213939dede",
+"< c #29293939dede",
+"1 c #31314242bdbd",
+"2 c #10104242ffff",
+"3 c #18184242ffff",
+"4 c #21214242dede",
+"5 c #39394a4ac6c6",
+"6 c #39395252d6d6",
+"7 c #21214242e7e7",
+"8 c #21214a4aefef",
+"9 c #29294a4ae7e7",
+"0 c #21214a4affff",
+"q c #21215252ffff",
+"w c #29295252ffff",
+"e c #29295a5affff",
+"r c #39395a5ae7e7",
+"t c #31315a5affff",
+"y c #31316363ffff",
+"u c #39396363f7f7",
+"i c #39396363ffff",
+"p c #39396b6bffff",
+"a c #42424a4ab5b5",
+"s c #42425252b5b5",
+"d c #52525a5abdbd",
+"f c #52526b6bbdbd",
+"g c #5a5a6363bdbd",
+"h c #5a5a6b6bbdbd",
+"j c #63636b6bb5b5",
+"k c #63636b6bbdbd",
+"l c #6b6b7373b5b5",
+"z c #6b6b7373bdbd",
+"x c #73737b7bb5b5",
+"c c #42425a5acece",
+"v c #4a4a6363cece",
+"b c #42426363dede",
+"n c #4a4a7373dede",
+"m c #52526b6bc6c6",
+"M c #52526b6bcece",
+"N c #42426b6be7e7",
+"B c #42426b6befef",
+"V c #4a4a6b6be7e7",
+"C c #42426b6bffff",
+"Z c #42427373ffff",
+"A c #4a4a7373ffff",
+"S c #4a4a7b7bffff",
+"D c #52527b7be7e7",
+"F c #5a5a7b7bf7f7",
+"G c #7b7b8484b5b5",
+"H c #7b7b8c8cbdbd",
+"J c #52528484ffff",
+"K c #52528c8cffff",
+"L c #5a5a8484ffff",
+"P c #5a5a8c8cffff",
+"I c #73738484cece",
+"U c #7b7b9494c6c6",
+"Y c #73739494dede",
+"T c #7b7b9494d6d6",
+"R c #63638484efef",
+"E c #63638c8cffff",
+"W c #63639494ffff",
+"Q c #63639c9cffff",
+"! c #6b6b9c9cffff",
+"~ c #73738c8ce7e7",
+"^ c #73739494efef",
+"/ c #73739c9cf7f7",
+"( c #73739c9cffff",
+") c #7373a5a5ffff",
+"_ c #7b7ba5a5ffff",
+"` c #7b7badadffff",
+"' c #7b7bb5b5ffff",
+"] c #84848c8ca5a5",
+"[ c #84848c8cadad",
+"{ c #8c8c8c8cadad",
+"} c #84849494b5b5",
+"| c #94949494a5a5",
+" . c #94949494adad",
+".. c #94949c9cadad",
+"X. c #9c9c9c9cadad",
+"o. c #9c9ca5a5adad",
+"O. c #a5a5a5a5a5a5",
+"+. c #a5a5a5a5adad",
+"@. c Gray68",
+"#. c #a5a5a5a5b5b5",
+"$. c #a5a5adadb5b5",
+"%. c #adadadadb5b5",
+"&. c #adadadadbdbd",
+"*. c Gray71",
+"=. c #b5b5b5b5bdbd",
+"-. c Gray74",
+";. c #84849c9cd6d6",
+":. c #8c8ca5a5cece",
+">. c #8484adadffff",
+",. c #8484b5b5ffff",
+"<. c #8484bdbdffff",
+"1. c #8c8cb5b5ffff",
+"2. c #8c8cbdbdffff",
+"3. c #9494adade7e7",
+"4. c #b5b5b5b5c6c6",
+"5. c #b5b5bdbdc6c6",
+"6. c #bdbdbdbdc6c6",
+"7. c #9494c6c6ffff",
+"8. c #9494ceceffff",
+"9. c #9c9cc6c6ffff",
+"0. c #9c9cceceffff",
+"q. c #a5a5ceceffff",
+"w. c #a5a5d6d6ffff",
+"e. c #adaddedeffff",
+"r. c #b5b5dedeffff",
+"t. c #bdbddedeffff",
+"y. c #adade7e7ffff",
+"u. c #b5b5efefffff",
+"i. c #bdbde7e7ffff",
+"p. c #bdbdefefffff",
+"a. c #c0c0c0c0c0c0",
+"s. c #cecee7e7ffff",
+"d. c #c6c6f7f7ffff",
+"f. c #cecef7f7ffff",
+"g. c #ceceffffffff",
+"h. c #d6d6efefffff",
+"j. c #dedeefefffff",
+"k. c #d6d6f7f7ffff",
+"l. c #d6d6ffffffff",
+"z. c #e7e7ffffffff",
+"x. c #efefffffffff",
+"c. c #f7f7ffffffff",
+"v. c None",
+/* pixels */
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.-.Y N x -.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.O.j.r.p k %.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.X.h.l.0.Z v &.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.O.r.e.w.0.Q 8 x v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.o.e.8.0.w.0.W q [ -.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.o.7.7.7.7.0.0.) u z =.v.v.v.v.",
+"v.v.-.4.5.-.-.v.v.v.v.v.v.v.v.v.v.X.,.2.7.2.7.0.0.' Z c $.v.v.v.",
+"@.} ~ F D n M I H .4.-.-.v.v.v.#.m ` 2.1.2.2.7.7.7.<.p 4 #.v.v.",
+"f q.c.x.z.h.t.q.1._ ^ Y U T ;.:.3.1.,.,.,.,.1.,.1.2.7.>.Z 9 o.-.",
+"N y.g.d.p.i.r.p.d.d.f.k.k.k.j.x.x.s.>.` ,.,.,.,.,.,.,.2.2.K - { ",
+"B 0.u.w.0.0.0.7.9.0.7.0.w.e.e.e.0.2.,.,.` >.,.,.,.` ` ` ` _ y c ",
+"V 8.e.0.7.2.2.2.2.2.<.1.,.,.,.,.,.,.,.` >.' >.` ` ` ) ) ! ! Z 9 ",
+"V 2.w.7.1.,.>.` ` ` _ ` ` ` ` ` ` ` ` ` ` ` ` ` _ ) ! E J C 3 , ",
+"b ' 0.2.` ` ` ) ) ( ) ( ! ! ! ! ( ` >.` ` ` ` ) ) ! W S p 0 X 5 ",
+"6 Q ,.) W E L J S Z C y w 3 3 3 e L ` _ ` ` _ ) ! W J e 3 $ + .",
+"l q Z t 0 2 * $ $ # # O > 1 a a = ; ) ` ) ) ( ! W Z 0 * X + #.v.",
+"*.k = # O > a d G | &.-.-.-.-.#.s Q _ ) ! ! W A 0 * X o ] v.v.",
+"v.v.+.| ..=.-.-.v.v.v.v.v.v.v.v.v.+./ ( ! W P y 3 & X 5 #.-.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.-.^ P L J y ; % . s *.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.-.R J S t ; $ X g -.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.6.D i e ; % = j *.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.-.r ; * X @ +.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.-.7 $ X : X.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.-.h < h %.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.",
+"v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v."
+};
diff --git a/kommander/editor/pics/large/slider.xpm b/kommander/editor/pics/large/slider.xpm
new file mode 100644
index 00000000..9941817b
--- /dev/null
+++ b/kommander/editor/pics/large/slider.xpm
@@ -0,0 +1,133 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 95 2",
+" c #060606060202",
+". c #000000000d0d",
+"X c #0f0f0e0e0000",
+"o c Gray6",
+"O c #000000001717",
+"+ c #1c1c1c1c0e0e",
+"@ c #151515151515",
+"# c #010101012b2b",
+"$ c #000000003434",
+"% c #000000003a3a",
+"& c #121214143e3e",
+"* c #212121211414",
+"= c #262626261d1d",
+"- c #2d2d2d2d2222",
+"; c #373737372e2e",
+": c #353535353535",
+"> c Gray23",
+", c #010101015353",
+"< c #000000006767",
+"1 c #020202026e6e",
+"2 c #000000007f7f",
+"3 c #434343434343",
+"4 c #434344444a4a",
+"5 c #4c4c4b4b4545",
+"6 c Gray33",
+"7 c #6e6e6d6d6767",
+"8 c #000000008484",
+"9 c #000000008e8e",
+"0 c #000000009292",
+"q c #000000009f9f",
+"w c #00000000a4a4",
+"e c #00000000acac",
+"r c #03030303b7b7",
+"t c #00000000c6c6",
+"y c #00000000cece",
+"u c #00000000d7d7",
+"i c #00000000dfdf",
+"p c #09090d0ddada",
+"a c #0c0c1111dcdc",
+"s c #1b1b1d1dc1c1",
+"d c #1a1a1b1bd6d6",
+"f c #01010101e1e1",
+"g c #01010101e8e8",
+"h c #06060909e0e0",
+"j c #00000000f2f2",
+"k c #05050606fdfd",
+"l c #07070909ffff",
+"z c #09090c0cffff",
+"x c #0e0e1313ffff",
+"c c #14141d1de0e0",
+"v c #13131515ffff",
+"b c #1b1b1f1fffff",
+"n c #1d1d2b2beaea",
+"m c #15152323ffff",
+"M c #1c1c2323ffff",
+"N c #37373838e6e6",
+"B c #35353636ffff",
+"V c #3d3d4d4dcbcb",
+"C c #39394f4fd6d6",
+"Z c #28284141eded",
+"A c #3a3a5353ffff",
+"S c #45454f4f8d8d",
+"D c #54545c5c8080",
+"F c #5e5e67678080",
+"G c #61616a6a8585",
+"H c #59597373caca",
+"J c #4b4b6b6beded",
+"K c #46466161f1f1",
+"L c #45456767ffff",
+"P c #52526c6cf1f1",
+"I c #50506f6fffff",
+"U c #52527272ffff",
+"Y c Gray52",
+"T c Gray56",
+"R c Gray58",
+"E c #9d9d9d9d9d9d",
+"W c #90909797b8b8",
+"Q c #afafafafafaf",
+"! c #b7b7b7b7b7b7",
+"~ c #bebebebebebe",
+"^ c #84849a9ad4d4",
+"/ c #8d8d9898ffff",
+"( c #bfbfc7c7e4e4",
+") c #c0c0c0c0c0c0",
+"_ c #c5c5c5c5c5c5",
+"` c Gray81",
+"' c #d0d0d0d0d0d0",
+"] c #c0c0c4c4ffff",
+"[ c #c9c9d0d0ffff",
+"{ c #d6d6ddddffff",
+"} c #dadae2e2ffff",
+"| c #e6e6e6e6e6e6",
+" . c Gray95",
+".. c Gray100",
+"X. c None",
+/* pixels */
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.",
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.",
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.",
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.",
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.",
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.",
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.",
+"E W ^ H P P P P U P L K I J J J C C J P P K P P K A Z A Z C H R ",
+"H m k k z z z z z k k k k k k k k k k k k k k k k k k k k k k s ",
+"N k k k k k f w 0 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 w i k k k k k s ",
+"c k k k k k , & k k k k k p ",
+"n k k k k k $ o @ @ @ @ @ @ o o o o o o o o o 4 b k k k k p ",
+"n k k k k k $ T ~ ` ` ` ` ` ! | . . .| . . .| .B k k k k f ",
+"Z k k k e j # = ` ! ! ! Q Q Q R T .................B r t k k p ",
+"d k g , . g $ ; _ Q Q Q Q Q ! T T ................B 1 . w k h ",
+"c t # O g # ; ` Q Q Q Q Q Q R 6 ................B 2 2 y ",
+"d < O g $ ; _ ! Q Q Q E ! T 5 ................B 2 1 ",
+"n k 2 j % - _ Q Q Q Q Q Q R 3 ................B 2 , t ",
+"N k k r % g , * ~ Q Q Q Q Q Q R > ................B 2 O q k h ",
+"J k k k j k , + ! E E R R R E Y : ................B f i k k a ",
+"V k k k k k , @ ' 3 @ @ @ @ o . > ................B k k k k p ",
+"s k k k k k 1 X ..7 5 ................M k k k k p ",
+"V k k k k k p S [ ( F F F F D D D W } } { { { [ ] / l k k k k s ",
+"G k k k k k k x k x M b M M b b b v z z z z l k k k k k k k k s ",
+"E s s u p p f p p p p p p p p p p p p p p p p p p y y y s s s G ",
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.",
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.",
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.",
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.",
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.",
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.",
+"X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X."
+};
diff --git a/kommander/editor/pics/large/spacer.xpm b/kommander/editor/pics/large/spacer.xpm
new file mode 100644
index 00000000..cd4ec08e
--- /dev/null
+++ b/kommander/editor/pics/large/spacer.xpm
@@ -0,0 +1,248 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 210 2",
+" c Gray0",
+". c #080800000000",
+"X c #101000000000",
+"o c #101008080808",
+"O c #181800000000",
+"+ c #181808080000",
+"@ c #181808080808",
+"# c #101010100808",
+"$ c #181810101010",
+"% c #212108080000",
+"& c #212108080808",
+"* c #292900000000",
+"= c #292908080808",
+"- c #212110100808",
+"; c #292910100808",
+": c #212110101010",
+"> c #212118181818",
+", c #292910101010",
+"< c #292918181010",
+"1 c #292918181818",
+"2 c #313108080000",
+"3 c #393908080000",
+"4 c #313110101010",
+"5 c #313118181010",
+"6 c #313118181818",
+"7 c #393921211818",
+"8 c Gray16",
+"9 c #313121212121",
+"0 c #313129292929",
+"q c #393921212121",
+"w c #393929292929",
+"e c #424208080000",
+"r c #4a4a08080000",
+"t c #5a5a08080000",
+"y c #5a5a10100000",
+"u c #424221211818",
+"i c #424229292121",
+"p c #424229292929",
+"a c #4a4a29292929",
+"s c #424231313131",
+"d c #424239393939",
+"f c #4a4a39393939",
+"g c #525231313131",
+"h c #525239393131",
+"j c #525239393939",
+"k c #636318180808",
+"l c #6b6b10100000",
+"z c #737310100000",
+"x c #737318180808",
+"c c #7b7b18180808",
+"v c #7b7b31312121",
+"b c #636342423939",
+"n c #6b6b4a4a3131",
+"m c #737342422929",
+"M c Gray26",
+"N c Gray29",
+"B c #525242424242",
+"V c #52524a4a4a4a",
+"C c #5a5a42424242",
+"Z c #5a5a5a5a5a5a",
+"A c #636342424242",
+"S c #63634a4a4242",
+"D c #6b6b4a4a4a4a",
+"F c #636352524a4a",
+"G c #6b6b52524242",
+"H c #6b6b5a5a4a4a",
+"J c #63635a5a5a5a",
+"K c #6b6b52525252",
+"L c #737352524a4a",
+"P c #73735a5a4a4a",
+"I c #7b7b52524242",
+"U c #73735a5a5252",
+"Y c #6b6b63634a4a",
+"T c #7b7b63635a5a",
+"R c Gray39",
+"E c #6b6b63636363",
+"W c Gray42",
+"Q c #7b7b6b6b6b6b",
+"! c Gray45",
+"~ c #7b7b73737373",
+"^ c #848410100000",
+"/ c #848418180808",
+"( c #8c8c18180808",
+") c #949418180808",
+"_ c #8c8c21211010",
+"` c #8c8c29291818",
+"' c #949421211010",
+"] c #949429291818",
+"[ c #949431311818",
+"{ c #8c8c39392929",
+"} c #949439392929",
+"| c #a5a521210808",
+" . c #adad21210808",
+".. c #a5a529291010",
+"X. c #b5b521210808",
+"o. c #b5b529291010",
+"O. c #b5b531311818",
+"+. c #bdbd31311818",
+"@. c #b5b539392121",
+"#. c #8c8c42422929",
+"$. c #84844a4a3131",
+"%. c #b5b542422929",
+"&. c #b5b54a4a3131",
+"*. c #b5b552523939",
+"=. c #b5b55a5a3939",
+"-. c #bdbd52523131",
+";. c #94944a4a4242",
+":. c #9c9c52524242",
+">. c #9c9c63635a5a",
+",. c #84846b6b6363",
+"<. c #8c8c6b6b6363",
+"1. c #949473736b6b",
+"2. c #949473737373",
+"3. c #9c9c7b7b7373",
+"4. c #9c9c7b7b7b7b",
+"5. c #b5b563635a5a",
+"6. c #b5b573736363",
+"7. c #c6c621210808",
+"8. c #cece39391818",
+"9. c #d6d629291010",
+"0. c #d6d631311010",
+"q. c #dede31311010",
+"w. c #f7f739391818",
+"e. c #ffff39391010",
+"r. c #e7e739392121",
+"t. c #c6c642422121",
+"y. c #dede42422929",
+"u. c #ffff42422121",
+"i. c #ffff4a4a2121",
+"p. c #ffff52522929",
+"a. c #ffff5a5a3939",
+"s. c #ffff63633131",
+"d. c #ffff63633939",
+"f. c #c6c663635252",
+"g. c #d6d663634a4a",
+"h. c #d6d66b6b5252",
+"j. c #efef63634a4a",
+"k. c #e7e76b6b5252",
+"l. c #efef6b6b5252",
+"z. c #e7e773735a5a",
+"x. c #ffff63634242",
+"c. c #ffff73734a4a",
+"v. c #ffff7b7b4a4a",
+"b. c #efef7b7b6363",
+"n. c #9c9c84847b7b",
+"m. c #cece84847373",
+"M. c #d6d684846b6b",
+"N. c #dede84846b6b",
+"B. c #d6d684847373",
+"V. c #dede94947373",
+"C. c #ffff84845a5a",
+"Z. c #ffff8c8c5a5a",
+"A. c #efef8c8c6b6b",
+"S. c #e7e79c9c7b7b",
+"D. c #ffff8c8c6b6b",
+"F. c #f7f794947373",
+"G. c #848484848484",
+"H. c #8c8c84848484",
+"J. c Gray55",
+"K. c Gray58",
+"L. c #9c9c94949494",
+"P. c Gray61",
+"I. c #a5a584848484",
+"U. c #a5a58c8c8484",
+"Y. c #a5a58c8c8c8c",
+"T. c #adad8c8c8c8c",
+"R. c #a5a59c9c9c9c",
+"E. c #b5b594948c8c",
+"W. c #b5b594949494",
+"Q. c #bdbd9c9c9494",
+"!. c #a5a5a5a5a5a5",
+"~. c Gray68",
+"^. c #b5b5adada5a5",
+"/. c #b5b5adadadad",
+"(. c #bdbdadada5a5",
+"). c #b5b5b5b5adad",
+"_. c #bdbdb5b5adad",
+"`. c Gray71",
+"'. c #bdbdb5b5b5b5",
+"]. c Gray74",
+"[. c #c6c68c8c8484",
+"{. c #ceceadada5a5",
+"}. c #dedebdbdb5b5",
+"|. c #e7e7a5a58484",
+" X c #e7e7bdbd9c9c",
+".X c #efefb5b59494",
+"XX c #f7f7a5a58484",
+"oX c #f7f7adad8c8c",
+"OX c #ffffadad8484",
+"+X c #ffffbdbd8c8c",
+"@X c #f7f7bdbd9c9c",
+"#X c #f7f7c6c69c9c",
+"$X c #ffffc6c69c9c",
+"%X c #efefc6c6a5a5",
+"&X c #f7f7ceceadad",
+"*X c #ffffd6d6a5a5",
+"=X c #ffffd6d6adad",
+"-X c #f7f7d6d6b5b5",
+";X c #f7f7dedebdbd",
+":X c #ffffdedeb5b5",
+">X c #ffffe7e7b5b5",
+",X c #ffffe7e7bdbd",
+"<X c #c0c0c0c0c0c0",
+"1X c #c6c6c6c6c6c6",
+"2X c #f7f7efefc6c6",
+"3X c #f7f7f7f7cece",
+"4X c #fffff7f7c6c6",
+"5X c #ffffffffd6d6",
+"6X c #ffffffffdede",
+"7X c None",
+/* pixels */
+"7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X",
+"7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X",
+"7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X",
+"7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X",
+"/.y.+.L.7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7XT.0.r.(.",
+"[.e.X.E 7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X>.q.e.[.",
+"m.i...N 1X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X].;.0.i.B.",
+"N.d.[ w ].7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X].{ 8.s.M.",
+"V.Z.#.> ].7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X].` t.v.V.",
+"|.OX$.$ '.7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X_._ -.F.S.",
+" X*XI o `.7X^.H.K.].7X7X7X7X7X!.K.).7X7X7X7X7X7X!.!.7X`.( -.+X.X",
+";X4XP o `.R.p & X V ].7X7X7XH.q % $ P.7X7X7X].Q 5 + R ^.' *.*X%X",
+"3X5XH @ L.j 5 . R 1X7XR.i - . > `.7X7XH.u & . D ' =.:X&X",
+"3X6XY o C L : . . . . ~.].K b + . . ! 7X`.C g . . O ^ =.>X-X",
+"2X5XH . T Q.< X + & X W !.1.4.& . + O > ].H.3.T X X + . t *.=X&X",
+"-X,XG X Q.I.X ! B S <.1 B {.,.o M 5 T i W F }.U X @ h C y &.$X@X",
+"#X$Xn 4 <.q > ].K.S 3.& a 2.< d `.s E.A X D 4.- Z W T W.k %.OXoX",
+"XXOXm , q . W 7X].w = % i q . K.7X~ 4 ; = h 7 X ~.`.6 p e %.D.F.",
+"A.C.m X X o ~.7X7XH.O & ; . 0 ].7X`.< O ; , . Z 7X7XJ X 2 @.c.b.",
+"z.x.v G.7X7X7X].M X . # ~.7X7X7XJ.X X . 8 `.7X7X`.8 * O.a.l.",
+"k.p.` H.7X7X7X7X7X'.~ R !.7X7X7X7X1XJ.V R `.7X7X7X7XR.y +.i.j.",
+"h.u./ o /.7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X^.' o.w.g.",
+"6.q./ o ~.7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X_._ .9.f.",
+"6.7.x @ `.7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X`.' ..X.5.",
+"4.| l : ].7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X].] ) ) 1.",
+"Y.z y 9 ].7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X].} c z n.",
+"!.e 3 f ].7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X1X:.r 3 L.",
+"].s > ~ 7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7XU.p f `.",
+"7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X",
+"7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X",
+"7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X",
+"7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X7X"
+};
diff --git a/kommander/editor/pics/large/spinbox.xpm b/kommander/editor/pics/large/spinbox.xpm
new file mode 100644
index 00000000..b79f32f4
--- /dev/null
+++ b/kommander/editor/pics/large/spinbox.xpm
@@ -0,0 +1,102 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 64 1",
+" c #000000002424",
+". c #0b0b0b0b3f3f",
+"X c #000000004141",
+"o c #000000005656",
+"O c #131316164c4c",
+"+ c #000000006363",
+"@ c #000000006f6f",
+"# c #08080c0c7070",
+"$ c #000000008787",
+"% c #000000008a8a",
+"& c #000000009595",
+"* c #000000009f9f",
+"= c #00000000a6a6",
+"- c #00000000aaaa",
+"; c #00000000b6b6",
+": c #17171f1fb4b4",
+"> c #27272e2e8484",
+", c #272730308181",
+"< c #00000000cece",
+"1 c #00000000d7d7",
+"2 c #00000000dada",
+"3 c #00000000e5e5",
+"4 c #00000000efef",
+"5 c #00000000f7f7",
+"6 c #00000606ffff",
+"7 c #00000c0cffff",
+"8 c #01011919ffff",
+"9 c #0f0f1b1bffff",
+"0 c #04042020ffff",
+"q c #0f0f2f2fffff",
+"w c #12122424ffff",
+"e c #16162c2cffff",
+"r c #1b1b3535ffff",
+"t c #1f1f3b3bffff",
+"y c #20203535e6e6",
+"u c #29293f3ff8f8",
+"i c #3e3e49498d8d",
+"p c #24244040ffff",
+"a c #2f2f4e4effff",
+"s c #2f2f5252ffff",
+"d c #30304f4fffff",
+"f c #37375151ffff",
+"g c #35355c5cffff",
+"h c #3e3e5858ffff",
+"j c #59596464b8b8",
+"k c #46466363ffff",
+"l c #4f4f6767ffff",
+"z c #57576b6be3e3",
+"x c #51516b6bffff",
+"c c #57577575ffff",
+"v c #59597676ffff",
+"b c #69697b7bc7c7",
+"n c #64647676e8e8",
+"m c #6d6d8686d8d8",
+"M c #75758181dada",
+"N c #72729090f5f5",
+"B c #7b7ba0a0ffff",
+"V c #9090bbbbffff",
+"C c #9d9dc4c4ffff",
+"Z c #aeaececefcfc",
+"A c #b4b4d3d3ffff",
+"S c #b8b8dbdbffff",
+"D c #c0c0c0c0c0c0",
+"F c None",
+/* pixels */
+"FFFFFFFFFFFFFFbMybFFFFFFFFFFFFFF",
+"FFFFFFFFFFFFFFbB4-bFFFFFFFFFFFFF",
+"FFFFFFFFFFFFFjZe75%FFFFFFFFFFFFF",
+"FFFFFFFFFFFFjAk7667,FFFFFFFFFFFF",
+"FFFFFFFFFFFbZN066664bFFFFFFFFFFF",
+"FFFFFFFFFFFbCt666665=FFFFFFFFFFF",
+"FFFFFFFFFFbSg76666665>FFFFFFFFFF",
+"FFFFFFFFFbAN8666666663jFFFFFFFFF",
+"FFFFFFFFFbVq6666666666;bFFFFFFFF",
+"FFFFFFFFjCa666666666665iFFFFFFFF",
+"FFFFFFFbNk6666666666666<jFFFFFFF",
+"FFFFFFFjm666666666666666$FFFFFFF",
+"FFFFFFjc96666666666666665iFFFFFF",
+"FFFFFF:966666666666666665#FFFFFF",
+"FFFFFFi$&****==--=****&%@,FFFFFF",
+"FFFFFFFbbjjjjjjjjjjjjjjbbFFFFFFF",
+"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+"FFFFFFbbnzvxxvvvvxkhddyy:bFFFFFF",
+"FFFFFFilhfdddaasupprrww97#FFFFFF",
+"FFFFFFi666666666666666662OFFFFFF",
+"FFFFFFF*6666666666666666+bFFFFFF",
+"FFFFFFFj<66666666666666=iFFFFFFF",
+"FFFFFFFFi66666666666663 FFFFFFFF",
+"FFFFFFFFF;666666666666obFFFFFFFF",
+"FFFFFFFFFj16666666666-iFFFFFFFFF",
+"FFFFFFFFFFi6666666662.FFFFFFFFFF",
+"FFFFFFFFFFF:66666666.bFFFFFFFFFF",
+"FFFFFFFFFFFb1666666%iFFFFFFFFFFF",
+"FFFFFFFFFFFFi36666<.FFFFFFFFFFFF",
+"FFFFFFFFFFFFF>6664.bFFFFFFFFFFFF",
+"FFFFFFFFFFFFFF$66XbFFFFFFFFFFFFF",
+"FFFFFFFFFFFFFFb>OjFFFFFFFFFFFFFF"
+};
diff --git a/kommander/editor/pics/large/table.xpm b/kommander/editor/pics/large/table.xpm
new file mode 100644
index 00000000..c664d366
--- /dev/null
+++ b/kommander/editor/pics/large/table.xpm
@@ -0,0 +1,69 @@
+/* XPM */
+static char * table_xpm[] = {
+"32 32 34 1",
+" c None",
+". c #8C8C8C",
+"+ c #636363",
+"@ c #5A5A5A",
+"# c #4A4A4A",
+"$ c #424242",
+"% c #393939",
+"& c #292929",
+"* c #212121",
+"= c #313131",
+"- c #424239",
+"; c #423939",
+"> c #4A4239",
+", c #52524A",
+"' c #7B7B7B",
+") c #080808",
+"! c #101010",
+"~ c #101018",
+"{ c #213163",
+"] c #213173",
+"^ c #18297B",
+"/ c #10216B",
+"( c #081029",
+"_ c #000000",
+": c #BEC9D1",
+"< c #101852",
+"[ c #100808",
+"} c #080800",
+"| c #0019FF",
+"1 c #080810",
+"2 c #0098FF",
+"3 c #524A42",
+"4 c #525252",
+"5 c #181818",
+".++@##$$%%&&&&*****&*&&=%-;->,,'",
+"#)!=%%%%$$%$$$$$$$$$%%==!~{]^/(#",
+"#_:::::__::::::__:::::__::::::<$",
+"$_:::::__::::::__:::::__::::::[$",
+"$_:::::__::::::__:::::__::::::}$",
+"%_____________________________!%",
+"%!____________________________[%",
+"=)|||||__||||||__|||||__||||||1=",
+"&_|||||__||||||__|||||__||||||)=",
+"&_|||||__||||||__|||||__||||||)&",
+"&_|||||__||||||__|||||__||||||)*",
+"&_____________________________!*",
+"&!____________________________)*",
+"&)22222__222222__22222__222222)*",
+"*)22222__222222__22222__222222)*",
+"&)22222__222222__22222__222222_*",
+"*)22222__222222__22222__222222)*",
+"&______________________________*",
+"&)____________________________)*",
+"=)|||||__||||||__|||||__||||||_&",
+"%)|||||__||||||__|||||__||||||_=",
+"%_|||||__||||||__|||||__||||||_=",
+"%_|||||__||||||__|||||__||||||)%",
+"$______________________________%",
+"$______________________________$",
+"3_22222__222222__22222__222222_$",
+"#_22222__222222__22222__222222_$",
+"4_22222__222222__22222__222222_#",
+"@_22222__222222__22222__222222_@",
+"@)22222__222222__22222__222222_@",
+"+)))_)))!!)!!!!!!!)))__)!)_!)))@",
+".$#%%%==&**5*555555*5***&&==%%%."};
diff --git a/kommander/editor/pics/large/tabwidget.xpm b/kommander/editor/pics/large/tabwidget.xpm
new file mode 100644
index 00000000..3b9eb98b
--- /dev/null
+++ b/kommander/editor/pics/large/tabwidget.xpm
@@ -0,0 +1,94 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 56 1",
+" c #101010101818",
+". c #181818181818",
+"X c #181818182121",
+"o c Gray13",
+"O c #212121212929",
+"+ c Gray16",
+"@ c #292929293131",
+"# c #313131313131",
+"$ c #313131313939",
+"% c #393939393939",
+"& c #393939394242",
+"* c Gray26",
+"= c #424242424a4a",
+"- c Gray29",
+"; c #4a4a4a4a5252",
+": c Gray32",
+"> c #525252525a5a",
+", c #5a5a5a5a5a5a",
+"< c #5a5a5a5a6363",
+"1 c Gray39",
+"2 c #636363636b6b",
+"3 c Gray42",
+"4 c #6b6b6b6b7373",
+"5 c Gray45",
+"6 c #737373737b7b",
+"7 c #7b7b7b7b7b7b",
+"8 c #7b7b7b7b8484",
+"9 c #848484848484",
+"0 c #848484848c8c",
+"q c Gray55",
+"w c #8c8c8c8c9494",
+"e c Gray58",
+"r c #949494949c9c",
+"t c Gray61",
+"y c #9c9c9c9ca5a5",
+"u c #a5a5a5a5a5a5",
+"i c #a5a5a5a5adad",
+"p c Gray68",
+"a c #adadadadb5b5",
+"s c Gray71",
+"d c Gray74",
+"f c #bdbdbdbdc6c6",
+"g c #c0c0c0c0c0c0",
+"h c #c6c6c6c6c6c6",
+"j c #c6c6c6c6cece",
+"k c #cececececece",
+"l c #cecececed6d6",
+"z c Gray84",
+"x c #d6d6d6d6dede",
+"c c Gray87",
+"v c #dedededee7e7",
+"b c #e7e7e7e7e7e7",
+"n c #efefefefefef",
+"m c Gray97",
+"M c Gray100",
+"N c None",
+/* pixels */
+"NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
+"NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
+"NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
+"NNNNdewqwe0qq5weq9076qq99wpNNNNN",
+"NNNduvcczzkkf:aclkje:zxkzi:sNNNN",
+"NNNpdztew00qw,%wq0wq&>wqwq*8NNNN",
+"NNftny00099896@,0889<+69891%sNNN",
+"NNssb0q0998888=#99896@*0886$9NNN",
+"Ndtna9998887781+,8787;+5877:&dNN",
+"Nsymw8988778776&#87782+*8872+qNN",
+"Ntbl89898877877<+:8776=+4776*&dN",
+"dwMp888877767685*$7877<O*876,+eN",
+"psme897788787777<#:6674*#5884%:f",
+"qzl988887777878885wpw752;:>,>=@e",
+"5di978787887888900tpdkvnbczzkt-&",
+"4yu9878777787878898880etupadft=*",
+"2ui08778787787878888988767766,@&",
+"1tiq8877878777878797878888886>#%",
+"<rie7878777878777877787777775:$%",
+"<tie9787878777778778777878772-$#",
+",eur887777676868676767676666<-##",
+",wyr077878787776776767676765,=##",
+"17ye977776766767676666666665>*#$",
+"84rw076767667676666676565654:&+*",
+"q1ew867666676666675656655562;&+;",
+"e:0q966777667676666665665652-%o1",
+"p&12111<<11<1<<1,<,1<<,<<,<:&$.7",
+"s$oXoOO+@+++++++@+++++++OO+Oo. w",
+"he351,:-=**&&%%%%%%$%$$%%**;,37d",
+"NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
+"NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
+"NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+};
diff --git a/kommander/editor/pics/large/textbrowser.xpm b/kommander/editor/pics/large/textbrowser.xpm
new file mode 100644
index 00000000..39b70cb5
--- /dev/null
+++ b/kommander/editor/pics/large/textbrowser.xpm
@@ -0,0 +1,196 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 158 2",
+" c Gray0",
+". c #000000000808",
+"X c Gray3",
+"o c #080808081010",
+"O c #080808081818",
+"+ c #101010101010",
+"@ c #101010101818",
+"# c #181818181818",
+"$ c #080808082121",
+"% c #101010102121",
+"& c #181818182121",
+"* c #181818182929",
+"= c Gray13",
+"- c #212121212929",
+"; c Gray16",
+": c #212121213131",
+"> c #292929293131",
+", c #292929293939",
+"< c #313131313131",
+"1 c #313131313939",
+"2 c #393939393939",
+"3 c #313131314242",
+"4 c #313131314a4a",
+"5 c #393939394242",
+"6 c Gray26",
+"7 c #424242424a4a",
+"8 c Gray29",
+"9 c #4a4a4a4a5252",
+"0 c #4a4a4a4a5a5a",
+"q c Gray32",
+"w c #525252525a5a",
+"e c #5a5a5a5a5a5a",
+"r c #525252526b6b",
+"t c #5a5a5a5a6363",
+"y c Gray39",
+"u c Gray42",
+"i c #636363637373",
+"p c #6b6b6b6b7373",
+"a c Gray45",
+"s c #7b7b7b7b7b7b",
+"d c #00000000efef",
+"f c Blue",
+"g c #08080808ffff",
+"h c #08081010ffff",
+"j c #10101010ffff",
+"k c #18181818f7f7",
+"l c #18181818ffff",
+"z c #21212121f7f7",
+"x c #21212929f7f7",
+"c c #29293131efef",
+"v c #29293131ffff",
+"b c #31313939e7e7",
+"n c #31313939efef",
+"m c #31313131f7f7",
+"M c #39393939f7f7",
+"N c #39393939ffff",
+"B c #39394242dede",
+"V c #31314242f7f7",
+"C c #39394a4affff",
+"Z c #7b7b7b7b8484",
+"A c #42424a4ad6d6",
+"S c #42424242f7f7",
+"D c #42424a4af7f7",
+"F c #4a4a5252e7e7",
+"G c #4a4a5252efef",
+"H c #42425252ffff",
+"J c #4a4a5a5affff",
+"K c #52525252efef",
+"L c #5a5a5a5aefef",
+"P c #52525a5af7f7",
+"I c #52526363ffff",
+"U c #5a5a6363f7f7",
+"Y c #5a5a6b6bffff",
+"T c #6b6b6b6bd6d6",
+"R c #6b6b6b6bdede",
+"E c #73737373d6d6",
+"W c #6b6b6b6be7e7",
+"Q c #6b6b6b6befef",
+"! c #6b6b6b6bf7f7",
+"~ c #6b6b7373efef",
+"^ c #6b6b7b7bffff",
+"/ c #7b7b7b7befef",
+"( c #73737373f7f7",
+") c #7b7b8484e7e7",
+"_ c #73738484ffff",
+"` c #7b7b8484f7f7",
+"' c #7b7b8484ffff",
+"] c #848484848484",
+"[ c #848484848c8c",
+"{ c Gray55",
+"} c #8c8c8c8c9494",
+"| c Gray58",
+" . c #949494949c9c",
+".. c Gray61",
+"X. c #9c9c9c9ca5a5",
+"o. c #a5a5a5a5a5a5",
+"O. c #a5a5a5a5adad",
+"+. c Gray68",
+"@. c #a5a5a5a5b5b5",
+"#. c #adadadadb5b5",
+"$. c Gray71",
+"%. c #b5b5b5b5bdbd",
+"&. c Gray74",
+"*. c #8c8c8c8ccece",
+"=. c #84848484d6d6",
+"-. c #8c8c8c8cd6d6",
+";. c #8c8c9494cece",
+":. c #94949494cece",
+">. c #84848484efef",
+",. c #8c8c8c8cefef",
+"<. c #84848c8cf7f7",
+"1. c #8c8c9494efef",
+"2. c #8c8c9494f7f7",
+"3. c #94949494efef",
+"4. c #9c9c9c9cefef",
+"5. c #94949c9cf7f7",
+"6. c #9c9ca5a5f7f7",
+"7. c #9c9ca5a5ffff",
+"8. c #a5a5a5a5d6d6",
+"9. c #bdbdbdbdc6c6",
+"0. c #bdbdbdbddede",
+"q. c #a5a5a5a5e7e7",
+"w. c #a5a5a5a5efef",
+"e. c #a5a5adadf7f7",
+"r. c #a5a5adadffff",
+"t. c #a5a5b5b5ffff",
+"y. c #adadb5b5f7f7",
+"u. c #b5b5b5b5e7e7",
+"i. c #bdbdbdbde7e7",
+"p. c #bdbdbdbdefef",
+"a. c #c0c0c0c0c0c0",
+"s. c #c6c6c6c6c6c6",
+"d. c #cececececece",
+"f. c #cecececedede",
+"g. c Gray84",
+"h. c #dedededed6d6",
+"j. c Gray87",
+"k. c #c6c6c6c6e7e7",
+"l. c #c6c6cecee7e7",
+"z. c #c6c6ceceefef",
+"x. c #c6c6ceceffff",
+"c. c #d6d6d6d6e7e7",
+"v. c #dedededee7e7",
+"b. c #dedededeefef",
+"n. c #e7e7e7e7dede",
+"m. c #efefefefdede",
+"M. c #f7f7f7f7dede",
+"N. c #e7e7e7e7e7e7",
+"B. c #e7e7e7e7efef",
+"V. c #efefe7e7e7e7",
+"C. c #efefefefe7e7",
+"Z. c #efefefefefef",
+"A. c #f7f7f7f7e7e7",
+"S. c #f7f7f7f7efef",
+"D. c Gray97",
+"F. c #fffffffff7f7",
+"G. c Gray100",
+"H. c None",
+/* pixels */
+"H.O.r 4 , - * % O O O O O O o O O O O o O O O O O @ - : 1 0 .&.",
+"o.$ . # - < 2 5 5 6 6 6 8 8 8 9 8 8 8 8 7 6 6 6 5 5 1 > - . { ",
+"0 ] d.d.g.g.g.g.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.h.g.g.h.g.O.& > ",
+": 1 g.{ +.N.N.N.N.N.j.j.j.j.N.j.j.j.N.j.j.j.n.j.v.N.C.%.s Z.Z @ ",
+"& t { { Z.j.j.j.j.N.N.N.j.j.N.j.N.j.N.N.n.v.N.n.N.j.< ; Z.+.O ",
+"@ u { | G.N.N.N.Z.Z.N.Z.Z.j.N.j.Z.D.N.j.v.N.Z.Z.N.Z.; < G.9.o ",
+"& 5 6 2 s j.N.N.o.e 6 y +.N.N.N.s u d.N.N.j.Z a d.u + + u | & ",
+"& ; # # 6 j.N.e = 8 # ] Z.N.a q Z.S.s e j.6 X 2 ] * ",
+"@ a | { D.Z.] u Z.Z.j.q &.Z.N.q +.9. 6 N.C.j.= 2 D.d.@ ",
+"@ a | ] D.N.2 X j.Z.N.Z.s. a Z.Z.g.# = ; # d.Z.N.v.# 2 D.s.% ",
+"@ a | ] Z.j.= < < < < < 8 N.N.Z.+. o.Z.N.N.n.# 2 D.d.@ ",
+"& a .. ] D.j.# + q q q q q e { j.N.Z... { Z.N.N.j.# 2 D.s.@ ",
+"- a .. s D.j.< # Z.D.Z.Z.Z.s.j.N.Z.s.+ 2 8 $.Z.N.j.+ 6 G.s.@ ",
+"- a +. a G.Z.u ] D.Z.D.{ ] Z.j.< X s.g.+ ; g.Z.j.= 2 G.9.# ",
+"- u s. # e g.j.= e | y = g.Z.u s Z.D.] q Z.N.2 8 [ - ",
+": y N.] ; # $.Z.g.u = X # y d.Z.d.6 e j.N.N.N.y 6 s.Z.+.6 ; p ; ",
+": y v.Z.j.j.N.N.N.Z.N.h.j.Z.N.N.j.N.N.N.j.N.N.N.N.j.N.Z.Z.D.$.* ",
+"> t j.n.N.N.n.n.m.N.N.N.C.m.N.n.N.n.C.m.M.m.m.A.C.C.N.N.N.D.$.* ",
+"1 e j.v.n.v.z.u.e.6.2.2.2.4.i.n.N.i.4.,./ ! ( / 3.i.N.n.N.D.#.- ",
+"1 q j.n.b.r.^ J C D D V V C H U M f f f f f f f f f M i.C.D.+.- ",
+"1 w j.B.7.b A E *.;.:.-.=.T b f f f z M G K G M z f f k d.F.o.> ",
+"5 q n.x.G *.n.m.C.C.C.C.m.M.L f h / n.n.N.m.V.n.v.u.K f W F.X.> ",
+"3 8 j.7.) n.N.j.N.j.N.N.N.N.m z I ` A.N.N.N.N.N.n.A.C.l S D.o.> ",
+"7 6 h.t.<.n.n.N.n.N.N.N.n.N.N n ! 1.M.n.N.N.n.N.M.C.w.f G F...> ",
+"9 5 g.y._ 3.c.v.N.N.n.N.N.C.( J v L p.l.v.c.c.k.4.P f f 4.F.} 1 ",
+"9 2 h.k.~ Y ^ 2.2.5.6.2.<.' J x d d f f g j g f f f f Q m.D.{ 5 ",
+"0 < d.m.0.R F D D D D V c c B *.>.M j f f f f j z K q.C.N.D.Z 5 ",
+"y - d.N.N.n.f.8.;.=.=.;.8.0.n.C.C.N.v.l.i.u.k.v.v.C.C.N.N.G.p 7 ",
+"p @ &.Z.N.N.N.C.A.C.A.S.A.C.N.N.C.N.C.C.C.A.C.C.N.C.N.N.Z.G.0 q ",
+"[ } G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.g.@ u ",
+"$.@ @ i | O.#.&.&.&.&.&.&.&.&.&.&.%.%.%.#.#.#.@.O.O. .[ p : o +.",
+"H.o.2 # O o o O o O o O O o O O O o O o @ O @ @ @ @ & - ; 7 o.H."
+};
diff --git a/kommander/editor/pics/large/textview.xpm b/kommander/editor/pics/large/textview.xpm
new file mode 100644
index 00000000..356f8bfe
--- /dev/null
+++ b/kommander/editor/pics/large/textview.xpm
@@ -0,0 +1,103 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 65 1",
+" c Gray0",
+". c Gray3",
+"X c #080808081010",
+"o c #080808081818",
+"O c #101010101010",
+"+ c #101010101818",
+"@ c #181818181818",
+"# c #181818182121",
+"$ c Gray13",
+"% c #212121212929",
+"& c Gray16",
+"* c #212121213131",
+"= c #292929293131",
+"- c #313131313131",
+"; c #313131313939",
+": c #393939393939",
+"> c #313131314242",
+", c #393939394242",
+"< c Gray26",
+"1 c #424242424a4a",
+"2 c #4a4a4a4a4242",
+"3 c Gray29",
+"4 c #4a4a4a4a5252",
+"5 c #525252524a4a",
+"6 c Gray32",
+"7 c #525252525a5a",
+"8 c #5a5a5a5a5a5a",
+"9 c #525252526363",
+"0 c #5a5a5a5a6363",
+"q c Gray39",
+"w c #636363636b6b",
+"e c Gray42",
+"r c #6b6b6b6b7373",
+"t c Gray45",
+"y c #7b7b7b7b7373",
+"u c #7b7b7b7b7b7b",
+"i c #7b7b7b7b8484",
+"p c #848484848484",
+"a c #848484848c8c",
+"s c Gray55",
+"d c #8c8c8c8c9494",
+"f c #949494948c8c",
+"g c Gray58",
+"h c #949494949c9c",
+"j c Gray61",
+"k c #9c9c9c9ca5a5",
+"l c #a5a5a5a5a5a5",
+"z c #a5a5a5a5adad",
+"x c Gray68",
+"c c #adadadadb5b5",
+"v c Gray71",
+"b c #b5b5b5b5bdbd",
+"n c Gray74",
+"m c #c0c0c0c0c0c0",
+"M c #c6c6c6c6c6c6",
+"N c #cececececece",
+"B c #cecececed6d6",
+"V c Gray84",
+"C c Gray87",
+"Z c #e7e7e7e7e7e7",
+"A c #efefefefefef",
+"S c #f7f7f7f7efef",
+"D c Gray97",
+"F c Gray100",
+"G c None",
+/* pixels */
+"Gz9>=%#+oXXXXXXXXXXXXXXXo+$%;4gn",
+"lo +$--::,<<<2333321<<<<:;-&#. a",
+"4 uNNNBNVVVVVVVVVVVVVVVVVVNVNl@=",
+"*-NplZCCCCCCCCCCCCCCVCCCCCZvyZuO",
+"#7s sZCCCVCCVCVCVCVCCCCCCCV&&AkX",
+"Oes sDCCCZZZZZCCCZACCCCZACA&-FbO",
+"+:: :uVCCj8:qlZCCueMCCCutMeOOes@",
+"#&@ @<VZ8 $3@ uZZt 6ZAu 8V: .-p#",
+"Ors pAZp qZZV3.vZC3 xn :CZC@:DM+",
+"+rf pAC:.VZCAM eAZN@$&OMZCC@:AM+",
+"+eg uAV$ ----- 3CCAl jACCC@-AM+",
+"#eg uAV@O666668pCCZj pACCCO<An+",
+"$tj uAC&@ZAZZZMVCZM.:< vACVO<Dn+",
+"$el tDZe pAAAp uAV-.MNO$VZC@:Dn@",
+"%en @8NV$ 8sq $NZe tAAp 6ZC: 3p$",
+"%qCp&@vZNe$.@8MAM<6CCCCq:MZx<&r&",
+"%8CZVVCCZZCVVAZCVCZCCCCZCCCZZAc#",
+"=8CCCCCCCCCCCCCCCCCCCCCCCCCCCSx#",
+"-6VCCCCCCCCCCCCCCCCCCCCCCCCCCAx%",
+";6VCCCCCCCCCCCCCCCCCCCCCCCCCZAl%",
+";5VCCCCCCCCCCCCCCCCCCCCCCCCCCAk&",
+";3VCCCCCCCCCCCCCCCCCCCCCCCCCZAj=",
+",2VCCCCCCCCCCCCCCCCCCCCCCCCCCAh=",
+",<VCCCCCCCCCCCCCCCCCCCCCCCCCCSh&",
+"4:BCCCCCCCCCCCCCCCCCCCCCCCCCZAd;",
+"3;NCCCCCCCCCCCCCCCCCCCCCCCCCCAa:",
+"4&NCCCCCCCCCCCCCCCCCCCCCCCCCZDu,",
+"0$MCCCCCCCCCCCZCZCZCCCCZCZCZCSe,",
+"rOnZCZCZCZZCZZCZCZCZCZZCCCZCZD46",
+"i sFFFFFFDFDDFFFFFFFFFDFFFFFFV+e",
+"v+Owskxvbvbnbvvvvcccczxzzkdar%.x",
+"Gl;@XXXXXOXXXOXXXXXXXOoOO+@$&<lG"
+};
diff --git a/kommander/editor/pics/large/toolbutton.xpm b/kommander/editor/pics/large/toolbutton.xpm
new file mode 100644
index 00000000..a61a4774
--- /dev/null
+++ b/kommander/editor/pics/large/toolbutton.xpm
@@ -0,0 +1,123 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 85 1",
+" c #181818181818",
+". c #313131313131",
+"X c #313131313939",
+"o c #393939393939",
+"O c #5a5a29290000",
+"+ c #636331310808",
+"@ c #636331311010",
+"# c #737331310000",
+"$ c #7b7b39390000",
+"% c #6b6b42422929",
+"& c Gray26",
+"* c Gray29",
+"= c #4a4a4a4a5252",
+"- c Gray32",
+"; c #5a5a5a5a5a5a",
+": c #737352524242",
+"> c #73735a5a4a4a",
+", c Gray39",
+"< c Gray42",
+"1 c #6b6b6b6b7373",
+"2 c #7b7b6b6b6363",
+"3 c Gray45",
+"4 c #7b7b7b7b7b7b",
+"5 c #73737b7b8484",
+"6 c #7b7b7b7b8484",
+"7 c #7b7b7b7b8c8c",
+"8 c #7b7b84848c8c",
+"9 c #848439390000",
+"0 c #8c8c5a5a3939",
+"q c #9c9c5a5a2929",
+"w c #a5a54a4a0000",
+"e c #b5b552520808",
+"r c #84847b7b7373",
+"t c #c6c65a5a0808",
+"y c #cece63631010",
+"u c #d6d673732121",
+"i c #d6d67b7b3131",
+"p c #8c8c84847b7b",
+"a c #adad94947b7b",
+"s c #b5b594947373",
+"d c #b5b594947b7b",
+"f c #cece8c8c5a5a",
+"g c #c6c694945a5a",
+"h c #d6d68c8c4242",
+"j c #848484848484",
+"k c Gray55",
+"l c #8c8c8c8c9494",
+"z c #8c8c94949494",
+"x c #94948c8c8c8c",
+"c c Gray58",
+"v c #949494949c9c",
+"b c #94949c9c9494",
+"n c #94949c9c9c9c",
+"m c #9c9c9c9c9494",
+"M c Gray61",
+"N c #94949c9ca5a5",
+"B c #a5a59c9c8c8c",
+"V c #adad9c9c8c8c",
+"C c #a5a5a5a59c9c",
+"Z c #a5a5a5a5a5a5",
+"A c #a5a5adadadad",
+"S c #adada5a5a5a5",
+"D c Gray68",
+"F c #a5a5adadb5b5",
+"G c #adadb5b5bdbd",
+"H c Gray71",
+"J c #b5b5b5b5bdbd",
+"K c Gray74",
+"L c #b5b5c6c6cece",
+"P c #c0c0c0c0c0c0",
+"I c #c6c6c6c6c6c6",
+"U c #cececececece",
+"Y c #c6c6ceced6d6",
+"T c Gray84",
+"R c Gray87",
+"E c #ceced6d6e7e7",
+"W c #d6d6dedeefef",
+"Q c #e7e7deded6d6",
+"! c #e7e7e7e7e7e7",
+"~ c #efefefefefef",
+"^ c #e7e7f7f7ffff",
+"/ c #efeff7f7ffff",
+"( c Gray97",
+") c Gray100",
+"_ c None",
+/* pixels */
+"________________________________",
+"________________________________",
+"________________________________",
+"_____KZMZZZZZDZDZDZZZZZZMMH_____",
+"____DIR!R!RRRRTTTTUTUUIIHDcM____",
+"___HK))))))))((~~!!RRUIKKDZ<D___",
+"___MK~!TUIIIIIIIIKKKHDDZMMc,3___",
+"___cDIIHHHDZZZDDADZMZZMZMMc<;___",
+"___MDHHDZZZJTEF87lMZMMMMMck<-___",
+"___MDHDDZZMG^/E856cMCMMccck<-___",
+"___MZDDZZNCMJ^/Y858vMMcMcck<*___",
+"___kDDZZZCMMcY^/L568cMccckk<*___",
+"___kZDZZMMMMMcE^^G786bmcccj<&___",
+"___kDDZZMMMMMbfQ/^5o=Mccckj<*___",
+"___kZZZZMMMMnVy0WWX 1MMcckk<&___",
+"___kZDZZMMMMNfeOSNo<cMccckj<*___",
+"___kDZZZMMMvmi9:nkcMMcccckj<&___",
+"___MZZZMMMmndy+rMMMcccMcckj<&___",
+"___MZZZMMMMNhw%cncccMcccccj<&___",
+"___MZZZMMMvBu#2NcMcMccccckj<&___",
+"___cZZZMMMnge@xMcccccccckkj<&___",
+"___cZZMMMvMi$>NcmcMcccccckj<*___",
+"___kMZMMMvst+pMccccccccckkj,*___",
+"___cMZMMcvaq:cccccckcckckkj,*___",
+"___ccZcccczlzczkkckckkkkkkj;-___",
+"___ZkMccckkkkkkkkjkkkkkkkkj-,___",
+"___K4ckkjjjjj444444444j4j43oM___",
+"____M;;;;,;;;;;;;;;;;;;--*o<K___",
+"_____Z<*&oo.o......o.oo&*;cK____",
+"________________________________",
+"________________________________",
+"________________________________"
+};
diff --git a/kommander/editor/pics/large/undo.xpm b/kommander/editor/pics/large/undo.xpm
new file mode 100644
index 00000000..a4f309ec
--- /dev/null
+++ b/kommander/editor/pics/large/undo.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 4 1",
+" c #000000008080",
+". c #808080808080",
+"X c #c0c0c0c0c0c0",
+"o c None",
+/* pixels */
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"ooooooooooooooo .ooooooo",
+"oooo ooooooooo .oooooo",
+"oooo ooooooo ooooooo .ooooo",
+"oooo oooo ooooooooo .oooo",
+"oooo oo ooooooooooo oooo",
+"oooo oooooooooooooo oooo",
+"oooo ooooooooooooooo oooo",
+"oooo ooooooooooooooo oooo",
+"oooo oooooooooooooo oooo",
+"oooo ooooooooooooo oooo",
+"oooo ooooooooooo .oooo",
+"oooo ooooooooo .ooooo",
+"ooooooooooooooooooooooo. oooooo",
+"oooooooooooooooooooooo. ooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo"
+};
diff --git a/kommander/editor/pics/mini/down.xpm b/kommander/editor/pics/mini/down.xpm
new file mode 100644
index 00000000..0a0bae1d
--- /dev/null
+++ b/kommander/editor/pics/mini/down.xpm
@@ -0,0 +1,71 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 49 1",
+" c #06062d2dffff",
+". c #08082e2effff",
+"X c #1b1b3f3ff1f1",
+"o c #3d3d4e4ebbbb",
+"O c #2f2f5050e1e1",
+"+ c #26265151fbfb",
+"@ c #2b2b5959fefe",
+"# c #31315454e2e2",
+"$ c #37375e5ef3f3",
+"% c #3c3c6565eeee",
+"& c #3a3a6565ffff",
+"* c #44445b5bc2c2",
+"= c #48486060c5c5",
+"- c #50506f6fcccc",
+"; c #47477575ffff",
+": c #4d4d7d7dffff",
+"> c #53537c7cebeb",
+", c #6c6c8484baba",
+"< c #6e6e8787c7c7",
+"1 c #6b6b9292e2e2",
+"2 c #65659797ffff",
+"3 c #6c6c9d9dffff",
+"4 c #6c6ca1a1ffff",
+"5 c #7e7ea2a2eaea",
+"6 c #7676a6a6fefe",
+"7 c #7f7fafafffff",
+"8 c #8f8f9999b7b7",
+"9 c #9f9fa2a2b3b3",
+"0 c #8e8e9e9ec0c0",
+"q c #8282a9a9e8e8",
+"w c #8787b7b7ffff",
+"e c #8787b8b8ffff",
+"r c #8e8ebebeffff",
+"t c #a4a4b4b4cdcd",
+"y c #a6a6babaecec",
+"u c #9797c8c8ffff",
+"i c #9d9dceceffff",
+"p c #9f9fd3d3ffff",
+"a c #a2a2cecef6f6",
+"s c #a2a2d1d1ffff",
+"d c #b2b2c9c9eeee",
+"f c #b9b9cacaeeee",
+"g c #babad6d6f8f8",
+"h c #b5b5ebebffff",
+"j c #c0c0c0c0c0c0",
+"k c #dadafafaffff",
+"l c #e1e1fafaffff",
+"z c #f6f6ffffffff",
+"x c None",
+/* pixels */
+"xxxxx9yfdq8xxxxx",
+"xxxxx5zlks#9xxxx",
+"xxxxt1hpu2Oxxxxx",
+"xxxxx<uir:otxxxx",
+"xxxxx0wuw;-xxxxx",
+"xxxxx8wuw&,xxxxx",
+"xxxxxt5u7$9xxxxx",
+"xxxxxtqi7$9xxxxx",
+"xtxxx8aiw:,txxtx",
+"x<agywrwww655>*x",
+"x,%4eeww7w76& -x",
+"xx,@3www776;.=9x",
+"xxx,@37766: otxx",
+"xxxx,+262; o9xxx",
+"xxxxx,+::.otxxxx",
+"xxxxxx<OX-9xxxxx"
+};
diff --git a/kommander/editor/pics/mini/form.xpm b/kommander/editor/pics/mini/form.xpm
new file mode 100644
index 00000000..66bf2633
--- /dev/null
+++ b/kommander/editor/pics/mini/form.xpm
@@ -0,0 +1,27 @@
+/* XPM */
+static char * form_xpm[] = {
+"20 20 4 2",
+" c None",
+". c None",
+"+ c #000079",
+"@ c #FFFFFF",
+". . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . ",
+". . + + + + + + + + + + + + + + + + . . ",
+". . + . . + @ @ @ @ @ @ @ @ + . . + . . ",
+". . + + + + + + + + + + + + + + + + . . ",
+". . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . ",
+". . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . ",
+". . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . ",
+". . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . ",
+". . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . ",
+". . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . ",
+". . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . ",
+". . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . ",
+". . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . ",
+". . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . ",
+". . + + + + + + + + + + + + + + + + . . ",
+". . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . "};
diff --git a/kommander/editor/pics/mini/image.xpm b/kommander/editor/pics/mini/image.xpm
new file mode 100644
index 00000000..2c1479da
--- /dev/null
+++ b/kommander/editor/pics/mini/image.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static const char *image_xpm[] = {
+"17 15 9 1",
+" c #7F7F7F",
+". c #FFFFFF",
+"X c #00B6FF",
+"o c #BFBFBF",
+"O c #FF6C00",
+"+ c #000000",
+"@ c #0000FF",
+"# c #6CFF00",
+"$ c #FFB691",
+" ..XX",
+" ........o .XXX",
+" .OOOOOOOo. XXX+",
+" .O@@@@@@+++XXX++",
+" .O@@@@@@O.XXX+++",
+" .O@@@@@@OXXX+++.",
+" .O######XXX++...",
+" .O#####XXX++....",
+" .O##$#$XX+o+....",
+" .O#$$$$$+.o+....",
+" .O##$$##O.o+....",
+" .OOOOOOOO.o+....",
+" ..........o+....",
+" ooooooooooo+....",
+"+++++++++++++...."
+};
diff --git a/kommander/editor/pics/mini/left.xpm b/kommander/editor/pics/mini/left.xpm
new file mode 100644
index 00000000..97e8c809
--- /dev/null
+++ b/kommander/editor/pics/mini/left.xpm
@@ -0,0 +1,69 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 47 1",
+" c #0f0f3c3cffff",
+". c #16163939efef",
+"X c #18183f3ffbfb",
+"o c #27273f3fd1d1",
+"O c #17174545ffff",
+"+ c #1d1d4343f2f2",
+"@ c #1d1d4c4cffff",
+"# c #30305656d8d8",
+"$ c #3a3a5252d4d4",
+"% c #20204747fcfc",
+"& c #2c2c5656ffff",
+"* c #34346262ffff",
+"= c #3b3b6b6bffff",
+"- c #63637777b8b8",
+"; c #4b4b6363c4c4",
+": c #48486767c9c9",
+"> c #51516d6dcdcd",
+", c #45457474ffff",
+"< c #4c4c7d7dffff",
+"1 c #7a7a8c8cbdbd",
+"2 c #56568585ffff",
+"3 c #5f5f8b8bfafa",
+"4 c #76768b8bc0c0",
+"5 c #67679797ffff",
+"6 c #6a6a9898f4f4",
+"7 c #6f6f9f9fffff",
+"8 c #7f7fa3a3e9e9",
+"9 c #7676a6a6ffff",
+"0 c #7676a8a8ffff",
+"q c #7e7eafafffff",
+"w c #7f7fb1b1ffff",
+"e c #8f8fa6a6e9e9",
+"r c #8383b1b1f5f5",
+"t c #8282b5b5ffff",
+"y c #9494c4c4fafa",
+"u c #9797cbcbffff",
+"i c #9f9fc6c6f1f1",
+"p c #9f9fd4d4ffff",
+"a c #bbbbe4e4ffff",
+"s c #c0c0c0c0c0c0",
+"d c #cecedcdcfdfd",
+"f c #c3c3e6e6ffff",
+"g c #d8d8e1e1f9f9",
+"h c #e6e6eaeafafa",
+"j c #e4e4f9f9ffff",
+"k c #eeeeffffffff",
+"l c None",
+/* pixels */
+"llllllllllllllll",
+"lllll4elllllllll",
+"lllleghellllllll",
+"lll1hkilllllllll",
+"ll1kkp01llllllll",
+"l4kkywq4le1e4e84",
+"1dky9q958iaafat#",
+"ijuq997qyyrt09,&",
+"6tw99777557755,o",
+"-%39779*X%&*=,*+",
+"l$@2577>11;$o.+;",
+"ll>O,571llllll1l",
+"lll:X<2lllllllll",
+"llll- @4llllllll",
+"lllll-.4llllllll",
+"llllllllllllllll"
+};
diff --git a/kommander/editor/pics/mini/resetproperty.xpm b/kommander/editor/pics/mini/resetproperty.xpm
new file mode 100644
index 00000000..43bdc1b0
--- /dev/null
+++ b/kommander/editor/pics/mini/resetproperty.xpm
@@ -0,0 +1,13 @@
+/* XPM */
+static char * resetproperty_xpm[] = {
+"7 6 4 1",
+" c None",
+". c #C00000",
+"+ c #FF0000",
+"@ c None",
+".+@@@+.",
+"@.+@+.@",
+"@@.+.@@",
+"@@+.+@@",
+"@+.@.+@",
+"+.@@@.+"};
diff --git a/kommander/editor/pics/mini/right.xpm b/kommander/editor/pics/mini/right.xpm
new file mode 100644
index 00000000..24bcaae6
--- /dev/null
+++ b/kommander/editor/pics/mini/right.xpm
@@ -0,0 +1,77 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 55 1",
+" c #02022525fefe",
+". c #06062a2afbfb",
+"X c #1c1c3c3ce5e5",
+"o c #22223737d6d6",
+"O c #3b3b5353cbcb",
+"+ c #26264a4aebeb",
+"@ c #2c2c4f4feeee",
+"# c #33335b5bf1f1",
+"$ c #32325a5afafa",
+"% c #35356565ffff",
+"& c #39396464ffff",
+"* c #3e3e6969fefe",
+"= c #49495d5dbcbc",
+"- c #62627777bbbb",
+"; c #68687d7db8b8",
+": c #40405d5dcaca",
+"> c #49496363c6c6",
+", c #50507171dfdf",
+"< c #4c4c7575e9e9",
+"1 c #5c5c7a7aeaea",
+"2 c #79798989afaf",
+"3 c #54548484ffff",
+"4 c #5d5d8e8efdfd",
+"5 c #6e6e8585c5c5",
+"6 c #67679696ffff",
+"7 c #6d6d9898f0f0",
+"8 c #6d6d9b9bfafa",
+"9 c #79799898e8e8",
+"0 c #6c6ca0a0ffff",
+"q c #7f7fa0a0e3e3",
+"w c #7676a6a6ffff",
+"e c #7c7ca8a8f2f2",
+"r c #7f7fafafffff",
+"t c #8888a2a2f0f0",
+"y c #8686b6b6ffff",
+"u c #8888b7b7ffff",
+"i c #8c8cb8b8f0f0",
+"p c #8f8fbfbfffff",
+"a c #9595c7c7ffff",
+"s c #9797c8c8ffff",
+"d c #9d9dcfcfffff",
+"f c #9f9fd2d2ffff",
+"g c #a2a2d0d0f0f0",
+"h c #a1a1d0d0ffff",
+"j c #a9a9dedeffff",
+"k c #b1b1d7d7f2f2",
+"l c #bebedbdbf5f5",
+"z c #bcbcd9d9fefe",
+"x c #adade2e2ffff",
+"c c #b9b9e5e5ffff",
+"v c #c0c0c0c0c0c0",
+"b c #ccccf0f0f2f2",
+"n c #cdcdf6f6ffff",
+"m c #e2e2ffffffff",
+"M c None",
+/* pixels */
+"MMMMMMMMMMMMMMMM",
+"MMMMMMMMMq2MMMMM",
+"MMMMMMMMMbr5MMMM",
+"MMMMMMMMMdj65MMM",
+"MMMMMMMMMqsdw5MM",
+"2tqq5qMM2yppa6-M",
+"imncllgkzyryyp4;",
+"exaasadharrrrr8<",
+"7fuyrww0rrrrw6*X",
+",03*%$@+&rrw8%.;",
+"2XoO>;22-8w8% =M",
+"MMMMMMMMM96$ >MM",
+"MMMMMMMMM1%.>MMM",
+"MMMMMMMMM# >MMMM",
+"MMMMMMMMM:-MMMMM",
+"MMMMMMMMMMMMMMMM"
+};
diff --git a/kommander/editor/pics/mini/up.xpm b/kommander/editor/pics/mini/up.xpm
new file mode 100644
index 00000000..29117588
--- /dev/null
+++ b/kommander/editor/pics/mini/up.xpm
@@ -0,0 +1,68 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 46 1",
+" c #16163636ebeb",
+". c #17173a3aecec",
+"X c #1a1a3f3ff3f3",
+"o c #1b1b4343fefe",
+"O c #3f3f5656d1d1",
+"+ c #2b2b5c5cffff",
+"@ c #31315f5fffff",
+"# c #36366767fefe",
+"$ c #3b3b6666ffff",
+"% c #3f3f6e6effff",
+"& c #69697b7bb8b8",
+"* c #4d4d6565cccc",
+"= c #51516c6ccece",
+"- c #55557272cece",
+"; c #58587171c7c7",
+": c #42426d6deded",
+"> c #47477777ffff",
+", c #4a4a7a7affff",
+"< c #64647b7bc0c0",
+"1 c #72728787bbbb",
+"2 c #50508585ffff",
+"3 c #5c5c8a8af7f7",
+"4 c #6a6a8989d7d7",
+"5 c #60608e8effff",
+"6 c #66669797ffff",
+"7 c #67679898ffff",
+"8 c #6a6a9b9bf4f4",
+"9 c #6e6e9e9effff",
+"0 c #7676a7a7ffff",
+"q c #7777a9a9ffff",
+"w c #7878a1a1f7f7",
+"e c #7e7eafafffff",
+"r c #8989bdbdffff",
+"t c #9090c6c6ffff",
+"y c #9696ccccffff",
+"u c #9999c9c9f9f9",
+"i c #9d9dd1d1ffff",
+"p c #b2b2c6c6f4f4",
+"a c #bfbfe6e6fefe",
+"s c #c0c0c0c0c0c0",
+"d c #d1d1e0e0fcfc",
+"f c #dbdbf9f9ffff",
+"g c #e4e4ebebfcfc",
+"h c #e7e7ffffffff",
+"j c Gray100",
+"k c None",
+/* pixels */
+"kkkkkk1pw1kkkkkk",
+"kkkkk1gfi>;kkkkk",
+"kkkk1ghure>&kkkk",
+"kkk1ghte009@<kkk",
+"kk1jhr009999#&kk",
+"k1dhy00999999+&k",
+"k4auq09999763$.k",
+"k1k1k1>99$*kw11k",
+"kkkkkk:q7o1kkkkk",
+"kkkkkk3e6+1kkkkk",
+"kkkkk18e9@;kkkkk",
+"kkkkk1eq6$Okkkkk",
+"kkkkk1r06>.kkkkk",
+"kkkkk4e65,.kkkkk",
+"kkkkk-2%##X1kkkk",
+"kkkkk1... =kkkkk"
+};
diff --git a/kommander/editor/pics/mkimages b/kommander/editor/pics/mkimages
new file mode 100644
index 00000000..370c0551
--- /dev/null
+++ b/kommander/editor/pics/mkimages
@@ -0,0 +1,3 @@
+#!/bin/sh
+#qembed *.xbm *.xpm small/*.xbm small/*.xpm small/*.png small/disabled/*.xpm small/disabled/*.xbm small/disabled/*.png mini/*.xpm mini/*.xbm background.png qtlogo.png > images.h
+./qembed *.xbm small/*.xpm small/*.png small/disabled/*.xpm small/disabled/*.png mini/*.xpm background.png qtlogo.png> images.h
diff --git a/kommander/editor/pics/mkpics b/kommander/editor/pics/mkpics
new file mode 100644
index 00000000..015714d7
--- /dev/null
+++ b/kommander/editor/pics/mkpics
@@ -0,0 +1,2 @@
+#!/bin/sh
+qembed small/filenew.xpm small/fileopen.xpm small/filesave.xpm small/print.xpm small/editcut.xpm small/editcopy.xpm small/editpaste.xpm small/searchfind.xpm small/undo.xpm small/redo.xpm > ../plugins/wizards/images.h
diff --git a/kommander/editor/pics/no.xbm b/kommander/editor/pics/no.xbm
new file mode 100644
index 00000000..9dc36cfd
--- /dev/null
+++ b/kommander/editor/pics/no.xbm
@@ -0,0 +1,10 @@
+#define no_width 25
+#define no_height 25
+static unsigned char no_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x00,
+ 0x00,0x80,0xff,0x01,0x00,0xc0,0xc3,0x03,0x00,0xe0,0x00,0x07,0x00,0xf0,0x01,
+ 0x0e,0x00,0xb0,0x03,0x0c,0x00,0x38,0x07,0x1c,0x00,0x18,0x0e,0x18,0x00,0x18,
+ 0x1c,0x18,0x00,0x18,0x38,0x18,0x00,0x18,0x70,0x18,0x00,0x38,0xe0,0x1c,0x00,
+ 0x30,0xc0,0x0d,0x00,0x70,0x80,0x0f,0x00,0xe0,0x00,0x07,0x00,0xc0,0xc3,0x03,
+ 0x00,0x80,0xff,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
diff --git a/kommander/editor/pics/qtlogo.png b/kommander/editor/pics/qtlogo.png
new file mode 100644
index 00000000..4e1a1472
--- /dev/null
+++ b/kommander/editor/pics/qtlogo.png
Binary files differ
diff --git a/kommander/editor/pics/sizeall.xbm b/kommander/editor/pics/sizeall.xbm
new file mode 100644
index 00000000..77324ab7
--- /dev/null
+++ b/kommander/editor/pics/sizeall.xbm
@@ -0,0 +1,10 @@
+#define sizeall_width 25
+#define sizeall_height 25
+static unsigned char sizeall_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,
+ 0x00,0x00,0x38,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x10,
+ 0x00,0x00,0x00,0x10,0x00,0x00,0x40,0x10,0x04,0x00,0x60,0x10,0x0c,0x00,0x70,
+ 0x10,0x1c,0x00,0xf8,0xff,0x3f,0x00,0x70,0x10,0x1c,0x00,0x60,0x10,0x0c,0x00,
+ 0x40,0x10,0x04,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0xfe,0x00,
+ 0x00,0x00,0x7c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
diff --git a/kommander/editor/pics/sizeb.xbm b/kommander/editor/pics/sizeb.xbm
new file mode 100644
index 00000000..e8912e4e
--- /dev/null
+++ b/kommander/editor/pics/sizeb.xbm
@@ -0,0 +1,10 @@
+#define sizeb_width 25
+#define sizeb_height 25
+static unsigned char sizeb_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,0xc0,0x03,
+ 0x00,0x00,0xc0,0x01,0x00,0x00,0xc0,0x02,0x00,0x00,0x40,0x04,0x00,0x00,0x00,
+ 0x08,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x40,0x04,0x00,
+ 0x00,0x80,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x80,0x07,0x00,0x00,0xc0,0x07,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
diff --git a/kommander/editor/pics/sizef.xbm b/kommander/editor/pics/sizef.xbm
new file mode 100644
index 00000000..cf8dd754
--- /dev/null
+++ b/kommander/editor/pics/sizef.xbm
@@ -0,0 +1,10 @@
+#define sizef_width 25
+#define sizef_height 25
+static unsigned char sizef_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x03,0x00,0x00,0xc0,
+ 0x03,0x00,0x00,0x80,0x03,0x00,0x00,0x40,0x03,0x00,0x00,0x20,0x02,0x00,0x00,
+ 0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x04,0x00,0x00,0x20,0x02,0x00,0x00,
+ 0x60,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xe0,0x03,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
diff --git a/kommander/editor/pics/sizeh.xbm b/kommander/editor/pics/sizeh.xbm
new file mode 100644
index 00000000..1b2f05cf
--- /dev/null
+++ b/kommander/editor/pics/sizeh.xbm
@@ -0,0 +1,10 @@
+#define sizeh_width 25
+#define sizeh_height 25
+static unsigned char sizeh_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x40,0x00,0x04,0x00,0x60,0x00,0x0c,0x00,0x70,0x00,0x1c,0x00,0xf8,
+ 0xff,0x3f,0x00,0x70,0x00,0x1c,0x00,0x60,0x00,0x0c,0x00,0x40,0x00,0x04,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
diff --git a/kommander/editor/pics/sizev.xbm b/kommander/editor/pics/sizev.xbm
new file mode 100644
index 00000000..9b2483a7
--- /dev/null
+++ b/kommander/editor/pics/sizev.xbm
@@ -0,0 +1,10 @@
+#define sizev_width 25
+#define sizev_height 25
+static unsigned char sizev_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
+ 0x00,0x00,0x1c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x08,
+ 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+ 0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,
+ 0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x7f,0x00,
+ 0x00,0x00,0x3e,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
diff --git a/kommander/editor/pics/small/adjustsize.png b/kommander/editor/pics/small/adjustsize.png
new file mode 100644
index 00000000..6ade1e22
--- /dev/null
+++ b/kommander/editor/pics/small/adjustsize.png
Binary files differ
diff --git a/kommander/editor/pics/small/book.xpm b/kommander/editor/pics/small/book.xpm
new file mode 100644
index 00000000..f7f73a62
--- /dev/null
+++ b/kommander/editor/pics/small/book.xpm
@@ -0,0 +1,32 @@
+/* XPM */
+/* Drawn by Mark Donohoe for the K Desktop Environment */
+/* See http://www.kde.org */
+static char*openbook[]={
+"22 22 4 1",
+"# c #000000",
+"a c #808080",
+"b c #ffffff",
+". c None",
+"......................",
+"......................",
+"......................",
+"......................",
+".....##...............",
+"....#ab#....###.......",
+"....#abb#.##bb#.......",
+"....#abbb#abbb###.....",
+"....#abbb#bbbb#a#.....",
+"....#abbb#abbb#a#.....",
+"....#abbb#bbbb#a#.....",
+"....#abbb#abbb#a#.....",
+"....#abbb#bbbb#a#.....",
+".....#abb#abb##a#.....",
+"......#ab#b##bba#.....",
+".......#a##aaaaa#.....",
+".......##a#######.....",
+"........##............",
+"......................",
+"......................",
+"......................",
+"......................"};
+
diff --git a/kommander/editor/pics/small/buttongroup.png b/kommander/editor/pics/small/buttongroup.png
new file mode 100644
index 00000000..d89e28fd
--- /dev/null
+++ b/kommander/editor/pics/small/buttongroup.png
Binary files differ
diff --git a/kommander/editor/pics/small/checkbox.png b/kommander/editor/pics/small/checkbox.png
new file mode 100644
index 00000000..ab6f53e0
--- /dev/null
+++ b/kommander/editor/pics/small/checkbox.png
Binary files differ
diff --git a/kommander/editor/pics/small/closebutton.png b/kommander/editor/pics/small/closebutton.png
new file mode 100644
index 00000000..63903b30
--- /dev/null
+++ b/kommander/editor/pics/small/closebutton.png
Binary files differ
diff --git a/kommander/editor/pics/small/combobox.png b/kommander/editor/pics/small/combobox.png
new file mode 100644
index 00000000..7d4890a7
--- /dev/null
+++ b/kommander/editor/pics/small/combobox.png
Binary files differ
diff --git a/kommander/editor/pics/small/connecttool.png b/kommander/editor/pics/small/connecttool.png
new file mode 100644
index 00000000..fca6748f
--- /dev/null
+++ b/kommander/editor/pics/small/connecttool.png
Binary files differ
diff --git a/kommander/editor/pics/small/customwidget.png b/kommander/editor/pics/small/customwidget.png
new file mode 100644
index 00000000..ab790e1f
--- /dev/null
+++ b/kommander/editor/pics/small/customwidget.png
Binary files differ
diff --git a/kommander/editor/pics/small/databrowser.xpm b/kommander/editor/pics/small/databrowser.xpm
new file mode 100644
index 00000000..6b6c11f7
--- /dev/null
+++ b/kommander/editor/pics/small/databrowser.xpm
@@ -0,0 +1,156 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 128 2",
+" c #c2c2d3",
+". c #9696a3",
+"X c #ababbb",
+"o c #dbdbef",
+"O c GhostWhite",
+"+ c #7d7d89",
+"@ c #7e7e89",
+"# c #61616a",
+"$ c #414147",
+"% c #dadaee",
+"& c #d8d8ec",
+"* c #71717b",
+"= c #46464c",
+"- c #47474e",
+"; c #efeffe",
+": c #acacbc",
+"> c #c1c1d3",
+", c #d9d9ed",
+"< c #ddddf1",
+"1 c #f6f6ff",
+"2 c #ddddf0",
+"3 c #f4f4ff",
+"4 c #a1a1ad",
+"5 c #606069",
+"6 c #82828e",
+"7 c #9897a3",
+"8 c #c2c2ca",
+"9 c #9494a1",
+"0 c #d5d5e9",
+"q c #61616b",
+"w c #f1f1fe",
+"e c #adadbc",
+"r c #f2f2ff",
+"t c #9f9fab",
+"y c #9595a3",
+"u c #606068",
+"i c #b0b0ba",
+"p c #706f77",
+"a c #45454b",
+"s c #e5e5f4",
+"d c #fefeff",
+"f c #9a9aa7",
+"g c #9797a5",
+"h c #f5f5ff",
+"j c #5c5c60",
+"k c #3f3f45",
+"l c #3d3d43",
+"z c #515157",
+"x c #828184",
+"c c #38383d",
+"v c #404046",
+"b c #9a9aa9",
+"n c #dadaed",
+"m c #7e7e8a",
+"M c #414146",
+"N c #4b4b50",
+"B c #4a4a50",
+"V c #f1f1ff",
+"C c #dcdcf0",
+"Z c #9e9eab",
+"A c #f3f3ff",
+"S c #f9f9ff",
+"D c #a5a5b0",
+"F c #59595f",
+"G c #e8e8eb",
+"H c #f7f7ff",
+"J c #62626b",
+"K c #adadbd",
+"L c #9696a4",
+"P c #00007b",
+"I c Gray0",
+"U c Gray100",
+"Y c None",
+"T c Gray0",
+"R c Gray0",
+"E c Gray0",
+"W c Gray0",
+"Q c Gray0",
+"! c Gray0",
+"~ c Gray0",
+"^ c Gray0",
+"/ c Gray0",
+"( c Gray0",
+") c Gray0",
+"_ c Gray0",
+"` c Gray0",
+"' c Gray0",
+"] c Gray0",
+"[ c Gray0",
+"{ c Gray0",
+"} c Gray0",
+"| c Gray0",
+" . c Gray0",
+".. c Gray0",
+"X. c Gray0",
+"o. c Gray0",
+"O. c Gray0",
+"+. c Gray0",
+"@. c Gray0",
+"#. c Gray0",
+"$. c Gray0",
+"%. c Gray0",
+"&. c Gray0",
+"*. c Gray0",
+"=. c Gray0",
+"-. c Gray0",
+";. c Gray0",
+":. c Gray0",
+">. c Gray0",
+",. c Gray0",
+"<. c Gray0",
+"1. c Gray0",
+"2. c Gray0",
+"3. c Gray0",
+"4. c Gray0",
+"5. c Gray0",
+"6. c Gray0",
+"7. c Gray0",
+"8. c Gray0",
+"9. c Gray0",
+"0. c Gray0",
+"q. c Gray0",
+"w. c Gray0",
+"e. c Gray0",
+"r. c Gray0",
+"t. c Gray0",
+"y. c Gray0",
+"u. c Gray0",
+/* pixels */
+"Y Y o o K K K K K K K K K K K Y Y Y Y Y Y Y ",
+"Y b . @ @ J J J J J J J J J p Y Y Y Y Y Y ",
+"Y X . . + + + + # # # $ c M Y Y Y Y Y Y ",
+"Y L U U O < X X X . @ q # - $ B Y Y Y Y Y Y ",
+"Y L U U U O O 2 X . m J - $ N Y Y Y Y Y Y ",
+"Y L U U U U S < I I I I I I I I I I I I I Y ",
+"Y L U U U U O 2 I U U U U U U U U U U U I Y ",
+"Y L U U U U O C I U U U U P U P U U U U I Y ",
+"Y L U U U U H o I U U U P P U P P U U U I Y ",
+"Y L U U U U 1 o I U U P P P U P P P U U I Y ",
+"Y L U U U U 1 o I U P P P P U P P P P U I Y ",
+"Y L U U U U h % I U P P P P U P P P P U I Y ",
+"Y L U U U U 3 % I U U P P P U P P P U U I Y ",
+"Y L U U U U 3 % I U U U P P U P P U U U I Y ",
+"Y L U U U U A n I U U U U P U P U U U U I Y ",
+"Y L U U U U r , I U U U U U U U U U U U I Y ",
+"Y L U U U U V , I I I I I I I I I I I I I Y ",
+"Y L U U U U w & > : L @ 5 = k j Y Y Y Y Y Y ",
+"Y L U U U U ; & > e L @ 5 = v z Y Y Y Y Y Y ",
+"Y L U U U d ; & : L + u a l F Y Y Y Y Y Y ",
+"Y D 4 i 8 G s 0 X L 6 * * * x Y Y Y Y Y Y ",
+"Y Y t 4 Z f g L L L L y 9 7 . Y Y Y Y Y Y Y "
+};
diff --git a/kommander/editor/pics/small/datatable.xpm b/kommander/editor/pics/small/datatable.xpm
new file mode 100644
index 00000000..182c3bc9
--- /dev/null
+++ b/kommander/editor/pics/small/datatable.xpm
@@ -0,0 +1,156 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 128 2",
+" c #c2c2d3",
+". c #9696a3",
+"X c #ababbb",
+"o c #dbdbef",
+"O c GhostWhite",
+"+ c #7d7d89",
+"@ c #7e7e89",
+"# c #61616a",
+"$ c #414147",
+"% c #dadaee",
+"& c #d8d8ec",
+"* c #71717b",
+"= c #46464c",
+"- c #47474e",
+"; c #efeffe",
+": c #acacbc",
+"> c #c1c1d3",
+", c #d9d9ed",
+"< c #ddddf1",
+"1 c #f6f6ff",
+"2 c #ddddf0",
+"3 c #f4f4ff",
+"4 c #a1a1ad",
+"5 c #606069",
+"6 c #82828e",
+"7 c #9897a3",
+"8 c #c2c2ca",
+"9 c #9494a1",
+"0 c #d5d5e9",
+"q c #61616b",
+"w c #f1f1fe",
+"e c #adadbc",
+"r c #f2f2ff",
+"t c #9f9fab",
+"y c #9595a3",
+"u c #606068",
+"i c #b0b0ba",
+"p c #706f77",
+"a c #45454b",
+"s c #e5e5f4",
+"d c #fefeff",
+"f c #9a9aa7",
+"g c #9797a5",
+"h c #f5f5ff",
+"j c #5c5c60",
+"k c #3f3f45",
+"l c #3d3d43",
+"z c #515157",
+"x c #828184",
+"c c #38383d",
+"v c #404046",
+"b c #9a9aa9",
+"n c #dadaed",
+"m c #7e7e8a",
+"M c #414146",
+"N c #4b4b50",
+"B c #4a4a50",
+"V c #f1f1ff",
+"C c #dcdcf0",
+"Z c #9e9eab",
+"A c #f3f3ff",
+"S c #f9f9ff",
+"D c #a5a5b0",
+"F c #59595f",
+"G c #e8e8eb",
+"H c #f7f7ff",
+"J c #62626b",
+"K c #adadbd",
+"L c #9696a4",
+"P c #868692",
+"I c Gray0",
+"U c Gray100",
+"Y c None",
+"T c Gray0",
+"R c Gray0",
+"E c Gray0",
+"W c Gray0",
+"Q c Gray0",
+"! c Gray0",
+"~ c Gray0",
+"^ c Gray0",
+"/ c Gray0",
+"( c Gray0",
+") c Gray0",
+"_ c Gray0",
+"` c Gray0",
+"' c Gray0",
+"] c Gray0",
+"[ c Gray0",
+"{ c Gray0",
+"} c Gray0",
+"| c Gray0",
+" . c Gray0",
+".. c Gray0",
+"X. c Gray0",
+"o. c Gray0",
+"O. c Gray0",
+"+. c Gray0",
+"@. c Gray0",
+"#. c Gray0",
+"$. c Gray0",
+"%. c Gray0",
+"&. c Gray0",
+"*. c Gray0",
+"=. c Gray0",
+"-. c Gray0",
+";. c Gray0",
+":. c Gray0",
+">. c Gray0",
+",. c Gray0",
+"<. c Gray0",
+"1. c Gray0",
+"2. c Gray0",
+"3. c Gray0",
+"4. c Gray0",
+"5. c Gray0",
+"6. c Gray0",
+"7. c Gray0",
+"8. c Gray0",
+"9. c Gray0",
+"0. c Gray0",
+"q. c Gray0",
+"w. c Gray0",
+"e. c Gray0",
+"r. c Gray0",
+"t. c Gray0",
+"y. c Gray0",
+"u. c Gray0",
+/* pixels */
+"Y Y o o K K K K K K K K K K K Y Y Y Y Y Y Y ",
+"Y b . @ @ J J J J J J J J J p Y Y Y Y Y Y ",
+"Y X . . + + + + # # # $ c M Y Y Y Y Y Y ",
+"Y L U U O < X X X . @ q # - $ B Y Y Y Y Y Y ",
+"Y L U U U O O 2 X . m J - $ N Y Y Y Y Y Y ",
+"Y L U U U U S < I I I I I I I I I I I I I Y ",
+"Y L U U U U O 2 I U U I U U U U U U U U I Y ",
+"Y L U U U U O C I U U I U U U U U U U U I Y ",
+"Y L U U U U H o I I I I I I I I I I I I I Y ",
+"Y L U U U U 1 o I U U I U U U U U U U U I Y ",
+"Y L U U U U 1 o I P P I P P P P P P P P I Y ",
+"Y L U U U U h % I U U I U U U U U U U U I Y ",
+"Y L U U U U 3 % I P P I P P P P P P P P I Y ",
+"Y L U U U U 3 % I U U I U U U U U U U U I Y ",
+"Y L U U U U A n I P P I P P P P P P P P I Y ",
+"Y L U U U U r , I U U I U U U U U U U U I Y ",
+"Y L U U U U V , I I I I I I I I I I I I I Y ",
+"Y L U U U U w & > : L @ 5 = k j Y Y Y Y Y Y ",
+"Y L U U U U ; & > e L @ 5 = v z Y Y Y Y Y Y ",
+"Y L U U U d ; & : L + u a l F Y Y Y Y Y Y ",
+"Y D 4 i 8 G s 0 X L 6 * * * x Y Y Y Y Y Y ",
+"Y Y t 4 Z f g L L L L y 9 7 . Y Y Y Y Y Y Y "
+};
diff --git a/kommander/editor/pics/small/dataview.xpm b/kommander/editor/pics/small/dataview.xpm
new file mode 100644
index 00000000..aeb8a9cc
--- /dev/null
+++ b/kommander/editor/pics/small/dataview.xpm
@@ -0,0 +1,156 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 128 2",
+" c #ababbb",
+". c #9696a3",
+"X c #c2c2d3",
+"o c #7e7e89",
+"O c #7d7d89",
+"+ c GhostWhite",
+"@ c #dbdbef",
+"# c #61616a",
+"$ c #71717b",
+"% c #dadaee",
+"& c #414147",
+"* c #d8d8ec",
+"= c Gray56",
+"- c #d9d9ed",
+"; c #ddddf0",
+": c Gray94",
+"> c #c1c1d3",
+", c #efeffe",
+"< c #46464c",
+"1 c #a1a1ad",
+"2 c #acacbc",
+"3 c #47474e",
+"4 c #f4f4ff",
+"5 c #f6f6ff",
+"6 c #606069",
+"7 c #ddddf1",
+"8 c #b2b2b2",
+"9 c #bcbcbc",
+"0 c gainsboro",
+"q c #38383d",
+"w c #9595a3",
+"e c #a5a5b0",
+"r c #717171",
+"t c #020202",
+"y c #7b7b7b",
+"u c #3e3e3e",
+"i c #b0b0ba",
+"p c #9a9aa7",
+"a c #fefeff",
+"s c Gray6",
+"d c #3f3f45",
+"f c #626262",
+"g c #7e7e8a",
+"h c Gray53",
+"j c #464646",
+"k c #7c7c7c",
+"l c Gray15",
+"z c #d5d5e9",
+"x c #dddddd",
+"c c #dcdcf0",
+"v c #828184",
+"b c #3d3d43",
+"n c Gray9",
+"m c #e9e9e9",
+"M c #59595f",
+"N c Gray4",
+"B c #353535",
+"V c #9797a5",
+"C c #5c5c60",
+"Z c Gray80",
+"A c #9897a3",
+"S c Gray93",
+"D c #0b0b0b",
+"F c #808080",
+"G c Gray95",
+"H c #f7f7ff",
+"J c #45454b",
+"K c #404046",
+"L c #c1c1c1",
+"P c #f3f3ff",
+"I c #585858",
+"U c Gray84",
+"Y c #909090",
+"T c #2a2a2a",
+"R c #4b4b50",
+"E c Gray23",
+"W c Gray96",
+"Q c #444444",
+"! c #f9f9ff",
+"~ c Gray35",
+"^ c #111111",
+"/ c Gray34",
+"( c Gray44",
+") c #e8e8eb",
+"_ c #e5e5f4",
+"` c #c2c2ca",
+"' c Gray74",
+"] c Gray52",
+"[ c #9e9eab",
+"{ c #f1f1fe",
+"} c #fefefe",
+"| c #f9f9f9",
+" . c #414146",
+".. c #f1f1ff",
+"X. c #9f9fab",
+"o. c #f2f2ff",
+"O. c #515157",
+"+. c #4a4a50",
+"@. c Gray5",
+"#. c Gray1",
+"$. c #606068",
+"%. c #dadaed",
+"&. c #686868",
+"*. c #706f77",
+"=. c #9a9aa9",
+"-. c #adadbc",
+";. c #f5f5ff",
+":. c #9494a1",
+">. c #61616b",
+",. c Gray77",
+"<. c #82828e",
+"1. c #62626b",
+"2. c #adadbd",
+"3. c #9696a4",
+"4. c Gray0",
+"5. c Gray100",
+"6. c None",
+"7. c Gray0",
+"8. c Gray0",
+"9. c Gray0",
+"0. c Gray0",
+"q. c Gray0",
+"w. c Gray0",
+"e. c Gray0",
+"r. c Gray0",
+"t. c Gray0",
+"y. c Gray0",
+"u. c Gray0",
+/* pixels */
+"6.6.@ @ 2.2.2.2.2.2.2.2.2.2.2.6.6.6.6.6.6.6.",
+"6.X =.. o o 1.1.1.1.1.1.1.1.1.*.6.6.6.6.6.6.",
+"6. X X . . O O O O # # # & q .6.6.6.6.6.6.",
+"6.3.5.5.+ 7 . o >.# 3 & +.6.6.6.6.6.6.",
+"6.3.5.5.5.+ + ; X . g 1.3 & R 6.6.6.6.6.6.",
+"6.3.5.5.5.5.! 7 4.4.4.4.4.4.4.4.4.4.4.4.4.6.",
+"6.3.5.5.5.5.+ ; 4.5.5.5.5.5.5.5.5.5.5.5.4.6.",
+"6.3.5.5.5.5.+ c 4.5.5.5.5.5.5.5.5.5.5.5.4.6.",
+"6.3.5.5.5.5.H @ 4.U F j l T ~ Y x : S 5.4.6.",
+"6.3.5.5.5.5.5 @ 4.N D @.4.4.u / n = ,.m 4.6.",
+"6.3.5.5.5.5.5 @ 4.4.Q f 4.4.s ^ ( : ] 8 4.6.",
+"6.3.5.5.5.5.;.% 4.#.I L E 4.t B 0 5.9 = 4.6.",
+"6.3.5.5.5.5.4 % 4.' r k h &.y Z W | G } 4.6.",
+"6.3.5.5.5.5.4 % 4.5.5.5.5.5.5.5.5.5.5.5.4.6.",
+"6.3.5.5.5.5.P %.4.5.5.5.5.5.5.5.5.5.5.5.4.6.",
+"6.3.5.5.5.5.o.- 4.5.5.5.5.5.5.5.5.5.5.5.4.6.",
+"6.3.5.5.5.5...- 4.4.4.4.4.4.4.4.4.4.4.4.4.6.",
+"6.3.5.5.5.5.{ * > 2 3.o 6 < d C 6.6.6.6.6.6.",
+"6.3.5.5.5.5., * > -.3.o 6 < K O.6.6.6.6.6.6.",
+"6.3.5.5.5.a , * X 2 3.O $.J b M 6.6.6.6.6.6.",
+"6.e 1 i ` ) _ z X 3.<.$ $ $ v 6.6.6.6.6.6.",
+"6.6.X.1 [ p V 3.3.3.3.w :.A . 6.6.6.6.6.6.6."
+};
diff --git a/kommander/editor/pics/small/dateedit.png b/kommander/editor/pics/small/dateedit.png
new file mode 100644
index 00000000..48286bec
--- /dev/null
+++ b/kommander/editor/pics/small/dateedit.png
Binary files differ
diff --git a/kommander/editor/pics/small/datepicker.png b/kommander/editor/pics/small/datepicker.png
new file mode 100644
index 00000000..4bcc6450
--- /dev/null
+++ b/kommander/editor/pics/small/datepicker.png
Binary files differ
diff --git a/kommander/editor/pics/small/datetimeedit.png b/kommander/editor/pics/small/datetimeedit.png
new file mode 100644
index 00000000..68a56737
--- /dev/null
+++ b/kommander/editor/pics/small/datetimeedit.png
Binary files differ
diff --git a/kommander/editor/pics/small/dial.png b/kommander/editor/pics/small/dial.png
new file mode 100644
index 00000000..260033c2
--- /dev/null
+++ b/kommander/editor/pics/small/dial.png
Binary files differ
diff --git a/kommander/editor/pics/small/disabled/adjustsize.png b/kommander/editor/pics/small/disabled/adjustsize.png
new file mode 100644
index 00000000..56bbd3ec
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/adjustsize.png
Binary files differ
diff --git a/kommander/editor/pics/small/disabled/connecttool.png b/kommander/editor/pics/small/disabled/connecttool.png
new file mode 100644
index 00000000..173da192
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/connecttool.png
Binary files differ
diff --git a/kommander/editor/pics/small/disabled/editbreaklayout.png b/kommander/editor/pics/small/disabled/editbreaklayout.png
new file mode 100644
index 00000000..17412eff
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/editbreaklayout.png
Binary files differ
diff --git a/kommander/editor/pics/small/disabled/editcopy.png b/kommander/editor/pics/small/disabled/editcopy.png
new file mode 100644
index 00000000..0392669a
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/editcopy.png
Binary files differ
diff --git a/kommander/editor/pics/small/disabled/editcut.xpm b/kommander/editor/pics/small/disabled/editcut.xpm
new file mode 100644
index 00000000..846287d2
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/editcut.xpm
@@ -0,0 +1,32 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 4 1",
+" c Gray100",
+". c #848284",
+"X c Gray0",
+"o c none",
+/* pixels */
+"ooooooo.ooooo.oooooooo",
+"ooooooo. oooo. ooooooo",
+"ooooooo. oooo. ooooooo",
+"ooooooo. ooo.. ooooooo",
+"ooooooo..ooo. ooooooo",
+"oooooooo. oo. oooooooo",
+"oooooooo..o.. oooooooo",
+"ooooooooo... oooooooo",
+"ooooooooo... ooooooooo",
+"oooooooooo. ooooooooo",
+"oooooooooo. oooooooooo",
+"ooooooooo.o.oooooooooo",
+"oooooooo.. ...oooooooo",
+"ooooooo.o. . .ooooooo",
+"oooooo.o . . oo.oooooo",
+"ooooo.o o. . ooo.ooooo",
+"oooo.o oo. . ooo. oooo",
+"oooo. ooo. o.ooo. oooo",
+"oooo. ooo. o. o.o oooo",
+"oooo. oo.o oo..o ooooo",
+"ooooo...o oooo oooooo",
+"oooooo ooooooooooooo"
+};
diff --git a/kommander/editor/pics/small/disabled/editgrid.png b/kommander/editor/pics/small/disabled/editgrid.png
new file mode 100644
index 00000000..1eb30e07
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/editgrid.png
Binary files differ
diff --git a/kommander/editor/pics/small/disabled/edithlayout.png b/kommander/editor/pics/small/disabled/edithlayout.png
new file mode 100644
index 00000000..bb347268
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/edithlayout.png
Binary files differ
diff --git a/kommander/editor/pics/small/disabled/edithlayoutsplit.png b/kommander/editor/pics/small/disabled/edithlayoutsplit.png
new file mode 100644
index 00000000..be482a4a
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/edithlayoutsplit.png
Binary files differ
diff --git a/kommander/editor/pics/small/disabled/editpaste.png b/kommander/editor/pics/small/disabled/editpaste.png
new file mode 100644
index 00000000..90a56778
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/editpaste.png
Binary files differ
diff --git a/kommander/editor/pics/small/disabled/editslots.xpm b/kommander/editor/pics/small/disabled/editslots.xpm
new file mode 100644
index 00000000..872b7974
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/editslots.xpm
@@ -0,0 +1,44 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 16 1",
+" c Gray100",
+". c #fefefe",
+"X c Gray99",
+"o c #c89a6d",
+"O c #c89544",
+"+ c #c58d52",
+"@ c #848284",
+"# c Gray0",
+"$ c none",
+"% c Gray0",
+"& c Gray0",
+"* c Gray0",
+"= c Gray0",
+"- c Gray0",
+"; c Gray0",
+": c Gray0",
+/* pixels */
+"$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$@@@$$$$$$$$$$$$$",
+"$$$$$@@ @ $$$$$$$$$$$$",
+"$$$$@@ @ $$$@@@$$$$$$",
+"$$$@@ $@ $@@@ @@@$$$$",
+"$$$@ $$@ $@ $ @ $$$",
+"$$@@ $$$@ @@ $$$$@@$$$",
+"@@@ $$$@ @ $$$$$@@@@",
+"@@@ $$$$@ @ $$$$$$@@@@",
+"$ @@$$$$@ @@$$$$$@@ ",
+"$$$@ $$$@ $@ $$$$@ $$",
+"$$$@@$$$@ $@@@$@@@ $$$",
+"$$$$@@$$@ $$ @@@ $$$",
+"$$$$$@@$@ $$$$ $$$$$",
+"$$$$$$@@@ $$$$$$$$$$$$",
+"$$$$$$$ $$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$"
+};
diff --git a/kommander/editor/pics/small/disabled/editvlayout.png b/kommander/editor/pics/small/disabled/editvlayout.png
new file mode 100644
index 00000000..a5de1cdc
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/editvlayout.png
Binary files differ
diff --git a/kommander/editor/pics/small/disabled/editvlayoutsplit.png b/kommander/editor/pics/small/disabled/editvlayoutsplit.png
new file mode 100644
index 00000000..fdce42d8
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/editvlayoutsplit.png
Binary files differ
diff --git a/kommander/editor/pics/small/disabled/filesave.png b/kommander/editor/pics/small/disabled/filesave.png
new file mode 100644
index 00000000..0f09208f
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/filesave.png
Binary files differ
diff --git a/kommander/editor/pics/small/disabled/layout.xpm b/kommander/editor/pics/small/disabled/layout.xpm
new file mode 100644
index 00000000..ccb40df0
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/layout.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 14 1",
+" c #676767676767",
+". c #6f6f6f6f6f6f",
+"X c #777777777777",
+"o c Gray50",
+"O c Gray53",
+"+ c Gray56",
+"@ c #979797979797",
+"# c #9f9f9f9f9f9f",
+"$ c #a7a7a7a7a7a7",
+"% c #afafafafafaf",
+"& c #b7b7b7b7b7b7",
+"* c Gray75",
+"= c Gray78",
+"- c Gray81",
+/* pixels */
+"**=======****========*",
+"==-------=***-=--=--==",
+"=-=-=-===****=========",
+"&%%%%%%%%%&&%%%%%%%%%&",
+"%+OOOOOOO@%%#OOOOOOO+%",
+"%OXXXXXXX+%%+XXXXXXXO$",
+"&$#######$&&$#######$&",
+"*&&&*&*&*&***&*&*&*&&*",
+"**==*===******==*==***",
+"==-----=-***=-=--=-===",
+"*=-------*&**=--===-==",
+"&&&&&&&&&%&&&&&%&&&%&&",
+"%@+++++++@%%#+++++++@%",
+"%+oooXoXo+%%@oooooooO%",
+"&$#######$&&%#######$&",
+"*&&&&&&&&&**&&&&&&&&&*",
+"*********&************",
+"*=-------***=-------=*",
+"*=-------**&==-----===",
+"&&&&&&&&&%&&&&&&&&&&&*",
+"&#+++++++@%%#+++++++#%",
+"%O.......O$%O... ...o$"
+};
diff --git a/kommander/editor/pics/small/disabled/left.xpm b/kommander/editor/pics/small/disabled/left.xpm
new file mode 100644
index 00000000..2d1323f4
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/left.xpm
@@ -0,0 +1,32 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 4 1",
+" c Gray100",
+". c #848284",
+"X c Gray0",
+"o c none",
+/* pixels */
+"oooooooooooooooooooooo",
+"oooooooooooooooooooooo",
+"oooooooo..oooooooooooo",
+"ooooooo...oooooooooooo",
+"oooooo....oooooooooooo",
+"ooooo.....oooooooooooo",
+"oooo... ..oooooooooooo",
+"ooo...o ..oooooooooooo",
+"oo...oo ..............",
+"o...ooo ..............",
+"...oooo ..",
+"...oooooooooooooooo ..",
+" ...oooo..............",
+" ...oo ..............",
+"o ...o .. o",
+"oo ... ..oooooooooooo",
+"ooo .....oooooooooooo",
+"oooo ....oooooooooooo",
+"ooooo ...oooooooooooo",
+"oooooo ..oooooooooooo",
+"ooooooo ooooooooooooo",
+"oooooooooooooooooooooo"
+};
diff --git a/kommander/editor/pics/small/disabled/redo.png b/kommander/editor/pics/small/disabled/redo.png
new file mode 100644
index 00000000..198368f0
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/redo.png
Binary files differ
diff --git a/kommander/editor/pics/small/disabled/right.xpm b/kommander/editor/pics/small/disabled/right.xpm
new file mode 100644
index 00000000..c9414419
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/right.xpm
@@ -0,0 +1,32 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 4 1",
+" c Gray100",
+". c #848284",
+"X c Gray0",
+"o c none",
+/* pixels */
+"oooooooooooooooooooooo",
+"oooooooooooooooooooooo",
+"oooooooooooo..oooooooo",
+"oooooooooooo...ooooooo",
+"oooooooooooo....oooooo",
+"oooooooooooo.....ooooo",
+"oooooooooooo.. ...oooo",
+"oooooooooooo.. o...ooo",
+".............. oo...oo",
+".............. ooo...o",
+".. oooo...",
+".. oooooooooooooooo...",
+"..............oooo... ",
+".............. oo... ",
+"o .. o... o",
+"oooooooooooo.. ... oo",
+"oooooooooooo..... ooo",
+"oooooooooooo.... oooo",
+"oooooooooooo... ooooo",
+"oooooooooooo.. oooooo",
+"ooooooooooooo ooooooo",
+"oooooooooooooooooooooo"
+};
diff --git a/kommander/editor/pics/small/disabled/searchfind.png b/kommander/editor/pics/small/disabled/searchfind.png
new file mode 100644
index 00000000..5da4456a
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/searchfind.png
Binary files differ
diff --git a/kommander/editor/pics/small/disabled/undo.png b/kommander/editor/pics/small/disabled/undo.png
new file mode 100644
index 00000000..387cbe94
--- /dev/null
+++ b/kommander/editor/pics/small/disabled/undo.png
Binary files differ
diff --git a/kommander/editor/pics/small/editbreaklayout.png b/kommander/editor/pics/small/editbreaklayout.png
new file mode 100644
index 00000000..badbb8e7
--- /dev/null
+++ b/kommander/editor/pics/small/editbreaklayout.png
Binary files differ
diff --git a/kommander/editor/pics/small/editcopy.png b/kommander/editor/pics/small/editcopy.png
new file mode 100644
index 00000000..2f931cb2
--- /dev/null
+++ b/kommander/editor/pics/small/editcopy.png
Binary files differ
diff --git a/kommander/editor/pics/small/editcut.png b/kommander/editor/pics/small/editcut.png
new file mode 100644
index 00000000..a911482d
--- /dev/null
+++ b/kommander/editor/pics/small/editcut.png
Binary files differ
diff --git a/kommander/editor/pics/small/editdelete.xpm b/kommander/editor/pics/small/editdelete.xpm
new file mode 100644
index 00000000..2221114f
--- /dev/null
+++ b/kommander/editor/pics/small/editdelete.xpm
@@ -0,0 +1,226 @@
+/* XPM */
+static char * editdelete_xpm[] = {
+"22 22 201 2",
+" c None",
+". c #454545",
+"+ c #8B8B8B",
+"@ c #282828",
+"# c #464646",
+"$ c #6F6F6F",
+"% c #F7F7F7",
+"& c #FDFDFD",
+"* c #5A5A5A",
+"= c #C2C2C2",
+"- c #424242",
+"; c #F0F0F0",
+"> c #D7D7D7",
+", c #CDCDCD",
+"' c #EBEBEB",
+") c #CFCFCF",
+"! c #AAAAAA",
+"~ c #E5E5E5",
+"{ c #686868",
+"] c #F5F5F5",
+"^ c #C9C9C9",
+"/ c #313131",
+"( c #F4F4F4",
+"_ c #DCDCDC",
+": c #E0E0E0",
+"< c #E3E3E3",
+"[ c #D0D0D0",
+"} c #656363",
+"| c #B5B5B5",
+"1 c #A8A8A8",
+"2 c #252525",
+"3 c #F1F1F1",
+"4 c #B8B8B8",
+"5 c #E7E7E7",
+"6 c #B9B9B9",
+"7 c #D2D2D2",
+"8 c #B3B3B3",
+"9 c #E8E8E8",
+"0 c #9E9D9D",
+"a c #7A797A",
+"b c #676767",
+"c c #4E4E4E",
+"d c #161616",
+"e c #A5A4A4",
+"f c #B4B4B4",
+"g c #DFDFDF",
+"h c #8F8E8E",
+"i c #9F9F9E",
+"j c #F2F0EE",
+"k c #E7E2DF",
+"l c #D1CBC6",
+"m c #ACA39D",
+"n c #211F1E",
+"o c #F2F2F2",
+"p c #C1C1C1",
+"q c #D8D7D7",
+"r c #BEBEBE",
+"s c #EEEEEE",
+"t c #D1D1D1",
+"u c #C8C6C5",
+"v c #CCC8C4",
+"w c #D1CBC5",
+"x c #DCD2CA",
+"y c #E4D7CD",
+"z c #2E2B29",
+"A c #EFEEEE",
+"B c #E2DEDC",
+"C c #D7D2CE",
+"D c #D6CEC8",
+"E c #DBD1C8",
+"F c #E4D6CC",
+"G c #E6D6C8",
+"H c #2E2A27",
+"I c #ECECEC",
+"J c #A4A3A3",
+"K c #CDCDCC",
+"L c #A1A09F",
+"M c #BEBBB9",
+"N c #E4DED8",
+"O c #BAB3AD",
+"P c #9D958E",
+"Q c #B6ACA2",
+"R c #BAACA1",
+"S c #E3D0C0",
+"T c #2D2926",
+"U c #939291",
+"V c #C5C2C0",
+"W c #95918E",
+"X c #9E9893",
+"Y c #B8AFA7",
+"Z c #8F867F",
+"` c #978D83",
+" . c #CFBEAF",
+".. c #E1CCB9",
+"+. c #2D2824",
+"@. c #F3F3F3",
+"#. c #D1D0CF",
+"$. c #DFDBD8",
+"%. c #CEC8C2",
+"&. c #C5BEB7",
+"*. c #D3C8BE",
+"=. c #C3B6AC",
+"-. c #D1C1B4",
+";. c #D4C2B3",
+">. c #D2BDAB",
+",. c #DFC5B0",
+"'. c #2C2723",
+"). c #000000",
+"!. c #6E6E6E",
+"~. c #EFEDEC",
+"{. c #C5C1BE",
+"]. c #D8D1CC",
+"^. c #C4BBB4",
+"/. c #BAB0A7",
+"(. c #CABCB1",
+"_. c #B7A89C",
+":. c #C8B6A7",
+"<. c #CCB8A5",
+"[. c #C8B19D",
+"}. c #DBBFA7",
+"|. c #28231E",
+"1. c #333333",
+"2. c #6E6E6F",
+"3. c #808080",
+"4. c #6D6C6B",
+"5. c #E9E4E0",
+"6. c #99938F",
+"7. c #9B948E",
+"8. c #A39991",
+"9. c #9E9289",
+"0. c #AEA094",
+"a. c #BAA99A",
+"b. c #9A897B",
+"c. c #9D8A7A",
+"d. c #AC9582",
+"e. c #D9B99E",
+"f. c #38332E",
+"g. c #999999",
+"h. c #505050",
+"i. c #2D2D2D",
+"j. c #A4A4A4",
+"k. c #5E5E5F",
+"l. c #4B4B4B",
+"m. c #6C6A67",
+"n. c #F2EAE2",
+"o. c #F6EAE1",
+"p. c #F4E6DB",
+"q. c #F2E2D3",
+"r. c #F1DECD",
+"s. c #EFD8C5",
+"t. c #EDD4BE",
+"u. c #EBCFB7",
+"v. c #EACAB0",
+"w. c #E8C5A8",
+"x. c #D7B496",
+"y. c #2D2621",
+"z. c #818181",
+"A. c #7A7A7A",
+"B. c #707070",
+"C. c #4D4D4D",
+"D. c #444444",
+"E. c #4A4A4A",
+"F. c #575552",
+"G. c #B2AAA3",
+"H. c #B1A69E",
+"I. c #B0A399",
+"J. c #AD9D90",
+"K. c #AC998A",
+"L. c #AA9685",
+"M. c #A9927F",
+"N. c #A88F7A",
+"O. c #A68B73",
+"P. c #A3856C",
+"Q. c #25201B",
+"R. c #595959",
+"S. c #3A3A3A",
+"T. c #434343",
+"U. c #3F3F3F",
+"V. c #292929",
+"W. c #040404",
+"X. c #2B2B2B",
+"Y. c #545454",
+"Z. c #6D6D6D",
+"`. c #3D3D3D",
+" + c #212121",
+".+ c #898989",
+"++ c #272727",
+"@+ c #010101",
+"#+ c #787878",
+"$+ c #6A6A6A",
+"%+ c #606060",
+"&+ c #0B0B0B",
+"*+ c #555555",
+"=+ c #525252",
+"-+ c #868686",
+";+ c #515151",
+">+ c #0C0C0C",
+",+ c #777777",
+"'+ c #7C7C7C",
+")+ c #343434",
+"!+ c #171717",
+" ",
+" . + + + + + + + @ # ",
+" $ % & & & & & & * = - ",
+" $ ; > , ' ) ! ~ { ] ^ / ",
+" $ ( _ ' : < [ ; } | [ 1 2 ",
+" $ 3 4 5 6 7 8 9 0 a b c d ",
+" $ ' e f g ^ h i j k l m n ",
+" $ o p q r s t u v w x y z ",
+" $ ( 7 < [ A B C D E F G H ",
+" $ I J K L M N O P Q R S T ",
+" $ s 0 U V W X Y Z ` ...+. ",
+" $ @.#.$.%.&.*.=.-.;.>.,.'. ",
+" ).!.~.{.].^./.(._.:.<.[.}.|.). ",
+" 1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i. ",
+" ).j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.# z.A. ",
+" B.C.D.E.F.G.H.I.0.J.K.L.M.N.O.P.Q.- R.$ S.",
+" A.T.U.V.).).).).).).).).).).).).W.X.Y.Z.`.",
+" +.+++@+).).).).).).).).).).).).).W.. #+ ",
+" $+%+. ).).).).).).).).).).).).&+*+{ =+ ",
+" X.D.-+-+;+>+>+>+>+>+>+>+,+-+'+)+ ",
+" ).).D.A.A.A.A.A.A.A.!+).). ",
+" "};
diff --git a/kommander/editor/pics/small/editgrid.png b/kommander/editor/pics/small/editgrid.png
new file mode 100644
index 00000000..f2b18e8a
--- /dev/null
+++ b/kommander/editor/pics/small/editgrid.png
Binary files differ
diff --git a/kommander/editor/pics/small/edithlayout.png b/kommander/editor/pics/small/edithlayout.png
new file mode 100644
index 00000000..68e3c76a
--- /dev/null
+++ b/kommander/editor/pics/small/edithlayout.png
Binary files differ
diff --git a/kommander/editor/pics/small/edithlayoutsplit.png b/kommander/editor/pics/small/edithlayoutsplit.png
new file mode 100644
index 00000000..86c2cfdb
--- /dev/null
+++ b/kommander/editor/pics/small/edithlayoutsplit.png
Binary files differ
diff --git a/kommander/editor/pics/small/editlower.xpm b/kommander/editor/pics/small/editlower.xpm
new file mode 100644
index 00000000..43ca1ebc
--- /dev/null
+++ b/kommander/editor/pics/small/editlower.xpm
@@ -0,0 +1,113 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 85 1",
+" c #dede5a5a3939",
+". c #ffff5a5a3939",
+"X c #ffff63633939",
+"o c #dede6b6b5252",
+"O c #d6d673735a5a",
+"+ c #cece73736363",
+"@ c #cece7b7b6b6b",
+"# c #c6c67b7b7373",
+"$ c #d6d673736363",
+"% c #e7e763634242",
+"& c #e7e763634a4a",
+"* c #efef63634242",
+"= c #efef7b7b5a5a",
+"- c #f7f76b6b4a4a",
+"; c #ffff63634242",
+": c #ffff6b6b4242",
+"> c #ffff6b6b4a4a",
+", c #ffff73734a4a",
+"< c #ffff73735252",
+"1 c #ffff7b7b5a5a",
+"2 c #949484847b7b",
+"3 c #bdbd84847b7b",
+"4 c #cece84847373",
+"5 c #cece8c8c7b7b",
+"6 c #d6d684847373",
+"7 c #dede8c8c7b7b",
+"8 c #e7e784846b6b",
+"9 c #efef84846363",
+"0 c #efef8c8c7373",
+"q c #efef94947b7b",
+"w c #ffff84846363",
+"e c #ffff8c8c7373",
+"r c #ffff94947b7b",
+"t c #94948c8c8c8c",
+"y c #9c9c8c8c8c8c",
+"u c #9c9c94949494",
+"i c Gray61",
+"p c #b5b594949494",
+"a c #bdbda5a59c9c",
+"s c #a5a5a5a5a5a5",
+"d c #adada5a5a5a5",
+"f c #b5b5adadadad",
+"g c #bdbdadada5a5",
+"h c #bdbdb5b5b5b5",
+"j c #bdbdbdbdb5b5",
+"k c Gray74",
+"l c #cece8c8c8484",
+"z c #c6c694948c8c",
+"x c #cece94948c8c",
+"c c #cece9c9c8c8c",
+"v c #c6c69c9c9494",
+"b c #c6c69c9c9c9c",
+"n c #d6d69c9c8c8c",
+"m c #cecea5a59c9c",
+"M c #c6c6adada5a5",
+"N c #c6c6b5b5adad",
+"B c #c6c6b5b5b5b5",
+"V c #c6c6bdbdbdbd",
+"C c #efef9c9c8484",
+"Z c #efef9c9c8c8c",
+"A c #efefa5a59494",
+"S c #c0c0c0c0c0c0",
+"D c #c6c6c6c6c6c6",
+"F c #cecec6c6c6c6",
+"G c #cecececec6c6",
+"H c #d6d6cececece",
+"J c #d6d6d6d6cece",
+"K c #deded6d6d6d6",
+"L c #dedededed6d6",
+"P c #e7e7deded6d6",
+"I c #e7e7dededede",
+"U c #efefe7e7dede",
+"Y c #ffffefefdede",
+"T c #e7e7e7e7e7e7",
+"R c #efefe7e7e7e7",
+"E c #efefefefe7e7",
+"W c #f7f7efefe7e7",
+"Q c #ffffefefe7e7",
+"! c #f7f7f7f7efef",
+"~ c #fffff7f7efef",
+"^ c Gray97",
+"/ c #fffff7f7f7f7",
+"( c #fffffffff7f7",
+") c Gray100",
+"_ c None",
+/* pixels */
+"+&oO+$@#345zpzvk______",
+"=,<>>>,>:>>::> i______",
+"8>>>,>>,>,>>>,%u______",
+"6:>>>>>>>>>>>>%t______",
+"7:>>>>>>>>>>>,*t______",
+"l:>>:>>:>>:>>>*y______",
+"x>:>>>:;XXXXXX.2______",
+"c:>>::1AZCCq009ykkkhhk",
+"a;:>:;r)))^^(^^!ERUITs",
+"m>:>:Xe((((((((((((()d",
+"g>:;:;w(/~~~/~/~~/~~)d",
+"f-;>:;1~(~//~~~~/~(~)s",
+"N-:;;;<Q(~~~/~/~~~~~)f",
+"Bo;:;;<Y/~/~~~~~~~~~(j",
+"VMmbvnnU(~~~~~~~~~~~)j",
+"______kT/~~~~~~~~~~~(k",
+"______DK(~~~~~~~~~~~)j",
+"______kI~~~~~~~~~~~~(k",
+"______kK~~~~~~~~~!~~(j",
+"______DG/~~~!~~!~~~~(V",
+"_______K~~~~~~~~~~~~(V",
+"_______kGDkHFDKJHPKLWF"
+};
diff --git a/kommander/editor/pics/small/editpaste.png b/kommander/editor/pics/small/editpaste.png
new file mode 100644
index 00000000..e395fc76
--- /dev/null
+++ b/kommander/editor/pics/small/editpaste.png
Binary files differ
diff --git a/kommander/editor/pics/small/editraise.xpm b/kommander/editor/pics/small/editraise.xpm
new file mode 100644
index 00000000..4e563adf
--- /dev/null
+++ b/kommander/editor/pics/small/editraise.xpm
@@ -0,0 +1,110 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 82 1",
+" c #adad5a5a4a4a",
+". c #b5b55a5a4242",
+"X c #bdbd5a5a4242",
+"o c #adad63634a4a",
+"O c #a5a563635252",
+"+ c #adad63635252",
+"@ c #d6d652523939",
+"# c #d6d65a5a3939",
+"$ c #dede52523939",
+"% c #e7e74a4a2929",
+"& c #ffff5a5a3131",
+"* c #ffff5a5a3939",
+"= c #ffff63633939",
+"- c #cece5a5a4242",
+"; c #d6d65a5a4242",
+": c #d6d66b6b5a5a",
+"> c #dede6b6b5252",
+", c #d6d673735a5a",
+"< c #cece73736363",
+"1 c #d6d673736363",
+"2 c #dede7b7b6363",
+"3 c #e7e763634a4a",
+"4 c #efef73735252",
+"5 c #f7f76b6b4a4a",
+"6 c #ffff63634242",
+"7 c #ffff6b6b4242",
+"8 c #ffff6b6b4a4a",
+"9 c #ffff73734a4a",
+"0 c #f7f773735252",
+"q c #bdbd84847b7b",
+"w c #c6c684847373",
+"e c #c6c68c8c7b7b",
+"r c #d6d684847373",
+"t c #dede8c8c7b7b",
+"y c #e7e784846b6b",
+"u c #bdbd8c8c8484",
+"i c #b5b594948c8c",
+"p c #bdbd9c9c9c9c",
+"a c #a5a5a5a5a5a5",
+"s c #adada5a5a5a5",
+"d c Gray68",
+"f c #bdbdadada5a5",
+"g c Gray71",
+"h c #bdbdb5b5b5b5",
+"j c #bdbdbdbdb5b5",
+"k c Gray74",
+"l c #bdbdc6c6c6c6",
+"z c #cece8c8c8484",
+"x c #c6c694948c8c",
+"c c #cece94948484",
+"v c #cece9c9c8c8c",
+"b c #cecea5a59c9c",
+"n c #c6c6adada5a5",
+"m c #c6c6adadadad",
+"M c #c6c6b5b5adad",
+"N c #c6c6bdbdbdbd",
+"B c #f7f7a5a58c8c",
+"V c #ffffadad9c9c",
+"C c #ffffb5b5a5a5",
+"Z c #c6c6c6c6bdbd",
+"A c #d6d6c6c6b5b5",
+"S c #ffffc6c6b5b5",
+"D c #ffffcecebdbd",
+"F c #c0c0c0c0c0c0",
+"G c #c6c6c6c6c6c6",
+"H c #cecec6c6c6c6",
+"J c #cecececec6c6",
+"K c #cececececece",
+"L c #d6d6cececece",
+"P c #dedececec6c6",
+"I c #deded6d6cece",
+"U c #deded6d6d6d6",
+"Y c #e7e7deded6d6",
+"T c #efefdeded6d6",
+"R c #ffffd6d6cece",
+"E c #e7e7e7e7dede",
+"W c #efefefefe7e7",
+"Q c #fffff7f7efef",
+"! c #fffff7f7f7f7",
+"~ c #fffffffff7f7",
+"^ c Gray100",
+"/ c None",
+/* pixels */
+",3>:<1<wqweuixfN//////",
+"09987988787666Ok//////",
+"28888888888999+h//////",
+"y7888888888888og//////",
+"r7888888878889 h//////",
+"t7887887888789.g//////",
+"z8787878787878Xgk/////",
+"c7878878878787-gHZNjkd",
+"v7878787787877;E^~~~^a",
+"p7686786868687#U~~!!^s",
+"b7777867777768@I~QQQ^s",
+"f8687686868687@I~!!Q^a",
+"n6766767676767$P~QQQ^g",
+"m6676676667687$P~QQQ~j",
+"g24058666=***&%A~QQQ^k",
+"kjNhgMmnRDSCCVBT!QQQ^j",
+"///////l~^~^^~^!QQQQ~j",
+"///////JQQQQQQQQQQQQ~k",
+"///////kQQQQQQQQQQQQ~j",
+"///////kQQQQQQQQQQQQ~N",
+"///////NQQQQQQQQQQQQ~Z",
+"///////kkGkGKZLUKUYUWH"
+};
diff --git a/kommander/editor/pics/small/editslots.png b/kommander/editor/pics/small/editslots.png
new file mode 100644
index 00000000..b86bddb6
--- /dev/null
+++ b/kommander/editor/pics/small/editslots.png
Binary files differ
diff --git a/kommander/editor/pics/small/editvlayout.png b/kommander/editor/pics/small/editvlayout.png
new file mode 100644
index 00000000..f4cd3f9c
--- /dev/null
+++ b/kommander/editor/pics/small/editvlayout.png
Binary files differ
diff --git a/kommander/editor/pics/small/editvlayoutsplit.png b/kommander/editor/pics/small/editvlayoutsplit.png
new file mode 100644
index 00000000..0180cf5a
--- /dev/null
+++ b/kommander/editor/pics/small/editvlayoutsplit.png
Binary files differ
diff --git a/kommander/editor/pics/small/exec.png b/kommander/editor/pics/small/exec.png
new file mode 100644
index 00000000..14dc7455
--- /dev/null
+++ b/kommander/editor/pics/small/exec.png
Binary files differ
diff --git a/kommander/editor/pics/small/filenew.png b/kommander/editor/pics/small/filenew.png
new file mode 100644
index 00000000..9520080e
--- /dev/null
+++ b/kommander/editor/pics/small/filenew.png
Binary files differ
diff --git a/kommander/editor/pics/small/fileopen.png b/kommander/editor/pics/small/fileopen.png
new file mode 100644
index 00000000..30052901
--- /dev/null
+++ b/kommander/editor/pics/small/fileopen.png
Binary files differ
diff --git a/kommander/editor/pics/small/filesave.png b/kommander/editor/pics/small/filesave.png
new file mode 100644
index 00000000..c137165b
--- /dev/null
+++ b/kommander/editor/pics/small/filesave.png
Binary files differ
diff --git a/kommander/editor/pics/small/form.xpm b/kommander/editor/pics/small/form.xpm
new file mode 100644
index 00000000..02880b55
--- /dev/null
+++ b/kommander/editor/pics/small/form.xpm
@@ -0,0 +1,67 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 39 1",
+" c #4a4a9f9fffff",
+". c #53539f9ff6f6",
+"X c #4f4fa4a4ffff",
+"o c #5656a7a7fefe",
+"O c #5757adadffff",
+"+ c #5e5eafafffff",
+"@ c #5e5eb2b2ffff",
+"# c #6161aeaef7f7",
+"$ c #6060afaff8f8",
+"% c #bdbdc5c5c1c1",
+"& c #c0c0c0c0c0c0",
+"* c #c6c6d0d0cccc",
+"= c #cdcdd7d7d3d3",
+"- c #d1d1dcdcd7d7",
+"; c #d4d4dfdfdbdb",
+": c #d7d7e4e4dfdf",
+"> c #dadae5e5dfdf",
+", c #cecee2e2e8e8",
+"< c #d2d2e7e7efef",
+"1 c #d4d4e8e8efef",
+"2 c #dddde7e7e2e2",
+"3 c #dfdfecece7e7",
+"4 c #d7d7ececf4f4",
+"5 c #dadaefeff6f6",
+"6 c #dcdcf0f0f7f7",
+"7 c #dedef0f0fafa",
+"8 c #e2e2eeeee7e7",
+"9 c #e4e4efefeaea",
+"0 c #e7e7f3f3eeee",
+"q c #e8e8f0f0e6e6",
+"w c #efeff7f7ecec",
+"e c #e0e0f1f1fdfd",
+"r c #ececf7f7f2f2",
+"t c #efeffcfcf6f6",
+"y c #f1f1fafaefef",
+"u c #f7f7fffff6f6",
+"i c #f9f9fffff7f7",
+"p c Gray100",
+"a c None",
+/* pixels */
+"#$$$$$$$$$$+#+.+.+.+.#",
+"#+++O+oOoooXXoXoX .",
+"#@++++++++o+ooooooooo.",
+"<e777757444544414<<4,;",
+"ypiuuuuuuuuyyyywwwwqw8",
+"wtuttttrrr6wr00000999>",
+"9tttrtrrrrw0w00090999:",
+"2utrtrrrw6w0009098999;",
+"2trrrr6w6w00090899338-",
+">trrrww0w000908993838-",
+";tw6w6009090998938333;",
+">w6w0w000999989833223-",
+"2rw009099998333322323=",
+">009090899188332323>2=",
+";090998988832322322>3*",
+"-0098198383323232>>>2*",
+"-08388833332222:>:2::=",
+"*08883332323222:>::::=",
+"*9833323322>22:>>>:::*",
+";9232323>>:2:::::;:;:*",
+"-323222>222:>:::;:;->a",
+"*2>:>:::;:;;;;-;----;%"
+};
diff --git a/kommander/editor/pics/small/frame.png b/kommander/editor/pics/small/frame.png
new file mode 100644
index 00000000..c070b9c4
--- /dev/null
+++ b/kommander/editor/pics/small/frame.png
Binary files differ
diff --git a/kommander/editor/pics/small/groupbox.png b/kommander/editor/pics/small/groupbox.png
new file mode 100644
index 00000000..4025b4dc
--- /dev/null
+++ b/kommander/editor/pics/small/groupbox.png
Binary files differ
diff --git a/kommander/editor/pics/small/help.png b/kommander/editor/pics/small/help.png
new file mode 100644
index 00000000..35394010
--- /dev/null
+++ b/kommander/editor/pics/small/help.png
Binary files differ
diff --git a/kommander/editor/pics/small/home.xpm b/kommander/editor/pics/small/home.xpm
new file mode 100644
index 00000000..f88530dc
--- /dev/null
+++ b/kommander/editor/pics/small/home.xpm
@@ -0,0 +1,160 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 132 2",
+" c Gray0",
+". c #080800000000",
+"X c #080808080000",
+"o c #080810100808",
+"O c #101010100000",
+"+ c #292921210000",
+"@ c #313129290000",
+"# c #393929290000",
+"$ c #393931310000",
+"% c #393939390808",
+"& c #393939391010",
+"* c #393931312929",
+"= c #313139393131",
+"- c #4a4a42420808",
+"; c #525252521818",
+": c #424242423131",
+"> c #424242423939",
+", c #42424a4a3131",
+"< c #52525a5a2121",
+"1 c #636352520000",
+"2 c #63635a5a0808",
+"3 c #6b6b5a5a0000",
+"4 c #6b6b5a5a1010",
+"5 c #737373731818",
+"6 c #63636b6b2121",
+"7 c #6b6b73732121",
+"8 c #737373732929",
+"9 c #73737b7b2929",
+"0 c #7b7b7b7b2121",
+"q c #7b7b7b7b2929",
+"w c #42424a4a4a4a",
+"e c #4a4a42424242",
+"r c Gray29",
+"t c #4a4a52525252",
+"y c #52524a4a4a4a",
+"u c #5a5a52524a4a",
+"i c Gray32",
+"p c #5a5a5a5a5252",
+"a c #525263635a5a",
+"s c #636363635a5a",
+"d c Gray39",
+"f c #63636b6b6363",
+"g c #6b6b6b6b6363",
+"h c Gray42",
+"j c #73736b6b6363",
+"k c #73736b6b6b6b",
+"l c #7b7b73736b6b",
+"z c Gray45",
+"x c #7b7b73737373",
+"c c #7b7b7b7b7373",
+"v c #7b7b7b7b7b7b",
+"b c #7b7b84847b7b",
+"n c #8c8c7b7b0808",
+"m c #84847b7b1818",
+"M c #8c8c7b7b1010",
+"N c #84847b7b7373",
+"B c #8c8c84841818",
+"V c #949484840808",
+"C c #848484842929",
+"Z c #848484843939",
+"A c #949484842121",
+"S c #a5a594942121",
+"D c #adad9c9c2121",
+"F c #b5b5a5a50808",
+"G c #b5b5a5a51818",
+"H c #b5b5a5a52121",
+"J c #bdbdadad2929",
+"K c #bdbdadad3131",
+"L c #8c8c94945252",
+"P c #949494944a4a",
+"I c #949494945252",
+"U c #94949c9c5a5a",
+"Y c #8c8c8c8c6b6b",
+"T c #848484847b7b",
+"R c #8c8c84847b7b",
+"E c #9c9c9c9c6363",
+"W c #9c9c9c9c6b6b",
+"Q c #a5a5a5a57373",
+"! c #cecebdbd2121",
+"~ c #c6c6b5b53131",
+"^ c #c6c6b5b53939",
+"/ c #cecec6c63131",
+"( c #d6d6c6c63131",
+") c #e7e7d6d61818",
+"_ c #f7f7dede1818",
+"` c #e7e7d6d63939",
+"' c #efefdede3131",
+"] c #efefdede3939",
+"[ c #f7f7e7e71818",
+"{ c #ffffe7e71818",
+"} c #848484848484",
+"| c #84848c8c8484",
+" . c #8c8c84848484",
+".. c #8c8c8c8c8484",
+"X. c Gray55",
+"o. c #94948c8c8484",
+"O. c #949494948484",
+"+. c #949494948c8c",
+"@. c #9c9c94948c8c",
+"#. c #9c9c9c9c8c8c",
+"$. c #9c9c9c9c9494",
+"%. c Gray61",
+"&. c #9c9ca5a59c9c",
+"*. c #9c9cadada5a5",
+"=. c #a5a594948c8c",
+"-. c #a5a59c9c9494",
+";. c #a5a59c9c9c9c",
+":. c #a5a5a5a59c9c",
+">. c #adada5a59c9c",
+",. c #b5b5a5a59c9c",
+"<. c #a5a5a5a5a5a5",
+"1. c #a5a5adada5a5",
+"2. c #a5a5adadadad",
+"3. c #adadadada5a5",
+"4. c Gray68",
+"5. c #adadb5b5adad",
+"6. c #a5a5bdbdb5b5",
+"7. c #adadb5b5b5b5",
+"8. c #b5b5adada5a5",
+"9. c Gray71",
+"0. c #b5b5bdbdb5b5",
+"q. c #bdbdb5b5b5b5",
+"w. c #bdbdbdbdb5b5",
+"e. c Gray74",
+"r. c #adadc6c6bdbd",
+"t. c #bdbdc6c6bdbd",
+"y. c #c0c0c0c0c0c0",
+"u. c #c6c6d6d6cece",
+"i. c #c6c6deded6d6",
+"p. c #cecededed6d6",
+"a. c #d6d6e7e7e7e7",
+"s. c None",
+/* pixels */
+"s.s.s.s.s.s.s.s.s.s.3.%.s.s.s.s.s.s.s.s.s.s.",
+"s.s.s.s.s.s.s.s.s.9.e.| 4.s.s.s.s.s.s.s.s.s.",
+"s.s.s.s.s.s.s.s.e.:.p.&.g e.s.s.s.s.s.s.s.s.",
+"s.s.s.s.s.s.s.s.<.2.5.R t } s.s.s.s.s.s.s.s.",
+"s.s.s.s.s.s.s.9.&.6.&. .d t %.s.s.s.s.s.s.s.",
+"s.s.s.s.s.s.e.;.>.1.i.&.l p y 9.s.s.s.s.s.s.",
+"s.s.s.s.s.s.%.-.-.3.a.>.N s e d e.s.s.s.s.s.",
+"s.s.s.s.s.4.| 6.t.2.:.:.N i a w X.s.s.s.s.s.",
+"s.s.s.s.e.+.*.r.5.1.%...b s f a = <.s.s.s.s.",
+"s.s.s.e.$.=.>.@.;.0.u.-.:.k j u * r 9.s.s.s.",
+"s.s.s.4.o.1.8.>.3.u.a.,.8.x g g y = } s.s.s.",
+"s.s.s.e.7.1.v k z b T R c s : * z 4.e.s.s.s.",
+"s.s.s.s.s.9.4 1 - $ + O O . O X c s.s.s.s.s.",
+"s.s.s.s.s.w.! [ ] ` / D M 2 @ O c s.s.s.s.s.",
+"s.s.s.s.s.e.~ ) ' ] ] ( H V 3 @ c s.s.s.s.s.",
+"s.s.s.s.s.e.~ ) ' K A S G M 1 @ v s.s.s.s.s.",
+"s.s.s.s.s.e.^ _ D O O 4 n 2 $ T s.s.s.s.s.",
+"s.s.s.s.s.q.J _ m O X @ M 3 # > h v s.s.s.",
+"s.s.s.s.e.Y F { B X % M 3 @ . O , s.s.s.",
+"s.s.s.t.O.6 B ) B o & < 0 n 2 - ; 9 Y s.s.s.",
+"s.s.s.#.7 9 q C C 8 9 9 9 5 8 q C q O.s.s.s.",
+"s.s.s.Q W W W E E U U L I L P P P Z :.s.s.s."
+};
diff --git a/kommander/editor/pics/small/iconview.png b/kommander/editor/pics/small/iconview.png
new file mode 100644
index 00000000..13b8f153
--- /dev/null
+++ b/kommander/editor/pics/small/iconview.png
Binary files differ
diff --git a/kommander/editor/pics/small/image.xpm b/kommander/editor/pics/small/image.xpm
new file mode 100644
index 00000000..f122e2b4
--- /dev/null
+++ b/kommander/editor/pics/small/image.xpm
@@ -0,0 +1,226 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 198 2",
+" c Gray3",
+". c #080808081010",
+"X c #101010101010",
+"o c #101018181818",
+"O c #181818181818",
+"+ c #181818182121",
+"@ c #181821212121",
+"# c #181821212929",
+"$ c #292921211010",
+"% c #292921211818",
+"& c Gray13",
+"* c #212121212929",
+"= c Gray16",
+"- c #313131313131",
+"; c #313139394242",
+": c #393942424242",
+"> c #424231312929",
+", c #424242423131",
+"< c #424242423939",
+"1 c #4a4a42423939",
+"2 c #4a4a4a4a3131",
+"3 c #4a4a4a4a3939",
+"4 c #63635a5a3939",
+"5 c #6b6b5a5a3939",
+"6 c #4a4a4a4a4242",
+"7 c Gray29",
+"8 c #52524a4a4a4a",
+"9 c #5a5a4a4a4242",
+"0 c #5a5a52524a4a",
+"q c #5a5a5a5a4242",
+"w c #5a5a5a5a4a4a",
+"e c Gray32",
+"r c #5a5a52525252",
+"t c #5a5a5a5a5252",
+"y c #5a5a5a5a5a5a",
+"u c #4a4a52526363",
+"i c #63635a5a5a5a",
+"p c #6b6b6b6b5252",
+"a c #737363635a5a",
+"s c #7b7b73735252",
+"d c Gray39",
+"f c #6b6b63636363",
+"g c #6b6b6b6b6363",
+"h c Gray42",
+"j c #6b6b73737b7b",
+"k c #73736b6b6363",
+"l c #73736b6b6b6b",
+"z c #737373736b6b",
+"x c #7b7b73737373",
+"c c #7b7b7b7b7b7b",
+"v c #6b6b73738484",
+"b c #84847b7b5a5a",
+"n c #a5a573735252",
+"m c #b5b57b7b5252",
+"M c #9c9c84845252",
+"N c #9c9c84845a5a",
+"B c #848484846b6b",
+"V c #8c8c84846b6b",
+"C c #949484847b7b",
+"Z c #94948c8c7b7b",
+"A c #9c9c8c8c7b7b",
+"S c #949494947373",
+"D c #9c9ca5a57b7b",
+"F c #adad84845a5a",
+"G c #bdbd8c8c5a5a",
+"H c #a5a58c8c6363",
+"J c #adad8c8c6363",
+"K c #adad9c9c6b6b",
+"L c #a5a59c9c7b7b",
+"P c #bdbda5a56b6b",
+"I c #b5b5a5a57373",
+"U c #bdbdadad7373",
+"Y c #cecea5a56b6b",
+"T c #ceceadad6b6b",
+"R c #c6c6adad7b7b",
+"E c #ceceadad7b7b",
+"W c #ceceb5b57373",
+"Q c #848484848484",
+"! c #848484848c8c",
+"~ c #8c8c8c8c8484",
+"^ c #8c8c8c8c9494",
+"/ c #8c8c94948c8c",
+"( c #8c8c94949c9c",
+") c #949494948c8c",
+"_ c #9c9c9c9c8c8c",
+"` c #949494949c9c",
+"' c #9c9c94949494",
+"] c Gray61",
+"[ c #9c9ca5a5adad",
+"{ c #9c9ca5a5b5b5",
+"} c #a5a594948484",
+"| c #a5a59c9c8c8c",
+" . c #a5a59c9c9494",
+".. c #a5a59c9c9c9c",
+"X. c #a5a5a5a58c8c",
+"o. c #a5a5a5a59c9c",
+"O. c #adada5a59c9c",
+"+. c #b5b5a5a58c8c",
+"@. c #bdbdadad9494",
+"#. c #b5b5b5b59c9c",
+"$. c #bdbdbdbd9c9c",
+"%. c #a5a5a5a5a5a5",
+"&. c #a5a5a5a5adad",
+"*. c #a5a5adadadad",
+"=. c #adadadada5a5",
+"-. c Gray68",
+";. c #adadadadb5b5",
+":. c #b5b5adada5a5",
+">. c #b5b5adadadad",
+",. c #b5b5b5b5adad",
+"<. c #bdbdb5b5a5a5",
+"1. c #bdbdbdbda5a5",
+"2. c Gray71",
+"3. c #b5b5bdbdb5b5",
+"4. c #bdbdb5b5b5b5",
+"5. c #bdbdbdbdb5b5",
+"6. c Gray74",
+"7. c #adadbdbdc6c6",
+"8. c #b5b5bdbdc6c6",
+"9. c #bdbdc6c6b5b5",
+"0. c #bdbdc6c6c6c6",
+"q. c #ceceb5b58484",
+"w. c #d6d6bdbd8484",
+"e. c #dedebdbd8484",
+"r. c #d6d6b5b59494",
+"t. c #dedeb5b59494",
+"y. c #c6c6bdbda5a5",
+"u. c #cecebdbda5a5",
+"i. c #efefb5b58484",
+"p. c #efefbdbd8484",
+"a. c #efefbdbd8c8c",
+"s. c #e7e7b5b59494",
+"d. c #efefbdbd9494",
+"f. c #f7f7bdbd8484",
+"g. c #f7f7bdbd8c8c",
+"h. c #c6c6c6c68c8c",
+"j. c #d6d6c6c68c8c",
+"k. c #deded6d68c8c",
+"l. c #deded6d69494",
+"z. c #c6c6c6c6adad",
+"x. c #dedededea5a5",
+"c. c #efefc6c68c8c",
+"v. c #e7e7c6c69494",
+"b. c #e7e7dede9494",
+"n. c #e7e7dede9c9c",
+"m. c #f7f7cece8c8c",
+"M. c #f7f7d6d69c9c",
+"N. c #e7e7dedeadad",
+"B. c #e7e7e7e7a5a5",
+"V. c #efefe7e7a5a5",
+"C. c #efefe7e7adad",
+"Z. c #efefefefa5a5",
+"A. c #efefefefb5b5",
+"S. c #f7f7efefadad",
+"D. c #f7f7efefb5b5",
+"F. c #f7f7f7f7b5b5",
+"G. c #f7f7f7f7bdbd",
+"H. c #c0c0c0c0c0c0",
+"J. c #c6c6c6c6c6c6",
+"K. c #c6c6c6c6cece",
+"L. c #c6c6cececece",
+"P. c #cecec6c6c6c6",
+"I. c #cecececec6c6",
+"U. c #cececececece",
+"Y. c #ceced6d6cece",
+"T. c #ceced6d6dede",
+"R. c #d6d6cecec6c6",
+"E. c #d6d6d6d6c6c6",
+"W. c #d6d6d6d6cece",
+"Q. c #deded6d6c6c6",
+"!. c #deded6d6cece",
+"~. c #dedededec6c6",
+"^. c Gray84",
+"/. c #d6d6dededede",
+"(. c #deded6d6d6d6",
+"). c #dedededed6d6",
+"_. c Gray87",
+"`. c #dedededee7e7",
+"'. c #e7e7e7e7dede",
+"]. c #efefe7e7d6d6",
+"[. c #efefe7e7dede",
+"{. c #f7f7f7f7d6d6",
+"}. c #ffffffffdede",
+"|. c #e7e7e7e7e7e7",
+" X c #e7e7e7e7efef",
+".X c #e7e7efefefef",
+"XX c #efefefefefef",
+"oX c #e7e7efeff7f7",
+"OX c #efefefeff7f7",
+"+X c #efeff7f7f7f7",
+"@X c #f7f7efefefef",
+"#X c Gray97",
+"$X c #f7f7f7f7ffff",
+"%X c #f7f7ffffffff",
+"&X c #fffff7f7f7f7",
+"*X c #fffffffff7f7",
+"=X c Gray100",
+"-X c None",
+/* pixels */
+"u.c.n.x.B.A.A.S.D.F.G.F.S.M.p.g.Z.V.B.n.Z.N.",
+"r.W < 0 Z R.W.=.E.;._ !.W.].[.[.[.'.Y./ D C.",
+"t.U @ + 6 Q %.2.0.2.-.J.K.`.=X=X=X=X=XOX~.x.",
+"s.P * O k ^.&X#XXX`.^.J.3.2.).=X=X=X=X=X}.n.",
+"t.G * & = k W.|.|.XX|.^.J.&.] Q ~ >.^.XX{.l.",
+"s.m * O O - 7 e l ..I.=X=X+XJ.j + X + s V.",
+"d.J % Q ! r c z -.*.x [.=XXX^.L.` 5.( : q n.",
+"v.J o C *X.X@X=X=X%X` Q.=X=X=X=X=X=X=X=XY.B.",
+"a.F @ = k ,.^.U.=X7.7 Q.=X=X=X=X=X=X=X$X9.l.",
+"g.n @ & r :._.0.U.u % ./.6.).=X=X=X=XoX~ k.",
+"i.N . a @X%X X6.-.j d i O.|.&X=X=X+X#X{ w b.",
+"f.M 8 !.%X] h y ) %.o.#X=X|.U.J.U.(.[ # 2 V.",
+"f.q.).#X#XT.! R.=X=X;...^ e f ~ P.|.|.v , Z.",
+"m.K : x 4.[ _ @X=X=X=X%X$X`.[ h =.8.c ; 3 N.",
+"Y N 4 b S V X.$.#.<.z.y.1.| 9 5 L | B w p h.",
+"&.%.%.%.%.%.~ $ Q %.< 1 %.g > ' ..] ] ] ] o.",
+"-X-X-X-X-X-X<.H 5.-X6 y -X>.T =.-X-X-X-X-X-X",
+"-X-X-X-X-X6.j.} -X-X8 i -X6.e.@.-X-X-X-X-X-X",
+"-X-X-X-X-X5.W %.-X-X8 i -X-X@.W 6.-X-X-X-X-X",
+"-X-X-X-X-Xy.I 2.-X-X8 i -X-X,.e.=.-X-X-X-X-X",
+"-X-X-X-X6.j.A -X-X-X8 i -X-X5.w.+.-X-X-X-X-X",
+"-X-X-X-X5.E ..-X-X-Xt g -X-X-X@.R 6.-X-X-X-X"
+};
diff --git a/kommander/editor/pics/small/konsole.png b/kommander/editor/pics/small/konsole.png
new file mode 100644
index 00000000..3e60f289
--- /dev/null
+++ b/kommander/editor/pics/small/konsole.png
Binary files differ
diff --git a/kommander/editor/pics/small/label.png b/kommander/editor/pics/small/label.png
new file mode 100644
index 00000000..5d7d7b4c
--- /dev/null
+++ b/kommander/editor/pics/small/label.png
Binary files differ
diff --git a/kommander/editor/pics/small/layout.xpm b/kommander/editor/pics/small/layout.xpm
new file mode 100644
index 00000000..03968e26
--- /dev/null
+++ b/kommander/editor/pics/small/layout.xpm
@@ -0,0 +1,121 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 93 2",
+" c #212108080000",
+". c #292908080000",
+"X c #313108080000",
+"o c #313108080808",
+"O c #313110100808",
+"+ c #313110101010",
+"@ c #313118181010",
+"# c #393918181010",
+"$ c #393921211818",
+"% c #424229292121",
+"& c #4a4a31312929",
+"* c #4a4a31313131",
+"= c #525239393131",
+"- c #636310100000",
+"; c #6b6b10100000",
+": c #6b6b10100808",
+"> c #6b6b18180808",
+", c #737318180808",
+"< c #636321211010",
+"1 c #6b6b21211010",
+"2 c #6b6b29291818",
+"3 c #737321211010",
+"4 c #737331312929",
+"5 c #7b7b31312929",
+"6 c #7b7b42423131",
+"7 c #636352524a4a",
+"8 c #737363636363",
+"9 c #b5b539392121",
+"0 c #b5b539392929",
+"q c #bdbd39392121",
+"w c #bdbd39392929",
+"e c #848442423939",
+"r c #adad42423131",
+"t c #bdbd42422929",
+"y c #b5b542423131",
+"u c #b5b54a4a3131",
+"i c #b5b54a4a3939",
+"p c #bdbd42423131",
+"a c #bdbd4a4a3131",
+"s c #bdbd4a4a3939",
+"d c #8c8c52524a4a",
+"f c #adad52524242",
+"g c #b5b552524242",
+"h c #b5b552524a4a",
+"j c #bdbd52524242",
+"k c #bdbd52524a4a",
+"l c #adad63635252",
+"z c #adad6b6b5a5a",
+"x c #bdbd63635252",
+"c c #adad73736363",
+"v c #b5b56b6b6363",
+"b c #b5b57b7b7373",
+"n c #c6c642422929",
+"m c #c6c642423131",
+"M c #cece42423131",
+"N c #dede6b6b5a5a",
+"B c #dede7b7b6b6b",
+"V c #f7f75a5a4242",
+"C c #ffff5a5a4242",
+"Z c #efef63634a4a",
+"A c #e7e76b6b5a5a",
+"S c #efef6b6b5a5a",
+"D c #ffff63634242",
+"F c #ffff63634a4a",
+"G c #ffff6b6b4a4a",
+"H c #ffff6b6b5252",
+"J c #f7f773735a5a",
+"K c #ffff73735252",
+"L c #ffff73735a5a",
+"P c #e7e773736363",
+"I c #e7e77b7b6363",
+"U c #efef7b7b6363",
+"Y c #f7f77b7b6363",
+"T c #f7f77b7b6b6b",
+"R c #ffff7b7b6363",
+"E c #b5b584847b7b",
+"W c #dede84847373",
+"Q c #e7e784846b6b",
+"! c #efef8c8c7b7b",
+"~ c #f7f784846b6b",
+"^ c #ffff84846363",
+"/ c #ffff84846b6b",
+"( c #f7f784847373",
+") c #a5a5a5a5a5a5",
+"_ c Gray68",
+"` c Gray71",
+"' c #bdbdb5b5b5b5",
+"] c Gray74",
+"[ c #dede94948484",
+"{ c #c6c6bdbdbdbd",
+"} c #c0c0c0c0c0c0",
+"| c #c6c6c6c6c6c6",
+" . c None",
+/* pixels */
+" .j q w w w w q q p ] ] g q q w q w q q s .",
+" .Y L K L K L K L J ] { P H H H H H H G J .",
+" .T R R R R R R R Y ] ] B R L J L J L J J .",
+" .u 0 0 0 0 0 0 9 r ' ] f 9 0 0 0 9 0 9 y .",
+" .2 : - > : - : : < ] ] 4 - : - > : : : < .",
+" .* O O + ] ] & % .",
+" .` ) _ _ ) _ ) ) _ ] | _ ) _ _ _ _ _ ) _ .",
+" . . . . . . . . . . . . . . . . . . . . . .",
+" .b g h h h h h g l ] ] z g g h g h g g c .",
+" .P F Z D G V G V Z ` | N D V V V V V V S .",
+" .! / / / / / ^ / U ` ] Q R ^ R ^ R R R ~ .",
+" .x n m m m t m n s ` ] h m m t m t n t j .",
+" .6 > > > > , > > 1 ` | 5 ; > > : > > : 5 .",
+" .7 . o X O o O . $ ` ] & o O o O o O . = .",
+" .` _ _ _ _ _ _ _ _ ] | _ _ _ _ _ _ _ _ ` .",
+" . . . . . . . . . . . . . . . . . . . . . .",
+" .E r i f i i i i f ' ] l i i i i i i r c .",
+" .W F Z F G Z F F Z ` ] A V Z Z D Z D C I .",
+" .[ / / / / / / / T ` | Q / R R R R R R ( .",
+" .v M m m m m m m a ` ] k n m n m n m t k .",
+" .d , , , , , , , 3 ` ] 5 , , , > , > , e .",
+" .8 . @ # @ # @ + $ ` ] = O + # # # # O 7 ."
+};
diff --git a/kommander/editor/pics/small/lcdnumber.png b/kommander/editor/pics/small/lcdnumber.png
new file mode 100644
index 00000000..64eda5e4
--- /dev/null
+++ b/kommander/editor/pics/small/lcdnumber.png
Binary files differ
diff --git a/kommander/editor/pics/small/left.xpm b/kommander/editor/pics/small/left.xpm
new file mode 100644
index 00000000..1936290c
--- /dev/null
+++ b/kommander/editor/pics/small/left.xpm
@@ -0,0 +1,141 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 113 2",
+" c #08082929efef",
+". c #00002929ffff",
+"X c #08082929f7f7",
+"o c #08083131ffff",
+"O c #10102929e7e7",
+"+ c #10102929ffff",
+"@ c #18183131e7e7",
+"# c #18183939e7e7",
+"$ c #10103131ffff",
+"% c #10103939ffff",
+"& c #21213939e7e7",
+"* c #10104242ffff",
+"= c #18184242ffff",
+"- c #29294242dede",
+"; c #31314242d6d6",
+": c #39395252dede",
+"> c #21214242e7e7",
+", c #29294242e7e7",
+"< c #21215252ffff",
+"1 c #29295252ffff",
+"2 c #29295a5affff",
+"3 c #31316363ffff",
+"4 c #39396363ffff",
+"5 c #39396b6bffff",
+"6 c #5a5a6b6bbdbd",
+"7 c #6b6b7373b5b5",
+"8 c #42425252c6c6",
+"9 c #4a4a5a5acece",
+"0 c #42425252d6d6",
+"q c #52526363c6c6",
+"w c #5a5a6b6bc6c6",
+"e c #42426363e7e7",
+"r c #42426b6bffff",
+"t c #42427373efef",
+"y c #42427373ffff",
+"u c #4a4a7373ffff",
+"i c #4a4a7b7bffff",
+"p c #7b7b8484b5b5",
+"a c #52528484ffff",
+"s c #5a5a8c8cffff",
+"d c #6b6b8c8cdede",
+"f c #7b7b8484c6c6",
+"g c #7b7b8c8cc6c6",
+"h c #7b7b8c8ccece",
+"j c #73738c8cd6d6",
+"k c #7b7b8c8cd6d6",
+"l c #7b7b9494d6d6",
+"z c #7b7b9c9cd6d6",
+"x c #63638484efef",
+"c c #63638c8cffff",
+"v c #6b6b9494efef",
+"b c #63639494ffff",
+"n c #63639c9cffff",
+"m c #6b6b9c9cffff",
+"M c #73739494e7e7",
+"N c #73739c9ce7e7",
+"B c #73739c9cf7f7",
+"V c #7373a5a5ffff",
+"C c #7b7badadffff",
+"Z c #7b7bb5b5ffff",
+"A c #84849494bdbd",
+"S c #8c8c9494bdbd",
+"D c #94949494adad",
+"F c #94949494b5b5",
+"G c #94949c9cbdbd",
+"H c #9c9c9c9cbdbd",
+"J c #9c9ca5a5b5b5",
+"K c Gray68",
+"L c #a5a5a5a5bdbd",
+"P c #adadadadb5b5",
+"I c #adadadadbdbd",
+"U c #b5b5b5b5bdbd",
+"Y c #b5b5bdbdbdbd",
+"T c Gray74",
+"R c #84849494c6c6",
+"E c #8c8c9c9cc6c6",
+"W c #8484a5a5efef",
+"Q c #8c8ca5a5e7e7",
+"! c #8484adadffff",
+"~ c #8c8cb5b5efef",
+"^ c #8484b5b5ffff",
+"/ c #8484bdbdffff",
+"( c #8c8cbdbdffff",
+") c #9c9cb5b5f7f7",
+"_ c #9c9cbdbdf7f7",
+"` c #adadadadc6c6",
+"' c #b5b5b5b5c6c6",
+"] c #b5b5bdbdc6c6",
+"[ c #bdbdbdbdc6c6",
+"{ c #adadbdbdefef",
+"} c #9494c6c6ffff",
+"| c #9494ceceffff",
+" . c #9c9cceceffff",
+".. c #a5a5d6d6ffff",
+"X. c #adaddedeffff",
+"o. c #bdbdcecef7f7",
+"O. c #b5b5dedeffff",
+"+. c #bdbdd6d6ffff",
+"@. c #adade7e7ffff",
+"#. c #bdbde7e7ffff",
+"$. c #c0c0c0c0c0c0",
+"%. c #cecededef7f7",
+"&. c #c6c6e7e7ffff",
+"*. c #c6c6efefffff",
+"=. c #cecee7e7ffff",
+"-. c #d6d6e7e7ffff",
+";. c #dedee7e7ffff",
+":. c #d6d6ffffffff",
+">. c #dedeffffffff",
+",. c #efefffffffff",
+"<. c #f7f7ffffffff",
+"1. c Gray100",
+"2. c None",
+/* pixels */
+"2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.",
+"2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.",
+"2.2.2.2.2.2.2.G Q k U 2.2.2.2.2.2.2.2.2.2.2.",
+"2.2.2.2.2.2.F ) 1.{ ' 2.2.2.2.2.2.2.2.2.2.2.",
+"2.2.2.2.T E o.1.>.~ U 2.2.2.2.2.2.2.2.2.2.2.",
+"2.2.2.T S -.1.:...N ] 2.2.2.2.2.2.2.2.2.2.2.",
+"2.2.T R %.1.:. .( M U 2.2.2.2.2.2.2.2.2.2.2.",
+"2.U g ;.1.&.} ^ Z B F T [ Y ' H R g j M j L ",
+"[ h -.1.*./ C C C m t d l z W _ X.=.*.#.n 0 ",
+"A +.<.*.} ! C V V V C ..O.#.&.O.X. .( C 5 , ",
+"W ,.@.( C C V V V V C C ! C V V V m m b 2 > ",
+"c | ^ ! C V V V V V V V m m m m m b b s 1 # ",
+"q 1 s m V m m m V m u 4 5 y i a a s a a < , ",
+"K ; * u b m m m V b + O @ X $ = = < 1 % - ",
+"2.J - = r c b m m c 7 J I D f 6 8 ; - , - p ",
+"2.2.U 0 o 3 a b b v U 2.2.2.2.2.2.T U U U 2.",
+"2.2.2.P 9 o 3 s s x I 2.2.2.2.2.2.2.2.2.2.2.",
+"2.2.2.2.Y w o 2 y e I 2.2.2.2.2.2.2.2.2.2.2.",
+"2.2.2.2.2.T 7 . * , ` 2.2.2.2.2.2.2.2.2.2.2.",
+"2.2.2.2.2.2.T p & : U 2.2.2.2.2.2.2.2.2.2.2.",
+"2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.",
+"2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2."
+};
diff --git a/kommander/editor/pics/small/line.png b/kommander/editor/pics/small/line.png
new file mode 100644
index 00000000..5c64dfb5
--- /dev/null
+++ b/kommander/editor/pics/small/line.png
Binary files differ
diff --git a/kommander/editor/pics/small/lineedit.png b/kommander/editor/pics/small/lineedit.png
new file mode 100644
index 00000000..dafdfdf3
--- /dev/null
+++ b/kommander/editor/pics/small/lineedit.png
Binary files differ
diff --git a/kommander/editor/pics/small/listbox.png b/kommander/editor/pics/small/listbox.png
new file mode 100644
index 00000000..d467fc9f
--- /dev/null
+++ b/kommander/editor/pics/small/listbox.png
Binary files differ
diff --git a/kommander/editor/pics/small/listview.png b/kommander/editor/pics/small/listview.png
new file mode 100644
index 00000000..d71cc1c9
--- /dev/null
+++ b/kommander/editor/pics/small/listview.png
Binary files differ
diff --git a/kommander/editor/pics/small/multilineedit.png b/kommander/editor/pics/small/multilineedit.png
new file mode 100644
index 00000000..e2f08995
--- /dev/null
+++ b/kommander/editor/pics/small/multilineedit.png
Binary files differ
diff --git a/kommander/editor/pics/small/newform.xpm b/kommander/editor/pics/small/newform.xpm
new file mode 100644
index 00000000..d8e9bc4b
--- /dev/null
+++ b/kommander/editor/pics/small/newform.xpm
@@ -0,0 +1,35 @@
+/* XPM */
+static char * newform_xpm[] = {
+"34 26 6 1",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+"@ c #0000FF",
+"# c #C0C0C0",
+"$ c #808080",
+"..................................",
+".+++++++++++++++++++++++++++++++..",
+".+@@@@@@@@@@@@@@@@@@@@@@@+#+#+#+$.",
+".+++++++++++++++++++++++++++++++$.",
+".+.............................+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+..#.#.#.#.#.#.#.#.#.#.#.#.#.$+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+..#.#.#.#.#.#.#.#.#.#.#.#.#.$+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+..#.#.#.#.#.#.#.#.#.#.#.#.#.$+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+..#.#.#.#.#.#.#.#.#.#.#.#.#.$+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+..#.#.#.#.#.#.#.#.#.#.#.#.#.$+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+..#.#.#.#.#.#.#.#.#.#.#.#.#.$+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+..#.#.#.#.#.#.#.#.#.#.#.#.#.$+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+..#.#.#.#.#.#.#.#.#.#.#.#.#.$+$.",
+".+.#.#.#.#.#.#.#.#.#.#.#.#.#.#$+$.",
+".+.$$$$$$$$$$$$$$$$$$$$$$$$$$$$+$.",
+".+++++++++++++++++++++++++++++++$.",
+"..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.",
+".................................."};
diff --git a/kommander/editor/pics/small/ordertool.png b/kommander/editor/pics/small/ordertool.png
new file mode 100644
index 00000000..ad122839
--- /dev/null
+++ b/kommander/editor/pics/small/ordertool.png
Binary files differ
diff --git a/kommander/editor/pics/small/pixlabel.png b/kommander/editor/pics/small/pixlabel.png
new file mode 100644
index 00000000..32b90d82
--- /dev/null
+++ b/kommander/editor/pics/small/pixlabel.png
Binary files differ
diff --git a/kommander/editor/pics/small/pointer.png b/kommander/editor/pics/small/pointer.png
new file mode 100644
index 00000000..67e38a36
--- /dev/null
+++ b/kommander/editor/pics/small/pointer.png
Binary files differ
diff --git a/kommander/editor/pics/small/print.xpm b/kommander/editor/pics/small/print.xpm
new file mode 100644
index 00000000..8701d460
--- /dev/null
+++ b/kommander/editor/pics/small/print.xpm
@@ -0,0 +1,117 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 89 1",
+" c Gray0",
+". c #101008081010",
+"X c #101010101010",
+"o c #101010101818",
+"O c #181810101818",
+"+ c #181818181818",
+"@ c #181818182121",
+"# c #212118182121",
+"$ c Gray13",
+"% c #212121212929",
+"& c #292921212929",
+"* c Gray16",
+"= c #292929293131",
+"- c #313129293131",
+"; c #313131313131",
+": c #313131313939",
+"> c #393931313939",
+", c #393939393939",
+"< c #393939394242",
+"1 c #424239394242",
+"2 c Gray26",
+"3 c #4a4a4a4a5252",
+"4 c #5a5a52525a5a",
+"5 c #5a5a5a5a6363",
+"6 c #6b6b63636b6b",
+"7 c Gray42",
+"8 c #6b6b6b6b7373",
+"9 c #73736b6b7373",
+"0 c #7b7b73737b7b",
+"q c #7b7b73738484",
+"w c #0808ffff0808",
+"e c #2929ffff2929",
+"r c #3131ffff3131",
+"t c #5a5acece5a5a",
+"y c #6b6bffff6363",
+"u c #7b7bffff7b7b",
+"i c #84847b7b8484",
+"p c #84847b7b8c8c",
+"a c #8c8c7b7b9494",
+"s c #848484848c8c",
+"d c #8c8c84848c8c",
+"f c Gray55",
+"g c #8c8c84849494",
+"h c #8c8c8c8c9494",
+"j c #94948c8c9494",
+"k c #94948c8c9c9c",
+"l c Gray58",
+"z c #949494949c9c",
+"x c #9c9c94949c9c",
+"c c Gray61",
+"v c #9c9c9494a5a5",
+"b c #9c9c9c9ca5a5",
+"n c #a5a59c9ca5a5",
+"m c #a5a59c9cadad",
+"M c #adad9c9cadad",
+"N c #a5a5a5a5a5a5",
+"B c #a5a5a5a5adad",
+"V c #adada5a5adad",
+"C c Gray68",
+"Z c #adadadadb5b5",
+"A c #b5b5adadb5b5",
+"S c Gray71",
+"D c Gray74",
+"F c #9494c6c69494",
+"G c #9c9ccecea5a5",
+"H c #bdbdd6d6bdbd",
+"J c #c0c0c0c0c0c0",
+"K c #c6c6c6c6c6c6",
+"L c #cecec6c6cece",
+"P c #cececececece",
+"I c #cecececed6d6",
+"U c #d6d6ceced6d6",
+"Y c #d6d6cecedede",
+"T c Gray84",
+"R c #d6d6d6d6dede",
+"E c #deded6d6dede",
+"W c Gray87",
+"Q c #deded6d6e7e7",
+"! c #dedededee7e7",
+"~ c #d6d6ffffd6d6",
+"^ c #e7e7dedee7e7",
+"/ c #e7e7e7e7e7e7",
+"( c #e7e7e7e7efef",
+") c #efefe7e7efef",
+"_ c #efefefefefef",
+"` c #e7e7ffffe7e7",
+"' c Gray97",
+"] c Gray100",
+"[ c None",
+/* pixels */
+"[[[[[[SDPPPPKKDDCD[[[[",
+"[[[[[[D_/////___WD[[[[",
+"[[[[[[DKKKPPKKKKDK[[[[",
+"[[[[[[SDDDDSDDSSCD[[[[",
+"[[[[[KCKDKKKDDDKS[[[[[",
+"[[[[[DDSDDDDDDKKS[[[[[",
+"[[[[[DSKDDDDDKDKC[[[[[",
+"[[[[[KDDDDDDDDDDS[[[[[",
+"[[[[[CP/WWWWWWTWNNZ[[[",
+"[[[Dc9STPTPTPTWWj427S[",
+"[[Dziq0000000pag8<%@2N",
+"[DcE(!ERRRRUYGtFn2##O<",
+"Db)]]]]]]]]]~ewePa;@X#",
+"V']]]]]]]]]]`yru]Q0@ #",
+"BRILITRRW^!E!RHUILhO @",
+"jAZVBmBnmmNmnmMvzh6o #",
+"jZZmBnnnbnbbbbvxxg6o +",
+"lmmnbnbbbvcvxxxvjs6O 3",
+"jBnnvcvxvcvxvxzjhd8o+C",
+"lsdgfgdhgdhhjhjkhg6+l[",
+"S9%@$%&&&=--::>>:-:l[[",
+"[[C511,:;;;**%++.2c[[["
+};
diff --git a/kommander/editor/pics/small/progress.png b/kommander/editor/pics/small/progress.png
new file mode 100644
index 00000000..29416702
--- /dev/null
+++ b/kommander/editor/pics/small/progress.png
Binary files differ
diff --git a/kommander/editor/pics/small/pushbutton.png b/kommander/editor/pics/small/pushbutton.png
new file mode 100644
index 00000000..61f779ce
--- /dev/null
+++ b/kommander/editor/pics/small/pushbutton.png
Binary files differ
diff --git a/kommander/editor/pics/small/radiobutton.png b/kommander/editor/pics/small/radiobutton.png
new file mode 100644
index 00000000..10c1d8c3
--- /dev/null
+++ b/kommander/editor/pics/small/radiobutton.png
Binary files differ
diff --git a/kommander/editor/pics/small/redo.png b/kommander/editor/pics/small/redo.png
new file mode 100644
index 00000000..abdad26c
--- /dev/null
+++ b/kommander/editor/pics/small/redo.png
Binary files differ
diff --git a/kommander/editor/pics/small/richtextedit.png b/kommander/editor/pics/small/richtextedit.png
new file mode 100644
index 00000000..73573a8a
--- /dev/null
+++ b/kommander/editor/pics/small/richtextedit.png
Binary files differ
diff --git a/kommander/editor/pics/small/right.xpm b/kommander/editor/pics/small/right.xpm
new file mode 100644
index 00000000..76e2d033
--- /dev/null
+++ b/kommander/editor/pics/small/right.xpm
@@ -0,0 +1,141 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"22 22 113 2",
+" c #00001818f7f7",
+". c #00001818ffff",
+"X c #00002121f7f7",
+"o c #00002121ffff",
+"O c #00002929ffff",
+"+ c #10103131efef",
+"@ c #18183131e7e7",
+"# c #18183939e7e7",
+"$ c #10103131ffff",
+"% c #10103939ffff",
+"& c #29293939d6d6",
+"* c #31313939cece",
+"= c #10104242ffff",
+"- c #18184242ffff",
+"; c #39394a4ac6c6",
+": c #29295252ffff",
+"> c #29295a5affff",
+", c #31315252efef",
+"< c #31315a5affff",
+"1 c #31316363ffff",
+"2 c #39396b6bffff",
+"3 c #4a4a5a5abdbd",
+"4 c #63636b6bbdbd",
+"5 c #6b6b7373b5b5",
+"6 c #73737b7bbdbd",
+"7 c #42424a4ac6c6",
+"8 c #4a4a5252c6c6",
+"9 c #4a4a5a5acece",
+"0 c #52525a5ac6c6",
+"q c #52526363c6c6",
+"w c #52526b6bcece",
+"e c #5a5a6b6bc6c6",
+"r c #4a4a7373e7e7",
+"t c #4a4a7373efef",
+"y c #42427373ffff",
+"u c #4a4a7b7bffff",
+"i c #52527b7bffff",
+"p c #63637373c6c6",
+"a c #63637373cece",
+"s c #6b6b7b7bc6c6",
+"d c #7b7b8484b5b5",
+"f c #5a5a8484e7e7",
+"g c #5a5a8484efef",
+"h c #52528484f7f7",
+"j c #52528484ffff",
+"k c #5a5a8c8cffff",
+"l c #5a5a9494ffff",
+"z c #6b6b8484d6d6",
+"x c #6b6b8c8cd6d6",
+"c c #73738484c6c6",
+"v c #7b7b8c8ccece",
+"b c #63638484e7e7",
+"n c #63638c8cefef",
+"m c #6b6b8484e7e7",
+"M c #63639494ffff",
+"N c #6b6b9494ffff",
+"B c #6b6b9c9cffff",
+"V c #73739c9ce7e7",
+"C c #73739c9cffff",
+"Z c #7373a5a5ffff",
+"A c #7b7badadffff",
+"S c #84848484b5b5",
+"D c #84848c8cbdbd",
+"F c #8c8c9494b5b5",
+"G c #94949494b5b5",
+"H c #94949c9cb5b5",
+"J c #9c9c9c9cb5b5",
+"K c #9c9c9c9cbdbd",
+"L c #a5a5a5a5b5b5",
+"P c #adadadadb5b5",
+"I c #adadadadbdbd",
+"U c #b5b5b5b5bdbd",
+"Y c #b5b5bdbdbdbd",
+"T c Gray74",
+"R c #84849494c6c6",
+"E c #84849494cece",
+"W c #8c8ca5a5cece",
+"Q c #8c8cadadd6d6",
+"! c #9c9ca5a5c6c6",
+"~ c #9494adadd6d6",
+"^ c #9c9cadadd6d6",
+"/ c #9c9cbdbdd6d6",
+"( c #8c8cadadefef",
+") c #8484adadffff",
+"_ c #8484b5b5ffff",
+"` c #8c8cb5b5f7f7",
+"' c #8c8cb5b5ffff",
+"] c #8c8cbdbdffff",
+"[ c #9494bdbdffff",
+"{ c #a5a5bdbdd6d6",
+"} c #b5b5b5b5c6c6",
+"| c #bdbdbdbdc6c6",
+" . c #adadbdbdefef",
+".. c #8c8cc6c6ffff",
+"X. c #9494c6c6ffff",
+"o. c #9494ceceffff",
+"O. c #9c9cceceffff",
+"+. c #a5a5d6d6ffff",
+"@. c #adaddedeffff",
+"#. c #b5b5d6d6ffff",
+"$. c #adade7e7ffff",
+"%. c #b5b5e7e7ffff",
+"&. c #bdbde7e7ffff",
+"*. c #bdbdefefffff",
+"=. c #c0c0c0c0c0c0",
+"-. c #c6c6cececece",
+";. c #c6c6efefffff",
+":. c #ceceefefffff",
+">. c #c6c6f7f7ffff",
+",. c #cecef7f7ffff",
+"<. c #d6d6f7f7ffff",
+"1. c #e7e7ffffffff",
+"2. c None",
+/* pixels */
+"2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.",
+"2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.",
+"2.2.2.2.2.2.2.2.2.2.2.T ! f G T 2.2.2.2.2.2.",
+"2.2.2.2.2.2.2.2.2.2.2.Y -.;.t D 2.2.2.2.2.2.",
+"2.2.2.2.2.2.2.2.2.2.2.T { *.o.h p T 2.2.2.2.",
+"2.2.2.2.2.2.2.2.2.2.2.Y / O.+.O.u 6 T 2.2.2.",
+"2.2.2.2.2.2.2.2.2.2.2.T Q X.X.o.O.k a U 2.2.",
+"P E m z c R K } T | T H V ] ] ] X.X.l 9 I 2.",
+"x <.1.:.#.O.` ( W ~ ^ .' A _ _ ] ] ] j w P ",
+"g >.%.$.@.%.%.&.;.,.<.;.[ A _ _ _ ) _ ] u q ",
+"n $.O.[ ] ] ] _ ] ] ] _ A ) A ) A A Z Z M , ",
+"g O.X._ _ A A A A A A A _ A A A A Z N j > # ",
+"r .._ Z B M k k u 2 2 k A A A A C B i : o 3 ",
+"e y 1 : - $ + @ & ; ; + k ) Z Z B u - o 7 U ",
+"L 9 & & 3 4 S J U T T F b Z C N j - o * L 2.",
+"2.Y P Y 2.2.2.2.2.2.2.T W M M y % o 8 P 2.2.",
+"2.2.2.2.2.2.2.2.2.2.2.2.W j y = . 0 Y 2.2.2.",
+"2.2.2.2.2.2.2.2.2.2.2.2.v < % X 4 P 2.2.2.2.",
+"2.2.2.2.2.2.2.2.2.2.2.2.s O 5 | 2.2.2.2.2.",
+"2.2.2.2.2.2.2.2.2.2.2.2.D & d T 2.2.2.2.2.2.",
+"2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.",
+"2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2."
+};
diff --git a/kommander/editor/pics/small/scrollbar.png b/kommander/editor/pics/small/scrollbar.png
new file mode 100644
index 00000000..466c58de
--- /dev/null
+++ b/kommander/editor/pics/small/scrollbar.png
Binary files differ
diff --git a/kommander/editor/pics/small/searchfind.png b/kommander/editor/pics/small/searchfind.png
new file mode 100644
index 00000000..3f369fdb
--- /dev/null
+++ b/kommander/editor/pics/small/searchfind.png
Binary files differ
diff --git a/kommander/editor/pics/small/shellscript.png b/kommander/editor/pics/small/shellscript.png
new file mode 100644
index 00000000..59de8cfe
--- /dev/null
+++ b/kommander/editor/pics/small/shellscript.png
Binary files differ
diff --git a/kommander/editor/pics/small/slider.png b/kommander/editor/pics/small/slider.png
new file mode 100644
index 00000000..525bd1ca
--- /dev/null
+++ b/kommander/editor/pics/small/slider.png
Binary files differ
diff --git a/kommander/editor/pics/small/spacer.png b/kommander/editor/pics/small/spacer.png
new file mode 100644
index 00000000..926e8afc
--- /dev/null
+++ b/kommander/editor/pics/small/spacer.png
Binary files differ
diff --git a/kommander/editor/pics/small/spinbox.png b/kommander/editor/pics/small/spinbox.png
new file mode 100644
index 00000000..7ae20630
--- /dev/null
+++ b/kommander/editor/pics/small/spinbox.png
Binary files differ
diff --git a/kommander/editor/pics/small/statusbar.png b/kommander/editor/pics/small/statusbar.png
new file mode 100644
index 00000000..ac08552d
--- /dev/null
+++ b/kommander/editor/pics/small/statusbar.png
Binary files differ
diff --git a/kommander/editor/pics/small/table.png b/kommander/editor/pics/small/table.png
new file mode 100644
index 00000000..4bbd9c2d
--- /dev/null
+++ b/kommander/editor/pics/small/table.png
Binary files differ
diff --git a/kommander/editor/pics/small/tabwidget.png b/kommander/editor/pics/small/tabwidget.png
new file mode 100644
index 00000000..1254bb63
--- /dev/null
+++ b/kommander/editor/pics/small/tabwidget.png
Binary files differ
diff --git a/kommander/editor/pics/small/textbrowser.png b/kommander/editor/pics/small/textbrowser.png
new file mode 100644
index 00000000..090e2f84
--- /dev/null
+++ b/kommander/editor/pics/small/textbrowser.png
Binary files differ
diff --git a/kommander/editor/pics/small/textedit.png b/kommander/editor/pics/small/textedit.png
new file mode 100644
index 00000000..823d0818
--- /dev/null
+++ b/kommander/editor/pics/small/textedit.png
Binary files differ
diff --git a/kommander/editor/pics/small/textview.png b/kommander/editor/pics/small/textview.png
new file mode 100644
index 00000000..ec2270c3
--- /dev/null
+++ b/kommander/editor/pics/small/textview.png
Binary files differ
diff --git a/kommander/editor/pics/small/timeedit.png b/kommander/editor/pics/small/timeedit.png
new file mode 100644
index 00000000..01b37888
--- /dev/null
+++ b/kommander/editor/pics/small/timeedit.png
Binary files differ
diff --git a/kommander/editor/pics/small/timer.png b/kommander/editor/pics/small/timer.png
new file mode 100644
index 00000000..e2e17452
--- /dev/null
+++ b/kommander/editor/pics/small/timer.png
Binary files differ
diff --git a/kommander/editor/pics/small/toolbutton.png b/kommander/editor/pics/small/toolbutton.png
new file mode 100644
index 00000000..25d240a1
--- /dev/null
+++ b/kommander/editor/pics/small/toolbutton.png
Binary files differ
diff --git a/kommander/editor/pics/small/undo.png b/kommander/editor/pics/small/undo.png
new file mode 100644
index 00000000..839a823f
--- /dev/null
+++ b/kommander/editor/pics/small/undo.png
Binary files differ
diff --git a/kommander/editor/pics/temp.tmp b/kommander/editor/pics/temp.tmp
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/kommander/editor/pics/temp.tmp
diff --git a/kommander/editor/pics/toolbox.png b/kommander/editor/pics/toolbox.png
new file mode 100644
index 00000000..2ab71dc7
--- /dev/null
+++ b/kommander/editor/pics/toolbox.png
Binary files differ
diff --git a/kommander/editor/pics/uparrow.xbm b/kommander/editor/pics/uparrow.xbm
new file mode 100644
index 00000000..dc0edccb
--- /dev/null
+++ b/kommander/editor/pics/uparrow.xbm
@@ -0,0 +1,10 @@
+#define uparrow_width 25
+#define uparrow_height 25
+static unsigned char uparrow_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x10,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+ 0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,
+ 0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,
+ 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
diff --git a/kommander/editor/pics/vsplit.xbm b/kommander/editor/pics/vsplit.xbm
new file mode 100644
index 00000000..bcd0e4b7
--- /dev/null
+++ b/kommander/editor/pics/vsplit.xbm
@@ -0,0 +1,10 @@
+#define vsplit_width 25
+#define vsplit_height 25
+static unsigned char vsplit_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x24,
+ 0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x24,0x00,0x00,0x10,0x24,0x08,0x00,0x18,
+ 0x24,0x18,0x00,0xfc,0xe7,0x3f,0x00,0x18,0x24,0x18,0x00,0x10,0x24,0x08,0x00,
+ 0x00,0x24,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x24,0x00,
+ 0x00,0x00,0x24,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
diff --git a/kommander/editor/pics/wait.xbm b/kommander/editor/pics/wait.xbm
new file mode 100644
index 00000000..e2fd6896
--- /dev/null
+++ b/kommander/editor/pics/wait.xbm
@@ -0,0 +1,10 @@
+#define wait_width 25
+#define wait_height 25
+static unsigned char wait_bits[] = {
+ 0x00,0x00,0x00,0x00,0xc0,0xff,0x07,0x00,0xc0,0x00,0x06,0x00,0xc0,0xff,0x07,
+ 0x00,0x80,0x00,0x02,0x00,0x80,0x00,0x02,0x00,0x80,0x54,0x02,0x00,0x80,0x28,
+ 0x02,0x00,0x80,0x11,0x03,0x00,0x00,0x83,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+ 0x6c,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x93,0x01,0x00,
+ 0x80,0x01,0x03,0x00,0x80,0x10,0x02,0x00,0x80,0x28,0x02,0x00,0x80,0x54,0x02,
+ 0x00,0x80,0xaa,0x02,0x00,0xc0,0xff,0x07,0x00,0xc0,0x00,0x06,0x00,0xc0,0xff,
+ 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
diff --git a/kommander/editor/pixmapchooser.cpp b/kommander/editor/pixmapchooser.cpp
new file mode 100644
index 00000000..1a5a8535
--- /dev/null
+++ b/kommander/editor/pixmapchooser.cpp
@@ -0,0 +1,1105 @@
+/**********************************************************************
+** Copyright (C) 2000-2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qvariant.h> // HP-UX compiler needs this here
+
+#include "pixmapchooser.h"
+#include "formwindow.h"
+#if defined(DESIGNER) && !defined(RESOURCE)
+#include "pixmapfunction.h"
+#endif
+#include "metadatabase.h"
+#include "mainwindow.h"
+#ifndef KOMMANDER
+#include "pixmapcollectioneditor.h"
+#endif
+#ifndef KOMMANDER
+#include "pixmapcollection.h"
+#endif
+#ifndef KOMMANDER
+#include "project.h"
+#endif
+
+#include <qapplication.h>
+#include <qimage.h>
+#include <qpainter.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qiconview.h>
+
+#include <klocale.h>
+
+#if defined(DESIGNER)
+#include "pics/images.h"
+
+#ifdef Q_WS_MACX
+//logo is 40x40 on the mac, if it changes - please notify the Qt/Mac team
+static const char * const logo_xpm[] = {
+"40 40 543 2",
+" c None",
+". c #C9D98D",
+"+ c #A0BC30",
+"@ c #A4C132",
+"# c #ABC92F",
+"$ c #AAC733",
+"% c #8FA733",
+"& c #657821",
+"* c #3F4E17",
+"= c #2A360C",
+"- c #182306",
+"; c #121B06",
+"> c #141C06",
+", c #1D2608",
+"' c #2A350E",
+") c #405017",
+"! c #667C1C",
+"~ c #8FAA24",
+"{ c #A8C12D",
+"] c #728326",
+"^ c #313A14",
+"/ c #090B08",
+"( c #000003",
+"_ c #000001",
+": c #000002",
+"< c #000004",
+"[ c #000000",
+"} c #080D01",
+"| c #333E11",
+"1 c #6E8529",
+"2 c #A2C230",
+"3 c #ACC735",
+"4 c #7D8F2C",
+"5 c #2A300E",
+"6 c #000300",
+"7 c #000007",
+"8 c #010009",
+"9 c #020104",
+"0 c #020301",
+"a c #020300",
+"b c #010200",
+"c c #010101",
+"d c #020010",
+"e c #010010",
+"f c #000005",
+"g c #000503",
+"h c #28360C",
+"i c #789128",
+"j c #AAC835",
+"k c #A4BE36",
+"l c #515F1E",
+"m c #040800",
+"n c #00000C",
+"o c #02000D",
+"p c #040303",
+"q c #020200",
+"r c #020203",
+"s c #020202",
+"t c #000008",
+"u c #000105",
+"v c #000202",
+"w c #000201",
+"x c #020207",
+"y c #02020C",
+"z c #00000B",
+"A c #02010E",
+"B c #000013",
+"C c #030900",
+"D c #4C5E1B",
+"E c #A1BD33",
+"F c #9BB52F",
+"G c #333E10",
+"H c #010002",
+"I c #03020B",
+"J c #020109",
+"K c #030204",
+"L c #010104",
+"M c #020009",
+"N c #02000A",
+"O c #000009",
+"P c #000006",
+"Q c #04050B",
+"R c #020106",
+"S c #020307",
+"T c #040507",
+"U c #000104",
+"V c #34410D",
+"W c #99B236",
+"X c #9BB332",
+"Y c #2B360A",
+"Z c #020006",
+"` c #040301",
+" . c #030304",
+".. c #01010A",
+"+. c #020113",
+"@. c #010011",
+"#. c #010500",
+"$. c #0A0F05",
+"%. c #131C07",
+"&. c #0B1205",
+"*. c #020706",
+"=. c #010309",
+"-. c #030503",
+";. c #030402",
+">. c #2C350C",
+",. c #9DB52F",
+"'. c #A3BD2F",
+"). c #03000A",
+"!. c #030102",
+"~. c #020101",
+"{. c #030209",
+"]. c #02010B",
+"^. c #010301",
+"/. c #242C08",
+"(. c #5A6720",
+"_. c #81922B",
+":. c #93A732",
+"<. c #9AB530",
+"[. c #9CB734",
+"}. c #90AA32",
+"|. c #7E942C",
+"1. c #566820",
+"2. c #273310",
+"3. c #000403",
+"4. c #00000E",
+"5. c #020211",
+"6. c #03030B",
+"7. c #020205",
+"8. c #01000C",
+"9. c #33410B",
+"0. c #A7BF37",
+"a. c #ADC935",
+"b. c #4F5F18",
+"c. c #020103",
+"d. c #080401",
+"e. c #050205",
+"f. c #232C06",
+"g. c #768722",
+"h. c #A4BB2E",
+"i. c #D5E38D",
+"j. c #A2BE3A",
+"k. c #738833",
+"l. c #202C0A",
+"m. c #05030A",
+"n. c #020206",
+"o. c #030303",
+"p. c #505B20",
+"q. c #ACC934",
+"r. c #7C8E2B",
+"s. c #050900",
+"t. c #010201",
+"u. c #030200",
+"v. c #020001",
+"w. c #050207",
+"x. c #030004",
+"y. c #000203",
+"z. c #49531D",
+"A. c #A2B836",
+"B. c #9FBD30",
+"C. c #4E5A1C",
+"D. c #000200",
+"E. c #04040A",
+"F. c #040403",
+"G. c #010005",
+"H. c #040600",
+"I. c #7A9222",
+"J. c #ACCB2D",
+"K. c #A9C22F",
+"L. c #282F0B",
+"M. c #020304",
+"N. c #030109",
+"O. c #55671A",
+"P. c #AEC93D",
+"Q. c #A9C931",
+"R. c #546523",
+"S. c #00000A",
+"T. c #020204",
+"U. c #010300",
+"V. c #272F0B",
+"W. c #A7BE34",
+"X. c #728327",
+"Y. c #020108",
+"Z. c #030305",
+"`. c #030208",
+" + c #46511B",
+".+ c #ACC739",
+"++ c #93AC39",
+"@+ c #263605",
+"#+ c #566A1D",
+"$+ c #ADC93C",
+"%+ c #ACC840",
+"&+ c #44541E",
+"*+ c #010205",
+"=+ c #010206",
+"-+ c #020107",
+";+ c #010007",
+">+ c #030400",
+",+ c #728226",
+"'+ c #AAC732",
+")+ c #323A14",
+"!+ c #030401",
+"~+ c #01000D",
+"{+ c #242D06",
+"]+ c #A2B835",
+"^+ c #95AD3E",
+"/+ c #212C0F",
+"(+ c #010604",
+"_+ c #5F7327",
+":+ c #ABC934",
+"<+ c #A2BD3A",
+"[+ c #202C09",
+"}+ c #01010B",
+"|+ c #020105",
+"1+ c #333B14",
+"2+ c #ABC23C",
+"3+ c #8EA631",
+"4+ c #0A0C08",
+"5+ c #010008",
+"6+ c #010102",
+"7+ c #020011",
+"8+ c #030500",
+"9+ c #778823",
+"0+ c #96AD3A",
+"a+ c #232D0D",
+"b+ c #020212",
+"c+ c #000109",
+"d+ c #030800",
+"e+ c #5F7126",
+"f+ c #ABCB35",
+"g+ c #71862A",
+"h+ c #020401",
+"i+ c #090C03",
+"j+ c #8FA238",
+"k+ c #647822",
+"l+ c #02000B",
+"m+ c #232B08",
+"n+ c #A5BB30",
+"o+ c #96AC35",
+"p+ c #242C0A",
+"q+ c #020402",
+"r+ c #030403",
+"s+ c #000100",
+"t+ c #576D1D",
+"u+ c #A2BC37",
+"v+ c #232D0A",
+"w+ c #010004",
+"x+ c #677822",
+"y+ c #596620",
+"z+ c #CBDC71",
+"A+ c #96B034",
+"B+ c #232B0E",
+"C+ c #01020B",
+"D+ c #010109",
+"E+ c #030502",
+"F+ c #040603",
+"G+ c #010107",
+"H+ c #253704",
+"I+ c #B2CE3A",
+"J+ c #586721",
+"K+ c #425014",
+"L+ c #C3D771",
+"M+ c #29360C",
+"N+ c #020302",
+"O+ c #81912F",
+"P+ c #94AE38",
+"Q+ c #23300B",
+"R+ c #040408",
+"S+ c #010105",
+"T+ c #010207",
+"U+ c #242C0C",
+"V+ c #91AB33",
+"W+ c #D0E18D",
+"X+ c #7F922B",
+"Y+ c #010400",
+"Z+ c #010106",
+"`+ c #2A3408",
+" @ c #182406",
+".@ c #00000D",
+"+@ c #0B0F06",
+"@@ c #93A736",
+"#@ c #96AE38",
+"$@ c #000101",
+"%@ c #030308",
+"&@ c #232A0B",
+"*@ c #98AC37",
+"=@ c #94AB32",
+"-@ c #0C1204",
+";@ c #1B2307",
+">@ c #9EB62F",
+",@ c #010100",
+"'@ c #9AB431",
+")@ c #97AD37",
+"!@ c #242B0E",
+"~@ c #01000B",
+"{@ c #01010C",
+"]@ c #272C13",
+"^@ c #9CAF3B",
+"/@ c #131B07",
+"(@ c #151B07",
+"_@ c #9CB230",
+":@ c #ADC555",
+"<@ c #131C06",
+"[@ c #94AB38",
+"}@ c #252E0A",
+"|@ c #262914",
+"1@ c #9DAF46",
+"2@ c #9DBA30",
+"3@ c #141C07",
+"4@ c #010302",
+"5@ c #141906",
+"6@ c #9CB332",
+"7@ c #9EBB31",
+"8@ c #1D2609",
+"9@ c #010003",
+"0@ c #0B1105",
+"a@ c #91AA31",
+"b@ c #222C0D",
+"c@ c #05040A",
+"d@ c #232B0A",
+"e@ c #98AC3A",
+"f@ c #91AB2D",
+"g@ c #0B1204",
+"h@ c #1D2307",
+"i@ c #A0B834",
+"j@ c #A5C233",
+"k@ c #29340F",
+"l@ c #020705",
+"m@ c #7E942D",
+"n@ c #95AE3B",
+"o@ c #232E10",
+"p@ c #03040C",
+"q@ c #02020B",
+"r@ c #020400",
+"s@ c #222A0B",
+"t@ c #92AE2E",
+"u@ c #7D9327",
+"v@ c #030704",
+"w@ c #2A340D",
+"x@ c #A7BF35",
+"y@ c #BAD355",
+"z@ c #3E4E18",
+"A@ c #020110",
+"B@ c #566821",
+"C@ c #243503",
+"D@ c #020213",
+"E@ c #030501",
+"F@ c #030306",
+"G@ c #030207",
+"H@ c #010203",
+"I@ c #030206",
+"J@ c #202E0B",
+"K@ c #95AF37",
+"L@ c #59691D",
+"M@ c #43501A",
+"N@ c #ADC732",
+"O@ c #657A1D",
+"P@ c #000102",
+"Q@ c #01000E",
+"R@ c #010108",
+"S@ c #27330F",
+"T@ c #A3BE3D",
+"U@ c #586C1E",
+"V@ c #000404",
+"W@ c #00010A",
+"X@ c #050704",
+"Y@ c #262B13",
+"Z@ c #262B15",
+"`@ c #02010C",
+" # c #212E08",
+".# c #97AE3B",
+"+# c #ADC440",
+"@# c #232D06",
+"## c #030101",
+"$# c #6B7D21",
+"%# c #D5E48D",
+"&# c #8DA828",
+"*# c #02020A",
+"=# c #000106",
+"-# c #000401",
+";# c #748736",
+"># c #AECB3D",
+",# c #5E7227",
+"'# c #010204",
+")# c #252B0C",
+"!# c #9BAD3F",
+"~# c #A0B148",
+"{# c #232B0B",
+"]# c #020007",
+"^# c #020209",
+"/# c #2C3418",
+"(# c #646E34",
+"_# c #030600",
+":# c #030202",
+"<# c #050102",
+"[# c #0A1002",
+"}# c #90A727",
+"|# c #CFDE8D",
+"1# c #343D13",
+"2# c #02010D",
+"3# c #040509",
+"4# c #020308",
+"5# c #202B09",
+"6# c #9FBE2E",
+"7# c #ACCA34",
+"8# c #5E7026",
+"9# c #252C0D",
+"0# c #9AAE39",
+"a# c #9AAE3D",
+"b# c #22290D",
+"c# c #010306",
+"d# c #010209",
+"e# c #020004",
+"f# c #030201",
+"g# c #030100",
+"h# c #030009",
+"i# c #333C12",
+"j# c #AAC42F",
+"k# c #738429",
+"l# c #03020F",
+"m# c #4B591A",
+"n# c #A9C831",
+"o# c #A9C932",
+"p# c #576B1F",
+"q# c #263706",
+"r# c #91AB34",
+"s# c #92AC37",
+"t# c #202C0C",
+"u# c #6F8422",
+"v# c #A8BF33",
+"w# c #2B340C",
+"x# c #03010D",
+"y# c #516221",
+"z# c #AFC655",
+"A# c #95AE39",
+"B# c #202E09",
+"C# c #000204",
+"D# c #020102",
+"E# c #28360A",
+"F# c #7D8E2C",
+"G# c #040700",
+"H# c #03020C",
+"I# c #475520",
+"J# c #A3BD3C",
+"K# c #98AF3A",
+"L# c #2D3516",
+"M# c #010103",
+"N# c #0B0D05",
+"O# c #7E9627",
+"P# c #B0C833",
+"Q# c #4E5A17",
+"R# c #222B0B",
+"S# c #72852B",
+"T# c #A4BE35",
+"U# c #AFC544",
+"V# c #666F37",
+"W# c #171A0A",
+"X# c #93AB3A",
+"Y# c #A4BA2F",
+"Z# c #36400C",
+"`# c #040404",
+" $ c #28310B",
+".$ c #5C6C20",
+"+$ c #7F922A",
+"@$ c #93A833",
+"#$ c #9CB92D",
+"$$ c #90AA2C",
+"%$ c #59691F",
+"&$ c #222A07",
+"*$ c #040501",
+"=$ c #222D0D",
+"-$ c #93AA3F",
+";$ c #9DB03A",
+">$ c #2C340D",
+",$ c #000500",
+"'$ c #0D1205",
+")$ c #131A07",
+"!$ c #0B1203",
+"~$ c #010502",
+"{$ c #020008",
+"]$ c #010202",
+"^$ c #212D0D",
+"/$ c #94AE34",
+"($ c #9FB435",
+"_$ c #343F0C",
+":$ c #040207",
+"<$ c #020502",
+"[$ c #2D4102",
+"}$ c #A6BD33",
+"|$ c #4F5B1D",
+"1$ c #030701",
+"2$ c #020201",
+"3$ c #040502",
+"4$ c #030505",
+"5$ c #020100",
+"6$ c #040102",
+"7$ c #030007",
+"8$ c #090C04",
+"9$ c #16190A",
+"0$ c #0A1301",
+"a$ c #708727",
+"b$ c #ACC836",
+"c$ c #7B9223",
+"d$ c #29300D",
+"e$ c #7F9626",
+"f$ c #94AB39",
+"g$ c #212E0C",
+"h$ c #020603",
+"i$ c #101A01",
+"j$ c #7A912E",
+"k$ c #ADCB2F",
+"l$ c #B0CD3A",
+"m$ c #A6BD34",
+"n$ c #728225",
+"o$ c #0A0D03",
+"p$ c #0C1101",
+"q$ c #343D12",
+"r$ c #6F8421",
+"s$ c #94AB41",
+"t$ c #202C0D",
+"u$ c #0A1302",
+"v$ c #7A902F",
+"w$ c #B0CE37",
+"x$ c #ABC33C",
+"y$ c #8EA236",
+"z$ c #677821",
+"A$ c #425115",
+"B$ c #2A3409",
+"C$ c #151A07",
+"D$ c #141A06",
+"E$ c #1C2307",
+"F$ c #2B330D",
+"G$ c #43511B",
+"H$ c #6C7E22",
+"I$ c #ABC530",
+"J$ c #92AC32",
+"K$ c #314305",
+"L$ c #6F8625",
+"M$ c #ACCB30",
+"N$ c #9CB330",
+"O$ c #9CB432",
+"P$ c #A1B935",
+"Q$ c #A8BF36",
+"R$ c #ADC632",
+" ",
+" . + @ # ",
+" $ % & * = - ; > , ' ) ! ~ ",
+" { ] ^ / ( _ _ : < : [ ( ( : } | 1 2 ",
+" 3 4 5 6 [ 7 8 9 0 a b b c 8 d e 8 f g h i j ",
+" k l m n o p q q r s s t u v w x y z A B t C D E ",
+" F G [ H I J K L M N t 7 n O P P Q R S T U t < [ V W ",
+" X Y _ Z ` ...+.@.7 [ #.$.; %.&.*.: : t =.-.;.S z : >.,. ",
+" '.G < ).!.~.{.].P ^./.(._.:.<.[.}.|.1.2.3.4.5.6.7...8.[ 9.0. ",
+" a.b.[ M c.d.e.J [ f.g.h.i. j.k.l.( m.n.L x o.[ p.q. ",
+" r.s.t.u.v.w.x.y.z.A. B.C.D.f E.F.c G.H.I.J. ",
+" K.L.O M.b 7.N.y.O.P. Q.R.v S.T.U.R f V.W. ",
+" X.a Y.c Z.`.[ +.+ ++@+#+$+ %+&+[ *+=+-+;+>+,+ ",
+" '+)+_ !+0 ~+f {+]+ ^+/+O (+_+:+ <+[+: }+n.|+: 1+2+ ",
+" 3+4+5+b 6+7+8+9+ 0+a+: b+c+d+e+f+ g+h+7 n.r f i+j+ ",
+" k+( 8 r l+7 m+n+ o+p+< 6.q+r+< s+t+ u+v+[ w+6+: [ x+ ",
+" * [ 9 R d _ y+z+ A+B+[ C+D+E+F+G+[ H+ I+J+[ < 6+c : K+ ",
+" L+M+[ q |+e N+O+ P+Q+[ L R+S+7.T+[ U+V+W+ X+Y+< [ Z+z `+ ",
+" @_ a T..@+@@@ #@Q+$@D.T.%@( L : &@*@ =@-@f c 5+n ;@>@ ",
+" ; : ,@t O ; '@ )@!@[ h+G+~@;+~@{@]@^@ <+/@f U.w _ (@_@ ",
+" :@> _ c u P <@[. [@}@[ L .;+Z+c |+S.|@1@ 2@3@P 4@a [ 5@6@ ",
+" 7@8@[ 9@w < 0@a@ ^+b@P y c@`.P 6+Y+b ;+_ d@e@ f@g@t *+T.( h@i@ ",
+" j@k@: 8 w f l@m@ n@o@( p@q@x 9 8.5+b r@T.].[ s@t@ u@v@8.( `.< w@x@ ",
+" y@z@: A@x Q _ B@ C@7 D@E+E@F@S+8 7 G@H@I@l+M [ J@K@ L@< 8.~.G@[ M@N@ ",
+" O@P@Q@y R@: S@T@ U@V@W@-.X@x ( Y@Z@: `@N |+r t._ #.#+#@#f N.##I@[ $#%# ",
+" &#} 5+n *#=#-#;# >#,#C '#Y._ )#!#~#{#_ ]#q a s ^#[ /#(#_#:#<#x.f [#}# ",
+" |#1#: 2#3#4#n 5#6# 7#8#D.( 9#0# a#b#[ t.|+L c#d#n [ e#f#g#h#< i#j# ",
+" k#U.@.( r+l#: m#n# o#p#q#r# s#t#_ =+4@,@9@G._ r 6+c ( 6 u# ",
+" v#w#S.z 7.x#l+6 y#%+ z# A#B#[ C#6+c ,@c c s D#[ E# ",
+" F#G#O H#Z+8 ..y.I#J# K#L#8 G.c c c c o.M#N#O# ",
+" P#Q#[ Y.n.q .=#[ R#S#T# U#V#c : c c s c o.T.W#X# ",
+" Y#Z#[ J `#>+U.*+f -# $.$+$@$ #$$$u@%$&$*$~@T.,@c c o.s s [ =$-$ ",
+" ;$>$_ G@L U.=+Q@O [ [ ,$'$)$3@!$~$( 7 {$9 6+s o.o.s s s ]$[ ^$/$ ",
+" ($_$[ M M n.T.|+G@R ;+P n z 7 7 R@:$<#g#c c H L 6+s s ]$<$[ [$ ",
+" }$|$1$P P q 2$L R c 3$4$'#H@0 a 5$6$7$( [ 8$9$[ ]$]$t.s+0$a$ ",
+" b$c$d$D.[ f : H S+;+D.b r %@G@9 ( : w M+e$f$g$[ h$s+i$j$k$ ",
+" l$m$n$1+o$[ : z n [ [ ( f _ s+p$q$r$ s$t$[ u$v$w$ ",
+" x$y$z$A$B$;@C$D$E$F$G$H$}#I$ J$K$L$M$ ",
+" >@N$O$P$Q$R$ ",
+" "};
+#else
+static const char * const logo_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"21 16 213 2",
+" c white",
+". c #A3C511",
+"+ c #A2C511",
+"@ c #A2C611",
+"# c #A2C510",
+"$ c #A2C513",
+"% c #A2C412",
+"& c #A2C413",
+"* c #A2C414",
+"= c #A2C515",
+"- c #A2C50F",
+"; c #A3C510",
+"> c #A2C410",
+", c #A2C411",
+"' c #A2C314",
+") c #A2C316",
+"! c #A2C416",
+"~ c #A0C315",
+"{ c #A1C313",
+"] c #A1C412",
+"^ c #A2C40F",
+"/ c #A1C410",
+"( c #A0C510",
+"_ c #A0C511",
+": c #A1C414",
+"< c #9FC30E",
+"[ c #98B51B",
+"} c #5F7609",
+"| c #5C6E0E",
+"1 c #5B6E10",
+"2 c #5C6C14",
+"3 c #5A6E0A",
+"4 c #839E16",
+"5 c #A0C515",
+"6 c #A0C513",
+"7 c #A2C512",
+"8 c #A1C512",
+"9 c #A1C511",
+"0 c #A1C50F",
+"a c #91AE12",
+"b c #505E11",
+"c c #1F2213",
+"d c #070606",
+"e c #040204",
+"f c #040306",
+"g c #15160F",
+"h c #2F3A0D",
+"i c #859F1B",
+"j c #A1C215",
+"k c #A0C50F",
+"l c #A1C510",
+"m c #A0C110",
+"n c #839C1B",
+"o c #1E240A",
+"p c #050205",
+"q c #030304",
+"r c #323917",
+"s c #556313",
+"t c #56680B",
+"u c #536609",
+"v c #4A561B",
+"w c #0B0D04",
+"x c #030208",
+"y c #090A05",
+"z c #5F6F18",
+"A c #A0C117",
+"B c #91AF10",
+"C c #1E2209",
+"D c #030205",
+"E c #17190D",
+"F c #7D981C",
+"G c #9ABA12",
+"H c #A3C411",
+"I c #A3C713",
+"J c #95B717",
+"K c #7F9A18",
+"L c #8FAE1B",
+"M c #394413",
+"N c #040305",
+"O c #090807",
+"P c #6C7E19",
+"Q c #A6C614",
+"R c #A1C411",
+"S c #64761F",
+"T c #030105",
+"U c #070707",
+"V c #728513",
+"W c #A2C40C",
+"X c #A2C70B",
+"Y c #89A519",
+"Z c #313B11",
+"` c #101409",
+" . c #586A19",
+".. c #97B620",
+"+. c #1B2207",
+"@. c #282D11",
+"#. c #A6C41B",
+"$. c #A1C413",
+"%. c #A3C512",
+"&. c #2E370B",
+"*. c #030108",
+"=. c #21260F",
+"-. c #A5C21A",
+";. c #A0C60D",
+">. c #6D841A",
+",. c #0F1007",
+"'. c #040207",
+"). c #0E1009",
+"!. c #515F14",
+"~. c #A2C41B",
+"{. c #5E701B",
+"]. c #030203",
+"^. c #0B0B04",
+"/. c #87A111",
+"(. c #A0C411",
+"_. c #A0C316",
+":. c #212907",
+"<. c #222C0B",
+"[. c #A3C516",
+"}. c #9CBE1A",
+"|. c #5E6F1B",
+"1. c #0E0F0B",
+"2. c #040205",
+"3. c #181B0D",
+"4. c #93AE25",
+"5. c #A0C610",
+"6. c #617715",
+"7. c #030306",
+"8. c #070704",
+"9. c #809818",
+"0. c #A1C415",
+"a. c #475416",
+"b. c #030309",
+"c. c #12170B",
+"d. c #91B01E",
+"e. c #5C721F",
+"f. c #05050B",
+"g. c #33371D",
+"h. c #0E0F08",
+"i. c #040405",
+"j. c #758921",
+"k. c #46511B",
+"l. c #030207",
+"m. c #131409",
+"n. c #9FB921",
+"o. c #859D21",
+"p. c #080809",
+"q. c #030305",
+"r. c #46521C",
+"s. c #8EB017",
+"t. c #627713",
+"u. c #4D5F17",
+"v. c #97B71D",
+"w. c #77901D",
+"x. c #151708",
+"y. c #0D0D0B",
+"z. c #0C0B08",
+"A. c #455216",
+"B. c #A5C616",
+"C. c #A0C114",
+"D. c #556118",
+"E. c #050307",
+"F. c #050407",
+"G. c #363E17",
+"H. c #5D7309",
+"I. c #A2BF28",
+"J. c #A2C417",
+"K. c #A4C620",
+"L. c #60701D",
+"M. c #030103",
+"N. c #030303",
+"O. c #809A1B",
+"P. c #A0C310",
+"Q. c #A0C410",
+"R. c #A3C415",
+"S. c #9CB913",
+"T. c #6F801F",
+"U. c #1A210A",
+"V. c #1D1E0D",
+"W. c #1D220F",
+"X. c #1E210F",
+"Y. c #0F0F07",
+"Z. c #0E1007",
+"`. c #090906",
+" + c #2B360E",
+".+ c #97B813",
+"++ c #A2C50E",
+"@+ c #A5C517",
+"#+ c #90AD20",
+"$+ c #5D6C1A",
+"%+ c #394115",
+"&+ c #050704",
+"*+ c #040304",
+"=+ c #202807",
+"-+ c #5E6B21",
+";+ c #728D0C",
+">+ c #65791D",
+",+ c #29330F",
+"'+ c #7A911D",
+")+ c #A2C614",
+"!+ c #A1C513",
+"~+ c #A3C50E",
+"{+ c #A3C414",
+"]+ c #9CBD11",
+"^+ c #95B40C",
+"/+ c #94B50F",
+"(+ c #95B510",
+"_+ c #99B913",
+":+ c #A0C414",
+"<+ c #9ABC11",
+"[+ c #A0C314",
+"}+ c #A1C40F",
+"|+ c #A3C513",
+". + + @ + # # $ % & * = & - + + + + + # # ",
+"; > , > # > > $ ' ) ! ~ { ] ^ , - > , > # ",
+"+ + / ( _ : < [ } | 1 2 3 4 5 6 : 7 8 # # ",
+"+ 9 # ( 0 a b c d e e e f g h i j 9 k l + ",
+"+ + > m n o p q r s t u v w x y z A & # # ",
+"# % k B C D E F G H I J K L M N O P Q ] , ",
+"$ R > S T U V W , X Y Z ` ...+.T @.#.$.] ",
+"% %.* &.*.=.-.;.> >.,.'.).!.~.{.].^./.R 7 ",
+"7 (._.:.D <.[.}.|.1.2.2.3.4.5.6.7.8.9._ 8 ",
+". % 0.a.b.c.d.e.f.N g.h.2.i.j.k.l.m.n.$ # ",
+"; + ; o.p.q.r.s.t.u.v.w.x.2.y.z.].A.B.l : ",
+"# # R C.D.E.F.G.H.I.J.K.L.2.M.M.N.O.P.; l ",
+"# / Q.R.S.T.U.].8.V.W.X.Y.e Z.`.]. +.+++7 ",
+"+ + 9 / ; @+#+$+%+&+e *+=+-+;+>+,+'+)+, # ",
+"# + > % & !+~+{+]+^+/+(+_+) Q.:+<+[+$ R # ",
+"7 + > }+# % k |+8 + > + * $ _ / , 7 8 ] - "};
+#endif
+
+static ImageIconProvider *imageIconProvider = 0;
+static PixmapChooser *pixmapChooser = 0;
+#endif
+
+PixmapView::PixmapView( QWidget *parent )
+ : QScrollView( parent )
+{
+ viewport()->setBackgroundMode( PaletteBase );
+}
+
+void PixmapView::setPixmap( const QPixmap &pix )
+{
+ pixmap = pix;
+ resizeContents( pixmap.size().width(), pixmap.size().height() );
+ viewport()->repaint( false );
+}
+
+void PixmapView::drawContents( QPainter *p, int cx, int cy, int cw, int ch )
+{
+ p->fillRect( cx, cy, cw, ch, colorGroup().brush( QColorGroup::Base ) );
+ p->drawPixmap( 0, 0, pixmap );
+}
+
+void PixmapView::previewUrl( const QUrl &u )
+{
+ if ( u.isLocalFile() ) {
+ QString path = u.path();
+ QPixmap pix( path );
+ if ( !pix.isNull() )
+ setPixmap( pix );
+ } else {
+ qWarning( "Previewing remot files not supported" );
+ }
+}
+
+QStringList qChoosePixmaps( QWidget *parent )
+{
+ if ( !imageIconProvider && !QFileDialog::iconProvider() )
+ QFileDialog::setIconProvider( ( imageIconProvider = new ImageIconProvider ) );
+
+ QString filter;
+ QString all = qApp->translate( "qChoosePixmap", "All Pixmaps (" );
+ for ( uint i = 0; i < QImageIO::outputFormats().count(); i++ ) {
+ filter += qApp->translate( "qChoosePixmap", "%1-Pixmaps (%2)\n" ).
+ arg( QImageIO::outputFormats().at( i ) ).
+ arg( "*." + QString( QImageIO::outputFormats().at( i ) ).lower() );
+ all += "*." + QString( QImageIO::outputFormats().at( i ) ).lower() + ";";
+ }
+ filter.prepend( all + qApp->translate( "qChoosePixmap", ")\n" ) );
+ filter += qApp->translate( "qChoosePixmap", "All Files (*)" );
+
+ QFileDialog fd( QString::null, filter, parent, 0, true );
+ fd.setMode( QFileDialog::ExistingFiles );
+ fd.setContentsPreviewEnabled( true );
+ PixmapView *pw = new PixmapView( &fd );
+ fd.setContentsPreview( pw, pw );
+ fd.setViewMode( QFileDialog::List );
+ fd.setPreviewMode( QFileDialog::Contents );
+ fd.setCaption( qApp->translate( "qChoosePixmap", "Choose Images" ) );
+ if ( fd.exec() == QDialog::Accepted )
+ return fd.selectedFiles();
+ return QStringList();
+}
+
+QPixmap qChoosePixmap( QWidget *parent, FormWindow *fw, const QPixmap &old, QString *fn )
+{
+#if defined(DESIGNER)
+ if ( !fw || fw->savePixmapInline() ) {
+ if ( !imageIconProvider && !QFileDialog::iconProvider() )
+ QFileDialog::setIconProvider( ( imageIconProvider = new ImageIconProvider ) );
+
+ QString filter;
+ QString all = i18n( "All Pixmaps" );
+ all += " (";
+ for ( uint i = 0; i < QImageIO::outputFormats().count(); i++ ) {
+ filter += i18n( "%1-Pixmaps (%2)\n" ).
+ arg( QImageIO::outputFormats().at( i ) ).
+ arg( "*." + QString( QImageIO::outputFormats().at( i ) ).lower() );
+ all += "*." + QString( QImageIO::outputFormats().at( i ) ).lower() + ";";
+ }
+ filter.prepend( all + ")\n" );
+ filter += i18n( "All Files (*)" );
+
+ QFileDialog fd( QString::null, filter, parent, 0, true );
+ fd.setContentsPreviewEnabled( true );
+ PixmapView *pw = new PixmapView( &fd );
+ fd.setContentsPreview( pw, pw );
+ fd.setViewMode( QFileDialog::List );
+ fd.setPreviewMode( QFileDialog::Contents );
+ fd.setCaption( i18n( "Choose Pixmap" ) );
+ if ( fd.exec() == QDialog::Accepted ) {
+ QPixmap pix( fd.selectedFile() );
+ if ( fn )
+ *fn = fd.selectedFile();
+ MetaDataBase::setPixmapArgument( fw, pix.serialNumber(), fd.selectedFile() );
+ return pix;
+ }
+ }
+#ifndef KOMMANDER
+ else if ( fw && fw->savePixmapInProject() ) {
+ PixmapCollectionEditor dia( parent, 0, true );
+ dia.setProject( fw->project() );
+ dia.setChooserMode( true );
+ dia.setCurrentItem( MetaDataBase::pixmapKey( fw, old.serialNumber() ) );
+ if ( dia.exec() == QDialog::Accepted ) {
+ QPixmap pix( fw->project()->pixmapCollection()->pixmap( dia.viewPixmaps->currentItem()->text() ) );
+ MetaDataBase::setPixmapKey( fw, pix.serialNumber(), dia.viewPixmaps->currentItem()->text() );
+ return pix;
+ }
+ }
+#endif
+ else {
+ PixmapFunction dia( parent, 0, true );
+ QObject::connect( dia.helpButton, SIGNAL( clicked() ), MainWindow::self, SLOT( showDialogHelp() ) );
+ dia.labelFunction->setText( fw->pixmapLoaderFunction() + "(" );
+ dia.editArguments->setText( MetaDataBase::pixmapArgument( fw, old.serialNumber() ) );
+ dia.editArguments->setFocus();
+ if ( dia.exec() == QDialog::Accepted ) {
+ QPixmap pix( PixmapChooser::loadPixmap( "image.xpm" ) );
+ MetaDataBase::setPixmapArgument( fw, pix.serialNumber(), dia.editArguments->text() );
+ return pix;
+ }
+ }
+#else
+ Q_UNUSED( parent );
+ Q_UNUSED( fw );
+ Q_UNUSED( old );
+#endif
+ return QPixmap();
+}
+
+ImageIconProvider::ImageIconProvider( QWidget *parent, const char *name )
+ : QFileIconProvider( parent, name ), imagepm( PixmapChooser::loadPixmap( "image.xpm", PixmapChooser::Mini ) )
+{
+ fmts = QImage::inputFormats();
+}
+
+ImageIconProvider::~ImageIconProvider()
+{
+}
+
+const QPixmap * ImageIconProvider::pixmap( const QFileInfo &fi )
+{
+ QString ext = fi.extension().upper();
+ if ( fmts.contains( ext ) ) {
+ return &imagepm;
+ } else {
+ return QFileIconProvider::pixmap( fi );
+ }
+}
+
+PixmapChooser::PixmapChooser()
+{
+ // #### hardcoded at the moment
+ miniPixDir = "pics/mini/";
+ noSizePixDir = "pics/";
+ smallPixDir = "pics/small/";
+ largePixDir = "pics/large/";
+}
+
+QString PixmapChooser::pixmapPath( Size size ) const
+{
+ if ( size == Small )
+ return smallPixDir;
+ if ( size == Mini )
+ return miniPixDir;
+ if ( size == NoSize )
+ return noSizePixDir;
+ return largePixDir;
+}
+
+QPixmap PixmapChooser::loadPixmap( const QString &name, Size size )
+{
+#if defined(DESIGNER)
+ if ( !pixmapChooser )
+ pixmapChooser = new PixmapChooser;
+
+ if ( name == "logo" )
+ return QPixmap( logo_xpm );
+
+ if ( name[ 0 ] == '/' || name[ 0 ] == '\\' || name[ 1 ] == ':' )
+ return QPixmap( name );
+
+ QString lookup;
+ switch ( size ) {
+ case Small:
+ lookup = "small/";
+ break;
+ case Disabled:
+ lookup = "small/disabled/";
+ break;
+ case Large:
+ lookup = "large/";
+ break;
+ case Mini:
+ lookup = "mini/";
+ break;
+ default:
+ break;
+ }
+
+ QString lookup_png = lookup + QFileInfo( name ).baseName() + ".png";
+ lookup += name;
+
+ Embed *e = &embed_vec[ 0 ];
+ while ( e->name ) {
+ if ( QString( e->name ) == lookup ) {
+ QImage img;
+ img.loadFromData( (const uchar*)e->data, e->size );
+ QPixmap pix;
+ pix.convertFromImage( img );
+ return pix;
+ } else if ( QString( e->name ) == lookup_png ) {
+ QImage img;
+ img.loadFromData( (const uchar*)e->data, e->size );
+ QPixmap pix;
+ pix.convertFromImage( img );
+ return pix;
+ }
+ e++;
+ }
+
+ // fallback
+ return QPixmap( pixmapChooser->pixmapPath( size ) + name );
+#else
+ Q_UNUSED( name );
+ Q_UNUSED( size );
+ return QPixmap();
+#endif
+}
+#include "pixmapchooser.moc"
diff --git a/kommander/editor/pixmapchooser.h b/kommander/editor/pixmapchooser.h
new file mode 100644
index 00000000..22e5f94c
--- /dev/null
+++ b/kommander/editor/pixmapchooser.h
@@ -0,0 +1,86 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef PIXMAPCHOOSER_H
+#define PIXMAPCHOOSER_H
+
+#include <qfiledialog.h>
+#include <qscrollview.h>
+#include <qpixmap.h>
+#include <qurl.h>
+
+class FormWindow;
+
+class PixmapView : public QScrollView,
+ public QFilePreview
+{
+ Q_OBJECT
+
+public:
+ PixmapView( QWidget *parent );
+ void setPixmap( const QPixmap &pix );
+ void drawContents( QPainter *p, int, int, int, int );
+ void previewUrl( const QUrl &u );
+
+private:
+ QPixmap pixmap;
+
+};
+
+class ImageIconProvider : public QFileIconProvider
+{
+ Q_OBJECT
+
+public:
+ ImageIconProvider( QWidget *parent = 0, const char *name = 0 );
+ ~ImageIconProvider();
+
+ const QPixmap *pixmap( const QFileInfo &fi );
+
+private:
+ QStrList fmts;
+ QPixmap imagepm;
+
+};
+
+QPixmap qChoosePixmap( QWidget *parent, FormWindow *fw = 0, const QPixmap &old = QPixmap(), QString *fn = 0 );
+QStringList qChoosePixmaps( QWidget *parent );
+
+
+class PixmapChooser
+{
+public:
+ enum Size { Mini, Small, Large, NoSize, Disabled };
+
+ PixmapChooser();
+ QString pixmapPath( Size size ) const;
+
+ static QPixmap loadPixmap( const QString &name, Size size = Small );
+
+private:
+ QString smallPixDir;
+ QString largePixDir;
+ QString miniPixDir;
+ QString noSizePixDir;
+
+};
+
+
+#endif
diff --git a/kommander/editor/pixmapfunction.ui b/kommander/editor/pixmapfunction.ui
new file mode 100644
index 00000000..a75869dc
--- /dev/null
+++ b/kommander/editor/pixmapfunction.ui
@@ -0,0 +1,923 @@
+<!DOCTYPE UI><UI>
+<class>PixmapFunction</class><comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PixmapFunction</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>300</width>
+ <height>108</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Choose Pixmap</string>
+ </property>
+ <property stdset="1">
+ <name>sizeGripEnabled</name>
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Enter arguments for loading the pixmap:</string>
+ </property>
+ <property>
+ <name>buddy</name>
+ <cstring>editArguments</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QFrame</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Frame9</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Sunken</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>StyledPanel</enum>
+ </property>
+ <property stdset="1">
+ <name>lineWidth</name>
+ <number>2</number>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>2</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>labelFunction</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>QPixmap(</string>
+ </property>
+ <property stdset="1">
+ <name>palette</name>
+ <palette>
+ <active>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>211</red>
+ <green>211</green>
+ <blue>211</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>233</red>
+ <green>233</green>
+ <blue>233</blue>
+ </color>
+ <color>
+ <red>105</red>
+ <green>105</green>
+ <blue>105</blue>
+ </color>
+ <color>
+ <red>140</red>
+ <green>140</green>
+ <blue>140</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </active>
+ <disabled>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>211</red>
+ <green>211</green>
+ <blue>211</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>242</red>
+ <green>242</green>
+ <blue>242</blue>
+ </color>
+ <color>
+ <red>105</red>
+ <green>105</green>
+ <blue>105</blue>
+ </color>
+ <color>
+ <red>140</red>
+ <green>140</green>
+ <blue>140</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </disabled>
+ <inactive>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>211</red>
+ <green>211</green>
+ <blue>211</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>242</red>
+ <green>242</green>
+ <blue>242</blue>
+ </color>
+ <color>
+ <red>105</red>
+ <green>105</green>
+ <blue>105</blue>
+ </color>
+ <color>
+ <red>140</red>
+ <green>140</green>
+ <blue>140</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </inactive>
+ </palette>
+ </property>
+ </widget>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>editArguments</cstring>
+ </property>
+ <property stdset="1">
+ <name>frame</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>palette</name>
+ <palette>
+ <active>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>211</red>
+ <green>211</green>
+ <blue>211</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>233</red>
+ <green>233</green>
+ <blue>233</blue>
+ </color>
+ <color>
+ <red>105</red>
+ <green>105</green>
+ <blue>105</blue>
+ </color>
+ <color>
+ <red>140</red>
+ <green>140</green>
+ <blue>140</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>170</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>211</red>
+ <green>211</green>
+ <blue>211</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </active>
+ <disabled>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>211</red>
+ <green>211</green>
+ <blue>211</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>242</red>
+ <green>242</green>
+ <blue>242</blue>
+ </color>
+ <color>
+ <red>105</red>
+ <green>105</green>
+ <blue>105</blue>
+ </color>
+ <color>
+ <red>140</red>
+ <green>140</green>
+ <blue>140</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>170</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>211</red>
+ <green>211</green>
+ <blue>211</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </disabled>
+ <inactive>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>211</red>
+ <green>211</green>
+ <blue>211</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>242</red>
+ <green>242</green>
+ <blue>242</blue>
+ </color>
+ <color>
+ <red>105</red>
+ <green>105</green>
+ <blue>105</blue>
+ </color>
+ <color>
+ <red>140</red>
+ <green>140</green>
+ <blue>140</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>170</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>211</red>
+ <green>211</green>
+ <blue>211</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </inactive>
+ </palette>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>)</string>
+ </property>
+ <property stdset="1">
+ <name>palette</name>
+ <palette>
+ <active>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>211</red>
+ <green>211</green>
+ <blue>211</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>233</red>
+ <green>233</green>
+ <blue>233</blue>
+ </color>
+ <color>
+ <red>105</red>
+ <green>105</green>
+ <blue>105</blue>
+ </color>
+ <color>
+ <red>140</red>
+ <green>140</green>
+ <blue>140</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </active>
+ <disabled>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>211</red>
+ <green>211</green>
+ <blue>211</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>242</red>
+ <green>242</green>
+ <blue>242</blue>
+ </color>
+ <color>
+ <red>105</red>
+ <green>105</green>
+ <blue>105</blue>
+ </color>
+ <color>
+ <red>140</red>
+ <green>140</green>
+ <blue>140</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </disabled>
+ <inactive>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>211</red>
+ <green>211</green>
+ <blue>211</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>242</red>
+ <green>242</green>
+ <blue>242</blue>
+ </color>
+ <color>
+ <red>105</red>
+ <green>105</green>
+ <blue>105</blue>
+ </color>
+ <color>
+ <red>140</red>
+ <green>140</green>
+ <blue>140</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </inactive>
+ </palette>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer1</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>helpButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Help</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buttonOk</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;OK</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>default</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Cancel</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>PixmapFunction</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>PixmapFunction</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+</UI>
diff --git a/kommander/editor/preferences.ui b/kommander/editor/preferences.ui
new file mode 100644
index 00000000..6bd5dac3
--- /dev/null
+++ b/kommander/editor/preferences.ui
@@ -0,0 +1,669 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Preferences</class>
+<comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>Preferences</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>467</width>
+ <height>404</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Preferences</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Preferences&lt;/b&gt;&lt;p&gt;Change the preferences of Qt Designer. There is always one tab with general preferences. There may be additional tabs, depending on which plugins are installed.&lt;/p&gt;</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>tabWidget</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>pageGeneral</cstring>
+ </property>
+ <attribute name="title">
+ <string>General</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QButtonGroup" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>ButtonGroup1</cstring>
+ </property>
+ <property name="title">
+ <string>Backgro&amp;und</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="StyledButton" row="0" column="1">
+ <property name="name">
+ <cstring>buttonColor</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>TabFocus</enum>
+ </property>
+ <property name="scale" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Choose a color</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Select a color in the color dialog.</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton" row="0" column="0">
+ <property name="name">
+ <cstring>radioColor</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>TabFocus</enum>
+ </property>
+ <property name="text">
+ <string>Co&amp;lor</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Use a background color</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Use a background color.</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton" row="1" column="0">
+ <property name="name">
+ <cstring>radioPixmap</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Pixmap</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Use a background pixmap</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Use a background pixmap.</string>
+ </property>
+ </widget>
+ <widget class="StyledButton" row="1" column="1">
+ <property name="name">
+ <cstring>buttonPixmap</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>TabFocus</enum>
+ </property>
+ <property name="scale" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Select a pixmap</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Choose a pixmap file.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QCheckBox" row="0" column="1">
+ <property name="name">
+ <cstring>checkBoxShowGrid</cstring>
+ </property>
+ <property name="text">
+ <string>Show &amp;grid</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Show Grid</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Customize the grid appearance for all forms.&lt;/b&gt;&lt;p&gt;When &lt;b&gt;Show Grid&lt;/b&gt; is checked, all forms show a grid.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QGroupBox" row="1" column="1">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Gr&amp;id</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string></string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkBoxGrid</cstring>
+ </property>
+ <property name="text">
+ <string>Sn&amp;ap to grid</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Snap to the grid</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Customize the grid-settings for all forms.&lt;/b&gt;&lt;p&gt;When &lt;b&gt;Snap to Grid&lt;/b&gt; is checked, the widgets snap to the grid using the the X/Y resolution.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout4</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>spinGridX</cstring>
+ </property>
+ <property name="maxValue">
+ <number>50</number>
+ </property>
+ <property name="minValue">
+ <number>5</number>
+ </property>
+ <property name="value">
+ <number>10</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Grid resolution</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Customize the grid-settings for all forms.&lt;/b&gt;&lt;p&gt;When &lt;b&gt;Show Grid&lt;/b&gt; is checked, a grid is shown on all forms using the X/Y resolution.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>spinGridY</cstring>
+ </property>
+ <property name="maxValue">
+ <number>50</number>
+ </property>
+ <property name="minValue">
+ <number>5</number>
+ </property>
+ <property name="value">
+ <number>10</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Grid resolution</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Customize the grid-settings for all forms.&lt;/b&gt;&lt;p&gt;When &lt;b&gt;Show Grid&lt;/b&gt; is checked, a grid is shown on all forms using the X/Y resolution.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>Label1</cstring>
+ </property>
+ <property name="text">
+ <string>Grid-&amp;X:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>spinGridX</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>Label1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Grid-&amp;Y:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>spinGridY</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer row="3" column="0">
+ <property name="name">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>A splash screen is displayed when starting Qt Designer if this option is checked.</string>
+ </property>
+ </spacer>
+ <widget class="QGroupBox" row="2" column="0">
+ <property name="name">
+ <cstring>GroupBox5</cstring>
+ </property>
+ <property name="title">
+ <string>Ge&amp;neral</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkBoxWorkspace</cstring>
+ </property>
+ <property name="text">
+ <string>Restore last &amp;workspace on startup</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Restore last workspace</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The current workspace settings will be restored the next time you start Qt Designer if this option is checked.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkBoxSplash</cstring>
+ </property>
+ <property name="text">
+ <string>Show &amp;splash screen on startup</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Show Splashscreen</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>A splash screen is displayed when starting Qt Designer if this option is checked.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkAutoEdit</cstring>
+ </property>
+ <property name="text">
+ <string>Disable data&amp;base auto-edit in preview</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>Label3</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Documentation path:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>editDocPath</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>editDocPath</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Enter the path to the documentation.&lt;/b&gt;&lt;p&gt;You may provide an $environment variable as the first part of the pathname.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>buttonDocPath</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>TabFocus</enum>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Select path</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Look for the documentation path.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="2" column="1">
+ <property name="name">
+ <cstring>GroupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>&amp;Toolbars</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkBoxBigIcons</cstring>
+ </property>
+ <property name="text">
+ <string>Show &amp;big icons</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Big Icons</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Big icons will be used in the toolbars if this is checked.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkBoxTextLabels</cstring>
+ </property>
+ <property name="text">
+ <string>Show text lab&amp;els</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Text Labels</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Text labels will be usin in the toolbars if this is checked.</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+ </widget>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>helpButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and apply all the changes.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>false</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and discard any changes.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>StyledButton</class>
+ <header location="local">styledbutton.h</header>
+ <sizehint>
+ <width>40</width>
+ <height>25</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ <signal>clicked()</signal>
+ <signal>changed()</signal>
+ <property type="Color">color</property>
+ <property type="Pixmap">pixmap</property>
+ <property type="Bool">scale</property>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="1112">789c9dd2cb8e9b301406e07d9e0225bba89a09601350d505302c5b7559a9eac23e6672b363620c0ca9faeef53949da2e2a55eab123f9e38f2f217e5e475f3e7f8cd6cf8bde0b7f8008f6c2456b3518337ffdf6e1fb62992451e8691ac5cb778be55304d1277b6e71fc12c6ab0d157222e61bd8e4c812196f6216535a13f318624a6764b2495842e99558249014c81e99c6294b69d3376291424ae9806431638cd28628183081f4489e70ce13e4852878c129ad905992f18cd291283295517a466ed32ddfa64847945bb595c80e99a739cf29d54499ab9c528b2c58c10b86344428540148400a26b8a0541241b482d215523299494a0551c9562ae409091c32e0c82351410b942aa4e22a53941e882d36e41ed966d8903b2215f215f99a6143b6442afaafff5aff485658622584a091941256948443d1cabbdd6ebf3f28753c09a9e9cdc1fe703c9e4ea19f689a0430fa4c8908082be093d08d016bbb0bbd5e7ceafade5b30de19d083b3fa9e008cd39b9fafd69495b473af7fcfb15325c1d61eea0afaf005ddf97b5295c658a866338f97591babef7340fa396c6c5ca9e7fe650807d0bf566b4262299986ba335a3b4a2cc84b69ac85b1b673037d8fabf95b023a9c09cc7530e104dd5419ed6e27083fb09a7c752db5a9bd31cde4ec634ed8a39aebbe337618c3f6fdc5dee6d8b0bb0d6b5b8b1fad43d78fe4e14e3f6aace8e29d9d736777fea3c686eee0138c9726d4d00c548df7a315ff750f7ebc5ffc04a0e5308d</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>Preferences</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>Preferences</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>checkBoxGrid</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>spinGridX</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>checkBoxGrid</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>spinGridY</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>radioColor</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>buttonColor</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>radioPixmap</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>buttonPixmap</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>checkBoxShowGrid</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>GroupBox1</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <slot access="protected" language="C++" returnType="void">init()</slot>
+ <slot access="protected" language="C++" returnType="void">destroy()</slot>
+</connections>
+<tabstops>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+ <tabstop>tabWidget</tabstop>
+ <tabstop>radioColor</tabstop>
+ <tabstop>radioPixmap</tabstop>
+ <tabstop>buttonColor</tabstop>
+ <tabstop>buttonPixmap</tabstop>
+ <tabstop>checkBoxShowGrid</tabstop>
+ <tabstop>checkBoxGrid</tabstop>
+ <tabstop>spinGridX</tabstop>
+ <tabstop>spinGridY</tabstop>
+ <tabstop>checkBoxWorkspace</tabstop>
+ <tabstop>checkBoxSplash</tabstop>
+ <tabstop>checkAutoEdit</tabstop>
+ <tabstop>editDocPath</tabstop>
+ <tabstop>buttonDocPath</tabstop>
+ <tabstop>checkBoxBigIcons</tabstop>
+ <tabstop>checkBoxTextLabels</tabstop>
+ <tabstop>helpButton</tabstop>
+</tabstops>
+</UI>
diff --git a/kommander/editor/previewframe.cpp b/kommander/editor/previewframe.cpp
new file mode 100644
index 00000000..9ffd77af
--- /dev/null
+++ b/kommander/editor/previewframe.cpp
@@ -0,0 +1,52 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qvbox.h>
+#include <qpainter.h>
+
+#include "previewframe.h"
+
+PreviewFrame::PreviewFrame( QWidget *parent, const char *name )
+ : QVBox( parent, name )
+{
+ setMinimumSize(200, 200);
+ setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
+ setLineWidth(1);
+
+ PreviewWorkspace * w = new PreviewWorkspace( this );
+ w->setEraseColor(colorGroup().dark());
+ previewWidget = new PreviewWidget( w );
+ previewWidget->move( 10, 10 );
+}
+
+void PreviewFrame::setPreviewPalette(QPalette pal)
+{
+ previewWidget->setPalette(pal);
+}
+
+void PreviewWorkspace::paintEvent( QPaintEvent* )
+{
+ QPainter p ( this );
+ p.setPen( QPen( white ) );
+ p.drawText ( 0, height() / 2, width(), height(), AlignHCenter,
+ "The moose in the noose\nate the goose who was loose." );
+}
+
+#include "previewframe.moc"
diff --git a/kommander/editor/previewframe.h b/kommander/editor/previewframe.h
new file mode 100644
index 00000000..b8ff33a4
--- /dev/null
+++ b/kommander/editor/previewframe.h
@@ -0,0 +1,53 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __previewframe_h__
+#define __previewframe_h__
+
+#include <qvbox.h>
+#include <qworkspace.h>
+
+#include "previewwidgetimpl.h"
+
+class PreviewWorkspace : public QWorkspace
+{
+ Q_OBJECT
+public:
+ PreviewWorkspace( QWidget* parent = 0, const char* name = 0 )
+ : QWorkspace( parent, name ) {}
+ ~PreviewWorkspace() {}
+
+protected:
+ void paintEvent( QPaintEvent* );
+};
+
+class PreviewFrame : public QVBox
+{
+ Q_OBJECT
+
+public:
+ PreviewFrame( QWidget *parent = 0, const char *name = 0 );
+ void setPreviewPalette(QPalette);
+
+private:
+ PreviewWidget *previewWidget;
+};
+
+#endif
diff --git a/kommander/editor/previewwidget.ui b/kommander/editor/previewwidget.ui
new file mode 100644
index 00000000..317313cf
--- /dev/null
+++ b/kommander/editor/previewwidget.ui
@@ -0,0 +1,279 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>PreviewWidgetBase</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>PreviewWidgetBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>378</width>
+ <height>236</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property name="caption">
+ <string>Preview Window</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout17</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>ButtonGroup1</cstring>
+ </property>
+ <property name="title">
+ <string>ButtonGroup</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>RadioButton1</cstring>
+ </property>
+ <property name="text">
+ <string>RadioButton1</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>RadioButton2</cstring>
+ </property>
+ <property name="text">
+ <string>RadioButton2</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>RadioButton3</cstring>
+ </property>
+ <property name="text">
+ <string>RadioButton3</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>ButtonGroup2</cstring>
+ </property>
+ <property name="title">
+ <string>ButtonGroup2</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox1</cstring>
+ </property>
+ <property name="text">
+ <string>CheckBox1</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox2</cstring>
+ </property>
+ <property name="text">
+ <string>CheckBox2</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QProgressBar">
+ <property name="name">
+ <cstring>ProgressBar1</cstring>
+ </property>
+ <property name="progress">
+ <number>50</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout5</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>LineEdit1</cstring>
+ </property>
+ <property name="text">
+ <string>LineEdit</string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>ComboBox</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>ComboBox1</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout13</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>SpinBox1</cstring>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>PushButton1</cstring>
+ </property>
+ <property name="text">
+ <string>PushButton</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QScrollBar">
+ <property name="name">
+ <cstring>ScrollBar1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QSlider">
+ <property name="name">
+ <cstring>Slider1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QTextView">
+ <property name="name">
+ <cstring>textView</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32767</width>
+ <height>50</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>&lt;p&gt;
+&lt;a href="http://www.trolltech.com"&gt; http://www.trolltech.com &lt;/a&gt;
+&lt;/p&gt;
+&lt;p&gt;
+&lt;a href="http://www.kde.org"&gt; http://www.kde.org &lt;/a&gt;
+&lt;/p&gt;</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<connections>
+ <slot access="protected" language="C++" returnType="void">init()</slot>
+ <slot access="protected" language="C++" returnType="void">destroy()</slot>
+</connections>
+</UI>
diff --git a/kommander/editor/previewwidgetimpl.cpp b/kommander/editor/previewwidgetimpl.cpp
new file mode 100644
index 00000000..9febc180
--- /dev/null
+++ b/kommander/editor/previewwidgetimpl.cpp
@@ -0,0 +1,60 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qobjectlist.h"
+#include "previewwidgetimpl.h"
+
+PreviewWidget::PreviewWidget( QWidget *parent, const char *name )
+ : PreviewWidgetBase( parent, name )
+{
+ // install event filter on child widgets
+ QObjectList *l = queryList("QWidget");
+ QObjectListIt it(*l);
+ QObject * obj;
+ while ((obj = it.current()) != 0) {
+ ++it;
+ obj->installEventFilter(this);
+ ((QWidget*)obj)->setFocusPolicy(NoFocus);
+ }
+}
+
+void PreviewWidget::closeEvent(QCloseEvent *e)
+{
+ e->ignore();
+}
+
+bool PreviewWidget::eventFilter(QObject *, QEvent *e)
+{
+ switch ( e->type() ) {
+ case QEvent::MouseButtonPress:
+ case QEvent::MouseButtonRelease:
+ case QEvent::MouseButtonDblClick:
+ case QEvent::MouseMove:
+ case QEvent::KeyPress:
+ case QEvent::KeyRelease:
+ case QEvent::Enter:
+ case QEvent::Leave:
+ return true; // ignore;
+ default:
+ break;
+ }
+ return false;
+}
+#include "previewwidgetimpl.moc"
diff --git a/kommander/editor/previewwidgetimpl.h b/kommander/editor/previewwidgetimpl.h
new file mode 100644
index 00000000..142a7758
--- /dev/null
+++ b/kommander/editor/previewwidgetimpl.h
@@ -0,0 +1,37 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __previewwidgetimpl_h__
+#define __previewwidgetimpl_h__
+
+#include "previewwidget.h"
+
+class PreviewWidget : public PreviewWidgetBase
+{
+ Q_OBJECT
+
+public:
+ PreviewWidget( QWidget *parent = 0, const char *name = 0 );
+
+ void closeEvent(QCloseEvent *);
+ bool eventFilter(QObject *, QEvent *);
+};
+
+#endif
diff --git a/kommander/editor/propertyeditor.cpp b/kommander/editor/propertyeditor.cpp
new file mode 100644
index 00000000..9dfb7759
--- /dev/null
+++ b/kommander/editor/propertyeditor.cpp
@@ -0,0 +1,3706 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qvariant.h> // HP-UX compiler needs this here
+
+#include "propertyeditor.h"
+#include "pixmapchooser.h"
+#include "formwindow.h"
+#include "command.h"
+#include "metadatabase.h"
+#include "widgetdatabase.h"
+#include "widgetfactory.h"
+#include "globaldefs.h"
+#include "defs.h"
+#include "asciivalidator.h"
+#include "paletteeditorimpl.h"
+#include "multilineeditorimpl.h"
+#include "mainwindow.h"
+#ifndef KOMMANDER
+#include "project.h"
+#endif
+#include "hierarchyview.h"
+
+#include <limits.h>
+
+#include <qpainter.h>
+#include <qpalette.h>
+#include <qapplication.h>
+#include <qheader.h>
+#include <qlineedit.h>
+#include <qstrlist.h>
+#include <qmetaobject.h>
+#include <qcombobox.h>
+#include <qpushbutton.h>
+#include <qhbox.h>
+#include <qfontdialog.h>
+#include <qspinbox.h>
+#include <qevent.h>
+#include <qobjectlist.h>
+#include <qlistbox.h>
+#include <qfontdatabase.h>
+#include <qcolor.h>
+#include <kcolordialog.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qsizepolicy.h>
+#include <qbitmap.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qaccel.h>
+#include <qworkspace.h>
+#include <qtimer.h>
+#include <qdragobject.h>
+#include <qdom.h>
+#include <qprocess.h>
+#include <qstyle.h>
+#include <qdatetimeedit.h>
+
+#include "pics/arrow.xbm"
+#include "pics/uparrow.xbm"
+#include "pics/cross.xbm"
+#include "pics/wait.xbm"
+#include "pics/ibeam.xbm"
+#include "pics/sizeh.xbm"
+#include "pics/sizev.xbm"
+#include "pics/sizeb.xbm"
+#include "pics/sizef.xbm"
+#include "pics/sizeall.xbm"
+#include "pics/vsplit.xbm"
+#include "pics/hsplit.xbm"
+#include "pics/hand.xbm"
+#include "pics/no.xbm"
+
+#include <klocale.h>
+
+static QFontDatabase *fontDataBase = 0;
+QString assistantPath();
+
+static void cleanupFontDatabase()
+{
+ delete fontDataBase;
+ fontDataBase = 0;
+}
+
+static QStringList getFontList()
+{
+ if ( !fontDataBase ) {
+ fontDataBase = new QFontDatabase;
+ qAddPostRoutine( cleanupFontDatabase );
+ }
+ return fontDataBase->families();
+}
+
+
+class PropertyWhatsThis : public QWhatsThis
+{
+public:
+ PropertyWhatsThis( PropertyList *l );
+ QString text( const QPoint &pos );
+ bool clicked( const QString& href );
+
+private:
+ PropertyList *propertyList;
+
+};
+
+PropertyWhatsThis::PropertyWhatsThis( PropertyList *l )
+ : QWhatsThis( l->viewport() ), propertyList( l )
+{
+}
+
+QString PropertyWhatsThis::text( const QPoint &pos )
+{
+ return propertyList->whatsThisAt( pos );
+}
+
+bool PropertyWhatsThis::clicked( const QString& href )
+{
+ if ( !href.isEmpty() ) {
+ QStringList lst;
+ lst << assistantPath() << (QString( "d:" ) + QString( href ));
+ QProcess proc( lst );
+ proc.start();
+ }
+ return false; // do not hide window
+}
+
+
+/*!
+ \class PropertyItem propertyeditor.h
+ \brief Base class for all property items
+
+ This is the base class for each property item for the
+ PropertyList. A simple property item has just a name and a value to
+ provide an editor for a datatype. But more complex datatypes might
+ provide an expandable item for editing single parts of the
+ datatype. See hasSubItems(), initChildren() for that.
+*/
+
+/*! If this item should be a child of another property item, specify
+ \a prop as the parent item.
+*/
+
+PropertyItem::PropertyItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName )
+ : QListViewItem( l, after ), listview( l ), property( prop ), propertyName( propName )
+{
+ setSelectable( false );
+ open = false;
+ setText( 0, propertyName );
+ changed = false;
+ setText( 1, "" );
+ resetButton = 0;
+}
+
+PropertyItem::~PropertyItem()
+{
+ if ( resetButton )
+ delete resetButton->parentWidget();
+ resetButton = 0;
+}
+
+void PropertyItem::toggle()
+{
+}
+
+void PropertyItem::updateBackColor()
+{
+ if ( itemAbove() && this != listview->firstChild() ) {
+ if ( ( ( PropertyItem*)itemAbove() )->backColor == *backColor1 )
+ backColor = *backColor2;
+ else
+ backColor = *backColor1;
+ } else {
+ backColor = *backColor1;
+ }
+ if ( listview->firstChild() == this )
+ backColor = *backColor1;
+}
+
+QColor PropertyItem::backgroundColor()
+{
+ updateBackColor();
+ if ( (QListViewItem*)this == listview->currentItem() )
+ return *selectedBack;
+ return backColor;
+}
+
+/*! If a subclass is a expandable item, this is called when the child
+items should be created.
+*/
+
+void PropertyItem::createChildren()
+{
+}
+
+/*! If a subclass is a expandable item, this is called when the child
+items should be initialized.
+*/
+
+void PropertyItem::initChildren()
+{
+}
+
+void PropertyItem::paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int align )
+{
+ QColorGroup g( cg );
+ g.setColor( QColorGroup::Base, backgroundColor() );
+ g.setColor( QColorGroup::Foreground, Qt::black );
+ g.setColor( QColorGroup::Text, Qt::black );
+ int indent = 0;
+ if ( column == 0 ) {
+ indent = 20 + ( property ? 20 : 0 );
+ p->fillRect( 0, 0, width, height(), backgroundColor() );
+ p->save();
+ p->translate( indent, 0 );
+ }
+
+ if ( isChanged() && column == 0 ) {
+ p->save();
+ QFont f = p->font();
+ f.setBold( true );
+ p->setFont( f );
+ }
+
+ if ( !hasCustomContents() || column != 1 ) {
+ QListViewItem::paintCell( p, g, column, width - indent, align );
+ } else {
+ p->fillRect( 0, 0, width, height(), backgroundColor() );
+ drawCustomContents( p, QRect( 0, 0, width, height() ) );
+ }
+
+ if ( isChanged() && column == 0 )
+ p->restore();
+ if ( column == 0 )
+ p->restore();
+ if ( hasSubItems() && column == 0 ) {
+ p->save();
+ p->setPen( cg.foreground() );
+ p->setBrush( cg.base() );
+ p->drawRect( 5, height() / 2 - 4, 9, 9 );
+ p->drawLine( 7, height() / 2, 11, height() / 2 );
+ if ( !isOpen() )
+ p->drawLine( 9, height() / 2 - 2, 9, height() / 2 + 2 );
+ p->restore();
+ }
+ p->save();
+ p->setPen( QPen( cg.dark(), 1 ) );
+ p->drawLine( 0, height() - 1, width, height() - 1 );
+ p->drawLine( width - 1, 0, width - 1, height() );
+ p->restore();
+
+ if ( listview->currentItem() == this && column == 0 &&
+ !listview->hasFocus() && !listview->viewport()->hasFocus() )
+ paintFocus( p, cg, QRect( 0, 0, width, height() ) );
+}
+
+void PropertyItem::paintBranches( QPainter * p, const QColorGroup & cg,
+ int w, int y, int h )
+{
+ QColorGroup g( cg );
+ g.setColor( QColorGroup::Base, backgroundColor() );
+ QListViewItem::paintBranches( p, g, w, y, h );
+}
+
+void PropertyItem::paintFocus( QPainter *p, const QColorGroup &cg, const QRect &r )
+{
+ p->save();
+ QApplication::style().drawPrimitive(QStyle::PE_Panel, p, r, cg,
+ QStyle::Style_Sunken, QStyleOption(1,1) );
+ p->restore();
+}
+
+/*! Subclasses which are expandable items have to return true
+ here. Default is false.
+*/
+
+bool PropertyItem::hasSubItems() const
+{
+ return false;
+}
+
+/*! Returns the parent property item here if this is a child or 0
+ otherwise.
+ */
+
+PropertyItem *PropertyItem::propertyParent() const
+{
+ return property;
+}
+
+bool PropertyItem::isOpen() const
+{
+ return open;
+}
+
+void PropertyItem::setOpen( bool b )
+{
+ if ( b == open )
+ return;
+ open = b;
+
+ if ( !open ) {
+ children.setAutoDelete( true );
+ children.clear();
+ children.setAutoDelete( false );
+ qApp->processEvents();
+ listview->updateEditorSize();
+ return;
+ }
+
+ createChildren();
+ initChildren();
+ qApp->processEvents();
+ listview->updateEditorSize();
+}
+
+/*! Subclasses have to show the editor of the item here
+*/
+
+void PropertyItem::showEditor()
+{
+ createResetButton();
+ resetButton->parentWidget()->show();
+}
+
+/*! Subclasses have to hide the editor of the item here
+*/
+
+void PropertyItem::hideEditor()
+{
+ createResetButton();
+ resetButton->parentWidget()->hide();
+}
+
+/*! This is called to init the value of the item. Reimplement in
+ subclasses to init the editor
+*/
+
+void PropertyItem::setValue( const QVariant &v )
+{
+ val = v;
+}
+
+QVariant PropertyItem::value() const
+{
+ return val;
+}
+
+bool PropertyItem::isChanged() const
+{
+ return changed;
+}
+
+void PropertyItem::setChanged( bool b, bool updateDb )
+{
+ if ( propertyParent() )
+ return;
+ if ( changed == b )
+ return;
+ changed = b;
+ repaint();
+ if ( updateDb )
+ MetaDataBase::setPropertyChanged( listview->propertyEditor()->widget(), name(), changed );
+ updateResetButtonState();
+}
+
+QString PropertyItem::name() const
+{
+ return propertyName;
+}
+
+void PropertyItem::createResetButton()
+{
+ if ( resetButton ) {
+ resetButton->parentWidget()->lower();
+ return;
+ }
+ QHBox *hbox = new QHBox( listview->viewport() );
+ hbox->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
+ hbox->setLineWidth( 1 );
+ resetButton = new QPushButton( hbox );
+ resetButton->setPixmap( PixmapChooser::loadPixmap( "resetproperty.xpm", PixmapChooser::Mini ) );
+ resetButton->setFixedWidth( resetButton->sizeHint().width() );
+ hbox->layout()->setAlignment( Qt::AlignRight );
+ listview->addChild( hbox );
+ hbox->hide();
+ QObject::connect( resetButton, SIGNAL( clicked() ),
+ listview, SLOT( resetProperty() ) );
+ QToolTip::add( resetButton, i18n("Reset the property to its default value" ) );
+ QWhatsThis::add( resetButton, i18n("Click this button to reset the property to its default value" ) );
+ updateResetButtonState();
+}
+
+void PropertyItem::updateResetButtonState()
+{
+ if ( !resetButton )
+ return;
+ if ( propertyParent() || !WidgetFactory::canResetProperty( listview->propertyEditor()->widget(), name() ) )
+ resetButton->setEnabled( false );
+ else
+ resetButton->setEnabled( isChanged() );
+}
+
+/*! Call this to place/resize the item editor correctly (normally
+ call it from showEditor())
+*/
+
+void PropertyItem::placeEditor( QWidget *w )
+{
+ createResetButton();
+ QRect r = listview->itemRect( this );
+ if ( !r.size().isValid() ) {
+ listview->ensureItemVisible( this );
+#if defined(Q_WS_WIN)
+ listview->repaintContents( false );
+#endif
+ r = listview->itemRect( this );
+ }
+ r.setX( listview->header()->sectionPos( 1 ) );
+ r.setWidth( listview->header()->sectionSize( 1 ) - 1 );
+ r.setWidth( r.width() - resetButton->width() - 2 );
+ r = QRect( listview->viewportToContents( r.topLeft() ), r.size() );
+ w->resize( r.size() );
+ listview->moveChild( w, r.x(), r.y() );
+ resetButton->parentWidget()->resize( resetButton->sizeHint().width() + 10, r.height() );
+ listview->moveChild( resetButton->parentWidget(), r.x() + r.width() - 8, r.y() );
+ resetButton->setFixedHeight( r.height() - 3 );
+}
+
+/*! This should be called by subclasses if the use changed the value
+ of the property and this value should be applied to the widget property
+*/
+
+void PropertyItem::notifyValueChange()
+{
+ if ( !propertyParent() ) {
+ listview->valueChanged( this );
+ setChanged( true );
+ if ( hasSubItems() )
+ initChildren();
+ } else {
+ propertyParent()->childValueChanged( this );
+ setChanged( true );
+ }
+}
+
+/*! If a subclass is a expandable item reimplement this as this is
+ always called if a child item changed its value. So update the
+ display of the item here then.
+*/
+
+void PropertyItem::childValueChanged( PropertyItem * )
+{
+}
+
+/*! When adding a child item, call this (normally from addChildren()
+*/
+
+void PropertyItem::addChild( PropertyItem *i )
+{
+ children.append( i );
+}
+
+int PropertyItem::childCount() const
+{
+ return children.count();
+}
+
+PropertyItem *PropertyItem::child( int i ) const
+{
+ // ARRRRRRRRG
+ return ( (PropertyItem*)this )->children.at( i );
+}
+
+/*! If the contents of the item is not displayable with a text, but
+ you want to draw it yourself (using drawCustomContents()), return
+ true here.
+*/
+
+bool PropertyItem::hasCustomContents() const
+{
+ return false;
+}
+
+/*!
+ \sa hasCustomContents()
+*/
+
+void PropertyItem::drawCustomContents( QPainter *, const QRect & )
+{
+}
+
+QString PropertyItem::currentItem() const
+{
+ return QString::null;
+}
+
+int PropertyItem::currentIntItem() const
+{
+ return -1;
+}
+
+void PropertyItem::setCurrentItem( const QString & )
+{
+}
+
+void PropertyItem::setCurrentItem( int )
+{
+}
+
+int PropertyItem::currentIntItemFromObject() const
+{
+ return -1;
+}
+
+QString PropertyItem::currentItemFromObject() const
+{
+ return QString::null;
+}
+
+void PropertyItem::setFocus( QWidget *w )
+{
+ if ( !qApp->focusWidget() ||
+ listview->propertyEditor()->formWindow() &&
+ ( !MainWindow::self->isAFormWindowChild( qApp->focusWidget() ) &&
+ !qApp->focusWidget()->inherits( "Editor" ) ) )
+ w->setFocus();
+}
+
+void PropertyItem::setText( int col, const QString &t )
+{
+ QString txt( t );
+ if ( col == 1 )
+ txt = txt.replace( QRegExp( "\n" ), " " );
+ QListViewItem::setText( col, txt );
+}
+
+// --------------------------------------------------------------
+
+PropertyTextItem::PropertyTextItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName, bool comment, bool multiLine, bool ascii, bool a )
+ : PropertyItem( l, after, prop, propName ), withComment( comment ),
+ hasMultiLines( multiLine ), asciiOnly( ascii ), accel( a )
+{
+ lin = 0;
+ box = 0;
+}
+
+QLineEdit *PropertyTextItem::lined()
+{
+ if ( lin )
+ return lin;
+ if ( hasMultiLines ) {
+ box = new QHBox( listview->viewport() );
+ box->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
+ box->setLineWidth( 2 );
+ box->hide();
+ }
+
+ lin = 0;
+ if ( hasMultiLines )
+ lin = new QLineEdit( box );
+ else
+ lin = new QLineEdit( listview->viewport() );
+
+ if ( asciiOnly ) {
+ if ( PropertyItem::name() == "name" )
+ lin->setValidator( new AsciiValidator( lin, "ascii_validator" ) );
+ else
+ lin->setValidator( new AsciiValidator( QString("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"
+ "\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9"
+ "\xaa\xab\xac\xad\xae\xaf\xb1\xb2\xb3"
+ "\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc"
+ "\xbd\xbe\xbf"), lin, "ascii_validator" ) );
+ } if ( !hasMultiLines ) {
+ lin->hide();
+ } else {
+ button = new QPushButton( i18n("..."), box );
+ button->setFixedWidth( 20 );
+ connect( button, SIGNAL( clicked() ),
+ this, SLOT( getText() ) );
+ lin->setFrame( false );
+ }
+ connect( lin, SIGNAL( returnPressed() ),
+ this, SLOT( setValue() ) );
+ connect( lin, SIGNAL( textChanged( const QString & ) ),
+ this, SLOT( setValue() ) );
+ if ( PropertyItem::name() == "name" || PropertyItem::name() == "itemName" )
+ connect( lin, SIGNAL( returnPressed() ),
+ listview->propertyEditor()->formWindow()->commandHistory(),
+ SLOT( checkCompressedCommand() ) );
+ lin->installEventFilter( listview );
+ return lin;
+}
+
+PropertyTextItem::~PropertyTextItem()
+{
+ delete (QLineEdit*)lin;
+ lin = 0;
+ delete (QHBox*)box;
+ box = 0;
+}
+
+void PropertyTextItem::setChanged( bool b, bool updateDb )
+{
+ PropertyItem::setChanged( b, updateDb );
+ if ( withComment && childCount() > 0 )
+ ( (PropertyTextItem*)PropertyItem::child( 0 ) )->lined()->setEnabled( b );
+}
+
+bool PropertyTextItem::hasSubItems() const
+{
+ return withComment;
+}
+
+void PropertyTextItem::childValueChanged( PropertyItem *child )
+{
+ if ( PropertyItem::name() != "name" )
+ MetaDataBase::setPropertyComment( listview->propertyEditor()->widget(),
+ PropertyItem::name(), child->value().toString() );
+ else
+ MetaDataBase::setExportMacro( listview->propertyEditor()->widget(), child->value().toString() );
+ listview->propertyEditor()->formWindow()->commandHistory()->setModified( true );
+}
+
+static QString to_string( const QVariant &v, bool accel )
+{
+ if ( !accel )
+ return v.toString();
+ return QAccel::keyToString( v.toInt() );
+}
+
+void PropertyTextItem::showEditor()
+{
+ PropertyItem::showEditor();
+ if ( !lin || lin->text().length() == 0 ) {
+ lined()->blockSignals( true );
+ lined()->setText( to_string( value(), accel ) );
+ lined()->blockSignals( false );
+ }
+
+ QWidget* w;
+ if ( hasMultiLines )
+ w = box;
+ else
+ w= lined();
+
+ placeEditor( w );
+ if ( !w->isVisible() || !lined()->hasFocus() ) {
+ w->show();
+ setFocus( lined() );
+ }
+}
+
+void PropertyTextItem::createChildren()
+{
+ PropertyTextItem *i = new PropertyTextItem( listview, this, this,
+ PropertyItem::name() == "name" ?
+ "export macro" : "comment", false, false,
+ PropertyItem::name() == "name" );
+ i->lined()->setEnabled( isChanged() );
+ addChild( i );
+}
+
+void PropertyTextItem::initChildren()
+{
+ if ( !childCount() )
+ return;
+ PropertyItem *item = PropertyItem::child( 0 );
+ if ( item ) {
+ if ( PropertyItem::name() != "name" )
+ item->setValue( MetaDataBase::propertyComment( listview->propertyEditor()->widget(),
+ PropertyItem::name() ) );
+ else
+ item->setValue( MetaDataBase::exportMacro( listview->propertyEditor()->widget() ) );
+ }
+}
+
+void PropertyTextItem::hideEditor()
+{
+ PropertyItem::hideEditor();
+ QWidget* w;
+ if ( hasMultiLines )
+ w = box;
+ else
+ w = lined();
+
+ w->hide();
+}
+
+void PropertyTextItem::setValue( const QVariant &v )
+{
+ if ( ( !hasSubItems() || !isOpen() )
+ && value() == v )
+ return;
+ if ( lin ) {
+ lined()->blockSignals( true );
+ int oldCursorPos;
+ oldCursorPos = lin->cursorPosition();
+ lined()->setText( to_string( v, accel ) );
+ if ( oldCursorPos < (int)lin->text().length() )
+ lin->setCursorPosition( oldCursorPos );
+ lined()->blockSignals( false );
+ }
+ setText( 1, to_string( v, accel ) );
+ PropertyItem::setValue( v );
+}
+
+void PropertyTextItem::setValue()
+{
+ setText( 1, lined()->text() );
+ QVariant v;
+ if ( accel )
+ v = QAccel::stringToKey( lined()->text() );
+ else
+ v = lined()->text();
+ PropertyItem::setValue( v );
+ notifyValueChange();
+}
+
+void PropertyTextItem::getText()
+{
+ QString txt = TextEditor::getText( listview, value().toString() );
+ if ( !txt.isEmpty() ) {
+ setText( 1, txt );
+ PropertyItem::setValue( txt );
+ notifyValueChange();
+ lined()->blockSignals( true );
+ lined()->setText( txt );
+ lined()->blockSignals( false );
+ }
+}
+
+// --------------------------------------------------------------
+
+PropertyDoubleItem::PropertyDoubleItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName )
+ : PropertyItem( l, after, prop, propName )
+{
+ lin = 0;
+}
+
+QLineEdit *PropertyDoubleItem::lined()
+{
+ if ( lin )
+ return lin;
+ lin = new QLineEdit( listview->viewport() );
+ lin->setValidator( new QDoubleValidator( lin, "double_validator" ) );
+
+ connect( lin, SIGNAL( returnPressed() ),
+ this, SLOT( setValue() ) );
+ connect( lin, SIGNAL( textChanged( const QString & ) ),
+ this, SLOT( setValue() ) );
+ lin->installEventFilter( listview );
+ return lin;
+}
+
+PropertyDoubleItem::~PropertyDoubleItem()
+{
+ delete (QLineEdit*)lin;
+ lin = 0;
+}
+
+void PropertyDoubleItem::showEditor()
+{
+ PropertyItem::showEditor();
+ if ( !lin ) {
+ lined()->blockSignals( true );
+ lined()->setText( QString::number( value().toDouble() ) );
+ lined()->blockSignals( false );
+ }
+ QWidget* w = lined();
+
+ placeEditor( w );
+ if ( !w->isVisible() || !lined()->hasFocus() ) {
+ w->show();
+ setFocus( lined() );
+ }
+}
+
+
+void PropertyDoubleItem::hideEditor()
+{
+ PropertyItem::hideEditor();
+ QWidget* w = lined();
+ w->hide();
+}
+
+void PropertyDoubleItem::setValue( const QVariant &v )
+{
+ if ( value() == v )
+ return;
+ if ( lin ) {
+ lined()->blockSignals( true );
+ int oldCursorPos;
+ oldCursorPos = lin->cursorPosition();
+ lined()->setText( QString::number( v.toDouble() ) );
+ if ( oldCursorPos < (int)lin->text().length() )
+ lin->setCursorPosition( oldCursorPos );
+ lined()->blockSignals( false );
+ }
+ setText( 1, QString::number( v.toDouble() ) );
+ PropertyItem::setValue( v );
+}
+
+void PropertyDoubleItem::setValue()
+{
+ setText( 1, lined()->text() );
+ QVariant v = lined()->text().toDouble();
+ PropertyItem::setValue( v );
+ notifyValueChange();
+}
+
+
+// --------------------------------------------------------------
+
+PropertyDateItem::PropertyDateItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName )
+ : PropertyItem( l, after, prop, propName )
+{
+ lin = 0;
+}
+
+QDateEdit *PropertyDateItem::lined()
+{
+ if ( lin )
+ return lin;
+ lin = new QDateEdit( listview->viewport() );
+ QObjectList *l = lin->queryList( "QLineEdit" );
+ for ( QObject *o = l->first(); o; o = l->next() )
+ o->installEventFilter( listview );
+ delete l;
+ connect( lin, SIGNAL( valueChanged( const QDate & ) ),
+ this, SLOT( setValue() ) );
+ return lin;
+}
+
+PropertyDateItem::~PropertyDateItem()
+{
+ delete (QDateEdit*)lin;
+ lin = 0;
+}
+
+void PropertyDateItem::showEditor()
+{
+ PropertyItem::showEditor();
+ if ( !lin ) {
+ lined()->blockSignals( true );
+ lined()->setDate( value().toDate() );
+ lined()->blockSignals( false );
+ }
+ placeEditor( lin );
+ if ( !lin->isVisible() ) {
+ lin->show();
+ setFocus( lin );
+ }
+}
+
+void PropertyDateItem::hideEditor()
+{
+ PropertyItem::hideEditor();
+ if ( lin )
+ lin->hide();
+}
+
+void PropertyDateItem::setValue( const QVariant &v )
+{
+ if ( ( !hasSubItems() || !isOpen() )
+ && value() == v )
+ return;
+
+ if ( lin ) {
+ lined()->blockSignals( true );
+ if ( lined()->date() != v.toDate() )
+ lined()->setDate( v.toDate() );
+ lined()->blockSignals( false );
+ }
+ setText( 1, v.toDate().toString( ::Qt::ISODate ) );
+ PropertyItem::setValue( v );
+}
+
+void PropertyDateItem::setValue()
+{
+ setText( 1, lined()->date().toString( ::Qt::ISODate ) );
+ QVariant v;
+ v = lined()->date();
+ PropertyItem::setValue( v );
+ notifyValueChange();
+}
+
+// --------------------------------------------------------------
+
+PropertyTimeItem::PropertyTimeItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName )
+ : PropertyItem( l, after, prop, propName )
+{
+ lin = 0;
+}
+
+QTimeEdit *PropertyTimeItem::lined()
+{
+ if ( lin )
+ return lin;
+ lin = new QTimeEdit( listview->viewport() );
+ connect( lin, SIGNAL( valueChanged( const QTime & ) ),
+ this, SLOT( setValue() ) );
+ QObjectList *l = lin->queryList( "QLineEdit" );
+ for ( QObject *o = l->first(); o; o = l->next() )
+ o->installEventFilter( listview );
+ delete l;
+ return lin;
+}
+
+PropertyTimeItem::~PropertyTimeItem()
+{
+ delete (QTimeEdit*)lin;
+ lin = 0;
+}
+
+void PropertyTimeItem::showEditor()
+{
+ PropertyItem::showEditor();
+ if ( !lin ) {
+ lined()->blockSignals( true );
+ lined()->setTime( value().toTime() );
+ lined()->blockSignals( false );
+ }
+ placeEditor( lin );
+ if ( !lin->isVisible() ) {
+ lin->show();
+ setFocus( lin );
+ }
+}
+
+void PropertyTimeItem::hideEditor()
+{
+ PropertyItem::hideEditor();
+ if ( lin )
+ lin->hide();
+}
+
+void PropertyTimeItem::setValue( const QVariant &v )
+{
+ if ( ( !hasSubItems() || !isOpen() )
+ && value() == v )
+ return;
+
+ if ( lin ) {
+ lined()->blockSignals( true );
+ if ( lined()->time() != v.toTime() )
+ lined()->setTime( v.toTime() );
+ lined()->blockSignals( false );
+ }
+ setText( 1, v.toTime().toString( ::Qt::ISODate ) );
+ PropertyItem::setValue( v );
+}
+
+void PropertyTimeItem::setValue()
+{
+ setText( 1, lined()->time().toString( ::Qt::ISODate ) );
+ QVariant v;
+ v = lined()->time();
+ PropertyItem::setValue( v );
+ notifyValueChange();
+}
+
+// --------------------------------------------------------------
+
+PropertyDateTimeItem::PropertyDateTimeItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName )
+ : PropertyItem( l, after, prop, propName )
+{
+ lin = 0;
+}
+
+QDateTimeEdit *PropertyDateTimeItem::lined()
+{
+ if ( lin )
+ return lin;
+ lin = new QDateTimeEdit( listview->viewport() );
+ connect( lin, SIGNAL( valueChanged( const QDateTime & ) ),
+ this, SLOT( setValue() ) );
+ QObjectList *l = lin->queryList( "QLineEdit" );
+ for ( QObject *o = l->first(); o; o = l->next() )
+ o->installEventFilter( listview );
+ delete l;
+ return lin;
+}
+
+PropertyDateTimeItem::~PropertyDateTimeItem()
+{
+ delete (QDateTimeEdit*)lin;
+ lin = 0;
+}
+
+void PropertyDateTimeItem::showEditor()
+{
+ PropertyItem::showEditor();
+ if ( !lin ) {
+ lined()->blockSignals( true );
+ lined()->setDateTime( value().toDateTime() );
+ lined()->blockSignals( false );
+ }
+ placeEditor( lin );
+ if ( !lin->isVisible() ) {
+ lin->show();
+ setFocus( lin );
+ }
+}
+
+void PropertyDateTimeItem::hideEditor()
+{
+ PropertyItem::hideEditor();
+ if ( lin )
+ lin->hide();
+}
+
+void PropertyDateTimeItem::setValue( const QVariant &v )
+{
+ if ( ( !hasSubItems() || !isOpen() )
+ && value() == v )
+ return;
+
+ if ( lin ) {
+ lined()->blockSignals( true );
+ if ( lined()->dateTime() != v.toDateTime() )
+ lined()->setDateTime( v.toDateTime() );
+ lined()->blockSignals( false );
+ }
+ setText( 1, v.toDateTime().toString( ::Qt::ISODate ) );
+ PropertyItem::setValue( v );
+}
+
+void PropertyDateTimeItem::setValue()
+{
+ setText( 1, lined()->dateTime().toString( ::Qt::ISODate ) );
+ QVariant v;
+ v = lined()->dateTime();
+ PropertyItem::setValue( v );
+ notifyValueChange();
+}
+
+// --------------------------------------------------------------
+
+PropertyBoolItem::PropertyBoolItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName )
+ : PropertyItem( l, after, prop, propName )
+{
+ comb = 0;
+}
+
+QComboBox *PropertyBoolItem::combo()
+{
+ if ( comb )
+ return comb;
+ comb = new QComboBox( false, listview->viewport() );
+ comb->hide();
+ comb->insertItem( i18n("False" ) );
+ comb->insertItem( i18n("True" ) );
+ connect( comb, SIGNAL( activated( int ) ),
+ this, SLOT( setValue() ) );
+ comb->installEventFilter( listview );
+ return comb;
+}
+
+PropertyBoolItem::~PropertyBoolItem()
+{
+ delete (QComboBox*)comb;
+ comb = 0;
+}
+
+void PropertyBoolItem::toggle()
+{
+ bool b = value().toBool();
+ setValue( QVariant( !b, 0 ) );
+ setValue();
+}
+
+void PropertyBoolItem::showEditor()
+{
+ PropertyItem::showEditor();
+ if ( !comb ) {
+ combo()->blockSignals( true );
+ if ( value().toBool() )
+ combo()->setCurrentItem( 1 );
+ else
+ combo()->setCurrentItem( 0 );
+ combo()->blockSignals( false );
+ }
+ placeEditor( combo() );
+ if ( !combo()->isVisible() || !combo()->hasFocus() ) {
+ combo()->show();
+ setFocus( combo() );
+ }
+}
+
+void PropertyBoolItem::hideEditor()
+{
+ PropertyItem::hideEditor();
+ combo()->hide();
+}
+
+void PropertyBoolItem::setValue( const QVariant &v )
+{
+ if ( ( !hasSubItems() || !isOpen() )
+ && value() == v )
+ return;
+
+ if ( comb ) {
+ combo()->blockSignals( true );
+ if ( v.toBool() )
+ combo()->setCurrentItem( 1 );
+ else
+ combo()->setCurrentItem( 0 );
+ combo()->blockSignals( false );
+ }
+ QString tmp = i18n("True" );
+ if ( !v.toBool() )
+ tmp = i18n("False" );
+ setText( 1, tmp );
+ PropertyItem::setValue( v );
+}
+
+void PropertyBoolItem::setValue()
+{
+ if ( !comb )
+ return;
+ setText( 1, combo()->currentText() );
+ bool b = combo()->currentItem() == 0 ? (bool)false : (bool)true;
+ PropertyItem::setValue( QVariant( b, 0 ) );
+ notifyValueChange();
+}
+
+// --------------------------------------------------------------
+
+PropertyIntItem::PropertyIntItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName, bool s )
+ : PropertyItem( l, after, prop, propName ), signedValue( s )
+{
+ spinBx = 0;
+}
+
+QSpinBox *PropertyIntItem::spinBox()
+{
+ if ( spinBx )
+ return spinBx;
+ if ( signedValue )
+ spinBx = new QSpinBox( -INT_MAX, INT_MAX, 1, listview->viewport() );
+ else
+ spinBx = new QSpinBox( 0, INT_MAX, 1, listview->viewport() );
+ spinBx->hide();
+ spinBx->installEventFilter( listview );
+ QObjectList *ol = spinBx->queryList( "QLineEdit" );
+ if ( ol && ol->first() )
+ ol->first()->installEventFilter( listview );
+ delete ol;
+ connect( spinBx, SIGNAL( valueChanged( int ) ),
+ this, SLOT( setValue() ) );
+ return spinBx;
+}
+
+PropertyIntItem::~PropertyIntItem()
+{
+ delete (QSpinBox*)spinBx;
+ spinBx = 0;
+}
+
+void PropertyIntItem::showEditor()
+{
+ PropertyItem::showEditor();
+ if ( !spinBx ) {
+ spinBox()->blockSignals( true );
+ if ( signedValue )
+ spinBox()->setValue( value().toInt() );
+ else
+ spinBox()->setValue( value().toUInt() );
+ spinBox()->blockSignals( false );
+ }
+ placeEditor( spinBox() );
+ if ( !spinBox()->isVisible() || !spinBox()->hasFocus() ) {
+ spinBox()->show();
+ setFocus( spinBox() );
+ }
+}
+
+void PropertyIntItem::hideEditor()
+{
+ PropertyItem::hideEditor();
+ spinBox()->hide();
+}
+
+void PropertyIntItem::setValue( const QVariant &v )
+{
+ if ( ( !hasSubItems() || !isOpen() )
+ && value() == v )
+ return;
+
+ if ( spinBx ) {
+ spinBox()->blockSignals( true );
+ if ( signedValue )
+ spinBox()->setValue( v.toInt() );
+ else
+ spinBox()->setValue( v.toUInt() );
+ spinBox()->blockSignals( false );
+ }
+
+ if ( signedValue )
+ setText( 1, QString::number( v.toInt() ) );
+ else
+ setText( 1, QString::number( v.toUInt() ) );
+ PropertyItem::setValue( v );
+}
+
+void PropertyIntItem::setValue()
+{
+ if ( !spinBx )
+ return;
+ setText( 1, QString::number( spinBox()->value() ) );
+ if ( signedValue )
+ PropertyItem::setValue( spinBox()->value() );
+ else
+ PropertyItem::setValue( (uint)spinBox()->value() );
+ notifyValueChange();
+}
+
+// --------------------------------------------------------------
+
+PropertyListItem::PropertyListItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName, bool e )
+ : PropertyItem( l, after, prop, propName ), editable( e )
+{
+ comb = 0;
+ oldInt = -1;
+}
+
+QComboBox *PropertyListItem::combo()
+{
+ if ( comb )
+ return comb;
+ comb = new QComboBox( editable, listview->viewport() );
+ comb->hide();
+ connect( comb, SIGNAL( activated( int ) ),
+ this, SLOT( setValue() ) );
+ comb->installEventFilter( listview );
+ if ( editable ) {
+ QObjectList *ol = comb->queryList( "QLineEdit" );
+ if ( ol && ol->first() )
+ ol->first()->installEventFilter( listview );
+ delete ol;
+ }
+ return comb;
+}
+
+PropertyListItem::~PropertyListItem()
+{
+ delete (QComboBox*)comb;
+ comb = 0;
+}
+
+void PropertyListItem::showEditor()
+{
+ PropertyItem::showEditor();
+ if ( !comb ) {
+ combo()->blockSignals( true );
+ combo()->clear();
+ combo()->insertStringList( value().toStringList() );
+ combo()->blockSignals( false );
+ }
+ placeEditor( combo() );
+ if ( !combo()->isVisible() || !combo()->hasFocus() ) {
+ combo()->show();
+ setFocus( combo() );
+ }
+}
+
+void PropertyListItem::hideEditor()
+{
+ PropertyItem::hideEditor();
+ combo()->hide();
+}
+
+void PropertyListItem::setValue( const QVariant &v )
+{
+ if ( comb ) {
+ combo()->blockSignals( true );
+ combo()->clear();
+ combo()->insertStringList( v.toStringList() );
+ combo()->blockSignals( false );
+ }
+ setText( 1, v.toStringList().first() );
+ PropertyItem::setValue( v );
+}
+
+void PropertyListItem::setValue()
+{
+ if ( !comb )
+ return;
+ setText( 1, combo()->currentText() );
+ QStringList lst;
+ for ( uint i = 0; i < combo()->listBox()->count(); ++i )
+ lst << combo()->listBox()->item( i )->text();
+ PropertyItem::setValue( lst );
+ notifyValueChange();
+ oldInt = currentIntItem();
+ oldString = currentItem();
+}
+
+QString PropertyListItem::currentItem() const
+{
+ return ( (PropertyListItem*)this )->combo()->currentText();
+}
+
+void PropertyListItem::setCurrentItem( const QString &s )
+{
+ if ( comb && currentItem().lower() == s.lower() )
+ return;
+
+ if ( !comb ) {
+ combo()->blockSignals( true );
+ combo()->clear();
+ combo()->insertStringList( value().toStringList() );
+ combo()->blockSignals( false );
+ }
+ for ( uint i = 0; i < combo()->listBox()->count(); ++i ) {
+ if ( combo()->listBox()->item( i )->text().lower() == s.lower() ) {
+ combo()->setCurrentItem( i );
+ setText( 1, combo()->currentText() );
+ break;
+ }
+ }
+ oldInt = currentIntItem();
+ oldString = currentItem();
+}
+
+void PropertyListItem::addItem( const QString &s )
+{
+ combo()->insertItem( s );
+}
+
+void PropertyListItem::setCurrentItem( int i )
+{
+ if ( comb && i == combo()->currentItem() )
+ return;
+
+ if ( !comb ) {
+ combo()->blockSignals( true );
+ combo()->clear();
+ combo()->insertStringList( value().toStringList() );
+ combo()->blockSignals( false );
+ }
+ combo()->setCurrentItem( i );
+ setText( 1, combo()->currentText() );
+ oldInt = currentIntItem();
+ oldString = currentItem();
+}
+
+int PropertyListItem::currentIntItem() const
+{
+ return ( (PropertyListItem*)this )->combo()->currentItem();
+}
+
+int PropertyListItem::currentIntItemFromObject() const
+{
+ return oldInt;
+}
+
+QString PropertyListItem::currentItemFromObject() const
+{
+ return oldString;
+}
+
+// --------------------------------------------------------------
+
+PropertyCoordItem::PropertyCoordItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName, Type t )
+ : PropertyItem( l, after, prop, propName ), typ( t )
+{
+ lin = 0;
+
+}
+
+QLineEdit *PropertyCoordItem::lined()
+{
+ if ( lin )
+ return lin;
+ lin = new QLineEdit( listview->viewport() );
+ lin->setReadOnly( true );
+ lin->installEventFilter( listview );
+ lin->hide();
+ return lin;
+}
+
+void PropertyCoordItem::createChildren()
+{
+ PropertyItem *i = this;
+ if ( typ == Rect || typ == Point ) {
+ i = new PropertyIntItem( listview, i, this, i18n("x" ), true );
+ addChild( i );
+ i = new PropertyIntItem( listview, i, this, i18n("y" ), true );
+ addChild( i );
+ }
+ if ( typ == Rect || typ == Size ) {
+ i = new PropertyIntItem( listview, i, this, i18n("width" ), true );
+ addChild( i );
+ i = new PropertyIntItem( listview, i, this, i18n("height" ), true );
+ addChild( i );
+ }
+}
+
+void PropertyCoordItem::initChildren()
+{
+ PropertyItem *item = 0;
+ for ( int i = 0; i < childCount(); ++i ) {
+ item = PropertyItem::child( i );
+ if ( item->name() == i18n("x" ) ) {
+ if ( typ == Rect )
+ item->setValue( val.toRect().x() );
+ else if ( typ == Point )
+ item->setValue( val.toPoint().x() );
+ } else if ( item->name() == i18n("y" ) ) {
+ if ( typ == Rect )
+ item->setValue( val.toRect().y() );
+ else if ( typ == Point )
+ item->setValue( val.toPoint().y() );
+ } else if ( item->name() == i18n("width" ) ) {
+ if ( typ == Rect )
+ item->setValue( val.toRect().width() );
+ else if ( typ == Size )
+ item->setValue( val.toSize().width() );
+ } else if ( item->name() == i18n("height" ) ) {
+ if ( typ == Rect )
+ item->setValue( val.toRect().height() );
+ else if ( typ == Size )
+ item->setValue( val.toSize().height() );
+ }
+ }
+}
+
+PropertyCoordItem::~PropertyCoordItem()
+{
+ delete (QLineEdit*)lin;
+ lin = 0;
+}
+
+void PropertyCoordItem::showEditor()
+{
+ PropertyItem::showEditor();
+ if ( !lin )
+ lined()->setText( text( 1 ) );
+ placeEditor( lined() );
+ if ( !lined()->isVisible() || !lined()->hasFocus() ) {
+ lined()->show();
+ setFocus( lined() );
+ }
+}
+
+void PropertyCoordItem::hideEditor()
+{
+ PropertyItem::hideEditor();
+ lined()->hide();
+}
+
+void PropertyCoordItem::setValue( const QVariant &v )
+{
+ if ( ( !hasSubItems() || !isOpen() )
+ && value() == v )
+ return;
+
+ QString s;
+ if ( typ == Rect )
+ s = "[ " + QString::number( v.toRect().x() ) + ", " + QString::number( v.toRect().y() ) + ", " +
+ QString::number( v.toRect().width() ) + ", " + QString::number( v.toRect().height() ) + " ]";
+ else if ( typ == Point )
+ s = "[ " + QString::number( v.toPoint().x() ) + ", " +
+ QString::number( v.toPoint().y() ) + " ]";
+ else if ( typ == Size )
+ s = "[ " + QString::number( v.toSize().width() ) + ", " +
+ QString::number( v.toSize().height() ) + " ]";
+ setText( 1, s );
+ if ( lin )
+ lined()->setText( s );
+ PropertyItem::setValue( v );
+}
+
+bool PropertyCoordItem::hasSubItems() const
+{
+ return true;
+}
+
+void PropertyCoordItem::childValueChanged( PropertyItem *child )
+{
+ if ( typ == Rect ) {
+ QRect r = value().toRect();
+ if ( child->name() == i18n("x" ) )
+ r.setX( child->value().toInt() );
+ else if ( child->name() == i18n("y" ) )
+ r.setY( child->value().toInt() );
+ else if ( child->name() == i18n("width" ) )
+ r.setWidth( child->value().toInt() );
+ else if ( child->name() == i18n("height" ) )
+ r.setHeight( child->value().toInt() );
+ setValue( r );
+ } else if ( typ == Point ) {
+ QPoint r = value().toPoint();
+ if ( child->name() == i18n("x" ) )
+ r.setX( child->value().toInt() );
+ else if ( child->name() == i18n("y" ) )
+ r.setY( child->value().toInt() );
+ setValue( r );
+ } else if ( typ == Size ) {
+ QSize r = value().toSize();
+ if ( child->name() == i18n("width" ) )
+ r.setWidth( child->value().toInt() );
+ else if ( child->name() == i18n("height" ) )
+ r.setHeight( child->value().toInt() );
+ setValue( r );
+ }
+ notifyValueChange();
+}
+
+// --------------------------------------------------------------
+
+PropertyPixmapItem::PropertyPixmapItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName, bool isIconSet )
+ : PropertyItem( l, after, prop, propName ), iconSet( isIconSet )
+{
+ box = new QHBox( listview->viewport() );
+ box->hide();
+ pixPrev = new QLabel( box );
+ pixPrev->setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Minimum ) );
+ pixPrev->setBackgroundColor( pixPrev->colorGroup().color( QColorGroup::Base ) );
+ button = new QPushButton( "...", box );
+ button->setFixedWidth( 20 );
+ box->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
+ box->setLineWidth( 2 );
+ pixPrev->setFrameStyle( QFrame::NoFrame );
+ box->installEventFilter( listview );
+ connect( button, SIGNAL( clicked() ),
+ this, SLOT( getPixmap() ) );
+}
+PropertyPixmapItem::~PropertyPixmapItem()
+{
+ delete (QHBox*)box;
+}
+
+void PropertyPixmapItem::showEditor()
+{
+ PropertyItem::showEditor();
+ placeEditor( box );
+ if ( !box->isVisible() ) {
+ box->show();
+ listView()->viewport()->setFocus();
+ }
+}
+
+void PropertyPixmapItem::hideEditor()
+{
+ PropertyItem::hideEditor();
+ box->hide();
+}
+
+void PropertyPixmapItem::setValue( const QVariant &v )
+{
+ QString s;
+ if ( !iconSet )
+ pixPrev->setPixmap( v.toPixmap() );
+ else
+ pixPrev->setPixmap( v.toIconSet().pixmap() );
+ PropertyItem::setValue( v );
+ repaint();
+}
+
+void PropertyPixmapItem::getPixmap()
+{
+ QPixmap pix = qChoosePixmap( listview, listview->propertyEditor()->formWindow(), value().toPixmap() );
+ if ( !pix.isNull() ) {
+ if ( !iconSet )
+ setValue( pix );
+ else
+ setValue( QIconSet( pix ) );
+ notifyValueChange();
+ }
+}
+
+bool PropertyPixmapItem::hasCustomContents() const
+{
+ return true;
+}
+
+void PropertyPixmapItem::drawCustomContents( QPainter *p, const QRect &r )
+{
+ QPixmap pix( (!iconSet ? value().toPixmap() : value().toIconSet().pixmap()) );
+ if ( !pix.isNull() ) {
+ p->save();
+ p->setClipRect( QRect( QPoint( (int)(p->worldMatrix().dx() + r.x()),
+ (int)(p->worldMatrix().dy() + r.y()) ),
+ r.size() ) );
+ p->drawPixmap( r.x(), r.y() + ( r.height() - pix.height() ) / 2, pix );
+ p->restore();
+ }
+}
+
+
+// --------------------------------------------------------------
+
+PropertyColorItem::PropertyColorItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName, bool children )
+ : PropertyItem( l, after, prop, propName ), withChildren( children )
+{
+ box = new QHBox( listview->viewport() );
+ box->hide();
+ colorPrev = new QFrame( box );
+ button = new QPushButton( "...", box );
+ button->setFixedWidth( 20 );
+ box->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
+ box->setLineWidth( 2 );
+ colorPrev->setFrameStyle( QFrame::Plain | QFrame::Box );
+ colorPrev->setLineWidth( 2 );
+ QPalette pal = colorPrev->palette();
+ QColorGroup cg = pal.active();
+ cg.setColor( QColorGroup::Foreground, cg.color( QColorGroup::Base ) );
+ pal.setActive( cg );
+ pal.setInactive( cg );
+ pal.setDisabled( cg );
+ colorPrev->setPalette( pal );
+ box->installEventFilter( listview );
+ connect( button, SIGNAL( clicked() ),
+ this, SLOT( getColor() ) );
+}
+
+void PropertyColorItem::createChildren()
+{
+ PropertyItem *i = this;
+ i = new PropertyIntItem( listview, i, this, i18n("Red" ), true );
+ addChild( i );
+ i = new PropertyIntItem( listview, i, this, i18n("Green" ), true );
+ addChild( i );
+ i = new PropertyIntItem( listview, i, this, i18n("Blue" ), true );
+ addChild( i );
+}
+
+void PropertyColorItem::initChildren()
+{
+ PropertyItem *item = 0;
+ for ( int i = 0; i < childCount(); ++i ) {
+ item = PropertyItem::child( i );
+ if ( item->name() == i18n("Red" ) )
+ item->setValue( val.toColor().red() );
+ else if ( item->name() == i18n("Green" ) )
+ item->setValue( val.toColor().green() );
+ else if ( item->name() == i18n("Blue" ) )
+ item->setValue( val.toColor().blue() );
+ }
+}
+
+PropertyColorItem::~PropertyColorItem()
+{
+ delete (QHBox*)box;
+}
+
+void PropertyColorItem::showEditor()
+{
+ PropertyItem::showEditor();
+ placeEditor( box );
+ if ( !box->isVisible() ) {
+ box->show();
+ listView()->viewport()->setFocus();
+ }
+}
+
+void PropertyColorItem::hideEditor()
+{
+ PropertyItem::hideEditor();
+ box->hide();
+}
+
+void PropertyColorItem::setValue( const QVariant &v )
+{
+ if ( ( !hasSubItems() || !isOpen() )
+ && value() == v )
+ return;
+
+ QString s;
+ setText( 1, v.toColor().name() );
+ colorPrev->setBackgroundColor( v.toColor() );
+ PropertyItem::setValue( v );
+}
+
+bool PropertyColorItem::hasSubItems() const
+{
+ return withChildren;
+}
+
+void PropertyColorItem::childValueChanged( PropertyItem *child )
+{
+ QColor c( val.toColor() );
+ if ( child->name() == i18n("Red" ) )
+ c.setRgb( child->value().toInt(), c.green(), c.blue() );
+ else if ( child->name() == i18n("Green" ) )
+ c.setRgb( c.red(), child->value().toInt(), c.blue() );
+ else if ( child->name() == i18n("Blue" ) )
+ c.setRgb( c.red(), c.green(), child->value().toInt() );
+ setValue( c );
+ notifyValueChange();
+}
+
+void PropertyColorItem::getColor()
+{
+ QColor c = val.asColor();
+ if ( KColorDialog::getColor( c, listview ) == QDialog::Accepted ) {
+ setValue( c );
+ notifyValueChange();
+ }
+}
+
+bool PropertyColorItem::hasCustomContents() const
+{
+ return true;
+}
+
+void PropertyColorItem::drawCustomContents( QPainter *p, const QRect &r )
+{
+ p->save();
+ p->setPen( QPen( black, 1 ) );
+ p->setBrush( val.toColor() );
+ p->drawRect( r.x() + 2, r.y() + 2, r.width() - 5, r.height() - 5 );
+ p->restore();
+}
+
+// --------------------------------------------------------------
+
+PropertyFontItem::PropertyFontItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName )
+ : PropertyItem( l, after, prop, propName )
+{
+ box = new QHBox( listview->viewport() );
+ box->hide();
+ lined = new QLineEdit( box );
+ button = new QPushButton( "...", box );
+ button->setFixedWidth( 20 );
+ box->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
+ box->setLineWidth( 2 );
+ lined->setFrame( false );
+ lined->setReadOnly( true );
+ box->setFocusProxy( lined );
+ box->installEventFilter( listview );
+ lined->installEventFilter( listview );
+ button->installEventFilter( listview );
+ connect( button, SIGNAL( clicked() ),
+ this, SLOT( getFont() ) );
+}
+
+void PropertyFontItem::createChildren()
+{
+ PropertyItem *i = this;
+ i = new PropertyListItem( listview, i, this, i18n("Family" ), false );
+ addChild( i );
+ i = new PropertyIntItem( listview, i, this, i18n("Point Size" ), true );
+ addChild( i );
+ i = new PropertyBoolItem( listview, i, this, i18n("Bold" ) );
+ addChild( i );
+ i = new PropertyBoolItem( listview, i, this, i18n("Italic" ) );
+ addChild( i );
+ i = new PropertyBoolItem( listview, i, this, i18n("Underline" ) );
+ addChild( i );
+ i = new PropertyBoolItem( listview, i, this, i18n("Strikeout" ) );
+ addChild( i );
+}
+
+void PropertyFontItem::initChildren()
+{
+ PropertyItem *item = 0;
+ for ( int i = 0; i < childCount(); ++i ) {
+ item = PropertyItem::child( i );
+ if ( item->name() == i18n("Family" ) ) {
+ ( (PropertyListItem*)item )->setValue( getFontList() );
+ ( (PropertyListItem*)item )->setCurrentItem( val.toFont().family() );
+ } else if ( item->name() == i18n("Point Size" ) )
+ item->setValue( val.toFont().pointSize() );
+ else if ( item->name() == i18n("Bold" ) )
+ item->setValue( QVariant( val.toFont().bold(), 0 ) );
+ else if ( item->name() == i18n("Italic" ) )
+ item->setValue( QVariant( val.toFont().italic(), 0 ) );
+ else if ( item->name() == i18n("Underline" ) )
+ item->setValue( QVariant( val.toFont().underline(), 0 ) );
+ else if ( item->name() == i18n("Strikeout" ) )
+ item->setValue( QVariant( val.toFont().strikeOut(), 0 ) );
+ }
+}
+
+PropertyFontItem::~PropertyFontItem()
+{
+ delete (QHBox*)box;
+}
+
+void PropertyFontItem::showEditor()
+{
+ PropertyItem::showEditor();
+ placeEditor( box );
+ if ( !box->isVisible() || !lined->hasFocus() ) {
+ box->show();
+ setFocus( lined );
+ }
+}
+
+void PropertyFontItem::hideEditor()
+{
+ PropertyItem::hideEditor();
+ box->hide();
+}
+
+void PropertyFontItem::setValue( const QVariant &v )
+{
+ if ( value() == v )
+ return;
+
+ setText( 1, v.toFont().family() + "-" + QString::number( v.toFont().pointSize() ) );
+ lined->setText( v.toFont().family() + "-" + QString::number( v.toFont().pointSize() ) );
+ PropertyItem::setValue( v );
+}
+
+void PropertyFontItem::getFont()
+{
+ bool ok = false;
+ QFont f = QFontDialog::getFont( &ok, val.toFont(), listview );
+ if ( ok && f != val.toFont() ) {
+ setValue( f );
+ notifyValueChange();
+ }
+}
+
+bool PropertyFontItem::hasSubItems() const
+{
+ return true;
+}
+
+void PropertyFontItem::childValueChanged( PropertyItem *child )
+{
+ QFont f = val.toFont();
+ if ( child->name() == i18n("Family" ) )
+ f.setFamily( ( (PropertyListItem*)child )->currentItem() );
+ else if ( child->name() == i18n("Point Size" ) )
+ f.setPointSize( child->value().toInt() );
+ else if ( child->name() == i18n("Bold" ) )
+ f.setBold( child->value().toBool() );
+ else if ( child->name() == i18n("Italic" ) )
+ f.setItalic( child->value().toBool() );
+ else if ( child->name() == i18n("Underline" ) )
+ f.setUnderline( child->value().toBool() );
+ else if ( child->name() == i18n("Strikeout" ) )
+ f.setStrikeOut( child->value().toBool() );
+ setValue( f );
+ notifyValueChange();
+}
+
+// --------------------------------------------------------------
+
+PropertyDatabaseItem::PropertyDatabaseItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName, bool wField )
+ : PropertyItem( l, after, prop, propName ), withField( wField )
+{
+ box = new QHBox( listview->viewport() );
+ box->hide();
+ lined = new QLineEdit( box );
+ button = new QPushButton( "...", box );
+ button->setFixedWidth( 20 );
+ box->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
+ box->setLineWidth( 2 );
+ lined->setFrame( false );
+ lined->setReadOnly( true );
+ box->setFocusProxy( lined );
+ box->installEventFilter( listview );
+ lined->installEventFilter( listview );
+ button->installEventFilter( listview );
+}
+
+void PropertyDatabaseItem::createChildren()
+{
+ PropertyItem *i = this;
+ i = new PropertyListItem( listview, i, this, i18n("Connection" ), true );
+ addChild( i );
+ i = new PropertyListItem( listview, i, this, i18n("Table" ), true );
+ addChild( i );
+ if ( withField ) {
+ i = new PropertyListItem( listview, i, this, i18n("Field" ), true );
+ addChild( i );
+ }
+}
+
+void PropertyDatabaseItem::initChildren()
+{
+#ifndef QT_NO_SQL
+ PropertyItem *item = 0;
+ QStringList lst = value().toStringList();
+ QString conn, table;
+ for ( int i = 0; i < childCount(); ++i ) {
+ item = PropertyItem::child( i );
+ if ( item->name() == i18n("Connection" ) ) {
+ QStringList cl = listview->propertyEditor()->formWindow()->project()->databaseConnectionList();
+ if ( !cl.isEmpty() )
+ item->setValue( cl );
+ else if ( lst.count() > 0 )
+ item->setValue( QStringList( lst[ 0 ] ) );
+ else if ( withField )
+ item->setValue( QStringList( MetaDataBase::fakeProperty( listview->propertyEditor()->formWindow()->mainContainer(),
+ "database" ).toStringList()[ 0 ] ) );
+
+ if ( lst.count() > 0 && !lst[ 0 ].isEmpty() )
+ item->setCurrentItem( lst[ 0 ] );
+ else if ( !isChanged() && withField )
+ item->setCurrentItem( MetaDataBase::fakeProperty( listview->propertyEditor()->formWindow()->mainContainer(),
+ "database" ).toStringList()[ 0 ] );
+ else
+ item->setCurrentItem( 0 );
+ conn = item->currentItem();
+ } else if ( item->name() == i18n("Table" ) ) {
+ QStringList cl = listview->propertyEditor()->formWindow()->project()->databaseTableList( conn );
+ if ( !cl.isEmpty() )
+ item->setValue( cl );
+ else if ( lst.count() > 1 )
+ item->setValue( QStringList( lst[ 1 ] ) );
+ else if ( withField ) {
+ QStringList fakeLst = MetaDataBase::fakeProperty( listview->propertyEditor()->formWindow()->mainContainer(), "database" ).toStringList();
+ if ( fakeLst.count() > 1 )
+ item->setValue( fakeLst[ 1 ] );
+ }
+
+ if ( lst.count() > 1 && !lst[ 1 ].isEmpty() )
+ item->setCurrentItem( lst[ 1 ] );
+ else if ( !isChanged() && withField ) {
+ QStringList fakeLst = MetaDataBase::fakeProperty( listview->propertyEditor()->formWindow()->mainContainer(), "database" ).toStringList();
+ if ( fakeLst.count() > 1 )
+ item->setCurrentItem( fakeLst[ 1 ] );
+ else
+ item->setCurrentItem( 0 );
+ } else
+ item->setCurrentItem( 0 );
+ table = item->currentItem();
+ } else if ( item->name() == i18n("Field" ) ) {
+ QStringList cl = listview->propertyEditor()->formWindow()->project()->databaseFieldList( conn, table );
+ if ( !cl.isEmpty() )
+ item->setValue( cl );
+ else if ( lst.count() > 2 )
+ item->setValue( QStringList( lst[ 2 ] ) );
+ if ( lst.count() > 2 && !lst[ 2 ].isEmpty() )
+ item->setCurrentItem( lst[ 2 ] );
+ else
+ item->setCurrentItem( 0 );
+ }
+ }
+#endif
+}
+
+PropertyDatabaseItem::~PropertyDatabaseItem()
+{
+ delete (QHBox*)box;
+}
+
+void PropertyDatabaseItem::showEditor()
+{
+ PropertyItem::showEditor();
+ placeEditor( box );
+ if ( !box->isVisible() || !lined->hasFocus() ) {
+ box->show();
+ setFocus( lined );
+ }
+}
+
+void PropertyDatabaseItem::hideEditor()
+{
+ PropertyItem::hideEditor();
+ box->hide();
+}
+
+void PropertyDatabaseItem::setValue( const QVariant &v )
+{
+ if ( value() == v )
+ return;
+
+ QStringList lst = v.toStringList();
+ QString s = lst.join( "." );
+ setText( 1, s );
+ lined->setText( s );
+ PropertyItem::setValue( v );
+}
+
+bool PropertyDatabaseItem::hasSubItems() const
+{
+ return true;
+}
+
+void PropertyDatabaseItem::childValueChanged( PropertyItem *c )
+{
+#ifndef QT_NO_SQL
+ QStringList lst;
+ lst << ( (PropertyListItem*)PropertyItem::child( 0 ) )->currentItem()
+ << ( (PropertyListItem*)PropertyItem::child( 1 ) )->currentItem();
+ if ( withField )
+ lst << ( (PropertyListItem*)PropertyItem::child( 2 ) )->currentItem();
+ if ( c == PropertyItem::child( 0 ) ) { // if the connection changed
+ lst[ 0 ] = ( (PropertyListItem*)c )->currentItem();
+ PropertyItem::child( 1 )->setValue( listview->propertyEditor()->formWindow()->project()->databaseTableList( lst[ 0 ] ) );
+ if ( withField )
+ PropertyItem::child( 2 )->setValue( listview->propertyEditor()->formWindow()->project()->databaseFieldList( lst[ 0 ], lst[ 1 ] ) );
+ } else if ( withField && c == PropertyItem::child( 1 ) ) { // if the table changed
+ lst[ 1 ] = ( (PropertyListItem*)c )->currentItem();
+ if ( withField )
+ PropertyItem::child( 2 )->setValue( listview->propertyEditor()->formWindow()->project()->databaseFieldList( lst[ 0 ], lst[ 1 ] ) );
+ }
+ lst.clear();
+ lst << ( (PropertyListItem*)PropertyItem::child( 0 ) )->currentItem()
+ << ( (PropertyListItem*)PropertyItem::child( 1 ) )->currentItem();
+ if ( withField )
+ lst << ( (PropertyListItem*)PropertyItem::child( 2 ) )->currentItem();
+ setValue( lst );
+ notifyValueChange();
+#else
+ Q_UNUSED( c );
+#endif
+}
+
+// --------------------------------------------------------------
+
+PropertySizePolicyItem::PropertySizePolicyItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName )
+ : PropertyItem( l, after, prop, propName )
+{
+ lin = 0;
+}
+
+QLineEdit *PropertySizePolicyItem::lined()
+{
+ if ( lin )
+ return lin;
+ lin = new QLineEdit( listview->viewport() );
+ lin->hide();
+ lin->setReadOnly( true );
+ return lin;
+}
+
+void PropertySizePolicyItem::createChildren()
+{
+ QStringList lst;
+ lst << "Fixed" << "Minimum" << "Maximum" << "Preferred" << "MinimumExpanding" << "Expanding" << "Ignored";
+
+ PropertyItem *i = this;
+ i = new PropertyListItem( listview, i, this, i18n("hSizeType" ), false );
+ i->setValue( lst );
+ addChild( i );
+ i = new PropertyListItem( listview, i, this, i18n("vSizeType" ), false );
+ i->setValue( lst );
+ addChild( i );
+ i = new PropertyIntItem( listview, i, this, i18n("horizontalStretch" ), true );
+ addChild( i );
+ i = new PropertyIntItem( listview, i, this, i18n("verticalStretch" ), true );
+ addChild( i );
+}
+
+void PropertySizePolicyItem::initChildren()
+{
+ PropertyItem *item = 0;
+ QSizePolicy sp = val.toSizePolicy();
+ for ( int i = 0; i < childCount(); ++i ) {
+ item = PropertyItem::child( i );
+ if ( item->name() == i18n("hSizeType" ) )
+ ( (PropertyListItem*)item )->setCurrentItem( size_type_to_int( sp.horData() ) );
+ else if ( item->name() == i18n("vSizeType" ) )
+ ( (PropertyListItem*)item )->setCurrentItem( size_type_to_int( sp.verData() ) );
+ else if ( item->name() == i18n("horizontalStretch" ) )
+ ( (PropertyIntItem*)item )->setValue( sp.horStretch() );
+ else if ( item->name() == i18n("verticalStretch" ) )
+ ( (PropertyIntItem*)item )->setValue( sp.verStretch() );
+ }
+}
+
+PropertySizePolicyItem::~PropertySizePolicyItem()
+{
+ delete (QLineEdit*)lin;
+}
+
+void PropertySizePolicyItem::showEditor()
+{
+ PropertyItem::showEditor();
+ placeEditor( lined() );
+ if ( !lined()->isVisible() || !lined()->hasFocus() ) {
+ lined()->show();
+ listView()->viewport()->setFocus();
+ }
+}
+
+void PropertySizePolicyItem::hideEditor()
+{
+ PropertyItem::hideEditor();
+ lined()->hide();
+}
+
+void PropertySizePolicyItem::setValue( const QVariant &v )
+{
+ if ( value() == v )
+ return;
+
+ QString s = QString( "%1/%2/%2/%2" );
+ s = s.arg( size_type_to_string( v.toSizePolicy().horData() ) ).
+ arg( size_type_to_string( v.toSizePolicy().verData() ) ).
+ arg( v.toSizePolicy().horStretch() ).
+ arg( v.toSizePolicy().verStretch() );
+ setText( 1, s );
+ lined()->setText( s );
+ PropertyItem::setValue( v );
+}
+
+void PropertySizePolicyItem::childValueChanged( PropertyItem *child )
+{
+ QSizePolicy sp = val.toSizePolicy();
+ if ( child->name() == i18n("hSizeType" ) )
+ sp.setHorData( int_to_size_type( ( ( PropertyListItem*)child )->currentIntItem() ) );
+ else if ( child->name() == i18n("vSizeType" ) )
+ sp.setVerData( int_to_size_type( ( ( PropertyListItem*)child )->currentIntItem() ) );
+ else if ( child->name() == i18n("horizontalStretch" ) )
+ sp.setHorStretch( ( ( PropertyIntItem*)child )->value().toInt() );
+ else if ( child->name() == i18n("verticalStretch" ) )
+ sp.setVerStretch( ( ( PropertyIntItem*)child )->value().toInt() );
+ setValue( sp );
+ notifyValueChange();
+}
+
+bool PropertySizePolicyItem::hasSubItems() const
+{
+ return true;
+}
+
+// --------------------------------------------------------------
+
+PropertyPaletteItem::PropertyPaletteItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName )
+ : PropertyItem( l, after, prop, propName )
+{
+ box = new QHBox( listview->viewport() );
+ box->hide();
+ palettePrev = new QLabel( box );
+ button = new QPushButton( "...", box );
+ button->setFixedWidth( 20 );
+ box->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
+ box->setLineWidth( 2 );
+ palettePrev->setFrameStyle( QFrame::NoFrame );
+ box->installEventFilter( listview );
+ connect( button, SIGNAL( clicked() ),
+ this, SLOT( getPalette() ) );
+}
+PropertyPaletteItem::~PropertyPaletteItem()
+{
+ delete (QHBox*)box;
+}
+
+void PropertyPaletteItem::showEditor()
+{
+ PropertyItem::showEditor();
+ placeEditor( box );
+ if ( !box->isVisible() ) {
+ box->show();
+ listView()->viewport()->setFocus();
+ }
+}
+
+void PropertyPaletteItem::hideEditor()
+{
+ PropertyItem::hideEditor();
+ box->hide();
+}
+
+void PropertyPaletteItem::setValue( const QVariant &v )
+{
+ QString s;
+ palettePrev->setPalette( v.toPalette() );
+ PropertyItem::setValue( v );
+ repaint();
+}
+
+void PropertyPaletteItem::getPalette()
+{
+ if ( !listview->propertyEditor()->widget()->isWidgetType() )
+ return;
+ bool ok = false;
+ QWidget *w = (QWidget*)listview->propertyEditor()->widget();
+ if ( w->inherits( "QScrollView" ) )
+ w = ( (QScrollView*)w )->viewport();
+ QPalette pal = PaletteEditor::getPalette( &ok, val.toPalette(),
+#if defined(QT_NON_COMMERCIAL)
+ w->backgroundMode(), listview->topLevelWidget(),
+#else
+ w->backgroundMode(), listview,
+#endif
+ "choose_palette", listview->propertyEditor()->formWindow() );
+ if ( !ok )
+ return;
+ setValue( pal );
+ notifyValueChange();
+}
+
+bool PropertyPaletteItem::hasCustomContents() const
+{
+ return true;
+}
+
+void PropertyPaletteItem::drawCustomContents( QPainter *p, const QRect &r )
+{
+ QPalette pal( value().toPalette() );
+ p->save();
+ p->setClipRect( QRect( QPoint( (int)(p->worldMatrix().dx() + r.x()),
+ (int)(p->worldMatrix().dy() + r.y()) ),
+ r.size() ) );
+ QRect r2( r );
+ r2.setX( r2.x() + 2 );
+ r2.setY( r2.y() + 2 );
+ r2.setWidth( r2.width() - 3 );
+ r2.setHeight( r2.height() - 3 );
+ p->setPen( QPen( black, 1 ) );
+ p->setBrush( pal.active().background() );
+ p->drawRect( r2 );
+ p->restore();
+}
+
+// --------------------------------------------------------------
+
+PropertyCursorItem::PropertyCursorItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName )
+ : PropertyItem( l, after, prop, propName )
+{
+ comb = 0;
+}
+
+QComboBox *PropertyCursorItem::combo()
+{
+ if ( comb )
+ return comb;
+ comb = new QComboBox( false, listview->viewport() );
+ comb->hide();
+ QBitmap cur;
+
+ cur = QBitmap(arrow_width, arrow_height, arrow_bits, true);
+ cur.setMask( cur );
+ comb->insertItem( cur, i18n("Arrow"), QObject::ArrowCursor);
+
+ cur = QBitmap(uparrow_width, uparrow_height, uparrow_bits, true);
+ cur.setMask( cur );
+ comb->insertItem( cur, i18n("Up-Arrow"), QObject::UpArrowCursor );
+
+ cur = QBitmap(cross_width, cross_height, cross_bits, true);
+ cur.setMask( cur );
+ comb->insertItem( cur, i18n("Cross"), QObject::CrossCursor );
+
+ cur = QBitmap(wait_width, wait_height, wait_bits, true);
+ cur.setMask( cur );
+ comb->insertItem( cur, i18n("Waiting"), QObject::WaitCursor );
+
+ cur = QBitmap(ibeam_width, ibeam_height, ibeam_bits, true);
+ cur.setMask( cur );
+ comb->insertItem( cur, i18n("iBeam"), QObject::IbeamCursor );
+
+ cur = QBitmap(sizev_width, sizev_height, sizev_bits, true);
+ cur.setMask( cur );
+ comb->insertItem( cur, i18n("Size Vertical"), QObject::SizeVerCursor );
+
+ cur = QBitmap(sizeh_width, sizeh_height, sizeh_bits, true);
+ cur.setMask( cur );
+ comb->insertItem( cur, i18n("Size Horizontal"), QObject::SizeHorCursor );
+
+ cur = QBitmap(sizef_width, sizef_height, sizef_bits, true);
+ cur.setMask( cur );
+ comb->insertItem( cur, i18n("Size Slash"), QObject::SizeBDiagCursor );
+
+ cur = QBitmap(sizeb_width, sizeb_height, sizeb_bits, true);
+ cur.setMask( cur );
+ comb->insertItem( cur, i18n("Size Backslash"), QObject::SizeFDiagCursor );
+
+ cur = QBitmap(sizeall_width, sizeall_height, sizeall_bits, true);
+ cur.setMask( cur );
+ comb->insertItem( cur, i18n("Size All"), QObject::SizeAllCursor );
+
+ cur = QBitmap( 25, 25, 1 );
+ cur.setMask( cur );
+ comb->insertItem( cur, i18n("Blank"), QObject::BlankCursor );
+
+ cur = QBitmap(vsplit_width, vsplit_height, vsplit_bits, true);
+ cur.setMask( cur );
+ comb->insertItem( cur, i18n("Split Vertical"), QObject::SplitVCursor );
+
+ cur = QBitmap(hsplit_width, hsplit_height, hsplit_bits, true);
+ cur.setMask( cur );
+ comb->insertItem( cur, i18n("Split Horizontal"), QObject::SplitHCursor );
+
+ cur = QBitmap(hand_width, hand_height, hand_bits, true);
+ cur.setMask( cur );
+ comb->insertItem( cur, i18n("Pointing Hand"), QObject::PointingHandCursor );
+
+ cur = QBitmap(no_width, no_height, no_bits, true);
+ cur.setMask( cur );
+ comb->insertItem( cur, i18n("Forbidden"), QObject::ForbiddenCursor );
+
+ connect( comb, SIGNAL( activated( int ) ),
+ this, SLOT( setValue() ) );
+ comb->installEventFilter( listview );
+ return comb;
+}
+
+PropertyCursorItem::~PropertyCursorItem()
+{
+ delete (QComboBox*)comb;
+}
+
+void PropertyCursorItem::showEditor()
+{
+ PropertyItem::showEditor();
+ if ( !comb ) {
+ combo()->blockSignals( true );
+ combo()->setCurrentItem( (int)value().toCursor().shape() );
+ combo()->blockSignals( false );
+ }
+ placeEditor( combo() );
+ if ( !combo()->isVisible() || !combo()->hasFocus() ) {
+ combo()->show();
+ setFocus( combo() );
+ }
+}
+
+void PropertyCursorItem::hideEditor()
+{
+ PropertyItem::hideEditor();
+ combo()->hide();
+}
+
+void PropertyCursorItem::setValue( const QVariant &v )
+{
+ if ( ( !hasSubItems() || !isOpen() )
+ && value() == v )
+ return;
+
+ combo()->blockSignals( true );
+ combo()->setCurrentItem( (int)v.toCursor().shape() );
+ combo()->blockSignals( false );
+ setText( 1, combo()->currentText() );
+ PropertyItem::setValue( v );
+}
+
+void PropertyCursorItem::setValue()
+{
+ if ( !comb )
+ return;
+ if ( QVariant( QCursor( combo()->currentItem() ) ) == val )
+ return;
+ setText( 1, combo()->currentText() );
+ PropertyItem::setValue( QCursor( combo()->currentItem() ) );
+ notifyValueChange();
+}
+
+// --------------------------------------------------------------
+
+/*!
+ \class PropertyList propertyeditor.h
+ \brief PropertyList is a QListView derived class which is used for editing widget properties
+
+ This class is used for widget properties. It has to be child of a
+ PropertyEditor.
+
+ To initialize it for editing a widget call setupProperties() which
+ iterates through the properties of the current widget (see
+ PropertyEditor::widget()) and builds the list.
+
+ To update the item values, refetchData() can be called.
+
+ If the value of an item has been changed by the user, and this
+ change should be applied to the widget's property, valueChanged()
+ has to be called.
+
+ To set the value of an item, setPropertyValue() has to be called.
+*/
+
+PropertyList::PropertyList( PropertyEditor *e )
+ : QListView( e ), editor( e )
+{
+ init_colors();
+
+ whatsThis = new PropertyWhatsThis( this );
+ showSorted = false;
+ header()->setMovingEnabled( false );
+ header()->setStretchEnabled( true );
+ setResizePolicy( QScrollView::Manual );
+ viewport()->setAcceptDrops( true );
+ viewport()->installEventFilter( this );
+ addColumn( i18n("Property" ) );
+ addColumn( i18n("Value" ) );
+ connect( header(), SIGNAL( sizeChange( int, int, int ) ),
+ this, SLOT( updateEditorSize() ) );
+ disconnect( header(), SIGNAL( sectionClicked( int ) ),
+ this, SLOT( changeSortColumn( int ) ) );
+ connect( header(), SIGNAL( sectionClicked( int ) ),
+ this, SLOT( toggleSort() ) );
+ connect( this, SIGNAL( pressed( QListViewItem *, const QPoint &, int ) ),
+ this, SLOT( itemPressed( QListViewItem *, const QPoint &, int ) ) );
+ connect( this, SIGNAL( doubleClicked( QListViewItem * ) ),
+ this, SLOT( toggleOpen( QListViewItem * ) ) );
+ setSorting( -1 );
+ setHScrollBarMode( AlwaysOff );
+ setVScrollBarMode( AlwaysOn );
+ setColumnWidthMode( 1, Manual );
+ mousePressed = false;
+ pressItem = 0;
+ header()->installEventFilter( this );
+}
+
+void PropertyList::toggleSort()
+{
+ showSorted = !showSorted;
+ editor->clear();
+ editor->setup();
+}
+
+void PropertyList::resizeEvent( QResizeEvent *e )
+{
+ QListView::resizeEvent( e );
+ if ( currentItem() )
+ ( ( PropertyItem* )currentItem() )->showEditor();
+}
+
+static QVariant::Type type_to_variant( const QString &s )
+{
+ if ( s == "Invalid " )
+ return QVariant::Invalid;
+ if ( s == "Map" )
+ return QVariant::Map;
+ if ( s == "List" )
+ return QVariant::List;
+ if ( s == "String" )
+ return QVariant::String;
+ if ( s == "StringList" )
+ return QVariant::StringList;
+ if ( s == "Font" )
+ return QVariant::Font;
+ if ( s == "Pixmap" )
+ return QVariant::Pixmap;
+ if ( s == "Brush" )
+ return QVariant::Brush;
+ if ( s == "Rect" )
+ return QVariant::Rect;
+ if ( s == "Size" )
+ return QVariant::Size;
+ if ( s == "Color" )
+ return QVariant::Color;
+ if ( s == "Palette" )
+ return QVariant::Palette;
+ if ( s == "ColorGroup" )
+ return QVariant::ColorGroup;
+ if ( s == "IconSet" )
+ return QVariant::IconSet;
+ if ( s == "Point" )
+ return QVariant::Point;
+ if ( s == "Image" )
+ return QVariant::Image;
+ if ( s == "Int" )
+ return QVariant::Int;
+ if ( s == "UInt" )
+ return QVariant::UInt;
+ if ( s == "Bool" )
+ return QVariant::Bool;
+ if ( s == "Double" )
+ return QVariant::Double;
+ if ( s == "CString" )
+ return QVariant::CString;
+ if ( s == "PointArray" )
+ return QVariant::PointArray;
+ if ( s == "Region" )
+ return QVariant::Region;
+ if ( s == "Bitmap" )
+ return QVariant::Bitmap;
+ if ( s == "Cursor" )
+ return QVariant::Cursor;
+ if ( s == "SizePolicy" )
+ return QVariant::SizePolicy;
+ if ( s == "Date" )
+ return QVariant::Date;
+ if ( s == "Time" )
+ return QVariant::Time;
+ if ( s == "DateTime" )
+ return QVariant::DateTime;
+ return QVariant::Invalid;
+}
+
+#ifndef QT_NO_SQL
+static bool parent_is_data_aware( QObject *o )
+{
+ if ( !o->inherits( "QWidget" ) )
+ return false;
+ QWidget *w = (QWidget*)o;
+ QWidget *p = w->parentWidget();
+ while ( p && !p->isTopLevel() ) {
+ if ( p->inherits( "QDesignerDataBrowser" ) || p->inherits( "QDesignerDataView" ) )
+ return true;
+ p = p->parentWidget();
+ }
+ return false;
+}
+#endif
+
+/*! Sets up the property list by adding an item for each designable
+property of the widget which is just edited.
+*/
+
+void PropertyList::setupProperties()
+{
+ if ( !editor->widget() )
+ return;
+ bool allProperties = !editor->widget()->inherits( "Spacer" );
+ QStrList lst = editor->widget()->metaObject()->propertyNames( allProperties );
+ PropertyItem *item = 0;
+ QMap<QString, bool> unique;
+ QObject *w = editor->widget();
+ QStringList valueSet;
+ bool parentHasLayout =
+ w->isWidgetType() &&
+ !editor->formWindow()->isMainContainer( (QWidget*)w ) && ( (QWidget*)w )->parentWidget() &&
+ WidgetFactory::layoutType( ( (QWidget*)w )->parentWidget() ) != WidgetFactory::NoLayout;
+ for ( QPtrListIterator<char> it( lst ); it.current(); ++it ) {
+ const QMetaProperty* p =
+ editor->widget()->metaObject()->
+ property( editor->widget()->metaObject()->findProperty( it.current(), allProperties), allProperties );
+ if ( !p )
+ continue;
+ if ( unique.contains( QString::fromLatin1( it.current() ) ) )
+ continue;
+ if ( editor->widget()->inherits( "QDesignerToolBar" ) || editor->widget()->inherits( "QDesignerMenuBar" ) ) {
+ if ( qstrcmp( p->name(), "minimumHeight" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "minimumWidth" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "maximumHeight" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "maximumWidth" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "geometry" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "sizePolicy" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "minimumSize" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "maximumSize" ) == 0 )
+ continue;
+ }
+ unique.insert( QString::fromLatin1( it.current() ), true );
+ if ( editor->widget()->isWidgetType() &&
+ editor->formWindow()->isMainContainer( (QWidget*)editor->widget() ) ) {
+ if ( qstrcmp( p->name(), "geometry" ) == 0 )
+ continue;
+ } else { // hide some toplevel-only stuff
+ if ( qstrcmp( p->name(), "icon" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "iconText" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "caption" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "sizeIncrement" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "baseSize" ) == 0 )
+ continue;
+ if ( parentHasLayout && qstrcmp( p->name(), "geometry" ) == 0 )
+ continue;
+ if ( w->inherits( "QLayoutWidget" ) || w->inherits( "Spacer" ) ) {
+ if ( qstrcmp( p->name(), "sizePolicy" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "minimumHeight" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "minimumWidth" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "maximumHeight" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "maximumWidth" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "geometry" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "minimumSize" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "maximumSize" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "enabled" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "paletteForegroundColor" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "paletteBackgroundColor" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "paletteBackgroundPixmap" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "palette" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "font" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "cursor" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "mouseTracking" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "focusPolicy" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "acceptDrops" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "autoMask" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "backgroundOrigin" ) == 0 )
+ continue;
+ }
+ }
+ if ( w->inherits( "QActionGroup" ) ) {
+ if ( qstrcmp( p->name(), "usesDropDown" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "toggleAction" ) == 0 )
+ continue;
+ }
+ if ( qstrcmp( p->name(), "minimumHeight" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "minimumWidth" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "maximumHeight" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "maximumWidth" ) == 0 )
+ continue;
+ if ( qstrcmp( p->name(), "buttonGroupId" ) == 0 ) { // #### remove this when designable in Q_PROPERTY can take a function (isInButtonGroup() in this case)
+ if ( !editor->widget()->isWidgetType() ||
+ !editor->widget()->parent() ||
+ !editor->widget()->parent()->inherits( "QButtonGroup" ) )
+ continue;
+ }
+
+
+ if ( p->designable(w) ) {
+ if ( p->isSetType() ) {
+ if ( QString( p->name() ) == "alignment" ) {
+ QStringList lst;
+ lst << p->valueToKey( AlignAuto )
+ << p->valueToKey( AlignLeft )
+ << p->valueToKey( AlignHCenter )
+ << p->valueToKey( AlignRight )
+ << p->valueToKey( AlignJustify );
+ item = new PropertyListItem( this, item, 0, "hAlign", false );
+ item->setValue( lst );
+ setPropertyValue( item );
+ if ( MetaDataBase::isPropertyChanged( editor->widget(), "hAlign" ) )
+ item->setChanged( true, false );
+ if ( !editor->widget()->inherits( "QMultiLineEdit" ) ) {
+ lst.clear();
+ lst << p->valueToKey( AlignTop )
+ << p->valueToKey( AlignVCenter )
+ << p->valueToKey( AlignBottom );
+ item = new PropertyListItem( this, item, 0, "vAlign", false );
+ item->setValue( lst );
+ setPropertyValue( item );
+ if ( MetaDataBase::isPropertyChanged( editor->widget(), "vAlign" ) )
+ item->setChanged( true, false );
+ item = new PropertyBoolItem( this, item, 0, "wordwrap" );
+ if ( w->inherits( "QGroupBox" ) )
+ item->setVisible( false );
+ setPropertyValue( item );
+ if ( MetaDataBase::isPropertyChanged( editor->widget(), "wordwrap" ) )
+ item->setChanged( true, false );
+ }
+ } else {
+ qWarning( "Sets except 'alignment' not supported yet.... %s.", p->name() );
+ }
+ } else if ( p->isEnumType() ) {
+ QStrList l = p->enumKeys();
+ QStringList lst;
+ for ( uint i = 0; i < l.count(); ++i ) {
+ QString k = l.at( i );
+ // filter out enum-masks
+ if ( k[0] == 'M' && k[1].category() == QChar::Letter_Uppercase )
+ continue;
+ lst << l.at( i );
+ }
+ item = new PropertyListItem( this, item, 0, p->name(), false );
+ item->setValue( lst );
+ } else {
+ QVariant::Type t = QVariant::nameToType( p->type() );
+ if ( !addPropertyItem( item, p->name(), t ) )
+ continue;
+ }
+ }
+ if ( item && !p->isSetType() ) {
+ if ( valueSet.findIndex( item->name() ) == -1 ) {
+ setPropertyValue( item );
+ valueSet << item->name();
+ }
+ if ( MetaDataBase::isPropertyChanged( editor->widget(), p->name() ) )
+ item->setChanged( true, false );
+ }
+ }
+
+ if ( !w->inherits( "QSplitter" ) && !w->inherits( "QDesignerMenuBar" ) && !w->inherits( "QDesignerToolBar" ) &&
+ w->isWidgetType() && WidgetFactory::layoutType( (QWidget*)w ) != WidgetFactory::NoLayout ) {
+ item = new PropertyIntItem( this, item, 0, "layoutSpacing", true );
+ setPropertyValue( item );
+ item->setChanged( true );
+ item = new PropertyIntItem( this, item, 0, "layoutMargin", true );
+ setPropertyValue( item );
+ item->setChanged( true );
+ }
+
+
+ if ( !w->inherits( "Spacer" ) && !w->inherits( "QLayoutWidget" ) && !w->inherits( "QAction" ) &&
+ !w->inherits( "QDesignerMenuBar" ) && !w->inherits( "QDesignerToolBar" ) ) {
+ item = new PropertyTextItem( this, item, 0, "toolTip", true, false );
+ setPropertyValue( item );
+ if ( MetaDataBase::isPropertyChanged( editor->widget(), "toolTip" ) )
+ item->setChanged( true, false );
+ item = new PropertyTextItem( this, item, 0, "whatsThis", true, true );
+ setPropertyValue( item );
+ if ( MetaDataBase::isPropertyChanged( editor->widget(), "whatsThis" ) )
+ item->setChanged( true, false );
+ }
+
+#ifndef QT_NO_SQL
+ if ( !editor->widget()->inherits( "QDataTable" ) && !editor->widget()->inherits( "QDataBrowser" ) &&
+ !editor->widget()->inherits( "QDataView" ) && parent_is_data_aware( editor->widget() ) ) {
+ item = new PropertyDatabaseItem( this, item, 0, "database", editor->formWindow()->mainContainer() != w );
+ setPropertyValue( item );
+ if ( MetaDataBase::isPropertyChanged( editor->widget(), "database" ) )
+ item->setChanged( true, false );
+ }
+
+ if ( editor->widget()->inherits( "QDataTable" ) || editor->widget()->inherits( "QDataBrowser" ) || editor->widget()->inherits( "QDataView" ) ) {
+ item = new PropertyDatabaseItem( this, item, 0, "database", false );
+ setPropertyValue( item );
+ if ( MetaDataBase::isPropertyChanged( editor->widget(), "database" ) )
+ item->setChanged( true, false );
+ item = new PropertyBoolItem( this, item, 0, "frameworkCode" );
+ setPropertyValue( item );
+ if ( MetaDataBase::isPropertyChanged( editor->widget(), "frameworkCode" ) )
+ item->setChanged( true, false );
+ }
+#endif
+
+ if ( w->inherits( "CustomWidget" ) ) {
+ MetaDataBase::CustomWidget *cw = ( (CustomWidget*)w )->customWidget();
+ if ( cw ) {
+ for ( QValueList<MetaDataBase::Property>::Iterator it = cw->lstProperties.begin(); it != cw->lstProperties.end(); ++it ) {
+ if ( unique.contains( QString( (*it).property ) ) )
+ continue;
+ unique.insert( QString( (*it).property ), true );
+ addPropertyItem( item, (*it).property, type_to_variant( (*it).type ) );
+ setPropertyValue( item );
+ if ( MetaDataBase::isPropertyChanged( editor->widget(), (*it).property ) )
+ item->setChanged( true, false );
+ }
+ }
+ }
+
+ setCurrentItem( firstChild() );
+
+ if ( showSorted ) {
+ setSorting( 0 );
+ sort();
+ setSorting( -1 );
+ setCurrentItem( firstChild() );
+ qApp->processEvents();
+ }
+
+ updateEditorSize();
+ updateEditorSize();
+}
+
+bool PropertyList::addPropertyItem( PropertyItem *&item, const QCString &name, QVariant::Type t )
+{
+ switch ( t ) {
+ case QVariant::String:
+ item = new PropertyTextItem( this, item, 0, name, true,
+ editor->widget()->inherits( "QLabel" ) || editor->widget()->inherits( "QTextView" ) );
+ break;
+ case QVariant::CString:
+ item = new PropertyTextItem( this, item, 0,
+ name, name == "name" &&
+ editor->widget() == editor->formWindow()->mainContainer(),
+ false, true );
+ break;
+ case QVariant::Bool:
+ item = new PropertyBoolItem( this, item, 0, name );
+ break;
+ case QVariant::Font:
+ item = new PropertyFontItem( this, item, 0, name );
+ break;
+ case QVariant::Int:
+ if ( name == "accel" )
+ item = new PropertyTextItem( this, item, 0, name, false, false, false, true );
+ else
+ item = new PropertyIntItem( this, item, 0, name, true );
+ break;
+ case QVariant::Double:
+ item = new PropertyDoubleItem( this, item, 0, name );
+ break;
+ case QVariant::KeySequence:
+ item = new PropertyTextItem( this, item, 0, name, false, false, false, true );
+ break;
+ case QVariant::UInt:
+ item = new PropertyIntItem( this, item, 0, name, false );
+ break;
+ case QVariant::StringList:
+ item = new PropertyListItem( this, item, 0, name, true );
+ break;
+ case QVariant::Rect:
+ item = new PropertyCoordItem( this, item, 0, name, PropertyCoordItem::Rect );
+ break;
+ case QVariant::Point:
+ item = new PropertyCoordItem( this, item, 0, name, PropertyCoordItem::Point );
+ break;
+ case QVariant::Size:
+ item = new PropertyCoordItem( this, item, 0, name, PropertyCoordItem::Size );
+ break;
+ case QVariant::Color:
+ item = new PropertyColorItem( this, item, 0, name, true );
+ break;
+ case QVariant::Pixmap:
+ case QVariant::IconSet:
+ item = new PropertyPixmapItem( this, item, 0, name, t == QVariant::IconSet );
+ break;
+ case QVariant::SizePolicy:
+ item = new PropertySizePolicyItem( this, item, 0, name );
+ break;
+ case QVariant::Palette:
+ item = new PropertyPaletteItem( this, item, 0, name );
+ break;
+ case QVariant::Cursor:
+ item = new PropertyCursorItem( this, item, 0, name );
+ break;
+ case QVariant::Date:
+ item = new PropertyDateItem( this, item, 0, name );
+ break;
+ case QVariant::Time:
+ item = new PropertyTimeItem( this, item, 0, name );
+ break;
+ case QVariant::DateTime:
+ item = new PropertyDateTimeItem( this, item, 0, name );
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
+void PropertyList::paintEmptyArea( QPainter *p, const QRect &r )
+{
+ p->fillRect( r, *backColor2 );
+}
+
+void PropertyList::setCurrentItem( QListViewItem *i )
+{
+ if ( !i )
+ return;
+
+ if ( currentItem() )
+ ( (PropertyItem*)currentItem() )->hideEditor();
+ QListView::setCurrentItem( i );
+ ( (PropertyItem*)currentItem() )->showEditor();
+}
+
+void PropertyList::updateEditorSize()
+{
+ if ( currentItem() )
+ ( ( PropertyItem* )currentItem() )->showEditor();
+}
+
+/*! This has to be called if the value if \a i should be set as
+ property to the currently edited widget.
+*/
+
+void PropertyList::valueChanged( PropertyItem *i )
+{
+ if ( !editor->widget() )
+ return;
+ QString pn( i18n("Set '%1' of '%2'" ).arg( i->name() ).arg( editor->widget()->name() ) );
+ SetPropertyCommand *cmd = new SetPropertyCommand( pn, editor->formWindow(),
+ editor->widget(), editor,
+ i->name(), WidgetFactory::property( editor->widget(), i->name() ),
+ i->value(), i->currentItem(), i->currentItemFromObject() );
+ cmd->execute();
+ editor->formWindow()->commandHistory()->addCommand( cmd, true );
+}
+
+void PropertyList::itemPressed( QListViewItem *i, const QPoint &p, int c )
+{
+ if ( !i )
+ return;
+ PropertyItem *pi = (PropertyItem*)i;
+ if ( !pi->hasSubItems() )
+ return;
+
+ if ( c == 0 && viewport()->mapFromGlobal( p ).x() < 20 )
+ toggleOpen( i );
+}
+
+void PropertyList::toggleOpen( QListViewItem *i )
+{
+ if ( !i )
+ return;
+ PropertyItem *pi = (PropertyItem*)i;
+ if ( pi->hasSubItems() ) {
+ pi->setOpen( !pi->isOpen() );
+ } else {
+ pi->toggle();
+ }
+}
+
+bool PropertyList::eventFilter( QObject *o, QEvent *e )
+{
+ if ( !o || !e )
+ return true;
+
+ PropertyItem *i = (PropertyItem*)currentItem();
+ if ( o != this &&e->type() == QEvent::KeyPress ) {
+ QKeyEvent *ke = (QKeyEvent*)e;
+ if ( ( ke->key() == Key_Up || ke->key() == Key_Down ) &&
+ ( o != this || o != viewport() ) &&
+ !( ke->state() & ControlButton ) ) {
+ QApplication::sendEvent( this, (QKeyEvent*)e );
+ return true;
+ } else if ( ( !o->inherits( "QLineEdit" ) ||
+ ( o->inherits( "QLineEdit" ) && ( (QLineEdit*)o )->isReadOnly() ) ) &&
+ i && i->hasSubItems() ) {
+ if ( !i->isOpen() &&
+ ( ke->key() == Key_Plus ||
+ ke->key() == Key_Right ))
+ i->setOpen( true );
+ else if ( i->isOpen() &&
+ ( ke->key() == Key_Minus ||
+ ke->key() == Key_Left ) )
+ i->setOpen( false );
+ } else if ( ( ke->key() == Key_Return || ke->key() == Key_Enter ) && o->inherits( "QComboBox" ) ) {
+ QKeyEvent ke2( QEvent::KeyPress, Key_Space, 0, 0 );
+ QApplication::sendEvent( o, &ke2 );
+ return true;
+ }
+ } else if ( e->type() == QEvent::FocusOut && o->inherits( "QLineEdit" ) && editor->formWindow() ) {
+ QTimer::singleShot( 100, editor->formWindow()->commandHistory(), SLOT( checkCompressedCommand() ) );
+ } else if ( o == viewport() ) {
+ QMouseEvent *me;
+ PropertyListItem* i;
+ switch ( e->type() ) {
+ case QEvent::MouseButtonPress:
+ me = (QMouseEvent*)e;
+ i = (PropertyListItem*) itemAt( me->pos() );
+ if( i && ( i->inherits("PropertyColorItem") || i->inherits("PropertyPixmapItem") ) ) {
+ pressItem = i;
+ pressPos = me->pos();
+ mousePressed = true;
+ }
+ break;
+ case QEvent::MouseMove:
+ me = (QMouseEvent*)e;
+ if ( me && me->state() & LeftButton && mousePressed) {
+
+ i = (PropertyListItem*) itemAt( me->pos() );
+ if( i && i == pressItem ) {
+
+ if(( pressPos - me->pos() ).manhattanLength() > QApplication::startDragDistance() ){
+ if ( i->inherits("PropertyColorItem") ) {
+ QColor col = i->value().asColor();
+ QColorDrag *drg = new QColorDrag( col, this );
+ QPixmap pix( 25, 25 );
+ pix.fill( col );
+ QPainter p( &pix );
+ p.drawRect( 0, 0, pix.width(), pix.height() );
+ p.end();
+ drg->setPixmap( pix );
+ mousePressed = false;
+ drg->dragCopy();
+ }
+ else if ( i->inherits("PropertyPixmapItem") ) {
+ QPixmap pix = i->value().asPixmap();
+ if( !pix.isNull() ) {
+ QImage img = pix.convertToImage();
+ QImageDrag *drg = new QImageDrag( img, this );
+ drg->setPixmap( pix );
+ mousePressed = false;
+ drg->dragCopy();
+ }
+ }
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ } else if ( o == header() ) {
+ if ( e->type() == QEvent::ContextMenu ) {
+ ((QContextMenuEvent *)e)->accept();
+ QPopupMenu menu( 0 );
+ menu.setCheckable( true );
+ const int cat_id = 1;
+ const int alpha_id = 2;
+ menu.insertItem( i18n("Sort &Categorized" ), cat_id );
+ int alpha = menu.insertItem( i18n("Sort &Alphabetically" ), alpha_id );
+ if ( showSorted )
+ menu.setItemChecked( alpha_id, true );
+ else
+ menu.setItemChecked( cat_id, true );
+ int res = menu.exec( ( (QContextMenuEvent*)e )->globalPos() );
+ if ( res != -1 ) {
+ bool newShowSorted = ( res == alpha );
+ if ( showSorted != newShowSorted ) {
+ showSorted = newShowSorted;
+ editor->clear();
+ editor->setup();
+ }
+ }
+ return true;
+ }
+ }
+
+ return QListView::eventFilter( o, e );
+}
+
+/*! This method re-initializes each item of the property list.
+*/
+
+void PropertyList::refetchData()
+{
+ QListViewItemIterator it( this );
+ for ( ; it.current(); ++it ) {
+ PropertyItem *i = (PropertyItem*)it.current();
+ if ( !i->propertyParent() )
+ setPropertyValue( i );
+ if ( i->hasSubItems() )
+ i->initChildren();
+ bool changed = MetaDataBase::isPropertyChanged( editor->widget(), i->name() );
+ if ( changed != i->isChanged() )
+ i->setChanged( changed, false );
+ }
+ updateEditorSize();
+}
+
+static void clearAlignList( QStrList &l )
+{
+ if ( l.count() == 1 )
+ return;
+ if ( l.find( "AlignAuto" ) != -1 )
+ l.remove( "AlignAuto" );
+ if ( l.find( "WordBreak" ) != -1 )
+ l.remove( "WordBreak" );
+}
+
+/*! This method initializes the value of the item \a i to the value
+ of the corresponding property.
+*/
+
+void PropertyList::setPropertyValue( PropertyItem *i )
+{
+ const QMetaProperty *p =
+ editor->widget()->metaObject()->
+ property( editor->widget()->metaObject()->findProperty( i->name(), true), true );
+ if ( !p ) {
+ if ( i->name() == "hAlign" ) {
+ int align = editor->widget()->property( "alignment" ).toInt();
+ p = editor->widget()->metaObject()->
+ property( editor->widget()->metaObject()->findProperty( "alignment", true ), true );
+ align &= ~AlignVertical_Mask;
+ QStrList l = p->valueToKeys( align );
+ clearAlignList( l );
+ ( (PropertyListItem*)i )->setCurrentItem( l.last() );
+ } else if ( i->name() == "vAlign" ) {
+ int align = editor->widget()->property( "alignment" ).toInt();
+ p = editor->widget()->metaObject()->
+ property( editor->widget()->metaObject()->findProperty( "alignment", true ), true );
+ align &= ~AlignHorizontal_Mask;
+ ( (PropertyListItem*)i )->setCurrentItem( p->valueToKeys( align ).last() );
+ } else if ( i->name() == "wordwrap" ) {
+ int align = editor->widget()->property( "alignment" ).toInt();
+ if ( align & WordBreak )
+ i->setValue( QVariant( true, 0 ) );
+ else
+ i->setValue( QVariant( false, 0 ) );
+ } else if ( i->name() == "layoutSpacing" ) {
+ ( (PropertyIntItem*)i )->setValue( MetaDataBase::spacing( WidgetFactory::containerOfWidget( (QWidget*)editor->widget() ) ) );
+ } else if ( i->name() == "layoutMargin" ) {
+ ( (PropertyIntItem*)i )->setValue( MetaDataBase::margin( WidgetFactory::containerOfWidget( (QWidget*)editor->widget() ) ) );
+ } else if ( i->name() == "toolTip" || i->name() == "whatsThis" || i->name() == "database" || i->name() == "frameworkCode" ) {
+ i->setValue( MetaDataBase::fakeProperty( editor->widget(), i->name() ) );
+ } else if ( editor->widget()->inherits( "CustomWidget" ) ) {
+ MetaDataBase::CustomWidget *cw = ( (CustomWidget*)editor->widget() )->customWidget();
+ if ( !cw )
+ return;
+ i->setValue( MetaDataBase::fakeProperty( editor->widget(), i->name() ) );
+ }
+ return;
+ }
+ if ( p->isSetType() )
+ ;
+ else if ( p->isEnumType() )
+ ( (PropertyListItem*)i )->setCurrentItem( p->valueToKey( editor->widget()->property( i->name() ).toInt() ) );
+ else
+ i->setValue( editor->widget()->property( i->name() ) );
+}
+
+void PropertyList::setCurrentProperty( const QString &n )
+{
+ if ( currentItem() && currentItem()->text( 0 ) == n ||
+ currentItem() && ( (PropertyItem*)currentItem() )->propertyParent() &&
+ ( (PropertyItem*)currentItem() )->propertyParent()->text( 0 ) == n )
+ return;
+
+ QListViewItemIterator it( this );
+ for ( ; it.current(); ++it ) {
+ if ( it.current()->text( 0 ) == n ) {
+ setCurrentItem( it.current() );
+ break;
+ }
+ }
+}
+
+PropertyEditor *PropertyList::propertyEditor() const
+{
+ return editor;
+}
+
+void PropertyList::resetProperty()
+{
+ if ( !currentItem() )
+ return;
+ PropertyItem *i = (PropertyItem*)currentItem();
+ if ( !MetaDataBase::isPropertyChanged( editor->widget(), i->PropertyItem::name() ) )
+ return;
+ QString pn( i18n("Reset '%1' of '%2'" ).arg( i->name() ).arg( editor->widget()->name() ) );
+ SetPropertyCommand *cmd = new SetPropertyCommand( pn, editor->formWindow(),
+ editor->widget(), editor,
+ i->name(), i->value(),
+ WidgetFactory::defaultValue( editor->widget(), i->name() ),
+ WidgetFactory::defaultCurrentItem( editor->widget(), i->name() ),
+ i->currentItem(), true );
+ cmd->execute();
+ editor->formWindow()->commandHistory()->addCommand( cmd, false );
+ if ( i->hasSubItems() )
+ i->initChildren();
+}
+
+void PropertyList::viewportDragEnterEvent( QDragEnterEvent *e )
+{
+ PropertyListItem *i = (PropertyListItem*) itemAt( e->pos() );
+ if( !i ) {
+ e->ignore();
+ return;
+ }
+
+ if ( i->inherits("PropertyColorItem") && QColorDrag::canDecode( e ) )
+ e->accept();
+ else if ( i->inherits("PropertyPixmapItem") && QImageDrag::canDecode( e ) )
+ e->accept();
+ else
+ e->ignore();
+}
+
+void PropertyList::viewportDragMoveEvent ( QDragMoveEvent *e )
+{
+ PropertyListItem *i = (PropertyListItem*) itemAt( e->pos() );
+ if( !i ) {
+ e->ignore();
+ return;
+ }
+
+ if ( i->inherits("PropertyColorItem") && QColorDrag::canDecode( e ) )
+ e->accept();
+ else if ( i->inherits("PropertyPixmapItem") && QImageDrag::canDecode( e ) )
+ e->accept();
+ else
+ e->ignore();
+}
+
+void PropertyList::viewportDropEvent ( QDropEvent *e )
+{
+ PropertyListItem *i = (PropertyListItem*) itemAt( e->pos() );
+ if( !i ) {
+ e->ignore();
+ return;
+ }
+
+ if ( i->inherits("PropertyColorItem") && QColorDrag::canDecode( e ) ) {
+ QColor color;
+ QColorDrag::decode( e, color );
+ i->setValue( QVariant( color ) );
+ valueChanged( i );
+ e->accept();
+ }
+ else if ( i->inherits("PropertyPixmapItem") && QImageDrag::canDecode( e ) ) {
+ QImage img;
+ QImageDrag::decode( e, img );
+ QPixmap pm;
+ pm.convertFromImage( img );
+ i->setValue( QVariant( pm ) );
+ valueChanged( i );
+ e->accept();
+ }
+ else
+ e->ignore();
+}
+
+QString PropertyList::whatsThisAt( const QPoint &p )
+{
+ return whatsThisText( itemAt( p ) );
+}
+
+void PropertyList::showCurrentWhatsThis()
+{
+ if ( !currentItem() )
+ return;
+ QPoint p( 0, currentItem()->itemPos() );
+ p = viewport()->mapToGlobal( contentsToViewport( p ) );
+ QWhatsThis::display( whatsThisText( currentItem() ), p, viewport() );
+}
+
+QString PropertyList::whatsThisText( QListViewItem *i )
+{
+ if ( !i || !editor->widget() )
+ return QString::null;
+ readPropertyDocs();
+ if ( ( (PropertyItem*)i )->propertyParent() )
+ i = ( (PropertyItem*)i )->propertyParent();
+
+ const QMetaObject *mo = editor->widget()->metaObject();
+ QString prop = ( (PropertyItem*)i )->name();
+ while ( mo ) {
+ QString s;
+ s = QString( mo->className() ) + "::" + prop;
+ QMap<QString, QString>::Iterator it;
+ if ( ( it = propertyDocs.find( s ) ) != propertyDocs.end() ) {
+ return *it;
+ }
+ mo = mo->superClass();
+ }
+
+ return i18n("<p><b>QWidget::%1</b></p><p>There is no documentation available for this property.</p>" ).arg( prop );
+}
+
+void PropertyList::readPropertyDocs()
+{
+ if ( !propertyDocs.isEmpty() )
+ return;
+
+ QString docFile = MainWindow::self->documentationPath() + "/propertydocs";
+ QFile f( docFile );
+ if ( !f.open( IO_ReadOnly ) )
+ return;
+ QDomDocument doc;
+ QString errMsg;
+ int errLine;
+ if ( !doc.setContent( &f, &errMsg, &errLine ) )
+ return;
+ QDomElement e = doc.firstChild().toElement().firstChild().toElement();
+
+ for ( ; !e.isNull(); e = e.nextSibling().toElement() ) {
+ QDomElement n = e.firstChild().toElement();
+ QString name;
+ QString doc;
+ for ( ; !n.isNull(); n = n.nextSibling().toElement() ) {
+ if ( n.tagName() == "name" )
+ name = n.firstChild().toText().data();
+ else if ( n.tagName() == "doc" )
+ doc = n.firstChild().toText().data();
+ }
+ doc.insert( 0, "<p><b>" + name + "</b></p>" );
+ propertyDocs.insert( name, doc );
+ }
+}
+
+// ------------------------------------------------------------
+
+#ifndef KOMMANDER
+EventList::EventList( QWidget *parent, FormWindow *fw, PropertyEditor *e )
+ : HierarchyList( parent, fw, true ), editor( e )
+{
+ header()->hide();
+ removeColumn( 1 );
+ setRootIsDecorated( true );
+ connect( this, SIGNAL( itemRenamed( QListViewItem *, int, const QString & ) ),
+ this, SLOT( renamed( QListViewItem * ) ) );
+}
+
+void EventList::setup()
+{
+ clear();
+
+#ifndef KOMMANDER
+ if ( MetaDataBase::hasEvents( formWindow->project()->language() ) ) {
+#else
+ if ( MetaDataBase::hasEvents( "C++" ) ) {
+#endif
+ QValueList<MetaDataBase::EventDescription> events =
+#ifndef KOMMANDER
+ MetaDataBase::events( editor->widget(), formWindow->project()->language() );
+#else
+ MetaDataBase::events( editor->widget(), "C++" );
+#endif
+ if ( events.isEmpty() )
+ return;
+ for ( QValueList<MetaDataBase::EventDescription>::Iterator it = events.begin(); it != events.end(); ++it ) {
+ HierarchyItem *eventItem = new HierarchyItem( HierarchyItem::Event, this, (*it).name,
+ QString::null, QString::null );
+ eventItem->setOpen( true );
+ QStringList funcs = MetaDataBase::eventFunctions( editor->widget(),
+ (*it).name,
+#ifndef KOMMANDER
+ formWindow->project()->language() );
+#else
+ "C++" );
+#endif
+ for ( QStringList::Iterator fit = funcs.begin(); fit != funcs.end(); ++fit ) {
+ HierarchyItem *item = new HierarchyItem( HierarchyItem::EventFunction, eventItem,
+ *fit, QString::null, QString::null );
+ item->setPixmap( 0, PixmapChooser::loadPixmap( "editslots.xpm" ) );
+ }
+#if 0 // ### for conversation from old to new
+ if ( !funcs.isEmpty() )
+ save( eventItem );
+#endif
+ }
+ } else {
+ QStrList sigs = editor->widget()->metaObject()->signalNames( true );
+ sigs.remove( "destroyed()" );
+ QStrListIterator it( sigs );
+ while ( it.current() ) {
+ HierarchyItem *eventItem = new HierarchyItem( HierarchyItem::Event, this,
+ it.current(), QString::null, QString::null );
+ eventItem->setOpen( true );
+ QValueList<MetaDataBase::Connection> conns =
+ MetaDataBase::connections( formWindow, editor->widget(), formWindow->mainContainer() );
+ for ( QValueList<MetaDataBase::Connection>::Iterator cit = conns.begin(); cit != conns.end(); ++cit ) {
+ if ( MetaDataBase::normalizeSlot( QString( (*cit).signal ) ) !=
+ MetaDataBase::normalizeSlot( QString( it.current() ) ) )
+ continue;
+ HierarchyItem *item = new HierarchyItem( HierarchyItem::EventFunction, eventItem,
+ (*cit).slot, QString::null, QString::null );
+ item->setPixmap( 0, PixmapChooser::loadPixmap( "editslots.xpm" ) );
+ }
+ ++it;
+ }
+ }
+}
+
+extern QListViewItem *newItem;
+
+void EventList::contentsMouseDoubleClickEvent( QMouseEvent *e )
+{
+ QListViewItem *i = itemAt( contentsToViewport( e->pos() ) );
+ if ( !i || i->parent() )
+ return;
+ QString s;
+#ifndef KOMMANDER
+ if ( MetaDataBase::hasEvents( formWindow->project()->language() ) ) {
+#else
+ if ( MetaDataBase::hasEvents( "C++" ) ) {
+#endif
+ QString s1 = i->text( 0 );
+ int pt = s1.find( "(" );
+ if ( pt != -1 )
+ s1 = s1.left( pt );
+ s = QString( editor->widget()->name() ) + "_" + s1;
+ } else {
+ s = QString( editor->widget()->name() ) + "_" + i->text( 0 );
+ }
+
+ insertEntry( i, PixmapChooser::loadPixmap( "editslots.xpm" ), s );
+}
+
+void EventList::setCurrent( QWidget * )
+{
+}
+
+void EventList::objectClicked( QListViewItem *i )
+{
+ if ( !i || !i->parent() )
+ return;
+ formWindow->mainWindow()->editFunction( i->text( 0 ) );
+}
+
+void EventList::showRMBMenu( QListViewItem *i, const QPoint &pos )
+{
+ if ( !i )
+ return;
+ QPopupMenu menu;
+ const int NEW_ITEM = 1;
+ const int DEL_ITEM = 2;
+ menu.insertItem( PixmapChooser::loadPixmap( "filenew" ), i18n("New Signal Handler" ), NEW_ITEM );
+ menu.insertItem( PixmapChooser::loadPixmap( "editcut" ), i18n("Delete Signal Handler" ), DEL_ITEM );
+ int res = menu.exec( pos );
+ if ( res == NEW_ITEM ) {
+ QString s;
+#ifndef KOMMANDER
+ if ( MetaDataBase::hasEvents( formWindow->project()->language() ) ) {
+#else
+ if ( MetaDataBase::hasEvents( "C++" ) ) {
+#endif
+ QString s1 = ( i->parent() ? i->parent() : i )->text( 0 );
+ int pt = s1.find( "(" );
+ if ( pt != -1 )
+ s1 = s1.left( pt );
+ s = QString( editor->widget()->name() ) + "_" + s1;
+ } else {
+ s = QString( editor->widget()->name() ) + "_" + ( i->parent() ? i->parent() : i )->text( 0 );
+ }
+ insertEntry( i->parent() ? i->parent() : i, PixmapChooser::loadPixmap( "editslots.xpm" ), s );
+ } else if ( res == DEL_ITEM && i->parent() ) {
+#ifndef KOMMANDER
+ if ( MetaDataBase::hasEvents( formWindow->project()->language() ) ) {
+#else
+ if ( MetaDataBase::hasEvents( "C++" ) ) {
+#endif
+ QListViewItem *p = i->parent();
+ delete i;
+ save( p );
+ } else {
+ MetaDataBase::Connection conn;
+ conn.sender = editor->widget();
+ conn.receiver = formWindow->mainContainer();
+ conn.signal = i->parent()->text( 0 );
+ conn.slot = i->text( 0 );
+ delete i;
+ RemoveConnectionCommand *cmd = new RemoveConnectionCommand( i18n("Remove Connection" ),
+ formWindow,
+ conn );
+ formWindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+#ifndef KOMMANDER
+ editor->formWindow()->mainWindow()->objectHierarchy()->updateFormDefinitionView();
+#endif
+ }
+ }
+}
+
+void EventList::renamed( QListViewItem *i )
+{
+ if ( newItem == i )
+ newItem = 0;
+ if ( !i->parent() )
+ return;
+ QListViewItem *itm = i->parent()->firstChild();
+ bool del = false;
+ while ( itm ) {
+ if ( itm != i && itm->text( 0 ) == i->text( 0 ) ) {
+ del = true;
+ break;
+ }
+ itm = itm->nextSibling();
+ }
+ i->setRenameEnabled( 0, false );
+ if ( del ) {
+ delete i;
+ } else {
+#ifndef KOMMANDER
+ if ( MetaDataBase::hasEvents( formWindow->project()->language() ) ) {
+#else
+ if ( MetaDataBase::hasEvents( "C++" ) ) {
+#endif
+
+ save( i->parent() );
+ editor->formWindow()->mainWindow()->
+#ifndef KOMMANDER
+ editFunction( i->text( 0 ), editor->formWindow()->project()->language(), true );
+#else
+ editFunction( i->text( 0 ), "C++", true );
+#endif
+ } else {
+ MetaDataBase::Connection conn;
+ conn.sender = editor->widget();
+ conn.receiver = formWindow->mainContainer();
+ conn.signal = i->parent()->text( 0 );
+ conn.slot = i->text( 0 );
+ AddConnectionCommand *cmd = new AddConnectionCommand( i18n("Add Connection" ),
+ formWindow,
+ conn );
+ formWindow->commandHistory()->addCommand( cmd );
+ // #### we should look if the specified slot already
+ // exists and if we can connect to this one
+#ifndef KOMMANDER
+ MetaDataBase::addSlot( formWindow, i->text( 0 ).latin1(), "virtual", "public",
+ formWindow->project()->language(), "void" );
+#else
+ MetaDataBase::addSlot( formWindow, i->text( 0 ).latin1(), "virtual", "public",
+ "C++", "void" );
+#endif
+ editor->formWindow()->mainWindow()->
+ editFunction( i->text( 0 ).left( i->text( 0 ).find( "(" ) ),
+#ifndef KOMMANDER
+ editor->formWindow()->project()->language(), true );
+#else
+ "C++", true );
+#endif
+
+ cmd->execute();
+#ifndef KOMMANDER
+ editor->formWindow()->mainWindow()->objectHierarchy()->updateFormDefinitionView();
+#endif
+ }
+ }
+}
+
+void EventList::save( QListViewItem *p )
+{
+ QStringList lst;
+ QListViewItem *i = p->firstChild();
+ while ( i ) {
+ lst << i->text( 0 );
+ i = i->nextSibling();
+ }
+
+#ifndef KOMMANDER
+ if ( MetaDataBase::hasEvents( formWindow->project()->language() ) ) {
+ if ( MetaDataBase::setEventFunctions( editor->widget(), formWindow,
+ formWindow->project()->language(), p->text( 0 ), lst ) )
+ editor->formWindow()->mainWindow()->objectHierarchy()->updateFormDefinitionView();
+ }
+#endif
+}
+#endif
+
+// --------------------------------------------------------------
+
+/*!
+ \class PropertyEditor propertyeditor.h
+ \brief PropertyEdior toplevel window
+
+ This is the toplevel window of the property editor which contains a
+ listview for editing properties.
+*/
+
+PropertyEditor::PropertyEditor( QWidget *parent )
+ : QTabWidget( parent, 0, WStyle_Customize | WStyle_NormalBorder | WStyle_Title |
+ WStyle_StaysOnTop | WStyle_Tool |WStyle_MinMax | WStyle_SysMenu )
+{
+ setCaption( i18n("Property Editor" ) );
+ setIcon( PixmapChooser::loadPixmap( "logo" ) );
+ wid = 0;
+ formwindow = 0;
+ listview = new PropertyList( this );
+ addTab( listview, i18n("P&roperties" ) );
+#ifndef KOMMANDER
+ eList = new EventList( this, formWindow(), this );
+ addTab( eList, i18n("S&ignal Handlers" ) );
+#endif
+}
+
+QObject *PropertyEditor::widget() const
+{
+ return wid;
+}
+
+void PropertyEditor::setWidget( QObject *w, FormWindow *fw )
+{
+#ifndef KOMMANDER
+ eList->setFormWindow( fw );
+#endif
+ if ( w && w == wid ) {
+ bool ret = true;
+ if ( wid->isWidgetType() && WidgetFactory::layoutType( (QWidget*)wid ) != WidgetFactory::NoLayout ) {
+ QListViewItemIterator it( listview );
+ ret = false;
+ while ( it.current() ) {
+ if ( it.current()->text( 0 ) == "layoutSpacing" || it.current()->text( 0 ) == "layoutMargin" ) {
+ ret = true;
+ break;
+ }
+ ++it;
+ }
+ }
+ if ( ret )
+ return;
+ }
+
+ if ( !w || !fw ) {
+ setCaption( i18n("Property Editor" ) );
+ clear();
+ wid = 0;
+ formwindow = 0;
+ return;
+ }
+
+ wid = w;
+ formwindow = fw;
+ setCaption( i18n("Property Editor (%1)" ).arg( formwindow->name() ) );
+ listview->viewport()->setUpdatesEnabled( false );
+ listview->setUpdatesEnabled( false );
+ clear();
+ listview->viewport()->setUpdatesEnabled( true );
+ listview->setUpdatesEnabled( true );
+ setup();
+}
+
+void PropertyEditor::clear()
+{
+ listview->setContentsPos( 0, 0 );
+ listview->clear();
+#ifndef KOMMANDER
+ eList->setContentsPos( 0, 0 );
+ eList->clear();
+#endif
+}
+
+void PropertyEditor::setup()
+{
+ if ( !formwindow || !wid )
+ return;
+ listview->viewport()->setUpdatesEnabled( false );
+ listview->setupProperties();
+ listview->viewport()->setUpdatesEnabled( true );
+ listview->updateEditorSize();
+
+#ifndef KOMMANDER
+ eList->viewport()->setUpdatesEnabled( false );
+ eList->setup();
+ eList->viewport()->setUpdatesEnabled( true );
+#endif
+}
+
+void PropertyEditor::refetchData()
+{
+ listview->refetchData();
+}
+
+void PropertyEditor::emitWidgetChanged()
+{
+ if ( formwindow && wid )
+ formwindow->widgetChanged( wid );
+}
+
+void PropertyEditor::closed( FormWindow *w )
+{
+ if ( w == formwindow ) {
+ formwindow = 0;
+ wid = 0;
+ clear();
+ }
+}
+
+void PropertyEditor::closeEvent( QCloseEvent *e )
+{
+ emit hidden();
+ e->accept();
+}
+
+PropertyList *PropertyEditor::propertyList() const
+{
+ return listview;
+}
+
+FormWindow *PropertyEditor::formWindow() const
+{
+ return formwindow;
+}
+
+QString PropertyEditor::currentProperty() const
+{
+ if ( !wid )
+ return QString::null;
+ if ( ( (PropertyItem*)listview->currentItem() )->propertyParent() )
+ return ( (PropertyItem*)listview->currentItem() )->propertyParent()->name();
+ return ( (PropertyItem*)listview->currentItem() )->name();
+}
+
+QString PropertyEditor::classOfCurrentProperty() const
+{
+ if ( !wid )
+ return QString::null;
+ QObject *o = wid;
+ QString curr = currentProperty();
+ QMetaObject *mo = o->metaObject();
+ while ( mo ) {
+ QStrList props = mo->propertyNames( false );
+ if ( props.find( curr.latin1() ) != -1 )
+ return mo->className();
+ mo = mo->superClass();
+ }
+ return QString::null;
+}
+
+QMetaObject* PropertyEditor::metaObjectOfCurrentProperty() const
+{
+ if ( !wid )
+ return 0;
+ return wid->metaObject();
+}
+
+void PropertyEditor::resetFocus()
+{
+ if ( listview->currentItem() )
+ ( (PropertyItem*)listview->currentItem() )->showEditor();
+}
+
+#ifndef KOMMANDER
+EventList *PropertyEditor::eventList() const
+{
+ return eList;
+}
+#endif
+#include "propertyeditor.moc"
diff --git a/kommander/editor/propertyeditor.h b/kommander/editor/propertyeditor.h
new file mode 100644
index 00000000..57911b7b
--- /dev/null
+++ b/kommander/editor/propertyeditor.h
@@ -0,0 +1,670 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef PROPERTYEDITOR_H
+#define PROPERTYEDITOR_H
+
+#include <qfeatures.h>
+#include <qvariant.h>
+#include <qlistview.h>
+#include <qptrlist.h>
+#include <qguardedptr.h>
+#include <qtabwidget.h>
+#include <qmodules.h>
+#include "hierarchyview.h"
+
+class PropertyList;
+class PropertyEditor;
+class QPainter;
+class QColorGroup;
+class QComboBox;
+class QLineEdit;
+class QPushButton;
+class QHBox;
+class QSpinBox;
+class QLabel;
+class FormWindow;
+class QCloseEvent;
+class QResizeEvent;
+class PropertyWhatsThis;
+class QDateEdit;
+class QTimeEdit;
+class QDateTimeEdit;
+
+class PropertyItem : public QListViewItem
+{
+public:
+ PropertyItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName );
+ ~PropertyItem();
+
+ void paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int align );
+ void paintBranches( QPainter * p, const QColorGroup & cg,
+ int w, int y, int h );
+ void paintFocus( QPainter *p, const QColorGroup &cg, const QRect &r );
+
+ virtual bool hasSubItems() const;
+ virtual void createChildren();
+ virtual void initChildren();
+
+ bool isOpen() const;
+ void setOpen( bool b );
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+ QVariant value() const;
+ QString name() const;
+ virtual void notifyValueChange();
+
+ virtual void setChanged( bool b, bool updateDb = TRUE );
+ bool isChanged() const;
+
+ virtual void placeEditor( QWidget *w );
+
+ virtual PropertyItem *propertyParent() const;
+ virtual void childValueChanged( PropertyItem *child );
+
+ void addChild( PropertyItem *i );
+ int childCount() const;
+ PropertyItem *child( int i ) const;
+
+ virtual bool hasCustomContents() const;
+ virtual void drawCustomContents( QPainter *p, const QRect &r );
+
+ void updateBackColor();
+
+ void setup() { QListViewItem::setup(); setHeight( QListViewItem::height() + 2 ); }
+
+ virtual QString currentItem() const;
+ virtual int currentIntItem() const;
+ virtual void setCurrentItem( const QString &s );
+ virtual void setCurrentItem( int i );
+ virtual int currentIntItemFromObject() const;
+ virtual QString currentItemFromObject() const;
+
+ void setFocus( QWidget *w );
+
+ virtual void toggle();
+ void setText( int col, const QString &txt );
+
+protected:
+ PropertyList *listview;
+ QVariant val;
+
+private:
+ QColor backgroundColor();
+ void createResetButton();
+ void updateResetButtonState();
+
+private:
+ bool open, changed;
+ PropertyItem *property;
+ QString propertyName;
+ QPtrList<PropertyItem> children;
+ QColor backColor;
+ QPushButton *resetButton;
+
+};
+
+class PropertyTextItem : public QObject,
+ public PropertyItem
+{
+ Q_OBJECT
+
+public:
+ PropertyTextItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName, bool comment, bool multiLine, bool ascii = FALSE, bool a = FALSE );
+ ~PropertyTextItem();
+
+ virtual void createChildren();
+ virtual void initChildren();
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+ virtual bool hasSubItems() const;
+ virtual void childValueChanged( PropertyItem *child );
+
+ virtual void setChanged( bool b, bool updateDb = TRUE );
+
+private slots:
+ void setValue();
+ void getText();
+
+private:
+ QLineEdit *lined();
+ QGuardedPtr<QLineEdit> lin;
+ QGuardedPtr<QHBox> box;
+ QPushButton *button;
+ bool withComment, hasMultiLines, asciiOnly, accel;
+
+};
+
+
+class PropertyBoolItem : public QObject,
+ public PropertyItem
+{
+ Q_OBJECT
+
+public:
+ PropertyBoolItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName );
+ ~PropertyBoolItem();
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+ virtual void toggle();
+
+private slots:
+ void setValue();
+
+private:
+ QComboBox *combo();
+ QGuardedPtr<QComboBox> comb;
+
+};
+
+class PropertyIntItem : public QObject,
+ public PropertyItem
+{
+ Q_OBJECT
+
+public:
+ PropertyIntItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName, bool s );
+ ~PropertyIntItem();
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+
+private slots:
+ void setValue();
+
+private:
+ QSpinBox *spinBox();
+ QGuardedPtr<QSpinBox> spinBx;
+ bool signedValue;
+
+};
+
+class PropertyDoubleItem : public QObject,
+ public PropertyItem
+{
+ Q_OBJECT
+
+public:
+ PropertyDoubleItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName );
+ ~PropertyDoubleItem();
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+
+private slots:
+ void setValue();
+
+private:
+ QLineEdit *lined();
+ QGuardedPtr<QLineEdit> lin;
+};
+
+class PropertyListItem : public QObject,
+ public PropertyItem
+{
+ Q_OBJECT
+
+public:
+ PropertyListItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName, bool editable );
+ ~PropertyListItem();
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+
+ QString currentItem() const;
+ int currentIntItem() const;
+ void setCurrentItem( const QString &s );
+ void setCurrentItem( int i );
+ int currentIntItemFromObject() const;
+ QString currentItemFromObject() const;
+ void addItem( const QString &s );
+
+private slots:
+ void setValue();
+
+private:
+ QComboBox *combo();
+ QGuardedPtr<QComboBox> comb;
+ int oldInt;
+ bool editable;
+ QString oldString;
+
+};
+
+class PropertyFontItem : public QObject,
+ public PropertyItem
+{
+ Q_OBJECT
+
+public:
+ PropertyFontItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName );
+ ~PropertyFontItem();
+
+ virtual void createChildren();
+ virtual void initChildren();
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+ virtual bool hasSubItems() const;
+ virtual void childValueChanged( PropertyItem *child );
+
+private slots:
+ void getFont();
+
+private:
+ QGuardedPtr<QLineEdit> lined;
+ QGuardedPtr<QPushButton> button;
+ QGuardedPtr<QHBox> box;
+
+};
+
+class PropertyCoordItem : public QObject,
+ public PropertyItem
+{
+ Q_OBJECT
+
+public:
+ enum Type { Rect, Size, Point };
+
+ PropertyCoordItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName, Type t );
+ ~PropertyCoordItem();
+
+ virtual void createChildren();
+ virtual void initChildren();
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+ virtual bool hasSubItems() const;
+ virtual void childValueChanged( PropertyItem *child );
+
+private:
+ QLineEdit *lined();
+ QGuardedPtr<QLineEdit> lin;
+ Type typ;
+
+};
+
+class PropertyColorItem : public QObject,
+ public PropertyItem
+{
+ Q_OBJECT
+
+public:
+ PropertyColorItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName, bool children );
+ ~PropertyColorItem();
+
+ virtual void createChildren();
+ virtual void initChildren();
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+ virtual bool hasSubItems() const;
+ virtual void childValueChanged( PropertyItem *child );
+
+ virtual bool hasCustomContents() const;
+ virtual void drawCustomContents( QPainter *p, const QRect &r );
+
+private slots:
+ void getColor();
+
+private:
+ QGuardedPtr<QHBox> box;
+ QGuardedPtr<QFrame> colorPrev;
+ QGuardedPtr<QPushButton> button;
+ bool withChildren;
+
+};
+
+class PropertyPixmapItem : public QObject,
+ public PropertyItem
+{
+ Q_OBJECT
+
+public:
+ PropertyPixmapItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName, bool isIconSet = FALSE );
+ ~PropertyPixmapItem();
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+
+ virtual bool hasCustomContents() const;
+ virtual void drawCustomContents( QPainter *p, const QRect &r );
+
+private slots:
+ void getPixmap();
+
+private:
+ QGuardedPtr<QHBox> box;
+ QGuardedPtr<QLabel> pixPrev;
+ QPushButton *button;
+ bool iconSet;
+
+};
+
+
+class PropertySizePolicyItem : public QObject,
+ public PropertyItem
+{
+ Q_OBJECT
+
+public:
+ PropertySizePolicyItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName );
+ ~PropertySizePolicyItem();
+
+ virtual void createChildren();
+ virtual void initChildren();
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+ virtual bool hasSubItems() const;
+ virtual void childValueChanged( PropertyItem *child );
+
+private:
+ QLineEdit *lined();
+ QGuardedPtr<QLineEdit> lin;
+
+};
+
+class PropertyPaletteItem : public QObject,
+ public PropertyItem
+{
+ Q_OBJECT
+
+public:
+ PropertyPaletteItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName );
+ ~PropertyPaletteItem();
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+
+ virtual bool hasCustomContents() const;
+ virtual void drawCustomContents( QPainter *p, const QRect &r );
+
+private slots:
+ void getPalette();
+
+private:
+ QGuardedPtr<QHBox> box;
+ QGuardedPtr<QLabel> palettePrev;
+ QGuardedPtr<QPushButton> button;
+
+};
+
+class PropertyCursorItem : public QObject,
+ public PropertyItem
+{
+ Q_OBJECT
+
+public:
+ PropertyCursorItem( PropertyList *l, PropertyItem *after, PropertyItem *prop,
+ const QString &propName );
+ ~PropertyCursorItem();
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+
+private slots:
+ void setValue();
+
+private:
+ QComboBox *combo();
+ QGuardedPtr<QComboBox> comb;
+
+};
+
+
+class PropertyDatabaseItem : public QObject,
+ public PropertyItem
+{
+ Q_OBJECT
+
+public:
+ PropertyDatabaseItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName, bool wField );
+ ~PropertyDatabaseItem();
+
+ virtual void createChildren();
+ virtual void initChildren();
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+ virtual bool hasSubItems() const;
+ virtual void childValueChanged( PropertyItem *child );
+
+private:
+ QGuardedPtr<QLineEdit> lined;
+ QGuardedPtr<QPushButton> button;
+ QGuardedPtr<QHBox> box;
+ bool withField;
+
+};
+
+class PropertyList : public QListView
+{
+ Q_OBJECT
+
+public:
+ PropertyList( PropertyEditor *e );
+
+ virtual void setupProperties();
+
+ virtual void setCurrentItem( QListViewItem *i );
+ virtual void valueChanged( PropertyItem *i );
+ virtual void refetchData();
+ virtual void setPropertyValue( PropertyItem *i );
+ virtual void setCurrentProperty( const QString &n );
+
+ PropertyEditor *propertyEditor() const;
+ QString whatsThisAt( const QPoint &p );
+ void showCurrentWhatsThis();
+
+public slots:
+ void updateEditorSize();
+ void resetProperty();
+ void toggleSort();
+
+private slots:
+ void itemPressed( QListViewItem *i, const QPoint &p, int c );
+ void toggleOpen( QListViewItem *i );
+ bool eventFilter( QObject *o, QEvent *e );
+
+protected:
+ void resizeEvent( QResizeEvent *e );
+ void paintEmptyArea( QPainter *p, const QRect &r );
+ bool addPropertyItem( PropertyItem *&item, const QCString &name, QVariant::Type t );
+
+ void viewportDragEnterEvent( QDragEnterEvent * );
+ void viewportDragMoveEvent ( QDragMoveEvent * );
+ void viewportDropEvent ( QDropEvent * );
+
+protected:
+ PropertyEditor *editor;
+
+private:
+ void readPropertyDocs();
+ QString whatsThisText( QListViewItem *i );
+
+private:
+ PropertyListItem* pressItem;
+ QPoint pressPos;
+ bool mousePressed;
+ bool showSorted;
+ QMap<QString, QString> propertyDocs;
+ PropertyWhatsThis *whatsThis;
+
+};
+
+class PropertyEditor : public QTabWidget
+{
+ Q_OBJECT
+
+public:
+ PropertyEditor( QWidget *parent );
+
+ QObject *widget() const;
+
+ void clear();
+ void setup();
+
+ void emitWidgetChanged();
+ void refetchData();
+
+ void closed( FormWindow *w );
+
+ PropertyList *propertyList() const;
+ FormWindow *formWindow() const;
+#ifndef KOMMANDER
+// EventList *eventList() const;
+#endif
+
+ QString currentProperty() const;
+ QString classOfCurrentProperty() const;
+ QMetaObject* metaObjectOfCurrentProperty() const;
+
+ void resetFocus();
+
+signals:
+ void hidden();
+
+public slots:
+ void setWidget( QObject *w, FormWindow *fw );
+
+protected:
+ void closeEvent( QCloseEvent *e );
+
+private:
+ QObject *wid;
+ PropertyList *listview;
+#ifndef KOMMANDER
+ EventList *eList;
+#endif
+ FormWindow *formwindow;
+
+};
+
+class PropertyDateItem : public QObject,
+ public PropertyItem
+{
+ Q_OBJECT
+
+public:
+ PropertyDateItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName );
+ ~PropertyDateItem();
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+
+private slots:
+ void setValue();
+
+private:
+ QDateEdit *lined();
+ QGuardedPtr<QDateEdit> lin;
+
+};
+
+class PropertyTimeItem : public QObject,
+ public PropertyItem
+{
+ Q_OBJECT
+
+public:
+ PropertyTimeItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName );
+ ~PropertyTimeItem();
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+
+private slots:
+ void setValue();
+
+private:
+ QTimeEdit *lined();
+ QGuardedPtr<QTimeEdit> lin;
+
+};
+
+class PropertyDateTimeItem : public QObject,
+ public PropertyItem
+{
+ Q_OBJECT
+
+public:
+ PropertyDateTimeItem( PropertyList *l, PropertyItem *after, PropertyItem *prop, const QString &propName );
+ ~PropertyDateTimeItem();
+
+ virtual void showEditor();
+ virtual void hideEditor();
+
+ virtual void setValue( const QVariant &v );
+
+private slots:
+ void setValue();
+
+private:
+ QDateTimeEdit *lined();
+ QGuardedPtr<QDateTimeEdit> lin;
+
+};
+
+#endif
diff --git a/kommander/editor/qcompletionedit.cpp b/kommander/editor/qcompletionedit.cpp
new file mode 100644
index 00000000..bd4b876a
--- /dev/null
+++ b/kommander/editor/qcompletionedit.cpp
@@ -0,0 +1,185 @@
+#include "qcompletionedit.h"
+#include <qlistbox.h>
+#include <qsizegrip.h>
+#include <qapplication.h>
+#include <qvbox.h>
+
+QCompletionEdit::QCompletionEdit( QWidget *parent, const char *name )
+ : QLineEdit( parent, name ), aAdd( false ), caseSensitive( false )
+{
+ popup = new QVBox( 0, 0, WType_Popup );
+ popup->setFrameStyle( QFrame::Box | QFrame::Plain );
+ popup->setLineWidth( 1 );
+ popup->hide();
+
+ listbox = new QListBox( popup );
+ listbox->setFrameStyle( QFrame::NoFrame );
+ listbox->setLineWidth( 1 );
+ listbox->installEventFilter( this );
+ listbox->setHScrollBarMode( QScrollView::AlwaysOn );
+ listbox->setVScrollBarMode( QScrollView::AlwaysOn );
+ listbox->setCornerWidget( new QSizeGrip( listbox, "completion sizegrip" ) );
+ connect( this, SIGNAL( textChanged( const QString & ) ),
+ this, SLOT( textDidChange( const QString & ) ) );
+ popup->setFocusProxy( listbox );
+ installEventFilter( this );
+}
+
+bool QCompletionEdit::autoAdd() const
+{
+ return aAdd;
+}
+
+QStringList QCompletionEdit::completionList() const
+{
+ return compList;
+}
+
+void QCompletionEdit::setCompletionList( const QStringList &l )
+{
+ compList = l;
+}
+
+void QCompletionEdit::setAutoAdd( bool add )
+{
+ aAdd = add;
+}
+
+void QCompletionEdit::textDidChange( const QString &text )
+{
+ if ( text.isEmpty() ) {
+ popup->close();
+ return;
+ }
+ updateListBox();
+ placeListBox();
+}
+
+void QCompletionEdit::placeListBox()
+{
+ if ( listbox->count() == 0 ) {
+ popup->close();
+ return;
+ }
+
+ popup->resize( QMAX( listbox->sizeHint().width() + listbox->verticalScrollBar()->width() + 4, width() ),
+ listbox->sizeHint().height() + listbox->horizontalScrollBar()->height() + 4 );
+
+ QPoint p( mapToGlobal( QPoint( 0, 0 ) ) );
+ if ( p.y() + height() + popup->height() <= QApplication::desktop()->height() )
+ popup->move( p.x(), p.y() + height() );
+ else
+ popup->move( p.x(), p.y() - listbox->height() );
+ popup->show();
+ listbox->setCurrentItem( 0 );
+ listbox->setSelected( 0, true );
+ setFocus();
+}
+
+void QCompletionEdit::updateListBox()
+{
+ listbox->clear();
+ if ( compList.isEmpty() )
+ return;
+ for ( QStringList::Iterator it = compList.begin(); it != compList.end(); ++it ) {
+ if ( caseSensitive && (*it).left( text().length() ) == text() ||
+ !caseSensitive && (*it).left( text().length() ).lower() == text().lower() )
+ listbox->insertItem( *it );
+ }
+}
+
+bool QCompletionEdit::eventFilter( QObject *o, QEvent *e )
+{
+ if ( o == popup || o == listbox || o == listbox->viewport() ) {
+ if ( e->type() == QEvent::KeyPress ) {
+ QKeyEvent *ke = (QKeyEvent*)e;
+ if ( ke->key() == Key_Enter || ke->key() == Key_Return || ke->key() == Key_Tab ) {
+ if ( ke->key() == Key_Tab && listbox->count() > 1 &&
+ listbox->currentItem() < (int)listbox->count() - 1 ) {
+ listbox->setCurrentItem( listbox->currentItem() + 1 );
+ return true;
+ }
+ popup->close();
+ setFocus();
+ blockSignals( true );
+ setText( listbox->currentText() );
+ blockSignals( false );
+ emit chosen( text() );
+ return true;
+ } else if ( ke->key() == Key_Left || ke->key() == Key_Right ||
+ ke->key() == Key_Up || ke->key() == Key_Down ||
+ ke->key() == Key_Home || ke->key() == Key_End ||
+ ke->key() == Key_Prior || ke->key() == Key_Next ) {
+ return false;
+ } else if ( ke->key() == Key_Escape ) {
+ popup->close();
+ setFocus();
+ } else if ( ke->key() != Key_Shift && ke->key() != Key_Control &&
+ ke->key() != Key_Alt ) {
+ updateListBox();
+ if ( listbox->count() == 0 || text().length() == 0 ) {
+ popup->close();
+ setFocus();
+ }
+ QApplication::sendEvent( this, e );
+ return true;
+ }
+ } else if ( e->type() == QEvent::MouseButtonDblClick ) {
+ popup->close();
+ setFocus();
+ blockSignals( true );
+ setText( listbox->currentText() );
+ blockSignals( false );
+ emit chosen( text() );
+ return true;
+ }
+ } else if ( o == this ) {
+ if ( e->type() == QEvent::KeyPress ) {
+ QKeyEvent *ke = (QKeyEvent*)e;
+ if ( ke->key() == Key_Up ||
+ ke->key() == Key_Down ||
+ ke->key() == Key_Prior ||
+ ke->key() == Key_Next ||
+ ke->key() == Key_Return ||
+ ke->key() == Key_Enter ||
+ ke->key() == Key_Tab ||
+ ke->key() == Key_Escape ) {
+ QApplication::sendEvent( listbox, e );
+ return true;
+ }
+ }
+ }
+ return QLineEdit::eventFilter( o, e );
+}
+
+void QCompletionEdit::addCompletionEntry( const QString &entry )
+{
+ if ( compList.find( entry ) == compList.end() ) {
+ compList << entry;
+ compList.sort();
+ }
+}
+
+void QCompletionEdit::removeCompletionEntry( const QString &entry )
+{
+ QStringList::Iterator it = compList.find( entry );
+ if ( it != compList.end() )
+ compList.remove( it );
+}
+
+void QCompletionEdit::setCaseSensitive( bool b )
+{
+ caseSensitive = b;
+}
+
+bool QCompletionEdit::isCaseSensitive() const
+{
+ return caseSensitive;
+}
+
+void QCompletionEdit::clear()
+{
+ QLineEdit::clear();
+ compList.clear();
+}
+#include "qcompletionedit.moc"
diff --git a/kommander/editor/qcompletionedit.h b/kommander/editor/qcompletionedit.h
new file mode 100644
index 00000000..fa7e8b23
--- /dev/null
+++ b/kommander/editor/qcompletionedit.h
@@ -0,0 +1,53 @@
+#ifndef QCOMPLETIONEDIT_H
+#define QCOMPLETIONEDIT_H
+
+#include <qlineedit.h>
+#include <qstringlist.h>
+
+class QListBox;
+class QVBox;
+
+class QCompletionEdit : public QLineEdit
+{
+ Q_OBJECT
+ Q_PROPERTY( bool autoAdd READ autoAdd WRITE setAutoAdd )
+ Q_PROPERTY( bool caseSensitive READ isCaseSensitive WRITE setCaseSensitive )
+
+public:
+ QCompletionEdit( QWidget *parent = 0, const char *name = 0 );
+
+ bool autoAdd() const;
+ QStringList completionList() const;
+ bool eventFilter( QObject *o, QEvent *e );
+ bool isCaseSensitive() const;
+
+public slots:
+ void setCompletionList( const QStringList &l );
+ void setAutoAdd( bool add );
+ void clear();
+ void addCompletionEntry( const QString &entry );
+ void removeCompletionEntry( const QString &entry );
+ void setCaseSensitive( bool b );
+
+signals:
+ void chosen( const QString &text );
+
+private slots:
+ void textDidChange( const QString &text );
+
+private:
+ void placeListBox();
+ void updateListBox();
+
+private:
+ bool aAdd;
+ QStringList compList;
+ QListBox *listbox;
+ QVBox *popup;
+ bool caseSensitive;
+
+};
+
+
+
+#endif
diff --git a/kommander/editor/resource.cpp b/kommander/editor/resource.cpp
new file mode 100644
index 00000000..99fab90a
--- /dev/null
+++ b/kommander/editor/resource.cpp
@@ -0,0 +1,2858 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qmenudata.h>
+#include "resource.h"
+#include "defs.h"
+#include "metadatabase.h"
+#include "formwindow.h"
+#include "mainwindow.h"
+#include "qdom.h"
+#include "widgetdatabase.h"
+#include "widgetfactory.h"
+#include "layout.h"
+#include "domtool.h"
+#include "command.h"
+#include "pixmapchooser.h"
+#ifndef QT_NO_SQL
+#include "database.h"
+#endif
+#include "actiondnd.h"
+#ifndef KOMMANDER
+#include "project.h"
+#include "pixmapcollection.h"
+#endif
+#include "formfile.h"
+
+#include <qfeatures.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qobject.h>
+#include <qwidget.h>
+#include <qobjectlist.h>
+#include <qmetaobject.h>
+#include <qworkspace.h>
+#include <qtabwidget.h>
+#include <qapplication.h>
+#include <qbuffer.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qlistbox.h>
+#include <qcombobox.h>
+#include <qwidgetstack.h>
+#include <qtabbar.h>
+#include <qheader.h>
+#include <qlistview.h>
+#include <qiconview.h>
+#include <qlabel.h>
+#include <qwizard.h>
+#include <qtextcodec.h>
+#include <qregexp.h>
+#include <zlib.h>
+#include <qdatetime.h>
+#ifndef QT_NO_TABLE
+#include <qtable.h>
+#endif
+
+#include <klocale.h>
+
+static QString makeIndent( int indent )
+{
+ QString s;
+ s.fill( ' ', indent * 4 );
+ return s;
+}
+
+static QString entitize( const QString &s, bool attribute = false )
+{
+ QString s2 = s;
+ s2 = s2.replace( QRegExp( "&" ), "&amp;" );
+ s2 = s2.replace( QRegExp( ">" ), "&gt;" );
+ s2 = s2.replace( QRegExp( "<" ), "&lt;" );
+ if ( attribute ) {
+ s2 = s2.replace( QRegExp( "\"" ), "&quot;" );
+ s2 = s2.replace( QRegExp( "'" ), "&apos;" );
+ }
+ return s2;
+}
+
+static QString mkBool( bool b )
+{
+ return b? "true" : "false";
+}
+
+/*!
+ \class Resource resource.h
+ \brief Class for saving/loading, etc. forms
+
+ This class is used for saving and loading forms, code generation,
+ transferring data of widgets over the clipboard, etc..
+
+*/
+
+
+Resource::Resource()
+{
+ mainwindow = 0;
+ formwindow = 0;
+ toplevel = 0;
+ copying = false;
+ pasting = false;
+ hadGeometry = false;
+#ifndef KOMMANDER
+ langIface = 0;
+#endif
+ hasFunctions = false;
+}
+
+Resource::Resource( MainWindow* mw )
+ : mainwindow( mw )
+{
+ formwindow = 0;
+ toplevel = 0;
+ copying = false;
+ pasting = false;
+ hadGeometry = false;
+#ifndef KOMMANDER
+ langIface = 0;
+#endif
+ hasFunctions = false;
+}
+
+Resource::~Resource()
+{
+#ifndef KOMMANDER
+ if ( langIface )
+ langIface->release();
+#endif
+}
+
+void Resource::setWidget( FormWindow *w )
+{
+ formwindow = w;
+ toplevel = w;
+}
+
+QWidget *Resource::widget() const
+{
+ return toplevel;
+}
+
+bool Resource::load( FormFile *ff )
+{
+ if ( !ff || ff->absFileName().isEmpty() )
+ return false;
+ currFileName = ff->absFileName();
+ mainContainerSet = false;
+
+ QFile f( ff->absFileName() );
+ f.open( IO_ReadOnly );
+
+ bool b = load( ff, &f );
+ f.close();
+
+ return b;
+}
+
+bool Resource::load( FormFile *ff, QIODevice* dev )
+{
+ QDomDocument doc;
+ QString errMsg;
+ int errLine;
+ QTextStream stream(dev);
+ QString content = stream.read();
+ if (content.startsWith("#!"))
+ {
+ content = content.mid(content.find('\n'));
+ }
+ if ( !doc.setContent( content) ) {
+ // qDebug( QString("Parse error: ") + errMsg + QString(" in line %d"), errLine );
+ return false;
+ }
+
+ DomTool::fixDocument( doc );
+
+ toplevel = formwindow = new FormWindow( ff, mainwindow->qWorkspace(), 0 );
+#ifndef KOMMANDER
+ formwindow->setProject( MainWindow::self->currProject() );
+#endif
+ formwindow->setMainWindow( mainwindow );
+ MetaDataBase::addEntry( formwindow );
+
+#ifndef KOMMANDER
+ if (!langIface) {
+ langIface = MetaDataBase::languageInterface( mainwindow->currProject()->language() );
+ if ( langIface )
+ langIface->addRef();
+ }
+#endif
+
+ QDomElement e = doc.firstChild().toElement().firstChild().toElement();
+
+ QDomElement forwards = e;
+ while ( forwards.tagName() != "forwards" && !forwards.isNull() )
+ forwards = forwards.nextSibling().toElement();
+
+ QDomElement includes = e;
+ while ( includes.tagName() != "includes" && !includes.isNull() )
+ includes = includes.nextSibling().toElement();
+
+ QDomElement variables = e;
+ while ( variables.tagName() != "variables" && !variables.isNull() )
+ variables = variables.nextSibling().toElement();
+
+ QDomElement eltSignals = e;
+ while ( eltSignals.tagName() != "signals" && !eltSignals.isNull() )
+ eltSignals = eltSignals.nextSibling().toElement();
+
+ QDomElement eltSlots = e;
+ while ( eltSlots.tagName() != "slots" && !eltSlots.isNull() )
+ eltSlots = eltSlots.nextSibling().toElement();
+
+ QDomElement connections = e;
+ while ( connections.tagName() != "connections" && !connections.isNull() )
+ connections = connections.nextSibling().toElement();
+
+ QDomElement imageCollection = e;
+ images.clear();
+ while ( imageCollection.tagName() != "images" && !imageCollection.isNull() )
+ imageCollection = imageCollection.nextSibling().toElement();
+
+ QDomElement customWidgets = e;
+ while ( customWidgets.tagName() != "customwidgets" && !customWidgets.isNull() )
+ customWidgets = customWidgets.nextSibling().toElement();
+
+ QDomElement tabOrder = e;
+ while ( tabOrder.tagName() != "tabstops" && !tabOrder.isNull() )
+ tabOrder = tabOrder.nextSibling().toElement();
+
+ QDomElement actions = e;
+ while ( actions.tagName() != "actions" && !actions.isNull() )
+ actions = actions.nextSibling().toElement();
+
+ QDomElement toolbars = e;
+ while ( toolbars.tagName() != "toolbars" && !toolbars.isNull() )
+ toolbars = toolbars.nextSibling().toElement();
+
+ QDomElement menubar = e;
+ while ( menubar.tagName() != "menubar" && !menubar.isNull() )
+ menubar = menubar.nextSibling().toElement();
+
+ QDomElement functions = e;
+ while ( functions.tagName() != "functions" && !functions.isNull() )
+ functions = functions.nextSibling().toElement();
+
+
+ QDomElement widget;
+ while ( !e.isNull() ) {
+ if ( e.tagName() == "widget" ) {
+ widget = e;
+ } else if ( e.tagName() == "include" ) { // compatibility with 2.x
+ MetaDataBase::Include inc;
+ inc.location = "global";
+ if ( e.attribute( "location" ) == "local" )
+ inc.location = "local";
+ inc.implDecl = "in declaration";
+ if ( e.attribute( "impldecl" ) == "in implementation" )
+ inc.implDecl = "in implementation";
+ inc.header = e.firstChild().toText().data();
+ if ( inc.header.right( 5 ) != ".ui.h" )
+ metaIncludes.append( inc );
+ } else if ( e.tagName() == "comment" ) {
+ metaInfo.comment = e.firstChild().toText().data();
+ } else if ( e.tagName() == "forward" ) { // compatibility with old betas
+ metaForwards << e.firstChild().toText().data();
+ } else if ( e.tagName() == "variable" ) { // compatibility with old betas
+ metaVariables << e.firstChild().toText().data();
+ } else if ( e.tagName() == "author" ) {
+ metaInfo.author = e.firstChild().toText().data();
+ } else if ( e.tagName() == "version" ) {
+ metaInfo.version = e.firstChild().toText().data();
+ } else if ( e.tagName() == "license" ) {
+ metaInfo.license = e.firstChild().toText().data();
+ } else if ( e.tagName() == "exportmacro" ) {
+ exportMacro = e.firstChild().toText().data();
+ } else if ( e.tagName() == "layoutdefaults" ) {
+ formwindow->setLayoutDefaultSpacing( e.attribute( "spacing", QString::number( formwindow->layoutDefaultSpacing() ) ).toInt() );
+ formwindow->setLayoutDefaultMargin( e.attribute( "margin", QString::number( formwindow->layoutDefaultMargin() ) ).toInt() );
+ }
+
+ e = e.nextSibling().toElement();
+ }
+
+ if ( !imageCollection.isNull() )
+ loadImageCollection( imageCollection );
+ if ( !customWidgets.isNull() )
+ loadCustomWidgets( customWidgets, this );
+
+#if defined (QT_NON_COMMERCIAL)
+ bool previewMode = MainWindow::self->isPreviewing();
+ QWidget *w = (QWidget*)createObject( widget, !previewMode ? (QWidget*)formwindow : MainWindow::self);
+ if ( !w )
+ return false;
+ if ( previewMode )
+ w->reparent( MainWindow::self, Qt::WType_TopLevel, w->pos(), true );
+#else
+ if ( !createObject( widget, formwindow) )
+ return false;
+#endif
+
+ if ( !forwards.isNull() ) {
+ for ( QDomElement n = forwards.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() )
+ if ( n.tagName() == "forward" )
+ metaForwards << n.firstChild().toText().data();
+ }
+
+ if ( !includes.isNull() ) {
+ for ( QDomElement n = includes.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() )
+ if ( n.tagName() == "include" ) {
+ if ( n.tagName() == "include" ) {
+ MetaDataBase::Include inc;
+ inc.location = "global";
+ if ( n.attribute( "location" ) == "local" )
+ inc.location = "local";
+ inc.implDecl = "in declaration";
+ if ( n.attribute( "impldecl" ) == "in implementation" )
+ inc.implDecl = "in implementation";
+ inc.header = n.firstChild().toText().data();
+ if ( inc.header.right( 5 ) != ".ui.h" )
+ metaIncludes.append( inc );
+ }
+ }
+ }
+
+ if ( !variables.isNull() ) {
+ for ( QDomElement n = variables.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() )
+ if ( n.tagName() == "variable" )
+ metaVariables << n.firstChild().toText().data();
+ }
+ if ( !eltSignals.isNull() ) {
+ for ( QDomElement n = eltSignals.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() )
+ if ( n.tagName() == "signal" )
+ metaSignals << n.firstChild().toText().data();
+ }
+ if ( !eltSlots.isNull() ) {
+ for ( QDomElement n = eltSlots.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() )
+ if ( n.tagName() == "slot" ) {
+ MetaDataBase::Slot slot;
+ slot.specifier = n.attribute( "specifier", "virtual" );
+ if ( slot.specifier.isEmpty() )
+ slot.specifier = "virtual";
+ slot.access = n.attribute( "access", "public" );
+ if ( slot.access.isEmpty() )
+ slot.access = "public";
+ slot.language = n.attribute( "language", "C++" );
+ slot.returnType = n.attribute( "returnType", "void" );
+ if ( slot.returnType.isEmpty() )
+ slot.returnType = "void";
+ slot.slot = n.firstChild().toText().data();
+ if ( !MetaDataBase::hasSlot( formwindow, slot.slot, true ) )
+ MetaDataBase::addSlot( formwindow, slot.slot, slot.specifier,
+ slot.access, slot.language, slot.returnType );
+ else
+ MetaDataBase::changeSlotAttributes( formwindow, slot.slot,
+ slot.specifier, slot.access,
+ slot.language, slot.returnType );
+ }
+ }
+ if ( !actions.isNull() )
+ loadActions( actions );
+ if ( !toolbars.isNull() )
+ loadToolBars( toolbars );
+ if ( !menubar.isNull() )
+ loadMenuBar( menubar );
+
+ if ( !connections.isNull() )
+ loadConnections( connections );
+ if ( !tabOrder.isNull() )
+ loadTabOrder( tabOrder );
+
+ if ( formwindow ) {
+ MetaDataBase::setIncludes( formwindow, metaIncludes );
+ MetaDataBase::setForwards( formwindow, metaForwards );
+ MetaDataBase::setSignalList( formwindow, metaSignals );
+ MetaDataBase::setMetaInfo( formwindow, metaInfo );
+ MetaDataBase::setExportMacro( formwindow->mainContainer(), exportMacro );
+ }
+
+
+ if ( mainwindow && formwindow )
+ {
+ mainwindow->insertFormWindow( formwindow );
+ }
+
+ if ( formwindow ) {
+ formwindow->killAccels( formwindow );
+ if ( formwindow->layout() )
+ formwindow->layout()->activate();
+ if ( hadGeometry )
+ formwindow->resize( formwindow->size().expandedTo( formwindow->minimumSize().
+ expandedTo( formwindow->minimumSizeHint() ) ) );
+ else
+ formwindow->resize( formwindow->size().expandedTo( formwindow->sizeHint() ) );
+ }
+
+ return true;
+}
+
+bool Resource::save( const QString& filename, bool formCodeOnly )
+{
+ if ( !formwindow || filename.isEmpty() )
+ return false;
+ currFileName = filename;
+
+ QFile f( filename );
+ if ( !f.open( IO_WriteOnly | IO_Translate ) )
+ return false;
+ bool b = save( &f );
+ f.close();
+ return b;
+}
+
+bool Resource::save( QIODevice* dev )
+{
+ if ( !formwindow )
+ return false;
+
+
+ QTextStream ts( dev );
+ ts.setCodec( QTextCodec::codecForName( "UTF-8" ) );
+ if ( formwindow->mainContainer()->property("useShebang").toBool() )
+ ts << formwindow->mainContainer()->property("shebang").toString() << endl;
+ ts << "<!DOCTYPE UI><UI version=\"3.0\" stdsetdef=\"1\">" << endl;
+ saveMetaInfoBefore( ts, 0 );
+ saveObject( formwindow->mainContainer(), 0, ts, 0 );
+ if ( formwindow->mainContainer()->inherits( "QMainWindow" ) ) {
+ saveMenuBar( (QMainWindow*)formwindow->mainContainer(), ts, 0 );
+ saveToolBars( (QMainWindow*)formwindow->mainContainer(), ts, 0 );
+ }
+ if ( !MetaDataBase::customWidgets()->isEmpty() && !usedCustomWidgets.isEmpty() )
+ saveCustomWidgets( ts, 0 );
+ if ( formwindow->mainContainer()->inherits( "QMainWindow" ) )
+ saveActions( formwindow->actionList(), ts, 0 );
+ if ( !images.isEmpty() )
+ saveImageCollection( ts, 0 );
+ if ( !MetaDataBase::connections( formwindow ).isEmpty() || !MetaDataBase::slotList( formwindow ).isEmpty() )
+ saveConnections( ts, 0 );
+ saveTabOrder( ts, 0 );
+ saveMetaInfoAfter( ts, 0 );
+ ts << "</UI>" << endl;
+ images.clear();
+
+ return true;
+}
+
+QString Resource::copy()
+{
+ if ( !formwindow )
+ return QString::null;
+
+ copying = true;
+ QString s;
+ QTextOStream ts( &s );
+
+ ts << "<!DOCTYPE UI-SELECTION><UI-SELECTION>" << endl;
+ QWidgetList widgets = formwindow->selectedWidgets();
+ QWidgetList tmp( widgets );
+ for ( QWidget *w = widgets.first(); w; w = widgets.next() ) {
+ QWidget *p = w->parentWidget();
+ bool save = true;
+ while ( p ) {
+ if ( tmp.findRef( p ) != -1 ) {
+ save = false;
+ break;
+ }
+ p = p->parentWidget();
+ }
+ if ( save )
+ saveObject( w, 0, ts, 0 );
+ }
+ if ( !MetaDataBase::customWidgets()->isEmpty() && !usedCustomWidgets.isEmpty() )
+ saveCustomWidgets( ts, 0 );
+ if ( !images.isEmpty() )
+ saveImageCollection( ts, 0 );
+ ts << "</UI-SELECTION>" << endl;
+
+ return s;
+}
+
+
+void Resource::paste( const QString &cb, QWidget *parent )
+{
+ if ( !formwindow )
+ return;
+ mainContainerSet = true;
+
+ pasting = true;
+ QBuffer buf( QCString( cb.utf8() ) );
+ buf.open( IO_ReadOnly );
+ QDomDocument doc;
+ QString errMsg;
+ int errLine;
+ if ( !doc.setContent( &buf, &errMsg, &errLine ) ) {
+ // qDebug( QString("Parse error: ") + errMsg + QString(" in line %d"), errLine );
+ }
+
+ QDomElement firstWidget = doc.firstChild().toElement().firstChild().toElement();
+
+ QDomElement imageCollection = firstWidget;
+ images.clear();
+ while ( imageCollection.tagName() != "images" && !imageCollection.isNull() )
+ imageCollection = imageCollection.nextSibling().toElement();
+
+ QDomElement customWidgets = firstWidget;
+ while ( customWidgets.tagName() != "customwidgets" && !customWidgets.isNull() )
+ customWidgets = customWidgets.nextSibling().toElement();
+
+ if ( !imageCollection.isNull() )
+ loadImageCollection( imageCollection );
+ if ( !customWidgets.isNull() )
+ loadCustomWidgets( customWidgets, this );
+
+ QWidgetList widgets;
+ formwindow->clearSelection( false );
+ formwindow->setPropertyShowingBlocked( true );
+ formwindow->clearSelection( false );
+ while ( !firstWidget.isNull() ) {
+ if ( firstWidget.tagName() == "widget" ) {
+ QWidget *w = (QWidget*)createObject( firstWidget, parent, 0 );
+ if ( !w )
+ continue;
+ widgets.append( w );
+ int x = w->x() + formwindow->grid().x();
+ int y = w->y() + formwindow->grid().y();
+ if ( w->x() + w->width() > parent->width() )
+ x = QMAX( 0, parent->width() - w->width() );
+ if ( w->y() + w->height() > parent->height() )
+ y = QMAX( 0, parent->height() - w->height() );
+ if ( x != w->x() || y != w->y() )
+ w->move( x, y );
+ formwindow->selectWidget( w );
+ } else if ( firstWidget.tagName() == "spacer" ) {
+ QWidget *w = createSpacer( firstWidget, parent, 0, firstWidget.tagName() == "vspacer" ? Qt::Vertical : Qt::Horizontal );
+ if ( !w )
+ continue;
+ widgets.append( w );
+ int x = w->x() + formwindow->grid().x();
+ int y = w->y() + formwindow->grid().y();
+ if ( w->x() + w->width() > parent->width() )
+ x = QMAX( 0, parent->width() - w->width() );
+ if ( w->y() + w->height() > parent->height() )
+ y = QMAX( 0, parent->height() - w->height() );
+ if ( x != w->x() || y != w->y() )
+ w->move( x, y );
+ formwindow->selectWidget( w );
+ }
+ firstWidget = firstWidget.nextSibling().toElement();
+ }
+ formwindow->setPropertyShowingBlocked( false );
+ formwindow->emitShowProperties();
+ buf.close();
+
+ PasteCommand *cmd = new PasteCommand( i18n("Paste" ), formwindow, widgets );
+ formwindow->commandHistory()->addCommand( cmd );
+}
+
+void Resource::saveObject( QObject *obj, QDesignerGridLayout* grid, QTextStream &ts, int indent )
+{
+ if ( obj && obj->isWidgetType() && ( (QWidget*)obj )->isHidden() && !(obj->isA("ScriptObject")) )
+ return;
+ QString closeTag;
+ if ( obj->isWidgetType() ) {
+ const char* className = WidgetFactory::classNameOf( obj );
+ if ( obj->isA( "CustomWidget" ) )
+ usedCustomWidgets << QString( className );
+ if ( obj != formwindow && !formwindow->widgets()->find( (QWidget*)obj ) )
+ return; // we don't know anything about this thing
+
+ QString attributes;
+ if ( grid ) {
+ QDesignerGridLayout::Item item = grid->items[ (QWidget*)obj ];
+ attributes += QString(" row=\"") + QString::number(item.row) + "\"";
+ attributes += QString(" column=\"") + QString::number(item.column) + "\"";
+ if ( item.rowspan * item.colspan != 1 ) {
+ attributes += QString(" rowspan=\"") + QString::number(item.rowspan) + "\"";
+ attributes += QString(" colspan=\"") + QString::number(item.colspan) + "\"";
+ }
+ }
+
+ if ( qstrcmp( className, "Spacer" ) == 0 ) {
+ closeTag = makeIndent( indent ) + "</spacer>\n";
+ ts << makeIndent( indent ) << "<spacer" << attributes << ">" << endl;
+ ++indent;
+ } else {
+ closeTag = makeIndent( indent ) + "</widget>\n";
+ if ( qstrcmp( className, "KmdrMainWindow" ) == 0 ) {
+ ts << makeIndent( indent ) << "<widget class=\"QMainWindow\"" << attributes << ">" << endl;
+ } else {
+ ts << makeIndent( indent ) << "<widget class=\"" << className << "\"" << attributes << ">" << endl;
+ }
+ ++indent;
+ }
+ if ( WidgetFactory::hasItems( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( obj ) ) ) )
+ saveItems( obj, ts, indent );
+ saveObjectProperties( obj, ts, indent );
+ } else {
+ // test for other objects we created. Nothing so far.
+ return;
+ }
+
+ if ( obj->inherits( "QTabWidget" ) ) {
+ QTabWidget* tw = (QTabWidget*) obj;
+ QObjectList* tmpl = tw->queryList( "QWidgetStack" );
+ QWidgetStack *ws = (QWidgetStack*)tmpl->first();
+ QTabBar *tb = ( (QDesignerTabWidget*)obj )->tabBar();
+ for ( int i = 0; i < tb->count(); ++i ) {
+ QTab *t = tb->tabAt( i );
+ if ( !t )
+ continue;
+ QWidget *w = ws->widget( t->identifier() );
+ if ( !w )
+ continue;
+ if ( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( w ) ) == -1 )
+ continue; // we don't know this widget
+ ts << makeIndent( indent ) << "<widget class=\"QWidget\">" << endl;
+ ++indent;
+ ts << makeIndent( indent ) << "<property name=\"name\">" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<cstring>" << entitize( w->name() ) << "</cstring>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</property>" << endl;
+
+ ts << makeIndent( indent ) << "<attribute name=\"title\">" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<string>" << entitize( t->text() ) << "</string>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</attribute>" << endl;
+ saveChildrenOf( w, ts, indent );
+ --indent;
+ ts << makeIndent( indent ) << "</widget>" << endl;
+ }
+ delete tmpl;
+ } else
+ if ( ::qt_cast<QToolBox*>(obj) ) {
+ QToolBox* tb = (QToolBox*)obj;
+ for ( int i = 0; i < tb->count(); ++i ) {
+ QWidget *w = tb->item( i );
+ if ( !w )
+ continue;
+ if ( WidgetDatabase::idFromClassName(WidgetFactory::classNameOf(w)) == -1 )
+ continue; // we don't know this widget
+ ts << makeIndent( indent ) << "<widget class=\"QWidget\">" << endl;
+ ++indent;
+ ts << makeIndent( indent ) << "<property name=\"name\">" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<cstring>" << entitize( w->name() ) << "</cstring>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</property>" << endl;
+ ts << makeIndent( indent ) << "<property name=\"backgroundMode\">" << endl;
+ indent++;
+ saveEnumProperty( w, "backgroundMode", QVariant::Invalid, ts, indent );
+ indent--;
+ ts << makeIndent( indent ) << "</property>" << endl;
+ ts << makeIndent( indent ) << "<attribute name=\"label\">" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<string>" << entitize( tb->itemLabel( tb->indexOf(w) ) ) << "</string>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</attribute>" << endl;
+ saveChildrenOf( w, ts, indent );
+ --indent;
+ ts << makeIndent( indent ) << "</widget>" << endl;
+ }
+ }
+ else if ( obj->inherits( "QWizard" ) ) {
+ QWizard* wiz = (QWizard*)obj; for ( int i = 0; i < wiz->pageCount(); ++i ) {
+ QWidget *w = wiz->page( i );
+ if ( !w )
+ continue;
+ if ( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( w ) ) == -1 )
+ continue; // we don't know this widget
+ ts << makeIndent( indent ) << "<widget class=\"QWidget\">" << endl;
+ ++indent;
+ ts << makeIndent( indent ) << "<property name=\"name\">" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<cstring>" << entitize( w->name() ) << "</cstring>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</property>" << endl;
+
+ ts << makeIndent( indent ) << "<attribute name=\"title\">" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<string>" << entitize( wiz->title( w ) ) << "</string>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</attribute>" << endl;
+ saveChildrenOf( w, ts, indent );
+ --indent;
+ ts << makeIndent( indent ) << "</widget>" << endl;
+ }
+ } else if ( obj->inherits( "QMainWindow" ) ) {
+ saveChildrenOf( ( (QMainWindow*)obj )->centralWidget(), ts, indent );
+ } else {
+ saveChildrenOf( obj, ts, indent );
+ }
+
+ indent--;
+ ts << closeTag;
+}
+
+void Resource::saveItems( QObject *obj, QTextStream &ts, int indent )
+{
+ if ( obj->inherits( "QListBox" ) || obj->inherits( "QComboBox" ) ) {
+ QListBox *lb = 0;
+ if ( obj->inherits( "QListBox" ) )
+ lb = (QListBox*)obj;
+ else
+ lb = ( (QComboBox*)obj )->listBox();
+
+ QListBoxItem *i = lb->firstItem();
+ for ( ; i; i = i->next() ) {
+ ts << makeIndent( indent ) << "<item>" << endl;
+ indent++;
+ QStringList text;
+ text << i->text();
+ QPtrList<QPixmap> pixmaps;
+ if ( i->pixmap() )
+ pixmaps.append( i->pixmap() );
+ saveItem( text, pixmaps, ts, indent );
+ indent--;
+ ts << makeIndent( indent ) << "</item>" << endl;
+ }
+ } else if ( obj->inherits( "QIconView" ) ) {
+ QIconView *iv = (QIconView*)obj;
+
+ QIconViewItem *i = iv->firstItem();
+ for ( ; i; i = i->nextItem() ) {
+ ts << makeIndent( indent ) << "<item>" << endl;
+ indent++;
+ QStringList text;
+ text << i->text();
+ QPtrList<QPixmap> pixmaps;
+ if ( i->pixmap() )
+ pixmaps.append( i->pixmap() );
+ saveItem( text, pixmaps, ts, indent );
+ indent--;
+ ts << makeIndent( indent ) << "</item>" << endl;
+ }
+ } else if ( obj->inherits( "QListView" ) ) {
+ QListView *lv = (QListView*)obj;
+ int i;
+ for ( i = 0; i < lv->header()->count(); ++i ) {
+ ts << makeIndent( indent ) << "<column>" << endl;
+ indent++;
+ QStringList l;
+ l << lv->header()->label( i );
+ QPtrList<QPixmap> pix;
+ pix.setAutoDelete( true );
+ if ( lv->header()->iconSet( i ) )
+ pix.append( new QPixmap( lv->header()->iconSet( i )->pixmap() ) );
+ saveItem( l, pix, ts, indent );
+ ts << makeIndent( indent ) << "<property name=\"clickable\">" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<bool>" << mkBool( lv->header()->isClickEnabled( i ) )<< "</bool>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</property>" << endl;
+ ts << makeIndent( indent ) << "<property name=\"resizeable\">" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<bool>" << mkBool( lv->header()->isResizeEnabled( i ) ) << "</bool>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</property>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</column>" << endl;
+ }
+ saveItem( lv->firstChild(), ts, indent - 1 );
+ }
+#ifndef QT_NO_TABLE
+ else if ( obj->inherits( "QTable" ) ) {
+ QTable *table = (QTable*)obj;
+ int i;
+ QMap<QString, QString> columnFields = MetaDataBase::columnFields( table );
+ bool isDataTable = table->inherits( "QDataTable" );
+ for ( i = 0; i < table->horizontalHeader()->count(); ++i ) {
+ if ( !table->horizontalHeader()->label( i ).isNull() &&
+ table->horizontalHeader()->label( i ).toInt() != i + 1 ||
+ table->horizontalHeader()->iconSet( i ) ||
+ isDataTable ) {
+ ts << makeIndent( indent ) << "<column>" << endl;
+ indent++;
+ QStringList l;
+ l << table->horizontalHeader()->label( i );
+ QPtrList<QPixmap> pix;
+ pix.setAutoDelete( true );
+ if ( table->horizontalHeader()->iconSet( i ) )
+ pix.append( new QPixmap( table->horizontalHeader()->iconSet( i )->pixmap() ) );
+ saveItem( l, pix, ts, indent );
+ if ( table->inherits( "QDataTable" ) && !columnFields.isEmpty() ) {
+ ts << makeIndent( indent ) << "<property name=\"field\">" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<string>" << entitize( *columnFields.find( l[ 0 ] ) ) << "</string>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</property>" << endl;
+ }
+ indent--;
+ ts << makeIndent( indent ) << "</column>" << endl;
+ }
+ }
+ for ( i = 0; i < table->verticalHeader()->count(); ++i ) {
+ if ( !table->verticalHeader()->label( i ).isNull() &&
+ table->verticalHeader()->label( i ).toInt() != i + 1 ||
+ table->verticalHeader()->iconSet( i ) ) {
+ ts << makeIndent( indent ) << "<row>" << endl;
+ indent++;
+ QStringList l;
+ l << table->verticalHeader()->label( i );
+ QPtrList<QPixmap> pix;
+ pix.setAutoDelete( true );
+ if ( table->verticalHeader()->iconSet( i ) )
+ pix.append( new QPixmap( table->verticalHeader()->iconSet( i )->pixmap() ) );
+ saveItem( l, pix, ts, indent );
+ indent--;
+ ts << makeIndent( indent ) << "</row>" << endl;
+ }
+ }
+ }
+#endif
+}
+
+void Resource::saveItem( QListViewItem *i, QTextStream &ts, int indent )
+{
+ QListView *lv = i->listView();
+ while ( i ) {
+ ts << makeIndent( indent ) << "<item>" << endl;
+ indent++;
+
+ QPtrList<QPixmap> pixmaps;
+ QStringList textes;
+ for ( int c = 0; c < lv->columns(); ++c ) {
+ pixmaps.append( i->pixmap( c ) );
+ textes << i->text( c );
+ }
+ saveItem( textes, pixmaps, ts, indent );
+
+ if ( i->firstChild() )
+ saveItem( i->firstChild(), ts, indent );
+
+ indent--;
+ ts << makeIndent( indent ) << "</item>" << endl;
+ i = i->nextSibling();
+ }
+}
+
+void Resource::savePixmap( const QPixmap &p, QTextStream &ts, int indent, const QString &tagname )
+{
+ if ( p.isNull() ) {
+ ts << makeIndent( indent ) << "<" + tagname + "></" + tagname + ">" << endl;
+ return;
+ }
+
+ if ( formwindow && formwindow->savePixmapInline() )
+ ts << makeIndent( indent ) << "<" + tagname + ">" << saveInCollection( p ) << "</" + tagname + ">" << endl;
+#ifndef KOMMANDER
+ else if ( formwindow && formwindow->savePixmapInProject() )
+ ts << makeIndent( indent ) << "<" + tagname + ">" << MetaDataBase::pixmapKey( formwindow, p.serialNumber() )
+ << "</" + tagname + ">" << endl;
+#endif
+ else
+ ts << makeIndent( indent ) << "<" + tagname + ">" << MetaDataBase::pixmapArgument( formwindow, p.serialNumber() )
+ << "</" + tagname + ">" << endl;
+}
+
+QPixmap Resource::loadPixmap( const QDomElement &e, const QString &/*tagname*/ )
+{
+ QString arg = e.firstChild().toText().data();
+
+ if ( formwindow && formwindow->savePixmapInline() ) {
+ QImage img = loadFromCollection( arg );
+ QPixmap pix;
+ pix.convertFromImage( img );
+ MetaDataBase::setPixmapArgument( formwindow, pix.serialNumber(), arg );
+ return pix;
+ }
+#ifndef KOMMANDER
+ else if ( formwindow && formwindow->savePixmapInProject() ) {
+ QPixmap pix;
+ if ( mainwindow && mainwindow->currProject() )
+ pix = mainwindow->currProject()->pixmapCollection()->pixmap( arg );
+ }
+#endif
+ else
+ {
+ QPixmap pix;
+ pix = PixmapChooser::loadPixmap( "image.xpm" );
+ MetaDataBase::setPixmapKey( formwindow, pix.serialNumber(), arg );
+ return pix;
+ }
+ QPixmap pix = PixmapChooser::loadPixmap( "image.xpm" );
+ MetaDataBase::setPixmapArgument( formwindow, pix.serialNumber(), arg );
+ return pix;
+}
+
+void Resource::saveItem( const QStringList &text, const QPtrList<QPixmap> &pixmaps, QTextStream &ts, int indent )
+{
+ QStringList::ConstIterator it = text.begin();
+ for ( ; it != text.end(); ++it ) {
+ ts << makeIndent( indent ) << "<property name=\"text\">" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<string>" << entitize( *it ) << "</string>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</property>" << endl;
+ }
+
+ for ( int i = 0; i < (int)pixmaps.count(); ++i ) {
+ QPixmap *p = ( (QPtrList<QPixmap>)pixmaps ).at( i );
+ ts << makeIndent( indent ) << "<property name=\"pixmap\">" << endl;
+ indent++;
+ if ( p )
+ savePixmap( *p, ts, indent );
+ else
+ savePixmap( QPixmap(), ts, indent );
+ indent--;
+ ts << makeIndent( indent ) << "</property>" << endl;
+ }
+}
+
+void Resource::saveChildrenOf( QObject* obj, QTextStream &ts, int indent )
+{
+ const QObjectList *l = obj->children();
+ if ( !l )
+ return; // no children to save
+
+ QString closeTag;
+ // if the widget has a layout we pretend that all widget's childs are childs of the layout - makes the structure nicer
+ QLayout *layout = 0;
+ QDesignerGridLayout* grid = 0;
+ if ( !obj->inherits( "QSplitter" ) &&
+ WidgetDatabase::isContainer( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( obj ) ) ) &&
+ obj->isWidgetType() &&
+ WidgetFactory::layoutType( (QWidget*)obj, layout ) != WidgetFactory::NoLayout ) {
+ WidgetFactory::LayoutType lay = WidgetFactory::layoutType( (QWidget*)obj, layout );
+ switch ( lay ) {
+ case WidgetFactory::HBox:
+ closeTag = makeIndent( indent ) + "</hbox>";
+ ts << makeIndent( indent ) << "<hbox>" << endl;
+ ++indent;
+ break;
+ case WidgetFactory::VBox:
+ closeTag = makeIndent( indent ) + "</vbox>";
+ ts << makeIndent( indent ) << "<vbox>" << endl;
+ ++indent;
+ break;
+ case WidgetFactory::Grid:
+ closeTag = makeIndent( indent ) + "</grid>";
+ ts << makeIndent( indent ) << "<grid>" << endl;
+ ++indent;
+ grid = (QDesignerGridLayout*) layout;
+ break;
+ default:
+ break;
+ }
+
+ // save properties of layout
+ if ( lay != WidgetFactory::NoLayout )
+ saveObjectProperties( layout, ts, indent );
+
+ }
+
+ for ( QPtrListIterator<QObject> it ( *l ); it.current(); ++it )
+ saveObject( it.current(), grid, ts, indent );
+ if ( !closeTag.isEmpty() ) {
+ indent--;
+ ts << closeTag << endl;
+ }
+}
+
+void Resource::saveObjectProperties( QObject *w, QTextStream &ts, int indent )
+{
+ QStringList saved;
+ QStringList changed;
+ changed = MetaDataBase::changedProperties( w );
+ if ( w->isWidgetType() ) {
+ if ( w->inherits( "Spacer" ) ) {
+ if ( !changed.contains( "sizeHint" ) )
+ changed << "sizeHint";
+ if ( !changed.contains( "geometry" ) )
+ changed << "geometry";
+ }
+ } else if ( w->inherits( "QLayout" ) ) { // #### should be cleaner (RS)
+ changed << "margin" << "spacing";
+ }
+
+ if ( w == formwindow->mainContainer() ) {
+ if ( changed.findIndex( "geometry" ) == -1 )
+ changed << "geometry";
+ if ( changed.findIndex( "caption" ) == -1 )
+ changed << "caption";
+ }
+
+ if ( changed.isEmpty() )
+ return;
+
+ bool inLayout = w != formwindow->mainContainer() && !copying && w->isWidgetType() && ( (QWidget*)w )->parentWidget() &&
+ WidgetFactory::layoutType( ( (QWidget*)w )->parentWidget() ) != WidgetFactory::NoLayout;
+
+ QStrList lst = w->metaObject()->propertyNames( !w->inherits( "Spacer" ) );
+ for ( QPtrListIterator<char> it( lst ); it.current(); ++it ) {
+ if ( changed.find( QString::fromLatin1( it.current() ) ) == changed.end() )
+ continue;
+ if ( saved.find( QString::fromLatin1( it.current() ) ) != saved.end() )
+ continue;
+ saved << QString::fromLatin1( it.current() );
+ const QMetaProperty* p = w->metaObject()->
+ property( w->metaObject()->findProperty( it.current(), true ), true );
+ if ( !p || !p->stored( w ) || ( inLayout && qstrcmp( p->name(), "geometry" ) == 0 ) )
+ continue;
+ if ( w->inherits( "QLabel" ) && qstrcmp( p->name(), "pixmap" ) == 0 &&
+ ( !( (QLabel*)w )->pixmap() || ( (QLabel*)w )->pixmap()->isNull() ) )
+ continue;
+ if ( w->inherits( "QDesignerMenuBar" ) &&
+ ( qstrcmp( p->name(), "itemName" ) == 0 || qstrcmp( p->name(), "itemNumber" ) == 0 ||
+ qstrcmp( p->name(), "itemText" ) == 0 ) )
+ continue;
+ if ( qstrcmp( p->name(), "name" ) == 0 )
+ knownNames << w->property( "name" ).toString();
+ ts << makeIndent( indent ) << "<property";
+ ts << " name=\"" << it.current() << "\"";
+ if ( !p->stdSet() )
+ ts << " stdset=\"0\"";
+ ts << ">" << endl;
+ indent++;
+ if ( p->isSetType() ) {
+ saveSetProperty( w, it.current(), QVariant::nameToType( p->type() ), ts, indent );
+ } else if ( p->isEnumType() ) {
+ saveEnumProperty( w, it.current(), QVariant::nameToType( p->type() ), ts, indent );
+ } else {
+ saveProperty( w, it.current(), w->property( p->name() ), QVariant::nameToType( p->type() ), ts, indent );
+ }
+ indent--;
+ ts << makeIndent( indent ) << "</property>" << endl;
+ }
+
+ if ( w->isWidgetType() && MetaDataBase::fakeProperties( w ) ) {
+ QMap<QString, QVariant>* fakeProperties = MetaDataBase::fakeProperties( w );
+ for ( QMap<QString, QVariant>::Iterator fake = fakeProperties->begin();
+ fake != fakeProperties->end(); ++fake ) {
+ if ( MetaDataBase::isPropertyChanged( w, fake.key() ) ) {
+ if ( w->inherits( "CustomWidget" ) ) {
+ MetaDataBase::CustomWidget *cw = ( (CustomWidget*)w )->customWidget();
+ if ( cw && !cw->hasProperty( fake.key().latin1() ) && fake.key() != "toolTip" && fake.key() != "whatsThis" )
+ continue;
+ }
+
+ ts << makeIndent( indent ) << "<property name=\"" << fake.key() << "\" stdset=\"0\">" << endl;
+ indent++;
+ saveProperty( w, fake.key(), *fake, (*fake).type(), ts, indent );
+ indent--;
+ ts << makeIndent( indent ) << "</property>" << endl;
+ }
+ }
+ }
+}
+
+void Resource::saveSetProperty( QObject *w, const QString &name, QVariant::Type, QTextStream &ts, int indent )
+{
+ const QMetaProperty *p = w->metaObject()->property( w->metaObject()->findProperty( name, true ), true );
+ QStrList l( p->valueToKeys( w->property( name ).toInt() ) );
+ QString v;
+ for ( uint i = 0; i < l.count(); ++i ) {
+ v += l.at( i );
+ if ( i < l.count() - 1 )
+ v += "|";
+ }
+ ts << makeIndent( indent ) << "<set>" << v << "</set>" << endl;
+}
+
+void Resource::saveEnumProperty( QObject *w, const QString &name, QVariant::Type, QTextStream &ts, int indent )
+{
+ const QMetaProperty *p = w->metaObject()->property( w->metaObject()->findProperty( name, true ), true );
+ ts << makeIndent( indent ) << "<enum>" << p->valueToKey( w->property( name ).toInt() ) << "</enum>" << endl;
+}
+
+void Resource::saveProperty( QObject *w, const QString &name, const QVariant &value, QVariant::Type t, QTextStream &ts, int indent )
+{
+ if ( name == "hAlign" || name =="vAlign" || name == "wordwrap" || name == "layoutMargin" || name =="layoutSpacing" )
+ return;
+ int num, unum;
+ double dob;
+ QString comment;
+ if ( w && formwindow->widgets()->find( (QWidget*)w ) )
+ comment = MetaDataBase::propertyComment( w, name );
+ switch ( t ) {
+ case QVariant::String:
+ ts << makeIndent( indent ) << "<string>" << entitize( value.toString() ) << "</string>" << endl;
+ if ( !comment.isEmpty() )
+ ts << makeIndent( indent ) << "<comment>" << entitize( comment ) << "</comment>" << endl;
+ break;
+ case QVariant::CString:
+ ts << makeIndent( indent ) << "<cstring>" << entitize( value.toCString() ).latin1() << "</cstring>" << endl;
+ break;
+ case QVariant::Bool:
+ ts << makeIndent( indent ) << "<bool>" << mkBool( value.toBool() ) << "</bool>" << endl;
+ break;
+ case QVariant::Int:
+ num = value.toInt();
+ if ( w && w->inherits( "QLayout" ) ) {
+ if ( name == "spacing" )
+ num = MetaDataBase::spacing( WidgetFactory::containerOfWidget( WidgetFactory::layoutParent( (QLayout*)w ) ) );
+ else if ( name == "margin" )
+ num = MetaDataBase::margin( WidgetFactory::containerOfWidget( WidgetFactory::layoutParent( (QLayout*)w ) ) );
+ }
+ ts << makeIndent( indent ) << "<number>" << QString::number( num ) << "</number>" << endl;
+ break;
+ case QVariant::Double:
+ dob = value.toDouble();
+ ts << makeIndent( indent ) << "<number>" << QString::number( dob ) << "</number>" << endl;
+ break;
+ case QVariant::KeySequence:
+ num = value.toInt();
+ ts << makeIndent( indent ) << "<number>" << QString::number( num ) << "</number>" << endl;
+ break;
+ case QVariant::UInt:
+ unum = value.toUInt();
+ if ( w && w->inherits( "QLayout" ) ) {
+ if ( name == "spacing" )
+ num = MetaDataBase::spacing( WidgetFactory::layoutParent( (QLayout*)w ) );
+ else if ( name == "margin" )
+ num = MetaDataBase::margin( WidgetFactory::layoutParent( (QLayout*)w ) );
+ }
+ ts << makeIndent( indent ) << "<number>" << QString::number( unum ) << "</number>" << endl;
+ break;
+ case QVariant::Rect: {
+ QVariant v( value );
+ ts << makeIndent( indent ) << "<rect>" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<x>" << QString::number( v.toRect().x() ) << "</x>" << endl;
+ ts << makeIndent( indent ) << "<y>" << QString::number( v.toRect().y() ) << "</y>" << endl;
+ ts << makeIndent( indent ) << "<width>" << QString::number( v.toRect().width() ) << "</width>" << endl;
+ ts << makeIndent( indent ) << "<height>" << QString::number( v.toRect().height() ) << "</height>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</rect>" << endl;
+ } break;
+ case QVariant::Point: {
+ QVariant v( value );
+ ts << makeIndent( indent ) << "<point>" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<x>" << QString::number( v.toPoint().x() ) << "</x>" << endl;
+ ts << makeIndent( indent ) << "<y>" << QString::number( v.toPoint().y() ) << "</y>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</point>" << endl;
+ } break;
+ case QVariant::Size: {
+ QVariant v( value );
+ ts << makeIndent( indent ) << "<size>" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<width>" << QString::number( v.toSize().width() ) << "</width>" << endl;
+ ts << makeIndent( indent ) << "<height>" << QString::number( v.toSize().height() ) << "</height>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</size>" << endl;
+ } break;
+ case QVariant::Color: {
+ QVariant v( value );
+ ts << makeIndent( indent ) << "<color>" << endl;
+ indent++;
+ saveColor( ts, indent, v.toColor() );
+ indent--;
+ ts << makeIndent( indent ) << "</color>" << endl;
+ } break;
+ case QVariant::Font: {
+ QVariant v( value );
+ ts << makeIndent( indent ) << "<font>" << endl;
+ QFont f( qApp->font() );
+ if ( w && w->isWidgetType() && ((QWidget*)w)->parentWidget() )
+ f = ((QWidget*)w)->parentWidget()->font();
+ QFont f2( v.toFont() );
+ indent++;
+ if ( f.family() != f2.family() )
+ ts << makeIndent( indent ) << "<family>" << f2.family() << "</family>" << endl;
+ if ( f.pointSize() != f2.pointSize() )
+ ts << makeIndent( indent ) << "<pointsize>" << QString::number( f2.pointSize() ) << "</pointsize>" << endl;
+ if ( f.bold() != f2.bold() )
+ ts << makeIndent( indent ) << "<bold>" << QString::number( (int)f2.bold() ) << "</bold>" << endl;
+ if ( f.italic() != f2.italic() )
+ ts << makeIndent( indent ) << "<italic>" << QString::number( (int)f2.italic() ) << "</italic>" << endl;
+ if ( f.underline() != f2.underline() )
+ ts << makeIndent( indent ) << "<underline>" << QString::number( (int)f2.underline() ) << "</underline>" << endl;
+ if ( f.strikeOut() != f2.strikeOut() )
+ ts << makeIndent( indent ) << "<strikeout>" << QString::number( (int)f2.strikeOut() ) << "</strikeout>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</font>" << endl;
+ } break;
+ case QVariant::SizePolicy: {
+ QSizePolicy sp( value.toSizePolicy() );
+ ts << makeIndent( indent ) << "<sizepolicy>" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<hsizetype>" << (int)sp.horData() << "</hsizetype>" << endl;
+ ts << makeIndent( indent ) << "<vsizetype>" << (int)sp.verData() << "</vsizetype>" << endl;
+ ts << makeIndent( indent ) << "<horstretch>" << (int)sp.horStretch() << "</horstretch>" << endl;
+ ts << makeIndent( indent ) << "<verstretch>" << (int)sp.verStretch() << "</verstretch>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</sizepolicy>" << endl;
+ break;
+ }
+ case QVariant::Pixmap:
+ savePixmap( value.toPixmap(), ts, indent );
+ break;
+ case QVariant::IconSet:
+ savePixmap( value.toIconSet().pixmap(), ts, indent, "iconset" );
+ break;
+ case QVariant::Image:
+ ts << makeIndent( indent ) << "<image>" << saveInCollection( value.toImage() ) << "</image>" << endl;
+ break;
+ case QVariant::Palette: {
+ QPalette p( value.toPalette() );
+ ts << makeIndent( indent ) << "<palette>" << endl;
+ indent++;
+
+ ts << makeIndent( indent ) << "<active>" << endl;
+ indent++;
+ saveColorGroup( ts, indent, p.active() );
+ indent--;
+ ts << makeIndent( indent ) << "</active>" << endl;
+
+ ts << makeIndent( indent ) << "<disabled>" << endl;
+ indent++;
+ saveColorGroup( ts, indent, p.disabled() );
+ indent--;
+ ts << makeIndent( indent ) << "</disabled>" << endl;
+
+ ts << makeIndent( indent ) << "<inactive>" << endl;
+ indent++;
+ saveColorGroup( ts, indent, p.inactive() );
+ indent--;
+ ts << makeIndent( indent ) << "</inactive>" << endl;
+
+ indent--;
+ ts << makeIndent( indent ) << "</palette>" << endl;
+ } break;
+ case QVariant::Cursor:
+ ts << makeIndent( indent ) << "<cursor>" << value.toCursor().shape() << "</cursor>" << endl;
+ break;
+ case QVariant::StringList: {
+ QStringList lst = value.toStringList();
+ uint i = 0;
+ ts << makeIndent( indent ) << "<stringlist>" << endl;
+ indent++;
+ if ( !lst.isEmpty() ) {
+ for ( i = 0; i < lst.count(); ++i )
+ ts << makeIndent( indent ) << "<string>" << entitize( lst[ i ] ) << "</string>" << endl;
+ }
+ indent--;
+ ts << makeIndent( indent ) << "</stringlist>" << endl;
+ } break;
+ case QVariant::Date: {
+ QDate d = value.toDate();
+ ts << makeIndent( indent ) << "<date>" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<year>" << d.year() << "</year>" << endl;
+ ts << makeIndent( indent ) << "<month>" << d.month() << "</month>" << endl;
+ ts << makeIndent( indent ) << "<day>" << d.day() << "</day>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</date>" << endl;
+ break;
+ }
+ case QVariant::Time: {
+ QTime t = value.toTime();
+ ts << makeIndent( indent ) << "<time>" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<hour>" << t.hour() << "</hour>" << endl;
+ ts << makeIndent( indent ) << "<minute>" << t.minute() << "</minute>" << endl;
+ ts << makeIndent( indent ) << "<second>" << t.second() << "</second>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</time>" << endl;
+ break;
+ }
+ case QVariant::DateTime: {
+ QDateTime dt = value.toDateTime();
+ ts << makeIndent( indent ) << "<datetime>" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<year>" << dt.date().year() << "</year>" << endl;
+ ts << makeIndent( indent ) << "<month>" << dt.date().month() << "</month>" << endl;
+ ts << makeIndent( indent ) << "<day>" << dt.date().day() << "</day>" << endl;
+ ts << makeIndent( indent ) << "<hour>" << dt.time().hour() << "</hour>" << endl;
+ ts << makeIndent( indent ) << "<minute>" << dt.time().minute() << "</minute>" << endl;
+ ts << makeIndent( indent ) << "<second>" << dt.time().second() << "</second>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</datetime>" << endl;
+ break;
+ }
+ default:
+ qWarning( "saving the property %s of type %d not supported yet", name.latin1(), (int)t );
+ }
+}
+
+void Resource::saveColorGroup( QTextStream &ts, int indent, const QColorGroup &cg )
+{
+ for( int r = 0 ; r < QColorGroup::NColorRoles ; r++ ) {
+ ts << makeIndent( indent ) << "<color>" << endl;
+ indent++;
+ saveColor( ts, indent, cg.color( (QColorGroup::ColorRole)r ) );
+ indent--;
+ ts << makeIndent( indent ) << "</color>" << endl;
+ QPixmap* pm = cg.brush( (QColorGroup::ColorRole)r ).pixmap();
+ if ( pm && !pm->isNull() )
+ savePixmap( *pm, ts, indent );
+ }
+}
+
+void Resource::saveColor( QTextStream &ts, int indent, const QColor &c )
+{
+ ts << makeIndent( indent ) << "<red>" << QString::number( c.red() ) << "</red>" << endl;
+ ts << makeIndent( indent ) << "<green>" << QString::number( c.green() ) << "</green>" << endl;
+ ts << makeIndent( indent ) << "<blue>" << QString::number( c.blue() ) << "</blue>" << endl;
+}
+
+QObject *Resource::createObject( const QDomElement &e, QWidget *parent, QLayout* layout )
+{
+ lastItem = 0;
+ QDomElement n = e.firstChild().toElement();
+ QWidget *w = 0; // the widget that got created
+ QObject *obj = 0; // gets the properties
+
+ int row = e.attribute( "row" ).toInt();
+ int col = e.attribute( "column" ).toInt();
+ int rowspan = e.attribute( "rowspan" ).toInt();
+ int colspan = e.attribute( "colspan" ).toInt();
+ if ( rowspan < 1 )
+ rowspan = 1;
+ if ( colspan < 1 )
+ colspan = 1;
+
+ QString className = e.attribute( "class", "QWidget" );
+
+ if ( !className.isNull() ) {
+ obj = WidgetFactory::create( WidgetDatabase::idFromClassName( className ), parent, 0, false );
+ if ( !obj )
+ return 0;
+ if ( !mainContainerSet ) {
+ if ( formwindow )
+ formwindow->setMainContainer( (QWidget*)obj );
+ mainContainerSet = true;
+ }
+ w = (QWidget*)obj;
+ if ( w->inherits( "QMainWindow" ) )
+ w = ( (QMainWindow*)w )->centralWidget();
+ if ( layout ) {
+ switch ( WidgetFactory::layoutType( layout ) ) {
+ case WidgetFactory::HBox:
+ ( (QHBoxLayout*)layout )->addWidget( w );
+ break;
+ case WidgetFactory::VBox:
+ ( (QVBoxLayout*)layout )->addWidget( w );
+ break;
+ case WidgetFactory::Grid:
+ ( (QDesignerGridLayout*)layout )->addMultiCellWidget( w, row, row + rowspan - 1,
+ col, col + colspan - 1 );
+ break;
+ default:
+ break;
+ }
+ }
+
+ if ( !toplevel )
+ toplevel = w;
+ layout = 0;
+
+ if ( w && formwindow ) {
+ if ( !parent || ( !parent->inherits( "QToolBox" ) && !parent->inherits( "QTabWidget" ) && !parent->inherits( "QWizard" ) ) )
+ formwindow->insertWidget( w, pasting );
+ else if ( parent && ( parent->inherits( "QToolBox" ) || parent->inherits( "QTabWidget" ) || parent->inherits( "QWizard" ) ) )
+ MetaDataBase::addEntry( w );
+ if (w->inherits("Dialog"))
+ dynamic_cast<Dialog*>(w)->setUseInternalParser(false);
+ }
+ }
+
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "spacer" ) {
+ createSpacer( n, w, layout, Qt::Horizontal );
+ } else if ( n.tagName() == "widget" ) {
+ createObject( n, w, layout );
+ } else if ( n.tagName() == "hbox" ) {
+ layout = WidgetFactory::createLayout( w, layout, WidgetFactory::HBox );
+ obj = layout;
+ n = n.firstChild().toElement();
+ continue;
+ } else if ( n.tagName() == "grid" ) {
+ layout = WidgetFactory::createLayout( w, layout, WidgetFactory::Grid );
+ obj = layout;
+ n = n.firstChild().toElement();
+ continue;
+ } else if ( n.tagName() == "vbox" ) {
+ layout = WidgetFactory::createLayout( w, layout, WidgetFactory::VBox );
+ obj = layout;
+ n = n.firstChild().toElement();
+ continue;
+ } else if ( n.tagName() == "property" && obj ) {
+ setObjectProperty( obj, n.attribute( "name" ), n.firstChild().toElement() );
+ } else if ( n.tagName() == "attribute" && w ) {
+ QString attrib = n.attribute( "name" );
+ QVariant v = DomTool::elementToVariant( n.firstChild().toElement(), QVariant() );
+ if ( parent->inherits( "QTabWidget" ) ) {
+ if ( attrib == "title" )
+ ( (QTabWidget*)parent )->insertTab( w, v.toString() );
+ } else
+ if ( parent->inherits( "QToolBox" ) ) {
+ if ( attrib == "label" )
+ ( (QToolBox*)parent )->addItem( w, v.toString() );
+ } else if ( parent->inherits( "QWizard" ) ) {
+ if ( attrib == "title" )
+ ( (QWizard*)parent )->addPage( w, v.toString() );
+ }
+ } else if ( n.tagName() == "item" ) {
+ createItem( n, w );
+ } else if ( n.tagName() == "column" || n.tagName() =="row" ) {
+ createColumn( n, w );
+ } else if ( n.tagName() == "event" ) {
+ // qDebug("Resource : Tag == event");
+#ifndef KOMMANDER
+ MetaDataBase::setEventFunctions( obj, formwindow, MainWindow::self->currProject()->language(),
+ n.attribute( "name" ), QStringList::split( ',', n.attribute( "functions" ) ), false );
+#endif
+ }
+
+ n = n.nextSibling().toElement();
+ }
+
+ return w;
+}
+
+void Resource::createColumn( const QDomElement &e, QWidget *widget )
+{
+ if ( !widget )
+ return;
+
+ if ( widget->inherits( "QListView" ) && e.tagName() == "column" ) {
+ QListView *lv = (QListView*)widget;
+ QDomElement n = e.firstChild().toElement();
+ QPixmap pix;
+ bool hasPixmap = false;
+ QString txt;
+ bool clickable = true, resizeable = true;
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "property" ) {
+ QString attrib = n.attribute( "name" );
+ QVariant v = DomTool::elementToVariant( n.firstChild().toElement(), QVariant() );
+ if ( attrib == "text" )
+ txt = v.toString();
+ else if ( attrib == "pixmap" ) {
+ pix = loadPixmap( n.firstChild().toElement().toElement() );
+ hasPixmap = !pix.isNull();
+ } else if ( attrib == "clickable" )
+ clickable = v.toBool();
+ else if ( attrib == "resizeable" )
+ resizeable = v.toBool();
+ }
+ n = n.nextSibling().toElement();
+ }
+ lv->addColumn( txt );
+ int i = lv->header()->count() - 1;
+ if ( hasPixmap ) {
+ lv->header()->setLabel( i, pix, txt );
+ }
+ if ( !clickable )
+ lv->header()->setClickEnabled( clickable, i );
+ if ( !resizeable )
+ lv->header()->setResizeEnabled( resizeable, i );
+ }
+#ifndef QT_NO_TABLE
+ else if ( widget->inherits( "QTable" ) ) {
+ QTable *table = (QTable*)widget;
+ bool isRow;
+ if ( ( isRow = e.tagName() == "row" ) )
+ table->setNumRows( table->numRows() + 1 );
+ else
+ table->setNumCols( table->numCols() + 1 );
+
+ QDomElement n = e.firstChild().toElement();
+ QPixmap pix;
+ bool hasPixmap = false;
+ QString txt;
+ QString field;
+ QMap<QString, QString> fieldMap = MetaDataBase::columnFields( table );
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "property" ) {
+ QString attrib = n.attribute( "name" );
+ QVariant v = DomTool::elementToVariant( n.firstChild().toElement(), QVariant() );
+ if ( attrib == "text" )
+ txt = v.toString();
+ else if ( attrib == "pixmap" ) {
+ hasPixmap = !n.firstChild().firstChild().toText().data().isEmpty();
+ if ( hasPixmap )
+ pix = loadPixmap( n.firstChild().toElement() );
+ } else if ( attrib == "field" )
+ field = v.toString();
+ }
+ n = n.nextSibling().toElement();
+ }
+
+ int i = isRow ? table->numRows() - 1 : table->numCols() - 1;
+ QHeader *h = !isRow ? table->horizontalHeader() : table->verticalHeader();
+ if ( hasPixmap )
+ h->setLabel( i, pix, txt );
+ else
+ h->setLabel( i, txt );
+ if ( !isRow && !field.isEmpty() )
+ fieldMap.insert( txt, field );
+ MetaDataBase::setColumnFields( table, fieldMap );
+ }
+#endif
+}
+
+void Resource::loadItem( const QDomElement &e, QPixmap &pix, QString &txt, bool &hasPixmap )
+{
+ QDomElement n = e;
+ hasPixmap = false;
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "property" ) {
+ QString attrib = n.attribute( "name" );
+ QVariant v = DomTool::elementToVariant( n.firstChild().toElement(), QVariant() );
+ if ( attrib == "text" )
+ txt = v.toString();
+ else if ( attrib == "pixmap" ) {
+ pix = loadPixmap( n.firstChild().toElement() );
+ hasPixmap = !pix.isNull();
+ }
+ }
+ n = n.nextSibling().toElement();
+ }
+}
+
+void Resource::createItem( const QDomElement &e, QWidget *widget, QListViewItem *i )
+{
+ if ( !widget || !WidgetFactory::hasItems( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( widget ) ) ) )
+ return;
+
+ if ( widget->inherits( "QListBox" ) || widget->inherits( "QComboBox" ) ) {
+ QDomElement n = e.firstChild().toElement();
+ QPixmap pix;
+ bool hasPixmap = false;
+ QString txt;
+ loadItem( n, pix, txt, hasPixmap );
+ QListBox *lb = 0;
+ if ( widget->inherits( "QListBox" ) )
+ lb = (QListBox*)widget;
+ else
+ lb = ( (QComboBox*)widget)->listBox();
+ if ( hasPixmap ) {
+ new QListBoxPixmap( lb, pix, txt );
+ } else {
+ new QListBoxText( lb, txt );
+ }
+ } else if ( widget->inherits( "QIconView" ) ) {
+ QDomElement n = e.firstChild().toElement();
+ QPixmap pix;
+ bool hasPixmap = false;
+ QString txt;
+ loadItem( n, pix, txt, hasPixmap );
+
+ QIconView *iv = (QIconView*)widget;
+ new QIconViewItem( iv, txt, pix );
+ } else if ( widget->inherits( "QListView" ) ) {
+ QDomElement n = e.firstChild().toElement();
+ QPixmap pix;
+ QValueList<QPixmap> pixmaps;
+ QStringList textes;
+ QListViewItem *item = 0;
+ QListView *lv = (QListView*)widget;
+ if ( i )
+ item = new QListViewItem( i, lastItem );
+ else
+ item = new QListViewItem( lv, lastItem );
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "property" ) {
+ QString attrib = n.attribute( "name" );
+ QVariant v = DomTool::elementToVariant( n.firstChild().toElement(), QVariant() );
+ if ( attrib == "text" )
+ textes << v.toString();
+ else if ( attrib == "pixmap" ) {
+ QString s = v.toString();
+ if ( s.isEmpty() ) {
+ pixmaps << QPixmap();
+ } else {
+ pix = loadPixmap( n.firstChild().toElement() );
+ pixmaps << pix;
+ }
+ }
+
+ } else if ( n.tagName() == "item" ) {
+ item->setOpen( true );
+ createItem( n, widget, item );
+ }
+
+ n = n.nextSibling().toElement();
+ }
+
+ for ( int i = 0; i < lv->columns(); ++i ) {
+ item->setText( i, textes[ i ] );
+ item->setPixmap( i, pixmaps[ i ] );
+ }
+ lastItem = item;
+ }
+}
+
+QWidget *Resource::createSpacer( const QDomElement &e, QWidget *parent, QLayout *layout, Qt::Orientation o )
+{
+ QDomElement n = e.firstChild().toElement();
+ int row = e.attribute( "row" ).toInt();
+ int col = e.attribute( "column" ).toInt();
+ int rowspan = e.attribute( "rowspan" ).toInt();
+ int colspan = e.attribute( "colspan" ).toInt();
+ if ( rowspan < 1 )
+ rowspan = 1;
+ if ( colspan < 1 )
+ colspan = 1;
+
+ Spacer *spacer = (Spacer*) WidgetFactory::create( WidgetDatabase::idFromClassName("Spacer"),
+ parent, "spacer", false);
+ spacer->setOrientation( o );
+ spacer->setInteraciveMode( false );
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "property" )
+ setObjectProperty( spacer, n.attribute( "name" ), n.firstChild().toElement() );
+ n = n.nextSibling().toElement();
+ }
+ spacer->setInteraciveMode( true );
+ if ( formwindow )
+ formwindow->insertWidget( spacer, pasting );
+ if ( layout ) {
+ if ( layout->inherits( "QBoxLayout" ) )
+ ( (QBoxLayout*)layout )->addWidget( spacer, 0, spacer->alignment() );
+ else
+ ( (QDesignerGridLayout*)layout )->addMultiCellWidget( spacer, row, row + rowspan - 1, col, col + colspan - 1,
+ spacer->alignment() );
+ }
+ return spacer;
+}
+
+/*!
+ Attention: this function has to be in sync with Uic::setObjectProperty(). If you change one, change both.
+*/
+void Resource::setObjectProperty( QObject* obj, const QString &prop, const QDomElement &e )
+{
+ const QMetaProperty *p = obj->metaObject()->property( obj->metaObject()->findProperty( prop, true ), true );
+
+ if ( !obj->inherits( "QLayout" ) ) {// no layouts in metadatabase... (RS)
+ if ( obj->inherits( "CustomWidget" ) ) {
+ MetaDataBase::CustomWidget *cw = ( (CustomWidget*)obj )->customWidget();
+ if ( cw && !cw->hasProperty( prop.latin1() ) && !p && prop != "toolTip" && prop != "whatsThis" )
+ return;
+ }
+ MetaDataBase::setPropertyChanged( obj, prop, true );
+ }
+
+ QVariant defVarient;
+ if ( e.tagName() == "font" ) {
+ QFont f( qApp->font() );
+ if ( obj->isWidgetType() && ( (QWidget*)obj )->parentWidget() )
+ f = ( (QWidget*)obj )->parentWidget()->font();
+ defVarient = QVariant( f );
+ }
+
+ QString comment;
+ QVariant v( DomTool::elementToVariant( e, defVarient, comment ) );
+
+ if ( !comment.isEmpty() ) {
+ MetaDataBase::addEntry( obj );
+ MetaDataBase::setPropertyComment( obj, prop, comment );
+ }
+
+ if ( e.tagName() == "pixmap" ) {
+ QPixmap pix = loadPixmap( e );
+ if ( pix.isNull() )
+ return;
+ v = QVariant( pix );
+ } else if ( e.tagName() == "iconset" ) {
+ QPixmap pix = loadPixmap( e, "iconset" );
+ if ( pix.isNull() )
+ return;
+ v = QVariant( QIconSet( pix ) );
+ } else if ( e.tagName() == "image" ) {
+ v = QVariant( loadFromCollection( v.toString() ) );
+ }
+
+ if ( !p ) {
+ MetaDataBase::setFakeProperty( obj, prop, v );
+ if ( obj->isWidgetType() ) {
+ if ( prop == "database" && obj != toplevel ) {
+ QStringList lst = MetaDataBase::fakeProperty( obj, "database" ).toStringList();
+ if ( lst.count() > 2 )
+ dbControls.insert( obj->name(), lst[ 2 ] );
+ else if ( lst.count() == 2 )
+ dbTables.insert( obj->name(), lst );
+ }
+ return;
+ }
+ }
+
+
+ if ( e.tagName() == "palette" ) {
+ QDomElement n = e.firstChild().toElement();
+ QPalette p;
+ while ( !n.isNull() ) {
+ QColorGroup cg;
+ if ( n.tagName() == "active" ) {
+ cg = loadColorGroup( n );
+ p.setActive( cg );
+ } else if ( n.tagName() == "inactive" ) {
+ cg = loadColorGroup( n );
+ p.setInactive( cg );
+ } else if ( n.tagName() == "disabled" ) {
+ cg = loadColorGroup( n );
+ p.setDisabled( cg );
+ }
+ n = n.nextSibling().toElement();
+ }
+ v = QPalette( p );
+ } else if ( e.tagName() == "enum" && p && p->isEnumType() ) {
+ QString key( v.toString() );
+ v = QVariant( p->keyToValue( key ) );
+ } else if ( e.tagName() == "set" && p && p->isSetType() ) {
+ QString keys( v.toString() );
+ QStringList lst = QStringList::split( '|', keys );
+ QStrList l;
+ for ( QStringList::Iterator it = lst.begin(); it != lst.end(); ++it )
+ l.append( *it );
+ v = QVariant( p->keysToValue( l ) );
+ }
+
+ if ( prop == "caption" ) {
+ QCString s1 = v.toCString();
+ QString s2 = v.toString();
+ if ( !s1.isEmpty() )
+ formwindow->setCaption( s1 );
+ else if ( !s2.isEmpty() )
+ formwindow->setCaption( s2 );
+ }
+ if ( prop == "icon" ) {
+ formwindow->setIcon( v.toPixmap() );
+ }
+
+ if ( prop == "geometry" ) {
+ if ( obj == toplevel ) {
+ hadGeometry = true;
+ toplevel->resize( v.toRect().size() );
+ return;
+ } else if ( obj == formwindow->mainContainer() ) {
+ hadGeometry = true;
+ formwindow->resize( v.toRect().size() );
+ return;
+ }
+ }
+
+ if ( obj->inherits( "QLayout" ) ) {
+ if ( prop == "spacing" ) {
+ MetaDataBase::setSpacing( WidgetFactory::containerOfWidget( WidgetFactory::layoutParent( (QLayout*)obj ) ), v.toInt() );
+ return;
+ }
+ if ( prop == "margin" ) {
+ MetaDataBase::setMargin( WidgetFactory::containerOfWidget( WidgetFactory::layoutParent( (QLayout*)obj ) ), v.toInt() );
+ return;
+ }
+ }
+
+ if ( prop == "name" ) {
+ if ( pasting ) {
+ QString s = v.toString();
+ formwindow->unify( (QWidget*)obj, s, true );
+ obj->setName( s );
+ return;
+ } else if ( formwindow && obj == formwindow->mainContainer() ) {
+ formwindow->setName( v.toCString() );
+ }
+ }
+
+ if ( prop == "sizePolicy" ) {
+ QSizePolicy sp = v.toSizePolicy();
+ sp.setHeightForWidth( ( (QWidget*)obj )->sizePolicy().hasHeightForWidth() );
+ }
+
+ obj->setProperty( prop, v );
+}
+
+
+QString Resource::saveInCollection( const QImage &img )
+{
+ QString imgName = "none";
+ QValueList<Image>::Iterator it = images.begin();
+ for ( ; it != images.end(); ++it ) {
+ if ( img == ( *it ).img ) {
+ imgName = ( *it ).name;
+ break;
+ }
+ }
+
+ if ( imgName == "none" ) {
+ Image i;
+ imgName = "image" + QString::number( images.count() );
+ i.name = imgName;
+ i.img = img;
+ images.append( i );
+ }
+ return imgName;
+}
+
+void Resource::saveImageData( const QImage &img, QTextStream &ts, int indent )
+{
+ QByteArray ba;
+ QBuffer buf( ba );
+ buf.open( IO_WriteOnly | IO_Translate );
+ QImageIO iio( &buf, "XPM" );
+ iio.setImage( img );
+ iio.write();
+ buf.close();
+ ulong len = ba.size() * 2;
+ QByteArray bazip( len );
+ ::compress( (uchar*) bazip.data(), &len, (uchar*) ba.data(), ba.size() );
+ QString res;
+ ts << makeIndent( indent ) << "<data format=\"XPM.GZ\" length=\"" << ba.size() << "\">";
+ static const char hexchars[] = "0123456789abcdef";
+ for ( int i = 0; i < (int)len; ++i ) {
+ uchar s = (uchar) bazip[i];
+ ts << hexchars[s >> 4];
+ ts << hexchars[s & 0x0f];
+ }
+ ts << "</data>" << endl;
+}
+
+void Resource::saveImageCollection( QTextStream &ts, int indent )
+{
+ ts << makeIndent( indent ) << "<images>" << endl;
+ indent++;
+
+ QValueList<Image>::Iterator it = images.begin();
+ for ( ; it != images.end(); ++it ) {
+ ts << makeIndent( indent ) << "<image name=\"" << (*it).name << "\">" << endl;
+ indent++;
+ saveImageData( (*it).img, ts, indent );
+ indent--;
+ ts << makeIndent( indent ) << "</image>" << endl;
+ }
+
+ indent--;
+ ts << makeIndent( indent ) << "</images>" << endl;
+}
+
+static QImage loadImageData( QDomElement &n2 )
+{
+ QImage img;
+ QString data = n2.firstChild().toText().data();
+ 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;
+ }
+ QString format = n2.attribute( "format", "PNG" );
+ if ( format == "XPM.GZ" ) {
+ ulong len = n2.attribute( "length" ).toULong();
+ if ( len < data.length() * 5 )
+ len = data.length() * 5;
+ QByteArray baunzip( len );
+ ::uncompress( (uchar*) baunzip.data(), &len, (uchar*) ba, data.length()/2 );
+ img.loadFromData( (const uchar*)baunzip.data(), len, "XPM" );
+ } else {
+ img.loadFromData( (const uchar*)ba, data.length() / 2, format );
+ }
+ delete [] ba;
+
+ return img;
+}
+
+void Resource::loadImageCollection( const QDomElement &e )
+{
+ QDomElement n = e.firstChild().toElement();
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "image" ) {
+ Image img;
+ img.name = n.attribute( "name" );
+ QDomElement n2 = n.firstChild().toElement();
+ while ( !n2.isNull() ) {
+ if ( n2.tagName() == "data" )
+ img.img = loadImageData( n2 );
+ n2 = n2.nextSibling().toElement();
+ }
+ images.append( img );
+ n = n.nextSibling().toElement();
+ }
+ }
+}
+
+QImage Resource::loadFromCollection( const QString &name )
+{
+ QValueList<Image>::Iterator it = images.begin();
+ for ( ; it != images.end(); ++it ) {
+ if ( ( *it ).name == name )
+ return ( *it ).img;
+ }
+ return QImage();
+}
+
+void Resource::saveConnections( QTextStream &ts, int indent )
+{
+ ts << makeIndent( indent ) << "<connections>" << endl;
+ indent++;
+ QValueList<MetaDataBase::Connection> connections = MetaDataBase::connections( formwindow );
+ QValueList<MetaDataBase::Connection>::Iterator it = connections.begin();
+ for ( ; it != connections.end(); ++it ) {
+ MetaDataBase::Connection conn = *it;
+ if ( ( knownNames.findIndex( QString( conn.sender->name() ) ) == -1 &&
+ qstrcmp( conn.sender->name(), "this" ) != 0 ) ||
+ ( knownNames.findIndex( QString( conn.receiver->name() ) ) == -1 &&
+ qstrcmp( conn.receiver->name(), "this" ) != 0 ) )
+ continue;
+ if ( formwindow->isMainContainer( (QWidget*)(*it).receiver ) &&
+ !MetaDataBase::hasSlot( formwindow, MetaDataBase::normalizeSlot( (*it).slot ).latin1() ) )
+ continue;
+
+ if ( conn.sender->inherits( "CustomWidget" ) ) {
+ MetaDataBase::CustomWidget *cw = ( (CustomWidget*)conn.sender )->customWidget();
+ if ( cw && !cw->hasSignal( conn.signal ) )
+ continue;
+ }
+
+ if ( conn.receiver->inherits( "CustomWidget" ) && !formwindow->isMainContainer( conn.receiver ) ) {
+ MetaDataBase::CustomWidget *cw = ( (CustomWidget*)conn.receiver )->customWidget();
+ if ( cw && !cw->hasSlot( MetaDataBase::normalizeSlot( conn.slot ).latin1() ) )
+ continue;
+ }
+
+ ts << makeIndent( indent ) << "<connection>" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<sender>" << entitize( conn.sender->name() ) << "</sender>" << endl;
+ ts << makeIndent( indent ) << "<signal>" << entitize( conn.signal ) << "</signal>" << endl;
+ ts << makeIndent( indent ) << "<receiver>" << entitize( conn.receiver->name() ) << "</receiver>" << endl;
+ ts << makeIndent( indent ) << "<slot>" << entitize( MetaDataBase::normalizeSlot( conn.slot ) ) << "</slot>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</connection>" << endl;
+ }
+
+#ifndef KOMMANDER
+ QString lang = formwindow->project()->language();
+ LanguageInterface *iface = langIface;
+ if ( iface && MetaDataBase::hasEvents( lang ) ) {
+ QObjectList *l = formwindow->queryList( "QWidget" );
+ l->append( formwindow );
+ QPtrList<QAction> lst = formwindow->actionList();
+ for ( QAction *a = lst.first(); a; a = lst.next() )
+ l->append( a );
+ for ( QObject *o = l->first(); o; o = l->next() ) {
+ if ( !MetaDataBase::hasObject( o ) )
+ continue;
+ QMap<QString, QStringList> eventFunctions = MetaDataBase::eventFunctions( o );
+ QMap<QString, QStringList>::ConstIterator it = eventFunctions.begin();
+ for ( ; it != eventFunctions.end(); ++it ) {
+ QString sls = (*it).join( "," );
+ MetaDataBase::Connection conn;
+ conn.sender = o;
+ conn.signal = it.key();
+ conn.slot = sls;
+ langConnections[ lang ].append( conn );
+ }
+ }
+ delete l;
+ }
+#endif
+
+ indent--;
+ ts << makeIndent( indent ) << "</connections>" << endl;
+}
+
+void Resource::loadConnections( const QDomElement &e )
+{
+ QDomElement n = e.firstChild().toElement();
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "connection" ) {
+ QString lang = n.attribute( "language", "C++" );
+ QDomElement n2 = n.firstChild().toElement();
+ MetaDataBase::Connection conn;
+ while ( !n2.isNull() ) {
+ if ( n2.tagName() == "sender" ) {
+ conn.sender = 0;
+ QString name = n2.firstChild().toText().data();
+ if ( name == "this" || qstrcmp( toplevel->name(), name ) == 0 ) {
+ conn.sender = toplevel;
+ } else {
+ if ( name == "this" )
+ name = toplevel->name();
+ QObjectList *l = toplevel->queryList( 0, name, false );
+ if ( l ) {
+ if ( l->first() )
+ conn.sender = l->first();
+ delete l;
+ }
+ if ( !conn.sender )
+ conn.sender = formwindow->findAction( name );
+ }
+ } else if ( n2.tagName() == "signal" ) {
+ conn.signal = n2.firstChild().toText().data();
+ } else if ( n2.tagName() == "receiver" ) {
+ QString name = n2.firstChild().toText().data();
+ if ( name == "this" || qstrcmp( toplevel->name(), name ) == 0 ) {
+ conn.receiver = toplevel;
+ } else {
+ QObjectList *l = toplevel->queryList( 0, name, false );
+ if ( l ) {
+ if ( l->first() )
+ conn.receiver = l->first();
+ delete l;
+ }
+ }
+ } else if ( n2.tagName() == "slot" ) {
+ conn.slot = n2.firstChild().toText().data();
+ }
+ n2 = n2.nextSibling().toElement();
+ }
+ if ( formwindow ) {
+ if ( conn.sender == formwindow )
+ conn.sender = formwindow->mainContainer();
+ if ( conn.receiver == formwindow )
+ conn.receiver = formwindow->mainContainer();
+ }
+ if ( conn.sender && conn.receiver ) {
+#ifndef KOMMANDER
+ if ( lang == "C++" ) {
+ MetaDataBase::addConnection( formwindow ? formwindow : toplevel,
+ conn.sender, conn.signal, conn.receiver, conn.slot );
+ }
+ else if ( MetaDataBase::hasEvents( lang ) ) {
+ MetaDataBase::setEventFunctions( conn.sender, formwindow, lang, conn.signal,
+ QStringList::split( ',', conn.slot ), false );
+ }
+#else
+ MetaDataBase::addConnection( formwindow ? formwindow : toplevel,
+ conn.sender, conn.signal, conn.receiver, conn.slot );
+#endif
+ }
+ } else if ( n.tagName() == "slot" ) { // compatibility with 2.x
+ MetaDataBase::Slot slot;
+ slot.specifier = n.attribute( "specifier", "virtual" );
+ if ( slot.specifier.isEmpty() )
+ slot.specifier = "virtual";
+ slot.access = n.attribute( "access", "public" );
+ if ( slot.access.isEmpty() )
+ slot.access = "public";
+ slot.language = n.attribute( "language", "C++" );
+ slot.returnType = n.attribute( "returnType", "void" );
+ if ( slot.returnType.isEmpty() )
+ slot.returnType = "void";
+ slot.slot = n.firstChild().toText().data();
+ if ( !MetaDataBase::hasSlot( formwindow, slot.slot, true ) )
+ MetaDataBase::addSlot( formwindow, slot.slot, slot.specifier,
+ slot.access, slot.language, slot.returnType );
+ else
+ MetaDataBase::changeSlotAttributes( formwindow, slot.slot,
+ slot.specifier, slot.access,
+ slot.language, slot.returnType );
+ }
+ n = n.nextSibling().toElement();
+ }
+}
+
+void Resource::saveCustomWidgets( QTextStream &ts, int indent )
+{
+ ts << makeIndent( indent ) << "<customwidgets>" << endl;
+ indent++;
+
+ QPtrList<MetaDataBase::CustomWidget> *lst = MetaDataBase::customWidgets();
+ for ( MetaDataBase::CustomWidget *w = lst->first(); w; w = lst->next() ) {
+ if ( usedCustomWidgets.findIndex( w->className ) == -1 )
+ continue;
+ ts << makeIndent( indent ) << "<customwidget>" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<class>" << w->className << "</class>" << endl;
+ ts << makeIndent( indent ) << "<header location=\""
+ << ( w->includePolicy == MetaDataBase::CustomWidget::Local ? "local" : "global" )
+ << "\">" << w->includeFile << "</header>" << endl;
+ ts << makeIndent( indent ) << "<sizehint>" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<width>" << w->sizeHint.width() << "</width>" << endl;
+ ts << makeIndent( indent ) << "<height>" << w->sizeHint.height() << "</height>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</sizehint>" << endl;
+ ts << makeIndent( indent ) << "<container>" << (int)w->isContainer << "</container>" << endl;
+ ts << makeIndent( indent ) << "<sizepolicy>" << endl;
+ indent++;
+ ts << makeIndent( indent ) << "<hordata>" << (int)w->sizePolicy.horData() << "</hordata>" << endl;
+ ts << makeIndent( indent ) << "<verdata>" << (int)w->sizePolicy.verData() << "</verdata>" << endl;
+ ts << makeIndent( indent ) << "<horstretch>" << (int)w->sizePolicy.horStretch() << "</horstretch>" << endl;
+ ts << makeIndent( indent ) << "<verstretch>" << (int)w->sizePolicy.verStretch() << "</verstretch>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</sizepolicy>" << endl;
+ ts << makeIndent( indent ) << "<pixmap>" << saveInCollection( w->pixmap->convertToImage() ) << "</pixmap>" << endl;
+ if ( !w->lstSignals.isEmpty() ) {
+ for ( QValueList<QCString>::Iterator it = w->lstSignals.begin(); it != w->lstSignals.end(); ++it )
+ ts << makeIndent( indent ) << "<signal>" << entitize( *it ) << "</signal>" << endl;
+ }
+ if ( !w->lstSlots.isEmpty() ) {
+ for ( QValueList<MetaDataBase::Slot>::Iterator it = w->lstSlots.begin(); it != w->lstSlots.end(); ++it )
+ ts << makeIndent( indent ) << "<slot access=\"" << (*it).access << "\" specifier=\""
+ << (*it).specifier << "\">" << entitize( (*it).slot ) << "</slot>" << endl;
+ }
+ if ( !w->lstProperties.isEmpty() ) {
+ for ( QValueList<MetaDataBase::Property>::Iterator it = w->lstProperties.begin(); it != w->lstProperties.end(); ++it )
+ ts << makeIndent( indent ) << "<property type=\"" << (*it).type << "\">" << entitize( (*it).property ) << "</property>" << endl;
+ }
+ indent--;
+ ts << makeIndent( indent ) << "</customwidget>" << endl;
+ }
+
+
+ indent--;
+ ts << makeIndent( indent ) << "</customwidgets>" << endl;
+}
+
+void Resource::loadCustomWidgets( const QDomElement &e, Resource *r )
+{
+ QDomElement n = e.firstChild().toElement();
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "customwidget" ) {
+ QDomElement n2 = n.firstChild().toElement();
+ MetaDataBase::CustomWidget *w = new MetaDataBase::CustomWidget;
+ while ( !n2.isNull() ) {
+ if ( n2.tagName() == "class" ) {
+ w->className = n2.firstChild().toText().data();
+ } else if ( n2.tagName() == "header" ) {
+ w->includeFile = n2.firstChild().toText().data();
+ QString s = n2.attribute( "location" );
+ if ( s != "local" )
+ w->includePolicy = MetaDataBase::CustomWidget::Global;
+ else
+ w->includePolicy = MetaDataBase::CustomWidget::Local;
+ } else if ( n2.tagName() == "sizehint" ) {
+ QDomElement n3 = n2.firstChild().toElement();
+ while ( !n3.isNull() ) {
+ if ( n3.tagName() == "width" )
+ w->sizeHint.setWidth( n3.firstChild().toText().data().toInt() );
+ else if ( n3.tagName() == "height" )
+ w->sizeHint.setHeight( n3.firstChild().toText().data().toInt() );
+ n3 = n3.nextSibling().toElement();
+ }
+ } else if ( n2.tagName() == "sizepolicy" ) {
+ QDomElement n3 = n2.firstChild().toElement();
+ while ( !n3.isNull() ) {
+ if ( n3.tagName() == "hordata" )
+ w->sizePolicy.setHorData( (QSizePolicy::SizeType)n3.firstChild().toText().data().toInt() );
+ else if ( n3.tagName() == "verdata" )
+ w->sizePolicy.setVerData( (QSizePolicy::SizeType)n3.firstChild().toText().data().toInt() );
+ else if ( n3.tagName() == "horstretch" )
+ w->sizePolicy.setHorStretch( n3.firstChild().toText().data().toInt() );
+ else if ( n3.tagName() == "verstretch" )
+ w->sizePolicy.setVerStretch( n3.firstChild().toText().data().toInt() );
+ n3 = n3.nextSibling().toElement();
+ }
+ } else if ( n2.tagName() == "pixmap" ) {
+ QPixmap pix;
+ if ( r ) {
+ pix = r->loadPixmap( n2 );
+ } else {
+ QDomElement n3 = n2.firstChild().toElement();
+ QImage img;
+ while ( !n3.isNull() ) {
+ if ( n3.tagName() == "data" ) {
+ img = loadImageData( n3 );
+ }
+ n3 = n3.nextSibling().toElement();
+ }
+ pix.convertFromImage( img );
+ }
+ w->pixmap = new QPixmap( pix );
+ } else if ( n2.tagName() == "signal" ) {
+ w->lstSignals.append( n2.firstChild().toText().data().latin1() );
+ } else if ( n2.tagName() == "container" ) {
+ w->isContainer = (bool)n2.firstChild().toText().data().toInt();
+ } else if ( n2.tagName() == "slot" ) {
+ MetaDataBase::Slot slot;
+ slot.slot = n2.firstChild().toText().data().latin1();
+ slot.access = n2.attribute( "access" );
+ w->lstSlots.append( slot );
+ } else if ( n2.tagName() == "property" ) {
+ MetaDataBase::Property property;
+ property.property = n2.firstChild().toText().data().latin1();
+ property.type = n2.attribute( "type" );
+ w->lstProperties.append( property );
+ }
+ n2 = n2.nextSibling().toElement();
+ }
+ MetaDataBase::addCustomWidget( w );
+ }
+ n = n.nextSibling().toElement();
+ }
+}
+
+void Resource::saveTabOrder( QTextStream &ts, int indent )
+{
+ QWidgetList l = MetaDataBase::tabOrder( toplevel );
+ if ( l.isEmpty() )
+ return;
+
+ ts << makeIndent( indent ) << "<tabstops>" << endl;
+ indent++;
+
+ for ( QWidget *w = l.first(); w; w = l.next() ) {
+ if ( w->testWState( Qt::WState_ForceHide ) || knownNames.findIndex( w->name() ) == -1 )
+ continue;
+ ts << makeIndent( indent ) << "<tabstop>" << w->name() << "</tabstop>" << endl;
+ }
+
+ indent--;
+ ts << makeIndent( indent ) << "</tabstops>" << endl;
+}
+
+void Resource::loadTabOrder( const QDomElement &e )
+{
+ QWidget *last = 0;
+ QDomElement n = e.firstChild().toElement();
+ QWidgetList widgets;
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "tabstop" ) {
+ QString name = n.firstChild().toText().data();
+ if ( name.isEmpty() )
+ continue;
+ QObjectList *l = toplevel->queryList( 0, name, false );
+ if ( l ) {
+ if ( l->first() ) {
+ QWidget *w = (QWidget*)l->first();
+ widgets.append( w );
+ if ( last )
+ toplevel->setTabOrder( last, w );
+ last = w;
+ }
+ delete l;
+ }
+ }
+ n = n.nextSibling().toElement();
+ }
+
+ if ( !widgets.isEmpty() )
+ MetaDataBase::setTabOrder( toplevel, widgets );
+}
+
+void Resource::saveMetaInfoBefore( QTextStream &ts, int indent )
+{
+ MetaDataBase::MetaInfo info = MetaDataBase::metaInfo(formwindow);
+ QString cn = formwindow->name();
+ ts << makeIndent(indent) << "<class>" << entitize(cn) << "</class>" << endl;
+ if (!info.comment.isEmpty())
+ ts << makeIndent(indent) << "<comment>" << entitize(info.comment) << "</comment>" << endl;
+ if (!info.author.isEmpty())
+ ts << makeIndent(indent) << "<author>" << entitize(info.author) << "</author>" << endl;
+ if (!info.license.isEmpty())
+ ts << makeIndent(indent) << "<license>" << entitize(info.license) << "</license>" << endl;
+ if (!info.version.isEmpty())
+ ts << makeIndent(indent) << "<version>" << entitize(info.version) << "</version>" << endl;
+}
+
+void Resource::saveMetaInfoAfter( QTextStream &ts, int indent )
+{
+ MetaDataBase::MetaInfo info = MetaDataBase::metaInfo( formwindow );
+ QValueList<MetaDataBase::Include> includes = MetaDataBase::includes( formwindow );
+ QString extensionInclude;
+ bool needExtensionInclude = false;
+ if ( !includes.isEmpty() || needExtensionInclude ) {
+ ts << makeIndent( indent ) << "<includes>" << endl;
+ indent++;
+
+ for ( QValueList<MetaDataBase::Include>::Iterator it = includes.begin(); it != includes.end(); ++it ) {
+ ts << makeIndent( indent ) << "<include location=\"" << (*it).location
+ << "\" impldecl=\"" << (*it).implDecl << "\">" << (*it).header << "</include>" << endl;
+ if ( needExtensionInclude )
+ needExtensionInclude = (*it).header != extensionInclude;
+ }
+
+ if ( needExtensionInclude )
+ ts << makeIndent( indent ) << "<include location=\"local\" impldecl=\"in implementation\">"
+ << extensionInclude << "</include>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</includes>" << endl;
+ }
+
+ QStringList forwards = MetaDataBase::forwards( formwindow );
+ if ( !forwards.isEmpty() ) {
+ ts << makeIndent( indent ) << "<forwards>" << endl;
+ indent++;
+ for ( QStringList::Iterator it2 = forwards.begin(); it2 != forwards.end(); ++it2 )
+ ts << makeIndent( indent ) << "<forward>" << entitize( *it2 ) << "</forward>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</forwards>" << endl;
+ }
+ QStringList sigs = MetaDataBase::signalList( formwindow );
+ if ( !sigs.isEmpty() ) {
+ ts << makeIndent( indent ) << "<signals>" << endl;
+ indent++;
+ for ( QStringList::Iterator it3 = sigs.begin(); it3 != sigs.end(); ++it3 )
+ ts << makeIndent( indent ) << "<signal>" << entitize( *it3 ) << "</signal>" << endl;
+ indent--;
+ ts << makeIndent( indent ) << "</signals>" << endl;
+
+ QValueList<MetaDataBase::Slot> slotList = MetaDataBase::slotList( formwindow );
+ if ( !slotList.isEmpty() ) {
+ ts << makeIndent( indent ) << "<slots>" << endl;
+ indent++;
+#ifndef KOMMANDER
+ QString lang = formwindow->project()->language();
+#endif
+ QValueList<MetaDataBase::Slot>::Iterator it = slotList.begin();
+ for ( ; it != slotList.end(); ++it ) {
+ MetaDataBase::Slot slot = *it;
+ ts << makeIndent( indent ) << "<slot";
+ if ( slot.access != "public" )
+ ts << " access=\"" << slot.access << "\"";
+ if ( slot.specifier != "virtual" )
+ ts << " specifier=\"" << slot.specifier << "\"";
+ if ( slot.language != "C++" )
+ ts << " language=\"" << slot.language<< "\"";
+ if ( slot.returnType != "void" )
+ ts << " returnType=\"" << entitize( slot.returnType ) << "\"";
+ ts << ">" << entitize( slot.slot ) << "</slot>" << endl;
+ }
+ indent--;
+ ts << makeIndent( indent ) << "</slots>" << endl;
+ }
+ }
+
+ if ( formwindow && formwindow->savePixmapInline() )
+ ;
+ else
+ ts << makeIndent( indent ) << "<pixmapfunction>" << formwindow->pixmapLoaderFunction() << "</pixmapfunction>" << endl;
+ if ( !( exportMacro = MetaDataBase::exportMacro( formwindow->mainContainer() ) ).isEmpty() )
+ ts << makeIndent( indent ) << "<exportmacro>" << exportMacro << "</exportmacro>" << endl;
+ if ( formwindow )
+ ts << makeIndent( indent ) << "<layoutdefaults spacing=\"" << formwindow->layoutDefaultSpacing()
+ << "\" margin=\"" << formwindow->layoutDefaultMargin() << "\"/>" << endl;
+}
+
+QColorGroup Resource::loadColorGroup( const QDomElement &e )
+{
+ QColorGroup cg;
+ int r = -1;
+ QDomElement n = e.firstChild().toElement();
+ QColor col;
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "color" ) {
+ r++;
+ cg.setColor( (QColorGroup::ColorRole)r, (col = DomTool::readColor( n ) ) );
+ } else if ( n.tagName() == "pixmap" ) {
+ QPixmap pix = loadPixmap( n );
+ cg.setBrush( (QColorGroup::ColorRole)r, QBrush( col, pix ) );
+ }
+ n = n.nextSibling().toElement();
+ }
+ return cg;
+}
+
+void Resource::saveChildActions( QAction *a, QTextStream &ts, int indent )
+{
+ if ( !a->children() )
+ return;
+ QObjectListIt it( *a->children() );
+ while ( it.current() ) {
+ QObject *o = it.current();
+ ++it;
+ if ( !o->inherits( "QAction" ) )
+ continue;
+ QAction *ac = (QAction*)o;
+ bool isGroup = ac->inherits( "QActionGroup" );
+ if ( isGroup )
+ ts << makeIndent( indent ) << "<actiongroup>" << endl;
+ else
+ ts << makeIndent( indent ) << "<action>" << endl;
+ indent++;
+ saveObjectProperties( ac, ts, indent );
+ indent--;
+ if ( isGroup ) {
+ indent++;
+ saveChildActions( ac, ts, indent );
+ indent--;
+ }
+ if ( isGroup )
+ ts << makeIndent( indent ) << "</actiongroup>" << endl;
+ else
+ ts << makeIndent( indent ) << "</action>" << endl;
+ }
+}
+
+void Resource::saveActions( const QPtrList<QAction> &actions, QTextStream &ts, int indent )
+{
+ if ( actions.isEmpty() )
+ return;
+ ts << makeIndent( indent ) << "<actions>" << endl;
+ indent++;
+ QPtrListIterator<QAction> it( actions );
+ while ( it.current() ) {
+ QAction *a = it.current();
+ bool isGroup = a->inherits( "QActionGroup" );
+ if ( isGroup )
+ ts << makeIndent( indent ) << "<actiongroup>" << endl;
+ else
+ ts << makeIndent( indent ) << "<action>" << endl;
+ indent++;
+ saveObjectProperties( a, ts, indent );
+ indent--;
+ if ( isGroup ) {
+ indent++;
+ saveChildActions( a, ts, indent );
+ indent--;
+ }
+ if ( isGroup )
+ ts << makeIndent( indent ) << "</actiongroup>" << endl;
+ else
+ ts << makeIndent( indent ) << "</action>" << endl;
+ ++it;
+ }
+ indent--;
+ ts << makeIndent( indent ) << "</actions>" << endl;
+}
+
+void Resource::loadChildAction( QObject *parent, const QDomElement &e )
+{
+ QDomElement n = e;
+ QAction *a = 0;
+ if ( n.tagName() == "action" ) {
+ a = new QDesignerAction( parent );
+ MetaDataBase::addEntry( a );
+ QDomElement n2 = n.firstChild().toElement();
+ while ( !n2.isNull() ) {
+ if ( n2.tagName() == "property" ) {
+ setObjectProperty( a, n2.attribute( "name" ), n2.firstChild().toElement() );
+ } else if ( n2.tagName() == "event" ) {
+ // qDebug("Resource::loadChildAction : Tag == Event");
+#ifndef KOMMANDER
+ MetaDataBase::setEventFunctions( a, formwindow, MainWindow::self->currProject()->language(),
+ n2.attribute( "name" ),
+ QStringList::split( ',', n2.attribute( "functions" ) ), false );
+#endif
+ }
+ n2 = n2.nextSibling().toElement();
+ }
+ if ( !parent->inherits( "QAction" ) )
+ formwindow->actionList().append( a );
+ } else if ( n.tagName() == "actiongroup" ) {
+ a = new QDesignerActionGroup( parent );
+ MetaDataBase::addEntry( a );
+ QDomElement n2 = n.firstChild().toElement();
+ while ( !n2.isNull() ) {
+ if ( n2.tagName() == "property" ) {
+ setObjectProperty( a, n2.attribute( "name" ), n2.firstChild().toElement() );
+ } else if ( n2.tagName() == "action" ||
+ n2.tagName() == "actiongroup" ) {
+ loadChildAction( a, n2 );
+ } else if ( n2.tagName() == "event" ) {
+ // qDebug("Resource::loadChildAction : Tag == Event");
+#ifndef KOMMANDER
+ MetaDataBase::setEventFunctions( a, formwindow, MainWindow::self->currProject()->language(),
+ n2.attribute( "name" ),
+ QStringList::split( ',', n2.attribute( "functions" ) ), false );
+#endif
+ }
+ n2 = n2.nextSibling().toElement();
+ }
+ if ( !parent->inherits( "QAction" ) )
+ formwindow->actionList().append( a );
+ }
+}
+
+void Resource::loadActions( const QDomElement &e )
+{
+ QDomElement n = e.firstChild().toElement();
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "action" ) {
+ loadChildAction( formwindow, n );
+ } else if ( n.tagName() == "actiongroup" ) {
+ loadChildAction( formwindow, n );
+ }
+ n = n.nextSibling().toElement();
+ }
+}
+
+void Resource::saveToolBars( QMainWindow *mw, QTextStream &ts, int indent )
+{
+ ts << makeIndent( indent ) << "<toolbars>" << endl;
+ indent++;
+
+ QPtrList<QToolBar> tbList;
+ for ( int i = 0; i <= (int)Qt::DockMinimized; ++i ) {
+ tbList = mw->toolBars( (Qt::Dock)i );
+ if ( tbList.isEmpty() )
+ continue;
+ for ( QToolBar *tb = tbList.first(); tb; tb = tbList.next() ) {
+ if ( tb->isHidden() )
+ continue;
+ ts << makeIndent( indent ) << "<toolbar dock=\"" << i << "\">" << endl;
+ indent++;
+ saveObjectProperties( tb, ts, indent );
+ QPtrList<QAction> actionList = ( (QDesignerToolBar*)tb )->insertedActions();
+ for ( QAction *a = actionList.first(); a; a = actionList.next() ) {
+ if ( a->inherits( "QSeparatorAction" ) ) {
+ ts << makeIndent( indent ) << "<separator/>" << endl;
+ } else {
+ if ( a->inherits( "QDesignerAction" ) && !( (QDesignerAction*)a )->supportsMenu() ) {
+ QWidget *w = ( (QDesignerAction*)a )->widget();
+ ts << makeIndent( indent ) << "<widget class=\""
+ << WidgetFactory::classNameOf( w ) << "\">" << endl;
+ indent++;
+ saveObjectProperties( w, ts, indent );
+ const char *className = WidgetFactory::classNameOf( w );
+ if ( w->isA( "CustomWidget" ) )
+ usedCustomWidgets << QString( className );
+ if ( WidgetFactory::hasItems( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( w ) ) ) )
+ saveItems( w, ts, indent );
+ indent--;
+ ts << makeIndent( indent ) << "</widget>" << endl;
+ } else {
+ ts << makeIndent( indent ) << "<action name=\"" << a->name() << "\"/>" << endl;
+ }
+ }
+ }
+ indent--;
+ ts << makeIndent( indent ) << "</toolbar>" << endl;
+ }
+ }
+ indent--;
+ ts << makeIndent( indent ) << "</toolbars>" << endl;
+}
+
+void Resource::saveMenuBar( QMainWindow *mw, QTextStream &ts, int indent )
+{
+ if ( !mw->child( 0, "QMenuBar" ) )
+ return;
+ ts << makeIndent( indent ) << "<menubar>" << endl;
+ indent++;
+ saveObjectProperties( mw->menuBar(), ts, indent );
+
+ for ( int i = 0; i < (int)mw->menuBar()->count(); ++i ) {
+ ts << makeIndent( indent ) << "<item text=\"" << entitize( mw->menuBar()->text( mw->menuBar()->idAt( i ) ) )
+ << "\" name=\"" << entitize( mw->menuBar()->findItem( mw->menuBar()->idAt( i ) )->popup()->name() ) << "\">" << endl;
+ indent++;
+ QMenuItem *m = mw->menuBar()->findItem( mw->menuBar()->idAt( i ) );
+ if ( !m )
+ continue;
+ QPtrList<QAction> actionList = ( (QDesignerPopupMenu*)m->popup() )->insertedActions();
+ for ( QAction *a = actionList.first(); a; a = actionList.next() ) {
+ if ( a->inherits( "QSeparatorAction" ) )
+ ts << makeIndent( indent ) << "<separator/>" << endl;
+ else
+ ts << makeIndent( indent ) << "<action name=\"" << a->name() << "\"/>" << endl;
+ }
+ indent--;
+ ts << makeIndent( indent ) << "</item>" << endl;
+ }
+ indent--;
+ ts << makeIndent( indent ) << "</menubar>" << endl;
+}
+
+void Resource::loadToolBars( const QDomElement &e )
+{
+ QDomElement n = e.firstChild().toElement();
+ QMainWindow *mw = ( (QMainWindow*)formwindow->mainContainer() );
+ QDesignerToolBar *tb = 0;
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "toolbar" ) {
+ Qt::Dock dock = (Qt::Dock)n.attribute( "dock" ).toInt();
+ tb = new QDesignerToolBar( mw, dock );
+ QDomElement n2 = n.firstChild().toElement();
+ while ( !n2.isNull() ) {
+ if ( n2.tagName() == "action" ) {
+ QAction *a = formwindow->findAction( n2.attribute( "name" ) );
+ if ( a ) {
+ a->addTo( tb );
+ tb->addAction( a );
+ }
+ } else if ( n2.tagName() == "separator" ) {
+ QAction *a = new QSeparatorAction( 0 );
+ a->addTo( tb );
+ tb->addAction( a );
+ } else if ( n2.tagName() == "widget" ) {
+ QWidget *w = (QWidget*)createObject( n2, tb );
+ QDesignerAction *a = new QDesignerAction( w, tb );
+ a->addTo( tb );
+ tb->addAction( a );
+ tb->installEventFilters( w );
+ } else if ( n2.tagName() == "property" ) {
+ setObjectProperty( tb, n2.attribute( "name" ), n2.firstChild().toElement() );
+ }
+ n2 = n2.nextSibling().toElement();
+ }
+ }
+ n = n.nextSibling().toElement();
+ }
+}
+
+void Resource::loadMenuBar( const QDomElement &e )
+{
+ QDomElement n = e.firstChild().toElement();
+ QMainWindow *mw = ( (QMainWindow*)formwindow->mainContainer() );
+ QDesignerMenuBar *mb = new QDesignerMenuBar( mw );
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "item" ) {
+ QDesignerPopupMenu *popup = new QDesignerPopupMenu( mw );
+ popup->setName( n.attribute( "name" ) );
+ QDomElement n2 = n.firstChild().toElement();
+ while ( !n2.isNull() ) {
+ if ( n2.tagName() == "action" ) {
+ QAction *a = formwindow->findAction( n2.attribute( "name" ) );
+ if ( a ) {
+ a->addTo( popup );
+ popup->addAction( a );
+ }
+ } else if ( n2.tagName() == "separator" ) {
+ QAction *a = new QSeparatorAction( 0 );
+ a->addTo( popup );
+ popup->addAction( a );
+ }
+ n2 = n2.nextSibling().toElement();
+ }
+ mb->insertItem( n.attribute( "text" ), popup );
+ } else if ( n.tagName() == "property" ) {
+ setObjectProperty( mb, n.attribute( "name" ), n.firstChild().toElement() );
+ }
+ n = n.nextSibling().toElement();
+ }
+}
+
+#ifndef KOMMANDER
+void Resource::saveFormCode()
+{
+#ifndef KOMMANDER
+ QString lang = formwindow->project()->language();
+#else
+ QString lang = "C++";
+#endif
+ LanguageInterface *iface = langIface;
+ if ( !iface )
+ return;
+ QMap<QString, QString> functionBodies = MetaDataBase::functionBodies( formwindow );
+ if ( langIface->supports( LanguageInterface::StoreFormCodeSeperate ) ) {
+ if ( formwindow->formFile()->hasTempFileName() ||
+ formwindow->formFile()->code().isEmpty() ||
+ !formwindow->formFile()->hasFormCode() )
+ return;
+#ifndef KOMMANDER
+ QFile f( formwindow->project()->makeAbsolute( formwindow->formFile()->codeFile() ) );
+#else
+ QFile f( formwindow->formFile()->codeFile() );
+#endif
+ if ( f.open( IO_WriteOnly | IO_Translate ) ) {
+ QTextStream ts( &f );
+ ts << formwindow->formFile()->code();
+ }
+ } else {
+ QValueList<LanguageInterface::Function> funcs;
+ QValueList<MetaDataBase::Slot> slotList = MetaDataBase::slotList( formwindow );
+ QValueList<MetaDataBase::Slot>::Iterator sit = slotList.begin();
+ for ( ; sit != slotList.end(); ++sit ) {
+ MetaDataBase::Slot slot = *sit;
+ QMap<QString, QString>::Iterator it =
+ functionBodies.find( MetaDataBase::normalizeSlot( (*sit).slot ) );
+ LanguageInterface::Function func;
+ func.name = slot.slot;
+ func.body = *it;
+ func.comments = MetaDataBase::functionComments( formwindow, func.name );
+ func.returnType = slot.returnType;
+ funcs.append( func );
+ }
+
+ QValueList<LanguageInterface::Connection> conns;
+ QValueList<MetaDataBase::Connection> mconns = langConnections[ lang ];
+ for ( QValueList<MetaDataBase::Connection>::Iterator it = mconns.begin();
+ it != mconns.end(); ++it ) {
+ LanguageInterface::Connection conn;
+ conn.sender = (*it).sender->name();
+ conn.signal = (*it).signal;
+ conn.slot = (*it).slot;
+ conns.append( conn );
+ }
+
+ iface->saveFormCode( formwindow->name(), currFileName + iface->formCodeExtension(),
+ funcs, QStringList(), QStringList(), QStringList(),
+ MetaDataBase::variables( formwindow ), conns );
+ }
+}
+#endif
+
+ // compatibility with early 3.0 betas
+
+static QString make_function_pretty( const QString &s )
+{
+ QString res = s;
+ if ( res.find( ")" ) - res.find( "(" ) == 1 )
+ return res;
+ res.replace( QRegExp( "[(]" ), "( " );
+ res.replace( QRegExp( "[)]" ), " )" );
+ res.replace( QRegExp( "&" ), " &" );
+ res.replace( QRegExp( "[*]" ), " *" );
+ res.replace( QRegExp( "," ), ", " );
+ res.replace( QRegExp( ":" ), " : " );
+ res = res.simplifyWhiteSpace();
+ return res;
+}
+
+#ifndef KOMMANDER
+void Resource::loadFunctions( const QDomElement &e )
+{
+ QDomElement n = e.firstChild().toElement();
+ QMap<QString, QString> bodies;
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "function" ) {
+ QString name = n.attribute( "name" );
+ QString body = n.firstChild().toText().data();
+ bodies.insert( name, body );
+ }
+ n = n.nextSibling().toElement();
+ }
+ MetaDataBase::setFunctionBodies( formwindow, bodies, QString::null, QString::null );
+ if ( !bodies.isEmpty() ) {
+ LanguageInterface *iface = langIface;
+ if ( !iface )
+ return;
+ QString code;
+ QValueList<MetaDataBase::Slot> slotList = MetaDataBase::slotList( formwindow );
+ for ( QValueList<MetaDataBase::Slot>::Iterator it = slotList.begin(); it != slotList.end(); ++it ) {
+#ifndef KOMMANDER
+ if ( (*it).language != formwindow->project()->language() )
+#else
+ if ( (*it).language != "C++" )
+#endif
+ continue;
+ QString sl( (*it).slot );
+ QString comments = MetaDataBase::functionComments( formwindow, sl );
+ if ( !comments.isEmpty() )
+ code += comments + "\n";
+ code += iface->createFunctionStart( formwindow->name(), make_function_pretty( sl ),
+ ( (*it).returnType.isEmpty() ?
+ QString( "void" ) :
+ (*it).returnType ) );
+ QMap<QString, QString>::Iterator bit = bodies.find( MetaDataBase::normalizeSlot( (*it).slot ) );
+ if ( bit != bodies.end() )
+ code += "\n" + *bit + "\n\n";
+ else
+ code += "\n" + iface->createEmptyFunction() + "\n\n";
+ }
+ if ( !code.isEmpty() ) {
+ formwindow->formFile()->setCode( code );
+ hasFunctions = true;
+ }
+ }
+
+}
+
+void Resource::loadExtraSource()
+{
+#ifndef KOMMANDER
+ QString lang = MainWindow::self->currProject()->language();
+#else
+ QString lang = "C++";
+#endif
+ LanguageInterface *iface = langIface;
+ if ( hasFunctions || !iface )
+ return;
+ QValueList<LanguageInterface::Function> functions;
+ QStringList forwards;
+ QStringList includesImpl;
+ QStringList includesDecl;
+ QStringList vars;
+ QValueList<LanguageInterface::Connection> connections;
+
+ iface->loadFormCode( formwindow->name(), currFileName + iface->formCodeExtension(),
+ functions, forwards, includesImpl, includesDecl, vars, connections );
+
+ if ( iface->supports( LanguageInterface::StoreFormCodeSeperate ) ) {
+#ifndef KOMMANDER
+ QFile f( formwindow->project()->makeAbsolute( formwindow->formFile()->codeFile() ) );
+#else
+ QFile f( formwindow->formFile()->codeFile() );
+#endif
+ QString code;
+ if ( f.open( IO_ReadOnly ) ) {
+ QTextStream ts( &f );
+ code = ts.read();
+ }
+ formwindow->formFile()->setCode( code );
+ }
+
+ for ( QValueList<LanguageInterface::Connection>::Iterator cit = connections.begin();
+ cit != connections.end(); ++cit ) {
+ QObject *sender = 0;
+ QString name = (*cit).sender;
+ if ( name == "this" || qstrcmp( toplevel->name(), name ) == 0 ) {
+ sender = ( (FormWindow*)toplevel )->mainContainer();
+ } else {
+ if ( name == "this" )
+ name = toplevel->name();
+ QObjectList *l = toplevel->queryList( 0, name, false );
+ if ( l ) {
+ if ( l->first() )
+ sender = l->first();
+ delete l;
+ }
+ if ( !sender )
+ sender = formwindow->findAction( name );
+ }
+ MetaDataBase::setEventFunctions( sender, formwindow, lang, (*cit).signal,
+ QStringList::split( ',', (*cit).slot ), false );
+ }
+
+ QMap<QString, QString> bodies = MetaDataBase::functionBodies( formwindow );
+
+ for ( QValueList<LanguageInterface::Function>::Iterator fit = functions.begin();
+ fit != functions.end(); ++fit ) {
+ if ( MetaDataBase::hasSlot( formwindow, (*fit).name.latin1() ) )
+ MetaDataBase::changeSlot( formwindow, (*fit).name.latin1(), (*fit).name.latin1() );
+ else
+ MetaDataBase::addSlot( formwindow, (*fit).name.latin1(), "virtual", "public", lang, (*fit).returnType );
+ MetaDataBase::setFunctionComments( formwindow, (*fit).name, (*fit).comments );
+ bodies.insert( MetaDataBase::normalizeSlot( (*fit).name ), (*fit).body );
+ }
+ MetaDataBase::setFunctionBodies( formwindow, bodies, QString::null, QString::null );
+
+ QStringList v = MetaDataBase::variables( formwindow );
+ QStringList::Iterator vit;
+ for ( vit = vars.begin(); vit != vars.end(); ++vit )
+ v << *vit;
+ MetaDataBase::setVariables( formwindow, v );
+
+ QStringList f = MetaDataBase::forwards( formwindow );
+ for ( vit = forwards.begin(); vit != forwards.end(); ++vit )
+ f << *vit;
+ MetaDataBase::setForwards( formwindow, f );
+
+ QValueList<MetaDataBase::Include> incls = MetaDataBase::includes( formwindow );
+ for ( vit = includesImpl.begin(); vit != includesImpl.end(); ++vit ) {
+ MetaDataBase::Include inc;
+ inc.header = *vit;
+ inc.location = "in implementation";
+ incls << inc;
+ }
+ for ( vit = includesDecl.begin(); vit != includesDecl.end(); ++vit ) {
+ MetaDataBase::Include inc;
+ inc.header = *vit;
+ inc.location = "in declaration";
+ incls << inc;
+ }
+ MetaDataBase::setIncludes( formwindow, incls );
+}
+#endif
diff --git a/kommander/editor/resource.h b/kommander/editor/resource.h
new file mode 100644
index 00000000..710bd34b
--- /dev/null
+++ b/kommander/editor/resource.h
@@ -0,0 +1,159 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef RESOURCE_H
+#define RESOURCE_H
+
+#include <qstring.h>
+#include <qtextstream.h>
+#include <qvariant.h>
+#include <qvaluelist.h>
+#include <qimage.h>
+#include "actiondnd.h"
+
+#include "metadatabase.h"
+
+class QWidget;
+class QObject;
+class QLayout;
+class QStyle;
+class QPalette;
+class FormWindow;
+class MainWindow;
+class QDomElement;
+class QDesignerGridLayout;
+class QListViewItem;
+class QMainWindow;
+#ifndef KOMMANDER
+struct LanguageInterface;
+#endif
+class FormFile;
+
+class Resource
+{
+public:
+ struct Image {
+ QImage img;
+ QString name;
+ bool operator==( const Image &i ) const {
+ return ( i.name == name &&
+ i.img == img );
+ }
+ };
+
+ Resource();
+ Resource( MainWindow* mw );
+ ~Resource();
+
+ void setWidget( FormWindow *w );
+ QWidget *widget() const;
+
+ bool load( FormFile *ff );
+ bool load( FormFile *ff, QIODevice* );
+ QString copy();
+
+ bool save( const QString& filename, bool formCodeOnly = FALSE);
+ bool save( QIODevice* );
+ void paste( const QString &cb, QWidget *parent );
+
+ static void saveImageData( const QImage &img, QTextStream &ts, int indent );
+ static void loadCustomWidgets( const QDomElement &e, Resource *r );
+
+private:
+ void saveObject( QObject *obj, QDesignerGridLayout* grid, QTextStream &ts, int indent );
+ void saveChildrenOf( QObject* obj, QTextStream &ts, int indent );
+ void saveObjectProperties( QObject *w, QTextStream &ts, int indent );
+ void saveSetProperty( QObject *w, const QString &name, QVariant::Type t, QTextStream &ts, int indent );
+ void saveEnumProperty( QObject *w, const QString &name, QVariant::Type t, QTextStream &ts, int indent );
+ void saveProperty( QObject *w, const QString &name, const QVariant &value, QVariant::Type t, QTextStream &ts, int indent );
+ void saveProperty( const QVariant &value, QTextStream &ts, int indent );
+ void saveItems( QObject *obj, QTextStream &ts, int indent );
+ void saveItem( const QStringList &text, const QPtrList<QPixmap> &pixmaps, QTextStream &ts, int indent );
+ void saveItem( QListViewItem *i, QTextStream &ts, int indent );
+ void saveConnections( QTextStream &ts, int indent );
+ void saveCustomWidgets( QTextStream &ts, int indent );
+ void saveTabOrder( QTextStream &ts, int indent );
+ void saveColorGroup( QTextStream &ts, int indent, const QColorGroup &cg );
+ void saveColor( QTextStream &ts, int indent, const QColor &c );
+ void saveMetaInfoBefore( QTextStream &ts, int indent );
+ void saveMetaInfoAfter( QTextStream &ts, int indent );
+ void savePixmap( const QPixmap &p, QTextStream &ts, int indent, const QString &tagname = "pixmap" );
+ void saveActions( const QPtrList<QAction> &actions, QTextStream &ts, int indent );
+ void saveChildActions( QAction *a, QTextStream &ts, int indent );
+ void saveToolBars( QMainWindow *mw, QTextStream &ts, int indent );
+ void saveMenuBar( QMainWindow *mw, QTextStream &ts, int indent );
+#ifndef KOMMANDER
+// void saveFormCode();
+#endif
+
+ QObject *createObject( const QDomElement &e, QWidget *parent, QLayout* layout = 0 );
+ QWidget *createSpacer( const QDomElement &e, QWidget *parent, QLayout *layout, Qt::Orientation o );
+ void createItem( const QDomElement &e, QWidget *widget, QListViewItem *i = 0 );
+ void createColumn( const QDomElement &e, QWidget *widget );
+ void setObjectProperty( QObject* widget, const QString &prop, const QDomElement &e);
+ QString saveInCollection( const QImage &img );
+ QString saveInCollection( const QPixmap &pix ) { return saveInCollection( pix.convertToImage() ); }
+ QImage loadFromCollection( const QString &name );
+ void saveImageCollection( QTextStream &ts, int indent );
+ void loadImageCollection( const QDomElement &e );
+ void loadConnections( const QDomElement &e );
+ void loadTabOrder( const QDomElement &e );
+ void loadItem( const QDomElement &n, QPixmap &pix, QString &txt, bool &hasPixmap );
+ void loadActions( const QDomElement &n );
+ void loadChildAction( QObject *parent, const QDomElement &e );
+ void loadToolBars( const QDomElement &n );
+ void loadMenuBar( const QDomElement &n );
+ QColorGroup loadColorGroup( const QDomElement &e );
+ QPixmap loadPixmap( const QDomElement &e, const QString &tagname = "pixmap" );
+#ifndef KOMMANDER
+// void loadFunctions( const QDomElement &e ); // compatibility with early 3.0 betas
+// void loadExtraSource();
+#endif
+
+private:
+ MainWindow *mainwindow;
+ FormWindow *formwindow;
+ QWidget* toplevel;
+ QValueList<Image> images;
+ bool copying, pasting;
+ bool mainContainerSet;
+ QStringList knownNames;
+ QStringList usedCustomWidgets;
+ QListViewItem *lastItem;
+
+ QValueList<MetaDataBase::Include> metaIncludes;
+ QStringList metaForwards;
+ QStringList metaVariables;
+ QStringList metaSignals;
+ MetaDataBase::MetaInfo metaInfo;
+ QMap<QString, QString> dbControls;
+ QMap<QString, QStringList> dbTables;
+ QString exportMacro;
+ bool hadGeometry;
+ QMap<QString, QValueList<MetaDataBase::Connection> > langConnections;
+ QString currFileName;
+#ifndef KOMMANDER
+ LanguageInterface *langIface;
+#endif
+ bool hasFunctions;
+
+};
+
+#endif
diff --git a/kommander/editor/sizehandle.cpp b/kommander/editor/sizehandle.cpp
new file mode 100644
index 00000000..937d33bc
--- /dev/null
+++ b/kommander/editor/sizehandle.cpp
@@ -0,0 +1,384 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qvariant.h> // HP-UX compiler needs this here
+
+#include "sizehandle.h"
+#include "formwindow.h"
+#include "widgetfactory.h"
+
+#include <qwidget.h>
+#include <qapplication.h>
+#include <qlabel.h>
+
+#include <klocale.h>
+
+SizeHandle::SizeHandle( FormWindow *parent, Direction d, WidgetSelection *s )
+ : QWidget( parent )
+{
+ active = true;
+ setBackgroundMode( active ? PaletteText : PaletteDark );
+ setFixedSize( 6, 6 );
+ widget = 0;
+ dir =d ;
+ setMouseTracking( false );
+ formWindow = parent;
+ sel = s;
+ updateCursor();
+}
+
+void SizeHandle::updateCursor()
+{
+ if ( !active ) {
+ setCursor( arrowCursor );
+ return;
+ }
+
+ switch ( dir ) {
+ case LeftTop:
+ setCursor( sizeFDiagCursor );
+ break;
+ case Top:
+ setCursor( sizeVerCursor );
+ break;
+ case RightTop:
+ setCursor( sizeBDiagCursor );
+ break;
+ case Right:
+ setCursor( sizeHorCursor );
+ break;
+ case RightBottom:
+ setCursor( sizeFDiagCursor );
+ break;
+ case Bottom:
+ setCursor( sizeVerCursor );
+ break;
+ case LeftBottom:
+ setCursor( sizeBDiagCursor );
+ break;
+ case Left:
+ setCursor( sizeHorCursor );
+ break;
+ }
+}
+
+void SizeHandle::setActive( bool a )
+{
+ active = a;
+ setBackgroundMode( active ? PaletteText : PaletteDark );
+ updateCursor();
+}
+
+void SizeHandle::setWidget( QWidget *w )
+{
+ widget = w;
+}
+
+void SizeHandle::paintEvent( QPaintEvent * )
+{
+ if ( ( (FormWindow*)parentWidget() )->currentWidget() != widget )
+ return;
+ QPainter p( this );
+ p.setPen( blue );
+ p.drawRect( 0, 0, width(), height() );
+}
+
+void SizeHandle::mousePressEvent( QMouseEvent *e )
+{
+ if ( !widget || e->button() != LeftButton || !active )
+ return;
+ oldPressPos = e->pos();
+ geom = origGeom = QRect( widget->pos(), widget->size() );
+}
+
+void SizeHandle::mouseMoveEvent( QMouseEvent *e )
+{
+ if ( !widget || ( e->state() & LeftButton ) != LeftButton || !active )
+ return;
+ QPoint rp = mapFromGlobal( e->globalPos() );
+ QPoint d = oldPressPos - rp;
+ oldPressPos = rp;
+ QPoint checkPos = widget->parentWidget()->mapFromGlobal( e->globalPos() );
+ QRect pr = widget->parentWidget()->rect();
+
+ // ##### move code around a bit to reduce duplicated code here
+ switch ( dir ) {
+ case LeftTop: {
+ if ( checkPos.x() > pr.width() - 2 * width() || checkPos.y() > pr.height() - 2 * height() )
+ return;
+ int w = geom.width() + d.x();
+ geom.setWidth( w );
+ w = ( w / formWindow->grid().x() ) * formWindow->grid().x();
+ int h = geom.height() + d.y();
+ geom.setHeight( h );
+ h = ( h / formWindow->grid().y() ) * formWindow->grid().y();
+ int dx = widget->width() - w;
+ int dy = widget->height() - h;
+ trySetGeometry( widget, widget->x() + dx, widget->y() + dy, w, h );
+ } break;
+ case Top: {
+ if ( checkPos.y() > pr.height() - 2 * height() )
+ return;
+ int h = geom.height() + d.y();
+ geom.setHeight( h );
+ h = ( h / formWindow->grid().y() ) * formWindow->grid().y();
+ int dy = widget->height() - h;
+ trySetGeometry( widget, widget->x(), widget->y() + dy, widget->width(), h );
+ } break;
+ case RightTop: {
+ if ( checkPos.x() < 2 * width() || checkPos.y() > pr.height() - 2 * height() )
+ return;
+ int h = geom.height() + d.y();
+ geom.setHeight( h );
+ h = ( h / formWindow->grid().y() ) * formWindow->grid().y();
+ int dy = widget->height() - h;
+ int w = geom.width() - d.x();
+ geom.setWidth( w );
+ w = ( w / formWindow->grid().x() ) * formWindow->grid().x();
+ trySetGeometry( widget, widget->x(), widget->y() + dy, w, h );
+ } break;
+ case Right: {
+ if ( checkPos.x() < 2 * width() )
+ return;
+ int w = geom.width() - d.x();
+ geom.setWidth( w );
+ w = ( w / formWindow->grid().x() ) * formWindow->grid().x();
+ tryResize( widget, w, widget->height() );
+ } break;
+ case RightBottom: {
+ if ( checkPos.x() < 2 * width() || checkPos.y() < 2 * height() )
+ return;
+ int w = geom.width() - d.x();
+ geom.setWidth( w );
+ w = ( w / formWindow->grid().x() ) * formWindow->grid().x();
+ int h = geom.height() - d.y();
+ geom.setHeight( h );
+ h = ( h / formWindow->grid().y() ) * formWindow->grid().y();
+ tryResize( widget, w, h );
+ } break;
+ case Bottom: {
+ if ( checkPos.y() < 2 * height() )
+ return;
+ int h = geom.height() - d.y();
+ geom.setHeight( h );
+ h = ( h / formWindow->grid().y() ) * formWindow->grid().y();
+ tryResize( widget, widget->width(), h );
+ } break;
+ case LeftBottom: {
+ if ( checkPos.x() > pr.width() - 2 * width() || checkPos.y() < 2 * height() )
+ return;
+ int w = geom.width() + d.x();
+ geom.setWidth( w );
+ w = ( w / formWindow->grid().x() ) * formWindow->grid().x();
+ int dx = widget->width() - w;
+ int h = geom.height() - d.y();
+ geom.setHeight( h );
+ h = ( h / formWindow->grid().y() ) * formWindow->grid().y();
+ trySetGeometry( widget, widget->x() + dx, widget->y(), w, h );
+ } break;
+ case Left: {
+ if ( checkPos.x() > pr.width() - 2 * width() )
+ return;
+ int w = geom.width() + d.x();
+ geom.setWidth( w );
+ w = ( w / formWindow->grid().x() ) * formWindow->grid().x();
+ int dx = widget->width() - w;
+ trySetGeometry( widget, widget->x() + dx, widget->y(), w, widget->height() );
+ } break;
+ }
+
+ QPoint p = pos();
+ sel->updateGeometry();
+ oldPressPos += ( p - pos() );
+
+ formWindow->sizePreview()->setText( QString( "%1/%2" ).arg( widget->width() ).arg( widget->height() ) );
+ formWindow->sizePreview()->adjustSize();
+ QRect lg( formWindow->mapFromGlobal( e->globalPos() ) + QPoint( 16, 16 ),
+ formWindow->sizePreview()->size() );
+ formWindow->checkPreviewGeometry( lg );
+ formWindow->sizePreview()->setGeometry( lg );
+ formWindow->sizePreview()->show();
+ formWindow->sizePreview()->raise();
+ if ( WidgetFactory::layoutType( widget ) != WidgetFactory::NoLayout )
+ formWindow->updateChildSelections( widget );
+}
+
+void SizeHandle::mouseReleaseEvent( QMouseEvent *e )
+{
+ if ( e->button() != LeftButton || !active )
+ return;
+
+ formWindow->sizePreview()->hide();
+ if ( geom != widget->geometry() )
+ formWindow->commandHistory()->addCommand( new ResizeCommand( i18n("Resize" ),
+ formWindow,
+ widget, origGeom,
+ widget->geometry() ) );
+ formWindow->emitUpdateProperties( widget );
+}
+
+void SizeHandle::trySetGeometry( QWidget *w, int x, int y, int width, int height )
+{
+ int minw = QMAX( w->minimumSizeHint().width(), w->minimumSize().width() );
+ minw = QMAX( minw, 2 * formWindow->grid().x() );
+ int minh = QMAX( w->minimumSizeHint().height(), w->minimumSize().height() );
+ minh = QMAX( minh, 2 * formWindow->grid().y() );
+ if ( QMAX( minw, width ) > w->maximumWidth() ||
+ QMAX( minh, height ) > w->maximumHeight() )
+ return;
+ if ( width < minw && x != w->x() )
+ x -= minw - width;
+ if ( height < minh && y != w->y() )
+ y -= minh - height;
+ w->setGeometry( x, y, QMAX( minw, width ), QMAX( minh, height ) );
+}
+
+void SizeHandle::tryResize( QWidget *w, int width, int height )
+{
+ int minw = QMAX( w->minimumSizeHint().width(), w->minimumSize().width() );
+ minw = QMAX( minw, 16 );
+ int minh = QMAX( w->minimumSizeHint().height(), w->minimumSize().height() );
+ minh = QMAX( minh, 16 );
+ w->resize( QMAX( minw, width ), QMAX( minh, height ) );
+}
+
+// ------------------------------------------------------------------------
+
+WidgetSelection::WidgetSelection( FormWindow *parent, QPtrDict<WidgetSelection> *selDict )
+ : selectionDict( selDict )
+{
+ formWindow = parent;
+ for ( int i = SizeHandle::LeftTop; i <= SizeHandle::Left; ++i ) {
+ handles.insert( i, new SizeHandle( formWindow, (SizeHandle::Direction)i, this ) );
+ }
+ hide();
+}
+
+void WidgetSelection::setWidget( QWidget *w, bool updateDict )
+{
+ if ( !w ) {
+ hide();
+ if ( updateDict )
+ selectionDict->remove( wid );
+ wid = 0;
+ return;
+ }
+
+ wid = w;
+ bool active = !wid->parentWidget() || WidgetFactory::layoutType( wid->parentWidget() ) == WidgetFactory::NoLayout;
+ for ( int i = SizeHandle::LeftTop; i <= SizeHandle::Left; ++i ) {
+ SizeHandle *h = handles[ i ];
+ if ( h ) {
+ h->setWidget( wid );
+ h->setActive( active );
+ }
+ }
+ updateGeometry();
+ show();
+ if ( updateDict )
+ selectionDict->insert( w, this );
+}
+
+bool WidgetSelection::isUsed() const
+{
+ return wid != 0;
+}
+
+void WidgetSelection::updateGeometry()
+{
+ if ( !wid )
+ return;
+
+ QPoint p = wid->parentWidget()->mapToGlobal( wid->pos() );
+ p = formWindow->mapFromGlobal( p );
+ QRect r( p, wid->size() );
+
+ int w = 6;
+ int h = 6;
+
+ for ( int i = SizeHandle::LeftTop; i <= SizeHandle::Left; ++i ) {
+ SizeHandle *hndl = handles[ i ];
+ if ( !hndl )
+ continue;
+ switch ( i ) {
+ case SizeHandle::LeftTop:
+ hndl->move( r.x() - w / 2, r.y() - h / 2 );
+ break;
+ case SizeHandle::Top:
+ hndl->move( r.x() + r.width() / 2 - w / 2, r.y() - h / 2 );
+ break;
+ case SizeHandle::RightTop:
+ hndl->move( r.x() + r.width() - w / 2, r.y() - h / 2 );
+ break;
+ case SizeHandle::Right:
+ hndl->move( r.x() + r.width() - w / 2, r.y() + r.height() / 2 - h / 2 );
+ break;
+ case SizeHandle::RightBottom:
+ hndl->move( r.x() + r.width() - w / 2, r.y() + r.height() - h / 2 );
+ break;
+ case SizeHandle::Bottom:
+ hndl->move( r.x() + r.width() / 2 - w / 2, r.y() + r.height() - h / 2 );
+ break;
+ case SizeHandle::LeftBottom:
+ hndl->move( r.x() - w / 2, r.y() + r.height() - h / 2 );
+ break;
+ case SizeHandle::Left:
+ hndl->move( r.x() - w / 2, r.y() + r.height() / 2 - h / 2 );
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void WidgetSelection::hide()
+{
+ for ( int i = SizeHandle::LeftTop; i <= SizeHandle::Left; ++i ) {
+ SizeHandle *h = handles[ i ];
+ if ( h )
+ h->hide();
+ }
+}
+
+void WidgetSelection::show()
+{
+ for ( int i = SizeHandle::LeftTop; i <= SizeHandle::Left; ++i ) {
+ SizeHandle *h = handles[ i ];
+ if ( h ) {
+ h->show();
+ h->raise();
+ }
+ }
+}
+
+void WidgetSelection::update()
+{
+ for ( int i = SizeHandle::LeftTop; i <= SizeHandle::Left; ++i ) {
+ SizeHandle *h = handles[ i ];
+ if ( h )
+ h->update();
+ }
+}
+
+QWidget *WidgetSelection::widget() const
+{
+ return wid;
+}
+#include "sizehandle.moc"
diff --git a/kommander/editor/sizehandle.h b/kommander/editor/sizehandle.h
new file mode 100644
index 00000000..ccd6a6ef
--- /dev/null
+++ b/kommander/editor/sizehandle.h
@@ -0,0 +1,91 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef SIZEHANDLE_H
+#define SIZEHANDLE_H
+
+#include <qwidget.h>
+#include <qintdict.h>
+#include <qptrdict.h>
+
+class QMouseEvent;
+class FormWindow;
+class WidgetSelection;
+class QPaintEvent;
+
+class SizeHandle : public QWidget
+{
+ Q_OBJECT
+
+public:
+ enum Direction { LeftTop, Top, RightTop, Right, RightBottom, Bottom, LeftBottom, Left };
+
+ SizeHandle( FormWindow *parent, Direction d, WidgetSelection *s );
+ void setWidget( QWidget *w );
+ void setActive( bool a );
+ void updateCursor();
+
+ void setEnabled( bool ) {}
+
+protected:
+ void paintEvent( QPaintEvent *e );
+ void mousePressEvent( QMouseEvent *e );
+ void mouseMoveEvent( QMouseEvent *e );
+ void mouseReleaseEvent( QMouseEvent *e );
+
+private:
+ void trySetGeometry( QWidget *w, int x, int y, int width, int height );
+ void tryResize( QWidget *w, int width, int height );
+
+private:
+ QWidget *widget;
+ Direction dir;
+ QPoint oldPressPos;
+ FormWindow *formWindow;
+ WidgetSelection *sel;
+ QRect geom, origGeom;
+ bool active;
+
+};
+
+class WidgetSelection
+{
+public:
+ WidgetSelection( FormWindow *parent, QPtrDict<WidgetSelection> *selDict );
+
+ void setWidget( QWidget *w, bool updateDict = TRUE );
+ bool isUsed() const;
+
+ void updateGeometry();
+ void hide();
+ void show();
+ void update();
+
+ QWidget *widget() const;
+
+protected:
+ QIntDict<SizeHandle> handles;
+ QWidget *wid;
+ FormWindow *formWindow;
+ QPtrDict<WidgetSelection> *selectionDict;
+
+};
+
+#endif
diff --git a/kommander/editor/styledbutton.cpp b/kommander/editor/styledbutton.cpp
new file mode 100644
index 00000000..9b77b941
--- /dev/null
+++ b/kommander/editor/styledbutton.cpp
@@ -0,0 +1,290 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qvariant.h> // HP-UX compiler needs this here
+#include "styledbutton.h"
+#include "formwindow.h"
+#include "pixmapchooser.h"
+#include <kcolordialog.h>
+#include <qpalette.h>
+#include <qlabel.h>
+#include <qpainter.h>
+#include <qimage.h>
+#include <qpixmap.h>
+#include <qapplication.h>
+#include <qdragobject.h>
+#include <qstyle.h>
+
+StyledButton::StyledButton(QWidget* parent, const char* name)
+ : QButton( parent, name ), pix( 0 ), spix( 0 ), s( 0 ), formWindow( 0 ), mousePressed( false )
+{
+ setMinimumSize( minimumSizeHint() );
+ setAcceptDrops( true );
+
+ connect( this, SIGNAL(clicked()), SLOT(onEditor()));
+
+ setEditor( ColorEditor );
+}
+
+StyledButton::StyledButton( const QBrush& b, QWidget* parent, const char* name, WFlags f )
+ : QButton( parent, name, f ), spix( 0 ), s( 0 ), formWindow( 0 )
+{
+ col = b.color();
+ pix = b.pixmap();
+ setMinimumSize( minimumSizeHint() );
+}
+
+StyledButton::~StyledButton()
+{
+}
+
+void StyledButton::setEditor( EditorType e )
+{
+ if ( edit == e )
+ return;
+
+ edit = e;
+ update();
+}
+
+StyledButton::EditorType StyledButton::editor() const
+{
+ return edit;
+}
+
+void StyledButton::setColor( const QColor& c )
+{
+ col = c;
+ update();
+}
+
+void StyledButton::setPixmap( const QPixmap & pm )
+{
+ if ( !pm.isNull() ) {
+ delete pix;
+ pix = new QPixmap( pm );
+ } else {
+ delete pix;
+ pix = 0;
+ }
+ scalePixmap();
+}
+
+QColor StyledButton::color() const
+{
+ return col;
+}
+
+QPixmap* StyledButton::pixmap() const
+{
+ return pix;
+}
+
+bool StyledButton::scale() const
+{
+ return s;
+}
+
+void StyledButton::setScale( bool on )
+{
+ if ( s == on )
+ return;
+
+ s = on;
+ scalePixmap();
+}
+
+QSize StyledButton::sizeHint() const
+{
+ return QSize( 50, 25 );
+}
+
+QSize StyledButton::minimumSizeHint() const
+{
+ return QSize( 50, 25 );
+}
+
+void StyledButton::scalePixmap()
+{
+ delete spix;
+
+ if ( pix ) {
+ spix = new QPixmap( 6*width()/8, 6*height()/8 );
+ QImage img = pix->convertToImage();
+
+ spix->convertFromImage( s? img.smoothScale( 6*width()/8, 6*height()/8 ) : img );
+ } else {
+ spix = 0;
+ }
+
+ update();
+}
+
+void StyledButton::resizeEvent( QResizeEvent* e )
+{
+ scalePixmap();
+ QButton::resizeEvent( e );
+}
+
+void StyledButton::drawButton( QPainter *paint )
+{
+ style().drawPrimitive(QStyle::PE_ButtonBevel, paint, rect(), colorGroup(),
+ isDown() ? QStyle::Style_Sunken : QStyle::Style_Raised);
+ drawButtonLabel(paint);
+
+ if (hasFocus())
+ style().drawPrimitive(QStyle::PE_FocusRect, paint,
+ style().subRect(QStyle::SR_PushButtonFocusRect, this),
+ colorGroup(), QStyle::Style_Default);
+}
+
+void StyledButton::drawButtonLabel( QPainter *paint )
+{
+ QColor pen = isEnabled() ?
+ hasFocus() ? palette().active().buttonText() : palette().inactive().buttonText()
+ : palette().disabled().buttonText();
+ paint->setPen( pen );
+
+ if(!isEnabled()) {
+ paint->setBrush( QBrush( colorGroup().button() ) );
+ }
+ else if ( edit == PixmapEditor && spix ) {
+ paint->setBrush( QBrush( col, *spix ) );
+ paint->setBrushOrigin( width()/8, height()/8 );
+ } else
+ paint->setBrush( QBrush( col ) );
+
+ paint->drawRect( width()/8, height()/8, 6*width()/8, 6*height()/8 );
+}
+
+void StyledButton::onEditor()
+{
+ switch (edit) {
+ case ColorEditor: {
+ QColor c = palette().active().background();
+ if ( KColorDialog::getColor( c, this ) == QDialog::Accepted ) {
+ setColor( c );
+ emit changed();
+ }
+ } break;
+ case PixmapEditor: {
+ QPixmap p;
+ if ( pixmap() )
+ p = qChoosePixmap( this, formWindow, *pixmap() );
+ else
+ p = qChoosePixmap( this, formWindow, QPixmap() );
+ if ( !p.isNull() ) {
+ setPixmap( p );
+ emit changed();
+ }
+ } break;
+ default:
+ break;
+ }
+}
+
+void StyledButton::mousePressEvent(QMouseEvent* e)
+{
+ QButton::mousePressEvent(e);
+ mousePressed = true;
+ pressPos = e->pos();
+}
+
+void StyledButton::mouseMoveEvent(QMouseEvent* e)
+{
+ QButton::mouseMoveEvent( e );
+#ifndef QT_NO_DRAGANDDROP
+ if ( !mousePressed )
+ return;
+ if ( ( pressPos - e->pos() ).manhattanLength() > QApplication::startDragDistance() ) {
+ if ( edit == ColorEditor ) {
+ QColorDrag *drg = new QColorDrag( col, this );
+ QPixmap pix( 25, 25 );
+ pix.fill( col );
+ QPainter p( &pix );
+ p.drawRect( 0, 0, pix.width(), pix.height() );
+ p.end();
+ drg->setPixmap( pix );
+ mousePressed = false;
+ drg->dragCopy();
+ }
+ else if ( edit == PixmapEditor && pix && !pix->isNull() ) {
+ QImage img = pix->convertToImage();
+ QImageDrag *drg = new QImageDrag( img, this );
+ if(spix)
+ drg->setPixmap( *spix );
+ mousePressed = false;
+ drg->dragCopy();
+ }
+ }
+#endif
+}
+
+#ifndef QT_NO_DRAGANDDROP
+void StyledButton::dragEnterEvent( QDragEnterEvent *e )
+{
+ setFocus();
+ if ( edit == ColorEditor && QColorDrag::canDecode( e ) )
+ e->accept();
+ else if ( edit == PixmapEditor && QImageDrag::canDecode( e ) )
+ e->accept();
+ else
+ e->ignore();
+}
+
+void StyledButton::dragLeaveEvent( QDragLeaveEvent * )
+{
+ if ( hasFocus() )
+ parentWidget()->setFocus();
+}
+
+void StyledButton::dragMoveEvent( QDragMoveEvent *e )
+{
+ if ( edit == ColorEditor && QColorDrag::canDecode( e ) )
+ e->accept();
+ else if ( edit == PixmapEditor && QImageDrag::canDecode( e ) )
+ e->accept();
+ else
+ e->ignore();
+}
+
+void StyledButton::dropEvent( QDropEvent *e )
+{
+ if ( edit == ColorEditor && QColorDrag::canDecode( e ) ) {
+ QColor color;
+ QColorDrag::decode( e, color );
+ setColor(color);
+ emit changed();
+ e->accept();
+ }
+ else if ( edit == PixmapEditor && QImageDrag::canDecode( e ) ) {
+ QImage img;
+ QImageDrag::decode( e, img );
+ QPixmap pm;
+ pm.convertFromImage(img);
+ setPixmap(pm);
+ emit changed();
+ e->accept();
+ } else {
+ e->ignore();
+ }
+}
+#endif // QT_NO_DRAGANDDROP
+#include "styledbutton.moc"
diff --git a/kommander/editor/styledbutton.h b/kommander/editor/styledbutton.h
new file mode 100644
index 00000000..a2927084
--- /dev/null
+++ b/kommander/editor/styledbutton.h
@@ -0,0 +1,97 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef STYLEDBUTTON_H
+#define STYLEDBUTTON_H
+
+#include <qbutton.h>
+#include <qpixmap.h>
+
+class QColor;
+class QBrush;
+class FormWindow;
+
+class StyledButton : public QButton
+{
+ Q_OBJECT
+
+ Q_PROPERTY( QColor color READ color WRITE setColor )
+ Q_PROPERTY( QPixmap pixmap READ pixmap WRITE setPixmap )
+ Q_PROPERTY( EditorType editor READ editor WRITE setEditor )
+ Q_PROPERTY( bool scale READ scale WRITE setScale )
+
+ Q_ENUMS( EditorType )
+
+public:
+ enum EditorType { ColorEditor, PixmapEditor };
+
+ StyledButton( QWidget* parent = 0, const char* name = 0 );
+ StyledButton( const QBrush& b, QWidget* parent = 0, const char* name = 0, WFlags f = 0 );
+ ~StyledButton();
+
+ void setEditor( EditorType );
+ EditorType editor() const;
+
+ void setColor( const QColor& );
+ void setPixmap( const QPixmap& );
+
+ QPixmap* pixmap() const;
+ QColor color() const;
+
+ void setScale( bool );
+ bool scale() const;
+
+ QSize sizeHint() const;
+ QSize minimumSizeHint() const;
+
+ void setFormWindow( FormWindow *fw ) { formWindow = fw; }
+
+public slots:
+ virtual void onEditor();
+
+signals:
+ void changed();
+
+protected:
+ void mousePressEvent(QMouseEvent*);
+ void mouseMoveEvent(QMouseEvent*);
+#ifndef QT_NO_DRAGANDDROP
+ void dragEnterEvent ( QDragEnterEvent * );
+ void dragMoveEvent ( QDragMoveEvent * );
+ void dragLeaveEvent ( QDragLeaveEvent * );
+ void dropEvent ( QDropEvent * );
+#endif // QT_NO_DRAGANDDROP
+ void drawButton( QPainter* );
+ void drawButtonLabel( QPainter* );
+ void resizeEvent( QResizeEvent* );
+ void scalePixmap();
+
+private:
+ QPixmap* pix;
+ QPixmap* spix; // the pixmap scaled down to fit into the button
+ QColor col;
+ EditorType edit;
+ bool s;
+ FormWindow *formWindow;
+ QPoint pressPos;
+ bool mousePressed;
+};
+
+#endif //STYLEDBUTTON_H
diff --git a/kommander/editor/tableeditor.ui b/kommander/editor/tableeditor.ui
new file mode 100644
index 00000000..26345a3f
--- /dev/null
+++ b/kommander/editor/tableeditor.ui
@@ -0,0 +1,813 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>TableEditorBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>TableEditorBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>538</width>
+ <height>369</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Edit Table</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QTable" row="0" column="0">
+ <column>
+ <property name="text">
+ <string>1</string>
+ </property>
+ </column>
+ <row>
+ <property name="text">
+ <string>1</string>
+ </property>
+ </row>
+ <property name="name">
+ <cstring>table</cstring>
+ </property>
+ <property name="numRows">
+ <number>1</number>
+ </property>
+ <property name="numCols">
+ <number>1</number>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout11</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and apply all the changes.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonApply</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Apply</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Apply all changes.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and discard any changes.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QTabWidget" row="0" column="1">
+ <property name="name">
+ <cstring>TabWidget</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>columns_tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Co&amp;lumns</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer row="4" column="2">
+ <property name="name">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QListBox" row="0" column="0" rowspan="6" colspan="1">
+ <property name="name">
+ <cstring>listColumns</cstring>
+ </property>
+ </widget>
+ <spacer row="3" column="1">
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton" row="4" column="1">
+ <property name="name">
+ <cstring>buttonColumnUp</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Move up</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Move the selected item up.&lt;/b&gt;&lt;p&gt;The top-most column will be the first column of the list.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="5" column="1">
+ <property name="name">
+ <cstring>buttonColumnDown</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Move down</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Move the selected item down.&lt;/b&gt;&lt;p&gt;The top-most column will be the first column of the list.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>buttonDeleteColumn</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Delete Column</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>buttonNewColumn</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;New Column</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout6</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>labelTable</cstring>
+ </property>
+ <property name="text">
+ <string>Table:</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="3" column="1">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>labelColumnPixmap</cstring>
+ </property>
+ <property name="text">
+ <string>Label4</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonDeleteColPixmap</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image2</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Delete Pixmap</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Delete the selected item's pixmap.&lt;/b&gt;&lt;p&gt;The pixmap in the current column of the selected item will be deleted.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonChooseColPixmap</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Select a Pixmap</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Select a pixmap file for the item.&lt;/b&gt;&lt;p&gt;The pixmap will be changed in the current column of the selected item.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Label:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>editColumnText</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>Label2</cstring>
+ </property>
+ <property name="text">
+ <string>Pixmap:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>itemChoosePixmap</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>labelFields</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Field:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>comboFields</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>editColumnText</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <property name="name">
+ <cstring>comboFields</cstring>
+ </property>
+ <property name="editable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>labelTableValue</cstring>
+ </property>
+ <property name="text">
+ <string>&lt;no table&gt;</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>rows_tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>&amp;Rows</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer row="4" column="2">
+ <property name="name">
+ <cstring>Spacer3_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton" row="4" column="1">
+ <property name="name">
+ <cstring>buttonRowUp</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Move up</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Move the selected item up.&lt;/b&gt;&lt;p&gt;The top-most column will be the first column of the list.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QListBox" row="0" column="0" rowspan="6" colspan="1">
+ <property name="name">
+ <cstring>listRows</cstring>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="5" column="1">
+ <property name="name">
+ <cstring>buttonRowDown</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Move down</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Move the selected item down.&lt;/b&gt;&lt;p&gt;The top-most column will be the first column of the list.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <spacer row="3" column="1">
+ <property name="name">
+ <cstring>Spacer2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>buttonNewRow</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;New Row</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>buttonDeleteRow</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Delete Row</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout7_2</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel2_3</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Label:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>editRowText</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>Label2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Pixmap:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>itemChoosePixmap</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="1">
+ <property name="name">
+ <cstring>Layout2_2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>labelRowPixmap</cstring>
+ </property>
+ <property name="text">
+ <string>Label4</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonDeleteRowPixmap</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image2</pixmap>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Delete Pixmap</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Delete the selected item's pixmap.&lt;/b&gt;&lt;p&gt;The pixmap in the current column of the selected item will be deleted.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonChooseRowPixmap</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>30</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Select a Pixmap</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Select a pixmap file for the item.&lt;/b&gt;&lt;p&gt;The pixmap will be changed in the current column of the selected item.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>editRowText</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ </widget>
+ </grid>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="1040">789c5dcf4d73a2401006e0bbbf82726ed61609ca0c4c6ded0125dfd1985baab6f600338c280a46fc08a6f6bf2f3ddd26abc0619eb7677a9aab9ef3361d3bbdab4ebd4db673e5a83cd9383dbd5bad9adf7f7e7d76ba9e70dacfe78ed7fdd1e9ba8e72265599c17adaae99773df033cb9818225f2cc38132027887f4af8d01ee817dc935720d1c7827d648c1910f969273cd8123e4a93a21d2d95ba0ef098d631864409b6f2c13c195063e210389d55720ef0b8dd56764e021c7c8905acd2c93b66aa71a224389fffb0e14fd4062f51119d290115252ab2391c6585ab653a5f6de033294f8fbf74849175544eacc80c120e478b644267451434c90a9659a78d8aa2066585d00c33425ae80d25702b92352756ea91475ce90ba8f4c80299cb5177d58ea8c5a6d819a67b4595b66865a29602632628e3406b9011a73a26b1f96a40c575f19536dc7d959c6543e5f1466f95fd646aba22cabf5fb57c636f9a24ddaa75e52c6b6f90ea3aada2f313b7ccc1b1b1da3e128a67df09aaa1addb82963dfb3b8b7cdf18e9dcfe70e8b687f91b1fba25acf2eb2a289460f17d9a28c4c7c9e1d8ae8f1e9227b1e4feafa859d9f8de378fa8afbfefeecfc030f08f1a3</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="1085">789c5dd0cd6ee2301000e03b4f11911b5ad1189290a8da0324a5e90f29941e2aadf6e0d84ea10d1020849ad5befb7a3cceaa29e2e06f663c33ce55cf7a9dcfacde55e758d16acd2cb6a207abc74f9b8dfcf5fbe79f4e97f896fabb8145ba3f3addbec5ac74b715704ed5d9769c01cb73e0423368f80224c190e53e70091c389e83d98366e83942679f0c43cc7e0087c4f3307b63c8b1d559337459c6810f48df137aab49436c750f748917320f78418e4cf65993fa04b33572c4313b067a039f333de80e39e238680ff4d5d2581c69d2c0c3ad8e0db1f30619127cd1dcd00c7a4452824c80a321359d73cd8c129c1b1b0acc726030a414b31299f9989d1952a4d0ccc23073819f861c973c2133d3b904aacf6ceeda9a8c12bc5b219929de21f9005900a99bf9f8e9a8a159728a5477f5d77847367719305373b1788b14668d4c9337d95b2437ef5d03b9c84df10a28fc866fc05c9522fbf0b369c6b8d0c7ffb1fc6db57effb0bfc68acd7657ee0fedba63599dea73d18a7dca525ec6ed3aa16293a81d2bf232beb1bfc578d58a416731ad641da95381b1e3f496ca939432c9f3bb7b8c450f8fb39994b18c93493a36fda2a7b9aa8ae3e4b278b69b192aa822499dc2d6cddc68b94ff697f46c7fdd255ad6f5e2dbdbfac7c3cbd8ecf7f7baf30f538f0154</data>
+ </image>
+ <image name="image2">
+ <data format="XPM.GZ" length="409">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022630543251d2e253d856405bffcbc54105b19c856360003103711c6b53006ab440370316528264b4c198450c5808a94d1ed00aac214832b43124b544ec414d34b4c4c441103f11341120831309758313d0cf3b0840b7258d55a73010092c14eca</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>buttonApply</sender>
+ <signal>clicked()</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>applyClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>okClicked()</slot>
+ </connection>
+ <connection>
+ <sender>listColumns</sender>
+ <signal>currentChanged(QListBoxItem*)</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>currentColumnChanged(QListBoxItem*)</slot>
+ </connection>
+ <connection>
+ <sender>listColumns</sender>
+ <signal>selectionChanged(QListBoxItem*)</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>currentColumnChanged(QListBoxItem*)</slot>
+ </connection>
+ <connection>
+ <sender>editColumnText</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>columnTextChanged(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>buttonNewColumn</sender>
+ <signal>clicked()</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>newColumnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonDeleteColumn</sender>
+ <signal>clicked()</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>deleteColumnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonColumnUp</sender>
+ <signal>clicked()</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>columnUpClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonColumnDown</sender>
+ <signal>clicked()</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>columnDownClicked()</slot>
+ </connection>
+ <connection>
+ <sender>comboFields</sender>
+ <signal>activated(const QString&amp;)</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>currentFieldChanged(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>listRows</sender>
+ <signal>selectionChanged(QListBoxItem*)</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>currentRowChanged(QListBoxItem*)</slot>
+ </connection>
+ <connection>
+ <sender>listRows</sender>
+ <signal>currentChanged(QListBoxItem*)</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>currentRowChanged(QListBoxItem*)</slot>
+ </connection>
+ <connection>
+ <sender>buttonNewRow</sender>
+ <signal>clicked()</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>newRowClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonDeleteRow</sender>
+ <signal>clicked()</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>deleteRowClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonRowUp</sender>
+ <signal>clicked()</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>rowUpClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonRowDown</sender>
+ <signal>clicked()</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>rowDownClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonDeleteRowPixmap</sender>
+ <signal>clicked()</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>deleteRowPixmapClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonChooseRowPixmap</sender>
+ <signal>clicked()</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>chooseRowPixmapClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonDeleteColPixmap</sender>
+ <signal>clicked()</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>deleteColPixmapClicked()</slot>
+ </connection>
+ <connection>
+ <sender>editRowText</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>rowTextChanged(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>buttonChooseColPixmap</sender>
+ <signal>clicked()</signal>
+ <receiver>TableEditorBase</receiver>
+ <slot>chooseColPixmapClicked()</slot>
+ </connection>
+ <slot access="protected" language="C++" returnType="void">init()</slot>
+ <slot access="protected" language="C++" returnType="void">destroy()</slot>
+ <slot access="protected" language="C++" returnType="void">applyClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">chooseRowPixmapClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">columnTextChanged( const QString &amp; )</slot>
+ <slot access="protected" language="C++" returnType="void">columnUpClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">currentColumnChanged( QListBoxItem * )</slot>
+ <slot access="protected" language="C++" returnType="void">currentFieldChanged( const QString &amp; )</slot>
+ <slot access="protected" language="C++" returnType="void">currentRowChanged( QListBoxItem * )</slot>
+ <slot access="protected" language="C++" returnType="void">deleteColPixmapClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">deleteColumnClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">deleteRowClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">deleteRowPixmapClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">newColumnClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">newRowClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">chooseColPixmapClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">okClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">rowDownClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">rowTextChanged( const QString &amp; )</slot>
+ <slot access="protected" language="C++" returnType="void">rowUpClicked()</slot>
+ <slot access="protected" language="C++" returnType="void">columnDownClicked()</slot>
+</connections>
+<tabstops>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+ <tabstop>table</tabstop>
+ <tabstop>TabWidget</tabstop>
+ <tabstop>listColumns</tabstop>
+ <tabstop>buttonNewColumn</tabstop>
+ <tabstop>buttonDeleteColumn</tabstop>
+ <tabstop>comboFields</tabstop>
+ <tabstop>editColumnText</tabstop>
+ <tabstop>buttonDeleteColPixmap</tabstop>
+ <tabstop>buttonChooseColPixmap</tabstop>
+ <tabstop>buttonColumnUp</tabstop>
+ <tabstop>buttonColumnDown</tabstop>
+ <tabstop>buttonApply</tabstop>
+ <tabstop>listRows</tabstop>
+ <tabstop>buttonNewRow</tabstop>
+ <tabstop>buttonDeleteRow</tabstop>
+ <tabstop>editRowText</tabstop>
+ <tabstop>buttonDeleteRowPixmap</tabstop>
+ <tabstop>buttonChooseRowPixmap</tabstop>
+ <tabstop>buttonRowUp</tabstop>
+ <tabstop>buttonRowDown</tabstop>
+ <tabstop>buttonHelp</tabstop>
+</tabstops>
+</UI>
diff --git a/kommander/editor/tableeditorimpl.cpp b/kommander/editor/tableeditorimpl.cpp
new file mode 100644
index 00000000..d8cfc70d
--- /dev/null
+++ b/kommander/editor/tableeditorimpl.cpp
@@ -0,0 +1,464 @@
+#include "tableeditorimpl.h"
+#ifndef QT_NO_TABLE
+#include <qtable.h>
+#endif
+#include "formwindow.h"
+#include <qlabel.h>
+#include <qcombobox.h>
+#include <qheader.h>
+#include <qlistbox.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include "pixmapchooser.h"
+#include "command.h"
+#include <qvaluelist.h>
+#include <qtabwidget.h>
+#ifndef KOMMANDER
+#include "project.h"
+#endif
+#include "metadatabase.h"
+#include "mainwindow.h"
+
+#include <klocale.h>
+
+TableEditor::TableEditor( QWidget* parent, QWidget *editWidget, FormWindow *fw, const char* name, bool modal, WFlags fl )
+ : TableEditorBase( parent, name, modal, fl ),
+#ifndef QT_NO_TABLE
+ editTable( (QTable*)editWidget ),
+#endif
+ formWindow( fw )
+{
+ connect( buttonHelp, SIGNAL( clicked() ), MainWindow::self, SLOT( showDialogHelp() ) );
+#ifndef QT_NO_TABLE
+ labelColumnPixmap->setText( "" );
+ labelRowPixmap->setText( "" );
+
+ if ( !editTable->inherits( "QDataTable" ) ) {
+ labelFields->hide();
+ comboFields->hide();
+ labelTable->hide();
+ labelTableValue->hide();
+ }
+#ifndef QT_NO_SQL
+ if ( editTable->inherits( "QDataTable" ) ) {
+ // ## why does this behave weird?
+ // TabWidget->removePage( rows_tab );
+ // rows_tab->hide();
+ // ## do this in the meantime...
+ TabWidget->setTabEnabled( rows_tab, false );
+ }
+
+ if ( formWindow->project() && editTable->inherits( "QDataTable" ) ) {
+ QStringList lst = MetaDataBase::fakeProperty( editTable, "database" ).toStringList();
+ if ( lst.count() == 2 && !lst[ 0 ].isEmpty() && !lst[ 1 ].isEmpty() ) {
+ QStringList fields;
+ fields << i18n( "<no field>" );
+ fields += formWindow->project()->databaseFieldList( lst[ 0 ], lst[ 1 ] );
+ comboFields->insertStringList( fields );
+ }
+ if ( !lst[ 1 ].isEmpty() )
+ labelTableValue->setText( lst[ 1 ] );
+ }
+#endif
+
+ readFromTable();
+#endif
+}
+
+TableEditor::~TableEditor()
+{
+}
+
+void TableEditor::columnDownClicked()
+{
+ if ( listColumns->currentItem() == -1 ||
+ listColumns->currentItem() == (int)listColumns->count() - 1 ||
+ listColumns->count() < 2 )
+ return;
+ saveFieldMap();
+ int index = listColumns->currentItem() + 1;
+ QListBoxItem *i = listColumns->item( listColumns->currentItem() );
+ listColumns->takeItem( i );
+ listColumns->insertItem( i, index );
+ listColumns->setCurrentItem( i );
+ readColumns();
+ restoreFieldMap();
+ currentColumnChanged( i );
+}
+
+void TableEditor::columnTextChanged( const QString &s )
+{
+ if ( listColumns->currentItem() == -1 )
+ return;
+ listColumns->blockSignals( true );
+ listColumns->changeItem( s, listColumns->currentItem() );
+ listColumns->blockSignals( false );
+#ifndef QT_NO_TABLE
+ if ( table->horizontalHeader()->iconSet( listColumns->currentItem() ) )
+ table->horizontalHeader()->setLabel( listColumns->currentItem(),
+ *table->horizontalHeader()->iconSet( listColumns->currentItem() ), s );
+ else
+ table->horizontalHeader()->setLabel( listColumns->currentItem(), s );
+#endif
+}
+
+void TableEditor::columnUpClicked()
+{
+ if ( listColumns->currentItem() <= 0 ||
+ listColumns->count() < 2 )
+ return;
+ saveFieldMap();
+ int index = listColumns->currentItem() - 1;
+ QListBoxItem *i = listColumns->item( listColumns->currentItem() );
+ listColumns->takeItem( i );
+ listColumns->insertItem( i, index );
+ listColumns->setCurrentItem( i );
+ readColumns();
+ restoreFieldMap();
+ currentColumnChanged( i );
+}
+
+void TableEditor::currentColumnChanged( QListBoxItem *i )
+{
+ if ( !i )
+ return;
+ editColumnText->blockSignals( true );
+ editColumnText->setText( i->text() );
+ if ( i->pixmap() )
+ labelColumnPixmap->setPixmap( *i->pixmap() );
+ else
+ labelColumnPixmap->setText( "" );
+ editColumnText->blockSignals( false );
+
+#ifndef QT_NO_TABLE
+ if ( editTable->inherits( "QDataTable" ) ) {
+ QString s = *fieldMap.find( listColumns->index( i ) );
+ if ( s.isEmpty() )
+ comboFields->setCurrentItem( 0 );
+ else if ( comboFields->listBox()->findItem( s ) )
+ comboFields->setCurrentItem( comboFields->listBox()->index( comboFields->listBox()->findItem( s ) ) );
+ else
+ comboFields->lineEdit()->setText( s );
+ }
+#endif
+}
+
+void TableEditor::currentFieldChanged( const QString &s )
+{
+ if ( listColumns->currentItem() == -1 )
+ return;
+ fieldMap.remove( listColumns->currentItem() );
+ fieldMap.insert( listColumns->currentItem(), s );
+ editColumnText->blockSignals( true ); //## necessary
+ QString newColText = s.mid(0,1).upper() + s.mid(1);
+ editColumnText->setText( newColText );
+ columnTextChanged( newColText );
+ editColumnText->blockSignals( false );
+}
+
+void TableEditor::currentRowChanged( QListBoxItem *i )
+{
+ if ( !i )
+ return;
+ editRowText->blockSignals( true );
+ editRowText->setText( i->text() );
+ if ( i->pixmap() )
+ labelRowPixmap->setPixmap( *i->pixmap() );
+ else
+ labelRowPixmap->setText( "" );
+ editRowText->blockSignals( false );
+}
+
+void TableEditor::deleteColumnClicked()
+{
+ if ( listColumns->currentItem() == -1 )
+ return;
+#ifndef QT_NO_TABLE
+ table->setNumCols( table->numCols() - 1 );
+ delete listColumns->item( listColumns->currentItem() );
+ readColumns();
+ if ( listColumns->firstItem() ) {
+ listColumns->setCurrentItem( listColumns->firstItem() );
+ listColumns->setSelected( listColumns->firstItem(), true );
+ }
+#endif
+}
+
+void TableEditor::deleteRowClicked()
+{
+ if ( listRows->currentItem() == -1 )
+ return;
+#ifndef QT_NO_TABLE
+ table->setNumRows( table->numRows() - 1 );
+ delete listRows->item( listRows->currentItem() );
+ readRows();
+ if ( listRows->firstItem() ) {
+ listRows->setCurrentItem( listRows->firstItem() );
+ listRows->setSelected( listRows->firstItem(), true );
+ }
+#endif
+}
+
+void TableEditor::newColumnClicked()
+{
+#ifndef QT_NO_TABLE
+ table->setNumCols( table->numCols() + 1 );
+ QMap<QString, bool> m;
+ for ( int i = 0; i < table->numCols() - 1; ++i )
+ m.insert( table->horizontalHeader()->label( i ), true );
+ int n = table->numCols() - 1;
+ QString t = QString::number( n );
+ while ( m.find( t ) != m.end() )
+ t = QString::number( ++n );
+ table->horizontalHeader()->setLabel( table->numCols() - 1, t );
+ listColumns->insertItem( t );
+ QListBoxItem *item = listColumns->item( listColumns->count() - 1 );
+ listColumns->setCurrentItem( item );
+ listColumns->setSelected( item, true );
+ if ( editTable->inherits( "QDataTable" ) ) {
+ comboFields->setFocus();
+ } else {
+ editColumnText->setFocus();
+ editColumnText->selectAll();
+ }
+#endif
+}
+
+void TableEditor::newRowClicked()
+{
+#ifndef QT_NO_TABLE
+ table->setNumRows( table->numRows() + 1 );
+ QMap<QString, bool> m;
+ for ( int i = 0; i < table->numRows() - 1; ++i )
+ m.insert( table->verticalHeader()->label( i ), true );
+ int n = table->numRows() - 1;
+ QString t = QString::number( n );
+ while ( m.find( t ) != m.end() )
+ t = QString::number( ++n );
+ table->verticalHeader()->setLabel( table->numRows() - 1, t );
+ listRows->insertItem( t );
+ QListBoxItem *item = listRows->item( listRows->count() - 1 );
+ listRows->setCurrentItem( item );
+ listRows->setSelected( item, true );
+#endif
+}
+
+void TableEditor::okClicked()
+{
+ applyClicked();
+ accept();
+}
+
+void TableEditor::rowDownClicked()
+{
+ if ( listRows->currentItem() == -1 ||
+ listRows->currentItem() == (int)listRows->count() - 1 ||
+ listRows->count() < 2 )
+ return;
+ int index = listRows->currentItem() + 1;
+ QListBoxItem *i = listRows->item( listRows->currentItem() );
+ listRows->takeItem( i );
+ listRows->insertItem( i, index );
+ listRows->setCurrentItem( i );
+ readRows();
+}
+
+void TableEditor::rowTextChanged( const QString &s )
+{
+ if ( listRows->currentItem() == -1 )
+ return;
+#ifndef QT_NO_TABLE
+ listRows->changeItem( s, listRows->currentItem() );
+ if ( table->verticalHeader()->iconSet( listRows->currentItem() ) )
+ table->verticalHeader()->setLabel( listRows->currentItem(),
+ *table->verticalHeader()->iconSet( listRows->currentItem() ), s );
+ else
+ table->verticalHeader()->setLabel( listRows->currentItem(), s );
+#endif
+}
+
+void TableEditor::rowUpClicked()
+{
+ if ( listRows->currentItem() <= 0 ||
+ listRows->count() < 2 )
+ return;
+ int index = listRows->currentItem() - 1;
+ QListBoxItem *i = listRows->item( listRows->currentItem() );
+ listRows->takeItem( i );
+ listRows->insertItem( i, index );
+ listRows->setCurrentItem( i );
+ readRows();
+}
+
+void TableEditor::applyClicked()
+{
+ QValueList<PopulateTableCommand::Row> rows;
+ QValueList<PopulateTableCommand::Column> cols;
+
+ int i = 0;
+#ifndef QT_NO_TABLE
+ for ( i = 0; i < table->horizontalHeader()->count(); ++i ) {
+ PopulateTableCommand::Column col;
+ col.text = table->horizontalHeader()->label( i );
+ if ( table->horizontalHeader()->iconSet( i ) )
+ col.pix = table->horizontalHeader()->iconSet( i )->pixmap();
+ col.field = *fieldMap.find( i );
+ cols.append( col );
+ }
+ for ( i = 0; i < table->verticalHeader()->count(); ++i ) {
+ PopulateTableCommand::Row row;
+ row.text = table->verticalHeader()->label( i );
+ if ( table->verticalHeader()->iconSet( i ) )
+ row.pix = table->verticalHeader()->iconSet( i )->pixmap();
+ rows.append( row );
+ }
+ PopulateTableCommand *cmd = new PopulateTableCommand( i18n("Edit Rows and Columns of '%1' " ).arg( editTable->name() ),
+ formWindow, editTable, rows, cols );
+ cmd->execute();
+ formWindow->commandHistory()->addCommand( cmd );
+#endif
+}
+
+void TableEditor::chooseRowPixmapClicked()
+{
+ if ( listRows->currentItem() == -1 )
+ return;
+ QPixmap pix;
+ if ( listRows->item( listRows->currentItem() )->pixmap() )
+ pix = qChoosePixmap( this, formWindow, *listRows->item( listRows->currentItem() )->pixmap() );
+ else
+ pix = qChoosePixmap( this, formWindow, QPixmap() );
+
+ if ( pix.isNull() )
+ return;
+
+#ifndef QT_NO_TABLE
+ table->verticalHeader()->setLabel( listRows->currentItem(), pix, table->verticalHeader()->label( listRows->currentItem() ) );
+ listRows->changeItem( pix, listRows->currentText(), listRows->currentItem() );
+#endif
+}
+
+void TableEditor::deleteRowPixmapClicked()
+{
+ if ( listRows->currentItem() == -1 )
+ return;
+#ifndef QT_NO_TABLE
+ table->verticalHeader()->setLabel( listRows->currentItem(), QPixmap(), table->verticalHeader()->label( listRows->currentItem() ) );
+ listRows->changeItem( listRows->currentText(), listRows->currentItem() );
+#endif
+}
+
+void TableEditor::chooseColPixmapClicked()
+{
+ if ( listColumns->currentItem() == -1 )
+ return;
+ QPixmap pix;
+ if ( listColumns->item( listColumns->currentItem() )->pixmap() )
+ pix = qChoosePixmap( this, formWindow, *listColumns->item( listColumns->currentItem() )->pixmap() );
+ else
+ pix = qChoosePixmap( this, formWindow, QPixmap() );
+
+ if ( pix.isNull() )
+ return;
+#ifndef QT_NO_TABLE
+ table->horizontalHeader()->setLabel( listColumns->currentItem(), pix, table->horizontalHeader()->label( listColumns->currentItem() ) );
+ listColumns->changeItem( pix, listColumns->currentText(), listColumns->currentItem() );
+#endif
+}
+
+void TableEditor::deleteColPixmapClicked()
+{
+ if ( listColumns->currentItem() == -1 )
+ return;
+#ifndef QT_NO_TABLE
+ table->horizontalHeader()->setLabel( listColumns->currentItem(), QPixmap(), table->horizontalHeader()->label( listColumns->currentItem() ) );
+ listColumns->changeItem( listColumns->currentText(), listColumns->currentItem() );
+#endif
+}
+
+void TableEditor::readFromTable()
+{
+#ifndef QT_NO_TABLE
+ QHeader *cols = editTable->horizontalHeader();
+ table->setNumCols( cols->count() );
+ QMap<QString, QString> columnFields = MetaDataBase::columnFields( editTable );
+ for ( int i = 0; i < cols->count(); ++i ) {
+ if ( editTable->horizontalHeader()->iconSet( i ) ) {
+ table->horizontalHeader()->setLabel( i, *editTable->horizontalHeader()->iconSet( i ),
+ editTable->horizontalHeader()->label( i ) );
+ listColumns->insertItem( editTable->horizontalHeader()->iconSet( i )->pixmap(),
+ editTable->horizontalHeader()->label( i ) );
+ } else {
+ table->horizontalHeader()->setLabel( i, editTable->horizontalHeader()->label( i ) );
+ listColumns->insertItem( editTable->horizontalHeader()->label( i ) );
+ }
+ QString cf = *columnFields.find( editTable->horizontalHeader()->label( i ) );
+ fieldMap.insert( i, cf );
+ }
+
+ if ( listColumns->firstItem() ) {
+ listColumns->setCurrentItem( listColumns->firstItem() );
+ listColumns->setSelected( listColumns->firstItem(), true );
+ }
+
+ QHeader *rows = editTable->verticalHeader();
+ table->setNumRows( rows->count() );
+ for ( int j = 0; j < rows->count(); ++j ) {
+ if ( editTable->verticalHeader()->iconSet( j ) ) {
+ table->verticalHeader()->setLabel( j, *editTable->verticalHeader()->iconSet( j ),
+ editTable->verticalHeader()->label( j ) );
+ listRows->insertItem( editTable->verticalHeader()->iconSet( j )->pixmap(),
+ editTable->verticalHeader()->label( j ) );
+ } else {
+ table->verticalHeader()->setLabel( j, editTable->verticalHeader()->label( j ) );
+ listRows->insertItem( editTable->verticalHeader()->label( j ) );
+ }
+ }
+
+ if ( listRows->firstItem() ) {
+ listRows->setCurrentItem( listRows->firstItem() );
+ listRows->setSelected( listRows->firstItem(), true );
+ }
+#endif
+}
+
+void TableEditor::readColumns()
+{
+ int j = 0;
+#ifndef QT_NO_TABLE
+ for ( QListBoxItem *i = listColumns->firstItem(); i; i = i->next(), ++j ) {
+ if ( i->pixmap() )
+ table->horizontalHeader()->setLabel( j, *i->pixmap(), i->text() );
+ else
+ table->horizontalHeader()->setLabel( j, i->text() );
+ }
+#endif
+}
+
+void TableEditor::readRows()
+{
+ int j = 0;
+#ifndef QT_NO_TABLE
+ for ( QListBoxItem *i = listRows->firstItem(); i; i = i->next(), ++j ) {
+ if ( i->pixmap() )
+ table->verticalHeader()->setLabel( j, *i->pixmap(), i->text() );
+ else
+ table->verticalHeader()->setLabel( j, i->text() );
+ }
+#endif
+}
+
+void TableEditor::saveFieldMap()
+{
+ tmpFieldMap.clear();
+ for ( QMap<int, QString>::Iterator it = fieldMap.begin(); it != fieldMap.end(); ++it )
+ tmpFieldMap.insert( listColumns->item( it.key() ), *it );
+}
+
+void TableEditor::restoreFieldMap()
+{
+ fieldMap.clear();
+ for ( QMap<QListBoxItem*, QString>::Iterator it = tmpFieldMap.begin(); it != tmpFieldMap.end(); ++it )
+ fieldMap.insert( listColumns->index( it.key() ), *it );
+}
+#include "tableeditorimpl.moc"
diff --git a/kommander/editor/tableeditorimpl.h b/kommander/editor/tableeditorimpl.h
new file mode 100644
index 00000000..8018bf92
--- /dev/null
+++ b/kommander/editor/tableeditorimpl.h
@@ -0,0 +1,56 @@
+#ifndef TABLEEDITOR_H
+#define TABLEEDITOR_H
+
+#include "tableeditor.h"
+#include <qmap.h>
+
+class QListBoxItem;
+class QTable;
+class FormWindow;
+
+class TableEditor : public TableEditorBase
+{
+ Q_OBJECT
+
+public:
+ TableEditor( QWidget* parent = 0, QWidget *editWidget = 0, FormWindow *fw = 0,
+ const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+ ~TableEditor();
+
+protected slots:
+ void columnDownClicked();
+ void columnTextChanged( const QString & );
+ void columnUpClicked();
+ void currentColumnChanged( QListBoxItem * );
+ void currentFieldChanged( const QString & );
+ void currentRowChanged( QListBoxItem * );
+ void deleteColumnClicked();
+ void deleteRowClicked();
+ void newColumnClicked();
+ void newRowClicked();
+ void okClicked();
+ void rowDownClicked();
+ void rowTextChanged( const QString & );
+ void rowUpClicked();
+ void applyClicked();
+ void chooseRowPixmapClicked();
+ void deleteRowPixmapClicked();
+ void chooseColPixmapClicked();
+ void deleteColPixmapClicked();
+
+private:
+ void readFromTable();
+ void readColumns();
+ void readRows();
+ void saveFieldMap();
+ void restoreFieldMap();
+
+private:
+ QTable *editTable;
+ FormWindow *formWindow;
+ QMap<int, QString> fieldMap;
+ QMap<QListBoxItem*, QString> tmpFieldMap;
+
+};
+
+#endif // TABLEEDITOR_H
diff --git a/kommander/editor/templates/Configuration_Dialog.ui b/kommander/editor/templates/Configuration_Dialog.ui
new file mode 100644
index 00000000..199f5b90
--- /dev/null
+++ b/kommander/editor/templates/Configuration_Dialog.ui
@@ -0,0 +1,156 @@
+<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
+<class>MyDialog2</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>MyDialog2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>597</width>
+ <height>364</height>
+ </rect>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QListBox" row="0" column="0">
+ <item>
+ <property name="text">
+ <string>New Item</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>listBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QTabWidget" row="0" column="1">
+ <property name="name">
+ <cstring>tabWidget</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>Widget2</cstring>
+ </property>
+ <attribute name="title">
+ <string>Tab</string>
+ </attribute>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>Widget3</cstring>
+ </property>
+ <attribute name="title">
+ <string>Tab</string>
+ </attribute>
+ </widget>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="accel">
+ <string>F1</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>MyDialog2</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>MyDialog2</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/editor/templates/Dialog_with_Buttons_(Bottom).ui b/kommander/editor/templates/Dialog_with_Buttons_(Bottom).ui
new file mode 100644
index 00000000..77d77cb3
--- /dev/null
+++ b/kommander/editor/templates/Dialog_with_Buttons_(Bottom).ui
@@ -0,0 +1,114 @@
+<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
+<class>MyDialog</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>MyDialog</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>511</width>
+ <height>282</height>
+ </rect>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>240</y>
+ <width>476</width>
+ <height>33</height>
+ </rect>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="accel">
+ <string>F1</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>MyDialog</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>MyDialog</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/editor/templates/Dialog_with_Buttons_(Right).ui b/kommander/editor/templates/Dialog_with_Buttons_(Right).ui
new file mode 100644
index 00000000..fd2c01f0
--- /dev/null
+++ b/kommander/editor/templates/Dialog_with_Buttons_(Right).ui
@@ -0,0 +1,114 @@
+<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
+<class>MyDialog</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>MyDialog</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>592</width>
+ <height>470</height>
+ </rect>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout5</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>500</x>
+ <y>30</y>
+ <width>82</width>
+ <height>410</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="accel">
+ <string>F1</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>MyDialog</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>MyDialog</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/editor/templates/Makefile.am b/kommander/editor/templates/Makefile.am
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/kommander/editor/templates/Makefile.am
diff --git a/kommander/editor/templates/Tab_Dialog.ui b/kommander/editor/templates/Tab_Dialog.ui
new file mode 100644
index 00000000..a2ad9315
--- /dev/null
+++ b/kommander/editor/templates/Tab_Dialog.ui
@@ -0,0 +1,138 @@
+<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
+<class>MyDialog1</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>MyDialog1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>528</width>
+ <height>368</height>
+ </rect>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>tabWidget</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>Widget8</cstring>
+ </property>
+ <attribute name="title">
+ <string>Tab</string>
+ </attribute>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>Widget9</cstring>
+ </property>
+ <attribute name="title">
+ <string>Tab</string>
+ </attribute>
+ </widget>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="accel">
+ <string>F1</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>MyDialog1</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>MyDialog1</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/editor/templates/cpp_template b/kommander/editor/templates/cpp_template
new file mode 100644
index 00000000..6afef5d4
--- /dev/null
+++ b/kommander/editor/templates/cpp_template
@@ -0,0 +1,16 @@
+/***************************************************************************
+ |FILENAME| - description
+ -------------------
+ begin : |DATE|
+ copyright : (C) |YEAR| by |AUTHOR|
+ email : |EMAIL|
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
diff --git a/kommander/editor/templates/header_template b/kommander/editor/templates/header_template
new file mode 100644
index 00000000..6afef5d4
--- /dev/null
+++ b/kommander/editor/templates/header_template
@@ -0,0 +1,16 @@
+/***************************************************************************
+ |FILENAME| - description
+ -------------------
+ begin : |DATE|
+ copyright : (C) |YEAR| by |AUTHOR|
+ email : |EMAIL|
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
diff --git a/kommander/editor/timestamp.cpp b/kommander/editor/timestamp.cpp
new file mode 100644
index 00000000..b0d42e03
--- /dev/null
+++ b/kommander/editor/timestamp.cpp
@@ -0,0 +1,81 @@
+ /**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "timestamp.h"
+#include <qfile.h>
+#include <qfileinfo.h>
+
+class QTimer;
+
+TimeStamp::TimeStamp( QObject *parent, const QString &f )
+ : QObject( parent ), filename( f ), autoCheck( false )
+{
+ timer = new QTimer( this );
+ connect( timer, SIGNAL( timeout() ), this, SLOT( autoCheckTimeStamp() ) );
+ update();
+}
+
+void TimeStamp::setFileName( const QString &f )
+{
+ filename = f;
+ update();
+}
+
+QString TimeStamp::fileName() const
+{
+ return filename;
+}
+
+void TimeStamp::setAutoCheckEnabled( bool a )
+{
+ autoCheck = a;
+ if ( autoCheck )
+ timer->start( 5000 );
+ else
+ timer->stop();
+}
+
+void TimeStamp::update()
+{
+ QFile f( filename );
+ if ( !f.exists() )
+ return;
+ lastTimeStamp = QFileInfo( f ).lastModified();
+}
+
+bool TimeStamp::isUpToDate() const
+{
+ QFile f( filename );
+ if ( !f.exists() )
+ return true;
+ return lastTimeStamp == QFileInfo( f ).lastModified();
+}
+
+bool TimeStamp::isAutoCheckEnabled() const
+{
+ return autoCheck;
+}
+
+void TimeStamp::autoCheckTimeStamp()
+{
+ if ( !isUpToDate() )
+ emit timeStampChanged();
+}
+#include "timestamp.moc"
diff --git a/kommander/editor/timestamp.h b/kommander/editor/timestamp.h
new file mode 100644
index 00000000..06d50507
--- /dev/null
+++ b/kommander/editor/timestamp.h
@@ -0,0 +1,57 @@
+ /**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef TIMESTAMP_H
+#define TIMESTAMP_H
+
+#include <qobject.h>
+#include <qdatetime.h>
+#include <qtimer.h>
+
+class TimeStamp : public QObject
+{
+ Q_OBJECT
+
+public:
+ TimeStamp( QObject *parent, const QString &f );
+
+ void setFileName( const QString &f );
+ QString fileName() const;
+ void setAutoCheckEnabled( bool a );
+ void update();
+
+ bool isUpToDate() const;
+ bool isAutoCheckEnabled() const;
+
+signals:
+ void timeStampChanged();
+
+private slots:
+ void autoCheckTimeStamp();
+
+private:
+ QDateTime lastTimeStamp;
+ QString filename;
+ bool autoCheck;
+ QTimer *timer;
+
+};
+
+#endif
diff --git a/kommander/editor/widgetdatabase.cpp b/kommander/editor/widgetdatabase.cpp
new file mode 100644
index 00000000..4de615d0
--- /dev/null
+++ b/kommander/editor/widgetdatabase.cpp
@@ -0,0 +1,1029 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#if !defined(UIC)
+#include "pixmapchooser.h"
+#endif
+#ifndef KOMMANDER
+#include "widgetinterface.h"
+#endif
+#include "widgetdatabase.h"
+
+#include <qapplication.h>
+//#define NO_STATIC_COLORS
+#include "globaldefs.h"
+#include <qstrlist.h>
+#include <qdict.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qcleanuphandler.h>
+
+#include <qfeatures.h>
+
+#include <stdlib.h>
+
+#include <kommanderfactory.h>
+#include <klocale.h>
+
+const int dbsize = 300;
+const int dbcustom = 200;
+const int dbdictsize = 211;
+static WidgetDatabaseRecord* widget_db[ dbsize ];
+static QDict<int> *className2Id = 0;
+static int dbcount = 0;
+static int dbcustomcount = 200;
+static QStrList *wGroups;
+static QStrList *invisibleGroups;
+static bool whatsThisLoaded = false;
+#ifndef KOMMANDER
+static QPluginManager<WidgetInterface> *widgetPluginManager = 0;
+#endif
+static bool plugins_set_up = false;
+static bool was_in_setup = false;
+
+#ifndef KOMMANDER
+QCleanupHandler<QPluginManager<WidgetInterface> > cleanup_manager;
+#endif
+
+WidgetDatabaseRecord::WidgetDatabaseRecord()
+{
+ isForm = false;
+ isContainer = false;
+ iconSet = 0;
+ nameCounter = 0;
+}
+
+WidgetDatabaseRecord::~WidgetDatabaseRecord()
+{
+ delete iconSet;
+}
+
+
+/*!
+ \class WidgetDatabase widgetdatabase.h
+ \brief The WidgetDatabase class holds information about widgets
+
+ The WidgetDatabase holds information about widgets like toolTip(),
+ iconName(), ... It works Id-based, so all access functions take the
+ widget id as parameter. To get the id for a widget (classname), use
+ idFromClassName().
+
+ All access functions are static. Having multiple widgetdatabases in
+ one application doesn't make sense anyway and so you don't need more
+ than an instance of the widgetdatabase.
+
+ For creating widgets, layouts, etc. see WidgetFactory.
+*/
+
+/*!
+ Creates widget database. Does nothing.
+*/
+
+WidgetDatabase::WidgetDatabase()
+{
+}
+
+/*! Sets up the widget database. If the static widgetdatabase already
+ exists, the functions returns immediately.
+*/
+
+void WidgetDatabase::setupDataBase( int id )
+{
+ was_in_setup = true;
+#ifndef UIC
+ Q_UNUSED(id) if (dbcount)
+ return;
+#else
+ if (dbcount && id != -2)
+ return;
+ if (dbcount && !plugins_set_up)
+ {
+ setupPlugins();
+ return;
+ }
+ if (dbcount && plugins_set_up)
+ return;
+#endif
+
+ wGroups = new QStrList;
+ invisibleGroups = new QStrList;
+ invisibleGroups->append("Forms");
+ invisibleGroups->append("Temp");
+ className2Id = new QDict < int >(dbdictsize);
+ className2Id->setAutoDelete(true);
+
+ WidgetDatabaseRecord *r = 0;
+
+ /* Designer widgets */
+ r = new WidgetDatabaseRecord;
+ r->iconName = "pushbutton.xpm";
+ r->name = "QPushButton";
+ r->group = widgetGroup("Buttons");
+ r->toolTip = i18n("Push Button");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "toolbutton.xpm";
+ r->name = "QToolButton";
+ r->group = widgetGroup("Buttons");
+ r->toolTip = i18n("Tool Button");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "radiobutton.xpm";
+ r->name = "QRadioButton";
+ r->group = widgetGroup("Buttons");
+ r->toolTip = i18n("Radio Button");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "checkbox.xpm";
+ r->name = "QCheckBox";
+ r->group = widgetGroup("Buttons");
+ r->toolTip = i18n("Check Box");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "groupbox.xpm";
+ r->name = "QGroupBox";
+ r->group = widgetGroup("Containers");
+ r->toolTip = i18n("Group Box");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "buttongroup.xpm";
+ r->name = "QButtonGroup";
+ r->group = widgetGroup("Containers");
+ r->toolTip = i18n("Button Group");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "frame.xpm";
+ r->name = "QFrame";
+ r->group = widgetGroup("Containers");
+ r->toolTip = i18n("Frame");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "tabwidget.xpm";
+ r->name = "QTabWidget";
+ r->group = widgetGroup("Containers");
+ r->toolTip = i18n("Tabwidget");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "listbox.xpm";
+ r->name = "QListBox";
+ r->group = widgetGroup("Views");
+ r->toolTip = i18n("List Box");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "listview.xpm";
+ r->name = "QListView";
+ r->group = widgetGroup("Views");
+ r->toolTip = i18n("List View");
+ append(r);
+
+#if !defined(QT_NO_ICONVIEW) || defined(UIC)
+ r = new WidgetDatabaseRecord;
+ r->iconName = "iconview.xpm";
+ r->name = "QIconView";
+ r->group = widgetGroup("Views");
+ r->toolTip = i18n("Icon View");
+ append(r);
+#endif
+
+#if !defined(QT_NO_TABLE)
+ r = new WidgetDatabaseRecord;
+ r->iconName = "table.xpm";
+ r->name = "QTable";
+ r->group = widgetGroup("Views");
+ r->toolTip = i18n("Table");
+ append(r);
+#endif
+
+#if !defined(QT_NO_SQL)
+ r = new WidgetDatabaseRecord;
+ r->iconName = "datatable.xpm";
+ r->includeFile = "qdatatable.h";
+ r->name = "QDataTable";
+ r->group = widgetGroup("Database");
+ r->toolTip = i18n("Data Table");
+ append(r);
+#endif
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "lineedit.xpm";
+ r->name = "QLineEdit";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Line Edit");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "spinbox.xpm";
+ r->name = "QSpinBox";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Spin Box");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "dateedit.xpm";
+ r->name = "QDateEdit";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Date Edit");
+ r->includeFile = "qdatetimeedit.h";
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "timeedit.xpm";
+ r->name = "QTimeEdit";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Time Edit");
+ r->includeFile = "qdatetimeedit.h";
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "datetimeedit.xpm";
+ r->name = "QDateTimeEdit";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Date-Time Edit");
+ r->includeFile = "qdatetimeedit.h";
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "multilineedit.xpm";
+ r->name = "QMultiLineEdit";
+ r->group = widgetGroup("Temp");
+ r->toolTip = i18n("Multi Line Edit");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "richtextedit.xpm";
+ r->name = "QTextEdit";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Rich Text Edit");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "combobox.xpm";
+ r->name = "QComboBox";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Combo Box");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "slider.xpm";
+ r->name = "QSlider";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Slider");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "scrollbar.xpm";
+ r->name = "QScrollBar";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Scrollbar");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "dial.xpm";
+ r->name = "QDial";
+ r->group = widgetGroup("Input");
+ r->toolTip = i18n("Dial");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "label.xpm";
+ r->name = "QLabel";
+ r->group = widgetGroup("Temp");
+ r->toolTip = i18n("Label");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "lcdnumber.xpm";
+ r->name = "QLCDNumber";
+ r->group = widgetGroup("Display");
+ r->toolTip = i18n("LCD Number");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "progress.xpm";
+ r->name = "QProgressBar";
+ r->group = widgetGroup("Display");
+ r->toolTip = i18n("Progress Bar");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "textview.xpm";
+ r->name = "QTextView";
+ r->group = widgetGroup("Temp");
+ r->toolTip = i18n("Text View");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "textbrowser.xpm";
+ r->name = "QTextBrowser";
+ r->group = widgetGroup("Display");
+ r->toolTip = i18n("Text Browser");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "spacer.xpm";
+ r->name = "Spacer";
+ r->group = widgetGroup("Temp");
+ r->toolTip = i18n("Spacer");
+ r->whatsThis =
+ i18n("The Spacer provides horizontal and vertical spacing to be able to manipulate the behaviour of layouts.");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "QWidget";
+ r->isForm = true;
+ r->group = widgetGroup("Forms");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "QDialog";
+ r->group = widgetGroup("Forms");
+ r->isForm = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "QWizard";
+ r->group = widgetGroup("Forms");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "QDesignerWizard";
+ r->group = widgetGroup("Forms");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "QLayoutWidget";
+ r->group = widgetGroup("Temp");
+ r->includeFile = "";
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "QSplitter";
+ r->group = widgetGroup("Temp");
+ r->includeFile = "qsplitter.h";
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "tabwidget.xpm";
+ r->name = "QDesignerTabWidget";
+ r->group = widgetGroup("Temp");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "tabwidget.xpm";
+ r->name = "QDesignerWidget";
+ r->group = widgetGroup("Temp");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "tabwidget.xpm";
+ r->name = "QDesignerDialog";
+ r->group = widgetGroup("Temp");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "";
+ r->name = "QMainWindow";
+ r->includeFile = "qmainwindow.h";
+ r->group = widgetGroup("Temp");
+ r->isContainer = true;
+ append(r);
+
+#ifndef QT_NO_SQL
+ r = new WidgetDatabaseRecord;
+ r->name = "QDataBrowser";
+ r->includeFile = "qdatabrowser.h";
+ r->group = widgetGroup("Database");
+ r->toolTip = "Data Browser";
+ r->iconName = "databrowser.xpm";
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "QDataView";
+ r->includeFile = "qdataview.h";
+ r->group = widgetGroup("Database");
+ r->toolTip = "Data View";
+ r->iconName = "dataview.xpm";
+ r->isContainer = true;
+ append(r);
+#endif
+
+ r = new WidgetDatabaseRecord;
+ r->name = "Dialog";
+ r->group = widgetGroup("Forms");
+ r->isContainer = true;
+ r->isForm = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "Wizard";
+ r->group = widgetGroup("Forms");
+ r->isContainer = true;
+ r->isForm = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "EditorDialog";
+ r->group = widgetGroup("Temp");
+ r->isContainer = true;
+ r->isForm = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "EditorWizard";
+ r->group = widgetGroup("Temp");
+ r->isContainer = true;
+ r->isForm = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "EditorTabWidget";
+ r->group = widgetGroup("Temp");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "EditorToolBox";
+ r->group = widgetGroup("Temp");
+ r->isContainer = true;
+ append(r);
+
+
+ /* Kommandr widgets */
+ r = new WidgetDatabaseRecord;
+ r->iconName = "label.xpm";
+ r->name = "Label";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("Text Label");
+ r->whatsThis = i18n("The Text Label provides a widget to display static text.");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "pixlabel.xpm";
+ r->name = "PixmapLabel";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("Pixmap Label");
+ r->whatsThis = i18n("The Pixmap Label provides a widget to display pixmaps.");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "lineedit.xpm";
+ r->name = "LineEdit";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A line edit");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "TextEdit";
+ r->iconName = "textedit.png";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A rich text edit");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "TextBrowser";
+ r->iconName = "textbrowser.png";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("Text Browser");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "listbox.xpm";
+ r->name = "ListBox";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("List Box");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "combobox.xpm";
+ r->name = "ComboBox";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A combo box");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "TreeWidget";
+ r->iconName = "listview.png";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A tree widget");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "Table";
+ r->iconName = "table.xmp";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A table widget");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "pushbutton.xpm";
+ r->name = "ExecButton";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A button that when clicked, execute a command");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "closebutton.png";
+ r->name = "CloseButton";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A button that closes the dialog it is in");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "Konsole";
+ r->iconName = "konsole.png";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A listbox showing output of a script");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "FileSelector";
+ r->iconName = "lineedit.xpm";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A widget made up of a line edit and push button, for selecting files and folders");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "checkbox.xpm";
+ r->name = "CheckBox";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A check box");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "radiobutton.xpm";
+ r->name = "RadioButton";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A radio button");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "buttongroup.xpm";
+ r->name = "ButtonGroup";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A widget for grouping buttons together");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "groupbox.xpm";
+ r->name = "GroupBox";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A widget for grouping other widgets together");
+ r->isContainer = true;
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "tabwidget.xpm";
+ r->name = "TabWidget";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A widget with tabs");
+ r->isContainer = true;
+ append(r);
+
+
+// r = new WidgetDatabaseRecord;
+// r->iconName = "";
+// r->name = "ToolBox";
+// r->group = widgetGroup("Kommander");
+// r->toolTip = "";
+// r->isContainer = true;
+// append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "spinbox.xpm";
+ r->name = "SpinBoxInt";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A spin box");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "Slider";
+ r->iconName = "slider.png";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("Slider");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "RichTextEditor";
+ r->iconName = "richtextedit.xpm";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A small rich text editor");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "StatusBar";
+ r->iconName = "statusbar.png";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A status bar");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "ProgressBar";
+ r->iconName = "progress.png";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A progress bar");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "ScriptObject";
+ r->iconName = "shellscript.png";
+ r->group = widgetGroup( "Kommander" );
+ r->toolTip = i18n("A hidden script container");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->name = "Timer";
+ r->iconName = "timer.png";
+ r->group = widgetGroup( "Kommander" );
+ r->toolTip = i18n("A timer for running scripts periodically");
+ append(r);
+
+ r = new WidgetDatabaseRecord;
+ r->iconName = "datepicker.xpm";
+ r->name = "DatePicker";
+ r->group = widgetGroup("Kommander");
+ r->toolTip = i18n("A date selection widget");
+ append(r);
+
+#ifndef UIC
+ setupPlugins();
+#endif
+}
+
+void WidgetDatabase::setupPlugins()
+{
+ if (plugins_set_up)
+ return;
+ //qDebug("WidgetDatabase::setupPlugins");
+ plugins_set_up = true;
+ FeatureList widgets = KommanderFactory::featureList();
+ //qDebug("num features = %d", widgets.count());
+ for (FeatureList::Iterator it = widgets.begin(); it != widgets.end(); ++it)
+ {
+ if (hasWidget(it.key()))
+ continue;
+ WidgetDatabaseRecord *r = new WidgetDatabaseRecord;
+
+ QString grp = (*it).group;
+ if (grp.isEmpty())
+ grp = "Kommander";
+ r->group = widgetGroup(grp);
+ r->toolTip = (*it).toolTip;
+ r->iconSet = (*it).iconSet;
+ r->whatsThis = (*it).whatsThis;
+ r->isContainer = (*it).isContainer;
+ r->name = it.key();
+ append(r);
+ }
+}
+
+/*!
+ Returns the number of elements in the widget database.
+*/
+
+int WidgetDatabase::count()
+{
+ setupDataBase( -1 );
+ return dbcount;
+}
+
+/*!
+ Returns the id at which the ids of custom widgets start.
+*/
+
+int WidgetDatabase::startCustom()
+{
+ setupDataBase( -1 );
+ return dbcustom;
+}
+
+/*!
+ Returns the iconset which represents the class registered as \a id.
+*/
+
+QIconSet WidgetDatabase::iconSet( int id )
+{
+ setupDataBase( id );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return QIconSet();
+#if !defined(UIC) && !defined(RESOURCE)
+ if ( !r->iconSet )
+ r->iconSet = new QIconSet( PixmapChooser::loadPixmap( r->iconName, PixmapChooser::Small ),
+ PixmapChooser::loadPixmap( r->iconName, PixmapChooser::Large ) );
+ return *r->iconSet;
+#else
+ return QIconSet();
+#endif
+}
+
+/*!
+ Returns the classname of the widget which is registered as \a id.
+*/
+
+QString WidgetDatabase::className( int id )
+{
+ setupDataBase( id );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return QString::null;
+ return r->name;
+}
+
+/*!
+ Returns the group the widget registered as \a id belongs to.
+*/
+
+QString WidgetDatabase::group( int id )
+{
+ setupDataBase( id );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return QString::null;
+ return r->group;
+}
+
+/*!
+ Returns the tooltip text of the widget which is registered as \a id.
+*/
+
+QString WidgetDatabase::toolTip( int id )
+{
+ setupDataBase( id );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return QString::null;
+ return r->toolTip;
+}
+
+/*!
+ Returns the what's this? text of the widget which is registered as \a id.
+*/
+
+QString WidgetDatabase::whatsThis( int id )
+{
+ setupDataBase( id );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return QString::null;
+ return r->whatsThis;
+}
+
+/*!
+ Returns the include file if the widget which is registered as \a id.
+*/
+
+QString WidgetDatabase::includeFile( int id )
+{
+ setupDataBase( id );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return QString::null;
+ if ( r->includeFile.isNull() )
+ return r->name.lower() + ".h";
+ return r->includeFile;
+}
+
+/*! Returns whether the widget registered as \a id is a form.
+*/
+bool WidgetDatabase::isForm( int id )
+{
+ setupDataBase( id );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return false;
+ return r->isForm;
+}
+
+/*! Returns whether the widget registered as \a id can have children.
+*/
+
+bool WidgetDatabase::isContainer( int id )
+{
+ setupDataBase( id );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return false;
+ return r->isContainer || r->isForm;
+}
+
+QString WidgetDatabase::createWidgetName( int id )
+{
+ setupDataBase( id );
+ QString n = className( id );
+ if ( n == "QLayoutWidget" )
+ n = "Layout";
+ if ( n[ 0 ] == 'Q' )
+ n = n.mid( 1 );
+ WidgetDatabaseRecord *r = at( id );
+ if ( !r )
+ return n;
+ n += QString::number( ++r->nameCounter );
+ return n;
+}
+
+/*! Returns the id for \a name or -1 if \a name is unknown.
+ */
+int WidgetDatabase::idFromClassName( const QString &name )
+{
+ setupDataBase( -1 );
+ if ( name.isEmpty() )
+ return 0;
+ int *i = className2Id->find( name );
+ if ( i )
+ return *i;
+ if ( name == "FormWindow" )
+ return idFromClassName( "QLayoutWidget" );
+#ifdef UIC
+ setupDataBase( -2 );
+ i = className2Id->find( name );
+ if ( i )
+ return *i;
+#endif
+ return -1;
+}
+
+bool WidgetDatabase::hasWidget( const QString &name )
+{
+ return className2Id->find( name ) != 0;
+}
+
+WidgetDatabaseRecord *WidgetDatabase::at( int index )
+{
+ if ( index < 0 )
+ return 0;
+ if ( index >= dbcustom && index < dbcustomcount )
+ return widget_db[ index ];
+ if ( index < dbcount )
+ return widget_db[ index ];
+ return 0;
+}
+
+void WidgetDatabase::insert( int index, WidgetDatabaseRecord *r )
+{
+ if ( index < 0 || index >= dbsize )
+ return;
+ widget_db[ index ] = r;
+ className2Id->insert( r->name, new int( index ) );
+ if ( index < dbcustom )
+ dbcount = QMAX( dbcount, index );
+}
+
+void WidgetDatabase::append( WidgetDatabaseRecord *r )
+{
+ if ( !was_in_setup )
+ setupDataBase( -1 );
+ insert( dbcount++, r );
+}
+
+QString WidgetDatabase::widgetGroup( const QString &g )
+{
+ if ( wGroups->find( g ) == -1 )
+ wGroups->append( g );
+ return g;
+}
+
+bool WidgetDatabase::isGroupEmpty( const QString &grp )
+{
+ WidgetDatabaseRecord *r = 0;
+ for ( int i = 0; i < dbcount; ++i ) {
+ if ( !( r = widget_db[ i ] ) )
+ continue;
+ if ( r->group == grp )
+ {
+ // FIXME
+ if(r->group == "Kommander")
+ return false;
+
+ if(r->name[0] != 'Q')
+ return false;
+ }
+ }
+ return true;
+}
+
+QString WidgetDatabase::widgetGroup( int i )
+{
+ setupDataBase( -1 );
+ if ( i >= 0 && i < (int)wGroups->count() )
+ return wGroups->at( i );
+ return QString::null;
+}
+
+int WidgetDatabase::numWidgetGroups()
+{
+ setupDataBase( -1 );
+ return wGroups->count();
+}
+
+bool WidgetDatabase::isGroupVisible( const QString &g )
+{
+ setupDataBase( -1 );
+ return invisibleGroups->find( g ) == -1;
+}
+
+int WidgetDatabase::addCustomWidget( WidgetDatabaseRecord *r )
+{
+ insert( dbcustomcount++, r );
+ return dbcustomcount - 1;
+}
+
+bool WidgetDatabase::isCustomWidget( int id )
+{
+ if ( id >= dbcustom && id < dbcustomcount )
+ return true;
+ return false;
+}
+
+bool WidgetDatabase::isWhatsThisLoaded()
+{
+ return whatsThisLoaded;
+}
+
+void WidgetDatabase::loadWhatsThis( const QString &docPath )
+{
+ QString whatsthisFile = docPath + "/whatsthis";
+ QFile f( whatsthisFile );
+ if ( !f.open( IO_ReadOnly ) )
+ return;
+ QTextStream ts( &f );
+ while ( !ts.atEnd() ) {
+ QString s = ts.readLine();
+ QStringList l = QStringList::split( " | ", s );
+ int id = idFromClassName( l[ 1 ] );
+ WidgetDatabaseRecord *r = at( id );
+ if ( r )
+ r->whatsThis = l[ 0 ];
+ }
+ whatsThisLoaded = true;
+}
+
+
+// ### Qt 3.1: make these publically accessible via QWidgetDatabase API
+#ifndef KOMMANDER
+#if defined(UIC)
+bool dbnounload = false;
+QStringList *dbpaths = 0;
+#endif
+
+QPluginManager<WidgetInterface> *widgetManager()
+{
+ if ( !widgetPluginManager ) {
+#ifndef KOMMANDER
+ widgetPluginManager = new QPluginManager<WidgetInterface>( IID_Widget, QApplication::libraryPaths(), "/designer" );
+#else
+ widgetPluginManager = new QPluginManager<WidgetInterface>( IID_Widget, QApplication::libraryPaths(), "" );
+#endif
+
+ cleanup_manager.add( &widgetPluginManager );
+#if defined(UIC)
+ if ( dbnounload )
+ widgetPluginManager->setAutoUnload( false );
+ if ( dbpaths ) {
+ QStringList::ConstIterator it = dbpaths->begin();
+ for ( ; it != dbpaths->end(); ++it )
+ widgetPluginManager->addLibraryPath( *it );
+ }
+#endif
+ }
+ return widgetPluginManager;
+}
+#endif
diff --git a/kommander/editor/widgetdatabase.h b/kommander/editor/widgetdatabase.h
new file mode 100644
index 00000000..ad1f123c
--- /dev/null
+++ b/kommander/editor/widgetdatabase.h
@@ -0,0 +1,87 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef WIDGETDATABASE_H
+#define WIDGETDATABASE_H
+
+#include <qiconset.h>
+#include <qstring.h>
+#ifndef KOMMANDER
+#include "widgetinterface.h" // up here for GCC 2.7.* compatibility
+#include <private/qpluginmanager_p.h>
+
+
+extern QPluginManager<WidgetInterface> *widgetManager();
+#endif
+
+struct WidgetDatabaseRecord
+{
+ WidgetDatabaseRecord();
+ ~WidgetDatabaseRecord();
+ QString iconName, name, group, toolTip, whatsThis, includeFile;
+ uint isContainer : 1;
+ uint isForm : 1;
+ QIconSet *iconSet;
+ int nameCounter;
+};
+
+class WidgetDatabase : public Qt
+{
+public:
+ WidgetDatabase();
+ static void setupDataBase( int id );
+ static void setupPlugins();
+
+ static int count();
+ static int startCustom();
+
+ static QIconSet iconSet( int id );
+ static QString className( int id );
+ static QString group( int id );
+ static QString toolTip( int id );
+ static QString whatsThis( int id );
+ static QString includeFile( int id );
+ static bool isForm( int id );
+ static bool isContainer( int id );
+
+ static int idFromClassName( const QString &name );
+ static QString createWidgetName( int id );
+
+ static WidgetDatabaseRecord *at( int index );
+ static void insert( int index, WidgetDatabaseRecord *r );
+ static void append( WidgetDatabaseRecord *r );
+
+ static QString widgetGroup( const QString &g );
+ static QString widgetGroup( int i );
+ static int numWidgetGroups();
+ static bool isGroupVisible( const QString &g );
+ static bool isGroupEmpty( const QString &grp );
+
+ static int addCustomWidget( WidgetDatabaseRecord *r );
+ static bool isCustomWidget( int id );
+
+ static bool isWhatsThisLoaded();
+ static void loadWhatsThis( const QString &docPath );
+
+ static bool hasWidget( const QString &name );
+
+};
+
+#endif
diff --git a/kommander/editor/widgetfactory.cpp b/kommander/editor/widgetfactory.cpp
new file mode 100644
index 00000000..0dbab517
--- /dev/null
+++ b/kommander/editor/widgetfactory.cpp
@@ -0,0 +1,1928 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <klocale.h>
+#include <kommanderfactory.h>
+
+#include "kmdrmainwindow.h"
+#include <qvariant.h> // HP-UX compiler need this here
+#include "widgetfactory.h"
+#include "widgetdatabase.h"
+#include "metadatabase.h"
+#include "mainwindow.h"
+#include "formwindow.h"
+#include "pixmapchooser.h"
+#include "layout.h"
+#include "listboxeditorimpl.h"
+#include "listvieweditorimpl.h"
+#include "iconvieweditorimpl.h"
+#include "multilineeditorimpl.h"
+#ifndef KOMMANDER
+#include "widgetinterface.h"
+#endif
+#ifndef QT_NO_TABLE
+#include "tableeditorimpl.h"
+#endif
+
+#include <qfeatures.h>
+
+#include <qpixmap.h>
+#include <qgroupbox.h>
+#include <qiconview.h>
+#ifndef QT_NO_TABLE
+#include <qtable.h>
+#endif
+#ifndef QT_NO_SQL
+#include <qdatatable.h>
+#endif
+#include <qdatetimeedit.h>
+#include <qlineedit.h>
+#include <qspinbox.h>
+#include <qmultilineedit.h>
+#include <qtextedit.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qwidgetstack.h>
+#include <qcombobox.h>
+#include <qtabbar.h>
+#include <qlistbox.h>
+#include <qlistview.h>
+#include <qobjectlist.h>
+#include <qlcdnumber.h>
+#include <qslider.h>
+#include <qdial.h>
+#include <qprogressbar.h>
+#include <qtextview.h>
+#include <qtextbrowser.h>
+#include <qframe.h>
+#include <qmetaobject.h>
+#include <qwizard.h>
+#include <qvaluelist.h>
+#include <qtimer.h>
+#include <qscrollbar.h>
+#include <qmainwindow.h>
+#include <qmenubar.h>
+#include <qapplication.h>
+#include <qsplitter.h>
+#ifndef QT_NO_SQL
+#include "database.h"
+#endif
+
+//#define NO_STATIC_COLORS
+#include "globaldefs.h"
+
+/* KOMMANDER INCLUDES */
+#include <lineedit.h>
+#include <dialog.h>
+#include <execbutton.h>
+#include <closebutton.h>
+#include <textedit.h>
+#include <fileselector.h>
+#include <textedit.h>
+#include <radiobutton.h>
+#include <groupbox.h>
+#include <buttongroup.h>
+#include <checkbox.h>
+#include <combobox.h>
+#include <spinboxint.h>
+#include <wizard.h>
+#include <tabwidget.h>
+#include <subdialog.h>
+#include <listbox.h>
+#include <scriptobject.h>
+#include <richtexteditor.h>
+#include <treewidget.h>
+#include <slider.h>
+#include <datepicker.h>
+#include <popupmenu.h>
+#include "toolbox.h"
+#include "fontdialog.h"
+#include "aboutdialog.h"
+
+FormWindow *find_formwindow( QWidget *w )
+{
+ if ( !w )
+ return 0;
+ for (;;) {
+ if ( w->inherits( "FormWindow" ) )
+ return (FormWindow*)w;
+ if ( !w->parentWidget() )
+ return 0;
+ w = w->parentWidget();
+ }
+}
+
+void QLayoutWidget::paintEvent( QPaintEvent* )
+{
+ QPainter p ( this );
+ p.setPen( red );
+ p.drawRect( rect() );
+}
+
+
+QDesignerTabWidget::QDesignerTabWidget( QWidget *parent, const char *name )
+ : QTabWidget( parent, name ), dropIndicator( 0 ), dragPage( 0 ), mousePressed( false )
+{
+ tabBar()->setAcceptDrops( true );
+ tabBar()->installEventFilter( this );
+}
+
+int QDesignerTabWidget::currentPage() const
+{
+ return tabBar()->currentTab();
+}
+
+void QDesignerTabWidget::setCurrentPage( int i )
+{
+ tabBar()->setCurrentTab( i );
+}
+
+QString QDesignerTabWidget::pageTitle() const
+{
+ return ((QTabWidget*)this)->tabLabel( QTabWidget::currentPage() );
+}
+
+void QDesignerTabWidget::setPageTitle( const QString& title )
+{
+ changeTab( QTabWidget::currentPage(), title );
+}
+
+void QDesignerTabWidget::setPageName( const QCString& name )
+{
+ if ( QTabWidget::currentPage() )
+ QTabWidget::currentPage()->setName( name );
+}
+
+QCString QDesignerTabWidget::pageName() const
+{
+ if ( !QTabWidget::currentPage() )
+ return 0;
+ return QTabWidget::currentPage()->name();
+}
+
+int QDesignerTabWidget::count() const
+{
+ return tabBar()->count();
+}
+
+bool QDesignerTabWidget::eventFilter( QObject *o, QEvent *e )
+{
+ if ( o != tabBar() ) return false;
+
+ switch ( e->type() ) {
+ case QEvent::MouseButtonPress: {
+ mousePressed = true;
+ QMouseEvent *me = (QMouseEvent*)e;
+ pressPoint = me->pos();
+ }
+ break;
+ case QEvent::MouseMove: {
+ QMouseEvent *me = (QMouseEvent*)e;
+ if ( mousePressed && ( pressPoint - me->pos()).manhattanLength() > QApplication::startDragDistance() ) {
+ QTextDrag *drg = new QTextDrag( QString::number( (long) this ) , this );
+ mousePressed = false;
+ dragPage = QTabWidget::currentPage();
+ dragLabel = QTabWidget::tabLabel( dragPage );
+
+ int index = indexOf( dragPage );
+
+ removePage( dragPage );
+ if ( !drg->dragMove() ) {
+ insertTab( dragPage, dragLabel, index );
+ showPage( dragPage );
+ }
+ if ( dropIndicator )
+ dropIndicator->hide();
+ }
+ }
+ break;
+ case QEvent::DragLeave: {
+ if ( dropIndicator )
+ dropIndicator->hide();
+ }
+ break;
+ case QEvent::DragMove: {
+ QDragEnterEvent *de = (QDragEnterEvent*) e;
+ if ( QTextDrag::canDecode( de ) ) {
+ QString text;
+ QTextDrag::decode( de, text );
+ if ( text == QString::number( (long)this ) )
+ de->accept();
+ else
+ return false;
+ }
+
+ int index = 0;
+ QRect rect;
+ for ( ; index < tabBar()->count(); index++ ) {
+ if ( tabBar()->tabAt( index )->rect().contains( de->pos() ) ) {
+ rect = tabBar()->tabAt( index )->rect();
+ break;
+ }
+ }
+
+ if ( index == tabBar()->count() -1 ) {
+ QRect rect2 = rect;
+ rect2.setLeft( rect2.left() + rect2.width() / 2 );
+ if ( rect2.contains( de->pos() ) )
+ index++;
+ }
+
+ if ( ! dropIndicator ) {
+ dropIndicator = new QWidget( this );
+ dropIndicator->setBackgroundColor( red );
+ }
+
+ QPoint pos;
+ if ( index == tabBar()->count() )
+ pos = tabBar()->mapToParent( QPoint( rect.x() + rect.width(), rect.y() ) );
+ else
+ pos = tabBar()->mapToParent( QPoint( rect.x(), rect.y() ) );
+
+ dropIndicator->setGeometry( pos.x(), pos.y() , 3, rect.height() );
+ dropIndicator->show();
+ }
+ break;
+ case QEvent::Drop: {
+ QDragEnterEvent *de = (QDragEnterEvent*) e;
+ if ( QTextDrag::canDecode( de ) ) {
+ QString text;
+ QTextDrag::decode( de, text );
+ if ( text == QString::number( (long)this ) ) {
+
+ int newIndex = 0;
+ for ( ; newIndex < tabBar()->count(); newIndex++ ) {
+ if ( tabBar()->tabAt( newIndex )->rect().contains( de->pos() ) )
+ break;
+ }
+
+ if ( newIndex == tabBar()->count() -1 ) {
+ QRect rect2 = tabBar()->tabAt( newIndex )->rect();
+ rect2.setLeft( rect2.left() + rect2.width() / 2 );
+ if ( rect2.contains( de->pos() ) )
+ newIndex++;
+ }
+
+ int oldIndex = 0;
+ for ( ; oldIndex < tabBar()->count(); oldIndex++ ) {
+ if ( tabBar()->tabAt( oldIndex )->rect().contains( pressPoint ) )
+ break;
+ }
+
+ FormWindow *fw = find_formwindow( this );
+ MoveTabPageCommand *cmd =
+ new MoveTabPageCommand( i18n("Move Tab Page" ), fw, this,
+ dragPage, dragLabel, newIndex, oldIndex );
+ fw->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ de->accept();
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ return false;
+}
+
+int QDesignerWizard::currentPageNum() const
+{
+ for ( int i = 0; i < pageCount(); ++i ) {
+ if ( page( i ) == currentPage() )
+ return i;
+ }
+ return 0;
+}
+
+void QDesignerWizard::setCurrentPage( int i )
+{
+ if ( i < currentPageNum() ) {
+ while ( i < currentPageNum() ) {
+ if ( currentPageNum() == 0 )
+ break;
+ back();
+ }
+
+ } else {
+ while ( i > currentPageNum() ) {
+ if ( currentPageNum() == pageCount() - 1 )
+ break;
+ next();
+ }
+ }
+}
+
+QString QDesignerWizard::pageTitle() const
+{
+ return title( currentPage() );
+}
+
+void QDesignerWizard::setPageTitle( const QString& title )
+{
+ setTitle( currentPage(), title );
+}
+
+void QDesignerWizard::setPageName( const QCString& name )
+{
+ if ( QWizard::currentPage() )
+ QWizard::currentPage()->setName( name );
+}
+
+QCString QDesignerWizard::pageName() const
+{
+ if ( !QWizard::currentPage() )
+ return 0;
+ return QWizard::currentPage()->name();
+}
+
+int QDesignerWizard::pageNum( QWidget *p )
+{
+ for ( int i = 0; i < pageCount(); ++i ) {
+ if ( page( i ) == p )
+ return i;
+ }
+ return -1;
+}
+
+void QDesignerWizard::addPage( QWidget *p, const QString &t )
+{
+ QWizard::addPage( p, t );
+ if ( removedPages.find( p ) )
+ removedPages.remove( p );
+}
+
+void QDesignerWizard::removePage( QWidget *p )
+{
+ QWizard::removePage( p );
+ removedPages.insert( p, p );
+}
+
+void QDesignerWizard::insertPage( QWidget *p, const QString &t, int index )
+{
+ QWizard::insertPage( p, t, index );
+ if ( removedPages.find( p ) )
+ removedPages.remove( p );
+}
+
+QMap< int, QMap< QString, QVariant> > *defaultProperties = 0;
+QMap< int, QStringList > *changedProperties = 0;
+
+/*!
+ \class WidgetFactory widgetfactory.h
+ \brief Set of static functions for creating widgets, layouts and do other stuff
+
+ The widget factory offers functions to create widgets, create and
+ delete layouts find out other details - all based on the
+ WidgetDatabase's data. So the functions that use ids use the same
+ ids as in the WidgetDatabase.
+*/
+
+
+void WidgetFactory::saveDefaultProperties( QWidget *w, int id )
+{
+ QMap< QString, QVariant> propMap;
+ QStrList lst = w->metaObject()->propertyNames( true );
+ for ( uint i = 0; i < lst.count(); ++i ) {
+ QVariant var = w->property( lst.at( i ) );
+ if ( !var.isValid() && qstrcmp( "pixmap", lst.at( i ) ) == 0 )
+ var = QVariant( QPixmap() );
+ else if ( !var.isValid() && qstrcmp( "iconSet", lst.at( i ) ) == 0 )
+ var = QVariant( QIconSet() );
+ propMap.replace( lst.at( i ), var );
+ }
+ defaultProperties->replace( id, propMap );
+}
+
+static void saveChangedProperties( QWidget *w, int id )
+{
+ QStringList l = MetaDataBase::changedProperties( w );
+ changedProperties->insert( id, l );
+}
+
+EditorTabWidget::EditorTabWidget( QWidget *parent, const char *name )
+ : TabWidget( parent, name ), dropIndicator( 0 ), dragPage( 0 ), mousePressed( false )
+{
+ tabBar()->setAcceptDrops( true );
+ tabBar()->installEventFilter( this );
+}
+
+int EditorTabWidget::currentPage() const
+{
+ return tabBar()->currentTab();
+}
+
+void EditorTabWidget::setCurrentPage( int i )
+{
+ tabBar()->setCurrentTab( i );
+}
+
+QString EditorTabWidget::pageTitle() const
+{
+ return ((QTabWidget*)this)->tabLabel( QTabWidget::currentPage() );
+}
+
+void EditorTabWidget::setPageTitle( const QString& title )
+{
+ changeTab( QTabWidget::currentPage(), title );
+}
+
+void EditorTabWidget::setPageName( const QCString& name )
+{
+ if ( QTabWidget::currentPage() )
+ QTabWidget::currentPage()->setName( name );
+}
+
+QCString EditorTabWidget::pageName() const
+{
+ if ( !QTabWidget::currentPage() )
+ return 0;
+ return QTabWidget::currentPage()->name();
+}
+
+int EditorTabWidget::count() const
+{
+ return tabBar()->count();
+}
+
+bool EditorTabWidget::eventFilter( QObject *o, QEvent *e )
+{
+ if ( o != tabBar() ) return false;
+
+ switch ( e->type() ) {
+ case QEvent::MouseButtonPress: {
+ mousePressed = true;
+ QMouseEvent *me = (QMouseEvent*)e;
+ pressPoint = me->pos();
+ }
+ break;
+ case QEvent::MouseMove: {
+ QMouseEvent *me = (QMouseEvent*)e;
+ if ( mousePressed && ( pressPoint - me->pos()).manhattanLength() > QApplication::startDragDistance() ) {
+ QTextDrag *drg = new QTextDrag( QString::number( (long) this ) , this );
+ mousePressed = false;
+ dragPage = QTabWidget::currentPage();
+ dragLabel = QTabWidget::tabLabel( dragPage );
+
+ int index = indexOf( dragPage );
+
+ removePage( dragPage );
+ if ( !drg->dragMove() ) {
+ insertTab( dragPage, dragLabel, index );
+ showPage( dragPage );
+ }
+ if ( dropIndicator )
+ dropIndicator->hide();
+ }
+ }
+ break;
+ case QEvent::DragLeave: {
+ if ( dropIndicator )
+ dropIndicator->hide();
+ }
+ break;
+ case QEvent::DragMove: {
+ QDragEnterEvent *de = (QDragEnterEvent*) e;
+ if ( QTextDrag::canDecode( de ) ) {
+ QString text;
+ QTextDrag::decode( de, text );
+ if ( text == QString::number( (long)this ) )
+ de->accept();
+ else
+ return false;
+ }
+
+ int index = 0;
+ QRect rect;
+ for ( ; index < tabBar()->count(); index++ ) {
+ if ( tabBar()->tabAt( index )->rect().contains( de->pos() ) ) {
+ rect = tabBar()->tabAt( index )->rect();
+ break;
+ }
+ }
+
+ if ( index == tabBar()->count() -1 ) {
+ QRect rect2 = rect;
+ rect2.setLeft( rect2.left() + rect2.width() / 2 );
+ if ( rect2.contains( de->pos() ) )
+ index++;
+ }
+
+ if ( ! dropIndicator ) {
+ dropIndicator = new QWidget( this );
+ dropIndicator->setBackgroundColor( red );
+ }
+
+ QPoint pos;
+ if ( index == tabBar()->count() )
+ pos = tabBar()->mapToParent( QPoint( rect.x() + rect.width(), rect.y() ) );
+ else
+ pos = tabBar()->mapToParent( QPoint( rect.x(), rect.y() ) );
+
+ dropIndicator->setGeometry( pos.x(), pos.y() , 3, rect.height() );
+ dropIndicator->show();
+ }
+ break;
+ case QEvent::Drop: {
+ QDragEnterEvent *de = (QDragEnterEvent*) e;
+ if ( QTextDrag::canDecode( de ) ) {
+ QString text;
+ QTextDrag::decode( de, text );
+ if ( text == QString::number( (long)this ) ) {
+
+ int newIndex = 0;
+ for ( ; newIndex < tabBar()->count(); newIndex++ ) {
+ if ( tabBar()->tabAt( newIndex )->rect().contains( de->pos() ) )
+ break;
+ }
+
+ if ( newIndex == tabBar()->count() -1 ) {
+ QRect rect2 = tabBar()->tabAt( newIndex )->rect();
+ rect2.setLeft( rect2.left() + rect2.width() / 2 );
+ if ( rect2.contains( de->pos() ) )
+ newIndex++;
+ }
+
+ int oldIndex = 0;
+ for ( ; oldIndex < tabBar()->count(); oldIndex++ ) {
+ if ( tabBar()->tabAt( oldIndex )->rect().contains( pressPoint ) )
+ break;
+ }
+
+ FormWindow *fw = find_formwindow( this );
+ MoveTabPageCommand *cmd =
+ new MoveTabPageCommand( i18n("Move Tab Page" ), fw, this,
+ dragPage, dragLabel, newIndex, oldIndex );
+ fw->commandHistory()->addCommand( cmd );
+ cmd->execute();
+ de->accept();
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ return false;
+}
+
+
+EditorToolBox::EditorToolBox( QWidget *parent, const char *name )
+ : ToolBox( parent, name )
+{
+ setAcceptDrops( true );
+}
+
+int EditorToolBox::currentPage() const
+{
+ return currentIndex();
+}
+
+void EditorToolBox::setCurrentPage( int i )
+{
+ setCurrentItem( item( i ) );
+}
+
+QString EditorToolBox::pageTitle() const
+{
+ return itemLabel( currentIndex() );
+}
+
+void EditorToolBox::setPageTitle( const QString& title )
+{
+ setItemLabel( currentIndex(), title );
+}
+
+void EditorToolBox::setPageName( const QCString& name )
+{
+ if ( currentItem() )
+ currentItem()->setName( name );
+}
+
+QCString EditorToolBox::pageName() const
+{
+ if ( !currentItem() )
+ return 0;
+ return currentItem()->name();
+}
+
+int EditorToolBox::count() const
+{
+ return QToolBox::count();
+}
+
+
+
+/*! Creates a widget of the type which is registered as \a id as
+ child of \a parent. The \a name is optional. If \a init is true, the
+ widget is initialized with some defaults, else the plain widget is
+ created.
+*/
+
+QWidget *WidgetFactory::create( int id, QWidget *parent, const char *name, bool init, const QRect *r, Qt::Orientation orient )
+{
+ QString n = WidgetDatabase::className(id);
+ //qDebug("Trying to create '%s'", n.latin1());
+ if (n.isEmpty())
+ return 0;
+
+ if (!defaultProperties)
+ {
+ defaultProperties = new QMap < int, QMap < QString, QVariant > >();
+ changedProperties = new QMap < int, QStringList > ();
+ }
+
+ QWidget *w = 0;
+ QString str = WidgetDatabase::createWidgetName(id);
+ const char *s = str.latin1();
+ w = createWidget(n, parent, name ? name : s, init, r, orient);
+ //qDebug("Trying to create '%s', widget (id=%d) - %s", s, id, w ? "successful" : "failure");
+ if (!w && WidgetDatabase::isCustomWidget(id))
+ w = createCustomWidget(parent, name ? name : s, MetaDataBase::customWidget(id));
+ if (!w)
+ return 0;
+ MetaDataBase::addEntry(w);
+
+ if (!defaultProperties->contains(id))
+ saveDefaultProperties(w, id);
+ if (!changedProperties->contains(id))
+ saveChangedProperties(w, id);
+
+ return w;
+}
+
+/*! Creates a layout on the widget \a widget of the type \a type
+ which can be \c HBox, \c VBox or \c Grid.
+*/
+
+QLayout *WidgetFactory::createLayout( QWidget *widget, QLayout *layout, LayoutType type )
+{
+ int spacing = MainWindow::self->currentLayoutDefaultSpacing();
+ int margin = 0;
+
+ if ( widget && !widget->inherits( "QLayoutWidget" ) &&
+ ( WidgetDatabase::isContainer( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( widget ) ) ) ||
+ widget && widget->parentWidget() && widget->parentWidget()->inherits( "FormWindow" ) ) )
+ margin = MainWindow::self->currentLayoutDefaultMargin();
+
+ if ( !layout && widget && widget->inherits( "QTabWidget" ) )
+ widget = ((QTabWidget*)widget)->currentPage();
+
+ if ( !layout && widget && widget->inherits( "QToolBox" ) )
+ widget = ((QToolBox*)widget)->currentItem();
+
+ if ( !layout && widget && widget->inherits( "QWizard" ) )
+ widget = ((QWizard*)widget)->currentPage();
+
+ if ( !layout && widget && widget->inherits( "QMainWindow" ) )
+ widget = ((QMainWindow*)widget)->centralWidget();
+
+ if ( !layout && widget && widget->inherits( "QWidgetStack" ) )
+ widget = ((QWidgetStack*)widget)->visibleWidget();
+
+ MetaDataBase::addEntry( widget );
+
+ if ( !layout && widget && widget->inherits( "QGroupBox" ) ) {
+ QGroupBox *gb = (QGroupBox*)widget;
+ gb->setColumnLayout( 0, Qt::Vertical );
+ gb->layout()->setMargin( 0 );
+ gb->layout()->setSpacing( 0 );
+ QLayout *l;
+ switch ( type ) {
+ case HBox:
+ l = new QHBoxLayout( gb->layout() );
+ MetaDataBase::setMargin( gb, margin );
+ MetaDataBase::setSpacing( gb, spacing );
+ l->setAlignment( AlignTop );
+ MetaDataBase::addEntry( l );
+ return l;
+ case VBox:
+ l = new QVBoxLayout( gb->layout(), spacing );
+ MetaDataBase::setMargin( gb, margin );
+ MetaDataBase::setSpacing( gb, spacing );
+ l->setAlignment( AlignTop );
+ MetaDataBase::addEntry( l );
+ return l;
+ case Grid:
+ l = new QDesignerGridLayout( gb->layout() );
+ MetaDataBase::setMargin( gb, margin );
+ MetaDataBase::setSpacing( gb, spacing );
+ l->setAlignment( AlignTop );
+ MetaDataBase::addEntry( l );
+ return l;
+ default:
+ return 0;
+ }
+ } else {
+ if ( layout ) {
+ QLayout *l;
+ switch ( type ) {
+ case HBox:
+ l = new QHBoxLayout( layout );
+ MetaDataBase::addEntry( l );
+ l->setSpacing( spacing );
+ l->setMargin( margin );
+ MetaDataBase::addEntry( l );
+ return l;
+ case VBox:
+ l = new QVBoxLayout( layout );
+ MetaDataBase::addEntry( l );
+ l->setSpacing( spacing );
+ l->setMargin( margin );
+ MetaDataBase::addEntry( l );
+ return l;
+ case Grid: {
+ l = new QDesignerGridLayout( layout );
+ MetaDataBase::addEntry( l );
+ l->setSpacing( spacing );
+ l->setMargin( margin );
+ MetaDataBase::addEntry( l );
+ return l;
+ }
+ default:
+ return 0;
+ }
+ } else {
+ QLayout *l;
+ switch ( type ) {
+ case HBox:
+ l = new QHBoxLayout( widget );
+ MetaDataBase::addEntry( l );
+ if ( widget ) {
+ MetaDataBase::setMargin( widget, margin );
+ MetaDataBase::setSpacing( widget, spacing );
+ } else {
+ l->setMargin( margin );
+ l->setSpacing( margin );
+ }
+ MetaDataBase::addEntry( l );
+ return l;
+ case VBox:
+ l = new QVBoxLayout( widget );
+ MetaDataBase::addEntry( l );
+ if ( widget ) {
+ MetaDataBase::setMargin( widget, margin );
+ MetaDataBase::setSpacing( widget, spacing );
+ } else {
+ l->setMargin( margin );
+ l->setSpacing( margin );
+ }
+ MetaDataBase::addEntry( l );
+ return l;
+ case Grid: {
+ l = new QDesignerGridLayout( widget );
+ MetaDataBase::addEntry( l );
+ if ( widget ) {
+ MetaDataBase::setMargin( widget, margin );
+ MetaDataBase::setSpacing( widget, spacing );
+ } else {
+ l->setMargin( margin );
+ l->setSpacing( margin );
+ }
+ MetaDataBase::addEntry( l );
+ return l;
+ }
+ default:
+ return 0;
+ }
+ }
+ }
+}
+
+void WidgetFactory::deleteLayout( QWidget *widget )
+{
+ if ( !widget )
+ return;
+
+ if ( widget->inherits( "QTabWidget" ) )
+ widget = ((QTabWidget*)widget)->currentPage();
+ if ( widget->inherits( "QWizard" ) )
+ widget = ((QWizard*)widget)->currentPage();
+ if ( widget->inherits( "QMainWindow" ) )
+ widget = ((QMainWindow*)widget)->centralWidget();
+ if ( widget->inherits( "QWidgetStack" ) )
+ widget = ((QWidgetStack*)widget)->visibleWidget();
+ delete widget->layout();
+}
+
+/*! Factory functions for creating a widget of the type \a className
+ as child of \a parent with the name \a name.
+
+ If \a init is true, some initial default properties are set. This
+ has to be in sync with the initChangedProperties() function!
+*/
+
+QWidget *WidgetFactory::createWidget( const QString &className, QWidget *parent, const char *name, bool init,
+ const QRect *r, Qt::Orientation orient )
+{
+ if (className == "QPushButton")
+ {
+ QPushButton *b = 0;
+ if (init)
+ {
+ b = new QDesignerPushButton(parent, name);
+ b->setText(QString::fromLatin1(name));
+ } else
+ {
+ b = new QDesignerPushButton(parent, name);
+ }
+ QWidget *w = find_formwindow(b);
+ b->setAutoDefault(w && ((FormWindow *) w)->mainContainer()->inherits("QDialog"));
+ return b;
+ } else if (className == "QToolButton")
+ {
+ if (init)
+ {
+ QDesignerToolButton *tb = new QDesignerToolButton(parent, name);
+ tb->setText("...");
+ return tb;
+ }
+ return new QDesignerToolButton(parent, name);
+ } else if (className == "QCheckBox")
+ {
+ if (init)
+ {
+ QDesignerCheckBox *cb = new QDesignerCheckBox(parent, name);
+ cb->setText(QString::fromLatin1(name));
+ return cb;
+ }
+ return new QDesignerCheckBox(parent, name);
+ } else if (className == "QRadioButton")
+ {
+ if (init)
+ {
+ QDesignerRadioButton *rb = new QDesignerRadioButton(parent, name);
+ rb->setText(QString::fromLatin1(name));
+ return rb;
+ }
+ return new QDesignerRadioButton(parent, name);
+ } else if (className == "QGroupBox")
+ {
+ if (init)
+ return new QGroupBox(QString::fromLatin1(name), parent, name);
+ return new QGroupBox(parent, name);
+ } else if (className == "QButtonGroup")
+ {
+ if (init)
+ return new QButtonGroup(QString::fromLatin1(name), parent, name);
+ return new QButtonGroup(parent, name);
+ } else if (className == "QIconView")
+ {
+#if !defined(QT_NO_ICONVIEW)
+ QIconView *iv = new QIconView(parent, name);
+ if (init)
+ (void) new QIconViewItem(iv, i18n("New Item"));
+ return iv;
+#else
+ return 0;
+#endif
+ } else if (className == "QTable")
+ {
+#if !defined(QT_NO_TABLE)
+ if (init)
+ return new QTable(3, 3, parent, name);
+ return new QTable(parent, name);
+#else
+ return 0;
+#endif
+#ifndef QT_NO_SQL
+ } else if (className == "QDataTable")
+ {
+ return new QDataTable(parent, name);
+#endif //QT_NO_SQL
+ } else if (className == "QDateEdit")
+ {
+ return new QDateEdit(parent, name);
+ } else if (className == "QTimeEdit")
+ {
+ return new QTimeEdit(parent, name);
+ } else if (className == "QDateTimeEdit")
+ {
+ return new QDateTimeEdit(parent, name);
+ } else if (className == "QListBox")
+ {
+ QListBox *lb = new QListBox(parent, name);
+ if (init)
+ {
+ lb->insertItem(i18n("New Item"));
+ lb->setCurrentItem(0);
+ }
+ return lb;
+ } else if (className == "QListView")
+ {
+ QListView *lv = new QListView(parent, name);
+ lv->setSorting(-1);
+ if (init)
+ {
+ lv->addColumn(i18n("Column 1"));
+ lv->setCurrentItem(new QListViewItem(lv, i18n("New Item")));
+ }
+ return lv;
+ } else if (className == "QLineEdit")
+ return new QLineEdit(parent, name);
+ else if (className == "QSpinBox")
+ return new QSpinBox(parent, name);
+ else if (className == "QSplitter")
+ return new QSplitter(parent, name);
+ else if (className == "QMultiLineEdit")
+ return new QMultiLineEdit(parent, name);
+ else if (className == "QTextEdit")
+ return new QTextEdit(parent, name);
+ else if (className == "QLabel")
+ {
+ QDesignerLabel *l = new QDesignerLabel(parent, name);
+ if (init)
+ {
+ l->setText(QString::fromLatin1(name));
+ MetaDataBase::addEntry(l);
+ MetaDataBase::setPropertyChanged(l, "text", true);
+ }
+ return l;
+ } else if (className == "QLayoutWidget")
+ return new QLayoutWidget(parent, name);
+ else if (className == "QTabWidget")
+ {
+ QTabWidget *tw = new QDesignerTabWidget(parent, name);
+ if (init)
+ {
+ FormWindow *fw = find_formwindow(parent);
+ QWidget *w = fw ? new QDesignerWidget(fw, tw, "tab") : new QWidget(tw, "tab");
+ tw->addTab(w, i18n("Tab 1"));
+ MetaDataBase::addEntry(w);
+ w = fw ? new QDesignerWidget(fw, tw, "tab") : new QWidget(tw, "tab");
+ tw->addTab(w, i18n("Tab 2"));
+ MetaDataBase::addEntry(tw);
+ MetaDataBase::addEntry(w);
+ }
+ return tw;
+ } else if (className == "QComboBox")
+ {
+ return new QComboBox(false, parent, name);
+ } else if (className == "QWidget")
+ {
+ if (parent &&
+ (parent->inherits("FormWindow") || parent->inherits("QWizard")
+ || parent->inherits("QTabWidget") || parent->inherits("QToolBox") || parent->inherits("QMainWindow")))
+ {
+ FormWindow *fw = find_formwindow(parent);
+ if (fw)
+ {
+ QDesignerWidget *dw = new QDesignerWidget(fw, parent, name);
+ MetaDataBase::addEntry(dw);
+ return dw;
+ }
+ }
+ return new QWidget(parent, name);
+ } else if (className == "QDialog")
+ {
+ QDialog *dia = 0;
+ if (parent && parent->inherits("FormWindow"))
+ dia = new QDesignerDialog((FormWindow *) parent, parent, name);
+ else
+ dia = new QDialog(parent, name);
+ if (parent && !parent->inherits("MainWindow"))
+ dia->reparent(parent, QPoint(0, 0), true);
+ return dia;
+ } else if (className == "QWizard")
+ {
+ QWizard *wiz = new QDesignerWizard(parent, name);
+ if (parent && !parent->inherits("MainWindow"))
+ {
+ wiz->reparent(parent, QPoint(0, 0), true);
+ }
+ if (init && parent && parent->inherits("FormWindow"))
+ {
+ QDesignerWidget *dw = new QDesignerWidget((FormWindow *) parent, wiz, "page");
+ MetaDataBase::addEntry(dw);
+ wiz->addPage(dw, i18n("Page"));
+ QTimer::singleShot(0, wiz, SLOT(next()));
+ }
+ return wiz;
+ } else if (className == "Spacer")
+ {
+ Spacer *s = new Spacer(parent, name);
+ MetaDataBase::addEntry(s);
+ MetaDataBase::setPropertyChanged(s, "orientation", true);
+ MetaDataBase::setPropertyChanged(s, "sizeType", true);
+ if (!r)
+ return s;
+ if (!r->isValid() || r->width() < 2 && r->height() < 2)
+ s->setOrientation(orient);
+ else if (r->width() < r->height())
+ s->setOrientation(Qt::Vertical);
+ else
+ s->setOrientation(Qt::Horizontal);
+ return s;
+ } else if (className == "QLCDNumber")
+ return new QLCDNumber(parent, name);
+ else if (className == "QProgressBar")
+ return new QProgressBar(parent, name);
+ else if (className == "QTextView")
+ return new QTextView(parent, name);
+ else if (className == "QTextBrowser")
+ return new QTextBrowser(parent, name);
+ else if (className == "QDial")
+ return new QDial(parent, name);
+ else if (className == "QSlider")
+ {
+ QSlider *s = new QSlider(parent, name);
+ if (!r)
+ return s;
+ if (!r->isValid() || r->width() < 2 && r->height() < 2)
+ s->setOrientation(orient);
+ else if (r->width() > r->height())
+ s->setOrientation(Qt::Horizontal);
+ MetaDataBase::addEntry(s);
+ MetaDataBase::setPropertyChanged(s, "orientation", true);
+ return s;
+ } else if (className == "QScrollBar")
+ {
+ QScrollBar *s = new QScrollBar(parent, name);
+ if (!r)
+ return s;
+ if (!r->isValid() || r->width() < 2 && r->height() < 2)
+ s->setOrientation(orient);
+ else if (r->width() > r->height())
+ s->setOrientation(Qt::Horizontal);
+ MetaDataBase::addEntry(s);
+ MetaDataBase::setPropertyChanged(s, "orientation", true);
+ return s;
+ } else if (className == "QFrame")
+ {
+ if (!init)
+ return new QFrame(parent, name);
+ QFrame *f = new QFrame(parent, name);
+ f->setFrameStyle(QFrame::StyledPanel | QFrame::Raised);
+ return f;
+ } else if (className == "Line")
+ {
+ Line *l = new Line(parent, name);
+ MetaDataBase::addEntry(l);
+ MetaDataBase::setPropertyChanged(l, "orientation", true);
+ MetaDataBase::setPropertyChanged(l, "frameShadow", true);
+ MetaDataBase::setPropertyChanged(l, "frameShape", true);
+ if (!r)
+ return l;
+ if (!r->isValid() || r->width() < 2 && r->height() < 2)
+ l->setOrientation(orient);
+ else if (r->width() < r->height())
+ l->setOrientation(Qt::Vertical);
+ return l;
+ } else if (className == "QMainWindow")
+ {
+ QMainWindow *mw = new KmdrMainWindow(parent, name, 0);
+ mw->setDockEnabled(Qt::DockMinimized, false);
+ QDesignerWidget *dw = new QDesignerWidget((FormWindow *) parent, mw, "central widget");
+ mw->setDockMenuEnabled(false);
+ MetaDataBase::addEntry(dw);
+ mw->setCentralWidget(dw);
+ (void) mw->statusBar();
+ dw->show();
+ return mw;
+ }
+#ifndef QT_NO_SQL
+ else if (className == "QDataBrowser")
+ {
+ QWidget *w = new QDesignerDataBrowser(parent, name);
+ if (parent)
+ w->reparent(parent, QPoint(0, 0), true);
+ return w;
+ } else if (className == "QDataView")
+ {
+ QWidget *w = new QDesignerDataView(parent, name);
+ if (parent)
+ w->reparent(parent, QPoint(0, 0), true);
+ return w;
+ }
+#endif
+#ifdef KOMMANDER
+
+ if (className == "LineEdit")
+ return new LineEdit(parent, name);
+ else if (className == "ListView")
+ {
+ QListView *lv = new QListView(parent, name);
+ lv->setSorting(-1);
+ if (init)
+ {
+ lv->addColumn(i18n("Column 1"));
+ lv->setCurrentItem(new QListViewItem(lv, i18n("New Item")));
+ }
+ return lv;
+ }
+ else if (className == "Dialog")
+ {
+ QDialog *dia = 0;
+ if (parent && parent->inherits("FormWindow"))
+ dia = new EditorDialog((FormWindow *) parent, parent, name);
+ else
+ dia = new Dialog(parent, name, false);
+
+ if (parent)
+ dia->reparent(parent, QPoint(0, 0), true);
+ return dia;
+ }
+ else if (className == "Wizard")
+ {
+ //qDebug("Creating Wizard...");
+ QWizard *wiz;
+ if (parent && parent->inherits("FormWindow"))
+ wiz = new QDesignerWizard(parent, name);
+ else
+ wiz = new Wizard(parent, name);
+ if (parent)
+ wiz->reparent(parent, QPoint(0, 0), true);
+ if (init && parent && parent->inherits("FormWindow"))
+ {
+ QDesignerWidget *dw = new QDesignerWidget((FormWindow *) parent, wiz, "page");
+ MetaDataBase::addEntry(dw);
+ wiz->addPage(dw, i18n("Page 1"));
+ wiz->addPage(dw, i18n("Page 2"));
+ QTimer::singleShot(0, wiz, SLOT(next()));
+ }
+ return wiz;
+ }
+ else if (className == "TabWidget")
+ {
+ QTabWidget *tw = new EditorTabWidget(parent, name);
+ if (init)
+ {
+ FormWindow *fw = find_formwindow(parent);
+ QWidget *w = fw ? new QDesignerWidget(fw, tw, "tab") : new QWidget(tw, "tab");
+ tw->addTab(w, i18n("Tab 1"));
+ MetaDataBase::addEntry(w);
+ w = fw ? new QDesignerWidget(fw, tw, "tab") : new QWidget(tw, "tab");
+ tw->addTab(w, i18n("Tab 2"));
+ MetaDataBase::addEntry(tw);
+ MetaDataBase::addEntry(w);
+ }
+ return tw;
+ } else if (className == "ToolBox")
+ {
+ QToolBox *tw = new EditorToolBox(parent, name);
+ if (init)
+ {
+ FormWindow *fw = find_formwindow(parent);
+ QWidget *w = fw ? new QDesignerWidget(fw, tw, "toolbox") : new QWidget(tw, "toolbox");
+ tw->addItem(w, i18n("Page 1"));
+ MetaDataBase::addEntry(w);
+ w = fw ? new QDesignerWidget(fw, tw, "toolbox") : new QWidget(tw, "toolbox");
+ tw->addItem(w, i18n("Page 2"));
+ MetaDataBase::addEntry(tw);
+ MetaDataBase::addEntry(w);
+ }
+ return tw;
+ }
+ else if (className == "ExecButton")
+ return new ExecButton(parent, name);
+ else if (className == "CloseButton")
+ return new CloseButton(parent, name);
+ else if (className == "SubDialog")
+ return new SubDialog(parent, name);
+ else if (className == "FileSelector")
+ return new FileSelector(parent, name);
+ else if (className == "TextEdit")
+ return new TextEdit(parent, name);
+ else if (className == "RadioButton")
+ return new RadioButton(parent, name);
+ else if (className == "ButtonGroup")
+ return new ButtonGroup(parent, name);
+ else if (className == "GroupBox")
+ return new GroupBox(parent, name);
+ else if (className == "CheckBox")
+ return new CheckBox(parent, name);
+ else if (className == "ComboBox")
+ return new ComboBox(parent, name);
+ else if (className == "SpinBoxInt")
+ return new SpinBoxInt(parent, name);
+ else if (className == "ListBox")
+ return new ListBox(parent, name);
+ else if (className == "ScriptObject")
+ return new ScriptObject(parent, name);
+ else if (className == "RichTextEditor")
+ return new RichTextEditor(parent, name);
+ else if (className == "DatePicker")
+ return new DatePicker(parent, name);
+ else if (className == "PopupMenu")
+ return new PopupMenu(parent, name);
+ else if (className == "FontDialog")
+ return new FontDialog(parent, name);
+ else if (className == "AboutDialog")
+ return new AboutDialog(parent, name);
+ else if (className == "TreeWidget")
+ {
+ QListView *lv = new TreeWidget(parent, name);
+ lv->setSorting(-1);
+ if (init)
+ {
+ lv->addColumn(i18n("Column 1"));
+ lv->setCurrentItem(new QListViewItem(lv, i18n("New Item")));
+ }
+ return lv;
+ } else if (className == "Slider")
+ {
+ Slider *s = new Slider(parent, name);
+ if (!r)
+ return s;
+ if (!r->isValid() || r->width() < 2 && r->height() < 2)
+ s->setOrientation(orient);
+ else if (r->width() > r->height())
+ s->setOrientation(Qt::Horizontal);
+ MetaDataBase::addEntry(s);
+ MetaDataBase::setPropertyChanged(s, "orientation", true);
+ return s;
+ }
+#endif
+
+ QWidget *w = KommanderFactory::createWidget(className, parent, name);
+ return w;
+}
+
+
+
+/*! Find out which type the layout of the widget is. Returns \c HBox,
+ \c VBox, \c Grid or \c NoLayout. \a layout points to this
+ QWidget::layout() of \a w or to 0 after the function call.
+*/
+
+WidgetFactory::LayoutType WidgetFactory::layoutType( QWidget *w, QLayout *&layout )
+{
+ layout = 0;
+
+ if ( w && w->inherits( "QTabWidget" ) )
+ w = ((QTabWidget*)w)->currentPage();
+ if ( w->inherits( "QToolBox" ) )
+ w = ((QToolBox*)w)->currentItem();
+ if ( w && w->inherits( "QWizard" ) )
+ w = ((QWizard*)w)->currentPage();
+ if ( w && w->inherits( "QMainWindow" ) )
+ w = ((QMainWindow*)w)->centralWidget();
+ if ( w && w->inherits( "QWidgetStack" ) )
+ w = ((QWidgetStack*)w)->visibleWidget();
+
+ if ( w && w->inherits( "QSplitter" ) )
+ return ( (QSplitter*)w )->orientation() == Horizontal ? HBox : VBox;
+
+ if ( !w || !w->layout() )
+ return NoLayout;
+ QLayout *lay = w->layout();
+
+ if ( w->inherits( "QGroupBox" ) ) {
+ QObjectList *l = lay->queryList( "QLayout" );
+ if ( l && l->first() )
+ lay = (QLayout*)l->first();
+ delete l;
+ }
+ layout = lay;
+
+ if ( lay->inherits( "QHBoxLayout" ) )
+ return HBox;
+ else if ( lay->inherits( "QVBoxLayout" ) )
+ return VBox;
+ else if ( lay->inherits( "QGridLayout" ) )
+ return Grid;
+ return NoLayout;
+}
+
+/*!
+ \overload
+*/
+WidgetFactory::LayoutType WidgetFactory::layoutType( QLayout *layout )
+{
+ if ( layout->inherits( "QHBoxLayout" ) )
+ return HBox;
+ else if ( layout->inherits( "QVBoxLayout" ) )
+ return VBox;
+ else if ( layout->inherits( "QGridLayout" ) )
+ return Grid;
+ return NoLayout;
+}
+
+/*!
+ \overload
+*/
+WidgetFactory::LayoutType WidgetFactory::layoutType( QWidget *w )
+{
+ QLayout *l = 0;
+ return layoutType( w, l );
+}
+
+
+QWidget *WidgetFactory::layoutParent( QLayout *layout )
+{
+ QObject *o = layout;
+ while ( o ) {
+ if ( o->isWidgetType() )
+ return (QWidget*)o;
+ o = o->parent();
+ }
+ return 0;
+}
+
+/*! Returns the widget into which children should be inserted when \a
+ w is a container known to the designer.
+
+ Usually that is \a w itself, sometimes it is different (e.g. a
+ tabwidget is known to the designer as a container but the child
+ widgets should be inserted into the current page of the
+ tabwidget. So in this case this function returns the current page of
+ the tabwidget.)
+ */
+QWidget* WidgetFactory::containerOfWidget( QWidget *w )
+{
+ if ( !w )
+ return w;
+ if ( w->inherits( "QTabWidget" ) )
+ return ((QTabWidget*)w)->currentPage();
+ if ( w->inherits( "QToolBox" ) )
+ return ((QToolBox*)w)->currentItem();
+ if ( w->inherits( "QWizard" ) )
+ return ((QWizard*)w)->currentPage();
+ if ( w->inherits( "QWidgetStack" ) )
+ return ((QWidgetStack*)w)->visibleWidget();
+ if ( w->inherits( "QMainWindow" ) )
+ return ((QMainWindow*)w)->centralWidget();
+ return w;
+}
+
+/*! Returns the actual designer widget of the container \a w. This is
+ normally \a w itself, but might be a parent or grand parent of \a w
+ (e.g. when working with a tabwidget and \a w is the container which
+ contains and layouts childs, but the actual widget known to the
+ designer is the tabwidget which is the parent of \a w. So this
+ function returns the tabwidget then.)
+*/
+
+QWidget* WidgetFactory::widgetOfContainer( QWidget *w )
+{
+ if ( w->parentWidget() && w->parentWidget()->inherits( "QWidgetStack" ) )
+ w = w->parentWidget();
+ while ( w ) {
+ if ( WidgetDatabase::isContainer( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( w ) ) ) ||
+ w && w->parentWidget() && w->parentWidget()->inherits( "FormWindow" ) )
+ return w;
+ w = w->parentWidget();
+ }
+ return w;
+}
+
+/*!
+ Returns whether \a o is a passive interactor or not.
+ */
+bool WidgetFactory::isPassiveInteractor( QObject* o )
+{
+ if ( QApplication::activePopupWidget() ) // if a popup is open, we have to make sure that this one is closed, else X might do funny things
+ return true;
+
+ if ( o->inherits( "QTabBar" ) || ::qt_cast<QToolBox*>(o->parent()) )
+ return true;
+ else if ( o->inherits( "QSizeGrip" ) )
+ return true;
+ else if ( o->inherits( "QToolButton" ) && o->parent() && o->parent()->inherits( "QTabBar" ) )
+ return true;
+ else if ( o->parent() && o->parent()->inherits( "QWizard" ) && o->inherits( "QPushButton" ) )
+ return true;
+ else if ( o->parent() && o->parent()->inherits( "QMainWindow" ) && o->inherits( "QMenuBar" ) )
+ return true;
+ else if ( o->inherits( "QDockWindowHandle" ) )
+ return true;
+ else if ( o->inherits( "QHideDock" ) )
+ return true;
+
+ return false;
+}
+
+
+/*!
+ Returns the class name of object \a o that should be used for externally (i.e. for saving)
+ */
+const char* WidgetFactory::classNameOf( QObject* o )
+{
+ if (o->inherits("QDesignerTabWidget"))
+ return "QTabWidget";
+#ifdef KOMMANDER
+ else if (o->inherits("EditorTabWidget"))
+ return "TabWidget";
+ else if (o->inherits("EditorToolBox"))
+ return "ToolBox";
+#endif
+ else if (o->inherits("QDesignerDialog"))
+ return "QDialog";
+ else if (o->inherits("QDesignerWidget"))
+ return "QWidget";
+ else if (o->inherits("CustomWidget"))
+ return ((CustomWidget *) o)->realClassName().latin1();
+ else if (o->inherits("QDesignerLabel"))
+ return "QLabel";
+ else if (o->inherits("QDesignerWizard"))
+ return "QWizard";
+ else if (o->inherits("EditorWizard"))
+ return "Wizard";
+ else if (o->inherits("QDesignerPushButton"))
+ return "QPushButton";
+ else if (o->inherits("QDesignerToolButton"))
+ return "QToolButton";
+ else if (o->inherits("QDesignerRadioButton"))
+ return "QRadioButton";
+ else if (o->inherits("QDesignerCheckBox"))
+ return "QCheckBox";
+ else if (o->inherits("QDesignerMenuBar"))
+ return "QMenuBar";
+ else if (o->inherits("QDesignerToolBar"))
+ return "QToolBar";
+#ifndef QT_NO_SQL
+ else if (o->inherits("QDesignerDataBrowser"))
+ return "QDataBrowser";
+ else if (o->inherits("QDesignerDataView"))
+ return "QDataView";
+#endif
+ else if (o->inherits("EditorDialog"))
+ return "Dialog";
+ return o->className();
+}
+
+/*! As some properties are set by default when creating a widget this
+ functions markes this properties as changed. Has to be in sync with
+ createWidget()!
+*/
+
+void WidgetFactory::initChangedProperties( QObject *o )
+{
+ MetaDataBase::setPropertyChanged( o, "name", true );
+ if ( !o->inherits( "QDesignerToolBar" ) && !o->inherits( "QDesignerMenuBar" ) )
+ MetaDataBase::setPropertyChanged( o, "geometry", true );
+
+ if ( o->inherits( "QPushButton" ) || o->inherits("QRadioButton") || o->inherits( "QCheckBox" ) || o->inherits( "QToolButton" ) )
+ MetaDataBase::setPropertyChanged( o, "text", true );
+ else if (::qt_cast<QToolButton*>(o) && ::qt_cast<QToolBox*>(widgetOfContainer((QWidget*)o->parent()))) {
+ MetaDataBase::setPropertyChanged( o, "usesTextLabel", TRUE );
+ MetaDataBase::setPropertyChanged( o, "textLabel", TRUE );
+ MetaDataBase::setPropertyChanged( o, "autoRaise", TRUE );
+ MetaDataBase::setPropertyChanged( o, "textPosition", TRUE );
+ } else if ( o->inherits( "QGroupBox" ) )
+ MetaDataBase::setPropertyChanged( o, "title", true );
+ else if ( o->isA( "QFrame" ) ) {
+ MetaDataBase::setPropertyChanged( o, "frameShadow", true );
+ MetaDataBase::setPropertyChanged( o, "frameShape", true );
+ } else if ( o->inherits( "QTabWidget" ) || o->inherits( "QWizard" ) ) {
+ MetaDataBase::setPropertyChanged( o, "pageTitle", true );
+ MetaDataBase::setPropertyChanged( o, "pageName", true );
+#ifndef QT_NO_TABLE
+ } else if ( o->inherits( "QTable" ) && !o->inherits( "QDataTable" ) ) {
+ MetaDataBase::setPropertyChanged( o, "numRows", true );
+ MetaDataBase::setPropertyChanged( o, "numCols", true );
+ QTable *t = (QTable*)o;
+ for ( int i = 0; i < 3; ++i ) {
+ t->horizontalHeader()->setLabel( i, QString::number( i + 1 ) );
+ t->verticalHeader()->setLabel( i, QString::number( i + 1 ) );
+ }
+#endif
+ } else if ( ::qt_cast<QToolBox*>(o) ) {
+ MetaDataBase::setPropertyChanged( o, "currentIndex", true );
+ MetaDataBase::setPropertyChanged( o, "itemName", true );
+ MetaDataBase::setPropertyChanged( o, "itemLabel", true );
+ MetaDataBase::setPropertyChanged( o, "itemIconSet", true );
+ MetaDataBase::setPropertyChanged( o, "itemToolTip", true );
+ MetaDataBase::setPropertyChanged( o, "itemBackgroundMode", true );
+ } else if ( o->inherits( "QSplitter" ) ) {
+ MetaDataBase::setPropertyChanged( o, "orientation", true );
+ } else if ( o->inherits( "QDesignerToolBar" ) ) {
+ MetaDataBase::setPropertyChanged( o, "label", true );
+ } else if ( o->inherits( "QDesignerMenuBar" ) ) {
+ MetaDataBase::setPropertyChanged( o, "itemName", true );
+ MetaDataBase::setPropertyChanged( o, "itemNumber", true );
+ MetaDataBase::setPropertyChanged( o, "itemText", true );
+ }
+}
+
+bool WidgetFactory::hasSpecialEditor( int id )
+{
+ QString className = WidgetDatabase::className(id);
+
+ if (className == "TextEdit" || className == "ComboBox" || className == "ListBox" || className ==
+ "TreeWidget" || className == "TextBrowser")
+ return true;
+
+ if (className.mid(1) == "ListBox")
+ return true;
+ if (className.mid(1) == "ComboBox")
+ return true;
+ if (className.mid(1) == "ListView")
+ return true;
+ if (className.mid(1) == "IconView")
+ return true;
+ if (className == "QTextEdit" || className == "QMultiLineEdit")
+ return true;
+ if (className.contains("Table"))
+ return true;
+
+ return false;
+}
+
+bool WidgetFactory::hasItems( int id )
+{
+ QString className = WidgetDatabase::className(id);
+
+ if (className == "ComboBox" || className == "ListBox" || className == "TreeWidget")
+ return true;
+ if (className.mid(1) == "ListBox" || className.mid(1) == "ListView" ||
+ className.mid(1) == "IconView" || className.mid(1) == "ComboBox" ||
+ className.contains("Table"))
+ return true;
+
+ return false;
+}
+
+void WidgetFactory::editWidget( int id, QWidget *parent, QWidget *editWidget, FormWindow *fw )
+{
+ QString className = WidgetDatabase::className(id);
+
+#ifdef KOMMANDER
+ if (className == "ComboBox")
+ {
+ if (!editWidget->inherits("QComboBox"))
+ return;
+
+ QComboBox *cb = (QComboBox *) editWidget;
+
+ ListBoxEditor *e = new ListBoxEditor(parent, cb->listBox(), fw);
+ e->exec();
+ delete e;
+
+ cb->update();
+
+ return;
+ }
+ if (className == "TextEdit" || className == "TextBrowser")
+ {
+ MultiLineEditor *e = new MultiLineEditor(parent, editWidget, fw);
+ e->exec();
+ delete e;
+ return;
+ }
+ if (className == "TreeWidget")
+ {
+ if (!editWidget->inherits("QListView"))
+ return;
+ QListView *lv = (QListView *) editWidget;
+ ListViewEditor *e = new ListViewEditor(parent, lv, fw);
+ e->exec();
+ delete e;
+ return;
+ }
+ if (className == "ListBox")
+ {
+ if (!editWidget->inherits("QListBox"))
+ return;
+ ListBoxEditor *e = new ListBoxEditor(parent, editWidget, fw);
+ e->exec();
+ delete e;
+ return;
+ }
+#endif
+ if (className.mid(1) == "ListBox")
+ {
+ if (!editWidget->inherits("QListBox"))
+ return;
+ ListBoxEditor *e = new ListBoxEditor(parent, editWidget, fw);
+ e->exec();
+ delete e;
+ return;
+ }
+
+ if (className.mid(1) == "ComboBox")
+ {
+ if (!editWidget->inherits("QComboBox"))
+ return;
+ QComboBox *cb = (QComboBox *) editWidget;
+ ListBoxEditor *e = new ListBoxEditor(parent, cb->listBox(), fw);
+ e->exec();
+ delete e;
+ cb->update();
+ return;
+ }
+
+ if (className.mid(1) == "ListView")
+ {
+ if (!editWidget->inherits("QListView"))
+ return;
+ QListView *lv = (QListView *) editWidget;
+ ListViewEditor *e = new ListViewEditor(parent, lv, fw);
+ e->exec();
+ delete e;
+ return;
+ }
+
+ if (className.mid(1) == "IconView")
+ {
+ if (!editWidget->inherits("QIconView"))
+ return;
+ IconViewEditor *e = new IconViewEditor(parent, editWidget, fw);
+ e->exec();
+ delete e;
+ return;
+ }
+
+ if (className == "QMultiLineEdit" || className == "QTextEdit")
+ {
+ MultiLineEditor *e = new MultiLineEditor(parent, editWidget, fw);
+ e->exec();
+ delete e;
+ return;
+ }
+#ifndef QT_NO_TABLE
+ if (className.contains("Table"))
+ {
+ TableEditor *e = new TableEditor(parent, editWidget, fw);
+ e->exec();
+ delete e;
+ return;
+ }
+#endif
+}
+
+bool WidgetFactory::canResetProperty( QObject *w, const QString &propName )
+{
+ if ( propName == "name" || propName == "geometry" )
+ return false;
+ QStringList l = *changedProperties->find( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( w ) ) );
+ return l.findIndex( propName ) == -1;
+}
+
+bool WidgetFactory::resetProperty( QObject *w, const QString &propName )
+{
+ const QMetaProperty *p = w->metaObject()->property( w->metaObject()->
+ findProperty( propName, true ), true );
+ if (!p )
+ return false;
+ return p->reset( w );
+}
+
+QVariant WidgetFactory::defaultValue( QObject *w, const QString &propName )
+{
+ if ( propName == "wordwrap" ) {
+ int v = defaultValue( w, "alignment" ).toInt();
+ return QVariant( ( v & WordBreak ) == WordBreak, 0 );
+ } else if ( propName == "toolTip" || propName == "whatsThis" ) {
+ return QVariant( QString::fromLatin1( "" ) );
+ } else if ( w->inherits( "CustomWidget" ) ) {
+ return QVariant();
+ } else if ( propName == "frameworkCode" ) {
+ return QVariant( true, 0 );
+ } else if ( propName == "layoutMargin" ) {
+ if ( w->inherits( "QLayoutWidget" ) )
+ return QVariant( 0 );
+ else if ( MainWindow::self->formWindow() )
+ return QVariant( MainWindow::self->formWindow()->layoutDefaultMargin() );
+ } else if ( propName == "layoutSpacing" ) {
+ if ( MainWindow::self->formWindow() )
+ return QVariant( MainWindow::self->formWindow()->layoutDefaultSpacing() );
+ }
+
+ return *( *defaultProperties->find( WidgetDatabase::idFromClassName( classNameOf( w ) ) ) ).find( propName );
+}
+
+QString WidgetFactory::defaultCurrentItem( QObject *w, const QString &propName )
+{
+ const QMetaProperty *p = w->metaObject()->
+ property( w->metaObject()->findProperty( propName, true ), true );
+ if ( !p ) {
+ int v = defaultValue( w, "alignment" ).toInt();
+ if ( propName == "hAlign" ) {
+ if ( ( v & AlignAuto ) == AlignAuto )
+ return "AlignAuto";
+ if ( ( v & AlignLeft ) == AlignLeft )
+ return "AlignLeft";
+ if ( ( v & AlignCenter ) == AlignCenter || ( v & AlignHCenter ) == AlignHCenter )
+ return "AlignHCenter";
+ if ( ( v & AlignRight ) == AlignRight )
+ return "AlignRight";
+ if ( ( v & AlignJustify ) == AlignJustify )
+ return "AlignJustify";
+ } else if ( propName == "vAlign" ) {
+ if ( ( v & AlignTop ) == AlignTop )
+ return "AlignTop";
+ if ( ( v & AlignCenter ) == AlignCenter || ( v & AlignVCenter ) == AlignVCenter )
+ return "AlignVCenter";
+ if ( ( v & AlignBottom ) == AlignBottom )
+ return "AlignBottom";
+ }
+ return QString::null;
+
+ }
+ return p->valueToKey( defaultValue( w, propName ).toInt() );
+}
+
+QWidget *WidgetFactory::createCustomWidget( QWidget *parent, const char *name, MetaDataBase::CustomWidget *w )
+{
+ if ( !w )
+ return 0;
+ return new CustomWidget( parent, name, w );
+}
+
+QVariant WidgetFactory::property( QObject *w, const char *name )
+{
+ QVariant v = w->property( name );
+ if ( v.isValid() )
+ return v;
+ return MetaDataBase::fakeProperty( w, name );
+}
+
+void QDesignerLabel::updateBuddy()
+{
+
+ if ( myBuddy.isEmpty() )
+ return;
+
+ QObjectList *l = topLevelWidget()->queryList( "QWidget", myBuddy, false, true );
+ if ( !l || !l->first() ) {
+ delete l;
+ return;
+ }
+
+ QLabel::setBuddy( (QWidget*)l->first() );
+ delete l;
+}
+
+void QDesignerWidget::paintEvent( QPaintEvent *e )
+{
+ formwindow->paintGrid( this, e );
+}
+
+void QDesignerDialog::paintEvent( QPaintEvent *e )
+{
+ formwindow->paintGrid( this, e );
+}
+
+void EditorDialog::paintEvent( QPaintEvent *e )
+{
+ formwindow->paintGrid( this, e );
+}
+
+QSizePolicy QLayoutWidget::sizePolicy() const
+{
+ return sp;
+}
+
+bool QLayoutWidget::event( QEvent *e )
+{
+ if ( e && ( e->type() == QEvent::ChildInserted ||
+ e->type() == QEvent::ChildRemoved ||
+ e->type() == QEvent::LayoutHint ||
+ e->type() == QEvent::Reparent ) )
+ updateSizePolicy();
+ return QWidget::event( e );
+}
+
+/*
+ This function must be called on QLayoutWidget creation and whenever
+ the QLayoutWidget's parent layout changes (e.g., from a QHBoxLayout
+ to a QVBoxLayout), because of the (illogical) way layouting works.
+*/
+void QLayoutWidget::updateSizePolicy()
+{
+ if ( !children() || children()->count() == 0 ) {
+ sp = QWidget::sizePolicy();
+ return;
+ }
+
+ /*
+ QSizePolicy::MayShrink & friends are private. Here we assume the
+ following:
+
+ Fixed = 0
+ Maximum = MayShrink
+ Minimum = MayGrow
+ Preferred = MayShrink | MayGrow
+ */
+
+ int ht = (int) QSizePolicy::Preferred;
+ int vt = (int) QSizePolicy::Preferred;
+
+ if ( layout() ) {
+ /*
+ parentLayout is set to the parent layout if there is one and if it is
+ top level, in which case layouting is illogical.
+ */
+ QLayout *parentLayout = 0;
+ if ( parent() && parent()->isWidgetType() ) {
+ parentLayout = ((QWidget *)parent())->layout();
+ if ( parentLayout && parentLayout->mainWidget()->inherits("QLayoutWidget") )
+ parentLayout = 0;
+ }
+
+ QObjectListIt it( *children() );
+ QObject *o;
+
+ if ( layout()->inherits("QVBoxLayout") ) {
+ if ( parentLayout && parentLayout->inherits("QHBoxLayout") )
+ vt = QSizePolicy::Minimum;
+ else
+ vt = QSizePolicy::Fixed;
+
+ while ( ( o = it.current() ) ) {
+ ++it;
+ if ( !o->isWidgetType() || ( (QWidget*)o )->testWState( WState_ForceHide ) )
+ continue;
+ QWidget *w = (QWidget*)o;
+
+ if ( !w->sizePolicy().mayGrowHorizontally() )
+ ht &= ~QSizePolicy::Minimum;
+ if ( !w->sizePolicy().mayShrinkHorizontally() )
+ ht &= ~QSizePolicy::Maximum;
+ if ( w->sizePolicy().mayGrowVertically() )
+ vt |= QSizePolicy::Minimum;
+ if ( w->sizePolicy().mayShrinkVertically() )
+ vt |= QSizePolicy::Maximum;
+ }
+ } else if ( layout()->inherits("QHBoxLayout") ) {
+ if ( parentLayout && parentLayout->inherits("QVBoxLayout") )
+ ht = QSizePolicy::Minimum;
+ else
+ ht = QSizePolicy::Fixed;
+
+ while ( ( o = it.current() ) ) {
+ ++it;
+ if ( !o->isWidgetType() || ( (QWidget*)o )->testWState( WState_ForceHide ) )
+ continue;
+ QWidget *w = (QWidget*)o;
+
+ if ( w->sizePolicy().mayGrowHorizontally() )
+ ht |= QSizePolicy::Minimum;
+ if ( w->sizePolicy().mayShrinkHorizontally() )
+ ht |= QSizePolicy::Maximum;
+ if ( !w->sizePolicy().mayGrowVertically() )
+ vt &= ~QSizePolicy::Minimum;
+ if ( !w->sizePolicy().mayShrinkVertically() )
+ vt &= ~QSizePolicy::Maximum;
+ }
+ } else if ( layout()->inherits("QGridLayout") ) {
+ ht = QSizePolicy::Fixed;
+ vt = QSizePolicy::Fixed;
+ if ( parentLayout ) {
+ if ( parentLayout->inherits("QVBoxLayout") )
+ ht = QSizePolicy::Minimum;
+ else if ( parentLayout->inherits("QHBoxLayout") )
+ vt = QSizePolicy::Minimum;
+ }
+
+ while ( ( o = it.current() ) ) {
+ ++it;
+ if ( !o->isWidgetType() || ( (QWidget*)o )->testWState( WState_ForceHide ) )
+ continue;
+ QWidget *w = (QWidget*)o;
+
+ if ( w->sizePolicy().mayGrowHorizontally() )
+ ht |= QSizePolicy::Minimum;
+ if ( w->sizePolicy().mayShrinkHorizontally() )
+ ht |= QSizePolicy::Maximum;
+ if ( w->sizePolicy().mayGrowVertically() )
+ vt |= QSizePolicy::Minimum;
+ if ( w->sizePolicy().mayShrinkVertically() )
+ vt |= QSizePolicy::Maximum;
+ }
+ }
+ if ( layout()->expanding() & QSizePolicy::Horizontally )
+ ht = QSizePolicy::Expanding;
+ if ( layout()->expanding() & QSizePolicy::Vertically )
+ vt = QSizePolicy::Expanding;
+
+ layout()->invalidate();
+ }
+
+ sp = QSizePolicy( (QSizePolicy::SizeType) ht, (QSizePolicy::SizeType) vt );
+ updateGeometry();
+}
+
+void CustomWidget::paintEvent( QPaintEvent *e )
+{
+ if ( parentWidget() && parentWidget()->inherits( "FormWindow" ) ) {
+ ( (FormWindow*)parentWidget() )->paintGrid( this, e );
+ } else {
+ QPainter p( this );
+ p.fillRect( rect(), colorGroup().dark() );
+ p.drawPixmap( ( width() - cusw->pixmap->width() ) / 2,
+ ( height() - cusw->pixmap->height() ) / 2,
+ *cusw->pixmap );
+ }
+}
+
+
+#include "widgetfactory.moc"
diff --git a/kommander/editor/widgetfactory.h b/kommander/editor/widgetfactory.h
new file mode 100644
index 00000000..03d2b2f1
--- /dev/null
+++ b/kommander/editor/widgetfactory.h
@@ -0,0 +1,473 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef WIDGETFACTORY_H
+#define WIDGETFACTORY_H
+
+#include <qvariant.h>
+#include <qiconset.h>
+#include <qstring.h>
+#include <qintdict.h>
+#include <qtabwidget.h>
+#include <qpixmap.h>
+#include <qsize.h>
+#include <qpainter.h>
+#include <qevent.h>
+#include <qobjectlist.h>
+#include <qlabel.h>
+#include <qwizard.h>
+#include <qptrdict.h>
+#include <qpushbutton.h>
+#include <qtoolbutton.h>
+#include <qcheckbox.h>
+#include <qradiobutton.h>
+#include <qbuttongroup.h>
+
+#include "metadatabase.h"
+#ifndef KOMMANDER
+#include "qwidgetfactory.h"
+#include "ewidgetfactory.h"
+#else
+#include "kommanderfactory.h"
+#endif
+
+/* KOMMANDER INCLUDES */
+#include <dialog.h>
+#include <wizard.h>
+#include <tabwidget.h>
+#include "toolbox.h"
+
+class QWidget;
+class QLayout;
+class FormWindow;
+
+class WidgetFactory : public Qt
+{
+ friend class CustomWidgetFactory;
+
+public:
+ enum LayoutType {
+ HBox,
+ VBox,
+ Grid,
+ NoLayout
+ };
+
+ static QWidget *create( int id, QWidget *parent, const char *name = 0, bool init = TRUE,
+ const QRect *rect = 0, Qt::Orientation orient = Qt::Horizontal );
+ static QLayout *createLayout( QWidget *widget, QLayout* layout, LayoutType type );
+ static void deleteLayout( QWidget *widget );
+
+ static LayoutType layoutType( QWidget *w );
+ static LayoutType layoutType( QWidget *w, QLayout *&layout );
+ static LayoutType layoutType( QLayout *layout );
+ static QWidget *layoutParent( QLayout *layout );
+
+ static QWidget* containerOfWidget( QWidget *w );
+ static QWidget* widgetOfContainer( QWidget *w );
+
+ static bool isPassiveInteractor( QObject* o );
+ static const char* classNameOf( QObject* o );
+
+ static void initChangedProperties( QObject *o );
+
+ static bool hasSpecialEditor( int id );
+ static bool hasItems( int id );
+ static void editWidget( int id, QWidget *parent, QWidget *editWidget, FormWindow *fw );
+
+ static bool canResetProperty( QObject *w, const QString &propName );
+ static bool resetProperty( QObject *w, const QString &propName );
+ static QVariant defaultValue( QObject *w, const QString &propName );
+ static QString defaultCurrentItem( QObject *w, const QString &propName );
+
+ static QVariant property( QObject *w, const char *name );
+ static void saveDefaultProperties( QWidget *w, int id );
+
+private:
+ static QWidget *createWidget( const QString &className, QWidget *parent, const char *name, bool init,
+ const QRect *r = 0, Qt::Orientation orient = Qt::Horizontal );
+ static QWidget *createCustomWidget( QWidget *parent, const char *name, MetaDataBase::CustomWidget *w );
+
+};
+
+
+class QDesignerTabWidget : public QTabWidget
+{
+ Q_OBJECT
+ Q_PROPERTY( int currentPage READ currentPage WRITE setCurrentPage STORED false DESIGNABLE true )
+ Q_PROPERTY( QString pageTitle READ pageTitle WRITE setPageTitle STORED false DESIGNABLE true )
+ Q_PROPERTY( QCString pageName READ pageName WRITE setPageName STORED false DESIGNABLE true )
+public:
+ QDesignerTabWidget( QWidget *parent, const char *name );
+
+ int currentPage() const;
+ void setCurrentPage( int i );
+ QString pageTitle() const;
+ void setPageTitle( const QString& title );
+ QCString pageName() const;
+ void setPageName( const QCString& name );
+
+ int count() const;
+ QTabBar *tabBar() const { return QTabWidget::tabBar(); }
+
+ bool eventFilter( QObject*, QEvent* );
+
+private:
+ QPoint pressPoint;
+ QWidget *dropIndicator;
+ QWidget *dragPage;
+ QString dragLabel;
+ bool mousePressed;
+};
+
+class EditorTabWidget : public TabWidget
+{
+ Q_OBJECT
+ Q_PROPERTY( int currentPage READ currentPage WRITE setCurrentPage STORED false DESIGNABLE true )
+ Q_PROPERTY( QString pageTitle READ pageTitle WRITE setPageTitle STORED false DESIGNABLE true )
+ Q_PROPERTY( QCString pageName READ pageName WRITE setPageName STORED false DESIGNABLE true )
+public:
+ EditorTabWidget( QWidget *parent, const char *name );
+
+ int currentPage() const;
+ void setCurrentPage( int i );
+ QString pageTitle() const;
+ void setPageTitle( const QString& title );
+ QCString pageName() const;
+ void setPageName( const QCString& name );
+
+ int count() const;
+ QTabBar *tabBar() const { return QTabWidget::tabBar(); }
+
+ bool eventFilter( QObject*, QEvent* );
+
+private:
+ QPoint pressPoint;
+ QWidget *dropIndicator;
+ QWidget *dragPage;
+ QString dragLabel;
+ bool mousePressed;
+};
+
+class EditorToolBox : public ToolBox
+{
+ Q_OBJECT
+ Q_PROPERTY( int currentPage READ currentPage WRITE setCurrentPage STORED false DESIGNABLE true )
+ Q_PROPERTY( QString pageTitle READ pageTitle WRITE setPageTitle STORED false DESIGNABLE true )
+ Q_PROPERTY( QCString pageName READ pageName WRITE setPageName STORED false DESIGNABLE true )
+public:
+ EditorToolBox( QWidget *parent, const char *name );
+
+ int currentPage() const;
+ void setCurrentPage( int i );
+ QString pageTitle() const;
+ void setPageTitle( const QString& title );
+ QCString pageName() const;
+ void setPageName( const QCString& name );
+
+ int count() const;
+};
+
+class QDesignerWizard : public QWizard
+{
+ Q_OBJECT
+ Q_PROPERTY( int currentPage READ currentPageNum WRITE setCurrentPage STORED false DESIGNABLE true )
+ Q_PROPERTY( QString pageTitle READ pageTitle WRITE setPageTitle STORED false DESIGNABLE true )
+ Q_PROPERTY( QCString pageName READ pageName WRITE setPageName STORED false DESIGNABLE true )
+public:
+ QDesignerWizard( QWidget *parent, const char *name ) : QWizard( parent, name ) {}
+
+ int currentPageNum() const;
+ void setCurrentPage( int i );
+ QString pageTitle() const;
+ void setPageTitle( const QString& title );
+ QCString pageName() const;
+ void setPageName( const QCString& name );
+ int pageNum( QWidget *page );
+ void addPage( QWidget *p, const QString & );
+ void removePage( QWidget *p );
+ void insertPage( QWidget *p, const QString &t, int index );
+ bool isPageRemoved( QWidget *p ) { return (removedPages.find( p ) != 0); }
+
+ void reject() {}
+
+private:
+ struct Page
+ {
+ Page( QWidget *a, const QString &b ) : p( a ), t( b ) {}
+ Page() : p( 0 ), t( QString::null ) {}
+ QWidget *p;
+ QString t;
+ };
+ QPtrDict<QWidget> removedPages;
+
+};
+
+class QLayoutWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ QLayoutWidget( QWidget *parent, const char *name ) : QWidget( parent, name ), sp( QWidget::sizePolicy() ) {}
+
+ QSizePolicy sizePolicy() const;
+ void updateSizePolicy();
+
+protected:
+ void paintEvent( QPaintEvent * );
+ bool event( QEvent * );
+ QSizePolicy sp;
+
+};
+
+
+class CustomWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ CustomWidget( QWidget *parent, const char *name, MetaDataBase::CustomWidget *cw )
+ : QWidget( parent, name ), cusw( cw ) {
+ alwaysExpand = parentWidget() && parentWidget()->inherits( "FormWindow" );
+ setSizePolicy( cw->sizePolicy );
+ if ( !alwaysExpand )
+ setBackgroundMode( PaletteDark );
+ }
+
+ QSize sizeHint() const {
+ QSize sh = cusw->sizeHint;
+ if ( sh.isValid() )
+ return sh;
+ return QWidget::sizeHint();
+ }
+
+ QString realClassName() { return cusw->className; }
+ MetaDataBase::CustomWidget *customWidget() const { return cusw; }
+
+protected:
+ void paintEvent( QPaintEvent *e );
+
+ MetaDataBase::CustomWidget *cusw;
+ bool alwaysExpand;
+
+};
+
+
+class Line : public QFrame
+{
+ Q_OBJECT
+
+ Q_PROPERTY( Orientation orientation READ orientation WRITE setOrientation )
+ Q_OVERRIDE( int frameWidth DESIGNABLE false )
+ Q_OVERRIDE( Shape frameShape DESIGNABLE false )
+ Q_OVERRIDE( QRect frameRect DESIGNABLE false )
+ Q_OVERRIDE( QRect contentsRect DESIGNABLE false )
+public:
+ Line( QWidget *parent, const char *name )
+ : QFrame( parent, name, WMouseNoMask ) {
+ setFrameStyle( HLine | Sunken );
+ }
+
+ void setOrientation( Orientation orient ) {
+ if ( orient == Horizontal )
+ setFrameShape( HLine );
+ else
+ setFrameShape( VLine );
+ }
+ Orientation orientation() const {
+ return frameShape() == HLine ? Horizontal : Vertical;
+ }
+};
+
+class QDesignerLabel : public QLabel
+{
+ Q_OBJECT
+
+ Q_PROPERTY( QCString buddy READ buddyWidget WRITE setBuddyWidget )
+
+public:
+ QDesignerLabel( QWidget *parent = 0, const char *name = 0 )
+ : QLabel( parent, name ) { myBuddy = 0; }
+
+ void setBuddyWidget( const QCString &b ) {
+ myBuddy = b;
+ updateBuddy();
+ }
+ QCString buddyWidget() const {
+ return myBuddy;
+ };
+
+protected:
+ void showEvent( QShowEvent *e ) {
+ QLabel::showEvent( e );
+ updateBuddy();
+ }
+
+
+private:
+ void updateBuddy();
+
+ QCString myBuddy;
+
+};
+
+class QDesignerWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ QDesignerWidget( FormWindow *fw, QWidget *parent, const char *name )
+ : QWidget( parent, name, WResizeNoErase ), formwindow( fw ) {}
+
+protected:
+ void paintEvent( QPaintEvent *e );
+
+private:
+ FormWindow *formwindow;
+
+};
+
+class QDesignerDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ QDesignerDialog( FormWindow *fw, QWidget *parent, const char *name )
+ : QDialog( parent, name, FALSE, WResizeNoErase ), formwindow( fw ) {}
+
+protected:
+ void paintEvent( QPaintEvent *e );
+
+private:
+ FormWindow *formwindow;
+
+};
+
+class QDesignerToolButton : public QToolButton
+{
+ Q_OBJECT
+ Q_PROPERTY( int buttonGroupId READ buttonGroupId WRITE setButtonGroupId )
+
+public:
+ QDesignerToolButton( QWidget *parent, const char *name )
+ : QToolButton( parent, name ) {}
+
+ bool isInButtonGroup() const {
+ return parentWidget() && parentWidget()->inherits( "QButtonGroup" );
+ }
+ int buttonGroupId() const {
+ return parentWidget() && parentWidget()->inherits( "QButtonGroup" ) ? ( (QButtonGroup*)parentWidget() )->id( (QButton*)this ) : -1;
+ }
+ void setButtonGroupId( int id ) {
+ if ( parentWidget() && parentWidget()->inherits( "QButtonGroup" ) ) {
+ ( (QButtonGroup*)parentWidget() )->remove( this );
+ ( (QButtonGroup*)parentWidget() )->insert( this, id );
+ }
+ }
+};
+
+class QDesignerRadioButton : public QRadioButton
+{
+ Q_OBJECT
+ Q_PROPERTY( int buttonGroupId READ buttonGroupId WRITE setButtonGroupId )
+
+public:
+ QDesignerRadioButton( QWidget *parent, const char *name )
+ : QRadioButton( parent, name ) {}
+
+ bool isInButtonGroup() const {
+ return parentWidget() && parentWidget()->inherits( "QButtonGroup" );
+ }
+ int buttonGroupId() const {
+ return parentWidget() && parentWidget()->inherits( "QButtonGroup" ) ? ( (QButtonGroup*)parentWidget() )->id( (QButton*)this ) : -1;
+ }
+ void setButtonGroupId( int id ) {
+ if ( parentWidget() && parentWidget()->inherits( "QButtonGroup" ) ) {
+ ( (QButtonGroup*)parentWidget() )->remove( this );
+ ( (QButtonGroup*)parentWidget() )->insert( this, id );
+ }
+ }
+
+};
+
+class QDesignerPushButton : public QPushButton
+{
+ Q_OBJECT
+ Q_PROPERTY( int buttonGroupId READ buttonGroupId WRITE setButtonGroupId )
+
+public:
+ QDesignerPushButton( QWidget *parent, const char *name )
+ : QPushButton( parent, name ) {}
+
+ bool isInButtonGroup() const {
+ return parentWidget() && parentWidget()->inherits( "QButtonGroup" );
+ }
+ int buttonGroupId() const {
+ return parentWidget() && parentWidget()->inherits( "QButtonGroup" ) ? ( (QButtonGroup*)parentWidget() )->id( (QButton*)this ) : -1;
+ }
+ void setButtonGroupId( int id ) {
+ if ( parentWidget() && parentWidget()->inherits( "QButtonGroup" ) ) {
+ ( (QButtonGroup*)parentWidget() )->remove( this );
+ ( (QButtonGroup*)parentWidget() )->insert( this, id );
+ }
+ }
+
+};
+
+class QDesignerCheckBox : public QCheckBox
+{
+ Q_OBJECT
+ Q_PROPERTY( int buttonGroupId READ buttonGroupId WRITE setButtonGroupId )
+
+public:
+ QDesignerCheckBox( QWidget *parent, const char *name )
+ : QCheckBox( parent, name ) {}
+
+ bool isInButtonGroup() const {
+ return parentWidget() && parentWidget()->inherits( "QButtonGroup" );
+ }
+ int buttonGroupId() const {
+ return parentWidget() && parentWidget()->inherits( "QButtonGroup" ) ? ( (QButtonGroup*)parentWidget() )->id( (QButton*)this ) : -1;
+ }
+ void setButtonGroupId( int id ) {
+ if ( parentWidget() && parentWidget()->inherits( "QButtonGroup" ) ) {
+ ( (QButtonGroup*)parentWidget() )->remove( this );
+ ( (QButtonGroup*)parentWidget() )->insert( this, id );
+ }
+ }
+
+};
+
+class EditorDialog : public Dialog
+{
+ Q_OBJECT
+
+public:
+ EditorDialog( FormWindow *fw, QWidget *parent, const char *name )
+ : Dialog( parent, name, FALSE, WResizeNoErase ), formwindow( fw ) { }
+
+protected:
+ void paintEvent( QPaintEvent *e );
+
+private:
+ FormWindow *formwindow;
+
+};
+#endif
diff --git a/kommander/editor/widgetinterface.h b/kommander/editor/widgetinterface.h
new file mode 100644
index 00000000..bf6bcd55
--- /dev/null
+++ b/kommander/editor/widgetinterface.h
@@ -0,0 +1,29 @@
+ /**********************************************************************
+** Copyright (C) 2000-2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef WIDGETINTERFACE_H
+#define WIDGETINTERFACE_H
+
+#include <private/qwidgetinterface_p.h>
+
+#define WidgetInterface QWidgetFactoryInterface
+#define IID_Widget IID_QWidgetFactory
+
+#endif
diff --git a/kommander/editor/wizardeditor.ui b/kommander/editor/wizardeditor.ui
new file mode 100644
index 00000000..c73e2628
--- /dev/null
+++ b/kommander/editor/wizardeditor.ui
@@ -0,0 +1,320 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>WizardEditorBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>WizardEditorBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>369</width>
+ <height>245</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Wizard Page Editor</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout19</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout14</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>pagesLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Wizard pages:</string>
+ </property>
+ </widget>
+ <widget class="QListBox">
+ <property name="name">
+ <cstring>listBox</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout18</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonAdd</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Add</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonRemove</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Remove</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name" stdset="0">
+ <cstring>Spacer11</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonUp</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonDown</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name" stdset="0">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and apply all the changes.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonApply</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Apply</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Apply all changes.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Close the dialog and discard any changes.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="1040">789c5dcf4d73a2401006e0bbbf82726ed61609ca0c4c6ded0125dfd1985baab6f600338c280a46fc08a6f6bf2f3ddd26abc0619eb7677a9aab9ef3361d3bbdab4ebd4db673e5a83cd9383dbd5bad9adf7f7e7d76ba9e70dacfe78ed7fdd1e9ba8e72265599c17adaae99773df033cb9818225f2cc38132027887f4af8d01ee817dc935720d1c7827d648c1910f969273cd8123e4a93a21d2d95ba0ef098d631864409b6f2c13c195063e210389d55720ef0b8dd56764e021c7c8905acd2c93b66aa71a224389fffb0e14fd4062f51119d290115252ab2391c6585ab653a5f6de033294f8fbf74849175544eacc80c120e478b644267451434c90a9659a78d8aa2066585d00c33425ae80d25702b92352756ea91475ce90ba8f4c80299cb5177d58ea8c5a6d819a67b4595b66865a29602632628e3406b9011a73a26b1f96a40c575f19536dc7d959c6543e5f1466f95fd646aba22cabf5fb57c636f9a24ddaa75e52c6b6f90ea3aada2f313b7ccc1b1b1da3e128a67df09aaa1addb82963dfb3b8b7cdf18e9dcfe70e8b687f91b1fba25acf2eb2a289460f17d9a28c4c7c9e1d8ae8f1e9227b1e4feafa859d9f8de378fa8afbfefeecfc030f08f1a3</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="1085">789c5dd0cd6ee2301000e03b4f11911b5ad1189290a8da0324a5e90f29941e2aadf6e0d84ea10d1020849ad5befb7a3cceaa29e2e06f663c33ce55cf7a9dcfacde55e758d16acd2cb6a207abc74f9b8dfcf5fbe79f4e97f896fabb8145ba3f3addbec5ac74b715704ed5d9769c01cb73e0423368f80224c190e53e70091c389e83d98366e83942679f0c43cc7e0087c4f3307b63c8b1d559337459c6810f48df137aab49436c750f748917320f78418e4cf65993fa04b33572c4313b067a039f333de80e39e238680ff4d5d2581c69d2c0c3ad8e0db1f30619127cd1dcd00c7a4452824c80a321359d73cd8c129c1b1b0acc726030a414b31299f9989d1952a4d0ccc23073819f861c973c2133d3b904aacf6ceeda9a8c12bc5b219929de21f9005900a99bf9f8e9a8a159728a5477f5d77847367719305373b1788b14668d4c9337d95b2437ef5d03b9c84df10a28fc866fc05c9522fbf0b369c6b8d0c7ffb1fc6db57effb0bfc68acd7657ee0fedba63599dea73d18a7dca525ec6ed3aa16293a81d2bf232beb1bfc578d58a416731ad641da95381b1e3f496ca939432c9f3bb7b8c450f8fb39994b18c93493a36fda2a7b9aa8ae3e4b278b69b192aa822499dc2d6cddc68b94ff697f46c7fdd255ad6f5e2dbdbfac7c3cbd8ecf7f7baf30f538f0154</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>buttonHelp</sender>
+ <signal>clicked()</signal>
+ <receiver>WizardEditorBase</receiver>
+ <slot>helpClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonApply</sender>
+ <signal>clicked()</signal>
+ <receiver>WizardEditorBase</receiver>
+ <slot>applyClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonUp</sender>
+ <signal>clicked()</signal>
+ <receiver>WizardEditorBase</receiver>
+ <slot>upClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonDown</sender>
+ <signal>clicked()</signal>
+ <receiver>WizardEditorBase</receiver>
+ <slot>downClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonAdd</sender>
+ <signal>clicked()</signal>
+ <receiver>WizardEditorBase</receiver>
+ <slot>addClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonRemove</sender>
+ <signal>clicked()</signal>
+ <receiver>WizardEditorBase</receiver>
+ <slot>removeClicked()</slot>
+ </connection>
+ <connection>
+ <sender>listBox</sender>
+ <signal>selected(int)</signal>
+ <receiver>WizardEditorBase</receiver>
+ <slot>itemSelected(int)</slot>
+ </connection>
+ <connection>
+ <sender>listBox</sender>
+ <signal>highlighted(int)</signal>
+ <receiver>WizardEditorBase</receiver>
+ <slot>itemHighlighted(int)</slot>
+ </connection>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>WizardEditorBase</receiver>
+ <slot>okClicked()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>WizardEditorBase</receiver>
+ <slot>cancelClicked()</slot>
+ </connection>
+</connections>
+<slots>
+ <slot access="protected">init()</slot>
+ <slot access="protected">destroy()</slot>
+ <slot access="protected">addClicked()</slot>
+ <slot access="protected">applyClicked()</slot>
+ <slot access="protected">cancelClicked()</slot>
+ <slot access="protected">downClicked()</slot>
+ <slot access="protected">helpClicked()</slot>
+ <slot access="protected">itemHighlighted(int)</slot>
+ <slot access="protected">itemSelected(int)</slot>
+ <slot access="protected">okClicked()</slot>
+ <slot access="protected">removeClicked()</slot>
+ <slot access="protected">upClicked()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/editor/wizardeditorimpl.cpp b/kommander/editor/wizardeditorimpl.cpp
new file mode 100644
index 00000000..12f8d33f
--- /dev/null
+++ b/kommander/editor/wizardeditorimpl.cpp
@@ -0,0 +1,220 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "wizardeditorimpl.h"
+#include "formwindow.h"
+#include "mainwindow.h"
+#include "pixmapchooser.h"
+#include "command.h"
+
+#include <qwizard.h>
+#include <qlistbox.h>
+#include <qpushbutton.h>
+#include <kinputdialog.h>
+
+#include <klocale.h>
+
+WizardEditor::WizardEditor( QWidget *parent, QWizard *w, FormWindow *fw )
+ : WizardEditorBase( parent, 0 ), formwindow( fw ), wizard( w )
+{
+ connect( buttonHelp, SIGNAL( clicked() ), MainWindow::self, SLOT( showDialogHelp() ) );
+ fillListBox();
+}
+
+WizardEditor::~WizardEditor()
+{
+ commands.setAutoDelete( true );
+}
+
+void WizardEditor::okClicked()
+{
+ applyClicked();
+ accept();
+}
+
+void WizardEditor::cancelClicked()
+{
+ reject();
+}
+
+void WizardEditor::applyClicked()
+{
+ if ( commands.isEmpty() ) return;
+
+ // schedule macro command
+ MacroCommand* cmd = new MacroCommand( i18n("Edit Wizard Pages" ), formwindow, commands );
+ formwindow->commandHistory()->addCommand( cmd );
+ cmd->execute();
+
+ // clear command list
+ commands.clear();
+
+ // fix wizard buttons
+ for ( int i = 0; i < wizard->pageCount(); i++ ) {
+
+ QWidget * page = wizard->page( i );
+ if ( i == 0 ) { // first page
+
+ wizard->setBackEnabled( page, false );
+ wizard->setNextEnabled( page, true );
+ }
+ else if ( i == wizard->pageCount() - 1 ) { // last page
+
+ wizard->setBackEnabled( page, true );
+ wizard->setNextEnabled( page, false );
+ }
+ else {
+
+ wizard->setBackEnabled( page, true );
+ wizard->setNextEnabled( page, true );
+ }
+ wizard->setFinishEnabled( page, false );
+ }
+
+ // update listbox
+ int index = listBox->currentItem();
+ fillListBox();
+ listBox->setCurrentItem( index );
+
+ // show current page
+ wizard->showPage( wizard->page( 0 ) );
+}
+
+void WizardEditor::helpClicked()
+{
+
+}
+
+void WizardEditor::addClicked()
+{
+ int index = listBox->currentItem() + 1;
+ // update listbox
+ listBox->insertItem( i18n( "Page" ), index );
+
+ // schedule add command
+ AddWizardPageCommand *cmd = new AddWizardPageCommand( i18n("Add Page to %1" ).arg( wizard->name() ),
+ formwindow, wizard, "Page", index, false);
+ commands.append( cmd );
+
+ // update buttons
+ updateButtons();
+}
+
+void WizardEditor::removeClicked()
+{
+ if (listBox->count() < 2 ) return;
+
+ int index = listBox->currentItem();
+
+ // update listbox
+ listBox->removeItem( index);
+
+ // schedule remove command
+ DeleteWizardPageCommand *cmd = new DeleteWizardPageCommand( i18n("Delete Page %1 of %2" )
+ .arg( listBox->text( index ) ).arg( wizard->name() ),
+ formwindow, wizard, index, false );
+ commands.append( cmd );
+
+ // update buttons
+ updateButtons();
+}
+
+void WizardEditor::upClicked()
+{
+ int index1 = listBox->currentItem();
+ int index2 = index1 - 1;
+
+ // swap listbox items
+ QString item1 = listBox->text( index1 );
+ listBox->removeItem( index1 );
+ listBox->insertItem( item1, index2 );
+ listBox->setCurrentItem( index2 );
+
+ // schedule swap command
+ SwapWizardPagesCommand *cmd = new SwapWizardPagesCommand( i18n("Swap Pages %1 and %2 of %3" ).arg( index1 ).arg( index2 )
+ .arg( wizard->name() ), formwindow, wizard, index1, index2);
+ commands.append( cmd );
+
+ // update buttons
+ updateButtons();
+}
+
+void WizardEditor::downClicked()
+{
+ int index1 = listBox->currentItem();
+ int index2 = index1 + 1;
+
+ // swap listbox items
+ QString item1 = listBox->text( index1 );
+ listBox->removeItem( index1 );
+ listBox->insertItem( item1, index2 );
+ listBox->setCurrentItem( index2 );
+
+ // schedule swap command
+ SwapWizardPagesCommand *cmd = new SwapWizardPagesCommand( i18n("Swap Pages %1 and %2 of %3" ).arg( index1 ).arg( index2 )
+ .arg( wizard->name() ), formwindow, wizard, index2, index1);
+ commands.append( cmd );
+
+ // update buttons
+ updateButtons();
+}
+
+void WizardEditor::fillListBox()
+{
+ listBox->clear();
+
+ if ( !wizard ) return;
+ for ( int i = 0; i < wizard->pageCount(); i++ )
+ listBox->insertItem( wizard->title( wizard->page( i ) ) );
+
+ updateButtons();
+}
+
+void WizardEditor::itemHighlighted( int )
+{
+ updateButtons();
+}
+
+void WizardEditor::itemSelected( int index )
+{
+ if ( index < 0 ) return;
+
+ bool ok = false;
+ QString text = KInputDialog::getText( i18n("Page Title"), i18n("New page title:" ), listBox->text( index ), &ok, this );
+ if ( ok ) {
+ QString pn( i18n("Rename page %1 of %2" ).arg( listBox->text( index ) ).arg( wizard->name() ) );
+ RenameWizardPageCommand *cmd = new RenameWizardPageCommand( pn, formwindow, wizard, index, text );
+ commands.append( cmd );
+ listBox->changeItem( text, index );
+ }
+}
+
+void WizardEditor::updateButtons()
+{
+ int index = listBox->currentItem();
+
+ buttonUp->setEnabled( index > 0 );
+ buttonDown->setEnabled( index < (int)listBox->count() - 1 );
+ buttonRemove->setEnabled( index >= 0 );
+
+ if ( listBox->count() < 2 )
+ buttonRemove->setEnabled( false );
+}
+#include "wizardeditorimpl.moc"
diff --git a/kommander/editor/wizardeditorimpl.h b/kommander/editor/wizardeditorimpl.h
new file mode 100644
index 00000000..3a9f909e
--- /dev/null
+++ b/kommander/editor/wizardeditorimpl.h
@@ -0,0 +1,64 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef WIZARDEDITORIMPL_H
+#define WIZARDEDITORIMPL_H
+
+class QWizard;
+class FormWindow;
+
+#include <qptrlist.h>
+
+#include "wizardeditor.h"
+#include "command.h"
+
+class WizardEditor : public WizardEditorBase
+{
+ Q_OBJECT
+
+public:
+ WizardEditor( QWidget *parent, QWizard *wizard, FormWindow *fw );
+ ~WizardEditor();
+
+protected slots:
+ void okClicked();
+ void applyClicked();
+ void cancelClicked();
+ void helpClicked();
+
+ void addClicked();
+ void removeClicked();
+ void upClicked();
+ void downClicked();
+
+ void itemHighlighted( int );
+ void itemSelected( int );
+
+private:
+ void updateButtons();
+ void fillListBox();
+
+private:
+ FormWindow *formwindow;
+ QWizard *wizard;
+ QPtrList<Command> commands;
+};
+
+#endif
diff --git a/kommander/editor/workspace.cpp b/kommander/editor/workspace.cpp
new file mode 100644
index 00000000..c5c6420e
--- /dev/null
+++ b/kommander/editor/workspace.cpp
@@ -0,0 +1,787 @@
+/**********************************************************************
+** Copyright (C) 2000-2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qvariant.h> // HP-UX compiler needs this here
+#include <qlistview.h>
+#include "workspace.h"
+#include "formwindow.h"
+#include "mainwindow.h"
+#include "pixmapchooser.h"
+#include "globaldefs.h"
+#include "command.h"
+#ifndef KOMMANDER
+#include "project.h"
+#include "pixmapcollection.h"
+#include "sourcefile.h"
+#include "sourceeditor.h"
+#endif
+#include "formfile.h"
+
+#include <qheader.h>
+#include <qfileinfo.h>
+#include <qapplication.h>
+#include <qpainter.h>
+#include <qpen.h>
+#include <qobjectlist.h>
+#include <qworkspace.h>
+#include <qpopupmenu.h>
+#include <qtextstream.h>
+#include "qcompletionedit.h"
+
+#include <kurldrag.h>
+#include <klocale.h>
+
+static const char * const folderxpm[]={
+ "16 16 6 1",
+ ". c None",
+ "b c #ffff00",
+ "d c #000000",
+ "* c #999999",
+ "a c #cccccc",
+ "c c #ffffff",
+ "................",
+ "................",
+ "..*****.........",
+ ".*ababa*........",
+ "*abababa******..",
+ "*cccccccccccc*d.",
+ "*cbababababab*d.",
+ "*cabababababa*d.",
+ "*cbababababab*d.",
+ "*cabababababa*d.",
+ "*cbababababab*d.",
+ "*cabababababa*d.",
+ "*cbababababab*d.",
+ "**************d.",
+ ".dddddddddddddd.",
+ "................"};
+
+static const char * const file_xpm[]={
+ "16 16 5 1",
+ ". c #7f7f7f",
+ "# c None",
+ "c c #000000",
+ "b c #bfbfbf",
+ "a c #ffffff",
+ "################",
+ "..........######",
+ ".aaaaaaaab.#####",
+ ".aaaaaaaaba.####",
+ ".aaaaaaaacccc###",
+ ".aaaaaaaaaabc###",
+ ".aaaaaaaaaabc###",
+ ".aaaaaaaaaabc###",
+ ".aaaaaaaaaabc###",
+ ".aaaaaaaaaabc###",
+ ".aaaaaaaaaabc###",
+ ".aaaaaaaaaabc###",
+ ".aaaaaaaaaabc###",
+ ".aaaaaaaaaabc###",
+ ".bbbbbbbbbbbc###",
+ "ccccccccccccc###"};
+
+static QPixmap *folderPixmap = 0;
+static QPixmap *filePixmap = 0;
+static QPixmap* formPixmap = 0;
+
+#ifndef KOMMANDER
+WorkspaceItem::WorkspaceItem( QListView *parent, Project* p )
+#else
+WorkspaceItem::WorkspaceItem( QListView *parent )
+#endif
+ : QListViewItem( parent )
+{
+ init();
+#ifndef KOMMANDER
+ project = p;
+#endif
+ t = ProjectType;
+ setPixmap( 0, *folderPixmap );
+ setExpandable( false );
+}
+
+#ifndef KOMMANDER
+WorkspaceItem::WorkspaceItem( QListViewItem *parent, SourceFile* sf )
+ : QListViewItem( parent )
+{
+ init();
+ sourceFile = sf;
+ t = SourceFileType;
+ setPixmap( 0, *filePixmap );
+}
+#endif
+
+WorkspaceItem::WorkspaceItem( QListViewItem *parent, FormFile* ff, Type type )
+ : QListViewItem( parent )
+{
+ init();
+ formFile = ff;
+ t = type;
+ if ( type == FormFileType ) {
+ setPixmap( 0, *formPixmap );
+ QObject::connect( ff, SIGNAL( somethingChanged(FormFile*) ), listView(), SLOT( update(FormFile*) ) );
+#ifndef KOMMANDER
+ if ( formFile->supportsCodeFile() )
+ (void) new WorkspaceItem( this, formFile, FormSourceType );
+ } else if ( type == FormSourceType ) {
+ setPixmap( 0, *filePixmap );
+#endif
+ }
+}
+
+WorkspaceItem::WorkspaceItem( QListView *parent, FormFile* ff, Type type )
+ : QListViewItem( parent )
+{
+ init();
+ formFile = ff;
+ t = type;
+ if ( type == FormFileType ) {
+ setPixmap( 0, *formPixmap );
+ QObject::connect( ff, SIGNAL( somethingChanged(FormFile*) ), listView(), SLOT( update(FormFile*) ) );
+#ifndef KOMMANDER
+ if ( formFile->supportsCodeFile() )
+ (void) new WorkspaceItem( this, formFile, FormSourceType );
+ } else if ( type == FormSourceType ) {
+ setPixmap( 0, *filePixmap );
+#endif
+ }
+}
+
+
+void WorkspaceItem::init()
+{
+ autoOpen = false;
+ useOddColor = false;
+#ifndef KOMMANDER
+ project = 0;
+ sourceFile = 0;
+#endif
+ formFile = 0;
+}
+
+void WorkspaceItem::paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int align )
+{
+ QColorGroup g( cg );
+ g.setColor( QColorGroup::Base, backgroundColor() );
+ g.setColor( QColorGroup::Foreground, Qt::black );
+
+#ifndef KOMMANDER
+ if ( type() == FormSourceType && !formFile->hasFormCode() ) {
+ g.setColor( QColorGroup::Text, listView()->palette().disabled().color( QColorGroup::Text) );
+ g.setColor( QColorGroup::HighlightedText, listView()->palette().disabled().color( QColorGroup::Text) );
+ } else {
+#endif
+ g.setColor( QColorGroup::Text, Qt::black );
+#ifndef KOMMANDER
+ }
+#endif
+ p->save();
+
+ if ( isModified() ) {
+ QFont f = p->font();
+ f.setBold( true );
+ p->setFont( f );
+ }
+
+ QListViewItem::paintCell( p, g, column, width, align );
+ p->setPen( QPen( cg.dark(), 1 ) );
+ if ( column == 0 )
+ p->drawLine( 0, 0, 0, height() - 1 );
+ if ( listView()->firstChild() != this ) {
+ if ( nextSibling() != itemBelow() && itemBelow()->depth() < depth() ) {
+ int d = depth() - itemBelow()->depth();
+ p->drawLine( -listView()->treeStepSize() * d, height() - 1, 0, height() - 1 );
+ }
+ }
+ p->drawLine( 0, height() - 1, width, height() - 1 );
+ p->drawLine( width - 1, 0, width - 1, height() );
+ p->restore();
+}
+
+QString WorkspaceItem::text( int column ) const
+{
+ if ( column != 0 )
+ return QListViewItem::text( column );
+ switch( t ) {
+#ifndef KOMMANDER
+ case ProjectType:
+ if ( project->isDummy() )
+ return i18n("<No Project>" );
+ return project->makeRelative( project->fileName() );
+#endif
+ case FormFileType:
+ return formFile->formName() + ": " + formFile->fileName();
+#ifndef KOMMANDER
+ case FormSourceType:
+ return formFile->codeFile();
+ case SourceFileType:
+ return sourceFile->fileName();
+#endif
+ }
+
+ return QString::null; // shut up compiler
+}
+
+void WorkspaceItem::fillCompletionList( QStringList& completion )
+{
+ switch( t ) {
+ case ProjectType:
+ break;
+ case FormFileType:
+ completion += formFile->formName();
+ completion += formFile->fileName();
+ break;
+#ifndef KOMMANDER
+ case FormSourceType:
+ completion += formFile->codeFile();
+ break;
+ case SourceFileType:
+ completion += sourceFile->fileName();
+ break;
+#endif
+ }
+}
+
+bool WorkspaceItem::checkCompletion( const QString& completion )
+{
+ switch( t ) {
+ case ProjectType:
+ break;
+ case FormFileType:
+ return completion == formFile->formName()
+ || completion == formFile->fileName();
+#ifndef KOMMANDER
+ case FormSourceType:
+ return completion == formFile->codeFile();
+ case SourceFileType:
+ return completion == sourceFile->fileName();
+#endif
+ }
+ return false;
+}
+
+
+bool WorkspaceItem::isModified() const
+{
+#ifndef KOMMANDER
+ switch( t ) {
+ case ProjectType:
+ return project->isModified();
+ case FormFileType:
+ return formFile->isModified( FormFile::WFormWindow );
+ case FormSourceType:
+ return formFile->isModified( FormFile::WFormCode );
+ case SourceFileType:
+ return sourceFile->isModified();
+ }
+ return false; // shut up compiler
+#else
+ return formFile->isModified();
+#endif
+}
+
+QString WorkspaceItem::key( int column, bool ) const
+{
+ QString key = text( column );
+ if ( t == FormFileType )
+ key.prepend( "0" );
+ else
+ key.prepend( "a" );
+ return key;
+}
+
+QColor WorkspaceItem::backgroundColor()
+{
+ bool b = useOddColor;
+ if ( t == FormSourceType && parent() )
+ b = ( ( WorkspaceItem*)parent() )->useOddColor;
+ return b ? *backColor2 : *backColor1;
+}
+
+
+void WorkspaceItem::setOpen( bool b )
+{
+ QListViewItem::setOpen( b );
+ autoOpen = false;
+}
+
+void WorkspaceItem::setAutoOpen( bool b )
+{
+ QListViewItem::setOpen( b );
+ autoOpen = b;
+}
+
+Workspace::Workspace( QWidget *parent, MainWindow *mw )
+ : QListView( parent, 0, WStyle_Customize | WStyle_NormalBorder | WStyle_Title |
+ WStyle_Tool | WStyle_MinMax | WStyle_SysMenu ), mainWindow( mw ),
+#ifndef KOMMANDER
+ project( 0 ), completionDirty( false )
+#else
+ completionDirty( false )
+#endif
+{
+ init_colors();
+
+ setDefaultRenameAction( Accept );
+ blockNewForms = false;
+ bufferEdit = 0;
+ header()->setStretchEnabled( true );
+ header()->hide();
+ setSorting( 0 );
+ setResizePolicy( QScrollView::Manual );
+#ifndef KOMMANDER
+ setIcon( PixmapChooser::loadPixmap( "logo" ) );
+#endif
+ QPalette p( palette() );
+ p.setColor( QColorGroup::Base, QColor( *backColor2 ) );
+ (void)*selectedBack; // hack
+ setPalette( p );
+ addColumn( i18n("Files" ) );
+ setAllColumnsShowFocus( true );
+ connect( this, SIGNAL( mouseButtonClicked( int, QListViewItem *, const QPoint &, int ) ),
+ this, SLOT( itemClicked( int, QListViewItem *, const QPoint& ) ) ),
+ connect( this, SIGNAL( doubleClicked( QListViewItem * ) ),
+ this, SLOT( itemDoubleClicked( QListViewItem * ) ) ),
+ connect( this, SIGNAL( contextMenuRequested( QListViewItem *, const QPoint &, int ) ),
+ this, SLOT( rmbClicked( QListViewItem *, const QPoint& ) ) ),
+ setHScrollBarMode( AlwaysOff );
+ setVScrollBarMode( AlwaysOn );
+ viewport()->setAcceptDrops( true );
+ setAcceptDrops( true );
+ setColumnWidthMode( 1, Manual );
+
+ if ( !folderPixmap ) {
+ folderPixmap = new QPixmap( folderxpm );
+ filePixmap = new QPixmap( file_xpm );
+ formPixmap = new QPixmap( PixmapChooser::loadPixmap( "form.xpm", PixmapChooser::Mini ) );
+ }
+
+#ifdef KOMMANDER
+ makeConnections(mw);
+#endif
+}
+
+
+#ifndef KOMMANDER
+void Workspace::projectDestroyed( QObject* o )
+{
+ if ( o == project ) {
+ project = 0;
+ clear();
+ }
+}
+#endif
+
+#ifndef KOMMANDER
+void Workspace::setCurrentProject( Project *pro )
+{
+ if ( project == pro )
+ return;
+ if ( project ) {
+ disconnect( project, SIGNAL( sourceFileAdded(SourceFile*) ), this, SLOT( sourceFileAdded(SourceFile*) ) );
+ disconnect( project, SIGNAL( sourceFileRemoved(SourceFile*) ), this, SLOT( sourceFileRemoved(SourceFile*) ) );
+ disconnect( project, SIGNAL( formFileAdded(FormFile*) ), this, SLOT( formFileAdded(FormFile*) ) );
+ disconnect( project, SIGNAL( formFileRemoved(FormFile*) ), this, SLOT( formFileRemoved(FormFile*) ) );
+ disconnect( project, SIGNAL( projectModified() ), this, SLOT( update() ) );
+ }
+ project = pro;
+ connect( project, SIGNAL( sourceFileAdded(SourceFile*) ), this, SLOT( sourceFileAdded(SourceFile*) ) );
+ connect( project, SIGNAL( sourceFileRemoved(SourceFile*) ), this, SLOT( sourceFileRemoved(SourceFile*) ) );
+ connect( project, SIGNAL( formFileAdded(FormFile*) ), this, SLOT( formFileAdded(FormFile*) ) );
+ connect( project, SIGNAL( formFileRemoved(FormFile*) ), this, SLOT( formFileRemoved(FormFile*) ) );
+ connect( project, SIGNAL( destroyed(QObject*) ), this, SLOT( projectDestroyed(QObject*) ) );
+ connect( project, SIGNAL( projectModified() ), this, SLOT( update() ) );
+ clear();
+
+ if ( bufferEdit )
+ bufferEdit->clear();
+
+ projectItem = new WorkspaceItem( this, project );
+
+ projectItem->setOpen( true );
+
+ for ( QPtrListIterator<SourceFile> sources = project->sourceFiles();
+ sources.current(); ++sources ) {
+ SourceFile* f = sources.current();
+ (void) new WorkspaceItem( projectItem, f );
+ }
+
+ for ( QPtrListIterator<FormFile> forms = project->formFiles();
+ forms.current(); ++forms ) {
+ FormFile* f = forms.current();
+ (void) new WorkspaceItem( projectItem, f );
+ }
+
+ updateColors();
+ completionDirty = true;
+}
+#endif
+
+#ifdef KOMMANDER
+void Workspace::makeConnections(MainWindow *)
+{
+ // FIXME
+}
+#endif
+
+#ifndef KOMMANDER
+void Workspace::sourceFileAdded( SourceFile* sf )
+{
+ (void) new WorkspaceItem( projectItem, sf );
+ Q_UNUSED(sf);
+ updateColors();
+}
+#endif
+
+#ifndef KOMMANDER
+void Workspace::sourceFileRemoved( SourceFile* sf )
+{
+ delete findItem( sf );
+ updateColors();
+}
+#endif
+
+void Workspace::formFileAdded( FormFile* ff )
+{
+#ifndef KOMMANDER
+ (void) new WorkspaceItem( projectItem, ff );
+#else
+ (void) new WorkspaceItem( this, ff );
+#endif
+ updateColors();
+}
+
+void Workspace::formFileRemoved( FormFile* ff )
+{
+ delete findItem( ff );
+ updateColors();
+}
+
+
+void Workspace::update()
+{
+ completionDirty = true;
+ triggerUpdate();
+}
+
+void Workspace::update( FormFile* ff )
+{
+ QListViewItem* i = findItem( ff );
+ if ( i ) {
+ i->repaint();
+ if ( (i = i->firstChild()) )
+ i->repaint();
+ }
+}
+
+
+void Workspace::activeFormChanged( FormWindow *fw )
+{
+ WorkspaceItem *i = findItem( fw->formFile() );
+ if ( i ) {
+ setCurrentItem( i );
+ setSelected( i, true );
+ if ( !i->isOpen() )
+ i->setAutoOpen( true );
+ }
+
+ closeAutoOpenItems();
+
+}
+
+#ifndef KOMMANDER
+void Workspace::activeEditorChanged( SourceEditor *se )
+{
+ if ( !se->object() )
+ return;
+
+ if ( se->formWindow() ) {
+ WorkspaceItem *i = findItem( se->formWindow()->formFile() );
+ if ( i && i->firstChild() ) {
+ if ( !i->isOpen() )
+ i->setAutoOpen( true );
+ setCurrentItem( i->firstChild() );
+ setSelected( i->firstChild(), true );
+ }
+ } else {
+ WorkspaceItem *i = findItem( se->sourceFile() );
+ if ( i ) {
+ setCurrentItem( i );
+ setSelected( i, true );
+ }
+ }
+
+ closeAutoOpenItems();
+}
+#endif
+
+WorkspaceItem *Workspace::findItem( FormFile* ff)
+{
+ QListViewItemIterator it( this );
+ for ( ; it.current(); ++it ) {
+ if ( ( (WorkspaceItem*)it.current() )->formFile == ff )
+ return (WorkspaceItem*)it.current();
+ }
+ return 0;
+}
+
+#ifndef KOMMANDER
+WorkspaceItem *Workspace::findItem( SourceFile *sf )
+{
+ QListViewItemIterator it( this );
+ for ( ; it.current(); ++it ) {
+ if ( ( (WorkspaceItem*)it.current() )->sourceFile == sf )
+ return (WorkspaceItem*)it.current();
+ }
+ return 0;
+}
+#endif
+
+void Workspace::closeAutoOpenItems()
+{
+ QListViewItemIterator it( this );
+ for ( ; it.current(); ++it ) {
+ WorkspaceItem* i = (WorkspaceItem*) it.current();
+ WorkspaceItem* ip = (WorkspaceItem*) i->parent();
+ if ( i->type() == WorkspaceItem::FormSourceType ) {
+ if ( !i->isSelected() && !ip->isSelected()
+ && ip->isAutoOpen() ) {
+ ip->setAutoOpen( false );
+ }
+ }
+ }
+}
+
+
+void Workspace::closeEvent( QCloseEvent *e )
+{
+ e->accept();
+}
+
+void Workspace::itemDoubleClicked( QListViewItem *i )
+{
+ if ( ( (WorkspaceItem*)i)->type()== WorkspaceItem::ProjectType )
+ i->setOpen( true );
+}
+
+void Workspace::itemClicked( int button, QListViewItem *i, const QPoint& )
+{
+ if ( !i || button != LeftButton )
+ return;
+
+ closeAutoOpenItems();
+
+ WorkspaceItem* wi = (WorkspaceItem*)i;
+#ifndef KOMMANDER
+ if ( wi->type() == WorkspaceItem::SourceFileType )
+ mainWindow->editSource( wi->sourceFile );
+ switch( wi->type() ) {
+ case WorkspaceItem::ProjectType:
+ break; // ### TODO
+ case WorkspaceItem::FormFileType:
+ wi->formFile->showFormWindow();
+ break;
+ case WorkspaceItem::FormSourceType:
+ wi->formFile->showEditor();
+ break;
+ case WorkspaceItem::SourceFileType:
+ mainWindow->editSource( wi->sourceFile );
+ break;
+ }
+#else
+ wi->formFile->showFormWindow();
+#endif
+}
+
+void Workspace::contentsDropEvent( QDropEvent *e )
+{
+ if (!KURLDrag::canDecode(e))
+ {
+ e->ignore();
+ return;
+ }
+
+ KURL::List files;
+ KURLDrag::decode(e, files);
+ if (files.isEmpty())
+ return;
+
+ for (KURL::List::Iterator it = files.begin(); it != files.end(); ++it)
+ {
+ if (!(*it).isLocalFile())
+ continue;
+ QString fn = (*it).path();
+ mainWindow->fileOpen(fn);
+ }
+}
+
+void Workspace::contentsDragEnterEvent( QDragEnterEvent *e )
+{
+ if ( !KURLDrag::canDecode( e ) )
+ e->ignore();
+ else
+ e->accept();
+}
+
+void Workspace::contentsDragMoveEvent( QDragMoveEvent *e )
+{
+ if ( !KURLDrag::canDecode( e ) )
+ e->ignore();
+ else
+ e->accept();
+}
+
+void Workspace::rmbClicked( QListViewItem *i, const QPoint& pos )
+{
+ if ( !i )
+ return;
+ WorkspaceItem* wi = (WorkspaceItem*)i;
+ enum { OPEN_SOURCE, REMOVE_SOURCE, OPEN_FORM, REMOVE_FORM, OPEN_FORM_SOURCE };
+ QPopupMenu menu( this );
+ switch ( wi->type() ) {
+#ifndef KOMMANDER
+ case WorkspaceItem::SourceFileType:
+ menu.insertItem( i18n("&Open Source File..." ), OPEN_SOURCE );
+ menu.insertSeparator();
+ menu.insertItem( PixmapChooser::loadPixmap( "editcut" ),
+ i18n("&Remove Source File From Project" ), REMOVE_SOURCE );
+ break;
+#endif
+ case WorkspaceItem::FormFileType:
+ menu.insertItem( i18n("&Open Form..." ), OPEN_FORM );
+ menu.insertSeparator();
+ menu.insertItem( PixmapChooser::loadPixmap( "editcut" ),
+#ifndef KOMMANDER
+ i18n("&Remove Form From Project" ), REMOVE_FORM );
+#else
+ i18n("&Remove Form" ), REMOVE_FORM );
+#endif
+ break;
+ case WorkspaceItem::FormSourceType:
+ menu.insertItem( i18n("&Open Form Source..." ), OPEN_FORM_SOURCE );
+ menu.insertSeparator();
+ menu.insertItem( PixmapChooser::loadPixmap( "editcut" ),
+#ifndef KOMMANDER
+ i18n("&Remove Form From Project" ), REMOVE_FORM );
+#else
+ i18n("&Remove Form" ), REMOVE_FORM );
+#endif
+ break;
+#ifndef KOMMANDER
+ case WorkspaceItem::ProjectType:
+ MainWindow::self->popupProjectMenu( pos );
+ return;
+#endif
+ default:
+ return;
+ }
+ switch ( menu.exec( pos ) ) {
+#ifndef KOMMANDER
+ case REMOVE_SOURCE:
+ project->removeSourceFile( wi->sourceFile );
+ break;
+#endif
+ case OPEN_SOURCE:
+ itemClicked( LeftButton, i, pos );
+ break;
+#ifndef KOMMANDER
+ case REMOVE_FORM: // FIXME
+ project->removeFormFile( wi->formFile );
+ break;
+#endif
+ case OPEN_FORM:
+ itemClicked( LeftButton, i, pos );
+ break;
+ case OPEN_FORM_SOURCE:
+ itemClicked( LeftButton, i, pos );
+ break;
+ default:
+ break;
+ }
+}
+
+bool Workspace::eventFilter( QObject *o, QEvent * e )
+{
+ // Reggie, on what type of events do we have to execute updateBufferEdit()
+ if ( o ==bufferEdit && e->type() != QEvent::ChildRemoved )
+ updateBufferEdit();
+ return QListView::eventFilter( o, e );
+}
+
+void Workspace::setBufferEdit( QCompletionEdit *edit )
+{
+ bufferEdit = edit;
+ connect( bufferEdit, SIGNAL( chosen( const QString & ) ),
+ this, SLOT( bufferChosen( const QString & ) ) );
+ bufferEdit->installEventFilter( this );
+}
+
+void Workspace::updateBufferEdit()
+{
+ if ( !bufferEdit || !completionDirty )
+ return;
+ completionDirty = false;
+#ifndef KOMMANDER
+ QStringList completion = MainWindow::self->projectFileNames();
+ while ( it.current() ) {
+ ( (WorkspaceItem*)it.current())->fillCompletionList( completion );
+ ++it;
+ }
+ completion.sort();
+ bufferEdit->setCompletionList( completion );
+#endif
+}
+
+void Workspace::bufferChosen( const QString &buffer )
+{
+ if ( bufferEdit )
+ bufferEdit->setText( "" );
+
+#ifndef KOMMANDER
+ if ( MainWindow::self->projectFileNames().contains( buffer ) ) {
+ MainWindow::self->setCurrentProjectByFilename( buffer );
+ return;
+ }
+#endif
+
+ QListViewItemIterator it( this );
+ while ( it.current() ) {
+ if ( ( (WorkspaceItem*)it.current())->checkCompletion( buffer ) ) {
+ itemClicked( LeftButton, it.current(), QPoint() );
+ break;
+ }
+ ++it;
+ }
+}
+
+void Workspace::updateColors()
+{
+ QListViewItem* i = firstChild();
+ if ( i )
+ i = i->firstChild();
+ bool b = true;
+ while ( i ) {
+ WorkspaceItem* wi = ( WorkspaceItem*) i;
+ i = i->nextSibling();
+ wi->useOddColor = b;
+ b = !b;
+ }
+}
+#include "workspace.moc"
diff --git a/kommander/editor/workspace.h b/kommander/editor/workspace.h
new file mode 100644
index 00000000..e1c0ae8e
--- /dev/null
+++ b/kommander/editor/workspace.h
@@ -0,0 +1,170 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef WORKSPACE_H
+#define WORKSPACE_H
+
+#include <qlistview.h>
+
+class FormWindow;
+class QResizeEvent;
+class QCloseEvent;
+class QDropEvent;
+class QDragMoveEvent;
+class QDragEnterEvent;
+class MainWindow;
+#ifndef KOMMANDER
+class Project;
+class SourceFile;
+#endif
+class FormFile;
+class QCompletionEdit;
+#ifndef KOMMANDER
+ class SourceEditor;
+#endif
+
+class WorkspaceItem : public QListViewItem
+{
+public:
+ enum Type { ProjectType, FormFileType, FormSourceType, SourceFileType };
+
+#ifndef KOMMANDER
+ //WorkspaceItem( QListView *parent, Project* p );
+#else
+ WorkspaceItem(QListView *parent);
+#endif
+#ifndef KOMMANDER
+// WorkspaceItem( QListViewItem *parent, SourceFile* sf );
+#endif
+ WorkspaceItem( QListViewItem *parent, FormFile* ff, Type t = FormFileType );
+ WorkspaceItem( QListView *parent, FormFile* ff, Type t = FormFileType );
+
+ void paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int align );
+
+ Type type() const { return t; }
+
+ bool isModified() const;
+
+ QString text( int ) const;
+
+ void fillCompletionList( QStringList& completion );
+ bool checkCompletion( const QString& completion );
+
+ QString key( int, bool ) const; // column sorting key
+
+#ifndef KOMMANDER
+ Project* project;
+#endif
+#ifndef KOMMANDER
+ SourceFile* sourceFile;
+#endif
+ FormFile* formFile;
+
+ void setOpen( bool );
+
+ void setAutoOpen( bool );
+ bool isAutoOpen() const { return isOpen() && autoOpen; }
+
+ bool useOddColor;
+
+private:
+ void init();
+ bool autoOpen;
+ QColor backgroundColor();
+ Type t;
+};
+
+class Workspace : public QListView
+{
+ Q_OBJECT
+
+public:
+ Workspace( QWidget *parent , MainWindow *mw );
+
+#ifndef KOMMANDER
+ void setCurrentProject( Project *pro );
+#endif
+#ifdef KOMMANDER
+ void makeConnections(MainWindow *);
+#endif
+ void contentsDropEvent( QDropEvent *e );
+ void contentsDragEnterEvent( QDragEnterEvent *e );
+ void contentsDragMoveEvent( QDragMoveEvent *e );
+
+ void setBufferEdit( QCompletionEdit *edit );
+
+public slots:
+
+ void update();
+ void update( FormFile* );
+
+ void activeFormChanged( FormWindow *fw );
+#ifndef KOMMANDER
+// void activeEditorChanged( SourceEditor *se );
+#endif
+
+protected:
+ void closeEvent( QCloseEvent *e );
+ bool eventFilter( QObject *, QEvent * );
+
+
+private slots:
+ void itemClicked( int, QListViewItem *i, const QPoint& pos );
+ void itemDoubleClicked( QListViewItem *i );
+ void rmbClicked( QListViewItem *i, const QPoint& pos );
+ void bufferChosen( const QString &buffer );
+
+#ifndef KOMMANDER
+// void projectDestroyed( QObject* );
+#endif
+
+#ifndef KOMMANDER
+// void sourceFileAdded( SourceFile* );
+ // void sourceFileRemoved( SourceFile* );
+#endif
+
+ void formFileAdded( FormFile* );
+ void formFileRemoved( FormFile* );
+
+private:
+ WorkspaceItem *findItem( FormFile *ff );
+#ifndef KOMMANDER
+ WorkspaceItem *findItem( SourceFile *sf );
+#endif
+
+ void closeAutoOpenItems();
+
+private:
+ MainWindow *mainWindow;
+#ifndef KOMMANDER
+ Project *project;
+#endif
+#ifndef KOMMANDER
+ WorkspaceItem *projectItem;
+#endif
+ QCompletionEdit *bufferEdit;
+ bool blockNewForms;
+ void updateBufferEdit();
+ bool completionDirty;
+ void updateColors();
+
+};
+
+#endif
diff --git a/kommander/examples/Makefile.am b/kommander/examples/Makefile.am
new file mode 100644
index 00000000..92e9f07a
--- /dev/null
+++ b/kommander/examples/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS=current old tutorial
diff --git a/kommander/examples/current/Makefile.am b/kommander/examples/current/Makefile.am
new file mode 100644
index 00000000..c58b4c7d
--- /dev/null
+++ b/kommander/examples/current/Makefile.am
@@ -0,0 +1,3 @@
+execkmdrdir = ${kde_datadir}/kmdr-editor/editor/current
+
+execkmdr_SCRIPTS = a1.kmdr b1.kmdr editor-poc.kmdr keyvaluecombo.kmdr kpartmwframe.kmdr kpartpart.kmdr passvariables.kmdr tableselect.kmdr
diff --git a/kommander/examples/current/a1.kmdr b/kommander/examples/current/a1.kmdr
new file mode 100755
index 00000000..e8b99ac3
--- /dev/null
+++ b/kommander/examples/current/a1.kmdr
@@ -0,0 +1,258 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form2</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>441</width>
+ <height>230</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>a1 - calling dialog</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string>debug(env("HOME"))
+debug("pid="+pid)</string>
+ <string></string>
+ </stringlist>
+ </property>
+ <property name="useInternalParser">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="Label" row="0" column="0">
+ <property name="name">
+ <cstring>Label52</cstring>
+ </property>
+ <property name="text">
+ <string>data1</string>
+ </property>
+ </widget>
+ <widget class="StatusBar" row="5" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>StatusBar8</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout37</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="Label">
+ <property name="name">
+ <cstring>Label24</cstring>
+ </property>
+ <property name="text">
+ <string>#1</string>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LineEdit7</cstring>
+ </property>
+ <property name="text">
+ <string>7</string>
+ </property>
+ </widget>
+ <widget class="Label">
+ <property name="name">
+ <cstring>Label25</cstring>
+ </property>
+ <property name="text">
+ <string>#2</string>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LineEdit8</cstring>
+ </property>
+ <property name="text">
+ <string>Hello World</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="LineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>LineEdit78</cstring>
+ </property>
+ <property name="text">
+ <string>Send me</string>
+ </property>
+ </widget>
+ <widget class="Label" row="1" column="0">
+ <property name="name">
+ <cstring>Label52_2</cstring>
+ </property>
+ <property name="text">
+ <string>data2</string>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>LineEdit79</cstring>
+ </property>
+ <property name="text">
+ <string>and again</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="4" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout83</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer21</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton36</cstring>
+ </property>
+ <property name="text">
+ <string>Call b&amp;1 with parameters</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>b = dialog("b1.kmdr", LineEdit7.text+" \""+LineEdit8.text+"\"")
+StatusBar8.setText("Returned: "+b)</string>
+ </stringlist>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer22</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>46</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout84</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer88</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>80</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton128</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Call b1 with named parameters</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>b = dialog("b1.kmdr", "data1=\""+LineEdit78.text+"\" data2=\""+LineEdit79.text+"\"")
+StatusBar8.setText("Returned: "+b)</string>
+ </stringlist>
+ </property>
+ <property name="blockGUI">
+ <enum>None</enum>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer89</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>60</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/current/b1.kmdr b/kommander/examples/current/b1.kmdr
new file mode 100755
index 00000000..09725243
--- /dev/null
+++ b/kommander/examples/current/b1.kmdr
@@ -0,0 +1,135 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form3</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form3</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>364</width>
+ <height>140</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>b1 receiver for a1</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string>if str_length(_ARGS) == 0 then
+ StatusBar9.insertItem("data1="+_data1, 0)
+ StatusBar9.insertItem("data2="+_data2, 1)
+else
+ StatusBar9.insertItem("ARGCOUNT="+_ARGCOUNT, 0)
+ StatusBar9.insertItem("ARG1="+_ARG1, 1)
+ StatusBar9.insertItem("ARG2="+_ARG2, 2)
+endif
+//message_info(parentPid)</string>
+ <string></string>
+ </stringlist>
+ </property>
+ <property name="useInternalParser">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="Label" row="0" column="0">
+ <property name="name">
+ <cstring>Label53</cstring>
+ </property>
+ <property name="text">
+ <string>Value</string>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="0" column="1" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>LineEdit79</cstring>
+ </property>
+ <property name="text">
+ <string>Return me</string>
+ </property>
+ </widget>
+ <widget class="CloseButton" row="1" column="2">
+ <property name="name">
+ <cstring>CloseButton2</cstring>
+ </property>
+ <property name="text">
+ <string>Retur&amp;n</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>echo(LineEdit79.text)</string>
+ </stringlist>
+ </property>
+ </widget>
+ <spacer row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Spacer90</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>111</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="StatusBar" row="2" column="0" rowspan="1" colspan="5">
+ <property name="name">
+ <cstring>StatusBar9</cstring>
+ </property>
+ </widget>
+ <spacer row="1" column="4">
+ <property name="name">
+ <cstring>Spacer91</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>50</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton" row="1" column="3">
+ <property name="name">
+ <cstring>ExecButton69</cstring>
+ </property>
+ <property name="text">
+ <string>DC&amp;OP</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>//message_info("parentPid = "+parentPid+"\npid = "+pid)
+dcop("kmdr-executor-"+parentPid, "KommanderIf", "setText(QString,QString)", "StatusBar8", "Hello")
+</string>
+ </stringlist>
+ </property>
+ <property name="blockGUI">
+ <enum>None</enum>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/current/editor-poc.kmdr b/kommander/examples/current/editor-poc.kmdr
new file mode 100755
index 00000000..d9b14fd1
--- /dev/null
+++ b/kommander/examples/current/editor-poc.kmdr
@@ -0,0 +1,1068 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KEdemo</class>
+<widget class="QMainWindow">
+ <property name="name">
+ <cstring>KEdemo</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>480</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Kommander Editor Demo - Kommander</string>
+ </property>
+ <property name="icon">
+ <pixmap>image0</pixmap>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ScriptObject" row="1" column="0">
+ <property name="name">
+ <cstring>ScriptFileOpen</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+_file["name"] = input_openfile("", "*.rtf", "Kommander Edit")
+file_read(_file["name"])
+_file["dirty"] = false</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject" row="2" column="0">
+ <property name="name">
+ <cstring>ScriptFileSave</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+if str_isEmpty(_file["name"]) then
+ _file["name"] = input_savefile("", "*.rtf", "Kommander Edit")
+endif
+file_write(_file["name"], TextEdit5.text)
+array_clear("_file")</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject" row="3" column="0">
+ <property name="name">
+ <cstring>ScriptFileDirty</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+_file["dirty"] = true</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject" row="4" column="0">
+ <property name="name">
+ <cstring>ScriptFind</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@Input.text("Kommander Edit", "Text to find", "")</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject" row="5" column="0">
+ <property name="name">
+ <cstring>ScriptFont</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+FontDialog1.execute
+TextEdit5.setFamily(FontDialog1.family)
+TextEdit5.setPointSize(FontDialog1.pointSize)
+TextEdit5.setBold(FontDialog1.bold)
+TextEdit5.setItalic(FontDialog1.italic)</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject" row="1" column="8">
+ <property name="name">
+ <cstring>ScriptInitialize</cstring>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+//initialize the window
+//comment out the next two line to see how the hidden checkboxes work around the limitatons of using a MainWindow to hold state information.
+CheckBoxB.setVisible(false)
+CheckBoxI.setVisible(false)
+//our quick help
+TextEdit3.setVisible(false)
+AboutDialog2.initialize("Kommander Editor Demo", "", "0.1", "Copyright 2008")
+AboutDialog2.setLicense("GPL_V2")
+AboutDialog2.addAuthor("Eric Laffoon", "Project Lead", "eric@kdewebdev.org", "http://kommander.kdewebdev.org")
+AboutDialog2.setDescription("This is a demo of what can be done with kommander 1.3\nYou are running "+_VERSION+" now. This is not intended to\nbe of use for any specific tasks. We hope you enjoy it.")
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject" row="4" column="8">
+ <property name="name">
+ <cstring>ScriptLink3</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+message_info("You clicked link #2 at "+Self.Item(0)+" "+Self.Item(1), "Kommander Edit Demo")
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject" row="3" column="8">
+ <property name="name">
+ <cstring>ScriptLink2</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+message_info("You clicked link #1 at "+Self.Item(0)+" "+Self.Item(1), "Kommander Edit Demo")
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject" row="5" column="8">
+ <property name="name">
+ <cstring>ScriptHelpAbout</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+AboutDialog2.execute
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject" row="2" column="8">
+ <property name="name">
+ <cstring>ScriptLink1</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+// first let's honor bold and italic toggles
+if CheckBoxB.checked then
+ TextEdit5.setBold(true)
+endif
+if CheckBoxI.checked then
+ TextEdit5.setItalic(true)
+endif
+debug(Self.Item(0)+" "+Self.Item(1))
+//find yourself
+inlink = false
+ch = 0 // character count
+lc = -1 // line count
+cc = 0 // col count
+a = TextEdit5.text
+debug("a="+a)
+maxc = str_length(a)
+while chrs &lt; maxc do
+ //debug("link test = "+str_mid(a, ch, 2)+" pos="+ch)
+ if str_mid(a, ch, 2) == "&lt;a" then
+ inlink = true
+ lb = str_toint(str_find(a, "\"", ch)+1)
+ le = str_toint(str_find(a, "\"", lb))
+ linkscript = str_mid(a, lb, le-lb)
+ //debug("link data - "+lb+" "+le+" "+linkscript)
+ elseif str_mid(a, ch, 3) == "&lt;p&gt;" then
+ lc = lc + 1
+ cc = 0
+ endif
+ ck1 = str_toint(str_find(a, "&gt;", ch))+1
+ ck2 = str_find(a, "&lt;", ck1)
+ if ck1 == -1 || ck2 == -1 then
+ break
+ endif
+ ckt = str_toint(ck2) - str_toint(ck1)
+ //debug("ck1="+ck1+" ck2="+ck2+" ckt="+ckt)
+ cp = cc
+ cc = cc + ckt
+ if inlink == true then
+ //debug("examining link at row"+lc+" between col "+cp+" and col "+cc)
+ if (Self.Item(0) == lc &amp;&amp;Self.Item(1) &gt;= cp &amp;&amp; Self.Item(1) &lt;= cc) then
+ debug("call "+linkscript)
+ if widgetExists(linkscript) then
+ linkscript.execute(Self.Item(0),Self.Item(1))
+ elseif str_left(linkscript, 4) == "http" then
+ exec("konqueror --profile webbrowsing "+linkscript)
+ endif
+ break
+ endif
+ inlink = false
+ endif
+ ch = ck2
+ //debug(ch)
+end
+debug("Clicked at: "+Self.Item(0)+" "+Self.Item(1))
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="TextEdit" row="0" column="0" rowspan="1" colspan="9">
+ <property name="name">
+ <cstring>TextEdit5</cstring>
+ </property>
+ <property name="textFormat">
+ <enum>RichText</enum>
+ </property>
+ <property name="text">
+ <string>&lt;html&gt;&lt;head&gt;&lt;meta name="qrichtext" content="1" /&gt;&lt;/head&gt;&lt;body style="font-size:10pt;font-family:Sans Serif"&gt;
+&lt;p&gt;Test this &lt;a href="ScriptLink2"&gt;link&lt;/a&gt; text.&lt;br /&gt;Add a new line with Ctrl-Enter or Enter. Note the links are correctly parsed.&lt;/p&gt;
+&lt;p&gt;New paragraph. Look! &lt;a href="ScriptLink3"&gt;another internal link&lt;/a&gt; to try out.&lt;/p&gt;
+&lt;p&gt;Although this widget does not give visual feedback on links it does allow them to execute scripts or call a web site as you can see below. &lt;/p&gt;
+&lt;p&gt;Functionality on this window may be incomplete. It is for demo purposes only. Look for new examples and tools on our &lt;a href="http://kommander.kdewebdev.org"&gt;website&lt;/a&gt;.&lt;/p&gt;
+&lt;/body&gt;&lt;/html&gt;
+</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox" row="5" column="1">
+ <property name="name">
+ <cstring>CheckBoxB</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>B</string>
+ </property>
+ </widget>
+ <widget class="CheckBox" row="5" column="2">
+ <property name="name">
+ <cstring>CheckBoxI</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>I</string>
+ </property>
+ </widget>
+ <widget class="TextEdit" row="2" column="4" rowspan="2" colspan="4">
+ <property name="name">
+ <cstring>TextEdit3</cstring>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ <property name="text">
+ <string>&lt;!DOCTYPE UI&gt;&lt;UI version="3.0" stdsetdef="1"&gt;
+&lt;class&gt;kihelp&lt;/class&gt;
+&lt;widget class="Dialog"&gt;
+ &lt;property name="name"&gt;
+ &lt;cstring&gt;kihelp&lt;/cstring&gt;
+ &lt;/property&gt;
+ &lt;property name="geometry"&gt;
+ &lt;rect&gt;
+ &lt;x&gt;0&lt;/x&gt;
+ &lt;y&gt;0&lt;/y&gt;
+ &lt;width&gt;641&lt;/width&gt;
+ &lt;height&gt;396&lt;/height&gt;
+ &lt;/rect&gt;
+ &lt;/property&gt;
+ &lt;property name="caption"&gt;
+ &lt;string&gt;Editor Quick Help&lt;/string&gt;
+ &lt;/property&gt;
+ &lt;property name="icon"&gt;
+ &lt;pixmap&gt;image0&lt;/pixmap&gt;
+ &lt;/property&gt;
+ &lt;property name="associations" stdset="0"&gt;
+ &lt;stringlist&gt;
+ &lt;string&gt;&lt;/string&gt;
+ &lt;string&gt;@Array.setValue(help, "Proof of concept", "&amp;lt;center&amp;gt;&amp;lt;h2&amp;gt;Kommander MainWindow frames!&amp;lt;/h2&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;p&amp;gt;As Kommander took on functionality an attempt was made to make a MainWindow Kommander widget. Sadly it was a huge time loss for two developers who both gave up after days of trying. The problem was with the editor. However you can use a Qt Designer generated UI file renamed to a *.kmdr file. Into this frame you can place your widgets and make a working application where nearly everything works.&amp;lt;/p&amp;gt;")
+@Array.setValue(help, "Known limitations", "&amp;lt;center&amp;gt;&amp;lt;h2&amp;gt;Known limitations&amp;lt;/h2&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;p&amp;gt;As of this writing what is known not to work on the Kommander side is the settings read and write. There is no Initialize or Destroy section as there is no Kommander Text, however there are signals for this on the window, so the functionality is intact. On the MainWindow side it is not possible to talk to any Actions as these are QActions from Designer and KActions are not derived from QActions in KDE 3x. This means a DCOP call to list actions or set states will not work. It is also not possible to talk to the Statusbar. Also submenus on the menubar and dropdown actions on the Toolbar will not work. Given that this is an unsupported use of Kommander it everything that does work makes it suitable for probably most small application uses.. &amp;lt;/p&amp;gt;")
+@Array.setValue(help, "Rolling your own", "&amp;lt;center&amp;gt;&amp;lt;h2&amp;gt;Rolling your own&amp;lt;/h2&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;p&amp;gt;It is our intention to have a template in the 1.3 release of a MainWindow, but if you have Qt Designer for Qt 3x you can easily start a window design, save it, rename to *.kmdr and open in Kommander. Remember not to add widgets in Designer as Kommander will not recognize them.&amp;lt;/p&amp;gt;")
+@Array.setValue(help, "Using Actions", "&amp;lt;center&amp;gt;&amp;lt;h2&amp;gt;Using Actions&amp;lt;/h2&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;p&amp;gt;If you want to get the goodies, menus, toolbars and accelerator keys, you need to use actions. Kommander has an Action editor on the window menu under Views. There you can add actions and there is a shortcut to connecting them with signals and slots. To get everything working select an Action and look in the properties menu for settings like name, text and icon. For menus and toolbars try right clicking on them for context menus. Now from the Action View drag an Action to the menu or toolbar. See the visual feedback? Just connect your Action to a script and you have three different ways to call it.&amp;lt;/p&amp;gt;
+")
+@Array.setValue(help, "Link examples", "&amp;lt;center&amp;gt;&amp;lt;h2&amp;gt;Link examples&amp;lt;/h2&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;p&amp;gt;This demo shows examples of linking. Links will show in the TextEdit widget, but they don't do anything. In the TextBrowser they open web pages and email links, but of course you can't edit in the TextBrowser. If you don't mind writing some script you can set up your own link handling, which I've done here. Note that it will follow links anywhere in the editor. If the link is a widget name it assumes it to be a script and calls it. If not it looks to see if it is a web link and calls that&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;It would be easy to extend this script to accept link parameters and process emails. You could also make a reference to other text objects, tab widget tabs, pretty much anything you can think of.&amp;lt;/p&amp;gt;")
+@Array.setValue(help, "How this help works", "&amp;lt;center&amp;gt;&amp;lt;h2&amp;gt;How this help works&amp;lt;/h2&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;p&amp;gt;Do you wonder where this help came from? It is possible to use KDE help if you write DocBook, make it and install it. This quick help is fast and can contain &amp;lt;i&amp;gt;rich text&amp;lt;/i&amp;gt;. To look at the dialog copy the text in the hidden TextEdit (set to text mode so as not to muck things up with rich text interperting XML) and paste it to a text editor like KWrite. Save it as a Kommander file and open it in the Kommander Editor.&amp;lt;/p&amp;gt;")
+
+@ListBox1.setCurrentItem(0)
+@ScriptObject1.execute
+
+@if(@String.length(@global(helppage) &amp;gt; 0))
+ @ListBox1.setSelection(@global(helppage))
+ @ScriptObject1.execute
+@endif
+&lt;/string&gt;
+ &lt;string&gt;&lt;/string&gt;
+ &lt;/stringlist&gt;
+ &lt;/property&gt;
+ &lt;grid&gt;
+ &lt;property name="name"&gt;
+ &lt;cstring&gt;unnamed&lt;/cstring&gt;
+ &lt;/property&gt;
+ &lt;property name="margin"&gt;
+ &lt;number&gt;11&lt;/number&gt;
+ &lt;/property&gt;
+ &lt;property name="spacing"&gt;
+ &lt;number&gt;6&lt;/number&gt;
+ &lt;/property&gt;
+ &lt;widget class="QSplitter" row="0" column="0" rowspan="2" colspan="2"&gt;
+ &lt;property name="name"&gt;
+ &lt;cstring&gt;Splitter5&lt;/cstring&gt;
+ &lt;/property&gt;
+ &lt;property name="orientation"&gt;
+ &lt;enum&gt;Horizontal&lt;/enum&gt;
+ &lt;/property&gt;
+ &lt;widget class="ListBox"&gt;
+ &lt;item&gt;
+ &lt;property name="text"&gt;
+ &lt;string&gt;Proof of concept&lt;/string&gt;
+ &lt;/property&gt;
+ &lt;/item&gt;
+ &lt;item&gt;
+ &lt;property name="text"&gt;
+ &lt;string&gt;Known limitations&lt;/string&gt;
+ &lt;/property&gt;
+ &lt;/item&gt;
+ &lt;item&gt;
+ &lt;property name="text"&gt;
+ &lt;string&gt;Rolling your own&lt;/string&gt;
+ &lt;/property&gt;
+ &lt;/item&gt;
+ &lt;item&gt;
+ &lt;property name="text"&gt;
+ &lt;string&gt;Using Actions&lt;/string&gt;
+ &lt;/property&gt;
+ &lt;/item&gt;
+ &lt;item&gt;
+ &lt;property name="text"&gt;
+ &lt;string&gt;Link examples&lt;/string&gt;
+ &lt;/property&gt;
+ &lt;/item&gt;
+ &lt;item&gt;
+ &lt;property name="text"&gt;
+ &lt;string&gt;How this help works&lt;/string&gt;
+ &lt;/property&gt;
+ &lt;/item&gt;
+ &lt;property name="name"&gt;
+ &lt;cstring&gt;ListBox1&lt;/cstring&gt;
+ &lt;/property&gt;
+ &lt;property name="sizePolicy"&gt;
+ &lt;sizepolicy&gt;
+ &lt;hsizetype&gt;1&lt;/hsizetype&gt;
+ &lt;vsizetype&gt;7&lt;/vsizetype&gt;
+ &lt;horstretch&gt;0&lt;/horstretch&gt;
+ &lt;verstretch&gt;0&lt;/verstretch&gt;
+ &lt;/sizepolicy&gt;
+ &lt;/property&gt;
+ &lt;property name="associations" stdset="0"&gt;
+ &lt;stringlist&gt;
+ &lt;string&gt;&lt;/string&gt;
+ &lt;/stringlist&gt;
+ &lt;/property&gt;
+ &lt;/widget&gt;
+ &lt;widget class="TextBrowser"&gt;
+ &lt;property name="name"&gt;
+ &lt;cstring&gt;TextBrowser1&lt;/cstring&gt;
+ &lt;/property&gt;
+ &lt;property name="sizePolicy"&gt;
+ &lt;sizepolicy&gt;
+ &lt;hsizetype&gt;7&lt;/hsizetype&gt;
+ &lt;vsizetype&gt;1&lt;/vsizetype&gt;
+ &lt;horstretch&gt;0&lt;/horstretch&gt;
+ &lt;verstretch&gt;0&lt;/verstretch&gt;
+ &lt;/sizepolicy&gt;
+ &lt;/property&gt;
+ &lt;/widget&gt;
+ &lt;/widget&gt;
+ &lt;widget class="ScriptObject" row="1" column="1"&gt;
+ &lt;property name="name"&gt;
+ &lt;cstring&gt;ScriptObject1&lt;/cstring&gt;
+ &lt;/property&gt;
+ &lt;property name="populationText"&gt;
+ &lt;string&gt;&lt;/string&gt;
+ &lt;/property&gt;
+ &lt;property name="associations" stdset="0"&gt;
+ &lt;stringlist&gt;
+ &lt;string&gt;@TextBrowser1.setText(@Array.value(help, @ListBox1.selection))&lt;/string&gt;
+ &lt;/stringlist&gt;
+ &lt;/property&gt;
+ &lt;/widget&gt;
+ &lt;/grid&gt;
+&lt;/widget&gt;
+&lt;images&gt;
+ &lt;image name="image0"&gt;
+ &lt;data format="XPM.GZ" length="6350"&gt;789ca598d94f1fc911c7dff7af40db6faba877a667baa747511e8c01e3030c06cc11e5a1aa7a86cbdc603051fef734f5ad9fed5d2952a4f521fba3beeaae1a7eff6de9606b63e9b7df7fb9bba7fb53599213ba5dfaad3c5c5c7cfbe7bffef1ef5f7e0d61a9fee9425e0abffeed975fb7ef976469f3ea727a013f56708dfe7a61597069b372068729f6cabbe0dcc8acbc622c4599c1a10dad72f1ca5d1370bfc77d5dcb01e70770176252de51eebb1c21df96720c6d87f51edcd3202fec5e29a7c01dee3b541e43dfa9b2ee4699dbd88e2a0f2997861a5d97040ed441dfa83c776d8ff5a3176e9b466cff6be5b6ded7aabe07ca5d37f6f4c2f400ee1bc84f1f95fb2859d7654f39a6766495c729a7b66d3a5dc77d431fa2ca2b9f9573ecb2ae975999dafa80ae5f1a0f0df6ef83fb79507bf927701e65d0f39372b507cef3837102fb2be3a1d1fd1efb4b65f87f193c3454f4fcaaf294a3e8ba6b5e3834ed88f3a528b72d352a0fef1b33e4f5df9443655d776aefd02d582e94fb568c3be3b9813ddf2a577b6695df6d1bf3a8f662514eed64fa7c521e6a38ea79867c39b48dfa9f8e95c705fb1f0c79d55f8142d7a8feee1a9cbaacfafb013c24d8c7df29f398912fee8db2c431e17d562ea137ff41be52eda9f2ca15784c05f10e7da7ba5fe5e3afc6b1d1789333f0200cff6e2acf21415f4fc643837cd5f8ace99971de6bfe756d65bc770aee52d0f8e77be550d7555efe0c4e09f1e95ae52e8c382fe7e0ae4680aeef832345e4eb2a788cd08f351fbb18b8d1fc70deb858bee1be983bc67b9aef55ba453c6d1b4b8b7a73094e7d823d37c15944f575b7ca43985ae4f7163813d6f98b71417c7bd82b6766c8ff9d8bbe479a9fdd1826e8ef173c9bfc199c02e4f167e09c08f1fb4e9916e749c0718c6a0f817e9ce70279b5fe75656c0bce6bfdeea6b1401e79569ec750903fa7c65dd1f749fdd7b75d84bd68cf3899bc1d38ce51f7b3c64f1f6a81837f37c0fdd4e9fb45e3b9efbb01f6a457c6638bf7efc07966c4eb9a721c09fef7e0347403de3b048f52501fd51ffdd091f94beb479fc75c50bfb5fef463c7886f5f8ca5457d5a07f78dc973021e479ca76cccd6dfde1897a2f92cd7df19f9f200e66e02639d3a8b57ff15cc11eb1c94b9ea83fc1fc1d4a27ffa4730e709f9a9fda697b117f873dd7886bd44fb5b5f16e759e3a79faa01105ff7604eb8af683cf573df427fd27c8c4ddfc05ea2fe8b6dead0cfbcde17bb61863fc4836998d05fb53ebdb4e309f5f69371467cb1d6c318fb8c7940b41fc594ad3e8bda230ebdc59fc3f9816982fce7606967f85bf329e6aa2fcedf1a0f93dadbad19cf13f255e3258e6326f81ffa513fb6e89fc7600a45f38b5be3cee23119cf13ea9dc67be47a5edff747e034637e21cdafda0c09eb0c798426d88b36c1dc9a7c9067ea6dde7207e03a5ea01fdc1bd714d3f31a4f351bfb80fe7e011ed3a8f672cf606a102facf1949a7ec67d740fe61efef26aff3a8d7419f553e33d853a70a1bf6b7ca5eaff84fa7c09e63a10eafe689c2dbe351f534fc4e87f9b6066cb8ff7c613e291d4be29d6fc80fe97c684fda4fd28a52a0fe6870b70951ff1a5f99e061a11ffe2c0dfe5db302e33fa81ceaf29c7087bf30c1e53863c03b8ca83fa087dc6d8e37dbf0c669970df0765926646bdd478484c05eb0c7b72f537e261c738435fdf8317e77d671c26d85ffb7d7a891f5d27e823d59ee8075a8f53a9fae2fd2be31efa5334a609fd17f217e9cc7eda4fd2944a07be06d7fbd0efcf8c05e7a9372e789fb51ea5991bab072acfd04446fcc83b6369e1ff67e3a9457e9d825313109f5bc66d40fdd1fe31b4291beb7b43a8e7f57eeac0d2c05e148c5bc48fcbc619f6259d67872ece013c82ebf8827ab307ce92d45fa4fd63e853ead01fb51e0fb1be8f7e7108ce39a1be607fa49170ff07f0c29feec27898314f6bbd1952b4fc746aef614813be47dc399832a17edc81a5b7fcb9361e511f59fd33e4dabe21df93710c88e7b7e0fa3ee4d37a338ca9833dbc185bbde1c9389abd9e8d5340fdb835ce01f322de1f47ca8807cdf781d380fa4f2b0b0e88cf2fe03aeec1deb65fac5f11e247aaffd01fb4df0ea59e473eed826b3d417d867da6349a7c37c6847ac94fc605eb04f9a76a3fdc8ff89917e769d7d8ced3155826f88f35bf7293d8d64f8ca780786fc143d3a17e1b2fdea31b63863f44e325b7f53eb59fc77dede2bc4ce04c09f6d57a9043ae21a8f2ec81ab3de0ff75b0c80c7be1fe2e31fce1ee8d05f9e4eec0436bf1cee05a2f50ff347e725fc73bc4db7be301f2b947b044f467a7f37dfd9a317b91379e218f837e491af45fa7f3681eaaff11af3a0fe43c04c4179f82c5fa0d69bdafd3fae23eed8f99eb38827eb40c9638213ebf804b67fb35de6b3a0c01f543f3af0e2f09f586b51ee56960e4a3877c53e94d9fcbef8cefd7c138ce9897609f3a3d05f8e7192cd6df58e51fdb41ccde6b6059f40fad7f6390d1ea19f6f7b9ef313fbc06978cf748eb6ffd5a0ce66f9d6fea746cf313a93feab8dbf69837b57fd66c8df6f31331ce3df245fd33723d8ff96ad378b07eba62cc33ea95c6d72839a19ed2b231c11f74042ec9eedb3266c8ef57bf33ecadf5b54ebb56df48e38b9a2c3de637adb7d48e8dfdfca50117abaf7edf58709f68fda0900bf4753be0ba8efea7f580fa3ce1e73f746e3cf78897042ec5f455fd292e5834fe285579b05ffb130d63077fc9a371847d49e7833abd14bcef3e1acf33fa81e63351b507f24feb35f1d4d8bafabf7eac36789f35bfa88cf58341d7b57ed15426bb7f024f2dce93f6a33add2e58e781fa315d2750dd1fc153b0f7745eaa5f3b61c63ca1f5f4659a34d678abd3d382757eaa5f1fc6dbf7ffffefbfb6df3b4ffa2f7bf1c54ff57fb33ffe5ffbfdb13ff1a7fecc9ffb2ffec25ffa2b7fed6ffcadbff3f7fec17ff58ffee90ffbbff967ffca2ffbd77ec5affa35ffc6affbb7fe9d7fef3ff80dbfe93ffaadc57ebfed3ff91dbfebf7fc67bfef0ffca13ff28d6f7df09def7df4c90f3efb11fb9d77ce916327aeb8c9cdeed89db85377e6cedd1777e12edd95bb76377e5cc8ef6edd9dbb770feeab7b744fee5bfdfbec5eb965f7daadb855b7e6deb875f7f6677ddd3bf7de7d701b6eb3defed16db96df7c9edb85db7e73ebb7d77e00eddd18ffdae71ad0bae73bd8b2eb9c1e55a1e3cd5982426a15207cb998e7feca7133aa5333aa72f7441977445d77443b77447f7f4405fe9919ee81b3dd3abeffb97e935add02aadd11b5aa7b7f48eded307daa04dfa485bb44d9f68877669effbfecfb44f07744847d4504b813aea2952a297196964cf8e8999e587beb5384d3cf3319ff0299ff1397fe10bbee42bbee61bbee53bbee7871ff2f3577ee427fec6cffc8a97f935aff02aaff11b5ee7b7fc8edff307dee0cd9ff67fe42ddee64fbcc3bbbcc79f799f0ff8908fea44d372e08e7bae9f873fdb9f07ae9fbfe2c509098b4891496639961339953339972f72f1f37eb9942bb9961bb9953bb99707f92a8ff224dfe4595ed513cbf2fa8ff12c2bb22a6bf246d6e52d277927efe5836cc8a67c942dd9964fb2f3a7fdbbb2279f655f0ee4508ea491568274527bb8241924cbf8e77cf1a31f8b2faed40c2b5c84e652eaffa632ffa5fcfdcfdf7ff92f64b3cec5&lt;/data&gt;
+ &lt;/image&gt;
+&lt;/images&gt;
+&lt;connections&gt;
+ &lt;connection&gt;
+ &lt;sender&gt;ListBox1&lt;/sender&gt;
+ &lt;signal&gt;selectionChanged()&lt;/signal&gt;
+ &lt;receiver&gt;ScriptObject1&lt;/receiver&gt;
+ &lt;slot&gt;execute()&lt;/slot&gt;
+ &lt;/connection&gt;
+&lt;/connections&gt;
+&lt;layoutdefaults spacing="6" margin="11"/&gt;
+&lt;/UI&gt;
+</string>
+ </property>
+ </widget>
+ <widget class="ScriptObject" row="4" column="6">
+ <property name="name">
+ <cstring>ScriptHelp</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+file_write(".tmphelp.kmdr", TextEdit3.text)
+//this would be a potential exploit if we weren't doing it
+//to get rid of a nag for a file we know is good because we just wrote it
+exec("chmod u+x .tmphelp.kmdr")
+dialog(".tmphelp.kmdr")</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject" row="4" column="5">
+ <property name="name">
+ <cstring>ScriptSetColor</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+color = input_color("")
+//how to handle it? str_replace section?
+TextEdit5.setColor(color)</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="Timer" row="4" column="4">
+ <property name="name">
+ <cstring>Timer1</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+</string>
+ </stringlist>
+ </property>
+ <property name="interval">
+ <number>1000</number>
+ </property>
+ <property name="singleShot">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="FontDialog" row="4" column="3">
+ <property name="name">
+ <cstring>FontDialog1</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="AboutDialog" row="4" column="7">
+ <property name="name">
+ <cstring>AboutDialog2</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<menubar>
+ <property name="name">
+ <cstring>MenuBar</cstring>
+ </property>
+ <item text="&amp;File" name="fileMenu">
+ <action name="fileNewAction"/>
+ <action name="fileOpenAction"/>
+ <action name="fileSaveAction"/>
+ <action name="fileSaveAsAction"/>
+ <separator/>
+ <action name="filePrintAction"/>
+ <separator/>
+ <action name="fileExitAction"/>
+ </item>
+ <item text="&amp;Edit" name="editMenu">
+ <action name="editUndoAction"/>
+ <action name="editRedoAction"/>
+ <separator/>
+ <action name="editCutAction"/>
+ <action name="editCopyAction"/>
+ <action name="editPasteAction"/>
+ <separator/>
+ <action name="editFindAction"/>
+ </item>
+ <item text="F&amp;ormat" name="PopupMenu_2">
+ <action name="formatBold"/>
+ <action name="formatItalic"/>
+ <separator/>
+ <action name="setFont"/>
+ <action name="setColor"/>
+ <separator/>
+ </item>
+ <item text="&amp;Help" name="helpMenu">
+ <action name="helpContentsAction"/>
+ <separator/>
+ <action name="helpAboutAction"/>
+ </item>
+</menubar>
+<toolbars>
+ <toolbar dock="2">
+ <property name="name">
+ <cstring>toolBar</cstring>
+ </property>
+ <property name="label">
+ <string>Tools</string>
+ </property>
+ <action name="fileNewAction"/>
+ <action name="fileOpenAction"/>
+ <action name="fileSaveAction"/>
+ <separator/>
+ <action name="editUndoAction"/>
+ <action name="editRedoAction"/>
+ <separator/>
+ <action name="editCutAction"/>
+ <action name="editCopyAction"/>
+ <action name="editPasteAction"/>
+ <action name="editFindAction"/>
+ <action name="helpAboutAction"/>
+ </toolbar>
+ <toolbar dock="2">
+ <property name="name">
+ <cstring>Toolbar_2</cstring>
+ </property>
+ <property name="label">
+ <string>Toolbar_2</string>
+ </property>
+ <action name="formatBold"/>
+ <action name="formatItalic"/>
+ <action name="setFont"/>
+ <action name="setColor"/>
+ </toolbar>
+</toolbars>
+<actions>
+ <action>
+ <property name="name">
+ <cstring>fileNewAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image2</iconset>
+ </property>
+ <property name="text">
+ <string>New</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;New</string>
+ </property>
+ <property name="accel">
+ <number>272629838</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>fileOpenAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image3</iconset>
+ </property>
+ <property name="text">
+ <string>Open</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Open...</string>
+ </property>
+ <property name="accel">
+ <number>272629839</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>fileSaveAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image4</iconset>
+ </property>
+ <property name="text">
+ <string>Save</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Save</string>
+ </property>
+ <property name="accel">
+ <number>272629843</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>fileSaveAsAction</cstring>
+ </property>
+ <property name="text">
+ <string>Save As</string>
+ </property>
+ <property name="menuText">
+ <string>Save &amp;As...</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>filePrintAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image5</iconset>
+ </property>
+ <property name="text">
+ <string>Print</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Print...</string>
+ </property>
+ <property name="accel">
+ <number>272629840</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>fileExitAction</cstring>
+ </property>
+ <property name="text">
+ <string>Exit</string>
+ </property>
+ <property name="menuText">
+ <string>E&amp;xit</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editUndoAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image6</iconset>
+ </property>
+ <property name="text">
+ <string>Undo</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Undo</string>
+ </property>
+ <property name="accel">
+ <number>272629850</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editRedoAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image7</iconset>
+ </property>
+ <property name="text">
+ <string>Redo</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Redo</string>
+ </property>
+ <property name="accel">
+ <number>272629849</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editCutAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image8</iconset>
+ </property>
+ <property name="text">
+ <string>Cut</string>
+ </property>
+ <property name="menuText">
+ <string>Cu&amp;t</string>
+ </property>
+ <property name="accel">
+ <number>272629848</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editCopyAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image9</iconset>
+ </property>
+ <property name="text">
+ <string>Copy</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Copy</string>
+ </property>
+ <property name="accel">
+ <number>272629827</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editPasteAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image10</iconset>
+ </property>
+ <property name="text">
+ <string>Paste</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Paste</string>
+ </property>
+ <property name="accel">
+ <number>272629846</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editFindAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image11</iconset>
+ </property>
+ <property name="text">
+ <string>Find</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Find...</string>
+ </property>
+ <property name="accel">
+ <number>272629830</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>helpContentsAction</cstring>
+ </property>
+ <property name="text">
+ <string>Contents</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Contents...</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>helpIndexAction</cstring>
+ </property>
+ <property name="text">
+ <string>Index</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Index...</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>helpAboutAction</cstring>
+ </property>
+ <property name="text">
+ <string>About</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;About</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>menuTest_MenuAction</cstring>
+ </property>
+ <property name="text">
+ <string>Test Menu</string>
+ </property>
+ <property name="menuText">
+ <string>Test Menu</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>formatBold</cstring>
+ </property>
+ <property name="toggleAction">
+ <bool>true</bool>
+ </property>
+ <property name="iconSet">
+ <iconset>image12</iconset>
+ </property>
+ <property name="text">
+ <string>bold</string>
+ </property>
+ <property name="menuText">
+ <string>Bold</string>
+ </property>
+ <property name="accel">
+ <number>272629826</number>
+ </property>
+ </action>
+ <actiongroup>
+ <property name="name">
+ <cstring>format</cstring>
+ </property>
+ <property name="text">
+ <string>ActionGroup</string>
+ </property>
+ <property name="menuText">
+ <string>Format</string>
+ </property>
+ <property name="usesDropDown">
+ <bool>false</bool>
+ </property>
+ </actiongroup>
+ <action>
+ <property name="name">
+ <cstring>formatItalic</cstring>
+ </property>
+ <property name="toggleAction">
+ <bool>true</bool>
+ </property>
+ <property name="iconSet">
+ <iconset>image13</iconset>
+ </property>
+ <property name="text">
+ <string>Italic</string>
+ </property>
+ <property name="accel">
+ <number>272629833</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>setFont</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image14</iconset>
+ </property>
+ <property name="text">
+ <string>Font</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>setColor</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image15</iconset>
+ </property>
+ <property name="text">
+ <string>Set Color</string>
+ </property>
+ </action>
+</actions>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="4190">789c8d96594f9d490e86eff32b507c178ddcdfbe683417ac4920104802015a73e15abe0061095b08b4e6bf8fcf6b7314e844ea5320788e5dae2a6f557fbc5ad8dfde5c78f5c78beb1bb9398e0bf148ae165ea5dbb3b3fb3ffffb9fbf5ebcacaa05fd29c77aa17af9af172f776e16e2c2d6c5799e8190021545d5480dae9d3be3c0ce83b4908fce22dd8c69db39480f5e71ce32820f8deb5a22f8d2b913ac4fd9398412f61be71c6c3f7bc64d17608f77c165d31bcb0f70550799c01bc6cd1802f4df3a8bb1d8fca64ea100df83bbb68a589fcdde3067db8f342960ff7c61dc76d1f6f7191c1ee5f2151c5b89f0177f01a73646f847da1997455bb8be187765c4fea800575d1b137819dcb695eb0fe04ee7dbf9de80c7ae30fbb46adc9709ebd31538f66d1aa07f3ee3aae84234ff4fc67d4ac63be0b2af6d3e63bf553514d9fcd581eb768a0d38801b5dcffcb50e1e87946d3df8b70a6399058cf35671acb2c5c3f47337448b2fe25d973adff2ad02575d1f916f7c66dc57e61f4ee04eed613d41bed6a1af23f2814c1e7b49487e423cea3416d9e2770a9e86dafc23fd8c9b34f4c9f2eb137826c779f9db8c5b4da709f3690ddc8d29637ff20096b1357fd17b705636ffc05e3b8d92b11f46be7612cac9fc8b7cd5640feeef7733ee6ba96d3e95e04692fbf3081cc260f3f90e1ce5d1ff9d7168b3e513f6df6795dbf9606fd084b6f8cb897128b3e5db3e583768fb61f48b6118fb68f28fc6d225ab0ff873907130397f770e160f79e46cfea403635dcffc7fe7fce8dfd7e038468fe7e83c793ce09f21cde5d1d9e5746d1c3af707ea73c8aa0f7f08ea67982426cce7c5198fc598cc1ed7c63adffc85fa19ab315bfdf095f3942cde4bc67a1ec457b0ffb196d2e4f2c1b9b67aa123e73e597f407e8f8d0c968f64fa4da8cd1e211e63abf32d7f2e9d079bcfa897b17f94cba273ebfab69ffed19edc82b5bb9bbf04f53f8ed2faf951dfa3e8feac1e37c149d7b37c78308eb5e517a31f8e53183cbfa12fa5fad7ce07ff48a56cf141fca496ecf5b7056e94cd3fb02fad4c5e8fb86fa40b85efe7d8b93439afcc19f521e8a7d287cee71f387b3e93cd1f4265fa5439eb05017df40b4ddfcaeddf38d7a6cfa81f4dd7d6f551efa2f596ac5fad397b7dc8a1736f72417f971c3cfeb4e73c583d32e21d8a20969f84fb280c61329635e3e8fd994f9c3dff08f74518556ef7eba573e9e747bf0ba26cf2e45cb91cf91e427ccc3fe44348b1f1fe89fb2616b1f37847e7d1fb21fc15eb28ce17ce215bfcd13f6213a3cb510fb19b33fa55d4ee614c5b73b678da7a2195769f30f237a6d458ff22ac9f8ad479ff43bea72af5d9fc8bf593367c67d45b6ad3684cc8e7d42771463f4d83b607f3f796739eac9ed00f92a4982d5ea8e714d2e472e4679a72654cf047d6e838e37ec865ae27f30feecb5ce7d619f7656e7263fd51b2b3cbf9da7998cc7fb8df73ab72eba7bb73b67abf76ee267b2fe0bece9db2adb7e1ecf608f7531e94ed7d70eb1c26ebafd9394ef6fe43fde7318f6eff74ce660ffd294b1667bcbf72507b560f787f68b38dceb87f72cac9d623f4f3ac1f67dc1f79ca93adcfbdf1544f167fbc0fa64287d53bfaffa4d13066f40bd5ae27bbbf50af53a3c3f209f7d7d4eab07e87fb68ea74186fcfd9f205f538f53a2cbf26e771b2fe8a7e340d3a8c514f2a7539d5cee272d4b3d223a3df4c518731fa893687e48c7e3bc12160f4bb099f19efdcfcf3f13b7d26a6dfe9b3fc423b70fcd50cd3e7f4d49e52e6e9f11bfef237fda399fe5c4e6afb58c7097fe5533ee373be78a6ff8d2f55eb6abe97638c6bbee15bfece77fce3e979f99e1f7851ed91ef65a6bdc4cbbcc2abbcc6aff90dbf7da2bfce1bfc8e37794bb54fdcfa7bdee61dfec01ff5bb4fbcfbd49fbcc79f61797f6efd800fb9e0527f2baeb979a6df72871df56e7fe0511da0ab9150a04889f2cffa34d1173ad219c734d35da6132ee82b9dd2199dd3854efc46974fe34b5774cd8b74c35b74cbabf49deee807dd13d1032dd2312dd132ad3cd15fa5357aad67d615e884dea8e65b5aa70d7a479ba47ea0f7b4fd347f68873eccce4c1fe9935a5fa45dd5dca3cfbaca3aedd3011d3ed32fa8d41d555453432dac77d4ebdf5dfd6fd0070a0bfdac2f228196f854f4253c6b2e44f24557b9a74d3992635e9493a7fa3ae3ab9cca999ccb857c53ad4bb9926bb991db596ec977b9931fcff35feee54116654996654556654d5e43f78dbc9575a1e7f6316343dec9a66cc97bd9961df9201fe593ecce747f5d5fb2279f655f0ee4500a7d4355fa4efaa9327e558ffa726aa5935e664f6efe67f5fbbbf1f27fff7ef17f0cf105fc</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="4846">789c8596c972e4380e86eff5148ec2ad62022d517b4cccc1e97d5fcb5bc71c0089f2bea79db63be6dd47899fa9ec74bbbb2aebf2992089e507a8df7ecc9dec6ecdfdf8eddbf3508697f55c7d214f733f9a97dbdbf7dffffb9f3fbe7d776e6efc3f49e7dcf77f7dfbbe379cabe7b6efeffc1878b303d234eafe191f194bcf03e37ac2ba0ace92c04fc64d9606fbf1e15467fdfe1be366c2723be6c6e5137b6f9cf7e71b17d3fbb6edfc2a9bec2f67d7291e73d9fb4f91b1efd9f65745cfefc66dcfd76396b2f7b7b0fba2dedf9fe67f99d5c19fc74ffe7dcc321fdb79d3f53bdb9f6465e0ad4ff1bcd97a9bbbb09fc6eca7f78f66cf17cb6731cda758bc497fffc9a7fbe7ed3ecd26e76fd87dd3f3f5533cd043d9fb57a19e99045e37aeb336e46fc7eed73e9f968faaf787ccdf6a9a1fab9ff4fad095593d49f2c99fc6eecb27f7939badb7587e2b1757c17e63d67fbdb4fd2e2bc2fdade96d5aef53f3a7cf27a33e533daecf9ec70bc6bd7ef41d9c6561fdc5eeebf5c6d07b9f6f363de974ddeae79328f827a6bfeeba32b266151758a2cce23f336e3aae8dcddf2a9db05e18e75d3e2a5b377d5553fbab90ffc09c9b3f49948778d6e05f1aeacba69f5a27eb62f136495e47ad9d97ccea4ff6437dca28351e04aee0bf402fb58b62dbaf0fe65f164bd4d83afa3573ad033ff6f1a8718cfe75a11fc5ea21b1f3716efe987e2529cbaab0759b4f923a89616ff5973c2e225ba74bf44be92bcb87dc430f491e83e7c1599bc19fdad8279dc7c6e7962fe772e45bac3e9ae5dd48b3f347c8671917c8ff2ef49414b1cd5fc2bca9e22c4a6c3fd6abb470a837fab7495c88af44ff3a077d30fad3b9aea2b67e1bd887fabc82bb1ff2fd0c7de619eaa3cb986f79d01fa5c6ddfd888f8e50ff38f4271d639ebb18fe92c5dfc4ddcfec39edd9ea456c9c6649827c9b3e9b4c1b457d0e31ffb3c659fef41e9ca709f472042e4ae497cdffa68a27fdbc0e4e6ae447d16f55593863ce8ca54853e4dff4dd34711af449e032cbd16fd7e0aa2c63db7f1658a10fde07378dc7fe03639f47a897a4811367f16b1bb84c505fdcef0b9fc1fe155c4a8efc3970e3bdadb3f543d3e63ec3fe0d70d741c69c80ebaa36ff75c9e6495c4dde67eb7fefaa34c6794d9837a19ff91aec823d2f82fb78adbe7e3c9e2d1e7e057705b2fcca9e715e38d45707602962f87b0aae4bb17c710cee7e38dfde1f5f4cea49ebe034d4936a70375ec1c1be4c73d46705dcfd701eeccbb809f1dc81bbf3507fccdbb2a833d4ef03ac5181f3f1fe564592c25fd3a797224aa03fc4ab75a1e81fd3b76fa476f06719ec9bd69810bfcfe3c8fa5d915f2f93f9857ab545e4507febff36aa530147e0ee877eb3f7bd8df32ab6fbc9de9bd6e5ea2cff7c00d656301fecfc36e97e88cfeadfa645817ea38dc09543fe76c0ddfda5addbf75c9be51ae69507977182f5367019f2b50aae0bb17949369fdabc931bfcb90057556efbc5de9fb62872c42fcb8135b1fce979e006fa92077099a4a8ef08ac6d65f7f11bb8aec4fc952db0ef9e78f307fe95ddf70bee873f652e31eaf51cb8467e2570e71ffad5072ec3fbb4082e1df2c11f60290ae8a30637aec43c45bc55773eeafb0eeef285fd36ff5a515f81d77a46bdecfba11d7fa0201f1cb846bff125b816e84717022bde577e085c233ffc046e62cc637e0c9c28fcc57a5d3629fcb9027782477e36c1de2bde1bebc7b69b7fe1fb05feb4b942ff7418b889b10e7db54516f4950516cc6f3a08ec916f823eda32823e24d8777ab4f368d033fa65217086fa4813384f10df7ecf980f778125851ef602d729f28df8da2a4a518fc59ea1df97c04906bddd07ae33c4b714b801cb6acfc81fead38a14d0db55cfc807ead36af7c960f50deb8d24961f1d05aef1bda221bf3ef8a3c13f5fe2bdd1d709e37cbd0eac05fc3b0edcbd80b64e817d85f7e606dc46d0934ae058f03e9c044e15efbb062e6a7c5f4513f616cfdef0573f261656aeb9f9b53d7b6ef99c2ff892aff8fa57f67cc3b77cc7f7fcc08ffcc4cfff6ccf437ee1571ef11bbf773b3e78fe9fec79c00bbcc84bbccc2bbcca6bbcce1b7f6fcf9bbcc5dbbcc3bbbcc7fb7cc087fc938f3edbf3319f84df299f71c4313b4e38e58c732ef686b3f65c72454c44424a3535e4a9a573baa04bbaa2ebb1c59fede9866ee98eeee9811ee9899e69482fdd8e571ad11bbdc3666a4f1f344f035aa0455aa2655aa1555aa375daa04ddaa2edc999137bdaa15ddaa37ddb714087f4938ee8984ee894ce289a7a0c7b8ac9855f4229659453412555c242227fcec76cbca2524b235e5a39970bb9942bb9969bbfb3975bb9937b79904779926719ca0b3dc8ab8cbeb6973779970f9997812cc8a22cc9b2acc8aaac7d6d2febb2219bb225dbb223bbb227fb7230ce951c7e652f3fe5488ee5444ee54c2289c54922a964dd0762f7467c615f292ba9c8896a37e61bf532d256cff562d67a62af977aa5d7e31d7aa3b77ad79d30d27b7dd0c7cf2ab47e7dd2671dea8bbeea48dfd42a2f2319e8c75f556bf6f33ad0055dd4255dd6155d1dff5d3fbeb20ef66bbaae1bbaa95bbafd95cd8cfdfffefdedffce33908e</data>
+ </image>
+ <image name="image2">
+ <data format="XPM.GZ" length="3278">789cbdd6494f5c391007f03b9fa295ba45a3cadbfd9e4673604980b043584773f01a206c810602d17cf771d7bf9a0cd124e13432979f5cf6b3cb65376f5e8f0e36d746afdfccdc8cedf8c48ffcb1bd1ebd0eb7e7e70f7ffef5c7d799575535ca7f65dd8daa57bfcdbcda1a8ffc68fdf2224e6073fc88fa34b4439a9817d5de19f1dac443310498b6c45ded8b42c607b119ca3e48fcdcc4b69834f10771d9bb7e103f885b5779317d14f7a66aacf49378b0c175d2bf29765d6ab01e2b8e6ef088df9dd85526b55efc45ec7d994af1c9c4bef1436864be0db1317dedc4857830aec6fade89f30409f9b85187d48bdf8a7d36fa17c4d1c724f9e455710a85f65f4c1c8a5027d90faf884b5b0eadf81e0e0dfae95a5c995863bf3b701e2ff9a5b1b8ee8a02fb3d86f3787cffbdb8b5ce62bdcb7068b11e92fd04d317b514036fc0ae73d8ff91b8b75d8ff555ea7c24e24d380cbabf73b10b4ebf2fe7194288fa3d39cf1073fea51ea89f38164351cbfa6819f6958365fdb11c4c27e747b5b8f246d7f7198e35be47f2fd580f7d8bf84fb08b16ebbb83a3d1fc1f881bdbb638ff33b533c8c7351c355fdc88dbc1d4c837e2dbd8697f129b3c3fdcaa6d927c5127ee43e3918f523c58d322fe168e9a3f5a12bb5846d4c3a95aeb918ed511f35b7cdf871ef781e4bec5e02b8bfd5cc1715aaf7beaa4f526f725465736c807c351cf8fd7c529f880f3477e53eec67ab0fe942a5d8f9c772a5cddca7de30e4ed3fb10c5f976aa8dbad2f9e4fea5caf6b8efd6c2ceb658af51bb16f5b0a54e384f9e8573433e4f9e8cef0dea5a2df9ce52d3a2bac57ed8a93bb5bc17a9f1752bf7d1623f4d6c02ee5b0fe786f9f6c56d8e477d37ea56c7339c338afa1ac3695a7fdbe2cedb4ece932a7568b13fab4ea827ba8793d6271d8a8deff53e79b5d7f7b254a70ef96de150c016fb37b9e17dbf7c32e697fb94fa3c1eef6b7a32f67b07e78678f9bd48f935eef07bb2a71e3a9ce7299cf47d21793f930d16f333c6e7dba5fd3b6aa7f99a17bba949de8be483efd05fc3b132f8fd59513b83fadf550735eac54f66146faba7f711e71fa231924f3a52bb1ee7b5ae0e301faa738aa51ff90da9d4fe47b5de5792df9b94af638f7c2ec0a950afa91bf5fc93f11eacaa3bed9f551bfc1ed3a3bad7fe07f500f3be7afa9ee3fc537203eae9eac9d8ef9c3a0e18efd5fa5e6c8d278de907cda21fed59bc63af2d70e4c41ff9984f9e8ff841bce753fec4677c9ee32ffe3de287f19e2ff98a3fe7f86bbef936e227f19ec77c9be3eff89ebfe4de875fc63ff26c8e9f36e2b95fc47b9ecf2df202bfe577bcf88278cf4bbcccef79855779ed05f1ebbcc19bbcc5dbbcc31f78f7bbf83dde7f161df9800ff9880b2eb9e29a9befe2db9cf38e4d5e43cf03319f119125479e02454af4f1793c1d734f2779d62ec75ed1297da2333aa70bbaa42bfa4cd77443cfe36fe98e2fe93ecfbe94bfd2d1177aa0479aa5b9dce66981ded2bb67f18b39e3f3b9764e65d498966899ded30aadd21aadd3066dd2d67fe6e791b669874fe98e3ed02eedd13e1dd0211d51f1d37ceee75125555453432d7564a8ff55fe69b0cc8f96accdffbb791b5e70beb9d9fc8f461ee55f540fdf46fdeff179473f6d12fff7ef33ff008c9a2542</data>
+ </image>
+ <image name="image3">
+ <data format="XPM.GZ" length="5646">789cad974b6f16cb1186f7fc0a8bdea1a8cf5c7b6614658101db180c36d8d838caa2aa67da177cbfdb47f9ef69bf6fcd07ac721445b079dc35d5d575fffe78b5b4b7b9b1f4ea8f17d73772731497e2a15c2dbd1a6f4f4f1ffff9af7ffcf9e265552d3dffef9ba5eae5df5ebcdcba598a4b9fcecfa66790b7195c51946decc1c7c65d1cc0ef8c87189e393e19abb6cfac8d7124cbdeccb1c0f9a6f1a4f85e1f8d9376e071c111df1fcd4c7b74225785d2be37c65514f077e3dace578c1be5f98f058fb0ffc0b8e5fdb23b734ce013e3a0faccae9a99ef71b571477bdd07e39efaddfacc91e797c6839dcfef890aff3b7b7f352aeef73bc693dd178d532ce18f965c0f11f6c74363b5f82d83cb7c3fec976fe4ba1ee17fd95930fd4ffd75ad23ec512537e5d48005dc343559b6c1a11e47fa93f1ecea92f175a57135c27e7f07eeb3fbf91eda3fb6d558431fec2ff37b8c5f83cba61ae1bff800cee1b57cd902d76d3d2299e33db8a947c63be2beb26f2afa5b604f39b432c2fe780b9626d0dff2446eab89fabf18f7d42f5fc1b1d589f1827fcab199f3e13d39ab03c71bf0d468c4f74afd533bd2ffcaf7a43ab29efc0539948c8743fd5545dbd15ff11a5c3529a2bedc1b72b68ff990c8a1b0783ae392f62af2b56a1a61fec823395466ef15b86d6babf77d72a8a82fa21eab2eeb67fc578ddb11f211f95df56d67f986faaa86d04cd4776a1c46c607efadb23f596f0efda31a83d8f93938e5fb60affbf8cc7511e208fdf10c5ce50464be7c217745023bbca7aec3c4fc9144eebac47e857ca99bec4fea3b25e7f7e03c9e18778c5744ffa84318c88efa4257587e225e751794fef2c8ef7ae86abbffc13824f8cf15c663623e20df6be9f21ff03deab58e5dcbfa52e4733db603fde157c85db07a453e37e522fe1e5c7589fa3dfcdbd46dcf7ea337e42013eb13f5dcb4adb01ef49adc95ac07b74a1e9ac47a590387be613f70fbe421f0dc517fd795563f13b98f89fd70853ccb0beab9e9fb86f60ae2df489726c61ffdbd89c360fad78c235911ef26753ded15c4b72d7a49e8876e035cf689f9a8e8376dd7f713f367200f55e2bc403f6e8759bfc7fc6b3558bff0f0771b876662be63beb569e813583f3f7328ba96f3c9a17f86dc90980f1efe09d5d0f37b8ff7863a8cec170ef9169aa19ef0bda2be422ef789fdec8e3c4cbccfa1de43e807e683f3c6c27c729fc0d9dff48fbf368ed4e7e18f205d13e10fff76c1cccf40cef6303e3d384a48fc1ef323e47cb4feb44c1e0afad75f1927b3dfe473bad13ee47f48c39c4f17c63131dff9fe2425bf77e8a75d2e20b3e73339ebe3fb617fd7483151fff9cca60ff1e8727be5bc748fe441cc3ff067d7f525fba1df30ee6d7e3d908769c2f71ef9928f2beb9f81aca5e553071e32d35f981f9df4b5e5c73d39bf8ff13e206779e6c33be3d6f211fdb81bfb39bfeec8529b7f6fc95a5b7dc09fdd240dfb9fbb350e167fde9f7adb171cfa6b5f667fb2df2b592d5e1ef3a47f5e77589f7be4f9dca19ff68d4cac67877ed6b75a597d9f19ab9da3dff6410b3b47bef659bddd87fed10fc33c0f76c91a98ff82f8f4a293f517ec377dde06acbf22feb9387389421fe231e475c3e6f119597bf60b41ff1e9ab1b2fb317f86104beba794cff1e7bcf27b64992c7fb7c9d91dd487fd60e8b33dec37c8bfdc5eacbf08f5c7c57dc8af2149c379e7900f92b75fe69bc33e2265ecf81eb921cfdf2bfc2f793bb67ab8268f35d9a39f4a2d62f30bf34c72c3b5f98d79216134ff3bcc579138f2be8878884ab4f98dfacb545a7d21ff651a2d9e11f5a18596b6af2c93636ffec4feac794132fb117fadb4e27e2157e4d1ea574f8cc5ecc3fcd0bc0db0de14fbba366afef3bbe4c9e697225fb4d7dede1f8dc5f663479eedf1ebc6769f629fd4a891fdd663feeb180b8bcf26796c6d1e20be3ae5f511fd430af2accfbf379e4c3ffa7f6e6676bfd4c6261f518fb188a5ed07d017cb58725e7ae447ac626ffde00339aba77e728881f9ead7c8a9b4fb902fb15bd883f91efbac8ff1427cf2f8b5f91191cf51f2cf19e4b7c25fd93d6afbf43179d627984f3979e67c5f35b6f73acca3388e15fbb7225ff3f230cf6ff86bccf1e6fc8cceb831ffa3be3315960fa8cf316f77d6ef0663eb0f1ef93fe606ca7ea747e4d93e857fc6611c688f5c92d3bcef503e4f5bd68722dfc638dafc8ade78e4f7fec0d8f633c5fbc79419fddef7e4c9fa8d83bd99e6f8a19f4ef554d35e5f2d98efefc9c9fabfc77c9b9a29d01f1ef53cb593f5435927a7799fe27d61b27d5557164c7f2d2f98f307f53e75b33f14fd77cadd8af678d4eb24397f590f986753de66cc1efc9e999ef39ff141ff9a524e17f2eb05737fe5fb52b2f84a653ce72bfa6f3e2d6c3e5c18cfe7d80f72742bd3bfb560fa0bfb45fae93fd463ceceb91fec1bcfef45bd6532f6a8ff945f6fe7c8c73424db5f15ef4d92e6fa473f4971f6bf473f4d480830ea3ba539fe5b377ffddfff53de3b2f5e7dfc6bf27ef4934ffec01ffe77797f94f51efb1ffec49ffa337ffebbbcbff097feca5ffb1b7febefb2f4bd7ff08ffec9bfcef2cbfe8d7febdffd26bfe257fd9a7fefd7fd07ffd16ff84ffeb3dff45b26ffc57ff5db7ee717f96f26bfebf7fc77bfef0b5ffe225fe51b6adffc22df423ef8cef759b6f84d7e70de39274e5d74a3e3fc4dcff2eec01d9af442de1db963f7c39db85377e6cedd85bb84fc15e4afdd8dbb7577eede3db847f7e45ebb65f7c6bd75efdc8a5b756beebd5b771f20ff11f21bee93fbec36dd96fbe2beba6db7e3beb95db7e7be67e97d57b8d2558ebf8f1bc8b72eb8cef56e102f79ba3fcff3fc033c17a91cc8a11cc9b1fc9013d4cfa95f953339970bb9942bb9961bb9953bb99707799427792dcbf246deca3b59a17f6435cbafc97b59970ff25136e4937c964dd9922ff255b66547bec96e96df93ef26bf2f859452e58da49156f20f0fe96550af4e455523e575d489f29af4400ff5488ff5879ee8a99ee9b95ee8a55ee9b5dee8addee9bd3ee8e31c2f7dd2d7ba4ccfeb1b7dabef744557754ddfebba7ed08fbaa19ff4b36e2ee4b7f4cbcf48e957ddd61dfda6bbbaa7df75ff798fc9bb49adcd423eff345cc817dae54d62883e6222c698c7c0944bfbe067fec4c378148fe38f78124fe3593c8f17f1325ec5eb78136fe35dbc8f0ff1313efd8ff5fbefbfbff80f5aae600a</data>
+ </image>
+ <image name="image4">
+ <data format="XPM.GZ" length="5534">789ca597498f1cb91185effa158de14d3038b92713860fbdab57f5a2a525c387086666effba2560ffcdf1df51e2ba1f25c067695d0c20706c9e08b85acdfdf2f9d1cec2dbdfffddde3933c9dc7a578260f4beffbe7ebeb9ffffcd73ffe78f75b512ccdfeb5ed52f1dbdfdefd76f8b41497f66f6f8619c447039755595df6e0077093b58905dc1ac35e3f83bb4caa0cbc06d62c5625f80adc67435563fefd8cf32ccfc85227ceab00fe082ef2b212d83b709977159c9557709d3715fc910b70c8bb9afb7f024b5172dc71fd98f775053e008f455637b05f4ddcd558dfbdcdb8288ab2ee307e09ae8aa1867fee0cdc146d1d67ec73b014da607fa9c86555534f0f56639cc71f8187626ca08feccfb8cc4a21c71e9c9745037fe31dd83e69fc165c9735c7fd56e2a6a1bfc7e0a6ca1bf81b6fc06dd93638af7f4b1c1af82f3fc855d650ef6b705776697e9c58c18867a9a5a6fd56c855dbf0bcd0abeccb9ef6724eae9a66c438e255598271ff88f12a377f31dfdf272e5ae6cf45e29e1c156c016911af887854f6e1fa0efa577535b6386f3c053755d3e6587f8d5c0f81fb8fe05005ae2f25b92e5b9c2f0e60adb465fe203fab58372df5db030f75d7627f8f7855635d901dd6ab8b260fccb72fe0aa6e03f3ed67e221607d7901d7668ffa70c88fba69aa007ffc3ab86d62c77862ff3a347dd7c21ee7ad63d304c453ce12b701f1707b8925c03fe57a7d53d0dea1be9aa2193be8e176c1656b0588fd907f266748f3912f4dd348477db3c463c7f315e0d056f4d7ed80a50d1dfd6bc0435b76c8373d018f6d9bce9327960efe7be8d366a110eaf9155cccc7dd36b8b471ee8ffc6eab9009ead36f243601b03ffa415bdb7cf40b7f9878a4bdcbc8214f8c7c6943a884f982f8b56af638bffb4e0ead207eba09ee43109c4737120bf7f7f46f08a3305f78be31a830defb89d3b87f265bc3a53dea3f6436ce7edc818b507460b94cdc502ff70d5c8641a8e7077065cc7e867e11ea500be2adb7e42e17ea83f386666eafb46fba92fe6800b7767eea8ff88610a230bfb85fe85a653e217f82ccf57027646b37d0535b701ffa14efa389e1bf1e4e0c7fdc33b91385bdd09fc198fb7d4fac8af878f4b330d397e7799b98fa727dcbe6c48867977583223e02ffbadc98f98bf37685d9b33f2e4f4c7d0ee6acbcafce26a65ec8676bb723d7f7885f577555da7f397150f647c4a3abbb3acd7f224ba98897e2feebac9a527e9ccf39cdff3831e37d3a31fb0bfa6f679f64ff3a31f5dd9998f57448968afb7bae2fd246d60ff7d7b95e6e832c21b27e1e137764453fef6217533eec4f4cbdc789a197fb429656592fdcafeffa741eeadfdbfad04b517fdd60fef0beda9e98fd1dfda71b2d1eac17ae6fd912791fe07d24d99c15fd5e72c9933ec5c4ec77bb13b3dee6e3155971dfc8ec41c1fadd9a33f5f363e232f983fc9172cefa3231efd3cdc46364fde37eb5ddb2887e24e86f524b9df41a12b79cefd6c99ad35ee9af7513eaadfd9c192f7923dbfadcef73e234df23bfa49dafaf7b73e6f904fdc1da41a09efe38b1a4fcb9236b15b93fea5d3a8b27fb31ea5bec43766b64ad23f457c453a2c4541fbb734ef18b13337e9b13f33e3a226b1ba937ea4d7ae969effbc443daff96ac2132dec82f194c1fdeefab89bbc8f72afa898c2a6441bfd66c1e2fd58999ef9f126ba49e88a7e6a637eb656762d6e7c6c4ec973789e7f3517ff6bc2ba9977f4ddcf78c0ffab33d872a9edf2f27ae933fc78907da3bf477b5eceae90fe2a38d363cbf3c4fcc786e4fcc7a9089a9c7fac4cc574d9ce2e1f17b41ed0226bb4bb2fd0060bda35e35d838eb03fdd6d42f7ae60f594c7ff6db2b72b4272cec911f6a1ffaa36ece3c9fac4d4c7b491cb99f5b21c78ae3caf8461be77df23431cf7b3a31e3b33567eaaba867ed2d3efc7d84fea4a3e9cd7eed27a6deab13339fd1df631ead45621cfd2516a607d743fdc6cafc65bf5899987aa33fc73af689d1ff6213879efd13f914dbd8f6ac27f497186220eb8789999fc8676be75d5a0ff966c55af4bc3f51ffd13e5cdfd33eda0f0e8c0be26b837dcf7e8b7a8c83f9c37ce67986be1a182fe46b1ce3c8f90efef599adc7fe8bf7549ff7f9c0fc87dee64dc171bf93380cd0dba39fd8ec6ee07b1ef9d25bb4b9be877e7ddbf703f5c079ecf91206e8ed5713f703f5467edbf5d5717d41bdd9f1e2c078a1bff4fdb4ded1c4d413f9d7dbe9b89e831e433e5403f57d485c0fd4f37162e61ff2dbac93bdc3796c340cd40bfe0d8d5d9864ec37b4838cac7fce0f839205fd66e8267b9f388efcfd00bd0719fa91f9c7719dcff721f130526ff44b0bef9818ef2f9b9d8dac3fbc7fcc3a1f99ffe84763615ff65fec3756f6a5dea8f7715620ec8fd86f9c09c8f7ccb789197fd4eb88cf8c0f9ffefaf77fb5f7ce8b571f7def073ffa537fe6cffd85bff457fedadff85b7fe7ef17ecc53ff847ffe49ffd8bff61ff2f7e5ffd4fffb660bfec57fcaa8dacf975bff127fb4dffc16f2dd86ffb1dbf6b237b7edf7ffc93fd813ff4470bf6c7fe93ff6c235ffc577ff25fd6dffc779ff97cc1bef0a5af7ced1bdffae03be79d73e2d445d7bbc18deed49dfd6aefcedd85bb7457eedaddb85b77e7eedd837b744feed9bdb81feed5fd740be775cb6ec5adba35b76e761b66b7e93eb82db7ed76dcaedb73fbeea33b58b03fb4958fdcb1fb647f3fbb2feeab3b71dfdc7797b9dc15ae7495ab17ec1bd7ba63ffe4823d84bdcc5e2776a1ccde0832caa99cc9b95cfc6a2f97e64b2b57722d37667d2b77722f0ff268d64ff22c2ff2435e17ec7fba7b799365599155599375d9904df9205bb22d3bb22b7bb22f1f17ec0ffc811cca911ccb27f92c5fe4ab9cc837f96eafd87cf6b2944a16fcb7d75d6b2fb04ebdce6e46bbbcecbeb182d4533dd373bdd04bbdfad55eaff5466ff54eeff5411ff5499ff5457fe8abfed4375dd6155dd5b505fb75ddd04dfda05bbaad3bbaab7bb2abfbfa510ff4508ff4583fe9e705fb2ffa554ff49b7eb7774fae85bd4eecfd317b03d8bdde451f5d945fed6797e7ac615a973f8d67f13c5ec4cb7815afe34dbc8d77f13e3ec4c7ffa71effb2fdbffffeee3f83ce47d1</data>
+ </image>
+ <image name="image5">
+ <data format="XPM.GZ" length="2509">789c7d944973db461085effa152cf54d956a932089a55239c896572d96bcc4b253390033186ea2488aa416a7f2dfd3db0cbd44e6d340f8f8def43406209e1c742ecf4f3b074ff6d69b7a33711d37ae6f3a077e3b9f3ffcf5f71fffeced675987fecab293edffb6b77fb1e9b8ced9e2ba65c08c00baf2117e2f5c86d02d99e196b9d7ed963df53f2ab3c47789258fa7c26564688d4bf30f23673de113e6ac1719ae9459e27f4d5c893f17ae126f8d2be3ebc87d9dff4e3904f317ccfd5ef23f28b3c45f26963c7e510ec1fc9570157dd81857967f883c90cd8635f3208b8c0b6596f863e17a500fd597fe8744c35afc1be33aef8bff5ad9b5e637cc7993f7f346fca571637c1fb9d0f99f9543b07ab2df453ff9723d0551a1f3d791cb8170573904f3a5bf725034e66f133be96fa44c1246799e4a573495e461a29cfcbbc8e64f8d9df96564f5519e876a1019668975fda05c593d5c25d67a6f945d6ef3bdb08b3ed491eba1e467c6561fcf229bff4ad9b5c6c7ccf530fa8089bdf8136596703fb1f800c23ee5ff548e3e7a636f3c8ddc68bd8ab91926066596b05c5fe359c285b2cf8de5f7ed7296f050b825d6f74763dc1a0f227bcdbf60f679e29789353f5666093f4facfe857208e63f156e93df8bdc16c223e358ff28b2f939735b240eca2ce1678983f0a57208e6bf150ec96f8d83f127e650b084cf85e5a32fdf9d10b0c6c6e44835c9631dfd9ff235b618925ad1e89779278af5750df7681ea40316d8111eef876a79ad977ae773d8257ec8efead629fdeb3ca4ba9ae6e11fcdbbef6aa72b7934ef695702eddf4e631a13d2f4c73cd599e115f533a639bbc173e6788d0b5cf23a314fe915dee01a37df698bb77887f7f8805ff190e64c342fb59fe2333ca2e373d30b7c89aff035bec1634a9e904ef1417faf78866ff1fc275de03b7c4fa3a1553e50fd8f78a2ef0bfcf43fe973bcc4cff805bb74d6a3de0e31b37c9f561fe090c6583a19612e9d1dd179417db1575237191eeafb172b9cd22a7d409a7bcc8f0c4e68f01900ef44090db8547f4ee9a966456732445083078f779a8756dfdf52f19b1cd59c699254e31c46d0703f30b6fa5239a5d27faabc22b78409de838316bdd51fd1377730a531a12bd363c949aa3d936f1a6821e8fda566aef8fe011d612eba860569495a9196721ebe7d7ed0c30dac491b58d2bd21c116b634bf25ddd2fd9dd9f3f6efef7bff0111915e41</data>
+ </image>
+ <image name="image6">
+ <data format="XPM.GZ" length="1472">789cb5d35b53da401407f0773e4546de980ee6c2ee26d3e9838004150183ac974e1f92bd7841501045ecf4bb37e7ec914aeb431fda330cc38f3fd9ffce26ecd6bcf3e1b157dbad3c2ef3e58df2d475bef06afa693a5d7ffdf6e57b65270cbdf2c58417ec7caaecd43de5f5ef67063ecbf273d5f71b4ac7c01151eb1c18128d56c06c43bc7648b4c6070e1c996f42606fc306302586068b8e8891c1a2ce8658d422360c169d1199c5a2d58658f442e4168be644613970418c2df63637c4de0931b1d87b47cc2df65e220356580b34c88829478b644c3b3e237999e2ca0532e1be4b03a4e6a16315180482567e40863c727b3e46469cbb34778ce9da3192f1d8d147263c77bc40169c56be452a2edc599d03c3a05c18d343642402c77d241354a4913137ee2e9c2213c15c7a822c046db28bb48276b5064691c86d01ec2385302e3d40ea987adbc0068b85e31e52c4dc26c057206309fdf811c883c4370cf884348972cfc61228929cb63145ea3c3011f01e18ebc2b7f847b802268d821e51852c0fd23dde33a455d47b03cc0bd570d75e0315d374ecf50fe73f25d5bcfa7152144a171f25c65e5ddfdc9a3f93c9dd74369bdd3f4c7e4fe68bc725ccd3f37c3b59bdac5fddec35575b49ebc5daa2dd6eef5bdb6cb5de279d72d2eec1c1617ad4e9d0f769fab6ebde71bfdf37830105835eef2d19a627dd6e77926559bd9ec10c3767309a9f96339e67520ece5672f4eb74a45c9cd35c2ca47c7fa252f62ec7beef07f31082adb396526669f926fff62efc9be4c7e7ca4f48a042fa</data>
+ </image>
+ <image name="image7">
+ <data format="XPM.GZ" length="2205">789ccdd3d94ee3301406e0fb3e4544eed0e8a7d9ec44a3b96029db1468d9613417496cb396b2b46ca379f7b18f4f8a8a60e0129d4ae9979ce4771c7b6e3638ec6d04b373adbb51393aab83fab4bc0d66d5783078faf5fbc79fd64c1c07f6278a209ef9d69ae98f823ad81c5e6987b0b208dbedb45639196ca54a72cdd6aa76463131dd8f946d749b9c79676d4d6148264ec9c7ec480bf2013bd6948f7d76a2291fdb13fbfc1e3bd53ebfcfce8ccfff39b1cfefb285f1f94b6c697c7e879d1b9fbf3cb1cf1fb10be3f3c7ecd2f8fc3b729455c690afc84956b387e42c536c439699619f900bd1f60e4b722522be1e92954cd89a6cdc03c8d41f45b2c95f27c722e1f7cbc989107cbdf2ce63f613598ad444e4985df078283f2a44c9fd876423345b38c79168de67839cd9eb19b94d9693f19f9273a1f9fb3d924ba1f8fbef902bd98c57928dccd95bce49645d90f7c8996ce63b224bd98cef88acf2663e779dd32c97ec15b2edd70959914d21b59f8f7be72ccb53559137bd8be67903b2c833bf5ff0402e73e1f71316c9755ef0fe79761622d7ca7f9f3567999609afb755b22c9bf1d1fe93859d203f9fd764552825c967ce795de69c3f4f56a5d67ebc0bce369cd7172e9dcbb232bcff6e9cab5ac59c7feb5cdb09e3fe7372a10ae3e7e7c2595786d74f7ff4f9fadafd0851a2b25543d151bfdf0f83139ce20ce7b8e0bac4c09e336ff5e30a435ce306b7afeada9ebf7bdd8f11c6b8c7031eed718c273c631e0b5c8b184ff763091daa652c53963d5aad60956a0debe84cf5ff44174bd3ef659fd1c50636a9b6d09deaefa1ffaa7b9baa871decdadab3fffc99edb7e61ffb38b04f776f728823aa21a98783b7bf178eed1d6d44531523c1f17bdf17293208c849e52890fe6f3d8440118636c556588655888fd68feda9ed730586f65ff599f54677745eba3f5e9faef7a5fbabef974ff4fffddefa0778e750c2</data>
+ </image>
+ <image name="image8">
+ <data format="XPM.GZ" length="3982">789c9596596f1c370c80dffd2b8cf02d289899d9198d84a20f8e6fc7f711db29fa405dbeeff559f4bf574b72174de276518f0dcfb7a444f1d47efa387bb4bd31fbf1d3ccc390866761369cd2fdecc7f87875f5fafb1fbffd39f3a16966cb6f6dabd9e6c32f331f7686b36176f3e63a8d00a800b4b18d7dcb0c23ee4c677a3f62ac98a9a33e337f63f69d579e1fb1694d6b0df32e7332c9cafe9723eeeb2e76a27fc83c30d1b23dfcc25c7e5cc7fcc46c7beb783f4066d73bd78f98ae9853dbd5c4fa47ccb9cf2eb0fc7ac4b66e7b956f0adbda45deef82b9e9a3e360e096b06d1c9f975698bbd6cb7a3a540ebadf6761db51c5f23d66d346d5e7f3583b66d860766d52e6f8596ab3ea73fcad2ffaec1fde32071b88fd278ea74d5da3f6b7856d22cb72d93f7703953f8ed80ddc80247fcbccad6b49e233c7dc757d2d72f6d7196788e343fbcc7dd7d59c0f5a5476a24febcaa4eb5799adb39ee301b2bfebbcea8b9cca7af60fae94c7f27be5a0fcc61cc68cafccc9252ff5e999b3a9547e21ecb297f32e8c98aab19cee985bd3a8fd4a791c2f27ec8cd6ef9b30b55ef275cc6cba5c73bdd0a6b0a96b3e0f3d333b338e27c7873c792ff55e33074335c71fcf852904a91fce97af4c14396565ad17ba61aecda092fd1e847d1d062ce7fef24dd197fd4f985bdf0689c757e6aeace7fc2208fb2e88bfc71396f8f0f9bcf14dc7fb01c7dff7e57cec3fdc0af703b527e7b5de06c7f20133f59dc821289b9ae5d84c58fc95fd8a41f18fe47c7ebc1e399f3ef81024bea7131639f7bb8f3e2a3f4f58fa9dfbd7274395d4c38b706fb5dff6262ce7e1fe0e55efa4fef14eb83c12ffc83c088328f383fb25747daca57fce9493307ae1d045c9d701b331a1e2fe05b167c6fab02d6c6b5dcff321f4a18f322f657f175c94f9c8f33350df8a7f28fb7bdbe87e5c3f215aa3fe5e0a8718a5beb93e42b6bee6f987f7c221478917ef1fab3e6bfdb17eaccb7ee22fcf97382872b1f7226c9dca1f9493d8a7f3094bbe3684cb23f705e72fb6e3f5b8c35cae8f28f67be6de557a5ecb4c360ac39893f29ab073b5ac578e94a47f13b32ffa35ebdf4d58d62f3107971a996f623f8eed13f75b4c4ee73df27c8b39e624f9e5fe48950b9a8f2761aa1be9a796794056fd5d122e8fecc7f334b5e5e17c80612ee357cfc7f32599b23fd7173c0a1335c21cbfd4fb46cfcff329595b462433fb9f8848cfcffd9bbc6fb47ff97e4fd1579a4f546ef5bc43e69c7296fae67acf956d2ab1c7f1c9b5efc43e2e0a9747faeb65c272dff179736343c5f9a03561d755523f6c2f97db4dfc45231c6c23fef03cc81d35528f34afacf30fce8463d5c8bce27acfc68ff3cbf3a9b4432bfd0f9bca24f30b5684cb7ab1c7f747f9f2a1f9c01be1f248fcf83ec9e4929c1fb684c340e3c9f9cede05cdc7aa70348df8cbf33707b23abf4e857dd4f3483c63ec1a99f77c1fe654c2c7f58741789420968bfd5ce229fe1e29f7c2b4adec94657da64a392abb4ae2a3ecb3de874fc2c5bef4d39e701c34727f77caa4f16ac7acfdb0af1cc41f5850ce2a3f98b0ec27f1c8a9d57cec2a1b5d3f9cb0d4abda4f4ef597957d23f3f041b89893f99494b3c46f67f8de838084fec74fff533f60fc1ffa8409f3844ef0748afe59d13fd7f70bbcc4ab29fad7788317fc768b7765edfd14fd071ce263f9ff84cf45fb055fa7e8bfe11c7ec6795cc0455cc2655c99a2bf8a6bf805d78bee066ee2d6d4f86c172f5f710723eee2eefbf1c43ddcc703fccaef877854627a8cdfb07a2ffe586383036cb143833d5a7478060800f45ebec043800809329cc0291a388373b880cbefb5ffa17f05d77003b7e5ed0eeeb1830718c2233cc173795eded17f853798e3b7cf300f0bb0084bb00c2bb05afed6f0e027fd2fb00e1bfc760b9bb005dbb003bbe5d9837d3880af3fe91fc2111cc337a8a086061b18400b1d18e8c196afe648f0bd7eb92c3c1c95efb0e512a58c75f9e4844ee98c65e77441973fe85fd135ddd02dddd1bd48e88186f4c86f8ff444cfd3f24b2ff44a6fe5ff1c7da6795a98aabf484bb44c2bb44a6bf485d6a7ea6fd0266dd1767976e85feae787157bb44f07f4950ee968a2ffd7af337f039acbe337</data>
+ </image>
+ <image name="image9">
+ <data format="XPM.GZ" length="1202">789c6dd24b4fc2401405e03dbfa2a13b62005b041be3c2172a46e3d2c4b89867799487501030fe77ef3d9d2134740e0bbe9cd09c696835828ff7d7a0d1aaad72918f54a086621934f47a3add7d7e5dffd6ea5114d0274e82f3fa59adde0c54f0369f19fe2ee87b28628a65ce98ca28a3bbcc1553b72997cc2518510433043b14c57c00bb147004f6289a790f263a31d83005a596059f0e8c99dfa0d1c674988fa0d5d65c30fb4cd3a660e4331851307203c6948439003b146c7e01bb148cdc8297143003130a36af4141c1bbba012505efca80f4b26c9bb90769b4c58d2c48c746cc05d3b629b8d1183ca7e0463b30a2e0461330a6f49873b043c10573f08282f616ec52d06ab04791cc1f30a180435050705f054a0aee7b072a0aee9b8286c394200efe45a13ba279748a464aa9b4b1a5ead0a4436bc391a86ad4d80a3a55cdc466d3594523d3f9e27bb9aa6c725bda78b46dbd296df44dfab3c8b6a58dbe51bbc5fea6b4d135e9ed646cf7a58daeb9cb7d73d8e81a9d4fe8717ee3fd437868f2f9cefd8637f61f9f7c93e6fe69d8b879eebb46b8e3376e071bd7f8e337662fa74db171bd1d9c34c5c6aaa6d8989d366ee3e96fc4d169d6ffae6aff9c383860</data>
+ </image>
+ <image name="image10">
+ <data format="XPM.GZ" length="2942">789c75964953dc481085effc8a0ee78d9848b754da2a26e680590c66c766194fcca1548b019bc5d080c131ff7db2f3154d771bf37cf9a4575999a527b5df2e0e4ef6b6078b6f176e476e74e607fed4dd0c16c3ddc5c5e33ffffef573e14d590ee45f51d483f2cd1f0b6ff647033fd8b9ba8c63a023016afbca9695f2c709d763e6a41cda605be55e39b6d176ca4b63eeaace7443e527e55aae14ca4e59fe1c98946d6733df2bbbaee950ff56b9efda0ef52f33f74e9be7af1346bfc763b6c3ba29757fda532e6a5b1ae5adcc0ef3d09a72d914a5557eca5c955ef9bbb269ea12e77396b93598af53ae9acea09f42b96e9cd17e382ab7b6755a8fbdb20cec82f295b26d6383f9ce955d9b1aed87d1afb7be6f94ff560e6d61c0fa7c5cdb3a83f5db63ee8bce985e7943b9ef82c17ee3874dbef25540ffebca8d1d1af4b792b9a9705fcfc777deb449b95596868253be56f69d2dc1cb605b19f08fcc2dead329d8fba0fdd117e5e863407f9b630e4391ee475a3f94a18ce8e744d90413352fa4e717ea50479cb7d60b8d2d4accdf284b6023f2abfb076917f7e9111cba88f3d4e71bac35f9bee63db8e0a2e691749ed0873eea79d383b20f3e223f9f9463e70be46d151c62443dcd771c8a701e3a6f2c4498ff4ed988506f57b912217f87cab52d0accbf0216e1f9d4ca4d6c12f2bfaf2cf92b500ff5e585c57dd6fea5dda6417ebf4f18fd7e00c72e613fcd57b436e0fd62d4b7d1265d4f9ab7e8a24b98ffbd72ef4c897c1e80639ff0bebe53f6ce96e8ff181c7dbeafdf9318fa26e7fd021c439e4ff31cc7dbe1f9dc82fb9c3f8ae01813def71be5e4db0a791982634a5a9fb47e1af6b541febe657615e65f078bb09f7e7f52e1e595523ecf1c2b3ccf0a2c425ef47b99cabeafb09fcb1c2ad423b02f2af4cf99fb0afd04b008df07ab6c4255e3bc2ec122dc2f95abe06abcdf37e0683ae461072cc2fb8a796b11bebf7b13c6facfca4d480df65b068b30afe63f75b16ee03f028b34bf8cfd6cec5b9cff2e58847c6b3e9213210f9abfd4a7618b7a9affe445b8aff94a21a616f557c1493ec8ca2673c87ecd9b3c6e8bf9f931b3ef90779f39663fce5bfff063f92ca689dccbd5694dfbb967cf212b72fa9d9fbff0299ff1397f15dfb7ac0bbee42bb97afa8aff9abff30ddff288efa634e27bb9fac0d7bff87ff0a3e8491cb35a92abef78f917ff0aaf8ad664c5acd6e4ea7b5effc5bfc11fe6b439a7ad19ff36efcc69339fd22eeff13e1fbcacc0ef1d7f9ad3b3ff908ff858fd275881df4bfe3ca717ff2e0fc5bf05657fc1e59c9efd46fc95f86b6eb89df83bb663490c881cf5d43ffbc9f321058a94e80b9d3efbe98ccee92b7da38b674dea4b4774c9077445d79819ffffa01bbaa5d18be097ea723e7447f7f4403fe871e27fa2257a37adb15fdc869629724d2bb262951e26fe357a3fabdccf2ead4bef1bf441566cd2fdc4bf45dbb352bfa11d391b394dda903d76a7fc7bb43f2bede74026cd7e99417698f83fd2273a9c96d6df1bfb734733fefd111dd1f1b4b4fea59cfcbad43fd67e66fcf312bf9cfbeffa79c5bff5bac4ffdf9f0bff0341cdbcc7</data>
+ </image>
+ <image name="image11">
+ <data format="XPM.GZ" length="4734">789c75985953dd3a12c7dff329a8e82d35d5d7cbb125d7d43c9070d80204424848a6e6a15bb259c2be935bf3dd47ee7f1fdf0506f3f243bdabd596f9edddd2e1eef6d2bbdfdedcdef1dd495c8ac77cb3f42edd9f9f3ffffb3ffffafdcddbaa5ad25fbf54bdfdc79bb77b774b7169e7f2a21f41d632b82636d1f3c87c3c72eb5befcb91dd0fe5aeed7cadeba3b2f3b32c10956f955b1f8c6f8c3baff6f95e39f810d4b9ac2a73dbfba0ebd7601f83577f413966567977a09c7cea5a9517e521cc42527b2b23876ad6959dca77ca75a83bb52773e5301b4ad1f51d700858e713650edca93db7623c30fc6b7c41f233287f351e3af8db0677056b7de44939862234bafec13876b05782bbd2e4b59e213585c54fe0902c7ec497ba8a67cab0377433d675d2fde9eaae863d3737f666df29cf7cef0b5d3f05774da7fbed6ae54cacfb2def27d6fd14c8fbc65b7c5be02e98fcb27164f4d3a572d7a452eb25bf94b91b44fdcba01c1b317bb760ae18fd77a5dc7783f97f1c998b566ae4f753b9e49675bf183ccb0d8afc6ec0dc89ee377d526ed89bbcf607b76d05ffacf9e5552fa8a7d637b74310ed37e78c9368fdddbeb27064cd8f1f94130f82f89f95072e515fd6fd96a2b5fea4ef606944fb9f347e2945a2e6475a7fa9a6f5c2b815f547a7c61c719ef47c49ed63adf9d31558ea88f35b193790775a0f994927ba5f74a11c6215d59f209e2e9415fc25b00c51fb998f9459a2e95f2e18f6690e8e45d4fce9cc780666ad9f882f4aacdf80b37fec87f6ff683dea7ed13938b651fb81b45f24c51af21495fb3cc0307ff47ccbe07d8579f2051ccb887e288d1be365e3007fc223c722cc2cff5d707ee0efc4d827ad2fe97e67ebadad6bbfe76cbce5bf63cc11f350e3cdd107f867edb7d8f860f53802e707f977c69dc5db4f8cf5276306bb556389e84fc4d3e6fdc4bc9d19870afbb7028eade533187709e7898d2398f43ce6ec22ec3bedcf9c4d4ce8d73be364fa0bee13fa4326463c883f0f8084fdba304eb04f87c63d58903ffbb6d0f8dd1538cb239f07e301fe9cf667ae86e9d33d381509e70df54aa94ee83f7dffc4de77b0cff0df8754617e683fc6c1dbfb846bb0b41dea8d7a0dd93fe6c935389509fdef8ceb04fb7a3e52112acc4b3a00a7d6eaa3f54d958f05f27f06a7b6d7fab2ee47b63633fea69ccf37e2711fc193bdcfca6d284aece731383f385fde588cb72746bd61dfa7d463be68bfa62ef509f9ebfc4a1c6ab3aff9666de9b11fdf8d73c9757d0bdc173de6fbccb80493d6338ddb0b7b5fc1791dfdb43731e633e24f8b78dc1ab8af7abc8f115f3fe97f33aea14f6b13ebfc27ed8734f433d3d7fecdd136bdd6d3e9fc18bd639dbe18e70b8e72a35c65c6f9f868ecc1a2f51fbdf5a8ef99b1efd18fc93880dda672f666f1ad1b77bdf697e8fcccab7ec0f9bb37e65efb55f47cf52d17b5e6cfcb136bfc7204ee83e99f1833ecd3a6711eb9aaaffd31463b607e6c18e703aeebfafec9d1f380fd6f8c23f45d344e96bff6e7980de2e5c17861af374ec6da0f593a0eb89f6e192763d45b32a33f5ae3bec7795bf00016d43b725be3bee98d7d8dfbe29e71be60aa3ee28d4361f542fe6961df1d1a9b7dde5cf080fbc51338ebe33c1d1b97c6f097ad99fd5df0c29fdc4e8cf939189756ef47e3ca58df07d99ad9a77de31af5723a5fb23593979b89d1efbd718d7a52653c03b3de2f863215f63db0019ef4d78dcd1fffc158d7f99aa517f60e26c679d0793e7ab7fa3d183703ee276b13435ee77ba676c0fc9d1b7bb0c05f9bea80fb75346e707fe7d6b8c5f709ff9818f374d7d8079caf07e31edf2b54838780fc786562c4a3f322471306bcdf67c61de277da8fa3b4c5abef93bcca03eec7fafe1b647ce1a83d9daf43ea4387f3d318771deee73231fafdcc5818ef0f9d0f83fe8cbc77373ee488492852a29e063ac25ffffe2ce4e9984ee8947ed2199de7e7226b5dd2d5ff93a76bbaa15bbaa37b7aa0477aa267fa45cbf49e3ebc264f2b34a7555aa375daa04dfa485b596f3b6bedd0a757e577b3f7bd2cfd99f6f3f325eb1cd057fa4687f49d7ebc225f5099ad6f504535cda8a1967cd6692950e7e8a5bc738e9db848954baea74d37b823779cb53fbb1377fa8afc4fbacbf2e2cec6f8ddb13b7717ee529f2b77ed6e5ec8dfba51fe9e36b28f7df7e01edd937b76bfdcb27bef3eb89517f273b74a8d5bcb1a6d8e63dff56e3dcb6fb84df7d16db9ed17f23bee5396cff1b8a8f2eb6ed7ed65f9cf6edf7d7945fec07d75dfb2f5b1fed943cef750e5bfbb1fae70e5cbfd7595abdd2c5b8f3987c6b52aef5dc81f85f49a3c3b66fdbe4ab93e4d7eed0c7cc4c77cc2a7fc93cff8fc15f90bbee42bbee61bbee53bbee7077ee4277ee65fbccceff9c32bf22b3ce7555ee375dee04dfec85bbccd3bfc8977798f3ff3fe0bf92f597ece0793fcd72cff8d0ff93bffc81a05972fe457ccfe7a961f35aaac51e7efd2267fb9faf1df0d2fe4e77f91dfe66d2119bfacf2c7d1787d92e14ff2f3c9fa14bf1cc9b19cc8a9fc943339970bb9fc435eaee45aae173ee4466e4de764ef4eeee45e1ee4519e202fcff24b96fff6bcb7476b292b329755597bfbdf7fbef91f1bb499a7</data>
+ </image>
+ <image name="image12">
+ <data format="XPM.GZ" length="5758">789c5d98596f24bb0d85dfe75718576f8380b7d7ea6a0479f0d2deddded7200fa4aaca6b7b6d2fed8bfcf74887a78c243e98c17c234a22456a29fff97be9e2606fe9f79fbfdee63abf8d4bf1465f977e57efb3d9e29ffffac75fbffee8f5967adda5de78b0d4fbe36fbffe389c2fc5a5e9d3639d219c26089d6116f80c3cce028fc05516783d736f90052ec1455666fd043759e0fbccfd220bf68760cd02af80ab2cf001b8c9022f671e74b2c003301cc0f877e07e16dafbe07116daafc1310b7c04aeb2c01f9987832c70032eb2c073f0280be34fc09a85f6025c658187998b6e16f80d8c05c86cb7e02a0bed18afa8b3d08ef947dd2cb4239ed1200bfc0e2eb3e0cf063866a13fe219d55960e4a3ec64a17f0fdccf423bc62b0759e01a8c1fd823ffe5380bf321ded2b260bf005759687f04d759e059e671a76c4ae4d3ae9db330fe17b8dbb2b59c8476e41be9f47a7b000fb3c027e0220bf6c7e0d10f6f82f103467d8d350bfd9fc0310bf323df3ac8ca2c013c2aac8ffcebba7316faaf823120fa7f83f103fb1bb06581e1bf5659e88f7ad13a0b8cfab46e16f83973ec64617c8c17350b8cfaaf7a59181ff585f2f2fd067faa711618fbb18a59e87f0e6e74dc453d44d46bddd181b32d3b67a1ff1ab89f85f5d9030f62eca23d6e8387a592af9db5eaf87970e89c8576d47b5d94e6eda172ae06be5e82f3a51ec5c2f78ba873d5edf87a215f75598d7cbd64e49c85f15fc1e332faf9651de7aaebf5246fe401dbbbe4b4c131fe36b9343f5fce9ddbf143242761be2db0964d07eb1bdd3f5573960eb972b6a9b38d38ff3a5969effe68f2cfed7be4423dbf976435f86b1e0f0a0af3a3fe6b1bf7e8cf06b9dfc1fac67572419e9047e435f298bc4a36f20ab9222f931bf2b7732a07e7057940fe220fc99fe492fc416ee77f27b7ebe9f9352bb83ecfe4767d8d5c3babaf97a572f5f62b726f807ad25d729ff68c2f72fdf5853c224772e91cba64fa17f6c8f42730bec8fa08be3faca23f219039bff5c93c6fb46d57f3fc33fe36dfe18d9c84feb8cfeb38e6fa8bc7178df9b703e758f87d28be5eb162feedc8f967bc437212d8e3ab527d79fb84cc7cda1399f5654a663ef582cc7ad21d32eb4997c9ac27f5fc566d3da991194fe890397fd825339ef041e6fca12147b290d31188f5f07c57693ffafa717ee37b48189f35e447e7545fce33729ffc401e92efc9dcff72471efbf926b76423df902bf235b9215fb43c427d08e36bcf4ba9c97d72451e922379e46c839615e79d0dc9a5df77ca78533dfa7de8e74dd5d647d8222761fffafc75aa473f2f2bf280ecf1d53674964bf2c8ef07bb20f37d6a3e5f2e283fcfa76465fb2b392aee47737fead61f29c8e907ed780fd74deb8fed920bf21ab9243f92395f7c2147b60772e5ace7e486f65e4f8d76d8be4de6fae837b94ffb2732fdd396b95e91fea47af77625d3df7045e6fac519d9d8be43a6fff1814cffc33bb966fb3d99f104cf6f638c27de91198f8cc93db6df92199fd03f6bd7ff92cc7884feb5f917ae97d17fdb27d37fd922d37fdb20d37fd924d37f63fe22fd17da47fa6f914cff659d4cff95fe47fa2f1332eb47583fb1cdcf2ab98da765d693ac90199f5664c623cbe4361ed64b6cf3e1fba1a9daf55f905bffbfc8f437dc90dbfdf7496efdff20b7f55f90c77cafb13edafda7ed7c66de7f4e667e74ab65f3f72ce34b078abf2f7be47ae8f73df35b35857f0f755af6f7bafa7dd4e4172cecb9dfea9e8f1f2ec8dcef81f598857a447ed36553faf79b9d90b5f0f36fe49ce2f5fb7fcdb9eefa7b515fc93d724deef33dd9230fc8fb64be37e5b4e5e8ef7971cec2fc780f37dd4afdfb41cfc8e94981f1be9cd3787efe9fb5ece3855b32df8f72d272f4f7ad9247fe7d24c72d7bbb1c904b3fefe5a8e5e8eb7d481e3b8717e71fffb7c94960ac7fd34bf1201f517ed8cffb96199f6e38b7fd839193d01fe76dd34ff791cfb743367f2fd98c9c9e50e05572e3ac6c6fc7d3293909e3fb7c83f47d80f8a292399f769d5b7b199293d0eef91eb61c16e42430cecba66859fae42430eee366d472382627617caf9ff2874fc849605fef7116d8eb49b3b01e3e9efdf00339098cf33e1d2f49609c4f69fb25653e9c4b1015932895d4d2c8b5dcc8addcc9bd3cc84c1ee5499ee5455e251cce69ff267379970ff9942f59c8b72ccb8aacca9a4c645d366453b6645b7664d7ed652f594f655f0ee4103a4a3a864e924ee54ccee5422ee54a900fe9a6b17bd24f1a50fdffd1500a194929e32058cf201f41ffcfe647c14284aa5007ff5ebd0e37e136b5dca53ff7e121ccc263d2537896517809afe12de935ccc37bf8807d8a327c25db05c6fb0ecb6125ac86b53009eb61236c86ada4cdb01d76c22eecf7c234ec8745d21d7a1c84c370148ec349380d67e13c5c4097e12af8f77957be430ff68b3c4be8874118a67f156114ca304e3ebda868fe0d85bf9f63fa74acdd3e2ba5fd5a6ff456eff45e1f82e94c67e9ef477dd267d8bfc8aabea6551bd2fe4de7faae1ffaa95f21e6ffcfd2857eeb32ec577455d7fecb7e927aaceb866ea6b8fba907d655b7745b7760bf2b13ddd369b6d714771a7ba2073ad5433d4a3ad693a4533dd373bd80fda55e6927b5777d0eed695f0799349d809a5ead4963130bbc5f2c7d9a5509a66e9f3e6b1abb96a1ddd8ad4eecceee931e6c668ff604fb677bb1d7e4ef54a7f666737bb70ffbb42f5bd8b72d27db95a47b5bb5359bc07edd366c5337f20cba615b616cdbe95ffb29c6132d7fec776cd7f6603fb57d3b086f7668477614dc7e967ceba728c7769c7c7948fd4eecd4ce607f6e17766957e973a96b3debdbc08656d8c84a1b4789f937431663acd2f3bbf1fd15afe34dbc8d77f13e3ec459b88a8ff149bfe3b39ec79714e55af2e43459bffeecc710dfe23cbec78ff819bfe2227ec7e5b81257e35a9cc4f5b81137e356dcc6fefdf7df7ffd07fa3a7226</data>
+ </image>
+ <image name="image13">
+ <data format="XPM.GZ" length="5118">789c5dd8598fe3c80d07f0f7f9148de1db20e0dab22d5908f2d0edbeeffb0af2404a564f1feed37d2ef2ddc322ffd5c966082ce6b74555b14aa5b2347ffc5a38dfdf59f8f5c78f97b9ccaf9b85e6b73c2ffc6a5f67b3cf7ffeeb1f7ffef859140b457fa1180d178a9f7ffbf1f360bed02cec3edc4f1368d740832a85fbcb2d29dcf7ee3685bb4a1e9629dc0fc9a35e8a6499ba8b14ee997b9cc2fde6ae53f8f58bc9a5fff1f675f73885fbd52d29dc6bee2685fb2eb9ea57bdcac7a73d7797c25d26d745ddaffb9edf735729bcfddc2d29dc8d5b53b835598a14c94ceeaa54acd799db3b708f93b548e1e3f5dd650a6fdf496e8a14de7ee0ee52b82f93db5e0acfff743729bcddef47db66ebb5bb93ba3f707b7fd39e0cc3ece34d874dd3f7fed4efdf74341678252c6dcfc7d7657739d63075e17628be1eecf39b564d59fa7e6009b7fd9eef27590da7f0eb5fdce3b6525f7f8ef1c7297cbc7d773d6e7ade9fcec26dbf1e7afe0b3c44fb3d3c9291f7bf068fd5e74bd3700acff7fb3f9571d78bf53a0c8b86b907b7688ff98856319ee07a15e4f7c3564fe43fc0b6417d7cf4df8a7a7d3a726b5d207f080f7abe9e3a804bb8802bb80fd7700f56f8126ee10bb883cfc376bbc367f0103e8547f0093c868fe13cfe119cd7ef39ac6558d0bf623d65179ec24b61db8eb11e7770318cfd83fe9a01f2af61acb734701526ac5f3386517f83fa6813463df406633f10fa6f510f118cf1f511ae24f633d6dfee6fdcefa7f054a6717ea0fe147efd6f775363fd793bacf9fec77c9aa61cc6f3a4e136dfff369cfba365d8c2dba3ded6f697b7cb08c6fd945318fb4b7660dc4f5984b19fe409c67e92df30f693447d6dde4f54c0980f1dc3189f3660cc875e618c4fe85f1a98613bc27c3d508f3d7fb17e8f701bcf273fc01d1ce7436bfb2b3c8307f01d3c826f613cef7c03d7719ef135ac30eab5fd14be823bf83cbbf2fdc1717eb6f97ce4293c805b7804377015d6a76c89f3f2191ec7ef8de0fedb7e8cfd19e7799bf707adc2167efdc43db5fd18e7e3123c84237faaa3305fc0157e1f6ee03ada257e0fd2868af37a1716b4e3fab689df4f8af37e9aebe112b63fde7fac67f75d0fc325fa1bc263f804c678ba073768df865bf80bee901ff576d243fb238cf511d463fb3bf27760d4270263bd14e3d97e8ff7813e8c7ae908c6fae916ac685f8751bf6ec2a89fe6f014ed1b30e643a857311f457f8af9700d17685f83313fbe84f3fadfc2980fa3de7cff19f529ea5785513fa33ecdeb5fc1a89f737da85fe2f9e91ad4cfa8afc9f703f7b741fdbc0aa37e99c0a89f5760ec1f5e86311fb981f37cf2f5d84fbc04e7fb83fdd7603ebc08e7f9607f35f97e60bddabcfe9f70aeff0346bd847adafcfcbdc3b9fe3718fb495fe01aef67af707efe3a5835aec7fe69f3f3f190adf17ebd0fdb89eef9053c1dc5ef3dd6bfed4a7fde65395bc2a827bd817afe195c44ff7400e379a70bd8c2e7e3eb693f36e3d2df17b58325be07741eb6f9c6fbc06d78da8ff74169e102ef872378009fc243781bc6fb249f64c7fb395d8653f8f8bebe5dbfb537461fef13b6570acf7f0f5b7f71fe9f66a3bf5b18ef8b7c9cddc4fbabc0557c8ff05176b4f33e3c8ef39e0fb39b58ef03b80ed36338d74f356ce1f3f1fdd415369f387fdfbf1ddf235b30e6271cced7530b5bf8f5be9fbb81fd1ec5f7600d6bbc2fc9316caf50ee01dc856916cefdd104b6f0fefdf9ea86f6feeff3d34f388fb712cef93c822dbc3df6cf289b3e600bb7bf1f7465360f600bb73ffff67109d3126ce1fdc7fa8dbffd015bb8fd3cb49f1f0bb79f9f767c5bf87cfcfdc08e43580e610b77ec07ff6074fbf3698f9f45f2c19c8985951b6e79ca1d5ff16fbee61bbee53b9ef13d3ff0233ff133d3c11cf92f3ce7577ee377fee04ffee2455ee2092ff30aaff21aaff3066ff2166f473eef58f62eeff13e1f781c5a1c791c5b9cf0299ff1395ff025fbfde0bef55df0c0628818fc25465c72c563ae897d3d89df48fe9a434a0dfed6d2d4a3a32bfaedf9d77443b7d672f79d3da37b7a48e3d0233dd1b3c513bdd09c5e3dff8d3fe8ddda3ebef33fe98b16698926b44c2bb46ab1426bb44e1b9ebf495bb44d1f163e02ddd10eedd29e799f4b3a401cd2111d7bfe097fd1a9e77fc4287466fd9f5b55177469f16871493dea53ecef010d6914f9b8a6a48ac696530bdb7c6716ad90489cefd2f0445a5bb5d177fe9e4c69c772673449ff3f856d9e2bf1f5916bb991dbffcd973b99c97dcafdef1ac8833cca93e73ff38abc44abcc3dff55dedc77b424eff261f12e9ff2258b9ebf241359a689acc418b22a6bb22e2b36d692656ec8a6c5866cc9b6ec78feaeecc9becd6b82fc0359a73dfbfbc0b30fe5c8e2508ee5444e3dff4ccee5c266374963c85c2ea5277d997bfea6e5a67f99399281e03c9752ec4dd9576e62ffddb755afed6fff9f5f2b2bf9f326aadad81e5956fba6b07b9ff2675ecfbb6cd867dda1c5a63d7c57eaeba9d77aa3b77aa733bdd7077dd4277dd6179debabbee9bb7ee8a77ee9a22ee94497e3f9d2155dd5355dd70dddd42d3ad26ddd912bdd952fddb3590ead922bcbdeff7e1e490ff4508ff4584ff454cff45c2ff4d23ecffa5ae840873ad2522b7f7efffdf71fff014e3ad5c6</data>
+ </image>
+ <image name="image14">
+ <data format="XPM.GZ" length="3534">789c9595db52dc480c86ef798aa9e88eda52c667bbb6f602c8011218ce04d8da0b796c33c01c60188ea97df76dfd6a9b6c05b2acffa4f0579235dd925afd7eb977bcb3d55b7ebf74b390c5f9b0371cc9bcb75cdd4e268f7ffef5c7f7a57761d873ff82c4fd79f7dbd23b1ef786bdc16c5a2bd0b503eae301df820315f80e1caa94650a8e54b07f03c72af009385381bf82f32efeb16727c41b834505fb2ab86c59269e9d60bf02d72af0817210aac00370a20233b850211ef61b880af66df05005fb025cab603f02372af09e32d281fdc80c8c07f64370a402ef82e376ff827c86990af67b70a3027f568e0215f80b1801c18fe05485787370ae82fd125ca86047be2251c1be06ae54e04fe04605ff1b6594d3ea85f871a942f39c82abf6f7b80faee32a463c0ec08d0af1d04f495f85785b601408fe21387211906f4e8c55e0141cabc019180fe26d80d336bf9c1babc031388f8731eacb85b10adf6f824505de514ebbf3c011386cf7472be0a43b1f336315f823585460f46f96f4abbe7dffc15885f8e8a7ace8cec7d45805c67eb261b71ee42f0f3bff21386dfb9716c62a7005ce5460014bf73d81bbf8f400ae54f83df4535e7776f4078e93edff029cabe08f7a1755e77f6eac029f816b15fcd1df1275fe0d1805811df994acb38f8c55b0e3bc49375f18fd2c5d3e19f348248a23f48f201f520681b7635ec8f3fe4f3d479e6b6315fc9fc0cffb433f89ce238bb70f6eba79187a4ecdbe8bfa94fdb61f18e7b92cda79c9e8afb2ece2e33c94cff1311f86a10e68ec07f5a9fa81b70bea51c541e319f9af929679621c16a1cd07e4b34ac3763ea13e55d631ea51e51d231f5511b6f9c33cab24cc43ab3fe665550779608cf95f3561125a3d715fd4fd76fe0afab70e83cac7433fd6515447d61fe8d73a6ee711979e83d8e607f65b275119d97cb2784967af3c87b15d7e587f9dba76b0f9d278760f18fbaf331d38e091e734b6798bfba4cedb7cf3b971ec04c6f9a9cbc83da81ffaa17eee97c0b3ef07c27c72c569ebb36bac03108c79d124ed7a04fb6f8ab0ed4fccc3a60cc47f8f79d60cbbf5af1b276582fc08f2dbd47a23e17bb337ddfa9e3cbb810dee7bcebd3d326ecf0fa59e4bcf63cfed7d2ac661e2edb6fea63d8f7c6cdcdd2f07c6ed7a79db582f3cf08ee72245fff286711665665ff55c66f6fdbde73ab37e5a3376ed6afdb0f0ec2e34f0dcb313f8c6b8e81796df2bcf7161eb9f79760b025f7b760f78eab92c4a3bff4c2c5cf2902baeb9e1331e399d3b5df0258f7f949d579e4233bec2df6b9ef30dde167cfb82ff1ddff3033ff213aff02aaff107fec89ff833aff3067f79c1ff2b6ff21678c0dbbcc3bbbc07dae7033e7cc1ff88bf798f011ff3099f729f03a790238e39e19433ce9d0a62bb5f48fcf7032a694815d54e0d9dd1086fe774e148df2e11fff9f70634a6094d69465774ed34a71b5ad0ad7bbba37b7aa0c79ffc9f68c579afd2358f9dd71a7da08ffa0efa449f7ff25fa70dfa425fbdc73d6dd296f93b1ed0f6cffeeeff0eed7aff3d17f3b2f3772b7c21fe3aed5bb69cfd800ee9a8f5eff2f9baff373aa693ffe1eff59a3f9d52df2978b37f489153fc46ff3d4a2875ca28775fecfdda9f0a6171b7329e5286ffe52f95d4d2c8998ce45c2ee452fd652c13a7e9abf9f9975ce42399394ddeec7f29574e3face8357f3a91b9ebce2d150772238b5ffbcb9803f5955bb9d5b32377deffefdf97fe01ef181ec6</data>
+ </image>
+ <image name="image15">
+ <data format="XPM.GZ" length="1442">789c75d4494fe3301c87e17b3f45d4dcd028c48e9744a339b05396b217c2680e8ee3500a2d10ca3a9aef3efeff52985153dc1ef2e86d1c3b96babc145c1cee074bcb9dc7a9995edbc00e4d1d2c954fe3f1dbcf5f3f7e77ba9c07fe2b65c0badf3add28b041ff6ee2e8fad25f873106710432ff012744c6198f33e23951c4cc35f500d45c34ec8325970d73a28ae9438c419198b8229e80859f8c137b441d0bc124f1191442324dbc038d2858491c8285b00c5bd800ad281966de21a642c61c530d4025538ea92ca83d15b104ad2c9a7a45ccb8621c0f7a0785e20d6fc04ce9046bbe072b651343744423954b2c71a5a14e12acea1a345a8b843826fa8756a220d6a04e63811d9d81269512e77508bad4366ff2946859c6146a0826a99158c62328b3446219b7a0ca84c4160ce832a570a04fc4526495c654fba0fce07a43c334d67c01fae768dcbb4d74d2d834251e83aa88533c7713cc0a9781bb6061b9c1a1bc11abb8d0195efb0be8cfd3e0c5ee81b2ccac204e4165ab023f5e6b585a8b5777346369b1c157d054cce17cb73e89353f80ce4a83a90ab02a93028b5c9d515b6cbf6ae8b8c5a144cd084d616cf439fe9530a4542e288e5265aeda65384bd7ad321ade20dd8ee74b34b9bba7f4503f8673c527baabaea64ff3259a3cdf87f5edcbeb5babf8f4ee56cceada7aabf8b4f15e6f6e6d87ad124d7a1b3bf5eede7ebb44fd83decee1d1f182e2dbc9f3e9d9605189a25eff7c70b1b0f8fb46838f924797ff8f5114cf4a9ee7f3b73525cfdb0925cf1724fc7bcd8daf4bfe7541eafef9def90b50383f80</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>setColor</sender>
+ <signal>activated()</signal>
+ <receiver>ScriptSetColor</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>TextEdit5</sender>
+ <signal>textChanged()</signal>
+ <receiver>ScriptFileDirty</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>setFont</sender>
+ <signal>activated()</signal>
+ <receiver>ScriptFont</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>helpContentsAction</sender>
+ <signal>activated()</signal>
+ <receiver>ScriptHelp</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>editUndoAction</sender>
+ <signal>activated()</signal>
+ <receiver>TextEdit5</receiver>
+ <slot>undo()</slot>
+ </connection>
+ <connection>
+ <sender>KEdemo</sender>
+ <signal>initialize()</signal>
+ <receiver>ScriptInitialize</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>TextEdit5</sender>
+ <signal>clicked(int,int)</signal>
+ <receiver>ScriptLink1</receiver>
+ <slot>execute(int,int)</slot>
+ </connection>
+ <connection>
+ <sender>formatBold</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>TextEdit5</receiver>
+ <slot>setBold(bool)</slot>
+ </connection>
+ <connection>
+ <sender>helpAboutAction</sender>
+ <signal>activated()</signal>
+ <receiver>ScriptHelpAbout</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>editCopyAction</sender>
+ <signal>activated()</signal>
+ <receiver>TextEdit5</receiver>
+ <slot>copy()</slot>
+ </connection>
+ <connection>
+ <sender>editFindAction</sender>
+ <signal>activated()</signal>
+ <receiver>ScriptFind</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>editPasteAction</sender>
+ <signal>activated()</signal>
+ <receiver>TextEdit5</receiver>
+ <slot>paste()</slot>
+ </connection>
+ <connection>
+ <sender>fileOpenAction</sender>
+ <signal>activated()</signal>
+ <receiver>ScriptFileOpen</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>fileSaveAction</sender>
+ <signal>activated()</signal>
+ <receiver>ScriptFileSave</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>setColor</sender>
+ <signal>activated()</signal>
+ <receiver>ScriptSetColor</receiver>
+ <slot>adjustSize()</slot>
+ </connection>
+ <connection>
+ <sender>editRedoAction</sender>
+ <signal>activated()</signal>
+ <receiver>TextEdit5</receiver>
+ <slot>redo()</slot>
+ </connection>
+ <connection>
+ <sender>formatBold</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CheckBoxB</receiver>
+ <slot>setChecked(bool)</slot>
+ </connection>
+ <connection>
+ <sender>formatItalic</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>TextEdit5</receiver>
+ <slot>setItalic(bool)</slot>
+ </connection>
+ <connection>
+ <sender>formatItalic</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CheckBoxI</receiver>
+ <slot>setChecked(bool)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/current/keyvaluecombo.kmdr b/kommander/examples/current/keyvaluecombo.kmdr
new file mode 100644
index 00000000..9815c333
--- /dev/null
+++ b/kommander/examples/current/keyvaluecombo.kmdr
@@ -0,0 +1,388 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>398</width>
+ <height>341</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Key=&gt;Value ComboBox</string>
+ </property>
+ <property name="icon">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string>_a[1] = "red"
+_a[3] = "blue"
+_a[5] = "green"
+foreach i in _a do
+ ListBox1.insertItem(i+"\t"+_a[i], -1)
+end
+ScriptObject36.execute
+AboutDialog1.initialize("Key Value Combo", "", "0.1", "Copyright 2008")
+AboutDialog1.addAuthor("Eric Laffoon", "Designer", "eric@kdewevdev.org", "http://kittyhooch.com")
+AboutDialog1.setBugAddress("eric@kdewebdev.org")
+AboutDialog1.setHomepage("http://kdewebdev.org")
+AboutDialog1.setLicense("GPL_V2")
+AboutDialog1.setDescription("This demonstrates how to make a ComboBox \n behave as a key value pair. It's \nparticularly useful for databases.")
+
+PopupMenu1.insertMenuItem("Make new list", "PopupMenu1", 1)
+PopupMenu1.insertMenuItem("Remove Item", "PopupMenu1", 2)
+PopupMenu1.insertMenuItem("Move Item up", "PopupMenu1", 3)
+PopupMenu1.insertMenuItem("Move Item down", "PopupMenu1", 4)
+PopupMenu1.insertSeparator(5)
+PopupMenu1.insertMenuItem("Remove Item from both", "PopupMenu1", 6)
+PopupMenu1.insertMenuItem("Insert Item in same location", "PopupMenu1", 7)
+PopupMenu1.insertSeparator(8)
+PopupMenu1.insertMenuItem("Quick Help", "PopupMenu1", 9)
+PopupMenu1.insertMenuItem("Help About", "PopupMenu1", 10)
+
+</string>
+ <string></string>
+ </stringlist>
+ </property>
+ <property name="useInternalParser">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout27</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="Label">
+ <property name="name">
+ <cstring>Label18</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Select value</string>
+ </property>
+ </widget>
+ <widget class="ComboBox">
+ <property name="name">
+ <cstring>ComboBox10</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout30</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ListBox" row="1" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>ListBox1</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Right click for menu</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="2">
+ <property name="name">
+ <cstring>Layout24</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="Label">
+ <property name="name">
+ <cstring>Label17</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>value</string>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LineEdit2</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout23</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="Label">
+ <property name="name">
+ <cstring>Label16</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Key</string>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LineEdit1</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="ExecButton" row="0" column="1">
+ <property name="name">
+ <cstring>ExecButton28</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>ListBox1.insertItem(LineEdit1.text+"\t"+LineEdit2.text, -1)</string>
+ </stringlist>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="0">
+ <property name="name">
+ <cstring>Layout31</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="StatusBar">
+ <property name="name">
+ <cstring>StatusBar5</cstring>
+ </property>
+ </widget>
+ <widget class="AboutDialog">
+ <property name="name">
+ <cstring>AboutDialog1</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>ScriptObject36</cstring>
+ </property>
+ <property name="pixmap">
+ <pixmap>image2</pixmap>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>array_clear("_a")
+array_clear("_b")
+c = ListBox1.count-1
+ComboBox10.clear
+for i = 0 to c do
+ array_indexedFromString("x", ListBox1.item(i))
+ if str_length(_a[x[0]]) &gt; 0 then
+ message_error(x[0]+" is a duplicate key. Value \""+x[1]+"\" will not be inserted.")
+ else
+ _a[x[0]] = x[1]
+ _b[i] = x[0]
+ ComboBox10.insertItem(_a[_b[i]], i)
+ endif
+end</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>ScriptObject35</cstring>
+ </property>
+ <property name="pixmap">
+ <pixmap>image3</pixmap>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>i = Self.Item(0)
+StatusBar5.insertItem("index: "+i, 0)
+StatusBar5.insertItem("key: "+_b[i], 1)
+StatusBar5.insertItem("value from key: "+_a[_b[i]], 2)
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="PopupMenu">
+ <property name="name">
+ <cstring>PopupMenu1</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>m = Self.Item(0)
+if m == 1 then //new list
+ ScriptObject36.execute
+elseif m == 2 then // remove
+ ListBox1.removeItem(ListBox1.currentItem)
+elseif m == 3 then // move up
+ i = str_toint(ListBox1.currentItem)
+ val = ListBox1.item(i)
+ ListBox1.removeItem(i)
+ ListBox1.insertItem(val, i-1)
+elseif m == 4 then //move down
+ i = str_toint(ListBox1.currentItem)
+ val = ListBox1.item(i)
+ ListBox1.removeItem(i)
+ ListBox1.insertItem(val, i+1)
+elseif m == 6 then //remove both
+ ListBox1.removeItem(ListBox1.currentItem)
+ i = ListBox1.currentItem
+ ComboBox10.removeItem(i)
+ array_indexedRemoveElements("_b", i)
+elseif m == 7 then //insert in postion
+ i = ListBox1.currentItem
+ array_indexedFromString("x", ListBox1.selection)
+ if str_length(_a[x[0]]) &gt; 0 then
+ message_error(x[0]+" is a duplicate key. Value \""+x[1]+"\" will not be inserted.")
+ else
+ ComboBox10.insertItem(x[1], i)
+ _a[x[0]] = x[1]
+ array_indexedInsertElements("_b", i, x[0])
+ endif
+elseif m == 9 then //help
+ message_info("Look in the dialog initialization first. Middle click in design mode. Make sure you click on an item when doing specific things in the menu. You can recreate the arrays or add or remove from them using the menus. Look at the menu widget and the script with the check on it to see how it's done.\nThe values you see in the StatusBar are generated from arrays and never access the ComboBox. All information is generated from arrays and the ComboBox index.\nDon't forget to try adding items with duplicate keys and duplicate values and see what happens.")
+elseif m == 10 then //help about
+ AboutDialog1.execute
+else
+ message_error("Unrecognized menu action "+m)
+endif</string>
+ </stringlist>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="6350">789ca598d94f1fc911c7dff7af40db6faba877a667baa747511e8c01e3030c06cc11e5a1aa7a86cbdc603051fef734f5ad9fed5d2952a4f521fba3beeaae1a7eff6de9606b63e9b7df7fb9bba7fb53599213ba5dfaad3c5c5c7cfbe7bffef1ef5f7e0d61a9fee9425e0abffeed975fb7ef976469f3ea727a013f56708dfe7a61597069b372068729f6cabbe0dcc8acbc622c4599c1a10dad72f1ca5d1370bfc77d5dcb01e70770176252de51eebb1c21df96720c6d87f51edcd3202fec5e29a7c01dee3b541e43dfa9b2ee4699dbd88e2a0f2997861a5d97040ed441dfa83c776d8ff5a3176e9b466cff6be5b6ded7aabe07ca5d37f6f4c2f400ee1bc84f1f95fb2859d7654f39a6766495c729a7b66d3a5dc77d431fa2ca2b9f9573ecb2ae975999dafa80ae5f1a0f0df6ef83fb79507bf927701e65d0f39372b507cef3837102fb2be3a1d1fd1efb4b65f87f193c3454f4fcaaf294a3e8ba6b5e3834ed88f3a528b72d352a0fef1b33e4f5df9443655d776aefd02d582e94fb568c3be3b9813ddf2a577b6695df6d1bf3a8f662514eed64fa7c521e6a38ea79867c39b48dfa9f8e95c705fb1f0c79d55f8142d7a8feee1a9cbaacfafb013c24d8c7df29f398912fee8db2c431e17d562ea137ff41be52eda9f2ca15784c05f10e7da7ba5fe5e3afc6b1d1789333f0200cff6e2acf21415f4fc643837cd5f8ace99971de6bfe756d65bc770aee52d0f8e77be550d7555efe0c4e09f1e95ae52e8c382fe7e0ae4680aeef832345e4eb2a788cd08f351fbb18b8d1fc70deb858bee1be983bc67b9aef55ba453c6d1b4b8b7a73094e7d823d37c15944f575b7ca43985ae4f7163813d6f98b71417c7bd82b6766c8ff9d8bbe479a9fdd1826e8ef173c9bfc199c02e4f167e09c08f1fb4e9916e749c0718c6a0f817e9ce70279b5fe75656c0bce6bfdeea6b1401e79569ec750903fa7c65dd1f749fdd7b75d84bd68cf3899bc1d38ce51f7b3c64f1f6a81837f37c0fdd4e9fb45e3b9efbb01f6a457c6638bf7efc07966c4eb9a721c09fef7e0347403de3b048f52501fd51ffdd091f94beb479fc75c50bfb5fef463c7886f5f8ca5457d5a07f78dc973021e479ca76cccd6dfde1897a2f92cd7df19f9f200e66e02639d3a8b57ff15cc11eb1c94b9ea83fc1fc1d4a27ffa4730e709f9a9fda697b117f873dd7886bd44fb5b5f16e759e3a79faa01105ff7604eb8af683cf573df427fd27c8c4ddfc05ea2fe8b6dead0cfbcde17bb61863fc4836998d05fb53ebdb4e309f5f69371467cb1d6c318fb8c7940b41fc594ad3e8bda230ebdc59fc3f9816982fce7606967f85bf329e6aa2fcedf1a0f93dadbad19cf13f255e3258e6326f81ffa513fb6e89fc7600a45f38b5be3cee23119cf13ea9dc67be47a5edff747e034637e21cdafda0c09eb0c798426d88b36c1dc9a7c9067ea6dde7207e03a5ea01fdc1bd714d3f31a4f351bfb80fe7e011ed3a8f672cf606a102facf1949a7ec67d740fe61efef26aff3a8d7419f553e33d853a70a1bf6b7ca5eaff84fa7c09e63a10eafe689c2dbe351f534fc4e87f9b6066cb8ff7c613e291d4be29d6fc80fe97c684fda4fd28a52a0fe6870b70951ff1a5f99e061a11ffe2c0dfe5db302e33fa81ceaf29c7087bf30c1e53863c03b8ca83fa087dc6d8e37dbf0c669970df0765926646bdd478484c05eb0c7b72f537e261c738435fdf8317e77d671c26d85ffb7d7a891f5d27e823d59ee8075a8f53a9fae2fd2be31efa5334a609fd17f217e9cc7eda4fd2944a07be06d7fbd0efcf8c05e7a9372e789fb51ea5991bab072acfd04446fcc83b6369e1ff67e3a9457e9d825313109f5bc66d40fdd1fe31b4291beb7b43a8e7f57eeac0d2c05e148c5bc48fcbc619f6259d67872ece013c82ebf8827ab307ce92d45fa4fd63e853ead01fb51e0fb1be8f7e7108ce39a1be607fa49170ff07f0c29feec27898314f6bbd1952b4fc746aef614813be47dc399832a17edc81a5b7fcb9361e511f59fd33e4dabe21df93710c88e7b7e0fa3ee4d37a338ca9833dbc185bbde1c9389abd9e8d5340fdb835ce01f322de1f47ca8807cdf781d380fa4f2b0b0e88cf2fe03aeec1deb65fac5f11e247aaffd01fb4df0ea59e473eed826b3d417d867da6349a7c37c6847ac94fc605eb04f9a76a3fdc8ff89917e769d7d8ced3155826f88f35bf7293d8d64f8ca780786fc143d3a17e1b2fdea31b63863f44e325b7f53eb59fc77dede2bc4ce04c09f6d57a9043ae21a8f2ec81ab3de0ff75b0c80c7be1fe2e31fce1ee8d05f9e4eec0436bf1cee05a2f50ff347e725fc73bc4db7be301f2b947b044f467a7f37dfd9a317b91379e218f837e491af45fa7f3681eaaff11af3a0fe43c04c4179f82c5fa0d69bdafd3fae23eed8f99eb38827eb40c9638213ebf804b67fb35de6b3a0c01f543f3af0e2f09f586b51ee56960e4a3877c53e94d9fcbef8cefd7c138ce9897609f3a3d05f8e7192cd6df58e51fdb41ccde6b6059f40fad7f6390d1ea19f6f7b9ef313fbc06978cf748eb6ffd5a0ce66f9d6fea746cf313a93feab8dbf69837b57fd66c8df6f31331ce3df245fd33723d8ff96ad378b07eba62cc33ea95c6d72839a19ed2b231c11f74042ec9eedb3266c8ef57bf33ecadf5b54ebb56df48e38b9a2c3de637adb7d48e8dfdfca50117abaf7edf58709f68fda0900bf4753be0ba8efea7f580fa3ce1e73f746e3cf78897042ec5f455fd292e5834fe285579b05ffb130d63077fc9a371847d49e7833abd14bcef3e1acf33fa81e63351b507f24feb35f1d4d8bafabf7eac36789f35bfa88cf58341d7b57ed15426bb7f024f2dce93f6a33add2e58e781fa315d2750dd1fc153b0f7745eaa5f3b61c63ca1f5f4659a34d678abd3d382757eaa5f1fc6dbf7ffffefbfb6df3b4ffa2f7bf1c54ff57fb33ffe5ffbfdb13ff1a7fecc9ffb2ffec25ffa2b7fed6ffcadbff3f7fec17ff58ffee90ffbbff967ffca2ffbd77ec5affa35ffc6affbb7fe9d7fef3ff80dbfe93ffaadc57ebfed3ff91dbfebf7fc67bfef0ffca13ff28d6f7df09def7df4c90f3efb11fb9d77ce916327aeb8c9cdeed89db85377e6cedd1777e12edd95bb76377e5cc8ef6edd9dbb770feeab7b744fee5bfdfbec5eb965f7daadb855b7e6deb875f7f6677ddd3bf7de7d701b6eb3defed16db96df7c9edb85db7e73ebb7d77e00eddd18ffdae71ad0bae73bd8b2eb9c1e55a1e3cd5982426a15207cb998e7feca7133aa5333aa72f7441977445d77443b77447f7f4405fe9919ee81b3dd3abeffb97e935add02aadd11b5aa7b7f48eded307daa04dfa485bb44d9f68877669effbfecfb44f07744847d4504b813aea2952a297196964cf8e8999e587beb5384d3cf3319ff0299ff1397fe10bbee42bbee61bbee53bbee7871ff2f3577ee427fec6cffc8a97f935aff02aaff11b5ee7b7fc8edff307dee0cd9ff67fe42ddee64fbcc3bbbcc79f799f0ff8908fea44d372e08e7bae9f873fdb9f07ae9fbfe2c509098b4891496639961339953339972f72f1f37eb9942bb9961bb9953bb99707f92a8ff224dfe4595ed513cbf2fa8ff12c2bb22a6bf246d6e52d277927efe5836cc8a67c942dd9964fb2f3a7fdbbb2279f655f0ee4508ea491568274527bb8241924cbf8e77cf1a31f8b2faed40c2b5c84e652eaffa632ffa5fcfdcfdf7ff92f64b3cec5</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="417">789c65cecf4a03311006f0fb3e45d8dc1649773766db223e82d2a3201ef26fb25b680b5a0f22be7bf3cd547b7008617e99907cab4ebdec9e54b76a3ecefebc441567ffaebaf479387cbdbe3d7e37ed30aaeb6aef9ad6a8a89e4fc78c7eaebdeeb94062a6c1093338f6d60a0b6827779d26d05b226160baca09f4609888ec3da8c154a79b00ee41eac9650746e640eb6cc18539d2364b6063b40fc1ebdab0a34f5c3e8ac19c71c0d6981161d71ce566cf496f0ee232731571bd5f84721fef15a6bcc7ff95f2f79f597ef3eccdbfbc3f0fcd05558f6aff</data>
+ </image>
+ <image name="image2">
+ <data format="XPM.GZ" length="2573">789ccdd4c94e1b411006e03b4f61513714fd999e7d14e510b22f10d60412e5d0b3b1180301033651de3dedeebfc8c2964ba4a8b1e5cf2e66aaaa6bfae1c2606b6569b0f070ee746cc77bcda0d9b5278385f66c349a7efef2f8dbdc7c1c0fdc5fe5dee71fcccdaf8e07cd60f9e8b09b41260e1245591d45de2774435fd02d7d189cc7f4573aa58774498fe88abea4f57a3b7447ef071711ddd0397d4e17c1c868cdbfa6993f22baa73f0597bc3eb669436fd25a9fa513febe4c67f412cdfcf09ed6fcded0ec073668f603af69cbfb1dd3ac078bb4d6f39466fff08466ffc0fd2cb5de57c195d6c7fdad581fb87f95d6774a733f71446bbd9c874aebe37e555a0ff7bf623dd8a3b51ece43a5f5709e2aada7a335ff36d8ea7ef5b4d693d37aff2ab8d6f99bd23a7facafd67c4c70a3f37646ebf54b9af5ca98d6ebefd23acfec57cbff17d6d3eafc1ed0badf42b35e61bf3aee87b0de8efd17f6a3d3e713b4ee7f11dceb3ca6dec6cd9bf10ecf93b9eadf5670d3f3f715efd8cd8f3f2c109ecfc4eabc7c086e8b28f18ebd5377bfd4fb9977e6e625f34e82bb9cfe18dc7774e85f6e75be427f4b371fa577e89775f7b7deebde75d545b577e85f6775de566736a6494da8c73fbf26b13a6f2fbd539b9890af7fde4c612b53784f694bfbf3c49456e7f15d709b9890dfdaccae5d651cfcdcbb6a8ab8f27eeb5df7451cf2f5e757dcd579eccf5ff8f330c9db2cc9bdfdfca55153a7e17e2f66cea2de645138bcff7efd3ff1105884fa1bb4f7c476e8b1e3d66e383fdcdabf35761f431cb888110e433e38c2b17b7dbd21f604a718e30ce7eef70bcd1f134c71892758fc2d76114ff10ccff1022f5dc4ab9ff5e235dee02ddeb9f725c62ee33d56b08a35f7fd3a36feec0f36f1011fb1856d7c42e45e1b3088dd3709526c5eef2732e428dc2adda74d54829944c44a7d53ffa5915a5abf3ae9c32718f75d73db7ec98eeccadecfe5eeb12337f4f82a7e885e0e7461284319dd350f72e8723ae23a76ba61377e9f1f39915319cb999cbb4f17f7cf9b4c5c165397f54426b74fd2aff172e9d61db1d7e2efbcf29ff17fb7fe79fcf747733f00356088d2</data>
+ </image>
+ <image name="image3">
+ <data format="XPM.GZ" length="4142">789c8597595315c912c7dffd1484f9664ce49cdebbe3c67d90d50de4282078631eb2360105140e224ecc77bfd9ffac3e23e08c9d3cf08bccaacacaade0f7272b87bbdb2b4f7e7f74b590c5895ff1c772b9f2245c9f9dddfeef8ffffef9e87159aee84f31cc56cac7bf3d7a3c5facf8959d8bf338021d29d00cdfc8720b2e542ae8e7e072949199c0d528b0b7f5f528b06f963c80df2c5960df82db51a0df5d72009bbe53817ff21ddcab789cbfbb64d8cb97890bf3ff39d88d023e9db8e8c1761f3f0af6337d9885ac7fb664f3ff1b38cd5281fdf8e3c863788a068cf38ab2284bdc9f6fc05dd195f08fdf83fba237a643b0145261bda66a6457b8cae27101f685373df7e054a4cae2e7976cf9c3fee54c39813f1897b30afe12ee53d6655d233eb4056ecbb6b6fd709f3294a1b1fb07702c63637ae4b34c65aa3a30d657755537603e59b2d9235ed5500d2de227f0af72a3c0fe353856b1b3780958bd6f0ad87723a39c2c9f88575da8d87dea893b9c4fd84f8faf3acb37eaa36e55101ffe3a716ffb6f82877a68917f7a3b718ffa263b5f6ae92d3f1b6057bbd6f6433c9ba22907ab77d46753a958bdae83eba636ffe43358bfdef27533f160fdf3142c8d74761efaa5892ac8a7e0be4d6a526bf1fb34f2d82e1de2cdc7130f60c27e6dd55683e5730dac5f6f8c7cb55ddb89c5e30aacd912e819f96ba595def27b94d90bfc6107f6adefadff5e80938addbf1ab92b552c5fefc04dd73a8bef0cdc769d43fc6415dc77bdf9cfd7e0a0ed6ef306f5dca5be70163ff4dbd8eecef6dfcc5c9a9ee18fb65b61f1a5f3cc95b77a2ac1ad0af22ff0a71f3f8b1ff2d50f8a56cf2eb338bb3feaa3973e7acb47028761e6adde8b9187b1012cff37137bebe79dcc7d0013d68fe517900f467f0f8d9627e6016f6576c1f281fed474f5dee657cc3c78ab17d4c7d0a91efef0197818c4f623cccbc10dc1ecf925d80f31fb8f7ce9782a9cd5e302ac05ea2dfea837e9a4cbe7215fa201c91c330fc1ea1bfd278332e2cfb69fb859447e05fd2b4e9cb3fbdd660ec1f2bb074eae3066e453c7651badff185cba2aa07e69277313ec7ec887b66f637a467fb9c649b4f30670ab62f3683e71de0ffeb84ec5e287fa7683f3d1e629ea57dd8fd1f4b8af8bbe8ce6ff49e6ca58e01f9e1ff307f5e86bef12e2c598ffbed176b3fd31ffb5ddba68f582f7d7773e26f317f3c76bf633a39fbd8459e6c3cc45b2fbbe023b65f82b0760fdecbeb20d8e3e06eb4fd447a84701635e86364cf139cb1c92bd77e89fd0697959fda13f431f62b2fe427f8641ed6d7e6f649ef4974bb6fa36767196f5a8afe063952cbfa8e71062992cdeeb99277d9bb936967d700c395f729139457b3f0f8c6391ec7ea799a7f5889f5e3659fdd295b18e6b5b8f791b674bbecedc6646fdc762c9a8cff1b9b5f3783b7367f124f4b33e977db6c7f9b18e4366e4479f0bc9fea13f63abebad5eb633673de1bd8d5d7499f1fe471d67395ec86f1c3420a647bca2c498f5785fd47a966cdea33fe318408b4769ac7ab3af3217793fcc2fdd2db3983f49d9eeeb3397d91ef35777cb2ce877a5291f94798a37fa59b539be8cbf5f54db65c67baada1c4f46fda936b3a4cc39be82f747b59919f35129c793f17e24af62f5bfba64d3ef67cef114f44b4201417fb064b3dfcb3cc51bf5a49459ce33a7ac47bda734f17c3109130b3bf61c3872e20f7ccc277cfab77ebef8d19e3ff2273ee373bee0cffc852ff98a177ccd5ff9e61fecbff12d7fe7a7bcca6bbcaeb2c61bbcc95bfc8c9f3fb4e717fc925fa9c5fa1d59e36ddee1d7bcfbc07ece6ff82deff1fe1d39e0777cc847fcfeae3dcfb8e0922bddbfbe270db7dc71cfc35d7b62221272e4ef49a048893e3cb03fa6133ad5151fefc9273aa373bab86b3f5fd067fa429774450b95eb2ce36fa7f4956ee81bdddeb3ff4e4f69552dd674cd29adab9cea6fd7b4419bb4c5f430fef48c9ed30b7a49af7e906ddaa1d7b44bf39fd8bfa1b7b447fb1ad5a5d001bda3433afa597e75c57b9a51a11129b378aaa8a6e6e7f5a0f62d75d4d3200cd1375e5f71fff7eef7ede70b09a26349b3a6221fe4584ee4f45fed3fca273993f351785d2ee4b37cf9a77a86fda55cc94273772cd7f2556ee49bdcfeabfd77792aabb226ebb2219bb225cf7ef4e627f6cfe585bc9457b22d3bf25a76e9e817f67379236f654ff6e540dec9e12fed8fe4bdccf46fb1522afd87a4f9953d56b4baa693f968fbc0feafff3cfa3f5814f320</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>ListBox1</sender>
+ <signal>contextMenuRequested(int,int)</signal>
+ <receiver>PopupMenu1</receiver>
+ <slot>popup(int,int)</slot>
+ </connection>
+ <connection>
+ <sender>ComboBox10</sender>
+ <signal>activated(int)</signal>
+ <receiver>ScriptObject35</receiver>
+ <slot>execute(int)</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>LineEdit1</tabstop>
+ <tabstop>LineEdit2</tabstop>
+ <tabstop>ExecButton28</tabstop>
+ <tabstop>ComboBox10</tabstop>
+ <tabstop>ListBox1</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/current/kpartmwframe.kmdr b/kommander/examples/current/kpartmwframe.kmdr
new file mode 100755
index 00000000..134f28af
--- /dev/null
+++ b/kommander/examples/current/kpartmwframe.kmdr
@@ -0,0 +1,618 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KKPdemo</class>
+<widget class="QMainWindow">
+ <property name="name">
+ <cstring>KKPdemo</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>480</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Kommander KPart Demo - Kommander</string>
+ </property>
+ <property name="icon">
+ <pixmap>image0</pixmap>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>4</number>
+ </property>
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <widget class="GroupBox" row="0" column="0">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="KPartImport" row="0" column="0">
+ <property name="name">
+ <cstring>KPartImport1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>ScriptFileOpen</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+debug("opening")
+url = _KDDIR+"/kpartpart.kmdr"
+KPartImport1.openURL(url)
+_loadup = 2
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>ScriptObject12</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+if widgetExists("ScriptObject13") then
+ TextBrowser1.setText("This text was written by a script on the parent frame window. It could have been a dialog, but we chose to illustrate with a MainWindow for this demo.")
+ ScriptObject13.execute
+else
+ message_error("You do not have the KPart child dialog loaded")
+endif</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="AboutDialog">
+ <property name="name">
+ <cstring>AboutDialog2</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>ScriptInitialize</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+KPartImport1.loadPart("libkommander_part", "true")
+debug("loaded")
+AboutDialog2.initialize("Kommander KPart Demo", "kommander.png", "0.1", "Copyright 2008")
+AboutDialog2.setLicense("GPL_V2")
+AboutDialog2.addAuthor("Eric Laffoon", "Project Lead", "eric@kdewebdev.org", "http://kommander.kdewebdev.org")
+AboutDialog2.setDescription("This is a demo of what can be done with kommander 1.3\nYou are running "+_VERSION+" now. This is not intended to\nbe of use for any specific tasks. We hope you enjoy it.")
+
+Timer2.execute
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>ScriptHelpAbout</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+AboutDialog2.execute
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="Timer">
+ <property name="name">
+ <cstring>Timer2</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!kommander
+if widgetExists("kpmessage") then
+ if !str_isEmpty(kpmessage.text) then
+ kpmessage.clear
+ ScriptObject19.execute
+ endif
+endif
+if _loadup &gt; 0 then
+ _loadup = _loadup - 1
+ if _loadup == 0 then
+ ScriptObject93.execute
+ endif
+endif</string>
+ </stringlist>
+ </property>
+ <property name="interval">
+ <number>100</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+</widget>
+<menubar>
+ <property name="name">
+ <cstring>MenuBar</cstring>
+ </property>
+ <item text="&amp;Functions" name="fileMenu">
+ <action name="fileOpenAction"/>
+ <action name="Action"/>
+ </item>
+ <item text="&amp;Help" name="helpMenu">
+ <action name="helpContentsAction"/>
+ <action name="helpIndexAction"/>
+ <separator/>
+ <action name="helpAboutAction"/>
+ </item>
+</menubar>
+<toolbars>
+ <toolbar dock="2">
+ <property name="name">
+ <cstring>toolBar</cstring>
+ </property>
+ <property name="label">
+ <string>Tools</string>
+ </property>
+ <action name="fileOpenAction"/>
+ <action name="Action"/>
+ <separator/>
+ <action name="helpAboutAction"/>
+ </toolbar>
+</toolbars>
+<actions>
+ <action>
+ <property name="name">
+ <cstring>fileNewAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image1</iconset>
+ </property>
+ <property name="text">
+ <string>New</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;New</string>
+ </property>
+ <property name="accel">
+ <number>272629838</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>fileOpenAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image2</iconset>
+ </property>
+ <property name="text">
+ <string>Open</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Open...</string>
+ </property>
+ <property name="accel">
+ <number>272629839</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>fileSaveAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image3</iconset>
+ </property>
+ <property name="text">
+ <string>Save</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Save</string>
+ </property>
+ <property name="accel">
+ <number>272629843</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>fileSaveAsAction</cstring>
+ </property>
+ <property name="text">
+ <string>Save As</string>
+ </property>
+ <property name="menuText">
+ <string>Save &amp;As...</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>filePrintAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image4</iconset>
+ </property>
+ <property name="text">
+ <string>Print</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Print...</string>
+ </property>
+ <property name="accel">
+ <number>272629840</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>fileExitAction</cstring>
+ </property>
+ <property name="text">
+ <string>Exit</string>
+ </property>
+ <property name="menuText">
+ <string>E&amp;xit</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editUndoAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image5</iconset>
+ </property>
+ <property name="text">
+ <string>Undo</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Undo</string>
+ </property>
+ <property name="accel">
+ <number>272629850</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editRedoAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image6</iconset>
+ </property>
+ <property name="text">
+ <string>Redo</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Redo</string>
+ </property>
+ <property name="accel">
+ <number>272629849</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editCutAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image7</iconset>
+ </property>
+ <property name="text">
+ <string>Cut</string>
+ </property>
+ <property name="menuText">
+ <string>Cu&amp;t</string>
+ </property>
+ <property name="accel">
+ <number>272629848</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editCopyAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image8</iconset>
+ </property>
+ <property name="text">
+ <string>Copy</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Copy</string>
+ </property>
+ <property name="accel">
+ <number>272629827</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editPasteAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image9</iconset>
+ </property>
+ <property name="text">
+ <string>Paste</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Paste</string>
+ </property>
+ <property name="accel">
+ <number>272629846</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editFindAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image10</iconset>
+ </property>
+ <property name="text">
+ <string>Find</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Find...</string>
+ </property>
+ <property name="accel">
+ <number>272629830</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>helpContentsAction</cstring>
+ </property>
+ <property name="text">
+ <string>Contents</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Contents...</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>helpIndexAction</cstring>
+ </property>
+ <property name="text">
+ <string>Index</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Index...</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>helpAboutAction</cstring>
+ </property>
+ <property name="text">
+ <string>About</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;About</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>menuTest_MenuAction</cstring>
+ </property>
+ <property name="text">
+ <string>Test Menu</string>
+ </property>
+ <property name="menuText">
+ <string>Test Menu</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>formatBold</cstring>
+ </property>
+ <property name="toggleAction">
+ <bool>true</bool>
+ </property>
+ <property name="iconSet">
+ <iconset>image11</iconset>
+ </property>
+ <property name="text">
+ <string>bold</string>
+ </property>
+ <property name="menuText">
+ <string>Bold</string>
+ </property>
+ <property name="accel">
+ <number>272629826</number>
+ </property>
+ </action>
+ <actiongroup>
+ <property name="name">
+ <cstring>format</cstring>
+ </property>
+ <property name="text">
+ <string>ActionGroup</string>
+ </property>
+ <property name="menuText">
+ <string>Format</string>
+ </property>
+ <property name="usesDropDown">
+ <bool>false</bool>
+ </property>
+ </actiongroup>
+ <action>
+ <property name="name">
+ <cstring>formatItalic</cstring>
+ </property>
+ <property name="toggleAction">
+ <bool>true</bool>
+ </property>
+ <property name="iconSet">
+ <iconset>image12</iconset>
+ </property>
+ <property name="text">
+ <string>Italic</string>
+ </property>
+ <property name="accel">
+ <number>272629833</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>setFont</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image13</iconset>
+ </property>
+ <property name="text">
+ <string>Font</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>setColor</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image14</iconset>
+ </property>
+ <property name="text">
+ <string>Set Color</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>Action</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image0</iconset>
+ </property>
+ <property name="text">
+ <string>Talk to KPart</string>
+ </property>
+ </action>
+</actions>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="4638">789c8597c9721c390e86ef7e0a8571734ca033997b4ccc418bb5d9da7775cc01cc646adf4b52491df3eec3c28fca6a77cb6da52e5f1020b193f5db97b9e3ed8db92fbf7d7a1ac9e8a29d6bcfe571ee4bf77c73f3f6fb7ffff3c7a7cfcecde97f3ae73effebd3e79dd15c3bb779771b26201c81aa36897fca17cadd94299d709d0d9c28e783fca6719de4ca63e32629949d7211d7f570393116ac13f4fdb0df37e5d62569afeb90efa27cab7caa1c06f9ab09372e6dccbe37e599bddf95f3a9be57ff9a2295a453fd75b0eb9db217e532eed7e8faedc05ef7db50ae86fd71fe103f7a559ed9abf168fac1de63b06b8dd55e495d484b9557ff25abeba6d2f53be5dc49aaf25c2917c37917c6769eb4ca655a25aa4f97caf5549e8f9467f69e83ebd0a83eab7d32e45faec1599962ff5770d117881f29872c4654f5cb096b3aa1df293b57229e5c28674969f6687efcac9e0e958bb22bb1aef1f6e560ff81f2107fff06ce7bf3e7055ca715e2bfa55c6755aaf5eedfc1c5d47fd8d3a44592e9f9b0a7c92ba7f5e9e7c15379867d329cffa8ec0b67eb0bca437cfd185c64761eceef32877cfb4b70919bfea2f2502ffe015c14b6aef5d10ef1a512ec1cfa8b6b65e76245e8fab57148b49fbc071795e93f83e387f533e5aca8edbc91f2506f92810b316e94cb2933f69be5e70a5c16361f7694ebc2eadfbf82cba93d3a2fda187fab278d7feba7f54207e0d4e229cbca6d61f967f83b9b5f8760975a7ee14f5f4ef37533e16e16cf5e398d1fcecf06d6fe17cd57e74acb97a8bfb13d5ac497351e5d5e6419fa4fe3d915bef3ca1c94877a966d70d139ed0f7f0e2ef30cf373175cd5d63fb06fd6cf4fca4d6af1e37570d65a7d41bea92ba7ccb9b254798efe5855eed21cf921d8dfd54589790d7be20675aafa27c6dee605ec8b7f01f9d57eeb4299a07fe4d438731a3fcfc675867c7c0557a1803cfc09b594887f0aee42d075d6fba2ebcb50407f051c6f0c6576e0b669d10f3a9fc2905faff321a48dd58fbf57764d9e627f9d5761369fc4781adf2bb0337d5e020ff1d07c8749bbabbf8cf38a98508dbfe83c0b65e5501ffe092c550a7f0ec06d2d1a4f4ec0f1c3fedabfa19ae69bd6c0b9e59b6c3d362c18f657755e227f2be0f8613fbd2f429d76e6cf2d38ee87fa40fceaaa2d905ff8132fec0afb6b3e43536539ecdd57962ac950afdaefc1b79587bed65fe8a475b067191cba5e99f4fe09a14c13cceb67b04cef4b9d07a1af1287fad0fee9933617f029387e1a4fd2fbae4fcb26457d6bfff7aef40efdb807f6bda05eb41efb2c7ef04fe3d3e75585fea475e3c6217e5be0787eadeb9acfbe283dee1beac0759a613d18d716af55705b89dea7a4f77b5fc6f2833de7e0a629555fb41ffaaa2ae1bf2c18fb4ce3e7c9b8437dc90db8ce72e4f715ecfb46cfe331b86d04efc13570884f00b547eba5afe37cc5f9b0bf2e2545be1e8d5bc457eec1d13ef4b337aef1be927770ed100f3696aa827e0dee5c8dfb4beba56fe2fec8ef1b38c60bfafa3eeac58706bc3630f2a5f5d84f1e1098c7b5718b7ee30b702ba81f3f32f6781ff2bd718bf830fcf55d6af3fcc138f3b017dcd65d0e7b2ec1b1e0e11ff2dd86e0f1bed5faefe37cb4f7b1ceebbe2f3dea9ff68cbb14ebd8bfaf0aabafcc5830df69d73820de847aeeeb04f52189719ae97e343f30fa65c1b8407e448ccb0cfeed0c8cf970632c39ea61dbb8cd517f8be026c9918f19a37e1f8db302f5766bdc16f06fc9b803cb8c113fe4bf17a9506f6703231ec85fefe3134ff38b7eee3bc9f0de37fdaec57bd65f8383d9e3cdbf50e33ef2b753c6febe33f615ecb37c8578432a17c6a1d1787bf44fdf27d66fa5712ab81ff68d738fdf1f9571d5e2fd7d34e5a0feec8c7ef531b1b0e796bb5fcb73e09ecff89c2ff892af7e25cfd77cc3b77cc7f7fcc08ffcf4cff23ce2677ee1571ef35bd478e7f97f92e7055ee425fecacbbcc2abbcc6ebfcede7f2fc9d377893b7789b777897f7789f0ff8f0aff27c347cc77cc2a79c70ca8e33ceb9e07267f4a33c575c73434c44429e5aea28504f67744e17743991f8b33c5dd135ddd02dddd13d3dd0233dd1286a3cd30bbdd2183233797aa3779aa7055aa425fa4acbb442abb446ebf48dbed3c674cfa93c6dd2166dd38e6aecd21eedd3011dd2111dd3099dce2c863c25c39792a38c722aa8a48a6a6a28fd733c7ef45758280e412fad7412a4973339978b9fc9cba55cc9b5dcc8addcc9bd3cc823ddc993f0c7f232926779915719cb9bbccbbc2cc8a22cc9d78fe56559566455d6645dbec977d9904dd99ac44ab63f92971dd9953dd99703399423399693e8c9a924928afb503e935c8af8bcdc9778874823da1e3efea6fb517a2aef7dbc0cba89868f33db9f4d22e5cffdc55fa521ef2ffd95bff637fed6dff97bff60911dff5ddae41ffd931ff967ffe25ffdd88f4dfe0369937ff3effacdfbf99ff5ce20ffbf7f7ffa3f863e6316</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="3278">789cbdd6494f5c391007f03b9fa295ba45a3cadbfd9e4673604980b043584773f01a206c810602d17cf771d7bf9a0cd124e13432979f5cf6b3cb65376f5e8f0e36d746afdfccdc8cedf8c48ffcb1bd1ebd0eb7e7e70f7ffef5c7d799575535ca7f65dd8daa57bfcdbcda1a8ffc68fdf2224e6073fc88fa34b4439a9817d5de19f1dac443310498b6c45ded8b42c607b119ca3e48fcdcc4b69834f10771d9bb7e103f885b5779317d14f7a66aacf49378b0c175d2bf29765d6ab01e2b8e6ef088df9dd85526b55efc45ec7d994af1c9c4bef1436864be0db1317dedc4857830aec6fade89f30409f9b85187d48bdf8a7d36fa17c4d1c724f9e455710a85f65f4c1c8a5027d90faf884b5b0eadf81e0e0dfae95a5c995863bf3b701e2ff9a5b1b8ee8a02fb3d86f3787cffbdb8b5ce62bdcb7068b11e92fd04d317b514036fc0ae73d8ff91b8b75d8ff555ea7c24e24d380cbabf73b10b4ebf2fe7194288fa3d39cf1073fea51ea89f38164351cbfa6819f6958365fdb11c4c27e747b5b8f246d7f7198e35be47f2fd580f7d8bf84fb08b16ebbb83a3d1fc1f881bdbb638ff33b533c8c7351c355fdc88dbc1d4c837e2dbd8697f129b3c3fdcaa6d927c5127ee43e3918f523c58d322fe168e9a3f5a12bb5846d4c3a95aeb918ed511f35b7cdf871ef781e4bec5e02b8bfd5cc1715aaf7beaa4f526f725465736c807c351cf8fd7c529f880f3477e53eec67ab0fe942a5d8f9c772a5cddca7de30e4ed3fb10c5f976aa8dbad2f9e4fea5caf6b8efd6c2ceb658af51bb16f5b0a54e384f9e8573433e4f9e8cef0dea5a2df9ce52d3a2bac57ed8a93bb5bc17a9f1752bf7d1623f4d6c02ee5b0fe786f9f6c56d8e477d37ea56c7339c338afa1ac3695a7fdbe2cedb4ece932a7568b13fab4ea827ba8793d6271d8a8deff53e79b5d7f7b254a70ef96de150c016fb37b9e17dbf7c32e697fb94fa3c1eef6b7a32f67b07e78678f9bd48f935eef07bb2a71e3a9ce7299cf47d21793f930d16f333c6e7dba5fd3b6aa7f99a17bba949de8be483efd05fc3b132f8fd59513b83fadf550735eac54f66146faba7f711e71fa231924f3a52bb1ee7b5ae0e301faa738aa51ff90da9d4fe47b5de5792df9b94af638f7c2ec0a950afa91bf5fc93f11eacaa3bed9f551bfc1ed3a3bad7fe07f500f3be7afa9ee3fc537203eae9eac9d8ef9c3a0e18efd5fa5e6c8d278de907cda21fed59bc63af2d70e4c41ff9984f9e8ff841bce753fec4677c9ee32ffe3de287f19e2ff98a3fe7f86bbef936e227f19ec77c9be3eff89ebfe4de875fc63ff26c8e9f36e2b95fc47b9ecf2df202bfe577bcf88278cf4bbcccef79855779ed05f1ebbcc19bbcc5dbbcc31f78f7bbf83dde7f161df9800ff9880b2eb9e29a9befe2db9cf38e4d5e43cf03319f119125479e02454af4f1793c1d734f2779d62ec75ed1297da2333aa70bbaa42bfa4cd77443cfe36fe98e2fe93ecfbe94bfd2d1177aa0479aa5b9dce66981ded2bb67f18b39e3f3b9764e65d498966899ded30aadd21aadd3066dd2d67fe6e791b669874fe98e3ed02eedd13e1dd0211d51f1d37ceee75125555453432d7564a8ff55fe69b0cc8f96accdffbb791b5e70beb9d9fc8f461ee55f540fdf46fdeff179473f6d12fff7ef33ff008c9a2542</data>
+ </image>
+ <image name="image2">
+ <data format="XPM.GZ" length="5646">789cad974b6f16cb1186f7fc0a8bdea1a8cf5c7b6614658101db180c36d8d838caa2aa67da177cbfdb47f9ef69bf6fcd07ac721445b079dc35d5d575fffe78b5b4b7b9b1f4ea8f17d73772731497e2a15c2dbd1a6f4f4f1ffff9af7ffcf9e265552d3dffef9ba5eae5df5ebcdcba598a4b9fcecfa66790b7195c51946decc1c7c65d1cc0ef8c87189e393e19abb6cfac8d7124cbdeccb1c0f9a6f1a4f85e1f8d9376e071c111df1fcd4c7b74225785d2be37c65514f077e3dace578c1be5f98f058fb0ffc0b8e5fdb23b734ce013e3a0faccae9a99ef71b571477bdd07e39efaddfacc91e797c6839dcfef890aff3b7b7f352aeef73bc693dd178d532ce18f965c0f11f6c74363b5f82d83cb7c3fec976fe4ba1ee17fd95930fd4ffd75ad23ec512537e5d48005dc343559b6c1a11e47fa93f1ecea92f175a57135c27e7f07eeb3fbf91eda3fb6d558431fec2ff37b8c5f83cba61ae1bff800cee1b57cd902d76d3d2299e33db8a947c63be2beb26f2afa5b604f39b432c2fe780b9626d0dff2446eab89fabf18f7d42f5fc1b1d589f1827fcab199f3e13d39ab03c71bf0d468c4f74afd533bd2ffcaf7a43ab29efc0539948c8743fd5545dbd15ff11a5c3529a2bedc1b72b68ff990c8a1b0783ae392f62af2b56a1a61fec823395466ef15b86d6babf77d72a8a82fa21eab2eeb67fc578ddb11f211f95df56d67f986faaa86d04cd4776a1c46c607efadb23f596f0efda31a83d8f93938e5fb60affbf8cc7511e208fdf10c5ce50464be7c217745023bbca7aec3c4fc9144eebac47e857ca99bec4fea3b25e7f7e03c9e18778c5744ffa84318c88efa4257587e225e751794fef2c8ef7ae86abbffc13824f8cf15c663623e20df6be9f21ff03deab58e5dcbfa52e4733db603fde157c85db07a453e37e522fe1e5c7589fa3dfcdbd46dcf7ea337e42013eb13f5dcb4adb01ef49adc95ac07b74a1e9ac47a590387be613f70fbe421f0dc517fd795563f13b98f89fd70853ccb0beab9e9fb86f60ae2df489726c61ffdbd89c360fad78c235911ef26753ded15c4b72d7a49e8876e035cf689f9a8e8376dd7f713f367200f55e2bc403f6e8759bfc7fc6b3558bff0f0771b876662be63beb569e813583f3f7328ba96f3c9a17f86dc90980f1efe09d5d0f37b8ff7863a8cec170ef9169aa19ef0bda2be422ef789fdec8e3c4cbccfa1de43e807e683f3c6c27c729fc0d9dff48fbf368ed4e7e18f205d13e10fff76c1cccf40cef6303e3d384a48fc1ef323e47cb4feb44c1e0afad75f1927b3dfe473bad13ee47f48c39c4f17c63131dff9fe2425bf77e8a75d2e20b3e73339ebe3fb617fd7483151fff9cca60ff1e8727be5bc748fe441cc3ff067d7f525fba1df30ee6d7e3d908769c2f71ef9928f2beb9f81aca5e553071e32d35f981f9df4b5e5c73d39bf8ff13e206779e6c33be3d6f211fdb81bfb39bfeec8529b7f6fc95a5b7dc09fdd240dfb9fbb350e167fde9f7adb171cfa6b5f667fb2df2b592d5e1ef3a47f5e77589f7be4f9dca19ff68d4cac67877ed6b75a597d9f19ab9da3dff6410b3b47bef659bddd87fed10fc33c0f76c91a98ff82f8f4a293f517ec377dde06acbf22feb9387389421fe231e475c3e6f119597bf60b41ff1e9ab1b2fb317f86104beba794cff1e7bcf27b64992c7fb7c9d91dd487fd60e8b33dec37c8bfdc5eacbf08f5c7c57dc8af2149c379e7900f92b75fe69bc33e2265ecf81eb921cfdf2bfc2f793bb67ab8268f35d9a39f4a2d62f30bf34c72c3b5f98d79216134ff3bcc579138f2be8878884ab4f98dfacb545a7d21ff651a2d9e11f5a18596b6af2c93636ffec4feac794132fb117fadb4e27e2157e4d1ea574f8cc5ecc3fcd0bc0db0de14fbba366afef3bbe4c9e697225fb4d7dede1f8dc5f663479eedf1ebc6769f629fd4a891fdd663feeb180b8bcf26796c6d1e20be3ae5f511fd430af2accfbf379e4c3ffa7f6e6676bfd4c6261f518fb188a5ed07d017cb58725e7ae447ac626ffde00339aba77e728881f9ead7c8a9b4fb902fb15bd883f91efbac8ff1427cf2f8b5f91191cf51f2cf19e4b7c25fd93d6afbf43179d627984f3979e67c5f35b6f73acca3388e15fbb7225ff3f230cf6ff86bccf1e6fc8cceb831ffa3be3315960fa8cf316f77d6ef0663eb0f1ef93fe606ca7ea747e4d93e857fc6611c688f5c92d3bcef503e4f5bd68722dfc638dafc8ade78e4f7fec0d8f633c5fbc79419fddef7e4c9fa8d83bd99e6f8a19f4ef554d35e5f2d98efefc9c9fabfc77c9b9a29d01f1ef53cb593f5435927a7799fe27d61b27d5557164c7f2d2f98f307f53e75b33f14fd77cadd8af678d4eb24397f590f986753de66cc1efc9e999ef39ff141ff9a524e17f2eb05737fe5fb52b2f84a653ce72bfa6f3e2d6c3e5c18cfe7d80f72742bd3bfb560fa0bfb45fae93fd463ceceb91fec1bcfef45bd6532f6a8ff945f6fe7c8c73424db5f15ef4d92e6fa473f4971f6bf473f4d480830ea3ba539fe5b377ffddfff53de3b2f5e7dfc6bf27ef4934ffec01ffe77797f94f51efb1ffec49ffa337ffebbbcbff097feca5ffb1b7febefb2f4bd7ff08ffec9bfcef2cbfe8d7febdffd26bfe257fd9a7fefd7fd07ffd16ff84ffeb3dff45b26ffc57ff5db7ee717f96f26bfebf7fc77bfef0b5ffe225fe51b6adffc22df423ef8cef759b6f84d7e70de39274e5d74a3e3fc4dcff2eec01d9af442de1db963f7c39db85377e6cedd85bb84fc15e4afdd8dbb7577eede3db847f7e45ebb65f7c6bd75efdc8a5b756beebd5b771f20ff11f21bee93fbec36dd96fbe2beba6db7e3beb95db7e7be67e97d57b8d2558ebf8f1bc8b72eb8cef56e102f79ba3fcff3fc033c17a91cc8a11cc9b1fc9013d4cfa95f953339970bb9942bb9961bb9953bb99707799427792dcbf246deca3b59a17f6435cbafc97b59970ff25136e4937c964dd9922ff255b66547bec96e96df93ef26bf2f859452e58da49156f20f0fe96550af4e455523e575d489f29af4400ff5488ff5879ee8a99ee9b95ee8a55ee9b5dee8addee9bd3ee8e31c2f7dd2d7ba4ccfeb1b7dabef744557754ddfebba7ed08fbaa19ff4b36e2ee4b7f4cbcf48e957ddd61dfda6bbbaa7df75ff798fc9bb49adcd423eff345cc817dae54d62883e6222c698c7c0944bfbe067fec4c378148fe38f78124fe3593c8f17f1325ec5eb78136fe35dbc8f0ff1313efd8ff5fbefbfbff80f5aae600a</data>
+ </image>
+ <image name="image3">
+ <data format="XPM.GZ" length="5534">789ca597498f1cb91185effa158de14d3038b92713860fbdab57f5a2a525c387086666effba2560ffcdf1df51e2ba1f25c067695d0c20706c9e08b85acdfdf2f9d1cec2dbdfffddde3933c9dc7a578260f4beffbe7ebeb9ffffcd73ffe78f75b512ccdfeb5ed52f1dbdfdefd76f8b41497f66f6f8619c447039755595df6e0077093b58905dc1ac35e3f83bb4caa0cbc06d62c5625f80adc67435563fefd8cf32ccfc85227ceab00fe082ef2b212d83b709977159c9557709d3715fc910b70c8bb9afb7f024b5172dc71fd98f775053e008f455637b05f4ddcd558dfbdcdb8288ab2ee307e09ae8aa1867fee0cdc146d1d67ec73b014da607fa9c86555534f0f56639cc71f8187626ca08feccfb8cc4a21c71e9c9745037fe31dd83e69fc165c9735c7fd56e2a6a1bfc7e0a6ca1bf81b6fc06dd93638af7f4b1c1af82f3fc855d650ef6b705776697e9c58c18867a9a5a6fd56c855dbf0bcd0abeccb9ef6724eae9a66c438e255598271ff88f12a377f31dfdf272e5ae6cf45e29e1c156c016911af887854f6e1fa0efa577535b6386f3c053755d3e6587f8d5c0f81fb8fe05005ae2f25b92e5b9c2f0e60adb465fe203fab58372df5db030f75d7627f8f7855635d901dd6ab8b260fccb72fe0aa6e03f3ed67e221607d7901d7668ffa70c88fba69aa007ffc3ab86d62c77862ff3a347dd7c21ee7ad63d304c453ce12b701f1707b8925c03fe57a7d53d0dea1be9aa2193be8e176c1656b0588fd907f266748f3912f4dd348477db3c463c7f315e0d056f4d7ed80a50d1dfd6bc0435b76c8373d018f6d9bce9327960efe7be8d366a110eaf9155cccc7dd36b8b471ee8ffc6eab9009ead36f243601b03ffa415bdb7cf40b7f9878a4bdcbc8214f8c7c6943a884f982f8b56af638bffb4e0ead207eba09ee43109c4737120bf7f7f46f08a3305f78be31a830defb89d3b87f265bc3a53dea3f6436ce7edc818b507460b94cdc502ff70d5c8641a8e7077065cc7e867e11ea500be2adb7e42e17ea83f386666eafb46fba92fe6800b7767eea8ff88610a230bfb85fe85a653e217f82ccf57027646b37d0535b701ffa14efa389e1bf1e4e0c7fdc33b91385bdd09fc198fb7d4fac8af878f4b330d397e7799b98fa727dcbe6c48867977583223e02ffbadc98f98bf37685d9b33f2e4f4c7d0ee6acbcafce26a65ec8676bb723d7f7885f577555da7f397150f647c4a3abbb3acd7f224ba98897e2feebac9a527e9ccf39cdff3831e37d3a31fb0bfa6f679f64ff3a31f5dd9998f57448968afb7bae2fd246d60ff7d7b95e6e832c21b27e1e137764453fef6217533eec4f4cbdc789a197fb429656592fdcafeffa741eeadfdbfad04b517fdd60fef0beda9e98fd1dfda71b2d1eac17ae6fd912791fe07d24d99c15fd5e72c9933ec5c4ec77bb13b3dee6e3155971dfc8ec41c1fadd9a33f5f363e232f983fc9172cefa3231efd3cdc46364fde37eb5ddb2887e24e86f524b9df41a12b79cefd6c99ad35ee9af7513eaadfd9c192f7923dbfadcef73e234df23bfa49dafaf7b73e6f904fdc1da41a09efe38b1a4fcb9236b15b93fea5d3a8b27fb31ea5bec43766b64ad23f457c453a2c4541fbb734ef18b13337e9b13f33e3a226b1ba937ea4d7ae969effbc443daff96ac2132dec82f194c1fdeefab89bbc8f72afa898c2a6441bfd66c1e2fd58999ef9f126ba49e88a7e6a637eb656762d6e7c6c4ec973789e7f3517ff6bc2ba9977f4ddcf78c0ffab33d872a9edf2f27ae933fc78907da3bf477b5eceae90fe2a38d363cbf3c4fcc786e4fcc7a9089a9c7fac4cc574d9ce2e1f17b41ed0226bb4bb2fd0060bda35e35d838eb03fdd6d42f7ae60f594c7ff6db2b72b4272cec911f6a1ffaa36ece3c9fac4d4c7b491cb99f5b21c78ae3caf8461be77df23431cf7b3a31e3b33567eaaba867ed2d3efc7d84fea4a3e9cd7eed27a6deab13339fd1df631ead45621cfd2516a607d743fdc6cafc65bf5899987aa33fc73af689d1ff6213879efd13f914dbd8f6ac27f497186220eb8789999fc8676be75d5a0ff966c55af4bc3f51ffd13e5cdfd33eda0f0e8c0be26b837dcf7e8b7a8c83f9c37ce67986be1a182fe46b1ce3c8f90efef599adc7fe8bf7549ff7f9c0fc87dee64dc171bf93380cd0dba39fd8ec6ee07b1ef9d25bb4b9be877e7ddbf703f5c079ecf91206e8ed5713f703f5467edbf5d5717d41bdd9f1e2c078a1bff4fdb4ded1c4d413f9d7dbe9b89e831e433e5403f57d485c0fd4f37162e61ff2dbac93bdc3796c340cd40bfe0d8d5d9864ec37b4838cac7fce0f839205fd66e8267b9f388efcfd00bd0719fa91f9c7719dcff721f130526ff44b0bef9818ef2f9b9d8dac3fbc7fcc3a1f99ffe84763615ff65fec3756f6a5dea8f7715620ec8fd86f9c09c8f7ccb789197fd4eb88cf8c0f9ffefaf77fb5f7ce8b571f7def073ffa537fe6cffd85bff457fedadff85b7fe7ef17ecc53ff847ffe49ffd8bff61ff2f7e5ffd4fffb660bfec57fcaa8dacf975bff127fb4dffc16f2dd86ffb1dbf6b237b7edf7ffc93fd813ff4470bf6c7fe93ff6c235ffc577ff25fd6dffc779ff97cc1bef0a5af7ced1bdffae03be79d73e2d445d7bbc18deed49dfd6aefcedd85bb7457eedaddb85b77e7eedd837b744feed9bdb81feed5fd740be775cb6ec5adba35b76e761b66b7e93eb82db7ed76dcaedb73fbeea33b58b03fb4958fdcb1fb647f3fbb2feeab3b71dfdc7797b9dc15ae7495ab17ec1bd7ba63ffe4823d84bdcc5e2776a1ccde0832caa99cc9b95cfc6a2f97e64b2b57722d37667d2b77722f0ff268d64ff22c2ff2435e17ec7fba7b799365599155599375d9904df9205bb22d3bb22b7bb22f1f17ec0ffc811cca911ccb27f92c5fe4ab9cc837f96eafd87cf6b2944a16fcb7d75d6b2fb04ebdce6e46bbbcecbeb182d4533dd373bdd04bbdfad55eaff5466ff54eeff5411ff5499ff5457fe8abfed4375dd6155dd5b505fb75ddd04dfda05bbaad3bbaab7bb2abfbfa510ff4508ff4583fe9e705fb2ffa554ff49b7eb7774fae85bd4eecfd317b03d8bdde451f5d945fed6797e7ac615a973f8d67f13c5ec4cb7815afe34dbc8d77f13e3ec4c7ffa71effb2fdbffffeee3f83ce47d1</data>
+ </image>
+ <image name="image4">
+ <data format="XPM.GZ" length="2509">789c7d944973db461085effa152cf54d956a932089a55239c896572d96bcc4b253390033186ea2488aa416a7f2dfd3db0cbd44e6d340f8f8def43406209e1c742ecf4f3b074ff6d69b7a33711d37ae6f3a077e3b9f3ffcf5f71fffeced675987fecab293edffb6b77fb1e9b8ced9e2ba65c08c00baf2117e2f5c86d02d99e196b9d7ed963df53f2ab3c47789258fa7c26564688d4bf30f23673de113e6ac1719ae9459e27f4d5c893f17ae126f8d2be3ebc87d9dff4e3904f317ccfd5ef23f28b3c45f26963c7e510ec1fc9570157dd81857967f883c90cd8635f3208b8c0b6596f863e17a500fd597fe8744c35afc1be33aef8bff5ad9b5e637cc7993f7f346fca571637c1fb9d0f99f9543b07ab2df453ff9723d0551a1f3d791cb8170573904f3a5bf725034e66f133be96fa44c1246799e4a573495e461a29cfcbbc8e64f8d9df96564f5519e876a1019668975fda05c593d5c25d67a6f945d6ef3bdb08b3ed491eba1e467c6561fcf229bff4ad9b5c6c7ccf530fa8089bdf8136596703fb1f800c23ee5ff548e3e7a636f3c8ddc68bd8ab91926066596b05c5fe359c285b2cf8de5f7ed7296f050b825d6f74763dc1a0f227bcdbf60f679e29789353f5666093f4facfe857208e63f156e93df8bdc16c223e358ff28b2f939735b240eca2ce1678983f0a57208e6bf150ec96f8d83f127e650b084cf85e5a32fdf9d10b0c6c6e44835c9631dfd9ff235b618925ad1e89779278af5750df7681ea40316d8111eef876a79ad977ae773d8257ec8efead629fdeb3ca4ba9ae6e11fcdbbef6aa72b7934ef695702eddf4e631a13d2f4c73cd599e115f533a639bbc173e6788d0b5cf23a314fe915dee01a37df698bb77887f7f8805ff190e64c342fb59fe2333ca2e373d30b7c89aff035bec1634a9e904ef1417faf78866ff1fc275de03b7c4fa3a1553e50fd8f78a2ef0bfcf43fe973bcc4cff805bb74d6a3de0e31b37c9f561fe090c6583a19612e9d1dd179417db1575237191eeafb172b9cd22a7d409a7bcc8f0c4e68f01900ef44090db8547f4ee9a966456732445083078f779a8756dfdf52f19b1cd59c699254e31c46d0703f30b6fa5239a5d27faabc22b78409de838316bdd51fd1377730a531a12bd363c949aa3d936f1a6821e8fda566aef8fe011d612eba860569495a9196721ebe7d7ed0c30dac491b58d2bd21c116b634bf25ddd2fd9dd9f3f6efef7bff0111915e41</data>
+ </image>
+ <image name="image5">
+ <data format="XPM.GZ" length="1472">789cb5d35b53da401407f0773e4546de980ee6c2ee26d3e9838004150183ac974e1f92bd7841501045ecf4bb37e7ec914aeb431fda330cc38f3fd9ffce26ecd6bcf3e1b157dbad3c2ef3e58df2d475bef06afa693a5d7ffdf6e57b65270cbdf2c58417ec7caaecd43de5f5ef67063ecbf273d5f71b4ac7c01151eb1c18128d56c06c43bc7648b4c6070e1c996f42606fc306302586068b8e8891c1a2ce8658d422360c169d1199c5a2d58658f442e4168be644613970418c2df63637c4de0931b1d87b47cc2df65e220356580b34c88829478b644c3b3e237999e2ca0532e1be4b03a4e6a16315180482567e40863c727b3e46469cbb34778ce9da3192f1d8d147263c77bc40169c56be452a2edc599d03c3a05c18d343642402c77d241354a4913137ee2e9c2213c15c7a822c046db28bb48276b5064691c86d01ec2385302e3d40ea987adbc0068b85e31e52c4dc26c057206309fdf811c883c4370cf884348972cfc61228929cb63145ea3c3011f01e18ebc2b7f847b802268d821e51852c0fd23dde33a455d47b03cc0bd570d75e0315d374ecf50fe73f25d5bcfa7152144a171f25c65e5ddfdc9a3f93c9dd74369bdd3f4c7e4fe68bc725ccd3f37c3b59bdac5fddec35575b49ebc5daa2dd6eef5bdb6cb5de279d72d2eec1c1617ad4e9d0f769fab6ebde71bfdf37830105835eef2d19a627dd6e77926559bd9ec10c3767309a9f96339e67520ece5672f4eb74a45c9cd35c2ca47c7fa252f62ec7beef07f31082adb396526669f926fff62efc9be4c7e7ca4f48a042fa</data>
+ </image>
+ <image name="image6">
+ <data format="XPM.GZ" length="2205">789ccdd3d94ee3301406e0fb3e4544eed0e8a7d9ec44a3b96029db1468d9613417496cb396b2b46ca379f7b18f4f8a8a60e0129d4ae9979ce4771c7b6e3638ec6d04b373adbb51393aab83fab4bc0d66d5783078faf5fbc79fd64c1c07f6278a209ef9d69ae98f823ad81c5e6987b0b208dbedb45639196ca54a72cdd6aa76463131dd8f946d749b9c79676d4d6148264ec9c7ec480bf2013bd6948f7d76a2291fdb13fbfc1e3bd53ebfcfce8ccfff39b1cfefb285f1f94b6c697c7e879d1b9fbf3cb1cf1fb10be3f3c7ecd2f8fc3b729455c690afc84956b387e42c536c439699619f900bd1f60e4b722522be1e92954cd89a6cdc03c8d41f45b2c95f27c722e1f7cbc989107cbdf2ce63f613598ad444e4985df078283f2a44c9fd876423345b38c79168de67839cd9eb19b94d9693f19f9273a1f9fb3d924ba1f8fbef902bd98c57928dccd95bce49645d90f7c8996ce63b224bd98cef88acf2663e779dd32c97ec15b2edd70959914d21b59f8f7be72ccb53559137bd8be67903b2c833bf5ff0402e73e1f71316c9755ef0fe79761622d7ca7f9f3567999609afb755b22c9bf1d1fe93859d203f9fd764552825c967ce795de69c3f4f56a5d67ebc0bce369cd7172e9dcbb232bcff6e9cab5ac59c7feb5cdb09e3fe7372a10ae3e7e7c2595786d74f7ff4f9fadafd0851a2b25543d151bfdf0f83139ce20ce7b8e0bac4c09e336ff5e30a435ce306b7afeada9ebf7bdd8f11c6b8c7031eed718c273c631e0b5c8b184ff763091daa652c53963d5aad60956a0debe84cf5ff44174bd3ef659fd1c50636a9b6d09deaefa1ffaa7b9baa871decdadab3fffc99edb7e61ffb38b04f776f728823aa21a98783b7bf178eed1d6d44531523c1f17bdf17293208c849e52890fe6f3d8440118636c556588655888fd68feda9ed730586f65ff599f54677745eba3f5e9faef7a5fbabef974ff4fffddefa0778e750c2</data>
+ </image>
+ <image name="image7">
+ <data format="XPM.GZ" length="3982">789c9596596f1c370c80dffd2b8cf02d289899d9198d84a20f8e6fc7f711db29fa405dbeeff559f4bf574b72174de276518f0dcfb7a444f1d47efa387bb4bd31fbf1d3ccc390866761369cd2fdecc7f87875f5fafb1fbffd39f3a16966cb6f6dabd9e6c32f331f7686b36176f3e63a8d00a800b4b18d7dcb0c23ee4c677a3f62ac98a9a33e337f63f69d579e1fb1694d6b0df32e7332c9cafe9723eeeb2e76a27fc83c30d1b23dfcc25c7e5cc7fcc46c7beb783f4066d73bd78f98ae9853dbd5c4fa47ccb9cf2eb0fc7ac4b66e7b956f0adbda45deef82b9e9a3e360e096b06d1c9f975698bbd6cb7a3a540ebadf6761db51c5f23d66d346d5e7f3583b66d860766d52e6f8596ab3ea73fcad2ffaec1fde32071b88fd278ea74d5da3f6b7856d22cb72d93f7703953f8ed80ddc80247fcbccad6b49e233c7dc757d2d72f6d7196788e343fbcc7dd7d59c0f5a5476a24febcaa4eb5799adb39ee301b2bfebbcea8b9cca7af60fae94c7f27be5a0fcc61cc68cafccc9252ff5e999b3a9547e21ecb297f32e8c98aab19cee985bd3a8fd4a791c2f27ec8cd6ef9b30b55ef275cc6cba5c73bdd0a6b0a96b3e0f3d333b338e27c7873c792ff55e33074335c71fcf852904a91fce97af4c14396565ad17ba61aecda092fd1e847d1d062ce7fef24dd197fd4f985bdf0689c757e6aeace7fc2208fb2e88bfc71396f8f0f9bcf14dc7fb01c7dff7e57cec3fdc0af703b527e7b5de06c7f20133f59dc821289b9ae5d84c58fc95fd8a41f18fe47c7ebc1e399f3ef81024bea7131639f7bb8f3e2a3f4f58fa9dfbd7274395d4c38b706fb5dff6262ce7e1fe0e55efa4fef14eb83c12ffc83c088328f383fb25747daca57fce9493307ae1d045c9d701b331a1e2fe05b167c6fab02d6c6b5dcff321f4a18f322f657f175c94f9c8f33350df8a7f28fb7bdbe87e5c3f215aa3fe5e0a8718a5beb93e42b6bee6f987f7c221478917ef1fab3e6bfdb17eaccb7ee22fcf97382872b1f7226c9dca1f9493d8a7f3094bbe3684cb23f705e72fb6e3f5b8c35cae8f28f67be6de557a5ecb4c360ac39893f29ab073b5ac578e94a47f13b32ffa35ebdf4d58d62f3107971a996f623f8eed13f75b4c4ee73df27c8b39e624f9e5fe48950b9a8f2761aa1be9a796794056fd5d122e8fecc7f334b5e5e17c80612ee357cfc7f32599b23fd7173c0a1335c21cbfd4fb46cfcff329595b462433fb9f8848cfcffd9bbc6fb47ff97e4fd1579a4f546ef5bc43e69c7296fae67acf956d2ab1c7f1c9b5efc43e2e0a9747faeb65c272dff179736343c5f9a03561d755523f6c2f97db4dfc45231c6c23fef03cc81d35528f34afacf30fce8463d5c8bce27acfc68ff3cbf3a9b4432bfd0f9bca24f30b5684cb7ab1c7f747f9f2a1f9c01be1f248fcf83ec9e4929c1fb684c340e3c9f9cede05cdc7aa70348df8cbf33707b23abf4e857dd4f3483c63ec1a99f77c1fe654c2c7f58741789420968bfd5ce229fe1e29f7c2b4adec94657da64a392abb4ae2a3ecb3de874fc2c5bef4d39e701c34727f77caa4f16ac7acfdb0af1cc41f5850ce2a3f98b0ec27f1c8a9d57cec2a1b5d3f9cb0d4abda4f4ef597957d23f3f041b89893f99494b3c46f67f8de838084fec74fff533f60fc1ffa8409f3844ef0748afe59d13fd7f70bbcc4ab29fad7788317fc768b7765edfd14fd071ce263f9ff84cf45fb055fa7e8bfe11c7ec6795cc0455cc2655c99a2bf8a6bf805d78bee066ee2d6d4f86c172f5f710723eee2eefbf1c43ddcc703fccaef877854627a8cdfb07a2ffe586383036cb143833d5a7478060800f45ebec043800809329cc0291a388373b880cbefb5ffa17f05d77003b7e5ed0eeeb1830718c2233cc173795eded17f853798e3b7cf300f0bb0084bb00c2bb05afed6f0e027fd2fb00e1bfc760b9bb005dbb003bbe5d9837d3880af3fe91fc2111cc337a8a086061b18400b1d18e8c196afe648f0bd7eb92c3c1c95efb0e512a58c75f9e4844ee98c65e77441973fe85fd135ddd02dddd1bd48e88186f4c86f8ff444cfd3f24b2ff44a6fe5ff1c7da6795a98aabf484bb44c2bb44a6bf485d6a7ea6fd0266dd1767976e85feae787157bb44f07f4950ee968a2ffd7af337f039acbe337</data>
+ </image>
+ <image name="image8">
+ <data format="XPM.GZ" length="1202">789c6dd24b4fc2401405e03dbfa2a13b62005b041be3c2172a46e3d2c4b89867799487501030fe77ef3d9d2134740e0bbe9cd09c696835828ff7d7a0d1aaad72918f54a086621934f47a3add7d7e5dffd6ea5114d0274e82f3fa59adde0c54f0369f19fe2ee87b28628a65ce98ca28a3bbcc1553b72997cc2518510433043b14c57c00bb147004f6289a790f263a31d83005a596059f0e8c99dfa0d1c674988fa0d5d65c30fb4cd3a660e4331851307203c6948439003b146c7e01bb148cdc8297143003130a36af4141c1bbba012505efca80f4b26c9bb90769b4c58d2c48c746cc05d3b629b8d1183ca7e0463b30a2e0461330a6f49873b043c10573f08282f616ec52d06ab04791cc1f30a180435050705f054a0aee7b072a0aee9b8286c394200efe45a13ba279748a464aa9b4b1a5ead0a4436bc391a86ad4d80a3a55cdc466d3594523d3f9e27bb9aa6c725bda78b46dbd296df44dfab3c8b6a58dbe51bbc5fea6b4d135e9ed646cf7a58daeb9cb7d73d8e81a9d4fe8717ee3fd437868f2f9cefd8637f61f9f7c93e6fe69d8b879eebb46b8e3376e071bd7f8e337662fa74db171bd1d9c34c5c6aaa6d8989d366ee3e96fc4d169d6ffae6aff9c383860</data>
+ </image>
+ <image name="image9">
+ <data format="XPM.GZ" length="2942">789c75964953dc481085effc8a0ee78d9848b754da2a26e680590c66c766194fcca1548b019bc5d080c131ff7db2f3154d771bf37cf9a4575999a527b5df2e0e4ef6b6078b6f176e476e74e607fed4dd0c16c3ddc5c5e33ffffef573e14d590ee45f51d483f2cd1f0b6ff647033fd8b9ba8c63a023016afbca9695f2c709d763e6a41cda605be55e39b6d176ca4b63eeaace7443e527e55aae14ca4e59fe1c98946d6733df2bbbaee950ff56b9efda0ef52f33f74e9be7af1346bfc763b6c3ba29757fda532e6a5b1ae5adcc0ef3d09a72d914a5557eca5c955ef9bbb269ea12e77396b93598af53ae9acea09f42b96e9cd17e382ab7b6755a8fbdb20cec82f295b26d6383f9ce955d9b1aed87d1afb7be6f94ff560e6d61c0fa7c5cdb3a83f5db63ee8bce985e7943b9ef82c17ee3874dbef25540ffebca8d1d1af4b792b9a9705fcfc777deb449b95596868253be56f69d2dc1cb605b19f08fcc2dead329d8fba0fdd117e5e863407f9b630e4391ee475a3f94a18ce8e744d90413352fa4e717ea50479cb7d60b8d2d4accdf284b6023f2abfb076917f7e9111cba88f3d4e71bac35f9bee63db8e0a2e691749ed0873eea79d383b20f3e223f9f9463e70be46d151c62443dcd771c8a701e3a6f2c4498ff4ed988506f57b912217f87cab52d0accbf0216e1f9d4ca4d6c12f2bfaf2cf92b500ff5e585c57dd6fea5dda6417ebf4f18fd7e00c72e613fcd57b436e0fd62d4b7d1265d4f9ab7e8a24b98ffbd72ef4c897c1e80639ff0bebe53f6ce96e8ff181c7dbeafdf9318fa26e7fd021c439e4ff31cc7dbe1f9dc82fb9c3f8ae01813def71be5e4db0a791982634a5a9fb47e1af6b541febe657615e65f078bb09f7e7f52e1e595523ecf1c2b3ccf0a2c425ef47b99cabeafb09fcb1c2ad423b02f2af4cf99fb0afd04b008df07ab6c4255e3bc2ec122dc2f95abe06abcdf37e0683ae461072cc2fb8a796b11bebf7b13c6facfca4d480df65b068b30afe63f75b16ee03f028b34bf8cfd6cec5b9cff2e58847c6b3e9213210f9abfd4a7618b7a9affe445b8aff94a21a616f557c1493ec8ca2673c87ecd9b3c6e8bf9f931b3ef90779f39663fce5bfff063f92ca689dccbd5694dfbb967cf212b72fa9d9fbff0299ff1397f15dfb7ac0bbee42bb97afa8aff9abff30ddff288efa634e27bb9fac0d7bff87ff0a3e8491cb35a92abef78f917ff0aaf8ad664c5acd6e4ea7b5effc5bfc11fe6b439a7ad19ff36efcc69339fd22eeff13e1fbcacc0ef1d7f9ad3b3ff908ff858fd275881df4bfe3ca717ff2e0fc5bf05657fc1e59c9efd46fc95f86b6eb89df83bb663490c881cf5d43ffbc9f321058a94e80b9d3efbe98ccee92b7da38b674dea4b4774c9077445d79819ffffa01bbaa5d18be097ea723e7447f7f4403fe871e27fa2257a37adb15fdc869629724d2bb262951e26fe357a3fabdccf2ead4bef1bf441566cd2fdc4bf45dbb352bfa11d391b394dda903d76a7fc7bb43f2bede74026cd7e99417698f83fd2273a9c96d6df1bfb734733fefd111dd1f1b4b4fea59cfcbad43fd67e66fcf312bf9cfbeffa79c5bff5bac4ffdf9f0bff0341cdbcc7</data>
+ </image>
+ <image name="image10">
+ <data format="XPM.GZ" length="4734">789c75985953dd3a12c7dff329a8e82d35d5d7cbb125d7d43c9070d80204424848a6e6a15bb259c2be935bf3dd47ee7f1fdf0506f3f243bdabd596f9edddd2e1eef6d2bbdfdedcdef1dd495c8ac77cb3f42edd9f9f3ffffb3ffffafdcddbaa5ad25fbf54bdfdc79bb77b774b7169e7f2a21f41d632b82636d1f3c87c3c72eb5befcb91dd0fe5aeed7cadeba3b2f3b32c10956f955b1f8c6f8c3baff6f95e39f810d4b9ac2a73dbfba0ebd7601f83577f413966567977a09c7cea5a9517e521cc42527b2b23876ad6959dca77ca75a83bb52773e5301b4ad1f51d700858e713650edca93db7623c30fc6b7c41f233287f351e3af8db0677056b7de44939862234bafec13876b05782bbd2e4b59e213585c54fe0902c7ec497ba8a67cab0377433d675d2fde9eaae863d3737f666df29cf7cef0b5d3f05774da7fbed6ae54cacfb2def27d6fd14c8fbc65b7c5be02e98fcb27164f4d3a572d7a452eb25bf94b91b44fdcba01c1b317bb760ae18fd77a5dc7783f97f1c998b566ae4f753b9e49675bf183ccb0d8afc6ec0dc89ee377d526ed89bbcf607b76d05ffacf9e5552fa8a7d637b74310ed37e78c9368fdddbeb27064cd8f1f94130f82f89f95072e515fd6fd96a2b5fea4ef606944fb9f347e2945a2e6475a7fa9a6f5c2b815f547a7c61c719ef47c49ed63adf9d31558ea88f35b193790775a0f994927ba5f74a11c6215d59f209e2e9415fc25b00c51fb998f9459a2e95f2e18f6690e8e45d4fce9cc780666ad9f882f4aacdf80b37fec87f6ff683dea7ed13938b651fb81b45f24c51af21495fb3cc0307ff47ccbe07d8579f2051ccb887e288d1be365e3007fc223c722cc2cff5d707ee0efc4d827ad2fe97e67ebadad6bbfe76cbce5bf63cc11f350e3cdd107f867edb7d8f860f53802e707f977c69dc5db4f8cf5276306bb556389e84fc4d3e6fdc4bc9d19870afbb7028eade533187709e7898d2398f43ce6ec22ec3bedcf9c4d4ce8d73be364fa0bee13fa4326463c883f0f8084fdba304eb04f87c63d58903ffbb6d0f8dd1538cb239f07e301fe9cf667ae86e9d33d381509e70df54aa94ee83f7dffc4de77b0cff0df8754617e683fc6c1dbfb846bb0b41dea8d7a0dd93fe6c935389509fdef8ceb04fb7a3e52112acc4b3a00a7d6eaa3f54d958f05f27f06a7b6d7fab2ee47b63633fea69ccf37e2711fc193bdcfca6d284aece731383f385fde588cb72746bd61dfa7d463be68bfa62ef509f9ebfc4a1c6ab3aff9666de9b11fdf8d73c9757d0bdc173de6fbccb80493d6338ddb0b7b5fc1791dfdb43731e633e24f8b78dc1ab8af7abc8f115f3fe97f33aea14f6b13ebfc27ed8734f433d3d7fecdd136bdd6d3e9fc18bd639dbe18e70b8e72a35c65c6f9f868ecc1a2f51fbdf5a8ef99b1efd18fc93880dda672f666f1ad1b77bdf697e8fcccab7ec0f9bb37e65efb55f47cf52d17b5e6cfcb136bfc7204ee83e99f1833ecd3a6711eb9aaaffd31463b607e6c18e703aeebfafec9d1f380fd6f8c23f45d344e96bff6e7980de2e5c17861af374ec6da0f593a0eb89f6e192763d45b32a33f5ae3bec7795bf00016d43b725be3bee98d7d8dfbe29e71be60aa3ee28d4361f542fe6961df1d1a9b7dde5cf080fbc51338ebe33c1d1b97c6f097ad99fd5df0c29fdc4e8cf939189756ef47e3ca58df07d99ad9a77de31af5723a5fb23593979b89d1efbd718d7a52653c03b3de2f863215f63db0019ef4d78dcd1fffc158d7f99aa517f60e26c679d0793e7ab7fa3d183703ee276b13435ee77ba676c0fc9d1b7bb0c05f9bea80fb75346e707fe7d6b8c5f709ff9818f374d7d8079caf07e31edf2b54838780fc786562c4a3f322471306bcdf67c61de277da8fa3b4c5abef93bcca03eec7fafe1b647ce1a83d9daf43ea4387f3d318771deee73231fafdcc5818ef0f9d0f83fe8cbc77373ee488492852a29e063ac25ffffe2ce4e9984ee8947ed2199de7e7226b5dd2d5ff93a76bbaa15bbaa37b7aa0477aa267fa45cbf49e3ebc264f2b34a7555aa375daa04dfa485b596f3b6bedd0a757e577b3f7bd2cfd99f6f3f325eb1cd057fa4687f49d7ebc225f5099ad6f504535cda8a1967cd6692950e7e8a5bc738e9db848954baea74d37b823779cb53fbb1377fa8afc4fbacbf2e2cec6f8ddb13b7717ee529f2b77ed6e5ec8dfba51fe9e36b28f7df7e01edd937b76bfdcb27bef3eb89517f273b74a8d5bcb1a6d8e63dff56e3dcb6fb84df7d16db9ed17f23bee5396cff1b8a8f2eb6ed7ed65f9cf6edf7d7945fec07d75dfb2f5b1fed943cef750e5bfbb1fae70e5cbfd7595abdd2c5b8f3987c6b52aef5dc81f85f49a3c3b66fdbe4ab93e4d7eed0c7cc4c77cc2a7fc93cff8fc15f90bbee42bbee61bbee53bbee7077ee4277ee65fbccceff9c32bf22b3ce7555ee375dee04dfec85bbccd3bfc8977798f3ff3fe0bf92f597ece0793fcd72cff8d0ff93bffc81a05972fe457ccfe7a961f35aaac51e7efd2267fb9faf1df0d2fe4e77f91dfe66d2119bfacf2c7d1787d92e14ff2f3c9fa14bf1cc9b19cc8a9fc943339970bb9fc435eaee45aae173ee4466e4de764ef4eeee45e1ee4519e202fcff24b96fff6bcb7476b292b329755597bfbdf7fbef91f1bb499a7</data>
+ </image>
+ <image name="image11">
+ <data format="XPM.GZ" length="5758">789c5d98596f24bb0d85dfe75718576f8380b7d7ea6a0479f0d2deddded7200fa4aaca6b7b6d2fed8bfcf74887a78c243e98c17c234a22456a29fff97be9e2606fe9f79fbfdee63abf8d4bf1465f977e57efb3d9e29ffffac75fbffee8f5967adda5de78b0d4fbe36fbffe389c2fc5a5e9d3639d219c26089d6116f80c3cce028fc05516783d736f90052ec1455666fd043759e0fbccfd220bf68760cd02af80ab2cf001b8c9022f671e74b2c003301cc0f877e07e16dafbe07116daafc1310b7c04aeb2c01f9987832c70032eb2c073f0280be34fc09a85f6025c658187998b6e16f80d8c05c86cb7e02a0bed18afa8b3d08ef947dd2cb4239ed1200bfc0e2eb3e0cf063866a13fe219d55960e4a3ec64a17f0fdccf423bc62b0759e01a8c1fd823ffe5380bf321ded2b260bf005759687f04d759e059e671a76c4ae4d3ae9db330fe17b8dbb2b59c8476e41be9f47a7b000fb3c027e0220bf6c7e0d10f6f82f103467d8d350bfd9fc0310bf323df3ac8ca2c013c2aac8ffcebba7316faaf823120fa7f83f103fb1bb06581e1bf5659e88f7ad13a0b8cfab46e16f83973ec64617c8c17350b8cfaaf7a59181ff585f2f2fd067faa711618fbb18a59e87f0e6e74dc453d44d46bddd181b32d3b67a1ff1ab89f85f5d9030f62eca23d6e8387a592af9db5eaf87970e89c8576d47b5d94e6eda172ae06be5e82f3a51ec5c2f78ba873d5edf87a215f75598d7cbd64e49c85f15fc1e332faf9651de7aaebf5246fe401dbbbe4b4c131fe36b9343f5fce9ddbf143242761be2db0964d07eb1bdd3f5573960eb972b6a9b38d38ff3a5969effe68f2cfed7be4423dbf976435f86b1e0f0a0af3a3fe6b1bf7e8cf06b9dfc1fac67572419e9047e435f298bc4a36f20ab9222f931bf2b7732a07e7057940fe220fc99fe492fc416ee77f27b7ebe9f9352bb83ecfe4767d8d5c3babaf97a572f5f62b726f807ad25d729ff68c2f72fdf5853c224772e91cba64fa17f6c8f42730bec8fa08be3faca23f219039bff5c93c6fb46d57f3fc33fe36dfe18d9c84feb8cfeb38e6fa8bc7178df9b703e758f87d28be5eb162feedc8f967bc437212d8e3ab527d79fb84cc7cda1399f5654a663ef582cc7ad21d32eb4997c9ac27f5fc566d3da991194fe890397fd825339ef041e6fca12147b290d31188f5f07c57693ffafa717ee37b48189f35e447e7545fce33729ffc401e92efc9dcff72471efbf926b76423df902bf235b9215fb43c427d08e36bcf4ba9c97d72451e922379e46c839615e79d0dc9a5df77ca78533dfa7de8e74dd5d647d8222761fffafc75aa473f2f2bf280ecf1d53674964bf2c8ef07bb20f37d6a3e5f2e283fcfa76465fb2b392aee47737fead61f29c8e907ed780fd74deb8fed920bf21ab9243f92395f7c2147b60772e5ace7e486f65e4f8d76d8be4de6fae837b94ffb2732fdd396b95e91fea47af77625d3df7045e6fac519d9d8be43a6fff1814cffc33bb966fb3d99f104cf6f638c27de91198f8cc93db6df92199fd03f6bd7ff92cc7884feb5f917ae97d17fdb27d37fd922d37fdb20d37fd924d37f63fe22fd17da47fa6f914cff659d4cff95fe47fa2f1332eb47583fb1cdcf2ab98da765d693ac90199f5664c623cbe4361ed64b6cf3e1fba1a9daf55f905bffbfc8f437dc90dbfdf7496efdff20b7f55f90c77cafb13edafda7ed7c66de7f4e667e74ab65f3f72ce34b078abf2f7be47ae8f73df35b35857f0f755af6f7bafa7dd4e4172cecb9dfea9e8f1f2ec8dcef81f598857a447ed36553faf79b9d90b5f0f36fe49ce2f5fb7fcdb9eefa7b515fc93d724deef33dd9230fc8fb64be37e5b4e5e8ef7971cec2fc780f37dd4afdfb41cfc8e94981f1be9cd3787efe9fb5ece3855b32df8f72d272f4f7ad9247fe7d24c72d7bbb1c904b3fefe5a8e5e8eb7d481e3b8717e71fffb7c94960ac7fd34bf1201f517ed8cffb96199f6e38b7fd839193d01fe76dd34ff791cfb743367f2fd98c9c9e50e05572e3ac6c6fc7d3293909e3fb7c83f47d80f8a292399f769d5b7b199293d0eef91eb61c16e42430cecba66859fae42430eee366d472382627617caf9ff2874fc849605fef7116d8eb49b3b01e3e9efdf00339098cf33e1d2f49609c4f69fb25653e9c4b1015932895d4d2c8b5dcc8addcc9bd3cc84c1ee5499ee5455e251cce69ff267379970ff9942f59c8b72ccb8aacca9a4c645d366453b6645b7664d7ed652f594f655f0ee4103a4a3a864e924ee54ccee5422ee54a900fe9a6b17bd24f1a50fdffd1500a194929e32058cf201f41ffcfe647c14284aa5007ff5ebd0e37e136b5dca53ff7e121ccc263d2537896517809afe12de935ccc37bf8807d8a327c25db05c6fb0ecb6125ac86b53009eb61236c86ada4cdb01d76c22eecf7c234ec8745d21d7a1c84c370148ec349380d67e13c5c4097e12af8f77957be430ff68b3c4be8874118a67f156114ca304e3ebda868fe0d85bf9f63fa74acdd3e2ba5fd5a6ff456eff45e1f82e94c67e9ef477dd267d8bfc8aabea6551bd2fe4de7faae1ffaa95f21e6ffcfd2857eeb32ec577455d7fecb7e927aaceb866ea6b8fba907d655b7745b7760bf2b13ddd369b6d714771a7ba2073ad5433d4a3ad693a4533dd373bd80fda55e6927b5777d0eed695f0799349d809a5ead4963130bbc5f2c7d9a5509a66e9f3e6b1abb96a1ddd8ad4eecceee931e6c668ff604fb677bb1d7e4ef54a7f666737bb70ffbb42f5bd8b72d27db95a47b5bb5359bc07edd366c5337f20cba615b616cdbe95ffb29c6132d7fec776cd7f6603fb57d3b086f7668477614dc7e967ceba728c7769c7c7948fd4eecd4ce607f6e17766957e973a96b3debdbc08656d8c84a1b4789f937431663acd2f3bbf1fd15afe34dbc8d77f13e3ec459b88a8ff149bfe3b39ec79714e55af2e43459bffeecc710dfe23cbec78ff819bfe2227ec7e5b81257e35a9cc4f5b81137e356dcc6fefdf7df7ffd07fa3a7226</data>
+ </image>
+ <image name="image12">
+ <data format="XPM.GZ" length="5118">789c5dd8598fe3c80d07f0f7f9148de1db20e0dab22d5908f2d0edbeeffb0af2404a564f1feed37d2ef2ddc322ffd5c966082ce6b74555b14aa5b2347ffc5a38dfdf59f8f5c78f97b9ccaf9b85e6b73c2ffc6a5f67b3cf7ffeeb1f7ffef859140b457fa1180d178a9f7ffbf1f360bed02cec3edc4f1368d740832a85fbcb2d29dcf7ee3685bb4a1e9629dc0fc9a35e8a6499ba8b14ee997b9cc2fde6ae53f8f58bc9a5fff1f675f73885fbd52d29dc6bee2685fb2eb9ea57bdcac7a73d7797c25d26d745ddaffb9edf735729bcfddc2d29dc8d5b53b835598a14c94ceeaa54acd799db3b708f93b548e1e3f5dd650a6fdf496e8a14de7ee0ee52b82f93db5e0acfff743729bcddef47db66ebb5bb93ba3f707b7fd39e0cc3ece34d874dd3f7fed4efdf74341678252c6dcfc7d7657739d63075e17628be1eecf39b564d59fa7e6009b7fd9eef27590da7f0eb5fdce3b6525f7f8ef1c7297cbc7d773d6e7ade9fcec26dbf1e7afe0b3c44fb3d3c9291f7bf068fd5e74bd3700acff7fb3f9571d78bf53a0c8b86b907b7688ff98856319ee07a15e4f7c3564fe43fc0b6417d7cf4df8a7a7d3a726b5d207f080f7abe9e3a804bb8802bb80fd7700f56f8126ee10bb883cfc376bbc367f0103e8547f0093c868fe13cfe119cd7ef39ac6558d0bf623d65179ec24b61db8eb11e7770318cfd83fe9a01f2af61acb734701526ac5f3386517f83fa6813463df406633f10fa6f510f118cf1f511ae24f633d6dfee6fdcefa7f054a6717ea0fe147efd6f775363fd793bacf9fec77c9aa61cc6f3a4e136dfff369cfba365d8c2dba3ded6f697b7cb08c6fd945318fb4b7660dc4f5984b19fe409c67e92df30f693447d6dde4f54c0980f1dc3189f3660cc875e618c4fe85f1a98613bc27c3d508f3d7fb17e8f701bcf273fc01d1ce7436bfb2b3c8307f01d3c826f613cef7c03d7719ef135ac30eab5fd14be823bf83cbbf2fdc1717eb6f97ce4293c805b7804377015d6a76c89f3f2191ec7ef8de0fedb7e8cfd19e7799bf707adc2167efdc43db5fd18e7e3123c84237faaa3305fc0157e1f6ee03ada257e0fd2868af37a1716b4e3fab689df4f8af37e9aebe112b63fde7fac67f75d0fc325fa1bc263f804c678ba073768df865bf80bee901ff576d243fb238cf511d463fb3bf27760d4270263bd14e3d97e8ff7813e8c7ae908c6fae916ac685f8751bf6ec2a89fe6f014ed1b30e643a857311f457f8af9700d17685f83313fbe84f3fadfc2980fa3de7cff19f529ea5785513fa33ecdeb5fc1a89f737da85fe2f9e91ad4cfa8afc9f703f7b741fdbc0aa37e99c0a89f5760ec1f5e86311fb981f37cf2f5d84fbc04e7fb83fdd7603ebc08e7f9607f35f97e60bddabcfe9f70aeff0346bd847adafcfcbdc3b9fe3718fb495fe01aef67af707efe3a5835aec7fe69f3f3f190adf17ebd0fdb89eef9053c1dc5ef3dd6bfed4a7fde65395bc2a827bd817afe195c44ff7400e379a70bd8c2e7e3eb693f36e3d2df17b58325be07741eb6f9c6fbc06d78da8ff74169e102ef872378009fc243781bc6fb249f64c7fb395d8653f8f8bebe5dbfb537461fef13b6570acf7f0f5b7f71fe9f66a3bf5b18ef8b7c9cddc4fbabc0557c8ff05176b4f33e3c8ef39e0fb39b58ef03b80ed36338d74f356ce1f3f1fdd415369f387fdfbf1ddf235b30e6271cced7530b5bf8f5be9fbb81fd1ec5f7600d6bbc2fc9316caf50ee01dc856916cefdd104b6f0fefdf9ea86f6feeff3d34f388fb712cef93c822dbc3df6cf289b3e600bb7bf1f7465360f600bb73ffff67109d3126ce1fdc7fa8dbffd015bb8fd3cb49f1f0bb79f9f767c5bf87cfcfdc08e43580e610b77ec07ff6074fbf3698f9f45f2c19c8985951b6e79ca1d5ff16fbee61bbee53b9ef13d3ff0233ff133d3c11cf92f3ce7577ee377fee04ffee2455ee2092ff30aaff21aaff3066ff2166f473eef58f62eeff13e1f781c5a1c791c5b9cf0299ff1395ff025fbfde0bef55df0c0628818fc25465c72c563ae897d3d89df48fe9a434a0dfed6d2d4a3a32bfaedf9d77443b7d672f79d3da37b7a48e3d0233dd1b3c513bdd09c5e3dff8d3fe8ddda3ebef33fe98b16698926b44c2bb46ab1426bb44e1b9ebf495bb44d1f163e02ddd10eedd29e799f4b3a401cd2111d7bfe097fd1a9e77fc4287466fd9f5b55177469f16871493dea53ecef010d6914f9b8a6a48ac696530bdb7c6716ad90489cefd2f0445a5bb5d177fe9e4c69c772673449ff3f856d9e2bf1f5916bb991dbffcd973b99c97dcafdef1ac8833cca93e73ff38abc44abcc3dff55dedc77b424eff261f12e9ff2258b9ebf241359a689acc418b22a6bb22e2b36d692656ec8a6c5866cc9b6ec78feaeecc9becd6b82fc0359a73dfbfbc0b30fe5c8e2508ee5444e3dff4ccee5c266374963c85c2ea5277d997bfea6e5a67f99399281e03c9752ec4dd9576e62ffddb755afed6fff9f5f2b2bf9f326aadad81e5956fba6b07b9ff2675ecfbb6cd867dda1c5a63d7c57eaeba9d77aa3b77aa733bdd7077dd4277dd6179debabbee9bb7ee8a77ee9a22ee94497e3f9d2155dd5355dd70dddd42d3ad26ddd912bdd952fddb3590ead922bcbdeff7e1e490ff4508ff4584ff454cff45c2ff4d23ecffa5ae840873ad2522b7f7efffdf71fff014e3ad5c6</data>
+ </image>
+ <image name="image13">
+ <data format="XPM.GZ" length="3534">789c9595db52dc480c86ef798aa9e88eda52c667bbb6f602c8011218ce04d8da0b796c33c01c60188ea97df76dfd6a9b6c05b2acffa4f0579235dd925afd7eb977bcb3d55b7ebf74b390c5f9b0371cc9bcb75cdd4e268f7ffef5c7f7a57761d873ff82c4fd79f7dbd23b1ef786bdc16c5a2bd0b503eae301df820315f80e1caa94650a8e54b07f03c72af009385381bf82f32efeb16727c41b834505fb2ab86c59269e9d60bf02d72af0817210aac00370a20233b850211ef61b880af66df05005fb025cab603f02372af09e32d281fdc80c8c07f64370a402ef82e376ff827c86990af67b70a3027f568e0215f80b1801c18fe05485787370ae82fd125ca86047be2251c1be06ae54e04fe04605ff1b6594d3ea85f871a942f39c82abf6f7b80faee32a463c0ec08d0af1d04f495f85785b601408fe21387211906f4e8c55e0141cabc019180fe26d80d336bf9c1babc031388f8731eacb85b10adf6f824505de514ebbf3c011386cf7472be0a43b1f336315f823585460f46f96f4abbe7dffc15885f8e8a7ace8cec7d45805c67eb261b71ee42f0f3bff21386dfb9716c62a7005ce5460014bf73d81bbf8f400ae54f83df4535e7776f4078e93edff029cabe08f7a1755e77f6eac029f816b15fcd1df1275fe0d1805811df994acb38f8c55b0e3bc49375f18fd2c5d3e19f348248a23f48f201f520681b7635ec8f3fe4f3d479e6b6315fc9fc0cffb433f89ce238bb70f6eba79187a4ecdbe8bfa94fdb61f18e7b92cda79c9e8afb2ece2e33c94cff1311f86a10e68ec07f5a9fa81b70bea51c541e319f9af929679621c16a1cd07e4b34ac3763ea13e55d631ea51e51d231f5511b6f9c33cab24cc43ab3fe665550779608cf95f3561125a3d715fd4fd76fe0afab70e83cac7433fd6515447d61fe8d73a6ee711979e83d8e607f65b275119d97cb2784967af3c87b15d7e587f9dba76b0f9d278760f18fbaf331d38e091e734b6798bfba4cedb7cf3b971ec04c6f9a9cbc83da81ffaa17eee97c0b3ef07c27c72c569ebb36bac03108c79d124ed7a04fb6f8ab0ed4fccc3a60cc47f8f79d60cbbf5af1b276582fc08f2dbd47a23e17bb337ddfa9e3cbb810dee7bcebd3d326ecf0fa59e4bcf63cfed7d2ac661e2edb6fea63d8f7c6cdcdd2f07c6ed7a79db582f3cf08ee72245fff286711665665ff55c66f6fdbde73ab37e5a3376ed6afdb0f0ec2e34f0dcb313f8c6b8e81796df2bcf7161eb9f79760b025f7b760f78eab92c4a3bff4c2c5cf2902baeb9e1331e399d3b5df0258f7f949d579e4233bec2df6b9ef30dde167cfb82ff1ddff3033ff213aff02aaff107fec89ff833aff3067f79c1ff2b6ff21678c0dbbcc3bbbc07dae7033e7cc1ff88bf798f011ff3099f729f03a790238e39e19433ce9d0a62bb5f48fcf7032a694815d54e0d9dd1086fe774e148df2e11fff9f70634a6094d69465774ed34a71b5ad0ad7bbba37b7aa0c79ffc9f68c579afd2358f9dd71a7da08ffa0efa449f7ff25fa70dfa425fbdc73d6dd296f93b1ed0f6cffeeeff0eed7aff3d17f3b2f3772b7c21fe3aed5bb69cfd800ee9a8f5eff2f9baff373aa693ffe1eff59a3f9d52df2978b37f489153fc46ff3d4a2875ca28775fecfdda9f0a6171b7329e5286ffe52f95d4d2c8998ce45c2ee452fd652c13a7e9abf9f9975ce42399394ddeec7f29574e3face8357f3a91b9ebce2d150772238b5ffbcb9803f5955bb9d5b32377deffefdf97fe01ef181ec6</data>
+ </image>
+ <image name="image14">
+ <data format="XPM.GZ" length="1442">789c75d4494fe3301c87e17b3f45d4dcd028c48e9744a339b05396b217c2680e8ee3500a2d10ca3a9aef3efeff52985153dc1ef2e86d1c3b96babc145c1cee074bcb9dc7a9995edbc00e4d1d2c954fe3f1dbcf5f3f7e77ba9c07fe2b65c0badf3add28b041ff6ee2e8fad25f873106710432ff012744c6198f33e23951c4cc35f500d45c34ec8325970d73a28ae9438c419198b8229e80859f8c137b441d0bc124f1191442324dbc038d2858491c8285b00c5bd800ad281966de21a642c61c530d4025538ea92ca83d15b104ad2c9a7a45ccb8621c0f7a0785e20d6fc04ce9046bbe072b651343744423954b2c71a5a14e12acea1a345a8b843826fa8756a220d6a04e63811d9d81269512e77508bad4366ff2946859c6146a0826a99158c62328b3446219b7a0ca84c4160ce832a570a04fc4526495c654fba0fce07a43c334d67c01fae768dcbb4d74d2d834251e83aa88533c7713cc0a9781bb6061b9c1a1bc11abb8d0195efb0be8cfd3e0c5ee81b2ccac204e4165ab023f5e6b585a8b5777346369b1c157d054cce17cb73e89353f80ce4a83a90ab02a93028b5c9d515b6cbf6ae8b8c5a144cd084d616cf439fe9530a4542e288e5265aeda65384bd7ad321ade20dd8ee74b34b9bba7f4503f8673c527baabaea64ff3259a3cdf87f5edcbeb5babf8f4ee56cceada7aabf8b4f15e6f6e6d87ad124d7a1b3bf5eede7ebb44fd83decee1d1f182e2dbc9f3e9d9605189a25eff7c70b1b0f8fb46838f924797ff8f5114cf4a9ee7f3b73525cfdb0925cf1724fc7bcd8daf4bfe7541eafef9def90b50383f80</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>helpAboutAction</sender>
+ <signal>activated()</signal>
+ <receiver>ScriptHelpAbout</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>fileOpenAction</sender>
+ <signal>activated()</signal>
+ <receiver>ScriptFileOpen</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>KKPdemo</sender>
+ <signal>initialize()</signal>
+ <receiver>ScriptInitialize</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>Action</sender>
+ <signal>activated()</signal>
+ <receiver>ScriptObject12</receiver>
+ <slot>execute()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/current/kpartpart.kmdr b/kommander/examples/current/kpartpart.kmdr
new file mode 100755
index 00000000..928ecdc6
--- /dev/null
+++ b/kommander/examples/current/kpartpart.kmdr
@@ -0,0 +1,171 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>502</width>
+ <height>412</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string>//createWidget("kpmessage", "LineEdit", "Form1")
+</string>
+ <string></string>
+ </stringlist>
+ </property>
+ <property name="useInternalParser">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>6</number>
+ </property>
+ <property name="spacing">
+ <number>4</number>
+ </property>
+ <widget class="TextBrowser" row="0" column="0">
+ <property name="name">
+ <cstring>TextBrowser1</cstring>
+ </property>
+ <property name="text">
+ <string>You can click the test button to insert text
+If you are loaded in the parent frame you can click the rocket icon on the toolbar or use the function menu to select "Talk to KPart".
+
+Any Kommander program can be run as a KPart. You need the KPart plugin to load KParts. Note that running Kommander programs as KParts is not without risks. For one thing you loose DCOP in the parent and the old parser ceases to work. Additionally since all widgets are accecssible from the parent and duplicate widget name can cause a Kommander lock up.
+
+Because of all this and the fact that the Actions on the unsupported MainWindow are incompatible it is impossible for the child to talk with the parent. On this dialog we use a timer on the parent polling the child for requests every 100 ms. It's a crude hack but it does yield acceptable behavior.
+
+This demo is intended to run both kpartwmframe.kmdr and kpartpart.kmdr. </string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout70</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>75</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton4</cstring>
+ </property>
+ <property name="text">
+ <string>Re&amp;quest Parent</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>if !widgetExists("kpmessage") then
+ createWidget("kpmessage", "LineEdit", "Form1")
+endif
+if _LOADED == true then
+ kpmessage.setText("You have mail")
+else
+ message_info("this only works when loaded as a KPart in it's parent window")
+endif
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>Test &amp;Child</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>TextBrowser1.setText("This text was inserted by the KPart child cialog")</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>ScriptObject13</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>message_info("We just got a message from our parent frame!", "Parent called Child")</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>ScriptObject19</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>message_info("Request Granted")</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>ScriptObject93</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>_LOADED = true</string>
+ </stringlist>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/current/passvariables.kmdr b/kommander/examples/current/passvariables.kmdr
new file mode 100644
index 00000000..2d3b9e03
--- /dev/null
+++ b/kommander/examples/current/passvariables.kmdr
@@ -0,0 +1,416 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>553</width>
+ <height>325</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Variable passing demo with PHP</string>
+ </property>
+ <property name="icon">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string>AboutDialog1.initialize("Variable passing demo", "", "0.1", "Copyright 2008")
+AboutDialog1.addAuthor("Eric Laffoon", "Designer", "eric@kdewebdev.org", "http://kittyhooch.com")
+AboutDialog1.setHomepage("http://kommander.kdewebdev.org")
+AboutDialog1.setBugAddress("eric@kdewebdev.org")
+AboutDialog1.setDescription("Demo of passing arguments to and from scripts,
+You can also pass an echo to stdout back from
+your script by calling your script with
+echo(ScriptObject.execute)")
+AboutDialog1.setLicense("GPL_V2")
+PopupMenu1.insertMenuItem("Help About", "PopupMenu1", 1)
+if str_length(exec("ls -1 /usr/bin/php")) == 0 then
+ message_error("This dialog requires command line PHP installed as /usr/bin/php in order to show the external script functions with PHP. if it is installed elsewhere you could edit the PHP script sheebang in the dialog or create a symlink on your system.", "PHP not detected")
+endif</string>
+ <string></string>
+ </stringlist>
+ </property>
+ <property name="useInternalParser">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string></string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="Label" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Label8</cstring>
+ </property>
+ <property name="text">
+ <string>Value to pass back</string>
+ </property>
+ </widget>
+ <widget class="ExecButton" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>ExecButton3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Pass I&amp;nternally</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>ret = ScriptObject2.execute(LineEdit7.text, LineEdit1.text, LineEdit2.text)
+LineEdit6.setText(ret)</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="Label" row="4" column="0">
+ <property name="name">
+ <cstring>Label9</cstring>
+ </property>
+ <property name="text">
+ <string>Set</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="Label" row="6" column="0">
+ <property name="name">
+ <cstring>Label6_2</cstring>
+ </property>
+ <property name="text">
+ <string>Pass back</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="ExecButton" row="3" column="4" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>ExecButton72</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>P&amp;ass to PHP Script</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>// test for PHP
+pt = exec("php --version")
+if str_contains(pt, "Zend") then
+ php = ScriptObjectPHP.execute(LineEdit7.text,LineEdit1.text,LineEdit2.text)
+ LineEdit4.setText(php)
+else
+ message_error("It looks like PHP CLI is not installed and on your path")
+endif</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="Label" row="6" column="3" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Label6</cstring>
+ </property>
+ <property name="text">
+ <string>Pass back</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="Label" row="4" column="3" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Label5</cstring>
+ </property>
+ <property name="text">
+ <string>Set with @</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="Label" row="5" column="3" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Label37</cstring>
+ </property>
+ <property name="text">
+ <string>Return</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="4" column="5" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>LineEdit3</cstring>
+ </property>
+ </widget>
+ <widget class="Label" row="5" column="0">
+ <property name="name">
+ <cstring>Label37_2</cstring>
+ </property>
+ <property name="text">
+ <string>Return</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="5" column="5" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>LineEdit4</cstring>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="6" column="5" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>LineEdit5</cstring>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="5" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>LineEdit6</cstring>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="4" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>LineEdit8</cstring>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="6" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>LineEdit9</cstring>
+ </property>
+ </widget>
+ <widget class="ScriptObject" row="3" column="2">
+ <property name="name">
+ <cstring>ScriptObject2</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>LineEdit8.setText("Kommander "+_VERSION)
+LineEdit9.setText(Self.Item(0))
+x = Self.Item(1)/Self.Item(2)
+return(x)</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject" row="3" column="6">
+ <property name="name">
+ <cstring>ScriptObjectPHP</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>#!/usr/bin/php
+&lt;?php
+@LineEdit3.setText(Kommander @global(VERSION))
+@LineEdit5.setText(@Self.Item(0))
+echo round(@Self.Item(1)/@Self.Item(2),5)
+?&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="Label" row="0" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>Label12</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Numbers to pass to scripts</string>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="2" column="2" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>LineEdit7</cstring>
+ </property>
+ <property name="text">
+ <string>Pass back</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>right click on dialog for about dialog</string>
+ </property>
+ </widget>
+ <spacer row="3" column="3">
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>108</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget" row="1" column="0" rowspan="1" colspan="7">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>71</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="Label">
+ <property name="name">
+ <cstring>Label35</cstring>
+ </property>
+ <property name="text">
+ <string>op 1</string>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LineEdit1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>22</string>
+ </property>
+ </widget>
+ <widget class="Label">
+ <property name="name">
+ <cstring>Label36</cstring>
+ </property>
+ <property name="text">
+ <string>/ op 2</string>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LineEdit2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>7</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>71</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="AboutDialog" row="0" column="5">
+ <property name="name">
+ <cstring>AboutDialog1</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="PopupMenu" row="0" column="4">
+ <property name="name">
+ <cstring>PopupMenu1</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>AboutDialog1.execute</string>
+ </stringlist>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="6350">789ca598d94f1fc911c7dff7af40db6faba877a667baa747511e8c01e3030c06cc11e5a1aa7a86cbdc603051fef734f5ad9fed5d2952a4f521fba3beeaae1a7eff6de9606b63e9b7df7fb9bba7fb53599213ba5dfaad3c5c5c7cfbe7bffef1ef5f7e0d61a9fee9425e0abffeed975fb7ef976469f3ea727a013f56708dfe7a61597069b372068729f6cabbe0dcc8acbc622c4599c1a10dad72f1ca5d1370bfc77d5dcb01e70770176252de51eebb1c21df96720c6d87f51edcd3202fec5e29a7c01dee3b541e43dfa9b2ee4699dbd88e2a0f2997861a5d97040ed441dfa83c776d8ff5a3176e9b466cff6be5b6ded7aabe07ca5d37f6f4c2f400ee1bc84f1f95fb2859d7654f39a6766495c729a7b66d3a5dc77d431fa2ca2b9f9573ecb2ae975999dafa80ae5f1a0f0df6ef83fb79507bf927701e65d0f39372b507cef3837102fb2be3a1d1fd1efb4b65f87f193c3454f4fcaaf294a3e8ba6b5e3834ed88f3a528b72d352a0fef1b33e4f5df9443655d776aefd02d582e94fb568c3be3b9813ddf2a577b6695df6d1bf3a8f662514eed64fa7c521e6a38ea79867c39b48dfa9f8e95c705fb1f0c79d55f8142d7a8feee1a9cbaacfafb013c24d8c7df29f398912fee8db2c431e17d562ea137ff41be52eda9f2ca15784c05f10e7da7ba5fe5e3afc6b1d1789333f0200cff6e2acf21415f4fc643837cd5f8ace99971de6bfe756d65bc770aee52d0f8e77be550d7555efe0c4e09f1e95ae52e8c382fe7e0ae4680aeef832345e4eb2a788cd08f351fbb18b8d1fc70deb858bee1be983bc67b9aef55ba453c6d1b4b8b7a73094e7d823d37c15944f575b7ca43985ae4f7163813d6f98b71417c7bd82b6766c8ff9d8bbe479a9fdd1826e8ef173c9bfc199c02e4f167e09c08f1fb4e9916e749c0718c6a0f817e9ce70279b5fe75656c0bce6bfdeea6b1401e79569ec750903fa7c65dd1f749fdd7b75d84bd68cf3899bc1d38ce51f7b3c64f1f6a81837f37c0fdd4e9fb45e3b9efbb01f6a457c6638bf7efc07966c4eb9a721c09fef7e0347403de3b048f52501fd51ffdd091f94beb479fc75c50bfb5fef463c7886f5f8ca5457d5a07f78dc973021e479ca76cccd6dfde1897a2f92cd7df19f9f200e66e02639d3a8b57ff15cc11eb1c94b9ea83fc1fc1d4a27ffa4730e709f9a9fda697b117f873dd7886bd44fb5b5f16e759e3a79faa01105ff7604eb8af683cf573df427fd27c8c4ddfc05ea2fe8b6dead0cfbcde17bb61863fc4836998d05fb53ebdb4e309f5f69371467cb1d6c318fb8c7940b41fc594ad3e8bda230ebdc59fc3f9816982fce7606967f85bf329e6aa2fcedf1a0f93dadbad19cf13f255e3258e6326f81ffa513fb6e89fc7600a45f38b5be3cee23119cf13ea9dc67be47a5edff747e034637e21cdafda0c09eb0c798426d88b36c1dc9a7c9067ea6dde7207e03a5ea01fdc1bd714d3f31a4f351bfb80fe7e011ed3a8f672cf606a102facf1949a7ec67d740fe61efef26aff3a8d7419f553e33d853a70a1bf6b7ca5eaff84fa7c09e63a10eafe689c2dbe351f534fc4e87f9b6066cb8ff7c613e291d4be29d6fc80fe97c684fda4fd28a52a0fe6870b70951ff1a5f99e061a11ffe2c0dfe5db302e33fa81ceaf29c7087bf30c1e53863c03b8ca83fa087dc6d8e37dbf0c669970df0765926646bdd478484c05eb0c7b72f537e261c738435fdf8317e77d671c26d85ffb7d7a891f5d27e823d59ee8075a8f53a9fae2fd2be31efa5334a609fd17f217e9cc7eda4fd2944a07be06d7fbd0efcf8c05e7a9372e789fb51ea5991bab072acfd04446fcc83b6369e1ff67e3a9457e9d825313109f5bc66d40fdd1fe31b4291beb7b43a8e7f57eeac0d2c05e148c5bc48fcbc619f6259d67872ece013c82ebf8827ab307ce92d45fa4fd63e853ead01fb51e0fb1be8f7e7108ce39a1be607fa49170ff07f0c29feec27898314f6bbd1952b4fc746aef614813be47dc399832a17edc81a5b7fcb9361e511f59fd33e4dabe21df93710c88e7b7e0fa3ee4d37a338ca9833dbc185bbde1c9389abd9e8d5340fdb835ce01f322de1f47ca8807cdf781d380fa4f2b0b0e88cf2fe03aeec1deb65fac5f11e247aaffd01fb4df0ea59e473eed826b3d417d867da6349a7c37c6847ac94fc605eb04f9a76a3fdc8ff89917e769d7d8ced3155826f88f35bf7293d8d64f8ca780786fc143d3a17e1b2fdea31b63863f44e325b7f53eb59fc77dede2bc4ce04c09f6d57a9043ae21a8f2ec81ab3de0ff75b0c80c7be1fe2e31fce1ee8d05f9e4eec0436bf1cee05a2f50ff347e725fc73bc4db7be301f2b947b044f467a7f37dfd9a317b91379e218f837e491af45fa7f3681eaaff11af3a0fe43c04c4179f82c5fa0d69bdafd3fae23eed8f99eb38827eb40c9638213ebf804b67fb35de6b3a0c01f543f3af0e2f09f586b51ee56960e4a3877c53e94d9fcbef8cefd7c138ce9897609f3a3d05f8e7192cd6df58e51fdb41ccde6b6059f40fad7f6390d1ea19f6f7b9ef313fbc06978cf748eb6ffd5a0ce66f9d6fea746cf313a93feab8dbf69837b57fd66c8df6f31331ce3df245fd33723d8ff96ad378b07eba62cc33ea95c6d72839a19ed2b231c11f74042ec9eedb3266c8ef57bf33ecadf5b54ebb56df48e38b9a2c3de637adb7d48e8dfdfca50117abaf7edf58709f68fda0900bf4753be0ba8efea7f580fa3ce1e73f746e3cf78897042ec5f455fd292e5834fe285579b05ffb130d63077fc9a371847d49e7833abd14bcef3e1acf33fa81e63351b507f24feb35f1d4d8bafabf7eac36789f35bfa88cf58341d7b57ed15426bb7f024f2dce93f6a33add2e58e781fa315d2750dd1fc153b0f7745eaa5f3b61c63ca1f5f4659a34d678abd3d382757eaa5f1fc6dbf7ffffefbfb6df3b4ffa2f7bf1c54ff57fb33ffe5ffbfdb13ff1a7fecc9ffb2ffec25ffa2b7fed6ffcadbff3f7fec17ff58ffee90ffbbff967ffca2ffbd77ec5affa35ffc6affbb7fe9d7fef3ff80dbfe93ffaadc57ebfed3ff91dbfebf7fc67bfef0ffca13ff28d6f7df09def7df4c90f3efb11fb9d77ce916327aeb8c9cdeed89db85377e6cedd1777e12edd95bb76377e5cc8ef6edd9dbb770feeab7b744fee5bfdfbec5eb965f7daadb855b7e6deb875f7f6677ddd3bf7de7d701b6eb3defed16db96df7c9edb85db7e73ebb7d77e00eddd18ffdae71ad0bae73bd8b2eb9c1e55a1e3cd5982426a15207cb998e7feca7133aa5333aa72f7441977445d77443b77447f7f4405fe9919ee81b3dd3abeffb97e935add02aadd11b5aa7b7f48eded307daa04dfa485bb44d9f68877669effbfecfb44f07744847d4504b813aea2952a297196964cf8e8999e587beb5384d3cf3319ff0299ff1397fe10bbee42bbee61bbee53bbee7871ff2f3577ee427fec6cffc8a97f935aff02aaff11b5ee7b7fc8edff307dee0cd9ff67fe42ddee64fbcc3bbbcc79f799f0ff8908fea44d372e08e7bae9f873fdb9f07ae9fbfe2c509098b4891496639961339953339972f72f1f37eb9942bb9961bb9953bb99707f92a8ff224dfe4595ed513cbf2fa8ff12c2bb22a6bf246d6e52d277927efe5836cc8a67c942dd9964fb2f3a7fdbbb2279f655f0ee4508ea491568274527bb8241924cbf8e77cf1a31f8b2faed40c2b5c84e652eaffa632ffa5fcfdcfdf7ff92f64b3cec5</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>Form1</sender>
+ <signal>contextMenuRequested(int,int)</signal>
+ <receiver>PopupMenu1</receiver>
+ <slot>popup(int,int)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/current/tableselect.kmdr b/kommander/examples/current/tableselect.kmdr
new file mode 100755
index 00000000..09dd6cd8
--- /dev/null
+++ b/kommander/examples/current/tableselect.kmdr
@@ -0,0 +1,502 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>838</width>
+ <height>561</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Table new feature demo</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string>for i = 0 to 6 do
+ for j = 0 to 6 do
+ Table1.setCellText(i, j, str_upper(i) + str_lower(j))
+ end
+end
+PopupMenu1.insertMenuItem("Copy", "ExecButton85", 1)
+PopupMenu1.insertMenuItem("Paste", "ExecButton87", 2)
+PopupMenu1.insertMenuItem("About", "PopupMenu1", 3)
+
+AboutDialog9.initialize("Table Selection Demo", "help.png", "0.1", "(c) 2008")
+AboutDialog9.setDescription("This demonstrated using the new multi-select ability
+of the table. The spinboxes offer how it might have
+been done before. Now block copy and paste can be done.")
+AboutDialog9.addAuthor("Eric Laffoon", "Stop sleeping", "eric@kdewebdev.org", "http://kittyhooch.com")
+AboutDialog9.addAuthor("Andras Mantia", "Make Eric stop asking for it to make coffee", "amantia@kdewebdev.org", "http://kdewebdev.org")
+AboutDialog9.setLicense("GPL_V2")
+AboutDialog9.setBugAddress("eric@kdewebdev.org")</string>
+ <string></string>
+ </stringlist>
+ </property>
+ <property name="useInternalParser">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="1" column="3" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="SpinBoxInt" row="0" column="3">
+ <property name="name">
+ <cstring>SpinBoxInt4</cstring>
+ </property>
+ <property name="maxValue">
+ <number>6</number>
+ </property>
+ </widget>
+ <widget class="Label" row="0" column="2">
+ <property name="name">
+ <cstring>Label4</cstring>
+ </property>
+ <property name="text">
+ <string>End row:</string>
+ </property>
+ </widget>
+ <widget class="SpinBoxInt" row="0" column="1">
+ <property name="name">
+ <cstring>SpinBoxInt3</cstring>
+ </property>
+ <property name="maxValue">
+ <number>6</number>
+ </property>
+ </widget>
+ <widget class="Label" row="0" column="0">
+ <property name="name">
+ <cstring>Label3</cstring>
+ </property>
+ <property name="text">
+ <string>End col:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="Label" row="0" column="2">
+ <property name="name">
+ <cstring>Label2</cstring>
+ </property>
+ <property name="text">
+ <string>Start row:</string>
+ </property>
+ </widget>
+ <widget class="SpinBoxInt" row="0" column="3">
+ <property name="name">
+ <cstring>SpinBoxInt2</cstring>
+ </property>
+ <property name="maxValue">
+ <number>6</number>
+ </property>
+ </widget>
+ <widget class="SpinBoxInt" row="0" column="1">
+ <property name="name">
+ <cstring>SpinBoxInt1</cstring>
+ </property>
+ <property name="maxValue">
+ <number>6</number>
+ </property>
+ </widget>
+ <widget class="Label" row="0" column="0">
+ <property name="name">
+ <cstring>Label1</cstring>
+ </property>
+ <property name="text">
+ <string>Start col:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="ScriptObject" row="1" column="2">
+ <property name="name">
+ <cstring>ScriptObject88</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>selection = Table1.selection
+topRow = str_section(selection, ",", 0)
+leftCol = str_section(selection, ",", 1)
+bottomRow = str_section(selection, ",", 2)
+rightCol = str_section(selection, ",", 3)
+result = 0
+for i = topRow to bottomRow do
+ for j = leftCol to rightCol do
+ result = result + str_todouble(Table1.cellText(i, j))
+ end
+end
+StatusBar7.setText("Selection total: "+result)</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="TextBrowser" row="2" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>TextBrowser1</cstring>
+ </property>
+ </widget>
+ <widget class="ExecButton" row="3" column="0">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Get range</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>TextBrowser1.clear
+for i = SpinBoxInt2.text to SpinBoxInt4.text do
+ for j = SpinBoxInt1.text to SpinBoxInt3.text do
+ result = result + "Cell value(" + i + ", " + j +") = " +Table1.cellText(i, j) + "\n"
+ end
+end
+TextBrowser1.setText(result)
+
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton" row="3" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>ExecButton2</cstring>
+ </property>
+ <property name="text">
+ <string>Get range &amp;from selection</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>selection = Table1.selection
+topRow = str_section(selection, ",", 0)
+leftCol = str_section(selection, ",", 1)
+bottomRow = str_section(selection, ",", 2)
+rightCol = str_section(selection, ",", 3)
+TextBrowser1.clear
+for i = topRow to bottomRow do
+ for j = leftCol to rightCol do
+ result = result + "Cell value(" + i + ", " + j +") = " +Table1.cellText(i, j) + "\n"
+ end
+end
+TextBrowser1.setText(result)
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="StatusBar" row="4" column="0" rowspan="1" colspan="7">
+ <property name="name">
+ <cstring>StatusBar7</cstring>
+ </property>
+ </widget>
+ <widget class="Table" row="0" column="0" rowspan="1" colspan="7">
+ <column>
+ <property name="text">
+ <string>0</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>1</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>2</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>3</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>4</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>5</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>6</string>
+ </property>
+ </column>
+ <row>
+ <property name="text">
+ <string>0</string>
+ </property>
+ </row>
+ <row>
+ <property name="text">
+ <string>1</string>
+ </property>
+ </row>
+ <row>
+ <property name="text">
+ <string>2</string>
+ </property>
+ </row>
+ <row>
+ <property name="text">
+ <string>3</string>
+ </property>
+ </row>
+ <row>
+ <property name="text">
+ <string>4</string>
+ </property>
+ </row>
+ <row>
+ <property name="text">
+ <string>5</string>
+ </property>
+ </row>
+ <row>
+ <property name="text">
+ <string>6</string>
+ </property>
+ </row>
+ <row>
+ <property name="text">
+ <string>7</string>
+ </property>
+ </row>
+ <row>
+ <property name="text">
+ <string>8</string>
+ </property>
+ </row>
+ <row>
+ <property name="text">
+ <string>9</string>
+ </property>
+ </row>
+ <row>
+ <property name="text">
+ <string>10</string>
+ </property>
+ </row>
+ <property name="name">
+ <cstring>Table1</cstring>
+ </property>
+ <property name="numRows">
+ <number>11</number>
+ </property>
+ <property name="numCols">
+ <number>7</number>
+ </property>
+ <property name="selectionMode">
+ <enum>Single</enum>
+ </property>
+ <property name="populationText">
+ <string></string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton" row="1" column="5">
+ <property name="name">
+ <cstring>ExecButton85</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>24</width>
+ <height>24</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>//_CPrange = rows cols
+//_CPdata = a[0] = R0C0 - R0Cx for each row
+range = Table1.selection
+startrow = str_section(range, ",", 0)
+startcol = str_section(range, ",", 1)
+endrow = str_section(range, ",", 2)
+endcol = str_section(range, ",", 3)
+
+array_clear("_CPdata")
+_CPrange[0] = str_toint(endrow)-str_toint(startrow)
+_CPrange[1] = str_toint(endcol)-str_toint(startcol)
+//debug("range size: "+_CPrange[0]+" - "+_CPrange[1])
+c = 0
+for i=startrow to endrow do
+ row = ""
+ for k = startcol to endcol do
+ if k &gt; startcol then
+ row = row + "\t"
+ endif
+ row = row + Table1.cellText(i, k)
+ end
+ _CPdata[c] = row
+ c = c + 1
+ //debug("i="+i+" k="+k+" c="+c+" row="+row)
+end
+//debug("end copy")
+</string>
+ </stringlist>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>copy range</string>
+ </property>
+ </widget>
+ <widget class="ExecButton" row="1" column="6">
+ <property name="name">
+ <cstring>ExecButton87</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>24</width>
+ <height>24</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>//_CPrange = "rows cols"
+//_CPdata = a[0] = R0C0 - R0Cx for each row
+range = Table1.selection
+startrow = str_section(range, ",", 0)
+startcol = str_section(range, ",", 1)
+endrow = str_section(range, ",", 2)
+endcol = str_section(range, ",", 3)
+
+if startrow == endrow &amp;&amp; startcol == endcol then
+ endrow = str_toint(startrow) + str_toint(_CPrange[0])
+ endcol = str_toint(startcol) + str_toint(_CPrange[1])
+endif
+//debug("endrow="+endrow+" endcol="+endcol)
+c = 0
+r = 0
+for i=startrow to endrow do
+ //debug(i+"-"+_CPdata[c])
+ for k = startcol to endcol do
+ if _CPrange[0] == 0 &amp;&amp; _CPrange[1] == 0 then
+ val = _CPdata[0]
+ else
+ val = str_section(_CPdata[c], "\t", r)
+ endif
+ Table1.setCellText(i, k, val)
+ r = r + 1
+ //debug("r="+r)
+ end
+ c = c + 1
+ r = 0
+end
+//debug("end paste")
+</string>
+ </stringlist>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>paste range</string>
+ </property>
+ </widget>
+ <widget class="PopupMenu" row="3" column="4">
+ <property name="name">
+ <cstring>PopupMenu1</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>AboutDialog9.execute</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="AboutDialog" row="3" column="3">
+ <property name="name">
+ <cstring>AboutDialog9</cstring>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="1202">789c6dd24b4fc2401405e03dbfa2a13b62005b041be3c2172a46e3d2c4b89867799487501030fe77ef3d9d2134740e0bbe9cd09c696835828ff7d7a0d1aaad72918f54a086621934f47a3add7d7e5dffd6ea5114d0274e82f3fa59adde0c54f0369f19fe2ee87b28628a65ce98ca28a3bbcc1553b72997cc2518510433043b14c57c00bb147004f6289a790f263a31d83005a596059f0e8c99dfa0d1c674988fa0d5d65c30fb4cd3a660e4331851307203c6948439003b146c7e01bb148cdc8297143003130a36af4141c1bbba012505efca80f4b26c9bb90769b4c58d2c48c746cc05d3b629b8d1183ca7e0463b30a2e0461330a6f49873b043c10573f08282f616ec52d06ab04791cc1f30a180435050705f054a0aee7b072a0aee9b8286c394200efe45a13ba279748a464aa9b4b1a5ead0a4436bc391a86ad4d80a3a55cdc466d3594523d3f9e27bb9aa6c725bda78b46dbd296df44dfab3c8b6a58dbe51bbc5fea6b4d135e9ed646cf7a58daeb9cb7d73d8e81a9d4fe8717ee3fd437868f2f9cefd8637f61f9f7c93e6fe69d8b879eebb46b8e3376e071bd7f8e337662fa74db171bd1d9c34c5c6aaa6d8989d366ee3e96fc4d169d6ffae6aff9c383860</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="2942">789c75964953dc481085effc8a0ee78d9848b754da2a26e680590c66c766194fcca1548b019bc5d080c131ff7db2f3154d771bf37cf9a4575999a527b5df2e0e4ef6b6078b6f176e476e74e607fed4dd0c16c3ddc5c5e33ffffef573e14d590ee45f51d483f2cd1f0b6ff647033fd8b9ba8c63a023016afbca9695f2c709d763e6a41cda605be55e39b6d176ca4b63eeaace7443e527e55aae14ca4e59fe1c98946d6733df2bbbaee950ff56b9efda0ef52f33f74e9be7af1346bfc763b6c3ba29757fda532e6a5b1ae5adcc0ef3d09a72d914a5557eca5c955ef9bbb269ea12e77396b93598af53ae9acea09f42b96e9cd17e382ab7b6755a8fbdb20cec82f295b26d6383f9ce955d9b1aed87d1afb7be6f94ff560e6d61c0fa7c5cdb3a83f5db63ee8bce985e7943b9ef82c17ee3874dbef25540ffebca8d1d1af4b792b9a9705fcfc777deb449b95596868253be56f69d2dc1cb605b19f08fcc2dead329d8fba0fdd117e5e863407f9b630e4391ee475a3f94a18ce8e744d90413352fa4e717ea50479cb7d60b8d2d4accdf284b6023f2abfb076917f7e9111cba88f3d4e71bac35f9bee63db8e0a2e691749ed0873eea79d383b20f3e223f9f9463e70be46d151c62443dcd771c8a701e3a6f2c4498ff4ed988506f57b912217f87cab52d0accbf0216e1f9d4ca4d6c12f2bfaf2cf92b500ff5e585c57dd6fea5dda6417ebf4f18fd7e00c72e613fcd57b436e0fd62d4b7d1265d4f9ab7e8a24b98ffbd72ef4c897c1e80639ff0bebe53f6ce96e8ff181c7dbeafdf9318fa26e7fd021c439e4ff31cc7dbe1f9dc82fb9c3f8ae01813def71be5e4db0a791982634a5a9fb47e1af6b541febe657615e65f078bb09f7e7f52e1e595523ecf1c2b3ccf0a2c425ef47b99cabeafb09fcb1c2ad423b02f2af4cf99fb0afd04b008df07ab6c4255e3bc2ec122dc2f95abe06abcdf37e0683ae461072cc2fb8a796b11bebf7b13c6facfca4d480df65b068b30afe63f75b16ee03f028b34bf8cfd6cec5b9cff2e58847c6b3e9213210f9abfd4a7618b7a9affe445b8aff94a21a616f557c1493ec8ca2673c87ecd9b3c6e8bf9f931b3ef90779f39663fce5bfff063f92ca689dccbd5694dfbb967cf212b72fa9d9fbff0299ff1397f15dfb7ac0bbee42bb97afa8aff9abff30ddff288efa634e27bb9fac0d7bff87ff0a3e8491cb35a92abef78f917ff0aaf8ad664c5acd6e4ea7b5effc5bfc11fe6b439a7ad19ff36efcc69339fd22eeff13e1fbcacc0ef1d7f9ad3b3ff908ff858fd275881df4bfe3ca717ff2e0fc5bf05657fc1e59c9efd46fc95f86b6eb89df83bb663490c881cf5d43ffbc9f321058a94e80b9d3efbe98ccee92b7da38b674dea4b4774c9077445d79819ffffa01bbaa5d18be097ea723e7447f7f4403fe871e27fa2257a37adb15fdc869629724d2bb262951e26fe357a3fabdccf2ead4bef1bf441566cd2fdc4bf45dbb352bfa11d391b394dda903d76a7fc7bb43f2bede74026cd7e99417698f83fd2273a9c96d6df1bfb734733fefd111dd1f1b4b4fea59cfcbad43fd67e66fcf312bf9cfbeffa79c5bff5bac4ffdf9f0bff0341cdbcc7</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>Table1</sender>
+ <signal>selectionChanged()</signal>
+ <receiver>ScriptObject88</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>Table1</sender>
+ <signal>contextMenuRequested(int,int)</signal>
+ <receiver>PopupMenu1</receiver>
+ <slot>popup(int,int)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/Makefile.am b/kommander/examples/old/Makefile.am
new file mode 100644
index 00000000..4708d071
--- /dev/null
+++ b/kommander/examples/old/Makefile.am
@@ -0,0 +1,7 @@
+execkmdrdir = ${kde_datadir}/kmdr-editor/editor/old
+
+execkmdr_SCRIPTS = checkmail.kmdr execprogram.kmdr\
+ form1.kmdr form3.kmdr form5.kmdr populate.kmdr selectedwidgettext.kmdr simplelist.kmdr tidy.kmdr\
+ wizard.kmdr ex1.kmdr firstform.kmdr.kmdr form2.kmdr form4.kmdr newfile.kmdr resize.kmdr settings.kmdr \
+ tar.kmdr widgetgenerator.kmdr
+ \ No newline at end of file
diff --git a/kommander/examples/old/checkmail.kmdr b/kommander/examples/old/checkmail.kmdr
new file mode 100644
index 00000000..d4fda432
--- /dev/null
+++ b/kommander/examples/old/checkmail.kmdr
@@ -0,0 +1,44 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>mail</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>mail</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>155</width>
+ <height>47</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Mail Checker</string>
+ </property>
+ <property name="useInternalParser">
+ <bool>false</bool>
+ </property>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>10</y>
+ <width>133</width>
+ <height>29</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Check &amp;Mail</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@dcop("kmail", "KMailIface", "checkMail()", "")</string>
+ </stringlist>
+ </property>
+ </widget>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/ex1.kmdr b/kommander/examples/old/ex1.kmdr
new file mode 100644
index 00000000..a916ee22
--- /dev/null
+++ b/kommander/examples/old/ex1.kmdr
@@ -0,0 +1,105 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>169</width>
+ <height>168</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Sentence Generator</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="GroupBox">
+ <property name="name">
+ <cstring>sentenceGen</cstring>
+ </property>
+ <property name="title">
+ <string>Words</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@lineEditOne@lineEditTwo@lineEditThree@lineEditFour@lineEditFive</string>
+ </stringlist>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>lineEditOne</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>lineEditTwo</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>lineEditThree</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>lineEditFour</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>lineEditFive</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/execprogram.kmdr b/kommander/examples/old/execprogram.kmdr
new file mode 100644
index 00000000..1149a3e2
--- /dev/null
+++ b/kommander/examples/old/execprogram.kmdr
@@ -0,0 +1,104 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form2</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>243</width>
+ <height>79</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Program Executor</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="FileSelector">
+ <property name="name">
+ <cstring>FileSelector3</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton3</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Run</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@FileSelector3</string>
+ </stringlist>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/firstform.kmdr.kmdr b/kommander/examples/old/firstform.kmdr.kmdr
new file mode 100644
index 00000000..68993392
--- /dev/null
+++ b/kommander/examples/old/firstform.kmdr.kmdr
@@ -0,0 +1,88 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>412</width>
+ <height>161</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Text Editor</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="TextEdit">
+ <property name="name">
+ <cstring>textEdit</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="FileSelector">
+ <property name="name">
+ <cstring>fileChooser</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>saveButton</cstring>
+ </property>
+ <property name="text">
+ <string>Save</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>echo '@textEdit' &gt; @fileChooser</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CloseButton">
+ <property name="name">
+ <cstring>closeButton</cstring>
+ </property>
+ <property name="text">
+ <string>Close</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/form1.kmdr b/kommander/examples/old/form1.kmdr
new file mode 100644
index 00000000..e44b1e14
--- /dev/null
+++ b/kommander/examples/old/form1.kmdr
@@ -0,0 +1,96 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>124</width>
+ <height>130</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Program Run Select</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ButtonGroup">
+ <property name="name">
+ <cstring>programButtonGroup</cstring>
+ </property>
+ <property name="title">
+ <string>Programs</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="RadioButton">
+ <property name="name">
+ <cstring>RadioButton2_2</cstring>
+ </property>
+ <property name="text">
+ <string>gvim</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string>gvim</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton">
+ <property name="name">
+ <cstring>RadioButton1</cstring>
+ </property>
+ <property name="text">
+ <string>gimp</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string>gimp</string>
+ </stringlist>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Start</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@programButtonGroup</string>
+ </stringlist>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/form2.kmdr b/kommander/examples/old/form2.kmdr
new file mode 100644
index 00000000..060fda56
--- /dev/null
+++ b/kommander/examples/old/form2.kmdr
@@ -0,0 +1,118 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>335</width>
+ <height>165</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout3</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="GroupBox">
+ <property name="name">
+ <cstring>GroupBox2</cstring>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="FileSelector">
+ <property name="name">
+ <cstring>programBox</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Run</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@GroupBox2</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CloseButton">
+ <property name="name">
+ <cstring>CloseButton1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Close</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/form3.kmdr b/kommander/examples/old/form3.kmdr
new file mode 100644
index 00000000..2b1ffbb2
--- /dev/null
+++ b/kommander/examples/old/form3.kmdr
@@ -0,0 +1,62 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>185</width>
+ <height>91</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CheckBox1</cstring>
+ </property>
+ <property name="text">
+ <string>Check me</string>
+ </property>
+ <property name="tristate">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>unchecked</string>
+ <string>semichecked</string>
+ <string>checked</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Run</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>gvim @CheckBox1</string>
+ </stringlist>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/form4.kmdr b/kommander/examples/old/form4.kmdr
new file mode 100644
index 00000000..831c2878
--- /dev/null
+++ b/kommander/examples/old/form4.kmdr
@@ -0,0 +1,88 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>369</width>
+ <height>318</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="TextEdit" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>TextEdit1</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton" row="1" column="0">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>Run</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@LineEdit1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>LineEdit1</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>TextEdit1</sender>
+ <signal>widgetTextChanged(const QString&amp;)</signal>
+ <receiver>LineEdit1</receiver>
+ <slot>setWidgetText(const QString&amp;)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/form5.kmdr b/kommander/examples/old/form5.kmdr
new file mode 100644
index 00000000..7efeafda
--- /dev/null
+++ b/kommander/examples/old/form5.kmdr
@@ -0,0 +1,346 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>423</width>
+ <height>269</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Echo Demo</string>
+ </property>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>usetext</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>120</x>
+ <y>120</y>
+ <width>281</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>du -h</string>
+ <comment>Test</comment>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1_3</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>230</x>
+ <y>170</y>
+ <width>90</width>
+ <height>30</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Echo+Exec</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>echo @usetext; @usetext</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ <property name="WriteStdout" stdset="0">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>121</y>
+ <width>101</width>
+ <height>30</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Enter command:</string>
+ </property>
+ </widget>
+ <widget class="FileSelector">
+ <property name="name">
+ <cstring>FileSelector1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>30</y>
+ <width>401</width>
+ <height>30</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1_2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>120</x>
+ <y>170</y>
+ <width>90</width>
+ <height>30</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Exec</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@usetext</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ <property name="WriteStdout" stdset="0">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton7</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>340</x>
+ <y>170</y>
+ <width>70</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>ls -l</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>ls -l</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ <property name="WriteStdout" stdset="0">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>7</y>
+ <width>231</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Select a file:</string>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>170</y>
+ <width>90</width>
+ <height>30</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Echo</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>echo @usetext</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ <property name="WriteStdout" stdset="0">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton7_2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>150</x>
+ <y>70</y>
+ <width>91</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Your File</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>echo You chose @FileSelector1</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="CloseButton">
+ <property name="name">
+ <cstring>CloseButton1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>340</x>
+ <y>210</y>
+ <width>70</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Close</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>echo "Thanks for testing"</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Try "What's this" on me!</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Like you need someone to tell you what this is?
+Wow that is so like lame man!
+
+Ha ha. We got it all with Kommander!</string>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton5</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>230</x>
+ <y>210</y>
+ <width>91</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>test</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>echo "Thanks for testing"</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ <property name="WriteStdout" stdset="0">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton9</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>210</y>
+ <width>91</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Count Files</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>echo filecount: `ls | wc -l`</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton9_2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>120</x>
+ <y>210</y>
+ <width>91</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Change Str</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>echo "ls | wc -l"</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>false</bool>
+ </property>
+ </widget>
+</widget>
+<connections>
+ <connection>
+ <sender>ExecButton9</sender>
+ <signal>widgetTextChanged(const QString&amp;)</signal>
+ <receiver>usetext</receiver>
+ <slot>setWidgetText(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>ExecButton9_2</sender>
+ <signal>widgetTextChanged(const QString&amp;)</signal>
+ <receiver>usetext</receiver>
+ <slot>setText(const QString&amp;)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/newfile.kmdr b/kommander/examples/old/newfile.kmdr
new file mode 100644
index 00000000..f02ca8e8
--- /dev/null
+++ b/kommander/examples/old/newfile.kmdr
@@ -0,0 +1,934 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>425</width>
+ <height>518</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Quick Start</string>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>40</x>
+ <y>140</y>
+ <width>40</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Title:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>21</x>
+ <y>5</y>
+ <width>410</width>
+ <height>36</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <family>Helvetica</family>
+ <pointsize>14</pointsize>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>HTML 4.01 Transitional - Quick Start</string>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBCVS</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>60</y>
+ <width>171</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>CVS tag in comment</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>&lt;!-- $Id$ --&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBHTML</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>80</y>
+ <width>131</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>HTML tag</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>&lt;html&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LEBasedir</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>170</x>
+ <y>120</y>
+ <width>231</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBDTD</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>40</y>
+ <width>161</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Show DTD</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBStyleArea</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>40</x>
+ <y>260</y>
+ <width>131</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Style area</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string> &lt;style&gt;
+
+ &lt;/style&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBMetaChar</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>40</x>
+ <y>200</y>
+ <width>140</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Meta character set:</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string> &lt;meta http-equiv="Content-Type" content="text/html; charset=@ComboMetachar"&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBStyle</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>40</x>
+ <y>240</y>
+ <width>140</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Linked style sheet:</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string> &lt;link rel="stylesheet" type="text/css" href="@LEStyle"&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LEMetaAuthor</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>180</x>
+ <y>180</y>
+ <width>220</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LEMetaKeywords</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>180</x>
+ <y>220</y>
+ <width>220</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>limit to 8, seperate with commas</string>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LEStyle</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>180</x>
+ <y>240</y>
+ <width>220</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ComboBox">
+ <item>
+ <property name="text">
+ <string>iso-8859-1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>iso-8859-2</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>iso-8859-3</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>iso-8859-4</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>iso-8859-5</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>iso-8859-6</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>iso-8859-7</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>iso-8859-8</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>iso-8859-8i</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>iso-8859-9</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>iso-8859-10</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>iso-8859-11</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>iso-8859-12</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>iso-8859-13</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>iso-8859-14</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>iso-8859-15</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>utf8</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>utf16</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>ComboMetachar</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>180</x>
+ <y>200</y>
+ <width>221</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBMetaKeywords</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>40</x>
+ <y>220</y>
+ <width>130</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Meta keywords:</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string> &lt;meta name="KEYWORDS" content="@LEMetaKeywords"&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBMetaAuthor</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>40</x>
+ <y>180</y>
+ <width>130</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Meta author:</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string> &lt;meta name="AUTHOR" content="@LEMetaAuthor"&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBBasedir</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>40</x>
+ <y>120</y>
+ <width>120</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Base directory:</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string> &lt;base href="@LEBasedir"&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBHead</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>100</y>
+ <width>130</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Head area</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>&lt;head&gt;
+@CBBasedir
+@LETitle
+@CBMetaQuanta
+@CBMetaAuthor
+@CBMetaChar
+@CBMetaKeywords
+@CBStyle
+@CBStyleArea
+@CBJavascript</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LETitle</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>90</x>
+ <y>140</y>
+ <width>311</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string> &lt;title&gt;@widgetText&lt;/title&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBBodyClose</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>380</y>
+ <width>91</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>/Body</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>&lt;/body&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBHTMLClose</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>400</y>
+ <width>101</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>/HTML</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>&lt;/html&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBHeadClose</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>300</y>
+ <width>70</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>/head</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>&lt;/head&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBJavascript</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>40</x>
+ <y>280</y>
+ <width>140</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>JavaScript area</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string> &lt;script language="javascript"&gt;
+
+ &lt;/script&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBBody</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>320</y>
+ <width>111</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Body tag</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>&lt;body&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>170</x>
+ <y>480</y>
+ <width>81</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>&amp;Test</string>
+ </property>
+ <property name="on">
+ <bool>false</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>echo '@CBDTD
+@CBCVS
+@CBHTML
+@CBHead
+@CBHeadClose
+@CBBody
+@CBPHPHeader
+@CBPHPFooter
+@CBBodyClose
+@CBHTMLClose'</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="CloseButton">
+ <property name="name">
+ <cstring>CloseButton1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>170</x>
+ <y>430</y>
+ <width>80</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="flat">
+ <bool>false</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>echo '@CBDTD
+@CBCVS
+@CBHTML
+@CBHead
+@CBHeadClose
+@CBBody
+@CBPHPHeader
+@CBPHPFooter
+@CBBodyClose
+@CBHTMLClose'</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LEPHPFooter</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>180</x>
+ <y>360</y>
+ <width>221</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LEPHPHeader</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>180</x>
+ <y>340</y>
+ <width>220</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBPHPHeader</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>340</y>
+ <width>150</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>PHP header include:</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>&lt;? include ("@LEPHPHeader") ?&gt;
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBPHPFooter</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>360</y>
+ <width>151</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>PHP footer include:</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>
+&lt;? include ("@LEPHPFooter") ?&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CBMetaQuanta</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>40</x>
+ <y>160</y>
+ <width>120</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Meta Quanta</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string> &lt;meta name="GENERATOR" content="Quanta Plus"&gt;</string>
+ </stringlist>
+ </property>
+ </widget>
+</widget>
+<connections>
+ <connection>
+ <sender>CBHead</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CBHeadClose</receiver>
+ <slot>toggle()</slot>
+ </connection>
+ <connection>
+ <sender>CBBody</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CBBodyClose</receiver>
+ <slot>toggle()</slot>
+ </connection>
+ <connection>
+ <sender>CBHTML</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CBHTMLClose</receiver>
+ <slot>toggle()</slot>
+ </connection>
+ <connection>
+ <sender>CBHead</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CBMetaAuthor</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>CBHead</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CBMetaQuanta</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>CBHead</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CBBasedir</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>CBHead</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>LEBasedir</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>CBHead</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>LETitle</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>CBHead</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CBMetaChar</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>CBHead</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CBMetaKeywords</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>CBHead</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CBStyle</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>CBHead</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CBStyleArea</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>CBHead</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CBJavascript</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>CBHead</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>LEMetaKeywords</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>CBHead</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>LEStyle</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>CBHead</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>ComboMetachar</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>CBHead</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>LEMetaAuthor</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/populate.kmdr b/kommander/examples/old/populate.kmdr
new file mode 100644
index 00000000..a5c5090d
--- /dev/null
+++ b/kommander/examples/old/populate.kmdr
@@ -0,0 +1,111 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Populate_Dialog</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Populate_Dialog</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>484</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Population Dialog</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>dirLineEdit</cstring>
+ </property>
+ <property name="text">
+ <string>~/</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>populateButton</cstring>
+ </property>
+ <property name="text">
+ <string>Update List</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="ListBox">
+ <property name="name">
+ <cstring>resultList</cstring>
+ </property>
+ <property name="populationText">
+ <string>@exec("ls -1 @dirLineEdit")</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+</widget>
+<connections>
+ <connection>
+ <sender>populateButton</sender>
+ <signal>clicked()</signal>
+ <receiver>resultList</receiver>
+ <slot>populate()</slot>
+ </connection>
+ <connection>
+ <sender>dirLineEdit</sender>
+ <signal>widgetOpened()</signal>
+ <receiver>resultList</receiver>
+ <slot>populate()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/resize.kmdr b/kommander/examples/old/resize.kmdr
new file mode 100644
index 00000000..27ff5309
--- /dev/null
+++ b/kommander/examples/old/resize.kmdr
@@ -0,0 +1,217 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>516</width>
+ <height>187</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Batch Image Resizer</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="FileSelector" row="0" column="1">
+ <property name="name">
+ <cstring>FileSelectorSrc</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ <property name="selectionType">
+ <enum>Directory</enum>
+ </property>
+ </widget>
+ <widget class="FileSelector" row="1" column="1">
+ <property name="name">
+ <cstring>FileSelectorDst</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ <property name="selectionType">
+ <enum>Directory</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Source directory:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Destination directory:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Width:</string>
+ </property>
+ </widget>
+ <widget class="SpinBoxInt">
+ <property name="name">
+ <cstring>SpinBoxWidth</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Height:</string>
+ </property>
+ </widget>
+ <widget class="SpinBoxInt">
+ <property name="name">
+ <cstring>SpinBoxHeight</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>141</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>251</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Resize</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>width=@SpinBoxWidth
+height=@SpinBoxHeight
+
+cd @FileSelectorSrc
+
+for file in *
+do
+ echo $file
+ convert -resize ${width}x${height} $file @FileSelectorDst/$file
+done
+</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/selectedwidgettext.kmdr b/kommander/examples/old/selectedwidgettext.kmdr
new file mode 100644
index 00000000..058b6d86
--- /dev/null
+++ b/kommander/examples/old/selectedwidgettext.kmdr
@@ -0,0 +1,105 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>210</width>
+ <height>100</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Selected Text Demo</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ListBox">
+ <item>
+ <property name="text">
+ <string>gvim</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>xboard</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>kate</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>commandListBox</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@selectedWidgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>Run</string>
+ </property>
+ <property name="populationText">
+ <string></string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@commandListBox</string>
+ </stringlist>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </hbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/settings.kmdr b/kommander/examples/old/settings.kmdr
new file mode 100644
index 00000000..1e028434
--- /dev/null
+++ b/kommander/examples/old/settings.kmdr
@@ -0,0 +1,264 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>settingsDialog</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>settingsDialog</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>533</width>
+ <height>482</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Settings Dialog</string>
+ </property>
+ <property name="populationText">
+ <string></string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string></string>
+ </stringlist>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout7</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Enter any text you want in the widgets below - Kommander will remember it!</string>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>lineEdit</cstring>
+ </property>
+ <property name="populationText">
+ <string>@readSetting( "lineEditValue", "Default Line Edit Value" )</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="TextEdit">
+ <property name="name">
+ <cstring>textEdit</cstring>
+ </property>
+ <property name="populationText">
+ <string>@readSetting("textEditValue", "Default Text Edit Value")</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout6</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>dirLineEdit</cstring>
+ </property>
+ <property name="populationText">
+ <string>@readSetting("dirLineEdit", "~/")</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>Update</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>ls -1 @dirLineEdit</string>
+ </stringlist>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="ListBox">
+ <property name="name">
+ <cstring>listBox</cstring>
+ </property>
+ <property name="populationText">
+ <string>@readSetting("listBoxValue", "Default
+List
+Box
+Items")
+</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="CloseButton">
+ <property name="name">
+ <cstring>CloseButton1</cstring>
+ </property>
+ <property name="text">
+ <string>Close</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@writeSetting("lineEditValue", "@lineEdit" )
+@writeSetting("textEditValue", "@textEdit" )
+@writeSetting("listBoxValue", "@listBox" )
+@writeSetting("dirLineEdit", "@dirLineEdit")</string>
+ </stringlist>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>settingsDialog</sender>
+ <signal>widgetOpened()</signal>
+ <receiver>lineEdit</receiver>
+ <slot>populate()</slot>
+ </connection>
+ <connection>
+ <sender>settingsDialog</sender>
+ <signal>widgetOpened()</signal>
+ <receiver>textEdit</receiver>
+ <slot>populate()</slot>
+ </connection>
+ <connection>
+ <sender>settingsDialog</sender>
+ <signal>widgetOpened()</signal>
+ <receiver>listBox</receiver>
+ <slot>populate()</slot>
+ </connection>
+ <connection>
+ <sender>ExecButton1</sender>
+ <signal>widgetTextChanged(const QString&amp;)</signal>
+ <receiver>listBox</receiver>
+ <slot>setWidgetText(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>settingsDialog</sender>
+ <signal>widgetOpened()</signal>
+ <receiver>dirLineEdit</receiver>
+ <slot>populate()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/simplelist.kmdr b/kommander/examples/old/simplelist.kmdr
new file mode 100644
index 00000000..42a32323
--- /dev/null
+++ b/kommander/examples/old/simplelist.kmdr
@@ -0,0 +1,214 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>372</width>
+ <height>189</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>10</y>
+ <width>300</width>
+ <height>30</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <family>Helvetica</family>
+ <pointsize>16</pointsize>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Simple List Short Demo</string>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton12</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>140</y>
+ <width>80</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Echo</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>echo ls @CheckBox17 @CheckBox18 @CheckBox19</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton12_2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>100</x>
+ <y>140</y>
+ <width>80</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Exec</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>ls @CheckBox17 @CheckBox18 @CheckBox19</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton12_3</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>190</x>
+ <y>140</y>
+ <width>80</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Echo+Exec</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>echo ls @CheckBox17 @CheckBox18 @CheckBox19;ls @CheckBox17 @CheckBox18 @CheckBox19</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="CloseButton">
+ <property name="name">
+ <cstring>CloseButton5</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>280</x>
+ <y>140</y>
+ <width>81</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Close</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>echo "Thanks for testing"</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CheckBox17</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>30</x>
+ <y>50</y>
+ <width>100</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string> Long</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <property name="tristate">
+ <bool>false</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>-l</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CheckBox18</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>30</x>
+ <y>70</y>
+ <width>101</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>All</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>-a</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CheckBox19</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>30</x>
+ <y>100</y>
+ <width>110</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Recursive</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>-R</string>
+ </stringlist>
+ </property>
+ </widget>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/tar.kmdr b/kommander/examples/old/tar.kmdr
new file mode 100644
index 00000000..37fcd10d
--- /dev/null
+++ b/kommander/examples/old/tar.kmdr
@@ -0,0 +1,479 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>513</width>
+ <height>557</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Tar</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ButtonGroup">
+ <property name="name">
+ <cstring>mainChoice</cstring>
+ </property>
+ <property name="title">
+ <string>Main Choice</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="RadioButton">
+ <property name="name">
+ <cstring>RadioButton1</cstring>
+ </property>
+ <property name="text">
+ <string>Append to archive</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string>A</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton">
+ <property name="name">
+ <cstring>RadioButton2</cstring>
+ </property>
+ <property name="text">
+ <string>Create archive</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="RadioButton">
+ <property name="name">
+ <cstring>RadioButton3</cstring>
+ </property>
+ <property name="text">
+ <string>Find differences between archive and file system</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="RadioButton">
+ <property name="name">
+ <cstring>RadioButton4</cstring>
+ </property>
+ <property name="text">
+ <string>Delete from archive</string>
+ </property>
+ </widget>
+ <widget class="RadioButton">
+ <property name="name">
+ <cstring>RadioButton5</cstring>
+ </property>
+ <property name="text">
+ <string>Append to the end of an archive</string>
+ </property>
+ </widget>
+ <widget class="RadioButton">
+ <property name="name">
+ <cstring>RadioButton6</cstring>
+ </property>
+ <property name="text">
+ <string>List contents</string>
+ </property>
+ </widget>
+ <widget class="RadioButton">
+ <property name="name">
+ <cstring>RadioButton7</cstring>
+ </property>
+ <property name="text">
+ <string>Update contents</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton">
+ <property name="name">
+ <cstring>RadioButton8</cstring>
+ </property>
+ <property name="text">
+ <string>Extract archive</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout9</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ButtonGroup">
+ <property name="name">
+ <cstring>ButtonGroup2</cstring>
+ </property>
+ <property name="title">
+ <string>Read Options</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CheckBox1</cstring>
+ </property>
+ <property name="text">
+ <string>Ignore failed read</string>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CheckBox2</cstring>
+ </property>
+ <property name="text">
+ <string>Keep existing files</string>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CheckBox3</cstring>
+ </property>
+ <property name="text">
+ <string>Extract all protection information</string>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CheckBox4</cstring>
+ </property>
+ <property name="text">
+ <string>Absolute path names</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="ButtonGroup">
+ <property name="name">
+ <cstring>ButtonGroup3</cstring>
+ </property>
+ <property name="lineWidth">
+ <number>1</number>
+ </property>
+ <property name="title">
+ <string>Write Options</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CheckBox5</cstring>
+ </property>
+ <property name="text">
+ <string>Dump files, not just symlinks</string>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CheckBox6</cstring>
+ </property>
+ <property name="text">
+ <string>Remove files after adding to archive</string>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CheckBox7</cstring>
+ </property>
+ <property name="text">
+ <string>Verbosely list files proceeded</string>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CheckBox8</cstring>
+ </property>
+ <property name="text">
+ <string>Compression</string>
+ </property>
+ </widget>
+ <widget class="ButtonGroup">
+ <property name="name">
+ <cstring>ButtonGroup4</cstring>
+ </property>
+ <property name="lineWidth">
+ <number>0</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer4_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout7</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="RadioButton">
+ <property name="name">
+ <cstring>RadioButton9</cstring>
+ </property>
+ <property name="text">
+ <string>bzip</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="RadioButton">
+ <property name="name">
+ <cstring>RadioButton10</cstring>
+ </property>
+ <property name="text">
+ <string>gzip</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout5</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Archive name:</string>
+ </property>
+ </widget>
+ <widget class="FileSelector">
+ <property name="name">
+ <cstring>outputName</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout6</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Files:</string>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LineEdit1</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>103</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Execute</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>104</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="CloseButton">
+ <property name="name">
+ <cstring>CloseButton1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Close</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>103</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/tidy.kmdr b/kommander/examples/old/tidy.kmdr
new file mode 100644
index 00000000..096dec40
--- /dev/null
+++ b/kommander/examples/old/tidy.kmdr
@@ -0,0 +1,1159 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Tidy</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Tidy</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>578</width>
+ <height>611</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Tidy by Kommander</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="TabWidget" row="0" column="0" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>TabWidget1</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>General Options</string>
+ </attribute>
+ <widget class="GroupBox">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>11</y>
+ <width>437</width>
+ <height>110</height>
+ </rect>
+ </property>
+ <property name="title">
+ <string>Non Tidy Option</string>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>50</y>
+ <width>310</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ <italic>1</italic>
+ </font>
+ </property>
+ <property name="text">
+ <string>Note: This will not work well if you have multiple
+instances of Quanta running.</string>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>GUseDCOP</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>20</y>
+ <width>320</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Use DCOP to send active page from Quanta+ to tidy</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ </widget>
+ <widget class="FileSelector">
+ <property name="name">
+ <cstring>GconfigF</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>377</y>
+ <width>437</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>127</y>
+ <width>437</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Path to tidy (required):</string>
+ </property>
+ </widget>
+ <widget class="FileSelector">
+ <property name="name">
+ <cstring>GoutF</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>309</y>
+ <width>437</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>GinputEN</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>211</y>
+ <width>437</width>
+ <height>24</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Input from file instead of stdin:</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>0</string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>GerrorEN</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>415</y>
+ <width>437</width>
+ <height>24</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Write errors to file instead of stderr:</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>0</string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>GconfigEN</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>347</y>
+ <width>437</width>
+ <height>24</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Use configuration from file:</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>0</string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>GoutputEN</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>279</y>
+ <width>437</width>
+ <height>24</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Output to file instead of stdout:</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>0</string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="FileSelector">
+ <property name="name">
+ <cstring>GinF</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>241</y>
+ <width>437</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="FileSelector">
+ <property name="name">
+ <cstring>GerrorF</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>445</y>
+ <width>437</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>GmodF</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>483</y>
+ <width>437</width>
+ <height>24</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Modify original input files</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>0</string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="FileSelector">
+ <property name="name">
+ <cstring>GtidyPath</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>173</y>
+ <width>437</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>454</x>
+ <y>173</y>
+ <width>89</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>/usr/bin</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>echo "/usr/bin/tidy"</string>
+ </stringlist>
+ </property>
+ </widget>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Processing Directives</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="CheckBox" row="13" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>ParseAsHTML</cstring>
+ </property>
+ <property name="text">
+ <string>Force XHTML to well formed HTML</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox" row="12" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>ParseAsXHTML</cstring>
+ </property>
+ <property name="text">
+ <string>Convert HTML to well formed XHTML</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox" row="4" column="0">
+ <property name="name">
+ <cstring>ParseClean</cstring>
+ </property>
+ <property name="text">
+ <string>Replace FONT, NOBR and CENTER tags by CSS</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>0</string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox" row="3" column="0">
+ <property name="name">
+ <cstring>ParseUpper</cstring>
+ </property>
+ <property name="text">
+ <string>Force tags to upper case</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>0</string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox" row="10" column="0">
+ <property name="name">
+ <cstring>ParseXML</cstring>
+ </property>
+ <property name="text">
+ <string>Specify the input is well formed XML</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox" row="9" column="0">
+ <property name="name">
+ <cstring>ParseOmit</cstring>
+ </property>
+ <property name="text">
+ <string>Omit optional end tags</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Do extra accessibility checks &lt;level&gt;:</string>
+ </property>
+ </widget>
+ <widget class="SpinBoxInt" row="1" column="1">
+ <property name="name">
+ <cstring>ParseWrap</cstring>
+ </property>
+ <property name="maxValue">
+ <number>500</number>
+ </property>
+ <property name="minValue">
+ <number>68</number>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox" row="6" column="0">
+ <property name="name">
+ <cstring>ParseNumeric</cstring>
+ </property>
+ <property name="text">
+ <string>Output numeric rather than named entities</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox" row="7" column="0">
+ <property name="name">
+ <cstring>ParseErrors</cstring>
+ </property>
+ <property name="text">
+ <string>Only show errors</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="SpinBoxInt" row="0" column="1">
+ <property name="name">
+ <cstring>ParseAccess</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Wrap text at column:</string>
+ </property>
+ </widget>
+ <widget class="CheckBox" row="11" column="0">
+ <property name="name">
+ <cstring>ParseAsXML</cstring>
+ </property>
+ <property name="text">
+ <string>Convert HTML to well formed XML</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox" row="2" column="0">
+ <property name="name">
+ <cstring>ParseIndent</cstring>
+ </property>
+ <property name="text">
+ <string>Indent element content</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>0</string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox" row="5" column="0">
+ <property name="name">
+ <cstring>ParseBare</cstring>
+ </property>
+ <property name="text">
+ <string>Strip out smart quotes and em dashes, etc.</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>0</string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox" row="8" column="0">
+ <property name="name">
+ <cstring>ParseQuiet</cstring>
+ </property>
+ <property name="text">
+ <string>Suppress nonessential output</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>1</string>
+ </stringlist>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Character Encodings</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ButtonGroup" row="0" column="0">
+ <property name="name">
+ <cstring>CharEncoding</cstring>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="RadioButton" row="9" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>CEibm858</cstring>
+ </property>
+ <property name="text">
+ <string>(ibm858) use IBM-858 (CP850+Euro) for input, US-ASCII for output</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string> -ibm858</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton" row="1" column="0">
+ <property name="name">
+ <cstring>CEraw</cstring>
+ </property>
+ <property name="text">
+ <string>(raw) output values above 127 without conversion to entities</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string> -raw</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton" row="10" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>CEutf16Le</cstring>
+ </property>
+ <property name="text">
+ <string>(utf16le) use UTF-16LE for both input and output</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string> -utf16le</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton" row="4" column="0">
+ <property name="name">
+ <cstring>CElatin1</cstring>
+ </property>
+ <property name="text">
+ <string>(latin1) use ISO-8859-1 for both input and output</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string> -latin1</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton" row="8" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>CEwin1252</cstring>
+ </property>
+ <property name="text">
+ <string>(win1252) use Windows-1252 for input, US-ASCII for output</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string> -win1252</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="15" column="1">
+ <property name="name">
+ <cstring>CE</cstring>
+ </property>
+ <property name="maxLength">
+ <number>2</number>
+ </property>
+ </widget>
+ <widget class="RadioButton" row="14" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>CEshiftjis</cstring>
+ </property>
+ <property name="text">
+ <string>(shiftjis) use Shift_JIS for both input and output</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string> -shiftjis</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton" row="11" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>CEutf16be</cstring>
+ </property>
+ <property name="text">
+ <string>(utf16be) use UTF-16BE for both input and output</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string> -utf16be</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton" row="2" column="0">
+ <property name="name">
+ <cstring>CEascii</cstring>
+ </property>
+ <property name="text">
+ <string>(ascii) use US-ASCII for output, ISO-8859-1 for input</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string> -ascii</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton" row="15" column="0">
+ <property name="name">
+ <cstring>CElangcode</cstring>
+ </property>
+ <property name="text">
+ <string>Set the two-letter language code &lt;lang&gt; (for future use):</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string> -language @CE</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton" row="12" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>CEutf16</cstring>
+ </property>
+ <property name="text">
+ <string>(utf16) use UTF-16 for both input and output</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string> -utf16</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton" row="13" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>CEbig5</cstring>
+ </property>
+ <property name="text">
+ <string>(big5) use Big5 for both input and output</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string> -big5</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton" row="6" column="0">
+ <property name="name">
+ <cstring>CEutf8</cstring>
+ </property>
+ <property name="text">
+ <string>(utf8) use UTF-8 for both input and output</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string> -utf8</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>CElatin0</cstring>
+ </property>
+ <property name="text">
+ <string>(latin0) use US-ASCII for output, ISO-8859-1 for input</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string> -latin0</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton" row="7" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>CEmac</cstring>
+ </property>
+ <property name="text">
+ <string>(mac) use MacRoman for input, US-ASCII for output</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string> -mac</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton" row="5" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>CEiso2022</cstring>
+ </property>
+ <property name="text">
+ <string>(iso2022) use ISO-2022 for both input and output</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string> -iso2022</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="RadioButton" row="0" column="0">
+ <property name="name">
+ <cstring>RadioButton16</cstring>
+ </property>
+ <property name="text">
+ <string>Bah, encoding, schmencoding</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>About Tidy</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="TextEdit" row="0" column="0">
+ <property name="name">
+ <cstring>TextEdit1</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="paletteBackgroundColor">
+ <color>
+ <red>238</red>
+ <green>238</green>
+ <blue>230</blue>
+ </color>
+ </property>
+ <property name="text">
+ <string>HTML Tidy Configuration Settings
+
+Within a file, use the form:
+
+wrap: 72
+split: no
+
+When specified on the command line, use the form:
+
+--wrap 72 --split no
+
+Name Type Allowable values
+==================== ========= ==============================
+indent-spaces Integer 0, 1, 2, ...
+wrap Integer 0 (no wrapping), 1, 2, ...
+tab-size Integer 0, 1, 2, ...
+char-encoding Encoding ascii, latin0, latin1, raw, utf8, iso202
+ utf16le, utf16be, utf16,
+ mac, win1252, ibm858, big5, shiftjis
+input-encoding Encoding ascii, latin0, latin1, raw, utf8, iso202
+ utf16le, utf16be, utf16,
+ mac, win1252, ibm858, big5, shiftjis
+output-encoding Encoding ascii, latin0, latin1, raw, utf8, iso202
+ utf16le, utf16be, utf16,
+ mac, win1252, ibm858, big5, shiftjis
+newline enum LF, CRLF, CR
+doctype DocType auto, omit, strict, loose, transitional,
+ user specified fpi (string)
+repeated-attributes enum keep-first, keep-last
+alt-text String -
+slide-style String -
+error-file String -
+output-file String -
+write-back Boolean y/n, yes/no, t/f, true/false, 1/0
+markup Boolean y/n, yes/no, t/f, true/false, 1/0
+show-warnings Boolean y/n, yes/no, t/f, true/false, 1/0
+quiet Boolean y/n, yes/no, t/f, true/false, 1/0
+indent AutoBool auto, y/n, yes/no, t/f, true/false, 1/0
+hide-endtags Boolean y/n, yes/no, t/f, true/false, 1/0
+input-xml Boolean y/n, yes/no, t/f, true/false, 1/0
+output-xml Boolean y/n, yes/no, t/f, true/false, 1/0
+output-xhtml Boolean y/n, yes/no, t/f, true/false, 1/0
+output-html Boolean y/n, yes/no, t/f, true/false, 1/0
+add-xml-decl Boolean y/n, yes/no, t/f, true/false, 1/0
+uppercase-tags Boolean y/n, yes/no, t/f, true/false, 1/0
+uppercase-attributes Boolean y/n, yes/no, t/f, true/false, 1/0
+bare Boolean y/n, yes/no, t/f, true/false, 1/0
+clean Boolean y/n, yes/no, t/f, true/false, 1/0
+logical-emphasis Boolean y/n, yes/no, t/f, true/false, 1/0
+drop-proprietary-attributes Boolean y/n, yes/no, t/f, true/false, 1/0
+drop-font-tags Boolean y/n, yes/no, t/f, true/false, 1/0
+drop-empty-paras Boolean y/n, yes/no, t/f, true/false, 1/0
+fix-bad-comments Boolean y/n, yes/no, t/f, true/false, 1/0
+break-before-br Boolean y/n, yes/no, t/f, true/false, 1/0
+split Boolean y/n, yes/no, t/f, true/false, 1/0
+numeric-entities Boolean y/n, yes/no, t/f, true/false, 1/0
+quote-marks Boolean y/n, yes/no, t/f, true/false, 1/0
+quote-nbsp Boolean y/n, yes/no, t/f, true/false, 1/0
+quote-ampersand Boolean y/n, yes/no, t/f, true/false, 1/0
+wrap-attributes Boolean y/n, yes/no, t/f, true/false, 1/0
+wrap-script-literals Boolean y/n, yes/no, t/f, true/false, 1/0
+wrap-sections Boolean y/n, yes/no, t/f, true/false, 1/0
+wrap-asp Boolean y/n, yes/no, t/f, true/false, 1/0
+wrap-jste Boolean y/n, yes/no, t/f, true/false, 1/0
+wrap-php Boolean y/n, yes/no, t/f, true/false, 1/0
+fix-backslash Boolean y/n, yes/no, t/f, true/false, 1/0
+indent-attributes Boolean y/n, yes/no, t/f, true/false, 1/0
+assume-xml-procins Boolean y/n, yes/no, t/f, true/false, 1/0
+add-xml-space Boolean y/n, yes/no, t/f, true/false, 1/0
+enclose-text Boolean y/n, yes/no, t/f, true/false, 1/0
+enclose-block-text Boolean y/n, yes/no, t/f, true/false, 1/0
+keep-time Boolean y/n, yes/no, t/f, true/false, 1/0
+word-2000 Boolean y/n, yes/no, t/f, true/false, 1/0
+tidy-mark Boolean y/n, yes/no, t/f, true/false, 1/0
+gnu-emacs Boolean y/n, yes/no, t/f, true/false, 1/0
+gnu-emacs-file String -
+literal-attributes Boolean y/n, yes/no, t/f, true/false, 1/0
+show-body-only Boolean y/n, yes/no, t/f, true/false, 1/0
+fix-uri Boolean y/n, yes/no, t/f, true/false, 1/0
+lower-literals Boolean y/n, yes/no, t/f, true/false, 1/0
+hide-comments Boolean y/n, yes/no, t/f, true/false, 1/0
+indent-cdata Boolean y/n, yes/no, t/f, true/false, 1/0
+force-output Boolean y/n, yes/no, t/f, true/false, 1/0
+show-errors Integer 0, 1, 2, ...
+ascii-chars Boolean y/n, yes/no, t/f, true/false, 1/0
+join-classes Boolean y/n, yes/no, t/f, true/false, 1/0
+join-styles Boolean y/n, yes/no, t/f, true/false, 1/0
+escape-cdata Boolean y/n, yes/no, t/f, true/false, 1/0
+language String -
+ncr Boolean y/n, yes/no, t/f, true/false, 1/0
+output-bom AutoBool auto, y/n, yes/no, t/f, true/false, 1/0
+replace-color Boolean y/n, yes/no, t/f, true/false, 1/0
+css-prefix Name CSS1 selector
+new-inline-tags Tag names tagX, tagY, ...
+new-blocklevel-tags Tag names tagX, tagY, ...
+new-empty-tags Tag names tagX, tagY, ...
+new-pre-tags Tag names tagX, tagY, ...
+accessibility-check Integer 0, 1, 2, ...
+</string>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </widget>
+ <widget class="ExecButton" row="1" column="1">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>Process</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>tidyargs="@GtidyPath @CharEncoding"
+
+[ 1 -eq @GmodF ] &amp;&amp; tidyargs="$tidyargs -m"
+[ 1 -eq @GoutputEN ] &amp;&amp; tidyargs="$tidyargs -o @GoutF"
+[ 1 -eq @GerrorEN ] &amp;&amp; tidyargs="$tidyargs -f @GerrorF"
+[ 1 -eq @GconfigEN ] &amp;&amp; tidyargs="$tidyargs -config @GconfigF"
+[ 1 -eq @GinputEN ] &amp;&amp; tidyargs="$tidyargs @GinF"
+[ 1 -eq @ParseIndent ] &amp;&amp; tidyargs="$tidyargs -i"
+[ 68 -lt @ParseWrap ] &amp;&amp; tidyargs="$tidyargs -wrap @ParseWrap"
+[ 1 -eq @ParseUpper ] &amp;&amp; tidyargs="$tidyargs -u"
+[ 1 -eq @ParseClean ] &amp;&amp; tidyargs="$tidyargs -c"
+[ 1 -eq @ParseBare ] &amp;&amp; tidyargs="$tidyargs -b"
+[ 1 -eq @ParseNumeric ] &amp;&amp; tidyargs="$tidyargs -n"
+[ 1 -eq @ParseErrors ] &amp;&amp; tidyargs="$tidyargs -e"
+[ 1 -eq @ParseQuiet ] &amp;&amp; tidyargs="$tidyargs -q"
+[ 1 -eq @ParseOmit ] &amp;&amp; tidyargs="$tidyargs -omit"
+[ 1 -eq @ParseXML ] &amp;&amp; tidyargs="$tidyargs -xml"
+[ 1 -eq @ParseAsHTML ] &amp;&amp; tidyargs="$tidyargs -asxml"
+[ 1 -eq @ParseAsXHTML ] &amp;&amp; tidyargs="$tidyargs -asxhtml"
+[ 1 -eq @ParseAsHTML ] &amp;&amp; tidyargs="$tidyargs -ashtml"
+[ 0 -lt @ParseAccess ] &amp;&amp; tidyargs="$tidyargs -access @ParseAccess"
+
+if [ @GUseDCOP -eq 1 ]; then
+ dcopid=`dcop quanta*`
+ ifstr="EditInterface#"`dcop $dcopid WindowManagerIf currentEditorIfNum`
+ dcop $dcopid $ifstr text | $tidyargs
+else
+ $tidyargs
+fi
+</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="CloseButton" row="1" column="2">
+ <property name="name">
+ <cstring>CloseButton1</cstring>
+ </property>
+ <property name="text">
+ <string>Eject! Eject! Eject!</string>
+ </property>
+ </widget>
+ <spacer row="1" column="0">
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>131</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="1" column="3">
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>121</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>GoutputEN</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>GoutF</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>GconfigEN</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>GconfigF</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>GerrorEN</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>GerrorF</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>GinputEN</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>GinF</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>GinputEN</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>GmodF</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>ExecButton2</sender>
+ <signal>widgetTextChanged(const QString&amp;)</signal>
+ <receiver>GtidyPath</receiver>
+ <slot>setWidgetText(const QString&amp;)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/widgetgenerator.kmdr b/kommander/examples/old/widgetgenerator.kmdr
new file mode 100644
index 00000000..00ef6262
--- /dev/null
+++ b/kommander/examples/old/widgetgenerator.kmdr
@@ -0,0 +1,438 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>widgetGen</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>widgetGen</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>470</width>
+ <height>267</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Kommander Widget Source Generator</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout12</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>24</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Save</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>
+classNameLower=$(echo '@className' | tr "A-Z" "a-z")
+classNameUpper=$(echo '@className' | tr "a-z" "A-Z")
+inheritClassHeader=$(echo '@inheritClassName' | tr "A-Z" "a-z")
+
+headerContent="/***************************************************************************
+ $classNameLower.h - @description
+ -------------------
+ begin : @dateStarted
+ copyright : (C) @author
+ email : @email
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_${classNameUpper}_H_
+#define _HAVE_${classNameUpper}_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include &lt;$inheritClassHeader.h&gt;
+#include &lt;qstring.h&gt;
+#include &lt;qstringlist.h&gt;
+
+/* OTHER INCLUDES */
+#include &lt;kommanderwidget.h&gt;
+
+class QWidget;
+
+class QShowEvent;
+class @className : public @inheritClassName, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+
+public:
+ @className(QWidget *a_parent, const char *a_name);
+ ~@className();
+
+ virtual QString widgetText() const;
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(QStringList);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+
+ virtual QString populationText() const;
+ virtual void setPopulationText(QString);
+
+public slots:
+ virtual void setWidgetText(const QString &amp;);
+ virtual void populate();
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString &amp;);
+protected:
+ void showEvent( QShowEvent *e );
+private:
+};
+
+#endif"
+
+cppContent="/***************************************************************************
+ $classNameLower.cpp - @description
+ -------------------
+ begin : @dateStarted
+ copyright : (C) @author
+ email : @email
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* KDE INCLUDES */
+#include &lt;klocale.h&gt;
+
+/* QT INCLUDES */
+#include &lt;qstring.h&gt;
+#include &lt;qwidget.h&gt;
+#include &lt;qstringlist.h&gt;
+#include &lt;$inheritClassHeader.h&gt;
+#include &lt;qevent.h&gt;
+
+/* OTHER INCLUDES */
+#include &lt;kommanderwidget.h&gt;
+#include \"$classNameLower.h\"
+
+@className::@className(QWidget *a_parent, const char *a_name)
+ : @inheritClassName(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states &lt;&lt; \"default\";
+ setStates(states);
+ setDisplayStates(states);
+}
+
+@className::~@className()
+{
+}
+
+QString @className::currentState() const
+{
+ return QString(\"default\");
+}
+
+bool @className::isKommanderWidget() const
+{
+ return TRUE;
+}
+
+QStringList @className::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void @className::setAssociatedText(QStringList a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void @className::populate()
+{
+ QString txt = KommanderWidget::evalAssociatedText( populationText() );
+ setWidgetText( txt );
+}
+
+QString @className::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void @className::setPopulationText(QString a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+void @className::setWidgetText(const QString &amp;a_text)
+{
+ //set the widget text of your widget here
+ emit widgetTextChanged(a_text);
+}
+
+QString @className::widgetText() const
+{
+ // implement your widget text here
+ return QString::null;
+}
+
+void @className::showEvent( QShowEvent *e )
+{
+ @inheritClassName::showEvent( e );
+ emit widgetOpened();
+}
+
+#include \"$classNameLower.moc\"
+"
+
+echo "$headerContent" &gt; @directory/$classNameLower.h
+echo "$cppContent" &gt; @directory/$classNameLower.cpp</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="CloseButton">
+ <property name="name">
+ <cstring>CloseButton1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Close</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout37</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Author:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Email:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Description:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Date started:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Class name:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel7</cstring>
+ </property>
+ <property name="text">
+ <string>Base class name:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Directory to save in:</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>Layout36</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>author</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>email</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>description</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>dateStarted</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>className</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>inheritClassName</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="FileSelector">
+ <property name="name">
+ <cstring>directory</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/old/wizard.kmdr b/kommander/examples/old/wizard.kmdr
new file mode 100755
index 00000000..87f50c38
--- /dev/null
+++ b/kommander/examples/old/wizard.kmdr
@@ -0,0 +1,301 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Wizard1</class>
+<widget class="QWizard">
+ <property name="name">
+ <cstring>Wizard1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>473</width>
+ <height>346</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Demo Wizard</string>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>page</cstring>
+ </property>
+ <attribute name="title">
+ <string>Page 1</string>
+ </attribute>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>ScriptObject1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>131</x>
+ <y>159</y>
+ <width>32</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="populationText">
+ <string></string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@dcop(@dcopid, KommanderIf, enableWidget(QString,bool), next, @CheckBox1.checked)
+
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CheckBox1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>131</x>
+ <y>70</y>
+ <width>199</width>
+ <height>24</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Select this t&amp;o enable Next</string>
+ </property>
+ <property name="populationText">
+ <string></string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="Label">
+ <property name="name">
+ <cstring>Label1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>220</y>
+ <width>320</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Try the help button from any page!</string>
+ </property>
+ </widget>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>ScriptObject8</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>200</x>
+ <y>160</y>
+ <width>32</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@Message.info(Help was pressed for @LineEdit6.text, Help)</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LineEdit6</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>130</x>
+ <y>100</y>
+ <width>141</width>
+ <height>31</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>ScriptObject60</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>34</x>
+ <y>114</y>
+ <width>32</width>
+ <height>32</height>
+ </rect>
+ </property>
+ </widget>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>page</cstring>
+ </property>
+ <attribute name="title">
+ <string>Page 2</string>
+ </attribute>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>ScriptObject1_2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>141</x>
+ <y>169</y>
+ <width>32</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="populationText">
+ <string></string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@dcop(@dcopid, KommanderIf, enableWidget(QString,bool), next, @CheckBox1_2.checked)
+
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CheckBox1_2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>141</x>
+ <y>80</y>
+ <width>199</width>
+ <height>24</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Select this t&amp;o enable Next</string>
+ </property>
+ <property name="populationText">
+ <string></string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>page</cstring>
+ </property>
+ <attribute name="title">
+ <string>Page 3</string>
+ </attribute>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>ScriptObject2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>138</x>
+ <y>169</y>
+ <width>32</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="populationText">
+ <string></string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@dcop(@dcopid, KommanderIf, enableWidget(QString,bool), finish, @CheckBox2.checked)
+
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>CheckBox2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>138</x>
+ <y>80</y>
+ <width>204</width>
+ <height>24</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Select this t&amp;o enable finish</string>
+ </property>
+ <property name="populationText">
+ <string></string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ </widget>
+</widget>
+<connections>
+ <connection>
+ <sender>CheckBox1</sender>
+ <signal>widgetOpened()</signal>
+ <receiver>ScriptObject1</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>CheckBox1</sender>
+ <signal>stateChanged(int)</signal>
+ <receiver>ScriptObject1</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>Wizard1</sender>
+ <signal>selected(const QString&amp;)</signal>
+ <receiver>ScriptObject1_2</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>Wizard1</sender>
+ <signal>selected(const QString&amp;)</signal>
+ <receiver>LineEdit6</receiver>
+ <slot>setText(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>CheckBox2</sender>
+ <signal>stateChanged(int)</signal>
+ <receiver>ScriptObject2</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>Wizard1</sender>
+ <signal>helpClicked()</signal>
+ <receiver>ScriptObject8</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>CheckBox1_2</sender>
+ <signal>widgetOpened()</signal>
+ <receiver>ScriptObject1_2</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>CheckBox1_2</sender>
+ <signal>stateChanged(int)</signal>
+ <receiver>ScriptObject1_2</receiver>
+ <slot>execute()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/Makefile.am b/kommander/examples/tutorial/Makefile.am
new file mode 100644
index 00000000..e654bdd2
--- /dev/null
+++ b/kommander/examples/tutorial/Makefile.am
@@ -0,0 +1,10 @@
+execkmdrdir = ${kde_datadir}/kmdr-editor/editor/tutorial
+
+execkmdr_SCRIPTS = append.kmdr calc.kmdr dcop.kmdr globals.kmdr loop.kmdr progressbar.kmdr slots.kmdr \
+ strings.kmdr tree.kmdr arrays.kmdr cmdline.kmdr dialogs.kmdr initialize.kmdr picview.kmdr settings.kmdr \
+ statusbar.kmdr table.kmdr widgets.kmdr
+
+
+tutorialdir = ${kde_datadir}/kmdr-editor/editor/tutorial
+tutorial_DATA = README
+
diff --git a/kommander/examples/tutorial/README b/kommander/examples/tutorial/README
new file mode 100644
index 00000000..658503e0
--- /dev/null
+++ b/kommander/examples/tutorial/README
@@ -0,0 +1,123 @@
+Those example illustrate various Kommander features.
+
+In the future they would be used together with Kommander tutorials.
+For now, only brief information is available
+
+
+* GLOBALS.KMDR
+Shows using global and setGlobal DCOP calls to provide global
+variables for script.
+Functions/concepts:
+- global
+- setGlobal
+- changeWidgetText
+
+* DCOP.KMDR
+Shows how to use both local and external DCOP calls to communicate
+with external application (here: KMail).
+Functions/concepts:
+- external DCOP
+- addListItem
+- enableWidget
+- @selectedWidgetText
+- @widgetText
+
+* SLOTS.KMDR
+Shows how to use connections/slots to handle events. Both population and
+standard slots are used.
+- slots/connections
+- populate()
+
+* SETTINGS.KMDR
+Shows how to use @readSetting and @writeSetting functions to write/restore
+widget content. Also, shows how to use populate() slot to initialize widget
+content.
+Functions/concepts:
+- @readSetting
+- @writeSetting
+- populate()
+- slots/connections
+- destroy
+
+* APPEND.KMDR
+Shows how you can append text to TextEdit, and how you can use it to display
+formatted text.
+Functions/concepts:
+- changeWidetText
+- RichTextEdit
+
+* CMDLINE.KMDR
+Shows how you can pass parameters to Kommander dialog via command-line.
+Also, shows how to change list content and button text.
+Functions/concepts:
+- command-line arguments
+- global
+- changeWidgetText
+- addListItem
+- clearList
+
+* INITIALIZE.KMDR
+Shows how you can use 'initialization' and 'destroy' scripts of main
+dialog to initialize and store some settings.
+Functions/concepts:
+- initialization
+- destroy
+- readSetting
+- writeSetting
+
+* ARRAY.KMDR
+Shows how to use assocative arrays to store and restore information
+associated with container items.
+Functions/concepts:
+- @Array functions
+
+* STRINGS.KMDR
+Shows how to use string-handling functions
+Functions/concepts:
+- @String functions
+- rich text editor
+
+* TREE.KMDR
+Shows how to use tree widget
+- tree widget
+- FileSelector
+- initialization
+- env
+
+* WIDGETS.KMDR
+Shows how to get widget information
+- type method
+- children method
+
+* STATUSBAR.KMDR
+Shows how to use statusbar widget
+- statusbar widget
+- populate
+
+* LOOP.KMDR
+Shows how to use internal loops
+- for
+- forEach
+
+* CALC.KMDR
+Shows how to use @expr function to do some calculations
+- expr
+- String.replace
+
+* PICVIEW.KMDR
+Shows how to use PixmapLabel widget using populate() function
+- PixmapLabel
+- populate
+- FileSelector
+- slots/connections
+
+* TABLE.KMDR
+Shows how to use Table widget
+- insertRow
+- insertColumn
+- currentRow
+- currentColumn
+- setColumnCaption
+- setRowCaption
+- removeRow
+- removeColumn
diff --git a/kommander/examples/tutorial/append.kmdr b/kommander/examples/tutorial/append.kmdr
new file mode 100644
index 00000000..fe22a4c3
--- /dev/null
+++ b/kommander/examples/tutorial/append.kmdr
@@ -0,0 +1,115 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>379</width>
+ <height>272</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Append date</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="TextEdit" row="0" column="0">
+ <property name="name">
+ <cstring>TextEdit1</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>Insert date</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>DATE="Button pressed: &lt;i&gt;`date`&lt;/i&gt;"
+TEXT='@TextEdit1'"$DATE"
+dcop @dcopid KommanderIf changeWidgetText TextEdit1 "$TEXT"
+</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/arrays.kmdr b/kommander/examples/tutorial/arrays.kmdr
new file mode 100644
index 00000000..dd4b18c6
--- /dev/null
+++ b/kommander/examples/tutorial/arrays.kmdr
@@ -0,0 +1,204 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>386</width>
+ <height>206</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Program array</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string>@Array.setValue(Programs, kcalc, KDE calculator)
+@Array.setValue(Programs, kwrite, Advanced editor)
+@Array.setValue(Programs, ark, Archive tool)
+@Array.setValue(Programs, kdict, Interface to online dictonaries)
+</string>
+ <string></string>
+ </stringlist>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Programs:</string>
+ </property>
+ </widget>
+ <widget class="ListBox" row="1" column="0">
+ <item>
+ <property name="text">
+ <string>kwrite</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>kcalc</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>kdict</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>ark</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>ListBox1</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@selectedWidgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="2" column="0">
+ <property name="name">
+ <cstring>LineEdit1</cstring>
+ </property>
+ <property name="backgroundOrigin">
+ <enum>ParentOrigin</enum>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ <property name="populationText">
+ <string>@Array.value(Programs, @ListBox1)</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="3" column="0">
+ <property name="name">
+ <cstring>Layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Run</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@exec(ListBox1)
+
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Run &amp;All</string>
+ </property>
+ <property name="populationText">
+ <string></string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@Array.keys(Programs)</string>
+ </stringlist>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>ListBox1</sender>
+ <signal>selectionChanged()</signal>
+ <receiver>LineEdit1</receiver>
+ <slot>populate()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/calc.kmdr b/kommander/examples/tutorial/calc.kmdr
new file mode 100644
index 00000000..5e0082f4
--- /dev/null
+++ b/kommander/examples/tutorial/calc.kmdr
@@ -0,0 +1,271 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>577</width>
+ <height>305</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Simple calculator</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string></string>
+ </stringlist>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>Layout7</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>History:</string>
+ </property>
+ </widget>
+ <widget class="ListBox">
+ <property name="name">
+ <cstring>ListBox1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>250</width>
+ <height>32767</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LineEdit2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>250</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="paletteBackgroundColor">
+ <color>
+ <red>233</red>
+ <green>233</green>
+ <blue>233</blue>
+ </color>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton2</cstring>
+ </property>
+ <property name="text">
+ <string>Cl&amp;ear</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@ListBox1.clear
+@LineEdit2.setText("Sum: 0")</string>
+ </stringlist>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout4</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Expression:</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="4" column="0">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Calculate</string>
+ </property>
+ <property name="autoDefault">
+ <bool>false</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@ListBox1.insertItem(@expr(@LineEdit1.text), -1)
+@LineEdit1.clear
+@LineEdit2.setText("Sum: @expr(@String.replace(@ListBox1.text, "\n", "+"))")
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="LineEdit" row="3" column="0">
+ <property name="name">
+ <cstring>LineEdit1</cstring>
+ </property>
+ </widget>
+ <spacer row="5" column="0">
+ <property name="name">
+ <cstring>Spacer3_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>91</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="0" column="0">
+ <property name="name">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>91</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ </grid>
+</widget>
+<tabstops>
+ <tabstop>LineEdit1</tabstop>
+ <tabstop>ExecButton1</tabstop>
+ <tabstop>ExecButton2</tabstop>
+ <tabstop>ListBox1</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/cmdline.kmdr b/kommander/examples/tutorial/cmdline.kmdr
new file mode 100644
index 00000000..0db801d2
--- /dev/null
+++ b/kommander/examples/tutorial/cmdline.kmdr
@@ -0,0 +1,108 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>462</width>
+ <height>340</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ListBox" row="0" column="0" rowspan="1" colspan="3">
+ <item>
+ <property name="text">
+ <string>Usage: kmdr-executor cmdline.kmdr [BUTTON='title'] arg1 ...</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>ListBox1</cstring>
+ </property>
+ </widget>
+ <spacer row="1" column="0">
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>149</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton" row="1" column="1">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>Read command line</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string># Put command-line arguments into list
+dcop @dcopid KommanderIf clearList ListBox1
+VALUE=`dcop @dcopid KommanderIf global ARGS`
+for i in $VALUE; do
+ dcop @dcopid KommanderIf addListItem ListBox1 "$i" 999
+done
+
+ARGS=`dcop @dcopid KommanderIf global ARGCOUNT`
+dcop @dcopid KommanderIf addListItem ListBox1 "Arguments count: $ARGS" 999
+
+
+# Read button text
+BUTTONTEXT=`dcop @dcopid KommanderIf global BUTTON`
+if [ "$BUTTONTEXT" ]; then
+ dcop @dcopid KommanderIf changeWidgetText ExecButton1 "$BUTTONTEXT"
+fi</string>
+ </stringlist>
+ </property>
+ </widget>
+ <spacer row="1" column="2">
+ <property name="name">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>148</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/dcop.kmdr b/kommander/examples/tutorial/dcop.kmdr
new file mode 100644
index 00000000..9ceae259
--- /dev/null
+++ b/kommander/examples/tutorial/dcop.kmdr
@@ -0,0 +1,139 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>399</width>
+ <height>247</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>KMail communication</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ListBox" row="0" column="0">
+ <property name="name">
+ <cstring>AccountListBox</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@selectedWidgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>AccountButton</cstring>
+ </property>
+ <property name="text">
+ <string>Get accounts</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string># Get list of accounts from KMail
+LIST=`dcop kmail KMailIface accounts`
+
+# Add each account to the list and enable 'Check Account' button
+if [ "$LIST" ]; then
+ for i in $LIST; do
+ dcop @dcopid KommanderIf addListItem AccountListBox "$i" 1000;
+ done
+ dcop @dcopid KommanderIf enableWidget CheckButton true
+fi
+</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>CheckButton</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Check account</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string># Get current account
+# Look at AccountListBox script to see how @AccountListBox is calculated
+
+dcop kmail KMailIface checkAccount @AccountListBox</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/dialogs.kmdr b/kommander/examples/tutorial/dialogs.kmdr
new file mode 100644
index 00000000..62c97bc0
--- /dev/null
+++ b/kommander/examples/tutorial/dialogs.kmdr
@@ -0,0 +1,198 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>DialogTest</class>
+<comment>This is my program</comment>
+<author>Michał Rudolf</author>
+<license>GPL</license>
+<version>0.1</version>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>DialogTest</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>428</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Test of Dialogs</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string></string>
+ </stringlist>
+ </property>
+ <property name="useInternalParser">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ExecButton" row="1" column="0">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>Run dialogs...</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>message_info("This is a demonstration of various KDE dialogs", "Demo")
+message_error("Cannot enter 3D mode")
+if message_question("Do you want to continue?") &lt;&gt; 1 then
+ debug("Cancelled")
+endif
+if message_warning("Are you sure you want to continue?") &lt;&gt; 1 then
+ debug("Aborted")
+endif
+
+
+echo("Hello world!")
+a = input_text("Input text", "Text", "Default text")
+LineEdit1.setText(a)
+
+a = input_color
+LineEdit2.setText(a)
+
+a = input_value("Input value", "Value", 10, 1, 100)
+LineEdit3.setText(a)
+
+a = input_openfile
+LineEdit4.setText(a)
+
+echo("This is a test too")
+a = input_savefile
+LineEdit5.setText(a)
+
+a = input_directory
+LineEdit6.setText(a)
+
+a = input_openfiles
+ListBox1.setText(a)
+
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="Label" row="4" column="0">
+ <property name="name">
+ <cstring>Label6</cstring>
+ </property>
+ <property name="text">
+ <string>File to save:</string>
+ </property>
+ </widget>
+ <widget class="Label" row="1" column="0">
+ <property name="name">
+ <cstring>Label2</cstring>
+ </property>
+ <property name="text">
+ <string>Color:</string>
+ </property>
+ </widget>
+ <widget class="ListBox" row="6" column="1">
+ <property name="name">
+ <cstring>ListBox1</cstring>
+ </property>
+ </widget>
+ <widget class="Label" row="6" column="0">
+ <property name="name">
+ <cstring>Label5</cstring>
+ </property>
+ <property name="text">
+ <string>Files to open:</string>
+ </property>
+ </widget>
+ <widget class="Label" row="5" column="0">
+ <property name="name">
+ <cstring>Label7</cstring>
+ </property>
+ <property name="text">
+ <string>Directory:</string>
+ </property>
+ </widget>
+ <widget class="Label" row="2" column="0">
+ <property name="name">
+ <cstring>Label3</cstring>
+ </property>
+ <property name="text">
+ <string>Value:</string>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>LineEdit1</cstring>
+ </property>
+ </widget>
+ <widget class="Label" row="3" column="0">
+ <property name="name">
+ <cstring>Label4</cstring>
+ </property>
+ <property name="text">
+ <string>File to open:</string>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>LineEdit3</cstring>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>LineEdit4</cstring>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>LineEdit5</cstring>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>LineEdit2</cstring>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="5" column="1">
+ <property name="name">
+ <cstring>LineEdit6</cstring>
+ </property>
+ </widget>
+ <widget class="Label" row="0" column="0">
+ <property name="name">
+ <cstring>Label1</cstring>
+ </property>
+ <property name="text">
+ <string>Text:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/globals.kmdr b/kommander/examples/tutorial/globals.kmdr
new file mode 100644
index 00000000..71cfad17
--- /dev/null
+++ b/kommander/examples/tutorial/globals.kmdr
@@ -0,0 +1,96 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>250</width>
+ <height>122</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Global variables demo</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string></string>
+ </stringlist>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LineEdit1</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>Store current date</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@setGlobal(TEMPSIZE, "@exec(date)")</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton2</cstring>
+ </property>
+ <property name="text">
+ <string>Restore date</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@LineEdit1.setText("@global(TEMPSIZE)")</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/initialize.kmdr b/kommander/examples/tutorial/initialize.kmdr
new file mode 100644
index 00000000..16ed360d
--- /dev/null
+++ b/kommander/examples/tutorial/initialize.kmdr
@@ -0,0 +1,120 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>InitializationDemo</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>InitializationDemo</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>461</width>
+ <height>108</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Initialization and Destroy</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string>dcop @dcopid KommanderIf changeWidgetText OpenLabel "Opened: `date`"
+CLOSE="@readSetting("CloseLabel", "Previously closed: never")"
+dcop @dcopid KommanderIf changeWidgetText CloseLabel "$CLOSE"
+ </string>
+ <string>@writeSetting("CloseLabel", "Previously closed: @exec("date")")</string>
+ </stringlist>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="2" column="0">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="CloseButton">
+ <property name="name">
+ <cstring>CloseButton1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Close</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>OpenLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Opened:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>CloseLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Previously closed:</string>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/loop.kmdr b/kommander/examples/tutorial/loop.kmdr
new file mode 100644
index 00000000..4aa799f1
--- /dev/null
+++ b/kommander/examples/tutorial/loop.kmdr
@@ -0,0 +1,114 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>480</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Looooop!</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ExecButton" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>Enter loop!</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@forEach(i, @exec(ls))
+ @TreeWidget1.insertItem(@i\t@exec(wc -c "@i" | cut -f 1 -d ' '), -1)
+@end
+
+@for(olymp, 1900, 2006, 4)
+ @ListBox1.insertItem(@olymp, -1)
+@end</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="TreeWidget" row="0" column="0">
+ <column>
+ <property name="text">
+ <string>File</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Size</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>TreeWidget1</cstring>
+ </property>
+ <property name="fullWidth">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Olympiads:</string>
+ </property>
+ </widget>
+ <widget class="ListBox">
+ <property name="name">
+ <cstring>ListBox1</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/picview.kmdr b/kommander/examples/tutorial/picview.kmdr
new file mode 100644
index 00000000..be75af7b
--- /dev/null
+++ b/kommander/examples/tutorial/picview.kmdr
@@ -0,0 +1,148 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>618</width>
+ <height>436</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Picture viewer</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="Label" row="0" column="0">
+ <property name="name">
+ <cstring>Label1</cstring>
+ </property>
+ <property name="text">
+ <string>Directory:</string>
+ </property>
+ </widget>
+ <widget class="Label" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Label2</cstring>
+ </property>
+ <property name="text">
+ <string>Images:</string>
+ </property>
+ </widget>
+ <widget class="FileSelector" row="0" column="1">
+ <property name="name">
+ <cstring>FileSelector1</cstring>
+ </property>
+ <property name="selectionType">
+ <enum>Directory</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ListBox">
+ <property name="name">
+ <cstring>ListBox1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>200</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="populationText">
+ <string>@exec(cd @FileSelector1.text &amp;&amp; find * -name "*.jpg" -o -name "*.png" -o -name "*.gif" -o -name "*.bmp")</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="PixmapLabel">
+ <property name="name">
+ <cstring>PixmapLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>2</hsizetype>
+ <vsizetype>2</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>Box</enum>
+ </property>
+ <property name="scaledContents">
+ <bool>true</bool>
+ </property>
+ <property name="populationText">
+ <string>@FileSelector1.text/@ListBox1.selection</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>FileSelector1</sender>
+ <signal>widgetTextChanged(const QString&amp;)</signal>
+ <receiver>ListBox1</receiver>
+ <slot>populate()</slot>
+ </connection>
+ <connection>
+ <sender>ListBox1</sender>
+ <signal>highlighted(int)</signal>
+ <receiver>PixmapLabel1</receiver>
+ <slot>populate()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/progressbar.kmdr b/kommander/examples/tutorial/progressbar.kmdr
new file mode 100644
index 00000000..397410cb
--- /dev/null
+++ b/kommander/examples/tutorial/progressbar.kmdr
@@ -0,0 +1,192 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>565</width>
+ <height>390</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>ProgressBar Demo</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string>@ProgressBar1.setVisible(false)</string>
+ <string></string>
+ </stringlist>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ProgressBar" row="3" column="0" rowspan="1" colspan="5">
+ <property name="name">
+ <cstring>ProgressBar1</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="TreeWidget" row="2" column="0" rowspan="1" colspan="5">
+ <column>
+ <property name="text">
+ <string>Source Tree</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <item>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>TreeWidget1</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>false</bool>
+ </property>
+ <property name="showSortIndicator">
+ <bool>true</bool>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>true</bool>
+ </property>
+ <property name="populationText">
+ <string></string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="FileSelector" row="1" column="0" rowspan="1" colspan="5">
+ <property name="name">
+ <cstring>FileSelector1</cstring>
+ </property>
+ <property name="selectionType">
+ <enum>Directory</enum>
+ </property>
+ </widget>
+ <widget class="StatusBar" row="5" column="0" rowspan="1" colspan="5">
+ <property name="name">
+ <cstring>StatusBar1</cstring>
+ </property>
+ </widget>
+ <spacer row="4" column="0">
+ <property name="name">
+ <cstring>Spacer10</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>191</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="4" column="2">
+ <property name="name">
+ <cstring>Spacer11</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>191</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ScriptObject" row="4" column="3">
+ <property name="name">
+ <cstring>progressLoop</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@# set up a loop using loop variable named "file"
+@forEach(file, @exec(cd @FileSelector1.text &amp;&amp; find * -maxdepth 0))
+ @# set the scale using the generated @[loopvar]_count
+ @ProgressBar1.setMaximum(@file_count)
+ @# show file name in statusbar
+ @StatusBar1.setText(@file)
+ @TreeWidget1.insertItems(@exec(cd @FileSelector1.text &amp;&amp; find @file -name "*"), -1)
+ @# use the generated @[loopvar]_index to update progressbar
+ @ProgressBar1.setText(@file_index)
+@end
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton" row="4" column="1">
+ <property name="name">
+ <cstring>ExecButton25</cstring>
+ </property>
+ <property name="text">
+ <string>Get Source Tree</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@TreeWidget1.clear
+
+@if(@String.isEmpty(@FileSelector1.text))
+ @exec(kdialog --error "please select a directory, preferably not home as it will take time")
+@endif
+
+@if(!@String.isEmpty(@FileSelector1.text))
+ @ProgressBar1.setVisible(true)
+ @progressLoop.execute
+ @# this fails on kdewebdev 3.3.0 so leave off ".execute"
+ @ProgressBar1.setVisible(false)
+ @StatusBar1.setText("Source Tree Listed")
+@endif</string>
+ </stringlist>
+ </property>
+ <property name="blockGUI">
+ <enum>Button</enum>
+ </property>
+ </widget>
+ <widget class="Label" row="0" column="0" rowspan="1" colspan="5">
+ <property name="name">
+ <cstring>Label1</cstring>
+ </property>
+ <property name="text">
+ <string>Select a directory to list it's tree ($HOME NOT recommended for time reasons)</string>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/settings.kmdr b/kommander/examples/tutorial/settings.kmdr
new file mode 100644
index 00000000..3079d6f9
--- /dev/null
+++ b/kommander/examples/tutorial/settings.kmdr
@@ -0,0 +1,177 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>389</width>
+ <height>91</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Storing settings</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string>@writeSetting("LastCommand", "@LineEdit1")</string>
+ </stringlist>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Command:</string>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LineEdit1</cstring>
+ </property>
+ <property name="populationText">
+ <string>@readSetting("LastCommand", "kcalc")</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>60</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>&amp;Run</string>
+ </property>
+ <property name="populationText">
+ <string></string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@LineEdit1</string>
+ </stringlist>
+ </property>
+ <property name="writeStdout">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="CloseButton">
+ <property name="name">
+ <cstring>CloseButton1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>60</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>&amp;Close</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>LineEdit1</sender>
+ <signal>widgetOpened()</signal>
+ <receiver>LineEdit1</receiver>
+ <slot>populate()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/slots.kmdr b/kommander/examples/tutorial/slots.kmdr
new file mode 100644
index 00000000..23ab2d09
--- /dev/null
+++ b/kommander/examples/tutorial/slots.kmdr
@@ -0,0 +1,200 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>396</width>
+ <height>386</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Archive viewer</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Archive name:</string>
+ </property>
+ </widget>
+ <widget class="FileSelector">
+ <property name="name">
+ <cstring>FileSelector</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ <property name="selectionFilter">
+ <string>*.tar.gz</string>
+ <comment>Tar archives</comment>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>List of files:</string>
+ </property>
+ </widget>
+ <widget class="ListBox">
+ <property name="name">
+ <cstring>FileListBox</cstring>
+ </property>
+ <property name="populationText">
+ <string>@exec("tar tzf @FileSelector")</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@selectedWidgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="0">
+ <property name="name">
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>View</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>if [ "@FileSelector" -a "@FileListBox" ]; then
+ tar xzf "@FileSelector" -C /tmp "@FileListBox"
+ konqueror "/tmp/@FileListBox"
+fi
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CloseButton">
+ <property name="name">
+ <cstring>CloseButton1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Close</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>FileSelector</sender>
+ <signal>widgetTextChanged(const QString&amp;)</signal>
+ <receiver>FileListBox</receiver>
+ <slot>populate()</slot>
+ </connection>
+ <connection>
+ <sender>FileListBox</sender>
+ <signal>doubleClicked(QListBoxItem*)</signal>
+ <receiver>ExecButton1</receiver>
+ <slot>startProcess()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/statusbar.kmdr b/kommander/examples/tutorial/statusbar.kmdr
new file mode 100644
index 00000000..d4f96e05
--- /dev/null
+++ b/kommander/examples/tutorial/statusbar.kmdr
@@ -0,0 +1,99 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>536</width>
+ <height>225</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>StatusBar example</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string>@StatusBar2.setText(Welcome in this StatusBar demo...)</string>
+ <string></string>
+ </stringlist>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="StatusBar" row="2" column="0">
+ <property name="name">
+ <cstring>StatusBar2</cstring>
+ </property>
+ <property name="populationText">
+ <string>@ListBox1.selection selected.</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ListBox" row="0" column="0">
+ <item>
+ <property name="text">
+ <string>Some item</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Some other item</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Another Item</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>One more Item</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>ListBox1</cstring>
+ </property>
+ </widget>
+ <widget class="ExecButton" row="1" column="0">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>Update status bar</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@StatusBar2.insertItem(This one was updated, 0)
+@StatusBar2.insertItem(User: @exec(whoami), 1)
+@StatusBar2.insertItem(@exec(date), 2)</string>
+ </stringlist>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>ListBox1</sender>
+ <signal>clicked(QListBoxItem*,const QPoint&amp;)</signal>
+ <receiver>StatusBar2</receiver>
+ <slot>populate()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/strings.kmdr b/kommander/examples/tutorial/strings.kmdr
new file mode 100644
index 00000000..1ef6a953
--- /dev/null
+++ b/kommander/examples/tutorial/strings.kmdr
@@ -0,0 +1,206 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>522</width>
+ <height>447</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>String functions</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string></string>
+ </stringlist>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="TextEdit" row="1" column="0">
+ <property name="name">
+ <cstring>TextEdit1</cstring>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ <property name="populationText">
+ <string>@Array.setValue(Bool, 1, yes)
+@Array.setValue(Bool, 0, no)
+
+&lt;h2&gt;Kommander string functions&lt;/h2&gt;
+&lt;b&gt;Length:&lt;/b&gt; @String.length("@LineEdit1")&lt;br&gt;
+&lt;b&gt;First 5 chars:&lt;/b&gt; @String.left("@LineEdit1", 5)&lt;br&gt;
+&lt;b&gt;Last 5 chars:&lt;/b&gt; @String.right("@LineEdit1", 5)&lt;br&gt;
+&lt;b&gt;Chars from 6th to 10th:&lt;/b&gt; @String.mid("@LineEdit1", 6, 5)&lt;br&gt;
+&lt;b&gt;Remove spaces:&lt;/b&gt; @String.remove("@LineEdit1", " ")&lt;br&gt;
+&lt;b&gt;Replace spaces with *&lt;/b&gt;: @String.replace("@LineEdit1", " ", *)&lt;br&gt;
+&lt;b&gt;Uppercase:&lt;/b&gt; @String.upper("@LineEdit1")&lt;br&gt;
+&lt;b&gt;Lowercase:&lt;/b&gt; @String.lower("@LineEdit1")&lt;br&gt;
+&lt;b&gt;Is a number?:&lt;/b&gt; @Array.value(Bool, @String.isNumber("@LineEdit1"))&lt;br&gt;
+&lt;b&gt;Is empty?&lt;/b&gt; @Array.value(Bool, @String.isEmpty("@LineEdit1"))&lt;br&gt;
+&lt;b&gt;Contains "Kommander"?:&lt;/b&gt; @String.contains("@LineEdit1", "Kommander")&lt;br&gt;
+&lt;b&gt;Position of "Kommander":&lt;/b&gt; @String.find("@LineEdit1", "Kommander")&lt;br&gt;
+&lt;b&gt;Compare with "Kommander":&lt;/b&gt;
+@execBegin
+if [ @String.compare("@LineEdit1", "Kommander") -lt 0 ];then
+ echo "Less than Kommander&lt;br&gt;"
+elif [ @String.compare("@LineEdit1", "Kommander") -gt 0 ];then
+ echo "Greater than Kommander &lt;br&gt;"
+elif [ @String.compare("@LineEdit1", "Kommander") -eq 0 ];then
+ echo "Equals Kommander &lt;br&gt;"
+fi
+@execEnd
+&lt;b&gt;Case insensitive match with "Kommander":&lt;/b&gt;
+@execBegin
+if [ @String.compare(@String.lower("@LineEdit1"), "kommander") -eq 0 ];then
+ echo "Match found&lt;br&gt;"
+else
+ echo "Match failed&lt;br&gt;"
+fi
+@execEnd</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Enter str&amp;ing here:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>LineEdit1</cstring>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LineEdit1</cstring>
+ </property>
+ <property name="text">
+ <string>I love Kommander!</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="0">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Test</string>
+ </property>
+ <property name="populationText">
+ <string></string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>ExecButton1</sender>
+ <signal>clicked()</signal>
+ <receiver>TextEdit1</receiver>
+ <slot>populate()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>LineEdit1</tabstop>
+ <tabstop>ExecButton1</tabstop>
+ <tabstop>TextEdit1</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/table.kmdr b/kommander/examples/tutorial/table.kmdr
new file mode 100644
index 00000000..a2c5986b
--- /dev/null
+++ b/kommander/examples/tutorial/table.kmdr
@@ -0,0 +1,258 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>629</width>
+ <height>313</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Table Demo</string>
+ </property>
+ <widget class="Table">
+ <column>
+ <property name="text">
+ <string>0</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>1</string>
+ </property>
+ </column>
+ <row>
+ <property name="text">
+ <string>0</string>
+ </property>
+ </row>
+ <row>
+ <property name="text">
+ <string>1</string>
+ </property>
+ </row>
+ <row>
+ <property name="text">
+ <string>2</string>
+ </property>
+ </row>
+ <row>
+ <property name="text">
+ <string>3</string>
+ </property>
+ </row>
+ <row>
+ <property name="text">
+ <string>4</string>
+ </property>
+ </row>
+ <property name="name">
+ <cstring>Table</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>10</y>
+ <width>400</width>
+ <height>240</height>
+ </rect>
+ </property>
+ <property name="resizePolicy">
+ <enum>AutoOneFit</enum>
+ </property>
+ <property name="numRows">
+ <number>5</number>
+ </property>
+ <property name="numCols">
+ <number>2</number>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout3</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>470</x>
+ <y>10</y>
+ <width>135</width>
+ <height>160</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>AddRowButton</cstring>
+ </property>
+ <property name="text">
+ <string>Add row</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@Table.insertRow(@Table.currentRow, 1)</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>AddColButton</cstring>
+ </property>
+ <property name="text">
+ <string>Add column</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@Table.insertColumn(@Table.currentColumn, 1)</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton5</cstring>
+ </property>
+ <property name="text">
+ <string>Remove row</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@Table.removeRow(@Table.currentRow, 1)</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton6</cstring>
+ </property>
+ <property name="text">
+ <string>Remove Column</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@Table.removeColumn(@Table.currentColumn, 1)</string>
+ </stringlist>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout4</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>270</y>
+ <width>585</width>
+ <height>28</height>
+ </rect>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>GetButton</cstring>
+ </property>
+ <property name="text">
+ <string>Get text</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@CellText.setText(@Table.cellText(@Table.currentRow,
+ @Table.currentColumn))</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>CellText</cstring>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>SetButton</cstring>
+ </property>
+ <property name="text">
+ <string>Set text</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@Table.setCellText(@Table.currentRow, @Table.currentColumn,
+ @CellText.text)</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ColumnCaptionButton</cstring>
+ </property>
+ <property name="text">
+ <string>Set column name</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@Table.setColumnCaption(@Table.currentColumn, @CellText.text)</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>RowCaptionButton</cstring>
+ </property>
+ <property name="text">
+ <string>Set row name</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@Table.setRowCaption(@Table.currentRow, @CellText.text)</string>
+ </stringlist>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/tree.kmdr b/kommander/examples/tutorial/tree.kmdr
new file mode 100644
index 00000000..bed87709
--- /dev/null
+++ b/kommander/examples/tutorial/tree.kmdr
@@ -0,0 +1,170 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>528</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>File Tree</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string>@FileSelector1.setText(@env(HOME))
+@TreeWidget1.setText(@readSetting(FileTree, ""))</string>
+ <string>@writeSetting(FileTree, @TreeWidget1.text)</string>
+ </stringlist>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton1</cstring>
+ </property>
+ <property name="text">
+ <string>Add files from selected directory</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@TreeWidget1.clear
+@TreeWidget1.insertItems(@exec(cd @FileSelector1.text &amp;&amp; find * -name "*.kmdr"), -1)</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton2</cstring>
+ </property>
+ <property name="text">
+ <string>Remove selected file from the list</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@TreeWidget1.removeItem(@TreeWidget1.currentItem)</string>
+ </stringlist>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="TreeWidget" row="0" column="0" rowspan="1" colspan="2">
+ <column>
+ <property name="text">
+ <string>File</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>TreeWidget1</cstring>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>true</bool>
+ </property>
+ <property name="resizeMode">
+ <enum>NoColumn</enum>
+ </property>
+ <property name="fullWidth">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Select directory:</string>
+ </property>
+ </widget>
+ <widget class="FileSelector" row="1" column="1">
+ <property name="name">
+ <cstring>FileSelector1</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ <property name="selectionType">
+ <enum>Directory</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton3</cstring>
+ </property>
+ <property name="text">
+ <string>Find file:</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@TreeWidget1.setCurrentItem(@TreeWidget1.findItem(@LineEdit2.text))</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>LineEdit2</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/examples/tutorial/widgets.kmdr b/kommander/examples/tutorial/widgets.kmdr
new file mode 100644
index 00000000..9e6781c6
--- /dev/null
+++ b/kommander/examples/tutorial/widgets.kmdr
@@ -0,0 +1,133 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form1</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>483</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Widgets and types</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="GroupBox" row="0" column="1" rowspan="3" colspan="1">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Widgets</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="SpinBoxInt" row="1" column="0">
+ <property name="name">
+ <cstring>SpinBoxInt1</cstring>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="0" column="0">
+ <property name="name">
+ <cstring>LineEdit1</cstring>
+ </property>
+ </widget>
+ <widget class="RichTextEditor" row="2" column="0">
+ <property name="name">
+ <cstring>RichTextEditor1</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="ExecButton" row="2" column="0">
+ <property name="name">
+ <cstring>WidgetShow</cstring>
+ </property>
+ <property name="text">
+ <string>Show widgets</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@WidgetList.setText(@Form1.children(true))</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ListBox" row="0" column="0">
+ <property name="name">
+ <cstring>WidgetList</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Type:</string>
+ </property>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>WidgetType</cstring>
+ </property>
+ <property name="populationText">
+ <string>@exec(dcop @dcopid KommanderIf type "@WidgetList.selection")</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>WidgetList</sender>
+ <signal>highlighted(int)</signal>
+ <receiver>WidgetType</receiver>
+ <slot>populate()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/executor/Makefile.am b/kommander/executor/Makefile.am
new file mode 100644
index 00000000..7d9004fe
--- /dev/null
+++ b/kommander/executor/Makefile.am
@@ -0,0 +1,25 @@
+bin_PROGRAMS = kmdr-executor
+
+noinst_LTLIBRARIES = libinstance.la
+
+libinstance_la_SOURCES = instance.cpp dcopkommanderif.skel
+libinstance_la_LDFLAGS = $(KDE_RPATH) $(all_libraries) -no-undefined
+
+
+kmdr_executor_SOURCES = main.cpp
+kmdr_executor_LDADD = libinstance.la $(top_builddir)/kommander/widget/libkommanderwidget.la $(top_builddir)/kommander/widgets/libkommanderwidgets.la $(top_builddir)/kommander/factory/libkommanderfactory.la $(LIB_KIO)
+
+#KDE_ICON = kmdr_executor
+
+appsdir = $(kde_appsdir)/.hidden
+apps_DATA = kmdr-executor.desktop
+
+AM_CPPFLAGS = -I$(top_srcdir)/kommander/plugin -I$(top_srcdir)/kommander/widgets -I$(top_srcdir)/kommander/widget -I$(top_srcdir)/kommander/factory $(all_includes)
+
+
+METASOURCES = AUTO
+
+# the library search path.
+kmdr_executor_LDFLAGS = $(all_libraries) $(KDE_RPATH)
+
+noinst_HEADERS = dcopkommanderif.h
diff --git a/kommander/executor/dcopkommanderif.h b/kommander/executor/dcopkommanderif.h
new file mode 100644
index 00000000..3ee8a552
--- /dev/null
+++ b/kommander/executor/dcopkommanderif.h
@@ -0,0 +1,82 @@
+/***************************************************************************
+ dcopkommanderif.h - description
+ -------------------
+ begin : Tue Jan 27 2004
+ copyright : (C) 2004 by Andras Mantia <amantia@kde.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; version 2 of the License. *
+ * *
+ ***************************************************************************/
+
+#ifndef DCOPKOMMANDERIF_H
+#define DCOPKOMMANDERIF_H
+
+#include <dcopobject.h>
+#include <qstringlist.h>
+
+/* See widgets/specials.cpp for description. Deprecated methods are replaced by methods above. */
+
+class DCOPKommanderIf : virtual public DCOPObject
+{
+ K_DCOP
+
+ k_dcop:
+virtual void setEnabled(const QString& widgetName, bool enable) = 0;
+virtual void enableWidget(const QString& widgetName, bool enable) = 0; /* DEPRECATED */
+virtual void setVisible(const QString& widgetName, bool enable) = 0;
+virtual void setText(const QString& widgetName, const QString& text) = 0;
+virtual void changeWidgetText(const QString& widgetName, const QString& text) = 0; /* DEPRECATED */
+virtual QString text(const QString& widgetName) = 0;
+virtual void setSelection(const QString& widgetName, const QString& text) = 0;
+virtual void setCurrentListItem(const QString& widgetName, const QString& text) = 0; /* DEPRECATED */
+virtual QString selection(const QString& widgetName) = 0;
+virtual int currentItem(const QString &widgetName) = 0;
+virtual QString item(const QString &widgetName, int index) = 0;
+virtual int itemDepth(const QString &widgetName, int index) = 0;
+virtual QString itemPath(const QString &widgetName, int index) = 0;
+virtual void removeItem(const QString &widgetName, int index) = 0;
+virtual void removeListItem(const QString &widgetName, int index) = 0; /* DEPRECATED */
+virtual void insertItem(const QString &widgetName, const QString &item, int index) = 0;
+virtual void addListItem(const QString &widgetName, const QString &item, int index) = 0; /* DEPRECATED */
+virtual void setPixmap(const QString &widgetName, const QString &iconName, int index) = 0;
+virtual void insertItems(const QString &widgetName, const QStringList &items, int index) = 0;
+virtual void addListItems(const QString &widgetName, const QStringList &items, int index) = 0;/*DEPRECATED*/
+virtual void addUniqueItem(const QString &widgetName, const QString &item) = 0;
+virtual int findItem(const QString &widgetName, const QString &item) = 0;
+virtual void clear(const QString &widgetName) = 0;
+virtual void clearList(const QString &widgetName) = 0; /* DEPRECATED */
+virtual void setCurrentItem(const QString &widgetName, int index) = 0;
+virtual void setCurrentTab(const QString &widgetName, int index) = 0; /* DEPRECATED */
+virtual void insertTab(const QString &widgetName, const QString &label, int index) = 0;
+virtual bool checked(const QString &widgetName) = 0;
+virtual void setChecked(const QString &widgetName, bool checked) = 0;
+virtual void setAssociatedText(const QString &widgetName, const QString &text) = 0;
+virtual QStringList associatedText(const QString &widgetName) = 0;
+virtual QString type(const QString& widget) = 0;
+virtual QStringList children(const QString& parent, bool recursive) = 0;
+virtual QString global(const QString& variableName) = 0;
+virtual void setGlobal(const QString& variableName, const QString& value) = 0;
+virtual void setMaximum(const QString &widgetName, int value) = 0;
+virtual QString execute(const QString &widgetName) = 0;
+virtual void cancel(const QString &widgetName) = 0;
+virtual int count(const QString &widgetName) = 0;
+virtual int currentColumn(const QString &widgetName) = 0;
+virtual int currentRow(const QString &widgetName) = 0;
+virtual void insertRow(const QString &widgetName, int row, int count) = 0;
+virtual void insertColumn(const QString &widgetName, int column, int count) = 0;
+virtual void setCellText(const QString &widgetName, int row, int column, const QString& text) = 0;
+virtual QString cellText(const QString &widgetName, int row, int column) = 0;
+virtual void removeRow(const QString &widgetName, int row, int count) = 0;
+virtual void removeColumn(const QString &widgetName, int column, int count) = 0;
+virtual void setRowCaption(const QString &widgetName, int row, const QString& text) = 0;
+virtual void setColumnCaption(const QString &widgetName, int column, const QString& text) = 0;
+virtual int getWinID() = 0;
+virtual void setBusyCursor(bool busy) = 0;
+};
+
+#endif
diff --git a/kommander/executor/instance.cpp b/kommander/executor/instance.cpp
new file mode 100644
index 00000000..2ff4edfd
--- /dev/null
+++ b/kommander/executor/instance.cpp
@@ -0,0 +1,683 @@
+/***************************************************************************
+ instance.cpp - running instance of a dialog
+ -------------------
+ begin : Tue Aug 13 2002
+ copyright : (C) 2002 by Marc Britton <consume@optushome.com.au>
+ (C) 2004 by Andras Mantia <amantia@kde.org>
+ (C) 2004 by Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+ /* KDE INCLUDES */
+#include <kapplication.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kstandarddirs.h>
+
+/* QT INCLUDES */
+#include <qdialog.h>
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qiodevice.h>
+#include <qlabel.h>
+#include <qmainwindow.h>
+#include <qobjectlist.h>
+#include <qstring.h>
+#include <qtabwidget.h>
+#include <qwidget.h>
+#include <qcursor.h>
+
+/* OTHER INCLUDES */
+#include "instance.h"
+#include "kommanderwidget.h"
+#include "kommanderwindow.h"
+#include "kommanderfactory.h"
+#include "kommanderversion.h"
+#include "specials.h"
+#include "specialinformation.h"
+#include "fileselector.h"
+
+Instance::Instance()
+ : DCOPObject("KommanderIf"), m_instance(0), m_textInstance(0), m_parent(0)
+{
+ SpecialInformation::registerSpecials();
+}
+
+Instance::Instance(QWidget *a_parent)
+ : DCOPObject("KommanderIf"), m_instance(0), m_textInstance(0),
+ m_parent(a_parent)
+{
+ SpecialInformation::registerSpecials();
+}
+
+void Instance::addCmdlineArguments(const QStringList& args)
+{
+ if (!m_textInstance)
+ return;
+ // Filter out variable arguments ('var=value')
+ QStringList stdArgs;
+ for (QStringList::ConstIterator it = args.begin(); it != args.end(); ++it)
+ {
+ int pos = (*it).find('=');
+ if (pos != -1)
+ m_textInstance->setGlobal((*it).left(pos), (*it).mid(pos+1));
+ else
+ stdArgs.append(*it);
+ }
+ int i = 0;
+ for (QStringList::ConstIterator it = stdArgs.begin(); it != stdArgs.end(); ++it)
+ m_textInstance->setGlobal(QString("_ARG%1").arg(++i), *it);
+ m_textInstance->setGlobal("_ARGS", stdArgs.join(" "));
+ m_textInstance->setGlobal("_ARGCOUNT", QString::number(stdArgs.count()));
+}
+
+
+
+Instance::~Instance()
+{
+ delete m_instance;
+}
+
+/** Builds the instance */
+bool Instance::build(const KURL& fname)
+{
+ delete m_instance;
+ m_instance = 0;
+ m_textInstance = 0;
+
+ if (!fname.isValid() || !isFileValid(fname))
+ return false; // Check if file is correct
+
+ // create the main instance, must inherit QDialog
+ KommanderFactory::loadPlugins();
+
+ if (fname.isValid())
+ m_instance = KommanderFactory::create(fname.path(), 0L, dynamic_cast<QWidget*>(parent()));
+ else
+ {
+ QFile inputFile;
+ inputFile.open(IO_ReadOnly, stdin);
+ m_instance = KommanderFactory::create(&inputFile);
+ }
+
+ // check if build was successful
+ if (!m_instance)
+ {
+ KMessageBox::sorry(0, i18n("<qt>Unable to create dialog.</qt>"));
+ return false;
+ }
+
+ KommanderWindow* window = dynamic_cast<KommanderWindow*>((QWidget*)m_instance);
+ if (window)
+ window->setFileName(fname.path().local8Bit());
+
+ // FIXME : Should verify that all of the widgets in the dialog derive from KommanderWidget
+ m_textInstance = kommanderWidget(m_instance);
+
+ if (!m_textInstance) // Main dialog/window is not a Kommander widget - look for one
+ {
+ if (m_instance)
+ {
+ QObjectList* widgets = m_instance->queryList();
+ for (QObject* w = widgets->first(); w; w = widgets->next())
+ if (kommanderWidget(w))
+ {
+ m_textInstance = kommanderWidget(w);
+ break;
+ }
+ }
+ if (!m_textInstance)
+ {
+ qDebug("Warning: no Kommander widget present!");
+ return true;
+ }
+ }
+
+ if (fname.isValid())
+ {
+ m_textInstance->setGlobal("KDDIR", fname.directory());
+ m_textInstance->setGlobal("NAME", fname.fileName());
+ m_textInstance->setGlobal("_PID", QString().setNum(getpid()));
+ m_textInstance->setGlobal("VERSION", KOMMANDER_VERSION);
+ }
+ return true;
+}
+
+bool Instance::run()
+{
+ if (!isBuilt())
+ return false;
+
+ // Handle both dialogs and main windows
+ if (m_instance->inherits("QDialog"))
+ dynamic_cast<QDialog*>((QWidget*)m_instance)->exec();
+ else if (m_instance->inherits("QMainWindow"))
+ {
+ kapp->setMainWidget(m_instance);
+ dynamic_cast<QMainWindow*>((QWidget*)m_instance)->show();
+ kapp->exec();
+ }
+ else return false;
+ return true;
+}
+
+bool Instance::isBuilt() const
+{
+ return m_instance;
+}
+
+void Instance::setParent(QWidget *a_parent)
+{
+ m_parent = a_parent;
+}
+
+bool Instance::isFileValid(const KURL& fname) const
+{
+ if (!QFileInfo(fname.path()).exists())
+ {
+ KMessageBox::sorry(0, i18n("<qt>Kommander file<br><b>%1</b><br>does not "
+ "exist.</qt>").arg(fname.path()));
+ return false;
+ }
+
+ // Check whether extension is *.kmdr
+ if (!fname.fileName().endsWith(".kmdr"))
+ {
+ KMessageBox::error(0, i18n("<qt>This file does not have a <b>.kmdr</b> extension. As a security precaution "
+ "Kommander will only run Kommander scripts with a clear identity.</qt>"),
+ i18n("Wrong Extension"));
+ return false;
+ }
+
+ // Check whether file is not in some temporary directory.
+ QStringList tmpDirs = KGlobal::dirs()->resourceDirs("tmp");
+ tmpDirs += KGlobal::dirs()->resourceDirs("cache");
+ tmpDirs.append("/tmp/");
+ tmpDirs.append("/var/tmp/");
+
+ bool inTemp = false;
+ for (QStringList::ConstIterator I = tmpDirs.begin(); I != tmpDirs.end(); ++I)
+ if (fname.directory(false).startsWith(*I))
+ inTemp = true;
+
+ if (inTemp)
+ {
+ if (KMessageBox::warningContinueCancel(0, i18n("<qt>This dialog is running from your <i>/tmp</i> directory. "
+ " This may mean that it was run from a KMail attachment or from a webpage. "
+ "<p>Any script contained in this dialog will have write access to all of your home directory; "
+ "<b>running such dialogs may be dangerous: </b>"
+ "<p>are you sure you want to continue?</qt>"), QString(), i18n("Run Nevertheless")) == KMessageBox::Cancel)
+ return false;
+ }
+ if (!QFileInfo(fname.path()).isExecutable())
+ {
+ if (KMessageBox::warningContinueCancel(0, i18n("<qt>The Kommander file <i>%1</i> does not have the <b>executable attribute</b> set and could possibly contain dangerous exploits.<p>If you trust the scripting (viewable in kmdr-editor) in this program, make it executable to get rid of this warning.<p>Are you sure you want to continue?</qt>").arg(fname.pathOrURL()), QString(), i18n("Run Nevertheless")) == KMessageBox::Cancel)
+ return false;
+ }
+ return true;
+}
+
+
+
+
+
+// Widget functions
+void Instance::setEnabled(const QString& widgetName, bool enable)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (child && child->inherits("QWidget"))
+ ((QWidget*)child)->setEnabled(enable);
+}
+
+void Instance::setVisible(const QString& widgetName, bool visible)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (child && child->inherits("QWidget"))
+ ((QWidget*)child)->setShown(visible);
+}
+
+void Instance::setText(const QString& widgetName, const QString& text)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ kommanderWidget(child)->handleDCOP(DCOP::setText, text);
+ else if (child && child->inherits("QLabel"))
+ {
+ QLabel* label = (QLabel*)child;
+ if (label->pixmap())
+ {
+ QPixmap pixmap;
+ if (pixmap.load(text))
+ label->setPixmap(pixmap);
+ }
+ else
+ label->setText(text);
+ }
+}
+
+QString Instance::text(const QString& widgetName)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ return kommanderWidget(child)->handleDCOP(DCOP::text);
+ else if (child && child->inherits("QLabel"))
+ return ((QLabel*)child)->text();
+ return QString();
+}
+
+void Instance::setSelection(const QString& widgetName, const QString& text)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ kommanderWidget(child)->handleDCOP(DCOP::setSelection, text);
+ else if (child && child->inherits("QLabel"))
+ ((QLabel*)child)->setText(text);
+}
+
+QString Instance::selection(const QString& widgetName)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ return kommanderWidget(child)->handleDCOP(DCOP::selection);
+ return QString();
+}
+
+int Instance::currentItem(const QString &widgetName)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ return kommanderWidget(child)->handleDCOP(DCOP::currentItem).toInt();
+ return -1;
+}
+
+QString Instance::item(const QString &widgetName, int i)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ return kommanderWidget(child)->handleDCOP(DCOP::item, QString::number(i));
+ return QString();
+}
+
+void Instance::removeItem(const QString &widgetName, int index)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ kommanderWidget(child)->handleDCOP(DCOP::removeItem, QString::number(index));
+}
+
+void Instance::insertItem(const QString &widgetName, const QString &item, int index)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ {
+ QStringList args(item);
+ args += QString::number(index);
+ kommanderWidget(child)->handleDCOP(DCOP::insertItem, args);
+ }
+}
+
+void Instance::insertItems(const QString &widgetName, const QStringList &items, int index)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ {
+ QStringList args(items.join("\n"));
+ args += QString::number(index);
+ kommanderWidget(child)->handleDCOP(DCOP::insertItems, args);
+ }
+}
+
+int Instance::findItem(const QString &widgetName, const QString& item)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ return kommanderWidget(child)->handleDCOP(DCOP::findItem, item).toInt();
+ return -1;
+}
+
+void Instance::addUniqueItem(const QString &widgetName, const QString &item)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ kommanderWidget(child)->handleDCOP(DCOP::addUniqueItem, item);
+}
+
+int Instance::itemDepth(const QString &widgetName, int index)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ return kommanderWidget(child)->handleDCOP(DCOP::itemDepth, QString::number(index)).toInt();
+ return -1;
+}
+
+QString Instance::itemPath(const QString &widgetName, int index)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ return kommanderWidget(child)->handleDCOP(DCOP::itemPath, QString::number(index));
+ return QString();
+}
+
+
+void Instance::setPixmap(const QString &widgetName, const QString& iconName, int index)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ {
+ QStringList args(iconName);
+ args += QString::number(index);
+ kommanderWidget(child)->handleDCOP(DCOP::setPixmap, args);
+ }
+}
+
+void Instance::clear(const QString &widgetName)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ kommanderWidget(child)->handleDCOP(DCOP::clear);
+}
+
+void Instance::setCurrentItem(const QString &widgetName, int index)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ kommanderWidget(child)->handleDCOP(DCOP::setCurrentItem, QString::number(index));
+}
+
+void Instance::setChecked(const QString &widgetName, bool checked)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ kommanderWidget(child)->handleDCOP(DCOP::setChecked, checked ? "true" : "false");
+}
+
+bool Instance::checked(const QString &widgetName)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ return kommanderWidget(child)->handleDCOP(DCOP::checked, widgetName) == "1";
+ return false;
+}
+
+void Instance::setAssociatedText(const QString &widgetName, const QString& text)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ kommanderWidget(child)->setAssociatedText(QStringList::split('\n', text, true));
+}
+
+QStringList Instance::associatedText(const QString &widgetName)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ kommanderWidget(child)->associatedText();
+ return QString();
+}
+
+QString Instance::type(const QString& widget)
+{
+ QObject* child = stringToWidget(widget);
+ if (child && child->inherits("QWidget"))
+ return child->className();
+ return QString();
+}
+
+QStringList Instance::children(const QString& parent, bool recursive)
+{
+ QStringList matching;
+ QObject* child = stringToWidget(parent);
+ QObjectList* widgets;
+ if (!child)
+ child = m_instance;
+ if (child->inherits("QWidget"))
+ {
+ widgets = child->queryList("QWidget", 0, false, recursive);
+ for (QObject* w = widgets->first(); w; w = widgets->next())
+ if (w->name() && kommanderWidget(w))
+ matching.append(w->name());
+ }
+ return matching;
+}
+
+void Instance::setMaximum(const QString &widgetName, int value)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ kommanderWidget(child)->handleDCOP(DCOP::setMaximum, QString::number(value));
+}
+
+QString Instance::execute(const QString &widgetName)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ return kommanderWidget(child)->handleDCOP(DCOP::execute);
+ return "";
+}
+
+void Instance::cancel(const QString &widgetName)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ kommanderWidget(child)->handleDCOP(DCOP::cancel);
+}
+
+int Instance::count(const QString &widgetName)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ return kommanderWidget(child)->handleDCOP(DCOP::count).toInt();
+ return -1;
+}
+
+int Instance::currentColumn(const QString &widgetName)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ return kommanderWidget(child)->handleDCOP(DCOP::currentColumn).toInt();
+ return -1;
+}
+
+int Instance::currentRow(const QString &widgetName)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ return kommanderWidget(child)->handleDCOP(DCOP::currentRow).toInt();
+ return -1;
+}
+
+void Instance::insertRow(const QString &widgetName, int row, int count)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ {
+ QStringList args(QString::number(row));
+ args += QString::number(count);
+ kommanderWidget(child)->handleDCOP(DCOP::insertRow, args);
+ }
+}
+
+void Instance::insertColumn(const QString &widgetName, int column, int count)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ {
+ QStringList args(QString::number(column));
+ args += QString::number(count);
+ kommanderWidget(child)->handleDCOP(DCOP::insertColumn, args);
+ }
+}
+
+void Instance::setCellText(const QString &widgetName, int row, int column, const QString& text)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ {
+ QStringList args(QString::number(row));
+ args += QString::number(column);
+ args += text;
+ kommanderWidget(child)->handleDCOP(DCOP::setCellText, args);
+ }
+}
+
+QString Instance::cellText(const QString &widgetName, int row, int column)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ {
+ QStringList args(QString::number(row));
+ args += QString::number(column);
+ return kommanderWidget(child)->handleDCOP(DCOP::cellText, args);
+ }
+ else return QString();
+}
+
+void Instance::removeRow(const QString &widgetName, int row, int count)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ {
+ QStringList args(QString::number(row));
+ args += QString::number(count);
+ kommanderWidget(child)->handleDCOP(DCOP::removeRow, args);
+ }
+}
+
+void Instance::removeColumn(const QString &widgetName, int column, int count)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ {
+ QStringList args(QString::number(column));
+ args += QString::number(count);
+ kommanderWidget(child)->handleDCOP(DCOP::removeColumn, args);
+ }
+}
+
+void Instance::setRowCaption(const QString &widgetName, int row, const QString& text)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ {
+ QStringList args(QString::number(row));
+ args += text;
+ kommanderWidget(child)->handleDCOP(DCOP::setRowCaption, args);
+ }
+}
+
+void Instance::setColumnCaption(const QString &widgetName, int column, const QString& text)
+{
+ QObject* child = stringToWidget(widgetName);
+ if (kommanderWidget(child))
+ {
+ QStringList args(QString::number(column));
+ args += text;
+ kommanderWidget(child)->handleDCOP(DCOP::setColumnCaption, args);
+ }
+}
+
+
+
+
+
+
+
+
+
+
+QString Instance::global(const QString& variableName)
+{
+ return m_textInstance ? m_textInstance->global(variableName) : QString();
+}
+
+void Instance::setGlobal(const QString& variableName, const QString& value)
+{
+ if (m_textInstance)
+ m_textInstance->setGlobal(variableName, value);
+}
+
+QObject* Instance::stringToWidget(const QString& name)
+{
+ return m_instance->child(name);
+}
+
+KommanderWidget* Instance::kommanderWidget(QObject* object)
+{
+ return dynamic_cast<KommanderWidget*>(object);
+}
+
+
+/*** Deprecated methods: just call appropriate method ***/
+void Instance::changeWidgetText(const QString& widgetName, const QString& text)
+{
+ setText(widgetName, text);
+}
+
+void Instance::clearList(const QString &widgetName)
+{
+ clear(widgetName);
+}
+
+void Instance::setCurrentListItem(const QString& widgetName, const QString& item)
+{
+ setSelection(widgetName, item);
+}
+
+void Instance::setCurrentTab(const QString &widgetName, int index)
+{
+ setCurrentItem(widgetName, index);
+}
+
+void Instance::insertTab(const QString &widgetName, const QString &label, int index)
+{
+ QObject* child = stringToWidget(widgetName);
+ QStringList l;
+ l << label;
+ l << QString::number(index);
+ if (kommanderWidget(child))
+ kommanderWidget(child)->handleDCOP(DCOP::insertTab, l);
+}
+
+void Instance::addListItems(const QString &widgetName, const QStringList &items, int index)
+{
+ insertItems(widgetName, items, index);
+}
+
+void Instance::enableWidget(const QString& widgetName, bool enable)
+{
+ setEnabled(widgetName, enable);
+}
+
+void Instance::removeListItem(const QString &widgetName, int index)
+{
+ removeItem(widgetName, index);
+}
+
+void Instance::addListItem(const QString & widgetName, const QString & item, int index)
+{
+ insertItem(widgetName, item, index);
+}
+
+int Instance::getWinID()
+{
+ return m_instance->winId();
+}
+
+void Instance::setBusyCursor(bool busy)
+{
+ if (busy)
+ m_instance->setCursor(QCursor(Qt::WaitCursor));
+ else
+ m_instance->setCursor(QCursor(Qt::ArrowCursor));
+}
+
+
+#include "instance.moc"
diff --git a/kommander/executor/instance.h b/kommander/executor/instance.h
new file mode 100644
index 00000000..66b97455
--- /dev/null
+++ b/kommander/executor/instance.h
@@ -0,0 +1,137 @@
+/***************************************************************************
+ instance.h - description
+ -------------------
+ begin : Tue Aug 13 2002
+ copyright : (C) 2002 by Marc Britton <consume@optushome.com.au>
+ (C) 2004 by Andras Mantia <amantia@kde.org>
+ (C) 2004 by Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef INSTANCE_H
+#define INSTANCE_H
+
+/* QT INCLUDES */
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qobject.h>
+#include <qmap.h>
+#include <qguardedptr.h>
+
+/* KDE INCLUDES */
+#include <kurl.h>
+
+/* OTHER INCLUDES */
+#include "dcopkommanderif.h"
+
+/* FORWARD DECLARATIONS */
+class QWidget;
+class QDialog;
+class QFile;
+class KommanderWidget;
+
+
+
+class Instance : public QObject, virtual public DCOPKommanderIf
+{
+ Q_OBJECT
+
+public:
+ Instance();
+ Instance(QWidget*);
+ ~Instance();
+ /* passing global variables: two forms are accepted.
+ kdmr-executor file.kmdr COUNT=45 PATH=/tmp - this adds global variables 45 and PATH
+ kmdr-executor file.kmdr 45 /tmp - this adds global variables ARG1 and ARG2
+ ARGS holds space-separated list of all second-type variables (like Bash $@)
+ ARGCOUNT holds number of second-type arguments
+ */
+ virtual void addCmdlineArguments(const QStringList& args);
+
+ //DCOP methods. The documentation is in the widgets/specials.cpp file.
+ virtual void setEnabled(const QString& widgetName, bool enable);
+ virtual void enableWidget(const QString& widgetName, bool enable); /* DEPRECATED */
+ virtual void setVisible(const QString& widgetName, bool enable);
+ virtual void setText(const QString& widgetName, const QString& text);
+ virtual void changeWidgetText(const QString& widgetName, const QString& text); /* DEPRECATED */
+ virtual QString text(const QString& widgetName);
+ virtual void setSelection(const QString& widgetName, const QString& text);
+ virtual void setCurrentListItem(const QString& widgetName, const QString& text); /* DEPRECATED */
+ virtual QString selection(const QString& widgetName);
+ virtual int currentItem(const QString &widgetName);
+ virtual QString item(const QString &widgetName, int index);
+ virtual int itemDepth(const QString &widgetName, int index);
+ virtual QString itemPath(const QString &widgetName, int index);
+ virtual void removeItem(const QString &widgetName, int index);
+ virtual void removeListItem(const QString &widgetName, int index); /* DEPRECATED */
+ virtual void insertItem(const QString &widgetName, const QString &item, int index);
+ virtual void addListItem(const QString &widgetName, const QString &item, int index); /* DEPRECATED */
+ virtual void setPixmap(const QString &widgetName, const QString &iconName, int index);
+ virtual void insertItems(const QString &widgetName, const QStringList &items, int index);
+ virtual void addListItems(const QString &widgetName, const QStringList &items, int index);/*DEPRECATED*/
+ virtual void addUniqueItem(const QString &widgetName, const QString &item);
+ virtual int findItem(const QString &widgetName, const QString &item);
+ virtual void clear(const QString &widgetName);
+ virtual void clearList(const QString &widgetName); /* DEPRECATED */
+ virtual void setCurrentItem(const QString &widgetName, int index);
+ virtual void setCurrentTab(const QString &widgetName, int index); /* DEPRECATED */
+ virtual void insertTab(const QString &widgetName, const QString &label, int index);
+ virtual void setChecked(const QString &widgetName, bool checked);
+ virtual bool checked(const QString &widgetName);
+ virtual void setAssociatedText(const QString &widgetName, const QString &text);
+ virtual QStringList associatedText(const QString &widgetName);
+ virtual QString type(const QString& widget);
+ virtual QStringList children(const QString& parent, bool recursive);
+ virtual QString global(const QString& variableName);
+ virtual void setGlobal(const QString& variableName, const QString& value);
+ virtual void setMaximum(const QString &widgetName, int value);
+ virtual QString execute(const QString &widgetName);
+ virtual void cancel(const QString &widgetName);
+ virtual int count(const QString &widgetName);
+ virtual int currentColumn(const QString &widgetName);
+ virtual int currentRow(const QString &widgetName);
+ virtual void insertRow(const QString &widgetName, int row, int count);
+ virtual void insertColumn(const QString &widgetName, int column, int count);
+ virtual void setCellText(const QString &widgetName, int row, int column, const QString& text);
+ virtual QString cellText(const QString &widgetName, int row, int column);
+ virtual void removeRow(const QString &widgetName, int row, int count);
+ virtual void removeColumn(const QString &widgetName, int column, int count);
+ virtual void setRowCaption(const QString &widgetName, int row, const QString& text);
+ virtual void setColumnCaption(const QString &widgetName, int column, const QString& text);
+ virtual int getWinID();
+ virtual void setBusyCursor(bool busy);
+ QWidget *widget() { return m_instance;}
+
+public slots:
+ /** Sets the instance's parent */
+ void setParent(QWidget*);
+ /** Returns whether the instance is built */
+ bool isBuilt() const;
+ /** Builds the instance. Uses stdin if no filename is given */
+ bool build(const KURL& fname);
+ /** Executes the instance which was built before */
+ bool run();
+private:
+ /** Check if the file exists, has correct extension and is not in a temporary (insecure) directory */
+ bool isFileValid(const KURL& fname) const;
+ /* Dialog Instance */
+ QGuardedPtr<QWidget> m_instance;
+ /* Associated Text Instance */
+ KommanderWidget *m_textInstance;
+ /** The parent widget */
+ QWidget *m_parent;
+ /* Get object by name */
+ QObject* stringToWidget(const QString& name);
+ /* Cast to Kommander widget if possible */
+ KommanderWidget* kommanderWidget(QObject* object);
+};
+
+#endif
diff --git a/kommander/executor/kmdr-executor.desktop b/kommander/executor/kmdr-executor.desktop
new file mode 100644
index 00000000..88489c68
--- /dev/null
+++ b/kommander/executor/kmdr-executor.desktop
@@ -0,0 +1,82 @@
+# KDE Config File
+[Desktop Entry]
+Type=Application
+Exec=kmdr-executor %F
+Icon=kommander
+Comment=Executor for Kommander dialogs
+Comment[bg]=Изпълнение на диалогови прозорци
+Comment[ca]=Executor per a diàlegs de Kommander
+Comment[cs]=Spouštěč dialogů Kommanderu
+Comment[da]=Udfører Kommanders dialoger
+Comment[de]=Stellt Kommander-Dialoge dar
+Comment[el]=Εκτελεστής για διαλόγους Kommander
+Comment[en_GB]=Executor for Kommander dialogues
+Comment[es]=Lanzador de cuadros de diálogo de Kommander
+Comment[et]=Kommanderi dialoogide rakendaja
+Comment[eu]=Kommander-en elkarrizketen exekutatzailea
+Comment[fa]=مجری محاوره‌های Kommander
+Comment[fi]=Komentodialogien rakentaja
+Comment[fr]=Exécuteur de boîtes de dialogue de Kommander
+Comment[gl]=Executor para os diálogos de Kommander
+Comment[hi]=कमांडर संवादों हेतु कार्यपालक
+Comment[hu]=Megjelenítőprogram Kommander-párbeszédablakokhoz
+Comment[is]=Executor fyrir Kommander glugga
+Comment[it]=Esecutore per maschere di Kommander
+Comment[ja]=Kommander ダイアログ用の Executor
+Comment[ka]=Kommander-ის დიალოგის შემსრულებელნი
+Comment[lt]=Kommander dialogų vykdyklė
+Comment[ms]=Pelaksana untuk dialog Kommander
+Comment[nds]=Föhrt Kommander-Dialogen ut
+Comment[ne]=आदेश संवादका लागि निर्वाहक
+Comment[nl]=Kommander-dialogen uitvoeren
+Comment[pl]=Uruchamianie z okien dialogowych Kommandera
+Comment[pt]=Executor dos diálogos do Kommander
+Comment[pt_BR]=Executor para diálogos do Kommander
+Comment[ru]=Выполнение диалогов Kommander
+Comment[sk]=Spúštač pre Kommander dialógy
+Comment[sl]=Izvajalnik za pogovorna okna Kommanderja
+Comment[sr]=Извршавач за Kommander-ове дијалоге
+Comment[sr@Latn]=Izvršavač za Kommander-ove dijaloge
+Comment[sv]=Körning av Kommander-dialogrutor
+Comment[ta]=Kகட்டளை உரையாடல் நிகழ்த்துபவர்
+Comment[tg]=Иҷрокунанда барои диалогҳои Kommander
+Comment[tr]=Kommander diyalogları için çalıştırıcı
+Comment[uk]=Запускач для вікон Kommander
+Comment[zh_CN]=Kommander 对话框执行器
+Comment[zh_HK]=Kommander 對話盒的運行程式
+Comment[zh_TW]=Kommander 對話盒的運行程式
+Terminal=false
+Name=Kommander Executor
+Name[br]=Aozer Kommander
+Name[ca]=Executor Kommander
+Name[cs]=Spouštěč Kommanderu
+Name[de]=Kommander-Exekutor
+Name[el]=Εκτελεστής Kommander
+Name[eu]=Kommander exekutatzailea
+Name[fa]=مجری Kommander
+Name[fi]=Komennon suorittaja
+Name[fr]=Exécuteur de Kommander
+Name[gl]=Executor de Kommander
+Name[hi]=कमांडर कार्यपालक
+Name[it]=Esecutore per Kommander
+Name[lt]=Kommander vykdyklė
+Name[ms]=Pelaksana Kommander
+Name[nds]=Kommander-Executor
+Name[ne]=आदेश निर्वाहक
+Name[nl]=Kommander Uitvoerder
+Name[pl]=Kommander: uruchamianie
+Name[pt]=Executor do Kommander
+Name[pt_BR]=Executor do Kommander
+Name[ru]=Kommander
+Name[sk]=Kommander spúštač
+Name[sl]=Izvajalnik Kommander
+Name[sr]=Kommander извршавач
+Name[sr@Latn]=Kommander izvršavač
+Name[ta]=Kகட்டளை நிகழ்த்துபவர்
+Name[tg]=Иҷрокунандаи Kommander
+Name[tr]=Kommander Çalıştırıcısı
+Name[uk]=Запускач Kommander
+Name[zh_CN]=Kommander 执行器
+Name[zh_HK]=Kommander 執行器
+Name[zh_TW]=Kommander 執行器
+MimeType=application/x-kommander
diff --git a/kommander/executor/main.cpp b/kommander/executor/main.cpp
new file mode 100644
index 00000000..589ec1cd
--- /dev/null
+++ b/kommander/executor/main.cpp
@@ -0,0 +1,102 @@
+/***************************************************************************
+ main.cpp - description
+ -------------------
+ begin : Tue Aug 13 09:31:50 EST 2002
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optushome.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* KDE INCLUDES */
+#include <kaboutdata.h>
+#include <kapplication.h>
+#include <kcmdlineargs.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <kurl.h>
+#include <kmessagebox.h>
+
+/* QT INCLUDES */
+#include <qapplication.h>
+#include <qobject.h>
+#include <qstring.h>
+
+/* OTHER INCLUDES */
+#include <cstdio>
+#include <cstdlib>
+#include "instance.h"
+#include <iostream>
+#include <kommanderversion.h>
+
+using std::cout;
+using std::endl;
+using std::cerr;
+
+
+static const char *description =
+ I18N_NOOP("Executor is a component of the Kommander dialog system that executes .kmdr files given as arguments or via stdin");
+// INSERT A DESCRIPTION FOR YOUR APPLICATION HERE
+
+static KCmdLineOptions options[] =
+{
+ { "!stdin", I18N_NOOP("Read dialog from standard input"), 0},
+ { "c <catalog>", I18N_NOOP("Use given catalog for translation"), 0},
+ { "+[file]", I18N_NOOP("Dialog to open"), 0 },
+ KCmdLineLastOption
+};
+
+int main(int argc, char *argv[])
+{
+ KAboutData aboutData( "kmdr-executor", I18N_NOOP("Kommander Executor"),
+ KOMMANDER_VERSION, description, KAboutData::License_GPL,
+ "(c) 2002, Marc Britton, (C) 2008 Andras Mantia", 0, 0, "http://kommander.kdewebdev.org");
+ aboutData.addAuthor("Andras Mantia", I18N_NOOP("Current maintainer"), "amantia@kdewebdev.org");
+ aboutData.addAuthor("Michal Rudolf", I18N_NOOP("Previous maintainer"), "mrudolf@kdewebdev.org");
+ aboutData.addAuthor("Marc Britton", I18N_NOOP("Original author"), "consume@optusnet.com.au");
+ KCmdLineArgs::init( argc, argv, &aboutData );
+ KCmdLineArgs::addCmdLineOptions( options ); // Add our own options.
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+
+ if (args->isSet("c"))
+ KLocale::setMainCatalogue(args->getOption("c"));
+ else if (args->count())
+ {
+ char buf[200];
+ QString baseFile = args->url(0).fileName();
+ int ext = baseFile.findRev('.');
+ if (ext != -1)
+ baseFile = baseFile.left(ext);
+ strcpy(buf, baseFile.latin1());
+ KLocale::setMainCatalogue(buf);
+ }
+ else
+ KLocale::setMainCatalogue("kommander");
+ KApplication app;
+
+ QObject::connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
+ if (!args->count())
+ {
+ KMessageBox::sorry(0, i18n("Error: no dialog given. Use --stdin option to read dialog from standard input.\n"));
+ return -1;
+ }
+ Instance instance;
+ if (!instance.build(args->isSet("stdin") ? QString() : args->url(0)))
+ return -1;
+
+ // Read command-line variables
+ QStringList cmdargs;
+ for (int i = !args->isSet("stdin"); i<args->count(); i++)
+ cmdargs.append(args->arg(i));
+ instance.addCmdlineArguments(cmdargs);
+
+ instance.run();
+ return 0;
+}
diff --git a/kommander/executor/register.cpp b/kommander/executor/register.cpp
new file mode 100644
index 00000000..e6c41b7f
--- /dev/null
+++ b/kommander/executor/register.cpp
@@ -0,0 +1,104 @@
+/***************************************************************************
+ register.cpp - registration of functions/specials for intance
+ -------------------
+ copyright : (C) 2004 by Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "instance.h"
+#include <dcopinformation.h>
+#include <specialinformation.h>
+
+#include <klocale.h>
+
+void Instance::registerDCOP()
+{
+ DCOPInformation::insert("enableWidget(QString,bool)");
+ DCOPInformation::insert("changeWidgetText(QString,QString)");
+ DCOPInformation::insert("currentItem(QString)");
+ DCOPInformation::insert("item(QString,int)");
+ DCOPInformation::insert("removeListItem(QString,int)");
+ DCOPInformation::insert("addListItem(QString,QString,int)");
+ DCOPInformation::insert("addListItems(QString,QStringList,int)");
+ DCOPInformation::insert("addUniqueItem(QString,QString)");
+ DCOPInformation::insert("findItem(QString,QString)");
+ DCOPInformation::insert("clearList(QString)");
+ DCOPInformation::insert("setCurrentListItem(QString,QString)");
+ DCOPInformation::insert("setCurrentTab(QString,int)");
+ DCOPInformation::insert("insertTab(QString,QString,int)");
+ DCOPInformation::insert("setChecked(QString, bool)");
+ DCOPInformation::insert("setAssociatedText(QString,QString)");
+ DCOPInformation::insert("associatedText(QString)");
+ DCOPInformation::insert("global(QString)");
+ DCOPInformation::insert("setGlobal(QString,QString)");
+}
+
+void Instance::registerSpecials()
+{
+ /* global specials */
+ SpecialInformation::insert("widgetText", 0, 0);
+ SpecialInformation::insert("selectedWidgetText", 0, 0);
+ SpecialInformation::insert("null", 0, 0);
+ SpecialInformation::insert("pid", 0, 0);
+ SpecialInformation::insert("dcopid", 0, 0);
+ SpecialInformation::insert("parentPid", 0, 0);
+ SpecialInformation::insert("execBegin", 0, 1);
+ SpecialInformation::insert("env", 1, 1);
+ SpecialInformation::insert("exec", 1, 1);
+ SpecialInformation::insert("execBackground", 1, 1);
+ SpecialInformation::insert("global", 1, 1);
+ SpecialInformation::insert("dialog", 1, 2);
+ SpecialInformation::insert("readSetting", 2, 2);
+ SpecialInformation::insert("setGlobal", 2, 2);
+ SpecialInformation::insert("writeSetting", 2, 2);
+ SpecialInformation::insert("dcop", 4, 10);
+
+ /* array specials */
+ SpecialInformation::setCurrentObject("Array");
+ SpecialInformation::insert("values", 1, 1, i18n( "Return EOL-separated list of all values in the array.") );
+ SpecialInformation::insert("keys", 1, 1, i18n( "Return EOL-separated list of all keys in the array.") );
+ SpecialInformation::insert("clear", 1, 1, i18n( "Remove all elements from the array.") );
+ SpecialInformation::insert("count", 1, 1, i18n( "Return number of elements in the array.") );
+ SpecialInformation::insert("value", 2, 2, i18n( "Return the value associated with given key.") );
+ SpecialInformation::insert("remove", 2, 2, i18n( "Remove element with given key from the array.") );
+ SpecialInformation::insert("setValue", 3, 3, i18n( "Add element with given key and value to the array") );
+ SpecialInformation::insert("fromString", 2, 2, i18n( "Add all elements in the string to the array. "
+ "String should have <i>key>\\tvalue\\n</i> format.") );
+ SpecialInformation::insert("toString", 1, 1, i18n( "Return all elements in the array in "
+ "<i>key>\\tvalue\\n</i> format.") );
+ SpecialInformation::insertInternal("indexedFromString", 3, 3, i18n( "Create an integer indexed array - starting from 0 - from a string. Use the separator character to split the string.") );
+ SpecialInformation::insertInternal("indexedToString", 2, 2, i18n( "Create a string from an integer indexed array. Concatenate the elements with the separator character.") );
+ SpecialInformation::insertInternal("indexedRemoveElement", 2, 2, i18n( "Remove the element specified by the key from an indexed array and reindex the array.") );
+
+ SpecialInformation::setCurrentObject("String");
+ SpecialInformation::insert("length", 1, 1, i18n( "Return number of chars in the string.") );
+ SpecialInformation::insert("contains", 2, 2, i18n( "Check if the string contains given substring.") );
+ SpecialInformation::insert("find", 2, 2, i18n( "Return position of a substring in the string, "
+ "or -1 if it isn't found.") );
+ SpecialInformation::insert("left", 2, 2, i18n( "Return first n chars of the string.") );
+ SpecialInformation::insert("right", 2, 2, i18n( "Return last n chars of the string.") );
+ SpecialInformation::insert("mid", 3, 3, i18n( "Return substring of the string, starting from "
+ "given position.") );
+ SpecialInformation::insert("remove", 2, 2, i18n( "Replace all occurencies of given substring.") );
+ SpecialInformation::insert("replace", 3, 3, i18n( "Replace all occurencies of given substring "
+ "with given replacement.") );
+ SpecialInformation::insert("upper", 1, 1, i18n( "Convert the string to uppercase.") );
+ SpecialInformation::insert("lower", 1, 1, i18n( "Convert the string to lowercase.") );
+ SpecialInformation::insert("compare", 2, 2, i18n( "Compare two strings. Return 0 if they are equal, "
+ "-1 if the first one is lower, 1 if the first one is higher") );
+ SpecialInformation::insert("isEmpty", 1, 1, i18n( "Check if string is empty.") );
+ SpecialInformation::insert("isNumber", 1, 1, i18n( "Check if string is a valid number.") );
+
+ SpecialInformation::setCurrentObject("File");
+ SpecialInformation::insert("read", 1, 1, i18n( "Return content of given file.") );
+ SpecialInformation::insert("write", 2, 2, i18n( "Write given string to a file.") );
+ SpecialInformation::insert("append", 2, 2, i18n( "Append given string to the end of a file.") );
+}
diff --git a/kommander/executor/templates/cpp_template b/kommander/executor/templates/cpp_template
new file mode 100644
index 00000000..6afef5d4
--- /dev/null
+++ b/kommander/executor/templates/cpp_template
@@ -0,0 +1,16 @@
+/***************************************************************************
+ |FILENAME| - description
+ -------------------
+ begin : |DATE|
+ copyright : (C) |YEAR| by |AUTHOR|
+ email : |EMAIL|
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
diff --git a/kommander/executor/templates/header_template b/kommander/executor/templates/header_template
new file mode 100644
index 00000000..6afef5d4
--- /dev/null
+++ b/kommander/executor/templates/header_template
@@ -0,0 +1,16 @@
+/***************************************************************************
+ |FILENAME| - description
+ -------------------
+ begin : |DATE|
+ copyright : (C) |YEAR| by |AUTHOR|
+ email : |EMAIL|
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
diff --git a/kommander/factory/Makefile.am b/kommander/factory/Makefile.am
new file mode 100644
index 00000000..60eb0e6d
--- /dev/null
+++ b/kommander/factory/Makefile.am
@@ -0,0 +1,16 @@
+noinst_LTLIBRARIES = libkommanderfactory.la
+
+# set the include path for X, qt and KDE
+AM_CPPFLAGS = -I$(top_srcdir)/kommander/widget -I$(top_srcdir)/kommander/plugin $(all_includes)
+
+# the library search path.
+libkommanderfactory_la_LDFLAGS = $(KDE_RPATH) $(all_libraries) -no-undefined
+libkommanderfactory_la_LIBADD = $(top_builddir)/kommander/plugin/libkommanderplugin.la
+
+# which sources should be compiled for factory
+libkommanderfactory_la_SOURCES = kommanderfactory.cpp domtool.cpp
+include_HEADERS = kommanderfactory.h
+noinst_HEADERS = domtool.h
+
+# let automoc handle all of the meta source files (moc)
+METASOURCES = AUTO
diff --git a/kommander/factory/domtool.cpp b/kommander/factory/domtool.cpp
new file mode 100644
index 00000000..d8c9fcd3
--- /dev/null
+++ b/kommander/factory/domtool.cpp
@@ -0,0 +1,412 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "domtool.h"
+
+#include <qsizepolicy.h>
+#include <qcolor.h>
+#include <qcursor.h>
+#include <qdatetime.h>
+#include <qrect.h>
+#include <qsize.h>
+#include <qfont.h>
+#include <qdom.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()
+ */
+QVariant DomTool::readProperty( const QDomElement& e, const QString& name, const QVariant& defValue )
+{
+ QDomElement n;
+ for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {
+ if ( n.tagName() == "property" ) {
+ if ( n.attribute( "name" ) != name )
+ continue;
+ return elementToVariant( n.firstChild().toElement(), defValue );
+ }
+ }
+ return defValue;
+}
+
+/*!
+ Returns wheter object \a e defines property \a name or not.
+
+ \sa readProperty()
+ */
+bool DomTool::hasProperty( const QDomElement& e, const QString& name )
+{
+ QDomElement n;
+ for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {
+ if ( n.tagName() == "property" ) {
+ if ( n.attribute( "name" ) != name )
+ continue;
+ return true;
+ }
+ }
+ return false;
+}
+
+QStringList DomTool::propertiesOfType( const QDomElement& e, const QString& type )
+{
+ QStringList result;
+ QDomElement n;
+ for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {
+ if ( n.tagName() == "property" ) {
+ QDomElement n2 = n.firstChild().toElement();
+ if ( n2.tagName() == type )
+ result += n.attribute( "name" );
+ }
+ }
+ return result;
+}
+
+
+QVariant DomTool::elementToVariant( const QDomElement& e, const QVariant& defValue )
+{
+ QString dummy;
+ return elementToVariant( e, defValue, dummy );
+}
+
+/*!
+ Interprets element \a e as variant and returns the result of the interpretation.
+ */
+QVariant DomTool::elementToVariant( const QDomElement& e, const QVariant& defValue, QString &comment )
+{
+ QVariant v;
+ if ( e.tagName() == "rect" ) {
+ QDomElement n3 = e.firstChild().toElement();
+ int x = 0, y = 0, w = 0, h = 0;
+ while ( !n3.isNull() ) {
+ if ( n3.tagName() == "x" )
+ x = n3.firstChild().toText().data().toInt();
+ else if ( n3.tagName() == "y" )
+ y = n3.firstChild().toText().data().toInt();
+ else if ( n3.tagName() == "width" )
+ w = n3.firstChild().toText().data().toInt();
+ else if ( n3.tagName() == "height" )
+ h = n3.firstChild().toText().data().toInt();
+ n3 = n3.nextSibling().toElement();
+ }
+ v = QVariant( QRect( x, y, w, h ) );
+ } else if ( e.tagName() == "point" ) {
+ QDomElement n3 = e.firstChild().toElement();
+ int x = 0, y = 0;
+ while ( !n3.isNull() ) {
+ if ( n3.tagName() == "x" )
+ x = n3.firstChild().toText().data().toInt();
+ else if ( n3.tagName() == "y" )
+ y = n3.firstChild().toText().data().toInt();
+ n3 = n3.nextSibling().toElement();
+ }
+ v = QVariant( QPoint( x, y ) );
+ } else if ( e.tagName() == "size" ) {
+ QDomElement n3 = e.firstChild().toElement();
+ int w = 0, h = 0;
+ while ( !n3.isNull() ) {
+ if ( n3.tagName() == "width" )
+ w = n3.firstChild().toText().data().toInt();
+ else if ( n3.tagName() == "height" )
+ h = n3.firstChild().toText().data().toInt();
+ n3 = n3.nextSibling().toElement();
+ }
+ v = QVariant( QSize( w, h ) );
+ } else if ( e.tagName() == "color" ) {
+ v = QVariant( readColor( e ) );
+ } else if ( e.tagName() == "font" ) {
+ QDomElement n3 = e.firstChild().toElement();
+ QFont f( defValue.toFont() );
+ while ( !n3.isNull() ) {
+ if ( n3.tagName() == "family" )
+ f.setFamily( n3.firstChild().toText().data() );
+ else if ( n3.tagName() == "pointsize" )
+ f.setPointSize( n3.firstChild().toText().data().toInt() );
+ else if ( n3.tagName() == "bold" )
+ f.setBold( n3.firstChild().toText().data().toInt() );
+ else if ( n3.tagName() == "italic" )
+ f.setItalic( n3.firstChild().toText().data().toInt() );
+ else if ( n3.tagName() == "underline" )
+ f.setUnderline( n3.firstChild().toText().data().toInt() );
+ else if ( n3.tagName() == "strikeout" )
+ f.setStrikeOut( n3.firstChild().toText().data().toInt() );
+ n3 = n3.nextSibling().toElement();
+ }
+ v = QVariant( f );
+ } else if ( e.tagName() == "string" ) {
+ v = QVariant( e.firstChild().toText().data() );
+ QDomElement n = e;
+ n = n.nextSibling().toElement();
+ if ( n.tagName() == "comment" )
+ comment = n.firstChild().toText().data();
+ } else if ( e.tagName() == "cstring" ) {
+ v = QVariant( QCString( e.firstChild().toText().data() ) );
+ } else if ( e.tagName() == "number" ) {
+ bool ok = true;
+ v = QVariant( e.firstChild().toText().data().toInt( &ok ) );
+ if ( !ok )
+ v = QVariant( e.firstChild().toText().data().toDouble() );
+ } else if ( e.tagName() == "bool" ) {
+ QString t = e.firstChild().toText().data();
+ v = QVariant( t == "true" || t == "1", 0 );
+ } else if ( e.tagName() == "pixmap" ) {
+ v = QVariant( e.firstChild().toText().data() );
+ } else if ( e.tagName() == "iconset" ) {
+ v = QVariant( e.firstChild().toText().data() );
+ } else if ( e.tagName() == "image" ) {
+ v = QVariant( e.firstChild().toText().data() );
+ } else if ( e.tagName() == "enum" ) {
+ v = QVariant( e.firstChild().toText().data() );
+ } else if ( e.tagName() == "set" ) {
+ v = QVariant( e.firstChild().toText().data() );
+ } else if ( e.tagName() == "sizepolicy" ) {
+ QDomElement n3 = e.firstChild().toElement();
+ QSizePolicy sp;
+ while ( !n3.isNull() ) {
+ if ( n3.tagName() == "hsizetype" )
+ sp.setHorData( (QSizePolicy::SizeType)n3.firstChild().toText().data().toInt() );
+ else if ( n3.tagName() == "vsizetype" )
+ sp.setVerData( (QSizePolicy::SizeType)n3.firstChild().toText().data().toInt() );
+ else if ( n3.tagName() == "horstretch" )
+ sp.setHorStretch( n3.firstChild().toText().data().toInt() );
+ else if ( n3.tagName() == "verstretch" )
+ sp.setVerStretch( n3.firstChild().toText().data().toInt() );
+ n3 = n3.nextSibling().toElement();
+ }
+ v = QVariant( sp );
+ } else if ( e.tagName() == "cursor" ) {
+ v = QVariant( QCursor( e.firstChild().toText().data().toInt() ) );
+ } else if ( e.tagName() == "stringlist" ) {
+ QStringList lst;
+ QDomElement n;
+ for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() )
+ lst << n.firstChild().toText().data();
+ v = QVariant( lst );
+ } else if ( e.tagName() == "date" ) {
+ QDomElement n3 = e.firstChild().toElement();
+ int y, m, d;
+ y = m = d = 0;
+ while ( !n3.isNull() ) {
+ if ( n3.tagName() == "year" )
+ y = n3.firstChild().toText().data().toInt();
+ else if ( n3.tagName() == "month" )
+ m = n3.firstChild().toText().data().toInt();
+ else if ( n3.tagName() == "day" )
+ d = n3.firstChild().toText().data().toInt();
+ n3 = n3.nextSibling().toElement();
+ }
+ v = QVariant( QDate( y, m, d ) );
+ } else if ( e.tagName() == "time" ) {
+ QDomElement n3 = e.firstChild().toElement();
+ int h, m, s;
+ h = m = s = 0;
+ while ( !n3.isNull() ) {
+ if ( n3.tagName() == "hour" )
+ h = n3.firstChild().toText().data().toInt();
+ else if ( n3.tagName() == "minute" )
+ m = n3.firstChild().toText().data().toInt();
+ else if ( n3.tagName() == "second" )
+ s = n3.firstChild().toText().data().toInt();
+ n3 = n3.nextSibling().toElement();
+ }
+ v = QVariant( QTime( h, m, s ) );
+ } else if ( e.tagName() == "datetime" ) {
+ QDomElement n3 = e.firstChild().toElement();
+ int h, mi, s, y, mo, d ;
+ h = mi = s = y = mo = d = 0;
+ while ( !n3.isNull() ) {
+ if ( n3.tagName() == "hour" )
+ h = n3.firstChild().toText().data().toInt();
+ else if ( n3.tagName() == "minute" )
+ mi = n3.firstChild().toText().data().toInt();
+ else if ( n3.tagName() == "second" )
+ s = n3.firstChild().toText().data().toInt();
+ else if ( n3.tagName() == "year" )
+ y = n3.firstChild().toText().data().toInt();
+ else if ( n3.tagName() == "month" )
+ mo = n3.firstChild().toText().data().toInt();
+ else if ( n3.tagName() == "day" )
+ d = n3.firstChild().toText().data().toInt();
+ n3 = n3.nextSibling().toElement();
+ }
+ v = QVariant( QDateTime( QDate( y, mo, d ), QTime( h, mi, s ) ) );
+ }
+ return v;
+}
+
+
+/*! Returns the color which is returned in the dom element \a e.
+ */
+
+QColor DomTool::readColor( const QDomElement &e )
+{
+ QDomElement n = e.firstChild().toElement();
+ int r= 0, g = 0, b = 0;
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "red" )
+ r = n.firstChild().toText().data().toInt();
+ else if ( n.tagName() == "green" )
+ g = n.firstChild().toText().data().toInt();
+ else if ( n.tagName() == "blue" )
+ b = n.firstChild().toText().data().toInt();
+ n = n.nextSibling().toElement();
+ }
+
+ return QColor( r, g, b );
+}
+
+/*!
+ Returns the contents of attribute \a name of object \a e as
+ variant or the variant passed as \a defValue if the attribute does
+ not exist.
+
+ \sa hasAttribute()
+ */
+QVariant DomTool::readAttribute( const QDomElement& e, const QString& name, const QVariant& defValue )
+{
+ QDomElement n;
+ for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {
+ if ( n.tagName() == "attribute" ) {
+ if ( n.attribute( "name" ) != name )
+ continue;
+ return elementToVariant( n.firstChild().toElement(), defValue );
+ }
+ }
+ return defValue;
+}
+
+/*!
+ Returns wheter object \a e defines attribute \a name or not.
+
+ \sa readAttribute()
+ */
+bool DomTool::hasAttribute( const QDomElement& e, const QString& name )
+{
+ QDomElement n;
+ for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {
+ if ( n.tagName() == "attribute" ) {
+ if ( n.attribute( "name" ) != name )
+ continue;
+ return true;
+ }
+ }
+ return false;
+}
+
+static bool toBool( const QString& s )
+{
+ return s == "true" || s.toInt() != 0;
+}
+
+/*!
+ Convert Qt 2.x format to Qt 3.0 format if necessary
+*/
+void DomTool::fixDocument( QDomDocument& doc )
+{
+ QDomElement e;
+ QDomNode n;
+ QDomNodeList nl;
+ uint i = 0;
+
+ e = doc.firstChild().toElement();
+ if ( e.tagName() != "UI" )
+ return;
+ if ( e.hasAttribute("version") && e.attribute("version").toDouble() >= 3.0 )
+ return;
+
+ e.setAttribute( "version", 3.0 );
+
+ e.setAttribute("stdsetdef", 1 );
+ nl = doc.elementsByTagName( "property" );
+ uint nllen = nl.length();
+ for ( i = 0; i < nllen; i++ ) {
+ e = nl.item(i).toElement();
+ QString name;
+ QDomElement n2 = e.firstChild().toElement();
+ if ( n2.tagName() == "name" ) {
+ name = n2.firstChild().toText().data();
+ e.setAttribute( "name", name );
+ e.removeChild( n2 );
+ }
+ bool stdset = toBool( e.attribute( "stdset" ) );
+ if ( stdset || name == "toolTip" || name == "whatsThis" ||
+ name == "buddy" ||
+ e.parentNode().toElement().tagName() == "item" ||
+ e.parentNode().toElement().tagName() == "spacer" ||
+ e.parentNode().toElement().tagName() == "column"
+ )
+ e.removeAttribute( "stdset" );
+ else
+ e.setAttribute( "stdset", 0 );
+ }
+
+ nl = doc.elementsByTagName( "attribute" );
+ nllen = nl.length();
+ for ( i = 0; i < nllen; i++ ) {
+ e = nl.item(i).toElement();
+ QString name;
+ QDomElement n2 = e.firstChild().toElement();
+ if ( n2.tagName() == "name" ) {
+ name = n2.firstChild().toText().data();
+ e.setAttribute( "name", name );
+ e.removeChild( n2 );
+ }
+ }
+
+ nl = doc.elementsByTagName( "image" );
+ nllen = nl.length();
+ for ( i = 0; i < nllen; i++ ) {
+ e = nl.item(i).toElement();
+ QString name;
+ QDomElement n2 = e.firstChild().toElement();
+ if ( n2.tagName() == "name" ) {
+ name = n2.firstChild().toText().data();
+ e.setAttribute( "name", name );
+ e.removeChild( n2 );
+ }
+ }
+
+ nl = doc.elementsByTagName( "widget" );
+ nllen = nl.length();
+ for ( i = 0; i < nllen; i++ ) {
+ e = nl.item(i).toElement();
+ QString name;
+ QDomElement n2 = e.firstChild().toElement();
+ if ( n2.tagName() == "class" ) {
+ name = n2.firstChild().toText().data();
+ e.setAttribute( "class", name );
+ e.removeChild( n2 );
+ }
+ }
+
+}
+
diff --git a/kommander/factory/domtool.h b/kommander/factory/domtool.h
new file mode 100644
index 00000000..fac628a4
--- /dev/null
+++ b/kommander/factory/domtool.h
@@ -0,0 +1,45 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef DOMTOOL_H
+#define DOMTOOL_H
+
+#include <qvariant.h>
+#include <qnamespace.h>
+
+class QDomElement;
+class QDomDocument;
+
+class DomTool : public Qt
+{
+public:
+ static QVariant readProperty( const QDomElement& e, const QString& name, const QVariant& defValue );
+ static bool hasProperty( const QDomElement& e, const QString& name );
+ static QStringList propertiesOfType( const QDomElement& e, const QString& type );
+ static QVariant elementToVariant( const QDomElement& e, const QVariant& defValue );
+ static QVariant elementToVariant( const QDomElement& e, const QVariant& defValue, QString &comment );
+ static QVariant readAttribute( const QDomElement& e, const QString& name, const QVariant& defValue );
+ static bool hasAttribute( const QDomElement& e, const QString& name );
+ static QColor readColor( const QDomElement &e );
+ static void fixDocument( QDomDocument& );
+};
+
+
+#endif // DOMTOOL_H
diff --git a/kommander/factory/kommanderfactory.cpp b/kommander/factory/kommanderfactory.cpp
new file mode 100644
index 00000000..f3078830
--- /dev/null
+++ b/kommander/factory/kommanderfactory.cpp
@@ -0,0 +1,1486 @@
+/**********************************************************************
+** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** 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.
+**
+**********************************************************************/
+/* Modifications by Marc Britton (c) 2002 under GNU GPL, terms as above */
+
+#include <kconfig.h>
+#include <klibloader.h>
+
+#include "kommanderfactory.h"
+#include <kommanderplugin.h>
+
+
+#include <qfeatures.h>
+#include "config.h"
+#ifndef QT_NO_SQL
+#include "database2.h"
+#endif
+#include <qdom.h>
+#include <qdir.h>
+#include <qlayout.h>
+#include <qmetaobject.h>
+#include "domtool.h"
+#include <qapplication.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qobjectlist.h>
+#include <private/qpluginmanager_p.h>
+#include <qmime.h>
+#include <qdragobject.h>
+#include <zlib.h>
+
+#ifndef QT_NO_SQL
+#include <qsqlrecord.h>
+#include <qsqldatabase.h>
+#include <qdatatable.h>
+#endif
+
+// include all Qt widgets we support
+#include <qpushbutton.h>
+#include <qtoolbutton.h>
+#include <qcheckbox.h>
+#include <qradiobutton.h>
+#include <qgroupbox.h>
+#include <qbuttongroup.h>
+#include <qiconview.h>
+#include <qheader.h>
+#ifndef QT_NO_TABLE
+#include <qtable.h>
+#endif
+#include <qlistbox.h>
+#include <qlistview.h>
+#include <qlineedit.h>
+#include <qspinbox.h>
+#include <qmultilineedit.h>
+#include <qlabel.h>
+#include <qwidget.h>
+#include <qtabwidget.h>
+#include <qcombobox.h>
+#include <qdialog.h>
+#include <qwizard.h>
+#include <qlcdnumber.h>
+#include <qprogressbar.h>
+#include <qtextview.h>
+#include <qtextbrowser.h>
+#include <qdial.h>
+#include <qslider.h>
+#include <qframe.h>
+#include <qwidgetstack.h>
+#include <qtextedit.h>
+#include <qscrollbar.h>
+#include <qmainwindow.h>
+#include <qsplitter.h>
+#include <qaction.h>
+#include <qpopupmenu.h>
+#include <qmenubar.h>
+#include <qdatetimeedit.h>
+#include <qtoolbox.h>
+
+#include <stdlib.h>
+#include <kglobal.h>
+#include <klocale.h>
+
+#include "kmdrmainwindow.h"
+
+QPtrList<KommanderPlugin> widgetPlugins;
+
+QMap<QWidget*, QString> *qwf_functions = 0;
+QMap<QWidget*, QString> *qwf_forms = 0;
+QString *qwf_language = 0;
+bool qwf_execute_code = true;
+bool qwf_stays_on_top = false;
+QString *qwf_currFileName = 0L; //is this really used?
+
+KommanderFactory::KommanderFactory()
+ : dbControls( 0 ), usePixmapCollection( false )
+{
+ widgetPlugins.setAutoDelete( true );
+ defSpacing = 6;
+ defMargin = 11;
+ if (!qwf_currFileName)
+ qwf_currFileName = new QString();
+}
+
+KommanderFactory::~KommanderFactory()
+{
+ delete qwf_currFileName;
+ qwf_currFileName = 0L;
+}
+
+QWidget *KommanderFactory::create( const QString &uiFile, QObject *connector, QWidget *parent, const char *name )
+{
+ QFile f( uiFile );
+ if ( !f.open( IO_ReadOnly ) )
+ return 0;
+
+ if (!qwf_currFileName)
+ qwf_currFileName = new QString();
+ *qwf_currFileName = uiFile;
+ QWidget *w = KommanderFactory::create( &f, connector, parent, name );
+ if ( !qwf_forms )
+ qwf_forms = new QMap<QWidget*, QString>;
+ qwf_forms->insert( w, uiFile );
+ return w;
+}
+
+QWidget *KommanderFactory::create( QIODevice *dev, QObject *connector, QWidget *parent, const char *name )
+{
+ QDomDocument doc;
+ QString errMsg;
+ int errLine;
+ QTextStream stream(dev);
+ QString content = stream.read();
+ if (content.startsWith("#!"))
+ content = content.mid(content.find('\n'));
+ if ( !doc.setContent( content ) ) {
+// qDebug( QString("Parse error: ") + errMsg + QString(" in line %d"), errLine );
+ return 0;
+ }
+
+ DomTool::fixDocument( doc );
+
+ KommanderFactory *widgetFactory = new KommanderFactory;
+ widgetFactory->toplevel = 0;
+
+ QDomElement e = doc.firstChild().toElement().firstChild().toElement();
+
+ QDomElement variables = e;
+ while ( variables.tagName() != "variables" && !variables.isNull() )
+ variables = variables.nextSibling().toElement();
+
+ QDomElement eltSlots = e;
+ while ( eltSlots.tagName() != "slots" && !eltSlots.isNull() )
+ eltSlots = eltSlots.nextSibling().toElement();
+
+ QDomElement connections = e;
+ while ( connections.tagName() != "connections" && !connections.isNull() )
+ connections = connections.nextSibling().toElement();
+
+ QDomElement imageCollection = e;
+ while ( imageCollection.tagName() != "images" && !imageCollection.isNull() )
+ imageCollection = imageCollection.nextSibling().toElement();
+
+ QDomElement tabOrder = e;
+ while ( tabOrder.tagName() != "tabstops" && !tabOrder.isNull() )
+ tabOrder = tabOrder.nextSibling().toElement();
+
+ QDomElement actions = e;
+ while ( actions.tagName() != "actions" && !actions.isNull() )
+ actions = actions.nextSibling().toElement();
+
+ QDomElement toolbars = e;
+ while ( toolbars.tagName() != "toolbars" && !toolbars.isNull() )
+ toolbars = toolbars.nextSibling().toElement();
+
+ QDomElement menubar = e;
+ while ( menubar.tagName() != "menubar" && !menubar.isNull() )
+ menubar = menubar.nextSibling().toElement();
+
+ QDomElement functions = e;
+ while ( functions.tagName() != "functions" && !functions.isNull() )
+ functions = functions.nextSibling().toElement();
+
+ QDomElement widget;
+ while ( !e.isNull() ) {
+ if ( e.tagName() == "widget" ) {
+ widget = e;
+ } else if ( e.tagName() == "variable" ) { // compatibility with old betas
+ widgetFactory->variables << e.firstChild().toText().data();
+ } else if ( e.tagName() == "pixmapinproject" ) {
+ widgetFactory->usePixmapCollection = true;
+ } else if ( e.tagName() == "layoutdefaults" ) {
+ widgetFactory->defSpacing = e.attribute( "spacing", QString::number( widgetFactory->defSpacing ) ).toInt();
+ widgetFactory->defMargin = e.attribute( "margin", QString::number( widgetFactory->defMargin ) ).toInt();
+ }
+ e = e.nextSibling().toElement();
+ }
+
+ if ( !imageCollection.isNull() )
+ widgetFactory->loadImageCollection( imageCollection );
+
+ widgetFactory->createWidgetInternal( widget, parent, 0, widget.attribute("class", "QWidget") );
+ QWidget *w = widgetFactory->toplevel;
+ if ( !w ) {
+ delete widgetFactory;
+ return 0;
+ }
+
+ if ( !variables.isNull() ) {
+ for ( QDomElement n = variables.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() )
+ if ( n.tagName() == "variable" )
+ widgetFactory->variables << n.firstChild().toText().data();
+ }
+ if ( !eltSlots.isNull() ) {
+ for ( QDomElement n = eltSlots.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() )
+ if ( n.tagName() == "slot" ) {
+ QString s = n.firstChild().toText().data();
+ widgetFactory->languageSlots.insert( s.left( s.find( "(" ) ) , n.attribute( "language", "C++" ) );
+ }
+ }
+
+ if ( !actions.isNull() )
+ widgetFactory->loadActions( actions );
+ if ( !toolbars.isNull() )
+ widgetFactory->loadToolBars( toolbars );
+ if ( !menubar.isNull() )
+ widgetFactory->loadMenuBar( menubar );
+
+ if ( !connections.isNull() )
+ widgetFactory->loadConnections( connections, connector );
+ if ( w && name && qstrlen( name ) > 0 )
+ w->setName( name );
+
+ if ( !tabOrder.isNull() )
+ widgetFactory->loadTabOrder( tabOrder );
+
+
+ if ( widgetFactory->toplevel ) {
+#ifndef QT_NO_SQL
+ QMap<QWidget*, SqlWidgetConnection>::Iterator cit = widgetFactory->sqlWidgetConnections.begin();
+ for( ; cit != widgetFactory->sqlWidgetConnections.end(); ++cit ) {
+ if ( widgetFactory->noDatabaseWidgets.find( cit.key()->name() ) != widgetFactory->noDatabaseWidgets.end() )
+ continue;
+ if ( cit.key()->inherits( "QDesignerDataBrowser2" ) )
+ ( (QDesignerDataBrowser2*)cit.key() )->initPreview( (*cit).conn, (*cit).table, cit.key(), *(*cit).dbControls );
+ else if ( cit.key()->inherits( "QDesignerDataView2" ) )
+ ( (QDesignerDataView2*)cit.key() )->initPreview( (*cit).conn, (*cit).table, cit.key(), *(*cit).dbControls );
+ }
+
+ for ( QMap<QString, QStringList>::Iterator it = widgetFactory->dbTables.begin(); it != widgetFactory->dbTables.end(); ++it ) {
+ QDataTable *table = (QDataTable*)widgetFactory->toplevel->child( it.key(), "QDataTable" );
+ if ( !table )
+ continue;
+ if ( widgetFactory->noDatabaseWidgets.find( table->name() ) != widgetFactory->noDatabaseWidgets.end() )
+ continue;
+ QValueList<Field> fieldMap = *widgetFactory->fieldMaps.find( table );
+ QString conn = (*it)[ 0 ];
+ QSqlCursor* c = 0;
+ QSqlDatabase *db = 0;
+ if ( conn.isEmpty() || conn == "(default)" ) {
+ db = QSqlDatabase::database();
+ c = new QSqlCursor( (*it)[ 1 ] );
+ } else {
+ db = QSqlDatabase::database( conn );
+ c = new QSqlCursor( (*it)[ 1 ], true, db );
+ }
+ if ( db ) {
+ table->setSqlCursor( c, fieldMap.isEmpty(), true );
+ table->refresh( QDataTable::RefreshAll );
+ }
+ }
+#endif
+
+ }
+
+ for ( QMap<QString, QString>::Iterator it = widgetFactory->buddies.begin(); it != widgetFactory->buddies.end(); ++it ) {
+ QLabel *label = (QLabel*)widgetFactory->toplevel->child( it.key(), "QLabel" );
+ QWidget *buddy = (QWidget*)widgetFactory->toplevel->child( *it, "QWidget" );
+ if ( label && buddy )
+ label->setBuddy( buddy );
+ }
+
+ delete widgetFactory;
+
+ QApplication::sendPostedEvents();
+
+ return w;
+}
+
+void KommanderFactory::addPlugin( KommanderPlugin *plugin )
+{
+ widgetPlugins.append( plugin );
+}
+
+QWidget *KommanderFactory::createWidget( const QString &literalClassName, QWidget *parent, const char *name )
+{
+ QString className = literalClassName;
+
+ // create widgets we know
+ if (className == "QPushButton")
+ return new QPushButton(parent, name);
+ else if (className == "QToolButton")
+ return new QToolButton(parent, name);
+ else if (className == "QCheckBox")
+ return new QCheckBox(parent, name);
+ else if (className == "QRadioButton")
+ return new QRadioButton(parent, name);
+ else if (className == "QGroupBox")
+ return new QGroupBox(parent, name);
+ else if (className == "QButtonGroup")
+ return new QButtonGroup(parent, name);
+ else if (className == "QIconView")
+ {
+#if !defined(QT_NO_ICONVIEW)
+ return new QIconView(parent, name);
+#endif
+ }
+ else if (className == "QTable")
+ {
+#if !defined(QT_NO_TABLE)
+ return new QTable(parent, name);
+#endif
+ }
+ else if (className == "QListBox")
+ return new QListBox(parent, name);
+ else if (className == "QListView")
+ return new QListView(parent, name);
+ else if (className == "QLineEdit")
+ return new QLineEdit(parent, name);
+ else if (className == "QSpinBox")
+ return new QSpinBox(parent, name);
+ else if (className == "QMultiLineEdit")
+ return new QMultiLineEdit(parent, name);
+ else if (className == "QLabel")
+ return new QLabel(parent, name);
+ else if (className == "QLayoutWidget")
+ return new QWidget(parent, name);
+ else if (className == "QTabWidget")
+ return new QTabWidget(parent, name);
+ else if (className == "QComboBox")
+ return new QComboBox(false, parent, name);
+ else if (className == "QWidget")
+ {
+ if (!qwf_stays_on_top)
+ return new QWidget(parent, name);
+ return new QWidget(parent, name, Qt::WStyle_StaysOnTop);
+ }
+ else if (className == "QDialog")
+ {
+ if (!qwf_stays_on_top)
+ return new QDialog(parent, name);
+ return new QDialog(parent, name, false, Qt::WStyle_StaysOnTop);
+ }
+ else if (className == "QWizard")
+ return new QWizard(parent, name);
+ else if (className == "QLCDNumber")
+ return new QLCDNumber(parent, name);
+ else if (className == "QProgressBar")
+ return new QProgressBar(parent, name);
+ else if (className == "QTextView")
+ return new QTextView(parent, name);
+ else if (className == "QTextBrowser")
+ return new QTextBrowser(parent, name);
+ else if (className == "QDial")
+ return new QDial(parent, name);
+ else if (className == "QSlider")
+ return new QSlider(parent, name);
+ else if (className == "QFrame")
+ return new QFrame(parent, name);
+ else if (className == "QSplitter")
+ return new QSplitter(parent, name);
+ else if (className == "Line")
+ {
+ QFrame *f = new QFrame(parent, name);
+ f->setFrameStyle(QFrame::HLine | QFrame::Sunken);
+ return f;
+ }
+ else if (className == "QTextEdit")
+ return new QTextEdit(parent, name);
+ else if (className == "QDateEdit")
+ return new QDateEdit(parent, name);
+ else if (className == "QTimeEdit")
+ return new QTimeEdit(parent, name);
+ else if (className == "QDateTimeEdit")
+ return new QDateTimeEdit(parent, name);
+ else if (className == "QScrollBar")
+ return new QScrollBar(parent, name);
+ else if (className == "QPopupMenu")
+ return new QPopupMenu(parent, name);
+ else if (className == "QWidgetStack")
+ return new QWidgetStack(parent, name);
+ else if (className == "QMainWindow")
+ {
+ QMainWindow *mw = 0;
+ if (!qwf_stays_on_top)
+ mw = new KmdrMainWindow(parent, name);
+ else
+ mw = new KmdrMainWindow(parent, name, Qt::WType_TopLevel | Qt::WStyle_StaysOnTop);
+ mw->setCentralWidget(new QWidget(mw, "qt_central_widget"));
+ mw->centralWidget()->show();
+ (void) mw->statusBar();
+ return mw;
+ }
+#if !defined(QT_NO_SQL)
+ else if (className == "QDataTable")
+ return new QDataTable(parent, name);
+ else if (className == "QDataBrowser")
+ return new QDesignerDataBrowser2(parent, name);
+ else if (className == "QDataView")
+ return new QDesignerDataView2(parent, name);
+#endif
+
+ // try to create it using the loaded kommander widget plugins
+ //find the widget plugin which can create className
+ for (KommanderPlugin * p = widgetPlugins.first(); p; p = widgetPlugins.next())
+ {
+ QWidget *w = p->create(className, parent, name);
+ if (w)
+ return w;
+ }
+
+ // no success
+ return 0;
+}
+
+static int num_plugins_loaded = 0;
+
+int KommanderFactory::loadPlugins(bool force)
+{
+ if (num_plugins_loaded > 0 && !force)
+ return num_plugins_loaded;
+
+ num_plugins_loaded = 0;
+ KConfig cfg("kommanderrc", true);
+ QStringList plugins = "libkommanderwidgets";
+ plugins += cfg.readListEntry("plugins");
+ QStringList::Iterator it;
+ KLibLoader *f = KLibLoader::self();
+ for (it = plugins.begin(); it != plugins.end(); ++it)
+ {
+ KLibrary *l = f->library((*it).latin1());
+ if (l)
+ {
+ if (l->hasSymbol("kommander_plugin"))
+ {
+ void *(*kommander_plugin) () = (void *(*)()) l->symbol("kommander_plugin");
+ KommanderPlugin *p = (KommanderPlugin *) (*kommander_plugin) ();
+ widgetPlugins.append(p);
+ ++num_plugins_loaded;
+ } else
+ {
+ qWarning("KommanderFactory::loadPlugins - '%s' isn't a Kommander Plugin library, skipping.",
+ l->fileName().latin1());
+ }
+ } else
+ {
+ qWarning("KommanderFactory::loadPlugins - Can't load Kommander plugin library %s",
+ (*it).latin1());
+ }
+ }
+ //qDebug("KommanderFactory::loadPlugins returning %d", num_plugins_loaded);
+ return num_plugins_loaded;
+}
+
+FeatureList KommanderFactory::featureList()
+{
+ FeatureList features;
+ for ( KommanderPlugin *p = widgetPlugins.first(); p ; p = widgetPlugins.next() )
+ {
+ QStringList widgets = p->widgets();
+ QStringList::Iterator it;
+ for( it = widgets.begin() ; it != widgets.end() ; ++it )
+ {
+ QString wn = *it;
+ features[wn] = KommanderWidgetInfo( p->group(wn), p->toolTip(wn),p->iconSet(wn), p->whatsThis(wn), p->isContainer(wn) );
+ }
+ }
+ return features;
+ //iterate through widgetPlugins, appending KommanderPlugin::widgets() to features
+}
+
+QWidget *KommanderFactory::createWidgetInternal( const QDomElement &e, QWidget *parent, QLayout* layout, const QString &classNameArg )
+{
+ lastItem = 0;
+ QDomElement n = e.firstChild().toElement();
+ QWidget *w = 0; // the widget that got created
+ QObject *obj = 0; // gets the properties
+
+ QString className = classNameArg;
+
+ int row = e.attribute( "row" ).toInt();
+ int col = e.attribute( "column" ).toInt();
+ int rowspan = e.attribute( "rowspan" ).toInt();
+ int colspan = e.attribute( "colspan" ).toInt();
+ if ( rowspan < 1 )
+ rowspan = 1;
+ if ( colspan < 1 )
+ colspan = 1;
+ if ( !className.isEmpty() ) {
+ if ( !layout && className == "QLayoutWidget" )
+ className = "QWidget";
+ if ( layout && className == "QLayoutWidget" ) {
+ // hide layout widgets
+ w = parent;
+ } else {
+ obj = KommanderFactory::createWidget( className, parent, 0 );
+ if ( !obj )
+ {
+ return 0;
+ }
+ w = (QWidget*)obj;
+ if ( !toplevel )
+ toplevel = w;
+ if ( w->inherits( "QMainWindow" ) )
+ w = ( (QMainWindow*)w )->centralWidget();
+ if ( layout ) {
+ switch( layoutType( layout ) ) {
+ case HBox:
+ ( (QHBoxLayout*)layout )->addWidget( w );
+ break;
+ case VBox:
+ ( (QVBoxLayout*)layout )->addWidget( w );
+ break;
+ case Grid:
+ ( (QGridLayout*)layout )->addMultiCellWidget( w, row, row + rowspan - 1,
+ col, col + colspan - 1 );
+ break;
+ default:
+ break;
+ }
+ }
+
+ layout = 0;
+ }
+ }
+ if (className == "Dialog")
+ w->setProperty( "useInternalParser", false );
+
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "spacer" ) {
+ createSpacer( n, layout );
+ } else if ( n.tagName() == "widget" ) {
+ QMap< QString, QString> *oldDbControls = dbControls;
+ createWidgetInternal( n, w, layout, n.attribute( "class", "QWidget" ) );
+ dbControls = oldDbControls;
+ } else if ( n.tagName() == "hbox" ) {
+ QLayout *parentLayout = layout;
+ if ( layout && layout->inherits( "QGridLayout" ) )
+ layout = createLayout( 0, 0, KommanderFactory::HBox );
+ else
+ layout = createLayout( w, layout, KommanderFactory::HBox );
+ obj = layout;
+ n = n.firstChild().toElement();
+ if ( parentLayout && parentLayout->inherits( "QGridLayout" ) )
+ ( (QGridLayout*)parentLayout )->addMultiCellLayout( layout, row, row + rowspan - 1, col, col + colspan - 1 );
+ continue;
+ } else if ( n.tagName() == "grid" ) {
+ QLayout *parentLayout = layout;
+ if ( layout && layout->inherits( "QGridLayout" ) )
+ layout = createLayout( 0, 0, KommanderFactory::Grid );
+ else
+ layout = createLayout( w, layout, KommanderFactory::Grid );
+ obj = layout;
+ n = n.firstChild().toElement();
+ if ( parentLayout && parentLayout->inherits( "QGridLayout" ) )
+ ( (QGridLayout*)parentLayout )->addMultiCellLayout( layout, row, row + rowspan - 1, col, col + colspan - 1 );
+ continue;
+ } else if ( n.tagName() == "vbox" ) {
+ QLayout *parentLayout = layout;
+ if ( layout && layout->inherits( "QGridLayout" ) )
+ layout = createLayout( 0, 0, KommanderFactory::VBox );
+ else
+ layout = createLayout( w, layout, KommanderFactory::VBox );
+ obj = layout;
+ n = n.firstChild().toElement();
+ if ( parentLayout && parentLayout->inherits( "QGridLayout" ) )
+ ( (QGridLayout*)parentLayout )->addMultiCellLayout( layout, row, row + rowspan - 1, col, col + colspan - 1 );
+ continue;
+ } else if ( n.tagName() == "property" && obj ) {
+ setProperty( obj, n.attribute( "name" ), n.firstChild().toElement() );
+ } else if ( n.tagName() == "attribute" && w ) {
+ QString attrib = n.attribute( "name" );
+ QVariant v = DomTool::elementToVariant( n.firstChild().toElement(), QVariant() );
+ if ( parent->inherits( "QTabWidget" ) ) {
+ if ( attrib == "title" )
+ ( (QTabWidget*)parent )->insertTab( w, translate(v.toString()) );
+ } else
+ if ( parent->inherits( "QToolBox" ) ) {
+ if ( attrib == "label" )
+ ( (QToolBox*)parent )->addItem( w, translate(v.toString()) );
+ }else if ( parent->inherits( "QWizard" ) ) {
+ if ( attrib == "title" )
+ ( (QWizard*)parent )->addPage( w, translate(v.toString()) );
+ }
+ } else if ( n.tagName() == "item" ) {
+ createItem( n, w );
+ } else if ( n.tagName() == "column" || n.tagName() == "row" ) {
+ createColumn( n, w );
+ }
+
+ n = n.nextSibling().toElement();
+ }
+
+ return w;
+}
+
+QLayout *KommanderFactory::createLayout( QWidget *widget, QLayout* layout, LayoutType type )
+{
+ int spacing = defSpacing;
+ int margin = defMargin;
+
+ if ( !layout && widget && widget->inherits( "QTabWidget" ) )
+ widget = ((QTabWidget*)widget)->currentPage();
+ if ( !layout && widget && widget->inherits( "QToolBox" ) )
+ widget = ((QToolBox*)widget)->currentItem();
+
+ if ( !layout && widget && widget->inherits( "QWizard" ) )
+ widget = ((QWizard*)widget)->currentPage();
+
+ if ( !layout && widget && widget->inherits( "QWidgetStack" ) )
+ widget = ((QWidgetStack*)widget)->visibleWidget();
+
+ if ( !layout && widget && widget->inherits( "QGroupBox" ) ) {
+ QGroupBox *gb = (QGroupBox*)widget;
+ gb->setColumnLayout( 0, Qt::Vertical );
+ gb->layout()->setMargin( 0 );
+ gb->layout()->setSpacing( 0 );
+ QLayout *l;
+ switch ( type ) {
+ case HBox:
+ l = new QHBoxLayout( gb->layout() );
+ l->setAlignment( Qt::AlignTop );
+ return l;
+ case VBox:
+ l = new QVBoxLayout( gb->layout(), spacing );
+ l->setAlignment( Qt::AlignTop );
+ return l;
+ case Grid:
+ l = new QGridLayout( gb->layout() );
+ l->setAlignment( Qt::AlignTop );
+ return l;
+ default:
+ return 0;
+ }
+ } else {
+ if ( layout ) {
+ QLayout *l;
+ switch ( type ) {
+ case HBox:
+ l = new QHBoxLayout( layout );
+ l->setSpacing( spacing );
+ l->setMargin( margin );
+ return l;
+ case VBox:
+ l = new QVBoxLayout( layout );
+ l->setSpacing( spacing );
+ l->setMargin( margin );
+ return l;
+ case Grid: {
+ l = new QGridLayout( layout );
+ l->setSpacing( spacing );
+ l->setMargin( margin );
+ return l;
+ }
+ default:
+ return 0;
+ }
+ } else {
+ QLayout *l;
+ switch ( type ) {
+ case HBox:
+ l = new QHBoxLayout( widget );
+ if ( !widget ) {
+ l->setMargin( margin );
+ l->setSpacing( spacing );
+ }
+ return l;
+ case VBox:
+ l = new QVBoxLayout( widget );
+ if ( !widget ) {
+ l->setMargin( margin );
+ l->setSpacing( spacing );
+ }
+ return l;
+ case Grid: {
+ l = new QGridLayout( widget );
+ if ( !widget ) {
+ l->setMargin( margin );
+ l->setSpacing( spacing );
+ }
+ return l;
+ }
+ default:
+ return 0;
+ }
+ }
+ }
+}
+
+KommanderFactory::LayoutType KommanderFactory::layoutType( QLayout *layout ) const
+{
+ if ( layout->inherits( "QHBoxLayout" ) )
+ return HBox;
+ else if ( layout->inherits( "QVBoxLayout" ) )
+ return VBox;
+ else if ( layout->inherits( "QGridLayout" ) )
+ return Grid;
+ return NoLayout;
+}
+
+void KommanderFactory::setProperty( QObject* obj, const QString &prop, const QDomElement &e )
+{
+ const QMetaProperty *p = obj->metaObject()->property( obj->metaObject()->findProperty( prop, true ), true );
+
+ QVariant defVariant;
+ if ( e.tagName() == "font" ) {
+ QFont f( qApp->font() );
+ if ( obj->isWidgetType() && ( (QWidget*)obj )->parentWidget() )
+ f = ( (QWidget*)obj )->parentWidget()->font();
+ defVariant = QVariant( f );
+ }
+
+ QString comment;
+ QVariant v( DomTool::elementToVariant( e, defVariant, comment ) );
+
+ if ( e.tagName() == "pixmap" ) {
+ QPixmap pix = loadPixmap( e );
+ if ( pix.isNull() )
+ return;
+ v = QVariant( pix );
+ } else if ( e.tagName() == "iconset" ) {
+ QPixmap pix = loadPixmap( e );
+ if ( pix.isNull() )
+ return;
+ v = QVariant( QIconSet( pix ) );
+ } else if ( e.tagName() == "image" ) {
+ v = QVariant( loadFromCollection( v.toString() ) );
+ } else if ( e.tagName() == "string" ) {
+ v = QVariant( translate( v.asString(), comment ) );
+ }
+
+ if ( !p ) {
+ if ( obj->isWidgetType() ) {
+ if ( prop == "toolTip" ) {
+ if ( !v.toString().isEmpty() )
+ QToolTip::add( (QWidget*)obj, translate(v.toString()) );
+ } else if ( prop == "whatsThis" ) {
+ if ( !v.toString().isEmpty() )
+ QWhatsThis::add( (QWidget*)obj, translate(v.toString()) );
+ }
+#ifndef QT_NO_SQL
+ if ( prop == "database" && !obj->inherits( "QDataView" )
+ && !obj->inherits( "QDataBrowser" ) ) {
+ QStringList lst = DomTool::elementToVariant( e, QVariant( QStringList() ) ).toStringList();
+ if ( lst.count() > 2 ) {
+ if ( dbControls )
+ dbControls->insert( obj->name(), lst[ 2 ] );
+ } else if ( lst.count() == 2 ) {
+ dbTables.insert( obj->name(), lst );
+ }
+ } else if ( prop == "database" ) {
+ QStringList lst = DomTool::elementToVariant( e, QVariant( QStringList() ) ).toStringList();
+ if ( lst.count() == 2 && obj->inherits( "QWidget" ) ) {
+ SqlWidgetConnection conn( lst[ 0 ], lst[ 1 ] );
+ sqlWidgetConnections.insert( (QWidget*)obj, conn );
+ dbControls = conn.dbControls;
+ }
+ } else
+#endif
+ if ( prop == "buddy" ) {
+ buddies.insert( obj->name(), v.toCString() );
+ } else if ( prop == "frameworkCode" ) {
+ if ( !DomTool::elementToVariant( e, QVariant( true, 0 ) ).toBool() ) {
+ noDatabaseWidgets << obj->name();
+ }
+ } else if ( prop == "buttonGroupId" ) {
+ if ( obj->inherits( "QButton" ) && obj->parent()->inherits( "QButtonGroup" ) )
+ ( (QButtonGroup*)obj->parent() )->insert( (QButton*)obj, v.toInt() );
+ }
+
+ return;
+ }
+ }
+
+ if ( e.tagName() == "palette" ) {
+ QDomElement n = e.firstChild().toElement();
+ QPalette p;
+ while ( !n.isNull() ) {
+ QColorGroup cg;
+ if ( n.tagName() == "active" ) {
+ cg = loadColorGroup( n );
+ p.setActive( cg );
+ } else if ( n.tagName() == "inactive" ) {
+ cg = loadColorGroup( n );
+ p.setInactive( cg );
+ } else if ( n.tagName() == "disabled" ) {
+ cg = loadColorGroup( n );
+ p.setDisabled( cg );
+ }
+ n = n.nextSibling().toElement();
+ }
+ v = QPalette( p );
+ } else if ( e.tagName() == "enum" && p && p->isEnumType() ) {
+ QString key( v.toString() );
+ v = QVariant( p->keyToValue( key ) );
+ } else if ( e.tagName() == "set" && p && p->isSetType() ) {
+ QString keys( v.toString() );
+ QStringList lst = QStringList::split( '|', keys );
+ QStrList l;
+ for ( QStringList::Iterator it = lst.begin(); it != lst.end(); ++it )
+ l.append( *it );
+ v = QVariant( p->keysToValue( l ) );
+ }
+
+ if ( prop == "geometry" ) {
+ if ( obj == toplevel ) {
+ toplevel->resize( v.toRect().size() );
+ return;
+ }
+ }
+
+ obj->setProperty( prop, v );
+}
+
+void KommanderFactory::createSpacer( const QDomElement &e, QLayout *layout )
+{
+ QDomElement n = e.firstChild().toElement();
+ int row = e.attribute( "row" ).toInt();
+ int col = e.attribute( "column" ).toInt();
+ int rowspan = e.attribute( "rowspan" ).toInt();
+ int colspan = e.attribute( "colspan" ).toInt();
+
+ Qt::Orientation orient = Qt::Horizontal;
+ int w = 0, h = 0;
+ QSizePolicy::SizeType sizeType = QSizePolicy::Preferred;
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "property" ) {
+ QString prop = n.attribute( "name" );
+ if ( prop == "orientation" ) {
+ if ( n.firstChild().firstChild().toText().data() == "Horizontal" )
+ orient = Qt::Horizontal;
+ else
+ orient = Qt::Vertical;
+ } else if ( prop == "sizeType" ) {
+ if ( n.firstChild().firstChild().toText().data() == "Fixed" )
+ sizeType = QSizePolicy::Fixed;
+ else if ( n.firstChild().firstChild().toText().data() == "Minimum" )
+ sizeType = QSizePolicy::Minimum;
+ else if ( n.firstChild().firstChild().toText().data() == "Maximum" )
+ sizeType = QSizePolicy::Maximum;
+ else if ( n.firstChild().firstChild().toText().data() == "Preferred" )
+ sizeType = QSizePolicy::Preferred;
+ else if ( n.firstChild().firstChild().toText().data() == "MinimumExpanding" )
+ sizeType = QSizePolicy::MinimumExpanding;
+ else if ( n.firstChild().firstChild().toText().data() == "Expanding" )
+ sizeType = QSizePolicy::Expanding;
+ } else if ( prop == "sizeHint" ) {
+ w = n.firstChild().firstChild().firstChild().toText().data().toInt();
+ h = n.firstChild().firstChild().nextSibling().firstChild().toText().data().toInt();
+ }
+ }
+ n = n.nextSibling().toElement();
+ }
+
+ if ( rowspan < 1 )
+ rowspan = 1;
+ if ( colspan < 1 )
+ colspan = 1;
+ QSpacerItem *item = new QSpacerItem( w, h, orient == Qt::Horizontal ? sizeType : QSizePolicy::Minimum,
+ orient == Qt::Vertical ? sizeType : QSizePolicy::Minimum );
+ if ( layout ) {
+ if ( layout->inherits( "QBoxLayout" ) )
+ ( (QBoxLayout*)layout )->addItem( item );
+ else
+ ( (QGridLayout*)layout )->addMultiCell( item, row, row + rowspan - 1, col, col + colspan - 1,
+ orient == Qt::Horizontal ? Qt::AlignVCenter : Qt::AlignHCenter );
+ }
+}
+
+static QImage loadImageData( QDomElement &n2 )
+{
+ QImage img;
+ QString data = n2.firstChild().toText().data();
+ 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;
+ }
+ QString format = n2.attribute( "format", "PNG" );
+ if ( format == "XPM.GZ" ) {
+ ulong len = n2.attribute( "length" ).toULong();
+ if ( len < data.length() * 5 )
+ len = data.length() * 5;
+ QByteArray baunzip( len );
+ ::uncompress( (uchar*) baunzip.data(), &len, (uchar*) ba, data.length()/2 );
+ img.loadFromData( (const uchar*)baunzip.data(), len, "XPM" );
+ } else {
+ img.loadFromData( (const uchar*)ba, data.length() / 2, format );
+ }
+ delete [] ba;
+
+ return img;
+}
+
+void KommanderFactory::loadImageCollection( const QDomElement &e )
+{
+ QDomElement n = e.firstChild().toElement();
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "image" ) {
+ Image img;
+ img.name = n.attribute( "name" );
+ QDomElement n2 = n.firstChild().toElement();
+ while ( !n2.isNull() ) {
+ if ( n2.tagName() == "data" )
+ img.img = loadImageData( n2 );
+ n2 = n2.nextSibling().toElement();
+ }
+ images.append( img );
+ n = n.nextSibling().toElement();
+ }
+ }
+}
+
+QImage KommanderFactory::loadFromCollection( const QString &name )
+{
+ QValueList<Image>::Iterator it = images.begin();
+ for ( ; it != images.end(); ++it ) {
+ if ( ( *it ).name == name )
+ return ( *it ).img;
+ }
+ return QImage();
+}
+
+QPixmap KommanderFactory::loadPixmap( const QDomElement &e )
+{
+ QString arg = e.firstChild().toText().data();
+ if ( usePixmapCollection ) {
+ const QMimeSource *m = QMimeSourceFactory::defaultFactory()->data( arg );
+ if ( !m )
+ return QPixmap();
+ QPixmap pix;
+ QImageDrag::decode( m, pix );
+ return pix;
+ }
+
+ QImage img = loadFromCollection( arg );
+ QPixmap pix;
+ pix.convertFromImage( img );
+ return pix;
+}
+
+QColorGroup KommanderFactory::loadColorGroup( const QDomElement &e )
+{
+ QColorGroup cg;
+ int r = -1;
+ QDomElement n = e.firstChild().toElement();
+ QColor col;
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "color" ) {
+ r++;
+ cg.setColor( (QColorGroup::ColorRole)r, (col = DomTool::readColor( n ) ) );
+ } else if ( n.tagName() == "pixmap" ) {
+ QPixmap pix = loadPixmap( n );
+ cg.setBrush( (QColorGroup::ColorRole)r, QBrush( col, pix ) );
+ }
+ n = n.nextSibling().toElement();
+ }
+ return cg;
+}
+
+struct Connection
+{
+ QObject *sender, *receiver;
+ QCString signal, slot;
+ bool operator==( const Connection &c ) const {
+ return sender == c.sender && receiver == c.receiver &&
+ signal == c.signal && slot == c.slot ;
+ }
+};
+
+class NormalizeObject : public QObject
+{
+public:
+ NormalizeObject() : QObject() {}
+ static QCString normalizeSignalSlot( const char *signalSlot ) { return QObject::normalizeSignalSlot( signalSlot ); }
+};
+
+void KommanderFactory::loadConnections( const QDomElement &e, QObject *connector )
+{
+ QDomElement n = e.firstChild().toElement();
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "connection" ) {
+ QString lang = n.attribute( "language", "C++" );
+ QDomElement n2 = n.firstChild().toElement();
+ Connection conn;
+ while ( !n2.isNull() ) {
+ if ( n2.tagName() == "sender" ) {
+ QString name = n2.firstChild().toText().data();
+ if ( name == "this" || qstrcmp( toplevel->name(), name ) == 0 ) {
+ conn.sender = toplevel;
+ } else {
+ if ( name == "this" )
+ name = toplevel->name();
+ QObjectList *l = toplevel->queryList( 0, name, false );
+ if ( l ) {
+ if ( l->first() )
+ conn.sender = l->first();
+ delete l;
+ }
+ }
+ if ( !conn.sender )
+ conn.sender = findAction( name );
+ } else if ( n2.tagName() == "signal" ) {
+ conn.signal = n2.firstChild().toText().data();
+ } else if ( n2.tagName() == "receiver" ) {
+ QString name = n2.firstChild().toText().data();
+ if ( name == "this" || qstrcmp( toplevel->name(), name ) == 0 ) {
+ conn.receiver = toplevel;
+ } else {
+ QObjectList *l = toplevel->queryList( 0, name, false );
+ if ( l ) {
+ if ( l->first() )
+ conn.receiver = l->first();
+ delete l;
+ }
+ }
+ } else if ( n2.tagName() == "slot" ) {
+ conn.slot = n2.firstChild().toText().data();
+ }
+ n2 = n2.nextSibling().toElement();
+ }
+
+ conn.signal = NormalizeObject::normalizeSignalSlot( conn.signal );
+ conn.slot = NormalizeObject::normalizeSignalSlot( conn.slot );
+
+ QObject *sender = 0, *receiver = 0;
+ QObjectList *l = toplevel->queryList( 0, conn.sender->name(), false );
+ if ( qstrcmp( conn.sender->name(), toplevel->name() ) == 0 ) {
+ sender = toplevel;
+ } else {
+ if ( !l || !l->first() ) {
+ delete l;
+ n = n.nextSibling().toElement();
+ continue;
+ }
+ sender = l->first();
+ delete l;
+ }
+ if ( !sender )
+ sender = findAction( conn.sender->name() );
+
+ if ( qstrcmp( conn.receiver->name(), toplevel->name() ) == 0 ) {
+ receiver = toplevel;
+ } else {
+ l = toplevel->queryList( 0, conn.receiver->name(), false );
+ if ( !l || !l->first() ) {
+ delete l;
+ n = n.nextSibling().toElement();
+ continue;
+ }
+ receiver = l->first();
+ delete l;
+ }
+
+ if ( lang == "C++" ) {
+ QString s = "2""%1";
+ s = s.arg( conn.signal );
+ QString s2 = "1""%1";
+ s2 = s2.arg( conn.slot );
+
+ QStrList signalList = sender->metaObject()->signalNames( true );
+ QStrList slotList = receiver->metaObject()->slotNames( true );
+
+ // if this is a connection to a custom slot and we have a connector, try this as receiver
+ if ( slotList.find( conn.slot ) == -1 && receiver == toplevel && connector ) {
+ slotList = connector->metaObject()->slotNames( true );
+ receiver = connector;
+ }
+
+ // avoid warnings
+ if ( signalList.find( conn.signal ) == -1 ||
+ slotList.find( conn.slot ) == -1 ) {
+ n = n.nextSibling().toElement();
+ continue;
+ }
+ QObject::connect( sender, s, receiver, s2 );
+ } else {
+ EventFunction ef = eventMap[ conn.sender ];
+ ef.events.append( conn.signal );
+ ef.functions.append( QStringList::split( ',', conn.slot ) );
+ eventMap.replace( conn.sender, ef );
+ }
+ } else if ( n.tagName() == "slot" ) {
+ QString s = n.firstChild().toText().data();
+ languageSlots.insert( s.left( s.find( "(" ) ) , n.attribute( "language" ) );
+ }
+ n = n.nextSibling().toElement();
+ }
+}
+
+void KommanderFactory::loadTabOrder( const QDomElement &e )
+{
+ QWidget *last = 0;
+ QDomElement n = e.firstChild().toElement();
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "tabstop" ) {
+ QString name = n.firstChild().toText().data();
+ QObjectList *l = toplevel->queryList( 0, name, false );
+ if ( l ) {
+ if ( l->first() ) {
+ QWidget *w = (QWidget*)l->first();
+ if ( last )
+ toplevel->setTabOrder( last, w );
+ last = w;
+ }
+ delete l;
+ }
+ }
+ n = n.nextSibling().toElement();
+ }
+}
+
+void KommanderFactory::createColumn( const QDomElement &e, QWidget *widget )
+{
+ if ( widget->inherits( "QListView" ) && e.tagName() == "column" ) {
+ QListView *lv = (QListView*)widget;
+ QDomElement n = e.firstChild().toElement();
+ QPixmap pix;
+ bool hasPixmap = false;
+ QString txt;
+ bool clickable = true, resizeable = true;
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "property" ) {
+ QString attrib = n.attribute( "name" );
+ QVariant v = DomTool::elementToVariant( n.firstChild().toElement(), QVariant() );
+ if ( attrib == "text" )
+ txt = translate(v.toString());
+ else if ( attrib == "pixmap" ) {
+ pix = loadPixmap( n.firstChild().toElement().toElement() );
+ hasPixmap = !pix.isNull();
+ } else if ( attrib == "clickable" )
+ clickable = v.toBool();
+ else if ( attrib == "resizeable" )
+ resizeable = v.toBool();
+ }
+ n = n.nextSibling().toElement();
+ }
+ lv->addColumn( txt );
+ int i = lv->header()->count() - 1;
+ if ( hasPixmap ) {
+ lv->header()->setLabel( i, pix, txt );
+ }
+ if ( !clickable )
+ lv->header()->setClickEnabled( clickable, i );
+ if ( !resizeable )
+ lv->header()->setResizeEnabled( resizeable, i );
+ }
+#ifndef QT_NO_TABLE
+ else if ( widget->inherits( "QTable" ) ) {
+ QTable *table = (QTable*)widget;
+#ifndef QT_NO_SQL
+ bool isSql = (widget->inherits( "QDataTable" ));
+#endif
+ bool isRow;
+ if ( ( isRow = e.tagName() == "row" ) )
+ table->setNumRows( table->numRows() + 1 );
+ else {
+#ifndef QT_NO_SQL
+ if ( !isSql )
+#endif
+ table->setNumCols( table->numCols() + 1 );
+ }
+
+ QDomElement n = e.firstChild().toElement();
+ QPixmap pix;
+ bool hasPixmap = false;
+ QString txt;
+ QString field;
+ QValueList<Field> fieldMap;
+ if ( fieldMaps.find( table ) != fieldMaps.end() ) {
+ fieldMap = *fieldMaps.find( table );
+ fieldMaps.remove( table );
+ }
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "property" ) {
+ QString attrib = n.attribute( "name" );
+ QVariant v = DomTool::elementToVariant( n.firstChild().toElement(), QVariant() );
+ if ( attrib == "text" )
+ txt = translate(v.toString());
+ else if ( attrib == "pixmap" ) {
+ hasPixmap = !n.firstChild().firstChild().toText().data().isEmpty();
+ if ( hasPixmap )
+ pix = loadPixmap( n.firstChild().toElement().toElement() );
+ } else if ( attrib == "field" )
+ field = v.toString();
+ }
+ n = n.nextSibling().toElement();
+ }
+
+ int i = isRow ? table->numRows() - 1 : table->numCols() - 1;
+ QHeader *h = !isRow ? table->horizontalHeader() : table->verticalHeader();
+ if ( hasPixmap ) {
+#ifndef QT_NO_SQL
+ if ( isSql )
+ ((QDataTable*)table)->addColumn( field, txt, -1, pix );
+ else
+#endif
+ h->setLabel( i, pix, txt );
+ } else {
+#ifndef QT_NO_SQL
+ if ( isSql ) {
+ ((QDataTable*)table)->addColumn( field, txt );
+ }
+ else
+#endif
+ h->setLabel( i, txt );
+ }
+ if ( !isRow && !field.isEmpty() ) {
+ fieldMap.append( Field( txt, (hasPixmap ? pix : QPixmap()), field ) );
+ fieldMaps.insert( table, fieldMap );
+ }
+ }
+#endif
+}
+
+void KommanderFactory::loadItem( const QDomElement &e, QPixmap &pix, QString &txt, bool &hasPixmap )
+{
+ QDomElement n = e;
+ hasPixmap = false;
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "property" ) {
+ QString attrib = n.attribute( "name" );
+ QVariant v = DomTool::elementToVariant( n.firstChild().toElement(), QVariant() );
+ if ( attrib == "text" )
+ txt = translate(v.toString());
+ else if ( attrib == "pixmap" ) {
+ pix = loadPixmap( n.firstChild().toElement() );
+ hasPixmap = !pix.isNull();
+ }
+ }
+ n = n.nextSibling().toElement();
+ }
+}
+
+void KommanderFactory::createItem( const QDomElement &e, QWidget *widget, QListViewItem *i )
+{
+ if ( widget->inherits( "QListBox" ) || widget->inherits( "QComboBox" ) ) {
+ QDomElement n = e.firstChild().toElement();
+ QPixmap pix;
+ bool hasPixmap = false;
+ QString txt;
+ loadItem( n, pix, txt, hasPixmap );
+ QListBox *lb = 0;
+ if ( widget->inherits( "QListBox" ) )
+ lb = (QListBox*)widget;
+ else
+ lb = ( (QComboBox*)widget)->listBox();
+ if ( hasPixmap ) {
+ new QListBoxPixmap( lb, pix, txt );
+ } else {
+ new QListBoxText( lb, txt );
+ }
+#ifndef QT_NO_ICONVIEW
+ } else if ( widget->inherits( "QIconView" ) ) {
+ QDomElement n = e.firstChild().toElement();
+ QPixmap pix;
+ bool hasPixmap = false;
+ QString txt;
+ loadItem( n, pix, txt, hasPixmap );
+
+ QIconView *iv = (QIconView*)widget;
+ new QIconViewItem( iv, txt, pix );
+#endif
+ } else if ( widget->inherits( "QListView" ) ) {
+ QDomElement n = e.firstChild().toElement();
+ QPixmap pix;
+ QValueList<QPixmap> pixmaps;
+ QStringList textes;
+ QListViewItem *item = 0;
+ QListView *lv = (QListView*)widget;
+ if ( i )
+ item = new QListViewItem( i, lastItem );
+ else
+ item = new QListViewItem( lv, lastItem );
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "property" ) {
+ QString attrib = n.attribute( "name" );
+ QVariant v = DomTool::elementToVariant( n.firstChild().toElement(), QVariant() );
+ if ( attrib == "text" )
+ textes << translate(v.toString());
+ else if ( attrib == "pixmap" ) {
+ QString s = v.toString();
+ if ( s.isEmpty() ) {
+ pixmaps << QPixmap();
+ } else {
+ pix = loadPixmap( n.firstChild().toElement() );
+ pixmaps << pix;
+ }
+ }
+ } else if ( n.tagName() == "item" ) {
+ item->setOpen( true );
+ createItem( n, widget, item );
+ }
+
+ n = n.nextSibling().toElement();
+ }
+
+ for ( int i = 0; i < lv->columns(); ++i ) {
+ item->setText( i, textes[ i ] );
+ item->setPixmap( i, pixmaps[ i ] );
+ }
+ lastItem = item;
+ }
+}
+
+
+
+void KommanderFactory::loadChildAction( QObject *parent, const QDomElement &e )
+{
+ QDomElement n = e;
+ QAction *a = 0;
+ EventFunction ef;
+ if ( n.tagName() == "action" ) {
+ a = new QAction( parent );
+ QDomElement n2 = n.firstChild().toElement();
+ while ( !n2.isNull() ) {
+ if ( n2.tagName() == "property" ) {
+ setProperty( a, n2.attribute( "name" ), n2.firstChild().toElement() );
+ } else if ( n2.tagName() == "event" ) {
+ ef.events.append( n2.attribute( "name" ) );
+ ef.functions.append( QStringList::split( ',', n2.attribute( "functions" ) ) );
+ }
+ n2 = n2.nextSibling().toElement();
+ }
+ if ( !parent->inherits( "QAction" ) )
+ actionList.append( a );
+ } else if ( n.tagName() == "actiongroup" ) {
+ a = new QActionGroup( parent );
+ QDomElement n2 = n.firstChild().toElement();
+ while ( !n2.isNull() ) {
+ if ( n2.tagName() == "property" ) {
+ setProperty( a, n2.attribute( "name" ), n2.firstChild().toElement() );
+ } else if ( n2.tagName() == "action" ||
+ n2.tagName() == "actiongroup" ) {
+ loadChildAction( a, n2 );
+ } else if ( n2.tagName() == "event" ) {
+ ef.events.append( n2.attribute( "name" ) );
+ ef.functions.append( QStringList::split( ',', n2.attribute( "functions" ) ) );
+ }
+ n2 = n2.nextSibling().toElement();
+ }
+ if ( !parent->inherits( "QAction" ) )
+ actionList.append( a );
+ }
+ if ( a )
+ eventMap.insert( a, ef );
+}
+
+void KommanderFactory::loadActions( const QDomElement &e )
+{
+ QDomElement n = e.firstChild().toElement();
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "action" ) {
+ loadChildAction( toplevel, n );
+ } else if ( n.tagName() == "actiongroup" ) {
+ loadChildAction( toplevel, n );
+ }
+ n = n.nextSibling().toElement();
+ }
+}
+
+void KommanderFactory::loadToolBars( const QDomElement &e )
+{
+ QDomElement n = e.firstChild().toElement();
+ QMainWindow *mw = ( (QMainWindow*)toplevel );
+ QToolBar *tb = 0;
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "toolbar" ) {
+ Qt::Dock dock = (Qt::Dock)n.attribute( "dock" ).toInt();
+ tb = new QToolBar( QString::null, mw, dock );
+ tb->setLabel( n.attribute( "label" ) );
+ tb->setName( n.attribute( "name" ) );
+ QDomElement n2 = n.firstChild().toElement();
+ while ( !n2.isNull() ) {
+ if ( n2.tagName() == "action" ) {
+ QAction *a = findAction( n2.attribute( "name" ) );
+ if ( a )
+ a->addTo( tb );
+ } else if ( n2.tagName() == "separator" ) {
+ tb->addSeparator();
+ } else if ( n2.tagName() == "widget" ) {
+ (void)createWidgetInternal( n2, tb, 0, n2.attribute( "class", "QWidget" ) );
+ } else if ( n2.tagName() == "property" ) {
+ setProperty( tb, n2.attribute( "name" ), n2.firstChild().toElement() );
+ }
+ n2 = n2.nextSibling().toElement();
+ }
+ }
+ n = n.nextSibling().toElement();
+ }
+}
+
+void KommanderFactory::loadMenuBar( const QDomElement &e )
+{
+ QDomElement n = e.firstChild().toElement();
+ QMainWindow *mw = ( (QMainWindow*)toplevel );
+ QMenuBar *mb = mw->menuBar();
+ while ( !n.isNull() ) {
+ if ( n.tagName() == "item" ) {
+ QPopupMenu *popup = new QPopupMenu( mw );
+ popup->setName( n.attribute( "name" ) );
+ QDomElement n2 = n.firstChild().toElement();
+ while ( !n2.isNull() ) {
+ if ( n2.tagName() == "action" ) {
+ QAction *a = findAction( n2.attribute( "name" ) );
+ if ( a )
+ a->addTo( popup );
+ } else if ( n2.tagName() == "separator" ) {
+ popup->insertSeparator();
+ }
+ n2 = n2.nextSibling().toElement();
+ }
+ mb->insertItem( translate( n.attribute( "text" ) ), popup );
+ } else if ( n.tagName() == "property" ) {
+ setProperty( mb, n.attribute( "name" ), n.firstChild().toElement() );
+ }
+ n = n.nextSibling().toElement();
+ }
+}
+
+
+QAction *KommanderFactory::findAction( const QString &name )
+{
+ for ( QAction *a = actionList.first(); a; a = actionList.next() ) {
+ if ( QString( a->name() ) == name )
+ return a;
+ QAction *ac = (QAction*)a->child( name.latin1(), "QAction" );
+ if ( ac )
+ return ac;
+ }
+ return 0;
+}
+
+void KommanderFactory::loadImages( const QString &dir )
+{
+ QDir d(dir);
+ QStringList l = d.entryList(QDir::Files);
+ for (QStringList::Iterator it = l.begin(); it != l.end(); ++it)
+ QMimeSourceFactory::defaultFactory()->setPixmap(*it, QPixmap(d.path() + "/" + *it, "PNG"));
+}
+
+QString KommanderFactory::translate( const QString& sourceText, const QString& comment )
+{
+ if (!sourceText.isEmpty() && !comment.isEmpty())
+ return KGlobal::locale()->translate(comment.utf8(), sourceText.utf8());
+ else if (!sourceText.isEmpty())
+ return KGlobal::locale()->translate(sourceText.utf8());
+ else
+ return sourceText;
+}
diff --git a/kommander/factory/kommanderfactory.h b/kommander/factory/kommanderfactory.h
new file mode 100644
index 00000000..0b9a7eab
--- /dev/null
+++ b/kommander/factory/kommanderfactory.h
@@ -0,0 +1,160 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Designer.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+/* Modifications by Marc Britton (c) 2002-2003 under GNU GPL, terms as above */
+
+#ifndef _HAVE_KOMMANDERFACTORY_H_
+#define _HAVE_KOMMANDERFACTORY_H_
+
+#include <qstring.h>
+#include <qptrlist.h>
+#include <qimage.h>
+#include <qpixmap.h>
+#include <qvaluelist.h>
+#include <qmap.h>
+#include <qaction.h>
+#include "kommander_export.h"
+
+class QWidget;
+class QLayout;
+class QDomElement;
+class QListViewItem;
+class QTable;
+class QIconSet;
+class KommanderPlugin;
+
+struct KommanderWidgetInfo
+{
+ KommanderWidgetInfo() {}
+ KommanderWidgetInfo( const QString &g, const QString &t, QIconSet *i, const QString &w = QString::null, bool c = FALSE )
+ : group( g ), toolTip( t ), iconSet(i), whatsThis( w ), isContainer( c )
+ {
+ }
+ QString group;
+ QString toolTip;
+ QIconSet *iconSet;
+ QString whatsThis;
+ bool isContainer;
+};
+typedef QMap<QString, KommanderWidgetInfo> FeatureList;
+
+class KOMMANDER_EXPORT KommanderFactory
+{
+public:
+ KommanderFactory();
+ virtual ~KommanderFactory();
+
+ static QWidget *create( const QString &uiFile, QObject *connector = 0, QWidget *parent = 0, const char *name = 0 );
+ static QWidget *create( QIODevice *dev, QObject *connector = 0, QWidget *parent = 0, const char *name = 0 );
+ static int loadPlugins( bool force = FALSE );
+ static void addPlugin( KommanderPlugin *plugin );
+ static void loadImages( const QString &dir );
+
+ static QWidget *createWidget( const QString &className, QWidget *parent, const char *name );
+
+ static FeatureList featureList();
+private:
+ enum LayoutType { HBox, VBox, Grid, NoLayout };
+ void loadImageCollection( const QDomElement &e );
+ void loadConnections( const QDomElement &e, QObject *connector );
+ void loadTabOrder( const QDomElement &e );
+ QWidget *createWidgetInternal( const QDomElement &e, QWidget *parent, QLayout* layout, const QString &classNameArg );
+ QLayout *createLayout( QWidget *widget, QLayout* layout, LayoutType type );
+ LayoutType layoutType( QLayout *l ) const;
+ void setProperty( QObject* widget, const QString &prop, const QDomElement &e );
+ void createSpacer( const QDomElement &e, QLayout *layout );
+ QImage loadFromCollection( const QString &name );
+ QPixmap loadPixmap( const QDomElement &e );
+ QColorGroup loadColorGroup( const QDomElement &e );
+ void createColumn( const QDomElement &e, QWidget *widget );
+ void loadItem( const QDomElement &e, QPixmap &pix, QString &txt, bool &hasPixmap );
+ void createItem( const QDomElement &e, QWidget *widget, QListViewItem *i = 0 );
+ void loadChildAction( QObject *parent, const QDomElement &e );
+ void loadActions( const QDomElement &e );
+ void loadToolBars( const QDomElement &e );
+ void loadMenuBar( const QDomElement &e );
+ QAction *findAction( const QString &name );
+ QString translate( const QString& sourceText, const QString& comment = "" );
+
+private:
+ struct Image {
+ QImage img;
+ QString name;
+ bool operator==( const Image &i ) const {
+ return ( i.name == name &&
+ i.img == img );
+ }
+ };
+
+ struct Field
+ {
+ Field() {}
+ Field( const QString &s1, const QPixmap &p, const QString &s2 ) : name( s1 ), pix( p ), field( s2 ) {}
+ QString name;
+ QPixmap pix;
+ QString field;
+#if defined(Q_FULL_TEMPLATE_INSTANTIATION)
+ bool operator==( const Field& ) const { return FALSE; }
+#endif
+ };
+
+ struct EventFunction
+ {
+ EventFunction() {}
+ EventFunction( const QString &e, const QStringList &f )
+ : events( e ) { functions.append( f ); }
+ QStringList events;
+ QValueList<QStringList> functions;
+ };
+
+ struct SqlWidgetConnection
+ {
+ SqlWidgetConnection() {}
+ SqlWidgetConnection( const QString &c, const QString &t )
+ : conn( c ), table( t ), dbControls( new QMap<QString, QString>() ) {}
+ QString conn;
+ QString table;
+ QMap<QString, QString> *dbControls;
+ };
+
+ struct Functions
+ {
+ QString functions;
+ };
+
+ QValueList<Image> images;
+ QWidget *toplevel;
+ QListViewItem *lastItem;
+ QMap<QString, QString> *dbControls;
+ QMap<QString, QStringList> dbTables;
+ QMap<QWidget*, SqlWidgetConnection> sqlWidgetConnections;
+ QMap<QString, QString> buddies;
+ QMap<QTable*, QValueList<Field> > fieldMaps;
+ QPtrList<QAction> actionList;
+ QMap<QObject *, EventFunction> eventMap;
+ QMap<QString, QString> languageSlots;
+ QMap<QString, Functions*> languageFunctions;
+ QStringList variables;
+ QStringList noDatabaseWidgets;
+ bool usePixmapCollection;
+ int defMargin, defSpacing;
+
+};
+
+#endif
diff --git a/kommander/factory/kommanderversion.h b/kommander/factory/kommanderversion.h
new file mode 100644
index 00000000..7a1c7772
--- /dev/null
+++ b/kommander/factory/kommanderversion.h
@@ -0,0 +1,7 @@
+#ifndef __VERSION_H__
+#define __VERSION_H__
+
+#define KOMMANDER_VERSION "1.5.3"
+
+#endif
+
diff --git a/kommander/icons/Makefile.am b/kommander/icons/Makefile.am
new file mode 100644
index 00000000..408cd8ee
--- /dev/null
+++ b/kommander/icons/Makefile.am
@@ -0,0 +1,4 @@
+KDE_ICON=kommander
+
+appicondir = $(kde_datadir)/kommander/icons
+appicon_ICON = arrow
diff --git a/kommander/icons/cr128-app-kommander.png b/kommander/icons/cr128-app-kommander.png
new file mode 100644
index 00000000..e0e9fc7e
--- /dev/null
+++ b/kommander/icons/cr128-app-kommander.png
Binary files differ
diff --git a/kommander/icons/cr16-app-kommander.png b/kommander/icons/cr16-app-kommander.png
new file mode 100644
index 00000000..33e8d6e2
--- /dev/null
+++ b/kommander/icons/cr16-app-kommander.png
Binary files differ
diff --git a/kommander/icons/cr22-app-kommander.png b/kommander/icons/cr22-app-kommander.png
new file mode 100644
index 00000000..f14697d6
--- /dev/null
+++ b/kommander/icons/cr22-app-kommander.png
Binary files differ
diff --git a/kommander/icons/cr32-app-kommander.png b/kommander/icons/cr32-app-kommander.png
new file mode 100644
index 00000000..b2235fb4
--- /dev/null
+++ b/kommander/icons/cr32-app-kommander.png
Binary files differ
diff --git a/kommander/icons/cr64-app-kommander.png b/kommander/icons/cr64-app-kommander.png
new file mode 100644
index 00000000..2cbd68ee
--- /dev/null
+++ b/kommander/icons/cr64-app-kommander.png
Binary files differ
diff --git a/kommander/icons/hi22-action-arrow.png b/kommander/icons/hi22-action-arrow.png
new file mode 100644
index 00000000..dfbeabaa
--- /dev/null
+++ b/kommander/icons/hi22-action-arrow.png
Binary files differ
diff --git a/kommander/kmdrtools/Makefile.am b/kommander/kmdrtools/Makefile.am
new file mode 100644
index 00000000..3a37d597
--- /dev/null
+++ b/kommander/kmdrtools/Makefile.am
@@ -0,0 +1,3 @@
+execkmdrdir = ${kde_datadir}/kmdr-editor/editor
+
+execkmdr_SCRIPTS = dcoptool-oldparser.kmdr examples.kmdr
diff --git a/kommander/kmdrtools/dcoptool-oldparser.kmdr b/kommander/kmdrtools/dcoptool-oldparser.kmdr
new file mode 100755
index 00000000..e6a8ec54
--- /dev/null
+++ b/kommander/kmdrtools/dcoptool-oldparser.kmdr
@@ -0,0 +1,2125 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>dcoptool2</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>dcoptool2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>712</width>
+ <height>478</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>DCOP Inserter Version 0.2 - Old Parser</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string>@##### put the following in init scripts #########
+ @widgetName.setVisible(false)
+@wname.setVisible(false)
+@TextParam1.setVisible(false)
+@param1.setVisible(false)
+@TextParam2.setVisible(false)
+@param2.setVisible(false)
+@TextParam3.setVisible(false)
+@param3.setVisible(false)
+@TextParam4.setVisible(false)
+@param4.setVisible(false)
+
+@setGlobal(Array,"values(QString)
+keys(QString)
+clear(QString)
+count(QString)
+count(QString)
+remove(QString,QString)
+remove(QString,QString)
+fromString(QString,QString)
+toString(QString)
+toString(QString)
+toString(QString)
+toString(QString)
+toString(QString)")
+
+@setGlobal(File,"read(QString)
+write(QString,QString)
+append(QString,QString)")
+
+@setGlobal(Input,"text(QString,QString,QString)
+password(QString,QString)
+value(QString,QString,int,int,int,int)
+double(QString,QString,double,double,double,double)
+openfile(QString,QString,QString)
+savefile(QString,QString,QString)
+directory(QString,QString,QString)
+openfiles(QString,QString,QString)")
+
+@setGlobal(DCOP,"addUniqueItem(QString,QString)
+associatedText(QString)
+cellText(QString,int,int)
+checked(QString)
+children(QString,bool)
+clear(QString)
+count(QString)
+currentColumn(QString)
+currentItem(QString)
+currentRow(QString)
+execute(QString)
+findItem(QString,QString)
+insertColumn(QString,int,int)
+insertItem(QString,QString,int)
+insertItems(QString,QStringList,int)
+insertRow(QString,int,int)
+item(QString,int)
+itemDepth(QString,int)
+itemPath(QString,int)
+removeColumn(QString,int,int)
+removeItem(QString,int)
+removeRow(QString,int,int)
+selection(QString)
+setAssociatedText(QString,QString)
+setEnabled(QString,bool)
+setCellText(QString,int,int,QString)
+setCellWidget(QString,int,int,QString)
+cellWidget(QString,int,int)
+setChecked(QString,bool)
+setColumnCaption(QString,int,QString)
+setCurrentItem(QString,int)
+insertTab(QString,QString,int)
+setMaximum(QString,int)
+setPixmap(QString,QString,int)
+setRowCaption(QString,int,QString)
+setSelection(QString,QString)
+setText(QString,QString)
+setVisible(QString,bool)
+type(QString)
+setEditable(QString,bool)")
+
+@setGlobal(File,"read(QString)
+write(QString,QString)
+append(QString,QString)")
+
+@setGlobal(KommanderMessage,"")
+
+@setGlobal(String,"length(QString)
+contains(QString,QString)
+find(QString,QString,int)
+findRev(QString,QString,int)
+left(QString,int)
+right(QString,int)
+mid(QString,int,int)
+remove(QString,QString)
+replace(QString,QString,QString)
+upper(QString)
+lower(QString)
+compare(QString,QString)
+isEmpty(QString)
+isNumber(QString)
+section(QString,QString,int)
+args(QString,QString,QString,QString)
+args(QString,QString,QString,QString)
+args(QString,QString,QString,QString)")
+
+
+@functiongroup.setCurrentItem(1)
+@proto.insertItems(@global(DCOP), 0)
+
+</string>
+ <string></string>
+ </stringlist>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout9</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>10</y>
+ <width>202</width>
+ <height>380</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="ComboBox">
+ <item>
+ <property name="text">
+ <string>dcop(</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>dcop</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>dcopstr</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>select whether to use a Kommander call or console call</string>
+ </property>
+ </widget>
+ <widget class="Label">
+ <property name="name">
+ <cstring>Label6</cstring>
+ </property>
+ <property name="text">
+ <string>Function Group:</string>
+ </property>
+ </widget>
+ <widget class="ComboBox">
+ <item>
+ <property name="text">
+ <string>Array</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>DCOP</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>File</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Input</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Kommander</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Message</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>String</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>functiongroup</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Func/Proto:</string>
+ </property>
+ </widget>
+ <widget class="ListBox">
+ <property name="name">
+ <cstring>proto</cstring>
+ </property>
+ <property name="populationText">
+ <string>@global(@functiongroup.selection)</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout10</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>508</x>
+ <y>10</y>
+ <width>190</width>
+ <height>370</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Branch:</string>
+ </property>
+ </widget>
+ <widget class="ComboBox">
+ <item>
+ <property name="text">
+ <string>KommanderIf</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>QuantaIf</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>qt</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>MainApplication-Interface</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>branch</cstring>
+ </property>
+ <property name="editable">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="TextEdit">
+ <property name="name">
+ <cstring>TextDescription</cstring>
+ </property>
+ <property name="backgroundOrigin">
+ <enum>ParentOrigin</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout11</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>431</y>
+ <width>690</width>
+ <height>34</height>
+ </rect>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>wfilter</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Filter f&amp;unctions by widget</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string></string>
+ <string></string>
+ </stringlist>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Requires widgets to be loaded from running dialog</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer8</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>80</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton18</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Insert</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@switch(@String.mid(@dcopstr.selection, 1, 4))
+@case(dcop)
+ @setGlobal("outstring","@dcopstr.selection @window.selection, @branch.selection, "@proto.selection", @String.mid(@wname.selection, 0, @String.find(@wname.selection, " ", ))@param1@param2@param3@param4)")
+@case(cop)
+ @setGlobal("outstring","@dcopstr.selection @window.selection @branch.selection @global(short) @String.mid(@wname.selection, 0, @String.find(@wname.selection, " ", ))@param1@param2@param3@param4")
+@case(*)
+ @setGlobal("outstring","@dcopstr.selection - not found")
+@end
+@outstring.setText(@global(outstring))
+@cbclip
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="CheckBox">
+ <property name="name">
+ <cstring>cbclip</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Add to clipboard</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@null</string>
+ <string></string>
+ <string>@exec(dcop klipper klipper setClipboardContents "@global(outstring)")</string>
+ </stringlist>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Requires Klipper</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer9</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>120</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="LineEdit">
+ <property name="name">
+ <cstring>outstring</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>30</x>
+ <y>400</y>
+ <width>671</width>
+ <height>23</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton59</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>400</y>
+ <width>20</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@outstring.clear</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="GroupBox">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>220</x>
+ <y>10</y>
+ <width>278</width>
+ <height>375</height>
+ </rect>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="Label" row="10" column="0">
+ <property name="name">
+ <cstring>TextParam4</cstring>
+ </property>
+ <property name="text">
+ <string>Parameter 4</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="Label" row="6" column="0">
+ <property name="name">
+ <cstring>TextParam2</cstring>
+ </property>
+ <property name="text">
+ <string>Parameter 2</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="11" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>param4</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@execBegin
+if [ "@widgetText" ]
+then
+ echo ', "@widgetText"'
+fi
+@execEnd</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="7" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>param2</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@execBegin
+if [ "@widgetText" ]
+then
+ echo ', "@widgetText"'
+fi
+@execEnd</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Window:</string>
+ </property>
+ </widget>
+ <widget class="ComboBox" row="1" column="0" rowspan="1" colspan="2">
+ <item>
+ <property name="text">
+ <string>dcopid</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>"kmdr-executor-"+parentPid</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>window</cstring>
+ </property>
+ <property name="editable">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@widgetText</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="Label" row="8" column="0">
+ <property name="name">
+ <cstring>TextParam3</cstring>
+ </property>
+ <property name="text">
+ <string>Parameter 3</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ExecButton" row="2" column="0">
+ <property name="name">
+ <cstring>widgetName</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Widget &amp;Name:</string>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@Array.clear(dlg)
+@Array.fromString(dlg,@exec(dcop | grep kmdr))
+@setGlobal(kdlg,"")
+@forEach(i, @Array.keys(dlg))
+ @setGlobal(kdlg, @global(kdlg) @i @i)
+@end
+@setGlobal(pdlg,@exec(kdialog --menu "Select a dialog other than pid @pid to parse" @global(kdlg)))
+@#@exec(kdialog --msgbox "@global(_KDDIR)\n")
+@# dcop kmdr-executor-32730 KommanderIf children kmdr-executor-32730 1
+@wname.clear
+@setGlobal(items,@dcop(@global(pdlg), KommanderIf, "children(QString,bool)", @global(pdlg), 1 ))
+@setGlobal(iwd,"")
+@forEach(i, @global(items))
+ @setGlobal(iwd, "@global(iwd)@i (@dcop(@global(pdlg), KommanderIf, "type(QString)", @i))\n")
+@end
+@wname.insertItems(@global(iwd),0)</string>
+ </stringlist>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>See Whats This for instructions</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This will get the list of widgets from a running dialog. To use it simply launch your dialog and then select it from the list.</string>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="9" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>param3</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@execBegin
+if [ "@widgetText" ]
+then
+ echo ', "@widgetText"'
+fi
+@execEnd</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="LineEdit" row="5" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>param1</cstring>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@execBegin
+if [ "@widgetText" ]
+then
+ echo ', "@widgetText"'
+fi
+@execEnd</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ComboBox" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>wname</cstring>
+ </property>
+ <property name="editable">
+ <bool>true</bool>
+ </property>
+ <property name="populationText">
+ <string></string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="Label" row="4" column="0">
+ <property name="name">
+ <cstring>TextParam1</cstring>
+ </property>
+ <property name="text">
+ <string>Parameter 1</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ </stringlist>
+ </property>
+ </widget>
+ <spacer row="2" column="1">
+ <property name="name">
+ <cstring>Spacer15</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>111</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>setfunction</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>610</x>
+ <y>380</y>
+ <width>32</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@##### put the following in @setfunction #########
+@# set up dialog based on function
+@switch(@functiongroup.selection::@proto.selection)
+@case(DCOP::addUniqueItem(QString,QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"item")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,addUniqueItem)
+ @setGlobal(DESC,"Inserts the item if it will not create a duplicate.")
+@case(DCOP::associatedText(QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,associatedText)
+ @setGlobal(DESC,"Returns scripts associated with widget. This is an advanced feature that would not be commonly used.")
+@case(DCOP::cellText(QString,int,int))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"row")
+ @setGlobal(PARM2,"column")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,cellText)
+ @setGlobal(DESC,"Returns text of a cell in a table.")
+@case(DCOP::checked(QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,checked)
+ @setGlobal(DESC,"Returns 1 for checked boxes, 0 for unchecked.")
+@case(DCOP::children(QString,bool))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"recursive")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,children)
+ @setGlobal(DESC,"Returns the list of child widgets contained in the parent widget. Set the &lt;i&gt;recursive&lt;/i&gt; parameter to &lt;i&gt;true&lt;/i&gt; to include widgets contained by child widgets.")
+@case(DCOP::clear(QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,clear)
+ @setGlobal(DESC,"Removes all content from the widget.")
+@case(DCOP::count(QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,count)
+ @setGlobal(DESC,"Returns number of items in a widget such as combobox or listbox.")
+@case(DCOP::currentColumn(QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,currentColumn)
+ @setGlobal(DESC,"Returns index of current column.")
+@case(DCOP::currentItem(QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,currentItem)
+ @setGlobal(DESC,"Returns index of current item.")
+@case(DCOP::currentRow(QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,currentRow)
+ @setGlobal(DESC,"Returns index of current row.")
+@case(DCOP::execute(QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,execute)
+ @setGlobal(DESC,"Executes the script associated with the widget. With the new parser the execute method can take one or more arguments.")
+@case(DCOP::findItem(QString,QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"item")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,findItem)
+ @setGlobal(DESC,"Returns the index of an item with the given text.")
+@case(DCOP::insertColumn(QString,int,int))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"column")
+ @setGlobal(PARM2,"count")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,insertColumn)
+ @setGlobal(DESC,"Inserts new column &amp;#040;or &lt;i&gt;count&lt;/i&gt; columns&amp;#041; at &lt;i&gt;column&lt;/i&gt; position.")
+@case(DCOP::insertItem(QString,QString,int))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"item")
+ @setGlobal(PARM2,"index")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,insertItem)
+ @setGlobal(DESC,"Inserts item at &lt;i&gt;index&lt;/i&gt; position.")
+@case(DCOP::insertItems(QString,QStringList,int))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"items")
+ @setGlobal(PARM2,"index")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,insertItems)
+ @setGlobal(DESC,"Inserts multiple items &amp;#040;EOL-separated&amp;#041; at &lt;i&gt;index&lt;/i&gt; position.")
+@case(DCOP::insertRow(QString,int,int))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"row")
+ @setGlobal(PARM2,"count")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,insertRow)
+ @setGlobal(DESC,"Inserts new row &amp;#040;or &lt;i&gt;count&lt;/i&gt; rows&amp;#041; at &lt;i&gt;row&lt;/i&gt; position.")
+@case(DCOP::item(QString,int))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"index")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,item)
+ @setGlobal(DESC,"Returns the text of the item at the given index.")
+@case(DCOP::itemDepth(QString,int))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"index")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,itemDepth)
+ @setGlobal(DESC,"Returns the depth of the current item in the tree. Root items have depth 0.")
+@case(DCOP::itemPath(QString,int))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"index")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,itemPath)
+ @setGlobal(DESC,"Returns the slash-separated path to the given item in the tree.")
+@case(DCOP::removeColumn(QString,int,int))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"column")
+ @setGlobal(PARM2,"count")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,removeColumn)
+ @setGlobal(DESC,"Removes the column &amp;#040;or &lt;i&gt;count&lt;/i&gt; consecutive columns&amp;#041; with the given index.")
+@case(DCOP::removeItem(QString,int))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"index")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,removeItem)
+ @setGlobal(DESC,"Removes the item with the given index.")
+@case(DCOP::removeRow(QString,int,int))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"row")
+ @setGlobal(PARM2,"count")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,removeRow)
+ @setGlobal(DESC,"Removes the row &amp;#040;or &lt;i&gt;count&lt;/i&gt; consecutive rows&amp;#041; with the given index.")
+@case(DCOP::selection(QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,selection)
+ @setGlobal(DESC,"Returns selected text or text of current item.\nIn case of Table widgets, returns the selection coordinates, separated by commas in TopRow,LeftColumn,BottomRow,RightColumn form. ")
+@case(DCOP::setAssociatedText(QString,QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"text")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setAssociatedText)
+ @setGlobal(DESC,"Sets scripts associated with widget. This is an advanced feature that would not be commonly used.")
+@case(DCOP::setEnabled(QString,bool))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"enabled")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setEnabled)
+ @setGlobal(DESC,"Enables or disables widget.")
+@case(DCOP::setCellText(QString,int,int,QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"row")
+ @setGlobal(PARM2,"col")
+ @setGlobal(PARM3,"text")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setCellText)
+ @setGlobal(DESC,"Sets text of a cell in a table.")
+@case(DCOP::setCellWidget(QString,int,int,QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"row")
+ @setGlobal(PARM2,"col")
+ @setGlobal(PARM3,"cellWidget")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setCellWidget)
+ @setGlobal(DESC,"Inserts a widget into a cell of a table.")
+@case(DCOP::cellWidget(QString,int,int))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"row")
+ @setGlobal(PARM2,"col")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,cellWidget)
+ @setGlobal(DESC,"Returns the name of a widget inserted into a cell, or an empty string if the cell contains no widget or an unknown widget type.")
+@case(DCOP::setChecked(QString,bool))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"checked")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setChecked)
+ @setGlobal(DESC,"Sets/unsets checkbox.")
+@case(DCOP::setColumnCaption(QString,int,QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"column")
+ @setGlobal(PARM2,"text")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setColumnCaption)
+ @setGlobal(DESC,"Sets caption of the column &lt;i&gt;column&lt;/i&gt;.")
+@case(DCOP::setCurrentItem(QString,int))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"index")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setCurrentItem)
+ @setGlobal(DESC,"Selects the item at the specified index. Indexes are zero based.")
+@case(DCOP::insertTab(QString,QString,int))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"label")
+ @setGlobal(PARM2,"index")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,insertTab)
+ @setGlobal(DESC,"Inserts a tab to the tabwidget with the specified label at the given index. Indexes are zero based.")
+@case(DCOP::setMaximum(QString,int))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"value")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setMaximum)
+ @setGlobal(DESC,"Sets maximum numeric value")
+@case(DCOP::setPixmap(QString,QString,int))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"iconName")
+ @setGlobal(PARM2,"index")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setPixmap)
+ @setGlobal(DESC,"Sets pixmap at the given index to the specified icon. Use &lt;i&gt;index = -1&lt;/i&gt; to set the pixmap for all items.")
+@case(DCOP::setRowCaption(QString,int,QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"row")
+ @setGlobal(PARM2,"text")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setRowCaption)
+ @setGlobal(DESC,"Sets caption of the row &lt;i&gt;row&lt;/i&gt;.")
+@case(DCOP::setSelection(QString,QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"text")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setSelection)
+ @setGlobal(DESC,"Selects given text or select item containing given text.")
+@case(DCOP::setText(QString,QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"text")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setText)
+ @setGlobal(DESC,"Sets widget's content.")
+@case(DCOP::setVisible(QString,bool))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"visible")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setVisible)
+ @setGlobal(DESC,"Shows/hides widget.")
+@case(DCOP::type(QString))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,type)
+ @setGlobal(DESC,"Returns type&amp;#040;class&amp;#041; of widget.")
+@case(DCOP::setEditable(QString,bool))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"editable")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setEditable)
+ @setGlobal(DESC,"Makes the widget editable or read only, depending on the editable argument.")
+@case(Kommander::setEditable(QString,bool))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"editable")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setEditable)
+ @setGlobal(DESC,"Returns current widget's content. This was required inside widget A to return widget A content when requested by widget B. The new method is to use &amp;#064;A.text inside B instead of just &amp;#064;A if you just want the unaltered text.")
+@case(Kommander::setEditable(QString,bool))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"editable")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setEditable)
+ @setGlobal(DESC,"Returns selected text or text of current item. This is deprecated for &lt;i&gt;&amp;#064;mywidget.selected&lt;/i&gt;.")
+@case(Kommander::setEditable(QString,bool))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"editable")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setEditable)
+ @setGlobal(DESC,"Does nothing. This is useful if you request a CheckBox or RadioButton to return a value where a state, typically the unchecked state, has no value. The &amp;#064;null prevents an error indicating it is empty.")
+@case(Kommander::pid(QString,bool))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"editable")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,pid)
+ @setGlobal(DESC,"Returns the pid &amp;#040;process ID&amp;#041; of the current process.")
+@case(Kommander::dcopid(QString,bool))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"editable")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,dcopid)
+ @setGlobal(DESC,"Returns DCOP identifier of current process. This is shorthand for &lt;i&gt;kmdr-executor-&amp;#064;pid&lt;/i&gt;.")
+@case(Kommander::parentPid(QString,bool))
+ @setGlobal(enWidget,1)
+ @setGlobal(PARM1,"editable")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,parentPid)
+ @setGlobal(DESC,"Returns the pid of the parent Kommander window.")
+@case(Kommander::debug(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"text")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,debug)
+ @setGlobal(DESC,"Writes &lt;i&gt;text&lt;/i&gt; on stderr.")
+@case(Kommander::echo(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"text")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,echo)
+ @setGlobal(DESC,"Writes &lt;i&gt;text&lt;/i&gt; on standard output.")
+@case(Kommander::echo(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"text")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,echo)
+ @setGlobal(DESC,"Executes a script block. Bash is used if no shell is given. It is primarily for use in non-button widgets where script actions are not expected. Full path is not required for the shell which may be useful for portability. &lt;p&gt;&lt;i&gt;If this is used inside a button it allows alternate script languages to be used and will return a value to the main script, which may be unexpected.&lt;/i&gt;")
+@case(Kommander::env(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"variable")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,env)
+ @setGlobal(DESC,"Returns value of an environment &amp;#040;shell&amp;#041; variable. Do not use &lt;i&gt;$&lt;/i&gt; in the name. For example, &lt;i&gt;&amp;#064;env&amp;#040;PATH&amp;#041;&lt;/i&gt;.")
+@case(Kommander::exec(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"command")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,exec)
+ @setGlobal(DESC,"Executes an external shell command.")
+@case(Kommander::exec(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"command")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,exec)
+ @setGlobal(DESC,"Parses an expression and returns computed value.")
+@case(Kommander::forEach(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"variable")
+ @setGlobal(PARM2,"items")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,forEach)
+ @setGlobal(DESC,"Executes loop: values from &lt;i&gt;items&lt;/i&gt; list &amp;#040;passed as EOL-separated string&amp;#041; are assigned to the variable. &lt;br&gt;&lt;b&gt;Old&lt;/b&gt;&lt;br&gt; &lt;i&gt;&amp;#064;forEach&amp;#040;i,A\\nB\\nC\\n&amp;#041;&lt;br&gt; &amp;#064;# &amp;#064;i=A&lt;br&gt;&amp;#064;end&lt;/i&gt;&lt;br&gt;&lt;b&gt;New&lt;/b&gt;&lt;br&gt;&lt;i&gt;foreach i in MyArray do&lt;br&gt; //i = key, MyArray[i] = val&lt;br&gt;end ")
+@case(Kommander::for(QString,int,int,int))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"variable")
+ @setGlobal(PARM2,"start")
+ @setGlobal(PARM3,"end")
+ @setGlobal(PARM4,"step")
+ @setGlobal(short,for)
+ @setGlobal(DESC,"Executes loop: variable is set to &lt;i&gt;start&lt;/i&gt; and is increased by &lt;i&gt;step&lt;/i&gt; each time loop is executed. Execution stops when variable becomes larger then &lt;i&gt;end&lt;/i&gt;. &lt;br&gt;&lt;b&gt;Old&lt;/b&gt;&lt;br&gt;&lt;i&gt;&amp;#064;for&amp;#040;i,1,10,1&amp;#041;&lt;br&gt; &amp;#064;# &amp;#064;i=1&lt;br&gt;&amp;#064;endif&lt;/i&gt;&lt;br&gt;&lt;b&gt;New&lt;/b&gt;&lt;br&gt;&lt;i&gt;for i=0 to 20 step 5 do&lt;br&gt; debug&amp;#040;i&amp;#041;&lt;br&gt;end&lt;/i&gt;.")
+@case(Kommander::for(QString,int,int,int))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"variable")
+ @setGlobal(PARM2,"start")
+ @setGlobal(PARM3,"end")
+ @setGlobal(PARM4,"step")
+ @setGlobal(short,for)
+ @setGlobal(DESC,"Returns the value of a global variable.")
+@case(Kommander::i18n(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"variable")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,i18n)
+ @setGlobal(DESC,"Translates the string into the current language. Texts in GUI would be automatically extracted for translation.")
+@case(Kommander::if(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"expression")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,if)
+ @setGlobal(DESC,"Executes block if expression is true &amp;#040;non-zero number or non-empty string.&amp;#041; &lt;p&gt;&lt;b&gt;Old&lt;/b&gt;Close with &lt;b&gt;&amp;#064;endif&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;New&lt;/b&gt;&lt;br&gt;if val == true then&lt;br&gt;// do op&lt;br&gt;elseif cond&lt;br&gt;// second chance&lt;br&gt;else&lt;br&gt;// cond failed&lt;br&gt;endif&lt;/p&gt;")
+@case(Kommander::dialog(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"file")
+ @setGlobal(PARM2,"args")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,dialog)
+ @setGlobal(DESC,"Executes another Kommander dialog. Current dialog directory is used if no path is given. Arguments may be given as named arguments which will become global variables in the new dialog. For instance: &lt;i&gt;var=val&lt;/i&gt;")
+@case(Kommander::readSetting(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"key")
+ @setGlobal(PARM2,"default")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,readSetting)
+ @setGlobal(DESC,"Reads setting from configration file for this dialog.")
+@case(Kommander::setGlobal(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"variable")
+ @setGlobal(PARM2,"value")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,setGlobal)
+ @setGlobal(DESC,"Sets the value of a global variable. Global variables exist for the life of the Kommander window.")
+@case(Kommander::writeSetting(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"key")
+ @setGlobal(PARM2,"value")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,writeSetting)
+ @setGlobal(DESC,"Stores setting in configuration file for this dialog.")
+@case(Kommander::writeSetting(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"key")
+ @setGlobal(PARM2,"value")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,writeSetting)
+ @setGlobal(DESC,"Begin of &lt;b&gt;switch&lt;/b&gt; block. Following &lt;b&gt;case&lt;/b&gt; values are compared to &lt;i&gt;expression&lt;/i&gt;.&lt;p&gt;&amp;#064;switch&amp;#040;&amp;#041;&lt;br&gt;&amp;#064;case&amp;#040;&amp;#041;&lt;br&gt;&amp;#064;end")
+@case(Kommander::dcop(QString,QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"id")
+ @setGlobal(PARM2,"interface")
+ @setGlobal(PARM3,"function")
+ @setGlobal(PARM4,"args")
+ @setGlobal(short,dcop)
+ @setGlobal(DESC,"Executes an external DCOP call.")
+@case(Kommander::dcop(QString,QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"id")
+ @setGlobal(PARM2,"interface")
+ @setGlobal(PARM3,"function")
+ @setGlobal(PARM4,"args")
+ @setGlobal(short,dcop)
+ @setGlobal(DESC,"Adds a comment to EOL that Kommander will not parse")
+@case(Kommander::dcop(QString,QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"id")
+ @setGlobal(PARM2,"interface")
+ @setGlobal(PARM3,"function")
+ @setGlobal(PARM4,"args")
+ @setGlobal(short,dcop)
+ @setGlobal(DESC,"Creates a new widget with the specified type and as the child of parent.")
+@case(Kommander::dcop(QString,QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"id")
+ @setGlobal(PARM2,"interface")
+ @setGlobal(PARM3,"function")
+ @setGlobal(PARM4,"args")
+ @setGlobal(short,dcop)
+ @setGlobal(DESC,"Returns true if there is a widget with the passed name, false otherwise.")
+@case(Kommander::dcop(QString,QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"id")
+ @setGlobal(PARM2,"interface")
+ @setGlobal(PARM3,"function")
+ @setGlobal(PARM4,"args")
+ @setGlobal(short,dcop)
+ @setGlobal(DESC,"Connects the signal of sender with the slot of the receiver")
+@case(Kommander::dcop(QString,QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"id")
+ @setGlobal(PARM2,"interface")
+ @setGlobal(PARM3,"function")
+ @setGlobal(PARM4,"args")
+ @setGlobal(short,dcop)
+ @setGlobal(DESC,"Disconnects the signal of sender from the slot of the receiver")
+@case(Kommander::dcop(QString,QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"id")
+ @setGlobal(PARM2,"interface")
+ @setGlobal(PARM3,"function")
+ @setGlobal(PARM4,"args")
+ @setGlobal(short,dcop)
+ @setGlobal(DESC,"Exits script execution and returns")
+@case(Kommander::dcop(QString,QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"id")
+ @setGlobal(PARM2,"interface")
+ @setGlobal(PARM3,"function")
+ @setGlobal(PARM4,"args")
+ @setGlobal(short,dcop)
+ @setGlobal(DESC,"Exits the current block of a while, for or foreach loop")
+@case(Kommander::dcop(QString,QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"id")
+ @setGlobal(PARM2,"interface")
+ @setGlobal(PARM3,"function")
+ @setGlobal(PARM4,"args")
+ @setGlobal(short,dcop)
+ @setGlobal(DESC,"Exit a step and return to the beginning of a loop")
+@case(Kommander::dcop(QString,QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"id")
+ @setGlobal(PARM2,"interface")
+ @setGlobal(PARM3,"function")
+ @setGlobal(PARM4,"args")
+ @setGlobal(short,dcop)
+ @setGlobal(DESC,"Return from a script, optionaly with a value from the script to the caller")
+@case(Array::values(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"array")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,values)
+ @setGlobal(DESC,"Returns an EOL-separated list of all values in the array.")
+@case(Array::keys(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"array")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,keys)
+ @setGlobal(DESC,"Returns an EOL-separated list of all keys in the array.")
+@case(Array::clear(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"array")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,clear)
+ @setGlobal(DESC,"Removes all elements from the array.")
+@case(Array::count(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"array")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,count)
+ @setGlobal(DESC,"Returns the number of elements in the array.")
+@case(Array::count(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"array")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,count)
+ @setGlobal(DESC,"Returns the value associated with the given key.")
+@case(Array::remove(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"array")
+ @setGlobal(PARM2,"key")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,remove)
+ @setGlobal(DESC,"Removes element with the given key from the array.")
+@case(Array::remove(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"array")
+ @setGlobal(PARM2,"key")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,remove)
+ @setGlobal(DESC,"Adds element with the given key and value to the array")
+@case(Array::fromString(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"array")
+ @setGlobal(PARM2,"string")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,fromString)
+ @setGlobal(DESC,"Adds all elements in the string to the array. ")
+@case(Array::toString(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"array")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,toString)
+ @setGlobal(DESC,"Returns all elements in the array in &lt;pre&gt;key\\tvalue\\n&lt;/pre&gt; format.")
+@case(Array::toString(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"array")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,toString)
+ @setGlobal(DESC,"")
+@case(Array::toString(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"array")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,toString)
+ @setGlobal(DESC,"")
+@case(Array::toString(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"array")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,toString)
+ @setGlobal(DESC,"")
+@case(Array::toString(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"array")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,toString)
+ @setGlobal(DESC,"")
+@case(String::length(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,length)
+ @setGlobal(DESC,"Returns number of chars in the string.")
+@case(String::contains(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"substring")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,contains)
+ @setGlobal(DESC,"Checks if the the string contains the given substring.")
+@case(String::find(QString,QString,int))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"sought")
+ @setGlobal(PARM3,"index")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,find)
+ @setGlobal(DESC,"Returns the position of a substring in the string, or -1 if it is not found.")
+@case(String::findRev(QString,QString,int))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"sought")
+ @setGlobal(PARM3,"index")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,findRev)
+ @setGlobal(DESC,"Returns the position of a substring in the string, or -1 if it is not found. String is searched backwards")
+@case(String::left(QString,int))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"n")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,left)
+ @setGlobal(DESC,"Returns the first &lt;i&gt;n&lt;/i&gt; chars of the string.")
+@case(String::right(QString,int))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"n")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,right)
+ @setGlobal(DESC,"Returns the last &lt;i&gt;n&lt;/i&gt; chars of the string.")
+@case(String::mid(QString,int,int))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"start")
+ @setGlobal(PARM3,"n")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,mid)
+ @setGlobal(DESC,"Returns &lt;i&gt;n&lt;/i&gt; chars of the string, starting from &lt;i&gt;start&lt;/i&gt;.")
+@case(String::remove(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"substring")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,remove)
+ @setGlobal(DESC,"Removes all occurrences of given substring.")
+@case(String::replace(QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"substring")
+ @setGlobal(PARM3,"replacement")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,replace)
+ @setGlobal(DESC,"Replaces all occurrences of the given substring with the given replacement.")
+@case(String::upper(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,upper)
+ @setGlobal(DESC,"Converts the string to uppercase.")
+@case(String::lower(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,lower)
+ @setGlobal(DESC,"Converts the string to lowercase.")
+@case(String::compare(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string1")
+ @setGlobal(PARM2,"string2")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,compare)
+ @setGlobal(DESC,"Compares two strings. Returns 0 if they are equal, ")
+@case(String::isEmpty(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,isEmpty)
+ @setGlobal(DESC,"Checks if the string is empty.")
+@case(String::isNumber(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,isNumber)
+ @setGlobal(DESC,"Checks if the string is a valid number.")
+@case(String::section(QString,QString,int))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"separator")
+ @setGlobal(PARM3,"index")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,section)
+ @setGlobal(DESC,"Returns given section of a string.")
+@case(String::args(QString,QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"arg1")
+ @setGlobal(PARM3,"arg2")
+ @setGlobal(PARM4,"arg3")
+ @setGlobal(short,args)
+ @setGlobal(DESC,"Returns the given string with %1, %2, %3 replaced with &lt;i&gt;arg1&lt;/i&gt;, &lt;i&gt;arg2&lt;/i&gt;, &lt;i&gt;arg3&lt;/i&gt; accordingly.")
+@case(String::args(QString,QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"arg1")
+ @setGlobal(PARM3,"arg2")
+ @setGlobal(PARM4,"arg3")
+ @setGlobal(short,args)
+ @setGlobal(DESC,"Convert a string to an integer. If not possible use the default value")
+@case(String::args(QString,QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"string")
+ @setGlobal(PARM2,"arg1")
+ @setGlobal(PARM3,"arg2")
+ @setGlobal(PARM4,"arg3")
+ @setGlobal(short,args)
+ @setGlobal(DESC,"Convert a string to a double precision floating point value. If not possible use the default value")
+@case(File::read(QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"")
+ @setGlobal(PARM2,"")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,read)
+ @setGlobal(DESC,"Returns content of given file.")
+@case(File::write(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"file")
+ @setGlobal(PARM2,"string")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,write)
+ @setGlobal(DESC,"Writes given string to a file.")
+@case(File::append(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"file")
+ @setGlobal(PARM2,"string")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,append)
+ @setGlobal(DESC,"Appends given string to the end of a file.")
+@case(Input::text(QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"caption")
+ @setGlobal(PARM2,"label")
+ @setGlobal(PARM3,"default")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,text)
+ @setGlobal(DESC,"Shows text selection dialog. Returns entered text.")
+@case(Input::password(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"caption")
+ @setGlobal(PARM2,"password")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,password)
+ @setGlobal(DESC,"Shows a dialog asking user for password and returns it.")
+@case(Input::value(QString,QString,int,int,int,int))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"caption")
+ @setGlobal(PARM2,"label")
+ @setGlobal(PARM3,"value")
+ @setGlobal(PARM4,"min")
+ @setGlobal(short,value)
+ @setGlobal(DESC,"Shows value selection dialog. Returns entered value.")
+@case(Input::double(QString,QString,double,double,double,double))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"caption")
+ @setGlobal(PARM2,"label")
+ @setGlobal(PARM3,"value")
+ @setGlobal(PARM4,"min")
+ @setGlobal(short,double)
+ @setGlobal(DESC,"Shows float value selection dialog. Returns entered value.")
+@case(Input::openfile(QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"startdir")
+ @setGlobal(PARM2,"filter")
+ @setGlobal(PARM3,"caption")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,openfile)
+ @setGlobal(DESC,"Shows existing file selection dialog. Returns selected file.")
+@case(Input::savefile(QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"startdir")
+ @setGlobal(PARM2,"filter")
+ @setGlobal(PARM3,"caption")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,savefile)
+ @setGlobal(DESC,"Shows save file selection dialog. Returns selected file.")
+@case(Input::directory(QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"startdir")
+ @setGlobal(PARM2,"filter")
+ @setGlobal(PARM3,"caption")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,directory)
+ @setGlobal(DESC,"Shows directory selection dialog. Returns selected directory.")
+@case(Input::openfiles(QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"startdir")
+ @setGlobal(PARM2,"filter")
+ @setGlobal(PARM3,"caption")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,openfiles)
+ @setGlobal(DESC,"Shows multiple files selection dialog. Returns EOL-separated list of selected files.")
+@case(Message::info(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"text")
+ @setGlobal(PARM2,"caption")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,info)
+ @setGlobal(DESC,"Shows an information dialog.")
+@case(Message::error(QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"text")
+ @setGlobal(PARM2,"caption")
+ @setGlobal(PARM3,"")
+ @setGlobal(PARM4,"")
+ @setGlobal(short,error)
+ @setGlobal(DESC,"Shows an error dialog.")
+@case(Message::warning(QString,QString,QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"text")
+ @setGlobal(PARM2,"caption")
+ @setGlobal(PARM3,"button1")
+ @setGlobal(PARM4,"button2")
+ @setGlobal(short,warning)
+ @setGlobal(DESC,"Shows a warning dialog with up to three buttons. Returns number of selected button.")
+@case(Message::question(QString,QString,QString,QString,QString))
+ @setGlobal(enWidget,0)
+ @setGlobal(PARM1,"text")
+ @setGlobal(PARM2,"caption")
+ @setGlobal(PARM3,"button1")
+ @setGlobal(PARM4,"button2")
+ @setGlobal(short,question)
+ @setGlobal(DESC,"Shows a question dialog with up to three buttons. Returns number of selected button.")
+@case(*)
+ @exec(kdialog --error "@functiongroup.selection::@proto.selection is not recognized")
+@end
+@setparams
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>setparams</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>570</x>
+ <y>380</y>
+ <width>32</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@##### put the following in @setparams #########
+@if(@global(enWidget))
+ @widgetName.setVisible(true)
+ @wname.setVisible(true)
+@endif
+@if(!@global(enWidget))
+ @widgetName.setVisible(false)
+ @wname.setVisible(false)
+@endif
+@if(@String.length(@global(PARM1)))
+ @param1.setVisible(true)
+ @TextParam1.setVisible(true)
+ @TextParam1.setText(@global(PARM1))
+@endif
+@if(!@String.length(@global(PARM1)))
+ @param1.clear
+ @param1.setVisible(false)
+ @TextParam1.setVisible(false)
+@endif
+@if(@String.length(@global(PARM2)))
+ @param2.setVisible(true)
+ @TextParam2.setVisible(true)
+ @TextParam2.setText(@global(PARM2))
+@endif
+@if(!@String.length(@global(PARM2)))
+ @param2.clear
+ @param2.setVisible(false)
+ @TextParam2.setVisible(false)
+@endif
+@if(@String.length(@global(PARM3)))
+ @param3.setVisible(true)
+ @TextParam3.setVisible(true)
+ @TextParam3.setText(@global(PARM3))
+@endif
+@if(!@String.length(@global(PARM3)))
+ @param3.clear
+ @param3.setVisible(false)
+ @TextParam3.setVisible(false)
+@endif
+@if(@String.length(@global(PARM4)))
+ @param4.setVisible(true)
+ @TextParam4.setVisible(true)
+ @TextParam4.setText(@global(PARM4))
+@endif
+@if(!@String.length(@global(PARM4)))
+ @param4.clear
+ @param4.setVisible(false)
+ @TextParam4.setVisible(false)
+@endif
+@TextDescription.setText(&lt;html&gt;@global(DESC)&lt;/html&gt;)
+
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>filterscript</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>220</x>
+ <y>380</y>
+ <width>32</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@if(@wfilter.checked)
+ @filteron
+@endif
+@if(!@wfilter.checked)
+ @filteroff
+@endif</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>filteroff</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>300</x>
+ <y>380</y>
+ <width>32</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@##### put the following in the @filteroff script #########
+@setGlobal(DCOP,"addUniqueItem(QString,QString)
+associatedText(QString)
+cellText(QString,int,int)
+checked(QString)
+children(QString,bool)
+clear(QString)
+count(QString)
+currentColumn(QString)
+currentItem(QString)
+currentRow(QString)
+execute(QString)
+findItem(QString,QString)
+insertColumn(QString,int,int)
+insertItem(QString,QString,int)
+insertItems(QString,QStringList,int)
+insertRow(QString,int,int)
+item(QString,int)
+itemDepth(QString,int)
+itemPath(QString,int)
+removeColumn(QString,int,int)
+removeItem(QString,int)
+removeRow(QString,int,int)
+selection(QString)
+setAssociatedText(QString,QString)
+setEnabled(QString,bool)
+setCellText(QString,int,int,QString)
+setCellWidget(QString,int,int,QString)
+cellWidget(QString,int,int)
+setChecked(QString,bool)
+setColumnCaption(QString,int,QString)
+setCurrentItem(QString,int)
+insertTab(QString,QString,int)
+setMaximum(QString,int)
+setPixmap(QString,QString,int)
+setRowCaption(QString,int,QString)
+setSelection(QString,QString)
+setText(QString,QString)
+setVisible(QString,bool)
+type(QString)
+setEditable(QString,bool)")
+
+@proto.clear
+@proto.insertItems(@global(DCOP), 0)
+
+</string>
+ </stringlist>
+ </property>
+ </widget>
+ <widget class="ScriptObject">
+ <property name="name">
+ <cstring>filteron</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>260</x>
+ <y>380</y>
+ <width>32</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>@##### put the following in @wfilter checked #########
+@setGlobal(start,@expr(@String.find("@wname.selection", " ")+2))
+@setGlobal(stop,@expr(@String.length("@wname.selection")-1))
+@setGlobal(length,@expr(@global(stop)-@global(start)))
+@setGlobal(teststr, @String.lower(@String.mid("@wname.selection", @global(start), @global(length))))
+@# @exec(kdialog --msgbox "Base: @wname.selection\nStart: @global(start)\nStop: @global(start)\nLength: @global(length)\nString: @global(teststr)")
+@switch(@global(teststr))
+
+@##### put the following in the @filteron script #########
+@case(aboutdialog)
+ @setGlobal(DCOP,"execute(QString)")
+
+@case(buttongroup)
+ @setGlobal(DCOP,"checked(QString)
+setChecked(QString,bool)")
+
+@case(checkbox)
+ @setGlobal(DCOP,"setText(QString,QString)
+checked(QString)
+setChecked(QString,bool)")
+
+@case(closebutton)
+ @setGlobal(DCOP,"setText(QString,QString)")
+
+@case(combobox)
+ @setGlobal(DCOP,"selection(QString)
+setSelection(QString,QString)
+currentItem(QString)
+setCurrentItem(QString,int)
+item(QString,int)
+removeItem(QString,int)
+insertItem(QString,QString,int)
+insertItems(QString,QStringList,int)
+addUniqueItem(QString,QString)
+clear(QString)
+count(QString)
+setEditable(QString,bool)")
+
+@case(datepicker)
+ @setGlobal(DCOP,"setText(QString,QString)")
+
+@case(dialog)
+ @setGlobal(DCOP,"setText(QString,QString)")
+
+@case(execbutton)
+ @setGlobal(DCOP,"setText(QString,QString)
+execute(QString)")
+
+@case(fileselector)
+ @setGlobal(DCOP,"setText(QString,QString)
+selection(QString)
+setSelection(QString,QString)
+clear(QString)")
+
+@case(fontdialog)
+ @setGlobal(DCOP,"execute(QString)")
+
+@case(groupbox)
+ @setGlobal(DCOP,"setText(QString,QString)")
+
+@case(konsole)
+ @setGlobal(DCOP,"setText(QString,QString)
+clear(QString)
+execute(QString)")
+
+@case(label)
+ @setGlobal(DCOP,"setText(QString,QString)
+clear(QString)")
+
+@case(lineedit)
+ @setGlobal(DCOP,"setText(QString,QString)
+selection(QString)
+setSelection(QString,QString)
+clear(QString)
+setEditable(QString,bool)")
+
+@case(listbox)
+ @setGlobal(DCOP,"setText(QString,QString)
+selection(QString)
+setSelection(QString,QString)
+insertItems(QString,QStringList,int)
+insertItem(QString,QString,int)
+removeItem(QString,int)
+clear(QString)
+currentItem(QString)
+setCurrentItem(QString,int)
+item(QString,int)
+addUniqueItem(QString,QString)
+findItem(QString,QString)
+setPixmap(QString,QString,int)
+count(QString)")
+
+@case(pixmaplabel)
+ @setGlobal(DCOP,"setText(QString,QString)
+clear(QString)")
+
+@case(popupmenu)
+ @setGlobal(DCOP,"clear(QString)
+execute(QString)
+item(QString,int)
+count(QString)")
+
+@case(progressbar)
+ @setGlobal(DCOP,"setText(QString,QString)
+clear(QString)
+setMaximum(QString,int)")
+
+@case(radiobutton)
+ @setGlobal(DCOP,"setText(QString,QString)
+setChecked(QString,bool)
+checked(QString)")
+
+@case(richtexteditor)
+ @setGlobal(DCOP,"setText(QString,QString)
+clear(QString)
+selection(QString)
+setEditable(QString,bool)")
+
+@case(scriptobject)
+ @setGlobal(DCOP,"setText(QString,QString)
+clear(QString)
+execute(QString)
+item(QString,int)
+count(QString)")
+
+@case(slider)
+ @setGlobal(DCOP,"setText(QString,QString)
+clear(QString)
+setMaximum(QString,int)")
+
+@case(spinboxint)
+ @setGlobal(DCOP,"setText(QString,QString)
+setMaximum(QString,int)")
+
+@case(statusbar)
+ @setGlobal(DCOP,"setText(QString,QString)
+insertItem(QString,QString,int)
+removeItem(QString,int)
+clear(QString)")
+
+@case(table)
+ @setGlobal(DCOP,"currentColumn(QString)
+currentRow(QString)
+insertColumn(QString,int,int)
+insertRow(QString,int,int)
+cellText(QString,int,int)
+setCellText(QString,int,int,QString)
+setCellWidget(QString,int,int,QString)
+cellWidget(QString,int,int)
+removeRow(QString,int,int)
+removeColumn(QString,int,int)
+setColumnCaption(QString,int,QString)
+setRowCaption(QString,int,QString)
+setText(QString,QString)
+selection(QString)")
+
+@case(tabwidget)
+ @setGlobal(DCOP,"currentItem(QString)
+setCurrentItem(QString,int)
+insertTab(QString,QString,int)")
+
+@case(textbrowser)
+ @setGlobal(DCOP,"setText(QString,QString)
+selection(QString)
+clear(QString)")
+
+@case(textedit)
+ @setGlobal(DCOP,"setText(QString,QString)
+selection(QString)
+setSelection(QString,QString)
+clear(QString)
+setEditable(QString,bool)")
+
+@case(timer)
+ @setGlobal(DCOP,"setText(QString,QString)
+execute(QString)")
+
+@case(timewidget)
+ @setGlobal(DCOP,"setText(QString,QString)")
+
+@case(toolbox)
+ @setGlobal(DCOP,"count(QString)")
+
+@case(treewidget)
+ @setGlobal(DCOP,"insertItem(QString,QString,int)
+setText(QString,QString)
+insertItems(QString,QStringList,int)
+selection(QString)
+setSelection(QString,QString)
+clear(QString)
+removeItem(QString,int)
+currentItem(QString)
+setCurrentItem(QString,int)
+findItem(QString,QString)
+item(QString,int)
+itemPath(QString,int)
+itemDepth(QString,int)
+setPixmap(QString,QString,int)
+setColumnCaption(QString,int,QString)")
+
+@end
+@proto.clear
+@proto.insertItems(@global(DCOP), 0)
+
+</string>
+ </stringlist>
+ </property>
+ </widget>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="812">789cbd915d4bc3301846effb2b427357645b3b3f36c49fa07829881769f276fd600a3a2f44fcefe6bc9b9195f5529f274d737a28a4e9bc300ff7b7a698676f3bb7ebbcf1ad7b354578df6e3f1e9f6e3eb3bcaa4c1ce5d294f95996cf8c37772fcfc2dac6b55d68c0012c5714ecc12a50b003cf1714dc80178e822d78b9a66000571ab001d74b0a7ab0bea260ad1828e840df5050c046a3fb3f997f36f637d3c68e8dabbd67d43f2a9920121a9d0e2a998d88e8d5b67b954cd70be9bb1855c90c838d22de883dde9bbeb3df9e1c191e1f94cc46264d535f2a536720a33390943ffd3fa7ccd775f60d4b60a687</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>wname</sender>
+ <signal>widgetTextChanged(const QString&amp;)</signal>
+ <receiver>filterscript</receiver>
+ <slot>execute()</slot>
+ </connection>
+ <connection>
+ <sender>functiongroup</sender>
+ <signal>widgetTextChanged(const QString&amp;)</signal>
+ <receiver>proto</receiver>
+ <slot>populate()</slot>
+ </connection>
+ <connection>
+ <sender>proto</sender>
+ <signal>selectionChanged()</signal>
+ <receiver>setfunction</receiver>
+ <slot>execute()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>wname</tabstop>
+ <tabstop>param1</tabstop>
+ <tabstop>param2</tabstop>
+ <tabstop>param3</tabstop>
+ <tabstop>ExecButton18</tabstop>
+ <tabstop>window</tabstop>
+ <tabstop>widgetName</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/kmdrtools/examples.kmdr b/kommander/kmdrtools/examples.kmdr
new file mode 100755
index 00000000..4e63e80f
--- /dev/null
+++ b/kommander/kmdrtools/examples.kmdr
@@ -0,0 +1,154 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>Form2</class>
+<widget class="Dialog">
+ <property name="name">
+ <cstring>Form2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>371</width>
+ <height>491</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Kommander Examples</string>
+ </property>
+ <property name="icon">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string></string>
+ <string>TreeWidget19.insertItem("current", -1)
+array_indexedFromString("a", exec("cd "+_KDDIR+" &amp;&amp; ls -1 current/*.kmdr"), "\n")
+c = TreeWidget19.currentItem
+for i=0 to array_count("a")-1 do
+ TreeWidget19.insertItem(a[i], c)
+ debug(a[i])
+end
+TreeWidget19.insertItem("old", -1)
+c = TreeWidget19.currentItem
+array_indexedFromString("a", exec("cd "+_KDDIR+" &amp;&amp; ls -1 old/*kmdr"), "\n")
+for i=0 to array_count("a")-1 do
+ TreeWidget19.insertItem(a[i], c)
+end
+c = TreeWidget19.currentItem
+array_indexedFromString("a", exec("cd "+_KDDIR+" &amp;&amp; ls -1 tutorial/*kmdr"), "\n")
+for i=0 to array_count("a")-1 do
+ TreeWidget19.insertItem(a[i], c)
+end
+//debug(exec("ls -1 /home/eric/kdesvn/kdewebdev/kommander/examples/current/*.kmdr"))</string>
+ <string></string>
+ </stringlist>
+ </property>
+ <property name="useInternalParser">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="TreeWidget" row="0" column="0">
+ <column>
+ <property name="text">
+ <string>Examples</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>TreeWidget19</cstring>
+ </property>
+ <property name="tooltipColumn">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout90</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer39</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>71</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="ExecButton">
+ <property name="name">
+ <cstring>ExecButton108</cstring>
+ </property>
+ <property name="text">
+ <string>Open in &amp;new editor</string>
+ </property>
+ <property name="associations" stdset="0">
+ <stringlist>
+ <string>d = TreeWidget19.itemDepth(TreeWidget19.currentItem)
+if d == 1 then
+ execBackground("kmdr-editor "+_KDDIR+"/"+TreeWidget19.itemPath(TreeWidget19.currentItem)+"/"+TreeWidget19.selection)
+else //directory
+
+endif</string>
+ </stringlist>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer40</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>71</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="6350">789ca598d94f1fc911c7dff7af40db6faba877a667baa747511e8c01e3030c06cc11e5a1aa7a86cbdc603051fef734f5ad9fed5d2952a4f521fba3beeaae1a7eff6de9606b63e9b7df7fb9bba7fb53599213ba5dfaad3c5c5c7cfbe7bffef1ef5f7e0d61a9fee9425e0abffeed975fb7ef976469f3ea727a013f56708dfe7a61597069b372068729f6cabbe0dcc8acbc622c4599c1a10dad72f1ca5d1370bfc77d5dcb01e70770176252de51eebb1c21df96720c6d87f51edcd3202fec5e29a7c01dee3b541e43dfa9b2ee4699dbd88e2a0f2997861a5d97040ed441dfa83c776d8ff5a3176e9b466cff6be5b6ded7aabe07ca5d37f6f4c2f400ee1bc84f1f95fb2859d7654f39a6766495c729a7b66d3a5dc77d431fa2ca2b9f9573ecb2ae975999dafa80ae5f1a0f0df6ef83fb79507bf927701e65d0f39372b507cef3837102fb2be3a1d1fd1efb4b65f87f193c3454f4fcaaf294a3e8ba6b5e3834ed88f3a528b72d352a0fef1b33e4f5df9443655d776aefd02d582e94fb568c3be3b9813ddf2a577b6695df6d1bf3a8f662514eed64fa7c521e6a38ea79867c39b48dfa9f8e95c705fb1f0c79d55f8142d7a8feee1a9cbaacfafb013c24d8c7df29f398912fee8db2c431e17d562ea137ff41be52eda9f2ca15784c05f10e7da7ba5fe5e3afc6b1d1789333f0200cff6e2acf21415f4fc643837cd5f8ace99971de6bfe756d65bc770aee52d0f8e77be550d7555efe0c4e09f1e95ae52e8c382fe7e0ae4680aeef832345e4eb2a788cd08f351fbb18b8d1fc70deb858bee1be983bc67b9aef55ba453c6d1b4b8b7a73094e7d823d37c15944f575b7ca43985ae4f7163813d6f98b71417c7bd82b6766c8ff9d8bbe479a9fdd1826e8ef173c9bfc199c02e4f167e09c08f1fb4e9916e749c0718c6a0f817e9ce70279b5fe75656c0bce6bfdeea6b1401e79569ec750903fa7c65dd1f749fdd7b75d84bd68cf3899bc1d38ce51f7b3c64f1f6a81837f37c0fdd4e9fb45e3b9efbb01f6a457c6638bf7efc07966c4eb9a721c09fef7e0347403de3b048f52501fd51ffdd091f94beb479fc75c50bfb5fef463c7886f5f8ca5457d5a07f78dc973021e479ca76cccd6dfde1897a2f92cd7df19f9f200e66e02639d3a8b57ff15cc11eb1c94b9ea83fc1fc1d4a27ffa4730e709f9a9fda697b117f873dd7886bd44fb5b5f16e759e3a79faa01105ff7604eb8af683cf573df427fd27c8c4ddfc05ea2fe8b6dead0cfbcde17bb61863fc4836998d05fb53ebdb4e309f5f69371467cb1d6c318fb8c7940b41fc594ad3e8bda230ebdc59fc3f9816982fce7606967f85bf329e6aa2fcedf1a0f93dadbad19cf13f255e3258e6326f81ffa513fb6e89fc7600a45f38b5be3cee23119cf13ea9dc67be47a5edff747e034637e21cdafda0c09eb0c798426d88b36c1dc9a7c9067ea6dde7207e03a5ea01fdc1bd714d3f31a4f351bfb80fe7e011ed3a8f672cf606a102facf1949a7ec67d740fe61efef26aff3a8d7419f553e33d853a70a1bf6b7ca5eaff84fa7c09e63a10eafe689c2dbe351f534fc4e87f9b6066cb8ff7c613e291d4be29d6fc80fe97c684fda4fd28a52a0fe6870b70951ff1a5f99e061a11ffe2c0dfe5db302e33fa81ceaf29c7087bf30c1e53863c03b8ca83fa087dc6d8e37dbf0c669970df0765926646bdd478484c05eb0c7b72f537e261c738435fdf8317e77d671c26d85ffb7d7a891f5d27e823d59ee8075a8f53a9fae2fd2be31efa5334a609fd17f217e9cc7eda4fd2944a07be06d7fbd0efcf8c05e7a9372e789fb51ea5991bab072acfd04446fcc83b6369e1ff67e3a9457e9d825313109f5bc66d40fdd1fe31b4291beb7b43a8e7f57eeac0d2c05e148c5bc48fcbc619f6259d67872ece013c82ebf8827ab307ce92d45fa4fd63e853ead01fb51e0fb1be8f7e7108ce39a1be607fa49170ff07f0c29feec27898314f6bbd1952b4fc746aef614813be47dc399832a17edc81a5b7fcb9361e511f59fd33e4dabe21df93710c88e7b7e0fa3ee4d37a338ca9833dbc185bbde1c9389abd9e8d5340fdb835ce01f322de1f47ca8807cdf781d380fa4f2b0b0e88cf2fe03aeec1deb65fac5f11e247aaffd01fb4df0ea59e473eed826b3d417d867da6349a7c37c6847ac94fc605eb04f9a76a3fdc8ff89917e769d7d8ced3155826f88f35bf7293d8d64f8ca780786fc143d3a17e1b2fdea31b63863f44e325b7f53eb59fc77dede2bc4ce04c09f6d57a9043ae21a8f2ec81ab3de0ff75b0c80c7be1fe2e31fce1ee8d05f9e4eec0436bf1cee05a2f50ff347e725fc73bc4db7be301f2b947b044f467a7f37dfd9a317b91379e218f837e491af45fa7f3681eaaff11af3a0fe43c04c4179f82c5fa0d69bdafd3fae23eed8f99eb38827eb40c9638213ebf804b67fb35de6b3a0c01f543f3af0e2f09f586b51ee56960e4a3877c53e94d9fcbef8cefd7c138ce9897609f3a3d05f8e7192cd6df58e51fdb41ccde6b6059f40fad7f6390d1ea19f6f7b9ef313fbc06978cf748eb6ffd5a0ce66f9d6fea746cf313a93feab8dbf69837b57fd66c8df6f31331ce3df245fd33723d8ff96ad378b07eba62cc33ea95c6d72839a19ed2b231c11f74042ec9eedb3266c8ef57bf33ecadf5b54ebb56df48e38b9a2c3de637adb7d48e8dfdfca50117abaf7edf58709f68fda0900bf4753be0ba8efea7f580fa3ce1e73f746e3cf78897042ec5f455fd292e5834fe285579b05ffb130d63077fc9a371847d49e7833abd14bcef3e1acf33fa81e63351b507f24feb35f1d4d8bafabf7eac36789f35bfa88cf58341d7b57ed15426bb7f024f2dce93f6a33add2e58e781fa315d2750dd1fc153b0f7745eaa5f3b61c63ca1f5f4659a34d678abd3d382757eaa5f1fc6dbf7ffffefbfb6df3b4ffa2f7bf1c54ff57fb33ffe5ffbfdb13ff1a7fecc9ffb2ffec25ffa2b7fed6ffcadbff3f7fec17ff58ffee90ffbbff967ffca2ffbd77ec5affa35ffc6affbb7fe9d7fef3ff80dbfe93ffaadc57ebfed3ff91dbfebf7fc67bfef0ffca13ff28d6f7df09def7df4c90f3efb11fb9d77ce916327aeb8c9cdeed89db85377e6cedd1777e12edd95bb76377e5cc8ef6edd9dbb770feeab7b744fee5bfdfbec5eb965f7daadb855b7e6deb875f7f6677ddd3bf7de7d701b6eb3defed16db96df7c9edb85db7e73ebb7d77e00eddd18ffdae71ad0bae73bd8b2eb9c1e55a1e3cd5982426a15207cb998e7feca7133aa5333aa72f7441977445d77443b77447f7f4405fe9919ee81b3dd3abeffb97e935add02aadd11b5aa7b7f48eded307daa04dfa485bb44d9f68877669effbfecfb44f07744847d4504b813aea2952a297196964cf8e8999e587beb5384d3cf3319ff0299ff1397fe10bbee42bbee61bbee53bbee7871ff2f3577ee427fec6cffc8a97f935aff02aaff11b5ee7b7fc8edff307dee0cd9ff67fe42ddee64fbcc3bbbcc79f799f0ff8908fea44d372e08e7bae9f873fdb9f07ae9fbfe2c509098b4891496639961339953339972f72f1f37eb9942bb9961bb9953bb99707f92a8ff224dfe4595ed513cbf2fa8ff12c2bb22a6bf246d6e52d277927efe5836cc8a67c942dd9964fb2f3a7fdbbb2279f655f0ee4508ea491568274527bb8241924cbf8e77cf1a31f8b2faed40c2b5c84e652eaffa632ffa5fcfdcfdf7ff92f64b3cec5</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kommander/kommander-editor.kdevelop b/kommander/kommander-editor.kdevelop
new file mode 100644
index 00000000..41a05352
--- /dev/null
+++ b/kommander/kommander-editor.kdevelop
@@ -0,0 +1,285 @@
+<!DOCTYPE kdevelop>
+<kdevelop>
+ <general>
+ <author>Michal Rudolf</author>
+ <email>mrudolf@kdewebdev.org</email>
+ <version>$VERSION$</version>
+ <projectmanagement>KDevKDEAutoProject</projectmanagement>
+ <primarylanguage>C++</primarylanguage>
+ <keywords>
+ <keyword>Qt</keyword>
+ <keyword>KDE</keyword>
+ </keywords>
+ <projectdirectory>.</projectdirectory>
+ <absoluteprojectpath>false</absoluteprojectpath>
+ <description/>
+ <ignoreparts/>
+ <secondaryLanguages/>
+ <defaultencoding/>
+ <projectname>kommander-editor</projectname>
+ </general>
+ <kdevfileview>
+ <groups>
+ <group pattern="*.cpp;*.cxx;*.h" name="Sources" />
+ <group pattern="*.ui" name="User Interface" />
+ <group pattern="*.png" name="Icons" />
+ <group pattern="*.po;*.ts" name="Translations" />
+ <group pattern="*" name="Others" />
+ <hidenonprojectfiles>false</hidenonprojectfiles>
+ <hidenonlocation>false</hidenonlocation>
+ </groups>
+ <tree>
+ <hidenonprojectfiles>false</hidenonprojectfiles>
+ <hidepatterns>*.o,*.lo,CVS</hidepatterns>
+ <showvcsfields>false</showvcsfields>
+ </tree>
+ </kdevfileview>
+ <kdevdoctreeview>
+ <ignoretocs>
+ <toc>gtk</toc>
+ <toc>gnustep</toc>
+ <toc>python</toc>
+ <toc>php</toc>
+ <toc>perl</toc>
+ <toc>ada</toc>
+ <toc>ada_bugs_gcc</toc>
+ <toc>bash_bugs</toc>
+ <toc>bash</toc>
+ <toc>c++_bugs_gcc</toc>
+ <toc>clanlib</toc>
+ <toc>w3c-dom-level2-html</toc>
+ <toc>fortran_bugs_gcc</toc>
+ <toc>gnome1</toc>
+ <toc>gtk_bugs</toc>
+ <toc>haskell</toc>
+ <toc>haskell_bugs_ghc</toc>
+ <toc>java_bugs_gcc</toc>
+ <toc>java_bugs_sun</toc>
+ <toc>kde2book</toc>
+ <toc>kdev3api</toc>
+ <toc>libc</toc>
+ <toc>libstdc++</toc>
+ <toc>opengl</toc>
+ <toc>pascal_bugs_fp</toc>
+ <toc>perl_bugs</toc>
+ <toc>php_bugs</toc>
+ <toc>python_bugs</toc>
+ <toc>w3c-svg</toc>
+ <toc>sdl</toc>
+ <toc>stl</toc>
+ <toc>sw</toc>
+ <toc>w3c-uaag10</toc>
+ <toc>wxwidgets_bugs</toc>
+ </ignoretocs>
+ <projectdoc>
+ <userdocDir>/home/andris/cvs-developement/head/quanta/kommander/html/</userdocDir>
+ <apidocDir>/home/andris/cvs-developement/head/quanta/kommander/html/</apidocDir>
+ </projectdoc>
+ <ignoreqt_xml/>
+ <ignoredoxygen/>
+ <ignorekdocs/>
+ <ignoredevhelp>
+ <toc>atk</toc>
+ <toc>bonobo-activation</toc>
+ <toc>gdk</toc>
+ <toc>libgimpbase</toc>
+ <toc>libgimpcolor</toc>
+ <toc>libgimp</toc>
+ <toc>libgimpmath</toc>
+ <toc>libgimpmodule</toc>
+ <toc>libgimpthumb</toc>
+ <toc>libgimpwidgets</toc>
+ <toc>glib</toc>
+ <toc>gobject</toc>
+ <toc>libgnome</toc>
+ <toc>gtk</toc>
+ <toc>libbonobo</toc>
+ <toc>libbonoboui</toc>
+ <toc>ORBit2</toc>
+ <toc>pango</toc>
+ <toc>gdk-pixbuf</toc>
+ </ignoredevhelp>
+ </kdevdoctreeview>
+ <kdevdebugger>
+ <general>
+ <dbgshell/>
+ <programargs/>
+ <gdbpath>/usr/bin/gdb</gdbpath>
+ <breakonloadinglibs>true</breakonloadinglibs>
+ <separatetty>false</separatetty>
+ <floatingtoolbar>false</floatingtoolbar>
+ <runappinappdirectory>true</runappinappdirectory>
+ <configGdbScript/>
+ <runShellScript/>
+ <runGdbScript/>
+ <raiseGDBOnStart>false</raiseGDBOnStart>
+ </general>
+ <display>
+ <staticmembers>false</staticmembers>
+ <demanglenames>true</demanglenames>
+ <outputradix>10</outputradix>
+ </display>
+ </kdevdebugger>
+ <kdevfilecreate>
+ <filetypes/>
+ <useglobaltypes>
+ <type ext="ui" />
+ <type ext="cpp" />
+ <type ext="h" />
+ </useglobaltypes>
+ </kdevfilecreate>
+ <kdevautoproject>
+ <make>
+ <envvars>
+ <envvar value="1" name="WANT_AUTOCONF_2_5" />
+ <envvar value="1" name="WANT_AUTOMAKE_1_6" />
+ </envvars>
+ <abortonerror>true</abortonerror>
+ <numberofjobs>2</numberofjobs>
+ <dontact>false</dontact>
+ <makebin>makeobj</makebin>
+ <runmultiplejobs>true</runmultiplejobs>
+ <prio>0</prio>
+ </make>
+ <general>
+ <useconfiguration>default</useconfiguration>
+ <activetarget>editor/kmdr-editor</activetarget>
+ </general>
+ <configurations>
+ <default>
+ <configargs>--with-kommander --enable-debug=full</configargs>
+ <builddir>/data/development/build/kde-3.5/kdewebdev/</builddir>
+ <topsourcedir>/data/development/sources/kde-3.5/kdewebdev/</topsourcedir>
+ <cppflags/>
+ <ldflags/>
+ <ccompiler>kdevgccoptions</ccompiler>
+ <cxxcompiler>kdevgppoptions</cxxcompiler>
+ <f77compiler>kdevpgf77options</f77compiler>
+ <ccompilerbinary/>
+ <cxxcompilerbinary/>
+ <f77compilerbinary/>
+ <cflags/>
+ <cxxflags/>
+ <f77flags/>
+ <envvars/>
+ </default>
+ <andris>
+ <envvars/>
+ <configargs/>
+ <builddir>andris</builddir>
+ <topsourcedir/>
+ <cppflags/>
+ <ldflags/>
+ <ccompiler>kdevgccoptions</ccompiler>
+ <cxxcompiler>kdevgppoptions</cxxcompiler>
+ <f77compiler>kdevpgf77options</f77compiler>
+ <ccompilerbinary/>
+ <cxxcompilerbinary/>
+ <f77compilerbinary/>
+ <cflags/>
+ <cxxflags/>
+ <f77flags/>
+ </andris>
+ </configurations>
+ <run>
+ <mainprogram>/data/development/build/kde-3.5/kdewebdev/kommander/editor/.libs/kmdr-editor</mainprogram>
+ <programargs/>
+ <terminal>false</terminal>
+ <envvars/>
+ <autocompile>true</autocompile>
+ <directoryradio>executable</directoryradio>
+ <customdirectory>/</customdirectory>
+ <globaldebugarguments/>
+ <globalcwd>/data/development/build/kde-3.5/kdewebdev/</globalcwd>
+ <useglobalprogram>true</useglobalprogram>
+ <autoinstall>false</autoinstall>
+ <autokdesu>false</autokdesu>
+ </run>
+ </kdevautoproject>
+ <cppsupportpart>
+ <codecompletion/>
+ <filetemplates>
+ <choosefiles>false</choosefiles>
+ <interfaceURL/>
+ <implementationURL/>
+ <interfacesuffix>.h</interfacesuffix>
+ <implementationsuffix>.cpp</implementationsuffix>
+ <lowercasefilenames>true</lowercasefilenames>
+ </filetemplates>
+ </cppsupportpart>
+ <kdevclassview>
+ <folderhierarchy>true</folderhierarchy>
+ <depthoffolders>2</depthoffolders>
+ </kdevclassview>
+ <kdevcvs>
+ <cvsoptions>-f</cvsoptions>
+ <commitoptions/>
+ <updateoptions>-dP</updateoptions>
+ <addoptions/>
+ <removeoptions>-f</removeoptions>
+ <diffoptions>-u3 -p</diffoptions>
+ <logoptions/>
+ <rshoptions/>
+ <revertoptions>-C -d -P</revertoptions>
+ </kdevcvs>
+ <kdevcppsupport>
+ <codecompletion>
+ <includeGlobalFunctions>true</includeGlobalFunctions>
+ <includeTypes>true</includeTypes>
+ <includeEnums>true</includeEnums>
+ <includeTypedefs>false</includeTypedefs>
+ <automaticCodeCompletion>true</automaticCodeCompletion>
+ <automaticArgumentsHint>true</automaticArgumentsHint>
+ <codeCompletionDelay>250</codeCompletionDelay>
+ <argumentsHintDelay>400</argumentsHintDelay>
+ <automaticHeaderCompletion>true</automaticHeaderCompletion>
+ <headerCompletionDelay>250</headerCompletionDelay>
+ <showOnlyAccessibleItems>false</showOnlyAccessibleItems>
+ <completionBoxItemOrder>0</completionBoxItemOrder>
+ <howEvaluationContextMenu>true</howEvaluationContextMenu>
+ <showCommentWithArgumentHint>true</showCommentWithArgumentHint>
+ <statusBarTypeEvaluation>false</statusBarTypeEvaluation>
+ <namespaceAliases>std=_GLIBCXX_STD</namespaceAliases>
+ <processPrimaryTypes>true</processPrimaryTypes>
+ <processFunctionArguments>false</processFunctionArguments>
+ <preProcessAllHeaders>false</preProcessAllHeaders>
+ <parseMissingHeadersExperimental>false</parseMissingHeadersExperimental>
+ <resolveIncludePathsUsingMakeExperimental>false</resolveIncludePathsUsingMakeExperimental>
+ <alwaysParseInBackground>true</alwaysParseInBackground>
+ <usePermanentCaching>true</usePermanentCaching>
+ <alwaysIncludeNamespaces>false</alwaysIncludeNamespaces>
+ <includePaths>.;</includePaths>
+ </codecompletion>
+ <references/>
+ <qt>
+ <used>true</used>
+ <version>3</version>
+ <root>/usr/lib/qt3</root>
+ <includestyle>3</includestyle>
+ <designerintegration>EmbeddedKDevDesigner</designerintegration>
+ <qmake>/usr/lib/qt3/bin/qmake</qmake>
+ <designer>/usr/lib/qt3/bin/designer</designer>
+ <designerpluginpaths/>
+ </qt>
+ <creategettersetter>
+ <prefixGet/>
+ <prefixSet>set</prefixSet>
+ <prefixVariable>m_,_</prefixVariable>
+ <parameterName>theValue</parameterName>
+ <inlineGet>true</inlineGet>
+ <inlineSet>true</inlineSet>
+ </creategettersetter>
+ <splitheadersource>
+ <enabled>false</enabled>
+ <synchronize>true</synchronize>
+ <orientation>Vertical</orientation>
+ </splitheadersource>
+ </kdevcppsupport>
+ <kdevcvsservice>
+ <recursivewhenupdate>true</recursivewhenupdate>
+ <prunedirswhenupdate>true</prunedirswhenupdate>
+ <createdirswhenupdate>true</createdirswhenupdate>
+ <recursivewhencommitremove>true</recursivewhencommitremove>
+ <revertoptions>-C</revertoptions>
+ </kdevcvsservice>
+</kdevelop>
diff --git a/kommander/kommander.kdevelop b/kommander/kommander.kdevelop
new file mode 100644
index 00000000..f85e7354
--- /dev/null
+++ b/kommander/kommander.kdevelop
@@ -0,0 +1,279 @@
+<!DOCTYPE kdevelop>
+<kdevelop>
+ <general>
+ <author>Andras Mantia</author>
+ <email>amantia@kdewebdev.org</email>
+ <version>$VERSION$</version>
+ <projectmanagement>KDevKDEAutoProject</projectmanagement>
+ <primarylanguage>C++</primarylanguage>
+ <keywords>
+ <keyword>Qt</keyword>
+ <keyword>KDE</keyword>
+ </keywords>
+ <projectdirectory>.</projectdirectory>
+ <absoluteprojectpath>false</absoluteprojectpath>
+ <description/>
+ <ignoreparts/>
+ <secondaryLanguages/>
+ <defaultencoding/>
+ <projectname>kommander</projectname>
+ </general>
+ <kdevfileview>
+ <groups>
+ <group pattern="*.cpp;*.cxx;*.h" name="Sources" />
+ <group pattern="*.ui" name="User Interface" />
+ <group pattern="*.png" name="Icons" />
+ <group pattern="*.po;*.ts" name="Translations" />
+ <group pattern="*" name="Others" />
+ <hidenonprojectfiles>false</hidenonprojectfiles>
+ <hidenonlocation>false</hidenonlocation>
+ </groups>
+ <tree>
+ <hidenonprojectfiles>false</hidenonprojectfiles>
+ <hidepatterns>*.o,*.lo,CVS</hidepatterns>
+ <showvcsfields>false</showvcsfields>
+ </tree>
+ </kdevfileview>
+ <kdevdoctreeview>
+ <ignoretocs>
+ <toc>gtk</toc>
+ <toc>gnustep</toc>
+ <toc>python</toc>
+ <toc>php</toc>
+ <toc>perl</toc>
+ <toc>wxwidgets_bugs</toc>
+ <toc>w3c-uaag10</toc>
+ <toc>sw</toc>
+ <toc>stl</toc>
+ <toc>sdl</toc>
+ <toc>w3c-svg</toc>
+ <toc>python_bugs</toc>
+ <toc>php_bugs</toc>
+ <toc>perl_bugs</toc>
+ <toc>pascal_bugs_fp</toc>
+ <toc>opengl</toc>
+ <toc>libstdc++</toc>
+ <toc>libc</toc>
+ <toc>kde2book</toc>
+ <toc>java_bugs_gcc</toc>
+ <toc>haskell_bugs_ghc</toc>
+ <toc>haskell</toc>
+ <toc>java_bugs_sun</toc>
+ <toc>gnome1</toc>
+ <toc>fortran_bugs_gcc</toc>
+ <toc>w3c-dom-level2-html</toc>
+ <toc>clanlib</toc>
+ <toc>c++_bugs_gcc</toc>
+ <toc>bash</toc>
+ <toc>bash_bugs</toc>
+ <toc>ada_bugs_gcc</toc>
+ <toc>ada</toc>
+ <toc>gtk_bugs</toc>
+ </ignoretocs>
+ <projectdoc>
+ <userdocDir>/home/andris/cvs-developement/head/quanta/kommander/html/</userdocDir>
+ <apidocDir>/home/andris/cvs-developement/head/quanta/kommander/html/</apidocDir>
+ </projectdoc>
+ <ignoreqt_xml/>
+ <ignoredoxygen/>
+ <ignorekdocs/>
+ <ignoredevhelp>
+ <toc>pango</toc>
+ <toc>atk</toc>
+ <toc>gdk</toc>
+ <toc>bonobo-activation</toc>
+ <toc>libgimpbase</toc>
+ <toc>libgimpcolor</toc>
+ <toc>libgimp</toc>
+ <toc>libgimpmath</toc>
+ <toc>libgimpmodule</toc>
+ <toc>libgimpthumb</toc>
+ <toc>libgimpwidgets</toc>
+ <toc>glib</toc>
+ <toc>libgnome</toc>
+ <toc>gobject</toc>
+ <toc>gtk</toc>
+ <toc>libbonobo</toc>
+ <toc>libbonoboui</toc>
+ <toc>ORBit2</toc>
+ <toc>gdk-pixbuf</toc>
+ </ignoredevhelp>
+ </kdevdoctreeview>
+ <kdevdebugger>
+ <general>
+ <dbgshell/>
+ <programargs>/opt/kde3/bin/DVDAuthorWizard.kmdr</programargs>
+ <gdbpath/>
+ <breakonloadinglibs>true</breakonloadinglibs>
+ <separatetty>false</separatetty>
+ <floatingtoolbar>false</floatingtoolbar>
+ <runappinappdirectory>true</runappinappdirectory>
+ <configGdbScript/>
+ <runShellScript/>
+ <runGdbScript/>
+ <raiseGDBOnStart>false</raiseGDBOnStart>
+ </general>
+ <display>
+ <staticmembers>false</staticmembers>
+ <demanglenames>true</demanglenames>
+ <outputradix>10</outputradix>
+ </display>
+ </kdevdebugger>
+ <kdevfilecreate>
+ <filetypes/>
+ <useglobaltypes>
+ <type ext="ui" />
+ <type ext="cpp" />
+ <type ext="h" />
+ </useglobaltypes>
+ </kdevfilecreate>
+ <kdevautoproject>
+ <make>
+ <envvars>
+ <envvar value="no" name="UNSERMAKE" />
+ <envvar value="1" name="WANT_AUTOCONF_2_5" />
+ <envvar value="1" name="WANT_AUTOMAKE_1_6" />
+ </envvars>
+ <abortonerror>true</abortonerror>
+ <numberofjobs>2</numberofjobs>
+ <dontact>false</dontact>
+ <makebin>makeobj</makebin>
+ <runmultiplejobs>true</runmultiplejobs>
+ <prio>0</prio>
+ </make>
+ <general>
+ <useconfiguration>default</useconfiguration>
+ <activetarget>widgets/libkommanderwidgets.la</activetarget>
+ </general>
+ <configurations>
+ <default>
+ <configargs>--enable-debug=full</configargs>
+ <builddir>/data/development/build/kde-3.5/kdewebdev/</builddir>
+ <topsourcedir>/data/development/sources/kde-3.5/kdewebdev/</topsourcedir>
+ <cppflags/>
+ <ldflags/>
+ <ccompiler>kdevgccoptions</ccompiler>
+ <cxxcompiler>kdevgppoptions</cxxcompiler>
+ <f77compiler>kdevpgf77options</f77compiler>
+ <ccompilerbinary/>
+ <cxxcompilerbinary/>
+ <f77compilerbinary/>
+ <cflags/>
+ <cxxflags/>
+ <f77flags/>
+ <envvars/>
+ </default>
+ </configurations>
+ <run>
+ <mainprogram>/data/development/build/kde-3.5/kdewebdev/kommander/executor/.libs/kmdr-executor</mainprogram>
+ <programargs>/data/development/quanta/eric/editor-poc.kmdr</programargs>
+ <terminal>false</terminal>
+ <envvars/>
+ <directoryradio>build</directoryradio>
+ <customdirectory>/</customdirectory>
+ <autocompile>true</autocompile>
+ <autoinstall>false</autoinstall>
+ <autokdesu>false</autokdesu>
+ <globaldebugarguments>/data/development/quanta/eric/editor-poc.kmdr</globaldebugarguments>
+ <globalcwd>/data/development/build/kde-3.5/kdewebdev/</globalcwd>
+ <useglobalprogram>true</useglobalprogram>
+ </run>
+ </kdevautoproject>
+ <cppsupportpart>
+ <codecompletion/>
+ <filetemplates>
+ <choosefiles>false</choosefiles>
+ <interfaceURL/>
+ <implementationURL/>
+ <interfacesuffix>.h</interfacesuffix>
+ <implementationsuffix>.cpp</implementationsuffix>
+ <lowercasefilenames>true</lowercasefilenames>
+ </filetemplates>
+ </cppsupportpart>
+ <kdevclassview>
+ <folderhierarchy>true</folderhierarchy>
+ <depthoffolders>2</depthoffolders>
+ </kdevclassview>
+ <kdevcvs>
+ <cvsoptions>-f</cvsoptions>
+ <commitoptions/>
+ <updateoptions>-dP</updateoptions>
+ <addoptions/>
+ <removeoptions>-f</removeoptions>
+ <diffoptions>-u3 -p</diffoptions>
+ <logoptions/>
+ <rshoptions/>
+ </kdevcvs>
+ <kdevcppsupport>
+ <codecompletion>
+ <includeGlobalFunctions>true</includeGlobalFunctions>
+ <includeTypes>true</includeTypes>
+ <includeEnums>true</includeEnums>
+ <includeTypedefs>false</includeTypedefs>
+ <automaticCodeCompletion>false</automaticCodeCompletion>
+ <automaticArgumentsHint>true</automaticArgumentsHint>
+ <automaticHeaderCompletion>true</automaticHeaderCompletion>
+ <codeCompletionDelay>250</codeCompletionDelay>
+ <argumentsHintDelay>400</argumentsHintDelay>
+ <headerCompletionDelay>250</headerCompletionDelay>
+ <showOnlyAccessibleItems>false</showOnlyAccessibleItems>
+ <completionBoxItemOrder>0</completionBoxItemOrder>
+ <howEvaluationContextMenu>true</howEvaluationContextMenu>
+ <showCommentWithArgumentHint>true</showCommentWithArgumentHint>
+ <statusBarTypeEvaluation>false</statusBarTypeEvaluation>
+ <namespaceAliases>std=_GLIBCXX_STD</namespaceAliases>
+ <processPrimaryTypes>true</processPrimaryTypes>
+ <processFunctionArguments>false</processFunctionArguments>
+ <preProcessAllHeaders>true</preProcessAllHeaders>
+ <parseMissingHeaders>false</parseMissingHeaders>
+ <resolveIncludePaths>true</resolveIncludePaths>
+ <alwaysParseInBackground>true</alwaysParseInBackground>
+ <usePermanentCaching>true</usePermanentCaching>
+ <alwaysIncludeNamespaces>false</alwaysIncludeNamespaces>
+ <includePaths>.;</includePaths>
+ <parseMissingHeadersExperimental>false</parseMissingHeadersExperimental>
+ <resolveIncludePathsUsingMakeExperimental>false</resolveIncludePathsUsingMakeExperimental>
+ </codecompletion>
+ <references>
+ <pcs>Qt3</pcs>
+ <pcs>KDElibs3</pcs>
+ </references>
+ <qt>
+ <used>true</used>
+ <version>3</version>
+ <root>/usr/lib/qt3</root>
+ <includestyle>3</includestyle>
+ <designerintegration>ExternalDesigner</designerintegration>
+ <qmake>/usr/lib/qt3/bin/qmake</qmake>
+ <designer>/usr/lib/qt3/bin/designer</designer>
+ <designerpluginpaths/>
+ </qt>
+ <creategettersetter>
+ <prefixGet/>
+ <prefixSet>set</prefixSet>
+ <prefixVariable>m_,_</prefixVariable>
+ <parameterName>theValue</parameterName>
+ <inlineGet>true</inlineGet>
+ <inlineSet>true</inlineSet>
+ </creategettersetter>
+ <splitheadersource>
+ <enabled>false</enabled>
+ <synchronize>true</synchronize>
+ <orientation>Vertical</orientation>
+ </splitheadersource>
+ </kdevcppsupport>
+ <kdevcvsservice>
+ <recursivewhenupdate>true</recursivewhenupdate>
+ <prunedirswhenupdate>true</prunedirswhenupdate>
+ <createdirswhenupdate>true</createdirswhenupdate>
+ <recursivewhencommitremove>true</recursivewhencommitremove>
+ <revertoptions>-C</revertoptions>
+ </kdevcvsservice>
+ <kdevdocumentation>
+ <projectdoc>
+ <docsystem/>
+ <docurl/>
+ <usermanualurl/>
+ </projectdoc>
+ </kdevdocumentation>
+</kdevelop>
diff --git a/kommander/part/Makefile.am b/kommander/part/Makefile.am
new file mode 100644
index 00000000..9ba32668
--- /dev/null
+++ b/kommander/part/Makefile.am
@@ -0,0 +1,8 @@
+INCLUDES = -I$(top_srcdir)/kommander/executor -I$(top_srcdir)/kommander/factory $(all_includes)
+METASOURCES = AUTO
+kde_module_LTLIBRARIES = libkommander_part.la
+libkommander_part_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries)
+libkommander_part_la_LIBADD = $(top_builddir)/kommander/executor/libinstance.la $(top_builddir)/kommander/widget/libkommanderwidget.la $(LIB_KFILE) $(LIB_KPARTS) $(LIB_KHTML)
+kde_services_DATA = kommander_part.desktop
+libkommander_part_la_SOURCES = kommander_part.cpp
+noinst_HEADERS = kommander_part.h
diff --git a/kommander/part/kommander_part.cpp b/kommander/part/kommander_part.cpp
new file mode 100644
index 00000000..ef8ab5e1
--- /dev/null
+++ b/kommander/part/kommander_part.cpp
@@ -0,0 +1,86 @@
+/***************************************************************************
+ begin : Wed Jan 30 2008
+ copyright : (C) 2008, Andras Mantia <amantia@kde.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "kommander_part.h"
+
+#include <kdebug.h>
+
+#include <kinstance.h>
+#include <kparts/genericfactory.h>
+
+#include <qpoint.h>
+#include <qlayout.h>
+#include <qtimer.h>
+
+#include "instance.h"
+#include "kommanderversion.h"
+
+static const char *description =
+ I18N_NOOP("Executor Part is a component of the Kommander dialog system that executes .kmdr files inside a KDE KPart");
+
+typedef KParts::GenericFactory<KommanderPart> KommanderPartFactory;
+
+K_EXPORT_COMPONENT_FACTORY( libkommander_part, KommanderPartFactory )
+
+KommanderPart::KommanderPart( QWidget *parentWidget, const char * /*widgetName*/,
+ QObject *parent, const char *name, const QStringList & /*args*/ )
+ : KParts::ReadOnlyPart(parent, name)
+{
+ setInstance( KommanderPartFactory::instance() );
+ m_instance = 0L;
+ m_widget = new QWidget(parentWidget);
+ setWidget(m_widget);
+ m_layout = new QGridLayout(m_widget);
+}
+
+KommanderPart::~KommanderPart()
+{
+ delete m_instance;
+}
+
+KAboutData* KommanderPart::createAboutData()
+{
+ KAboutData * aboutData = new KAboutData("kommander_part", I18N_NOOP("Kommander Executor Part"),
+ KOMMANDER_VERSION, description, KAboutData::License_GPL,
+ "(c) 2008 Andras Mantia", I18N_NOOP("Part of the KDEWebDev module."), "http://www.kdewebdev.org");
+
+ aboutData->addAuthor("Andras Mantia", I18N_NOOP("Current maintainer"), "amantia@kdewebdev.org");
+ aboutData->addAuthor("Michal Rudolf", I18N_NOOP("Previous maintainer"), "mrudolf@kdewebdev.org");
+ aboutData->addAuthor("Marc Britton", I18N_NOOP("Original author"), "consume@optusnet.com.au");
+ return aboutData;
+}
+
+bool KommanderPart::openFile()
+{
+ delete m_instance;
+ m_instance = new Instance(0L);
+ m_instance->build(m_url);
+ QTimer::singleShot(0, this, SLOT(slotRun()));
+
+ emit setStatusBarText( m_url.prettyURL() );
+ return true;
+}
+
+void KommanderPart::slotRun()
+{
+ QWidget *w = m_instance->widget();
+ if (w)
+ {
+ w->reparent(m_widget, 0, QPoint(0,0));
+ m_layout->addWidget(w, 0, 0);
+ w->show(); //show, not execute, so it doesn't block the parent
+ }
+}
+
+#include "kommander_part.moc"
diff --git a/kommander/part/kommander_part.desktop b/kommander/part/kommander_part.desktop
new file mode 100644
index 00000000..38e47dbf
--- /dev/null
+++ b/kommander/part/kommander_part.desktop
@@ -0,0 +1,15 @@
+[Desktop Entry]
+Name=KommanderPart
+Name[ca]=Part del Kommander
+Name[de]=Kommander-Komponente
+Name[et]=Kommanderi komponent
+Name[nds]=Kommander-Komponent
+Name[nl]=Kommander-component
+Name[pl]=Moduł Kommandera
+Name[ru]=Компонент Kommander
+Name[sv]=Kommander-delprogram
+Name[zh_TW]=Kommander 部件
+MimeType=application/x-kommander;
+ServiceTypes=KParts/ReadOnlyPart
+X-KDE-Library=libkommander_part
+Type=Service
diff --git a/kommander/part/kommander_part.h b/kommander/part/kommander_part.h
new file mode 100644
index 00000000..fc9b876c
--- /dev/null
+++ b/kommander/part/kommander_part.h
@@ -0,0 +1,48 @@
+/***************************************************************************
+ begin : Wed Jan 30 2008
+ copyright : (C) 2008, Andras Mantia <amantia@kde.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef KOMMANDERPART_H
+#define KOMMANDERPART_H
+
+#include <kparts/part.h>
+#include <kparts/factory.h>
+
+class Instance;
+class QGridLayout;
+
+class KommanderPart : public KParts::ReadOnlyPart
+{
+ Q_OBJECT
+public:
+ KommanderPart(QWidget *parentWidget, const char *widgetName,
+ QObject *parent, const char *name, const QStringList &args);
+
+ virtual ~KommanderPart();
+
+ static KAboutData* createAboutData();
+
+protected:
+ virtual bool openFile();
+
+protected slots:
+ void slotRun();
+
+private:
+ Instance *m_instance;
+ QWidget *m_widget;
+ QGridLayout *m_layout;
+};
+
+
+#endif // KOMMANDERPART_H
diff --git a/kommander/plugin/Makefile.am b/kommander/plugin/Makefile.am
new file mode 100644
index 00000000..be1bb9f4
--- /dev/null
+++ b/kommander/plugin/Makefile.am
@@ -0,0 +1,17 @@
+lib_LTLIBRARIES = libkommanderplugin.la
+
+# set the include path for X, qt and KDE
+INCLUDES = -I$(top_srcdir)/kommander/widget $(all_includes)
+
+# the library search path.
+libkommanderplugin_la_LDFLAGS = $(KDE_RPATH) $(all_libraries) -no-undefined
+
+# the libraries to link against.
+libkommanderplugin_la_LIBADD = $(LIB_KDEUI) $(LIB_QT)
+
+libkommanderplugin_la_SOURCES = kommanderplugin.cpp specialinformation.cpp
+
+include_HEADERS = kommanderplugin.h specials.h
+
+# let automoc handle all of the meta source files (moc)
+METASOURCES = AUTO
diff --git a/kommander/plugin/kommanderplugin.cpp b/kommander/plugin/kommanderplugin.cpp
new file mode 100644
index 00000000..9be1c2d5
--- /dev/null
+++ b/kommander/plugin/kommanderplugin.cpp
@@ -0,0 +1,82 @@
+/***************************************************************************
+ kommanderplugin.cpp - An interface to Kommander widget plugins
+ -------------------
+ copyright : (C) 2003 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "kommanderplugin.h"
+#include "specialinformation.h"
+
+KommanderPlugin::KommanderPlugin()
+{
+}
+
+KommanderPlugin::~KommanderPlugin()
+{
+}
+
+void KommanderPlugin::addWidget( const QString &name, const QString &group, const QString &toolTip, QIconSet *iconSet, const QString &whatsThis, bool isContainer)
+{
+ m_widgets[name] = WidgetInfo( group, toolTip, iconSet, whatsThis, isContainer );
+}
+
+void KommanderPlugin::removeWidget( const QString &name )
+{
+ m_widgets.remove( name );
+}
+
+QStringList KommanderPlugin::widgets() const
+{
+ QStringList ws;
+ WidgetInfos::ConstIterator it;
+ for( it = m_widgets.begin() ; it != m_widgets.end() ; ++ it )
+ ws += it.key();
+ return ws;
+}
+
+QString KommanderPlugin::group( const QString &name ) const
+{
+ return m_widgets[name].group;
+}
+
+QString KommanderPlugin::toolTip( const QString &name ) const
+{
+ return m_widgets[name].toolTip;
+}
+
+QString KommanderPlugin::whatsThis( const QString &name ) const
+{
+ return m_widgets[name].whatsThis;
+}
+
+bool KommanderPlugin::isContainer( const QString &name ) const
+{
+ return m_widgets[name].isContainer;
+}
+
+QIconSet* KommanderPlugin::iconSet( const QString &name ) const
+{
+ return m_widgets[name].iconSet;
+}
+
+void KommanderPlugin::setDefaultGroup( int id )
+{
+ SpecialInformation::setDefaultGroup(id);
+}
+
+bool KommanderPlugin::registerFunction(int id, const QString& function, const QString description , int minArgs, int maxArgs)
+{
+ return SpecialInformation::insert(id, function, description, minArgs, maxArgs);
+}
+
+#include "kommanderplugin.moc"
diff --git a/kommander/plugin/kommanderplugin.h b/kommander/plugin/kommanderplugin.h
new file mode 100644
index 00000000..ecba3384
--- /dev/null
+++ b/kommander/plugin/kommanderplugin.h
@@ -0,0 +1,103 @@
+/****************************************************************************
+ ** kommanderplugin.h - KommanderPlugin class definition created from QWidgetPlugin
+ ** Copyright (C) 2001 Trolltech AS. All rights reserved.
+ ** Copyright (C) 2003 Marc Britton
+ **
+ ** This file is part of the widgets module of the Qt GUI Toolkit.
+ **
+ ** This file may be distributed under the terms of the Q Public License
+ ** as defined by Trolltech AS of Norway and appearing in the file
+ ** LICENSE.QPL included in the packaging of this file.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
+ ** licenses may use this file in accordance with the Qt Commercial License
+ ** Agreement provided with the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
+ ** information about Qt Commercial License Agreements.
+ ** See http://www.trolltech.com/qpl/ for QPL licensing information.
+ ** 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 _HAVE_KOMMANDERPLUGIN_H_
+#define _HAVE_KOMMANDERPLUGIN_H_
+
+#include <qobject.h>
+#include <qmap.h>
+#include <qstringlist.h>
+#include "kommander_export.h"
+
+class QWidget;
+class QIconSet;
+
+class KOMMANDER_EXPORT KommanderPlugin : public QObject
+{
+ Q_OBJECT
+ public:
+ KommanderPlugin();
+ ~KommanderPlugin();
+
+ virtual void addWidget( const QString &name, const QString &group, const QString &toolTip, QIconSet *iconSet, const QString &whatsThis = QString::null, bool isContainer = false);
+ virtual void removeWidget( const QString &name );
+ virtual QStringList widgets() const;
+
+ virtual QWidget *create( const QString &key, QWidget *parent = 0, const char *name = 0 ) = 0;
+ virtual QString group( const QString &key ) const;
+ virtual QString toolTip( const QString &key ) const;
+ virtual QString whatsThis( const QString &key ) const;
+ virtual bool isContainer( const QString &key ) const;
+ virtual QIconSet *iconSet( const QString &key ) const;
+
+ /**
+ * Sets the default group for functions. Must be called before registerFunction.
+ * @param group the groups ID
+ */
+ static void setDefaultGroup(int group);
+
+ /**
+ * Register a function of the plugin.
+ * @param id Kommander wide unique ID
+ * @param function function signature
+ * @param description description of what the function does
+ * @param minArgs minimum number of accepted arguments
+ * @param maxArgs maximum number of accepted arguments
+ * @return true if registration was successful
+ */
+ static bool registerFunction(int id, const QString& function, const QString description = QString::null,
+ int minArgs = -1, int maxArgs = -1);
+
+
+
+private:
+ struct WidgetInfo
+ {
+ WidgetInfo() { }
+ WidgetInfo( const QString &g, const QString &t, QIconSet *i, const QString &w = QString::null, bool c = false)
+ : group( g ), toolTip( t ), iconSet(i), whatsThis( w ), isContainer( c )
+ {}
+
+ QString group;
+ QString toolTip;
+ QIconSet *iconSet;
+ QString whatsThis;
+ bool isContainer;
+ };
+ typedef QMap<QString, WidgetInfo> WidgetInfos;
+ WidgetInfos m_widgets;
+};
+
+#define KOMMANDER_EXPORT_PLUGIN(plugin) extern "C" { KOMMANDER_EXPORT void *kommander_plugin() { return new plugin; } }
+
+#endif // _HAVE_KOMMANDERPLUGIN_H_
diff --git a/kommander/plugin/specialinformation.cpp b/kommander/plugin/specialinformation.cpp
new file mode 100644
index 00000000..5e86eb16
--- /dev/null
+++ b/kommander/plugin/specialinformation.cpp
@@ -0,0 +1,623 @@
+/***************************************************************************
+ specialinformation.cpp - internal commands information
+ -------------------
+ copyright : (C) 2004 by Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "specials.h"
+#include "specialinformation.h"
+
+#include <klocale.h>
+
+SpecialFunction::SpecialFunction(const QString& name, const QString& description,
+ int minArgs, int maxArgs)
+{
+ m_parserTypes = AllParsers;
+ int lbracket = name.find('(');
+ int rbracket = name.find(')');
+ m_function = (lbracket != -1) ? name.left(lbracket) : name;
+ m_description = description;
+ if (lbracket != -1 && rbracket != -1)
+ {
+ QString part = name.mid(lbracket+1, rbracket - lbracket - 1);
+ QStringList args = QStringList::split(",", part);
+ for (uint i=0; i<args.count(); i++)
+ {
+ m_types.append(args[i].stripWhiteSpace().section(' ', 0, 0));
+ m_args.append(args[i].stripWhiteSpace().section(' ', 1, 1));
+ }
+ }
+ m_minArgs = (minArgs == -1) ? m_types.count() : minArgs;
+ m_maxArgs = (maxArgs == -1) ? m_types.count() : maxArgs;
+}
+
+SpecialFunction::SpecialFunction(ParserType p, const QString& name, const QString& description,
+ int minArgs, int maxArgs)
+{
+ m_parserTypes = p;
+ int lbracket = name.find('(');
+ int rbracket = name.find(')');
+ m_function = (lbracket != -1) ? name.left(lbracket) : name;
+ m_description = description;
+ if (lbracket != -1 && rbracket != -1)
+ {
+ QString part = name.mid(lbracket+1, rbracket - lbracket - 1);
+ QStringList args = QStringList::split(",", part);
+ for (uint i=0; i<args.count(); i++)
+ {
+ m_types.append(args[i].stripWhiteSpace().section(' ', 0, 0));
+ m_args.append(args[i].stripWhiteSpace().section(' ', 1, 1));
+ }
+ }
+ m_minArgs = (minArgs == -1) ? m_types.count() : minArgs;
+ m_maxArgs = (maxArgs == -1) ? m_types.count() : maxArgs;
+}
+
+
+QString SpecialFunction::prototype(uint prototypeFlags) const
+{
+ if (!m_types.count())
+ return m_function;
+ int start = (prototypeFlags & SkipFirstArgument) ? 1 : 0;
+ QStringList params;
+ for (uint i=start; i<m_types.count(); i++)
+ if (prototypeFlags & ShowArgumentNames)
+ params.append(QString("%1 %2").arg(m_types[i]).arg(m_args[i]));
+ else
+ params.append(m_types[i]);
+ if (!params.count())
+ return m_function;
+ else if (prototypeFlags & NoSpaces)
+ return QString("%1(%2)").arg(m_function).arg(params.join(","));
+ else
+ return QString("%1(%2)").arg(m_function).arg(params.join(", "));
+}
+
+QString SpecialFunction::argumentName(uint i) const
+{
+ if (i < m_args.count())
+ return m_args[i];
+ return QString();
+}
+
+QString SpecialFunction::argumentType(uint i) const
+{
+ if (i < m_types.count())
+ return m_types[i];
+ return QString();
+}
+
+int SpecialFunction::argumentCount() const
+{
+ return m_types.count();
+}
+
+
+
+
+int SpecialInformation::function(int group, const QString& fname)
+{
+ QString f = fname.lower();
+ if (m_functions.contains(group) && m_functions[group].contains(f))
+ return m_functions[group][f];
+ else if (m_aliases.contains(group) && m_aliases[group].contains(f))
+ return m_aliases[group][f];
+ return -1;
+}
+
+SpecialFunction SpecialInformation::functionObject(const QString& gname, const QString& fname)
+{
+ int gid = group(gname);
+ return m_specials[gid][function(gid, fname)];
+}
+
+int SpecialInformation::group(const QString& gname)
+{
+ if (m_groups.contains(gname))
+ return m_groups[gname];
+ return -1;
+}
+
+bool SpecialInformation::isValid(int gname, int fname)
+{
+ return m_specials.contains(gname) && m_specials[gname].contains(fname);
+}
+
+bool SpecialInformation::isValid(const QString& gname, const QString& fname)
+{
+ return function(group(gname), fname) != -1;
+}
+
+bool SpecialInformation::isValid(int gname, int fname, SpecialFunction::ParserType p)
+{
+ return m_specials.contains(gname) && m_specials[gname].contains(fname)
+ && m_specials[gname][fname].isSupported(p);
+}
+
+bool SpecialInformation::isValid(const QString& gname, const QString& fname,
+ SpecialFunction::ParserType p)
+{
+ int g = group(gname);
+ int f = function(g, fname);
+ return f != -1 && m_specials[g][f].isSupported(p);
+}
+
+int SpecialInformation::minArg(int gname, int fname)
+{
+ if (isValid(gname, fname))
+ return m_specials[gname][fname].minArg();
+ return -1;
+}
+
+int SpecialInformation::maxArg(int gname, int fname)
+{
+ if (isValid(gname, fname))
+ return m_specials[gname][fname].maxArg();
+ return -1;
+}
+
+int SpecialInformation::argCount(int gname, int fname)
+{
+ if (isValid(gname, fname))
+ return m_specials[gname][fname].argumentCount();
+ return -1;
+}
+
+bool SpecialInformation::isValidArg(int gname, int fname, int args)
+{
+ if (isValid(gname, fname))
+ return m_specials[gname][fname].isValidArg(args);
+ return -1;
+}
+
+QString SpecialInformation::description(int gname, int fname)
+{
+ if (isValid(gname, fname))
+ return m_specials[gname][fname].description();
+ return QString();
+}
+
+QString SpecialInformation::prototype(int gname, int fname, uint flags)
+{
+ if (isValid(gname, fname))
+ return m_specials[gname][fname].prototype(flags);
+ return QString();
+}
+
+bool SpecialInformation::insert(int id, const QString& function, const QString description,
+ int minArgs, int maxArgs, SpecialFunction::ParserType pType)
+{
+ if (isValid(m_defaultGroup, id)) /* function already defined */
+ return false;
+ if (m_functions[m_defaultGroup].contains(function.lower()))
+ return false; /* function name already in use */
+ if (m_aliases[m_defaultGroup].contains(function.lower()))
+ return false; /* function name already in use */
+ SpecialFunction sf(pType, function, description, minArgs, maxArgs);
+ m_specials[m_defaultGroup][id] = sf;
+ m_functions[m_defaultGroup][sf.name().lower()] = id;
+ return true;
+}
+
+bool SpecialInformation::insertMacro(int id, const QString& function, const QString description,
+ int minArgs, int maxArgs)
+{
+ return insert(id, function, description, minArgs, maxArgs, SpecialFunction::MacroParser);
+}
+
+bool SpecialInformation::insertInternal(int id, const QString& function, const QString description,
+ int minArgs, int maxArgs)
+{
+ return insert(id, function, description, minArgs, maxArgs, SpecialFunction::InternalParser);
+}
+
+bool SpecialInformation::insertAlias(int id, const QString& alias)
+{
+ if (!isValid(m_defaultGroup, id)) /* function doesn't exists */
+ return false;
+ if (m_functions[m_defaultGroup].contains(alias.lower()))
+ return false;
+ if (m_aliases[m_defaultGroup].contains(alias.lower()))
+ return false;
+ m_aliases[m_defaultGroup][alias] = id;
+ return true;
+}
+
+void SpecialInformation::setDefaultGroup(int gname)
+{
+ m_defaultGroup = gname;
+}
+
+void SpecialInformation::insertGroup(int id, const QString& name, const QString& parserName)
+{
+ if (group(name) == -1) {
+ m_groups[name] = id;
+ m_parserGroups[name] = parserName;
+ m_defaultGroup = id;
+ }
+}
+
+QString SpecialInformation::parserGroupName(const QString& name)
+{
+ if (m_parserGroups.contains(name))
+ return m_parserGroups[name];
+ else
+ return name;
+}
+
+QStringList SpecialInformation::groups()
+{
+ return m_groups.keys();
+}
+
+QStringList SpecialInformation::functions(const QString& g)
+{
+ int gid = group(g);
+ if (gid == -1)
+ return QStringList();
+ else
+ {
+ QStringList list;
+ const QMap<int, SpecialFunction> fgroup = m_specials[gid];
+ for(QMap<int, SpecialFunction>::ConstIterator it = fgroup.begin(); it != fgroup.end(); ++it)
+ list.append(it.data().name());
+ return list;
+ }
+}
+
+bool SpecialFunction::isSupported(ParserType p) const
+{
+ return (m_parserTypes & p);
+}
+
+void SpecialInformation::registerSpecials()
+{
+ insertGroup(Group::DCOP, "DCOP", "");
+ insert(DCOP::addUniqueItem, "addUniqueItem(QString widget, QString item)",
+ i18n("Inserts the item if it will not create a duplicate."), 2);
+ insert(DCOP::associatedText, "associatedText(QString widget)",
+ i18n("Returns scripts associated with widget. This is an advanced feature that would not be commonly used."), 1);
+ insert(DCOP::cancel, "cancel(QString widget)", i18n("Stops execution of the script associated with the widget."), 1);
+ insert(DCOP::cellText, "cellText(QString widget, int row, int column)",
+ i18n("Returns text of a cell in a table."), 3);
+ insert(DCOP::checked, "checked(QString widget)",
+ i18n("Returns 1 for checked boxes, 0 for unchecked."), 1);
+ insert(DCOP::children, "children(QString widget, bool recursive)",
+ i18n("Returns the list of child widgets contained in the parent widget. Set the <i>recursive</i> parameter to <i>true</i> to include widgets contained by child widgets."), 2);
+ insert(DCOP::clear, "clear(QString widget)",
+ i18n("Removes all content from the widget."), 1);
+ insertAlias(DCOP::clear, "clearList");
+ insertInternal(DCOP::columnCount, "columnCount(QString widget)",
+ i18n("Get the column count"), 1);
+ insert(DCOP::count, "count(QString widget)",
+ i18n("Returns number of items in a widget such as combobox or listbox."), 1);
+ insert(DCOP::currentColumn, "currentColumn(QString widget)",
+ i18n("Returns index of current column."), 1);
+ insert(DCOP::currentItem, "currentItem(QString widget)",
+ i18n("Returns index of current item."), 1);
+ insert(DCOP::currentRow, "currentRow(QString widget)",
+ i18n("Returns index of current row."), 1);
+ insert(DCOP::execute, "execute(QString widget)",
+ i18n("Executes the script associated with the widget. With the new parser the execute method can take one or more arguments."), 1, 9);
+ insert(DCOP::findItem, "findItem(QString widget, QString item, int column, bool CaseSensitive, bool ExactMatch)",
+ i18n("Returns the index of an item with the given text. Defaults to case sensitive. Matching can be an exact match or match if it contains the string. Only the first argument is requred. If no column is given it will search the first by default."), 2, 5);
+ insert(DCOP::insertColumn, "insertColumn(QString widget, int column, int count)",
+ i18n("Inserts new column (or <i>count</i> columns) at <i>column</i> position."), 2);
+ insert(DCOP::insertItem, "insertItem(QString widget, QString item, int index)",
+ i18n("Inserts item at <i>index</i> position."), 3);
+ insertAlias(DCOP::insertItem, "addListItem");
+ insert(DCOP::insertItems, "insertItems(QString widget, QStringList items, int index)",
+ i18n("Inserts multiple items (EOL-separated) at <i>index</i> position."), 3);
+ insertAlias(DCOP::insertItems, "addListItems");
+ insert(DCOP::insertRow, "insertRow(QString widget, int row, int count)",
+ i18n("Inserts new row (or <i>count</i> rows) at <i>row</i> position."), 2);
+ insert(DCOP::item, "item(QString widget, int index)",
+ i18n("Returns the text of the item at the given index."), 2);
+ insert(DCOP::itemDepth, "itemDepth(QString widget, int index)",
+ i18n("Returns the depth of the current item in the tree. Root items have depth 0."), 2);
+ insert(DCOP::itemPath, "itemPath(QString widget, int index)",
+ i18n("Returns the slash-separated path to the given item in the tree."), 2);
+ insert(DCOP::removeColumn, "removeColumn(QString widget, int column, int count)",
+ i18n("Removes the column (or <i>count</i> consecutive columns) with the given index."), 2, 3);
+ insert(DCOP::removeItem, "removeItem(QString widget, int index)",
+ i18n("Removes the item with the given index."), 2);
+ insertAlias(DCOP::removeItem, "removeListItem");
+ insert(DCOP::removeRow, "removeRow(QString widget, int row, int count)",
+ i18n("Removes the row (or <i>count</i> consecutive rows) with the given index."), 3);
+ insertAlias(DCOP::removeItem, "removeListItem");
+ insert(DCOP::selection, "selection(QString widget)",
+ i18n("Returns selected text or text of current item.\nIn case of Table widgets, returns the selection coordinates, separated by commas in TopRow,LeftColumn,BottomRow,RightColumn form. "), 1);
+ insert(DCOP::setAssociatedText, "setAssociatedText(QString widget, QString text)",
+ i18n("Sets scripts associated with widget. This is an advanced feature that would not be commonly used."), 2);
+ insert(DCOP::setEnabled, "setEnabled(QString widget, bool enabled)",
+ i18n("Enables or disables widget."), 2);
+ insertAlias(DCOP::setEnabled, "enableWidget");
+ insert(DCOP::setCellText, "setCellText(QString widget, int row, int col, QString text)",
+ i18n("Sets text of a cell in a table."), 4);
+ insert(DCOP::setCellWidget, "setCellWidget(QString widget, int row, int col, QString cellWidget)",
+ i18n("Inserts a widget into a cell of a table."), 4);
+ insert(DCOP::cellWidget, "cellWidget(QString widget, int row, int col)",
+ i18n("Returns the name of a widget inserted into a cell, or an empty string if the cell contains no widget or an unknown widget type."), 3);
+ insert(DCOP::setChecked, "setChecked(QString widget, bool checked)",
+ i18n("Sets/unsets checkbox."), 2);
+ insert(DCOP::setColumnCaption, "setColumnCaption(QString widget, int column, QString text)",
+ i18n("Sets caption of the column <i>column</i>."), 3);
+ insert(DCOP::setCurrentItem, "setCurrentItem(QString widget, int index)",
+ i18n("Selects the item at the specified index. Indexes are zero based."), 2);
+ insertAlias(DCOP::setCurrentItem, "setCurrentTab");
+ insert(DCOP::insertTab, "insertTab(QString widget, QString label,int index)",
+ i18n("Inserts a tab to the tabwidget with the specified label at the given index. Indexes are zero based."), 3); //enable for 3.5.8
+ insert(DCOP::setMaximum, "setMaximum(QString widget, int value)",
+ i18n("Sets maximum numeric value"), 2);
+ insert(DCOP::setPixmap, "setPixmap(QString widget, QString iconName, int index)",
+ i18n("Sets pixmap at the given index to the specified icon. Use <i>index = -1</i> to set the pixmap for all items."), 3);
+ insert(DCOP::setRowCaption, "setRowCaption(QString widget, int row, QString text)",
+ i18n("Sets caption of the row <i>row</i>."), 3);
+ insert(DCOP::setSelection, "setSelection(QString widget, QString text)",
+ i18n("Selects given text or select item containing given text."), 2);
+ insertAlias(DCOP::setSelection, "setCurrentListItem");
+ insert(DCOP::setText, "setText(QString widget, QString text)",
+ i18n("Sets widget's content."), 2);
+ insertAlias(DCOP::setText, "changeWidgetText");
+ insert(DCOP::setVisible, "setVisible(QString widget, bool visible)",
+ i18n("Shows/hides widget."), 2);
+ insert(DCOP::text, "text(QString widget)", i18n("Returns content of widget."), 1);
+ insert(DCOP::type, "type(QString widget)",
+ i18n("Returns type(class) of widget."), 1);
+ insert(DCOP::setEditable, "setEditable(QString widget, bool editable)",
+ i18n("Makes the widget editable or read only, depending on the editable argument."), 2);
+ insertInternal(DCOP::geometry, "geometry(QString widget)",
+ i18n("Return the widget's geometry as <i>x y w h</i>. This is useful for positioning a created widget."), 1);
+ insertInternal(DCOP::hasFocus, "hasFocus(QString widget)",
+ i18n("Returns true if the widget has focus."), 1);
+ insertInternal(DCOP::getBackgroundColor, "getBackgroundColor(QString widget)",
+ i18n("Gets the widget's background color."), 1);
+ insertInternal(DCOP::setBackgroundColor, "setBackgroundColor(QString widget, QString Color)",
+ i18n("Sets the widget's background color. Colors can be by name, like blue, or in hex like #0000ff for blue. Use the color dialog or a color picker if unsure."), 2);
+ insertInternal(DCOP::isModified, "isModified(QString widget)",
+ i18n("See if widget has been modified."), 1);
+
+ insertGroup(Group::Slots, i18n("Slots"), "");
+
+ insertGroup(Group::Kommander, "Kommander", "");
+ insertMacro(Kommander::widgetText, "widgetText",
+ i18n("Returns current widget's content. This was required inside widget A to return widget A content when requested by widget B. The new method is to use @A.text inside B instead of just @A if you just want the unaltered text."), 0);
+ insertMacro(Kommander::selectedWidgetText, "selectedWidgetText",
+ i18n("Returns selected text or text of current item. This is deprecated for <i>@mywidget.selected</i>."), 0);
+ insertMacro(Kommander::null, "null",
+ i18n("Does nothing. This is useful if you request a CheckBox or RadioButton to return a value where a state, typically the unchecked state, has no value. The @null prevents an error indicating it is empty."), 0);
+ insert(Kommander::pid, "pid",
+ i18n("Returns the pid (process ID) of the current process."), 0);
+ insert(Kommander::dcopid, "dcopid",
+ i18n("Returns DCOP identifier of current process. This is shorthand for <i>kmdr-executor-@pid</i>."),
+ 0);
+ insert(Kommander::parentPid, "parentPid",
+ i18n("Returns the pid of the parent Kommander window."), 0);
+ insert(Kommander::debug, "debug(QString text)",
+ i18n("Writes <i>text</i> on stderr."), 1);
+ insert(Kommander::echo, "echo(QString text)",
+ i18n("Writes <i>text</i> on standard output."), 1);
+ insertMacro(Kommander::execBegin, "execBegin(QString shell)",
+ i18n("Executes a script block. Bash is used if no shell is given. It is primarily for use in non-button widgets where script actions are not expected. Full path is not required for the shell which may be useful for portability. <p><i>If this is used inside a button it allows alternate script languages to be used and will return a value to the main script, which may be unexpected.</i>"), 0);
+ insert(Kommander::env, "env(QString variable)",
+ i18n("Returns value of an environment (shell) variable. Do not use <i>$</i> in the name. For example, <i>@env(PATH)</i>."), 1);
+ insert(Kommander::exec, "exec(QString command)",
+ i18n("Executes an external shell command."), 1);
+ insertInternal(Kommander::execBackground, "execBackground(QString command)",
+ i18n("Executes an external shell command."), 1);
+ insertMacro(Kommander::expr, "expr(QString expression)",
+ i18n("Parses an expression and returns computed value."), 1);
+ insert(Kommander::forEachBlock, "forEach(QString variable, QString items)",
+ i18n("Executes loop: values from <i>items</i> list (passed as EOL-separated string) are assigned to the variable. <br><b>Old</b><br> <i>@forEach(i,A\\nB\\nC\\n)<br> @# @i=A<br>@end</i><br><b>New</b><br><i>foreach i in MyArray do<br> //i = key, MyArray[i] = val<br>end "), 2);
+ insert(Kommander::forBlock, "for(QString variable, int start, int end, int step)",
+ i18n("Executes loop: variable is set to <i>start</i> and is increased by <i>step</i> each time loop is executed. Execution stops when variable becomes larger then <i>end</i>. <br><b>Old</b><br><i>@for(i,1,10,1)<br> @# @i=1<br>@endif</i><br><b>New</b><br><i>for i=0 to 20 step 5 do<br> debug(i)<br>end</i>."), 3);
+ insertMacro(Kommander::global, "global(QString variable)",
+ i18n("Returns the value of a global variable."), 1);
+ insert(Kommander::i18n, "i18n(QString variable)",
+ i18n("Translates the string into the current language. Texts in GUI would be automatically extracted for translation."), 1);
+ insert(Kommander::ifBlock, "if(QString expression)",
+ i18n("Executes block if expression is true (non-zero number or non-empty string.) <p><b>Old</b>Close with <b>@endif</b></p><p><b>New</b><br>if val == true then<br>// do op<br>elseif cond<br>// second chance<br>else<br>// cond failed<br>endif</p>"), 1);
+ insert(Kommander::dialog, "dialog(QString file, QString args)",
+ i18n("Executes another Kommander dialog. Current dialog directory is used if no path is given. Arguments may be given as named arguments which will become global variables in the new dialog. For instance: <i>var=val</i>"), 1);
+ insert(Kommander::readSetting, "readSetting(QString key, QString default)",
+ i18n("Reads setting from configration file for this dialog."), 2);
+ insert(Kommander::setGlobal, "setGlobal(QString variable, QString value)",
+ i18n("Sets the value of a global variable. Global variables exist for the life of the Kommander window."), 2);
+ insert(Kommander::writeSetting, "writeSetting(QString key, QString value)",
+ i18n("Stores setting in configuration file for this dialog."), 2);
+ insertMacro(Kommander::switchBlock, "switch(QString expresion)",
+ i18n("Begin of <b>switch</b> block. Following <b>case</b> values are compared to <i>expression</i>.<p>@switch()<br>@case()<br>@end"), 1);
+ insert(Kommander::dcop, "dcop(QString id, QString interface, QString function, QString args)",
+ i18n("Executes an external DCOP call."), 3, 9);
+ insertMacro(Kommander::comment, "#",
+ i18n("Adds a comment to EOL that Kommander will not parse"), 0);
+ insertInternal(Kommander::createWidget, "createWidget(QString widgetName, QString widgetType, QString parent)",
+ i18n("Creates a new widget with the specified type and as the child of parent."), 3);
+ insertInternal(Kommander::widgetExists, "widgetExists(QString widgetName)",
+ i18n("Returns true if there is a widget with the passed name, false otherwise."), 1);
+ insertInternal(Kommander::connect, "connect(QString sender, QString signal, QString receiver, QString slot)",
+ i18n("Connects the signal of sender with the slot of the receiver"), 4);
+ insertInternal(Kommander::disconnect, "disconnect(QString sender, QString signal, QString receiver, QString slot)",
+ i18n("Disconnects the signal of sender from the slot of the receiver"), 4);
+/* insertInternal(Kommander::switchInternal, "switch(QString Variable)",
+ i18n("Can use can use <br>switch var<br>case 1<br> //code<br>else<br> //code<br>end<p>also can use the form of <br>switch var {<br>case 1; //code<br>else; code<br>}<p> semicolons are optional in place of returns. Currently switch does not parse value from arrays.") );
+*/
+ insertInternal(Kommander::exit, "exit",
+ i18n("Exits script execution and returns"), 0);
+ insertInternal(Kommander::Break, "break",
+ i18n("Exits the current block of a while, for or foreach loop"), 0);
+ insertInternal(Kommander::Continue, "continue",
+ i18n("Exit a step and return to the beginning of a loop"), 0);
+ insertInternal(Kommander::Return, "return(QString value)",
+ i18n("Return from a script, optionaly with a value from the script to the caller"), 0, 1);
+
+ insertGroup(Group::Array, "Array", "array");
+ insert(Array::values, "values(QString array)",
+ i18n("Returns an EOL-separated list of all values in the array."), 1);
+ insert(Array::keys,"keys(QString array)",
+ i18n("Returns an EOL-separated list of all keys in the array."), 1);
+ insert(Array::clear,"clear(QString array)",
+ i18n("Removes all elements from the array."), 1);
+ insert(Array::count,"count(QString array)",
+ i18n("Returns the number of elements in the array."), 1);
+ insertMacro(Array::value, "value(QString array, QString key)",
+ i18n("Returns the value associated with the given key."), 2);
+ insert(Array::remove,"remove(QString array, QString key)",
+ i18n("Removes element with the given key from the array."), 2);
+ insertMacro(Array::setValue,"setValue(QString array, QString key, QString value)",
+ i18n("Adds element with the given key and value to the array"), 3);
+ insert(Array::fromString, "fromString(QString array, QString string)",
+ i18n("Adds all elements in the string to the array. "
+ "String should have <i>key\\tvalue\\n</i> format."), 2);
+ insert(Array::toString, "toString(QString array)",
+ i18n("Returns all elements in the array in <pre>key\\tvalue\\n</pre> format."), 1);
+ insertInternal(Array::indexedFromString, "indexedFromString(QString array, QString string, QString separator)",
+ i18n( "Create an integer indexed array - starting from 0 - from a string. Use the separator character to split the string. The separator's default value is '\\t'."), 2, 3);
+ insertInternal(Array::indexedToString, "indexedToString(QString array, QString separator)",
+ i18n( "Create a string from an integer indexed array. Concatenate the elements with the separator character. The separator's default value is '\\t'."), 1, 2);
+ insertInternal(Array::indexedRemoveElements, "indexedRemoveElements(QString array, int keyStart, int keyNum)",
+ i18n( "Remove keyNum elements starting with keyStart from an indexed array and reindex the array. If keyNum is not specified, remove only the keyStart element."), 2, 3);
+ insertInternal(Array::indexedInsertElements, "indexedInsertElements(QString array, int key, QString string, QString separator)",
+ i18n( "Insert the elements from string starting at key and reindex the array. Use the separator to separate the elements from the string. The separator's default value is '\\t'."), 3, 4);
+ insertInternal(Array::flipCopy, "flipCopy(QString Array, QString Copy)",
+ i18n("Create a flipped copy of the array where the keys and values switch places. NOTE: If the values are not unique they will be overwritten as keys! Set the name of the array to copy to and go. Useful with combos and lists were you have an index, a key and a value for data purposes."), 2, 2);
+
+ insertGroup(Group::Matrix, "Matrix", "matrix");
+ insertInternal(Matrix::fromString, "fromString(QString matrix, QString String, bool With-Row-Keys, bool With-Col-Keys)",
+ i18n("Create a 2D array with zero based integer keys. Rows seperated with returns or \\n and columns with tabs or \\t. You can then read and alter values with \"name[0][1]\".<br><b>NOTE: Watch keys!</b> The row and column keys when set to true will read respectively the first row and first column as headings. If for instance you set one where there is no column or row heading to read it will read data, and if the data is not unique you will have missing columns or rows as well as addressing not working."), 2, 4);
+ insertInternal(Matrix::toString, "toString(QString matrix, bool RowHeadings, bool ColHeadings)",
+ i18n("Convert 2D array to string, optionaly with row and column headings. If written without values set it will default to no headings."), 1, 3);
+ insertInternal(Matrix::rows, "rows(QString matrix)",
+ i18n("Return the number of rows in the matrix"), 1);
+ insertInternal(Matrix::columns, "columns(QString matrix)",
+ i18n("Return the number of columns in the matrix"), 1);
+ insertInternal(Matrix::clear, "clear(QString matrix)",
+ i18n("Clear the entire matrix"), 1);
+ insertInternal(Matrix::rowToArray, "rowToArray(QString matrix, QString Row, QString Array, bool Clear-First, bool Indexed)",
+ i18n("Convert row to array. Useful break out rows of data to work with. If you want to avoid spurious data Clear-First will wipe the array before filling it. If you choose indexed it will use a zero based index. Otherwise it will use the column keys."), 3, 5);
+ insertInternal(Matrix::columnToArray, "columnToArray(QString matrix, QString Column, QString Array)",
+ i18n("Copy a column of a Matrix to an array and optionally clear array first to avoid spurious data in loops"), 3);
+ insertInternal(Matrix::columnToIndexedArray, "columnToIndexedArray(QString matrix, QString Column, QString Array)",
+ i18n("Copy a column of a Matrix to an indexed array"), 3);
+ insertInternal(Matrix::rowKeys, "rowKeys(QString Matrix, QString Seperator)",
+ i18n("Return the row keys from the matrix. Separator defaults to [tab] \"\\t\" if left empty"), 1, 2);
+ insertInternal(Matrix::columnKeys, "columnKeys(QString Matrix, QString Seperator)",
+ i18n("Return the column keys from the matrix. Separator defaults to [tab] \"\\t\" if left empty"), 1, 2);
+ insertInternal(Matrix::addRow, "addRow(QString Matrix, QString RowKey, QString data)",
+ i18n("Add a row to the matrix. Specifiy the row key and format the data as column key [tab] column value on each line using key\\tval\\nkey\\tval format"), 3);
+ insertInternal(Matrix::removeRow, "removeRow(QString Matrix, QString RowKey)",
+ i18n("Remove a row from the matrix by key name. Returns true if key is found."), 2);
+ insertInternal(Matrix::removeColumn, "removeColumn(QString Matrix, QString ColKey)",
+ i18n("Remove a column from the matrix by key name. Returns true if key is found."), 2);
+ insertInternal(Matrix::findRow, "findRow(QString Matrix, QString Col-Key, QString Col-Value, int Iteration)",
+ i18n("Find the row key that matches a column value. Use this for unique key searches. Iteration may be omitted and the default is to return the first instance. In a loop it will return sequential finds until there are no more, in which case it returns null."), 3, 4);
+
+ insertGroup(Group::String, "String", "str");
+ insert(String::length, "length(QString string)",
+ i18n("Returns number of chars in the string."), 1);
+ insert(String::contains, "contains(QString string, QString substring)",
+ i18n("Checks if the the string contains the given substring."), 2);
+ insert(String::find, "find(QString string, QString sought, int index)",
+ i18n("Returns the position of a substring in the string, or -1 if it is not found."), 2);
+ insert(String::findRev, "findRev(QString string, QString sought, int index)",
+ i18n("Returns the position of a substring in the string, or -1 if it is not found. String is searched backwards"), 2);
+ insertInternal(String::count, "count(QString String, QString substring)",
+ i18n("Returns the count of a given substring in the given string."), 2);
+ insert(String::left, "left(QString string, int n)",
+ i18n("Returns the first <i>n</i> chars of the string."), 2);
+ insert(String::right, "right(QString string, int n)",
+ i18n("Returns the last <i>n</i> chars of the string."), 2);
+ insert(String::mid, "mid(QString string, int start, int n)",
+ i18n("Returns <i>n</i> chars of the string, starting from <i>start</i>."), 3);
+ insert(String::remove, "remove(QString string, QString substring)",
+ i18n("Removes all occurrences of given substring."), 2);
+ insert(String::replace, "replace(QString string, QString substring, QString replacement)",
+ i18n("Replaces all occurrences of the given substring with the given replacement."), 3);
+ insert(String::upper, "upper(QString string)",
+ i18n("Converts the string to uppercase."), 1);
+ insert(String::lower, "lower(QString string)",
+ i18n("Converts the string to lowercase."), 1);
+ insert(String::compare, "compare(QString string1, QString string2)",
+ i18n("Compares two strings. Returns 0 if they are equal, "
+ "-1 if the first one is lower, 1 if the first one is higher"), 2);
+ insert(String::isEmpty, "isEmpty(QString string)",
+ i18n("Checks if the string is empty."), 1);
+ insert(String::isNumber, "isNumber(QString string)",
+ i18n("Checks if the string is a valid number."), 1);
+ insert(String::section, "section(QString string, QString separator, int index)",
+ i18n("Returns given section of a string."), 1);
+ insert(String::args, "args(QString string, QString arg1, QString arg2, QString arg3)",
+ i18n("Returns the given string with %1, %2, %3 replaced with <i>arg1</i>, <i>arg2</i>, <i>arg3</i> accordingly."), 2);
+ insert(String::round, "round(QString Number, int Digits)",
+ i18n("Round a floating point number by x digits."), 2);
+ insertInternal(String::sort, "sort(QString String, QString Separator)",
+ i18n("Sort a string list. Only first paramter is required. Default separator is a newline."), 1, 2);
+ insertInternal(String::trim, "trim(QString String)",
+ i18n("Strips white space from beginning and end of string."), 1);
+ insertInternal(String::padLeft, "padLeft(QString String, int Length, QString Pad)",
+ i18n("Pads the string to the total length indicated. if no pad character is given spaces will be used. Try this with 0 on integer sequences and read them with str_toint."), 1, 2);
+ insertInternal(String::padRight, "padRight(QString String, int Length, QString Pad)",
+ i18n("Pads the string to the total length indicated. if no pad character is given spaces will be used."), 1, 2);
+
+ insertInternal(String::toInt, "toint(QString string, QString default)",
+ i18n("Convert a string to an integer. If not possible use the default value"), 1, 2);
+ insertInternal(String::toDouble, "todouble(QString string, QString default)",
+ i18n("Convert a string to a double precision floating point value. If not possible use the default value"), 1, 2);
+
+ insertGroup(Group::File, "File", "file");
+ insert(File::read, "read(QString file)",
+ i18n("Returns content of given file."), 1);
+ insert(File::write, "write(QString file, QString string)",
+ i18n("Writes given string to a file."), 2);
+ insert(File::append, "append(QString file, QString string)",
+ i18n("Appends given string to the end of a file."), 2);
+ insert(File::exists, "exists(QString file)",
+ i18n("Checks to see if file exists."), 1);
+
+ insertGroup(Group::Input, "Input", "input");
+ insert(Input::color, "color(QString defaultColor)", i18n("Shows color dialog. Returns color in #RRGGBB format. Defaults to the parameter, if specified."), 0, 1);
+ insert(Input::text, "text(QString caption, QString label, QString default)",
+ i18n("Shows text selection dialog. Returns entered text."), 2);
+ insert(Input::password, "password(QString caption, QString password)",
+ i18n("Shows a dialog asking user for password and returns it."), 1);
+ insert(Input::value, "value(QString caption, QString label, int value, int min, int max, int step)",
+ i18n("Shows value selection dialog. Returns entered value."), 5);
+ insert(Input::valueDouble, "double(QString caption, QString label, double value, double min, double max, double step)",
+ i18n("Shows float value selection dialog. Returns entered value."), 6);
+ insert(Input::openfile, "openfile(QString startdir, QString filter, QString caption)",
+ i18n("Shows existing file selection dialog. Returns selected file."), 0);
+ insert(Input::savefile, "savefile(QString startdir, QString filter, QString caption)",
+ i18n("Shows save file selection dialog. Returns selected file."), 0);
+ insert(Input::directory, "directory(QString startdir, QString filter, QString caption)",
+ i18n("Shows directory selection dialog. Returns selected directory."), 0);
+ insert(Input::openfiles, "openfiles(QString startdir, QString filter, QString caption)",
+ i18n("Shows multiple files selection dialog. Returns EOL-separated list of selected files."), 0);
+
+ insertGroup(Group::Message, "Message", "message");
+ insert(Message::info, "info(QString text, QString caption)",
+ i18n("Shows an information dialog. Returns true when clicked so you can check for user response."), 1);
+ insert(Message::error, "error(QString text, QString caption)",
+ i18n("Shows an error dialog. Returns true when clicked so you can check for user response."), 1);
+ insert(Message::warning, "warning(QString text, QString caption, QString button1, QString button2, QString button3)",
+ i18n("Shows a warning dialog with up to three buttons. Returns number of selected button."), 1);
+ insert(Message::question, "question(QString text, QString caption, QString button1, QString button2, QString button3)",
+ i18n("Shows a question dialog with up to three buttons. Returns number of selected button."), 1);
+
+}
+
+QMap<int, QMap<int, SpecialFunction> > SpecialInformation::m_specials;
+QMap<QString, int> SpecialInformation::m_groups;
+QMap<QString, QString> SpecialInformation::m_parserGroups;
+QMap<int, QMap<QString, int> > SpecialInformation::m_functions;
+QMap<int, QMap<QString, int> > SpecialInformation::m_aliases;
+int SpecialInformation::m_defaultGroup;
+
diff --git a/kommander/plugin/specialinformation.h b/kommander/plugin/specialinformation.h
new file mode 100644
index 00000000..20b6ea04
--- /dev/null
+++ b/kommander/plugin/specialinformation.h
@@ -0,0 +1,119 @@
+/***************************************************************************
+ specialinformation.h - internal commands information
+ -------------------
+ copyright : (C) 2004 by Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+#ifndef _HAVE_SPECIALINFORMATION_H_
+#define _HAVE_SPECIALINFORMATION_H_
+
+/* QT INCLUDES */
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qmap.h>
+#include <qpair.h>
+
+class SpecialFunction
+{
+public:
+
+ /* flags for getting function prototype:
+ SkipFirstArgument - ignore first argument (useful for Kommander functions
+ prefixed by widget name
+ ShowArgumentNames - show parameter names, not only types
+ */
+ enum PrototypeFlags {SkipFirstArgument = 1, ShowArgumentNames = 2, NoSpaces = 4};
+ /* Flags describing which parser supports the function */
+ enum ParserType {MacroParser = 1, InternalParser = 2, AllParsers = 3};
+ SpecialFunction(const QString& function, const QString& description
+ = QString::null, int minArgs = -1, int maxArgs = -1);
+ SpecialFunction(ParserType p, const QString& function, const QString& description
+ = QString::null, int minArgs = -1, int maxArgs = -1);
+ SpecialFunction() {m_minArgs = m_maxArgs = 0;}
+ /* minimum number of arguments */
+ int minArg() const {return m_minArgs;}
+ /* maximum number of arguments */
+ int maxArg() const {return m_maxArgs;}
+ /* checks number of arguments */
+ bool isValidArg(int args) const {return args >= minArg() && args <= maxArg();}
+ /* function description */
+ QString description() const {return m_description;}
+ /* function name */
+ QString name() const {return m_function;}
+ /* function prototype: with parameter types and optional names */
+ QString prototype(uint prototypeFlags = 0) const;
+ /* i-th parameter name */
+ QString argumentName(uint i) const;
+ /* i-th parameter type */
+ QString argumentType(uint i) const;
+ /* number of named arguments */
+ int argumentCount() const;
+ /* check whether given parser supports the function */
+ bool isSupported(ParserType p) const;
+protected:
+ QString m_function;
+ QString m_description;
+ int m_minArgs, m_maxArgs;
+ QStringList m_args;
+ QStringList m_types;
+ unsigned m_parserTypes;
+};
+
+
+
+
+class SpecialInformation
+{
+public:
+ SpecialInformation() {m_defaultGroup = -1;}
+ static int function(int group, const QString& fname);
+ static SpecialFunction functionObject(const QString& gname, const QString& fname);
+ static int group(const QString& gname);
+ static bool isValid(int gname, int fname);
+ static bool isValid(const QString& gname, const QString& fname);
+ static bool isValid(int gname, int fname, SpecialFunction::ParserType p);
+ static bool isValid(const QString& gname, const QString& fname, SpecialFunction::ParserType p);
+ static int minArg(int gname, int fname);
+ static int maxArg(int gname, int fname);
+ static int argCount(int gname, int fname);
+ static bool isValidArg(int gname, int fname, int args);
+ static QString description(int gname, int fname);
+ static QString prototype(int gname, int fname, uint prototypeFlags = 0);
+ /* Insert function supported by all parsers */
+ static bool insert(int id, const QString& function, const QString description = QString::null,
+ int minArgs = -1, int maxArgs = -1, SpecialFunction::ParserType = SpecialFunction::AllParsers);
+ /* Insert function supported by (old) macro parser */
+ static bool insertMacro(int id, const QString& function, const QString description = QString::null,
+ int minArgs = -1, int maxArgs = -1);
+ /* Insert function supported by (new) internal parser */
+ static bool insertInternal(int id, const QString& function, const QString description = QString::null,
+ int minArgs = -1, int maxArgs = -1);
+ static bool insertAlias(int id, const QString& alias);
+ static void insertGroup(int id, const QString& name, const QString& parserName);
+ static void setDefaultGroup(int gname);
+ static void registerSpecials();
+ static QString parserGroupName(const QString&);
+ static QStringList groups();
+ static QStringList functions(const QString& group);
+protected:
+ static QMap<int, QMap<int, SpecialFunction> > m_specials;
+ static QMap<QString, int> m_groups;
+ static QMap<QString, QString> m_parserGroups;
+ static QMap<int, QMap<QString, int> > m_functions;
+ static QMap<int, QMap<QString, int> > m_aliases;
+ static int m_defaultGroup;
+};
+
+
+#endif
+
diff --git a/kommander/plugin/specials.h b/kommander/plugin/specials.h
new file mode 100644
index 00000000..2d46200a
--- /dev/null
+++ b/kommander/plugin/specials.h
@@ -0,0 +1,77 @@
+/***************************************************************************
+ specials.h - known specials and DCOP calls
+ -------------------
+ copyright : (C) 2004 by Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_SPECIALS_H_
+#define _HAVE_SPECIALS_H_
+
+/** This file contains the global Kommander defined. In case a new Group, method, etc. is
+added it MUST be added to the end of the enum lists in order to keep compatibility with the
+existing plugins. */
+
+
+namespace Group
+{
+ enum {DCOP, Kommander, String, Array, File, Input, Message, Slots, Matrix};
+}
+
+namespace DCOP
+{
+ enum {addUniqueItem, associatedText, cancel, cellText, clear, checked, children, columnCount, count, currentColumn,
+ currentItem, currentRow, execute, findItem, global, insertColumn, insertItem, insertItems, insertRow,
+ item, itemDepth, itemPath, removeColumn, removeItem, removeRow, selection, setAssociatedText, setChecked,
+ setCellText, setCurrentItem, insertTab, setColumnCaption, setEnabled, setGlobal, setMaximum, setPixmap,
+ setRowCaption, setSelection, setText, getBackgroundColor, setBackgroundColor,
+ setVisible, text, type, setCellWidget, cellWidget, setEditable, geometry, hasFocus, isModified};
+}
+
+namespace Kommander
+{
+ enum {widgetText, selectedWidgetText, null, pid, dcopid, parentPid, debug,
+ echo, env, exec, expr, global, i18n, dialog, readSetting, setGlobal, writeSetting, dcop,
+ switchBlock, execBegin, forBlock, forEachBlock, ifBlock, comment, createWidget, connect, disconnect, widgetExists, exit, Break, Continue, Return, execBackground, switchInternal}; //, focusWidget};
+}
+
+namespace Array
+{
+ enum {values, keys, clear, count, value, remove, setValue, fromString, toString, indexedFromString, indexedToString, indexedRemoveElements, indexedInsertElements, flipCopy};
+}
+
+namespace Matrix
+{
+ enum {fromString, toString, clear, rows, columns, rowToArray, columnToArray, columnToIndexedArray, rowKeys, columnKeys, addRow, removeRow, removeColumn, findRow};
+}
+
+namespace String
+{
+ enum {length, contains, find, findRev, left, right, mid, remove, replace, upper, lower,
+ compare, isEmpty, isNumber, section, args, toInt, toDouble, round, sort, trim, padLeft, padRight, count};
+}
+
+namespace File
+{
+ enum {read, write, append, exists};
+}
+
+namespace Input
+{
+ enum {color, text, password, value, valueDouble, openfile, openfiles, savefile, directory};
+}
+
+namespace Message
+{
+ enum {info, error, question, warning};
+}
+
+#endif
diff --git a/kommander/pluginmanager/Makefile.am b/kommander/pluginmanager/Makefile.am
new file mode 100644
index 00000000..5b3e56c8
--- /dev/null
+++ b/kommander/pluginmanager/Makefile.am
@@ -0,0 +1,18 @@
+bin_PROGRAMS = kmdr-plugins
+
+kmdr_plugins_SOURCES = main.cpp mainwindow.cpp pluginmanager.cpp
+kmdr_plugins_LDADD = $(top_builddir)/kommander/factory/libkommanderfactory.la $(LIB_KIO)
+
+#KDE_ICON = kmdr-plugins
+
+appsdir = $(kde_appsdir)/Applications
+#apps_DATA = kmdr-plugins.desktop
+
+INCLUDES = -I$(top_srcdir)/kommander/factory $(all_includes)
+
+METASOURCES = AUTO
+
+# the library search path.
+kmdr_plugins_LDFLAGS = $(all_libraries) $(KDE_RPATH)
+
+noinst_HEADERS = mainwindow.h pluginmanager.h
diff --git a/kommander/pluginmanager/main.cpp b/kommander/pluginmanager/main.cpp
new file mode 100644
index 00000000..cdbf9cd5
--- /dev/null
+++ b/kommander/pluginmanager/main.cpp
@@ -0,0 +1,101 @@
+/***************************************************************************
+ main.cpp - Kommander plugin manager interface
+ -------------------
+ begin : Tue Aug 13 09:31:50 EST 2002
+ copyright : (C) 2004 Marc Britton <consume@optushome.com.au>
+ (C) 2005 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* KDE INCLUDES */
+#include <kcmdlineargs.h>
+#include <kaboutdata.h>
+#include <klocale.h>
+#include <kurl.h>
+#include <qapplication.h>
+#include <qobject.h>
+#include <kapplication.h>
+
+/* QT INCLUDES */
+#include <qstringlist.h>
+
+/* OTHER INCLUDES */
+#include "pluginmanager.h"
+#include "mainwindow.h"
+#include "kommanderversion.h"
+
+#include <iostream>
+using namespace std;
+
+static const char *description =
+ I18N_NOOP("kmdr-plugins is a component of the Kommander dialog system that manages installed plugins.");
+// INSERT A DESCRIPTION FOR YOUR APPLICATION HERE
+
+
+static KCmdLineOptions options[] =
+{
+ { "a", 0, 0},
+ { "add <file>", I18N_NOOP("Register given library"), 0},
+ { "r", 0, 0},
+ { "remove <file>", I18N_NOOP("Remove given library"), 0},
+ { "c", 0, 0},
+ { "check", I18N_NOOP("Check all installed plugins and remove those missing"), 0},
+ { "l", 0, 0},
+ { "list", I18N_NOOP("List all installed plugins"), 0},
+ KCmdLineLastOption
+};
+
+int main(int argc, char *argv[])
+{
+ KLocale::setMainCatalogue("kommander");
+ KAboutData aboutData( "kmdr-plugins", I18N_NOOP("Kommander Plugin Manager"),
+ KOMMANDER_VERSION, description, KAboutData::License_GPL,
+ "(C) 2004-2005 Kommander authors");
+ aboutData.addAuthor("Marc Britton", "Original author", "consume@optusnet.com.au");
+ aboutData.addAuthor("Eric Laffoon", "Project manager", "eric@kdewebdev.org");
+ aboutData.addAuthor("Michal Rudolf", "Current maintainer", "mrudolf@kdewebdev.org");
+ KCmdLineArgs::init(argc, argv, &aboutData);
+ KCmdLineArgs::addCmdLineOptions(options); // Add our own options.
+
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+ KApplication app;
+
+ if (!args->getOption("add").isNull() || !args->getOption("remove").isNull() || args->isSet("check") || args->isSet("list"))
+ {
+ PluginManager P;
+ if (args->isSet("check"))
+ P.verify();
+
+ QCStringList items = args->getOptionList("add");
+ for (QCStringList::ConstIterator it = items.begin(); it != items.end(); ++it)
+ if (!P.add(*it))
+ cerr << i18n("Error adding plugin '%1'").arg(*it).local8Bit();
+
+ items = args->getOptionList("remove");
+ for (QCStringList::ConstIterator it = items.begin(); it != items.end(); ++it)
+ if (!P.remove(*it))
+ cerr << i18n("Error removing plugin '%1'").arg(*it).local8Bit();
+
+ if (args->isSet("list"))
+ {
+ QStringList plugins = P.items();
+ for (QStringList::ConstIterator it = plugins.begin(); it != plugins.end(); ++it)
+ cout << (*it).local8Bit() << "\n";
+ }
+ }
+ else
+ {
+ MainWindow *mw = new MainWindow();
+ app.setMainWidget(mw);
+ mw->show();
+ return app.exec();
+ }
+}
diff --git a/kommander/pluginmanager/mainwindow.cpp b/kommander/pluginmanager/mainwindow.cpp
new file mode 100644
index 00000000..4cc67d62
--- /dev/null
+++ b/kommander/pluginmanager/mainwindow.cpp
@@ -0,0 +1,106 @@
+/***************************************************************************
+ mainwindow.cpp - Kommander plugin manager mainwindow class implementation
+ -------------------
+ begin : Tue Aug 13 09:31:50 EST 2002
+ copyright : (C) 2004 by Marc Britton
+ email : consume@optushome.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "mainwindow.h"
+#include "pluginmanager.h"
+
+#include <ktoolbar.h>
+#include <klistbox.h>
+#include <kconfig.h>
+#include <kfiledialog.h>
+#include <klibloader.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kglobal.h>
+#include <kstandarddirs.h>
+
+MainWindow::MainWindow( QWidget* parent, const char *name, WFlags f )
+ : KMainWindow( parent, name, f )
+{
+ KToolBar *toolBar = new KToolBar( this );
+ toolBar->insertButton("fileopen", Add, true, i18n("Add") );
+ toolBar->insertButton("no", Remove, true, i18n("Remove") );
+ toolBar->insertButton("reload", Refresh, true, i18n("Refresh") );
+ connect( toolBar, SIGNAL(clicked(int)), this, SLOT(toolButton(int)) );
+
+ m_list = new KListBox( this );
+ setCentralWidget(m_list);
+
+ m_pluginManager = new PluginManager;
+ m_list->insertStringList(m_pluginManager->items());
+}
+
+MainWindow::~MainWindow()
+{
+ delete m_pluginManager;
+}
+
+void MainWindow::toolButton( int id )
+{
+ switch (id)
+ {
+ case Add:
+ add();
+ break;
+ case Remove:
+ remove();
+ break;
+ case Refresh:
+ verify();
+ break;
+ }
+}
+
+void MainWindow::add()
+{
+ QString libDir = KGlobal::dirs()->findResourceDir("lib", "libkommanderplugin");
+ QString plugin = KFileDialog::getOpenFileName(libDir, "lib*", this,
+ i18n("Add Kommander Plugin"));
+ add(plugin);
+}
+
+void MainWindow::add(const QString &plugin)
+{
+ if (!m_pluginManager->add(plugin))
+ {
+ QString errMsg = i18n("<qt>Unable to load Kommander plugin<br><b>%1</b></qt>").arg(plugin);
+ KMessageBox::error(this, errMsg, i18n("Cannot add plugin"));
+ }
+ else
+ refresh();
+}
+
+void MainWindow::remove()
+{
+ QString plugin = m_list->currentText();
+ if (m_pluginManager->remove(plugin))
+ refresh();
+}
+
+void MainWindow::refresh()
+{
+ m_list->clear();
+ m_list->insertStringList(m_pluginManager->items());
+}
+
+void MainWindow::verify()
+{
+ m_pluginManager->verify();
+ refresh();
+}
+
+#include "mainwindow.moc"
diff --git a/kommander/pluginmanager/mainwindow.h b/kommander/pluginmanager/mainwindow.h
new file mode 100644
index 00000000..addf1a5f
--- /dev/null
+++ b/kommander/pluginmanager/mainwindow.h
@@ -0,0 +1,56 @@
+/***************************************************************************
+ mainwindow.h - Kommander plugin manager mainwindow class definition
+ -------------------
+ begin : Tue Aug 13 09:31:50 EST 2002
+ copyright : (C) 2004 by Marc Britton
+ email : consume@optushome.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef HAVE_MAINWINDOW_H
+#define HAVE_MAINWINDOW_H
+
+#include <kmainwindow.h>
+
+class KListBox;
+class PluginManager;
+
+class MainWindow : public KMainWindow
+{
+ Q_OBJECT
+public:
+ MainWindow( QWidget* parent = 0, const char *name = 0, WFlags f = WType_TopLevel | WDestructiveClose );
+ ~MainWindow();
+
+protected slots:
+ // Call function asigned to tollbutton (0 = add, 1 = remove)
+ void toolButton( int id );
+ // Remove currently selected plugin
+ void remove();
+ // Show dialogbox for selecting plugin, then add it
+ void add();
+ // Add given plugin if is not added yet
+ void add( const QString &plugin );
+ // Check whether installed plugins are valid
+ void verify();
+private:
+ enum {Add, Remove, Refresh};
+
+ // Referesh plugin list
+ void refresh();
+
+ // ListBox of available plugins
+ KListBox *m_list;
+ // plugin manager
+ PluginManager* m_pluginManager;
+};
+
+#endif
diff --git a/kommander/pluginmanager/pluginmanager.cpp b/kommander/pluginmanager/pluginmanager.cpp
new file mode 100644
index 00000000..e9301b26
--- /dev/null
+++ b/kommander/pluginmanager/pluginmanager.cpp
@@ -0,0 +1,89 @@
+/***************************************************************************
+ pluginmanager.cpp - Plugin manager class
+ -------------------
+ copyright : (C) 2005 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+#include <kconfig.h>
+#include <klibloader.h>
+
+#include "pluginmanager.h"
+
+PluginManager::PluginManager()
+{
+ m_cfg = new KConfig("kommanderrc");
+ m_list = new QStringList(m_cfg->readListEntry("plugins"));
+}
+
+PluginManager::~PluginManager()
+{
+ m_cfg->writeEntry("plugins", *m_list);
+ delete m_cfg;
+ delete m_list;
+}
+
+int PluginManager::count() const
+{
+ return m_list->count();
+}
+
+QString PluginManager::item(int i) const
+{
+ return (*m_list)[i];
+}
+
+bool PluginManager::add(const QString& plugin, bool)
+{
+ QString plugName= libraryName(plugin);
+ if (plugName.isNull())
+ return false;
+ if (m_list->contains(plugName))
+ return false;
+ m_list->append(plugName);
+ return true;
+}
+
+bool PluginManager::remove(const QString& plugin)
+{
+ if (!m_list->contains(plugin))
+ return false;
+ m_list->remove(plugin);
+ return true;
+}
+
+int PluginManager::verify()
+{
+ QStringList verified;
+ for (QStringList::ConstIterator it = m_list->begin(); it != m_list->end(); ++it)
+ if (!libraryName(*it).isNull())
+ verified.append(*it);
+ int removed = count() - verified.count();
+ m_list->clear();
+ (*m_list) += verified;
+ return removed;
+}
+
+QString PluginManager::libraryName(const QString& plugin) const
+{
+ KLibrary *l = KLibLoader::self()->library(plugin.latin1());
+ QString libname;
+ if (l && l->hasSymbol("kommander_plugin"))
+ libname = l->fileName();
+ return libname;
+}
+
+QStringList PluginManager::items() const
+{
+ return (*m_list);
+}
+
diff --git a/kommander/pluginmanager/pluginmanager.h b/kommander/pluginmanager/pluginmanager.h
new file mode 100644
index 00000000..0c7c79b7
--- /dev/null
+++ b/kommander/pluginmanager/pluginmanager.h
@@ -0,0 +1,53 @@
+/***************************************************************************
+ pluginmanager.h - Plugin manager class
+ -------------------
+ copyright : (C) 2005 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+#ifndef __HAVE_PLUGINMANAGER_H
+#define __HAVE_PLUGINMANAGER_H
+
+#include <qstringlist.h>
+
+class KConfig;
+
+class PluginManager
+{
+public:
+ PluginManager();
+ ~PluginManager();
+
+ // number of known plugins
+ int count() const;
+ // n-th plugin
+ QString item(int i) const;
+ // adds a plugin if valid;
+ // FIXME: if overwrite is true, plugin with the same base name will be removed
+ bool add(const QString& plugin, bool overwrite = true);
+ // removes given plugin
+ bool remove(const QString& plugin);
+ // remove invalid plugins, returns number of removed plugins
+ int verify();
+ // list of plugins
+ QStringList items() const;
+private:
+ // returns expanded library name or null if it is invalid
+ QString libraryName(const QString& plugin) const;
+
+ QStringList* m_list;
+ KConfig *m_cfg;
+};
+
+
+#endif
+
diff --git a/kommander/widget/Makefile.am b/kommander/widget/Makefile.am
new file mode 100644
index 00000000..410d57c9
--- /dev/null
+++ b/kommander/widget/Makefile.am
@@ -0,0 +1,20 @@
+lib_LTLIBRARIES = libkommanderwidget.la
+
+# set the include path for X, qt and KDE
+INCLUDES = -I$(top_srcdir)/kommander/plugin -I$(top_srcdir)/kommander/factory $(all_includes)
+
+# the library search path.
+libkommanderwidget_la_LDFLAGS = $(KDE_RPATH) $(all_libraries) -no-undefined
+
+# the libraries to link against.
+libkommanderwidget_la_LIBADD = $(top_builddir)/kommander/factory/libkommanderfactory.la $(LIB_KIO) $(LIB_KDEUI) $(LIB_QT)
+
+libkommanderwidget_la_SOURCES = expression.cpp function.cpp functionlib.cpp \
+ invokeclass.cpp kmdrmainwindow.cpp kommanderfunctions.cpp kommanderwidget.cpp \
+ kommanderwindow.cpp myprocess.cpp parsenode.cpp parser.cpp parserdata.cpp
+
+include_HEADERS = kommanderwidget.h kommander_export.h
+
+# let automoc handle all of the meta source files (moc)
+METASOURCES = AUTO
+noinst_HEADERS = invokeclass.h kmdrmainwindow.h
diff --git a/kommander/widget/expression.cpp b/kommander/widget/expression.cpp
new file mode 100644
index 00000000..88d46b51
--- /dev/null
+++ b/kommander/widget/expression.cpp
@@ -0,0 +1,332 @@
+/***************************************************************************
+ expression.cpp - Expression parser
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "expression.h"
+
+#include <klocale.h>
+
+Expression::Expression() : m_start(0), m_error(false)
+{
+}
+
+Expression::Expression(const QString& expr)
+{
+ *this = expr;
+}
+
+Expression& Expression::operator=(const QString& s)
+{
+ m_start = 0;
+ m_error = false;
+ m_parts.clear();
+ const QString single = "()<>!+-/*%";
+ int start = 0;
+ int len = s.length();
+ int i = 0;
+ while (i < len)
+ {
+ if (((s[i] == '>' || s[i] == '<' || s[i] == '=' || s[i] == '!') &&
+ s[i + 1] == '=') || (s[i] == '<' && s[i + 1] == '>'))
+ {
+ m_parts.append(QVariant(s.mid(i, 2)));
+ i += 2;
+ } else if (s[i].isDigit())
+ {
+ i++;
+ bool decimal = false;
+ while (i < len && (s[i].isDigit() || (!decimal && s[i] == QChar('.'))))
+ {
+ if (s[i] == '.')
+ decimal = true;
+ i++;
+ }
+ if (decimal)
+ m_parts.append(QVariant(s.mid(start, i - start).toDouble()));
+ else
+ m_parts.append(QVariant(s.mid(start, i - start).toInt()));
+ } else if (single.contains(s[i]))
+ m_parts.append(QVariant(QString(s[i++])));
+ else if (s[i] == '\"')
+ {
+ i++;
+ while (i < len && s[i] != '\"')
+ i++;
+ m_parts.append(QVariant(s.mid(start + 1, i - start - 1)));
+ i++;
+ } else if (s[i].isSpace())
+ while (i < len && s[i].isSpace())
+ i++;
+ else
+ {
+ while (i < len && !s[i].isSpace())
+ i++;
+ QString keyword = s.mid(start, i - start);
+ if (keyword == "true")
+ m_parts.append(QVariant(true));
+ else if (keyword == "false")
+ m_parts.append(QVariant(false));
+ else /* will be deprecated soon */
+ m_parts.append(QVariant(keyword));
+ }
+ start = i;
+ }
+ return *this;
+}
+
+QString Expression::next() const
+{
+ if (m_start < m_parts.count())
+ return m_parts[m_start].toString();
+ else
+ return QString();
+}
+
+bool Expression::validate()
+{
+ if (m_start >= m_parts.count())
+ setError();
+ return !m_error;
+}
+Expression::Type Expression::commonType(const QVariant v1, const QVariant v2) const
+{
+ if (v1.type() == QVariant::String || v2.type() == QVariant::String)
+ return TypeString;
+ else if (v1.type() == QVariant::Double || v2.type() == QVariant::Double)
+ return TypeDouble;
+ return TypeInt;
+}
+
+static int expression_compareDouble(const double A, const double B)
+{
+ return A<B ? -1 : (A==B ? 0 : 1);
+}
+
+
+int Expression::compare(const QVariant v1, const QVariant v2) const
+{
+ switch (commonType(v1, v2)) {
+ case TypeString: return v1.toString().compare(v2.toString());
+ case TypeDouble: return expression_compareDouble(v1.toDouble(), v2.toDouble());
+ case TypeInt: return v1.toInt() - v2.toInt();
+ default: return 0;
+ }
+}
+
+
+void Expression::setError(int pos)
+{
+ m_errorPosition = pos == -1 ? m_start : pos;
+ m_error = true;
+}
+
+QVariant Expression::parseNumber()
+{
+ if (!validate())
+ return -1;
+ return m_parts[m_start++];
+}
+
+QVariant Expression::parseMinus()
+{
+ if (!validate()) return -1;
+ bool sign = next() == "-";
+ if (sign)
+ {
+ m_start++;
+ QVariant value = parseNumber();
+ if (value.type() == QVariant::Double)
+ return -value.toDouble();
+ else
+ return -value.toInt();
+ }
+ else
+ return parseNumber();
+}
+
+
+
+QVariant Expression::parseBracket()
+{
+ if (!validate()) return -1;
+ if (next() == "(")
+ {
+ m_start++;
+ QVariant value = parse();
+ if (next() == ")")
+ m_start++;
+ else
+ setError();
+ return value;
+ }
+ else
+ return parseMinus();
+}
+
+
+QVariant Expression::parseMultiply()
+{
+ if (!validate()) return -1;
+ QVariant value = parseBracket();
+ QString op = next();
+ while (op == "*" || op == "/" || op == "%")
+ {
+ m_start++;
+ QVariant value2 = parseBracket();
+ Type mode = commonType(value, value2);
+ if (op == "*")
+ {
+ if (mode == TypeDouble)
+ value = value.toDouble() * value2.toDouble();
+ else
+ value = value.toInt() * value2.toInt();
+ }
+ else if (op == "/")
+ {
+ if (value2.toInt() == 0)
+ return i18n("error");
+ if (mode == TypeDouble || value.toInt() != value.toInt() / value2.toInt() * value2.toInt())
+ value = value.toDouble() / value2.toDouble();
+ else
+ value = value.toInt() / value2.toInt();
+ }
+ else
+ {
+ if (value2.toInt() == 0)
+ return i18n("error");
+ if (mode == TypeDouble)
+ value = value.toDouble() / value2.toInt();
+ else
+ value = value.toInt() / value2.toInt();
+ }
+ op = next();
+ }
+ return value;
+}
+
+QVariant Expression::parseAdd()
+{
+ if (!validate()) return -1;
+ QVariant value = parseMultiply();
+ QString op = next();
+ while (op == "+" || op == "-")
+ {
+ m_start++;
+ QVariant value2 = parseMultiply();
+ Type mode = commonType(value, value2);
+ if (op == "+")
+ if (mode == TypeDouble)
+ value = value.toDouble() + value2.toDouble();
+ else
+ value = value.toInt() + value2.toInt();
+ else
+ if (mode == TypeDouble)
+ value = value.toDouble() - value2.toDouble();
+ else
+ value = value.toInt() - value2.toInt();
+ op = next();
+ }
+ return value;
+}
+
+QVariant Expression::parseComparison()
+{
+ if (!validate()) return -1;
+ QVariant value = parseAdd();
+ QString cmp = next();
+ if (cmp == "<" || cmp == "<=" || cmp == "==" || cmp == ">=" || cmp == ">" || cmp == "<>" || cmp == "!=")
+ {
+ m_start++;
+ QVariant value2 = parseAdd();
+ if (cmp == "<")
+ return compare(value, value2) < 0;
+ else if (cmp == "<=")
+ return compare(value, value2) <= 0;
+ else if (cmp == "==")
+ return compare(value, value2) == 0;
+ else if (cmp == ">=")
+ return compare(value, value2) >= 0;
+ else if (cmp == "<>" || cmp == "!=")
+ return compare(value, value2) != 0;
+ else
+ return compare(value, value2) > 0;
+ }
+ return value;
+}
+
+QVariant Expression::parseNot()
+{
+ if (next() == "!" || next() == "not")
+ {
+ m_start++;
+ return !parseComparison().asBool();
+ }
+ else
+ return parseComparison();
+}
+
+QVariant Expression::parseAnd()
+{
+ if (!validate()) return -1;
+ QVariant value = parseNot();
+ while (next() == "&&" || next() == "and")
+ {
+ m_start++;
+ value = parseNot().toBool() && value.toBool();
+ }
+
+ return value;
+}
+
+QVariant Expression::parseOr()
+{
+ if (!validate()) return -1;
+ QVariant value = parseAnd();
+ while (next() == "||" || next() == "or")
+ {
+ m_start++;
+ value = parseAnd().toBool() || value.toBool();
+ }
+ return value;
+}
+
+QVariant Expression::parse()
+{
+ return parseOr();
+}
+
+QVariant Expression::value(bool* valid)
+{
+ m_start = 0;
+ m_error = false;
+ QVariant val = parse();
+ if (valid)
+ *valid = !m_error && m_start == m_parts.count();
+ return val;
+}
+
+QVariant Expression::value(const QString& s, bool* valid)
+{
+ *this = s;
+ return value(valid);
+}
+
+bool Expression::isTrue(const QString& s, bool* valid)
+{
+ QVariant v = value(s, valid);
+ return (v.type() == QVariant::String && !v.toString().isNull()) ||
+ (v.type() != QVariant::String && v.toInt() != 0);
+}
+
diff --git a/kommander/widget/expression.h b/kommander/widget/expression.h
new file mode 100644
index 00000000..7ab163e2
--- /dev/null
+++ b/kommander/widget/expression.h
@@ -0,0 +1,80 @@
+/***************************************************************************
+ expression.h - Expression parser
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_EXPRESSION_H_
+#define _HAVE_EXPRESSION_H_
+
+#include <qstring.h>
+#include <qvaluelist.h>
+#include <qvariant.h>
+
+class Expression
+{
+public:
+ Expression();
+ Expression(const QString& expr);
+ /* set string to parse */
+ Expression& operator=(const QString& s);
+ /* calculate value */
+ QVariant value(bool* valid = 0);
+ /* equivalent of setString(s) and value(valid) */
+ QVariant value(const QString& s, bool* valid = 0);
+ /* equivalent of setString(s) and checking if value(valid) is true */
+ bool isTrue(const QString& s, bool* valid = 0);
+private:
+ enum Type {TypeInt, TypeDouble, TypeString};
+ /* parsing function - top-down approach */
+ /* parse terminal (number or string) */
+ QVariant parseNumber();
+ /* parse -x expression */
+ QVariant parseMinus();
+ /* parse (x) expression */
+ QVariant parseBracket();
+ /* parse x*y, x/y and x%y expressions */
+ QVariant parseMultiply();
+ /* parse x+y and x-y expressions */
+ QVariant parseAdd();
+ /* parse !x and (equivalent) not x expressions */
+ QVariant parseNot();
+ /* parse x==y, x<=y, x>=y, x<y and x>y expressions */
+ QVariant parseComparison();
+ /* parse x && y, (equivalent) x and y expressions */
+ QVariant parseAnd();
+ /* parse x || y and (equivalent) x or y expressions */
+ QVariant parseOr();
+ /* starting point of parsing - just call first function above */
+ QVariant parse();
+
+ /* check if we still have next argument */
+ bool validate();
+ /* return next argument to parse or null if there is none */
+ QString next() const;
+ /* set error position for future error reporting */
+ void setError(int pos = -1);
+ /* compare various types of QVariant (strings, floats, ints */
+ int compare(const QVariant v1, const QVariant v2) const;
+ /* return common type for binary operations */
+ Type commonType(const QVariant v1, const QVariant v2) const;
+
+ QValueList<QVariant> m_parts;
+ uint m_start;
+ bool m_error;
+ uint m_errorPosition;
+
+};
+
+#endif
+
diff --git a/kommander/widget/function.cpp b/kommander/widget/function.cpp
new file mode 100644
index 00000000..3bcd21cd
--- /dev/null
+++ b/kommander/widget/function.cpp
@@ -0,0 +1,135 @@
+/***************************************************************************
+ function.cpp - Functions for internal parser
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software{} you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation{} either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "function.h"
+
+using namespace Parse;
+
+Function::Function() : m_function(0), m_minArgs(0), m_maxArgs(0)
+{
+}
+
+Function::Function(FunctionPointer fp, ValueType value, const TypeList& params, uint min, uint max)
+ : m_params(params)
+{
+ m_function = fp;
+ m_returnValue = value;
+ m_minArgs = min <= m_params.count() ? min : m_params.count();
+ m_maxArgs = max >= m_params.count() ? max : m_params.count();
+}
+
+Function::Function(FunctionPointer fp, ValueType value, ValueType param1, uint min, uint max)
+{
+ m_function = fp;
+ m_returnValue = value;
+ m_params.append(param1);
+ m_minArgs = min <= 1 ? min : 1;
+ m_maxArgs = max >= 1 ? max : 1;
+}
+
+Function::Function(FunctionPointer fp, ValueType value, ValueType param1, ValueType param2, uint min ,
+ uint max)
+{
+ m_function = fp;
+ m_returnValue = value;
+ m_params.append(param1);
+ m_params.append(param2);
+ m_minArgs = min <= 2 ? min : 2;
+ m_maxArgs = max >= 2 ? max : 2;
+}
+
+Function::Function(FunctionPointer fp, ValueType value, ValueType param1, ValueType param2, ValueType param3,
+ uint min, uint max)
+{
+ m_function = fp;
+ m_returnValue = value;
+ m_params.append(param1);
+ m_params.append(param2);
+ m_params.append(param3);
+ m_minArgs = min <= 3 ? min : 3;
+ m_maxArgs = max >= 3 ? max : 3;
+}
+
+Function::Function(FunctionPointer fp, ValueType value, ValueType param1, ValueType param2, ValueType param3,
+ ValueType param4, uint min, uint max)
+{
+ m_function = fp;
+ m_returnValue = value;
+ m_params.append(param1);
+ m_params.append(param2);
+ m_params.append(param3);
+ m_params.append(param4);
+ m_minArgs = min <= 4 ? min : 4;
+ m_maxArgs = max >= 4 ? max : 4;
+}
+
+Function::Function(FunctionPointer fp, ValueType value, ValueType param1, ValueType param2, ValueType param3,
+ ValueType param4, ValueType param5, uint min, uint max)
+{
+ m_function = fp;
+ m_returnValue = value;
+ m_params.append(param1);
+ m_params.append(param2);
+ m_params.append(param3);
+ m_params.append(param4);
+ m_params.append(param5);
+ m_minArgs = min <= 5 ? min : 5;
+ m_maxArgs = max >= 5 ? max : 5;
+}
+
+bool Function::isVoid() const
+{
+ return returnValue() == ValueNone;
+}
+
+ValueType Function::returnValue() const
+{
+ return m_returnValue;
+}
+
+ValueType Function::argType(uint i) const
+{
+ if (i < m_params.count())
+ return m_params[i];
+ else if (i < m_maxArgs)
+ return m_params.last();
+ else
+ return ValueNone;
+}
+
+uint Function::minArgs() const
+{
+ return m_minArgs;
+}
+
+uint Function::maxArgs() const
+{
+ return m_maxArgs;
+}
+
+bool Function::isValid(const ParameterList& params) const
+{
+ return params.count() >= minArgs() && params.count() <= maxArgs();
+}
+
+ParseNode Function::execute(Parser* P, const ParameterList& params) const
+{
+ if (m_function)
+ return m_function(P, params);
+ else
+ return ParseNode();
+}
+
diff --git a/kommander/widget/function.h b/kommander/widget/function.h
new file mode 100644
index 00000000..fbd8b99b
--- /dev/null
+++ b/kommander/widget/function.h
@@ -0,0 +1,73 @@
+/***************************************************************************
+ function.h - Functions for internal parser
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_FUNCTION_H_
+#define _HAVE_FUNCTION_H_
+
+#include "parsenode.h"
+#include <qvaluevector.h>
+
+class Parser;
+
+typedef QValueVector<ParseNode> ParameterList;
+typedef QValueVector<Parse::ValueType> TypeList;
+typedef ParseNode(*FunctionPointer)(Parser*, const ParameterList&);
+
+class Function
+{
+ public:
+ /* default constructor - empty function */
+ Function();
+ /* construct a function from parameterlist */
+ Function(FunctionPointer fp, Parse::ValueType value, const TypeList& params, uint min = 99999,
+ uint max = 0);
+ /* construct a function from parameters */
+ Function(FunctionPointer fp, Parse::ValueType value, Parse::ValueType param1, uint min = 99999,
+ uint max = 0);
+ Function(FunctionPointer fp, Parse::ValueType value, Parse::ValueType param1, Parse::ValueType param2,
+ uint min = 99999, uint max = 0);
+ Function(FunctionPointer fp, Parse::ValueType value, Parse::ValueType param1, Parse::ValueType param2,
+ Parse::ValueType param3, uint min = 99999, uint max = 0);
+ Function(FunctionPointer fp, Parse::ValueType value, Parse::ValueType param1, Parse::ValueType param2,
+ Parse::ValueType param3, Parse::ValueType param4, uint min = 99999, uint max = 0);
+ Function(FunctionPointer fp, Parse::ValueType value, Parse::ValueType param1, Parse::ValueType param2,
+ Parse::ValueType param3, Parse::ValueType param4, Parse::ValueType param5,
+ uint min = 99999, uint max = 0);
+ /* if function returns value */
+ bool isVoid() const;
+ /* type of returned value */
+ Parse::ValueType returnValue() const;
+ /* type of i-th argument */
+ Parse::ValueType argType(uint i) const;
+ /* minimum number of arguments */
+ uint minArgs() const;
+ /* maximum number of arguments */
+ uint maxArgs() const;
+ /* check whether given list is appropriate for this function */
+ bool isValid(const ParameterList& params) const;
+ /* execute */
+ ParseNode execute(Parser* P, const ParameterList& params) const;
+
+private:
+ FunctionPointer m_function;
+ TypeList m_params;
+ Parse::ValueType m_returnValue;
+ uint m_minArgs;
+ uint m_maxArgs;
+};
+
+#endif
+
diff --git a/kommander/widget/functionlib.cpp b/kommander/widget/functionlib.cpp
new file mode 100644
index 00000000..3389d523
--- /dev/null
+++ b/kommander/widget/functionlib.cpp
@@ -0,0 +1,1476 @@
+/***************************************************************************
+ functionlib.cpp - Standard library of functions
+ -------------------
+ copyright : (C) 2004-2006 Michal Rudolf <mrudolf@kdewebdwev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "parserdata.h"
+#include "parser.h"
+#include "specials.h"
+#include "specialinformation.h"
+#include "myprocess.h"
+#include "kommanderwidget.h"
+#include "invokeclass.h"
+#include "kommanderfactory.h"
+
+#include <iostream>
+#include <stdlib.h>
+
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qstringlist.h>
+#include <qmetaobject.h>
+
+#include <kdebug.h>
+#include <kmessagebox.h>
+#include <dcopclient.h>
+#include <kapplication.h>
+#include <kcolordialog.h>
+#include <kfiledialog.h>
+#include <kglobal.h>
+#include <kinputdialog.h>
+#include <klocale.h>
+#include <kpassdlg.h>
+
+using namespace Parse;
+
+/******************* String functions ********************************/
+static ParseNode f_stringLength(Parser*, const ParameterList& params)
+{
+ return params[0].toString().length();
+}
+
+static ParseNode f_stringContains(Parser*, const ParameterList& params)
+{
+ return params[0].toString().contains(params[1].toString());
+}
+
+static ParseNode f_stringCompare(Parser*, const ParameterList& params)
+{
+ int result = QString::compare(params[0].toString(),params[1].toString());
+ if (result < 0)
+ {
+ result = -1;
+ } else
+ if (result > 0)
+ {
+ result = 1;
+ }
+ return result;
+}
+
+static ParseNode f_stringFind(Parser*, const ParameterList& params)
+{
+ return params[0].toString().find(params[1].toString(), params.count() == 3 ? params[2].toInt() : 0);
+}
+
+static ParseNode f_stringFindRev(Parser*, const ParameterList& params)
+{
+ return params[0].toString().findRev(params[1].toString(),
+ params.count() == 3 ? params[2].toInt() : params[0].toString().length());
+}
+
+static ParseNode f_stringCount(Parser*, const ParameterList& params)
+{
+ int c = 0;
+ int s = 0;
+ while (params[0].toString().find(params[1].toString(), s) > -1)
+ {
+ s = params[0].toString().find(params[1].toString(), s) + 1;
+ c++;
+ }
+ return c;
+}
+
+static ParseNode f_stringLeft(Parser*, const ParameterList& params)
+{
+ return params[0].toString().left(params[1].toInt());
+}
+
+static ParseNode f_stringRight(Parser*, const ParameterList& params)
+{
+ return params[0].toString().right(params[1].toInt());
+}
+
+static ParseNode f_stringMid(Parser*, const ParameterList& params)
+{
+ return params[0].toString().mid(params[1].toInt(), params.count() == 3 ? params[2].toInt() : 0xffffffff);
+}
+
+static ParseNode f_stringRemove(Parser*, const ParameterList& params)
+{
+ return params[0].toString().remove(params[1].toString());
+}
+
+static ParseNode f_stringReplace(Parser*, const ParameterList& params)
+{
+ return params[0].toString().replace(params[1].toString(), params[2].toString());
+}
+
+static ParseNode f_stringLower(Parser*, const ParameterList& params)
+{
+ return params[0].toString().lower();
+}
+
+static ParseNode f_stringUpper(Parser*, const ParameterList& params)
+{
+ return params[0].toString().upper();
+}
+
+static ParseNode f_stringIsEmpty(Parser*, const ParameterList& params)
+{
+ return params[0].toString().isEmpty();
+}
+
+static ParseNode f_stringSort(Parser*, const ParameterList& params)
+{
+ if (params.count() == 2 )
+ {
+ QStringList tmplst = QStringList::split(params[1].toString(), params[0].toString());
+ tmplst.sort();
+ return tmplst.join(params[1].toString());
+ }
+ else
+ {
+ QStringList tmplst = QStringList::split("\n", params[0].toString());
+ tmplst.sort();
+ return tmplst.join("\n");
+ }
+}
+static ParseNode f_stringTrim(Parser*, const ParameterList& params)
+{
+ return params[0].toString().stripWhiteSpace();
+}
+
+static ParseNode f_stringPadLeft(Parser*, const ParameterList& params)
+{
+ if (params.count() == 2 )
+ return params[0].toString().rightJustify(params[1].toInt(), ' ', false);
+ QString s = params[2].toString();
+ QChar ch = s.at(0);
+ return params[0].toString().rightJustify(params[1].toInt(), ch, false);
+}
+
+static ParseNode f_stringPadRight(Parser*, const ParameterList& params)
+{
+ if (params.count() == 2 )
+ return params[0].toString().leftJustify(params[1].toInt(), ' ', false);
+ QString s = params[2].toString();
+ QChar ch = s.at(0);
+ return params[0].toString().leftJustify(params[1].toInt(), ch, false);
+}
+
+static ParseNode f_stringSection(Parser*, const ParameterList& params)
+{
+ return params[0].toString().section(params[1].toString(), params[2].toInt(),
+ params.count() == 4 ? params[3].toInt() : params[2].toInt());
+}
+
+static ParseNode f_stringArgs(Parser*, const ParameterList& params)
+{
+ if (params.count() == 2)
+ return params[0].toString().arg(params[1].toString());
+ else if (params.count() == 3)
+ return params[0].toString().arg(params[1].toString()).arg(params[2].toString());
+ else
+ return params[0].toString().arg(params[1].toString()).arg(params[2].toString()).arg(params[3].toString());
+}
+
+static ParseNode f_stringIsNumber(Parser*, const ParameterList& params)
+{
+ bool ok;
+ params[0].toString().toDouble(&ok);
+ return ok;
+}
+
+static ParseNode f_stringToInt(Parser*, const ParameterList& params)
+{
+ return params[0].toString().toInt();
+}
+
+static ParseNode f_stringToDouble(Parser*, const ParameterList& params)
+{
+ return params[0].toString().toDouble();
+}
+
+static ParseNode f_return(Parser* p, const ParameterList& params)
+{
+ KommanderWidget * w = p->currentWidget();
+ if (w)
+ w->setGlobal(w->widgetName() + "_RESULT", params[0].toString());
+ return params[0];
+}
+
+static ParseNode f_stringRound(Parser*, const ParameterList& params)
+{
+ QString s;
+ s.sprintf("%."+params[1].toString()+"f", params[0].toDouble());
+ return s;
+}
+
+/******************* Debug function ********************************/
+static ParseNode f_debug(Parser*, const ParameterList& params)
+{
+ for (uint i=0; i<params.count(); i++)
+ std::cerr << params[i].toString();
+ std::cerr << "\n";
+ fflush(stderr);
+ return ParseNode();
+}
+
+static ParseNode f_echo(Parser*, const ParameterList& params)
+{
+ for (uint i=0; i<params.count(); i++)
+ std::cout << params[i].toString();
+ fflush(stdout);
+ return ParseNode();
+}
+
+
+
+/******************* File function ********************************/
+static ParseNode f_fileRead(Parser*, const ParameterList& params)
+{
+ QFile file(params[0].toString());
+ if (!file.exists() || !file.open(IO_ReadOnly))
+ return ParseNode("");
+ QTextStream text(&file);
+ return text.read();
+}
+
+static ParseNode f_fileWrite(Parser*, const ParameterList& params)
+{
+ QString fname = params[0].toString();
+ if (fname.isEmpty())
+ return 0;
+ QFile file(fname);
+ if (!file.open(IO_WriteOnly))
+ return 0;
+ QTextStream text(&file);
+ for (uint i=1; i<params.count(); i++)
+ text << params[i].toString();
+ return 1;
+}
+
+static ParseNode f_fileAppend(Parser*, const ParameterList& params)
+{
+ QString fname = params[0].toString();
+ if (fname.isEmpty())
+ return 0;
+ QFile file(fname);
+ if (!file.open(IO_WriteOnly | IO_Append))
+ return 0;
+ QTextStream text(&file);
+ for (uint i=1; i<params.count(); i++)
+ text << params[i].toString();
+ return 1;
+}
+
+static ParseNode f_fileExists(Parser*, const ParameterList& params)
+{
+ QFile file(params[0].toString());
+ if (!file.exists())
+ return 0;
+ else
+ return 1;
+}
+
+static ParseNode f_executeSlot(Parser* parser, const ParameterList& params)
+{
+ ParameterList::ConstIterator it = params.begin();
+ QString slotName = (*it).toString()+"(";
+ ++it;
+ QString widgetName = (*it).toString();
+ KommanderWidget* widget = parser->currentWidget();
+ if (!widget)
+ return ParseNode::error("unknown widget");
+ widget = widget->widgetByName(widgetName);
+ if (!widget)
+ return ParseNode::error("unknown widget");
+ QObject *object = widget->object();
+ if (!object)
+ return ParseNode::error("unknown widget");
+ QStrList slotSignatures = object->metaObject()->slotNames(true);
+ QStringList slotNames = QStringList::fromStrList(slotSignatures);
+ int slotNum = -1;
+ uint i = 0;
+ while (i < slotNames.count())
+ {
+ if (slotNames[i].startsWith(slotName))
+ {
+ slotNum = i;
+ break;
+ }
+ i++;
+ }
+ if (slotNum == -1)
+ return ParseNode::error("unknown function");
+ QStringList args;
+ ++it; // skip widget
+ while (it != params.end())
+ {
+ args += (*it).toString();
+ ++it;
+ }
+ InvokeClass* inv = new InvokeClass(0);
+ inv->invokeSlot(object, slotSignatures.at(slotNum), args);
+ inv->deleteLater();
+
+ return ParseNode();
+}
+
+
+/******************* DCOP function ********************************/
+static ParseNode f_dcopid(Parser*, const ParameterList& )
+{
+ return QString(kapp->dcopClient()->appId());
+}
+
+static ParseNode f_pid(Parser*, const ParameterList& )
+{
+ return QString::number(getpid());
+}
+
+static ParseNode f_parentPid(Parser*p, const ParameterList& )
+{
+ return p->variable("_PARENTPID").toString().isEmpty() ? QString::number(getppid()) : p->variable("_PARENTPID");
+}
+
+static ParseNode f_internalDcop(Parser* parser, const ParameterList& params)
+{
+ SpecialFunction function = SpecialInformation::functionObject("DCOP", params[0].toString());
+ int functionId = SpecialInformation::function(Group::DCOP, params[0].toString());
+ if (functionId == -1)
+ return f_executeSlot(parser, params);
+ //return ParseNode::error("unknown function");
+ else if ((uint)function.minArg() > params.count() - 1)
+ return ParseNode::error("too few parameters");
+ else if ((uint)function.maxArg() < params.count() - 1)
+ return ParseNode::error("too many parameters");
+ KommanderWidget* widget = parser->currentWidget();
+ if (widget)
+ widget = widget->widgetByName(params[1].toString());
+ if (!widget)
+ return ParseNode::error("unknown widget");
+ QStringList args;
+ ParameterList::ConstIterator it = params.begin();
+ ++it; // skip function
+ ++it; // skip widget
+ while (it != params.end())
+ {
+ args += (*it).toString();
+ ++it;
+ }
+ return widget->handleDCOP(functionId, args);
+}
+
+
+static ParseNode f_dcop(Parser*, const ParameterList& params)
+{
+ QCString appId = params[0].toString().latin1();
+ QCString object = params[1].toString().latin1();
+ QString function = params[2].toString().section('(', 0, 0);
+ QStringList items = QStringList::split(",", params[2].toString().section('(', 1, 1).section(')', 0, 0));
+ QByteArray byteData;
+ QDataStream byteDataStream(byteData, IO_WriteOnly);
+
+ if (items.count() != params.count() - 3)
+ {
+ qDebug("Wrong number of parameters");
+ return ParseNode();
+ }
+ int i = 3;
+ for (QStringList::Iterator it = items.begin(); it != items.end(); ++it)
+ {
+ *it = (*it).stripWhiteSpace();
+ if (*it == "int")
+ byteDataStream << params[i++].toInt();
+ else if (*it == "long")
+ byteDataStream << params[i++].toInt();
+ else if (*it == "float")
+ byteDataStream << params[i++].toDouble();
+ else if (*it == "double")
+ byteDataStream << params[i++].toDouble();
+ else if (*it == "bool")
+ byteDataStream << (bool)params[i++].toInt();
+ else if (*it == "QStringList")
+ if (params[i].toString().find('\n') != -1)
+ byteDataStream << QStringList::split("\n", params[i++].toString(), true);
+ else
+ byteDataStream << QStringList::split("\\n", params[i++].toString(), true);
+ else
+ byteDataStream << params[i++].toString();
+ }
+ function.append(QString("(%1)").arg(items.join(",")));
+ QCString replyType, byteReply;
+ DCOPClient* cl = KApplication::dcopClient();
+ if (!cl || !cl->call(appId, object, function.latin1(),
+ byteData, replyType, byteReply))
+ {
+ qDebug("DCOP failure");
+ return ParseNode();
+ }
+ QDataStream byteReplyStream(byteReply, IO_ReadOnly);
+ if (replyType == "QString")
+ {
+ QString text;
+ byteReplyStream >> text;
+ return text;
+ }
+ else if(replyType == "int")
+ {
+ int i;
+ byteReplyStream >> i;
+ return i;
+ }
+ else if(replyType == "bool")
+ {
+ bool b;
+ byteReplyStream >> b;
+ return b;
+ }
+ else if (replyType == "QStringList")
+ {
+ QStringList text;
+ byteReplyStream >> text;
+ return text.join("\n");
+ }
+ else if(replyType != "void")
+ {
+ qDebug("%s", QString("DCOP return type %1 is not yet implemented.").arg(replyType.data()).latin1());
+ }
+
+ return ParseNode();
+}
+
+static ParseNode f_createWidget(Parser* p, const ParameterList& params)
+{
+ QString widgetName = params[0].toString();
+ QString widgetType = params[1].toString();
+ QString parentName = params[2].toString();
+ KommanderWidget *widget = p->currentWidget()->widgetByName(parentName);
+ if (!widget)
+ return ParseNode::error("unknown widget");
+ QWidget *parent = dynamic_cast<QWidget*>(widget->object());
+ QWidget *w = KommanderFactory::createWidget(widgetType, parent, widgetName.latin1());
+ if (w)
+ w->adjustSize();
+ return ParseNode();
+}
+
+static ParseNode f_widgetExists(Parser* p, const ParameterList& params)
+{
+ QString widgetName = params[0].toString();
+ KommanderWidget *widget = p->currentWidget()->widgetByName(widgetName);
+ return (widget ? true : false);
+}
+
+
+static ParseNode f_connect(Parser* p, const ParameterList& params)
+{
+ QString sender = params[0].toString();
+ QString signal = QString::number(QSIGNAL_CODE) + params[1].toString();
+ QString receiver = params[2].toString();
+ QString slot = QString::number(QSLOT_CODE) + params[3].toString();
+ KommanderWidget *senderW = p->currentWidget()->widgetByName(sender);
+ if (!senderW)
+ return ParseNode::error("unknown widget");
+ KommanderWidget *receiverW = p->currentWidget()->widgetByName(receiver);
+ if (!receiverW)
+ return ParseNode::error("unknown widget");
+ dynamic_cast<QObject*>(senderW)->connect(dynamic_cast<QObject*>(senderW), signal.ascii(), dynamic_cast<QObject*>(receiverW), slot.ascii());
+ return ParseNode();
+}
+
+static ParseNode f_disconnect(Parser* p, const ParameterList& params)
+{
+ QString sender = params[0].toString();
+ QString signal = QString::number(QSIGNAL_CODE) + params[1].toString();
+ QString receiver = params[2].toString();
+ QString slot = QString::number(QSLOT_CODE) + params[3].toString();
+ KommanderWidget *senderW = p->currentWidget()->widgetByName(sender);
+ if (!senderW)
+ return ParseNode::error("unknown widget");
+ KommanderWidget *receiverW = p->currentWidget()->widgetByName(receiver);
+ if (!receiverW)
+ return ParseNode::error("unknown widget");
+ dynamic_cast<QObject*>(senderW)->disconnect(dynamic_cast<QObject*>(senderW), signal.ascii(), dynamic_cast<QObject*>(receiverW), slot.ascii());
+ return ParseNode();
+}
+
+
+static ParseNode f_exec(Parser* P, const ParameterList& params)
+{
+ MyProcess proc(P->currentWidget());
+ QString text;
+// qDebug("Trying %s", params[0].toString().latin1());
+ if (params.count() > 1)
+ text = proc.run(params[0].toString().local8Bit(), params[1].toString());
+ else
+ text = proc.run(params[0].toString().local8Bit());
+ return text;
+}
+
+static ParseNode f_execBackground(Parser* P, const ParameterList& params)
+{
+ MyProcess proc(P->currentWidget());
+ proc.setBlocking(false);
+ QString text;
+ qDebug("Trying %s", params[0].toString().latin1());
+ if (params.count() > 1)
+ text = proc.run(params[0].toString().local8Bit(), params[1].toString());
+ else
+ text = proc.run(params[0].toString().local8Bit());
+ return text;
+}
+
+static ParseNode f_dialog(Parser* P, const ParameterList& params)
+{
+ QString a_dialog = params[0].toString().local8Bit();
+ QString a_params = params[1].toString().local8Bit();
+
+ QString pFileName = P->currentWidget()->global("_KDDIR") + QString("/") + a_dialog;
+ QFileInfo pDialogFile(pFileName);
+ if (!pDialogFile.exists())
+ {
+ pFileName = a_dialog;
+ pDialogFile.setFile(pFileName);
+ if (!pDialogFile.exists())
+ return QString();
+ }
+ QString cmd = QString("kmdr-executor %1 %2 _PARENTPID=%3 _PARENTDCOPID=kmdr-executor-%4")
+ .arg(pFileName).arg(a_params).arg(getpid()).arg(getpid());
+
+ MyProcess proc(P->currentWidget());
+ QString text;
+ text = proc.run(cmd);
+
+ return text;
+}
+
+static ParseNode f_i18n(Parser*, const ParameterList& params)
+{
+ return KGlobal::locale()->translate(params[0].toString());
+}
+
+static ParseNode f_env(Parser*, const ParameterList& params)
+{
+ return QString(getenv(params[0].toString().latin1()));
+}
+
+/******************* Array functions ********************************/
+static ParseNode f_arrayClear(Parser* P, const ParameterList& params)
+{
+ P->unsetArray(params[0].toString());
+ return ParseNode();
+}
+
+static ParseNode f_arrayCount(Parser* P, const ParameterList& params)
+{
+ if (P->isArray(params[0].toString()))
+ return (uint)(P->array(params[0].toString()).count());
+ else
+ return (uint)0;
+}
+
+static ParseNode f_arrayKeys(Parser* P, const ParameterList& params)
+{
+ if (!P->isArray(params[0].toString()))
+ return ParseNode();
+ return QStringList(P->array(params[0].toString()).keys()).join("\n");
+}
+
+static ParseNode f_arrayValues(Parser* P, const ParameterList& params)
+{
+ if (!P->isArray(params[0].toString()))
+ return ParseNode();
+ QValueList<ParseNode> values = P->array(params[0].toString()).values();
+ QString array;
+ for (QValueList<ParseNode>::ConstIterator it = values.begin(); it != values.end(); ++it )
+ array += (*it).toString() + '\n';
+ return array;
+}
+
+static ParseNode f_arrayRemove(Parser* P, const ParameterList& params)
+{
+ if (P->isArray(params[0].toString()))
+ P->unsetArray(params[0].toString(), params[1].toString());
+ return ParseNode();
+}
+
+static ParseNode f_arrayToString(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ if (!P->isArray(name))
+ return ParseNode();
+ QString array;
+ QStringList keys = P->array(name).keys();
+ QValueList<ParseNode> values = P->array(name).values();
+
+ QStringList::Iterator it = keys.begin();
+ QValueList<ParseNode>::Iterator itval = values.begin();
+ while (*it)
+ {
+ array += QString("%1\t%2\n").arg(*it).arg((*itval).toString());
+ ++it;
+ ++itval;
+ }
+ return array;
+}
+
+static ParseNode f_arrayFromString(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ QStringList lines = QStringList::split("\n", params[1].toString());
+ for (QStringList::Iterator it = lines.begin(); it != lines.end(); ++it )
+ {
+ QString key = (*it).section('\t', 0, 0).stripWhiteSpace();
+ if (!key.isEmpty())
+ P->setArray(name, key, (*it).section('\t', 1));
+ }
+ return ParseNode();
+}
+
+
+static ParseNode f_arrayIndexedFromString(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ QStringList lines;
+ if (params.count() == 2)
+ lines = QStringList::split('\t', params[1].toString(), true);
+ else
+ lines = QStringList::split(params[2].toString(), params[1].toString(), true);
+ int i = 0;
+ for (QStringList::Iterator it = lines.begin(); it != lines.end(); ++it )
+ {
+ P->setArray(name, QString::number(i), (*it));
+ i++;
+ }
+ return ParseNode();
+}
+
+static ParseNode f_arrayIndexedToString(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ if (!P->isArray(name))
+ return ParseNode();
+ QString separator = "\t";
+ if (params.count() == 2)
+ separator = params[1].toString();
+ QString array;
+ int count = P->array(name).keys().count();
+ QValueList<ParseNode> values = P->array(name).values();
+
+ for (int i = 0; i < count; i++)
+ {
+ if (i != 0)
+ array.append(separator);
+ array.append(P->arrayValue(name, QString::number(i)).toString());
+ }
+ return array;
+}
+
+static ParseNode f_arrayIndexedRemoveElements(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ if (!P->isArray(name))
+ return ParseNode();
+ int key = params[1].toInt();
+ int num = 0;
+ if (params.count() == 3)
+ num = params[2].toInt() - 1;
+ if (num < 0)
+ num = 0;
+ QString array;
+ QStringList keys = P->array(name).keys();
+ int count = keys.count();
+ if (key + num > count - 1 || key < 0)
+ return ParseNode(); //out of index range
+ for (int i = 0; i < count; i++)
+ {
+ if (keys.contains(QString::number(i)) != 1)
+ return ParseNode(); //array is not indexed
+ }
+ for (int i = key; i <= key + num; i++)
+ {
+ P->unsetArray(name, QString::number(i));
+ }
+ int j = key;
+ for (int i = key + num + 1; i < count; i++)
+ {
+ P->setArray(name, QString::number(j), P->arrayValue(name, QString::number(i)));
+ j++;
+ }
+ for (int i = 1; i <= num + 1; i++)
+ {
+ P->unsetArray(name, QString::number(count - i));
+ }
+ return ParseNode();
+}
+
+
+static ParseNode f_arrayIndexedInsertElements(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ if (!P->isArray(name))
+ return ParseNode();
+ int key = params[1].toInt();
+ QStringList keys = P->array(name).keys();
+ int count = keys.count();
+ if (key > count || key < 0)
+ return ParseNode(); //out of index range
+ QString separator = "\t";
+ if (params.count() == 4)
+ separator = params[3].toString();
+ QStringList elements = QStringList::split(separator, params[2].toString(), true);
+ int num = elements.count();
+ for (int i = count - 1; i >= key; i--)
+ {
+ P->setArray(name, QString::number(i + num), P->arrayValue(name, QString::number(i)));
+ }
+ int i = key;
+ for (QStringList::Iterator it = elements.begin(); it != elements.end(); ++it )
+ {
+ P->setArray(name, QString::number(i), (*it));
+ i++;
+ }
+ return ParseNode();
+}
+
+static ParseNode f_arrayFlipCopy(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ if (!P->isArray(name))
+ return ParseNode();
+ QString arr = params[1].toString();
+ const QMap<QString, ParseNode> A = P->array(name);
+ for (QMapConstIterator<QString, ParseNode> It = A.begin(); It != A.end(); ++It )
+ {
+ P->setArray(arr, (*It).toString(), It.key() );
+ }
+ return ParseNode();
+}
+
+/*********** matrix (2D array) functions ********/
+static ParseNode f_matrixClear(Parser* P, const ParameterList& params)
+{
+ P->unsetMatrix(params[0].toString());
+ return ParseNode();
+}
+
+static ParseNode f_matrixToString(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ if (!P->isMatrix(name))
+ return ParseNode();
+ QString matrix;
+ QString colhead;
+ const QMap<QString, QMap<QString, ParseNode> > A = P->matrix(name);
+ int r = 0;
+ int c = 0;
+ int frow = 0;
+ int fcol = 0;
+ if (params.count() >= 1)
+ frow = params[1].toInt(); //row headings
+ if (params.count() >= 2)
+ fcol = params[2].toInt(); //col headings
+ QString tmp;
+ typedef QMap<int, QString> col_map;
+ col_map col_head;
+ for (QMapConstIterator<QString, QMap<QString, ParseNode> > It1 = A.begin(); It1 != A.end(); ++It1 )
+ {
+ const QMap<QString, ParseNode> B = It1.data();
+ for (QMapConstIterator<QString, ParseNode> It2 = B.begin(); It2 != B.end(); ++It2 )
+ {
+ bool colfound = false;
+ for (QMapConstIterator<int, QString> It3 = col_head.begin(); It3 != col_head.end(); ++It3 )
+ {
+ if (It2.key() == (*It3))
+ {
+ colfound = true;
+ break;
+ }
+ }
+ if (!colfound)
+ {
+ col_head[c] = It2.key();
+ if (c > 0)
+ colhead.append("\t");
+ colhead.append(It2.key());
+ c++;
+ }
+ }
+ }
+ if (fcol && frow)
+ colhead.prepend("\t");
+ for (QMapConstIterator<QString, QMap<QString, ParseNode> > It1 = A.begin(); It1 != A.end(); ++It1)
+ {
+ if (r > 0 )
+ matrix.append("\n");
+ if (frow) //add row keys
+ {
+ tmp = It1.key();
+ matrix.append(tmp+"\t");
+ }
+ c = 0;
+ const QMap<int, QString> B = col_head;
+ for (QMapConstIterator<int, QString> It2 = B.begin(); It2 != B.end(); ++It2 )
+ {
+ if (c > 0)
+ matrix.append("\t");
+ matrix.append(P->matrixValue(name, It1.key(), (*It2) ).toString());
+ c++;
+ }
+ r++;
+ }
+ if (fcol)
+ matrix.prepend(colhead+"\n");
+ return matrix;
+}
+
+static ParseNode f_matrixFromString(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ QStringList rows = QStringList::split("\n", params[1].toString());
+ int r = 0;
+ int frow = 0;
+ int fcol = 0;
+ QString rkey;
+ QMap<int, QString> colhead;
+ if (params.count() > 1)
+ frow = params[2].toInt(); //row headings
+ if (params.count() > 2)
+ fcol = params[3].toInt(); //col headings
+ for (QStringList::Iterator itr = rows.begin(); itr != rows.end(); ++itr )
+ {
+ int c = 0;
+ QString ckey;
+ QStringList cols = QStringList::split("\t", (*itr), true);
+ for (QStringList::Iterator itc = cols.begin(); itc != cols.end(); ++itc )
+ {
+ QString val = (*itc).stripWhiteSpace();
+ if (frow)
+ {
+ if (c == 0 && !val.isEmpty())
+ {
+ rkey = val;
+ }
+ }
+ else
+ rkey = QString::number(r);
+ if (fcol && r == 0 && c >= 0)
+ {
+ if (!val.isEmpty())
+ colhead[c] = val;
+ else
+ colhead[c] = QString::number(c);
+ }
+ if (!val.isEmpty() && !(c == 0 && frow) && !(r == 0 && fcol))
+ {
+ if (fcol)
+ ckey = colhead[c];
+ else
+ ckey = QString::number(c);
+ P->setMatrix(name, rkey, ckey, val);
+ }
+ c++;
+ }
+ r++;
+ }
+ return ParseNode();
+}
+
+static ParseNode f_matrixRows(Parser* P, const ParameterList& params)
+{
+ if (P->isMatrix(params[0].toString()))
+ return (uint)(P->matrix(params[0].toString()).count());
+ else
+ return (uint)0;
+
+}
+
+static ParseNode f_matrixRowKeys(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ if (!P->isMatrix(name))
+ return ParseNode();
+ QString matrix;
+ QString tmp;
+ QString separator = "\t";
+ if (params.count() == 2)
+ separator = params[1].toString();
+ const QMap<QString, QMap<QString, ParseNode> > A = P->matrix(name);
+ int r = 0;
+ for (QMapConstIterator<QString, QMap<QString, ParseNode> > It1 = A.begin(); It1 != A.end(); ++It1)
+ {
+ if (r > 0 )
+ matrix.append(separator);
+ tmp = It1.key();
+ matrix.append(tmp);
+ r++;
+ }
+ return matrix;
+}
+
+static ParseNode f_matrixFindRow(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ if (!P->isMatrix(name))
+ return ParseNode();
+ QString col = params[1].toString();
+ QString val = params[2].toString();
+ QString tmp;
+ int i = 0;
+ int find;
+ if (params.count() == 4)
+ find = params[3].toInt();
+ else
+ find = 0;
+ const QMap<QString, QMap<QString, ParseNode> > A = P->matrix(name);
+ for (QMapConstIterator<QString, QMap<QString, ParseNode> > It = A.begin(); It != A.end(); ++It)
+ {
+ if (val == P->matrixValue(name, It.key(), col).toString())
+ {
+ if (find == i)
+ return It.key();
+ i++;
+ }
+ }
+ return ParseNode();
+}
+
+static ParseNode f_matrixCols(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ if (P->isMatrix(name))
+ {
+ typedef QMap<int, QString> col_map;
+ col_map col_head;
+ uint cols = 0;
+ const QMap<QString, QMap<QString, ParseNode> > A = P->matrix(name);
+ for (QMapConstIterator<QString, QMap<QString, ParseNode> > It = A.begin(); It != A.end(); ++It)
+ {
+ const QMap<QString, ParseNode> B = It.data();
+ for (QMapConstIterator<QString, ParseNode> It2 = B.begin(); It2 != B.end(); ++It2 )
+ {
+ bool colfound = false;
+ for (QMapConstIterator<int, QString> It3 = col_head.begin(); It3 != col_head.end(); ++It3 )
+ {
+ if (It2.key() == (*It3))
+ {
+ colfound = true;
+ break;
+ }
+ }
+ if (!colfound)
+ {
+ col_head[cols] = It2.key();
+ cols++;
+ }
+ }
+ }
+ return (uint)cols;
+ }
+ else
+ return (uint)0;
+}
+
+static ParseNode f_matrixColumnKeys(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ if (!P->isMatrix(name))
+ return ParseNode();
+ QString matrix;
+ QString tmp;
+ QString separator = "\t";
+ if (params.count() == 2)
+ separator = params[1].toString();
+ const QMap<QString, QMap<QString, ParseNode> > A = P->matrix(name);
+ QStringList colnames;
+ int c =0;
+
+ typedef QMap<int, QString> col_map;
+ col_map col_head;
+ for (QMapConstIterator<QString, QMap<QString, ParseNode> > It1 = A.begin(); It1 != A.end(); ++It1 )
+ {
+ const QMap<QString, ParseNode> B = It1.data();
+ for (QMapConstIterator<QString, ParseNode> It2 = B.begin(); It2 != B.end(); ++It2 )
+ {
+ bool colfound = false;
+ for (QMapConstIterator<int, QString> It3 = col_head.begin(); It3 != col_head.end(); ++It3 )
+ {
+ if (It2.key() == (*It3))
+ {
+ colfound = true;
+ break;
+ }
+ }
+ if (!colfound)
+ {
+ col_head[c] = It2.key();
+ if (c > 0)
+ matrix.append(separator);
+ matrix.append(It2.key());
+ c++;
+ }
+ }
+ }
+ return matrix;
+}
+
+static ParseNode f_matrixRowToArray(Parser* P, const ParameterList& params)
+{
+ QString mtr = params[0].toString();
+ if (P->isMatrix(mtr))
+ {
+ const QMap<QString, QMap<QString, ParseNode> > A = P->matrix(mtr);
+ int i = 0;
+ int rclear = 1;
+ int ridx = 1;
+ if (params.count() > 2)
+ rclear = params[3].toInt();
+ if (params.count() > 3)
+ ridx = params[4].toInt();
+ QString arr = params[2].toString();
+ if (rclear)
+ P->unsetArray(arr);
+ for (QMapConstIterator<QString, QMap<QString, ParseNode> > It1 = A.begin(); It1 != A.end(); ++It1)
+ {
+ if (It1.key() == params[1].toString() )
+ {
+ const QMap<QString, ParseNode> B = It1.data();
+ for (QMapConstIterator<QString, ParseNode> It2 = B.begin(); It2 != B.end(); ++It2 )
+ {
+ if (ridx)
+ P->setArray(arr, QString::number(i), (*It2));
+ else
+ P->setArray(arr, It2.key(), (*It2));
+ i++;
+ }
+ }
+ }
+ }
+ return ParseNode();
+}
+
+static ParseNode f_matrixColumnToArray(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ if (P->isMatrix(name))
+ {
+ const QMap<QString, QMap<QString, ParseNode> > A = P->matrix(name);
+ for (QMapConstIterator<QString, QMap<QString, ParseNode> > It1 = A.begin(); It1 != A.end(); ++It1)
+ {
+ const QMap<QString, ParseNode> B = It1.data();
+ for (QMapConstIterator<QString, ParseNode> It2 = B.begin(); It2 != B.end(); ++It2 )
+ {
+ if (It2.key() == params[1].toString() )
+ {
+ P->setArray(params[2].toString(), It1.key(), (*It2));
+ }
+ }
+ }
+ }
+ return ParseNode();
+}
+
+static ParseNode f_matrixColumnToIndexedArray(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ if (P->isMatrix(name))
+ {
+ const QMap<QString, QMap<QString, ParseNode> > A = P->matrix(name);
+ int i = 0;
+ for (QMapConstIterator<QString, QMap<QString, ParseNode> > It1 = A.begin(); It1 != A.end(); ++It1)
+ {
+ const QMap<QString, ParseNode> B = It1.data();
+ for (QMapConstIterator<QString, ParseNode> It2 = B.begin(); It2 != B.end(); ++It2 )
+ {
+ if (It2.key() == params[1].toString() )
+ {
+ P->setArray(params[2].toString(), QString::number(i), (*It2));
+ i++;
+ }
+ }
+ }
+ }
+ return ParseNode();
+}
+
+static ParseNode f_matrixAddRow(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ QString rowkey = params[1].toString();
+ QStringList rows = QStringList::split("\n", params[2].toString());
+ for (QStringList::Iterator itr = rows.begin(); itr != rows.end(); ++itr )
+ {
+ QStringList cols = QStringList::split("\t", (*itr));
+ if (cols.count() != 2 )
+ continue;
+ QStringList::Iterator itc = cols.begin();
+ QString rkey = (*itc).stripWhiteSpace();
+ ++itc;
+ QString rval = (*itc).stripWhiteSpace();
+ if (!rkey.isEmpty() && !rval.isEmpty())
+ P->setMatrix(name, rowkey, rkey, rval);
+ }
+ return ParseNode();
+}
+
+static ParseNode f_matrixRemoveRow(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ if (!P->isMatrix(name))
+ return ParseNode();
+ QString rowkey = params[1].toString();
+ int found = 0;
+ const QMap<QString, QMap<QString, ParseNode> > A = P->matrix(name);
+ if (A.contains(rowkey))
+ {
+ P->unsetMatrix(name, rowkey);
+ found = 1;
+ }
+ return QString::number(found);
+}
+/*
+static ParseNode f_matrixAddColumn(Parser* P, const ParameterList& params)
+{
+}
+*/
+static ParseNode f_matrixRemoveColumn(Parser* P, const ParameterList& params)
+{
+ QString name = params[0].toString();
+ QString colkey = params[1].toString();
+ if (!P->isMatrix(name))
+ return ParseNode();
+ int found = 0;
+ const QMap<QString, QMap<QString, ParseNode> > A = P->matrix(name);
+ for (QMapConstIterator<QString, QMap<QString, ParseNode> > It = A.begin(); It != A.end(); ++It)
+ {
+ if (A[It.key()].contains(colkey))
+ found = 1;
+ P->unsetMatrix(name, It.key(), colkey);
+ }
+ return QString::number(found);
+}
+/*
+static ParseNode f_matrixIndexedCopy(Parser* P, const ParameterList& params)
+{
+}
+*/
+/********** input functions *********************/
+static ParseNode f_inputColor(Parser*, const ParameterList& params)
+{
+ QColor color;
+ if (params.count())
+ color.setNamedColor(params[0].toString());
+ KColorDialog::getColor(color);
+ return color.name();
+}
+
+static ParseNode f_inputText(Parser*, const ParameterList& params)
+{
+ QString value;
+ if (params.count() > 2)
+ value = params[2].toString();
+ return KInputDialog::getText(params[0].toString(), params[1].toString(), value);
+}
+
+static ParseNode f_inputPassword(Parser*, const ParameterList& params)
+{
+ QCString value;
+ if (params.count() > 1)
+ value = params[1].toString().local8Bit();
+ KPasswordDialog::getPassword(value, params[0].toString());
+ return QString::fromLocal8Bit(value);
+}
+
+static ParseNode f_inputValue(Parser*, const ParameterList& params)
+{
+ return KInputDialog::getInteger(params[0].toString(), params[1].toString(),
+ params[2].toInt(), params[3].toInt(), params[4].toInt(),
+ params.count() > 5 ? params[5].toInt() : 1,
+ (bool*)0);
+}
+
+static ParseNode f_inputValueDouble(Parser*, const ParameterList& params)
+{
+ return KInputDialog::getDouble(params[0].toString(), params[1].toString(),
+ params[2].toDouble(), params[3].toDouble(), params[4].toDouble(),
+ params.count() > 5 ? params[5].toDouble() : 0.1);
+}
+
+static ParseNode f_inputOpenFile(Parser*, const ParameterList& params)
+{
+ QString startdir, filter, caption;
+ if (params.count() > 0)
+ startdir = params[0].toString();
+ if (params.count() > 1)
+ filter = params[1].toString();
+ if (params.count() > 2)
+ caption = params[2].toString();
+ return KFileDialog::getOpenFileName(startdir, filter, 0, caption);
+}
+
+static ParseNode f_inputOpenFiles(Parser*, const ParameterList& params)
+{
+ QString startdir, filter, caption;
+ if (params.count() > 0)
+ startdir = params[0].toString();
+ if (params.count() > 1)
+ filter = params[1].toString();
+ if (params.count() > 2)
+ caption = params[2].toString();
+ return KFileDialog::getOpenFileNames(startdir, filter, 0, caption).join("\n");
+}
+
+static ParseNode f_inputSaveFile(Parser*, const ParameterList& params)
+{
+ QString startdir, filter, caption;
+ if (params.count() > 0)
+ startdir = params[0].toString();
+ if (params.count() > 1)
+ filter = params[1].toString();
+ if (params.count() > 2)
+ caption = params[2].toString();
+ return KFileDialog::getSaveFileName(startdir, filter, 0, caption);
+}
+
+static ParseNode f_inputDirectory(Parser*, const ParameterList& params)
+{
+ QString startdir, caption;
+ if (params.count() > 0)
+ startdir = params[0].toString();
+ if (params.count() > 1)
+ caption = params[1].toString();
+ return KFileDialog::getExistingDirectory(startdir, 0, caption);
+}
+
+static ParseNode f_message_info(Parser*, const ParameterList& params)
+{
+ QString text, caption;
+ if (params.count() > 0)
+ text = params[0].toString();
+ if (params.count() > 1)
+ caption = params[1].toString();
+ KMessageBox::information(0, text, caption);
+ return 1;
+}
+
+static ParseNode f_message_error(Parser*, const ParameterList& params)
+{
+ QString text, caption;
+ if (params.count() > 0)
+ text = params[0].toString();
+ if (params.count() > 1)
+ caption = params[1].toString();
+ KMessageBox::error(0, text, caption);
+ return 1;
+}
+
+static ParseNode f_message_warning(Parser*, const ParameterList& params)
+{
+ int result;
+ QString text, caption, button1, button2, button3;
+ if (params.count() > 0)
+ text = params[0].toString();
+ if (params.count() > 1)
+ caption = params[1].toString();
+ if (params.count() > 2)
+ button1 = params[2].toString();
+ if (params.count() > 3)
+ button2 = params[3].toString();
+ if (params.count() > 4)
+ button3 = params[4].toString();
+ if (button1.isNull())
+ result = KMessageBox::warningYesNo(0, text, caption);
+ else if (button3.isNull())
+ result = KMessageBox::warningYesNo(0, text, caption, button1, button2);
+ else
+ result = KMessageBox::warningYesNoCancel(0, text, caption, button1, button2, button3);
+ switch(result)
+ {
+ case KMessageBox::Yes:
+ return 1;
+ case KMessageBox::No:
+ return 2;
+ case KMessageBox::Cancel:
+ return 3;
+ default:
+ return 0;
+ }
+}
+
+static ParseNode f_message_question(Parser*, const ParameterList& params)
+{
+ int result;
+ QString text, caption, button1, button2, button3;
+ if (params.count() > 0)
+ text = params[0].toString();
+ if (params.count() > 1)
+ caption = params[1].toString();
+ if (params.count() > 2)
+ button1 = params[2].toString();
+ if (params.count() > 3)
+ button2 = params[3].toString();
+ if (params.count() > 4)
+ button3 = params[4].toString();
+ if (button1.isNull())
+ result = KMessageBox::questionYesNo(0, text, caption);
+ else if (button3.isNull())
+ result = KMessageBox::questionYesNo(0, text, caption, button1, button2);
+ else
+ result = KMessageBox::questionYesNoCancel(0, text, caption, button1, button2, button3);
+ switch(result)
+ {
+ case KMessageBox::Yes:
+ return 1;
+ case KMessageBox::No:
+ return 2;
+ case KMessageBox::Cancel:
+ return 3;
+ default:
+ return 0;
+ }
+}
+
+static ParseNode f_read_setting(Parser* parser, const ParameterList& params)
+{
+ QString def;
+ if (params.count() > 1)
+ def = params[1].toString();
+ if (parser->currentWidget())
+ {
+ QString fname = parser->currentWidget()->fileName();
+ if (fname.isEmpty())
+ return ParseNode();
+ KConfig cfg("kommanderrc", true);
+ cfg.setGroup(fname);
+ return cfg.readEntry(params[0].toString(), def);
+ }
+ return ParseNode();
+}
+
+static ParseNode f_write_setting(Parser* parser, const ParameterList& params)
+{
+ if (parser->currentWidget())
+ {
+ QString fname = parser->currentWidget()->fileName();
+ if (fname.isEmpty())
+ return ParseNode();
+ KConfig cfg("kommanderrc", false);
+ cfg.setGroup(fname);
+ cfg.writeEntry(params[0].toString(), params[1].toString());
+ }
+ return ParseNode();
+}
+
+
+
+
+void ParserData::registerStandardFunctions()
+{
+ registerFunction("str_length", Function(&f_stringLength, ValueInt, ValueString));
+ registerFunction("str_contains", Function(&f_stringContains, ValueInt, ValueString, ValueString));
+ registerFunction("str_compare", Function(&f_stringCompare, ValueInt, ValueString, ValueString));
+ registerFunction("str_find", Function(&f_stringFind, ValueInt, ValueString, ValueString, ValueInt, 2));
+ registerFunction("str_findrev", Function(&f_stringFindRev, ValueInt, ValueString, ValueString, ValueInt, 2));
+ registerFunction("str_left", Function(&f_stringLeft, ValueString, ValueString, ValueInt));
+ registerFunction("str_count", Function(&f_stringCount, ValueInt, ValueString, ValueString));
+ registerFunction("str_right", Function(&f_stringRight, ValueString, ValueString, ValueInt));
+ registerFunction("str_mid", Function(&f_stringMid, ValueString, ValueString, ValueInt, ValueInt, 2));
+ registerFunction("str_remove", Function(&f_stringRemove, ValueString, ValueString, ValueString));
+ registerFunction("str_replace", Function(&f_stringReplace, ValueString, ValueString, ValueString, ValueString));
+ registerFunction("str_lower", Function(&f_stringLower, ValueString, ValueString));
+ registerFunction("str_upper", Function(&f_stringUpper, ValueString, ValueString));
+ registerFunction("str_section", Function(&f_stringSection, ValueString, ValueString, ValueString, ValueInt, ValueInt, 3));
+ registerFunction("str_args", Function(&f_stringArgs, ValueString, ValueString, 2, 4));
+ registerFunction("str_isnumber", Function(&f_stringIsNumber, ValueInt, ValueString));
+ registerFunction("str_isempty", Function(&f_stringIsEmpty, ValueInt, ValueString));
+ registerFunction("str_toint", Function(&f_stringToInt, ValueString, ValueInt, 1));
+ registerFunction("str_todouble", Function(&f_stringToDouble, ValueString, ValueDouble, 1));
+ registerFunction("str_round", Function(&f_stringRound, ValueInt, ValueDouble, ValueInt, 2));
+ registerFunction("str_sort", Function(&f_stringSort, ValueString, ValueString, ValueString, 1, 2));
+ registerFunction("str_trim", Function(&f_stringTrim, ValueString, ValueString, 1));
+ registerFunction("str_padLeft", Function(&f_stringPadLeft, ValueString, ValueInt, ValueString, ValueString, 1, 2));
+ registerFunction("str_padRight", Function(&f_stringPadRight, ValueString, ValueInt, ValueString, ValueString, 1, 2));
+ registerFunction("return", Function(&f_return, ValueNone, ValueString, 1, 1));
+ registerFunction("debug", Function(&f_debug, ValueNone, ValueString, 1, 100));
+ registerFunction("echo", Function(&f_echo, ValueNone, ValueString, 1, 100));
+ registerFunction("file_read", Function(&f_fileRead, ValueString, ValueString, 1, 1));
+ registerFunction("file_write", Function(&f_fileWrite, ValueInt, ValueString, ValueString, 2, 100));
+ registerFunction("file_append", Function(&f_fileAppend, ValueInt, ValueString, ValueString, 2, 100));
+ registerFunction("file_exists", Function(&f_fileExists, ValueString, ValueString, 1, 1));
+ registerFunction("internalDcop", Function(&f_internalDcop, ValueString, ValueString, ValueString, 2, 100));
+ registerFunction("executeSlot", Function(&f_executeSlot, ValueString, ValueString, ValueString, 2, 100));
+ registerFunction("createWidget", Function(&f_createWidget, ValueString, ValueString, ValueString, 3, 100));
+ registerFunction("widgetExists", Function(&f_widgetExists, ValueString, 1));
+ registerFunction("connect", Function(&f_connect, ValueString, ValueString, ValueString, ValueString, 4, 4));
+ registerFunction("disconnect", Function(&f_disconnect, ValueString, ValueString, ValueString, ValueString, 4, 4));
+ registerFunction("dcop", Function(&f_dcop, ValueString, ValueString, ValueString, 3, 100));
+ registerFunction("dcopid", Function(&f_dcopid, ValueString, ValueNone, 0, 0));
+ registerFunction("pid", Function(&f_pid, ValueString, ValueNone, 0, 0));
+ registerFunction("parentPid", Function(&f_parentPid, ValueString, ValueNone, 0, 0));
+ registerFunction("dialog", Function(&f_dialog, ValueString, ValueString, ValueString, 1, 2));
+ registerFunction("exec", Function(&f_exec, ValueString, ValueString, ValueString, 1, 2));
+ registerFunction("execBackground", Function(&f_execBackground, ValueString, ValueString, ValueString, 1, 2));
+ registerFunction("i18n", Function(&f_i18n, ValueString, ValueString));
+ registerFunction("env", Function(&f_env, ValueString, ValueString));
+ registerFunction("readSetting", Function(&f_read_setting, ValueString, ValueString, ValueString, 1));
+ registerFunction("writeSetting", Function(&f_write_setting, ValueNone, ValueString, ValueString));
+ registerFunction("array_clear", Function(&f_arrayClear, ValueNone, ValueString));
+ registerFunction("array_count", Function(&f_arrayCount, ValueInt, ValueString));
+ registerFunction("array_keys", Function(&f_arrayKeys, ValueString, ValueString));
+ registerFunction("array_values", Function(&f_arrayValues, ValueString, ValueString));
+ registerFunction("array_tostring", Function(&f_arrayToString, ValueString, ValueString));
+ registerFunction("array_fromstring", Function(&f_arrayFromString, ValueNone, ValueString, ValueString));
+ registerFunction("array_indexedfromstring", Function(&f_arrayIndexedFromString, ValueNone, ValueString, ValueString, ValueString, 2, 3));
+ registerFunction("array_indexedtostring", Function(&f_arrayIndexedToString, ValueNone, ValueString, ValueString, 1, 2));
+ registerFunction("array_indexedRemoveElements", Function(&f_arrayIndexedRemoveElements, ValueNone, ValueString, ValueInt, ValueInt, 2 , 3));
+ registerFunction("array_indexedInsertElements", Function(&f_arrayIndexedInsertElements, ValueNone, ValueString, ValueInt, ValueString, ValueString, 3, 4));
+ registerFunction("array_remove", Function(&f_arrayRemove, ValueNone, ValueString, ValueString));
+ registerFunction("matrix_fromString", Function(&f_matrixFromString, ValueNone, ValueString, ValueString, ValueInt, ValueInt, 2, 4));
+ registerFunction("matrix_toString", Function(&f_matrixToString, ValueNone, ValueString, ValueInt, ValueInt, 1, 3));
+ registerFunction("matrix_clear", Function(&f_matrixClear, ValueNone, ValueString));
+ registerFunction("matrix_rows", Function(&f_matrixRows, ValueInt, ValueString));
+ registerFunction("matrix_columns", Function(&f_matrixCols, ValueInt, ValueString));
+ registerFunction("matrix_rowToArray", Function(&f_matrixRowToArray, ValueNone, ValueString, ValueInt, ValueString, ValueInt, ValueInt, 3, 5));
+ registerFunction("matrix_columnToArray", Function(&f_matrixColumnToArray, ValueNone, ValueString, ValueString, ValueString, 3, 3));
+ registerFunction("matrix_columnToIndexedArray", Function(&f_matrixColumnToIndexedArray, ValueNone, ValueString, ValueString, ValueString, 3, 3));
+ registerFunction("array_flipCopy", Function(&f_arrayFlipCopy, ValueNone, ValueString, ValueString, 2, 2));
+ registerFunction("matrix_rowKeys", Function(&f_matrixRowKeys, ValueString, ValueString, ValueString, 1, 2));
+ registerFunction("matrix_columnKeys", Function(&f_matrixColumnKeys, ValueString, ValueString, ValueString, 1, 2));
+ registerFunction("matrix_addRow", Function(&f_matrixAddRow, ValueNone, ValueString, ValueString, ValueString, 3, 3));
+ registerFunction("matrix_removeRow", Function(&f_matrixRemoveRow, ValueInt, ValueString, ValueString, 2, 2));
+ registerFunction("matrix_removeColumn", Function(&f_matrixRemoveColumn, ValueInt, ValueString, ValueString, 2, 2));
+ registerFunction("matrix_findRow", Function(&f_matrixFindRow, ValueString, ValueString, ValueString, ValueString, 3, 4));
+
+ registerFunction("input_color", Function(&f_inputColor, ValueString, ValueString, 0));
+ registerFunction("input_text", Function(&f_inputText, ValueString, ValueString, ValueString, ValueString, 2));
+ registerFunction("input_password", Function(&f_inputPassword, ValueString, ValueString, ValueString, 1));
+ registerFunction("input_value", Function(&f_inputValue, ValueInt, ValueString, ValueString, ValueInt, ValueInt,
+ ValueInt, ValueInt, 6));
+ registerFunction("input_double", Function(&f_inputValueDouble, ValueDouble, ValueString, ValueString, ValueDouble, ValueDouble,
+ ValueDouble, ValueDouble, 6));
+ registerFunction("input_openfile", Function(&f_inputOpenFile, ValueString, ValueString, ValueString, ValueString, 0));
+ registerFunction("input_openfiles", Function(&f_inputOpenFiles, ValueString, ValueString, ValueString, ValueString, 0));
+ registerFunction("input_savefile", Function(&f_inputSaveFile, ValueString, ValueString, ValueString, ValueString, 0));
+ registerFunction("input_directory", Function(&f_inputDirectory, ValueString, ValueString, ValueString, 0));
+ registerFunction("message_info", Function(&f_message_info, ValueInt, ValueString, ValueString, 1));
+ registerFunction("message_error", Function(&f_message_error, ValueInt, ValueString, ValueString, 1));
+ registerFunction("message_warning", Function(&f_message_warning, ValueInt, ValueString, ValueString,
+ ValueString, ValueString, ValueString, 1));
+ registerFunction("message_question", Function(&f_message_question, ValueInt, ValueString, ValueString,
+ ValueString, ValueString, ValueString, 1));
+}
+
diff --git a/kommander/widget/invokeclass.cpp b/kommander/widget/invokeclass.cpp
new file mode 100644
index 00000000..b5de4678
--- /dev/null
+++ b/kommander/widget/invokeclass.cpp
@@ -0,0 +1,61 @@
+//
+// C++ Interface: invokeclass
+//
+// Description:
+//
+//
+// Author: Andras Mantia <amantia@kde.org>, (C) 2008
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#include "invokeclass.h"
+
+#include <qcolor.h>
+#include <qregexp.h>
+
+InvokeClass::InvokeClass(QObject *parent):QObject(parent)
+{
+ m_acceptedSlots = acceptedSlots();
+}
+
+void InvokeClass::invokeSlot(QObject *object, const QString& slot, QStringList args)
+{
+ QString invokeName = slot;
+ invokeName = invokeName.mid(invokeName.find('('));
+ invokeName.prepend(QString::number(QSIGNAL_CODE) + "invoke");
+ QString slotName = QString::number(QSLOT_CODE) + slot;
+ connect(this, invokeName.ascii(), object, slotName.ascii());
+
+ if (args.count() == 0)
+ emit invoke();
+ else
+ {
+ QString slotArgStr = slot.section(QRegExp("\\(|\\)"), 1);
+ uint argNum = slotArgStr.contains(',') + 1;
+ for (uint i = args.count(); i < argNum; i++)
+ args << "";
+ //poor man's invokeMetaObject
+ if (slotArgStr == m_acceptedSlots[0])
+ emit invoke(args[0]);
+ else if (slotArgStr == m_acceptedSlots[1])
+ emit invoke(args[0], args[1]);
+ else if (slotArgStr == m_acceptedSlots[2])
+ emit invoke(args[0].upper()=="TRUE" || args[0] =="1"? true : false);
+ else if (slotArgStr == m_acceptedSlots[3])
+ emit invoke(args[0].toInt());
+ else if (slotArgStr == m_acceptedSlots[4])
+ emit invoke(args[0].toInt(), args[1].toInt());
+ else if (slotArgStr == m_acceptedSlots[5])
+ emit invoke(args[0].toInt(), args[1].toInt(), args[2].toInt());
+ else if (slotArgStr == m_acceptedSlots[6])
+ emit invoke(args[0].toInt(), args[1].toInt(), args[2].toInt(), args[3].toInt());
+ else if (slotArgStr == m_acceptedSlots[7])
+ emit invoke(QColor(args[0]));
+ }
+
+ disconnect(this, invokeName.ascii(), object, slotName.ascii());
+}
+
+#include "invokeclass.moc"
diff --git a/kommander/widget/invokeclass.h b/kommander/widget/invokeclass.h
new file mode 100644
index 00000000..61688b3e
--- /dev/null
+++ b/kommander/widget/invokeclass.h
@@ -0,0 +1,56 @@
+//
+// C++ Interface: invokeclass
+//
+// Description:
+//
+//
+// Author: Andras Mantia <amantia@kde.org>, (C) 2008
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#ifndef INVOKECLASS_H
+#define INVOKECLASS_H
+
+#include <qobject.h>
+#include <qstringlist.h>
+
+class InvokeClass : public QObject {
+Q_OBJECT
+public:
+ InvokeClass(QObject *parent);
+ void invokeSlot(QObject *object, const QString& slot, QStringList args);
+
+ static QStringList acceptedSlots()
+ {
+ static QStringList acceptedSlots;
+ acceptedSlots << "const QString&";
+ acceptedSlots << "const QString&,const QString&";
+ acceptedSlots << "bool";
+ acceptedSlots << "int";
+ acceptedSlots << "int,int";
+ acceptedSlots << "int,int,int";
+ acceptedSlots << "int,int,int,int";
+ acceptedSlots << "const QColor&";
+
+ return acceptedSlots;
+ }
+
+signals:
+ void invoke();
+ void invoke(const QString&);
+ void invoke(const QString&,const QString&);
+ void invoke(bool);
+ void invoke(int);
+ void invoke(int,int);
+ void invoke(int,int,int);
+ void invoke(int,int,int,int);
+ void invoke(const QColor&);
+
+private:
+ QStringList m_acceptedSlots;
+
+};
+
+#endif
diff --git a/kommander/widget/kmdrmainwindow.cpp b/kommander/widget/kmdrmainwindow.cpp
new file mode 100644
index 00000000..cfe79d0c
--- /dev/null
+++ b/kommander/widget/kmdrmainwindow.cpp
@@ -0,0 +1,36 @@
+//
+// C++ Implementation: KmdrMainWindow
+//
+// Description:
+//
+//
+// Author: Andras Mantia <amantia@kdewebdev.org>, (C) 2008
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "kmdrmainwindow.h"
+
+#include <qtimer.h>
+
+KmdrMainWindow::KmdrMainWindow(QWidget *parent, const char *name, WFlags f)
+ : KMainWindow(parent, name, f)
+{
+ QTimer::singleShot(10, this, SIGNAL(initialize()));
+}
+
+
+KmdrMainWindow::~KmdrMainWindow()
+{
+}
+
+bool KmdrMainWindow::queryClose()
+{
+ bool quit = KMainWindow::queryClose();
+ if (quit)
+ emit destroy();
+ return quit;
+}
+
+
+#include "kmdrmainwindow.moc"
diff --git a/kommander/widget/kmdrmainwindow.h b/kommander/widget/kmdrmainwindow.h
new file mode 100644
index 00000000..059b514e
--- /dev/null
+++ b/kommander/widget/kmdrmainwindow.h
@@ -0,0 +1,37 @@
+//
+// C++ Interface: KmdrMainWindow
+//
+// Description:
+//
+//
+// Author: Andras Mantia <amantia@kdewebdev.org>, (C) 2008
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#ifndef KmdrMainWindow_H
+#define KmdrMainWindow_H
+
+#include <kmainwindow.h>
+
+/**
+ @author Andras Mantia <amantia@kdewebdev.org>
+*/
+class KmdrMainWindow : public KMainWindow
+{
+Q_OBJECT
+public:
+ KmdrMainWindow(QWidget *parent = 0, const char *name = 0, WFlags f = WType_TopLevel | WDestructiveClose);
+
+ ~KmdrMainWindow();
+
+protected:
+ virtual bool queryClose();
+
+signals:
+ void initialize();
+ void destroy();
+
+};
+
+#endif
diff --git a/kommander/widget/kommander_export.h b/kommander/widget/kommander_export.h
new file mode 100644
index 00000000..f97e739c
--- /dev/null
+++ b/kommander/widget/kommander_export.h
@@ -0,0 +1,35 @@
+/*
+ This file is part of kommander project
+ Copyright (c) 2005 Laurent Montel <montel@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef _KOMMANDER_EXPORT_H
+#define _KOMMANDER_EXPORT_H
+
+#include <kdeversion.h>
+
+#if KDE_IS_VERSION(3,3,90)
+
+#include <kdemacros.h>
+
+#define KOMMANDER_EXPORT KDE_EXPORT
+
+#else
+#define KOMMANDER_EXPORT
+#endif
+#endif /* _KOMMANDER_EXPORT_H */
diff --git a/kommander/widget/kommanderfunctions.cpp b/kommander/widget/kommanderfunctions.cpp
new file mode 100644
index 00000000..a5a678db
--- /dev/null
+++ b/kommander/widget/kommanderfunctions.cpp
@@ -0,0 +1,349 @@
+/***************************************************************************
+ kommanderfunctions.cpp - Text widget core functionality
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include <iostream>
+#include <stdlib.h>
+
+#include <qfile.h>
+#include <qregexp.h>
+#include <qtextstream.h>
+
+#include <dcopclient.h>
+#include <kapplication.h>
+#include <kconfig.h>
+#include <klocale.h>
+#include <kglobal.h>
+
+#include "kommanderwidget.h"
+#include "specials.h"
+#include "specialinformation.h"
+#include "expression.h"
+#include "parser.h"
+
+QString KommanderWidget::evalFunction(const QString& function, const QStringList& args)
+{
+ switch (SpecialInformation::function(Group::Kommander, function)) {
+ case Kommander::widgetText:
+ return handleDCOP(DCOP::text);
+ case Kommander::selectedWidgetText:
+ return handleDCOP(DCOP::selection);
+ case Kommander::dcopid:
+ return kapp->dcopClient()->appId();
+ case Kommander::pid:
+ return QString().setNum(getpid());
+ case Kommander::null:
+ return QString();
+ case Kommander::comment:
+ return QString("#");
+ case Kommander::exec:
+ return execCommand(args[0]);
+ case Kommander::dcop:
+ return DCOPQuery(args);
+ case Kommander::parentPid:
+ return global("_PARENTPID").isEmpty() ? QString().setNum(getppid()) : global("_PARENTPID");
+ case Kommander::env:
+ return QString(getenv(args[0].latin1()));
+ case Kommander::i18n:
+ return KGlobal::locale()->translate(args[0]);
+ case Kommander::global:
+ return global(args[0]);
+ case Kommander::setGlobal:
+ setGlobal(args[0], args[1]);
+ return QString();
+ case Kommander::debug:
+ qDebug("%s", args[0].latin1());
+ fflush(stderr);
+ return QString::null;
+ case Kommander::echo:
+ for (uint i=0; i<args.count(); i++)
+ std::cout << args[i].latin1();
+ fflush(stdout);
+ return QString::null;
+ case Kommander::readSetting:
+ {
+ QString fname = fileName();
+ if (!fname.isEmpty())
+ {
+ KConfig cfg("kommanderrc", true);
+ cfg.setGroup(fname);
+ return cfg.readEntry(args[0], args[1]);
+ }
+ return QString::null;
+ }
+ case Kommander::writeSetting:
+ {
+ QString fname = fileName();
+ if (!fname.isEmpty())
+ {
+ KConfig cfg("kommanderrc", false);
+ cfg.setGroup(fname);
+ cfg.writeEntry(args[0], args[1]);
+ }
+ return QString::null;
+ }
+ case Kommander::dialog:
+ if (args.count() > 1)
+ return runDialog(args[0], args[1]);
+ else
+ return runDialog(args[0]);
+ case Kommander::expr:
+ {
+ Expression expr(args[0]);
+ bool ok;
+ QVariant value = expr.value(&ok);
+ return ok ? value.toString() : QString();
+ }
+ default:
+ return QString();
+ }
+}
+
+
+QString KommanderWidget::evalExecBlock(const QStringList& args, const QString& s, int& pos)
+{
+ int f = s.find("@execEnd", pos);
+ if (f == -1)
+ {
+ printError(i18n("Unterminated @execBegin ... @execEnd block."));
+ return QString();
+ }
+ else
+ {
+ QString shell = args.count() ? args[0] : QString();
+ int start = pos;
+ pos = f + QString("@execEnd").length()+1;
+ return execCommand(evalAssociatedText(s.mid(start, f - start)), shell);
+ }
+}
+
+QString KommanderWidget::evalForEachBlock(const QStringList& args, const QString& s, int& pos)
+{
+ int f = s.find("@end", pos);
+//FIXME: better detection of block boundaries
+ if (f == -1)
+ {
+ printError(i18n("Unterminated @forEach ... @end block."));
+ return QString();
+ }
+ else
+ {
+ int start = pos;
+ pos = f + QString("@end").length()+1;
+ QString var = args[0];
+ QStringList loop = QStringList::split("\n", args[1]);
+ QString output;
+ QString block = substituteVariable(s.mid(start, f - start), QString("%1_count").arg(var),
+ QString::number(loop.count()));
+ QString varidx = QString("%1_index").arg(var);
+ for (uint i=0; i<loop.count(); i++)
+ output += evalAssociatedText(substituteVariable(substituteVariable(block, varidx, QString::number(i+1)),
+ var, loop[i]));
+ return output;
+ }
+}
+
+QString KommanderWidget::evalForBlock(const QStringList& args, const QString& s, int& pos)
+{
+ int f = s.find("@end", pos);
+//FIXME: better detection of block boundaries
+ if (f == -1)
+ {
+ printError(i18n("Unterminated @forEach ... @end block."));
+ return QString();
+ }
+ else
+ {
+ int start = pos;
+ pos = f + QString("@end").length()+1;
+ QString block = s.mid(start, f - start);
+ QString variable = args[0];
+
+ Expression expr;
+ int loopstart = expr.value(args[1]).toInt();
+ int loopend = expr.value(args[2]).toInt();
+ int loopstep = 1;
+ if (args.count() > 3)
+ {
+ loopstep = expr.value(args[3]).toInt();
+ if (!loopstep)
+ loopstep = 1;
+ }
+
+ QString output;
+ for (int i=loopstart; i<=loopend; i+=loopstep)
+ {
+ output += evalAssociatedText(substituteVariable(block, variable, QString::number(i)));
+ }
+ return output;
+ }
+}
+
+QString KommanderWidget::evalIfBlock(const QStringList& args, const QString& s, int& pos)
+{
+ int f = s.find("@endif", pos);
+//FIXME: better detection of block boundaries; add error message
+ if (f == -1)
+ {
+ pos = s.length()+1;
+ printError(i18n("Unterminated @if ... @endif block."));
+ return QString();
+ }
+ else
+ {
+ QString block = s.mid(pos, f - pos);
+ pos = f + QString("@endif").length()+1;
+ Expression expr;
+ if (expr.isTrue(args[0]))
+ return evalAssociatedText(block);
+ return QString();
+ }
+}
+
+QString KommanderWidget::evalSwitchBlock(const QStringList& args, const QString& s, int& pos)
+{
+ int f = s.find("@end", pos);
+//FIXME: better detection of block boundaries; add error message
+ if (f == -1)
+ {
+ printError(i18n("Unterminated @switch ... @end block."));
+ return QString();
+ }
+ else
+ {
+ QString block = s.mid(pos, f - pos);
+ pos = f + QString("@end").length()+1;
+ f = parseBlockBoundary(block, 0, "@case");
+ bool finished = f == -1;
+ while (!finished)
+ {
+ f += 5;
+ int end = parseBlockBoundary(block, f, "@case");
+ if (end == -1)
+ {
+ end = block.length();
+ finished = true;
+ }
+ bool ok;
+ QString value = parseBrackets(block, f, ok);
+ if (!ok)
+ break;
+ if (value == args[0] || value == "*")
+ return evalAssociatedText(block.mid(f, end-f));
+ f = end;
+ }
+ return QString();
+ }
+}
+
+
+
+QString KommanderWidget::evalArrayFunction(const QString& function, const QStringList& args)
+{
+ Parser parser(internalParserData());
+ int fname = SpecialInformation::function(Group::Array, function);
+ QString array = args[0].startsWith("_") ? args[0] : QString("_")+ args[0];
+
+ if (fname == Array::setValue)
+ parser.setArray(array, args[1], args[2]);
+ else if (fname == Array::fromString)
+ {
+ QStringList lines = QStringList::split("\n", args[1]);
+ for (QStringList::Iterator it = lines.begin(); it != lines.end(); ++it)
+ {
+ QString key = (*it).section('\t', 0, 0).stripWhiteSpace();
+ if (!key.isEmpty())
+ parser.setArray(array, key, (*it).section('\t', 1));
+ }
+ }
+ else if (!parser.isArray(array))
+ return QString();
+ else switch (fname) {
+ case Array::value:
+ return parser.arrayValue(array, args[1]).toString();
+ case Array::keys:
+ {
+ const QMap<QString, ParseNode> map = parser.array(array);
+ QStringList keys;
+ for (QMap<QString, ParseNode>::ConstIterator it = map.begin(); it != map.end(); ++it)
+ keys.append(it.key());
+ return keys.join("\n");
+ }
+ case Array::values:
+ {
+ const QMap<QString, ParseNode> map = parser.array(array);
+ QStringList values;
+ for (QMap<QString, ParseNode>::ConstIterator it = map.begin(); it != map.end(); ++it)
+ values.append(it.data().toString());
+ return values.join("\n");
+ }
+ case Array::clear:
+ parser.unsetArray(array);
+ return QString();
+ case Array::remove:
+ parser.unsetArray(array, args[1]);
+ return QString();
+ case Array::count:
+ return QString::number(parser.array(array).count());
+ case Array::toString:
+ {
+ const QMap<QString, ParseNode> map = parser.array(array);
+ QString arraystring;
+ for (QMap<QString, ParseNode>::ConstIterator it = map.begin(); it != map.end(); ++it)
+ arraystring += QString("%1\t%2\n").arg(it.key()).arg(it.data().toString());
+ return arraystring;
+ }
+ default:
+ return QString();
+ }
+ return QString();
+}
+
+
+QString KommanderWidget::evalWidgetFunction(const QString& identifier, const QString& s, int& pos)
+{
+ KommanderWidget* pWidget = parseWidget(identifier);
+ if (!pWidget)
+ {
+ printError(i18n("Unknown widget: @%1.").arg(identifier));
+ return QString();
+ }
+ if (s[pos] == '.')
+ {
+ pos++;
+ bool ok = true;
+ QString function = parseIdentifier(s, pos);
+ QStringList args = parseFunction("DCOP", function, s, pos, ok);
+ if (!ok)
+ return QString();
+ args.prepend(pWidget->widgetName());
+ QString prototype = SpecialInformation::prototype(Group::DCOP,
+ SpecialInformation::function(Group::DCOP, function));
+ return localDCOPQuery(prototype, args);
+ }
+ else if (pWidget == this)
+ {
+ printError(i18n("Infinite loop: @%1 called inside @%2.").arg(pWidget->widgetName())
+ .arg(pWidget->widgetName()));
+ return QString();
+ }
+ else if (!pWidget->hasAssociatedText())
+ {
+ printError(i18n("Script for @%1 is empty.").arg(pWidget->widgetName()));
+ return QString();
+ }
+ return pWidget->evalAssociatedText();
+}
+
diff --git a/kommander/widget/kommanderwidget.cpp b/kommander/widget/kommanderwidget.cpp
new file mode 100644
index 00000000..525f662b
--- /dev/null
+++ b/kommander/widget/kommanderwidget.cpp
@@ -0,0 +1,745 @@
+/***************************************************************************
+ kommanderwidget.cpp - Text widget core functionality
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+ /* KDE INCLUDES */
+#include <dcopclient.h>
+#include <kapplication.h>
+#include <kdebug.h>
+#include <klocale.h>
+#include <kdialogbase.h>
+#include <kmessagebox.h>
+#include <kprocess.h>
+
+/* QT INCLUDES */
+#include <qcstring.h>
+#include <qdatastream.h>
+#include <qfileinfo.h>
+#include <qobject.h>
+#include <qobjectlist.h>
+#include <qregexp.h>
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qvaluelist.h>
+#include <qvariant.h>
+
+
+/* UNIX INCLUDES */
+#include <unistd.h>
+#include <stdlib.h>
+
+/* OTHER INCLUDES */
+#include "myprocess.h"
+#include "kommanderwidget.h"
+#include "specials.h"
+#include "specialinformation.h"
+#include "parser.h"
+#include "parserdata.h"
+#include "kommanderwindow.h"
+
+KommanderWidget::KommanderWidget(QObject *a_thisObject)
+{
+ m_thisObject = a_thisObject;
+}
+
+KommanderWidget::~KommanderWidget()
+{
+}
+
+void KommanderWidget::setAssociatedText(const QStringList& a_associations)
+{
+ m_associatedText = a_associations;
+ while(m_associatedText.count() < (states().count()))
+ m_associatedText += QString(); // sync states and associations
+}
+
+QStringList KommanderWidget::associatedText() const
+{
+ return m_associatedText;
+}
+
+bool KommanderWidget::hasAssociatedText()
+{
+ int index = states().findIndex(currentState());
+ if (index == -1 || m_associatedText[index].isEmpty())
+ return false;
+ return true;
+}
+
+
+void KommanderWidget::setPopulationText(const QString& a_txt)
+{
+ m_populationText = a_txt;
+}
+
+QString KommanderWidget::populationText() const
+{
+ return m_populationText;
+}
+
+QStringList KommanderWidget::states() const
+{
+ return m_states;
+}
+
+QStringList KommanderWidget::displayStates() const
+{
+ return m_displayStates;
+}
+
+void KommanderWidget::setStates(const QStringList& a_states)
+{
+ m_states = a_states;
+}
+
+void KommanderWidget::setDisplayStates(const QStringList& a_displayStates)
+{
+ m_displayStates = a_displayStates;
+}
+
+QString KommanderWidget::evalAssociatedText() // expands and returns associated text as a string
+{
+ int index = ( states().findIndex( currentState()) );
+ if (index == -1)
+ {
+ printError(i18n("Invalid state for associated text."));
+ return QString();
+ }
+ return evalAssociatedText(m_associatedText[index]);
+}
+
+QString KommanderWidget::evalAssociatedText(const QString& a_text)
+{
+ /* New internal parser is used if global flag is set */
+ if ((KommanderWidget::useInternalParser && !a_text.startsWith("#!")) || a_text.startsWith("#!kommander"))
+ {
+ Parser p(internalParserData());
+ p.setWidget(this);
+ p.setString(a_text);
+ if (!p.setString(a_text) || !p.parse())
+ printError(i18n("Line %1: %2.\n").arg(p.errorLine()+1).arg(p.errorMessage()));
+ return QString();
+ }
+ /* Old macro-only parser is implemented below */
+
+ bool parserType = KommanderWidget::useInternalParser;
+ KommanderWidget::useInternalParser = false; //shebang is used, switch to old parser
+
+ QString evalText;
+ int pos = 0, baseTextLength = a_text.length();
+ while (pos < baseTextLength)
+ {
+ int ident = a_text.find(ESCCHAR, pos);
+ if (ident == -1) {
+ evalText += a_text.mid(pos);
+ break;
+ }
+ evalText += a_text.mid(pos, ident - pos);
+ pos = ident+1;
+
+ /* escaped @ */
+ if (pos < baseTextLength-1 && a_text[pos] == ESCCHAR)
+ {
+ evalText += ESCCHAR;
+ pos++;
+ continue;
+ }
+
+ QString identifier = parseIdentifier(a_text, pos);
+ /* comment */
+ if (identifier.isEmpty())
+ {
+ if (pos < baseTextLength && a_text[pos] == '#') { // comment
+ int newpos = a_text.find('\n', pos+1);
+ if (newpos == -1)
+ newpos = a_text.length();
+ if (pos > 1 && a_text[pos-2] == '\n')
+ newpos++;
+ pos = newpos;
+ }
+ else
+ evalText += ESCCHAR; // single @
+ continue;
+ }
+ bool ok = true;
+ QStringList args;
+
+
+
+ /* Standard, non-prefixed special */
+ if (identifier == "if") // if required special handling as it takes expression
+ {
+ QString arg = parseBrackets(a_text, pos, ok);
+ if (!ok)
+ return QString();
+ args.append(evalAssociatedText(arg));
+ evalText += evalIfBlock(args, a_text, pos);
+ }
+ else if (SpecialInformation::function(Group::Kommander, identifier) != -1)
+ {
+ args = parseFunction("Kommander", identifier, a_text, pos, ok);
+ if (!ok)
+ return QString();
+ else if (identifier == "execBegin")
+ evalText += evalExecBlock(args, a_text, pos);
+ else if (identifier == "forEach")
+ evalText += evalForEachBlock(args, a_text, pos);
+ else if (identifier == "for")
+ evalText += evalForBlock(args, a_text, pos);
+ else if (identifier == "switch")
+ evalText += evalSwitchBlock(args, a_text, pos);
+ else if (identifier == "if")
+ evalText += evalIfBlock(args, a_text, pos);
+ else
+ evalText += evalFunction(identifier, args);
+ }
+
+ /* Widget special */
+ else if (parseWidget(identifier))
+ evalText += evalWidgetFunction(identifier, a_text, pos);
+ else if (a_text[pos] == '.')
+ {
+ pos++;
+ QString function = parseIdentifier(a_text, pos);
+ args = parseFunction(identifier, function, a_text, pos, ok);
+ if (!ok)
+ return QString();
+ switch (SpecialInformation::group(identifier))
+ {
+ case Group::Array:
+ evalText += evalArrayFunction(function, args);
+ break;
+ case Group::String:
+ evalText += Parser::function(internalParserData(), "str_" + function, args);
+ break;
+ case Group::File:
+ evalText += Parser::function(internalParserData(), "file_" + function, args);
+ break;
+ case Group::Message:
+ evalText += Parser::function(internalParserData(), "message_" + function, args);
+ break;
+ case Group::Input:
+ evalText += Parser::function(internalParserData(), "input_" + function, args);
+ break;
+ default:
+ return QString();
+ }
+ }
+ else
+ {
+ printError(i18n("Unknown special: \'%1\'.").arg(identifier));
+ return QString();
+ }
+ }
+
+ KommanderWidget::useInternalParser = parserType;
+ return evalText;
+}
+
+
+QString KommanderWidget::DCOPQuery(const QStringList& a_query)
+{
+ QString app = a_query[0];
+ app.remove("\"");
+ QCString appId = app.latin1(), object = a_query[1].latin1();
+
+ // parse function arguments
+ QString function = a_query[2], pTypes;
+ function.remove(' ');
+ int start = function.find('(');
+ bool ok = false;
+ if (start != -1)
+ pTypes = parseBrackets(function, start, ok);
+ else
+ {
+ ok = true;
+ function += "()";
+ }
+ if (!ok)
+ {
+ printError(i18n("Unmatched parenthesis in DCOP call \'%1\'.").arg(a_query[2]));
+ return QString();
+ }
+ const QStringList argTypes = parseArgs(pTypes, ok);
+ if (!ok || argTypes.count() != a_query.count() - 3)
+ {
+ printError(i18n("Incorrect arguments in DCOP call \'%1\'.").arg(a_query[2]));
+ return QString();
+ }
+
+ QCString replyType;
+ QByteArray byteData, byteReply;
+ QDataStream byteDataStream(byteData, IO_WriteOnly);
+ for (uint i=0 ; i<argTypes.count(); i++) {
+ if (argTypes[i] == "int")
+ byteDataStream << a_query[i+3].toInt();
+ else if (argTypes[i] == "long")
+ byteDataStream << a_query[i+3].toLong();
+ else if (argTypes[i] == "float")
+ byteDataStream << a_query[i+3].toFloat();
+ else if (argTypes[i] == "double")
+ byteDataStream << a_query[i+3].toDouble();
+ else if (argTypes[i] == "bool")
+ byteDataStream << (bool)(a_query[i+3] != "false" && a_query[i+3] != "false" && a_query[i+3] != "0");
+ else if (argTypes[i] == "QStringList")
+ if (a_query[i+3].find('\n') != -1)
+ byteDataStream << QStringList::split("\n", a_query[i+3], true);
+ else
+ byteDataStream << QStringList::split("\\n", a_query[i+3], true);
+ else
+ byteDataStream << a_query[i+3];
+ }
+
+ DCOPClient *cl = KApplication::dcopClient();
+ if (!cl || !cl->call(appId, object, function.latin1(), byteData, replyType, byteReply))
+ {
+ printError(i18n("Tried to perform DCOP query, but failed."));
+ return QString();
+ }
+
+ QDataStream byteReplyStream(byteReply, IO_ReadOnly);
+ if (replyType == "QString")
+ {
+ QString text;
+ byteReplyStream >> text;
+ return text;
+ }
+ else if(replyType == "int")
+ {
+ int i;
+ byteReplyStream >> i;
+ return QString::number(i);
+ }
+ else if(replyType == "bool")
+ {
+ bool b;
+ byteReplyStream >> b;
+ return QString::number(b);
+ }
+ else if (replyType == "QStringList")
+ {
+ QStringList text;
+ byteReplyStream >> text;
+ return text.join("\n");
+ }
+ else if(replyType != "void")
+ {
+ printError(i18n("DCOP return type %1 is not yet implemented.").arg(replyType.data()));
+ }
+
+ return QString();
+}
+
+QString KommanderWidget::localDCOPQuery(const QString function, const QStringList& args)
+{
+ QStringList pArgs;
+ pArgs.append(kapp->dcopClient()->appId());
+ pArgs.append("KommanderIf");
+ pArgs.append(function);
+ for (uint i=0; i<args.count(); i++)
+ pArgs.append(args[i]);
+ return DCOPQuery(pArgs);
+}
+
+QString KommanderWidget::localDCOPQuery(const QString function, const QString& arg1,
+ const QString& arg2, const QString& arg3, const QString& arg4)
+{
+ QStringList pArgs;
+ pArgs.append(kapp->dcopClient()->appId());
+ pArgs.append("KommanderIf");
+ pArgs.append(function);
+ pArgs.append(arg1);
+ pArgs.append(arg2);
+ if (!arg3.isNull())
+ pArgs.append(arg3);
+ if (!arg4.isNull())
+ pArgs.append(arg4);
+ return DCOPQuery(pArgs);
+}
+
+
+QString KommanderWidget::execCommand(const QString& a_command, const QString& a_shell) const
+{
+ MyProcess proc(this);
+ QString text = proc.run(a_command.local8Bit(), a_shell.latin1());
+//FIXME check if exec was successful
+ return text;
+}
+
+QString KommanderWidget::runDialog(const QString& a_dialog, const QString& a_params)
+{
+ QString pFileName = localDCOPQuery("global(QString)", "_KDDIR") + QString("/") + a_dialog;
+ QFileInfo pDialogFile(pFileName);
+ if (!pDialogFile.exists())
+ {
+ pFileName = a_dialog;
+ pDialogFile.setFile(pFileName);
+ if (!pDialogFile.exists())
+ return QString();
+ }
+ QString cmd = QString("kmdr-executor %1 %2 _PARENTPID=%3 _PARENTDCOPID=kmdr-executor-%4")
+ .arg(pFileName).arg(a_params).arg(getpid()).arg(getpid());
+ return execCommand(cmd);
+}
+
+
+void KommanderWidget::printError(const QString& a_error) const
+{
+ if (showErrors)
+ {
+ KDialogBase* dialog = new KDialogBase("Error", KDialogBase::Yes | KDialogBase::No | KDialogBase::Cancel,
+ KDialogBase::Yes, KDialogBase::No, 0, 0, true, false,
+ i18n("Continue"), i18n("Continue && Ignore Next Errors"), i18n("Stop"));
+ switch (KMessageBox::createKMessageBox(dialog, QMessageBox::Warning,
+ i18n("<qt>Error in widget <b>%1</b>:<p><i>%2</i></qt>").arg(QString(m_thisObject->name()))
+ .arg(a_error), QStringList(), QString(), 0, 0))
+ {
+ case KDialogBase::No:
+ showErrors = false;
+ case KDialogBase::Yes:
+ break;
+ case KDialogBase::Cancel:
+ if (parentDialog()->inherits("QDialog"))
+ {
+ parentDialog()->close();
+ exit(-1);
+ }
+ else if (parentDialog()->inherits("QMainWindow"))
+ kapp->quit();
+ }
+ }
+ else
+ {
+ kdError() << i18n("Error in widget %1:\n %2\n").arg(m_thisObject->name()).arg(a_error);
+ }
+}
+
+
+
+QString KommanderWidget::parseIdentifier(const QString& s, int& from) const
+{
+ uint start = from;
+ while (start < s.length() && s[start].isSpace())
+ start++;
+ uint end = start;
+ while (end < s.length() && (s[end].isLetterOrNumber() || s[end] == '_'))
+ end++;
+ from = end;
+ return s.mid(start, end-start);
+}
+
+QString KommanderWidget::parseBrackets(const QString& s, int& from, bool& ok) const
+{
+ ok = true;
+ uint start = from;
+ while (start < s.length() && s[start].isSpace())
+ start++;
+ if (start == s.length() || s[start] != '(')
+ return QString();
+ bool quoteSingle = false, quoteDouble = false;
+ int brackets = 1;
+ for (uint end = start+1; end < s.length(); end++)
+ {
+ if (!quoteDouble && s[end] == '\'' && s[end-1] != '\\')
+ quoteSingle = !quoteSingle;
+ else if (!quoteSingle && s[end] == '\"' && s[end-1] != '\\')
+ quoteDouble = !quoteDouble;
+ else if (!quoteDouble && !quoteSingle && s[end] == '(')
+ brackets++;
+ else if (!quoteDouble && !quoteSingle && s[end] == ')')
+ {
+ brackets--;
+ if (!brackets) {
+ from = end + 1;
+ return s.mid(start+1, end-start-1);
+ }
+ }
+ }
+ ok = false;
+ return QString();
+}
+
+
+QStringList KommanderWidget::parseArgs(const QString& s, bool &ok)
+{
+ QStringList argList;
+ bool quoteDouble = false, quoteSingle = false;
+ uint i, start = 0, brackets=0;
+ for (i = 0; i < s.length(); i++)
+ {
+ /* Handle brackets */
+ if (s[i] == '(' && !quoteSingle && !quoteDouble)
+ brackets++;
+ else if (s[i] == ')' && !quoteSingle && !quoteDouble)
+ brackets--;
+ /* Ignore everything in brackets */
+ else if (!brackets)
+ {
+ if (s[i] == '\'' && s[i-1] != '\\' && !quoteDouble)
+ quoteSingle = !quoteSingle;
+ else if (s[i] == '\"' && s[i-1] != '\\' && !quoteSingle)
+ quoteDouble = !quoteDouble;
+ else if (s[i] == ',' && !quoteDouble && !quoteSingle)
+ {
+ QString arg = s.mid(start, i - start).stripWhiteSpace();
+ if (!arg.isEmpty())
+ argList.append(evalAssociatedText(parseQuotes(arg)));
+ start = i+1;
+ }
+ }
+ }
+ if (!quoteDouble && !quoteSingle)
+ {
+ QString arg = s.mid(start, s.length() - start + 1).stripWhiteSpace();
+ if (!arg.isEmpty())
+ argList.append(evalAssociatedText(parseQuotes(arg)));
+ }
+ ok = !quoteDouble && !quoteSingle;
+
+ return argList;
+}
+
+QString KommanderWidget::parseQuotes(const QString& s) const
+{
+ if (s[0] == s[s.length()-1] && (s[0] == '\'' || s[0] == '\"'))
+ {
+ QMemArray<QChar> buf(s.length());
+ int start = 0;
+ int end = s.length() - 1;
+ for (int i=1; i<end; i++)
+ if (s[i] == '\\')
+ {
+ if (s[i+1] == 't')
+ buf[start++] = '\t';
+ else if (s[i+1] == 'n')
+ buf[start++] = '\n';
+ else if (s[i+1] == '\\')
+ buf[start++] = '\\';
+ else
+ {
+ buf[start++] = s[i];
+ i--;
+ }
+ i++;
+ }
+ else
+ buf[start++] = s[i];
+ return QString(buf, start);
+ //return s.mid(1, s.length()-2);
+ }
+ else return s;
+}
+
+bool KommanderWidget::isWidget(const QString& a_name) const
+{
+ return parseWidget(a_name);
+}
+
+KommanderWidget* KommanderWidget::widgetByName(const QString& a_name) const
+{
+ return parseWidget(a_name);
+}
+
+
+KommanderWidget* KommanderWidget::parseWidget(const QString& widgetName) const
+{
+ if (QString(parentDialog()->name()) == widgetName)
+ return dynamic_cast <KommanderWidget*>(parentDialog());
+ QCString s = widgetName.lower() == "self" ? m_thisObject->name() : widgetName.latin1();
+ QObject* childObj = parentDialog()->child(s);
+/* if (!childObj)
+ {
+ Parser parser(internalParserData());
+ QString variableValue = parser.variable(widgetName).toString();
+ s = variableValue.lower() == "self" ? m_thisObject->name() : variableValue.latin1();
+ childObj = parentDialog()->child(s);
+ }*/
+ return dynamic_cast <KommanderWidget*>(childObj);
+}
+
+QStringList KommanderWidget::parseFunction(const QString& group, const QString& function,
+ const QString& s, int& from, bool& ok)
+{
+ ok = true;
+ bool success = false;
+ QString arg = parseBrackets(s, from, ok);
+ if (!ok)
+ {
+ printError(i18n("Unmatched parenthesis after \'%1\'.").arg(function));
+ return QString();
+ }
+ const QStringList args = parseArgs(arg, ok);
+ int gname = SpecialInformation::group(group);
+ int fname = SpecialInformation::function(gname, function);
+ bool extraArg = gname == Group::DCOP;
+
+ if (!ok)
+ printError(i18n("Unmatched quotes in argument of \'%1\'.").arg(function));
+ else if (gname == -1)
+ printError(i18n("Unknown function group: \'%1\'.").arg(group));
+ else if (fname == -1 && !extraArg)
+ printError(i18n("Unknown function: \'%1\' in group '%2'.").arg(function).arg(group));
+ else if (fname == -1 && extraArg)
+ printError(i18n("Unknown widget function: \'%1\'.").arg(function));
+ else if ((int)args.count() + extraArg < SpecialInformation::minArg(gname, fname))
+ printError(i18n("Not enough arguments for \'%1\' (%2 instead of %3).<p>"
+ "Correct syntax is: %4")
+ .arg(function).arg(args.count() + extraArg).arg(SpecialInformation::minArg(gname, fname))
+ .arg(SpecialInformation::prototype(gname, fname, SpecialFunction::ShowArgumentNames)));
+ else if ((int)args.count() + extraArg > SpecialInformation::maxArg(gname, fname))
+ printError(i18n("Too many arguments for \'%1\' (%2 instead of %3).<p>"
+ "Correct syntax is: %4")
+ .arg(function).arg(args.count() + extraArg).arg(SpecialInformation::maxArg(gname, fname))
+ .arg(SpecialInformation::prototype(gname, fname, SpecialFunction::ShowArgumentNames)));
+ else
+ success = true;
+ ok = success;
+ return args;
+}
+
+int KommanderWidget::parseBlockBoundary(const QString& s, int from, const QStringList& args) const
+{
+ int shortest = -1;
+ for (uint i=0; i<args.count(); i++)
+ {
+ int match = s.find(args[i], from);
+ if (shortest > match || shortest == -1)
+ shortest = match;
+ }
+ return shortest;
+}
+
+
+
+QString KommanderWidget::substituteVariable(QString text, QString variable, QString value) const
+{
+ QString var = QString("@%1").arg(variable);
+ QString newtext;
+ int newpos, pos = 0;
+ while (true)
+ {
+ newpos = text.find(var, pos);
+ if (newpos != -1)
+ {
+ newtext += text.mid(pos, newpos-pos);
+ newtext += value;
+ pos = newpos + var.length();
+ } else
+ {
+ newtext += text.mid(pos);
+ break;
+ }
+ }
+ return newtext;
+}
+
+
+
+QWidget* KommanderWidget::parentDialog() const
+{
+ QObject *superParent = m_thisObject;
+ while (superParent->parent())
+ {
+ superParent = superParent->parent();
+ if (superParent->inherits("QDialog") || superParent->inherits("QMainWindow"))
+ break;
+ }
+ return (QWidget*)superParent;
+}
+
+
+
+
+QString KommanderWidget::global(const QString& variableName)
+{
+ QString var = variableName.startsWith("_") ? variableName : QString("_")+ variableName;
+ Parser parser(internalParserData());
+ return parser.variable(var).toString();
+}
+
+void KommanderWidget::setGlobal(const QString& variableName, const QString& value)
+{
+ QString var = variableName.startsWith("_") ? variableName : QString("_")+ variableName;
+ Parser parser(internalParserData());
+ parser.setVariable(var, value);
+}
+
+QString KommanderWidget::handleDCOP(const int function, const QStringList& args)
+{
+ QWidget* current = dynamic_cast<QWidget*>(m_thisObject);
+ if (!current)
+ return QString();
+ switch(function) {
+ case DCOP::setEnabled:
+ current->setEnabled( args[0] != "false" && args[0] != "0");
+ break;
+ case DCOP::setVisible:
+ current->setShown(args[0] != "false" && args[0] != "0");
+ break;
+ case DCOP::type:
+ return current->className();
+ case DCOP::children:
+ {
+ QStringList matching;
+ QObjectList* widgets = current->queryList("QWidget", 0, false, args.count() == 0 || args[0] != "false");
+ for (QObject* w = widgets->first(); w; w = widgets->next())
+ if (w->name() && (dynamic_cast<KommanderWidget*>(w)))
+ matching.append(w->name());
+ return matching.join("\n");
+ }
+ }
+ return QString();
+}
+
+bool KommanderWidget::isFunctionSupported(int f)
+{
+ return f == DCOP::setEnabled || f == DCOP::setVisible || f == DCOP::children || f == DCOP::type;
+}
+
+bool KommanderWidget::isCommonFunction(int f)
+{
+ return f == DCOP::setEnabled || f == DCOP::setVisible || f == DCOP::children || f == DCOP::type;
+}
+
+ParserData* KommanderWidget::internalParserData() const
+{
+ return m_parserData;
+}
+
+QString KommanderWidget::fileName()
+{
+ KommanderWindow* window = dynamic_cast<KommanderWindow*>(parentDialog());
+ if (window)
+ return QString(window->fileName());
+ else
+ return QString();
+}
+
+QString KommanderWidget::widgetName() const
+{
+ if (m_thisObject)
+ return QString::fromLatin1(m_thisObject->name());
+ else
+ return QString();
+}
+
+bool KommanderWidget::inEditor = false;
+bool KommanderWidget::showErrors = true;
+bool KommanderWidget::useInternalParser = false;
+ParserData* KommanderWidget::m_parserData = new ParserData;
+
+
diff --git a/kommander/widget/kommanderwidget.h b/kommander/widget/kommanderwidget.h
new file mode 100644
index 00000000..90a748b2
--- /dev/null
+++ b/kommander/widget/kommanderwidget.h
@@ -0,0 +1,162 @@
+/***************************************************************************
+ kommanderwidget.h - Text widget core functionality
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_KOMMANDERWIDGET_H_
+#define _HAVE_KOMMANDERWIDGET_H_
+
+/* KDE INCLUDES */
+#include <kprocess.h>
+
+#include "kommander_export.h"
+/* QT INCLUDES */
+#include <qmap.h>
+#include <qobject.h>
+#include <qpair.h>
+#include <qstring.h>
+#include <qstringlist.h>
+
+class ParserData;
+
+class KOMMANDER_EXPORT KommanderWidget
+{
+ friend class MyProcess;
+public:
+ KommanderWidget(QObject *);
+ virtual ~KommanderWidget();
+
+ //List of available states. Most widgets have only one state, but f. e. radiobutton has both
+ // 'checked' and 'unchecked'
+ virtual QStringList states() const;
+ virtual QStringList displayStates() const;
+ virtual QString currentState() const = 0;
+
+ virtual bool isKommanderWidget() const = 0;
+
+ // Associated script
+ virtual void setAssociatedText(const QStringList& a_associations);
+ virtual QStringList associatedText() const;
+ virtual bool hasAssociatedText();
+
+ // Execute default script, expanding all @macros.
+ virtual QString evalAssociatedText();
+ // Execute given script, expanding all @macros.
+ virtual QString evalAssociatedText(const QString&);
+ // Evaluate given Kommander function using given args.
+ virtual QString evalFunction(const QString& function, const QStringList& args);
+ // Parse and evaluate function for given widget, converting it to appropriate DCOP call.
+ virtual QString evalWidgetFunction(const QString& identifier, const QString& s, int& pos);
+ // Evaluate given array function using given args.
+ virtual QString evalArrayFunction(const QString&, const QStringList&);
+ // Parse and evaluate given execBegin..execEnd block.
+ virtual QString evalExecBlock(const QStringList&, const QString& s, int& pos);
+ // Parse and evaluate given forEach..end block.
+ virtual QString evalForEachBlock(const QStringList&, const QString& s, int& pos);
+ // Parse and evaluate given for..end block.
+ virtual QString evalForBlock(const QStringList&, const QString& s, int& pos);
+ // Parse and evaluate given switch..case..end block.
+ virtual QString evalSwitchBlock(const QStringList&, const QString& s, int& pos);
+ // Parse and evaluate given if..endif block.
+ virtual QString evalIfBlock(const QStringList&, const QString& s, int& pos);
+ // Population text. It will become widgetText after populate() is called
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+ virtual void populate() = 0;
+
+ // Handles all widget-specific DCOP calls
+ virtual QString handleDCOP(int function, const QStringList& args = QStringList());
+ // Checks if appropriate function is supported by widget. By default all functions
+ // are reported as supported: use this to allow recognizing incorrect function calls.
+ virtual bool isFunctionSupported(int function);
+ // Checks if the function is common widget function (i. e. supported by all widgets)
+ virtual bool isCommonFunction(int function);
+ // Checks if the string is a valid widget name)
+ virtual bool isWidget(const QString& a_name) const;
+ // Returns widget from name
+ virtual KommanderWidget* widgetByName(const QString& a_name) const;
+ // Returns current widget name;
+ virtual QString widgetName() const;
+ // Returns filename associated with the dialog
+ virtual QString fileName();
+
+ QObject* object() { return m_thisObject;}
+
+
+ // Recognizes editor vs executor mode
+ static bool inEditor;
+ // Prints errors in message boxes, not in stderr
+ static bool showErrors;
+ // Default parser
+ static bool useInternalParser;
+ // Return global variable value
+ QString global(const QString& variableName);
+ // Set global variable value
+ void setGlobal(const QString& variableName, const QString& value);
+
+protected:
+ virtual void setStates(const QStringList& a_states);
+ virtual void setDisplayStates(const QStringList& a_displayStates);
+
+ // Execute DCOP query and return its result or null on failure
+ // Only QString and int are now handled
+ QString DCOPQuery(const QStringList& args);
+ QString localDCOPQuery(const QString function, const QStringList& args = QStringList());
+ QString localDCOPQuery(const QString function, const QString& arg1,
+ const QString& arg2, const QString& arg3 = QString::null,
+ const QString& arg4 = QString::null);
+ // Execute given command, return its result
+ QString execCommand(const QString& a_command, const QString& a_shell = QString::null) const;
+ // Find and run dialog (with optional parameters)
+ QString runDialog(const QString& a_dialog, const QString& a_params = QString::null);
+ // Display error message a_error; display current class name if no other is given
+ void printError(const QString& a_error) const;
+ // Auxiliary functions for parser
+ // Find matching brackets starting from current position
+ QString parseBrackets(const QString& s, int& from, bool& ok) const;
+ // Return identifier: the longest string of letters and numbers starting from i
+ QString parseIdentifier(const QString& s, int& from) const;
+ // Parse arguments for given function. Returns list of arguments without quotations
+ QStringList parseArgs(const QString& s, bool &ok);
+ // Remove quotes from given identifier
+ QString parseQuotes(const QString& s) const;
+ // Parse function
+ QStringList parseFunction(const QString& group, const QString& function,
+ const QString& s, int& from, bool& ok);
+ // Detect and return block boundary
+ int parseBlockBoundary(const QString& s, int from, const QStringList& args) const;
+
+ // Parse given identifier as widget name
+ KommanderWidget* parseWidget(const QString& name) const;
+ // Return parent dialog of this widget
+ QWidget* parentDialog() const;
+ QString substituteVariable(QString text, QString variable, QString value) const;
+
+ ParserData* internalParserData() const;
+
+ QObject *m_thisObject;
+ QStringList m_states;
+ QStringList m_displayStates;
+ QStringList m_associatedText;
+ QString m_populationText;
+
+ // Internal parser data
+ static ParserData* m_parserData;
+};
+
+
+#define ESCCHAR '@'
+
+#endif
diff --git a/kommander/widget/kommanderwindow.cpp b/kommander/widget/kommanderwindow.cpp
new file mode 100644
index 00000000..b536eb87
--- /dev/null
+++ b/kommander/widget/kommanderwindow.cpp
@@ -0,0 +1,35 @@
+/***************************************************************************
+ kommanderwindow.cpp - Kommander window widgets
+ -------------------
+ copyright : (C) 2004 by Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "kommanderwindow.h"
+
+KommanderWindow::KommanderWindow(QObject* object) : KommanderWidget(object)
+{
+}
+
+KommanderWindow::~KommanderWindow()
+{
+}
+
+
+void KommanderWindow::setFileName(const QString& s)
+{
+ m_fileName = s;
+}
+
+QString KommanderWindow::fileName()
+{
+ return m_fileName;
+}
diff --git a/kommander/widget/kommanderwindow.h b/kommander/widget/kommanderwindow.h
new file mode 100644
index 00000000..023bd395
--- /dev/null
+++ b/kommander/widget/kommanderwindow.h
@@ -0,0 +1,37 @@
+/***************************************************************************
+ kommanderwindow.h - Kommander window widgets
+ -------------------
+ copyright : (C) 2004 by Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_KOMMANDERWINDOW_H_
+#define _HAVE_KOMMANDERWINDOW_H_
+
+#include "kommanderwidget.h"
+#include "kommander_export.h"
+class KOMMANDER_EXPORT KommanderWindow : public KommanderWidget
+{
+public:
+ KommanderWindow(QObject *);
+ virtual ~KommanderWindow();
+ virtual void setFileName(const QString& s);
+ virtual QString fileName();
+protected:
+
+private:
+ QString m_fileName;
+};
+
+
+
+#endif
+
diff --git a/kommander/widget/myprocess.cpp b/kommander/widget/myprocess.cpp
new file mode 100644
index 00000000..e7e05e3b
--- /dev/null
+++ b/kommander/widget/myprocess.cpp
@@ -0,0 +1,137 @@
+/***************************************************************************
+ myprocess.cpp - Wrapper class for running shell processes
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+/* KDE INCLUDES */
+#include <klocale.h>
+#include <kprocess.h>
+#include <klocale.h>
+
+/* QT INCLUDES */
+#include <qapplication.h>
+#include <qobject.h>
+#include <qstring.h>
+
+/* OTHER INCLUDES */
+#include "myprocess.h"
+#include "kommanderwidget.h"
+
+MyProcess::MyProcess(const KommanderWidget *a_atw)
+ : m_atw(a_atw), m_loopStarted(false), m_blocking(true), mProcess(0)
+{
+}
+
+void qt_enter_modal(QWidget *widget);
+void qt_leave_modal(QWidget *widget);
+
+void MyProcess::setBlocking(bool blocking)
+{
+ m_blocking = blocking;
+}
+
+QString MyProcess::output() const
+{
+ return m_output;
+}
+
+bool MyProcess::isBlocking() const
+{
+ return m_blocking;
+}
+
+
+void MyProcess::cancel()
+{
+ if (mProcess) {
+ delete mProcess;
+ mProcess = 0;
+ }
+}
+
+QString MyProcess::run(const QString& a_command, const QString& a_shell)
+{
+ QString at = a_command.stripWhiteSpace();
+ if (at.isEmpty())
+ {
+ emit processExited(0);
+ return QString();
+ }
+
+ QString shellName = a_shell;
+ if (shellName.isEmpty())
+ shellName = "/bin/sh";
+
+ // Look for shell
+ if (at.startsWith("#!")) {
+ int eol = at.find("\n");
+ if (eol == -1)
+ eol = at.length();
+ shellName = at.mid(2, eol-1).stripWhiteSpace();
+ at = at.mid(eol+1);
+ }
+ m_input = at.local8Bit();
+
+ mProcess = new KProcess;
+ (*mProcess) << shellName.latin1();
+
+ connect(mProcess, SIGNAL(receivedStdout(KProcess*, char*, int)),
+ SLOT(slotReceivedStdout(KProcess*, char*, int)));
+ connect(mProcess, SIGNAL(processExited(KProcess*)), SLOT(slotProcessExited(KProcess*)));
+
+ if(!mProcess->start(KProcess::NotifyOnExit, KProcess::All))
+ {
+ m_atw->printError(i18n("<qt>Failed to start shell process<br><b>%1</b></qt>").arg(shellName));
+ return QString();
+ }
+ mProcess->writeStdin(m_input, m_input.length());
+ mProcess->closeStdin();
+
+ if (!m_blocking)
+ return QString();
+ else
+ {
+ QWidget dummy(0, 0, WType_Dialog | WShowModal);
+ dummy.setFocusPolicy(QWidget::NoFocus);
+ m_loopStarted = true;
+ qt_enter_modal(&dummy);
+ qApp->enter_loop();
+ qt_leave_modal(&dummy);
+
+ if (!m_output.isEmpty() && m_output[m_output.length()-1] == '\n')
+ return m_output.left(m_output.length()-1);
+ else
+ return m_output;
+ }
+}
+
+void MyProcess::slotReceivedStdout(KProcess*, char* a_buffer, int a_len)
+{
+ m_output += QString::fromLocal8Bit(a_buffer, a_len);
+ emit processReceivedStdout(this, a_buffer, a_len);
+}
+
+void MyProcess::slotProcessExited(KProcess* process)
+{
+ if (m_loopStarted)
+ {
+ qApp->exit_loop();
+ m_loopStarted = false;
+ }
+ delete process;
+ if (!m_blocking)
+ emit processExited(this);
+ mProcess = 0;
+}
+
+#include "myprocess.moc"
diff --git a/kommander/widget/myprocess.h b/kommander/widget/myprocess.h
new file mode 100644
index 00000000..8487f170
--- /dev/null
+++ b/kommander/widget/myprocess.h
@@ -0,0 +1,58 @@
+/***************************************************************************
+ myprocess.h - Wrapper class for running shell processes
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef _HAVE_MYPROCESS_H_
+#define _HAVE_MYPROCESS_H_
+
+/* KDE INCLUDES */
+#include <kprocess.h>
+
+/* QT INCLUDES */
+#include <qstring.h>
+#include <qobject.h>
+#include "kommander_export.h"
+
+class KommanderWidget;
+
+class KOMMANDER_EXPORT MyProcess : public QObject
+{
+ Q_OBJECT
+public:
+ MyProcess(const KommanderWidget *);
+ // Run given command, using a_shell as a shell (this can be overridden by shebang in the first line)
+ // Process is run in blocking mode.
+ QString run(const QString& a_command, const QString& a_shell = "/bin/sh");
+ // Kill running process
+ void cancel();
+ void setBlocking(bool blocking);
+ bool isBlocking() const;
+ QString output() const;
+signals:
+ void processExited(MyProcess*);
+ void processReceivedStdout(MyProcess*, char*, int);
+private slots:
+ void slotReceivedStdout(KProcess*, char*, int);
+ void slotProcessExited(KProcess*);
+protected:
+ const KommanderWidget *m_atw;
+ QString m_output;
+ QCString m_input;
+ bool m_loopStarted;
+ bool m_blocking;
+ bool m_handleOutput;
+ KProcess* mProcess;
+};
+
+#endif
diff --git a/kommander/widget/parsenode.cpp b/kommander/widget/parsenode.cpp
new file mode 100644
index 00000000..09ad66a7
--- /dev/null
+++ b/kommander/widget/parsenode.cpp
@@ -0,0 +1,262 @@
+/***************************************************************************
+ parsenode.cpp - Single parsed item
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "parsenode.h"
+
+using namespace Parse;
+
+ParseNode::ParseNode() : m_type(ValueNone), m_context(-1)
+{
+}
+
+ParseNode::ParseNode(const QString& s) : m_type(ValueString), m_string(s), m_context(-1)
+{
+}
+
+ParseNode::ParseNode(int i) : m_type(ValueInt), m_int(i), m_context(-1)
+{
+}
+
+ParseNode::ParseNode(uint i) : m_type(ValueInt), m_int(i), m_context(-1)
+{
+}
+
+ParseNode::ParseNode(double d) : m_type(ValueDouble), m_double(d), m_context(-1)
+{
+}
+
+ParseNode::ParseNode(Keyword k) : m_type(ValueKeyword), m_keyword(k), m_string(QString::null), m_context(-1)
+{
+}
+
+ParseNode::ParseNode(Keyword k, const QString& name) : m_type(ValueKeyword), m_keyword(k), m_context(-1)
+{
+ m_string = (k == Variable) ? name : QString::null;
+}
+
+ParseNode ParseNode::error(const QString& s)
+{
+ ParseNode p;
+ p.m_string = s;
+ p.m_type = ValueError;
+ return p;
+}
+
+ValueType ParseNode::type() const
+{
+ return m_type;
+}
+
+Keyword ParseNode::keyword() const
+{
+ return isKeyword() ? m_keyword : Invalid;
+}
+
+QString ParseNode::toString() const
+{
+ switch(type()) {
+ case ValueString: return m_string;
+ case ValueInt: return QString::number(m_int);
+ case ValueDouble: return QString::number(m_double);
+ default: return QString();
+ }
+}
+
+int ParseNode::toInt() const
+{
+ switch(type()) {
+ case ValueInt: return m_int;
+ case ValueDouble: return (int)m_double;
+ case ValueString: return m_string.toInt();
+ default: return 0;
+ }
+}
+
+double ParseNode::toDouble() const
+{
+ switch(type()) {
+ case ValueDouble: return m_double;
+ case ValueInt: return (double)m_int;
+ case ValueString: return m_string.toDouble();
+ default: return 0.0;
+ }
+}
+
+bool ParseNode::toBool() const
+{
+ return toInt() != 0;
+}
+
+bool ParseNode::isValid() const
+{
+ return type() != ValueError;
+}
+
+bool ParseNode::isKeyword() const
+{
+ return type() == ValueKeyword;
+}
+
+bool ParseNode::isKeyword(Keyword k) const
+{
+ return type() == ValueKeyword && keyword() == k;
+}
+
+bool ParseNode::isVariable() const
+{
+ return type() == ValueKeyword && keyword() == Variable;
+}
+
+bool ParseNode::isArray() const
+{
+ return type() == ValueKeyword && keyword() == Array;
+}
+
+QString ParseNode::variableName() const
+{
+ return isVariable() ? m_string : QString();
+}
+
+QString ParseNode::arrayName() const
+{
+ return isArray() ? m_string : QString();
+}
+
+QString ParseNode::errorMessage() const
+{
+ return isValid() ? QString() : m_string;
+}
+
+
+ValueType ParseNode::commonType(const ParseNode& p) const
+{
+ if (type() == ValueKeyword || p.type() == ValueKeyword)
+ return ValueKeyword;
+ else if (type() == ValueString || p.type() == ValueString)
+ return ValueString;
+ else if (type() == ValueDouble || p.type() == ValueDouble)
+ return ValueDouble;
+ return ValueInt;
+}
+
+static int parsenode_compareDouble(const double A, const double B)
+{
+ return A<B ? -1 : (A==B ? 0 : 1);
+}
+
+int ParseNode::compare(const ParseNode& p) const
+{
+ switch (commonType(p))
+ {
+ case ValueString: return toString().compare(p.toString());
+ case ValueDouble: return parsenode_compareDouble(toDouble(), p.toDouble());
+ case ValueInt: return toInt() - p.toInt();
+ default: return 0;
+ }
+}
+
+bool ParseNode::operator==(int i) const
+{
+ return toInt() == i;
+}
+
+bool ParseNode::operator==(bool b) const
+{
+ return toBool() == b;
+}
+
+bool ParseNode::operator==(const QString& s) const
+{
+ return toString() == s;
+}
+
+bool ParseNode::operator==(const ParseNode& p) const
+{
+ return compare(p) == 0;
+}
+
+bool ParseNode::operator!=(const ParseNode& p) const
+{
+ return compare(p) != 0;
+}
+
+bool ParseNode::operator>=(const ParseNode& p) const
+{
+ return compare(p) >= 0;
+}
+
+bool ParseNode::operator<=(const ParseNode& p) const
+{
+ return compare(p) <= 0;
+}
+
+bool ParseNode::operator>(const ParseNode& p) const
+{
+ return compare(p) > 0;
+}
+
+bool ParseNode::operator<(const ParseNode& p) const
+{
+ return compare(p) < 0;
+}
+
+void ParseNode::setValue(int i)
+{
+ m_type = ValueInt;
+ m_int = i;
+}
+
+void ParseNode::setValue(double d)
+{
+ m_type = ValueDouble;
+ m_double = d;
+}
+
+void ParseNode::setValue(const QString& s)
+{
+ m_type = ValueString;
+ m_string = s;
+}
+
+void ParseNode::setVariable(const QString& name)
+{
+ m_type = ValueKeyword;
+ m_keyword = Variable;
+ m_string = name;
+}
+
+void ParseNode::setArray(const QString& name)
+{
+ m_type = ValueKeyword;
+ m_keyword = Array;
+ m_string = name;
+}
+
+bool ParseNode::isValue() const
+{
+ return m_type <= ValueValue;
+}
+
+void ParseNode::setContext(int c)
+{
+ m_context = c;
+}
+
+int ParseNode::context() const
+{
+ return m_context;
+}
+
diff --git a/kommander/widget/parsenode.h b/kommander/widget/parsenode.h
new file mode 100644
index 00000000..305b0998
--- /dev/null
+++ b/kommander/widget/parsenode.h
@@ -0,0 +1,129 @@
+/***************************************************************************
+ parsenode.cpp - Single parsed item
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_PARSENODE_H_
+#define _HAVE_PARSENODE_H_
+
+#include <qstring.h>
+
+namespace Parse
+{
+ enum Keyword {For, To, Step, End, While, Do, Foreach, In, If, Then, Else, Elseif, Endif, Switch, Case,
+ Break, Continue, Exit, Dot, Semicolon, Comma, Assign, Less, LessEqual, Greater, GreaterEqual, Equal, NotEqual,
+ Not, And, Or, False, True, LeftParenthesis, RightParenthesis, LeftBracket, DoubleBracket, RightBracket, LeftCurlyBrace, RightCurlyBrace, PlusEqual, MinusEqual, Increment, Decrement,
+ Plus, Minus, Multiply, Divide, Mod, LastRealKeyword = Mod, Variable, Invalid, Array, Matrix, ArrKeyVal};
+
+ enum KeywordGroup {GroupComparison, GroupAdd, GroupMultiply, GroupMisc};
+ enum ValueType {ValueString, ValueInt, ValueDouble, ValueValue = ValueDouble, ValueKeyword,
+ ValueNone, ValueError};
+
+ enum Mode{Execute, CheckOnly};
+
+ enum Flow{FlowStandard, FlowContinue, FlowBreak, FlowExit};
+}
+
+class ParseNode {
+public:
+ /* Default constructor */
+ ParseNode();
+ /* Create node from string */
+ ParseNode(const QString& s);
+ /* Create node from integer */
+ ParseNode(int i);
+ /* Create node from integer */
+ ParseNode(uint i);
+ /* Create node from double */
+ ParseNode(double d);
+ /* Create node from keyword */
+ ParseNode(Parse::Keyword k);
+ /* Create node from keyword and variable name */
+ ParseNode(Parse::Keyword k, const QString& s);
+ /* Create error node with optional error message */
+ static ParseNode error(const QString& s);
+
+ /* Return current type */
+ Parse::ValueType type() const;
+ /* Return current keyword if appropriate */
+ Parse::Keyword keyword() const;
+ /* Cast value to string */
+ QString toString() const;
+ /* Cast value to integer */
+ int toInt() const;
+ /* Cast value to double */
+ double toDouble() const;
+ /* Cast value to bool */
+ bool toBool() const;
+ /* Check if a value is valid */
+ bool isValid() const;
+ /* Check if current value is a keyword */
+ bool isKeyword() const;
+ /* Check if current value is a given keyword */
+ bool isKeyword(Parse::Keyword k) const;
+ /* Check if current value is a variable */
+ bool isVariable() const;
+ /* Check if current value is an Array */
+ bool isArray() const;
+ /* Return the name of variable */
+ QString variableName() const;
+ /* Return the name of array */
+ QString arrayName() const;
+ /* Return error message if applicable */
+ QString errorMessage() const;
+ /* Calculate common type for two nodes */
+ Parse::ValueType commonType(const ParseNode& p) const;
+ /* Find common type and compare values */
+ int compare(const ParseNode& p) const;
+ /* Various comparing functions */
+ bool operator==(int i) const;
+ bool operator==(bool b) const;
+ bool operator==(const QString& s) const;
+ bool operator==(const ParseNode& p) const;
+ bool operator!=(const ParseNode& p) const;
+ bool operator>=(const ParseNode& p) const;
+ bool operator<=(const ParseNode& p) const;
+ bool operator>(const ParseNode& p) const;
+ bool operator<(const ParseNode& p) const;
+ /* set value as integer */
+ void setValue(int i);
+ /* set value as double */
+ void setValue(double d);
+ /* set value as string */
+ void setValue(const QString& s);
+ /* set value as variable */
+ void setVariable(const QString& name);
+ /* set value as array */
+ void setArray(const QString& name);
+ /* check if it is correct value */
+ bool isValue() const;
+ /* for setting some context information, f. e. for bug reporting */
+ void setContext(int c);
+ /* get current context */
+ int context() const;
+
+private:
+ Parse::ValueType m_type;
+ union {
+ int m_int;
+ double m_double;
+ Parse::Keyword m_keyword;
+ };
+ QString m_string;
+ int m_context;
+};
+
+
+#endif
+
diff --git a/kommander/widget/parser.cpp b/kommander/widget/parser.cpp
new file mode 100644
index 00000000..9bc9637b
--- /dev/null
+++ b/kommander/widget/parser.cpp
@@ -0,0 +1,1243 @@
+/***************************************************************************
+ parser.cpp - Internal parser
+ -------------------
+ copyright : (C) 2004-2006 Michal Rudolf <mrudolf@kdewebdwev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include <klocale.h>
+
+#include "parser.h"
+#include "parserdata.h"
+#include "kommanderwidget.h"
+
+using namespace Parse;
+
+QString unescape(QString s)
+{
+ return s.replace("\\\"", "\"").replace("\\t", "\t").replace("\\n", "\n").replace("\\\\", "\\");
+}
+
+Parser::Parser(ParserData* pData) : m_data(pData), m_start(0), m_error(QString::null), m_errorPosition(0),
+ m_widget(0)
+{
+}
+
+Parser::Parser(ParserData* pData, const QString& expr) : m_data(pData), m_start(0),
+ m_error(QString::null), m_errorPosition(0), m_widget(0)
+{
+ setString(expr);
+}
+
+bool Parser::setString(const QString& s)
+{
+ reset();
+ m_parts.clear();
+ uint lines = 0;
+ uint start = 0;
+ uint i = 0;
+ while (start < s.length())
+ {
+ if (s[start].isSpace() && s[start] != '\n')
+ start++;
+ else if (s[start] == '\\' && start < s.length() - 1 && s[start+1] == '\n')
+ start += 2;
+ else if (s[start] == ';')
+ {
+ insertNode(Semicolon, lines);
+ start++;
+ }
+ else if (s[start] == '\n')
+ {
+ if (m_parts.count() && !m_parts.last().isKeyword(Semicolon))
+ insertNode(Semicolon, lines);
+ lines++;
+ start++;
+ }
+ else if (s[start] == '\"') // quoted string: "abc"
+ {
+ bool escaped = false;
+ for (i = start + 1; i < s.length() && (s[i] != '\"' || s[i-1] == '\\'); i++)
+ if (!escaped)
+ escaped = s[i] == '\\';
+ if (escaped)
+ insertNode(unescape(s.mid(start + 1, i - start - 1)), lines);
+ else
+ insertNode(s.mid(start + 1, i - start - 1), lines);
+ start = i+1;
+ }
+ else if (s[start].isDigit()) // number: 1000 or 2.45
+ {
+ bool decimal = false;
+ for (i = start+1; s[i].isDigit() || (!decimal && s[i] == QChar('.')); i++)
+ if (s[i] == '.')
+ decimal = true;
+ if (decimal)
+ insertNode(s.mid(start, i - start).toDouble(), lines);
+ else
+ insertNode(s.mid(start, i - start).toInt(), lines);
+ start = i;
+ }
+ else if (s[start].isLetter() || s[start] == '_') // keyword
+ {
+ for (i = start+1; s[i].isLetterOrNumber() || s[i] == '_'; i++)
+ ;
+ QString name = s.mid(start, i - start);
+ insertNode(ParseNode(m_data->stringToKeyword(name), name), lines);
+ start = i;
+ } // comment
+ else if (s[start] == '#' || (s[start] == '/' && start < s.length() +1 && s[start+1] == '/'))
+ {
+ while (start < s.length() && s[start] != '\n')
+ start++;
+ } // enable /* */ block comments
+ else if (s[start] == '/' && start < s.length() +1 && s[start+1] == '*')
+ {
+ start += 2;
+ while (start < s.length() +1 && !(s[start] == '*' && s[start+1] == '/'))
+ {
+ start++;
+ }
+ start += 2;
+ } // special keyword: <>
+ else if (m_data->stringToKeyword(s.mid(start, 2)) <= LastRealKeyword)
+ {
+ insertNode(m_data->stringToKeyword(s.mid(start, 2)), lines);
+ start += 2;
+ } // special keyword: <
+ else if (m_data->stringToKeyword(s.mid(start, 1)) <= LastRealKeyword)
+ {
+ insertNode(m_data->stringToKeyword(s.mid(start, 1)), lines);
+ start++;
+ }
+ else // Bad character
+ {
+ insertNode(s.mid(start, 1), lines);
+ setError(i18n("Invalid character: '%1'").arg(s[start]), m_parts.count()-1);
+ return false;
+ }
+ }
+ return true;
+}
+
+void Parser::setWidget(KommanderWidget* w)
+{
+ m_widget = w;
+}
+
+void Parser::insertNode(ParseNode p, int line)
+{
+ p.setContext(line);
+ m_parts.append(p);
+}
+
+QString Parser::errorMessage() const
+{
+ return m_error;
+}
+
+QString Parser::function(ParserData* data, const QString& name, const QStringList& params)
+{
+ ParameterList par;
+ for (QStringList::ConstIterator Iter = params.begin(); Iter != params.end(); ++Iter)
+ par.append(*Iter);
+ Function f = data->function(name);
+ return f.execute(0, par).toString();
+}
+
+QString Parser::expression(Mode mode)
+{
+ reset();
+ ParseNode p = parseExpression(mode);
+ if (!isError())
+ return p.toString();
+ else
+ return QString();
+}
+
+bool Parser::isError() const
+{
+ return !m_error.isNull();
+}
+
+
+bool Parser::command(Mode mode)
+{
+ reset();
+ parseCommand(mode);
+ return !isError();
+}
+
+bool Parser::parse(Mode mode)
+{
+ reset();
+ parseBlock(mode);
+ return !isError();
+}
+
+int Parser::errorLine() const
+{
+ if (isError())
+ return m_parts[m_errorPosition].context();
+ else
+ return -1;
+}
+
+ParseNode Parser::parseConstant(Parse::Mode)
+{
+ ParseNode p = next();
+ m_start++;
+ if (!p.isValue())
+ {
+ setError(i18n("Constant value expected"));
+ return ParseNode();
+ }
+ return p;
+}
+//attempting to allow assign or copy of array, so far with no joy
+ParseNode Parser::parseValue(Mode mode)
+{
+ ParseNode p = next();
+ //QString p2 = QString(p.toString());
+ //qDebug("parseValue p2 = "+p2);
+ if (isFunction())
+ return parseFunction(mode);
+ else if (isWidget())
+ return parseWidget(mode);
+ else if (tryVariable(CheckOnly))
+ {
+ if (tryKeyword(LeftBracket, CheckOnly))
+ {
+ QString index = parseValue(mode).toString();
+ if (tryKeyword(DoubleBracket, CheckOnly))
+ {//2D array "matrix"
+ QString index2 = parseValue(mode).toString();
+ tryKeyword(RightBracket);
+ QString arr = p.variableName();
+ return matrixValue(arr, index, index2);
+ }
+ tryKeyword(RightBracket);
+ QString arr = p.variableName();
+ return arrayValue(arr, index);
+ }
+ else if (tryKeyword(Dot, CheckOnly))
+ {
+ QString value = variable(p.variableName()).toString();
+ if (m_widget && m_widget->isWidget(value))
+ {
+ m_start--;
+ return parseWidget(mode, value);
+ }else if (mode == Execute)
+ {
+ setError(i18n("'%1' (%2) is not a widget").arg(p.variableName()).arg(variable(p.variableName()).toString()));
+ return ParseNode();
+ } else
+ {
+ //this means it looks like a widget, but it is unknown. As we only check
+ //the syntax, we should ignore the error an parse as a widget.
+ m_start = m_start - 2;
+ return parseWidget(mode);
+ }
+ }
+ else if (tryKeyword(LeftParenthesis, CheckOnly))
+ {
+ setError(i18n("'%1' is not a function").arg(p.variableName()));
+ return ParseNode();
+ }
+ else
+ p = variable(p.variableName());
+ }
+ else if (tryKeyword(False, CheckOnly))
+ return ParseNode(0);
+ else if (tryKeyword(True, CheckOnly))
+ return ParseNode(1);
+/* else if (isArray(p2))
+ {
+ qDebug("returning array fpr p2");
+ return p2;
+ }*/
+ else if (p.isKeyword())
+ setError(i18n("Expected value"));
+ else // single value
+ m_start++;
+ return p;
+}
+
+ParseNode Parser::parseMultiply(Mode mode)
+{
+ ParseNode p = parseParenthesis(mode);
+ while (m_data->keywordGroup(next().keyword()) == GroupMultiply)
+ {
+ Keyword k = next().keyword();
+ m_start++;
+ ParseNode p2 = parseParenthesis(mode);
+ ValueType type = p.commonType(p2);
+ if (mode == Execute)
+ {
+ if (k == Multiply)
+ if (type == ValueInt)
+ p = p.toInt() * p2.toInt();
+ else
+ p = p.toDouble() * p2.toDouble();
+ else if (k == Divide)
+ {
+ if (p2.toDouble() == 0.0)
+ setError(i18n("Divide by zero"));
+ else
+ if (type == ValueInt)
+ p = p.toInt() / p2.toInt();
+ else
+ p = p.toDouble() / p2.toDouble();
+ }
+ else /* k == Mod */
+ {
+ if (p2.toInt() == 0)
+ setError(i18n("Divide by zero"));
+ else
+ p = p.toInt() - p.toInt() / p2.toInt() * p2.toInt();
+ }
+ }
+ }
+ return p;
+}
+
+ParseNode Parser::parseAdd(Mode mode)
+{
+ ParseNode p = parseMultiply(mode);
+ while (m_data->keywordGroup(next().keyword()) == GroupAdd)
+ {
+ Keyword k = next().keyword();
+ m_start++;
+ ParseNode p2 = parseMultiply(mode);
+ ValueType type = p.commonType(p2);
+ if (mode == Execute)
+ {
+ if (k == Plus)
+ if (type == ValueString)
+ p = QString(p.toString() + p2.toString());
+ else if (type == ValueDouble)
+ p = p.toDouble() + p2.toDouble();
+ else
+ p = p.toInt() + p2.toInt();
+ else /* k == Minus */
+ if (type == ValueDouble)
+ p = p.toDouble() - p2.toDouble();
+ else
+ p = p.toInt() - p2.toInt();
+ }
+ }
+ return p;
+}
+
+ParseNode Parser::parseSignedNumber(Mode mode)
+{
+ if (tryKeyword(Minus, CheckOnly))
+ {
+ ParseNode p = parseValue(mode);
+ if (p.type() == ValueDouble)
+ return ParseNode(-p.toDouble());
+ else
+ return ParseNode(-p.toInt());
+ }
+ else
+ return parseValue(mode);
+}
+
+ParseNode Parser::parseComparison(Mode mode)
+{
+ ParseNode p1 = parseAdd(mode);
+ if (m_data->keywordGroup(next().keyword()) == GroupComparison)
+ {
+ Keyword k = next().keyword();
+ m_start++;
+ ParseNode p2 = parseAdd(mode);
+ switch (k) {
+ case Less: return ParseNode(p1 < p2);
+ case LessEqual: return ParseNode(p1 <= p2);
+ case Equal: return ParseNode(p1 == p2);
+ case NotEqual: return ParseNode(p1 != p2);
+ case GreaterEqual: return ParseNode(p1 >= p2);
+ case Greater: return ParseNode(p1 > p2);
+ default: ;
+ }
+ }
+ return p1;
+}
+
+ParseNode Parser::parseParenthesis(Mode mode)
+{
+ if (tryKeyword(LeftParenthesis, CheckOnly))
+ {
+ ParseNode p = parseExpression(mode);
+ tryKeyword(RightParenthesis);
+ return p;
+ }
+ else
+ return parseSignedNumber(mode);
+}
+
+
+ParseNode Parser::parseNot(Mode mode)
+{
+ if (tryKeyword(Not, CheckOnly))
+ return !parseComparison(mode).toBool();
+ else
+ return parseComparison(mode);
+}
+
+ParseNode Parser::parseAnd(Mode mode)
+{
+ ParseNode p = parseNot(mode);
+ while (tryKeyword(And, CheckOnly))
+ {
+ if (p == false)
+ parseNot(CheckOnly);
+ else
+ p = parseNot(mode);
+ }
+ return p;
+}
+
+ParseNode Parser::parseOr(Mode mode)
+{
+ ParseNode p = parseAnd(mode);
+ while (tryKeyword(Or, CheckOnly))
+ {
+ if (p == true)
+ parseAnd(CheckOnly);
+ else
+ p = parseAnd(mode);
+ }
+ return p;
+}
+
+ParseNode Parser::parseCondition(Mode mode)
+{
+ return parseOr(mode);
+}
+
+ParseNode Parser::parseExpression(Mode mode)
+{
+ return parseOr(mode);
+}
+
+ParseNode Parser::parseFunction(Mode mode)
+{
+ int pos = m_start;
+ QString name = next().variableName();
+ //qDebug("Parsing function: "+name);
+ Function f = m_data->function(name);
+ m_start++;
+ ParameterList params;
+
+ if (tryKeyword(LeftParenthesis, CheckOnly) && !tryKeyword(RightParenthesis, CheckOnly))
+ {
+ do {
+ params.append(parseExpression(mode));
+ } while (tryKeyword(Comma, CheckOnly));
+ tryKeyword(RightParenthesis);
+ }
+ if (f.minArgs() > params.count())
+ setError(i18n("in function '%1': %2").arg(name).arg(i18n("too few parameters")), pos);
+ else if (f.maxArgs() < params.count())
+ setError(i18n("in function '%1': %2").arg(name).arg(i18n("too many parameters")), pos);
+ else if (mode == Execute)
+ {
+ ParseNode p = f.execute(this, params);
+ if (!p.isValid())
+ {
+ setError(i18n("in function '%1': %2").arg(name).arg(p.errorMessage()), pos);
+ return ParseNode();
+ }
+ else
+ return p;
+ }
+ return ParseNode();
+}
+
+ParseNode Parser::parseWidget(Mode mode, const QString &widgetName)
+{
+ int pos = m_start;
+ QString widget;
+ if (widgetName.isNull())
+ widget = nextVariable(mode);
+ else
+ widget = widgetName;
+ Function f = m_data->function("internalDcop");
+
+ if (!tryKeyword(Dot))
+ return ParseNode();
+ QString var = nextVariable();
+ if (var.isNull())
+ return ParseNode();
+ ParameterList params;
+ params.append(var);
+ params.append(widget);
+
+ if (tryKeyword(LeftParenthesis, CheckOnly) && !tryKeyword(RightParenthesis, CheckOnly))
+ {
+ do {
+ params.append(parseExpression(mode));
+ } while (tryKeyword(Comma, CheckOnly));
+ tryKeyword(RightParenthesis);
+ }
+ if (mode == Execute)
+ {
+ ParseNode p = f.execute(this, params);
+ if (!p.isValid())
+ {
+ setError(i18n("in widget function '%1.%2': %3").arg(widget).arg(var).arg(p.errorMessage()), pos);
+ return ParseNode();
+ }
+ else
+ return p;
+ }
+ return ParseNode();
+}
+
+
+ParseNode Parser::parseAssignment(Mode mode)
+{
+ QString var = nextVariable();
+ //qDebug("var = "+var+" Pos:"+QString::number(m_start));
+ if (tryKeyword(LeftBracket, CheckOnly))
+ {
+ QString index = parseValue(mode).toString();
+ if (tryKeyword(DoubleBracket, CheckOnly))
+ {//2D array "matrix"
+ ParseNode p1 = next(); //move along...
+ QString index2 = parseValue(mode).toString();
+ tryKeyword(RightBracket);
+ p1 = next();
+ ParseNode p2 = matrixValue(var, index, index2);
+ if (p1.isKeyword(PlusEqual))
+ {
+ tryKeyword(PlusEqual);
+ ParseNode p = parseExpression(mode);
+ if (mode == Execute)
+ {
+ if (p2.type() == ValueString)
+ p = QString(p2.toString() + p.toString());
+ else if (p2.type() == ValueDouble)
+ p = p2.toDouble() + p.toDouble();
+ else
+ p = p2.toInt() + p.toInt();
+ setMatrix(var, index, index2, p);
+ }
+ }
+ else if (p1.isKeyword(MinusEqual))
+ {
+ tryKeyword(MinusEqual);
+ ParseNode p = parseExpression(mode);
+ if (mode == Execute)
+ {
+ if (p2.type() == ValueDouble)
+ p = p2.toDouble() - p.toDouble();
+ else
+ p = p2.toInt() - p.toInt();
+ setMatrix(var, index, index2, p);
+ }
+ }
+ else if (p1.isKeyword(Increment))
+ {
+ tryKeyword(Increment);
+ if (mode == Execute)
+ {
+ p2 = p2.toInt() + 1;
+ setMatrix(var, index, index2, p2);
+ }
+ }
+ else if (p1.isKeyword(Decrement))
+ {
+ tryKeyword(Decrement);
+ if (mode == Execute)
+ {
+ p2 = p2.toInt() - 1;
+ setMatrix(var, index, index2, p2);
+ }
+ }
+ else
+ {
+ tryKeyword(Assign);
+ ParseNode p = parseExpression(mode);
+ if (mode == Execute)
+ setMatrix(var, index, index2, p);
+ }
+ }
+ else
+ {
+ tryKeyword(RightBracket);
+ ParseNode p1 = next();
+ // seems awkward and pedantic but array values are now handled like variables
+ // for special assign with oparator
+ ParseNode p2 = arrayValue(var, index);
+ if (p1.isKeyword(PlusEqual))
+ {
+ tryKeyword(PlusEqual);
+ ParseNode p = parseExpression(mode);
+ if (mode == Execute)
+ {
+ if (p2.type() == ValueString)
+ p = QString(p2.toString() + p.toString());
+ else if (p2.type() == ValueDouble)
+ p = p2.toDouble() + p.toDouble();
+ else
+ p = p2.toInt() + p.toInt();
+ setArray(var, index, p);
+ }
+ }
+ else if (p1.isKeyword(MinusEqual))
+ {
+ tryKeyword(MinusEqual);
+ ParseNode p = parseExpression(mode);
+ if (mode == Execute)
+ {
+ if (p2.type() == ValueDouble)
+ p = p2.toDouble() - p.toDouble();
+ else
+ p = p2.toInt() - p.toInt();
+ setArray(var, index, p);
+ }
+ }
+ else if (p1.isKeyword(Increment))
+ {
+ tryKeyword(Increment);
+ if (mode == Execute)
+ {
+ p2 = p2.toInt() + 1;
+ setArray(var, index, p2);
+ }
+ }
+ else if (p1.isKeyword(Decrement))
+ {
+ tryKeyword(Decrement);
+ if (mode == Execute)
+ {
+ p2 = p2.toInt() - 1;
+ setArray(var, index, p2);
+ }
+ }
+ else
+ {
+ tryKeyword(Assign);
+ ParseNode p = parseExpression(mode);
+ if (mode == Execute)
+ setArray(var, index, p);
+ }
+ }
+ }
+ else if (tryKeyword(Assign, CheckOnly))
+ {
+ ParseNode p = parseExpression(mode);
+ if (mode == Execute)
+ {
+ setVariable(var, p);
+ }
+ }
+ else if (tryKeyword(PlusEqual, CheckOnly))
+ {
+ ParseNode p = parseExpression(mode);
+ if (mode == Execute)
+ {
+ ParseNode p2 = variable(var);
+ if (p2.type() == ValueString)
+ p = QString(p2.toString() + p.toString());
+ else if (p2.type() == ValueDouble)
+ p = p2.toDouble() + p.toDouble();
+ else
+ p = p2.toInt() + p.toInt();
+ setVariable(var, p);
+ }
+ }
+ else if (tryKeyword(MinusEqual, CheckOnly))
+ {
+ ParseNode p = parseExpression(mode);
+ if (mode == Execute)
+ {
+ ParseNode p2 = variable(var);
+ if (p2.type() == ValueDouble)
+ p = p2.toDouble() - p.toDouble();
+ else
+ p = p2.toInt() - p.toInt();
+ setVariable(var, p);
+ }
+ }
+ else if (tryKeyword(Increment, CheckOnly))
+ {
+ //ParseNode p = parseExpression(mode);
+ if (mode == Execute)
+ {
+ ParseNode p = variable(var);
+ p = p.toInt() + 1;
+ setVariable(var, p);
+ }
+ }
+ else if (tryKeyword(Decrement, CheckOnly))
+ {
+ //ParseNode p = parseExpression(mode);
+ if (mode == Execute)
+ {
+ ParseNode p = variable(var);
+ p = p.toInt() - 1;
+ setVariable(var, p);
+ }
+ }
+ else if (tryKeyword(Dot, CheckOnly))
+ {
+ QString value = variable(var).toString();
+ if (m_widget && m_widget->isWidget(value))
+ {
+ m_start--;
+ return parseWidget(mode, value);
+ } else
+ if (mode == CheckOnly)
+ {
+ //this means it looks like a widget, but it is unknown. As we only check
+ //the syntax, we should ignore the error an parse as a widget.
+ m_start = m_start - 2;
+ return parseWidget(mode);
+ } else
+ setError(i18n("'%1' is not a widget").arg(var));
+ }
+ else if (tryKeyword(LeftParenthesis, CheckOnly))
+ setError(i18n("'%1' is not a function").arg(var));
+ else
+ setError(i18n("Unexpected symbol after variable '%1'").arg(var));
+
+ return ParseNode();
+}
+
+Flow Parser::parseIf(Mode mode)
+{
+ ParseNode p = next();
+ Flow flow = FlowStandard;
+ bool matched = false;
+ bool thenFound = false;
+ do {
+ m_start++;
+ Mode m = matched ? CheckOnly : mode;
+ p = parseCondition(m);
+ thenFound = tryKeyword(Then, CheckOnly);
+ if (!thenFound)
+ tryKeyword(LeftCurlyBrace);
+ bool condition = !matched && p.toBool();
+ if (condition)
+ {
+ flow = parseBlock(mode);
+ if (flow == FlowExit)
+ return flow;
+ }
+ else
+ parseBlock(CheckOnly);
+ matched = matched || p.toBool();
+ if (!thenFound)
+ tryKeyword(RightCurlyBrace);
+ } while (nextElseIf() == true);
+ bool braceFound = false;
+ if (tryKeyword(Else, CheckOnly))
+ {
+ braceFound = tryKeyword(LeftCurlyBrace, CheckOnly);
+ if (!matched)
+ flow = parseBlock(mode);
+ else
+ parseBlock(CheckOnly);
+ }
+ if (braceFound)
+ tryKeyword(RightCurlyBrace);
+ if (thenFound)
+ tryKeyword(Endif);
+ return flow;
+}
+
+bool Parser::nextElseIf()
+{
+ ParseNode p1 = next();
+ if (p1.isKeyword(Elseif))
+ return true;
+ else
+ {
+ ParseNode p2 = next();
+ if (p1.isKeyword(Else) && p2.isKeyword(If) )
+ return true;
+ }
+ return false;
+}
+
+Parse::Flow Parser::parseWhile(Mode mode)
+{
+ m_start++;
+ int start = m_start;
+ bool running = true;
+ Parse::Flow flow = FlowStandard;
+ bool doFound = false;
+ while (running)
+ {
+ m_start = start;
+ ParseNode p = parseCondition(mode);
+ doFound = tryKeyword(Do, CheckOnly);
+ if (!doFound && !tryKeyword(LeftCurlyBrace))
+ break;
+ running = p.toBool();
+ flow = parseBlock(running ? mode : CheckOnly);
+ if ( flow == FlowBreak || flow == FlowExit)
+ break;
+ }
+ if (flow != FlowExit)
+ {
+ if (doFound)
+ tryKeyword(End);
+ else
+ tryKeyword(RightCurlyBrace);
+ return FlowStandard;
+ }
+ else
+ return FlowExit;
+}
+
+Parse::Flow Parser::parseFor(Mode mode)
+{
+ m_start++;
+ QString var = nextVariable();
+ tryKeyword(Assign);
+ int start = parseExpression(mode).toInt();
+ tryKeyword(To);
+ int end = parseExpression(mode).toInt();
+ int step = 1;
+ if (tryKeyword(Step, CheckOnly))
+ step = parseExpression(mode).toInt();
+
+ bool doFound = tryKeyword(Do, CheckOnly);
+ if (!doFound)
+ tryKeyword(LeftCurlyBrace);
+ int block = m_start;
+ Parse::Flow flow = FlowStandard;
+ if (end >= start && step > 0)
+ {
+ for (int i = start; i <= end; i+=step)
+ {
+ m_start = block;
+ setVariable(var, ParseNode(i));
+ flow = parseBlock(mode);
+ if (flow == FlowBreak || flow == FlowExit)
+ break;
+ }
+ } else if (end <= start && step < 0)
+ {
+ for (int i = start; i >= end; i+=step)
+ {
+ m_start = block;
+ setVariable(var, ParseNode(i));
+ flow = parseBlock(mode);
+ if (flow == FlowBreak || flow == FlowExit)
+ break;
+ }
+ } else
+ parseBlock(Parse::CheckOnly);
+ if (flow != FlowExit)
+ {
+ if (doFound)
+ tryKeyword(End);
+ else
+ tryKeyword(RightCurlyBrace);
+ return FlowStandard;
+ }
+ else
+ return FlowExit;
+}
+
+Parse::Flow Parser::parseForeach(Mode mode)
+{
+ m_start++;
+ QString var = nextVariable();
+ QString var2 = "";
+ bool matrixfound = tryKeyword(ArrKeyVal, CheckOnly);
+ if (matrixfound == true)
+ {
+ m_start--;
+ tryKeyword(ArrKeyVal);
+ var2 = nextVariable();
+ }
+ tryKeyword(In);
+ QString arr = nextVariable();
+ bool doFound = tryKeyword(Do, CheckOnly);
+ if (!doFound)
+ tryKeyword(LeftCurlyBrace);
+ int start = m_start;
+ Parse::Flow flow = FlowStandard;
+ if (isArray(arr) && array(arr).count() && !matrixfound)
+ {
+ const QMap<QString, ParseNode> A = array(arr);
+ for (QMapConstIterator<QString, ParseNode> It = A.begin(); It != A.end(); ++It)
+ {
+ m_start = start;
+ setVariable(var, It.key());
+ flow = parseBlock(mode);
+ if (flow == FlowBreak || flow == FlowExit)
+ break;
+ }
+ }
+ else if (isMatrix(arr) && matrix(arr).count() )
+ {
+ const QMap<QString, QMap<QString, ParseNode> > A = matrix(arr);
+ for (QMapConstIterator<QString, QMap<QString, ParseNode> > It = A.begin(); It != A.end(); ++It)
+ {
+ m_start = start;
+ setVariable(var, It.key());
+ if (matrixfound == true)
+ {
+ const QMap<QString, ParseNode> B = It.data();
+ for (QMapConstIterator<QString, ParseNode> It2 = B.begin(); It2 != B.end(); ++It2 )
+ {
+ m_start = start;
+ setVariable(var2, It2.key());
+ flow = parseBlock(mode);
+ if (flow == FlowBreak || flow == FlowExit)
+ break;
+ }
+ }
+ else
+ {
+ flow = parseBlock(mode);
+ if (flow == FlowBreak || flow == FlowExit)
+ break;
+ }
+ }
+ }
+ else
+ parseBlock(CheckOnly);
+ if (flow != FlowExit)
+ {
+ if (doFound)
+ tryKeyword(End);
+ else
+ tryKeyword(RightCurlyBrace);
+ return FlowStandard;
+ }
+ else
+ return FlowExit;
+}
+
+void Parser::parseSwitch(Mode mode)
+{
+ m_start++;
+ QString var = nextVariable();
+ ParseNode caseValue = variable(var);
+ bool executed = false;
+ bool braceFound = false;
+ braceFound = tryKeyword(LeftCurlyBrace, CheckOnly);
+ tryKeyword(Semicolon, CheckOnly);
+ while (tryKeyword(Case, CheckOnly))
+ {
+ ParseNode p = parseConstant();
+ bool matched = mode == Execute && p == caseValue;
+ parseBlock(matched ? Execute : CheckOnly);
+ if (matched)
+ executed = true;
+ }
+ if (tryKeyword(Else, CheckOnly))
+ parseBlock(executed ? CheckOnly : mode);
+ if (!braceFound)
+ tryKeyword(End);
+ else
+ tryKeyword(RightCurlyBrace);
+}
+
+Flow Parser::parseCommand(Mode mode)
+{
+ ParseNode p = next();
+ QString p2 = p.toString();
+ //qDebug("Parsing command: "+p2);
+ if (next().isKeyword(If))
+ return parseIf(mode);
+ else if (next().isKeyword(While))
+ return parseWhile(mode);
+ else if (next().isKeyword(For))
+ return parseFor(mode);
+ else if (next().isKeyword(Foreach))
+ return parseForeach(mode);
+ else if (next().isKeyword(Switch))
+ parseSwitch(mode);
+ else if (tryKeyword(Continue, CheckOnly))
+ return FlowContinue;
+ else if (tryKeyword(Break, CheckOnly))
+ return FlowBreak;
+ else if (isFunction())
+ {
+ QString name = next().variableName();
+ parseFunction(mode);
+ if (name == "return" && mode == Execute)
+ return FlowExit;
+ }
+ else if (isWidget())
+ parseWidget(mode);
+ else if (next().isVariable())
+ parseAssignment(mode);
+ else if (tryKeyword(Exit, CheckOnly))
+ {
+ if (mode == Execute)
+ return FlowExit;
+ }
+ return FlowStandard;
+}
+
+Flow Parser::parseBlock(Mode mode)
+{
+ Flow flow = parseCommand(mode);
+ while (tryKeyword(Semicolon, CheckOnly) && flow != FlowExit)
+ {
+ if (flow == FlowStandard)
+ flow = parseCommand(mode);
+ else
+ parseCommand(CheckOnly);
+ }
+ return flow;
+}
+
+
+
+
+ParseNode Parser::next() const
+{
+ if (isError() || m_start >= m_parts.count())
+ return ParseNode();
+ return m_parts[m_start];
+}
+
+bool Parser::tryKeyword(Keyword k, Mode mode)
+{
+ if (next().isKeyword(k))
+ {
+ m_start++;
+ return true;
+ }
+ if (mode == Execute)
+ {
+ if (k == Dot)
+ setError(i18n("Expected '%1'<br><br>Possible cause of the error is having a variable with the same name as a widget").arg(m_data->keywordToString(k)));
+ else
+ setError(i18n("Expected '%1' got '%2'.").arg(m_data->keywordToString(k)).arg(next().toString()));
+ }
+ return false;
+}
+
+bool Parser::tryVariable(Mode mode)
+{
+ if (next().isVariable())
+ {
+ QString name = next().variableName();
+ m_start++;
+ return true;
+ }
+ if (mode == Execute)
+ setError(i18n("Expected variable"));
+ return false;
+}
+
+QString Parser::nextVariable(Mode mode)
+{
+ if (next().isVariable())
+ {
+ QString name = next().variableName();
+ m_start++;
+ return name;
+ }
+ else if (mode == Execute)
+ setError(i18n("Expected variable"));
+ return QString();
+}
+
+
+bool Parser::isFunction() const
+{
+ return next().isVariable() && m_data->isFunction(next().variableName());
+}
+
+bool Parser::isWidget() const
+{
+ return m_widget && next().isVariable() && m_widget->isWidget(next().variableName());
+}
+
+void Parser::reset()
+{
+ m_start = 0;
+ m_error = QString::null;
+ m_errorPosition = 0;
+}
+
+void Parser::setError(const QString& msg)
+{
+ setError(msg, m_start);
+}
+
+void Parser::setError(const QString& msg, int pos)
+{
+ if (m_error.isNull())
+ {
+ m_errorPosition = pos;
+ m_error = msg;
+ }
+}
+
+void Parser::setVariable(const QString& name, ParseNode value)
+{
+ if (isGlobal(name))
+ m_globalVariables[name] = value;
+ else
+ m_variables[name] = value;
+}
+
+ParseNode Parser::variable(const QString& name) const
+{
+ if (isGlobal(name))
+ return m_globalVariables.contains(name) ? m_globalVariables[name] : ParseNode();
+ else
+ return m_variables.contains(name) ? m_variables[name] : ParseNode();
+}
+
+bool Parser::isGlobal(const QString& name) const
+{
+ return !name.isEmpty() && name[0] == '_';
+}
+
+bool Parser::isVariable(const QString& name) const
+{
+ return m_variables.contains(name) || m_globalVariables.contains(name);
+}
+
+void Parser::unsetVariable(const QString& key)
+{
+ if (isGlobal(key))
+ m_globalVariables.remove(key);
+ else
+ m_variables.remove(key);
+}
+
+const QMap<QString, ParseNode>& Parser::array(const QString& name) const
+{
+ if (isGlobal(name))
+ return m_globalArrays[name];
+ else
+ return m_arrays[name];
+}
+
+bool Parser::isArray(const QString& name) const
+{
+ return m_arrays.contains(name) || m_globalArrays.contains(name);
+}
+
+void Parser::setArray(const QString& name, const QString& key, ParseNode value)
+{
+ if (isGlobal(name))
+ m_globalArrays[name][key] = value;
+ else
+ m_arrays[name][key] = value;
+}
+
+void Parser::unsetArray(const QString& name, const QString& key)
+{
+ if (isGlobal(name))
+ {
+ if (key.isNull())
+ m_globalArrays.remove(name);
+ else if (isArray(name))
+ m_globalArrays[name].remove(key);
+ }
+ else
+ {
+ if (key.isNull())
+ m_arrays.remove(name);
+ else if (isArray(name))
+ m_arrays[name].remove(key);
+ }
+}
+
+ParseNode Parser::arrayValue(const QString& name, const QString& key) const
+{
+ if (!isArray(name))
+ return ParseNode();
+ if (isGlobal(name))
+ return m_globalArrays[name].contains(key) ? m_globalArrays[name][key] : ParseNode();
+ else
+ return m_arrays[name].contains(key) ? m_arrays[name][key] : ParseNode();
+}
+
+// 2D arrays "Matrix"
+const QMap<QString, QMap<QString, ParseNode> >& Parser::matrix(const QString& name) const
+{
+ if (isGlobal(name))
+ return m_globalMatrices[name];
+ else
+ return m_matrices[name];
+}
+
+bool Parser::isMatrix(const QString& name) const
+{
+ return m_matrices.contains(name) || m_globalMatrices.contains(name);
+}
+
+void Parser::setMatrix(const QString& name, const QString& keyr, const QString& keyc, ParseNode value)
+{
+ if (isGlobal(name))
+ m_globalMatrices[name][keyr][keyc] = value;
+ else
+ m_matrices[name][keyr][keyc] = value;
+}
+
+void Parser::unsetMatrix(const QString& name, const QString& keyr, const QString& keyc)
+{
+ if (isGlobal(name))
+ {
+ if (keyr.isNull())
+ m_globalMatrices.remove(name);
+ else if (isMatrix(name))
+ {
+ if (keyc.isNull())
+ m_globalMatrices[name].remove(keyr);
+ else
+ m_globalMatrices[name][keyr].remove(keyc);
+ }
+ }
+ else
+ {
+ if (keyr.isNull())
+ m_matrices.remove(name);
+ else if (isMatrix(name))
+ {
+ if (keyc.isNull())
+ m_matrices[name].remove(keyr);
+ else
+ m_matrices[name][keyr].remove(keyc);
+ }
+ }
+}
+
+ParseNode Parser::matrixValue(const QString& name, const QString& keyr, const QString& keyc) const
+{
+ if (!isMatrix(name))
+ return ParseNode();
+ if (isGlobal(name))
+ return m_globalMatrices[name].contains(keyr) && m_globalMatrices[name][keyr].contains(keyc) ? m_globalMatrices[name][keyr][keyc] : ParseNode();
+ else
+ return m_matrices[name].contains(keyr) && m_matrices[name][keyr].contains(keyc) ? m_matrices[name][keyr][keyc] : ParseNode();
+}
+
+
+
+KommanderWidget* Parser::currentWidget() const
+{
+ return m_widget;
+}
+
+QMap<QString, ParseNode> Parser::m_globalVariables;
+QMap<QString, QMap<QString, ParseNode> > Parser::m_globalArrays;
+QMap<QString, QMap<QString, QMap<QString, ParseNode> > > Parser::m_globalMatrices;
+
diff --git a/kommander/widget/parser.h b/kommander/widget/parser.h
new file mode 100644
index 00000000..cc7c6010
--- /dev/null
+++ b/kommander/widget/parser.h
@@ -0,0 +1,197 @@
+/***************************************************************************
+ parser.h - Internal parser
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_PARSER_H_
+#define _HAVE_PARSER_H_
+
+#include "kommander_export.h"
+#include "parsenode.h"
+
+#include <qvaluevector.h>
+#include <qstringlist.h>
+#include <qmap.h>
+
+class KommanderWidget;
+class ParserData;
+
+class Parser
+{
+public:
+ Parser(ParserData* data);
+ Parser(ParserData* data, const QString& expr);
+ // set string to parse
+ bool setString(const QString& s);
+ // set Kommander widget associated with parser
+ void setWidget(KommanderWidget* w);
+
+ // parse generic expression
+ QString expression(Parse::Mode mode = Parse::Execute);
+ // execute single command; return true if ok
+ bool command(Parse::Mode mode = Parse::Execute);
+ // special class method to execute single parser function without creating parser object
+ static QString function(ParserData* data, const QString& name, const QStringList& params);
+ // execute whole block; return true if ok
+ bool parse(Parse::Mode mode = Parse::Execute);
+ // return line of errorneous node
+ int errorLine() const;
+ // return error message
+ QString errorMessage() const;
+
+ // check if this is a name of standard variable
+ bool isVariable(const QString& name) const;
+ // set variable value
+ void setVariable(const QString& name, ParseNode value);
+ // unset variable
+ void unsetVariable(const QString& key);
+ // get variable value
+ ParseNode variable(const QString& name) const;
+ // access associative array
+ const QMap<QString, ParseNode>& array(const QString& name) const;
+ // check if this is a name of an array
+ bool isArray(const QString& name) const;
+ // set array key
+ void setArray(const QString& name, const QString& key, ParseNode value);
+ // unset array key or whole array
+ void unsetArray(const QString& name, const QString& key = QString::null);
+ // array value
+ ParseNode arrayValue(const QString& name, const QString& key) const;
+ // access 2D array
+ const QMap<QString, QMap<QString, ParseNode> >& matrix(const QString& name) const;
+ // check if this is name of a 2D array
+ bool isMatrix(const QString& name) const;
+ // set array key
+ void setMatrix(const QString& name, const QString& keyr, const QString& keyc, ParseNode value);
+ // unset array key or whole array
+ void unsetMatrix(const QString& name, const QString& keyr = QString::null, const QString& keyc = QString::null);
+ // array value
+ ParseNode matrixValue(const QString& name, const QString& keyr, const QString& keyc) const;
+ // get associated widget
+ KommanderWidget* currentWidget() const;
+
+private:
+ // parsing function - top-down approach
+
+ // parse const
+ ParseNode parseConstant(Parse::Mode mode = Parse::Execute);
+ // parse value (literal or variable)
+ ParseNode parseValue(Parse::Mode mode = Parse::Execute);
+ // parse multiplication, division and mod (x*y, x/y, x%y)
+ ParseNode parseMultiply(Parse::Mode mode = Parse::Execute);
+ // parse sum (x+y, x-y)
+ ParseNode parseAdd(Parse::Mode mode = Parse::Execute);
+ // parse signed numeric (+x, -x)
+ ParseNode parseSignedNumber(Parse::Mode mode = Parse::Execute);
+
+ /*
+ // parse string expression
+ ParseNode parseStringValue(Parse::Mode mode = Parse::Execute);
+ // parse string concatenation (x+y)
+ ParseNode parseConcatenation(Parse::Mode mode = Parse::Execute);
+ */
+
+ // parse comparisons (x==y, x<y, x>y, x!=y, x<>y, x<=y, x>=y
+ ParseNode parseComparison(Parse::Mode mode = Parse::Execute);
+ // parse boolean not (!x, not x)
+ ParseNode parseNot(Parse::Mode mode = Parse::Execute);
+ // parse boolean and (x&&y, x and y)
+ ParseNode parseAnd(Parse::Mode mode = Parse::Execute);
+ // parse boolean or (x||y, x or y)
+ ParseNode parseOr(Parse::Mode mode = Parse::Execute);
+ // parse generic condition
+ ParseNode parseCondition(Parse::Mode mode = Parse::Execute);
+
+ // parse (x) expression
+ ParseNode parseParenthesis(Parse::Mode mode = Parse::Execute);
+ // parse generic expression
+ ParseNode parseExpression(Parse::Mode mode = Parse::Execute);
+ // parse parameters
+ ParseNode parseFunction(Parse::Mode mode = Parse::Execute);
+ // parse widget function
+ ParseNode parseWidget(Parse::Mode mode = Parse::Execute, const QString &widgetName = QString::null);
+
+ // parse assignment
+ ParseNode parseAssignment(Parse::Mode mode = Parse::Execute);
+ // parse conditional
+ Parse::Flow parseIf(Parse::Mode mode = Parse::Execute);
+ // parse assignment
+ Parse::Flow parseCommand(Parse::Mode mode = Parse::Execute);
+ // parse while loop
+ Parse::Flow parseWhile(Parse::Mode mode = Parse::Execute);
+ // parse for loop
+ Parse::Flow parseFor(Parse::Mode mode = Parse::Execute);
+ // parse foreach loop
+ Parse::Flow parseForeach(Parse::Mode mode = Parse::Execute);
+ // parse switch block
+ void parseSwitch(Parse::Mode mode = Parse::Execute);
+ // parse whole block
+ Parse::Flow parseBlock(Parse::Mode mode = Parse::Execute);
+
+ // insert next node
+ void insertNode(ParseNode p, int line);
+ // next item to be parsed
+ ParseNode next() const;
+ // next is Else or Else && If?
+ bool nextElseIf();
+ // check if next item is keyword k, if so - go further, if no, set error
+ bool tryKeyword(Parse::Keyword k, Parse::Mode mode = Parse::Execute);
+ // check if next item is a variable, if so, return its name
+ bool tryVariable(Parse::Mode mode = Parse::Execute);
+
+ // get the name of the next node treated as variable
+ QString nextVariable(Parse::Mode mode = Parse::Execute);
+ // check whether variable/array name is global (preceded with _)
+ bool isGlobal(const QString& name) const;
+ // check if next item is a function
+ bool isFunction() const;
+ // check if next item is a widget
+ bool isWidget() const;
+
+ // reset to default state
+ void reset();
+ // set error state if no error was set before; err is expected symbol that wasn't found
+ void setError(const QString& msg);
+ void setError(const QString& msg, int pos);
+ // check whether parsing was successful
+ bool isError() const;
+
+ // parsing data
+ ParserData* m_data;
+ // current parsing position
+ uint m_start;
+ // current error message
+ QString m_error;
+ // in case of error, this keeps position of first error
+ uint m_errorPosition;
+ // parsing nodes
+ QValueVector<ParseNode> m_parts;
+ // variables
+ QMap<QString, ParseNode> m_variables;
+ // arrays
+ QMap<QString, QMap<QString, ParseNode> > m_arrays;
+ // 2D arrays
+ QMap<QString, QMap<QString, QMap<QString, ParseNode> > > m_matrices;
+ // Kommander
+ KommanderWidget* m_widget;
+ // global variables
+ static QMap<QString, ParseNode> m_globalVariables;
+ // global arrays
+ static QMap<QString, QMap<QString, ParseNode> > m_globalArrays;
+ // global 2D arrays
+ static QMap<QString, QMap<QString, QMap<QString, ParseNode> > > m_globalMatrices;
+};
+
+#endif
+
diff --git a/kommander/widget/parserdata.cpp b/kommander/widget/parserdata.cpp
new file mode 100644
index 00000000..778be3d6
--- /dev/null
+++ b/kommander/widget/parserdata.cpp
@@ -0,0 +1,134 @@
+/***************************************************************************
+ parserdata.cpp - Parser data: keywords, functions etc.
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "parserdata.h"
+using namespace Parse;
+
+KeywordGroup ParserData::keywordGroup(Keyword k) const
+{
+ if (m_groups.contains(k))
+ return m_groups[k];
+ else
+ return GroupMisc;
+}
+
+Keyword ParserData::stringToKeyword(const QString& s) const
+{
+ QString k = s.lower();
+ if (m_keywords.contains(k))
+ return m_keywords[k];
+ else
+ return Variable;
+}
+
+QString ParserData::keywordToString(Parse::Keyword k) const
+{
+ for (QMapConstIterator<QString, Keyword> it = m_keywords.begin(); it != m_keywords.end(); ++it)
+ if (it.data() == k)
+ return it.key();
+ return QString();
+}
+
+bool ParserData::registerFunction(const QString& name, Function f)
+{
+ m_functions[name.lower()] = f;
+ return true;
+}
+
+ParserData::ParserData()
+{
+ m_keywords["for"] = For;
+ m_keywords["foreach"] = Foreach;
+ m_keywords["in"] = In;
+ m_keywords["end"] = End;
+ m_keywords["if"] = If;
+ m_keywords["then"] = Then;
+ m_keywords["else"] = Else;
+ m_keywords["elseif"] = Elseif;
+ m_keywords["endif"] = Endif;
+ m_keywords["{"] = LeftCurlyBrace;
+ m_keywords["}"] = RightCurlyBrace;
+ m_keywords["switch"] = Switch;
+ m_keywords["case"] = Case;
+ m_keywords["while"] = While;
+ m_keywords["to"] = To;
+ m_keywords["step"] = Step;
+ m_keywords["do"] = Do;
+ m_keywords["break"] = Break;
+ m_keywords["continue"] = Continue;
+ m_keywords["exit"] = Exit;
+ m_keywords["."] = Dot;
+ m_keywords[";"] = Semicolon;
+ m_keywords[","] = Comma;
+ m_keywords["="] = Assign;
+ m_keywords["<"] = Less;
+ m_keywords["<="] = LessEqual;
+ m_keywords[">"] = Greater;
+ m_keywords[">="] = GreaterEqual;
+ m_keywords["=="] = Equal;
+ m_keywords["!="] = NotEqual;
+ m_keywords["<>"] = NotEqual;
+ m_keywords["not"] = Not;
+ m_keywords["!"] = Not;
+ m_keywords["and"] = And;
+ m_keywords["&&"] = And;
+ m_keywords["or"] = Or;
+ m_keywords["||"] = Or;
+ m_keywords["false"] = False;
+ m_keywords["true"] = True;
+ m_keywords["("] = LeftParenthesis;
+ m_keywords[")"] = RightParenthesis;
+ m_keywords["["] = LeftBracket;
+ m_keywords["]["] = DoubleBracket;
+ m_keywords["]"] = RightBracket;
+ m_keywords["+"] = Plus;
+ m_keywords["-"] = Minus;
+ m_keywords["*"] = Multiply;
+ m_keywords["/"] = Divide;
+ m_keywords["%"] = Mod;
+ m_keywords["+="] = PlusEqual;
+ m_keywords["-="] = MinusEqual;
+ m_keywords["++"] = Increment;
+ m_keywords["--"] = Decrement;
+ m_keywords["mod"] = Mod;
+ m_keywords["with"] = ArrKeyVal;
+
+ m_groups[Less] = GroupComparison;
+ m_groups[LessEqual] = GroupComparison;
+ m_groups[Equal] = GroupComparison;
+ m_groups[NotEqual] = GroupComparison;
+ m_groups[Greater] = GroupComparison;
+ m_groups[GreaterEqual] = GroupComparison;
+
+ m_groups[Plus] = GroupAdd;
+ m_groups[Minus] = GroupAdd;
+ m_groups[Multiply] = GroupMultiply;
+ m_groups[Divide] = GroupMultiply;
+ m_groups[Mod] = GroupMultiply;
+
+ registerStandardFunctions();
+}
+
+bool ParserData::isFunction(const QString& name) const
+{
+ return m_functions.contains(name.lower());
+}
+
+const Function& ParserData::function(const QString& name) const
+{
+ return m_functions[name.lower()];
+}
+
diff --git a/kommander/widget/parserdata.h b/kommander/widget/parserdata.h
new file mode 100644
index 00000000..4c7f8d50
--- /dev/null
+++ b/kommander/widget/parserdata.h
@@ -0,0 +1,50 @@
+/***************************************************************************
+ parserdata.h - Parser data: keywords, functions etc.
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_PARSERDATA_H_
+#define _HAVE_PARSERDATA_H_
+
+#include "parsenode.h"
+#include "function.h"
+#include <qmap.h>
+
+class ParserData {
+public:
+ /* initialize keywords */
+ ParserData();
+ /* Return group of given keyword */
+ Parse::KeywordGroup keywordGroup(Parse::Keyword k) const;
+ /* Convert string to keyword */
+ Parse::Keyword stringToKeyword(const QString& s) const;
+ /* Convert keyword to string */
+ QString keywordToString(Parse::Keyword k) const;
+ /* register a function */
+ bool registerFunction(const QString& name, Function f);
+ /* check if this is a name of standard function */
+ bool isFunction(const QString& name) const;
+ /* Return function with given name. Warning: this function has undefined behavior when there is
+ no such function. */
+ const Function& function(const QString& name) const;
+private:
+ // register standard function
+ void registerStandardFunctions();
+ QMap<QString, Parse::Keyword> m_keywords;
+ QMap<Parse::Keyword, Parse::KeywordGroup> m_groups;
+ QMap<QString, Function> m_functions;
+};
+
+
+#endif
diff --git a/kommander/widgets/Makefile.am b/kommander/widgets/Makefile.am
new file mode 100644
index 00000000..51b23251
--- /dev/null
+++ b/kommander/widgets/Makefile.am
@@ -0,0 +1,35 @@
+lib_LTLIBRARIES = libkommanderwidgets.la
+
+# set the include path for X, qt and KDE
+INCLUDES = -I$(top_srcdir)/kommander/widget -I$(top_srcdir)/kommander/factory -I$(top_srcdir)/kommander/plugin $(all_includes)
+
+# the library search path.
+#widgets_LDFLAGS = $(KDE_RPATH) $(all_libraries)
+libkommanderwidgets_la_LDFLAGS = $(KDE_RPATH) $(all_libraries) -no-undefined
+
+# the libraries to link against.
+libkommanderwidgets_la_LIBADD = $(LIB_KIO) $(LIB_QT) \
+ $(top_builddir)/kommander/widget/libkommanderwidget.la \
+ $(top_builddir)/kommander/plugin/libkommanderplugin.la \
+ $(top_builddir)/kommander/factory/libkommanderfactory.la
+
+# which sources should be compiled for widgets
+libkommanderwidgets_la_SOURCES = aboutdialog.cpp buttongroup.cpp checkbox.cpp \
+ closebutton.cpp combobox.cpp datepicker.cpp dialog.cpp execbutton.cpp fileselector.cpp \
+ fontdialog.cpp groupbox.cpp konsole.cpp label.cpp lineedit.cpp listbox.cpp \
+ pixmaplabel.cpp plugin.cpp popupmenu.cpp progressbar.cpp radiobutton.cpp \
+ richtexteditor.cpp scriptobject.cpp slider.cpp spinboxint.cpp statusbar.cpp subdialog.cpp \
+ table.cpp tabwidget.cpp textbrowser.cpp textedit.cpp timer.cpp toolbox.cpp \
+ treewidget.cpp wizard.cpp
+
+# these are the headers for your project that won't be installed
+noinst_HEADERS = aboutdialog.h buttongroup.h checkbox.h closebutton.h \
+ combobox.h dialog.h execbutton.h fileselector.h fontdialog.h groupbox.h \
+ groupbox.h label.h lineedit.h listbox.h pixmaplabel.h popupmenu.h radiobutton.h \
+ radiobutton.h richtexteditor.h scriptobject.h spinboxint.h statusbar.h subdialog.h \
+ tabwidget.h textbrowser.h textedit.h toolbox.h treewidget.h wizard.h
+
+# let automoc handle all of the meta source files (moc)
+METASOURCES = AUTO
+
+KDE_OPTIONS=nofinal
diff --git a/kommander/widgets/aboutdialog.cpp b/kommander/widgets/aboutdialog.cpp
new file mode 100644
index 00000000..7f8c3428
--- /dev/null
+++ b/kommander/widgets/aboutdialog.cpp
@@ -0,0 +1,295 @@
+//
+// C++ Implementation: aboutdialog
+//
+// Description:
+//
+//
+// Author: Andras Mantia <amantia@kdewebdev.org>, (C) 2008
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include <qfile.h>
+#include "aboutdialog.h"
+
+#include "kommanderplugin.h"
+#include "specials.h"
+
+#include <kaboutdata.h>
+#include <kaboutapplication.h>
+#include <kiconloader.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+
+#include <qtextstream.h>
+
+enum Functions {
+ FirstFunction = 159,
+ Initialize,
+ AddAuthor,
+ AddTranslator,
+ SetDescription,
+ SetHomepage,
+ SetBugAddress,
+ SetLicense,
+ Version,
+ LastFunction
+};
+
+AboutDialog::AboutDialog(QWidget *parent, const char *name)
+ : QLabel(parent, name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+ if (KommanderWidget::inEditor)
+ {
+ setPixmap(KGlobal::iconLoader()->loadIcon("kommander", KIcon::NoGroup, KIcon::SizeMedium));
+ setFrameStyle(QFrame::Box | QFrame::Plain);
+ setLineWidth(1);
+ setFixedSize(pixmap()->size());
+ }
+ else
+ setHidden(true);
+
+ m_aboutData = 0L;
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+ KommanderPlugin::registerFunction(Initialize, "initialize(QString widget, QString appName, QString icon, QString version, QString copyright)",
+ i18n("Sets information about the application. This is the first method that must me called, any addition to the dialog done before initialization will be ignored."), 5);
+ KommanderPlugin::registerFunction(AddAuthor, "addAuthor(QString widget, QString author, QString task, QString email, QString webAddress)",
+ i18n("Add an author. Only the author name is required."), 2, 5);
+ KommanderPlugin::registerFunction(AddTranslator, "addTranslator(QString widget, QString author, QString email)",
+ i18n("Add a translator. Only the name is required."), 2, 3);
+ KommanderPlugin::registerFunction(SetDescription, "setDescription(QString widget, QString description)",
+ i18n("Set a short description text."), 2);
+ KommanderPlugin::registerFunction(SetHomepage, "setHomepage(QString widget, QString homepage)",
+ i18n("Set a homepage address."), 2);
+ KommanderPlugin::registerFunction(SetBugAddress, "setBugAddress(QString widget, QString address)",
+ i18n("Set an email address, where bugs can be reported."), 2);
+ KommanderPlugin::registerFunction(SetLicense, "setLicense(QString widget, QString license)",
+ i18n("Sets license information of the application. The parameter can be one of the license keys - GPL_V2, LGPL_V2, BSD, ARTISTIC -, or a freely specified text."), 2);
+ KommanderPlugin::registerFunction(Version, "version(QString widget)",
+ i18n("Returns the set version string."), 1);
+}
+
+
+AboutDialog::~AboutDialog()
+{
+ delete m_aboutData;
+ m_aboutData = 0L;
+}
+
+QString AboutDialog::currentState() const
+{
+ return QString("default");
+}
+
+bool AboutDialog::isKommanderWidget() const
+{
+ return true;
+}
+QStringList AboutDialog::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void AboutDialog::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+
+bool AboutDialog::isFunctionSupported(int f)
+{
+ return (f > FirstFunction && f < LastFunction) || f == DCOP::execute;
+}
+
+void AboutDialog::initialize(const QString& appName, const QString &icon, const QString& version, const QString& copyright)
+{
+ delete m_aboutData;
+ m_authors.clear();
+ m_emails.clear();
+ m_tasks.clear();
+ m_addresses.clear();
+ m_description = "";
+ m_homepage = "";
+ m_bugaddress = "";
+ m_version = version;
+ m_appName = appName;
+ m_icon = icon;
+ m_copyright = copyright;
+ m_aboutData = new KAboutData(m_appName, m_appName, m_version);
+ m_aboutData->setCopyrightStatement(m_copyright);
+ if (!m_icon.isEmpty())
+ m_aboutData->setProgramLogo(KGlobal::iconLoader()->loadIcon(m_icon, KIcon::NoGroup, KIcon::SizeMedium).convertToImage());
+}
+
+void AboutDialog::addAuthor(const QString& author, const QString &task, const QString& email, const QString &webAddress)
+{
+ if (!m_aboutData)
+ return;
+ m_authors.append(author);
+ m_emails.append(email);
+ m_tasks.append(task);
+ m_addresses.append(webAddress);
+ m_aboutData->addAuthor(author, task, email, webAddress);
+}
+
+void AboutDialog::addTranslator(const QString& author, const QString& email)
+{
+ if (!m_aboutData)
+ return;
+ m_authors.append(author);
+ m_emails.append(email);
+ m_aboutData->setTranslator(author, email);
+}
+
+void AboutDialog::setDescription(const QString& description)
+{
+ if (!m_aboutData)
+ return;
+ m_description = description;
+ m_aboutData->setShortDescription(m_description);
+}
+
+void AboutDialog::setHomepage(const QString &homepage)
+{
+ if (!m_aboutData)
+ return;
+ m_homepage = homepage;
+ m_aboutData->setHomepage(m_homepage);
+}
+
+void AboutDialog::setBugAddress(const QString &bugAddress)
+{
+ if (!m_aboutData)
+ return;
+ m_bugaddress = bugAddress;
+ m_aboutData->setBugAddress(m_bugaddress);
+}
+
+void AboutDialog::setLicense(const QString &key)
+{
+ if (!m_aboutData)
+ return;
+ QString license = key.upper();
+ QString file;
+ if (key == "GPL_V2")
+ {
+ file = locate("data", "LICENSES/GPL_V2");
+ } else
+ if (key == "LGPL_V2")
+ {
+ file = locate("data", "LICENSES/LGPL_V2");
+ } else
+ if (key == "BSD")
+ {
+ file = locate("data", "LICENSES/BSD");
+ } else
+ if (key == "ARTISTIC")
+ {
+ file = locate("data", "LICENSES/ARTISTIC");
+ }
+ if (file.isEmpty() && !QFile::exists( key ))
+ {
+ if (!key.isEmpty())
+ m_license = key;
+ m_aboutData->setLicenseText(m_license);
+ }
+ else
+ {
+ if (file.isEmpty())
+ {
+ if (!key.isEmpty())
+ file = key;
+ }
+ m_aboutData->setLicenseTextFile(file);
+ }
+
+}
+
+void AboutDialog::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString AboutDialog::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void AboutDialog::populate()
+{
+ setAssociatedText(KommanderWidget::evalAssociatedText( populationText()));
+}
+
+void AboutDialog::execute()
+{
+ if (m_aboutData)
+ {
+ KAboutApplication dialog(m_aboutData, this);
+ dialog.exec();
+ }
+}
+
+QString AboutDialog::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case Initialize:
+ {
+ initialize(args[0], args[1], args[2], args[3]);
+ break;
+ }
+ case SetLicense:
+ {
+ setLicense(args[0]);
+ break;
+ }
+ case AddAuthor:
+ {
+ addAuthor(args[0], args[1], args[2], args[3]);
+ break;
+ }
+ case AddTranslator:
+ {
+ addTranslator(args[0], args[1]);
+ break;
+ }
+ case SetDescription:
+ {
+ setDescription(args[0]);
+ break;
+ }
+ case SetHomepage:
+ {
+ setHomepage(args[0]);
+ break;
+ }
+ case SetBugAddress:
+ {
+ setBugAddress(args[0]);
+ break;
+ }
+ case Version:
+ {
+ if (m_aboutData)
+ return m_aboutData->version();
+ break;
+ }
+ case DCOP::execute:
+ {
+ if (m_aboutData)
+ {
+ KAboutApplication dialog(m_aboutData, this);
+ dialog.exec();
+ }
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+#include "aboutdialog.moc"
diff --git a/kommander/widgets/aboutdialog.h b/kommander/widgets/aboutdialog.h
new file mode 100644
index 00000000..0d0249a7
--- /dev/null
+++ b/kommander/widgets/aboutdialog.h
@@ -0,0 +1,72 @@
+//
+// C++ Interface: aboutdialog
+//
+// Description:
+//
+//
+// Author: Andras Mantia <amantia@kdewebdev.org>, (C) 2008
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#ifndef ABOUTDIALOG_H
+#define ABOUTDIALOG_H
+
+#include <qlabel.h>
+#include <kommanderwidget.h>
+
+class KAboutApplication;
+class KAboutData;
+
+/**
+ @author Andras Mantia <amantia@kdewebdev.org>
+*/
+class AboutDialog : public QLabel, public KommanderWidget
+{
+ Q_OBJECT
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+public:
+ AboutDialog(QWidget *parent = 0, const char *name = 0);
+
+ ~AboutDialog();
+
+ virtual bool isKommanderWidget() const;
+ virtual QString currentState() const;
+ virtual bool isFunctionSupported(int function);
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+ virtual QStringList associatedText() const;
+ virtual void setAssociatedText(const QStringList&);
+
+public slots:
+ virtual void populate();
+ virtual void execute();
+
+private:
+ void initialize(const QString& appName, const QString &icon, const QString& version, const QString& copyright);
+ void addAuthor(const QString& author, const QString &task, const QString& email, const QString &webAddress);
+ void addTranslator(const QString& author, const QString& email);
+ void setDescription(const QString& description);
+ void setHomepage(const QString &homepage);
+ void setBugAddress(const QString &bugAddress);
+ void setLicense(const QString &license);
+
+ KAboutData *m_aboutData;
+ QString m_version;
+ QString m_appName;
+ QString m_copyright;
+ QString m_icon;
+ QString m_bugaddress;
+ QStringList m_authors;
+ QStringList m_emails;
+ QStringList m_tasks;
+ QStringList m_addresses;
+ QString m_description;
+ QString m_homepage;
+ QString m_license;
+};
+
+#endif
diff --git a/kommander/widgets/buttongroup.cpp b/kommander/widgets/buttongroup.cpp
new file mode 100644
index 00000000..0a6eafc2
--- /dev/null
+++ b/kommander/widgets/buttongroup.cpp
@@ -0,0 +1,159 @@
+/***************************************************************************
+ buttongroup.cpp - Button group widget
+ -------------------
+ copyright : (C) 2002-2004 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+/* KDE INCLUDES */
+#include <klocale.h>
+
+/* QT INCLUDES */
+#include <qobject.h>
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qbuttongroup.h>
+#include <qevent.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include "kommanderplugin.h"
+#include <specials.h>
+#include "buttongroup.h"
+
+#include "radiobutton.h" // include a button header for the compiler with dynamic cast below
+
+enum Functions {
+ FirstFunction = 720,
+ BG_selectedId,
+ LastFunction
+};
+
+ButtonGroup::ButtonGroup(QWidget *a_parent, const char *a_name)
+ : QButtonGroup(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "checked";
+ states << "unchecked";
+ setStates(states);
+ setDisplayStates(states);
+
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+ KommanderPlugin::registerFunction(BG_selectedId, "selectedId(QString widget)", i18n("Returns the ID of the selected button."), 1);
+
+}
+
+ButtonGroup::~ButtonGroup()
+{
+}
+
+QString ButtonGroup::currentState() const
+{
+ if (!isCheckable() || isChecked())
+ return "checked";
+ else
+ return "unchecked";
+}
+
+bool ButtonGroup::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList ButtonGroup::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void ButtonGroup::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void ButtonGroup::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText( a_text );
+}
+
+QString ButtonGroup::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void ButtonGroup::populate()
+{
+//FIXME: implement
+}
+
+void ButtonGroup::showEvent(QShowEvent* e)
+{
+ QButtonGroup::showEvent(e);
+ emit widgetOpened();
+}
+
+void ButtonGroup::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+bool ButtonGroup::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::checked || f == DCOP::setChecked || f == DCOP::geometry || f == DCOP::getBackgroundColor || f == DCOP::setBackgroundColor || (f >= FirstFunction && f <= LastFunction);
+}
+
+
+QString ButtonGroup::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ {
+ QString text;
+ for (int i = 0; i < count(); i++)
+ if (dynamic_cast<KommanderWidget*>(find(i)))
+ text += (dynamic_cast<KommanderWidget*>(find(i)))->evalAssociatedText();
+ return text;
+ }
+ case DCOP::checked:
+ return QString::number(isChecked());
+ case DCOP::setChecked:
+ setCheckable(true);
+ setChecked(args[0] != "false");
+ break;
+ case BG_selectedId:
+ return QString::number(this->selectedId() );
+ break;
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ case DCOP::getBackgroundColor:
+ return this->paletteBackgroundColor().name();
+ break;
+ case DCOP::setBackgroundColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ this->setPaletteBackgroundColor(color);
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+
+#include "buttongroup.moc"
diff --git a/kommander/widgets/buttongroup.h b/kommander/widgets/buttongroup.h
new file mode 100644
index 00000000..0e123864
--- /dev/null
+++ b/kommander/widgets/buttongroup.h
@@ -0,0 +1,67 @@
+/***************************************************************************
+ buttongroup.h - Buttongroup widget
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef _HAVE_BUTTONGROUP_H_
+#define _HAVE_BUTTONGROUP_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qbuttongroup.h>
+#include <qobject.h>
+#include <qstringlist.h>
+#include <qstring.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+
+class QWidget;
+
+class QShowEvent;
+class KOMMANDER_EXPORT ButtonGroup : public QButtonGroup, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget DESIGNABLE false)
+public:
+ ButtonGroup(QWidget *a_parent, const char *a_name);
+ ~ButtonGroup();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void populate();
+
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString&);
+ void contextMenuRequested(int xpos, int ypos);
+protected:
+ void showEvent(QShowEvent* e);
+ void contextMenuEvent( QContextMenuEvent * e );
+private:
+};
+
+#endif
diff --git a/kommander/widgets/checkbox.cpp b/kommander/widgets/checkbox.cpp
new file mode 100644
index 00000000..e78dbdb8
--- /dev/null
+++ b/kommander/widgets/checkbox.cpp
@@ -0,0 +1,151 @@
+/***************************************************************************
+ checkbox.cpp - Checkbox widget
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qobject.h>
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qevent.h>
+#include <qcheckbox.h>
+#include <qbutton.h>
+
+/* OTHER INCLUDES */
+#include <specials.h>
+#include "checkbox.h"
+
+CheckBox::CheckBox(QWidget *a_parent, const char *a_name)
+ : QCheckBox(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "unchecked";
+ states << "semichecked";
+ states << "checked";
+ setStates(states);
+ QStringList displayStates;
+ displayStates << "checked";
+ displayStates << "semichecked";
+ displayStates << "unchecked";
+ setDisplayStates(displayStates);
+}
+
+CheckBox::~CheckBox()
+{
+}
+
+QString CheckBox::currentState() const
+{
+ if (state() == QButton::Off)
+ return "unchecked";
+ else if (state() == QButton::NoChange)
+ return "semichecked";
+ else if (state() == QButton::On)
+ return "checked";
+ return QString();
+}
+
+bool CheckBox::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList CheckBox::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void CheckBox::setAssociatedText(const QStringList & a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void CheckBox::setPopulationText(const QString & a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString CheckBox::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void CheckBox::populate()
+{
+ setWidgetText(KommanderWidget::evalAssociatedText(populationText()));
+}
+
+void CheckBox::setWidgetText(const QString& a_text)
+{
+ setText(a_text);
+ emit widgetTextChanged(a_text);
+}
+
+void CheckBox::showEvent(QShowEvent* e)
+{
+ QCheckBox::showEvent(e);
+ emit widgetOpened();
+}
+
+bool CheckBox::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::checked || f == DCOP::setChecked || f == DCOP::geometry || f == DCOP::getBackgroundColor || f == DCOP::setBackgroundColor;
+}
+
+void CheckBox::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+QString CheckBox::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ return text();
+ case DCOP::setText:
+ setWidgetText(args[0]);
+ break;
+ case DCOP::checked:
+ return QString::number(isChecked());
+ case DCOP::setChecked:
+ setChecked(args[0] != "false" && args[0] != "0");
+ break;
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ case DCOP::getBackgroundColor:
+ return this->paletteBackgroundColor().name();
+ break;
+ case DCOP::setBackgroundColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ this->setPaletteBackgroundColor(color);
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+
+#include "checkbox.moc"
diff --git a/kommander/widgets/checkbox.h b/kommander/widgets/checkbox.h
new file mode 100644
index 00000000..c9743434
--- /dev/null
+++ b/kommander/widgets/checkbox.h
@@ -0,0 +1,67 @@
+/***************************************************************************
+ checkbox.h - Checkbox widget
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef _HAVE_CHECKBOX_H_
+#define _HAVE_CHECKBOX_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qobject.h>
+#include <qstringlist.h>
+#include <qstring.h>
+#include <qcheckbox.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+
+class QWidget;
+
+class QShowEvent;
+class KOMMANDER_EXPORT CheckBox : public QCheckBox, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ CheckBox(QWidget *a_parent, const char *a_name);
+ ~CheckBox();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void setWidgetText(const QString&);
+ virtual void populate();
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString&);
+ void contextMenuRequested(int xpos, int ypos);
+protected:
+ void showEvent(QShowEvent *e);
+ void contextMenuEvent( QContextMenuEvent * e );
+private:
+};
+
+#endif
diff --git a/kommander/widgets/closebutton.cpp b/kommander/widgets/closebutton.cpp
new file mode 100644
index 00000000..9da9f1a0
--- /dev/null
+++ b/kommander/widgets/closebutton.cpp
@@ -0,0 +1,183 @@
+/***************************************************************************
+ closebutton.cpp - Button that when clicked, closes the dialog it's in
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* KDE INCLUDES */
+#include <kmessagebox.h>
+#include <klocale.h>
+
+/* QT INCLUDES */
+#include <qdialog.h>
+#include <qevent.h>
+#include <qobject.h>
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qwidget.h>
+
+/* OTHER INCLUDES */
+#include <specials.h>
+#include "closebutton.h"
+
+CloseButton::CloseButton(QWidget* a_parent, const char* a_name)
+ : KPushButton(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+ setWriteStdout(true);
+
+ connect(this, SIGNAL(clicked()), this, SLOT(startProcess()));
+
+ QObject *parent = this;
+ while (parent->parent() != 0)
+ {
+ parent = parent->parent();
+ if (parent->inherits("QDialog"))
+ break;
+ }
+ connect(this, SIGNAL(clicked()), parent, SLOT(reject()));
+}
+
+CloseButton::~CloseButton()
+{
+}
+
+QString CloseButton::currentState() const
+{
+ return QString("default");
+}
+
+bool CloseButton::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList CloseButton::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void CloseButton::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void CloseButton::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString CloseButton::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void CloseButton::populate()
+{
+ setWidgetText(KommanderWidget::evalAssociatedText(populationText()));
+}
+
+void CloseButton::setWidgetText(const QString& a_text)
+{
+ setText(a_text);
+ emit widgetTextChanged(a_text);
+}
+
+void CloseButton::startProcess()
+{
+ QString at = evalAssociatedText();
+
+ if (!at.isEmpty())
+ {
+ KShellProcess *process = new KShellProcess("/bin/sh");
+ *process << at;
+
+ connect(process, SIGNAL(processExited(KProcess *)), SLOT(endProcess(KProcess *)));
+ connect(process, SIGNAL(receivedStdout(KProcess *, char *, int)), SLOT(appendOutput(KProcess *,
+ char *, int)));
+ connect(process, SIGNAL(receivedStderr(KProcess *, char *, int)), SLOT(appendOutput(KProcess *,
+ char *, int)));
+
+ if (!process->start(KProcess::Block, KProcess::Stdout))
+ {
+ KMessageBox::error(this, i18n("Failed to start shell process."));
+ endProcess(process);
+ return;
+ }
+ } else
+ endProcess(0);
+}
+
+void CloseButton::appendOutput(KProcess *, char *a_buffer, int a_len)
+{
+ char *buffer = new char[a_len + 1];
+ buffer[a_len] = 0;
+ for (int i = 0; i < a_len; ++i)
+ buffer[i] = a_buffer[i];
+
+ QString bufferString(buffer);
+ m_output += bufferString;
+ if (writeStdout())
+ {
+ fputs(buffer, stdout);
+ fflush(stdout);
+ }
+ delete[] buffer;
+}
+
+void CloseButton::endProcess(KProcess *a_process)
+{
+ emit widgetTextChanged(m_output);
+ m_output = "";
+ delete a_process;
+}
+
+bool CloseButton::writeStdout() const
+{
+ return m_writeStdout;
+}
+
+void CloseButton::setWriteStdout(bool a_enable)
+{
+ m_writeStdout = a_enable;
+}
+
+void CloseButton::showEvent(QShowEvent *e)
+{
+ QPushButton::showEvent(e);
+ emit widgetOpened();
+}
+
+bool CloseButton::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText;
+}
+
+QString CloseButton::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ return m_output;
+ case DCOP::setText:
+ setWidgetText(args[0]);
+ break;
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+#include "closebutton.moc"
diff --git a/kommander/widgets/closebutton.h b/kommander/widgets/closebutton.h
new file mode 100644
index 00000000..8b7aa57a
--- /dev/null
+++ b/kommander/widgets/closebutton.h
@@ -0,0 +1,72 @@
+/***************************************************************************
+ closebutton.h - Button that when clicked, closes the dialog it's in
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+#ifndef _HAVE_CLOSEBUTTON_H_
+#define _HAVE_CLOSEBUTTON_H_
+
+/* KDE INCLUDES */
+#include <kpushbutton.h>
+
+/* QT INCLUDES */
+#include <qobject.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+class QWidget;
+
+class QShowEvent;
+class KOMMANDER_EXPORT CloseButton : public KPushButton, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+ Q_PROPERTY(bool writeStdout READ writeStdout WRITE setWriteStdout)
+public:
+ CloseButton(QWidget* a_parent, const char* a_name);
+ ~CloseButton();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+ bool writeStdout() const;
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void setWriteStdout(bool);
+ virtual void setWidgetText(const QString &);
+ virtual void startProcess();
+ virtual void appendOutput(KProcess*, char*, int);
+ virtual void endProcess(KProcess*);
+ virtual void populate();
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString&);
+protected:
+ bool m_writeStdout;
+ QString m_output;
+ void showEvent(QShowEvent* e);
+private:
+};
+
+#endif
diff --git a/kommander/widgets/combobox.cpp b/kommander/widgets/combobox.cpp
new file mode 100644
index 00000000..250d3820
--- /dev/null
+++ b/kommander/widgets/combobox.cpp
@@ -0,0 +1,210 @@
+/***************************************************************************
+ combobox.cpp - Combobox widget
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* KDE INCLUDES */
+#include <kiconloader.h>
+#include <klocale.h>
+
+/* QT INCLUDES */
+#include <qobject.h>
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+
+/* OTHER INCLUDES */
+#include <kommanderplugin.h>
+#include <specials.h>
+#include "combobox.h"
+
+enum Functions {
+ FirstFunction = 353, //CHANGE THIS NUMBER TO AN UNIQUE ONE!!!
+ popupList,
+ LastFunction
+};
+
+
+ComboBox::ComboBox(QWidget *a_parent, const char *a_name)
+ : KComboBox(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+
+ connect(this, SIGNAL(activated(int)), this, SLOT(emitWidgetTextChanged(int)));
+
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+ KommanderPlugin::registerFunction(popupList, "popupList(QString widget)", i18n("Make the ComboBox expose it's list without mousing around."), 1);
+
+}
+
+ComboBox::~ComboBox()
+{
+}
+
+QString ComboBox::currentState() const
+{
+ return QString("default");
+}
+
+bool ComboBox::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList ComboBox::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void ComboBox::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void ComboBox::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString ComboBox::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void ComboBox::populate()
+{
+ setWidgetText(KommanderWidget::evalAssociatedText( populationText()));
+}
+
+void ComboBox::setWidgetText(const QString& a_text)
+{
+ clear();
+ insertStringList(QStringList::split("\n", a_text));
+ emit widgetTextChanged(a_text);
+}
+
+void ComboBox::emitWidgetTextChanged(int a_index)
+{
+ emit widgetTextChanged(text(a_index));
+}
+
+void ComboBox::showEvent(QShowEvent *e)
+{
+ QComboBox::showEvent( e );
+ emit widgetOpened();
+}
+
+void ComboBox::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+
+bool ComboBox::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::selection || f == DCOP::setSelection ||
+ f == DCOP::currentItem || f == DCOP::setCurrentItem || f == DCOP::item ||
+ f == DCOP::removeItem || f == DCOP::insertItem || f == DCOP::insertItems ||
+ f == DCOP::addUniqueItem || f == DCOP::clear || f == DCOP::count || f == DCOP::setEditable || f == DCOP::geometry || f == DCOP::hasFocus || f == DCOP::getBackgroundColor || f == DCOP::setBackgroundColor || (f >= FirstFunction && f <= LastFunction);
+}
+
+QString ComboBox::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ return currentText();
+ case DCOP::setText:
+ setWidgetText(args[0]);
+ break;
+ case DCOP::selection:
+ return currentText();
+ case DCOP::currentItem:
+ return QString::number(currentItem());
+ case DCOP::setCurrentItem:
+ setCurrentItem(args[0].toUInt());
+ break;
+ case DCOP::item:
+ {
+ int i = args[0].toInt();
+ if (i >= 0 && i < count())
+ return text(i);
+ break;
+ }
+ case DCOP::removeItem:
+ removeItem(args[0].toInt());
+ break;
+ case DCOP::insertItem:
+ insertItem(args[0], args[1].toInt());
+ break;
+ case DCOP::insertItems:
+ insertStringList(QStringList::split("\n", args[0]), args[1].toInt());
+ break;
+ case DCOP::addUniqueItem:
+ for (int i=0; i<count(); i++)
+ if (text(i) == args[0])
+ return QString();
+ insertItem(args[0]);
+ break;
+ case DCOP::clear:
+ clear();
+ break;
+ case DCOP::count:
+ return QString::number(count());
+ case DCOP::setSelection:
+ {
+ for (int i = 0; i < count(); i++)
+ if (text(i) == args[0])
+ {
+ setCurrentItem(i);
+ break;
+ }
+ break;
+ }
+ case DCOP::setEditable:
+ setEditable(args[0] != "false" && args[0] != "0");
+ break;
+ case DCOP::getBackgroundColor:
+ return this->paletteBackgroundColor().name();
+ break;
+ case DCOP::setBackgroundColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ this->setPaletteBackgroundColor(color);
+ break;
+ }
+ case popupList:
+ QComboBox::popup();
+ break;
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ case DCOP::hasFocus:
+ return QString::number(this->hasFocus());
+ break;
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+#include "combobox.moc"
diff --git a/kommander/widgets/combobox.h b/kommander/widgets/combobox.h
new file mode 100644
index 00000000..916846d9
--- /dev/null
+++ b/kommander/widgets/combobox.h
@@ -0,0 +1,70 @@
+/***************************************************************************
+ combobox.h - Combobox widget
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_COMBOBOX_H_
+#define _HAVE_COMBOBOX_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qstringlist.h>
+#include <qobject.h>
+#include <qstring.h>
+
+/* OTHER INCLUDES */
+#include <kcombobox.h>
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+class QWidget;
+
+class QShowEvent;
+class KOMMANDER_EXPORT ComboBox : public KComboBox, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+
+public:
+ ComboBox(QWidget *a_parent, const char *a_name);
+ ~ComboBox();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void setWidgetText(const QString&);
+ virtual void populate();
+
+ virtual void emitWidgetTextChanged(int);
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString&);
+ void contextMenuRequested(int xpos, int ypos);
+protected:
+ void showEvent(QShowEvent *e);
+ void contextMenuEvent( QContextMenuEvent * e );
+private:
+};
+
+#endif
diff --git a/kommander/widgets/datepicker.cpp b/kommander/widgets/datepicker.cpp
new file mode 100644
index 00000000..c1b1f834
--- /dev/null
+++ b/kommander/widgets/datepicker.cpp
@@ -0,0 +1,130 @@
+/***************************************************************************
+ combobox.cpp - Combobox widget
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qdatetime.h>
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+
+/* OTHER INCLUDES */
+#include <specials.h>
+#include "datepicker.h"
+
+DatePicker::DatePicker(QWidget *a_parent, const char *a_name)
+ : KDatePicker(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+}
+
+DatePicker::~DatePicker()
+{
+}
+
+QString DatePicker::currentState() const
+{
+ return QString("default");
+}
+
+bool DatePicker::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList DatePicker::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void DatePicker::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void DatePicker::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString DatePicker::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void DatePicker::populate()
+{
+ setWidgetText(KommanderWidget::evalAssociatedText( populationText()));
+}
+
+void DatePicker::setWidgetText(const QString& a_text)
+{
+ setDate(QDate::fromString(a_text, Qt::ISODate));
+ emit widgetTextChanged(a_text);
+}
+
+QString DatePicker::widgetText() const
+{
+ return date().toString(Qt::ISODate);
+}
+
+
+void DatePicker::showEvent(QShowEvent *e)
+{
+ KDatePicker::showEvent( e );
+ emit widgetOpened();
+}
+void DatePicker::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+
+bool DatePicker::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::geometry || f == DCOP::hasFocus ;
+}
+
+QString DatePicker::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ return date().toString(Qt::ISODate);
+ case DCOP::setText:
+ setDate(QDate::fromString(args[0], Qt::ISODate));
+ break;
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ case DCOP::hasFocus:
+ return QString::number(this->hasFocus());
+ break;
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+#include "datepicker.moc"
diff --git a/kommander/widgets/datepicker.h b/kommander/widgets/datepicker.h
new file mode 100644
index 00000000..0383937a
--- /dev/null
+++ b/kommander/widgets/datepicker.h
@@ -0,0 +1,70 @@
+/***************************************************************************
+ combobox.h - Combobox widget
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_DATEPICKER_H_
+#define _HAVE_DATEPICKER_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qstringlist.h>
+#include <qobject.h>
+#include <qstring.h>
+
+/* OTHER INCLUDES */
+#include <kdatepicker.h>
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+class QWidget;
+
+class QShowEvent;
+class KOMMANDER_EXPORT DatePicker : public KDatePicker, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+
+public:
+ DatePicker(QWidget *a_parent, const char *a_name);
+ ~DatePicker();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+ virtual QString widgetText() const;
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void setWidgetText(const QString&);
+ virtual void populate();
+
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString&);
+ void contextMenuRequested(int xpos, int ypos);
+protected:
+ void showEvent(QShowEvent *e);
+ void contextMenuEvent( QContextMenuEvent * e );
+private:
+};
+
+#endif
diff --git a/kommander/widgets/dialog.cpp b/kommander/widgets/dialog.cpp
new file mode 100644
index 00000000..ef9b727b
--- /dev/null
+++ b/kommander/widgets/dialog.cpp
@@ -0,0 +1,226 @@
+/***************************************************************************
+ dialog.cpp - Main dialog widget
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+/* KDE INCLUDES */
+#include <klocale.h>
+
+/* QT INCLUDES */
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qevent.h>
+#include <qdialog.h>
+#include <qpoint.h>
+#include <qcursor.h>
+#include <qapplication.h>
+
+/* OTHER INCLUDES */
+#include <specials.h>
+#include "dialog.h"
+#include <myprocess.h>
+#include "kommanderplugin.h"
+
+enum Functions {
+ FirstFunction = 185,
+ D_focusWidget,
+ D_waitCursor,
+ D_restoreCursor,
+ LastFunction
+};
+
+Dialog::Dialog(QWidget *a_parent, const char *a_name, bool a_modal, int a_flags)
+ : QDialog(a_parent, a_name, a_modal, a_flags), KommanderWindow(this)
+{
+ QStringList states;
+ states << "default";
+ states << "initialization";
+ states << "destroy";
+ setStates(states);
+ setDisplayStates(states);
+ m_useShebang = false;
+ m_shebang = "#!/usr/bin/kmdr-executor";
+ m_firstShow = true;
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+ KommanderPlugin::registerFunction(D_focusWidget, "focusWidget(QString widget)", i18n("The name of the widget having focus"), 1);
+ KommanderPlugin::registerFunction(D_waitCursor, "waitCursor(QString widget)", i18n("Set a wait cursor. CAUTION: if set more than once an equal number of calls to restore must be made to clear it."), 1);
+ KommanderPlugin::registerFunction(D_restoreCursor, "restoreCursor(QString widget)", i18n("Restore normal curser. NOTE: must be called as many times as wait was."), 1);
+}
+
+Dialog::~Dialog()
+{
+ if (!inEditor)
+ destroy();
+}
+
+QString Dialog::currentState() const
+{
+ return QString("default");
+}
+
+bool Dialog::isKommanderWidget() const
+{
+ return true;
+}
+
+bool Dialog::useInternalParser() const
+{
+ return m_useInternalParser;
+}
+
+void Dialog::setUseInternalParser(bool b)
+{
+ KommanderWidget::useInternalParser = b;
+ m_useInternalParser = b;
+}
+
+
+QStringList Dialog::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void Dialog::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void Dialog::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText( a_text );
+}
+
+QString Dialog::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void Dialog::populate()
+{
+ setWidgetText(KommanderWidget::evalAssociatedText(populationText()));
+}
+
+void Dialog::initialize()
+{
+ const QStringList assoc = associatedText();
+ if (assoc.count() > 1 && !assoc[1].isEmpty())
+ {
+ MyProcess proc(this);
+ proc.run( KommanderWidget::evalAssociatedText(assoc[1]) );
+ }
+}
+
+void Dialog::destroy()
+{
+ const QStringList assoc = associatedText();
+ if (assoc.count() > 2 && !assoc[2].isEmpty())
+ {
+ MyProcess proc(this);
+ proc.run( KommanderWidget::evalAssociatedText(assoc[2]) );
+ }
+}
+
+
+void Dialog::setWidgetText(const QString& a_text)
+{
+ setCaption(a_text);
+ emit widgetTextChanged(a_text);
+}
+
+void Dialog::exec()
+{
+ QDialog::exec();
+ emit finished();
+}
+
+void Dialog::show()
+{
+//if the dialog is embedded in a KPart, the show can be called many times.
+//to avoid re-init and sending signals we don't want, in that case call only the
+//QWidget's show method to show the widgets, but don't do any QDialog specific
+//task
+ if (!m_firstShow)
+ {
+ QWidget::show();
+ } else
+ {
+ QDialog::show();
+ if (!inEditor)
+ initialize();
+ m_firstShow = false;
+ }
+}
+
+void Dialog::done(int r)
+{
+/* if (!inEditor)
+ destroy();*/
+ QDialog::done(r);
+}
+
+void Dialog::showEvent(QShowEvent *e)
+{
+ QDialog::showEvent( e );
+ emit widgetOpened();
+}
+
+void Dialog::keyPressEvent( QKeyEvent *e )
+{
+ if ( e->state() == 0 && e->key() == Key_Escape)
+ return;
+ else
+ QDialog::keyPressEvent(e);
+
+}
+
+void Dialog::contextMenuEvent( QContextMenuEvent * e )
+{
+ QDialog::contextMenuEvent( e );
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+bool Dialog::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::geometry || (f > FirstFunction && f < LastFunction);
+}
+
+QString Dialog::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ return caption();
+ case DCOP::setText:
+ setWidgetText(args[0]);
+ break;
+ case DCOP::geometry:
+ return QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ break;
+ case D_focusWidget:
+ return focusWidget()->name();
+ break;
+ case D_waitCursor:
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+ break;
+ case D_restoreCursor:
+ QApplication::restoreOverrideCursor();
+ break;
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+
+#include "dialog.moc"
diff --git a/kommander/widgets/dialog.h b/kommander/widgets/dialog.h
new file mode 100644
index 00000000..091ff890
--- /dev/null
+++ b/kommander/widgets/dialog.h
@@ -0,0 +1,87 @@
+/***************************************************************************
+ dialog.h - Kommander dialog
+ -------------------
+ copyright : (C) 2002 by Marc Britton <consume@optushome.com.au>
+ (C) 2004 by Andras Mantia <amantia@kde.org>
+ (C) 2004 by Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef _HAVE_DIALOG_H_
+#define _HAVE_DIALOG_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qdialog.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwindow.h>
+#include <kommander_export.h>
+class QShowEvent;
+class KOMMANDER_EXPORT Dialog : public QDialog, public KommanderWindow
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+ Q_PROPERTY(bool useInternalParser READ useInternalParser WRITE setUseInternalParser)
+ Q_PROPERTY(bool useShebang READ useShebang WRITE setUseShebang DESIGNABLE true)
+ Q_PROPERTY(QString shebang READ Shebang WRITE setShebang DESIGNABLE true)
+ Q_OVERRIDE(bool modal DESIGNABLE false)
+
+public:
+ Dialog(QWidget *, const char *, bool = true, int=0);
+ ~Dialog();
+ virtual bool isKommanderWidget() const;
+ virtual bool useInternalParser() const;
+ virtual void setUseInternalParser(bool b);
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+ virtual void show();
+
+ bool useShebang() const { return m_useShebang; }
+ void setUseShebang(bool useit) { m_useShebang = useit; }
+ QString Shebang() const { return m_shebang; }
+ void setShebang(const QString &text) { m_shebang = text; }
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void setWidgetText(const QString&);
+ virtual void exec();
+ virtual void populate();
+ virtual void done(int r);
+protected slots:
+ virtual void initialize();
+ virtual void destroy();
+
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString&);
+ void finished();
+ void contextMenuRequested(int xpos, int ypos);
+protected:
+ void showEvent( QShowEvent *e );
+ void keyPressEvent( QKeyEvent * );
+ void contextMenuEvent( QContextMenuEvent * e );
+private:
+ QString m_fileName;
+ bool m_useInternalParser;
+ bool m_useShebang; //add m_shebang at the beginning of the dialog code or not
+ bool m_firstShow; //tells if the show method was called before or not
+ QString m_shebang; //#!/usr/bin/kmdr-executor or similar
+};
+
+#endif
diff --git a/kommander/widgets/execbutton.cpp b/kommander/widgets/execbutton.cpp
new file mode 100644
index 00000000..69d06f8b
--- /dev/null
+++ b/kommander/widgets/execbutton.cpp
@@ -0,0 +1,241 @@
+/***************************************************************************
+ execbutton.cpp - Button that runs its text association
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* KDE INCLUDES */
+#include <kapplication.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+
+/* QT INCLUDES */
+#include <qcursor.h>
+#include <qevent.h>
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qwidget.h>
+#include <qpopupmenu.h>
+#include <qapplication.h>
+#include <qwidgetlist.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <specials.h>
+#include "execbutton.h"
+#include <myprocess.h>
+#include <iostream>
+#include <kommanderplugin.h>
+
+using namespace std;
+
+enum Functions {
+ FirstFunction = 260, //CHANGE THIS NUMBER TO AN UNIQUE ONE!!!
+ EB_isOn,
+ EB_setPopup,
+ EB_setButtonText,
+ LastFunction
+};
+
+ExecButton::ExecButton(QWidget* a_parent, const char* a_name)
+ : KPushButton(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+ setWriteStdout(true);
+ setBlockGUI(Button);
+ connect(this, SIGNAL(clicked()), this, SLOT(startProcess()));
+
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+ KommanderPlugin::registerFunction(EB_isOn, "isOn(QString widget)", i18n("For use only when button is togle type."), 1);
+ KommanderPlugin::registerFunction(EB_setPopup, "setPopup(QString widget, QString Menu)", i18n("Associate a Kommander PopupMenu with this ExecButton."), 2);
+ KommanderPlugin::registerFunction(EB_setButtonText, "setButtonText(QString widget, QString Text)", i18n("Set the text on the ExecButton."), 2);
+}
+
+ExecButton::~ExecButton()
+{
+}
+
+QString ExecButton::currentState() const
+{
+ return QString("default");
+}
+
+bool ExecButton::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList ExecButton::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void ExecButton::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void ExecButton::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString ExecButton::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void ExecButton::populate()
+{
+ QString txt = KommanderWidget::evalAssociatedText(populationText());
+ setWidgetText(txt);
+}
+
+void ExecButton::setWidgetText(const QString& a_text)
+{
+ setText(a_text);
+ emit widgetTextChanged(a_text);
+}
+
+void ExecButton::startProcess()
+{
+ QString at = evalAssociatedText().stripWhiteSpace();
+ bool enabledStatus = isEnabled();
+ if (m_blockGUI != None)
+ setEnabled(false);
+ if (m_blockGUI == GUI)
+ KApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+ MyProcess* process = new MyProcess(this);
+ process->setBlocking(m_blockGUI == GUI);
+ connect(process, SIGNAL(processExited(MyProcess*)), SLOT(processExited(MyProcess*)));
+ m_output = process->run(at);
+ if (m_blockGUI == GUI)
+ {
+ KApplication::restoreOverrideCursor();
+ if (writeStdout())
+ cout << m_output << flush;
+ }
+ setEnabled(enabledStatus);
+}
+
+
+bool ExecButton::writeStdout() const
+{
+ return m_writeStdout;
+}
+
+void ExecButton::setWriteStdout(bool a_enable)
+{
+ m_writeStdout = a_enable;
+}
+
+void ExecButton::setBlockGUI(Blocking a_enable)
+{
+ m_blockGUI = a_enable;
+}
+
+ExecButton::Blocking ExecButton::blockGUI() const
+{
+ return m_blockGUI;
+}
+
+void ExecButton::processExited(MyProcess* p)
+{
+ if (blockGUI() != None)
+ setEnabled(true);
+ if (p)
+ {
+ m_output = p->output();
+ if (writeStdout())
+ cout << m_output << flush;
+ delete p;
+ }
+}
+
+void ExecButton::showEvent(QShowEvent* e)
+{
+ KPushButton::showEvent(e);
+ emit widgetOpened();
+}
+
+void ExecButton::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+bool ExecButton::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::execute || f == DCOP::geometry || f == DCOP::getBackgroundColor || f == DCOP::setBackgroundColor || (f >= FirstFunction && f <= LastFunction);
+}
+
+QString ExecButton::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ return m_output;
+ case DCOP::setText:
+ setWidgetText(args[0]);
+ break;
+ case DCOP::execute:
+ startProcess();
+ break;
+ case EB_isOn:
+ return QString::number(this->isOn() );
+ break;
+ case EB_setButtonText:
+ ExecButton::setText(args[0]);
+ break;
+ case EB_setPopup:
+ {
+ QWidgetList *list = QApplication::allWidgets();
+ QWidgetListIt it( *list );
+ QWidget * w;
+ while ( (w=it.current()) != 0 ) { // for each widget...
+ ++it;
+ if (w->name() == args[0] && w->className() == "PopupMenu")
+ {
+ QPopupMenu *popup = dynamic_cast<QPopupMenu*>(w->child("unnamed", "KPopupMenu"));
+ this->setPopup(popup);
+ }
+ }
+ break;
+ }
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ case DCOP::getBackgroundColor:
+ return this->paletteBackgroundColor().name();
+ break;
+ case DCOP::setBackgroundColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ this->setPaletteBackgroundColor(color);
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+
+#include "execbutton.moc"
diff --git a/kommander/widgets/execbutton.h b/kommander/widgets/execbutton.h
new file mode 100644
index 00000000..2e2ea60a
--- /dev/null
+++ b/kommander/widgets/execbutton.h
@@ -0,0 +1,94 @@
+/***************************************************************************
+ execbutton.h - Button that runs its text association
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+#ifndef _HAVE_EXECBUTTON_H_
+#define _HAVE_EXECBUTTON_H_
+
+/* KDE INCLUDES */
+#include <kpushbutton.h>
+
+/* QT INCLUDES */
+#include <qobject.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+
+class QWidget;
+class KProcess;
+class MyProcess;
+
+class QShowEvent;
+class KOMMANDER_EXPORT ExecButton : public KPushButton, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_ENUMS(Blocking)
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+ Q_PROPERTY(bool writeStdout READ writeStdout WRITE setWriteStdout)
+ Q_PROPERTY(Blocking blockGUI READ blockGUI WRITE setBlockGUI)
+
+public:
+ ExecButton(QWidget *a_parent, const char *a_name);
+ ~ExecButton();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ // Handle stdout setting
+ virtual void setWriteStdout(bool);
+ bool writeStdout() const;
+ // Handle blocking
+ enum Blocking { None, Button, GUI };
+ virtual void setBlockGUI(Blocking a_enable);
+ Blocking blockGUI() const;
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void populate();
+ virtual void setWidgetText(const QString &);
+
+ // Execute script from associastedText
+ virtual void startProcess();
+ // Process has ended
+ virtual void processExited(MyProcess* p);
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString&);
+ void contextMenuRequested(int xpos, int ypos);
+
+protected:
+ void contextMenuEvent( QContextMenuEvent * e );
+ // Whether output from process should be put in real stdout
+ bool m_writeStdout;
+ // Whether pressing execubtton should block GUI until process ends
+ Blocking m_blockGUI;
+ // Output from process
+ QString m_output;
+ void showEvent( QShowEvent *e );
+private:
+};
+
+#endif
diff --git a/kommander/widgets/fileselector.cpp b/kommander/widgets/fileselector.cpp
new file mode 100644
index 00000000..b220b8d9
--- /dev/null
+++ b/kommander/widgets/fileselector.cpp
@@ -0,0 +1,240 @@
+/***************************************************************************
+ fileselector.cpp - File selection widget
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+/* KDE INCLUDES */
+#include <kfiledialog.h>
+#include <klineedit.h>
+#include <kpushbutton.h>
+#include <kurlcompletion.h>
+#include <kiconloader.h>
+
+/* QT INCLUDES */
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qevent.h>
+#include <qlayout.h>
+#include <qsizepolicy.h>
+
+/* OTHER INCLUDES */
+#include <specials.h>
+#include "fileselector.h"
+
+FileSelector::FileSelector(QWidget * a_parent, const char *a_name)
+ : QWidget(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+
+ m_lineEdit = new KLineEdit(this);
+
+ m_selectButton = new KPushButton(BarIconSet("fileopen"), "", this);
+
+ m_boxLayout = new QHBoxLayout(this, 0, 11);
+ m_boxLayout->addWidget(m_lineEdit);
+ m_boxLayout->addWidget(m_selectButton);
+
+ setSizePolicy(m_lineEdit->sizePolicy());
+ m_lineEdit->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
+ m_selectButton->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding));
+
+ connect(m_selectButton, SIGNAL(clicked()), this, SLOT(makeSelection()));
+
+ setSelectionType(Open);
+ setSelectionOpenMultiple(false);
+}
+
+FileSelector::~FileSelector()
+{
+}
+
+QString FileSelector::currentState() const
+{
+ return QString("default");
+}
+
+bool FileSelector::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList FileSelector::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void FileSelector::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void FileSelector::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString FileSelector::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void FileSelector::populate()
+{
+ QString txt = KommanderWidget::evalAssociatedText(populationText());
+ setWidgetText(txt);
+}
+
+void FileSelector::setWidgetText(const QString& a_text)
+{
+ m_lineEdit->setText(a_text);
+ emit widgetTextChanged(a_text);
+}
+
+FileSelector::SelectionType FileSelector::selectionType() const
+{
+ return m_selectionType;
+}
+
+void FileSelector::setSelectionType(SelectionType a_selectionType)
+{
+ m_selectionType = a_selectionType;
+ delete m_lineEdit->completionObject();
+ if (m_selectionType == Directory)
+ m_lineEdit->setCompletionObject(new KURLCompletion(KURLCompletion::DirCompletion));
+ else
+ m_lineEdit->setCompletionObject(new KURLCompletion(KURLCompletion::FileCompletion));
+
+}
+
+QString FileSelector::selectionFilter() const
+{
+ return m_filter;
+}
+
+void FileSelector::setSelectionFilter(const QString& a_filter)
+{
+ m_filter = a_filter;
+}
+
+QString FileSelector::selectionCaption() const
+{
+ return m_caption;
+}
+
+void FileSelector::setSelectionCaption(const QString& a_caption)
+{
+ m_caption = a_caption;
+}
+
+bool FileSelector::selectionOpenMultiple() const
+{
+ return m_openMultiple;
+}
+
+void FileSelector::setSelectionOpenMultiple(bool a_openMultiple)
+{
+ m_openMultiple = a_openMultiple;
+}
+
+void FileSelector::makeSelection()
+{
+ QString text;
+ if (m_selectionType == Open && m_openMultiple)
+ text = KFileDialog::getOpenFileNames(m_lineEdit->text(), m_filter, this, m_caption).join("\n");
+ else if (m_selectionType == Open && !m_openMultiple)
+ text = KFileDialog::getOpenFileName(m_lineEdit->text(), m_filter, this, m_caption);
+ else if (m_selectionType == Save)
+ text = KFileDialog::getSaveFileName(m_lineEdit->text(), m_filter, this, m_caption);
+ else if (m_selectionType == Directory)
+ text = KFileDialog::getExistingDirectory(m_lineEdit->text(), this, m_caption);
+
+ if (!text.isEmpty())
+ setWidgetText(text);
+}
+
+QString FileSelector::caption() const
+{
+ return m_selectButton->text();
+}
+
+void FileSelector::setCaption(const QString& a_text)
+{
+ m_selectButton->setText(a_text);
+}
+
+bool FileSelector::showEditor() const
+{
+ return m_lineEdit->isVisible();
+}
+
+void FileSelector::setShowEditor(bool a_visible)
+{
+ if (a_visible)
+ m_lineEdit->show();
+ else
+ m_lineEdit->hide();
+}
+
+void FileSelector::showEvent(QShowEvent * e)
+{
+ QWidget::showEvent(e);
+ emit widgetOpened();
+}
+
+void FileSelector::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+bool FileSelector::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::selection || f == DCOP::setSelection ||
+ f == DCOP::clear;
+}
+
+QString FileSelector::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ return m_lineEdit->text();
+ case DCOP::setText:
+ setWidgetText(args[0]);
+ break;
+ case DCOP::selection:
+ return m_lineEdit->selectedText();
+ case DCOP::setSelection:
+ {
+ int f = m_lineEdit->text().find(args[0]);
+ if (f != -1)
+ m_lineEdit->setSelection(f, args[0].length());
+ break;
+ }
+ case DCOP::clear:
+ setWidgetText(QString::null);
+ break;
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+
+#include "fileselector.moc"
diff --git a/kommander/widgets/fileselector.h b/kommander/widgets/fileselector.h
new file mode 100644
index 00000000..9da6847d
--- /dev/null
+++ b/kommander/widgets/fileselector.h
@@ -0,0 +1,102 @@
+/***************************************************************************
+ fileselector.h - File selection widget
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef _HAVE_FILESELECTOR_H_
+#define _HAVE_FILESELECTOR_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qobject.h>
+#include <qstringlist.h>
+#include <qstring.h>
+#include <qwidget.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+
+class QBoxLayout;
+class KPushButton;
+class KLineEdit;
+
+class QShowEvent;
+class KOMMANDER_EXPORT FileSelector : public QWidget, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+ Q_PROPERTY(bool showEditor READ showEditor WRITE setShowEditor)
+ Q_PROPERTY(QString buttonCaption READ caption WRITE setCaption)
+ Q_PROPERTY(QString selectionFilter READ selectionFilter WRITE setSelectionFilter)
+ Q_PROPERTY(QString selectionCaption READ selectionCaption WRITE setSelectionCaption)
+ Q_PROPERTY(SelectionType selectionType READ selectionType WRITE setSelectionType)
+ Q_ENUMS(SelectionType)
+ Q_PROPERTY(bool selectionOpenMultiple READ selectionOpenMultiple WRITE setSelectionOpenMultiple)
+
+public:
+ FileSelector(QWidget *a_parent, const char *a_name);
+ ~FileSelector();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ enum SelectionType { Open, Save, Directory };
+ SelectionType selectionType() const;
+ void setSelectionType(SelectionType);
+ bool selectionOpenMultiple() const;
+ void setSelectionOpenMultiple(bool);
+ QString selectionFilter() const;
+ void setSelectionFilter(const QString&);
+ QString selectionCaption() const;
+ void setSelectionCaption(const QString&);
+ QString caption() const;
+ void setCaption(const QString&);
+ bool showEditor() const;
+ void setShowEditor(bool);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+
+public slots:
+ virtual void setWidgetText(const QString&);
+ virtual void makeSelection();
+ virtual void populate();
+
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString&);
+ void contextMenuRequested(int xpos, int ypos);
+protected:
+ void contextMenuEvent( QContextMenuEvent * e );
+
+ bool m_openMultiple;
+ QString m_caption;
+ QString m_filter;
+ SelectionType m_selectionType;
+ KLineEdit *m_lineEdit;
+ KPushButton *m_selectButton;
+ QBoxLayout *m_boxLayout;
+ void showEvent(QShowEvent *e);
+private:
+};
+
+#endif
diff --git a/kommander/widgets/fontdialog.cpp b/kommander/widgets/fontdialog.cpp
new file mode 100644
index 00000000..432b2d7f
--- /dev/null
+++ b/kommander/widgets/fontdialog.cpp
@@ -0,0 +1,158 @@
+//
+// C++ Implementation: FontDialog
+//
+// Description:
+//
+//
+// Author: Andras Mantia <amantia@kdewebdev.org>, (C) 2008
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "fontdialog.h"
+
+#include "kommanderplugin.h"
+#include "specials.h"
+
+#include <kfontdialog.h>
+#include <kiconloader.h>
+#include <klocale.h>
+
+enum Functions {
+ FirstFunction = 139,
+ SetFont,
+ Family,
+ PointSize,
+ Bold,
+ Italic,
+ LastFunction
+};
+
+FontDialog::FontDialog(QWidget *parent, const char *name)
+ : QLabel(parent, name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+ if (KommanderWidget::inEditor)
+ {
+ setPixmap(KGlobal::iconLoader()->loadIcon("kfontcombo", KIcon::NoGroup, KIcon::SizeMedium));
+ setFrameStyle(QFrame::Box | QFrame::Plain);
+ setLineWidth(1);
+ setFixedSize(pixmap()->size());
+ }
+ else
+ setHidden(true);
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+ KommanderPlugin::registerFunction(SetFont, "setFont(QString widget, QString family, int pointSize, bool bold, bool italic)",
+ i18n("Sets the default font for the dialog, by specifying the family, the size and other style options."), 2, 5);
+ KommanderPlugin::registerFunction(Family, "family(QString widget)",
+ i18n("Returns the font family."), 1);
+ KommanderPlugin::registerFunction(PointSize, "pointSize(QString widget)",
+ i18n("Returns the font size in point."), 1);
+ KommanderPlugin::registerFunction(Bold, "bold(QString widget)",
+ i18n("Returns true, if the font is bold."), 1);
+ KommanderPlugin::registerFunction(Italic, "italic(QString widget)",
+ i18n("Returns true, if the font is italic."), 1);
+}
+
+FontDialog::~FontDialog()
+{
+}
+
+QString FontDialog::currentState() const
+{
+ return QString("default");
+}
+
+bool FontDialog::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList FontDialog::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void FontDialog::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void FontDialog::setWidgetText(const QString& a_text)
+{
+ KommanderWidget::setAssociatedText(a_text);
+}
+
+void FontDialog::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString FontDialog::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void FontDialog::populate()
+{
+ setAssociatedText(KommanderWidget::evalAssociatedText( populationText()));
+}
+
+bool FontDialog::isFunctionSupported(int f)
+{
+ return (f > FirstFunction && f < LastFunction) || f == DCOP::execute;
+}
+
+QString FontDialog::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case SetFont:
+ {
+ m_font.setFamily(args[0]);
+ if (args[1].isEmpty())
+ m_font.setPointSize(12);
+ else
+ m_font.setPointSize(args[1].toInt());
+ m_font.setBold(args[2] == "1" || args[2].upper() == "TRUE");
+ m_font.setItalic(args[3] == "1" || args[3].upper() == "TRUE");
+ break;
+ }
+ case Family:
+ {
+ return m_font.family();
+ break;
+ }
+ case PointSize:
+ {
+ return QString::number(m_font.pointSize());
+ break;
+ }
+ case Bold:
+ {
+ return m_font.bold() ? "1" : "0";
+ }
+ case Italic:
+ {
+ return m_font.italic() ? "1" : "0";
+ }
+ case DCOP::execute:
+ {
+ int result = KFontDialog::getFont( m_font );
+ if ( result == KFontDialog::Accepted )
+ {
+ return m_font.toString();
+ }
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+
+
+#include "fontdialog.moc"
diff --git a/kommander/widgets/fontdialog.h b/kommander/widgets/fontdialog.h
new file mode 100644
index 00000000..38bf7830
--- /dev/null
+++ b/kommander/widgets/fontdialog.h
@@ -0,0 +1,50 @@
+//
+// C++ Interface: colordialog
+//
+// Description:
+//
+//
+// Author: Andras Mantia <amantia@kdewebdev.org>, (C) 2008
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#ifndef FONTDIALOG_H
+#define FONTDIALOG_H
+
+#include <qlabel.h>
+#include <kommanderwidget.h>
+
+#include <qfont.h>
+
+/**
+ @author Andras Mantia <amantia@kdewebdev.org>
+*/
+class FontDialog : public QLabel, public KommanderWidget
+{
+ Q_OBJECT
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ FontDialog(QWidget *parent = 0, const char *name = 0);
+
+ ~FontDialog();
+
+ virtual bool isKommanderWidget() const;
+ virtual QString currentState() const;
+ virtual bool isFunctionSupported(int function);
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual QStringList associatedText() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+public slots:
+ virtual void setWidgetText(const QString &);
+ virtual void populate();
+
+ QFont m_font;
+};
+
+#endif
diff --git a/kommander/widgets/groupbox.cpp b/kommander/widgets/groupbox.cpp
new file mode 100644
index 00000000..29947eb1
--- /dev/null
+++ b/kommander/widgets/groupbox.cpp
@@ -0,0 +1,152 @@
+/***************************************************************************
+ groupbox.cpp - Groupbox widget
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qobject.h>
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qevent.h>
+#include <qgroupbox.h>
+#include <qobjectlist.h>
+#include <klocale.h>
+
+/* OTHER INCLUDES */
+#include "kommanderplugin.h"
+#include <specials.h>
+#include "groupbox.h"
+
+
+GroupBox::GroupBox(QWidget *a_parent, const char *a_name)
+ : QGroupBox(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+}
+
+GroupBox::~GroupBox()
+{
+}
+
+QString GroupBox::currentState() const
+{
+ return QString("default");
+}
+
+bool GroupBox::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList GroupBox::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void GroupBox::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void GroupBox::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString GroupBox::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void GroupBox::populate()
+{
+ QString txt = KommanderWidget::evalAssociatedText( populationText() );
+//FIXME: setWidgetText( txt );
+}
+
+/* We need to keep track of all widgets created as a child of a groupbox, in order of creation. */
+void GroupBox::insertChild(QObject *a_child)
+{
+ m_childList.append(a_child);
+ QObject::insertChild(a_child);
+}
+
+void GroupBox::removeChild(QObject *a_child)
+{
+ m_childList.remove(a_child);
+ QObject::removeChild(a_child);
+}
+
+void GroupBox::showEvent( QShowEvent *e )
+{
+ QGroupBox::showEvent(e);
+ emit widgetOpened();
+}
+
+void GroupBox::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+bool GroupBox::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::geometry || f == DCOP::getBackgroundColor || f == DCOP::setBackgroundColor;
+// || (f >= FirstFunction && f <= LastFunction);
+}
+
+QString GroupBox::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ {
+ QString text;
+ for (QObjectListIt it(m_childList); it.current(); ++it)
+ if (dynamic_cast<KommanderWidget*>(it.current()))
+ text += (dynamic_cast<KommanderWidget*>(it.current()))->evalAssociatedText();
+ return text;
+ }
+ case DCOP::setText:
+ setTitle(args[0]);
+ break;
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ case DCOP::getBackgroundColor:
+ return this->paletteBackgroundColor().name();
+ break;
+ case DCOP::setBackgroundColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ this->setPaletteBackgroundColor(color);
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+
+}
+
+#include "groupbox.moc"
diff --git a/kommander/widgets/groupbox.h b/kommander/widgets/groupbox.h
new file mode 100644
index 00000000..b7de75e1
--- /dev/null
+++ b/kommander/widgets/groupbox.h
@@ -0,0 +1,70 @@
+/***************************************************************************
+ groupbox.h - Groupbox widget
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef _HAVE_GROUPBOX_H_
+#define _HAVE_GROUPBOX_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qgroupbox.h>
+#include <qobject.h>
+#include <qstringlist.h>
+#include <qstring.h>
+#include <qobjectlist.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+class QWidget;
+
+class QShowEvent;
+class KOMMANDER_EXPORT GroupBox : public QGroupBox, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ GroupBox(QWidget *a_parent, const char *a_name);
+ ~GroupBox();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual void insertChild(QObject*);
+ virtual void removeChild(QObject*);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void populate();
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString &);
+ void contextMenuRequested(int xpos, int ypos);
+protected:
+ QObjectList m_childList;
+ void showEvent(QShowEvent *e);
+ void contextMenuEvent( QContextMenuEvent * e );
+private:
+};
+
+#endif
diff --git a/kommander/widgets/konsole.cpp b/kommander/widgets/konsole.cpp
new file mode 100644
index 00000000..587f2318
--- /dev/null
+++ b/kommander/widgets/konsole.cpp
@@ -0,0 +1,153 @@
+/***************************************************************************
+ konsole.cpp - Widget that shows output of a process
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* QT INCLUDES */
+#include <qcursor.h>
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qwidget.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <specials.h>
+#include "konsole.h"
+#include <myprocess.h>
+
+Konsole::Konsole(QWidget* a_parent, const char* a_name)
+ : KTextEdit(a_parent, a_name), KommanderWidget(this), mSeenEOL(false), mProcess(false)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+}
+
+Konsole::~Konsole()
+{
+}
+
+QString Konsole::currentState() const
+{
+ return QString("default");
+}
+
+bool Konsole::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList Konsole::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void Konsole::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void Konsole::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString Konsole::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void Konsole::populate()
+{
+ QString txt = KommanderWidget::evalAssociatedText(populationText());
+ setWidgetText(txt);
+}
+
+void Konsole::setWidgetText(const QString&)
+{
+// FIXME: emit widgetTextChanged(a_text);
+}
+
+void Konsole::execute()
+{
+ QString at = evalAssociatedText().stripWhiteSpace();
+ if (mProcess)
+ cancel();
+ mSeenEOL = false;
+ mProcess = new MyProcess(this);
+ mProcess->setBlocking(false);
+ connect(mProcess, SIGNAL(processExited(MyProcess*)), SLOT(processExited(MyProcess*)));
+ connect(mProcess, SIGNAL(processReceivedStdout(MyProcess*, char*, int)), SLOT(processReceivedStdout(MyProcess*, char*, int)));
+ setCursor(QCursor(Qt::WaitCursor));
+ mProcess->run(at);
+}
+
+void Konsole::cancel()
+{
+ if (!mProcess)
+ return;
+ mProcess->cancel();
+ processExited(mProcess);
+}
+
+
+void Konsole::processReceivedStdout(MyProcess*, char* buffer, int buflen)
+{
+ QString pBuf = QString::fromLocal8Bit(buffer, buflen);
+ if (mSeenEOL)
+ pBuf = '\n' + pBuf;
+ mSeenEOL = pBuf[pBuf.length()-1] == '\n';
+ if (mSeenEOL)
+ pBuf = pBuf.left(pBuf.length()-1);
+ insert(pBuf);
+}
+
+void Konsole::processExited(MyProcess*)
+{
+ unsetCursor();
+ delete mProcess;
+ mProcess = 0;
+ emit finished();
+}
+
+bool Konsole::isFunctionSupported(int f)
+{
+ return f == DCOP::setText || f == DCOP::text || f == DCOP::clear || f == DCOP::execute || f == DCOP::cancel;
+}
+
+QString Konsole::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::setText:
+ setWidgetText(args[0]);
+ break;
+ case DCOP::text:
+ return text();
+ case DCOP::clear:
+ clear();
+ break;
+ case DCOP::execute:
+ execute();
+ break;
+ case DCOP::cancel:
+ cancel();
+ break;
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+
+#include "konsole.moc"
diff --git a/kommander/widgets/konsole.h b/kommander/widgets/konsole.h
new file mode 100644
index 00000000..a031adef
--- /dev/null
+++ b/kommander/widgets/konsole.h
@@ -0,0 +1,74 @@
+/***************************************************************************
+ konsole.h - Widget that shows output of a process
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+#ifndef _HAVE_KONSOLE_H_
+#define _HAVE_KONSOLE_H_
+
+/* KDE INCLUDES */
+#include <ktextedit.h>
+
+/* QT INCLUDES */
+#include <qobject.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+
+class QWidget;
+class MyProcess;
+
+class KOMMANDER_EXPORT Konsole : public KTextEdit, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_OVERRIDE(bool readOnly DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+
+ public:
+ Konsole(QWidget *a_parent, const char *a_name);
+ ~Konsole();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+ public slots:
+ virtual void populate();
+ virtual void setWidgetText(const QString &);
+ // Execute current script
+ virtual void execute();
+ // Stop executing current script
+ virtual void cancel();
+ // Process has ended
+ virtual void processReceivedStdout(MyProcess*, char* a_buffer, int a_len);
+ virtual void processExited(MyProcess* p);
+ signals:
+ void finished();
+ protected:
+ // Whether last line of output was ended with EOL
+ bool mSeenEOL;
+ // Current process or NULL if there is no process running
+ MyProcess* mProcess;
+};
+
+#endif
diff --git a/kommander/widgets/label.cpp b/kommander/widgets/label.cpp
new file mode 100644
index 00000000..a9a24e3b
--- /dev/null
+++ b/kommander/widgets/label.cpp
@@ -0,0 +1,127 @@
+/***************************************************************************
+ label.cpp - label widget
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* QT INCLUDES */
+#include <qobject.h>
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qevent.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <specials.h>
+#include "label.h"
+
+Label::Label(QWidget *a_parent, const char *a_name)
+ : QLabel(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+ if (KommanderWidget::inEditor && a_name)
+ setText(a_name);
+}
+
+Label::~Label()
+{
+}
+
+QString Label::currentState() const
+{
+ return QString("default");
+}
+
+bool Label::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList Label::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void Label::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void Label::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString Label::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void Label::populate()
+{
+ setWidgetText(KommanderWidget::evalAssociatedText(populationText()));
+}
+
+void Label::setWidgetText(const QString& a_text)
+{
+ setText(a_text);
+}
+
+void Label::showEvent(QShowEvent *e)
+{
+ QLabel::showEvent(e);
+ emit widgetOpened();
+}
+
+bool Label::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::clear || f == DCOP::geometry || f == DCOP::getBackgroundColor || f == DCOP::setBackgroundColor;
+}
+
+QString Label::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ return text();
+ case DCOP::setText:
+ setWidgetText(args[0]);
+ break;
+ case DCOP::clear:
+ setWidgetText("");
+ break;
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ case DCOP::getBackgroundColor:
+ return this->paletteBackgroundColor().name();
+ break;
+ case DCOP::setBackgroundColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ this->setPaletteBackgroundColor(color);
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+#include "label.moc"
diff --git a/kommander/widgets/label.h b/kommander/widgets/label.h
new file mode 100644
index 00000000..216998db
--- /dev/null
+++ b/kommander/widgets/label.h
@@ -0,0 +1,64 @@
+/***************************************************************************
+ label.h - label widget
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_LABEL_H_
+#define _HAVE_LABEL_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qstringlist.h>
+#include <qobject.h>
+#include <qstring.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <qlabel.h>
+
+class QWidget;
+
+class QShowEvent;
+class KOMMANDER_EXPORT Label : public QLabel, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ Label(QWidget *a_parent, const char *a_name);
+ ~Label();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void setWidgetText(const QString&);
+ virtual void populate();
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString&);
+protected:
+ void showEvent(QShowEvent *e);
+private:
+};
+
+#endif
diff --git a/kommander/widgets/lineedit.cpp b/kommander/widgets/lineedit.cpp
new file mode 100644
index 00000000..d243660a
--- /dev/null
+++ b/kommander/widgets/lineedit.cpp
@@ -0,0 +1,182 @@
+/***************************************************************************
+ lineedit.cpp - Lineedit widget
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* QT INCLUDES */
+#include <qlayout.h>
+#include <qevent.h>
+
+/* OTHER INCLUDES */
+#include <specials.h>
+#include "lineedit.h"
+#include <klocale.h>
+#include <kommanderplugin.h>
+
+enum functions {
+ FirstFunction = 440,
+ LE_clearModified,
+ LastFunction
+};
+
+LineEdit::LineEdit(QWidget *a_parent, const char *a_name)
+ : KLineEdit(a_parent, a_name), KommanderWidget((QObject *)this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+
+ connect(this, SIGNAL(textChanged(const QString &)), this,
+ SIGNAL(widgetTextChanged(const QString &)));
+
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+ KommanderPlugin::registerFunction(LE_clearModified, "clearModified(QString widget)", i18n("Clear widget modified status."), 1);
+}
+
+void LineEdit::showEvent(QShowEvent *e)
+{
+ QLineEdit::showEvent(e);
+ emit widgetOpened();
+}
+
+void LineEdit::focusInEvent( QFocusEvent * e)
+{
+ QLineEdit::focusInEvent(e);
+ emit gotFocus();
+}
+
+void LineEdit::focusOutEvent( QFocusEvent * e)
+{
+ QLineEdit::focusOutEvent(e);
+ emit lostFocus();
+}
+
+QString LineEdit::currentState() const
+{
+ return QString("default");
+}
+
+LineEdit::~LineEdit()
+{
+}
+
+bool LineEdit::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList LineEdit::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void LineEdit::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void LineEdit::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString LineEdit::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void LineEdit::populate()
+{
+ QString txt = KommanderWidget::evalAssociatedText(populationText());
+ setWidgetText(txt);
+}
+
+void LineEdit::setSelectedWidgetText(const QString& a_text)
+{
+ insert(a_text);
+}
+
+void LineEdit::setWidgetText(const QString& a_text)
+{
+ setText(a_text);
+ emit widgetTextChanged(a_text);
+}
+
+void LineEdit::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+bool LineEdit::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::selection || f == DCOP::setSelection ||
+ f == DCOP::clear || f == DCOP::setEditable || f == DCOP::geometry || f == DCOP::hasFocus || f == DCOP::getBackgroundColor || f == DCOP::setBackgroundColor || f == DCOP::isModified || (f >= FirstFunction && f <= LastFunction) ;
+}
+
+QString LineEdit::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ return text();
+ case DCOP::setText:
+ setWidgetText(args[0]);
+ break;
+ case DCOP::selection:
+ return selectedText();
+ case DCOP::setSelection:
+ setSelectedWidgetText(args[0]);
+ break;
+ case DCOP::clear:
+ setWidgetText("");
+ break;
+ case DCOP::setEditable:
+ setReadOnly(args[0] == "false" || args[0] == "0");
+ break;
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ case DCOP::hasFocus:
+ return QString::number(this->hasFocus());
+ break;
+ case DCOP::getBackgroundColor:
+ return this->paletteBackgroundColor().name();
+ break;
+ case DCOP::setBackgroundColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ this->setPaletteBackgroundColor(color);
+ break;
+ }
+ case DCOP::isModified:
+ return isModified() ? "1" : "0";
+ break;
+ case LE_clearModified:
+ this->clearModified();
+ break;
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+
+
+#include "lineedit.moc"
diff --git a/kommander/widgets/lineedit.h b/kommander/widgets/lineedit.h
new file mode 100644
index 00000000..8b4d403a
--- /dev/null
+++ b/kommander/widgets/lineedit.h
@@ -0,0 +1,72 @@
+/***************************************************************************
+ lineedit.h - Lineedit widget
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_LINEEDIT_H_
+#define _HAVE_LINEEDIT_H_
+
+/* KDE INCLUDES */
+#include <klineedit.h>
+
+/* QT INCLUDES */
+#include <qtextedit.h>
+#include <qstringlist.h>
+#include <qstring.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+
+#include <kommander_export.h>
+class QShowEvent;
+
+class KOMMANDER_EXPORT LineEdit : public KLineEdit, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ LineEdit(QWidget *, const char *);
+ virtual ~LineEdit();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void setWidgetText(const QString &);
+ virtual void setSelectedWidgetText(const QString &a_text);
+ virtual void populate();
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString &);
+ void contextMenuRequested(int xpos, int ypos);
+ void gotFocus();
+ void lostFocus();
+protected:
+ virtual void showEvent( QShowEvent *e );
+ void contextMenuEvent( QContextMenuEvent * e );
+ void focusInEvent( QFocusEvent* e);
+ void focusOutEvent( QFocusEvent* e);
+private:
+};
+
+#endif
diff --git a/kommander/widgets/listbox.cpp b/kommander/widgets/listbox.cpp
new file mode 100644
index 00000000..19b1b540
--- /dev/null
+++ b/kommander/widgets/listbox.cpp
@@ -0,0 +1,225 @@
+/***************************************************************************
+ listbox.cpp - Listbox widget
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+/* KDE INCLUDES */
+#include <kglobal.h>
+#include <kiconloader.h>
+
+/* QT INCLUDES */
+#include <qobject.h>
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qevent.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <specials.h>
+#include "listbox.h"
+
+ListBox::ListBox(QWidget *a_parent, const char *a_name)
+ : KListBox(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+}
+
+ListBox::~ListBox()
+{
+}
+
+QString ListBox::currentState() const
+{
+ return QString("default");
+}
+
+bool ListBox::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList ListBox::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void ListBox::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void ListBox::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString ListBox::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void ListBox::populate()
+{
+ QString txt = KommanderWidget::evalAssociatedText(populationText());
+ setWidgetText(txt);
+}
+
+void ListBox::setWidgetText(const QString& a_text)
+{
+ clear();
+ insertStringList(QStringList::split("\n", a_text));
+ emit widgetTextChanged(a_text);
+}
+
+void ListBox::showEvent(QShowEvent *e)
+{
+ QListBox::showEvent(e);
+ emit widgetOpened();
+}
+
+bool ListBox::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::selection || f == DCOP::setSelection ||
+ f == DCOP::insertItems || f == DCOP::insertItem || f == DCOP::removeItem || f == DCOP::clear ||
+ f == DCOP::currentItem || f == DCOP::setCurrentItem || f == DCOP::item || f == DCOP::addUniqueItem ||
+ f == DCOP::findItem || f == DCOP::setPixmap || f == DCOP::count || f == DCOP::geometry || f == DCOP::hasFocus || f == DCOP::getBackgroundColor || f == DCOP::setBackgroundColor;
+}
+
+void ListBox::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+
+QString ListBox::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::setText:
+ setWidgetText(args[0]);
+ break;
+ case DCOP::selection:
+ {
+ if (selectionMode() == Single)
+ return currentText();
+ QString value;
+ for (uint i=0; i<count(); i++)
+ if (isSelected(i))
+ value += (value.length() ? "\n" : "") + item(i)->text();
+ return value;
+ }
+ case DCOP::setSelection:
+ {
+ QListBoxItem* found = findItem(args[0], Qt::ExactMatch);
+ if (found)
+ setCurrentItem(index(found));
+ break;
+ }
+ case DCOP::insertItems:
+ insertStringList(QStringList::split("\n", args[0]), args[1].toInt());
+ break;
+ case DCOP::insertItem:
+ insertItem(args[0], args[1].toInt());
+ break;
+ case DCOP::removeItem:
+ removeItem(args[0].toInt());
+ break;
+ case DCOP::clear:
+ clear();
+ break;
+ case DCOP::count:
+ return QString::number(count());
+ case DCOP::currentItem:
+ return QString::number(currentItem());
+ case DCOP::setCurrentItem:
+ {
+ int index = args[0].toInt();
+ if (index < (int)count())
+ setCurrentItem(index);
+ break;
+ }
+ case DCOP::item:
+ {
+ int index = args[0].toInt();
+ if (index >= 0 && index < (int)count())
+ return item(index)->text();
+ else
+ return QString();
+ }
+ case DCOP::addUniqueItem:
+ if (!findItem(args[0], Qt::ExactMatch))
+ insertItem(args[0]);
+ break;
+ case DCOP::findItem:
+ {
+ QListBoxItem* found = findItem(args[0], Qt::ExactMatch);
+ if (!found) found = findItem(args[0], Qt::BeginsWith);
+ if (!found) found = findItem(args[0], Qt::Contains);
+ if (found)
+ return QString::number(index(found));
+ else return QString::number(-1);
+ break;
+ }
+ case DCOP::setPixmap:
+ {
+ QPixmap pixmap = KGlobal::iconLoader()->loadIcon(args[0], KIcon::Small);
+ if (pixmap.isNull())
+ pixmap.load(args[0]);
+ int index = args[1].toInt();
+ if (index == -1)
+ {
+ for (uint i=0; i<count(); i++)
+ changeItem(pixmap, text(i), i);
+ }
+ else if (index < (int)count())
+ changeItem(pixmap, text(index), index);
+ break;
+ }
+ case DCOP::text:
+ {
+ QStringList strings;
+ for(uint i=0; i < count() ; ++i)
+ strings += item(i)->text();
+ return strings.join("\n");
+ }
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ case DCOP::hasFocus:
+ return QString::number(this->hasFocus());
+ break;
+ case DCOP::getBackgroundColor:
+ return this->paletteBackgroundColor().name();
+ break;
+ case DCOP::setBackgroundColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ this->setPaletteBackgroundColor(color);
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+#include "listbox.moc"
diff --git a/kommander/widgets/listbox.h b/kommander/widgets/listbox.h
new file mode 100644
index 00000000..516e9f86
--- /dev/null
+++ b/kommander/widgets/listbox.h
@@ -0,0 +1,67 @@
+/***************************************************************************
+ listbox.h - Listbox widget
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_LISTBOX_H_
+#define _HAVE_LISTBOX_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qstringlist.h>
+#include <qobject.h>
+#include <qstring.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <klistbox.h>
+#include <kommander_export.h>
+class QWidget;
+
+class QShowEvent;
+class KOMMANDER_EXPORT ListBox : public KListBox, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ ListBox(QWidget *a_parent, const char *a_name);
+ ~ListBox();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void setWidgetText(const QString&);
+ virtual void populate();
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString&);
+ void contextMenuRequested(int xpos, int ypos);
+protected:
+ void showEvent(QShowEvent *e);
+ void contextMenuEvent( QContextMenuEvent * e );
+private:
+};
+
+#endif
diff --git a/kommander/widgets/pixmaplabel.cpp b/kommander/widgets/pixmaplabel.cpp
new file mode 100644
index 00000000..7d7095e3
--- /dev/null
+++ b/kommander/widgets/pixmaplabel.cpp
@@ -0,0 +1,132 @@
+/***************************************************************************
+ pixmaplabel.cpp - Pixmap label widget
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* QT INCLUDES */
+#include <qobject.h>
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qevent.h>
+#include <qpixmap.h>
+
+/* KDE INCLUDES */
+#include <kglobal.h>
+#include <kiconloader.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <specials.h>
+#include "pixmaplabel.h"
+
+PixmapLabel::PixmapLabel(QWidget *a_parent, const char *a_name)
+ : QLabel(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+ if (KommanderWidget::inEditor)
+ setPixmap(KGlobal::iconLoader()->loadIcon("tux", KIcon::NoGroup, 128));
+ setAutoResize(false);
+}
+
+PixmapLabel::~PixmapLabel()
+{
+}
+
+QString PixmapLabel::currentState() const
+{
+ return QString("default");
+}
+
+bool PixmapLabel::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList PixmapLabel::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void PixmapLabel::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void PixmapLabel::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString PixmapLabel::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void PixmapLabel::populate()
+{
+ setWidgetText(KommanderWidget::evalAssociatedText(populationText()));
+}
+
+void PixmapLabel::setWidgetText(const QString& a_text)
+{
+ QPixmap pixmap;
+ if (pixmap.load(a_text))
+ setPixmap(pixmap);
+}
+
+void PixmapLabel::showEvent(QShowEvent *e)
+{
+ QLabel::showEvent(e);
+ emit widgetOpened();
+}
+
+void PixmapLabel::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+bool PixmapLabel::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::clear || f == DCOP::geometry;
+}
+
+QString PixmapLabel::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::setText:
+ setWidgetText(args[0]);
+ break;
+ case DCOP::clear:
+ setPixmap(QPixmap());
+ break;
+ case DCOP::text:
+ return text();
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+#include "pixmaplabel.moc"
diff --git a/kommander/widgets/pixmaplabel.h b/kommander/widgets/pixmaplabel.h
new file mode 100644
index 00000000..a932ad1e
--- /dev/null
+++ b/kommander/widgets/pixmaplabel.h
@@ -0,0 +1,66 @@
+/***************************************************************************
+ pixmaplabel.h - Pixmap label widget
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_PIXMAPLABEL_H_
+#define _HAVE_PIXMAPLABEL_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qstringlist.h>
+#include <qobject.h>
+#include <qstring.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <qlabel.h>
+
+class QWidget;
+
+class QShowEvent;
+class KOMMANDER_EXPORT PixmapLabel : public QLabel, public KommanderWidget
+{
+ Q_OBJECT
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ PixmapLabel(QWidget *a_parent, const char *a_name);
+ ~PixmapLabel();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void setWidgetText(const QString&);
+ virtual void populate();
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString&);
+ void contextMenuRequested(int xpos, int ypos);
+protected:
+ void showEvent(QShowEvent *e);
+ void contextMenuEvent( QContextMenuEvent * e );
+private:
+};
+
+#endif
diff --git a/kommander/widgets/pixmaps/textbold.xpm b/kommander/widgets/pixmaps/textbold.xpm
new file mode 100644
index 00000000..6787a461
--- /dev/null
+++ b/kommander/widgets/pixmaps/textbold.xpm
@@ -0,0 +1,27 @@
+/* XPM */
+static const char * const bold_xpm[] = {
+"22 22 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" ",
+" ......... ",
+" ... ... ",
+" ... ... ",
+" ... ... ",
+" ... ... ",
+" ... ... ",
+" ........ ",
+" ... .... ",
+" ... .... ",
+" ... ... ",
+" ... ... ",
+" ... ... ",
+" ... ... ",
+" .......... ",
+" ",
+" ",
+" ",
+" "};
diff --git a/kommander/widgets/pixmaps/textcenter.xpm b/kommander/widgets/pixmaps/textcenter.xpm
new file mode 100644
index 00000000..59eeb565
--- /dev/null
+++ b/kommander/widgets/pixmaps/textcenter.xpm
@@ -0,0 +1,27 @@
+/* XPM */
+static const char * const center_xpm[] = {
+"22 22 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ................. ",
+" ",
+" ............. ",
+" ",
+" ................. ",
+" ",
+" ............. ",
+" ",
+" ................. ",
+" ",
+" ............. ",
+" ",
+" ................. ",
+" ",
+" ............. ",
+" ",
+" ................. ",
+" ",
+" ",
+" "};
diff --git a/kommander/widgets/pixmaps/textitalic.xpm b/kommander/widgets/pixmaps/textitalic.xpm
new file mode 100644
index 00000000..4cbee92c
--- /dev/null
+++ b/kommander/widgets/pixmaps/textitalic.xpm
@@ -0,0 +1,27 @@
+/* XPM */
+static const char * const italic_xpm[] = {
+"22 22 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" ",
+" ..... ",
+" ... ",
+" ... ",
+" ... ",
+" ... ",
+" ... ",
+" ... ",
+" ... ",
+" ... ",
+" ... ",
+" ... ",
+" ... ",
+" ... ",
+" ..... ",
+" ",
+" ",
+" ",
+" "};
diff --git a/kommander/widgets/pixmaps/textleft.xpm b/kommander/widgets/pixmaps/textleft.xpm
new file mode 100644
index 00000000..129a93a4
--- /dev/null
+++ b/kommander/widgets/pixmaps/textleft.xpm
@@ -0,0 +1,27 @@
+/* XPM */
+static const char * const left_xpm[] = {
+"22 22 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ................. ",
+" ",
+" ............. ",
+" ",
+" ................. ",
+" ",
+" ............. ",
+" ",
+" ................. ",
+" ",
+" ............. ",
+" ",
+" ................. ",
+" ",
+" ............. ",
+" ",
+" ................. ",
+" ",
+" ",
+" "};
diff --git a/kommander/widgets/pixmaps/textright.xpm b/kommander/widgets/pixmaps/textright.xpm
new file mode 100644
index 00000000..71544c87
--- /dev/null
+++ b/kommander/widgets/pixmaps/textright.xpm
@@ -0,0 +1,27 @@
+/* XPM */
+static const char * const right_xpm[] = {
+"22 22 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ................. ",
+" ",
+" ............. ",
+" ",
+" ................. ",
+" ",
+" ............. ",
+" ",
+" ................. ",
+" ",
+" ............. ",
+" ",
+" ................. ",
+" ",
+" ............. ",
+" ",
+" ................. ",
+" ",
+" ",
+" "};
diff --git a/kommander/widgets/pixmaps/textunder.xpm b/kommander/widgets/pixmaps/textunder.xpm
new file mode 100644
index 00000000..37882c45
--- /dev/null
+++ b/kommander/widgets/pixmaps/textunder.xpm
@@ -0,0 +1,27 @@
+/* XPM */
+static const char * const under_xpm[] = {
+"22 22 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" ",
+" ..... .... ",
+" ... . ",
+" ... . ",
+" ... . ",
+" ... . ",
+" ... . ",
+" ... . ",
+" ... . ",
+" ... . ",
+" ... . ",
+" ... .. ",
+" ... .. ",
+" ...... ",
+" ",
+" ............ ",
+" ",
+" ",
+" "};
diff --git a/kommander/widgets/plugin.cpp b/kommander/widgets/plugin.cpp
new file mode 100644
index 00000000..9319bc00
--- /dev/null
+++ b/kommander/widgets/plugin.cpp
@@ -0,0 +1,138 @@
+/***************************************************************************
+ plugins.cpp - Kommander Plugins
+ -------------------
+ copyright : (C) 2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004-2006 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include <kommanderplugin.h>
+#include <kiconloader.h>
+
+/* WIDGET INCLUDES */
+#include "buttongroup.h"
+#include "checkbox.h"
+#include "closebutton.h"
+#include "combobox.h"
+#include "datepicker.h"
+#include "dialog.h"
+#include "execbutton.h"
+#include "fileselector.h"
+#include "groupbox.h"
+#include "konsole.h"
+#include "label.h"
+#include "lineedit.h"
+#include "listbox.h"
+#include "pixmaplabel.h"
+#include "progressbar.h"
+#include "radiobutton.h"
+#include "richtexteditor.h"
+#include "scriptobject.h"
+#include "slider.h"
+#include "spinboxint.h"
+#include "statusbar.h"
+#include "subdialog.h"
+#include "tabwidget.h"
+#include "table.h"
+#include "textbrowser.h"
+#include "textedit.h"
+#include "textedit.h"
+#include "timer.h"
+#include "treewidget.h"
+#include "toolbox.h"
+#include "wizard.h"
+#include "popupmenu.h"
+#include "fontdialog.h"
+#include "aboutdialog.h"
+
+class KomStdPlugin : public KommanderPlugin
+{
+public:
+ KomStdPlugin();
+ virtual QWidget *create( const QString &key, QWidget *parent = 0, const char *name = 0 );
+};
+
+KomStdPlugin::KomStdPlugin()
+{
+ const char *group = "Kommander";
+ addWidget("Label", group, "", 0);
+ addWidget("PixmapLabel", group, "", 0);
+ addWidget("LineEdit", group, "", 0);
+ addWidget("Dialog", group, "", 0);
+ addWidget("ExecButton", group, "", 0);
+ addWidget("CloseButton", group, "", 0);
+ addWidget("Konsole", group, "", 0);
+ addWidget("TextEdit", group, "", 0);
+ addWidget("RadioButton", group, "", 0);
+ // addWidget("", group, "");
+ addWidget("GroupBox", group, "", 0);
+ addWidget("ButtonGroup", group, "", 0);
+ addWidget("CheckBox", group, "", 0);
+ addWidget("ComboBox", group, "", 0);
+ addWidget("SpinBoxInt", group, "", 0);
+ // addWidget("Wizard", group, "");
+ addWidget("TabWidget", group, "", 0);
+ addWidget("ToolBox", group, "", new QIconSet(KGlobal::iconLoader()->loadIcon("toolbox", KIcon::NoGroup, KIcon::SizeMedium)), "", true);
+ // addWidget("SubDialog", group, "");
+ addWidget("ListBox", group, "", 0);
+ addWidget("Timer", group, "", 0);
+ addWidget("ScriptObject", group, "", 0);
+ addWidget("RichTextEditor", group, "", 0);
+ addWidget("TreeWidget", group, "", 0);
+ addWidget("StatusBar", group, "", 0);
+ addWidget("TextBrowser", group, "", 0);
+ addWidget("Slider", group, "", 0);
+ addWidget("Table", group, "", 0);
+ addWidget("DatePicker", group, "", 0);
+ addWidget("PopupMenu", group, "", new QIconSet(KGlobal::iconLoader()->loadIcon("contents", KIcon::NoGroup, KIcon::SizeMedium)));
+ addWidget("FontDialog", group, "", new QIconSet(KGlobal::iconLoader()->loadIcon("kfontcombo", KIcon::NoGroup, KIcon::SizeMedium)));
+ addWidget("AboutDialog", group, "", new QIconSet(KGlobal::iconLoader()->loadIcon("kommander", KIcon::NoGroup, KIcon::SizeMedium)));
+}
+
+QWidget *KomStdPlugin::create( const QString &key, QWidget *parent, const char *name )
+{
+ if (key == "ButtonGroup") return new ButtonGroup(parent, name);
+ else if (key == "CheckBox") return new CheckBox(parent, name);
+ else if (key == "CloseButton") return new CloseButton(parent, name);
+ else if (key == "ComboBox") return new ComboBox(parent, name);
+ else if (key == "Dialog") return new Dialog(parent, name);
+ else if (key == "ExecButton") return new ExecButton(parent, name);
+ else if (key == "FileSelector") return new FileSelector(parent, name);
+ else if (key == "GroupBox") return new GroupBox(parent, name);
+ else if (key == "Konsole") return new Konsole(parent, name);
+ else if (key == "Label") return new Label(parent, name);
+ else if (key == "LineEdit") return new LineEdit(parent, name);
+ else if (key == "ListBox") return new ListBox(parent, name);
+ else if (key == "PixmapLabel") return new PixmapLabel(parent, name);
+ else if (key == "ProgressBar") return new ProgressBar(parent, name);
+ else if (key == "RadioButton") return new RadioButton(parent, name);
+ else if (key == "RichTextEditor") return new RichTextEditor(parent, name);
+ else if (key == "ScriptObject") return new ScriptObject(parent, name);
+ else if (key == "Slider") return new Slider(parent, name);
+ else if (key == "SpinBoxInt") return new SpinBoxInt(parent, name);
+ else if (key == "StatusBar") return new StatusBar(parent, name);
+ else if (key == "SubDialog") return new SubDialog(parent, name);
+ else if (key == "Table") return new Table(parent, name);
+ else if (key == "TabWidget") return new TabWidget(parent, name);
+ else if (key == "ToolBox") return new ToolBox(parent, name);
+ else if (key == "TextBrowser") return new TextBrowser(parent, name);
+ else if (key == "TextEdit") return new TextEdit(parent, name);
+ else if (key == "Timer") return new Timer(parent, name);
+ else if (key == "TreeWidget") return new TreeWidget(parent, name);
+ else if (key == "Wizard") return new Wizard(parent, name);
+ else if (key == "DatePicker") return new DatePicker(parent, name);
+ else if (key == "PopupMenu") return new PopupMenu(parent, name);
+ else if (key == "FontDialog") return new FontDialog(parent, name);
+ else if (key == "AboutDialog") return new AboutDialog(parent, name);
+ else return 0;
+}
+
+KOMMANDER_EXPORT_PLUGIN(KomStdPlugin)
diff --git a/kommander/widgets/popupmenu.cpp b/kommander/widgets/popupmenu.cpp
new file mode 100644
index 00000000..696bd0be
--- /dev/null
+++ b/kommander/widgets/popupmenu.cpp
@@ -0,0 +1,246 @@
+//
+// C++ Implementation: popupmenu
+//
+// Description:
+//
+//
+// Author: Andras Mantia <amantia@kdewebdev.org>, (C) 2008
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "popupmenu.h"
+#include "specials.h"
+
+#include <qcursor.h>
+
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <klocale.h>
+#include <kpopupmenu.h>
+#include <kommanderplugin.h>
+
+#define INSERTMENUITEM 100
+#define INSERTSEPARATOR 101
+#define CHANGEMENUITEM 102
+#define SETITEMENABLED 103
+#define ITEMENABLED 104
+#define SETITEMVISIBLE 105
+#define SETITEMCHECKED 106
+#define ITEMVISIBLE 107
+#define ITEMCHECKED 108
+#define INSERTSUBMENU 109
+#define LAST_FUNCTION INSERTSUBMENU
+
+PopupMenu::PopupMenu(QWidget *parent, const char *name)
+ : QLabel(parent, name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+ if (KommanderWidget::inEditor)
+ {
+ setPixmap(KGlobal::iconLoader()->loadIcon("contents", KIcon::NoGroup, KIcon::SizeMedium));
+ setFrameStyle(QFrame::Box | QFrame::Plain);
+ setLineWidth(1);
+ setFixedSize(pixmap()->size());
+ }
+ else
+ setHidden(true);
+
+ m_menu = new KPopupMenu(this);
+ connect(m_menu, SIGNAL(activated(int)), this, SLOT(slotMenuItemActivated(int)));
+
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+ KommanderPlugin::registerFunction(INSERTMENUITEM, "insertMenuItem(QString widget, QString text, QString executeWidget, int index, QString icon)", i18n("Insert an item into the popup menu. The executeWidget's execute method will be run when this item is selected. Returns the id of the inserted item. Use -1 for index to insert to the end. The icon is optional."), 4, 5);
+ KommanderPlugin::registerFunction(INSERTSEPARATOR, "insertSeparator(QString widget, int index)", i18n("Insert a separator item into the popup menu. Use -1 for index to insert to the end."), 2);
+ KommanderPlugin::registerFunction(CHANGEMENUITEM, "changeMenuItem(QString widget, int id, QString text, QString executeWidget, QString icon)", i18n("Change an item specified by id in the popup menu. The executeWidget's execute method will be run when this item is selected."), 4, 5);
+ KommanderPlugin::registerFunction(SETITEMENABLED, "setItemEnabled(QString widget, int id, bool enable)", i18n("Enable the item specified by id in the popup menu."), 3);
+ KommanderPlugin::registerFunction(ITEMENABLED, "itemEnabled(QString widget, int id)", i18n("Check if the item specified by id is enabled."), 2);
+ KommanderPlugin::registerFunction(SETITEMVISIBLE, "setItemVisible(QString widget, int id, bool enable)", i18n("Make the item specified by id visible."), 3);
+ KommanderPlugin::registerFunction(SETITEMCHECKED, "setItemChecked(QString widget, int id, bool enable)", i18n("Apply checked status for the item specified by id."), 3);
+ KommanderPlugin::registerFunction(ITEMVISIBLE, "itemVisible(QString widget, int id)", i18n("Check if the item specified by id is visible."), 2);
+ KommanderPlugin::registerFunction(ITEMCHECKED, "itemChecked(QString widget, int id)", i18n("Verify if the item specified by id is checked."), 2);
+ KommanderPlugin::registerFunction(INSERTSUBMENU, "insertSubmenu(QString widget, QString text, QString menuWidget, int index, QString icon)", i18n("Insert submenu widget into the popup menu. Use -1 for index to insert to the end. The icon is optional."), 4, 5);
+}
+
+
+PopupMenu::~PopupMenu()
+{
+ delete m_menu;
+}
+
+QString PopupMenu::currentState() const
+{
+ return QString("default");
+}
+
+bool PopupMenu::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList PopupMenu::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void PopupMenu::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void PopupMenu::setWidgetText(const QString& a_text)
+{
+ KommanderWidget::setAssociatedText(a_text);
+}
+
+void PopupMenu::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString PopupMenu::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void PopupMenu::popup(int x, int y)
+{
+ m_menu->exec(QPoint(x, y));
+}
+
+void PopupMenu::slotMenuItemActivated(int id)
+{
+ QString widget = m_associations[id];
+ KommanderWidget::evalAssociatedText(QString("#!kommander\n%1.execute(%2)").arg(widget).arg(id));
+}
+
+void PopupMenu::populate()
+{
+ setAssociatedText(KommanderWidget::evalAssociatedText( populationText()));
+}
+
+QString PopupMenu::insertSubmenu(const QString& title, const QString &menuWidget, int index, const QString& icon)
+{
+ KommanderWidget *w = widgetByName(menuWidget);
+ if (dynamic_cast<PopupMenu*>(w))
+ {
+ if (icon.isEmpty())
+ return QString::number(m_menu->insertItem(title, dynamic_cast<PopupMenu*>(w)->menu(), index));
+ else
+ return QString::number( m_menu->insertItem(KGlobal::iconLoader()->loadIcon(icon, KIcon::NoGroup, KIcon::SizeMedium), title, dynamic_cast<PopupMenu*>(w)->menu(), index));
+ }
+ return QString();
+}
+
+
+bool PopupMenu::isFunctionSupported(int f)
+{
+ return f == DCOP::clear || f == DCOP::execute || f == DCOP::item || (f >= INSERTMENUITEM && f <= LAST_FUNCTION) || f == DCOP::count || f == DCOP::geometry;
+}
+
+QString PopupMenu::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::clear:
+ m_menu->clear();
+ m_associations.clear();
+ break;
+ case DCOP::execute:
+ m_params = args;
+ evalAssociatedText();
+ break;
+ case INSERTMENUITEM:
+ {
+ uint index = args[2].toInt();
+ int id = -1;
+ if (args[3].isEmpty())
+ id = m_menu->insertItem(args[0], index);
+ else
+ id = m_menu->insertItem(KGlobal::iconLoader()->loadIcon(args[3], KIcon::NoGroup, KIcon::SizeMedium), args[0], index);
+ m_associations[id] = args[1];
+ return QString::number(id);
+ break;
+ }
+ case INSERTSUBMENU:
+ {
+ return insertSubmenu(args[0], args[1], args[2].toInt(), args[3]);
+ break;
+ }
+ case CHANGEMENUITEM:
+ {
+ uint id = args[0].toInt();
+ if (args[3].isEmpty())
+ m_menu->changeItem(id, args[1]);
+ else
+ m_menu->changeItem(id, KGlobal::iconLoader()->loadIcon(args[3], KIcon::NoGroup, KIcon::SizeMedium), args[1]);
+ m_associations[id] = args[2];
+ break;
+ }
+ case INSERTSEPARATOR:
+ {
+ uint index = args[0].toInt();
+ m_menu->insertSeparator(index);
+ }
+ case SETITEMENABLED:
+ {
+ uint id = args[0].toInt();
+ m_menu->setItemEnabled(id, args[1] == "true" || args[1] == "1" ? true : false);
+ break;
+ }
+ case ITEMENABLED:
+ {
+ uint id = args[0].toInt();
+ return m_menu->isItemEnabled(id) ? "1" : "0";
+ break;
+ }
+ case SETITEMVISIBLE:
+ {
+ uint id = args[0].toInt();
+ m_menu->setItemVisible(id, args[1] == "true" || args[1] == "1" ? true : false);
+ break;
+ }
+ case SETITEMCHECKED:
+ {
+ uint id = args[0].toInt();
+ m_menu->setItemChecked(id, args[1] == "true" || args[1] == "1" ? true : false);
+ break;
+ }
+ case ITEMVISIBLE:
+ {
+ uint id = args[0].toInt();
+ return m_menu->isItemVisible(id) ? "1" : "0";
+ break;
+ }
+ case ITEMCHECKED:
+ {
+ uint id = args[0].toInt();
+ return m_menu->isItemChecked(id) ? "1" : "0";
+ break;
+ }
+ case DCOP::item:
+ {
+ uint index = args[0].toInt();
+ return index < m_params.count() ? m_params[index] : QString::null;
+ break;
+ }
+ case DCOP::count:
+ return QString::number(m_menu->count());
+ break;
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+
+
+#include "popupmenu.moc"
diff --git a/kommander/widgets/popupmenu.h b/kommander/widgets/popupmenu.h
new file mode 100644
index 00000000..f2db18a6
--- /dev/null
+++ b/kommander/widgets/popupmenu.h
@@ -0,0 +1,61 @@
+//
+// C++ Interface: popupmenu
+//
+// Description:
+//
+//
+// Author: Andras Mantia <amantia@kdewebdev.org>, (C) 2008
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#ifndef POPUPMENU_H
+#define POPUPMENU_H
+
+#include <qlabel.h>
+#include <qmap.h>
+#include <kommanderwidget.h>
+
+
+class KPopupMenu;
+
+/**
+ @author Andras Mantia <amantia@kdewebdev.org>
+*/
+class PopupMenu : public QLabel, public KommanderWidget
+{
+ Q_OBJECT
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ PopupMenu(QWidget *parent = 0, const char *name = 0);
+ ~PopupMenu();
+
+ virtual bool isKommanderWidget() const;
+ virtual QString currentState() const;
+ virtual bool isFunctionSupported(int function);
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual QStringList associatedText() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+ KPopupMenu *menu() {return m_menu;}
+
+public slots:
+ virtual void setWidgetText(const QString &);
+ virtual void populate();
+ void popup(int x, int y);
+
+private slots:
+ void slotMenuItemActivated(int id);
+
+private:
+ QString insertSubmenu(const QString& title, const QString &menuWidget, int index, const QString& icon);
+
+ KPopupMenu *m_menu;
+ QMap<int, QString> m_associations;
+ QStringList m_params;
+};
+
+#endif
diff --git a/kommander/widgets/progressbar.cpp b/kommander/widgets/progressbar.cpp
new file mode 100644
index 00000000..874601f5
--- /dev/null
+++ b/kommander/widgets/progressbar.cpp
@@ -0,0 +1,144 @@
+/***************************************************************************
+ progressbar.cpp - ProgressBar widget
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* KDE INCLUDES */
+#include <klocale.h>
+
+/* QT INCLUDES */
+#include <qobject.h>
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qevent.h>
+
+/* OTHER INCLUDES */
+#include <specials.h>
+#include "progressbar.h"
+#include "kommanderplugin.h"
+
+enum Functions {
+ FirstFunction = 585,
+ PB_setHighlightColor,
+ PB_setHightlightTextColor,
+ LastFunction
+};
+
+ProgressBar::ProgressBar(QWidget *a_parent, const char *a_name)
+ : KProgress(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+ KommanderPlugin::registerFunction(PB_setHighlightColor, "setBarColor(QString widget, QString Color)", i18n("Sets the ProgresBar color"), 2);
+ KommanderPlugin::registerFunction(PB_setHightlightTextColor, "setBarTextColor(QString widget, QString Color)", i18n("Sets the ProgresBar text color"), 2);
+}
+
+ProgressBar::~ProgressBar()
+{
+}
+
+QString ProgressBar::currentState() const
+{
+ return QString("default");
+}
+
+bool ProgressBar::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList ProgressBar::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void ProgressBar::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void ProgressBar::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString ProgressBar::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void ProgressBar::populate()
+{
+ setProgress(KommanderWidget::evalAssociatedText(populationText()).toUInt());
+}
+
+void ProgressBar::showEvent(QShowEvent *e)
+{
+ QProgressBar::showEvent(e);
+ emit widgetOpened();
+}
+
+bool ProgressBar::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::clear || f == DCOP::setMaximum || f == DCOP::geometry || (f > FirstFunction && f < LastFunction);
+}
+
+QString ProgressBar::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ return QString::number(progress());
+ case DCOP::setText:
+ setProgress(args[0].toUInt());
+ break;
+ case DCOP::clear:
+ setProgress(0);
+ break;
+ case DCOP::setMaximum:
+ setTotalSteps(args[0].toUInt());
+ break;
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ case PB_setHighlightColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ QPalette p = this->palette();
+ p.setColor(QPalette::Active, QColorGroup::Highlight, color);
+ this->setPalette( p, TRUE );
+ break;
+ }
+ case PB_setHightlightTextColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ QPalette p = this->palette();
+ p.setColor(QPalette::Active, QColorGroup::HighlightedText, color);
+ this->setPalette( p, TRUE );
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+#include "progressbar.moc"
diff --git a/kommander/widgets/progressbar.h b/kommander/widgets/progressbar.h
new file mode 100644
index 00000000..b4aa3d94
--- /dev/null
+++ b/kommander/widgets/progressbar.h
@@ -0,0 +1,63 @@
+/***************************************************************************
+ progressbar.h - ProgressBar widget
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_PROGRESSBAR_H_
+#define _HAVE_PROGRESSBAR_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qstringlist.h>
+#include <qobject.h>
+#include <qstring.h>
+
+/* OTHER INCLUDES */
+#include <kprogress.h>
+#include <kommanderwidget.h>
+
+class QWidget;
+
+class QShowEvent;
+class KOMMANDER_EXPORT ProgressBar: public KProgress, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+
+public:
+ ProgressBar(QWidget *a_parent, const char *a_name);
+ ~ProgressBar();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void populate();
+signals:
+ void widgetOpened();
+protected:
+ void showEvent(QShowEvent *e);
+private:
+};
+
+#endif
diff --git a/kommander/widgets/radiobutton.cpp b/kommander/widgets/radiobutton.cpp
new file mode 100644
index 00000000..a7faa91a
--- /dev/null
+++ b/kommander/widgets/radiobutton.cpp
@@ -0,0 +1,144 @@
+/***************************************************************************
+ radiobutton.cpp - Radiobutton class
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qobject.h>
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qevent.h>
+#include <qradiobutton.h>
+
+/* OTHER INCLUDES */
+#include <specials.h>
+#include "radiobutton.h"
+
+RadioButton::RadioButton(QWidget *a_parent, const char *a_name)
+ : QRadioButton(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "unchecked";
+ states << "checked";
+ setStates(states);
+ QStringList displayStates;
+ displayStates << "checked";
+ displayStates << "unchecked";
+ setDisplayStates(displayStates);
+}
+
+RadioButton::~RadioButton()
+{
+}
+
+QString RadioButton::currentState() const
+{
+ return (isChecked() ? "checked" : "unchecked");
+}
+
+bool RadioButton::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList RadioButton::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void RadioButton::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void RadioButton::setWidgetText(const QString &a_text)
+{
+ setText(a_text);
+ emit widgetTextChanged(a_text);
+}
+
+void RadioButton::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText( a_text );
+}
+
+QString RadioButton::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void RadioButton::populate()
+{
+ QString txt = KommanderWidget::evalAssociatedText( populationText() );
+ setWidgetText( txt );
+}
+
+void RadioButton::showEvent( QShowEvent *e )
+{
+ QRadioButton::showEvent( e );
+ emit widgetOpened();
+}
+
+void RadioButton::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+bool RadioButton::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::setChecked || f == DCOP::checked || f == DCOP::geometry || f == DCOP::getBackgroundColor || f == DCOP::setBackgroundColor;
+}
+
+QString RadioButton::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ return text();
+ case DCOP::setText:
+ setWidgetText(args[0]);
+ break;
+ case DCOP::setChecked:
+ setChecked(args[0] != "false");
+ break;
+ case DCOP::checked:
+ return QString::number(isOn());
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ case DCOP::getBackgroundColor:
+ return this->paletteBackgroundColor().name();
+ break;
+ case DCOP::setBackgroundColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ this->setPaletteBackgroundColor(color);
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+
+
+#include "radiobutton.moc"
diff --git a/kommander/widgets/radiobutton.h b/kommander/widgets/radiobutton.h
new file mode 100644
index 00000000..f9fb5a16
--- /dev/null
+++ b/kommander/widgets/radiobutton.h
@@ -0,0 +1,66 @@
+/***************************************************************************
+ radiobutton.h - Radiobutton widget
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef _HAVE_RADIOBUTTON_H_
+#define _HAVE_RADIOBUTTON_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qradiobutton.h>
+#include <qobject.h>
+#include <qstringlist.h>
+#include <qstring.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+class QWidget;
+
+class QShowEvent;
+class KOMMANDER_EXPORT RadioButton : public QRadioButton, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ RadioButton(QWidget *a_parent, const char *a_name);
+ ~RadioButton();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void setWidgetText(const QString &);
+ virtual void populate();
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString &);
+ void contextMenuRequested(int xpos, int ypos);
+protected:
+ void showEvent( QShowEvent *e );
+ void contextMenuEvent( QContextMenuEvent * e );
+private:
+};
+
+#endif
diff --git a/kommander/widgets/richtexteditor.cpp b/kommander/widgets/richtexteditor.cpp
new file mode 100644
index 00000000..eea0b0d6
--- /dev/null
+++ b/kommander/widgets/richtexteditor.cpp
@@ -0,0 +1,249 @@
+/***************************************************************************
+ richtexteditor.cpp - Widget providing simple rich text editing
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+/* KDE INCLUDES */
+#include <klocale.h>
+
+/* QT INCLUDES */
+#include <qlayout.h>
+#include <qevent.h>
+#include <qtextedit.h>
+#include <qframe.h>
+#include <qwidget.h>
+#include <qlayout.h>
+#include <qtoolbutton.h>
+#include <qpixmap.h>
+#include <qhbuttongroup.h>
+#include <qfont.h>
+#include <qstringlist.h>
+#include <qevent.h>
+
+/* OTHER INCLUDES */
+#include <specials.h>
+#include "richtexteditor.h"
+
+/* Pixmaps */
+#include "pixmaps/textbold.xpm"
+#include "pixmaps/textunder.xpm"
+#include "pixmaps/textitalic.xpm"
+#include "pixmaps/textcenter.xpm"
+#include "pixmaps/textleft.xpm"
+#include "pixmaps/textright.xpm"
+
+RichTextEditor::RichTextEditor(QWidget *a_parent, const char *a_name)
+ : QWidget(a_parent, a_name), KommanderWidget((QObject *)this)
+{
+
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+
+ // setup toolbar
+ m_toolbar = new QFrame(this, "buttonBar");
+ m_toolbar->setMinimumSize(0, 32);
+ m_toolbar->setFrameShape(QFrame::NoFrame);
+ m_toolbar->setFrameShadow(QFrame::Plain);
+
+ //setup textedit
+ m_textedit = new QTextEdit(this, "editor");
+ m_textedit->setTextFormat(RichText);
+
+ // layout the widgets
+ QVBoxLayout *layout = new QVBoxLayout(this);
+ layout->addWidget(m_toolbar);
+ layout->addWidget(m_textedit);
+ layout->setSpacing(1);
+
+ // setup buttons
+ QHBoxLayout *tbLayout = new QHBoxLayout(m_toolbar);
+
+ //bold italic underline left right center link
+ m_formatGroup = new QHButtonGroup(m_toolbar, "formatGroup");
+ //m_formatGroup->setFlat(true);
+ m_alignGroup = new QHButtonGroup(m_toolbar, "alignGroup");
+ //m_alignGroup->setFlat(true);
+ m_alignGroup->setExclusive(true);
+ tbLayout->insertStretch(0);
+ tbLayout->addWidget(m_formatGroup);
+ tbLayout->addWidget(m_alignGroup);
+ tbLayout->insertStretch(3);
+
+ m_buttonTextBold = new QToolButton(m_formatGroup, "textBold");
+ m_buttonTextBold->setPixmap(QPixmap((const char **)bold_xpm));
+ m_buttonTextBold->setToggleButton(true);
+ connect(m_buttonTextBold, SIGNAL(toggled(bool)), this, SLOT(textBold(bool)));
+ m_buttonTextItalic = new QToolButton(m_formatGroup, "textItalic");
+ m_buttonTextItalic->setPixmap(QPixmap((const char **)italic_xpm));
+ m_buttonTextItalic->setToggleButton(true);
+ connect(m_buttonTextItalic, SIGNAL(toggled(bool)), this, SLOT(textItalic(bool)));
+ m_buttonTextUnder = new QToolButton(m_formatGroup, "textUnder");
+ m_buttonTextUnder->setPixmap(QPixmap((const char **)under_xpm));
+ m_buttonTextUnder->setToggleButton(true);
+ connect(m_buttonTextUnder, SIGNAL(toggled(bool)), this, SLOT(textUnder(bool)));
+
+ m_buttonTextLeft = new QToolButton(m_alignGroup, "textLeft");
+ m_buttonTextLeft->setPixmap(QPixmap((const char **)left_xpm));
+ m_buttonTextLeft->setToggleButton(true);
+ m_buttonTextCenter = new QToolButton(m_alignGroup, "textCenter");
+ m_buttonTextCenter->setPixmap(QPixmap((const char **)center_xpm));
+ m_buttonTextCenter->setToggleButton(true);
+ m_buttonTextRight = new QToolButton(m_alignGroup, "textRight");
+ m_buttonTextRight->setPixmap(QPixmap((const char **)right_xpm));
+ m_buttonTextRight->setToggleButton(true);
+
+ connect(m_alignGroup, SIGNAL(clicked(int)), this, SLOT(textAlign(int)));
+ connect(m_textedit, SIGNAL(currentFontChanged(const QFont &)), this, SLOT(fontChanged(const QFont &)));
+ connect(m_textedit, SIGNAL(currentAlignmentChanged(int)), this, SLOT(alignmentChanged(int)));
+
+ connect(m_textedit, SIGNAL(textChanged()), this, SLOT(setTextChanged()));
+
+}
+
+QString RichTextEditor::currentState() const
+{
+ return QString("default");
+}
+
+RichTextEditor::~RichTextEditor()
+{
+}
+
+bool RichTextEditor::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList RichTextEditor::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void RichTextEditor::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void RichTextEditor::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText( a_text );
+}
+
+QString RichTextEditor::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void RichTextEditor::populate()
+{
+ QString txt = KommanderWidget::evalAssociatedText( populationText() );
+ setWidgetText( txt );
+}
+
+void RichTextEditor::setWidgetText(const QString &a_text)
+{
+ m_textedit->setText(a_text);
+ emit widgetTextChanged(a_text);
+}
+
+void RichTextEditor::setTextChanged()
+{
+ emit widgetTextChanged(m_textedit->text());
+}
+
+void RichTextEditor::textBold(bool a_isOn)
+{
+ m_textedit->setBold(a_isOn);
+}
+
+void RichTextEditor::textUnder(bool a_isOn)
+{
+ m_textedit->setUnderline(a_isOn);
+}
+
+void RichTextEditor::textItalic(bool a_isOn)
+{
+ m_textedit->setItalic(a_isOn);
+}
+
+void RichTextEditor::textAlign(int a_id)
+{
+ QToolButton *b = (QToolButton *)m_alignGroup->find(a_id);
+ if(b == m_buttonTextLeft)
+ m_textedit->setAlignment(Qt::AlignLeft);
+ else if(b == m_buttonTextCenter)
+ m_textedit->setAlignment(Qt::AlignCenter);
+ else if(b == m_buttonTextRight)
+ m_textedit->setAlignment(Qt::AlignRight);
+}
+
+void RichTextEditor::fontChanged(const QFont &a_font)
+{
+ m_buttonTextBold->setOn(a_font.bold());
+ m_buttonTextItalic->setOn(a_font.italic());
+ m_buttonTextUnder->setOn(a_font.underline());
+}
+
+void RichTextEditor::alignmentChanged(int a_alignment)
+{
+ if((a_alignment == AlignAuto) || (a_alignment & AlignLeft))
+ m_buttonTextLeft->setOn(true);
+ else if(a_alignment & AlignHCenter)
+ m_buttonTextCenter->setOn(true);
+ else if(a_alignment & AlignRight)
+ m_buttonTextRight->setOn(true);
+}
+
+void RichTextEditor::showEvent( QShowEvent *e )
+{
+ QWidget::showEvent(e);
+ emit widgetOpened();
+}
+
+void RichTextEditor::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+bool RichTextEditor::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::clear || f == DCOP::selection || f == DCOP::setEditable;
+}
+
+QString RichTextEditor::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ return m_textedit->text();
+ case DCOP::setText:
+ setWidgetText(args[0]);
+ break;
+ case DCOP::selection:
+ return m_textedit->selectedText();
+ case DCOP::clear:
+ setWidgetText("");
+ break;
+ case DCOP::setEditable:
+ m_textedit->setReadOnly(args[0] == "false" || args[0] == "0");
+ break;
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+#include "richtexteditor.moc"
diff --git a/kommander/widgets/richtexteditor.h b/kommander/widgets/richtexteditor.h
new file mode 100644
index 00000000..4436d73f
--- /dev/null
+++ b/kommander/widgets/richtexteditor.h
@@ -0,0 +1,85 @@
+/***************************************************************************
+ richtexteditor.h - Widget providing simple rich texxt editing
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef _HAVE_RICHTEXTEDITOR_H_
+#define _HAVE_RICHTEXTEDITOR_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qstringlist.h>
+#include <qstring.h>
+#include <qwidget.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+
+/* Forward Decls */
+class QTextEdit;
+class QFrame;
+class QToolButton;
+class QHButtonGroup;
+
+class QShowEvent;
+class KOMMANDER_EXPORT RichTextEditor : public QWidget, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ RichTextEditor(QWidget *, const char *);
+ virtual ~RichTextEditor();
+
+ bool isKommanderWidget() const;
+ void setAssociatedText(const QStringList&);
+ QStringList associatedText() const;
+ QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ void setTextChanged();
+ void setWidgetText(const QString &);
+ void textAlign(int);
+ void textBold(bool);
+ void textUnder(bool);
+ void textItalic(bool);
+ void fontChanged(const QFont &);
+ void alignmentChanged(int);
+ virtual void populate();
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString&);
+ void contextMenuRequested(int xpos, int ypos);
+protected:
+ void showEvent( QShowEvent *e );
+ void contextMenuEvent( QContextMenuEvent * e );
+private:
+ QFrame *m_toolbar;
+ QTextEdit *m_textedit;
+
+ QToolButton *m_buttonTextBold, *m_buttonTextUnder, *m_buttonTextItalic,
+ *m_buttonTextLeft, *m_buttonTextCenter, *m_buttonTextRight;
+
+ QHButtonGroup *m_formatGroup, *m_alignGroup;
+
+};
+
+#endif
diff --git a/kommander/widgets/scriptobject.cpp b/kommander/widgets/scriptobject.cpp
new file mode 100644
index 00000000..859d87d0
--- /dev/null
+++ b/kommander/widgets/scriptobject.cpp
@@ -0,0 +1,191 @@
+/***************************************************************************
+ scriptobject.cpp - Widget for holding scripts
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+/* QT INCLUDES */
+#include <qstringlist.h>
+#include <qwidget.h>
+
+/* KDE INCLUDES */
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <klocale.h>
+
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include "scriptobject.h"
+#include <myprocess.h>
+#include <specials.h>
+
+ScriptObject::ScriptObject(QWidget *a_parent, const char *a_name)
+ : QLabel(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+ if (KommanderWidget::inEditor)
+ {
+ setPixmap(KGlobal::iconLoader()->loadIcon("shellscript", KIcon::NoGroup, KIcon::SizeMedium));
+ setFrameStyle(QFrame::Box | QFrame::Plain);
+ setLineWidth(1);
+ setFixedSize(pixmap()->size());
+ }
+ else
+ setHidden(true);
+}
+
+ScriptObject::~ScriptObject()
+{
+}
+
+QString ScriptObject::currentState() const
+{
+ return QString("default");
+}
+
+bool ScriptObject::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList ScriptObject::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void ScriptObject::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void ScriptObject::setWidgetText(const QString& a_text)
+{
+ KommanderWidget::setAssociatedText(a_text);
+}
+
+void ScriptObject::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString ScriptObject::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void ScriptObject::populate()
+{
+ setAssociatedText(KommanderWidget::evalAssociatedText(populationText()));
+}
+
+QString ScriptObject::executeProcess(bool blocking)
+{
+ int index = ( states().findIndex( currentState()) );
+ if (index == -1)
+ {
+ printError(i18n("Invalid state for associated text."));
+ return QString();
+ }
+ QString evalText = m_associatedText[index];
+
+ if ((KommanderWidget::useInternalParser && !evalText.startsWith("#!")) || evalText.startsWith("#!kommander"))
+ {
+ evalAssociatedText(evalText);
+ return global(widgetName() + "_RESULT");
+ } else
+ {
+ MyProcess process(this);
+ process.setBlocking(blocking);
+ return process.run(evalAssociatedText(evalText));
+ }
+}
+
+void ScriptObject::execute()
+{
+ m_params.clear();
+ executeProcess(true);
+}
+
+void ScriptObject::execute(const QString& s)
+{
+ m_params.clear();
+ m_params.append(s);
+ executeProcess(true);
+}
+
+void ScriptObject::execute(const QString& s1, const QString& s2)
+{
+ m_params.clear();
+ m_params.append(s1);
+ m_params.append(s2);
+ executeProcess(true);
+}
+
+void ScriptObject::execute(int i)
+{
+ m_params.clear();
+ m_params.append(QString::number(i));
+ executeProcess(true);
+}
+
+void ScriptObject::execute(int i, int j)
+{
+ m_params.clear();
+ m_params.append(QString::number(i));
+ m_params.append(QString::number(j));
+ executeProcess(true);
+}
+
+void ScriptObject::execute(bool i)
+{
+ m_params.clear();
+ m_params.append(QString::number(i));
+ executeProcess(true);
+}
+
+bool ScriptObject::isFunctionSupported(int f)
+{
+ return f == DCOP::setText || f == DCOP::clear || f == DCOP::execute || f == DCOP::item
+ || f == DCOP::count;
+}
+
+QString ScriptObject::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::setText:
+ setAssociatedText(args[0]);
+ break;
+ case DCOP::clear:
+ setAssociatedText(QString::null);
+ break;
+ case DCOP::execute:
+ m_params = args;
+ return executeProcess(true);
+ break;
+ case DCOP::item:
+ {
+ uint index = args[0].toInt();
+ return index < m_params.count() ? m_params[index] : QString::null;
+ }
+ case DCOP::count:
+ return QString::number(m_params.count());
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+#include "scriptobject.moc"
diff --git a/kommander/widgets/scriptobject.h b/kommander/widgets/scriptobject.h
new file mode 100644
index 00000000..3906d5e4
--- /dev/null
+++ b/kommander/widgets/scriptobject.h
@@ -0,0 +1,68 @@
+/***************************************************************************
+ scriptobject.h - Widget for holding scripts
+ -------------------
+ copyright : (C) 2002 Marc Britton <consume@optusnet.com.au>
+ (C) 2003-2004 Michal Rudolf <mrudolf@kdewebdev.org>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ **************************************************************************/
+#ifndef _HAVE_SCRIPTOBJECT_H_
+#define _HAVE_SCRIPTOBJECT_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qlabel.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+
+class KOMMANDER_EXPORT ScriptObject : public QLabel, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+
+public:
+ ScriptObject(QWidget *a_parent, const char *a_name);
+ ~ScriptObject();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void setWidgetText(const QString &);
+ virtual void populate();
+ virtual void execute();
+ virtual void execute(const QString&);
+ virtual void execute(const QString&, const QString&);
+ virtual void execute(int);
+ virtual void execute(int, int);
+ virtual void execute(bool);
+signals:
+ void widgetOpened();
+
+protected:
+ virtual QString executeProcess(bool blocking);
+private:
+ QStringList m_params;
+};
+
+#endif
diff --git a/kommander/widgets/slider.cpp b/kommander/widgets/slider.cpp
new file mode 100644
index 00000000..52f6d47a
--- /dev/null
+++ b/kommander/widgets/slider.cpp
@@ -0,0 +1,121 @@
+/***************************************************************************
+ slider.cpp - Slider widget
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* QT INCLUDES */
+#include <qstringlist.h>
+#include <qevent.h>
+
+/* OTHER INCLUDES */
+#include <specials.h>
+#include "slider.h"
+
+Slider::Slider(QWidget * a_parent, const char *a_name)
+ : QSlider(a_parent, a_name), KommanderWidget((QObject *) this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+}
+
+QString Slider::currentState() const
+{
+ return QString("default");
+}
+
+Slider::~Slider()
+{
+}
+
+bool Slider::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList Slider::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void Slider::setAssociatedText(const QStringList & a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void Slider::setPopulationText(const QString & a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString Slider::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void Slider::populate()
+{
+ QString txt = KommanderWidget::evalAssociatedText(populationText());
+ setWidgetText(txt);
+}
+
+void Slider::setWidgetText(const QString & a_text)
+{
+ setValue(a_text.toInt());
+}
+
+void Slider::showEvent(QShowEvent * e)
+{
+ QSlider::showEvent(e);
+ emit widgetOpened();
+}
+
+bool Slider::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::clear || f == DCOP::setMaximum || f == DCOP::getBackgroundColor || f == DCOP::setBackgroundColor;
+}
+
+QString Slider::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ return QString::number(value());
+ case DCOP::setText:
+ setValue(args[0].toInt());
+ break;
+ case DCOP::clear:
+ setValue(minValue());
+ break;
+ case DCOP::setMaximum:
+ setMaxValue(args[0].toInt());
+ break;
+ case DCOP::getBackgroundColor:
+ return this->paletteBackgroundColor().name();
+ break;
+ case DCOP::setBackgroundColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ this->setPaletteBackgroundColor(color);
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+
+#include "slider.moc"
diff --git a/kommander/widgets/slider.h b/kommander/widgets/slider.h
new file mode 100644
index 00000000..59526deb
--- /dev/null
+++ b/kommander/widgets/slider.h
@@ -0,0 +1,60 @@
+/***************************************************************************
+ slider.h - Slider widget
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_SLIDER_H_
+#define _HAVE_SLIDER_H_
+
+/* KDE INCLUDES */
+#include <qslider.h>
+
+/* QT INCLUDES */
+#include <qstringlist.h>
+#include <qstring.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+class QShowEvent;
+class KOMMANDER_EXPORT Slider: public QSlider, public KommanderWidget
+{
+ Q_OBJECT Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ Slider(QWidget*, const char*);
+ virtual ~Slider();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList &);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString &);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+
+public slots:
+ virtual void setWidgetText(const QString &);
+ virtual void populate();
+
+signals:
+ void widgetOpened();
+
+protected:
+ void showEvent(QShowEvent* e);
+};
+
+#endif
diff --git a/kommander/widgets/spinboxint.cpp b/kommander/widgets/spinboxint.cpp
new file mode 100644
index 00000000..ce013333
--- /dev/null
+++ b/kommander/widgets/spinboxint.cpp
@@ -0,0 +1,140 @@
+/***************************************************************************
+ spinboxint.cpp - Integer spinbox widget
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qobject.h>
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qevent.h>
+#include <qspinbox.h>
+
+/* OTHER INCLUDES */
+#include <specials.h>
+#include "spinboxint.h"
+
+SpinBoxInt::SpinBoxInt(QWidget *a_parent, const char *a_name)
+ : QSpinBox(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+}
+
+SpinBoxInt::~SpinBoxInt()
+{
+}
+
+QString SpinBoxInt::currentState() const
+{
+ return "default";
+}
+
+bool SpinBoxInt::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList SpinBoxInt::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void SpinBoxInt::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void SpinBoxInt::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString SpinBoxInt::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void SpinBoxInt::populate()
+{
+ setWidgetText(KommanderWidget::evalAssociatedText( populationText()));
+}
+
+void SpinBoxInt::setWidgetText(const QString &a_text)
+{
+ setValue(a_text.toInt());
+ emit widgetTextChanged(a_text);
+}
+
+void SpinBoxInt::showEvent( QShowEvent *e )
+{
+ QSpinBox::showEvent(e);
+ emit widgetOpened();
+}
+
+void SpinBoxInt::focusOutEvent( QFocusEvent * e)
+{
+ QSpinBox::focusOutEvent(e);
+ emit lostFocus();
+}
+
+void SpinBoxInt::focusInEvent( QFocusEvent * e)
+{
+ QSpinBox::focusInEvent(e);
+ emit gotFocus();
+}
+
+bool SpinBoxInt::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::setMaximum || f == DCOP::geometry|| f == DCOP::getBackgroundColor || f == DCOP::setBackgroundColor;
+}
+
+QString SpinBoxInt::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ return cleanText();
+ case DCOP::setText:
+ setWidgetText(args[0]);
+ break;
+ case DCOP::setMaximum:
+ setMaxValue(args[0].toUInt());
+ break;
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ case DCOP::getBackgroundColor:
+ return this->paletteBackgroundColor().name();
+ break;
+ case DCOP::setBackgroundColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ this->setPaletteBackgroundColor(color);
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+#include "spinboxint.moc"
diff --git a/kommander/widgets/spinboxint.h b/kommander/widgets/spinboxint.h
new file mode 100644
index 00000000..03c30b24
--- /dev/null
+++ b/kommander/widgets/spinboxint.h
@@ -0,0 +1,68 @@
+/***************************************************************************
+ spinboxint.h - Integer spinbox widget
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef _HAVE_SPINBOXINT_H_
+#define _HAVE_SPINBOXINT_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qobject.h>
+#include <qstringlist.h>
+#include <qstring.h>
+#include <qspinbox.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+class QWidget;
+
+class QShowEvent;
+class KOMMANDER_EXPORT SpinBoxInt : public QSpinBox, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ SpinBoxInt(QWidget *a_parent, const char *a_name);
+ ~SpinBoxInt();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void setWidgetText(const QString&);
+ virtual void populate();
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString&);
+ void lostFocus();
+ void gotFocus();
+protected:
+ void showEvent(QShowEvent *e);
+ void focusOutEvent( QFocusEvent* e);
+ void focusInEvent( QFocusEvent* e);
+private:
+};
+
+#endif
diff --git a/kommander/widgets/statusbar.cpp b/kommander/widgets/statusbar.cpp
new file mode 100644
index 00000000..90b23999
--- /dev/null
+++ b/kommander/widgets/statusbar.cpp
@@ -0,0 +1,131 @@
+/***************************************************************************
+ statusbar.cpp - StatusBar widget
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qobject.h>
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qevent.h>
+
+/* OTHER INCLUDES */
+#include <specials.h>
+#include "statusbar.h"
+
+StatusBar::StatusBar(QWidget *a_parent, const char *a_name)
+ : KStatusBar(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+ insertItem(QString::null, 0, 1);
+ setItemAlignment(0, Qt::AlignLeft);
+}
+
+StatusBar::~StatusBar()
+{
+}
+
+QString StatusBar::currentState() const
+{
+ return QString("default");
+}
+
+bool StatusBar::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList StatusBar::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void StatusBar::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void StatusBar::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString StatusBar::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void StatusBar::populate()
+{
+ changeItem(KommanderWidget::evalAssociatedText(populationText()), 0);
+}
+
+void StatusBar::showEvent(QShowEvent *e)
+{
+ QStatusBar::showEvent(e);
+ emit widgetOpened();
+}
+
+void StatusBar::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+bool StatusBar::isFunctionSupported(int f)
+{
+ return f == DCOP::setText || f == DCOP::insertItem || f == DCOP::removeItem || f == DCOP::clear || f == DCOP::getBackgroundColor || f == DCOP::setBackgroundColor;
+}
+
+QString StatusBar::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::setText:
+ changeItem(args[0], 0);
+ break;
+ case DCOP::insertItem:
+ if (hasItem(args[1].toInt()))
+ changeItem(args[0], args[1].toInt());
+ else
+ insertItem(args[0], args[1].toInt());
+ break;
+ case DCOP::removeItem:
+ removeItem(args[0].toInt());
+ break;
+ case DCOP::clear:
+ clear();
+ break;
+ case DCOP::getBackgroundColor:
+ return this->paletteBackgroundColor().name();
+ break;
+ case DCOP::setBackgroundColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ this->setPaletteBackgroundColor(color);
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+#include "statusbar.moc"
diff --git a/kommander/widgets/statusbar.h b/kommander/widgets/statusbar.h
new file mode 100644
index 00000000..4920abca
--- /dev/null
+++ b/kommander/widgets/statusbar.h
@@ -0,0 +1,65 @@
+/***************************************************************************
+ statusbar.h - StatusBar widget
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_STATUSBAR_H_
+#define _HAVE_STATUSBAR_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qstringlist.h>
+#include <qobject.h>
+#include <qstring.h>
+
+/* OTHER INCLUDES */
+#include <kstatusbar.h>
+#include <kommanderwidget.h>
+
+class QWidget;
+
+class QShowEvent;
+class KOMMANDER_EXPORT StatusBar : public KStatusBar, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+
+public:
+ StatusBar(QWidget *a_parent, const char *a_name);
+ ~StatusBar();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void populate();
+signals:
+ void widgetOpened();
+ void contextMenuRequested(int xpos, int ypos);
+protected:
+ void showEvent(QShowEvent *e);
+ void contextMenuEvent( QContextMenuEvent * e );
+private:
+};
+
+#endif
diff --git a/kommander/widgets/subdialog.cpp b/kommander/widgets/subdialog.cpp
new file mode 100644
index 00000000..4986d174
--- /dev/null
+++ b/kommander/widgets/subdialog.cpp
@@ -0,0 +1,146 @@
+/***************************************************************************
+ subdialog.cpp - Subdialog widget
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qobject.h>
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qevent.h>
+#include <qpushbutton.h>
+#include <qdialog.h>
+
+/* OTHER INCLUDES */
+#include <kdebug.h>
+#include <kommanderfactory.h>
+#include <kommanderwidget.h>
+#include <specials.h>
+#include "subdialog.h"
+
+SubDialog::SubDialog(QWidget *a_parent, const char *a_name)
+ : QPushButton(a_parent, a_name), KommanderWidget(this), m_dialog(0)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+
+ connect(this, SIGNAL(clicked()), this, SLOT(showDialog()));
+
+}
+
+SubDialog::~SubDialog()
+{
+}
+
+QString SubDialog::currentState() const
+{
+ return QString("default");
+}
+
+bool SubDialog::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList SubDialog::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void SubDialog::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void SubDialog::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText( a_text );
+}
+
+QString SubDialog::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void SubDialog::populate()
+{
+ QString txt = KommanderWidget::evalAssociatedText( populationText() );
+//FIXME
+}
+
+
+void SubDialog::setKmdrFile(QString a_kmdrFile)
+{
+ m_kmdrFile = a_kmdrFile;
+}
+
+QString SubDialog::kmdrFile() const
+{
+ return m_kmdrFile;
+}
+
+void SubDialog::showDialog()
+{
+ delete m_dialog;
+
+ KommanderFactory::loadPlugins();
+ m_dialog = (QDialog *)KommanderFactory::create(kmdrFile());
+ if(!m_dialog)
+ {
+ kdWarning() << "Creation of sub dialog failed .." << endl;
+ connect(m_dialog, SIGNAL(finished()), this, SLOT(slotFinished()));
+
+ m_dialog->exec();
+ }
+}
+
+void SubDialog::slotFinished()
+{
+ if(m_dialog)
+ {
+ KommanderWidget *atw = dynamic_cast<KommanderWidget *>(m_dialog);
+ if(atw)
+ emit widgetTextChanged(atw->evalAssociatedText());
+ }
+}
+
+void SubDialog::showEvent( QShowEvent *e )
+{
+ QPushButton::showEvent( e );
+ emit widgetOpened();
+}
+
+QString SubDialog::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ {
+ if (!m_dialog)
+ return QString();
+ KommanderWidget *atw = dynamic_cast<KommanderWidget *>(m_dialog);
+ if(atw)
+ return atw->evalAssociatedText();
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+
+#include "subdialog.moc"
diff --git a/kommander/widgets/subdialog.h b/kommander/widgets/subdialog.h
new file mode 100644
index 00000000..ad19fec5
--- /dev/null
+++ b/kommander/widgets/subdialog.h
@@ -0,0 +1,70 @@
+/***************************************************************************
+ subdialog.h - Subdialog widget
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef _HAVE_SUBDIALOG_H_
+#define _HAVE_SUBDIALOG_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qpushbutton.h>
+#include <qobject.h>
+#include <qstring.h>
+#include <qstringlist.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+class QWidget;
+class QDialog;
+
+class QShowEvent;
+class KOMMANDER_EXPORT SubDialog : public QPushButton, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QString kmdrFile READ kmdrFile WRITE setKmdrFile)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ SubDialog(QWidget *a_parent, const char *a_name);
+ ~SubDialog();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+ QString kmdrFile() const;
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+public slots:
+ void setKmdrFile(QString);
+ virtual void showDialog();
+ virtual void slotFinished();
+ virtual void populate();
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString &);
+protected:
+ QDialog *m_dialog;
+ QString m_kmdrFile;
+ void showEvent( QShowEvent *e );
+private:
+};
+
+#endif
diff --git a/kommander/widgets/table.cpp b/kommander/widgets/table.cpp
new file mode 100644
index 00000000..358b548b
--- /dev/null
+++ b/kommander/widgets/table.cpp
@@ -0,0 +1,373 @@
+/***************************************************************************
+ table.cpp - Table widget
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+/* KDE INCLUDES */
+#include <klocale.h>
+#include <kglobal.h>
+#include <kmessagebox.h>
+
+/* QT INCLUDES */
+#include <qmetaobject.h>
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qpoint.h>
+
+/* OTHER INCLUDES */
+#include "kommanderplugin.h"
+#include "specials.h"
+#include "table.h"
+
+enum Functions {
+ FirstFunction = 365,
+ TBL_sortColumnExtra,
+ TBL_keepCellVisible,
+ TBL_selectCells,
+ TBL_selectRow,
+ TBL_selectColumn,
+ TBL_setColumnReadOnly,
+ TBL_setRowReadOnly,
+ TBL_rowCount,
+ TBL_colHeader,
+ TBL_rowHeader,
+ LastFunction
+};
+
+
+Table::Table(QWidget *a_parent, const char *a_name)
+ : QTable(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+ KommanderPlugin::registerFunction(TBL_sortColumnExtra, "sortColumnExtra(QString widget, int col, bool ascending, bool wholeRows)", i18n("Sets a column to sort ascending or descending. Optionally can sort with rows intact for database use."), 2, 4);
+ KommanderPlugin::registerFunction(TBL_keepCellVisible, "keepCellVisible(QString widget, int row, int col)", i18n("Scrolls the table so the cell indicated is visible."), 3);
+ KommanderPlugin::registerFunction(TBL_selectCells, "selectCells(QString widget, int row, int col, int row, int col)", i18n("Select cells using the upper left and lower right cell addresses<br /><b>Not guaranteed to have KDE4 compatiblility</b>"), 5);
+ KommanderPlugin::registerFunction(TBL_selectRow, "selectRow(QString widget, int row)", i18n("Select the row with the zero based index."), 2);
+ KommanderPlugin::registerFunction(TBL_selectColumn, "selectColumn(QString widget, int col)", i18n("Select the column with the zero based index.<br /><b>Not guaranteed to have KDE4 compatiblility</b>"), 2);
+ KommanderPlugin::registerFunction(TBL_setColumnReadOnly, "setColumnReadOnly(QString widget, int col, bool Readonly)", i18n("Set the column read only using zero based index.<br /><b>Not guaranteed to have KDE4 compatiblility</b>"), 3);
+ KommanderPlugin::registerFunction(TBL_setRowReadOnly, "setRowReadOnly(QString widget, int row, bool Readonly)", i18n("Set the row read only using zero based index.<br /><b>Not guaranteed to have KDE4 compatiblility</b>"), 3);
+ KommanderPlugin::registerFunction(TBL_rowCount, "rowCount(QString widget)", i18n("Returns the number of rows of the table"), 1);
+ KommanderPlugin::registerFunction(TBL_colHeader, "columnHeader(QString widget, int Column)", i18n("Returns the text of the header for the column index"), 2);
+ KommanderPlugin::registerFunction(TBL_rowHeader, "rowHeader(QString widget, int Row)", i18n("Returns the text of the header for the row index"), 2);
+
+}
+
+Table::~Table()
+{
+}
+
+QString Table::currentState() const
+{
+ return QString("default");
+}
+
+bool Table::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList Table::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void Table::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void Table::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString Table::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void Table::populate()
+{
+ setWidgetText(KommanderWidget::evalAssociatedText( populationText()));
+}
+
+void Table::setWidgetText(const QString&)
+{
+}
+
+QString Table::selectedArea()
+{
+ QTableSelection sel = selection(currentSelection());
+ return QString("%1,%2,%3,%4").arg(sel.topRow()).arg(sel.leftCol()).arg(sel.bottomRow()).arg(sel.rightCol());
+}
+
+
+bool Table::isFunctionSupported(int f)
+{
+ return f == DCOP::currentColumn || f == DCOP::currentRow || f == DCOP::insertColumn ||
+ f == DCOP::insertRow || f == DCOP::cellText || f == DCOP::setCellText || f == DCOP::setCellWidget || f == DCOP::cellWidget || f == DCOP::columnCount ||
+ f == DCOP::removeRow || f == DCOP::removeColumn || f == DCOP::setColumnCaption ||
+ f == DCOP::setRowCaption || f == DCOP::text || f == DCOP::setText || f == DCOP::selection || f == DCOP::geometry || f == DCOP::hasFocus || f == DCOP::getBackgroundColor || f == DCOP::setBackgroundColor || (f >= FirstFunction && f <= LastFunction);
+}
+
+void Table::setCellWidget(int row, int col, const QString & _widgetName)
+{
+ KommanderWidget *w = widgetByName(_widgetName);
+ if (w)
+ {
+ QWidget *widget = static_cast<QWidget*>(w->object());
+ if (QTable::cellWidget(row, col) != widget)
+ {
+ setCurrentCell(-1, -1); //hack to not delete the cellwidget after clicking away to another cell.
+//I don't know why it does so, but without this on a click to another cell calls endEdit, which calls
+//clearCellWidget, all this before the currentChanged signal is emitted.
+//this hack does ugly things once table starts scrolling - let's try to minize damage
+//we should have a way to test doe cellWidget looses focus and send it right or down too
+ QTable::ensureCellVisible(row, col);
+ clearCellWidget(row, col);
+ QTable::setCellWidget(row, col, widget);
+ }
+ } else
+ clearCellWidget(row, col);
+}
+
+QString Table::cellWidget(int row, int col)
+{
+
+ QWidget *widget = QTable::cellWidget(row, col);
+ if (widget)
+ {
+ KommanderWidget *w = widgetByName(widget->name());
+ if (w)
+ return widget->name();
+ }
+ return QString();
+}
+
+void Table::setCellText(int row, int col, const QString& text)
+{
+ QWidget *widget = QTable::cellWidget(row, col);
+ if (widget)
+ {
+ KommanderWidget *w = widgetByName(widget->name());
+ if (w)
+ widget->reparent(parentDialog(), QPoint(0,0));
+ }
+ setText(row, col, text);
+ endEdit(row, col, false, false);
+}
+
+void Table::clearCellWidget(int row, int col)
+{
+ QTable::clearCellWidget(row, col); //just for debugging
+}
+
+void Table::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+void Table::columnClicked(int col)
+{
+ emit columnHeaderClicked(col);
+ static bool ascending = TRUE;
+ if (!sorting()) return;
+ ascending=!ascending;
+ sortColumn( col, ascending, TRUE);
+}
+
+QString Table::handleDCOP(int function, const QStringList& args)
+{
+ switch (function)
+ {
+ case DCOP::cellText:
+ return text(args[0].toInt(), args[1].toInt());
+ case DCOP::setCellText:
+ if (numRows() >= args[0].toInt() && numCols() >+ args[1].toInt())
+ setCellText(args[0].toInt(), args[1].toInt(), args[2]);
+ break;
+ case DCOP::setCellWidget:
+ if (numRows() >= args[0].toInt() && numCols() >+ args[1].toInt())
+ setCellWidget(args[0].toInt(), args[1].toInt(), args[2]);
+ break;
+ case DCOP::cellWidget:
+ return cellWidget(args[0].toInt(), args[1].toInt());
+ break;
+ case DCOP::insertRow:
+ insertRows(args[0].toInt(), args.count() == 1 ? 1 : args[1].toInt());
+ break;
+ case DCOP::insertColumn:
+ insertColumns(args[0].toInt(), args.count() == 1 ? 1 : args[1].toInt());
+ break;
+ case DCOP::currentColumn:
+ return QString::number(currentColumn());
+ case DCOP::currentRow:
+ return QString::number(currentRow());
+ case DCOP::columnCount:
+ return QString::number(numCols());
+ break;
+ case DCOP::removeColumn:
+ if (numCols() >= args[0].toInt())
+ {
+ if (!args[1].toInt())
+ removeColumn(args[0].toInt());
+ else
+ {
+ int column = args[0].toInt();
+ int lines = args[1].toInt();
+ for (int i = 0; i < lines; i++)
+ removeColumn(column);
+ }
+ break;
+ }
+ case TBL_rowCount:
+ return QString::number(numRows());
+ break;
+ case DCOP::removeRow:
+ {
+ int row = args[0].toInt();
+ int lines = args[1].toInt();
+ for (int i = 0; i < lines; i++)
+ removeRow(row);
+ break;
+ }
+ case DCOP::setColumnCaption:
+ if (numCols() >= args[0].toInt())
+ horizontalHeader()->setLabel(args[0].toInt(), args[1]);
+ break;
+ case DCOP::setRowCaption:
+ if (numRows() >= args[0].toInt())
+ verticalHeader()->setLabel(args[0].toInt(), args[1]);
+ break;
+ case DCOP::text:
+ {
+ QString rows;
+ for (int r = 0; r < numRows(); r++)
+ {
+ QString row;
+ for (int c = 0; c < numCols(); c++)
+ {
+ if (c)
+ row += '\t';
+ row += text(r,c);
+ }
+ if (r)
+ rows += '\n';
+ rows += row;
+ }
+ return rows;
+ }
+ case DCOP::setText:
+ {
+ int r = 0, c = 0;
+ setNumCols(0);
+ setNumRows(0);
+ QStringList rows;
+ QStringList row;
+ rows = QStringList::split("\n", args[0], true);
+ setNumRows(rows.count());
+ for (QStringList::Iterator it = rows.begin(); it != rows.end(); ++it, ++r)
+ {
+ row = QStringList::split("\t", *it, true);
+ if (!r)
+ setNumCols(row.count());
+ c = 0;
+ for (QStringList::Iterator itr = row.begin(); itr != row.end(); ++itr, ++c)
+ setText(r, c, *itr);
+ }
+ break;
+ }
+ case DCOP::selection:
+ return selectedArea();
+ break;
+ case DCOP::getBackgroundColor:
+ return this->paletteBackgroundColor().name();
+ break;
+ case DCOP::setBackgroundColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ this->setPaletteBackgroundColor(color);
+ break;
+ }
+ case TBL_sortColumnExtra:
+ if (numCols() >= args[0].toInt())
+ QTable::sortColumn(args[0].toInt(), args[1].toInt(), args[2].toInt());
+ break;
+ case TBL_keepCellVisible:
+ if (numRows() >= args[0].toInt() && numCols() >+ args[1].toInt())
+ QTable::ensureCellVisible(args[0].toInt()-1, args[1].toInt()-1);
+ break;
+ case TBL_selectCells:
+ if (numRows() >= args[0].toInt() && numCols() >+ args[1].toInt() && numRows() >= args[2].toInt() && numCols() >+ args[3].toInt())
+ QTable::selectCells (args[0].toInt(), args[1].toInt(), args[2].toInt(), args[3].toInt());
+ break;
+ case TBL_selectRow:
+ if (numRows() >= args[0].toInt())
+ QTable::selectRow (args[0].toInt());
+ break;
+ case TBL_selectColumn:
+ if (numCols() >= args[0].toInt())
+ QTable::selectColumn (args[0].toInt());
+ break;
+ case TBL_setColumnReadOnly:
+ if (numCols() >= args[0].toInt())
+ QTable::setColumnReadOnly (args[0].toInt(), args[1].toUInt());
+ break;
+ case TBL_setRowReadOnly:
+ if (numRows() >= args[0].toInt())
+ QTable::setRowReadOnly (args[0].toInt(), args[1].toUInt());
+ break;
+ case TBL_colHeader:
+ {
+ QHeader* hdr = QTable::horizontalHeader();
+ if (numCols() >= args[0].toInt())
+ return hdr->label(args[0].toInt());
+ else
+ return "No column at index "+args[0];
+ break;
+ }
+ case TBL_rowHeader:
+ {
+ QHeader* hdr = QTable::verticalHeader();
+ if (numRows() >= args[0].toInt())
+ return hdr->label(args[0].toInt());
+ else
+ return "No row at index "+args[0];
+ break;
+ }
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ case DCOP::hasFocus:
+ return QString::number(this->hasFocus());
+ break;
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+#include "table.moc"
+
diff --git a/kommander/widgets/table.h b/kommander/widgets/table.h
new file mode 100644
index 00000000..26ed3b36
--- /dev/null
+++ b/kommander/widgets/table.h
@@ -0,0 +1,73 @@
+/***************************************************************************
+ table.h - Table widget
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+#ifndef _HAVE_TABLE_H_
+#define _HAVE_TABLE_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qtable.h>
+#include <qobject.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+
+class QWidget;
+
+class KOMMANDER_EXPORT Table : public QTable, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_OVERRIDE(bool readOnly DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+
+ public:
+ Table(QWidget *a_parent, const char *a_name);
+ ~Table();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+ virtual void clearCellWidget(int row, int col);
+ virtual void columnClicked(int col);
+ public slots:
+ virtual void populate();
+ virtual void setWidgetText(const QString &);
+ //void adjustColumn(int col);
+ signals:
+ void contextMenuRequested(int xpos, int ypos);
+ void columnHeaderClicked(int col);
+ protected:
+ void contextMenuEvent( QContextMenuEvent * e );
+ private:
+ QString selectedArea();
+ QString cellWidget(int row, int col);
+ void setCellWidget(int row, int col, const QString &widgetName);
+ void setCellText(int row, int col, const QString &text);
+};
+
+#endif
+
diff --git a/kommander/widgets/tabwidget.cpp b/kommander/widgets/tabwidget.cpp
new file mode 100644
index 00000000..ec0a02cf
--- /dev/null
+++ b/kommander/widgets/tabwidget.cpp
@@ -0,0 +1,194 @@
+/***************************************************************************
+ tabwidget.cpp - Widget with tabs
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+/* KDE INCLUDES */
+#include <klocale.h>
+#include <kiconloader.h>
+
+/* QT INCLUDES */
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qevent.h>
+#include <qtabwidget.h>
+#include <qtabbar.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include "kommanderplugin.h"
+#include <specials.h>
+#include "tabwidget.h"
+
+enum Functions {
+ FirstFunction = 357,
+ TAB_setTabIcon,
+ TAB_tabLabel,
+ TAB_isTabEnabled,
+ TAB_setTabEnabled,
+ TAB_showTabBar,
+ TAB_setCurrentPage,
+ TAB_setTabLabel,
+ LastFunction
+};
+
+TabWidget::TabWidget(QWidget *a_parent, const char *a_name, int a_flags)
+ : QTabWidget(a_parent, a_name, a_flags), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+ KommanderPlugin::registerFunction(TAB_setTabIcon, "setTabIcon(QString widget, int Tab, QString Icon)", i18n("Sets an icon on the specified tab. Index is zero based."), 3);
+ KommanderPlugin::registerFunction(TAB_tabLabel, "tabLabel(QString widget, int Tab)", i18n("Returns the tab label at the given index. Index is zero based."), 2);
+ KommanderPlugin::registerFunction(TAB_isTabEnabled, "isTabEnabled(QString widget, int Tab)", i18n("Returns true if tab at specified index is enabled, otherwise returns false."), 2);
+ KommanderPlugin::registerFunction(TAB_setTabEnabled, "setTabEnabled(QString widget, int Tab, bool Enabled)", i18n("Sets the tab at the given index to enabled or disabled."), 3);
+ KommanderPlugin::registerFunction(TAB_showTabBar, "showTabBar(QString widget, bool Show)", i18n("Show or hide the tabs on the tab widget."), 2);
+ KommanderPlugin::registerFunction(TAB_setCurrentPage, "setCurrentPage(QString widget, QString Page)", i18n("Set the current page by name."), 2);
+ KommanderPlugin::registerFunction(TAB_setTabLabel, "setTabLabel(QString widget, int Tab, QString Text)", i18n("Sets the tab tab label."), 3);
+}
+
+TabWidget::~TabWidget()
+{
+}
+
+QString TabWidget::currentState() const
+{
+ return QString("default");
+}
+
+bool TabWidget::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList TabWidget::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void TabWidget::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void TabWidget::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText( a_text );
+}
+
+QString TabWidget::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void TabWidget::populate()
+{
+}
+
+void TabWidget::showEvent(QShowEvent* e)
+{
+ QTabWidget::showEvent(e);
+ emit widgetOpened();
+}
+
+void TabWidget::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+bool TabWidget::isFunctionSupported(int f)
+{
+ return f == DCOP::currentItem || f == DCOP::setCurrentItem || f == DCOP::insertTab || (f >= FirstFunction && f <= LastFunction) ;
+}
+
+QString TabWidget::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::currentItem:
+ return QString::number(currentPageIndex());
+ case DCOP::setCurrentItem:
+ setCurrentPage(args[0].toUInt());
+ break;
+ case DCOP::insertTab:
+ insertTab(0L, args[0], args[1].toUInt());
+ break;
+ case TAB_tabLabel:
+ {
+ QString s = this->label(args[0].toInt());
+ return s.remove("&");
+ break;
+ }
+ case TAB_setTabIcon:
+ {
+ QWidget *w = page(args[0].toInt());
+ setTabIconSet(w, KGlobal::iconLoader()->loadIcon(args[1], KIcon::NoGroup, KIcon::SizeMedium));
+ break;
+ }
+ case TAB_isTabEnabled:
+ {
+ QWidget *w = page(args[0].toInt());
+ return QString::number(this->isTabEnabled(w));
+ break;
+ }
+ case TAB_setTabLabel:
+ {
+ QWidget *w = page(args[0].toInt());
+ setTabLabel(w, args[1]);
+ break;
+ }
+ case TAB_setTabEnabled:
+ {
+ QWidget *w = page(args[0].toInt());
+ this->setTabEnabled(w, args[1].toInt());
+ break;
+ }
+ case TAB_setCurrentPage:
+ {
+ int cnt = this->count();
+ int i = 0;
+ bool found = false;
+ while (i < cnt) {
+ QString s = this->label(i);
+ if (s.remove("&") == args[0])
+ {
+ setCurrentPage(i);
+ found = true;
+ break;
+ }
+ i++;
+ }
+ return QString::number(found);
+ break;
+ }
+ case TAB_showTabBar:
+ {
+ QTabBar *t = this->tabBar();
+ if (args[0].toInt() == 1)
+ t->show();
+ else
+ t->hide();
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+#include "tabwidget.moc"
diff --git a/kommander/widgets/tabwidget.h b/kommander/widgets/tabwidget.h
new file mode 100644
index 00000000..48f19232
--- /dev/null
+++ b/kommander/widgets/tabwidget.h
@@ -0,0 +1,60 @@
+/***************************************************************************
+ tabwidget.h - Widget with tabs
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef _HAVE_TABWIDGET_H_
+#define _HAVE_TABWIDGET_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qtabwidget.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+class QShowEvent;
+class KOMMANDER_EXPORT TabWidget : public QTabWidget, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ TabWidget(QWidget *, const char *, int=0);
+ ~TabWidget();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+
+public slots:
+ virtual void populate();
+signals:
+ void widgetOpened();
+ void contextMenuRequested(int xpos, int ypos);
+protected:
+ void showEvent(QShowEvent *e);
+ void contextMenuEvent( QContextMenuEvent * e );
+private:
+};
+
+#endif
diff --git a/kommander/widgets/textbrowser.cpp b/kommander/widgets/textbrowser.cpp
new file mode 100644
index 00000000..324bc62c
--- /dev/null
+++ b/kommander/widgets/textbrowser.cpp
@@ -0,0 +1,139 @@
+/***************************************************************************
+ textedit.cpp - Rich text viewing widget with links
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* KDE INCLUDES */
+#include <klocale.h>
+
+/* QT INCLUDES */
+#include <qstringlist.h>
+#include <qevent.h>
+#include <qstring.h>
+
+/* OTHER INCLUDES */
+#include "kommanderplugin.h"
+#include <specials.h>
+#include "textbrowser.h"
+
+enum Functions {
+ FirstFunction = 420,
+ TBR_setNotifyClick,
+ TBR_isNotifyClick,
+ LastFunction
+};
+
+TextBrowser::TextBrowser(QWidget * a_parent, const char *a_name)
+ : KTextBrowser(a_parent, a_name), KommanderWidget((QObject *) this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+ KommanderPlugin::registerFunction(TBR_setNotifyClick, "setNotifyClick(QString widget, bool Set)",i18n("Set notify click to intercept clicks and handle links"), 2, 2);
+ KommanderPlugin::registerFunction(TBR_isNotifyClick, "isNotifyClick(QString widget)",i18n("Set notify click to intercept clicks and handle links"), 1);
+}
+
+QString TextBrowser::currentState() const
+{
+ return QString("default");
+}
+
+TextBrowser::~TextBrowser()
+{
+}
+
+bool TextBrowser::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList TextBrowser::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void TextBrowser::setAssociatedText(const QStringList & a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void TextBrowser::setPopulationText(const QString & a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString TextBrowser::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void TextBrowser::populate()
+{
+ QString txt = KommanderWidget::evalAssociatedText(populationText());
+ setWidgetText(txt);
+}
+
+void TextBrowser::setWidgetText(const QString & a_text)
+{
+ setText(a_text);
+}
+
+void TextBrowser::showEvent(QShowEvent * e)
+{
+ QTextBrowser::showEvent(e);
+ emit widgetOpened();
+}
+
+void TextBrowser::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+
+bool TextBrowser::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::selection || f == DCOP::clear || (f >= FirstFunction && f <= LastFunction);
+}
+
+QString TextBrowser::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ return text();
+ case DCOP::setText:
+ setText(args[0]);
+ break;
+ case DCOP::selection:
+ return selectedText();
+ case TBR_setNotifyClick:
+ KTextBrowser::setNotifyClick(args[0]);
+ break;
+ case TBR_isNotifyClick:
+ return QString::number(KTextBrowser::isNotifyClick());
+ break;
+ case DCOP::clear:
+ clear();
+ break;
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+
+#include "textbrowser.moc"
diff --git a/kommander/widgets/textbrowser.h b/kommander/widgets/textbrowser.h
new file mode 100644
index 00000000..f34e374e
--- /dev/null
+++ b/kommander/widgets/textbrowser.h
@@ -0,0 +1,63 @@
+/***************************************************************************
+ textedit.h - Rich text viewing widget with links
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_TEXTBROWSER_H_
+#define _HAVE_TEXTBROWSER_H_
+
+/* KDE INCLUDES */
+#include <ktextbrowser.h>
+
+/* QT INCLUDES */
+#include <qstringlist.h>
+#include <qstring.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+
+class QShowEvent;
+class KOMMANDER_EXPORT TextBrowser: public KTextBrowser, public KommanderWidget
+{
+ Q_OBJECT
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ TextBrowser(QWidget*, const char*);
+ virtual ~TextBrowser();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList &);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString &);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+
+public slots:
+ virtual void setWidgetText(const QString &);
+ virtual void populate();
+
+signals:
+ void widgetOpened();
+ void contextMenuRequested(int xpos, int ypos);
+
+protected:
+ void showEvent(QShowEvent* e);
+ void contextMenuEvent( QContextMenuEvent * e );
+};
+
+#endif
diff --git a/kommander/widgets/textedit.cpp b/kommander/widgets/textedit.cpp
new file mode 100644
index 00000000..b59e0513
--- /dev/null
+++ b/kommander/widgets/textedit.cpp
@@ -0,0 +1,229 @@
+/***************************************************************************
+ textedit.cpp - Rich text editing widget
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* QT INCLUDES */
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qstringlist.h>
+#include <qevent.h>
+
+/* OTHER INCLUDES */
+#include <specials.h>
+#include "textedit.h"
+#include <klocale.h>
+#include <kommanderplugin.h>
+
+enum Functions {
+ FirstFunction = 450, //CHANGE THIS NUMBER TO AN UNIQUE ONE!!!
+ TE_setModified,
+ TE_selectText,
+ TE_paragraphs,
+ TE_length,
+// TE_getCursorPosition,
+ TE_paragraphLength,
+ TE_linesOfParagraph,
+ TE_findText,
+ TE_VAsuperScript,
+ TE_VAnormalScript,
+ LastFunction
+};
+
+TextEdit::TextEdit(QWidget * a_parent, const char *a_name):KTextEdit(a_parent, a_name),
+KommanderWidget((QObject *) this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+
+ connect(this, SIGNAL(textChanged()), this, SLOT(setTextChanged()));
+
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+ KommanderPlugin::registerFunction(TE_setModified, "setModified(QString widget, bool Modified)", i18n("Set widget modified status."), 1);
+ KommanderPlugin::registerFunction(TE_selectText, "selectText(QString widget, int paraFrom, int indexFrom, int paraTo, int indexTo)", i18n("Select a block of text using the paragraph number and character index of the line. You can use the cursorPositionChanged(int, int) signal to get this data in real time into a script."), 5);
+ KommanderPlugin::registerFunction(TE_findText, "findText(QString widget, QString Text, bool Case-Sensitive, bool Forward)", i18n("Search for text from the cursor or a specified position. You can specifiy case sensitive search and forward or backward."), 5);
+// KommanderPlugin::registerFunction(TE_findText, "findText(QString widget, QString Text, bool Case-Sensitive, bool Forward, int Paragraph, int Index)", i18n("Search for text from the cursor or a specified position. You can specifiy case sensitive search and forward or backward."), 5, 7);
+ KommanderPlugin::registerFunction(TE_paragraphs, "paragraphs(QString widget)", i18n("Get the number of paragraphs in the widget."), 1);
+ KommanderPlugin::registerFunction(TE_length, "length(QString widget)", i18n("Get the total length of all text."), 1);
+// KommanderPlugin::registerFunction(TE_getCursorPosition, "getCursorPosition(QString widget)", i18n("Get the cursor postion in the form of paragraph and postion integers."), 1);
+ KommanderPlugin::registerFunction(TE_paragraphLength, "paragraphLength(QString widget, int Paragraph)", i18n("Get the length of the paragraph."), 2);
+ KommanderPlugin::registerFunction(TE_linesOfParagraph, "linesOfParagraph(QString widget, int Paragraph)", i18n("Get the number of lines in the paragraph."), 2);
+ KommanderPlugin::registerFunction(TE_VAsuperScript, "setSuperScript(QString widget)", i18n("Use to set superscript."), 1);
+ KommanderPlugin::registerFunction(TE_VAnormalScript, "setNormalScript(QString widget)", i18n("Use to revert from superscript to normal script."), 1);
+}
+
+QString TextEdit::currentState() const
+{
+ return QString("default");
+}
+
+TextEdit::~TextEdit()
+{
+}
+
+bool TextEdit::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList TextEdit::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void TextEdit::setAssociatedText(const QStringList & a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void TextEdit::setPopulationText(const QString & a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString TextEdit::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void TextEdit::populate()
+{
+ setWidgetText(KommanderWidget::evalAssociatedText(populationText()));
+}
+
+void TextEdit::setWidgetText(const QString & a_text)
+{
+ setText(a_text);
+ emit widgetTextChanged(text());
+}
+
+void TextEdit::setTextChanged()
+{
+ emit widgetTextChanged(text());
+}
+
+void TextEdit::focusOutEvent( QFocusEvent * e)
+{
+ QTextEdit::focusOutEvent(e);
+ emit lostFocus();
+}
+
+void TextEdit::focusInEvent( QFocusEvent * e)
+{
+ QTextEdit::focusInEvent(e);
+ emit gotFocus();
+}
+
+void TextEdit::showEvent(QShowEvent * e)
+{
+ QTextEdit::showEvent(e);
+ emit widgetOpened();
+}
+
+void TextEdit::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+bool TextEdit::isFunctionSupported(int f)
+{
+ return f == DCOP::text || f == DCOP::setText || f == DCOP::selection || f == DCOP::setSelection || f == DCOP::clear || f == DCOP::setEditable || f == DCOP::geometry || f == DCOP::hasFocus || f == DCOP::getBackgroundColor || f == DCOP::setBackgroundColor || f == DCOP::isModified || (f >= FirstFunction && f <= LastFunction);
+}
+
+QString TextEdit::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::text:
+ return text();
+ case DCOP::setText:
+ setWidgetText(args[0]);
+ break;
+ case DCOP::selection:
+ return selectedText();
+ case DCOP::setSelection:
+ insert(args[0]);
+ break;
+ case DCOP::clear:
+ setWidgetText(QString());
+ break;
+ case DCOP::setEditable:
+ setReadOnly(args[0] == "false" || args[0] == "0");
+ break;
+ case DCOP::getBackgroundColor:
+ return this->paletteBackgroundColor().name();
+ break;
+ case DCOP::setBackgroundColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ this->setPaletteBackgroundColor(color);
+ break;
+ }
+ case DCOP::isModified:
+ return isModified() ? "1" : "0";
+ break;
+ case TE_setModified:
+ this->setModified(args[0].toInt());
+ break;
+ case TE_selectText:
+ QTextEdit::setSelection(args[0].toInt(), args[1].toInt(), args[2].toInt(), args[3].toInt());
+ break;
+ case TE_length:
+ return QString::number(QTextEdit::length() );
+ break;
+ /*case TE_getCursorPosition:
+ return QString::number(QTextEdit::getCursorPosition() );
+ break;*/
+ case TE_paragraphLength:
+ return QString::number(QTextEdit::paragraphLength(args[0].toInt() ) );
+ break;
+ case TE_linesOfParagraph:
+ return QString::number(QTextEdit::linesOfParagraph(args[0].toInt() ) );
+ break;
+ case TE_findText:
+ {
+// int para = args[3].toInt();
+// int idx = args[4].toInt();
+// return QString::number(QTextEdit::find(args[0], args[1].toUInt(), false, args[2].toUInt(), para, idx ));
+ return QString::number(QTextEdit::find(args[0], args[1].toUInt(), false ));
+ break;
+ }
+ case TE_VAsuperScript:
+ break;
+ QTextEdit::setVerticalAlignment(AlignSuperScript);
+ case TE_VAnormalScript:
+ QTextEdit::setVerticalAlignment(AlignNormal);
+ break;
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ case DCOP::hasFocus:
+ return QString::number(this->hasFocus());
+ break;
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+
+#include "textedit.moc"
diff --git a/kommander/widgets/textedit.h b/kommander/widgets/textedit.h
new file mode 100644
index 00000000..7f842343
--- /dev/null
+++ b/kommander/widgets/textedit.h
@@ -0,0 +1,70 @@
+/***************************************************************************
+ textedit.h - Rich text editing widget
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_TEXTEDIT_H_
+#define _HAVE_TEXTEDIT_H_
+
+/* KDE INCLUDES */
+#include <ktextedit.h>
+
+/* QT INCLUDES */
+#include <qstringlist.h>
+#include <qstring.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+
+class QShowEvent;
+class KOMMANDER_EXPORT TextEdit: public KTextEdit, public KommanderWidget
+{
+ Q_OBJECT Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ TextEdit(QWidget *, const char *);
+ virtual ~TextEdit();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList &);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString &);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+
+public slots:
+ virtual void setTextChanged();
+ virtual void setWidgetText(const QString &);
+ virtual void populate();
+
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString&);
+ void contextMenuRequested(int xpos, int ypos);
+ void lostFocus();
+ void gotFocus();
+
+protected:
+ void showEvent(QShowEvent* e);
+ void contextMenuEvent( QContextMenuEvent * e );
+ void focusOutEvent( QFocusEvent* e);
+ void focusInEvent( QFocusEvent* e);
+};
+
+#endif
diff --git a/kommander/widgets/timer.cpp b/kommander/widgets/timer.cpp
new file mode 100644
index 00000000..9aff1560
--- /dev/null
+++ b/kommander/widgets/timer.cpp
@@ -0,0 +1,189 @@
+/***************************************************************************
+ timer.cpp - Widget for running scripts periodically
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+/* QT INCLUDES */
+#include <qstringlist.h>
+#include <qtimer.h>
+#include <qwidget.h>
+
+/* KDE INCLUDES */
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <klocale.h>
+
+
+/* OTHER INCLUDES */
+#include <myprocess.h>
+#include <specials.h>
+#include "timer.h"
+#include "kommanderplugin.h"
+#include "specials.h"
+
+
+enum Functions {
+ FirstFunction = 179,
+ SetInterval,
+ LastFunction
+};
+
+Timer::Timer(QWidget *a_parent, const char *a_name)
+ : QLabel(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+ if (KommanderWidget::inEditor)
+ {
+ setPixmap(KGlobal::iconLoader()->loadIcon("kalarm", KIcon::NoGroup, KIcon::SizeMedium));
+ setFrameStyle(QFrame::Box | QFrame::Plain);
+ setLineWidth(1);
+ setFixedSize(pixmap()->size());
+ }
+ else
+ setHidden(true);
+
+ mTimer = new QTimer(this);
+ setInterval(5000);
+ setSingleShot(false);
+ connect(mTimer, SIGNAL(timeout()), SLOT(timeout()));
+
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+ KommanderPlugin::registerFunction(SetInterval, "setInterval(QString widget, int interval)", i18n("Set the timer timeout interval in ms."), 2);
+}
+
+Timer::~Timer()
+{
+}
+
+int Timer::interval() const
+{
+ return mInterval;
+}
+
+void Timer::setInterval(int a_interval)
+{
+ if (mTimer->isActive())
+ {
+ mTimer->changeInterval(a_interval);
+ }
+ mInterval = a_interval;
+}
+
+bool Timer::singleShot() const
+{
+ return mSingleShot;
+}
+
+void Timer::setSingleShot(bool a_shot)
+{
+ mSingleShot = a_shot;
+}
+
+QString Timer::currentState() const
+{
+ return QString("default");
+}
+
+bool Timer::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList Timer::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void Timer::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void Timer::setWidgetText(const QString& a_text)
+{
+ KommanderWidget::setAssociatedText(a_text);
+}
+
+void Timer::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString Timer::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void Timer::populate()
+{
+ setAssociatedText(KommanderWidget::evalAssociatedText(populationText()));
+}
+
+void Timer::executeProcess(bool blocking)
+{
+ MyProcess process(this);
+ process.setBlocking(blocking);
+ process.run(evalAssociatedText());
+ if (blocking)
+ emit finished();
+}
+
+void Timer::timeout()
+{
+ executeProcess(true);
+}
+
+void Timer::execute()
+{
+ if (mSingleShot)
+ QTimer::singleShot(mInterval, this, SLOT(timeout()));
+ else
+ mTimer->start(mInterval);
+}
+
+void Timer::cancel()
+{
+ mTimer->stop();
+}
+
+
+
+bool Timer::isFunctionSupported(int f)
+{
+ return f == DCOP::setText || f == DCOP::execute || f == DCOP::cancel || (f > FirstFunction && f < LastFunction);
+}
+
+QString Timer::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::setText:
+ setAssociatedText(args[0]);
+ break;
+ case DCOP::execute:
+ execute();
+ break;
+ case DCOP::cancel:
+ cancel();
+ break;
+ case SetInterval:
+ setInterval(args[0].toInt());
+ break;
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+#include "timer.moc"
diff --git a/kommander/widgets/timer.h b/kommander/widgets/timer.h
new file mode 100644
index 00000000..856ceeb3
--- /dev/null
+++ b/kommander/widgets/timer.h
@@ -0,0 +1,71 @@
+/***************************************************************************
+ timer.h - Widget for running scripts periodically
+ -------------------
+ copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ **************************************************************************/
+#ifndef _HAVE_TIMER_H_
+#define _HAVE_TIMER_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qlabel.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+
+class QTimer;
+class KOMMANDER_EXPORT Timer : public QLabel, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+ Q_PROPERTY(int interval READ interval WRITE setInterval)
+ Q_PROPERTY(bool singleShot READ singleShot WRITE setSingleShot)
+
+ public:
+ Timer(QWidget *a_parent, const char *a_name);
+ ~Timer();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+ virtual int interval() const;
+ virtual void setInterval(int a_interval);
+ virtual bool singleShot() const;
+ virtual void setSingleShot(bool a_shot);
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+ public slots:
+ virtual void setWidgetText(const QString &);
+ virtual void populate();
+ virtual void execute();
+ virtual void cancel();
+ protected slots:
+ virtual void timeout();
+ signals:
+ void finished();
+
+ protected:
+ virtual void executeProcess(bool blocking);
+ QTimer* mTimer;
+ int mInterval;
+ bool mSingleShot;
+
+};
+
+#endif
diff --git a/kommander/widgets/toolbox.cpp b/kommander/widgets/toolbox.cpp
new file mode 100644
index 00000000..90a31e46
--- /dev/null
+++ b/kommander/widgets/toolbox.cpp
@@ -0,0 +1,190 @@
+//
+// C++ Implementation: toolbox
+//
+// Description:
+//
+//
+// Author: Andras Mantia <amantia@kdewebdev.org>, (C) 2008
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "toolbox.h"
+#include "kommanderplugin.h"
+#include "specials.h"
+
+
+#include <klocale.h>
+
+#define ADDWIDGET 120
+#define CURRENTWIDGET 121
+#define REMOVEWIDGET 122
+#define REMOVEWIDGETAT 123
+#define SETCURRENTWIDGET 124
+#define CURRENTINDEX 125
+#define WIDGETAT 126
+#define INDEXOF 127
+#define FIRST_FUNCTION ADDWIDGET
+#define LAST_FUNCTION INDEXOF
+
+ToolBox::ToolBox(QWidget *parent, const char *name)
+ : QToolBox(parent, name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+ KommanderPlugin::registerFunction(ADDWIDGET, "addWidget(QString widget, QString widgetName, QString Label)",
+ i18n("Adds a widget to the toolbox. Returns the index of the widget."), 3);
+ KommanderPlugin::registerFunction(CURRENTWIDGET, "currentWidget(QString widget)",
+ i18n("Returns the name of the active widget."), 1);
+ KommanderPlugin::registerFunction(REMOVEWIDGET, "removeWidget(QString widget, QString widgetName)", i18n("Remove the selected widget, returns the index of the removed widget or -1 if no such widget was found."), 2);
+ KommanderPlugin::registerFunction(REMOVEWIDGETAT, "removeWidgetAt(QString widget, int index)", i18n("Remove the widget from the index position, returns the index of the removed widget or -1 if no widget was found."), 2);
+ KommanderPlugin::registerFunction(SETCURRENTWIDGET, "setCurrentWidget(QString widget, QString widgetName)",
+ i18n("Activates the selected widget."), 2);
+ KommanderPlugin::registerFunction(CURRENTINDEX, "currentIndex(QString widget)",
+ i18n("Returns the index of the active widget."), 1);
+ KommanderPlugin::registerFunction(WIDGETAT, "widgetAt(QString widget, int index)",
+ i18n("Returns the widget having the supplied index."), 2);
+ KommanderPlugin::registerFunction(INDEXOF, "indexOf(QString widget, QString widgetName)",
+ i18n("Returns the index of the widget, -1 if the widget is not part of the toolbox."), 2);
+
+}
+
+
+ToolBox::~ToolBox()
+{
+}
+
+QString ToolBox::currentState() const
+{
+ return QString("default");
+}
+
+bool ToolBox::isKommanderWidget() const
+{
+ return true;
+}
+
+void ToolBox::populate()
+{
+ setAssociatedText(KommanderWidget::evalAssociatedText( populationText()));
+}
+
+QStringList ToolBox::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void ToolBox::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void ToolBox::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString ToolBox::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+
+QString ToolBox::addWidget(const QString& widgetName, const QString &label)
+{
+ KommanderWidget *w = widgetByName(widgetName);
+ if (w)
+ {
+ int idx = addItem(dynamic_cast<QWidget*>(w), label);
+ adjustSize();
+ return QString::number(idx);
+ } else
+ return QString("-1");
+
+}
+
+void ToolBox::showEvent(QShowEvent* e)
+{
+ QToolBox::showEvent(e);
+ emit widgetOpened();
+}
+
+void ToolBox::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+bool ToolBox::isFunctionSupported(int f)
+{
+ return f == DCOP::count || f == DCOP::geometry || (f >= FIRST_FUNCTION && f <= LAST_FUNCTION) ;
+}
+
+QString ToolBox::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case ADDWIDGET:
+ return addWidget(args[0], args[1]);
+ break;
+ case CURRENTWIDGET:
+ {
+ QWidget *w = currentItem();
+ if (w)
+ return w->name();
+ else
+ return QString();
+ break;
+ }
+ case SETCURRENTWIDGET:
+ {
+ KommanderWidget *w = widgetByName(args[0]);
+ setCurrentItem(dynamic_cast<QWidget*>(w));
+ return QString();
+ }
+ case REMOVEWIDGET:
+ {
+ KommanderWidget *w = widgetByName(args[0]);
+ return QString::number(removeItem(dynamic_cast<QWidget*>(w)));
+ }
+ case REMOVEWIDGETAT:
+ {
+ QWidget *w = item(args[0].toInt());
+ return QString::number(removeItem(w));
+ }
+ case CURRENTINDEX:
+ {
+ return QString::number(currentIndex());
+ break;
+ }
+ case WIDGETAT:
+ {
+ QWidget *w = item(args[0].toInt());
+ if (w)
+ return w->name();
+ else
+ return QString();
+ break;
+ }
+ case INDEXOF:
+ {
+ KommanderWidget *w = widgetByName(args[0]);
+ return QString::number(indexOf(dynamic_cast<QWidget*>(w)));
+ }
+ case DCOP::count:
+ return QString::number(count());
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+#include "toolbox.moc"
diff --git a/kommander/widgets/toolbox.h b/kommander/widgets/toolbox.h
new file mode 100644
index 00000000..9171aa32
--- /dev/null
+++ b/kommander/widgets/toolbox.h
@@ -0,0 +1,54 @@
+//
+// C++ Interface: toolbox
+//
+// Description:
+//
+//
+// Author: Andras Mantia <amantia@kdewebdev.org>, (C) 2008
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#ifndef TOOLBOX_H
+#define TOOLBOX_H
+
+#include <qtoolbox.h>
+#include <kommanderwidget.h>
+
+/**
+ @author Andras Mantia <amantia@kdewebdev.org>
+*/
+class ToolBox : public QToolBox, public KommanderWidget
+{
+ Q_OBJECT
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+public:
+ ToolBox(QWidget *parent = 0, const char *name = 0);
+
+ ~ToolBox();
+
+ virtual bool isKommanderWidget() const;
+ virtual QString currentState() const;
+ virtual bool isFunctionSupported(int function);
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual QStringList associatedText() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+public slots:
+ virtual void populate();
+
+signals:
+ void widgetOpened();
+ void contextMenuRequested(int xpos, int ypos);
+protected:
+ void showEvent(QShowEvent *e);
+ void contextMenuEvent( QContextMenuEvent * e );
+ QString addWidget(const QString& widgetName, const QString &label);
+
+};
+
+#endif
diff --git a/kommander/widgets/treewidget.cpp b/kommander/widgets/treewidget.cpp
new file mode 100644
index 00000000..578384c5
--- /dev/null
+++ b/kommander/widgets/treewidget.cpp
@@ -0,0 +1,512 @@
+/***************************************************************************
+ treewidget.cpp - Tree/detailed list widget
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ (C) 2008 Andras Mantia <amantia@kdewebdev.org>
+ (C) 2008 Eric Laffoon <eric@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+/* KDE INCLUDES */
+#include <klocale.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <klistview.h>
+
+/* QT INCLUDES */
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qevent.h>
+#include <qlistview.h>
+
+/* OTHER INCLUDES */
+#include <specials.h>
+#include "treewidget.h"
+#include "kommanderplugin.h"
+#include "specials.h"
+
+#define TW_FUNCTION 275
+#define addColumnTree TW_FUNCTION+1
+#define setAltBackground TW_FUNCTION+2
+#define setColAlignment TW_FUNCTION+3
+//#define colCount TW_FUNCTION+3
+#define colCaption TW_FUNCTION+4
+#define setColWidth TW_FUNCTION+5
+#define setSortCol TW_FUNCTION+6
+#define TW_LAST_FUNCTION setSortCol
+
+enum Functions {
+ FirstFunction = 189,
+ SelectedIndexes,
+ TW_childCount,
+ TW_setOpen,
+ TW_isOpen,
+ LastFunction
+};
+
+TreeWidget::TreeWidget(QWidget *a_parent, const char *a_name)
+ : KListView(a_parent, a_name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+ setPathSeparator("/");
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+ KommanderPlugin::registerFunction(SelectedIndexes, "selectedIndexes(QString widget)", "", 1);
+ KommanderPlugin::registerFunction(addColumnTree, "addColumn(QString widget, const QString & label, int width = -1 )", i18n("Add column at end with column header"), 2, 3);
+ KommanderPlugin::registerFunction(setSortCol, "setSortColumn(QString widget, int column, bool ascending=true)", i18n("Set sorting for a column"), 2, 3);
+ //KommanderPlugin::registerFunction(setAltBackground, "setAltBackground(QString widget, const QColor & c)", i18n("Alternate colors in list view"), 2);
+// KommanderPlugin::registerFunction(colCount, "colCount(QString widget)", i18n("Get the column count"), 1);
+ KommanderPlugin::registerFunction(colCaption, "columnCaption(QString widget, int column)", i18n("Get the column caption for column index"), 2);
+ KommanderPlugin::registerFunction(setColWidth, "setColWidth(QString widget, int column, int width)", i18n("Set the pixel width for column index - use 0 to hide"), 3);
+ KommanderPlugin::registerFunction(setColAlignment, "setColumnAlignment(QString widget, int column, QString Alignment)", i18n("Set to <i>left</i>, <i>right</i> or <i>center</i>, case insensitive "), 3);
+ KommanderPlugin::registerFunction(TW_childCount, "childCount(QString widget)", i18n("Get the count of top level items."), 1);
+ KommanderPlugin::registerFunction(TW_setOpen, "setOpen(QString widget, int Index, bool Open)", i18n("Expand or collapse a node."), 3);
+ KommanderPlugin::registerFunction(TW_isOpen, "isOpen(QString widget, int Index)", i18n("See if node is open or closed."), 2);
+}
+
+TreeWidget::~TreeWidget()
+{
+}
+
+QString TreeWidget::pathSeparator() const
+{
+ return m_pathSeparator;
+}
+
+void TreeWidget::setPathSeparator(const QString& a_pathSep)
+{
+ m_pathSeparator = a_pathSep;
+}
+
+void TreeWidget::addItemFromString(const QString& s)
+{
+ QStringList elements = QStringList::split(m_pathSeparator, s, true);
+ if (elements.count() > 1)
+ setRootIsDecorated(true);
+ QListViewItem* parent = 0;
+ if (m_lastPath.size() < elements.count())
+ m_lastPath.resize(elements.count());
+ uint i = 0;
+ for (QStringList::ConstIterator it = elements.begin(); it != elements.end(); ++it)
+ {
+ if (m_lastPath[i] && m_lastPath[i]->text(0) == elements[i])
+ {
+ parent = m_lastPath[i];
+ i++;
+ continue;
+ }
+ else
+ {
+ QListViewItem* item = (i>0) ? parent->firstChild() : firstChild();
+ while (item)
+ {
+ if (item->text(0) == *it)
+ break;
+ item = item->nextSibling();
+ }
+ if (item)
+ parent = item;
+ else
+ parent = itemFromString(parent, *it);
+ m_lastPath.insert(i, parent);
+ i++;
+ }
+ }
+}
+
+QListViewItem* TreeWidget::itemFromString(QListViewItem* parent, const QString& s)
+{
+ QStringList elements;
+ if (s.contains("\t"))
+ elements = QStringList::split("\t", s, true);
+ else
+ elements = QStringList::split("\\t", s, true);
+ int cols = elements.count();
+ if (cols >= columns())
+ cols = columns();
+ QListViewItem* item;
+ if (parent)
+ item = new QListViewItem(parent);
+ else
+ item = new QListViewItem(this);
+ int i = 0;
+ for (QStringList::ConstIterator it = elements.constBegin(); it != elements.constEnd(); ++it)
+ item->setText(i++, *it);
+ return item;
+}
+
+int TreeWidget::itemToIndex(QListViewItem* item)
+{
+// if (!item->isSelected())
+// return -1;
+ QListViewItemIterator it(this);
+ int index = 0;
+ while (it.current()) {
+ if (it.current() == item)
+ return index;
+ ++it;
+ ++index;
+ }
+ return -1;
+}
+
+int TreeWidget::itemToIndexSafe(QListViewItem* item)
+{
+ QListViewItemIterator it(this);
+ int index = 0;
+ while (it.current()) {
+ if (it.current() == item)
+ return index;
+ ++it;
+ ++index;
+ }
+ return -1;
+}
+
+QListViewItem* TreeWidget::indexToItem(int item)
+{
+ QListViewItemIterator it(this);
+ int index = 0;
+ while (it.current()) {
+ if (index == item)
+ return it.current();
+ ++it;
+ ++index;
+ }
+ return 0;
+}
+
+QString TreeWidget::itemText(QListViewItem* item) const
+{
+ if (!item)
+ return QString();
+ QStringList items;
+ for (int i=0; i<columns(); i++)
+ items.append(item->text(i));
+ return items.join("\t");
+}
+
+QString TreeWidget::itemsText()
+{
+ QStringList items;
+ QListViewItemIterator it(this);
+ while (it.current())
+ {
+ QString path = itemPath(it.current());
+ if (path.isEmpty())
+ items.append(itemText(it.current()));
+ else
+ items.append(QString("%1%2%3").arg(path).arg(m_pathSeparator)
+ .arg(itemText(it.current())));
+ ++it;
+ }
+ return items.join("\n");
+}
+
+QString TreeWidget::itemPath(QListViewItem* item) const
+{
+ if (!item)
+ return QString();
+ item = item->parent();
+ if (!item)
+ return QString();
+ QStringList path;
+ while (item)
+ {
+ path.prepend(item->text(0));
+ item = item->parent();
+ }
+ return path.join(m_pathSeparator);
+}
+
+QString TreeWidget::currentState() const
+{
+ return QString("default");
+}
+
+bool TreeWidget::isKommanderWidget() const
+{
+ return true;
+}
+
+void TreeWidget::setCurrentItem(QListViewItem* item)
+{
+ KListView::setCurrentItem(item);
+ setSelected(item, true);
+ ensureItemVisible(item);
+}
+
+QStringList TreeWidget::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void TreeWidget::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void TreeWidget::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText( a_text );
+}
+
+QString TreeWidget::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void TreeWidget::populate()
+{
+ setWidgetText(KommanderWidget::evalAssociatedText( populationText()));
+}
+
+void TreeWidget::setWidgetText(const QString &a_text)
+{
+ handleDCOP(DCOP::setText, a_text);
+ emit widgetTextChanged(a_text);
+}
+
+void TreeWidget::showEvent(QShowEvent* e)
+{
+ QListView::showEvent( e );
+ emit widgetOpened();
+}
+
+void TreeWidget::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+void TreeWidget::setColAlign(int column, const QString& align)
+{
+ if (align.lower() == "left")
+ setColumnAlignment (column, Qt::AlignLeft);
+ else if (align.lower() == "right")
+ setColumnAlignment (column, Qt::AlignRight);
+ else if (align.lower() == "center")
+ setColumnAlignment (column, Qt::AlignCenter);
+}
+
+bool TreeWidget::isFunctionSupported(int f)
+{
+ return f == DCOP::insertItem || f == DCOP::text || f == DCOP::setText || f == DCOP::insertItems ||
+ f == DCOP::selection || f == DCOP::setSelection || f == DCOP::clear || f == DCOP::removeItem ||
+ f == DCOP::currentItem || f == DCOP::setCurrentItem || f == DCOP::findItem || f == DCOP::item ||
+ f == DCOP::itemPath || f == DCOP::itemDepth || f == DCOP::setPixmap || f == DCOP::setColumnCaption || f == DCOP::removeColumn || f == DCOP::columnCount || f == DCOP::geometry || f == DCOP::hasFocus || f == DCOP::getBackgroundColor || f == DCOP::setBackgroundColor || (f > FirstFunction && f < LastFunction) || (f >= TW_FUNCTION && f <= TW_LAST_FUNCTION);
+}
+
+QString TreeWidget::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::insertItem:
+ addItemFromString(args[0]);
+ break;
+ case DCOP::text:
+ return itemsText();
+ case DCOP::setText:
+ clear(); /* break omitted: setText is equivalent to clear and insertItems */
+ m_lastPath.clear();
+ case DCOP::insertItems:
+ {
+ QStringList items(QStringList::split("\n", args[0], true));
+ for (QStringList::ConstIterator it = items.constBegin(); it != items.constEnd(); ++it)
+ addItemFromString(*it);
+ break;
+ }
+ case TW_setOpen:
+ setOpen(indexToItem(args[0].toInt()), args[1].toInt());
+ break;
+ case TW_isOpen:
+ return QString::number(isOpen(indexToItem(args[0].toInt())));
+ break;
+ case SelectedIndexes:
+ {
+ QString selection = "";
+ QListViewItemIterator it(this);
+ while (it.current())
+ {
+ if (it.current()->isSelected())
+ {
+ selection.append(QString("%1\n").arg(itemToIndexSafe(it.current())));
+ }
+ ++it;
+ }
+ if (!selection.isEmpty())
+ selection = selection.left(selection.length() - 1);
+ return selection;
+ break;
+ }
+ case DCOP::selection:
+ {
+ QString selection = "";
+ QListViewItemIterator it(this);
+ while (it.current())
+ {
+ if (it.current()->isSelected())
+ selection.append(itemText(it.current()) + "\n");
+ ++it;
+ }
+ if (!selection.isEmpty())
+ selection = selection.left(selection.length() - 1);
+ return selection;
+ break;
+ }
+ case DCOP::setSelection:
+ if (selectionModeExt() == Single || selectionModeExt() == NoSelection)
+ setCurrentItem(findItem(args[0], 0));
+ else
+ {
+ clearSelection();
+ QStringList items(QStringList::split("\n", args[0]));
+ for (QStringList::ConstIterator it = items.begin(); it != items.end(); ++it)
+ {
+ QListViewItem* item = findItem(*it, 0);
+ if (item)
+ {
+ item->setSelected(true);
+ ensureItemVisible(item);
+ }
+ }
+ }
+ break;
+ case DCOP::clear:
+ clear();
+ m_lastPath.clear();
+ break;
+ case DCOP::removeItem:
+ {
+ if (args[0].toInt() >= 0 )
+ {
+ delete indexToItem(args[0].toInt());
+ m_lastPath.clear();
+ }
+ break;
+ }
+ case DCOP::currentItem:
+ return QString::number(itemToIndexSafe(currentItem()));
+ break;
+ case DCOP::setCurrentItem:
+ setCurrentItem(indexToItem(args[0].toInt()));
+ break;
+ case DCOP::findItem:
+ if (!args[1])
+ return QString::number(itemToIndexSafe(findItem(args[0], 0)));
+ else
+ {
+ if (args[2].toUInt() && args[3].toUInt())
+ return QString::number(itemToIndexSafe(findItem(args[0], args[1].toInt())));
+ else if (args[2].toUInt())
+ return QString::number(itemToIndexSafe(findItem(args[0], args[1].toInt(), Qt::CaseSensitive | Qt::Contains)));
+ else if (args[3].toUInt())
+ return QString::number(itemToIndexSafe(findItem(args[0], args[1].toInt(), Qt::ExactMatch)));
+ else
+ return QString::number(itemToIndexSafe(findItem(args[0], args[1].toInt(), Qt::Contains)));
+ }
+ break;
+ case DCOP::item:
+ return itemText(indexToItem(args[0].toInt()));
+ break;
+ case DCOP::itemPath:
+ return itemPath(indexToItem(args[0].toInt()));
+ break;
+ case DCOP::itemDepth:
+ {
+ QListViewItem* item = indexToItem(args[0].toInt());
+ return (item) ? QString::number(item->depth()) : QString::number(-1);
+ }
+ case DCOP::setPixmap:
+ {
+ QPixmap pixmap = KGlobal::iconLoader()->loadIcon(args[0], KIcon::Small);
+ if (args[1].toInt() == -1)
+ for (QListViewItemIterator it(this); it.current(); ++it)
+ it.current()->setPixmap(0, pixmap);
+ else
+ {
+ QListViewItem* item = indexToItem(args[1].toInt());
+ if (item)
+ item->setPixmap(0, pixmap);
+ }
+ break;
+ }
+ case DCOP::setColumnCaption:
+ if (columns() >= args[0].toInt())
+ setColumnText(args[0].toInt(), args[1]);
+ break;
+ case DCOP::getBackgroundColor:
+ return this->paletteBackgroundColor().name();
+ break;
+ case DCOP::setBackgroundColor:
+ {
+ QColor color;
+ color.setNamedColor(args[0]);
+ this->setPaletteBackgroundColor(color);
+ break;
+ }
+ case addColumnTree:
+ return QString::number(KListView::addColumn(args[0], args[1].toInt()));
+ break;
+ case setSortCol:
+ KListView::setSorting(args[0].toInt(), args[1].toInt());
+ break;
+ case DCOP::columnCount:
+ return QString::number(QListView::columns() );
+ break;
+ case colCaption:
+ return QListView::columnText(args[0].toInt()) ;
+ break;
+ case setColWidth:
+ QListView::setColumnWidth(args[0].toInt(), args[1].toInt());
+ break;
+ case setColAlignment:
+ setColAlign(args[0].toInt(), args[1]);
+ break;
+ case setAltBackground:
+ KListView::setAlternateBackground(QColor(args[0]));
+ break;
+ case DCOP::removeColumn:
+ {
+ if (!args[1].toInt())
+ removeColumn(args[0].toInt());
+ else
+ {
+ int column = args[0].toInt();
+ int lines = args[1].toInt();
+ for (int i = 0; i < lines; i++)
+ removeColumn(column);
+ }
+ break;
+ }
+ case TW_childCount:
+ return QString::number(childCount());
+ break;
+ case DCOP::geometry:
+ {
+ QString geo = QString::number(this->x())+" "+QString::number(this->y())+" "+QString::number(this->width())+" "+QString::number(this->height());
+ return geo;
+ break;
+ }
+ case DCOP::hasFocus:
+ return QString::number(this->hasFocus());
+ break;
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+#include "treewidget.moc"
diff --git a/kommander/widgets/treewidget.h b/kommander/widgets/treewidget.h
new file mode 100644
index 00000000..29d0a747
--- /dev/null
+++ b/kommander/widgets/treewidget.h
@@ -0,0 +1,87 @@
+/***************************************************************************
+ treewidget.h - Tree/detailed list widget
+ -------------------
+ copyright : (C) 2002-2003 Marc Britton <consume@optusnet.com.au>
+ (C) 2004 Michal Rudolf <mrudolf@kdewebdev.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _HAVE_TREEWIDGET_H_
+#define _HAVE_TREEWIDGET_H_
+
+/* KDE INCLUDES */
+#include <klistview.h>
+
+/* QT INCLUDES */
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qptrvector.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+
+class QWidget;
+
+class QShowEvent;
+class KOMMANDER_EXPORT TreeWidget : public KListView, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+ Q_PROPERTY(QString pathSeparator READ pathSeparator WRITE setPathSeparator)
+
+public:
+ TreeWidget(QWidget *a_parent, const char *a_name);
+ ~TreeWidget();
+ virtual void setCurrentItem(QListViewItem* item);
+ QString pathSeparator() const;
+ void setPathSeparator(const QString& a_pathSep);
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+public slots:
+ virtual void setWidgetText(const QString&);
+ virtual void populate();
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString&);
+ void contextMenuRequested(int xpos, int ypos);
+protected:
+ void showEvent(QShowEvent *e);
+ void contextMenuEvent( QContextMenuEvent * e );
+ int itemToIndex(QListViewItem* item);
+ int itemToIndexSafe(QListViewItem* item);
+ QString itemText(QListViewItem* item) const;
+ QString itemsText();
+ QListViewItem* indexToItem(int index);
+ QString itemPath(QListViewItem* item) const;
+private:
+ void addItemFromString(const QString& s);
+ QListViewItem* itemFromString(QListViewItem* parent, const QString& s);
+ QPtrVector<QListViewItem> m_lastPath;
+ QString m_pathSeparator;
+ int addColumnTree(const QString & label, int width = -1 );
+ void setSortCol(int column, bool ascending=true);
+ void setAltBackground(const QColor & c);
+ void setColAlign(int column, const QString& align);
+};
+
+#endif
diff --git a/kommander/widgets/widgets.desktop b/kommander/widgets/widgets.desktop
new file mode 100644
index 00000000..f24396de
--- /dev/null
+++ b/kommander/widgets/widgets.desktop
@@ -0,0 +1,36 @@
+[Desktop Entry]
+Name=Widgets
+Name[bg]=Графични обекти
+Name[br]=Widgetoù
+Name[ca]=Estris
+Name[cs]=Widgety
+Name[cy]=Celfigion
+Name[da]=Kontroller
+Name[el]=Γραφικά συστατικά
+Name[et]=Elemendid
+Name[fa]=عناصر
+Name[fi]=Elementit
+Name[fr]=Éléments graphiques
+Name[ga]=Giuirléidí
+Name[hi]=विजेट्स
+Name[hu]=Grafikai elemek
+Name[ja]=ウィジェット
+Name[lt]=Valdikliai
+Name[ms]=Wijet
+Name[ne]=विजेट
+Name[pl]=Elementy interfejsu
+Name[pt]=Elementos
+Name[pt_BR]=Janelas
+Name[ru]=Виджеты
+Name[sl]=Gradniki
+Name[sr]=Контроле
+Name[sr@Latn]=Kontrole
+Name[sv]=Grafiska komponenter
+Name[ta]=சின்னப் படங்கள்
+Name[tg]=Васеъкуниҳо
+Name[tr]=Bileşenler
+Name[uk]=Віджети
+Name[zh_CN]=部件
+Exec=widgets %i %m -caption "%c"
+Type=Application
+Terminal=false
diff --git a/kommander/widgets/wizard.cpp b/kommander/widgets/wizard.cpp
new file mode 100644
index 00000000..7e6a07b4
--- /dev/null
+++ b/kommander/widgets/wizard.cpp
@@ -0,0 +1,194 @@
+/***************************************************************************
+ wizard.cpp - Widget providing a wizard
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+/* KDE INCLUDES */
+#include <kprocess.h>
+
+/* QT INCLUDES */
+#include <qstring.h>
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <qevent.h>
+#include <qwizard.h>
+#include <qdialog.h>
+
+/* OTHER INCLUDES */
+#include <myprocess.h>
+#include <kommanderfactory.h>
+#include <specials.h>
+#include "wizard.h"
+
+
+Wizard::Wizard(QWidget *a_parent, const char *a_name, bool a_modal, int a_flags)
+ : QWizard(a_parent, a_name, a_modal, a_flags), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ states << "initialization";
+ states << "destroy";
+ setStates(states);
+ setDisplayStates(states);
+
+ connect(this, SIGNAL(helpClicked()), SLOT(runHelp()));
+}
+
+Wizard::~Wizard()
+{
+ if (!inEditor)
+ destroy();
+}
+
+QString Wizard::currentState() const
+{
+ return QString("default");
+}
+
+bool Wizard::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList Wizard::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void Wizard::setAssociatedText(const QStringList& a_at)
+{
+ KommanderWidget::setAssociatedText(a_at);
+}
+
+void Wizard::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString Wizard::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void Wizard::populate()
+{
+ QString txt = KommanderWidget::evalAssociatedText(populationText());
+//FIXME: implement me
+}
+
+void Wizard::setWidgetText(const QString &a_text)
+{
+ setCaption(a_text);
+ emit widgetTextChanged(a_text);
+}
+
+void Wizard::initialize()
+{
+ setFinishEnabled(page(pageCount() - 1), true);
+ const QStringList assoc = associatedText();
+ if (assoc.count() > 1 && !assoc[1].isEmpty())
+ {
+ MyProcess proc(this);
+ proc.run( KommanderWidget::evalAssociatedText(assoc[1]) );
+ }
+}
+
+void Wizard::destroy()
+{
+ const QStringList assoc = associatedText();
+ if (assoc.count() > 2 && !assoc[2].isEmpty())
+ {
+ MyProcess proc(this);
+ proc.run(KommanderWidget::evalAssociatedText(assoc[2]));
+ }
+}
+
+void Wizard::exec()
+{
+ QWizard::exec();
+ emit finished();
+}
+
+void Wizard::show()
+{
+ QWizard::show();
+ if (!inEditor)
+ initialize();
+}
+
+void Wizard::runHelp()
+{
+ if (helpAction() == Command)
+ {
+ KProcess proc;
+ proc << helpActionText();
+ proc.start(KProcess::DontCare, KProcess::NoCommunication);
+ }
+ else if (helpAction() == Dialog)
+ {
+ KommanderFactory::loadPlugins();
+ QDialog *dialog = (QDialog *)KommanderFactory::create(helpActionText());
+ dialog->exec();
+ delete dialog;
+ }
+}
+
+Wizard::HelpAction Wizard::helpAction() const
+{
+ return m_helpAction;
+}
+
+void Wizard::setHelpAction(HelpAction a_helpAction)
+{
+ m_helpAction = a_helpAction;
+}
+
+QString Wizard::helpActionText() const
+{
+ return m_helpActionText;
+}
+
+void Wizard::setHelpActionText(const QString& a_helpActionText)
+{
+ m_helpActionText = a_helpActionText;
+}
+
+
+void Wizard::showEvent(QShowEvent *e)
+{
+ QWizard::showEvent(e);
+ emit widgetOpened();
+}
+
+void Wizard::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+QString Wizard::handleDCOP(int function, const QStringList& args)
+{
+ switch (function) {
+ case DCOP::setEnabled:
+ setFinishEnabled(page(pageCount() - 1), args[0] != "false");
+ break;
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString();
+}
+
+
+
+#include "wizard.moc"
diff --git a/kommander/widgets/wizard.h b/kommander/widgets/wizard.h
new file mode 100644
index 00000000..868a14bc
--- /dev/null
+++ b/kommander/widgets/wizard.h
@@ -0,0 +1,82 @@
+/***************************************************************************
+ wizard.h - Widget providing a wizard
+ -------------------
+ copyright : (C) 2002 by Marc Britton
+ email : consume@optusnet.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef _HAVE_WIZARD_H_
+#define _HAVE_WIZARD_H_
+
+/* KDE INCLUDES */
+
+/* QT INCLUDES */
+#include <qwizard.h>
+
+/* OTHER INCLUDES */
+#include <kommanderwidget.h>
+#include <kommander_export.h>
+#include <myprocess.h>
+
+class QShowEvent;
+class KOMMANDER_EXPORT Wizard : public QWizard, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+ Q_PROPERTY(HelpAction helpAction READ helpAction WRITE setHelpAction)
+ Q_ENUMS(HelpAction)
+ Q_PROPERTY(QString helpActionText READ helpActionText WRITE setHelpActionText)
+
+public:
+ Wizard(QWidget *, const char *, bool = true, int = 0);
+ ~Wizard();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ enum HelpAction { None, Command, Dialog };
+ HelpAction helpAction() const;
+ void setHelpAction(HelpAction);
+ QString helpActionText() const;
+ void setHelpActionText(const QString&);
+
+public slots:
+ virtual void setWidgetText(const QString &);
+ virtual void exec();
+ virtual void show();
+ virtual void runHelp();
+ virtual void populate();
+protected slots:
+ virtual void initialize();
+ virtual void destroy();
+
+signals:
+ void widgetOpened();
+ void widgetTextChanged(const QString &);
+ void finished();
+ void contextMenuRequested(int xpos, int ypos);
+protected:
+ void showEvent( QShowEvent *e );
+ void contextMenuEvent( QContextMenuEvent * e );
+
+ HelpAction m_helpAction;
+ QString m_helpActionText;
+};
+
+#endif
diff --git a/kommander/working/Makefile.am b/kommander/working/Makefile.am
new file mode 100644
index 00000000..8eb9f2b3
--- /dev/null
+++ b/kommander/working/Makefile.am
@@ -0,0 +1,4 @@
+SUBDIRS=plugintemplate
+execkmdrdir = ${kde_datadir}/kommander/translating
+
+execkmdr_SCRIPTS = extractkmdr kmdr2po \ No newline at end of file
diff --git a/kommander/working/extractkmdr b/kommander/working/extractkmdr
new file mode 100755
index 00000000..ea1da6ff
--- /dev/null
+++ b/kommander/working/extractkmdr
@@ -0,0 +1,112 @@
+#! /usr/bin/perl
+#
+# This script extracts messages from designer (.ui) and XMLGIU (.rc) files
+# and writes on standard output (usually redirected to rc.cpp)
+# the equivalent i18n() calls so that xgettext can parse them.
+
+# known flags:
+# --tag=name : extract also the tag name
+# --contect=name : give all i18n calls a context name: i18n( "name",...)
+
+$filename = "";
+@filenames = ();
+
+sub writeoutstring
+{
+ print STDOUT "i18n(\"";
+ if (@_[0])
+ {
+ # We have a I18N context
+ print STDOUT @_[0];
+ print STDOUT "\",\"";
+ }
+ print STDOUT @_[1];
+ print STDOUT "\"); // $filename \n";
+}
+
+$extratags = "";
+$context = ""; # I18N context
+
+ARGUMENTS: while (defined ($ARGV[0]))
+{
+ $_ = shift;
+
+ if (/^--tag=(\w+)/) # --tag=name
+ {
+ $extratags .= "|" . $1;
+ next ARGUMENTS;
+ }
+ elsif (/^--context=(\w+)/) # --context=name
+ {
+ $context = $1;
+ next ARGUMENTS;
+ }
+
+ $filename = $_; # maybe check for more options
+
+if (! $filename) {
+ print STDERR "no file to open\n";
+ exit 1;
+}
+
+$string = "";
+$intext = 0;
+$linenr = 0;
+$inskippedprop = 0;
+
+open(FILE, $filename);
+
+READING: while ( <FILE> ) {
+ $linenr++;
+ if ($linenr == 1 && ($_ !~ /^<!DOCTYPE/) && ($_ !~ /^<\?xml/)) {
+ last READING;
+ }
+
+ $string .= "\\n" . $_;
+ chomp($string);
+
+ $textstring = '([tT][eE][xX][tT]|title|string|whatsthis|tooltip|label' . $extratags .')>';
+
+ # The 'database' property contains strings that shouldn't be translated
+ if ($inskippedprop == 0 && ($string =~ /<property name=\"database\"/ || $string =~ /<property name=\"populationText\"/ || $string=~ /<property name=\"associations\"/)) {
+ $inskippedprop = 1;
+ } elsif ($inskippedprop == 1 && ($string =~ /<\/property/)) {
+ $inskippedprop = 0;
+ $string = "";
+ }
+
+ if ($inskippedprop == 0 && $intext == 0) {
+ if ($string =~ /<$textstring/) {
+ $string =~ s/^.*<$textstring//;
+ $intext = 1;
+ $starting_linenr = $linenr;
+ } else {
+ $string = "";
+ }
+ }
+
+ if (($intext == 1) && ($string =~ /<\/$textstring/)) {
+ my $text = $string;
+ $text =~ s/<\/$textstring.*$//;
+ $text =~ s/&lt;/</g;
+ $text =~ s/&gt;/>/g;
+ $text =~ s/&amp;/&/g;
+ $text =~ s/\\([^n])/\\\\$1/g;
+ $text =~ s/\"/\\\"/g;
+ writeoutstring($context, $text);
+ $string =~ s/^.*<\/$textstring//;
+ $intext = 0;
+ # Text can be multiline in .ui files (possibly), but we warn about it in XMLGUI .rc files.
+ if ($linenr != $starting_linenr && $filename =~ m/\.rc$/) {
+ print STDERR "there is <text> floating $filename\n";
+ }
+ }
+
+}
+
+if ($intext == 1) {
+ print STDERR "parsing error in $filename $linenr\n";
+ exit 1;
+}
+
+}
diff --git a/kommander/working/kmdr2po b/kommander/working/kmdr2po
new file mode 100755
index 00000000..33d5dfa4
--- /dev/null
+++ b/kommander/working/kmdr2po
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+if [ -z $1 ]; then
+ echo "Makepo extracts strings for translation from Kommander dialog."
+ echo "Usage: kmdr2po <Kommander dialog>"
+else
+ ./extractkmdr $1 >_from_rc.cc
+ xgettext -C -F --default-domain=`basename $1 .kmdr` \
+ --keyword=i18n --keyword=@i18n $1 _from_rc.cc
+ rm _from_rc.cc
+fi
diff --git a/kommander/working/plugintemplate/Makefile.am b/kommander/working/plugintemplate/Makefile.am
new file mode 100644
index 00000000..14e3c0a8
--- /dev/null
+++ b/kommander/working/plugintemplate/Makefile.am
@@ -0,0 +1,17 @@
+dataFiles = src-Makefile.am plugin.cpp \
+ widget.h widget.cpp app.kdevelop
+templateName = kommanderplugin
+
+### no need to change below:
+template_DATA = $(templateName).kdevtemplate
+templatedir = ${appwizarddatadir}/templates
+
+appwizarddatadir = ${kde_datadir}/kdevappwizard
+$(templateName).tar.gz: ${dataFiles}
+ $(TAR) -cf $(templateName).tar -C $(srcdir) ${dataFiles}
+ $(GZIP_COMMAND) -f9 $(templateName).tar
+
+archivedir = ${appwizarddatadir}
+archive_DATA = $(templateName).tar.gz ${templateName}.png
+
+CLEANFILES = *.tar.gz \ No newline at end of file
diff --git a/kommander/working/plugintemplate/README.dox b/kommander/working/plugintemplate/README.dox
new file mode 100644
index 00000000..86968add
--- /dev/null
+++ b/kommander/working/plugintemplate/README.dox
@@ -0,0 +1,55 @@
+/** \class %{APPNAME}
+Put a brief description here, the brief description ends at the first dot.
+Put a more detailed description of your part in these lines. It can span
+over several lines. You can even use some html commands in these lines like:
+<code>This is code</code>, html links <a href="http://somelocation">link text</a>,
+and images.
+
+\authors <a href="mailto:%{EMAIL}">%{AUTHOR}</a>
+\authors <a href="mailto:2nd author AT provider.com">2nd author full name</a>
+...
+\authors <a href="mailto:nth author AT provider.com">nth author full name</a>
+
+\maintainer <a href="mailto:%{EMAIL}">%{AUTHOR}</a>
+\maintainer <a href="mailto:2nd maintainer AT provider.com">2nd maintainer full name</a>
+...
+\maintainer <a href="mailto:nth maintainer AT provider.com">nth maintainer full name</a>
+
+\feature Describe the first feature
+\feature Describe the second feature
+...
+\feature Describe the last feature
+
+\bug bugs in <a href="http://bugs.kde.org/buglist.cgi?product=kdevelop&component=YOUR_COMPONENT_NAME&
+bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=Bug+Number">
+YOUR_COMPONENT_NAME at Bugzilla database</a>
+\bug Describe a the 1st bug that you know of, but probably hasn't been reported yet.
+..
+\bug Describe a the nth bug that you know of, but probably hasn't been reported yet.
+
+\requirement Describe a the 1st requirement of your part.
+\requirement Describe a the 2nd requirement of your part.
+...
+\requirement Describe a the nth requirement of your part.
+
+\todo Describe a the 1st TODO of your part.
+\todo Describe a the 2nd TODO of your part.
+...
+\todo Describe a the nth TODO of your part.
+
+\faq <b>First frequenly asked question about your part ?</b> Answer.
+\faq <b>Second frequenly asked question about your part ?</b> Answer.
+...
+\faq <b>Last frequenly asked question about your part ?</b> Answer.
+
+\note First note text.
+\note Second note text.
+...
+\note Last note text.
+
+\warning First warning text.
+\warning Second warning text.
+...
+\warning Last warning text.
+
+*/
diff --git a/kommander/working/plugintemplate/app.kdevelop b/kommander/working/plugintemplate/app.kdevelop
new file mode 100644
index 00000000..29beaf21
--- /dev/null
+++ b/kommander/working/plugintemplate/app.kdevelop
@@ -0,0 +1,116 @@
+<?xml version="1.0"?>
+<kdevelop>
+ <general>
+ <author>%{AUTHOR}</author>
+ <email>%{EMAIL}</email>
+ <version>%{VERSION}</version>
+ <projectmanagement>KDevKDEAutoProject</projectmanagement>
+ <primarylanguage>C++</primarylanguage>
+ <keywords>
+ <keyword>C++</keyword>
+ <keyword>Code</keyword>
+ <keyword>Qt</keyword>
+ <keyword>KDE</keyword>
+ <keyword>KDevelop</keyword>
+ </keywords>
+ </general>
+ <kdevcppsupport>
+ <qt>
+ <version>3</version>
+ <used>true</used>
+ <includestyle>3</includestyle>
+ <designerintegration>EmbeddedKDevDesigner</designerintegration>
+ </qt>
+ </kdevcppsupport>
+
+ <kdevautoproject>
+ <general>
+ <activetarget>src/%{APPNAMELC}</activetarget>
+ <useconfiguration>debug</useconfiguration>
+ </general>
+ <run>
+ <mainprogram>src/%{APPNAMELC}</mainprogram>
+ </run>
+ <configurations>
+ <optimized>
+ <builddir>optimized</builddir>
+ <ccompiler>kdevgccoptions</ccompiler>
+ <cxxcompiler>kdevgppoptions</cxxcompiler>
+ <f77compiler>kdevg77options</f77compiler>
+ <cxxflags>-O2 -g0</cxxflags>
+ </optimized>
+ <debug>
+ <configargs>--enable-debug=full</configargs>
+ <builddir>debug</builddir>
+ <ccompiler>kdevgccoptions</ccompiler>
+ <cxxcompiler>kdevgppoptions</cxxcompiler>
+ <f77compiler>kdevg77options</f77compiler>
+ <cxxflags>-O0 -g3</cxxflags>
+ </debug>
+ </configurations>
+</kdevautoproject>
+ <kdevfileview>
+ <groups>
+ <group pattern="*.cpp;*.cxx;*.h" name="Sources" />
+ <group pattern="*.ui" name="User Interface" />
+ <group pattern="*.png" name="Icons" />
+ <group pattern="*.po;*.ts" name="Translations" />
+ <group pattern="*" name="Others" />
+ </groups>
+ </kdevfileview>
+ <kdevdoctreeview>
+ <ignoretocs>
+ <toc>ada</toc>
+ <toc>ada_bugs_gcc</toc>
+ <toc>bash</toc>
+ <toc>bash_bugs</toc>
+ <toc>clanlib</toc>
+ <toc>w3c-dom-level2-html</toc>
+ <toc>fortran_bugs_gcc</toc>
+ <toc>gnome1</toc>
+ <toc>gnustep</toc>
+ <toc>gtk</toc>
+ <toc>gtk_bugs</toc>
+ <toc>haskell</toc>
+ <toc>haskell_bugs_ghc</toc>
+ <toc>java_bugs_gcc</toc>
+ <toc>java_bugs_sun</toc>
+ <toc>pascal_bugs_fp</toc>
+ <toc>php</toc>
+ <toc>php_bugs</toc>
+ <toc>perl</toc>
+ <toc>perl_bugs</toc>
+ <toc>python</toc>
+ <toc>python_bugs</toc>
+ <toc>ruby</toc>
+ <toc>ruby_bugs</toc>
+ <toc>sdl</toc>
+ <toc>w3c-svg</toc>
+ <toc>sw</toc>
+ <toc>w3c-uaag10</toc>
+ <toc>wxwidgets_bugs</toc>
+ </ignoretocs>
+ <ignoreqt_xml>
+ <toc>qmake User Guide</toc>
+ </ignoreqt_xml>
+ </kdevdoctreeview>
+ <kdevdebugger>
+ <general>
+ <dbgshell>libtool</dbgshell>
+ </general>
+ </kdevdebugger>
+ <kdevfilecreate>
+ <filetypes/>
+ <useglobaltypes>
+ <type ext="ui" />
+ <type ext="cpp" />
+ <type ext="h" />
+ </useglobaltypes>
+ </kdevfilecreate>
+ <kdevdocumentation>
+ <projectdoc>
+ <docsystem>Doxygen Documentation Collection</docsystem>
+ <docurl>%{APPNAMELC}.tag</docurl>
+ </projectdoc>
+ </kdevdocumentation>
+</kdevelop>
diff --git a/kommander/working/plugintemplate/kommanderplugin.kdevtemplate b/kommander/working/plugintemplate/kommanderplugin.kdevtemplate
new file mode 100644
index 00000000..1eb9917f
--- /dev/null
+++ b/kommander/working/plugintemplate/kommanderplugin.kdevtemplate
@@ -0,0 +1,66 @@
+# KDE Config File
+[General]
+Name=Kommander Plugin
+Category=C++/Kommander/
+Comment=This generates a plugin for Kommander
+FileTemplates=h,CStyle,cpp,CStyle
+ShowFilesAfterGeneration=%{dest}/%{APPNAMELC}.cpp
+Archive=kommanderplugin.tar.gz
+
+[ADMIN]
+Type=include
+File=%{kdevelop}/template-common/admin.kdevtemplate
+
+[GNU]
+Type=include
+File=%{kdevelop}/template-common/gnu.kdevtemplate
+
+[MkDir1]
+Type=mkdir
+Dir=%{dest}/src
+
+[FILE1]
+Type=install
+EscapeXML=true
+Source=%{src}/app.kdevelop
+Dest=%{dest}/%{APPNAMELC}.kdevelop
+
+[FILE2]
+Type=install
+Source=%{src}/src-Makefile.am
+Dest=%{dest}/src/Makefile.am
+
+[FILE3]
+Type=install
+Source=%{src}/widget.cpp
+Dest=%{dest}/src/%{APPNAMELC}.cpp
+
+[FILE4]
+Type=install
+Source=%{src}/widget.h
+Dest=%{dest}/src/%{APPNAMELC}.h
+
+[FILE5]
+Type=install
+Source=%{src}/plugin.cpp
+Dest=%{dest}/src/%{APPNAMELC}plugin.cpp
+
+[FILE6]
+Type=install
+Source=%{kdevelop}/template-common/kde-Makefile.cvs
+Dest=%{dest}/Makefile.cvs
+
+[FILE7]
+Type=install
+Source=%{kdevelop}/template-common/kde-configure.in.in
+Dest=%{dest}/configure.in.in
+
+[FILE8]
+Type=install
+Source=%{kdevelop}/template-common/kde-Makefile.am
+Dest=%{dest}/Makefile.am
+
+
+[MSG]
+Type=message
+Comment=A Kommander plugin was created in %{dest}
diff --git a/kommander/working/plugintemplate/kommanderplugin.png b/kommander/working/plugintemplate/kommanderplugin.png
new file mode 100644
index 00000000..2cbd68ee
--- /dev/null
+++ b/kommander/working/plugintemplate/kommanderplugin.png
Binary files differ
diff --git a/kommander/working/plugintemplate/plugin.cpp b/kommander/working/plugintemplate/plugin.cpp
new file mode 100644
index 00000000..e6b506cc
--- /dev/null
+++ b/kommander/working/plugintemplate/plugin.cpp
@@ -0,0 +1,29 @@
+%{CPP_TEMPLATE}
+#include "%{APPNAMELC}.h"
+
+#include <kommanderplugin.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <klocale.h>
+#include "%{APPNAMELC}.h"
+
+class %{APPNAME}Plugin : public KommanderPlugin
+{
+public:
+ %{APPNAME}Plugin();
+ virtual QWidget *create( const QString &className, QWidget *parent = 0, const char *name = 0);
+};
+
+%{APPNAME}Plugin::%{APPNAME}Plugin()
+{
+ addWidget( "%{APPNAME}", "Custom", i18n("Kommander %{APPNAME} plugin."), new QIconSet(KGlobal::iconLoader()->loadIcon("%{APPNAMELC}", KIcon::NoGroup, KIcon::SizeMedium)) );
+}
+
+QWidget *%{APPNAME}Plugin::create( const QString &className, QWidget *parent, const char *name)
+{
+ if (className == "%{APPNAME}")
+ return new %{APPNAME}(parent, name);
+ return 0;
+}
+
+KOMMANDER_EXPORT_PLUGIN(%{APPNAME}Plugin)
diff --git a/kommander/working/plugintemplate/src-Makefile.am b/kommander/working/plugintemplate/src-Makefile.am
new file mode 100644
index 00000000..eb7dbe9d
--- /dev/null
+++ b/kommander/working/plugintemplate/src-Makefile.am
@@ -0,0 +1,19 @@
+lib_LTLIBRARIES = libkmdr%{APPNAMELC}.la
+
+# the library search path.
+libkmdr%{APPNAMELC}_la_LDFLAGS = -module $(KDE_PLUGIN) \
+ $(HK_LDFLAGS) $(all_libraries)
+
+# the libraries to link against.
+libkmdr%{APPNAMELC}_la_LIBADD = -lkommanderwidget -lkommanderplugin \
+ $(LIB_KPARTS) $(LIB_KDEUI)
+
+# which sources should be compiled for widgets
+libkmdr%{APPNAMELC}_la_SOURCES = %{APPNAMELC}.cpp %{APPNAMELC}plugin.cpp
+
+# these are the headers for your project that won't be installed
+
+# let automoc handle all of the meta source files (moc)
+METASOURCES = AUTO
+AM_CXXFLAGS= -DHAVE_SSTREAM
+AM_CPPFLAGS= $(all_includes)
diff --git a/kommander/working/plugintemplate/widget.cpp b/kommander/working/plugintemplate/widget.cpp
new file mode 100644
index 00000000..73ec0278
--- /dev/null
+++ b/kommander/working/plugintemplate/widget.cpp
@@ -0,0 +1,116 @@
+%{CPP_TEMPLATE}
+#include "%{APPNAMELC}.h"
+
+#include <kommanderplugin.h>
+#include <specials.h>
+
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <klocale.h>
+
+
+enum Functions {
+ FirstFunction = 11001, //CHANGE THIS NUMBE TO AN UNIQUE ONE!!!
+ Function1,
+ Function2,
+ LastFunction
+};
+
+%{APPNAME}::%{APPNAME}(QWidget *parent, const char *name)
+ : QWidget(parent, name), KommanderWidget(this)
+{
+ QStringList states;
+ states << "default";
+ setStates(states);
+ setDisplayStates(states);
+
+//enable the below code to show a different widget in editor
+/*
+ if (KommanderWidget::inEditor)
+ {
+ setPixmap(KGlobal::iconLoader()->loadIcon("%{APPNAMELC}", KIcon::NoGroup, KIcon::SizeMedium));
+ setFrameStyle(QFrame::Box | QFrame::Plain);
+ setLineWidth(1);
+ setAlignment(Qt::AlignCenter);
+ }
+ else
+ setHidden(true);
+*/
+
+ KommanderPlugin::setDefaultGroup(Group::DCOP);
+
+//CHANGE THE BELOW LINES TO MATCH YOUR FUNCTIONS NAMES AND SIGNATURE
+ KommanderPlugin::registerFunction(Function1, "function1(QString widget, QString arg1, int arg2)", i18n("Call function1 with two arguments, second is optional."), 2, 3);
+ KommanderPlugin::registerFunction(Function2, "function2(QString widget)", i18n("Get a QString as a result of function2."), 1);
+
+}
+
+%{APPNAME}::~%{APPNAME}()
+{
+}
+
+QString %{APPNAME}::currentState() const
+{
+ return QString("default");
+}
+
+bool %{APPNAME}::isKommanderWidget() const
+{
+ return true;
+}
+
+QStringList %{APPNAME}::associatedText() const
+{
+ return KommanderWidget::associatedText();
+}
+
+void %{APPNAME}::setAssociatedText(const QStringList& a_atext)
+{
+ KommanderWidget::setAssociatedText(a_atext);
+}
+
+void %{APPNAME}::setPopulationText(const QString& a_text)
+{
+ KommanderWidget::setPopulationText(a_text);
+}
+
+QString %{APPNAME}::populationText() const
+{
+ return KommanderWidget::populationText();
+}
+
+void %{APPNAME}::populate()
+{
+ KommanderWidget::evalAssociatedText(populationText());
+}
+
+void %{APPNAME}::contextMenuEvent( QContextMenuEvent * e )
+{
+ e->accept();
+ QPoint p = e->globalPos();
+ emit contextMenuRequested(p.x(), p.y());
+}
+
+
+bool %{APPNAME}::isFunctionSupported(int f)
+{
+ return (f >= FirstFunction && f <= LastFunction); //see specials.h for other DCOP functions you might want to support
+}
+
+QString %{APPNAME}::handleDCOP(int function, const QStringList& args)
+{
+ switch (function)
+ {
+ case Function1:
+ //do something for Function1, like handleFunction1(arg[0], arg[1].toInt());
+ break;
+ case Function2:
+ //do something for Function2, like return handleFunction2();
+ break;
+ default:
+ return KommanderWidget::handleDCOP(function, args);
+ }
+ return QString::null;
+}
+
+#include "%{APPNAMELC}.moc"
diff --git a/kommander/working/plugintemplate/widget.h b/kommander/working/plugintemplate/widget.h
new file mode 100644
index 00000000..56e87f91
--- /dev/null
+++ b/kommander/working/plugintemplate/widget.h
@@ -0,0 +1,46 @@
+%{H_TEMPLATE}
+#ifndef %{APPNAMEUC}_WIDGET_H
+#define %{APPNAMEUC}_WIDGET_H
+
+#include <qwidget.h>
+#include <qstring.h>
+
+#include <kparts/part.h>
+
+#include <kommanderwidget.h>
+
+class QStringList;
+
+//replace QWidget with the widget you want to derive from
+class %{APPNAME}: public QWidget, public KommanderWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString populationText READ populationText WRITE setPopulationText DESIGNABLE false)
+ Q_PROPERTY(QStringList associations READ associatedText WRITE setAssociatedText DESIGNABLE false)
+ Q_PROPERTY(bool KommanderWidget READ isKommanderWidget)
+
+public:
+ %{APPNAME}(QWidget *parent, const char* name);
+ ~%{APPNAME}();
+
+ virtual bool isKommanderWidget() const;
+ virtual void setAssociatedText(const QStringList&);
+ virtual QStringList associatedText() const;
+ virtual QString currentState() const;
+ virtual QString populationText() const;
+ virtual void setPopulationText(const QString&);
+ virtual void populate();
+
+ virtual QString handleDCOP(int function, const QStringList& args);
+ virtual bool isFunctionSupported(int function);
+
+signals:
+ void contextMenuRequested(int xpos, int ypos);
+
+protected:
+ void contextMenuEvent( QContextMenuEvent * e );
+};
+
+
+#endif
diff --git a/kommander/x-kommander.desktop b/kommander/x-kommander.desktop
new file mode 100644
index 00000000..45c94003
--- /dev/null
+++ b/kommander/x-kommander.desktop
@@ -0,0 +1,55 @@
+[Desktop Entry]
+Comment=Kommander File
+Comment[bg]=Файл на Kommander
+Comment[br]=Restr Kommander
+Comment[ca]=Fitxer de Kommander
+Comment[cs]=Soubor Kommanderu
+Comment[da]=Kommander-fil
+Comment[de]=Kommander-Datei
+Comment[el]=Αρχείο Kommander
+Comment[es]=Archivo de Kommander
+Comment[et]=Kommanderi fail
+Comment[eu]=Kommander fitxategiak
+Comment[fa]=پروندۀ Kommander
+Comment[fi]=Komentotiedosto
+Comment[fr]=Fichier de Kommander
+Comment[ga]=Comhad Kommander
+Comment[gl]=Ficheiro de Kommander
+Comment[hi]=कमांडर फ़ाइल
+Comment[hu]=Kommander-fájl
+Comment[is]=Kommander skrá
+Comment[it]=File di Kommander
+Comment[ja]=Kommander ファイル
+Comment[ka]=Kommander-ის ფაილი
+Comment[lt]=Kommander byla
+Comment[ms]=Fail Kommander
+Comment[nds]=Kommander-Datei
+Comment[ne]=आदेश फाइल
+Comment[nl]=Kommander-dialoogbestand
+Comment[pa]=Kommander ਫਾਇਲ
+Comment[pl]=Plik Kommandera
+Comment[pt]=Ficheiro do Kommander
+Comment[pt_BR]=Arquivo do Kommander
+Comment[ru]=Файл Kommander
+Comment[sk]=Kommander súbor
+Comment[sl]=Datoteka Kommanderja
+Comment[sr]=Kommander-ов фајл
+Comment[sr@Latn]=Kommander-ov fajl
+Comment[sv]=Kommander-fil
+Comment[ta]=Kகட்டளை கோப்பு
+Comment[tg]=Файли Kommander
+Comment[tr]=Kommander Dosyası
+Comment[uk]=Файл Kommander
+Comment[zh_CN]=Kommander 文件
+Comment[zh_HK]=Kommander 檔案
+Comment[zh_TW]=Kommander 檔案
+Icon=widget_doc
+Type=MimeType
+MimeType=application/x-kommander
+Patterns=*.kmdr;
+X-KDE-IsAlso=application/x-executable-script
+
+[Property::X-KDE-text]
+Type=bool
+Value=true
+