Skip to content

Commit 0ef33d8

Browse files
committed
regroup 'Identify Layers' and 'Data Sources' in the same tab (project properties)
1 parent b5aa65c commit 0ef33d8

5 files changed

+105
-178
lines changed

src/app/qgslayercapabilitiesmodel.cpp

+47-5
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ QgsLayerCapabilitiesModel::QgsLayerCapabilitiesModel( QgsProject *project, QObje
2424
: QSortFilterProxyModel( parent )
2525
{
2626
mNonIdentifiableLayers = project->nonIdentifiableLayers();
27+
mRequiredLayers = project->requiredLayers();
2728

2829
const QMap<QString, QgsMapLayer *> &mapLayers = QgsProject::instance()->mapLayers();
2930
for ( QMap<QString, QgsMapLayer *>::const_iterator it = mapLayers.constBegin(); it != mapLayers.constEnd(); ++it )
@@ -71,6 +72,11 @@ QStringList QgsLayerCapabilitiesModel::nonIdentifiableLayers() const
7172
return mNonIdentifiableLayers;
7273
}
7374

75+
QSet<QgsMapLayer *> QgsLayerCapabilitiesModel::requiredLayers() const
76+
{
77+
return mRequiredLayers;
78+
}
79+
7480
bool QgsLayerCapabilitiesModel::readOnly( QgsMapLayer *layer ) const
7581
{
7682
return mReadOnlyLayers.value( layer, true );
@@ -84,7 +90,7 @@ bool QgsLayerCapabilitiesModel::searchable( QgsMapLayer *layer ) const
8490
int QgsLayerCapabilitiesModel::columnCount( const QModelIndex &parent ) const
8591
{
8692
Q_UNUSED( parent );
87-
return 4;
93+
return 5;
8894
}
8995

9096
QVariant QgsLayerCapabilitiesModel::headerData( int section, Qt::Orientation orientation, int role ) const
@@ -95,14 +101,31 @@ QVariant QgsLayerCapabilitiesModel::headerData( int section, Qt::Orientation ori
95101
{
96102
switch ( section )
97103
{
98-
case 0:
104+
case LayerColumn:
99105
return tr( "Layer" );
100-
case 1:
106+
case IdentifiableColumn:
101107
return tr( "Identifiable" );
102-
case 2:
108+
case ReadOnlyColumn:
103109
return tr( "Read-only" );
104-
case 3:
110+
case SearchableColumn:
105111
return tr( "Searchable" );
112+
case RequiredColumn:
113+
return tr( "Required" );
114+
default:
115+
return QVariant();
116+
}
117+
}
118+
if ( role == Qt::ToolTipRole )
119+
{
120+
switch ( section )
121+
{
122+
case LayerColumn:
123+
case IdentifiableColumn:
124+
case ReadOnlyColumn:
125+
case SearchableColumn:
126+
return QVariant();
127+
case RequiredColumn:
128+
return tr( "Layers which are protected from inadvertent removal from the project." );
106129
default:
107130
return QVariant();
108131
}
@@ -158,6 +181,10 @@ Qt::ItemFlags QgsLayerCapabilitiesModel::flags( const QModelIndex &idx ) const
158181
return nullptr;
159182
}
160183
}
184+
else if ( idx.column() == RequiredColumn )
185+
{
186+
return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsUserCheckable;
187+
}
161188
}
162189
return nullptr;
163190
}
@@ -243,6 +270,10 @@ QVariant QgsLayerCapabilitiesModel::data( const QModelIndex &idx, int role ) con
243270
if ( layer->type() == QgsMapLayer::VectorLayer )
244271
return mSearchableLayers.value( layer, true ) ? trueValue : falseValue;
245272
}
273+
else if ( idx.column() == RequiredColumn )
274+
{
275+
return mRequiredLayers.contains( layer ) ? trueValue : falseValue;
276+
}
246277
}
247278
}
248279

@@ -288,6 +319,17 @@ bool QgsLayerCapabilitiesModel::setData( const QModelIndex &index, const QVarian
288319
return true;
289320
}
290321
}
322+
else if ( index.column() == RequiredColumn )
323+
{
324+
bool required = value == Qt::Checked;
325+
bool containsLayer = mRequiredLayers.contains( layer );
326+
if ( containsLayer && !required )
327+
mRequiredLayers.remove( layer );
328+
if ( !containsLayer && required )
329+
mRequiredLayers.insert( layer );
330+
emit dataChanged( index, index );
331+
return true;
332+
}
291333
}
292334
}
293335
return false;

src/app/qgslayercapabilitiesmodel.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,16 @@ class APP_EXPORT QgsLayerCapabilitiesModel : public QSortFilterProxyModel
3535
LayerColumn = 0,
3636
IdentifiableColumn,
3737
ReadOnlyColumn,
38-
SearchableColumn
38+
SearchableColumn,
39+
RequiredColumn,
3940
};
4041

4142
QgsLayerCapabilitiesModel( QgsProject *project, QObject *parent = nullptr );
4243

