Skip to content

Commit f95f64e

Browse files
etienneskyNathanW2
authored andcommitted
implement simple identify results table view
1 parent 2102a80 commit f95f64e

File tree

2 files changed

+204
-14
lines changed

2 files changed

+204
-14
lines changed

src/app/qgsidentifyresultsdialog.cpp

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,65 @@ void QgsIdentifyResultsDialog::addFeature( QgsVectorLayer *vlayer, const QgsFeat
467467
}
468468
}
469469

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+
470529
highlightFeature( featItem );
471530
}
472531

@@ -591,6 +650,24 @@ void QgsIdentifyResultsDialog::addFeature( QgsRasterLayer *layer,
591650
derivedItem->addChild( new QTreeWidgetItem( QStringList() << it.key() << it.value() ) );
592651
}
593652
}
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+
594671
}
595672

596673
void QgsIdentifyResultsDialog::editingToggled()
@@ -851,6 +928,9 @@ void QgsIdentifyResultsDialog::clear()
851928
lstResults->clear();
852929
clearHighlights();
853930

931+
tblResults->clearContents();
932+
tblResults->setRowCount( 0 );
933+
854934
// keep it visible but disabled, it can switch from disabled/enabled
855935
// after raster format change
856936
mPrintToolButton->setDisabled( true );
@@ -1112,6 +1192,23 @@ void QgsIdentifyResultsDialog::layerDestroyed()
11121192

11131193
disconnectLayer( theSender );
11141194
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+
}
11151212
}
11161213

11171214
void QgsIdentifyResultsDialog::disconnectLayer( QObject *layer )
@@ -1158,6 +1255,24 @@ void QgsIdentifyResultsDialog::featureDeleted( QgsFeatureId fid )
11581255
{
11591256
delete layItem;
11601257
}
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+
}
11611276
}
11621277

11631278
void QgsIdentifyResultsDialog::attributeValueChanged( QgsFeatureId fid, int idx, const QVariant &val )

src/ui/qgsidentifyresultsbase.ui

Lines changed: 89 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,88 @@
1818
<number>2</number>
1919
</property>
2020
<item>
21-
<widget class="QTreeWidget" name="lstResults">
22-
<property name="lineWidth">
23-
<number>2</number>
21+
<widget class="QTabWidget" name="tabWidget">
22+
<property name="currentIndex">
23+
<number>0</number>
2424
</property>
25-
<property name="alternatingRowColors">
26-
<bool>true</bool>
27-
</property>
28-
<property name="sortingEnabled">
29-
<bool>true</bool>
30-
</property>
31-
<column>
32-
<property name="text">
33-
<string notr="true">1</string>
34-
</property>
35-
</column>
25+
<widget class="QWidget" name="tab">
26+
<attribute name="title">
27+
<string>Tree</string>
28+
</attribute>
29+
<layout class="QVBoxLayout" name="verticalLayout">
30+
<property name="spacing">
31+
<number>0</number>
32+
</property>
33+
<property name="margin">
34+
<number>0</number>
35+
</property>
36+
<item>
37+
<widget class="QTreeWidget" name="lstResults">
38+
<property name="lineWidth">
39+
<number>2</number>
40+
</property>
41+
<property name="alternatingRowColors">
42+
<bool>true</bool>
43+
</property>
44+
<property name="sortingEnabled">
45+
<bool>true</bool>
46+
</property>
47+
<column>
48+
<property name="text">
49+
<string notr="true">1</string>
50+
</property>
51+
</column>
52+
</widget>
53+
</item>
54+
</layout>
55+
</widget>
56+
<widget class="QWidget" name="tab_2">
57+
<attribute name="title">
58+
<string>Table</string>
59+
</attribute>
60+
<layout class="QVBoxLayout" name="verticalLayout_2">
61+
<property name="spacing">
62+
<number>0</number>
63+
</property>
64+
<property name="margin">
65+
<number>0</number>
66+
</property>
67+
<item>
68+
<widget class="QTableWidget" name="tblResults">
69+
<column>
70+
<property name="text">
71+
<string>Layer</string>
72+
</property>
73+
</column>
74+
<column>
75+
<property name="text">
76+
<string>FID</string>
77+
</property>
78+
</column>
79+
<column>
80+
<property name="text">
81+
<string>Attribute</string>
82+
</property>
83+
</column>
84+
<column>
85+
<property name="text">
86+
<string>Value</string>
87+
</property>
88+
</column>
89+
</widget>
90+
</item>
91+
</layout>
92+
</widget>
93+
<widget class="QWidget" name="tab_3">
94+
<attribute name="title">
95+
<string>Graph</string>
96+
</attribute>
97+
<layout class="QVBoxLayout" name="verticalLayout_3">
98+
<item>
99+
<widget class="QwtPlot" name="mPlot"/>
100+
</item>
101+
</layout>
102+
</widget>
36103
</widget>
37104
</item>
38105
<item>
@@ -212,6 +279,14 @@
212279
</layout>
213280
</widget>
214281
<layoutdefault spacing="6" margin="11"/>
282+
<customwidgets>
283+
<customwidget>
284+
<class>QwtPlot</class>
285+
<extends>QFrame</extends>
286+
<header>qwt_plot.h</header>
287+
<container>1</container>
288+
</customwidget>
289+
</customwidgets>
215290
<resources>
216291
<include location="../../images/images.qrc"/>
217292
</resources>

0 commit comments

Comments
 (0)