35
35
36
36
#include < iostream>
37
37
38
+ static long DEFAULT_WMS_EPSG = 4326 ; // WGS 84
39
+
40
+
38
41
QgsServerSourceSelect::QgsServerSourceSelect (QgisApp * app, QWidget * parent, Qt::WFlags fl)
39
42
: QDialog(parent, fl),
40
43
qgisApp(app),
41
- wmsProvider (0 ),
42
- m_Epsg(0 )
44
+ mWmsProvider (0 ),
45
+ m_Epsg(DEFAULT_WMS_EPSG )
43
46
{
44
47
setupUi (this );
45
48
connect (btnCancel, SIGNAL (clicked ()), this , SLOT (reject ()));
@@ -61,12 +64,11 @@ QgsServerSourceSelect::QgsServerSourceSelect(QgisApp * app, QWidget * parent, Qt
61
64
hbox->addStretch ();
62
65
btnGrpImageEncoding->setLayout (hbox);
63
66
67
+ // set up the WMS connections we already know about
64
68
populateConnectionList ();
65
- // connect the double-click signal to the addSingleLayer slot in the parent
66
-
67
- // disable the 'where clause' box for 0.4 release
68
- // groupBox3->hide();
69
69
70
+ // set up the default WMS Coordinate Reference System
71
+ labelCoordRefSys->setText ( descriptionForEpsg (m_Epsg) );
70
72
}
71
73
72
74
QgsServerSourceSelect::~QgsServerSourceSelect ()
@@ -143,11 +145,14 @@ void QgsServerSourceSelect::on_btnHelp_clicked()
143
145
144
146
}
145
147
146
- void QgsServerSourceSelect::populateLayerList (QgsWmsProvider* wmsProvider)
148
+ bool QgsServerSourceSelect::populateLayerList (QgsWmsProvider* wmsProvider)
147
149
{
148
150
std::vector<QgsWmsLayerProperty> layers;
149
151
150
- layers = wmsProvider->supportedLayers ();
152
+ if (!wmsProvider->supportedLayers (layers))
153
+ {
154
+ return FALSE ;
155
+ }
151
156
152
157
lstLayers->clear ();
153
158
@@ -202,6 +207,8 @@ void QgsServerSourceSelect::populateLayerList(QgsWmsProvider* wmsProvider)
202
207
{
203
208
btnAdd->setEnabled (FALSE );
204
209
}
210
+
211
+ return TRUE ;
205
212
}
206
213
207
214
@@ -344,18 +351,26 @@ void QgsServerSourceSelect::on_btnConnect_clicked()
344
351
// load the server data provider plugin
345
352
QgsProviderRegistry * pReg = QgsProviderRegistry::instance ();
346
353
347
- wmsProvider =
354
+ mWmsProvider =
348
355
(QgsWmsProvider*) pReg->getProvider ( " wms" , m_connInfo );
349
356
350
- if (wmsProvider )
357
+ if (mWmsProvider )
351
358
{
352
- connect (wmsProvider , SIGNAL (setStatus (QString)), this , SLOT (showStatusMessage (QString)));
359
+ connect (mWmsProvider , SIGNAL (setStatus (QString)), this , SLOT (showStatusMessage (QString)));
353
360
354
- populateLayerList (wmsProvider);
361
+ if (!populateLayerList (mWmsProvider ))
362
+ {
363
+ showError (mWmsProvider );
364
+ }
355
365
}
356
366
else
357
367
{
358
- // TODO: Let user know we couldn't initialise the WMS provider
368
+ // Let user know we couldn't initialise the WMS provider
369
+ QMessageBox::warning (
370
+ this ,
371
+ tr (" WMS Provider" ),
372
+ tr (" Could not open the WMS Provider" )
373
+ );
359
374
}
360
375
361
376
}
@@ -375,12 +390,12 @@ void QgsServerSourceSelect::on_btnAdd_clicked()
375
390
376
391
void QgsServerSourceSelect::on_btnChangeSpatialRefSys_clicked ()
377
392
{
378
- if (!wmsProvider )
393
+ if (!mWmsProvider )
379
394
{
380
395
return ;
381
396
}
382
397
383
- QSet<QString> crsFilter = wmsProvider ->supportedCrsForLayers (m_selectedLayers);
398
+ QSet<QString> crsFilter = mWmsProvider ->supportedCrsForLayers (m_selectedLayers);
384
399
385
400
QgsLayerProjectionSelector * mySelector =
386
401
new QgsLayerProjectionSelector (this );
@@ -393,15 +408,15 @@ void QgsServerSourceSelect::on_btnChangeSpatialRefSys_clicked()
393
408
394
409
if (mySelector->exec ())
395
410
{
396
- // TODO: assign EPSG back to the WMS provider
397
411
m_Epsg = mySelector->getCurrentEpsg ();
398
412
}
399
413
else
400
414
{
401
415
// NOOP
402
416
}
403
417
404
- labelSpatialRefSys->setText ( mySelector->getCurrentProj4String () );
418
+ labelCoordRefSys->setText ( descriptionForEpsg (m_Epsg) );
419
+ // labelCoordRefSys->setText( mySelector->getCurrentProj4String() );
405
420
406
421
delete mySelector;
407
422
@@ -477,6 +492,18 @@ void QgsServerSourceSelect::on_lstLayers_selectionChanged()
477
492
// If we got some selected items, let the user play with projections
478
493
if (newSelectedLayers.count () > 0 )
479
494
{
495
+ // Determine how many CRSs there are to play with
496
+ if (mWmsProvider )
497
+ {
498
+ QSet<QString> crsFilter = mWmsProvider ->supportedCrsForLayers (newSelectedLayers);
499
+
500
+ gbCRS->setTitle (
501
+ QString ( tr (" Coordinate Reference System (%1 available)" ) )
502
+ .arg ( crsFilter.count () )
503
+ );
504
+
505
+ }
506
+
480
507
btnChangeSpatialRefSys->setEnabled (TRUE );
481
508
}
482
509
else
@@ -510,6 +537,7 @@ QStringList QgsServerSourceSelect::selectedStylesForSelectedLayers()
510
537
return m_selectedStylesForSelectedLayers;
511
538
}
512
539
540
+
513
541
QString QgsServerSourceSelect::selectedImageEncoding ()
514
542
{
515
543
// TODO: Match this hard coded list to the list of formats Qt reports it can actually handle.
@@ -525,6 +553,7 @@ QString QgsServerSourceSelect::selectedImageEncoding()
525
553
526
554
}
527
555
556
+
528
557
QString QgsServerSourceSelect::selectedCrs ()
529
558
{
530
559
if (m_Epsg)
@@ -538,6 +567,7 @@ QString QgsServerSourceSelect::selectedCrs()
538
567
}
539
568
}
540
569
570
+
541
571
void QgsServerSourceSelect::showStatusMessage (QString const & theMessage)
542
572
{
543
573
labelStatus->setText (theMessage);
@@ -547,4 +577,28 @@ void QgsServerSourceSelect::showStatusMessage(QString const & theMessage)
547
577
}
548
578
549
579
580
+ void QgsServerSourceSelect::showError (QgsWmsProvider * wms)
581
+ {
582
+ QMessageBox::warning (
583
+ this ,
584
+ wms->errorCaptionString (),
585
+ tr (" Could not understand the response. The" ) + " " + wms->name () + " " +
586
+ tr (" provider said" ) + " :\n " +
587
+ wms->errorString ()
588
+ );
589
+
590
+ }
591
+
592
+
593
+ QString QgsServerSourceSelect::descriptionForEpsg (long epsg)
594
+ {
595
+ // We'll assume this function isn't called very often,
596
+ // so please forgive the lack of caching of results
597
+
598
+ QgsSpatialRefSys qgisSrs = QgsSpatialRefSys (epsg, QgsSpatialRefSys::EPSG);
599
+
600
+ return qgisSrs.description ();
601
+ }
602
+
603
+
550
604
// ENDS
0 commit comments