Browse Source

Add range timer

Neal Wilson 9 years ago
parent
commit
8eeda42468
1 changed files with 262 additions and 0 deletions
  1. 262
    0
      src/typica.w

+ 262
- 0
src/typica.w View File

10554
 Q_PROPERTY(QTime resetValue READ resetValue WRITE setResetValue)@/
10554
 Q_PROPERTY(QTime resetValue READ resetValue WRITE setResetValue)@/
10555
 Q_PROPERTY(QString displayFormat READ displayFormat WRITE setDisplayFormat)@/
10555
 Q_PROPERTY(QString displayFormat READ displayFormat WRITE setDisplayFormat)@/
10556
 Q_PROPERTY(bool autoReset READ autoReset WRITE setAutoReset)@/
10556
 Q_PROPERTY(bool autoReset READ autoReset WRITE setAutoReset)@/
10557
+Q_PROPERTY(QString value READ value)@/
10557
 
10558
 
10558
 @ A number of private variables are used to implement this class.
10559
 @ A number of private variables are used to implement this class.
10559
 
10560
 
19273
 @<Class implementations@>=
19274
 @<Class implementations@>=
19274
 @<CoolingTimerConfWidget implementation@>
19275
 @<CoolingTimerConfWidget implementation@>
19275
 
19276
 
