summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2013-11-04 00:11:20 +0100
committerPetr Mrázek <peterix@gmail.com>2013-11-04 00:11:20 +0100
commitd6e4fb29713d6ce55b092c0e22412f6121e7f516 (patch)
treece4c2c3a2786bdbb9752c26d6feaab3735ba9bd6
parent44669290747b1d254d10c130e4e728051c8c4c5d (diff)
downloadMultiMC-d6e4fb29713d6ce55b092c0e22412f6121e7f516.tar
MultiMC-d6e4fb29713d6ce55b092c0e22412f6121e7f516.tar.gz
MultiMC-d6e4fb29713d6ce55b092c0e22412f6121e7f516.tar.lz
MultiMC-d6e4fb29713d6ce55b092c0e22412f6121e7f516.tar.xz
MultiMC-d6e4fb29713d6ce55b092c0e22412f6121e7f516.zip
Implement instance sorting options.
-rw-r--r--MultiMC.cpp6
-rw-r--r--MultiMC.h9
-rw-r--r--gui/mainwindow.cpp7
-rw-r--r--gui/settingsdialog.cpp27
-rw-r--r--logic/lists/InstanceList.cpp12
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<MultiMC *>(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<BaseInstance *>(left.internalPointer());
BaseInstance *pdataRight = static_cast<BaseInstance *>(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;
+ }
}