# GUI

Compatible with:
DOS Maximite CMM MM150 MM170 MM+ MMX Picromite ArmiteL4 Armite F4 ArmiteH7 Picomite CMM2

Syntax:
GUI option

Description:

Not all commands are available on all platforms. The MM170 only has limited support.

GUI BITMAP x, y, bits [, width] [, height] [, scale] [, c] [, bc]
Displays the bits in a bitmap on an LCD panel starting at 'x' and 'y' on an attached LCD panel.
'height' and 'width' are the dimensions of the bitmap as displayed on the LCD panel and default to 8x8.
'scale' is optional and defaults to that set by the FONT command.
'c' is the drawing colour and 'bc' is the background colour. They are optional and default to the current foreground and background colours.
The bitmap can be an integer or a string variable or constant and is drawn using the first byte as the first bits of the top line (bit 7 first, then bit 6, etc) followed by the next byte, etc.
When the top line has been filled the next line of the displayed bitmap will start with the next bit in the integer or string.

GUI CALIBRATE
GUI CALIBRATE c1,c2,c3,c4,c5
This command is used to calibrate the touch feature on an LCD panel. It will display a series of targets on the screen and wait for each one to be precisely touched.
The second version allows the calibration parameters to be entered directly without having to go through the manual calibration process.
The parameters 'c1', 'c2', etc can be found by running a normal calibration process then using OPTION LIST which will list the parameters for that LCD panel.
This is useful when the command is embedded in a program.

GUI RESET LCDPANEL
Will reinitialise the configured LCD panel. Initialisation is automatically done when the Micromite starts up but in some circumstances it may be necessary to interrupt power to the LCD panel (eg, to save battery power) and this command can then be used to reinitialise the display.

GUI TEST LCDPANEL
GUI TEST TOUCH
Will test the display or touch feature on an LCD panel.
With GUI TEST LCDPANEL an animated display of colour circles will be rapidly drawn on top of each other.
With GUI TEST TOUCH the screen will blank and wait for a touch which will cause a white dot to be placed on the display marking the touch position on the screen.
Any character entered at the console will terminate the test.

The following are for the Micromite Plus and above

GUI AREA #ref, startX, startY, width, height
This will define an invisible area of the screen that is sensitive to touch and will generate touch down and touch up interrupts. It can be used as the basis for creating custom controls which are defined and managed by the program.
'#ref' is the control's reference number. 'startX' and 'startY' are the top left coordinates while 'width' and 'height' set the dimensions.

GUI BCOLOUR colour, #ref1 [, #ref2, #ref3, etc]
This will change the background colour of the specified controls to 'colour' which is an RGB value for the drawing colour.
'#ref' is the control's reference number.

GUI BEEP msec
This will sound the pizeo buzzer if configured with the OPTION TOUCH command.
'msec' is the number of milliseconds that the buzzer should be driven. A time of 3ms produces a click while 100ms produces a short beep.

GUI BARGAUGE #ref, StartX, StartY, width, height, FColour, BColour, min, max, c1, ta, c2, tb, c3, tc, c4
Define either a horizontal or vertical analogue bar gauge.
'#ref' is the control's reference number.
'StartX' and 'StartY' are the top left coordinates of the bar while 'width' is the horizontal width and 'height' the vertical height. If the width is less that the height the bar gauge will be drawn vertically with the graph growing from the bottom towards the top. Otherwise it will be drawn horizontally with the graph growing from the left towards the right.
'Fcolour' is the colour used for the gauge while 'Bcolour' is the background colour.
'min' is the minimum value of the gauge and 'max' is the maximum value (both floating point).
A multi colour gauge can be created using 'c1' to 'c4' for the colours and 'ta' to 'tc' for the thresholds used to determine when the colour will change.
'width', 'height', 'FColour', 'BColour', 'min' and 'max' are optional and will default to the values used in the previous definition of a GUI BARGAUGE.
'c1', 'ta', 'c2', 'tb', 'c3', 'tc' and 'c4' are optional and if not specified the gauge will use less colours. If all are omitted the gauge will be drawn using 'Fcolour'.

