Skip to content

Commit

Permalink
Force reset of layer tree view when snapping scale mode is changed. G…
Browse files Browse the repository at this point in the history
…et rid of the ugly hack forcing the refresh of the rows when the mode was changed. This should fix two bugs with scale combox and min and max column being disabled when they should not. Should fix #35789.
  • Loading branch information
obrix authored and Hugo Mercier committed Apr 29, 2020
1 parent 44fec55 commit 5a1d10b
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 10 deletions.
13 changes: 5 additions & 8 deletions src/app/qgssnappinglayertreemodel.cpp
Expand Up @@ -238,7 +238,6 @@ QgsSnappingLayerTreeModel::QgsSnappingLayerTreeModel( QgsProject *project, QgsMa
, mProject( project )
, mCanvas( canvas )
, mIndividualLayerSettings( project->snappingConfig().individualLayerSettings() )
, mEnableMinMaxColumn( project->snappingConfig().scaleDependencyMode() == QgsSnappingConfig::PerLayer )

{
connect( project, &QgsProject::snappingConfigChanged, this, &QgsSnappingLayerTreeModel::onSnappingSettingsChanged );
Expand Down Expand Up @@ -281,7 +280,7 @@ Qt::ItemFlags QgsSnappingLayerTreeModel::flags( const QModelIndex &idx ) const
}
else if ( idx.column() == MaxScaleColumn || idx.column() == MinScaleColumn )
{
if ( mEnableMinMaxColumn )
if ( mProject->snappingConfig().scaleDependencyMode() == QgsSnappingConfig::PerLayer )
{
return Qt::ItemIsEnabled | Qt::ItemIsEditable;
}
Expand Down Expand Up @@ -345,7 +344,6 @@ void QgsSnappingLayerTreeModel::setFilterText( const QString &filterText )
void QgsSnappingLayerTreeModel::onSnappingSettingsChanged()
{
const QHash<QgsVectorLayer *, QgsSnappingConfig::IndividualLayerSettings> oldSettings = mIndividualLayerSettings;
bool wasMinMaxEnabled = mEnableMinMaxColumn;

for ( auto it = oldSettings.constBegin(); it != oldSettings.constEnd(); ++it )
{
Expand All @@ -369,18 +367,17 @@ void QgsSnappingLayerTreeModel::onSnappingSettingsChanged()
}
}

mEnableMinMaxColumn = ( mProject->snappingConfig().scaleDependencyMode() == QgsSnappingConfig::PerLayer );
hasRowchanged( mLayerTreeModel->rootGroup(), oldSettings, wasMinMaxEnabled != mEnableMinMaxColumn );
hasRowchanged( mLayerTreeModel->rootGroup(), oldSettings );
}

void QgsSnappingLayerTreeModel::hasRowchanged( QgsLayerTreeNode *node, const QHash<QgsVectorLayer *, QgsSnappingConfig::IndividualLayerSettings> &oldSettings, bool forceRefresh )
void QgsSnappingLayerTreeModel::hasRowchanged( QgsLayerTreeNode *node, const QHash<QgsVectorLayer *, QgsSnappingConfig::IndividualLayerSettings> &oldSettings )
{
if ( node->nodeType() == QgsLayerTreeNode::NodeGroup )
{
const auto constChildren = node->children();
for ( QgsLayerTreeNode *child : constChildren )
{
hasRowchanged( child, oldSettings, forceRefresh );
hasRowchanged( child, oldSettings );
}
}
else
Expand All @@ -391,7 +388,7 @@ void QgsSnappingLayerTreeModel::hasRowchanged( QgsLayerTreeNode *node, const QHa
{
emit dataChanged( QModelIndex(), idx );
}
if ( oldSettings.value( vl ) != mProject->snappingConfig().individualLayerSettings().value( vl ) || forceRefresh )
if ( oldSettings.value( vl ) != mProject->snappingConfig().individualLayerSettings().value( vl ) )
{
mIndividualLayerSettings.insert( vl, mProject->snappingConfig().individualLayerSettings().value( vl ) );
emit dataChanged( idx, index( idx.row(), columnCount( idx ) - 1 ) );
Expand Down
3 changes: 1 addition & 2 deletions src/app/qgssnappinglayertreemodel.h
Expand Up @@ -95,9 +95,8 @@ class APP_EXPORT QgsSnappingLayerTreeModel : public QSortFilterProxyModel
QString mFilterText;
QHash<QgsVectorLayer *, QgsSnappingConfig::IndividualLayerSettings> mIndividualLayerSettings;
QgsLayerTreeModel *mLayerTreeModel = nullptr;
bool mEnableMinMaxColumn = true;

void hasRowchanged( QgsLayerTreeNode *node, const QHash<QgsVectorLayer *, QgsSnappingConfig::IndividualLayerSettings> &oldSettings, bool forceRefresh );
void hasRowchanged( QgsLayerTreeNode *node, const QHash<QgsVectorLayer *, QgsSnappingConfig::IndividualLayerSettings> &oldSettings );
};

#endif // QGSSNAPPINGLAYERTREEVIEW_H
2 changes: 2 additions & 0 deletions src/app/qgssnappingwidget.cpp
Expand Up @@ -707,6 +707,8 @@ void QgsSnappingWidget::snappingScaleModeTriggered( QAction *action )
mMaxScaleWidget->setEnabled( mode == QgsSnappingConfig::Global );
mConfig.setScaleDependencyMode( mode );
mProject->setSnappingConfig( mConfig );

mLayerTreeView->reset();
}

void QgsSnappingWidget::updateToleranceDecimals()
Expand Down

0 comments on commit 5a1d10b

Please sign in to comment.