4344
QgsLayerTreeModel *layerTreeModel() const;
4445
void setLayerTreeModel( QgsLayerTreeModel *layerTreeModel );
4546
QStringList nonIdentifiableLayers() const;
47+
QSet<QgsMapLayer *> requiredLayers() const;
4648
bool readOnly( QgsMapLayer *layer ) const;
4749
bool searchable( QgsMapLayer *layer ) const;
4850
QgsMapLayer *mapLayer( const QModelIndex &idx ) const;
@@ -70,6 +72,7 @@ class APP_EXPORT QgsLayerCapabilitiesModel : public QSortFilterProxyModel
7072
QString mFilterText;
7173
bool mShowSpatialLayersOnly = false;
7274
QStringList mNonIdentifiableLayers;
75+
QSet<QgsMapLayer *> mRequiredLayers;
7376
QHash<QgsMapLayer *, bool> mReadOnlyLayers;
7477
QHash<QgsMapLayer *, bool> mSearchableLayers;
7578
QgsLayerTreeModel *mLayerTreeModel = nullptr;

src/app/qgsprojectproperties.cpp

+1-37
Original file line numberDiff line numberDiff line change
@@ -875,7 +875,6 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas *mapCanvas, QWidget *pa
875875
connect( generateTsFileButton, &QPushButton::clicked, this, &QgsProjectProperties::onGenerateTsFileButton );
876876

877877
projectionSelectorInitialized();
878-
populateRequiredLayers();
879878
restoreOptionsBaseUi();
880879
restoreState();
881880
}
@@ -1038,6 +1037,7 @@ void QgsProjectProperties::apply()
10381037
}
10391038

10401039
QgsProject::instance()->setNonIdentifiableLayers( mLayerCapabilitiesModel->nonIdentifiableLayers() );
1040+
QgsProject::instance()->setRequiredLayers( mLayerCapabilitiesModel->requiredLayers() );
10411041
const QMap<QString, QgsMapLayer *> &mapLayers = QgsProject::instance()->mapLayers();
10421042
for ( QMap<QString, QgsMapLayer *>::const_iterator it = mapLayers.constBegin(); it != mapLayers.constEnd(); ++it )
10431043
{
@@ -1375,8 +1375,6 @@ void QgsProjectProperties::apply()
13751375
canvas->refresh();
13761376
}
13771377
QgisApp::instance()->mapOverviewCanvas()->refresh();
1378-
1379-
applyRequiredLayers();
13801378
}
13811379

13821380
void QgsProjectProperties::showProjectionsTab()
@@ -2287,40 +2285,6 @@ void QgsProjectProperties::showHelp()
22872285
QgsHelp::openHelp( link );
22882286
}
22892287

2290-
void QgsProjectProperties::populateRequiredLayers()
2291-
{
2292-
const QSet<QgsMapLayer *> requiredLayers = QgsProject::instance()->requiredLayers();
2293-
QStandardItemModel *model = new QStandardItemModel( mViewRequiredLayers );
2294-
QList<QgsLayerTreeLayer *> layers = QgsProject::instance()->layerTreeRoot()->findLayers();
2295-
std::sort( layers.begin(), layers.end(), []( QgsLayerTreeLayer * layer1, QgsLayerTreeLayer * layer2 ) { return layer1->name() < layer2->name(); } );
2296-
for ( const QgsLayerTreeLayer *l : layers )
2297-
{
2298-
QStandardItem *item = new QStandardItem( l->name() );
2299-
item->setCheckable( true );
2300-
item->setCheckState( requiredLayers.contains( l->layer() ) ? Qt::Checked : Qt::Unchecked );
2301-
item->setData( l->layerId() );
2302-
model->appendRow( item );
2303-
}
2304-
2305-
mViewRequiredLayers->setModel( model );
2306-
}
2307-
2308-
void QgsProjectProperties::applyRequiredLayers()
2309-
{
2310-
QSet<QgsMapLayer *> requiredLayers;
2311-
QAbstractItemModel *model = mViewRequiredLayers->model();
2312-
for ( int i = 0; i < model->rowCount(); ++i )
2313-
{
2314-
if ( model->data( model->index( i, 0 ), Qt::CheckStateRole ).toInt() == Qt::Checked )
2315-
{
2316-
QString layerId = model->data( model->index( i, 0 ), Qt::UserRole + 1 ).toString();
2317-
if ( QgsMapLayer *layer = QgsProject::instance()->mapLayer( layerId ) )
2318-
requiredLayers << layer;
2319-
}
2320-
}
2321-
QgsProject::instance()->setRequiredLayers( requiredLayers );
2322-
}
2323-
23242288
QMap< QString, QString > QgsProjectProperties::pageWidgetNameMap()
23252289
{
23262290
QMap< QString, QString > pageNames;

src/app/qgsprojectproperties.h

-3
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,4 @@ class APP_EXPORT QgsProjectProperties : public QgsOptionsDialogBase, private Ui:
240240
void updateGuiForMapUnits();
241241

242242
void showHelp();
243-
244-
void populateRequiredLayers();
245-
void applyRequiredLayers();
246243
};

0 commit comments

Comments
 (0)