27#include <QStandardItemModel>
30#include "moc_qgsprocessingdxflayerswidgetwrapper.cpp"
38QgsProcessingDxfLayerDetailsWidget::QgsProcessingDxfLayerDetailsWidget(
const QVariant &value,
QgsProject *project )
42 mFieldsComboBox->setAllowEmptyFieldName(
true );
44 mContext.setProject( project );
47 mLayer = layer.
layer();
52 mFieldsComboBox->setLayer( mLayer );
62 mGroupBoxBlocks->setVisible(
true );
68 mGroupBoxBlocks->setVisible(
false );
77QVariant QgsProcessingDxfLayerDetailsWidget::value()
const
79 const int index = mLayer->fields().lookupField( mFieldsComboBox->currentField() );
80 const QgsDxfExport::DxfLayer layer( mLayer, index, mGroupBoxBlocks->isChecked(), mSpinBoxBlocks->value(), mOverriddenName->text().trimmed() );
89QgsProcessingDxfLayersPanelWidget::QgsProcessingDxfLayersPanelWidget(
const QVariant &value,
QgsProject *project, QWidget *parent )
90 : QgsProcessingMultipleSelectionPanelWidget( QVariantList(), QVariantList(), parent )
93 connect( listView(), &QListView::doubleClicked,
this, &QgsProcessingDxfLayersPanelWidget::configureLayer );
95 QPushButton *configureLayerButton =
new QPushButton( tr(
"Configure Layer…" ) );
96 connect( configureLayerButton, &QPushButton::clicked,
this, &QgsProcessingDxfLayersPanelWidget::configureLayer );
97 buttonBox()->addButton( configureLayerButton, 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 );
111 seenVectorLayers.insert( layer.
layer() );
117 if ( seenVectorLayers.contains( layer ) )
121 vm[
"layer"] = layer->id();
122 vm[
"attributeIndex"] = -1;
123 vm[
"overriddenLayerName"] = QString();
124 vm[
"buildDataDefinedBlocks"] = DEFAULT_DXF_DATA_DEFINED_BLOCKS;
125 vm[
"dataDefinedBlocksMaximumNumberOfClasses"] = -1;
127 const QString title = layer->name();
128 addOption( vm, title,
false );
132void QgsProcessingDxfLayersPanelWidget::configureLayer()
134 const QModelIndexList selection = listView()->selectionModel()->selectedIndexes();
135 if ( selection.size() != 1 )
137 QMessageBox::warning(
this, tr(
"Configure Layer" ), tr(
"Please select a single layer." ) );
141 QStandardItem *item = mModel->itemFromIndex( selection[0] );
142 const QVariant value = item->data( Qt::UserRole );
147 QgsProcessingDxfLayerDetailsWidget *widget =
new QgsProcessingDxfLayerDetailsWidget( value, mProject );
148 widget->setPanelTitle( tr(
"Configure Layer" ) );
149 widget->buttonBox()->hide();
151 connect( widget, &QgsProcessingDxfLayerDetailsWidget::widgetChanged,
this, [
this, item, widget]() { setItemValue( item, widget->value() ); } );
157 dlg.setWindowTitle( tr(
"Configure Layer" ) );
158 QVBoxLayout *vLayout =
new QVBoxLayout();
159 QgsProcessingDxfLayerDetailsWidget *widget =
new QgsProcessingDxfLayerDetailsWidget( 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 QgsProcessingDxfLayersPanelWidget::setItemValue( QStandardItem *item,
const QVariant &value )
173 mContext.setProject( mProject );
177 item->setText( titleForLayer( layer ) );
178 item->setData( value, Qt::UserRole );
195 title += tr(
" [overridden name: %1]" ).arg( layer.
overriddenName() );
207QgsProcessingDxfLayersWidget::QgsProcessingDxfLayersWidget( QWidget *parent )
210 QHBoxLayout *hl =
new QHBoxLayout();
211 hl->setContentsMargins( 0, 0, 0, 0 );
213 mLineEdit =
new QLineEdit();
214 mLineEdit->setEnabled(
false );
215 hl->addWidget( mLineEdit, 1 );
217 mToolButton =
new QToolButton();
218 mToolButton->setText( QString( QChar( 0x2026 ) ) );
219 hl->addWidget( mToolButton );
225 connect( mToolButton, &QToolButton::clicked,
this, &QgsProcessingDxfLayersWidget::showDialog );
228void QgsProcessingDxfLayersWidget::setValue(
const QVariant &value )
230 if ( value.isValid() )
231 mValue = value.userType() == QMetaType::Type::QVariantList ? value.toList() : QVariantList() << value;
239void QgsProcessingDxfLayersWidget::setProject(
QgsProject *project )
244void QgsProcessingDxfLayersWidget::showDialog()
249 QgsProcessingDxfLayersPanelWidget *widget =
new QgsProcessingDxfLayersPanelWidget( mValue, mProject );
250 widget->setPanelTitle( tr(
"Input layers" ) );
251 connect( widget, &QgsProcessingMultipleSelectionPanelWidget::selectionChanged,
this, [
this, widget]() { setValue( widget->selectedOptions() ); } );
258 dlg.setWindowTitle( tr(
"Input layers" ) );
259 QVBoxLayout *vLayout =
new QVBoxLayout();
260 QgsProcessingDxfLayersPanelWidget *widget =
new QgsProcessingDxfLayersPanelWidget( mValue, mProject );
261 vLayout->addWidget( widget );
262 widget->buttonBox()->addButton( QDialogButtonBox::Cancel );
263 connect( widget->buttonBox(), &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
264 connect( widget->buttonBox(), &QDialogButtonBox::rejected, &dlg, &QDialog::reject );
265 dlg.setLayout( vLayout );
268 setValue( widget->selectedOptions() );
273void QgsProcessingDxfLayersWidget::updateSummaryText()
275 mLineEdit->setText( tr(
"%n vector layer(s) selected",
nullptr, mValue.count() ) );
287QString QgsProcessingDxfLayersWidgetWrapper::parameterType()
const
294 return new QgsProcessingDxfLayersWidgetWrapper( parameter, type );
297QWidget *QgsProcessingDxfLayersWidgetWrapper::createWidget()
299 mPanel =
new QgsProcessingDxfLayersWidget(
nullptr );
300 mPanel->setProject( widgetContext().project() );
301 connect( mPanel, &QgsProcessingDxfLayersWidget::changed,
this, [
this] { emit widgetValueHasChanged(
this ); } );
310 mPanel->setProject( context.
project() );
314void QgsProcessingDxfLayersWidgetWrapper::setWidgetValue(
const QVariant &value,
QgsProcessingContext &context )
319 mPanel->setValue( value );
323QVariant QgsProcessingDxfLayersWidgetWrapper::widgetValue()
const
325 return mPanel ? mPanel->value() : QVariant();
@ VectorAnyGeometry
Any vector layer with geometry.
ProcessingMode
Types of modes which Processing widgets can be created for.
void fieldChanged(const QString &fieldName)
Emitted when the currently selected field changes.
Contains information about the context in which a processing algorithm is executed.
Base class for the definition of processing parameters.
static QVariantMap layerAsVariantMap(const QgsDxfExport::DxfLayer &layer)
Converts a single input layer to QVariant representation (a QVariantMap).
static QgsDxfExport::DxfLayer variantMapAsLayer(const QVariantMap &layerVariantMap, QgsProcessingContext &context)
Converts a QVariant value (a QVariantMap) to a single input layer.
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.
Encapsulates the properties of a vector layer containing features that will be exported to the DXF fi...
QString overriddenName() const
Returns the overridden layer name to be used in the exported DXF.
bool buildDataDefinedBlocks() const
Returns true if data defined point block symbols should be created.
QgsVectorLayer * layer() const
Returns the source vector layer.
int dataDefinedBlocksMaximumNumberOfClasses() const
Returns the maximum number of data defined symbol classes for which blocks are created.
QString splitLayerAttribute() const
Returns the name of the field used to split the source layer's features into multiple exported DXF la...
int layerOutputAttributeIndex() const
Returns the attribute index used to split the source layer's features into multiple exported DXF laye...