A input dialog that asks for two values that construct a range.
[shepherd:shepherd-plugins.git] / shepherd / triggers / sensors / rangeInputDialog / rangeInputDialog.cpp
1 #include "ui_rangeInput.h"
2 #include "rangeInputDialog.h"
3 #include <QIntValidator>
4
5 /**
6  * Setup the UI, set the default checkboxes/texts and connect the slots with
7  * the appropriate signals
8  */
9 RangeInputDialog::RangeInputDialog(
10         int minValueInit, bool minRelationInit,
11         int maxValueInit, bool maxRelationInit, 
12         int minInit, int maxInit,
13         QWidget *parent) :
14     QDialog(parent), 
15     minValue(minValueInit), maxValue(maxValueInit), 
16     minRelation(minRelationInit), maxRelation(maxRelationInit),
17     min(minInit), max(maxInit)
18 {
19     setupUi(this);
20
21     validator = new QIntValidator(min, max, this);    
22     minValueEdit->setValidator(validator);
23     maxValueEdit->setValidator(validator);
24     
25     minSlider->setMinimum(min);
26     minSlider->setMaximum(max);
27     minSlider->setValue(minValue);
28     minUpdated(minValue);
29     if (!minRelation) {
30         maxRelationButton->setText("<");
31     }
32
33     maxSlider->setMinimum(min);
34     maxSlider->setMaximum(max);
35     maxSlider->setValue(maxValue);
36     maxUpdated(maxValue); 
37     if (!maxRelation) {
38         maxRelationButton->setText("<");
39     }
40
41     connect(saveButton, SIGNAL(clicked()), this, SLOT(save()));
42
43     connect(minRelationButton, SIGNAL(clicked()), this, SLOT(minRelationChange()));
44     connect(maxRelationButton, SIGNAL(clicked()), this, SLOT(maxRelationChange()));
45     
46     connect(minSlider, SIGNAL(valueChanged(int)), this, SLOT(minUpdated(int)));
47     connect(maxSlider, SIGNAL(valueChanged(int)), this, SLOT(maxUpdated(int)));
48
49     connect(minValueEdit, SIGNAL(textEdited(QString)), this, SLOT(minUpdated(QString)));
50     connect(maxValueEdit, SIGNAL(textEdited(QString)), this, SLOT(maxUpdated(QString)));
51 }
52
53 /**
54  * Destroy objects created on the heap
55  */
56 RangeInputDialog::~RangeInputDialog()
57 {
58     delete validator;
59 }
60
61 /**
62  * A slot for updating the text in the QTextEdit minValueEdit field
63  * @param value The value to be set
64  */
65 void RangeInputDialog::minUpdated(int value)
66 {
67     minValueEdit->setText(QString::number(value));
68 }
69
70 /**
71  * A slot for updating the text in the QTextEdit maxValueEdit field
72  * @param value The value to be set
73  */
74 void RangeInputDialog::maxUpdated(int value)
75 {
76     maxValueEdit->setText(QString::number(value));
77 }
78
79 /**
80  * A slot for updating the value of the minSlider
81  * @param value The value to be set
82  */
83 void RangeInputDialog::minUpdated(QString value)
84 {
85     minSlider->setValue(value.toInt());
86 }
87
88 /**
89  * A slot for updating the value of the maxSlider
90  * @param value The value to be set
91  */
92 void RangeInputDialog::maxUpdated(QString value)
93 {
94     maxSlider->setValue(value.toInt());
95 }
96
97 /**
98  * A slot that is called every time the minRelationButton is pressed.
99  * When the minRelation is true, the user-inserted value should be greater then
100  * the sensor value. And vice versa.
101  * If minRelation equals true; X > sensor.value();
102  */ 
103 void RangeInputDialog::minRelationChange()
104 {
105     minRelation = !minRelation;
106     if (minRelation) {
107         minRelationButton->setText(">");
108     }
109     else {
110         minRelationButton->setText("<");
111     }
112 }
113
114 /**
115  * A slot that is called every time the maxRelationButton is pressed.
116  * When the maxRelation is true, the user-inserted value should be greater then
117  * the sensor value. And vice versa.
118  * If maxRelation equals true; X > sensor.value();
119  */ 
120 void RangeInputDialog::maxRelationChange()
121 {
122     maxRelation  = !maxRelation;
123     if (maxRelation) {
124         maxRelationButton->setText(">");
125     }
126     else {
127         maxRelationButton->setText("<");
128     }
129 }
130
131 /**
132  * Getter method for the min value the user has inserted.
133  * @return the minimum value the user inserted
134  */
135 int RangeInputDialog::getMin()
136 {
137     return minValue;
138 }
139
140 /**
141  * Getter method for the max value the user has inserted.
142  * @return the maximum value the user inserted
143  */
144 int RangeInputDialog::getMax()
145 {
146     return maxValue;
147 }
148
149 /**
150  * A getter method for getting the relation between the user inserted minimum
151  * value and the sensor value.
152  * @return true if the user whishes the minimum value should be greater then
153  * the sensor value.
154  */
155 bool RangeInputDialog::getMinRelation()
156 {
157     return minRelation;
158 }
159
160 /**
161  * A getter method for getting the relation between the user inserted maximum
162  * value and the sensor value.
163  * @return true if the user whishes the maximum value should be greater then
164  * the sensor value.
165  */
166 bool RangeInputDialog::getMaxRelation()
167 {
168     return maxRelation;
169 }
170
171 /**
172  * The slot that is called when the save button is pushed
173  * This method saves the current state and closes the dialog
174  */
175 void RangeInputDialog::save()
176 {
177     minValue = minSlider->value();
178     maxValue = maxSlider->value();
179     this->accept();
180 }
181