diff --git a/app/data/cfg.json b/app/data/cfg.json index 9ba57c9..1bcd7c0 100644 --- a/app/data/cfg.json +++ b/app/data/cfg.json @@ -186,7 +186,10 @@ "capper_on": "A", "capper_off": "B", "takeup_forward": "D", - "takeup_backward": "E" + "takeup_backward": "F", + "error" : "E", + "camera_exposure" : "G", + "state" : "H" } } } diff --git a/app/lib/ui/index.js b/app/lib/ui/index.js index 44ba172..bbde379 100644 --- a/app/lib/ui/index.js +++ b/app/lib/ui/index.js @@ -1,267 +1,293 @@ /* jslint esversion: 6*/ - -const gui = {}; - -//GUI -gui.init = function () { - gui.version(); +'use strict'; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); }; - -gui.fmtZero = function (val, len) { - 'use strict'; - const raw = val; - let str = val + ''; - let output = ''; - if (raw < 0) { - output = '-' + Array(len - (str.length - 1)).join('0') + str.replace('-', ''); - } else { - if (str.length < len) { - output = Array(len - str.length).join('0') + str; - } else if (str.length >= len) { - str = parseInt(str) + ''; - output = Array(len - str.length).join('0') + str; - } - } - return output; -}; -gui.counterFormat = function (t, normal, prevent) { - 'use strict'; - const raw = t.value; - t.value = gui.fmtZero(raw, 6); - if (typeof normal !== 'undefined' && parseInt(raw) !== normal) { - $(t).addClass('changed'); - } else { - $(t).removeClass('changed'); - } -}; -gui.counterUpdate = function (which, raw) { - 'use strict'; - const formattedVal = gui.fmtZero(raw, 6); - $(`.${which} .count`).val(formattedVal); -}; -gui.notifierWorking = true; -gui.notify = function (title, message) { - 'use strict'; - if (!gui.notifierWorking) { - return true; - } - return new Promise((resolve, reject) => { - try { - notifier.notify({ - title: title, - message: message, - //icon: path.join(__dirname, 'coulson.jpg'), // Absolute path (doesn't work on balloons) - sound: true, // Only Notification Center or Windows Toasters - wait: true // Wait with callback, until user action is taken against notification - }, function (err, response) { - // Response is response from notification - if (err) { - gui.notifierWorking = false; - log.error(`Error with notification`, err); - return reject(err); - } - return resolve(true); - }); - } catch (err) { - gui.notifierWorking = false; - //notify-send is not found - //determine an alternate for raspian - //this feels like a hack - } - }); -}; -gui.updateCam = async function (t) { - 'use strict'; - const val = t.value; - let change; - - if (parseInt(val) === cam.pos) { - return false; - } - change = await gui.confirm(`Are you sure you want to set camera counter to ${val}?`); - - if (change) { - cam.pos = parseInt(val); - gui.updateState(); - } else { - t.value = cam.pos; - gui.counterFormat(t); - } -}; -gui.updateCam2 = async function (t) { - 'use strict'; - const val = t.value; - let change; - - if (parseInt(val) === cam.pos) { - return false; - } - change = await gui.confirm(`Are you sure you want to set second camera counter to ${val}?`); - - if (change) { - cam.second.pos = parseInt(val); - gui.updateState(); - } else { - t.value = cam.second.pos; - gui.counterFormat(t); - } -}; -gui.updateProj = async function (t) { - 'use strict'; - const val = t.value; - let change; - if (parseInt(val) === proj.pos) { - return false; - } - change = await gui.confirm(`Are you sure you want to set projector counter to ${val}?`); - if (change) { - proj.pos = parseInt(val); - gui.updateState(); - } else { - t.value = proj.pos; - gui.counterFormat(t); - } - proj.setValue(t.value); -}; -gui.updateProj2 = async function (t) { - 'use strict'; - const val = t.value; - let change; - if (parseInt(val) === proj.second.pos) { - return false; - } - change = await gui.confirm(`Are you sure you want to set second projector counter to ${val}?`); - if (change) { - proj.second.pos = parseInt(val); - gui.updateState(); - } else { - t.value = proj.second.pos; - gui.counterFormat(t); - } - proj.setValue(t.value); -}; - -gui.updateState = function () { - 'use strict'; - const cpos = cam.pos; - const ppos = proj.pos; - - const p2pos = proj.second.pos; - const c2pos = cam.second.pos; - - $('#seq_cam_count').val(cpos).change(); - $('#seq_proj_count').val(ppos).change(); - - $('#seq_cam_count_2').val(cpos).change(); - $('#seq_proj_count_2').val(ppos).change(); - - $('#seq_cam_2_count').val(c2pos).change(); - $('#seq_proj_2_count').val(p2pos).change(); - - $('#seq_cam_2_count_2').val(c2pos).change(); - $('#seq_proj_2_count_2').val(p2pos).change(); -}; -gui.spinnerCfg = { - lines: 11, // The number of lines to draw - length: 15, // The length of each line - width: 7, // The line thickness - radius: 20, // The radius of the inner circle - corners: 1, // Corner roundness (0..1) - rotate: 0, // The rotation offset - direction: 1, // 1: clockwise, -1: counterclockwise - color: '#F2F2F1', // #rgb or #rrggbb or array of colors - speed: 1, // Rounds per second - trail: 60, // Afterglow percentage - shadow: true, // Whether to render a shadow - hwaccel: true, // Whether to use hardware acceleration - className: 'spinner', // The CSS class to assign to the spinner - zIndex: 2e9, // The z-index (defaults to 2000000000) - top: '50%', // Top position relative to parent - left: '50%' // Left position relative to parent -}; -gui.spinner = function (state, msg, progress, cancel) { - 'use strict'; - let target; - let spinner; - if (msg && msg !== '') { - gui.spinnerMsg(msg); - } - if (state && !$('#spinner').hasClass('created')) { - target = document.getElementById('spinner'); - spinner = new Spinner(gui.spinnerCfg).spin(target); - $('#spinnerProgress').hide(); - $('#spinner').addClass('created'); - } else if (state) { - $('#spinner').show(); - } else if (!state) { - $('#spinner').hide(); - gui.spinnerMsg(''); - } - if (progress) { - $('#spinnerProgress').show(); - } else { - $('#spinnerProgress').hide(); - } - if (cancel) { - $('#spinnerCancel').show(); - } else { - $('#spinnerCancel').hide(); - } -}; -gui.spinnerMsg = function (msg) { - 'use strict'; - $('#spinnerMsg').text(msg); -}; -gui.overlay = function (state) { - 'use strict'; - if (state) { - $('#overlay').show(); - } else { - $('#overlay').hide(); - } -}; - -gui.info = async function (title, message) { - 'use strict'; - const config = { - type : 'info', - buttons : ['Ok'], - title: title, - message : message - }; - return dialog.showMessageBox(config); -}; -gui.confirm = async function (message, cancel = 'Cancel') { - const config = { - buttons : ['Yes', cancel], - message - } - const res = await dialog.showMessageBox(config); - return res.response === 0; -}; -gui.choice = async function (message, choices) { - const config = { - buttons : choices, - defaultId : 0, - message - } - const res = await dialog.showMessageBox(config); - return res.response; -}; -gui.warn = async function (title, message) { - 'use strict'; - const config = { - type : 'warning', - buttons : ['Ok'], - title: title, - message : message - }; - return dialog.showMessageBox(config); -}; -gui.error = function () {}; - -gui.version = function () { - $('#version').text(PACKAGE.version); +let gui; +class GUI { + constructor() { + this.id = 'gui'; + this.notifierWorking = true; + this.spinnerCfg = { + lines: 11, + length: 15, + width: 7, + radius: 20, + corners: 1, + rotate: 0, + direction: 1, + color: '#F2F2F1', + speed: 1, + trail: 60, + shadow: true, + hwaccel: true, + className: 'spinner', + zIndex: 2e9, + top: '50%', + left: '50%' // Left position relative to parent + }; + } + init() { + this.version(); + this.listen(); + } + listen() { + ipcRenderer.on(this.id, this.listener.bind(this)); + } + listener(event, arg) { + if (arg.notify) { + this.notify(arg.notify.title, arg.notify.message); + } + } + fmtZero(val, len) { + const raw = val; + let str = val + ''; + let output = ''; + if (raw < 0) { + output = '-' + Array(len - (str.length - 1)).join('0') + str.replace('-', ''); + } + else { + if (str.length < len) { + output = Array(len - str.length).join('0') + str; + } + else if (str.length >= len) { + str = parseInt(str) + ''; + output = Array(len - str.length).join('0') + str; + } + } + return output; + } + counterFormat(t, normal = null) { + const raw = t.value; + t.value = gui.fmtZero(raw, 6); + if (typeof normal !== 'undefined' && parseInt(raw) !== normal) { + $(t).addClass('changed'); + } + else { + $(t).removeClass('changed'); + } + } + counterUpdate(which, raw) { + const formattedVal = this.fmtZero(raw, 6); + $(`.${which} .count`).val(formattedVal); + } + notify(title, message) { + const config = { + title, + message, + //icon: path.join(__dirname, 'coulson.jpg'), // Absolute path (doesn't work on balloons) + sound: true, + wait: true // Wait with callback, until user action is taken against notification + }; + if (!this.notifierWorking) { + return new Promise((resolve, reject) => { return resolve(true); }); + } + return new Promise((resolve, reject) => { + try { + notifier.notify(config, function (err, response) { + // Response is response from notification + if (err) { + this.notifierWorking = false; + log.error(`Error with notification`, err); + return reject(err); + } + return resolve(true); + }.bind(this)); + } + catch (err) { + this.notifierWorking = false; + //notify-send is not found + //determine an alternate for raspian + //this feels like a hack + } + }); + } + updateCam(t) { + return __awaiter(this, void 0, void 0, function* () { + const val = t.value; + let change; + if (parseInt(val) === cam.pos) { + return false; + } + change = yield this.confirm(`Are you sure you want to set camera counter to ${val}?`); + if (change) { + cam.pos = parseInt(val); + this.updateState(); + } + else { + t.value = cam.pos; + this.counterFormat(t); + } + }); + } + updateCam2(t) { + return __awaiter(this, void 0, void 0, function* () { + const val = t.value; + let change; + if (parseInt(val) === cam.pos) { + return false; + } + change = yield this.confirm(`Are you sure you want to set second camera counter to ${val}?`); + if (change) { + cam.second.pos = parseInt(val); + this.updateState(); + } + else { + t.value = cam.second.pos; + this.counterFormat(t); + } + }); + } + updateProj(t) { + return __awaiter(this, void 0, void 0, function* () { + const val = t.value; + let change; + if (parseInt(val) === proj.pos) { + return false; + } + change = yield this.confirm(`Are you sure you want to set projector counter to ${val}?`); + if (change) { + proj.pos = parseInt(val); + this.updateState(); + } + else { + t.value = proj.pos; + this.counterFormat(t); + } + proj.setValue(t.value); + }); + } + updateProj2(t) { + return __awaiter(this, void 0, void 0, function* () { + const val = t.value; + let change; + if (parseInt(val) === proj.second.pos) { + return false; + } + change = yield this.confirm(`Are you sure you want to set second projector counter to ${val}?`); + if (change) { + proj.second.pos = parseInt(val); + this.updateState(); + } + else { + t.value = proj.second.pos; + this.counterFormat(t); + } + proj.setValue(t.value); + }); + } + updateState() { + const cpos = cam.pos; + const ppos = proj.pos; + const p2pos = proj.second.pos; + const c2pos = cam.second.pos; + $('#seq_cam_count').val(cpos).change(); + $('#seq_proj_count').val(ppos).change(); + $('#seq_cam_count_2').val(cpos).change(); + $('#seq_proj_count_2').val(ppos).change(); + $('#seq_cam_2_count').val(c2pos).change(); + $('#seq_proj_2_count').val(p2pos).change(); + $('#seq_cam_2_count_2').val(c2pos).change(); + $('#seq_proj_2_count_2').val(p2pos).change(); + } + spinner(state, msg = null, progress = false, cancel = false) { + let target; + let spinner; + if (msg && msg !== '') { + this.spinnerMsg(msg); + } + if (state && !$('#spinner').hasClass('created')) { + target = document.getElementById('spinner'); + spinner = new Spinner(this.spinnerCfg).spin(target); + $('#spinnerProgress').hide(); + $('#spinner').addClass('created'); + } + else if (state) { + $('#spinner').show(); + } + else if (!state) { + $('#spinner').hide(); + this.spinnerMsg(''); + } + if (progress) { + $('#spinnerProgress').show(); + } + else { + $('#spinnerProgress').hide(); + } + if (cancel) { + $('#spinnerCancel').show(); + } + else { + $('#spinnerCancel').hide(); + } + } + spinnerMsg(msg) { + $('#spinnerMsg').text(msg); + } + overlay(state) { + if (state) { + $('#overlay').show(); + } + else { + $('#overlay').hide(); + } + } + info(title, message) { + return __awaiter(this, void 0, void 0, function* () { + const config = { + type: 'info', + buttons: ['Ok'], + title: title, + message: message + }; + return dialog.showMessageBox(config); + }); + } + confirm(message, cancel = 'Cancel') { + return __awaiter(this, void 0, void 0, function* () { + const config = { + buttons: ['Yes', cancel], + message + }; + const res = yield dialog.showMessageBox(config); + return res.response === 0; + }); + } + choice(message, choices) { + return __awaiter(this, void 0, void 0, function* () { + const config = { + buttons: choices, + defaultId: 0, + message + }; + const res = yield dialog.showMessageBox(config); + return res.response; + }); + } + warn(title, message) { + return __awaiter(this, void 0, void 0, function* () { + const config = { + type: 'warning', + buttons: ['Ok'], + title, + message + }; + return dialog.showMessageBox(config); + }); + } + version() { + $('#version').text(PACKAGE.version); + } + error() { + } } - -module.exports = gui; \ No newline at end of file +gui = new GUI(); +module.exports = gui; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/data/cfg.json b/data/cfg.json index 9ba57c9..1bcd7c0 100644 --- a/data/cfg.json +++ b/data/cfg.json @@ -186,7 +186,10 @@ "capper_on": "A", "capper_off": "B", "takeup_forward": "D", - "takeup_backward": "E" + "takeup_backward": "F", + "error" : "E", + "camera_exposure" : "G", + "state" : "H" } } } diff --git a/processing/mcopy/cfg.json b/processing/mcopy/cfg.json index 9ba57c9..1bcd7c0 100644 --- a/processing/mcopy/cfg.json +++ b/processing/mcopy/cfg.json @@ -186,7 +186,10 @@ "capper_on": "A", "capper_off": "B", "takeup_forward": "D", - "takeup_backward": "E" + "takeup_backward": "F", + "error" : "E", + "camera_exposure" : "G", + "state" : "H" } } }