grid-apps-cmms/src/kiri/stacks.js

117 lines
2.8 KiB
JavaScript
Raw Normal View History

2020-11-08 10:55:36 -05:00
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict";
(function() {
2020-11-30 23:01:16 -05:00
let KIRI = self.kiri,
stacks = {},
freeMem = true,
2020-11-08 10:55:36 -05:00
tallest = 0,
min = 0,
max = 0,
labels, API, UC, UI, DYN;
function init() {
labels = $("layers");
API = KIRI.api,
UC = API.uc,
2020-11-09 13:57:18 -05:00
UI = API.ui;
2020-11-08 10:55:36 -05:00
}
function setFreeMem(bool) {
freeMem = bool;
return this;
}
2020-11-08 10:55:36 -05:00
function clear() {
if (!API) {
init();
}
// remove stacks from their views
for (const [stack, data] of Object.entries(stacks)) {
data.clear();
}
min = max = tallest = 0;
stacks = {};
2020-11-09 13:57:18 -05:00
DYN = UI.dyn = {};
2020-11-08 10:55:36 -05:00
// clear labels
UC.setGroup(labels);
labels.innerHTML = '';
}
2020-11-14 12:07:05 -05:00
function getStack(name) {
return stacks[name];
}
2020-11-08 10:55:36 -05:00
function create(name, view) {
if (stacks[name]) {
return stacks[name];
}
const stack = stacks[name] = {
layers: [ ],
2020-11-30 23:01:16 -05:00
obj: new KIRI.Stack(view),
add: function(layers) {
let map = stack.obj.addLayers(layers);
for (const [label, mats] of Object.entries(map)) {
if (!DYN[label]) {
DYN[label] = {
group: [],
toggle: UC.newBoolean(label, (abc) => {
ctrl.group.forEach(mat => {
mat.visible = ctrl.toggle.checked;
});
})
};
}
const ctrl = DYN[label];
ctrl.group.appendAll(mats);
ctrl.toggle.checked = mats.state;
}
tallest = Math.max(tallest, stack.obj.size());
2020-11-08 10:55:36 -05:00
},
remove: function() {
2020-11-30 23:01:16 -05:00
view.remove(stack.obj.view);
},
2020-11-08 10:55:36 -05:00
clear: function() {
2020-11-30 23:01:16 -05:00
view.remove(stack.obj.view);
},
button: function(label, action) {
UC.newRow([ UC.newButton(label, action) ]);
2020-11-08 10:55:36 -05:00
}
};
return stack;
}
function remove(name) {
const stack = stacks[name];
if (stack) {
stack.remove();
delete stacks[name];
}
}
2020-11-08 10:55:36 -05:00
function getRange() {
return {min, max, tallest};
}
function setRange(newMin, newMax) {
2020-11-30 23:01:16 -05:00
Object.values(stacks).forEach(stack => {
stack.obj.setVisible(newMin,newMax);
});
2020-11-08 10:55:36 -05:00
min = newMin;
max = newMax;
}
KIRI.stacks = {
clear,
create,
remove,
2020-11-14 12:07:05 -05:00
getStack,
2020-11-08 10:55:36 -05:00
getRange,
setRange,
setFreeMem
2020-11-08 10:55:36 -05:00
};
})();