Remove track-remove, and make ui.gadgets:unparent extensible; add a test

db4
Slava Pestov 2009-02-18 17:32:46 -06:00
parent cdbad1e0b2
commit 038b4c597c
3 changed files with 30 additions and 24 deletions

View File

@ -293,22 +293,22 @@ PRIVATE>
in-layout? get
[ "Cannot add/remove gadgets in layout*" throw ] when ;
GENERIC: remove-gadget ( gadget parent -- )
M: gadget remove-gadget
over (unparent)
[ unfocus-gadget ]
[ children>> delete ]
[ nip relayout ]
2tri ;
: unparent ( gadget -- )
not-in-layout
[
dup parent>> dup [
over (unparent)
[ unfocus-gadget ] 2keep
[ children>> delete ] keep
relayout
] [
2drop
] if
] when* ;
[ dup parent>> dup [ remove-gadget ] [ 2drop ] if ] when* ;
: clear-gadget ( gadget -- )
not-in-layout
dup (clear-gadget) relayout ;
[ (clear-gadget) ] [ relayout ] bi ;
<PRIVATE

View File

@ -1,5 +1,5 @@
USING: kernel ui.gadgets ui.gadgets.tracks tools.test
math.rectangles accessors sequences ;
math.rectangles accessors sequences namespaces ;
IN: ui.gadgets.tracks.tests
[ { 100 100 } ] [
@ -49,14 +49,25 @@ IN: ui.gadgets.tracks.tests
[ layout ] [ children>> [ dim>> ] map ] bi
] unit-test
[ V{ { 10 10 } { 10 35 } { 10 10 } { 10 35 } { 10 10 } } ] [
[ ] [
vertical <track>
0 >>fill
<gadget> { 10 10 } >>dim f track-add
<gadget> { 10 10 } >>dim 1/2 track-add
<gadget> { 10 10 } >>dim f track-add
<gadget> { 10 10 } >>dim dup "g1" set 1/2 track-add
<gadget> { 10 10 } >>dim dup "g2" set f track-add
<gadget> { 10 10 } >>dim 1/2 track-add
<gadget> { 10 10 } >>dim f track-add
{ 10 100 } >>dim
[ layout ] [ children>> [ dim>> ] map ] bi
] unit-test
"track" set
] unit-test
[ V{ { 10 10 } { 10 35 } { 10 10 } { 10 35 } { 10 10 } } ]
[ "track" get [ layout ] [ children>> [ dim>> ] map ] bi ] unit-test
[ V{ { 10 10 } { 10 80 } { 10 10 } } ] [
"g1" get unparent
"g2" get unparent
"track" get [ layout ] [ children>> [ dim>> ] map ] bi
] unit-test
[ 3 ] [ "track" get sizes>> length ] unit-test

View File

@ -60,12 +60,7 @@ PRIVATE>
: track-add ( track gadget constraint -- track )
pick sizes>> push add-gadget ;
: track-remove ( track gadget -- track )
[ drop ] [
[ swap children>> index ]
[ drop sizes>> ]
[ nip unparent ]
2tri delete-nth
] 2bi ;
M: track remove-gadget
[ [ children>> index ] keep sizes>> delete-nth ] [ call-next-method ] 2bi ;
: clear-track ( track -- ) [ sizes>> delete-all ] [ clear-gadget ] bi ;