complete range prototype
This commit is contained in:
parent
081a3205bf
commit
1447dd5336
2 changed files with 72 additions and 31 deletions
|
|
@ -682,44 +682,67 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// set process override values for a range
|
// set process override values for a range
|
||||||
function updateRange(lo, hi, values, noadd) {
|
function updateRange(lo, hi, values, add) {
|
||||||
let exact;
|
|
||||||
let empty = [];
|
|
||||||
// remove matching values from overlapping ranges
|
|
||||||
for (let range of getOverlappingRanges(lo, hi)) {
|
|
||||||
if (range.lo === lo && range.hi === hi) {
|
|
||||||
exact = range;
|
|
||||||
}
|
|
||||||
for (let key of Object.keys(values)) {
|
|
||||||
delete range.fields[key];
|
|
||||||
}
|
|
||||||
if (Object.keys(range.fields).length === 0) {
|
|
||||||
empty.push(range);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let ranges = settings.process.ranges;
|
let ranges = settings.process.ranges;
|
||||||
// clear out empty ranges
|
let slices = {};
|
||||||
if (empty.length) {
|
let min = lo;
|
||||||
for (let range of empty) {
|
let max = hi;
|
||||||
let pos = ranges.indexOf(range);
|
|
||||||
if (pos >= 0) {
|
// just remove values from matching ranges
|
||||||
ranges.splice(pos,1);
|
if (!add) {
|
||||||
|
for (let range of getOverlappingRanges(lo, hi)) {
|
||||||
|
for (let key of Object.keys(values)) {
|
||||||
|
delete range.fields[key];
|
||||||
|
}
|
||||||
|
if (Object.keys(range.fields).length === 0) {
|
||||||
|
let pos = ranges.indexOf(range);
|
||||||
|
if (pos >= 0) {
|
||||||
|
ranges.splice(pos,1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// noadd flag present when range is 0-max
|
|
||||||
if (noadd) {
|
|
||||||
API.event.emit("range.updates", ranges);
|
API.event.emit("range.updates", ranges);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// add values to matched range or new range
|
|
||||||
if (!exact) {
|
// flatten ranges
|
||||||
exact = { lo, hi, fields: {} };
|
ranges.push({lo, hi, fields: values});
|
||||||
ranges.push(exact);
|
for (let range of ranges) {
|
||||||
|
min = Math.min(range.lo, min);
|
||||||
|
max = Math.max(range.hi, max);
|
||||||
|
for (let i=range.lo; i<=range.hi; i++) {
|
||||||
|
let slice = slices[i];
|
||||||
|
if (!slice) {
|
||||||
|
slice = slices[i] = {};
|
||||||
|
}
|
||||||
|
for (let [key,val] of Object.entries(range.fields)) {
|
||||||
|
slice[key] = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (let key of Object.keys(values)) {
|
|
||||||
exact.fields[key] = values[key];
|
// merge contiguous matching ranges
|
||||||
|
ranges.length = 0;
|
||||||
|
let range;
|
||||||
|
for (let i=min; i<=max; i++) {
|
||||||
|
let slice = slices[i];
|
||||||
|
if (slice && !range) {
|
||||||
|
range = {lo: i, hi: i, fields: slice};
|
||||||
|
} else if (slice && range && isEquals(range.fields, slice)) {
|
||||||
|
range.hi = i;
|
||||||
|
} else if (range) {
|
||||||
|
ranges.push(range);
|
||||||
|
if (slice) {
|
||||||
|
range = {lo: i, hi: i, fields: slice};
|
||||||
|
} else {
|
||||||
|
range = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ranges.push(range);
|
||||||
|
updateFieldsFromSettings(settings.process);
|
||||||
|
API.show.alert("update ranges", 2);
|
||||||
API.event.emit("range.updates", ranges);
|
API.event.emit("range.updates", ranges);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -727,6 +750,7 @@
|
||||||
|
|
||||||
// updates editable fields that are range dependent
|
// updates editable fields that are range dependent
|
||||||
function updateFieldsFromRange() {
|
function updateFieldsFromRange() {
|
||||||
|
return;
|
||||||
if (settings.mode !== 'FDM' || viewMode !== VIEWS.SLICE || !settings.process.ranges) {
|
if (settings.mode !== 'FDM' || viewMode !== VIEWS.SLICE || !settings.process.ranges) {
|
||||||
let okeys = Object.keys(overrides);
|
let okeys = Object.keys(overrides);
|
||||||
if (okeys.length) {
|
if (okeys.length) {
|
||||||
|
|
@ -1997,6 +2021,14 @@
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
} else if (typeof(o1) === 'object' && typeof(o2) === 'object') {
|
||||||
|
let keys = Object.keys(Object.assign({}, o1, o2));
|
||||||
|
for (let key of keys) {
|
||||||
|
if (o1[key] !== o2[key]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -2009,6 +2041,8 @@
|
||||||
return console.trace("missing scope");
|
return console.trace("missing scope");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let lastChange = UC.lastChange();
|
||||||
|
|
||||||
// for each key in setrec object
|
// for each key in setrec object
|
||||||
for (let key in setrec) {
|
for (let key in setrec) {
|
||||||
if (!setrec.hasOwnProperty(key)) {
|
if (!setrec.hasOwnProperty(key)) {
|
||||||
|
|
@ -2041,6 +2075,9 @@
|
||||||
} else {
|
} else {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (lastChange === uie) {
|
||||||
|
if (changes) changes[key] = nval;
|
||||||
|
}
|
||||||
if (!isEquals(setrec[key], nval)) {
|
if (!isEquals(setrec[key], nval)) {
|
||||||
setrec[key] = nval;
|
setrec[key] = nval;
|
||||||
if (changes) {
|
if (changes) {
|
||||||
|
|
@ -2114,7 +2151,7 @@
|
||||||
}
|
}
|
||||||
updateSettingsFromFields(values, undefined, changes);
|
updateSettingsFromFields(values, undefined, changes);
|
||||||
if (range) {
|
if (range) {
|
||||||
updateRange(range.lo, range.hi, changes, !add);
|
updateRange(range.lo, range.hi, changes, add);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
updateSettingsFromFields(process);
|
updateSettingsFromFields(process);
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@
|
||||||
prefix = "tab",
|
prefix = "tab",
|
||||||
state = {},
|
state = {},
|
||||||
units = 1,
|
units = 1,
|
||||||
|
lastChange = null,
|
||||||
lastBtn = null,
|
lastBtn = null,
|
||||||
lastTxt = null,
|
lastTxt = null,
|
||||||
lastPop = null,
|
lastPop = null,
|
||||||
|
|
@ -40,6 +41,7 @@
|
||||||
KIRI.ui = {
|
KIRI.ui = {
|
||||||
prefix: function(pre) { prefix = pre; return kiri.ui },
|
prefix: function(pre) { prefix = pre; return kiri.ui },
|
||||||
inputAction: function(fn) { inputAction = fn; return kiri.ui },
|
inputAction: function(fn) { inputAction = fn; return kiri.ui },
|
||||||
|
lastChange: function() { return lastChange },
|
||||||
checkpoint,
|
checkpoint,
|
||||||
restore,
|
restore,
|
||||||
refresh,
|
refresh,
|
||||||
|
|
@ -684,6 +686,7 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
ip.addEventListener('blur', function(event) {
|
ip.addEventListener('blur', function(event) {
|
||||||
|
lastChange = ip;
|
||||||
action(event);
|
action(event);
|
||||||
if (opt.trigger) {
|
if (opt.trigger) {
|
||||||
refresh();
|
refresh();
|
||||||
|
|
@ -762,6 +765,7 @@
|
||||||
}
|
}
|
||||||
ip.setVisible = row.setVisible;
|
ip.setVisible = row.setVisible;
|
||||||
ip.onchange = function(ev) {
|
ip.onchange = function(ev) {
|
||||||
|
lastChange = ip;
|
||||||
action();
|
action();
|
||||||
};
|
};
|
||||||
ip.onclick = (ev) => {
|
ip.onclick = (ev) => {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue