Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30216
Modified Files: Tag: desiredata desire.c Log Message: unedited objects keep the same index. this fixes a bug that was bungling wires big time.
Index: desire.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/Attic/desire.c,v retrieving revision 1.1.2.217.2.202 retrieving revision 1.1.2.217.2.203 diff -C2 -d -r1.1.2.217.2.202 -r1.1.2.217.2.203 *** desire.c 12 Aug 2007 01:16:06 -0000 1.1.2.217.2.202 --- desire.c 12 Aug 2007 02:40:00 -0000 1.1.2.217.2.203 *************** *** 1201,1237 **** }
- /* save the connections from/to an object and stuff */ - static t_binbuf *canvas_stowconnections(t_canvas *x, t_gobj *o) { - t_gobj *selhead = 0, *seltail = 0, *nonhead = 0, *nontail = 0; - /* split list to "selected" and "unselected" parts */ - for (t_gobj *y2,*y = x->list; y; y = y2) { - y2 = y->g_next; - if (y==o) { - if (seltail) {seltail->g_next = y; seltail = y; y->g_next = 0;} - else {selhead = seltail = y; seltail->g_next = 0;} - } else { - if (nontail) {nontail->g_next = y; nontail = y; y->g_next = 0;} - else {nonhead = nontail = y; nontail->g_next = 0;} - } - } - /* move the selected part to the end */ - if (!nonhead) x->list = selhead; else {x->list = nonhead; nontail->g_next = selhead;} - /* add connections to binbuf */ - t_binbuf *buf = binbuf_new(); - canvas_wires_each(oc,t,x) { - if ((o==t.from) != (o==t.to)) - binbuf_addv(buf,"ttiiii;","#X","connect", - canvas_getindex(x, t.from), t.outlet, - canvas_getindex(x, t.to), t.inlet); - } - return buf; - } - - static void canvas_restoreconnections(t_canvas *x, t_binbuf *buf) { - pd_bind(x,gensym("#X")); - binbuf_eval(buf,0,0,0); - pd_unbind(x,gensym("#X")); - } - extern t_class *text_class; extern t_class *dummy_class; --- 1201,1204 ---- *************** *** 2193,2196 **** --- 2160,2166 ---- //{std::ostringstream s; s<<"disorder:"; for (int i=0; i<n; i++) s<<" "<<vec[i]->x; post("%s",s.str().data());}
+ void obj_moveinletfirst(t_object *x, t_inlet *i); + void obj_moveoutletfirst(t_object *x, t_outlet *o); + static void canvas_resortinlets(t_canvas *x) { int n=0; canvas_each(y,x) if (y->_class==vinlet_class) n++; *************** *** 5594,5597 **** --- 5564,5581 ---- }
+ static t_binbuf *canvas_cut_wires(t_canvas *x, t_gobj *o) { + t_binbuf *buf = binbuf_new(); + canvas_wires_each(oc,t,x) { + if ((o==t.from) != (o==t.to)) + binbuf_addv(buf,"ttiiii;","#X","connect", t.from->dix->index, t.outlet, t.to->dix->index, t.inlet); + } + return buf; + } + static void canvas_paste_wires(t_canvas *x, t_binbuf *buf) { + pd_bind(x,gensym("#X")); + binbuf_eval(buf,0,0,0); + pd_unbind(x,gensym("#X")); + } + static void text_setto(t_text *x, t_canvas *canvas, char *buf, int bufsize) { if (x->_class == message_class || x->_class == gatom_class || x->_class == text_class) { *************** *** 5612,5626 **** binbuf_free(x->binbuf); x->binbuf = b; ! /* fake object creation, for simplicity of client */ ! pd_set_newest(x); } else { int xwas=x->x, ywas=x->y; ! t_binbuf *buf = canvas_stowconnections(canvas_getcanvas(canvas),x); canvas_delete(canvas,x); canvas_objtext(canvas, xwas, ywas, 0, b); ! /* if it's an abstraction loadbang it here */ ! if (newest && pd_class(newest) == canvas_class) canvas_loadbang((t_canvas *)newest); t_pd *backup = newest; ! canvas_restoreconnections(canvas_getcanvas(canvas), buf); newest = backup; } --- 5596,5611 ---- binbuf_free(x->binbuf); x->binbuf = b; ! pd_set_newest(x); /* fake object creation, for simplicity of client */ } else { int xwas=x->x, ywas=x->y; ! int backupi = x->dix->index; ! t_binbuf *buf = canvas_cut_wires(canvas_getcanvas(canvas),x); canvas_delete(canvas,x); canvas_objtext(canvas, xwas, ywas, 0, b); ! ((t_gobj *)newest)->dix->index = backupi; ! canvas->next_o_index--; t_pd *backup = newest; ! if (newest && pd_class(newest) == canvas_class) canvas_loadbang((t_canvas *)newest); ! canvas_paste_wires(canvas_getcanvas(canvas), buf); newest = backup; }