diff --git a/basis/ui/gadgets/gadgets.factor b/basis/ui/gadgets/gadgets.factor index ffcd2ac1a5..e508aa59c2 100644 --- a/basis/ui/gadgets/gadgets.factor +++ b/basis/ui/gadgets/gadgets.factor @@ -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 diff --git a/basis/ui/gadgets/tracks/tracks-tests.factor b/basis/ui/gadgets/tracks/tracks-tests.factor index 9abe70bfaa..844cb375d1 100644 --- a/basis/ui/gadgets/tracks/tracks-tests.factor +++ b/basis/ui/gadgets/tracks/tracks-tests.factor @@ -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 \ No newline at end of file + "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 \ No newline at end of file diff --git a/basis/ui/gadgets/tracks/tracks.factor b/basis/ui/gadgets/tracks/tracks.factor index bf86c7f34e..92268690ac 100644 --- a/basis/ui/gadgets/tracks/tracks.factor +++ b/basis/ui/gadgets/tracks/tracks.factor @@ -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 ;