Addons/gui/gtkwd
Overview
The GTKWD addon is a wd (window driver) emulator using gtk api. It allows running legacy J6 gui code within JGTK. Its main purpose is to ease porting of wd to native gtk api. Translation of wd to jgtk can be done piece by piece and less daunting. It does not encourage writing new production applications using this emulator.
Usages
Just add a require before running wd command.
require 'gtkwd'
DO NOT use load
load 'gtkwd' NB. never use 'load' unless you are debugging gtkwd itself.
Sometimes it also needs to load a related addon wdclass provides several utility classes such as jisigraph and jview.
require 'gtkwd wdclass'
J602's base library since 6.02.066 will ignore gtkwd and wdclass for load or require. In addition, gtkwd will be ignored on Android and droidwd will be ignored on desktops, so it is harmless to include a require 'droidwd gtkwd' if you want the script to run under both J602 and J701 jgtk and Android.
Migration from J602 to J701
Many packages inside J602 base library have been moved to addons. To make it run on both,
require 'font print'
will become
if. IFJ6 do. require 'font print' else. require 'general/misc/font print' end.
Project manager is completely different, but usually it just needs a new simple project file in the new .jproj format and a new init.ijs. for initialization.
NB. init 3 : 0'' if. IFJ6 do. script_z_ jpath '~system/classes/plot/afm.ijs' script_z_ jpath '~system/packages/graphics/bmp.ijs' script_z_ jpath '~system/packages/color/colortab.ijs' script_z_ jpath '~system/main/dll.ijs' script_z_ jpath '~system/main/files.ijs' script_z_ jpath '~system/packages/misc/font.ijs' script_z_ jpath '~system/main/gl2.ijs' script_z_ jpath '~system/classes/plot/jzplot.ijs' script_z_ jpath '~system/main/numeric.ijs' script_z_ jpath '~system/classes/plot/plot.ijs' script_z_ jpath '~system/main/regex.ijs' script_z_ jpath '~system/main/strings.ijs' script_z_ jpath '~system/main/trig.ijs' else. require 'afm bmp colortab dll files general/misc/font gl2 jzplot numeric plot regex strings trig' end. '' ) coclass 'ppublish'
GTKWD under jconsole
Running gtkwd applications under jconsole requires a gtk message loop. A utility verb evtloop is provided. Run it after the main program, eg,
... wd 'pshow' evtloop'' ...
The program flow will stop at evtloop and the jconsole will freeze as well until the last window created by GTKWD is closed. Note that if there are other sentences to be run after pshow, the position of evtloop should be moved accordingly.
evtloop has no effect under GTKIDE or if a gtk message loop is already running.
Incompatible Changes
- positions and sizes of widgets will be overrided by GTK's layout manager.
- position and size from wd'qformx' does not include window border and title bar. Similarly for pmove and pmovex.
- move wd'pshow' before any gl2 commands. Note that graphics addons such as plot and grid will call gl2 commands therefore it needs a wd'pshow' like this.
- gl2 commands need to be executed after wd'pshow'. Note that graphics addons such as plot and grid will call gl2 commands indirectly, a workaround could be something like this,
... wd^:(-.IFJ6) 'pshow;pshow sw_hide' NB. add this line g=. '' conew 'jzgrid' ... wd 'pshow' NB. original pshow
- gl2 commands for printing do not require any wd'pshow'. However all gl2 commands should only be run inside a print event, this is the same as that under J602.
- glpaintx from J504 is re-introduced, but do not run glpaintx inside a paint event, otherwise there will be an infinite loop.
- Values of special keys in isigraph keyboard event have been changed. Their symbolic names are now defined in jgl2 locale.
Symbol J602 value ------------------------ kbBS 08 backspace kbENTER 13 CR kbPUP 16 pageup kbPDOWN 17 pagedn kbEND 18 end kbHOME 19 home kbLEFT 20 left arrow kbUP 21 up arrow kbRIGHT 22 right arrow kbDOWN 23 down arrow kbESC 27 escape kbINS 28 insert kbDEL 29 delete
- container for subforms must be a tab control.
Limitation
- Microsoft windows features such as oleautomation, ocx, emf, richedit will not be implemented.
Un-implemented wd Commands
The following commands are not or will not be implemented.
- session manager not supported
smcolor smkeywords smsetlog sminputlog
- ole commands not supported
oleget olegetlic oleinfo oledlg oleenable oleid oleload olemethod olemethodx oleocx olerelease olesave oleset olesetlic
- other ignored commands
qhinst qhwndx qkeystate qrtf clipcopyx clippastex pcolor security setbkgnd setcolor setcolwidth setpclip setupdate settabstops tnomsgs wait
Un-implemented gl2 Commands
The following commands are not implemented.
glcapture glemfclose glemfopen glemfplay glfile glroundr
Demos
Demos are available in addons
- demos/isigraph
- demos/wd
- demos/wdplot
- games/minesweeper
- games/pousse
- games/solitaire
- general/scriptdoc
- graphics/grid
- graphics/plot
- graphics/treemap
- gui/util (cobrowse)
- math/deoptim
- math/eigenpic
- math/tabula
All of the above demos can be run from demos/wd.
load 'demos/wd/demos'
Or add the following line to launchpad and then run from launchpad.
wd;~Demos/wd/demos.ijs
Some demos may require other addons packages.
Dependency
Obviously, GTKWD requires gui/gtk for working. It also depends on the addon graphics/gl2 for isigraph and gl2 functions.
TODO
Bugs
Please report bugs with information such as GTKVER and testing platform. Provide a simple script to reproduce the bug if applicable.
Contributed by Bill Lam