Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,14 @@
#include "qgstilescalewidget.h"
#include "qgsmapcanvas.h"
#include "qgsrasterlayer.h"
#include "qgsmessagelog.h"
#include "qgslogger.h"

#include <QDockWidget>
#include <QMainWindow>
#include <QMenu>
#include <QGraphicsView>

QgsTileScaleWidget::QgsTileScaleWidget( QgsMapCanvas * mapCanvas, QWidget * parent, Qt::WindowFlags f )
: QWidget( parent, f )
, mMapCanvas( mapCanvas )
Expand All @@ -31,54 +37,42 @@ QgsTileScaleWidget::QgsTileScaleWidget( QgsMapCanvas * mapCanvas, QWidget * pare
layerChanged( mMapCanvas->currentLayer() );
}

void QgsTileScaleWidget::layerChanged( QgsMapLayer *layer )
QgsTileScaleWidget::~QgsTileScaleWidget()
{
QgsRasterLayer *rl = qobject_cast<QgsRasterLayer *>( layer );
QSettings settings;
settings.setValue( "/UI/tileScaleEnabled", isVisible() );
}

mResolutions.clear();
void QgsTileScaleWidget::layerChanged( QgsMapLayer *layer )
{
mSlider->setDisabled( true );

if ( !rl || rl->providerType() != "wms" )
QgsRasterLayer *rl = qobject_cast<QgsRasterLayer *>( layer );
if ( !rl || rl->providerType() != "wms" || !rl->dataProvider() )
return;

QString uri = rl->source();
int tiledpos = uri.indexOf( "tiled=" );
int urlpos = uri.indexOf( "url=" );
QVariant res = rl->dataProvider()->property( "resolutions" );

if ( tiledpos >= 0 && urlpos >= 0 && urlpos > tiledpos )
mResolutions.clear();
foreach( QVariant r, res.toList() )
{
uri = uri.mid( tiledpos + 6 );
int pos = uri.indexOf( "," );
if ( pos >= 0 )
uri = uri.left( pos );
QStringList params = uri.split( ";" );
if ( params.size() < 3 )
return;

params.takeFirst();
params.takeFirst();

mResolutions.clear();
foreach( QString r, params )
{
mResolutions << r.toDouble();
}
qSort( mResolutions );

for ( int i = 0; i < mResolutions.size(); i++ )
QgsDebugMsg( QString( "found resolution %1: %2" ).arg( i ).arg( mResolutions[i] ) );

mSlider->setRange( 0, mResolutions.size() - 1 );
mSlider->setTickInterval( 1 );
mSlider->setInvertedAppearance( true );
mSlider->setPageStep( 1 );
mSlider->setTracking( false );

scaleChanged( mMapCanvas->scale() );

mSlider->setEnabled( true );
show();
QgsDebugMsg( QString( "found resolution: %1" ).arg( r.toDouble() ) );
mResolutions << r.toDouble();
}

if ( mResolutions.size() == 0 )
return;

mSlider->setRange( 0, mResolutions.size() - 1 );
mSlider->setTickInterval( 1 );
mSlider->setInvertedAppearance( true );
mSlider->setPageStep( 1 );
mSlider->setTracking( false );

scaleChanged( mMapCanvas->scale() );

mSlider->setEnabled( true );
show();
}

void QgsTileScaleWidget::scaleChanged( double scale )
Expand All @@ -103,7 +97,9 @@ void QgsTileScaleWidget::scaleChanged( double scale )
}

QgsDebugMsg( QString( "selected resolution %1: %2" ).arg( i ).arg( mResolutions[i] ) );
mSlider->blockSignals( true );
mSlider->setValue( i );
mSlider->blockSignals( false );
}

void QgsTileScaleWidget::on_mSlider_valueChanged( int value )
Expand All @@ -112,3 +108,58 @@ void QgsTileScaleWidget::on_mSlider_valueChanged( int value )
QgsDebugMsg( QString( "slider released at %1: %2" ).arg( mSlider->value() ).arg( mResolutions[mSlider->value()] ) );
mMapCanvas->zoomByFactor( mResolutions[mSlider->value()] / mMapCanvas->mapUnitsPerPixel() );
}

