home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 August / PCWorld_2000-08_cd.bin / Software / TemaCD / xbasic / xbpro.exe / xb / agrids.x < prev    next >
Text File  |  1996-01-22  |  109KB  |  2,347 lines

  1. '
  2. ' ####################
  3. ' #####  PROLOG  #####
  4. ' ####################
  5. '
  6. ' Display and play with the grids in the standard toolkit.
  7. ' Callback function arguments are printed in the console window.
  8. ' DemoButtons() sets special keyboard focus colors for XuiPushButtons.
  9. '
  10. PROGRAM "agrids"
  11. VERSION "0.0014"
  12. '
  13. IMPORT "xst"
  14. IMPORT "xgr"
  15. IMPORT "xui"
  16. '
  17. INTERNAL FUNCTION  Entry              ()
  18. INTERNAL FUNCTION  InitGui            ()
  19. INTERNAL FUNCTION  InitProgram        ()
  20. INTERNAL FUNCTION  CreateWindows      ()
  21. INTERNAL FUNCTION  DemoGUI            (grid, message, v0, v1, v2, v3, kid, ANY)
  22. INTERNAL FUNCTION  DemoGUICode        (grid, message, v0, v1, v2, v3, kid, ANY)
  23. INTERNAL FUNCTION  DemoButton         (grid, message, v0, v1, v2, v3, kid, ANY)
  24. INTERNAL FUNCTION  DemoButtonCode     (grid, message, v0, v1, v2, v3, kid, ANY)
  25. INTERNAL FUNCTION  DemoText           (grid, message, v0, v1, v2, v3, kid, ANY)
  26. INTERNAL FUNCTION  DemoTextCode       (grid, message, v0, v1, v2, v3, kid, ANY)
  27. INTERNAL FUNCTION  DemoDialog         (grid, message, v0, v1, v2, v3, kid, ANY)
  28. INTERNAL FUNCTION  DemoDialogCode     (grid, message, v0, v1, v2, v3, kid, ANY)
  29. INTERNAL FUNCTION  DemoPullDown       (grid, message, v0, v1, v2, v3, kid, ANY)
  30. INTERNAL FUNCTION  DemoPullDownCode   (grid, message, v0, v1, v2, v3, kid, ANY)
  31. INTERNAL FUNCTION  DemoFileCode       (grid, message, v0, v1, v2, v3, kid, ANY)
  32. INTERNAL FUNCTION  DemoFontCode       (grid, message, v0, v1, v2, v3, kid, ANY)
  33. INTERNAL FUNCTION  DemoMiscellany     (grid, message, v0, v1, v2, v3, kid, ANY)
  34. INTERNAL FUNCTION  DemoMiscellanyCode (grid, message, v0, v1, v2, v3, kid, ANY)
  35. '
  36. '
  37. ' ######################
  38. ' #####  Entry ()  #####
  39. ' ######################
  40. '
  41. FUNCTION  Entry ()
  42.     SHARED  terminateProgram
  43.     STATIC    entry
  44. '
  45.     IF entry THEN RETURN                    ' enter once
  46.     entry =  $$TRUE                                ' enter occured
  47. '
  48.     InitGui ()                                        ' initialize messages
  49.     InitProgram ()                                ' initialize this program
  50.     CreateWindows ()                            ' create main window and others
  51.     IF LIBRARY(0) THEN RETURN            ' main program has message loop
  52. '
  53.     DO                                                        ' the message loop
  54.         XgrProcessMessages (1)            ' process one message
  55.     LOOP UNTIL terminateProgram        ' and repeat until program is terminated
  56. END FUNCTION
  57. '
  58. '
  59. ' ########################
  60. ' #####  InitGui ()  #####
  61. ' ########################
  62. '
  63. ' InitGui() initializes cursor, icon, message, and display variables.
  64. ' Programs can reference these variables, but must never change them.
  65. '
  66. FUNCTION  InitGui ()
  67. '
  68. ' ***************************************
  69. ' *****  Register Standard Cursors  *****
  70. ' ***************************************
  71. '
  72.     XgrRegisterCursor (@"Arrow",            @#cursorArrow)
  73.     XgrRegisterCursor (@"UpArrow",        @#cursorArrowN)
  74.     XgrRegisterCursor (@"Arrow",            @#cursorArrowNW)
  75.     XgrRegisterCursor (@"SizeNS",            @#cursorArrowsNS)
  76.     XgrRegisterCursor (@"SizeWE",            @#cursorArrowsWE)
  77.     XgrRegisterCursor (@"SizeNWSE",        @#cursorArrowsNWSE)
  78.     XgrRegisterCursor (@"SizeNESW",        @#cursorArrowsNESW)
  79.     XgrRegisterCursor (@"SizeAll",        @#cursorArrowsAll)
  80.     XgrRegisterCursor (@"CrossHair",    @#cursorCrosshair)
  81.     XgrRegisterCursor (@"Arrow",            @#cursorDefault)
  82.     XgrRegisterCursor (@"Wait",                @#cursorHourglass)
  83.     XgrRegisterCursor (@"Insert",            @#cursorInsert)
  84.     XgrRegisterCursor (@"No",                    @#cursorNo)
  85.     XgrRegisterCursor (@"Arrow",            @#defaultCursor)
  86. '
  87. '
  88. ' ********************************************
  89. ' *****  Register Standard Window Icons  *****
  90. ' ********************************************
  91. '
  92.     XgrRegisterIcon (@"hand",                    @#iconHand)
  93.     XgrRegisterIcon (@"asterisk",            @#iconAsterisk)
  94.     XgrRegisterIcon (@"question",            @#iconQuestion)
  95.     XgrRegisterIcon (@"exclamation",    @#iconExclamation)
  96.     XgrRegisterIcon (@"application",    @#iconApplication)
  97. '
  98.     XgrRegisterIcon (@"hand",                    @#iconStop)                        ' alias
  99.     XgrRegisterIcon (@"asterisk",            @#iconInformation)        ' alias
  100.     XgrRegisterIcon (@"application",  @#iconBlank)                    ' alias
  101. '
  102.     XgrRegisterIcon (@"window",                @#iconWindow)                    ' custom
  103. '
  104. '
  105. ' ******************************
  106. ' *****  Register Messages *****  Create message numbers for message names
  107. ' ******************************
  108. '
  109.     XgrRegisterMessage (@"Blowback",                                        @#Blowback)
  110.     XgrRegisterMessage (@"Callback",                                        @#Callback)
  111.     XgrRegisterMessage (@"Cancel",                                            @#Cancel)
  112.     XgrRegisterMessage (@"Change",                                            @#Change)
  113.     XgrRegisterMessage (@"CloseWindow",                                    @#CloseWindow)
  114.     XgrRegisterMessage (@"ContextChange",                                @#ContextChange)
  115.     XgrRegisterMessage (@"Create",                                            @#Create)
  116.     XgrRegisterMessage (@"CreateValueArray",                        @#CreateValueArray)
  117.     XgrRegisterMessage (@"CreateWindow",                                @#CreateWindow)
  118.     XgrRegisterMessage (@"CursorH",                                            @#CursorH)
  119.     XgrRegisterMessage (@"CursorV",                                            @#CursorV)
  120.     XgrRegisterMessage (@"Deselected",                                    @#Deselected)
  121.     XgrRegisterMessage (@"Destroy",                                            @#Destroy)
  122.     XgrRegisterMessage (@"Destroyed",                                        @#Destroyed)
  123.     XgrRegisterMessage (@"DestroyWindow",                                @#DestroyWindow)
  124.     XgrRegisterMessage (@"Disable",                                            @#Disable)
  125.     XgrRegisterMessage (@"Disabled",                                        @#Disabled)
  126.     XgrRegisterMessage (@"Displayed",                                        @#Displayed)
  127.     XgrRegisterMessage (@"DisplayWindow",                                @#DisplayWindow)
  128.     XgrRegisterMessage (@"Enable",                                            @#Enable)
  129.     XgrRegisterMessage (@"Enabled",                                            @#Enabled)
  130.     XgrRegisterMessage (@"Enter",                                                @#Enter)
  131.     XgrRegisterMessage (@"ExitMessageLoop",                            @#ExitMessageLoop)
  132.     XgrRegisterMessage (@"Find",                                                @#Find)
  133.     XgrRegisterMessage (@"FindForward",                                    @#FindForward)
  134.     XgrRegisterMessage (@"FindReverse",                                    @#FindReverse)
  135.     XgrRegisterMessage (@"Forward",                                            @#Forward)
  136.     XgrRegisterMessage (@"GetAlign",                                        @#GetAlign)
  137.     XgrRegisterMessage (@"GetBorder",                                        @#GetBorder)
  138.     XgrRegisterMessage (@"GetBorderOffset",                            @#GetBorderOffset)
  139.     XgrRegisterMessage (@"GetCallback",                                    @#GetCallback)
  140.     XgrRegisterMessage (@"GetCallbackArgs",                            @#GetCallbackArgs)
  141.     XgrRegisterMessage (@"GetCan",                                            @#GetCan)
  142.     XgrRegisterMessage (@"GetCharacterMapArray",                @#GetCharacterMapArray)
  143.     XgrRegisterMessage (@"GetClipGrid",                                    @#GetClipGrid)
  144.     XgrRegisterMessage (@"GetColor",                                        @#GetColor)
  145.     XgrRegisterMessage (@"GetColorExtra",                                @#GetColorExtra)
  146.     XgrRegisterMessage (@"GetCursor",                                        @#GetCursor)
  147.     XgrRegisterMessage (@"GetCursorXY",                                    @#GetCursorXY)
  148.     XgrRegisterMessage (@"GetDisplay",                                    @#GetDisplay)
  149.     XgrRegisterMessage (@"GetEnclosedGrids",                        @#GetEnclosedGrids)
  150.     XgrRegisterMessage (@"GetEnclosingGrid",                        @#GetEnclosingGrid)
  151.     XgrRegisterMessage (@"GetFocusColor",                                @#GetFocusColor)
  152.     XgrRegisterMessage (@"GetFocusColorExtra",                    @#GetFocusColorExtra)
  153.     XgrRegisterMessage (@"GetFont",                                            @#GetFont)
  154.     XgrRegisterMessage (@"GetFontNumber",                                @#GetFontNumber)
  155.     XgrRegisterMessage (@"GetGridFunction",                            @#GetGridFunction)
  156.     XgrRegisterMessage (@"GetGridFunctionName",                    @#GetGridFunctionName)
  157.     XgrRegisterMessage (@"GetGridName",                                    @#GetGridName)
  158.     XgrRegisterMessage (@"GetGridNumber",                                @#GetGridNumber)
  159.     XgrRegisterMessage (@"GetGridType",                                    @#GetGridType)
  160.     XgrRegisterMessage (@"GetGridTypeName",                            @#GetGridTypeName)
  161.     XgrRegisterMessage (@"GetGroup",                                        @#GetGroup)
  162.     XgrRegisterMessage (@"GetHelp",                                            @#GetHelp)
  163.     XgrRegisterMessage (@"GetHelpFile",                                    @#GetHelpFile)
  164.     XgrRegisterMessage (@"GetHelpString",                                @#GetHelpString)
  165.     XgrRegisterMessage (@"GetHelpStrings",                            @#GetHelpStrings)
  166.     XgrRegisterMessage (@"GetHintString",                                @#GetHintString)
  167.     XgrRegisterMessage (@"GetImage",                                        @#GetImage)
  168.     XgrRegisterMessage (@"GetImageCoords",                            @#GetImageCoords)
  169.     XgrRegisterMessage (@"GetIndent",                                        @#GetIndent)
  170.     XgrRegisterMessage (@"GetInfo",                                            @#GetInfo)
  171.     XgrRegisterMessage (@"GetJustify",                                    @#GetJustify)
  172.     XgrRegisterMessage (@"GetKeyboardFocus",                        @#GetKeyboardFocus)
  173.     XgrRegisterMessage (@"GetKeyboardFocusGrid",                @#GetKeyboardFocusGrid)
  174.     XgrRegisterMessage (@"GetKidNumber",                                @#GetKidNumber)
  175.     XgrRegisterMessage (@"GetKids",                                            @#GetKids)
  176.     XgrRegisterMessage (@"GetKidArray",                                    @#GetKidArray)
  177.     XgrRegisterMessage (@"GetKind",                                            @#GetKind)
  178.     XgrRegisterMessage (@"GetMaxMinSize",                                @#GetMaxMinSize)
  179.     XgrRegisterMessage (@"GetMessageFunc",                            @#GetMessageFunc)
  180.     XgrRegisterMessage (@"GetMessageFuncArray",                    @#GetMessageFuncArray)
  181.     XgrRegisterMessage (@"GetMessageSub",                                @#GetMessageSub)
  182.     XgrRegisterMessage (@"GetMessageSubArray",                    @#GetMessageSubArray)
  183.     XgrRegisterMessage (@"GetModalInfo",                                @#GetModalInfo)
  184.     XgrRegisterMessage (@"GetModalWindow",                            @#GetModalWindow)
  185.     XgrRegisterMessage (@"GetParent",                                        @#GetParent)
  186.     XgrRegisterMessage (@"GetPosition",                                    @#GetPosition)
  187.     XgrRegisterMessage (@"GetProtoInfo",                                @#GetProtoInfo)
  188.     XgrRegisterMessage (@"GetRedrawFlags",                            @#GetRedrawFlags)
  189.     XgrRegisterMessage (@"GetSize",                                            @#GetSize)
  190.     XgrRegisterMessage (@"GetSmallestSize",                            @#GetSmallestSize)
  191.     XgrRegisterMessage (@"GetState",                                        @#GetState)
  192.     XgrRegisterMessage (@"GetStyle",                                        @#GetStyle)
  193.     XgrRegisterMessage (@"GetTabArray",                                    @#GetTabArray)
  194.     XgrRegisterMessage (@"GetTabWidth",                                    @#GetTabWidth)
  195.     XgrRegisterMessage (@"GetTextArray",                                @#GetTextArray)
  196.     XgrRegisterMessage (@"GetTextArrayBounds",                    @#GetTextArrayBounds)
  197.     XgrRegisterMessage (@"GetTextArrayLine",                        @#GetTextArrayLine)
  198.     XgrRegisterMessage (@"GetTextArrayLines",                        @#GetTextArrayLines)
  199.     XgrRegisterMessage (@"GetTextCursor",                                @#GetTextCursor)
  200.     XgrRegisterMessage (@"GetTextFilename",                            @#GetTextFilename)
  201.     XgrRegisterMessage (@"GetTextPosition",                            @#GetTextPosition)
  202.     XgrRegisterMessage (@"GetTextSelection",                        @#GetTextSelection)
  203.     XgrRegisterMessage (@"GetTextString",                                @#GetTextString)
  204.     XgrRegisterMessage (@"GetTextStrings",                            @#GetTextStrings)
  205.     XgrRegisterMessage (@"GetTexture",                                    @#GetTexture)
  206.     XgrRegisterMessage (@"GetTimer",                                        @#GetTimer)
  207.     XgrRegisterMessage (@"GetValue",                                        @#GetValue)
  208.     XgrRegisterMessage (@"GetValues",                                        @#GetValues)
  209.     XgrRegisterMessage (@"GetValueArray",                                @#GetValueArray)
  210.     XgrRegisterMessage (@"GetWindow",                                        @#GetWindow)
  211.     XgrRegisterMessage (@"GetWindowFunction",                        @#GetWindowFunction)
  212.     XgrRegisterMessage (@"GetWindowGrid",                                @#GetWindowGrid)
  213.     XgrRegisterMessage (@"GetWindowIcon",                                @#GetWindowIcon)
  214.     XgrRegisterMessage (@"GetWindowSize",                                @#GetWindowSize)
  215.     XgrRegisterMessage (@"GetWindowTitle",                            @#GetWindowTitle)
  216.     XgrRegisterMessage (@"GotKeyboardFocus",                        @#GotKeyboardFocus)
  217.     XgrRegisterMessage (@"GrabArray",                                        @#GrabArray)
  218.     XgrRegisterMessage (@"GrabTextArray",                                @#GrabTextArray)
  219.     XgrRegisterMessage (@"GrabTextString",                            @#GrabTextString)
  220.     XgrRegisterMessage (@"GrabValueArray",                            @#GrabValueArray)
  221.     XgrRegisterMessage (@"Help",                                                @#Help)
  222.     XgrRegisterMessage (@"Hidden",                                            @#Hidden)
  223.     XgrRegisterMessage (@"HideTextCursor",                            @#HideTextCursor)
  224.     XgrRegisterMessage (@"HideWindow",                                    @#HideWindow)
  225.     XgrRegisterMessage (@"Initialize",                                    @#Initialize)
  226.     XgrRegisterMessage (@"Initialized",                                    @#Initialized)
  227.     XgrRegisterMessage (@"Inline",                                            @#Inline)
  228.     XgrRegisterMessage (@"InquireText",                                    @#InquireText)
  229.     XgrRegisterMessage (@"KeyboardFocusBackward",                @#KeyboardFocusBackward)
  230.     XgrRegisterMessage (@"KeyboardFocusForward",                @#KeyboardFocusForward)
  231.     XgrRegisterMessage (@"KeyDown",                                            @#KeyDown)
  232.     XgrRegisterMessage (@"KeyUp",                                                @#KeyUp)
  233.     XgrRegisterMessage (@"LostKeyboardFocus",                        @#LostKeyboardFocus)
  234.     XgrRegisterMessage (@"LostTextSelection",                        @#LostTextSelection)
  235.     XgrRegisterMessage (@"Maximized",                                        @#Maximized)
  236.     XgrRegisterMessage (@"MaximizeWindow",                            @#MaximizeWindow)
  237.     XgrRegisterMessage (@"Maximum",                                            @#Maximum)
  238.     XgrRegisterMessage (@"Minimized",                                        @#Minimized)
  239.     XgrRegisterMessage (@"MinimizeWindow",                            @#MinimizeWindow)
  240.     XgrRegisterMessage (@"Minimum",                                            @#Minimum)
  241.     XgrRegisterMessage (@"MonitorContext",                            @#MonitorContext)
  242.     XgrRegisterMessage (@"MonitorHelp",                                    @#MonitorHelp)
  243.     XgrRegisterMessage (@"MonitorKeyboard",                            @#MonitorKeyboard)
  244.     XgrRegisterMessage (@"MonitorMouse",                                @#MonitorMouse)
  245.     XgrRegisterMessage (@"MouseDown",                                        @#MouseDown)
  246.     XgrRegisterMessage (@"MouseDrag",                                        @#MouseDrag)
  247.     XgrRegisterMessage (@"MouseEnter",                                    @#MouseEnter)
  248.     XgrRegisterMessage (@"MouseExit",                                        @#MouseExit)
  249.     XgrRegisterMessage (@"MouseMove",                                        @#MouseMove)
  250.     XgrRegisterMessage (@"MouseUp",                                            @#MouseUp)
  251.     XgrRegisterMessage (@"MuchLess",                                        @#MuchLess)
  252.     XgrRegisterMessage (@"MuchMore",                                        @#MuchMore)
  253.     XgrRegisterMessage (@"OneLess",                                            @#OneLess)
  254.     XgrRegisterMessage (@"OneMore",                                            @#OneMore)
  255.     XgrRegisterMessage (@"PokeArray",                                        @#PokeArray)
  256.     XgrRegisterMessage (@"PokeTextArray",                                @#PokeTextArray)
  257.     XgrRegisterMessage (@"PokeTextString",                            @#PokeTextString)
  258.     XgrRegisterMessage (@"PokeValueArray",                            @#PokeValueArray)
  259.     XgrRegisterMessage (@"Print",                                                @#Print)
  260.     XgrRegisterMessage (@"Redraw",                                            @#Redraw)
  261.     XgrRegisterMessage (@"RedrawGrid",                                    @#RedrawGrid)
  262.     XgrRegisterMessage (@"RedrawLines",                                    @#RedrawLines)
  263.     XgrRegisterMessage (@"RedrawText",                                    @#RedrawText)
  264.     XgrRegisterMessage (@"RedrawWindow",                                @#RedrawWindow)
  265.     XgrRegisterMessage (@"Replace",                                            @#Replace)
  266.     XgrRegisterMessage (@"ReplaceForward",                            @#ReplaceForward)
  267.     XgrRegisterMessage (@"ReplaceReverse",                            @#ReplaceReverse)
  268.     XgrRegisterMessage (@"Reset",                                                @#Reset)
  269.     XgrRegisterMessage (@"Resize",                                            @#Resize)
  270.     XgrRegisterMessage (@"Resized",                                            @#Resized)
  271.     XgrRegisterMessage (@"ResizeNot",                                        @#ResizeNot)
  272.     XgrRegisterMessage (@"ResizeWindow",                                @#ResizeWindow)
  273.     XgrRegisterMessage (@"ResizeWindowToGrid",                    @#ResizeWindowToGrid)
  274.     XgrRegisterMessage (@"Resized",                                            @#Resized)
  275.     XgrRegisterMessage (@"Reverse",                                            @#Reverse)
  276.     XgrRegisterMessage (@"ScrollH",                                            @#ScrollH)
  277.     XgrRegisterMessage (@"ScrollV",                                            @#ScrollV)
  278.     XgrRegisterMessage (@"Select",                                            @#Select)
  279.     XgrRegisterMessage (@"Selected",                                        @#Selected)
  280.     XgrRegisterMessage (@"Selection",                                        @#Selection)
  281.     XgrRegisterMessage (@"SelectWindow",                                @#SelectWindow)
  282.     XgrRegisterMessage (@"SetAlign",                                        @#SetAlign)
  283.     XgrRegisterMessage (@"SetBorder",                                        @#SetBorder)
  284.     XgrRegisterMessage (@"SetBorderOffset",                            @#SetBorderOffset)
  285.     XgrRegisterMessage (@"SetCallback",                                    @#SetCallback)
  286.     XgrRegisterMessage (@"SetCan",                                            @#SetCan)
  287.     XgrRegisterMessage (@"SetCharacterMapArray",                @#SetCharacterMapArray)
  288.     XgrRegisterMessage (@"SetClipGrid",                                    @#SetClipGrid)
  289.     XgrRegisterMessage (@"SetColor",                                        @#SetColor)
  290.     XgrRegisterMessage (@"SetColorAll",                                    @#SetColorAll)
  291.     XgrRegisterMessage (@"SetColorExtra",                                @#SetColorExtra)
  292.     XgrRegisterMessage (@"SetColorExtraAll",                        @#SetColorExtraAll)
  293.     XgrRegisterMessage (@"SetCursor",                                        @#SetCursor)
  294.     XgrRegisterMessage (@"SetCursorXY",                                    @#SetCursorXY)
  295.     XgrRegisterMessage (@"SetDisplay",                                    @#SetDisplay)
  296.     XgrRegisterMessage (@"SetFocusColor",                                @#SetFocusColor)
  297.     XgrRegisterMessage (@"SetFocusColorExtra",                    @#SetFocusColorExtra)
  298.     XgrRegisterMessage (@"SetFont",                                            @#SetFont)
  299.     XgrRegisterMessage (@"SetFontNumber",                                @#SetFontNumber)
  300.     XgrRegisterMessage (@"SetGridFunction",                            @#SetGridFunction)
  301.     XgrRegisterMessage (@"SetGridFunctionName",                    @#SetGridFunctionName)
  302.     XgrRegisterMessage (@"SetGridName",                                    @#SetGridName)
  303.     XgrRegisterMessage (@"SetGridType",                                    @#SetGridType)
  304.     XgrRegisterMessage (@"SetGridTypeName",                            @#SetGridTypeName)
  305.     XgrRegisterMessage (@"SetGroup",                                        @#SetGroup)
  306.     XgrRegisterMessage (@"SetHelp",                                            @#SetHelp)
  307.     XgrRegisterMessage (@"SetHelpFile",                                    @#SetHelpFile)
  308.     XgrRegisterMessage (@"SetHelpString",                                @#SetHelpString)
  309.     XgrRegisterMessage (@"SetHelpStrings",                            @#SetHelpStrings)
  310.     XgrRegisterMessage (@"SetHintString",                                @#SetHintString)
  311.     XgrRegisterMessage (@"SetImage",                                        @#SetImage)
  312.     XgrRegisterMessage (@"SetImageCoords",                            @#SetImageCoords)
  313.     XgrRegisterMessage (@"SetIndent",                                        @#SetIndent)
  314.     XgrRegisterMessage (@"SetInfo",                                            @#SetInfo)
  315.     XgrRegisterMessage (@"SetJustify",                                    @#SetJustify)
  316.     XgrRegisterMessage (@"SetKeyboardFocus",                        @#SetKeyboardFocus)
  317.     XgrRegisterMessage (@"SetKeyboardFocusGrid",                @#SetKeyboardFocusGrid)
  318.     XgrRegisterMessage (@"SetMaxMinSize",                                @#SetMaxMinSize)
  319.     XgrRegisterMessage (@"SetMessageFunc",                            @#SetMessageFunc)
  320.     XgrRegisterMessage (@"SetMessageFuncArray",                    @#SetMessageFuncArray)
  321.     XgrRegisterMessage (@"SetMessageSub",                                @#SetMessageSub)
  322.     XgrRegisterMessage (@"SetMessageSubArray",                    @#SetMessageSubArray)
  323.     XgrRegisterMessage (@"SetModalWindow",                            @#SetModalWindow)
  324.     XgrRegisterMessage (@"SetParent",                                        @#SetParent)
  325.     XgrRegisterMessage (@"SetPosition",                                    @#SetPosition)
  326.     XgrRegisterMessage (@"SetRedrawFlags",                            @#SetRedrawFlags)
  327.     XgrRegisterMessage (@"SetSize",                                            @#SetSize)
  328.     XgrRegisterMessage (@"SetState",                                        @#SetState)
  329.     XgrRegisterMessage (@"SetStyle",                                        @#SetStyle)
  330.     XgrRegisterMessage (@"SetTabArray",                                    @#SetTabArray)
  331.     XgrRegisterMessage (@"SetTabWidth",                                    @#SetTabWidth)
  332.     XgrRegisterMessage (@"SetTextArray",                                @#SetTextArray)
  333.     XgrRegisterMessage (@"SetTextArrayLine",                        @#SetTextArrayLine)
  334.     XgrRegisterMessage (@"SetTextArrayLines",                        @#SetTextArrayLines)
  335.     XgrRegisterMessage (@"SetTextCursor",                                @#SetTextCursor)
  336.     XgrRegisterMessage (@"SetTextFilename",                            @#SetTextFilename)
  337.     XgrRegisterMessage (@"SetTextSelection",                        @#SetTextSelection)
  338.     XgrRegisterMessage (@"SetTextString",                                @#SetTextString)
  339.     XgrRegisterMessage (@"SetTextStrings",                            @#SetTextStrings)
  340.     XgrRegisterMessage (@"SetTexture",                                    @#SetTexture)
  341.     XgrRegisterMessage (@"SetTimer",                                        @#SetTimer)
  342.     XgrRegisterMessage (@"SetValue",                                        @#SetValue)
  343.     XgrRegisterMessage (@"SetValues",                                        @#SetValues)
  344.     XgrRegisterMessage (@"SetValueArray",                                @#SetValueArray)
  345.     XgrRegisterMessage (@"SetWindowFunction",                        @#SetWindowFunction)
  346.     XgrRegisterMessage (@"SetWindowIcon",                                @#SetWindowIcon)
  347.     XgrRegisterMessage (@"SetWindowTitle",                            @#SetWindowTitle)
  348.     XgrRegisterMessage (@"ShowTextCursor",                            @#ShowTextCursor)
  349.     XgrRegisterMessage (@"ShowWindow",                                    @#ShowWindow)
  350.     XgrRegisterMessage (@"SomeLess",                                        @#SomeLess)
  351.     XgrRegisterMessage (@"SomeMore",                                        @#SomeMore)
  352.     XgrRegisterMessage (@"StartTimer",                                    @#StartTimer)
  353.     XgrRegisterMessage (@"SystemMessage",                                @#SystemMessage)
  354.     XgrRegisterMessage (@"TextDelete",                                    @#TextDelete)
  355.     XgrRegisterMessage (@"TextEvent",                                        @#TextEvent)
  356.     XgrRegisterMessage (@"TextInsert",                                    @#TextInsert)
  357.     XgrRegisterMessage (@"TextModified",                                @#TextModified)
  358.     XgrRegisterMessage (@"TextReplace",                                    @#TextReplace)
  359.     XgrRegisterMessage (@"TimeOut",                                            @#TimeOut)
  360.     XgrRegisterMessage (@"Update",                                            @#Update)
  361.     XgrRegisterMessage (@"WindowClose",                                    @#WindowClose)
  362.     XgrRegisterMessage (@"WindowCreate",                                @#WindowCreate)
  363.     XgrRegisterMessage (@"WindowDeselected",                        @#WindowDeselected)
  364.     XgrRegisterMessage (@"WindowDestroy",                                @#WindowDestroy)
  365.     XgrRegisterMessage (@"WindowDestroyed",                            @#WindowDestroyed)
  366.     XgrRegisterMessage (@"WindowDisplay",                                @#WindowDisplay)
  367.     XgrRegisterMessage (@"WindowDisplayed",                            @#WindowDisplayed)
  368.     XgrRegisterMessage (@"WindowGetDisplay",                        @#WindowGetDisplay)
  369.     XgrRegisterMessage (@"WindowGetFunction",                        @#WindowGetFunction)
  370.     XgrRegisterMessage (@"WindowGetIcon",                                @#WindowGetIcon)
  371.     XgrRegisterMessage (@"WindowGetKeyboardFocusGrid",    @#WindowGetKeyboardFocusGrid)
  372.     XgrRegisterMessage (@"WindowGetSelectedWindow",            @#WindowGetSelectedWindow)
  373.     XgrRegisterMessage (@"WindowGetSize",                                @#WindowGetSize)
  374.     XgrRegisterMessage (@"WindowGetTitle",                            @#WindowGetTitle)
  375.     XgrRegisterMessage (@"WindowHelp",                                    @#WindowHelp)
  376.     XgrRegisterMessage (@"WindowHide",                                    @#WindowHide)
  377.     XgrRegisterMessage (@"WindowHidden",                                @#WindowHidden)
  378.     XgrRegisterMessage (@"WindowKeyDown",                                @#WindowKeyDown)
  379.     XgrRegisterMessage (@"WindowKeyUp",                                    @#WindowKeyUp)
  380.     XgrRegisterMessage (@"WindowMaximize",                            @#WindowMaximize)
  381.     XgrRegisterMessage (@"WindowMaximized",                            @#WindowMaximized)
  382.     XgrRegisterMessage (@"WindowMinimize",                            @#WindowMinimize)
  383.     XgrRegisterMessage (@"WindowMinimized",                            @#WindowMinimized)
  384.     XgrRegisterMessage (@"WindowMonitorContext",                @#WindowMonitorContext)
  385.     XgrRegisterMessage (@"WindowMonitorHelp",                        @#WindowMonitorHelp)
  386.     XgrRegisterMessage (@"WindowMonitorKeyboard",                @#WindowMonitorKeyboard)
  387.     XgrRegisterMessage (@"WindowMonitorMouse",                    @#WindowMonitorMouse)
  388.     XgrRegisterMessage (@"WindowMouseDown",                            @#WindowMouseDown)
  389.     XgrRegisterMessage (@"WindowMouseDrag",                            @#WindowMouseDrag)
  390.     XgrRegisterMessage (@"WindowMouseEnter",                        @#WindowMouseEnter)
  391.     XgrRegisterMessage (@"WindowMouseExit",                            @#WindowMouseExit)
  392.     XgrRegisterMessage (@"WindowMouseMove",                            @#WindowMouseMove)
  393.     XgrRegisterMessage (@"WindowMouseUp",                                @#WindowMouseUp)
  394.     XgrRegisterMessage (@"WindowRedraw",                                @#WindowRedraw)
  395.     XgrRegisterMessage (@"WindowRegister",                            @#WindowRegister)
  396.     XgrRegisterMessage (@"WindowResize",                                @#WindowResize)
  397.     XgrRegisterMessage (@"WindowResized",                                @#WindowResized)
  398.     XgrRegisterMessage (@"WindowResizeToGrid",                    @#WindowResizeToGrid)
  399.     XgrRegisterMessage (@"WindowSelect",                                @#WindowSelect)
  400.     XgrRegisterMessage (@"WindowSelected",                            @#WindowSelected)
  401.     XgrRegisterMessage (@"WindowSetFunction",                        @#WindowSetFunction)
  402.     XgrRegisterMessage (@"WindowSetIcon",                                @#WindowSetIcon)
  403.     XgrRegisterMessage (@"WindowSetKeyboardFocusGrid",    @#WindowSetKeyboardFocusGrid)
  404.     XgrRegisterMessage (@"WindowSetTitle",                            @#WindowSetTitle)
  405.     XgrRegisterMessage (@"WindowShow",                                    @#WindowShow)
  406.     XgrRegisterMessage (@"WindowSystemMessage",                    @#WindowSystemMessage)
  407.     XgrRegisterMessage (@"LastMessage",                                    @#LastMessage)
  408. '
  409.     XgrGetDisplaySize ("", @#displayWidth, @#displayHeight, @#windowBorderWidth, @#windowTitleHeight)
  410. END FUNCTION
  411. '
  412. '
  413. ' ############################
  414. ' #####  InitProgram ()  #####
  415. ' ############################
  416. '
  417. ' Add code to InitProgram() to initialize whatever needs initialization.
  418. ' Do not delete this function - leave it empty if not needed.
  419. '
  420. FUNCTION  InitProgram ()
  421.     SHARED oldgroup, event
  422. '
  423.     oldgroup = 0
  424.     event = 0
  425. END FUNCTION
  426. '
  427. '
  428. ' ##############################
  429. ' #####  CreateWindows ()  #####
  430. ' ##############################
  431. '
  432. ' GuiDesigner puts code in CreateWindows() to create, initialize, display
  433. ' every window you design graphically.  Don't modify this function unless
  434. ' absolutely necessary - GuiDesigner needs to read and update it at times.
  435. '
  436. ' CreateWindows() usually should not be executed when compiled as library.
  437. ' Start CreateWindows() with "IF LIBRARY(0) THEN RETURN" to assure this.
  438. '
  439. FUNCTION  CreateWindows ()
  440.     SHARED  DemoButton,  DemoText,  DemoDialog,  DemoPullDown
  441.     SHARED  DemoFile,  DemoFont,  DemoMiscellany
  442. '
  443.   IF LIBRARY(0) THEN RETURN
  444. '
  445.     wt = $$WindowTypeTitleBar
  446. '
  447.   DemoGUI (@DemoGUI, #CreateWindow, 0, 0, 0, 0, wt, 0)
  448.   XuiSendMessage (DemoGUI, #SetCallback, DemoGUI, &DemoGUICode(), -1, -1, -1, 0)
  449.   XuiSendMessage (DemoGUI, #Initialize, 0, 0, 0, 0, 0, 0)
  450.   XuiSendMessage (DemoGUI, #DisplayWindow, 0, 0, 0, 0, 0, 0)
  451. '
  452.   DemoButton (@DemoButton, #CreateWindow, 0, 0, 0, 0, wt, 0)
  453.   XuiSendMessage (DemoButton, #SetCallback, DemoButton, &DemoButtonCode(), -1, -1, -1, 0)
  454.   XuiSendMessage (DemoButton, #Initialize, 0, 0, 0, 0, 0, 0)
  455. '    XuiSendMessage (DemoButton, #DisplayWindow, 0, 0, 0, 0, 0, 0)
  456. '
  457.   DemoText (@DemoText, #CreateWindow, 0, 0, 0, 0, wt, 0)
  458.   XuiSendMessage (DemoText, #SetCallback, DemoText, &DemoTextCode(), -1, -1, -1, 0)
  459.   XuiSendMessage (DemoText, #Initialize, 0, 0, 0, 0, 0, 0)
  460. '    XuiSendMessage (DemoText, #DisplayWindow, 0, 0, 0, 0, 0, 0)
  461. '
  462.   DemoDialog (@DemoDialog, #CreateWindow, 0, 0, 0, 0, wt, 0)
  463.   XuiSendMessage (DemoDialog, #SetCallback, DemoDialog, &DemoDialogCode(), -1, -1, -1, 0)
  464.   XuiSendMessage (DemoDialog, #Initialize, 0, 0, 0, 0, 0, 0)
  465. '    XuiSendMessage (DemoDialog, #DisplayWindow, 0, 0, 0, 0, 0, 0)
  466. '
  467.   DemoPullDown (@DemoPullDown, #CreateWindow, 0, 0, 0, 0, wt, 0)
  468.   XuiSendMessage (DemoPullDown, #SetCallback, DemoPullDown, &DemoPullDownCode(), -1, -1, -1, 0)
  469.   XuiSendMessage (DemoPullDown, #Initialize, 0, 0, 0, 0, 0, 0)
  470. '    XuiSendMessage (DemoPullDown, #DisplayWindow, 0, 0, 0, 0, 0, 0)
  471. '
  472.     XuiFile (@DemoFile, #CreateWindow, 0, 0, 0, 0, wt, 0)
  473.   XuiSendMessage (DemoFile, #SetCallback, DemoFile, &DemoFileCode(), -1, -1, -1, 0)
  474.   XuiSendMessage (DemoFile, #SetGridName, 0, 0, 0, 0, 0, @"DemoFile")
  475. '    XuiSendMessage (DemoFile, #SetCallback, DemoFile, &DemoFile(), -1, -1, $File, DemoFile)
  476.   XuiSendMessage (DemoFile, #SetGridName, 0, 0, 0, 0, 0, @"File")
  477.   XuiSendMessage (DemoFile, #SetGridName, 0, 0, 0, 0, 1, @"FileNameLabel")
  478.   XuiSendMessage (DemoFile, #SetGridName, 0, 0, 0, 0, 2, @"FileNameText")
  479.   XuiSendMessage (DemoFile, #SetGridName, 0, 0, 0, 0, 3, @"DirectoryLabel")
  480.   XuiSendMessage (DemoFile, #SetGridName, 0, 0, 0, 0, 4, @"FilesLabel")
  481.   XuiSendMessage (DemoFile, #SetGridName, 0, 0, 0, 0, 5, @"DirectoryBox")
  482.   XuiSendMessage (DemoFile, #SetGridName, 0, 0, 0, 0, 6, @"FileBox")
  483.   XuiSendMessage (DemoFile, #SetGridName, 0, 0, 0, 0, 7, @"EnterButton")
  484.   XuiSendMessage (DemoFile, #SetGridName, 0, 0, 0, 0, 8, @"CancelButton")
  485.   XuiSendMessage (DemoFile, #Initialize, 0, 0, 0, 0, 0, 0)
  486. '    XuiSendMessage (DemoFile, #DisplayWindow, 0, 0, 0, 0, 0, 0)
  487. '
  488.     XuiFont (@DemoFont, #CreateWindow, 0, 0, 0, 0, wt, 0)
  489.   XuiSendMessage (DemoFont, #SetCallback, DemoFont, &DemoFontCode(), -1, -1, -1, 0)
  490.   XuiSendMessage (DemoFont, #SetGridName, 0, 0, 0, 0, 0, @"DemoFont")
  491.   XuiSendMessage (DemoFont, #Initialize, 0, 0, 0, 0, 0, 0)
  492. '    XuiSendMessage (DemoFont, #DisplayWindow, 0, 0, 0, 0, 0, 0)
  493. '
  494.   DemoMiscellany (@DemoMiscellany, #CreateWindow, 0, 0, 0, 0, wt, 0)
  495.   XuiSendMessage (DemoMiscellany, #SetCallback, DemoMiscellany, &DemoMiscellanyCode(), -1, -1, -1, 0)
  496.   XuiSendMessage (DemoMiscellany, #Initialize, 0, 0, 0, 0, 0, 0)
  497. '    XuiSendMessage (DemoMiscellany, #DisplayWindow, 0, 0, 0, 0, 0, 0)
  498. END FUNCTION
  499. '
  500. '
  501. ' ########################
  502. ' #####  DemoGUI ()  #####
  503. ' ########################
  504. '
  505. FUNCTION  DemoGUI (grid, message, v0, v1, v2, v3, r0, (r1, r1$, r1[], r1$[]))
  506.   STATIC  designX,  designY,  designWidth,  designHeight
  507.   STATIC  SUBADDR  sub[]
  508.   STATIC  upperMessage
  509.   STATIC  DemoGUI
  510. '
  511.   $DemoGUI         =  0  ' kid  0 grid type = DemoGUI
  512.   $DoColor         =  1  ' kid  1 grid type = XuiCheckBox
  513.   $DoLabel         =  2  ' kid  2 grid type = XuiCheckBox
  514.   $DoCheckBox      =  3  ' kid  3 grid type = XuiCheckBox
  515.   $DoRadioBox      =  4  ' kid  4 grid type = XuiCheckBox
  516.   $DoPressButton   =  5  ' kid  5 grid type = XuiCheckBox
  517.   $DoPushButton    =  6  ' kid  6 grid type = XuiCheckBox
  518.   $DoToggleButton  =  7  ' kid  7 grid type = XuiCheckBox
  519.   $DoRadioButton   =  8  ' kid  8 grid type = XuiCheckBox
  520.   $DoScrollBarH    =  9  ' kid  9 grid type = XuiCheckBox
  521.   $DoScrollBarV    = 10  ' kid 10 grid type = XuiCheckBox
  522.   $DoTextLine      = 11  ' kid 11 grid type = XuiCheckBox
  523.   $DoTextArea      = 12  ' kid 12 grid type = XuiCheckBox
  524.   $DoMenu          = 13  ' kid 13 grid type = XuiCheckBox
  525.   $DoMenuBar       = 14  ' kid 14 grid type = XuiCheckBox
  526.   $DoPullDown      = 15  ' kid 15 grid type = XuiCheckBox
  527.   $DoList          = 16  ' kid 16 grid type = XuiCheckBox
  528.   $DoMessage1B     = 17  ' kid 17 grid type = XuiCheckBox
  529.   $DoMessage2B     = 18  ' kid 18 grid type = XuiCheckBox
  530.   $DoMessage3B     = 19  ' kid 19 grid type = XuiCheckBox
  531.   $DoMessage4B     = 20  ' kid 20 grid type = XuiCheckBox
  532.   $DoProgress      = 21  ' kid 21 grid type = XuiCheckBox
  533.   $DoDialog2B      = 22  ' kid 22 grid type = XuiCheckBox
  534.   $DoDialog3B      = 23  ' kid 23 grid type = XuiCheckBox
  535.   $DoDialog4B      = 24  ' kid 24 grid type = XuiCheckBox
  536.   $DoDropButton    = 25  ' kid 25 grid type = XuiCheckBox
  537.   $DoDropBox       = 26  ' kid 26 grid type = XuiCheckBox
  538.   $DoListButton    = 27  ' kid 27 grid type = XuiCheckBox
  539.   $DoListBox       = 28  ' kid 28 grid type = XuiCheckBox
  540.   $DoRange         = 29  ' kid 29 grid type = XuiCheckBox
  541.   $DoFile          = 30  ' kid 30 grid type = XuiCheckBox
  542.   $DoFont          = 31  ' kid 31 grid type = XuiCheckBox
  543.   $DoListDialog2B  = 32  ' kid 32 grid type = XuiCheckBox
  544.   $DoQuit          = 33  ' kid 33 grid type = XuiPressButton
  545.   $UpperKid        = 33  ' kid maximum
  546. '
  547. '
  548.   IFZ sub[] THEN GOSUB Initialize
  549. ' XuiReportMessage (grid, message, v0, v1, v2, v3, r0, r1)
  550.   IF XuiProcessMessage (grid, message, @v0, @v1, @v2, @v3, @r0, @r1, DemoGUI) THEN RETURN
  551.   IF (message <= upperMessage) THEN GOSUB @sub[message]
  552.   RETURN
  553. '
  554. '
  555. ' *****  Callback  *****  message = Callback : r1 = original message
  556. '
  557. SUB Callback
  558.   message = r1
  559.   IF (message <= upperMessage) THEN GOSUB @sub[message]
  560. END SUB
  561. '
  562. '
  563. ' *****  Create  *****  v0123 = xywh : r0 = window : r1 = parent
  564. '
  565. SUB Create
  566.   IF (v0 <= 0) THEN v0 = 0
  567.   IF (v1 <= 0) THEN v1 = 0
  568.   IF (v2 <= 0) THEN v2 = designWidth
  569.   IF (v3 <= 0) THEN v3 = designHeight
  570.   XuiCreateGrid (@grid, DemoGUI, @v0, @v1, @v2, @v3, r0, r1, &DemoGUI())
  571.   XuiSendMessage ( grid, #SetGridName, 0, 0, 0, 0, 0, @"DemoGUI")
  572.   XuiCheckBox    (@g, #Create, 4, 4, 124, 16, r0, grid)
  573.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoColor, grid)
  574.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoColor")
  575.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  576.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  577.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Color")
  578.   XuiCheckBox    (@g, #Create, 128, 4, 124, 16, r0, grid)
  579.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoLabel, grid)
  580.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoLabel")
  581.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  582.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  583.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Label")
  584.   XuiCheckBox    (@g, #Create, 252, 4, 124, 16, r0, grid)
  585.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoCheckBox, grid)
  586.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoCheckBox")
  587.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  588.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  589.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"CheckBox")
  590.   XuiCheckBox    (@g, #Create, 376, 4, 124, 16, r0, grid)
  591.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoRadioBox, grid)
  592.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoRadioBox")
  593.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  594.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  595.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"RadioBox")
  596.   XuiCheckBox    (@g, #Create, 4, 20, 124, 16, r0, grid)
  597.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoPressButton, grid)
  598.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoPressButton")
  599.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  600.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  601.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"PressButton")
  602.   XuiCheckBox    (@g, #Create, 128, 20, 124, 16, r0, grid)
  603.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoPushButton, grid)
  604.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoPushButton")
  605.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  606.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  607.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"PushButton")
  608.   XuiCheckBox    (@g, #Create, 252, 20, 124, 16, r0, grid)
  609.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoToggleButton, grid)
  610.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoToggleButton")
  611.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  612.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  613.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"ToggleButton")
  614.   XuiCheckBox    (@g, #Create, 376, 20, 124, 16, r0, grid)
  615.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoRadioButton, grid)
  616.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoRadioButton")
  617.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  618.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  619.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"RadioButton")
  620.   XuiCheckBox    (@g, #Create, 4, 36, 124, 16, r0, grid)
  621.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoScrollBarH, grid)
  622.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoScrollBarH")
  623.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  624.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  625.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"ScrollBarH")
  626.   XuiCheckBox    (@g, #Create, 128, 36, 124, 16, r0, grid)
  627.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoScrollBarV, grid)
  628.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoScrollBarV")
  629.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  630.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  631.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"ScrollBarV")
  632.   XuiCheckBox    (@g, #Create, 252, 36, 124, 16, r0, grid)
  633.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoTextLine, grid)
  634.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoTextLine")
  635.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  636.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  637.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"TextLine")
  638.   XuiCheckBox    (@g, #Create, 376, 36, 124, 16, r0, grid)
  639.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoTextArea, grid)
  640.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoTextArea")
  641.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  642.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  643.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"TextArea")
  644.   XuiCheckBox    (@g, #Create, 4, 52, 124, 16, r0, grid)
  645.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoMenu, grid)
  646.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoMenu")
  647.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  648.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  649.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Menu")
  650.   XuiCheckBox    (@g, #Create, 128, 52, 124, 16, r0, grid)
  651.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoMenuBar, grid)
  652.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoMenuBar")
  653.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  654.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  655.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"MenuBar")
  656.   XuiCheckBox    (@g, #Create, 252, 52, 124, 16, r0, grid)
  657.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoPullDown, grid)
  658.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoPullDown")
  659.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  660.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  661.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"PullDown")
  662.   XuiCheckBox    (@g, #Create, 376, 52, 124, 16, r0, grid)
  663.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoList, grid)
  664.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoList")
  665.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  666.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  667.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"List")
  668.   XuiCheckBox    (@g, #Create, 4, 68, 124, 16, r0, grid)
  669.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoMessage1B, grid)
  670.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoMessage1B")
  671.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  672.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  673.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Message1B")
  674.   XuiCheckBox    (@g, #Create, 128, 68, 124, 16, r0, grid)
  675.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoMessage2B, grid)
  676.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoMessage2B")
  677.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  678.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  679.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Message2B")
  680.   XuiCheckBox    (@g, #Create, 252, 68, 124, 16, r0, grid)
  681.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoMessage3B, grid)
  682.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoMessage3B")
  683.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  684.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  685.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Message3B")
  686.   XuiCheckBox    (@g, #Create, 376, 68, 124, 16, r0, grid)
  687.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoMessage4B, grid)
  688.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoMessage4B")
  689.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  690.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  691.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Message4B")
  692.   XuiCheckBox    (@g, #Create, 4, 84, 124, 16, r0, grid)
  693.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoProgress, grid)
  694.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoProgress")
  695.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  696.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  697.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Progress")
  698.   XuiCheckBox    (@g, #Create, 128, 84, 124, 16, r0, grid)
  699.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoDialog2B, grid)
  700.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoDialog2B")
  701.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  702.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  703.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Dialog2B")
  704.   XuiCheckBox    (@g, #Create, 252, 84, 124, 16, r0, grid)
  705.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoDialog3B, grid)
  706.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoDialog3B")
  707.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  708.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  709.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Dialog3B")
  710.   XuiCheckBox    (@g, #Create, 376, 84, 124, 16, r0, grid)
  711.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoDialog4B, grid)
  712.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoDialog4B")
  713.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  714.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  715.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Dialog4B")
  716.   XuiCheckBox    (@g, #Create, 4, 100, 124, 16, r0, grid)
  717.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoDropButton, grid)
  718.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoDropButton")
  719.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  720.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  721.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"DropButton")
  722.   XuiCheckBox    (@g, #Create, 128, 100, 124, 16, r0, grid)
  723.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoDropBox, grid)
  724.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoDropBox")
  725.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  726.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  727.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"DropBox")
  728.   XuiCheckBox    (@g, #Create, 252, 100, 124, 16, r0, grid)
  729.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoListButton, grid)
  730.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoListButton")
  731.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  732.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  733.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"ListButton")
  734.   XuiCheckBox    (@g, #Create, 376, 100, 124, 16, r0, grid)
  735.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoListBox, grid)
  736.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoListBox")
  737.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  738.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  739.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"ListBox")
  740.   XuiCheckBox    (@g, #Create, 4, 116, 124, 16, r0, grid)
  741.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoRange, grid)
  742.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoRange")
  743.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  744.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  745.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Range")
  746.   XuiCheckBox    (@g, #Create, 128, 116, 124, 16, r0, grid)
  747.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoFile, grid)
  748.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoFile")
  749.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  750.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  751.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"File")
  752.   XuiCheckBox    (@g, #Create, 252, 116, 124, 16, r0, grid)
  753.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoFont, grid)
  754.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoFont")
  755.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  756.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  757.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Font")
  758.   XuiCheckBox    (@g, #Create, 376, 116, 124, 16, r0, grid)
  759.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoListDialog2B, grid)
  760.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoListDialog2B")
  761.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderRaise1, -1, 0, 0)
  762.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  763.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"ListDialog2B")
  764.   XuiPressButton (@g, #Create, 4, 132, 496, 16, r0, grid)
  765.   XuiSendMessage ( g, #SetCallback, grid, &DemoGUI(), -1, -1, $DoQuit, grid)
  766.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DoQuit")
  767.   XuiSendMessage ( g, #SetBorder, $$BorderLoLine1, $$BorderLoLine1, $$BorderLower1, -1, 0, 0)
  768.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  769.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Quit")
  770.   GOSUB Resize
  771. END SUB
  772. '
  773. '
  774. ' *****  CreateWindow  *****  v0123 = xywh : r0 = windowType : r1$ = display$
  775. '
  776. SUB CreateWindow
  777.   IF (v0  = 0) THEN v0 = designX
  778.   IF (v1  = 0) THEN v1 = designY
  779.   IF (v2 <= 0) THEN v2 = designWidth
  780.   IF (v3 <= 0) THEN v3 = designHeight
  781.   XuiWindow (@window, #WindowCreate, v0, v1, v2, v3, r0, @r1$)
  782.   v0 = 0 : v1 = 0 : r0 = window : ATTACH r1$ TO display$
  783.   GOSUB Create
  784.     r1 = 0 : ATTACH display$ TO r1$
  785.   XuiWindow (window, #WindowRegister, grid, -1, v2, v3, @r0, @"DemoGUI")
  786. END SUB
  787. '
  788. '
  789. ' *****  GetSmallestSize  *****  See "Anatomy of Grid Functions"
  790. '
  791. SUB GetSmallestSize
  792. END SUB
  793. '
  794. '
  795. ' *****  Resize  *****  See "Anatomy of Grid Functions"
  796. '
  797. SUB Resize
  798. END SUB
  799. '
  800. '
  801. ' *****  Selection  *****  See "Anatomy of Grid Functions"
  802. '
  803. SUB Selection
  804. END SUB
  805. '
  806. '
  807. ' *****  Initialize  *****  ' see "Anatomy of Grid Functions"
  808. '
  809. SUB Initialize
  810.   XuiGetDefaultMessageFuncArray (@func[])
  811.   XgrMessageNameToNumber (@"LastMessage", @upperMessage)
  812. '
  813.   func[#Callback]           = &XuiCallback ()               ' disable to handle Callback messages internally
  814. ' func[#GetSmallestSize]    = 0                             ' enable to add internal GetSmallestSize routine
  815. ' func[#Resize]             = 0                             ' enable to add internal Resize routine
  816. '
  817.   DIM sub[upperMessage]
  818. ' sub[#Callback]            = SUBADDRESS (Callback)         ' enable to handle Callback messages internally
  819.   sub[#Create]              = SUBADDRESS (Create)           ' must be internal routine
  820.   sub[#CreateWindow]        = SUBADDRESS (CreateWindow)     ' must be internal routine
  821. ' sub[#GetSmallestSize]     = SUBADDRESS (GetSmallestSize)  ' enable to add internal GetSmallestSize routine
  822. ' sub[#Resize]              = SUBADDRESS (Resize)           ' enable to add internal Resize routine
  823.   sub[#Selection]           = SUBADDRESS (Selection)        ' routes Selection callbacks to subroutine
  824. '
  825.   IF sub[0] THEN PRINT "DemoGUI(): Initialize: Error::: (Undefined Message)"
  826.   IF func[0] THEN PRINT "DemoGUI(): Initialize: Error::: (Undefined Message)"
  827.   XuiRegisterGridType (@DemoGUI, "DemoGUI", &DemoGUI(), @func[], @sub[])
  828. '
  829. ' Don't remove the following 4 lines, or WindowFromFunction/WindowToFunction will not work
  830. '
  831.   designX = 516
  832.   designY = 23
  833.   designWidth = 504
  834.   designHeight = 152
  835. '
  836.   gridType = DemoGUI
  837.   XuiSetGridTypeValue (gridType, @"x",                designX)
  838.   XuiSetGridTypeValue (gridType, @"y",                designY)
  839.   XuiSetGridTypeValue (gridType, @"width",            designWidth)
  840.   XuiSetGridTypeValue (gridType, @"height",           designHeight)
  841.   XuiSetGridTypeValue (gridType, @"maxWidth",         designWidth)
  842.   XuiSetGridTypeValue (gridType, @"maxHeight",        designHeight)
  843.   XuiSetGridTypeValue (gridType, @"minWidth",         designWidth)
  844.   XuiSetGridTypeValue (gridType, @"minHeight",        designHeight)
  845.   XuiSetGridTypeValue (gridType, @"border",           $$BorderFrame)
  846.   XuiSetGridTypeValue (gridType, @"can",              $$Focus OR $$Respond OR $$Callback)
  847.   XuiSetGridTypeValue (gridType, @"focusKid",         $DoColor)
  848.   IFZ message THEN RETURN
  849. END SUB
  850. END FUNCTION
  851. '
  852. ' ############################
  853. ' #####  DemoGUICode ()  #####
  854. ' ############################
  855. '
  856. FUNCTION  DemoGUICode (grid, message, v0, v1, v2, v3, kid, r1)
  857.     SHARED oldgroup
  858.     STATIC oldwindow
  859.     SHARED DemoButton, DemoText, DemoDialog
  860.     SHARED DemoPullDown, DemoFile, DemoFont, DemoMiscellany
  861. '
  862.   $DemoGUI         =  0  ' kid  0 grid type = DemoGUI
  863.   $DoColor         =  1  ' kid  1 grid type = XuiCheckBox
  864.   $DoLabel         =  2  ' kid  2 grid type = XuiCheckBox
  865.   $DoCheckBox      =  3  ' kid  3 grid type = XuiCheckBox
  866.   $DoRadioBox      =  4  ' kid  4 grid type = XuiCheckBox
  867.   $DoPressButton   =  5  ' kid  5 grid type = XuiCheckBox
  868.   $DoPushButton    =  6  ' kid  6 grid type = XuiCheckBox
  869.   $DoToggleButton  =  7  ' kid  7 grid type = XuiCheckBox
  870.   $DoRadioButton   =  8  ' kid  8 grid type = XuiCheckBox
  871.   $DoScrollBarH    =  9  ' kid  9 grid type = XuiCheckBox
  872.   $DoScrollBarV    = 10  ' kid 10 grid type = XuiCheckBox
  873.   $DoTextLine      = 11  ' kid 11 grid type = XuiCheckBox
  874.   $DoTextArea      = 12  ' kid 12 grid type = XuiCheckBox
  875.   $DoMenu          = 13  ' kid 13 grid type = XuiCheckBox
  876.   $DoMenuBar       = 14  ' kid 14 grid type = XuiCheckBox
  877.   $DoPullDown      = 15  ' kid 15 grid type = XuiCheckBox
  878.   $DoList          = 16  ' kid 16 grid type = XuiCheckBox
  879.   $DoMessage1B     = 17  ' kid 17 grid type = XuiCheckBox
  880.   $DoMessage2B     = 18  ' kid 18 grid type = XuiCheckBox
  881.   $DoMessage3B     = 19  ' kid 19 grid type = XuiCheckBox
  882.   $DoMessage4B     = 20  ' kid 20 grid type = XuiCheckBox
  883.   $DoProgress      = 21  ' kid 21 grid type = XuiCheckBox
  884.   $DoDialog2B      = 22  ' kid 22 grid type = XuiCheckBox
  885.   $DoDialog3B      = 23  ' kid 23 grid type = XuiCheckBox
  886.   $DoDialog4B      = 24  ' kid 24 grid type = XuiCheckBox
  887.   $DoDropButton    = 25  ' kid 25 grid type = XuiCheckBox
  888.   $DoDropBox       = 26  ' kid 26 grid type = XuiCheckBox
  889.   $DoListButton    = 27  ' kid 27 grid type = XuiCheckBox
  890.   $DoListBox       = 28  ' kid 28 grid type = XuiCheckBox
  891.   $DoRange         = 29  ' kid 29 grid type = XuiCheckBox
  892.   $DoFile          = 30  ' kid 30 grid type = XuiCheckBox
  893.   $DoFont          = 31  ' kid 31 grid type = XuiCheckBox
  894.   $DoListDialog2B  = 32  ' kid 32 grid type = XuiCheckBox
  895.   $DoQuit          = 33  ' kid 33 grid type = XuiPressButton
  896.   $UpperKid        = 33  ' kid maximum
  897. '
  898. '  XuiReportMessage (grid, message, v0, v1, v2, v3, kid, r1)
  899.   IF (message = #Callback) THEN message = r1
  900. '
  901.   SELECT CASE message
  902.     CASE #Selection: GOSUB Selection   ' Common callback message
  903. '   CASE #TextEvent: GOSUB TextEvent   ' KeyDown in TextArea or TextLine
  904.   END SELECT
  905.   RETURN
  906. '
  907. '
  908. ' *****  Selection  *****
  909. '
  910. SUB Selection
  911.   IF kid = $DemoGUI THEN EXIT SUB
  912.   IF kid = $DoQuit THEN QUIT(0)
  913.   map$ = "60000000111133312222622233336452"
  914.   group = map${kid - 1}
  915.   IF (group = 'x') THEN
  916.     XuiMessage("Demo Not Implemented")
  917.     i = kid : a = 0 : GOSUB Push
  918.     EXIT SUB
  919.   END IF
  920.   IF v0 = 0 THEN i = kid : a = -1 : GOSUB Push : EXIT SUB
  921.   FOR i = 1 TO 32
  922.     IF map${i - 1} = oldgroup THEN a = 0: GOSUB Push
  923.     IF map${i - 1} = group THEN a = -1: GOSUB Push
  924.   NEXT i
  925.   IF oldgroup THEN XuiSendMessage (oldwindow, #HideWindow, 0,0,0,0,0,0)
  926.   oldgroup = group
  927.   SELECT CASE group
  928.     CASE '0': oldwindow = DemoButton
  929.     CASE '1': oldwindow = DemoText
  930.         CASE '2': oldwindow = DemoDialog
  931.         CASE '3': oldwindow = DemoPullDown
  932.         CASE '4': oldwindow = DemoFile
  933.         CASE '5': oldwindow = DemoFont
  934.         CASE '6': oldwindow = DemoMiscellany
  935.   END SELECT
  936.   XuiSendMessage (oldwindow, #ShowWindow, 0, 0, 0, 0, 0, 0)
  937. END SUB
  938. '
  939. SUB Push
  940.   XuiSendMessage (grid, #SetValue, a, 0, 0, 0, i, 0)
  941.   XuiSendMessage (grid, #Redraw, 0, 0, 0, 0, i, 0)
  942. END SUB
  943. END FUNCTION
  944. '
  945. '
  946. ' ###########################
  947. ' #####  DemoButton ()  #####
  948. ' ###########################
  949. '
  950. FUNCTION  DemoButton (grid, message, v0, v1, v2, v3, r0, (r1, r1$, r1[], r1$[]))
  951.   STATIC  designX,  designY,  designWidth,  designHeight
  952.   STATIC  SUBADDR  sub[]
  953.   STATIC  upperMessage
  954.   STATIC  DemoButton
  955. '
  956.   $DemoButton     =  0  ' kid  0 grid type = DemoButton
  957.   $Label0         =  1  ' kid  1 grid type = XuiLabel
  958.   $Label1         =  2  ' kid  2 grid type = XuiLabel
  959.   $Label2         =  3  ' kid  3 grid type = XuiLabel
  960.   $CheckBox0      =  4  ' kid  4 grid type = XuiCheckBox
  961.   $CheckBox1      =  5  ' kid  5 grid type = XuiCheckBox
  962.   $CheckBox2      =  6  ' kid  6 grid type = XuiCheckBox
  963.   $RadioBox0      =  7  ' kid  7 grid type = XuiRadioBox
  964.   $RadioBox1      =  8  ' kid  8 grid type = XuiRadioBox
  965.   $RadioBox2      =  9  ' kid  9 grid type = XuiRadioBox
  966.   $PressButton0   = 10  ' kid 10 grid type = XuiPressButton
  967.   $PressButton1   = 11  ' kid 11 grid type = XuiPressButton
  968.   $PressButton2   = 12  ' kid 12 grid type = XuiPressButton
  969.   $PushButton0    = 13  ' kid 13 grid type = XuiPushButton
  970.   $PushButton1    = 14  ' kid 14 grid type = XuiPushButton
  971.   $PushButton2    = 15  ' kid 15 grid type = XuiPushButton
  972.   $ToggleButton0  = 16  ' kid 16 grid type = XuiToggleButton
  973.   $ToggleButton1  = 17  ' kid 17 grid type = XuiToggleButton
  974.   $ToggleButton2  = 18  ' kid 18 grid type = XuiToggleButton
  975.   $RadioButton0   = 19  ' kid 19 grid type = XuiRadioButton
  976.   $RadioButton1   = 20  ' kid 20 grid type = XuiRadioButton
  977.   $RadioButton2   = 21  ' kid 21 grid type = XuiRadioButton
  978.   $UpperKid       = 21  ' kid maximum
  979. '
  980. '
  981.   IFZ sub[] THEN GOSUB Initialize
  982. ' XuiReportMessage (grid, message, v0, v1, v2, v3, r0, r1)
  983.   IF XuiProcessMessage (grid, message, @v0, @v1, @v2, @v3, @r0, @r1, DemoButton) THEN RETURN
  984.   IF (message <= upperMessage) THEN GOSUB @sub[message]
  985.   RETURN
  986. '
  987. '
  988. ' *****  Callback  *****  message = Callback : r1 = original message
  989. '
  990. SUB Callback
  991.   message = r1
  992.   IF (message <= upperMessage) THEN GOSUB @sub[message]
  993. END SUB
  994. '
  995. '
  996. ' *****  Create  *****  v0123 = xywh : r0 = window : r1 = parent
  997. '
  998. SUB Create
  999.   IF (v0 <= 0) THEN v0 = 0
  1000.   IF (v1 <= 0) THEN v1 = 0
  1001.   IF (v2 <= 0) THEN v2 = designWidth
  1002.   IF (v3 <= 0) THEN v3 = designHeight
  1003.   XuiCreateGrid (@grid, DemoButton, @v0, @v1, @v2, @v3, r0, r1, &DemoButton())
  1004.   XuiSendMessage ( grid, #SetGridName, 0, 0, 0, 0, 0, @"DemoButton")
  1005.   XuiLabel       (@g, #Create, 4, 4, 116, 20, r0, grid)
  1006.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Label0")
  1007.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Label0")
  1008.   XuiLabel       (@g, #Create, 120, 4, 116, 20, r0, grid)
  1009.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Label1")
  1010.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Label1")
  1011.   XuiLabel       (@g, #Create, 236, 4, 116, 20, r0, grid)
  1012.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Label2")
  1013.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Label2")
  1014.   XuiCheckBox    (@g, #Create, 4, 24, 116, 20, r0, grid)
  1015.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $CheckBox0, grid)
  1016.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"CheckBox0")
  1017.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"CheckBox0")
  1018.   XuiCheckBox    (@g, #Create, 120, 24, 116, 20, r0, grid)
  1019.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $CheckBox1, grid)
  1020.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"CheckBox1")
  1021.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"CheckBox1")
  1022.   XuiCheckBox    (@g, #Create, 236, 24, 116, 20, r0, grid)
  1023.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $CheckBox2, grid)
  1024.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"CheckBox2")
  1025.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"CheckBox2")
  1026.   XuiRadioBox    (@g, #Create, 4, 44, 116, 20, r0, grid)
  1027.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $RadioBox0, grid)
  1028.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"RadioBox0")
  1029.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"RadioBox0")
  1030.   XuiRadioBox    (@g, #Create, 120, 44, 116, 20, r0, grid)
  1031.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $RadioBox1, grid)
  1032.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"RadioBox1")
  1033.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"RadioBox1")
  1034.   XuiRadioBox    (@g, #Create, 236, 44, 116, 20, r0, grid)
  1035.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $RadioBox2, grid)
  1036.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"RadioBox2")
  1037.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"RadioBox2")
  1038.   XuiPressButton (@g, #Create, 4, 64, 116, 20, r0, grid)
  1039.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $PressButton0, grid)
  1040.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"PressButton0")
  1041.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"PressButton0")
  1042.   XuiPressButton (@g, #Create, 120, 64, 116, 20, r0, grid)
  1043.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $PressButton1, grid)
  1044.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"PressButton1")
  1045.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"PressButton1")
  1046.   XuiPressButton (@g, #Create, 236, 64, 116, 20, r0, grid)
  1047.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $PressButton2, grid)
  1048.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"PressButton2")
  1049.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"PressButton2")
  1050.   XuiPushButton  (@g, #Create, 4, 84, 116, 20, r0, grid)
  1051.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $PushButton0, grid)
  1052.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"PushButton0")
  1053.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"PushButton0")
  1054.     XuiSendMessage ( g, #SetFocusColor, $$BrightGreen, -1, -1, -1, 0, 0)
  1055.   XuiPushButton  (@g, #Create, 120, 84, 116, 20, r0, grid)
  1056.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $PushButton1, grid)
  1057.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"PushButton1")
  1058.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"PushButton1")
  1059.     XuiSendMessage ( g, #SetFocusColor, $$BrightCyan, -1, -1, -1, 0, 0)
  1060.   XuiPushButton  (@g, #Create, 236, 84, 116, 20, r0, grid)
  1061.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $PushButton2, grid)
  1062.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"PushButton2")
  1063.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"PushButton2")
  1064.     XuiSendMessage ( g, #SetFocusColor, $$BrightMagenta, -1, -1, -1, 0, 0)
  1065.   XuiToggleButton (@g, #Create, 4, 104, 116, 20, r0, grid)
  1066.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $ToggleButton0, grid)
  1067.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"ToggleButton0")
  1068.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"ToggleButton0")
  1069.   XuiToggleButton (@g, #Create, 120, 104, 116, 20, r0, grid)
  1070.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $ToggleButton1, grid)
  1071.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"ToggleButton1")
  1072.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"ToggleButton1")
  1073.   XuiToggleButton (@g, #Create, 236, 104, 116, 20, r0, grid)
  1074.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $ToggleButton2, grid)
  1075.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"ToggleButton2")
  1076.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"ToggleButton2")
  1077.   XuiRadioButton (@g, #Create, 4, 124, 116, 20, r0, grid)
  1078.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $RadioButton0, grid)
  1079.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"RadioButton0")
  1080.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"RadioButton0")
  1081.   XuiRadioButton (@g, #Create, 120, 124, 116, 20, r0, grid)
  1082.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $RadioButton1, grid)
  1083.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"RadioButton1")
  1084.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"RadioButton1")
  1085.   XuiRadioButton (@g, #Create, 236, 124, 116, 20, r0, grid)
  1086.   XuiSendMessage ( g, #SetCallback, grid, &DemoButton(), -1, -1, $RadioButton2, grid)
  1087.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"RadioButton2")
  1088.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"RadioButton2")
  1089.   GOSUB Resize
  1090. END SUB
  1091. '
  1092. '
  1093. ' *****  CreateWindow  *****  v0123 = xywh : r0 = windowType : r1$ = display$
  1094. '
  1095. SUB CreateWindow
  1096.   IF (v0  = 0) THEN v0 = designX
  1097.   IF (v1  = 0) THEN v1 = designY
  1098.   IF (v2 <= 0) THEN v2 = designWidth
  1099.   IF (v3 <= 0) THEN v3 = designHeight
  1100.   XuiWindow (@window, #WindowCreate, v0, v1, v2, v3, r0, @r1$)
  1101.   v0 = 0 : v1 = 0 : r0 = window : ATTACH r1$ TO display$
  1102.   GOSUB Create
  1103.     r1 = 0 : ATTACH display$ TO r1$
  1104.   XuiWindow (window, #WindowRegister, grid, -1, v2, v3, @r0, @"DemoButton")
  1105. END SUB
  1106. '
  1107. '
  1108. ' *****  GetSmallestSize  *****  See "Anatomy of Grid Functions"
  1109. '
  1110. SUB GetSmallestSize
  1111. END SUB
  1112. '
  1113. '
  1114. ' *****  Resize  *****  See "Anatomy of Grid Functions"
  1115. '
  1116. SUB Resize
  1117. END SUB
  1118. '
  1119. '
  1120. ' *****  Selection  *****  See "Anatomy of Grid Functions"
  1121. '
  1122. SUB Selection
  1123. END SUB
  1124. '
  1125. '
  1126. ' *****  Initialize  *****  ' see "Anatomy of Grid Functions"
  1127. '
  1128. SUB Initialize
  1129.   XuiGetDefaultMessageFuncArray (@func[])
  1130.   XgrMessageNameToNumber (@"LastMessage", @upperMessage)
  1131. '
  1132.   func[#Callback]           = &XuiCallback ()               ' disable to handle Callback messages internally
  1133. ' func[#GetSmallestSize]    = 0                             ' enable to add internal GetSmallestSize routine
  1134. ' func[#Resize]             = 0                             ' enable to add internal Resize routine
  1135. '
  1136.   DIM sub[upperMessage]
  1137. ' sub[#Callback]            = SUBADDRESS (Callback)         ' enable to handle Callback messages internally
  1138.   sub[#Create]              = SUBADDRESS (Create)           ' must be internal routine
  1139.   sub[#CreateWindow]        = SUBADDRESS (CreateWindow)     ' must be internal routine
  1140. ' sub[#GetSmallestSize]     = SUBADDRESS (GetSmallestSize)  ' enable to add internal GetSmallestSize routine
  1141. ' sub[#Resize]              = SUBADDRESS (Resize)           ' enable to add internal Resize routine
  1142.   sub[#Selection]           = SUBADDRESS (Selection)        ' routes Selection callbacks to subroutine
  1143. '
  1144.   IF sub[0] THEN PRINT "DemoButton(): Initialize: Error::: (Undefined Message)"
  1145.   IF func[0] THEN PRINT "DemoButton(): Initialize: Error::: (Undefined Message)"
  1146.   XuiRegisterGridType (@DemoButton, "DemoButton", &DemoButton(), @func[], @sub[])
  1147. '
  1148. ' Don't remove the following 4 lines, or WindowFromFunction/WindowToFunction will not work
  1149. '
  1150.   designX = 206
  1151.   designY = 248
  1152.   designWidth = 356
  1153.   designHeight = 148
  1154. '
  1155.   gridType = DemoButton
  1156.   XuiSetGridTypeValue (gridType, @"x",                designX)
  1157.   XuiSetGridTypeValue (gridType, @"y",                designY)
  1158.   XuiSetGridTypeValue (gridType, @"width",            designWidth)
  1159.   XuiSetGridTypeValue (gridType, @"height",           designHeight)
  1160.   XuiSetGridTypeValue (gridType, @"maxWidth",         designWidth)
  1161.   XuiSetGridTypeValue (gridType, @"maxHeight",        designHeight)
  1162.   XuiSetGridTypeValue (gridType, @"minWidth",         designWidth)
  1163.   XuiSetGridTypeValue (gridType, @"minHeight",        designHeight)
  1164.   XuiSetGridTypeValue (gridType, @"border",           $$BorderFrame)
  1165.   XuiSetGridTypeValue (gridType, @"can",              $$Focus OR $$Respond OR $$Callback)
  1166.   XuiSetGridTypeValue (gridType, @"focusKid",         $CheckBox0)
  1167.   IFZ message THEN RETURN
  1168. END SUB
  1169. END FUNCTION
  1170. '
  1171. '
  1172. ' ###############################
  1173. ' #####  DemoButtonCode ()  #####
  1174. ' ###############################
  1175. '
  1176. FUNCTION  DemoButtonCode (grid, message, v0, v1, v2, v3, kid, r1)
  1177.     SHARED event
  1178. '
  1179.   $DemoButton     =  0  ' kid  0 grid type = DemoButton
  1180.   $Label0         =  1  ' kid  1 grid type = XuiLabel
  1181.   $Label1         =  2  ' kid  2 grid type = XuiLabel
  1182.   $Label2         =  3  ' kid  3 grid type = XuiLabel
  1183.   $CheckBox0      =  4  ' kid  4 grid type = XuiCheckBox
  1184.   $CheckBox1      =  5  ' kid  5 grid type = XuiCheckBox
  1185.   $CheckBox2      =  6  ' kid  6 grid type = XuiCheckBox
  1186.   $RadioBox0      =  7  ' kid  7 grid type = XuiRadioBox
  1187.   $RadioBox1      =  8  ' kid  8 grid type = XuiRadioBox
  1188.   $RadioBox2      =  9  ' kid  9 grid type = XuiRadioBox
  1189.   $PressButton0   = 10  ' kid 10 grid type = XuiPressButton
  1190.   $PressButton1   = 11  ' kid 11 grid type = XuiPressButton
  1191.   $PressButton2   = 12  ' kid 12 grid type = XuiPressButton
  1192.   $PushButton0    = 13  ' kid 13 grid type = XuiPushButton
  1193.   $PushButton1    = 14  ' kid 14 grid type = XuiPushButton
  1194.   $PushButton2    = 15  ' kid 15 grid type = XuiPushButton
  1195.   $ToggleButton0  = 16  ' kid 16 grid type = XuiToggleButton
  1196.   $ToggleButton1  = 17  ' kid 17 grid type = XuiToggleButton
  1197.   $ToggleButton2  = 18  ' kid 18 grid type = XuiToggleButton
  1198.   $RadioButton0   = 19  ' kid 19 grid type = XuiRadioButton
  1199.   $RadioButton1   = 20  ' kid 20 grid type = XuiRadioButton
  1200.   $RadioButton2   = 21  ' kid 21 grid type = XuiRadioButton
  1201.   $UpperKid       = 21  ' kid maximum
  1202. '
  1203. '    XuiReportMessage (grid, message, v0, v1, v2, v3, kid, r1)
  1204.     IF (message = #Callback) THEN message = r1
  1205. '
  1206.     XuiSendMessage (grid, #GetGridName, 0, 0, 0, 0, kid, @name$)
  1207.     XgrMessageNumberToName (message, @message$)
  1208. '
  1209.   SELECT CASE message
  1210.     CASE #Selection        :    GOSUB Selection   ' Common callback message
  1211.   END SELECT
  1212.   RETURN
  1213. '
  1214. '
  1215. ' *****  Selection  *****
  1216. '
  1217. SUB Selection
  1218.   IF kid = $DemoButton THEN EXIT SUB
  1219.     SELECT CASE TRUE
  1220.         CASE (kid < $PressButton0)    : PRINT event, name$, message$, v0
  1221.         CASE (kid < $PushButton0)        : PRINT event, name$, message$
  1222.         CASE (kid < $ToggleButton0)    : PRINT event, name$, message$, "  !!! #SetFocusColors in DemoButton() !!!"
  1223.         CASE ELSE                                        : PRINT event, name$, message$, v0
  1224.     END SELECT
  1225.     INC event
  1226. END SUB
  1227. END FUNCTION
  1228. '
  1229. '
  1230. ' #########################
  1231. ' #####  DemoText ()  #####
  1232. ' #########################
  1233. '
  1234. FUNCTION  DemoText (grid, message, v0, v1, v2, v3, r0, (r1, r1$, r1[], r1$[]))
  1235.   STATIC  designX,  designY,  designWidth,  designHeight
  1236.   STATIC  SUBADDR  sub[]
  1237.   STATIC  upperMessage
  1238.   STATIC  DemoText
  1239. '
  1240.   $DemoText    =  0  ' kid  0 grid type = DemoText
  1241.   $TextLine    =  1  ' kid  1 grid type = XuiTextLine
  1242.   $ScrollBarH  =  2  ' kid  2 grid type = XuiScrollBarH
  1243.   $ScrollBarV  =  3  ' kid  3 grid type = XuiScrollBarV
  1244.   $List        =  4  ' kid  4 grid type = XuiList
  1245.   $TextArea    =  5  ' kid  5 grid type = XuiTextArea
  1246.   $UpperKid    =  5  ' kid maximum
  1247. '
  1248. '
  1249.   IFZ sub[] THEN GOSUB Initialize
  1250. ' XuiReportMessage (grid, message, v0, v1, v2, v3, r0, r1)
  1251.   IF XuiProcessMessage (grid, message, @v0, @v1, @v2, @v3, @r0, @r1, DemoText) THEN RETURN
  1252.   IF (message <= upperMessage) THEN GOSUB @sub[message]
  1253.   RETURN
  1254. '
  1255. '
  1256. ' *****  Callback  *****  message = Callback : r1 = original message
  1257. '
  1258. SUB Callback
  1259.   message = r1
  1260.   IF (message <= upperMessage) THEN GOSUB @sub[message]
  1261. END SUB
  1262. '
  1263. '
  1264. ' *****  Create  *****  v0123 = xywh : r0 = window : r1 = parent
  1265. '
  1266. SUB Create
  1267.   IF (v0 <= 0) THEN v0 = 0
  1268.   IF (v1 <= 0) THEN v1 = 0
  1269.   IF (v2 <= 0) THEN v2 = designWidth
  1270.   IF (v3 <= 0) THEN v3 = designHeight
  1271.   XuiCreateGrid (@grid, DemoText, @v0, @v1, @v2, @v3, r0, r1, &DemoText())
  1272.   XuiSendMessage ( grid, #SetGridName, 0, 0, 0, 0, 0, @"DemoText")
  1273.   XuiTextLine    (@g, #Create, 12, 168, 172, 28, r0, grid)
  1274.   XuiSendMessage ( g, #SetCallback, grid, &DemoText(), -1, -1, $TextLine, grid)
  1275.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"TextLine")
  1276.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"TextLine")
  1277.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 1, @"Coordinate830")
  1278.   XuiScrollBarH  (@g, #Create, 40, 36, 104, 12, r0, grid)
  1279.   XuiSendMessage ( g, #SetCallback, grid, &DemoText(), -1, -1, $ScrollBarH, grid)
  1280.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"ScrollBarH")
  1281.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"ScrollBarH")
  1282.   XuiScrollBarV  (@g, #Create, 12, 36, 12, 120, r0, grid)
  1283.   XuiSendMessage ( g, #SetCallback, grid, &DemoText(), -1, -1, $ScrollBarV, grid)
  1284.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"ScrollBarV")
  1285.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"ScrollBarV")
  1286.   XuiList        (@g, #Create, 384, 36, 184, 160, r0, grid)
  1287.   XuiSendMessage ( g, #SetCallback, grid, &DemoText(), -1, -1, $List, grid)
  1288.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"List")
  1289.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"List")
  1290.   DIM text$[12]
  1291.   text$[ 0] = "This is a \"List\"."
  1292.   text$[ 1] = "No user input."
  1293.   text$[ 2] = "Select line using "
  1294.   text$[ 3] = "mouse or RETURN key."
  1295.   text$[ 4] = "In this demo, line"
  1296.   text$[ 5] = "copied to TextLine."
  1297.   text$[ 6] = "(Select there to"
  1298.   text$[ 7] = "copy to TextArea.)"
  1299.   text$[ 8] = "Initial text entered"
  1300.   text$[ 9] = "same as in TextArea."
  1301.   text$[10] = "Of course, the same scrolling"
  1302.   text$[11] = "facilities are available"
  1303.   text$[12] = "as with the TextArea."
  1304.   XuiSendMessage ( g, #SetTextArray, 0, 0, 0, 0, 0, @text$[])
  1305.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 1, @"ListUp")
  1306.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 2, @"ListDown")
  1307.   XuiTextArea    (@g, #Create, 192, 36, 184, 160, r0, grid)
  1308.   XuiSendMessage ( g, #SetCallback, grid, &DemoText(), -1, -1, $TextArea, grid)
  1309.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"TextArea")
  1310.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"TextArea")
  1311.   DIM text$[13]
  1312.   text$[ 0] = "This is a \"TextArea\". "
  1313.   text$[ 1] = "User may edit.  ESC "
  1314.   text$[ 2] = "key causes selection"
  1315.   text$[ 3] = "event.  In this demo,"
  1316.   text$[ 4] = "text will be copied"
  1317.   text$[ 5] = "to ListArea.  This"
  1318.   text$[ 6] = "initial text was"
  1319.   text$[ 7] = "entered using"
  1320.   text$[ 8] = "AppearanceTextArray"
  1321.   text$[ 9] = "under Text$[] button"
  1322.   text$[10] = "in Appearance window.  The text may"
  1323.   text$[11] = "extend beyond the physical"
  1324.   text$[12] = "limits of the window and scrolled"
  1325.   text$[13] = "into view using the scroll bars."
  1326.   XuiSendMessage ( g, #SetTextArray, 0, 0, 0, 0, 0, @text$[])
  1327.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 1, @"TextAreaUp")
  1328.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 2, @"TextAreaDown")
  1329.   GOSUB Resize
  1330. END SUB
  1331. '
  1332. '
  1333. ' *****  CreateWindow  *****  v0123 = xywh : r0 = windowType : r1$ = display$
  1334. '
  1335. SUB CreateWindow
  1336.   IF (v0  = 0) THEN v0 = designX
  1337.   IF (v1  = 0) THEN v1 = designY
  1338.   IF (v2 <= 0) THEN v2 = designWidth
  1339.   IF (v3 <= 0) THEN v3 = designHeight
  1340.   XuiWindow (@window, #WindowCreate, v0, v1, v2, v3, r0, @r1$)
  1341.   v0 = 0 : v1 = 0 : r0 = window : ATTACH r1$ TO display$
  1342.   GOSUB Create
  1343.     r1 = 0 : ATTACH display$ TO r1$
  1344.   XuiWindow (window, #WindowRegister, grid, -1, v2, v3, @r0, @"DemoText")
  1345. END SUB
  1346. '
  1347. '
  1348. ' *****  GetSmallestSize  *****  See "Anatomy of Grid Functions"
  1349. '
  1350. SUB GetSmallestSize
  1351. END SUB
  1352. '
  1353. '
  1354. ' *****  Resize  *****  See "Anatomy of Grid Functions"
  1355. '
  1356. SUB Resize
  1357. END SUB
  1358. '
  1359. '
  1360. ' *****  Selection  *****  See "Anatomy of Grid Functions"
  1361. '
  1362. SUB Selection
  1363. END SUB
  1364. '
  1365. '
  1366. ' *****  Initialize  *****  ' see "Anatomy of Grid Functions"
  1367. '
  1368. SUB Initialize
  1369.   XuiGetDefaultMessageFuncArray (@func[])
  1370.   XgrMessageNameToNumber (@"LastMessage", @upperMessage)
  1371. '
  1372.   func[#Callback]           = &XuiCallback ()               ' disable to handle Callback messages internally
  1373. ' func[#GetSmallestSize]    = 0                             ' enable to add internal GetSmallestSize routine
  1374. ' func[#Resize]             = 0                             ' enable to add internal Resize routine
  1375. '
  1376.   DIM sub[upperMessage]
  1377. ' sub[#Callback]            = SUBADDRESS (Callback)         ' enable to handle Callback messages internally
  1378.   sub[#Create]              = SUBADDRESS (Create)           ' must be internal routine
  1379.   sub[#CreateWindow]        = SUBADDRESS (CreateWindow)     ' must be internal routine
  1380. ' sub[#GetSmallestSize]     = SUBADDRESS (GetSmallestSize)  ' enable to add internal GetSmallestSize routine
  1381. ' sub[#Resize]              = SUBADDRESS (Resize)           ' enable to add internal Resize routine
  1382.   sub[#Selection]           = SUBADDRESS (Selection)        ' routes Selection callbacks to subroutine
  1383. '
  1384.   IF sub[0] THEN PRINT "DemoText(): Initialize: Error::: (Undefined Message)"
  1385.   IF func[0] THEN PRINT "DemoText(): Initialize: Error::: (Undefined Message)"
  1386.   XuiRegisterGridType (@DemoText, "DemoText", &DemoText(), @func[], @sub[])
  1387. '
  1388. ' Don't remove the following 4 lines, or WindowFromFunction/WindowToFunction will not work
  1389. '
  1390.   designX = 44
  1391.   designY = 218
  1392.   designWidth = 580
  1393.   designHeight = 228
  1394. '
  1395.   gridType = DemoText
  1396.   XuiSetGridTypeValue (gridType, @"x",                designX)
  1397.   XuiSetGridTypeValue (gridType, @"y",                designY)
  1398.   XuiSetGridTypeValue (gridType, @"width",            designWidth)
  1399.   XuiSetGridTypeValue (gridType, @"height",           designHeight)
  1400.   XuiSetGridTypeValue (gridType, @"maxWidth",         designWidth)
  1401.   XuiSetGridTypeValue (gridType, @"maxHeight",        designHeight)
  1402.   XuiSetGridTypeValue (gridType, @"minWidth",         designWidth)
  1403.   XuiSetGridTypeValue (gridType, @"minHeight",        designHeight)
  1404.   XuiSetGridTypeValue (gridType, @"border",           $$BorderFrame)
  1405.   XuiSetGridTypeValue (gridType, @"can",              $$Focus OR $$Respond OR $$Callback OR $$InputTextString OR $$TextSelection)
  1406.   XuiSetGridTypeValue (gridType, @"focusKid",         $TextLine)
  1407.   XuiSetGridTypeValue (gridType, @"inputTextArray",   $TextArea)
  1408.   XuiSetGridTypeValue (gridType, @"inputTextString",  $TextLine)
  1409.   IFZ message THEN RETURN
  1410. END SUB
  1411. END FUNCTION
  1412.  
  1413. '
  1414. '
  1415. ' #############################
  1416. ' #####  DemoTextCode ()  #####
  1417. ' #############################
  1418. '
  1419. FUNCTION  DemoTextCode (grid, message, v0, v1, v2, v3, kid, r1)
  1420.     SHARED event
  1421. '
  1422.   $DemoText    =  0  ' kid  0 grid type = DemoText
  1423.   $TextLine    =  1  ' kid  1 grid type = XuiTextLine
  1424.   $ScrollBarH  =  2  ' kid  2 grid type = XuiScrollBarH
  1425.   $ScrollBarV  =  3  ' kid  3 grid type = XuiScrollBarV
  1426.   $List        =  4  ' kid  4 grid type = XuiList
  1427.   $TextArea    =  5  ' kid  5 grid type = XuiTextArea
  1428.   $UpperKid    =  5  ' kid maximum
  1429. '
  1430. '  XuiReportMessage (grid, message, v0, v1, v2, v3, kid, r1)
  1431.   IF (message = #Callback) THEN message = r1
  1432. '
  1433.   XuiSendMessage (grid, #GetGridName, 0, 0, 0, 0, kid, @name$)
  1434.   XgrMessageNumberToName (message, @message$)
  1435. '
  1436.   SELECT CASE message
  1437.     CASE #Initialize    : GOSUB Initialize
  1438.     CASE #Selection        : GOSUB Selection   ' Common callback message
  1439.         CASE #Change            : GOSUB Scroll
  1440.         CASE #MuchLess        : GOSUB Scroll
  1441.         CASE #MuchMore        : GOSUB Scroll
  1442.         CASE #OneLess            : GOSUB Scroll
  1443.         CASE #OneMore            : GOSUB Scroll
  1444.         CASE #SomeLess        : GOSUB Scroll
  1445.         CASE #SomeMore        : GOSUB Scroll
  1446.     CASE #TextEvent        : GOSUB TextEvent        ' KeyDown in TextArea/TextLine
  1447.   END SELECT
  1448.   RETURN
  1449. '
  1450. '
  1451. '
  1452. SUB Initialize
  1453.   XuiSendMessage(grid, #SetPosition, 0, 1, 2, 4, $ScrollBarH, 0)
  1454.   XuiSendMessage(grid, #SetPosition, 0, 1, 2, 4, $ScrollBarV, 0)
  1455. END SUB
  1456. '
  1457. '
  1458. ' *****  Selection  *****
  1459. '
  1460. SUB Selection
  1461.   SELECT CASE kid
  1462.     CASE $DemoText    : EXIT SUB
  1463.     CASE $TextLine    :
  1464.             XuiSendMessage(grid, #GetTextString, 0, 0, 0, 0, kid, @text$)
  1465.             REDIM text$[9]
  1466.             FOR i = 0 TO 9
  1467.                 text$[i] = CHR$(i + '0') + text$
  1468.             NEXT i
  1469.             XuiSendMessage(grid, #SetTextArray, 0, 0, 0, 0, $TextArea, @text$[])
  1470.             XuiSendMessage(grid, #Redraw, 0, 0, 0, 0, $TextArea, 0)
  1471.     CASE $List        :
  1472.             XuiSendMessage(grid, #GetTextArray, 0, 0, 0, 0, kid, @text$[])
  1473.             IF v0 = -1 THEN text$ = "User pressed ESC!" ELSE text$ = text$[v0]
  1474.             XuiSendMessage(grid, #SetTextString, 0, 0, 0, 0, $TextLine, @text$)
  1475.             XuiSendMessage(grid, #Redraw, 0, 0, 0, 0, $TextLine, 0)
  1476.     CASE $TextArea    :
  1477.             XuiSendMessage(grid, #GetTextArray, 0, 0, 0, 0, kid, @text$[])
  1478.             XuiSendMessage(grid, #SetTextArray, 0, 0, 0, 0, $List, @text$[])
  1479.             XuiSendMessage(grid, #Redraw, 0, 0, 0, 0, $List, 0)
  1480.   END SELECT
  1481.   IF kid = $List THEN
  1482.         PRINT event, name$, message$, v0: INC event
  1483.   ELSE
  1484.         PRINT event, name$, message$: INC event
  1485.   END IF
  1486. END SUB
  1487. '
  1488. SUB Scroll
  1489.   IF message = #Change THEN
  1490.         PRINT event, name$, message$, v0, v1, v2, v3 : INC event
  1491.   ELSE
  1492.         PRINT event, name$, message$ : INC event
  1493.   END IF
  1494. END SUB
  1495. '
  1496. SUB TextEvent
  1497.   PRINT event, name$, message$ : INC event
  1498. END SUB
  1499. END FUNCTION
  1500. '
  1501. '
  1502. ' ###########################
  1503. ' #####  DemoDialog ()  #####
  1504. ' ###########################
  1505. '
  1506. FUNCTION  DemoDialog (grid, message, v0, v1, v2, v3, r0, (r1, r1$, r1[], r1$[]))
  1507.   STATIC  designX,  designY,  designWidth,  designHeight
  1508.   STATIC  SUBADDR  sub[]
  1509.   STATIC  upperMessage
  1510.   STATIC  DemoDialog
  1511. '
  1512.   $DemoDialog    =  0  ' kid  0 grid type = DemoDialog
  1513.   $Message1B     =  1  ' kid  1 grid type = XuiMessage1B
  1514.   $Message2B     =  2  ' kid  2 grid type = XuiMessage2B
  1515.   $Message3B     =  3  ' kid  3 grid type = XuiMessage3B
  1516.   $ListDialog2B  =  4  ' kid  4 grid type = XuiListDialog2B
  1517.   $Dialog2B      =  5  ' kid  5 grid type = XuiDialog2B
  1518.   $Dialog3B      =  6  ' kid  6 grid type = XuiDialog3B
  1519.   $Message4B     =  7  ' kid  7 grid type = XuiMessage4B
  1520.   $Dialog4B      =  8  ' kid  8 grid type = XuiDialog4B
  1521.   $UpperKid      =  8  ' kid maximum
  1522. '
  1523. '
  1524.   IFZ sub[] THEN GOSUB Initialize
  1525. ' XuiReportMessage (grid, message, v0, v1, v2, v3, r0, r1)
  1526.   IF XuiProcessMessage (grid, message, @v0, @v1, @v2, @v3, @r0, @r1, DemoDialog) THEN RETURN
  1527.   IF (message <= upperMessage) THEN GOSUB @sub[message]
  1528.   RETURN
  1529. '
  1530. '
  1531. ' *****  Callback  *****  message = Callback : r1 = original message
  1532. '
  1533. SUB Callback
  1534.   message = r1
  1535.   IF (message <= upperMessage) THEN GOSUB @sub[message]
  1536. END SUB
  1537. '
  1538. '
  1539. ' *****  Create  *****  v0123 = xywh : r0 = window : r1 = parent
  1540. '
  1541. SUB Create
  1542.   IF (v0 <= 0) THEN v0 = 0
  1543.   IF (v1 <= 0) THEN v1 = 0
  1544.   IF (v2 <= 0) THEN v2 = designWidth
  1545.   IF (v3 <= 0) THEN v3 = designHeight
  1546.   XuiCreateGrid (@grid, DemoDialog, @v0, @v1, @v2, @v3, r0, r1, &DemoDialog())
  1547.   XuiSendMessage ( grid, #SetGridName, 0, 0, 0, 0, 0, @"DemoDialog")
  1548.   XuiMessage1B   (@g, #Create, 92, 8, 80, 48, r0, grid)
  1549.   XuiSendMessage ( g, #SetCallback, grid, &DemoDialog(), -1, -1, $Message1B, grid)
  1550.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Message1B")
  1551.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Message1B")
  1552.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 1, @"M1Label")
  1553.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 1, @"M1Label")
  1554.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 2, @"M1B0")
  1555.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 2, @"M1B0")
  1556.   XuiMessage2B   (@g, #Create, 176, 8, 160, 48, r0, grid)
  1557.   XuiSendMessage ( g, #SetCallback, grid, &DemoDialog(), -1, -1, $Message2B, grid)
  1558.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Message2B")
  1559.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Message2B")
  1560.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 1, @"M2Label")
  1561.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 1, @"M2Label")
  1562.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 2, @"M2B0")
  1563.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 2, @"M2B0")
  1564.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 3, @"M2B1")
  1565.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 3, @"M2B1")
  1566.   XuiMessage3B   (@g, #Create, 340, 8, 240, 48, r0, grid)
  1567.   XuiSendMessage ( g, #SetCallback, grid, &DemoDialog(), -1, -1, $Message3B, grid)
  1568.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Message3B")
  1569.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Message3B")
  1570.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 1, @"M3Label")
  1571.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 1, @"M3Label")
  1572.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 2, @"M3B0")
  1573.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 2, @"M3B0")
  1574.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 3, @"M3B1")
  1575.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 3, @"M3B1")
  1576.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 4, @"M3B2")
  1577.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 4, @"M3B2")
  1578.   XuiListDialog2B (@g, #Create, 8, 60, 164, 188, r0, grid)
  1579.   XuiSendMessage ( g, #SetCallback, grid, &DemoDialog(), -1, -1, $ListDialog2B, grid)
  1580.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"ListDialog2B")
  1581.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"ListDialog2B")
  1582.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 1, @"L2Label")
  1583.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 1, @"L2Label")
  1584.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 2, @"L2List")
  1585.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 2, @"L2List")
  1586.   DIM text$[7]
  1587.   text$[0] = "ListDialog2B has"
  1588.   text$[1] = "a \"List\".  In this"
  1589.   text$[2] = "demo, selected"
  1590.   text$[3] = "text will be sent"
  1591.   text$[4] = "\"around the horn\","
  1592.   text$[5] = "L2-D2-D3-D4 and"
  1593.   text$[6] = "back.  Initial text loaded via"
  1594.   text$[7] = "AppearanceTextArray."
  1595.   XuiSendMessage ( g, #SetTextArray, 0, 0, 0, 0, 2, @text$[])
  1596.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 3, @"L2TextLine")
  1597.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 3, @"L2TextLine")
  1598.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 4, @"L2B0")
  1599.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 4, @" L2B0 ")
  1600.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 5, @"L2B1")
  1601.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 5, @" L2B1 ")
  1602.   XuiDialog2B    (@g, #Create, 176, 60, 160, 68, r0, grid)
  1603.   XuiSendMessage ( g, #SetCallback, grid, &DemoDialog(), -1, -1, $Dialog2B, grid)
  1604.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Dialog2B")
  1605.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Dialog2B")
  1606.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 1, @"D2Label")
  1607.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 1, @"D2Label")
  1608.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 2, @"D2TextLine")
  1609.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 2, @"D2TextLine")
  1610.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 3, @"D2B0")
  1611.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 3, @"D2B0")
  1612.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 4, @"D2B1")
  1613.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 4, @"D2B1")
  1614.   XuiDialog3B    (@g, #Create, 340, 60, 240, 68, r0, grid)
  1615.   XuiSendMessage ( g, #SetCallback, grid, &DemoDialog(), -1, -1, $Dialog3B, grid)
  1616.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Dialog3B")
  1617.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Dialog3B")
  1618.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 1, @"D3Label")
  1619.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 1, @"D3Label")
  1620.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 2, @"D3TextLine")
  1621.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 2, @"D3TextLine")
  1622.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 3, @"D3B0")
  1623.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 3, @"D3B0")
  1624.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 4, @"D3B1")
  1625.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 4, @"D3B1")
  1626.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 5, @"D3B2")
  1627.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 5, @"D3B2")
  1628.   XuiMessage4B   (@g, #Create, 260, 132, 320, 48, r0, grid)
  1629.   XuiSendMessage ( g, #SetCallback, grid, &DemoDialog(), -1, -1, $Message4B, grid)
  1630.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Message4B")
  1631.   XuiSendMessage ( g, #SetBorder, $$BorderFlat4, $$BorderFlat4, $$BorderFlat4, -1, 0, 0)
  1632.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Message4B")
  1633.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 1, @"M4Label")
  1634.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 1, @"M4Label")
  1635.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 2, @"M4B0")
  1636.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 2, @"M4B0")
  1637.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 3, @"M4B1")
  1638.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 3, @"M4B1")
  1639.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 4, @"M4B2")
  1640.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 4, @"M4B2")
  1641.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 5, @"M4B3")
  1642.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 5, @"M4B3")
  1643.   XuiDialog4B    (@g, #Create, 260, 184, 320, 68, r0, grid)
  1644.   XuiSendMessage ( g, #SetCallback, grid, &DemoDialog(), -1, -1, $Dialog4B, grid)
  1645.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Dialog4B")
  1646.   XuiSendMessage ( g, #SetBorder, $$BorderFlat4, $$BorderFlat4, $$BorderFlat4, -1, 0, 0)
  1647.   XuiSendMessage ( g, #SetTexture, $$TextureRaise1, 0, 0, 0, 0, 0)
  1648.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Dialog4B")
  1649.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 1, @"D4Label")
  1650.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 1, @"D4Label")
  1651.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 2, @"D4TextLine")
  1652.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 2, @"D4TextLine")
  1653.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 3, @"D4B0")
  1654.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 3, @"D4B0")
  1655.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 4, @"D4B1")
  1656.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 4, @"D4B1")
  1657.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 5, @"D4B2")
  1658.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 5, @"D4B2")
  1659.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 6, @"D4B3")
  1660.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 6, @"D4B3")
  1661.   GOSUB Resize
  1662. END SUB
  1663. '
  1664. '
  1665. ' *****  CreateWindow  *****  v0123 = xywh : r0 = windowType : r1$ = display$
  1666. '
  1667. SUB CreateWindow
  1668.   IF (v0  = 0) THEN v0 = designX
  1669.   IF (v1  = 0) THEN v1 = designY
  1670.   IF (v2 <= 0) THEN v2 = designWidth
  1671.   IF (v3 <= 0) THEN v3 = designHeight
  1672.   XuiWindow (@window, #WindowCreate, v0, v1, v2, v3, r0, @r1$)
  1673.   v0 = 0 : v1 = 0 : r0 = window : ATTACH r1$ TO display$
  1674.   GOSUB Create
  1675.     r1 = 0 : ATTACH display$ TO r1$
  1676.   XuiWindow (window, #WindowRegister, grid, -1, v2, v3, @r0, @"DemoDialog")
  1677. END SUB
  1678. '
  1679. '
  1680. ' *****  GetSmallestSize  *****  See "Anatomy of Grid Functions"
  1681. '
  1682. SUB GetSmallestSize
  1683. END SUB
  1684. '
  1685. '
  1686. ' *****  Resize  *****  See "Anatomy of Grid Functions"
  1687. '
  1688. SUB Resize
  1689. END SUB
  1690. '
  1691. '
  1692. ' *****  Selection  *****  See "Anatomy of Grid Functions"
  1693. '
  1694. SUB Selection
  1695. END SUB
  1696. '
  1697. '
  1698. ' *****  Initialize  *****  ' see "Anatomy of Grid Functions"
  1699. '
  1700. SUB Initialize
  1701.   XuiGetDefaultMessageFuncArray (@func[])
  1702.   XgrMessageNameToNumber (@"LastMessage", @upperMessage)
  1703. '
  1704.   func[#Callback]           = &XuiCallback ()               ' disable to handle Callback messages internally
  1705. ' func[#GetSmallestSize]    = 0                             ' enable to add internal GetSmallestSize routine
  1706. ' func[#Resize]             = 0                             ' enable to add internal Resize routine
  1707. '
  1708.   DIM sub[upperMessage]
  1709. ' sub[#Callback]            = SUBADDRESS (Callback)         ' enable to handle Callback messages internally
  1710.   sub[#Create]              = SUBADDRESS (Create)           ' must be internal routine
  1711.   sub[#CreateWindow]        = SUBADDRESS (CreateWindow)     ' must be internal routine
  1712. ' sub[#GetSmallestSize]     = SUBADDRESS (GetSmallestSize)  ' enable to add internal GetSmallestSize routine
  1713. ' sub[#Resize]              = SUBADDRESS (Resize)           ' enable to add internal Resize routine
  1714.   sub[#Selection]           = SUBADDRESS (Selection)        ' routes Selection callbacks to subroutine
  1715. '
  1716.   IF sub[0] THEN PRINT "DemoDialog(): Initialize: Error::: (Undefined Message)"
  1717.   IF func[0] THEN PRINT "DemoDialog(): Initialize: Error::: (Undefined Message)"
  1718.   XuiRegisterGridType (@DemoDialog, "DemoDialog", &DemoDialog(), @func[], @sub[])
  1719. '
  1720. ' Don't remove the following 4 lines, or WindowFromFunction/WindowToFunction will not work
  1721. '
  1722.   designX = 29
  1723.   designY = 212
  1724.   designWidth = 588
  1725.   designHeight = 256
  1726. '
  1727.   gridType = DemoDialog
  1728.   XuiSetGridTypeValue (gridType, @"x",                designX)
  1729.   XuiSetGridTypeValue (gridType, @"y",                designY)
  1730.   XuiSetGridTypeValue (gridType, @"width",            designWidth)
  1731.   XuiSetGridTypeValue (gridType, @"height",           designHeight)
  1732.   XuiSetGridTypeValue (gridType, @"maxWidth",         designWidth)
  1733.   XuiSetGridTypeValue (gridType, @"maxHeight",        designHeight)
  1734.   XuiSetGridTypeValue (gridType, @"minWidth",         designWidth)
  1735.   XuiSetGridTypeValue (gridType, @"minHeight",        designHeight)
  1736.   XuiSetGridTypeValue (gridType, @"border",           $$BorderFrame)
  1737.   XuiSetGridTypeValue (gridType, @"can",              $$Focus OR $$Respond OR $$Callback OR $$TextSelection)
  1738.   XuiSetGridTypeValue (gridType, @"focusKid",         $Message1B)
  1739.   XuiSetGridTypeValue (gridType, @"inputTextString",  $ListDialog2B)
  1740.   IFZ message THEN RETURN
  1741. END SUB
  1742. END FUNCTION
  1743. '
  1744. '
  1745. ' ###############################
  1746. ' #####  DemoDialogCode ()  #####
  1747. ' ###############################
  1748. '
  1749. FUNCTION  DemoDialogCode (grid, message, v0, v1, v2, v3, kid, r1)
  1750.     SHARED event
  1751. '
  1752.   $DemoDialog    =  0  ' kid  0 grid type = DemoDialog
  1753.   $Message1B     =  1  ' kid  1 grid type = XuiMessage1B
  1754.   $Message2B     =  2  ' kid  2 grid type = XuiMessage2B
  1755.   $Message3B     =  3  ' kid  3 grid type = XuiMessage3B
  1756.   $ListDialog2B  =  4  ' kid  4 grid type = XuiListDialog2B
  1757.   $Dialog2B      =  5  ' kid  5 grid type = XuiDialog2B
  1758.   $Dialog3B      =  6  ' kid  6 grid type = XuiDialog3B
  1759.   $Message4B     =  7  ' kid  7 grid type = XuiMessage4B
  1760.   $Dialog4B      =  8  ' kid  8 grid type = XuiDialog4B
  1761.   $UpperKid      =  8  ' kid maximum
  1762. '
  1763. '  XuiReportMessage(grid, message, v0, v1, v2, v3, kid, r1)
  1764.   IF (message = #Callback) THEN message = r1
  1765. '
  1766.   XuiCallback(@ccgrid, #GetCallbackArgs, @x, @x, @x, @x, @x, @x)
  1767.   XuiSendMessage(grid, #GetKidArray, @x, @x, 0, 0, kid, @cgrid[])
  1768.   ckid = 0: DO WHILE cgrid[ckid] <> ccgrid: INC ckid: LOOP
  1769.   XuiSendMessage(ccgrid, #GetGridName, 0, 0, 0, 0, 0, @name$)
  1770.   XgrMessageNumberToName(message, @message$)
  1771.   SELECT CASE message
  1772.     CASE #Selection: GOSUB Selection   ' Common callback message
  1773.     CASE #TextEvent: GOSUB TextEvent   ' KeyDown in TextArea or TextLine
  1774.   END SELECT
  1775.   RETURN
  1776. '
  1777. '
  1778. ' *****  Selection  *****
  1779. '
  1780. SUB Selection
  1781.     tkid = kid: tckid = 2
  1782.   SELECT CASE kid
  1783.     CASE $DemoDialog    : EXIT SUB
  1784.     CASE $ListDialog2B  :
  1785.             IF ckid = 2 THEN tckid= 3
  1786.             IF ckid = 3 THEN tkid = $Dialog2B
  1787.     CASE $Dialog2B      : IF ckid = 2 THEN tkid = $Dialog3B
  1788.     CASE $Dialog3B      : IF ckid = 2 THEN tkid = $Dialog4B
  1789.     CASE $Dialog4B      : IF ckid = 2 THEN tkid = $ListDialog2B
  1790.   END SELECT
  1791.     IF kid = $ListDialog2B && ckid = 2 THEN
  1792.         PRINT event, name$, message$, v0: INC event
  1793.     ELSE
  1794.         PRINT event, name$, message$: INC event
  1795.     END IF
  1796.     IF tkid = kid && tckid = 2 THEN EXIT SUB
  1797.     IF kid = $ListDialog2B && ckid = 2 THEN
  1798.         XuiSendMessage(cgrid[0], #GetTextArray, 0, 0, 0, 0, ckid, @text$[])
  1799.         IF v0 = -1 THEN text$ = "User pressed ESC!" ELSE text$ = text$[v0]
  1800.     ELSE
  1801.         XuiSendMessage(cgrid[0], #GetTextString, 0, 0, 0, 0, ckid, @text$)
  1802.     END IF
  1803.   XuiSendMessage(grid, #GetGridNumber, @tcgrid, @x, @x, @x, tkid, @x)
  1804.      IF tkid = $ListDialog2B && tckid = 2 THEN
  1805.         DIM text$[9]
  1806.         FOR i = 0 TO 9
  1807.             text$[i] = CHR$(i + '0') + text$
  1808.         NEXT i
  1809.         XuiSendMessage(tcgrid, #SetTextArray, 0, 0, 0, 0, tckid, @text$[])
  1810.     ELSE
  1811.         XuiSendMessage(tcgrid, #SetTextString, 0, 0, 0, 0, tckid, @text$)
  1812.     END IF
  1813.      XuiSendMessage(tcgrid,  #Redraw, 0, 0, 0, 0, tckid, 0)
  1814. END SUB
  1815. SUB TextEvent
  1816.   PRINT event, name$, message$: INC event
  1817. END SUB
  1818. END FUNCTION
  1819. '
  1820. '
  1821. ' #############################
  1822. ' #####  DemoPullDown ()  #####
  1823. ' #############################
  1824. '
  1825. FUNCTION  DemoPullDown (grid, message, v0, v1, v2, v3, r0, (r1, r1$, r1[], r1$[]))
  1826.   STATIC  designX,  designY,  designWidth,  designHeight
  1827.   STATIC  SUBADDR  sub[]
  1828.   STATIC  upperMessage
  1829.   STATIC  DemoPullDown
  1830. '
  1831.   $DemoPullDown   =  0  ' kid  0 grid type = DemoPullDown
  1832.   $Menu           =  1  ' kid  1 grid type = XuiMenu
  1833.   $MenuBar        =  2  ' kid  2 grid type = XuiMenuBar
  1834.   $DropButton     =  3  ' kid  3 grid type = XuiDropButton
  1835.   $DropBox        =  4  ' kid  4 grid type = XuiDropBox
  1836.   $ListButton     =  5  ' kid  5 grid type = XuiListButton
  1837.   $ListBox        =  6  ' kid  6 grid type = XuiListBox
  1838.   $PullDownLabel  =  7  ' kid  7 grid type = XuiLabel
  1839.   $UpperKid       =  7  ' kid maximum
  1840. '
  1841. '
  1842.   IFZ sub[] THEN GOSUB Initialize
  1843. ' XuiReportMessage (grid, message, v0, v1, v2, v3, r0, r1)
  1844.   IF XuiProcessMessage (grid, message, @v0, @v1, @v2, @v3, @r0, @r1, DemoPullDown) THEN RETURN
  1845.   IF (message <= upperMessage) THEN GOSUB @sub[message]
  1846.   RETURN
  1847. '
  1848. '
  1849. ' *****  Callback  *****  message = Callback : r1 = original message
  1850. '
  1851. SUB Callback
  1852.   message = r1
  1853.   IF (message <= upperMessage) THEN GOSUB @sub[message]
  1854. END SUB
  1855. '
  1856. '
  1857. ' *****  Create  *****  v0123 = xywh : r0 = window : r1 = parent
  1858. '
  1859. SUB Create
  1860.   IF (v0 <= 0) THEN v0 = 0
  1861.   IF (v1 <= 0) THEN v1 = 0
  1862.   IF (v2 <= 0) THEN v2 = designWidth
  1863.   IF (v3 <= 0) THEN v3 = designHeight
  1864.   XuiCreateGrid (@grid, DemoPullDown, @v0, @v1, @v2, @v3, r0, r1, &DemoPullDown())
  1865.   XuiSendMessage ( grid, #SetGridName, 0, 0, 0, 0, 0, @"DemoPullDown")
  1866.   XuiMenu        (@g, #Create, 4, 4, 280, 20, r0, grid)
  1867.   XuiSendMessage ( g, #SetCallback, grid, &DemoPullDown(), -1, -1, $Menu, grid)
  1868.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Menu")
  1869.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Menu")
  1870.   DIM text$[11]
  1871.   text$[ 0] = "Menu_A"
  1872.   text$[ 1] = " MenuA_a"
  1873.     text$[ 2] = " MenuA_b"
  1874.     text$[ 3] = " MenuA_c"
  1875.     text$[ 4] = "Menu_B"
  1876.   text$[ 5] = " MenuB_a"
  1877.     text$[ 6] = " MenuB_b"
  1878.     text$[ 7] = " MenuB_c"
  1879.     text$[ 8] = "Menu_C"
  1880.   text$[ 9] = " MenuC_a"
  1881.     text$[10] = " MenuC_b"
  1882.     text$[11] = " MenuC_c"
  1883.   XuiSendMessage ( g, #SetTextArray, 0, 0, 0, 0, 0, @text$[])
  1884.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 1, @"MMenuBar")
  1885.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 1, @"Menu_A  Menu_B  Menu_C")
  1886.   XuiMenuBar     (@g, #Create, 4, 24, 280, 20, r0, grid)
  1887.   XuiSendMessage ( g, #SetCallback, grid, &DemoPullDown(), -1, -1, $MenuBar, grid)
  1888.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"MenuBar")
  1889.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"MenuBar_X  MenuBar_Y  MenuBar_Z")
  1890.   XuiDropButton  (@g, #Create, 4, 44, 280, 24, r0, grid)
  1891.   XuiSendMessage ( g, #SetCallback, grid, &DemoPullDown(), -1, -1, $DropButton, grid)
  1892.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DropButton")
  1893.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"DropButton")
  1894.   DIM text$[4]
  1895.   text$[0] = "0DropButton"
  1896.   text$[1] = "1DropButton"
  1897.   text$[2] = "2DropButton"
  1898.   text$[3] = "3DropButton"
  1899.   text$[4] = "4DropButton"
  1900.   XuiSendMessage ( g, #SetTextArray, 0, 0, 0, 0, 0, @text$[])
  1901.   XuiDropBox     (@g, #Create, 4, 68, 280, 24, r0, grid)
  1902.   XuiSendMessage ( g, #SetCallback, grid, &DemoPullDown(), -1, -1, $DropBox, grid)
  1903.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DropBox")
  1904.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"DBoxTextLine")
  1905.   DIM text$[4]
  1906.   text$[0] = "0DropBox"
  1907.   text$[1] = "1DropBox"
  1908.   text$[2] = "2DropBox"
  1909.   text$[3] = "3DropBox"
  1910.   text$[4] = "4DropBox"
  1911.   XuiSendMessage ( g, #SetTextArray, 0, 0, 0, 0, 0, @text$[])
  1912.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 1, @"DBoxTextLine")
  1913.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 1, @"DBoxTextLine")
  1914.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 2, @"DBoxButton")
  1915.   XuiListButton  (@g, #Create, 4, 92, 280, 24, r0, grid)
  1916.   XuiSendMessage ( g, #SetCallback, grid, &DemoPullDown(), -1, -1, $ListButton, grid)
  1917.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"ListButton")
  1918.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"ListButton")
  1919.   DIM text$[4]
  1920.   text$[0] = "0ListButton"
  1921.   text$[1] = "1ListButton"
  1922.   text$[2] = "2ListButton"
  1923.   text$[3] = "3ListButton"
  1924.   text$[4] = "4ListButton"
  1925.   XuiSendMessage ( g, #SetTextArray, 0, 0, 0, 0, 0, @text$[])
  1926.   XuiListBox     (@g, #Create, 4, 116, 280, 24, r0, grid)
  1927.   XuiSendMessage ( g, #SetCallback, grid, &DemoPullDown(), -1, -1, $ListBox, grid)
  1928.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"ListBox")
  1929.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"LBoxTextLine")
  1930.   DIM text$[4]
  1931.   text$[0] = "0ListBox"
  1932.   text$[1] = "1ListBox"
  1933.   text$[2] = "2ListBox"
  1934.   text$[3] = "3ListBox"
  1935.   text$[4] = "4ListBox"
  1936.   XuiSendMessage ( g, #SetTextArray, 0, 0, 0, 0, 0, @text$[])
  1937.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 1, @"LBoxTextLine")
  1938.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 1, @"LBoxTextLine")
  1939.   DIM text$[2]
  1940.   text$[0] = "List"
  1941.   text$[1] = "Box"
  1942.   text$[2] = "TextLine"
  1943.   XuiSendMessage ( g, #SetTextArray, 0, 0, 0, 0, 1, @text$[])
  1944.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 2, @"LBoxButton")
  1945.   XuiLabel       (@g, #Create, 4, 140, 280, 24, r0, grid)
  1946.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"PullDownLabel")
  1947.   XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  1948.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"(This Label shows selected text)")
  1949.   GOSUB Resize
  1950. END SUB
  1951. '
  1952. '
  1953. ' *****  CreateWindow  *****  v0123 = xywh : r0 = windowType : r1$ = display$
  1954. '
  1955. SUB CreateWindow
  1956.   IF (v0  = 0) THEN v0 = designX
  1957.   IF (v1  = 0) THEN v1 = designY
  1958.   IF (v2 <= 0) THEN v2 = designWidth
  1959.   IF (v3 <= 0) THEN v3 = designHeight
  1960.   XuiWindow (@window, #WindowCreate, v0, v1, v2, v3, r0, @r1$)
  1961.   v0 = 0 : v1 = 0 : r0 = window : ATTACH r1$ TO display$
  1962.   GOSUB Create
  1963.     r1 = 0 : ATTACH display$ TO r1$
  1964.   XuiWindow (window, #WindowRegister, grid, -1, v2, v3, @r0, @"DemoPullDown")
  1965. END SUB
  1966. '
  1967. '
  1968. ' *****  GetSmallestSize  *****  See "Anatomy of Grid Functions"
  1969. '
  1970. SUB GetSmallestSize
  1971. END SUB
  1972. '
  1973. '
  1974. ' *****  Resize  *****  See "Anatomy of Grid Functions"
  1975. '
  1976. SUB Resize
  1977. END SUB
  1978. '
  1979. '
  1980. ' *****  Selection  *****  See "Anatomy of Grid Functions"
  1981. '
  1982. SUB Selection
  1983. END SUB
  1984. '
  1985. '
  1986. ' *****  Initialize  *****  ' see "Anatomy of Grid Functions"
  1987. '
  1988. SUB Initialize
  1989.   XuiGetDefaultMessageFuncArray (@func[])
  1990.   XgrMessageNameToNumber (@"LastMessage", @upperMessage)
  1991. '
  1992.   func[#Callback]           = &XuiCallback ()               ' disable to handle Callback messages internally
  1993. ' func[#GetSmallestSize]    = 0                             ' enable to add internal GetSmallestSize routine
  1994. ' func[#Resize]             = 0                             ' enable to add internal Resize routine
  1995. '
  1996.   DIM sub[upperMessage]
  1997. ' sub[#Callback]            = SUBADDRESS (Callback)         ' enable to handle Callback messages internally
  1998.   sub[#Create]              = SUBADDRESS (Create)           ' must be internal routine
  1999.   sub[#CreateWindow]        = SUBADDRESS (CreateWindow)     ' must be internal routine
  2000. ' sub[#GetSmallestSize]     = SUBADDRESS (GetSmallestSize)  ' enable to add internal GetSmallestSize routine
  2001. ' sub[#Resize]              = SUBADDRESS (Resize)           ' enable to add internal Resize routine
  2002.   sub[#Selection]           = SUBADDRESS (Selection)        ' routes Selection callbacks to subroutine
  2003. '
  2004.   IF sub[0] THEN PRINT "DemoPullDown(): Initialize: Error::: (Undefined Message)"
  2005.   IF func[0] THEN PRINT "DemoPullDown(): Initialize: Error::: (Undefined Message)"
  2006.   XuiRegisterGridType (@DemoPullDown, "DemoPullDown", &DemoPullDown(), @func[], @sub[])
  2007. '
  2008. ' Don't remove the following 4 lines, or WindowFromFunction/WindowToFunction will not work
  2009. '
  2010.   designX = 254
  2011.   designY = 222
  2012.   designWidth = 288
  2013.   designHeight = 168
  2014. '
  2015.   gridType = DemoPullDown
  2016.   XuiSetGridTypeValue (gridType, @"x",                designX)
  2017.   XuiSetGridTypeValue (gridType, @"y",                designY)
  2018.   XuiSetGridTypeValue (gridType, @"width",            designWidth)
  2019.   XuiSetGridTypeValue (gridType, @"height",           designHeight)
  2020.   XuiSetGridTypeValue (gridType, @"maxWidth",         designWidth)
  2021.   XuiSetGridTypeValue (gridType, @"maxHeight",        designHeight)
  2022.   XuiSetGridTypeValue (gridType, @"minWidth",         designWidth)
  2023.   XuiSetGridTypeValue (gridType, @"minHeight",        designHeight)
  2024.   XuiSetGridTypeValue (gridType, @"border",           $$BorderFrame)
  2025.   XuiSetGridTypeValue (gridType, @"can",              $$Focus OR $$Respond OR $$Callback OR $$TextSelection)
  2026.   XuiSetGridTypeValue (gridType, @"focusKid",         $DropButton)
  2027.   XuiSetGridTypeValue (gridType, @"inputTextString",  $DropBox)
  2028.   IFZ message THEN RETURN
  2029. END SUB
  2030. END FUNCTION
  2031. '
  2032. '
  2033. ' #################################
  2034. ' #####  DemoPullDownCode ()  #####
  2035. ' #################################
  2036. '
  2037. FUNCTION  DemoPullDownCode (grid, message, v0, v1, v2, v3, kid, r1)
  2038.     SHARED event
  2039. '
  2040.   $DemoPullDown   =  0  ' kid  0 grid type = DemoPullDown
  2041.   $Menu           =  1  ' kid  1 grid type = XuiMenu
  2042.   $MenuBar        =  2  ' kid  2 grid type = XuiMenuBar
  2043.   $DropButton     =  3  ' kid  3 grid type = XuiDropButton
  2044.   $DropBox        =  4  ' kid  4 grid type = XuiDropBox
  2045.   $ListButton     =  5  ' kid  5 grid type = XuiListButton
  2046.   $ListBox        =  6  ' kid  6 grid type = XuiListBox
  2047.   $PullDownLabel  =  7  ' kid  7 grid type = XuiLabel
  2048.   $UpperKid       =  7  ' kid maximum
  2049. '
  2050. '  XuiReportMessage (grid, message, v0, v1, v2, v3, kid, r1)
  2051.   IF (message = #Callback) THEN message = r1
  2052. '
  2053.     XuiSendMessage(grid, #GetGridName, 0, 0, 0, 0, kid, @name$)
  2054.     XgrMessageNumberToName(message, @message$)
  2055.   SELECT CASE message
  2056.     CASE #Selection: GOSUB Selection   ' Common callback message
  2057.     CASE #TextEvent: GOSUB TextEvent   ' KeyDown in TextArea or TextLine
  2058.   END SELECT
  2059.   RETURN
  2060. '
  2061. '
  2062. ' *****  Selection  *****
  2063. '
  2064. SUB Selection
  2065.     IF kid = $DemoPullDown THEN EXIT SUB
  2066.     IF kid = $Menu THEN PRINT event, name$, message$, v0, v1: INC event
  2067.     IF kid = $DropBox || kid = $ListBox THEN
  2068.         PRINT event, name$, message$: INC event
  2069.     ELSE
  2070.         IF kid <> $Menu THEN PRINT event, name$, message$, v0: INC event
  2071.     END IF
  2072.     IF kid = $Menu || kid = $MenuBar THEN EXIT SUB
  2073.     IF kid = $DropButton || kid = $ListButton THEN
  2074.         XuiSendMessage(grid, #GetTextArray, 0, 0, 0, 0, kid, @text$[])
  2075.         text$ = text$[v0]
  2076.     ELSE
  2077.         XuiSendMessage(grid, #GetTextString, 0, 0, 0, 0, kid, @text$)
  2078.     END IF
  2079.     XuiSendMessage(grid, #SetTextString, 0, 0, 0, 0, $PullDownLabel, @text$)
  2080.     XuiSendMessage(grid, #Redraw, 0, 0, 0, 0, $PullDownLabel, 0)
  2081.     IF kid = $DropButton || kid = $ListButton THEN EXIT SUB
  2082.     REDIM text$[4]
  2083.     FOR i = 0 TO 4
  2084.         text$[i] = CHR$(i + '0') + text$
  2085.     NEXT i
  2086.     XuiSendMessage(grid, #SetTextArray, 0, 0, 0, 0, kid, @text$[])
  2087.     IF kid = $DropBox THEN kid = $DropButton ELSE kid = $ListButton
  2088.     XuiSendMessage(grid, #SetTextArray, 0, 0, 0, 0, kid, @text$[])
  2089. END SUB
  2090. SUB TextEvent
  2091.     PRINT event, name$, message$: INC event
  2092. END SUB
  2093. END FUNCTION
  2094. '
  2095. '
  2096. ' #############################
  2097. ' #####  DemoFileCode ()  #####
  2098. ' #############################
  2099. '
  2100. FUNCTION  DemoFileCode (grid, message, v0, v1, v2, v3, kid, r1)
  2101.     SHARED event
  2102. '
  2103.   $DemoFile  =  0  ' kid  0 grid type = DemoFile
  2104.   $File      =  1  ' kid  1 grid type = XuiFile
  2105.   $UpperKid  =  1  ' kid maximum
  2106. '
  2107. '  XuiReportMessage (grid, message, v0, v1, v2, v3, kid, r1)
  2108.   IF (message = #Callback) THEN message = r1
  2109. '
  2110.     XuiSendMessage(grid, #GetGridName, 0, 0, 0, 0, kid, name$)
  2111.     XgrMessageNumberToName(message, @message$)
  2112.   SELECT CASE message
  2113.     CASE #Selection: GOSUB Selection   ' Common callback message
  2114. '   CASE #TextEvent: GOSUB TextEvent   ' KeyDown in TextArea or TextLine
  2115.   END SELECT
  2116.   RETURN
  2117. '
  2118. '
  2119. ' *****  Selection  *****
  2120. '
  2121. SUB Selection
  2122.     IF (v0 = -1) THEN
  2123.         PRINT event, name$, message$, v0
  2124.         INC event
  2125.     ELSE
  2126.         XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, kid, @text$)
  2127.         PRINT event, name$, message$, v0, text$
  2128.         INC event
  2129.     END IF
  2130. END SUB
  2131. END FUNCTION
  2132. '
  2133. '
  2134. ' #############################
  2135. ' #####  DemoFontCode ()  #####
  2136. ' #############################
  2137. '
  2138. FUNCTION  DemoFontCode (grid, message, v0, v1, v2, v3, kid, r1)
  2139.     SHARED event
  2140. '
  2141.   $DemoFont  =  0  ' kid  0 grid type = DemoFont
  2142.   $Font      =  1  ' kid  1 grid type = XuiFont
  2143.   $UpperKid  =  1  ' kid maximum
  2144. '
  2145. '  XuiReportMessage (grid, message, v0, v1, v2, v3, kid, r1)
  2146.   IF (message = #Callback) THEN message = r1
  2147. '
  2148.     XuiSendMessage(grid, #GetGridName, 0, 0, 0, 0, kid, @name$)
  2149.     XgrMessageNumberToName(message, @message$)
  2150. '
  2151.   SELECT CASE message
  2152.     CASE #Selection: GOSUB Selection   ' Common callback message
  2153. '   CASE #TextEvent: GOSUB TextEvent   ' KeyDown in TextArea or TextLine
  2154.   END SELECT
  2155.   RETURN
  2156. '
  2157. '
  2158. ' *****  Selection  *****
  2159. '
  2160. SUB Selection
  2161.     PRINT event, name$, message$, v0, "(incomplete)": INC event
  2162. END SUB
  2163. END FUNCTION
  2164. '
  2165. '
  2166. ' ###############################
  2167. ' #####  DemoMiscellany ()  #####
  2168. ' ###############################
  2169. '
  2170. FUNCTION  DemoMiscellany (grid, message, v0, v1, v2, v3, r0, (r1, r1$, r1[], r1$[]))
  2171.   STATIC  designX,  designY,  designWidth,  designHeight
  2172.   STATIC  SUBADDR  sub[]
  2173.   STATIC  upperMessage
  2174.   STATIC  DemoMiscellany
  2175. '
  2176.   $DemoMiscellany  =  0  ' kid  0 grid type = DemoMiscellany
  2177.   $Color           =  1  ' kid  1 grid type = XuiColor
  2178.   $Range           =  2  ' kid  2 grid type = XuiRange
  2179.   $Progress        =  3  ' kid  3 grid type = XuiProgress
  2180.   $UpperKid        =  3  ' kid maximum
  2181. '
  2182. '
  2183.   IFZ sub[] THEN GOSUB Initialize
  2184. ' XuiReportMessage (grid, message, v0, v1, v2, v3, r0, r1)
  2185.   IF XuiProcessMessage (grid, message, @v0, @v1, @v2, @v3, @r0, @r1, DemoMiscellany) THEN RETURN
  2186.   IF (message <= upperMessage) THEN GOSUB @sub[message]
  2187.   RETURN
  2188. '
  2189. '
  2190. ' *****  Callback  *****  message = Callback : r1 = original message
  2191. '
  2192. SUB Callback
  2193.   message = r1
  2194.   IF (message <= upperMessage) THEN GOSUB @sub[message]
  2195. END SUB
  2196. '
  2197. '
  2198. ' *****  Create  *****  v0123 = xywh : r0 = window : r1 = parent
  2199. '
  2200. SUB Create
  2201.   IF (v0 <= 0) THEN v0 = 0
  2202.   IF (v1 <= 0) THEN v1 = 0
  2203.   IF (v2 <= 0) THEN v2 = designWidth
  2204.   IF (v3 <= 0) THEN v3 = designHeight
  2205.   XuiCreateGrid (@grid, DemoMiscellany, @v0, @v1, @v2, @v3, r0, r1, &DemoMiscellany())
  2206.   XuiSendMessage ( grid, #SetGridName, 0, 0, 0, 0, 0, @"DemoMiscellany")
  2207.   XuiColor       (@g, #Create, 12, 12, 200, 80, r0, grid)
  2208.   XuiSendMessage ( g, #SetCallback, grid, &DemoMiscellany(), -1, -1, $Color, grid)
  2209.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Color")
  2210.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Color")
  2211.   XuiRange       (@g, #Create, 124, 128, 80, 24, r0, grid)
  2212.   XuiSendMessage ( g, #SetCallback, grid, &DemoMiscellany(), -1, -1, $Range, grid)
  2213.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Range")
  2214.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Range")
  2215.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 1, @"RangeLabel")
  2216.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 1, @"0")
  2217.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 2, @"RangeUp")
  2218.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 3, @"RangeDown")
  2219.   XuiProgress    (@g, #Create, 20, 120, 80, 40, r0, grid)
  2220.   XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Progress")
  2221.   XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Progress")
  2222.   GOSUB Resize
  2223. END SUB
  2224. '
  2225. '
  2226. ' *****  CreateWindow  *****  v0123 = xywh : r0 = windowType : r1$ = display$
  2227. '
  2228. SUB CreateWindow
  2229.   IF (v0  = 0) THEN v0 = designX
  2230.   IF (v1  = 0) THEN v1 = designY
  2231.   IF (v2 <= 0) THEN v2 = designWidth
  2232.   IF (v3 <= 0) THEN v3 = designHeight
  2233.   XuiWindow (@window, #WindowCreate, v0, v1, v2, v3, r0, @r1$)
  2234.   v0 = 0 : v1 = 0 : r0 = window : ATTACH r1$ TO display$
  2235.   GOSUB Create
  2236.     r1 = 0 : ATTACH display$ TO r1$
  2237.   XuiWindow (window, #WindowRegister, grid, -1, v2, v3, @r0, @"DemoMiscellany")
  2238. END SUB
  2239. '
  2240. '
  2241. ' *****  GetSmallestSize  *****  See "Anatomy of Grid Functions"
  2242. '
  2243. SUB GetSmallestSize
  2244. END SUB
  2245. '
  2246. '
  2247. ' *****  Resize  *****  See "Anatomy of Grid Functions"
  2248. '
  2249. SUB Resize
  2250. END SUB
  2251. '
  2252. '
  2253. ' *****  Selection  *****  See "Anatomy of Grid Functions"
  2254. '
  2255. SUB Selection
  2256. END SUB
  2257. '
  2258. '
  2259. ' *****  Initialize  *****  ' see "Anatomy of Grid Functions"
  2260. '
  2261. SUB Initialize
  2262.   XuiGetDefaultMessageFuncArray (@func[])
  2263.   XgrMessageNameToNumber (@"LastMessage", @upperMessage)
  2264. '
  2265.   func[#Callback]           = &XuiCallback ()               ' disable to handle Callback messages internally
  2266. ' func[#GetSmallestSize]    = 0                             ' enable to add internal GetSmallestSize routine
  2267. ' func[#Resize]             = 0                             ' enable to add internal Resize routine
  2268. '
  2269.   DIM sub[upperMessage]
  2270. ' sub[#Callback]            = SUBADDRESS (Callback)         ' enable to handle Callback messages internally
  2271.   sub[#Create]              = SUBADDRESS (Create)           ' must be internal routine
  2272.   sub[#CreateWindow]        = SUBADDRESS (CreateWindow)     ' must be internal routine
  2273. ' sub[#GetSmallestSize]     = SUBADDRESS (GetSmallestSize)  ' enable to add internal GetSmallestSize routine
  2274. ' sub[#Resize]              = SUBADDRESS (Resize)           ' enable to add internal Resize routine
  2275.   sub[#Selection]           = SUBADDRESS (Selection)        ' routes Selection callbacks to subroutine
  2276. '
  2277.   IF sub[0] THEN PRINT "DemoMiscellany(): Initialize: Error::: (Undefined Message)"
  2278.   IF func[0] THEN PRINT "DemoMiscellany(): Initialize: Error::: (Undefined Message)"
  2279.   XuiRegisterGridType (@DemoMiscellany, "DemoMiscellany", &DemoMiscellany(), @func[], @sub[])
  2280. '
  2281. ' Don't remove the following 4 lines, or WindowFromFunction/WindowToFunction will not work
  2282. '
  2283.   designX = 307
  2284.   designY = 231
  2285.   designWidth = 228
  2286.   designHeight = 180
  2287. '
  2288.   gridType = DemoMiscellany
  2289.   XuiSetGridTypeValue (gridType, @"x",                designX)
  2290.   XuiSetGridTypeValue (gridType, @"y",                designY)
  2291.   XuiSetGridTypeValue (gridType, @"width",            designWidth)
  2292.   XuiSetGridTypeValue (gridType, @"height",           designHeight)
  2293.   XuiSetGridTypeValue (gridType, @"maxWidth",         designWidth)
  2294.   XuiSetGridTypeValue (gridType, @"maxHeight",        designHeight)
  2295.   XuiSetGridTypeValue (gridType, @"minWidth",         designWidth)
  2296.   XuiSetGridTypeValue (gridType, @"minHeight",        designHeight)
  2297.   XuiSetGridTypeValue (gridType, @"border",           $$BorderFrame)
  2298.   XuiSetGridTypeValue (gridType, @"can",              $$Focus OR $$Respond OR $$Callback)
  2299.   XuiSetGridTypeValue (gridType, @"focusKid",         $Range)
  2300.   IFZ message THEN RETURN
  2301. END SUB
  2302. END FUNCTION
  2303. '
  2304. '
  2305. ' ###################################
  2306. ' #####  DemoMiscellanyCode ()  #####
  2307. ' ###################################
  2308. '
  2309. FUNCTION  DemoMiscellanyCode (grid, message, v0, v1, v2, v3, kid, r1)
  2310.     SHARED event
  2311. '
  2312.   $DemoMiscellany  =  0  ' kid  0 grid type = DemoMiscellany
  2313.   $Color           =  1  ' kid  1 grid type = XuiColor
  2314.   $Range           =  2  ' kid  2 grid type = XuiRange
  2315.   $Progress        =  3  ' kid  3 grid type = XuiProgress
  2316.   $UpperKid        =  3  ' kid maximum
  2317. '
  2318. '  XuiReportMessage (grid, message, v0, v1, v2, v3, kid, r1)
  2319.   IF (message = #Callback) THEN message = r1
  2320. '
  2321.     XuiSendMessage(grid, #GetGridName, 0, 0, 0, 0, kid, @name$)
  2322.     XgrMessageNumberToName(message, @message$)
  2323.   SELECT CASE message
  2324.         CASE #Initialize:GOSUB Initialize
  2325.     CASE #Selection: GOSUB Selection   ' Common callback message
  2326. '   CASE #TextEvent: GOSUB TextEvent   ' KeyDown in TextArea or TextLine
  2327.   END SELECT
  2328.   RETURN
  2329. '
  2330. '
  2331. SUB Initialize
  2332.     XuiSendMessage(grid, #SetValues, 25, 100, 0, 0, $Progress, 0)
  2333.     XuiSendMessage(grid, #SetValues, 25, 5, 0, 100, $Range, 0)
  2334. END SUB
  2335. '
  2336. '
  2337. ' *****  Selection  *****
  2338. '
  2339. SUB Selection
  2340.     IF kid = $DemoMiscellany THEN EXIT SUB
  2341.     PRINT event, name$, message$, v0, v1, v2, v3: INC event
  2342.     IF kid <> $Range THEN EXIT SUB
  2343.     XuiSendMessage(grid, #SetValues, v0, 100, 0, 0, $Progress, 0)
  2344. END SUB
  2345. END FUNCTION
  2346. END PROGRAM
  2347.