From d6e4fb29713d6ce55b092c0e22412f6121e7f516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Mon, 4 Nov 2013 00:11:20 +0100 Subject: Implement instance sorting options. --- MultiMC.cpp | 6 ++---- MultiMC.h | 9 +++++++++ gui/mainwindow.cpp | 7 +++++-- gui/settingsdialog.cpp | 27 +++++++++++++++++++++++++++ logic/lists/InstanceList.cpp | 12 +++++++++--- 5 files changed, 52 insertions(+), 9 deletions(-) diff --git a/MultiMC.cpp b/MultiMC.cpp index bb65050f..e04904b4 100644 --- a/MultiMC.cpp +++ b/MultiMC.cpp @@ -291,10 +291,6 @@ void MultiMC::initGlobalSettings() m_settings->registerSetting(new Setting("ShowConsole", true)); m_settings->registerSetting(new Setting("AutoCloseConsole", true)); - // Toolbar settings - m_settings->registerSetting(new Setting("InstanceToolbarVisible", true)); - m_settings->registerSetting(new Setting("InstanceToolbarPosition", QPoint())); - // Console Colors // m_settings->registerSetting(new Setting("SysMessageColor", QColor(Qt::blue))); // m_settings->registerSetting(new Setting("StdOutColor", QColor(Qt::black))); @@ -328,6 +324,8 @@ void MultiMC::initGlobalSettings() // Shall the main window hide on instance launch m_settings->registerSetting(new Setting("NoHide", false)); + m_settings->registerSetting(new Setting("InstSortMode", "Name")); + // Persistent value for the client ID m_settings->registerSetting(new Setting("YggdrasilClientToken", "")); QString currentYggID = m_settings->get("YggdrasilClientToken").toString(); diff --git a/MultiMC.h b/MultiMC.h index 62375cba..cd4a5f7d 100644 --- a/MultiMC.h +++ b/MultiMC.h @@ -23,6 +23,15 @@ class JavaVersionList; #endif #define MMC (static_cast(QCoreApplication::instance())) +// FIXME: possibly move elsewhere +enum InstSortMode +{ + // Sort alphabetically by name. + Sort_Name, + // Sort by which instance was launched most recently. + Sort_LastLaunch, +}; + class MultiMC : public QApplication { Q_OBJECT diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index fd086f11..20a2b84b 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -129,8 +129,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi view->installEventFilter(this); proxymodel = new InstanceProxyModel(this); - proxymodel->setSortRole(KCategorizedSortFilterProxyModel::CategorySortRole); - proxymodel->setFilterRole(KCategorizedSortFilterProxyModel::CategorySortRole); +// proxymodel->setSortRole(KCategorizedSortFilterProxyModel::CategorySortRole); + //proxymodel->setFilterRole(KCategorizedSortFilterProxyModel::CategorySortRole); // proxymodel->setDynamicSortFilter ( true ); // FIXME: instList should be global-ish, or at least not tied to the main window... @@ -420,6 +420,9 @@ void MainWindow::on_actionSettings_triggered() { SettingsDialog dialog(this); dialog.exec(); + //FIXME: quick HACK to make this work. improve, optimize. + proxymodel->invalidate(); + proxymodel->sort(0); } void MainWindow::on_actionReportBug_triggered() diff --git a/gui/settingsdialog.cpp b/gui/settingsdialog.cpp index 703ade31..bf331fc0 100644 --- a/gui/settingsdialog.cpp +++ b/gui/settingsdialog.cpp @@ -33,6 +33,8 @@ SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent), ui(new Ui::Se { MultiMCPlatform::fixWM_CLASS(this); ui->setupUi(this); + ui->sortingModeGroup->setId(ui->sortByNameBtn, Sort_Name); + ui->sortingModeGroup->setId(ui->sortLastLaunchedBtn, Sort_LastLaunch); loadSettings(MMC->settings().get()); updateCheckboxStuff(); @@ -165,6 +167,20 @@ void SettingsDialog::applySettings(SettingsObject *s) // Custom Commands s->set("PreLaunchCommand", ui->preLaunchCmdTextBox->text()); s->set("PostExitCommand", ui->postExitCmdTextBox->text()); + + auto sortMode = (InstSortMode) ui->sortingModeGroup->checkedId(); + switch(sortMode) + { + case Sort_LastLaunch: + s->set("InstSortMode", "LastLaunch"); + break; + case Sort_Name: + default: + s->set("InstSortMode", "Name"); + break; + } + + s->set("PostExitCommand", ui->postExitCmdTextBox->text()); } void SettingsDialog::loadSettings(SettingsObject *s) @@ -195,6 +211,17 @@ void SettingsDialog::loadSettings(SettingsObject *s) ui->maxMemSpinBox->setValue(s->get("MaxMemAlloc").toInt()); ui->permGenSpinBox->setValue(s->get("PermGen").toInt()); + QString sortMode = s->get("InstSortMode").toString(); + + if(sortMode == "LastLaunch") + { + ui->sortLastLaunchedBtn->setChecked(true); + } + else + { + ui->sortByNameBtn->setChecked(true); + } + // Java Settings ui->javaPathTextBox->setText(s->get("JavaPath").toString()); ui->jvmArgsTextBox->setText(s->get("JvmArgs").toString()); diff --git a/logic/lists/InstanceList.cpp b/logic/lists/InstanceList.cpp index 08985a19..b42d7b7a 100644 --- a/logic/lists/InstanceList.cpp +++ b/logic/lists/InstanceList.cpp @@ -422,7 +422,13 @@ bool InstanceProxyModel::subSortLessThan(const QModelIndex &left, { BaseInstance *pdataLeft = static_cast(left.internalPointer()); BaseInstance *pdataRight = static_cast(right.internalPointer()); - // kDebug() << *pdataLeft << *pdataRight; - return QString::localeAwareCompare(pdataLeft->name(), pdataRight->name()) < 0; - // return pdataLeft->name() < pdataRight->name(); + QString sortMode = MMC->settings()->get("InstSortMode").toString(); + if(sortMode == "LastLaunch") + { + return pdataLeft->lastLaunch() > pdataRight->lastLaunch(); + } + else + { + return QString::localeAwareCompare(pdataLeft->name(), pdataRight->name()) < 0; + } } -- cgit v1.2.3