1 ! Copyright (C) 2008 Slava Pestov.
\r
2 ! See http://factorcode.org/license.txt for BSD license.
\r
3 USING: accessors kernel models sequences ;
\r
6 TUPLE: product < model ;
\r
8 : new-product ( models class -- product )
\r
10 swap clone >>dependencies ; inline
\r
12 : <product> ( models -- product )
\r
13 product new-product ;
\r
15 : product-value ( model quot -- seq )
\r
16 [ dependencies>> ] dip map ; inline
\r
18 : set-product-value ( seq model quot -- )
\r
19 [ dependencies>> ] dip 2each ; inline
\r
21 M: product model-changed
\r
23 dup [ value>> ] product-value >>value
\r
24 notify-connections ;
\r
26 M: product model-activated dup model-changed ;
\r
28 M: product update-model
\r
29 [ value>> ] keep [ set-model ] set-product-value ;
\r
31 M: product range-value
\r
32 [ range-value ] product-value ;
\r
34 M: product range-page-value
\r
35 [ range-page-value ] product-value ;
\r
37 M: product range-min-value
\r
38 [ range-min-value ] product-value ;
\r
40 M: product range-max-value
\r
41 [ range-max-value ] product-value ;
\r
43 M: product range-max-value*
\r
44 [ range-max-value* ] product-value ;
\r
46 M: product set-range-value
\r
47 [ clamp-value ] keep
\r
48 [ set-range-value ] set-product-value ;
\r
50 M: product set-range-page-value
\r
51 [ set-range-page-value ] set-product-value ;
\r
53 M: product set-range-min-value
\r
54 [ set-range-min-value ] set-product-value ;
\r
56 M: product set-range-max-value
\r
57 [ set-range-max-value ] set-product-value ;
\r