diff --git a/plugins/qlab/cart.ejs b/plugins/qlab/cart.ejs
index 6b76b4f..05e7f5f 100644
--- a/plugins/qlab/cart.ejs
+++ b/plugins/qlab/cart.ejs
@@ -1,15 +1,17 @@
-
+<% let cueKeys = allCues[cueList.uniqueID]; %>
-
<%= cueList.displayName %>
+
+
+
<%= workspace.displayName %> — <%= cueList.listName %>
<%
- let width = 100/cueList.cartColumns;
- let height = 600/(cueList.cartRows);
+ let width = 100/cueKeys.cartColumns;
+ let height = 600/(cueKeys.cartRows);
%>
-<% for(let r=0; r
- <% for(let c=0; c
+<% for(let r=0; r
+ <% for(let c=0; c
<% let style = `style="left:${width*c}%; top:${height*r}px; width:${width }%; height:${height}px;"`; %>
@@ -18,25 +20,27 @@
<% } %>
-<% for(var c in cueList.cues){
- let cue = cueList.cues[c];
+<% for(let i=0; i=cueList.cartColumns || row>=cueList.cartRows){
+ if(col>=cueKeys.cartColumns || row>=cueKeys.cartRows){
continue;
- }
+ }
+
%>
-
-<%= tileTemplate({cue: allCues[cue.uniqueID], allCues: allCues}) %>
+
+<%= tileTemplate({cue: cueList.cues[i], allCues: allCues, workspace: workspace}) %>
<% } %>
diff --git a/plugins/qlab/main.js b/plugins/qlab/main.js
index 9aefe69..a2a23b3 100644
--- a/plugins/qlab/main.js
+++ b/plugins/qlab/main.js
@@ -88,71 +88,78 @@ exports.data = function data(_device, oscData) {
} else if (/reply\/cue_id\/.*\/valuesForKeys/.test(oscData.address)) {
const json = JSON.parse(oscData.args[0]);
const keyValues = json.data;
- const cue = device.data.cueKeys[msgAddr[2]];
+ let cue = device.data.cueKeys[msgAddr[2]];
if (cue === undefined) {
// this cue is new!
- console.log('HERE');
+
// device.send(`/workspace/${json.workspace_id}/cueLists`);
- // device.draw();
- } else {
- // console.log(keyValues.number);
- cue.uniqueID = keyValues.uniqueID;
- cue.number = keyValues.number;
- cue.listName = keyValues.listName;
- cue.isBroken = keyValues.isBroken;
- cue.isRunning = keyValues.isRunning;
- cue.isLoaded = keyValues.isLoaded;
- cue.isFlagged = keyValues.isFlagged;
- cue.type = keyValues.type;
- cue.cues = keyValues.children;
- cue.preWait = keyValues.preWait;
- cue.postWait = keyValues.postWait;
- cue.duration = keyValues.duration;
- cue.colorName = keyValues.colorName;
- cue.continueMode = keyValues.continueMode;
- cue.mode = keyValues.mode;
- cue.parent = keyValues.parent;
- cue.cartRows = keyValues.cartRows;
- cue.cartColumns = keyValues.cartColumns;
- cue.cartPosition = keyValues.cartPosition;
- cue.displayName = keyValues.displayName;
- cue.preWaitElapsed = keyValues.preWaitElapsed;
- cue.actionElapsed = keyValues.actionElapsed;
- cue.postWaitElapsed = keyValues.postWaitElapsed;
- cue.isPaused = keyValues.isPaused;
- cue.currentCueTarget = keyValues.currentCueTarget;
- cue.armed = keyValues.armed;
+ device.draw();
+ device.data.cueKeys[msgAddr[2]] = {};
+ cue = device.data.cueKeys[msgAddr[2]];
+ }
+ // console.log(keyValues.number);
+ cue.uniqueID = keyValues.uniqueID;
+ cue.number = keyValues.number;
+ cue.listName = keyValues.listName;
+ cue.isBroken = keyValues.isBroken;
+ cue.isRunning = keyValues.isRunning;
+ cue.isLoaded = keyValues.isLoaded;
+ cue.isFlagged = keyValues.isFlagged;
+ cue.type = keyValues.type;
+ cue.cues = keyValues.children;
+ cue.preWait = keyValues.preWait;
+ cue.postWait = keyValues.postWait;
+ cue.duration = keyValues.duration;
+ cue.colorName = keyValues.colorName;
+ cue.continueMode = keyValues.continueMode;
+ cue.mode = keyValues.mode;
+ cue.parent = keyValues.parent;
+ cue.cartRows = keyValues.cartRows;
+ cue.cartColumns = keyValues.cartColumns;
+ cue.cartPosition = keyValues.cartPosition;
+ cue.displayName = keyValues.displayName;
+ cue.preWaitElapsed = keyValues.preWaitElapsed;
+ cue.actionElapsed = keyValues.actionElapsed;
+ cue.postWaitElapsed = keyValues.postWaitElapsed;
+ cue.isPaused = keyValues.isPaused;
+ cue.currentCueTarget = keyValues.currentCueTarget;
+ cue.armed = keyValues.armed;
- if (keyValues.isRunning) {
- device.data.somethingPlaying = true;
+ if (keyValues.isRunning) {
+ device.data.somethingPlaying = true;
+ }
+
+ let testCue = device.data.cueKeys[msgAddr[2]];
+ let nestedGroupModes;
+
+ if (cue.type === 'Group') {
+ nestedGroupModes = [testCue.mode];
+ } else if (cue.parent !== '[root group of cue lists]') {
+ nestedGroupModes = [device.data.cueKeys[cue.parent].mode];
+ }
+
+ while (testCue.parent !== '[root group of cue lists]') {
+ testCue = device.data.cueKeys[testCue.parent];
+ if (testCue === undefined) {
+ break;
}
- let testCue = device.data.cueKeys[msgAddr[2]];
- let nestedGroupModes;
-
- if (cue.type === 'Group') {
- nestedGroupModes = [testCue.mode];
- } else if (cue.parent !== '[root group of cue lists]') {
- nestedGroupModes = [device.data.cueKeys[cue.parent].mode];
- }
-
- while (testCue.parent !== '[root group of cue lists]') {
- testCue = device.data.cueKeys[testCue.parent];
- if (testCue === undefined) {
- break;
- }
-
- nestedGroupModes.unshift(testCue.mode);
- cue.nestedGroupModes = nestedGroupModes;
- }
- if (cue.type === 'Cue List' || cue.type === 'Group') {
+ nestedGroupModes.unshift(testCue.mode);
+ cue.nestedGroupModes = nestedGroupModes;
+ }
+ if (cue.type === 'Cue List' || cue.type === 'Group' || cue.type === 'Cart') {
+ if (device.data.cueKeys[msgAddr[2]].cueInWorkspace) {
device.data.cueKeys[msgAddr[2]].cueInWorkspace.cues = [...keyValues.children];
}
- if (cue.type !== 'Cue List') {
- device.update('updateCueRow', { cue, workspace: device.data.workspaces[json.workspace_id] });
- }
}
+ if (cue.type !== 'Cue List' && cue.type !== 'Cart') {
+ device.update('updateCueRow', { cue, workspace: device.data.workspaces[json.workspace_id] });
+ }
+ if (cue.type === 'Cart') {
+ device.draw();
+ }
+
// console.log(cue);
} else if (/reply\/cue_id\/active\/.*Elapsed/.test(oscData.address)) {
const json = JSON.parse(oscData.args[0]);
@@ -173,6 +180,10 @@ exports.data = function data(_device, oscData) {
} else if (/update\/workspace\/.*\/cue_id\/.*/.test(oscData.address)) {
if (device.data.cueKeys[msgAddr[4]] && device.data.cueKeys[msgAddr[4]].type === 'Group') {
device.send(`/workspace/${msgAddr[2]}/cueLists`);
+ } else if (device.data.cueKeys[msgAddr[4]] && device.data.cueKeys[msgAddr[4]].type === 'Cue List') {
+ device.send(`/workspace/${msgAddr[2]}/cueLists`);
+ } else if (device.data.cueKeys[msgAddr[4]] && device.data.cueKeys[msgAddr[4]].type === 'Cart') {
+ device.send(`/workspace/${msgAddr[2]}/cueLists`);
} else {
device.send(`/cue_id/${msgAddr[4]}/valuesForKeys`, [{ type: 's', value: valuesForKeysString }]);
}
@@ -224,7 +235,21 @@ function processCueList(list, knownCueIDs, _device, _nestedIndex) {
exports.update = function update(device, doc, updateType, data) {
if (updateType === 'updateCueRow') {
const $elem = doc.getElementById(data.cue.uniqueID);
- $elem.outerHTML = device.templates.cue({ allCues: device.data.cueKeys, cue: data.cue, workspace: data.workspace });
+ if ($elem) {
+ if (device.data.cueKeys[data.cue.parent].type === 'Cart') {
+ $elem.outerHTML = device.templates.tile({
+ allCues: device.data.cueKeys,
+ cue: data.cue,
+ workspace: data.workspace,
+ });
+ } else {
+ $elem.outerHTML = device.templates.cue({
+ allCues: device.data.cueKeys,
+ cue: data.cue,
+ workspace: data.workspace,
+ });
+ }
+ }
} else if (updateType === 'updatePlaybackAndSelected') {
Array.from(doc.querySelectorAll('.selected')).forEach(($el) => {
$el.classList.remove('selected');
@@ -234,11 +259,15 @@ exports.update = function update(device, doc, updateType, data) {
});
for (let i = 0; i < data.workspace.selected.length; i++) {
const $elem = doc.getElementById(data.workspace.selected[i]);
- $elem.classList.add('selected');
+ if ($elem) {
+ $elem.classList.add('selected');
+ }
}
if (data.workspace.playbackPosition) {
const $elem = doc.getElementById(data.workspace.playbackPosition);
- $elem.classList.add('playback-position');
+ if ($elem) {
+ $elem.classList.add('playback-position');
+ }
}
}
};
diff --git a/plugins/qlab/template.ejs b/plugins/qlab/template.ejs
index b50e6a2..710d4c7 100644
--- a/plugins/qlab/template.ejs
+++ b/plugins/qlab/template.ejs
@@ -8,15 +8,13 @@
<% for(let i=0; i
<% const workspace = data.workspaces[workspaceKeys[i]]; %>
- <%= workspace.displayName %>
-
<% for(let j=0; j
<% const cueList = workspace.cueLists[j]; %>
<% if(cueList.type=="Cue List"){ %>
<%= templates.cuelist({cueList: cueList, allCues: data.cueKeys, rowTemplate: templates.cue, workspace: workspace}) %>
<% }else if(cueList.type=="Cart"){ %>
- <%= templates.cart({cueList: cueList, allCues: data.cueKeys, tileTemplate: templates.tile}) %>
+ <%= templates.cart({cueList: cueList, allCues: data.cueKeys, tileTemplate: templates.tile, workspace: workspace}) %>
<% } %>
<% } %>
diff --git a/plugins/qlab/tile.ejs b/plugins/qlab/tile.ejs
index ca8e9e2..cb796e1 100644
--- a/plugins/qlab/tile.ejs
+++ b/plugins/qlab/tile.ejs
@@ -1,17 +1,17 @@
<%
-
let height = 0;
let width = 0;
let left = 0;
let top = 0;
+ let cueKeys = allCues[cue.uniqueID];
+ let parent = allCues[cue.parent];
+ if(cueKeys.parent){
+ width = 100/allCues[cueKeys.parent].cartColumns;
+ height = 600/allCues[cueKeys.parent].cartRows;
- if(cue.parent){
- width = 100/allCues[cue.parent].cartColumns;
- height = 600/allCues[cue.parent].cartRows;
-
- top = (cue.cartPosition[0]-1)*height;
- left = (cue.cartPosition[1]-1)*width;
+ top = (cueKeys.cartPosition[0]-1)*height;
+ left = (cueKeys.cartPosition[1]-1)*width;
}
let style = `style="left:${left}%; top:${top}px; width:${width }%; height:${height}px;"`;
@@ -21,17 +21,17 @@
>
- <% if(cue.broken){ %>
+ <% if(cueKeys.isBroken){ %>

- <% }else if(cue.running){ %>
+ <% }else if(cueKeys.isRunning){ %>

<% }else{ %>

<% } %>
-
-
<%= cue.number %> • <%= cue.displayName %>
+
+
<%= cueKeys.number %> • <%= cueKeys.displayName %>
\ No newline at end of file