GUI BUTTON #ref, caption$, startX, startY, width, height [, FColour] [,BColour]
This will draw a momentary button which is a square switch with the caption on its face.
When touched the visual image of the button will appear to be depressed and the control's value will be 1. When the touch is removed the value will revert to zero.
#ref' is the control's reference (a number from 1 to 100).
'caption$' is the string to display on the face of the button. It can be a single string with two captions separated by a | character (eg, "UP|DOWN"). When the button is up the first string will be used and when pressed the second will be used.
'startX' and 'startY' are the top left coordinates while 'width' and 'height' set the dimensions. ' FColour and 'BColour' are RGB values for the foreground and background colours.
'width', 'height', FColour and 'BColour' are optional and default to that used in previous controls or set with the COLOUR command.

GUI CAPTION #ref, text$, startX, startY [,align$] [, FColour] [, BColour]
This will draw a text string on the screen.
'#ref' is the control's reference number.
'text$' is the string to display. 'startX' and 'startY' are the top left coordinates.
'align$' is zero to three characters (a string expression or variable is also allowed) where the first letter is the horizontal alignment around X and can be L, C or R for LEFT, CENTER, RIGHT and the second letter is the vertical alignment around Y and can be T, M or B for TOP, MIDDLE, BOTTOM.
A third character can be used in the string to indicate the rotation of the text. This can be 'N' for normal orientation, 'V' for vertical text with each character under the previous running from top to bottom, 'I' the text will be inverted (ie, upside down), 'U' the text will be rotated counter clockwise by 90º and 'D' the text will be rotated clockwise by 90º.
The default alignment is left/top with no rotation.
'FColour and 'BColour' are RGB values for the foreground and background colours. On a display that supports transparent text BColour can be -1 which means that the background will show through the gaps in the characters.
FColour and 'BColour' are optional and default to the colours set by the COLOUR command.

GUI CHECKBOX #ref, caption$, startX, startY [, size] [, colour]
This will draw a check box which is a small box with a caption. When touched an X will be drawn inside the box to indicate that this option has been selected and the control's value will be set to 1. When touched a second time the check mark will be removed and the control's value will be zero.
'#ref' is the control's reference number.
The string 'caption$' will be drawn to the right of the control using the colours set by the COLOUR command.
'startX' and 'startY' are the top left coordinates while 'size' set the height and width (the bix is square). 'colour' is an RGB value for the drawing colour. 'size' and 'colour' are optional and default to that used in previous controls.

GUI DELETE #ref1 [,#ref2, #ref3, etc]
GUI DELETE ALL
This will delete the controls in the list. This includes removing the image of the control from the screen using the current background colour and freeing the memory used by the control.
'#ref' is the control's reference number. The keyword ALL can be used as the argument and that will disable all controls.

GUI DISABLE #ref1 [,#ref2, #ref3, etc]
GUI DISABLE ALL
This will disable the controls in the list. Disabled controls do not respond to touch and will be displayed dimmed.
'#ref' is the control's reference number. The keyword ALL can be used as the argument and that will disable all controls.
GUI ENABLE can be used to restore the controls.

GUI DISPLAYBOX #ref, startX, startY, width, height, FColour, BColour
This will draw a box with rounded corners that can be used to display a string '#ref' is the control's reference number.
'startX' and 'startY' are the top left coordinates while 'width' and 'height' set the dimensions.
' FColour and 'BColour' are RGB values for the foreground and background colours.
'width', 'height', FColour and 'BColour' are optional and default to that used in previous controls.
Any text can be displayed in the box by using the CtrlVal(r) = command. This is useful for displaying text, numbers and messages. This control does not respond to touch.

GUI ENABLE #ref1 [,#ref2, #ref3, etc]
GUI ENABLE ALL
This will undo the effects of GUI DISABLE and restore the control(s) to normal operation.
'#ref' is the control's reference number. The keyword ALL can be used as the argument and that will disable all controls.

GUI FCOLOUR colour, #ref1 [, #ref2, #ref3, etc]
This will change the foreground colour of the specified controls to 'colour' which is an RGB value for the drawing colour.
'#ref' is the control's reference number.

