Isis 3 Programmer Reference
PointTableDelegate.cpp
1
7/* SPDX-License-Identifier: CC0-1.0 */
8
9#include "PointTableDelegate.h"
10
11#include <iostream>
12
13#include <QComboBox>
14#include <QLineEdit>
15#include <QMessageBox>
16#include <QString>
17#include <QWidget>
18
19#include "ControlMeasure.h"
20#include "ControlPoint.h"
21#include "IException.h"
22
23#include "AbstractPointItem.h"
24#include "AbstractTreeItem.h"
25#include "PointTableModel.h"
26#include "TableColumn.h"
27
28namespace Isis {
29 PointTableDelegate::PointTableDelegate() {
30 }
31
32
33 PointTableDelegate::~PointTableDelegate() {
34 }
35
36
37 QWidget *PointTableDelegate::getWidget(TableColumn const *col) const {
38 AbstractPointItem::Column column =
39 AbstractPointItem::getColumn(col->getTitle());
40
41 switch (column) {
42 // handle combo box cases
43 case AbstractPointItem::PointType:
44 case AbstractPointItem::EditLock:
45 case AbstractPointItem::Ignored:
46 case AbstractPointItem::Reference:
47 case AbstractPointItem::APrioriSPSource:
48 case AbstractPointItem::APrioriRadiusSource: {
49 QComboBox *combo = new QComboBox;
50
51 switch (column) {
52 case AbstractPointItem::PointType:
53 for (int i = 0; i < ControlPoint::PointTypeCount; i++) {
54 combo->insertItem(i, ControlPoint::PointTypeToString(
56 }
57 break;
58 case AbstractPointItem::EditLock:
59 combo->insertItem(0, "Yes");
60 combo->insertItem(1, "No");
61 break;
62 case AbstractPointItem::Ignored:
63 combo->insertItem(0, "Yes");
64 combo->insertItem(1, "No");
65 break;
66 case AbstractPointItem::Reference:
67 // Reference depends on possibilities, not static, so will be
68 // populated later in readData(...).
69 break;
70 case AbstractPointItem::APrioriSPSource:
71 combo->insertItem(0, "None");
72 combo->insertItem(1, "User");
73 combo->insertItem(2, "AverageOfMeasures");
74 combo->insertItem(3, "Reference");
75 combo->insertItem(4, "Basemap");
76 combo->insertItem(5, "BundleSolution");
77 break;
78 case AbstractPointItem::APrioriRadiusSource:
79 combo->insertItem(0, "None");
80 combo->insertItem(1, "User");
81 combo->insertItem(2, "AverageOfMeasures");
82 combo->insertItem(3, "Ellipsoid");
83 combo->insertItem(4, "DEM");
84 combo->insertItem(5, "BundleSolution");
85 break;
86 default:
87 break;
88 }
89
90 return combo;
91 }
92
93 // handle line edit cases
94 default:
95 return new QLineEdit();
96 }
97
98 QString msg = "Could not create delegate widget for column ["
99 + col->getTitle() + "]";
100 throw IException(IException::Programmer, msg, _FILEINFO_);
101 }
102
103
104 void PointTableDelegate::readData(QWidget *widget,
105 AbstractTreeItem *row, TableColumn const *col) const {
106 QString columnTitle = col->getTitle();
107 AbstractPointItem::Column column =
108 AbstractPointItem::getColumn(columnTitle);
109
110 QString data = row->getFormattedData(columnTitle);
111
112 ControlPoint *point = (ControlPoint *)row->getPointer();
113
114 switch (column) {
115 case AbstractPointItem::Reference: {
116 QComboBox *combo = static_cast< QComboBox * >(widget);
117
118 for (int i = 0; i < point->GetNumMeasures(); i++)
119 combo->insertItem(i, point->GetMeasure(i)->GetCubeSerialNumber());
120 combo->setCurrentIndex(point->IndexOfRefMeasure());
121 }
122 break;
123
124 case AbstractPointItem::PointType:
125 case AbstractPointItem::EditLock:
126 case AbstractPointItem::Ignored:
127 case AbstractPointItem::APrioriSPSource:
128 case AbstractPointItem::APrioriRadiusSource: {
129 QComboBox *combo = static_cast< QComboBox * >(widget);
130
131 switch (column) {
132 case AbstractPointItem::PointType:
133 combo->setCurrentIndex(
134 (int) point->StringToPointType(data));
135 break;
136 case AbstractPointItem::EditLock:
137 combo->setCurrentIndex(point->IsEditLocked() ? 0 : 1);
138 break;
139 case AbstractPointItem::Ignored:
140 combo->setCurrentIndex(point->IsIgnored() ? 0 : 1);
141 break;
142 case AbstractPointItem::APrioriSPSource:
143 combo->setCurrentIndex(
144 (int) point->StringToSurfacePointSource(data));
145 break;
146 case AbstractPointItem::APrioriRadiusSource:
147 combo->setCurrentIndex(
148 (int) point->StringToRadiusSource(data));
149 break;
150 default:
151 break;
152 }
153 }
154 break;
155 default: {
156 QLineEdit *lineEdit = static_cast< QLineEdit * >(widget);
157 lineEdit->setText(data);
158 }
159 }
160 }
161
162
163 void PointTableDelegate::readData(QWidget *widget,
164 AbstractTreeItem *row, TableColumn const *col,
165 QString newData) const {
166 QString columnTitle = col->getTitle();
167 AbstractPointItem::Column column =
168 AbstractPointItem::getColumn(columnTitle);
169
170 QString data = row->getFormattedData(columnTitle);
171
172 ControlPoint *point = (ControlPoint *)row->getPointer();
173
174 switch (column) {
175 case AbstractPointItem::Reference: {
176 QComboBox *combo = static_cast< QComboBox * >(widget);
177
178 for (int i = 0; i < point->GetNumMeasures(); i++)
179 combo->insertItem(i, point->GetMeasure(i)->GetCubeSerialNumber());
180
181 combo->setCurrentIndex(point->IndexOfRefMeasure());
182
183 for (int i = combo->count() - 1; i >= 0; --i)
184 if (combo->itemText(i).toLower().startsWith(newData.toLower()))
185 combo->setCurrentIndex(i);
186 }
187 break;
188
189 case AbstractPointItem::PointType:
190 case AbstractPointItem::EditLock:
191 case AbstractPointItem::Ignored:
192 case AbstractPointItem::APrioriSPSource:
193 case AbstractPointItem::APrioriRadiusSource: {
194 QComboBox *combo = static_cast< QComboBox * >(widget);
195
196 switch (column) {
197 case AbstractPointItem::PointType:
198 combo->setCurrentIndex(
199 (int) point->StringToPointType(data));
200 break;
201 case AbstractPointItem::EditLock:
202 combo->setCurrentIndex(point->IsEditLocked() ? 0 : 1);
203 break;
204 case AbstractPointItem::Ignored:
205 combo->setCurrentIndex(point->IsIgnored() ? 0 : 1);
206 break;
207 case AbstractPointItem::APrioriSPSource:
208 combo->setCurrentIndex(
209 (int) point->StringToSurfacePointSource(data));
210 break;
211 case AbstractPointItem::APrioriRadiusSource:
212 combo->setCurrentIndex(
213 (int) point->StringToRadiusSource(data));
214 break;
215 default:
216 break;
217 }
218
219 for (int i = combo->count() - 1; i >= 0; --i)
220 if (combo->itemText(i).toLower().startsWith(newData.toLower()))
221 combo->setCurrentIndex(i);
222 }
223 break;
224 default: {
225 QLineEdit *lineEdit = static_cast< QLineEdit * >(widget);
226 lineEdit->setText(newData);
227 }
228 }
229 }
230
231
232 void PointTableDelegate::saveData(QWidget *widget,
233 AbstractTreeItem *row, const TableColumn *col) const {
234 AbstractPointItem::Column column =
235 AbstractPointItem::getColumn(col->getTitle());
236
237 QString newData;
238
239 switch (column) {
240 case AbstractPointItem::PointType:
241 case AbstractPointItem::EditLock:
242 case AbstractPointItem::Ignored:
243 case AbstractPointItem::Reference:
244 case AbstractPointItem::APrioriSPSource:
245 case AbstractPointItem::APrioriRadiusSource: {
246 QComboBox *combo = static_cast< QComboBox * >(widget);
247 newData = combo->currentText();
248 break;
249 }
250 default: {
251 QLineEdit *lineEdit = static_cast< QLineEdit * >(widget);
252 newData = lineEdit->text();
253 }
254 }
255
256 QString warningText = PointTableModel::getPointWarningMessage(
257 row, col, newData);
258
259 bool changeData = true;
260
261 if (!warningText.isEmpty()) {
262 QMessageBox::StandardButton status = QMessageBox::warning(
263 NULL, "Change cell?", warningText, QMessageBox::Yes |
264 QMessageBox::No);
265
266 changeData = (status == QMessageBox::Yes);
267 }
268
269 if (changeData)
270 row->setData(col->getTitle(), newData);
271 }
272}
PointType
These are the valid 'types' of point.
static QString PointTypeToString(PointType type)
Obtain a string representation of a given PointType.
@ 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