21
21
22
22
#include " ../providers/wms/qgswmsprovider.h"
23
23
#include " qgis.h" // GEO_EPSG_CRS_ID
24
+ #include " qgisapp.h" // for getThemeIcon
24
25
#include " qgscontexthelp.h"
25
26
#include " qgscoordinatereferencesystem.h"
26
27
#include " qgsgenericprojectionselector.h"
@@ -55,6 +56,8 @@ QgsServerSourceSelect::QgsServerSourceSelect( QWidget * parent, Qt::WFlags fl )
55
56
mWmsProvider( 0 )
56
57
{
57
58
setupUi ( this );
59
+ mLayerUpButton ->setIcon (QgisApp::getThemeIcon (" /mActionArrowUp.png" ));
60
+ mLayerDownButton ->setIcon (QgisApp::getThemeIcon (" /mActionArrowDown.png" ));
58
61
connect ( btnCancel, SIGNAL ( clicked () ), this , SLOT ( reject () ) );
59
62
60
63
// Qt Designer 4.1 doesn't let us use a QButtonGroup, so it has to
@@ -426,11 +429,11 @@ void QgsServerSourceSelect::on_btnConnect_clicked()
426
429
427
430
void QgsServerSourceSelect::on_btnAdd_clicked ()
428
431
{
429
- if ( m_selectedLayers .empty () == TRUE )
432
+ if ( selectedLayers () .empty () == TRUE )
430
433
{
431
434
QMessageBox::information ( this , tr ( " Select Layer" ), tr ( " You must select at least one leaf layer first." ) );
432
435
}
433
- else if ( mWmsProvider ->supportedCrsForLayers ( m_selectedLayers ).size () == 0 )
436
+ else if ( mWmsProvider ->supportedCrsForLayers ( selectedLayers () ).size () == 0 )
434
437
{
435
438
QMessageBox::information ( this , tr ( " Coordinate Reference System" ), tr ( " There are no available coordinate reference system for the set of layers you've selected." ) );
436
439
}
@@ -448,7 +451,7 @@ void QgsServerSourceSelect::on_btnChangeSpatialRefSys_clicked()
448
451
return ;
449
452
}
450
453
451
- QSet<QString> crsFilter = mWmsProvider ->supportedCrsForLayers ( m_selectedLayers );
454
+ QSet<QString> crsFilter = mWmsProvider ->supportedCrsForLayers ( selectedLayers () );
452
455
453
456
QgsGenericProjectionSelector * mySelector =
454
457
new QgsGenericProjectionSelector ( this );
@@ -519,6 +522,13 @@ void QgsServerSourceSelect::on_lstLayers_itemSelectionChanged()
519
522
{
520
523
// Remove old style selection
521
524
lstLayers->findItems ( m_selectedStyleIdForLayer[layerName], Qt::MatchRecursive ).first ()->setSelected ( false );
525
+ // Remove old layer/style pair also from newSelectedLayers / newSelectedStylesForSelectedLayers
526
+ int oldIndex = newSelectedLayers.indexOf (layerName);
527
+ if (oldIndex != -1 )
528
+ {
529
+ newSelectedLayers.removeAt (oldIndex);
530
+ newSelectedStylesForSelectedLayers.removeAt (oldIndex);
531
+ }
522
532
}
523
533
524
534
QgsDebugMsg ( QString ( " Added %1" ).arg ( item->text ( 0 ) ) );
@@ -576,9 +586,8 @@ void QgsServerSourceSelect::on_lstLayers_itemSelectionChanged()
576
586
btnChangeSpatialRefSys->setEnabled ( FALSE );
577
587
}
578
588
579
- m_selectedLayers = newSelectedLayers;
580
- m_selectedStylesForSelectedLayers = newSelectedStylesForSelectedLayers;
581
589
m_selectedStyleIdForLayer = newSelectedStyleIdForLayer;
590
+ updateLayerOrderTab (newSelectedLayers, newSelectedStylesForSelectedLayers);
582
591
}
583
592
584
593
@@ -594,12 +603,24 @@ QString QgsServerSourceSelect::connectionInfo()
594
603
595
604
QStringList QgsServerSourceSelect::selectedLayers ()
596
605
{
597
- return m_selectedLayers;
606
+ // go through list in layer order tab
607
+ QStringList selectedLayerList;
608
+ for (int i = mLayerOrderTreeWidget ->topLevelItemCount () - 1 ; i >= 0 ; --i)
609
+ {
610
+ selectedLayerList << mLayerOrderTreeWidget ->topLevelItem (i)->text (0 );
611
+ }
612
+ return selectedLayerList;
598
613
}
599
614
600
615
QStringList QgsServerSourceSelect::selectedStylesForSelectedLayers ()
601
616
{
602
- return m_selectedStylesForSelectedLayers;
617
+ // go through list in layer order tab
618
+ QStringList selectedStyleList;
619
+ for (int i = mLayerOrderTreeWidget ->topLevelItemCount () - 1 ; i >= 0 ; --i)
620
+ {
621
+ selectedStyleList << mLayerOrderTreeWidget ->topLevelItem (i)->text (1 );
622
+ }
623
+ return selectedStyleList;
603
624
}
604
625
605
626
@@ -910,7 +931,104 @@ void QgsServerSourceSelect::wmsSelectionChanged()
910
931
btnAddWMS->setEnabled ( tableWidgetWMSList->currentRow () != -1 );
911
932
}
912
933
934
+ void QgsServerSourceSelect::on_mLayerUpButton_clicked ()
935
+ {
936
+ QList<QTreeWidgetItem *> selectionList = mLayerOrderTreeWidget ->selectedItems ();
937
+ if (selectionList.size () < 1 )
938
+ {
939
+ return ;
940
+ }
941
+ int selectedIndex = mLayerOrderTreeWidget ->indexOfTopLevelItem (selectionList[0 ]);
942
+ if (selectedIndex < 1 )
943
+ {
944
+ return ; // item not existing or already on top
945
+ }
946
+
947
+ QTreeWidgetItem* selectedItem = mLayerOrderTreeWidget ->takeTopLevelItem (selectedIndex);
948
+ mLayerOrderTreeWidget ->insertTopLevelItem (selectedIndex - 1 , selectedItem);
949
+ mLayerOrderTreeWidget ->clearSelection ();
950
+ selectedItem->setSelected (true );
951
+ }
913
952
953
+ void QgsServerSourceSelect::on_mLayerDownButton_clicked ()
954
+ {
955
+ QList<QTreeWidgetItem *> selectionList = mLayerOrderTreeWidget ->selectedItems ();
956
+ if (selectionList.size () < 1 )
957
+ {
958
+ return ;
959
+ }
960
+ int selectedIndex = mLayerOrderTreeWidget ->indexOfTopLevelItem (selectionList[0 ]);
961
+ if (selectedIndex < 0 || selectedIndex > mLayerOrderTreeWidget ->topLevelItemCount () - 2 )
962
+ {
963
+ return ; // item not existing or already at bottom
964
+ }
965
+
966
+ QTreeWidgetItem* selectedItem = mLayerOrderTreeWidget ->takeTopLevelItem (selectedIndex);
967
+ mLayerOrderTreeWidget ->insertTopLevelItem (selectedIndex + 1 , selectedItem);
968
+ mLayerOrderTreeWidget ->clearSelection ();
969
+ selectedItem->setSelected (true );
970
+ }
971
+
972
+ void QgsServerSourceSelect::updateLayerOrderTab (const QStringList& newLayerList, const QStringList& newStyleList)
973
+ {
974
+ // check, if each layer / style combination is already contained in the layer order tab
975
+ // if not, add it to the top of the list
976
+
977
+ QStringList::const_iterator layerListIt = newLayerList.constBegin ();
978
+ QStringList::const_iterator styleListIt = newStyleList.constBegin ();
979
+
980
+ for ( ; layerListIt != newLayerList.constEnd (); ++layerListIt, ++styleListIt)
981
+ {
982
+ bool combinationExists = false ;
983
+ for (int i = 0 ; i < mLayerOrderTreeWidget ->topLevelItemCount (); ++i)
984
+ {
985
+ QTreeWidgetItem* currentItem = mLayerOrderTreeWidget ->topLevelItem (i);
986
+ if (currentItem->text (0 ) == *layerListIt && currentItem->text (1 ) == *styleListIt)
987
+ {
988
+ combinationExists = true ;
989
+ break ;
990
+ }
991
+ }
992
+
993
+ if (!combinationExists)
994
+ {
995
+ QTreeWidgetItem* newItem = new QTreeWidgetItem ();
996
+ newItem->setText (0 , *layerListIt);
997
+ newItem->setText (1 , *styleListIt);
998
+ mLayerOrderTreeWidget ->insertTopLevelItem (0 , newItem);
999
+ }
1000
+
1001
+ }
1002
+
1003
+ // check, if each layer style combination in the layer order tab is still in newLayerList / newStyleList
1004
+ // if not: remove it from the tree widget
1005
+
1006
+ if (mLayerOrderTreeWidget ->topLevelItemCount () > 0 )
1007
+ {
1008
+ for (int i = mLayerOrderTreeWidget ->topLevelItemCount () - 1 ; i >= 0 ; --i)
1009
+ {
1010
+ QTreeWidgetItem* currentItem = mLayerOrderTreeWidget ->topLevelItem (i);
1011
+ bool combinationExists = false ;
1012
+
1013
+ QStringList::const_iterator llIt = newLayerList.constBegin ();
1014
+ QStringList::const_iterator slIt = newStyleList.constBegin ();
1015
+ for ( ; llIt != newLayerList.constEnd (); ++llIt, ++slIt)
1016
+ {
1017
+ if (*llIt == currentItem->text (0 ) && *slIt == currentItem->text (1 ))
1018
+ {
1019
+ combinationExists = true ;
1020
+ break ;
1021
+ }
1022
+ }
1023
+
1024
+ if (!combinationExists)
1025
+ {
1026
+ mLayerOrderTreeWidget ->takeTopLevelItem (i);
1027
+ }
1028
+ }
1029
+ }
1030
+
1031
+ }
914
1032
915
1033
//
916
1034
//
0 commit comments