GUI FRAME #ref, caption$, startX, startY, width, height, colour
This will draw a frame which is a box with round corners and a caption.
'#ref' is the control's reference number.
'caption$' is a string to display as the caption.
'startX' and 'startY' are the top left coordinates while 'width' and 'height' set the dimensions.
'colour' is an RGB value for the drawing colour.
'width', 'height' and 'colour' are optional and default to that used in previous controls.
A frame is useful when a group of controls need to be visually brought together.
It is also used to surround a group of radio buttons and MMBasic will arrange for the radio buttons surrounded by the frame to be exclusive. ie, when one radio button is selected any other button that was selected and within the frame will be automatically deselected.
A frame does not respond to touch.

GUI FORMATBOX #ref, Format, startX, startY, width, height, FColour, BColour
This will draw a box with rounded corners that can be used to create a virtual keypad for entry of data using a specific format.
'#ref' is the control's reference number.
'startX' and 'startY' are the top left coordinates while 'width' and 'height' set the dimensions.
' FColour and 'BColour' are RGB values for the foreground and background colours.
'width', 'height', FColour and 'BColour' are optional and default to that used in previous controls.
The 'Format' argument specifies the format of the entry as follows:
DATE1 Date in UK/Aust/NZ format (dd/mm/yy)
DATE2 Date in USA format (mm/dd/yy)
DATE3 Date in international format (yyyy/mm/dd)
TIME1 Time in 24 hour notation (hh:mm)
TIME2 Time in 24 hour notation with seconds (hh:mm:ss)
TIME3 Time in 12 hour notation (hh:mm AM/PM)
TIME4 Time in 12 hour notation with seconds (hh:mm:ss AM/PM)
DATETIME1 Date (UK fmt) and time (12 hour) (dd/mm/yy hh:mm AM/PM)
DATETIME2 Date (UK fmt) and time (24 hour) (dd/mm/yy hh:mm)
DATETIME3 Date (USA fmt) and time (12 hour) (mm/dd/yy hh:mm AM/PM)
DATETIME4 Date (USA fmt) and time (24 hour) (mm/dd/yy hh:mm)
LAT1 Latitude in degrees, minutes and seconds (dd° mm' ss" N/S)
LAT2 Latitude with seconds to one decimal place (dd° mm' ss.s" N/S)
LONG1 Longitude in degrees, minutes and seconds (ddd° mm' ss" E/W)
LONG2 Longitude seconds to one decimal place (ddd° mm' ss.s" E/W)
ANGLE1 Angle in degrees and minutes (ddd° mm')
For example, this command:
GUI FORMATBOX #1, LAT1, 50, 50, 300, 50
would create a format box which would accept the entry of latitude in the format of dd° mm' ss" N/S.
The value of CtrlVal(#1) would be a string which includes the numbers and separating characters. For example an entry of 17 degrees, 32 minutes and 1 second south would result in the string 17° 32' 01" S
MMBasic will try to position the virtual keypad on the screen so as to not obscure the format box that caused it to appear. A pen down interrupt will be generated just before the keypad is deployed and a key up interrupt will be generated when the entry is complete and the keypad is hidden.

GUI FORMATBOX CANCEL
This will dismiss a virtual keypad if it is displayed on the screen. It is the same as if the user touched the cancel key except that the touch up interrupt is not generated. If a keypad is not displayed this command will do nothing.

GUI GAUGE #ref, StartX, StartY, Radius, FColour, BColour, min, max, nbrdec, units$, c1, ta, c2, tb, c3, tc, c4
Define a graphical circular analogue gauge with a digital display in the centre.
'#ref' is the control's reference number.
'StartX' and 'StartY' are the coordinates of the centre of the gauge,
'Radius' is the distance from the centre to the outer edge.
'min' is the minimum value of the gauge and 'max' is the maximum value (both floating point).
'nbrdec' specifies the number of decimal places to be used when drawing the digital value in the centre of the gauge. Under this 'units$' will be displayed.
'Fcolour' is the colour used for the gauge while 'Bcolour' is the background colour. A multi colour gauge can be created using 'c1' to 'c4' for the colours and
'ta' to 'tc' for the thresholds used to determine when the colour will change. When colours and thresholds are specified the background of the gauge will be drawn with a dull version of the colour at that level. Also the digital value will change to the colour specified by the current value.
'Radius', 'FColour', 'BColour', 'min', 'max', 'nbrdec' and 'units$' are optional and will default to the values used in the previous definition of a GUI GAUGE.
'c1', 'ta', 'c2', 'tb', 'c3', 'tc' and 'c4' are optional and if not specified the gauge will use less colours. If all are omitted the gauge will be drawn using 'Fcolour'.
The section Advanced Graphics has a more detailed description.

GUI HIDE #ref1 [,#ref2, #ref3, etc]
GUI HIDE ALL
This will hide the controls in the list. Hidden controls do not respond to touch and will not be visible.
'#ref' is the control's reference number. The keyword ALL can be used as the argument and that will hide all controls.
GUI SHOW can be used to restore the controls.

GUI INTERRUPT down [, up]
This command will setup an interrupt that will be triggered on a touch on the LCD panel and optionally if the touch is released.
'down' is the subroutine to call when a touch down has been detected.
'up' is the subroutine to call when the touch has been lifted from the screen ('up' and 'down' can point to the same subroutine if required).
Specifying the number zero (single digit) as the argument will cancel both of these interrupts. ie:
GUI INTERRUPT 0

GUI LED #ref, caption$, centerX, centerY, radius, colour
This will draw an indicator light which looks like a panel mounted LED. A LED does not respond to touch.
'#ref' is the control's reference number.
The string 'caption$' will be drawn to the right of the control using the colours set by the COLOUR command.
'centerX' and 'centerY' are the coordinates of the centre of the LED and 'radius' is the radius of the LED. 'colour' is an RGB value for the drawing colour.
'radius' and 'colour' are optional and default to that used in previous controls.
When a LED's value is set to a value of one it will be illuminated and when it is set to zero it will be off (a dull version of its colour attribute).
The LED can be made to flash on then off by setting the value of the LED to a number greater than one which is the time in milliseconds that it should remain on.
The colour can be changed with the GUI FCOLOUR command.

GUI NUMBERBOX #ref, startX, startY, width, height, FColour, BColour
This will draw a box with rounded corners that can be used to create a virtual numeric keypad for data entry.
'#ref' is the control's reference number.
'startX' and 'startY' are the top left coordinates while 'width' and 'height' set the dimensions.
' FColour and 'BColour' are RGB values for the foreground and background colours. 'width', 'height', FColour and 'BColour' are optional and default to that used in previous controls.
When the box is touched a numeric keypad will appear on the screen. Using this virtual keypad any number can be entered into the box including a floating point number in exponential format. The new number will replace the number previously in the box.
The value of the control can set to a literal string (not an expression) starting with two hash characters. For example:
CtrlVal(nnn) = "##Enter Number"
and in that case the string (without the leading two hash characters) will be displayed in the box with reduced brightness. This can be used to give the user a hint as to what should be entered (called "ghost text"). Reading the value of the control displaying ghost text will return zero. When the control is used normally the ghost text will vanish.
MMBasic will try to position the virtual keypad on the screen so as to not obscure the number box that caused it to appear. A pen down interrupt will be generated just before the keypad is deployed and a key up interrupt will be generated when the Enter key is touched and the keypad is hidden. Also, when the Enter key is touched the entered number will be evaluated as a number and the NUMBERBOX control redrawn to display this number.

GUI NUMBERBOX CANCEL
This will dismiss a virtual keypad if it is displayed on the screen. It is the same as if the user touched the cancel key except that the touch up interrupt is not generated. If a keypad is not displayed this command will do nothing.

GUI RADIO #ref, caption$, centerX, centerY, radius, colour
This will draw a radio button with a caption.
'#ref' is the control's reference number.
The string 'caption$' will be drawn to the right of the control using the colours set by the COLOUR command.
'centerX' and 'centerY' are the coordinates of the centre of the button and 'radius' is the radius of the button. 'colour' is an RGB value for the drawing colour. 'radius' and 'colour' are optional and default to that used in previous controls.
When touched the centre of the button will be illuminated to indicate that this option has been selected and the control's value will be 1. When another radio button is selected the mark on this button will be removed and its value will be zero. Radio buttons are grouped together when surrounded by a frame and when one button in the group is selected all others in the group will be deselected. If a frame is not used all buttons on the screen will be grouped together.

GUI REDRAW #ref1 [,#ref2, #ref3, etc]
GUI REDRAW ALL
This will redraw the controls on the screen. It is useful if the screen image has somehow been corrupted.
'#ref' is the control's reference number. The keyword ALL can be used as the argument and that will first clear the screen then redraw all controls. This is useful if the whole screen needs to be refreshed.

GUI SETUP #n
This will allocate any new controls created to the page '#n'.
This command can be used as many times as needed while GUI controls are being defined. The default when a program starts running is GUI SETUP 1.
See also the GUI PAGE command.

GUI SHOW #ref1 [,#ref2, #ref3, etc]
GUI SHOW ALL
This will undo the effects of GUI HIDE and restore the control(s) to being visible and capable of normal operation.
'#ref' is the control's reference number. The keyword ALL can be used as the argument and that will disable all controls.

GUI SPINBOX #ref, startX, startY, width, height, FColour, BColour, Step, Minimum, Maximum
This will draw a box with up/down icons on either end. When these icons are touched the number in the box will be incremented or decremented. Holding down the up/down icons will repeat the step at a fast rate.
'#ref' is the control's reference number.
'startX' and 'startY' are the top left coordinates while 'width' and 'height' set the dimensions. ' FColour and 'BColour' are RGB values for the foreground and background colours.
'width', 'height', FColour and 'BColour' are optional and default to that used in previous controls.
'Step' sets the amount to increment/decrement the number with each touch. 'Minimum' and 'Maximum' set limits on the number that can be entered. All three parameters can be floating point numbers and are optional. The default for 'Step' is 1 and 'Minimum' and 'Maximum' if omitted will default to no limit.

GUI SWITCH #ref, caption$, startX, startY, width, height, FColour, BColour
This will draw a latching switch which is a square switch that latches when touched.
'#ref' is the control's reference number.
'caption$' is a string to display as the caption on the face of the switch.
'startX' and 'startY' are the top left coordinates while 'width' and 'height' set the dimensions.
' FColour and 'BColour' are RGB values for the foreground and background colours.
'width', 'height', FColour and 'BColour' are optional and default to that used in previous controls.
When touched the visual image of the button will appear to be depressed and the control's value will be 1. When touched a second time the switch will be released and the value will revert to zero. Caption can consist of two captions separated by a | character (eg, "ON|OFF").
When this is used the switch will appear to be a toggle switch with each half of the caption used to label each half of the toggle switch.

GUI TEXTBOX #ref, startX, startY, width, height, FColour, BColour
This will draw a box with rounded corners that can be used to create a virtual keyboard for data entry
'#ref' is the control's reference number.
'startX' and 'startY' are the top left coordinates while 'width' and 'height' set the dimensions.
' FColour and 'BColour' are RGB values for the foreground and background colours. 'width', 'height', FColour and 'BColour' are optional and default to that used in previous controls. On a display that supports transparent text BColour can be -1 which means that the background will show through the gaps in the characters.
When the box is touched a QWERTY keyboard will appear on the screen. Using this virtual keyboard any text can be entered into the box including upper/lower case letters, numbers and any other characters in the ASCII character set. The new text will replace any text previously in the box.
The value of the control can set to a string starting with two hash characters.
For example:
CtrlVal(nnn) = "##Enter Filename"
and in that case the string (without the leading two hash characters) will be displayed in the box with reduced brightness. This can be used to give the user a hint as to what should be entered (called "ghost text"). Reading the value of the control displaying ghost text will return an empty string. When the control is used normally the ghost text will vanish.
MMBasic will try to position the virtual keyboard on the screen so as to not obscure the text box that caused it to appear. A pen down interrupt will be generated just before the keyboard is deployed and a key up interrupt will be generated when the Enter key is touched and the keyboard is hidden.

GUI TEXTBOX CANCEL
This will dismiss a virtual keyboard if it is displayed on the screen. It is the same as if the user touched the cancel key except that the touch up interrupt is not generated.
If a keyboard is not displayed this command will do nothing.

Last edited: 09 June, 2021