From 038b4c597c12f2599d0d0270ec087f965d44c4f0 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 18 Feb 2009 17:32:46 -0600 Subject: [PATCH] Remove track-remove, and make ui.gadgets:unparent extensible; add a test --- basis/ui/gadgets/gadgets.factor | 22 ++++++++++---------- basis/ui/gadgets/tracks/tracks-tests.factor | 23 +++++++++++++++------ basis/ui/gadgets/tracks/tracks.factor | 9 ++------ 3 files changed, 30 insertions(+), 24 deletions(-) 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 ; > [ dim>> ] map ] bi ] unit-test -[ V{ { 10 10 } { 10 35 } { 10 10 } { 10 35 } { 10 10 } } ] [ +[ ] [ vertical 0 >>fill { 10 10 } >>dim f track-add - { 10 10 } >>dim 1/2 track-add - { 10 10 } >>dim f track-add + { 10 10 } >>dim dup "g1" set 1/2 track-add + { 10 10 } >>dim dup "g2" set f track-add { 10 10 } >>dim 1/2 track-add { 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 ;