22#include <QStandardItemModel>
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(
82 const QVariant &value,
85 : QgsProcessingMultipleSelectionPanelWidget( QVariantList(), QVariantList(), parent )
89 connect( listView(), &QListView::doubleClicked,
this, &QgsProcessingVectorTileWriterLayersPanelWidget::configureLayer );
91 QPushButton *configureLayerButton =
new QPushButton( tr(
"Configure Layer…" ) );
92 connect( configureLayerButton, &QPushButton::clicked,
this, &QgsProcessingVectorTileWriterLayersPanelWidget::configureLayer );
93 buttonBox()->addButton( configureLayerButton, QDialogButtonBox::ActionRole );
95 QPushButton *copyLayerButton =
new QPushButton( tr(
"Copy Layer" ) );
96 connect( copyLayerButton, &QPushButton::clicked,
this, &QgsProcessingVectorTileWriterLayersPanelWidget::copyLayer );
97 buttonBox()->addButton( copyLayerButton, QDialogButtonBox::ActionRole );
100 mContext.setProject( project );
102 QSet<const QgsVectorLayer *> seenVectorLayers;
103 const QVariantList valueList = value.toList();
104 for (
const QVariant &v : valueList )
107 if ( !layer.
layer() )
110 addOption( v, titleForLayer( layer ),
true );
112 seenVectorLayers.insert( layer.
layer() );
118 if ( seenVectorLayers.contains( layer ) )
122 vm[
"layer"] = layer->id();
124 const QString title = layer->name();
126 addOption( vm, title,
false );
130void QgsProcessingVectorTileWriterLayersPanelWidget::configureLayer()
132 const QModelIndexList selection = listView()->selectionModel()->selectedIndexes();
133 if ( selection.size() != 1 )
135 QMessageBox::warning(
this, tr(
"Configure Layer" ), tr(
"Please select a single layer." ) );
139 QStandardItem *item = mModel->itemFromIndex( selection[0] );
140 const QVariant value = item->data( Qt::UserRole );
145 QgsProcessingVectorTileWriteLayerDetailsWidget *widget =
new QgsProcessingVectorTileWriteLayerDetailsWidget( value, mProject );
146 widget->setPanelTitle( tr(
"Configure Layer" ) );
147 widget->buttonBox()->hide();
149 connect( widget, &QgsProcessingVectorTileWriteLayerDetailsWidget::widgetChanged,
this, [ = ]()
151 setItemValue( item, widget->value() );
158 dlg.setWindowTitle( tr(
"Configure Layer" ) );
159 QVBoxLayout *vLayout =
new QVBoxLayout();
160 QgsProcessingVectorTileWriteLayerDetailsWidget *widget =
new QgsProcessingVectorTileWriteLayerDetailsWidget( value, mProject );
161 vLayout->addWidget( widget );
162 connect( widget->buttonBox(), &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
163 connect( widget->buttonBox(), &QDialogButtonBox::rejected, &dlg, &QDialog::reject );
164 dlg.setLayout( vLayout );
167 setItemValue( item, widget->value() );
172void QgsProcessingVectorTileWriterLayersPanelWidget::copyLayer()
174 const QModelIndexList selection = listView()->selectionModel()->selectedIndexes();
175 if ( selection.size() != 1 )
177 QMessageBox::warning(
this, tr(
"Copy Layer" ), tr(
"Please select a single layer." ) );
181 QStandardItem *item = mModel->itemFromIndex( selection[0] );
182 mModel->insertRow( selection[0].row() + 1, item->clone() );
185void QgsProcessingVectorTileWriterLayersPanelWidget::setItemValue( QStandardItem *item,
const QVariant &value )
187 mContext.setProject( mProject );
191 item->setText( titleForLayer( layer ) );
192 item->setData( value, Qt::UserRole );
201 title += tr(
" [zoom %1...%2]" ).arg( layer.
minZoom() ).arg( layer.
maxZoom() );
202 else if ( layer.
minZoom() >= 0 )
203 title += tr(
" [zoom >= %1]" ).arg( layer.
minZoom() );
204 else if ( layer.
maxZoom() >= 0 )
205 title += tr(
" [zoom <= %1]" ).arg( layer.
maxZoom() );
208 title += tr(
" [name: %1]" ).arg( layer.
layerName() );
210 title += tr(
" [with filter]" );
221QgsProcessingVectorTileWriterLayersWidget::QgsProcessingVectorTileWriterLayersWidget( QWidget *parent )
224 QHBoxLayout *hl =
new QHBoxLayout();
225 hl->setContentsMargins( 0, 0, 0, 0 );
227 mLineEdit =
new QLineEdit();
228 mLineEdit->setEnabled(
false );
229 hl->addWidget( mLineEdit, 1 );
231 mToolButton =
new QToolButton();
232 mToolButton->setText( QString( QChar( 0x2026 ) ) );
233 hl->addWidget( mToolButton );
239 connect( mToolButton, &QToolButton::clicked,
this, &QgsProcessingVectorTileWriterLayersWidget::showDialog );
242void QgsProcessingVectorTileWriterLayersWidget::setValue(
const QVariant &value )
244 if ( value.isValid() )
245 mValue = value.type() == QVariant::List ? value.toList() : QVariantList() << value;
253void QgsProcessingVectorTileWriterLayersWidget::setProject(
QgsProject *project )
258void QgsProcessingVectorTileWriterLayersWidget::showDialog()
263 QgsProcessingVectorTileWriterLayersPanelWidget *widget =
new QgsProcessingVectorTileWriterLayersPanelWidget( mValue, mProject );
264 widget->setPanelTitle( tr(
"Input layers" ) );
265 connect( widget, &QgsProcessingMultipleSelectionPanelWidget::selectionChanged,
this, [ = ]()
267 setValue( widget->selectedOptions() );
275 dlg.setWindowTitle( tr(
"Input layers" ) );
276 QVBoxLayout *vLayout =
new QVBoxLayout();
277 QgsProcessingVectorTileWriterLayersPanelWidget *widget =
new QgsProcessingVectorTileWriterLayersPanelWidget( mValue, mProject );
278 vLayout->addWidget( widget );
279 widget->buttonBox()->addButton( QDialogButtonBox::Cancel );
280 connect( widget->buttonBox(), &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
281 connect( widget->buttonBox(), &QDialogButtonBox::rejected, &dlg, &QDialog::reject );
282 dlg.setLayout( vLayout );
285 setValue( widget->selectedOptions() );
290void QgsProcessingVectorTileWriterLayersWidget::updateSummaryText()
292 mLineEdit->setText( tr(
"%n vector layer(s) selected",
nullptr, mValue.count() ) );
304QString QgsProcessingVectorTileWriterLayersWidgetWrapper::parameterType()
const
311 return new QgsProcessingVectorTileWriterLayersWidgetWrapper( parameter, type );
314QWidget *QgsProcessingVectorTileWriterLayersWidgetWrapper::createWidget()
316 mPanel =
new QgsProcessingVectorTileWriterLayersWidget(
nullptr );
317 mPanel->setProject( widgetContext().project() );
318 connect( mPanel, &QgsProcessingVectorTileWriterLayersWidget::changed,
this, [ = ]
320 emit widgetValueHasChanged(
this );
330 mPanel->setProject( context.
project() );
334void QgsProcessingVectorTileWriterLayersWidgetWrapper::setWidgetValue(
const QVariant &value,
QgsProcessingContext &context )
339 mPanel->setValue( value );
343QVariant QgsProcessingVectorTileWriterLayersWidgetWrapper::widgetValue()
const
345 return mPanel ? mPanel->value() : QVariant();
348QStringList QgsProcessingVectorTileWriterLayersWidgetWrapper::compatibleParameterTypes()
const
350 return QStringList();
353QStringList QgsProcessingVectorTileWriterLayersWidgetWrapper::compatibleOutputTypes()
const
355 return QStringList();
void expressionChanged(const QString &expression)
Emitted when the expression is changed.
Contains information about the context in which a processing algorithm is executed.
WidgetType
Types of dialogs which Processing widgets can be created for.
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 data sets.
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....