mirror of
https://github.com/stagehacks/Cue-View.git
synced 2026-07-26 09:18:39 +00:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 071b7d0871 | |||
| f33229c5b0 | |||
| eef0f5859d | |||
| b3f268d2a5 | |||
| 8e9f2c7c56 | |||
| 826b8d4fb0 | |||
| 42abbdef33 | |||
| c93b56d263 | |||
| 0ff27fe5ec | |||
| d29e7702df | |||
| b65823baad | |||
| 60513b93b8 | |||
| c199328e92 | |||
| fcaa955868 | |||
| 8eb8c44a81 | |||
| cdf1cf2b01 | |||
| e85dd8f248 |
@@ -1,6 +1,10 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/"
|
||||
- package-ecosystem: 'npm'
|
||||
directory: '/'
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
interval: 'weekly'
|
||||
- package-ecosystem: 'github-actions'
|
||||
directory: '/'
|
||||
schedule:
|
||||
interval: 'weekly'
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
changelog:
|
||||
exclude:
|
||||
authors:
|
||||
- dependabot
|
||||
categories:
|
||||
- title: Plugins 🖥️
|
||||
labels:
|
||||
- plugin
|
||||
- title: Interface
|
||||
labels:
|
||||
- interface
|
||||
- title: Other Changes
|
||||
labels:
|
||||
- '*'
|
||||
@@ -9,20 +9,20 @@ jobs:
|
||||
build-linux:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 18
|
||||
node-version: 20
|
||||
cache: 'npm'
|
||||
- run: npm ci
|
||||
- run: npm run release
|
||||
build-windows:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 18
|
||||
node-version: 20
|
||||
cache: 'npm'
|
||||
- run: npm ci
|
||||
- run: npm run release
|
||||
@@ -34,10 +34,10 @@ jobs:
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 18
|
||||
node-version: 20
|
||||
cache: 'npm'
|
||||
- run: npm ci
|
||||
- run: npm run release
|
||||
|
||||
@@ -38,6 +38,13 @@ const menuTemplate = [
|
||||
label: 'View',
|
||||
submenu: [
|
||||
{ role: 'togglefullscreen' },
|
||||
{
|
||||
label: 'Toggle Sidebar',
|
||||
id: 'toggleSidebar',
|
||||
click(menuItem, window, event) {
|
||||
mainWindow.webContents.send('toggleSidebar');
|
||||
},
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
label: 'Arrangement 1',
|
||||
@@ -144,7 +151,7 @@ const menuTemplate = [
|
||||
const windowMac = {
|
||||
width: 1500,
|
||||
height: 900,
|
||||
titleBarStyle: 'hiddenInset',
|
||||
titleBarStyle: 'customButtonsOnHover',
|
||||
transparent: false,
|
||||
frame: false,
|
||||
show: false,
|
||||
|
||||
-44
@@ -1,44 +0,0 @@
|
||||
const notarize = require('@electron/notarize');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
module.exports = async function (params) {
|
||||
if (process.platform !== 'darwin') {
|
||||
console.log('Only need to notarize MacOS, skipping');
|
||||
return;
|
||||
}
|
||||
|
||||
const appId = 'com.stagehacks.cueview';
|
||||
|
||||
const appPath = path.join(
|
||||
params.appOutDir,
|
||||
`${params.packager.appInfo.productFilename}.app`
|
||||
);
|
||||
|
||||
if (!fs.existsSync(appPath)) {
|
||||
console.error('App file not found skipping notarization.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
process.env.APPLE_ID === undefined ||
|
||||
process.env.APPLE_ID_PASSWORD === undefined
|
||||
) {
|
||||
console.log('Apple ID and Password must be set in order to notarize.');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
console.log(`Notarizing ${appId} found at ${appPath}`);
|
||||
await notarize.notarize({
|
||||
appBundleId: appId,
|
||||
appPath,
|
||||
appleId: process.env.APPLE_ID,
|
||||
appleIdPassword: process.env.APPLE_ID_PASSWORD,
|
||||
});
|
||||
console.log(`Done notarizing ${appId}`);
|
||||
} catch (error) {
|
||||
console.log('There was an error notarizing.');
|
||||
console.error(error);
|
||||
}
|
||||
};
|
||||
Generated
+14
-14
@@ -20,8 +20,8 @@
|
||||
"uuid": "^9.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@electron/notarize": "^2.3.0",
|
||||
"electron": "^29.1.0",
|
||||
"@electron/notarize": "^2.3.2",
|
||||
"electron": "^30.0.6",
|
||||
"electron-builder": "^24.13.3",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-config-airbnb-base": "^15.0.0",
|
||||
@@ -127,9 +127,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@electron/notarize": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.3.0.tgz",
|
||||
"integrity": "sha512-EiTBU0BwE7HZZjAG1fFWQaiQpCuPrVGn7jPss1kUjD6eTTdXXd29RiZqEqkgN7xqt/Pgn4g3I7Saqovanrfj3w==",
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.3.2.tgz",
|
||||
"integrity": "sha512-zfayxCe19euNwRycCty1C7lF7snk9YwfRpB5M8GLr1a4ICH63znxaPNAubrMvj0yDvVozqfgsdYpXVUnpWBDpg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"debug": "^4.1.1",
|
||||
@@ -2175,9 +2175,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/electron": {
|
||||
"version": "29.1.0",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-29.1.0.tgz",
|
||||
"integrity": "sha512-giJVIm0sWVp+8V1GXrKqKTb+h7no0P3ooYqEd34AD9wMJzGnAeL+usj+R0155/0pdvvP1mgydnA7lcaFA2M9lw==",
|
||||
"version": "30.0.6",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-30.0.6.tgz",
|
||||
"integrity": "sha512-PkhEPFdpYcTzjAO3gMHZ+map7g2+xCrMDedo/L1i0ir2BRXvAB93IkTJX497U6Srb/09r2cFt+k20VPNVCdw3Q==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
@@ -6116,9 +6116,9 @@
|
||||
}
|
||||
},
|
||||
"@electron/notarize": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.3.0.tgz",
|
||||
"integrity": "sha512-EiTBU0BwE7HZZjAG1fFWQaiQpCuPrVGn7jPss1kUjD6eTTdXXd29RiZqEqkgN7xqt/Pgn4g3I7Saqovanrfj3w==",
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.3.2.tgz",
|
||||
"integrity": "sha512-zfayxCe19euNwRycCty1C7lF7snk9YwfRpB5M8GLr1a4ICH63znxaPNAubrMvj0yDvVozqfgsdYpXVUnpWBDpg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"debug": "^4.1.1",
|
||||
@@ -7647,9 +7647,9 @@
|
||||
}
|
||||
},
|
||||
"electron": {
|
||||
"version": "29.1.0",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-29.1.0.tgz",
|
||||
"integrity": "sha512-giJVIm0sWVp+8V1GXrKqKTb+h7no0P3ooYqEd34AD9wMJzGnAeL+usj+R0155/0pdvvP1mgydnA7lcaFA2M9lw==",
|
||||
"version": "30.0.6",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-30.0.6.tgz",
|
||||
"integrity": "sha512-PkhEPFdpYcTzjAO3gMHZ+map7g2+xCrMDedo/L1i0ir2BRXvAB93IkTJX497U6Srb/09r2cFt+k20VPNVCdw3Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@electron/get": "^2.0.0",
|
||||
|
||||
+5
-2
@@ -20,8 +20,8 @@
|
||||
"homepage": "https://github.com/stagehacks/Cue-View",
|
||||
"repository": "https://github.com/stagehacks/Cue-View",
|
||||
"devDependencies": {
|
||||
"@electron/notarize": "^2.3.0",
|
||||
"electron": "^29.1.0",
|
||||
"@electron/notarize": "^2.3.2",
|
||||
"electron": "^30.0.6",
|
||||
"electron-builder": "^24.13.3",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-config-airbnb-base": "^15.0.0",
|
||||
@@ -48,6 +48,9 @@
|
||||
"category": "Utilities",
|
||||
"icon": "src/assets/img/icon.icns",
|
||||
"hardenedRuntime": true,
|
||||
"notarize": {
|
||||
"teamId": "JHA7H7P56J"
|
||||
},
|
||||
"electronLanguages": [
|
||||
"en"
|
||||
],
|
||||
|
||||
@@ -6,7 +6,7 @@ exports.config = {
|
||||
defaultName: 'ATEM',
|
||||
connectionType: 'atem',
|
||||
defaultPort: 9910,
|
||||
mayChangePort: false,
|
||||
mayChangePorts: false,
|
||||
searchOptions: {
|
||||
type: 'UDPScan',
|
||||
searchBuffer: Buffer.from([
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ exports.config = {
|
||||
defaultName: 'ETC Eos',
|
||||
connectionType: 'osc',
|
||||
defaultPort: 3037,
|
||||
mayChangePort: true,
|
||||
mayChangePorts: true,
|
||||
heartbeatInterval: 5000,
|
||||
heartbeatTimeout: 6000,
|
||||
searchOptions: {
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 563 B |
@@ -1,6 +0,0 @@
|
||||
<h3>Connection Requirements</h3>
|
||||
<ul>
|
||||
<li>Remote App must be set to OSC App under Remote App Interface settings</li>
|
||||
<li>Network Protocol must be set to TCP under Remote App Interface settings</li>
|
||||
<li>OSC Version must be set to 1.1 under Remote App Interface settings</li>
|
||||
</ul>
|
||||
@@ -1,242 +0,0 @@
|
||||
exports.config = {
|
||||
defaultName: 'Show Cue Systems',
|
||||
connectionType: 'osc',
|
||||
defaultPort: 58100,
|
||||
mayChangePorts: true,
|
||||
heartbeatInterval: 5000,
|
||||
searchOptions: {
|
||||
type: 'TCPport',
|
||||
searchBuffer: Buffer.from('/status', 'ascii'),
|
||||
testPort: 58100,
|
||||
validateResponse(msg, info) {
|
||||
return msg.toString().includes('/status');
|
||||
},
|
||||
},
|
||||
fields: [],
|
||||
};
|
||||
|
||||
const typeMap = {
|
||||
A: 'Video/Image',
|
||||
E: 'Memo',
|
||||
F: 'Audio File',
|
||||
G: 'GoTo Cue',
|
||||
H: 'Multi-File Cue',
|
||||
I: 'Live Input',
|
||||
J: 'Enable/Disable',
|
||||
K: 'Lighting',
|
||||
L: 'Level Change',
|
||||
M: 'Control Send',
|
||||
N: 'Note',
|
||||
P: 'Playlist',
|
||||
Q: 'Call Cue',
|
||||
R: 'Run Program',
|
||||
S: 'SFR',
|
||||
T: 'Set Position',
|
||||
U: 'MIDI Time Code',
|
||||
};
|
||||
|
||||
const versionMap = {
|
||||
10: 'LITE',
|
||||
20: 'STD',
|
||||
30: 'PRO',
|
||||
40: 'PLUS',
|
||||
45: 'DEMO',
|
||||
50: 'PLAT',
|
||||
};
|
||||
|
||||
const activationMap = {
|
||||
man: 'Manual',
|
||||
'm+c': 'Manual w/ Confirmation',
|
||||
auto: 'Auto-start',
|
||||
'a+c': 'Auto-start w/ Confirmation',
|
||||
callq: 'Call Cue',
|
||||
hot: 'Hotkey (Trigger)',
|
||||
hktg: 'Hotkey (Toggle)',
|
||||
hknt: 'Hotkey (Note)',
|
||||
time: 'Time-Based',
|
||||
ext: 'External (Trigger)',
|
||||
extg: 'External (Toggle)',
|
||||
exnt: 'External (Note)',
|
||||
mtc: 'MIDI Time Code',
|
||||
ocm: 'On Cue Marker',
|
||||
};
|
||||
|
||||
const stateMap = {
|
||||
0: 'Ready',
|
||||
1: 'Playing',
|
||||
2: 'Paused',
|
||||
3: 'Completed',
|
||||
};
|
||||
|
||||
exports.ready = function ready(_device) {
|
||||
const device = _device;
|
||||
device.data.cues = [];
|
||||
device.data.initialized = false;
|
||||
device.send('/prod/gettitle');
|
||||
};
|
||||
|
||||
exports.data = function data(_device, oscData) {
|
||||
const device = _device;
|
||||
this.deviceInfoUpdate(device, 'status', 'ok');
|
||||
const messagePath = oscData.address;
|
||||
if (messagePath === '/prod/gettitle') {
|
||||
const title = oscData.args[0].replaceAll('"', '').trim();
|
||||
this.deviceInfoUpdate(device, 'defaultName', title);
|
||||
device.send('/info/scsversion');
|
||||
} else if (messagePath === '/info/scsversion') {
|
||||
const versionInfo = oscData.args;
|
||||
const versionNumber = versionInfo[0].toString();
|
||||
const versionMajor = versionNumber.substring(0, 2).replace('0', '');
|
||||
const versionMinor = versionNumber.substring(2, 4).replace('0', '');
|
||||
const versionPatch = versionNumber.substring(4, 6).replace('0', '');
|
||||
const versionString = `${versionMajor}.${versionMinor}.${versionPatch}`;
|
||||
|
||||
const versionType = versionMap[versionInfo[1]];
|
||||
device.data.version = {
|
||||
number: versionString,
|
||||
type: versionType,
|
||||
};
|
||||
device.send('/info/finalcue');
|
||||
} else if (messagePath === '/info/finalcue') {
|
||||
const cueCount = oscData.args[0];
|
||||
if (cueCount !== device.data.cues.length) {
|
||||
device.data.initialized = false;
|
||||
device.data.cues = new Array(cueCount).fill(0).map(() => ({
|
||||
label: '',
|
||||
page: '',
|
||||
description: '',
|
||||
type: { code: '', display: '' },
|
||||
state: '',
|
||||
activation: { code: '', display: '' },
|
||||
file_info: '',
|
||||
length: '',
|
||||
colors: ['', ''],
|
||||
}));
|
||||
device.send('/cue/getitemsn', [
|
||||
{ type: 'i', value: 1 },
|
||||
{ type: 's', value: 'QNTCLSPARZ' },
|
||||
]);
|
||||
}
|
||||
} else if (messagePath === '/info/getcue') {
|
||||
const cueLabelInfo = oscData.args;
|
||||
const cueNumber = cueLabelInfo[0];
|
||||
const cueLabel = cueLabelInfo[1].replaceAll('"', '');
|
||||
|
||||
device.data.cues[cueNumber - 1].label = cueLabel;
|
||||
device.draw();
|
||||
} else if (messagePath === '/cue/getpage') {
|
||||
const pageInfo = oscData.args;
|
||||
const cueLabel = pageInfo[0].replaceAll('"', '');
|
||||
const cueIndex = device.data.cues.map((cue) => cue.label).indexOf(cueLabel);
|
||||
device.data.cues[cueIndex].page = pageInfo[1].replaceAll('"', '');
|
||||
if (cueIndex < device.data.cues.length - 1) {
|
||||
device.send('/cue/getpage', [{ type: 's', value: device.data.cues[cueIndex + 1].label }]);
|
||||
} else {
|
||||
device.draw();
|
||||
device.data.initialized = true;
|
||||
device.send('/status');
|
||||
}
|
||||
} else if (messagePath === '/cue/getname') {
|
||||
const nameInfo = oscData.args;
|
||||
const cueLabel = nameInfo[0].replaceAll('"', '');
|
||||
const cueIndex = device.data.cues.map((cue) => cue.label).indexOf(cueLabel);
|
||||
|
||||
device.data.cues[cueIndex].description = nameInfo[1].replaceAll('"', '');
|
||||
device.draw();
|
||||
} else if (messagePath === '/cue/gettype') {
|
||||
const typeInfo = oscData.args;
|
||||
const cueLabel = typeInfo[0].replaceAll('"', '');
|
||||
const cueIndex = device.data.cues.map((cue) => cue.label).indexOf(cueLabel);
|
||||
|
||||
device.data.cues[cueIndex].type = {
|
||||
code: typeInfo[1].replaceAll('"', ''),
|
||||
display: typeMap[typeInfo[1].replaceAll('"', '')],
|
||||
};
|
||||
device.draw();
|
||||
} else if (messagePath === '/cue/getitemsn') {
|
||||
const itemParts = oscData.args;
|
||||
if (itemParts.length === 12) {
|
||||
const cueIndex = itemParts[0] - 1;
|
||||
device.data.cues[cueIndex].label = itemParts[2];
|
||||
device.data.cues[cueIndex].description = itemParts[3];
|
||||
device.data.cues[cueIndex].type = {
|
||||
code: itemParts[4],
|
||||
display: typeMap[itemParts[4]],
|
||||
};
|
||||
device.data.cues[cueIndex].colors = itemParts[5].split(', ');
|
||||
device.data.cues[cueIndex].length = millisToString(itemParts[6]);
|
||||
device.data.cues[cueIndex].state = stateMap[itemParts[7]];
|
||||
device.data.cues[cueIndex].position = itemParts[8];
|
||||
device.data.cues[cueIndex].activation = {
|
||||
code: itemParts[9],
|
||||
display: activationMap[itemParts[9]],
|
||||
};
|
||||
device.data.cues[cueIndex].repeat = itemParts[10];
|
||||
device.data.cues[cueIndex].loop = itemParts[11];
|
||||
device.draw();
|
||||
|
||||
if (!device.data.initialized) {
|
||||
if (cueIndex < device.data.cues.length - 1) {
|
||||
device.send('/cue/getitemsn', [
|
||||
{ type: 'i', value: cueIndex + 2 },
|
||||
{ type: 's', value: 'QNTCLSPARZ' },
|
||||
]);
|
||||
} else {
|
||||
device.send('/cue/getpage', [{ type: 's', value: device.data.cues[0].label }]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
console.error('bad response from getitems');
|
||||
}
|
||||
} else if (messagePath === '/cue/statechange') {
|
||||
const cueLabel = oscData.args[0];
|
||||
const cueIndex = device.data.cues.map((cue) => cue.label).indexOf(cueLabel);
|
||||
if (cueIndex !== undefined) {
|
||||
device.data.cues[cueIndex].state = stateMap[oscData.args[1]];
|
||||
device.draw();
|
||||
device.send('/cue/getitemsn', [
|
||||
{ type: 'i', value: cueIndex + 1 },
|
||||
{ type: 's', value: 'QNTCLSPARZ' },
|
||||
]);
|
||||
}
|
||||
} else if (messagePath === '/status') {
|
||||
// const status = oscData.args[0];
|
||||
device.send('/info/currcue');
|
||||
} else if (messagePath === '/connected') {
|
||||
device.send('/prod/gettitle');
|
||||
} else if (messagePath === '/info/currcue') {
|
||||
device.data.currentCue = oscData.args[0];
|
||||
device.draw();
|
||||
} else if (messagePath === '/info/nextcue') {
|
||||
device.data.nextCue = oscData.args[0];
|
||||
device.draw();
|
||||
device.data.initialized = false;
|
||||
device.send('/cue/getitemsn', [
|
||||
{ type: 'i', value: 1 },
|
||||
{ type: 's', value: 'QNTCLSPARZ' },
|
||||
]);
|
||||
} else {
|
||||
console.error(`unhandled message path: ${messagePath}`);
|
||||
}
|
||||
};
|
||||
|
||||
function millisToString(duration) {
|
||||
const milliseconds = parseInt(duration % 1000, 10);
|
||||
let seconds = parseInt((duration / 1000) % 60, 10);
|
||||
const minutes = parseInt((duration / (1000 * 60)) % 60, 10);
|
||||
|
||||
if (minutes === 0) {
|
||||
return `${seconds}.${milliseconds}`;
|
||||
}
|
||||
if (seconds === 0) {
|
||||
return `0.${milliseconds}`;
|
||||
}
|
||||
if (seconds < 10) {
|
||||
seconds = `0${seconds}`;
|
||||
}
|
||||
return `${minutes}:${seconds}.${milliseconds}`;
|
||||
}
|
||||
|
||||
exports.heartbeat = function heartbeat(device) {
|
||||
device.send('/info/finalcue');
|
||||
};
|
||||
@@ -1,17 +0,0 @@
|
||||
table {
|
||||
background: white;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: left;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.header-row {
|
||||
background: white;
|
||||
}
|
||||
|
||||
td {
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
<header>
|
||||
<h1><%= listName %></h1>
|
||||
</header>
|
||||
<table>
|
||||
<tr class="header-row">
|
||||
<th>Label</th>
|
||||
<th>Page</th>
|
||||
<th>Description</th>
|
||||
<th>Cue Type</th>
|
||||
<th>State</th>
|
||||
<th>Activation</th>
|
||||
<th>Length</th>
|
||||
</tr>
|
||||
<% data.cues.forEach((cue, index )=>{ %>
|
||||
|
||||
<% if (data.currentCue === index + 1){ %>
|
||||
<tr style="background-color: black; color: white;">
|
||||
<%} else if (index + 1 < data.currentCue){ %>
|
||||
<tr style="background-color: #808080; color: #E5E5E5;">
|
||||
<%} else{ %>
|
||||
<tr style="background-color: <%=cue.colors[0]%>; color: <%=cue.colors[1]%>;">
|
||||
<% } %>
|
||||
|
||||
|
||||
<td><%=cue.label%></td>
|
||||
<td><%=cue.page%></td>
|
||||
<td><%=cue.description%></td>
|
||||
<td><%=cue.type.display%></td>
|
||||
<td><%=cue.state%></td>
|
||||
<td><%=cue.activation.display%></td>
|
||||
<td><%=cue.length%></td>
|
||||
</tr>
|
||||
<% }) %>
|
||||
</table>
|
||||
@@ -155,6 +155,10 @@ ipcRenderer.on('clearSavedData', (event, message) => {
|
||||
SAVESLOTS.clearSavedData();
|
||||
});
|
||||
|
||||
ipcRenderer.on('toggleSidebar', (event, message) => {
|
||||
document.getElementById('main').classList.toggle('sidebar-hidden');
|
||||
});
|
||||
|
||||
ipcRenderer.on('loadSlot', (event, slot) => {
|
||||
if (slot) {
|
||||
SAVESLOTS.loadSlot(slot);
|
||||
|
||||
@@ -31,6 +31,14 @@ a {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#main.sidebar-hidden {
|
||||
grid-template-columns: auto;
|
||||
}
|
||||
|
||||
#main.sidebar-hidden > #device-list-col {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#main {
|
||||
box-sizing: border-box;
|
||||
display: grid;
|
||||
|
||||
@@ -122,7 +122,6 @@ function initDeviceConnection(id) {
|
||||
device.connection = new osc.TCPSocketPort({
|
||||
address: device.addresses[0],
|
||||
port: device.remotePort,
|
||||
useSLIP: plugins[type].config.useSLIP !== undefined ? plugins[type].config.useSLIP : true
|
||||
});
|
||||
}
|
||||
device.connection.open();
|
||||
|
||||
Reference in New Issue
Block a user