27 #include "../../../common/StringUtils.h" 
   28 #include "../../../dataaccess/dataset/DataSet.h" 
   29 #include "../../../dataaccess/utils/Utils.h" 
   30 #include "../../../raster/Raster.h" 
   34 #include "ui_ContrastWizardPageForm.h" 
   37 #include <QGridLayout> 
   38 #include <QMessageBox> 
   41 #include <boost/lexical_cast.hpp> 
   47   : QWizardPage(parent),
 
   48     m_ui(new 
Ui::ContrastWizardPageForm),
 
   57   QGridLayout* displayLayout = 
new QGridLayout(
m_ui->m_displayWidget);
 
   62   displayLayout->setContentsMargins(0,0,0,0);
 
   65   QGridLayout* histogramLayout = 
new QGridLayout(
m_ui->m_histWidget);
 
   68   histogramLayout->setContentsMargins(0,0,0,0);
 
   72   connect(
m_ui->m_bandTableWidget, SIGNAL(cellClicked(
int, 
int)), 
this, SLOT(
onCellClicked(
int, 
int)));
 
   80   this->setTitle(tr(
"Contrast"));
 
   81   this->setSubTitle(tr(
"Select the type of contrast and set their specific parameters."));
 
   92   int nBands = m_ui->m_bandTableWidget->rowCount();
 
   94   for(
int i = 0; i < nBands; ++i)
 
   96     QTableWidgetItem* item =  m_ui->m_bandTableWidget->item(i, 0);
 
   98     if(item->checkState() == Qt::Checked)
 
  111   std::list<te::map::AbstractLayerPtr> list;
 
  113   list.push_back(m_layer);
 
  115   m_navigator->set(m_layer, 
true);
 
  128   int index = m_ui->m_contrastTypeComboBox->currentIndex();
 
  129   int contrastType = m_ui->m_contrastTypeComboBox->itemData(index).toInt();
 
  130   int nBands = m_ui->m_bandTableWidget->rowCount();
 
  138     for(
int i = 0; i < nBands; ++i)
 
  140       QTableWidgetItem* item =  m_ui->m_bandTableWidget->item(i, 0);
 
  142       if(item->checkState() == Qt::Checked)
 
  144         QString valueMin = m_ui->m_bandTableWidget->item(i, 1)->text();
 
  145         algoInputParams.
m_lCMinInput.push_back(valueMin.toDouble());
 
  147         QString valueMax = m_ui->m_bandTableWidget->item(i, 2)->text();
 
  148         algoInputParams.
m_lCMaxInput.push_back(valueMax.toDouble());
 
  156     for(
int i = 0; i < nBands; ++i)
 
  158       QTableWidgetItem* item =  m_ui->m_bandTableWidget->item(i, 0);
 
  160       if(item->checkState() == Qt::Checked)
 
  162         QString valueMax = m_ui->m_bandTableWidget->item(i, 1)->text();
 
  163         algoInputParams.
