@@ -88,6 +88,7 @@ void QgsPgTableModel::addTableEntry( QgsPostgresLayerProperty layerProperty )
88
88
QStandardItem *tableItem = new QStandardItem ( layerProperty.tableName );
89
89
QStandardItem *geomItem = new QStandardItem ( layerProperty.geometryColName );
90
90
QStandardItem *sridItem = new QStandardItem ( layerProperty.srid );
91
+ sridItem->setEditable ( false );
91
92
92
93
QString pkText, pkCol = " " ;
93
94
switch ( layerProperty.pkCols .size () )
@@ -120,11 +121,13 @@ void QgsPgTableModel::addTableEntry( QgsPostgresLayerProperty layerProperty )
120
121
childItemList << selItem;
121
122
childItemList << sqlItem;
122
123
123
- if ( geomType == QGis::UnknownGeometry || layerProperty.srid .isEmpty () )
124
+ if ( geomType == QGis::UnknownGeometry ||
125
+ ( geomType != QGis::NoGeometry && layerProperty.srid .isEmpty () ) ||
126
+ pkText == tr ( " Select..." ) )
124
127
{
125
128
foreach ( QStandardItem *item, childItemList )
126
129
{
127
- item->setFlags ( item->flags () & ~( Qt::ItemIsEditable | Qt:: ItemIsEnabled | Qt::ItemIsSelectable ) );
130
+ item->setFlags ( item->flags () & ~( Qt::ItemIsEnabled | Qt::ItemIsSelectable ) );
128
131
}
129
132
}
130
133
@@ -257,9 +260,13 @@ void QgsPgTableModel::setGeometryTypesForTable( QgsPostgresLayerProperty layerPr
257
260
258
261
row[ dbtmSrid ]->setText ( sridList.at ( 0 ) );
259
262
263
+ Qt::ItemFlags flags = Qt::ItemIsEnabled;
264
+ if ( layerProperty.pkCols .size () < 2 )
265
+ flags |= Qt::ItemIsSelectable;
266
+
260
267
foreach ( QStandardItem *item, row )
261
268
{
262
- item->setFlags ( item->flags () | Qt::ItemIsSelectable | Qt::ItemIsEnabled );
269
+ item->setFlags ( item->flags () | flags );
263
270
}
264
271
265
272
for ( int j = 1 ; j < typeList.size (); j++ )
@@ -295,12 +302,18 @@ bool QgsPgTableModel::setData( const QModelIndex &idx, const QVariant &value, in
295
302
if ( !QStandardItemModel::setData ( idx, value, role ) )
296
303
return false ;
297
304
298
- if ( idx.column () == dbtmType || idx.column () == dbtmSrid )
305
+ if ( idx.column () == dbtmType || idx.column () == dbtmSrid || idx. column () == dbtmPkCol )
299
306
{
300
- bool ok;
301
- idx.sibling ( idx.row (), dbtmSrid ).data ().toInt ( &ok );
307
+ QGis::GeometryType geomType = ( QGis::GeometryType ) idx.sibling ( idx.row (), dbtmType ).data ( Qt::UserRole + 2 ).toInt ();
308
+
309
+ bool ok = geomType != QGis::UnknownGeometry;
310
+
311
+ if ( geomType != QGis::NoGeometry )
312
+ idx.sibling ( idx.row (), dbtmSrid ).data ().toInt ( &ok );
302
313
303
- ok &= idx.sibling ( idx.row (), dbtmType ).data ( Qt::UserRole + 2 ).toInt () != QGis::UnknownGeometry;
314
+ QStringList pkCols = idx.sibling ( idx.row (), dbtmPkCol ).data ( Qt::UserRole + 1 ).toStringList ();
315
+ if ( pkCols.size () > 0 )
316
+ ok = pkCols.contains ( idx.sibling ( idx.row (), dbtmPkCol ).data ().toString () );
304
317
305
318
for ( int i = 0 ; i < dbtmColumns; i++ )
306
319
{
@@ -328,8 +341,9 @@ QString QgsPgTableModel::layerURI( const QModelIndex &index, QString connInfo, b
328
341
QStandardItem *pkItem = itemFromIndex ( index.sibling ( index.row (), dbtmPkCol ) );
329
342
QString pkColumnName = pkItem->data ( Qt::UserRole + 2 ).toString ();
330
343
331
- if ( pkItem->data ( Qt::UserRole + 1 ).toStringList ().size () > 0 && pkColumnName.isEmpty () )
332
- // no primary key for view selected
344
+ if ( pkItem->data ( Qt::UserRole + 1 ).toStringList ().size () > 0 &&
345
+ !pkItem->data ( Qt::UserRole + 1 ).toStringList ().contains ( pkColumnName ) )
346
+ // no valid primary candidate selected
333
347
return QString::null;
334
348
335
349
QString schemaName = index.sibling ( index.row (), dbtmSchema ).data ( Qt::DisplayRole ).toString ();
0 commit comments