27 #include "../../common/Logger.h"
28 #include "../../common/progress/ProgressManager.h"
29 #include "../../common/Translator.h"
30 #include "../../common/STLUtils.h"
31 #include "../../dataaccess/dataset/DataSetType.h"
32 #include "../../dataaccess/dataset/ObjectIdSet.h"
33 #include "../../dataaccess/datasource/DataSourceCapabilities.h"
34 #include "../../dataaccess/datasource/DataSourceInfo.h"
35 #include "../../dataaccess/datasource/DataSourceInfoManager.h"
36 #include "../../dataaccess/datasource/DataSourceFactory.h"
37 #include "../../dataaccess/datasource/DataSourceManager.h"
38 #include "../../dataaccess/utils/Utils.h"
39 #include "../../datatype/Enums.h"
40 #include "../../datatype/Property.h"
41 #include "../../maptools/AbstractLayer.h"
42 #include "../../qt/af/Utils.h"
43 #include "../../qt/widgets/datasource/selector/DataSourceSelectorDialog.h"
44 #include "../../qt/widgets/layer/utils/DataSet2Layer.h"
45 #include "../../qt/widgets/progress/ProgressViewerDialog.h"
46 #include "../../statistics/core/Utils.h"
47 #include "../Config.h"
48 #include "../Exception.h"
50 #include "../AggregationMemory.h"
51 #include "../AggregationOp.h"
52 #include "../AggregationQuery.h"
53 #include "ui_AggregationDialogForm.h"
57 #include <QFileDialog>
59 #include <QListWidget>
60 #include <QListWidgetItem>
61 #include <QMessageBox>
62 #include <QTreeWidget>
65 #include <boost/algorithm/string.hpp>
66 #include <boost/filesystem.hpp>
67 #include <boost/uuid/random_generator.hpp>
68 #include <boost/uuid/uuid_io.hpp>
72 m_ui(new
Ui::AggregationDialogForm),
80 m_ui->m_outputStatisticsGroupBox->setVisible(
false);
83 m_ui->m_imgLabel->setPixmap(QIcon::fromTheme(
"vp-aggregation-hint").pixmap(112,48));
84 m_ui->m_targetDatasourceToolButton->setIcon(QIcon::fromTheme(
"datasource"));
101 m_ui->m_helpPushButton->setNameSpace(
"dpi.inpe.br.plugins");
102 m_ui->m_helpPushButton->setPageReference(
"plugins/vp/vp_aggregation.html");
105 m_ui->m_newLayerNameLineEdit->setEnabled(
true);
117 std::list<te::map::AbstractLayerPtr>::iterator it = m_layers.begin();
119 while (it != m_layers.end())
121 std::auto_ptr<te::da::DataSetType> dsType = it->get()->getSchema();
122 if (dsType->hasGeom())
123 m_ui->m_layersComboBox->addItem(QString(it->get()->getTitle().c_str()), QVariant(it->get()->getId().c_str()));
131 std::auto_ptr<te::da::DataSetType> dsType = selectedLayer->getSchema();
132 if (dsType->hasGeom())
133 m_ui->m_layersComboBox->addItem(QString(selectedLayer->getTitle().c_str()), QVariant(selectedLayer->getId().c_str()));
135 std::list<te::map::AbstractLayerPtr>::iterator it = m_layers.begin();
137 while (it != m_layers.end())
139 if (*it != selectedLayer)
141 std::auto_ptr<te::da::DataSetType> dsType = it->get()->getSchema();
142 if (dsType->hasGeom())
143 m_ui->m_layersComboBox->addItem(QString(it->get()->getTitle().c_str()), QVariant(it->get()->getId().c_str()));
152 std::map<te::dt::Property*, std::vector<te::stat::StatisticalSummary> > outputStatisticalSummary;
154 QList<QListWidgetItem*> itemList = m_ui->m_outputListWidget->selectedItems();
157 std::map<std::string, std::vector<te::stat::StatisticalSummary> > propname_stat;
158 std::map<std::string, std::vector<te::stat::StatisticalSummary> >::iterator it;
160 for(
int i = 0; i < itemList.size(); ++i)
162 std::vector<std::string> tokens;
164 std::string auxItem = itemList[i]->text().toStdString();
166 boost::split(tokens, auxItem, boost::is_any_of(
":"));
170 pname.erase(pname.end() - 1);
172 it = propname_stat.find(pname);
173 if (it != propname_stat.end())
174 it->second.push_back(enumStatisticalSummary);
177 std::vector<te::stat::StatisticalSummary> nvec;
178 nvec.push_back(enumStatisticalSummary);
179 propname_stat.insert(std::make_pair(pname, nvec));
184 it = propname_stat.begin();
185 while (it != propname_stat.end())
188 outputStatisticalSummary.insert(std::make_pair(prop,it->second));
192 return outputStatisticalSummary;
198 if(propertyName ==
"")
201 for(std::size_t i = 0; i < m_properties.size(); ++i)
203 if(propertyName == m_properties[i]->getName())
205 selProperty = m_properties[i];
214 std::vector<te::dt::Property*> selProperties;
216 for(
int i = 0; i != m_ui->m_propertieslistWidget->count(); ++i)
218 if(m_ui->m_propertieslistWidget->isItemSelected(m_ui->m_propertieslistWidget->item(i)))
220 selProperties.push_back(m_properties[i]);
224 return selProperties;
234 m_ui->m_selectAllComboBox->addItem(
"");
250 m_ui->m_rejectAllComboBox->addItem(
"");
287 QStringList propertyList;
290 m_ui->m_selectAllComboBox->setCurrentIndex(0);
291 m_ui->m_rejectAllComboBox->setCurrentIndex(0);
292 m_ui->m_outputListWidget->clear();
298 if(dsCapabilities.supportsPreparedQueryAPI() && dsCapabilities.getQueryCapabilities().supportsSpatialSQLDialect())
300 for(
size_t i=0; i < properties.size(); ++i)
302 propertyType = properties[i]->getType();
307 QListWidgetItem* item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::MIN_VALUE].c_str());
309 m_ui->m_outputListWidget->addItem(item);
311 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::MAX_VALUE].c_str());
313 m_ui->m_outputListWidget->addItem(item);
315 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::COUNT].c_str());
317 m_ui->m_outputListWidget->addItem(item);
319 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::VALID_COUNT].c_str());
321 m_ui->m_outputListWidget->addItem(item);
323 item =
new QListWidgetItem(
"");
324 m_ui->m_outputListWidget->addItem(item);
328 QListWidgetItem* item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::MIN_VALUE].c_str());
330 m_ui->m_outputListWidget->addItem(item);
332 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::MAX_VALUE].c_str());
334 m_ui->m_outputListWidget->addItem(item);
336 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::MEAN].c_str());
338 m_ui->m_outputListWidget->addItem(item);
340 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::SUM].c_str());
342 m_ui->m_outputListWidget->addItem(item);
344 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::COUNT].c_str());
346 m_ui->m_outputListWidget->addItem(item);
348 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::VALID_COUNT].c_str());
350 m_ui->m_outputListWidget->addItem(item);
352 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::STANDARD_DEVIATION].c_str());
354 m_ui->m_outputListWidget->addItem(item);
356 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::VARIANCE].c_str());
358 m_ui->m_outputListWidget->addItem(item);
360 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::AMPLITUDE].c_str());
362 m_ui->m_outputListWidget->addItem(item);
364 item =
new QListWidgetItem(
"");
365 m_ui->m_outputListWidget->addItem(item);
372 for(
size_t i=0; i < properties.size(); ++i)
374 propertyType = properties[i]->getType();
379 QListWidgetItem* item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::MIN_VALUE].c_str());
381 m_ui->m_outputListWidget->addItem(item);
383 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::MAX_VALUE].c_str());
385 m_ui->m_outputListWidget->addItem(item);
387 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::COUNT].c_str());
389 m_ui->m_outputListWidget->addItem(item);
391 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::VALID_COUNT].c_str());
393 m_ui->m_outputListWidget->addItem(item);
395 item =
new QListWidgetItem(
"");
396 m_ui->m_outputListWidget->addItem(item);
400 QListWidgetItem* item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::MIN_VALUE].c_str());
402 m_ui->m_outputListWidget->addItem(item);
404 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::MAX_VALUE].c_str());
406 m_ui->m_outputListWidget->addItem(item);
408 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::MEAN].c_str());
410 m_ui->m_outputListWidget->addItem(item);
412 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::SUM].c_str());
414 m_ui->m_outputListWidget->addItem(item);
416 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::COUNT].c_str());
418 m_ui->m_outputListWidget->addItem(item);
420 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::VALID_COUNT].c_str());
422 m_ui->m_outputListWidget->addItem(item);
424 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::STANDARD_DEVIATION].c_str());
426 m_ui->m_outputListWidget->addItem(item);
428 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::VARIANCE].c_str());
430 m_ui->m_outputListWidget->addItem(item);
432 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::SKEWNESS].c_str());
434 m_ui->m_outputListWidget->addItem(item);
436 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::KURTOSIS].c_str());
438 m_ui->m_outputListWidget->addItem(item);
440 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::AMPLITUDE].c_str());
442 m_ui->m_outputListWidget->addItem(item);
444 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::MEDIAN].c_str());
446 m_ui->m_outputListWidget->addItem(item);
448 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::VAR_COEFF].c_str());
450 m_ui->m_outputListWidget->addItem(item);
452 item =
new QListWidgetItem(QString(properties[i]->getName().c_str()) +
" : " + m_StatisticalSummaryMap[
te::stat::MODE].c_str());
454 m_ui->m_outputListWidget->addItem(item);
456 item =
new QListWidgetItem(
"");
457 m_ui->m_outputListWidget->addItem(item);
462 int lastRow = m_ui->m_outputListWidget->count() - 1;
463 delete m_ui->m_outputListWidget->item(lastRow);
468 std::list<te::map::AbstractLayerPtr>::iterator it = m_layers.begin();
470 std::string layerID = m_ui->m_layersComboBox->itemData(index, Qt::UserRole).toString().toStdString();
472 m_ui->m_propertieslistWidget->clear();
474 while(it != m_layers.end())
476 if(layerID == it->get()->getId().c_str())
480 m_selectedLayer = selectedLayer;
481 std::auto_ptr<const te::map::LayerSchema> schema(selectedLayer->getSchema());
483 if(schema->size() == 0)
487 m_properties.clear();
489 const std::vector<te::dt::Property*>& properties = schema->getProperties();
493 setFunctionsByLayer(m_properties);
495 for(
size_t i = 0; i < m_properties.size(); ++i)
497 type = m_properties[i]->getType();
500 m_ui->m_propertieslistWidget->addItem(m_properties[i]->getName().c_str());
511 m_ui->m_outputListWidget->reset();
512 m_ui->m_outputStatisticsGroupBox->setVisible(visible);
517 QList<QListWidgetItem*> allItems;
518 int count = m_ui->m_propertieslistWidget->count();
519 for(
int index = 0; index < count; ++index)
521 allItems.push_back(m_ui->m_propertieslistWidget->item(index));
524 QList<QListWidgetItem*> filteredItems = m_ui->m_propertieslistWidget->findItems(text, Qt::MatchContains | Qt::MatchRecursive);
526 for(
int i = 0; i < allItems.size(); ++i)
528 QListWidgetItem* item = allItems.at(i);
529 bool hide = filteredItems.indexOf(item) == -1;
530 item->setHidden(hide);
533 m_ui->m_propertieslistWidget->update();
538 QString text = m_ui->m_selectAllComboBox->itemText(index);
539 Qt::MatchFlags flag = Qt::MatchEndsWith;
544 QList<QListWidgetItem *> listFound;
545 listFound = m_ui->m_outputListWidget->findItems(text, flag);
547 for(
int i=0; i < listFound.size(); ++i)
548 listFound.at(i)->setSelected(
true);
550 m_ui->m_rejectAllComboBox->setCurrentIndex(0);
555 QString text = m_ui->m_selectAllComboBox->itemText(index);
556 Qt::MatchFlags flag = Qt::MatchEndsWith;
561 QList<QListWidgetItem *> listFound;
562 listFound = m_ui->m_outputListWidget->findItems(text, flag);
564 for(
int i=0; i < listFound.size(); ++i)
565 listFound.at(i)->setSelected(
false);
567 m_ui->m_selectAllComboBox->setCurrentIndex(0);
572 if(item->text().isEmpty())
574 item->setSelected(
false);
580 m_ui->m_newLayerNameLineEdit->clear();
581 m_ui->m_newLayerNameLineEdit->setEnabled(
true);
585 std::list<te::da::DataSourceInfoPtr> dsPtrList = dlg.
getSelecteds();
587 if(dsPtrList.empty())
590 std::list<te::da::DataSourceInfoPtr>::iterator it = dsPtrList.begin();
592 m_ui->m_repositoryLineEdit->setText(QString(it->get()->getTitle().c_str()));
594 m_outputDatasource = *it;
601 m_ui->m_newLayerNameLineEdit->clear();
602 m_ui->m_repositoryLineEdit->clear();
604 QString fileName = QFileDialog::getSaveFileName(
this, tr(
"Save as..."),
605 QString(), tr(
"Shapefile (*.shp *.SHP);;"),0, QFileDialog::DontConfirmOverwrite);
607 if (fileName.isEmpty())
610 boost::filesystem::path outfile(fileName.toStdString());
611 std::string aux = outfile.leaf().string();
612 m_ui->m_newLayerNameLineEdit->setText(aux.c_str());
613 aux = outfile.string();
614 m_ui->m_repositoryLineEdit->setText(aux.c_str());
617 m_ui->m_newLayerNameLineEdit->setEnabled(
false);
622 if(m_ui->m_layersComboBox->count() == 0)
624 QMessageBox::information(
this,
"Aggregation",
"Select an input layer.");
632 QMessageBox::information(
this,
"Aggregation",
"Can not execute this operation on this type of layer.");
638 if(m_ui->m_onlySelectedCheckBox->isChecked())
640 oidSet = m_selectedLayer->getSelected();
643 QMessageBox::information(
this,
"Aggregation",
"Select the layer objects to perform the aggregation operation.");
649 if (!inDataSource.get())
651 QMessageBox::information(
this,
"Aggregation",
"The selected input data source can not be accessed.");
655 std::vector<te::dt::Property*> selProperties = getSelectedProperties();
656 if(selProperties.empty())
658 QMessageBox::information(
this,
"Aggregation",
"Select at least one grouping attribute.");
662 std::string outputdataset = m_ui->m_newLayerNameLineEdit->text().toStdString();
664 if(m_ui->m_repositoryLineEdit->text().isEmpty())
666 QMessageBox::information(
this,
"Aggregation",
"Define a repository for the result.");
670 if(m_ui->m_newLayerNameLineEdit->text().isEmpty())
672 QMessageBox::information(
this,
"Aggregation",
"Define a name for the resulting layer.");
682 std::map<te::dt::Property*, std::vector<te::stat::StatisticalSummary> > outputStatisticalSummary = getStatisticalSummary();
688 boost::filesystem::path uri(m_ui->m_repositoryLineEdit->text().toStdString());
690 if (boost::filesystem::exists(uri))
692 QMessageBox::information(
this,
"Aggregation",
"Output file already exists. Remove it or select a new name and try again.");
696 std::size_t idx = outputdataset.find(
".");
697 if (idx != std::string::npos)
698 outputdataset=outputdataset.substr(0,idx);
700 std::map<std::string, std::string> dsinfo;
701 dsinfo[
"URI"] = uri.string();
704 dsOGR->setConnectionInfo(dsinfo);
706 if (dsOGR->dataSetExists(outputdataset))
708 QMessageBox::information(
this,
"Aggregation",
"There is already a dataset with the requested name in the output data source. Remove it or select a new name and try again.");
716 this->setCursor(Qt::WaitCursor);
733 aggregOp->
setOutput(dsOGR, outputdataset);
734 aggregOp->
setParams(selProperties, outputStatisticalSummary);
739 res = aggregOp->
run();
743 this->setCursor(Qt::ArrowCursor);
745 QMessageBox::information(
this,
"Aggregation",
"Error: could not generate the aggregation.");
753 boost::uuids::basic_random_generator<boost::mt19937> gen;
754 boost::uuids::uuid u = gen();
755 std::string id_ds = boost::uuids::to_string(u);
758 ds->setConnInfo(dsinfo);
759 ds->setTitle(uri.stem().string());
760 ds->setAccessDriver(
"OGR");
762 ds->setDescription(uri.string());
768 m_outputDatasource = ds;
775 QMessageBox::information(
this,
"Aggregation",
"The selected output datasource can not be accessed.");
779 if (aux->dataSetExists(outputdataset))
781 QMessageBox::information(
this,
"Aggregation",
"Dataset already exists. Remove it or select a new name and try again.");
784 this->setCursor(Qt::WaitCursor);
804 aggregOp->setInput(inDataSource, dsLayer->
getDataSetName(), converter, oidSet);
805 aggregOp->setOutput(aux, outputdataset);
806 aggregOp->setParams(selProperties, outputStatisticalSummary);
808 if (!aggregOp->paramsAreValid())
811 res = aggregOp->run();
817 this->setCursor(Qt::ArrowCursor);
818 QMessageBox::information(
this,
"Aggregation",
"Error: could not generate the aggregation.");
829 m_layer = converter(dt);
831 catch(
const std::exception& e)
833 this->setCursor(Qt::ArrowCursor);
835 QMessageBox::information(
this,
"Aggregation", e.what());
837 #ifdef TERRALIB_LOGGER_ENABLED
838 std::string str =
"Aggregation - ";
840 te::common::Logger::logDebug(
"vp", str.c_str());
841 #endif // TERRALIB_LOGGER_ENABLED
848 this->setCursor(Qt::ArrowCursor);
TEDATAACCESSEXPORT DataSourcePtr GetDataSource(const std::string &datasourceId, const bool opened=true)
Search for a data source with the informed id in the DataSourceManager.
A dialog aggregation operation.
Utility functions for the data access module.
const std::string & getDataSetName() const
void setInput(te::da::DataSourcePtr inDsrc, std::string inDsetName, std::auto_ptr< te::da::DataSetTypeConverter > converter, const te::da::ObjectIdSet *oidSet=0)
te::da::DataSourceInfoPtr m_outputDatasource
DataSource information.
boost::shared_ptr< DataSetType > DataSetTypePtr
boost::shared_ptr< DataSource > DataSourcePtr
TEDATAACCESSEXPORT void AssociateDataSetTypeConverterSRID(DataSetTypeConverter *converter, const int &inputSRID, const int &outputSRID=TE_UNKNOWN_SRS)
void onCancelPushButtonClicked()
void onCalculateStatistics(bool visible)
A class that represents the known capabilities of a specific data source, i.e. this class informs all...
const QueryCapabilities & getQueryCapabilities() const
It models a property definition.
void onFilterLineEditTextChanged(const QString &text)
An converter for DataSetType.
std::auto_ptr< Ui::AggregationDialogForm > m_ui
void onOutputListWidgetClicked(QListWidgetItem *item)
virtual bool paramsAreValid()
void removeViewer(int viewerId)
Dettach a progress viewer.
static ProgressManager & getInstance()
It returns a reference to the singleton instance.
te::dt::Property * getSelectedPropertyByName(std::string propertyName)
Get the selected property based on selected QListWidgetItem using the name of property.
const std::string & getDataSourceId() const
This class represents a set of unique ids created in the same context. i.e. from the same data set...
static std::auto_ptr< DataSource > make(const std::string &dsType)
TESTATEXPORT std::string GetStatSummaryFullName(const int &e)
Get the statistical parameter full name ffrom its enumerator.
bool supportsSpatialSQLDialect() const
void setStatisticalSummaryMap()
Map Statistical Summary Type enum for an intuitive name.
void onOkPushButtonClicked()
te::map::AbstractLayerPtr getLayer()
Get the generated layer.
AggregationDialog(QWidget *parent=0, Qt::WindowFlags f=0)
std::map< te::dt::Property *, std::vector< te::stat::StatisticalSummary > > getStatisticalSummary()
Get the Grouping Functions Type based on selected QListWidgetItem.
void setOutput(te::da::DataSourcePtr outDsrc, std::string dsname)
int addViewer(AbstractProgressViewer *apv)
Attach a progress viewer.
void setStatisticalSummary()
Set Statistical Summary Type for combobox 'm_selectAllComboBox' and 'm_rejectAllComboBox' based on a ...
void setParams(std::vector< te::dt::Property * > &groupProps, std::map< te::dt::Property *, std::vector< te::stat::StatisticalSummary > > &statSum)
void onSelectAllComboBoxChanged(int index)
bool supportsPreparedQueryAPI() const
void setLayers(std::list< te::map::AbstractLayerPtr > layers, te::map::AbstractLayerPtr selectedLayer=0)
Set the layer that can be used.
void onLayerComboBoxChanged(int index)
A class that represents a data source component.
virtual int getSRID() const
It returns the Spatial Reference System ID associated to the Layer.
A layer with reference to a dataset.
void setFunctionsByLayer(std::vector< te::dt::Property * > properties)
Set Grouping Functions Type for 'm_outputListWidget' based on Selected Layer.
void onTargetFileToolButtonPressed()
std::auto_ptr< LayerSchema > getSchema() const
It returns the layer schema.
StatisticalSummary
Define grouping functions type.
void Clone(const std::vector< T * > &src, std::vector< T * > &dst)
This function can be applied to a vector of pointers.
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
void FreeContents(boost::unordered_map< K, V * > &m)
This function can be applied to a map of pointers. It will delete each pointer in the map...
void onRejectAllComboBoxChanged(int index)
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr
void onTargetDatasourceToolButtonPressed()
std::vector< te::dt::Property * > getSelectedProperties()
Get the selected properties based on selected QListWidgetItem.