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