aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2014-06-30 22:22:09 +0200
committerPetr Mrázek <peterix@gmail.com>2014-06-30 22:22:09 +0200
commite241c3625c2e0f005ee2cb01577ceeb054bbbd98 (patch)
treeb874caae329a536ca15b331be386cf481307d28f
parent421a46e3d3036ea0dea4889125ee58309d0ed21e (diff)
parentd2b2d55aa9a4031d1e179534796cbe07bc57080f (diff)
downloadPrismLauncher-e241c3625c2e0f005ee2cb01577ceeb054bbbd98.tar.gz
PrismLauncher-e241c3625c2e0f005ee2cb01577ceeb054bbbd98.tar.bz2
PrismLauncher-e241c3625c2e0f005ee2cb01577ceeb054bbbd98.zip
Merge branch 'feature_theme_support' into develop
Conflicts: main.cpp
-rw-r--r--CMakeLists.txt6
-rw-r--r--MultiMC.cpp1
-rw-r--r--gui/MainWindow.ui2
-rw-r--r--gui/dialogs/SettingsDialog.cpp30
-rw-r--r--gui/dialogs/SettingsDialog.ui39
-rw-r--r--main.cpp4
-rw-r--r--resources/multimc/index.theme10
-rw-r--r--resources/pe_dark/16x16/status-bad.pngbin0 -> 468 bytes
-rw-r--r--resources/pe_dark/16x16/status-good.pngbin0 -> 527 bytes
-rw-r--r--resources/pe_dark/22x22/status-bad.pngbin0 -> 592 bytes
-rw-r--r--resources/pe_dark/22x22/status-good.pngbin0 -> 665 bytes
-rw-r--r--resources/pe_dark/24x24/status-bad.pngbin0 -> 605 bytes
-rw-r--r--resources/pe_dark/24x24/status-good.pngbin0 -> 676 bytes
-rw-r--r--resources/pe_dark/32x32/status-bad.pngbin0 -> 839 bytes
-rw-r--r--resources/pe_dark/32x32/status-good.pngbin0 -> 802 bytes
-rw-r--r--resources/pe_dark/48x48/status-bad.pngbin0 -> 1162 bytes
-rw-r--r--resources/pe_dark/48x48/status-good.pngbin0 -> 1159 bytes
-rw-r--r--resources/pe_dark/64x64/status-bad.pngbin0 -> 1413 bytes
-rw-r--r--resources/pe_dark/64x64/status-good.pngbin0 -> 1478 bytes
-rw-r--r--resources/pe_dark/index.theme39
-rw-r--r--resources/pe_dark/pe_dark.qrc57
-rw-r--r--resources/pe_dark/scalable/about.svg22
-rw-r--r--resources/pe_dark/scalable/bug.svg29
-rw-r--r--resources/pe_dark/scalable/centralmods.svg22
-rw-r--r--resources/pe_dark/scalable/checkupdate.svg25
-rw-r--r--resources/pe_dark/scalable/console.svg228
-rw-r--r--resources/pe_dark/scalable/console_error.svg247
-rw-r--r--resources/pe_dark/scalable/copy.svg21
-rw-r--r--resources/pe_dark/scalable/new.svg22
-rw-r--r--resources/pe_dark/scalable/patreon.svg22
-rw-r--r--resources/pe_dark/scalable/refresh.svg21
-rw-r--r--resources/pe_dark/scalable/settings.svg36
-rw-r--r--resources/pe_dark/scalable/viewfolder.svg20
-rw-r--r--resources/pe_light/16x16/status-bad.pngbin0 -> 468 bytes
-rw-r--r--resources/pe_light/16x16/status-good.pngbin0 -> 527 bytes
-rw-r--r--resources/pe_light/22x22/status-bad.pngbin0 -> 592 bytes
-rw-r--r--resources/pe_light/22x22/status-good.pngbin0 -> 665 bytes
-rw-r--r--resources/pe_light/24x24/status-bad.pngbin0 -> 605 bytes
-rw-r--r--resources/pe_light/24x24/status-good.pngbin0 -> 676 bytes
-rw-r--r--resources/pe_light/32x32/status-bad.pngbin0 -> 839 bytes
-rw-r--r--resources/pe_light/32x32/status-good.pngbin0 -> 802 bytes
-rw-r--r--resources/pe_light/48x48/status-bad.pngbin0 -> 1162 bytes
-rw-r--r--resources/pe_light/48x48/status-good.pngbin0 -> 1159 bytes
-rw-r--r--resources/pe_light/64x64/status-bad.pngbin0 -> 1413 bytes
-rw-r--r--resources/pe_light/64x64/status-good.pngbin0 -> 1478 bytes
-rw-r--r--resources/pe_light/index.theme39
-rw-r--r--resources/pe_light/pe_light.qrc61
-rw-r--r--resources/pe_light/scalable/about.svg21
-rw-r--r--resources/pe_light/scalable/bug.svg50
-rw-r--r--resources/pe_light/scalable/centralmods.svg20
-rw-r--r--resources/pe_light/scalable/checkupdate.svg24
-rw-r--r--resources/pe_light/scalable/console.svg228
-rw-r--r--resources/pe_light/scalable/console_error.svg247
-rw-r--r--resources/pe_light/scalable/copy.svg20
-rw-r--r--resources/pe_light/scalable/new.svg21
-rw-r--r--resources/pe_light/scalable/news.svg296
-rw-r--r--resources/pe_light/scalable/patreon.svg83
-rw-r--r--resources/pe_light/scalable/refresh.svg20
-rw-r--r--resources/pe_light/scalable/settings.svg64
-rw-r--r--resources/pe_light/scalable/viewfolder.svg19
60 files changed, 2108 insertions, 8 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 195e71e8..9304547b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -653,6 +653,8 @@ endforeach()
set(MULTIMC_QRCS
resources/backgrounds/backgrounds.qrc
resources/multimc/multimc.qrc
+ resources/pe_dark/pe_dark.qrc
+ resources/pe_light/pe_light.qrc
resources/instances/instances.qrc
resources/versions/versions.qrc
)
@@ -734,7 +736,7 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInf
DIRECTORY "${QT_PLUGINS_DIR}/imageformats"
DESTINATION ${PLUGIN_DEST_DIR}
COMPONENT Runtime
- REGEX "tga|svg|tiff|mng" EXCLUDE
+ REGEX "tga|tiff|mng" EXCLUDE
)
# Platform plugins
@@ -750,7 +752,7 @@ else()
DIRECTORY "${QT_PLUGINS_DIR}/imageformats"
DESTINATION ${PLUGIN_DEST_DIR}
COMPONENT Runtime
- REGEX "tga|svg|tiff|mng" EXCLUDE
+ REGEX "tga|tiff|mng" EXCLUDE
REGEX "d\\." EXCLUDE
REGEX "_debug\\." EXCLUDE
)
diff --git a/MultiMC.cpp b/MultiMC.cpp
index a324d4b7..bd72c139 100644
--- a/MultiMC.cpp
+++ b/MultiMC.cpp
@@ -355,6 +355,7 @@ void MultiMC::initGlobalSettings()
// Updates
m_settings->registerSetting("UpdateChannel", BuildConfig.VERSION_CHANNEL);
m_settings->registerSetting("AutoUpdate", true);
+ m_settings->registerSetting("IconTheme", QString("multimc"));
// Notifications
m_settings->registerSetting("ShownNotifications", QString());
diff --git a/gui/MainWindow.ui b/gui/MainWindow.ui
index c79dc948..7adc5d37 100644
--- a/gui/MainWindow.ui
+++ b/gui/MainWindow.ui
@@ -500,6 +500,8 @@
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources>
+ <include location="../resources/pe_dark/pe_dark.qrc"/>
+ <include location="../resources/pe_light/pe_light.qrc"/>
<include location="../resources/multimc/multimc.qrc"/>
<include location="../resources/instances/instances.qrc"/>
</resources>
diff --git a/gui/dialogs/SettingsDialog.cpp b/gui/dialogs/SettingsDialog.cpp
index 65b17885..87da0c68 100644
--- a/gui/dialogs/SettingsDialog.cpp
+++ b/gui/dialogs/SettingsDialog.cpp
@@ -326,7 +326,20 @@ void SettingsDialog::applySettings(SettingsObject *s)
// Updates
s->set("AutoUpdate", ui->autoUpdateCheckBox->isChecked());
s->set("UpdateChannel", m_currentUpdateChannel);
-
+ //FIXME: make generic
+ switch (ui->themeComboBox->currentIndex())
+ {
+ case 1:
+ s->set("IconTheme", "pe_dark");
+ break;
+ case 2:
+ s->set("IconTheme", "pe_light");
+ break;
+ case 0:
+ default:
+ s->set("IconTheme", "multimc");
+ break;
+ }
// FTB
s->set("TrackFTBInstances", ui->trackFtbBox->isChecked());
s->set("FTBLauncherRoot", ui->ftbLauncherBox->text());
@@ -429,7 +442,20 @@ void SettingsDialog::loadSettings(SettingsObject *s)
// Updates
ui->autoUpdateCheckBox->setChecked(s->get("AutoUpdate").toBool());
m_currentUpdateChannel = s->get("UpdateChannel").toString();
-
+ //FIXME: make generic
+ auto theme = s->get("IconTheme").toString();
+ if (theme == "pe_dark")
+ {
+ ui->themeComboBox->setCurrentIndex(1);
+ }
+ else if (theme == "pe_light")
+ {
+ ui->themeComboBox->setCurrentIndex(2);
+ }
+ else
+ {
+ ui->themeComboBox->setCurrentIndex(0);
+ }
// FTB
ui->trackFtbBox->setChecked(s->get("TrackFTBInstances").toBool());
ui->ftbLauncherBox->setText(s->get("FTBLauncherRoot").toString());
diff --git a/gui/dialogs/SettingsDialog.ui b/gui/dialogs/SettingsDialog.ui
index 74ed68d2..d4e90302 100644
--- a/gui/dialogs/SettingsDialog.ui
+++ b/gui/dialogs/SettingsDialog.ui
@@ -20,7 +20,7 @@
<string>Settings</string>
</property>
<property name="windowIcon">
- <iconset resource="../../graphics.qrc">
+ <iconset>
<normaloff>:/icons/toolbar/settings</normaloff>:/icons/toolbar/settings</iconset>
</property>
<property name="modal">
@@ -327,6 +327,43 @@
</widget>
</item>
<item>
+ <widget class="QGroupBox" name="themeBox">
+ <property name="title">
+ <string>Icon Theme</string>
+ </property>
+ <layout class="QHBoxLayout" name="themeBoxLayout">
+ <item>
+ <widget class="QComboBox" name="themeComboBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <item>
+ <property name="text">
+ <string>Default</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Simple</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Simple (Light Icons)</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
<widget class="QGroupBox" name="editorsBox">
<property name="title">
<string>External Editors (leave empty for system default)</string>
diff --git a/main.cpp b/main.cpp
index b33b02f2..618e6745 100644
--- a/main.cpp
+++ b/main.cpp
@@ -10,7 +10,7 @@
int main_gui(MultiMC &app)
{
// show main window
- QIcon::setThemeName("multimc");
+ QIcon::setThemeName(MMC->settings()->get("IconTheme").toString());
MainWindow mainWin;
mainWin.restoreState(QByteArray::fromBase64(MMC->settings()->get("MainWindowState").toByteArray()));
mainWin.restoreGeometry(QByteArray::fromBase64(MMC->settings()->get("MainWindowGeometry").toByteArray()));
@@ -34,6 +34,8 @@ int main(int argc, char *argv[])
// Register signal handler for generating crash reports.
initBlackMagic();
#endif
+ Q_INIT_RESOURCE(pe_dark);
+ Q_INIT_RESOURCE(pe_light);
switch (app.status())
{
diff --git a/resources/multimc/index.theme b/resources/multimc/index.theme
index 776792b7..8e1241e9 100644
--- a/resources/multimc/index.theme
+++ b/resources/multimc/index.theme
@@ -2,7 +2,7 @@
Name=multimc
Comment=MultiMC Default Icons
Inherits=default
-Directories=scalable/apps,8x8,16x16,22x22,24x24,32x32,48x48
+Directories=scalable/apps,8x8,16x16,22x22,24x24,32x32,48x48,scalable
[scalable/apps]
Size=48
@@ -30,4 +30,10 @@ Size=32
Size=48
[64x64]
-Size=64 \ No newline at end of file
+Size=64
+
+[scalable]
+Size=48
+Type=Scalable
+MinSize=16
+MaxSize=256
diff --git a/resources/pe_dark/16x16/status-bad.png b/resources/pe_dark/16x16/status-bad.png
new file mode 100644
index 00000000..0187b990
--- /dev/null
+++ b/resources/pe_dark/16x16/status-bad.png
Binary files differ
diff --git a/resources/pe_dark/16x16/status-good.png b/resources/pe_dark/16x16/status-good.png
new file mode 100644
index 00000000..661405db
--- /dev/null
+++ b/resources/pe_dark/16x16/status-good.png
Binary files differ
diff --git a/resources/pe_dark/22x22/status-bad.png b/resources/pe_dark/22x22/status-bad.png
new file mode 100644
index 00000000..7b6e9bcb
--- /dev/null
+++ b/resources/pe_dark/22x22/status-bad.png
Binary files differ
diff --git a/resources/pe_dark/22x22/status-good.png b/resources/pe_dark/22x22/status-good.png
new file mode 100644
index 00000000..3da59106
--- /dev/null
+++ b/resources/pe_dark/22x22/status-good.png
Binary files differ
diff --git a/resources/pe_dark/24x24/status-bad.png b/resources/pe_dark/24x24/status-bad.png
new file mode 100644
index 00000000..bef1e5a3
--- /dev/null
+++ b/resources/pe_dark/24x24/status-bad.png
Binary files differ
diff --git a/resources/pe_dark/24x24/status-good.png b/resources/pe_dark/24x24/status-good.png
new file mode 100644
index 00000000..2b55aeae
--- /dev/null
+++ b/resources/pe_dark/24x24/status-good.png
Binary files differ
diff --git a/resources/pe_dark/32x32/status-bad.png b/resources/pe_dark/32x32/status-bad.png
new file mode 100644
index 00000000..fc700e19
--- /dev/null
+++ b/resources/pe_dark/32x32/status-bad.png
Binary files differ
diff --git a/resources/pe_dark/32x32/status-good.png b/resources/pe_dark/32x32/status-good.png
new file mode 100644
index 00000000..eff50142
--- /dev/null
+++ b/resources/pe_dark/32x32/status-good.png
Binary files differ
diff --git a/resources/pe_dark/48x48/status-bad.png b/resources/pe_dark/48x48/status-bad.png
new file mode 100644
index 00000000..846ac51d
--- /dev/null
+++ b/resources/pe_dark/48x48/status-bad.png
Binary files differ
diff --git a/resources/pe_dark/48x48/status-good.png b/resources/pe_dark/48x48/status-good.png
new file mode 100644
index 00000000..56574e38
--- /dev/null
+++ b/resources/pe_dark/48x48/status-good.png
Binary files differ
diff --git a/resources/pe_dark/64x64/status-bad.png b/resources/pe_dark/64x64/status-bad.png
new file mode 100644
index 00000000..b87772cc
--- /dev/null
+++ b/resources/pe_dark/64x64/status-bad.png
Binary files differ
diff --git a/resources/pe_dark/64x64/status-good.png b/resources/pe_dark/64x64/status-good.png
new file mode 100644
index 00000000..afedf8cb
--- /dev/null
+++ b/resources/pe_dark/64x64/status-good.png
Binary files differ
diff --git a/resources/pe_dark/index.theme b/resources/pe_dark/index.theme
new file mode 100644
index 00000000..2768cb50
--- /dev/null
+++ b/resources/pe_dark/index.theme
@@ -0,0 +1,39 @@
+[Icon Theme]
+Name=pe_dark
+Comment=Icons by pexner (dark)
+Inherits=multimc
+Directories=scalable/apps,8x8,16x16,22x22,24x24,32x32,48x48,scalable
+
+[scalable/apps]
+Size=48
+Type=scalable
+MinSize=1
+MaxSize=512
+Context=Applications
+
+[8x8]
+Size=8
+
+[16x16]
+Size=16
+
+[22x22]
+Size=22
+
+[24x24]
+Size=24
+
+[32x32]
+Size=32
+
+[48x48]
+Size=48
+
+[64x64]
+Size=64
+
+[scalable]
+Size=48
+Type=Scalable
+MinSize=16
+MaxSize=256
diff --git a/resources/pe_dark/pe_dark.qrc b/resources/pe_dark/pe_dark.qrc
new file mode 100644
index 00000000..98823a27
--- /dev/null
+++ b/resources/pe_dark/pe_dark.qrc
@@ -0,0 +1,57 @@
+<!DOCTYPE RCC>
+<RCC version="1.0">
+ <qresource prefix="/icons/pe_dark">
+ <file>index.theme</file>
+ <!-- OK console icon. Our own -->
+ <file>scalable/console.svg</file>
+
+ <!-- ERROR console icon. Our own -->
+ <file>scalable/console_error.svg</file>
+
+ <!-- About dialog. Our own. -->
+ <file>scalable/about.svg</file>
+
+ <!-- Report bug. Our own. -->
+ <file>scalable/bug.svg</file>
+
+ <!-- Patron logo, black and white. (C) 2014 Patreon, Inc., http://www.patreon.com/toolbox?ftyp=media -->
+ <file>scalable/patreon.svg</file>
+
+ <!-- Show mods folder. Our own. -->
+ <file>scalable/centralmods.svg</file>
+
+ <!-- Update. Our own. -->
+ <file>scalable/checkupdate.svg</file>
+
+ <!-- copy instance. Our own. -->
+ <file>scalable/copy.svg</file>
+
+ <!-- New instance. Our own. -->
+ <file>scalable/new.svg</file>
+
+ <!-- Bad status. Our own. -->
+ <file>16x16/status-bad.png</file>
+ <file>22x22/status-bad.png</file>
+ <file>24x24/status-bad.png</file>
+ <file>32x32/status-bad.png</file>
+ <file>48x48/status-bad.png</file>
+ <file>64x64/status-bad.png</file>
+
+ <!-- Good status. Our own. -->
+ <file>16x16/status-good.png</file>
+ <file>22x22/status-good.png</file>
+ <file>24x24/status-good.png</file>
+ <file>32x32/status-good.png</file>
+ <file>48x48/status-good.png</file>
+ <file>64x64/status-good.png</file>
+
+ <!-- Refresh, Our own. -->
+ <file>scalable/refresh.svg</file>
+
+ <!-- Settings, Our own. -->
+ <file>scalable/settings.svg</file>
+
+ <!-- View folder. Our own. -->
+ <file>scalable/viewfolder.svg</file>
+ </qresource>
+</RCC>
diff --git a/resources/pe_dark/scalable/about.svg b/resources/pe_dark/scalable/about.svg
new file mode 100644
index 00000000..35eb8e87
--- /dev/null
+++ b/resources/pe_dark/scalable/about.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
+<rect fill="none" width="32" height="32"/>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="297.5" y1="-370.9326" x2="297.5" y2="-404.8098" gradientTransform="matrix(1 0 0 -1 -281.5 -372)">
+ <stop offset="0" style="stop-color:#999999"/>
+ <stop offset="0.3" style="stop-color:#000000"/>
+ <stop offset="0.4868" style="stop-color:#030303"/>
+ <stop offset="0.6368" style="stop-color:#0D0D0D"/>
+ <stop offset="0.774" style="stop-color:#1E1E1E"/>
+ <stop offset="0.9029" style="stop-color:#363636"/>
+ <stop offset="1" style="stop-color:#4D4D4D"/>
+</linearGradient>
+<path fill="url(#SVGID_1_)" d="M24.753,14.774C24.629,15.172,24.417,15.585,24,16c-2,2-2,4-2,4v2c0,1.105-0.896,2-2,2h-8
+ c-1.104,0-2-0.895-2-2v-2c0-1.453-1.049-2.895-1.627-3.581c-0.017-0.021-0.032-0.042-0.05-0.062C8.131,16.132,8,16,8,16v-0.071
+ C6.756,14.272,6,12.233,6,10C6,4.478,10.478,0,16,0c5.521,0,10,4.478,10,10C26,11.739,25.54,13.357,24.753,14.774z M16,4
+ c-3.313,0-6,2.687-6,6c0,2.609,1.675,4.806,4,5.633V18c0,1.105,0.896,2,2,2c1.104,0,2-0.895,2-2v-2.367c2.325-0.827,4-3.024,4-5.633
+ C22,6.687,19.312,4,16,4z M13,26h6c0.552,0,1,0.448,1,1s-0.448,1-1,1h-6c-0.553,0-1-0.448-1-1S12.447,26,13,26z M15,30h2
+ c0.552,0,1,0.449,1,1c0,0.552-0.448,1-1,1h-2c-0.553,0-1-0.448-1-1C14,30.449,14.447,30,15,30z"/>
+</svg>
diff --git a/resources/pe_dark/scalable/bug.svg b/resources/pe_dark/scalable/bug.svg
new file mode 100644
index 00000000..6f78087f
--- /dev/null
+++ b/resources/pe_dark/scalable/bug.svg
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
+<rect fill="none" width="32" height="32"/>
+<g>
+ <g>
+
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="297.5" y1="-372" x2="297.5" y2="-403.7599" gradientTransform="matrix(1 0 0 -1 -281.5 -372)">
+ <stop offset="0" style="stop-color:#999999"/>
+ <stop offset="0.3" style="stop-color:#000000"/>
+ <stop offset="0.4868" style="stop-color:#030303"/>
+ <stop offset="0.6368" style="stop-color:#0D0D0D"/>
+ <stop offset="0.774" style="stop-color:#1E1E1E"/>
+ <stop offset="0.9029" style="stop-color:#363636"/>
+ <stop offset="1" style="stop-color:#4D4D4D"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M25.375,10.375h-1.702c-0.106,0.589-0.173,1.214-0.173,1.875s0.066,1.286,0.173,1.875h1.702
+ c1.036,0,1.875-0.839,1.875-1.875S26.411,10.375,25.375,10.375z M25.375,1C20.043,6.449,12.25,6.625,12.25,6.625H6.625
+ C3.519,6.625,1,9.144,1,12.25s2.519,5.625,5.625,5.625c0,0.26,0.052,0.506,0.147,0.73c0.177,0.418,0.512,0.746,0.919,0.942
+ C7.72,19.562,7.74,19.59,7.77,19.604c0.224,0.094,0.471,0.146,0.729,0.146l-1.875,9.375C6.625,30.161,7.464,31,8.5,31h3.75
+ c1.036,0,1.875-0.839,1.875-1.875s-0.839-1.875-1.875-1.875l1.5-7.5h0.375c0.847,0,1.534-0.57,1.767-1.34
+ c2.73,0.637,6.493,2.033,9.483,5.09C28.48,23.5,31,18.463,31,12.25S28.48,1,25.375,1z M6.625,14.125H4.75v-3.75h1.875V14.125z
+ M25.375,19.75c-2.07,0-3.75-3.357-3.75-7.5c0-4.141,1.68-7.5,3.75-7.5s3.75,3.359,3.75,7.5
+ C29.125,16.393,27.445,19.75,25.375,19.75z"/>
+ </g>
+</g>
+</svg>
diff --git a/resources/pe_dark/scalable/centralmods.svg b/resources/pe_dark/scalable/centralmods.svg
new file mode 100644
index 00000000..7c06f505
--- /dev/null
+++ b/resources/pe_dark/scalable/centralmods.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
+<rect fill="none" width="32" height="32"/>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="579" y1="809" x2="579" y2="840.7599" gradientTransform="matrix(1 0 0 1 -563 -809)">
+ <stop offset="0" style="stop-color:#999999"/>
+ <stop offset="0.3" style="stop-color:#000000"/>
+ <stop offset="0.4868" style="stop-color:#030303"/>
+ <stop offset="0.6368" style="stop-color:#0D0D0D"/>
+ <stop offset="0.774" style="stop-color:#1E1E1E"/>
+ <stop offset="0.9029" style="stop-color:#363636"/>
+ <stop offset="1" style="stop-color:#4D4D4D"/>
+</linearGradient>
+<path fill="url(#SVGID_1_)" d="M25.375,31H6.625C3.519,31,1,28.48,1,25.375V6.625C1,3.519,3.519,1,6.625,1h7.5
+ c2.445,0,4.506,1.57,5.281,3.75h5.969C28.48,4.75,31,7.269,31,10.375v15C31,28.48,28.48,31,25.375,31z M27.25,10.375
+ c0-1.036-0.839-1.875-1.875-1.875H16V6.625c0-1.036-0.839-1.875-1.875-1.875h-7.5c-1.036,0-1.875,0.839-1.875,1.875v18.75
+ c0,1.036,0.839,1.875,1.875,1.875h18.75c1.036,0,1.875-0.839,1.875-1.875V10.375z"/>
+<path d="M16,10.604l2.078,4.212l4.646,0.675l-3.363,3.278l0.795,4.627L16,21.211l-4.156,2.186l0.794-4.627L9.275,15.49l4.646-0.675
+ L16,10.604z"/>
+</svg>
diff --git a/resources/pe_dark/scalable/checkupdate.svg b/resources/pe_dark/scalable/checkupdate.svg
new file mode 100644
index 00000000..59a5ad75
--- /dev/null
+++ b/resources/pe_dark/scalable/checkupdate.svg
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="297.5" y1="-372" x2="297.5" y2="-403.7599" gradientTransform="matrix(1 0 0 -1 -281.5 -372)">
+ <stop offset="0" style="stop-color:#999999"/>
+ <stop offset="0.3" style="stop-color:#000000"/>
+ <stop offset="0.4868" style="stop-color:#030303"/>
+ <stop offset="0.6368" style="stop-color:#0D0D0D"/>
+ <stop offset="0.774" style="stop-color:#1E1E1E"/>
+ <stop offset="0.9029" style="stop-color:#363636"/>
+ <stop offset="1" style="stop-color:#4D4D4D"/>
+</linearGradient>
+<path fill="url(#SVGID_1_)" d="M25.375,23.5h-0.337c-0.033-0.092-0.056-0.188-0.093-0.275c-0.621-1.508-1.445-2.634-3.32-3.154
+ v-2.195c0-3.102-2.523-5.625-5.625-5.625c-3.101,0-5.625,2.523-5.625,5.625v2.191c-1.875,0.521-2.698,1.646-3.321,3.147
+ c-0.018,0.043-0.028,0.093-0.043,0.136C3.582,22.659,1,19.631,1,16v-1.875c0-4.142,3.358-7.5,7.5-7.5
+ c0.714,0,1.388,0.131,2.042,0.317C11.26,3.548,14.268,1,17.875,1c4.143,0,7.5,3.358,7.5,7.5c0,0.662-0.113,1.292-0.271,1.902
+ c0.092-0.005,0.181-0.027,0.271-0.027C28.484,10.375,31,12.895,31,16v1.875C31,20.982,28.484,23.5,25.375,23.5z M12.25,23.5h1.88
+ v-5.625c0-1.037,0.837-1.875,1.875-1.875c1.039,0,1.877,0.838,1.877,1.875V23.5h1.871c0.756,0,1.442,0.458,1.731,1.157
+ c0.072,0.176,0.115,0.354,0.136,0.536c0.05,0.55-0.14,1.104-0.542,1.508l-3.753,3.75C16.961,30.814,16.479,31,16,31
+ s-0.958-0.186-1.324-0.549l-3.75-3.75c-0.399-0.403-0.591-0.958-0.539-1.508c0.016-0.184,0.057-0.36,0.132-0.536
+ C10.81,23.958,11.493,23.5,12.25,23.5z"/>
+<rect fill="none" width="32" height="32"/>
+</svg>
diff --git a/resources/pe_dark/scalable/console.svg b/resources/pe_dark/scalable/console.svg
new file mode 100644
index 00000000..ec14ab68
--- /dev/null
+++ b/resources/pe_dark/scalable/console.svg
@@ -0,0 +1,228 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32px"
+ height="32px"
+ id="svg2985"
+ version="1.1"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="console.svg"
+ inkscape:export-filename="/home/peterix/projects/MultiMC4/src/resources/console.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2987">
+ <linearGradient
+ id="linearGradient6