ui.frp book gadgets
parent
3645d28b1a
commit
588a04c62d
|
@ -243,6 +243,10 @@ DEFER: __
|
|||
|
||||
\ if* 2 [ swap [ undo-if* ] 2curry ] define-pop-inverse
|
||||
|
||||
! misc
|
||||
\ join 1 [ [ split ] curry ] define-pop-inverse
|
||||
\ split 1 [ [ join ] curry ] define-pop-inverse
|
||||
|
||||
! Constructor inverse
|
||||
: deconstruct-pred ( class -- quot )
|
||||
"predicate" word-prop [ dupd call assure ] curry ;
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 98627a6ce4a1ef23691cfb752fecf056e2eacd01
|
||||
Subproject commit 4112107342733e412dda8c1b747aa2ec1f27ddb6
|
|
@ -11,7 +11,7 @@ IN: drills
|
|||
SYMBOLS: it startLength ;
|
||||
: big ( gadget -- gadget ) T{ font { name "sans-serif" } { size 30 } } >>font ;
|
||||
: card ( model quot -- button ) <arrow> <label-control> big [ next ] <book-btn> ;
|
||||
: op ( quot str -- gadget ) <label> big swap <book-bevel-btn> ;
|
||||
: op ( quot str -- gadget ) <label> big swap <book-border-btn> ;
|
||||
|
||||
: show ( model -- gadget ) dup it set-global [ random ] <arrow>
|
||||
{ [ [ first ] card ]
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
USING: accessors arrays kernel models ui.frp.signals ui.gadgets
|
||||
ui.gadgets.buttons ui.gadgets.buttons.private
|
||||
ui.gadgets.editors ui.gadgets.tables ;
|
||||
USING: accessors arrays kernel models monads ui.frp.signals ui.gadgets
|
||||
ui.gadgets.buttons ui.gadgets.buttons.private ui.gadgets.editors
|
||||
ui.gadgets.tables sequences splitting models.illusion
|
||||
ui.gadgets.scrollers documents ;
|
||||
IN: ui.frp.gadgets
|
||||
|
||||
TUPLE: frp-button < button hook ;
|
||||
: <frp-button> ( gadget -- button ) [
|
||||
[ dup hook>> [ call( button -- ) ] [ drop ] if* ] keep
|
||||
t swap set-control-value
|
||||
dup set-control-value
|
||||
] frp-button new-button f <basic> >>model ;
|
||||
|
||||
: <frp-bevel-button> ( text -- button ) <frp-button> border-button-theme ;
|
||||
: <frp-border-button> ( text -- button ) <frp-button> border-button-theme ;
|
||||
|
||||
TUPLE: frp-table < table { quot initial: [ ] } { val-quot initial: [ ] } color-quot column-titles column-alignment ;
|
||||
M: frp-table column-titles column-titles>> ;
|
||||
|
@ -25,4 +25,17 @@ M: frp-table row-color color-quot>> [ call( a -- b ) ] [ drop f ] if* ;
|
|||
: <frp-list*> ( -- table ) V{ } clone <model> <frp-list> ;
|
||||
: indexed ( table -- table ) f >>val-quot ;
|
||||
|
||||
: <frp-field> ( -- field ) "" <model> <model-field> ;
|
||||
GENERIC: output-model ( gadget -- model )
|
||||
M: gadget output-model model>> ;
|
||||
M: table output-model dup multiple-selection?>>
|
||||
[ dup val-quot>> [ selected-values>> ] [ selected-indices*>> ] if ]
|
||||
[ dup val-quot>> [ selected-value>> ] [ selected-index*>> ] if ] if ;
|
||||
M: model-field output-model field-model>> ;
|
||||
M: scroller output-model viewport>> children>> first output-model ;
|
||||
M: multiline-editor output-model model>> [ "\n" join ] <illusion> ;
|
||||
|
||||
: <frp-field> ( -- field ) "" <model> <model-field> ;
|
||||
: <frp-editor> ( model -- editor ) [ "\n" split document new-model ] bind <multiline-editor> swap >>model ;
|
||||
|
||||
IN: accessors
|
||||
M: frp-button text>> children>> first text>> ;
|
|
@ -1,18 +1,10 @@
|
|||
USING: accessors fry kernel lexer math.parser models sequences
|
||||
ui.frp.signals ui.gadgets ui.gadgets.editors ui.gadgets.scrollers
|
||||
ui.gadgets.tables ui.gadgets.tracks ;
|
||||
USING: accessors fry kernel lexer math.parser models
|
||||
sequences ui.frp.signals ui.gadgets.tracks ui.gadgets
|
||||
ui.frp.gadgets ui.gadgets.books ;
|
||||
QUALIFIED: make
|
||||
IN: ui.frp.layout
|
||||
TUPLE: layout gadget width ; C: <layout> layout
|
||||
|
||||
GENERIC: output-model ( gadget -- model )
|
||||
M: gadget output-model model>> ;
|
||||
M: table output-model dup multiple-selection?>>
|
||||
[ dup val-quot>> [ selected-values>> ] [ selected-indices*>> ] if ]
|
||||
[ dup val-quot>> [ selected-value>> ] [ selected-index*>> ] if ] if ;
|
||||
M: model-field output-model field-model>> ;
|
||||
M: scroller output-model viewport>> children>> first output-model ;
|
||||
|
||||
GENERIC: , ( uiitem -- )
|
||||
M: gadget , f <layout> make:, ;
|
||||
M: model , activate-model ;
|
||||
|
@ -31,4 +23,6 @@ M: model -> dup , ;
|
|||
: <hbox> ( gadgets -- track ) horizontal <box> ; inline
|
||||
: <hbox*> ( gadgets -- track ) horizontal <box*> ; inline
|
||||
: <vbox> ( gadgets -- track ) vertical <box> ; inline
|
||||
: <vbox*> ( gadgets -- track ) vertical <box*> ; inline
|
||||
: <vbox*> ( gadgets -- track ) vertical <box*> ; inline
|
||||
|
||||
: <frp-book> ( gadgets -- book ) { } make:make [ gadget>> ] map f <book> ; inline
|
|
@ -21,7 +21,7 @@ M: filter-model (model-changed) [ value>> ] dip 2dup quot>> call( a -- ? )
|
|||
TUPLE: fold-model < multi-model oldval quot ;
|
||||
M: fold-model (model-changed) [ [ value>> ] [ [ oldval>> ] [ quot>> ] bi ] bi*
|
||||
call( val oldval -- newval ) ] keep set-model ;
|
||||
: <fold> ( oldval quot model -- signal ) 1array fold-model <multi-model> swap >>quot
|
||||
: <fold> ( model oldval quot -- signal ) rot 1array fold-model <multi-model> swap >>quot
|
||||
swap [ >>oldval ] [ >>value ] bi ;
|
||||
|
||||
TUPLE: updater-model < multi-model values updates ;
|
||||
|
|
|
@ -13,7 +13,7 @@ IN: ui.gadgets.alerts
|
|||
:: ask-user* ( model string -- model' )
|
||||
[ [let | lbl [ string <label> T{ font { name "sans-serif" } { size 14 } } >>font dup , ]
|
||||
fldm [ <frp-field> ->% 1 ]
|
||||
btn [ "okay" <frp-bevel-button> model >>model ] |
|
||||
btn [ "okay" <frp-border-button> model >>model ] |
|
||||
btn -> [ fldm swap <updates> ]
|
||||
[ [ drop lbl close-window ] $> , ] bi
|
||||
] ] <vbox> { 161 86 } >>pref-dim "" open-window ;
|
||||
|
@ -23,7 +23,7 @@ IN: ui.gadgets.alerts
|
|||
MACRO: ask-buttons ( buttons -- quot ) dup length [
|
||||
[ swap
|
||||
[ 22 wrap-lines <label> T{ font { name "sans-serif" } { size 18 } } >>font ,
|
||||
[ [ <frp-bevel-button> [ close-window ] >>hook -> ] map ] <hbox> , ] <vbox>
|
||||
[ [ <frp-border-button> [ close-window ] >>hook -> ] map ] <hbox> , ] <vbox>
|
||||
"" open-window
|
||||
] dip firstn
|
||||
] 2curry ;
|
|
@ -5,8 +5,13 @@ IN: ui.gadgets.book-extras
|
|||
: |<< ( book -- ) 0 swap set-control-value ;
|
||||
: next ( book -- ) model>> [ 1 + ] change-model ;
|
||||
: prev ( book -- ) model>> [ 1 - ] change-model ;
|
||||
: (book-t) ( quot -- quot ) '[ : owner ( gadget -- book ) parent>> dup book? [ owner ] unless ; owner @ ] ;
|
||||
: owner ( gadget -- book ) parent>> dup book? [ owner ] unless ;
|
||||
: (book-t) ( quot -- quot ) '[ owner @ ] ;
|
||||
: <book-btn> ( label quot -- button ) (book-t) <button> ;
|
||||
: <book-bevel-btn> ( label quot -- button ) (book-t) <border-button> ;
|
||||
: >>> ( label -- button ) [ next ] <book-btn> ;
|
||||
: <<< ( label -- button ) [ prev ] <book-btn> ;
|
||||
: <book-border-btn> ( label quot -- button ) (book-t) <border-button> ;
|
||||
: >>> ( gadget -- ) owner next ;
|
||||
: <<< ( gadget -- ) owner prev ;
|
||||
: go-to ( gadget number -- ) swap owner model>> set-model ;
|
||||
|
||||
: <forward-btn> ( label -- button ) [ >>> ] <button> ;
|
||||
: <backward-btn> ( label -- button ) [ <<< ] <button> ;
|
||||
|
|
Loading…
Reference in New Issue