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