Isis 3 Programmer Reference
MeasureTableDelegate.cpp
1
7/* SPDX-License-Identifier: CC0-1.0 */
8
9#include "MeasureTableDelegate.h"
10
11#include <iostream>
12
13#include <QComboBox>
14#include <QLineEdit>
15#include <QMessageBox>
16#include <QString>
17#include <QVariant>
18#include <QWidget>
19
20#include "ControlMeasure.h"
21#include "ControlMeasure.h"
22#include "IException.h"
23#include "IString.h"
24
25#include "AbstractMeasureItem.h"
26#include "AbstractTreeItem.h"
27#include "MeasureTableModel.h"
28#include "TableColumn.h"
29
30namespace Isis {
31 MeasureTableDelegate::MeasureTableDelegate() {
32 }
33
34
35 MeasureTableDelegate::~MeasureTableDelegate() {
36 }
37
38
39 QWidget *MeasureTableDelegate::getWidget(TableColumn const *col)
40 const {
41 AbstractMeasureItem::Column column =
42 AbstractMeasureItem::getColumn(col->getTitle());
43
44 switch (column) {
45 case AbstractMeasureItem::Ignored:
46 case AbstractMeasureItem::EditLock: {
47 QComboBox *combo = new QComboBox;
48
49 combo->insertItem(0, "Yes");
50 combo->insertItem(1, "No");
51 return combo;
52 }
53 case AbstractMeasureItem::Type: {
54 QComboBox *combo = new QComboBox;
55
56 combo->insertItem(0, "Candidate");
57 combo->insertItem(1, "Manual");
58 combo->insertItem(2, "RegisteredPixel");
59 combo->insertItem(3, "RegisteredSubPixel");
60 return combo;
61 }
62 default: {
63 QLineEdit *lineEdit = new QLineEdit;
64 return lineEdit;
65 }
66 }
67
68 IString msg = "Could not create delegate widget for column ["
69 + col->getTitle() + "]";
70 throw IException(IException::Programmer, msg, _FILEINFO_);
71 }
72
73
74 void MeasureTableDelegate::readData(QWidget *widget,
75 AbstractTreeItem *row, TableColumn const *col) const {
76 AbstractMeasureItem::Column column =
77 AbstractMeasureItem::getColumn(col->getTitle());
78
79 QString data = row->getFormattedData(col->getTitle());
80
81 ControlMeasure *measure = (ControlMeasure *)row->getPointer();
82
83 switch (column) {
84 case AbstractMeasureItem::EditLock: {
85 QComboBox *combo = static_cast< QComboBox * >(widget);
86 if (measure->IsEditLocked())
87 combo->setCurrentIndex(0);
88 else
89 combo->setCurrentIndex(1);
90 break;
91 }
92 case AbstractMeasureItem::Ignored: {
93 QComboBox *combo = static_cast< QComboBox * >(widget);
94 if (measure->IsIgnored())
95 combo->setCurrentIndex(0);
96 else
97 combo->setCurrentIndex(1);
98 break;
99 }
100 case AbstractMeasureItem::Type: {
101 QComboBox *combo = static_cast< QComboBox * >(widget);
102 combo->setCurrentIndex((int) measure->StringToMeasureType(data));
103 break;
104 }
105 default: {
106 QLineEdit *lineEdit = static_cast< QLineEdit * >(widget);
107 lineEdit->setText(data);
108 }
109 }
110 }
111
112
113 void MeasureTableDelegate::readData(QWidget *widget,
114 AbstractTreeItem *row, TableColumn const *col,
115 QString newData) const {
116 AbstractMeasureItem::Column column =
117 AbstractMeasureItem::getColumn(col->getTitle());
118
119 QString data = row->getFormattedData(col->getTitle());
120
121 ControlMeasure *measure = (ControlMeasure *) row->getPointer();
122
123 switch (column) {
124 case AbstractMeasureItem::EditLock: {
125 QComboBox *combo = static_cast< QComboBox * >(widget);
126
127 if (measure->IsEditLocked())
128 combo->setCurrentIndex(0);
129 else
130 combo->setCurrentIndex(1);
131
132 if (QString("yes").startsWith(newData.toLower()))
133 combo->setCurrentIndex(0);
134 else if (QString("no").startsWith(newData.toLower()))
135 combo->setCurrentIndex(1);
136 }
137 break;
138
139 case AbstractMeasureItem::Ignored: {
140 QComboBox *combo = static_cast< QComboBox * >(widget);
141
142 if (measure->IsIgnored())
143 combo->setCurrentIndex(0);
144 else
145 combo->setCurrentIndex(1);
146
147 if (QString("yes").startsWith(newData.toLower()))
148 combo->setCurrentIndex(0);
149 if (QString("no").startsWith(newData.toLower()))
150 combo->setCurrentIndex(1);
151 }
152 break;
153
154 case AbstractMeasureItem::Type: {
155 QComboBox *combo = static_cast< QComboBox * >(widget);
156
157 combo->setCurrentIndex((int) measure->StringToMeasureType(data));
158
159 for (int i = combo->count() - 1; i >= 0; --i)
160 if (combo->itemText(i).toLower().startsWith(newData.toLower()))
161 combo->setCurrentIndex(i);
162 }
163 break;
164
165 default: {
166 QLineEdit *lineEdit = static_cast< QLineEdit * >(widget);
167 lineEdit->setText(newData);
168 }
169 }
170 }
171
172
173 void MeasureTableDelegate::saveData(QWidget *widget,
174 AbstractTreeItem *row, TableColumn const *col) const {
175 AbstractMeasureItem::Column column =
176 AbstractMeasureItem::getColumn(col->getTitle());
177 QString newData;
178
179 switch (column) {
180 case AbstractMeasureItem::EditLock:
181 case AbstractMeasureItem::Ignored:
182 case AbstractMeasureItem::Type: {
183 QComboBox *combo = static_cast< QComboBox * >(widget);
184 newData = combo->currentText();
185 break;
186 }
187 default: {
188 QLineEdit *lineEdit = static_cast< QLineEdit * >(widget);
189 newData = lineEdit->text();
190 }
191 }
192
193 QString warningText = MeasureTableModel::getMeasureWarningMessage(
194 row, col, newData);
195
196 bool changeData = true;
197
198 if (!warningText.isEmpty()) {
199 QMessageBox::StandardButton status = QMessageBox::warning(
200 NULL, "Change cell?", warningText, QMessageBox::Yes |
201 QMessageBox::No);
202
203 changeData = (status == QMessageBox::Yes);
204 }
205
206 if (changeData)
207 row->setData(col->getTitle(), newData);
208 }
209}
@ Programmer
This error is for when a programmer made an API call that was illegal.
Definition IException.h:146
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16