
(
( GUI Example
(

?& EXAMPLE_GUI NOT ?IF
1 CONSTANT EXAMPLE_GUI

"ui.rpl" LOAD

( Variables

VARIABLE exaWindow
VARIABLE exaLoad
VARIABLE exaCancel
VARIABLE exaCheckBox
VARIABLE exaSlider
VARIABLE exaMx
VARIABLE exaString
VARIABLE exaText
VARIABLE exaText2
VARIABLE exaText3

100 STRING sBuf

( this prints given string to aText2 gadget

: PrintMsg
    UI_Done SWAP UITX_Text exaText2 FETCH UI_SETATTRS
;


( Callbacks for Gadgets

: excbLoad
    100 STRING sValue
    100 STRING sBuffer

    UI_Done sValue UIST_String exaString FETCH UI_GETATTRS

    sValue "Loading %s" sBuffer SPRINTF
    sBuffer PrintMsg
;

: excbCheck 
    IF
	UI_Done 1 UI_Disabled exaSlider FETCH UI_SETATTRS
	UI_Done 1 UI_Disabled exaMx     FETCH UI_SETATTRS
	UI_Done 1 UI_Disabled exaString FETCH UI_SETATTRS
	UI_Done 1 UI_Disabled exaLoad FETCH UI_SETATTRS
    ELSE
	UI_Done 0 UI_Disabled exaSlider FETCH UI_SETATTRS
	UI_Done 0 UI_Disabled exaMx     FETCH UI_SETATTRS
	UI_Done 0 UI_Disabled exaString FETCH UI_SETATTRS
	UI_Done 0 UI_Disabled exaLoad FETCH UI_SETATTRS
    ENDIF
;

: excbSlider
    "Slider %d" sBuf SPRINTF
    sBuf PrintMsg
;

: excbMx
    "Mutual Exclude %d" sBuf SPRINTF
    sBuf PrintMsg
;

: excbString
    PrintMsg
;

: excbCancel
    exaWindow FETCH UI_DELETE
    FALSE exaWindow STORE
;

( Callback for Window

: excbWindow 
    PARAM
        VARIABLE iMouseY
        VARIABLE iMouseX
        VARIABLE iEvent
    ENDPARAM

    UIWM_Move iEvent FETCH = IF
        iMouseY FETCH iMouseX FETCH "Mouse moved to %ld %ld" sBuf SPRINTF
        UI_Done sBuf UITX_Text exaText3 FETCH UI_SETATTRS
    ENDIF

    UIWM_LMBDown iEvent FETCH = IF
        "Mouse button clicked" sBuf CPY
        UI_Done sBuf UITX_Text exaText3 FETCH UI_SETATTRS
    ENDIF

    UIWM_LMBUp iEvent FETCH = IF
       "Mouse button released" sBuf CPY
        UI_Done sBuf UITX_Text exaText3 FETCH UI_SETATTRS
    ENDIF

    UIWM_Close iEvent FETCH = IF
        exaWindow FETCH UI_DELETE
	FALSE exaWindow STORE
    ENDIF
;

?ENDIF ( EXAMPLE_GUI

(
( Create display elements
(

exaWindow FETCH 
?IF
    "Understood" "Window already opened" GET_KEY DROP
?ELSE

    ( Open a window

    UI_Done & excbWindow 0 0 400 200 "RPL Example Window" UI_WINDOW exaWindow STORE

    ( create a read-only text

    UI_Done 
    "RPL gadgets" UITX_Text
    exaWindow FETCH 0 150 15 100 12 "Header Text:" UI_TEXT exaText STORE

    ( create a check box

    UI_Done 
    0 UICB_Checked
    exaWindow FETCH & excbCheck 100 30 50 12 "Check Box" UI_CHECKBOX exaCheckBox STORE

    ( create a string gadget

    UI_Done 
    "spline" UIST_String
    exaWindow FETCH & excbString 100 45 150 12 "String" UI_STRING exaString STORE

    ( create a slider gadget

    UI_Done 
    0   UISL_Min
    100 UISL_Max
    20  UISL_Level
    exaWindow FETCH & excbSlider 100 60 50 12 "Slider" UI_SLIDER exaSlider STORE

    ( create a mutual exlude gadget

    5 PARRAY exaLabels

    ( initialize string pointer array
    0 "Choice 4" "Choice 3" "Choice 2" "Choice 1" exaLabels PINIT

    UI_Done 
    2       UIMX_Active
    exaLabels UIMX_Labels
    exaWindow FETCH & excbMx 100 75 150 12 "Mx" UI_MX exaMx STORE

    ( This text gadget shows gadget events

    UI_Done 
    "Welcome to RPL" UITX_Text
    1 UITX_Border
    exaWindow FETCH 0 100 105 150 12 "Gadget:" UI_TEXT exaText2 STORE

    ( window events are printed here

    UI_Done 
    "This is cool" UITX_Text
    1 UITX_Border
    exaWindow FETCH 0 100 130 250 12 "Info:" UI_TEXT exaText3 STORE

    ( create button gadgets

    UI_Done 
    exaWindow FETCH & excbLoad 20 150 150 12 "Load" UI_BUTTON exaLoad STORE

    UI_Done 
    exaWindow FETCH & excbCancel 200 150 150 12 "Cancel" UI_BUTTON exaCancel STORE
    
    ( realize gadgets
    exaWindow FETCH UI_REALIZE

?ENDIF ( exaGuiCreated
