From e95b4fb1641854df836798d55a82f8b77d2da560 Mon Sep 17 00:00:00 2001 From: Jonathan Wilkes <jon.w.wilkes@gmail.com> Date: Wed, 10 Feb 2016 23:53:26 -0500 Subject: [PATCH] more work on "Cancel" functionality for iemguis-- selectively set undo point --- pd/nw/dialog_iemgui.html | 22 ++++++++++++++-------- pd/src/g_bang.c | 3 ++- pd/src/g_mycanvas.c | 3 ++- pd/src/g_numbox.c | 3 ++- pd/src/g_radio.c | 3 ++- pd/src/g_slider.c | 3 ++- pd/src/g_toggle.c | 3 ++- pd/src/g_vumeter.c | 3 ++- 8 files changed, 28 insertions(+), 15 deletions(-) diff --git a/pd/nw/dialog_iemgui.html b/pd/nw/dialog_iemgui.html index bfdd11250..f9a2392ad 100644 --- a/pd/nw/dialog_iemgui.html +++ b/pd/nw/dialog_iemgui.html @@ -372,12 +372,13 @@ function update_attr(elem) { //Clean up strings to send as symbol arguments to Pd function pd_symbol_carwash(s) { - s = (s === "" || !s) ? "empty" : s; + s = !s ? "empty" : s; if (s.charAt(0) === "$") { s = "#" + s.slice(1); } s = substitute_space(s); s = strip_problem_chars(s); + return s; } function send_params(attrs, create_undo_point) { @@ -391,13 +392,12 @@ function send_params(attrs, create_undo_point) { iemgui_clip_fontsize $id */ -pdgui.post("label is " + attrs["label"]); var send_symbol = attrs["send-symbol"], receive_symbol = attrs["receive-symbol"], label = attrs["label"]; - pd_symbol_carwash(send_symbol); - pd_symbol_carwash(receive_symbol); - pd_symbol_carwash(label); + send_symbol = pd_symbol_carwash(send_symbol); + receive_symbol = pd_symbol_carwash(receive_symbol); + label = pd_symbol_carwash(label); var label_x_offset = attrs["x-offset"]; var label_y_offset = attrs["y-offset"]; @@ -439,7 +439,7 @@ pdgui.post("label is " + attrs["label"]); if (!slot3) { // toggle slot3 = attrs["nonzero-value"]; - if (slot3 === "") { + if (!slot3) { slot3 = 0; } slot4 = 0; @@ -474,7 +474,9 @@ pdgui.post("label is " + attrs["label"]); var font_size = attrs["font-size"]; if (!font_size) { font_size = 0; } - var foreground_color = attrs["foreground-color"]; + // [vu] doesn't have a foreground color + var foreground_color = attrs["foreground-color"] ? + attrs["foreground-color"] : 0; var background_color = attrs["background-color"]; var label_color = attrs["label-color"]; @@ -500,7 +502,9 @@ pdgui.post("label is " + attrs["label"]); background_color, foreground_color, label_color, slot18, // steady on click - 0); + 0, // not sure what this is doing here + create_undo_point ? 1 : 0 // whether we set an undo point + ); } function cancel(revert_changes) { @@ -528,6 +532,8 @@ function ok() { // Steal focus from any active input to make sure it triggers an // onchange event document.querySelector("button").focus(); + // send the old attrs first so we can set an undo point on them + send_params(old_attrs, false); send_params(new_attrs, true); cancel(false); } diff --git a/pd/src/g_bang.c b/pd/src/g_bang.c index ee10c3667..14aca4280 100644 --- a/pd/src/g_bang.c +++ b/pd/src/g_bang.c @@ -346,7 +346,8 @@ static void bng_bang2(t_bng *x)/*wird immer gesendet, wenn moeglich*/ static void bng_dialog(t_bng *x, t_symbol *s, int argc, t_atom *argv) { - canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x); + if (atom_getintarg(19, argc, argv)) + canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x); x->x_gui.x_h = x->x_gui.x_w = atom_getintarg(0, argc, argv); int fthold = atom_getintarg(2, argc, argv); int ftbreak = atom_getintarg(3, argc, argv); diff --git a/pd/src/g_mycanvas.c b/pd/src/g_mycanvas.c index 90dbbcf6f..67ce80613 100644 --- a/pd/src/g_mycanvas.c +++ b/pd/src/g_mycanvas.c @@ -224,7 +224,8 @@ static void my_canvas_get_pos(t_my_canvas *x) static void my_canvas_dialog(t_my_canvas *x, t_symbol *s, int argc, t_atom *argv) { //printf("cnv_dialog: selected=%d\n",x->x_gui.x_selected); - canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x); + if (atom_getintarg(19, argc, argv)) + canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x); //printf("cnv_dialog: selected=%d\n",x->x_gui.x_selected); x->x_gui.x_h = x->x_gui.x_w = maxi(atom_getintarg(0, argc, argv),1); diff --git a/pd/src/g_numbox.c b/pd/src/g_numbox.c index 7c734cfb2..37e2e71fe 100644 --- a/pd/src/g_numbox.c +++ b/pd/src/g_numbox.c @@ -500,7 +500,8 @@ static void my_numbox_bang(t_my_numbox *x) static void my_numbox_dialog(t_my_numbox *x, t_symbol *s, int argc, t_atom *argv) { - canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x); + if (atom_getintarg(19, argc, argv)) + canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x); x->x_gui.x_w = maxi(atom_getintarg(0, argc, argv),1); x->x_gui.x_h = maxi(atom_getintarg(1, argc, argv),8); double min = atom_getfloatarg(2, argc, argv); diff --git a/pd/src/g_radio.c b/pd/src/g_radio.c index 9db6bbf93..90c665871 100644 --- a/pd/src/g_radio.c +++ b/pd/src/g_radio.c @@ -273,7 +273,8 @@ static void radio_properties(t_gobj *z, t_glist *owner) static void radio_dialog(t_radio *x, t_symbol *s, int argc, t_atom *argv) { - canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x); + if (atom_getintarg(19, argc, argv)) + canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x); x->x_gui.x_h = x->x_gui.x_w = iemgui_clip_size(atom_getintarg(0, argc, argv)); x->x_change = !!atom_getintarg(4, argc, argv); diff --git a/pd/src/g_slider.c b/pd/src/g_slider.c index 6c63ec004..69b649dda 100644 --- a/pd/src/g_slider.c +++ b/pd/src/g_slider.c @@ -319,7 +319,8 @@ static void slider_bang(t_slider *x) static void slider_dialog(t_slider *x, t_symbol *s, int argc, t_atom *argv) { - canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x); + if (atom_getintarg(19, argc, argv)) + canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x); int w = atom_getintarg(0, argc, argv); int h = atom_getintarg(1, argc, argv); double min = atom_getfloatarg(2, argc, argv); diff --git a/pd/src/g_toggle.c b/pd/src/g_toggle.c index 70cf31b3e..b3e813423 100644 --- a/pd/src/g_toggle.c +++ b/pd/src/g_toggle.c @@ -263,7 +263,8 @@ static void toggle_bang(t_toggle *x) static void toggle_dialog(t_toggle *x, t_symbol *s, int argc, t_atom *argv) { - canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x); + if (atom_getintarg(19, argc, argv)) + canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x); x->x_gui.x_h = x->x_gui.x_w = iemgui_clip_size(atom_getintarg(0, argc, argv)); t_float nonzero = atom_getfloatarg(2, argc, argv); diff --git a/pd/src/g_vumeter.c b/pd/src/g_vumeter.c index 9a0810bfc..480f63844 100644 --- a/pd/src/g_vumeter.c +++ b/pd/src/g_vumeter.c @@ -529,7 +529,8 @@ static void vu_properties(t_gobj *z, t_glist *owner) static void vu_dialog(t_vu *x, t_symbol *s, int argc, t_atom *argv) { - canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x); + if (atom_getintarg(19, argc, argv)) + canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x); int w = atom_getintarg(0, argc, argv); int h = atom_getintarg(1, argc, argv); -- GitLab