From 56b9d808ff9e18c7f13516f2d582f0307145cff7 Mon Sep 17 00:00:00 2001 From: Vincent Cloarec Date: Sun, 10 Oct 2021 13:43:59 -0400 Subject: [PATCH] add missing text for mesh editing undo/redo --- .../mesh/qgsmeshtriangulation.sip.in | 3 ++ .../mesh/qgsmeshadvancedediting.sip.in | 11 +++++ .../mesh/qgsmeshforcebypolylines.sip.in | 2 + src/analysis/mesh/qgsmeshtriangulation.cpp | 7 ++- src/analysis/mesh/qgsmeshtriangulation.h | 2 + src/app/qgisapp.cpp | 2 +- src/core/mesh/qgsmeshadvancedediting.cpp | 15 +++++++ src/core/mesh/qgsmeshadvancedediting.h | 7 +++ src/core/mesh/qgsmesheditor.cpp | 44 ++++++++++++++----- src/core/mesh/qgsmeshforcebypolylines.cpp | 5 +++ src/core/mesh/qgsmeshforcebypolylines.h | 1 + 11 files changed, 86 insertions(+), 13 deletions(-) diff --git a/python/analysis/auto_generated/mesh/qgsmeshtriangulation.sip.in b/python/analysis/auto_generated/mesh/qgsmeshtriangulation.sip.in index 0a318a4c8c6..82b6340bda9 100644 --- a/python/analysis/auto_generated/mesh/qgsmeshtriangulation.sip.in +++ b/python/analysis/auto_generated/mesh/qgsmeshtriangulation.sip.in @@ -139,6 +139,9 @@ a Delaunay triangulation on provided existing vertex. Constructor %End + virtual QString text() const; + + }; /************************************************************************ diff --git a/python/core/auto_generated/mesh/qgsmeshadvancedediting.sip.in b/python/core/auto_generated/mesh/qgsmeshadvancedediting.sip.in index 0c5e87c2156..0670be69525 100644 --- a/python/core/auto_generated/mesh/qgsmeshadvancedediting.sip.in +++ b/python/core/auto_generated/mesh/qgsmeshadvancedediting.sip.in @@ -56,6 +56,11 @@ Removes all data provided to the editing or created by the editing %Docstring Returns whether the advanced edit is finished, if not, this edit has to be applied again with :py:func:`QgsMeshEditor.advancedEdit()` until is finished returns ``True`` +%End + + virtual QString text() const; +%Docstring +Returns a short text string describing what this advanced edit does. Default implementation return a void string. %End protected: @@ -86,6 +91,9 @@ Neighboring faces are triangulated to take account of the new vertex in the shar Constructor %End + virtual QString text() const; + + }; @@ -123,6 +131,9 @@ expressionZ: "if( $vertex_x <= 100 , $vertex_z + 80 , $vertex_z - 150)" Constructor %End + virtual QString text() const; + + void setExpressions( const QString &expressionX, const QString &expressionY, const QString &expressionZ ); %Docstring Sets the expressions for the coordinates transformation. diff --git a/python/core/auto_generated/mesh/qgsmeshforcebypolylines.sip.in b/python/core/auto_generated/mesh/qgsmeshforcebypolylines.sip.in index 1e4ae12c39a..49e21841d38 100644 --- a/python/core/auto_generated/mesh/qgsmeshforcebypolylines.sip.in +++ b/python/core/auto_generated/mesh/qgsmeshforcebypolylines.sip.in @@ -88,6 +88,8 @@ before applying the edition with :py:func:`QgsMeshEditor.advancedEdit()` Constructor %End + virtual QString text() const; + virtual bool isFinished() const; diff --git a/src/analysis/mesh/qgsmeshtriangulation.cpp b/src/analysis/mesh/qgsmeshtriangulation.cpp index 43fd55f849f..b9e34f0520d 100644 --- a/src/analysis/mesh/qgsmeshtriangulation.cpp +++ b/src/analysis/mesh/qgsmeshtriangulation.cpp @@ -337,6 +337,11 @@ int QgsMeshZValueDataset::valuesCount() const QgsMeshEditingDelaunayTriangulation::QgsMeshEditingDelaunayTriangulation() = default; +QString QgsMeshEditingDelaunayTriangulation::text() const +{ + return QObject::tr( "Delaunay triangulation" ); +} + QgsTopologicalMesh::Changes QgsMeshEditingDelaunayTriangulation::apply( QgsMeshEditor *meshEditor ) { //use only vertices that are on boundary or free, if boundary @@ -431,7 +436,7 @@ QgsTopologicalMesh::Changes QgsMeshEditingDelaunayTriangulation::apply( QgsMeshE Q_ASSERT( meshEditor->topologicalMesh().checkConsistency() == QgsMeshEditingError() ); if ( !removedVerticesFromTriangulation.isEmpty() ) - mMessage = QObject::tr( "%1 vertices have not been included in the triangulation" ).arg( removedVerticesFromTriangulation.count() ); + mMessage = QObject::tr( "%n vertices have not been included in the triangulation", nullptr, removedVerticesFromTriangulation.count() ); mIsFinished = true; diff --git a/src/analysis/mesh/qgsmeshtriangulation.h b/src/analysis/mesh/qgsmeshtriangulation.h index 9e7dcae9c09..8501df27760 100644 --- a/src/analysis/mesh/qgsmeshtriangulation.h +++ b/src/analysis/mesh/qgsmeshtriangulation.h @@ -181,6 +181,8 @@ class ANALYSIS_EXPORT QgsMeshEditingDelaunayTriangulation : public QgsMeshAdvanc //! Constructor QgsMeshEditingDelaunayTriangulation(); + QString text() const override; + private: QgsTopologicalMesh::Changes apply( QgsMeshEditor *meshEditor ) override; }; diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 5d2312cf403..a17898e94ab 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -15701,7 +15701,6 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer *layer ) mActionSelectByForm->setEnabled( false ); mActionOpenFieldCalc->setEnabled( false ); mActionSaveLayerEdits->setEnabled( false ); - mUndoDock->widget()->setEnabled( false ); mActionSaveLayerDefinition->setEnabled( true ); mActionLayerSaveAs->setEnabled( false ); mActionAddFeature->setEnabled( false ); @@ -15740,6 +15739,7 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer *layer ) mActionToggleEditing->setChecked( canSupportEditing && isEditable ); mActionSaveLayerEdits->setEnabled( canSupportEditing && isEditable && mlayer->isModified() ); enableMeshEditingTools( isEditable ); + mUndoDock->widget()->setEnabled( canSupportEditing && isEditable ); mActionUndo->setEnabled( canSupportEditing && isEditable ); mActionRedo->setEnabled( canSupportEditing && isEditable ); updateUndoActions(); diff --git a/src/core/mesh/qgsmeshadvancedediting.cpp b/src/core/mesh/qgsmeshadvancedediting.cpp index 692a0ca3c18..1efe338d611 100644 --- a/src/core/mesh/qgsmeshadvancedediting.cpp +++ b/src/core/mesh/qgsmeshadvancedediting.cpp @@ -57,6 +57,11 @@ bool QgsMeshAdvancedEditing::isFinished() const return mIsFinished; } +QString QgsMeshAdvancedEditing::text() const +{ + return QString(); +} + static int vertexPositionInFace( int vertexIndex, const QgsMeshFace &face ) { return face.indexOf( vertexIndex ); @@ -604,6 +609,11 @@ bool QgsMeshEditRefineFaces::createNewBorderFaces( QgsMeshEditor *meshEditor, return true; } +QString QgsMeshEditRefineFaces::text() const +{ + return QObject::tr( "Refine %n faces", nullptr, mInputFaces.count() ); +} + bool QgsMeshTransformVerticesByExpression::calculate( QgsMeshLayer *layer ) { if ( !layer || !layer->meshEditor() || !layer->nativeMesh() ) @@ -742,6 +752,11 @@ bool QgsMeshTransformVerticesByExpression::calculate( QgsMeshLayer *layer ) return layer->meshEditor()->canBeTransformed( mNativeFacesIndexesGeometryChanged, transformFunction ); } +QString QgsMeshTransformVerticesByExpression::text() const +{ + return QObject::tr( "Transform %n vertices by expression", nullptr, mInputVertices.count() ); +} + void QgsMeshTransformVerticesByExpression::setExpressions( const QString &expressionX, const QString &expressionY, const QString &expressionZ ) { mExpressionX = expressionX; diff --git a/src/core/mesh/qgsmeshadvancedediting.h b/src/core/mesh/qgsmeshadvancedediting.h index 350393e7810..d79feefac04 100644 --- a/src/core/mesh/qgsmeshadvancedediting.h +++ b/src/core/mesh/qgsmeshadvancedediting.h @@ -62,6 +62,9 @@ class CORE_EXPORT QgsMeshAdvancedEditing : protected QgsTopologicalMesh::Changes */ virtual bool isFinished() const; + //! Returns a short text string describing what this advanced edit does. Default implementation return a void string. + virtual QString text() const; + protected: QList mInputVertices; QList mInputFaces; @@ -97,6 +100,8 @@ class CORE_EXPORT QgsMeshEditRefineFaces : public QgsMeshAdvancedEditing //! Constructor QgsMeshEditRefineFaces(); + QString text() const override; + private: QgsTopologicalMesh::Changes apply( QgsMeshEditor *meshEditor ) override; @@ -161,6 +166,8 @@ class CORE_EXPORT QgsMeshTransformVerticesByExpression : public QgsMeshAdvancedE //! Constructor QgsMeshTransformVerticesByExpression() = default; + QString text() const override; + /** * Sets the expressions for the coordinates transformation. * diff --git a/src/core/mesh/qgsmesheditor.cpp b/src/core/mesh/qgsmesheditor.cpp index 1da3cd0c74b..e06f34c8dba 100644 --- a/src/core/mesh/qgsmesheditor.cpp +++ b/src/core/mesh/qgsmesheditor.cpp @@ -776,7 +776,9 @@ QgsMeshLayerUndoCommandAddVertices::QgsMeshLayerUndoCommandAddVertices( QgsMeshE : QgsMeshLayerUndoCommandMeshEdit( meshEditor ) , mVertices( vertices ) , mTolerance( tolerance ) -{} +{ + setText( QObject::tr( "Add %n vertices", nullptr, mVertices.count() ) ); +} void QgsMeshLayerUndoCommandAddVertices::redo() { @@ -804,7 +806,9 @@ QgsMeshLayerUndoCommandRemoveVertices::QgsMeshLayerUndoCommandRemoveVertices( Qg : QgsMeshLayerUndoCommandMeshEdit( meshEditor ) , mVerticesToRemoveIndexes( verticesToRemoveIndexes ) , mFillHole( fillHole ) -{} +{ + setText( QObject::tr( "Remove %n vertices", nullptr, verticesToRemoveIndexes.count() ) ) ; +} void QgsMeshLayerUndoCommandRemoveVertices::redo() { @@ -837,7 +841,9 @@ void QgsMeshLayerUndoCommandRemoveVertices::redo() QgsMeshLayerUndoCommandAddFaces::QgsMeshLayerUndoCommandAddFaces( QgsMeshEditor *meshEditor, QgsTopologicalMesh::TopologicalFaces &faces ) : QgsMeshLayerUndoCommandMeshEdit( meshEditor ) , mFaces( faces ) -{} +{ + setText( QObject::tr( "Add %n faces", nullptr, faces.meshFaces().count() ) ); +} void QgsMeshLayerUndoCommandAddFaces::redo() { @@ -859,7 +865,9 @@ void QgsMeshLayerUndoCommandAddFaces::redo() QgsMeshLayerUndoCommandRemoveFaces::QgsMeshLayerUndoCommandRemoveFaces( QgsMeshEditor *meshEditor, const QList &facesToRemoveIndexes ) : QgsMeshLayerUndoCommandMeshEdit( meshEditor ) , mfacesToRemoveIndexes( facesToRemoveIndexes ) -{} +{ + setText( QObject::tr( "Remove %n faces", nullptr, facesToRemoveIndexes.count() ) ); +} void QgsMeshLayerUndoCommandRemoveFaces::redo() { @@ -953,7 +961,9 @@ QgsMeshLayerUndoCommandChangeZValue::QgsMeshLayerUndoCommandChangeZValue( QgsMes : QgsMeshLayerUndoCommandMeshEdit( meshEditor ) , mVerticesIndexes( verticesIndexes ) , mNewValues( newValues ) -{} +{ + setText( QObject::tr( "Change %n vertices Z Value", nullptr, verticesIndexes.count() ) ); +} void QgsMeshLayerUndoCommandChangeZValue::redo() { @@ -976,7 +986,9 @@ QgsMeshLayerUndoCommandChangeXYValue::QgsMeshLayerUndoCommandChangeXYValue( QgsM : QgsMeshLayerUndoCommandMeshEdit( meshEditor ) , mVerticesIndexes( verticesIndexes ) , mNewValues( newValues ) -{} +{ + setText( QObject::tr( "Move %n vertices", nullptr, verticesIndexes.count() ) ); +} void QgsMeshLayerUndoCommandChangeXYValue::redo() { @@ -1000,7 +1012,9 @@ QgsMeshLayerUndoCommandChangeCoordinates::QgsMeshLayerUndoCommandChangeCoordinat : QgsMeshLayerUndoCommandMeshEdit( meshEditor ) , mVerticesIndexes( verticesIndexes ) , mNewCoordinates( newCoordinates ) -{} +{ + setText( QObject::tr( "Transform %n vertices coordinates", nullptr, verticesIndexes.count() ) ); +} void QgsMeshLayerUndoCommandChangeCoordinates::redo() { @@ -1039,7 +1053,9 @@ QgsMeshLayerUndoCommandFlipEdge::QgsMeshLayerUndoCommandFlipEdge( QgsMeshEditor : QgsMeshLayerUndoCommandMeshEdit( meshEditor ) , mVertexIndex1( vertexIndex1 ) , mVertexIndex2( vertexIndex2 ) -{} +{ + setText( QObject::tr( "Flip edge" ) ); +} void QgsMeshLayerUndoCommandFlipEdge::redo() { @@ -1062,7 +1078,9 @@ QgsMeshLayerUndoCommandMerge::QgsMeshLayerUndoCommandMerge( QgsMeshEditor *meshE : QgsMeshLayerUndoCommandMeshEdit( meshEditor ) , mVertexIndex1( vertexIndex1 ) , mVertexIndex2( vertexIndex2 ) -{} +{ + setText( QObject::tr( "Merge faces" ) ); +} void QgsMeshLayerUndoCommandMerge::redo() { @@ -1084,7 +1102,9 @@ void QgsMeshLayerUndoCommandMerge::redo() QgsMeshLayerUndoCommandSplitFaces::QgsMeshLayerUndoCommandSplitFaces( QgsMeshEditor *meshEditor, const QList &faceIndexes ) : QgsMeshLayerUndoCommandMeshEdit( meshEditor ) , mFaceIndexes( faceIndexes ) -{} +{ + setText( QObject::tr( "Split %n faces", nullptr, faceIndexes.count() ) ); +} void QgsMeshLayerUndoCommandSplitFaces::redo() { @@ -1108,7 +1128,9 @@ void QgsMeshLayerUndoCommandSplitFaces::redo() QgsMeshLayerUndoCommandAdvancedEditing::QgsMeshLayerUndoCommandAdvancedEditing( QgsMeshEditor *meshEditor, QgsMeshAdvancedEditing *advancdEdit ) : QgsMeshLayerUndoCommandMeshEdit( meshEditor ) , mAdvancedEditing( advancdEdit ) -{} +{ + setText( advancdEdit->text() ); +} void QgsMeshLayerUndoCommandAdvancedEditing::redo() { diff --git a/src/core/mesh/qgsmeshforcebypolylines.cpp b/src/core/mesh/qgsmeshforcebypolylines.cpp index 4493803ff9e..e69d0b782d8 100644 --- a/src/core/mesh/qgsmeshforcebypolylines.cpp +++ b/src/core/mesh/qgsmeshforcebypolylines.cpp @@ -1095,6 +1095,11 @@ bool QgsMeshEditForceByLine::finishForcingLine() } +QString QgsMeshEditForceByPolylines::text() const +{ + return QObject::tr( "Force mesh by polyline" ); +} + bool QgsMeshEditForceByPolylines::isFinished() const { return mCurrentPolyline >= mPolylines.count() && QgsMeshEditForceByLine::isFinished(); diff --git a/src/core/mesh/qgsmeshforcebypolylines.h b/src/core/mesh/qgsmeshforcebypolylines.h index efaa5bd2516..5b29d46152c 100644 --- a/src/core/mesh/qgsmeshforcebypolylines.h +++ b/src/core/mesh/qgsmeshforcebypolylines.h @@ -148,6 +148,7 @@ class CORE_EXPORT QgsMeshEditForceByPolylines : public QgsMeshEditForceByLine //! Constructor QgsMeshEditForceByPolylines() = default; + QString text() const override; bool isFinished() const override; /**