YARP
Yet Another Robot Platform
 
Loading...
Searching...
No Matches
dc1394slider.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2025-2025 Istituto Italiano di Tecnologia (IIT)
3 * SPDX-License-Identifier: LGPL-2.1-or-later
4 */
5
6#include "dc1394slider.h"
7#include "ui_dc1394slider.h"
8
9DC1394Slider::DC1394Slider(QWidget *parent) :
10 DC1394SliderBase(parent),
11 ui(new Ui::DC1394Slider)
12{
13 ui->setupUi(this);
14
15
16 m_bInactive=false;
17
18 m_old_value=-1.0;
19 pressed = false;
20
21}
22
24{
25 disconnectWidgets();
26 delete ui;
27}
28
30{
31 int value = ui->m_Slider->value();
32 double val = (double)value/1000;
33 int w = ui->m_Slider->width() - 30;
34 double newX = ((double)w/(double)1000) * (double)value;
35 ui->lblValue->setGeometry(newX,0,30,20);
36 ui->lblValue->setText(QString("%L1").arg(val,0,'f',3));
37}
38
39void DC1394Slider::resizeEvent(QResizeEvent* event)
40{
41 QWidget::resizeEvent(event);
42
44}
45
47{
49 this->controlThread = controlThread;
50
51 connect(controlThread,SIGNAL(sliderHasFeatureDone(QObject*,bool)),
52 this,SLOT(onHasFeatureDone(QObject*,bool)),Qt::QueuedConnection);
53
54 connect(controlThread,SIGNAL(sliderRefreshDone(QObject*,bool,bool,bool,bool,bool,bool,double)),
55 this,SLOT(onRefreshDone(QObject*,bool,bool,bool,bool,bool,bool,double)),Qt::QueuedConnection);
56
57 connect(controlThread,SIGNAL(sliderSetFeatureDC1394Done(QObject*,double)),
58 this,SLOT(onSliderSetFeatureDone(QObject*,double)),Qt::QueuedConnection);
59
60 connect(controlThread,SIGNAL(sliderRadioAutoDone(QObject*,bool,bool)),
61 this,SLOT(onRadioAutoDone(QObject*,bool,bool)),Qt::QueuedConnection);
62
63 connect(controlThread,SIGNAL(sliderPowerDone(QObject*,bool,bool,bool,bool)),
64 this,SLOT(onPowerDone(QObject*,bool,bool,bool,bool)),Qt::QueuedConnection);
65
66 connect(controlThread,SIGNAL(sliderOnePushDone(QObject*,double)),
67 this,SLOT(onOnePushDone(QObject*,double)),Qt::QueuedConnection);
68
69 type = SLIDER;
70 m_Name=label;
71
72 ui->label->setTitle(m_Name);
73
74 connectWidgets();
75
76 QVariantList list;
77 list.append(qVariantFromValue((void*)this));
78 list.append(QVariant((int)m_Feature));
79 controlThread->doTask(_sliderHasFeature,list);
80
81 return true;
82}
83
84void DC1394Slider::onHasFeatureDone(QObject *slider, bool hasFeature)
85{
86 if(slider != this){
87 return;
88 }
89
90 if(hasFeature){
91 return;
92 }
93
94 disconnectWidgets();
95
96 m_bInactive=true;
97 setVisible(false);
98
99 featureDisabled(this);
100}
101
102void DC1394Slider::connectWidgets()
103{
104 connect(ui->m_Slider,SIGNAL(valueChanged(int)),this,SLOT(onSliderValueChanged(int)));
105 connect(ui->m_Slider,SIGNAL(sliderPressed()),this,SLOT(onSliderPressed()));
106 connect(ui->m_Slider,SIGNAL(sliderReleased()),this,SLOT(onSliderReleased()));
107
108 connect(ui->m_OnePush,SIGNAL(clicked()),this,SLOT(onOnePushClicked()));
109 connect(ui->pRBa,SIGNAL(toggled(bool)),this,SLOT(onRadioAuto(bool)));
110 //connect(ui->pRBm,SIGNAL(toggled(bool)),this,SLOT(onRadioManual(bool)));
111 connect(ui->pPwr,SIGNAL(toggled(bool)),this,SLOT(onPower(bool)));
112}
113
114void DC1394Slider::disconnectWidgets()
115{
116 disconnect(ui->m_Slider,SIGNAL(valueChanged(int)),this,SLOT(onSliderValueChanged(int)));
117 disconnect(ui->m_Slider,SIGNAL(sliderPressed()),this,SLOT(onSliderPressed()));
118 disconnect(ui->m_Slider,SIGNAL(sliderReleased()),this,SLOT(onSliderReleased()));
119 disconnect(ui->m_OnePush,SIGNAL(clicked()),this,SLOT(onOnePushClicked()));
120 disconnect(ui->pRBa,SIGNAL(toggled(bool)),this,SLOT(onRadioAuto(bool)));
121 //disconnect(ui->pRBm,SIGNAL(toggled(bool)),this,SLOT(onRadioManual(bool)));
122 disconnect(ui->pPwr,SIGNAL(toggled(bool)),this,SLOT(onPower(bool)));
123}
124
125
127{
128 if (m_bInactive){
129 return;
130 }
131
132 int f = (int)m_Feature;
133 QVariantList list;
134 list.append(qVariantFromValue((void*)this));
135 list.append(QVariant(f));
136 controlThread->doTask(_sliderRefresh,list);
137}
138
139void DC1394Slider::onRefreshDone(QObject *slider,bool bON,bool bAuto,bool bHasOnOff,bool bHasAuto,bool bHasManual,bool bHasOnePush,double val)
140{
141 if(slider != this){
142 return;
143 }
144 disconnectWidgets();
145
146 ui->pPwr->setChecked(bON);
147 ui->pPwr->setEnabled(bHasOnOff || bON);
148 ui->pRBa->setEnabled(bON && bHasAuto);
149 ui->pRBm->setEnabled(bON && bHasManual);
150
151 ui->m_Slider->setEnabled(bHasManual && !bAuto);
152 ui->lblValue->setEnabled(bHasManual && !bAuto);
153 ui->m_OnePush->setEnabled(bON && bHasOnePush); // why setEnabled(false) is different from setDisable(true)?
154
155 if (bAuto) {
156 ui->pRBa->setChecked(true);
157 } else {
158 ui->pRBm->setChecked(true);
159 }
160
161 if (m_old_value != (m_new_value=val)){
163 ui->m_Slider->setValue(m_new_value * 1000);
164 ui->m_Slider->update();
165 onSliderValueChanged(m_new_value * 1000);
166 }
167
168 connectWidgets();
169}
170
172{
173 if (m_bInactive){
174 return;
175 }
176
177 QVariantList list;
178 list.append(QVariant((int)m_Feature));
179 list.append(QVariant((double)ui->m_Slider->value() / 1000));
180 list.append(QVariant(ui->pRBa->isChecked()));
181 list.append(QVariant(ui->pPwr->isChecked()));
182
183 controlThread->doTask(_sliderPropagate,list);
184}
185
186void DC1394Slider::onSliderPressed()
187{
188 pressed = true;
189}
190
191void DC1394Slider::onSliderReleased()
192{
193
194 pressed = false;
195 double val = (double)ui->m_Slider->value()/1000;
196
197 QVariantList list;
198 list.append(qVariantFromValue((void*)this));
199 list.append(QVariant((int)m_Feature));
200 list.append(QVariant(val));
201 controlThread->doTask(_sliderSetFeature,list);
202}
203
204void DC1394Slider::onSliderValueChanged(int value)
205{
206 double val = (double)value/1000;
207 int w = ui->m_Slider->width() - 30;
208 double newX = ((double)w/(double)1000) * (double)value;
209 ui->lblValue->setGeometry(newX,0,30,20);
210 ui->lblValue->setText(QString("%L1").arg(val,0,'f',3));
211}
212
213void DC1394Slider::onSliderSetFeatureDone(QObject *slider, double val)
214{
215 if(slider != this){
216 return;
217 }
218 yDebug("%s new value %lf\n",m_Name.toLatin1().data(),val);
219}
220
221void DC1394Slider::onOnePushClicked()
222{
223
224 QVariantList list;
225 list.append(qVariantFromValue((void*)this));
226 list.append(QVariant((int)m_Feature));
227 controlThread->doTask(_sliderOnePush,list);
228}
229
230void DC1394Slider::onOnePushDone(QObject *slider, double val)
231{
232 if(slider != this){
233 return;
234 }
235
236 disconnectWidgets();
237 if (m_old_value!=(m_new_value=val)){
239 ui->m_Slider->setValue(m_new_value * 1000);
240 onSliderReleased();
241 }
242 connectWidgets();
243
244 controlThread->doTask(_reload);
245}
246
247void DC1394Slider::onRadioAuto(bool toggled)
248{
249 bool bAuto=toggled;
250
251 QVariantList list;
252 list.append(qVariantFromValue((void*)this));
253 list.append(QVariant((int)m_Feature));
254 list.append(QVariant(bAuto));
255 controlThread->doTask(_sliderRadioAuto,list);
256}
257
258void DC1394Slider::onRadioAutoDone(QObject *slider,bool bON, bool bAuto)
259{
260 if(slider != this){
261 return;
262 }
263
264 ui->m_Slider->setEnabled(bON && !bAuto);
265 ui->lblValue->setEnabled(bON && !bAuto);
266 yDebug("%s\n",ui->pRBa->isChecked() ? "auto":"man");
267
268 controlThread->doTask(_reload);
269}
270
271void DC1394Slider::onPower(bool checked)
272{
273 bool bON=checked;
274
275 QVariantList list;
276 list.append(qVariantFromValue((void*)this));
277 list.append(QVariant((int)m_Feature));
278 list.append(QVariant(bON));
279 controlThread->doTask(_sliderPower,list);
280}
281
282void DC1394Slider::onPowerDone(QObject *slider, bool bON,bool hasAuto, bool hasManual, bool hasOnePush)
283{
284 if(slider != this){
285 return;
286 }
287
288 ui->pRBa->setEnabled(bON && hasAuto);
289 ui->pRBm->setEnabled(bON && hasManual);
290 ui->m_Slider->setEnabled(bON && ui->pRBm->isChecked());
291 ui->lblValue->setEnabled(bON && ui->pRBm->isChecked());
292 ui->m_OnePush->setEnabled(bON && hasOnePush); // why setEnabled(false) is different from setDisable(true)?
293 yDebug("power %s\n", ui->pPwr->isChecked() ? "on" : "off");
294
295 controlThread->doTask(_reload);
296}
297
299{
300 ui->m_Slider->setValue(val * 1000);
301 onSliderValueChanged(val * 1000);
302 onSliderReleased();
303}
#define yDebug(...)
Definition Log.h:275
int SIGNAL(int pid, int signum)
void featureDisabled(QObject *)
void updateSliders()
double m_old_value
void set_value(double val)
QString m_Name
yarp::dev::cameraFeature_id_t m_Feature
DC1394Slider(QWidget *parent=nullptr)
void resizeEvent(QResizeEvent *event)
bool init(yarp::dev::cameraFeature_id_t feature, char *label, DC1394Thread *controlThread)
double m_new_value
void doTask(threadFunction)
#define SLIDER
@ _sliderOnePush
@ _sliderSetFeature
@ _sliderPropagate
@ _reload
@ _sliderRadioAuto
@ _sliderRefresh
@ _sliderPower
@ _sliderHasFeature
Definition aboutdlg.h:11