1 /***************************************************************************
2 FAC_toggle.cpp
3 Handle dialog factory element : Toggle
4 (C) 2006 Mean Fixounet@free.fr
5 ***************************************************************************/
6
7 /***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16 #include <QGridLayout>
17 #include <QSpinBox>
18
19 #include "T_toggle.h"
20 #include "ADM_default.h"
21 #include "DIA_factory.h"
22 #include "ADM_dialogFactoryQt4.h"
23
24 extern const char *shortkey(const char *);
25
26 namespace ADM_qt4Factory
27 {
28 class diaElemToggle : public diaElemToggleBase,QtFactoryUtils
29 {
30 protected:
31 public:
32 diaElemToggle(bool *toggleValue,const char *toggleTitle, const char *tip=NULL);
33 virtual ~diaElemToggle() ;
34 void setMe(void *dialog, void *opaque,uint32_t line);
35 void getMe(void);
36 void enable(uint32_t onoff) ;
37 void finalize(void);
38 void updateMe();
39 uint8_t link(uint32_t onoff,diaElem *w);
40 int getRequiredLayout(void);
41 };
42
43 class diaElemToggleUint : public diaElem,QtFactoryUtils
44 {
45 protected:
46 uint32_t *emb;
47 const char *embName;
48 void *widgetUint;
49 uint32_t _min,_max;
50 public:
51 diaElemToggleUint(uint32_t *toggleValue,const char *toggleTitle, uint32_t *uintval,
52 const char *name,uint32_t min,uint32_t max,const char *tip=NULL);
53 virtual ~diaElemToggleUint() ;
54 void setMe(void *dialog, void *opaque,uint32_t line);
55 void getMe(void);
56 void enable(uint32_t onoff) ;
57 void finalize(void);
58 void updateMe();
59 int getRequiredLayout(void);
60 };
61 class diaElemToggleInt : public diaElem,QtFactoryUtils
62 {
63 protected:
64 int32_t *emb;
65 const char *embName;
66 void *widgetUint;
67 int32_t _min,_max;
68 public:
69 diaElemToggleInt(uint32_t *toggleValue,const char *toggleTitle, int32_t *uintval,
70 const char *name,int32_t min,int32_t max,const char *tip=NULL);
71 virtual ~diaElemToggleInt() ;
72 void setMe(void *dialog, void *opaque,uint32_t line);
73 void getMe(void);
74 void finalize(void);
75 void updateMe();
76 void enable(uint32_t onoff) ;
77 int getRequiredLayout(void);
78 };
79
changed(int i)80 void ADM_QCheckBox::changed(int i)
81 {
82 switch(_type)
83 {
84 case TT_TOGGLE:
85 ((diaElemToggle *)_toggle)->updateMe();break;
86 case TT_TOGGLE_UINT:
87 ((diaElemToggleUint *)_toggle)->updateMe();break;
88 case TT_TOGGLE_INT:
89 ((diaElemToggleInt *)_toggle)->updateMe();break;
90 default:
91 ADM_assert(0);break;
92 }
93 }
94
ADM_QCheckBox(const QString & str,QWidget * root,void * toggle,TOG_TYPE type)95 ADM_QCheckBox::ADM_QCheckBox(const QString & str,QWidget *root,void *toggle,TOG_TYPE type) : QCheckBox(str,root)
96 {
97 _toggle=toggle;
98 _type=type;
99 }
100
connectMe(void)101 void ADM_QCheckBox::connectMe(void)
102 {
103 QObject::connect(this, SIGNAL(stateChanged(int)), this, SLOT(changed(int )));
104 }
105
diaElemToggle(bool * toggleValue,const char * toggleTitle,const char * tip)106 diaElemToggle::diaElemToggle(bool *toggleValue,const char *toggleTitle, const char *tip)
107 : diaElemToggleBase(),QtFactoryUtils(toggleTitle)
108 {
109 param=(void *)toggleValue;
110 this->tip=tip;
111 myWidget=NULL;
112 nbLink=0;
113 }
114
~diaElemToggle()115 diaElemToggle::~diaElemToggle()
116 {
117 // ADM_QCheckBox *box=(ADM_QCheckBox *)myWidget;
118 // if(box) delete box;
119 myWidget=NULL;
120 }
setMe(void * dialog,void * opaque,uint32_t l)121 void diaElemToggle::setMe(void *dialog, void *opaque,uint32_t l)
122 {
123 ADM_QCheckBox *box=new ADM_QCheckBox(myQtTitle,(QWidget *)dialog,this,TT_TOGGLE);
124 QVBoxLayout *layout=(QVBoxLayout*) opaque;
125 myWidget=(void *)box;
126 if( *(bool *)param)
127 {
128 box->setCheckState(Qt::Checked);
129 }
130
131 layout->addWidget(box);
132 box->connectMe();
133 }
getMe(void)134 void diaElemToggle::getMe(void)
135 {
136 ADM_QCheckBox *box=(ADM_QCheckBox *)myWidget;
137 bool *val=(bool *)param;
138 if(Qt::Checked==box->checkState())
139 {
140 *val=true;
141 }else
142 *val=false;
143 }
enable(uint32_t onoff)144 void diaElemToggle::enable(uint32_t onoff)
145 {
146 ADM_QCheckBox *box=(ADM_QCheckBox *)myWidget;
147 ADM_assert(box);
148 if(onoff)
149 box->setEnabled(true);
150 else
151 box->setDisabled(true);
152 }
153
finalize(void)154 void diaElemToggle::finalize(void)
155 {
156 updateMe();
157 }
updateMe(void)158 void diaElemToggle::updateMe(void)
159 {
160
161 uint32_t val;
162 uint32_t rank=0;
163 if(!nbLink) return;
164 ADM_assert(myWidget);
165
166 ADM_QCheckBox *box=(ADM_QCheckBox *)myWidget;
167
168 if(Qt::Checked==box->checkState())
169 {
170 rank=1;
171 }
172 /* Now search through the linked list to see if something happens ...*/
173
174 /* 1 disable everything */
175 for(int i=0;i<nbLink;i++)
176 {
177 dialElemLink *l=&(links[i]);
178 l->widget->enable(0);
179 }
180 /* Then enable */
181 for(int i=0;i<nbLink;i++)
182 {
183 dialElemLink *l=&(links[i]);
184 if(l->onoff==rank) l->widget->enable(1);
185 }
186 }
187
link(uint32_t onoff,diaElem * w)188 uint8_t diaElemToggle::link(uint32_t onoff,diaElem *w)
189 {
190 ADM_assert(nbLink<MENU_MAX_lINK);
191 links[nbLink].onoff=onoff;
192 links[nbLink].widget=w;
193 nbLink++;
194 return 1;
195 }
196
getRequiredLayout(void)197 int diaElemToggle::getRequiredLayout(void) { return FAC_QT_VBOXLAYOUT; }
198
199 //******************************************************
200 // An UInt and a toggle linked...
201 //******************************************************
diaElemToggleUint(uint32_t * toggleValue,const char * toggleTitle,uint32_t * uintval,const char * name,uint32_t min,uint32_t max,const char * tip)202 diaElemToggleUint::diaElemToggleUint(uint32_t *toggleValue,const char *toggleTitle, uint32_t *uintval, const char *name,uint32_t min,uint32_t max,const char *tip)
203 : diaElem(ELEM_TOGGLE_UINT),QtFactoryUtils(toggleTitle)
204 {
205 param=(void *)toggleValue;
206 this->tip=tip;
207 embName=name;
208 emb=uintval;
209 widgetUint=NULL;
210 _min=min;
211 _max=max;
212 }
213
~diaElemToggleUint()214 diaElemToggleUint::~diaElemToggleUint()
215 {
216 }
setMe(void * dialog,void * opaque,uint32_t line)217 void diaElemToggleUint::setMe(void *dialog, void *opaque,uint32_t line)
218 {
219 ADM_QCheckBox *box=new ADM_QCheckBox(myQtTitle,(QWidget *)dialog,this,TT_TOGGLE_UINT);
220 QGridLayout *layout=(QGridLayout*) opaque;
221 QHBoxLayout *hboxLayout = new QHBoxLayout();
222 myWidget=(void *)box;
223 if( *(uint32_t *)param)
224 {
225 box->setCheckState(Qt::Checked);
226 }
227
228 // Now add spin
229 QSpinBox *spin=new QSpinBox((QWidget *)dialog);
230 widgetUint=(void *)spin;
231
232 spin->setMinimum(_min);
233 spin->setMaximum(_max);
234 spin->setValue(*(uint32_t *)emb);
235
236 QSpacerItem *spacer = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
237
238 hboxLayout->addWidget(spin);
239 hboxLayout->addItem(spacer);
240
241 layout->addWidget(box,line,0);
242 layout->addLayout(hboxLayout,line,1);
243 box->connectMe();
244 }
245
getMe(void)246 void diaElemToggleUint::getMe(void)
247 {
248 ADM_QCheckBox *box=(ADM_QCheckBox *)myWidget;
249 uint32_t *val=(uint32_t *)param;
250 if(Qt::Checked==box->checkState())
251 {
252 *val=1;
253 }else
254 *val=0;
255 //
256 uint32_t u;
257 QSpinBox *spin=(QSpinBox *)widgetUint;
258 u=spin->value();
259 if(u<_min) u=_min;
260 if(u>_max) u=_max;
261 *emb=u;
262
263 }
finalize(void)264 void diaElemToggleUint::finalize(void)
265 {
266 updateMe();
267 }
updateMe(void)268 void diaElemToggleUint::updateMe(void)
269 {
270 uint32_t val;
271 uint32_t rank=false;
272 ADM_assert(myWidget);
273
274 ADM_QCheckBox *box=(ADM_QCheckBox *)myWidget;
275 QSpinBox *spin=(QSpinBox *)widgetUint;
276
277 if(Qt::Checked==box->checkState())
278 {
279 rank=true;
280 }
281 spin->setEnabled(rank);
282 }
enable(uint32_t onoff)283 void diaElemToggleUint::enable(uint32_t onoff)
284 {
285 ADM_QCheckBox *box=(ADM_QCheckBox *)myWidget;
286 QSpinBox *spin=(QSpinBox *)widgetUint;
287 ADM_assert(box);
288 if(onoff)
289 {
290 box->setEnabled(true);
291 spin->setEnabled(true);
292 }
293 else
294 {
295 box->setEnabled(false);
296 spin->setEnabled(false);
297 }
298 }
299
getRequiredLayout(void)300 int diaElemToggleUint::getRequiredLayout(void) { return FAC_QT_GRIDLAYOUT; }
301
302 //******************************************************
303 // An Int and a toggle linked...
304 //******************************************************
305
diaElemToggleInt(uint32_t * toggleValue,const char * toggleTitle,int32_t * uintval,const char * name,int32_t min,int32_t max,const char * tip)306 diaElemToggleInt::diaElemToggleInt(uint32_t *toggleValue,const char *toggleTitle, int32_t *uintval, const char *name,int32_t min,int32_t max,const char *tip)
307 : diaElem(ELEM_TOGGLE_INT),QtFactoryUtils(toggleTitle)
308 {
309 param=(void *)toggleValue;
310 this->tip=tip;
311 embName=name;
312 emb=uintval;
313 widgetUint=NULL;
314 _min=min;
315 _max=max;
316 }
317
~diaElemToggleInt()318 diaElemToggleInt::~diaElemToggleInt()
319 {
320
321 }
setMe(void * dialog,void * opaque,uint32_t line)322 void diaElemToggleInt::setMe(void *dialog, void *opaque,uint32_t line)
323 {
324 ADM_QCheckBox *box=new ADM_QCheckBox(myQtTitle,(QWidget *)dialog,this,TT_TOGGLE_INT);
325 QGridLayout *layout=(QGridLayout*) opaque;
326 QHBoxLayout *hboxLayout = new QHBoxLayout();
327 myWidget=(void *)box;
328 if( *(uint32_t *)param)
329 {
330 box->setCheckState(Qt::Checked);
331 }
332
333 // Now add spin
334 QSpinBox *spin=new QSpinBox((QWidget *)dialog);
335 widgetUint=(void *)spin;
336
337 spin->setMinimum(_min);
338 spin->setMaximum(_max);
339 spin->setValue(*emb);
340
341 QSpacerItem *spacer = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
342
343 hboxLayout->addWidget(spin);
344 hboxLayout->addItem(spacer);
345
346 layout->addWidget(box,line,0);
347 layout->addLayout(hboxLayout,line,1);
348 box->connectMe();
349 }
350
getMe(void)351 void diaElemToggleInt::getMe(void)
352 {
353 ADM_QCheckBox *box=(ADM_QCheckBox *)myWidget;
354 uint32_t *val=(uint32_t *)param;
355 if(Qt::Checked==box->checkState())
356 {
357 *val=1;
358 }else
359 *val=0;
360 //
361 int32_t u;
362 QSpinBox *spin=(QSpinBox *)widgetUint;
363 u=spin->value();
364 if(u<_min) u=_min;
365 if(u>_max) u=_max;
366 *emb=u;
367 }
368
getRequiredLayout(void)369 int diaElemToggleInt::getRequiredLayout(void) { return FAC_QT_GRIDLAYOUT; }
370
finalize(void)371 void diaElemToggleInt::finalize(void)
372 {
373 updateMe();
374 }
updateMe(void)375 void diaElemToggleInt::updateMe(void)
376 {
377 uint32_t val;
378 uint32_t rank=false;
379 ADM_assert(myWidget);
380
381 ADM_QCheckBox *box=(ADM_QCheckBox *)myWidget;
382 QSpinBox *spin=(QSpinBox *)widgetUint;
383
384 if(Qt::Checked==box->checkState())
385 {
386 rank=true;
387 }
388 spin->setEnabled(rank);
389 }
enable(uint32_t onoff)390 void diaElemToggleInt::enable(uint32_t onoff)
391 {
392 ADM_QCheckBox *box=(ADM_QCheckBox *)myWidget;
393 QSpinBox *spin=(QSpinBox *)widgetUint;
394 ADM_assert(box);
395 if(onoff)
396 {
397 box->setEnabled(true);
398 spin->setEnabled(true);
399 }
400 else
401 {
402 box->setEnabled(false);
403 spin->setEnabled(false);
404 }
405 }
406
407 } // End of namespace
408 //****************************Hoook*****************
409
qt4CreateToggleUint(uint32_t * toggleValue,const char * toggleTitle,uint32_t * uintval,const char * name,uint32_t min,uint32_t max,const char * tip)410 diaElem *qt4CreateToggleUint(uint32_t *toggleValue,const char *toggleTitle, uint32_t *uintval,
411 const char *name,uint32_t min,uint32_t max,const char *tip)
412 {
413 return new ADM_qt4Factory::diaElemToggleUint(toggleValue,toggleTitle, uintval,
414 name,min,max,tip);
415 }
qt4DestroyToggleUint(diaElem * e)416 void qt4DestroyToggleUint(diaElem *e)
417 {
418 ADM_qt4Factory::diaElemToggleUint *a=(ADM_qt4Factory::diaElemToggleUint *)e;
419 delete a;
420 }
421
qt4CreateToggleInt(uint32_t * toggleValue,const char * toggleTitle,int32_t * uintval,const char * name,int32_t min,int32_t max,const char * tip)422 diaElem *qt4CreateToggleInt(uint32_t *toggleValue,const char *toggleTitle, int32_t *uintval,
423 const char *name,int32_t min,int32_t max,const char *tip)
424 {
425 return new ADM_qt4Factory::diaElemToggleInt(toggleValue,toggleTitle, uintval,
426 name,min,max,tip);
427 }
qt4DestroyToggleInt(diaElem * e)428 void qt4DestroyToggleInt(diaElem *e)
429 {
430 ADM_qt4Factory::diaElemToggleInt *a=(ADM_qt4Factory::diaElemToggleInt *)e;
431 delete a;
432 }
qt4CreateToggle(bool * toggleValue,const char * toggleTitle,const char * tip)433 diaElem *qt4CreateToggle(bool *toggleValue,const char *toggleTitle, const char *tip)
434 {
435 return new ADM_qt4Factory::diaElemToggle(toggleValue,toggleTitle, tip);
436 }
qt4DestroyToggle(diaElem * e)437 void qt4DestroyToggle(diaElem *e)
438 {
439 ADM_qt4Factory::diaElemToggle *a=(ADM_qt4Factory::diaElemToggle *)e;
440 delete a;
441 }
442
443
444
445 //EOF
446