Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
UI - Update vector and raster to be able to add many metadata urls on…
… server side
  • Loading branch information
Gustry committed Sep 16, 2021
1 parent d8413c8 commit a3df6b6
Show file tree
Hide file tree
Showing 11 changed files with 291 additions and 225 deletions.
Expand Up @@ -11,6 +11,7 @@




class QgsVectorLayerProperties : QgsOptionsDialogBase
{
%Docstring(signature="appended")
Expand Down Expand Up @@ -44,7 +45,6 @@ Adds a properties page factory to the vector layer properties dialog.

};


/************************************************************************
* This file has been generated automatically from *
* *
Expand Down
2 changes: 1 addition & 1 deletion src/core/qgsmaplayerserverproperties.cpp
Expand Up @@ -44,7 +44,7 @@ void QgsServerMetadataUrlProperties::readXml( const QDomNode &layer_node )
{
QDomElement element = layer_node.namedItem( QStringLiteral( "metadataUrls" ) ).toElement();
mMetadataUrls.clear();
const QDomNodeList el = element.elementsByTagName( QStringLiteral( "link" ) );
const QDomNodeList el = element.elementsByTagName( QStringLiteral( "metadataUrl" ) );
for ( int i = 0; i < el.size(); i++ )
{
element = el.at( i ).toElement();
Expand Down
2 changes: 2 additions & 0 deletions src/gui/CMakeLists.txt
Expand Up @@ -546,6 +546,7 @@ set(QGIS_GUI_SRCS
qgsmessageviewer.cpp
qgsmetadatawidget.cpp
qgsmasksourceselectionwidget.cpp
qgsmetadataurlitemdelegate.cpp
qgsnewauxiliarylayerdialog.cpp
qgsnewauxiliaryfielddialog.cpp
qgsnewdatabasetablenamewidget.cpp
Expand Down Expand Up @@ -796,6 +797,7 @@ set(QGIS_GUI_HDRS
qgsmessageviewer.h
qgsmetadatawidget.h
qgsmasksourceselectionwidget.h
qgsmetadataurlitemdelegate.h
qgsnewauxiliaryfielddialog.h
qgsnewauxiliarylayerdialog.h
qgsnewgeopackagelayerdialog.h
Expand Down
58 changes: 58 additions & 0 deletions src/gui/qgsmetadataurlitemdelegate.cpp
@@ -0,0 +1,58 @@
/***************************************************************************
qgsmetadataurlitemdelegate.cpp
------------------
begin : June 21, 2021
copyright : (C) 2021 by Etienne Trimaille
email : etrimaille at 3liz dot com
***************************************************************************/

/***************************************************************************
* *
* 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 <QComboBox>
#include <QStringListModel>

#include "qgsmetadataurlitemdelegate.h"

///@cond PRIVATE

MetadataUrlItemDelegate::MetadataUrlItemDelegate( QObject *parent )
: QStyledItemDelegate( parent )
{

}

QWidget *MetadataUrlItemDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
if ( index.column() == 1 )
{
// Type
QComboBox *typeEditor = new QComboBox( parent );
QStringList types;
types << QStringLiteral( ) << QStringLiteral( "FGDC" ) << QStringLiteral( "TC211" );
QStringListModel *model = new QStringListModel( parent );
model->setStringList( types );
typeEditor->setModel( model );
return typeEditor;
}
else if ( index.column() == 2 )
{
// Format
QComboBox *typeFormat = new QComboBox( parent );
QStringList formats;
formats << QStringLiteral( ) << QStringLiteral( "text/plain" ) << QStringLiteral( "text/xml" );
QStringListModel *model = new QStringListModel( parent );
model->setStringList( formats );
typeFormat->setModel( model );
return typeFormat;
}

return QStyledItemDelegate::createEditor( parent, option, index );
}
///@endcond
53 changes: 53 additions & 0 deletions src/gui/qgsmetadataurlitemdelegate.h
@@ -0,0 +1,53 @@
/***************************************************************************
qgsmetadataurlitemdelegate.h
------------------
begin : June 21, 2021
copyright : (C) 2021 by Etienne Trimaille
email : etrimaille at 3liz dot com
***************************************************************************/

/***************************************************************************
* *
* 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 QGSMETADATAURLITEMDELEGATE_H
#define QGSMETADATAURLITEMDELEGATE_H

#include <QStyledItemDelegate>

///@cond PRIVATE

/**
* \ingroup gui
* \class MetadataUrlItemDelegate
* \brief Special delegate for the metadata url view.
* \since QGIS 3.20
*/
class MetadataUrlItemDelegate : public QStyledItemDelegate
{

Q_OBJECT

public:

/**
* \brief MetadataUrlItemDelegate constructor
* \param parent
*/
explicit MetadataUrlItemDelegate( QObject *parent = nullptr );

/**
* Create a special editor with a QCombobox in the link view.
*/
QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
};


