Skip to content

Commit 14ae3b9

Browse files
author
mhugent
committedMay 27, 2009
Added the possibility to change the order of layers in the WMS dialog
git-svn-id: http://svn.osgeo.org/qgis/trunk@10850 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent f13f45e commit 14ae3b9

File tree

5 files changed

+193
-13
lines changed

5 files changed

+193
-13
lines changed
 
722 Bytes
Loading
787 Bytes
Loading

‎src/app/qgsserversourceselect.cpp

Lines changed: 125 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include "../providers/wms/qgswmsprovider.h"
2323
#include "qgis.h" // GEO_EPSG_CRS_ID
24+
#include "qgisapp.h" //for getThemeIcon
2425
#include "qgscontexthelp.h"
2526
#include "qgscoordinatereferencesystem.h"
2627
#include "qgsgenericprojectionselector.h"
@@ -55,6 +56,8 @@ QgsServerSourceSelect::QgsServerSourceSelect( QWidget * parent, Qt::WFlags fl )
5556
mWmsProvider( 0 )
5657
{
5758
setupUi( this );
59+
mLayerUpButton->setIcon(QgisApp::getThemeIcon("/mActionArrowUp.png"));
60+
mLayerDownButton->setIcon(QgisApp::getThemeIcon("/mActionArrowDown.png"));
5861
connect( btnCancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
5962

6063
// Qt Designer 4.1 doesn't let us use a QButtonGroup, so it has to
@@ -426,11 +429,11 @@ void QgsServerSourceSelect::on_btnConnect_clicked()
426429

427430
void QgsServerSourceSelect::on_btnAdd_clicked()
428431
{
429-
if ( m_selectedLayers.empty() == TRUE )
432+
if ( selectedLayers().empty() == TRUE )
430433
{
431434
QMessageBox::information( this, tr( "Select Layer" ), tr( "You must select at least one leaf layer first." ) );
432435
}
433-
else if ( mWmsProvider->supportedCrsForLayers( m_selectedLayers ).size() == 0 )
436+
else if ( mWmsProvider->supportedCrsForLayers( selectedLayers() ).size() == 0 )
434437
{
435438
QMessageBox::information( this, tr( "Coordinate Reference System" ), tr( "There are no available coordinate reference system for the set of layers you've selected." ) );
436439
}
@@ -448,7 +451,7 @@ void QgsServerSourceSelect::on_btnChangeSpatialRefSys_clicked()
448451
return;
449452
}
450453

451-
QSet<QString> crsFilter = mWmsProvider->supportedCrsForLayers( m_selectedLayers );
454+
QSet<QString> crsFilter = mWmsProvider->supportedCrsForLayers( selectedLayers() );
452455

453456
QgsGenericProjectionSelector * mySelector =
454457
new QgsGenericProjectionSelector( this );
@@ -519,6 +522,13 @@ void QgsServerSourceSelect::on_lstLayers_itemSelectionChanged()
519522
{
520523
// Remove old style selection
521524
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+
}
522532
}
523533

524534
QgsDebugMsg( QString( "Added %1" ).arg( item->text( 0 ) ) );
@@ -576,9 +586,8 @@ void QgsServerSourceSelect::on_lstLayers_itemSelectionChanged()
576586
btnChangeSpatialRefSys->setEnabled( FALSE );
577587
}
578588

579-
m_selectedLayers = newSelectedLayers;
580-
m_selectedStylesForSelectedLayers = newSelectedStylesForSelectedLayers;
581589
m_selectedStyleIdForLayer = newSelectedStyleIdForLayer;
590+
updateLayerOrderTab(newSelectedLayers, newSelectedStylesForSelectedLayers);
582591
}
583592

584593

@@ -594,12 +603,24 @@ QString QgsServerSourceSelect::connectionInfo()
594603

595604
QStringList QgsServerSourceSelect::selectedLayers()
596605
{
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;
598613
}
599614

600615
QStringList QgsServerSourceSelect::selectedStylesForSelectedLayers()
601616
{
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;
603624
}
604625

605626

@@ -910,7 +931,104 @@ void QgsServerSourceSelect::wmsSelectionChanged()
910931
btnAddWMS->setEnabled( tableWidgetWMSList->currentRow() != -1 );
911932
}
912933

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+
}
913952

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+
}
9141032

9151033
//
9161034
//

‎src/app/qgsserversourceselect.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,9 @@ class QgsServerSourceSelect : public QDialog, private Ui::QgsServerSourceSelectB
148148
//! Returns a textual description for the EpsgCrsId number
149149
QString descriptionForEpsg( long epsg );
150150

