QXRD  0.11.16
qcepproperty.cpp
Go to the documentation of this file.
1 #include "qcepdebug.h"
2 #include "qcepproperty.h"
3 #include "qcepsettingssaver.h"
5 #include "qcepmutexlocker.h"
6 #include "qceppropertyvalue.h"
7 
8 #include <QSpinBox>
9 #include <QComboBox>
10 #include <QLineEdit>
11 #include <QDoubleSpinBox>
12 #include <QLabel>
13 #include <QProgressBar>
14 #include <QAbstractButton>
15 #include <QMetaProperty>
16 #include <QSettings>
17 #include <stdio.h>
18 #include "qcepvector3d.h"
19 #include "qcepmatrix3x3.h"
20 
21 QMap<QString, CustomSettingsSaver*> QcepProperty::m_CustomSavers;
22 
23 QcepProperty::QcepProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QString toolTip)
24  : QObject(),
25  m_Mutex(QMutex::Recursive),
26  m_Saver(saver),
27  m_Debug(false),
28  m_IsStored(false),
29  m_Name(name),
30  m_Parent(parent),
31  m_ToolTip(toolTip)
32 {
33  setObjectName(name);
34 
35  if (parent) {
36  const QMetaObject *metaObj = parent->metaObject();
37 
38  if (metaObj) {
39  int i = metaObj->indexOfProperty(name);
40 
41  if (i>=0) {
42  QMetaProperty metaProperty = metaObj->property(i);
43 
44  if (metaProperty.isStored()) {
45  m_IsStored = true;
46  } else {
47  m_IsStored = false;
48  }
49  }
50  }
51 
52  QCEP_DOC_OBJECT(tr("%1.%2").arg(parent->objectName()).arg(name), toolTip)
53  }
54 
55  if (m_Saver && !m_IsStored) {
56  printMessage(tr("Warning: property %1 of parent %2 has saver but is not stored")
57  .arg(name).arg(parent?parent->objectName():"NULL"));
58 // printf("Warning: property %s has saver but is not stored\n", qPrintable(name));
59  }
60 
61 // if (m_IsStored && !m_Saver) {
62 // printMessage(tr("Warning: property %1 of parent %2 is stored but has no saver")
63 // .arg(name).arg(parent?parent->objectName():"NULL"));
65 // }
66 }
67 
68 QString QcepProperty::name() const
69 {
70  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
71 
72  return m_Name;
73 }
74 
75 void QcepProperty::setName(QString name)
76 {
77  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
78 
79  m_Name = name;
80 }
81 
82 QString QcepProperty::parentName() const
83 {
84  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
85 
86  if (m_Parent) {
87  return m_Parent->objectName();
88  } else {
89  return QString();
90  }
91 }
92 
93 QString QcepProperty::toolTip() const
94 {
95  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
96 
97  return m_ToolTip;
98 }
99 
100 void QcepProperty::setToolTip(QString tip)
101 {
102  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
103 
104  m_ToolTip = tip;
105 }
106 
108 {
109  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
110 
111  QString pn = parentName();
112  QString nm = name();
113  QString tt = toolTip();
114 
115  if (pn.count() && nm.count() && tt.count()) {
116  return pn+"."+nm+"\n"+tt;
117  } else if (pn.count() || nm.count()) {
118  return pn+"."+nm+"\n"+tt;
119  } else {
120  return tt;
121  }
122 }
123 
124 void QcepProperty::setWidgetToolTip(QWidget *widget)
125 {
126  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
127 
128  if (widget) {
129  QString tt = widget->toolTip();
130 
131  if (tt == "") {
132  widget->setToolTip(expandedToolTip());
133  } else {
134  widget->setToolTip(tt + "\n=============\n" + expandedToolTip());
135  }
136  }
137 }
138 
140 {
141  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
142 
143  return m_Index.fetchAndAddOrdered(0);
144 }
145 
147 {
148  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
149 
150  return m_Index.fetchAndAddOrdered(step) + step;
151 }
152 
154 {
155  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
156 
157  m_Debug = dbg;
158 }
159 
161 {
162  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
163 
164  return m_Debug;
165 }
166 
168 {
169  qRegisterMetaType< QcepDoubleVector >("QcepDoubleVector");
170  qRegisterMetaType< QcepBoolVector >("QcepBoolVector");
171  qRegisterMetaType< QcepIntVector >("QcepIntVector");
172  qRegisterMetaType< QcepStringVector >("QcepStringVector");
173  qRegisterMetaType< QcepDoubleList >("QcepDoubleList");
174  qRegisterMetaType< QcepBoolList >("QcepBoolList");
175  qRegisterMetaType< QcepIntList >("QcepIntList");
176  qRegisterMetaType< QcepStringList >("QcepStringList");
177  qRegisterMetaType< QPointF >("QPointF");
178  qRegisterMetaType< QRectF >("QRectF");
179  qRegisterMetaType< QcepPolygon >("QcepPolygon");
180  qRegisterMetaType< QVariant >("QVariant");
181  qRegisterMetaType< QcepPropertyValue >("QcepPropertyValue");
182  qRegisterMetaType< QcepPropertyValue* >("QcepPropertyValue*");
183  qRegisterMetaType< QcepMatrix3x3 >("QcepMatrix3x3");
184  qRegisterMetaType< QcepVector3D >("QcepVector3D");
185  qRegisterMetaTypeStreamOperators< QcepDoubleVector >("QcepDoubleVector");
186  qRegisterMetaTypeStreamOperators< QcepBoolVector >("QcepBoolVector");
187  qRegisterMetaTypeStreamOperators< QcepIntVector >("QcepIntVector");
188  qRegisterMetaTypeStreamOperators< QcepStringVector >("QcepStringVector");
189  qRegisterMetaTypeStreamOperators< QcepDoubleList >("QcepDoubleList");
190  qRegisterMetaTypeStreamOperators< QcepBoolList >("QcepBoolList");
191  qRegisterMetaTypeStreamOperators< QcepIntList >("QcepIntList");
192  qRegisterMetaTypeStreamOperators< QcepStringList >("QcepStringList");
193  qRegisterMetaTypeStreamOperators< QPointF >("QPointF");
194  qRegisterMetaTypeStreamOperators< QRectF >("QRectF");
195  qRegisterMetaTypeStreamOperators< QcepPolygon >("QcepPolygon");
196  qRegisterMetaTypeStreamOperators< QcepMatrix3x3 >("QcepMatrix3x3");
197  qRegisterMetaTypeStreamOperators< QcepVector3D >("QcepVector3D");
198 
201 }
202 
204 {
205  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
206 
207  m_Saver = saver;
208 }
209 
210 void QcepProperty::setSettingsValue(QSettings *settings, QString name, QVariant v)
211 {
212  settings->setValue(name, v);
213 
214 // QVariant::Type typeId = v.type();
215  QString typeName = v.typeName();
216 
217  if (m_CustomSavers.contains(typeName)) {
218  CustomSettingsSaver *saver = m_CustomSavers[typeName];
219 
220  if (saver) {
221  (*saver)(v, settings, name);
222  }
223  } else if (v.canConvert<QcepVector3D>()) {
224  QcepVector3D pv = v.value<QcepVector3D>();
225 
226  pv.setSettingsValue(settings, name);
227  } else if (v.canConvert<QcepMatrix3x3>()) {
228  QcepMatrix3x3 pv = v.value<QcepMatrix3x3>();
229 
230  pv.setSettingsValue(settings, name);
231  } else if (v.canConvert<QcepDoubleVector>()){
232  QcepDoubleVector dv = v.value<QcepDoubleVector>();
233 
234  settings->beginWriteArray(name, dv.count());
235 
236  for (int i=0; i<dv.count(); i++) {
237  settings->setArrayIndex(i);
238  settings->setValue(name, dv.value(i));
239  }
240 
241  settings->endArray();
242  } else if (v.canConvert<QcepBoolVector>()) {
243  QcepBoolVector dv = v.value<QcepBoolVector>();
244 
245  settings->beginWriteArray(name, dv.count());
246 
247  for (int i=0; i<dv.count(); i++) {
248  settings->setArrayIndex(i);
249  settings->setValue(name, dv.value(i));
250  }
251 
252  settings->endArray();
253  } else if (v.canConvert<QcepIntVector>()) {
254  QcepIntVector dv = v.value<QcepIntVector>();
255 
256  settings->beginWriteArray(name, dv.count());
257 
258  for (int i=0; i<dv.count(); i++) {
259  settings->setArrayIndex(i);
260  settings->setValue(name, dv.value(i));
261  }
262 
263  settings->endArray();
264  } else if (v.canConvert<QcepStringVector>()) {
265  QcepStringVector dv = v.value<QcepStringVector>();
266 
267  settings->beginWriteArray(name, dv.count());
268 
269  for (int i=0; i<dv.count(); i++) {
270  settings->setArrayIndex(i);
271  settings->setValue(name, dv.value(i));
272  }
273 
274  settings->endArray();
275  } else if (v.canConvert<QcepDoubleList>()){
276  QcepDoubleList dv = v.value<QcepDoubleList>();
277 
278  settings->beginWriteArray(name, dv.count());
279 
280  for (int i=0; i<dv.count(); i++) {
281  settings->setArrayIndex(i);
282  settings->setValue(name, dv.value(i));
283  }
284 
285  settings->endArray();
286  } else if (v.canConvert<QcepBoolList>()) {
287  QcepBoolList dv = v.value<QcepBoolList>();
288 
289  settings->beginWriteArray(name, dv.count());
290 
291  for (int i=0; i<dv.count(); i++) {
292  settings->setArrayIndex(i);
293  settings->setValue(name, dv.value(i));
294  }
295 
296  settings->endArray();
297  } else if (v.canConvert<QcepIntList>()) {
298  QcepIntList dv = v.value<QcepIntList>();
299 
300  settings->beginWriteArray(name, dv.count());
301 
302  for (int i=0; i<dv.count(); i++) {
303  settings->setArrayIndex(i);
304  settings->setValue(name, dv.value(i));
305  }
306 
307  settings->endArray();
308  } else if (v.canConvert<QcepStringList>()) {
309  QcepStringList dv = v.value<QcepStringList>();
310 
311  settings->beginWriteArray(name, dv.count());
312 
313  for (int i=0; i<dv.count(); i++) {
314  settings->setArrayIndex(i);
315  settings->setValue(name, dv.value(i));
316  }
317 
318  settings->endArray();
319  } else if (v.canConvert<QcepPolygon>()) {
320  QcepPolygon dv = v.value<QcepPolygon>();
321 
322  settings->beginWriteArray(name, dv.count());
323 
324  for (int i=0; i<dv.count(); i++) {
325  settings->setArrayIndex(i);
326 // settings->beginGroup(name);
327  settings->setValue("x", dv.value(i).x());
328  settings->setValue("y", dv.value(i).y());
329 // settings->endGroup();
330  }
331 
332  settings->endArray();
333  } else if (v.canConvert<QPointF>()) {
334  QPointF dv = v.value<QPointF>();
335 
336  settings->beginGroup(name);
337 
338  settings->setValue("x", dv.x());
339  settings->setValue("y", dv.y());
340 
341  settings->endGroup();
342  } else if (v.canConvert<QRectF>()) {
343  QRectF dv = v.value<QRectF>();
344 
345  settings->beginGroup(name);
346 
347  settings->setValue("left", dv.left());
348  settings->setValue("top", dv.top());
349  settings->setValue("right", dv.right());
350  settings->setValue("bottom", dv.bottom());
351 
352  settings->endGroup();
353 // } else if (v.canConvert<QVector3D>()) {
354 // QVector3D dv = v.value<QVector3D>();
355 
356 // settings->beginGroup(name);
357 
358 // settings->setValue("x", dv.x());
359 // settings->setValue("y", dv.y());
360 // settings->setValue("z", dv.z());
361 
362 // settings->endGroup();
363 // } else if (v.canConvert<QMatrix3x3>()) {
364 // QMatrix3x3 dv = v.value<QMatrix3x3>();
365 
366 // settings->beginGroup(name);
367 
368 // for (int r=0; r<3; r++) {
369 // for (int c=0; c<3; c++) {
370 // settings->setValue(tr("r%1c%2").arg(r).arg(c), dv(r,c));
371 // }
372 // }
373 
374 // settings->endGroup();
375  } else if (v.type() == QVariant::StringList) {
376  QStringList dv = v.toStringList();
377 
378  settings->beginWriteArray(name, dv.count());
379 
380  for (int i=0; i<dv.count(); i++) {
381  settings->setArrayIndex(i);
382  settings->setValue(name, dv.value(i));
383  }
384 
385  settings->endArray();
386  }
387 }
388 
389 void QcepProperty::writeSettings(QObject *object, QSettings *settings, QString section)
390 {
391  if (settings && object) {
392  const QMetaObject *meta = object->metaObject();
393  int count = meta->propertyCount();
394  int offset = QObject::staticMetaObject.propertyCount();
395 
396  settings->beginGroup(section);
397 
398  for (int i=offset; i<count; i++) {
399  QMetaProperty metaproperty = meta->property(i);
400 
401  if (metaproperty.isStored()) {
402  const char *name = metaproperty.name();
403  QVariant value = object -> property(name);
404 
406  QString msg = tr("Save %1/%2 = %3 [%4]")
407  .arg(section).arg(name)
408  .arg(value.toString()).arg(value.typeName());
409 
410  INVOKE_CHECK(QMetaObject::invokeMethod(object, "printMessage",
411  Q_ARG(QString, msg),
412  Q_ARG(QDateTime, QDateTime::currentDateTime())));
413  }
414 
415  setSettingsValue(settings, name, value);
416  }
417  }
418 
419  QByteArray name;
420 
421  foreach (name, object->dynamicPropertyNames()) {
422  setSettingsValue(settings, name.data(), object->property(name.data()));
423  }
424 
425  settings->endGroup();
426  }
427 }
428 
429 void QcepProperty::writeSettings(QObject *object, const QMetaObject *meta, QString groupName, QSettings *settings, bool includeDynamic)
430 {
431  if (settings && object) {
432  int count = meta->propertyCount();
433  int offset = meta->propertyOffset();
434 
435  settings->beginGroup(groupName);
436 
437  for (int i=offset; i<count; i++) {
438  QMetaProperty metaproperty = meta->property(i);
439 
440  if (metaproperty.isStored()) {
441  const char *name = metaproperty.name();
442  QVariant value = object -> property(name);
443 
445  QString msg = tr("Save %1/%2 = %3 [%4]")
446  .arg(groupName).arg(name)
447  .arg(value.toString()).arg(value.typeName());
448 
449  INVOKE_CHECK(QMetaObject::invokeMethod(object, "printMessage",
450  Q_ARG(QString, msg),
451  Q_ARG(QDateTime, QDateTime::currentDateTime())));
452  }
453 
454  setSettingsValue(settings, name, value);
455  }
456  }
457 
458  if (includeDynamic) {
459  QByteArray name;
460 
461  foreach (name, object->dynamicPropertyNames()) {
462  setSettingsValue(settings, name.data(), object->property(name.data()));
463  }
464  }
465 
466  settings->endGroup();
467  }
468 }
469 
470 void QcepProperty::writeSettings(QObject *object, QString groupName, QSettings *settings, bool includeDynamic)
471 {
472  if (settings && object) {
473  const QMetaObject *meta = object->metaObject();
474 
475  int count = meta->propertyCount();
476  int offset = QObject::staticMetaObject.propertyOffset();
477 
478  settings->beginGroup(groupName);
479 
480  for (int i=offset; i<count; i++) {
481  QMetaProperty metaproperty = meta->property(i);
482 
483  if (metaproperty.isStored()) {
484  const char *name = metaproperty.name();
485  QVariant value = object -> property(name);
486 
488  QString msg = tr("Save %1/%2 = %3 [%4]")
489  .arg(groupName).arg(name)
490  .arg(value.toString()).arg(value.typeName());
491 
492  INVOKE_CHECK(QMetaObject::invokeMethod(object, "printMessage",
493  Q_ARG(QString, msg),
494  Q_ARG(QDateTime, QDateTime::currentDateTime())));
495  }
496 
497  setSettingsValue(settings, name, value);
498  }
499  }
500 
501  if (includeDynamic) {
502  QByteArray name;
503 
504  foreach (name, object->dynamicPropertyNames()) {
505  setSettingsValue(settings, name.data(), object->property(name.data()));
506  }
507  }
508 
509  settings->endGroup();
510  }
511 }
512 
513 void QcepProperty::readSettings(QObject *object, QSettings *settings, QString section)
514 {
515  if (settings && object) {
516  const QMetaObject *meta = object->metaObject();
517  settings->beginGroup(section);
518 
519  QStringList keys = settings->childKeys();
520 
521  foreach (QString key, keys) {
522  if (object && (qcepDebug(DEBUG_PREFS) || qcepDebug(DEBUG_PROPERTIES))) {
523  QString msg = tr("Load %1/%2 = %3 [%4]")
524  .arg(section).arg(key)
525  .arg(settings->value(key).toString())
526  .arg(settings->value(key).typeName());
527 
528  INVOKE_CHECK(QMetaObject::invokeMethod(object, "printMessage",
529  Q_ARG(QString, msg),
530  Q_ARG(QDateTime, QDateTime::currentDateTime())));
531  }
532 
533  int metaindex = meta->indexOfProperty(qPrintable(key));
534 
535  if (metaindex == 0) { // objectName is ignored on reading
536  } else if (metaindex > 0) {
537  QMetaProperty metaproperty = meta->property(metaindex);
538 
539  if (metaproperty.isStored()) {
540  object -> setProperty(qPrintable(key), settings->value(key));
541  } else {
542  if (object && (qcepDebug(DEBUG_PREFS) || qcepDebug(DEBUG_PROPERTIES))) {
543  QString msg = tr("property %1 of %2 not stored").arg(key)
544  .arg(meta -> className());
545 
546  INVOKE_CHECK(QMetaObject::invokeMethod(object, "printMessage",
547  Q_ARG(QString, msg),
548  Q_ARG(QDateTime, QDateTime::currentDateTime())));
549  }
550  }
551  } else {
552  object -> setProperty(qPrintable(key), settings->value(key));
553  }
554  }
555 
556  settings->endGroup();
557  }
558 }
559 
560 void QcepProperty::readSettings(QObject *object, const QMetaObject *meta, QString groupName, QSettings *settings, bool includeDynamic)
561 {
562  if (settings && object) {
563  settings->beginGroup(groupName);
564 
565  QStringList keys = settings->childKeys();
566 
567  foreach (QString key, keys) {
568  if (object && (qcepDebug(DEBUG_PREFS) || qcepDebug(DEBUG_PROPERTIES))) {
569  QString msg = tr("Load %1/%2 = %3 [%4]")
570  .arg(groupName).arg(key)
571  .arg(settings->value(key).toString())
572  .arg(settings->value(key).typeName());
573 
574  INVOKE_CHECK(QMetaObject::invokeMethod(object, "printMessage",
575  Q_ARG(QString, msg),
576  Q_ARG(QDateTime, QDateTime::currentDateTime())));
577  }
578 
579  int metaindex = meta->indexOfProperty(qPrintable(key));
580 
581  if (metaindex == 0) { // objectName is ignored on reading
582  } else if (metaindex > 0) {
583  QMetaProperty metaproperty = meta->property(metaindex);
584 
585  if (metaproperty.isStored()) {
586  object -> setProperty(qPrintable(key), settings->value(key));
587  } else {
588  if (object && (qcepDebug(DEBUG_PREFS) || qcepDebug(DEBUG_PROPERTIES))) {
589  QString msg = tr("property %1 of %2 not stored").arg(key)
590  .arg(meta -> className());
591 
592  INVOKE_CHECK(QMetaObject::invokeMethod(object, "printMessage",
593  Q_ARG(QString, msg),
594  Q_ARG(QDateTime, QDateTime::currentDateTime())));
595  }
596  }
597  } else {
598  if (includeDynamic) {
599  object -> setProperty(qPrintable(key), settings->value(key));
600  } else if (object && (qcepDebug(DEBUG_PREFS) || qcepDebug(DEBUG_PROPERTIES))) {
601  QString msg = tr("property %1 of %2 does not exist")
602  .arg(key).arg(meta -> className());
603 
604  INVOKE_CHECK(QMetaObject::invokeMethod(object, "printMessage",
605  Q_ARG(QString, msg),
606  Q_ARG(QDateTime, QDateTime::currentDateTime())));
607  }
608  }
609  }
610 
611  settings->endGroup();
612  }
613 }
614 
615 void QcepProperty::readSettings(QObject *object, QString groupName, QSettings *settings, bool includeDynamic)
616 {
617  if (settings && object) {
618  const QMetaObject *meta = object->metaObject();
619 
620  settings->beginGroup(groupName);
621 
622  QStringList keys = settings->childKeys();
623 
624  foreach (QString key, keys) {
625  if (object && (qcepDebug(DEBUG_PREFS) || qcepDebug(DEBUG_PROPERTIES))) {
626  QString msg = tr("Load %1/%2 = %3 [%4]")
627  .arg(groupName).arg(key)
628  .arg(settings->value(key).toString())
629  .arg(settings->value(key).typeName());
630 
631  INVOKE_CHECK(QMetaObject::invokeMethod(object, "printMessage",
632  Q_ARG(QString, msg),
633  Q_ARG(QDateTime, QDateTime::currentDateTime())));
634  }
635 
636  int metaindex = meta->indexOfProperty(qPrintable(key));
637 
638  if (metaindex == 0) { // objectName is ignored on reading
639  } else if (metaindex > 0) {
640  QMetaProperty metaproperty = meta->property(metaindex);
641 
642  if (metaproperty.isStored()) {
643  object -> setProperty(qPrintable(key), settings->value(key));
644  } else {
645  if (object && (qcepDebug(DEBUG_PREFS) || qcepDebug(DEBUG_PROPERTIES))) {
646  QString msg = tr("property %1 of %2 not stored").arg(key)
647  .arg(meta -> className());
648 
649  INVOKE_CHECK(QMetaObject::invokeMethod(object, "printMessage",
650  Q_ARG(QString, msg),
651  Q_ARG(QDateTime, QDateTime::currentDateTime())));
652  }
653  }
654  } else {
655  if (includeDynamic) {
656  object -> setProperty(qPrintable(key), settings->value(key));
657  } else if (object && (qcepDebug(DEBUG_PREFS) || qcepDebug(DEBUG_PROPERTIES))) {
658  QString msg = tr("property %1 of %2 does not exist")
659  .arg(key).arg(meta -> className());
660 
661  INVOKE_CHECK(QMetaObject::invokeMethod(object, "printMessage",
662  Q_ARG(QString, msg),
663  Q_ARG(QDateTime, QDateTime::currentDateTime())));
664  }
665  }
666  }
667 
668  settings->endGroup();
669  }
670 }
671 
672 void QcepProperty::printMessage(QString msg, QDateTime ts)
673 {
675 
676  if (saver) {
677  saver->printMessage(msg, ts);
678  } else if (m_Parent) {
679  INVOKE_CHECK(QMetaObject::invokeMethod(m_Parent, "printMessage",
680  Q_ARG(QString, msg),
681  Q_ARG(QDateTime, QDateTime::currentDateTime())));
682  } else {
683  printf("%s\n", qPrintable(msg));
684  }
685 }
686 
687 //void QcepProperty::dumpMetaData(const QMetaObject *meta)
688 //{
689 // while (meta && g_Application) {
690 // g_Application -> printMessage(
691 // tr("MetaData for class %1").arg(meta -> className()));
692 // g_Application -> printMessage(
693 // tr(" superClass = %1").HEXARG((void*) meta -> superClass()));
694 // g_Application -> printMessage(
695 // tr(" methodCount = %1, methodOffset = %2")
696 // .arg(meta->methodCount()).arg(meta->methodOffset()));
697 // g_Application -> printMessage(
698 // tr(" propertyCount = %1, propertyOffset = %2")
699 // .arg(meta->propertyCount()).arg(meta->propertyOffset()));
700 
701 // meta = meta->superClass();
702 // }
703 //}
704 
706 {
707  m_CustomSavers[typeName] = saver;
708 }
709 
710 QcepDoubleProperty::QcepDoubleProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, double value, QString toolTip)
711  : QcepProperty(saver, parent, name, toolTip),
712  m_Default(value),
713  m_Value(value)
714 {
715 }
716 
718 {
719  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
720 
721  return m_Value;
722 }
723 
725 {
726  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
727 
728  return m_Default;
729 }
730 
731 void QcepDoubleProperty::setValue(double val, int index)
732 {
733  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
734 
735  if (debug()) {
736  printMessage(tr("%1 QcepDoubleProperty::setValue(double %2, int %3) [%4]")
737  .arg(name()).arg(val).arg(index).arg(this->index()));
738  }
739 
740  // if (index == this->index()) {
741  setValue(val);
742  // }
743 }
744 
746 {
747  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
748 
750  printMessage(tr("%1: QcepDoubleProperty::setValue(double %2)")
751  .arg(name()).arg(val));
752  }
753 
754  if (val != value()) {
755  if (debug()) {
756  printMessage(tr("%1: QcepDoubleProperty::setValue(double %2) [%3]")
757  .arg(name()).arg(val).arg(index()));
758  }
759 
760  m_Value = val;
761 
763 
764  if (saver) {
765  saver->changed(this);
766  }
767 
768  emit valueChanged(value(), incIndex(1));
769  emit stringValueChanged(tr("%1").arg(value()));
770  }
771 }
772 
774 {
775  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
776 
777  if (qcepDebug(DEBUG_PROPERTIES) || debug()) {
778  printMessage(tr("%1: QcepDoubleProperty::incValue(double %2)")
779  .arg(name()).arg(step));
780  }
781 
782  if (step) {
783  m_Value += step;
784 
786 
787  if (saver) {
788  saver->changed(this);
789  }
790 
791  emit valueChanged(value(), incIndex(1));
792  emit stringValueChanged(tr("%1").arg(value()));
793  }
794 }
795 
797 {
798  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
799 
800  m_Default = val;
801 }
802 
804 {
805  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
806 
808  printMessage(tr("%1: QcepDoubleProperty::resetValue").arg(name()));
809  }
810 
812 }
813 
814 void QcepDoubleProperty::linkTo(QDoubleSpinBox *spinBox)
815 {
816  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
817 
818  if (qcepDebug(DEBUG_PROPERTIES || debug())) {
819  printMessage(tr("%1: QcepDoubleProperty::linkTo(QDoubleSpinBox *%2)")
820  .arg(name()).HEXARG(spinBox));
821  }
822 
824  = new QcepDoublePropertyDoubleSpinBoxHelper(spinBox, this);
825 
826  helper->moveToThread(spinBox->thread());
827  helper->connect();
828 
829  spinBox -> setValue(value());
830  spinBox -> setKeyboardTracking(false);
831 
832  setWidgetToolTip(spinBox);
833 
834  connect(this, SIGNAL(valueChanged(double, int)), helper, SLOT(setValue(double, int)));
835  connect(helper, SIGNAL(valueChanged(double, int)), this, SLOT(setValue(double, int)));
836 }
837 
838 void QcepDoubleProperty::linkTo(QLabel *label)
839 {
840  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
841 
842  label -> setText(tr("%1").arg(value()));
843 
844  setWidgetToolTip(label);
845 
846  connect(this, SIGNAL(stringValueChanged(QString)), label, SLOT(setText(QString)));
847 }
848 
849 void QcepDoubleProperty::linkTo(QProgressBar *progress)
850 {
851  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
852 
853  setWidgetToolTip(progress);
854 
855  connect(this, SIGNAL(valueChanged(double,int)), progress, SLOT(setValue(int)));
856 }
857 
858 void QcepDoubleProperty::linkTo(QLCDNumber *number)
859 {
860  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
861 
862  number -> display(value());
863 
864  setWidgetToolTip(number);
865 
866  connect(this, SIGNAL(valueChanged(double,int)), number, SLOT(display(double)));
867 }
868 
870  : QObject(spinBox),
871  m_DoubleSpinBox(spinBox),
872  m_Property(property)
873 {
874 }
875 
877 {
878  CONNECT_CHECK(QObject::connect(m_DoubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(setValue(double)), Qt::DirectConnection));
879 }
880 
882 {
884  m_Property->printMessage(tr("%1: QcepDoublePropertyDoubleSpinBoxHelper::setValue(double %2, int %3) [%4,%5]")
885  .arg(m_Property->name()).arg(value).arg(index).arg(m_Property->index()).arg(m_DoubleSpinBox->value()));
886  }
887 
888  if (m_Property->index() == index) {
889  if (m_DoubleSpinBox->value() != value) {
891  m_Property->printMessage(tr("%1: QcepDoublePropertyDoubleSpinBoxHelper spinBox %2 set to %3")
892  .arg(m_Property->name())
893  .arg(m_DoubleSpinBox->objectName())
894  .arg(value));
895  }
896 
897  bool block = m_DoubleSpinBox->blockSignals(true);
898  m_DoubleSpinBox->setValue(value);
899  m_DoubleSpinBox->blockSignals(block);
900  }
901  }
902 }
903 
905 {
907  m_Property->printMessage(tr("%1: QcepDoublePropertyDoubleSpinBoxHelper::setValue(double %2)")
908  .arg(m_Property->name()).arg(value));
909  }
910 
911  emit valueChanged(value, m_Property->incIndex(1));
912 }
913 
914 QcepIntProperty::QcepIntProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, int value, QString toolTip)
915  : QcepProperty(saver, parent, name, toolTip),
916  m_Default(value),
917  m_Value(value)
918 {
919 }
920 
922 {
923 #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
924  return m_Value.load();
925 #else
926  return m_Value;
927 #endif
928 }
929 
931 {
932 #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
933  return m_Default.load();
934 #else
935  return m_Default;
936 #endif
937 }
938 
940 {
941  if (debug()) {
942  printMessage(tr("%1 QcepIntProperty::setValue(int %2, int %3) [%4]")
943  .arg(name()).arg(val).arg(index).arg(this->index()));
944  }
945 
946  if (index == this->index()) {
947  setValue(val);
948  }
949 }
950 
952 {
954  printMessage(tr("%1: QcepIntProperty::setValue(int %2)")
955  .arg(name()).arg(val));
956  }
957 
958 #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
959  int curVal = m_Value.load();
960 #else
961  int curVal = m_Value;
962 #endif
963  if (val != curVal) {
964  if (debug()) {
965  printMessage(tr("%1: QcepIntProperty::setValue(int %2) [%3]")
966  .arg(name()).arg(val).arg(index()));
967  }
968 
969  m_Value.fetchAndStoreOrdered(val);
970 
972 
973  if (saver) {
974  saver->changed(this);
975  }
976 
977  emit valueChanged(val, incIndex(1));
978  emit stringValueChanged(tr("%1").arg(val));
979  }
980 }
981 
983 {
984  if (qcepDebug(DEBUG_PROPERTIES) || debug()) {
985  printMessage(tr("%1: QcepIntProperty::incValue(int %2)")
986  .arg(name()).arg(step));
987  }
988 
989  if (step) {
990  m_Value.fetchAndAddOrdered(step);
991 
993 
994  if (saver) {
995  saver->changed(this);
996  }
997 
998  emit valueChanged(value(), incIndex(1));
999  emit stringValueChanged(tr("%1").arg(value()));
1000  }
1001 }
1002 
1004 {
1005  m_Default.fetchAndStoreOrdered(val);
1006 }
1007 
1009 {
1010  if (qcepDebug(DEBUG_PROPERTIES) || debug()) {
1011  printMessage(tr("%1: QcepIntProperty::resetValue").arg(name()));
1012  }
1013 
1015 }
1016 
1017 void QcepIntProperty::linkTo(QSpinBox *spinBox)
1018 {
1019  if (qcepDebug(DEBUG_PROPERTIES) || debug()) {
1020  printMessage(tr("%1: QcepIntProperty::linkTo(QSpinBox *%2)")
1021  .arg(name()).HEXARG(spinBox));
1022  }
1023 
1025  = new QcepIntPropertySpinBoxHelper(spinBox, this);
1026 
1027  helper->moveToThread(spinBox->thread());
1028  helper->connect();
1029 
1030  spinBox -> setValue(value());
1031  spinBox -> setKeyboardTracking(false);
1032 
1033  setWidgetToolTip(spinBox);
1034 
1035  connect(this, SIGNAL(valueChanged(int, int)), helper, SLOT(setValue(int, int)));
1036  connect(helper, SIGNAL(valueChanged(int, int)), this, SLOT(setValue(int, int)));
1037 }
1038 
1039 void QcepIntProperty::linkTo(QComboBox *comboBox)
1040 {
1041  if (qcepDebug(DEBUG_PROPERTIES) || debug()) {
1042  printMessage(tr("%1: QcepIntProperty::linkTo(QComboBox *%2)")
1043  .arg(name()).HEXARG(comboBox));
1044  }
1045 
1047  = new QcepIntPropertyComboBoxHelper(comboBox, this);
1048 
1049  helper->moveToThread(comboBox->thread());
1050  helper->connect();
1051 
1052  comboBox -> setCurrentIndex(value());
1053 
1054  setWidgetToolTip(comboBox);
1055 
1056  connect(this, SIGNAL(valueChanged(int, int)), helper, SLOT(setCurrentIndex(int, int)));
1057  connect(helper, SIGNAL(currentIndexChanged(int, int)), this, SLOT(setValue(int, int)));
1058 }
1059 
1060 void QcepIntProperty::linkTo(QLabel *label)
1061 {
1062  {
1063  label -> setText(tr("%1").arg(value()));
1064 
1065  setWidgetToolTip(label);
1066 
1067  connect(this, SIGNAL(stringValueChanged(QString)), label, SLOT(setText(QString)));
1068  }
1069 }
1070 
1071 void QcepIntProperty::linkTo(QProgressBar *progress)
1072 {
1073  setWidgetToolTip(progress);
1074 
1075  connect(this, SIGNAL(valueChanged(int,int)), progress, SLOT(setValue(int)));
1076 }
1077 
1078 void QcepIntProperty::linkTo(QLCDNumber *number)
1079 {
1080  number -> display(value());
1081 
1082  setWidgetToolTip(number);
1083 
1084  connect(this, SIGNAL(valueChanged(int,int)), number, SLOT(display(int)));
1085 }
1086 
1088  : QObject(spinBox),
1089  m_SpinBox(spinBox),
1090  m_Property(property)
1091 {
1092 }
1093 
1095 {
1096  CONNECT_CHECK(QObject::connect(m_SpinBox, SIGNAL(valueChanged(int)), this, SLOT(setValue(int)), Qt::DirectConnection));
1097 }
1098 
1100 {
1102  m_Property->printMessage(tr("%1: QcepIntPropertySpinBoxHelper::setValue(int %2, int %3) [%4,%5]")
1103  .arg(m_Property->name()).arg(value).arg(index).arg(m_Property->index()).arg(m_SpinBox->value()));
1104  }
1105 
1106  if (m_Property->index() == index) {
1107  if (m_SpinBox->value() != value) {
1109  m_Property->printMessage(tr("%1: QcepIntPropertySpinBoxHelper spinBox %2 set to %3")
1110  .arg(m_Property->name()).arg(m_SpinBox->objectName()).arg(value));
1111  }
1112 
1113  bool block = m_SpinBox->blockSignals(true);
1114  m_SpinBox->setValue(value);
1115  m_SpinBox->blockSignals(block);
1116  }
1117  }
1118 }
1119 
1121 {
1123  m_Property->printMessage(tr("%1: QcepIntPropertySpinBoxHelper::setValue(int %2)")
1124  .arg(m_Property->name()).arg(value));
1125  }
1126 
1127  emit valueChanged(value, m_Property->incIndex(1));
1128 }
1129 
1131  : QObject(comboBox),
1132  m_ComboBox(comboBox),
1133  m_Property(property)
1134 {
1135 }
1136 
1138 {
1139  CONNECT_CHECK(QObject::connect(m_ComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setCurrentIndex(int)), Qt::DirectConnection));
1140 }
1141 
1143 {
1145  m_Property->printMessage(tr("%1: QcepIntPropertyComboBoxHelper::setValue(int %2, int %3) [%4,%5]")
1146  .arg(m_Property->name()).arg(value).arg(index)
1147  .arg(m_Property->index()).arg(m_ComboBox->currentIndex()));
1148  }
1149 
1150  if (m_Property->index() == index) {
1151  if (m_ComboBox->currentIndex() != value) {
1153  m_Property->printMessage(tr("%1: QcepIntPropertyComboBoxHelper comboBox %2 set to %3")
1154  .arg(m_Property->name()).arg(m_ComboBox->objectName()).arg(value));
1155  }
1156 
1157  bool block = m_ComboBox->blockSignals(true);
1158  m_ComboBox->setCurrentIndex(value);
1159  m_ComboBox->blockSignals(block);
1160  }
1161  }
1162 }
1163 
1165 {
1167  m_Property->printMessage(tr("%1: QcepIntPropertyComboBoxHelper::setValue(int %2)")
1168  .arg(m_Property->name()).arg(value));
1169  }
1170 
1171  emit currentIndexChanged(value, m_Property->incIndex(1));
1172 }
1173 
1174 QcepBoolProperty::QcepBoolProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, bool value, QString toolTip)
1175  : QcepProperty(saver, parent, name, toolTip),
1176  m_Default(value),
1177  m_Value(value)
1178 {
1179 }
1180 
1182 {
1183 #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
1184  return m_Value.load();
1185 #else
1186  return m_Value;
1187 #endif
1188 }
1189 
1191 {
1192 #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
1193  return m_Default.load();
1194 #else
1195  return m_Default;
1196 #endif
1197 }
1198 
1200 {
1201  if (debug()) {
1202  printMessage(tr("%1 QcepBoolProperty::setValue(bool %2, int %3) [%4]")
1203  .arg(name()).arg(val).arg(index).arg(this->index()));
1204  }
1205 
1206  if (index == this->index()) {
1207  setValue(val);
1208  }
1209 }
1210 
1212 {
1213  if (qcepDebug(DEBUG_PROPERTIES)) {
1214  printMessage(tr("%1: QcepBoolProperty::setValue(bool %2)")
1215  .arg(name()).arg(val));
1216  }
1217 
1218 #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
1219  int curVal = m_Value.load();
1220 #else
1221  int curVal = m_Value;
1222 #endif
1223 
1224  if ((int) val != curVal) {
1225  if (debug()) {
1226  printMessage(tr("%1: QcepBoolProperty::setValue(bool %2) [%3]")
1227  .arg(name()).arg(val).arg(index()));
1228  }
1229 
1230  m_Value.fetchAndStoreOrdered(val);
1231 
1233 
1234  if (saver) {
1235  saver->changed(this);
1236  }
1237 
1238  emit valueChanged(val, incIndex(1));
1239  }
1240 }
1241 
1243 {
1244  m_Default.fetchAndStoreOrdered(val);
1245 }
1246 
1248 {
1249  if (qcepDebug(DEBUG_PROPERTIES || debug())) {
1250  printMessage(tr("%1: QcepBoolProperty::resetValue").arg(name()));
1251  }
1252 
1254 }
1255 
1257 {
1258 #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
1259  setValue(!m_Value.load());
1260 #else
1261  setValue(!m_Value);
1262 #endif
1263 }
1264 
1265 void QcepBoolProperty::linkTo(QAbstractButton *button)
1266 {
1267  if (qcepDebug(DEBUG_PROPERTIES || debug())) {
1268  printMessage(tr("%1: QcepBoolProperty::linkTo(QAbstractButton *%2)")
1269  .arg(name()).HEXARG(button));
1270  }
1271 
1273  = new QcepBoolPropertyButtonHelper(button, this);
1274 
1275  helper->moveToThread(button->thread());
1276  helper->connect();
1277 
1278  button -> setChecked(value());
1279 
1280  setWidgetToolTip(button);
1281 
1282  connect(this, SIGNAL(valueChanged(bool, int)), helper, SLOT(setChecked(bool, int)));
1283  connect(helper, SIGNAL(toggled(bool, int)), this, SLOT(setValue(bool, int)));
1284 }
1285 
1287  : QObject(button),
1288  m_Button(button),
1289  m_Property(property)
1290 {
1291 }
1292 
1294 {
1295  CONNECT_CHECK(QObject::connect(m_Button, SIGNAL(toggled(bool)), this, SLOT(setChecked(bool)), Qt::DirectConnection));
1296 }
1297 
1299 {
1301  m_Property->printMessage(tr("%1: QcepBoolPropertyButtonHelper::setChecked(bool %2, int %3) [%4,%5]")
1302  .arg(m_Property->name()).arg(value).arg(index)
1303  .arg(m_Property->index()).arg(m_Button->isChecked()));
1304  }
1305 
1306  if (m_Property->index() == index) {
1307  if (m_Button->isChecked() != value) {
1309  m_Property->printMessage(tr("%1: QcepBoolPropertyButtonHelper button %2 set to %3")
1310  .arg(m_Property->name()).arg(m_Button->objectName()).arg(value));
1311  }
1312 
1313  bool block = m_Button->blockSignals(true);
1314  m_Button->setChecked(value);
1315  m_Button->blockSignals(block);
1316  }
1317  }
1318 }
1319 
1321 {
1323  m_Property->printMessage(tr("%1: QcepBoolPropertyButtonHelper::setChecked(bool %2)")
1324  .arg(m_Property->name()).arg(value));
1325  }
1326 
1327  emit toggled(value, m_Property->incIndex(1));
1328 }
1329 
1330 QcepStringProperty::QcepStringProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QString value, QString toolTip)
1331  : QcepProperty(saver, parent, name, toolTip),
1332  m_Default(value),
1333  m_Value(value)
1334 {
1335 }
1336 
1338 {
1339  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1340 
1341  return m_Value;
1342 }
1343 
1345 {
1346  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1347 
1348  return m_Default;
1349 }
1350 
1351 void QcepStringProperty::setValue(QString val, int index)
1352 {
1353  if (debug()) {
1354  printMessage(tr("%1 QcepStringProperty::setValue(QString \"%2\", int %3) [%4]")
1355  .arg(name()).arg(val).arg(index).arg(this->index()));
1356  }
1357 
1358  if (index == this->index()) {
1359  setValue(val);
1360  }
1361 }
1362 
1364 {
1365  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1366 
1367  if (qcepDebug(DEBUG_PROPERTIES)) {
1368  printMessage(tr("%1: QcepStringProperty::setValue(QString \"%2\")")
1369  .arg(name()).arg(val));
1370  }
1371 
1372  if (val != m_Value) {
1373  if (debug()) {
1374  printMessage(tr("%1: QcepStringProperty::setValue(QString \"%2\") [%3]")
1375  .arg(name()).arg(val).arg(index()));
1376  }
1377 
1378  m_Value = val;
1379 
1381 
1382  if (saver) {
1383  saver->changed(this);
1384  }
1385 
1386  emit valueChanged(m_Value, incIndex(1));
1387  }
1388 }
1389 
1391 {
1392  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1393 
1394  m_Default = val;
1395 }
1396 
1398 {
1399  if (qcepDebug(DEBUG_PROPERTIES)) {
1400  printMessage(tr("%1: QcepStringProperty::resetValue").arg(name()));
1401  }
1402 
1404 }
1405 
1406 void QcepStringProperty::linkTo(QComboBox *comboBox)
1407 {
1408  if (qcepDebug(DEBUG_PROPERTIES || debug())) {
1409  printMessage(tr("%1: QcepStringProperty::linkTo(QComboBox *%2)")
1410  .arg(name()).HEXARG(comboBox));
1411  }
1412 
1414  = new QcepStringPropertyComboBoxHelper(comboBox, this);
1415 
1416  helper -> moveToThread(comboBox->thread());
1417  helper -> connect();
1418 
1419  int index = comboBox->findData(value());
1420 
1421  comboBox -> setCurrentIndex(index);
1422 
1423  setWidgetToolTip(comboBox);
1424 
1425  connect(this, SIGNAL(valueChanged(QString, int)), helper, SLOT(setValue(QString, int)));
1426  connect(helper, SIGNAL(valueChanged(QString,int)), this, SLOT(setValue(QString, int)));
1427 }
1428 
1429 void QcepStringProperty::linkTo(QLineEdit *lineEdit)
1430 {
1431  if (qcepDebug(DEBUG_PROPERTIES || debug())) {
1432  printMessage(tr("%1: QcepStringProperty::linkTo(QLineEdit *%2)")
1433  .arg(name()).HEXARG(lineEdit));
1434  }
1435 
1437  = new QcepStringPropertyLineEditHelper(lineEdit, this);
1438 
1439  helper -> moveToThread(lineEdit->thread());
1440  helper -> connect();
1441 
1442  lineEdit -> setText(value());
1443 
1444  setWidgetToolTip(lineEdit);
1445 
1446  connect(this, SIGNAL(valueChanged(QString, int)), helper, SLOT(setText(QString, int)));
1447  connect(helper, SIGNAL(textEdited(QString, int)), this, SLOT(setValue(QString, int)));
1448 }
1449 
1450 void QcepStringProperty::linkTo(QLabel *label)
1451 {
1452  label -> setText(value());
1453 
1454  setWidgetToolTip(label);
1455 
1456  connect(this, SIGNAL(valueChanged(QString,int)), label, SLOT(setText(QString)));
1457 }
1458 
1459 void QcepStringProperty::linkTo(QLCDNumber *number)
1460 {
1461  number -> display(value());
1462 
1463  setWidgetToolTip(number);
1464 
1465  connect(this, SIGNAL(valueChanged(QString,int)), number, SLOT(display(QString)));
1466 }
1467 
1468 void QcepStringProperty::linkTo(QTextEdit *textEdit)
1469 {
1470  if (qcepDebug(DEBUG_PROPERTIES || debug())) {
1471  printMessage(tr("%1: QcepStringProperty::linkTo(QTextEdit *%2)")
1472  .arg(name()).HEXARG(textEdit));
1473  }
1474 
1476  = new QcepStringPropertyTextEditHelper(textEdit, this);
1477 
1478  helper -> moveToThread(textEdit->thread());
1479  helper -> connect();
1480 
1481  textEdit -> setText(value());
1482 
1483  setWidgetToolTip(textEdit);
1484 
1485  connect(this, SIGNAL(valueChanged(QString, int)), helper, SLOT(setText(QString, int)));
1486  connect(helper, SIGNAL(textEdited(QString, int)), this, SLOT(setValue(QString, int)));
1487 }
1488 
1490  : QObject(lineEdit),
1491  m_LineEdit(lineEdit),
1492  m_Property(property)
1493 {
1494 }
1495 
1497 {
1498  CONNECT_CHECK(QObject::connect(m_LineEdit, SIGNAL(textEdited(QString)), this, SLOT(setText(QString)), Qt::DirectConnection));
1499 }
1500 
1502 {
1504  m_Property->printMessage(tr("%1: QcepStringPropertyLineEditHelper::setText(QString \"%2\", int %3) [%4,%5]")
1505  .arg(m_Property->name()).arg(value).arg(index)
1506  .arg(m_Property->index()).arg(m_LineEdit->text()));
1507  }
1508 
1509  if (m_Property->index() == index) {
1510  if (m_LineEdit->text() != value) {
1512  m_Property->printMessage(tr("%1: QcepStringPropertyLineEditHelper lineEdit %2 set to %3")
1513  .arg(m_Property->name()).arg(m_LineEdit->objectName()).arg(value));
1514  }
1515 
1516  bool block = m_LineEdit->blockSignals(true);
1517  m_LineEdit->setText(value);
1518  m_LineEdit->blockSignals(block);
1519  }
1520  }
1521 }
1522 
1524 {
1526  m_Property->printMessage(tr("%1: QcepStringPropertyLineEditHelper::setText(QString \"%2\")")
1527  .arg(m_Property->name()).arg(value));
1528  }
1529 
1530  emit textEdited(value, m_Property->incIndex(1));
1531 }
1532 
1534  : QObject(textEdit),
1535  m_TextEdit(textEdit),
1536  m_Property(property)
1537 {
1538 }
1539 
1541 {
1542  CONNECT_CHECK(QObject::connect(m_TextEdit, SIGNAL(textChanged()), this, SLOT(setText()), Qt::DirectConnection));
1543 }
1544 
1546 {
1548  m_Property->printMessage(tr("%1: QcepStringPropertyTextEditHelper::setText(QString \"%2\", int %3) [%4,%5]")
1549  .arg(m_Property->name()).arg(value).arg(index)
1550  .arg(m_Property->index()).arg(m_TextEdit->toPlainText()));
1551  }
1552 
1553  if (m_Property->index() == index) {
1554  if (m_TextEdit->toPlainText() != value) {
1556  m_Property->printMessage(tr("%1: QcepStringPropertyTextEditHelper textEdit %2 set to %3")
1557  .arg(m_Property->name()).arg(m_TextEdit->objectName()).arg(value));
1558  }
1559 
1560  bool block = m_TextEdit->blockSignals(true);
1561  m_TextEdit->setText(value);
1562  m_TextEdit->blockSignals(block);
1563  }
1564  }
1565 }
1566 
1568 {
1569  QString value = m_TextEdit->toPlainText();
1570 
1572  m_Property->printMessage(tr("%1: QcepStringPropertyTextEditHelper::setText(QString \"%2\")")
1573  .arg(m_Property->name()).arg(value));
1574  }
1575 
1576  emit textEdited(value, m_Property->incIndex(1));
1577 }
1578 
1580  : QObject(comboBox),
1581  m_ComboBox(comboBox),
1582  m_Property(property)
1583 {
1584 }
1585 
1587 {
1588  CONNECT_CHECK(QObject::connect(m_ComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setCurrentIndex(int)), Qt::DirectConnection));
1589 }
1590 
1592 {
1594  m_Property->printMessage(tr("%1: QcepIntPropertyComboBoxHelper::setValue(int %2, int %3) [%4,%5]")
1595  .arg(m_Property->name()).arg(value).arg(index)
1596  .arg(m_Property->index()).arg(m_ComboBox->currentIndex()));
1597  }
1598 
1599  if (m_Property->index() == index) {
1600  int current = m_ComboBox->findData(value);
1601 
1602  if (m_ComboBox->currentIndex() != current) {
1604  m_Property->printMessage(tr("%1: QcepIntPropertyComboBoxHelper comboBox %2 set to %3")
1605  .arg(m_Property->name()).arg(m_ComboBox->objectName()).arg(value));
1606  }
1607 
1608  bool block = m_ComboBox->blockSignals(true);
1609 
1610  m_ComboBox->setCurrentIndex(current);
1611  m_ComboBox->blockSignals(block);
1612  }
1613  }
1614 }
1615 
1617 {
1619  m_Property->printMessage(tr("%1: QcepStringPropertyComboBoxHelper::setCurrentIndex(int %2)")
1620  .arg(m_Property->name()).arg(current));
1621  }
1622 
1623  QString value = m_ComboBox->itemData(current).toString();
1624 
1625  emit valueChanged(value, m_Property->incIndex(1));
1626 }
1627 
1628 QcepDateTimeProperty::QcepDateTimeProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QDateTime value, QString toolTip)
1629  : QcepProperty(saver, parent, name, toolTip),
1630  m_Default(value),
1631  m_Value(value)
1632 {
1633 }
1634 
1636 {
1637  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1638 
1639  return m_Value;
1640 }
1641 
1643 {
1644  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1645 
1646  return m_Default;
1647 }
1648 
1649 void QcepDateTimeProperty::setValue(QDateTime val, int index)
1650 {
1651  if (debug()) {
1652  printMessage(tr("%1 QcepDateTimeProperty::setValue(QDateTime \"%2\", int %3) [%4]")
1653  .arg(name()).arg(val.toString()).arg(index).arg(this->index()));
1654  }
1655 
1656  if (index == this->index()) {
1657  setValue(val);
1658  }
1659 }
1660 
1662 {
1663  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1664 
1665  if (qcepDebug(DEBUG_PROPERTIES)) {
1666  printMessage(tr("%1: QcepDateTimeProperty::setValue(QDateTime \"%2\")")
1667  .arg(name()).arg(val.toString()));
1668  }
1669 
1670  if (val != m_Value) {
1671  if (debug()) {
1672  printMessage(tr("%1: QcepDateTimeProperty::setValue(QDateTime \"%2\") [%3]")
1673  .arg(name()).arg(val.toString()).arg(index()));
1674  }
1675 
1676  m_Value = val;
1677 
1679 
1680  if (saver) {
1681  saver->changed(this);
1682  }
1683 
1684  emit valueChanged(m_Value, incIndex(1));
1685  }
1686 }
1687 
1689 {
1690  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1691 
1692  if (val != m_Default) {
1693  m_Default = val;
1694  }
1695 }
1696 
1698 {
1699  if (qcepDebug(DEBUG_PROPERTIES)) {
1700  printMessage(tr("%1: QcepDateTimeProperty::resetValue").arg(name()));
1701  }
1702 
1704 }
1705 
1706 QcepDoubleListProperty::QcepDoubleListProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QcepDoubleList value, QString toolTip)
1707  : QcepProperty(saver, parent, name, toolTip),
1708  m_Default(value),
1709  m_Value(value)
1710 {
1711 }
1712 
1714 {
1715  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1716 
1717  return m_Value;
1718 }
1719 
1721 {
1722  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1723 
1724  return m_Default;
1725 }
1726 
1728 {
1729  if (debug()) {
1730  printMessage(tr("%1 QcepDoubleListProperty::setValue(QcepDoubleList %2, int %3) [%4]")
1731  .arg(name()).arg(toString(val)).arg(index).arg(this->index()));
1732  }
1733 
1734  if (index == this->index()) {
1735  setValue(val);
1736  }
1737 }
1738 
1740 {
1741  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1742 
1743  if (qcepDebug(DEBUG_PROPERTIES) || debug()) {
1744  printMessage(tr("%1: QcepDoubleListProperty::incValue(QcepDoubleList %2...)")
1745  .arg(name()).arg(step.value(0)));
1746  }
1747 
1748  for (int i=0; i<m_Value.count(); i++) {
1749  m_Value[i] += step.value(i);
1750  }
1751 
1753 
1754  if (saver) {
1755  saver->changed(this);
1756  }
1757 
1758  emit valueChanged(m_Value, incIndex(1));
1759 }
1760 
1762 {
1763  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1764 
1766 }
1767 
1769 {
1770  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1771 
1772  QcepDoubleList list = value();
1773  list.append(val);
1774 
1775  setValue(list);
1776 }
1777 
1779 {
1780  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1781 
1782  QString res = "[";
1783  int ct = val.count();
1784 
1785  for (int i=0; i<ct; i++) {
1786  if (i<(ct-1)) {
1787  res += tr("%1, ").arg(val[i]);
1788  } else {
1789  res += tr("%1").arg(val[i]);
1790  }
1791  }
1792 
1793  res += "]";
1794 
1795  return res;
1796 }
1797 
1799 {
1800  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1801 
1802  if (qcepDebug(DEBUG_PROPERTIES)) {
1803  printMessage(tr("%1 QcepDoubleListProperty::setValue(QcepDoubleList %2)")
1804  .arg(name()).arg(toString(val)));
1805  }
1806 
1807  if (val != m_Value) {
1808  if (debug()) {
1809  printMessage(tr("%1: QcepDoubleListProperty::setValue(QcepDoubleList %2) [%3]")
1810  .arg(name()).arg(toString(val)).arg(index()));
1811  }
1812 
1813  m_Value = val;
1814 
1816 
1817  if (saver) {
1818  saver->changed(this);
1819  }
1820 
1821  emit valueChanged(m_Value, incIndex(1));
1822  }
1823 }
1824 
1826 {
1827  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1828 
1829  m_Default = val;
1830 }
1831 
1833 {
1834  if (qcepDebug(DEBUG_PROPERTIES)) {
1835  printMessage(tr("%1: QcepDoubleListProperty::resetValue").arg(name()));
1836  }
1837 
1839 }
1840 
1841 QcepDoubleVectorProperty::QcepDoubleVectorProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QcepDoubleVector value, QString toolTip)
1842  : QcepProperty(saver, parent, name, toolTip),
1843  m_Default(value),
1844  m_Value(value)
1845 {
1846 }
1847 
1849 {
1850  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1851 
1852  return m_Value;
1853 }
1854 
1856 {
1857  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1858 
1859  return m_Default;
1860 }
1861 
1863 {
1864  if (debug()) {
1865  printMessage(tr("%1 QcepDoubleVectorProperty::setValue(QcepDoubleVector %2, int %3) [%4]")
1866  .arg(name()).arg(toString(val)).arg(index).arg(this->index()));
1867  }
1868 
1869  if (index == this->index()) {
1870  setValue(val);
1871  }
1872 }
1873 
1875 {
1876  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1877 
1878  if (qcepDebug(DEBUG_PROPERTIES) || debug()) {
1879  printMessage(tr("%1: QcepDoubleVectorProperty::incValue(QcepDoubleVector %2...)")
1880  .arg(name()).arg(step.value(0)));
1881  }
1882 
1883  for (int i=0; i<m_Value.count(); i++) {
1884  m_Value[i] += step.value(i);
1885  }
1886 
1888 
1889  if (saver) {
1890  saver->changed(this);
1891  }
1892 
1893  emit valueChanged(m_Value, incIndex(1));
1894 }
1895 
1897 {
1898  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1899 
1901 }
1902 
1904 {
1905  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1906 
1907  QcepDoubleVector list = value();
1908  list.append(val);
1909 
1910  setValue(list);
1911 }
1912 
1914 {
1915  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1916 
1917  QString res = "[";
1918  int ct = val.count();
1919 
1920  for (int i=0; i<ct; i++) {
1921  if (i<(ct-1)) {
1922  res += tr("%1, ").arg(val[i]);
1923  } else {
1924  res += tr("%1").arg(val[i]);
1925  }
1926  }
1927 
1928  res += "]";
1929 
1930  return res;
1931 }
1932 
1934 {
1935  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1936 
1937  if (qcepDebug(DEBUG_PROPERTIES)) {
1938  printMessage(tr("%1 QcepDoubleVectorProperty::setValue(QcepDoubleVector %2)")
1939  .arg(name()).arg(toString(val)));
1940  }
1941 
1942  if (val != m_Value) {
1943  if (debug()) {
1944  printMessage(tr("%1: QcepDoubleVectorProperty::setValue(QcepDoubleVector %2) [%3]")
1945  .arg(name()).arg(toString(val)).arg(index()));
1946  }
1947 
1948  m_Value = val;
1949 
1951 
1952  if (saver) {
1953  saver->changed(this);
1954  }
1955 
1956  emit valueChanged(m_Value, incIndex(1));
1957  }
1958 }
1959 
1961 {
1962  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1963 
1964  m_Default = val;
1965 }
1966 
1968 {
1969  if (qcepDebug(DEBUG_PROPERTIES)) {
1970  printMessage(tr("%1: QcepDoubleVectorProperty::resetValue").arg(name()));
1971  }
1972 
1974 }
1975 
1976 QcepIntListProperty::QcepIntListProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QcepIntList value, QString toolTip)
1977  : QcepProperty(saver, parent, name, toolTip),
1978  m_Default(value),
1979  m_Value(value)
1980 {
1981 }
1982 
1984 {
1985  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1986 
1987  return m_Value;
1988 }
1989 
1991 {
1992  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
1993 
1994  return m_Default;
1995 }
1996 
1998 {
1999  if (debug()) {
2000  printMessage(tr("%1 QcepIntListProperty::setValue(QcepIntList %2, int %3) [%4]")
2001  .arg(name()).arg(toString(val)).arg(index).arg(this->index()));
2002  }
2003 
2004  if (index == this->index()) {
2005  setValue(val);
2006  }
2007 }
2008 
2010 {
2011  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2012 
2013  if (qcepDebug(DEBUG_PROPERTIES) || debug()) {
2014  printMessage(tr("%1: QcepIntListProperty::incValue(QcepDoubleList %2...)")
2015  .arg(name()).arg(step.value(0)));
2016  }
2017 
2018  for (int i=0; i<m_Value.count(); i++) {
2019  m_Value[i] += step.value(i);
2020  }
2021 
2023 
2024  if (saver) {
2025  saver->changed(this);
2026  }
2027 
2028  emit valueChanged(m_Value, incIndex(1));
2029 }
2030 
2032 {
2033  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2034 
2035  setValue(QcepIntList());
2036 }
2037 
2039 {
2040  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2041 
2042  QcepIntList list = value();
2043  list.append(val);
2044 
2045  setValue(list);
2046 }
2047 
2049 {
2050  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2051 
2052  QString res = "[";
2053  int ct = val.count();
2054 
2055  for (int i=0; i<ct; i++) {
2056  if (i<(ct-1)) {
2057  res += tr("%1, ").arg(val[i]);
2058  } else {
2059  res += tr("%1").arg(val[i]);
2060  }
2061  }
2062 
2063  res += "]";
2064 
2065  return res;
2066 }
2067 
2069 {
2070  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2071 
2072  if (qcepDebug(DEBUG_PROPERTIES)) {
2073  printMessage(tr("%1 QcepIntListProperty::setValue(QcepIntList %2)")
2074  .arg(name()).arg(toString(val)));
2075  }
2076 
2077  if (val != m_Value) {
2078  if (debug()) {
2079  printMessage(tr("%1: QcepIntListProperty::setValue(QcepIntList %2) [%3]")
2080  .arg(name()).arg(toString(val)).arg(index()));
2081  }
2082 
2083  m_Value = val;
2084 
2086 
2087  if (saver) {
2088  saver->changed(this);
2089  }
2090 
2091  emit valueChanged(m_Value, incIndex(1));
2092  }
2093 }
2094 
2096 {
2097  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2098 
2099  m_Default = val;
2100 }
2101 
2103 {
2104  if (qcepDebug(DEBUG_PROPERTIES)) {
2105  printMessage(tr("%1: QcepIntListProperty::resetValue").arg(name()));
2106  }
2107 
2109 }
2110 
2111 QcepIntVectorProperty::QcepIntVectorProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QcepIntVector value, QString toolTip)
2112  : QcepProperty(saver, parent, name, toolTip),
2113  m_Default(value),
2114  m_Value(value)
2115 {
2116 }
2117 
2119 {
2120  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2121 
2122  return m_Value;
2123 }
2124 
2126 {
2127  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2128 
2129  return m_Default;
2130 }
2131 
2133 {
2134  if (debug()) {
2135  printMessage(tr("%1 QcepIntVectorProperty::setValue(QcepIntVector %2, int %3) [%4]")
2136  .arg(name()).arg(toString(val)).arg(index).arg(this->index()));
2137  }
2138 
2139  if (index == this->index()) {
2140  setValue(val);
2141  }
2142 }
2143 
2145 {
2146  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2147 
2148  if (qcepDebug(DEBUG_PROPERTIES) || debug()) {
2149  printMessage(tr("%1: QcepIntVectorProperty::incValue(QcepIntVector %2...)")
2150  .arg(name()).arg(step.value(0)));
2151  }
2152 
2153  for (int i=0; i<m_Value.count(); i++) {
2154  m_Value[i] += step.value(i);
2155  }
2156 
2158 
2159  if (saver) {
2160  saver->changed(this);
2161  }
2162 
2163  emit valueChanged(m_Value, incIndex(1));
2164 }
2165 
2167 {
2168  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2169 
2171 }
2172 
2174 {
2175  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2176 
2177  QcepIntVector list = value();
2178  list.append(val);
2179 
2180  setValue(list);
2181 }
2182 
2184 {
2185  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2186 
2187  QString res = "[";
2188  int ct = val.count();
2189 
2190  for (int i=0; i<ct; i++) {
2191  if (i<(ct-1)) {
2192  res += tr("%1, ").arg(val[i]);
2193  } else {
2194  res += tr("%1").arg(val[i]);
2195  }
2196  }
2197 
2198  res += "]";
2199 
2200  return res;
2201 }
2202 
2204 {
2205  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2206 
2207  if (qcepDebug(DEBUG_PROPERTIES)) {
2208  printMessage(tr("%1 QcepIntVectorProperty::setValue(QcepIntVector %2)")
2209  .arg(name()).arg(toString(val)));
2210  }
2211 
2212  if (val != m_Value) {
2213  if (debug()) {
2214  printMessage(tr("%1: QcepIntVectorProperty::setValue(QcepIntVector %2) [%3]")
2215  .arg(name()).arg(toString(val)).arg(index()));
2216  }
2217 
2218  m_Value = val;
2219 
2221 
2222  if (saver) {
2223  saver->changed(this);
2224  }
2225 
2226  emit valueChanged(m_Value, incIndex(1));
2227  }
2228 }
2229 
2231 {
2232  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2233 
2234  m_Default = val;
2235 }
2236 
2238 {
2239  if (qcepDebug(DEBUG_PROPERTIES)) {
2240  printMessage(tr("%1: QcepIntVectorProperty::resetValue").arg(name()));
2241  }
2242 
2244 }
2245 
2246 QcepStringListProperty::QcepStringListProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QStringList value, QString toolTip)
2247  : QcepProperty(saver, parent, name, toolTip),
2248  m_Default(value),
2249  m_Value(value)
2250 {
2251 }
2252 
2254 {
2255  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2256 
2257  return m_Value;
2258 }
2259 
2261 {
2262  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2263 
2264  return m_Default;
2265 }
2266 
2267 void QcepStringListProperty::setValue(QStringList val, int index)
2268 {
2269  if (debug()) {
2270  printMessage(tr("%1 QcepStringListProperty::setValue(QcepStringList %2, int %3) [%4]")
2271  .arg(name()).arg(toString(val)).arg(index).arg(this->index()));
2272  }
2273 
2274  if (index == this->index()) {
2275  setValue(val);
2276  }
2277 }
2278 
2280 {
2281  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2282 
2284 }
2285 
2287 {
2288  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2289 
2290  QStringList list = value();
2291  list.append(val);
2292 
2293  setValue(list);
2294 }
2295 
2296 QString QcepStringListProperty::toString(const QStringList &val)
2297 {
2298  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2299 
2300  QString res = "[";
2301  int ct = val.count();
2302 
2303  for (int i=0; i<ct; i++) {
2304  if (i<(ct-1)) {
2305  res += tr("%1, ").arg(val[i]);
2306  } else {
2307  res += tr("%1").arg(val[i]);
2308  }
2309  }
2310 
2311  res += "]";
2312 
2313  return res;
2314 }
2315 
2317 {
2318  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2319 
2320  if (qcepDebug(DEBUG_PROPERTIES)) {
2321  printMessage(tr("%1 QcepStringListProperty::setValue(QcepStringList %2)")
2322  .arg(name()).arg(toString(val)));
2323  }
2324 
2325  if (val != m_Value) {
2326  if (debug()) {
2327  printMessage(tr("%1: QcepStringListProperty::setValue(QcepStringList %2) [%3]")
2328  .arg(name()).arg(toString(val)).arg(index()));
2329  }
2330 
2331  m_Value = val;
2332 
2334 
2335  if (saver) {
2336  saver->changed(this);
2337  }
2338 
2339  emit valueChanged(m_Value, incIndex(1));
2340  }
2341 }
2342 
2344 {
2345  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2346 
2347  m_Default = val;
2348 }
2349 
2351 {
2352  if (qcepDebug(DEBUG_PROPERTIES)) {
2353  printMessage(tr("%1: QcepStringListProperty::resetValue").arg(name()));
2354  }
2355 
2357 }
2358 
2359 QcepByteArrayProperty::QcepByteArrayProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QByteArray value, QString toolTip)
2360  : QcepProperty(saver, parent, name, toolTip),
2361  m_Default(value),
2362  m_Value(value)
2363 {
2364 }
2365 
2367 {
2368  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2369 
2370  return m_Value;
2371 }
2372 
2374 {
2375  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2376 
2377  return m_Default;
2378 }
2379 
2380 void QcepByteArrayProperty::setValue(QByteArray val, int index)
2381 {
2382  if (debug()) {
2383  printMessage(tr("%1 QcepByteArrayProperty::setValue(QByteArray %2, int %3) [%4]")
2384  .arg(name()).arg(toString(val)).arg(index).arg(this->index()));
2385  }
2386 
2387  if (index == this->index()) {
2388  setValue(val);
2389  }
2390 }
2391 
2393 {
2394  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2395 
2396  setValue(QByteArray());
2397 }
2398 
2399 QString QcepByteArrayProperty::toString(const QByteArray &val)
2400 {
2401  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2402 
2403  QString res = "[";
2404  int ct = val.count();
2405 
2406  for (int i=0; i<ct; i++) {
2407  if (i<(ct-1)) {
2408  res += tr("%1, ").arg(val[i]);
2409  } else {
2410  res += tr("%1").arg(val[i]);
2411  }
2412  }
2413 
2414  res += "]";
2415 
2416  return res;
2417 }
2418 
2420 {
2421  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2422 
2423  if (qcepDebug(DEBUG_PROPERTIES)) {
2424  printMessage(tr("%1 QcepByteArrayProperty::setValue(QByteArray %2)")
2425  .arg(name()).arg(toString(val)));
2426  }
2427 
2428  if (val != m_Value) {
2429  if (debug()) {
2430  printMessage(tr("%1: QcepByteArrayProperty::setValue(QByteArray %2) [%3]")
2431  .arg(name()).arg(toString(val)).arg(index()));
2432  }
2433 
2434  m_Value = val;
2435 
2437 
2438  if (saver) {
2439  saver->changed(this);
2440  }
2441 
2442  emit valueChanged(m_Value, incIndex(1));
2443  }
2444 }
2445 
2447 {
2448  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2449 
2450  m_Default = val;
2451 }
2452 
2454 {
2455  if (qcepDebug(DEBUG_PROPERTIES)) {
2456  printMessage(tr("%1: QcepByteArrayProperty::resetValue").arg(name()));
2457  }
2458 
2460 }
2461 
2462 QcepDoublePointProperty::QcepDoublePointProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QPointF value, QString toolTip)
2463  : QcepProperty(saver, parent, name, toolTip),
2464  m_Default(value),
2465  m_Value(value)
2466 {
2467 }
2468 
2470 {
2471  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2472 
2473  return m_Value;
2474 }
2475 
2477 {
2478  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2479 
2480  return m_Default;
2481 }
2482 
2484 {
2485  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2486 
2487  if (axis == 0) {
2488  return m_Value.x();
2489  } else {
2490  return m_Value.y();
2491  }
2492 }
2493 
2495 {
2496  if (debug()) {
2497  printMessage(tr("%1 QcepDoublePointProperty::setValue(QPointF(%2,%3), int %4) [%5]")
2498  .arg(name()).arg(val.x()).arg(val.y()).arg(index).arg(this->index()));
2499  }
2500 
2501  if (index == this->index()) {
2502  setValue(val);
2503  }
2504 }
2505 
2507 {
2508  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2509 
2510  if (qcepDebug(DEBUG_PROPERTIES)) {
2511  printMessage(tr("%1: QcepDoublePointProperty::setValue(QPointF(%2,%3)")
2512  .arg(name()).arg(val.x()).arg(val.y()));
2513  }
2514 
2515  if (val != m_Value) {
2516  int newIndex = incIndex(1);
2517 
2518  if (debug()) {
2519  printMessage(tr("%1: QcepDoublePointProperty::setValue(QPointF(%2,%3)) [%4]")
2520  .arg(name()).arg(val.x()).arg(val.y()).arg(index()));
2521  }
2522 
2523  if (val.x() != m_Value.x()) {
2524  emit subValueChanged(0, val.x(), newIndex);
2525  }
2526 
2527  if (val.y() != m_Value.y()) {
2528  emit subValueChanged(1, val.y(), newIndex);
2529  }
2530 
2531  m_Value = val;
2532 
2534 
2535  if (saver) {
2536  saver->changed(this);
2537  }
2538 
2539  emit valueChanged(m_Value, newIndex);
2540  }
2541 }
2542 
2544 {
2545  if (index == this->index()) {
2546  setSubValue(axis, value);
2547  }
2548 }
2549 
2551 {
2552  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2553 
2554  if (axis == 0) {
2555  if (value != m_Value.x()) {
2556  int newIndex = incIndex(1);
2557 
2558  emit subValueChanged(0, value, newIndex);
2559 
2560  m_Value.setX(value);
2561 
2562  emit valueChanged(m_Value, newIndex);
2563  }
2564  } else {
2565  if (value != m_Value.y()) {
2566  int newIndex = incIndex(1);
2567 
2568  emit subValueChanged(1, value, newIndex);
2569 
2570  m_Value.setY(value);
2571 
2572  emit valueChanged(m_Value, newIndex);
2573  }
2574  }
2575 }
2576 
2578 {
2579  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2580 
2581  if (val != m_Default) {
2582  m_Default = val;
2583  }
2584 }
2585 
2587 {
2588  if (qcepDebug(DEBUG_PROPERTIES)) {
2589  printMessage(tr("%1: QcepDoublePointProperty::resetValue").arg(name()));
2590  }
2591 
2593 }
2594 
2595 void QcepDoublePointProperty::linkTo(QDoubleSpinBox *xSpinBox, QDoubleSpinBox *ySpinBox)
2596 {
2597  if (xSpinBox) {
2598  linkTo(0, xSpinBox);
2599  }
2600 
2601  if (ySpinBox) {
2602  linkTo(1, ySpinBox);
2603  }
2604 }
2605 
2606 void QcepDoublePointProperty::linkTo(int axis, QDoubleSpinBox *spinBox)
2607 {
2608  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2609 
2611  = new QcepDoublePointPropertyDoubleSpinBoxHelper(spinBox, this, axis);
2612 
2613  helper->moveToThread(spinBox->thread());
2614  helper->connect();
2615 
2616  spinBox -> setValue(subValue(axis));
2617  spinBox -> setKeyboardTracking(false);
2618 
2619  setWidgetToolTip(spinBox);
2620 
2621  connect(this, SIGNAL(subValueChanged(int,double,int)), helper, SLOT(setSubValue(int,double,int)));
2622  connect(helper, SIGNAL(subValueChanged(int,double,int)), this, SLOT(setSubValue(int,double,int)));
2623 }
2624 
2626  (QDoubleSpinBox *spinBox, QcepDoublePointProperty *property, int axis)
2627  : QObject(spinBox),
2628  m_DoubleSpinBox(spinBox),
2629  m_Property(property),
2630  m_Axis(axis)
2631 {
2632 }
2633 
2635 {
2636  CONNECT_CHECK(QObject::connect(m_DoubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(setValue(double)), Qt::DirectConnection));
2637 }
2638 
2640 {
2641  if (m_Property->index() == index) {
2642  if (m_Axis == axis) {
2643  if (m_DoubleSpinBox->value() != value) {
2644  bool block = m_DoubleSpinBox->blockSignals(true);
2645  m_DoubleSpinBox->setValue(value);
2646  m_DoubleSpinBox->blockSignals(block);
2647  }
2648  }
2649  }
2650 }
2651 
2653 {
2654  emit subValueChanged(m_Axis, value, m_Property->incIndex(1));
2655 }
2656 
2657 QcepDoubleRectProperty::QcepDoubleRectProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QRectF value, QString toolTip)
2658  : QcepProperty(saver, parent, name, toolTip),
2659  m_Default(value),
2660  m_Value(value)
2661 {
2662 }
2663 
2665 {
2666  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2667 
2668  return m_Value;
2669 }
2670 
2672 {
2673  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2674 
2675  return m_Default;
2676 }
2677 
2679 {
2680  if (debug()) {
2681  printMessage(tr("%1 QcepDoubleRectProperty::setValue(QRectF([%2,%3],[%4,%5]), int %6) [%7]")
2682  .arg(name()).arg(val.left()).arg(val.top()).arg(val.right()).arg(val.bottom()).arg(index).arg(this->index()));
2683  }
2684 
2685  if (index == this->index()) {
2686  setValue(val);
2687  }
2688 }
2689 
2691 {
2692  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2693 
2694  if (qcepDebug(DEBUG_PROPERTIES)) {
2695  printMessage(tr("%1: QcepDoubleRectProperty::setValue(QRectF([%2,%3],[%4,%5])")
2696  .arg(name()).arg(val.top()).arg(val.right()).arg(val.bottom()));
2697  }
2698 
2699  if (val != m_Value) {
2700  if (debug()) {
2701  printMessage(tr("%1: QcepDoubleRectProperty::setValue(QRectF([%2,%3],[%4,%5])) [%6]")
2702  .arg(name()).arg(val.top()).arg(val.right()).arg(val.bottom()).arg(index()));
2703  }
2704 
2705  m_Value = val;
2706 
2708 
2709  if (saver) {
2710  saver->changed(this);
2711  }
2712 
2713  emit valueChanged(m_Value, incIndex(1));
2714  }
2715 }
2716 
2718 {
2719  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2720 
2721  if (val != m_Default) {
2722  m_Default = val;
2723  }
2724 }
2725 
2727 {
2728  if (qcepDebug(DEBUG_PROPERTIES)) {
2729  printMessage(tr("%1: QcepDoubleRectProperty::resetValue").arg(name()));
2730  }
2731 
2733 }
2734 
2735 QcepPolygonProperty::QcepPolygonProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QcepPolygon value, QString toolTip)
2736  : QcepProperty(saver, parent, name, toolTip),
2737  m_Default(value),
2738  m_Value(value)
2739 {
2740 }
2741 
2743 {
2744  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2745 
2746  return m_Value;
2747 }
2748 
2750 {
2751  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2752 
2753  return m_Default;
2754 }
2755 
2757 {
2758  if (debug()) {
2759  printMessage(tr("%1 QcepPolygonProperty::setValue(QcepPolygon(...), int %2) [%3]")
2760  .arg(name()).arg(index).arg(this->index()));
2761  }
2762 
2763  if (index == this->index()) {
2764  setValue(val);
2765  }
2766 }
2767 
2769 {
2770  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2771 
2772  if (qcepDebug(DEBUG_PROPERTIES)) {
2773  printMessage(tr("%1: QcepPolygonProperty::setValue(QcepPolygon(...)")
2774  .arg(name()));
2775  }
2776 
2777  if (val != m_Value) {
2778  if (debug()) {
2779  printMessage(tr("%1: QcepPolygonProperty::setValue(QcepPolygon(...)) [%2]")
2780  .arg(name()).arg(index()));
2781  }
2782 
2783  m_Value = val;
2784 
2786 
2787  if (saver) {
2788  saver->changed(this);
2789  }
2790 
2791  emit valueChanged(m_Value, incIndex(1));
2792  }
2793 }
2794 
2796 {
2797  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2798 
2799  QcepPolygon poly = value();
2800  poly.append(pt);
2801 
2802  setValue(poly);
2803 }
2804 
2806 {
2807  setValue(QcepPolygon());
2808 }
2809 
2811 {
2812  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2813 
2814  if (val != m_Default) {
2815  m_Default = val;
2816  }
2817 }
2818 
2820 {
2821  if (qcepDebug(DEBUG_PROPERTIES)) {
2822  printMessage(tr("%1: QcepPolygon::resetValue").arg(name()));
2823  }
2824 
2826 }
2827 
2828 QcepInt64Property::QcepInt64Property(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, qint64 value, QString toolTip)
2829  : QcepProperty(saver, parent, name, toolTip),
2830  m_Default(value),
2831  m_Value(value)
2832 {
2833 }
2834 
2836 {
2837  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2838 
2839  return m_Value;
2840 }
2841 
2843 {
2844  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2845 
2846  return m_Default;
2847 }
2848 
2849 void QcepInt64Property::setValue(qint64 val, int index)
2850 {
2851  if (debug()) {
2852  printMessage(tr("%1 QcepInt64Property::setValue(qint64 %2, int %3) [%4]")
2853  .arg(name()).arg(val).arg(index).arg(this->index()));
2854  }
2855 
2856  if (index == this->index()) {
2857  setValue(val);
2858  }
2859 }
2860 
2862 {
2863  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2864 
2865  if (qcepDebug(DEBUG_PROPERTIES)) {
2866  printMessage(tr("%1: QcepInt64Property::setValue(qint64 %2)")
2867  .arg(name()).arg(val));
2868  }
2869 
2870  if (val != m_Value) {
2871  if (debug()) {
2872  printMessage(tr("%1: QcepInt64Property::setValue(qint64 %2) [%3]")
2873  .arg(name()).arg(val).arg(index()));
2874  }
2875 
2876  m_Value = val;
2877 
2879 
2880  if (saver) {
2881  saver->changed(this);
2882  }
2883 
2884  emit valueChanged(val, incIndex(1));
2885  emit stringValueChanged(tr("%1").arg(val));
2886  }
2887 }
2888 
2890 {
2891  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2892 
2893  if (qcepDebug(DEBUG_PROPERTIES) || debug()) {
2894  printMessage(tr("%1: QcepInt64Property::incValue(qint64 %2)")
2895  .arg(name()).arg(step));
2896  }
2897 
2898  if (step) {
2899  m_Value += step;
2900 
2902 
2903  if (saver) {
2904  saver->changed(this);
2905  }
2906 
2907  emit valueChanged(value(), incIndex(1));
2908  emit stringValueChanged(tr("%1").arg(value()));
2909  }
2910 }
2911 
2913 {
2914  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
2915 
2916  m_Default = val;
2917 }
2918 
2920 {
2921  if (qcepDebug(DEBUG_PROPERTIES) || debug()) {
2922  printMessage(tr("%1: QcepInt64Property::resetValue").arg(name()));
2923  }
2924 
2926 }
2927 
2928 
void setName(QString name)
QVector< int > QcepIntVector
Definition: qcepmacros.h:23
void setSubValue(int axis, double value, int index)
QVector< bool > QcepBoolVector
Definition: qcepmacros.h:21
QcepDoubleList m_Default
Definition: qcepproperty.h:373
double defaultValue() const
void currentIndexChanged(int value, int index)
void setDefaultValue(qint64 val)
void setValue(QcepIntVector val, int index)
void stringValueChanged(QString val)
QcepPolygon defaultValue() const
QcepIntList defaultValue() const
QRectF defaultValue() const
void appendValue(QPointF pt)
static void readSettings(QObject *object, QSettings *settings, QString section)
QList< bool > QcepBoolList
Definition: qcepmacros.h:30
QcepStringPropertyLineEditHelper(QLineEdit *lineEdit, QcepStringProperty *property)
void setValue(int val, int index)
qint64 qcepDebug(int cond)
Definition: qcepdebug.cpp:26
QcepIntList value() const
void valueChanged(QString val, int index)
void setWidgetToolTip(QWidget *widget)
QcepBoolProperty * m_Property
Definition: qcepproperty.h:240
void setDefaultValue(QcepIntList val)
QcepStringPropertyTextEditHelper(QTextEdit *textEdit, QcepStringProperty *property)
void linkTo(QAbstractButton *button)
void setSettingsValue(QSettings *settings, QString name)
QcepPolygon m_Default
Definition: qcepproperty.h:595
QcepPolygon m_Value
Definition: qcepproperty.h:596
QObject * m_Parent
Definition: qcepproperty.h:77
void setDefaultValue(int val)
void setValue(QString value, int index)
void textEdited(QString value, int index)
void valueChanged(QDateTime val, int index)
QcepDoubleVector defaultValue() const
double value() const
void linkTo(QDoubleSpinBox *spinBox)
void setDefaultValue(QRectF val)
QAtomicInt m_Default
Definition: qcepproperty.h:220
QByteArray defaultValue() const
void incValue(QcepIntVector step)
QcepIntVector m_Value
Definition: qcepproperty.h:452
void setDefaultValue(QPointF val)
QPointF defaultValue() const
void setValue(QcepIntList val, int index)
QMutex m_Mutex
Definition: qcepproperty.h:69
QcepIntVectorProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QcepIntVector value, QString toolTip)
QcepDoubleListProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QcepDoubleList value, QString toolTip)
static void registerMetaTypes()
void incValue(QcepDoubleVector step)
void setValue(double val, int index)
void incValue(int step)
void setSettingsValue(QSettings *settings, QString name)
void linkTo(QDoubleSpinBox *xSpinBox, QDoubleSpinBox *ySpinBox)
QcepIntList m_Default
Definition: qcepproperty.h:425
int incIndex(int step)
void setValue(QRectF val, int index)
QcepDoublePropertyDoubleSpinBoxHelper(QDoubleSpinBox *spinBox, QcepDoubleProperty *property)
QString m_Name
Definition: qcepproperty.h:75
int defaultValue() const
QcepDoubleVectorProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QcepDoubleVector value, QString toolTip)
QcepPolygon value() const
void setValue(QDateTime val, int index)
QcepInt64Property(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, qint64 value, QString toolTip)
void incValue(QcepDoubleList step)
void setSaver(QcepSettingsSaverWPtr saver)
void setValue(QStringList val, int index)
void setText(QString value, int index)
void setDefaultValue(QString val)
void valueChanged(QcepDoubleList val, int index)
void setDefaultValue(bool val)
QcepIntVector m_Default
Definition: qcepproperty.h:451
void setDefaultValue(QDateTime val)
QcepBoolProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, bool value, QString toolTip)
QcepDoubleList m_Value
Definition: qcepproperty.h:374
QcepStringListProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QStringList value, QString toolTip)
void appendValue(double val)
void setValue(QcepPolygon val, int index)
void setValue(QcepDoubleVector val, int index)
void toggled(bool value, int index)
void appendValue(double val)
QcepDoublePointProperty * m_Property
Definition: qcepproperty.h:549
QString parentName() const
QDateTime defaultValue() const
QVector< double > QcepDoubleVector
Definition: qcepmacros.h:19
void setSubValue(int axis, double value, int index)
QCEP_DOC_OBJECT("JSON","Qt Built-in JSON Parser") QCEP_DOC_FUNCTION("JSON.parse"
QcepDoubleProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, double value, QString toolTip)
QString toString(const QcepDoubleList &list)
#define INVOKE_CHECK(res)
Definition: qcepmacros.h:13
void valueChanged(QByteArray val, int index)
void setDefaultValue(double val)
QcepDateTimeProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QDateTime value, QString toolTip)
QPointF value() const
QcepStringPropertyComboBoxHelper(QComboBox *comboBox, QcepStringProperty *property)
void setValue(QcepDoubleList val, int index)
qint64 defaultValue() const
QcepDoubleVector m_Default
Definition: qcepproperty.h:399
QcepDoubleVector value() const
virtual void printMessage(QString msg, QDateTime dt=QDateTime::currentDateTime())
static void writeSettings(QObject *object, QSettings *settings, QString section)
QAtomicInt m_Value
Definition: qcepproperty.h:158
void valueChanged(QStringList val, int index)
void subValueChanged(int axis, double value, int index)
void setValue(bool val, int index)
QcepIntList m_Value
Definition: qcepproperty.h:426
QAtomicInt m_Value
Definition: qcepproperty.h:221
void incValue(qint64 step)
QcepDoubleList defaultValue() const
QList< QString > QcepStringList
Definition: qcepmacros.h:34
void incValue(double step)
void textEdited(QString value, int index)
void linkTo(QComboBox *comboBox)
void setDefaultValue(QStringList val)
QcepStringProperty * m_Property
Definition: qcepproperty.h:306
void valueChanged(QcepIntList val, int index)
int value() const
QcepIntListProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QcepIntList value, QString toolTip)
QcepDoubleList value() const
void valueChanged(int value, int index)
static void customSaver(const QVariant &val, QSettings *settings, QString name)
void setDefaultValue(QByteArray val)
QcepIntProperty * m_Property
Definition: qcepproperty.h:177
void setDefaultValue(QcepPolygon val)
QList< double > QcepDoubleList
Definition: qcepmacros.h:28
QcepIntVector defaultValue() const
void linkTo(QSpinBox *spinBox)
QAtomicInt m_Index
Definition: qcepproperty.h:76
QList< int > QcepIntList
Definition: qcepmacros.h:32
QString toString(const QByteArray &list)
qint64 value() const
void valueChanged(QRectF val, int index)
QcepIntPropertySpinBoxHelper(QSpinBox *spinBox, QcepIntProperty *property)
void subValueChanged(int axis, double val, int index)
QString name() const
QSharedPointer< QcepSettingsSaver > QcepSettingsSaverPtr
QcepDoublePointPropertyDoubleSpinBoxHelper(QDoubleSpinBox *spinBox, QcepDoublePointProperty *property, int axis)
QString toString(const QcepIntList &list)
void setValue(qint64 val, int index)
QVector< QString > QcepStringVector
Definition: qcepmacros.h:25
QcepProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QString toolTip)
QcepIntPropertyComboBoxHelper(QComboBox *comboBox, QcepIntProperty *property)
void valueChanged(QString value, int index)
void setDefaultValue(QcepDoubleList val)
#define HEXARG(a)
Definition: qcepdebug.h:50
void setCurrentIndex(int value, int index)
QcepByteArrayProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QByteArray value, QString toolTip)
void valueChanged(qint64 val, int index)
QcepStringProperty * m_Property
Definition: qcepproperty.h:325
QString toString(const QcepIntVector &list)
QcepIntVector value() const
QcepStringProperty * m_Property
Definition: qcepproperty.h:287
QDateTime value() const
QString toString(const QStringList &list)
QString m_ToolTip
Definition: qcepproperty.h:78
QcepDoubleRectProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QRectF value, QString toolTip)
QStringList defaultValue() const
double subValue(int axis) const
QString value() const
void stringValueChanged(QString val)
QByteArray value() const
int debug() const
void appendValue(QString val)
void valueChanged(QcepDoubleVector val, int index)
QVector< QPointF > QcepPolygon
Definition: qcepmacros.h:37
static void setSettingsValue(QSettings *settings, QString name, QVariant value)
void setDebug(int dbg)
QcepBoolPropertyButtonHelper(QAbstractButton *button, QcepBoolProperty *property)
#define CONNECT_CHECK(res)
Definition: qcepmacros.h:14
void valueChanged(double value, int index)
QAtomicInt m_Default
Definition: qcepproperty.h:157
void setDefaultValue(QcepDoubleVector val)
void setValue(QPointF val, int index)
QString toolTip() const
QcepDoublePointProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QPointF value, QString toolTip)
static QMap< QString, CustomSettingsSaver * > m_CustomSavers
Definition: qcepproperty.h:80
QString toString(const QcepDoubleVector &list)
void setChecked(bool value, int index)
void setValue(int value, int index)
void valueChanged(double val, int index)
void valueChanged(QcepIntVector val, int index)
QStringList value() const
void incValue(QcepIntList step)
void appendValue(int val)
void appendValue(int val)
QString defaultValue() const
bool defaultValue() const
QcepStringProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QString value, QString toolTip)
void valueChanged(QPointF val, int index)
void valueChanged(int val, int index)
QString expandedToolTip() const
QcepDoubleVector m_Value
Definition: qcepproperty.h:400
static void registerCustomSaver(QString typeName, CustomSettingsSaver *saver)
void stringValueChanged(QString val)
QcepIntProperty * m_Property
Definition: qcepproperty.h:196
void setDefaultValue(QcepIntVector val)
void( CustomSettingsSaver)(const QVariant &val, QSettings *settings, QString name)
Definition: qcepproperty.h:28
bool value() const
QcepIntProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, int value, QString toolTip)
QAbstractButton * m_Button
Definition: qcepproperty.h:239
void setValue(QByteArray val, int index)
static void customSaver(const QVariant &val, QSettings *settings, QString name)
void valueChanged(bool val, int index)
QcepPolygonProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, QcepPolygon value, QString toolTip)
QWeakPointer< QcepSettingsSaver > QcepSettingsSaverWPtr
QcepSettingsSaverWPtr m_Saver
Definition: qcepproperty.h:70
void setValue(QString val, int index)
void setToolTip(QString tip)
void valueChanged(QcepPolygon val, int index)
void setValue(double value, int index)