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

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:23:21