示例#1
0
    /* just forward any messages to the garray */
static void array_define_anything(t_glist *x,
    t_symbol *s, int argc, t_atom *argv)
{
    t_glist *gl = (x->gl_list ? pd_checkglist(&x->gl_list->g_pd) : 0);
    if (gl && gl->gl_list && pd_class(&gl->gl_list->g_pd) == garray_class)
        typedmess(&gl->gl_list->g_pd, s, argc, argv);
    else bug("array_define_anything");
}
示例#2
0
void array_define_save(t_gobj *z, t_binbuf *bb)
{
    t_glist *x = (t_glist *)z;
    t_glist *gl = (x->gl_list ? pd_checkglist(&x->gl_list->g_pd) : 0);
    binbuf_addv(bb, "ssff", &s__X, gensym("obj"),
        (float)x->gl_obj.te_xpix, (float)x->gl_obj.te_ypix);
    binbuf_addbinbuf(bb, x->gl_obj.ob_binbuf);
    binbuf_addsemi(bb);

    garray_savecontentsto((t_garray *)gl->gl_list, bb);
    obj_saveformat(&x->gl_obj, bb);
}
示例#3
0
static void array_define_bang(t_glist *x)
{
    t_glist *gl = (x->gl_list ? pd_checkglist(&x->gl_list->g_pd) : 0);
    if (gl && gl->gl_list && pd_class(&gl->gl_list->g_pd) == garray_class)
    {
        t_gpointer gp;
        gpointer_init(&gp);
        gpointer_setglist(&gp, gl,
            garray_getscalar((t_garray *)gl->gl_list));
        outlet_pointer(x->gl_obj.ob_outlet, &gp);
        gpointer_unset(&gp);
    }
    else bug("array_define_bang");
}
示例#4
0
static void array_define_yrange(t_glist *x, t_floatarg ylo, t_floatarg yhi)
{
    t_glist *gl = (x->gl_list ? pd_checkglist(&x->gl_list->g_pd) : 0);
    if (gl && gl->gl_list && pd_class(&gl->gl_list->g_pd) == garray_class)
    {
        int n = garray_getarray((t_garray *)gl->gl_list)->a_n;
        vmess(&x->gl_list->g_pd, gensym("bounds"),
            "ffff", 0., yhi, (double)(n == 1 ? n : n-1), ylo);
        vmess(&x->gl_list->g_pd, gensym("xlabel"),
            "fff", ylo + glist_pixelstoy(gl, 2) - glist_pixelstoy(gl, 0),
                0., (float)(n-1));
        vmess(&x->gl_list->g_pd, gensym("ylabel"),
            "fff", glist_pixelstox(gl, 0) - glist_pixelstox(gl, 5), ylo, yhi);
    }
    else bug("array_define_yrange");
}
示例#5
0
    /* send a pointer to the scalar that owns this array to
    whomever is bound to the given symbol */
