Skip to content

Commit

Permalink
Added the possibility to change the order of layers in the WMS dialog
Browse files Browse the repository at this point in the history
git-svn-id: http://svn.osgeo.org/qgis/trunk@10850 c8812cc2-4d05-0410-92ff-de0c093fc19c
  • Loading branch information
mhugent committed May 27, 2009
1 parent f13f45e commit 14ae3b9
Show file tree
Hide file tree
Showing 5 changed files with 193 additions and 13 deletions.
Binary file added images/themes/default/mActionArrowDown.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/themes/default/mActionArrowUp.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
132 changes: 125 additions & 7 deletions src/app/qgsserversourceselect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

#include "../providers/wms/qgswmsprovider.h"
#include "qgis.h" // GEO_EPSG_CRS_ID
#include "qgisapp.h" //for getThemeIcon
#include "qgscontexthelp.h"
#include "qgscoordinatereferencesystem.h"
#include "qgsgenericprojectionselector.h"
Expand Down Expand Up @@ -55,6 +56,8 @@ QgsServerSourceSelect::QgsServerSourceSelect( QWidget * parent, Qt::WFlags fl )
mWmsProvider( 0 )
{
setupUi( this );
mLayerUpButton->setIcon(QgisApp::getThemeIcon("/mActionArrowUp.png"));
mLayerDownButton->setIcon(QgisApp::getThemeIcon("/mActionArrowDown.png"));
connect( btnCancel, SIGNAL( clicked() ), this, SLOT( reject() ) );

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

void QgsServerSourceSelect::on_btnAdd_clicked()
{
if ( m_selectedLayers.empty() == TRUE )
if ( selectedLayers().empty() == TRUE )
{
QMessageBox::information( this, tr( "Select Layer" ), tr( "You must select at least one leaf layer first." ) );
}
else if ( mWmsProvider->supportedCrsForLayers( m_selectedLayers ).size() == 0 )
else if ( mWmsProvider->supportedCrsForLayers( selectedLayers() ).size() == 0 )
{
QMessageBox::information( this, tr( "Coordinate Reference System" ), tr( "There are no available coordinate reference system for the set of layers you've selected." ) );
}
Expand All @@ -448,7 +451,7 @@ void QgsServerSourceSelect::on_btnChangeSpatialRefSys_clicked()
return;
}

QSet<QString> crsFilter = mWmsProvider->supportedCrsForLayers( m_selectedLayers );
QSet<QString> crsFilter = mWmsProvider->supportedCrsForLayers( selectedLayers() );

QgsGenericProjectionSelector * mySelector =
new QgsGenericProjectionSelector( this );
Expand Down Expand Up @@ -519,6 +522,13 @@ void QgsServerSourceSelect::on_lstLayers_itemSelectionChanged()
{
// Remove old style selection
lstLayers->findItems( m_selectedStyleIdForLayer[layerName], Qt::MatchRecursive ).first()->setSelected( false );
// Remove old layer/style pair also from newSelectedLayers / newSelectedStylesForSelectedLayers
int oldIndex = newSelectedLayers.indexOf(layerName);
if(oldIndex != -1)
{
newSelectedLayers.removeAt(oldIndex);
newSelectedStylesForSelectedLayers.removeAt(oldIndex);
}
}

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

m_selectedLayers = newSelectedLayers;
m_selectedStylesForSelectedLayers = newSelectedStylesForSelectedLayers;
m_selectedStyleIdForLayer = newSelectedStyleIdForLayer;
updateLayerOrderTab(newSelectedLayers, newSelectedStylesForSelectedLayers);
}


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

QStringList QgsServerSourceSelect::selectedLayers()
{
return m_selectedLayers;
//go through list in layer order tab
QStringList selectedLayerList;
for(int i = mLayerOrderTreeWidget->topLevelItemCount() - 1; i >= 0; --i)
{
selectedLayerList << mLayerOrderTreeWidget->topLevelItem(i)->text(0);
}
return selectedLayerList;
}

QStringList QgsServerSourceSelect::selectedStylesForSelectedLayers()
{
return m_selectedStylesForSelectedLayers;
//go through list in layer order tab
QStringList selectedStyleList;
for(int i = mLayerOrderTreeWidget->topLevelItemCount() - 1; i >= 0; --i)
{
selectedStyleList << mLayerOrderTreeWidget->topLevelItem(i)->text(1);
}
return selectedStyleList;
}


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

void QgsServerSourceSelect::on_mLayerUpButton_clicked()
{
QList<QTreeWidgetItem *> selectionList = mLayerOrderTreeWidget->selectedItems();
if(selectionList.size() < 1)
{
return;
}
int selectedIndex = mLayerOrderTreeWidget->indexOfTopLevelItem(selectionList[0]);
if(selectedIndex < 1)
{
return; //item not existing or already on top
}

QTreeWidgetItem* selectedItem = mLayerOrderTreeWidget->takeTopLevelItem(selectedIndex);
mLayerOrderTreeWidget->insertTopLevelItem(selectedIndex - 1, selectedItem);
mLayerOrderTreeWidget->clearSelection();
selectedItem->setSelected(true);
}

void QgsServerSourceSelect::on_mLayerDownButton_clicked()
{
QList<QTreeWidgetItem *> selectionList = mLayerOrderTreeWidget->selectedItems();
if(selectionList.size() < 1)
{
return;
}
int selectedIndex = mLayerOrderTreeWidget->indexOfTopLevelItem(selectionList[0]);
if(selectedIndex < 0 || selectedIndex > mLayerOrderTreeWidget->topLevelItemCount() - 2)
{
return; //item not existing or already at bottom
}

QTreeWidgetItem* selectedItem = mLayerOrderTreeWidget->takeTopLevelItem(selectedIndex);
mLayerOrderTreeWidget->insertTopLevelItem(selectedIndex + 1, selectedItem);
mLayerOrderTreeWidget->clearSelection();
selectedItem->setSelected(true);
}

