Fix ridiculous indentation, over (>>foo), and other crap in UI

db4
Slava Pestov 2008-09-27 14:36:04 -05:00
parent 016a1ed817
commit b7610e0bf7
38 changed files with 299 additions and 321 deletions

View File

@ -16,15 +16,15 @@ M: book model-changed ( model book -- )
relayout ;
: new-book ( pages model class -- book )
new-gadget
swap >>model
swap add-gadgets ; inline
new-gadget
swap >>model
swap add-gadgets ; inline
: <book> ( pages model -- book ) book new-book ;
M: book pref-dim* ( book -- dim ) children>> pref-dims max-dim ;
M: book layout* ( book -- )
[ dim>> ] [ children>> ] bi [ (>>dim) ] with each ;
[ children>> ] [ dim>> ] bi [ >>dim drop ] curry each ;
M: book focusable-child* ( book -- child/t ) current-page ;

View File

@ -10,7 +10,7 @@ TUPLE: border < gadget
{ align initial: { 1/2 1/2 } } ;
: new-border ( child class -- border )
new-gadget [ swap add-gadget drop ] keep ; inline
new-gadget swap add-gadget ; inline
: <border> ( child gap -- border )
swap border new-border

View File

@ -25,7 +25,7 @@ TUPLE: button < border pressed? selected? quot ;
dup mouse-clicked?
over button-rollover? and
buttons-down? and
over (>>pressed?)
>>pressed?
relayout-1 ;
: if-clicked ( button quot -- )
@ -115,20 +115,18 @@ M: checkmark-paint draw-interior
dup { 0 1 } v* swap { 1 0 } v* gl-line
] with-translation ;
: checkmark-theme ( gadget -- )
: checkmark-theme ( gadget -- gadget )
f
f
black <solid>
black <checkmark-paint>
<button-paint>
over (>>interior)
black <solid>
swap (>>boundary) ;
<button-paint> >>interior
black <solid> >>boundary ;
: <checkmark> ( -- gadget )
<gadget>
dup checkmark-theme
{ 14 14 } over (>>dim) ;
checkmark-theme
{ 14 14 } >>dim ;
: toggle-model ( model -- )
[ not ] change-model ;
@ -148,7 +146,7 @@ TUPLE: checkbox < button ;
align-left ;
M: checkbox model-changed
swap value>> over (>>selected?) relayout-1 ;
swap value>> >>selected? relayout-1 ;
TUPLE: radio-paint color ;
@ -162,20 +160,18 @@ M: radio-paint draw-boundary
color>> set-color
origin get { 1 1 } v+ swap rect-dim { 2 2 } v- 12 gl-circle ;
: radio-knob-theme ( gadget -- )
: radio-knob-theme ( gadget -- gadget )
f
f
black <radio-paint>
black <radio-paint>
<button-paint>
over (>>interior)
black <radio-paint>
swap (>>boundary) ;
<button-paint> >>interior
black <radio-paint> >>boundary ;
: <radio-knob> ( -- gadget )
<gadget>
dup radio-knob-theme
{ 16 16 } over (>>dim) ;
radio-knob-theme
{ 16 16 } >>dim ;
TUPLE: radio-control < button value ;
@ -188,13 +184,12 @@ TUPLE: radio-control < button value ;
M: radio-control model-changed
swap value>>
over value>> =
over (>>selected?)
over value>> = >>selected?
relayout-1 ;
: <radio-controls> ( parent model assoc quot -- parent )
#! quot has stack effect ( value model label -- )
swapd [ swapd call add-gadget ] 2curry assoc-each ; inline
#! quot has stack effect ( value model label -- )
swapd [ swapd call add-gadget ] 2curry assoc-each ; inline
: radio-button-theme ( gadget -- gadget )
{ 5 5 } >>gap
@ -204,18 +199,18 @@ M: radio-control model-changed
<radio-knob> label-on-right radio-button-theme <radio-control> ;
: <radio-buttons> ( model assoc -- gadget )
<filled-pile>
-rot
[ <radio-button> ] <radio-controls>
{ 5 5 } >>gap ;
<filled-pile>
-rot
[ <radio-button> ] <radio-controls>
{ 5 5 } >>gap ;
: <toggle-button> ( value model label -- gadget )
<radio-control> bevel-button-theme ;
: <toggle-buttons> ( model assoc -- gadget )
<shelf>
-rot
[ <toggle-button> ] <radio-controls> ;
<shelf>
-rot
[ <toggle-button> ] <radio-controls> ;
: command-button-quot ( target command -- quot )
[ invoke-command drop ] 2curry ;
@ -227,7 +222,7 @@ M: radio-control model-changed
<bevel-button> ;
: <toolbar> ( target -- toolbar )
<shelf>
swap
"toolbar" over class command-map commands>> swap
[ -rot <command-button> add-gadget ] curry assoc-each ;
<shelf>
swap
"toolbar" over class command-map commands>> swap
[ -rot <command-button> add-gadget ] curry assoc-each ;

View File

