[Clam-devel] TypedConrols questions -- was: <something very long>
Pau Arumí
parumi at iua.upf.edu
Thu Jul 17 10:56:47 PDT 2008
> My previously mentioned mail:
>
> Hi all,
>
> On Fri, Jul 11, 2008 at 3:12 PM, Francisco Tufró <nictuku at gmail.com> wrote:
> > Hi, I've been trying to do the migration to TypedControls and we've some
> > problems.
> > Since the *ControlRegistry now is defined as std::list<BaseTyped*Control*>
> > the functions Get() and GetByNumber now return a BaseTyped*Control instead
> > of a *Control.
> > The same is happening with Get*Controls() which now returns a list<Base..>
> > instead of a list<*Control *>
> > So, every single code line using Get*Controls as well as Get() and
> > GetByNumber() has to be replaced.
> > As Pau proposed i wrote the function that connected a In to a temporary out
> > and sends the value, but that was just one of the appearances of the
> > problem.
> [snip]
> > - For the already known problem (the one of this thread) i wrote the
> > following function
> > (i made also a version where an int is passed instead of the name, but is
> > essentially the same, for those places where GetByNumber was used):
> > void SendFloatToInControl(Processing & receiver, const std::string &
> > inControlName, float value){
> > TypedOutControl<float> controlSender;
> > controlSender.AddLink(receiver.GetInControls().Get(inControlName));
> > controlSender.SendControl(value);
> > }
>
> > I tried to solve every one of these problems with the better solution i
> > thought, now i present these solutions:
>
> I'll reorder the problems you exposed and proposed solutions:
>
> > Those functiones were used in other circumstances:
> > - Assignations: MIDIIO/MIDIKeyboard.cxx: OutControl& outVelocity =
> > mNoteIn.GetOutControls().GetByNumber(2);
>
> > The first i had to do a static cast, i don't like this solution, but the
> > code needs to be rewritten to avoid it, this happends also in NetworkEditor
> > and Annotator.
>
> This seems the more ugly...
First, avoid "static" casts. "dynamic" casts are preferable.
We could do the casts, or encapsulate the ugliness in a function.
OutControl & outVelocity = getOutControlAsFloatControl(mNoteIn, 2)
Note this is very similar to another shortcut function I proposed (it
was something like sendFloatControl(...)
>
> > - To access in controls defined in parent classes:
> > SpectralSpread.hxx:
> > GetInControl("Amount").DoControl(100);
>
> > The second was solved with this function also, but passed *this as argument.
>
> ok, but if controls are protected (or public) i think you can use the
> var name instead (like third case) and if not, i think they should...
The GetInControl(..) interface is public regardless if the control
member is public or not.
The solution of using the function and "*this" is nice.
>
> > - also (don't know why) in the Initialization function of some processings
> > (where the controls were accesible by its own variable name, but anyways
> > they were referenced with Get*Controls:
> > FrameTransformation.hxx:
> > GetInControl("Amount").DoControl(0.);
>
> > The third was solved replacing the lines using the variable name.
>
> ok for me.
Ok++
>
> > Another of these problems was that GetInControl was used to ask for
> > GetLastValue of an InControl, for this i wrote:
> > float GetFloatFromInControl(Processing & proc, const std::string &
> > inControlName){
> > InControl& in = (InControl&)(proc.GetInControl(inControlName));
> > return in.GetLastValue();
> > }
> > This needed a typecast, but static. I'm not so sure about this solution.
> > This was needed in the SMSDeesser lines 44-47.
>
> ok
Ok++, but dynamic_cast<InControl&> please
>
> > Also there were some places that used GetOutControl to do a SendControl,
> > with these i used this function:
> >
> > void SendFloatToOutControl(Processing & sender, int inControlIndex,
> > float value){
> > OutControl& out =
> > (OutControl&)(sender.GetOutControls().GetByNumber(inControlIndex));
> > out.SendControl(value);
> > }
> > Again, a cast was needed, used in MIDIInControl.hxx.
>
> ok
Idem
Hope that helps. Sorry for not answering earlier.
P
More information about the clam-devel
mailing list