151+
//! Keeps the layer order list up-to-date with changed layers and styles
152+
void updateLayerOrderTab(const QStringList& newLayerList, const QStringList& newStyleList);
153+
151154
//! Name for selected connection
152155
QString m_connName;
153156

@@ -166,8 +169,8 @@ class QgsServerSourceSelect : public QDialog, private Ui::QgsServerSourceSelectB
166169
//! Proxy Pass for selected connection
167170
QString m_connProxyPass;
168171

169-
QStringList m_selectedLayers;
170-
QStringList m_selectedStylesForSelectedLayers;
172+
//QStringList m_selectedLayers;
173+
//QStringList m_selectedStylesForSelectedLayers;
171174
long m_Epsg;
172175

173176
QMap<QString, QString> m_selectedStyleIdForLayer;
@@ -194,6 +197,8 @@ class QgsServerSourceSelect : public QDialog, private Ui::QgsServerSourceSelectB
194197
void on_btnSearch_clicked();
195198
void on_btnAddWMS_clicked();
196199
void wmsSelectionChanged();
200+
void on_mLayerUpButton_clicked();
201+
void on_mLayerDownButton_clicked();
197202
};
198203

199204

‎src/ui/qgsserversourceselectbase.ui

Lines changed: 61 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
<string>Add Layer(s) from a Server</string>
1414
</property>
1515
<property name="windowIcon" >
16-
<iconset/>
16+
<iconset>
17+
<normaloff/>
18+
</iconset>
1719
</property>
1820
<property name="sizeGripEnabled" >
1921
<bool>true</bool>
@@ -93,7 +95,7 @@
9395
<property name="sizeType" >
9496
<enum>QSizePolicy::Expanding</enum>
9597
</property>
96-
<property name="sizeHint" >
98+
<property name="sizeHint" stdset="0" >
9799
<size>
98100
<width>131</width>
99101
<height>30</height>
@@ -139,6 +141,61 @@
139141
</item>
140142
</layout>
141143
</widget>
144+
<widget class="QWidget" name="tabLayerOrder" >
145+
<attribute name="title" >
146+
<string>Layer Order</string>
147+
</attribute>
148+
<layout class="QGridLayout" name="gridLayout" >
149+
<item row="0" column="0" >
150+
<widget class="QPushButton" name="mLayerUpButton" >
151+
<property name="text" >
152+
<string/>
153+
</property>
154+
</widget>
155+
</item>
156+
<item row="0" column="1" >
157+
<widget class="QPushButton" name="mLayerDownButton" >
158+
<property name="text" >
159+
<string/>
160+
</property>
161+
</widget>
162+
</item>
163+
<item row="0" column="2" >
164+
<spacer name="horizontalSpacer" >
165+
<property name="orientation" >
166+
<enum>Qt::Horizontal</enum>
167+
</property>
168+
<property name="sizeHint" stdset="0" >
169+
<size>
170+
<width>391</width>
171+
<height>30</height>
172+
</size>
173+
</property>
174+
</spacer>
175+
</item>
176+
<item row="1" column="0" colspan="3" >
177+
<widget class="QTreeWidget" name="mLayerOrderTreeWidget" >
178+
<property name="columnCount" >
179+
<number>2</number>
180+
</property>
181+
<column>
182+
<property name="text" >
183+
<string>Layer</string>
184+
</property>
185+
</column>
186+
<column>
187+
<property name="text" >
188+
<string>Style</string>
189+
</property>
190+
</column>
191+
</widget>
192+
</item>
193+
</layout>
194+
<zorder>mLayerUpButton</zorder>
195+
<zorder>mLayerDownButton</zorder>
196+
<zorder>horizontalSpacer</zorder>
197+
<zorder>mLayerOrderTreeWidget</zorder>
198+
</widget>
142199
<widget class="QWidget" name="tab_2" >
143200
<attribute name="title" >
144201
<string>Server Search</string>
@@ -236,7 +293,7 @@
236293
<property name="sizeType" >
237294
<enum>QSizePolicy::Expanding</enum>
238295
</property>
239-
<property name="sizeHint" >
296+
<property name="sizeHint" stdset="0" >
240297
<size>
241298
<width>441</width>
242299
<height>23</height>
@@ -281,7 +338,7 @@
281338
<property name="sizeType" >
282339
<enum>QSizePolicy::Expanding</enum>
283340
</property>
284-
<property name="sizeHint" >
341+
<property name="sizeHint" stdset="0" >
285342
<size>
286343
<width>284</width>
287344
<height>31</height>

0 commit comments

Comments
 (0)
Please sign in to comment.