@ -96,9 +96,9 @@ M: editor ungraft*
: click-loc ( editor model -- )
>r clicked-loc r> set-model ;
: focus-editor ( editor -- ) t over (>>focused?) relayout-1 ;
: focus-editor ( editor -- ) t >>focused? relayout-1 ;
: unfocus-editor ( editor -- ) f over (>>focused?) relayout-1 ;
: unfocus-editor ( editor -- ) f >>focused? relayout-1 ;
: (offset>x) ( font col# str -- x )
swap head-slice string-width ;

View File

@ -9,9 +9,9 @@ IN: ui.gadgets.tests
! c contains b contains a
<gadget> "a" set
<gadget> "b" set
"a" get "b" get swap add-gadget drop
"b" get "a" get add-gadget drop
<gadget> "c" set
"b" get "c" get swap add-gadget drop
"c" get "b" get add-gadget drop
! position a and b
"a" get { 100 200 } >>loc drop
@ -33,8 +33,8 @@ IN: ui.gadgets.tests
<gadget> "g3" set
"g3" get { 100 200 } >>dim drop
"g1" get "g2" get swap add-gadget drop
"g2" get "g3" get swap add-gadget drop
"g2" get "g1" get add-gadget drop
"g3" get "g2" get add-gadget drop
[ { 30 30 } ] [ "g1" get screen-loc ] unit-test
[ { 30 30 } ] [ "g1" get screen-rect rect-loc ] unit-test
@ -49,11 +49,11 @@ IN: ui.gadgets.tests
<gadget> "g1" set
"g1" get { 300 300 } >>dim drop
<gadget> "g2" set
"g2" get "g1" get swap add-gadget drop
"g1" get "g2" get add-gadget drop
"g2" get { 20 20 } >>loc
{ 20 20 } >>dim drop
<gadget> "g3" set
"g3" get "g1" get swap add-gadget drop
"g1" get "g3" get add-gadget drop
"g3" get { 100 100 } >>loc
{ 20 20 } >>dim drop
@ -66,7 +66,7 @@ IN: ui.gadgets.tests
[ t ] [ { 110 110 } "g1" get pick-up "g3" get eq? ] unit-test
<gadget> "g4" set
"g4" get "g2" get swap add-gadget drop
"g2" get "g4" get add-gadget drop
"g4" get { 5 5 } >>loc
{ 1 1 } >>dim drop
@ -121,7 +121,7 @@ M: mock-gadget ungraft*
: add-some-children
3 [
<mock-gadget> over <model> >>model
dup "g" get swap add-gadget drop
"g" get over add-gadget drop
swap 1+ number>string set
] each ;

View File

@ -27,10 +27,10 @@ M: gadget model-changed 2drop ;
: nth-gadget ( n gadget -- child ) children>> nth ;
: init-gadget ( gadget -- gadget )
init-rect
{ 0 1 } >>orientation
t >>visible?
{ f f } >>graft-state ; inline
init-rect
{ 0 1 } >>orientation
t >>visible?
{ f f } >>graft-state ; inline
: new-gadget ( class -- gadget ) new init-gadget ; inline
@ -147,7 +147,7 @@ M: array gadget-text*
DEFER: relayout
: invalidate* ( gadget -- )
\ invalidate* over (>>layout-state)
\ invalidate* >>layout-state
dup forget-pref-dim
dup root?>>
[ layout-later ] [ parent>> [ relayout ] when* ] if ;
@ -167,7 +167,7 @@ DEFER: relayout
DEFER: in-layout?
: do-invalidate ( gadget -- gadget )
in-layout? get [ dup invalidate ] [ dup invalidate* ] if ;
in-layout? get [ dup invalidate ] [ dup invalidate* ] if ;
M: gadget (>>dim) ( dim gadget -- )
2dup dim>> =
@ -282,8 +282,7 @@ SYMBOL: in-layout?
: (clear-gadget) ( gadget -- )
dup [ (unparent) ] each-child
f over (>>focus)
f swap (>>children) ;
f >>focus f >>children drop ;
: clear-gadget ( gadget -- )
not-in-layout

View File

@ -2,7 +2,7 @@
! See http://factorcode.org/license.txt for BSD license.
USING: arrays kernel math namespaces make sequences words io
io.streams.string math.vectors ui.gadgets columns accessors
math.geometry.rect ;
math.geometry.rect locals ;
IN: ui.gadgets.grids
TUPLE: grid < gadget
@ -12,18 +12,18 @@ grid
: new-grid ( children class -- grid )
new-gadget
[ (>>grid) ] [ >r concat r> swap add-gadgets drop ] [ nip ] 2tri ;
inline
swap >>grid
dup grid>> concat add-gadgets ; inline
: <grid> ( children -- grid )
grid new-grid ;
: grid-child ( grid i j -- gadget ) rot grid>> nth nth ;
: grid-add ( grid child i j -- grid )
>r >r dupd swap r> r>
>r >r 2dup swap add-gadget drop r> r>
3dup grid-child unparent rot grid>> nth set-nth ;
:: grid-add ( grid child i j -- grid )
grid i j grid-child unparent
grid child add-gadget
child i j grid grid>> nth set-nth ;
: grid-remove ( grid i j -- grid ) <gadget> -rot grid-add ;
@ -33,10 +33,10 @@ grid
: (compute-grid) ( grid -- seq ) [ max-dim ] map ;
: compute-grid ( grid -- horiz vert )
pref-dim-grid dup flip (compute-grid) swap (compute-grid) ;
pref-dim-grid [ flip (compute-grid) ] [ (compute-grid) ] bi ;
: (pair-up) ( horiz vert -- dim )
>r first r> second 2array ;
[ first ] [ second ] bi* 2array ;
: pair-up ( horiz vert -- dims )
[ [ (pair-up) ] curry map ] with map ;

View File

@ -24,7 +24,7 @@ TUPLE: incremental < pack cursor ;
M: incremental pref-dim*
dup layout-state>> [
dup call-next-method over (>>cursor)
dup call-next-method >>cursor
] when cursor>> ;
: next-cursor ( gadget incremental -- cursor )
@ -57,5 +57,5 @@ M: incremental pref-dim*
not-in-layout
dup (clear-gadget)
dup forget-pref-dim
{ 0 0 } over (>>cursor)
{ 0 0 } >>cursor
parent>> [ relayout ] when* ;

View File

@ -11,10 +11,10 @@ IN: ui.gadgets.labelled
TUPLE: labelled-gadget < track content ;
: <labelled-gadget> ( gadget title -- newgadget )
{ 0 1 } labelled-gadget new-track
swap <label> reverse-video-theme f track-add
swap >>content
dup content>> 1 track-add ;
{ 0 1 } labelled-gadget new-track
swap <label> reverse-video-theme f track-add
swap >>content
dup content>> 1 track-add ;
M: labelled-gadget focusable-child* content>> ;
@ -22,25 +22,25 @@ M: labelled-gadget focusable-child* content>> ;
>r <scroller> r> <labelled-gadget> ;
: <labelled-pane> ( model quot scrolls? title -- gadget )
>r >r <pane-control> r> over (>>scrolls?) r>
>r >r <pane-control> r> >>scrolls? r>
<labelled-scroller> ;
: <close-box> ( quot -- button/f )
gray close-box <polygon-gadget> swap <bevel-button> ;
: title-theme ( gadget -- )
{ 1 0 } over (>>orientation)
: title-theme ( gadget -- gadget )
{ 1 0 } >>orientation
T{ gradient f {
T{ rgba f 0.65 0.65 1.0 1.0 }
T{ rgba f 0.65 0.45 1.0 1.0 }
} } swap (>>interior) ;
} } >>interior ;
: <title-label> ( text -- label ) <label> dup title-theme ;
: <title-label> ( text -- label ) <label> title-theme ;
: <title-bar> ( title quot -- gadget )
<frame>
swap dup [ <close-box> @left grid-add ] [ drop ] if
swap <title-label> @center grid-add ;
<frame>
swap dup [ <close-box> @left grid-add ] [ drop ] if
swap <title-label> @center grid-add ;
TUPLE: closable-gadget < frame content ;
@ -48,9 +48,9 @@ TUPLE: closable-gadget < frame content ;
[ closable-gadget? ] find-parent ;
: <closable-gadget> ( gadget title quot -- gadget )
closable-gadget new-frame
-rot <title-bar> @top grid-add
swap >>content
dup content>> @center grid-add ;
closable-gadget new-frame
-rot <title-bar> @top grid-add
swap >>content
dup content>> @center grid-add ;
M: closable-gadget focusable-child* content>> ;

