From 6270a4a4688c79f2c2e332c148dacf4415eae6ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Tue, 7 Jan 2020 08:45:24 +0100 Subject: [PATCH] WIP some more perf work that was left over, I guess --- application/InstanceProxyModel.cpp | 13 +++++-------- application/InstanceProxyModel.h | 11 +++++++++++ application/MainWindow.cpp | 17 ++++++++++++++--- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/application/InstanceProxyModel.cpp b/application/InstanceProxyModel.cpp index ad0c8236..75213ae7 100644 --- a/application/InstanceProxyModel.cpp +++ b/application/InstanceProxyModel.cpp @@ -21,13 +21,10 @@ bool InstanceProxyModel::subSortLessThan(const QModelIndex &left, const QModelIn { BaseInstance *pdataLeft = static_cast(left.internalPointer()); BaseInstance *pdataRight = static_cast(right.internalPointer()); - QString sortMode = MMC->settings()->get("InstSortMode").toString(); - if (sortMode == "LastLaunch") - { - return pdataLeft->lastLaunch() > pdataRight->lastLaunch(); - } - else - { - return QString::localeAwareCompare(pdataLeft->name(), pdataRight->name()) < 0; + switch(currentSortMode) { + case SortMode::ByLastPlayed: + return pdataLeft->lastLaunch() > pdataRight->lastLaunch(); + case SortMode::ByName: + return QString::localeAwareCompare(pdataLeft->name(), pdataRight->name()) < 0; } } diff --git a/application/InstanceProxyModel.h b/application/InstanceProxyModel.h index fab6f834..f67adacf 100644 --- a/application/InstanceProxyModel.h +++ b/application/InstanceProxyModel.h @@ -7,10 +7,21 @@ */ class InstanceProxyModel : public GroupedProxyModel { +public: + enum class SortMode { + ByName, + ByLastPlayed + }; public: explicit InstanceProxyModel(QObject *parent = 0); QVariant data(const QModelIndex & index, int role) const override; + void setSortMode(SortMode mode) { + currentSortMode = mode; + } protected: virtual bool subSortLessThan(const QModelIndex &left, const QModelIndex &right) const override; + +private: + SortMode currentSortMode = SortMode::ByName; }; diff --git a/application/MainWindow.cpp b/application/MainWindow.cpp index 8d486eb2..67530883 100644 --- a/application/MainWindow.cpp +++ b/application/MainWindow.cpp @@ -680,11 +680,22 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new MainWindow proxymodel = new InstanceProxyModel(this); proxymodel->setSourceModel(MMC->instances().get()); auto sortMode = MMC->settings()->getSetting("InstSortMode"); - connect(sortMode.get(), &Setting::SettingChanged, [](const Setting &setting, QVariant value){ + auto applySortMode = [this](QVariant value) { auto StrValue = value.toString(); - + if (StrValue == "LastLaunch") + { + proxymodel->setSortMode(InstanceProxyModel::SortMode::ByLastPlayed); + } + else // Name + { + proxymodel->setSortMode(InstanceProxyModel::SortMode::ByName); + } + proxymodel->sort(0); + }; + applySortMode(sortMode->get()); + connect(sortMode.get(), &Setting::SettingChanged, [applySortMode](const Setting &setting, QVariant value){ + applySortMode(value); }); - proxymodel->sort(0); connect(proxymodel, &InstanceProxyModel::dataChanged, this, &MainWindow::instanceDataChanged); view->setModel(proxymodel);