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

U.S. Department of the Interior | U.S. Geological Survey
ISIS | Privacy & Disclaimers | Astrogeology Research Program
To contact us, please post comments and questions on the ISIS Support Center
File Modified: 07/12/2023 23:25:48