46 lines
1.3 KiB
Common Lisp
46 lines
1.3 KiB
Common Lisp
; file: input-gui.lsp
|
|
; url: http://rosettacode.org/wiki/User_input/Graphical
|
|
; author: oofoe 2012-02-02
|
|
|
|
; Colours
|
|
(setq ok '(.8 1 .8) fail '(1 .5 .5))
|
|
|
|
; Load library and initialize GUI server:
|
|
(load (append (env "NEWLISPDIR") "/guiserver.lsp"))
|
|
(gs:init)
|
|
|
|
; Validation Callback
|
|
|
|
; There is a bug in the "gs:get-text" function that causes it to fail
|
|
; silently if the text field is empty. Therfore, I set the field
|
|
; background to red first and only clear it if the field returns
|
|
; correctly.
|
|
(define (validate)
|
|
(gs:set-color 'string fail)
|
|
(if (not (empty? (gs:get-text 'string)))
|
|
(gs:set-color 'string ok))
|
|
|
|
(gs:set-color 'number fail)
|
|
(if (= 75000 (int (gs:get-text 'number)))
|
|
(gs:set-color 'number ok))
|
|
)
|
|
|
|
; Create main window frame and set layout.
|
|
(gs:frame 'main 100 100 256 128 "User Input/Graphical")
|
|
(gs:set-flow-layout 'main "left" 4 4)
|
|
|
|
; Create and add widgets.
|
|
(gs:label 'instructions "Please enter a string and the number 75000:")
|
|
(gs:text-field 'string 'validate 32)
|
|
(gs:text-field 'number 'validate 8)
|
|
(gs:button 'check 'validate "validate...")
|
|
(gs:add-to 'main 'instructions 'string 'number 'check)
|
|
|
|
; Show main window.
|
|
(gs:set-visible 'main true)
|
|
|
|
; Start event loop.
|
|
(gs:listen)
|
|
|
|
; No (exit) needed -- guiserver kills program on window close.
|