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 [ add-connection ] 2keep 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 ; : number-field ( var -- action-field ) unit [ editor-text string>number ] swap append [ set ] append ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! [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: contrib/action-field ;