diff options
author | Henning Gruendl <henning.gruendl@qt.io> | 2023-11-14 11:53:22 +0100 |
---|---|---|
committer | Henning Gründl <henning.gruendl@qt.io> | 2023-11-14 13:16:52 +0000 |
commit | 4da241f26facfe41bc2faf06ed356e9921eb19e5 (patch) | |
tree | 1d9722a12d09a44fc8ce876767afe1ed371bb401 /src/plugins/studiowelcome | |
parent | b080a3772c3f913d72f80be431fb0cdf48d42447 (diff) |
QmlDesigner: Make recent project removable
Add functionality to remove individual recent projects and the complete
list of recent projects.
Task-number: QDS-6606
Task-number: QDS-8761
Change-Id: I8ff4de918ebb2f7a6ffb06e6d3ba04e38eb7f386
Reviewed-by: Brook Cronin <brook.cronin@qt.io>
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'src/plugins/studiowelcome')
-rw-r--r-- | src/plugins/studiowelcome/studiowelcomeplugin.cpp | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/src/plugins/studiowelcome/studiowelcomeplugin.cpp b/src/plugins/studiowelcome/studiowelcomeplugin.cpp index a08e2f48bd2..d9b29ffb951 100644 --- a/src/plugins/studiowelcome/studiowelcomeplugin.cpp +++ b/src/plugins/studiowelcome/studiowelcomeplugin.cpp @@ -221,6 +221,7 @@ public: Q_PROPERTY(bool communityVersion MEMBER m_communityVersion NOTIFY communityVersionChanged) Q_PROPERTY(bool enterpriseVersion MEMBER m_enterpriseVersion NOTIFY enterpriseVersionChanged) + Q_PROPERTY(int count READ count NOTIFY countChanged) explicit ProjectModel(QObject *parent = nullptr); @@ -228,6 +229,8 @@ public: QVariant data(const QModelIndex &index, int role) const override; QHash<int, QByteArray> roleNames() const override; + int count() { return ProjectExplorer::ProjectExplorerPlugin::recentProjects().count(); } + Q_INVOKABLE void createProject() { QTimer::singleShot(0, this, []() { @@ -259,6 +262,33 @@ public: }; } + delayedResetProjects(); + } + + Q_INVOKABLE void removeFromRecentProjects(int row) + { + if (m_blockOpenRecent) + return; + + m_blockOpenRecent = true; + const FilePath projectFile = FilePath::fromVariant( + data(index(row, 0), ProjectModel::FilePathRole)); + + if (projectFile.exists()) + ProjectExplorer::ProjectExplorerPlugin::removeFromRecentProjects(projectFile); + + resetProjects(); + } + + Q_INVOKABLE void clearRecentProjects() + { + if (m_blockOpenRecent) + return; + + m_blockOpenRecent = true; + + ProjectExplorer::ProjectExplorerPlugin::clearRecentProjects(); + resetProjects(); } @@ -317,10 +347,12 @@ public: public slots: void resetProjects(); + void delayedResetProjects(); signals: void communityVersionChanged(); void enterpriseVersionChanged(); + void countChanged(); private: void setupVersion(); @@ -343,7 +375,9 @@ ProjectModel::ProjectModel(QObject *parent) connect(ProjectExplorer::ProjectExplorerPlugin::instance(), &ProjectExplorer::ProjectExplorerPlugin::recentProjectsChanged, this, - &ProjectModel::resetProjects); + &ProjectModel::delayedResetProjects); + + connect(this, &QAbstractListModel::modelReset, this, &ProjectModel::countChanged); setupVersion(); } @@ -468,6 +502,13 @@ QHash<int, QByteArray> ProjectModel::roleNames() const void ProjectModel::resetProjects() { + beginResetModel(); + endResetModel(); + m_blockOpenRecent = false; +} + +void ProjectModel::delayedResetProjects() +{ QTimer::singleShot(2000, this, [this]() { beginResetModel(); endResetModel(); |