]> gitweb.factorcode.org Git - factor.git/commitdiff
Add action-field gadget to contrib
authorwayo.cavazos <wayo.cavazos@gmail.com>
Fri, 18 Aug 2006 00:40:29 +0000 (00:40 +0000)
committerwayo.cavazos <wayo.cavazos@gmail.com>
Fri, 18 Aug 2006 00:40:29 +0000 (00:40 +0000)
contrib/action-field.factor [new file with mode: 0644]

diff --git a/contrib/action-field.factor b/contrib/action-field.factor
new file mode 100644 (file)
index 0000000..dc088c7
--- /dev/null
@@ -0,0 +1,48 @@
+
+USING: kernel models namespaces math sequences arrays hashtables gadgets
+       gadgets-text gadgets-buttons ;
+IN: action-field
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+TUPLE: action-field quot ;
+
+C: action-field ( quot -- action-field )
+tuck set-action-field-quot f <model> [ add-connection ] 2keep
+<field> over set-gadget-delegate ;
+
+M: action-field model-changed ( action-field -- ) dup action-field-quot call ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: variable-field ( var -- action-field )
+unit [ editor-text ] swap append [ set ] append <action-field> ;
+
+: number-field ( var -- action-field )
+unit [ editor-text string>number ] swap append [ set ] append <action-field> ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! [bind] [unbind] and [bound?] should probably be in a separate
+! file. But right now boids and automata are the only programs which
+! use this, and I don't want to add a new contrib file just for
+! this. For now they'll live here. Maybe bind-button and
+! bind-action-field should go into a gadgets-utils file eventually.
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: [bind] ( ns quot -- quot ) \ bind 3array >quotation ;
+
+: [unbind] ( quot -- quot ) second ;
+
+: [bound?] ( quot -- ? )
+dup length 3 = [ dup first hashtable? swap third \ bind = and ] [ f ] if ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: bind-button ( ns button -- ) tuck button-quot [bind] swap set-button-quot ;
+
+: bind-action-field ( ns action-field -- )
+tuck action-field-quot [bind] swap set-action-field-quot ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+PROVIDE: action-field ;
\ No newline at end of file