17#include "moc_qgsprocessingvectortilewriterlayerswidgetwrapper.cpp"
23#include <QStandardItemModel>
38QgsProcessingVectorTileWriteLayerDetailsWidget::QgsProcessingVectorTileWriteLayerDetailsWidget(
const QVariant &value,
QgsProject *project )
42 mContext.setProject( project );
45 mLayer = layer.
layer();
50 mSpinMinZoom->setClearValue( -1, tr(
"Not set" ) );
51 mSpinMaxZoom->setClearValue( -1, tr(
"Not set" ) );
52 mEditFilterExpression->setMultiLine(
true );
53 mEditFilterExpression->setLayer( mLayer );
55 mSpinMinZoom->setValue( layer.
minZoom() );
56 mSpinMaxZoom->setValue( layer.
maxZoom() );
57 mEditLayerName->setText( layer.
layerName() );
58 mEditLayerName->setPlaceholderText( mLayer->name() );
67QVariant QgsProcessingVectorTileWriteLayerDetailsWidget::value()
const
82QgsProcessingVectorTileWriterLayersPanelWidget::QgsProcessingVectorTileWriterLayersPanelWidget(
83 const QVariant &value,
86 : QgsProcessingMultipleSelectionPanelWidget( QVariantList(), QVariantList(), parent )
90 connect( listView(), &QListView::doubleClicked,
this, &QgsProcessingVectorTileWriterLayersPanelWidget::configureLayer );
92 QPushButton *configureLayerButton =
new QPushButton( tr(
"Configure Layer…" ) );
93 connect( configureLayerButton, &QPushButton::clicked,
this, &QgsProcessingVectorTileWriterLayersPanelWidget::configureLayer );
94 buttonBox()->addButton( configureLayerButton, QDialogButtonBox::ActionRole );
96 QPushButton *copyLayerButton =
new QPushButton( tr(
"Copy Layer" ) );
97 connect( copyLayerButton, &QPushButton::clicked,
this, &QgsProcessingVectorTileWriterLayersPanelWidget::copyLayer );
98 buttonBox()->addButton( copyLayerButton, QDialogButtonBox::ActionRole );
101 mContext.setProject( project );
103 QSet<const QgsVectorLayer *> seenVectorLayers;
104 const QVariantList valueList = value.toList();
105 for (
const QVariant &v : valueList )
108 if ( !layer.
layer() )
111 addOption( v, titleForLayer( layer ),
true );
113 seenVectorLayers.insert( layer.
layer() );
119 if ( seenVectorLayers.contains( layer ) )
123 vm[
"layer"] = layer->id();
125 const QString title = layer->name();
127 addOption( vm, title,
false );
131void QgsProcessingVectorTileWriterLayersPanelWidget::configureLayer()
133 const QModelIndexList selection = listView()->selectionModel()->selectedIndexes();
134 if ( selection.size() != 1 )
136 QMessageBox::warning(
this, tr(
"Configure Layer" ), tr(
"Please select a single layer." ) );
140 QStandardItem *item = mModel->itemFromIndex( selection[0] );
141 const QVariant value = item->data( Qt::UserRole );
146 QgsProcessingVectorTileWriteLayerDetailsWidget *widget =
new QgsProcessingVectorTileWriteLayerDetailsWidget( value, mProject );
147 widget->setPanelTitle( tr(
"Configure Layer" ) );
148 widget->buttonBox()->hide();
150 connect( widget, &QgsProcessingVectorTileWriteLayerDetailsWidget::widgetChanged,
this, [ = ]()
152 setItemValue( item, widget->value() );
159 dlg.setWindowTitle( tr(
"Configure Layer" ) );
160 QVBoxLayout *vLayout =
new QVBoxLayout();
161 QgsProcessingVectorTileWriteLayerDetailsWidget *widget =
new QgsProcessingVectorTileWriteLayerDetailsWidget( value, mProject );
162 vLayout->addWidget( widget );
163 connect( widget->buttonBox(), &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
164 connect( widget->buttonBox(), &QDialogButtonBox::rejected, &dlg, &QDialog::reject );
165 dlg.setLayout( vLayout );
168 setItemValue( item, widget->value() );
173void QgsProcessingVectorTileWriterLayersPanelWidget::copyLayer()
175 const QModelIndexList selection = listView()->selectionModel()->selectedIndexes();
176 if ( selection.size() != 1 )
178 QMessageBox::warning(
this, tr(
"Copy Layer" ), tr(
"Please select a single layer." ) );
182 QStandardItem *item = mModel->itemFromIndex( selection[0] );
183 mModel->insertRow( selection[0].row() + 1, item->clone() );
186void QgsProcessingVectorTileWriterLayersPanelWidget::setItemValue( QStandardItem *item,
const QVariant &value )
188 mContext.setProject( mProject );
192 item->setText( titleForLayer( layer ) );
193 item->setData( value, Qt::UserRole );
202 title += tr(
" [zoom %1...%2]" ).arg( layer.
minZoom() ).arg( layer.
maxZoom() );
203 else if ( layer.
minZoom() >= 0 )
204 title += tr(
" [zoom >= %1]" ).arg( layer.
minZoom() );
205 else if ( layer.
maxZoom() >= 0 )
206 title += tr(
" [zoom <= %1]" ).arg( layer.
maxZoom() );
209 title += tr(
" [name: %1]" ).arg( layer.
layerName() );
211 title += tr(
" [with filter]" );
222QgsProcessingVectorTileWriterLayersWidget::QgsProcessingVectorTileWriterLayersWidget( QWidget *parent )
225 QHBoxLayout *hl =
new QHBoxLayout();
226 hl->setContentsMargins( 0, 0, 0, 0 );
228 mLineEdit =
new QLineEdit();
229 mLineEdit->setEnabled(
false );
230 hl->addWidget( mLineEdit, 1 );
232 mToolButton =
new QToolButton();
233 mToolButton->setText( QString( QChar( 0x2026 ) ) );
234 hl->addWidget( mToolButton );
240 connect( mToolButton, &QToolButton::clicked,
this, &QgsProcessingVectorTileWriterLayersWidget::showDialog );
243void QgsProcessingVectorTileWriterLayersWidget::setValue(
const QVariant &value )
245 if ( value.isValid() )
246 mValue = value.userType() == QMetaType::Type::QVariantList ? value.toList() : QVariantList() << value;
254void QgsProcessingVectorTileWriterLayersWidget::setProject(
QgsProject *project )
259void QgsProcessingVectorTileWriterLayersWidget::showDialog()
264 QgsProcessingVectorTileWriterLayersPanelWidget *widget =
new QgsProcessingVectorTileWriterLayersPanelWidget( mValue, mProject );
265 widget->setPanelTitle( tr(
"Input layers" ) );
266 connect( widget, &QgsProcessingMultipleSelectionPanelWidget::selectionChanged,
this, [ = ]()
268 setValue( widget->selectedOptions() );
276 dlg.setWindowTitle( tr(
"Input layers" ) );
277 QVBoxLayout *vLayout =
new QVBoxLayout();
278 QgsProcessingVectorTileWriterLayersPanelWidget *widget =
new QgsProcessingVectorTileWriterLayersPanelWidget( mValue, mProject );
279 vLayout->addWidget( widget );
280 widget->buttonBox()->addButton( QDialogButtonBox::Cancel );
281 connect( widget->buttonBox(), &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
282 connect( widget->buttonBox(), &QDialogButtonBox::rejected, &dlg, &QDialog::reject );
283 dlg.setLayout( vLayout );
286 setValue( widget->selectedOptions() );
291void QgsProcessingVectorTileWriterLayersWidget::updateSummaryText()
293 mLineEdit->setText( tr(
"%n vector layer(s) selected",
nullptr, mValue.count() ) );
305QString QgsProcessingVectorTileWriterLayersWidgetWrapper::parameterType()
const
312 return new QgsProcessingVectorTileWriterLayersWidgetWrapper( parameter, type );
315QWidget *QgsProcessingVectorTileWriterLayersWidgetWrapper::createWidget()
317 mPanel =
new QgsProcessingVectorTileWriterLayersWidget(
nullptr );
318 mPanel->setProject( widgetContext().project() );
319 connect( mPanel, &QgsProcessingVectorTileWriterLayersWidget::changed,
this, [ = ]
321 emit widgetValueHasChanged(
this );
331 mPanel->setProject( context.
project() );
335void QgsProcessingVectorTileWriterLayersWidgetWrapper::setWidgetValue(
const QVariant &value,
QgsProcessingContext &context )
340 mPanel->setValue( value );
344QVariant QgsProcessingVectorTileWriterLayersWidgetWrapper::widgetValue()
const
346 return mPanel ? mPanel->value() : QVariant();
349QStringList QgsProcessingVectorTileWriterLayersWidgetWrapper::compatibleParameterTypes()
const
351 return QStringList();
354QStringList QgsProcessingVectorTileWriterLayersWidgetWrapper::compatibleOutputTypes()
const
356 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....