55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Factor
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Factor
		
	
	
		
			Executable File
		
	
! Copyright (C) 2008 Slava Pestov.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: accessors models kernel sequences ;
 | 
						|
IN: models.compose
 | 
						|
 | 
						|
TUPLE: compose < model ;
 | 
						|
 | 
						|
: new-compose ( models class -- compose )
 | 
						|
    f swap new-model
 | 
						|
        swap clone >>dependencies ; inline
 | 
						|
 | 
						|
: <compose> ( models -- compose )
 | 
						|
    compose new-compose ;
 | 
						|
 | 
						|
: composed-value [ dependencies>> ] dip map ; inline
 | 
						|
 | 
						|
: set-composed-value [ dependencies>> ] dip 2each ; inline
 | 
						|
 | 
						|
M: compose model-changed
 | 
						|
    nip
 | 
						|
    [ [ model-value ] composed-value ] keep set-model ;
 | 
						|
 | 
						|
M: compose model-activated dup model-changed ;
 | 
						|
 | 
						|
M: compose update-model
 | 
						|
    dup model-value swap [ set-model ] set-composed-value ;
 | 
						|
 | 
						|
M: compose range-value
 | 
						|
    [ range-value ] composed-value ;
 | 
						|
 | 
						|
M: compose range-page-value
 | 
						|
    [ range-page-value ] composed-value ;
 | 
						|
 | 
						|
M: compose range-min-value
 | 
						|
    [ range-min-value ] composed-value ;
 | 
						|
 | 
						|
M: compose range-max-value
 | 
						|
    [ range-max-value ] composed-value ;
 | 
						|
 | 
						|
M: compose range-max-value*
 | 
						|
    [ range-max-value* ] composed-value ;
 | 
						|
 | 
						|
M: compose set-range-value
 | 
						|
    [ clamp-value ] keep
 | 
						|
    [ set-range-value ] set-composed-value ;
 | 
						|
 | 
						|
M: compose set-range-page-value
 | 
						|
    [ set-range-page-value ] set-composed-value ;
 | 
						|
 | 
						|
M: compose set-range-min-value
 | 
						|
    [ set-range-min-value ] set-composed-value ;
 | 
						|
 | 
						|
M: compose set-range-max-value
 | 
						|
    [ set-range-max-value ] set-composed-value ;
 |