-
Notifications
You must be signed in to change notification settings - Fork 0
GUI-World functional library
dyoo/gui-world
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
GUI-World: functional library for GUIs. ---------------------------------------------------------------------- GUI-World is a PLT Scheme GUI library that allows one to write graphical programs in the style of the World teachpack. For example, (require (lib "gui-world.ss" "gui-world")) ;; show-message: world -> string (define (show-message w) (string-append "I see: " (number->string w))) ;; The world is a number, initially 0. (define initial-world 0) ;; The view is a message and a button to increment ;; the world. (define view (col (message show-message) (button "Press me!" add1))) (big-bang initial-world view) is a simple program that shows a message and a button for changing the message's contents. Installation: 1. Grab the sources from github.com. The repository's home is in: http://github.com/dyoo/gui-world/tree/master For example: $ git clone git://github.com/dyoo/gui-world.git 2. Symbolically link the gui-world directory into the collects of your PLT Scheme installation. For example, if gui-world is under the home directory, and PLT Scheme under the ~/local/plt directory, then the command: $ ln -s ~/gui-world ~/local/plt/collects/gui-world will set up the necessary symbolic link. ---------------------------------------------------------------------- A 'gui' is one of the following: (row (listof gui)) | (col (listof gui)) | (message (gvalueof string)) ;; label text | (box-group (gvalueof string) ;; label text gui ;; the inner gui (gvalueof boolean?)) ;; enabled? | (canvas (gvalueof scene) ;; the displayed scene (gcallbackof-2 number number)) ;; on-click callback | (button (gvalueof string) ;; label text gcallbackof-0 ;; button press callback (gvalueof boolean)) ;; enabled? | (slider (gvalueof number) ;; current value (gvalueof number) ;; min (gvalueof number) ;; max (gcallbackof-1 number) ;; slider moved callback (gvalueof boolean)) ;; enabled? | (drop-down (gvalueof string) ;; current value (gvalueof (listof string)) ;; choices (gcallbackof-1 string) ;; selection callback (gvalueof boolean)) ;; enabled? | (text-field (gvalueof string) ;; text (gcallbackof-1 string) ;; text changed callback (gvalueof boolean)) ;; enabled? | (checkbox (gvalueof string) ;; label (gvalueof boolean) ;; current checked value (gcallbackof-1 boolean) ;; callback (gvalueof boolean)) ;; enabled? where: (gcallbackof-0 t): world -> world (gcallbackof-1 t): world t -> world (gcallbackof-2 t1 t2): world t1 t2 -> world (gvalueof t): world -> t A gui is a declarative definition of the view and controller of a graphical program. The gvalueof functions map the world model to the view. The gcallbackof functions map controller actions to the world model. The gui's display is refreshed whenever a user acts on the controller, or when the current world changes. Syntactic sugar: literals put in gvalueof position are treated as the constant function that returns that value. i.e.: (message "hello world") should be treated as: (message (lambda (a-world) "hello world")) To hook into the world system, we provide: big-bang: world gui -> ??? ;; FIXME which consumes an initial world and a gui.