From 6be6b8d944a0e3ecde85af293443675f7c82b43f Mon Sep 17 00:00:00 2001 From: sparks-alec Date: Sat, 15 Jan 2022 00:25:58 -0500 Subject: [PATCH] add Cue Carts, finally --- plugins/qlab/img/pause_circled.png | Bin 0 -> 1517 bytes plugins/qlab/img/play_circled.png | Bin 0 -> 1400 bytes plugins/qlab/img/status_broken_white.png | Bin 0 -> 1212 bytes plugins/qlab/qlab.css | 55 +++++++++++++ plugins/qlab/qlab.html | 99 ++++++++++++++++++++--- plugins/qlab/qlab.js | 49 +++++++---- 6 files changed, 174 insertions(+), 29 deletions(-) create mode 100644 plugins/qlab/img/pause_circled.png create mode 100644 plugins/qlab/img/play_circled.png create mode 100644 plugins/qlab/img/status_broken_white.png diff --git a/plugins/qlab/img/pause_circled.png b/plugins/qlab/img/pause_circled.png new file mode 100644 index 0000000000000000000000000000000000000000..78d7b510f0789194977ec85cd75ebaaa292b6613 GIT binary patch literal 1517 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC#^NA%Cx&(BWL^R}oCO|{#S9E$ zsvykh8Km-ofq^+LGbExU!q>+tIX_n~F(p4KRj(qq0H~UQ!KT6r$jnVGNmQuF&B-ga zs<2f8tFQvHLBje<3ScEA*|tg%z5xo(`9-M;rg|oN21<5Z3JMA~MJZ`kK`w4k?LeNb zQbtKhft9{~d3m{Bxv^e;QM$gNrKP35fswwEkuFe$ZgFK^Nn(X=Ua>O75STeGsl~}f znFS@8`FRQ;a}$&DOG|8(lt3220mPjt$#8oLN{e#9wxlHMr{<*QrskCt>l^AB>SNOf z^etRtUNJN@fZ?KFkyrrKWPnvuNoE?tTPV6fG7xRx(11A7CMDS_1>qGW8K68kz#MZ* zP(@)9IhmkMWacQ885?~)Z${GHak9M`zF@6hAt9%Xv7Px1BEzW(9-ZQn-o zsr;M5C7-ihow?}#2?myBofq5p{peVi>{>I)lu<9cTfgR;-m>FPVQj)heD{yMaOL?r zU590ZUwl%D-P&hGySfRG`tXGc z-vafHjR~?Tp`6}}cVBjrT{Y*J9e=RyM~6<{aPxcf+wX3>?{wbl!4j>jPm3aNrI^i5 zJ!hUf|K*?P%8L(Q=9e1X+%77+IYR4Uacxpq;%S{1HB8}#nNi1fZTXwSr#auTr1iC z^Y;vHiS75?8uv*X|7_DeoZ;T^x!)*G^SIWH1f9?z{jaVwRraoR3JQ+ABpt1C@b-VN zV_ou>5>C8vSrHdqyj4bM-VFm5&6jUWr(1?AJ}XfQ`!Kcq!@3l?V-YuwWY|8J%?Uht zH&gL-cI<=M5_`MbW&Mw?6FMkvx43)ZzNuUPx|`QFFYCUa%;O_#?>b-V!L8af2g_Cd gybZTCpK$$Qa5}srsOmrfC#VeeboFyt=akR{0Gbadq5uE@ literal 0 HcmV?d00001 diff --git a/plugins/qlab/img/play_circled.png b/plugins/qlab/img/play_circled.png new file mode 100644 index 0000000000000000000000000000000000000000..2de8ba778b0ef5ac88d4944b6c67db24f2dcf0d3 GIT binary patch literal 1400 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&a=a^|Sakcg59UmvUF{9L`nl>DSry^7odplSvNn+hu+GdHy)QK2F?C$HG5 z!d3~a!V1U+3F|8Y3;nDA{o-C@9zzrKDK}xwt{K19`Se z86_nJR{Hwo<>h+i#(Mch>H3D2mX`VkM*2oZx=P7{9O-#x!EwNQn0$BtH5O<~|!|f?3Ey@Agl9H^SnvVRek4+!Y zw{VSl#n8|IhKqhhVgXQ-0ai^VnP~`bq38n1K(v8F1L8=Vlw_+EgjbMcfb!q~bId70 z6@^LUWP$?HDkm{7-BzhWHzhSKu{5Vd$*v$Lu`)h6vnV+yHASx=FWp8T6h1kbsHQ+f zQ4P1z$LSgyU|?7|7o{ea`b9rkj2o|`xj*bV>A(Djh!J>J+c_O`hbl5 zl6+v&Ey_&x%qvMP0$K*u4RauF6;QJv;fRzP!NCj>1*Ua7E@0Te@{Ju=hf3(+?@Lyn0ILYL+ zN<{3)1wPh^ew`xkjJM6&@l)AEeXjn#-|u$c*r@Nq+Z}l5{=*+zuV`<3F7*H4x7M$Y zuiSoV&lYyOx4CZ9F;y;}4JTHri1$<_=_+4)e8MqrA;X7rtJK5iDw}WTm=^K;?AJ#R zPTbLZvzV{1{cvK=?Qiq!xo3Z9^zN{7wb0F9lfM7mU5okWHT#mIbi_>N`ep8od*Afa zKVD{2r1^27;^W`K?3SNNFi<#b&=KyqH?IHITQlA1-du+bS}&{JSQH-i-h-{+n)gu? z-&fy%o5=N_ER@OG8s%!)6fAl`b(PMv)QPWmnMn1nxc&CoQ%=9Hy!#|mQx!k*o;vcq zc9xIYlgcTL%uy&aHZ-u&N0&y#h7Cxi zRZwbiehyH5eqLx^W{I7VjXpMEbY0H*xdlb3#l=8vcBW7*$YSW~{fjbz5t|6I#?BC` z9$5@seLzNjNj@+I7iA`U=9Q!t0WE{-hB*+o3aD9-a70R!;9!P`0+YNQ7cgvK*~gB{ ze`owkV2=9Y>Eak-A-HyOCf6YY0k>v$!95*OfiWw;+c#Br|8Up*%BwbMS@Nu=)`#9{ zm6^+hlmGp_Qfm9^bk5a|#j92+&suuu#N5DQhxT46X^X|5-5hRCn0&MOxYrGd#t8+k z)3ccTxF<3{&es=MbKsgH&;2RQESorzU(Gwh%c{Dom{Y9CG5p;0B}|NE?%!`5srzKM z(!xiGqk+9Fd2V}Qz5NICQ@aj)KN1(Q^2qMkJ&h(|{}TF6EZ&hE zyEXF6{#8CHQRUPP_vcH5(-hTB>^5$Bpx)CE6P3BFu6)nGolDuXV{a`x9O@zx@qQM^ bJK-wk*;mBd7by6Pf{GMRS3j3^P6 +
<% if(cue.broken){ %> -
+ <% }else if(cue.running){ %> -
+ <% }else if(cue.loaded){ %> -
+ <% }else if(cue.flagged){ %> -
+ <% }else{ %> - + <% } %> +
@@ -132,6 +134,10 @@ <% groupModes.pop(); %> <% } %> +<% function cartTemplate(cueList, groupModes, depth, workspace){ %> + +<% } %> +