m_hECMaxInput.push_back(valueMax.toDouble());
 
  171     for(
int i = 0; i < nBands; ++i)
 
  173       QTableWidgetItem* item =  m_ui->m_bandTableWidget->item(i, 0);
 
  175       if(item->checkState() == Qt::Checked)
 
  177         QString valueMean = m_ui->m_bandTableWidget->item(i, 1)->text();
 
  180         QString valueStdDev = m_ui->m_bandTableWidget->item(i, 2)->text();
 
  189     for(
int i = 0; i < nBands; ++i)
 
  191       QTableWidgetItem* item =  m_ui->m_bandTableWidget->item(i, 0);
 
  193       if(item->checkState() == Qt::Checked)
 
  195         QString valueMin = m_ui->m_bandTableWidget->item(i, 1)->text();
 
  198         QString valueMax = m_ui->m_bandTableWidget->item(i, 2)->text();
 
  207     for(
int i = 0; i < nBands; ++i)
 
  209       QTableWidgetItem* item =  m_ui->m_bandTableWidget->item(i, 0);
 
  211       if(item->checkState() == Qt::Checked)
 
  213         QString valueMin = m_ui->m_bandTableWidget->item(i, 1)->text();
 
  216         QString valueMax = m_ui->m_bandTableWidget->item(i, 2)->text();
 
  225     for(
int i = 0; i < nBands; ++i)
 
  227       QTableWidgetItem* item =  m_ui->m_bandTableWidget->item(i, 0);
 
  229       if(item->checkState() == Qt::Checked)
 
  231         QString valueMin = m_ui->m_bandTableWidget->item(i, 1)->text();
 
  234         QString valueMax = m_ui->m_bandTableWidget->item(i, 2)->text();
 
  244   for(
int i = 0; i < nBands; ++i)
 
  246     QTableWidgetItem* item =  m_ui->m_bandTableWidget->item(i, 0);
 
  248     if(item->checkState() == Qt::Checked)
 
  254   return algoInputParams;
 
  259   QApplication::setOverrideCursor(Qt::WaitCursor);
 
  271   std::map<std::string, std::string> rinfo;
 
  272   rinfo[
"MEM_RASTER_NROWS"] = boost::lexical_cast<std::string>(inputRst->
getNumberOfRows());
 
  273   rinfo[
"MEM_RASTER_NCOLS"] = boost::lexical_cast<std::string>(inputRst->
getNumberOfColumns());
 
  274   rinfo[
"MEM_RASTER_DATATYPE"] = boost::lexical_cast<std::string>(inputRst->
getBandDataType(0));
 
  275   rinfo[
"MEM_RASTER_NBANDS"] = boost::lexical_cast<std::string>(inputRst->
getNumberOfBands());
 
  285     if(algorithmInstance.
initialize(algoInputParams))
 
  287       if(algorithmInstance.
execute(algoOutputParams))
 
  300     QMessageBox::warning(
this, tr(
"Warning"), tr(
"Constrast error."));
 
  303   QApplication::restoreOverrideCursor();
 
  308   m_ui->m_contrastTypeComboBox->clear();
 
  321   assert(m_layer.get());
 
  324   std::auto_ptr<te::da::DataSet> ds = m_layer->getData();
 
  330     std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
 
  334       for(
unsigned int i = 0; i < inputRst->getNumberOfBands(); ++i)
 
  336         m_ui->m_bandTableWidget->setRowCount(0);
 
  339         for(
unsigned b = 0 ; b < inputRst->getNumberOfBands(); b++)
 
  341           int newrow = m_ui->m_bandTableWidget->rowCount();
 
  342           m_ui->m_bandTableWidget->insertRow(newrow);
 
  344           QString bName(tr(
"Band "));
 
  345           bName.append(QString::number(b));
 
  347           QTableWidgetItem* itemBand = 
new QTableWidgetItem(bName);
 
  348           itemBand->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
 
  349           itemBand->setCheckState(Qt::Checked);
 
  350           m_ui->m_bandTableWidget->setItem(newrow, 0, itemBand);
 
  357   m_ui->m_bandTableWidget->resizeColumnsToContents();
 
  358 #if (QT_VERSION >= 0x050000) 
  359   m_ui->m_bandTableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
 
  361   m_ui->m_bandTableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
 
  364   onContrastTypeComboBoxActivated(m_ui->m_contrastTypeComboBox->currentIndex());
 
  369   int contrastType = m_ui->m_contrastTypeComboBox->itemData(index).toInt();
 
  378     if(m_ui->m_bandTableWidget->horizontalHeaderItem(1) && m_ui->m_bandTableWidget->horizontalHeaderItem(1)->text() == tr(
"Minimum") &&
 
  379        m_ui->m_bandTableWidget->horizontalHeaderItem(2) && m_ui->m_bandTableWidget->horizontalHeaderItem(2)->text() == tr(
"Maximum"))
 
  385       list.append(tr(
"Band"));
 
  386       list.append(tr(
"Minimum"));
 
  387       list.append(tr(
"Maximum"));
 
  389       m_ui->m_bandTableWidget->setColumnCount(3);
 
  390       m_ui->m_bandTableWidget->setHorizontalHeaderLabels(list);
 
  392       int nBands = m_ui->m_bandTableWidget->rowCount();
 
  394       for(
int i = 0; i < nBands; ++i)
 
  396         QTableWidgetItem* itemMin = 
new QTableWidgetItem(
"0");
 
  397         itemMin->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable);
 
  398         m_ui->m_bandTableWidget->setItem(i, 1, itemMin);
 
  400         QTableWidgetItem* itemMax = 
new QTableWidgetItem(
"255");
 
  401         itemMax->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable);
 
  402         m_ui->m_bandTableWidget->setItem(i, 2, itemMax);
 
  406     m_histogramWidget->setMinimumValueEnabled(
true);
 
  407     m_histogramWidget->setMaximumValueEnabled(
true);
 
  409     m_histogramWidget->updateMinimumValueLabel(tr(
"Minimum"));
 
  410     m_histogramWidget->updateMaximumValueLabel(tr(
"Maximum"));
 
  412     m_histogramWidget->updateMinimumValueLine(0, 
false);
 
  413     m_histogramWidget->updateMaximumValueLine(255, 
false);
 
  415     m_ui->m_tipLabel->setText(tr(
"Use left button to set minimum value and right button to define maximum value over the histogram."));
 
  420     list.append(tr(
"Band"));
 
  421     list.append(tr(
"Maximum"));
 
  423     m_ui->m_bandTableWidget->setColumnCount(2);
 
  424     m_ui->m_bandTableWidget->setHorizontalHeaderLabels(list);
 
  426     int nBands = m_ui->m_bandTableWidget->rowCount();
 
  428     for(
int i = 0; i < nBands; ++i)
 
  430       QTableWidgetItem* itemMax = 
