cctw  0.2.1
cctwdoublevector3dproperty.cpp
Go to the documentation of this file.
2 #include "qcepmutexlocker.h"
3 #include "qcepdebug.h"
4 #include "qcepsettingssaver.h"
5 #include <QScriptEngine>
6 #include <stdio.h>
7 
8 CctwDoubleVector3DProperty::CctwDoubleVector3DProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, CctwDoubleVector3D value, QString toolTip) :
9  QcepProperty(saver, parent, name, toolTip),
10  m_Default(value),
11  m_Value(value)
12 {
13 }
14 
15 CctwDoubleVector3DProperty::CctwDoubleVector3DProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, double x, double y, double z, QString toolTip) :
16  QcepProperty(saver, parent, name, toolTip),
17  m_Default(CctwDoubleVector3D(x,y,z)),
18  m_Value(CctwDoubleVector3D(x,y,z))
19 {
20 }
21 
23 {
24  qRegisterMetaType< CctwDoubleVector3D >("CctwDoubleVector3D");
25 
26  qRegisterMetaTypeStreamOperators< CctwDoubleVector3D >("CctwDoubleVector3D");
27 
28  registerCustomSaver("CctwDoubleVector3D", CctwDoubleVector3D::customSaver);
29 }
30 
32 {
33  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
34 
35  return m_Value;
36 }
37 
39 {
40  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
41 
42  return m_Default;
43 }
44 
46 {
47  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
48 
49  return m_Value(axis);
50 }
51 
53 {
54  if (debug()) {
55  printMessage(tr("%1 CctwqtDoubleVector3DProperty::setValue(CctwDoubleVector3D %2, int %3) [%4]")
56  .arg(name()).arg(toString(val)).arg(index).arg(this->index()));
57  }
58 
59  if (index == this->index()) {
60  setValue(val);
61  }
62 }
63 
65 {
66  setValue(m_Value + step);
67 }
68 
69 void CctwDoubleVector3DProperty::setSubValue(int axis, double value, int index)
70 {
71  if (index == this->index()) {
72  setSubValue(axis, value);
73  }
74 }
75 
76 void CctwDoubleVector3DProperty::setSubValue(int axis, double value)
77 {
78  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
79 
80  if (value != m_Value(axis)) {
81  int newIndex = incIndex(1);
82 
83  emit subValueChanged(axis, value, newIndex);
84 
85  m_Value(axis) = value;
86 
87  emit valueChanged(m_Value, newIndex);
88  }
89 }
90 
92 {
93  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
94 
95  QString res = tr("[ %1 %2 %3 ]").arg(val.x()).arg(val.y()).arg(val.z());
96 
97  return res;
98 }
99 
101 {
102  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
103 
104  if (qcepDebug(DEBUG_PROPERTIES)) {
105  printMessage(tr("%1 CctwqtDoubleVector3DProperty::setValue(CctwDoubleVector3D %2)")
106  .arg(name()).arg(toString(val)));
107  }
108 
109  if (val != m_Value) {
110  int newIndex = incIndex(1);
111 
112  if (debug()) {
113  printMessage(tr("%1: CctwqtDoubleVector3DProperty::setValue(CctwDoubleVector3D %2) [%3]")
114  .arg(name()).arg(toString(val)).arg(index()));
115  }
116 
117  for (int axis=0; axis<3; axis++) {
118  if (val(axis) != m_Value(axis)) {
119  emit subValueChanged(axis, val(axis), newIndex);
120  }
121  }
122 
123  m_Value = val;
124 
125  QcepSettingsSaverPtr saver(m_Saver);
126 
127  if (saver) {
128  saver->changed(this);
129  }
130 
131  emit valueChanged(m_Value, newIndex);
132  }
133 }
134 
136 {
137  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
138 
139  m_Default = val;
140 }
141 
143 {
144  if (qcepDebug(DEBUG_PROPERTIES)) {
145  printMessage(tr("%1: CctwqtDoubleVector3DProperty::resetValue").arg(name()));
146  }
147 
149 }
150 
151 QScriptValue CctwDoubleVector3DProperty::toScriptValue(QScriptEngine *engine, const CctwDoubleVector3D &vec)
152 {
153  QScriptValue obj = engine->newArray(3);
154 
155  obj.setProperty(0, vec.x());
156  obj.setProperty(1, vec.y());
157  obj.setProperty(2, vec.z());
158 
159  return obj;
160 }
161 
163 {
164  vec.x() = obj.property(0).toNumber();
165  vec.y() = obj.property(1).toNumber();
166  vec.z() = obj.property(2).toNumber();
167 }
168 
169 void CctwDoubleVector3DProperty::linkTo(QDoubleSpinBox *xSpinBox, QDoubleSpinBox *ySpinBox, QDoubleSpinBox *zSpinBox)
170 {
171  if (xSpinBox) {
172  linkTo(0, xSpinBox);
173  }
174 
175  if (ySpinBox) {
176  linkTo(1, ySpinBox);
177  }
178 
179  if (zSpinBox) {
180  linkTo(2, zSpinBox);
181  }
182 }
183 
184 void CctwDoubleVector3DProperty::linkTo(int axis, QDoubleSpinBox *spinBox)
185 {
186  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
187 
189  = new CctwDoubleVector3DPropertyDoubleSpinBoxHelper(spinBox, this, axis);
190 
191  helper->moveToThread(spinBox->thread());
192  helper->connect();
193 
194  spinBox -> setValue(subValue(axis));
195  spinBox -> setKeyboardTracking(false);
196 
197  setWidgetToolTip(spinBox);
198 
199  connect(this, SIGNAL(subValueChanged(int,double,int)), helper, SLOT(setSubValue(int,double,int)));
200  connect(helper, SIGNAL(subValueChanged(int,double,int)), this, SLOT(setSubValue(int,double,int)));
201 }
202 
204  (QDoubleSpinBox *spinBox, CctwDoubleVector3DProperty *property, int axis)
205  : QObject(spinBox),
206  m_DoubleSpinBox(spinBox),
207  m_Property(property),
208  m_Axis(axis)
209 {
210 }
211 
213 {
214  CONNECT_CHECK(QObject::connect(m_DoubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(setValue(double)), Qt::DirectConnection));
215 }
216 
217 void CctwDoubleVector3DPropertyDoubleSpinBoxHelper::setSubValue(int axis, double value, int index)
218 {
219  if (m_Property->index() == index) {
220  if (m_Axis == axis) {
221  if (m_DoubleSpinBox->value() != value) {
222  bool block = m_DoubleSpinBox->blockSignals(true);
223  m_DoubleSpinBox->setValue(value);
224  m_DoubleSpinBox->blockSignals(block);
225  }
226  }
227  }
228 }
229 
231 {
232  emit subValueChanged(m_Axis, value, m_Property->incIndex(1));
233 }
234 
235 #ifndef QT_NO_DATASTREAM
236 
237 QDataStream &operator<<(QDataStream &stream, const CctwDoubleVector3D &vec)
238 {
239  for (int i = 0; i < 3; ++i) {
240  stream << vec(i);
241  }
242 
243  return stream;
244 }
245 
246 QDataStream &operator>>(QDataStream &stream, CctwDoubleVector3D &vec)
247 {
248  double x;
249  for (int i = 0; i < 3; ++i) {
250  stream >> x;
251  vec(i) = x;
252  }
253 
254  return stream;
255 }
256 
257 #endif
CctwDoubleVector3DProperty(QcepSettingsSaverWPtr saver, QObject *parent, const char *name, CctwDoubleVector3D value, QString toolTip)
void valueChanged(CctwDoubleVector3D val, int index)
void setSubValue(int axis, double value, int index)
QDataStream & operator>>(QDataStream &stream, CctwDoubleVector3D &vec)
void setValue(CctwDoubleVector3D val, int index)
void linkTo(QDoubleSpinBox *xSpinBox, QDoubleSpinBox *ySpinBox, QDoubleSpinBox *zSpinBox)
void subValueChanged(int axis, double value, int index)
T x() const
Definition: cctwvector3d.h:17
static QScriptValue toScriptValue(QScriptEngine *engine, const CctwDoubleVector3D &vec)
CctwDoubleVector3DPropertyDoubleSpinBoxHelper(QDoubleSpinBox *spinBox, CctwDoubleVector3DProperty *property, int axis)
static void fromScriptValue(const QScriptValue &obj, CctwDoubleVector3D &vec)
void incValue(CctwDoubleVector3D step)
T z() const
Definition: cctwvector3d.h:19
void setSubValue(int axis, double value, int index)
CctwDoubleVector3D value() const
QDataStream & operator<<(QDataStream &stream, const CctwDoubleVector3D &vec)
void subValueChanged(int axis, double val, int index)
CctwDoubleVector3D defaultValue() const
static void customSaver(const QVariant &val, QSettings *settings, QString name)
void setDefaultValue(CctwDoubleVector3D val)
QString toString(const CctwDoubleVector3D &mat)
T y() const
Definition: cctwvector3d.h:18