From 2d12f2d9d83787912ee1b2cacf260b05d43c8eb6 Mon Sep 17 00:00:00 2001 From: xtemp09 Date: Wed, 23 Jul 2025 11:11:48 +0700 Subject: [PATCH] Add "Clear Recent files list" item (#22638) * Add "Clear Recent files" item --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Chris Hennes --- src/Gui/Action.cpp | 33 +++++++++++++++++++++++++++++++++ src/Gui/Action.h | 5 +++++ src/Mod/Start/Gui/StartView.cpp | 13 +++++++++++++ 3 files changed, 51 insertions(+) diff --git a/src/Gui/Action.cpp b/src/Gui/Action.cpp index 8588bc4d70..2369bd0bde 100644 --- a/src/Gui/Action.cpp +++ b/src/Gui/Action.cpp @@ -858,6 +858,32 @@ RecentFilesAction::RecentFilesAction ( Command* pcCmd, QObject * parent ) { _pimpl = std::make_unique(this, "User parameter:BaseApp/Preferences/RecentFiles"); restore(); + + sep.setSeparator(true); + sep.setToolTip({}); + this->groupAction()->addAction(&sep); + + //: Empties the list of recent files + clearRecentFilesListAction.setText(tr("Clear Recent Files")); + clearRecentFilesListAction.setToolTip({}); + this->groupAction()->addAction(&clearRecentFilesListAction); + + auto clearFun = [this, hGrp = _pimpl->handle](){ + const size_t recentFilesListSize = hGrp->GetASCIIs("MRU").size(); + for (size_t i = 0; i < recentFilesListSize; i++) + { + const QByteArray key = QStringLiteral("MRU%1").arg(i).toLocal8Bit(); + hGrp->SetASCII(key.data(), ""); + } + restore(); + clearRecentFilesListAction.setEnabled(false); + }; + + connect(&clearRecentFilesListAction, &QAction::triggered, + this, clearFun); + + connect(&clearRecentFilesListAction, &QAction::triggered, + this, &RecentFilesAction::recentFilesListModified); } RecentFilesAction::~RecentFilesAction() @@ -878,6 +904,10 @@ void RecentFilesAction::appendFile(const QString& filename) save(); _pimpl->trySaveUserParameter(); + + clearRecentFilesListAction.setEnabled(true); + + Q_EMIT recentFilesListModified(); } static QString numberToLabel(int number) { @@ -921,6 +951,9 @@ void RecentFilesAction::setFiles(const QStringList& files) // if less file names than actions numRecentFiles = std::min(numRecentFiles, this->visibleItems); for (int index = numRecentFiles; index < recentFiles.count(); index++) { + if (recentFiles[index] == &sep || recentFiles[index] == &clearRecentFilesListAction) { + continue; + } recentFiles[index]->setVisible(false); recentFiles[index]->setText(QString()); recentFiles[index]->setToolTip(QString()); diff --git a/src/Gui/Action.h b/src/Gui/Action.h index 62222990fc..6f9b55c395 100644 --- a/src/Gui/Action.h +++ b/src/Gui/Action.h @@ -240,6 +240,9 @@ public: void activateFile(int); void resizeList(int); +Q_SIGNALS: + void recentFilesListModified(); + private: void setFiles(const QStringList&); QStringList files() const; @@ -250,6 +253,8 @@ private: int visibleItems; /**< Number of visible items */ int maximumItems; /**< Number of maximum items */ + QAction sep, clearRecentFilesListAction; + class Private; friend class Private; std::unique_ptr _pimpl; diff --git a/src/Mod/Start/Gui/StartView.cpp b/src/Mod/Start/Gui/StartView.cpp index 7035175292..e6d41036b7 100644 --- a/src/Mod/Start/Gui/StartView.cpp +++ b/src/Mod/Start/Gui/StartView.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #endif @@ -47,9 +48,11 @@ #include #include #include +#include #include #include #include +#include #include #include #include @@ -184,6 +187,16 @@ StartView::StartView(QWidget* parent) configureExamplesListWidget(examplesListWidget); configureRecentFilesListWidget(recentFilesListWidget, _recentFilesLabel); + QTimer::singleShot(2000, [this, recentFilesListWidget]() { + auto updateFun = [this, recentFilesListWidget]() { + configureRecentFilesListWidget(recentFilesListWidget, _recentFilesLabel); + }; + auto recentFiles = Gui::getMainWindow()->findChild(); + if (recentFiles != nullptr) { + connect(recentFiles, &Gui::RecentFilesAction::recentFilesListModified, this, updateFun); + } + }); + retranslateUi(); }