factor/extra/automata/ui/ui.factor

109 lines
2.8 KiB
Factor
Raw Normal View History

2007-09-20 18:09:08 -04:00
USING: kernel namespaces math quotations arrays hashtables sequences threads
opengl
opengl.gl
colors
ui
ui.gestures
ui.gadgets
ui.gadgets.slate
ui.gadgets.labels
ui.gadgets.buttons
ui.gadgets.frames
ui.gadgets.packs
ui.gadgets.grids
ui.gadgets.theme
ui.gadgets.handler
2008-07-12 17:46:50 -04:00
accessors
qualified
2008-01-16 16:25:29 -05:00
namespaces.lib assocs.lib vars
2008-07-12 17:46:50 -04:00
rewrite-closures automata math.geometry.rect newfx ;
2007-09-20 18:09:08 -04:00
IN: automata.ui
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2008-07-12 17:46:50 -04:00
QUALIFIED: ui.gadgets.grids
: grid-add ( grid child i j -- grid )
>r >r dupd swap r> r> ui.gadgets.grids:grid-add ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2007-09-20 18:09:08 -04:00
: draw-point ( y x value -- ) 1 = [ swap glVertex2i ] [ 2drop ] if ;
: draw-line ( y line -- ) 0 swap [ >r 2dup r> draw-point 1+ ] each 2drop ;
: (draw-bitmap) ( bitmap -- ) 0 swap [ >r dup r> draw-line 1+ ] each drop ;
: draw-bitmap ( bitmap -- ) GL_POINTS glBegin (draw-bitmap) glEnd ;
: display ( -- ) black gl-color bitmap> draw-bitmap ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
VAR: slate
! Call a 'model' quotation with the current 'view'.
: with-view ( quot -- )
slate> rect-dim first >width
slate> rect-dim second >height
call
slate> relayout-1 ;
! Create a quotation that is appropriate for buttons and gesture handler.
: view-action ( quot -- quot ) [ drop [ ] with-view ] make* closed-quot ;
: view-button ( label quot -- ) >r <label> r> view-action <bevel-button> ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Helper word to make things less verbose
: random-rule ( -- ) set-interesting start-center ;
DEFER: automata-window
2008-07-12 17:46:50 -04:00
: automata-window* ( -- )
init-rule
set-interesting
<frame>
<shelf>
"1 - Center" [ start-center ] view-button add-gadget
"2 - Random" [ start-random ] view-button add-gadget
"3 - Continue" [ run-rule ] view-button add-gadget
"5 - Random Rule" [ random-rule ] view-button add-gadget
"n - New" [ automata-window ] view-button add-gadget
@top grid-add
C[ display ] <slate>
{ 400 400 } >>pdim
2008-07-12 17:46:50 -04:00
dup >slate
@center grid-add
<handler>
2008-07-12 17:46:50 -04:00
H{ }
T{ key-down f f "1" } [ start-center ] view-action is
T{ key-down f f "2" } [ start-random ] view-action is
T{ key-down f f "3" } [ run-rule ] view-action is
T{ key-down f f "5" } [ random-rule ] view-action is
T{ key-down f f "n" } [ automata-window ] view-action is
>>table
2008-07-12 17:46:50 -04:00
"Automata" open-window ;
2007-09-20 18:09:08 -04:00
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: automata-window ( -- ) [ [ automata-window* ] with-scope ] with-ui ;
2008-01-16 16:25:29 -05:00
MAIN: automata-window