Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31353
Modified Files: Tag: devel_0_39 desire.c Log Message: deleted another 500 lines.
Index: desire.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/Attic/desire.c,v retrieving revision 1.1.2.113 retrieving revision 1.1.2.114 diff -C2 -d -r1.1.2.113 -r1.1.2.114 *** desire.c 20 Aug 2006 20:20:19 -0000 1.1.2.113 --- desire.c 20 Aug 2006 20:35:42 -0000 1.1.2.114 *************** *** 923,927 **** t_gobj *y; int dspstate = canvas_suspend_dsp(); - canvas_noundo(x); if (canvas_editing == x) canvas_editing = 0; if (canvas_whichfind == x) canvas_whichfind = 0; --- 923,926 ---- *************** *** 1439,1446 **** static void glist_setlastxy(t_glist *gl, int xval, int yval); static void glist_donewloadbangs(t_glist *x); - static t_binbuf *canvas_docopy(t_canvas *x); - static void canvas_dopaste(t_canvas *x, t_binbuf *b); - static void canvas_paste(t_canvas *x); - static void canvas_clearline(t_canvas *x); static t_binbuf *copy_binbuf; static char *canvas_textcopybuf; --- 1438,1441 ---- *************** *** 1696,1809 **** }
! /* ------------------- support for undo/redo -------------------------- */ ! ! static t_undofn canvas_undo_fn; /* current undo function if any */ ! static int canvas_undo_whatnext; /* whether we can now UNDO or REDO */ ! static void *canvas_undo_buf; /* data private to the undo function */ ! static t_canvas *canvas_undo_canvas; /* which canvas we can undo on */ ! static const char *canvas_undo_name; ! ! void canvas_setundo(t_canvas *x, t_undofn undofn, void *buf, ! const char *name) ! { ! int hadone = 0; ! /* blow away the old undo information. In one special case the ! old undo info is re-used; if so we shouldn't free it here. */ ! if (canvas_undo_fn && canvas_undo_buf && (buf != canvas_undo_buf)) ! { ! (*canvas_undo_fn)(canvas_undo_canvas, canvas_undo_buf, UNDO_FREE); ! hadone = 1; ! } ! canvas_undo_canvas = x; ! canvas_undo_fn = undofn; ! canvas_undo_buf = buf; ! canvas_undo_whatnext = UNDO_UNDO; ! canvas_undo_name = name; ! if (x && glist_isvisible(x) && glist_istoplevel(x)) ! /* enable undo in menu */ ! sys_vgui("pdtk_undomenu .x%lx %s no\n", (long)x, name); ! else if (hadone) ! sys_vgui("pdtk_undomenu nobody no no\n"); ! } ! ! /* clear undo if it happens to be for the canvas x. ! (but if x is 0, clear it regardless of who owns it.) */ ! void canvas_noundo(t_canvas *x) ! { ! if (!x || (x == canvas_undo_canvas)) ! canvas_setundo(0, 0, 0, "foo"); ! } ! ! static void canvas_undo(t_canvas *x) ! { ! if (x != canvas_undo_canvas) ! bug("canvas_undo 1"); ! else if (canvas_undo_whatnext != UNDO_UNDO) ! bug("canvas_undo 2"); ! else ! { ! /* post("undo"); */ ! (*canvas_undo_fn)(canvas_undo_canvas, canvas_undo_buf, UNDO_UNDO); ! /* enable redo in menu */ ! if (glist_isvisible(x) && glist_istoplevel(x)) ! sys_vgui("pdtk_undomenu .x%lx no %s\n", (long)x, canvas_undo_name); ! canvas_undo_whatnext = UNDO_REDO; ! } ! } ! ! static void canvas_redo(t_canvas *x) ! { ! if (x != canvas_undo_canvas) ! bug("canvas_undo 1"); ! else if (canvas_undo_whatnext != UNDO_REDO) ! bug("canvas_undo 2"); ! else ! { ! /* post("redo"); */ ! (*canvas_undo_fn)(canvas_undo_canvas, canvas_undo_buf, UNDO_REDO); ! /* enable undo in menu */ ! if (glist_isvisible(x) && glist_istoplevel(x)) ! sys_vgui("pdtk_undomenu .x%lx %s no\n", (long)x, canvas_undo_name); ! canvas_undo_whatnext = UNDO_UNDO; ! } ! } ! ! /* ------- specific undo methods: 1. connect and disconnect -------- */ ! ! typedef struct _undo_connect ! { ! int u_index1; ! int u_outletno; ! int u_index2; ! int u_inletno; ! } t_undo_connect; ! ! static void *canvas_undo_set_disconnect(t_canvas *x, ! int index1, int outno, int index2, int inno) ! { ! t_undo_connect *buf = (t_undo_connect *)getbytes(sizeof(*buf)); ! buf->u_index1 = index1; ! buf->u_outletno = outno; ! buf->u_index2 = index2; ! buf->u_inletno = inno; ! return (buf); ! } ! ! void canvas_disconnect(t_canvas *x, ! float index1, float outno, float index2, float inno) ! { t_linetraverser t; t_outconnect *oc; linetraverser_start(&t, x); ! while ((oc = linetraverser_next(&t))) ! { int srcno = canvas_getindex(x, &t.tr_ob->ob_g); int sinkno = canvas_getindex(x, &t.tr_ob2->ob_g); if (srcno == index1 && t.tr_outno == outno && ! sinkno == index2 && t.tr_inno == inno) ! { ! //sys_mgui(oc,"delete",""); ! obj_disconnect(t.tr_ob, t.tr_outno, t.tr_ob2, t.tr_inno); ! break; } } --- 1691,1706 ---- }
! void canvas_disconnect(t_canvas *x, float index1, float outno, float index2, float inno) { t_linetraverser t; t_outconnect *oc; linetraverser_start(&t, x); ! while ((oc = linetraverser_next(&t))) { int srcno = canvas_getindex(x, &t.tr_ob->ob_g); int sinkno = canvas_getindex(x, &t.tr_ob2->ob_g); if (srcno == index1 && t.tr_outno == outno && ! sinkno == index2 && t.tr_inno == inno) { ! //sys_mgui(oc,"delete",""); ! obj_disconnect(t.tr_ob, t.tr_outno, t.tr_ob2, t.tr_inno); ! break; } } *************** *** 1811,2087 **** }
- static void canvas_undo_disconnect(t_canvas *x, void *z, int action) - { - t_undo_connect *buf = (t_undo_connect *)z; - if (action == UNDO_UNDO) - { - canvas_connect(x, buf->u_index1, buf->u_outletno, - buf->u_index2, buf->u_inletno); - } - else if (action == UNDO_REDO) - { - canvas_disconnect(x, buf->u_index1, buf->u_outletno, - buf->u_index2, buf->u_inletno); - } - else if (action == UNDO_FREE) - t_freebytes(buf, sizeof(*buf)); - } - - /* connect just calls disconnect actions backward... */ - static void *canvas_undo_set_connect(t_canvas *x, - int index1, int outno, int index2, int inno) - { - return (canvas_undo_set_disconnect(x, index1, outno, index2, inno)); - } - - static void canvas_undo_connect(t_canvas *x, void *z, int action) - { - int myaction; - if (action == UNDO_UNDO) - myaction = UNDO_REDO; - else if (action == UNDO_REDO) - myaction = UNDO_UNDO; - else myaction = action; - canvas_undo_disconnect(x, z, myaction); - } - - /* ---------- ... 2. cut, clear, and typing into objects: -------- */ - - #define UCUT_CUT 1 /* operation was a cut */ - #define UCUT_CLEAR 2 /* .. a clear */ - #define UCUT_TEXT 3 /* text typed into a box */ - - typedef struct _undo_cut - { - t_binbuf *u_objectbuf; /* the object cleared or typed into */ - t_binbuf *u_reconnectbuf; /* connections into and out of object */ - t_binbuf *u_redotextbuf; /* buffer to paste back for redo if TEXT */ - int u_mode; /* from flags above */ - } t_undo_cut; - - static void *canvas_undo_set_cut(t_canvas *x, int mode) - { - t_undo_cut *buf; - t_linetraverser t; - t_outconnect *oc; - int nnotsel= glist_selectionindex(x, 0, 0); - buf = (t_undo_cut *)getbytes(sizeof(*buf)); - buf->u_mode = mode; - buf->u_redotextbuf = 0; - - /* store connections into/out of the selection */ - buf->u_reconnectbuf = binbuf_new(); - linetraverser_start(&t, x); - while ((oc = linetraverser_next(&t))) - { - int issel1 = glist_isselected(x, &t.tr_ob->ob_g); - int issel2 = glist_isselected(x, &t.tr_ob2->ob_g); - if (issel1 != issel2) - { - binbuf_addv(buf->u_reconnectbuf, "ssiiii;", - gensym("#X"), gensym("connect"), - (issel1 ? nnotsel : 0) - + glist_selectionindex(x, &t.tr_ob->ob_g, issel1), - t.tr_outno, - (issel2 ? nnotsel : 0) + - glist_selectionindex(x, &t.tr_ob2->ob_g, issel2), - t.tr_inno); - } - } - if (mode == UCUT_TEXT) - { - buf->u_objectbuf = canvas_docopy(x); - } - else if (mode == UCUT_CUT) - { - buf->u_objectbuf = 0; - } - else if (mode == UCUT_CLEAR) - { - buf->u_objectbuf = canvas_docopy(x); - } - return (buf); - } - - static void canvas_undo_cut(t_canvas *x, void *z, int action) - { - t_undo_cut *buf = (t_undo_cut *)z; - int mode = buf->u_mode; - if (action == UNDO_UNDO) - { - if (mode == UCUT_CUT) - canvas_dopaste(x, copy_binbuf); - else if (mode == UCUT_CLEAR) - canvas_dopaste(x, buf->u_objectbuf); - else if (mode == UCUT_TEXT) - { - t_gobj *y1, *y2; - glist_noselect(x); - for (y1 = x->gl_list; (y2 = y1->g_next); y1 = y2) - ; - if (y1) - { - if (!buf->u_redotextbuf) - { - glist_noselect(x); - glist_select(x, y1); - buf->u_redotextbuf = canvas_docopy(x); - glist_noselect(x); - } - glist_delete(x, y1); - } - canvas_dopaste(x, buf->u_objectbuf); - } - pd_bind(&x->gl_pd, gensym("#X")); - binbuf_eval(buf->u_reconnectbuf, 0, 0, 0); - pd_unbind(&x->gl_pd, gensym("#X")); - } - else if (action == UNDO_REDO) - { - if (mode == UCUT_CUT || mode == UCUT_CLEAR) - canvas_doclear(x); - else if (mode == UCUT_TEXT) - { - t_gobj *y1, *y2; - for (y1 = x->gl_list; (y2 = y1->g_next); y1 = y2) - ; - if (y1) - glist_delete(x, y1); - canvas_dopaste(x, buf->u_redotextbuf); - pd_bind(&x->gl_pd, gensym("#X")); - binbuf_eval(buf->u_reconnectbuf, 0, 0, 0); - pd_unbind(&x->gl_pd, gensym("#X")); - } - } - else if (action == UNDO_FREE) - { - if (buf->u_objectbuf) - binbuf_free(buf->u_objectbuf); - if (buf->u_reconnectbuf) - binbuf_free(buf->u_reconnectbuf); - if (buf->u_redotextbuf) - binbuf_free(buf->u_redotextbuf); - t_freebytes(buf, sizeof(*buf)); - } - } - - /* --------- 3. motion, including "tidy up" and stretching ----------- */ - - typedef struct _undo_move_elem - { - int e_index; - int e_xpix; - int e_ypix; - } t_undo_move_elem; - - typedef struct _undo_move - { - t_undo_move_elem *u_vec; - int u_n; - } t_undo_move; - - static int canvas_undo_already_set_move; - - static void *canvas_undo_set_move(t_canvas *x, int selected) - { - int x1, y1, x2, y2, i, indx; - t_gobj *y; - t_undo_move *buf = (t_undo_move *)getbytes(sizeof(*buf)); - buf->u_n = selected ? glist_selectionindex(x, 0, 1) : glist_getindex(x, 0); - buf->u_vec = (t_undo_move_elem *)getbytes(sizeof(*buf->u_vec) * - (selected ? glist_selectionindex(x, 0, 1) : glist_getindex(x, 0))); - if (selected) - { - for (y = x->gl_list, i = indx = 0; y; y = y->g_next, indx++) - if (glist_isselected(x, y)) - { - gobj_getrect(y, x, &x1, &y1, &x2, &y2); - buf->u_vec[i].e_index = indx; - buf->u_vec[i].e_xpix = x1; - buf->u_vec[i].e_ypix = y1; - i++; - } - } - else - { - for (y = x->gl_list, indx = 0; y; y = y->g_next, indx++) - { - gobj_getrect(y, x, &x1, &y1, &x2, &y2); - buf->u_vec[indx].e_index = indx; - buf->u_vec[indx].e_xpix = x1; - buf->u_vec[indx].e_ypix = y1; - } - } - canvas_undo_already_set_move = 1; - return (buf); - } - - static void canvas_undo_move(t_canvas *x, void *z, int action) - { - t_undo_move *buf = (t_undo_move *)z; - if (action == UNDO_UNDO || action == UNDO_REDO) - { - int i; - for (i = 0; i < buf->u_n; i++) - { - int x1, y1, x2, y2, newx, newy; - t_gobj *y; - newx = buf->u_vec[i].e_xpix; - newy = buf->u_vec[i].e_ypix; - y = glist_nth(x, buf->u_vec[i].e_index); - if (y) - { - gobj_getrect(y, x, &x1, &y1, &x2, &y2); - gobj_displace(y, x, newx-x1, newy - y1); - buf->u_vec[i].e_xpix = x1; - buf->u_vec[i].e_ypix = y1; - } - } - } - else if (action == UNDO_FREE) - { - t_freebytes(buf->u_vec, buf->u_n * sizeof(*buf->u_vec)); - t_freebytes(buf, sizeof(*buf)); - } - } - - /* --------- 4. paste (also duplicate) ----------- */ - - typedef struct _undo_paste - { - int u_index; /* index of first object pasted */ - } t_undo_paste; - - static void *canvas_undo_set_paste(t_canvas *x) - { - t_undo_paste *buf = (t_undo_paste *)getbytes(sizeof(*buf)); - buf->u_index = glist_getindex(x, 0); - return (buf); - } - - static void canvas_undo_paste(t_canvas *x, void *z, int action) - { - t_undo_paste *buf = (t_undo_paste *)z; - if (action == UNDO_UNDO) - { - t_gobj *y; - glist_noselect(x); - for (y = glist_nth(x, buf->u_index); y; y = y->g_next) - glist_select(x, y); - canvas_doclear(x); - } - else if (action == UNDO_REDO) - { - t_selection *sel; - canvas_dopaste(x, copy_binbuf); - /* if it was "duplicate" have to re-enact the displacement. */ - if (canvas_undo_name && canvas_undo_name[0] == 'd') - for (sel = x->gl_editor->e_selection; sel; sel = sel->sel_next) - gobj_displace(sel->sel_what, x, 10, 10); - } - else if (action == UNDO_FREE) - t_freebytes(buf, sizeof(*buf)); - } - /* recursively check for abstractions to reload as result of a save. Don't reload the one we just saved ("except") though. */ --- 1708,1711 ---- *************** *** 2109,2116 **** glist_noselect(gl); glist_select(gl, g); - canvas_setundo(gl, canvas_undo_cut, - canvas_undo_set_cut(gl, UCUT_CLEAR), "clear"); canvas_doclear(gl); ! canvas_undo(gl); glist_noselect(gl); g = glist_nth(gl, j); --- 1733,1738 ---- glist_noselect(gl); glist_select(gl, g); canvas_doclear(gl); ! /*FIXME (gl); */ glist_noselect(gl); g = glist_nth(gl, j); *************** *** 2616,2662 **** }
- static t_binbuf *canvas_docopy(t_canvas *x) - { - t_gobj *y; - t_linetraverser t; - t_outconnect *oc; - t_binbuf *b = binbuf_new(); - for (y = x->gl_list; y; y = y->g_next) - { - if (glist_isselected(x, y)) - gobj_save(y, b); - } - linetraverser_start(&t, x); - while ((oc = linetraverser_next(&t))) - { - if (glist_isselected(x, &t.tr_ob->ob_g) - && glist_isselected(x, &t.tr_ob2->ob_g)) - { - binbuf_addv(b, "ssiiii;", gensym("#X"), gensym("connect"), - glist_selectionindex(x, &t.tr_ob->ob_g, 1), t.tr_outno, - glist_selectionindex(x, &t.tr_ob2->ob_g, 1), t.tr_inno); - } - } - return (b); - } - - static void canvas_clearline(t_canvas *x) - { - if (x->gl_editor->e_selectedline) - { - canvas_disconnect(x, x->gl_editor->e_selectline_index1, - x->gl_editor->e_selectline_outno, - x->gl_editor->e_selectline_index2, - x->gl_editor->e_selectline_inno); - canvas_setundo(x, canvas_undo_disconnect, - canvas_undo_set_disconnect(x, - x->gl_editor->e_selectline_index1, - x->gl_editor->e_selectline_outno, - x->gl_editor->e_selectline_index2, - x->gl_editor->e_selectline_inno), - "disconnect"); - } - } - extern t_pd *newest; static void canvas_doclear(t_canvas *x) --- 2238,2241 ---- *************** *** 2672,2682 **** x->gl_editor->e_selectline_index2, x->gl_editor->e_selectline_inno); - canvas_setundo(x, canvas_undo_disconnect, - canvas_undo_set_disconnect(x, - x->gl_editor->e_selectline_index1, - x->gl_editor->e_selectline_outno, - x->gl_editor->e_selectline_index2, - x->gl_editor->e_selectline_inno), - "disconnect"); } /* if text is selected, deselecting it might remake the --- 2251,2254 ---- *************** *** 2730,2799 **** }
- static void canvas_dopaste(t_canvas *x, t_binbuf *b) - { - t_gobj *g2; - int dspstate = canvas_suspend_dsp(), nbox, count; - - canvas_editmode(x, 1.); - glist_noselect(x); - for (g2 = x->gl_list, nbox = 0; g2; g2 = g2->g_next) nbox++; - - paste_onset = nbox; - paste_canvas = x; - - pd_bind(&x->gl_pd, gensym("#X")); - binbuf_eval(b, 0, 0, 0); - pd_unbind(&x->gl_pd, gensym("#X")); - for (g2 = x->gl_list, count = 0; g2; g2 = g2->g_next, count++) - if (count >= nbox) - glist_select(x, g2); - paste_canvas = 0; - canvas_resume_dsp(dspstate); - canvas_dirty(x, 1); - sys_mgui(x,"getscroll",""); - glist_donewloadbangs(x); - } - - static void canvas_paste(t_canvas *x) - { - if (!x->gl_editor) - return; - if (x->gl_editor->e_textedfor) - { - /* simulate keystrokes as if the copy buffer were typed in. */ - #ifdef UNIX - /* in UNIX we kept the text in our own copy buffer */ - int i; - for (i = 0; i < canvas_textcopybufsize; i++) - { - pd_vmess(&x->gl_gobj.g_pd, gensym("key"), "iii", - 1, canvas_textcopybuf[i]&0xff, 0); - } - #else /* UNIX */ - /* otherwise appeal to the GUI to send the clipboard down */ - sys_gui("pdtk_pastetext\n"); - #endif /* UNIX */ - - } - else - { - canvas_setundo(x, canvas_undo_paste, canvas_undo_set_paste(x), - "paste"); - canvas_dopaste(x, copy_binbuf); - } - } - - static void canvas_selectall(t_canvas *x) - { - t_gobj *y; - if (!x->gl_edit) - canvas_editmode(x, 1); - for (y = x->gl_list; y; y = y->g_next) - { - if (!glist_isselected(x, y)) - glist_select(x, y); - } - } - extern t_class *text_class;
--- 2302,2305 ---- *************** *** 2862,2868 **** int all = (x->gl_editor ? (x->gl_editor->e_selection == 0) : 1);
- canvas_setundo(x, canvas_undo_move, canvas_undo_set_move(x, !all), - "motion"); - /* tidy horizontally */ for (y = x->gl_list; y; y = y->g_next) --- 2368,2371 ---- *************** *** 2992,2997 **** if (xresize != 1 || yresize != 1) { - canvas_setundo(x, canvas_undo_move, canvas_undo_set_move(x, 0), - "motion"); for (y = x->gl_list; y; y = y->g_next) { --- 2495,2498 ---- *************** *** 12215,12221 ****
/* should die: */ - class_addmethod3(c,canvas_selectall,"selectall",""); - class_addmethod3(c,canvas_undo, "undo",""); - class_addmethod3(c,canvas_redo, "redo",""); class_addmethod3(c,canvas_tidy, "tidy",""); class_addmethod3(c,canvas_texteditor,"texteditor",""); --- 11716,11719 ----