Keep the check on oldsettings to refresh rows but add an option to forceRefresh.

This commit is contained in:
obrix 2020-03-25 16:32:33 +01:00
parent f56e0f51c1
commit b3e96ff26a
2 changed files with 11 additions and 7 deletions

View File

@ -238,6 +238,7 @@ QgsSnappingLayerTreeModel::QgsSnappingLayerTreeModel( QgsProject *project, QgsMa
, mProject( project ) , mProject( project )
, mCanvas( canvas ) , mCanvas( canvas )
, mIndividualLayerSettings( project->snappingConfig().individualLayerSettings() ) , mIndividualLayerSettings( project->snappingConfig().individualLayerSettings() )
, mEnableMinMaxColumn( project->snappingConfig().limitToScale() )
{ {
connect( project, &QgsProject::snappingConfigChanged, this, &QgsSnappingLayerTreeModel::onSnappingSettingsChanged ); connect( project, &QgsProject::snappingConfigChanged, this, &QgsSnappingLayerTreeModel::onSnappingSettingsChanged );
@ -278,9 +279,9 @@ Qt::ItemFlags QgsSnappingLayerTreeModel::flags( const QModelIndex &idx ) const
return Qt::NoItemFlags; return Qt::NoItemFlags;
} }
} }
else if( idx.column() == MaxScaleColumn || idx.column() == MinScaleColumn ) else if ( idx.column() == MaxScaleColumn || idx.column() == MinScaleColumn )
{ {
if( mProject->snappingConfig().limitToScale() ) if ( mEnableMinMaxColumn )
{ {
return Qt::ItemIsEnabled | Qt::ItemIsEditable; return Qt::ItemIsEnabled | Qt::ItemIsEditable;
} }
@ -344,6 +345,7 @@ void QgsSnappingLayerTreeModel::setFilterText( const QString &filterText )
void QgsSnappingLayerTreeModel::onSnappingSettingsChanged() void QgsSnappingLayerTreeModel::onSnappingSettingsChanged()
{ {
const QHash<QgsVectorLayer *, QgsSnappingConfig::IndividualLayerSettings> oldSettings = mIndividualLayerSettings; const QHash<QgsVectorLayer *, QgsSnappingConfig::IndividualLayerSettings> oldSettings = mIndividualLayerSettings;
bool wasMinMaxEnabled = mEnableMinMaxColumn;
for ( auto it = oldSettings.constBegin(); it != oldSettings.constEnd(); ++it ) for ( auto it = oldSettings.constBegin(); it != oldSettings.constEnd(); ++it )
{ {
@ -367,17 +369,18 @@ void QgsSnappingLayerTreeModel::onSnappingSettingsChanged()
} }
} }
hasRowchanged( mLayerTreeModel->rootGroup(), oldSettings ); mEnableMinMaxColumn = mProject->snappingConfig().limitToScale();
hasRowchanged( mLayerTreeModel->rootGroup(), oldSettings, wasMinMaxEnabled != mEnableMinMaxColumn );
} }
void QgsSnappingLayerTreeModel::hasRowchanged( QgsLayerTreeNode *node, const QHash<QgsVectorLayer *, QgsSnappingConfig::IndividualLayerSettings> &oldSettings ) void QgsSnappingLayerTreeModel::hasRowchanged( QgsLayerTreeNode *node, const QHash<QgsVectorLayer *, QgsSnappingConfig::IndividualLayerSettings> &oldSettings, bool forceRefresh )
{ {
if ( node->nodeType() == QgsLayerTreeNode::NodeGroup ) if ( node->nodeType() == QgsLayerTreeNode::NodeGroup )
{ {
const auto constChildren = node->children(); const auto constChildren = node->children();
for ( QgsLayerTreeNode *child : constChildren ) for ( QgsLayerTreeNode *child : constChildren )
{ {
hasRowchanged( child, oldSettings ); hasRowchanged( child, oldSettings, forceRefresh );
} }
} }
else else
@ -388,7 +391,7 @@ void QgsSnappingLayerTreeModel::hasRowchanged( QgsLayerTreeNode *node, const QHa
{ {
emit dataChanged( QModelIndex(), idx ); emit dataChanged( QModelIndex(), idx );
} }
else if ( oldSettings.value( vl ) != mProject->snappingConfig().individualLayerSettings().value( vl ) || forceRefresh )
{ {
mIndividualLayerSettings.insert( vl, mProject->snappingConfig().individualLayerSettings().value( vl ) ); mIndividualLayerSettings.insert( vl, mProject->snappingConfig().individualLayerSettings().value( vl ) );
emit dataChanged( idx, index( idx.row(), columnCount( idx ) - 1 ) ); emit dataChanged( idx, index( idx.row(), columnCount( idx ) - 1 ) );

View File

@ -95,8 +95,9 @@ class APP_EXPORT QgsSnappingLayerTreeModel : public QSortFilterProxyModel
QString mFilterText; QString mFilterText;
QHash<QgsVectorLayer *, QgsSnappingConfig::IndividualLayerSettings> mIndividualLayerSettings; QHash<QgsVectorLayer *, QgsSnappingConfig::IndividualLayerSettings> mIndividualLayerSettings;
QgsLayerTreeModel *mLayerTreeModel = nullptr; QgsLayerTreeModel *mLayerTreeModel = nullptr;
bool mEnableMinMaxColumn = true;
void hasRowchanged( QgsLayerTreeNode *node, const QHash<QgsVectorLayer *, QgsSnappingConfig::IndividualLayerSettings> &oldSettings ); void hasRowchanged( QgsLayerTreeNode *node, const QHash<QgsVectorLayer *, QgsSnappingConfig::IndividualLayerSettings> &oldSettings, bool forceRefresh );
}; };
#endif // QGSSNAPPINGLAYERTREEVIEW_H #endif // QGSSNAPPINGLAYERTREEVIEW_H