]> gitweb.factorcode.org Git - factor.git/commitdiff
alerts: "ask-user" added (uses functors)
authorSam Anklesaria <sam@Tintin.local>
Sun, 17 May 2009 22:35:07 +0000 (17:35 -0500)
committerSam Anklesaria <sam@Tintin.local>
Sun, 17 May 2009 22:35:07 +0000 (17:35 -0500)
extra/models/mapped/mapped.factor
extra/ui/frp/frp.factor
extra/ui/gadgets/alerts/alerts.factor

index 9b8dd9ccf9f9737e5ef42cee8b5a0f1c46ba84c2..698da935e563394f34a326f9d59888448c79acbd 100644 (file)
@@ -1,11 +1,11 @@
 ! Copyright (C) 2009 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: macros ui.frp models.product fry
+USING: macros ui.frp fry
 generalizations kernel sequences ;
 IN: models.mapped
 
 MACRO: <n-mapped> ( int -- quot ) dup
-   '[ [ _ narray <product> ] dip [ _ firstn ] prepend <mapped> ] ;
+   '[ [ _ narray <frp-product> ] dip [ _ firstn ] prepend <mapped> ] ;
 
 : <2mapped> ( a b quot -- arrow ) 2 <n-mapped> ; inline
 : <3mapped> ( a b c quot -- arrow ) 3 <n-mapped> ; inline
\ No newline at end of file
index 7689e0744544198fa343b7696465c8e174fd3f62..4f9f2da1391317fa1af8ea89f844d37e3b52d689 100644 (file)
@@ -56,6 +56,16 @@ M: mapped-model (model-changed)
     set-model ;
 M: mapped-model model-activated [ model>> ] keep model-changed ;
 
+TUPLE: frp-product < multi-model ;
+: <frp-product> ( models -- product ) frp-product <multi-model> ;
+M: frp-product model-changed
+    nip
+    dup dependencies>> [ value>> ] all?
+    [ dup [ value>> ] product-value >>value notify-connections
+    ] [ drop ] if ;
+M: frp-product update-model
+    dup value>> swap [ set-model ] set-product-value ;
+M: frp-product model-activated dup model-changed ;
 
 ! Gadgets
 : <frp-button> ( text -- button ) [ t swap set-control-value ] <border-button> f <basic> >>model ;
index 03d60957fa19a16e7221d9701d522ea550334c73..ec8335e0d391c4bbe6785afc1b3cb2dbfa0ad5e0 100644 (file)
@@ -1,4 +1,15 @@
-USING: accessors ui ui.gadgets ui.gadgets.labels ui.gadgets.buttons ui.gadgets.packs locals sequences fonts io.styles ;
+USING: accessors kernel ui ui.frp ui.gadgets ui.gadgets.labels
+ui.gadgets.buttons ui.gadgets.packs locals sequences fonts io.styles ;
+
 IN: ui.gadgets.alerts
-:: alert ( quot string -- ) <pile> { 10 10 } >>gap 1 >>align string <label> T{ font { name "sans-serif" } { size 18 } } >>font { 200 100 } >>pref-dim add-gadget 
-   "okay" [ close-window ] quot append <border-button> add-gadget "" open-window ;
\ No newline at end of file
+:: alert ( quot string -- ) <pile> { 10 10 } >>gap 1 >>align
+   string <label> T{ font { name "sans-serif" } { size 18 } } >>font { 200 100 } >>pref-dim add-gadget 
+   "okay" [ close-window ] quot append <border-button> add-gadget "" open-window ;
+
+: ask-user ( string -- model )
+   [ [let | lbl  [ <label>  T{ font { name "sans-serif" } { size 14 } } >>font dup , ]
+            fldm [ <frp-field> ->% 1 ]
+            btn  [ "okay" <frp-button> ] |
+         btn -> [ fldm swap <updates> ]
+                [ [ drop lbl close-window f ] <mapped> , ] bi
+   ] ] <vbox> { 161 86 } >>pref-dim "" open-window ;
\ No newline at end of file