WMSLayerSelectorDialog.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 #include "WMSLayerSelectorDialog.h"
21 
22 //TerraLib
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"
33 
34 //QT
35 #include <QHeaderView>
36 #include <QVBoxLayout>
37 #include <QMessageBox>
38 
40  : QDialog(parent, f),
41  m_ui(new Ui::WMSLayerSelectorDialogForm),
42  m_currentLayerItem(nullptr),
43  m_refreshingProperties(false)
44 {
45  m_ui->setupUi(this);
46 
47  m_mapPreview.reset(new WMSLayerDisplay(m_ui->m_layerPreviewGroupBox));
48  QVBoxLayout* mapPreviewGroupBoxLayout = new QVBoxLayout(m_ui->m_layerPreviewGroupBox);
49  mapPreviewGroupBoxLayout->addWidget(m_mapPreview.get());
50  m_mapPreview->show();
51 
52  m_ui->m_searchLayerToolButton->setIcon(QIcon::fromTheme("zoom"));
53 
54  connect(m_ui->m_layersTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(currentLayerChanged(QTreeWidgetItem*,QTreeWidgetItem*)));
55  connect(m_ui->m_layersTreeWidget, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(checkLayerItemChanged(QTreeWidgetItem*,int)));
56  connect(m_ui->m_okPushButton, SIGNAL(pressed()), this, SLOT(okPushButtonPressed()));
57  connect(m_ui->m_imgFormatComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(imgFormatIndexChanged(int)));
58  connect(m_ui->m_timeDimComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(timeDimIndexChanged(int)));
59  connect(m_ui->m_crsComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(crsIndexChanged(int)));
60  connect(m_ui->m_styleComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(styleIndexChanged(int)));
61  connect(m_ui->m_transparencyCheckBox, SIGNAL(stateChanged(int)), this, SLOT(transparencyStateChanged(int)));
62  connect(m_ui->m_searchLayerToolButton, SIGNAL(pressed()), this, SLOT(layerSearchButtonPressed()));
63  connect(m_ui->m_searchLayerLineEdit, SIGNAL(returnPressed()), m_ui->m_searchLayerToolButton, SIGNAL(pressed()));
64 }
65 
67  default;
68 
70  const te::da::DataSourceInfoPtr& ds, bool /*useCheckableItems*/)
71 {
72 
74 
75  if(m_datasourceInfo.get() == nullptr)
76  return;
77 
78  QString title(tr("WMS Layer Selection - %1"));
79  title = title.arg(QString::fromUtf8(m_datasourceInfo->getTitle().c_str()));
80 
81  setWindowTitle(title);
82 
83  m_ui->m_serviceTitleLabel->setText(title);
84 
85  const te::core::URI& connInfo = m_datasourceInfo->getConnInfo();
86  std::map<std::string, std::string> kvp = te::core::Expand(connInfo.query());
87 
89 
90  te::ws::ogc::wms::da::DataSource* wmsDs = dynamic_cast<te::ws::ogc::wms::da::DataSource*>(datasource.get());
91 
92  m_client.reset(new te::ws::ogc::WMSClient(kvp["USERDATADIR"], kvp["URI"], kvp["VERSION"]));
93 
94  m_client->setCapabilities(wmsDs->getWMSClient()->getCapabilities());
95 
96  m_rootLayer = m_client->getCapabilities().m_capability.m_layer;
97 
98  WMSLayerItem* rootItem = new WMSLayerItem(m_rootLayer, m_ui->m_layersTreeWidget);
99 
100  m_ui->m_layersTreeWidget->resizeColumnToContents(0);
101  m_ui->m_layersTreeWidget->resizeColumnToContents(1);
102 
103  m_ui->m_layersTreeWidget->setCurrentItem(rootItem);
104  m_ui->m_layersTreeWidget->expandAll();
105 
106  std::vector<std::string> imageFormats = m_client->getCapabilities().m_capability.m_request.m_getMap.m_formats;
107 
108  for(size_t i = 0; i < imageFormats.size(); i++)
109  {
110  std::string format = imageFormats[i];
111 
112  // image format only.
113  if(format.find("image/") != std::string::npos)
114  {
115  m_ui->m_imgFormatComboBox->addItem(QString(format.c_str()));
116  }
117  }
118 }
119 
120 std::vector<te::ws::ogc::wms::WMSGetMapRequest> te::ws::ogc::wms::qt::WMSLayerSelectorDialog::getCheckedRequests()
121 {
122  std::vector<WMSLayerItem*> checkedLayers = this->getCheckedLayerItens();
123 
124  std::vector<te::ws::ogc::wms::WMSGetMapRequest> checkedRequests;
125 
126  for(size_t i = 0; i < checkedLayers.size(); i++)
127  {
128  te::ws::ogc::wms::WMSGetMapRequest request = checkedLayers[i]->getRequest();
129 
130  checkedRequests.push_back(request);
131  }
132 
133  return checkedRequests;
134 }
135 
137  QTreeWidgetItem* current, QTreeWidgetItem* /*previous*/)
138 {
139  m_currentLayerItem = dynamic_cast<WMSLayerItem*>(current);
140 
141  if(m_currentLayerItem == nullptr)
142  {
143  return;
144  }
145 
147 
148  this->refreshLayerInfoTree(currentLayer);
149  this->refreshLayerProperties();
150 
151  if(m_currentLayerItem->checkState(0) == Qt::Checked)
152  {
153  this->refreshMapPreview();
154  }
155  else
156  {
157  m_mapPreview->clear();
158  }
159 
160 }
161 
163 {
164  m_ui->m_layerInfoTreeWidget->clear();
165 
166  //queryable
167  QTreeWidgetItem* queryableItem = new QTreeWidgetItem(m_ui->m_layerInfoTreeWidget);
168  QString queryableStr = QString("Queryable: ");
169  QString queryableValue = currentLayer.m_queryable ? QString("Is Queryable") : QString ("Is Not Queryable");
170 
171  queryableStr += queryableValue;
172  queryableItem->setText(0, queryableStr);
173 
174  //opaque
175  QTreeWidgetItem* opaqueItem = new QTreeWidgetItem(m_ui->m_layerInfoTreeWidget);
176  QString opaqueStr = QString("Opaque: ");
177  QString opaqueValue = currentLayer.m_opaque ? QString("true") : QString ("false");
178 
179  opaqueStr += opaqueValue;
180  opaqueItem->setText(0, opaqueStr);
181 
182  // Minimum Scale
183  QTreeWidgetItem* minScaleItem = new QTreeWidgetItem(m_ui->m_layerInfoTreeWidget);
184 
185  QString minScaleStr = QString("Min Scale Denominator: ");
186  QString minScaleValue = QString::number(currentLayer.m_minScaleDenominator);
187 
188  minScaleStr += minScaleValue;
189  minScaleItem->setText(0, minScaleStr);
190 
191  // Maximum Scale
192  QTreeWidgetItem* maxScaleItem = new QTreeWidgetItem(m_ui->m_layerInfoTreeWidget);
193 
194  QString maxScaleStr = QString("Max Scale Denominator: ");
195  QString maxScaleValue = QString::number(currentLayer.m_maxScaleDenominator);
196 
197  maxScaleStr += maxScaleValue;
198  maxScaleItem->setText(0, maxScaleStr);
199 
200  // Fixed Width
201  QTreeWidgetItem* fixedWidthItem = new QTreeWidgetItem(m_ui->m_layerInfoTreeWidget);
202 
203  QString fixedWidthStr = QString("Fixed Width: ");
204  QString fixedWidthValue = QString::number(currentLayer.m_fixedWidth);
205 
206  fixedWidthStr += fixedWidthValue;
207  fixedWidthItem->setText(0, fixedWidthStr);
208 
209  // Fixed Width
210  QTreeWidgetItem* fixedHeightItem = new QTreeWidgetItem(m_ui->m_layerInfoTreeWidget);
211 
212  QString fixedHeightStr = QString("Fixed Width: ");
213  QString fixedHeightValue = QString::number(currentLayer.m_fixedHeight);
214 
215  fixedHeightStr += fixedHeightValue;
216  fixedHeightItem->setText(0, fixedHeightStr);
217 
218  if(currentLayer.m_keywordList.size() > 0)
219  {
220  QTreeWidgetItem* keywordList = new QTreeWidgetItem(m_ui->m_layerInfoTreeWidget);
221  keywordList->setText(0, QString("KeywordList"));
222 
223  for(size_t i = 0; i < currentLayer.m_keywordList.size(); i++)
224  {
225  QTreeWidgetItem* keyword = new QTreeWidgetItem(keywordList);
226  keyword->setText(0, QString(currentLayer.m_keywordList[i].c_str()));
227  }
228  }
229 
230  if(currentLayer.m_boundingBoxes.size() > 0)
231  {
232  QTreeWidgetItem* crsListItem = new QTreeWidgetItem(m_ui->m_layerInfoTreeWidget);
233  crsListItem->setText(0, QString("CRS"));
234 
235  for(size_t i = 0; i < currentLayer.m_boundingBoxes.size(); i++)
236  {
237  te::ws::ogc::wms::BoundingBox bbox = currentLayer.m_boundingBoxes[i];
238 
239  if(!bbox.m_crs.empty())
240  {
241  QTreeWidgetItem* crsItem = new QTreeWidgetItem(crsListItem);
242  crsItem->setText(0, QString(bbox.m_crs.c_str()));
243  }
244 
245  QTreeWidgetItem* bBoxItem = new QTreeWidgetItem(m_ui->m_layerInfoTreeWidget);
246  bBoxItem->setText(0, QString("BoundingBox"));
247 
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);
252 
253  QTreeWidgetItem* minXItem = new QTreeWidgetItem(bBoxItem);
254  QTreeWidgetItem* minYItem = new QTreeWidgetItem(bBoxItem);
255  QTreeWidgetItem* maxXItem = new QTreeWidgetItem(bBoxItem);
256  QTreeWidgetItem* maxYItem = new QTreeWidgetItem(bBoxItem);
257 
258  minXItem->setText(0, minX);
259  minYItem->setText(0, minY);
260  maxXItem->setText(0, maxX);
261  maxYItem->setText(0, maxY);
262 
263  }
264  }
265 
266  if(currentLayer.m_dimensions.size() > 0)
267  {
268  for(size_t i = 0; i < currentLayer.m_dimensions.size(); i++)
269  {
270  te::ws::ogc::wms::Dimension dimension = currentLayer.m_dimensions[i];
271 
272  QTreeWidgetItem* dimensionItem = new QTreeWidgetItem(m_ui->m_layerInfoTreeWidget);
273  dimensionItem->setText(0, QString("Dimension"));
274 
275  QTreeWidgetItem* dimNameItem = new QTreeWidgetItem(dimensionItem);
276  dimNameItem->setText(0, QString(dimension.m_name.c_str()));
277 
278  if(!dimension.m_default.empty())
279  {
280  QTreeWidgetItem* dimDefaultItem = new QTreeWidgetItem(dimensionItem);
281  QString defaultStr = QString("default: ");
282  QString defaultValue = QString(dimension.m_default.c_str());
283 
284  defaultStr += defaultValue;
285  dimDefaultItem->setText(0, defaultStr);
286  }
287 
288  if(!dimension.m_units.empty())
289  {
290  QTreeWidgetItem* dimUnitsItem = new QTreeWidgetItem(dimensionItem);
291  QString unitsStr = QString("units: ");
292  QString unitsValue = QString(dimension.m_units.c_str());
293 
294  unitsStr += unitsValue;
295  dimUnitsItem->setText(0, unitsStr);
296  }
297 
298  if(dimension.m_allowedValues.size() > 0)
299  {
300  QTreeWidgetItem* dimAllowedValuesItem = new QTreeWidgetItem(dimensionItem);
301  dimAllowedValuesItem->setText(0, QString("AllowedValues"));
302 
303  for(size_t i = 0; i < dimension.m_allowedValues.size(); i++)
304  {
305  QTreeWidgetItem* dimAllowedValueItem = new QTreeWidgetItem(dimAllowedValuesItem);
306  dimAllowedValueItem->setText(0, QString(dimension.m_allowedValues[i].c_str()));
307  }
308  }
309  }
310  }
311 
312  if(currentLayer.m_styles.size() > 0)
313  {
314  for(size_t i = 0; i < currentLayer.m_styles.size(); i++)
315  {
316  te::ws::ogc::wms::Style style = currentLayer.m_styles[i];
317 
318  //Style
319  QTreeWidgetItem* styleItem = new QTreeWidgetItem(m_ui->m_layerInfoTreeWidget);
320  styleItem->setText(0, QString("Style"));
321 
322  QTreeWidgetItem* styleNameItem = new QTreeWidgetItem(styleItem);
323  styleNameItem->setText(0, QString(style.m_name.c_str()));
324 
325  if(!style.m_title.empty())
326  {
327  QTreeWidgetItem* styleTitleItem = new QTreeWidgetItem(styleItem);
328  styleTitleItem->setText(0, QString(style.m_title.c_str()));
329  }
330 
331  if(!style.m_abstract.empty())
332  {
333  QTreeWidgetItem* styleAbstractItem = new QTreeWidgetItem(styleItem);
334  styleAbstractItem->setText(0, QString(style.m_abstract.c_str()));
335  }
336 
337  te::ws::ogc::wms::LegendURL legendURL = style.m_legendURL;
338 
339  // LegendURL
340  if(legendURL.m_width > 0 && legendURL.m_height > 0)
341  {
342  QTreeWidgetItem* legendUrlItem = new QTreeWidgetItem(styleItem);
343  legendUrlItem->setText(0, QString("LegendURL"));
344 
345  if(!legendURL.m_format.empty())
346  {
347  QTreeWidgetItem* legendFormatItem = new QTreeWidgetItem(legendUrlItem);
348  QString legendFormatStr = QString("format: ");
349  QString legendFormatValue = QString(legendURL.m_format.c_str());
350 
351  legendFormatStr += legendFormatValue;
352  legendFormatItem->setText(0, legendFormatStr);
353  }
354 
355  QTreeWidgetItem* legendWidthItem = new QTreeWidgetItem(legendUrlItem);
356  QString legendWidthStr = QString("width: ");
357  QString legendWidthValue = QString::number(legendURL.m_width);
358 
359  legendWidthStr += legendWidthValue;
360  legendWidthItem->setText(0, legendWidthStr);
361 
362  QTreeWidgetItem* legendHeightItem = new QTreeWidgetItem(legendUrlItem);
363  QString legendHeightStr = QString("height: ");
364  QString legendHeightValue = QString::number(legendURL.m_height);
365 
366  legendHeightStr += legendHeightValue;
367  legendHeightItem->setText(0, legendHeightStr);
368 
369  te::ws::ogc::wms::OnlineResource onlineResource = legendURL.m_onlineResource;
370 
371  if(!onlineResource.m_href.empty())
372  {
373  QTreeWidgetItem* onlineResourceItem = new QTreeWidgetItem(legendUrlItem);
374  onlineResourceItem->setText(0, QString("OnlineResource"));
375 
376  QTreeWidgetItem* hRefItem = new QTreeWidgetItem(onlineResourceItem);
377  hRefItem->setText(0, QString(onlineResource.m_href.c_str()));
378  }
379  }
380  }
381  }
382 
383 }
384 
386 {
387 
388  if(m_currentLayerItem == nullptr)
389  {
390  return;
391  }
392 
393  m_refreshingProperties = true;
394 
396 
398 
399  m_ui->m_crsComboBox->clear();
400 
401  for(size_t i = 0; i < currentLayer.m_crs.size(); i++)
402  {
403  if(currentLayer.m_crs[i].find("EPSG:") != std::string::npos)
404  {
405  std::string epsg = currentLayer.m_crs[i];
406 
407  epsg = epsg.substr(epsg.find(":")+1);
408 
409  try
410  {
411  int epsgCode = boost::lexical_cast<int>(epsg);
412 
413  //Only wellknown projections are allowed.
414  if(te::srs::SpatialReferenceSystemManager::getInstance().recognizes(epsgCode))
415  {
416  m_ui->m_crsComboBox->addItem(QString(currentLayer.m_crs[i].c_str()));
417  }
418  }
419  catch(...)
420  {
421  continue;
422  }
423  }
424  else if (currentLayer.m_crs[i] == "CRS:84")
425  {
426  m_ui->m_crsComboBox->addItem(QString("EPSG:4326"));
427  }
428  }
429 
430  if (m_ui->m_crsComboBox->count() > 0)
431  {
432  int crsIndex = m_ui->m_crsComboBox->findText(QString(request.m_srs.c_str()));
433 
434  if (crsIndex != -1)
435  {
436  m_ui->m_crsComboBox->setCurrentIndex(crsIndex);
437  }
438  else
439  {
440  m_ui->m_crsComboBox->setCurrentIndex(0);
441  }
442 
443 
444  }
445 
446 
447 
448  m_ui->m_transparencyCheckBox->setChecked(request.m_transparent);
449 
450  m_ui->m_timeDimComboBox->clear();
451  m_ui->m_timeDimComboBox->setEnabled(false);
452 
453  if(!currentLayer.m_dimensions.empty())
454  {
455  for(size_t i = 0; i < currentLayer.m_dimensions.size(); i++)
456  {
457  te::ws::ogc::wms::Dimension dimension = currentLayer.m_dimensions[i];
458 
459  if(dimension.m_name == "time")
460  {
461  m_ui->m_timeDimComboBox->setEnabled(true);
462  std::vector<std::string> allowedValues = dimension.m_allowedValues;
463 
464  m_ui->m_timeDimComboBox->addItem(QString(TE_TR("Select a time...")));
465 
466  for(size_t j = 0; j < allowedValues.size(); j++)
467  {
468  m_ui->m_timeDimComboBox->addItem(QString(allowedValues[j].c_str()));
469  }
470 
471  if(!request.m_time.empty())
472  {
473  m_ui->m_timeDimComboBox->setCurrentIndex(m_ui->m_timeDimComboBox->findText(QString(request.m_time.c_str())));
474  }
475  }
476  }
477  }
478 
479  m_ui->m_styleComboBox->clear();
480 
481  if(!currentLayer.m_styles.empty())
482  {
483  for(size_t i = 0; i < currentLayer.m_styles.size(); i++)
484  {
485  m_ui->m_styleComboBox->addItem(QString(currentLayer.m_styles[i].m_name.c_str()));
486  }
487 
488  if(!request.m_styles.empty())
489  {
490  m_ui->m_styleComboBox->setCurrentIndex(m_ui->m_styleComboBox->findText(QString(request.m_styles[0].c_str())));
491  }
492  }
493 
494 
495  m_ui->m_imgFormatComboBox->setCurrentIndex(m_ui->m_imgFormatComboBox->findText(QString(request.m_format.c_str())));
496 
497  m_refreshingProperties = false;
498 }
499 
501 {
502  if(m_currentLayerItem == nullptr || m_client.get() == nullptr || m_mapPreview.get() == nullptr)
503  {
504  return;
505  }
506 
508 
509  request.m_width = m_mapPreview->width();
510  request.m_height = m_mapPreview->height();
511 
512  te::ws::ogc::wms::WMSGetMapResponse response = m_client->getMap(request);
513 
514  m_mapPreview->clear();
515 
516  m_mapPreview->draw(response);
517 }
518 
519 std::vector<te::ws::ogc::wms::qt::WMSLayerItem *> te::ws::ogc::wms::qt::WMSLayerSelectorDialog::getCheckedLayerItens()
520 {
521  QTreeWidgetItemIterator it (m_ui->m_layersTreeWidget);
522 
523  std::vector<WMSLayerItem*> checkedItens;
524 
525  while(*it)
526  {
527  WMSLayerItem* layerItem = dynamic_cast<WMSLayerItem*>(*it);
528 
529  if(layerItem == nullptr)
530  {
531  it++;
532  continue;
533  }
534 
535  if(layerItem->checkState(0) == Qt::Checked)
536  {
537  checkedItens.push_back(layerItem);
538  }
539 
540  it++;
541  }
542 
543  return checkedItens;
544 }
545 
547 {
548  if(index == -1 || m_currentLayerItem == nullptr || m_refreshingProperties)
549  {
550  return;
551  }
552 
554 
555  request.m_format = m_ui->m_imgFormatComboBox->currentText().toUtf8().constData();
556 
557  m_currentLayerItem->setRequest(request);
558 }
559 
561 {
562  if(index == -1 || m_currentLayerItem == nullptr || m_refreshingProperties)
563  {
564  return;
565  }
566 
567 
568 
570 
571  if(index == 0)
572  {
573  request.m_time = "";
574  }
575  else
576  {
577  request.m_time = m_ui->m_timeDimComboBox->currentText().toUtf8().constData();
578  }
579 
580  m_currentLayerItem->setRequest(request);
581 
582  Qt::CheckState state = m_currentLayerItem->checkState(0);
583 
584  if(state == Qt::Checked)
585  {
586  this->refreshMapPreview();
587  }
588 }
589 
591 {
592  if(index == -1 || m_currentLayerItem == nullptr || m_refreshingProperties)
593  {
594  return;
595  }
596 
598 
599  request.m_styles.clear();
600 
601  request.m_styles.push_back(m_ui->m_styleComboBox->currentText().toUtf8().constData());
602 
603  m_currentLayerItem->setRequest(request);
604 
605  Qt::CheckState state = m_currentLayerItem->checkState(0);
606 
607  if(state == Qt::Checked)
608  {
609  this->refreshMapPreview();
610  }
611 }
612 
614 {
615  if(index == -1 || m_currentLayerItem == nullptr)
616  {
617  return;
618  }
619 
621 
622  request.m_srs = m_ui->m_crsComboBox->currentText().toUtf8().constData();
623 
625 
626  if(request.m_srs == "EPSG:4326")
627  {
628 
630  bbox.m_crs = request.m_srs;
635 
636  request.m_boundingBox = bbox;
637  }
638  else
639  {
640  for(size_t i = 0; i < layer.m_boundingBoxes.size(); ++i)
641  {
642  if(layer.m_boundingBoxes[i].m_crs == request.m_srs)
643  {
644  request.m_boundingBox = layer.m_boundingBoxes[i];
645  }
646  }
647  }
648 
649  m_currentLayerItem->setRequest(request);
650 
651  Qt::CheckState state = m_currentLayerItem->checkState(0);
652 
653  if(state == Qt::Checked)
654  {
655  this->refreshMapPreview();
656  }
657 }
658 
660 {
661  if(m_currentLayerItem == nullptr)
662  {
663  return;
664  }
665 
667 
668  Qt::CheckState checkState = (Qt::CheckState) state;
669 
670  if(checkState == Qt::Checked)
671  {
672  request.m_transparent = true;
673  }
674  else
675  {
676  request.m_transparent = false;
677  }
678 
679  m_currentLayerItem->setRequest(request);
680 }
681 
683 {
684  if(column != 0)
685  {
686  return;
687  }
688 
689  Qt::CheckState state = item->checkState(column);
690 
691  if(state == Qt::Checked)
692  {
693  if(!item->isSelected())
694  {
695  m_ui->m_layersTreeWidget->setCurrentItem(item);
696  }
697  else
698  {
699  this->refreshMapPreview();
700  }
701  }
702  else
703  {
704  if(!item->isSelected())
705  {
706  m_ui->m_layersTreeWidget->setCurrentItem(item);
707  }
708 
709  m_mapPreview->clear();
710  }
711 }
712 
714 {
715  accept();
716 }
717 
718 
720 {
721  QTreeWidgetItemIterator it (m_ui->m_layersTreeWidget);
722 
723  if(hide)
724  {
725  m_mapPreview->clear();
726  m_ui->m_layerInfoTreeWidget->clear();
727  }
728 
729  while(*it)
730  {
731  WMSLayerItem* layerItem = dynamic_cast<WMSLayerItem*>(*it);
732 
733  // if is null or if is the root layer item.
734  if(layerItem == nullptr || layerItem->parent() == nullptr)
735  {
736  it++;
737  continue;
738  }
739 
740  layerItem->setHidden(hide);
741 
742  it++;
743  }
744 }
745 
747 {
748  QString searchText = m_ui->m_searchLayerLineEdit->text().trimmed();
749 
750  //Tem que deixar a arvore com todos os layers.
751  if(searchText.isEmpty())
752  {
753  this->setAllLayerItensHidden(false);
754  return;
755  }
756 
757  QList<QTreeWidgetItem*> searchResult = m_ui->m_layersTreeWidget->findItems(searchText, Qt::MatchContains | Qt::MatchRecursive);
758 
759  //Tem que deixar a arvore com todos os layers.
760  if(searchResult.empty())
761  {
762  this->setAllLayerItensHidden(false);
763  return;
764  }
765 
766  this->setAllLayerItensHidden(true);
767 
768  for(int i=0; i < searchResult.count(); ++i)
769  {
770  searchResult[i]->setHidden(false);
771  }
772 }
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
std::vector< std::string > m_crs
std::shared_ptr< te::ws::ogc::WMSClient > getWMSClient()
static te::dt::Date ds(2010, 01, 01)
#define TE_TR(message)
It marks a string in order to get translated.
Definition: Translator.h:242
std::string query() const
Retrieving the query.
Definition: URI.cpp:123
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< Dimension > m_dimensions
std::vector< std::string > m_allowedValues
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.
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).
Definition: URI.h:49
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
std::unique_ptr< WMSLayerDisplay > m_mapPreview
A dialog window to show GetCapabilities data from a WMS Server.
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 &currentLayer)
void set(const te::da::DataSourceInfoPtr &ds, bool useCheckableItems=false)
std::vector< std::string > m_keywordList
The WMSLayerItem class is an extension of QTreeWidgetItem to handle WMS Layer creation.
Definition: WMSLayerItem.h:56
A class to retrieve information and data from a Web Map Service.
Definition: WMSClient.h:57
GeographicBoundingBox m_geoBoundingBox
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