29
29
#include " qgseditorwidgetregistry.h"
30
30
#include " qgssettings.h"
31
31
#include " qgsgui.h"
32
+ #include " qgsfieldformatter.h"
33
+ #include " qgsfieldformatterregistry.h"
32
34
33
35
#include < limits>
34
36
#include < QComboBox>
@@ -141,8 +143,6 @@ void QgsMergeAttributesDialog::createTableWidgetContents()
141
143
QStringList verticalHeaderLabels; // the id column is in the
142
144
verticalHeaderLabels << tr ( " Id" );
143
145
144
- QgsAttributeEditorContext context;
145
-
146
146
for ( int i = 0 ; i < mFeatureList .size (); ++i )
147
147
{
148
148
verticalHeaderLabels << FID_TO_STRING ( mFeatureList [i].id () );
@@ -153,16 +153,13 @@ void QgsMergeAttributesDialog::createTableWidgetContents()
153
153
{
154
154
int idx = mTableWidget ->horizontalHeaderItem ( j )->data ( FieldIndex ).toInt ();
155
155
156
- QTableWidgetItem *attributeValItem = new QTableWidgetItem ( attrs.at ( idx ).toString () );
156
+ const QgsEditorWidgetSetup setup = mFields .at ( idx ).editorWidgetSetup ();
157
+ const QgsFieldFormatter *formatter = QgsApplication::fieldFormatterRegistry ()->fieldFormatter ( setup.type () );
158
+ QString stringVal = formatter->representValue ( mVectorLayer , idx, setup.config (), QVariant (), attrs.at ( idx ) );
159
+
160
+ QTableWidgetItem *attributeValItem = new QTableWidgetItem ( stringVal );
157
161
attributeValItem->setFlags ( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
158
162
mTableWidget ->setItem ( i + 1 , j, attributeValItem );
159
- QgsEditorWidgetWrapper *eww = QgsGui::editorWidgetRegistry ()->create ( mVectorLayer , idx, nullptr , mTableWidget , context );
160
- if ( eww )
161
- {
162
- eww->setValue ( attrs.at ( idx ) );
163
- mTableWidget ->setCellWidget ( i + 1 , j, eww->widget () );
164
- mTableWidget ->setCellWidget ( i + 1 , j, eww->widget () );
165
- }
166
163
}
167
164
}
168
165
@@ -317,14 +314,10 @@ void QgsMergeAttributesDialog::refreshMergedValue( int col )
317
314
}
318
315
319
316
// insert string into table widget
320
- QTableWidgetItem *newTotalItem = new QTableWidgetItem ();
321
- newTotalItem->setData ( Qt::DisplayRole, mergeResult );
322
- newTotalItem->setFlags ( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
323
-
324
- // block signals to prevent table widget switching combo box to "manual" entry
325
- mTableWidget ->blockSignals ( true );
326
- mTableWidget ->setItem ( mTableWidget ->rowCount () - 1 , col, newTotalItem );
327
- mTableWidget ->blockSignals ( false );
317
+ mUpdating = true ; // prevent combobox changing to "manual" value
318
+ QTableWidgetItem *item = mTableWidget ->item ( mTableWidget ->rowCount () - 1 , col );
319
+ item->setData ( Qt::DisplayRole, mergeResult );
320
+ mUpdating = false ;
328
321
}
329
322
330
323
QVariant QgsMergeAttributesDialog::featureAttribute ( QgsFeatureId featureId, int col )
@@ -337,9 +330,8 @@ QVariant QgsMergeAttributesDialog::featureAttribute( QgsFeatureId featureId, int
337
330
338
331
if ( i < mFeatureList .size () )
339
332
{
340
- QgsEditorWidgetWrapper *wrapper = QgsEditorWidgetWrapper::fromWidget ( mTableWidget ->cellWidget ( i + 1 , col ) );
341
- if ( wrapper )
342
- return wrapper->value ();
333
+ const QgsFeature f = mFeatureList .at ( i );
334
+ return f.attributes ().at ( fieldIdx );
343
335
}
344
336
345
337
return QVariant ( mVectorLayer ->fields ().at ( fieldIdx ).type () );
@@ -498,6 +490,9 @@ void QgsMergeAttributesDialog::mRemoveFeatureFromSelectionButton_clicked()
498
490
499
491
void QgsMergeAttributesDialog::tableWidgetCellChanged ( int row, int column )
500
492
{
493
+ if ( mUpdating )
494
+ return ;
495
+
501
496
if ( row < mTableWidget ->rowCount () - 1 )
502
497
{
503
498
// only looking for edits in the final row
0 commit comments