From aa70ed2244700dbcc93c1fadb22edc1c1caede37 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= <peterix@gmail.com>
Date: Sun, 1 Feb 2015 11:44:47 +0100
Subject: SCRATCH move icons over to Env, instance proxy model to gui

---
 CMakeLists.txt                     |  2 ++
 MultiMC.cpp                        | 29 ++++++++++++++---------------
 MultiMC.h                          |  6 ++----
 gui/ConsoleWindow.cpp              |  2 +-
 gui/InstanceProxyModel.cpp         | 23 +++++++++++++++++++++++
 gui/InstanceProxyModel.h           | 13 +++++++++++++
 gui/MainWindow.cpp                 |  9 +++++----
 gui/MainWindow.h                   |  2 +-
 gui/dialogs/CopyInstanceDialog.cpp |  6 +++---
 gui/dialogs/IconPickerDialog.cpp   |  8 ++++----
 gui/dialogs/NewInstanceDialog.cpp  |  4 ++--
 gui/pages/VersionPage.cpp          |  2 +-
 logic/BaseInstance.cpp             |  3 +--
 logic/Env.cpp                      |  6 ++++++
 logic/Env.h                        |  4 ++++
 logic/InstanceList.cpp             | 22 +---------------------
 logic/InstanceList.h               |  9 ---------
 logic/LegacyInstance.cpp           |  2 +-
 logic/OneSixInstance.cpp           |  2 +-
 logic/ftb/FTBPlugin.cpp            |  2 +-
 logic/icons/IconList.cpp           |  7 ++++---
 logic/icons/IconList.h             |  3 ++-
 22 files changed, 92 insertions(+), 74 deletions(-)
 create mode 100644 gui/InstanceProxyModel.cpp
 create mode 100644 gui/InstanceProxyModel.h

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);
-- 
cgit v1.2.3