Skip to content

Commit 9f71b94

Browse files
committed
LP-567 factorize common code up into FieldTreeItem
derived classes are simpler
1 parent 6ded0d0 commit 9f71b94

1 file changed

Lines changed: 73 additions & 102 deletions

File tree

ground/gcs/src/plugins/uavobjectbrowser/fieldtreeitem.h

Lines changed: 73 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -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

77106
protected:
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-
256262
private:
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-
393375
private:
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-
}
465436
private:
466437
QVariant toChar(QVariant value) const
467438
{

0 commit comments

Comments
 (0)