SensorManagerDialog.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file terralib/qt/widgets/rp/SensorManagerDialog.cpp
22 
23  \brief A dialog used to manage Spectral Sensors.
24 */
25 
26 #include "../../af/ApplicationController.h"
27 
28 #include "MixtureModelWizard.h"
29 #include "MixtureModelWizardPage.h"
30 #include "SensorManagerDialog.h"
31 
32 #include <ui_SensorManagerDialogForm.h>
33 #include <QApplication>
34 #include <QMessageBox>
35 #include <QSettings>
36 #include <QString>
37 
38 #include <iostream>
39 
41  QDialog(parent, f),
42  m_ui(new Ui::SensorManagerDialogForm)
43 {
44  m_ui->setupUi(this);
45 
46  // Assign the edit/add/remove button icons
47  m_ui->m_addToolButton->setIcon(QIcon::fromTheme("list-add"));
48 
49  connect(m_ui->m_okPushButton, SIGNAL(clicked()), SLOT(onOkPushButtonClicked()));
50  connect(m_ui->m_cancelPushButton, SIGNAL(clicked()), SLOT(onCancelPushButtonClicked()));
51  connect(m_ui->m_searchedSensorLineEdit, SIGNAL(textChanged(const QString&)), SLOT(onSearchLineEditTextChanged(const QString&)));
52  connect(m_ui->m_addToolButton, SIGNAL(clicked()), SLOT(onAddToolButtonClicked()));
53  connect(m_ui->m_savePushButton, SIGNAL(clicked()), SLOT(onSavePushButtonClicked()));
54 
55  m_ui->m_helpPushButton->setPageReference("plugins/rp/rp_sensor.html");
56 
58 
59  m_edited = false;
60  m_modified = false;
61 }
62 
63 
65 {
66  delete m_ui;
67  m_modified = false;
68 }
69 
71 {
72  return m_sensorselected;
73 }
74 //
75 //const te::rp::SpectralSensorParams& te::qt::widgets::SensorManagerDialog::getSelectedSensorParams() const
76 //{
77 // return m_sensorselectedparams;
78 //}
79 
81 {
82  QList<QTableWidgetItem*> items = m_ui->m_SensorTableWidget->findItems(text, Qt::MatchContains | Qt::MatchRecursive);
83  items.append(m_ui->m_SensorTableWidget->findItems(text, Qt::MatchContains | Qt::MatchRecursive));
84  filter(items);
85 }
86 
87 
88 void te::qt::widgets::SensorManagerDialog::filter(const QList<QTableWidgetItem*>& items)
89 {
90  for(int i = 0; i < m_ui->m_SensorTableWidget->rowCount(); ++i)
91  {
92  QTableWidgetItem* sensor = m_ui->m_SensorTableWidget->item(i,0);
93  bool sel = items.indexOf(sensor) == -1;
94  m_ui->m_SensorTableWidget->setRowHidden(i, sel);
95  }
96  update();
97 }
98 
99 
101 {
102  int r = item->row();
103  QTableWidgetSelectionRange selrow(r, 0, r, 3);
104  m_ui->m_SensorTableWidget->setRangeSelected(selrow, true);
105 }
106 
108 {
109  try
110  {
111  int r = item->row();
112  if (m_ui->m_SensorTableWidget->item(r, 2)->text().size() && m_ui->m_SensorTableWidget->item(r, 3)->text().size())
113  {
114  double lower = m_ui->m_SensorTableWidget->item(r, 2)->text().toDouble();
115  double upper = m_ui->m_SensorTableWidget->item(r, 3)->text().toDouble();
116  double min = m_ui->m_SensorTableWidget->item(r, 4)->text().toDouble();
117  double max = m_ui->m_SensorTableWidget->item(r, 5)->text().toDouble();
118  if (upper <= lower)
119  {
120  QMessageBox::warning(this, "", tr("Invalid limits"));
121  return;
122  }
123 
124  if (max <= min)
125  {
126  QMessageBox::warning(this, "", tr("Invalid digital limits"));
127  return;
128  }
129 
130  std::string s = m_ui->m_SensorTableWidget->item(r, 0)->text().toUtf8().data();
131  std::map<std::string, te::rp::SpectralSensorParams > ::iterator it = m_Params.find(s);
132  if (it != m_Params.end())
133  {
134  it->second.m_band = m_ui->m_SensorTableWidget->item(r, 1)->text().toInt();
135  if (it->second.m_lower != lower)
136  {
137  it->second.m_lower = lower;
138  m_edited = true;
139  m_modified = true;
140  }
141  if (it->second.m_upper != upper)
142  {
143  it->second.m_upper = upper;
144  m_edited = true;
145  m_modified = true;
146  }
147  if (it->second.m_min != min)
148  {
149  it->second.m_min = min;
150  m_edited = true;
151  m_modified = true;
152  }
153  if (it->second.m_max != max)
154  {
155  it->second.m_max = max;
156  m_edited = true;
157  m_modified = true;
158  }
159  }
160  else
161  {
162  m_edited = true;
163  m_modified = true;
164  }
165  }
166  }
167  catch (const std::exception&)
168  {
169  std::cout << std::endl << "Invalid Value" << std::endl;
170  }
171 
172 }
173 
175 {
176  if (m_edited)
177  {
178  int reply = QMessageBox::question(nullptr, tr("Mixture Model"), tr("There are spectral sensors edited. Save?"), QMessageBox::No, QMessageBox::Yes);
179  if (reply == QMessageBox::Yes)
180  {
182  }
183  }
184 
185  int i = m_ui->m_SensorTableWidget->currentRow();
186  QTableWidgetItem* sensor = m_ui->m_SensorTableWidget->item(i, 0);
187  if (!sensor)
188  {
189  reject();
190  return;
191  }
192 
193  m_sensorselected = sensor->text();
194  accept();
195 }
196 
198 {
199  m_sensorselected.clear();
200  reject();
201 }
202 
204 {
205  QMessageBox::critical(this, "", tr("Not implemented yet!"));
206 }
207 
209 {
210  QList<QTableWidgetItem*> items = m_ui->m_SensorTableWidget->findItems(m_ui->m_searchedSensorLineEdit->text(), Qt::MatchContains | Qt::MatchRecursive);
211  if (items.size())
212  {
213  QMessageBox::warning(this, "", tr("Sensor already exists!"));
214  return;
215  }
216 
217  m_ui->m_SensorTableWidget->disconnect(SIGNAL(itemChanged(QTableWidgetItem*)));
218 
219  int newrow = 0;
220 
221  m_ui->m_SensorTableWidget->insertRow(newrow);
222 
223  QTableWidgetItem *item0 = new QTableWidgetItem(m_ui->m_searchedSensorLineEdit->text());
224  QTableWidgetItem *item1 = new QTableWidgetItem("");
225  QTableWidgetItem *item2 = new QTableWidgetItem("");
226  QTableWidgetItem *item3 = new QTableWidgetItem("");
227  QTableWidgetItem *item4 = new QTableWidgetItem("");
228  QTableWidgetItem *item5 = new QTableWidgetItem("");
229 
230  m_ui->m_SensorTableWidget->setItem(newrow, 0, item0);
231  m_ui->m_SensorTableWidget->setItem(newrow, 1, item1);
232  m_ui->m_SensorTableWidget->setItem(newrow, 2, item2);
233  m_ui->m_SensorTableWidget->setItem(newrow, 3, item3);
234  m_ui->m_SensorTableWidget->setItem(newrow, 4, item4);
235  m_ui->m_SensorTableWidget->setItem(newrow, 5, item5);
236 #if (QT_VERSION >= 0x050000)
237  m_ui->m_SensorTableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
238 #else
239  m_ui->m_SensorTableWidget->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents);
240 #endif
241 
242  m_Params.insert(std::pair<std::string, te::rp::SpectralSensorParams>(m_ui->m_searchedSensorLineEdit->text().toUtf8().data(), te::rp::SpectralSensorParams(0,0,0,0,0)));
243 
244  connect(m_ui->m_SensorTableWidget, SIGNAL(itemChanged(QTableWidgetItem*)), SLOT(onSensorTableWidgetItemChanged(QTableWidgetItem*)));
245 
246 }
247 
249 {
251 
252  m_edited = false;
253 }
254 
256 {
257  // define sensor information
259 
260  int newrow = 0;
261  m_ui->m_SensorTableWidget->setRowCount(newrow);
262 
263  for (std::map<std::string, te::rp::SpectralSensorParams > ::iterator it = m_Params.begin(); it != m_Params.end(); ++it)
264  {
265  m_ui->m_SensorTableWidget->insertRow(newrow);
266 
267  QTableWidgetItem *item0 = new QTableWidgetItem(it->first.c_str());
268  QTableWidgetItem *item1 = new QTableWidgetItem();
269  QTableWidgetItem *item2 = new QTableWidgetItem();
270  QTableWidgetItem *item3 = new QTableWidgetItem();
271  QTableWidgetItem *item4 = new QTableWidgetItem();
272  QTableWidgetItem *item5 = new QTableWidgetItem();
273  item1->setData(Qt::DisplayRole, it->second.m_band);
274  item2->setData(Qt::DisplayRole, it->second.m_lower);
275  item3->setData(Qt::DisplayRole, it->second.m_upper);
276  item4->setData(Qt::DisplayRole, it->second.m_min);
277  item5->setData(Qt::DisplayRole, it->second.m_max);
278 
279  m_ui->m_SensorTableWidget->setItem(newrow, 0, item0);
280  m_ui->m_SensorTableWidget->setItem(newrow, 1, item1);
281  m_ui->m_SensorTableWidget->setItem(newrow, 2, item2);
282  m_ui->m_SensorTableWidget->setItem(newrow, 3, item3);
283  m_ui->m_SensorTableWidget->setItem(newrow, 4, item4);
284  m_ui->m_SensorTableWidget->setItem(newrow, 5, item5);
285 #if (QT_VERSION >= 0x050000)
286  m_ui->m_SensorTableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
287 #else
288  m_ui->m_SensorTableWidget->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents);
289 #endif
290 
291  newrow++;
292  }
293 
294  // Signals & slots
295  connect(m_ui->m_SensorTableWidget, SIGNAL(itemChanged(QTableWidgetItem*)), SLOT(onSensorTableWidgetItemChanged(QTableWidgetItem*)));
296 
297 }
This file defines a class for a MixtureModel Wizard page.
void onSensorTableWidgetItemChanged(QTableWidgetItem *)
void SaveSensorParams(std::map< std::string, SpectralSensorParams > &params)
Saves in SpectralSensor.json file the spectral sensors parameters.
std::map< std::string, SpectralSensorParams > getSensorParams()
Returns a map with spectral sensors parameters defined in SpectralSensor.json file.
Ui::SensorManagerDialogForm * m_ui
Dialog form.
A Qt dialog that allows users to run a mixture model operation defined by RP module.
void onSearchLineEditTextChanged(const QString &text)
bool m_edited
Flag to indicate if sensors were edited.
const QString & getSelectedSensor() const
Returns the selected sensor name.
SensorManagerDialog(QWidget *parent=0, Qt::WindowFlags f=0)
Constructs a basic dialog which is a child of parent, with widget flags set to f. ...
std::map< std::string, te::rp::SpectralSensorParams > m_Params
QString m_sensorselected
Selected sensor name.
void onSensorTableWidgetItemClicked(QTableWidgetItem *)
A dialog used to manage Spectral Sensors.
void filter(const QList< QTableWidgetItem * > &items)