27 #include "../../../common/StringUtils.h"
28 #include "../../../dataaccess/dataset/DataSet.h"
29 #include "../../../dataaccess/utils/Utils.h"
30 #include "../../../raster/Raster.h"
31 #include "../../../rp/Functions.h"
33 #include "ui_ComposeBandsWizardPageForm.h"
36 #include <QMessageBox>
41 : QWizardPage(parent),
42 m_ui(new Ui::ComposeBandsWizardPageForm)
47 m_ui->m_addToolButton->setIcon(QIcon::fromTheme(
"list-add"));
48 m_ui->m_removeToolButton->setIcon(QIcon::fromTheme(
"list-remove"));
58 this->setTitle(tr(
"Compose / Decompose Bands"));
59 this->setSubTitle(tr(
"Select the operation (Compose / Decompose) and set their specific parameters."));
74 m_layerList = layerList;
76 m_ui->m_composeTableWidget->setRowCount(0);
77 m_ui->m_decomposeTableWidget->setRowCount(0);
79 std::list<te::map::AbstractLayerPtr>::iterator it;
82 for(it = m_layerList.begin(); it!= m_layerList.end(); ++it)
87 std::auto_ptr<te::da::DataSet> ds = l->getData();
93 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
97 int newrow = m_ui->m_composeTableWidget->rowCount();
98 m_ui->m_composeTableWidget->insertRow(newrow);
101 QComboBox* layerCmbBox =
new QComboBox(
this);
103 connect(layerCmbBox, SIGNAL(activated(
int)),
this, SLOT(onLayerCmbActivated(
int)));
105 std::list<te::map::AbstractLayerPtr>::iterator itLayer;
110 for(itLayer = m_layerList.begin(); itLayer!= m_layerList.end(); ++itLayer)
114 layerCmbBox->addItem(lItem->getTitle().c_str(), QVariant::fromValue(lItem));
124 layerCmbBox->setCurrentIndex(curItem);
126 m_ui->m_composeTableWidget->setCellWidget(newrow, 1, layerCmbBox);
128 m_cmbMap.insert(std::map<QComboBox*, int>::value_type(layerCmbBox, newrow));
131 QComboBox* cmbBox =
new QComboBox(
this);
133 for(
unsigned int i = 0; i < inputRst->getNumberOfBands(); ++i)
135 cmbBox->addItem(QString::number(i));
138 m_ui->m_composeTableWidget->setCellWidget(newrow, 0, cmbBox);
144 if(!m_layerList.empty())
149 std::auto_ptr<te::da::DataSet> ds = l->getData();
151 m_ui->m_rasterLineEdit->setText(l->getTitle().c_str());
157 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
161 for(
unsigned int i = 0; i < inputRst->getNumberOfBands(); ++i)
163 int newrow = m_ui->m_decomposeTableWidget->rowCount();
164 m_ui->m_decomposeTableWidget->insertRow(newrow);
167 QString bName(tr(
"Band "));
168 bName.append(QString::number(i));
170 QTableWidgetItem* itemBand =
new QTableWidgetItem(bName);
171 itemBand->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable);
172 itemBand->setCheckState(Qt::Checked);
173 m_ui->m_decomposeTableWidget->setItem(newrow, 0, itemBand);
182 if(m_ui->m_tabWidget->currentIndex() == 0)
190 if(m_ui->m_tabWidget->currentIndex() == 1)
198 int rowCount = m_ui->m_composeTableWidget->rowCount();
200 for(
int i = 0; i < rowCount; ++i)
202 QComboBox* layerCmb = (QComboBox*)m_ui->m_composeTableWidget->cellWidget(i, 1);
204 int curIdx = layerCmb->currentIndex();
205 QVariant varLayer = layerCmb->itemData(curIdx, Qt::UserRole);
209 std::auto_ptr<te::da::DataSet> ds = layer->getData();
216 rasters.push_back(ds->getRaster(rpos).release());
219 QComboBox* bandCmb = (QComboBox*)m_ui->m_composeTableWidget->cellWidget(i, 0);
221 bands.push_back((
unsigned int)bandCmb->currentText().toInt());
225 int idx = m_ui->m_interpolatorComboBox->currentIndex();
234 std::auto_ptr<te::da::DataSet> ds = l->getData();
241 raster = ds->getRaster(rpos).release();
244 for(
int r = 0; r < m_ui->m_decomposeTableWidget->rowCount(); ++r)
246 if(m_ui->m_decomposeTableWidget->item(r, 0)->checkState() == Qt::Checked)
248 bands.push_back((
unsigned int)r);
255 int newrow = m_ui->m_composeTableWidget->rowCount();
256 m_ui->m_composeTableWidget->insertRow(newrow);
259 QComboBox* layerCmbBox =
new QComboBox(
this);
261 connect(layerCmbBox, SIGNAL(activated(
int)),
this, SLOT(onLayerCmbActivated(
int)));
263 std::list<te::map::AbstractLayerPtr>::iterator itLayer;
265 for(itLayer = m_layerList.begin(); itLayer!= m_layerList.end(); ++itLayer)
269 layerCmbBox->addItem(lItem->getTitle().c_str(), QVariant::fromValue(lItem));
272 m_ui->m_composeTableWidget->setCellWidget(newrow, 1, layerCmbBox);
274 m_cmbMap.insert(std::map<QComboBox*, int>::value_type(layerCmbBox, newrow));
278 QComboBox* cmbBox =
new QComboBox(
this);
280 m_ui->m_composeTableWidget->setCellWidget(newrow, 0, cmbBox);
286 std::auto_ptr<te::da::DataSet> ds = lFirst->getData();
292 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
296 for(
unsigned int i = 0; i < inputRst->getNumberOfBands(); ++i)
298 cmbBox->addItem(QString::number(i));
307 int currow = m_ui->m_composeTableWidget->currentRow();
308 m_ui->m_composeTableWidget->removeRow(currow);
313 QComboBox* cmb =
dynamic_cast<QComboBox*
>(sender());
315 QVariant varLayer = cmb->itemData(index, Qt::UserRole);
318 int row = m_cmbMap[cmb];
320 QComboBox* bandCmb = (QComboBox*)m_ui->m_composeTableWidget->cellWidget(row, 0);
325 std::auto_ptr<te::da::DataSet> ds = layer->getData();
331 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
335 for(
unsigned int i = 0; i < inputRst->getNumberOfBands(); ++i)
337 bandCmb->addItem(QString::number(i));
345 m_ui->m_interpolatorComboBox->clear();
Near neighborhood interpolation method.
std::auto_ptr< Ui::ComposeBandsWizardPageForm > m_ui
ComposeBandsWizardPage(QWidget *parent=0)
void onAddToolButtonClicked()
InterpolationMethod
Allowed interpolation methods.
InterpolationMethod Method
Allowed interpolation methods.
void setList(std::list< te::map::AbstractLayerPtr > &layerList)
Q_DECLARE_METATYPE(te::map::AbstractLayerPtr)
An abstract class for raster data strucutures.
void onLayerCmbActivated(int index)
void getComposeParameters(std::vector< const te::rst::Raster * > &rasters, std::vector< unsigned int > &bands, te::rst::Interpolator::Method &interpMethod)
Bicubic interpolation method.
void getDecomposeParameters(te::rst::Raster *&raster, std::vector< unsigned int > &bands)
Bilinear interpolation method.
void onRemoveToolButtonClicked()
This file defines a class for a Compose / Decompose Bands Wizard page.
TEDATAACCESSEXPORT std::size_t GetFirstPropertyPos(const te::da::DataSet *dataset, int datatype)
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
void fillInterpolatorTypes()
~ComposeBandsWizardPage()