27 #include "../../../dataaccess/dataset/DataSet.h"
28 #include "../../../dataaccess/utils/Utils.h"
31 #include "ui_ArithmeticOpWizardPageForm.h"
34 #include <QApplication>
35 #include <QGridLayout>
36 #include <QMessageBox>
44 : QWizardPage(parent),
45 m_ui(new Ui::ArithmeticOpWizardPageForm)
51 this->setTitle(tr(
"Arithmetic Operations"));
52 this->setSubTitle(tr(
"Select the type of arithmetic operation and set their specific parameters."));
54 m_ui->m_valueLineEdit->setValidator(
new QDoubleValidator(
this));
55 m_ui->m_gainLineEdit->setValidator(
new QDoubleValidator(
this));
56 m_ui->m_offsetLineEdit->setValidator(
new QDoubleValidator(
this));
58 m_ui->m_addValueOpToolButton->setIcon(QIcon::fromTheme(
"list-add"));
59 m_ui->m_addRasterOpToolButton->setIcon(QIcon::fromTheme(
"list-add"));
60 m_ui->m_undoToolButton->setIcon(QIcon::fromTheme(
"edit-undo"));
61 m_ui->m_redoToolButton->setIcon(QIcon::fromTheme(
"edit-redo"));
62 m_ui->m_clearToolButton->setIcon(QIcon::fromTheme(
"edit-clear"));
63 m_ui->m_validateToolButton->setIcon(QIcon::fromTheme(
"check"));
67 m_ui->m_undoToolButton->setEnabled(
false);
68 m_ui->m_redoToolButton->setEnabled(
false);
70 m_ui->m_tabWidget->removeTab(1);
96 m_expressionHistory.clear();
107 m_layerList = layerList;
110 m_ui->m_layerComboBox->clear();
111 m_ui->m_layerAComboBox->clear();
112 m_ui->m_layerBComboBox->clear();
113 m_ui->m_rasterIdComboBox->clear();
115 std::list<te::map::AbstractLayerPtr>::iterator it = m_layerList.begin();
116 std::vector<std::size_t> bands;
120 while(it != m_layerList.end())
124 std::auto_ptr<te::da::DataSetType> dst = l->getSchema();
126 if(dst.get() && dst->hasRaster())
128 m_ui->m_layerComboBox->addItem(l->getTitle().c_str(), QVariant::fromValue(l));
129 m_ui->m_layerAComboBox->addItem(l->getTitle().c_str(), QVariant::fromValue(l));
130 m_ui->m_layerBComboBox->addItem(l->getTitle().c_str(), QVariant::fromValue(l));
132 m_ui->m_rasterIdComboBox->addItem(
"R" + QString::number(count));
140 layerComboBoxActivated(0);
141 layerAComboBoxActivated(0);
142 layerBComboBoxActivated(0);
149 if(m_ui->m_tabWidget->currentIndex() == 1)
153 else if(m_ui->m_op1RadioButton->isChecked())
155 else if(m_ui->m_op2RadioButton->isChecked())
157 else if(m_ui->m_op3RadioButton->isChecked())
159 else if(m_ui->m_op4RadioButton->isChecked())
161 else if(m_ui->m_op5RadioButton->isChecked())
163 else if(m_ui->m_op6RadioButton->isChecked())
172 int curIdx = m_ui->m_layerAComboBox->currentIndex();
173 QVariant varLayer = m_ui->m_layerAComboBox->itemData(curIdx, Qt::UserRole);
181 return m_ui->m_bandAComboBox->currentText().toInt();
186 int curIdx = m_ui->m_layerBComboBox->currentIndex();
187 QVariant varLayer = m_ui->m_layerBComboBox->itemData(curIdx, Qt::UserRole);
195 return m_ui->m_bandBComboBox->currentText().toInt();
202 if(!m_ui->m_gainLineEdit->text().isEmpty())
203 val = m_ui->m_gainLineEdit->text().toDouble();
212 if(!m_ui->m_offsetLineEdit->text().isEmpty())
213 val = m_ui->m_offsetLineEdit->text().toDouble();
220 return m_ui->m_normalizeCheckBox->isChecked();
225 return m_ui->m_expressionLineEdit->text().toLatin1().data();
230 getRasterBands(m_ui->m_layerComboBox, index, m_ui->m_bandComboBox);
232 m_ui->m_rasterIdComboBox->setCurrentIndex(index);
237 getRasterBands(m_ui->m_layerAComboBox, index, m_ui->m_bandAComboBox);
242 getRasterBands(m_ui->m_layerBComboBox, index, m_ui->m_bandBComboBox);
247 m_ui->m_expressionLineEdit->insert(
"( ");
249 updateExpressionHistory();
254 m_ui->m_expressionLineEdit->insert(
") ");
256 updateExpressionHistory();
261 m_ui->m_expressionLineEdit->insert(
"+ ");
263 updateExpressionHistory();
268 m_ui->m_expressionLineEdit->insert(
"- ");
270 updateExpressionHistory();
275 m_ui->m_expressionLineEdit->insert(
"* ");
277 updateExpressionHistory();
282 m_ui->m_expressionLineEdit->insert(
"/ ");
284 updateExpressionHistory();
289 m_ui->m_expressionLineEdit->insert(m_ui->m_valueLineEdit->text() +
" ");
291 updateExpressionHistory();
296 m_ui->m_expressionLineEdit->insert(m_ui->m_rasterIdComboBox->currentText() +
":" + m_ui->m_bandComboBox->currentText() +
" ");
298 updateExpressionHistory();
303 --m_expressionHistoryCounter;
305 if(m_expressionHistoryCounter >= (
int)m_expressionHistory.size() || m_expressionHistoryCounter < 0)
307 m_expressionHistoryCounter = 0;
309 m_expressionHistory.clear();
311 m_ui->m_expressionLineEdit->clear();
313 m_ui->m_undoToolButton->setEnabled(
false);
314 m_ui->m_redoToolButton->setEnabled(
false);
319 std::string expression = m_expressionHistory[m_expressionHistoryCounter];
321 m_ui->m_expressionLineEdit->setText(expression.c_str());
323 if(m_expressionHistoryCounter < 0)
324 m_ui->m_undoToolButton->setEnabled(
false);
326 m_ui->m_redoToolButton->setEnabled(
true);
331 ++m_expressionHistoryCounter;
333 if(m_expressionHistoryCounter >= (
int)m_expressionHistory.size() || m_expressionHistoryCounter < 0)
335 m_expressionHistoryCounter = (int)m_expressionHistory.size() - 1;
337 m_ui->m_redoToolButton->setEnabled(
false);
342 std::string expression = m_expressionHistory[m_expressionHistoryCounter];
344 m_ui->m_expressionLineEdit->setText(expression.c_str());
346 if(m_expressionHistoryCounter >= (
int)m_expressionHistory.size() - 1)
347 m_ui->m_redoToolButton->setEnabled(
false);
349 m_ui->m_undoToolButton->setEnabled(
true);
354 m_expressionHistoryCounter = 0;
356 m_expressionHistory.clear();
358 m_ui->m_expressionLineEdit->clear();
360 m_ui->m_undoToolButton->setEnabled(
false);
361 m_ui->m_redoToolButton->setEnabled(
false);
371 QVariant varLayer = layer->itemData(index, Qt::UserRole);
375 std::auto_ptr<te::da::DataSet> ds = l->getData();
377 std::auto_ptr<te::rst::Raster> rst = ds->getRaster(rpos);
384 for(std::size_t t = 0; t < rst->getNumberOfBands(); ++t)
385 band->addItem(QString::number(t));
391 m_expressionHistory.push_back(m_ui->m_expressionLineEdit->text().toLatin1().data());
393 m_ui->m_undoToolButton->setEnabled(
true);
394 m_ui->m_redoToolButton->setEnabled(
false);
396 m_expressionHistoryCounter = (int)m_expressionHistory.size() - 1;
void updateExpressionHistory()
void layerBComboBoxActivated(int index)
void minusToolButtonClicked()
void setList(std::list< te::map::AbstractLayerPtr > &layerList)
void redoToolButtonClicked()
This file defines a class for a ArithmeticOp Wizard page.
void validateToolButtonClicked()
std::string getUserDefinedExpression()
te::map::AbstractLayerPtr getLayerRasterA()
int m_expressionHistoryCounter
ArithmeticOpWizardPage(QWidget *parent=0)
void clearToolButtonClicked()
void plusToolButtonClicked()
A Qt dialog that allows users to run a arithmeticOp operation defined by RP module.
std::auto_ptr< Ui::ArithmeticOpWizardPageForm > m_ui
void multiToolButtonClicked()
te::map::AbstractLayerPtr getLayerRasterB()
void addValueOpToolButtonClicked()
void leftBracketToolButtonClicked()
Q_DECLARE_METATYPE(te::map::AbstractLayerPtr)
~ArithmeticOpWizardPage()
void layerComboBoxActivated(int index)
void layerAComboBoxActivated(int index)
void undoToolButtonClicked()
TEDATAACCESSEXPORT std::size_t GetFirstPropertyPos(const te::da::DataSet *dataset, int datatype)
void addRasterOpToolButtonClicked()
void rightBracketToolButtonClicked()
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
void getRasterBands(QComboBox *layer, int index, QComboBox *band)
void divToolButtonClicked()