Implement instance sorting options.

This commit is contained in:
Petr Mrázek 2013-11-04 00:11:20 +01:00
parent 4466929074
commit d6e4fb2971
5 changed files with 52 additions and 9 deletions

View File

@ -291,10 +291,6 @@ void MultiMC::initGlobalSettings()
m_settings->registerSetting(new Setting("ShowConsole", true)); m_settings->registerSetting(new Setting("ShowConsole", true));
m_settings->registerSetting(new Setting("AutoCloseConsole", 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 // Console Colors
// m_settings->registerSetting(new Setting("SysMessageColor", QColor(Qt::blue))); // m_settings->registerSetting(new Setting("SysMessageColor", QColor(Qt::blue)));
// m_settings->registerSetting(new Setting("StdOutColor", QColor(Qt::black))); // m_settings->registerSetting(new Setting("StdOutColor", QColor(Qt::black)));
@ -328,6 +324,8 @@ void MultiMC::initGlobalSettings()
// Shall the main window hide on instance launch // Shall the main window hide on instance launch
m_settings->registerSetting(new Setting("NoHide", false)); m_settings->registerSetting(new Setting("NoHide", false));
m_settings->registerSetting(new Setting("InstSortMode", "Name"));
// Persistent value for the client ID // Persistent value for the client ID
m_settings->registerSetting(new Setting("YggdrasilClientToken", "")); m_settings->registerSetting(new Setting("YggdrasilClientToken", ""));
QString currentYggID = m_settings->get("YggdrasilClientToken").toString(); QString currentYggID = m_settings->get("YggdrasilClientToken").toString();

View File

@ -23,6 +23,15 @@ class JavaVersionList;
#endif #endif
#define MMC (static_cast<MultiMC *>(QCoreApplication::instance())) #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 class MultiMC : public QApplication
{ {
Q_OBJECT Q_OBJECT

View File

@ -129,8 +129,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
view->installEventFilter(this); view->installEventFilter(this);
proxymodel = new InstanceProxyModel(this); proxymodel = new InstanceProxyModel(this);
proxymodel->setSortRole(KCategorizedSortFilterProxyModel::CategorySortRole); // proxymodel->setSortRole(KCategorizedSortFilterProxyModel::CategorySortRole);
proxymodel->setFilterRole(KCategorizedSortFilterProxyModel::CategorySortRole); //proxymodel->setFilterRole(KCategorizedSortFilterProxyModel::CategorySortRole);
// proxymodel->setDynamicSortFilter ( true ); // proxymodel->setDynamicSortFilter ( true );
// FIXME: instList should be global-ish, or at least not tied to the main window... // 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); SettingsDialog dialog(this);
dialog.exec(); dialog.exec();
//FIXME: quick HACK to make this work. improve, optimize.
proxymodel->invalidate();
proxymodel->sort(0);
} }
void MainWindow::on_actionReportBug_triggered() void MainWindow::on_actionReportBug_triggered()

View File

@ -33,6 +33,8 @@ SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent), ui(new Ui::Se
{ {
MultiMCPlatform::fixWM_CLASS(this); MultiMCPlatform::fixWM_CLASS(this);
ui->setupUi(this); ui->setupUi(this);
ui->sortingModeGroup->setId(ui->sortByNameBtn, Sort_Name);
ui->sortingModeGroup->setId(ui->sortLastLaunchedBtn, Sort_LastLaunch);
loadSettings(MMC->settings().get()); loadSettings(MMC->settings().get());
updateCheckboxStuff(); updateCheckboxStuff();
@ -165,6 +167,20 @@ void SettingsDialog::applySettings(SettingsObject *s)
// Custom Commands // Custom Commands
s->set("PreLaunchCommand", ui->preLaunchCmdTextBox->text()); s->set("PreLaunchCommand", ui->preLaunchCmdTextBox->text());
s->set("PostExitCommand", ui->postExitCmdTextBox->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) void SettingsDialog::loadSettings(SettingsObject *s)
@ -195,6 +211,17 @@ void SettingsDialog::loadSettings(SettingsObject *s)
ui->maxMemSpinBox->setValue(s->get("MaxMemAlloc").toInt()); ui->maxMemSpinBox->setValue(s->get("MaxMemAlloc").toInt());
ui->permGenSpinBox->setValue(s->get("PermGen").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 // Java Settings
ui->javaPathTextBox->setText(s->get("JavaPath").toString()); ui->javaPathTextBox->setText(s->get("JavaPath").toString());
ui->jvmArgsTextBox->setText(s->get("JvmArgs").toString()); ui->jvmArgsTextBox->setText(s->get("JvmArgs").toString());

View File

@ -422,7 +422,13 @@ bool InstanceProxyModel::subSortLessThan(const QModelIndex &left,
{ {
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());
// kDebug() << *pdataLeft << *pdataRight; QString sortMode = MMC->settings()->get("InstSortMode").toString();
if(sortMode == "LastLaunch")
{
return pdataLeft->lastLaunch() > pdataRight->lastLaunch();
}
else
{
return QString::localeAwareCompare(pdataLeft->name(), pdataRight->name()) < 0; return QString::localeAwareCompare(pdataLeft->name(), pdataRight->name()) < 0;
// return pdataLeft->name() < pdataRight->name(); }
} }