1 && destvalues.length == sourcevalues.length)
{
for(var k = 0; k < sourcevalues.length; k++)
{
calibrator.add_pair(Number(sourcevalues[k]),Number(destvalues[k]));
}
var indicator = new TemperatureDisplay;
temperatureDisplays.push(indicator);
var decorator = new WidgetDecorator(indicator, configModel.data(driverIndex, 0), 2);
channels[j].newData.connect(calibrator.newMeasurement);
calibrator.newData.connect(indicator.setValue);
channels.push(calibrator);
columnNames.push(driverReference.destination);
indicatorPanel.addWidget(decorator);
}
break;
}
}
}
else if(driverReference.driver == "translation")
{
var colname = driverReference.column;
window.targetcolumnname = colname;
for(var j = 0; j < columnNames.length; j++)
{
if(columnNames[j] == colname)
{
translationChannel = j;
var indicator = new TemperatureDisplay;
indicator.digitCount = 4;
externtrans = indicator;
indicator.display(0);
var decorator = new WidgetDecorator(indicator, configModel.data(driverIndex, 0), 2);
indicatorPanel.addWidget(decorator);
currentDetector.timeForValue.connect(function(value) {
if(!hasTranslated)
{
var currentOffset = value;
if(targetOffset != 0)
{
var translation = currentOffset - targetOffset;
externtrans.display(translation);
gtrans = translation;
if(translation > 0)
{
window.translateLoadedSeries(translation);
}
else
{
window.translateCurrentSeries(-translation);
}
}
}
hasTranslated = true;
});
var resetTranslation = findChildObject(this, 'unshift');
resetTranslation.triggered.connect(function() {
if(gtrans > 0) {
window.translateLoadedSeries(-gtrans);
}
else {
window.translateCurrentSeries(gtrans);
}
gtrans = 0;
indicator.display(0);
});
}
}
targetDetector.setThreshold(driverReference.FValue);
currentDetector.setThreshold(driverReference.FValue);
}
else if(driverReference.driver == "rate")
{
var primaryColumn = driverReference.column;
for(var j = 0; j < columnNames.length; j++)
{
if(columnNames[j] == primaryColumn)
{
var rate = new RateOfChange(driverReference.cache, driverReference.scale);
channels[j].newData.connect(rate.newMeasurement);
var indicator = new TemperatureDisplay;
indicator.setRelativeMode(true);
indicator.display(0);
indicator.digitCount = 9;
var decorator = new WidgetDecorator(indicator, configModel.data(driverIndex, 0), 2);
indicatorPanel.addWidget(decorator);
rate.newData.connect(indicator.setValue);
temperatureDisplays.push(indicator);
rateCalculators.push(rate);
}
}
}
}
}
for(var i = 1; i < tabControls.length; i++)
{
setTabOrder(tabControls[i-1], tabControls[i]);
}
log.setHeaderData(0, "Time");
for(var i = 0; i < columnNames.length; i++) {
log.setHeaderData(i + 1, columnNames[i]);
}
log.setHeaderData(columnNames.length + 1, "Note");
for(var i = 0; i < channels.length; i++) {
log.addToCurrentColumnSet(i + 1);
}
var timer = new TimerDisplay;
timer.displayFormat = "mm:ss";
timer.autoReset = true;
var btdecorator = new WidgetDecorator(timer, "Batch Timer", 2);
indicatorPanel.addWidget(btdecorator);
var vsplit = findChildObject(this, 'main');
var isplit = findChildObject(this, 'indicators');
var lsplit = findChildObject(this, 'logsplit');
window.aboutToClose.connect(function() {
for(var i = 0; i < nidevices.length; i++)
{
nidevices[i].stop();
nidevices[i].deleteLater();
}
for(var i = 0; i < modbusdevices.length; i++)
{
modbusdevices[i].deleteLater();
}
delete nidevices;
delete modbusdevices;
window.saveSizeAndPosition("window");
vsplit.saveState("script/mainSplitter");
isplit.saveState("script/instrumentSplitter");
lsplit.saveState("script/logSplitter");
log.saveState("script/log", 7);
window.navigationWindow.loggingWindow = undefined;
});
this.restoreSizeAndPosition('window');
vsplit.restoreState("script/mainSplitter");
isplit.restoreState("script/instrumentSplitter");
lsplit.restoreState("script/logSplitter");
log.restoreState("script/log", 7);
var offsets = new Array();
var zeroemitters = new Array();
var adapters = new Array();
for(var i = 0; i < channels.length; i++) {
var offset = new MeasurementTimeOffset(epoch);
offsets.push(offset);
channels[i].newData.connect(offset.newMeasurement);
var adapter = new MeasurementAdapter(i + 1);
adapters.push(adapter);
offset.measurement.connect(adapter.newMeasurement);
var emitter = new ZeroEmitter(i + 1);
zeroemitters.push(emitter);
channels[i].newData.connect(emitter.newMeasurement);
emitter.measurement.connect(log.newMeasurement);
emitter.measurement.connect(graph.newMeasurement);
}
for(var i = channels.length; i < channels.length + rateCalculators.length; i++) {
var offset = new MeasurementTimeOffset(epoch);
rateoffsets.push(offset);
rateCalculators[i - channels.length].newData.connect(offset.newMeasurement);
var adapter = new MeasurementAdapter(i + 1);
rateadapters.push(adapter);
offset.measurement.connect(adapter.newMeasurement);
var emitter = new ZeroEmitter(i + 1);
ratezeros.push(emitter);
rateCalculators[i - channels.length].newData.connect(emitter.newMeasurement);
emitter.measurement.connect(graph.newMeasurement);
}
start.clicked.connect(function() {
start.enabled = false;
hasTranslated = false;
var epoch = new QTime();
epoch = epoch.currentTime();
for(var i = 0; i < offsets.length; i++)
{
offsets[i].setZeroTime(epoch);
zeroemitters[i].emitZero();
adapters[i].measurement.connect(log.newMeasurement);
adapters[i].measurement.connect(graph.newMeasurement);
}
for(var i = 0; i < rateadapters.length; i++)
{
rateoffsets[i].setZeroTime(epoch);
ratezeros[i].emitZero();
rateadapters[i].measurement.connect(graph.newMeasurement);
}
timer.startTimer();
if(typeof(currentBatchInfo) == 'undefined') { } else {
query = new QSqlQuery();
query.exec("SELECT now()::timestamp without time zone");
query.next();
var result = query.value(0);
query = query.invalidate();
var timefield = findChildObject(currentBatchInfo, 'time');
timefield.text = result.replace('T', ' ');
}
if(translationChannel >= 0)
{
offsets[translationChannel].measurement.connect(currentDetector.newMeasurement);
}
if(typeof(externtrans) != 'undefined') {
externtrans.display(0);
}
stop.enabled = true;
window.windowModified = true;
});
for(var i = 0; i < annotationButtons.length; i++) {
if(channels.length > 0)
{
annotationButtons[i].annotation.connect(log.newAnnotation);
annotationButtons[i].setTemperatureColumn(1);
annotationButtons[i].setAnnotationColumn(channels.length + 1);
annotationButtons[i].annotation.connect(function(note, tcol, ncol) {
for(var i = tcol; i < ncol; i++) {
log.newAnnotation(note, i, ncol);
}
});
}
}
start.setFocus();
stop.annotation.connect(log.newAnnotation);
stop.clicked.connect(timer.stopTimer);
stop.setTemperatureColumn(1);
stop.setAnnotationColumn(channels.length + 1);
QSettings.setValue("liveColumn", 1);
var lc = 1;
stop.clicked.connect(function() {
stop.enabled = false;
for(var i = 0; i < adapters.length; i++)
{
adapters[i].measurement.disconnect(log.newMeasurement);
adapters[i].measurement.disconnect(graph.newMeasurement);
}
for(var i = 0; i < rateadapters.length; i++)
{
rateadapters[i].measurement.disconnect(graph.newMeasurement);
}
if(typeof(currentBatchInfo) == 'undefined') { } else {
lc = Number(QSettings.value("liveColumn"));
var duration = log.lastTime(lc);
var durfield = findChildObject(currentBatchInfo, 'duration');
durfield.text = duration;
log.clearOutputColumns();
for(var i = 0; i < channels.length; i++)
{
log.addOutputTemperatureColumn(lc + i);
}
log.addOutputAnnotationColumn(lc + channels.length);
var filename = log.saveTemporary();
currentBatchInfo.tempData = filename;
currentBatchInfo.raise();
currentBatchInfo.activateWindow();
}
if(translationChannel >= 0)
{
offsets[translationChannel].measurement.disconnect(currentDetector.newMeasurement);
}
start.enabled = true;
window.windowModified = false;
});
stop.annotation.connect(function(note, tcol, ncol) {
for(var i = tcol; i < ncol; i++) {
log.newAnnotation(note, i, ncol);
}
});
var quitMenu = findChildObject(this, 'quit');
quitMenu.triggered.connect(function() {
window.close();
Application.quit();
});
var v1 = findChildObject(this, 'ms');
v1.triggered.connect(log.LOD_ms);
var v2 = findChildObject(this, '1s');
v2.triggered.connect(log.LOD_1s);
var v3 = findChildObject(this, '5s');
v3.triggered.connect(log.LOD_5s);
var v4 = findChildObject(this, '10s');
v4.triggered.connect(log.LOD_10s);
var v5 = findChildObject(this, '15s');
v5.triggered.connect(log.LOD_15s);
var v6 = findChildObject(this, '30s');
v6.triggered.connect(log.LOD_30s);
var v7 = findChildObject(this, '1m');
v7.triggered.connect(log.LOD_1m);
var showC = findChildObject(this, 'showC');
showC.triggered.connect(function() {
for(var i = 0; i < temperatureDisplays.length; i++)
{
temperatureDisplays[i].setDisplayUnits(Units.Celsius);
}
log.setDisplayUnits(Units.Celsius);
graph.showC();
});
var showF = findChildObject(this, 'showF');
showF.triggered.connect(function() {
for(var i = 0; i < temperatureDisplays.length; i++)
{
temperatureDisplays[i].setDisplayUnits(Units.Fahrenheit);
}
log.setDisplayUnits(Units.Fahrenheit);
graph.showF();
});
var clear = findChildObject(this, 'clear');
clear.triggered.connect(log.clear);
clear.triggered.connect(graph.clear);
clear.triggered.connect(function() {
window.windowTitle = "Typica";
log.setHeaderData(0, "Time");
QSettings.setValue("liveColumn", 1);
window.postLoadColumnSetup(0);
if(typeof(externtrans) != 'undefined') {
externtrans.display(0);
}
});
var openMenu = findChildObject(this, 'open');
var compareMenu = findChildObject(this, 'compare');
compareMenu.triggered.connect(function() {
QSettings.setValue('cseries', lc+1);
var history = createWindow("history");
history.windowTitle = 'Typica - Roasting Log';
});
var printMenu = findChildObject(this, 'print');
printMenu.triggered.connect(function() {
var exportWindow = createWindow("print");
exportWindow.windowTitle = "Typica - Print";
exportWindow.log = log;
});
var svgExportMenu = findChildObject(this, 'svgexport');
svgExportMenu.triggered.connect(function() {
var exportWindow = createWindow("exportWindow");
exportWindow.windowTitle = "Typica - Export XHTML+SVG";
exportWindow.log = log;
});
openMenu.triggered.connect(function() {
var filename = QFileDialog.getOpenFileName(window, 'Open Log…', QSettings.value('script/lastDir', '') + '/');
if(filename != '') {
var file = new QFile(filename);
var input = new XMLInput(file, 1);
targetseries = -1;
input.newTemperatureColumn.connect(log.setHeaderData);
input.newTemperatureColumn.connect(function(col, text) {
if(text == window.targetcolumnname) {
targetseries = col;
}
});
input.newAnnotationColumn.connect(log.setHeaderData);
input.measure.connect(graph.newMeasurement);
input.measure.connect(log.newMeasurement);
input.measure.connect(function(data, series) {
if(series == targetseries) {
targetDetector.newMeasurement(data);
}
});
input.annotation.connect(log.newAnnotation);
input.annotation.connect(function(note, tcol, ncol) {
for(var i = tcol; i < ncol; i++) {
log.newAnnotation(note, i, ncol);
}
});
var lc;
input.lastColumn.connect(function(c) {
lc = c;
QSettings.setValue("liveColumn", c + 1);
window.postLoadColumnSetup(c);
});
input.input();
window.windowTitle = 'Typica - ' + baseName(filename);
QSettings.setValue("script/lastDir", dir(filename));
log.newAnnotation("End", 1, lc);
}
});
window.postLoadColumnSetup = function(c) {
for(var i = 0; i < adapters.length; i++)
{
adapters[i].setColumn(c + i + 1);
zeroemitters[i].setColumn(c + i + 1);
log.setHeaderData(c + i + 1, columnNames[i]);
}
for(var i = 0; i < rateadapters.length; i++)
{
rateadapters[i].setColumn(c + i + 1 + adapters.length);
ratezeros[i].setColumn(c + i + 1 + adapters.length);
}
log.setHeaderData(c + columnNames.length + 1, "Note");
stop.setTemperatureColumn(c + 1);
stop.setAnnotationColumn(c + columnNames.length + 1);
for(var i = 0; i < annotationButtons.length; i++)
{
annotationButtons[i].setTemperatureColumn(c + 1);
annotationButtons[i].setAnnotationColumn(c + columnNames.length + 1);
}
log.clearCurrentColumnSet();
for(var i = 0; i < channels.length; i++) {
log.addToCurrentColumnSet(c + i + 1);
}
window.firstTempColumn = c + 1;
window.annotationColumn = c + columnNames.length + 1;
}
var saveMenu = findChildObject(this, 'save');
saveMenu.triggered.connect(function() {
var filename = QFileDialog.getSaveFileName(window, "Save Log As…", QSettings.value("script/lastDir", "") + "/");
if(filename != "") {
var lc = Number(QSettings.value("liveColumn"));
var file = new QFile(filename);
log.clearOutputColumns();
for(var i = 0; i < columnNames.length; i++)
{
log.addOutputTemperatureColumn(lc + i);
}
log.addOutputAnnotationColumn(lc + columnNames.length);
log.saveXML(file);
QSettings.setValue("script/lastDir", dir(filename));
}
});
var exportMenu = findChildObject(this, 'export');
exportMenu.triggered.connect(function() {
var filename = QFileDialog.getSaveFileName(window, "Export CSV As…", QSettings.value("script/lastDir", "") + "/");
if(filename != "") {
var lc = Number(QSettings.value("liveColumn"));
var file = new QFile(filename);
log.clearOutputColumns();
for(var i = 0; i < columnNames.length; i++)
{
log.addOutputTemperatureColumn(lc + i);
}
log.addOutputAnnotationColumn(lc + columnNames.length);
log.saveCSV(file);
QSettings.setValue("script/lastDir", dir(filename));
}
});
var manual = findChildObject(this, 'manual');
manual.triggered.connect(function() {
var entry = new LogEditWindow();
entry.show();
});
var newMenu = findChildObject(this, 'new');
newMenu.triggered.connect(function() {
var bwindow = createWindow("batchWindow");
bwindow.windowTitle = "Typica - New Batch";
});
window.postLoadColumnSetup(0);
]]>