]> gitweb.factorcode.org Git - factor.git/commitdiff
frp-button improvements
authorSam Anklesaria <sam@Tintin.local>
Mon, 18 May 2009 22:21:15 +0000 (17:21 -0500)
committerSam Anklesaria <sam@Tintin.local>
Mon, 18 May 2009 22:21:15 +0000 (17:21 -0500)
extra/models/mapped/mapped.factor [deleted file]
extra/ui/frp/frp.factor
extra/ui/gadgets/alerts/alerts.factor

diff --git a/extra/models/mapped/mapped.factor b/extra/models/mapped/mapped.factor
deleted file mode 100644 (file)
index 698da93..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-! Copyright (C) 2009 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: macros ui.frp fry
-generalizations kernel sequences ;
-IN: models.mapped
-
-MACRO: <n-mapped> ( int -- quot ) dup
-   '[ [ _ 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 4f9f2da1391317fa1af8ea89f844d37e3b52d689..f59361a0ec284ffba624e827e2fbe0aea33ccc76 100644 (file)
@@ -1,8 +1,8 @@
-USING: accessors arrays colors fonts fry kernel math models
-models.product monads sequences ui.gadgets ui.gadgets.buttons
-ui.gadgets.editors ui.gadgets.line-support ui.gadgets.tables
-ui.gadgets.tracks ui.render ui.gadgets.scrollers
-math.parser lexer ;
+USING: accessors arrays colors fonts fry generalizations kernel
+lexer macros math math.parser models models.product monads
+sequences ui.gadgets ui.gadgets.buttons ui.gadgets.buttons.private
+ui.gadgets.editors ui.gadgets.line-support ui.gadgets.scrollers
+ui.gadgets.tables ui.gadgets.tracks ui.render ;
 QUALIFIED: make
 IN: ui.frp
 
@@ -56,6 +56,14 @@ M: mapped-model (model-changed)
     set-model ;
 M: mapped-model model-activated [ model>> ] keep model-changed ;
 
+TUPLE: side-effect-model < mapped-model ;
+M: side-effect-model (model-changed) [ value>> ] [ quot>> ] bi* call( old -- ) ;
+: <$ ( model quot -- side-effect-model )
+   f side-effect-model new-model
+     swap >>quot
+     over >>model
+     [ add-dependency ] keep ;
+
 TUPLE: frp-product < multi-model ;
 : <frp-product> ( models -- product ) frp-product <multi-model> ;
 M: frp-product model-changed
@@ -68,7 +76,11 @@ M: frp-product update-model
 M: frp-product model-activated dup model-changed ;
 
 ! Gadgets
-: <frp-button> ( text -- button ) [ t swap set-control-value ] <border-button> f <basic> >>model ;
+TUPLE: frp-button < button hook ;
+: <frp-button> ( text -- button ) [ [ t swap set-control-value ] keep
+   dup hook>> [ call( button -- ) ] [ drop ] if* ]
+   frp-button new-button border-button-theme f <basic> >>model ;
+
 TUPLE: frp-table < table { quot initial: [ ] } { val-quot initial: [ ] } color-quot column-titles column-alignment ;
 M: frp-table column-titles column-titles>> ;
 M: frp-table column-alignment column-alignment>> ;
@@ -124,4 +136,18 @@ INSTANCE: gadget-monad monad
 INSTANCE: gadget monad
 M: gadget monad-of drop gadget-monad ;
 M: gadget-monad return drop <gadget> swap >>model ;
-M: gadget >>= output-model [ swap call( x -- y ) ] curry ; 
\ No newline at end of file
+M: gadget >>= output-model [ swap call( x -- y ) ] curry ; 
+
+! Macros
+
+MACRO: liftA-n ( int -- quot ) dup
+   '[ [ _ narray <frp-product> ] dip [ _ firstn ] prepend <mapped> ] ;
+
+MACRO: <$-n ( int -- quot ) dup
+   '[ [ _ narray <frp-product> ] dip [ _ firstn ] prepend <$ ] ;
+
+: liftA2 ( a b quot -- arrow ) 2 liftA-n ; inline
+: liftA3 ( a b c quot -- arrow ) 3 liftA-n ; inline
+
+: <$2 ( a b quot -- arrow ) 2 <$-n ; inline
+: <$3 ( a b c quot -- arrow ) 3 <$-n ; inline
\ No newline at end of file
index ec8335e0d391c4bbe6785afc1b3cb2dbfa0ad5e0..0c4a4fbd67de726acfb5984945b949dfeb70ffb4 100644 (file)
@@ -11,5 +11,5 @@ IN: ui.gadgets.alerts
             fldm [ <frp-field> ->% 1 ]
             btn  [ "okay" <frp-button> ] |
          btn -> [ fldm swap <updates> ]
-                [ [ drop lbl close-window f ] <mapped> , ] bi
+                [ [ drop lbl close-window ] <$ , ] bi
    ] ] <vbox> { 161 86 } >>pref-dim "" open-window ;
\ No newline at end of file