home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 113 / EnigmaAmiga113CD.iso / software / sviluppo / easygui_os12 / examples / test_os12.e next >
Encoding:
Text File  |  2000-06-11  |  61.1 KB  |  1,921 lines

  1. /* A set of test GUIs using about any features of EasyGUI and/or
  2.    gadtools in a gallery style. TODO: plugins, EG_MAXW, EG_MAXH,
  3.    let me know what else!
  4.  
  5.    This code was written basically to test the EasyGUI_OS12
  6.    distribution and the gadtools13.library, but also went a good
  7.    example how EasyGUI can be used in an OO context.
  8.  
  9.    Here a short intro:
  10.  
  11.    All windows are OO objects inherited from the "gui" object,
  12.    which provides a polymorph interface to all windows. All window
  13.    objects contain the entire global data they require, so running
  14.    mutliple instances of such an object is no big deal.
  15.  
  16.    All action functions are mapped to object methods, the pointer to
  17.    the object in question is passed as the info value to each action
  18.    function. (also required for allowing multiple instances)
  19.  
  20.    All window objects are grouped to one "global" object, which allows
  21.    for cloning of all GUIs in one go (as used in the changewin demo section)
  22.  
  23.    Please do not redistribute modified versions of this code. If you have
  24.    any ideas how to make things better contact me at metamonk@yahoo.com.
  25.  
  26.    This code is Copyright (c) 2000, Ralf 'hippie2000' Steines, and
  27.    inherits the legal state from the original EasyGUI disctribution. */
  28.  
  29.  
  30. OPT PREPROCESS
  31. OPT LARGE
  32.  
  33. -> RST: Added conditional EASY_OS12 support
  34. #define EASY_OS12
  35.  
  36. #ifdef EASY_OS12
  37.   MODULE 'tools/easygui_os12'
  38. #endif
  39. #ifndef EASY_OS12
  40.   OPT OSVERSION=37
  41.   MODULE 'tools/easygui'
  42. #endif
  43.  
  44. MODULE 'tools/exceptions', 'tools/constructors',
  45.        'exec/nodes', 'exec/lists',
  46.        'libraries/gadtools', 'utility/tagitem',
  47.        'graphics/text', 'graphics/view',
  48.        'intuition/intuition','intuition/screens'
  49.  
  50. -> the base class of all windows (and it's methods)
  51.  
  52. OBJECT gui
  53.   gh:PTR TO guihandle        -> the guihandle
  54.   isopen                     -> window open bool
  55.   top                        -> top line of gui
  56.   gui                        -> gui definition
  57.   title                      -> window title
  58. /*
  59.   init()                     constructor
  60.   gui:=getgui(top)           create and get self.gui
  61.   setgh(gh)                  set to external guihandle
  62.   open()                     open the window
  63.   clean()                    called after window closed
  64.   disable(bool)              disable content of gui
  65.   set(bool)                  set all possible values
  66.   get()                      get all possible values
  67. */
  68. ENDOBJECT
  69.  
  70. -> the windows classes (and their custom methods if any)
  71.  
  72. OBJECT mainwin OF gui
  73. ENDOBJECT
  74.  
  75. OBJECT gtbuttons OF gui
  76.   check[3]:ARRAY OF LONG     -> checkmark gads
  77.   checkv[3]:ARRAY OF LONG    -> checkmark values
  78.   mxlist                     -> mx selections
  79.   mx[3]:ARRAY OF LONG        -> mx gads
  80.   mxv[3]:ARRAY OF LONG       -> mx values
  81.   button,sbutton,            -> button gads
  82.   cyclelist                  -> cycle selections
  83.   cycle[2]:ARRAY OF LONG     -> cycle gads
  84.   cyclev[2]:ARRAY OF LONG    -> cycle values
  85. ENDOBJECT
  86.  
  87. OBJECT gttexts OF gui
  88.   integer[2]:ARRAY OF LONG   -> integer gads
  89.   integerv[2]:ARRAY OF LONG  -> integer values
  90.   str[2]:ARRAY OF LONG       -> string gads
  91.   strv[2]:ARRAY OF LONG      -> string strings
  92.   num[4]:ARRAY OF LONG       -> num gads
  93.   numv[4]:ARRAY OF LONG      -> num values
  94.   text[4]:ARRAY OF LONG      -> text gads
  95.   textv[4]:ARRAY OF LONG     -> text pointers
  96. ENDOBJECT
  97.  
  98. OBJECT gtscrolls OF gui
  99.   slide[6]:ARRAY OF LONG     -> slide gads
  100.   slidev[6]:ARRAY OF LONG    -> slide values
  101.   scroll[6]:ARRAY OF LONG    -> scroll gads
  102.   scrollv[6]:ARRAY OF LONG   -> scroll values
  103. /*
  104.   set_total(bool)            set scroller's total value
  105.   set_visible(bool)          set scroller's visible value
  106. */
  107. ENDOBJECT
  108.  
  109. OBJECT gtlistvs OF gui
  110.   list1                      -> default list
  111.   list2                      -> changed list
  112.   listv[8]:ARRAY OF LONG     -> listv gads
  113.   listvv[8]:ARRAY OF LONG    -> listv values
  114. /*
  115.   set_list(bool)             set listview's list
  116. */
  117. ENDOBJECT
  118.  
  119. OBJECT gtpalettes OF gui
  120.   palette[6]:ARRAY OF LONG   -> palette gads
  121.   palettev[6]:ARRAY OF LONG  -> palette values
  122. ENDOBJECT
  123.  
  124. OBJECT egspaces OF gui
  125. ENDOBJECT
  126.  
  127. OBJECT egbevels OF gui
  128. ENDOBJECT
  129.  
  130. OBJECT gtmenus OF gui
  131.   menus1                     -> newmenu struct 1
  132.   menus2                     -> newmenu struct 2
  133.   menumx                     -> the mx to choose between
  134.   menusnum                   -> the current menus
  135. /*
  136.   change_menus(frommx,num)   change menus of this win
  137. */
  138. ENDOBJECT
  139.  
  140. OBJECT egchwin OF gui
  141.   screenmx                   -> mx to choose screen
  142.   screennum                  -> the current choice
  143.   winmx                      -> mx to choose window type
  144.   wintypenum                 -> the current choice
  145.   fontmx                     -> mx to choose font
  146.   fontnum                    -> the current choice
  147.   titlemx                    -> mx to choose window title
  148.   titlenum                   -> the current choice
  149. /*
  150.   change_screen(frommx,num)  change screen of all open windows
  151.   change_wintype(frommx,num) change decoration of all open windows
  152.   change_font(frommx,num)    change font of all open windows
  153.   change_title(num)          change title of all open windows
  154.   open_all(frombutton)       open all windows
  155.   close_all()                close all windows
  156.   block_all()                block all windows
  157.   move_all()                 move all windows
  158.   size_all()                 size all windows
  159. */
  160. ENDOBJECT
  161.  
  162. OBJECT egchgui OF gui
  163.   guilist                    -> list of all guis
  164.   guilabels                  -> and their names
  165.   guicycle                   -> cycle to choose gui
  166.   guinum                     -> the current choice
  167. ENDOBJECT
  168.  
  169. -> the global class containing all window objects and the global data
  170.  
  171. OBJECT global
  172.   mh:PTR TO multihandle      -> the multihandle for all windows
  173.   menus                      -> the menus shared to all windows
  174.   screen                     -> the screen where all goes on
  175.   wintype                    -> the decoration type of all windows
  176.   font                       -> the font (textattr) of all windows
  177.   title                      -> global title for all windows or NIL
  178.   mainwin:PTR TO mainwin
  179.   gtbuttons:PTR TO gtbuttons
  180.   gttexts:PTR TO gttexts
  181.   gtscrolls:PTR TO gtscrolls
  182.   gtlistvs:PTR TO gtlistvs
  183.   gtpalettes:PTR TO gtpalettes
  184.   egspaces:PTR TO egspaces
  185.   egbevels:PTR TO egbevels
  186.   gtmenus:PTR TO gtmenus
  187.   egchwin:PTR TO egchwin
  188.   egchgui:PTR TO egchgui
  189. /*
  190.   init()                     constructor
  191.   end()                      destructor
  192. */
  193. ENDOBJECT
  194.  
  195. -> the two global vars :)
  196.  
  197. DEF global=NIL:PTR TO global,   -> All gui objects
  198.     global2=NIL:PTR TO global,  -> A 2nd instance for changegui window
  199.  
  200.   -> These two are required for ForAll() and multiforall(). Using local vars
  201.   -> instead (which i would have preferred) crashes all !?! (EC 3.3a reg)
  202.  
  203.     x:PTR TO guihandle,
  204.     g:PTR TO gui
  205.  
  206.  
  207. /********************************************************************
  208.  * Polymorph interface to all windows + action function wrapper
  209.  ********************************************************************/
  210.  
  211. PROC init() OF gui IS EMPTY
  212.  
  213. PROC getgui(t) OF gui RETURN NIL
  214.  
  215. PROC setgh(gh) OF gui
  216.     self.gh:=gh
  217. ENDPROC
  218.  
  219. PROC open(close=NIL,clean=NIL) OF gui
  220.   DEF mygh
  221.   IF self.isopen=FALSE
  222.     self.isopen:=TRUE
  223.     addmultiA(global.mh,IF global.title THEN global.title ELSE self.title,
  224.       self.getgui([BAR]),
  225.       [ EG_CLOSE,  close,
  226.         EG_CLEAN,  IF clean THEN clean ELSE {gui_clean},
  227.         EG_INFO,   self,
  228.         EG_GHVAR,  {mygh},
  229.         EG_MENU,   global.menus,
  230.         EG_WTYPE,  global.wintype,
  231.         EG_SCRN,   global.screen,
  232.         EG_FONT,   global.font,
  233.         EG_AWPROC, {global_awp},
  234.         EG_LEFT,   Rnd(400),
  235.         EG_TOP,    Rnd(400),
  236.         TAG_DONE]
  237.     )
  238.     self.gh:=mygh
  239.   ELSE
  240.     tofront(self.gh)
  241.   ENDIF
  242. ENDPROC
  243.  
  244. -> clean(info)
  245. PROC gui_clean(gui:PTR TO gui) IS gui.clean()
  246. PROC clean() OF gui
  247.   self.isopen:=FALSE
  248.   self.gh:=NIL
  249. ENDPROC
  250.  
  251. -> button(qual*,data*,info)
  252. PROC gui_disable(d,gui:PTR TO gui) IS gui.disable(d)
  253. PROC disable(d) OF gui IS EMPTY
  254.  
  255. -> button(qual*,data*,info)
  256. PROC gui_set(d,gui:PTR TO gui) IS gui.set(d)
  257. PROC set(d) OF gui IS EMPTY
  258.  
  259. -> button(qual*,data*,info)
  260. PROC gui_get(gui:PTR TO gui) IS gui.get()
  261. PROC get() OF gui IS EMPTY
  262.  
  263.  
  264. /********************************************************************
  265.  * Buttons window
  266.  ********************************************************************/
  267.  
  268. PROC init() OF gtbuttons
  269.   DEF i
  270.   self.title:='Gadtools Buttons in EasyGUI_OS12'
  271.   self.mxlist:=['One','Two','Three',NIL]
  272.   self.cyclelist:=['Yep','Nope','Hmmm',NIL]
  273.   FOR i:=0 TO 2
  274.     self.checkv[i]:=TRUE
  275.     self.mxv[i]:=1
  276.   ENDFOR
  277.   FOR i:=0 TO 1 DO self.cyclev[i]:=1
  278. ENDPROC
  279.  
  280. PROC getgui(top) OF gtbuttons
  281.   DEF check0,check1,check2, mx0,mx1,mx2, button,sbutton, cycle0,cycle1
  282.   IF self.gui=NIL
  283.     self.gui:=
  284.       NEW [ROWS,
  285.         top,
  286.         NEW [TEXT,'Button and Sbutton are App-Buttons',NIL,FALSE,5],
  287.         NEW [BAR],
  288.         NEW [COLS,
  289.  
  290.           NEW [ROWS,
  291.  
  292.               NEW [BEVEL,
  293.                 check0:=NEW [CHECK,                         -> CHECKs
  294.                 {gtbuttons_cmv},-> action
  295.                 '_Check',       -> righttext
  296.                 self.checkv[0], -> checked
  297.                 FALSE,          -> lefttextbool
  298.                 0,              -> data
  299.                 "c",            -> key
  300.                 FALSE]          -> disabled
  301.               ],
  302.               NEW [BEVEL,
  303.                 check1:=NEW [CHECK,
  304.                 {gtbuttons_cmv},-> action
  305.                 'C_heck',       -> righttext
  306.                 self.checkv[1], -> checked
  307.                 TRUE,           -> lefttextbool
  308.                 1,              -> data
  309.                 "h",            -> key
  310.                 FALSE]          -> disabled
  311.               ],
  312.               NEW [BEVEL,
  313.                 check2:=NEW [CHECK,
  314.                 {gtbuttons_cmv},-> action
  315.                 NIL,            -> righttext
  316.                 self.checkv[2], -> checked
  317.                 FALSE,          -> lefttextbool
  318.                 2,              -> data
  319.                 NIL,            -> key
  320.                 FALSE]          -> disabled
  321.               ],
  322.               NEW [BEVEL,
  323.                 mx0:=NEW [MX,                               -> MXs
  324.                 {gtbuttons_mxv},-> action
  325.                 NIL,            -> righttext
  326.                 self.mxlist,    -> list
  327.                 FALSE,          -> lefttextbool
  328.                 self.mxv[0],    -> current
  329.                 0,              -> data
  330.                 NIL,            -> key
  331.                 FALSE]          -> disabled
  332.               ]
  333.  
  334.           ],
  335.  
  336.           NEW [ROWS,
  337.  
  338.               NEW [BEVEL,
  339.                 mx1:=NEW [MX,
  340.                 {gtbuttons_mxv},-> action
  341.                 '_Mx',          -> righttext
  342.                 self.mxlist,    -> list
  343.                 FALSE,          -> lefttextbool
  344.                 self.mxv[1],    -> current
  345.                 1,              -> data
  346.                 "m",            -> key
  347.                 FALSE]          -> disabled
  348.               ],
  349.               NEW [BEVEL,
  350.                 mx2:=NEW [MX,
  351.                 {gtbuttons_mxv},-> action
  352.                 'M_x',          -> righttext
  353.                 self.mxlist,    -> list
  354.                 TRUE,           -> lefttextbool
  355.                 self.mxv[2],    -> current
  356.                 2,              -> data
  357.                 "x",            -> key
  358.                 FALSE]          -> disabled
  359.               ]
  360.  
  361.  
  362.           ],
  363.  
  364.           NEW [ROWS,
  365.  
  366.               NEW [BEVEL,
  367.                 button:=NEW [BUTTON,                         -> BUTTONS
  368.                 {gtbuttons_btv},-> action
  369.                 '_Button',      -> text
  370.                 '',             -> data
  371.                 "b",            -> key
  372.                 {gtbuttons_gaw},-> awproc
  373.                 FALSE]          -> disabled
  374.               ],
  375.               NEW [BEVEL,
  376.                 sbutton:=NEW [SBUTTON,
  377.                 {gtbuttons_btv},-> action
  378.                 '_SButton',     -> text
  379.                 's',            -> data
  380.                 "s",            -> key
  381.                 {gtbuttons_gaw},-> awproc
  382.                 FALSE]          -> disabled
  383.               ],
  384.               NEW [BEVEL,
  385.                 cycle0:=NEW [CYCLE,                           -> CYCLEs
  386.                 {gtbuttons_cyv},-> action
  387.                 'C_ycle',       -> lefttext
  388.                 self.cyclelist, -> list
  389.                 self.cyclev[0], -> current
  390.                 0,              -> data
  391.                 "y",            -> key
  392.                 FALSE]          -> disabled
  393.               ],
  394.               NEW [BEVEL,
  395.                 cycle1:=NEW [CYCLE,
  396.                 {gtbuttons_cyv},-> action
  397.                 NIL,            -> lefttext
  398.                 self.cyclelist, -> list
  399.                 self.cyclev[1], -> current
  400.                 1,              -> data
  401.                 NIL,            -> key
  402.                 FALSE]          -> disabled
  403.               ]
  404.  
  405.           ]
  406.  
  407.         ],
  408.         NEW [BAR],
  409.         NEW [EQCOLS,
  410.           NEW [BUTTON,{gui_disable},'Disable',TRUE],
  411.           NEW [BUTTON,{gui_disable},'Enable',FALSE],
  412.           NEW [BUTTON,{gui_set},'Set',TRUE],
  413.           NEW [BUTTON,{gui_set},'Reset',FALSE],
  414.           NEW [BUTTON,{gui_get},'Get',TRUE],
  415.           NEW [BUTTON,0,'Close']
  416.         ]
  417.       ]
  418.     self.check[0]:=check0; self.check[1]:=check1; self.check[2]:=check2
  419.     self.mx[0]:=mx0; self.mx[1]:=mx1; self.mx[2]:=mx2
  420.     self.button:=button; self.sbutton:=sbutton
  421.     self.cycle[0]:=cycle0; self.cycle[1]:=cycle1
  422.   ENDIF
  423. ENDPROC self.gui
  424.  
  425. PROC disable(bool) OF gtbuttons
  426.   DEF i
  427.   FOR i:=0 TO 2
  428.     setdisabled(self.gh,self.check[i],bool)
  429.     setdisabled(self.gh,self.mx[i],bool)
  430.   ENDFOR
  431.   setdisabled(self.gh,self.button,bool)
  432.   setdisabled(self.gh,self.sbutton,bool)
  433.   FOR i:=0 TO 1
  434.     setdisabled(self.gh,self.cycle[i],bool)
  435.   ENDFOR
  436. ENDPROC
  437.  
  438. PROC set(bool) OF gtbuttons
  439.   DEF new,i
  440.   new:=IF bool THEN FALSE ELSE TRUE
  441.   FOR i:=0 TO 2
  442.     self.checkv[i]:=new
  443.     setcheck(self.gh,self.check[i],new)
  444.   ENDFOR
  445.   new:=IF bool THEN 2 ELSE 1
  446.   FOR i:=0 TO 2
  447.     self.mxv[i]:=new
  448.     setmx(self.gh,self.mx[i],new)
  449.   ENDFOR
  450.   new:=IF bool THEN 0 ELSE 1
  451.   FOR i:=0 TO 1
  452.     self.cyclev[i]:=new
  453.     setcycle(self.gh,self.cycle[i],new)
  454.   ENDFOR
  455. ENDPROC
  456.  
  457. PROC get() OF gtbuttons
  458.   DEF i
  459.   WriteF('---All values:\n')
  460.   FOR i:=0 TO 2 DO WriteF('check\d: \d\n',i,self.checkv[i])
  461.   FOR i:=0 TO 2 DO WriteF('mx\d: \d\n',i,self.mxv[i])
  462.   FOR i:=0 TO 1 DO WriteF('cycle\d: \d\n',i,self.cyclev[i])
  463.   WriteF('---\n')
  464. ENDPROC
  465.  
  466. -> check(qual*,data*,info,checkedbool)
  467. PROC gtbuttons_cmv(num,gui:PTR TO gtbuttons,val) IS setdisp('check',gui.checkv,num,val)
  468.  
  469. -> mx(qual*,data*,info,num_selected)
  470. PROC gtbuttons_mxv(num,gui:PTR TO gtbuttons,val) IS setdisp('mx',gui.mxv,num,val)
  471.  
  472. -> button(qual*,data*,info)
  473. PROC gtbuttons_btv(str,i) IS WriteF('\sbutton=clicked\n',str)
  474.  
  475. -> appwin(data*,info,awmsg:PTR TO appmessage)
  476. PROC gtbuttons_gaw(str,gui:PTR TO gtbuttons,a) IS WriteF('Dropped in \sbutton\n',str)
  477.  
  478. -> cycle(qual*,data*,info,num_selected)
  479. PROC gtbuttons_cyv(num,gui:PTR TO gtbuttons,val) IS setdisp('cycle',gui.cyclev,num,val)
  480.  
  481.  
  482. /********************************************************************
  483.  * Texts window
  484.  ********************************************************************/
  485.  
  486. PROC init() OF gttexts
  487.   DEF i
  488.   self.title:='Gadtools Texts in EasyGUI_OS12'
  489.   FOR i:=0 TO 1
  490.     self.integerv[i]:=123
  491.     self.strv[i]:=String(50)
  492.     StrCopy(self.strv[i],'bla')
  493.   ENDFOR
  494.   FOR i:=0 TO 3
  495.     self.numv[i]:=123
  496.     self.textv[i]:='bla'
  497.   ENDFOR
  498. ENDPROC
  499.  
  500. PROC getgui(top) OF gttexts
  501.   DEF integer0,integer1, str0,str1, num0,num1,num2,num3, text0,text1,text2,text3
  502.   IF self.gui=NIL
  503.     self.gui:=
  504.       NEW [ROWS,
  505.         top,
  506.         NEW [TEXT,'The string gadgets are App-Gadgets',NIL,FALSE,5],
  507.         NEW [BAR],
  508.         NEW [COLS,
  509.  
  510.           NEW [ROWS,
  511.  
  512.               NEW [BEVEL,
  513.                 integer0:=NEW [INTEGER,                   -> INTEGERs
  514.                 {gttexts_itv},   -> action
  515.                 '_Integer',      -> lefttext
  516.                 self.integerv[0],-> value
  517.                 5,               -> relsize
  518.                 0,               -> data
  519.                 "i",             -> key
  520.                 FALSE]           -> disabled
  521.               ],
  522.               NEW [BEVEL,
  523.                 integer1:=NEW [INTEGER,
  524.                 {gttexts_itv},   -> action
  525.                 NIL,             -> lefttext
  526.                 self.integerv[0],-> value
  527.                 5,               -> relsize
  528.                 1,               -> data
  529.                 NIL,             -> key
  530.                 FALSE]           -> disabled
  531.               ],
  532.               NEW [BEVEL,
  533.                 str0:=NEW [STR,                             -> STRs
  534.                 {gttexts_stv},   -> action
  535.                 '_Str',          -> lefttext
  536.                 self.strv[0],    -> initial
  537.                 50,              -> maxchars
  538.                 5,               -> relsize
  539.                 FALSE,           -> overbool
  540.                 0,               -> data
  541.                 "s",             -> key
  542.                 {gttexts_gaw},   -> awproc
  543.                 FALSE]           -> disabled
  544.               ],
  545.               NEW [BEVEL,
  546.                 str1:=NEW [STR,
  547.                 {gttexts_stv},   -> action
  548.                 NIL,             -> lefttext
  549.                 self.strv[1],    -> initial
  550.                 50,              -> maxchars
  551.                 5,               -> relsize
  552.                 FALSE,           -> overbool
  553.                 1,               -> data
  554.                 NIL,             -> key
  555.                 {gttexts_gaw},   -> awproc
  556.                 FALSE]           -> disabled
  557.               ]
  558.  
  559.           ],
  560.  
  561.           NEW [ROWS,
  562.  
  563.               NEW [BEVEL,
  564.                 num0:=NEW [NUM,                             -> NUMs
  565.                 self.numv[0],    -> value
  566.                 'Num',           -> lefttext  NO KEY!
  567.                 TRUE,            -> borderbool
  568.                 5]               -> relsize
  569.               ],
  570.               NEW [BEVEL,
  571.                 num1:=NEW [NUM,
  572.                 self.numv[1],    -> value
  573.                 'Num',           -> lefttext  NO KEY!
  574.                 FALSE,           -> borderbool
  575.                 5]               -> relsize
  576.               ],
  577.               NEW [BEVEL,
  578.                 num2:=NEW [NUM,
  579.                 self.numv[2],    -> value
  580.                 NIL,             -> lefttext  NO KEY!
  581.                 TRUE,            -> borderbool
  582.                 5]               -> relsize
  583.               ],
  584.               NEW [BEVEL,
  585.                 num3:=NEW [NUM,
  586.                 self.numv[3],    -> value
  587.                 NIL,             -> lefttext  NO KEY!
  588.                 FALSE,           -> borderbool
  589.                 5]               -> relsize
  590.               ]
  591.  
  592.           ],
  593.  
  594.           NEW [ROWS,
  595.  
  596.               NEW [BEVEL,
  597.                 text0:=NEW [TEXT,                             -> TEXTs
  598.                 self.textv[0],   -> string
  599.                 'Text',          -> lefttext  NO KEY!
  600.                 TRUE,            -> borderbool
  601.                 5]               -> relsize
  602.               ],
  603.               NEW [BEVEL,
  604.                 text1:=NEW [TEXT,
  605.                 self.textv[1],   -> string
  606.                 'Text',          -> lefttext  NO KEY!
  607.                 FALSE,           -> borderbool
  608.                 5]               -> relsize
  609.               ],
  610.               NEW [BEVEL,
  611.                 text2:=NEW [TEXT,
  612.                 self.textv[2],   -> string
  613.                 NIL,             -> lefttext  NO KEY!
  614.                 TRUE,            -> borderbool
  615.                 5]               -> relsize
  616.               ],
  617.               NEW [BEVEL,
  618.                 text3:=NEW [TEXT,
  619.                 self.textv[3],   -> string
  620.                 NIL,             -> lefttext  NO KEY!
  621.                 FALSE,           -> borderbool
  622.                 5]               -> relsize
  623.               ]
  624.  
  625.           ]
  626.  
  627.         ],
  628.         NEW [BAR],
  629.         NEW [EQCOLS,
  630.           NEW [BUTTON,{gui_disable},'Disable',TRUE],
  631.           NEW [BUTTON,{gui_disable},'Enable',FALSE],
  632.           NEW [BUTTON,{gui_set},'Set',TRUE],
  633.           NEW [BUTTON,{gui_set},'Reset',FALSE],
  634.           NEW [BUTTON,{gui_get},'Get',TRUE],
  635.           NEW [BUTTON,0,'Close']
  636.         ]
  637.       ]
  638.     self.integer[0]:=integer0; self.integer[1]:=integer1
  639.     self.str[0]:=str0; self.str[1]:=str1
  640.     self.num[0]:=num0; self.num[1]:=num1; self.num[2]:=num2; self.num[3]:=num3
  641.     self.text[0]:=text0; self.text[1]:=text1; self.text[2]:=text2; self.text[3]:=text3
  642.   ENDIF
  643. ENDPROC self.gui
  644.  
  645. PROC disable(bool) OF gttexts
  646.   DEF i
  647.   FOR i:=0 TO 1
  648.     setdisabled(self.gh,self.integer[i],bool)
  649.     setdisabled(self.gh,self.str[i],bool)
  650.   ENDFOR
  651.   FOR i:=0 TO 3
  652.     setdisabled(self.gh,self.num[i],bool)
  653.     setdisabled(self.gh,self.text[i],bool)
  654.   ENDFOR
  655. ENDPROC
  656.  
  657. PROC set(bool) OF gttexts
  658.   DEF new,i
  659.   new:=IF bool THEN 432 ELSE 123
  660.   FOR i:=0 TO 1
  661.     self.integerv[i]:=new
  662.     setinteger(self.gh,self.integer[i],new)
  663.   ENDFOR
  664.   FOR i:=0 TO 3
  665.     self.numv[i]:=new
  666.     setnum(self.gh,self.num[i],new)
  667.   ENDFOR
  668.   new:=IF bool THEN 'blurp' ELSE 'bla'
  669.   FOR i:=0 TO 1
  670.     setstr(self.gh,self.str[i],new)
  671.   ENDFOR
  672.   FOR i:=0 TO 3
  673.     self.textv[i]:=new
  674.     settext(self.gh,self.text[i],new)
  675.   ENDFOR
  676. ENDPROC
  677.  
  678. PROC get() OF gttexts
  679.   DEF i
  680.   WriteF('---All values:\n')
  681.   FOR i:=0 TO 1
  682.     self.integerv[i]:=getinteger(self.gh,self.integer[i])
  683.     WriteF('integer\d: \d\n',i,self.integerv[i])
  684.   ENDFOR
  685.   FOR i:=0 TO 1
  686.     getstr(self.gh,self.str[i])
  687.     WriteF('str\d: \s\n',i,self.strv[i])
  688.   ENDFOR
  689.   FOR i:=0 TO 3 DO WriteF('num\d: \d\n',i,self.numv[i])
  690.   FOR i:=0 TO 3 DO WriteF('text\d: \s\n',i,self.textv[i])
  691.   WriteF('---\n')
  692. ENDPROC
  693.  
  694. -> appwin(data*,info,awmsg:PTR TO appmessage)
  695. PROC gttexts_gaw(num,gui:PTR TO gttexts,a) IS WriteF('Dropped in str\d\n',num)
  696.  
  697. -> integer(qual*,data*,info,newnum)
  698. PROC gttexts_itv(num,gui:PTR TO gttexts,val) IS setdisp('integer',gui.integerv,num,val)
  699.  
  700. -> (qual*,data*,info,string)
  701. PROC gttexts_stv(num,i,str) IS dispstr('str',num,str)
  702.  
  703.  
  704. /********************************************************************
  705.  * Sliders + Scrollers window
  706.  ********************************************************************/
  707.  
  708. PROC init() OF gtscrolls
  709.   DEF i
  710.   self.title:='Gadtools Sliders + Scrollers in EasyGUI_OS12'
  711.   FOR i:=0 TO 5 DO self.slidev[i]:=20
  712.   FOR i:=0 TO 1 DO self.scrollv[i]:=20
  713. ENDPROC
  714.  
  715. PROC getgui(top) OF gtscrolls
  716.   DEF scroll0,scroll1, slide0,slide1,slide2,slide3,slide4,slide5
  717.   IF self.gui=NIL
  718.     self.gui:=
  719.       NEW [ROWS,
  720.         top,
  721.         NEW [COLS,
  722.  
  723.           NEW [BUTTON,{gtscrolls_settotal},'Set Total',TRUE],
  724.           NEW [BUTTON,{gtscrolls_settotal},'Reset Total',FALSE],
  725.           NEW [BUTTON,{gtscrolls_setvisible},'Set Visible',TRUE],
  726.           NEW [BUTTON,{gtscrolls_setvisible},'Reset Visible',FALSE],
  727.           NEW [TEXT,' keys: V+H',NIL,FALSE,5]
  728.  
  729.         ],
  730.         NEW [BAR],
  731.         NEW [COLS,
  732.  
  733.               NEW [BEVEL,
  734.                 scroll0:=NEW [SCROLL,                     -> SCROLLs
  735.                 {gtscrolls_scv}, -> action
  736.                 TRUE,            -> isvert
  737.                 400,             -> total
  738.                 self.scrollv[0], -> top
  739.                 20,              -> visible
  740.                 2,               -> relsize
  741.                 0,               -> data
  742.                 "v",             -> key
  743.                 FALSE]           -> disabled
  744.               ],
  745.               NEW [BEVEL,
  746.                 slide0:=NEW [SLIDE,                       -> SLIDEs
  747.                 {gtscrolls_slv}, -> action
  748.                 '_Slider     ',  -> lefttext
  749.                 TRUE,            -> isvert
  750.                 0,               -> min
  751.                 999,             -> max
  752.                 self.slidev[0],  -> cur
  753.                 2,               -> relsize
  754.                 '%3ld',          -> levelformat
  755.                 0,               -> data
  756.                 "s",             -> key
  757.                 FALSE]           -> disabled
  758.               ],
  759.               NEW [BEVEL,
  760.                 slide1:=NEW [SLIDE,
  761.                 {gtscrolls_slv}, -> action
  762.                 '    ',          -> lefttext
  763.                 TRUE,            -> isvert
  764.                 0,               -> min
  765.                 999,             -> max
  766.                 self.slidev[1],  -> cur
  767.                 2,               -> relsize
  768.                 '%3ld',          -> levelformat
  769.                 1,               -> data
  770.                 NIL,             -> key
  771.                 FALSE]           -> disabled
  772.               ],
  773.               NEW [BEVEL,
  774.                 slide2:=NEW [SLIDE,
  775.                 {gtscrolls_slv}, -> action
  776.                 NIL,             -> lefttext
  777.                 TRUE,            -> isvert
  778.                 0,               -> min
  779.                 999,             -> max
  780.                 self.slidev[2],  -> cur
  781.                 2,               -> relsize
  782.                 '',              -> levelformat
  783.                 2,               -> data
  784.                 NIL,             -> key
  785.                 FALSE]           -> disabled
  786.               ],
  787.  
  788.           NEW [ROWS,
  789.  
  790.               NEW [BEVEL,
  791.                 scroll1:=NEW [SCROLL,                     -> SCROLLs
  792.                 {gtscrolls_scv}, -> action
  793.                 FALSE,           -> isvert
  794.                 400,             -> total
  795.                 self.scrollv[1], -> top
  796.                 20,              -> visible
  797.                 2,               -> relsize
  798.                 1,               -> data
  799.                 "h",             -> key
  800.                 FALSE]           -> disabled
  801.               ],
  802.               NEW [BEVEL,
  803.                 slide3:=NEW [SLIDE,                       -> SLIDEs
  804.                 {gtscrolls_slv}, -> action
  805.                 'S_lider     ',  -> lefttext
  806.                 FALSE,           -> isvert
  807.                 0,               -> min
  808.                 999,             -> max
  809.                 self.slidev[3],  -> cur
  810.                 2,               -> relsize
  811.                 '%3ld',          -> levelformat
  812.                 3,               -> data
  813.                 "l",             -> key
  814.                 FALSE]           -> disabled
  815.               ],
  816.               NEW [BEVEL,
  817.                 slide4:=NEW [SLIDE,
  818.                 {gtscrolls_slv}, -> action
  819.                 '    ',          -> lefttext
  820.                 FALSE,           -> isvert
  821.                 0,               -> min
  822.                 999,             -> max
  823.                 self.slidev[4],  -> cur
  824.                 2,               -> relsize
  825.                 '%3ld',          -> levelformat
  826.                 4,               -> data
  827.                 NIL,             -> key
  828.                 FALSE]           -> disabled
  829.               ],
  830.               NEW [BEVEL,
  831.                 slide5:=NEW [SLIDE,
  832.                 {gtscrolls_slv}, -> action
  833.                 NIL,             -> lefttext
  834.                 FALSE,           -> isvert
  835.                 0,               -> min
  836.                 999,             -> max
  837.                 self.slidev[5],  -> cur
  838.                 2,               -> relsize
  839.                 '',              -> levelformat
  840.                 5,               -> data
  841.                 NIL,             -> key
  842.                 FALSE]           -> disabled
  843.               ]
  844.  
  845.           ]
  846.  
  847.         ],
  848.         NEW [BAR],
  849.         NEW [EQCOLS,
  850.           NEW [BUTTON,{gui_disable},'Disable',TRUE],
  851.           NEW [BUTTON,{gui_disable},'Enable',FALSE],
  852.           NEW [BUTTON,{gui_set},'Set',TRUE],
  853.           NEW [BUTTON,{gui_set},'Reset',FALSE],
  854.           NEW [BUTTON,{gui_get},'Get',TRUE],
  855.           NEW [BUTTON,0,'Close']
  856.         ]
  857.       ]
  858.     self.scroll[0]:=scroll0; self.scroll[1]:=scroll1
  859.     self.slide[0]:=slide0; self.slide[1]:=slide1; self.slide[2]:=slide2
  860.     self.slide[3]:=slide3; self.slide[4]:=slide4; self.slide[5]:=slide5
  861.   ENDIF
  862. ENDPROC self.gui
  863.  
  864. PROC disable(bool) OF gtscrolls
  865.   DEF i
  866.   FOR i:=0 TO 1 DO setdisabled(self.gh,self.scroll[i],bool)
  867.   FOR i:=0 TO 5 DO setdisabled(self.gh,self.slide[i],bool)
  868. ENDPROC
  869.  
  870. PROC set(bool) OF gtscrolls
  871.   DEF new,i
  872.   new:=IF bool THEN 200 ELSE 20
  873.   FOR i:=0 TO 1
  874.     self.scrollv[i]:=new
  875.     setscrolltop(self.gh,self.scroll[i],new)
  876.   ENDFOR
  877.   FOR i:=0 TO 5
  878.     self.slidev[i]:=new
  879.     setslide(self.gh,self.slide[i],new)
  880.   ENDFOR
  881. ENDPROC
  882.  
  883. PROC get() OF gtscrolls
  884.   DEF i
  885.   WriteF('---All values:\n')
  886.   FOR i:=0 TO 1 DO WriteF('scroll\d: \d\n',i,self.scrollv[i])
  887.   FOR i:=0 TO 5 DO WriteF('slide\d: \d\n',i,self.slidev[i])
  888.   WriteF('---\n')
  889. ENDPROC
  890.  
  891. -> button(qual*,data*,info)
  892. PROC gtscrolls_settotal(bool,gui:PTR TO gtscrolls) IS gui.set_total(bool)
  893.  
  894. PROC set_total(bool) OF gtscrolls
  895.   DEF new,i
  896.   new:=IF bool THEN 250 ELSE 400
  897.   FOR i:=0 TO 1 DO setscrolltotal(self.gh,self.scroll[i],new)
  898. ENDPROC
  899.  
  900. -> button(qual*,data*,info)
  901. PROC gtscrolls_setvisible(bool,gui:PTR TO gtscrolls) IS gui.set_visible(bool)
  902.  
  903. PROC set_visible(bool) OF gtscrolls
  904.   DEF new,i
  905.   new:=IF bool THEN 50 ELSE 20
  906.   FOR i:=0 TO 1 DO setscrollvisible(self.gh,self.scroll[i],new)
  907. ENDPROC
  908.  
  909. -> slide(qual*,data*,info,cur)
  910. PROC gtscrolls_slv(num,gui:PTR TO gtscrolls,val) IS setdisp('slide',gui.slidev,num,val)
  911.  
  912. -> scroll(qual*,data*,info,curtop)
  913. PROC gtscrolls_scv(num,gui:PTR TO gtscrolls,val) IS setdisp('scroll',gui.scrollv,num,val)
  914.  
  915.  
  916. /********************************************************************
  917.  * Listviews window
  918.  ********************************************************************/
  919.  
  920. PROC init() OF gtlistvs
  921.   DEF i
  922.   self.title:='Gadtools Listviews in EasyGUI_OS12'
  923.   self.list1:=makeexeclist(['zero','one','two','three','four','five','six','seven',
  924.                             'eight','nine','ten','eleven','twelve','thirteen','fourteen'])
  925.   self.list2:=makeexeclist(['null','eins','zwei','drei','vier','fuenf','sechs','sieben',
  926.                             'acht','neun','zehn','elf','zwoelf','dreizehn','vierzehn'])
  927.   FOR i:=0 TO 7 DO self.listvv[i]:=2
  928. ENDPROC
  929.  
  930. PROC getgui(top) OF gtlistvs
  931.   DEF listv0,listv1,listv2,listv3,listv4,listv5,listv6,listv7
  932.   IF self.gui=NIL
  933.     self.gui:=
  934.       NEW [ROWS,
  935.         top,
  936.         NEW [COLS,
  937.  
  938.           NEW [BUTTON,{gtlistvs_setlist},'Set List',TRUE],
  939.           NEW [BUTTON,{gtlistvs_setlist},'Reset List',FALSE],
  940.           NEW [SPACEH],
  941.           NEW [TEXT,'All listviews are App-Gadgets',NIL,FALSE,5]
  942.  
  943.         ],
  944.         NEW [BAR],
  945.         NEW [COLS,
  946.  
  947.               NEW [BEVEL,
  948.                 listv0:=NEW [LISTV,                     -> LISTVs
  949.                 {gtlistvs_lvv},  -> action
  950.                 '_Listview',     -> textabove
  951.                 5,               -> relx
  952.                 5,               -> rely
  953.                 self.list1,      -> execlist
  954.                 FALSE,           -> readbool
  955.                 0,               -> selected  0=none, 1=highlight/show selected
  956.                 self.listvv[0],  -> current
  957.                 0,               -> data
  958.                 "l",             -> key
  959.                 {gtlistvs_gaw},  -> awproc
  960.                 FALSE]           -> disabled
  961.               ],
  962.               NEW [BEVEL,
  963.                 listv1:=NEW [LISTV,
  964.                 {gtlistvs_lvv},  -> action
  965.                 NIL,             -> textabove
  966.                 5,               -> relx
  967.                 5,               -> rely
  968.                 self.list1,      -> execlist
  969.                 FALSE,           -> readbool
  970.                 0,               -> selected  0=none, 1=highlight/show selected
  971.                 self.listvv[1],  -> current
  972.                 1,               -> data
  973.                 NIL,             -> key
  974.                 {gtlistvs_gaw},  -> awproc
  975.                 FALSE]           -> disabled
  976.               ],
  977.               NEW [BEVEL,
  978.                 listv2:=NEW [LISTV,
  979.                 {gtlistvs_lvv},  -> action
  980.                 'L_istview',     -> textabove
  981.                 5,               -> relx
  982.                 5,               -> rely
  983.                 self.list1,      -> execlist
  984.                 FALSE,           -> readbool
  985.                 1,               -> selected  0=none, 1=highlight/show selected
  986.                 self.listvv[2],  -> current
  987.                 2,               -> data
  988.                 "i",             -> key
  989.                 {gtlistvs_gaw},  -> awproc
  990.                 FALSE]           -> disabled
  991.               ],
  992.               NEW [BEVEL,
  993.                 listv3:=NEW [LISTV,
  994.                 {gtlistvs_lvv},  -> action
  995.                 NIL,             -> textabove
  996.                 5,               -> relx
  997.                 5,               -> rely
  998.                 self.list1,      -> execlist
  999.                 FALSE,           -> readbool
  1000.                 1,               -> selected  0=none, 1=highlight/show selected
  1001.                 self.listvv[3],  -> current
  1002.                 3,               -> data
  1003.                 NIL,             -> key
  1004.                 {gtlistvs_gaw},  -> awproc
  1005.                 FALSE]           -> disabled
  1006.               ]
  1007.  
  1008.         ],
  1009.         NEW [TEXT,'Above are normal listviews, below should be "read only" ones:',NIL,FALSE,5],
  1010.         NEW [COLS,
  1011.  
  1012.               NEW [BEVEL,
  1013.                 listv4:=NEW [LISTV,                     -> LISTVs
  1014.                 {gtlistvs_lvv},  -> action
  1015.                 'Li_stview',     -> textabove
  1016.                 5,               -> relx
  1017.                 5,               -> rely
  1018.                 self.list1,      -> execlist
  1019.                 TRUE,            -> readbool
  1020.                 0,               -> selected  0=none, 1=highlight/show selected
  1021.                 self.listvv[4],  -> current
  1022.                 4,               -> data
  1023.                 "s",             -> key
  1024.                 {gtlistvs_gaw},  -> awproc
  1025.                 FALSE]           -> disabled
  1026.               ],
  1027.               NEW [BEVEL,
  1028.                 listv5:=NEW [LISTV,
  1029.                 {gtlistvs_lvv},  -> action
  1030.                 NIL,             -> textabove
  1031.                 5,               -> relx
  1032.                 5,               -> rely
  1033.                 self.list1,      -> execlist
  1034.                 TRUE,            -> readbool
  1035.                 0,               -> selected  0=none, 1=highlight/show selected
  1036.                 self.listvv[5],  -> current
  1037.                 5,               -> data
  1038.                 NIL,             -> key
  1039.                 {gtlistvs_gaw},  -> awproc
  1040.                 FALSE]           -> disabled
  1041.               ],
  1042.               NEW [BEVEL,
  1043.                 listv6:=NEW [LISTV,
  1044.                 {gtlistvs_lvv},  -> action
  1045.                 'Lis_tview',     -> textabove
  1046.                 5,               -> relx
  1047.                 5,               -> rely
  1048.                 self.list1,      -> execlist
  1049.                 TRUE,            -> readbool
  1050.                 1,               -> selected  0=none, 1=highlight/show selected
  1051.                 self.listvv[6],  -> current
  1052.                 6,               -> data
  1053.                 "t",             -> key
  1054.                 {gtlistvs_gaw},  -> awproc
  1055.                 FALSE]           -> disabled
  1056.               ],
  1057.               NEW [BEVEL,
  1058.                 listv7:=NEW [LISTV,
  1059.                 {gtlistvs_lvv},  -> action
  1060.                 NIL,             -> textabove
  1061.                 5,               -> relx
  1062.                 5,               -> rely
  1063.                 self.list1,      -> execlist
  1064.                 TRUE,            -> readbool
  1065.                 1,               -> selected  0=none, 1=highlight/show selected
  1066.                 self.listvv[7],  -> current
  1067.                 7,               -> data
  1068.                 NIL,             -> key
  1069.                 {gtlistvs_gaw},  -> awproc
  1070.                 FALSE]           -> disabled
  1071.               ]
  1072.  
  1073.         ],
  1074.         NEW [BAR],
  1075.         NEW [EQCOLS,
  1076.           NEW [BUTTON,{gui_disable},'Disable',TRUE],
  1077.           NEW [BUTTON,{gui_disable},'Enable',FALSE],
  1078.           NEW [BUTTON,{gui_set},'Set',TRUE],
  1079.           NEW [BUTTON,{gui_set},'Reset',FALSE],
  1080.           NEW [BUTTON,{gui_get},'Get',TRUE],
  1081.           NEW [BUTTON,0,'Close']
  1082.         ]
  1083.       ]
  1084.     self.listv[0]:=listv0; self.listv[1]:=listv1; self.listv[2]:=listv2; self.listv[3]:=listv3
  1085.     self.listv[4]:=listv4; self.listv[5]:=listv5; self.listv[6]:=listv6; self.listv[7]:=listv7
  1086.   ENDIF
  1087. ENDPROC self.gui
  1088.  
  1089. PROC disable(bool) OF gtlistvs
  1090.   DEF i
  1091.   FOR i:=0 TO 7 DO setdisabled(self.gh,self.listv[i],bool)
  1092. ENDPROC
  1093.  
  1094. PROC set(bool) OF gtlistvs
  1095.   DEF new,i
  1096.   new:=IF bool THEN 6 ELSE 2
  1097.   FOR i:=0 TO 7
  1098.     self.listvv[i]:=new
  1099.     setlistvselected(self.gh,self.listv[i],new)
  1100.     setlistvvisible(self.gh,self.listv[i],new)
  1101.   ENDFOR
  1102. ENDPROC
  1103.  
  1104. PROC get() OF gtlistvs
  1105.   DEF i
  1106.   WriteF('---All values:\n')
  1107.   FOR i:=0 TO 7 DO WriteF('listv\d: \d\n',i,self.listvv[i])
  1108.   WriteF('---\n')
  1109. ENDPROC
  1110.  
  1111. -> button(qual*,data*,info)
  1112. PROC gtlistvs_setlist(bool,gui:PTR TO gtlistvs) IS gui.set_list(bool)
  1113.  
  1114. PROC set_list(bool) OF gtlistvs
  1115.   DEF new,i
  1116.   new:=IF bool THEN self.list2 ELSE self.list1
  1117.   FOR i:=0 TO 7
  1118.     setlistvlabels(self.gh,self.listv[i],new)
  1119.   ENDFOR
  1120. ENDPROC
  1121.  
  1122. -> (qual*,data*,info,num_selected)
  1123. PROC gtlistvs_lvv(num,gui:PTR TO gtlistvs,val) IS setdisp('listv',gui.listvv,num,val)
  1124.  
  1125. -> appwin(data*,info,awmsg:PTR TO appmessage)
  1126. PROC gtlistvs_gaw(num,gui:PTR TO gtlistvs,a) IS WriteF('Dropped in listv\d\n',num)
  1127.  
  1128.  
  1129. /********************************************************************
  1130.  * Palettes window
  1131.  ********************************************************************/
  1132.  
  1133. PROC init() OF gtpalettes
  1134.   DEF i
  1135.   self.title:='Gadtools Palettes in EasyGUI_OS12'
  1136.   FOR i:=0 TO 5 DO self.palettev[i]:=2
  1137. ENDPROC
  1138.  
  1139. PROC getgui(top) OF gtpalettes
  1140.   DEF palette0,palette1,palette2,palette3,palette4,palette5
  1141.   IF self.gui=NIL
  1142.     self.gui:=
  1143.       NEW [ROWS,
  1144.         top,
  1145.         NEW [COLS,
  1146.  
  1147.               NEW [BEVEL,
  1148.                 palette0:=NEW [PALETTE,                     -> PALETTEs
  1149.                 {gtpalettes_plv},-> action
  1150.                 '_Palette',      -> lefttext
  1151.                 3,               -> depth
  1152.                 1,               -> relx
  1153.                 5,               -> rely
  1154.                 self.palettev[0],-> current
  1155.                 0,               -> data
  1156.                 "p",             -> key
  1157.                 FALSE]           -> disabled
  1158.               ],
  1159.               NEW [BEVEL,
  1160.                 palette1:=NEW [PALETTE,
  1161.                 {gtpalettes_plv},-> action
  1162.                 NIL,             -> lefttext
  1163.                 3,               -> depth
  1164.                 1,               -> relx
  1165.                 5,               -> rely
  1166.                 self.palettev[1],-> current
  1167.                 1,               -> data
  1168.                 NIL,             -> key
  1169.                 FALSE]           -> disabled
  1170.               ],
  1171.               NEW [BEVEL,
  1172.                 palette2:=NEW [PALETTE,
  1173.                 {gtpalettes_plv},-> action
  1174.                 NIL,             -> lefttext
  1175.                 5,               -> depth
  1176.                 1,               -> relx
  1177.                 5,               -> rely
  1178.                 self.palettev[2],-> current
  1179.                 2,               -> data
  1180.                 NIL,             -> key
  1181.                 FALSE]           -> disabled
  1182.               ],
  1183.  
  1184.           NEW [ROWS,
  1185.  
  1186.               NEW [BEVEL,
  1187.                 palette3:=NEW [PALETTE,
  1188.                 {gtpalettes_plv},-> action
  1189.                 'P_alette',      -> lefttext
  1190.                 3,               -> depth
  1191.                 5,               -> relx
  1192.                 1,               -> rely
  1193.                 self.palettev[3],-> current
  1194.                 4,               -> data
  1195.                 "a",             -> key
  1196.                 FALSE]           -> disabled
  1197.               ],
  1198.               NEW [BEVEL,
  1199.                 palette4:=NEW [PALETTE,
  1200.                 {gtpalettes_plv},-> action
  1201.                 NIL,             -> lefttext
  1202.                 3,               -> depth
  1203.                 5,               -> relx
  1204.                 1,               -> rely
  1205.                 self.palettev[4],-> current
  1206.                 5,               -> data
  1207.                 NIL,             -> key
  1208.                 FALSE]           -> disabled
  1209.               ],
  1210.               NEW [BEVEL,
  1211.                 palette5:=NEW [PALETTE,
  1212.                 {gtpalettes_plv},-> action
  1213.                 NIL,             -> lefttext
  1214.                 5,               -> depth
  1215.                 5,               -> relx
  1216.                 1,               -> rely
  1217.                 self.palettev[5],-> current
  1218.                 6,               -> data
  1219.                 NIL,             -> key
  1220.                 FALSE]           -> disabled
  1221.               ]
  1222.  
  1223.           ]
  1224.         ],
  1225.         NEW [BAR],
  1226.         NEW [EQCOLS,
  1227.           NEW [BUTTON,{gui_disable},'Disable',TRUE],
  1228.           NEW [BUTTON,{gui_disable},'Enable',FALSE],
  1229.           NEW [BUTTON,{gui_set},'Set',TRUE],
  1230.           NEW [BUTTON,{gui_set},'Reset',FALSE],
  1231.           NEW [BUTTON,{gui_get},'Get',TRUE],
  1232.           NEW [BUTTON,0,'Close']
  1233.         ]
  1234.       ]
  1235.     self.palette[0]:=palette0; self.palette[1]:=palette1; self.palette[2]:=palette2
  1236.     self.palette[3]:=palette3; self.palette[4]:=palette4; self.palette[5]:=palette5
  1237.   ENDIF
  1238. ENDPROC self.gui
  1239.  
  1240. PROC disable(bool) OF gtpalettes
  1241.   DEF i
  1242.   FOR i:=0 TO 5 DO setdisabled(self.gh,self.palette[i],bool)
  1243. ENDPROC
  1244.  
  1245. PROC set(bool) OF gtpalettes
  1246.   DEF new,i
  1247.   new:=IF bool THEN 3 ELSE 2
  1248.   FOR i:=0 TO 5
  1249.     self.palettev[i]:=new
  1250.     setpalette(self.gh,self.palette[i],new)
  1251.   ENDFOR
  1252. ENDPROC
  1253.  
  1254. PROC get() OF gtpalettes
  1255.   DEF i
  1256.   WriteF('---All values:\n')
  1257.   FOR i:=0 TO 5 DO WriteF('palette\d: \d\n',i,self.palettev[i])
  1258.   WriteF('---\n')
  1259. ENDPROC
  1260.  
  1261. -> palette(qual*,data*,info,colour)
  1262. PROC gtpalettes_plv(num,gui:PTR TO gtpalettes,val) IS setdisp('palette',gui.palettev,num,val)
  1263.  
  1264.  
  1265. /********************************************************************
  1266.  * Spaces window
  1267.  ********************************************************************/
  1268.  
  1269. PROC init() OF egspaces
  1270.   self.title:='Spaces in EasyGUI_OS12'
  1271. ENDPROC
  1272.  
  1273. PROC getgui(top) OF egspaces
  1274.   IF self.gui=NIL
  1275.     self.gui:=
  1276.       NEW [ROWS,
  1277.         top,
  1278.         NEW [TEXT,'xy resizable spaces using SPACE:',NIL,FALSE,5],
  1279.         NEW [COLS,
  1280.  
  1281.               NEW [BEVEL,
  1282.                 NEW [SPACE]
  1283.               ],
  1284.               NEW [BEVEL,
  1285.                 NEW [SPACE]
  1286.               ],
  1287.               NEW [BEVEL,
  1288.                 NEW [SPACE]
  1289.               ],
  1290.  
  1291.           NEW [ROWS,
  1292.  
  1293.               NEW [BEVEL,
  1294.                 NEW [SPACE]
  1295.               ],
  1296.               NEW [BEVEL,
  1297.                 NEW [SPACE]
  1298.               ],
  1299.               NEW [BEVEL,
  1300.                 NEW [SPACE]
  1301.               ]
  1302.  
  1303.           ]
  1304.         ],
  1305.         NEW [TEXT,'x resizable spaces using SPACEH:',NIL,FALSE,5],
  1306.         NEW [COLS,
  1307.  
  1308.               NEW [BEVEL,
  1309.                 NEW [SPACEH]
  1310.               ],
  1311.               NEW [BEVEL,
  1312.                 NEW [SPACEH]
  1313.               ],
  1314.               NEW [BEVEL,
  1315.                 NEW [SPACEH]
  1316.               ],
  1317.  
  1318.           NEW [ROWS,
  1319.  
  1320.               NEW [BEVEL,
  1321.                 NEW [SPACEH]
  1322.               ],
  1323.               NEW [BEVEL,
  1324.                 NEW [SPACEH]
  1325.               ],
  1326.               NEW [BEVEL,
  1327.                 NEW [SPACEH]
  1328.               ]
  1329.  
  1330.           ]
  1331.         ],
  1332.         NEW [TEXT,'y resizable spaces using SPACEV:',NIL,FALSE,5],
  1333.         NEW [COLS,
  1334.  
  1335.               NEW [BEVEL,
  1336.                 NEW [SPACEV]
  1337.               ],
  1338.               NEW [BEVEL,
  1339.                 NEW [SPACEV]
  1340.               ],
  1341.               NEW [BEVEL,
  1342.                 NEW [SPACEV]
  1343.               ],
  1344.  
  1345.           NEW [ROWS,
  1346.  
  1347.               NEW [BEVEL,
  1348.                 NEW [SPACEV]
  1349.               ],
  1350.               NEW [BEVEL,
  1351.                 NEW [SPACEV]
  1352.               ],
  1353.               NEW [BEVEL,
  1354.                 NEW [SPACEV]
  1355.               ]
  1356.  
  1357.           ]
  1358.         ]
  1359.       ]
  1360.   ENDIF
  1361. ENDPROC self.gui
  1362.  
  1363.  
  1364. /********************************************************************
  1365.  * Bars + Bevels window
  1366.  ********************************************************************/
  1367.  
  1368. PROC init() OF egbevels
  1369.   self.title:='Bars + Bevels in EasyGUI_OS12'
  1370. ENDPROC
  1371.  
  1372. PROC getgui(top) OF egbevels
  1373.   DEF g
  1374.   IF self.gui=NIL
  1375.     self.gui:=
  1376.       NEW [ROWS,
  1377.         top,
  1378.         NEW [TEXT,'normal bevels using BEVEL:',NIL,FALSE,5],
  1379.         NEW [COLS,
  1380.  
  1381.               NEW [BEVEL,
  1382.                 NEW [SPACE]
  1383.               ],
  1384.               NEW [BEVEL,
  1385.                 NEW [SPACE]
  1386.               ],
  1387.               NEW [BEVEL,
  1388.                 NEW [SPACE]
  1389.               ],
  1390.  
  1391.           NEW [ROWS,
  1392.  
  1393.               NEW [BEVEL,
  1394.                 NEW [SPACE]
  1395.               ],
  1396.               NEW [BEVEL,
  1397.                 NEW [SPACE]
  1398.               ],
  1399.               NEW [BEVEL,
  1400.                 NEW [SPACE]
  1401.               ]
  1402.  
  1403.           ]
  1404.         ],
  1405.         NEW [TEXT,'recessed bevels using BEVELR:',NIL,FALSE,5],
  1406.         NEW [COLS,
  1407.  
  1408.               NEW [BEVELR,
  1409.                 NEW [SPACE]
  1410.               ],
  1411.               NEW [BEVELR,
  1412.                 NEW [SPACE]
  1413.               ],
  1414.               NEW [BEVELR,
  1415.                 NEW [SPACE]
  1416.               ],
  1417.  
  1418.           NEW [ROWS,
  1419.  
  1420.               NEW [BEVELR,
  1421.                 NEW [SPACE]
  1422.               ],
  1423.               NEW [BEVELR,
  1424.                 NEW [SPACE]
  1425.               ],
  1426.               NEW [BEVELR,
  1427.                 NEW [SPACE]
  1428.               ]
  1429.  
  1430.           ]
  1431.         ],
  1432.         NEW [TEXT,'bars:',NIL,FALSE,5],
  1433.         NEW [BAR],
  1434.         NEW [BAR],
  1435.         NEW [BAR]
  1436.       ]
  1437.   ENDIF
  1438. ENDPROC self.gui
  1439.  
  1440.  
  1441. /********************************************************************
  1442.  * Menus window
  1443.  ********************************************************************/
  1444.  
  1445. PROC init() OF gtmenus
  1446.   self.title:='Gadtools Menus in EasyGUI_OS12'
  1447.   self.menus1:=[NM_TITLE,0,'Menus 1', NIL,0,0,0,
  1448.                 NM_ITEM,0,'Menus 0',  NIL,0,0,{gtmenus_menus0},
  1449.                 NM_ITEM,0,'Menus 2',  NIL,0,0,{gtmenus_menus2},
  1450.                 NM_END,  0,NIL,       NIL,0,0,0]:newmenu
  1451.   self.menus2:=[NM_TITLE,0,'Menus 2', NIL,0,0,0,
  1452.                 NM_ITEM,0,'Menus 0',  NIL,0,0,{gtmenus_menus0},
  1453.                 NM_ITEM,0,'Menus 1',  NIL,0,0,{gtmenus_menus1},
  1454.                 NM_END,  0,NIL,       NIL,0,0,0]:newmenu
  1455.   self.menusnum:=0
  1456. ENDPROC
  1457.  
  1458. PROC getgui(top) OF gtmenus
  1459.   DEF menumx
  1460.   IF self.gui=NIL
  1461.     self.gui:=
  1462.       NEW [ROWS,
  1463.         top,
  1464.         NEW [TEXT,'Menus 0 are shared across all windows!',NIL,FALSE,5],
  1465.         NEW [BAR],
  1466.           NEW [BEVEL,
  1467.           NEW [ROWS,
  1468.             NEW [TEXT,'Choose Menus for this window:',NIL,FALSE,5],
  1469.             NEW [BEVEL,
  1470.               menumx:=NEW [MX,{gtmenus_change},NIL,['Menus 0','Menus 1','Menus 2',NIL],FALSE,self.menusnum,TRUE]
  1471.             ]
  1472.           ]
  1473.         ],
  1474.         NEW [BAR],
  1475.         NEW [SBUTTON,0,'Close']
  1476.       ]
  1477.     self.menumx:=menumx
  1478.   ENDIF
  1479. ENDPROC self.gui
  1480.  
  1481. -> menu(qual*=NIL,data*=NIL,info)
  1482. PROC gtmenus_menus0(gui:PTR TO gtmenus) IS gui.change_menus(FALSE,0)
  1483. PROC gtmenus_menus1(gui:PTR TO gtmenus) IS gui.change_menus(FALSE,1)
  1484. PROC gtmenus_menus2(gui:PTR TO gtmenus) IS gui.change_menus(FALSE,2)
  1485.  
  1486. -> mx(qual*,data*,info,num_selected)
  1487. PROC gtmenus_change(gui:PTR TO gtmenus,num) IS gui.change_menus(TRUE,num)
  1488.  
  1489. PROC change_menus(frommx,num) OF gtmenus
  1490.   DEF new
  1491.   self.menusnum:=num
  1492.   new:=ListItem([global.menus,self.menus1,self.menus2],num)
  1493.   -> the following line crashes/raises "gui":
  1494.   ->multiforall({x},global.mh,`changemenus(x,new))
  1495.   -> so for now just change menus of this window:
  1496.   changemenus(self.gh,new)
  1497.   IF frommx=FALSE THEN setmx(self.gh,self.menumx,num)
  1498. ENDPROC
  1499.  
  1500.  
  1501. /********************************************************************
  1502.  * Window Manipulation window
  1503.  ********************************************************************/
  1504.  
  1505. PROC init() OF egchwin
  1506.   self.title:='Window Manipulation in EasyGUI_OS12'
  1507.   self.screennum:=0
  1508.   self.wintypenum:=3
  1509.   self.fontnum:=0
  1510. ENDPROC
  1511.  
  1512. PROC getgui(top) OF egchwin
  1513.   DEF screenmx,winmx,fontmx,titlemx
  1514.   IF self.gui=NIL
  1515.     self.gui:=
  1516.       NEW [ROWS,
  1517.         top,
  1518.         NEW [TEXT,'Can also be called from the menus:',NIL,FALSE,5],
  1519.         NEW [BAR],
  1520.         NEW [COLS,
  1521.           NEW [BEVEL,
  1522.             NEW [ROWS,
  1523.               NEW [TEXT,'Screen:',NIL,FALSE,5],
  1524.               NEW [BEVEL,
  1525.                 screenmx:=NEW [MX,{egchwin_changescreen},NIL,['Default','Custom',NIL],FALSE,self.screennum]
  1526.               ]
  1527.             ]
  1528.           ],
  1529.           NEW [BEVEL,
  1530.             NEW [ROWS,
  1531.               NEW [TEXT,'Decoration:',NIL,FALSE,5],
  1532.               NEW [BEVEL,
  1533.                 winmx:=NEW [MX,{egchwin_changewintype},NIL,['No Border','Basic','No Size','Size',NIL],FALSE,self.wintypenum]
  1534.               ]
  1535.             ]
  1536.           ],
  1537.           NEW [BEVEL,
  1538.             NEW [ROWS,
  1539.               NEW [TEXT,'Font:',NIL,FALSE,5],
  1540.               NEW [BEVEL,
  1541.                 fontmx:=NEW [MX,{egchwin_changefont},NIL,['Screen','Topaz 8','Topaz 10',NIL],FALSE,self.fontnum]
  1542.               ]
  1543.             ]
  1544.           ],
  1545.           NEW [BEVEL,
  1546.             NEW [ROWS,
  1547.               NEW [TEXT,'Title:',NIL,FALSE,5],
  1548.               NEW [BEVEL,
  1549.                 titlemx:=NEW [MX,{egchwin_changetitle},NIL,['Info','Nonsens',NIL],FALSE,self.titlenum]
  1550.               ]
  1551.             ]
  1552.           ]
  1553.         ],
  1554.         NEW [BAR],
  1555.         NEW [EQCOLS,
  1556.             NEW [SBUTTON,{egchwin_moveall},'Move All'],
  1557.             NEW [SBUTTON,{egchwin_sizeall},'Size All'],
  1558.             NEW [SBUTTON,{egchwin_blockall},'Block All'],
  1559.             NEW [SBUTTON,{egchwin_openall},'Open All'],
  1560.             NEW [SBUTTON,{egchwin_closeall},'Close All']
  1561.         ]
  1562.       ]
  1563.     self.screenmx:=screenmx; self.winmx:=winmx; self.fontmx:=fontmx; self.titlemx:=titlemx
  1564.   ENDIF
  1565. ENDPROC self.gui
  1566.  
  1567. -> menu(qual*=NIL,data*=NIL,info)
  1568. PROC global_defaultscreen(i) IS global.egchwin.change_screen(FALSE,0)
  1569. PROC global_customscreen(i) IS global.egchwin.change_screen(FALSE,1)
  1570.  
  1571. -> mx(qual*,data*,info,num_selected)
  1572. PROC egchwin_changescreen(gui:PTR TO egchwin,num) IS gui.change_screen(TRUE,num)
  1573.  
  1574. PROC change_screen(frommx,num) OF egchwin HANDLE
  1575.   multiforall({x},global.mh,`closewin(x))
  1576.   self.screennum:=num
  1577.   IF num
  1578.     IF global.screen=NIL THEN global.screen:=OpenS(640,400,4,V_HIRES OR V_LACE,'Custom Screen')
  1579.   ELSE
  1580.     IF global.screen
  1581.       CloseS(global.screen)
  1582.       global.screen:=NIL
  1583.     ENDIF
  1584.   ENDIF
  1585.   multiforall({x},global.mh,`changescreen(x,global.screen))
  1586. EXCEPT DO
  1587.   multiforall({x},global.mh,`openwin(x))
  1588.   IF frommx THEN tofront(self.gh) ELSE setmx(self.gh,self.screenmx,num)
  1589.   ReThrow()
  1590. ENDPROC
  1591.  
  1592. -> menu(qual*=NIL,data*=NIL,info)
  1593. PROC global_noborderwin(i) IS global.egchwin.change_wintype(FALSE,0)
  1594. PROC global_basicwin(i) IS global.egchwin.change_wintype(FALSE,1)
  1595. PROC global_nosizewin(i) IS global.egchwin.change_wintype(FALSE,2)
  1596. PROC global_sizewin(i) IS global.egchwin.change_wintype(FALSE,3)
  1597.  
  1598. -> mx(qual*,data*,info,num_selected)
  1599. PROC egchwin_changewintype(gui:PTR TO egchwin,num) IS gui.change_wintype(TRUE,num)
  1600.  
  1601. PROC change_wintype(frommx,num) OF egchwin HANDLE
  1602.   multiforall({x},global.mh,`closewin(x))
  1603.   self.wintypenum:=num
  1604.   global.wintype:=ListItem([WTYPE_NOBORDER,WTYPE_BASIC,WTYPE_NOSIZE,WTYPE_SIZE],num)
  1605.   multiforall({x},global.mh,`changewintype(x,global.wintype))
  1606. EXCEPT DO
  1607.   multiforall({x},global.mh,`openwin(x))
  1608.   IF frommx THEN tofront(self.gh) ELSE setmx(self.gh,self.winmx,num)
  1609.   ReThrow()
  1610. ENDPROC
  1611.  
  1612. -> menu(qual*=NIL,data*=NIL,info)
  1613. PROC global_screenfont(i) IS global.egchwin.change_font(FALSE,0)
  1614. PROC global_topaz8font(i) IS global.egchwin.change_font(FALSE,1)
  1615. PROC global_topaz10font(i) IS global.egchwin.change_font(FALSE,2)
  1616.  
  1617. -> mx(qual*,data*,info,num_selected)
  1618. PROC egchwin_changefont(gui:PTR TO egchwin,num) IS gui.change_font(TRUE,num)
  1619.  
  1620. PROC change_font(frommx,num) OF egchwin HANDLE
  1621.   multiforall({x},global.mh,`closewin(x))
  1622.   self.fontnum:=num
  1623.   global.font:=ListItem([NIL,['topaz.font',8,0,0]:textattr,['topaz.font',10,0,0]:textattr],num)
  1624.   multiforall({x},global.mh,`changefont(x,global.font))
  1625. EXCEPT DO
  1626.   multiforall({x},global.mh,`openwin(x))
  1627.   IF frommx THEN tofront(self.gh) ELSE setmx(self.gh,self.fontmx,num)
  1628.   ReThrow()
  1629. ENDPROC
  1630.  
  1631. -> menu(qual*=NIL,data*=NIL,info)
  1632. PROC global_infotitle(i) IS global.egchwin.change_title(0)
  1633. PROC global_nonsensetitle(i) IS global.egchwin.change_title(1)
  1634.  
  1635. -> mx(qual*,data*,info,num_selected)
  1636. PROC egchwin_changetitle(gui:PTR TO egchwin,num) IS gui.change_title(num)
  1637.  
  1638. PROC change_title(num) OF egchwin
  1639.   self.titlenum:=num
  1640.   global.title:=IF num THEN 'Nonsense' ELSE NIL
  1641.   multiforall({x},global.mh,`changetitle(x,IF global.title THEN global.title ELSE x.info::gui.title))
  1642. ENDPROC
  1643.  
  1644.  
  1645. -> menu(qual*=NIL,data*=NIL,info)
  1646. PROC global_moveall(i) IS global.egchwin.move_all()
  1647.  
  1648. -> button(qual*,data*,info)
  1649. PROC egchwin_moveall(gui:PTR TO egchwin) IS gui.move_all()
  1650.  
  1651. PROC move_all() OF egchwin
  1652.   multiforall({x},global.mh,`movewin(x,Rnd(400),Rnd(400)))
  1653. ENDPROC
  1654.  
  1655. -> menu(qual*=NIL,data*=NIL,info)
  1656. PROC global_sizeall(i) IS global.egchwin.size_all()
  1657.  
  1658. -> button(qual*,data*,info)
  1659. PROC egchwin_sizeall(gui:PTR TO egchwin) IS gui.size_all()
  1660.  
  1661. PROC size_all() OF egchwin
  1662.   multiforall({x},global.mh,`sizewin(x,x.wnd.minwidth+Rnd(100),x.wnd.minheight+Rnd(100)))
  1663. ENDPROC
  1664.  
  1665. -> menu(qual*=NIL,data*=NIL,info)
  1666. PROC global_openall(i) IS global.egchwin.open_all(FALSE)
  1667.  
  1668. -> button(qual*,data*,info)
  1669. PROC egchwin_openall(gui:PTR TO egchwin) IS gui.open_all(TRUE)
  1670.  
  1671. PROC open_all(frombutton) OF egchwin
  1672.   DEF gui:PTR TO gui
  1673.   ForAll({gui},[global.gtbuttons,global.gttexts,global.gtscrolls,global.gtlistvs,
  1674.                 global.gtpalettes,global.egspaces,global.egbevels,global.gtmenus,
  1675.                 global.egchwin],`gui.open())
  1676.   IF frombutton THEN tofront(self.gh)
  1677. ENDPROC
  1678.  
  1679. -> menu(qual*=NIL,data*=NIL,info)
  1680. PROC global_closeall(i) IS global.egchwin.close_all()
  1681.  
  1682. -> button(qual*,data*,info)
  1683. PROC egchwin_closeall(gui:PTR TO egchwin) IS gui.close_all()
  1684.  
  1685. PROC close_all() OF egchwin
  1686.   multiforall({x},global.mh,`IF x<>global.mainwin.gh THEN cleangui(x) ELSE EMPTY)
  1687. ENDPROC
  1688.  
  1689. -> menu(qual*=NIL,data*=NIL,info)
  1690. PROC global_blockall(i) IS global.egchwin.block_all()
  1691.  
  1692. -> button(qual*,data*,info)
  1693. PROC egchwin_blockall(gui:PTR TO egchwin) IS gui.block_all()
  1694.  
  1695. PROC block_all() OF egchwin
  1696.   multiforall({x},global.mh,`blockwin(x))
  1697.   easyguiA('Blocked',
  1698.     [ROWS,
  1699.       [TEXT,'All GUIs blocked',NIL,FALSE,1],
  1700.       [BUTTON,NIL,'Unblock GUIs',TRUE]
  1701.     ],
  1702.     [ EG_SCRN,   global.screen,
  1703.       EG_FONT,   global.font,
  1704.       TAG_DONE
  1705.     ]
  1706.   )
  1707.   multiforall({x},global.mh,`unblockwin(x))
  1708. ENDPROC
  1709.  
  1710. /********************************************************************
  1711.  * GUI Manipulation window
  1712.  ********************************************************************/
  1713.  
  1714. /* this is the most tricky section of all. global2 is a second instance
  1715.   of all window objects, which are not accessed by the open() method,
  1716.   just we take the gui by getgui() and place it into our window.
  1717.   To make all action functions work on the right instance of the gui
  1718.   the info must be changed on each gui change to point at the right
  1719.   gui. Because of that we must NOT use the gui pointer passed through
  1720.   the info value to refer to the cycle's action-method, but the global
  1721.   pointer to ourself. Same applies to the gui clean action-funtion.
  1722.   That's why this window can not be run in a second instance. */
  1723.  
  1724. PROC init() OF egchgui
  1725.   self.title:='GUI Manipulation in EasyGUI_OS12'
  1726.   self.guilist:=[ global2.gtbuttons,global2.gttexts,global2.gtscrolls,global2.gtlistvs,
  1727.                   global2.gtpalettes,global2.egspaces,global2.egbevels,global2.gtmenus,
  1728.                   global2.egchwin ]
  1729.   self.guilabels:=['Buttons','Texts','Sliders + Scrollers','Listviews',
  1730.                    'Palettes','Spaces','Bars + Bevels','Menus',
  1731.                    'Window Manipulation',NIL]
  1732. ENDPROC
  1733.  
  1734. PROC getgui(top) OF egchgui
  1735.   self.gui:=global2.gtbuttons.getgui(self.topgui(0))
  1736. ENDPROC self.gui
  1737.  
  1738. PROC topgui(num) OF egchgui
  1739.   DEF tg
  1740.   tg:=[CYCLE,{egchgui_change},'Change _GUI',self.guilabels,num,NIL,"g"]
  1741. ENDPROC tg
  1742.  
  1743. PROC open(close=NIL,clean=NIL) OF egchgui
  1744.   SUPER self.open(close,{gui_clean2})
  1745.   ForAll({g},self.guilist,`g.setgh(self.gh))
  1746.   changeinfo(self.gh,global2.gtbuttons)
  1747. ENDPROC
  1748.  
  1749. -> clean(info)
  1750. PROC gui_clean2(i) IS global.egchgui.clean() -> ignore the GUI pointer passed!!!
  1751.  
  1752. -> cycle(qual*,data*,info,num_selected)
  1753. PROC egchgui_change(i,num) IS global.egchgui.change_gui(num) -> ignore the GUI pointer passed!!!
  1754.  
  1755. PROC change_gui(num) OF egchgui
  1756.   DEF gui:PTR TO gui
  1757.   gui:=ListItem(self.guilist,num)
  1758.   changegui(self.gh,gui.getgui(self.topgui(num)))
  1759.   changeinfo(self.gh,gui)
  1760. ENDPROC
  1761.  
  1762. /********************************************************************
  1763.  * Main window
  1764.  ********************************************************************/
  1765.  
  1766. PROC init() OF mainwin
  1767.   self.title:='EasyGUI_OS12 Tests'
  1768. ENDPROC
  1769.  
  1770. PROC getgui(top) OF mainwin
  1771.   IF self.gui=NIL
  1772.     self.gui:=
  1773.       NEW [ROWS,
  1774.         NEW [BEVEL,
  1775.           NEW [EQROWS,
  1776.             NEW [SBUTTON,{global_gtbuttons},'Buttons'],
  1777.             NEW [SBUTTON,{global_gttexts},'Texts'],
  1778.             NEW [SBUTTON,{global_gtscrolls},'Sliders + Scrollers'],
  1779.             NEW [SBUTTON,{global_gtlistvs},'Listviews'],
  1780.             NEW [SBUTTON,{global_gtpalettes},'Palettes'],
  1781.             NEW [SBUTTON,{global_egspaces},'Spaces'],
  1782.             NEW [SBUTTON,{global_egbevels},'Bars + Bevels'],
  1783.             NEW [SBUTTON,{global_gtmenus},'Menus'],
  1784.             NEW [SBUTTON,{global_egchwin},'Window Manipulation'],
  1785.             NEW [SBUTTON,{global_egchgui},'GUI Manipulation']
  1786.           ]
  1787.         ]
  1788.       ]
  1789.   ENDIF
  1790. ENDPROC self.gui
  1791.  
  1792. /********************************************************************
  1793.  * Global stuff
  1794.  ********************************************************************/
  1795.  
  1796. PROC init() OF global
  1797.   NEW self.mainwin.init(),self.gtbuttons.init(), self.gttexts.init(), self.gtscrolls.init(),
  1798.       self.gtlistvs.init(),self.gtpalettes.init(),self.egspaces.init(),self.egbevels.init(),
  1799.       self.gtmenus.init(),self.egchwin.init(),self.egchgui.init()
  1800. ENDPROC
  1801.  
  1802. PROC end() OF global
  1803.   END self.mainwin,self.gtbuttons,self.gttexts,self.gtscrolls,
  1804.       self.gtlistvs,self.gtpalettes,self.egspaces,self.egbevels,
  1805.       self.gtmenus,self.egchwin,self.egchgui
  1806. ENDPROC
  1807.  
  1808. /*******
  1809.  ATTENTION! All funtions starting with global_ may be called from any GUI
  1810.  (or instance), so they must not use the gui object pointer passed through
  1811.  info!!!
  1812.  *******/
  1813.  
  1814. PROC main() HANDLE
  1815.   NEW global.init(),global2.init()
  1816.  
  1817.   global.mh:=multiinit()
  1818.   global.wintype:=WTYPE_SIZE
  1819.   global.menus:=[NM_TITLE,0,'Project',      NIL,0,0,0,
  1820.                   NM_ITEM,0,'Block All',    'L',0,0,{global_blockall},
  1821.                   NM_ITEM,0,NM_BARLABEL,    NIL,0,0,0,
  1822.                   NM_ITEM,0,'Open All',     'O',0,0,{global_openall},
  1823.                   NM_ITEM,0,'Close All',    'C',0,0,{global_closeall},
  1824.                   NM_ITEM,0,NM_BARLABEL,    NIL,0,0,0,
  1825.                   NM_ITEM,0,'Move All',     'M',0,0,{global_moveall},
  1826.                   NM_ITEM,0,'Size All',     'M',0,0,{global_sizeall},
  1827.                   NM_ITEM,0,NM_BARLABEL,    NIL,0,0,0,
  1828.                   NM_ITEM,0,'Quit',         'Q',0,0,{global_quit},
  1829.                  NM_TITLE,0,'Windows',      NIL,0,0,0,
  1830.                   NM_ITEM,0,'Buttons',      '0',0,0,{global_gtbuttons},
  1831.                   NM_ITEM,0,'Texts',        '1',0,0,{global_gttexts},
  1832.                   NM_ITEM,0,'Sliders',      '2',0,0,{global_gtscrolls},
  1833.                   NM_ITEM,0,'Scrollers',    '2',0,0,{global_gtscrolls},
  1834.                   NM_ITEM,0,'Listviews',    '3',0,0,{global_gtlistvs},
  1835.                   NM_ITEM,0,'Palettes',     '4',0,0,{global_gtpalettes},
  1836.                   NM_ITEM,0,'Spaces',       '5',0,0,{global_egspaces},
  1837.                   NM_ITEM,0,'Bars',         '6',0,0,{global_egbevels},
  1838.                   NM_ITEM,0,'Bevels',       '6',0,0,{global_egbevels},
  1839.                   NM_ITEM,0,'Menus',        '7',0,0,{global_gtmenus},
  1840.                   NM_ITEM,0,'ChangeWin',    '8',0,0,{global_egchwin},
  1841.                   NM_ITEM,0,'ChangeGUI',    '9',0,0,{global_egchgui},
  1842.                  NM_TITLE,0,'Screen',       NIL,0,0,0,
  1843.                   NM_ITEM,0,'Default',      'D',0,0,{global_defaultscreen},
  1844.                   NM_ITEM,0,'Custom',       'C',0,0,{global_customscreen},
  1845.                  NM_TITLE,0,'Decoration',   NIL,0,0,0,
  1846.                   NM_ITEM,0,'No Border',    'N',0,0,{global_noborderwin},
  1847.                   NM_ITEM,0,'Basic',        'B',0,0,{global_basicwin},
  1848.                   NM_ITEM,0,'No Size',      'O',0,0,{global_nosizewin},
  1849.                   NM_ITEM,0,'Size',         'S',0,0,{global_sizewin},
  1850.                  NM_TITLE,0,'Font',         NIL,0,0,0,
  1851.                   NM_ITEM,0,'Screen',       'R',0,0,{global_screenfont},
  1852.                   NM_ITEM,0,'Topaz 8',      '8',0,0,{global_topaz8font},
  1853.                   NM_ITEM,0,'Topaz 10',     '1',0,0,{global_topaz10font},
  1854.                  NM_TITLE,0,'Title',         NIL,0,0,0,
  1855.                   NM_ITEM,0,'Info',         'I',0,0,{global_infotitle},
  1856.                   NM_ITEM,0,'Nonsense',     'N',0,0,{global_nonsensetitle},
  1857.                  NM_END,  0,NIL,            NIL,0,0,0]:newmenu
  1858.  
  1859.   global.mainwin.open({global_quit})
  1860.  
  1861.   REPEAT
  1862.     multiloop(global.mh)
  1863.   UNTIL global.mh.opencount=0
  1864. EXCEPT DO
  1865.   IF global.screen
  1866.     CloseS(global.screen)
  1867.     global.screen:=NIL
  1868.   ENDIF
  1869.   cleanmulti(global.mh)
  1870.   report_exception()
  1871.   END global,global2
  1872. ENDPROC
  1873.  
  1874. -> button(qual*,data*,info)
  1875. -> menu(qual*=NIL,data*=NIL,info)
  1876. PROC global_gtbuttons(i) IS global.gtbuttons.open()
  1877. PROC global_gttexts(i) IS global.gttexts.open()
  1878. PROC global_gtscrolls(i) IS global.gtscrolls.open()
  1879. PROC global_gtlistvs(i) IS global.gtlistvs.open()
  1880. PROC global_gtpalettes(i) IS global.gtpalettes.open()
  1881. PROC global_egspaces(i) IS global.egspaces.open()
  1882. PROC global_egbevels(i) IS global.egbevels.open()
  1883. PROC global_gtmenus(i) IS global.gtmenus.open()
  1884. PROC global_egchwin(i) IS global.egchwin.open()
  1885. PROC global_egchgui(i) IS global.egchgui.open()
  1886.  
  1887. -> close(mh*,info)
  1888. -> button(qual*,data*,info)
  1889. -> menu(qual*=NIL,data*=NIL,info)
  1890. PROC global_quit(i)
  1891.   multiforall({x},global.mh,`cleangui(x))
  1892. ENDPROC
  1893.  
  1894. -> appwin(data*,info,awmsg:PTR TO appmessage)
  1895. PROC global_awp(i,a) IS WriteF('Dropped in window\n')
  1896.  
  1897. /********************************************************************
  1898.  * Misc support stuff
  1899.  ********************************************************************/
  1900.  
  1901. PROC makeexeclist(nodes) -> derived from the dclisview plugin demo code by Ali Graham
  1902.   DEF list
  1903.   list:=newlist()
  1904.   ForAll({x}, nodes, `AddTail(list, newnode(NIL, x)))
  1905. ENDPROC list
  1906.  
  1907. PROC tofront(gh:PTR TO guihandle)
  1908.   IF gh
  1909.     WindowToFront(gh.wnd)
  1910.     ActivateWindow(gh.wnd)
  1911.   ENDIF
  1912. ENDPROC
  1913.  
  1914. PROC setdisp(name,array:PTR TO LONG,num,val)
  1915.   WriteF('\s\d=\d\n',name,num,val)
  1916.   array[num]:=val
  1917. ENDPROC
  1918.  
  1919. PROC dispstr(name,num,str) IS WriteF('\s\d=\s\n',name,num,str)
  1920.  
  1921.