[racket] How to use reparent - no such method: adopt-child for class

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Tue Apr 3 19:59:23 EDT 2012

It's a bug in `pane%' classes. You can work around the problem by using
a `panel%' class, instead, but I'll push a repair.

At Tue, 3 Apr 2012 20:42:49 +0200, Jens Axel Søgaard wrote:
> Hi All,
> 
> My attempt to implement a slider with snapable values, ticks and
> keyboard + and -
> is almost done. The basic slider functionality works.
> 
> This will create a slider, where with ticks at 0, 10, ... ,
> And the user can only select values from 0.0, 12.5, ... .
> 
> (define basic-slider
>   (new basic-slider%
>        [parent frame]
>        [tick-values    (list 0 10 20 30 40 50 60 70 80 90 100)]
>        [snap-values  (list 0.0 12.5 25.0 37.5 50.0 62.5 75.0 87.5 100.0))]
>        [init-value 20.0]))
> 
> The basic-slider% is implemented as a subclass of canvas% implementing
> the control<%> interface.
> 
> The builtin slider% supports a label to the left of the actual slider.
> 
> I therefore attempted to make a new class that within
> a horizontal pane would hold both a message for the label
> and the basic-slider. In order to this I tried to use reparent,
> but got the error message
> 
> send: no such method: adopt-child for class: .../private/wxpanel.rkt:723:4
> 
> (define basic-slider-with-label%
>   (class* basic-slider% (control<%>)
>     (init parent)
>     (define pane (new horizontal-pane% [parent parent]))
>     (define message (new message% [parent pane] [label "foo"]))
>     (super-new [parent pane])
>     (send this reparent pane)
>     (new message% [parent pane] [label "bar"])))
> 
> I suspect this is a bug?
> 
> However, I might not need reparent at all.
> Is there a better way to add the message to the left of the
> basic slider?
> 
> -- 
> Jens Axel Søgaard
> 
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users


Posted on the users mailing list.