1 #ifndef WIDGET_H
2 #define WIDGET_H
3 
4 #include <QDockWidget>
5 #include <QMainWindow>
6 #include "ui_widget.h"
7 #include <cassert>
8 namespace Ui {
9     class Widget;
10 }
11 
12 // Defines the bounds (more than 1 object use them)
13 enum {MIN_SAMPFREQ   = 1,   MAX_SAMPFREQ   = 30,    DEF_SAMPFREQ   = 5};
14 enum {MIN_SCANWIDTH  = 1,   MAX_SCANWIDTH  = 100,   DEF_SCANWIDTH  = 100};
15 enum {MIN_NUMSAMPLE  = 2,   MAX_NUMSAMPLE  = 250,   DEF_NUMSAMPLE  = 250};
16 
17 class Widget : public QDockWidget {
18     Q_OBJECT
19 public:
QDockWidget(parent)20     Widget(QWidget *parent=0) :  QDockWidget(parent), ui(new Ui::Widget){
21         assert( parent!=0 );
22         ui->setupUi(this);
23         setFloating(false);
24         setAllowedAreas(Qt::RightDockWidgetArea);
25         ((QMainWindow*) parent)->addDockWidget( Qt::RightDockWidgetArea, this );
26         show();
27 
28         // Init the UI
29         init_ui();
30 
31         // Inherit the control variables
32         sampfreq  = ui->dial_freq->value();
33         scanwidth = ui->dial_width->value();
34         numsample = ui->dial_numsamples->value();
35 
36     }
~Widget()37     ~Widget(){
38         delete ui;
39     }
40     // Accessers
getSampfreq()41     int getSampfreq(){ return sampfreq; }
getScanwidth()42     int getScanwidth(){ return scanwidth; }
getNumsample()43     int getNumsample(){ return numsample; }
getDrawLineFlag()44     bool getDrawLineFlag() {return  ui->drawLineCheckBox->isChecked(); }
45 
46 signals:
47     void laser_parameter_updated();
48     void scan_requested();
49     void save_requested();
50 
51 private:
52     Ui::Widget *ui;
53 
54     int    sampfreq;  // lines/sec [1..30], def 5
55     int   scanwidth;  // %-bbox diagonal [0..100], def 20
56     int   numsample;  // [2..100], def 10
57 
init_ui()58     void init_ui(){
59         // Frequency
60         ui->dial_freq->setMinimum(MIN_SAMPFREQ);
61         ui->dial_freq->setMaximum(MAX_SAMPFREQ);
62         ui->dial_freq->setValue(DEF_SAMPFREQ);
63         ui->sbox_freq->setMinimum(MIN_SAMPFREQ);
64         ui->sbox_freq->setMaximum(MAX_SAMPFREQ);
65         ui->dial_freq->setValue(DEF_SAMPFREQ);
66         // numsamples
67         ui->dial_numsamples->setMinimum(MIN_NUMSAMPLE);
68         ui->dial_numsamples->setMaximum(MAX_NUMSAMPLE);
69         ui->dial_numsamples->setValue(DEF_NUMSAMPLE);
70         ui->sbox_numsamples->setMinimum(MIN_NUMSAMPLE);
71         ui->sbox_numsamples->setMaximum(MAX_NUMSAMPLE);
72         ui->sbox_numsamples->setValue(DEF_NUMSAMPLE);
73 
74         // scanwidth
75         ui->dial_width->setMinimum(MIN_SCANWIDTH);
76         ui->dial_width->setMaximum(MAX_SCANWIDTH);
77         ui->dial_width->setValue(DEF_SCANWIDTH);
78         ui->sbox_width->setMinimum(MIN_SCANWIDTH);
79         ui->sbox_width->setMaximum(MAX_SCANWIDTH);
80         ui->sbox_width->setValue(DEF_SCANWIDTH);
81     }
82 
83 private slots:
on_sbox_numsamples_valueChanged(int val)84     void on_sbox_numsamples_valueChanged(int val){
85         numsample = qBound((int)MIN_NUMSAMPLE,  val, (int)MAX_NUMSAMPLE);
86         emit laser_parameter_updated();
87     }
on_sbox_width_valueChanged(int val)88     void on_sbox_width_valueChanged(int val){
89         scanwidth = qBound((int)MIN_SCANWIDTH, val, (int)MAX_SCANWIDTH);
90         emit laser_parameter_updated();
91     }
on_sbox_freq_valueChanged(int val)92     void on_sbox_freq_valueChanged(int val){
93         sampfreq  = qBound((int)MIN_SAMPFREQ, val, (int)MAX_SAMPFREQ);
94         emit laser_parameter_updated();
95     }
on_scanbutton_released()96     void on_scanbutton_released(){
97         emit scan_requested();
98     }
on_saveButton_released()99     void on_saveButton_released(){
100         emit save_requested();
101     }
102 };
103 #endif // WIDGET_H
104