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

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 USGS Astrogeology Discussion Board
To report a bug, or suggest a feature go to: ISIS Github
File Modified: 07/13/2023 15:16:51