new QTableWidgetItem(
"255");
 
  431       itemMax->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable);
 
  432       m_ui->m_bandTableWidget->setItem(i, 1, itemMax);
 
  435     m_histogramWidget->setMinimumValueEnabled(
true);
 
  436     m_histogramWidget->setMaximumValueEnabled(
false);
 
  438     m_histogramWidget->updateMinimumValueLabel(tr(
"Maximum"));
 
  440     m_histogramWidget->updateMinimumValueLine(255, 
false);
 
  442     m_ui->m_tipLabel->setText(tr(
"Use left button to set maximum value over the histogram."));
 
  447     list.append(tr(
"Band"));
 
  448     list.append(tr(
"Mean"));
 
  449     list.append(tr(
"Std Dev"));
 
  451     m_ui->m_bandTableWidget->setColumnCount(3);
 
  452     m_ui->m_bandTableWidget->setHorizontalHeaderLabels(list);
 
  454     int nBands = m_ui->m_bandTableWidget->rowCount();
 
  456     for(
int i = 0; i < nBands; ++i)
 
  458       QTableWidgetItem* itemMean = 
new QTableWidgetItem(
"127");
 
  459       itemMean->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable);
 
  460       m_ui->m_bandTableWidget->setItem(i, 1, itemMean);
 
  462       QTableWidgetItem* itemStdDev = 
new QTableWidgetItem(
"50");
 
  463       itemStdDev->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable);
 
  464       m_ui->m_bandTableWidget->setItem(i, 2, itemStdDev);
 
  467     m_histogramWidget->setMinimumValueEnabled(
true);
 
  468     m_histogramWidget->setMaximumValueEnabled(
true);
 
  470     m_histogramWidget->updateMinimumValueLabel(tr(
"Mean"));
 
  471     m_histogramWidget->updateMaximumValueLabel(tr(
"Std Dev"));
 
  473     m_histogramWidget->updateMinimumValueLine(127, 
false);
 
  474     m_histogramWidget->updateMaximumValueLine(50, 
false);
 
  476     m_ui->m_tipLabel->setText(tr(
"Use left button to set Mean value and right button to define Std Dev value over the histogram."));
 
  481     list.append(tr(
"Band"));
 
  483     m_ui->m_bandTableWidget->setColumnCount(1);
 
  484     m_ui->m_bandTableWidget->setHorizontalHeaderLabels(list);
 
  486     m_histogramWidget->setMinimumValueEnabled(
false);
 
  487     m_histogramWidget->setMaximumValueEnabled(
false);
 
  489     m_ui->m_tipLabel->setText(tr(
""));
 
  494   m_ui->m_bandTableWidget->resizeColumnsToContents();
 
  495 #if (QT_VERSION >= 0x050000) 
  496   m_ui->m_bandTableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
 
  498   m_ui->m_bandTableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
 
  504   QTableWidgetItem* item =  m_ui->m_bandTableWidget->item(row, 0);
 
  506   if(item->checkState() == Qt::Checked)
 
  512   int index = m_ui->m_contrastTypeComboBox->currentIndex();
 
  514   int contrastType = m_ui->m_contrastTypeComboBox->itemData(index).toInt();
 
  521       m_ui->m_bandTableWidget->item(band, 1)->setText(QString::number(value));
 
  522       m_ui->m_bandTableWidget->setCurrentCell(band, 1);
 
  524       m_histogramWidget->updateMinimumValueLine(value, 
true);
 
  528     m_ui->m_bandTableWidget->item(band, 1)->setText(QString::number(value));
 
  529     m_ui->m_bandTableWidget->setCurrentCell(band, 1);
 
  531     m_histogramWidget->updateMinimumValueLine(value, 
true);
 
  535     m_ui->m_bandTableWidget->item(band, 1)->setText(QString::number(value));
 
  536     m_ui->m_bandTableWidget->setCurrentCell(band, 1);
 
  538     m_histogramWidget->updateMinimumValueLine(value, 
true);
 
  548   int index = m_ui->m_contrastTypeComboBox->currentIndex();
 
  550   int contrastType = m_ui->m_contrastTypeComboBox->itemData(index).toInt();
 
  557     m_ui->m_bandTableWidget->item(band, 2)->setText(QString::number(value));
 
  558     m_ui->m_bandTableWidget->setCurrentCell(band, 2);
 
  560     m_histogramWidget->updateMaximumValueLine(value, 
true);
 
  564     if(!m_ui->m_bandTableWidget->item(band, 1)->text().isEmpty())
 
  566       double mean = m_ui->m_bandTableWidget->item(band, 1)->text().toDouble();
 
  568       double stdDev = std::abs(mean - (
double)value); 
 
  570       m_ui->m_bandTableWidget->item(band, 2)->setText(QString::number(stdDev));
 
  571       m_ui->m_bandTableWidget->setCurrentCell(band, 2);
 
  573       m_histogramWidget->updateMaximumValueLine(value, 
true);
 
  586   m_histogramWidget->setInputRaster(inputRst);
 
  595   for(
int i = 0; i <= m_ui->m_bandTableWidget->currentRow(); ++i)
 
  597     QTableWidgetItem* item =  m_ui->m_bandTableWidget->item(i, 0);
 
  599     if(item->checkState() == Qt::Checked)
 
  608   int index = m_ui->m_contrastTypeComboBox->currentIndex();
 
  610   int contrastType = m_ui->m_contrastTypeComboBox->itemData(index).toInt();
 
  617     int min = m_ui->m_bandTableWidget->item(bandIdx, 1)->text().toInt();
 
  618     int max = m_ui->m_bandTableWidget->item(bandIdx, 2)->text().toInt();
 
  620     m_histogramWidget->updateMinimumValueLine(min, 
false);
 
  621     m_histogramWidget->updateMaximumValueLine(max, 
false);
 
  625     int min = m_ui->m_bandTableWidget->item(bandIdx, 1)->text().toInt();
 
  627     m_histogramWidget->updateMinimumValueLine(min, 
false);
 
  631     int min = m_ui->m_bandTableWidget->item(bandIdx, 1)->text().toInt();
 
  632     int max = m_ui->m_bandTableWidget->item(bandIdx, 2)->text().toInt();
 
  634     m_histogramWidget->updateMinimumValueLine(min, 
false);
 
  635     m_histogramWidget->updateMaximumValueLine(max, 
false);
 
  638   m_histogramWidget->drawHistogram(bandIdx);
 
