WIP some more perf work that was left over, I guess

This commit is contained in:
Petr Mrázek
2020-01-07 08:45:24 +01:00
parent c4919bab25
commit 6270a4a468
3 changed files with 30 additions and 11 deletions

View File

@@ -21,13 +21,10 @@ bool InstanceProxyModel::subSortLessThan(const QModelIndex &left, const QModelIn
{ {
BaseInstance *pdataLeft = static_cast<BaseInstance *>(left.internalPointer()); BaseInstance *pdataLeft = static_cast<BaseInstance *>(left.internalPointer());
BaseInstance *pdataRight = static_cast<BaseInstance *>(right.internalPointer()); BaseInstance *pdataRight = static_cast<BaseInstance *>(right.internalPointer());
QString sortMode = MMC->settings()->get("InstSortMode").toString(); switch(currentSortMode) {
if (sortMode == "LastLaunch") case SortMode::ByLastPlayed:
{ return pdataLeft->lastLaunch() > pdataRight->lastLaunch();
return pdataLeft->lastLaunch() > pdataRight->lastLaunch(); case SortMode::ByName:
} return QString::localeAwareCompare(pdataLeft->name(), pdataRight->name()) < 0;
else
{
return QString::localeAwareCompare(pdataLeft->name(), pdataRight->name()) < 0;
} }
} }

View File

@@ -7,10 +7,21 @@
*/ */
class InstanceProxyModel : public GroupedProxyModel class InstanceProxyModel : public GroupedProxyModel
{ {
public:
enum class SortMode {
ByName,
ByLastPlayed
};
public: public:
explicit InstanceProxyModel(QObject *parent = 0); explicit InstanceProxyModel(QObject *parent = 0);
QVariant data(const QModelIndex & index, int role) const override; QVariant data(const QModelIndex & index, int role) const override;
void setSortMode(SortMode mode) {
currentSortMode = mode;
}
protected: protected:
virtual bool subSortLessThan(const QModelIndex &left, const QModelIndex &right) const override; virtual bool subSortLessThan(const QModelIndex &left, const QModelIndex &right) const override;
private:
SortMode currentSortMode = SortMode::ByName;
}; };

View File

@@ -680,11 +680,22 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new MainWindow
proxymodel = new InstanceProxyModel(this); proxymodel = new InstanceProxyModel(this);
proxymodel->setSourceModel(MMC->instances().get()); proxymodel->setSourceModel(MMC->instances().get());
auto sortMode = MMC->settings()->getSetting("InstSortMode"); 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(); 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); connect(proxymodel, &InstanceProxyModel::dataChanged, this, &MainWindow::instanceDataChanged);
view->setModel(proxymodel); view->setModel(proxymodel);