/* 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"); }
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); }
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"); }
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"); }
/* 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"); }
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; } } } }