View File

@ -63,11 +63,11 @@ M: object >label ;
M: f >label drop <gadget> ;
: label-on-left ( gadget label -- button )
{ 1 0 } <track>
swap >label f track-add
swap 1 track-add ;
{ 1 0 } <track>
swap >label f track-add
swap 1 track-add ;
: label-on-right ( label gadget -- button )
{ 1 0 } <track>
swap f track-add
swap >label 1 track-add ;
{ 1 0 } <track>
swap f track-add
swap >label 1 track-add ;

View File

@ -49,7 +49,7 @@ TUPLE: list < pack index presenter color hook ;
M: list model-changed
nip
dup clear-gadget
dup <list-items> over swap add-gadgets drop
dup <list-items> add-gadgets
bound-index ;
: selected-rect ( list -- rect )
@ -79,8 +79,8 @@ M: list focusable-child* drop t ;
2drop
] [
[ control-value length rem ] keep
[ (>>index) ] keep
[ relayout-1 ] keep
swap >>index
dup relayout-1
scroll>selected
] if ;

View File

@ -15,19 +15,17 @@ TUPLE: menu-glass < gadget ;
: <menu-glass> ( menu world -- glass )
menu-glass new-gadget
>r over menu-loc >>loc r>
[ swap add-gadget drop ] keep ;
swap add-gadget ;
M: menu-glass layout* gadget-child prefer ;
: hide-glass ( world -- )
dup glass>> [ unparent ] when*
f swap (>>glass) ;
[ [ unparent ] when* f ] change-glass drop ;
: show-glass ( gadget world -- )
over hand-clicked set-global
[ hide-glass ] keep
[ swap add-gadget drop ] 2keep
(>>glass) ;
dup hide-glass
swap [ hand-clicked set-global ] [ >>glass ] bi
dup glass>> add-gadget drop ;
: show-menu ( gadget owner -- )
find-world [ <menu-glass> ] keep show-glass ;
@ -48,7 +46,7 @@ M: menu-glass layout* gadget-child prefer ;
faint-boundary ;
: <commands-menu> ( hook target commands -- gadget )
<filled-pile>
-roll
[ <menu-item> add-gadget ] with with each
5 <border> menu-theme ;
<filled-pile>
-roll
[ <menu-item> add-gadget ] with with each
5 <border> menu-theme ;

View File

