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(
82 const QVariant &value,
86 : 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, [
this, item, widget]() {
150 setItemValue( item, widget->value() );
157 dlg.setWindowTitle( tr(
"Configure Layer" ) );
158 QVBoxLayout *vLayout =
new QVBoxLayout();
159 QgsProcessingVectorTileWriteLayerDetailsWidget *widget =
new QgsProcessingVectorTileWriteLayerDetailsWidget( value, mProject );
160 vLayout->addWidget( widget );
161 connect( widget->buttonBox(), &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
162 connect( widget->buttonBox(), &QDialogButtonBox::rejected, &dlg, &QDialog::reject );
163 dlg.setLayout( vLayout );
166 setItemValue( item, widget->value() );
171void QgsProcessingVectorTileWriterLayersPanelWidget::copyLayer()
173 const QModelIndexList selection = listView()->selectionModel()->selectedIndexes();
174 if ( selection.size() != 1 )
176 QMessageBox::warning(
this, tr(
"Copy Layer" ), tr(
"Please select a single layer." ) );
180 QStandardItem *item = mModel->itemFromIndex( selection[0] );
181 mModel->insertRow( selection[0].row() + 1, item->clone() );
184void QgsProcessingVectorTileWriterLayersPanelWidget::setItemValue( QStandardItem *item,
const QVariant &value )
186 mContext.setProject( mProject );
190 item->setText( titleForLayer( layer ) );
191 item->setData( value, Qt::UserRole );
200 title += tr(
" [zoom %1...%2]" ).arg( layer.
minZoom() ).arg( layer.
maxZoom() );
201 else if ( layer.
minZoom() >= 0 )
202 title += tr(
" [zoom >= %1]" ).arg( layer.
minZoom() );
203 else if ( layer.
maxZoom() >= 0 )
204 title += tr(
" [zoom <= %1]" ).arg( layer.
maxZoom() );
207 title += tr(
" [name: %1]" ).arg( layer.
layerName() );
209 title += tr(
" [with filter]" );
220QgsProcessingVectorTileWriterLayersWidget::QgsProcessingVectorTileWriterLayersWidget( QWidget *parent )
223 QHBoxLayout *hl =
new QHBoxLayout();
224 hl->setContentsMargins( 0, 0, 0, 0 );
226 mLineEdit =
new QLineEdit();
227 mLineEdit->setEnabled(
false );
228 hl->addWidget( mLineEdit, 1 );
230 mToolButton =
new QToolButton();
231 mToolButton->setText( QString( QChar( 0x2026 ) ) );
232 hl->addWidget( mToolButton );
238 connect( mToolButton, &QToolButton::clicked,
this, &QgsProcessingVectorTileWriterLayersWidget::showDialog );
241void QgsProcessingVectorTileWriterLayersWidget::setValue(
const QVariant &value )
243 if ( value.isValid() )
244 mValue = value.userType() == QMetaType::Type::QVariantList ? value.toList() : QVariantList() << value;
252void QgsProcessingVectorTileWriterLayersWidget::setProject(
QgsProject *project )
257void QgsProcessingVectorTileWriterLayersWidget::showDialog()
262 QgsProcessingVectorTileWriterLayersPanelWidget *widget =
new QgsProcessingVectorTileWriterLayersPanelWidget( mValue, mProject );
263 widget->setPanelTitle( tr(
"Input layers" ) );
264 connect( widget, &QgsProcessingMultipleSelectionPanelWidget::selectionChanged,
this, [
this, widget]() {
265 setValue( widget->selectedOptions() );
273 dlg.setWindowTitle( tr(
"Input layers" ) );
274 QVBoxLayout *vLayout =
new QVBoxLayout();
275 QgsProcessingVectorTileWriterLayersPanelWidget *widget =
new QgsProcessingVectorTileWriterLayersPanelWidget( mValue, mProject );
276 vLayout->addWidget( widget );
277 widget->buttonBox()->addButton( QDialogButtonBox::Cancel );
278 connect( widget->buttonBox(), &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
279 connect( widget->buttonBox(), &QDialogButtonBox::rejected, &dlg, &QDialog::reject );
280 dlg.setLayout( vLayout );
283 setValue( widget->selectedOptions() );
288void QgsProcessingVectorTileWriterLayersWidget::updateSummaryText()
290 mLineEdit->setText( tr(
"%n vector layer(s) selected",
nullptr, mValue.count() ) );
302QString QgsProcessingVectorTileWriterLayersWidgetWrapper::parameterType()
const
309 return new QgsProcessingVectorTileWriterLayersWidgetWrapper( parameter, type );
312QWidget *QgsProcessingVectorTileWriterLayersWidgetWrapper::createWidget()
314 mPanel =
new QgsProcessingVectorTileWriterLayersWidget(
nullptr );
315 mPanel->setProject( widgetContext().project() );
316 connect( mPanel, &QgsProcessingVectorTileWriterLayersWidget::changed,
this, [
this] {
317 emit widgetValueHasChanged(
this );
327 mPanel->setProject( context.
project() );
331void QgsProcessingVectorTileWriterLayersWidgetWrapper::setWidgetValue(
const QVariant &value,
QgsProcessingContext &context )
336 mPanel->setValue( value );
340QVariant QgsProcessingVectorTileWriterLayersWidgetWrapper::widgetValue()
const
342 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....