From 90e236f8471d87ef411be8d47b01b40a62adf57f Mon Sep 17 00:00:00 2001 From: Jaye Evins Date: Wed, 17 Dec 2025 21:26:30 -0500 Subject: [PATCH] Remove files from Settings::recentFileList(), if they fail to open. (#268) - i.e. they no longer exist or have been moved - update recent file menu in StartupView as Settings change --- glabels/File.cpp | 4 ++++ glabels/StartupView.cpp | 51 +++++++++++++++++++++++++++++++---------- glabels/StartupView.h | 8 +++++++ model/Settings.cpp | 14 +++++++++++ model/Settings.h | 1 + 5 files changed, 66 insertions(+), 12 deletions(-) diff --git a/glabels/File.cpp b/glabels/File.cpp index 77c5a36..6a98442 100644 --- a/glabels/File.cpp +++ b/glabels/File.cpp @@ -130,6 +130,8 @@ namespace glabels } else { + model::Settings::removeFromRecentFileList( fileName ); + QMessageBox msgBox; msgBox.setText( tr("Unable to open \"") + fileName + tr("\".") ); msgBox.setStandardButtons( QMessageBox::Ok ); @@ -168,6 +170,8 @@ namespace glabels } else { + model::Settings::removeFromRecentFileList( fileName ); + QMessageBox msgBox; msgBox.setText( tr("Unable to open \"") + fileName + tr("\".") ); msgBox.setStandardButtons( QMessageBox::Ok ); diff --git a/glabels/StartupView.cpp b/glabels/StartupView.cpp index aae09a3..f5cc0f4 100644 --- a/glabels/StartupView.cpp +++ b/glabels/StartupView.cpp @@ -47,18 +47,9 @@ namespace glabels recentProjectButton->setEnabled( model::Settings::recentFileList().size() > 0 ); - auto* recentMenu = new QMenu(); - for ( auto& filename : model::Settings::recentFileList() ) - { - QString basename = QFileInfo( filename ).completeBaseName(); - auto* action = new QAction( basename, this ); - action->setIcon( QIcon::fromTheme( "glabels" ) ); - action->setData( filename ); - connect( action, SIGNAL(triggered()), this, SLOT(onOpenRecentAction()) ); - recentMenu->addAction( action ); - } - recentMenu->setMinimumWidth( recentProjectButton->minimumWidth() ); - recentProjectButton->setMenu( recentMenu ); + loadRecentsMenu(); + + connect( model::Settings::instance(), SIGNAL(changed()), this, SLOT(onSettingsChanged()) ); } @@ -92,4 +83,40 @@ namespace glabels } } + + /// + /// Settings changed Slot + /// + void StartupView::onSettingsChanged() + { + // reload recents menu + loadRecentsMenu(); + } + + + /// + /// Create recents menu + /// + void StartupView::loadRecentsMenu() + { + auto fileList = model::Settings::recentFileList(); + + auto* recentMenu = new QMenu(); + + for ( auto& filename : fileList ) + { + QString basename = QFileInfo( filename ).completeBaseName(); + auto* action = new QAction( basename, this ); + action->setIcon( QIcon::fromTheme( "glabels" ) ); + action->setData( filename ); + connect( action, SIGNAL(triggered()), this, SLOT(onOpenRecentAction()) ); + recentMenu->addAction( action ); + } + recentMenu->setMinimumWidth( recentProjectButton->minimumWidth() ); + + recentProjectButton->setMenu( recentMenu ); + recentProjectButton->setEnabled( fileList.size() != 0 ); + } + + } // namespace glabels diff --git a/glabels/StartupView.h b/glabels/StartupView.h index dd4cc69..e5eb228 100644 --- a/glabels/StartupView.h +++ b/glabels/StartupView.h @@ -54,8 +54,16 @@ namespace glabels void onNewProjectButtonClicked(); void onOpenProjectButtonClicked(); void onOpenRecentAction(); + void onSettingsChanged(); + ///////////////////////////////// + // Private methods + ///////////////////////////////// + private: + void loadRecentsMenu(); + + ///////////////////////////////// // Private data ///////////////////////////////// diff --git a/model/Settings.cpp b/model/Settings.cpp index 3e09113..719dab4 100644 --- a/model/Settings.cpp +++ b/model/Settings.cpp @@ -358,6 +358,20 @@ namespace glabels } + void Settings::removeFromRecentFileList( const QString& filePath ) + { + mInstance->beginGroup( "Recent" ); + + QStringList list = mInstance->value( "files" ).toStringList(); + list.removeAll( filePath ); + mInstance->setValue( "files", list ); + + mInstance->endGroup(); + + emit mInstance->changed(); + } + + QString Settings::recentPrinter() { mInstance->beginGroup( "Recent" ); diff --git a/model/Settings.h b/model/Settings.h index e14c80c..4917493 100644 --- a/model/Settings.h +++ b/model/Settings.h @@ -101,6 +101,7 @@ namespace glabels static int maxRecentFiles(); static QStringList recentFileList(); static void addToRecentFileList( const QString& filePath ); + static void removeFromRecentFileList( const QString& filePath ); static QString recentPrinter(); static void setRecentPrinter( const QString& printer );