static void array_define_send(t_glist *x, t_symbol *s)
{
    t_glist *gl = (x->gl_list ? pd_checkglist(&x->gl_list->g_pd) : 0);
    if (!s->s_thing)
        pd_error(x, "array_define_send: %s: no such object", s->s_name);
    else if (gl && gl->gl_list && pd_class(&gl->gl_list->g_pd) == garray_class)
    {
        t_gpointer gp;
        gpointer_init(&gp);
        gpointer_setglist(&gp, gl,
            garray_getscalar((t_garray *)gl->gl_list));
        pd_pointer(s->s_thing, &gp);
        gpointer_unset(&gp);
    }
    else bug("array_define_send");
}
示例#6
0
void PdParamGetter::getFromPdCanvas(t_canvas * x,int guiIdx) {
    {

        Rectangle<int> patchRect = guiSizes[guiIdx];
        //        Rectangle<int> region( x->gl_xmargin,x->gl_ymargin,x->gl_xmargin+ x->gl_pixwidth, x->gl_ymargin + x->gl_pixheight);//guiSizes[guiIdx];



        t_gobj * y = x->gl_list;
        for(t_gobj * y2 = y ; y2 ; y2 = y2->g_next) {


            PulpParameterDesc * p = new PulpParameterDesc ;
            p->guiNum = guiIdx;
            p->elements.clear();

            String objName = y2->g_pd->c_name->s_name;
//            DBG(objName);
            int split = objName.indexOfWholeWord("/");
            if(split>0) {
                objName = objName.substring(split, objName.length() - split);
//                DBG(objName);
            }
            bool found = true;
            if(objName=="canvas" ) {
                _glist * gl;
                if((gl = pd_checkglist(&y2->g_pd))) {
                    if(gl->gl_isgraph) {
                        //                        DBGN(gl->gl_env->ce_dir->s_name)
                        //                        DBG2("/",gl->gl_list);
                        getFromPdCanvas(gl, guiIdx);
                    }
                }
                found = false;
            }
            else if(y2->g_pd->c_gobj) {
                if(objName== "hsl") {
                    p->type = PulpParameterDesc::HSL;
                    t_hslider *hsl = (t_hslider *)y2;
                    found = fillIemObj(&hsl->x_gui,y2, p);
                    p->min = hsl->x_min;
                    p->max = hsl->x_max;
                    if(hsl->x_gui.x_isa.x_loadinit) {
                        p->defaultV = (hsl->x_val/100)*hsl->x_k + p->min;
                    }
                }
                else if(objName=="vsl") {
                    p->type = PulpParameterDesc::VSL;
                    t_vslider *vsl = (t_vslider *)y2;
                    found = fillIemObj(&vsl->x_gui,y2, p);
                    p->min = vsl->x_min;
                    p->max = vsl->x_max;
                    if(vsl->x_gui.x_isa.x_loadinit) {
                        p->defaultV = (vsl->x_val/100)*vsl->x_k + p->min;
                    }
                }

                else if(objName== "tgl") {
                    p->type = PulpParameterDesc::TOGGLE;
                    t_toggle *tgl = (t_toggle *)y2;
                    found = fillIemObj(&tgl->x_gui,y2, p);
                    p->min = 0;
                    p->max = 1;
                }
                else if(objName== "bng") {
                    p->type = PulpParameterDesc::BANG;
                    t_bng *tgl = (t_bng *)y2;
                    found = fillIemObj(&tgl->x_gui,y2, p);
                    p->min = 0;
                    p->max = 1;
                }
                else if(objName== "vradio") {
                    p->type = PulpParameterDesc::VRADIO;
                    t_vradio *tgl = (t_vradio *)y2;
                    found = fillIemObj(&tgl->x_gui,y2, p);
                    p->min = 0;
                    p->max = tgl->x_number-1;
                    for(int i = 0 ; i < tgl->x_number ; i++) {
                        p->elements.add(String(i));
                    }
                }
                else if(objName== "hradio") {
                    p->type = PulpParameterDesc::HRADIO;
                    t_hradio *tgl = (t_hradio *)y2;
                    found = fillIemObj(&tgl->x_gui,y2, p);
                    p->min = 0;
                    p->max = tgl->x_number-1;
                    for(int i = 0 ; i < tgl->x_number ; i++) {
                        p->elements.add(String(i));
                    }
                }
                else if(objName== "cnv") {
                    p->type = PulpParameterDesc::CNV;
                    t_my_canvas * cnv = (t_my_canvas*) y2;
                    found = fillIemObj(&cnv->x_gui,y2, p);
                    p->setSize(cnv->x_vis_w, cnv->x_vis_h);

                }
                else if(objName== "popup") {
                    p->type = PulpParameterDesc::POPUP;
                    t_popup * popup = (t_popup *) y2;
                    int x01,y01,x02,y02;
                    gobj_getrect(&popup->x_obj.te_g, x,&x01,&y01,&x02,&y02);
                    p->sendName = popup->x_name->s_name;
                    p->setBounds(  x01,y01,x02-x01,y02-y01);
                    DBG4(x01,y01,x02 ,y02);
                    found = true;
                    //                    found = fillIemObj(;,y2, p);
                    p->setSize(popup->x_width, popup->x_height);

                    for(int i =0 ; i < popup->x_num_options ; i++) {
                        p->elements.add(popup->x_options[i]->s_name);
                    }
                    p->min = 0;
                    p->max =p->elements.size()-1;

                }
                else if(strcmp(y2->g_pd->c_name->s_name, "knob")==0) {
                    p->type = PulpParameterDesc::KNOB;
                    t_knob *knob = (t_knob *)y2;
                    found = fillIemObj(&knob->x_gui,y2, p);
                    p->min = knob->x_min;
                    p->max = knob->x_max;
                }

                else {
//                    DBG("not found " <<objName);
                    found = false;
                }
            }
            if(found ) {
                p->isAudioParameter = p->sendName.startsWith("param");
                p->setBounds((p->getX() )/patchRect.getWidth(),
                             (p->getY() )/patchRect.getHeight(),
                             p->getWidth()/patchRect.getWidth(),
                             p->getHeight()/patchRect.getHeight());
                p->labelRect.setBounds((p->labelRect.getX())/patchRect.getWidth(),
                                       (p->labelRect.getY())/patchRect.getHeight(),
                                       p->labelRect.getWidth()/patchRect.getWidth(),
                                       p->labelRect.getHeight()/patchRect.getHeight());
                p->sendName = resolveDollarzero(p->sendName);
                p->recieveName = resolveDollarzero(p->recieveName);
//                DBGN(y2->g_pd->c_name->s_name << " : ")
//                DBG("adding p " << p->sendName << "/" << p->recieveName <<  " at "<< ((Rectangle<float>)*p).toString());

                if(p->isAudioParameter) {
                    p->processorIdx = localParamCount;
                    localParamCount++;
                }
                else {
                    p->processorIdx = -1;
                }
                p->pdObjectIdx = localObjectCount;
                localObjectCount++;
                pulpParameterDescs.add(p);

            }

            else {

                delete p;

            }



        }
    }

}