void QgsTileScaleWidget::showTileScale( QMainWindow *mainWindow )
{
QDockWidget *dock = mainWindow->findChild<QDockWidget *>( "theTileScaleDock" );
if ( dock )
{
dock->setVisible( dock->isHidden() );
return;
}

QgsMapCanvas *canvas = mainWindow->findChild<QgsMapCanvas *>( "theMapCanvas" );
QgsDebugMsg( QString( "canvas:%1 [%2]" ).arg(( ulong ) canvas, 0, 16 ).arg( canvas ? canvas->objectName() : "" ) );
if ( !canvas )
{
QgsDebugMsg( "map canvas theMapCanvas not found" );
return;
}

QgsTileScaleWidget *tws = new QgsTileScaleWidget( canvas );
tws->setObjectName( "theTileScaleWidget" );

QObject *legend = mainWindow->findChild<QObject*>( "theMapLegend" );
if ( legend )
{
connect( legend, SIGNAL( currentLayerChanged( QgsMapLayer* ) ),
tws, SLOT( layerChanged( QgsMapLayer* ) ) );
}
else
{
QgsDebugMsg( "legend not found" );
}

//create the dock widget
dock = new QDockWidget( tr( "Tile scale" ), mainWindow );
dock->setObjectName( "theTileScaleDock" );
dock->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea );
mainWindow->addDockWidget( Qt::RightDockWidgetArea, dock );

// add to the Panel submenu
QMenu *panelMenu = mainWindow->findChild<QMenu *>( "mPanelMenu" );
if ( panelMenu )
{
// add to the Panel submenu
panelMenu->addAction( dock->toggleViewAction() );
}
else
{
QgsDebugMsg( "panel menu not found" );
}

panelMenu->addAction( dock->toggleViewAction() );

dock->setWidget( tws );
dock->show();
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,24 @@

class QgsMapCanvas;
class QgsMapLayer;
class QwtSlider;
class QMainWindow;

class QgsTileScaleWidget : public QWidget, private Ui::QgsTileScaleWidget
{
Q_OBJECT

public:
QgsTileScaleWidget( QgsMapCanvas *mapCanvas, QWidget * parent = 0, Qt::WindowFlags f = 0 );
static void showTileScale( QMainWindow *mainWindow );

public slots:
void layerChanged( QgsMapLayer *layer );
void scaleChanged( double );
void on_mSlider_valueChanged( int );

private:
QgsTileScaleWidget( QgsMapCanvas *mapCanvas, QWidget *parent = 0, Qt::WindowFlags f = 0 );
~QgsTileScaleWidget();

QgsMapCanvas *mMapCanvas;
QList<double> mResolutions;
};
Expand Down
61 changes: 34 additions & 27 deletions src/providers/wms/qgswmsconnection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,28 +20,13 @@

#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"
//#include "qgslogger.h"
//#include "qgsmanageconnectionsdialog.h"
//#include "qgsmessageviewer.h"
#include "qgsnewhttpconnection.h"
//#include "qgsnumericsortlistviewitem.h"
#include "qgsproject.h"
#include "qgsproviderregistry.h"
#include "qgswmsconnection.h"
#include "qgsnetworkaccessmanager.h"

//#include <QButtonGroup>
//#include <QFileDialog>
//#include <QRadioButton>
//#include <QDomDocument>
//#include <QHeaderView>
//#include <QImageReader>
#include <QInputDialog>
//#include <QMap>
#include <QMessageBox>
#include <QPicture>
#include <QSettings>
Expand Down Expand Up @@ -80,17 +65,39 @@ QgsWMSConnection::QgsWMSConnection( QString theConnName ) :

bool ignoreGetMap = settings.value( key + "/ignoreGetMapURI", false ).toBool();
bool ignoreGetFeatureInfo = settings.value( key + "/ignoreGetFeatureInfoURI", false ).toBool();
if ( ignoreGetMap || ignoreGetFeatureInfo )
bool ignoreAxisOrientation = settings.value( key + "/ignoreAxisOrientation", false ).toBool();
bool invertAxisOrientation = settings.value( key + "/invertAxisOrientation", false ).toBool();

QString connArgs, delim;


if ( ignoreGetMap )
{
QString connArgs = "ignoreUrl=";
if ( ignoreGetMap )
{
connArgs += "GetMap";
if ( ignoreGetFeatureInfo )
connArgs += ";";
}
if ( ignoreGetFeatureInfo )
connArgs += "GetFeatureInfo";
connArgs += delim + "GetMap";
delim = ";";
}