@ -5,9 +5,9 @@ math.vectors namespaces math.order accessors math.geometry.rect ;
IN: ui.gadgets.packs
TUPLE: pack < gadget
{ align initial: 0 }
{ fill initial: 0 }
{ gap initial: { 0 0 } } ;
{ align initial: 0 }
{ fill initial: 0 }
{ gap initial: { 0 0 } } ;
: packed-dim-2 ( gadget sizes -- list )
[ over rect-dim over v- rot fill>> v*n v+ ] with map ;
@ -40,7 +40,7 @@ TUPLE: pack < gadget
: <pile> ( -- pack ) { 0 1 } <pack> ;
: <filled-pile> ( -- pack ) <pile> 1 over (>>fill) ;
: <filled-pile> ( -- pack ) <pile> 1 >>fill ;
: <shelf> ( -- pack ) { 1 0 } <pack> ;

View File

@ -1,45 +1,51 @@
! Copyright (C) 2005, 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: arrays ui.gadgets ui.gadgets.borders ui.gadgets.buttons
ui.gadgets.labels ui.gadgets.scrollers
ui.gadgets.paragraphs ui.gadgets.incremental ui.gadgets.packs
ui.gadgets.theme ui.clipboards ui.gestures ui.traverse ui.render
hashtables io kernel namespaces sequences io.styles strings
quotations math opengl combinators math.vectors
sorting splitting io.streams.nested assocs
ui.gadgets.presentations ui.gadgets.slots ui.gadgets.grids
ui.gadgets.grid-lines classes.tuple models continuations
destructors accessors math.geometry.rect ;
ui.gadgets.labels ui.gadgets.scrollers ui.gadgets.paragraphs
ui.gadgets.incremental ui.gadgets.packs ui.gadgets.theme
ui.clipboards ui.gestures ui.traverse ui.render hashtables io
kernel namespaces sequences io.styles strings quotations math
opengl combinators math.vectors sorting splitting
io.streams.nested assocs ui.gadgets.presentations
ui.gadgets.slots ui.gadgets.grids ui.gadgets.grid-lines
classes.tuple models continuations destructors accessors
math.geometry.rect ;
IN: ui.gadgets.panes
TUPLE: pane < pack
output current prototype scrolls?
selection-color caret mark selecting? ;
output current prototype scrolls?
selection-color caret mark selecting? ;
: clear-selection ( pane -- pane ) f >>caret f >>mark ;
: clear-selection ( pane -- pane )
f >>caret f >>mark ;
: add-output ( pane current -- pane ) [ >>output ] [ add-gadget ] bi ;
: add-current ( pane current -- pane ) [ >>current ] [ add-gadget ] bi ;
: add-output ( pane current -- pane )
[ >>output ] [ add-gadget ] bi ;
: add-current ( pane current -- pane )
[ >>current ] [ add-gadget ] bi ;
: prepare-line ( pane -- pane )
clear-selection
dup prototype>> clone add-current ;
clear-selection
dup prototype>> clone add-current ;
: pane-caret&mark ( pane -- caret mark ) [ caret>> ] [ mark>> ] bi ;
: pane-caret&mark ( pane -- caret mark )
[ caret>> ] [ mark>> ] bi ;
: selected-children ( pane -- seq )
[ pane-caret&mark sort-pair ] keep gadget-subtree ;
M: pane gadget-selection? pane-caret&mark and ;
M: pane gadget-selection ( pane -- string/f ) selected-children gadget-text ;
M: pane gadget-selection ( pane -- string/f )
selected-children gadget-text ;
: pane-clear ( pane -- )
clear-selection
[ output>> clear-incremental ]
[ current>> clear-gadget ]
bi ;
clear-selection
[ output>> clear-incremental ]
[ current>> clear-gadget ]
bi ;
: new-pane ( class -- pane )
new-gadget
@ -132,7 +138,7 @@ M: style-stream write-gadget
: make-pane ( quot -- gadget )
<pane> [ swap with-pane ] keep smash-pane ; inline
: <scrolling-pane> ( -- pane ) <pane> t over (>>scrolls?) ;
: <scrolling-pane> ( -- pane ) <pane> t >>scrolls? ;
TUPLE: pane-control < pane quot ;
@ -172,7 +178,7 @@ M: pane-stream make-span-stream
>r pick at r> when* ; inline
: apply-foreground-style ( style gadget -- style gadget )
foreground [ over (>>color) ] apply-style ;
foreground [ >>color ] apply-style ;
: apply-background-style ( style gadget -- style gadget )
background [ solid-interior ] apply-style ;
@ -183,7 +189,7 @@ M: pane-stream make-span-stream
font-size swap at 12 or 3array ;
: apply-font-style ( style gadget -- style gadget )
over specified-font over (>>font) ;
over specified-font >>font ;
: apply-presentation-style ( style gadget -- style gadget )
presented [ <presentation> ] apply-style ;
@ -254,15 +260,15 @@ M: pane-stream make-block-stream
! Tables
: apply-table-gap-style ( style grid -- style grid )
table-gap [ over (>>gap) ] apply-style ;
table-gap [ >>gap ] apply-style ;
: apply-table-border-style ( style grid -- style grid )
table-border [ <grid-lines> over (>>boundary) ]
table-border [ <grid-lines> >>boundary ]
apply-style ;
: styled-grid ( style grid -- grid )
<grid>
f over (>>fill?)
f >>fill?
apply-table-gap-style
apply-table-border-style
nip ;
@ -286,13 +292,13 @@ M: pack dispose drop ;
M: paragraph dispose drop ;
: gadget-write ( string gadget -- )
over empty?
[ 2drop ] [ >r <label> text-theme r> swap add-gadget drop ] if ;
swap dup empty?
[ 2drop ] [ <label> text-theme add-gadget drop ] if ;
M: pack stream-write gadget-write ;
: gadget-bl ( style stream -- )
>r " " <word-break-gadget> style-label r> swap add-gadget drop ;
swap " " <word-break-gadget> style-label add-gadget drop ;
M: paragraph stream-write
swap " " split
@ -309,8 +315,8 @@ M: paragraph stream-write1
[ H{ } swap gadget-bl drop ] [ gadget-write1 ] if ;
: gadget-format ( string style stream -- )
pick empty?
[ 3drop ] [ >r swap <styled-label> r> swap add-gadget drop ] if ;
spin dup empty?
[ 3drop ] [ <styled-label> add-gadget drop ] if ;
M: pack stream-format
gadget-format ;
@ -326,8 +332,8 @@ M: paragraph stream-format
] if ;
: caret>mark ( pane -- pane )
dup caret>> >>mark
dup relayout-1 ;
dup caret>> >>mark
dup relayout-1 ;
GENERIC: sloppy-pick-up* ( loc gadget -- n )
@ -350,12 +356,10 @@ M: f sloppy-pick-up*
if ;
: move-caret ( pane -- pane )
dup hand-rel
over sloppy-pick-up
over (>>caret)
dup relayout-1 ;
dup hand-rel over sloppy-pick-up >>caret
dup relayout-1 ;
: begin-selection ( pane -- ) move-caret f swap (>>mark) ;
: begin-selection ( pane -- ) move-caret f >>mark drop ;
: extend-selection ( pane -- )
hand-moved? [

View File

@ -17,8 +17,8 @@ TUPLE: paragraph < gadget margin ;
: <paragraph> ( margin -- gadget )
paragraph new-gadget
{ 1 0 } over (>>orientation)
[ (>>margin) ] keep ;
{ 1 0 } >>orientation
swap >>margin ;
SYMBOL: x SYMBOL: max-x

View File

@ -61,7 +61,7 @@ IN: ui.gadgets.scrollers.tests
<gadget> { 600 400 } >>dim "g1" set
<gadget> { 600 10 } >>dim "g2" set
"g2" get "g1" get swap add-gadget drop
"g1" get "g2" get add-gadget drop
"g1" get <scroller>
{ 300 300 } >>dim

View File

@ -33,16 +33,16 @@ scroller H{
0 0 0 0 <range> 0 0 0 0 <range> 2array <compose> ;
: new-scroller ( gadget class -- scroller )
new-frame
t >>root?
<scroller-model> >>model
faint-boundary
new-frame
t >>root?
<scroller-model> >>model
faint-boundary
dup model>> dependencies>> first <x-slider> >>x dup x>> @bottom grid-add
dup model>> dependencies>> second <y-slider> >>y dup y>> @right grid-add
dup model>> dependencies>> first <x-slider> >>x dup x>> @bottom grid-add
dup model>> dependencies>> second <y-slider> >>y dup y>> @right grid-add
swap over model>> <viewport> >>viewport
dup viewport>> @center grid-add ;
swap over model>> <viewport> >>viewport
dup viewport>> @center grid-add ;
: <scroller> ( gadget -- scroller ) scroller new-scroller ;
@ -81,7 +81,7 @@ scroller H{
: scroll>rect ( rect gadget -- )
dup find-scroller* dup [
[ relative-scroll-rect ] keep
[ (>>follows) ] keep
swap >>follows
relayout
] [
3drop
@ -94,7 +94,7 @@ scroller H{
: scroll>gadget ( gadget -- )
dup find-scroller* dup [
[ (>>follows) ] keep
swap >>follows
relayout
] [
2drop
@ -104,9 +104,7 @@ scroller H{
dup viewport>> viewport-dim { 0 1 } v* swap scroll ;
: scroll>bottom ( gadget -- )
find-scroller [
t over (>>follows) relayout-1
] when* ;
find-scroller [ t >>follows relayout-1 ] when* ;
: scroll>top ( gadget -- )
<zero-rect> swap scroll>rect ;

View File

@ -83,7 +83,7 @@ thumb H{
dup direction>> swap find-slider slide-by-page ;
: elevator-click ( elevator -- )
dup compute-direction over (>>direction)
dup compute-direction >>direction
elevator-hold ;
elevator H{
@ -123,13 +123,13 @@ M: elevator layout*
: <slide-button> ( vector polygon amount -- button )
>r gray swap <polygon-gadget> r>
[ swap find-slider slide-by-line ] curry <repeat-button>
[ (>>orientation) ] keep ;
swap >>orientation ;
: elevator, ( gadget orientation -- gadget )
tuck <elevator> >>elevator
swap <thumb> >>thumb
dup elevator>> over thumb>> add-gadget
@center grid-add ;
tuck <elevator> >>elevator
swap <thumb> >>thumb
dup elevator>> over thumb>> add-gadget
@center grid-add ;
: <left-button> ( -- button ) { 0 1 } arrow-left -1 <slide-button> ;
: <right-button> ( -- button ) { 0 1 } arrow-right 1 <slide-button> ;
@ -143,16 +143,16 @@ M: elevator layout*
32 >>line ;
: <x-slider> ( range -- slider )
{ 1 0 } <slider>
<left-button> @left grid-add
{ 0 1 } elevator,
<right-button> @right grid-add ;
{ 1 0 } <slider>
<left-button> @left grid-add
{ 0 1 } elevator,
<right-button> @right grid-add ;
: <y-slider> ( range -- slider )
{ 0 1 } <slider>
<up-button> @top grid-add
{ 1 0 } elevator,
<down-button> @bottom grid-add ;
{ 0 1 } <slider>
<up-button> @top grid-add
{ 1 0 } elevator,
<down-button> @bottom grid-add ;
M: slider pref-dim*
dup call-next-method

View File

@ -69,12 +69,12 @@ M: value-ref finish-editing
} define-command
: <slot-editor> ( ref -- gadget )
{ 0 1 } slot-editor new-track
swap >>ref
dup <toolbar> f track-add
<source-editor> >>text
dup text>> <scroller> 1 track-add
dup revert ;
{ 0 1 } slot-editor new-track
swap >>ref
dup <toolbar> f track-add
<source-editor> >>text
dup text>> <scroller> 1 track-add
dup revert ;
M: slot-editor pref-dim* call-next-method { 600 200 } vmin ;

View File

@ -3,14 +3,14 @@ USING: kernel ui.gadgets ui.gadgets.tracks tools.test
IN: ui.gadgets.tracks.tests
[ { 100 100 } ] [
{ 0 1 } <track>
<gadget> { 100 100 } >>dim 1 track-add
pref-dim
{ 0 1 } <track>
<gadget> { 100 100 } >>dim 1 track-add
pref-dim
] unit-test
[ { 100 110 } ] [
{ 0 1 } <track>
<gadget> { 10 10 } >>dim f track-add
<gadget> { 100 100 } >>dim 1 track-add
pref-dim
{ 0 1 } <track>
<gadget> { 10 10 } >>dim f track-add
<gadget> { 100 100 } >>dim 1 track-add
pref-dim
] unit-test

View File

@ -9,23 +9,23 @@ IN: ui.gadgets.tracks
TUPLE: track < pack sizes ;
: normalized-sizes ( track -- seq )
sizes>> dup sift sum '[ dup [ _ / ] when ] map ;
sizes>> dup sift sum '[ dup [ _ / ] when ] map ;
: init-track ( track -- track )
init-gadget
V{ } clone >>sizes
1 >>fill ;
init-gadget
V{ } clone >>sizes
1 >>fill ;
: new-track ( orientation class -- track )
new
init-track
swap >>orientation ;
new
init-track
swap >>orientation ;
: <track> ( orientation -- track ) track new-track ;
: alloted-dim ( track -- dim )
[ children>> ] [ sizes>> ] bi { 0 0 }
[ [ drop { 0 0 } ] [ pref-dim ] if v+ ] 2reduce ;
[ children>> ] [ sizes>> ] bi { 0 0 }
[ [ drop { 0 0 } ] [ pref-dim ] if v+ ] 2reduce ;
: available-dim ( track -- dim ) [ dim>> ] [ alloted-dim ] bi v- ;
@ -38,10 +38,10 @@ M: track layout* ( track -- ) dup track-layout pack-layout ;
: track-pref-dims-1 ( track -- dim ) children>> pref-dims max-dim ;
: track-pref-dims-2 ( track -- dim )
[ children>> pref-dims ] [ normalized-sizes ] bi
[ [ v/n ] when* ] 2map
max-dim
[ >fixnum ] map ;
[ children>> pref-dims ] [ normalized-sizes ] bi
[ [ v/n ] when* ] 2map
max-dim
[ >fixnum ] map ;
M: track pref-dim* ( gadget -- dim )
[ track-pref-dims-1 ]
@ -51,16 +51,13 @@ M: track pref-dim* ( gadget -- dim )
set-axis ;
: track-add ( track gadget constraint -- track )
pick sizes>> push add-gadget ;
pick sizes>> push add-gadget ;
: track-remove ( track gadget -- track )
dupd dup
[
[ swap children>> index ]
[ unparent sizes>> ] 2bi
delete-nth
]
[ 2drop ]
if ;
dupd dup [
[ swap children>> index ]
[ unparent sizes>> ] 2bi
delete-nth
] [ 2drop ] if ;
: clear-track ( track -- ) V{ } clone >>sizes clear-gadget ;

View File

@ -18,7 +18,7 @@ TUPLE: viewport < gadget ;
viewport new-gadget
swap >>model
t >>clipped?
[ swap add-gadget drop ] keep ;
swap add-gadget ;
M: viewport layout*
dup rect-dim viewport-gap 2 v*n v-

View File

@ -18,7 +18,7 @@ IN: ui.gadgets.worlds.tests
<gadget> "g1" set
<gadget> "g2" set
"g1" get "g2" get swap add-gadget drop
"g2" get "g1" get add-gadget drop
[ ] [
"g2" get <test-world> "w" set
@ -33,8 +33,8 @@ IN: ui.gadgets.worlds.tests
<gadget> "g1" set
<gadget> "g2" set
<gadget> "g3" set
"g1" get "g3" get swap add-gadget drop
"g2" get "g3" get swap add-gadget drop
"g3" get "g1" get add-gadget drop
"g3" get "g2" get add-gadget drop
[ ] [
"g3" get <test-world> "w" set
@ -55,7 +55,7 @@ TUPLE: focus-test < gadget ;
: <focus-test>
focus-test new-gadget
<focusing> over swap add-gadget drop ;
dup <focusing> add-gadget drop ;
M: focus-test focusable-child* gadget-child ;

View File

@ -19,8 +19,7 @@ TUPLE: operation predicate command translator hook listener? ;
swap >>predicate ;
PREDICATE: listener-operation < operation
dup command>> listener-command?
swap listener?>> or ;
[ command>> listener-command? ] [ listener?>> ] bi or ;
M: operation command-name
command>> command-name ;
@ -59,15 +58,15 @@ SYMBOL: operations
: modify-operation ( hook translator operation -- operation )
clone
tuck (>>translator)
tuck (>>hook)
t over (>>listener?) ;
swap >>translator
swap >>hook
t >>listener? ;
: modify-operations ( operations hook translator -- operations )
rot [ >r 2dup r> modify-operation ] map 2nip ;
rot [ modify-operation ] with with map ;
: operations>commands ( object hook translator -- pairs )
>r >r object-operations r> r> modify-operations
[ object-operations ] 2dip modify-operations
[ [ operation-gesture ] keep ] { } map>assoc ;
: define-operation-map ( class group blurb object hook translator -- )

View File

@ -139,7 +139,7 @@ M: polygon draw-interior
: <polygon-gadget> ( color points -- gadget )
dup max-dim
>r <polygon> <gadget> r> >>dim
[ (>>interior) ] keep ;
swap >>interior ;
! Font rendering
SYMBOL: font-renderer

View File

@ -20,11 +20,11 @@ TUPLE: browser-gadget < track pane history ;
"handbook" >link <history> >>history drop ;
: <browser-gadget> ( -- gadget )
{ 0 1 } browser-gadget new-track
dup init-history
dup <toolbar> f track-add
dup <help-pane> >>pane
dup pane>> <scroller> 1 track-add ;
{ 0 1 } browser-gadget new-track
dup init-history
dup <toolbar> f track-add
dup <help-pane> >>pane
dup pane>> <scroller> 1 track-add ;
M: browser-gadget call-tool* show-help ;

View File

@ -42,8 +42,8 @@ TUPLE: deploy-gadget < pack vocab settings ;
deploy-c-types? get "Retain all C types" <checkbox> add-gadget ;
: deploy-settings-theme ( gadget -- gadget )
{ 10 10 } >>gap
1 >>fill ;
{ 10 10 } >>gap
1 >>fill ;
: <deploy-settings> ( vocab -- control )
default-config [ <model> ] assoc-map
@ -57,7 +57,7 @@ TUPLE: deploy-gadget < pack vocab settings ;
advanced-settings
deploy-settings-theme
namespace <mapping> over (>>model)
namespace <mapping> >>model
]
bind ;

View File

@ -16,10 +16,10 @@ TUPLE: inspector-gadget < track object pane ;
] with-pane ;
: <inspector-gadget> ( -- gadget )
{ 0 1 } inspector-gadget new-track
dup <toolbar> f track-add
<pane> >>pane
dup pane>> <scroller> 1 track-add ;
{ 0 1 } inspector-gadget new-track
dup <toolbar> f track-add
<pane> >>pane
dup pane>> <scroller> 1 track-add ;
: inspect-object ( obj mirror keys inspector -- )
2nip swap >>object refresh ;

View File

@ -13,8 +13,8 @@ IN: ui.tools.listener
TUPLE: listener-gadget < track input output stack ;
: listener-output, ( listener -- listener )
<scrolling-pane> >>output
dup output>> <scroller> "Output" <labelled-gadget> 1 track-add ;
<scrolling-pane> >>output
dup output>> <scroller> "Output" <labelled-gadget> 1 track-add ;
: listener-streams ( listener -- input output )
[ input>> ] [ output>> <pane-stream> ] bi ;
@ -23,11 +23,11 @@ TUPLE: listener-gadget < track input output stack ;
output>> <pane-stream> <interactor> ;
: listener-input, ( listener -- listener )
dup <listener-input> >>input
dup input>>
{ 0 100 } <limited-scroller>
"Input" <labelled-gadget>
f track-add ;
dup <listener-input> >>input
dup input>>
{ 0 100 } <limited-scroller>
"Input" <labelled-gadget>
f track-add ;
: welcome. ( -- )
"If this is your first time with Factor, please read the " print
@ -121,11 +121,10 @@ M: engine-word word-completion-string
TUPLE: stack-display < track ;
: <stack-display> ( workspace -- gadget )
listener>>
{ 0 1 } stack-display new-track
listener>>
{ 0 1 } stack-display new-track
over <toolbar> f track-add
swap
stack>> [ [ stack. ] curry try ] t "Data stack" <labelled-pane>
swap stack>> [ [ stack. ] curry try ] t "Data stack" <labelled-pane>
1 track-add ;
M: stack-display tool-scroller
@ -169,10 +168,10 @@ M: stack-display tool-scroller
f <model> swap (>>stack) ;
: <listener-gadget> ( -- gadget )
{ 0 1 } listener-gadget new-track
dup init-listener
listener-output,
listener-input, ;
{ 0 1 } listener-gadget new-track
dup init-listener
listener-output,
listener-input, ;
: listener-help ( -- ) "ui-listener" help-window ;

View File

@ -8,10 +8,10 @@ IN: ui.tools.profiler
TUPLE: profiler-gadget < track pane ;
: <profiler-gadget> ( -- gadget )
{ 0 1 } profiler-gadget new-track
dup <toolbar> f track-add
<pane> >>pane
dup pane>> <scroller> 1 track-add ;
{ 0 1 } profiler-gadget new-track
dup <toolbar> f track-add
<pane> >>pane
dup pane>> <scroller> 1 track-add ;
: with-profiler-pane ( gadget quot -- )
>r pane>> r> with-pane ;

View File

@ -60,15 +60,14 @@ search-field H{
swap <list> ;
: <live-search> ( string seq limited? presenter -- gadget )
{ 0 1 } live-search new-track
<search-field> >>field
dup field>> f track-add
-roll <search-list> >>list
dup list>> <scroller> 1 track-add
swap
over field>> set-editor-string
dup field>> end-of-document ;
{ 0 1 } live-search new-track
<search-field> >>field
dup field>> f track-add
-roll <search-list> >>list
dup list>> <scroller> 1 track-add
swap
over field>> set-editor-string
dup field>> end-of-document ;
M: live-search focusable-child* field>> ;

View File

@ -7,7 +7,7 @@ IN: ui.tools.tests
[ f ]
[
<gadget> 0 <model> >>model <workspace-tabs> children>> empty?
<gadget> 0 <model> >>model <workspace-tabs> children>> empty?
] unit-test
[ ] [ <workspace> "w" set ] unit-test

View File

@ -13,35 +13,30 @@ mirrors ;
IN: ui.tools
: <workspace-tabs> ( workspace -- tabs )
model>>
"tool-switching" workspace command-map commands>>
[ command-string ] { } assoc>map <enum> >alist
<toggle-buttons> ;
model>>
"tool-switching" workspace command-map commands>>
[ command-string ] { } assoc>map <enum> >alist
<toggle-buttons> ;
: <workspace-book> ( workspace -- gadget )
dup
<stack-display>
<browser-gadget>
<inspector-gadget>
<profiler-gadget>
4array
swap model>>
<book> ;
dup
<stack-display>
<browser-gadget>
<inspector-gadget>
<profiler-gadget>
4array
swap model>> <book> ;
: <workspace> ( -- workspace )
{ 0 1 } workspace new-track
{ 0 1 } workspace new-track
0 <model> >>model
<listener-gadget> >>listener
dup <workspace-book> >>book
0 <model> >>model
<listener-gadget> >>listener
dup <workspace-book> >>book
dup <workspace-tabs> f track-add
dup book>> 1/5 track-add
dup listener>> 4/5 track-add
dup <toolbar> f track-add ;
dup <workspace-tabs> f track-add
dup book>> 1/5 track-add
dup listener>> 4/5 track-add
dup <toolbar> f track-add ;
: resize-workspace ( workspace -- )
dup sizes>> over control-value zero? [

View File

@ -25,14 +25,14 @@ TUPLE: traceback-gadget < track ;
M: traceback-gadget pref-dim* drop { 550 600 } ;
: <traceback-gadget> ( model -- gadget )
{ 0 1 } traceback-gadget new-track
swap >>model
{ 0 1 } traceback-gadget new-track
swap >>model
dup model>>
{ 1 0 } <track>
over <datastack-display> 1/2 track-add
swap <retainstack-display> 1/2 track-add
1/3 track-add
{ 1 0 } <track>
over <datastack-display> 1/2 track-add
swap <retainstack-display> 1/2 track-add
1/3 track-add
dup model>> <callstack-display> 2/3 track-add

View File

@ -26,7 +26,7 @@ GENERIC: tool-scroller ( tool -- scroller )
M: gadget tool-scroller drop f ;
: find-tool ( class workspace -- index tool )
book>> children>> [ class eq? ] with find ;
book>> children>> [ class eq? ] with find ;
: show-tool ( class workspace -- tool )
[ find-tool swap ] keep book>> model>>
@ -55,15 +55,15 @@ M: gadget tool-scroller drop f ;
article-title open-window ;
: hide-popup ( workspace -- )
dup popup>> track-remove
f >>popup
request-focus ;
dup popup>> track-remove
f >>popup
request-focus ;
: show-popup ( gadget workspace -- )
dup hide-popup
over >>popup
over f track-add drop
request-focus ;
dup hide-popup
over >>popup
over f track-add drop
request-focus ;
: show-titled-popup ( workspace gadget title -- )
[ find-workspace hide-popup ] <closable-gadget>

View File

@ -51,12 +51,12 @@ SYMBOL: stop-after-last-window?
T{ gain-focus } swap each-gesture ;
: focus-world ( world -- )
t over (>>focused?)
t >>focused?
dup raised-window
focus-path f focus-gestures ;
: unfocus-world ( world -- )
f over (>>focused?)
f >>focused?
focus-path f swap focus-gestures ;
M: world graft*
@ -93,13 +93,8 @@ SYMBOL: ui-hook
dup graft-state>> {
{ { f f } [ ] }
{ { f t } [ ] }
{ { t t } [
{ f f } over (>>graft-state)
] }
{ { t f } [
dup unqueue-graft
{ f f } over (>>graft-state)
] }
{ { t t } [ { f f } >>graft-state ] }
{ { t f } [ dup unqueue-graft { f f } >>graft-state ] }
} case graft-later ;
: restore-gadget ( gadget -- )
@ -172,7 +167,7 @@ SYMBOL: ui-thread
"UI update" spawn drop ;
: open-world-window ( world -- )
dup pref-dim over (>>dim) dup relayout graft ;
dup pref-dim >>dim dup relayout graft ;
: open-window ( gadget title -- )
f <world> open-world-window ;

View File

@ -21,8 +21,8 @@ C: <x11-handle> x11-handle
M: world expose-event nip relayout ;
M: world configure-event
over configured-loc over (>>window-loc)
swap configured-dim over (>>dim)
over configured-loc >>window-loc
swap configured-dim >>dim
! In case dimensions didn't change
relayout-1 ;