From fe4870c6b9aff4ac41583ea1481fab06f604c91e Mon Sep 17 00:00:00 2001 From: Francesc Martinez Date: Sat, 9 May 2020 07:45:07 +0200 Subject: [PATCH] Add clear projects button. Refactor lists. This is a breaking change since the config values have changed. Although it's a minor version the this change was required so GitQlient doesn't end up with a complex project settings structure changing version after version. --- src/big_widgets/GitQlientSettings.cpp | 62 ++++++++++++++---------- src/big_widgets/GitQlientSettings.h | 20 ++++++-- src/config/ConfigWidget.cpp | 32 ++++++++++-- src/resources/stylesheet.css | 2 +- src/resources/stylesheet_colors_dark.css | 6 +-- 5 files changed, 82 insertions(+), 40 deletions(-) diff --git a/src/big_widgets/GitQlientSettings.cpp b/src/big_widgets/GitQlientSettings.cpp index 9101ea98..86382177 100644 --- a/src/big_widgets/GitQlientSettings.cpp +++ b/src/big_widgets/GitQlientSettings.cpp @@ -19,9 +19,22 @@ void GitQlientSettings::setProjectOpened(const QString &projectPath) saveRecentProjects(projectPath); } +QStringList GitQlientSettings::getRecentProjects() const +{ + auto projects = QSettings::value("Config/RecentProjects", QStringList()).toStringList(); + + QStringList recentProjects; + const auto end = std::min(projects.count(), 5); + + for (auto i = 0; i < end; ++i) + recentProjects.append(projects.takeFirst()); + + return recentProjects; +} + void GitQlientSettings::saveRecentProjects(const QString &projectPath) { - auto usedProjects = QSettings::value("usedProjects", QStringList()).toStringList(); + auto usedProjects = QSettings::value("Config/RecentProjects", QStringList()).toStringList(); if (usedProjects.contains(projectPath)) { @@ -34,34 +47,44 @@ void GitQlientSettings::saveRecentProjects(const QString &projectPath) while (!usedProjects.isEmpty() && usedProjects.count() > 5) usedProjects.removeLast(); - GitQlientSettings::setValue("usedProjects", usedProjects); + GitQlientSettings::setValue("Config/RecentProjects", usedProjects); +} + +void GitQlientSettings::clearRecentProjects() +{ + remove("Config/RecentProjects"); } void GitQlientSettings::saveMostUsedProjects(const QString &projectPath) { - auto projects = QSettings::value("recentProjects", QStringList()).toStringList(); - auto timesUsed = QSettings::value("recentProjectsCount", QList()).toList(); - int count = 1; + auto projects = QSettings::value("Config/UsedProjects", QStringList()).toStringList(); + auto timesUsed = QSettings::value("Config/UsedProjectsCount", QList()).toList(); if (projects.contains(projectPath)) { const auto index = projects.indexOf(projectPath); - timesUsed[index] = QString::number(count + timesUsed[index].toInt()); + timesUsed[index] = QString::number(timesUsed[index].toInt() + 1); } else { projects.append(projectPath); - timesUsed.append(count); + timesUsed.append(1); } - GitQlientSettings::setValue("recentProjects", projects); - GitQlientSettings::setValue("recentProjectsCount", timesUsed); + GitQlientSettings::setValue("Config/UsedProjects", projects); + GitQlientSettings::setValue("Config/UsedProjectsCount", timesUsed); } -QVector GitQlientSettings::getRecentProjects() const +void GitQlientSettings::clearMostUsedProjects() { - const auto projects = QSettings::value("recentProjects", QStringList()).toStringList(); - const auto timesUsed = QSettings::value("recentProjectsCount", QString()).toList(); + remove("Config/UsedProjects"); + remove("Config/UsedProjectsCount"); +} + +QStringList GitQlientSettings::getMostUsedProjects() const +{ + const auto projects = QSettings::value("Config/UsedProjects", QStringList()).toStringList(); + const auto timesUsed = QSettings::value("Config/UsedProjectsCount", QString()).toList(); QMultiMap projectOrderedByUse; @@ -71,7 +94,7 @@ QVector GitQlientSettings::getRecentProjects() const for (auto i = 0; i < projectsCount && i < timesCount; ++i) projectOrderedByUse.insert(timesUsed.at(i).toInt(), projects.at(i)); - QVector recentProjects; + QStringList recentProjects; const auto end = std::min(projectOrderedByUse.count(), 5); const auto orderedProjects = projectOrderedByUse.values(); @@ -80,16 +103,3 @@ QVector GitQlientSettings::getRecentProjects() const return recentProjects; } - -QStringList GitQlientSettings::getMostUsedProjects() const -{ - auto projects = QSettings::value("usedProjects", QStringList()).toStringList(); - - QStringList recentProjects; - const auto end = std::min(projects.count(), 5); - - for (auto i = 0; i < end; ++i) - recentProjects.append(projects.takeFirst()); - - return recentProjects; -} diff --git a/src/big_widgets/GitQlientSettings.h b/src/big_widgets/GitQlientSettings.h index 9bad5444..2b3c98a8 100644 --- a/src/big_widgets/GitQlientSettings.h +++ b/src/big_widgets/GitQlientSettings.h @@ -65,22 +65,32 @@ class GitQlientSettings : public QSettings \param projectPath The project path of the repository. */ void setProjectOpened(const QString &projectPath); + /*! + * \brief Gets all the recent used projects. + * + * \return QVector Projects list. + */ + QStringList getRecentProjects() const; /*! * \brief saveRecentProjects Saves the project in \p projectPath in the recent projects config value. * \param projectPath The project path to save. */ void saveRecentProjects(const QString &projectPath); + /** + * @brief clearRecentProjects Clears the recent projects list. + */ + void clearRecentProjects(); /*! * \brief saveMostUsedProjects Saves the project in \p projectPath in the most used projects config value. * \param projectPath The project path to save. */ void saveMostUsedProjects(const QString &projectPath); - /*! - \brief Gets all the recent used projects. - \return QVector Projects list. - */ - QVector getRecentProjects() const; + /** + * @brief clearMostUsedProjects Clears the most used projects list. + */ + void clearMostUsedProjects(); + /*! \brief Gets all the most used projects. diff --git a/src/config/ConfigWidget.cpp b/src/config/ConfigWidget.cpp index 854ebd0c..c173e29f 100644 --- a/src/config/ConfigWidget.cpp +++ b/src/config/ConfigWidget.cpp @@ -144,7 +144,7 @@ QWidget *ConfigWidget::createConfigWidget() mBtnGroup->addButton(new QPushButton(tr("Most used repos")), 1); mBtnGroup->addButton(new QPushButton(tr("Recent repos")), 2); - const auto firstBtn = mBtnGroup->button(1); + const auto firstBtn = mBtnGroup->button(2); firstBtn->setProperty("selected", true); firstBtn->style()->unpolish(firstBtn); firstBtn->style()->polish(firstBtn); @@ -174,17 +174,17 @@ QWidget *ConfigWidget::createConfigWidget() mRecentProjectsLayout->setContentsMargins(QMargins()); mRecentProjectsLayout->addWidget(createRecentProjectsPage()); - const auto usedProjectsFrame = new QFrame(); - mUsedProjectsLayout = new QVBoxLayout(usedProjectsFrame); + const auto mostUsedProjectsFrame = new QFrame(); + mUsedProjectsLayout = new QVBoxLayout(mostUsedProjectsFrame); mUsedProjectsLayout->setContentsMargins(QMargins()); mUsedProjectsLayout->addWidget(createUsedProjectsPage()); const auto stackedWidget = new QStackedWidget(); stackedWidget->setMinimumHeight(300); stackedWidget->addWidget(new GeneralConfigPage()); + stackedWidget->addWidget(mostUsedProjectsFrame); stackedWidget->addWidget(projectsFrame); - stackedWidget->addWidget(usedProjectsFrame); - stackedWidget->setCurrentIndex(1); + stackedWidget->setCurrentIndex(2); connect(mBtnGroup, static_cast(&QButtonGroup::buttonClicked), this, [this, stackedWidget](int index) { @@ -235,6 +235,17 @@ QWidget *ConfigWidget::createRecentProjectsPage() innerLayout->addStretch(); + const auto clear = new QPushButton("Clear list"); + clear->setObjectName("warnButton"); + connect(clear, &QPushButton::clicked, this, [this]() { + mSettings->sync(); + mSettings->clearRecentProjects(); + + mRecentProjectsLayout->addWidget(createRecentProjectsPage()); + }); + + innerLayout->addWidget(clear); + return mInnerWidget; } @@ -260,6 +271,17 @@ QWidget *ConfigWidget::createUsedProjectsPage() innerLayout->addStretch(); + const auto clear = new QPushButton("Clear list"); + clear->setObjectName("warnButton"); + connect(clear, &QPushButton::clicked, this, [this]() { + mSettings->sync(); + mSettings->clearMostUsedProjects(); + + mUsedProjectsLayout->addWidget(createUsedProjectsPage()); + }); + + innerLayout->addWidget(clear); + return mMostUsedInnerWidget; } diff --git a/src/resources/stylesheet.css b/src/resources/stylesheet.css index 996f438d..ee353168 100644 --- a/src/resources/stylesheet.css +++ b/src/resources/stylesheet.css @@ -517,7 +517,7 @@ DiffWidget > QScrollArea min-width: 450px; } -#MergeWarningButton, QPushButton#Abort, QPushButton#Merge +#MergeWarningButton, QPushButton#warnButton, QPushButton#Abort, QPushButton#Merge { border-width: 1px; } diff --git a/src/resources/stylesheet_colors_dark.css b/src/resources/stylesheet_colors_dark.css index 4eda39cd..881ebb58 100644 --- a/src/resources/stylesheet_colors_dark.css +++ b/src/resources/stylesheet_colors_dark.css @@ -491,19 +491,19 @@ DiffButton[pressed="true"] background-color: #404142; } -#MergeWarningButton, QPushButton#Abort, QPushButton#pbCancelAmend +#MergeWarningButton, QPushButton#warnButton, QPushButton#Abort, QPushButton#pbCancelAmend { border-style: solid; border-color: #FF5555; background-color: rgba(255, 85, 85, 0.45); } -#MergeWarningButton:hover, QPushButton#Abort:hover, QPushButton#pbCancelAmend:hover +#MergeWarningButton:hover, QPushButton#warnButton:hover, QPushButton#Abort:hover, QPushButton#pbCancelAmend:hover { background-color: rgba(255, 85, 85, 0.65); } -#MergeWarningButton:pressed, QPushButton#Abort:pressed, QPushButton#pbCancelAmend:pressed +#MergeWarningButton:pressed, QPushButton#warnButton:pressed, QPushButton#Abort:pressed, QPushButton#pbCancelAmend:pressed { background-color: rgba(255, 85, 85, 0.55); }