void QgsServerSourceSelect::updateLayerOrderTab(const QStringList& newLayerList, const QStringList& newStyleList)
{
//check, if each layer / style combination is already contained in the layer order tab
//if not, add it to the top of the list

QStringList::const_iterator layerListIt = newLayerList.constBegin();
QStringList::const_iterator styleListIt = newStyleList.constBegin();

for( ; layerListIt != newLayerList.constEnd(); ++layerListIt, ++styleListIt)
{
bool combinationExists = false;
for(int i = 0; i < mLayerOrderTreeWidget->topLevelItemCount(); ++i)
{
QTreeWidgetItem* currentItem = mLayerOrderTreeWidget->topLevelItem(i);
if(currentItem->text(0) == *layerListIt && currentItem->text(1) == *styleListIt)
{
combinationExists = true;
break;
}
}

if(!combinationExists)
{
QTreeWidgetItem* newItem = new QTreeWidgetItem();
newItem->setText(0, *layerListIt);
newItem->setText(1, *styleListIt);
mLayerOrderTreeWidget->insertTopLevelItem(0, newItem);
}

}

//check, if each layer style combination in the layer order tab is still in newLayerList / newStyleList
//if not: remove it from the tree widget

if(mLayerOrderTreeWidget->topLevelItemCount() > 0)
{
for(int i = mLayerOrderTreeWidget->topLevelItemCount() - 1; i >= 0; --i)
{
QTreeWidgetItem* currentItem = mLayerOrderTreeWidget->topLevelItem(i);
bool combinationExists = false;

QStringList::const_iterator llIt = newLayerList.constBegin();
QStringList::const_iterator slIt = newStyleList.constBegin();
for( ; llIt != newLayerList.constEnd(); ++llIt, ++slIt)
{
if(*llIt == currentItem->text(0) && *slIt == currentItem->text(1))
{
combinationExists = true;
break;
}
}

if(!combinationExists)
{
mLayerOrderTreeWidget->takeTopLevelItem(i);
}
}
}

}

//
//
Expand Down
9 changes: 7 additions & 2 deletions src/app/qgsserversourceselect.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,9 @@ class QgsServerSourceSelect : public QDialog, private Ui::QgsServerSourceSelectB
//! Returns a textual description for the EpsgCrsId number
QString descriptionForEpsg( long epsg );

//! Keeps the layer order list up-to-date with changed layers and styles
void updateLayerOrderTab(const QStringList& newLayerList, const QStringList& newStyleList);

//! Name for selected connection
QString m_connName;

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

QStringList m_selectedLayers;
QStringList m_selectedStylesForSelectedLayers;
//QStringList m_selectedLayers;
//QStringList m_selectedStylesForSelectedLayers;
long m_Epsg;

QMap<QString, QString> m_selectedStyleIdForLayer;
Expand All @@ -194,6 +197,8 @@ class QgsServerSourceSelect : public QDialog, private Ui::QgsServerSourceSelectB
void on_btnSearch_clicked();
void on_btnAddWMS_clicked();
void wmsSelectionChanged();
void on_mLayerUpButton_clicked();
void on_mLayerDownButton_clicked();
};


Expand Down
65 changes: 61 additions & 4 deletions src/ui/qgsserversourceselectbase.ui
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
<string>Add Layer(s) from a Server</string>
</property>
<property name="windowIcon" >
<iconset/>
<iconset>
<normaloff/>
</iconset>
</property>
<property name="sizeGripEnabled" >
<bool>true</bool>
Expand Down Expand Up @@ -93,7 +95,7 @@
<property name="sizeType" >
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" >
<property name="sizeHint" stdset="0" >
<size>
<width>131</width>
<height>30</height>
Expand Down Expand Up @@ -139,6 +141,61 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="tabLayerOrder" >
<attribute name="title" >
<string>Layer Order</string>
</attribute>
<layout class="QGridLayout" name="gridLayout" >
<item row="0" column="0" >
<widget class="QPushButton" name="mLayerUpButton" >
<property name="text" >
<string/>
</property>
</widget>
</item>
<item row="0" column="1" >
<widget class="QPushButton" name="mLayerDownButton" >
<property name="text" >
<string/>
</property>
</widget>
</item>
<item row="0" column="2" >
<spacer name="horizontalSpacer" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>391</width>
<height>30</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0" colspan="3" >
<widget class="QTreeWidget" name="mLayerOrderTreeWidget" >
<property name="columnCount" >
<number>2</number>
</property>
<column>
<property name="text" >
<string>Layer</string>
</property>
</column>
<column>
<property name="text" >
<string>Style</string>
</property>
</column>
</widget>
</item>
</layout>
<zorder>mLayerUpButton</zorder>
<zorder>mLayerDownButton</zorder>
<zorder>horizontalSpacer</zorder>
<zorder>mLayerOrderTreeWidget</zorder>
</widget>
<widget class="QWidget" name="tab_2" >
<attribute name="title" >
<string>Server Search</string>
Expand Down Expand Up @@ -236,7 +293,7 @@
<property name="sizeType" >
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" >
<property name="sizeHint" stdset="0" >
<size>
<width>441</width>
<height>23</height>
Expand Down Expand Up @@ -281,7 +338,7 @@
<property name="sizeType" >
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" >
<property name="sizeHint" stdset="0" >
<size>
<width>284</width>
<height>31</height>
Expand Down

0 comments on commit 14ae3b9

Please sign in to comment.