20 #include <QMessageBox> 
   21 #include <QPushButton> 
   22 #include <QStandardItemModel> 
   23 #include <QToolButton> 
   36 QgsProcessingDxfLayerDetailsWidget::QgsProcessingDxfLayerDetailsWidget( 
const QVariant &value, 
QgsProject *project )
 
   40   mFieldsComboBox->setAllowEmptyFieldName( 
true );
 
   42   mContext.setProject( project );
 
   45   mLayer = layer.
layer();
 
   50   mFieldsComboBox->setLayer( mLayer );
 
   56 QVariant QgsProcessingDxfLayerDetailsWidget::value()
 const 
   58   int index = mLayer->fields().lookupField( mFieldsComboBox->currentField() );
 
   68 QgsProcessingDxfLayersPanelWidget::QgsProcessingDxfLayersPanelWidget(
 
   69   const QVariant &value,
 
   72   : QgsProcessingMultipleSelectionPanelWidget( QVariantList(), QVariantList(), parent )
 
   75   connect( listView(), &QListView::doubleClicked, 
this, &QgsProcessingDxfLayersPanelWidget::configureLayer );
 
   77   QPushButton *configureLayerButton = 
new QPushButton( tr( 
"Configure Layer…" ) );
 
   78   connect( configureLayerButton, &QPushButton::clicked, 
this, &QgsProcessingDxfLayersPanelWidget::configureLayer );
 
   79   buttonBox()->addButton( configureLayerButton, QDialogButtonBox::ActionRole );
 
   82   mContext.setProject( project );
 
   84   QSet<const QgsVectorLayer *> seenVectorLayers;
 
   85   const QVariantList valueList = value.toList();
 
   86   for ( 
const QVariant &v : valueList )
 
   92     addOption( v, titleForLayer( layer ), 
true );
 
   93     seenVectorLayers.insert( layer.
layer() );
 
   99     if ( seenVectorLayers.contains( layer ) )
 
  103     vm[
"layer"] = layer->id();
 
  104     vm[
"attributeIndex"] = -1;
 
  106     QString title = layer->name();
 
  107     addOption( vm, title, 
false );
 
  111 void QgsProcessingDxfLayersPanelWidget::configureLayer()
 
  113   const QModelIndexList selection = listView()->selectionModel()->selectedIndexes();
 
  114   if ( selection.size() != 1 )
 
  116     QMessageBox::warning( 
this, tr( 
"Configure Layer" ), tr( 
"Please select a single layer." ) );
 
  120   QStandardItem *item = mModel->itemFromIndex( selection[0] );
 
  121   QVariant value = item->data( Qt::UserRole );
 
  126     QgsProcessingDxfLayerDetailsWidget *widget = 
new QgsProcessingDxfLayerDetailsWidget( value, mProject );
 
  127     widget->setPanelTitle( tr( 
"Configure Layer" ) );
 
  128     widget->buttonBox()->hide();
 
  130     connect( widget, &QgsProcessingDxfLayerDetailsWidget::widgetChanged, 
this, [ = ]()
 
  132       setItemValue( item, widget->value() );
 
  139     dlg.setWindowTitle( tr( 
"Configure Layer" ) );
 
  140     QVBoxLayout *vLayout = 
new QVBoxLayout();
 
  141     QgsProcessingDxfLayerDetailsWidget *widget = 
new QgsProcessingDxfLayerDetailsWidget( value, mProject );
 
  142     vLayout->addWidget( widget );
 
  143     connect( widget->buttonBox(), &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
 
  144     connect( widget->buttonBox(), &QDialogButtonBox::rejected, &dlg, &QDialog::reject );
 
  145     dlg.setLayout( vLayout );
 
  148       setItemValue( item, widget->value() );
 
  153 void QgsProcessingDxfLayersPanelWidget::setItemValue( QStandardItem *item, 
const QVariant &value )
 
  155   mContext.setProject( mProject );
 
  159   item->setText( titleForLayer( layer ) );
 
  160   item->setData( value, Qt::UserRole );
 
  178 QgsProcessingDxfLayersWidget::QgsProcessingDxfLayersWidget( QWidget *parent )
 
  181   QHBoxLayout *hl = 
new QHBoxLayout();
 
  182   hl->setContentsMargins( 0, 0, 0, 0 );
 
  184   mLineEdit = 
new QLineEdit();
 
  185   mLineEdit->setEnabled( 
false );
 
  186   hl->addWidget( mLineEdit, 1 );
 
  188   mToolButton = 
new QToolButton();
 
  189   mToolButton->setText( QString( QChar( 0x2026 ) ) );
 
  190   hl->addWidget( mToolButton );
 
  196   connect( mToolButton, &QToolButton::clicked, 
this, &QgsProcessingDxfLayersWidget::showDialog );
 
  199 void QgsProcessingDxfLayersWidget::setValue( 
const QVariant &value )
 
  201   if ( value.isValid() )
 
  202     mValue = value.type() == QVariant::List ? value.toList() : QVariantList() << value;
 
  210 void QgsProcessingDxfLayersWidget::setProject( 
QgsProject *project )
 
  215 void QgsProcessingDxfLayersWidget::showDialog()
 
  220     QgsProcessingDxfLayersPanelWidget *widget = 
new QgsProcessingDxfLayersPanelWidget( mValue, mProject );
 
  221     widget->setPanelTitle( tr( 
"Input layers" ) );
 
  222     connect( widget, &QgsProcessingMultipleSelectionPanelWidget::selectionChanged, 
this, [ = ]()
 
  224       setValue( widget->selectedOptions() );
 
  232     dlg.setWindowTitle( tr( 
"Input layers" ) );
 
  233     QVBoxLayout *vLayout = 
new QVBoxLayout();
 
  234     QgsProcessingDxfLayersPanelWidget *widget = 
new QgsProcessingDxfLayersPanelWidget( mValue, mProject );
 
  235     vLayout->addWidget( widget );
 
  236     widget->buttonBox()->addButton( QDialogButtonBox::Cancel );
 
  237     connect( widget->buttonBox(), &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
 
  238     connect( widget->buttonBox(), &QDialogButtonBox::rejected, &dlg, &QDialog::reject );
 
  239     dlg.setLayout( vLayout );
 
  242       setValue( widget->selectedOptions() );
 
  247 void QgsProcessingDxfLayersWidget::updateSummaryText()
 
  249   mLineEdit->setText( tr( 
"%1 vector layers selected" ).arg( mValue.count() ) );
 
  262 QString QgsProcessingDxfLayersWidgetWrapper::parameterType()
 const 
  269   return new QgsProcessingDxfLayersWidgetWrapper( parameter, type );
 
  272 QWidget *QgsProcessingDxfLayersWidgetWrapper::createWidget()
 
  274   mPanel = 
new QgsProcessingDxfLayersWidget( 
nullptr );
 
  275   mPanel->setProject( widgetContext().project() );
 
  276   connect( mPanel, &QgsProcessingDxfLayersWidget::changed, 
this, [ = ]
 
  278     emit widgetValueHasChanged( 
this );
 
  288     mPanel->setProject( context.
project() );
 
  292 void QgsProcessingDxfLayersWidgetWrapper::setWidgetValue( 
const QVariant &value, 
QgsProcessingContext &context )
 
  297     mPanel->setValue( value );
 
  301 QVariant QgsProcessingDxfLayersWidgetWrapper::widgetValue()
 const 
  303   return mPanel ? mPanel->value() : QVariant();
 
  306 QStringList QgsProcessingDxfLayersWidgetWrapper::compatibleParameterTypes()
 const 
  317 QStringList QgsProcessingDxfLayersWidgetWrapper::compatibleOutputTypes()
 const 
void fieldChanged(const QString &fieldName)
Emitted when the currently selected field changes.
Contains information about the context in which a processing algorithm is executed.
WidgetType
Types of dialogs which Processing widgets can be created for.
static QString typeName()
Returns the type name for the output class.
static QString typeName()
Returns the type name for the output class.
static QString typeName()
Returns the type name for the output class.
static QString typeName()
Returns the type name for the output class.
static QString typeName()
Returns the type name for the output class.
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.
static QString typeName()
Returns the type name for the parameter class.
static QString typeName()
Returns the type name for the parameter class.
static QString typeName()
Returns the type name for the parameter class.
static QString typeName()
Returns the type name for the parameter class.
static QString typeName()
Returns the type name for the parameter class.
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.
Layers and optional attribute index to split into multiple layers using attribute value as layer name...
QgsVectorLayer * layer() const
Returns the layer.
QString splitLayerAttribute() const
If the split layer attribute is set, the vector layer will be split into several dxf layers,...
int layerOutputAttributeIndex() const
Returns the attribute index used to split into multiple layers.