23 #include "ui_WMSLayerSelectorDialogForm.h" 24 #include "../../../../core/translator/Translator.h" 25 #include "../../../../core/uri/URI.h" 26 #include "../../../../core/uri/Utils.h" 27 #include "../../../core/CurlWrapper.h" 28 #include "../../../../dataaccess/datasource/DataSource.h" 29 #include "../../../../dataaccess/datasource/DataSourceManager.h" 30 #include "../dataaccess/Transactor.h" 31 #include "../../../../srs/SpatialReferenceSystemManager.h" 32 #include "../dataaccess/DataSource.h" 35 #include <QHeaderView> 36 #include <QVBoxLayout> 37 #include <QMessageBox> 41 m_ui(new
Ui::WMSLayerSelectorDialogForm),
42 m_currentLayerItem(nullptr),
43 m_refreshingProperties(false)
48 QVBoxLayout* mapPreviewGroupBoxLayout =
new QVBoxLayout(
m_ui->m_layerPreviewGroupBox);
52 m_ui->m_searchLayerToolButton->setIcon(QIcon::fromTheme(
"zoom"));
59 connect(
m_ui->m_crsComboBox, SIGNAL(currentIndexChanged(
int)),
this, SLOT(
crsIndexChanged(
int)));
63 connect(
m_ui->m_searchLayerLineEdit, SIGNAL(returnPressed()),
m_ui->m_searchLayerToolButton, SIGNAL(pressed()));
78 QString title(tr(
"WMS Layer Selection - %1"));
81 setWindowTitle(title);
83 m_ui->m_serviceTitleLabel->setText(title);
100 m_ui->m_layersTreeWidget->resizeColumnToContents(0);
101 m_ui->m_layersTreeWidget->resizeColumnToContents(1);
103 m_ui->m_layersTreeWidget->setCurrentItem(rootItem);
104 m_ui->m_layersTreeWidget->expandAll();
106 std::vector<std::string> imageFormats =
m_client->getCapabilities().m_capability.m_request.m_getMap.m_formats;
108 for(
size_t i = 0; i < imageFormats.size(); i++)
110 std::string format = imageFormats[i];
113 if(format.find(
"image/") != std::string::npos)
115 m_ui->m_imgFormatComboBox->addItem(QString(format.c_str()));
124 std::vector<te::ws::ogc::wms::WMSGetMapRequest> checkedRequests;
126 for(
size_t i = 0; i < checkedLayers.size(); i++)
130 checkedRequests.push_back(request);
133 return checkedRequests;
164 m_ui->m_layerInfoTreeWidget->clear();
168 QString queryableStr = QString(
"Queryable: ");
169 QString queryableValue = currentLayer.
m_queryable ? QString(
"Is Queryable") : QString (
"Is Not Queryable");
171 queryableStr += queryableValue;
172 queryableItem->setText(0, queryableStr);
176 QString opaqueStr = QString(
"Opaque: ");
177 QString opaqueValue = currentLayer.
m_opaque ? QString(
"true") : QString (
"false");
179 opaqueStr += opaqueValue;
180 opaqueItem->setText(0, opaqueStr);
185 QString minScaleStr = QString(
"Min Scale Denominator: ");
188 minScaleStr += minScaleValue;
189 minScaleItem->setText(0, minScaleStr);
194 QString maxScaleStr = QString(
"Max Scale Denominator: ");
197 maxScaleStr += maxScaleValue;
198 maxScaleItem->setText(0, maxScaleStr);
203 QString fixedWidthStr = QString(
"Fixed Width: ");
204 QString fixedWidthValue = QString::number(currentLayer.
m_fixedWidth);
206 fixedWidthStr += fixedWidthValue;
207 fixedWidthItem->setText(0, fixedWidthStr);
212 QString fixedHeightStr = QString(
"Fixed Width: ");
213 QString fixedHeightValue = QString::number(currentLayer.
m_fixedHeight);
215 fixedHeightStr += fixedHeightValue;
216 fixedHeightItem->setText(0, fixedHeightStr);
221 keywordList->setText(0, QString(
"KeywordList"));
223 for(
size_t i = 0; i < currentLayer.
m_keywordList.size(); i++)
226 keyword->setText(0, QString(currentLayer.
m_keywordList[i].c_str()));
233 crsListItem->setText(0, QString(
"CRS"));
239 if(!bbox.
m_crs.empty())
242 crsItem->setText(0, QString(bbox.
m_crs.c_str()));
246 bBoxItem->setText(0, QString(
"BoundingBox"));
248 QString minX = QString(
"minX: ") + QString::number(bbox.
m_minX);
249 QString minY = QString(
"minY: ") + QString::number(bbox.
m_minY);
250 QString maxX = QString(
"maxX: ") + QString::number(bbox.
m_maxX);
251 QString maxY = QString(
"maxY: ") + QString::number(bbox.
m_maxY);
258 minXItem->setText(0, minX);
259 minYItem->setText(0, minY);
260 maxXItem->setText(0, maxX);
261 maxYItem->setText(0, maxY);
268 for(
size_t i = 0; i < currentLayer.
m_dimensions.size(); i++)
273 dimensionItem->setText(0, QString(
"Dimension"));
276 dimNameItem->setText(0, QString(dimension.
m_name.c_str()));
281 QString defaultStr = QString(
"default: ");
282 QString defaultValue = QString(dimension.
m_default.c_str());
284 defaultStr += defaultValue;
285 dimDefaultItem->setText(0, defaultStr);
291 QString unitsStr = QString(
"units: ");
292 QString unitsValue = QString(dimension.
m_units.c_str());
294 unitsStr += unitsValue;
295 dimUnitsItem->setText(0, unitsStr);
301 dimAllowedValuesItem->setText(0, QString(
"AllowedValues"));
306 dimAllowedValueItem->setText(0, QString(dimension.
m_allowedValues[i].c_str()));
312 if(currentLayer.
m_styles.size() > 0)
314 for(
size_t i = 0; i < currentLayer.
m_styles.size(); i++)
320 styleItem->setText(0, QString(
"Style"));
323 styleNameItem->setText(0, QString(style.
m_name.c_str()));
328 styleTitleItem->setText(0, QString(style.
m_title.c_str()));
334 styleAbstractItem->setText(0, QString(style.
m_abstract.c_str()));
343 legendUrlItem->setText(0, QString(
"LegendURL"));
348 QString legendFormatStr = QString(
"format: ");
349 QString legendFormatValue = QString(legendURL.
m_format.c_str());
351 legendFormatStr += legendFormatValue;
352 legendFormatItem->setText(0, legendFormatStr);
356 QString legendWidthStr = QString(
"width: ");
357 QString legendWidthValue = QString::number(legendURL.
m_width);
359 legendWidthStr += legendWidthValue;
360 legendWidthItem->setText(0, legendWidthStr);
363 QString legendHeightStr = QString(
"height: ");
364 QString legendHeightValue = QString::number(legendURL.
m_height);
366 legendHeightStr += legendHeightValue;
367 legendHeightItem->setText(0, legendHeightStr);
371 if(!onlineResource.
m_href.empty())
374 onlineResourceItem->setText(0, QString(
"OnlineResource"));
377 hRefItem->setText(0, QString(onlineResource.
m_href.c_str()));
399 m_ui->m_crsComboBox->clear();
401 for(
size_t i = 0; i < currentLayer.
m_crs.size(); i++)
403 if(currentLayer.
m_crs[i].find(
"EPSG:") != std::string::npos)
405 std::string epsg = currentLayer.
m_crs[i];
407 epsg = epsg.substr(epsg.find(
":")+1);
411 int epsgCode = boost::lexical_cast<
int>(epsg);
416 m_ui->m_crsComboBox->addItem(QString(currentLayer.
m_crs[i].c_str()));
424 else if (currentLayer.
m_crs[i] ==
"CRS:84")
426 m_ui->m_crsComboBox->addItem(QString(
"EPSG:4326"));
430 if (
m_ui->m_crsComboBox->count() > 0)
432 int crsIndex =
m_ui->m_crsComboBox->findText(QString(request.
m_srs.c_str()));
436 m_ui->m_crsComboBox->setCurrentIndex(crsIndex);
440 m_ui->m_crsComboBox->setCurrentIndex(0);
450 m_ui->m_timeDimComboBox->clear();
451 m_ui->m_timeDimComboBox->setEnabled(
false);
455 for(
size_t i = 0; i < currentLayer.
m_dimensions.size(); i++)
459 if(dimension.
m_name ==
"time")
461 m_ui->m_timeDimComboBox->setEnabled(
true);
464 m_ui->m_timeDimComboBox->addItem(QString(
TE_TR(
"Select a time...")));
466 for(
size_t j = 0; j < allowedValues.size(); j++)
468 m_ui->m_timeDimComboBox->addItem(QString(allowedValues[j].c_str()));
471 if(!request.
m_time.empty())
473 m_ui->m_timeDimComboBox->setCurrentIndex(
m_ui->m_timeDimComboBox->findText(QString(request.
m_time.c_str())));
479 m_ui->m_styleComboBox->clear();
483 for(
size_t i = 0; i < currentLayer.
m_styles.size(); i++)
485 m_ui->m_styleComboBox->addItem(QString(currentLayer.
m_styles[i].m_name.c_str()));
490 m_ui->m_styleComboBox->setCurrentIndex(
m_ui->m_styleComboBox->findText(QString(request.
m_styles[0].c_str())));
495 m_ui->m_imgFormatComboBox->setCurrentIndex(
m_ui->m_imgFormatComboBox->findText(QString(request.
m_format.c_str())));
521 QTreeWidgetItemIterator it (
m_ui->m_layersTreeWidget);
523 std::vector<WMSLayerItem*> checkedItens;
529 if(layerItem ==
nullptr)
535 if(layerItem->checkState(0) == Qt::Checked)
537 checkedItens.push_back(layerItem);
555 request.
m_format =
m_ui->m_imgFormatComboBox->currentText().toUtf8().constData();
577 request.
m_time =
m_ui->m_timeDimComboBox->currentText().toUtf8().constData();
584 if(state == Qt::Checked)
601 request.
m_styles.push_back(
m_ui->m_styleComboBox->currentText().toUtf8().constData());
607 if(state == Qt::Checked)
622 request.
m_srs =
m_ui->m_crsComboBox->currentText().toUtf8().constData();
626 if(request.
m_srs ==
"EPSG:4326")
653 if(state == Qt::Checked)
668 Qt::CheckState checkState = (Qt::CheckState) state;
670 if(checkState == Qt::Checked)
689 Qt::CheckState state = item->checkState(column);
691 if(state == Qt::Checked)
693 if(!item->isSelected())
695 m_ui->m_layersTreeWidget->setCurrentItem(item);
704 if(!item->isSelected())
706 m_ui->m_layersTreeWidget->setCurrentItem(item);
721 QTreeWidgetItemIterator it (
m_ui->m_layersTreeWidget);
726 m_ui->m_layerInfoTreeWidget->clear();
734 if(layerItem ==
nullptr || layerItem->parent() ==
nullptr)
740 layerItem->setHidden(hide);
748 QString searchText =
m_ui->m_searchLayerLineEdit->text().trimmed();
751 if(searchText.isEmpty())
757 QList<QTreeWidgetItem*> searchResult =
m_ui->m_layersTreeWidget->findItems(searchText, Qt::MatchContains | Qt::MatchRecursive);
760 if(searchResult.empty())
768 for(
int i=0; i < searchResult.count(); ++i)
770 searchResult[i]->setHidden(
false);
void okPushButtonPressed()
~WMSLayerSelectorDialog()
boost::shared_ptr< DataSource > DataSourcePtr
void checkLayerItemChanged(QTreeWidgetItem *item, int column)
std::vector< WMSLayerItem * > getCheckedLayerItens()
std::unique_ptr< Ui::WMSLayerSelectorDialogForm > m_ui
const te::ws::ogc::wms::Layer & getLayer() const
This XML Schema Document named xlinks xsd has been stored here based on the change request
std::vector< std::string > m_crs
double m_southBoundLatitude
void refreshLayerProperties()
void setAllLayerItensHidden(const bool &hide)
std::shared_ptr< te::ws::ogc::WMSClient > getWMSClient()
double m_westBoundLongitude
static te::dt::Date ds(2010, 01, 01)
#define TE_TR(message)
It marks a string in order to get translated.
void timeDimIndexChanged(const int &index)
void styleIndexChanged(const int &index)
unsigned int m_fixedWidth
OnlineResource m_onlineResource
std::string query() const
Retrieving the query.
te::da::DataSourceInfoPtr m_datasourceInfo
std::vector< te::ws::ogc::wms::WMSGetMapRequest > getCheckedRequests()
WMSLayerSelectorDialog(QWidget *parent=0, Qt::WindowFlags f=0)
static DataSourceManager & getInstance()
It returns a reference to the singleton instance.
std::vector< std::string > m_styles
BoundingBox m_boundingBox
std::vector< Dimension > m_dimensions
std::vector< std::string > m_allowedValues
std::vector< Style > m_styles
A map display for a WMSGetMapResponse.
The Dimension WMS 1.3.0 struct.
void currentLayerChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
The Layer WMS 1.3.0 struct.
The WMSGetMapResponse WMS 1.3.0 struct.
The OnlineResource WMS 1.3.0 struct.
void crsIndexChanged(const int &index)
bool m_refreshingProperties
WMSLayerItem * m_currentLayerItem
void layerSearchButtonPressed()
Implementation of the data source for the WMS driver.
The LegendURL WMS 1.3.0 struct.
A class for representing an Uniform Resource Identifier (URI).
The Style WMS 1.3.0 struct.
void setRequest(const te::ws::ogc::wms::WMSGetMapRequest &request)
std::unique_ptr< te::ws::ogc::WMSClient > m_client
double m_northBoundLatitude
std::unique_ptr< WMSLayerDisplay > m_mapPreview
A dialog window to show GetCapabilities data from a WMS Server.
void transparencyStateChanged(const int &state)
double m_minScaleDenominator
TECOREEXPORT std::map< std::string, std::string > Expand(const std::string &query_str)
Split a query string into its components.
void refreshLayerInfoTree(const te::ws::ogc::wms::Layer ¤tLayer)
void set(const te::da::DataSourceInfoPtr &ds, bool useCheckableItems=false)
std::vector< std::string > m_keywordList
double m_maxScaleDenominator
double m_eastBoundLongitude
The WMSLayerItem class is an extension of QTreeWidgetItem to handle WMS Layer creation.
void imgFormatIndexChanged(const int &index)
A class to retrieve information and data from a Web Map Service.
GeographicBoundingBox m_geoBoundingBox
te::ws::ogc::wms::Layer m_rootLayer
unsigned int m_fixedHeight
std::vector< BoundingBox > m_boundingBoxes
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr
The WMSGetMapRequest WMS 1.3.0 struct.
The BoundingBox WMS 1.3.0 struct.
const te::ws::ogc::wms::WMSGetMapRequest & getRequest() const