19277
+@ The other two timer types are intended for measuring ranges of interest
19278
+within a batch. These have more configuration options. First is the range
19279
+timer. Someone setting this up needs to decide how the timer is started.
19280
+Sensible options include starting the timer at the start of the batch,
19281
+starting the timer when a button is pressed, or starting the timer when a set
19282
+point is reached on the ascent of a named data series. Stopping the timer is
19283
+also a configurable concern. This will be stopped at the end of the batch,
19284
+but it might be stopped sooner on reaching some threshold or when a button is
19285
+pressed. There are also questions of how the information is persisted with the
19286
+roasting records.
19287
+
19288
+@<Class declarations@>=
19289
+class RangeTimerConfWidget : public BasicDeviceConfigurationWidget
19290
+{
19291
+    @[Q_OBJECT@]@;
19292
+    public:@/
19293
+        @[Q_INVOKABLE@]@, RangeTimerConfWidget(DeviceTreeModel *model, const QModelIndex &index);
19294
+    @[private slots@]:@/
19295
+        void updateStartButtonText(const QString &text);
19296
+        void updateStopButtonText(const QString &text);
19297
+        void updateStartColumnName(const QString &text);
19298
+        void updateStopColumnName(const QString &text);
19299
+        void updateStartValue(const QString &text);
19300
+        void updateStopValue(const QString &text);
19301
+        void updateStartTrigger(int option);
19302
+        void updateStopTrigger(int option);
19303
+};
19304
+
19305
+@ The constructor sets up controls for configuring these details.
19306
+
19307
+@<RangeTimerConfWidget implementation@>=
19308
+RangeTimerConfWidget::RangeTimerConfWidget(DeviceTreeModel *model, const QModelIndex &index)
19309
+: BasicDeviceConfigurationWidget(model, index)
19310
+{
19311
+    QVBoxLayout *layout = new QVBoxLayout;
19312
+    
19313
+    QGroupBox *startConfigurationGroup = new QGroupBox(tr("Start trigger"));
19314
+    QRadioButton *startBatchOption = new QRadioButton(tr("Start of batch"));
19315
+    QRadioButton *buttonOption = new QRadioButton(tr("Manual"));
19316
+    QRadioButton *thresholdOption = new QRadioButton(tr("At temperature"));
19317
+    QButtonGroup *startOptionGroup = new QButtonGroup;
19318
+    startOptionGroup->addButton(startBatchOption, 1);
19319
+    startOptionGroup->addButton(buttonOption, 2);
19320
+    startOptionGroup->addButton(thresholdOption, 3);
19321
+    startBatchOption->setChecked(true);
19322
+    QGridLayout *startOptions = new QGridLayout;
19323
+    startOptions->addWidget(startBatchOption, 0, 0);
19324
+    startOptions->addWidget(buttonOption, 1, 0);
19325
+    startOptions->addWidget(thresholdOption, 2, 0);
19326
+    QLabel *buttonTextLabel = new QLabel(tr("Button Text: "));
19327
+    QLineEdit *buttonTextEdit = new QLineEdit;
19328
+    QHBoxLayout *buttonTextOptions = new QHBoxLayout;
19329
+    buttonTextOptions->addWidget(buttonTextLabel);
19330
+    buttonTextOptions->addWidget(buttonTextEdit);
19331
+    startOptions->addLayout(buttonTextOptions, 1, 1);
19332
+    QFormLayout *thresholdOptions = new QFormLayout;
19333
+    QLineEdit *startColumnName = new QLineEdit;
19334
+    QLineEdit *startValue = new QLineEdit;
19335
+    thresholdOptions->addRow(tr("Column Name: "), startColumnName);
19336
+    thresholdOptions->addRow(tr("Value: "), startValue);
19337
+    startOptions->addLayout(thresholdOptions, 2, 1);
19338
+    startConfigurationGroup->setLayout(startOptions);
19339
+    layout->addWidget(startConfigurationGroup);
19340
+    
19341
+    QGroupBox *stopConfigurationGroup = new QGroupBox(tr("Stop trigger"));
19342
+    QRadioButton *stopBatchOption = new QRadioButton(tr("End of batch"));
19343
+    QRadioButton *stopButtonOption = new QRadioButton(tr("Manual"));
19344
+    QRadioButton *stopThresholdOption = new QRadioButton(tr("At temperature"));
19345
+    QButtonGroup *stopOptionGroup = new QButtonGroup;
19346
+    stopOptionGroup->addButton(stopBatchOption, 1);
19347
+    stopOptionGroup->addButton(stopButtonOption, 2);
19348
+    stopOptionGroup->addButton(stopThresholdOption, 3);
19349
+    stopBatchOption->setChecked(true);
19350
+    QGridLayout *stopOptions = new QGridLayout;
19351
+    stopOptions->addWidget(stopBatchOption, 0, 0);
19352
+    stopOptions->addWidget(stopButtonOption, 1, 0);
19353
+    stopOptions->addWidget(stopThresholdOption, 2, 0);
19354
+    QLabel *stopButtonLabel = new QLabel(tr("Button Text: "));
19355
+    QLineEdit *stopButtonEdit = new QLineEdit;
19356
+    QHBoxLayout *stopButtonTextOptions = new QHBoxLayout;
19357
+    stopButtonTextOptions->addWidget(stopButtonLabel);
19358
+    stopButtonTextOptions->addWidget(stopButtonEdit);
19359
+    stopOptions->addLayout(stopButtonTextOptions, 1, 1);
19360
+    QLineEdit *stopColumnName = new QLineEdit;
19361
+    QLineEdit *stopValue = new QLineEdit;
19362
+    QFormLayout *stopThresholdOptions = new QFormLayout;
19363
+    stopThresholdOptions->addRow(tr("Column Name: "), stopColumnName);
19364
+    stopThresholdOptions->addRow(tr("Value: "), stopValue);
19365
+    stopOptions->addLayout(stopThresholdOptions, 2, 1);
19366
+    stopConfigurationGroup->setLayout(stopOptions);
19367
+    layout->addWidget(stopConfigurationGroup);
19368
+    
19369
+    @<Get device configuration data for current node@>@;
19370
+    for(int i = 0; i < configData.size(); i++)
19371
+    {
19372
+        node = configData.at(i).toElement();
19373
+        if(node.attribute("name") == "startbuttontext")
19374
+        {
19375
+            buttonTextEdit->setText(node.attribute("value"));
19376
+        }
19377
+        else if(node.attribute("name") == "stopbuttontext")
19378
+        {
19379
+            stopButtonEdit->setText(node.attribute("value"));
19380
+        }
19381
+        else if(node.attribute("name") == "startcolumnname")
19382
+        {
19383
+            startColumnName->setText(node.attribute("value"));
19384
+        }
19385
+        else if(node.attribute("name") == "stopcolumnname")
19386
+        {
19387
+            stopColumnName->setText(node.attribute("value"));
19388
+        }
19389
+        else if(node.attribute("name") == "startvalue")
19390
+        {
19391
+            startValue->setText(node.attribute("value"));
19392
+        }
19393
+        else if(node.attribute("name") == "stopvalue")
19394
+        {
19395
+            stopValue->setText(node.attribute("value"));
19396
+        }
19397
+        else if(node.attribute("name") == "starttrigger")
19398
+        {
19399
+            if(node.attribute("value") == "batch")
19400
+            {
19401
+                startBatchOption->setChecked(true);
19402
+            }
19403
+            else if(node.attribute("value") == "manual")
19404
+            {
19405
+                buttonOption->setChecked(true);
19406
+            }
19407
+            else if(node.attribute("value") == "value")
19408
+            {
19409
+                thresholdOption->setChecked(true);
19410
+            }
19411
+        }
19412
+        else if(node.attribute("name") == "stoptrigger")
19413
+        {
19414
+            if(node.attribute("value") == "batch")
19415
+            {
19416
+                stopBatchOption->setChecked(true);
19417
+            }
19418
+            else if(node.attribute("value") == "manual")
19419
+            {
19420
+                stopButtonOption->setChecked(true);
19421
+            }
19422
+            else if(node.attribute("value") == "value")
19423
+            {
19424
+                stopThresholdOption->setChecked(true);
19425
+            }
19426
+        }
19427
+    }
19428
+    updateStartButtonText(buttonTextEdit->text());
19429
+    updateStopButtonText(stopButtonEdit->text());
19430
+    updateStartColumnName(startColumnName->text());
19431
+    updateStopColumnName(stopColumnName->text());
19432
+    updateStartValue(startValue->text());
19433
+    updateStopValue(stopValue->text());
19434
+    updateStartTrigger(startOptionGroup->checkedId());
19435
+    updateStopTrigger(stopOptionGroup->checkedId());
19436
+    
19437
+    setLayout(layout);
19438
+    
19439
+    connect(buttonTextEdit, SIGNAL(textChanged(QString)),
19440
+            this, SLOT(updateStartButtonText(QString)));
19441
+    connect(stopButtonEdit, SIGNAL(textChanged(QString)),
19442
+            this, SLOT(updateStopButtonText(QString)));
19443
+    connect(startColumnName, SIGNAL(textChanged(QString)),
19444
+            this, SLOT(updateStartColumnName(QString)));
19445
+    connect(stopColumnName, SIGNAL(textChanged(QString)),
19446
+            this, SLOT(updateStopColumnName(QString)));
19447
+    connect(startValue, SIGNAL(textChanged(QString)),
19448
+            this, SLOT(updateStartValue(QString)));
19449
+    connect(stopValue, SIGNAL(textChanged(QString)),
19450
+            this, SLOT(updateStopValue(QString)));
19451
+    connect(startOptionGroup, SIGNAL(buttonClicked(int)),
19452
+            this, SLOT(updateStartTrigger(int)));
19453
+    connect(stopOptionGroup, SIGNAL(buttonClicked(int)),
19454
+            this, SLOT(updateStopTrigger(int)));
19455
+}
19456
+
19457
+@ Small methods update the configuration as usual.
19458
+
19459
+@<RangeTimerConfWidget implementation@>=
19460
+void RangeTimerConfWidget::updateStartButtonText(const QString &text)
19461
+{
19462
+    updateAttribute("startbuttontext", text);
19463
+}
19464
+
19465
+void RangeTimerConfWidget::updateStopButtonText(const QString &text)
19466
+{
19467
+    updateAttribute("stopbuttontext", text);
19468
+}
19469
+
19470
+void RangeTimerConfWidget::updateStartColumnName(const QString &text)
19471
+{
19472
+    updateAttribute("startcolumnname", text);
19473
+}
19474
+
19475
+void RangeTimerConfWidget::updateStopColumnName(const QString &text)
19476
+{
19477
+    updateAttribute("stopcolumnname", text);
19478
+}
19479
+
19480
+void RangeTimerConfWidget::updateStartValue(const QString &text)
19481
+{
19482
+    updateAttribute("startvalue", text);
19483
+}
19484
+
19485
+void RangeTimerConfWidget::updateStopValue(const QString &text)
19486
+{
19487
+    updateAttribute("stopvalue", text);
19488
+}
19489
+
19490
+void RangeTimerConfWidget::updateStartTrigger(int option)
19491
+{
19492
+    switch(option)
19493
+    {
19494
+        case 1:
19495
+            updateAttribute("starttrigger", "batch");
19496
+            break;
19497
+        case 2:
19498
+            updateAttribute("starttrigger", "manual");
19499
+            break;
19500
+        case 3:
19501
+            updateAttribute("starttrigger", "value");
19502
+            break;
19503
+        default:
19504
+            break;
19505
+    }
19506
+}
19507
+
19508
+void RangeTimerConfWidget::updateStopTrigger(int option)
19509
+{
19510
+    switch(option)
19511
+    {
19512
+        case 1:
19513
+            updateAttribute("stoptrigger", "batch");
19514
+            break;
19515
+        case 2:
19516
+            updateAttribute("stoptrigger", "manual");
19517
+            break;
19518
+        case 3:
19519
+            updateAttribute("stoptrigger", "value");
19520
+            break;
19521
+        default:
19522
+            break;
19523
+    }
19524
+}
19525
+
19526
+
19527
+
19528
+@ The widget is registered with the configuration system.
19529
+@<Register device configuration widgets@>=
19530
+app.registerDeviceConfigurationWidget("rangetimer",
19531
+RangeTimerConfWidget::staticMetaObject);
19532
+
19533
+@ The implementation chunk for now is in the main source file.
19534
+
19535
+@<Class implementations@>=
19536
+@<RangeTimerConfWidget implementation@>
19537
+
19276
 @* Profile Translation Configuration Widget.
19538
 @* Profile Translation Configuration Widget.
19277
 
19539
 
19278
 \noindent Configuring profile translation requires knowing which column to use
19540
 \noindent Configuring profile translation requires knowing which column to use

Loading…
Cancel
Save