std::auto_ptr< te::qt::widgets::RasterHistogramWidget > m_histogramWidget
te::map::AbstractLayerPtr get()
ContrastWizardPage(QWidget *parent=0)
te::rst::Raster * m_outRasterPtr
A pointer to a valid initiated raster instance where the result must be written, leave NULL to create...
void onMinValueSelected(int value, int band)
unsigned int getNumberOfColumns() const 
Returns the raster number of columns. 
void set(te::map::AbstractLayerPtr layer)
This method is used to set the selected layer for contrast operation. 
te::rp::Contrast::InputParameters getInputParams()
void onCellClicked(int row, int column)
std::auto_ptr< Ui::ContrastWizardPageForm > m_ui
An abstract class for raster data strucutures. 
unsigned int getNumberOfRows() const 
Returns the raster number of rows. 
virtual std::size_t getNumberOfBands() const =0
Returns the number of bands (dimension of cells attribute values) in the raster. 
std::auto_ptr< te::qt::widgets::RasterNavigatorWidget > m_navigator
std::auto_ptr< te::rst::Raster > m_createdOutRasterPtr
A pointer to the created output raster instance, or an empty pointer empty if the result must be writ...
This file defines a class for a Contrast Wizard page. 
bool initialize(const AlgorithmInputParameters &inputParams)
Initialize the algorithm instance making it ready for execution. 
bool execute(AlgorithmOutputParameters &outputParams)
Executes the algorithm using the supplied parameters. 
void onMaxValueSelected(int value, int band)
std::string m_createdOutRasterDSType
Output raster data source type (as described in te::raster::RasterFactory ), leave empty if the resul...
TEDATAACCESSEXPORT std::size_t GetFirstPropertyPos(const te::da::DataSet *dataset, int datatype)
Contrast output parameters. 
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
std::map< std::string, std::string > m_createdOutRasterInfo
The necessary information to create the raster (as described in te::raster::RasterFactory), leave empty if the result must be written to the raster pointed m_outRasterPtr. 
virtual int getBandDataType(std::size_t i) const =0
Returns the data type in a particular band (or dimension). 
void onContrastTypeComboBoxActivated(int index)