if ( ignoreGetFeatureInfo )
{
connArgs += delim + "GetFeatureInfo";
delim = ";";
}

if ( ignoreAxisOrientation )
{
connArgs += delim + "AxisOrientation";
delim = ";";
}

if ( invertAxisOrientation )
{
connArgs += delim + "InvertAxisOrientation";
delim = ";";
}

if( !connArgs.isEmpty() )
{
connArgs.prepend( "ignoreUrl=" );

if ( mConnectionInfo.startsWith( "username=" ) )
{
Expand All @@ -110,12 +117,12 @@ QgsWMSConnection::~QgsWMSConnection()

}

QString QgsWMSConnection::connectionInfo( )
QString QgsWMSConnection::connectionInfo()
{
return mConnectionInfo;
}

QgsWmsProvider * QgsWMSConnection::provider( )
QgsWmsProvider *QgsWMSConnection::provider()
{
// TODO: Create and bind to data provider

Expand Down
9 changes: 8 additions & 1 deletion src/providers/wms/qgswmsdataitems.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@

#include "qgsnewhttpconnection.h"

#include "qgstilescalewidget.h"

// ---------------------------------------------------------------------------
QgsWMSConnectionItem::QgsWMSConnectionItem( QgsDataItem* parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path )
Expand All @@ -37,7 +39,7 @@ QVector<QgsDataItem*> QgsWMSConnectionItem::createChildren()
QgsDebugMsg( "Entered" );
QVector<QgsDataItem*> children;
QgsWMSConnection connection( mName );
QgsWmsProvider *wmsProvider = connection.provider( );
QgsWmsProvider *wmsProvider = connection.provider();
if ( !wmsProvider )
return children;

Expand Down Expand Up @@ -262,6 +264,11 @@ void QgsWMSRootItem::newConnection()

// ---------------------------------------------------------------------------

QGISEXTERN void registerGui( QMainWindow *mainWindow )
{
QgsTileScaleWidget::showTileScale( mainWindow );
}

QGISEXTERN QgsWMSSourceSelect * selectWidget( QWidget * parent, Qt::WFlags fl )
{
return new QgsWMSSourceSelect( parent, fl );
Expand Down
2,478 changes: 1,678 additions & 800 deletions src/providers/wms/qgswmsprovider.cpp

Large diffs are not rendered by default.

243 changes: 188 additions & 55 deletions src/providers/wms/qgswmsprovider.h

Large diffs are not rendered by default.

182 changes: 116 additions & 66 deletions src/providers/wms/qgswmssourceselect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
copyright :
original : (C) 2005 by Brendan Morley email : morb at ozemail dot com dot au
wms search : (C) 2009 Mathias Walker <mwa at sourcepole.ch>, Sourcepole AG
wms-c support : (C) 2010 Juergen E. Fischer < jef at norbit dot de >, norBIT GmbH
wmts/wms-c support : (C) 2010-2012 Juergen E. Fischer < jef at norbit dot de >, norBIT GmbH
***************************************************************************/

Expand All @@ -18,7 +18,7 @@
* *
***************************************************************************/

#include "../providers/wms/qgswmsprovider.h"
#include "qgswmsprovider.h"
#include "qgis.h" // GEO_EPSG_CRS_ID
#include "qgscontexthelp.h"
#include "qgscoordinatereferencesystem.h"
Expand All @@ -33,6 +33,7 @@
#include "qgswmsconnection.h"
#include "qgswmsprovider.h"
#include "qgswmssourceselect.h"
#include "qgswmtsdimensions.h"
#include "qgsnetworkaccessmanager.h"

#include <QButtonGroup>
Expand Down Expand Up @@ -333,57 +334,68 @@ bool QgsWMSSourceSelect::populateLayerList( QgsWmsProvider *wmsProvider )

lstLayers->sortByColumn( 0, Qt::AscendingOrder );

QVector<QgsWmsTileSetProfile> tilesets;
wmsProvider->supportedTileSets( tilesets );
wmsProvider->supportedTileLayers( mTileLayers );

tabServers->setTabEnabled( tabServers->indexOf( tabTilesets ), tilesets.size() > 0 );
tabServers->setTabEnabled( tabServers->indexOf( tabTilesets ), mTileLayers.size() > 0 );
if ( tabServers->isTabEnabled( tabServers->indexOf( tabTilesets ) ) )
tabServers->setCurrentWidget( tabTilesets );

if ( tilesets.size() > 0 )
if ( mTileLayers.size() > 0 )
{
QHash<QString, QgsWmtsTileMatrixSet> tileMatrixSets;
wmsProvider->supportedTileMatrixSets( tileMatrixSets );

int rows = 0;
foreach( const QgsWmtsTileLayer &l, mTileLayers )
{
rows += l.styles.size() * l.setLinks.size() * l.formats.size();
}

lstTilesets->clearContents();
lstTilesets->setRowCount( tilesets.size() );
lstTilesets->setRowCount( rows );
lstTilesets->setSortingEnabled( true );

for ( int i = 0; i < tilesets.size(); i++ )
int row = 0;
foreach( const QgsWmtsTileLayer &l, mTileLayers )
{
QTableWidgetItem *item = new QTableWidgetItem( tilesets[i].layers.join( ", " ) );

item->setData( Qt::UserRole + 0, tilesets[i].layers.join( "," ) );
item->setData( Qt::UserRole + 1, tilesets[i].styles.join( "," ) );
item->setData( Qt::UserRole + 2, tilesets[i].format );
item->setData( Qt::UserRole + 3, tilesets[i].crs );
item->setData( Qt::UserRole + 4, tilesets[i].tileWidth );
item->setData( Qt::UserRole + 5, tilesets[i].tileHeight );
item->setData( Qt::UserRole + 6, tilesets[i].resolutions );

lstTilesets->setItem( i, 0, item );
lstTilesets->setItem( i, 1, new QTableWidgetItem( tilesets[i].styles.join( ", " ) ) );
lstTilesets->setItem( i, 2, new QTableWidgetItem( QString( "%1x%2" ).arg( tilesets[i].tileWidth ).arg( tilesets[i].tileHeight ) ) );
lstTilesets->setItem( i, 3, new QTableWidgetItem( tilesets[i].format ) );
lstTilesets->setItem( i, 4, new QTableWidgetItem( tilesets[i].crs ) );

for ( int j = 0; j < 5; j++ )
foreach( const QgsWmtsStyle &style, l.styles )
{
QTableWidgetItem *item = lstTilesets->item( i, j );
item->setFlags( item->flags() & ~Qt::ItemIsEditable );
}

if ( !mMimeMap.contains( tilesets[i].format ) )
{
for ( int j = 0; j < 5; j++ )
foreach( const QgsWmtsTileMatrixSetLink &setLink, l.setLinks )
{
QTableWidgetItem *item = lstTilesets->item( i, j );
item->setFlags( item->flags() & ~Qt::ItemIsEnabled );
item->setToolTip( tr( "encoding %1 not supported." ).arg( tilesets[i].format ) );
foreach( QString format, l.formats )
{
QTableWidgetItem *item = new QTableWidgetItem( l.identifier );
item->setData( Qt::UserRole + 0, l.identifier );

item->setData( Qt::UserRole + 1, format );
item->setData( Qt::UserRole + 2, style.identifier );
item->setData( Qt::UserRole + 3, setLink.tileMatrixSet );
item->setData( Qt::UserRole + 4, tileMatrixSets[ setLink.tileMatrixSet ].crs );

lstTilesets->setItem( row, 0, item );
lstTilesets->setItem( row, 1, new QTableWidgetItem( format ) );
lstTilesets->setItem( row, 2, new QTableWidgetItem( style.identifier ) );
QTableWidgetItem *styleItem = new QTableWidgetItem( l.title );
if ( !l.abstract.isEmpty() )
styleItem->setToolTip( "<p>" + l.abstract + "</p>" );
lstTilesets->setItem( row, 3, styleItem );
lstTilesets->setItem( row, 4, new QTableWidgetItem( setLink.tileMatrixSet ) );
lstTilesets->setItem( row, 5, new QTableWidgetItem( tileMatrixSets[ setLink.tileMatrixSet ].crs ) );

if ( !mMimeMap.contains( format ) )
{
for ( int i = 0; i < lstTilesets->columnCount(); i++ )
{
QTableWidgetItem *item = lstTilesets->item( row, i );
item->setFlags( item->flags() & ~Qt::ItemIsEnabled );
item->setToolTip( tr( "encoding %1 not supported." ).arg( format ) );
}
}

row++;
}
}
}

QString crsName = descriptionForAuthId( tilesets[i].crs );
if ( crsName.isEmpty() )
crsName = tr( "CRS %1 not supported." ).arg( tilesets[i].crs );
lstTilesets->item( i, 4 )->setToolTip( crsName );
}

lstTilesets->resizeColumnsToContents();
Expand All @@ -405,7 +417,7 @@ void QgsWMSSourceSelect::on_btnConnect_clicked()
mConnName = cmbConnections->currentText();

QgsWMSConnection connection( cmbConnections->currentText() );
QgsWmsProvider *wmsProvider = connection.provider( );
QgsWmsProvider *wmsProvider = connection.provider();
mConnectionInfo = connection.connectionInfo();

if ( wmsProvider )
Expand Down Expand Up @@ -444,52 +456,90 @@ void QgsWMSSourceSelect::addClicked()
QString crs;
QString connInfo = connectionInfo();

QString connArgs;
QStringList connArgs;

if ( mTileWidth->text().toInt() > 0 && mTileHeight->text().toInt() > 0 )
{
connArgs << QString( "maxSize=%1;%2" ).arg( mTileWidth->text().toInt() ).arg( mTileHeight->text().toInt() );
}

if ( lstTilesets->selectedItems().isEmpty() )
{
collectSelectedLayers( layers, styles );
crs = mCRS;
format = mFormats[ mImageFormatGroup->checkedId()].format;

if ( mTileWidth->text().toInt() > 0 && mTileHeight->text().toInt() > 0 )
{
connArgs = QString( "tiled=%1;%2" ).arg( mTileWidth->text().toInt() ).arg( mTileHeight->text().toInt() );
}
}
else
{
QTableWidgetItem *item = lstTilesets->selectedItems().first();
layers = item->data( Qt::UserRole + 0 ).toStringList();
styles = item->data( Qt::UserRole + 1 ).toStringList();
format = item->data( Qt::UserRole + 2 ).toString();
crs = item->data( Qt::UserRole + 3 ).toString();

connArgs = QString( "tiled=%1;%2;%3" )
.arg( item->data( Qt::UserRole + 4 ).toInt() )
.arg( item->data( Qt::UserRole + 5 ).toInt() )
.arg( item->data( Qt::UserRole + 6 ).toStringList().join( ";" ) );

layers = QStringList( item->data( Qt::UserRole + 0 ).toString() );
format = item->data( Qt::UserRole + 1 ).toString();
styles = QStringList( item->data( Qt::UserRole + 2 ).toString() );
crs = item->data( Qt::UserRole + 4 ).toString();

connArgs << QString( "tileMatrixSet=%1" ).arg( item->data( Qt::UserRole + 3 ).toStringList().join( ";" ) );

const QgsWmtsTileLayer *layer = 0;

foreach( const QgsWmtsTileLayer &l, mTileLayers )
{
if ( l.identifier == layers.join( "," ) )
{
layer = &l;
break;
}
}

Q_ASSERT( layer );

if ( !layer->dimensions.isEmpty() )
{
QgsWmtsDimensions *dlg = new QgsWmtsDimensions( *layer, this );
if ( dlg->exec() != QDialog::Accepted )
{
delete dlg;
return;
}

QHash<QString, QString> dims;
dlg->selectedDimensions( dims );

QString dimString = "tileDimensions=";
QString delim;

for ( QHash<QString, QString>::const_iterator it = dims.constBegin();
it != dims.constEnd();
++it )
{
dimString += delim + it.key() + "=" + it.value();
delim = ";";
}

delete dlg;

connArgs << dimString;
}
}

if ( mFeatureCount->text().toInt() > 0 )
{
if ( !connArgs.isEmpty() )
connArgs += ",";
connArgs += QString( "featureCount=%1" ).arg( mFeatureCount->text().toInt() );
connArgs << QString( "featureCount=%1" ).arg( mFeatureCount->text().toInt() );
}

if ( !connArgs.isEmpty() )
{
if ( connInfo.startsWith( "username=" ) || connInfo.startsWith( "ignoreUrl=" ) )
{
connInfo.prepend( connArgs + "," );
}
else
if ( !connInfo.startsWith( "username=" ) && !connInfo.startsWith( "ignoreUrl=" ) )
{
connInfo.prepend( connArgs + ",url=" );
connInfo.prepend( "url=" );
}

connArgs << connInfo;

connInfo = connArgs.join( "," );
}
QgsDebugMsg( "crs = " + crs );

QgsDebugMsg( QString( "connInfo=%1 crs=%2 " ).arg( connInfo ).arg( crs ) );

emit addRasterLayer( connInfo,
leLayerName->text().isEmpty() ? layers.join( "/" ) : leLayerName->text(),
Expand Down
5 changes: 4 additions & 1 deletion src/providers/wms/qgswmssourceselect.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/***************************************************************************
qgserversourceselect.h - selector for WMS servers, etc.
qgswmssourceselect.h - selector for WMS servers, etc.
-------------------
begin : 3 April 2005
original : (C) 2005 by Brendan Morley email : morb at ozemail dot com dot au
Expand Down Expand Up @@ -195,6 +195,9 @@ class QgsWMSSourceSelect : public QDialog, private Ui::QgsWMSSourceSelectBase

QList<QTreeWidgetItem*> mCurrentSelection;
QTableWidgetItem* mCurrentTileset;

QList<QgsWmtsTileLayer> mTileLayers;

signals:
void addRasterLayer( QString const & rasterLayerPath,
QString const & baseName,
Expand Down
74 changes: 74 additions & 0 deletions src/providers/wms/qgswmtsdimensions.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/***************************************************************************
qgswmtsdimensions.cpp - selector for WMTS dimensions
-------------------
begin : 2. May 2012
copyright : (C) 2012 Juergen E. Fischer < jef at norbit dot de >, norBIT GmbH
***************************************************************************/

/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/

#include "qgswmsprovider.h"
#include "qgswmtsdimensions.h"

#include <QSettings>
#include <QComboBox>

QgsWmtsDimensions::QgsWmtsDimensions( const QgsWmtsTileLayer &layer, QWidget *parent, Qt::WFlags fl )
: QDialog( parent, fl )
{
setupUi( this );

QStringList dims = layer.dimensions.keys();
qSort( dims );

mDimensions->setRowCount( dims.size() );

for( int i = 0; i < mDimensions->rowCount(); i++ )
{
const QgsWmtsDimension &d = layer.dimensions[ dims[i] ];

mDimensions->setItem( i, 0, new QTableWidgetItem( d.identifier ) );
mDimensions->setItem( i, 1, new QTableWidgetItem( d.title ) );
mDimensions->setItem( i, 2, new QTableWidgetItem( d.abstract ) );
mDimensions->setItem( i, 3, new QTableWidgetItem( d.defaultValue ) );

QComboBox *cb = new QComboBox( mDimensions );
cb->addItems( d.values );
int idx = cb->findText( d.defaultValue );
cb->setCurrentIndex( idx < 0 ? 0 : idx );
mDimensions->setCellWidget( i, 4, cb );

i++;
}

QSettings settings;
QgsDebugMsg( "restoring geometry" );
restoreGeometry( settings.value( "/Windows/WMTSDimensions/geometry" ).toByteArray() );
}

QgsWmtsDimensions::~QgsWmtsDimensions()
{
QSettings settings;
QgsDebugMsg( "saving geometry" );
settings.setValue( "/Windows/WmtsDimensions/geometry", saveGeometry() );
}

void QgsWmtsDimensions::selectedDimensions( QHash<QString, QString> &selected )
{
selected.clear();

for( int i = 0; i<mDimensions->rowCount(); i++ )
{
QComboBox *cb = qobject_cast< QComboBox * >( mDimensions->cellWidget( i, 4 ) );
Q_ASSERT( cb );
selected.insert( mDimensions->item( i, 0 )->text(), cb->currentText() );
}
}
50 changes: 50 additions & 0 deletions src/providers/wms/qgswmtsdimensions.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/***************************************************************************
qgswmtsdimensions.h - selector for WMTS dimensions
-------------------
begin : 2. May 2012
copyright : (C) 2012 by Jürgen Fischer, norBIT GmbH
email: : jef (at) norbit (dot) de
***************************************************************************/

/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/

#ifndef QGSWMTSDIMENSIONS_H
#define QGSWMTSDIMENSIONS_H
#include "ui_qgswmtsdimensionsbase.h"
#include "qgisgui.h"
#include "qgscontexthelp.h"
#include "qgswmsprovider.h"

#include <QHash>

/*!
* \brief Dialog to select dimension values for WMTS layers
*
* This dialog allows the user to select dimensions values the
* WMTS offers.
*
*/
class QgsWmtsDimensions : public QDialog, private Ui::QgsWmtsDimensionsBase
{
Q_OBJECT

public:
//! Constructor
QgsWmtsDimensions( const QgsWmtsTileLayer &layer, QWidget *parent = 0, Qt::WFlags fl = 0 );
//! Destructor
~QgsWmtsDimensions();

void selectedDimensions( QHash<QString, QString> &dims );

void on_buttonBox_helpRequested() { QgsContextHelp::run( metaObject()->className() ); }
};


#endif // QGSWMTSDIMENSIONS_H
6 changes: 0 additions & 6 deletions src/ui/qgisapp.ui
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,6 @@
<addaction name="mActionNewBookmark"/>
<addaction name="mActionShowBookmarks"/>
<addaction name="mActionDraw"/>
<addaction name="mActionTileScale"/>
</widget>
<widget class="QMenu" name="mLayerMenu">
<property name="title">
Expand Down Expand Up @@ -1251,11 +1250,6 @@
<string>Set Project CRS from Layer</string>
</property>
</action>
<action name="mActionTileScale">
<property name="text">
<string>Tile scale slider</string>
</property>
</action>
<action name="mActionLayerProperties">
<property name="text">
<string>Properties...</string>
Expand Down
28 changes: 24 additions & 4 deletions src/ui/qgsnewhttpconnectionbase.ui
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>507</width>
<height>322</height>
<width>475</width>
<height>400</height>
</rect>
</property>
<property name="windowTitle">
Expand Down Expand Up @@ -48,6 +48,12 @@
</item>
<item row="4" column="0" colspan="3">
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>If the service requires basic authentication, enter a user name and optional password</string>
</property>
Expand Down Expand Up @@ -128,20 +134,34 @@
</property>
</widget>
</item>
<item row="8" column="0" colspan="2">
<item row="9" column="0" colspan="2">
<widget class="QCheckBox" name="cbxIgnoreGetFeatureInfoURI">
<property name="text">
<string>Ignore GetFeatureInfo URI reported in capabilities</string>
</property>
</widget>
</item>
<item row="7" column="0" colspan="2">
<item row="8" column="0" colspan="2">
<widget class="QCheckBox" name="cbxIgnoreGetMapURI">
<property name="text">
<string>Ignore GetMap URI reported in capabilities</string>
</property>
</widget>
</item>
<item row="10" column="0" colspan="2">
<widget class="QCheckBox" name="cbxIgnoreAxisOrientation">
<property name="text">
<string>Ignore axis orientation (WMS 1.3/WMTS)</string>
</property>
</widget>
</item>
<item row="11" column="0" colspan="2">
<widget class="QCheckBox" name="cbxInvertAxisOrientation">
<property name="text">
<string>Invert axis orientation</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
Expand Down
13 changes: 9 additions & 4 deletions src/ui/qgswmssourceselectbase.ui
Original file line number Diff line number Diff line change
Expand Up @@ -355,22 +355,27 @@
</attribute>
<column>
<property name="text">
<string>Layers</string>
<string>Layer</string>
</property>
</column>
<column>
<property name="text">
<string>Styles</string>
<string>Format</string>
</property>
</column>
<column>
<property name="text">
<string>Size</string>
<string>Style</string>
</property>
</column>
<column>
<property name="text">
<string>Format</string>
<string>Title</string>
</property>
</column>
<column>
<property name="text">
<string>Tileset</string>
</property>
</column>
<column>
Expand Down
93 changes: 93 additions & 0 deletions src/ui/qgswmtsdimensionsbase.ui
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QgsWmtsDimensionsBase</class>
<widget class="QDialog" name="QgsWmtsDimensionsBase">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>767</width>
<height>315</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QTableWidget" name="mDimensions">
<column>
<property name="text">
<string>Dimension</string>
</property>
</column>
<column>
<property name="text">
<string>Value</string>
</property>
</column>
<column>
<property name="text">
<string>Abstract</string>
</property>
</column>
<column>
<property name="text">
<string>Default</string>
</property>
</column>
<column>
<property name="text">
<string>Value</string>
</property>
</column>
</widget>
</item>
<item row="1" column="0">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>QgsWmtsDimensionsBase</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>QgsWmtsDimensionsBase</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>