mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
[FEATURE] Layer tree embedded widgets
This allows definition of widgets embedded into layer tree for individual layers in the layer properties dialog (in new Legend tab). The idea is to have a way to quickly access to some actions that are often used with a layer. The implementation comes with transparency widget, in the future there may be more standard widgets coming, e.g. to setup filtering, selection, style or other stuff. The API allows plugins to register their own widgets, which will be useful for various domain specific plugins to assign custom widgets to layers they manage.
This commit is contained in:
commit
9c7dbb9e09
@ -75,7 +75,7 @@ class QgsDataItem : QObject
|
||||
|
||||
/** Create children. Children are not expected to have parent set.
|
||||
* This method MUST BE THREAD SAFE. */
|
||||
virtual QVector<QgsDataItem*> createChildren();
|
||||
virtual QVector<QgsDataItem*> createChildren() /Factory/;
|
||||
|
||||
enum State
|
||||
{
|
||||
|
@ -198,6 +198,8 @@
|
||||
%Include auth/qgsauthtrustedcasdialog.sip
|
||||
|
||||
%Include layertree/qgscustomlayerorderwidget.sip
|
||||
%Include layertree/qgslayertreeembeddedconfigwidget.sip
|
||||
%Include layertree/qgslayertreeembeddedwidgetregistry.sip
|
||||
%Include layertree/qgslayertreemapcanvasbridge.sip
|
||||
%Include layertree/qgslayertreeview.sip
|
||||
%Include layertree/qgslayertreeviewdefaultactions.sip
|
||||
|
22
python/gui/layertree/qgslayertreeembeddedconfigwidget.sip
Normal file
22
python/gui/layertree/qgslayertreeembeddedconfigwidget.sip
Normal file
@ -0,0 +1,22 @@
|
||||
|
||||
/** \ingroup gui
|
||||
* \class QgsLayerTreeEmbeddedConfigWidget
|
||||
* A widget to configure layer tree embedded widgets for a particular map layer.
|
||||
* @note introduced in QGIS 2.16
|
||||
*/
|
||||
class QgsLayerTreeEmbeddedConfigWidget : public QWidget
|
||||
{
|
||||
%TypeHeaderCode
|
||||
#include <qgslayertreeembeddedconfigwidget.h>
|
||||
%End
|
||||
|
||||
public:
|
||||
QgsLayerTreeEmbeddedConfigWidget( QWidget* parent /TransferThis/ = nullptr );
|
||||
|
||||
//! Initialize widget with a map layer
|
||||
void setLayer( QgsMapLayer* layer );
|
||||
|
||||
//! Store changes made in the widget to the layer
|
||||
void applyToLayer();
|
||||
|
||||
};
|
72
python/gui/layertree/qgslayertreeembeddedwidgetregistry.sip
Normal file
72
python/gui/layertree/qgslayertreeembeddedwidgetregistry.sip
Normal file
@ -0,0 +1,72 @@
|
||||
|
||||
/** \ingroup gui
|
||||
* \class QgsLayerTreeEmbeddedWidgetProvider
|
||||
* Provider interface to be implemented in order to introduce new kinds of embedded widgets for use in layer tree.
|
||||
* Embedded widgets are assigned per individual map layers and they are shown before any legend entries.
|
||||
* @see QgsLayerTreeEmbeddedWidgetRegistry
|
||||
* @note introduced in QGIS 2.16
|
||||
*/
|
||||
class QgsLayerTreeEmbeddedWidgetProvider
|
||||
{
|
||||
%TypeHeaderCode
|
||||
#include <qgslayertreeembeddedwidgetregistry.h>
|
||||
%End
|
||||
|
||||
public:
|
||||
virtual ~QgsLayerTreeEmbeddedWidgetProvider();
|
||||
|
||||
//! Unique name of the provider (among other providers)
|
||||
virtual QString id() const = 0;
|
||||
|
||||
//! Human readable name - may be translatable with tr()
|
||||
virtual QString name() const = 0;
|
||||
|
||||
//! Factory to create widgets. The returned widget is owned by the caller.
|
||||
//! The widgetIndex argument may be used to identify which widget is being
|
||||
//! created (useful when using multiple widgets from the same provider for one layer).
|
||||
virtual QWidget* createWidget( QgsMapLayer* layer, int widgetIndex ) = 0 /Factory/;
|
||||
|
||||
//! Whether it makes sense to use this widget for a particular layer
|
||||
virtual bool supportsLayer( QgsMapLayer* layer ) = 0;
|
||||
};
|
||||
|
||||
/** \ingroup gui
|
||||
* \class QgsLayerTreeEmbeddedWidgetRegistry
|
||||
* Registry of widgets that may be embedded into layer tree view.
|
||||
* Embedded widgets are assigned per individual map layers and they are shown before any legend entries.
|
||||
* Layer tree must have UseEmbeddedWidgets flag enabled in order to show assigned widgets.
|
||||
*
|
||||
* @see QgsLayerTreeEmbeddedWidgetRegistry
|
||||
* @note introduced in QGIS 2.16
|
||||
*/
|
||||
class QgsLayerTreeEmbeddedWidgetRegistry
|
||||
{
|
||||
%TypeHeaderCode
|
||||
#include <qgslayertreeembeddedwidgetregistry.h>
|
||||
%End
|
||||
|
||||
public:
|
||||
|
||||
/** Means of accessing canonical single instance */
|
||||
static QgsLayerTreeEmbeddedWidgetRegistry* instance();
|
||||
|
||||
~QgsLayerTreeEmbeddedWidgetRegistry();
|
||||
|
||||
/** Return list of all registered providers */
|
||||
QStringList providers() const;
|
||||
|
||||
/** Get provider object from the provider's ID */
|
||||
QgsLayerTreeEmbeddedWidgetProvider* provider( const QString& providerId ) const;
|
||||
|
||||
/** Register a provider, takes ownership of the object.
|
||||
* Returns true on success, false if the provider is already registered. */
|
||||
bool addProvider( QgsLayerTreeEmbeddedWidgetProvider* provider /Transfer/ );
|
||||
|
||||
/** Unregister a provider, the provider object is deleted.
|
||||
* Returns true on success, false if the provider was not registered. */
|
||||
bool removeProvider( const QString& providerId );
|
||||
|
||||
protected:
|
||||
//! Protected constructor - use instance() to access the registry.
|
||||
QgsLayerTreeEmbeddedWidgetRegistry();
|
||||
};
|
@ -2938,6 +2938,7 @@ void QgisApp::initLayerTreeView()
|
||||
model->setFlag( QgsLayerTreeModel::AllowNodeRename );
|
||||
model->setFlag( QgsLayerTreeModel::AllowNodeChangeVisibility );
|
||||
model->setFlag( QgsLayerTreeModel::ShowLegendAsTree );
|
||||
model->setFlag( QgsLayerTreeModel::UseEmbeddedWidgets );
|
||||
model->setAutoCollapseLegendNodes( 10 );
|
||||
|
||||
mLayerTreeView->setModel( model );
|
||||
|
@ -797,6 +797,12 @@ void QgsRasterLayerProperties::sync()
|
||||
|
||||
mLayerLegendUrlLineEdit->setText( mRasterLayer->legendUrl() );
|
||||
mLayerLegendUrlFormatComboBox->setCurrentIndex( mLayerLegendUrlFormatComboBox->findText( mRasterLayer->legendUrlFormat() ) );
|
||||
|
||||
/*
|
||||
* Legend Tab
|
||||
*/
|
||||
mLegendConfigEmbeddedWidget->setLayer( mRasterLayer );
|
||||
|
||||
} // QgsRasterLayerProperties::sync()
|
||||
|
||||
/*
|
||||
@ -806,6 +812,11 @@ void QgsRasterLayerProperties::sync()
|
||||
*/
|
||||
void QgsRasterLayerProperties::apply()
|
||||
{
|
||||
/*
|
||||
* Legend Tab
|
||||
*/
|
||||
mLegendConfigEmbeddedWidget->applyToLayer();
|
||||
|
||||
QgsDebugMsg( "apply processing symbology tab" );
|
||||
/*
|
||||
* Symbology Tab
|
||||
|
@ -251,6 +251,9 @@ QgsVectorLayerProperties::QgsVectorLayerProperties(
|
||||
diagLayout->addWidget( diagramPropertiesDialog );
|
||||
mDiagramFrame->setLayout( diagLayout );
|
||||
|
||||
// Legend tab
|
||||
mLegendConfigEmbeddedWidget->setLayer( mLayer );
|
||||
|
||||
// WMS Name as layer short name
|
||||
mLayerShortNameLineEdit->setText( mLayer->shortName() );
|
||||
// WMS Name validator
|
||||
@ -535,6 +538,9 @@ void QgsVectorLayerProperties::apply()
|
||||
labelingDialog->writeSettingsToLayer();
|
||||
}
|
||||
|
||||
// apply legend settings
|
||||
mLegendConfigEmbeddedWidget->applyToLayer();
|
||||
|
||||
//
|
||||
// Set up sql subset query if applicable
|
||||
//
|
||||
|
@ -33,6 +33,27 @@
|
||||
#include "qgsvectorlayer.h"
|
||||
|
||||
|
||||
/** In order to support embedded widgets in layer tree view, the model
|
||||
* generates one placeholder legend node for each embedded widget.
|
||||
* The placeholder will be replaced by an embedded widget in QgsLayerTreeView
|
||||
*/
|
||||
class EmbeddedWidgetLegendNode : public QgsLayerTreeModelLegendNode
|
||||
{
|
||||
public:
|
||||
EmbeddedWidgetLegendNode( QgsLayerTreeLayer* nodeL )
|
||||
: QgsLayerTreeModelLegendNode( nodeL )
|
||||
{
|
||||
}
|
||||
|
||||
virtual QVariant data( int role ) const override
|
||||
{
|
||||
Q_UNUSED( role );
|
||||
return QVariant();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
QgsLayerTreeModel::QgsLayerTreeModel( QgsLayerTreeGroup* rootNode, QObject *parent )
|
||||
: QAbstractItemModel( parent )
|
||||
, mRootNode( rootNode )
|
||||
@ -1169,9 +1190,20 @@ void QgsLayerTreeModel::addLegendToLayer( QgsLayerTreeLayer* nodeL )
|
||||
// apply filtering defined in layer node's custom properties (reordering, filtering, custom labels)
|
||||
QgsMapLayerLegendUtils::applyLayerNodeProperties( nodeL, lstNew );
|
||||
|
||||
if ( testFlag( UseEmbeddedWidgets ) )
|
||||
{
|
||||
// generate placeholder legend nodes that will be replaced by widgets in QgsLayerTreeView
|
||||
int widgetsCount = ml->customProperty( "embeddedWidgets/count", 0 ).toInt();
|
||||
while ( widgetsCount > 0 )
|
||||
{
|
||||
lstNew.insert( 0, new EmbeddedWidgetLegendNode( nodeL ) );
|
||||
--widgetsCount;
|
||||
}
|
||||
}
|
||||
|
||||
QList<QgsLayerTreeModelLegendNode*> filteredLstNew = filterLegendNodes( lstNew );
|
||||
|
||||
bool isEmbedded = filteredLstNew.count() == 1 && filteredLstNew[0]->isEmbeddedInParent();
|
||||
bool hasOnlyEmbedded = filteredLstNew.count() == 1 && filteredLstNew[0]->isEmbeddedInParent();
|
||||
|
||||
Q_FOREACH ( QgsLayerTreeModelLegendNode* n, lstNew )
|
||||
{
|
||||
@ -1190,11 +1222,11 @@ void QgsLayerTreeModel::addLegendToLayer( QgsLayerTreeLayer* nodeL )
|
||||
|
||||
int count = data.tree ? data.tree->children[nullptr].count() : filteredLstNew.count();
|
||||
|
||||
if ( ! isEmbedded ) beginInsertRows( node2index( nodeL ), 0, count - 1 );
|
||||
if ( ! hasOnlyEmbedded ) beginInsertRows( node2index( nodeL ), 0, count - 1 );
|
||||
|
||||
mLegend[nodeL] = data;
|
||||
|
||||
if ( ! isEmbedded ) endInsertRows();
|
||||
if ( ! hasOnlyEmbedded ) endInsertRows();
|
||||
|
||||
if ( hasStyleOverride )
|
||||
ml->styleManager()->restoreOverrideStyle();
|
||||
@ -1291,9 +1323,6 @@ int QgsLayerTreeModel::legendNodeRowCount( QgsLayerTreeModelLegendNode* node ) c
|
||||
|
||||
int QgsLayerTreeModel::legendRootRowCount( QgsLayerTreeLayer* nL ) const
|
||||
{
|
||||
if ( legendEmbeddedInParent( nL ) )
|
||||
return 0;
|
||||
|
||||
if ( !mLegend.contains( nL ) )
|
||||
return 0;
|
||||
|
||||
@ -1301,7 +1330,12 @@ int QgsLayerTreeModel::legendRootRowCount( QgsLayerTreeLayer* nL ) const
|
||||
if ( data.tree )
|
||||
return data.tree->children[nullptr].count();
|
||||
|
||||
return data.activeNodes.count();
|
||||
int count = data.activeNodes.count();
|
||||
|
||||
if ( legendEmbeddedInParent( nL ) )
|
||||
count--; // one item less -- it is embedded in parent
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
@ -1365,14 +1399,29 @@ Qt::ItemFlags QgsLayerTreeModel::legendNodeFlags( QgsLayerTreeModelLegendNode* n
|
||||
|
||||
bool QgsLayerTreeModel::legendEmbeddedInParent( QgsLayerTreeLayer* nodeLayer ) const
|
||||
{
|
||||
return legendNodeEmbeddedInParent( nodeLayer );
|
||||
}
|
||||
|
||||
QgsLayerTreeModelLegendNode* QgsLayerTreeModel::legendNodeEmbeddedInParent( QgsLayerTreeLayer* nodeLayer ) const
|
||||
{
|
||||
// legend node embedded in parent does not have to be the first one...
|
||||
// there could be extra legend nodes generated for embedded widgets
|
||||
const LayerLegendData& data = mLegend[nodeLayer];
|
||||
return data.activeNodes.count() == 1 && data.activeNodes[0]->isEmbeddedInParent();
|
||||
Q_FOREACH ( QgsLayerTreeModelLegendNode* legendNode, data.activeNodes )
|
||||
{
|
||||
if ( legendNode->isEmbeddedInParent() )
|
||||
return legendNode;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
QIcon QgsLayerTreeModel::legendIconEmbeddedInParent( QgsLayerTreeLayer* nodeLayer ) const
|
||||
{
|
||||
return QIcon( qvariant_cast<QPixmap>( mLegend[nodeLayer].activeNodes[0]->data( Qt::DecorationRole ) ) );
|
||||
QgsLayerTreeModelLegendNode* legendNode = legendNodeEmbeddedInParent( nodeLayer );
|
||||
if ( !legendNode )
|
||||
return QIcon();
|
||||
return QIcon( qvariant_cast<QPixmap>( legendNode->data( Qt::DecorationRole ) ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -80,6 +80,7 @@ class CORE_EXPORT QgsLayerTreeModel : public QAbstractItemModel
|
||||
ShowRasterPreviewIcon = 0x0002, //!< Will use real preview of raster layer as icon (may be slow)
|
||||
ShowLegendAsTree = 0x0004, //!< For legends that support it, will show them in a tree instead of a list (needs also ShowLegend). Added in 2.8
|
||||
DeferredLegendInvalidation = 0x0008, //!< defer legend model invalidation
|
||||
UseEmbeddedWidgets = 0x0010, //!< Layer nodes may optionally include extra embedded widgets (if used in QgsLayerTreeView). Added in 2.16
|
||||
|
||||
// behavioral flags
|
||||
AllowNodeReorder = 0x1000, //!< Allow reordering with drag'n'drop
|
||||
@ -276,6 +277,8 @@ class CORE_EXPORT QgsLayerTreeModel : public QAbstractItemModel
|
||||
QVariant legendNodeData( QgsLayerTreeModelLegendNode* node, int role ) const;
|
||||
Qt::ItemFlags legendNodeFlags( QgsLayerTreeModelLegendNode* node ) const;
|
||||
bool legendEmbeddedInParent( QgsLayerTreeLayer* nodeLayer ) const;
|
||||
/** Return legend node that may be embbeded in parent (i.e. its icon will be used for layer's icon). */
|
||||
QgsLayerTreeModelLegendNode* legendNodeEmbeddedInParent( QgsLayerTreeLayer* nodeLayer ) const;
|
||||
QIcon legendIconEmbeddedInParent( QgsLayerTreeLayer* nodeLayer ) const;
|
||||
void legendCleanup();
|
||||
void legendInvalidateMapBasedData();
|
||||
|
@ -154,6 +154,9 @@ SET(QGIS_GUI_SRCS
|
||||
editorwidgets/qgsvaluerelationwidgetfactory.cpp
|
||||
|
||||
layertree/qgscustomlayerorderwidget.cpp
|
||||
layertree/qgslayertreeembeddedconfigwidget.cpp
|
||||
layertree/qgslayertreeembeddedwidgetregistry.cpp
|
||||
layertree/qgslayertreeembeddedwidgetsimpl.cpp
|
||||
layertree/qgslayertreemapcanvasbridge.cpp
|
||||
layertree/qgslayertreeview.cpp
|
||||
layertree/qgslayertreeviewdefaultactions.cpp
|
||||
@ -584,6 +587,8 @@ SET(QGIS_GUI_MOC_HDRS
|
||||
editorwidgets/qgsvaluerelationwidgetwrapper.h
|
||||
|
||||
layertree/qgscustomlayerorderwidget.h
|
||||
layertree/qgslayertreeembeddedconfigwidget.h
|
||||
layertree/qgslayertreeembeddedwidgetsimpl.h
|
||||
layertree/qgslayertreemapcanvasbridge.h
|
||||
layertree/qgslayertreeview.h
|
||||
layertree/qgslayertreeviewdefaultactions.h
|
||||
@ -679,6 +684,9 @@ SET(QGIS_GUI_HDRS
|
||||
editorwidgets/qgsvaluemapwidgetfactory.h
|
||||
editorwidgets/qgsvaluerelationwidgetfactory.h
|
||||
|
||||
layertree/qgslayertreeembeddedconfigwidget.h
|
||||
layertree/qgslayertreeembeddedwidgetregistry.h
|
||||
|
||||
raster/qgsrasterrendererwidget.h
|
||||
)
|
||||
|
||||
|
116
src/gui/layertree/qgslayertreeembeddedconfigwidget.cpp
Normal file
116
src/gui/layertree/qgslayertreeembeddedconfigwidget.cpp
Normal file
@ -0,0 +1,116 @@
|
||||
/***************************************************************************
|
||||
qgslayertreeembeddedconfigwidget.cpp
|
||||
--------------------------------------
|
||||
Date : May 2016
|
||||
Copyright : (C) 2016 by Martin Dobias
|
||||
Email : wonder dot sk at gmail 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 "qgslayertreeembeddedconfigwidget.h"
|
||||
|
||||
#include "qgsmaplayer.h"
|
||||
#include "qgslayertreeembeddedwidgetregistry.h"
|
||||
|
||||
#include <QStringListModel>
|
||||
#include <QStandardItemModel>
|
||||
|
||||
QgsLayerTreeEmbeddedConfigWidget::QgsLayerTreeEmbeddedConfigWidget( QWidget* parent )
|
||||
: QWidget( parent )
|
||||
, mLayer( nullptr )
|
||||
{
|
||||
setupUi( this );
|
||||
}
|
||||
|
||||
void QgsLayerTreeEmbeddedConfigWidget::setLayer( QgsMapLayer* layer )
|
||||
{
|
||||
mLayer = layer;
|
||||
|
||||
connect( mBtnAdd, SIGNAL( clicked( bool ) ), this, SLOT( onAddClicked() ) );
|
||||
connect( mBtnRemove, SIGNAL( clicked( bool ) ), this, SLOT( onRemoveClicked() ) );
|
||||
|
||||
QStandardItemModel* modelAvailable = new QStandardItemModel( this );
|
||||
QStandardItemModel* modelUsed = new QStandardItemModel( this );
|
||||
|
||||
// populate available
|
||||
Q_FOREACH ( const QString& providerId, QgsLayerTreeEmbeddedWidgetRegistry::instance()->providers() )
|
||||
{
|
||||
QgsLayerTreeEmbeddedWidgetProvider* provider = QgsLayerTreeEmbeddedWidgetRegistry::instance()->provider( providerId );
|
||||
QStandardItem* item = new QStandardItem( provider->name() );
|
||||
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
|
||||
item->setData( provider->id(), Qt::UserRole + 1 );
|
||||
modelAvailable->appendRow( item );
|
||||
}
|
||||
mListAvailable->setModel( modelAvailable );
|
||||
|
||||
// populate used
|
||||
int widgetsCount = layer->customProperty( "embeddedWidgets/count", 0 ).toInt();
|
||||
for ( int i = 0; i < widgetsCount; ++i )
|
||||
{
|
||||
QString providerId = layer->customProperty( QString( "embeddedWidgets/%1/id" ).arg( i ) ).toString();
|
||||
if ( QgsLayerTreeEmbeddedWidgetProvider* provider = QgsLayerTreeEmbeddedWidgetRegistry::instance()->provider( providerId ) )
|
||||
{
|
||||
QStandardItem* item = new QStandardItem( provider->name() );
|
||||
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
|
||||
item->setData( provider->id(), Qt::UserRole + 1 );
|
||||
modelUsed->appendRow( item );
|
||||
}
|
||||
}
|
||||
mListUsed->setModel( modelUsed );
|
||||
}
|
||||
|
||||
void QgsLayerTreeEmbeddedConfigWidget::onAddClicked()
|
||||
{
|
||||
if ( !mListAvailable->currentIndex().isValid() )
|
||||
return;
|
||||
|
||||
QString providerId = mListAvailable->model()->data( mListAvailable->currentIndex(), Qt::UserRole + 1 ).toString();
|
||||
QgsLayerTreeEmbeddedWidgetProvider* provider = QgsLayerTreeEmbeddedWidgetRegistry::instance()->provider( providerId );
|
||||
if ( !provider )
|
||||
return;
|
||||
|
||||
if ( QStandardItemModel* model = qobject_cast<QStandardItemModel*>( mListUsed->model() ) )
|
||||
{
|
||||
QStandardItem* item = new QStandardItem( provider->name() );
|
||||
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
|
||||
item->setData( provider->id(), Qt::UserRole + 1 );
|
||||
model->appendRow( item );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsLayerTreeEmbeddedConfigWidget::onRemoveClicked()
|
||||
{
|
||||
if ( !mListUsed->currentIndex().isValid() )
|
||||
return;
|
||||
|
||||
int row = mListUsed->currentIndex().row();
|
||||
mListUsed->model()->removeRow( row );
|
||||
}
|
||||
|
||||
void QgsLayerTreeEmbeddedConfigWidget::applyToLayer()
|
||||
{
|
||||
if ( !mLayer )
|
||||
return;
|
||||
|
||||
// clear old properties
|
||||
int widgetsCount = mLayer->customProperty( "embeddedWidgets/count", 0 ).toInt();
|
||||
for ( int i = 0; i < widgetsCount; ++i )
|
||||
{
|
||||
mLayer->removeCustomProperty( QString( "embeddedWidgets/%1/id" ).arg( i ) );
|
||||
}
|
||||
|
||||
// setup new properties
|
||||
int newCount = mListUsed->model()->rowCount();
|
||||
mLayer->setCustomProperty( "embeddedWidgets/count", newCount );
|
||||
for ( int i = 0; i < newCount; ++i )
|
||||
{
|
||||
QString providerId = mListUsed->model()->data( mListUsed->model()->index( i, 0 ), Qt::UserRole + 1 ).toString();
|
||||
mLayer->setCustomProperty( QString( "embeddedWidgets/%1/id" ).arg( i ), providerId );
|
||||
}
|
||||
}
|
48
src/gui/layertree/qgslayertreeembeddedconfigwidget.h
Normal file
48
src/gui/layertree/qgslayertreeembeddedconfigwidget.h
Normal file
@ -0,0 +1,48 @@
|
||||
/***************************************************************************
|
||||
qgslayertreeembeddedconfigwidget.h
|
||||
--------------------------------------
|
||||
Date : May 2016
|
||||
Copyright : (C) 2016 by Martin Dobias
|
||||
Email : wonder dot sk at gmail 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 QGSLAYERTREEEMBEDDEDCONFIGWIDGET_H
|
||||
#define QGSLAYERTREEEMBEDDEDCONFIGWIDGET_H
|
||||
|
||||
#include "ui_qgslayertreeembeddedconfigwidget.h"
|
||||
|
||||
class QgsMapLayer;
|
||||
|
||||
/** \ingroup gui
|
||||
* \class QgsLayerTreeEmbeddedConfigWidget
|
||||
* A widget to configure layer tree embedded widgets for a particular map layer.
|
||||
* @note introduced in QGIS 2.16
|
||||
*/
|
||||
class GUI_EXPORT QgsLayerTreeEmbeddedConfigWidget : public QWidget, protected Ui::QgsLayerTreeEmbeddedConfigWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
QgsLayerTreeEmbeddedConfigWidget( QWidget* parent = nullptr );
|
||||
|
||||
//! Initialize widget with a map layer
|
||||
void setLayer( QgsMapLayer* layer );
|
||||
|
||||
//! Store changes made in the widget to the layer
|
||||
void applyToLayer();
|
||||
|
||||
private slots:
|
||||
void onAddClicked();
|
||||
void onRemoveClicked();
|
||||
|
||||
private:
|
||||
QgsMapLayer* mLayer;
|
||||
};
|
||||
|
||||
#endif // QGSLAYERTREEEMBEDDEDCONFIGWIDGET_H
|
68
src/gui/layertree/qgslayertreeembeddedwidgetregistry.cpp
Normal file
68
src/gui/layertree/qgslayertreeembeddedwidgetregistry.cpp
Normal file
@ -0,0 +1,68 @@
|
||||
/***************************************************************************
|
||||
qgslayertreeembeddedwidgetregistry.cpp
|
||||
--------------------------------------
|
||||
Date : May 2016
|
||||
Copyright : (C) 2016 by Martin Dobias
|
||||
Email : wonder dot sk at gmail 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 "qgslayertreeembeddedwidgetregistry.h"
|
||||
|
||||
#include "qgslayertreeembeddedwidgetsimpl.h"
|
||||
|
||||
|
||||
|
||||
QgsLayerTreeEmbeddedWidgetRegistry* QgsLayerTreeEmbeddedWidgetRegistry::instance()
|
||||
{
|
||||
static QgsLayerTreeEmbeddedWidgetRegistry* sInstance( new QgsLayerTreeEmbeddedWidgetRegistry() );
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
QgsLayerTreeEmbeddedWidgetRegistry::QgsLayerTreeEmbeddedWidgetRegistry()
|
||||
{
|
||||
// populate with default implementations
|
||||
addProvider( new QgsLayerTreeTransparencyWidget::Provider() );
|
||||
}
|
||||
|
||||
QgsLayerTreeEmbeddedWidgetRegistry::~QgsLayerTreeEmbeddedWidgetRegistry()
|
||||
{
|
||||
Q_FOREACH ( QgsLayerTreeEmbeddedWidgetProvider* provider, mProviders )
|
||||
{
|
||||
removeProvider( provider->id() );
|
||||
}
|
||||
}
|
||||
|
||||
QStringList QgsLayerTreeEmbeddedWidgetRegistry::providers() const
|
||||
{
|
||||
return mProviders.keys();
|
||||
}
|
||||
|
||||
QgsLayerTreeEmbeddedWidgetProvider* QgsLayerTreeEmbeddedWidgetRegistry::provider( const QString& providerId ) const
|
||||
{
|
||||
return mProviders.value( providerId );
|
||||
}
|
||||
|
||||
bool QgsLayerTreeEmbeddedWidgetRegistry::addProvider( QgsLayerTreeEmbeddedWidgetProvider* provider )
|
||||
{
|
||||
if ( mProviders.contains( provider->id() ) )
|
||||
return false;
|
||||
|
||||
mProviders.insert( provider->id(), provider );
|
||||
return true;
|
||||
}
|
||||
|
||||
bool QgsLayerTreeEmbeddedWidgetRegistry::removeProvider( const QString& providerId )
|
||||
{
|
||||
if ( !mProviders.contains( providerId ) )
|
||||
return false;
|
||||
|
||||
delete mProviders.take( providerId );
|
||||
return true;
|
||||
}
|
93
src/gui/layertree/qgslayertreeembeddedwidgetregistry.h
Normal file
93
src/gui/layertree/qgslayertreeembeddedwidgetregistry.h
Normal file
@ -0,0 +1,93 @@
|
||||
/***************************************************************************
|
||||
qgslayertreeembeddedwidgetregistry.h
|
||||
--------------------------------------
|
||||
Date : May 2016
|
||||
Copyright : (C) 2016 by Martin Dobias
|
||||
Email : wonder dot sk at gmail 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 QGSLAYERTREEEMBEDDEDWIDGETREGISTRY_H
|
||||
#define QGSLAYERTREEEMBEDDEDWIDGETREGISTRY_H
|
||||
|
||||
#include <QMap>
|
||||
#include <QWidget>
|
||||
|
||||
|
||||
class QgsMapLayer;
|
||||
|
||||
/** \ingroup gui
|
||||
* \class QgsLayerTreeEmbeddedWidgetProvider
|
||||
* Provider interface to be implemented in order to introduce new kinds of embedded widgets for use in layer tree.
|
||||
* Embedded widgets are assigned per individual map layers and they are shown before any legend entries.
|
||||
* @see QgsLayerTreeEmbeddedWidgetRegistry
|
||||
* @note introduced in QGIS 2.16
|
||||
*/
|
||||
class GUI_EXPORT QgsLayerTreeEmbeddedWidgetProvider
|
||||
{
|
||||
public:
|
||||
virtual ~QgsLayerTreeEmbeddedWidgetProvider() {}
|
||||
|
||||
//! Unique name of the provider (among other providers)
|
||||
virtual QString id() const = 0;
|
||||
|
||||
//! Human readable name - may be translatable with tr()
|
||||
virtual QString name() const = 0;
|
||||
|
||||
//! Factory to create widgets. The returned widget is owned by the caller.
|
||||
//! The widgetIndex argument may be used to identify which widget is being
|
||||
//! created (useful when using multiple widgets from the same provider for one layer).
|
||||
virtual QWidget* createWidget( QgsMapLayer* layer, int widgetIndex ) = 0;
|
||||
|
||||
//! Whether it makes sense to use this widget for a particular layer
|
||||
virtual bool supportsLayer( QgsMapLayer* layer ) = 0;
|
||||
};
|
||||
|
||||
/** \ingroup gui
|
||||
* \class QgsLayerTreeEmbeddedWidgetRegistry
|
||||
* Registry of widgets that may be embedded into layer tree view.
|
||||
* Embedded widgets are assigned per individual map layers and they are shown before any legend entries.
|
||||
* Layer tree must have UseEmbeddedWidgets flag enabled in order to show assigned widgets.
|
||||
*
|
||||
* @see QgsLayerTreeEmbeddedWidgetRegistry
|
||||
* @note introduced in QGIS 2.16
|
||||
*/
|
||||
class GUI_EXPORT QgsLayerTreeEmbeddedWidgetRegistry
|
||||
{
|
||||
public:
|
||||
|
||||
/** Means of accessing canonical single instance */
|
||||
static QgsLayerTreeEmbeddedWidgetRegistry* instance();
|
||||
|
||||
~QgsLayerTreeEmbeddedWidgetRegistry();
|
||||
|
||||
/** Return list of all registered providers */
|
||||
QStringList providers() const;
|
||||
|
||||
/** Get provider object from the provider's ID */
|
||||
QgsLayerTreeEmbeddedWidgetProvider* provider( const QString& providerId ) const;
|
||||
|
||||
/** Register a provider, takes ownership of the object.
|
||||
* Returns true on success, false if the provider is already registered. */
|
||||
bool addProvider( QgsLayerTreeEmbeddedWidgetProvider* provider );
|
||||
|
||||
/** Unregister a provider, the provider object is deleted.
|
||||
* Returns true on success, false if the provider was not registered. */
|
||||
bool removeProvider( const QString& providerId );
|
||||
|
||||
protected:
|
||||
//! Protected constructor - use instance() to access the registry.
|
||||
QgsLayerTreeEmbeddedWidgetRegistry();
|
||||
|
||||
//! storage of all the providers
|
||||
QMap<QString, QgsLayerTreeEmbeddedWidgetProvider*> mProviders;
|
||||
};
|
||||
|
||||
|
||||
#endif // QGSLAYERTREEEMBEDDEDWIDGETREGISTRY_H
|
122
src/gui/layertree/qgslayertreeembeddedwidgetsimpl.cpp
Normal file
122
src/gui/layertree/qgslayertreeembeddedwidgetsimpl.cpp
Normal file
@ -0,0 +1,122 @@
|
||||
/***************************************************************************
|
||||
qgslayertreeembeddedwidgetsimpl.h
|
||||
--------------------------------------
|
||||
Date : May 2016
|
||||
Copyright : (C) 2016 by Martin Dobias
|
||||
Email : wonder dot sk at gmail 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 "qgslayertreeembeddedwidgetsimpl.h"
|
||||
|
||||
#include <QHBoxLayout>
|
||||
#include <QLabel>
|
||||
#include <QSlider>
|
||||
#include <QTimer>
|
||||
|
||||
#include "qgsrasterlayer.h"
|
||||
#include "qgsrasterrenderer.h"
|
||||
#include "qgsvectorlayer.h"
|
||||
|
||||
|
||||
|
||||
|
||||
QgsLayerTreeTransparencyWidget::QgsLayerTreeTransparencyWidget( QgsMapLayer* layer )
|
||||
: mLayer( layer )
|
||||
{
|
||||
setAutoFillBackground( true ); // override the content from model
|
||||
QLabel* l = new QLabel( "Transparency", this );
|
||||
mSlider = new QSlider( Qt::Horizontal, this );
|
||||
mSlider->setRange( 0, 100 );
|
||||
QHBoxLayout* lay = new QHBoxLayout();
|
||||
lay->addWidget( l );
|
||||
lay->addWidget( mSlider );
|
||||
setLayout( lay );
|
||||
|
||||
// timer for delayed transparency update - for more responsive GUI
|
||||
mTimer = new QTimer( this );
|
||||
mTimer->setSingleShot( true );
|
||||
mTimer->setInterval( 100 );
|
||||
connect( mTimer, SIGNAL( timeout() ), this, SLOT( updateTransparencyFromSlider() ) );
|
||||
|
||||
connect( mSlider, SIGNAL( valueChanged( int ) ), this, SLOT( sliderValueChanged( int ) ) );
|
||||
|
||||
// init from layer
|
||||
if ( mLayer->type() == QgsMapLayer::VectorLayer )
|
||||
{
|
||||
mSlider->setValue( qobject_cast<QgsVectorLayer*>( mLayer )->layerTransparency() );
|
||||
connect( mLayer, SIGNAL( layerTransparencyChanged( int ) ), this, SLOT( layerTrChanged() ) );
|
||||
}
|
||||
else if ( mLayer->type() == QgsMapLayer::RasterLayer )
|
||||
{
|
||||
mSlider->setValue( 100 - qobject_cast<QgsRasterLayer*>( mLayer )->renderer()->opacity() * 100 );
|
||||
// TODO: there is no signal for raster layers
|
||||
}
|
||||
}
|
||||
|
||||
QSize QgsLayerTreeTransparencyWidget::sizeHint() const
|
||||
{
|
||||
return QWidget::sizeHint();
|
||||
//return QSize(200,200); // horizontal seems ignored, vertical is used for spacing
|
||||
}
|
||||
|
||||
void QgsLayerTreeTransparencyWidget::sliderValueChanged( int value )
|
||||
{
|
||||
Q_UNUSED( value );
|
||||
|
||||
if ( mTimer->isActive() )
|
||||
return;
|
||||
mTimer->start();
|
||||
}
|
||||
|
||||
void QgsLayerTreeTransparencyWidget::updateTransparencyFromSlider()
|
||||
{
|
||||
int value = mSlider->value();
|
||||
|
||||
if ( mLayer->type() == QgsMapLayer::VectorLayer )
|
||||
{
|
||||
qobject_cast<QgsVectorLayer*>( mLayer )->setLayerTransparency( value );
|
||||
}
|
||||
else if ( mLayer->type() == QgsMapLayer::RasterLayer )
|
||||
{
|
||||
qobject_cast<QgsRasterLayer*>( mLayer )->renderer()->setOpacity( 1 - value / 100. );
|
||||
}
|
||||
|
||||
mLayer->triggerRepaint();
|
||||
}
|
||||
|
||||
void QgsLayerTreeTransparencyWidget::layerTrChanged()
|
||||
{
|
||||
mSlider->blockSignals( true );
|
||||
mSlider->setValue( qobject_cast<QgsVectorLayer*>( mLayer )->layerTransparency() );
|
||||
mSlider->blockSignals( false );
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
QString QgsLayerTreeTransparencyWidget::Provider::id() const
|
||||
{
|
||||
return "transparency";
|
||||
}
|
||||
|
||||
QString QgsLayerTreeTransparencyWidget::Provider::name() const
|
||||
{
|
||||
return tr( "Transparency slider" );
|
||||
}
|
||||
|
||||
QgsLayerTreeTransparencyWidget* QgsLayerTreeTransparencyWidget::Provider::createWidget( QgsMapLayer* layer, int widgetIndex )
|
||||
{
|
||||
Q_UNUSED( widgetIndex );
|
||||
return new QgsLayerTreeTransparencyWidget( layer );
|
||||
}
|
||||
|
||||
bool QgsLayerTreeTransparencyWidget::Provider::supportsLayer( QgsMapLayer* layer )
|
||||
{
|
||||
return layer->type() == QgsMapLayer::VectorLayer || layer->type() == QgsMapLayer::RasterLayer;
|
||||
}
|
60
src/gui/layertree/qgslayertreeembeddedwidgetsimpl.h
Normal file
60
src/gui/layertree/qgslayertreeembeddedwidgetsimpl.h
Normal file
@ -0,0 +1,60 @@
|
||||
/***************************************************************************
|
||||
qgslayertreeembeddedwidgetsimpl.h
|
||||
--------------------------------------
|
||||
Date : May 2016
|
||||
Copyright : (C) 2016 by Martin Dobias
|
||||
Email : wonder dot sk at gmail 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 QGSLAYERTREEEMBEDDEDWIDGETSIMPL_H
|
||||
#define QGSLAYERTREEEMBEDDEDWIDGETSIMPL_H
|
||||
|
||||
#include <QWidget>
|
||||
#include "qgslayertreeembeddedwidgetregistry.h"
|
||||
|
||||
|
||||
class QSlider;
|
||||
class QTimer;
|
||||
class QgsMapLayer;
|
||||
|
||||
/**
|
||||
* @brief Implementation of simple transparency widget to be used in layer tree view
|
||||
*
|
||||
* @note private class - not in QGIS API
|
||||
*/
|
||||
class QgsLayerTreeTransparencyWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
QgsLayerTreeTransparencyWidget( QgsMapLayer* layer );
|
||||
|
||||
virtual QSize sizeHint() const override;
|
||||
|
||||
class Provider : public QgsLayerTreeEmbeddedWidgetProvider
|
||||
{
|
||||
public:
|
||||
virtual QString id() const override;
|
||||
virtual QString name() const override;
|
||||
virtual QgsLayerTreeTransparencyWidget* createWidget( QgsMapLayer* layer, int widgetIndex ) override;
|
||||
virtual bool supportsLayer( QgsMapLayer *layer ) override;
|
||||
};
|
||||
|
||||
public slots:
|
||||
void sliderValueChanged( int value );
|
||||
void updateTransparencyFromSlider();
|
||||
void layerTrChanged();
|
||||
|
||||
private:
|
||||
QgsMapLayer* mLayer;
|
||||
QSlider* mSlider;
|
||||
QTimer* mTimer;
|
||||
};
|
||||
|
||||
#endif // QGSLAYERTREEEMBEDDEDWIDGETSIMPL_H
|
@ -16,6 +16,7 @@
|
||||
#include "qgslayertreeview.h"
|
||||
|
||||
#include "qgslayertree.h"
|
||||
#include "qgslayertreeembeddedwidgetregistry.h"
|
||||
#include "qgslayertreemodel.h"
|
||||
#include "qgslayertreemodellegendnode.h"
|
||||
#include "qgslayertreeviewdefaultactions.h"
|
||||
@ -24,6 +25,7 @@
|
||||
#include <QMenu>
|
||||
#include <QContextMenuEvent>
|
||||
|
||||
|
||||
QgsLayerTreeView::QgsLayerTreeView( QWidget *parent )
|
||||
: QTreeView( parent )
|
||||
, mDefaultActions( nullptr )
|
||||
@ -129,6 +131,27 @@ void QgsLayerTreeView::modelRowsInserted( const QModelIndex& index, int start, i
|
||||
if ( !parentNode )
|
||||
return;
|
||||
|
||||
// Embedded widgets - replace placeholders in the model by actual widgets
|
||||
if ( layerTreeModel()->testFlag( QgsLayerTreeModel::UseEmbeddedWidgets ) && QgsLayerTree::isLayer( parentNode ) )
|
||||
{
|
||||
QgsLayerTreeLayer* nodeLayer = QgsLayerTree::toLayer( parentNode );
|
||||
if ( QgsMapLayer* layer = nodeLayer->layer() )
|
||||
{
|
||||
int widgetsCount = layer->customProperty( "embeddedWidgets/count", 0 ).toInt();
|
||||
QList<QgsLayerTreeModelLegendNode*> legendNodes = layerTreeModel()->layerLegendNodes( nodeLayer );
|
||||
for ( int i = 0; i < widgetsCount; ++i )
|
||||
{
|
||||
QString providerId = layer->customProperty( QString( "embeddedWidgets/%1/id" ).arg( i ) ).toString();
|
||||
if ( QgsLayerTreeEmbeddedWidgetProvider* provider = QgsLayerTreeEmbeddedWidgetRegistry::instance()->provider( providerId ) )
|
||||
{
|
||||
QModelIndex index = layerTreeModel()->legendNode2index( legendNodes[i] );
|
||||
setIndexWidget( index, provider->createWidget( layer, i ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( QgsLayerTree::isLayer( parentNode ) )
|
||||
{
|
||||
// if ShowLegendAsTree flag is enabled in model, we may need to expand some legend nodes
|
||||
|
@ -77,8 +77,9 @@ ADD_LIBRARY (georefplugin MODULE ${GEOREF_SRCS} ${GEOREF_MOC_SRCS} ${GEOREF_RCC_
|
||||
INCLUDE_DIRECTORIES(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/../../ui
|
||||
../../core ../../core/geometry ../../core/raster ../../core/composer
|
||||
../../gui ../../gui/editorwidgets
|
||||
../../gui ../../gui/editorwidgets ../../gui/layertree
|
||||
..
|
||||
)
|
||||
INCLUDE_DIRECTORIES(SYSTEM
|
||||
|
95
src/ui/qgslayertreeembeddedconfigwidget.ui
Normal file
95
src/ui/qgslayertreeembeddedconfigwidget.ui
Normal file
@ -0,0 +1,95 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>QgsLayerTreeEmbeddedConfigWidget</class>
|
||||
<widget class="QWidget" name="QgsLayerTreeEmbeddedConfigWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>580</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Available widgets</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Used widgets</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QListView" name="mListAvailable"/>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="mBtnAdd">
|
||||
<property name="text">
|
||||
<string>-></string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/mActionArrowRight.png</normaloff>:/images/themes/default/mActionArrowRight.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="mBtnRemove">
|
||||
<property name="text">
|
||||
<string><-</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/mActionArrowLeft.png</normaloff>:/images/themes/default/mActionArrowLeft.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QListView" name="mListUsed"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../../images/images.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
@ -161,6 +161,15 @@
|
||||
<normaloff>:/images/themes/default/propertyicons/metadata.png</normaloff>:/images/themes/default/propertyicons/metadata.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Legend</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/legend.svg</normaloff>:/images/themes/default/legend.svg</iconset>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@ -229,8 +238,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>615</width>
|
||||
<height>542</height>
|
||||
<width>617</width>
|
||||
<height>541</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
@ -454,8 +463,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>615</width>
|
||||
<height>542</height>
|
||||
<width>603</width>
|
||||
<height>544</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_10">
|
||||
@ -1085,8 +1094,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>615</width>
|
||||
<height>542</height>
|
||||
<width>617</width>
|
||||
<height>541</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
@ -1501,8 +1510,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>615</width>
|
||||
<height>542</height>
|
||||
<width>659</width>
|
||||
<height>527</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_12">
|
||||
@ -1565,8 +1574,8 @@
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Cantarell';"><br /></span></p></body></html></string>
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:13pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Cantarell'; font-size:11pt;"><br /></span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -1671,8 +1680,8 @@ p, li { white-space: pre-wrap; }
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>615</width>
|
||||
<height>542</height>
|
||||
<width>617</width>
|
||||
<height>541</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_16">
|
||||
@ -1729,9 +1738,9 @@ p, li { white-space: pre-wrap; }
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>-99</y>
|
||||
<width>599</width>
|
||||
<height>641</height>
|
||||
<y>0</y>
|
||||
<width>603</width>
|
||||
<height>697</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_12">
|
||||
@ -2120,6 +2129,22 @@ p, li { white-space: pre-wrap; }
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Legend">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_18">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Embedded widgets in legend</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_17">
|
||||
<item>
|
||||
<widget class="QgsLayerTreeEmbeddedConfigWidget" name="mLegendConfigEmbeddedWidget" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@ -2169,34 +2194,40 @@ p, li { white-space: pre-wrap; }
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>QgsColorButtonV2</class>
|
||||
<extends>QToolButton</extends>
|
||||
<header>qgscolorbuttonv2.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QgsCollapsibleGroupBox</class>
|
||||
<extends>QGroupBox</extends>
|
||||
<header>qgscollapsiblegroupbox.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QgsProjectionSelectionWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>qgsprojectionselectionwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QgsScaleRangeWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>qgsscalerangewidget.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QgsLayerTreeEmbeddedConfigWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>qgslayertreeembeddedconfigwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QgsColorButtonV2</class>
|
||||
<extends>QToolButton</extends>
|
||||
<header>qgscolorbuttonv2.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QgsBlendModeComboBox</class>
|
||||
<extends>QComboBox</extends>
|
||||
<header>qgsblendmodecombobox.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QgsProjectionSelectionWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header location="global">qgsprojectionselectionwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<tabstops>
|
||||
<tabstop>mOptionsListWidget</tabstop>
|
||||
|
@ -46,7 +46,16 @@
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -225,6 +234,15 @@
|
||||
<normaloff>:/images/themes/default/mIconExpression.svg</normaloff>:/images/themes/default/mIconExpression.svg</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Legend</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/legend.svg</normaloff>:/images/themes/default/legend.svg</iconset>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@ -243,7 +261,16 @@
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -255,11 +282,20 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>6</number>
|
||||
<number>12</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="mOptsPage_General">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_14">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -275,12 +311,21 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>478</width>
|
||||
<height>596</height>
|
||||
<width>362</width>
|
||||
<height>472</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_13">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -288,7 +333,7 @@
|
||||
<property name="title">
|
||||
<string>Layer info</string>
|
||||
</property>
|
||||
<property name="syncGroup">
|
||||
<property name="syncGroup" stdset="0">
|
||||
<string notr="true">vectorgeneral</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
@ -302,7 +347,16 @@
|
||||
<item row="5" column="0">
|
||||
<widget class="QFrame" name="mDataSourceEncodingFrame">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</layout>
|
||||
@ -386,7 +440,7 @@
|
||||
<property name="checkable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="syncGroup">
|
||||
<property name="syncGroup" stdset="0">
|
||||
<string notr="true">vectorgeneral</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_27">
|
||||
@ -394,7 +448,7 @@
|
||||
<number>6</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QgsProjectionSelectionWidget" name="mCrsSelector">
|
||||
<widget class="QgsProjectionSelectionWidget" name="mCrsSelector" native="true">
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::StrongFocus</enum>
|
||||
</property>
|
||||
@ -451,7 +505,7 @@
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_6">
|
||||
<item row="0" column="0">
|
||||
<widget class="QgsScaleRangeWidget" name="mScaleRangeWidget"/>
|
||||
<widget class="QgsScaleRangeWidget" name="mScaleRangeWidget" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
@ -530,7 +584,16 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Style">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_11">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -551,7 +614,16 @@
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_18">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -581,7 +653,16 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Labels">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_12">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -604,7 +685,16 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_LabelsOld">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_30">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -620,12 +710,21 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>121</width>
|
||||
<height>38</height>
|
||||
<width>129</width>
|
||||
<height>42</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_28">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -668,7 +767,16 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Fields">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_15">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -689,7 +797,16 @@
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_20">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -710,7 +827,16 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Rendering">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_19">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -726,8 +852,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>702</width>
|
||||
<height>199</height>
|
||||
<width>806</width>
|
||||
<height>258</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_32">
|
||||
@ -804,12 +930,12 @@
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLabel" name="mSimplifyAlgorithmLabel">
|
||||
<property name="toolTip">
|
||||
<string>This algorithm only is applied to simplify on local side</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Simplification algorithm: </string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>This algorithm only is applied to simplify on local side</string>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
@ -876,7 +1002,16 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Display">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_25">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -892,12 +1027,21 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>730</width>
|
||||
<height>537</height>
|
||||
<width>732</width>
|
||||
<height>536</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_26">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1037,7 +1181,16 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Actions">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_16">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1058,7 +1211,16 @@
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_21">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1085,7 +1247,16 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Joins">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_17">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1101,12 +1272,21 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>134</width>
|
||||
<height>113</height>
|
||||
<width>104</width>
|
||||
<height>102</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_23">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1204,7 +1384,16 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Diagrams">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_10">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1227,7 +1416,16 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Metadata">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1243,8 +1441,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>393</width>
|
||||
<height>641</height>
|
||||
<width>424</width>
|
||||
<height>697</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
@ -1253,7 +1451,7 @@
|
||||
<property name="title">
|
||||
<string>Description</string>
|
||||
</property>
|
||||
<property name="syncGroup">
|
||||
<property name="syncGroup" stdset="0">
|
||||
<string notr="true">vectormeta</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
@ -1395,7 +1593,7 @@
|
||||
<property name="title">
|
||||
<string>Attribution</string>
|
||||
</property>
|
||||
<property name="syncGroup">
|
||||
<property name="syncGroup" stdset="0">
|
||||
<string notr="true">vectormeta</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_7">
|
||||
@ -1441,7 +1639,7 @@
|
||||
<property name="title">
|
||||
<string>MetadataUrl</string>
|
||||
</property>
|
||||
<property name="syncGroup">
|
||||
<property name="syncGroup" stdset="0">
|
||||
<string notr="true">vectormeta</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_9">
|
||||
@ -1610,7 +1808,7 @@
|
||||
<property name="title">
|
||||
<string>Properties</string>
|
||||
</property>
|
||||
<property name="syncGroup">
|
||||
<property name="syncGroup" stdset="0">
|
||||
<string notr="true">vectormeta</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_9">
|
||||
@ -1666,6 +1864,22 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Legend">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_8">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="title">
|
||||
<string>Embedded widgets in legend</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_22">
|
||||
<item>
|
||||
<widget class="QgsLayerTreeEmbeddedConfigWidget" name="mLegendConfigEmbeddedWidget" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@ -1687,7 +1901,16 @@
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_btnbox">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="2" column="1" colspan="4">
|
||||
@ -1740,6 +1963,12 @@
|
||||
<header location="global">qgsvariableeditorwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QgsLayerTreeEmbeddedConfigWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>qgslayertreeembeddedconfigwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<tabstops>
|
||||
<tabstop>mOptionsListWidget</tabstop>
|
||||
|
Loading…
x
Reference in New Issue
Block a user