///@endcond

#endif // QGSMETADATAURLITEMDELEGATE_H
80 changes: 50 additions & 30 deletions src/gui/raster/qgsrasterlayerproperties.cpp
Expand Up @@ -30,6 +30,7 @@
#include "qgsmaptoolemitpoint.h"
#include "qgsmaptopixel.h"
#include "qgsmetadatawidget.h"
#include "qgsmetadataurlitemdelegate.h"
#include "qgsmultibandcolorrenderer.h"
#include "qgsmultibandcolorrendererwidget.h"
#include "qgsnative.h"
Expand Down Expand Up @@ -121,6 +122,8 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer *lyr, QgsMapCanv
connect( mCrsSelector, &QgsProjectionSelectionWidget::crsChanged, this, &QgsRasterLayerProperties::mCrsSelector_crsChanged );
connect( mRenderTypeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsRasterLayerProperties::mRenderTypeComboBox_currentIndexChanged );
connect( mResetColorRenderingBtn, &QToolButton::clicked, this, &QgsRasterLayerProperties::mResetColorRenderingBtn_clicked );
connect( buttonRemoveMetadataUrl, &QPushButton::clicked, this, &QgsRasterLayerProperties::removeSelectedMetadataUrl );
connect( buttonAddMetadataUrl, &QPushButton::clicked, this, &QgsRasterLayerProperties::addMetadataUrl );
// QgsOptionsDialogBase handles saving/restoring of geometry, splitter and current tab states,
// switching vertical tabs between icon/text to icon-only modes (splitter collapsed to left),
// and connecting QDialogButtonBox's accepted/rejected signals to dialog's accept/reject slots
Expand Down Expand Up @@ -197,6 +200,20 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer *lyr, QgsMapCanv
chkUseScaleDependentRendering->setChecked( lyr->hasScaleBasedVisibility() );
mScaleRangeWidget->setScaleRange( lyr->minimumScale(), lyr->maximumScale() );

// Setup the layer metadata URL
tableViewMetadataUrl->setSelectionMode( QAbstractItemView::SingleSelection );
tableViewMetadataUrl->setSelectionBehavior( QAbstractItemView::SelectRows );
tableViewMetadataUrl->horizontalHeader()->setStretchLastSection( true );

mMetadataUrlModel = new QStandardItemModel( tableViewMetadataUrl );
mMetadataUrlModel->clear();
mMetadataUrlModel->setColumnCount( 3 );
QStringList metadataUrlHeaders;
metadataUrlHeaders << tr( "URL" ) << tr( "Type" ) << tr( "Format" );
mMetadataUrlModel->setHorizontalHeaderLabels( metadataUrlHeaders );
tableViewMetadataUrl->setModel( mMetadataUrlModel );
tableViewMetadataUrl->setItemDelegate( new MetadataUrlItemDelegate( this ) );

// build GUI components
QIcon myPyramidPixmap( QgsApplication::getThemeIcon( "/mIconPyramid.svg" ) );
QIcon myNoPyramidPixmap( QgsApplication::getThemeIcon( "/mIconNoPyramid.svg" ) );
Expand Down Expand Up @@ -802,22 +819,14 @@ void QgsRasterLayerProperties::sync()
mLayerAttributionUrlLineEdit->setText( mRasterLayer->attributionUrl() );

// layer metadata url
QgsMapLayerServerProperties *server = mRasterLayer->serverProperties();
if ( ! server->metadataUrls().isEmpty() )
{
mLayerMetadataUrlLineEdit->setText( server->metadataUrls().at( 0 ).url );
mLayerMetadataUrlTypeComboBox->setCurrentIndex(
mLayerMetadataUrlTypeComboBox->findText(
server->metadataUrls().at( 0 ).type
)
);
mLayerMetadataUrlFormatComboBox->setCurrentIndex(
mLayerMetadataUrlFormatComboBox->findText(
server->metadataUrls().at( 0 ).format
)
);
}
delete server;
const QList<QgsMapLayerServerProperties::MetadataUrl> &metaUrls = mRasterLayer->serverProperties()->metadataUrls();
for ( const QgsMapLayerServerProperties::MetadataUrl &metaUrl : metaUrls )
{
int row = mMetadataUrlModel->rowCount();
mMetadataUrlModel->setItem( row, 0, new QStandardItem( metaUrl.url ) );
mMetadataUrlModel->setItem( row, 1, new QStandardItem( metaUrl.type ) );
mMetadataUrlModel->setItem( row, 2, new QStandardItem( metaUrl.format ) );
}

