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 unique ID, geometry and a list of field...
QVariant attribute(const QString &name) const
Lookup attribute value by 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