27 #include <QTableWidgetItem> 
   34 #include <QPushButton> 
   35 #include <QHBoxLayout> 
   36 #include <QFileDialog> 
   43   connect( layerComboBox, 
static_cast<void ( QComboBox::* )( 
int )
>( &QComboBox::currentIndexChanged ), 
this, &QgsAttributeTypeLoadDialog::fillComboBoxes );
 
   44   connect( keyComboBox, 
static_cast<void ( QComboBox::* )( 
int )
>( &QComboBox::currentIndexChanged ), 
this, [ = ]( 
int index ) { createPreview( index ); } );
 
   45   connect( valueComboBox, 
static_cast<void ( QComboBox::* )( 
int )
>( &QComboBox::currentIndexChanged ), 
this, [ = ]( 
int index ) { createPreview( index ); } );
 
   46   connect( previewButton, &QAbstractButton::pressed, 
this, &QgsAttributeTypeLoadDialog::previewButtonPushed );
 
   50   keyComboBox->setDisabled( 
true );
 
   51   valueComboBox->setDisabled( 
true );
 
   59 void QgsAttributeTypeLoadDialog::previewButtonPushed()
 
   61   createPreview( valueComboBox->currentIndex(), 
true );
 
   64 void QgsAttributeTypeLoadDialog::fillLayerList()
 
   66   layerComboBox->blockSignals( 
true );
 
   67   layerComboBox->clear();
 
   73       layerComboBox->addItem( vl->
name(), vl->
id() );
 
   75   layerComboBox->setCurrentIndex( -1 );
 
   76   layerComboBox->blockSignals( 
false );
 
   79 void QgsAttributeTypeLoadDialog::fillComboBoxes( 
int layerIndex )
 
   81   keyComboBox->blockSignals( 
true );
 
   82   valueComboBox->blockSignals( 
true );
 
   86   valueComboBox->clear();
 
   88   QgsVectorLayer *vLayer = qobject_cast<QgsVectorLayer *>( layerIndex < 0 ? 
nullptr : 
QgsProject::instance()->mapLayer( layerComboBox->itemData( layerIndex ).toString() ) );
 
   92     QMap<QString, int>::iterator it = fieldMap.begin();
 
   93     for ( ; it != fieldMap.end(); ++it )
 
   95       keyComboBox->addItem( it.key(), it.value() );
 
   96       valueComboBox->addItem( it.key(), it.value() );
 
  100   keyComboBox->setEnabled( 
nullptr != vLayer );
 
  101   valueComboBox->setEnabled( 
nullptr != vLayer );
 
  103   keyComboBox->setCurrentIndex( -1 );
 
  104   valueComboBox->setCurrentIndex( -1 );
 
  106   keyComboBox->blockSignals( 
false );
 
  107   valueComboBox->blockSignals( 
false );
 
  110 void QgsAttributeTypeLoadDialog::createPreview( 
int fieldIndex, 
bool full )
 
  112   previewTableWidget->clearContents();
 
  114   for ( 
int i = previewTableWidget->rowCount() - 1; i > 0; i-- )
 
  116     previewTableWidget->removeRow( i );
 
  118   if ( layerComboBox->currentIndex() < 0 || fieldIndex < 0 )
 
  123   int idx = keyComboBox->currentData().toInt();
 
  124   int idx2 = valueComboBox->currentData().toInt();
 
  126   QgsVectorLayer *vLayer = qobject_cast<QgsVectorLayer *>( dataLayer );
 
  131   attributeList.append( idx );
 
  132   attributeList.append( idx2 );
 
  142     if ( val1.isValid() && !val1.isNull() && !val1.toString().isEmpty()
 
  143          && val2.isValid() && !val2.isNull() && !val2.toString().isEmpty() )
 
  145       valueMap.insert( val1.toString(), val2.toString() );
 
  151   for ( QMap<QString, QVariant>::iterator mit = 
valueMap.begin(); mit != 
valueMap.end(); ++mit, row++ )
 
  153     previewTableWidget->insertRow( row );
 
  154     previewTableWidget->setItem( row, 0, 
new QTableWidgetItem( mit.value().toString() ) );
 
  155     previewTableWidget->setItem( row, 1, 
new QTableWidgetItem( mit.key() ) );
 
  166   return nullCheckBox->isChecked();
 
  169 void QgsAttributeTypeLoadDialog::loadDataToValueMap()
 
  172   int idx = keyComboBox->currentData().toInt();
 
  173   int idx2 = valueComboBox->currentData().toInt();
 
  175   QgsVectorLayer *vLayer = qobject_cast<QgsVectorLayer *>( dataLayer );
 
  180   attributeList.append( idx );
 
  181   attributeList.append( idx2 );
 
  189     if ( val.isValid() && !val.isNull() && !val.toString().isEmpty() )
 
  191       mValueMap.insert( f.
attribute( idx2 ).toString(), val );
 
  199   loadDataToValueMap();
 
void accept() override
Overloaded accept method which will write the feature field values, then delegate to QDialog::accept(...
QgsAttributeTypeLoadDialog(QgsVectorLayer *vl)
bool insertNull()
Returns true if the "Add NULL value" checkbox has been checked.
QMap< QString, QVariant > & valueMap()
Returns the value map which is currently active.
void setVectorLayer(QgsVectorLayer *layer)
Sets predefined vector layer for selection of data.
Wrapper for iterator of features from vector data provider or vector layer.
bool nextFeature(QgsFeature &f)
This class wraps a request for features to a vector layer (or directly its vector data provider).
@ NoGeometry
Geometry is not required. It may still be returned if e.g. required for a filter condition.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
QVariant attribute(const QString &name) const
Lookup attribute value from attribute name.
Base class for all map layer types.
QString id() const
Returns the layer's unique ID, which is used to access this layer from QgsProject.
static QgsProject * instance()
Returns the QgsProject singleton instance.
Q_INVOKABLE QgsMapLayer * mapLayer(const QString &layerId) const
Retrieve a pointer to a registered layer by layer ID.
QMap< QString, QgsMapLayer * > mapLayers(const bool validOnly=false) const
Returns a map of all registered layers by layer ID.
QMap< QString, int > fieldNameMap() const
Returns a map where the key is the name of the field and the value is its index.
Represents a vector layer which manages a vector based data sets.
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const FINAL
Queries the layer for features specified in request.
QgsVectorDataProvider * dataProvider() FINAL
Returns the layer's data provider, it may be nullptr.
QList< int > QgsAttributeList