// layer legend url
mLayerLegendUrlLineEdit->setText( mRasterLayer->legendUrl() );
Expand Down Expand Up @@ -1039,21 +1048,17 @@ void QgsRasterLayerProperties::apply()
mRasterLayer->setAttributionUrl( mLayerAttributionUrlLineEdit->text() );

// Metadata URL
QgsMapLayerServerProperties::MetadataUrl url;
QList<QgsMapLayerServerProperties::MetadataUrl> currentMetadataUrls = mRasterLayer->serverProperties()->metadataUrls();
if ( ! currentMetadataUrls.isEmpty() && currentMetadataUrls.at( 0 ).url != mLayerMetadataUrlLineEdit->text() )
mMetadataFilled = false;
url.url = mLayerMetadataUrlLineEdit->text();

if ( ! currentMetadataUrls.isEmpty() && currentMetadataUrls.at( 0 ).type != mLayerMetadataUrlTypeComboBox->currentText() )
mMetadataFilled = false;
url.type = mLayerMetadataUrlTypeComboBox->currentText();

if ( ! currentMetadataUrls.isEmpty() && currentMetadataUrls.at( 0 ).type != mLayerMetadataUrlFormatComboBox->currentText() )
QList<QgsMapLayerServerProperties::MetadataUrl> metaUrls;
for ( int row = 0; row < mMetadataUrlModel->rowCount() ; row++ )
{
QgsMapLayerServerProperties::MetadataUrl metaUrl;
metaUrl.url = mMetadataUrlModel->item( row, 0 )->text();
metaUrl.type = mMetadataUrlModel->item( row, 1 )->text();
metaUrl.format = mMetadataUrlModel->item( row, 2 )->text();
metaUrls.append( metaUrl );
mMetadataFilled = false;
url.format = mLayerMetadataUrlFormatComboBox->currentText();

mRasterLayer->serverProperties()->setMetadataUrls( QList<QgsServerMetadataUrlProperties::MetadataUrl>() << url );
}
mRasterLayer->serverProperties()->setMetadataUrls( metaUrls );

if ( mRasterLayer->legendUrl() != mLayerLegendUrlLineEdit->text() )
mMetadataFilled = false;
Expand Down Expand Up @@ -1527,6 +1532,21 @@ QLinearGradient QgsRasterLayerProperties::highlightGradient()
return myGradient;
}

void QgsRasterLayerProperties::addMetadataUrl()
{
int row = mMetadataUrlModel->rowCount();
mMetadataUrlModel->setItem( row, 0, new QStandardItem( QLatin1String() ) );
mMetadataUrlModel->setItem( row, 1, new QStandardItem( QLatin1String() ) );
mMetadataUrlModel->setItem( row, 2, new QStandardItem( QLatin1String() ) );
}

void QgsRasterLayerProperties::removeSelectedMetadataUrl()
{
const QModelIndexList selectedRows = tableViewMetadataUrl->selectionModel()->selectedRows();
if ( selectedRows.empty() )
return;
mMetadataUrlModel->removeRow( selectedRows[0].row() );
}


//
Expand Down
6 changes: 6 additions & 0 deletions src/gui/raster/qgsrasterlayerproperties.h
Expand Up @@ -134,6 +134,10 @@ class GUI_EXPORT QgsRasterLayerProperties : public QgsOptionsDialogBase, private
//! \brief slot executed when user changes the layer's CRS
void mCrsSelector_crsChanged( const QgsCoordinateReferenceSystem &crs );

// Server properties
void addMetadataUrl();
void removeSelectedMetadataUrl();

/**
* updates gamma spinbox on slider changes
* \since QGIS 3.16
Expand Down Expand Up @@ -199,6 +203,8 @@ class GUI_EXPORT QgsRasterLayerProperties : public QgsOptionsDialogBase, private
QAction *mActionLoadMetadata = nullptr;
QAction *mActionSaveMetadataAs = nullptr;

QStandardItemModel *mMetadataUrlModel = nullptr;

//! A list of additional pages provided by plugins
QList<QgsMapLayerConfigWidget *> mLayerPropertiesPages;

Expand Down

0 comments on commit a3df6b6

Please sign in to comment.