Skip to content

Commit

Permalink
Add clear projects button. Refactor lists.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
francescmm committed May 9, 2020
1 parent 047e6a6 commit fe4870c
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 40 deletions.
62 changes: 36 additions & 26 deletions src/big_widgets/GitQlientSettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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))
{
Expand All @@ -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<QVariant>()).toList();
int count = 1;
auto projects = QSettings::value("Config/UsedProjects", QStringList()).toStringList();
auto timesUsed = QSettings::value("Config/UsedProjectsCount", QList<QVariant>()).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<QString> 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<int, QString> projectOrderedByUse;

Expand All @@ -71,7 +94,7 @@ QVector<QString> GitQlientSettings::getRecentProjects() const
for (auto i = 0; i < projectsCount && i < timesCount; ++i)
projectOrderedByUse.insert(timesUsed.at(i).toInt(), projects.at(i));

QVector<QString> recentProjects;
QStringList recentProjects;
const auto end = std::min(projectOrderedByUse.count(), 5);
const auto orderedProjects = projectOrderedByUse.values();

Expand All @@ -80,16 +103,3 @@ QVector<QString> 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;
}
20 changes: 15 additions & 5 deletions src/big_widgets/GitQlientSettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -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<QString> 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<QString> Projects list.
*/
QVector<QString> getRecentProjects() const;
/**
* @brief clearMostUsedProjects Clears the most used projects list.
*/
void clearMostUsedProjects();

/*!
\brief Gets all the most used projects.
Expand Down
32 changes: 27 additions & 5 deletions src/config/ConfigWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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<void (QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), this,
[this, stackedWidget](int index) {
Expand Down Expand Up @@ -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;
}

Expand All @@ -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;
}

Expand Down
2 changes: 1 addition & 1 deletion src/resources/stylesheet.css
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,7 @@ DiffWidget > QScrollArea
min-width: 450px;
}

#MergeWarningButton, QPushButton#Abort, QPushButton#Merge
#MergeWarningButton, QPushButton#warnButton, QPushButton#Abort, QPushButton#Merge
{
border-width: 1px;
}
Expand Down
6 changes: 3 additions & 3 deletions src/resources/stylesheet_colors_dark.css
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down

0 comments on commit fe4870c

Please sign in to comment.