Compare commits
8 Commits
v1.4.0
...
b3aed4c39a
| Author | SHA1 | Date | |
|---|---|---|---|
| b3aed4c39a | |||
| ddc5dcc162 | |||
| ae02cdbf7c | |||
| bc3a4b31e7 | |||
| 589c97b56b | |||
| 3a8d893e5a | |||
| bcfeb98af9 | |||
| e7aa6c789f |
@@ -80,12 +80,15 @@ var min_rows = 10; // Minimum number of rows to display if scrollable i
|
|||||||
var color_mode = 0; // Change the way the filled slots (stored presets) color is handeld. 0: stored_slot_color. 1: looping through color_1 to color_6. 2: Freely assign colors 1 to 6. 3: Set any color to any preset
|
var color_mode = 0; // Change the way the filled slots (stored presets) color is handeld. 0: stored_slot_color. 1: looping through color_1 to color_6. 2: Freely assign colors 1 to 6. 3: Set any color to any preset
|
||||||
var select_mode = 0; // 0: single click to select and recall the slot. 1: single click to select the slot, double click to recall it.
|
var select_mode = 0; // 0: single click to select and recall the slot. 1: single click to select the slot, double click to recall it.
|
||||||
var click_mode = 0; // Sets the behavior of single clicks. 0: normal (recall), 1: select, 2: store, 3: delete
|
var click_mode = 0; // Sets the behavior of single clicks. 0: normal (recall), 1: select, 2: store, 3: delete
|
||||||
|
var drag_mode = 1; // Sets the behavior of drag operations. 0: disabled, 1: move preset (default), 2: in-line interpolation, 3: zone interpolation
|
||||||
|
var drag_interp_radius = 1; // In use with drag_mode 3
|
||||||
var send_name = "none"; // The global name to send presets dict name to (received by the [receive] object)
|
var send_name = "none"; // The global name to send presets dict name to (received by the [receive] object)
|
||||||
var unique_names = false; // When enabled, force names to be unique when renaming slots by appending "bis" to them. Gets applied only to subsequently renamed presets.
|
var unique_names = false; // When enabled, force names to be unique when renaming slots by appending "bis" to them. Gets applied only to subsequently renamed presets.
|
||||||
var autoname = false; // Automatically name new presets when created as "Preset" followed by the slot id
|
var autoname = false; // Automatically name new presets when created as "Preset" followed by the slot id
|
||||||
var use_uid = 0; // Generating UID for each presets when enabled. Requires a [pattr preset_metadata]
|
var use_uid = 0; // Generating UID for each presets when enabled. Requires a [pattr preset_metadata]
|
||||||
var timestamp = false; // Generates a `created` and `modified` timestamp for each preset. Requires use_uid enabled
|
var timestamp = false; // Generates a `created` and `modified` timestamp for each preset. Requires use_uid enabled
|
||||||
var recall_passthrough = true; // By default (true), clicking a slot sends a recall message directly to [pattrstorage], and the jsui left outlet outputs a recall message once the recall is done. When disabled, clicking a slot will send a recall message straight from the jsui left outlet, so it's up to the user to forward the message to pattrstorage. It can be usefull for triggering interpolations with custom logic.
|
var recall_passthrough = true; // By default (true), clicking a slot sends a recall message directly to [pattrstorage], and the jsui left outlet outputs a recall message once the recall is done. When disabled, clicking a slot will send a recall message straight from the jsui left outlet, so it's up to the user to forward the message to pattrstorage. It can be usefull for triggering interpolations with custom logic.
|
||||||
|
var store_passthrough = true; // Same as recall_passthrough but for store messages triggered with shift+click. The store message message has to be routed back into [tc.preset] to be effective.
|
||||||
var ui_rename = false; // Use the attached textedit, if any, to edit slot names directly in the JSUI frame when clicking a slot while holding the control key. When disabled, the textedit remains untouched but gets focused when clicking a slot while holding the control key.
|
var ui_rename = false; // Use the attached textedit, if any, to edit slot names directly in the JSUI frame when clicking a slot while holding the control key. When disabled, the textedit remains untouched but gets focused when clicking a slot while holding the control key.
|
||||||
var poll_edited = 0; // If >0, check if current preset is edited every X seconds defined by the variable value.
|
var poll_edited = 0; // If >0, check if current preset is edited every X seconds defined by the variable value.
|
||||||
var nbslot_edit = true; // If nbslot_edit and scrollable are enabled, the last two visible slots are replaced by buttons to add or remove lines of slot.
|
var nbslot_edit = true; // If nbslot_edit and scrollable are enabled, the last two visible slots are replaced by buttons to add or remove lines of slot.
|
||||||
@@ -198,6 +201,10 @@ function slot(left, top, right, bottom) {
|
|||||||
this.top = top;
|
this.top = top;
|
||||||
this.right = right;
|
this.right = right;
|
||||||
this.bottom = bottom;
|
this.bottom = bottom;
|
||||||
|
this.center = {
|
||||||
|
x: (left + right) / 2,
|
||||||
|
y: (top + bottom) / 2,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.export_metadata = function () {
|
this.export_metadata = function () {
|
||||||
@@ -313,13 +320,14 @@ function calc_rows_columns(src) {
|
|||||||
slots[cur].set_geom(left, top, right, bottom);
|
slots[cur].set_geom(left, top, right, bottom);
|
||||||
} else {
|
} else {
|
||||||
// Empty slot, possibly not initialized (if above slots_highest)
|
// Empty slot, possibly not initialized (if above slots_highest)
|
||||||
slots[cur] = new slot(left, top, right, bottom);
|
slots[cur] = new slot();
|
||||||
|
slots[cur].set_geom(left, top, right, bottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (slots_count_display < slots_highest) {
|
if (slots.length < slots_highest ) {
|
||||||
for (var i = slots_count_display + 1; i <= slots_highest; i++) {
|
for (var i = slots_count_display + 1; i <= slots_highest; i++) {
|
||||||
slots[i] = new slot();
|
slots[i] = new slot();
|
||||||
}
|
}
|
||||||
@@ -459,7 +467,7 @@ function paint_base() {
|
|||||||
for (var i = 1; i <= true_slots_count_display; i++) {
|
for (var i = 1; i <= true_slots_count_display; i++) {
|
||||||
if (i != drag_slot) { //We mask the slot that is currently dragged as it is drawn at the mouse position already
|
if (i != drag_slot) { //We mask the slot that is currently dragged as it is drawn at the mouse position already
|
||||||
var slot = slots[i];
|
var slot = slots[i];
|
||||||
if (slot.filled == true) {
|
if (slot.filled === true) {
|
||||||
if (color_mode == 1) {
|
if (color_mode == 1) {
|
||||||
mg.set_source_rgba(color_wheel_custom[i % color_wheel_size]);
|
mg.set_source_rgba(color_wheel_custom[i % color_wheel_size]);
|
||||||
} else if (color_mode == 2) {
|
} else if (color_mode == 2) {
|
||||||
@@ -503,7 +511,7 @@ function paint()
|
|||||||
mgraphics.set_line_width(1);
|
mgraphics.set_line_width(1);
|
||||||
|
|
||||||
// Active slot
|
// Active slot
|
||||||
if (is_dragging == 0 && active_slot > 0 && active_slot <= slots_count_display) {
|
if (is_dragging !== 1 && active_slot > 0 && active_slot <= slots_count_display) {
|
||||||
var opacity = active_slot_color[3];
|
var opacity = active_slot_color[3];
|
||||||
var opacity = control_hold && last_hovered == active_slot ? active_slot_color[3] * 0.7 : active_slot_color[3];
|
var opacity = control_hold && last_hovered == active_slot ? active_slot_color[3] * 0.7 : active_slot_color[3];
|
||||||
mgraphics.set_source_rgba(active_slot_color[0], active_slot_color[1], active_slot_color[2], opacity);
|
mgraphics.set_source_rgba(active_slot_color[0], active_slot_color[1], active_slot_color[2], opacity);
|
||||||
@@ -521,7 +529,7 @@ function paint()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Previous active slot
|
// Previous active slot
|
||||||
if (is_dragging == 0 && previous_active_slot > 0 && previous_active_slot <= slots_count_display) {
|
if (is_dragging === 0 && previous_active_slot > 0 && previous_active_slot <= slots_count_display) {
|
||||||
mgraphics.set_source_rgba(active_slot_color[0], active_slot_color[1], active_slot_color[2], active_slot_color[3] * 0.5);
|
mgraphics.set_source_rgba(active_slot_color[0], active_slot_color[1], active_slot_color[2], active_slot_color[3] * 0.5);
|
||||||
if (color_mode) {
|
if (color_mode) {
|
||||||
if (!control_hold) {
|
if (!control_hold) {
|
||||||
@@ -545,7 +553,7 @@ function paint()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Interpolated slots
|
// Interpolated slots
|
||||||
if (is_dragging == 0 && display_interp && is_interpolating) {
|
if (is_dragging !== 1 && display_interp && is_interpolating) {
|
||||||
|
|
||||||
for (var i = 1; i <= slots_count_display; i++) {
|
for (var i = 1; i <= slots_count_display; i++) {
|
||||||
var slot = slots[i];
|
var slot = slots[i];
|
||||||
@@ -575,10 +583,10 @@ function paint()
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
// Hovered slot
|
// Hovered slot
|
||||||
if (last_hovered > -1) {
|
if ((last_hovered > -1) && ((drag_mode < 2) || (drag_mode >= 2 && !is_dragging))) {
|
||||||
|
|
||||||
// Slot border
|
// Slot border
|
||||||
if (slots[last_hovered].filled == false || (slots[last_hovered].filled == true && !control_hold)) {
|
if (slots[last_hovered].filled === false || (slots[last_hovered].filled === true && !control_hold)) {
|
||||||
mgraphics.set_source_rgba(text_color[0], text_color[1], text_color[2], 0.8 * text_color[3]);
|
mgraphics.set_source_rgba(text_color[0], text_color[1], text_color[2], 0.8 * text_color[3]);
|
||||||
mgraphics.set_line_width(1);
|
mgraphics.set_line_width(1);
|
||||||
draw_slot_bubble(slots[last_hovered].left, slots[last_hovered].top, slot_size, slot_size);
|
draw_slot_bubble(slots[last_hovered].left, slots[last_hovered].top, slot_size, slot_size);
|
||||||
@@ -589,7 +597,7 @@ function paint()
|
|||||||
var stroke_width = Math.round(1 + slot_size / 10);
|
var stroke_width = Math.round(1 + slot_size / 10);
|
||||||
stroke_width = Math.max(2, stroke_width);
|
stroke_width = Math.max(2, stroke_width);
|
||||||
if (shift_hold) {
|
if (shift_hold) {
|
||||||
if (control_hold && slots[last_hovered].filled == true) {
|
if (control_hold && slots[last_hovered].filled === true) {
|
||||||
// About to lock/unlock
|
// About to lock/unlock
|
||||||
var bracket_size = slot_size * 0.2;
|
var bracket_size = slot_size * 0.2;
|
||||||
mgraphics.set_source_rgba(text_color);
|
mgraphics.set_source_rgba(text_color);
|
||||||
@@ -603,7 +611,7 @@ function paint()
|
|||||||
mgraphics.rel_line_to(0, slot_size);
|
mgraphics.rel_line_to(0, slot_size);
|
||||||
mgraphics.rel_line_to(-bracket_size, 0);
|
mgraphics.rel_line_to(-bracket_size, 0);
|
||||||
mgraphics.stroke();
|
mgraphics.stroke();
|
||||||
} else if (option_hold && !control_hold && slots[last_hovered].filled == true) {
|
} else if (option_hold && !control_hold && slots[last_hovered].filled === true) {
|
||||||
// About to delete
|
// About to delete
|
||||||
mgraphics.set_source_rgba(0, 0, 0, 0.5);
|
mgraphics.set_source_rgba(0, 0, 0, 0.5);
|
||||||
draw_slot_bubble(slots[last_hovered].left + 1, slots[last_hovered].top + 1, slot_size-2, slot_size-2);
|
draw_slot_bubble(slots[last_hovered].left + 1, slots[last_hovered].top + 1, slot_size-2, slot_size-2);
|
||||||
@@ -614,7 +622,7 @@ function paint()
|
|||||||
draw_slot_bubble(slots[last_hovered].left + 1, slots[last_hovered].top + 1, slot_size-2, slot_size-2);
|
draw_slot_bubble(slots[last_hovered].left + 1, slots[last_hovered].top + 1, slot_size-2, slot_size-2);
|
||||||
mgraphics.fill();
|
mgraphics.fill();
|
||||||
}
|
}
|
||||||
} else if (control_hold && slots[last_hovered].filled == true) {
|
} else if (control_hold && slots[last_hovered].filled === true) {
|
||||||
// About to rename
|
// About to rename
|
||||||
mgraphics.set_source_rgba(text_color);
|
mgraphics.set_source_rgba(text_color);
|
||||||
mgraphics.set_line_width(stroke_width);
|
mgraphics.set_line_width(stroke_width);
|
||||||
@@ -682,7 +690,7 @@ function paint()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Drag slot
|
// Drag slot
|
||||||
if (is_dragging) {
|
if (is_dragging === 1) {
|
||||||
if (layout == 0) {
|
if (layout == 0) {
|
||||||
mgraphics.translate(last_x, last_y );
|
mgraphics.translate(last_x, last_y );
|
||||||
mgraphics.rotate(0.15);
|
mgraphics.rotate(0.15);
|
||||||
@@ -925,7 +933,7 @@ function anything() {
|
|||||||
} else {
|
} else {
|
||||||
slots[v].name = null;
|
slots[v].name = null;
|
||||||
slots[v].interp = -1;
|
slots[v].interp = -1;
|
||||||
slots[v].filled = 0;
|
slots[v].filled = false;
|
||||||
if (active_slot == v) {
|
if (active_slot == v) {
|
||||||
active_slot = 0;
|
active_slot = 0;
|
||||||
selected_slot = 0;
|
selected_slot = 0;
|
||||||
@@ -934,7 +942,7 @@ function anything() {
|
|||||||
previous_active_slot = 0;
|
previous_active_slot = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_dragging == 0 && is_moving == 0) {
|
if (is_dragging === 0 && is_moving === 0) {
|
||||||
to_pattrstorage("delete", v);
|
to_pattrstorage("delete", v);
|
||||||
to_pattrstorage("getslotlist");
|
to_pattrstorage("getslotlist");
|
||||||
set_active_slot(active_slot);
|
set_active_slot(active_slot);
|
||||||
@@ -980,9 +988,7 @@ function msg_int(v) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function msg_float(v) {
|
function msg_float(v) {
|
||||||
var s = Math.floor(v);
|
to_pattrstorage(v);
|
||||||
var i = v % 1;
|
|
||||||
to_pattrstorage("recall", s, s+1, i);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function pattrstorage(v) {
|
function pattrstorage(v) {
|
||||||
@@ -1021,7 +1027,7 @@ function slotname() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (slot > 0 && name != "(undefined)") {
|
if (slot > 0 && name != "(undefined)") {
|
||||||
if (is_updating_names == 1 && slots[slot].filled == false && name !== "<(unnamed)>") {
|
if (is_updating_names == 1 && slots[slot].filled === false && name !== "<(unnamed)>") {
|
||||||
// Removing parenthesis automatically added by pattrstorage if the preset has a name but isn't filled
|
// Removing parenthesis automatically added by pattrstorage if the preset has a name but isn't filled
|
||||||
name = name.slice(1, -1);
|
name = name.slice(1, -1);
|
||||||
}
|
}
|
||||||
@@ -1088,10 +1094,13 @@ function recall() {
|
|||||||
} else if (args.length == 3) {
|
} else if (args.length == 3) {
|
||||||
src_slot = Math.abs(args[0]);
|
src_slot = Math.abs(args[0]);
|
||||||
trg_slot = Math.abs(args[1]);
|
trg_slot = Math.abs(args[1]);
|
||||||
interp = Math.min( 1, Math.max(0, args[2]));
|
interp = Math.min(1, Math.max(0, args[2]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((src_slot == 0 || filled_slots.indexOf(src_slot) > -1) && (trg_slot == 0 || filled_slots.indexOf(trg_slot) > -1 )) {
|
var src_slot_exists = filled_slots.indexOf(src_slot) > -1;
|
||||||
|
var trg_slot_exists = filled_slots.indexOf(trg_slot) > -1;
|
||||||
|
|
||||||
|
if ((src_slot == 0 || src_slot_exists) || (trg_slot == 0 || trg_slot_exists )) {
|
||||||
for (var i = 0; i < filled_slots.length; i++) {
|
for (var i = 0; i < filled_slots.length; i++) {
|
||||||
slots[filled_slots[i]].interp = -1;
|
slots[filled_slots[i]].interp = -1;
|
||||||
}
|
}
|
||||||
@@ -1105,7 +1114,7 @@ function recall() {
|
|||||||
src_slot = active_slot;
|
src_slot = active_slot;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (interp == 0.0) {
|
if (interp == 0.0 && src_slot_exists) {
|
||||||
slots[src_slot].interp = -1;
|
slots[src_slot].interp = -1;
|
||||||
slots[trg_slot].interp = -1;
|
slots[trg_slot].interp = -1;
|
||||||
is_interpolating = 0;
|
is_interpolating = 0;
|
||||||
@@ -1119,7 +1128,7 @@ function recall() {
|
|||||||
set_active_slot(src_slot);
|
set_active_slot(src_slot);
|
||||||
active_slot_edited = 0;
|
active_slot_edited = 0;
|
||||||
run_edited_poll_task();
|
run_edited_poll_task();
|
||||||
} else if (interp == 1.0) {
|
} else if (interp == 1.0 && trg_slot_exists) {
|
||||||
slots[src_slot].interp = -1;
|
slots[src_slot].interp = -1;
|
||||||
slots[trg_slot].interp = -1;
|
slots[trg_slot].interp = -1;
|
||||||
is_interpolating = 0;
|
is_interpolating = 0;
|
||||||
@@ -1128,8 +1137,8 @@ function recall() {
|
|||||||
active_slot_edited = 0;
|
active_slot_edited = 0;
|
||||||
run_edited_poll_task();
|
run_edited_poll_task();
|
||||||
} else {
|
} else {
|
||||||
slots[src_slot].interp = 1 - interp;
|
if (src_slot_exists) slots[src_slot].interp = 1 - interp;
|
||||||
slots[trg_slot].interp = interp;
|
if (trg_slot_exists) slots[trg_slot].interp = interp;
|
||||||
is_interpolating = 1;
|
is_interpolating = 1;
|
||||||
active_slot = 0;
|
active_slot = 0;
|
||||||
// if (src_slot != trg_slot) {
|
// if (src_slot != trg_slot) {
|
||||||
@@ -1158,22 +1167,27 @@ function recallmulti() {
|
|||||||
var args = arrayfromargs(arguments);
|
var args = arrayfromargs(arguments);
|
||||||
var interp_slots = [];
|
var interp_slots = [];
|
||||||
var summed_weight = 0;
|
var summed_weight = 0;
|
||||||
|
|
||||||
|
for (var i = 0; i < filled_slots.length; i++) {
|
||||||
|
slots[filled_slots[i]].interp = -1;
|
||||||
|
}
|
||||||
|
|
||||||
for (var i = 0; i < args.length; i++) {
|
for (var i = 0; i < args.length; i++) {
|
||||||
|
var slot = Math.floor(args[i]);
|
||||||
var weight = args[i] % 1.;
|
var weight = args[i] % 1.;
|
||||||
if (weight == 0) weight = 1;
|
if (weight == 0) weight = 1;
|
||||||
summed_weight += weight;
|
summed_weight += weight;
|
||||||
interp_slots.push([Math.floor(args[i]), weight]);
|
interp_slots.push([slot, weight]);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i = 0; i < interp_slots.length; i++) {
|
for (var i = 0; i < interp_slots.length; i++) {
|
||||||
var nb = interp_slots[i][0];
|
var nb = interp_slots[i][0];
|
||||||
if (slots[nb].filled == true) {
|
if (slots[nb].filled === true) {
|
||||||
interp_slots[i][1] /= summed_weight;
|
interp_slots[i][1] /= summed_weight;
|
||||||
} else {
|
} else {
|
||||||
interp_slots[i][1] = -1;
|
interp_slots[i][1] = -1;
|
||||||
}
|
}
|
||||||
slots[nb].interp = interp_slots[i][1]
|
slots[nb].interp = interp_slots[i][1];
|
||||||
}
|
}
|
||||||
|
|
||||||
is_interpolating = 1;
|
is_interpolating = 1;
|
||||||
@@ -1243,8 +1257,10 @@ function store(v) {
|
|||||||
if (!(ignore_slot_zero && v === 0)) {
|
if (!(ignore_slot_zero && v === 0)) {
|
||||||
set_active_slot(v);
|
set_active_slot(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
outlet(0, "store", v);
|
if (store_passthrough) {
|
||||||
|
outlet(0, "store", v);
|
||||||
|
}
|
||||||
if (v) {
|
if (v) {
|
||||||
// We writagain only if stored preset is > 0
|
// We writagain only if stored preset is > 0
|
||||||
trigger_writeagain();
|
trigger_writeagain();
|
||||||
@@ -1294,7 +1310,7 @@ function move() {
|
|||||||
if (args.length < 2) return;
|
if (args.length < 2) return;
|
||||||
var src_slot = args[0]; // Preset to move
|
var src_slot = args[0]; // Preset to move
|
||||||
var dst_slot = args[1]; // Destination slot
|
var dst_slot = args[1]; // Destination slot
|
||||||
if (src_slot == dst_slot || !(src_slot <= slots_highest && dst_slot <= slots_count_display) || slots[src_slot].filled == false) {
|
if (src_slot == dst_slot || !(src_slot <= slots_highest && dst_slot <= slots_count_display) || slots[src_slot].filled === false) {
|
||||||
if (is_dragging) {
|
if (is_dragging) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1306,7 +1322,7 @@ function move() {
|
|||||||
var cur_prev_active_slot = previous_active_slot;
|
var cur_prev_active_slot = previous_active_slot;
|
||||||
var cur_selected_slot = selected_slot;
|
var cur_selected_slot = selected_slot;
|
||||||
var offset = ((dst_slot <= src_slot) && slots[dst_slot].filled) ? 1 : 0;
|
var offset = ((dst_slot <= src_slot) && slots[dst_slot].filled) ? 1 : 0;
|
||||||
var offset_others = slots[dst_slot].filled == true ? 1 : 0;
|
var offset_others = slots[dst_slot].filled === true ? 1 : 0;
|
||||||
var src_slot_lock = slots[src_slot].lock;
|
var src_slot_lock = slots[src_slot].lock;
|
||||||
var recalc_rows_flag = 0;
|
var recalc_rows_flag = 0;
|
||||||
|
|
||||||
@@ -1315,7 +1331,7 @@ function move() {
|
|||||||
lock(src_slot, 0);
|
lock(src_slot, 0);
|
||||||
}
|
}
|
||||||
// If new slot is empty we just move the drag preset here. If it's not, we move al next slots to the right
|
// If new slot is empty we just move the drag preset here. If it's not, we move al next slots to the right
|
||||||
if (slots[dst_slot].filled == true) {
|
if (slots[dst_slot].filled === true) {
|
||||||
if (slots_highest == slots_count_display) {
|
if (slots_highest == slots_count_display) {
|
||||||
// If there's a stored preset in the last displayed slot, it will be pushed to a new row at insert, so we need to add a new row at redraw
|
// If there's a stored preset in the last displayed slot, it will be pushed to a new row at insert, so we need to add a new row at redraw
|
||||||
recalc_rows_flag = 1;
|
recalc_rows_flag = 1;
|
||||||
@@ -1485,7 +1501,6 @@ find_pattrstorage.local = 1;
|
|||||||
|
|
||||||
function to_pattrstorage() {
|
function to_pattrstorage() {
|
||||||
if (pattrstorage_obj != null) {
|
if (pattrstorage_obj != null) {
|
||||||
// post('sending to pattrstorage: ', arrayfromargs(arguments), '\n');
|
|
||||||
pattrstorage_obj.message(arrayfromargs(arguments));
|
pattrstorage_obj.message(arrayfromargs(arguments));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1588,7 +1603,6 @@ function update_filled_slots_dict() {
|
|||||||
tmp_dict['color_custom'] = slot.color_custom; // Preset color (when color_mode = 3)
|
tmp_dict['color_custom'] = slot.color_custom; // Preset color (when color_mode = 3)
|
||||||
}
|
}
|
||||||
if (use_uid) tmp_dict['uid'] = slot.uid; // Preset uid (unique and persistent across preset renaming, overwriting and moving) Useful for keeping track of preset across changes
|
if (use_uid) tmp_dict['uid'] = slot.uid; // Preset uid (unique and persistent across preset renaming, overwriting and moving) Useful for keeping track of preset across changes
|
||||||
// post('updating by_uid', slot.uid, '\n');
|
|
||||||
if (timestamp) {
|
if (timestamp) {
|
||||||
tmp_dict['created'] = slot.created;
|
tmp_dict['created'] = slot.created;
|
||||||
tmp_dict['modified'] = slot.modified;
|
tmp_dict['modified'] = slot.modified;
|
||||||
@@ -1798,14 +1812,18 @@ function onclick(x,y,but,cmd,shift,capslock,option,ctrl)
|
|||||||
output = "lock";
|
output = "lock";
|
||||||
} else if (!shift && ctrl && slots[last_hovered].filled) {
|
} else if (!shift && ctrl && slots[last_hovered].filled) {
|
||||||
output = "rename";
|
output = "rename";
|
||||||
} else if (slots[last_hovered].filled == false) {
|
} else if (slots[last_hovered].filled === false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (output == "recall" && recall_passthrough == false) {
|
if (output == "recall" && recall_passthrough == false) {
|
||||||
// if recall_passthrough == true, send the recall message to pattrstorage directly
|
// if recall_passthrough == true, send the recall message to pattrstorage directly
|
||||||
outlet(0, 'recall', last_hovered);
|
outlet(0, 'recall', last_hovered);
|
||||||
} else if (output == "store") {
|
} else if (output == "store") {
|
||||||
store(last_hovered);
|
if (store_passthrough) {
|
||||||
|
store(last_hovered);
|
||||||
|
} else {
|
||||||
|
outlet(0, 'store', last_hovered);
|
||||||
|
}
|
||||||
} else if (output == "select") {
|
} else if (output == "select") {
|
||||||
select(last_hovered);
|
select(last_hovered);
|
||||||
// mgraphics.redraw();
|
// mgraphics.redraw();
|
||||||
@@ -1853,51 +1871,137 @@ function ondrag(x,y,but,cmd,shift,capslock,option,ctrl)
|
|||||||
{
|
{
|
||||||
if (pattrstorage_name != null) {
|
if (pattrstorage_name != null) {
|
||||||
y -= y_offset;
|
y -= y_offset;
|
||||||
if (is_dragging == 0 && last_hovered > 0 && slots[last_hovered].filled == true) {
|
if (drag_mode === 1) {
|
||||||
// To prevent mistakes, is_dragging is set to 1 only when dragging for more than 10 pixels
|
if (is_dragging === 0 && last_hovered > 0 && slots[last_hovered].filled === true) {
|
||||||
var dist_from_start = Math.sqrt((x-last_x)*(x-last_x)+(y-last_y)*(y-last_y));
|
// To prevent mistakes, is_dragging is set to 1 only when dragging for more than 10 pixels
|
||||||
if (dist_from_start > 10) {
|
var dist_from_start = Math.sqrt((x-last_x)*(x-last_x)+(y-last_y)*(y-last_y));
|
||||||
is_dragging = 1;
|
if (dist_from_start > 10) {
|
||||||
drag_slot = last_hovered;
|
is_dragging = 1;
|
||||||
paint_base(); // We repaint the base with the dragged slot removed from the grid
|
drag_slot = last_hovered;
|
||||||
}
|
paint_base(); // We repaint the base with the dragged slot removed from the grid
|
||||||
|
|
||||||
} else if (is_dragging == 1) {
|
|
||||||
last_hovered = get_slot_index(x, y);
|
|
||||||
last_hovered_is_preset_slot = scrollable && nbslot_edit && last_hovered > (true_slots_count_display - 2) ? false : true;
|
|
||||||
if (!last_hovered_is_preset_slot) {
|
|
||||||
last_hovered = 0;
|
|
||||||
}
|
|
||||||
if (!but) {
|
|
||||||
// When the button is released, the dragging ceases
|
|
||||||
if (last_hovered > 0 && last_hovered != drag_slot && last_hovered_is_preset_slot) {
|
|
||||||
move(drag_slot, last_hovered);
|
|
||||||
} else {
|
|
||||||
// Drag released but not somewhere we can throw a slot in
|
|
||||||
is_dragging = 0;
|
|
||||||
drag_slot = -1;
|
|
||||||
paint_base();
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// Click still hold, we keep dragging
|
} else if (is_dragging == 1) {
|
||||||
if (scrollable) {
|
last_hovered = get_slot_index(x, y);
|
||||||
// Auto-scroll if mouse out of bounds
|
last_hovered_is_preset_slot = scrollable && nbslot_edit && last_hovered > (true_slots_count_display - 2) ? false : true;
|
||||||
if (y+y_offset < 0 && y-(last_y-drag_scroll) < 0) {
|
if (!last_hovered_is_preset_slot) {
|
||||||
drag_scroll = 2;
|
last_hovered = 0;
|
||||||
} else if (y+y_offset > ui_height && y-(last_y-drag_scroll) > 0) {
|
}
|
||||||
drag_scroll = -2;
|
if (!but) {
|
||||||
|
// When the button is released, the dragging ceases
|
||||||
|
if (last_hovered > 0 && last_hovered != drag_slot && last_hovered_is_preset_slot) {
|
||||||
|
move(drag_slot, last_hovered);
|
||||||
} else {
|
} else {
|
||||||
drag_scroll = 0;
|
// Drag released but not somewhere we can throw a slot in
|
||||||
|
is_dragging = 0;
|
||||||
|
drag_slot = -1;
|
||||||
|
paint_base();
|
||||||
}
|
}
|
||||||
y_offset += drag_scroll;
|
} else {
|
||||||
y_offset = Math.min(y_offset, 0);
|
// Click still hold, we keep dragging
|
||||||
y_offset = Math.max(y_offset, -1 * (bg_height - ui_height));
|
if (scrollable) {
|
||||||
|
// Auto-scroll if mouse out of bounds
|
||||||
|
if (y+y_offset < 0 && y-(last_y-drag_scroll) < 0) {
|
||||||
|
drag_scroll = 2;
|
||||||
|
} else if (y+y_offset > ui_height && y-(last_y-drag_scroll) > 0) {
|
||||||
|
drag_scroll = -2;
|
||||||
|
} else {
|
||||||
|
drag_scroll = 0;
|
||||||
|
}
|
||||||
|
y_offset += drag_scroll;
|
||||||
|
y_offset = Math.min(y_offset, 0);
|
||||||
|
y_offset = Math.max(y_offset, -1 * (bg_height - ui_height));
|
||||||
|
}
|
||||||
|
|
||||||
|
mgraphics.redraw();
|
||||||
|
}
|
||||||
|
last_x = x;
|
||||||
|
last_y = y;
|
||||||
|
}
|
||||||
|
} else if (drag_mode === 2) {
|
||||||
|
// Drag to interpolate across adjacent (previous and next) presets
|
||||||
|
if (is_dragging == 0) {
|
||||||
|
var dist_from_start = Math.sqrt((x-last_x)*(x-last_x)+(y-last_y)*(y-last_y));
|
||||||
|
if (dist_from_start > 3) {
|
||||||
|
is_dragging = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// last_hovered retains the slot where the drag began
|
||||||
|
if (is_dragging === 2 && last_hovered > -1) {
|
||||||
|
var relative_dist_from_start =
|
||||||
|
layout === 0 ? (x - slots[last_hovered].center.x) / (slot_size + spacing) :
|
||||||
|
(y - slots[last_hovered].center.y) / (slot_size + spacing);
|
||||||
|
var current_slot = Math.max(Math.round(last_hovered - 0.5 + relative_dist_from_start), 1);
|
||||||
|
var prev_filled_slot = -1;
|
||||||
|
var next_filled_slot = -1;
|
||||||
|
for (var i = 0; i < filled_slots.length; i++) {
|
||||||
|
var p = filled_slots[i];
|
||||||
|
if (p <= current_slot) {
|
||||||
|
if (prev_filled_slot === -1 || p > prev_filled_slot) {
|
||||||
|
prev_filled_slot = p;
|
||||||
|
}
|
||||||
|
} else if (p > current_slot) {
|
||||||
|
if (next_filled_slot === -1 || p < next_filled_slot) {
|
||||||
|
next_filled_slot = p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var interp_amount = 0;
|
||||||
|
if (prev_filled_slot === -1) {
|
||||||
|
prev_filled_slot = next_filled_slot;
|
||||||
|
interp_amount = 1;
|
||||||
|
} else if (next_filled_slot === -1) {
|
||||||
|
next_filled_slot = prev_filled_slot;
|
||||||
|
interp_amount = 1;
|
||||||
|
} else if (prev_filled_slot > 0 && next_filled_slot > 0) {
|
||||||
|
interp_amount = (last_hovered + relative_dist_from_start - prev_filled_slot) / (next_filled_slot - prev_filled_slot);
|
||||||
|
interp_amount = Math.min(interp_amount, Math.max(interp_amount, 0), 1);
|
||||||
|
}
|
||||||
|
if (prev_filled_slot !== -1 || next_filled_slot !== -1) {
|
||||||
|
to_pattrstorage("recall", prev_filled_slot, next_filled_slot, interp_amount);
|
||||||
|
}
|
||||||
|
last_x = x;
|
||||||
|
last_y = y;
|
||||||
|
if (!but) {
|
||||||
|
is_dragging = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (drag_mode === 3) {
|
||||||
|
// Drag to interpolate across adjacent (previous and next) presets
|
||||||
|
if (is_dragging == 0) {
|
||||||
|
var dist_from_start = Math.sqrt((x-last_x)*(x-last_x)+(y-last_y)*(y-last_y));
|
||||||
|
if (dist_from_start > 3) {
|
||||||
|
is_dragging = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// last_hovered retains the slot where the drag began
|
||||||
|
if (is_dragging === 3 && last_hovered > -1) {
|
||||||
|
var nearby_slots = [];
|
||||||
|
var max_dist = 0;
|
||||||
|
for (var i = 0; i < filled_slots.length; i++) {
|
||||||
|
// Interpolating only through displayed slots;
|
||||||
|
if (filled_slots[i] <= slots_count_display) {
|
||||||
|
var s_pos = slots[filled_slots[i]].center;
|
||||||
|
var dist_from_mouse = Math.sqrt((x - s_pos.x) * (x - s_pos.x) + (y - s_pos.y) * (y - s_pos.y)) / (slot_size + spacing);
|
||||||
|
if (dist_from_mouse < drag_interp_radius) {
|
||||||
|
var interp_factor = Math.pow((dist_from_mouse / drag_interp_radius) - 1, 4)
|
||||||
|
// var interp_factor = 1 - (dist_from_mouse / drag_interp_radius);
|
||||||
|
nearby_slots.push(filled_slots[i] + interp_factor);
|
||||||
|
if (max_dist < dist_from_mouse) max_dist = dist_from_mouse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (nearby_slots.length) {
|
||||||
|
var args = ["recallmulti"].concat(nearby_slots);
|
||||||
|
to_pattrstorage.apply(null, args);
|
||||||
|
recallmulti.apply(null, nearby_slots);
|
||||||
|
}
|
||||||
|
last_x = x;
|
||||||
|
last_y = y;
|
||||||
|
if (!but) {
|
||||||
|
is_dragging = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
mgraphics.redraw();
|
|
||||||
}
|
}
|
||||||
last_x = x;
|
|
||||||
last_y = y;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1988,12 +2092,7 @@ function setslotsize(v){
|
|||||||
}
|
}
|
||||||
setslotsize.local = 1;
|
setslotsize.local = 1;
|
||||||
|
|
||||||
declareattribute("slot_round", "getslotround", "setslotround", 1, {type: "long", default: 0, label: "Slot Round", category: "Appearance"});
|
declareattribute("slot_round", null, "setslotround", 1, {type: "long", default: 0, label: "Slot Round", category: "Appearance"});
|
||||||
function getslotround() {
|
|
||||||
return slot_round;
|
|
||||||
}
|
|
||||||
getslotround.local = 1;
|
|
||||||
|
|
||||||
function setslotround(v){
|
function setslotround(v){
|
||||||
if (arguments.length) {
|
if (arguments.length) {
|
||||||
slot_round = Math.max(0, Math.min(slot_size, v));
|
slot_round = Math.max(0, Math.min(slot_size, v));
|
||||||
@@ -2005,12 +2104,7 @@ function setslotround(v){
|
|||||||
}
|
}
|
||||||
setslotround.local = 1;
|
setslotround.local = 1;
|
||||||
|
|
||||||
declareattribute("margin", "getmargin", "setmargin", 1, {type: "long", default: 4, label: "Margin", category: "Appearance"});
|
declareattribute("margin", null, "setmargin", 1, {type: "long", default: 4, label: "Margin", category: "Appearance"});
|
||||||
function getmargin() {
|
|
||||||
return margin;
|
|
||||||
}
|
|
||||||
getmargin.local = 1;
|
|
||||||
|
|
||||||
function setmargin(v){
|
function setmargin(v){
|
||||||
if (arguments.length) {
|
if (arguments.length) {
|
||||||
margin = Math.max(0, v);
|
margin = Math.max(0, v);
|
||||||
@@ -2021,12 +2115,7 @@ function setmargin(v){
|
|||||||
}
|
}
|
||||||
setmargin.local = 1;
|
setmargin.local = 1;
|
||||||
|
|
||||||
declareattribute("spacing", "getspacing", "setspacing", 1, {type: "long", default: 4, label: "Spacing", category: "Appearance"});
|
declareattribute("spacing", null, "setspacing", 1, {type: "long", default: 4, label: "Spacing", category: "Appearance"});
|
||||||
function getspacing() {
|
|
||||||
return spacing;
|
|
||||||
}
|
|
||||||
getspacing.local = 1;
|
|
||||||
|
|
||||||
function setspacing(v){
|
function setspacing(v){
|
||||||
if (arguments.length) {
|
if (arguments.length) {
|
||||||
spacing = Math.max(1, v);
|
spacing = Math.max(1, v);
|
||||||
@@ -2056,12 +2145,7 @@ function setbgcolor(){
|
|||||||
}
|
}
|
||||||
setbgcolor.local = 1;
|
setbgcolor.local = 1;
|
||||||
|
|
||||||
declareattribute("empty_slot_color", "getemptycolor", "setemptycolor", 1, {style: "rgba", label: "Empty Slot Color", category: "Appearance"});
|
declareattribute("empty_slot_color", null, "setemptycolor", 1, {style: "rgba", label: "Empty Slot Color", category: "Appearance"});
|
||||||
function getemptycolor() {
|
|
||||||
return empty_slot_color;
|
|
||||||
}
|
|
||||||
getemptycolor.local = 1;
|
|
||||||
|
|
||||||
function setemptycolor(){
|
function setemptycolor(){
|
||||||
if (arguments.length == 4) {
|
if (arguments.length == 4) {
|
||||||
empty_slot_color = [arguments[0], arguments[1], arguments[2], arguments[3]];
|
empty_slot_color = [arguments[0], arguments[1], arguments[2], arguments[3]];
|
||||||
@@ -2074,12 +2158,7 @@ function setemptycolor(){
|
|||||||
}
|
}
|
||||||
setemptycolor.local = 1;
|
setemptycolor.local = 1;
|
||||||
|
|
||||||
declareattribute("active_slot_color", "getactiveslotcolor", "setactiveslotcolor", 1, {style: "rgba", label: "Active Slot Color", category: "Appearance"});
|
declareattribute("active_slot_color", null, "setactiveslotcolor", 1, {style: "rgba", label: "Active Slot Color", category: "Appearance"});
|
||||||
function getactiveslotcolor() {
|
|
||||||
return active_slot_color;
|
|
||||||
}
|
|
||||||
getactiveslotcolor.local = 1;
|
|
||||||
|
|
||||||
function setactiveslotcolor(){
|
function setactiveslotcolor(){
|
||||||
if (arguments.length == 4) {
|
if (arguments.length == 4) {
|
||||||
active_slot_color = [arguments[0], arguments[1], arguments[2], arguments[3]];
|
active_slot_color = [arguments[0], arguments[1], arguments[2], arguments[3]];
|
||||||
@@ -2092,12 +2171,7 @@ function setactiveslotcolor(){
|
|||||||
}
|
}
|
||||||
setactiveslotcolor.local = 1;
|
setactiveslotcolor.local = 1;
|
||||||
|
|
||||||
declareattribute("stored_slot_color", "getstoredslotcolor", "setstoredslotcolor", 1, {style: "rgba", label: "Stored Slot Color", category: "Appearance"});
|
declareattribute("stored_slot_color", null, "setstoredslotcolor", 1, {style: "rgba", label: "Stored Slot Color", category: "Appearance"});
|
||||||
function getstoredslotcolor() {
|
|
||||||
return stored_slot_color;
|
|
||||||
}
|
|
||||||
getstoredslotcolor.local = 1;
|
|
||||||
|
|
||||||
function setstoredslotcolor(){
|
function setstoredslotcolor(){
|
||||||
if (arguments.length == 4) {
|
if (arguments.length == 4) {
|
||||||
stored_slot_color = [arguments[0], arguments[1], arguments[2], arguments[3]];
|
stored_slot_color = [arguments[0], arguments[1], arguments[2], arguments[3]];
|
||||||
@@ -2110,12 +2184,7 @@ function setstoredslotcolor(){
|
|||||||
}
|
}
|
||||||
setstoredslotcolor.local = 1;
|
setstoredslotcolor.local = 1;
|
||||||
|
|
||||||
declareattribute("interp_slot_color", "getinterpslotcolor", "setinterpslotcolor", 1, {style: "rgba", label: "Interpolating slot color", category: "Appearance"});
|
declareattribute("interp_slot_color", null, "setinterpslotcolor", 1, {style: "rgba", label: "Interpolating slot color", category: "Appearance"});
|
||||||
function getinterpslotcolor() {
|
|
||||||
return interp_slot_color;
|
|
||||||
}
|
|
||||||
getinterpslotcolor.local = 1;
|
|
||||||
|
|
||||||
function setinterpslotcolor(){
|
function setinterpslotcolor(){
|
||||||
if (arguments.length == 4) {
|
if (arguments.length == 4) {
|
||||||
interp_slot_color = [arguments[0], arguments[1], arguments[2], arguments[3]];
|
interp_slot_color = [arguments[0], arguments[1], arguments[2], arguments[3]];
|
||||||
@@ -2128,11 +2197,7 @@ function setinterpslotcolor(){
|
|||||||
}
|
}
|
||||||
setinterpslotcolor.local = 1;
|
setinterpslotcolor.local = 1;
|
||||||
|
|
||||||
declareattribute("text_color", "gettextcolor", "settextcolor", 1, {style: "rgba", label: "Text Color", category: "Appearance"});
|
declareattribute("text_color", null, "settextcolor", 1, {style: "rgba", label: "Text Color", category: "Appearance"});
|
||||||
function gettextcolor() {
|
|
||||||
return text_color;
|
|
||||||
}
|
|
||||||
gettextcolor.local = 1;
|
|
||||||
function settextcolor(){
|
function settextcolor(){
|
||||||
if (arguments.length == 4) {
|
if (arguments.length == 4) {
|
||||||
text_color = [arguments[0], arguments[1], arguments[2], arguments[3]];
|
text_color = [arguments[0], arguments[1], arguments[2], arguments[3]];
|
||||||
@@ -2201,12 +2266,7 @@ function setfontname(v){
|
|||||||
}
|
}
|
||||||
setfontname.local = 1;
|
setfontname.local = 1;
|
||||||
|
|
||||||
declareattribute("menu_mode", "getmenu_mode", "setmenu_mode", 1, {style: "enumindex", enumvals: ["Preset number + name", "Preset number", "Preset name"], label: "Menu Mode"});
|
declareattribute("menu_mode", null, "setmenu_mode", 1, {style: "enumindex", enumvals: ["Preset number + name", "Preset number", "Preset name"], label: "Menu Mode"});
|
||||||
function getmenu_mode() {
|
|
||||||
return menu_mode;
|
|
||||||
}
|
|
||||||
getmenu_mode.local = 1;
|
|
||||||
|
|
||||||
function setmenu_mode(v){
|
function setmenu_mode(v){
|
||||||
if (arguments.length == 1) {
|
if (arguments.length == 1) {
|
||||||
menu_mode = Math.min(Math.max(0, parseInt(v)), 2);
|
menu_mode = Math.min(Math.max(0, parseInt(v)), 2);
|
||||||
@@ -2245,12 +2305,7 @@ function setignoreslotzero(v){
|
|||||||
}
|
}
|
||||||
setignoreslotzero.local = 1;
|
setignoreslotzero.local = 1;
|
||||||
|
|
||||||
declareattribute("display_interp", "getdisplayinterp", "setdisplayinterp", 1, {style: "onoff", label: "Display Interpolations", category: "Appearance"});
|
declareattribute("display_interp", null, "setdisplayinterp", 1, { style: "onoff", label: "Display Interpolations", category: "Appearance" });
|
||||||
function getdisplayinterp() {
|
|
||||||
return display_interp;
|
|
||||||
}
|
|
||||||
getdisplayinterp.local = 1;
|
|
||||||
|
|
||||||
function setdisplayinterp(v){
|
function setdisplayinterp(v){
|
||||||
if (v == 0) {
|
if (v == 0) {
|
||||||
display_interp = 0;
|
display_interp = 0;
|
||||||
@@ -2260,12 +2315,7 @@ function setdisplayinterp(v){
|
|||||||
}
|
}
|
||||||
setdisplayinterp.local = 1;
|
setdisplayinterp.local = 1;
|
||||||
|
|
||||||
declareattribute("layout", "getlayout", "setlayout", 1, {style: "enumindex", enumvals: ["Grid", "List"], label: "Layout", category: "Appearance"});
|
declareattribute("layout", null, "setlayout", 1, {style: "enumindex", enumvals: ["Grid", "List"], label: "Layout", category: "Appearance"});
|
||||||
function getlayout() {
|
|
||||||
return layout;
|
|
||||||
}
|
|
||||||
getlayout.local = 1;
|
|
||||||
|
|
||||||
function setlayout(v){
|
function setlayout(v){
|
||||||
if (v == 0) {
|
if (v == 0) {
|
||||||
layout = 0;
|
layout = 0;
|
||||||
@@ -2277,12 +2327,7 @@ function setlayout(v){
|
|||||||
}
|
}
|
||||||
setlayout.local = 1;
|
setlayout.local = 1;
|
||||||
|
|
||||||
declareattribute("scrollable", "getscrollable", "setscrollable", 1, {style: "onoff", label: "Scrollable"});
|
declareattribute("scrollable", null, "setscrollable", 1, {style: "onoff", label: "Scrollable"});
|
||||||
function getscrollable() {
|
|
||||||
return scrollable;
|
|
||||||
}
|
|
||||||
getscrollable.local = 1;
|
|
||||||
|
|
||||||
function setscrollable(v){
|
function setscrollable(v){
|
||||||
if (v == 0) {
|
if (v == 0) {
|
||||||
scrollable = 0;
|
scrollable = 0;
|
||||||
@@ -2294,11 +2339,7 @@ function setscrollable(v){
|
|||||||
}
|
}
|
||||||
setscrollable.local = 1;
|
setscrollable.local = 1;
|
||||||
|
|
||||||
declareattribute("min_rows", "getmin_rows", "setmin_rows", 1, {type: "long", min: 1, label: "Minimum Rows"});
|
declareattribute("min_rows", null, "setmin_rows", 1, {type: "long", min: 1, label: "Minimum Rows"});
|
||||||
function getmin_rows() {
|
|
||||||
return min_rows;
|
|
||||||
}
|
|
||||||
getmin_rows.local = 1;
|
|
||||||
function setmin_rows(v){
|
function setmin_rows(v){
|
||||||
if (v > 0) {
|
if (v > 0) {
|
||||||
min_rows = v;
|
min_rows = v;
|
||||||
@@ -2311,24 +2352,18 @@ setmin_rows.local = 1;
|
|||||||
|
|
||||||
declareattribute("click_mode", null, null, 1, { style: "enumindex", enumvals: ["Recall", "Select", "Store", "Delete"], default: 0, label: "Click Mode", paint: 1});
|
declareattribute("click_mode", null, null, 1, { style: "enumindex", enumvals: ["Recall", "Select", "Store", "Delete"], default: 0, label: "Click Mode", paint: 1});
|
||||||
|
|
||||||
declareattribute("select_mode", "getselect_mode", "setselect_mode", 1, {style: "onoff", label: "Select Mode", invisible: 1});
|
declareattribute("select_mode", null, "setselect_mode", 1, {style: "onoff", label: "Select Mode", invisible: 1});
|
||||||
function getselect_mode() {
|
|
||||||
return select_mode;
|
|
||||||
}
|
|
||||||
getselect_mode.local = 1;
|
|
||||||
|
|
||||||
function setselect_mode(v) {
|
function setselect_mode(v) {
|
||||||
select_mode = v ? 1 : 0;
|
select_mode = v ? 1 : 0;
|
||||||
if (select_mode) this.box.message("click_mode", v);
|
if (select_mode) this.box.message("click_mode", v);
|
||||||
}
|
}
|
||||||
setselect_mode.local = 1;
|
setselect_mode.local = 1;
|
||||||
|
|
||||||
declareattribute("color_mode", "getcolor_mode", "setcolor_mode", 1, {type: "long", min: 0, max: 3, style: "enumindex", enumvals: ["Classic", "Cycle", "Select", "Custom"], label: "Color Mode", category: "Appearance"});
|
declareattribute("drag_mode", null, null, 1, { style: "enumindex", enumvals: ["Disabled", "Move", "In-Line Interp", "Interp"], default: 1, label: "Drag Mode", paint: 1 });
|
||||||
function getcolor_mode() {
|
|
||||||
return color_mode;
|
|
||||||
}
|
|
||||||
getcolor_mode.local = 1;
|
|
||||||
|
|
||||||
|
declareattribute("drag_interp_radius", null, null, 1, { type: "float", min: 1, default: 1, label: "Drag Interpolation Radius" });
|
||||||
|
|
||||||
|
declareattribute("color_mode", null, "setcolor_mode", 1, {type: "long", min: 0, max: 3, style: "enumindex", enumvals: ["Classic", "Cycle", "Select", "Custom"], label: "Color Mode", category: "Appearance"});
|
||||||
function setcolor_mode(v){
|
function setcolor_mode(v){
|
||||||
v = Math.floor(v);
|
v = Math.floor(v);
|
||||||
v = Math.max(0, Math.min(3, v));
|
v = Math.max(0, Math.min(3, v));
|
||||||
@@ -2353,12 +2388,7 @@ function setcolor_mode(v){
|
|||||||
}
|
}
|
||||||
setcolor_mode.local = 1;
|
setcolor_mode.local = 1;
|
||||||
|
|
||||||
declareattribute("color_1", "getcolor1", "setcolor1", 1, {style: "rgba", label: "Color 1", category: "Appearance"});
|
declareattribute("color_1", null, "setcolor1", 1, {style: "rgba", label: "Color 1", category: "Appearance"});
|
||||||
function getcolor1() {
|
|
||||||
return color_1;
|
|
||||||
}
|
|
||||||
getcolor1.local = 1;
|
|
||||||
|
|
||||||
function setcolor1(){
|
function setcolor1(){
|
||||||
if (arguments.length == 4) {
|
if (arguments.length == 4) {
|
||||||
color_wheel(1, arguments[0], arguments[1], arguments[2], arguments[3]);
|
color_wheel(1, arguments[0], arguments[1], arguments[2], arguments[3]);
|
||||||
@@ -2370,12 +2400,7 @@ function setcolor1(){
|
|||||||
}
|
}
|
||||||
setcolor1.local = 1;
|
setcolor1.local = 1;
|
||||||
|
|
||||||
declareattribute("color_2", "getcolor2", "setcolor2", 1, {style: "rgba", label: "Color 2", category: "Appearance"});
|
declareattribute("color_2", null, "setcolor2", 1, {style: "rgba", label: "Color 2", category: "Appearance"});
|
||||||
function getcolor2() {
|
|
||||||
return color_2;
|
|
||||||
}
|
|
||||||
getcolor2.local = 1;
|
|
||||||
|
|
||||||
function setcolor2(){
|
function setcolor2(){
|
||||||
if (arguments.length == 4) {
|
if (arguments.length == 4) {
|
||||||
color_wheel(2, arguments[0], arguments[1], arguments[2], arguments[3]);
|
color_wheel(2, arguments[0], arguments[1], arguments[2], arguments[3]);
|
||||||
@@ -2387,12 +2412,7 @@ function setcolor2(){
|
|||||||
}
|
}
|
||||||
setcolor2.local = 1;
|
setcolor2.local = 1;
|
||||||
|
|
||||||
declareattribute("color_3", "getcolor3", "setcolor3", 1, {style: "rgba", label: "Color 3", category: "Appearance"});
|
declareattribute("color_3", null, "setcolor3", 1, {style: "rgba", label: "Color 3", category: "Appearance"});
|
||||||
function getcolor3() {
|
|
||||||
return color_3;
|
|
||||||
}
|
|
||||||
getcolor3.local = 1;
|
|
||||||
|
|
||||||
function setcolor3(){
|
function setcolor3(){
|
||||||
if (arguments.length == 4) {
|
if (arguments.length == 4) {
|
||||||
color_wheel(3, arguments[0], arguments[1], arguments[2], arguments[3]);
|
color_wheel(3, arguments[0], arguments[1], arguments[2], arguments[3]);
|
||||||
@@ -2404,12 +2424,7 @@ function setcolor3(){
|
|||||||
}
|
}
|
||||||
setcolor3.local = 1;
|
setcolor3.local = 1;
|
||||||
|
|
||||||
declareattribute("color_4", "getcolor4", "setcolor4", 1, {style: "rgba", label: "Color 4", category: "Appearance"});
|
declareattribute("color_4", null, "setcolor4", 1, {style: "rgba", label: "Color 4", category: "Appearance"});
|
||||||
function getcolor4() {
|
|
||||||
return color_4;
|
|
||||||
}
|
|
||||||
getcolor4.local = 1;
|
|
||||||
|
|
||||||
function setcolor4(){
|
function setcolor4(){
|
||||||
if (arguments.length == 4) {
|
if (arguments.length == 4) {
|
||||||
color_wheel(4, arguments[0], arguments[1], arguments[2], arguments[3]);
|
color_wheel(4, arguments[0], arguments[1], arguments[2], arguments[3]);
|
||||||
@@ -2421,12 +2436,7 @@ function setcolor4(){
|
|||||||
}
|
}
|
||||||
setcolor4.local = 1;
|
setcolor4.local = 1;
|
||||||
|
|
||||||
declareattribute("color_5", "getcolor5", "setcolor5", 1, {style: "rgba", label: "Color 5", category: "Appearance"});
|
declareattribute("color_5", null, "setcolor5", 1, {style: "rgba", label: "Color 5", category: "Appearance"});
|
||||||
function getcolor5() {
|
|
||||||
return color_5;
|
|
||||||
}
|
|
||||||
getcolor5.local = 1;
|
|
||||||
|
|
||||||
function setcolor5(){
|
function setcolor5(){
|
||||||
if (arguments.length == 4) {
|
if (arguments.length == 4) {
|
||||||
color_wheel(5, arguments[0], arguments[1], arguments[2], arguments[3]);
|
color_wheel(5, arguments[0], arguments[1], arguments[2], arguments[3]);
|
||||||
@@ -2438,12 +2448,7 @@ function setcolor5(){
|
|||||||
}
|
}
|
||||||
setcolor5.local = 1;
|
setcolor5.local = 1;
|
||||||
|
|
||||||
declareattribute("color_6", "getcolor6", "setcolor6", 1, {style: "rgba", label: "Color 6", category: "Appearance"});
|
declareattribute("color_6", null, "setcolor6", 1, {style: "rgba", label: "Color 6", category: "Appearance"});
|
||||||
function getcolor6() {
|
|
||||||
return color_6;
|
|
||||||
}
|
|
||||||
getcolor6.local = 1;
|
|
||||||
|
|
||||||
function setcolor6(){
|
function setcolor6(){
|
||||||
if (arguments.length == 4) {
|
if (arguments.length == 4) {
|
||||||
color_wheel(6, arguments[0], arguments[1], arguments[2], arguments[3]);
|
color_wheel(6, arguments[0], arguments[1], arguments[2], arguments[3]);
|
||||||
@@ -2455,12 +2460,7 @@ function setcolor6(){
|
|||||||
}
|
}
|
||||||
setcolor6.local = 1;
|
setcolor6.local = 1;
|
||||||
|
|
||||||
declareattribute("send_name", "getsendname", "setsendname", 1, {type: "symbol", label: "Send Dictionary To"});
|
declareattribute("send_name", null, "setsendname", 1, {type: "symbol", label: "Send Dictionary To"});
|
||||||
function getsendname() {
|
|
||||||
return send_name;
|
|
||||||
}
|
|
||||||
getsendname.local = 1;
|
|
||||||
|
|
||||||
function setsendname(){
|
function setsendname(){
|
||||||
if (arguments.length > 0) {
|
if (arguments.length > 0) {
|
||||||
send_name = arguments[0];
|
send_name = arguments[0];
|
||||||
@@ -2470,12 +2470,7 @@ function setsendname(){
|
|||||||
}
|
}
|
||||||
setsendname.local = 1;
|
setsendname.local = 1;
|
||||||
|
|
||||||
declareattribute("unique_names", "getunique_names", "setunique_names", 1, {style: "onoff", label: "Force Unique Names"});
|
declareattribute("unique_names", null, "setunique_names", 1, {style: "onoff", label: "Force Unique Names"});
|
||||||
function getunique_names() {
|
|
||||||
return unique_names;
|
|
||||||
}
|
|
||||||
getunique_names.local = 1;
|
|
||||||
|
|
||||||
function setunique_names(v){
|
function setunique_names(v){
|
||||||
unique_names = v > 0;
|
unique_names = v > 0;
|
||||||
}
|
}
|
||||||
@@ -2483,12 +2478,7 @@ setunique_names.local = 1;
|
|||||||
|
|
||||||
declareattribute("autoname", null, null, 1, { style: "onoff", label: "Autoname new presets" });
|
declareattribute("autoname", null, null, 1, { style: "onoff", label: "Autoname new presets" });
|
||||||
|
|
||||||
declareattribute("use_uid", "getuse_uid", "setuse_uid", 1, {style: "onoff", label: "Use UID"});
|
declareattribute("use_uid", null, "setuse_uid", 1, {style: "onoff", label: "Use UID"});
|
||||||
function getuse_uid() {
|
|
||||||
return use_uid;
|
|
||||||
}
|
|
||||||
getuse_uid.local = 1;
|
|
||||||
|
|
||||||
function setuse_uid(v){
|
function setuse_uid(v){
|
||||||
var new_val = v == 1 ? 1 : 0;
|
var new_val = v == 1 ? 1 : 0;
|
||||||
if (new_val != use_uid && new_val == 1) {
|
if (new_val != use_uid && new_val == 1) {
|
||||||
@@ -2517,23 +2507,19 @@ function settimestamp(v){
|
|||||||
}
|
}
|
||||||
settimestamp.local = 1;
|
settimestamp.local = 1;
|
||||||
|
|
||||||
declareattribute("recall_passthrough", "getrecall_passthrough", "setrecall_passthrough", 1, {style: "onoff", label: "Recall Passthrough"});
|
declareattribute("recall_passthrough", null, "setrecall_passthrough", 1, {style: "onoff", label: "Recall Passthrough"});
|
||||||
function getrecall_passthrough() {
|
|
||||||
return recall_passthrough;
|
|
||||||
}
|
|
||||||
getrecall_passthrough.local = 1;
|
|
||||||
|
|
||||||
function setrecall_passthrough(v){
|
function setrecall_passthrough(v){
|
||||||
recall_passthrough = v > 0;
|
recall_passthrough = v > 0;
|
||||||
}
|
}
|
||||||
setrecall_passthrough.local = 1;
|
setrecall_passthrough.local = 1;
|
||||||
|
|
||||||
declareattribute("ui_rename", "getui_rename", "setui_rename", 1, {style: "onoff", label: "Rename In UI"});
|
declareattribute("store_passthrough", null, "setstore_passthrough", 1, {style: "onoff", label: "Store Passthrough"});
|
||||||
function getui_rename() {
|
function setstore_passthrough(v){
|
||||||
return ui_rename;
|
store_passthrough = v > 0;
|
||||||
}
|
}
|
||||||
getui_rename.local = 1;
|
setstore_passthrough.local = 1;
|
||||||
|
|
||||||
|
declareattribute("ui_rename", null, "setui_rename", 1, {style: "onoff", label: "Rename In UI"});
|
||||||
function setui_rename(v){
|
function setui_rename(v){
|
||||||
ui_rename = v > 0;
|
ui_rename = v > 0;
|
||||||
if (ui_rename) {
|
if (ui_rename) {
|
||||||
@@ -2542,12 +2528,7 @@ function setui_rename(v){
|
|||||||
}
|
}
|
||||||
setui_rename.local = 1;
|
setui_rename.local = 1;
|
||||||
|
|
||||||
declareattribute("poll_edited", "getpoll_edited", "setpoll_edited", 1, {type: "float", min: 0, label: "Poll Edited State"});
|
declareattribute("poll_edited", null, "setpoll_edited", 1, {type: "float", min: 0, label: "Poll Edited State"});
|
||||||
function getpoll_edited() {
|
|
||||||
return poll_edited;
|
|
||||||
}
|
|
||||||
getpoll_edited.local = 1;
|
|
||||||
|
|
||||||
function setpoll_edited(v){
|
function setpoll_edited(v){
|
||||||
poll_edited = v == 0 ? 0 : Math.max(0.1, Math.abs(v));
|
poll_edited = v == 0 ? 0 : Math.max(0.1, Math.abs(v));
|
||||||
if (poll_edited > 0) {
|
if (poll_edited > 0) {
|
||||||
@@ -2578,12 +2559,7 @@ function do_poll_edited() {
|
|||||||
}
|
}
|
||||||
do_poll_edited.local = 1;
|
do_poll_edited.local = 1;
|
||||||
|
|
||||||
declareattribute("edited_color", "getedited_color", "setedited_color", 1, {style: "rgba", label: "Edited Dot Color", category: "Appearance"});
|
declareattribute("edited_color", null, "setedited_color", 1, {style: "rgba", label: "Edited Dot Color", category: "Appearance"});
|
||||||
function getedited_color() {
|
|
||||||
return edited_color;
|
|
||||||
}
|
|
||||||
getedited_color.local = 1;
|
|
||||||
|
|
||||||
function setedited_color(){
|
function setedited_color(){
|
||||||
if (arguments.length == 4) {
|
if (arguments.length == 4) {
|
||||||
edited_color = [arguments[0], arguments[1], arguments[2], arguments[3]];
|
edited_color = [arguments[0], arguments[1], arguments[2], arguments[3]];
|
||||||
@@ -2603,12 +2579,7 @@ function edited(v) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
declareattribute("nbslot_edit", "getnbslot_edit", "setnbslot_edit", 1, {style: "onoff", label: "Add/remove rows of presets"});
|
declareattribute("nbslot_edit", null, "setnbslot_edit", 1, {style: "onoff", label: "Add/remove rows of presets"});
|
||||||
function getnbslot_edit() {
|
|
||||||
return nbslot_edit;
|
|
||||||
}
|
|
||||||
getnbslot_edit.local = 1;
|
|
||||||
|
|
||||||
function setnbslot_edit(v){
|
function setnbslot_edit(v){
|
||||||
nbslot_edit = v > 0;
|
nbslot_edit = v > 0;
|
||||||
y_offset = 0;
|
y_offset = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user