<%= listName %>

<%= data.version || "" %>

@@ -140,9 +146,80 @@ <% for(var i in data.workspaces){ %> <% for(var j in data.workspaces[i].cueLists){ %> - <% let cueList = data.workspaces[i].cueLists[j] %> + <% + let cueList = data.workspaces[i].cueLists[j]; + let width = 100/cueList.cartRows; + let height = 600/(cueList.cartColumns+1); + %> +

<%= cueList.listName %> - <%= data.workspaces[i].displayName %>

+ + + <% if(cueList.type=="Cart"){ %> + +
+ + <% for(let r=0; r + <% for(let c=0; c +
+ <% } %> + <% } %> + + + <% for(var c in cueList.cues){ + let cue = cueList.cues[c]; + + if(!cue.cartPosition){ + continue; + } + + let row = cue.cartPosition[0]-1; + let col = cue.cartPosition[1]-1; + + let colPos = width*col; + let rowPos = height*row; + + if(col>=cueList.cartColumns || row>=cueList.cartRows){ + continue; + } + %> + +
+ +
+ <% if(cue.broken){ %> + + <% }else if(cue.running){ %> + + <% }else{ %> + + <% } %> +
+
+

<%= cue.number %> • <%= cue.displayName %>

+
+ +
+ + <% } %> + +
+ + + + <% }else{ %> + <% cueListOffset = 0 %> @@ -169,18 +246,14 @@ - <% cueTemplate(cueList, [], [], data.workspaces[i]) %> + <% cueTemplate(cueList, [], [], data.workspaces[i]); %>
+ + <% } %> <% } %> <% } %> - <% function prettyFormatTime(seconds){ diff --git a/plugins/qlab/qlab.js b/plugins/qlab/qlab.js index c00f6eb..8b38994 100644 --- a/plugins/qlab/qlab.js +++ b/plugins/qlab/qlab.js @@ -14,7 +14,7 @@ exports.data = function (device, osc) { const p = osc.address.split('/'); p.shift(); - // console.log(address) + //console.log(address) if (osc.address == '/reply/workspaces') { const d = JSON.parse(osc.args[0]).data; @@ -45,13 +45,20 @@ exports.data = function (device, osc) { device.data.workspaces[workspace].cueLists[d[i].uniqueID].cues = d[i].cues; + device.data.workspaces[workspace].allCues[d[i].uniqueID] = d[i]; + + if(d[i].type=="Cart"){ + device.send(`/cue_id/${d[i].uniqueID}/cartColumns`); + device.send(`/cue_id/${d[i].uniqueID}/cartRows`); + } + function getMoreCueInfo(group, groups_arg) { const groups = JSON.parse(JSON.stringify(groups_arg)); groups.push(group.uniqueID); for (let cueIndex in group.cues) { const cue = group.cues[cueIndex]; - // console.log(cue) + //console.log(cue) device.data.lastCueInGroup[group.uniqueID] = cue; @@ -62,7 +69,7 @@ exports.data = function (device, osc) { { type: 's', value: - '["mode", "parent", "isBroken", "preWait", "duration", "postWait", "continueMode", "cueTargetNumber", "isLoaded", "isRunning"]', + '["mode", "parent", "isBroken", "preWait", "duration", "postWait", "continueMode", "cueTargetNumber", "isLoaded", "isRunning", "cartPosition", "displayName"]', }, ] ); @@ -75,10 +82,14 @@ exports.data = function (device, osc) { } device.data.workspaces[workspace].allCues[cue.uniqueID] = cue; + + } } getMoreCueInfo(d[i], []); + + } // console.log(device.data.lastCueInGroup) @@ -91,28 +102,26 @@ exports.data = function (device, osc) { p[1] == 'workspace' && p[5] == 'playbackPosition' ) { - console.log('pb move'); + //console.log('pb move'); device.data.playbackPosition = osc.args[0]; device.draw(); } else if (p[0] == 'reply' && p[1] == 'cue_id') { + + const d = JSON.parse(osc.args[0]); + const cueID = p[2]; + const workspace = d.workspace_id; + const cueList = d.data.parent; + if (p[3] == 'uniqueID') { // response to /cue/playbackPosition/uniqueID - device.data.playbackPosition = JSON.parse(osc.args[0]).data; - } else if (p[3] == 'mode') { - const cueID = p[2]; - const mode = JSON.parse(osc.args[0]).data; - const workspaceID = JSON.parse(osc.args[0]).workspace_id; + device.data.playbackPosition = d.data; + + } else if (p[3] == 'mode') { + device.data.workspaces[workspace].allCues[cueID].mode = d.data; - device.data.workspaces[workspaceID].allCues[cueID].mode = mode; } else if (p[3] == 'valuesForKeys') { this.deviceInfoUpdate(device, 'status', 'ok'); - const d = JSON.parse(osc.args[0]); - - const cueID = p[2]; - const workspace = d.workspace_id; - const cueList = d.data.parent; - device.data.workspaces[workspace].allCues[cueID].mode = d.data.mode; device.data.workspaces[workspace].allCues[cueID].preWait = d.data.preWait; device.data.workspaces[workspace].allCues[cueID].duration = @@ -127,6 +136,14 @@ exports.data = function (device, osc) { device.data.workspaces[workspace].allCues[cueID].broken = d.data.isBroken; device.data.workspaces[workspace].allCues[cueID].running = d.data.isRunning; + device.data.workspaces[workspace].allCues[cueID].cartPosition = + d.data.cartPosition; + device.data.workspaces[workspace].allCues[cueID].displayName = + d.data.displayName; + }else if(p[3] == 'cartColumns'){ + device.data.workspaces[workspace].allCues[cueID].cartColumns = d.data; + }else if(p[3] == 'cartRows'){ + device.data.workspaces[workspace].allCues[cueID].cartRows = d.data; } device.draw(); } else if (p[1] == 'workspace' && p[3] == 'selectionIsPlayhead') {