26#include <QStandardItemModel>
29#include "moc_qgsprocessingvectortilewriterlayerswidgetwrapper.cpp"
37QgsProcessingVectorTileWriteLayerDetailsWidget::QgsProcessingVectorTileWriteLayerDetailsWidget(
const QVariant &value,
QgsProject *project )
41 mContext.setProject( project );
44 mLayer = layer.
layer();
49 mSpinMinZoom->setClearValue( -1, tr(
"Not set" ) );
50 mSpinMaxZoom->setClearValue( -1, tr(
"Not set" ) );
51 mEditFilterExpression->setMultiLine(
true );
52 mEditFilterExpression->setLayer( mLayer );
54 mSpinMinZoom->setValue( layer.
minZoom() );
55 mSpinMaxZoom->setValue( layer.
maxZoom() );
56 mEditLayerName->setText( layer.
layerName() );
57 mEditLayerName->setPlaceholderText( mLayer->name() );
66QVariant QgsProcessingVectorTileWriteLayerDetailsWidget::value()
const
81QgsProcessingVectorTileWriterLayersPanelWidget::QgsProcessingVectorTileWriterLayersPanelWidget(
const QVariant &value,
QgsProject *project, QWidget *parent )
82 : QgsProcessingMultipleSelectionPanelWidget( QVariantList(), QVariantList(), parent )
85 connect( listView(), &QListView::doubleClicked,
this, &QgsProcessingVectorTileWriterLayersPanelWidget::configureLayer );
87 QPushButton *configureLayerButton =
new QPushButton( tr(
"Configure Layer…" ) );
88 connect( configureLayerButton, &QPushButton::clicked,
this, &QgsProcessingVectorTileWriterLayersPanelWidget::configureLayer );
89 buttonBox()->addButton( configureLayerButton, QDialogButtonBox::ActionRole );
91 QPushButton *copyLayerButton =
new QPushButton( tr(
"Copy Layer" ) );
92 connect( copyLayerButton, &QPushButton::clicked,
this, &QgsProcessingVectorTileWriterLayersPanelWidget::copyLayer );
93 buttonBox()->addButton( copyLayerButton, QDialogButtonBox::ActionRole );
96 mContext.setProject( project );
98 QSet<const QgsVectorLayer *> seenVectorLayers;
99 const QVariantList valueList = value.toList();
100 for (
const QVariant &v : valueList )
103 if ( !layer.
layer() )
106 addOption( v, titleForLayer( layer ),
true );
108 seenVectorLayers.insert( layer.
layer() );
114 if ( seenVectorLayers.contains( layer ) )
118 vm[
"layer"] = layer->id();
120 const QString title = layer->name();
122 addOption( vm, title,
false );
126void QgsProcessingVectorTileWriterLayersPanelWidget::configureLayer()
128 const QModelIndexList selection = listView()->selectionModel()->selectedIndexes();
129 if ( selection.size() != 1 )
131 QMessageBox::warning(
this, tr(
"Configure Layer" ), tr(
"Please select a single layer." ) );
135 QStandardItem *item = mModel->itemFromIndex( selection[0] );
136 const QVariant value = item->data( Qt::UserRole );
141 QgsProcessingVectorTileWriteLayerDetailsWidget *widget =
new QgsProcessingVectorTileWriteLayerDetailsWidget( value, mProject );
142 widget->setPanelTitle( tr(
"Configure Layer" ) );
143 widget->buttonBox()->hide();
145 connect( widget, &QgsProcessingVectorTileWriteLayerDetailsWidget::widgetChanged,
this, [
this, item, widget]() { setItemValue( item, widget->value() ); } );
151 dlg.setWindowTitle( tr(
"Configure Layer" ) );
152 QVBoxLayout *vLayout =
new QVBoxLayout();
153 QgsProcessingVectorTileWriteLayerDetailsWidget *widget =
new QgsProcessingVectorTileWriteLayerDetailsWidget( value, mProject );
154 vLayout->addWidget( widget );
155 connect( widget->buttonBox(), &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
156 connect( widget->buttonBox(), &QDialogButtonBox::rejected, &dlg, &QDialog::reject );
157 dlg.setLayout( vLayout );
160 setItemValue( item, widget->value() );
165void QgsProcessingVectorTileWriterLayersPanelWidget::copyLayer()
167 const QModelIndexList selection = listView()->selectionModel()->selectedIndexes();
168 if ( selection.size() != 1 )
170 QMessageBox::warning(
this, tr(
"Copy Layer" ), tr(
"Please select a single layer." ) );
174 QStandardItem *item = mModel->itemFromIndex( selection[0] );
175 mModel->insertRow( selection[0].row() + 1, item->clone() );
178void QgsProcessingVectorTileWriterLayersPanelWidget::setItemValue( QStandardItem *item,
const QVariant &value )
180 mContext.setProject( mProject );
184 item->setText( titleForLayer( layer ) );
185 item->setData( value, Qt::UserRole );
194 title += tr(
" [zoom %1...%2]" ).arg( layer.
minZoom() ).arg( layer.
maxZoom() );
195 else if ( layer.
minZoom() >= 0 )
196 title += tr(
" [zoom >= %1]" ).arg( layer.
minZoom() );
197 else if ( layer.
maxZoom() >= 0 )
198 title += tr(
" [zoom <= %1]" ).arg( layer.
maxZoom() );
201 title += tr(
" [name: %1]" ).arg( layer.
layerName() );
203 title += tr(
" [with filter]" );
214QgsProcessingVectorTileWriterLayersWidget::QgsProcessingVectorTileWriterLayersWidget( QWidget *parent )
217 QHBoxLayout *hl =
new QHBoxLayout();
218 hl->setContentsMargins( 0, 0, 0, 0 );
220 mLineEdit =
new QLineEdit();
221 mLineEdit->setEnabled(
false );
222 hl->addWidget( mLineEdit, 1 );
224 mToolButton =
new QToolButton();
225 mToolButton->setText( QString( QChar( 0x2026 ) ) );
226 hl->addWidget( mToolButton );
232 connect( mToolButton, &QToolButton::clicked,
this, &QgsProcessingVectorTileWriterLayersWidget::showDialog );
235void QgsProcessingVectorTileWriterLayersWidget::setValue(
const QVariant &value )
237 if ( value.isValid() )
238 mValue = value.userType() == QMetaType::Type::QVariantList ? value.toList() : QVariantList() << value;
246void QgsProcessingVectorTileWriterLayersWidget::setProject(
QgsProject *project )
251void QgsProcessingVectorTileWriterLayersWidget::showDialog()
256 QgsProcessingVectorTileWriterLayersPanelWidget *widget =
new QgsProcessingVectorTileWriterLayersPanelWidget( mValue, mProject );
257 widget->setPanelTitle( tr(
"Input layers" ) );
258 connect( widget, &QgsProcessingMultipleSelectionPanelWidget::selectionChanged,
this, [
this, widget]() { setValue( widget->selectedOptions() ); } );
265 dlg.setWindowTitle( tr(
"Input layers" ) );
266 QVBoxLayout *vLayout =
new QVBoxLayout();
267 QgsProcessingVectorTileWriterLayersPanelWidget *widget =
new QgsProcessingVectorTileWriterLayersPanelWidget( mValue, mProject );
268 vLayout->addWidget( widget );
269 widget->buttonBox()->addButton( QDialogButtonBox::Cancel );
270 connect( widget->buttonBox(), &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
271 connect( widget->buttonBox(), &QDialogButtonBox::rejected, &dlg, &QDialog::reject );
272 dlg.setLayout( vLayout );
275 setValue( widget->selectedOptions() );
280void QgsProcessingVectorTileWriterLayersWidget::updateSummaryText()
282 mLineEdit->setText( tr(
"%n vector layer(s) selected",
nullptr, mValue.count() ) );
293QString QgsProcessingVectorTileWriterLayersWidgetWrapper::parameterType()
const
300 return new QgsProcessingVectorTileWriterLayersWidgetWrapper( parameter, type );
303QWidget *QgsProcessingVectorTileWriterLayersWidgetWrapper::createWidget()
305 mPanel =
new QgsProcessingVectorTileWriterLayersWidget(
nullptr );
306 mPanel->setProject( widgetContext().project() );
307 connect( mPanel, &QgsProcessingVectorTileWriterLayersWidget::changed,
this, [
this] { emit widgetValueHasChanged(
this ); } );
316 mPanel->setProject( context.
project() );
320void QgsProcessingVectorTileWriterLayersWidgetWrapper::setWidgetValue(
const QVariant &value,
QgsProcessingContext &context )
325 mPanel->setValue( value );
329QVariant QgsProcessingVectorTileWriterLayersWidgetWrapper::widgetValue()
const
331 return mPanel ? mPanel->value() : QVariant();
ProcessingMode
Types of modes which Processing widgets can be created for.
void expressionChanged(const QString &expression)
Emitted when the expression is changed.
Contains information about the context in which a processing algorithm is executed.
Base class for the definition of processing parameters.
static QgsVectorTileWriter::Layer variantMapAsLayer(const QVariantMap &layerVariantMap, QgsProcessingContext &context)
Converts a QVariant value (a QVariantMap) to a single input layer.
static QVariantMap layerAsVariantMap(const QgsVectorTileWriter::Layer &layer)
Converts a single input layer to QVariant representation (a QVariantMap).
static QString typeName()
Returns the type name for the parameter class.
Contains settings which reflect the context in which a Processing parameter widget is shown.
QgsProject * project() const
Returns the project associated with the widget.
static QList< QgsVectorLayer * > compatibleVectorLayers(QgsProject *project, const QList< int > &sourceTypes=QList< int >(), bool sort=true)
Returns a list of vector layers from a project which are compatible with the processing framework.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Represents a vector layer which manages a vector based dataset.
Configuration of a single input vector layer to be included in the output.
QString layerName() const
Returns layer name in the output. If not set, layer()->name() will be used.
void setLayerName(const QString &name)
Sets layer name in the output. If not set, layer()->name() will be used.
QgsVectorLayer * layer() const
Returns vector layer of this entry.
void setMaxZoom(int maxzoom)
Sets maximum zoom level at which this layer will be used. Negative value means no max....
void setFilterExpression(const QString &expr)
Sets filter expression. If not empty, only features matching the expression will be used.
void setMinZoom(int minzoom)
Sets minimum zoom level at which this layer will be used. Negative value means no min....
QString filterExpression() const
Returns filter expression. If not empty, only features matching the expression will be used.
int maxZoom() const
Returns maximum zoom level at which this layer will be used. Negative value means no max....
int minZoom() const
Returns minimum zoom level at which this layer will be used. Negative value means no min....