YARP
Yet Another Robot Platform
 
Loading...
Searching...
No Matches
dc1394sliderwb.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 "dc1394sliderwb.h"
7#include "ui_dc1394sliderwb.h"
8
9using namespace yarp::dev;
10
12 DC1394SliderBase(parent),
13 ui(new Ui::DC1394SliderWB)
14{
15 ui->setupUi(this);
16
17 m_bInactive=false;
18
19 m_old_red=m_old_blu=-1.0;
20}
21
23{
24 disconnectWidgets();
25 delete ui;
26}
27
29{
30 int rvalue = ui->m_SliderRed->value();
31 double rval = (double)rvalue/1000;
32 int rw = ui->m_SliderRed->width() - 30;
33 double rnewX = ((double)rw/(double)1000) * (double)rvalue;
34 ui->lblValueRed->setGeometry(rnewX,0,30,20);
35 ui->lblValueRed->setText(QString("%L1").arg(rval,0,'f',3));
36
37 int bvalue = ui->m_SliderBlue->value();
38 double bval = (double)bvalue/1000;
39 int bw = ui->m_SliderBlue->width() - 30;
40 double bnewX = ((double)bw/(double)1000) * (double)bvalue;
41 ui->lblValueBlue->setGeometry(bnewX,0,30,20);
42 ui->lblValueBlue->setText(QString("%L1").arg(bval,0,'f',3));
43}
44
45void DC1394SliderWB::resizeEvent(QResizeEvent* event)
46{
47 QWidget::resizeEvent(event);
48
50}
51
53{
54 this->controlThread = controlThread;
55
56 connect(controlThread,SIGNAL(sliderHasFeatureDone(QObject*,bool)),
57 this,SLOT(onHasFeatureDone(QObject*,bool)),Qt::QueuedConnection);
58
59 connect(controlThread,SIGNAL(sliderWBRefreshDone(QObject*,bool,bool,bool,bool,bool,bool,double,double)),
60 this,SLOT(onRefreshDone(QObject*,bool,bool,bool,bool,bool,bool,double,double)),Qt::QueuedConnection);
61
62 connect(controlThread,SIGNAL(sliderWBSetFeatureDC1394Done(QObject*,double,double)),
63 this,SLOT(onSliderWBSetFeatureDone(QObject*,double,double)),Qt::QueuedConnection);
64
65 connect(controlThread,SIGNAL(sliderRadioAutoDone(QObject*,bool,bool)),
66 this,SLOT(onRadioAutoDone(QObject*,bool,bool)),Qt::QueuedConnection);
67
68 connect(controlThread,SIGNAL(sliderPowerDone(QObject*,bool,bool,bool,bool)),
69 this,SLOT(onPowerDone(QObject*,bool,bool,bool,bool)),Qt::QueuedConnection);
70
71 connect(controlThread,SIGNAL(sliderWBOnePushDone(QObject*,double,double)),
72 this,SLOT(onOnePushDone(QObject*,double,double)),Qt::QueuedConnection);
73
74 type = SLIDERWB;
75
76 ui->label->setTitle("White Balance");
77
78 connectWidgets();
79
80 QVariantList list;
81 list.append(qVariantFromValue((void*)this));
82 list.append(QVariant((int)cameraFeature_id_t::YARP_FEATURE_WHITE_BALANCE));
83 controlThread->doTask(_sliderHasFeature,list);
84
85 return true;
86
87}
88
89void DC1394SliderWB::onHasFeatureDone(QObject *slider, bool hasFeature)
90{
91 if(slider != this){
92 return;
93 }
94
95 if(hasFeature){
96 return;
97 }
98
99 disconnectWidgets();
100
101 m_bInactive=true;
102 setVisible(false);
103
104 featureDisabled(this);
105}
106
107
108void DC1394SliderWB::connectWidgets()
109{
110 connect(ui->m_SliderRed,SIGNAL(valueChanged(int)),this,SLOT(onSliderRedValueChanged(int)));
111 connect(ui->m_SliderRed,SIGNAL(sliderReleased()),this,SLOT(onSliderRedReleased()));
112
113
114 connect(ui->m_SliderBlue,SIGNAL(valueChanged(int)),this,SLOT(onSliderBlueValueChanged(int)));
115 connect(ui->m_SliderBlue,SIGNAL(sliderReleased()),this,SLOT(onSliderBlueReleased()));
116
117 connect(ui->m_OnePush,SIGNAL(clicked()),this,SLOT(onOnePushClicked()));
118 connect(ui->pRBa,SIGNAL(toggled(bool)),this,SLOT(onRadioAuto(bool)));
119 connect(ui->pPwr,SIGNAL(toggled(bool)),this,SLOT(onPower(bool)));
120}
121
122void DC1394SliderWB::disconnectWidgets()
123{
124 disconnect(ui->m_SliderRed,SIGNAL(valueChanged(int)),this,SLOT(onSliderRedValueChanged(int)));
125 disconnect(ui->m_SliderRed,SIGNAL(sliderReleased()),this,SLOT(onSliderRedReleased()));
126 disconnect(ui->m_SliderBlue,SIGNAL(valueChanged(int)),this,SLOT(onSliderBlueValueChanged(int)));
127 disconnect(ui->m_SliderBlue,SIGNAL(sliderReleased()),this,SLOT(onSliderBlueReleased()));
128
129 disconnect(ui->m_OnePush,SIGNAL(clicked()),this,SLOT(onOnePushClicked()));
130 disconnect(ui->pRBa,SIGNAL(toggled(bool)),this,SLOT(onRadioAuto(bool)));
131 disconnect(ui->pPwr,SIGNAL(toggled(bool)),this,SLOT(onPower(bool)));
132}
133
134
136{
137 if (m_bInactive){
138 return;
139 }
140
141 int f = (int)cameraFeature_id_t::YARP_FEATURE_WHITE_BALANCE;
142 QVariantList list;
143 list.append(qVariantFromValue((void*)this));
144 list.append(QVariant(f));
145 controlThread->doTask(_sliderWBRefresh,list);
146}
147
148void DC1394SliderWB::onRefreshDone(QObject *slider,bool bON,bool bAuto,bool bHasOnOff,bool bHasAuto,bool bHasManual,bool bHasOnePush,double redVal, double blueVal)
149{
150 if(slider != this){
151 return;
152 }
153 disconnectWidgets();
154
155 if (bAuto) {
156 ui->pRBa->setChecked(true);
157 } else {
158 ui->pRBm->setChecked(true);
159 }
160
161 ui->pPwr->setChecked(bON);
162
163 ui->pPwr->setEnabled(bHasOnOff || bON || bAuto);
164 ui->pRBa->setEnabled(bON && bHasAuto);
165 ui->pRBm->setEnabled(bON && bHasManual);
166 ui->m_SliderRed->setEnabled(bHasManual && !bAuto);
167 ui->m_SliderBlue->setEnabled(bHasManual && !bAuto);
168 ui->m_OnePush->setEnabled(bON && bHasOnePush);
169
170 m_new_blu = blueVal;
171 m_new_red = redVal;
172
173 if (bAuto) {
174 ui->pRBa->setChecked(true);
175 } else {
176 ui->pRBm->setChecked(true);
177 }
178
179 if (m_new_blu!=m_old_blu){
180 m_old_blu=m_new_blu;
181 ui->m_SliderBlue->setValue(m_new_blu * 1000);
182 ui->m_SliderBlue->update();
183 onSliderBlueValueChanged(m_new_blu * 1000);
184 }
185
186 if (m_new_red!=m_old_red){
187 m_old_red=m_new_red;
188 ui->m_SliderRed->setValue(m_new_red * 1000);
189 ui->m_SliderRed->update();
190 onSliderRedValueChanged(m_new_red * 1000);
191 }
192
193 connectWidgets();
194}
195
197{
198 if (m_bInactive){
199 return;
200 }
201
202 QVariantList list;
203 list.append(QVariant((int)cameraFeature_id_t::YARP_FEATURE_WHITE_BALANCE));
204 list.append(QVariant((double)ui->m_SliderRed->value()/1000));
205 list.append(QVariant((double)ui->m_SliderBlue->value()/1000));
206 list.append(QVariant(ui->pRBa->isChecked()));
207 list.append(QVariant(ui->pPwr->isChecked()));
208
209 controlThread->doTask(_sliderWBPropagate,list);
210}
211
212void DC1394SliderWB::onSliderRedReleased()
213{
214 double val = (double)ui->m_SliderRed->value()/1000;
215 QVariantList list;
216 list.append(qVariantFromValue((void*)this));
217 list.append(QVariant((int)cameraFeature_id_t::YARP_FEATURE_WHITE_BALANCE));
218 list.append(QVariant(val));
219 list.append(QVariant((double)ui->m_SliderBlue->value()/1000));
220 controlThread->doTask(_sliderWBSetFeature,list);
221}
222
223void DC1394SliderWB::onSliderRedValueChanged(int value)
224{
225 double val = (double)value/1000;
226 int w = ui->m_SliderRed->width() - 30;
227 double newX = ((double)w/(double)1000) * (double)value;
228 ui->lblValueRed->setGeometry(newX,0,30,20);
229 ui->lblValueRed->setText(QString("%L1").arg(val,0,'f',3));
230}
231
232void DC1394SliderWB::onSliderBlueReleased()
233{
234 double val = (double)ui->m_SliderBlue->value()/1000;
235 QVariantList list;
236 list.append(qVariantFromValue((void*)this));
237 list.append(QVariant((int)cameraFeature_id_t::YARP_FEATURE_WHITE_BALANCE));
238 list.append(QVariant((double)ui->m_SliderRed->value()/1000));
239 list.append(QVariant(val));
240 controlThread->doTask(_sliderWBSetFeature,list);
241}
242
243void DC1394SliderWB::onSliderBlueValueChanged(int value)
244{
245 double val = (double)value/1000;
246 int w = ui->m_SliderBlue->width() - 30;
247 double newX = ((double)w/(double)1000) * (double)value;
248 ui->lblValueBlue->setGeometry(newX,0,30,20);
249 ui->lblValueBlue->setText(QString("%L1").arg(val,0,'f',3));
250}
251
252void DC1394SliderWB::onSliderWBSetFeatureDone(QObject *slider,double redVal,double blueVal)
253{
254 if(slider != this){
255 return;
256 }
257 yDebug("white balance %f %f\n", blueVal, redVal);
258}
259
260void DC1394SliderWB::onOnePushClicked()
261{
262 QVariantList list;
263 list.append(qVariantFromValue((void*)this));
264 list.append(QVariant((int)cameraFeature_id_t::YARP_FEATURE_WHITE_BALANCE));
265 controlThread->doTask(_sliderWBOnePush,list);
266}
267
268void DC1394SliderWB::onOnePushDone(QObject *slider, double redVal, double blueVal)
269{
270 if(slider != this){
271 return;
272 }
273
274 m_new_blu = blueVal;
275 m_new_red = redVal;
276
277 disconnectWidgets();
278 if (m_new_blu!=m_old_blu){
279 m_old_blu=m_new_blu;
280 ui->m_SliderBlue->setValue(m_new_blu * 1000);
281 onSliderBlueReleased();
282 }
283
284 if (m_new_red!=m_old_red){
285 m_old_red=m_new_red;
286 ui->m_SliderRed->setValue(m_new_red * 1000);
287 onSliderRedReleased();
288 }
289
290 connectWidgets();
291
292 controlThread->doTask(_reload);
293}
294
295
296void DC1394SliderWB::onRadioAuto(bool toggled)
297{
298 bool bAuto=toggled;
299
300 QVariantList list;
301 list.append(qVariantFromValue((void*)this));
302 list.append(QVariant((int)cameraFeature_id_t::YARP_FEATURE_WHITE_BALANCE));
303 list.append(QVariant(bAuto));
304 controlThread->doTask(_sliderRadioAuto,list);
305}
306
307void DC1394SliderWB::onRadioAutoDone(QObject *slider,bool bON, bool bAuto)
308{
309 if(slider != this){
310 return;
311 }
312
313 ui->m_SliderRed->setEnabled(!bAuto);
314 ui->m_SliderBlue->setEnabled(!bAuto);
315 yDebug("%s\n", ui->pRBa->isEnabled() ? "auto" : "man");
316 controlThread->doTask(_reload);
317}
318
319void DC1394SliderWB::onPower(bool checked)
320{
321 bool bON=checked;
322
323 QVariantList list;
324 list.append(qVariantFromValue((void*)this));
325 list.append(QVariant((int)cameraFeature_id_t::YARP_FEATURE_WHITE_BALANCE));
326 list.append(QVariant(bON));
327 controlThread->doTask(_sliderPower,list);
328}
329
330void DC1394SliderWB::onPowerDone(QObject *slider, bool bON,bool hasAuto, bool hasManual, bool hasOnePush)
331{
332 if(slider != this){
333 return;
334 }
335
336 ui->pRBa->setEnabled(bON && hasAuto);
337 ui->pRBm->setEnabled(bON && hasManual);
338 ui->m_SliderRed->setEnabled(bON && ui->pRBm->isChecked());
339 ui->m_SliderBlue->setEnabled(bON && ui->pRBm->isChecked());
340 ui->m_OnePush->setEnabled(bON && hasOnePush);
341 yDebug("power %s\n", ui->pPwr->isChecked() ? "on" : "off");
342
343 controlThread->doTask(_reload);
344}
345
346void DC1394SliderWB::set_value(double blue,double red)
347{
348 ui->m_SliderBlue->setValue(blue * 1000);
349 ui->m_SliderRed->setValue(red * 1000);
350
351 onSliderBlueReleased();
352 onSliderRedReleased();
353}
#define yDebug(...)
Definition Log.h:275
int SIGNAL(int pid, int signum)
void featureDisabled(QObject *)
void resizeEvent(QResizeEvent *event)
DC1394SliderWB(QWidget *parent=0)
void set_value(double blue, double red)
bool init(DC1394Thread *controlThread)
void doTask(threadFunction)
#define SLIDERWB
@ _sliderWBOnePush
@ _reload
@ _sliderRadioAuto
@ _sliderWBPropagate
@ _sliderWBRefresh
@ _sliderPower
@ _sliderWBSetFeature
@ _sliderHasFeature
Definition aboutdlg.h:11
For streams capable of holding different kinds of content, check what they actually have.