summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2015-02-01 11:44:47 +0100
committerPetr Mrázek <peterix@gmail.com>2015-04-12 20:57:16 +0200
commitaa70ed2244700dbcc93c1fadb22edc1c1caede37 (patch)
tree79fc6703e984edc4d631be8c6f40c71400f88aba
parent154d19bb74f4c5fc1519aa40cd9dfd20244273a1 (diff)
downloadMultiMC-aa70ed2244700dbcc93c1fadb22edc1c1caede37.tar
MultiMC-aa70ed2244700dbcc93c1fadb22edc1c1caede37.tar.gz
MultiMC-aa70ed2244700dbcc93c1fadb22edc1c1caede37.tar.lz
MultiMC-aa70ed2244700dbcc93c1fadb22edc1c1caede37.tar.xz
MultiMC-aa70ed2244700dbcc93c1fadb22edc1c1caede37.zip
SCRATCH move icons over to Env, instance proxy model to gui
-rw-r--r--CMakeLists.txt2
-rw-r--r--MultiMC.cpp29
-rw-r--r--MultiMC.h6
-rw-r--r--gui/ConsoleWindow.cpp2
-rw-r--r--gui/InstanceProxyModel.cpp23
-rw-r--r--gui/InstanceProxyModel.h13
-rw-r--r--gui/MainWindow.cpp9
-rw-r--r--gui/MainWindow.h2
-rw-r--r--gui/dialogs/CopyInstanceDialog.cpp6
-rw-r--r--gui/dialogs/IconPickerDialog.cpp8
-rw-r--r--gui/dialogs/NewInstanceDialog.cpp4
-rw-r--r--gui/pages/VersionPage.cpp2
-rw-r--r--logic/BaseInstance.cpp3
-rw-r--r--logic/Env.cpp6
-rw-r--r--logic/Env.h4
-rw-r--r--logic/InstanceList.cpp22
-rw-r--r--logic/InstanceList.h9
-rw-r--r--logic/LegacyInstance.cpp2
-rw-r--r--logic/OneSixInstance.cpp2
-rw-r--r--logic/ftb/FTBPlugin.cpp2
-rw-r--r--logic/icons/IconList.cpp7
-rw-r--r--logic/icons/IconList.h3
22 files changed, 92 insertions, 74 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 40bb61fd..3fc3240b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -283,6 +283,8 @@ SET(MULTIMC_SOURCES
gui/GuiUtil.cpp
gui/ColumnResizer.h
gui/ColumnResizer.cpp
+ gui/InstanceProxyModel.h
+ gui/InstanceProxyModel.cpp
# GUI - windows
gui/MainWindow.h
diff --git a/MultiMC.cpp b/MultiMC.cpp
index 0b34d606..80a4593c 100644
--- a/MultiMC.cpp
+++ b/MultiMC.cpp
@@ -194,6 +194,9 @@ MultiMC::MultiMC(int &argc, char **argv, bool test_mode) : QApplication(argc, ar
m_translationChecker.reset(new TranslationDownloader());
+ // load icons
+ initIcons();
+
// and instances
auto InstDirSetting = m_settings->getSetting("InstanceDir");
// instance path: check for problems with '!' in instance path and warn the user in the log
@@ -307,6 +310,17 @@ void MultiMC::initTranslations()
}
}
+void MultiMC::initIcons()
+{
+ auto setting = MMC->settings()->getSetting("IconsDir");
+ ENV.m_icons.reset(new IconList(QString(":/icons/instances/"), setting->get().toString()));
+ connect(setting.get(), &Setting::SettingChanged,[&](const Setting &, QVariant value)
+ {
+ ENV.m_icons->directoryChanged(value.toString());
+ });
+}
+
+
void moveFile(const QString &oldName, const QString &newName)
{
QFile::remove(newName);
@@ -448,21 +462,6 @@ void MultiMC::initGlobalSettings(bool test_mode)
m_settings->registerSetting("PagedGeometry", "");
}
-std::shared_ptr<IconList> MultiMC::icons()
-{
- if (!m_icons)
- {
-
- auto setting = MMC->settings()->getSetting("IconsDir");
- m_icons.reset(new IconList(setting->get().toString()));
- connect(setting.get(), &Setting::SettingChanged,[&](const Setting &, QVariant value)
- {
- m_icons->directoryChanged(value.toString());
- });
- }
- return m_icons;
-}
-
std::shared_ptr<LWJGLVersionList> MultiMC::lwjgllist()
{
if (!m_lwjgllist)
diff --git a/MultiMC.h b/MultiMC.h
index ccf950d1..ba8563e7 100644
--- a/MultiMC.h
+++ b/MultiMC.h
@@ -64,9 +64,6 @@ public:
// InstanceList, OneSixUpdate, MinecraftInstance, OneSixProfileStrategy
std::shared_ptr<MinecraftVersionList> minecraftlist();
- // LegacyInstance, BaseInstance, OneSixInstance, InstanceList
- std::shared_ptr<IconList> icons();
-
QIcon getThemedIcon(const QString& name);
void setIconTheme(const QString& name);
@@ -152,6 +149,8 @@ private slots:
private:
void initLogger();
+ void initIcons();
+
void initGlobalSettings(bool test_mode);
void initTranslations();
@@ -166,7 +165,6 @@ private:
std::shared_ptr<InstanceList> m_instances;
std::shared_ptr<UpdateChecker> m_updateChecker;
std::shared_ptr<MojangAccountList> m_accounts;
- std::shared_ptr<IconList> m_icons;
std::shared_ptr<LWJGLVersionList> m_lwjgllist;
std::shared_ptr<ForgeVersionList> m_forgelist;
std::shared_ptr<LiteLoaderVersionList> m_liteloaderlist;
diff --git a/gui/ConsoleWindow.cpp b/gui/ConsoleWindow.cpp
index ad3c2636..1f7c63cf 100644
--- a/gui/ConsoleWindow.cpp
+++ b/gui/ConsoleWindow.cpp
@@ -59,7 +59,7 @@ ConsoleWindow::ConsoleWindow(BaseProcess *process, QWidget *parent)
setAttribute(Qt::WA_DeleteOnClose);
auto instance = m_proc->instance();
- auto icon = MMC->icons()->getIcon(instance->iconKey());
+ auto icon = ENV.icons()->getIcon(instance->iconKey());
QString windowTitle = tr("Console window for ") + instance->name();
// Set window properties
diff --git a/gui/InstanceProxyModel.cpp b/gui/InstanceProxyModel.cpp
new file mode 100644
index 00000000..09d6fd85
--- /dev/null
+++ b/gui/InstanceProxyModel.cpp
@@ -0,0 +1,23 @@
+#include "InstanceProxyModel.h"
+#include "MultiMC.h"
+#include <logic/BaseInstance.h>
+
+InstanceProxyModel::InstanceProxyModel(QObject *parent) : GroupedProxyModel(parent)
+{
+}
+
+bool InstanceProxyModel::subSortLessThan(const QModelIndex &left,
+ const QModelIndex &right) const
+{
+ BaseInstance *pdataLeft = static_cast<BaseInstance *>(left.internalPointer());
+ BaseInstance *pdataRight = static_cast<BaseInstance *>(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;
+ }
+}
diff --git a/gui/InstanceProxyModel.h b/gui/InstanceProxyModel.h
new file mode 100644
index 00000000..e558efc4
--- /dev/null
+++ b/gui/InstanceProxyModel.h
@@ -0,0 +1,13 @@
+#include "groupview/GroupedProxyModel.h"
+
+/**
+ * A proxy model that is responsible for sorting instances into groups
+ */
+class InstanceProxyModel : public GroupedProxyModel
+{
+public:
+ explicit InstanceProxyModel(QObject *parent = 0);
+
+protected:
+ virtual bool subSortLessThan(const QModelIndex &left, const QModelIndex &right) const;
+};
diff --git a/gui/MainWindow.cpp b/gui/MainWindow.cpp
index 8aa2e635..fb3bfd6f 100644
--- a/gui/MainWindow.cpp
+++ b/gui/MainWindow.cpp
@@ -331,6 +331,7 @@ namespace Ui {
#include "gui/groupview/GroupView.h"
#include "gui/groupview/InstanceDelegate.h"
+#include "gui/InstanceProxyModel.h"
#include "gui/Platform.h"
@@ -503,7 +504,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
SLOT(instanceChanged(const QModelIndex &, const QModelIndex &)));
// track icon changes and update the toolbar!
- connect(MMC->icons().get(), SIGNAL(iconUpdated(QString)), SLOT(iconUpdated(QString)));
+ connect(ENV.icons().get(), SIGNAL(iconUpdated(QString)), SLOT(iconUpdated(QString)));
// model reset -> selection is invalid. All the instance pointers are wrong.
// FIXME: stop using POINTERS everywhere
@@ -1277,7 +1278,7 @@ void MainWindow::on_actionChangeInstIcon_triggered()
if (dlg.result() == QDialog::Accepted)
{
m_selectedInstance->setIconKey(dlg.selectedIconKey);
- auto ico = MMC->icons()->getBigIcon(dlg.selectedIconKey);
+ auto ico = ENV.icons()->getBigIcon(dlg.selectedIconKey);
ui->actionChangeInstIcon->setIcon(ico);
}
}
@@ -1286,14 +1287,14 @@ void MainWindow::iconUpdated(QString icon)
{
if (icon == m_currentInstIcon)
{
- ui->actionChangeInstIcon->setIcon(MMC->icons()->getBigIcon(m_currentInstIcon));
+ ui->actionChangeInstIcon->setIcon(ENV.icons()->getBigIcon(m_currentInstIcon));
}
}
void MainWindow::updateInstanceToolIcon(QString new_icon)
{
m_currentInstIcon = new_icon;
- ui->actionChangeInstIcon->setIcon(MMC->icons()->getBigIcon(m_currentInstIcon));
+ ui->actionChangeInstIcon->setIcon(ENV.icons()->getBigIcon(m_currentInstIcon));
}
void MainWindow::setSelectedInstanceById(const QString &id)
diff --git a/gui/MainWindow.h b/gui/MainWindow.h
index 875c2f86..cccd9f9c 100644
--- a/gui/MainWindow.h
+++ b/gui/MainWindow.h
@@ -19,7 +19,6 @@
#include <QProcess>
#include <QTimer>
-#include "logic/InstanceList.h"
#include "logic/BaseInstance.h"
#include "logic/auth/MojangAccount.h"
#include "logic/net/NetJob.h"
@@ -27,6 +26,7 @@
class NewsChecker;
class NotificationChecker;
class QToolButton;
+class InstanceProxyModel;
class LabeledToolButton;
class QLabel;
class MinecraftProcess;
diff --git a/gui/dialogs/CopyInstanceDialog.cpp b/gui/dialogs/CopyInstanceDialog.cpp
index 80418e14..038fb896 100644
--- a/gui/dialogs/CopyInstanceDialog.cpp
+++ b/gui/dialogs/CopyInstanceDialog.cpp
@@ -29,7 +29,7 @@
#include "logic/icons/IconList.h"
#include "logic/tasks/Task.h"
#include "logic/BaseInstance.h"
-#include <logic/InstanceList.h>
+#include "logic/InstanceList.h"
CopyInstanceDialog::CopyInstanceDialog(InstancePtr original, QWidget *parent)
:QDialog(parent), ui(new Ui::CopyInstanceDialog), m_original(original)
@@ -40,7 +40,7 @@ CopyInstanceDialog::CopyInstanceDialog(InstancePtr original, QWidget *parent)
layout()->setSizeConstraint(QLayout::SetFixedSize);
InstIconKey = original->iconKey();
- ui->iconButton->setIcon(MMC->icons()->getIcon(InstIconKey));
+ ui->iconButton->setIcon(ENV.icons()->getIcon(InstIconKey));
ui->instNameTextBox->setText(original->name());
ui->instNameTextBox->setFocus();
auto groups = MMC->instances()->getGroups().toSet();
@@ -91,7 +91,7 @@ void CopyInstanceDialog::on_iconButton_clicked()
if (dlg.result() == QDialog::Accepted)
{
InstIconKey = dlg.selectedIconKey;
- ui->iconButton->setIcon(MMC->icons()->getIcon(InstIconKey));
+ ui->iconButton->setIcon(ENV.icons()->getIcon(InstIconKey));
}
}
diff --git a/gui/dialogs/IconPickerDialog.cpp b/gui/dialogs/IconPickerDialog.cpp
index 2fb50165..90bf2ef4 100644
--- a/gui/dialogs/IconPickerDialog.cpp
+++ b/gui/dialogs/IconPickerDialog.cpp
@@ -59,7 +59,7 @@ IconPickerDialog::IconPickerDialog(QWidget *parent)
contentsWidget->installEventFilter(this);
- contentsWidget->setModel(MMC->icons().get());
+ contentsWidget->setModel(ENV.icons().get());
auto buttonAdd = ui->buttonBox->addButton(tr("Add Icon"), QDialogButtonBox::ResetRole);
auto buttonRemove =
@@ -104,12 +104,12 @@ void IconPickerDialog::addNewIcon()
//: The type of icon files
QStringList fileNames = QFileDialog::getOpenFileNames(this, selectIcons, QString(),
tr("Icons") + "(*.png *.jpg *.jpeg *.ico)");
- MMC->icons()->installIcons(fileNames);
+ ENV.icons()->installIcons(fileNames);
}
void IconPickerDialog::removeSelectedIcon()
{
- MMC->icons()->deleteIcon(selectedIconKey);
+ ENV.icons()->deleteIcon(selectedIconKey);
}
void IconPickerDialog::activated(QModelIndex index)
@@ -130,7 +130,7 @@ void IconPickerDialog::selectionChanged(QItemSelection selected, QItemSelection
int IconPickerDialog::exec(QString selection)
{
- auto list = MMC->icons();
+ auto list = ENV.icons();
auto contentsWidget = ui->iconView;
selectedIconKey = selection;
diff --git a/gui/dialogs/NewInstanceDialog.cpp b/gui/dialogs/NewInstanceDialog.cpp
index bba1f785..86ffc5b8 100644
--- a/gui/dialogs/NewInstanceDialog.cpp
+++ b/gui/dialogs/NewInstanceDialog.cpp
@@ -66,7 +66,7 @@ NewInstanceDialog::NewInstanceDialog(QWidget *parent)
setSelectedVersion(MMC->minecraftlist()->getLatestStable(), true);
InstIconKey = "infinity";
- ui->iconButton->setIcon(MMC->icons()->getIcon(InstIconKey));
+ ui->iconButton->setIcon(ENV.icons()->getIcon(InstIconKey));
ui->modpackEdit->setValidator(new UrlValidator(ui->modpackEdit));
connect(ui->modpackEdit, &QLineEdit::textChanged, this, &NewInstanceDialog::updateDialogState);
@@ -181,7 +181,7 @@ void NewInstanceDialog::on_iconButton_clicked()
if (dlg.result() == QDialog::Accepted)
{
InstIconKey = dlg.selectedIconKey;
- ui->iconButton->setIcon(MMC->icons()->getIcon(InstIconKey));
+ ui->iconButton->setIcon(ENV.icons()->getIcon(InstIconKey));
}
}
diff --git a/gui/pages/VersionPage.cpp b/gui/pages/VersionPage.cpp
index 61253c1b..7df0b5c1 100644
--- a/gui/pages/VersionPage.cpp
+++ b/gui/pages/VersionPage.cpp
@@ -51,7 +51,7 @@
QIcon VersionPage::icon() const
{
- return MMC->icons()->getIcon(m_inst->iconKey());
+ return ENV.icons()->getIcon(m_inst->iconKey());
}
bool VersionPage::shouldDisplay() const
{
diff --git a/logic/BaseInstance.cpp b/logic/BaseInstance.cpp
index ce81b90e..a5fb5f81 100644
--- a/logic/BaseInstance.cpp
+++ b/logic/BaseInstance.cpp
@@ -18,7 +18,6 @@
#include <QFileInfo>
#include <QDir>
-#include "MultiMC.h"
#include "logic/settings/INISettingsObject.h"
#include "logic/settings/Setting.h"
@@ -37,7 +36,7 @@ BaseInstance::BaseInstance(SettingsObjectPtr globalSettings, SettingsObjectPtr s
m_settings->registerSetting("name", "Unnamed Instance");
m_settings->registerSetting("iconKey", "default");
- connect(MMC->icons().get(), SIGNAL(iconUpdated(QString)), SLOT(iconUpdated(QString)));
+ connect(ENV.icons().get(), SIGNAL(iconUpdated(QString)), SLOT(iconUpdated(QString)));
m_settings->registerSetting("notes", "");
m_settings->registerSetting("lastLaunchTime", 0);
diff --git a/logic/Env.cpp b/logic/Env.cpp
index daf17d65..f10f1951 100644
--- a/logic/Env.cpp
+++ b/logic/Env.cpp
@@ -1,5 +1,6 @@
#include "Env.h"
#include "logic/net/HttpMetaCache.h"
+#include "icons/IconList.h"
#include <QDir>
#include <QNetworkProxy>
#include <QNetworkAccessManager>
@@ -35,6 +36,11 @@ std::shared_ptr< QNetworkAccessManager > Env::qnam()
return m_qnam;
}
+std::shared_ptr<IconList> Env::icons()
+{
+ Q_ASSERT(m_icons != nullptr);
+ return m_icons;
+}
void Env::initHttpMetaCache(QString rootPath, QString staticDataPath)
{
diff --git a/logic/Env.h b/logic/Env.h
index 3d560a29..ba2ea869 100644
--- a/logic/Env.h
+++ b/logic/Env.h
@@ -3,6 +3,7 @@
#include <memory>
#include <QString>
+class IconList;
class QNetworkAccessManager;
class HttpMetaCache;
@@ -26,6 +27,8 @@ public:
std::shared_ptr<HttpMetaCache> metacache();
+ std::shared_ptr<IconList> icons();
+
/// init the cache. FIXME: possible future hook point
void initHttpMetaCache(QString rootPath, QString staticDataPath);
@@ -35,4 +38,5 @@ public:
protected:
std::shared_ptr<QNetworkAccessManager> m_qnam;
std::shared_ptr<HttpMetaCache> m_metacache;
+ std::shared_ptr<IconList> m_icons;
};
diff --git a/logic/InstanceList.cpp b/logic/InstanceList.cpp
index db85bcfc..b6ac38a8 100644
--- a/logic/InstanceList.cpp
+++ b/logic/InstanceList.cpp
@@ -97,7 +97,7 @@ QVariant InstanceList::data(const QModelIndex &index, int role) const
case Qt::DecorationRole:
{
QString key = pdata->iconKey();
- return MMC->icons()->getIcon(key);
+ return ENV.icons()->getIcon(key);
}
// for now.
case GroupViewRoles::GroupRole:
@@ -547,23 +547,3 @@ void InstanceList::propertiesChanged(BaseInstance *inst)
emit dataChanged(index(i), index(i));
}
}
-
-InstanceProxyModel::InstanceProxyModel(QObject *parent) : GroupedProxyModel(parent)
-{
-}
-
-bool InstanceProxyModel::subSortLessThan(const QModelIndex &left,
- const QModelIndex &right) const
-{
- BaseInstance *pdataLeft = static_cast<BaseInstance *>(left.internalPointer());
- BaseInstance *pdataRight = static_cast<BaseInstance *>(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;
- }
-}
diff --git a/logic/InstanceList.h b/logic/InstanceList.h
index 1d52663e..ac3dc848 100644
--- a/logic/InstanceList.h
+++ b/logic/InstanceList.h
@@ -181,12 +181,3 @@ protected:
QSet<QString> m_groups;
SettingsObjectPtr m_globalSettings;
};
-
-class InstanceProxyModel : public GroupedProxyModel
-{
-public:
- explicit InstanceProxyModel(QObject *parent = 0);
-
-protected:
- virtual bool subSortLessThan(const QModelIndex &left, const QModelIndex &right) const;
-};
diff --git a/logic/LegacyInstance.cpp b/logic/LegacyInstance.cpp
index 96aeff69..ff1eed44 100644
--- a/logic/LegacyInstance.cpp
+++ b/logic/LegacyInstance.cpp
@@ -127,7 +127,7 @@ std::shared_ptr<Task> LegacyInstance::doUpdate()
BaseProcess *LegacyInstance::prepareForLaunch(AuthSessionPtr account)
{
QString launchScript;
- QIcon icon = MMC->icons()->getIcon(iconKey());
+ QIcon icon = ENV.icons()->getIcon(iconKey());
auto pixmap = icon.pixmap(128, 128);
pixmap.save(PathCombine(minecraftRoot(), "icon.png"), "PNG");
diff --git a/logic/OneSixInstance.cpp b/logic/OneSixInstance.cpp
index 95701e80..20fb65bb 100644
--- a/logic/OneSixInstance.cpp
+++ b/logic/OneSixInstance.cpp
@@ -158,7 +158,7 @@ QStringList OneSixInstance::processMinecraftArgs(AuthSessionPtr session)
BaseProcess *OneSixInstance::prepareForLaunch(AuthSessionPtr session)
{
QString launchScript;
- QIcon icon = MMC->icons()->getIcon(iconKey());
+ QIcon icon = ENV.icons()->getIcon(iconKey());
auto pixmap = icon.pixmap(128, 128);
pixmap.save(PathCombine(minecraftRoot(), "icon.png"), "PNG");
diff --git a/logic/ftb/FTBPlugin.cpp b/logic/ftb/FTBPlugin.cpp
index d524e3fd..1e9d9123 100644
--- a/logic/ftb/FTBPlugin.cpp
+++ b/logic/ftb/FTBPlugin.cpp
@@ -212,7 +212,7 @@ void FTBPlugin::loadInstances(QMap<QString, QString> &groupMap, QList<InstancePt
qDebug() << "Loading FTB instance from " << record.instanceDir;
QString iconKey = record.logo;
iconKey.remove(QRegularExpression("\\..*"));
- MMC->icons()->addIcon(iconKey, iconKey, PathCombine(record.templateDir, record.logo),
+ ENV.icons()->addIcon(iconKey, iconKey, PathCombine(record.templateDir, record.logo),
MMCIcon::Transient);
if (!QFileInfo(PathCombine(record.instanceDir, "instance.cfg")).exists())
diff --git a/logic/icons/IconList.cpp b/logic/icons/IconList.cpp
index 6db8b035..964d61e9 100644
--- a/logic/icons/IconList.cpp
+++ b/logic/icons/IconList.cpp
@@ -20,14 +20,15 @@
#include <QMimeData>
#include <QUrl>
#include <QFileSystemWatcher>
-#include <MultiMC.h>
+#include <QSet>
+#include <logger/QsLog.h>
#define MAX_SIZE 1024
-IconList::IconList(QString path, QObject *parent) : QAbstractListModel(parent)
+IconList::IconList(QString builtinPath, QString path, QObject *parent) : QAbstractListModel(parent)
{
// add builtin icons
- QDir instance_icons(":/icons/instances/");
+ QDir instance_icons(builtinPath);
auto file_info_list = instance_icons.entryInfoList(QDir::Files, QDir::Name);
for (auto file_info : file_info_list)
{
diff --git a/logic/icons/IconList.h b/logic/icons/IconList.h
index 8687eba6..124ecf27 100644
--- a/logic/icons/IconList.h
+++ b/logic/icons/IconList.h
@@ -23,6 +23,7 @@
#include <memory>
#include "MMCIcon.h"
#include "logic/settings/Setting.h"
+#include "logic/Env.h" // there is a global icon list inside Env.
class QFileSystemWatcher;
@@ -30,7 +31,7 @@ class IconList : public QAbstractListModel
{
Q_OBJECT
public:
- explicit IconList(QString path, QObject *parent = 0);
+ explicit IconList(QString builtinPath, QString path, QObject *parent = 0);
virtual ~IconList() {};
QIcon getIcon(QString key);