diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 2600541502d..68b1f4204e6 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -1323,6 +1323,13 @@ QgisApp::QgisApp( QSplashScreen *splash, bool restorePlugins, bool skipVersionCh } #endif + auto toggleRevert = [ = ] + { + mActionRevertProject->setEnabled( QgsProject::instance()->isDirty() &&!QgsProject::instance()->fileName().isEmpty() ); + }; + connect( QgsProject::instance(), &QgsProject::isDirtyChanged, mActionRevertProject, toggleRevert ); + connect( QgsProject::instance(), &QgsProject::fileNameChanged, mActionRevertProject, toggleRevert ); + } // QgisApp ctor QgisApp::QgisApp() @@ -1880,6 +1887,7 @@ void QgisApp::createActions() connect( mActionNewProject, &QAction::triggered, this, [ = ] { fileNew(); } ); connect( mActionNewBlankProject, &QAction::triggered, this, &QgisApp::fileNewBlank ); connect( mActionOpenProject, &QAction::triggered, this, &QgisApp::fileOpen ); + connect( mActionRevertProject, &QAction::triggered, this, &QgisApp::fileRevert ); connect( mActionSaveProject, &QAction::triggered, this, &QgisApp::fileSave ); connect( mActionCloseProject, &QAction::triggered, this, &QgisApp::fileClose ); connect( mActionSaveProjectAs, &QAction::triggered, this, &QgisApp::fileSaveAs ); @@ -5478,6 +5486,17 @@ void QgisApp::fileOpen() } } +void QgisApp::fileRevert() +{ + if ( QMessageBox::question( this, tr( "Revert Project" ), + tr( "Are you sure you want to discard all unsaved changes the current project?" ), + QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) == QMessageBox::No ) + return; + + // re-open the current project + addProject( QgsProject::instance()->fileInfo().filePath() ); +} + void QgisApp::enableProjectMacros() { mTrustedMacros = true; diff --git a/src/app/qgisapp.h b/src/app/qgisapp.h index 39ecd805b6c..99d274d5ce7 100644 --- a/src/app/qgisapp.h +++ b/src/app/qgisapp.h @@ -1227,6 +1227,8 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow void saveMapAsPdf(); //! Open a project void fileOpen(); + //! Revert unsaved changes to a project + void fileRevert(); //! Create a new project bool fileNew(); //! Create a new blank project (no template) diff --git a/src/ui/qgisapp.ui b/src/ui/qgisapp.ui index bea45fa417c..7164e87f136 100755 --- a/src/ui/qgisapp.ui +++ b/src/ui/qgisapp.ui @@ -46,6 +46,7 @@ + @@ -2968,6 +2969,14 @@ Acts on currently active editable layer Close Project + + + Revert Project… + + + Revert Project to Saved version + +