@@ -73,8 +73,40 @@ class FieldTreeItem : public TreeItem {
7373 return parent ()->isKnown ();
7474 }
7575
76+ void setData (QVariant value, int column)
77+ {
78+ QVariant currentValue = fieldToData ();
79+
80+ setChanged (currentValue != value);
81+ TreeItem::setData (value, column);
82+ }
83+
84+ void update ()
85+ {
86+ bool updated = false ;
87+
88+ if (!changed ()) {
89+ QVariant currentValue = fieldToData ();
90+ if (data () != currentValue) {
91+ updated = true ;
92+ TreeItem::setData (currentValue);
93+ }
94+ }
95+ if (changed () || updated) {
96+ setHighlight (true );
97+ }
98+ }
99+
100+ void apply ()
101+ {
102+ m_field->setValue (dataToField (), m_index);
103+ setChanged (false );
104+ }
76105
77106protected:
107+ virtual QVariant fieldToData () const = 0;
108+ virtual QVariant dataToField () const = 0;
109+
78110 int m_index;
79111 UAVObjectField *m_field;
80112};
@@ -90,16 +122,6 @@ class EnumFieldTreeItem : public FieldTreeItem {
90122 FieldTreeItem (index, data, field, parent), m_enumOptions(field->getOptions ())
91123 {}
92124
93- void setData (QVariant value, int column)
94- {
95- QStringList options = m_field->getOptions ();
96- QVariant tmpValue = m_field->getValue (m_index);
97- int tmpValIndex = options.indexOf (tmpValue.toString ());
98-
99- setChanged (tmpValIndex != value);
100- TreeItem::setData (value, column);
101- }
102-
103125 QString enumOptions (int index)
104126 {
105127 if ((index < 0 ) || (index >= m_enumOptions.length ())) {
@@ -108,25 +130,21 @@ class EnumFieldTreeItem : public FieldTreeItem {
108130 return m_enumOptions.at (index);
109131 }
110132
111- void apply ()
133+ QVariant fieldToData () const
112134 {
113- int value = data ().toInt ();
114135 QStringList options = m_field->getOptions ();
136+ QVariant value = m_field->getValue (m_index);
137+ int valIndex = options.indexOf (value.toString ());
115138
116- m_field->setValue (options[value], m_index);
117- setChanged (false );
139+ return valIndex;
118140 }
119141
120- void update ()
142+ QVariant dataToField () const
121143 {
144+ int value = data ().toInt ();
122145 QStringList options = m_field->getOptions ();
123- QVariant value = m_field->getValue (m_index);
124- int valIndex = options.indexOf (value.toString ());
125146
126- if (data () != valIndex || changed ()) {
127- TreeItem::setData (valIndex);
128- setHighlight (true );
129- }
147+ return options[value];
130148 }
131149
132150 QWidget *createEditor (QWidget *parent) const
@@ -207,6 +225,16 @@ class IntFieldTreeItem : public FieldTreeItem {
207225 }
208226 }
209227
228+ QVariant fieldToData () const
229+ {
230+ return m_field->getValue (m_index).toInt ();
231+ }
232+
233+ QVariant dataToField () const
234+ {
235+ return data ().toInt ();
236+ }
237+
210238 QWidget *createEditor (QWidget *parent) const
211239 {
212240 QSpinBox *editor = new QSpinBox (parent);
@@ -231,28 +259,6 @@ class IntFieldTreeItem : public FieldTreeItem {
231259 spinBox->setValue (value.toInt ());
232260 }
233261
234- void setData (QVariant value, int column)
235- {
236- setChanged (m_field->getValue (m_index) != value);
237- TreeItem::setData (value, column);
238- }
239-
240- void apply ()
241- {
242- m_field->setValue (data ().toInt (), m_index);
243- setChanged (false );
244- }
245-
246- void update ()
247- {
248- int value = m_field->getValue (m_index).toInt ();
249-
250- if (data () != value || changed ()) {
251- TreeItem::setData (value);
252- setHighlight (true );
253- }
254- }
255-
256262private:
257263 int m_minValue;
258264 int m_maxValue;
@@ -267,26 +273,14 @@ class FloatFieldTreeItem : public FieldTreeItem {
267273 FloatFieldTreeItem (UAVObjectField *field, int index, const QVariant &data, bool scientific = false , TreeItem *parent = 0 ) :
268274 FieldTreeItem (index, data, field, parent), m_useScientificNotation(scientific) {}
269275
270- void setData ( QVariant value, int column)
276+ QVariant fieldToData () const
271277 {
272- setChanged (m_field->getValue (m_index) != value);
273- TreeItem::setData (value, column);
278+ return m_field->getValue (m_index).toDouble ();
274279 }
275280
276- void apply ()
281+ QVariant dataToField () const
277282 {
278- m_field->setValue (data ().toDouble (), m_index);
279- setChanged (false );
280- }
281-
282- void update ()
283- {
284- double value = m_field->getValue (m_index).toDouble ();
285-
286- if (data () != value || changed ()) {
287- TreeItem::setData (value);
288- setHighlight (true );
289- }
283+ return data ().toDouble ();
290284 }
291285
292286 QWidget *createEditor (QWidget *parent) const
@@ -345,6 +339,16 @@ class HexFieldTreeItem : public FieldTreeItem {
345339 FieldTreeItem (index, data, field, parent)
346340 {}
347341
342+ QVariant fieldToData () const
343+ {
344+ return toHexString (m_field->getValue (m_index));
345+ }
346+
347+ QVariant dataToField () const
348+ {
349+ return toUInt (data ());
350+ }
351+
348352 QWidget *createEditor (QWidget *parent) const
349353 {
350354 QLineEdit *lineEdit = new QLineEdit (parent);
@@ -368,28 +372,6 @@ class HexFieldTreeItem : public FieldTreeItem {
368372 lineEdit->setText (value.toString ());
369373 }
370374
371- void setData (QVariant value, int column)
372- {
373- setChanged (m_field->getValue (m_index) != toUInt (value));
374- TreeItem::setData (value, column);
375- }
376-
377- void apply ()
378- {
379- m_field->setValue (toUInt (data ()), m_index);
380- setChanged (false );
381- }
382-
383- void update ()
384- {
385- QVariant value = toHexString (m_field->getValue (m_index));
386-
387- if (data () != value || changed ()) {
388- TreeItem::setData (value);
389- setHighlight (true );
390- }
391- }
392-
393375private:
394376 QVariant toHexString (QVariant value) const
395377 {
@@ -418,6 +400,16 @@ class CharFieldTreeItem : public FieldTreeItem {
418400 FieldTreeItem (index, data, field, parent)
419401 {}
420402
403+ QVariant fieldToData () const
404+ {
405+ return toChar (m_field->getValue (m_index));
406+ }
407+
408+ QVariant dataToField () const
409+ {
410+ return toUInt (data ());
411+ }
412+
421413 QWidget *createEditor (QWidget *parent) const
422414 {
423415 QLineEdit *lineEdit = new QLineEdit (parent);
@@ -441,27 +433,6 @@ class CharFieldTreeItem : public FieldTreeItem {
441433 lineEdit->setText (value.toString ());
442434 }
443435
444- void setData (QVariant value, int column)
445- {
446- setChanged (m_field->getValue (m_index) != toUInt (value));
447- TreeItem::setData (value, column);
448- }
449-
450- void apply ()
451- {
452- m_field->setValue (toUInt (data ()), m_index);
453- setChanged (false );
454- }
455-
456- void update ()
457- {
458- QVariant value = toChar (m_field->getValue (m_index));
459-
460- if (data () != value || changed ()) {
461- TreeItem::setData (value);
462- setHighlight (true );
463- }
464- }
465436private:
466437 QVariant toChar (QVariant value) const
467438 {
0 commit comments