@@ -467,6 +467,65 @@ void QgsIdentifyResultsDialog::addFeature( QgsVectorLayer *vlayer, const QgsFeat
467
467
}
468
468
}
469
469
470
+ // table
471
+ int j = tblResults->rowCount ();
472
+ for ( int i = 0 ; i < attrs.count (); ++i )
473
+ {
474
+ if ( i >= fields.count () )
475
+ continue ;
476
+
477
+ QString value = fields[i].displayString ( attrs[i] );
478
+ QString value2 = value;
479
+ switch ( vlayer->editType ( i ) )
480
+ {
481
+ case QgsVectorLayer::Hidden:
482
+ // skip the item
483
+ continue ;
484
+
485
+ case QgsVectorLayer::ValueMap:
486
+ value2 = vlayer->valueMap ( i ).key ( value, QString ( " (%1)" ).arg ( value ) );
487
+ break ;
488
+
489
+ case QgsVectorLayer::Calendar:
490
+ if ( attrs[i].canConvert ( QVariant::Date ) )
491
+ value2 = attrs[i].toDate ().toString ( vlayer->dateFormat ( i ) );
492
+ break ;
493
+
494
+ default :
495
+ break ;
496
+ }
497
+
498
+ tblResults->setRowCount ( j + 1 );
499
+
500
+ QgsDebugMsg ( QString ( " adding item #%1 / %2 / %3 / %4" ).arg ( j ).arg ( vlayer->name () ).arg ( vlayer->attributeDisplayName ( i ) ).arg ( value2 ) );
501
+
502
+ QTableWidgetItem *item = new QTableWidgetItem ( vlayer->name () );
503
+ item->setData ( Qt::UserRole, QVariant::fromValue ( qobject_cast<QObject *>( vlayer ) ) );
504
+ tblResults->setItem ( j, 0 , item );
505
+
506
+ item = new QTableWidgetItem ( FID_TO_STRING ( f.id () ) );
507
+ item->setData ( Qt::UserRole, FID_TO_STRING ( f.id () ) );
508
+ item->setData ( Qt::UserRole + 1 , mFeatures .size () );
509
+ tblResults->setItem ( j, 1 , item );
510
+
511
+ item = new QTableWidgetItem ( QString::number ( i ) );
512
+ if ( fields[i].name () == vlayer->displayField () )
513
+ item->setData ( Qt::DisplayRole, vlayer->attributeDisplayName ( i ) + " *" );
514
+ else
515
+ item->setData ( Qt::DisplayRole, vlayer->attributeDisplayName ( i ) );
516
+ item->setData ( Qt::UserRole, fields[i].name () );
517
+ item->setData ( Qt::UserRole + 1 , i );
518
+ tblResults->setItem ( j, 2 , item );
519
+
520
+ item = new QTableWidgetItem ( value );
521
+ item->setData ( Qt::UserRole, value );
522
+ item->setData ( Qt::DisplayRole, value2 );
523
+ tblResults->setItem ( j, 3 , item );
524
+
525
+ j++;
526
+ }
527
+ tblResults->resizeColumnToContents ( 1 );
528
+
470
529
highlightFeature ( featItem );
471
530
}
472
531
@@ -591,6 +650,24 @@ void QgsIdentifyResultsDialog::addFeature( QgsRasterLayer *layer,
591
650
derivedItem->addChild ( new QTreeWidgetItem ( QStringList () << it.key () << it.value () ) );
592
651
}
593
652
}
653
+
654
+ // table
655
+ int j = tblResults->rowCount ();
656
+ tblResults->setRowCount ( j + attributes.count () );
657
+ int i = 1 ;
658
+ for ( QMap<QString, QString>::const_iterator it = attributes.begin (); it != attributes.end (); ++it )
659
+ {
660
+ QgsDebugMsg ( QString ( " adding item #%1 / %1 / %2 / %3" ).arg ( j ).arg ( layer->name () ).arg ( it.key () ).arg ( it.value () ) );
661
+ QTableWidgetItem *item = new QTableWidgetItem ( layer->name () );
662
+ item->setData ( Qt::UserRole, QVariant::fromValue ( qobject_cast<QObject *>( layer ) ) );
663
+ tblResults->setItem ( j, 0 , item );
664
+ tblResults->setItem ( j, 1 , new QTableWidgetItem ( QString::number ( i ) ) );
665
+ tblResults->setItem ( j, 2 , new QTableWidgetItem ( it.key () ) );
666
+ tblResults->setItem ( j, 3 , new QTableWidgetItem ( it.value () ) );
667
+ j++; i++;
668
+ }
669
+ tblResults->resizeColumnToContents ( 1 );
670
+
594
671
}
595
672
596
673
void QgsIdentifyResultsDialog::editingToggled ()
@@ -851,6 +928,9 @@ void QgsIdentifyResultsDialog::clear()
851
928
lstResults->clear ();
852
929
clearHighlights ();
853
930
931
+ tblResults->clearContents ();
932
+ tblResults->setRowCount ( 0 );
933
+
854
934
// keep it visible but disabled, it can switch from disabled/enabled
855
935
// after raster format change
856
936
mPrintToolButton ->setDisabled ( true );
@@ -1112,6 +1192,23 @@ void QgsIdentifyResultsDialog::layerDestroyed()
1112
1192
1113
1193
disconnectLayer ( theSender );
1114
1194
delete layerItem ( theSender );
1195
+
1196
+ // remove items, starting from last
1197
+ for ( int i = tblResults->rowCount () - 1 ; i >= 0 ; i-- )
1198
+ {
1199
+ QgsDebugMsg ( QString ( " item %1 / %2" ).arg ( i ).arg ( tblResults->rowCount () ) );
1200
+ QTableWidgetItem *layItem = tblResults->item ( i, 0 );
1201
+ if ( layItem && layItem->data ( Qt::UserRole ).value <QObject *>() == sender () )
1202
+ {
1203
+ QgsDebugMsg ( QString ( " removing row %1" ).arg ( i ) );
1204
+ tblResults->removeRow ( i );
1205
+ }
1206
+ }
1207
+
1208
+ if ( lstResults->topLevelItemCount () == 0 )
1209
+ {
1210
+ close ();
1211
+ }
1115
1212
}
1116
1213
1117
1214
void QgsIdentifyResultsDialog::disconnectLayer ( QObject *layer )
@@ -1158,6 +1255,24 @@ void QgsIdentifyResultsDialog::featureDeleted( QgsFeatureId fid )
1158
1255
{
1159
1256
delete layItem;
1160
1257
}
1258
+
1259
+ for ( int i = tblResults->rowCount () - 1 ; i >= 0 ; i-- )
1260
+ {
1261
+ QgsDebugMsg ( QString ( " item %1 / %2" ).arg ( i ).arg ( tblResults->rowCount () ) );
1262
+ QTableWidgetItem *layItem = tblResults->item ( i, 0 );
1263
+ QTableWidgetItem *featItem = tblResults->item ( i, 1 );
1264
+ if ( layItem && layItem->data ( Qt::UserRole ).value <QObject *>() == sender () &&
1265
+ featItem && STRING_TO_FID ( featItem->data ( Qt::UserRole ) ) == fid )
1266
+ {
1267
+ QgsDebugMsg ( QString ( " removing row %1" ).arg ( i ) );
1268
+ tblResults->removeRow ( i );
1269
+ }
1270
+ }
1271
+
1272
+ if ( lstResults->topLevelItemCount () == 0 )
1273
+ {
1274
+ close ();
1275
+ }
1161
1276
}
1162
1277
1163
1278
void QgsIdentifyResultsDialog::attributeValueChanged ( QgsFeatureId fid, int idx, const QVariant &val )
0 commit comments