diff options
-rw-r--r-- | .gitignore | 14 | ||||
-rw-r--r-- | CMakeLists.txt | 38 | ||||
-rw-r--r-- | MultiMC.cpp | 37 | ||||
-rw-r--r-- | MultiMC.h | 7 | ||||
-rw-r--r-- | changelog.yaml | 14 | ||||
-rw-r--r-- | depends/javacheck/.gitignore | 6 | ||||
-rw-r--r-- | depends/launcher/.gitignore | 6 | ||||
-rw-r--r-- | depends/launcher/CMakeLists.txt | 25 | ||||
-rw-r--r-- | depends/launcher/MultiMCLauncher.java | 331 | ||||
-rw-r--r-- | depends/launcher/net/minecraft/Launcher.java | 44 | ||||
-rw-r--r-- | depends/launcher/org/multimc/EntryPoint.java | 135 | ||||
-rw-r--r-- | depends/launcher/org/multimc/IconLoader.java | 132 | ||||
-rw-r--r-- | depends/launcher/org/multimc/Launcher.java | 22 | ||||
-rw-r--r-- | depends/launcher/org/multimc/NotFoundException.java | 21 | ||||
-rw-r--r-- | depends/launcher/org/multimc/ParamBucket.java | 86 | ||||
-rw-r--r-- | depends/launcher/org/multimc/ParseException.java | 22 | ||||
-rw-r--r-- | depends/launcher/org/multimc/Utils.java | 179 | ||||
-rw-r--r-- | depends/launcher/org/multimc/legacy/LegacyFrame.java (renamed from depends/launcher/MCFrame.java) | 58 | ||||
-rw-r--r-- | depends/launcher/org/multimc/legacy/LegacyLauncher.java | 178 | ||||
-rw-r--r-- | depends/launcher/org/multimc/onesix/OneSixLauncher.java | 210 | ||||
-rw-r--r-- | generated.qrc.in | 8 | ||||
-rw-r--r-- | graphics.qrc | 51 | ||||
-rw-r--r-- | gui/ConsoleWindow.cpp | 7 | ||||
-rw-r--r-- | gui/MainWindow.cpp | 98 | ||||
-rw-r--r-- | gui/MainWindow.h | 11 | ||||
-rw-r--r-- | gui/MainWindow.ui | 43 | ||||
-rw-r--r-- | gui/dialogs/AboutDialog.cpp | 2 | ||||
-rw-r--r-- | gui/dialogs/AboutDialog.ui | 55 | ||||
-rw-r--r-- | gui/dialogs/InstanceSettings.ui | 18 | ||||
-rw-r--r-- | gui/dialogs/ModEditDialogCommon.cpp | 4 | ||||
-rw-r--r-- | gui/dialogs/SettingsDialog.cpp | 20 | ||||
-rw-r--r-- | gui/dialogs/SettingsDialog.ui | 504 | ||||
-rw-r--r-- | logic/BaseInstance.cpp | 13 | ||||
-rw-r--r-- | logic/BaseInstance.h | 7 | ||||
-rw-r--r-- | logic/BaseVersion.h | 9 | ||||
-rw-r--r-- | logic/JavaChecker.cpp | 13 | ||||
-rw-r--r-- | logic/LegacyFTBInstance.cpp | 5 | ||||
-rw-r--r-- | logic/LegacyFTBInstance.h | 1 | ||||
-rw-r--r-- | logic/LegacyInstance.cpp | 57 | ||||
-rw-r--r-- | logic/MinecraftProcess.cpp | 256 | ||||
-rw-r--r-- | logic/MinecraftProcess.h | 32 | ||||
-rw-r--r-- | logic/NagUtils.cpp | 18 | ||||
-rw-r--r-- | logic/OneSixFTBInstance.cpp | 5 | ||||
-rw-r--r-- | logic/OneSixFTBInstance.h | 2 | ||||
-rw-r--r-- | logic/OneSixInstance.cpp | 121 | ||||
-rw-r--r-- | logic/OneSixLibrary.cpp | 87 | ||||
-rw-r--r-- | logic/OneSixLibrary.h | 3 | ||||
-rw-r--r-- | logic/OneSixUpdate.cpp | 151 | ||||
-rw-r--r-- | logic/OneSixUpdate.h | 8 | ||||
-rw-r--r-- | logic/SkinUtils.h | 2 | ||||
-rw-r--r-- | logic/auth/MojangAccount.cpp | 6 | ||||
-rw-r--r-- | logic/icons/IconList.cpp | 17 | ||||
-rw-r--r-- | logic/icons/IconList.h | 1 | ||||
-rw-r--r-- | logic/lists/ForgeVersionList.cpp | 12 | ||||
-rw-r--r-- | logic/lists/ForgeVersionList.h | 21 | ||||
-rw-r--r-- | logic/lists/InstanceList.cpp | 73 | ||||
-rw-r--r-- | logic/net/CacheDownload.cpp | 125 | ||||
-rw-r--r-- | logic/net/CacheDownload.h | 15 | ||||
-rw-r--r-- | logic/net/URLConstants.h | 2 | ||||
-rw-r--r-- | logic/status/StatusChecker.cpp | 137 | ||||
-rw-r--r-- | logic/status/StatusChecker.h | 57 | ||||
-rw-r--r-- | logic/updater/NotificationChecker.cpp | 2 | ||||
-rw-r--r-- | logic/updater/UpdateChecker.cpp | 1 | ||||
-rw-r--r-- | logic/updater/UpdateChecker.h | 2 | ||||
-rw-r--r-- | main.cpp | 6 | ||||
-rw-r--r-- | resources/MultiMC.icns (renamed from MultiMC.icns) | bin | 177400 -> 177400 bytes | |||
-rw-r--r-- | resources/MultiMC.ico (renamed from resources/icons/MultiMC.ico) | bin | 76126 -> 76126 bytes | |||
-rw-r--r-- | resources/MultiMC.manifest (renamed from MultiMC.manifest) | 0 | ||||
-rw-r--r-- | resources/XdgIcon.theme | 12 | ||||
-rw-r--r-- | resources/backgrounds/backgrounds.qrc | 6 | ||||
-rw-r--r-- | resources/backgrounds/catbgrnd2.png (renamed from resources/catbgrnd2.png) | bin | 78285 -> 78285 bytes | |||
-rw-r--r-- | resources/icons/toolbar/Cat.png | bin | 811 -> 0 bytes | |||
-rw-r--r-- | resources/icons/toolbar/InstCopy.png | bin | 297 -> 0 bytes | |||
-rw-r--r-- | resources/icons/toolbar/refresh.png | bin | 1843 -> 0 bytes | |||
-rw-r--r-- | resources/instances/brick.png (renamed from resources/icons/instances/brick.png) | bin | 713 -> 713 bytes | |||
-rw-r--r-- | resources/instances/chicken.png (renamed from resources/icons/instances/chicken.png) | bin | 1181 -> 1181 bytes | |||
-rw-r--r-- | resources/instances/chicken128.png (renamed from resources/icons/instances/chicken128.png) | bin | 6369 -> 6369 bytes | |||
-rw-r--r-- | resources/instances/creeper.png (renamed from resources/icons/instances/creeper.png) | bin | 1524 -> 1524 bytes | |||
-rw-r--r-- | resources/instances/creeper128.png (renamed from resources/icons/instances/creeper128.png) | bin | 9046 -> 9046 bytes | |||
-rw-r--r-- | resources/instances/derp.png (renamed from resources/icons/instances/derp.png) | bin | 5225 -> 5225 bytes | |||
-rw-r--r-- | resources/instances/diamond.png (renamed from resources/icons/instances/diamond.png) | bin | 708 -> 708 bytes | |||
-rw-r--r-- | resources/instances/dirt.png (renamed from resources/icons/instances/dirt.png) | bin | 482 -> 482 bytes | |||
-rw-r--r-- | resources/instances/enderman.png (renamed from resources/icons/instances/enderman.png) | bin | 2429 -> 2429 bytes | |||
-rw-r--r-- | resources/instances/enderpearl.png (renamed from resources/icons/instances/enderpearl.png) | bin | 2120 -> 2120 bytes | |||
-rw-r--r-- | resources/instances/enderpearl128.png (renamed from resources/icons/instances/enderpearl128.png) | bin | 21425 -> 21425 bytes | |||
-rw-r--r-- | resources/instances/ftb_glow.png (renamed from resources/icons/instances/ftb_glow.png) | bin | 1747 -> 1747 bytes | |||
-rw-r--r-- | resources/instances/ftb_glow128.png (renamed from resources/icons/instances/ftb_glow128.png) | bin | 12708 -> 12708 bytes | |||
-rw-r--r-- | resources/instances/ftb_logo.png (renamed from resources/icons/instances/ftb_logo.png) | bin | 1607 -> 1607 bytes | |||
-rw-r--r-- | resources/instances/ftb_logo128.png (renamed from resources/icons/instances/ftb_logo128.png) | bin | 7883 -> 7883 bytes | |||
-rw-r--r-- | resources/instances/gear.png (renamed from resources/icons/instances/gear.png) | bin | 2414 -> 2414 bytes | |||
-rw-r--r-- | resources/instances/gear128.png (renamed from resources/icons/instances/gear128.png) | bin | 18321 -> 18321 bytes | |||
-rw-r--r-- | resources/instances/gold.png (renamed from resources/icons/instances/gold.png) | bin | 978 -> 978 bytes | |||
-rw-r--r-- | resources/instances/grass.png (renamed from resources/icons/instances/grass.png) | bin | 618 -> 618 bytes | |||
-rw-r--r-- | resources/instances/herobrine.png (renamed from resources/icons/instances/herobrine.png) | bin | 1034 -> 1034 bytes | |||
-rw-r--r-- | resources/instances/herobrine128.png (renamed from resources/icons/instances/herobrine128.png) | bin | 4937 -> 4937 bytes | |||
-rw-r--r-- | resources/instances/infinity.png (renamed from resources/icons/instances/infinity.png) | bin | 1714 -> 1714 bytes | |||
-rw-r--r-- | resources/instances/infinity128.png (renamed from resources/icons/instances/infinity128.png) | bin | 9237 -> 9237 bytes | |||
-rw-r--r-- | resources/instances/instances.qrc | 35 | ||||
-rw-r--r-- | resources/instances/iron.png (renamed from resources/icons/instances/iron.png) | bin | 532 -> 532 bytes | |||
-rw-r--r-- | resources/instances/magitech.png (renamed from resources/icons/instances/magitech.png) | bin | 2646 -> 2646 bytes | |||
-rw-r--r-- | resources/instances/magitech128.png (renamed from resources/icons/instances/magitech128.png) | bin | 23097 -> 23097 bytes | |||
-rw-r--r-- | resources/instances/meat.png (renamed from resources/icons/instances/meat.png) | bin | 1514 -> 1514 bytes | |||
-rw-r--r-- | resources/instances/meat128.png (renamed from resources/icons/instances/meat128.png) | bin | 10583 -> 10583 bytes | |||
-rw-r--r-- | resources/instances/netherstar.png (renamed from resources/icons/instances/netherstar.png) | bin | 1942 -> 1942 bytes | |||
-rw-r--r-- | resources/instances/netherstar128.png (renamed from resources/icons/instances/netherstar128.png) | bin | 14062 -> 14062 bytes | |||
-rw-r--r-- | resources/instances/planks.png (renamed from resources/icons/instances/planks.png) | bin | 461 -> 461 bytes | |||
-rw-r--r-- | resources/instances/skeleton.png (renamed from resources/icons/instances/skeleton.png) | bin | 696 -> 696 bytes | |||
-rw-r--r-- | resources/instances/skeleton128.png (renamed from resources/icons/instances/skeleton128.png) | bin | 3673 -> 3673 bytes | |||
-rw-r--r-- | resources/instances/squarecreeper.png (renamed from resources/icons/instances/squarecreeper.png) | bin | 1623 -> 1623 bytes | |||
-rw-r--r-- | resources/instances/squarecreeper128.png (renamed from resources/icons/instances/squarecreeper128.png) | bin | 9136 -> 9136 bytes | |||
-rw-r--r-- | resources/instances/steve.png (renamed from resources/icons/instances/steve.png) | bin | 969 -> 969 bytes | |||
-rw-r--r-- | resources/instances/steve128.png (renamed from resources/icons/instances/steve128.png) | bin | 4312 -> 4312 bytes | |||
-rw-r--r-- | resources/instances/stone.png (renamed from resources/icons/instances/stone.png) | bin | 438 -> 438 bytes | |||
-rw-r--r-- | resources/instances/tnt.png (renamed from resources/icons/instances/tnt.png) | bin | 378 -> 378 bytes | |||
-rw-r--r-- | resources/multimc.rc (renamed from multimc.rc) | 2 | ||||
-rw-r--r-- | resources/multimc/16x16/about.png | bin | 0 -> 1270 bytes | |||
-rw-r--r-- | resources/multimc/16x16/bug.png | bin | 0 -> 734 bytes | |||
-rw-r--r-- | resources/multimc/16x16/cat.png | bin | 0 -> 736 bytes | |||
-rw-r--r-- | resources/multimc/16x16/centralmods.png | bin | 0 -> 1145 bytes | |||
-rw-r--r-- | resources/multimc/16x16/checkupdate.png | bin | 0 -> 1212 bytes | |||
-rw-r--r-- | resources/multimc/16x16/copy.png | bin | 0 -> 957 bytes | |||
-rw-r--r-- | resources/multimc/16x16/help.png | bin | 0 -> 1297 bytes | |||
-rw-r--r-- | resources/multimc/16x16/new.png | bin | 0 -> 1175 bytes | |||
-rw-r--r-- | resources/multimc/16x16/news.png | bin | 0 -> 727 bytes | |||
-rw-r--r-- | resources/multimc/16x16/noaccount.png | bin | 0 -> 334 bytes | |||
-rw-r--r-- | resources/multimc/16x16/refresh.png | bin | 0 -> 931 bytes | |||
-rw-r--r-- | resources/multimc/16x16/settings.png | bin | 0 -> 1410 bytes | |||
-rw-r--r-- | resources/multimc/16x16/viewfolder.png | bin | 0 -> 852 bytes | |||
-rw-r--r-- | resources/multimc/22x22/about.png (renamed from resources/icons/toolbar/about.png) | bin | 1693 -> 1693 bytes | |||
-rw-r--r-- | resources/multimc/22x22/bug.png (renamed from resources/icons/toolbar/ReportBug.png) | bin | 1180 -> 1180 bytes | |||
-rw-r--r-- | resources/multimc/22x22/cat.png | bin | 0 -> 1034 bytes | |||
-rw-r--r-- | resources/multimc/22x22/centralmods.png (renamed from resources/icons/toolbar/centralmods.png) | bin | 1561 -> 1561 bytes | |||
-rw-r--r-- | resources/multimc/22x22/checkupdate.png (renamed from resources/icons/toolbar/checkupdate.png) | bin | 1635 -> 1635 bytes | |||
-rw-r--r-- | resources/multimc/22x22/copy.png | bin | 0 -> 1004 bytes | |||
-rw-r--r-- | resources/multimc/22x22/help.png (renamed from resources/icons/toolbar/help.png) | bin | 1735 -> 1735 bytes | |||
-rw-r--r-- | resources/multimc/22x22/new.png (renamed from resources/icons/toolbar/new.png) | bin | 1440 -> 1440 bytes | |||
-rw-r--r-- | resources/multimc/22x22/news.png (renamed from resources/icons/toolbar/NewsIcon.png) | bin | 1173 -> 1173 bytes | |||
-rw-r--r-- | resources/multimc/22x22/refresh.png | bin | 0 -> 1283 bytes | |||
-rw-r--r-- | resources/multimc/22x22/settings.png (renamed from resources/icons/toolbar/settings.png) | bin | 1964 -> 1964 bytes | |||
-rw-r--r-- | resources/multimc/22x22/viewfolder.png (renamed from resources/icons/toolbar/viewfolder.png) | bin | 1006 -> 1006 bytes | |||
-rw-r--r-- | resources/multimc/24x24/cat.png | bin | 0 -> 1252 bytes | |||
-rw-r--r-- | resources/multimc/24x24/noaccount.png | bin | 0 -> 344 bytes | |||
-rw-r--r-- | resources/multimc/32x32/about.png | bin | 0 -> 2658 bytes | |||
-rw-r--r-- | resources/multimc/32x32/bug.png | bin | 0 -> 1772 bytes | |||
-rw-r--r-- | resources/multimc/32x32/cat.png | bin | 0 -> 1678 bytes | |||
-rw-r--r-- | resources/multimc/32x32/centralmods.png | bin | 0 -> 2119 bytes | |||
-rw-r--r-- | resources/multimc/32x32/checkupdate.png | bin | 0 -> 2480 bytes | |||
-rw-r--r-- | resources/multimc/32x32/copy.png | bin | 0 -> 1401 bytes | |||
-rw-r--r-- | resources/multimc/32x32/help.png | bin | 0 -> 2720 bytes | |||
-rw-r--r-- | resources/multimc/32x32/new.png | bin | 0 -> 1769 bytes | |||
-rw-r--r-- | resources/multimc/32x32/news.png | bin | 0 -> 1752 bytes | |||
-rw-r--r-- | resources/multimc/32x32/noaccount.png | bin | 0 -> 363 bytes | |||
-rw-r--r-- | resources/multimc/32x32/refresh.png | bin | 0 -> 2182 bytes | |||
-rw-r--r-- | resources/multimc/32x32/settings.png | bin | 0 -> 2983 bytes | |||
-rw-r--r-- | resources/multimc/32x32/viewfolder.png | bin | 0 -> 1518 bytes | |||
-rw-r--r-- | resources/multimc/48x48/about.png | bin | 0 -> 3995 bytes | |||
-rw-r--r-- | resources/multimc/48x48/bug.png | bin | 0 -> 3124 bytes | |||
-rw-r--r-- | resources/multimc/48x48/cat.png | bin | 0 -> 2733 bytes | |||
-rw-r--r-- | resources/multimc/48x48/centralmods.png | bin | 0 -> 3201 bytes | |||
-rw-r--r-- | resources/multimc/48x48/checkupdate.png | bin | 0 -> 4196 bytes | |||
-rw-r--r-- | resources/multimc/48x48/copy.png | bin | 0 -> 1952 bytes | |||
-rw-r--r-- | resources/multimc/48x48/help.png | bin | 0 -> 4170 bytes | |||
-rw-r--r-- | resources/multimc/48x48/new.png | bin | 0 -> 2870 bytes | |||
-rw-r--r-- | resources/multimc/48x48/news.png | bin | 0 -> 3333 bytes | |||
-rw-r--r-- | resources/multimc/48x48/noaccount.png | bin | 0 -> 387 bytes | |||
-rw-r--r-- | resources/multimc/48x48/refresh.png | bin | 0 -> 3743 bytes | |||
-rw-r--r-- | resources/multimc/48x48/settings.png | bin | 0 -> 4797 bytes | |||
-rw-r--r-- | resources/multimc/48x48/viewfolder.png | bin | 0 -> 1945 bytes | |||
-rw-r--r-- | resources/multimc/64x64/about.png | bin | 0 -> 5513 bytes | |||
-rw-r--r-- | resources/multimc/64x64/bug.png | bin | 0 -> 4263 bytes | |||
-rw-r--r-- | resources/multimc/64x64/cat.png | bin | 0 -> 4033 bytes | |||
-rw-r--r-- | resources/multimc/64x64/centralmods.png | bin | 0 -> 4408 bytes | |||
-rw-r--r-- | resources/multimc/64x64/checkupdate.png | bin | 0 -> 5858 bytes | |||
-rw-r--r-- | resources/multimc/64x64/copy.png | bin | 0 -> 2884 bytes | |||
-rw-r--r-- | resources/multimc/64x64/help.png | bin | 0 -> 5402 bytes | |||
-rw-r--r-- | resources/multimc/64x64/new.png | bin | 0 -> 3949 bytes | |||
-rw-r--r-- | resources/multimc/64x64/news.png | bin | 0 -> 4968 bytes | |||
-rw-r--r-- | resources/multimc/64x64/refresh.png | bin | 0 -> 5745 bytes | |||
-rw-r--r-- | resources/multimc/64x64/settings.png | bin | 0 -> 7125 bytes | |||
-rw-r--r-- | resources/multimc/64x64/viewfolder.png | bin | 0 -> 2134 bytes | |||
-rw-r--r-- | resources/multimc/8x8/noaccount.png (renamed from resources/icons/toolbar/NoAccount.png) | bin | 284 -> 284 bytes | |||
-rw-r--r-- | resources/multimc/index.theme | 33 | ||||
-rw-r--r-- | resources/multimc/multimc.qrc | 111 | ||||
-rw-r--r-- | resources/multimc/scalable/apps/multimc.svg (renamed from resources/icons/multimc.svg) | 0 | ||||
-rw-r--r-- | resources/multimc/scalable/bug.svg (renamed from resources/icons/toolbar_svg/bug.svg) | 28 | ||||
-rw-r--r-- | resources/multimc/scalable/centralmods.svg | 346 | ||||
-rw-r--r-- | resources/multimc/scalable/checkupdate.svg | 167 | ||||
-rw-r--r-- | resources/multimc/scalable/console.svg (renamed from resources/icons/console.svg) | 0 | ||||
-rw-r--r-- | resources/multimc/scalable/console_error.svg (renamed from resources/icons/console_error.svg) | 0 | ||||
-rw-r--r-- | resources/multimc/scalable/new.svg | 127 | ||||
-rw-r--r-- | resources/multimc/scalable/news.svg (renamed from resources/icons/toolbar_svg/news.svg) | 0 | ||||
-rw-r--r-- | resources/multimc/scalable/viewfolder.svg | 122 | ||||
-rw-r--r-- | resources/sources/clucker.svg (renamed from resources/icons/instances_svg/clucker.svg) | 0 | ||||
-rw-r--r-- | resources/sources/creeper.svg (renamed from resources/icons/instances_svg/creeper.svg) | 0 | ||||
-rw-r--r-- | resources/sources/enderpearl.svg (renamed from resources/icons/instances_svg/enderpearl.svg) | 0 | ||||
-rw-r--r-- | resources/sources/ftb-glow.svg (renamed from resources/icons/instances_svg/ftb-glow.svg) | 0 | ||||
-rw-r--r-- | resources/sources/ftb-logo.svg (renamed from resources/icons/instances_svg/ftb-logo.svg) | 0 | ||||
-rw-r--r-- | resources/sources/gear.svg (renamed from resources/icons/instances_svg/gear.svg) | 0 | ||||
-rw-r--r-- | resources/sources/herobrine.svg (renamed from resources/icons/instances_svg/herobrine.svg) | 0 | ||||
-rw-r--r-- | resources/sources/magitech.svg (renamed from resources/icons/instances_svg/magitech.svg) | 0 | ||||
-rw-r--r-- | resources/sources/meat.svg (renamed from resources/icons/instances_svg/meat.svg) | 0 | ||||
-rw-r--r-- | resources/sources/netherstar.svg (renamed from resources/icons/instances_svg/netherstar.svg) | 0 | ||||
-rw-r--r-- | resources/sources/pskeleton.svg (renamed from resources/icons/instances_svg/pskeleton.svg) | 0 | ||||
-rw-r--r-- | resources/sources/skeleton.svg (renamed from resources/icons/instances_svg/skeleton.svg) | 0 | ||||
-rw-r--r-- | resources/sources/squarecreeper.svg (renamed from resources/icons/instances_svg/squarecreeper.svg) | 0 | ||||
-rw-r--r-- | resources/sources/status-bad.svg | 262 | ||||
-rw-r--r-- | resources/sources/status-good.svg | 293 | ||||
-rw-r--r-- | resources/sources/status-terrible.svg | 262 | ||||
-rw-r--r-- | resources/sources/steve.svg (renamed from resources/icons/instances_svg/steve.svg) | 0 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 24 | ||||
-rw-r--r-- | tests/TestUtil.h | 2 | ||||
-rw-r--r-- | tests/data/1.json | 6 | ||||
-rw-r--r-- | tests/data/2.json | 4 | ||||
-rw-r--r-- | tests/data/channels.json | 4 | ||||
-rw-r--r-- | tests/test_config.h.in | 3 | ||||
-rw-r--r-- | tests/tst_UpdateChecker.cpp | 35 | ||||
-rw-r--r-- | translations/mmc_de.ts | 1888 |
217 files changed, 5835 insertions, 1590 deletions
@@ -1,17 +1,23 @@ Thumbs.db .kdev4 -MultiMC5.kdev4 -MultiMC.pro.user -CMakeLists.txt.user .user .directory -build resources/CMakeFiles resources/MultiMCLauncher.jar *~ *.swp html/ +# Project Files +MultiMC5.kdev4 +MultiMC.pro.user +CMakeLists.txt.user +CMakeLists.txt.user.* + +# Build dirs +build +/build-* + # Ctags File tags diff --git a/CMakeLists.txt b/CMakeLists.txt index 425ddf5f..0b276cf8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,8 @@ IF(UNIX) SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) ENDIF() +set(CMAKE_JAVA_TARGET_OUTPUT_DIR ${PROJECT_BINARY_DIR}/jars) + ######## Set compiler flags ######## IF(APPLE) message(STATUS "Using APPLE CMAKE_CXX_FLAGS") @@ -90,8 +92,8 @@ SET(MultiMC_NEWS_RSS_URL "http://multimc.org/rss.xml" CACHE STRING "URL to fetch ######## Set version numbers ######## SET(MultiMC_VERSION_MAJOR 0) -SET(MultiMC_VERSION_MINOR 1) -SET(MultiMC_VERSION_HOTFIX 1) +SET(MultiMC_VERSION_MINOR 2) +SET(MultiMC_VERSION_HOTFIX 0) # Build number SET(MultiMC_VERSION_BUILD -1 CACHE STRING "Build number. -1 for no build number.") @@ -280,7 +282,6 @@ gui/dialogs/SettingsDialog.h gui/dialogs/SettingsDialog.cpp gui/dialogs/CopyInstanceDialog.h gui/dialogs/CopyInstanceDialog.cpp -gui/dialogs/dialogs/ gui/dialogs/NewInstanceDialog.cpp gui/dialogs/ProgressDialog.h gui/dialogs/ProgressDialog.cpp @@ -391,6 +392,10 @@ logic/news/NewsChecker.cpp logic/news/NewsEntry.h logic/news/NewsEntry.cpp +# Status system +logic/status/StatusChecker.h +logic/status/StatusChecker.cpp + # legacy instances logic/LegacyInstance.h logic/LegacyInstance.cpp @@ -514,10 +519,16 @@ gui/widgets/MCModInfoFrame.ui set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${MULTIMC_SOURCES} ${MULTIMC_UIS}) +SET(MULTIMC_QRCS +resources/backgrounds/backgrounds.qrc +resources/multimc/multimc.qrc +resources/instances/instances.qrc +) + ######## Windows resource files ######## IF(WIN32) -SET(MULTIMC_RCS multimc.rc) +SET(MULTIMC_RCS resources/multimc.rc) ENDIF() ####### X11 Stuff ####### @@ -532,13 +543,6 @@ ENDIF() ################################ COMPILE ################################ -# ICNS file for OS X -IF(APPLE) - SET(MACOSX_BUNDLE_ICON_FILE MultiMC.icns) - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/MultiMC.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources) - SET(MULTIMC_SOURCES ${MULTIMC_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/MultiMC.icns) -ENDIF(APPLE) - # Link additional libraries IF(WIN32) SET(MultiMC_LINK_ADDITIONAL_LIBS ${MultiMC_LINK_ADDITIONAL_LIBS} @@ -564,12 +568,10 @@ ENDIF(MultiMC_CODE_COVERAGE) # Qt 5 stuff QT5_WRAP_UI(MULTIMC_UI ${MULTIMC_UIS}) -CONFIGURE_FILE(generated.qrc.in generated.qrc) -QT5_ADD_RESOURCES(GENERATED_QRC ${CMAKE_CURRENT_BINARY_DIR}/generated.qrc) -QT5_ADD_RESOURCES(GRAPHICS_QRC graphics.qrc) +QT5_ADD_RESOURCES(MULTIMC_RESOURCES ${MULTIMC_QRCS}) # Add common library -ADD_LIBRARY(MultiMC_common STATIC ${MULTIMC_SOURCES} ${MULTIMC_UI} ${GENERATED_QRC} ${GRAPHICS_QRC}) +ADD_LIBRARY(MultiMC_common STATIC ${MULTIMC_SOURCES} ${MULTIMC_UI} ${MULTIMC_RESOURCES}) # Add executable ADD_EXECUTABLE(MultiMC MACOSX_BUNDLE WIN32 main.cpp ${MULTIMC_RCS}) @@ -579,7 +581,6 @@ TARGET_LINK_LIBRARIES(MultiMC MultiMC_common) TARGET_LINK_LIBRARIES(MultiMC_common xz-embedded unpack200 quazip libUtil libSettings libGroupView ${MultiMC_LINK_ADDITIONAL_LIBS}) QT5_USE_MODULES(MultiMC Core Widgets Network Xml Concurrent ${MultiMC_QT_ADDITIONAL_MODULES}) QT5_USE_MODULES(MultiMC_common Core Widgets Network Xml Concurrent ${MultiMC_QT_ADDITIONAL_MODULES}) -ADD_DEPENDENCIES(MultiMC_common MultiMCLauncher JavaCheck) ################################ INSTALLATION AND PACKAGING ################################ @@ -667,6 +668,11 @@ FILE(WRITE \"\${CMAKE_INSTALL_PREFIX}/${QTCONF_DEST_DIR}/qt.conf\" \"\") COMPONENT Runtime ) +# ICNS file for OS X +IF(APPLE) + INSTALL(FILES resources/MultiMC.icns DESTINATION MultiMC.app/Contents/Resources) +ENDIF() + CONFIGURE_FILE( "${CMAKE_CURRENT_SOURCE_DIR}/install_prereqs.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/install_prereqs.cmake" diff --git a/MultiMC.cpp b/MultiMC.cpp index 17fc2e0a..e4a30f22 100644 --- a/MultiMC.cpp +++ b/MultiMC.cpp @@ -20,8 +20,11 @@ #include "logic/news/NewsChecker.h" +#include "logic/status/StatusChecker.h" + #include "logic/InstanceLauncher.h" #include "logic/net/HttpMetaCache.h" +#include "logic/net/URLConstants.h" #include "logic/JavaUtils.h" @@ -44,8 +47,6 @@ MultiMC::MultiMC(int &argc, char **argv, bool root_override) setOrganizationName("MultiMC"); setApplicationName("MultiMC5"); - initTranslations(); - setAttribute(Qt::AA_UseHighDpiPixmaps); // Don't quit on hiding the last window this->setQuitOnLastWindowClosed(false); @@ -172,6 +173,9 @@ MultiMC::MultiMC(int &argc, char **argv, bool root_override) // load settings initGlobalSettings(); + // load translations + initTranslations(); + // initialize the updater m_updateChecker.reset(new UpdateChecker()); @@ -181,6 +185,9 @@ MultiMC::MultiMC(int &argc, char **argv, bool root_override) // initialize the news checker m_newsChecker.reset(new NewsChecker(NEWS_RSS_URL)); + // initialize the status checker + m_statusChecker.reset(new StatusChecker()); + // and instances auto InstDirSetting = m_settings->getSetting("InstanceDir"); m_instances.reset(new InstanceList(InstDirSetting->get().toString(), this)); @@ -234,18 +241,20 @@ MultiMC::~MultiMC() void MultiMC::initTranslations() { + QLocale locale(m_settings->get("Language").toString()); + QLocale::setDefault(locale); + QLOG_INFO() << "Your language is" << locale.bcp47Name(); m_qt_translator.reset(new QTranslator()); - if (m_qt_translator->load("qt_" + QLocale::system().name(), + if (m_qt_translator->load("qt_" + locale.bcp47Name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { - std::cout << "Loading Qt Language File for " - << QLocale::system().name().toLocal8Bit().constData() << "..."; + QLOG_DEBUG() << "Loading Qt Language File for" + << locale.bcp47Name().toLocal8Bit().constData() << "..."; if (!installTranslator(m_qt_translator.get())) { - std::cout << " failed."; + QLOG_ERROR() << "Loading Qt Language File failed."; m_qt_translator.reset(); } - std::cout << std::endl; } else { @@ -253,17 +262,15 @@ void MultiMC::initTranslations() } m_mmc_translator.reset(new QTranslator()); - if (m_mmc_translator->load("mmc_" + QLocale::system().name(), - QDir("translations").absolutePath())) + if (m_mmc_translator->load("mmc_" + locale.bcp47Name(), MMC->root() + "/translations")) { - std::cout << "Loading MMC Language File for " - << QLocale::system().name().toLocal8Bit().constData() << "..."; + QLOG_DEBUG() << "Loading MMC Language File for" + << locale.bcp47Name().toLocal8Bit().constData() << "..."; if (!installTranslator(m_mmc_translator.get())) { - std::cout << " failed."; + QLOG_ERROR() << "Loading MMC Language File failed."; m_mmc_translator.reset(); } - std::cout << std::endl; } else { @@ -366,9 +373,13 @@ void MultiMC::initGlobalSettings() // Editors m_settings->registerSetting("JsonEditor", QString()); + // Language + m_settings->registerSetting("Language", QLocale(QLocale::system().language()).bcp47Name()); + // Console m_settings->registerSetting("ShowConsole", true); m_settings->registerSetting("AutoCloseConsole", true); + m_settings->registerSetting("LogPrePostOutput", true); // Console Colors // m_settings->registerSetting("SysMessageColor", QColor(Qt::blue)); @@ -21,6 +21,7 @@ class JavaVersionList; class UpdateChecker; class NotificationChecker; class NewsChecker; +class StatusChecker; #if defined(MMC) #undef MMC @@ -113,6 +114,11 @@ public: return m_newsChecker; } + std::shared_ptr<StatusChecker> statusChecker() + { + return m_statusChecker; + } + std::shared_ptr<LWJGLVersionList> lwjgllist(); std::shared_ptr<ForgeVersionList> forgelist(); @@ -183,6 +189,7 @@ private: std::shared_ptr<UpdateChecker> m_updateChecker; std::shared_ptr<NotificationChecker> m_notificationChecker; std::shared_ptr<NewsChecker> m_newsChecker; + std::shared_ptr<StatusChecker> m_statusChecker; std::shared_ptr<MojangAccountList> m_accounts; std::shared_ptr<IconList> m_icons; std::shared_ptr<QNetworkAccessManager> m_qnam; diff --git a/changelog.yaml b/changelog.yaml index 82dccd69..01e11f52 100644 --- a/changelog.yaml +++ b/changelog.yaml @@ -16,4 +16,16 @@ - Added additional information to the about dialog. 0.1.1: - Hotfix - Changed the issue tracker URL to [GitHub issues](https://github.com/MultiMC/MultiMC5/issues). - +0.2: + - Java memory settings have MB added to the number to make the units obvious. + - Complete rework of the launcher part. No more sensitive information in the process arguments. + - Cached downloads now do not destroy files on failure. + - Mojang service status is now on the MultiMC status bar. + - Java checker is no longer needed/used on instance launch. + - Support for private FTB packs. + - Fixed instance ID issues related to copying FTB packs without changing the instance name. + - Forge versions are better sorted (build numbers above 999 were sorted wrong). + - Fixed crash related to the MultiMC update channel picker in offline mode. + - Started using icon themes for the application icons, fixing many OSX graphical glitches. + - Icon sources have been located, along with icon licenses. + - Update to the German translation. diff --git a/depends/javacheck/.gitignore b/depends/javacheck/.gitignore new file mode 100644 index 00000000..cc1c52bf --- /dev/null +++ b/depends/javacheck/.gitignore @@ -0,0 +1,6 @@ +.idea +*.iml +out +.classpath +.idea +.project diff --git a/depends/launcher/.gitignore b/depends/launcher/.gitignore new file mode 100644 index 00000000..cc1c52bf --- /dev/null +++ b/depends/launcher/.gitignore @@ -0,0 +1,6 @@ +.idea +*.iml +out +.classpath +.idea +.project diff --git a/depends/launcher/CMakeLists.txt b/depends/launcher/CMakeLists.txt index 729ebb67..6af5f738 100644 --- a/depends/launcher/CMakeLists.txt +++ b/depends/launcher/CMakeLists.txt @@ -3,20 +3,33 @@ project(launcher Java) find_package(Java 1.6 REQUIRED COMPONENTS Development) include(UseJava) -set(CMAKE_JAVA_JAR_ENTRY_POINT MultiMCLauncher) +set(CMAKE_JAVA_JAR_ENTRY_POINT org.multimc.EntryPoint) set(CMAKE_JAVA_COMPILE_FLAGS -target 1.6 -source 1.6 -Xlint:deprecation -Xlint:unchecked) set(SRC - MultiMCLauncher.java + # OSX things org/simplericity/macify/eawt/Application.java org/simplericity/macify/eawt/ApplicationAdapter.java org/simplericity/macify/eawt/ApplicationEvent.java org/simplericity/macify/eawt/ApplicationListener.java org/simplericity/macify/eawt/DefaultApplication.java + + # legacy applet wrapper thing. + # The launcher has to be there for silly FML/Forge relauncher. net/minecraft/Launcher.java - MCFrame.java -) + org/multimc/legacy/LegacyLauncher.java + org/multimc/legacy/LegacyFrame.java -add_jar(MultiMCLauncher ${SRC}) + # onesix launcher + org/multimc/onesix/OneSixLauncher.java + + # generic launcher + org/multimc/EntryPoint.java + org/multimc/Launcher.java + org/multimc/ParseException.java + org/multimc/Utils.java + org/multimc/IconLoader.java +) +add_jar(NewLaunch ${SRC}) -INSTALL_JAR(MultiMCLauncher "${BINARY_DEST_DIR}/jars") +INSTALL_JAR(NewLaunch "${BINARY_DEST_DIR}/jars") diff --git a/depends/launcher/MultiMCLauncher.java b/depends/launcher/MultiMCLauncher.java deleted file mode 100644 index 09a019ce..00000000 --- a/depends/launcher/MultiMCLauncher.java +++ /dev/null @@ -1,331 +0,0 @@ -// -// Copyright 2012 MultiMC Contributors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import java.applet.Applet; -import java.awt.Dimension; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Modifier; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.zip.ZipEntry; -import java.util.zip.ZipException; -import java.util.zip.ZipFile; - -import javax.imageio.ImageIO; -import java.awt.image.BufferedImage; -import org.simplericity.macify.eawt.Application; -import org.simplericity.macify.eawt.DefaultApplication; - -public class MultiMCLauncher -{ - /** - * @param args - * The arguments you want to launch Minecraft with. New path, - * Username, Session ID. - */ - public static void main(String[] args) - { - if (args.length < 3) - { - System.out.println("Not enough arguments."); - System.exit(-1); - } - - // Set the OSX application icon first, if we are on OSX. - Application application = new DefaultApplication(); - if(application.isMac()) - { - try - { - BufferedImage image = ImageIO.read(new File("icon.png")); - application.setApplicationIconImage(image); - } - catch (IOException e) - { - e.printStackTrace(); - } - } - - String userName = args[0]; - String sessionId = args[1]; - String windowtitle = args[2]; - String windowParams = args[3]; - String lwjgl = args[4]; - String cwd = System.getProperty("user.dir"); - - Dimension winSize = new Dimension(854, 480); - boolean maximize = false; - boolean compatMode = false; - - - String[] dimStrings = windowParams.split("x"); - - if (windowParams.equalsIgnoreCase("compatmode")) - { - compatMode = true; - } - else if (windowParams.equalsIgnoreCase("max")) - { - maximize = true; - } - else if (dimStrings.length == 2) - { - try - { - winSize = new Dimension(Integer.parseInt(dimStrings[0]), - Integer.parseInt(dimStrings[1])); - } - catch (NumberFormatException e) - { - System.out.println("Invalid Window size argument, " + - "using default."); - } - } - else - { - System.out.println("Invalid Window size argument, " + - "using default."); - } - - try - { - File binDir = new File(cwd, "bin"); - File lwjglDir; - if(lwjgl.equalsIgnoreCase("Mojang")) - lwjglDir = binDir; - else - lwjglDir = new File(lwjgl); - - System.out.println("Loading jars..."); - String[] lwjglJars = new String[] { - "lwjgl.jar", "lwjgl_util.jar", "jinput.jar" - }; - - URL[] urls = new URL[4]; - try - { - File f = new File(binDir, "minecraft.jar"); - urls[0] = f.toURI().toURL(); - System.out.println("Loading URL: " + urls[0].toString()); - - for (int i = 1; i < urls.length; i++) - { - File jar = new File(lwjglDir, lwjglJars[i-1]); - urls[i] = jar.toURI().toURL(); - System.out.println("Loading URL: " + urls[i].toString()); - } - } - catch (MalformedURLException e) - { - System.err.println("MalformedURLException, " + e.toString()); - System.exit(5); - } - - System.out.println("Loading natives..."); - String nativesDir = new File(lwjglDir, "natives").toString(); - - System.setProperty("org.lwjgl.librarypath", nativesDir); - System.setProperty("net.java.games.input.librarypath", nativesDir); - - URLClassLoader cl = - new URLClassLoader(urls, MultiMCLauncher.class.getClassLoader()); - - // Get the Minecraft Class. - Class<?> mc = null; - try - { - mc = cl.loadClass("net.minecraft.client.Minecraft"); - - Field f = getMCPathField(mc); - - if (f == null) - { - System.err.println("Could not find Minecraft path field. Launch failed."); - System.exit(-1); - } - - f.setAccessible(true); - f.set(null, new File(cwd)); - // And set it. - System.out.println("Fixed Minecraft Path: Field was " + f.toString()); - } - catch (ClassNotFoundException e) - { - System.err.println("Can't find main class. Searching..."); - - // Look for any class that looks like the main class. - File mcJar = new File(new File(cwd, "bin"), "minecraft.jar"); - ZipFile zip = null; - try - { - zip = new ZipFile(mcJar); - } catch (ZipException e1) - { - e1.printStackTrace(); - System.err.println("Search failed."); - System.exit(-1); - } catch (IOException e1) - { - e1.printStackTrace(); - System.err.println("Search failed."); - System.exit(-1); - } - - Enumeration<? extends ZipEntry> entries = zip.entries(); - ArrayList<String> classes = new ArrayList<String>(); - - while (entries.hasMoreElements()) - { - ZipEntry entry = entries.nextElement(); - if (entry.getName().endsWith(".class")) - { - String entryName = entry.getName().substring(0, entry.getName().lastIndexOf('.')); - entryName = entryName.replace('/', '.'); - System.out.println("Found class: " + entryName); - classes.add(entryName); - } - } - - for (String clsName : classes) - { - try - { - Class<?> cls = cl.loadClass(clsName); - if (!Runnable.class.isAssignableFrom(cls)) - { - continue; - } - else - { - System.out.println("Found class implementing runnable: " + - cls.getName()); - } - - if (getMCPathField(cls) == null) - { - continue; - } - else - { - System.out.println("Found class implementing runnable " + - "with mcpath field: " + cls.getName()); - } - - mc = cls; - break; - } - catch (ClassNotFoundException e1) - { - // Ignore - continue; - } - } - - if (mc == null) - { - System.err.println("Failed to find Minecraft main class."); - System.exit(-1); - } - else - { - System.out.println("Found main class: " + mc.getName()); - } - } - - System.setProperty("minecraft.applet.TargetDirectory", cwd); - - String[] mcArgs = new String[2]; - mcArgs[0] = userName; - mcArgs[1] = sessionId; - - if (compatMode) - { - System.out.println("Launching in compatibility mode..."); - mc.getMethod("main", String[].class).invoke(null, (Object) mcArgs); - } - else - { - System.out.println("Launching with applet wrapper..."); - try - { - Class<?> MCAppletClass = cl.loadClass( - "net.minecraft.client.MinecraftApplet"); - Applet mcappl = (Applet) MCAppletClass.newInstance(); - MCFrame mcWindow = new MCFrame(windowtitle); - mcWindow.start(mcappl, userName, sessionId, winSize, maximize); - } catch (InstantiationException e) - { - System.out.println("Applet wrapper failed! Falling back " + - "to compatibility mode."); - mc.getMethod("main", String[].class).invoke(null, (Object) mcArgs); - } - } - } catch (ClassNotFoundException e) - { - e.printStackTrace(); - System.exit(1); - } catch (IllegalArgumentException e) - { - e.printStackTrace(); - System.exit(2); - } catch (IllegalAccessException e) - { - e.printStackTrace(); - System.exit(2); - } catch (InvocationTargetException e) - { - e.printStackTrace(); - System.exit(3); - } catch (NoSuchMethodException e) - { - e.printStackTrace(); - System.exit(3); - } catch (SecurityException e) - { - e.printStackTrace(); - System.exit(4); - } - } - - public static Field getMCPathField(Class<?> mc) - { - Field[] fields = mc.getDeclaredFields(); - - for (int i = 0; i < fields.length; i++) - { - Field f = fields[i]; - if (f.getType() != File.class) - { - // Has to be File - continue; - } - if (f.getModifiers() != (Modifier.PRIVATE + Modifier.STATIC)) - { - // And Private Static. - continue; - } - return f; - } - return null; - } -} diff --git a/depends/launcher/net/minecraft/Launcher.java b/depends/launcher/net/minecraft/Launcher.java index 8cef35ad..c9b137e1 100644 --- a/depends/launcher/net/minecraft/Launcher.java +++ b/depends/launcher/net/minecraft/Launcher.java @@ -1,18 +1,18 @@ -// -// Copyright 2012 MultiMC Contributors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// +/* + * Copyright 2012-2014 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package net.minecraft; @@ -38,7 +38,7 @@ public class Launcher extends Applet implements AppletStub this.setLayout(new BorderLayout()); this.add(applet, "Center"); - this.wrappedApplet = applet; + this.wrappedApplet = applet; this.documentBase = documentBase; } @@ -46,17 +46,17 @@ public class Launcher extends Applet implements AppletStub { params.put(name, value); } - + public void replace(Applet applet) { this.wrappedApplet = applet; - + applet.setStub(this); applet.setSize(getWidth(), getHeight()); - + this.setLayout(new BorderLayout()); this.add(applet, "Center"); - + applet.init(); active = true; applet.start(); @@ -99,7 +99,7 @@ public class Launcher extends Applet implements AppletStub { wrappedApplet.resize(d); } - + @Override public void init() { @@ -127,7 +127,7 @@ public class Launcher extends Applet implements AppletStub { wrappedApplet.destroy(); } - + @Override public URL getCodeBase() { return wrappedApplet.getCodeBase(); diff --git a/depends/launcher/org/multimc/EntryPoint.java b/depends/launcher/org/multimc/EntryPoint.java new file mode 100644 index 00000000..83f232f1 --- /dev/null +++ b/depends/launcher/org/multimc/EntryPoint.java @@ -0,0 +1,135 @@ +package org.multimc;/* + * Copyright 2012-2014 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import org.multimc.legacy.LegacyLauncher; +import org.multimc.onesix.OneSixLauncher; +import org.simplericity.macify.eawt.Application; +import org.simplericity.macify.eawt.DefaultApplication; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.*; + +public class EntryPoint +{ + private enum Action + { + Proceed, + Launch + } + + public static void main(String[] args) + { + // Set the OSX application icon first, if we are on OSX. + Application application = new DefaultApplication(); + if(application.isMac()) + { + try + { + BufferedImage image = ImageIO.read(new File("icon.png")); + application.setApplicationIconImage(image); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + + EntryPoint listener = new EntryPoint(); + int retCode = listener.listen(); + if (retCode != 0) + { + System.out.println("Exiting with " + retCode); + System.exit(retCode); + } + } + + private Action parseLine(String inData) throws ParseException + { + String[] pair = inData.split(" ", 2); + if(pair.length != 2) + throw new ParseException(); + + String command = pair[0]; + String param = pair[1]; + + if(command.equals("launch")) + { + if(param.equals("legacy")) + { + m_launcher = new LegacyLauncher(); + Utils.log("Using legacy launcher."); + Utils.log(); + return Action.Launch; + } + if(param.equals("onesix")) + { + m_launcher = new OneSixLauncher(); + Utils.log("Using onesix launcher."); + Utils.log(); + return Action.Launch; + } + else + throw new ParseException(); + } + + m_params.add(command, param); + //System.out.println(command + " : " + param); + return Action.Proceed; + } + + public int listen() + { + BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in)); + boolean isListening = true; + // Main loop + while (isListening) + { + String inData=""; + try + { + // Read from the pipe one line at a time + inData = buffer.readLine(); + if (inData != null) + { + if(parseLine(inData) == Action.Launch) + { + isListening = false; + } + } + } + catch (IOException e) + { + e.printStackTrace(); + return 1; + } + catch (ParseException e) + { + e.printStackTrace(); + return 1; + } + } + if(m_launcher != null) + { + return m_launcher.launch(m_params); + } + System.err.println("No valid launcher implementation specified."); + return 1; + } + + private ParamBucket m_params = new ParamBucket(); + private org.multimc.Launcher m_launcher; +} diff --git a/depends/launcher/org/multimc/IconLoader.java b/depends/launcher/org/multimc/IconLoader.java new file mode 100644 index 00000000..f1638f3a --- /dev/null +++ b/depends/launcher/org/multimc/IconLoader.java @@ -0,0 +1,132 @@ +package org.multimc; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.nio.ByteBuffer; + +/***************************************************************************** + * A convenience class for loading icons from images. + * + * Icons loaded from this class are formatted to fit within the required + * dimension (16x16, 32x32, or 128x128). If the source image is larger than the + * target dimension, it is shrunk down to the minimum size that will fit. If it + * is smaller, then it is only scaled up if the new scale can be a per-pixel + * linear scale (i.e., x2, x3, x4, etc). In both cases, the image's width/height + * ratio is kept the same as the source image. + * + * @author Chris Molini + *****************************************************************************/ +public class IconLoader +{ + /************************************************************************* + * Loads an icon in ByteBuffer form. + * + * @param filepath + * The location of the Image to use as an icon. + * + * @return An array of ByteBuffers containing the pixel data for the icon in + * various sizes (as recommended by the OS). + *************************************************************************/ + public static ByteBuffer[] load(String filepath) + { + BufferedImage image; + try { + image = ImageIO.read ( new File( filepath ) ); + } catch ( IOException e ) { + e.printStackTrace(); + return new ByteBuffer[0]; + } + ByteBuffer[] buffers; + buffers = new ByteBuffer[1]; + buffers[0] = loadInstance(image, 128); + return buffers; + } + + /************************************************************************* + * Copies the supplied image into a square icon at the indicated size. + * + * @param image + * The image to place onto the icon. + * @param dimension + * The desired size of the icon. + * + * @return A ByteBuffer of pixel data at the indicated size. + *************************************************************************/ + private static ByteBuffer loadInstance(BufferedImage image, int dimension) + { + BufferedImage scaledIcon = new BufferedImage(dimension, dimension, + BufferedImage.TYPE_INT_ARGB_PRE); + Graphics2D g = scaledIcon.createGraphics(); + double ratio = getIconRatio(image, scaledIcon); + double width = image.getWidth() * ratio; + double height = image.getHeight() * ratio; + g.drawImage(image, (int) ((scaledIcon.getWidth() - width) / 2), + (int) ((scaledIcon.getHeight() - height) / 2), (int) (width), + (int) (height), null); + g.dispose(); + + return convertToByteBuffer(scaledIcon); + } + + /************************************************************************* + * Gets the width/height ratio of the icon. This is meant to simplify + * scaling the icon to a new dimension. + * + * @param src + * The base image that will be placed onto the icon. + * @param icon + * The icon that will have the image placed on it. + * + * @return The amount to scale the source image to fit it onto the icon + * appropriately. + *************************************************************************/ + private static double getIconRatio(BufferedImage src, BufferedImage icon) + { + double ratio = 1; + if (src.getWidth() > icon.getWidth()) + ratio = (double) (icon.getWidth()) / src.getWidth(); + else + ratio = (int) (icon.getWidth() / src.getWidth()); + if (src.getHeight() > icon.getHeight()) + { + double r2 = (double) (icon.getHeight()) / src.getHeight(); + if (r2 < ratio) + ratio = r2; + } + else + { + double r2 = (int) (icon.getHeight() / src.getHeight()); + if (r2 < ratio) + ratio = r2; + } + return ratio; + } + + /************************************************************************* + * Converts a BufferedImage into a ByteBuffer of pixel data. + * + * @param image + * The image to convert. + * + * @return A ByteBuffer that contains the pixel data of the supplied image. + *************************************************************************/ + public static ByteBuffer convertToByteBuffer(BufferedImage image) + { + byte[] buffer = new byte[image.getWidth() * image.getHeight() * 4]; + int counter = 0; + for (int i = 0; i < image.getHeight(); i++) + for (int j = 0; j < image.getWidth(); j++) + { + int colorSpace = image.getRGB(j, i); + buffer[counter + 0] = (byte) ((colorSpace << 8) >> 24); + buffer[counter + 1] = (byte) ((colorSpace << 16) >> 24); + buffer[counter + 2] = (byte) ((colorSpace << 24) >> 24); + buffer[counter + 3] = (byte) (colorSpace >> 24); + counter += 4; + } + return ByteBuffer.wrap(buffer); + } +}
\ No newline at end of file diff --git a/depends/launcher/org/multimc/Launcher.java b/depends/launcher/org/multimc/Launcher.java new file mode 100644 index 00000000..1aa2b21f --- /dev/null +++ b/depends/launcher/org/multimc/Launcher.java @@ -0,0 +1,22 @@ +/* + * Copyright 2012-2014 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.multimc; + +public interface Launcher +{ + abstract int launch(ParamBucket params); +} diff --git a/depends/launcher/org/multimc/NotFoundException.java b/depends/launcher/org/multimc/NotFoundException.java new file mode 100644 index 00000000..fe154a2f --- /dev/null +++ b/depends/launcher/org/multimc/NotFoundException.java @@ -0,0 +1,21 @@ +/* + * Copyright 2012-2014 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.multimc; + +public class NotFoundException extends Exception +{ +} diff --git a/depends/launcher/org/multimc/ParamBucket.java b/depends/launcher/org/multimc/ParamBucket.java new file mode 100644 index 00000000..2e197d9f --- /dev/null +++ b/depends/launcher/org/multimc/ParamBucket.java @@ -0,0 +1,86 @@ +/* + * Copyright 2012-2014 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.multimc; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public class ParamBucket +{ + public void add(String key, String value) + { + List<String> coll = null; + if(!m_params.containsKey(key)) + { + coll = new ArrayList<String>(); + m_params.put(key, coll); + } + else + { + coll = m_params.get(key); + } + coll.add(value); + } + + public List<String> all(String key) throws NotFoundException + { + if(!m_params.containsKey(key)) + throw new NotFoundException(); + return m_params.get(key); + } + + public List<String> allSafe(String key, List<String> def) + { + if(!m_params.containsKey(key) || m_params.get(key).size() < 1) + { + return def; + } + return m_params.get(key); + } + + public List<String> allSafe(String key) + { + return allSafe(key, new ArrayList<String>()); + } + + public String first(String key) throws NotFoundException + { + List<String> list = all(key); + if(list.size() < 1) + { + throw new NotFoundException(); + } + return list.get(0); + } + + public String firstSafe(String key, String def) + { + if(!m_params.containsKey(key) || m_params.get(key).size() < 1) + { + return def; + } + return m_params.get(key).get(0); + } + + public String firstSafe(String key) + { + return firstSafe(key, ""); + } + + private HashMap<String, List<String>> m_params = new HashMap<String, List<String>>(); +} diff --git a/depends/launcher/org/multimc/ParseException.java b/depends/launcher/org/multimc/ParseException.java new file mode 100644 index 00000000..d9e8e53e --- /dev/null +++ b/depends/launcher/org/multimc/ParseException.java @@ -0,0 +1,22 @@ +/* + * Copyright 2012-2014 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.multimc; + +public class ParseException extends java.lang.Exception +{ + +} diff --git a/depends/launcher/org/multimc/Utils.java b/depends/launcher/org/multimc/Utils.java new file mode 100644 index 00000000..df0ef861 --- /dev/null +++ b/depends/launcher/org/multimc/Utils.java @@ -0,0 +1,179 @@ +/* + * Copyright 2012-2014 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.multimc; + +import java.io.File; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.Arrays; +import java.util.List; + +public class Utils +{ + /** + * Combine two parts of a path. + * @param path1 + * @param path2 + * @return the paths, combined + */ + public static String combine (String path1, String path2) + { + File file1 = new File(path1); + File file2 = new File(file1, path2); + return file2.getPath(); + } + + /** + * Join a list of strings into a string using a separator! + * @param strings the string list to join + * @param separator the glue + * @return the result. + */ + public static String join (List<String> strings, String separator) + { + StringBuilder sb = new StringBuilder(); + String sep = ""; + for(String s: strings) + { + sb.append(sep).append(s); + sep = separator; + } + return sb.toString(); + } + + /** + * Adds the specified library to the classpath + * + * @param s the path to add + * @throws Exception + */ + public static void addToClassPath(String s) throws Exception + { + File f = new File(s); + URL u = f.toURI().toURL(); + URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); + Class urlClass = URLClassLoader.class; + Method method = urlClass.getDeclaredMethod("addURL", new Class[]{URL.class}); + method.setAccessible(true); + method.invoke(urlClassLoader, new Object[]{u}); + } + + /** + * Adds many libraries to the classpath + * + * @param jars the paths to add + */ + public static boolean addToClassPath(List<String> jars) + { + boolean pure = true; + // initialize the class path + for (String jar : jars) + { + try + { + Utils.addToClassPath(jar); + } catch (Exception e) + { + System.err.println("Unable to load: " + jar); + e.printStackTrace(System.err); + pure = false; + } + } + return pure; + } + + /** + * Adds the specified path to the java library path + * + * @param pathToAdd the path to add + * @throws Exception + */ + @Deprecated public static void addLibraryPath(String pathToAdd) throws Exception + { + final Field usrPathsField = ClassLoader.class.getDeclaredField("usr_paths"); + usrPathsField.setAccessible(true); + + //get array of paths + final String[] paths = (String[]) usrPathsField.get(null); + + //check if the path to add is already present + for (String path : paths) + { + if (path.equals(pathToAdd)) + { + return; + } + } + + //add the new path + final String[] newPaths = Arrays.copyOf(paths, paths.length + 1); + newPaths[newPaths.length - 1] = pathToAdd; + usrPathsField.set(null, newPaths); + } + + /** + * Finds a field that looks like a Minecraft base folder in a supplied class + * + * @param mc the class to scan + */ + public static Field getMCPathField(Class<?> mc) + { + Field[] fields = mc.getDeclaredFields(); + + for (Field f : fields) + { + if (f.getType() != File.class) + { + // Has to be File + continue; + } + if (f.getModifiers() != (Modifier.PRIVATE + Modifier.STATIC)) + { + // And Private Static. + continue; + } + return f; + } + return null; + } + + /** + * Log to the MultiMC console + * + * @param message A String containing the message + * @param level A String containing the level name. See MinecraftProcess::getLevel() + */ + public static void log(String message, String level) + { + // Kinda dirty + String tag = "!![" + level + "]!"; + System.out.println(tag + message.replace("\n", "\n" + tag)); + } + + public static void log(String message) + { + log(message, "MultiMC"); + } + + public static void log() + { + System.out.println(); + } +} diff --git a/depends/launcher/MCFrame.java b/depends/launcher/org/multimc/legacy/LegacyFrame.java index ce4564c9..c3c0cafc 100644 --- a/depends/launcher/MCFrame.java +++ b/depends/launcher/org/multimc/legacy/LegacyFrame.java @@ -1,40 +1,39 @@ -// -// Copyright 2012 MultiMC Contributors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// +package org.multimc.legacy;/* + * Copyright 2012-2014 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ import net.minecraft.Launcher; + +import javax.imageio.ImageIO; import java.applet.Applet; -import java.awt.Dimension; -import java.awt.Frame; -import java.awt.Toolkit; +import java.awt.*; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; -import java.io.IOException; -import java.io.File; -import javax.imageio.ImageIO; -import java.awt.image.BufferedImage; -public class MCFrame extends Frame implements WindowListener +public class LegacyFrame extends Frame implements WindowListener { private Launcher appletWrap = null; - public MCFrame ( String title ) + public LegacyFrame(String title) { super ( title ); - BufferedImage image = null; + BufferedImage image; try { image = ImageIO.read ( new File ( "icon.png" ) ); setIconImage ( image ); @@ -47,14 +46,14 @@ public class MCFrame extends Frame implements WindowListener public void start ( Applet mcApplet, String user, String session, Dimension winSize, boolean maximize ) { try { - appletWrap = new Launcher ( mcApplet, new URL ( "http://www.minecraft.net/game" ) ); + appletWrap = new Launcher( mcApplet, new URL ( "http://www.minecraft.net/game" ) ); } catch ( MalformedURLException ignored ) {} - appletWrap.setParameter ( "username", user ); appletWrap.setParameter ( "sessionid", session ); appletWrap.setParameter ( "stand-alone", "true" ); // Show the quit button. - mcApplet.setStub ( appletWrap ); - + appletWrap.setParameter ( "demo", "false" ); + appletWrap.setParameter("fullscreen", "false"); + mcApplet.setStub(appletWrap); this.add ( appletWrap ); appletWrap.setPreferredSize ( winSize ); this.pack(); @@ -63,7 +62,6 @@ public class MCFrame extends Frame implements WindowListener if ( maximize ) { this.setExtendedState ( MAXIMIZED_BOTH ); } - validate(); appletWrap.init(); appletWrap.start(); diff --git a/depends/launcher/org/multimc/legacy/LegacyLauncher.java b/depends/launcher/org/multimc/legacy/LegacyLauncher.java new file mode 100644 index 00000000..1ca37c4a --- /dev/null +++ b/depends/launcher/org/multimc/legacy/LegacyLauncher.java @@ -0,0 +1,178 @@ +package org.multimc.legacy;/* + * Copyright 2012-2014 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import org.multimc.Launcher; +import org.multimc.NotFoundException; +import org.multimc.ParamBucket; +import org.multimc.Utils; + +import java.applet.Applet; +import java.awt.*; +import java.io.File; +import java.lang.reflect.Field; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; + +public class LegacyLauncher implements Launcher +{ + @Override + public int launch(ParamBucket params) + { + String userName, sessionId, windowTitle, windowParams, lwjgl; + String mainClass = "net.minecraft.client.Minecraft"; + try + { + userName = params.first("userName"); + sessionId = params.first("sessionId"); + windowTitle = params.first("windowTitle"); + windowParams = params.first("windowParams"); + lwjgl = params.first("lwjgl"); + } catch (NotFoundException e) + { + System.err.println("Not enough arguments."); + return -1; + } + + String cwd = System.getProperty("user.dir"); + Dimension winSize = new Dimension(854, 480); + boolean maximize = false; + + String[] dimStrings = windowParams.split("x"); + + if (windowParams.equalsIgnoreCase("max")) + { + maximize = true; + } + else if (dimStrings.length == 2) + { + try + { + winSize = new Dimension(Integer.parseInt(dimStrings[0]), Integer.parseInt(dimStrings[1])); + } catch (NumberFormatException ignored) {} + } + + File binDir = new File(cwd, "bin"); + File lwjglDir; + if (lwjgl.equalsIgnoreCase("Mojang")) + { + lwjglDir = binDir; + } + else + { + lwjglDir = new File(lwjgl); + } + + URL[] classpath; + { + try + { + classpath = new URL[] + { + new File(binDir, "minecraft.jar").toURI().toURL(), + new File(lwjglDir, "lwjgl.jar").toURI().toURL(), + new File(lwjglDir, "lwjgl_util.jar").toURI().toURL(), + new File(lwjglDir, "jinput.jar").toURI().toURL(), + }; + } catch (MalformedURLException e) + { + System.err.println("Class path entry is badly formed:"); + e.printStackTrace(System.err); + return -1; + } + } + + String nativesDir = new File(lwjglDir, "natives").toString(); + + System.setProperty("org.lwjgl.librarypath", nativesDir); + System.setProperty("net.java.games.input.librarypath", nativesDir); + + // print the pretty things + { + Utils.log("Main Class:"); + Utils.log(" " + mainClass); + Utils.log(); + + Utils.log("Class Path:"); + for (URL s : classpath) + { + Utils.log(" " + s); + } + Utils.log(); + + Utils.log("Native Path:"); + Utils.log(" " + nativesDir); + Utils.log(); + } + + URLClassLoader cl = new URLClassLoader(classpath, LegacyLauncher.class.getClassLoader()); + + // Get the Minecraft Class and set the base folder + Class<?> mc; + try + { + mc = cl.loadClass(mainClass); + + Field f = Utils.getMCPathField(mc); + + if (f == null) + { + System.err.println("Could not find Minecraft path field. Launch failed."); + return -1; + } + + f.setAccessible(true); + f.set(null, new File(cwd)); + } catch (Exception e) + { + System.err.println("Could not set base folder. Failed to find/access Minecraft main class:"); + e.printStackTrace(System.err); + return -1; + } + + System.setProperty("minecraft.applet.TargetDirectory", cwd); + + String[] mcArgs = new String[2]; + mcArgs[0] = userName; + mcArgs[1] = sessionId; + + Utils.log("Launching with applet wrapper..."); + try + { + Class<?> MCAppletClass = cl.loadClass("net.minecraft.client.MinecraftApplet"); + Applet mcappl = (Applet) MCAppletClass.newInstance(); + LegacyFrame mcWindow = new LegacyFrame(windowTitle); + mcWindow.start(mcappl, userName, sessionId, winSize, maximize); + } catch (Exception e) + { + Utils.log("Applet wrapper failed:", "Error"); + e.printStackTrace(System.err); + Utils.log(); + Utils.log("Falling back to compatibility mode."); + try + { + mc.getMethod("main", String[].class).invoke(null, (Object) mcArgs); + } catch (Exception e1) + { + Utils.log("Failed to invoke the Minecraft main class:", "Fatal"); + e1.printStackTrace(System.err); + return -1; + } + } + + return 0; + } +} diff --git a/depends/launcher/org/multimc/onesix/OneSixLauncher.java b/depends/launcher/org/multimc/onesix/OneSixLauncher.java new file mode 100644 index 00000000..c1676c94 --- /dev/null +++ b/depends/launcher/org/multimc/onesix/OneSixLauncher.java @@ -0,0 +1,210 @@ +/* Copyright 2012-2014 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.multimc.onesix; + +import org.multimc.*; + +import java.io.File; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.List; + +public class OneSixLauncher implements Launcher +{ + @Override + public int launch(ParamBucket params) + { + // get and process the launch script params + List<String> libraries; + List<String> mcparams; + List<String> mods; + String mainClass; + String natives; + final String windowTitle; + String windowParams; + try + { + libraries = params.all("cp"); + mcparams = params.all("param"); + mainClass = params.first("mainClass"); + mods = params.allSafe("mods", new ArrayList<String>()); + natives = params.first("natives"); + windowTitle = params.first("windowTitle"); + // windowParams = params.first("windowParams"); + } catch (NotFoundException e) + { + System.err.println("Not enough arguments."); + e.printStackTrace(System.err); + return -1; + } + + List<String> allJars = new ArrayList<String>(); + allJars.addAll(mods); + allJars.addAll(libraries); + + if(!Utils.addToClassPath(allJars)) + { + System.err.println("Halting launch due to previous errors."); + return -1; + } + + String property = System.getProperty("os.arch"); + List<String> allNativePaths = new ArrayList<String>(); + boolean is_64 = property.equalsIgnoreCase("x86_64") || property.equalsIgnoreCase("amd64"); + allNativePaths.add(natives); + allNativePaths.add(natives + "/" + (is_64 ? "64" : "32")); + + // print the pretty things + { + Utils.log("Main Class:"); + Utils.log(" " + mainClass); + Utils.log(); + + Utils.log("Native paths:"); + for (String s : allNativePaths) + { + Utils.log(" " + s); + } + Utils.log(); + + Utils.log("Libraries:"); + for (String s : libraries) + { + Utils.log(" " + s); + } + Utils.log(); + + if(mods.size() > 0) + { + Utils.log("Class Path Mods:"); + for (String s : mods) + { + Utils.log(" " + s); + } + Utils.log(); + } + + Utils.log("Params:"); + Utils.log(" " + mcparams.toString()); + Utils.log(); + } + + final ClassLoader cl = ClassLoader.getSystemClassLoader(); + + // set up the natives path(s). + String libpath = Utils.join(allNativePaths, String.valueOf(File.pathSeparatorChar)); + System.setProperty("java.library.path", libpath); + Field fieldSysPath; + try + { + fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths"); + fieldSysPath.setAccessible( true ); + fieldSysPath.set( null, null ); + } catch (Exception e) + { + System.err.println("Failed to set the native library path:"); + e.printStackTrace(System.err); + return -1; + } + + // Get the Minecraft Class. + Class<?> mc; + try + { + mc = cl.loadClass(mainClass); + } catch (ClassNotFoundException e) + { + System.err.println("Failed to find Minecraft main class:"); + e.printStackTrace(System.err); + return -1; + } + + // get the main method. + Method meth; + try + { + meth = mc.getMethod("main", String[].class); + } catch (NoSuchMethodException e) + { + System.err.println("Failed to acquire the main method:"); + e.printStackTrace(System.err); + return -1; + } + + // FIXME: works only on linux, we need a better solution +/* + final java.nio.ByteBuffer[] icons = IconLoader.load("icon.png"); + new Thread() { + public void run() { + ClassLoader cl = ClassLoader.getSystemClassLoader(); + try + { + Class<?> Display; + Method isCreated; + Method setTitle; + Method setIcon; + + Display = cl.loadClass("org.lwjgl.opengl.Display"); + isCreated = Display.getMethod("isCreated"); + setTitle = Display.getMethod("setTitle", String.class); + setIcon = Display.getMethod("setIcon", java.nio.ByteBuffer[].class); + + // set the window title? Maybe? + while(!(Boolean) isCreated.invoke(null)) + { + try + { + Thread.sleep(150); + } catch (InterruptedException ignored) {} + } + // Give it a bit more time ;) + Thread.sleep(150); + // set the title + setTitle.invoke(null,windowTitle); + // only set icon when there's actually something to set... + if(icons.length > 0) + { + setIcon.invoke(null,(Object)icons); + } + } + catch (Exception e) + { + System.err.println("Couldn't set window icon or title."); + e.printStackTrace(System.err); + } + } + } + .start(); +*/ + // start Minecraft + String[] paramsArray = mcparams.toArray(new String[mcparams.size()]); // init params accordingly + try + { + meth.invoke(null, (Object) paramsArray); // static method doesn't have an instance + } catch (Exception e) + { + System.err.println("Failed to start Minecraft:"); + e.printStackTrace(System.err); + return -1; + } + return 0; + } +} diff --git a/generated.qrc.in b/generated.qrc.in deleted file mode 100644 index 794943eb..00000000 --- a/generated.qrc.in +++ /dev/null @@ -1,8 +0,0 @@ -<RCC> -<!-- - <qresource prefix="/java"> - <file alias="launcher.jar">@MMC_BIN@/depends/launcher/MultiMCLauncher.jar</file> - <file alias="checker.jar">@MMC_BIN@/depends/javacheck/JavaCheck.jar</file> - </qresource> ---> -</RCC> diff --git a/graphics.qrc b/graphics.qrc deleted file mode 100644 index 68d3beed..00000000 --- a/graphics.qrc +++ /dev/null @@ -1,51 +0,0 @@ -<RCC> - <qresource prefix="/icons/toolbar"> - <file alias="about">resources/icons/toolbar/about.png</file> - <file alias="bug">resources/icons/toolbar/ReportBug.png</file> - <file alias="centralmods">resources/icons/toolbar/centralmods.png</file> - <file alias="checkupdate">resources/icons/toolbar/checkupdate.png</file> - <file alias="help">resources/icons/toolbar/help.png</file> - <file alias="new">resources/icons/toolbar/new.png</file> - <file alias="copy">resources/icons/toolbar/InstCopy.png</file> - <file alias="news">resources/icons/toolbar/NewsIcon.png</file> - <file alias="refresh">resources/icons/toolbar/refresh.png</file> - <file alias="settings">resources/icons/toolbar/settings.png</file> - <file alias="viewfolder">resources/icons/toolbar/viewfolder.png</file> - <file alias="cat">resources/icons/toolbar/Cat.png</file> - <file alias="noaccount">resources/icons/toolbar/NoAccount.png</file> - </qresource> - <qresource prefix="/icons/instances"> - <file alias="brick">resources/icons/instances/brick.png</file> - <file alias="chicken">resources/icons/instances/chicken128.png</file> - <file alias="creeper">resources/icons/instances/creeper128.png</file> - <file alias="derp">resources/icons/instances/derp.png</file> - <file alias="diamond">resources/icons/instances/diamond.png</file> - <file alias="dirt">resources/icons/instances/dirt.png</file> - <file alias="enderman">resources/icons/instances/enderman.png</file> - <file alias="enderpearl">resources/icons/instances/enderpearl128.png</file> - <file alias="ftb-glow">resources/icons/instances/ftb_glow128.png</file> - <file alias="ftb-logo">resources/icons/instances/ftb_logo128.png</file> - <file alias="gear">resources/icons/instances/gear128.png</file> - <file alias="gold">resources/icons/instances/gold.png</file> - <file alias="grass">resources/icons/instances/grass.png</file> - <file alias="herobrine">resources/icons/instances/herobrine128.png</file> - <file alias="infinity">resources/icons/instances/infinity128.png</file> - <file alias="iron">resources/icons/instances/iron.png</file> - <file alias="magitech">resources/icons/instances/magitech128.png</file> - <file alias="meat">resources/icons/instances/meat128.png</file> - <file alias="netherstar">resources/icons/instances/netherstar128.png</file> - <file alias="planks">resources/icons/instances/planks.png</file> - <file alias="skeleton">resources/icons/instances/skeleton128.png</file> - <file alias="squarecreeper">resources/icons/instances/squarecreeper128.png</file> - <file alias="steve">resources/icons/instances/steve128.png</file> - <file alias="stone">resources/icons/instances/stone.png</file> - <file alias="tnt">resources/icons/instances/tnt.png</file> - </qresource> - <qresource prefix="/icons/multimc"> - <file alias="scalable/apps/multimc.svg">resources/icons/multimc.svg</file> - <file alias="index.theme">resources/XdgIcon.theme</file> - </qresource> - <qresource prefix="/backgrounds"> - <file alias="kitteh">resources/catbgrnd2.png</file> - </qresource> -</RCC> diff --git a/gui/ConsoleWindow.cpp b/gui/ConsoleWindow.cpp index 84a141ce..dc36a8ff 100644 --- a/gui/ConsoleWindow.cpp +++ b/gui/ConsoleWindow.cpp @@ -140,6 +140,9 @@ void ConsoleWindow::write(QString data, MessageLevel::Enum mode) else if (mode == MessageLevel::Debug) while (iter.hasNext()) writeColor(iter.next(), "green"); + else if (mode == MessageLevel::PrePost) + while (iter.hasNext()) + writeColor(iter.next(), "grey"); // TODO: implement other MessageLevels else while (iter.hasNext()) @@ -166,6 +169,10 @@ void ConsoleWindow::on_closeButton_clicked() void ConsoleWindow::setMayClose(bool mayclose) { + if(mayclose) + ui->closeButton->setText(tr("Close")); + else + ui->closeButton->setText(tr("Hide")); m_mayclose = mayclose; } diff --git a/gui/MainWindow.cpp b/gui/MainWindow.cpp index 31e4b9e4..ee9c3fad 100644 --- a/gui/MainWindow.cpp +++ b/gui/MainWindow.cpp @@ -77,6 +77,8 @@ #include "logic/news/NewsChecker.h" +#include "logic/status/StatusChecker.h" + #include "logic/net/URLConstants.h" #include "logic/BaseInstance.h" @@ -126,7 +128,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi // Add the news label to the news toolbar. { newsLabel = new QToolButton(); - newsLabel->setIcon(QIcon(":/icons/toolbar/news")); + newsLabel->setIcon(QIcon::fromTheme("news")); newsLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); newsLabel->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); ui->newsToolBar->insertWidget(ui->actionMoreNews, newsLabel); @@ -199,7 +201,27 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi connect(MMC->instances().get(), SIGNAL(dataIsInvalid()), SLOT(selectionBad())); m_statusLeft = new QLabel(tr("No instance selected"), this); + m_statusRight = new QLabel(tr("No status available"), this); + m_statusRefresh = new QToolButton(this); + m_statusRefresh->setCheckable(true); + m_statusRefresh->setToolButtonStyle(Qt::ToolButtonIconOnly); + m_statusRefresh->setIcon(QIcon::fromTheme("refresh")); + statusBar()->addPermanentWidget(m_statusLeft, 1); + statusBar()->addPermanentWidget(m_statusRight, 0); + statusBar()->addPermanentWidget(m_statusRefresh, 0); + + // Start status checker + { + connect(MMC->statusChecker().get(), &StatusChecker::statusLoaded, this, &MainWindow::updateStatusUI); + connect(MMC->statusChecker().get(), &StatusChecker::statusLoadingFailed, this, &MainWindow::updateStatusFailedUI); + + connect(m_statusRefresh, &QAbstractButton::clicked, this, &MainWindow::reloadStatus); + connect(&statusTimer, &QTimer::timeout, this, &MainWindow::reloadStatus); + statusTimer.setSingleShot(true); + + reloadStatus(); + } // Add "manage accounts" button, right align QWidget *spacer = new QWidget(); @@ -219,8 +241,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi accountMenuButton->setMenu(accountMenu); accountMenuButton->setPopupMode(QToolButton::InstantPopup); accountMenuButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - accountMenuButton->setIcon( - QPixmap(":/icons/toolbar/noaccount").scaled(48, 48, Qt::KeepAspectRatio)); + accountMenuButton->setIcon(QIcon::fromTheme("noaccount")); QWidgetAction *accountMenuButtonAction = new QWidgetAction(this); accountMenuButtonAction->setDefaultWidget(accountMenuButton); @@ -235,17 +256,20 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi connect(MMC->accounts().get(), &MojangAccountList::listChanged, [this] { repopulateAccountsMenu(); }); - std::shared_ptr<MojangAccountList> accounts = MMC->accounts(); + // Show initial account + activeAccountChanged(); + + auto accounts = MMC->accounts(); // TODO: Nicer way to iterate? for (int i = 0; i < accounts->count(); i++) { - MojangAccountPtr account = accounts->at(i); + auto account = accounts->at(i); if (account != nullptr) { auto job = new NetJob("Startup player skins: " + account->username()); - for (AccountProfile profile : account->profiles()) + for (auto profile : account->profiles()) { auto meta = MMC->metacache()->resolveEntry("skins", profile.name + ".png"); auto action = CacheDownload::make( @@ -383,7 +407,7 @@ void MainWindow::repopulateAccountsMenu() QAction *action = new QAction(tr("No Default Account"), this); action->setCheckable(true); - action->setIcon(QPixmap(":/icons/toolbar/noaccount").scaled(48, 48, Qt::KeepAspectRatio)); + action->setIcon(QIcon::fromTheme("noaccount")); action->setData(""); if (active_username.isEmpty()) { @@ -437,8 +461,7 @@ void MainWindow::activeAccountChanged() } // Set the icon to the "no account" icon. - accountMenuButton->setIcon( - QPixmap(":/icons/toolbar/noaccount").scaled(48, 48, Qt::KeepAspectRatio)); + accountMenuButton->setIcon(QIcon::fromTheme("noaccount")); } bool MainWindow::eventFilter(QObject *obj, QEvent *ev) @@ -495,6 +518,57 @@ void MainWindow::updateNewsLabel() } } +static QString convertStatus(const QString &status) +{ + QString ret = "?"; + + if(status == "green") ret = "↑"; + else if(status == "yellow") ret = "-"; + else if(status == "red") ret="↓"; + + return "<span style=\"font-size:11pt; font-weight:600;\">" + ret + "</span>"; +} + +void MainWindow::reloadStatus() +{ + m_statusRefresh->setChecked(true); + MMC->statusChecker()->reloadStatus(); + //updateStatusUI(); +} + +static QString makeStatusString(const QMap<QString, QString> statuses) +{ + QString status = ""; + status += "Web: " + convertStatus(statuses["minecraft.net"]); + status += " Account: " + convertStatus(statuses["account.mojang.com"]); + status += " Skins: " + convertStatus(statuses["skins.minecraft.net"]); + status += " Auth: " + convertStatus(statuses["authserver.mojang.com"]); + status += " Session: " + convertStatus(statuses["sessionserver.mojang.com"]); + + return status; +} + +void MainWindow::updateStatusUI() +{ + auto statusChecker = MMC->statusChecker(); + auto statuses = statusChecker->getStatusEntries(); + + QString status = makeStatusString(statuses); + m_statusRefresh->setChecked(false); + + m_statusRight->setText(status); + + statusTimer.start(60 * 1000); +} + +void MainWindow::updateStatusFailedUI() +{ + m_statusRight->setText(makeStatusString(QMap<QString, QString>())); + m_statusRefresh->setChecked(false); + + statusTimer.start(60 * 1000); +} + void MainWindow::updateAvailable(QString repo, QString versionName, int versionId) { UpdateDialog dlg; @@ -756,7 +830,7 @@ void MainWindow::on_actionChangeInstIcon_triggered() if (dlg.result() == QDialog::Accepted) { m_selectedInstance->setIconKey(dlg.selectedIconKey); - auto ico = MMC->icons()->getIcon(dlg.selectedIconKey); + auto ico = MMC->icons()->getBigIcon(dlg.selectedIconKey); ui->actionChangeInstIcon->setIcon(ico); } } @@ -765,14 +839,14 @@ void MainWindow::iconUpdated(QString icon) { if(icon == m_currentInstIcon) { - ui->actionChangeInstIcon->setIcon(MMC->icons()->getIcon(m_currentInstIcon)); + ui->actionChangeInstIcon->setIcon(MMC->icons()->getBigIcon(m_currentInstIcon)); } } void MainWindow::updateInstanceToolIcon(QString new_icon) { m_currentInstIcon = new_icon; - ui->actionChangeInstIcon->setIcon(MMC->icons()->getIcon(m_currentInstIcon)); + ui->actionChangeInstIcon->setIcon(MMC->icons()->getBigIcon(m_currentInstIcon)); } void MainWindow::setSelectedInstanceById(const QString &id) diff --git a/gui/MainWindow.h b/gui/MainWindow.h index 12d76da4..eb478776 100644 --- a/gui/MainWindow.h +++ b/gui/MainWindow.h @@ -17,6 +17,7 @@ #include <QMainWindow> #include <QProcess> +#include <QTimer> #include "logic/lists/InstanceList.h" #include "logic/BaseInstance.h" @@ -168,6 +169,12 @@ slots: void repopulateAccountsMenu(); void updateNewsLabel(); + + void updateStatusUI(); + + void updateStatusFailedUI(); + + void reloadStatus(); /*! * Runs the DownloadUpdateTask and installs updates. @@ -198,8 +205,12 @@ private: Task *m_versionLoadTask; QLabel *m_statusLeft; + QLabel *m_statusRight; + QToolButton *m_statusRefresh; QMenu *accountMenu; QToolButton *accountMenuButton; QAction *manageAccountsAction; + + QTimer statusTimer; }; diff --git a/gui/MainWindow.ui b/gui/MainWindow.ui index 16e72c2f..25af6f60 100644 --- a/gui/MainWindow.ui +++ b/gui/MainWindow.ui @@ -14,7 +14,7 @@ <string>MultiMC 5</string> </property> <property name="windowIcon"> - <iconset resource="../graphics.qrc"> + <iconset resource="../resources/multimc/multimc.qrc"> <normaloff>:/icons/multimc/scalable/apps/multimc.svg</normaloff>:/icons/multimc/scalable/apps/multimc.svg</iconset> </property> <widget class="QWidget" name="centralWidget"> @@ -152,8 +152,7 @@ </widget> <action name="actionAddInstance"> <property name="icon"> - <iconset resource="../graphics.qrc"> - <normaloff>:/icons/toolbar/new</normaloff>:/icons/toolbar/new</iconset> + <iconset theme="new"/> </property> <property name="text"> <string>Add Instance</string> @@ -167,8 +166,7 @@ </action> <action name="actionViewInstanceFolder"> <property name="icon"> - <iconset resource="../graphics.qrc"> - <normaloff>:/icons/toolbar/viewfolder</normaloff>:/icons/toolbar/viewfolder</iconset> + <iconset theme="viewfolder"/> </property> <property name="text"> <string>View Instance Folder</string> @@ -182,8 +180,7 @@ </action> <action name="actionRefresh"> <property name="icon"> - <iconset resource="../graphics.qrc"> - <normaloff>:/icons/toolbar/refresh</normaloff>:/icons/toolbar/refresh</iconset> + <iconset theme="refresh"/> </property> <property name="text"> <string>Refresh</string> @@ -197,8 +194,7 @@ </action> <action name="actionViewCentralModsFolder"> <property name="icon"> - <iconset resource="../graphics.qrc"> - <normaloff>:/icons/toolbar/centralmods</normaloff>:/icons/toolbar/centralmods</iconset> + <iconset theme="centralmods"/> </property> <property name="text"> <string>View Central Mods Folder</string> @@ -212,8 +208,7 @@ </action> <action name="actionCheckUpdate"> <property name="icon"> - <iconset resource="../graphics.qrc"> - <normaloff>:/icons/toolbar/checkupdate</normaloff>:/icons/toolbar/checkupdate</iconset> + <iconset theme="checkupdate"/> </property> <property name="text"> <string>Check for Updates</string> @@ -227,8 +222,7 @@ </action> <action name="actionSettings"> <property name="icon"> - <iconset resource="../graphics.qrc"> - <normaloff>:/icons/toolbar/settings</normaloff>:/icons/toolbar/settings</iconset> + <iconset theme="settings"/> </property> <property name="text"> <string>Settings</string> @@ -245,8 +239,7 @@ </action> <action name="actionReportBug"> <property name="icon"> - <iconset resource="../graphics.qrc"> - <normaloff>:/icons/toolbar/bug</normaloff>:/icons/toolbar/bug</iconset> + <iconset theme="bug"/> </property> <property name="text"> <string>Report a Bug</string> @@ -260,8 +253,7 @@ </action> <action name="actionMoreNews"> <property name="icon"> - <iconset resource="../graphics.qrc"> - <normaloff>:/icons/toolbar/news</normaloff>:/icons/toolbar/news</iconset> + <iconset theme="news"/> </property> <property name="text"> <string>More News</string> @@ -278,8 +270,7 @@ </action> <action name="actionAbout"> <property name="icon"> - <iconset resource="../graphics.qrc"> - <normaloff>:/icons/toolbar/about</normaloff>:/icons/toolbar/about</iconset> + <iconset theme="about"/> </property> <property name="text"> <string>About MultiMC</string> @@ -332,7 +323,7 @@ <bool>true</bool> </property> <property name="icon"> - <iconset resource="../graphics.qrc"> + <iconset resource="../resources/instances/instances.qrc"> <normaloff>:/icons/instances/infinity</normaloff>:/icons/instances/infinity</iconset> </property> <property name="text"> @@ -472,20 +463,18 @@ <bool>true</bool> </property> <property name="icon"> - <iconset resource="../graphics.qrc"> - <normaloff>:/icons/toolbar/cat</normaloff>:/icons/toolbar/cat</iconset> + <iconset theme="cat"/> </property> <property name="text"> <string>Meow</string> </property> <property name="toolTip"> - <string><html><head/><body><p align="center"><span style=" font-weight:600; color:#ff0004;">Catnarok!</span></p><p align="center">Or just a cat with a ball of yarn?</p><p align="center"><span style=" font-style:italic;">WHO KNOWS?!</span></p><p align="center"><img src=":/icons/instances/tnt"/></p></body></html></string> + <string><html><head/><body><p align="center">It's a fluffy kitty :3</p></body></html></string> </property> </action> <action name="actionCopyInstance"> <property name="icon"> - <iconset resource="../graphics.qrc"> - <normaloff>:/icons/toolbar/copy</normaloff>:/icons/toolbar/copy</iconset> + <iconset theme="copy"/> </property> <property name="text"> <string>Copy Instance</string> @@ -508,7 +497,9 @@ </widget> <layoutdefault spacing="6" margin="11"/> <resources> - <include location="../graphics.qrc"/> + <include location="../resources/instances/instances.qrc"/> + <include location="../resources/multimc/multimc.qrc"/> + <include location="../resources/backgrounds/backgrounds.qrc"/> </resources> <connections/> </ui> diff --git a/gui/dialogs/AboutDialog.cpp b/gui/dialogs/AboutDialog.cpp index efeea6f2..35c85815 100644 --- a/gui/dialogs/AboutDialog.cpp +++ b/gui/dialogs/AboutDialog.cpp @@ -24,6 +24,8 @@ AboutDialog::AboutDialog(QWidget *parent) : QDialog(parent), ui(new Ui::AboutDia MultiMCPlatform::fixWM_CLASS(this); ui->setupUi(this); + ui->urlLabel->setOpenExternalLinks(true); + ui->icon->setPixmap(QIcon(":/icons/multimc/scalable/apps/multimc.svg").pixmap(64)); ui->title->setText("MultiMC 5 " + MMC->version().toString()); diff --git a/gui/dialogs/AboutDialog.ui b/gui/dialogs/AboutDialog.ui index b0dafb06..64a355d3 100644 --- a/gui/dialogs/AboutDialog.ui +++ b/gui/dialogs/AboutDialog.ui @@ -104,7 +104,7 @@ <x>0</x> <y>0</y> <width>689</width> - <height>331</height> + <height>311</height> </rect> </property> <attribute name="label"> @@ -229,7 +229,7 @@ <x>0</x> <y>0</y> <width>689</width> - <height>331</height> + <height>311</height> </rect> </property> <attribute name="label"> @@ -245,7 +245,7 @@ <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt; font-weight:600;">MultiMC</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">Andrew Okin &lt;</span><a href="mailto:forkk@forkk.net"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt; text-decoration: underline; color:#0000ff;">forkk@forkk.net</span></a><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">Petr Mrázek &lt;</span><a href="mailto:peterix@gmail.com"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt; text-decoration: underline; color:#0000ff;">peterix@gmail.com</span></a><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">&gt;</span></p> @@ -282,7 +282,7 @@ p, li { white-space: pre-wrap; } <x>0</x> <y>0</y> <width>689</width> - <height>331</height> + <height>311</height> </rect> </property> <attribute name="label"> @@ -309,7 +309,7 @@ p, li { white-space: pre-wrap; } <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'DejaVu Sans Mono'; font-size:9pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'DejaVu Sans Mono'; font-size:11pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:18pt; font-weight:600;">MultiMC</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2012-2014 MultiMC Contributors</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></p> @@ -430,7 +430,36 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> *</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * This file has been put into the public domain.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * You can do whatever you want with this file.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> */</span></p></body></html></string> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> */</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:18pt; font-weight:600;">Java IconLoader class</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Copyright (c) 2011, Chris Molini</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">All rights reserved.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Redistribution and use in source and binary forms, with or without</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">modification, are permitted provided that the following conditions are met:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * Redistributions of source code must retain the above copyright</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> notice, this list of conditions and the following disclaimer.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * Redistributions in binary form must reproduce the above copyright</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> notice, this list of conditions and the following disclaimer in the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> documentation and/or other materials provided with the distribution.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * Neither the name of the &lt;organization&gt; nor the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> names of its contributors may be used to endorse or promote products</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> derived from this software without specific prior written permission.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot; AND</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">DISCLAIMED. IN NO EVENT SHALL &lt;COPYRIGHT HOLDER&gt; BE LIABLE FOR ANY</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p></body></html></string> </property> </widget> </item> @@ -442,7 +471,7 @@ p, li { white-space: pre-wrap; } <x>0</x> <y>0</y> <width>689</width> - <height>331</height> + <height>311</height> </rect> </property> <attribute name="label"> @@ -455,12 +484,12 @@ p, li { white-space: pre-wrap; } <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:11pt;">We keep MultiMC open source because we think it's important to be able to see the source code for a project like this, and we do so using the Apache license.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:11pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:11pt;">Part of the reason for using the Apache license is we don't want people using the &quot;MultiMC&quot; name when redistributing the project. This means people must take the time to go through the source code and remove all references to &quot;MultiMC&quot;, including but not limited to the project icon and the title of windows, (no *MultiMC-fork* in the title).</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:11pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:11pt;">The Apache license covers reasonable use for the name - a mention of the project's origins in the About dialog and the license is acceptable. However, it should be abundantly clear that the project is a fork </span><span style=" font-family:'Bitstream Vera Sans'; font-size:11pt; font-weight:600;">without</span><span style=" font-family:'Bitstream Vera Sans'; font-size:11pt;"> implying that you have our blessing.</span></p></body></html></string> +</style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">We keep MultiMC open source because we think it's important to be able to see the source code for a project like this, and we do so using the Apache license.</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Part of the reason for using the Apache license is we don't want people using the &quot;MultiMC&quot; name when redistributing the project. This means people must take the time to go through the source code and remove all references to &quot;MultiMC&quot;, including but not limited to the project icon and the title of windows, (no *MultiMC-fork* in the title).</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The Apache license covers reasonable use for the name - a mention of the project's origins in the About dialog and the license is acceptable. However, it should be abundantly clear that the project is a fork <span style=" font-weight:600;">without</span> implying that you have our blessing.</p></body></html></string> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> diff --git a/gui/dialogs/InstanceSettings.ui b/gui/dialogs/InstanceSettings.ui index 9260caea..9c7e1757 100644 --- a/gui/dialogs/InstanceSettings.ui +++ b/gui/dialogs/InstanceSettings.ui @@ -168,6 +168,12 @@ <layout class="QGridLayout" name="gridLayout_2"> <item row="1" column="1"> <widget class="QSpinBox" name="maxMemSpinBox"> + <property name="toolTip"> + <string>The maximum amount of memory Minecraft is allowed to use.</string> + </property> + <property name="suffix"> + <string> MB</string> + </property> <property name="minimum"> <number>512</number> </property> @@ -198,6 +204,12 @@ </item> <item row="0" column="1"> <widget class="QSpinBox" name="minMemSpinBox"> + <property name="toolTip"> + <string>The amount of memory Minecraft is started with.</string> + </property> + <property name="suffix"> + <string> MB</string> + </property> <property name="minimum"> <number>256</number> </property> @@ -214,6 +226,12 @@ </item> <item row="2" column="1"> <widget class="QSpinBox" name="permGenSpinBox"> + <property name="toolTip"> + <string>The amount of memory available to store loaded Java classes.</string> + </property> + <property name="suffix"> + <string> MB</string> + </property> <property name="minimum"> <number>64</number> </property> diff --git a/gui/dialogs/ModEditDialogCommon.cpp b/gui/dialogs/ModEditDialogCommon.cpp index 9a15d92d..eee42e5e 100644 --- a/gui/dialogs/ModEditDialogCommon.cpp +++ b/gui/dialogs/ModEditDialogCommon.cpp @@ -50,8 +50,8 @@ void showWebsiteForMod(QWidget *parentDlg, Mod &m) else { CustomMessageBox::selectable( - parentDlg, parentDlg->tr("How sad!"), - parentDlg->tr("The mod author didn't provide a website link for this mod."), + parentDlg, QObject::tr("How sad!"), + QObject::tr("The mod author didn't provide a website link for this mod."), QMessageBox::Warning); } } diff --git a/gui/dialogs/SettingsDialog.cpp b/gui/dialogs/SettingsDialog.cpp index 00b3b1fd..ef363f02 100644 --- a/gui/dialogs/SettingsDialog.cpp +++ b/gui/dialogs/SettingsDialog.cpp @@ -269,6 +269,10 @@ void SettingsDialog::refreshUpdateChannelDesc() // Get the channel list. QList<UpdateChecker::ChannelListEntry> channelList = MMC->updateChecker()->getChannelList(); int selectedIndex = ui->updateChannelComboBox->currentIndex(); + if(selectedIndex < 0) + { + return; + } if (selectedIndex < channelList.count()) { // Find the channel list entry with the given index. @@ -284,6 +288,9 @@ void SettingsDialog::refreshUpdateChannelDesc() void SettingsDialog::applySettings(SettingsObject *s) { + // Language + s->set("Language", ui->languageBox->itemData(ui->languageBox->currentIndex()).toLocale().bcp47Name()); + // Updates s->set("AutoUpdate", ui->autoUpdateCheckBox->isChecked()); s->set("UpdateChannel", m_currentUpdateChannel); @@ -365,6 +372,19 @@ void SettingsDialog::applySettings(SettingsObject *s) void SettingsDialog::loadSettings(SettingsObject *s) { + // Language + ui->languageBox->clear(); + ui->languageBox->addItem(tr("English"), QLocale(QLocale::English)); + foreach(const QString & lang, + QDir(MMC->root() + "/translations").entryList(QStringList() << "*.qm", QDir::Files)) + { + QLocale locale(lang.section(QRegExp("[_\.]"), 1)); + ui->languageBox->addItem( + QLocale::languageToString(locale.language()), + locale); + } + ui->languageBox->setCurrentIndex(ui->languageBox->findData(QLocale(s->get("Language").toString()))); + // Updates ui->autoUpdateCheckBox->setChecked(s->get("AutoUpdate").toBool()); m_currentUpdateChannel = s->get("UpdateChannel").toString(); diff --git a/gui/dialogs/SettingsDialog.ui b/gui/dialogs/SettingsDialog.ui index 251e7916..54e7db7a 100644 --- a/gui/dialogs/SettingsDialog.ui +++ b/gui/dialogs/SettingsDialog.ui @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>526</width> - <height>723</height> + <width>545</width> + <height>609</height> </rect> </property> <property name="sizePolicy"> @@ -35,83 +35,47 @@ <property name="currentIndex"> <number>0</number> </property> - <widget class="QWidget" name="generalTab"> + <widget class="QWidget" name="featuresTab"> <attribute name="title"> - <string>General</string> + <string>Features</string> </attribute> - <layout class="QVBoxLayout" name="verticalLayout"> + <layout class="QVBoxLayout" name="verticalLayout_9"> <item> - <widget class="QGroupBox" name="sortingModeBox"> - <property name="enabled"> - <bool>true</bool> - </property> + <widget class="QGroupBox" name="updateSettingsBox"> <property name="title"> - <string>Sorting Mode</string> + <string>Update Settings</string> </property> - <layout class="QHBoxLayout" name="sortingModeBoxLayout"> + <layout class="QVBoxLayout" name="verticalLayout_7"> <item> - <widget class="QRadioButton" name="sortLastLaunchedBtn"> + <widget class="QCheckBox" name="autoUpdateCheckBox"> <property name="text"> - <string>By last launched</string> + <string>Check for updates when MultiMC starts?</string> </property> - <attribute name="buttonGroup"> - <string notr="true">sortingModeGroup</string> - </attribute> </widget> </item> <item> - <widget class="QRadioButton" name="sortByNameBtn"> + <widget class="QLabel" name="updateChannelLabel"> <property name="text"> - <string>By name</string> + <string>Update Channel:</string> </property> - <attribute name="buttonGroup"> - <string notr="true">sortingModeGroup</string> - </attribute> </widget> </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="updateSettingsBox"> - <property name="title"> - <string>Update Settings</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_7"> <item> - <widget class="QCheckBox" name="autoUpdateCheckBox"> - <property name="text"> - <string>Check for updates when MultiMC starts?</string> + <widget class="QComboBox" name="updateChannelComboBox"> + <property name="enabled"> + <bool>false</bool> </property> </widget> </item> <item> - <layout class="QVBoxLayout" name="channelVerticalLayout"> - <item> - <widget class="QLabel" name="updateChannelLabel"> - <property name="text"> - <string>Update Channel:</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="updateChannelComboBox"> - <property name="enabled"> - <bool>false</bool> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="updateChannelDescLabel"> - <property name="text"> - <string>No channel selected.</string> - </property> - <property name="wordWrap"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> + <widget class="QLabel" name="updateChannelDescLabel"> + <property name="text"> + <string>No channel selected.</string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> </item> </layout> </widget> @@ -281,6 +245,78 @@ </widget> </item> <item> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <widget class="QWidget" name="generalTab"> + <attribute name="title"> + <string>User Interface</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QGridLayout" name="_2"> + <item row="0" column="0"> + <widget class="QLabel" name="label_3"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Language (needs restart):</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="languageBox"/> + </item> + </layout> + </item> + <item> + <widget class="QGroupBox" name="sortingModeBox"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="title"> + <string>Sorting Mode</string> + </property> + <layout class="QHBoxLayout" name="sortingModeBoxLayout"> + <item> + <widget class="QRadioButton" name="sortLastLaunchedBtn"> + <property name="text"> + <string>By last launched</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">sortingModeGroup</string> + </attribute> + </widget> + </item> + <item> + <widget class="QRadioButton" name="sortByNameBtn"> + <property name="text"> + <string>By name</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">sortingModeGroup</string> + </attribute> + </widget> + </item> + </layout> + </widget> + </item> + <item> <widget class="QGroupBox" name="editorsBox"> <property name="title"> <string>External Editors (leave empty for system default)</string> @@ -427,165 +463,6 @@ </item> </layout> </widget> - <widget class="QWidget" name="networkTab"> - <property name="toolTip"> - <string>Network settings.</string> - </property> - <attribute name="title"> - <string>Network</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_6"> - <item> - <widget class="QGroupBox" name="proxySettingsBox"> - <property name="title"> - <string>Proxy</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_8"> - <item> - <widget class="QGroupBox" name="proxyTypeBox"> - <property name="title"> - <string>Type</string> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <item> - <widget class="QRadioButton" name="proxyDefaultBtn"> - <property name="toolTip"> - <string>Uses your system's default proxy settings.</string> - </property> - <property name="text"> - <string>Default</string> - </property> - <attribute name="buttonGroup"> - <string notr="true">proxyGroup</string> - </attribute> - </widget> - </item> - <item> - <widget class="QRadioButton" name="proxyNoneBtn"> - <property name="text"> - <string>None</string> - </property> - <attribute name="buttonGroup"> - <string notr="true">proxyGroup</string> - </attribute> - </widget> - </item> - <item> - <widget class="QRadioButton" name="proxySOCKS5Btn"> - <property name="text"> - <string>SOCKS5</string> - </property> - <attribute name="buttonGroup"> - <string notr="true">proxyGroup</string> - </attribute> - </widget> - </item> - <item> - <widget class="QRadioButton" name="proxyHTTPBtn"> - <property name="text"> - <string>HTTP</string> - </property> - <attribute name="buttonGroup"> - <string notr="true">proxyGroup</string> - </attribute> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="proxyAddrBox"> - <property name="title"> - <string>Address and Port</string> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <widget class="QLineEdit" name="proxyAddrEdit"> - <property name="placeholderText"> - <string>127.0.0.1</string> - </property> - </widget> - </item> - <item> - <widget class="QSpinBox" name="proxyPortEdit"> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - <property name="buttonSymbols"> - <enum>QAbstractSpinBox::PlusMinus</enum> - </property> - <property name="maximum"> - <number>65535</number> - </property> - <property name="value"> - <number>8080</number> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="proxyAuthBox"> - <property name="title"> - <string>Authentication</string> - </property> - <layout class="QGridLayout" name="gridLayout_5"> - <item row="0" column="1"> - <widget class="QLineEdit" name="proxyUserEdit"/> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="proxyUsernameLabel"> - <property name="text"> - <string>Username:</string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="proxyPasswordLabel"> - <property name="text"> - <string>Password:</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QLineEdit" name="proxyPassEdit"> - <property name="echoMode"> - <enum>QLineEdit::Password</enum> - </property> - </widget> - </item> - <item row="2" column="0" colspan="2"> - <widget class="QLabel" name="proxyPlainTextWarningLabel"> - <property name="text"> - <string>Note: Proxy username and password are stored in plain text inside MultiMC's configuration file!</string> - </property> - <property name="wordWrap"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> <widget class="QWidget" name="javaTab"> <attribute name="title"> <string>Java</string> @@ -599,6 +476,12 @@ <layout class="QGridLayout" name="gridLayout_2"> <item row="1" column="1"> <widget class="QSpinBox" name="maxMemSpinBox"> + <property name="toolTip"> + <string>The maximum amount of memory Minecraft is allowed to use.</string> + </property> + <property name="suffix"> + <string> MB</string> + </property> <property name="minimum"> <number>512</number> </property> @@ -629,6 +512,12 @@ </item> <item row="0" column="1"> <widget class="QSpinBox" name="minMemSpinBox"> + <property name="toolTip"> + <string>The amount of memory Minecraft is started with.</string> + </property> + <property name="suffix"> + <string> MB</string> + </property> <property name="minimum"> <number>256</number> </property> @@ -652,6 +541,12 @@ </item> <item row="2" column="1"> <widget class="QSpinBox" name="permGenSpinBox"> + <property name="toolTip"> + <string>The amount of memory available to store loaded Java classes.</string> + </property> + <property name="suffix"> + <string> MB</string> + </property> <property name="minimum"> <number>64</number> </property> @@ -809,6 +704,165 @@ </item> </layout> </widget> + <widget class="QWidget" name="networkTab"> + <property name="toolTip"> + <string>Network settings.</string> + </property> + <attribute name="title"> + <string>Network</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_6"> + <item> + <widget class="QGroupBox" name="proxySettingsBox"> + <property name="title"> + <string>Proxy</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_8"> + <item> + <widget class="QGroupBox" name="proxyTypeBox"> + <property name="title"> + <string>Type</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QRadioButton" name="proxyDefaultBtn"> + <property name="toolTip"> + <string>Uses your system's default proxy settings.</string> + </property> + <property name="text"> + <string>Default</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">proxyGroup</string> + </attribute> + </widget> + </item> + <item> + <widget class="QRadioButton" name="proxyNoneBtn"> + <property name="text"> + <string>None</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">proxyGroup</string> + </attribute> + </widget> + </item> + <item> + <widget class="QRadioButton" name="proxySOCKS5Btn"> + <property name="text"> + <string>SOCKS5</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">proxyGroup</string> + </attribute> + </widget> + </item> + <item> + <widget class="QRadioButton" name="proxyHTTPBtn"> + <property name="text"> + <string>HTTP</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">proxyGroup</string> + </attribute> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="proxyAddrBox"> + <property name="title"> + <string>Address and Port</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QLineEdit" name="proxyAddrEdit"> + <property name="placeholderText"> + <string>127.0.0.1</string> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="proxyPortEdit"> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + <property name="buttonSymbols"> + <enum>QAbstractSpinBox::PlusMinus</enum> + </property> + <property name="maximum"> + <number>65535</number> + </property> + <property name="value"> + <number>8080</number> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="proxyAuthBox"> + <property name="title"> + <string>Authentication</string> + </property> + <layout class="QGridLayout" name="gridLayout_5"> + <item row="0" column="1"> + <widget class="QLineEdit" name="proxyUserEdit"/> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="proxyUsernameLabel"> + <property name="text"> + <string>Username:</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="proxyPasswordLabel"> + <property name="text"> + <string>Password:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLineEdit" name="proxyPassEdit"> + <property name="echoMode"> + <enum>QLineEdit::Password</enum> + </property> + </widget> + </item> + <item row="2" column="0" colspan="2"> + <widget class="QLabel" name="proxyPlainTextWarningLabel"> + <property name="text"> + <string>Note: Proxy username and password are stored in plain text inside MultiMC's configuration file!</string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> </widget> </item> <item> @@ -827,20 +881,6 @@ <tabstop>buttonBox</tabstop> <tabstop>sortLastLaunchedBtn</tabstop> <tabstop>sortByNameBtn</tabstop> - <tabstop>autoUpdateCheckBox</tabstop> - <tabstop>trackFtbBox</tabstop> - <tabstop>ftbLauncherBox</tabstop> - <tabstop>ftbLauncherBrowseBtn</tabstop> - <tabstop>ftbBox</tabstop> - <tabstop>ftbBrowseBtn</tabstop> - <tabstop>instDirTextBox</tabstop> - <tabstop>instDirBrowseBtn</tabstop> - <tabstop>modsDirTextBox</tabstop> - <tabstop>modsDirBrowseBtn</tabstop> - <tabstop>lwjglDirTextBox</tabstop> - <tabstop>lwjglDirBrowseBtn</tabstop> - <tabstop>iconsDirTextBox</tabstop> - <tabstop>iconsDirBrowseBtn</tabstop> <tabstop>jsonEditorTextBox</tabstop> <tabstop>jsonEditorBrowseBtn</tabstop> <tabstop>maximizedCheckBox</tabstop> diff --git a/logic/BaseInstance.cpp b/logic/BaseInstance.cpp index ac66a8d5..222004a3 100644 --- a/logic/BaseInstance.cpp +++ b/logic/BaseInstance.cpp @@ -26,6 +26,7 @@ #include "overridesetting.h" #include "pathutils.h" +#include <cmdutils.h> #include "lists/MinecraftVersionList.h" #include "logic/icons/IconList.h" @@ -81,6 +82,7 @@ BaseInstance::BaseInstance(BaseInstancePrivate *d_in, const QString &rootDir, settings().registerSetting("OverrideConsole", false); settings().registerOverride(globalSettings->getSetting("ShowConsole")); settings().registerOverride(globalSettings->getSetting("AutoCloseConsole")); + settings().registerOverride(globalSettings->getSetting("LogPrePostOutput")); } void BaseInstance::iconUpdated(QString key) @@ -248,8 +250,19 @@ void BaseInstance::setName(QString val) d->m_settings->set("name", val); emit propertiesChanged(this); } + QString BaseInstance::name() const { I_D(BaseInstance); return d->m_settings->get("name").toString(); } + +QString BaseInstance::windowTitle() const +{ + return "MultiMC: " + name(); +} + +QStringList BaseInstance::extraArguments() const +{ + return Util::Commandline::splitArgs(settings().get("JvmArgs").toString()); +} diff --git a/logic/BaseInstance.h b/logic/BaseInstance.h index 01d6dc7d..a861e9b2 100644 --- a/logic/BaseInstance.h +++ b/logic/BaseInstance.h @@ -57,7 +57,7 @@ public: /// The instance's ID. The ID SHALL be determined by MMC internally. The ID IS guaranteed to /// be unique. - QString id() const; + virtual QString id() const; /// get the type of this instance QString instanceType() const; @@ -71,6 +71,9 @@ public: QString name() const; void setName(QString val); + /// Value used for instance window titles + QString windowTitle() const; + QString iconKey() const; void setIconKey(QString val); @@ -81,6 +84,8 @@ public: void setGroupInitial(QString val); void setGroupPost(QString val); + QStringList extraArguments() const; + virtual QString intendedVersionId() const = 0; virtual bool setIntendedVersionId(QString version) = 0; diff --git a/logic/BaseVersion.h b/logic/BaseVersion.h index 1864c94c..43f5942a 100644 --- a/logic/BaseVersion.h +++ b/logic/BaseVersion.h @@ -39,6 +39,15 @@ struct BaseVersion * the kind of version this is (Stable, Beta, Snapshot, whatever) */ virtual QString typeString() const = 0; + + virtual bool operator<(BaseVersion &a) + { + return name() < a.name(); + }; + virtual bool operator>(BaseVersion &a) + { + return name() > a.name(); + }; }; typedef std::shared_ptr<BaseVersion> BaseVersionPtr; diff --git a/logic/JavaChecker.cpp b/logic/JavaChecker.cpp index 6ee7b4cf..b87ee3d5 100644 --- a/logic/JavaChecker.cpp +++ b/logic/JavaChecker.cpp @@ -20,6 +20,9 @@ void JavaChecker::performCheck() process->setArguments(args); process->setProgram(path); process->setProcessChannelMode(QProcess::SeparateChannels); + QLOG_DEBUG() << "Running java checker!"; + QLOG_DEBUG() << "Java: " + path; + QLOG_DEBUG() << "Args: {" + args.join("|") + "}"; connect(process.get(), SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(finished(int, QProcess::ExitStatus))); @@ -42,15 +45,19 @@ void JavaChecker::finished(int exitcode, QProcess::ExitStatus status) result.path = path; result.id = id; } + QLOG_DEBUG() << "Java checker finished with status " << status << " exit code " << exitcode; if (status == QProcess::CrashExit || exitcode == 1) { + QLOG_DEBUG() << "Java checker failed!"; emit checkFinished(result); return; } bool success = true; QString p_stdout = _process->readAllStandardOutput(); + QLOG_DEBUG() << p_stdout; + QMap<QString, QString> results; QStringList lines = p_stdout.split("\n", QString::SkipEmptyParts); for(QString line : lines) @@ -70,6 +77,7 @@ void JavaChecker::finished(int exitcode, QProcess::ExitStatus status) if(!results.contains("os.arch") || !results.contains("java.version") || !success) { + QLOG_DEBUG() << "Java checker failed - couldn't extract required information."; emit checkFinished(result); return; } @@ -84,7 +92,7 @@ void JavaChecker::finished(int exitcode, QProcess::ExitStatus status) result.mojangPlatform = is_64 ? "64" : "32"; result.realPlatform = os_arch; result.javaVersion = java_version; - + QLOG_DEBUG() << "Java checker succeeded."; emit checkFinished(result); } @@ -93,7 +101,7 @@ void JavaChecker::error(QProcess::ProcessError err) if(err == QProcess::FailedToStart) { killTimer.stop(); - + QLOG_DEBUG() << "Java checker has failed to start."; JavaCheckResult result; { result.path = path; @@ -110,6 +118,7 @@ void JavaChecker::timeout() // NO MERCY. NO ABUSE. if(process) { + QLOG_DEBUG() << "Java checker has been killed by timeout."; process->kill(); } } diff --git a/logic/LegacyFTBInstance.cpp b/logic/LegacyFTBInstance.cpp index 84d5a900..6c6bd10b 100644 --- a/logic/LegacyFTBInstance.cpp +++ b/logic/LegacyFTBInstance.cpp @@ -14,3 +14,8 @@ bool LegacyFTBInstance::menuActionEnabled(QString action_name) const { return false; } + +QString LegacyFTBInstance::id() const +{ + return "FTB/" + BaseInstance::id(); +} diff --git a/logic/LegacyFTBInstance.h b/logic/LegacyFTBInstance.h index 2ae72797..70f60535 100644 --- a/logic/LegacyFTBInstance.h +++ b/logic/LegacyFTBInstance.h @@ -10,4 +10,5 @@ public: QObject *parent = 0); virtual QString getStatusbarDescription(); virtual bool menuActionEnabled(QString action_name) const; + virtual QString id() const; }; diff --git a/logic/LegacyInstance.cpp b/logic/LegacyInstance.cpp index 5ab19fc9..2828bcbf 100644 --- a/logic/LegacyInstance.cpp +++ b/logic/LegacyInstance.cpp @@ -47,7 +47,7 @@ std::shared_ptr<Task> LegacyInstance::doUpdate(bool only_prepare) // make sure the jar mods list is initialized by asking for it. auto list = jarModList(); // create an update task - return std::shared_ptr<Task> (new LegacyUpdate(this, only_prepare , this)); + return std::shared_ptr<Task>(new LegacyUpdate(this, only_prepare, this)); } MinecraftProcess *LegacyInstance::prepareForLaunch(MojangAccountPtr account) @@ -58,58 +58,27 @@ MinecraftProcess *LegacyInstance::prepareForLaunch(MojangAccountPtr account) auto pixmap = icon.pixmap(128, 128); pixmap.save(PathCombine(minecraftRoot(), "icon.png"), "PNG"); - // extract the legacy launcher - QString launcherJar = PathCombine(MMC->bin(), "jars", "MultiMCLauncher.jar"); - - // set the process arguments + // create the launch script + QString launchScript; { - QStringList args; - // window size - QString windowSize; + QString windowParams; if (settings().get("LaunchMaximized").toBool()) - windowSize = "max"; + windowParams = "max"; else - windowSize = QString("%1x%2").arg(settings().get("MinecraftWinWidth").toInt()).arg( + windowParams = QString("%1x%2").arg(settings().get("MinecraftWinWidth").toInt()).arg( settings().get("MinecraftWinHeight").toInt()); - // window title - QString windowTitle; - windowTitle.append("MultiMC: ").append(name()); - - // Java arguments - args.append(Util::Commandline::splitArgs(settings().get("JvmArgs").toString())); - -#ifdef OSX - // OSX dock icon and name - args << "-Xdock:icon=icon.png"; - args << QString("-Xdock:name=\"%1\"").arg(windowTitle); -#endif - QString lwjgl = QDir(MMC->settings()->get("LWJGLDir").toString() + "/" + lwjglVersion()) .absolutePath(); - - // launcher arguments - args << QString("-Xms%1m").arg(settings().get("MinMemAlloc").toInt()); - args << QString("-Xmx%1m").arg(settings().get("MaxMemAlloc").toInt()); - args << QString("-XX:PermSize=%1m").arg(settings().get("PermGen").toInt()); -/** -* HACK: Stupid hack for Intel drivers. -* See: https://mojang.atlassian.net/browse/MCL-767 -*/ -#ifdef Q_OS_WIN32 - args << QString("-XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_" - "minecraft.exe.heapdump"); -#endif - - args << "-jar" << launcherJar; - args << account->currentProfile()->name; - args << account->sessionId(); - args << windowTitle; - args << windowSize; - args << lwjgl; - proc->setArguments(args); + launchScript += "userName " + account->currentProfile()->name + "\n"; + launchScript += "sessionId " + account->sessionId() + "\n"; + launchScript += "windowTitle " + windowTitle() + "\n"; + launchScript += "windowParams " + windowParams + "\n"; + launchScript += "lwjgl " + lwjgl + "\n"; + launchScript += "launch legacy\n"; } + proc->setLaunchScript(launchScript); // set the process work path proc->setWorkdir(minecraftRoot()); diff --git a/logic/MinecraftProcess.cpp b/logic/MinecraftProcess.cpp index 209929b7..84610021 100644 --- a/logic/MinecraftProcess.cpp +++ b/logic/MinecraftProcess.cpp @@ -14,14 +14,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include "MultiMC.h" #include "MinecraftProcess.h" #include <QDataStream> #include <QFile> #include <QDir> -//#include <QImage> #include <QProcessEnvironment> +#include <QRegularExpression> #include "BaseInstance.h" @@ -42,6 +43,7 @@ MinecraftProcess::MinecraftProcess(BaseInstance *inst) : m_instance(inst) #ifdef LINUX // Strip IBus + // IBus is a Linux IME framework. For some reason, it breaks MC? if (env.value("XMODIFIERS").contains(IBUS)) env.insert("XMODIFIERS", env.value("XMODIFIERS").replace(IBUS, "")); #endif @@ -57,11 +59,15 @@ MinecraftProcess::MinecraftProcess(BaseInstance *inst) : m_instance(inst) // std channels connect(this, SIGNAL(readyReadStandardError()), SLOT(on_stdErr())); connect(this, SIGNAL(readyReadStandardOutput()), SLOT(on_stdOut())); -} -void MinecraftProcess::setArguments(QStringList args) -{ - m_args = args; + // Log prepost launch command output (can be disabled.) + if (m_instance->settings().get("LogPrePostOutput").toBool()) + { + connect(&m_prepostlaunchprocess, &QProcess::readyReadStandardError, + this, &MinecraftProcess::on_prepost_stdErr); + connect(&m_prepostlaunchprocess, &QProcess::readyReadStandardOutput, + this, &MinecraftProcess::on_prepost_stdOut); + } } void MinecraftProcess::setWorkdir(QString path) @@ -90,47 +96,145 @@ QString MinecraftProcess::censorPrivateInfo(QString in) in.replace(profileId, "<PROFILE ID>"); in.replace(profileName, "<PROFILE NAME>"); } + + auto i = m_account->user().properties.begin(); + while (i != m_account->user().properties.end()) + { + in.replace(i.value(), "<" + i.key().toUpper() + ">"); + ++i; + } + return in; } // console window +MessageLevel::Enum MinecraftProcess::guessLevel(const QString &line, MessageLevel::Enum level) +{ + if (line.contains("[INFO]") || line.contains("[CONFIG]") || line.contains("[FINE]") || + line.contains("[FINER]") || line.contains("[FINEST]")) + level = MessageLevel::Message; + if (line.contains("[SEVERE]") || line.contains("[STDERR]")) + level = MessageLevel::Error; + if (line.contains("[WARNING]")) + level = MessageLevel::Warning; + if (line.contains("Exception in thread") || line.contains(" at ")) + level = MessageLevel::Fatal; + if (line.contains("[DEBUG]")) + level = MessageLevel::Debug; + return level; +} + +MessageLevel::Enum MinecraftProcess::getLevel(const QString &levelName) +{ + if (levelName == "MultiMC") + return MessageLevel::MultiMC; + else if (levelName == "Debug") + return MessageLevel::Debug; + else if (levelName == "Info") + return MessageLevel::Info; + else if (levelName == "Message") + return MessageLevel::Message; + else if (levelName == "Warning") + return MessageLevel::Warning; + else if (levelName == "Error") + return MessageLevel::Error; + else if (levelName == "Fatal") + return MessageLevel::Fatal; + // Skip PrePost, it's not exposed to !![]! + else + return MessageLevel::Message; +} + +void MinecraftProcess::logOutput(const QStringList &lines, + MessageLevel::Enum defaultLevel, + bool guessLevel, bool censor) +{ + for (int i = 0; i < lines.size(); ++i) + logOutput(lines[i], defaultLevel, guessLevel, censor); +} + +void MinecraftProcess::logOutput(QString line, + MessageLevel::Enum defaultLevel, + bool guessLevel, bool censor) +{ + MessageLevel::Enum level = defaultLevel; + + // Level prefix + int endmark = line.indexOf("]!"); + if (line.startsWith("!![") && endmark != -1) + { + level = getLevel(line.left(endmark).mid(3)); + line = line.mid(endmark + 2); + } + // Guess level + else if (guessLevel) + level = this->guessLevel(line, defaultLevel); + + if (censor) + line = censorPrivateInfo(line); + + emit log(line, level); +} + void MinecraftProcess::on_stdErr() { QByteArray data = readAllStandardError(); QString str = m_err_leftover + QString::fromLocal8Bit(data); - m_err_leftover.clear(); + QStringList lines = str.split("\n"); - bool complete = str.endsWith("\n"); + m_err_leftover = lines.takeLast(); - for (int i = 0; i < lines.size() - 1; i++) - { - QString &line = lines[i]; - emit log(censorPrivateInfo(line), getLevel(line, MessageLevel::Error)); - } - if (!complete) - m_err_leftover = lines.last(); + logOutput(lines, MessageLevel::Error); } void MinecraftProcess::on_stdOut() { QByteArray data = readAllStandardOutput(); QString str = m_out_leftover + QString::fromLocal8Bit(data); - m_out_leftover.clear(); + QStringList lines = str.split("\n"); - bool complete = str.endsWith("\n"); + m_out_leftover = lines.takeLast(); - for (int i = 0; i < lines.size() - 1; i++) - { - QString &line = lines[i]; - emit log(censorPrivateInfo(line), getLevel(line, MessageLevel::Message)); - } - if (!complete) - m_out_leftover = lines.last(); + logOutput(lines); +} + +void MinecraftProcess::on_prepost_stdErr() +{ + QByteArray data = m_prepostlaunchprocess.readAllStandardError(); + QString str = m_err_leftover + QString::fromLocal8Bit(data); + + QStringList lines = str.split("\n"); + m_err_leftover = lines.takeLast(); + + logOutput(lines, MessageLevel::PrePost, false, false); +} + +void MinecraftProcess::on_prepost_stdOut() +{ + QByteArray data = m_prepostlaunchprocess.readAllStandardOutput(); + QString str = m_out_leftover + QString::fromLocal8Bit(data); + + QStringList lines = str.split("\n"); + m_out_leftover = lines.takeLast(); + + logOutput(lines, MessageLevel::PrePost, false, false); } // exit handler void MinecraftProcess::finish(int code, ExitStatus status) { + // Flush console window + if (!m_err_leftover.isEmpty()) + { + logOutput(m_err_leftover, MessageLevel::Error); + m_err_leftover.clear(); + } + if (!m_out_leftover.isEmpty()) + { + logOutput(m_out_leftover); + m_out_leftover.clear(); + } + if (!killed) { if (status == NormalExit) @@ -153,15 +257,32 @@ void MinecraftProcess::finish(int code, ExitStatus status) m_prepostlaunchprocess.processEnvironment().insert("INST_EXITCODE", QString(code)); // run post-exit - if (!m_instance->settings().get("PostExitCommand").toString().isEmpty()) + QString postlaunch_cmd = m_instance->settings().get("PostExitCommand").toString(); + if (!postlaunch_cmd.isEmpty()) { - m_prepostlaunchprocess.start(m_instance->settings().get("PostExitCommand").toString()); + emit log(tr("Running Post-Launch command: %1").arg(postlaunch_cmd)); + m_prepostlaunchprocess.start(postlaunch_cmd); m_prepostlaunchprocess.waitForFinished(); + // Flush console window + if (!m_err_leftover.isEmpty()) + { + logOutput(m_err_leftover, MessageLevel::PrePost); + m_err_leftover.clear(); + } + if (!m_out_leftover.isEmpty()) + { + logOutput(m_out_leftover, MessageLevel::PrePost); + m_out_leftover.clear(); + } if (m_prepostlaunchprocess.exitStatus() != NormalExit) { + emit log(tr("Post-Launch command failed with code %1.\n\n").arg(m_prepostlaunchprocess.exitCode()), + MessageLevel::Error); emit postlaunch_failed(m_instance, m_prepostlaunchprocess.exitCode(), m_prepostlaunchprocess.exitStatus()); } + else + emit log(tr("Post-Launch command ran successfully.\n\n")); } m_instance->cleanupAfterRun(); emit ended(m_instance, code, status); @@ -175,27 +296,78 @@ void MinecraftProcess::killMinecraft() void MinecraftProcess::launch() { - if (!m_instance->settings().get("PreLaunchCommand").toString().isEmpty()) + emit log("MultiMC version: " + MMC->version().toString() + "\n\n"); + emit log("Minecraft folder is:\n" + workingDirectory() + "\n\n"); + + QString prelaunch_cmd = m_instance->settings().get("PreLaunchCommand").toString(); + if (!prelaunch_cmd.isEmpty()) { - m_prepostlaunchprocess.start(m_instance->settings().get("PreLaunchCommand").toString()); + // Launch + emit log(tr("Running Pre-Launch command: %1").arg(prelaunch_cmd)); + m_prepostlaunchprocess.start(prelaunch_cmd); + // Wait m_prepostlaunchprocess.waitForFinished(); + // Flush console window + if (!m_err_leftover.isEmpty()) + { + logOutput(m_err_leftover, MessageLevel::PrePost); + m_err_leftover.clear(); + } + if (!m_out_leftover.isEmpty()) + { + logOutput(m_out_leftover, MessageLevel::PrePost); + m_out_leftover.clear(); + } + // Process return values if (m_prepostlaunchprocess.exitStatus() != NormalExit) { + emit log(tr("Pre-Launch command failed with code %1.\n\n").arg(m_prepostlaunchprocess.exitCode()), + MessageLevel::Fatal); m_instance->cleanupAfterRun(); emit prelaunch_failed(m_instance, m_prepostlaunchprocess.exitCode(), m_prepostlaunchprocess.exitStatus()); return; } + else + emit log(tr("Pre-Launch command ran successfully.\n\n")); } m_instance->setLastLaunch(); + auto &settings = m_instance->settings(); + + //////////// java arguments //////////// + QStringList args; + { + // custom args go first. we want to override them if we have our own here. + args.append(m_instance->extraArguments()); + + // OSX dock icon and name + #ifdef OSX + args << "-Xdock:icon=icon.png"; + args << QString("-Xdock:name=\"%1\"").arg(m_instance->windowTitle()); + #endif + + // HACK: Stupid hack for Intel drivers. See: https://mojang.atlassian.net/browse/MCL-767 + #ifdef Q_OS_WIN32 + args << QString("-XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_" + "minecraft.exe.heapdump"); + #endif + + args << QString("-Xms%1m").arg(settings.get("MinMemAlloc").toInt()); + args << QString("-Xmx%1m").arg(settings.get("MaxMemAlloc").toInt()); + args << QString("-XX:PermSize=%1m").arg(settings.get("PermGen").toInt()); + if(!m_nativeFolder.isEmpty()) + args << QString("-Djava.library.path=%1").arg(m_nativeFolder); + args << "-jar" << PathCombine(MMC->bin(), "jars", "NewLaunch.jar"); + } - emit log(QString("Minecraft folder is: '%1'").arg(workingDirectory())); QString JavaPath = m_instance->settings().get("JavaPath").toString(); - emit log(QString("Java path: '%1'").arg(JavaPath)); - QString allArgs = m_args.join("' '"); - emit log(QString("Arguments: '%1'").arg(censorPrivateInfo(allArgs))); - start(JavaPath, m_args); + emit log("Java path is:\n" + JavaPath + "\n\n"); + QString allArgs = args.join(", "); + emit log("Java Arguments:\n[" + censorPrivateInfo(allArgs) + "]\n\n"); + + // instantiate the launcher part + start(JavaPath, args); if (!waitForStarted()) { //: Error message displayed if instace can't start @@ -204,21 +376,7 @@ void MinecraftProcess::launch() emit launch_failed(m_instance); return; } -} - -MessageLevel::Enum MinecraftProcess::getLevel(const QString &line, MessageLevel::Enum level) -{ - - if (line.contains("[INFO]") || line.contains("[CONFIG]") || line.contains("[FINE]") || - line.contains("[FINER]") || line.contains("[FINEST]")) - level = MessageLevel::Message; - if (line.contains("[SEVERE]") || line.contains("[STDERR]")) - level = MessageLevel::Error; - if (line.contains("[WARNING]")) - level = MessageLevel::Warning; - if (line.contains("Exception in thread") || line.contains(" at ")) - level = MessageLevel::Fatal; - if (line.contains("[DEBUG]")) - level = MessageLevel::Debug; - return level; + // send the launch script to the launcher part + QByteArray bytes = launchScript.toUtf8(); + writeData(bytes.constData(), bytes.length()); } diff --git a/logic/MinecraftProcess.h b/logic/MinecraftProcess.h index bd0151cc..70e5df52 100644 --- a/logic/MinecraftProcess.h +++ b/logic/MinecraftProcess.h @@ -18,7 +18,7 @@ #pragma once #include <QProcess> - +#include <QString> #include "BaseInstance.h" /** @@ -31,11 +31,12 @@ enum Enum { MultiMC, /**< MultiMC Messages */ Debug, /**< Debug Messages */ - Info, /**< Info Messages */ + Info, /**< Info Messages */ Message, /**< Standard Messages */ Warning, /**< Warnings */ Error, /**< Errors */ - Fatal /**< Fatal Errors */ + Fatal, /**< Fatal Errors */ + PrePost, /**< Pre/Post Launch command output */ }; } @@ -65,7 +66,15 @@ public: void setWorkdir(QString path); - void setArguments(QStringList args); + void setLaunchScript(QString script) + { + launchScript = script; + } + + void setNativeFolder(QString natives) + { + m_nativeFolder = natives; + } void killMinecraft(); @@ -104,21 +113,30 @@ signals: protected: BaseInstance *m_instance = nullptr; - QStringList m_args; QString m_err_leftover; QString m_out_leftover; QProcess m_prepostlaunchprocess; bool killed = false; MojangAccountPtr m_account; + QString launchScript; + QString m_nativeFolder; protected slots: void finish(int, QProcess::ExitStatus status); void on_stdErr(); void on_stdOut(); + void on_prepost_stdOut(); + void on_prepost_stdErr(); + void logOutput(const QStringList &lines, + MessageLevel::Enum defaultLevel = MessageLevel::Message, + bool guessLevel = true, bool censor = true); + void logOutput(QString line, + MessageLevel::Enum defaultLevel = MessageLevel::Message, + bool guessLevel = true, bool censor = true); private: QString censorPrivateInfo(QString in); - MessageLevel::Enum getLevel(const QString &message, MessageLevel::Enum defaultLevel); - + MessageLevel::Enum guessLevel(const QString &message, MessageLevel::Enum defaultLevel); + MessageLevel::Enum getLevel(const QString &levelName); }; diff --git a/logic/NagUtils.cpp b/logic/NagUtils.cpp index 6f81b3c7..c963a98a 100644 --- a/logic/NagUtils.cpp +++ b/logic/NagUtils.cpp @@ -23,15 +23,15 @@ void checkJVMArgs(QString jvmargs, QWidget *parent) if (jvmargs.contains("-XX:PermSize=") || jvmargs.contains(QRegExp("-Xm[sx]"))) { CustomMessageBox::selectable( - parent, parent->tr("JVM arguments warning"), - parent->tr("You tried to manually set a JVM memory option (using " - " \"-XX:PermSize\", \"-Xmx\" or \"-Xms\") - there" - " are dedicated boxes for these in the settings (Java" - " tab, in the Memory group at the top).\n" - "Your manual settings will be overridden by the" - " dedicated options.\n" - "This message will be displayed until you remove them" - " from the JVM arguments."), + parent, QObject::tr("JVM arguments warning"), + QObject::tr("You tried to manually set a JVM memory option (using " + " \"-XX:PermSize\", \"-Xmx\" or \"-Xms\") - there" + " are dedicated boxes for these in the settings (Java" + " tab, in the Memory group at the top).\n" + "Your manual settings will be overridden by the" + " dedicated options.\n" + "This message will be displayed until you remove them" + " from the JVM arguments."), QMessageBox::Warning)->exec(); } } diff --git a/logic/OneSixFTBInstance.cpp b/logic/OneSixFTBInstance.cpp index 4bb5cf42..e50a5b53 100644 --- a/logic/OneSixFTBInstance.cpp +++ b/logic/OneSixFTBInstance.cpp @@ -92,6 +92,11 @@ OneSixFTBInstance::OneSixFTBInstance(const QString &rootDir, SettingsObject *set } } +QString OneSixFTBInstance::id() const +{ + return "FTB/" + BaseInstance::id(); +} + QString OneSixFTBInstance::getStatusbarDescription() { return "OneSix FTB: " + intendedVersionId(); diff --git a/logic/OneSixFTBInstance.h b/logic/OneSixFTBInstance.h index 7600090c..dc028819 100644 --- a/logic/OneSixFTBInstance.h +++ b/logic/OneSixFTBInstance.h @@ -15,6 +15,8 @@ public: virtual std::shared_ptr<Task> doUpdate(bool only_prepare) override; + virtual QString id() const; + private: std::shared_ptr<OneSixLibrary> m_forge; }; diff --git a/logic/OneSixInstance.cpp b/logic/OneSixInstance.cpp index 2392c683..3cfc1c76 100644 --- a/logic/OneSixInstance.cpp +++ b/logic/OneSixInstance.cpp @@ -13,12 +13,14 @@ * limitations under the License. */ +#include "MultiMC.h" #include "OneSixInstance.h" #include "OneSixInstance_p.h" #include "OneSixUpdate.h" #include "MinecraftProcess.h" #include "OneSixVersion.h" #include "JavaChecker.h" +#include "logic/icons/IconList.h" #include <setting.h> #include <pathutils.h> @@ -27,6 +29,7 @@ #include "gui/dialogs/OneSixModEditDialog.h" #include "logger/QsLog.h" #include "logic/assets/AssetsUtils.h" +#include <QIcon> OneSixInstance::OneSixInstance(const QString &rootDir, SettingsObject *setting_obj, QObject *parent) @@ -40,7 +43,7 @@ OneSixInstance::OneSixInstance(const QString &rootDir, SettingsObject *setting_o std::shared_ptr<Task> OneSixInstance::doUpdate(bool only_prepare) { - return std::shared_ptr<Task> (new OneSixUpdate(this, only_prepare)); + return std::shared_ptr<Task>(new OneSixUpdate(this, only_prepare)); } QString replaceTokensIn(QString text, QMap<QString, QString> with) @@ -78,47 +81,50 @@ QDir OneSixInstance::reconstructAssets(std::shared_ptr<OneSixVersion> version) QFile indexFile(indexPath); QDir virtualRoot(PathCombine(virtualDir.path(), version->assets)); - if(!indexFile.exists()) + if (!indexFile.exists()) { QLOG_ERROR() << "No assets index file" << indexPath << "; can't reconstruct assets"; return virtualRoot; } - QLOG_DEBUG() << "reconstructAssets" << assetsDir.path() << indexDir.path() << objectDir.path() << virtualDir.path() << virtualRoot.path(); + QLOG_DEBUG() << "reconstructAssets" << assetsDir.path() << indexDir.path() + << objectDir.path() << virtualDir.path() << virtualRoot.path(); AssetsIndex index; bool loadAssetsIndex = AssetsUtils::loadAssetsIndexJson(indexPath, &index); - if(loadAssetsIndex) + if (loadAssetsIndex && index.isVirtual) { - if(index.isVirtual) - { - QLOG_INFO() << "Reconstructing virtual assets folder at" << virtualRoot.path(); + QLOG_INFO() << "Reconstructing virtual assets folder at" << virtualRoot.path(); - for(QString map : index.objects.keys()) + for (QString map : index.objects.keys()) + { + AssetObject asset_object = index.objects.value(map); + QString target_path = PathCombine(virtualRoot.path(), map); + QFile target(target_path); + + QString tlk = asset_object.hash.left(2); + + QString original_path = + PathCombine(PathCombine(objectDir.path(), tlk), asset_object.hash); + QFile original(original_path); + if(!original.exists()) + continue; + if (!target.exists()) { - AssetObject asset_object = index.objects.value(map); - QString target_path = PathCombine(virtualRoot.path(), map); - QFile target(target_path); - - QString tlk = asset_object.hash.left(2); - - QString original_path = PathCombine(PathCombine(objectDir.path(), tlk), asset_object.hash); - QFile original(original_path); - if(!target.exists()) - { - QFileInfo info(target_path); - QDir target_dir = info.dir(); - //QLOG_DEBUG() << target_dir; - if(!target_dir.exists()) QDir("").mkpath(target_dir.path()); - - bool couldCopy = original.copy(target_path); - QLOG_DEBUG() << " Copying" << original_path << "to" << target_path << QString::number(couldCopy);// << original.errorString(); - } + QFileInfo info(target_path); + QDir target_dir = info.dir(); + // QLOG_DEBUG() << target_dir; + if (!target_dir.exists()) + QDir("").mkpath(target_dir.path()); + + bool couldCopy = original.copy(target_path); + QLOG_DEBUG() << " Copying" << original_path << "to" << target_path + << QString::number(couldCopy); // << original.errorString(); } - - // TODO: Write last used time to virtualRoot/.lastused } + + // TODO: Write last used time to virtualRoot/.lastused } return virtualRoot; @@ -155,7 +161,7 @@ QStringList OneSixInstance::processMinecraftArgs(MojangAccountPtr account) auto user = account->user(); QJsonObject userAttrs; - for(auto key: user.properties.keys()) + for (auto key : user.properties.keys()) { auto array = QJsonArray::fromStringList(user.properties.values(key)); userAttrs.insert(key, array); @@ -180,71 +186,56 @@ MinecraftProcess *OneSixInstance::prepareForLaunch(MojangAccountPtr account) { I_D(OneSixInstance); - QString natives_dir_raw = PathCombine(instanceRoot(), "natives/"); + QIcon icon = MMC->icons()->getIcon(iconKey()); + auto pixmap = icon.pixmap(128, 128); + pixmap.save(PathCombine(minecraftRoot(), "icon.png"), "PNG"); auto version = d->version; if (!version) return nullptr; - - QStringList args; - args.append(Util::Commandline::splitArgs(settings().get("JvmArgs").toString())); - args << QString("-Xms%1m").arg(settings().get("MinMemAlloc").toInt()); - args << QString("-Xmx%1m").arg(settings().get("MaxMemAlloc").toInt()); - args << QString("-XX:PermSize=%1m").arg(settings().get("PermGen").toInt()); - -/** - * HACK: Stupid hack for Intel drivers. - * See: https://mojang.atlassian.net/browse/MCL-767 - */ -#ifdef Q_OS_WIN32 - args << QString("-XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_" - "minecraft.exe.heapdump"); -#endif - - QDir natives_dir(natives_dir_raw); - args << QString("-Djava.library.path=%1").arg(natives_dir.absolutePath()); - QString classPath; + QString launchScript; { auto libs = version->getActiveNormalLibs(); for (auto lib : libs) { QFileInfo fi(QString("libraries/") + lib->storagePath()); - classPath.append(fi.absoluteFilePath()); -#ifdef Q_OS_WIN32 - classPath.append(';'); -#else - classPath.append(':'); -#endif + launchScript += "cp " + fi.absoluteFilePath() + "\n"; } QString targetstr = "versions/" + version->id + "/" + version->id + ".jar"; QFileInfo fi(targetstr); - classPath.append(fi.absoluteFilePath()); + launchScript += "cp " + fi.absoluteFilePath() + "\n"; } - if (classPath.size()) + launchScript += "mainClass " + version->mainClass + "\n"; + + for (auto param : processMinecraftArgs(account)) { - args << "-cp"; - args << classPath; + launchScript += "param " + param + "\n"; } - args << version->mainClass; - args.append(processMinecraftArgs(account)); // Set the width and height for 1.6 instances bool maximize = settings().get("LaunchMaximized").toBool(); if (maximize) { // this is probably a BAD idea - // args << QString("--fullscreen"); + // launchScript += "param --fullscreen\n"; } else { - args << QString("--width") << settings().get("MinecraftWinWidth").toString(); - args << QString("--height") << settings().get("MinecraftWinHeight").toString(); + launchScript += + "param --width\nparam " + settings().get("MinecraftWinWidth").toString() + "\n"; + launchScript += + "param --height\nparam " + settings().get("MinecraftWinHeight").toString() + "\n"; } + QDir natives_dir(PathCombine(instanceRoot(), "natives/")); + launchScript += "windowTitle " + windowTitle() + "\n"; + launchScript += "natives " + natives_dir.absolutePath() + "\n"; + launchScript += "launch onesix\n"; // create the process and set its parameters MinecraftProcess *proc = new MinecraftProcess(this); - proc->setArguments(args); proc->setWorkdir(minecraftRoot()); + proc->setLaunchScript(launchScript); + // proc->setNativeFolder(natives_dir.absolutePath()); return proc; } diff --git a/logic/OneSixLibrary.cpp b/logic/OneSixLibrary.cpp index 4b6ed9dc..d1eceb0e 100644 --- a/logic/OneSixLibrary.cpp +++ b/logic/OneSixLibrary.cpp @@ -19,6 +19,9 @@ #include "OneSixRule.h" #include "OpSys.h" #include "logic/net/URLConstants.h" +#include <pathutils.h> +#include <JlCompress.h> +#include "logger/QsLog.h" void OneSixLibrary::finalize() { @@ -133,6 +136,90 @@ QString OneSixLibrary::hint() return m_hint; } +bool OneSixLibrary::filesExist() +{ + QString storage = storagePath(); + if (storage.contains("${arch}")) + { + QString cooked_storage = storage; + cooked_storage.replace("${arch}", "32"); + QFileInfo info32(PathCombine("libraries", cooked_storage)); + if (!info32.exists()) + { + return false; + } + cooked_storage = storage; + cooked_storage.replace("${arch}", "64"); + QFileInfo info64(PathCombine("libraries", cooked_storage)); + if (!info64.exists()) + { + return false; + } + } + else + { + QFileInfo info(PathCombine("libraries", storage)); + if (!info.exists()) + { + return false; + } + } + return true; +} + +bool OneSixLibrary::extractTo(QString target_dir) +{ + QString storage = storagePath(); + if (storage.contains("${arch}")) + { + QString cooked_storage = storage; + cooked_storage.replace("${arch}", "32"); + QString origin = PathCombine("libraries", cooked_storage); + QString target_dir_cooked = PathCombine(target_dir, "32"); + if(!ensureFolderPathExists(target_dir_cooked)) + { + QLOG_ERROR() << "Couldn't create folder " + target_dir_cooked; + return false; + } + if (JlCompress::extractWithExceptions(origin, target_dir_cooked, extract_excludes) + .isEmpty()) + { + QLOG_ERROR() << "Couldn't extract " + origin; + return false; + } + cooked_storage = storage; + cooked_storage.replace("${arch}", "64"); + origin = PathCombine("libraries", cooked_storage); + target_dir_cooked = PathCombine(target_dir, "32"); + if(!ensureFolderPathExists(target_dir_cooked)) + { + QLOG_ERROR() << "Couldn't create folder " + target_dir_cooked; + return false; + } + if (JlCompress::extractWithExceptions(origin, target_dir_cooked, extract_excludes) + .isEmpty()) + { + QLOG_ERROR() << "Couldn't extract " + origin; + return false; + } + } + else + { + if(!ensureFolderPathExists(target_dir)) + { + QLOG_ERROR() << "Couldn't create folder " + target_dir; + return false; + } + QString path = PathCombine("libraries", storage); + if (JlCompress::extractWithExceptions(path, target_dir, extract_excludes).isEmpty()) + { + QLOG_ERROR() << "Couldn't extract " + path; + return false; + } + } + return true; +} + QJsonObject OneSixLibrary::toJson() { QJsonObject libRoot; diff --git a/logic/OneSixLibrary.h b/logic/OneSixLibrary.h index 3f0bc83d..227cdbef 100644 --- a/logic/OneSixLibrary.h +++ b/logic/OneSixLibrary.h @@ -126,4 +126,7 @@ public: /// set a hint about how to treat the library. This is an MMC extension. void setHint(QString hint); QString hint(); + + bool extractTo(QString target_dir); + bool filesExist(); }; diff --git a/logic/OneSixUpdate.cpp b/logic/OneSixUpdate.cpp index 4d93477a..0119ab07 100644 --- a/logic/OneSixUpdate.cpp +++ b/logic/OneSixUpdate.cpp @@ -54,17 +54,7 @@ void OneSixUpdate::executeTask() if (m_only_prepare) { - /* - * FIXME: in offline mode, do not proceed! - */ - setStatus(tr("Testing the Java installation...")); - QString java_path = m_inst->settings().get("JavaPath").toString(); - - checker.reset(new JavaChecker()); - connect(checker.get(), SIGNAL(checkFinished(JavaCheckResult)), this, - SLOT(checkFinishedOffline(JavaCheckResult))); - checker->path = java_path; - checker->performCheck(); + prepareForLaunch(); return; } @@ -83,46 +73,8 @@ void OneSixUpdate::executeTask() } else { - checkJavaOnline(); - } -} - -void OneSixUpdate::checkJavaOnline() -{ - setStatus(tr("Testing the Java installation...")); - QString java_path = m_inst->settings().get("JavaPath").toString(); - - checker.reset(new JavaChecker()); - connect(checker.get(), SIGNAL(checkFinished(JavaCheckResult)), this, - SLOT(checkFinishedOnline(JavaCheckResult))); - checker->path = java_path; - checker->performCheck(); -} - -void OneSixUpdate::checkFinishedOnline(JavaCheckResult result) -{ - if (result.valid) - { - java_is_64bit = result.is_64bit; jarlibStart(); } - else - { - emitFailed("The java binary doesn't work. Check the settings and correct the problem"); - } -} - -void OneSixUpdate::checkFinishedOffline(JavaCheckResult result) -{ - if (result.valid) - { - java_is_64bit = result.is_64bit; - prepareForLaunch(); - } - else - { - emitFailed("The java binary doesn't work. Check the settings and correct the problem"); - } } void OneSixUpdate::versionFileStart() @@ -130,7 +82,8 @@ void OneSixUpdate::versionFileStart() QLOG_INFO() << m_inst->name() << ": getting version file."; setStatus(tr("Getting the version files from Mojang...")); - QString urlstr = "http://" + URLConstants::AWS_DOWNLOAD_VERSIONS + targetVersion->descriptor() + "/" + targetVersion->descriptor() + ".json"; + QString urlstr = "http://" + URLConstants::AWS_DOWNLOAD_VERSIONS + + targetVersion->descriptor() + "/" + targetVersion->descriptor() + ".json"; auto job = new NetJob("Version index"); job->addNetAction(ByteArrayDownload::make(QUrl(urlstr))); specificVersionDownloadJob.reset(job); @@ -186,7 +139,7 @@ void OneSixUpdate::versionFileFinished() } inst->reloadFullVersion(); - checkJavaOnline(); + jarlibStart(); } void OneSixUpdate::versionFileFailed() @@ -230,7 +183,7 @@ void OneSixUpdate::assetIndexFinished() { emitFailed("Failed to read the assets index!"); } - + QList<Md5EtagDownloadPtr> dls; for (auto object : index.objects.values()) { @@ -245,17 +198,17 @@ void OneSixUpdate::assetIndexFinished() dls.append(objectDL); } } - if(dls.size()) + if (dls.size()) { setStatus(tr("Getting the assets files from Mojang...")); auto job = new NetJob("Assets for " + inst->name()); - for(auto dl: dls) + for (auto dl : dls) job->addNetAction(dl); jarlibDownloadJob.reset(job); connect(jarlibDownloadJob.get(), SIGNAL(succeeded()), SLOT(assetsFinished())); connect(jarlibDownloadJob.get(), SIGNAL(failed()), SLOT(assetsFailed())); connect(jarlibDownloadJob.get(), SIGNAL(progress(qint64, qint64)), - SIGNAL(progress(qint64, qint64))); + SIGNAL(progress(qint64, qint64))); jarlibDownloadJob->start(); return; } @@ -277,8 +230,6 @@ void OneSixUpdate::assetsFailed() emitFailed("Failed to download assets!"); } - - void OneSixUpdate::jarlibStart() { setStatus(tr("Getting the library files from Mojang...")); @@ -318,24 +269,37 @@ void OneSixUpdate::jarlibStart() { if (lib->hint() == "local") continue; - QString subst = java_is_64bit ? "64" : "32"; - QString storage = lib->storagePath(); - QString dl = lib->downloadUrl(); - storage.replace("${arch}", subst); - dl.replace("${arch}", subst); + QString raw_storage = lib->storagePath(); + QString raw_dl = lib->downloadUrl(); - auto entry = metacache->resolveEntry("libraries", storage); - if (entry->stale) + auto f = [&](QString storage, QString dl) { - if (lib->hint() == "forge-pack-xz") + auto entry = metacache->resolveEntry("libraries", storage); + if (entry->stale) { - ForgeLibs.append(ForgeXzDownload::make(storage, entry)); - } - else - { - jarlibDownloadJob->addNetAction(CacheDownload::make(dl, entry)); + if (lib->hint() == "forge-pack-xz") + { + ForgeLibs.append(ForgeXzDownload::make(storage, entry)); + } + else + { + jarlibDownloadJob->addNetAction(CacheDownload::make(dl, entry)); + } } + }; + if (raw_storage.contains("${arch}")) + { + QString cooked_storage = raw_storage; + QString cooked_dl = raw_dl; + f(cooked_storage.replace("${arch}", "32"), cooked_dl.replace("${arch}", "32")); + cooked_storage = raw_storage; + cooked_dl = raw_dl; + f(cooked_storage.replace("${arch}", "64"), cooked_dl.replace("${arch}", "64")); + } + else + { + f(raw_storage, raw_dl); } } // TODO: think about how to propagate this from the original json file... or IF AT ALL @@ -376,7 +340,6 @@ void OneSixUpdate::prepareForLaunch() // delete any leftovers, if they are present. onesix_inst->cleanupAfterRun(); - // Acquire swag QString natives_dir_raw = PathCombine(onesix_inst->instanceRoot(), "natives/"); auto version = onesix_inst->getFullVersion(); if (!version) @@ -385,38 +348,30 @@ void OneSixUpdate::prepareForLaunch() "it or changing the version."); return; } - auto libs_to_extract = version->getActiveNativeLibs(); - - // Acquire bag - bool success = ensureFolderPathExists(natives_dir_raw); - if (!success) - { - emitFailed("Could not create the native library folder:\n" + natives_dir_raw + - "\nMake sure MultiMC has appropriate permissions and there is enough space " - "on the storage device."); - return; - } - - // Put swag in the bag - QString subst = java_is_64bit ? "64" : "32"; - for (auto lib : libs_to_extract) + /* + * emitFailed("Could not create the native library folder:\n" + natives_dir_raw + + "\nMake sure MultiMC has appropriate permissions and there is enough + space " + "on the storage device."); + */ + for (auto lib : version->getActiveNativeLibs()) { - QString storage = lib->storagePath(); - storage.replace("${arch}", subst); - - QString path = "libraries/" + storage; - QLOG_INFO() << "Will extract " << path.toLocal8Bit(); - if (JlCompress::extractWithExceptions(path, natives_dir_raw, lib->extract_excludes) - .isEmpty()) + if (!lib->filesExist()) + { + emitFailed("Native library is missing some files:\n" + lib->storagePath() + + "\n\nRun the instance at least once in online mode to get all the " + "required files."); + return; + } + if (!lib->extractTo(natives_dir_raw)) { - emitFailed( - "Could not extract the native library:\n" + path + - "\nMake sure MultiMC has appropriate permissions and there is enough space " - "on the storage device."); + emitFailed("Could not extract the native library:\n" + lib->storagePath() + " to " + + natives_dir_raw + + "\n\nMake sure MultiMC has appropriate permissions and there is enough " + "space on the storage device."); return; } } - // Show them your war face! emitSucceeded(); } diff --git a/logic/OneSixUpdate.h b/logic/OneSixUpdate.h index 00b769c7..bc717a94 100644 --- a/logic/OneSixUpdate.h +++ b/logic/OneSixUpdate.h @@ -21,7 +21,6 @@ #include "logic/net/NetJob.h" #include "logic/tasks/Task.h" -#include "logic/JavaChecker.h" class MinecraftVersion; class BaseInstance; @@ -50,10 +49,6 @@ slots: void assetsFinished(); void assetsFailed(); - void checkJavaOnline(); - void checkFinishedOnline(JavaCheckResult result); - void checkFinishedOffline(JavaCheckResult result); - // extract the appropriate libraries void prepareForLaunch(); @@ -65,7 +60,4 @@ private: std::shared_ptr<MinecraftVersion> targetVersion; BaseInstance *m_inst = nullptr; bool m_only_prepare = false; - std::shared_ptr<JavaChecker> checker; - - bool java_is_64bit = false; }; diff --git a/logic/SkinUtils.h b/logic/SkinUtils.h index 324f86b8..64353b72 100644 --- a/logic/SkinUtils.h +++ b/logic/SkinUtils.h @@ -19,5 +19,5 @@ namespace SkinUtils { -QPixmap getFaceFromCache(QString username, int height = 48, int width = 48); +QPixmap getFaceFromCache(QString username, int height = 64, int width = 64); } diff --git a/logic/auth/MojangAccount.cpp b/logic/auth/MojangAccount.cpp index a462eda5..f41985ec 100644 --- a/logic/auth/MojangAccount.cpp +++ b/logic/auth/MojangAccount.cpp @@ -198,7 +198,11 @@ void MojangAccount::authFailed(QString reason) { // This is emitted when the yggdrasil tasks time out or are cancelled. // -> we treat the error as no-op - if (reason != "Yggdrasil task cancelled.") + if (reason == "Yggdrasil task cancelled.") + { + // do nothing + } + else { m_online = false; m_accessToken = QString(); diff --git a/logic/icons/IconList.cpp b/logic/icons/IconList.cpp index cda2db7b..d76e6fbb 100644 --- a/logic/icons/IconList.cpp +++ b/logic/icons/IconList.cpp @@ -336,6 +336,23 @@ QIcon IconList::getIcon(QString key) return QIcon(); } +QIcon IconList::getBigIcon(QString key) +{ + int icon_index = getIconIndex(key); + + if (icon_index == -1) + key = "infinity"; + + // Fallback for icons that don't exist. + icon_index = getIconIndex(key); + + if (icon_index == -1) + return QIcon(); + + QPixmap bigone = icons[icon_index].icon().pixmap(256,256).scaled(256,256); + return QIcon(bigone); +} + int IconList::getIconIndex(QString key) { if (key == "default") diff --git a/logic/icons/IconList.h b/logic/icons/IconList.h index 322411d1..4ee3f782 100644 --- a/logic/icons/IconList.h +++ b/logic/icons/IconList.h @@ -34,6 +34,7 @@ public: virtual ~IconList() {}; QIcon getIcon(QString key); + QIcon getBigIcon(QString key); int getIconIndex(QString key); virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; diff --git a/logic/lists/ForgeVersionList.cpp b/logic/lists/ForgeVersionList.cpp index 56eca744..4902dc64 100644 --- a/logic/lists/ForgeVersionList.cpp +++ b/logic/lists/ForgeVersionList.cpp @@ -187,7 +187,7 @@ bool ForgeListLoadTask::parseForgeList(QList<BaseVersionPtr> &out) QByteArray data; { auto dlJob = listDownload; - auto filename = std::dynamic_pointer_cast<CacheDownload>(dlJob)->m_target_path; + auto filename = std::dynamic_pointer_cast<CacheDownload>(dlJob)->getTargetFilepath(); QFile listFile(filename); if (!listFile.open(QIODevice::ReadOnly)) { @@ -303,7 +303,7 @@ bool ForgeListLoadTask::parseForgeGradleList(QList<BaseVersionPtr> &out) QByteArray data; { auto dlJob = gradleListDownload; - auto filename = std::dynamic_pointer_cast<CacheDownload>(dlJob)->m_target_path; + auto filename = std::dynamic_pointer_cast<CacheDownload>(dlJob)->getTargetFilepath(); QFile listFile(filename); if (!listFile.open(QIODevice::ReadOnly)) { @@ -404,12 +404,8 @@ void ForgeListLoadTask::listDownloaded() { return; } - - qSort(list.begin(), list.end(), [](const BaseVersionPtr & p1, const BaseVersionPtr & p2) - { - // TODO better comparison (takes major/minor/build number into account) - return p1->name() > p2->name(); - }); + std::sort(list.begin(), list.end(), [](const BaseVersionPtr & l, const BaseVersionPtr & r) + { return (*l > *r); }); m_list->updateListData(list); diff --git a/logic/lists/ForgeVersionList.h b/logic/lists/ForgeVersionList.h index 924084ae..b19d3f56 100644 --- a/logic/lists/ForgeVersionList.h +++ b/logic/lists/ForgeVersionList.h @@ -29,25 +29,38 @@ typedef std::shared_ptr<ForgeVersion> ForgeVersionPtr; struct ForgeVersion : public BaseVersion { - virtual QString descriptor() + virtual QString descriptor() override { return filename; } ; - virtual QString name() + virtual QString name() override { return "Forge " + jobbuildver; } ; - virtual QString typeString() const + virtual QString typeString() const override { if (installer_url.isEmpty()) return "Universal"; else return "Installer"; } - ; + virtual bool operator<(BaseVersion &a) override + { + ForgeVersion *pa = dynamic_cast<ForgeVersion *>(&a); + if(!pa) + return true; + return m_buildnr < pa->m_buildnr; + } + virtual bool operator>(BaseVersion &a) override + { + ForgeVersion *pa = dynamic_cast<ForgeVersion *>(&a); + if(!pa) + return false; + return m_buildnr > pa->m_buildnr; + } int m_buildnr = 0; QString universal_url; QString changelog_url; diff --git a/logic/lists/InstanceList.cpp b/logic/lists/InstanceList.cpp index bfd183d9..0d4eab95 100644 --- a/logic/lists/InstanceList.cpp +++ b/logic/lists/InstanceList.cpp @@ -308,45 +308,52 @@ void InstanceList::loadForgeInstances(QMap<QString, QString> groupMap) return; } dir.cd("ModPacks"); - auto fpath = dir.absoluteFilePath("modpacks.xml"); - QFile f(fpath); - QLOG_INFO() << "Discovering FTB instances -- " << fpath; - if (!f.open(QFile::ReadOnly)) - return; - - // read the FTB packs XML. - QXmlStreamReader reader(&f); - while (!reader.atEnd()) + auto allFiles = dir.entryList(QDir::Readable | QDir::Files, QDir::Name); + for(auto filename: allFiles) { - switch (reader.readNext()) - { - case QXmlStreamReader::StartElement: + if(!filename.endsWith(".xml")) + continue; + auto fpath = dir.absoluteFilePath(filename); + QFile f(fpath); + QLOG_INFO() << "Discovering FTB instances -- " << fpath; + if (!f.open(QFile::ReadOnly)) + continue; + + // read the FTB packs XML. + QXmlStreamReader reader(&f); + while (!reader.atEnd()) { - if (reader.name() == "modpack") + switch (reader.readNext()) { - QXmlStreamAttributes attrs = reader.attributes(); - FTBRecord record; - record.dir = attrs.value("dir").toString(); - QDir test(dataDir.absoluteFilePath(record.dir)); - if(!test.exists()) - continue; - record.name = attrs.value("name").toString(); - record.logo = attrs.value("logo").toString(); - record.mcVersion = attrs.value("mcVersion").toString(); - record.description = attrs.value("description").toString(); - records.append(record); + case QXmlStreamReader::StartElement: + { + if (reader.name() == "modpack") + { + QXmlStreamAttributes attrs = reader.attributes(); + FTBRecord record; + record.dir = attrs.value("dir").toString(); + QDir test(dataDir.absoluteFilePath(record.dir)); + if(!test.exists()) + continue; + record.name = attrs.value("name").toString(); + record.logo = attrs.value("logo").toString(); + record.mcVersion = attrs.value("mcVersion").toString(); + record.description = attrs.value("description").toString(); + records.append(record); + } + break; + } + case QXmlStreamReader::EndElement: + break; + case QXmlStreamReader::Characters: + break; + default: + break; } - break; - } - case QXmlStreamReader::EndElement: - break; - case QXmlStreamReader::Characters: - break; - default: - break; } + f.close(); } - f.close(); + if(!records.size()) { QLOG_INFO() << "No FTB instances to load."; diff --git a/logic/net/CacheDownload.cpp b/logic/net/CacheDownload.cpp index 6eadae39..d2a9bdee 100644 --- a/logic/net/CacheDownload.cpp +++ b/logic/net/CacheDownload.cpp @@ -33,25 +33,44 @@ CacheDownload::CacheDownload(QUrl url, MetaEntryPtr entry) void CacheDownload::start() { + m_status = Job_InProgress; if (!m_entry->stale) { + m_status = Job_Finished; emit succeeded(m_index_within_job); return; } - m_output_file.setFileName(m_target_path); + // create a new save file + m_output_file.reset(new QSaveFile(m_target_path)); + // if there already is a file and md5 checking is in effect and it can be opened if (!ensureFilePathExists(m_target_path)) { + QLOG_ERROR() << "Could not create folder for " + m_target_path; + m_status = Job_Failed; + emit failed(m_index_within_job); + return; + } + if (!m_output_file->open(QIODevice::WriteOnly)) + { + QLOG_ERROR() << "Could not open " + m_target_path + " for writing"; + m_status = Job_Failed; emit failed(m_index_within_job); return; } QLOG_INFO() << "Downloading " << m_url.toString(); QNetworkRequest request(m_url); - if (m_entry->remote_changed_timestamp.size()) - request.setRawHeader(QString("If-Modified-Since").toLatin1(), - m_entry->remote_changed_timestamp.toLatin1()); - if (m_entry->etag.size()) - request.setRawHeader(QString("If-None-Match").toLatin1(), m_entry->etag.toLatin1()); + + // check file consistency first. + QFile current(m_target_path); + if(current.exists() && current.size() != 0) + { + if (m_entry->remote_changed_timestamp.size()) + request.setRawHeader(QString("If-Modified-Since").toLatin1(), + m_entry->remote_changed_timestamp.toLatin1()); + if (m_entry->etag.size()) + request.setRawHeader(QString("If-None-Match").toLatin1(), m_entry->etag.toLatin1()); + } request.setHeader(QNetworkRequest::UserAgentHeader, "MultiMC/5.0 (Cached)"); @@ -77,76 +96,74 @@ void CacheDownload::downloadProgress(qint64 bytesReceived, qint64 bytesTotal) void CacheDownload::downloadError(QNetworkReply::NetworkError error) { // error happened during download. - QLOG_ERROR() << "Failed" << m_url.toString() << "with reason" << error; + QLOG_ERROR() << "Failed " << m_url.toString() << " with reason " << error; m_status = Job_Failed; } void CacheDownload::downloadFinished() { // if the download succeeded - if (m_status != Job_Failed) + if (m_status == Job_Failed) { + m_output_file->cancelWriting(); + m_reply.reset(); + emit failed(m_index_within_job); + return; + } + // if we wrote any data to the save file, we try to commit the data to the real file. + if (wroteAnyData) + { // nothing went wrong... - m_status = Job_Finished; - if (m_output_file.isOpen()) + if (m_output_file->commit()) { - // save the data to the downloadable if we aren't saving to file - m_output_file.close(); + m_status = Job_Finished; m_entry->md5sum = md5sum.result().toHex().constData(); } else { - if (m_output_file.open(QIODevice::ReadOnly)) - { - m_entry->md5sum = - QCryptographicHash::hash(m_output_file.readAll(), QCryptographicHash::Md5) - .toHex() - .constData(); - m_output_file.close(); - } - } - QFileInfo output_file_info(m_target_path); - - m_entry->etag = m_reply->rawHeader("ETag").constData(); - if (m_reply->hasRawHeader("Last-Modified")) - { - m_entry->remote_changed_timestamp = m_reply->rawHeader("Last-Modified").constData(); + QLOG_ERROR() << "Failed to commit changes to " << m_target_path; + m_output_file->cancelWriting(); + m_reply.reset(); + m_status = Job_Failed; + emit failed(m_index_within_job); + return; } - m_entry->local_changed_timestamp = - output_file_info.lastModified().toUTC().toMSecsSinceEpoch(); - m_entry->stale = false; - MMC->metacache()->updateEntry(m_entry); - - m_reply.reset(); - emit succeeded(m_index_within_job); - return; } - // else the download failed else { - m_output_file.close(); - m_output_file.remove(); - m_reply.reset(); - emit failed(m_index_within_job); - return; + m_status = Job_Finished; + } + + // then get rid of the save file + m_output_file.reset(); + + QFileInfo output_file_info(m_target_path); + + m_entry->etag = m_reply->rawHeader("ETag").constData(); + if (m_reply->hasRawHeader("Last-Modified")) + { + m_entry->remote_changed_timestamp = m_reply->rawHeader("Last-Modified").constData(); } + m_entry->local_changed_timestamp = + output_file_info.lastModified().toUTC().toMSecsSinceEpoch(); + m_entry->stale = false; + MMC->metacache()->updateEntry(m_entry); + + m_reply.reset(); + emit succeeded(m_index_within_job); + return; } void CacheDownload::downloadReadyRead() { - if (!m_output_file.isOpen()) - { - if (!m_output_file.open(QIODevice::WriteOnly)) - { - /* - * Can't open the file... the job failed - */ - m_reply->abort(); - emit failed(m_index_within_job); - return; - } - } QByteArray ba = m_reply->readAll(); md5sum.addData(ba); - m_output_file.write(ba); + if (m_output_file->write(ba) != ba.size()) + { + QLOG_ERROR() << "Failed writing into " + m_target_path; + m_status = Job_Failed; + m_reply->abort(); + emit failed(m_index_within_job); + } + wroteAnyData = true; } diff --git a/logic/net/CacheDownload.h b/logic/net/CacheDownload.h index e25aecd2..154f5988 100644 --- a/logic/net/CacheDownload.h +++ b/logic/net/CacheDownload.h @@ -17,29 +17,34 @@ #include "NetAction.h" #include "HttpMetaCache.h" -#include <QFile> -#include <qcryptographichash.h> +#include <QCryptographicHash> +#include <QSaveFile> typedef std::shared_ptr<class CacheDownload> CacheDownloadPtr; class CacheDownload : public NetAction { Q_OBJECT -public: +private: MetaEntryPtr m_entry; /// if saving to file, use the one specified in this string QString m_target_path; /// this is the output file, if any - QFile m_output_file; + std::shared_ptr<QSaveFile> m_output_file; /// the hash-as-you-download QCryptographicHash md5sum; + bool wroteAnyData = false; + public: explicit CacheDownload(QUrl url, MetaEntryPtr entry); static CacheDownloadPtr make(QUrl url, MetaEntryPtr entry) { return CacheDownloadPtr(new CacheDownload(url, entry)); } - + QString getTargetFilepath() + { + return m_target_path; + } protected slots: virtual void downloadProgress(qint64 bytesReceived, qint64 bytesTotal); diff --git a/logic/net/URLConstants.h b/logic/net/URLConstants.h index 9579198d..8cb1f3fd 100644 --- a/logic/net/URLConstants.h +++ b/logic/net/URLConstants.h @@ -31,4 +31,6 @@ const QString SKINS_BASE("skins.minecraft.net/MinecraftSkins/"); const QString AUTH_BASE("authserver.mojang.com/"); const QString FORGE_LEGACY_URL("http://files.minecraftforge.net/minecraftforge/json"); const QString FORGE_GRADLE_URL("http://files.minecraftforge.net/maven/net/minecraftforge/forge/json"); +const QString MOJANG_STATUS_URL("http://status.mojang.com/check"); +const QString MOJANG_STATUS_NEWS_URL("http://status.mojang.com/news"); } diff --git a/logic/status/StatusChecker.cpp b/logic/status/StatusChecker.cpp new file mode 100644 index 00000000..66f800ae --- /dev/null +++ b/logic/status/StatusChecker.cpp @@ -0,0 +1,137 @@ +/* Copyright 2013 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "StatusChecker.h" + +#include <logic/net/URLConstants.h> + +#include <QByteArray> +#include <QDomDocument> + +#include <logger/QsLog.h> + +StatusChecker::StatusChecker() +{ + +} + +void StatusChecker::reloadStatus() +{ + if (isLoadingStatus()) + { + // QLOG_INFO() << "Ignored request to reload status. Currently reloading already."; + return; + } + + // QLOG_INFO() << "Reloading status."; + + NetJob* job = new NetJob("Status JSON"); + job->addNetAction(ByteArrayDownload::make(URLConstants::MOJANG_STATUS_URL)); + QObject::connect(job, &NetJob::succeeded, this, &StatusChecker::statusDownloadFinished); + QObject::connect(job, &NetJob::failed, this, &StatusChecker::statusDownloadFailed); + m_statusNetJob.reset(job); + job->start(); +} + +void StatusChecker::statusDownloadFinished() +{ + QLOG_DEBUG() << "Finished loading status JSON."; + + QByteArray data; + { + ByteArrayDownloadPtr dl = std::dynamic_pointer_cast<ByteArrayDownload>(m_statusNetJob->first()); + data = dl->m_data; + m_statusNetJob.reset(); + } + + QJsonParseError jsonError; + QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &jsonError); + + if (jsonError.error != QJsonParseError::NoError) + { + fail("Error parsing status JSON:" + jsonError.errorString()); + return; + } + + if (!jsonDoc.isArray()) + { + fail("Error parsing status JSON: JSON root is not an array"); + return; + } + + QJsonArray root = jsonDoc.array(); + + for(auto status = root.begin(); status != root.end(); ++status) + { + QVariantMap map = (*status).toObject().toVariantMap(); + + for (QVariantMap::const_iterator iter = map.begin(); iter != map.end(); ++iter) + { + QString key = iter.key(); + QVariant value = iter.value(); + + if(value.type() == QVariant::Type::String) + { + m_statusEntries.insert(key, value.toString()); + //QLOG_DEBUG() << "Status JSON object: " << key << m_statusEntries[key]; + } + else + { + fail("Malformed status JSON: expected status type to be a string."); + return; + } + } + } + + succeed(); +} + +void StatusChecker::statusDownloadFailed() +{ + fail("Failed to load status JSON."); +} + + +QMap<QString, QString> StatusChecker::getStatusEntries() const +{ + return m_statusEntries; +} + +bool StatusChecker::isLoadingStatus() const +{ + return m_statusNetJob.get() != nullptr; +} + +QString StatusChecker::getLastLoadErrorMsg() const +{ + return m_lastLoadError; +} + +void StatusChecker::succeed() +{ + m_lastLoadError = ""; + QLOG_DEBUG() << "Status loading succeeded."; + m_statusNetJob.reset(); + emit statusLoaded(); +} + +void StatusChecker::fail(const QString& errorMsg) +{ + m_lastLoadError = errorMsg; + QLOG_DEBUG() << "Failed to load status:" << errorMsg; + m_statusNetJob.reset(); + emit statusLoadingFailed(errorMsg); +} + diff --git a/logic/status/StatusChecker.h b/logic/status/StatusChecker.h new file mode 100644 index 00000000..1cb01836 --- /dev/null +++ b/logic/status/StatusChecker.h @@ -0,0 +1,57 @@ +/* Copyright 2013 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include <QObject> +#include <QString> +#include <QList> + +#include <logic/net/NetJob.h> + +class StatusChecker : public QObject +{ + Q_OBJECT +public: + StatusChecker(); + + QString getLastLoadErrorMsg() const; + + bool isStatusLoaded() const; + + bool isLoadingStatus() const; + + QMap<QString, QString> getStatusEntries() const; + + void Q_SLOT reloadStatus(); + +signals: + void statusLoaded(); + void statusLoadingFailed(QString errorMsg); + +protected slots: + void statusDownloadFinished(); + void statusDownloadFailed(); + +protected: + QMap<QString, QString> m_statusEntries; + NetJobPtr m_statusNetJob; + bool m_loadedStatus; + QString m_lastLoadError; + + void Q_SLOT succeed(); + void Q_SLOT fail(const QString& errorMsg); +}; + diff --git a/logic/updater/NotificationChecker.cpp b/logic/updater/NotificationChecker.cpp index b2d67632..191e90a3 100644 --- a/logic/updater/NotificationChecker.cpp +++ b/logic/updater/NotificationChecker.cpp @@ -55,7 +55,7 @@ void NotificationChecker::downloadSucceeded(int) { m_entries.clear(); - QFile file(m_download->m_output_file.fileName()); + QFile file(m_download->getTargetFilepath()); if (file.open(QFile::ReadOnly)) { QJsonArray root = QJsonDocument::fromJson(file.readAll()).array(); diff --git a/logic/updater/UpdateChecker.cpp b/logic/updater/UpdateChecker.cpp index 8a280dd1..8e2aa8b3 100644 --- a/logic/updater/UpdateChecker.cpp +++ b/logic/updater/UpdateChecker.cpp @@ -30,7 +30,6 @@ UpdateChecker::UpdateChecker() { - m_currentChannel = VERSION_CHANNEL; m_channelListUrl = CHANLIST_URL; m_updateChecking = false; m_chanListLoading = false; diff --git a/logic/updater/UpdateChecker.h b/logic/updater/UpdateChecker.h index 7840cedc..3b0ee28d 100644 --- a/logic/updater/UpdateChecker.h +++ b/logic/updater/UpdateChecker.h @@ -27,7 +27,6 @@ public: UpdateChecker(); void checkForUpdate(bool notifyNoUpdate); - void setCurrentChannel(const QString &channel) { m_currentChannel = channel; } void setChannelListUrl(const QString &url) { m_channelListUrl = url; } /*! @@ -83,7 +82,6 @@ private: QString m_repoUrl; QString m_channelListUrl; - QString m_currentChannel; QList<ChannelListEntry> m_channels; @@ -4,6 +4,7 @@ int main_gui(MultiMC &app) { // show main window + QIcon::setThemeName("multimc"); MainWindow mainWin; mainWin.restoreState(QByteArray::fromBase64(MMC->settings()->get("MainWindowState").toByteArray())); mainWin.restoreGeometry(QByteArray::fromBase64(MMC->settings()->get("MainWindowGeometry").toByteArray())); @@ -18,8 +19,9 @@ int main(int argc, char *argv[]) // initialize Qt MultiMC app(argc, argv); - Q_INIT_RESOURCE(graphics); - Q_INIT_RESOURCE(generated); + Q_INIT_RESOURCE(instances); + Q_INIT_RESOURCE(multimc); + Q_INIT_RESOURCE(backgrounds); switch (app.status()) { diff --git a/MultiMC.icns b/resources/MultiMC.icns Binary files differindex f96fd5a4..f96fd5a4 100644 --- a/MultiMC.icns +++ b/resources/MultiMC.icns diff --git a/resources/icons/MultiMC.ico b/resources/MultiMC.ico Binary files differindex 734af0fb..734af0fb 100644 --- a/resources/icons/MultiMC.ico +++ b/resources/MultiMC.ico diff --git a/MultiMC.manifest b/resources/MultiMC.manifest index 3acf8f7f..3acf8f7f 100644 --- a/MultiMC.manifest +++ b/resources/MultiMC.manifest diff --git a/resources/XdgIcon.theme b/resources/XdgIcon.theme deleted file mode 100644 index ad26482e..00000000 --- a/resources/XdgIcon.theme +++ /dev/null @@ -1,12 +0,0 @@ -[Icon Theme] -Name=MultiMC -Comment=MultiMC Default Icons -Inherits=default -Directories=scalable/apps - -[scalable/apps] -Size=48 -Type=scalable -MinSize=1 -MaxSize=512 -Context=Applications diff --git a/resources/backgrounds/backgrounds.qrc b/resources/backgrounds/backgrounds.qrc new file mode 100644 index 00000000..55de139e --- /dev/null +++ b/resources/backgrounds/backgrounds.qrc @@ -0,0 +1,6 @@ +<!DOCTYPE RCC> +<RCC version="1.0"> + <qresource prefix="/backgrounds"> + <file alias="kitteh">catbgrnd2.png</file> + </qresource> +</RCC> diff --git a/resources/catbgrnd2.png b/resources/backgrounds/catbgrnd2.png Binary files differindex 2b949e0b..2b949e0b 100644 --- a/resources/catbgrnd2.png +++ b/resources/backgrounds/catbgrnd2.png diff --git a/resources/icons/toolbar/Cat.png b/resources/icons/toolbar/Cat.png Binary files differdeleted file mode 100644 index 4fcda3ea..00000000 --- a/resources/icons/toolbar/Cat.png +++ /dev/null diff --git a/resources/icons/toolbar/InstCopy.png b/resources/icons/toolbar/InstCopy.png Binary files differdeleted file mode 100644 index c8f9db41..00000000 --- a/resources/icons/toolbar/InstCopy.png +++ /dev/null diff --git a/resources/icons/toolbar/refresh.png b/resources/icons/toolbar/refresh.png Binary files differdeleted file mode 100644 index 734729bf..00000000 --- a/resources/icons/toolbar/refresh.png +++ /dev/null diff --git a/resources/icons/instances/brick.png b/resources/instances/brick.png Binary files differindex 0b534366..0b534366 100644 --- a/resources/icons/instances/brick.png +++ b/resources/instances/brick.png diff --git a/resources/icons/instances/chicken.png b/resources/instances/chicken.png Binary files differindex f870467a..f870467a 100644 --- a/resources/icons/instances/chicken.png +++ b/resources/instances/chicken.png diff --git a/resources/icons/instances/chicken128.png b/resources/instances/chicken128.png Binary files differindex 71f6dedc..71f6dedc 100644 --- a/resources/icons/instances/chicken128.png +++ b/resources/instances/chicken128.png diff --git a/resources/icons/instances/creeper.png b/resources/instances/creeper.png Binary files differindex a67ecfc3..a67ecfc3 100644 --- a/resources/icons/instances/creeper.png +++ b/resources/instances/creeper.png diff --git a/resources/icons/instances/creeper128.png b/resources/instances/creeper128.png Binary files differindex 41b7d07d..41b7d07d 100644 --- a/resources/icons/instances/creeper128.png +++ b/resources/instances/creeper128.png diff --git a/resources/icons/instances/derp.png b/resources/instances/derp.png Binary files differindex 4c361942..4c361942 100644 --- a/resources/icons/instances/derp.png +++ b/resources/instances/derp.png diff --git a/resources/icons/instances/diamond.png b/resources/instances/diamond.png Binary files differindex 376ab901..376ab901 100644 --- a/resources/icons/instances/diamond.png +++ b/resources/instances/diamond.png diff --git a/resources/icons/instances/dirt.png b/resources/instances/dirt.png Binary files differindex 9e19eb8f..9e19eb8f 100644 --- a/resources/icons/instances/dirt.png +++ b/resources/instances/dirt.png diff --git a/resources/icons/instances/enderman.png b/resources/instances/enderman.png Binary files differindex 9f3a72b3..9f3a72b3 100644 --- a/resources/icons/instances/enderman.png +++ b/resources/instances/enderman.png diff --git a/resources/icons/instances/enderpearl.png b/resources/instances/enderpearl.png Binary files differindex a818eb8e..a818eb8e 100644 --- a/resources/icons/instances/enderpearl.png +++ b/resources/instances/enderpearl.png diff --git a/resources/icons/instances/enderpearl128.png b/resources/instances/enderpearl128.png Binary files differindex 0a5bf91a..0a5bf91a 100644 --- a/resources/icons/instances/enderpearl128.png +++ b/resources/instances/enderpearl128.png diff --git a/resources/icons/instances/ftb_glow.png b/resources/instances/ftb_glow.png Binary files differindex c4e6fd5d..c4e6fd5d 100644 --- a/resources/icons/instances/ftb_glow.png +++ b/resources/instances/ftb_glow.png diff --git a/resources/icons/instances/ftb_glow128.png b/resources/instances/ftb_glow128.png Binary files differindex 86632b21..86632b21 100644 --- a/resources/icons/instances/ftb_glow128.png +++ b/resources/instances/ftb_glow128.png diff --git a/resources/icons/instances/ftb_logo.png b/resources/instances/ftb_logo.png Binary files differindex 20df7171..20df7171 100644 --- a/resources/icons/instances/ftb_logo.png +++ b/resources/instances/ftb_logo.png diff --git a/resources/icons/instances/ftb_logo128.png b/resources/instances/ftb_logo128.png Binary files differindex e725b7fe..e725b7fe 100644 --- a/resources/icons/instances/ftb_logo128.png +++ b/resources/instances/ftb_logo128.png diff --git a/resources/icons/instances/gear.png b/resources/instances/gear.png Binary files differindex da9ba2f9..da9ba2f9 100644 --- a/resources/icons/instances/gear.png +++ b/resources/instances/gear.png diff --git a/resources/icons/instances/gear128.png b/resources/instances/gear128.png Binary files differindex 75c68a66..75c68a66 100644 --- a/resources/icons/instances/gear128.png +++ b/resources/instances/gear128.png diff --git a/resources/icons/instances/gold.png b/resources/instances/gold.png Binary files differindex 9bedda16..9bedda16 100644 --- a/resources/icons/instances/gold.png +++ b/resources/instances/gold.png diff --git a/resources/icons/instances/grass.png b/resources/instances/grass.png Binary files differindex f1694547..f1694547 100644 --- a/resources/icons/instances/grass.png +++ b/resources/instances/grass.png diff --git a/resources/icons/instances/herobrine.png b/resources/instances/herobrine.png Binary files differindex e5460da3..e5460da3 100644 --- a/resources/icons/instances/herobrine.png +++ b/resources/instances/herobrine.png diff --git a/resources/icons/instances/herobrine128.png b/resources/instances/herobrine128.png Binary files differindex 13f1494c..13f1494c 100644 --- a/resources/icons/instances/herobrine128.png +++ b/resources/instances/herobrine128.png diff --git a/resources/icons/instances/infinity.png b/resources/instances/infinity.png Binary files differindex bd94a3dc..bd94a3dc 100644 --- a/resources/icons/instances/infinity.png +++ b/resources/instances/infinity.png diff --git a/resources/icons/instances/infinity128.png b/resources/instances/infinity128.png Binary files differindex 226847fb..226847fb 100644 --- a/resources/icons/instances/infinity128.png +++ b/resources/instances/infinity128.png diff --git a/resources/instances/instances.qrc b/resources/instances/instances.qrc new file mode 100644 index 00000000..ec3cdf21 --- /dev/null +++ b/resources/instances/instances.qrc @@ -0,0 +1,35 @@ +<!DOCTYPE RCC> +<RCC version="1.0"> + <qresource prefix="/icons/instances"> + <!-- Source: Mojang --> + <file alias="brick">brick.png</file> + <file alias="diamond">diamond.png</file> + <file alias="dirt">dirt.png</file> + <file alias="gold">gold.png</file> + <file alias="grass">grass.png</file> + <file alias="stone">stone.png</file> + <file alias="tnt">tnt.png</file> + <file alias="iron">iron.png</file> + <file alias="planks">planks.png</file> + + <!-- Source: Unknown --> + <file alias="derp">derp.png</file> + <file alias="enderman">enderman.png</file> + + <!-- Our own. --> + <file alias="chicken">chicken128.png</file> + <file alias="creeper">creeper128.png</file> + <file alias="enderpearl">enderpearl128.png</file> + <file alias="ftb-glow">ftb_glow128.png</file> + <file alias="ftb-logo">ftb_logo128.png</file> + <file alias="gear">gear128.png</file> + <file alias="herobrine">herobrine128.png</file> + <file alias="infinity">infinity128.png</file> + <file alias="magitech">magitech128.png</file> + <file alias="meat">meat128.png</file> + <file alias="netherstar">netherstar128.png</file> + <file alias="skeleton">skeleton128.png</file> + <file alias="squarecreeper">squarecreeper128.png</file> + <file alias="steve">steve128.png</file> + </qresource> +</RCC> diff --git a/resources/icons/instances/iron.png b/resources/instances/iron.png Binary files differindex 28960782..28960782 100644 --- a/resources/icons/instances/iron.png +++ b/resources/instances/iron.png diff --git a/resources/icons/instances/magitech.png b/resources/instances/magitech.png Binary files differindex 6fd8ff60..6fd8ff60 100644 --- a/resources/icons/instances/magitech.png +++ b/resources/instances/magitech.png diff --git a/resources/icons/instances/magitech128.png b/resources/instances/magitech128.png Binary files differindex 0f81a199..0f81a199 100644 --- a/resources/icons/instances/magitech128.png +++ b/resources/instances/magitech128.png diff --git a/resources/icons/instances/meat.png b/resources/instances/meat.png Binary files differindex 6694859d..6694859d 100644 --- a/resources/icons/instances/meat.png +++ b/resources/instances/meat.png diff --git a/resources/icons/instances/meat128.png b/resources/instances/meat128.png Binary files differindex fefc9bf1..fefc9bf1 100644 --- a/resources/icons/instances/meat128.png +++ b/resources/instances/meat128.png diff --git a/resources/icons/instances/netherstar.png b/resources/instances/netherstar.png Binary files differindex 43cb5113..43cb5113 100644 --- a/resources/icons/instances/netherstar.png +++ b/resources/instances/netherstar.png diff --git a/resources/icons/instances/netherstar128.png b/resources/instances/netherstar128.png Binary files differindex 132085f0..132085f0 100644 --- a/resources/icons/instances/netherstar128.png +++ b/resources/instances/netherstar128.png diff --git a/resources/icons/instances/planks.png b/resources/instances/planks.png Binary files differindex 7fcf8467..7fcf8467 100644 --- a/resources/icons/instances/planks.png +++ b/resources/instances/planks.png diff --git a/resources/icons/instances/skeleton.png b/resources/instances/skeleton.png Binary files differindex 0c8d3505..0c8d3505 100644 --- a/resources/icons/instances/skeleton.png +++ b/resources/instances/skeleton.png diff --git a/resources/icons/instances/skeleton128.png b/resources/instances/skeleton128.png Binary files differindex 55fcf5a9..55fcf5a9 100644 --- a/resources/icons/instances/skeleton128.png +++ b/resources/instances/skeleton128.png diff --git a/resources/icons/instances/squarecreeper.png b/resources/instances/squarecreeper.png Binary files differindex b78c4ae0..b78c4ae0 100644 --- a/resources/icons/instances/squarecreeper.png +++ b/resources/instances/squarecreeper.png diff --git a/resources/icons/instances/squarecreeper128.png b/resources/instances/squarecreeper128.png Binary files differindex c82d8406..c82d8406 100644 --- a/resources/icons/instances/squarecreeper128.png +++ b/resources/instances/squarecreeper128.png diff --git a/resources/icons/instances/steve.png b/resources/instances/steve.png Binary files differindex 07c6acde..07c6acde 100644 --- a/resources/icons/instances/steve.png +++ b/resources/instances/steve.png diff --git a/resources/icons/instances/steve128.png b/resources/instances/steve128.png Binary files differindex a07cbd2f..a07cbd2f 100644 --- a/resources/icons/instances/steve128.png +++ b/resources/instances/steve128.png diff --git a/resources/icons/instances/stone.png b/resources/instances/stone.png Binary files differindex 34f9a751..34f9a751 100644 --- a/resources/icons/instances/stone.png +++ b/resources/instances/stone.png diff --git a/resources/icons/instances/tnt.png b/resources/instances/tnt.png Binary files differindex e40d404d..e40d404d 100644 --- a/resources/icons/instances/tnt.png +++ b/resources/instances/tnt.png diff --git a/multimc.rc b/resources/multimc.rc index 2140e3f4..ca92e2c3 100644 --- a/multimc.rc +++ b/resources/multimc.rc @@ -3,7 +3,7 @@ #endif #include <windows.h> -IDI_ICON1 ICON DISCARDABLE "resources/icons/MultiMC.ico" +IDI_ICON1 ICON DISCARDABLE "MultiMC.ico" 1 RT_MANIFEST "MultiMC.manifest" VS_VERSION_INFO VERSIONINFO diff --git a/resources/multimc/16x16/about.png b/resources/multimc/16x16/about.png Binary files differnew file mode 100644 index 00000000..a6a986e1 --- /dev/null +++ b/resources/multimc/16x16/about.png diff --git a/resources/multimc/16x16/bug.png b/resources/multimc/16x16/bug.png Binary files differnew file mode 100644 index 00000000..0c5b78b4 --- /dev/null +++ b/resources/multimc/16x16/bug.png diff --git a/resources/multimc/16x16/cat.png b/resources/multimc/16x16/cat.png Binary files differnew file mode 100644 index 00000000..e6e31b44 --- /dev/null +++ b/resources/multimc/16x16/cat.png diff --git a/resources/multimc/16x16/centralmods.png b/resources/multimc/16x16/centralmods.png Binary files differnew file mode 100644 index 00000000..c1b91c76 --- /dev/null +++ b/resources/multimc/16x16/centralmods.png diff --git a/resources/multimc/16x16/checkupdate.png b/resources/multimc/16x16/checkupdate.png Binary files differnew file mode 100644 index 00000000..f3742058 --- /dev/null +++ b/resources/multimc/16x16/checkupdate.png diff --git a/resources/multimc/16x16/copy.png b/resources/multimc/16x16/copy.png Binary files differnew file mode 100644 index 00000000..ccaed9e1 --- /dev/null +++ b/resources/multimc/16x16/copy.png diff --git a/resources/multimc/16x16/help.png b/resources/multimc/16x16/help.png Binary files differnew file mode 100644 index 00000000..e6edf6ba --- /dev/null +++ b/resources/multimc/16x16/help.png diff --git a/resources/multimc/16x16/new.png b/resources/multimc/16x16/new.png Binary files differnew file mode 100644 index 00000000..2e56f589 --- /dev/null +++ b/resources/multimc/16x16/new.png diff --git a/resources/multimc/16x16/news.png b/resources/multimc/16x16/news.png Binary files differnew file mode 100644 index 00000000..872e85db --- /dev/null +++ b/resources/multimc/16x16/news.png diff --git a/resources/multimc/16x16/noaccount.png b/resources/multimc/16x16/noaccount.png Binary files differnew file mode 100644 index 00000000..b49bcf36 --- /dev/null +++ b/resources/multimc/16x16/noaccount.png diff --git a/resources/multimc/16x16/refresh.png b/resources/multimc/16x16/refresh.png Binary files differnew file mode 100644 index 00000000..86b6f82c --- /dev/null +++ b/resources/multimc/16x16/refresh.png diff --git a/resources/multimc/16x16/settings.png b/resources/multimc/16x16/settings.png Binary files differnew file mode 100644 index 00000000..b916cd24 --- /dev/null +++ b/resources/multimc/16x16/settings.png diff --git a/resources/multimc/16x16/viewfolder.png b/resources/multimc/16x16/viewfolder.png Binary files differnew file mode 100644 index 00000000..98b8a944 --- /dev/null +++ b/resources/multimc/16x16/viewfolder.png diff --git a/resources/icons/toolbar/about.png b/resources/multimc/22x22/about.png Binary files differindex 57775e25..57775e25 100644 --- a/resources/icons/toolbar/about.png +++ b/resources/multimc/22x22/about.png diff --git a/resources/icons/toolbar/ReportBug.png b/resources/multimc/22x22/bug.png Binary files differindex 90481bba..90481bba 100644 --- a/resources/icons/toolbar/ReportBug.png +++ b/resources/multimc/22x22/bug.png diff --git a/resources/multimc/22x22/cat.png b/resources/multimc/22x22/cat.png Binary files differnew file mode 100644 index 00000000..3ea7ba69 --- /dev/null +++ b/resources/multimc/22x22/cat.png diff --git a/resources/icons/toolbar/centralmods.png b/resources/multimc/22x22/centralmods.png Binary files differindex a10f9a2b..a10f9a2b 100644 --- a/resources/icons/toolbar/centralmods.png +++ b/resources/multimc/22x22/centralmods.png diff --git a/resources/icons/toolbar/checkupdate.png b/resources/multimc/22x22/checkupdate.png Binary files differindex badb200c..badb200c 100644 --- a/resources/icons/toolbar/checkupdate.png +++ b/resources/multimc/22x22/checkupdate.png diff --git a/resources/multimc/22x22/copy.png b/resources/multimc/22x22/copy.png Binary files differnew file mode 100644 index 00000000..ea236a24 --- /dev/null +++ b/resources/multimc/22x22/copy.png diff --git a/resources/icons/toolbar/help.png b/resources/multimc/22x22/help.png Binary files differindex da79b3e3..da79b3e3 100644 --- a/resources/icons/toolbar/help.png +++ b/resources/multimc/22x22/help.png diff --git a/resources/icons/toolbar/new.png b/resources/multimc/22x22/new.png Binary files differindex c707fbbf..c707fbbf 100644 --- a/resources/icons/toolbar/new.png +++ b/resources/multimc/22x22/new.png diff --git a/resources/icons/toolbar/NewsIcon.png b/resources/multimc/22x22/news.png Binary files differindex 1953bf7b..1953bf7b 100644 --- a/resources/icons/toolbar/NewsIcon.png +++ b/resources/multimc/22x22/news.png diff --git a/resources/multimc/22x22/refresh.png b/resources/multimc/22x22/refresh.png Binary files differnew file mode 100644 index 00000000..45b5535c --- /dev/null +++ b/resources/multimc/22x22/refresh.png diff --git a/resources/icons/toolbar/settings.png b/resources/multimc/22x22/settings.png Binary files differindex daf56aad..daf56aad 100644 --- a/resources/icons/toolbar/settings.png +++ b/resources/multimc/22x22/settings.png diff --git a/resources/icons/toolbar/viewfolder.png b/resources/multimc/22x22/viewfolder.png Binary files differindex b645167f..b645167f 100644 --- a/resources/icons/toolbar/viewfolder.png +++ b/resources/multimc/22x22/viewfolder.png diff --git a/resources/multimc/24x24/cat.png b/resources/multimc/24x24/cat.png Binary files differnew file mode 100644 index 00000000..c93245f6 --- /dev/null +++ b/resources/multimc/24x24/cat.png diff --git a/resources/multimc/24x24/noaccount.png b/resources/multimc/24x24/noaccount.png Binary files differnew file mode 100644 index 00000000..ac12437c --- /dev/null +++ b/resources/multimc/24x24/noaccount.png diff --git a/resources/multimc/32x32/about.png b/resources/multimc/32x32/about.png Binary files differnew file mode 100644 index 00000000..5174c4f1 --- /dev/null +++ b/resources/multimc/32x32/about.png diff --git a/resources/multimc/32x32/bug.png b/resources/multimc/32x32/bug.png Binary files differnew file mode 100644 index 00000000..ada46653 --- /dev/null +++ b/resources/multimc/32x32/bug.png diff --git a/resources/multimc/32x32/cat.png b/resources/multimc/32x32/cat.png Binary files differnew file mode 100644 index 00000000..78ff98e9 --- /dev/null +++ b/resources/multimc/32x32/cat.png diff --git a/resources/multimc/32x32/centralmods.png b/resources/multimc/32x32/centralmods.png Binary files differnew file mode 100644 index 00000000..cd2b8208 --- /dev/null +++ b/resources/multimc/32x32/centralmods.png diff --git a/resources/multimc/32x32/checkupdate.png b/resources/multimc/32x32/checkupdate.png Binary files differnew file mode 100644 index 00000000..754005f9 --- /dev/null +++ b/resources/multimc/32x32/checkupdate.png diff --git a/resources/multimc/32x32/copy.png b/resources/multimc/32x32/copy.png Binary files differnew file mode 100644 index 00000000..c137b0f1 --- /dev/null +++ b/resources/multimc/32x32/copy.png diff --git a/resources/multimc/32x32/help.png b/resources/multimc/32x32/help.png Binary files differnew file mode 100644 index 00000000..b3854278 --- /dev/null +++ b/resources/multimc/32x32/help.png diff --git a/resources/multimc/32x32/new.png b/resources/multimc/32x32/new.png Binary files differnew file mode 100644 index 00000000..a3555ba4 --- /dev/null +++ b/resources/multimc/32x32/new.png diff --git a/resources/multimc/32x32/news.png b/resources/multimc/32x32/news.png Binary files differnew file mode 100644 index 00000000..c579fd44 --- /dev/null +++ b/resources/multimc/32x32/news.png diff --git a/resources/multimc/32x32/noaccount.png b/resources/multimc/32x32/noaccount.png Binary files differnew file mode 100644 index 00000000..a73afc94 --- /dev/null +++ b/resources/multimc/32x32/noaccount.png diff --git a/resources/multimc/32x32/refresh.png b/resources/multimc/32x32/refresh.png Binary files differnew file mode 100644 index 00000000..afa2a9d7 --- /dev/null +++ b/resources/multimc/32x32/refresh.png diff --git a/resources/multimc/32x32/settings.png b/resources/multimc/32x32/settings.png Binary files differnew file mode 100644 index 00000000..a9c0817c --- /dev/null +++ b/resources/multimc/32x32/settings.png diff --git a/resources/multimc/32x32/viewfolder.png b/resources/multimc/32x32/viewfolder.png Binary files differnew file mode 100644 index 00000000..74ab8fa6 --- /dev/null +++ b/resources/multimc/32x32/viewfolder.png diff --git a/resources/multimc/48x48/about.png b/resources/multimc/48x48/about.png Binary files differnew file mode 100644 index 00000000..b4ac71b8 --- /dev/null +++ b/resources/multimc/48x48/about.png diff --git a/resources/multimc/48x48/bug.png b/resources/multimc/48x48/bug.png Binary files differnew file mode 100644 index 00000000..298f9397 --- /dev/null +++ b/resources/multimc/48x48/bug.png diff --git a/resources/multimc/48x48/cat.png b/resources/multimc/48x48/cat.png Binary files differnew file mode 100644 index 00000000..25912a3c --- /dev/null +++ b/resources/multimc/48x48/cat.png diff --git a/resources/multimc/48x48/centralmods.png b/resources/multimc/48x48/centralmods.png Binary files differnew file mode 100644 index 00000000..d927e39b --- /dev/null +++ b/resources/multimc/48x48/centralmods.png diff --git a/resources/multimc/48x48/checkupdate.png b/resources/multimc/48x48/checkupdate.png Binary files differnew file mode 100644 index 00000000..2e2c7d6b --- /dev/null +++ b/resources/multimc/48x48/checkupdate.png diff --git a/resources/multimc/48x48/copy.png b/resources/multimc/48x48/copy.png Binary files differnew file mode 100644 index 00000000..ea40e34b --- /dev/null +++ b/resources/multimc/48x48/copy.png diff --git a/resources/multimc/48x48/help.png b/resources/multimc/48x48/help.png Binary files differnew file mode 100644 index 00000000..82d828fa --- /dev/null +++ b/resources/multimc/48x48/help.png diff --git a/resources/multimc/48x48/new.png b/resources/multimc/48x48/new.png Binary files differnew file mode 100644 index 00000000..a81753b3 --- /dev/null +++ b/resources/multimc/48x48/new.png diff --git a/resources/multimc/48x48/news.png b/resources/multimc/48x48/news.png Binary files differnew file mode 100644 index 00000000..0f82d857 --- /dev/null +++ b/resources/multimc/48x48/news.png diff --git a/resources/multimc/48x48/noaccount.png b/resources/multimc/48x48/noaccount.png Binary files differnew file mode 100644 index 00000000..4703796c --- /dev/null +++ b/resources/multimc/48x48/noaccount.png diff --git a/resources/multimc/48x48/refresh.png b/resources/multimc/48x48/refresh.png Binary files differnew file mode 100644 index 00000000..0b08b238 --- /dev/null +++ b/resources/multimc/48x48/refresh.png diff --git a/resources/multimc/48x48/settings.png b/resources/multimc/48x48/settings.png Binary files differnew file mode 100644 index 00000000..6674eb23 --- /dev/null +++ b/resources/multimc/48x48/settings.png diff --git a/resources/multimc/48x48/viewfolder.png b/resources/multimc/48x48/viewfolder.png Binary files differnew file mode 100644 index 00000000..0492a736 --- /dev/null +++ b/resources/multimc/48x48/viewfolder.png diff --git a/resources/multimc/64x64/about.png b/resources/multimc/64x64/about.png Binary files differnew file mode 100644 index 00000000..b83e9269 --- /dev/null +++ b/resources/multimc/64x64/about.png diff --git a/resources/multimc/64x64/bug.png b/resources/multimc/64x64/bug.png Binary files differnew file mode 100644 index 00000000..156b0315 --- /dev/null +++ b/resources/multimc/64x64/bug.png diff --git a/resources/multimc/64x64/cat.png b/resources/multimc/64x64/cat.png Binary files differnew file mode 100644 index 00000000..2cc21f80 --- /dev/null +++ b/resources/multimc/64x64/cat.png diff --git a/resources/multimc/64x64/centralmods.png b/resources/multimc/64x64/centralmods.png Binary files differnew file mode 100644 index 00000000..8831f437 --- /dev/null +++ b/resources/multimc/64x64/centralmods.png diff --git a/resources/multimc/64x64/checkupdate.png b/resources/multimc/64x64/checkupdate.png Binary files differnew file mode 100644 index 00000000..dd1e29ac --- /dev/null +++ b/resources/multimc/64x64/checkupdate.png diff --git a/resources/multimc/64x64/copy.png b/resources/multimc/64x64/copy.png Binary files differnew file mode 100644 index 00000000..d12cf9c8 --- /dev/null +++ b/resources/multimc/64x64/copy.png diff --git a/resources/multimc/64x64/help.png b/resources/multimc/64x64/help.png Binary files differnew file mode 100644 index 00000000..0f3948c2 --- /dev/null +++ b/resources/multimc/64x64/help.png diff --git a/resources/multimc/64x64/new.png b/resources/multimc/64x64/new.png Binary files differnew file mode 100644 index 00000000..c3c6796c --- /dev/null +++ b/resources/multimc/64x64/new.png diff --git a/resources/multimc/64x64/news.png b/resources/multimc/64x64/news.png Binary files differnew file mode 100644 index 00000000..e306eed3 --- /dev/null +++ b/resources/multimc/64x64/news.png diff --git a/resources/multimc/64x64/refresh.png b/resources/multimc/64x64/refresh.png Binary files differnew file mode 100644 index 00000000..8373d819 --- /dev/null +++ b/resources/multimc/64x64/refresh.png diff --git a/resources/multimc/64x64/settings.png b/resources/multimc/64x64/settings.png Binary files differnew file mode 100644 index 00000000..e3ff58fa --- /dev/null +++ b/resources/multimc/64x64/settings.png diff --git a/resources/multimc/64x64/viewfolder.png b/resources/multimc/64x64/viewfolder.png Binary files differnew file mode 100644 index 00000000..7d531f9c --- /dev/null +++ b/resources/multimc/64x64/viewfolder.png diff --git a/resources/icons/toolbar/NoAccount.png b/resources/multimc/8x8/noaccount.png Binary files differindex 466e4c07..466e4c07 100644 --- a/resources/icons/toolbar/NoAccount.png +++ b/resources/multimc/8x8/noaccount.png diff --git a/resources/multimc/index.theme b/resources/multimc/index.theme new file mode 100644 index 00000000..776792b7 --- /dev/null +++ b/resources/multimc/index.theme @@ -0,0 +1,33 @@ +[Icon Theme] +Name=multimc +Comment=MultiMC Default Icons +Inherits=default +Directories=scalable/apps,8x8,16x16,22x22,24x24,32x32,48x48 + +[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
\ No newline at end of file diff --git a/resources/multimc/multimc.qrc b/resources/multimc/multimc.qrc new file mode 100644 index 00000000..363347de --- /dev/null +++ b/resources/multimc/multimc.qrc @@ -0,0 +1,111 @@ +<!DOCTYPE RCC> +<RCC version="1.0"> + <qresource prefix="/icons/multimc"> + <file>index.theme</file> + <!-- Logo. Our own. --> + <file>scalable/apps/multimc.svg</file> + + <!-- OK console icon. Our own --> + <file>scalable/console.svg</file> + + <!-- ERROR console icon. Our own --> + <file>scalable/console_error.svg</file> + + <!-- About dialog. GPLv2, http://openiconlibrary.sourceforge.net/gallery2/?./Icons/actions/help-contents.png --> + <file>16x16/about.png</file> + <file>22x22/about.png</file> + <file>32x32/about.png</file> + <file>48x48/about.png</file> + <file>64x64/about.png</file> + + <!-- Report bug. Our own. --> + <file>scalable/bug.svg</file> + <file>16x16/bug.png</file> + <file>22x22/bug.png</file> + <file>32x32/bug.png</file> + <file>48x48/bug.png</file> + <file>64x64/bug.png</file> + + <!-- The cat button. Freeware, http://findicons.com/icon/73096/black_cat --> + <file>16x16/cat.png</file> + <file>22x22/cat.png</file> + <file>24x24/cat.png</file> + <file>32x32/cat.png</file> + <file>48x48/cat.png</file> + <file>64x64/cat.png</file> + + <!-- Show mods folder. CC-BY-SA 3.0 http://openiconlibrary.sourceforge.net/gallery2/?./Icons/places/oxygen-style/folder-favorites.png --> + <file>scalable/centralmods.svg</file> + <file>16x16/centralmods.png</file> + <file>22x22/centralmods.png</file> + <file>32x32/centralmods.png</file> + <file>48x48/centralmods.png</file> + <file>64x64/centralmods.png</file> + + <!-- Update. GPLv2, https://code.google.com/p/gnome-colors/ --> + <file>scalable/checkupdate.svg</file> + <file>16x16/checkupdate.png</file> + <file>22x22/checkupdate.png</file> + <file>32x32/checkupdate.png</file> + <file>48x48/checkupdate.png</file> + <file>64x64/checkupdate.png</file> + + <!-- copy instance. CC-BY-SA 3.0, http://openiconlibrary.sourceforge.net/gallery2/?./Icons/actions/edit-copy-6.png --> + <file>16x16/copy.png</file> + <file>22x22/copy.png</file> + <file>32x32/copy.png</file> + <file>48x48/copy.png</file> + <file>64x64/copy.png</file> + + <!-- Help. CC-BY-SA 3.0, http://openiconlibrary.sourceforge.net/gallery2/?./Icons/actions/help.png --> + <file>16x16/help.png</file> + <file>22x22/help.png</file> + <file>32x32/help.png</file> + <file>48x48/help.png</file> + <file>64x64/help.png</file> + + <!-- New instance. GPLv2, http://openiconlibrary.sourceforge.net/gallery2/?./Icons/actions/document-new-3.png --> + <file>16x16/new.png</file> + <file>22x22/new.png</file> + <file>32x32/new.png</file> + <file>48x48/new.png</file> + <file>64x64/new.png</file> + + <!-- Open news. Our own. --> + <file>scalable/news.svg</file> + <file>16x16/news.png</file> + <file>22x22/news.png</file> + <file>32x32/news.png</file> + <file>48x48/news.png</file> + <file>64x64/news.png</file> + + <!-- Refresh, CC-BY-SA 3.0, Oxygen icons. --> + <file>16x16/refresh.png</file> + <file>22x22/refresh.png</file> + <file>32x32/refresh.png</file> + <file>48x48/refresh.png</file> + <file>64x64/refresh.png</file> + + <!-- Settings, LGPL-2.1, http://openiconlibrary.sourceforge.net/gallery2/?./Icons/apps/system-settings-3.png --> + <file>16x16/settings.png</file> + <file>22x22/settings.png</file> + <file>32x32/settings.png</file> + <file>48x48/settings.png</file> + <file>64x64/settings.png</file> + + <!-- View folder. CC-BY-SA 3.0, http://openiconlibrary.sourceforge.net/gallery2/?./Icons/actions/document-open-folder.png --> + <file>scalable/viewfolder.svg</file> + <file>16x16/viewfolder.png</file> + <file>22x22/viewfolder.png</file> + <file>32x32/viewfolder.png</file> + <file>48x48/viewfolder.png</file> + <file>64x64/viewfolder.png</file> + + <!-- Default minecraft skin, desaturated, cutout of head, Mojang --> + <file>8x8/noaccount.png</file> + <file>16x16/noaccount.png</file> + <file>24x24/noaccount.png</file> + <file>32x32/noaccount.png</file> + <file>48x48/noaccount.png</file> + </qresource> +</RCC> diff --git a/resources/icons/multimc.svg b/resources/multimc/scalable/apps/multimc.svg index 178509ac..178509ac 100644 --- a/resources/icons/multimc.svg +++ b/resources/multimc/scalable/apps/multimc.svg diff --git a/resources/icons/toolbar_svg/bug.svg b/resources/multimc/scalable/bug.svg index 0534cbef..178e3c23 100644 --- a/resources/icons/toolbar_svg/bug.svg +++ b/resources/multimc/scalable/bug.svg @@ -14,11 +14,11 @@ height="32" id="svg2" version="1.1" - inkscape:version="0.48.3.1 r9886" + inkscape:version="0.48.4 r9939" sodipodi:docname="bug.svg" - inkscape:export-filename="/home/peterix/projects/MultiMC4/src/resources/tbaricons/ReportBug.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> + inkscape:export-filename="/home/peterix/minecraft/src/MultiMC5/resources/multimc/64x64/bug.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180"> <defs id="defs4"> <linearGradient @@ -189,10 +189,10 @@ inkscape:document-units="px" inkscape:current-layer="g3986" showgrid="false" - inkscape:window-width="1607" - inkscape:window-height="1030" - inkscape:window-x="1676" - inkscape:window-y="-3" + inkscape:window-width="1680" + inkscape:window-height="1026" + inkscape:window-x="-3" + inkscape:window-y="-4" inkscape:window-maximized="1"> <inkscape:grid type="xygrid" @@ -324,7 +324,7 @@ </g> <path transform="matrix(1.5,0,0,1.5,-27.5,1011.8622)" - d="m 54,16.5 a 0.5,0.5 0 1 1 -1,0 0.5,0.5 0 1 1 1,0 z" + d="M 54,16.5 C 54,16.776142 53.776142,17 53.5,17 53.223858,17 53,16.776142 53,16.5 53,16.223858 53.223858,16 53.5,16 c 0.276142,0 0.5,0.223858 0.5,0.5 z" sodipodi:ry="0.5" sodipodi:rx="0.5" sodipodi:cy="16.5" @@ -334,7 +334,7 @@ sodipodi:type="arc" /> <path transform="matrix(1.5,0,0,1.5,-28,1010.8622)" - d="m 56,18.5 a 0.5,0.5 0 1 1 -1,0 0.5,0.5 0 1 1 1,0 z" + d="M 56,18.5 C 56,18.776142 55.776142,19 55.5,19 55.223858,19 55,18.776142 55,18.5 55,18.223858 55.223858,18 55.5,18 c 0.276142,0 0.5,0.223858 0.5,0.5 z" sodipodi:ry="0.5" sodipodi:rx="0.5" sodipodi:cy="18.5" @@ -344,7 +344,7 @@ sodipodi:type="arc" /> <path transform="matrix(1.5,0,0,1.5,-25,1009.3622)" - d="m 50,20.5 a 0.5,0.5 0 1 1 -1,0 0.5,0.5 0 1 1 1,0 z" + d="M 50,20.5 C 50,20.776142 49.776142,21 49.5,21 49.223858,21 49,20.776142 49,20.5 49,20.223858 49.223858,20 49.5,20 c 0.276142,0 0.5,0.223858 0.5,0.5 z" sodipodi:ry="0.5" sodipodi:rx="0.5" sodipodi:cy="20.5" @@ -354,7 +354,7 @@ sodipodi:type="arc" /> <path transform="matrix(1.5,0,0,1.5,-26,1008.8622)" - d="m 52,22.5 a 0.5,0.5 0 1 1 -1,0 0.5,0.5 0 1 1 1,0 z" + d="M 52,22.5 C 52,22.776142 51.776142,23 51.5,23 51.223858,23 51,22.776142 51,22.5 51,22.223858 51.223858,22 51.5,22 c 0.276142,0 0.5,0.223858 0.5,0.5 z" sodipodi:ry="0.5" sodipodi:rx="0.5" sodipodi:cy="22.5" @@ -364,7 +364,7 @@ sodipodi:type="arc" /> <path transform="matrix(1.5,0,0,1.5,-26.5,1009.3622)" - d="m 54,23.5 a 0.5,0.5 0 1 1 -1,0 0.5,0.5 0 1 1 1,0 z" + d="M 54,23.5 C 54,23.776142 53.776142,24 53.5,24 53.223858,24 53,23.776142 53,23.5 53,23.223858 53.223858,23 53.5,23 c 0.276142,0 0.5,0.223858 0.5,0.5 z" sodipodi:ry="0.5" sodipodi:rx="0.5" sodipodi:cy="23.5" @@ -374,7 +374,7 @@ sodipodi:type="arc" /> <path transform="matrix(1.5,0,0,1.5,-27.5,1010.3622)" - d="m 57,20.5 a 0.5,0.5 0 1 1 -1,0 0.5,0.5 0 1 1 1,0 z" + d="M 57,20.5 C 57,20.776142 56.776142,21 56.5,21 56.223858,21 56,20.776142 56,20.5 56,20.223858 56.223858,20 56.5,20 c 0.276142,0 0.5,0.223858 0.5,0.5 z" sodipodi:ry="0.5" sodipodi:rx="0.5" sodipodi:cy="20.5" diff --git a/resources/multimc/scalable/centralmods.svg b/resources/multimc/scalable/centralmods.svg new file mode 100644 index 00000000..a8b123d0 --- /dev/null +++ b/resources/multimc/scalable/centralmods.svg @@ -0,0 +1,346 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --><svg height="128" id="svg2811" inkscape:export-filename="/home/pinheiro/pics/oxygen/scalable/places/folder-bookmarks.png" inkscape:export-xdpi="360" inkscape:export-ydpi="360" inkscape:output_extension="org.inkscape.output.svgz.inkscape" inkscape:version="0.46" sodipodi:docbase="/home/david/oxygen/trunk/scalable/places" sodipodi:docname="folder-bookmarks.svgz" sodipodi:version="0.32" version="1.0" width="128" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <metadata> + <rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <cc:Work rdf:about=""> + <dc:title></dc:title> + <dc:description></dc:description> + <dc:subject> + <rdf:Bag> + <rdf:li>unsorted</rdf:li> + </rdf:Bag> + </dc:subject> + <dc:publisher> + <cc:Agent rdf:about="http://www.openclipart.org/"> + <dc:title>Open Clip Art Library, Source: Oxygen Icons, Source: Oxygen Icons, Source: Oxygen Icons, Source: Oxygen Icons</dc:title> + </cc:Agent> + </dc:publisher> + <dc:creator> + <cc:Agent> + <dc:title></dc:title> + </cc:Agent> + </dc:creator> + <dc:rights> + <cc:Agent> + <dc:title></dc:title> + </cc:Agent> + </dc:rights> + <dc:date></dc:date> + <dc:format>image/svg+xml</dc:format> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/ or http://creativecommons.org/licenses/LGPL/2.1/"/> + <dc:language>en</dc:language> + </cc:Work> + </rdf:RDF> + </metadata> + <defs id="defs2813"> + <linearGradient id="linearGradient3629" inkscape:collect="always"> + <stop id="stop3631" offset="0" style="stop-color:#ffda36;stop-opacity:1;"/> + <stop id="stop3633" offset="1" style="stop-color:#ffda36;stop-opacity:0;"/> + </linearGradient> + <inkscape:perspective id="perspective99" inkscape:persp3d-origin="64 : 42.666667 : 1" inkscape:vp_x="0 : 64 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="128 : 64 : 1" sodipodi:type="inkscape:persp3d"/> + <linearGradient gradientTransform="matrix(1.0033808,0,0,1,-8.2378002,8)" gradientUnits="userSpaceOnUse" id="linearGradient3067" x1="122.74438" x2="122.39215" y1="96.721588" y2="20.043535"> + <stop id="stop3069" offset="0" style="stop-color:#88c4ff;stop-opacity:1;"/> + <stop id="stop3077" offset="0.13053299" style="stop-color:#b3d9ff;stop-opacity:1;"/> + <stop id="stop3071" offset="0.72006166" style="stop-color:#71A8F5"/> + <stop id="stop3073" offset="1" style="stop-color:#508ed9;stop-opacity:1;"/> + </linearGradient> + <linearGradient id="linearGradient2822"> + <stop id="stop2824" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop2826" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/> + </linearGradient> + <linearGradient gradientTransform="matrix(1.0033404,0,0,1,-8.2374684,8)" gradientUnits="userSpaceOnUse" id="XMLID_9_" x1="71.9995" x2="71.9995" y1="14.2578" y2="19.9583"> + <stop id="stop46" offset="0.25" style="stop-color:#71a8f5;stop-opacity:0;"/> + <stop id="stop48" offset="1" style="stop-color:#0057ae;stop-opacity:1"/> + </linearGradient> + <linearGradient gradientTransform="matrix(1.0033876,0,0,1,1.7561237,8)" gradientUnits="userSpaceOnUse" id="XMLID_8_" x1="72.0005" x2="72.0005" y1="96" y2="20.0005"> + <stop id="stop35" offset="0" style="stop-color:#cfe7ff;stop-opacity:1;"/> + <stop id="stop37" offset="0.5917" style="stop-color:#71A8F5"/> + <stop id="stop39" offset="1" style="stop-color:#2C72C7"/> + </linearGradient> + <filter height="1.768" id="filter2807" inkscape:collect="always" width="1.0512" x="-0.0256" y="-0.384"> + <feGaussianBlur id="feGaussianBlur2809" inkscape:collect="always" stdDeviation="1.28"/> + </filter> + <linearGradient gradientTransform="translate(-7.999995,8)" gradientUnits="userSpaceOnUse" id="XMLID_6_" x1="72.0005" x2="72.0005" y1="96" y2="4.882812e-04"> + <stop id="stop7" offset="0" style="stop-color:#00479E"/> + <stop id="stop9" offset="0.0769" style="stop-color:#2C72C7"/> + <stop id="stop11" offset="0.58579999" style="stop-color:#6ea1df;stop-opacity:1;"/> + <stop id="stop13" offset="0.96450001" style="stop-color:#adcbee;stop-opacity:1;"/> + </linearGradient> + <linearGradient gradientTransform="translate(10,0)" gradientUnits="userSpaceOnUse" id="linearGradient2828" inkscape:collect="always" x1="22.413761" x2="22.413761" xlink:href="#linearGradient2822" y1="28.5" y2="34.472866"/> + <linearGradient gradientTransform="matrix(1.0033876,0,0,1,-8.2438763,8)" gradientUnits="userSpaceOnUse" id="linearGradient2838" inkscape:collect="always" x1="72.0005" x2="72.0005" xlink:href="#XMLID_8_" y1="96" y2="20.0005"/> + <clipPath clipPathUnits="userSpaceOnUse" id="clipPath2844"> + <path d="M 133.86613,100.978 C 133.79288,102.369 132.59585,103.5 131.19913,103.5 L 16.812952,103.5 C 15.415236,103.5 14.2192,102.368 14.145947,100.979 C 14.145947,100.979 10.508666,30.967 10.508666,30.957 C 10.461513,30.301 10.673223,29.685 11.105684,29.22 C 11.539144,28.756 12.140172,28.501 12.799403,28.501 L 135.21268,28.501 C 135.8719,28.501 136.47293,28.756 136.90339,29.219 C 137.33384,29.682 137.54254,30.298 137.49137,30.966 L 133.86613,100.978 z" id="path2846" style="fill:#ff00bf"/> + </clipPath> + <filter height="1.8302754" id="filter2848" inkscape:collect="always" width="1.0247144" x="-0.012357198" y="-0.41513768"> + <feGaussianBlur id="feGaussianBlur2850" inkscape:collect="always" stdDeviation="0.65388509"/> + </filter> + <linearGradient gradientTransform="matrix(1.0033808,0,0,1,-8.2378,8)" gradientUnits="userSpaceOnUse" id="linearGradient3109" inkscape:collect="always" x1="122.74438" x2="122.74438" xlink:href="#linearGradient3067" y1="96.721588" y2="20"/> + <linearGradient id="linearGradient3290"> + <stop id="stop3292" offset="0" style="stop-color:yellow;stop-opacity:1;"/> + <stop id="stop3294" offset="1" style="stop-color:#ffb66d;stop-opacity:1;"/> + </linearGradient> + <linearGradient id="linearGradient3273"> + <stop id="stop3275" offset="0" style="stop-color:#ffffff;stop-opacity:0.55035973;"/> + <stop id="stop3277" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/> + </linearGradient> + <linearGradient id="linearGradient3291"> + <stop id="stop3293" offset="0" style="stop-color:black;stop-opacity:1"/> + <stop id="stop3295" offset="1" style="stop-color:black;stop-opacity:0"/> + </linearGradient> + <linearGradient id="linearGradient3638"> + <stop id="stop3640" offset="0" style="stop-color:#ffffff;stop-opacity:0;"/> + <stop id="stop3661" offset="0.06868132" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop3659" offset="0.5" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop3642" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/> + </linearGradient> + <linearGradient id="linearGradient12948"> + <stop id="stop12950" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop12952" offset="1" style="stop-color:#c0c0c0;stop-opacity:0;"/> + </linearGradient> + <linearGradient id="linearGradient1563"> + <stop id="stop1565" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop1567" offset="1" style="stop-color:white;stop-opacity:0;"/> + </linearGradient> + <radialGradient cx="41.233166" cy="39.832623" fx="41.409943" fy="44.369892" gradientTransform="matrix(1,0,0,0.75,0,9.9581557)" gradientUnits="userSpaceOnUse" id="radialGradient3673" inkscape:collect="always" r="8.1317282" xlink:href="#linearGradient3309"/> + <radialGradient cx="41.233166" cy="39.832623" fx="41.409943" fy="44.369892" gradientTransform="matrix(1,0,0,0.75,0,9.9581557)" gradientUnits="userSpaceOnUse" id="radialGradient3669" inkscape:collect="always" r="8.1317282" xlink:href="#linearGradient3309"/> + <filter id="filter3663" inkscape:collect="always"> + <feGaussianBlur id="feGaussianBlur3665" inkscape:collect="always" stdDeviation="0.24178075"/> + </filter> + <radialGradient cx="41.233166" cy="39.832623" fx="41.409943" fy="44.369892" gradientTransform="matrix(1,0,0,0.75,0,9.9581557)" gradientUnits="userSpaceOnUse" id="radialGradient3638" inkscape:collect="always" r="8.1317282" xlink:href="#linearGradient3640"/> + <radialGradient cx="122.69361" cy="52.672272" fx="122.55822" fy="51.026066" gradientTransform="matrix(1.2538745,-0.4598801,0.2575547,0.7022291,-43.321636,71.69735)" gradientUnits="userSpaceOnUse" id="radialGradient3620" inkscape:collect="always" r="3.1883843" xlink:href="#linearGradient1563"/> + <radialGradient cx="121.58587" cy="52.85474" fx="121.58587" fy="52.85474" gradientTransform="matrix(2.2248115,-0.5961364,0.2773621,1.0351295,-163.57967,70.62501)" gradientUnits="userSpaceOnUse" id="radialGradient3618" inkscape:collect="always" r="3.1883843" xlink:href="#linearGradient1563"/> + <filter height="1.2126913" id="filter3604" inkscape:collect="always" width="1.2307636" x="-0.11538182" y="-0.10634566"> + <feGaussianBlur id="feGaussianBlur3606" inkscape:collect="always" stdDeviation="0.25849222"/> + </filter> + <radialGradient cx="122.69361" cy="52.672272" fx="122.55822" fy="51.026066" gradientTransform="matrix(1.2538745,-0.4598801,0.2575547,0.7022291,-43.321636,71.69735)" gradientUnits="userSpaceOnUse" id="radialGradient3570" inkscape:collect="always" r="3.1883843" xlink:href="#linearGradient1563"/> + <filter height="1.3358284" id="filter3564" inkscape:collect="always" width="1.3643636" x="-0.18218182" y="-0.1679142"> + <feGaussianBlur id="feGaussianBlur3566" inkscape:collect="always" stdDeviation="0.40814561"/> + </filter> + <radialGradient cx="121.58587" cy="52.85474" fx="121.58587" fy="52.85474" gradientTransform="matrix(2.2248115,-0.5961364,0.2773621,1.0351295,-163.57967,70.62501)" gradientUnits="userSpaceOnUse" id="radialGradient3382" inkscape:collect="always" r="3.1883843" xlink:href="#linearGradient1563"/> + <radialGradient cx="64.101562" cy="48.703125" fx="64.101562" fy="48.703125" gradientTransform="matrix(1,0,0,0.6476898,0,17.158608)" gradientUnits="userSpaceOnUse" id="radialGradient3372" inkscape:collect="always" r="56.812496" xlink:href="#linearGradient3309"/> + <filter id="filter3362" inkscape:collect="always"> + <feGaussianBlur id="feGaussianBlur3364" inkscape:collect="always" stdDeviation="0.3785028"/> + </filter> + <radialGradient cx="26.573795" cy="73.493042" fx="35.587811" fy="102.79941" gradientTransform="matrix(4.6812453,-5.2700969e-7,3.571426e-8,0.3172375,-85.242554,44.725131)" gradientUnits="userSpaceOnUse" id="radialGradient3300" inkscape:collect="always" r="60.700562" xlink:href="#linearGradient3946"/> + <filter id="filter3285" inkscape:collect="always"> + <feGaussianBlur id="feGaussianBlur3287" inkscape:collect="always" stdDeviation="0.26585998"/> + </filter> + <radialGradient cx="64.35347" cy="106.71302" fx="64.35347" fy="106.71302" gradientTransform="matrix(0.4443044,1.2598841e-8,0,0.1825067,35.563425,89.646593)" gradientUnits="userSpaceOnUse" id="radialGradient3267" inkscape:collect="always" r="60.700505" xlink:href="#linearGradient3946"/> + <radialGradient cx="64.07962" cy="66.197433" fx="64.07962" fy="66.197433" gradientTransform="matrix(1,0,0,0.9554688,0,2.9478533)" gradientUnits="userSpaceOnUse" id="radialGradient3263" inkscape:collect="always" r="60.700504" xlink:href="#XMLID_1_"/> + <filter id="filter3259" inkscape:collect="always"> + <feGaussianBlur id="feGaussianBlur3261" inkscape:collect="always" stdDeviation="0.23739589"/> + </filter> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient2475" inkscape:collect="always" x1="64.07962" x2="64.07962" xlink:href="#XMLID_1_" y1="-14.227339" y2="120.44466"/> + <radialGradient cx="64.35347" cy="98.207405" fx="64.35347" fy="98.207405" gradientTransform="matrix(9.1358439e-2,-2.9656957e-8,4.5207376e-8,0.1392616,58.276716,94.261412)" gradientUnits="userSpaceOnUse" id="radialGradient3956" inkscape:collect="always" r="60.700505" xlink:href="#linearGradient3946"/> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient3934" inkscape:collect="always" spreadMethod="reflect" x1="28.637825" x2="31.289474" xlink:href="#linearGradient3844" y1="120.84999" y2="122.08743"/> + <filter id="filter3928" inkscape:collect="always"> + <feGaussianBlur id="feGaussianBlur3930" inkscape:collect="always" stdDeviation="0.18346262"/> + </filter> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient2728" inkscape:collect="always" spreadMethod="reflect" x1="28.637825" x2="31.289474" xlink:href="#linearGradient3844" y1="120.84999" y2="122.08743"/> + <filter height="1.3101371" id="filter3838" inkscape:collect="always" width="1.3563383" x="-0.17816916" y="-0.15506857"> + <feGaussianBlur id="feGaussianBlur3840" inkscape:collect="always" stdDeviation="0.46259975"/> + </filter> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient3800" inkscape:collect="always" spreadMethod="reflect" x1="63.948792" x2="67.219337" xlink:href="#linearGradient3363" y1="12.034382" y2="12.034382"/> + <filter id="filter3401" inkscape:collect="always"> + <feGaussianBlur id="feGaussianBlur3403" inkscape:collect="always" stdDeviation="0.11157909"/> + </filter> + <filter id="filter3391" inkscape:collect="always"> + <feGaussianBlur id="feGaussianBlur3393" inkscape:collect="always" stdDeviation="0.55939545"/> + </filter> + <linearGradient gradientTransform="translate(-152,0)" gradientUnits="userSpaceOnUse" id="linearGradient3385" inkscape:collect="always" x1="216.88614" x2="216.88614" xlink:href="#linearGradient3379" y1="122.5867" y2="37.969955"/> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient3369" inkscape:collect="always" x1="177.42397" x2="177.60074" xlink:href="#linearGradient3363" y1="22.377773" y2="93.022789"/> + <linearGradient gradientTransform="translate(-37.771032,-0.1213203)" gradientUnits="userSpaceOnUse" id="linearGradient3345" inkscape:collect="always" x1="261.50107" x2="200.17728" xlink:href="#linearGradient1563" y1="77.652245" y2="31.10997"/> + <linearGradient gradientTransform="translate(-170.08594,0)" gradientUnits="userSpaceOnUse" id="linearGradient3315" inkscape:collect="always" x1="219.22163" x2="219.22163" xlink:href="#linearGradient3363" y1="28.149843" y2="116.41813"/> + <radialGradient cx="69.526619" cy="60.115833" fx="69.526619" fy="60.115833" gradientTransform="matrix(0.5227399,0,-1.554444e-8,0.5266221,349.81061,60.575712)" gradientUnits="userSpaceOnUse" id="radialGradient3304" inkscape:collect="always" r="111.65377" xlink:href="#linearGradient3290"/> + <radialGradient cx="69.526619" cy="60.115833" fx="69.526619" fy="89.655701" gradientTransform="matrix(0.9439139,-0.3301918,0.332644,0.9509241,-16.097695,27.249949)" gradientUnits="userSpaceOnUse" id="radialGradient2906" inkscape:collect="always" r="111.65377" xlink:href="#linearGradient3290"/> + <linearGradient gradientTransform="matrix(0,1.022977,-1.022977,0,111.9686,137.8125)" gradientUnits="userSpaceOnUse" id="linearGradient3230" inkscape:collect="always" x1="-88.058083" x2="-45.096584" xlink:href="#linearGradient3711" y1="-131.93112" y2="-131.93112"/> + <radialGradient cx="343.99899" cy="92" fx="343.99899" fy="92" gradientUnits="userSpaceOnUse" id="radialGradient3228" inkscape:collect="always" r="36" xlink:href="#linearGradient3711"/> + <linearGradient gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)" gradientUnits="userSpaceOnUse" id="linearGradient3226" inkscape:collect="always" x1="-70.002899" x2="-11.91648" xlink:href="#linearGradient26907" y1="-383.9971" y2="-383.9971"/> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient2149" inkscape:collect="always" x1="62.112335" x2="67.887672" xlink:href="#linearGradient3081" y1="90.513916" y2="39.095695"/> + <linearGradient gradientUnits="userSpaceOnUse" id="XMLID_4_" x1="64.000504" x2="64.000504" y1="108.8652" y2="92.865196"> + <stop id="stop7270" offset="0" style="stop-color:#EEEEEC"/> + <stop id="stop7272" offset="1" style="stop-color:#FFFFFF"/> + </linearGradient> + <linearGradient gradientTransform="translate(175.0067,11.74752)" gradientUnits="userSpaceOnUse" id="XMLID_3_" x1="63.9995" x2="63.9995" y1="92.865196" y2="120.8652"> + <stop id="stop7261" offset="0" style="stop-color:#888A85"/> + <stop id="stop7263" offset="0.3226" style="stop-color:#A6A7A3"/> + <stop id="stop7265" offset="1" style="stop-color:#EEEEEC"/> + </linearGradient> + <linearGradient gradientUnits="userSpaceOnUse" id="XMLID_1_" x1="95.693398" x2="32.308601" y1="141.1738" y2="77.789001"> + <stop id="stop7227" offset="0" style="stop-color:#ffc60a;stop-opacity:1;"/> + <stop id="stop7233" offset="1" style="stop-color:#b03b00;stop-opacity:1;"/> + </linearGradient> + <foreignObject height="1" id="foreignObject7221" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/" width="1" x="0" y="0"> + <i:pgfRef xlink:href="#adobe_illustrator_pgf"/> + </foreignObject> + <linearGradient id="linearGradient5073" inkscape:collect="always"> + <stop id="stop5075" offset="0" style="stop-color:#000000;stop-opacity:1;"/> + <stop id="stop5077" offset="1" style="stop-color:#000000;stop-opacity:0;"/> + </linearGradient> + <radialGradient cx="80.738739" cy="155.37218" fx="80.738739" fy="177.29686" gradientTransform="matrix(1,0,0,0.111111,0,138.1081)" gradientUnits="userSpaceOnUse" id="radialGradient5079" inkscape:collect="always" r="64.796692" xlink:href="#linearGradient5073"/> + <linearGradient id="linearGradient2690"> + <stop id="stop2692" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop2694" offset="1" style="stop-color:#c0c0c0;stop-opacity:0;"/> + </linearGradient> + <linearGradient id="linearGradient2684"> + <stop id="stop2686" offset="0" style="stop-color:#ffffff;stop-opacity:0.55035973;"/> + <stop id="stop2688" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/> + </linearGradient> + <linearGradient id="linearGradient2678"> + <stop id="stop2680" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop2682" offset="1" style="stop-color:white;stop-opacity:0;"/> + </linearGradient> + <linearGradient id="linearGradient2668"> + <stop id="stop2670" offset="0" style="stop-color:#ffffff;stop-opacity:0;"/> + <stop id="stop2672" offset="0.06868132" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop2674" offset="0.5" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop2676" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/> + </linearGradient> + <linearGradient id="linearGradient2662"> + <stop id="stop2664" offset="0" style="stop-color:yellow;stop-opacity:1;"/> + <stop id="stop2666" offset="1" style="stop-color:#f07800;stop-opacity:1;"/> + </linearGradient> + <linearGradient id="linearGradient3081"> + <stop id="stop3083" offset="0" style="stop-color:#28691f;stop-opacity:1;"/> + <stop id="stop3085" offset="1" style="stop-color:#00bf00;stop-opacity:1;"/> + </linearGradient> + <linearGradient gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)" gradientUnits="userSpaceOnUse" id="linearGradient3711" x1="-84.002403" x2="-23.516129" y1="-383.9971" y2="-383.9975"> + <stop id="stop3713" offset="0" style="stop-color:white;stop-opacity:1;"/> + <stop id="stop3715" offset="1" style="stop-color:white;stop-opacity:0;"/> + </linearGradient> + <linearGradient gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)" gradientUnits="userSpaceOnUse" id="linearGradient26907" x1="-84.002403" x2="-12.0029" y1="-383.9971" y2="-383.9971"> + <stop id="stop26909" offset="0" style="stop-color:#888a85;stop-opacity:1;"/> + <stop id="stop26911" offset="1" style="stop-color:#2e3436;stop-opacity:1;"/> + </linearGradient> + <linearGradient id="linearGradient3309"> + <stop id="stop3311" offset="0" style="stop-color:#f4ff3f;stop-opacity:1;"/> + <stop id="stop3313" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/> + </linearGradient> + <linearGradient id="linearGradient3363" inkscape:collect="always"> + <stop id="stop3365" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop3367" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/> + </linearGradient> + <linearGradient id="linearGradient3379" inkscape:collect="always"> + <stop id="stop3381" offset="0" style="stop-color:#fffc07;stop-opacity:1;"/> + <stop id="stop3383" offset="1" style="stop-color:#fffc07;stop-opacity:0;"/> + </linearGradient> + <linearGradient id="linearGradient3844" inkscape:collect="always"> + <stop id="stop3846" offset="0" style="stop-color:#faff64;stop-opacity:1;"/> + <stop id="stop3848" offset="1" style="stop-color:#faff64;stop-opacity:0;"/> + </linearGradient> + <linearGradient id="linearGradient3946"> + <stop id="stop3948" offset="0" style="stop-color:#7e0000;stop-opacity:1;"/> + <stop id="stop3950" offset="1" style="stop-color:#673400;stop-opacity:0;"/> + </linearGradient> + <inkscape:perspective id="perspective102" inkscape:persp3d-origin="64 : 42.666667 : 1" inkscape:vp_x="0 : 64 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="128 : 64 : 1" sodipodi:type="inkscape:persp3d"/> + <linearGradient id="linearGradient3640"> + <stop id="stop3643" offset="0" style="stop-color:#7e0000;stop-opacity:0.50990099"/> + <stop id="stop3645" offset="1" style="stop-color:#673400;stop-opacity:0;"/> + </linearGradient> + <radialGradient cx="64.07962" cy="66.197433" fx="64.07962" fy="66.197433" gradientTransform="matrix(1,0,0,0.9554688,0,2.9478533)" gradientUnits="userSpaceOnUse" id="radialGradient2810" inkscape:collect="always" r="60.700504" xlink:href="#XMLID_1_"/> + <radialGradient cx="69.526619" cy="60.115833" fx="69.526619" fy="89.655701" gradientTransform="matrix(0.9439139,-0.3301918,0.332644,0.9509241,-16.097695,27.249949)" gradientUnits="userSpaceOnUse" id="radialGradient2812" inkscape:collect="always" r="111.65377" xlink:href="#linearGradient3290"/> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient2814" inkscape:collect="always" x1="64.07962" x2="64.07962" xlink:href="#XMLID_1_" y1="-14.227339" y2="120.44466"/> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient2816" inkscape:collect="always" spreadMethod="reflect" x1="63.948792" x2="67.219337" xlink:href="#linearGradient3363" y1="12.034382" y2="12.034382"/> + <radialGradient cx="64.101562" cy="48.703125" fx="64.101562" fy="48.703125" gradientTransform="matrix(1,0,0,0.6476898,0,17.158608)" gradientUnits="userSpaceOnUse" id="radialGradient2818" inkscape:collect="always" r="56.812496" xlink:href="#linearGradient3309"/> + <radialGradient cx="41.233166" cy="39.832623" fx="41.409943" fy="44.369892" gradientTransform="matrix(1,0,0,0.75,0,9.9581557)" gradientUnits="userSpaceOnUse" id="radialGradient2820" inkscape:collect="always" r="8.1317282" xlink:href="#linearGradient3309"/> + <linearGradient gradientTransform="translate(-170.08594,0)" gradientUnits="userSpaceOnUse" id="linearGradient2823" inkscape:collect="always" x1="219.22163" x2="219.22163" xlink:href="#linearGradient3363" y1="28.149843" y2="116.41813"/> + <radialGradient cx="41.233166" cy="39.832623" fx="41.409943" fy="44.369892" gradientTransform="matrix(1,0,0,0.75,0,9.9581557)" gradientUnits="userSpaceOnUse" id="radialGradient2825" inkscape:collect="always" r="8.1317282" xlink:href="#linearGradient3309"/> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient2827" inkscape:collect="always" x1="177.42397" x2="177.60074" xlink:href="#linearGradient3363" y1="22.377773" y2="93.022789"/> + <linearGradient gradientTransform="translate(-37.771032,-0.1213203)" gradientUnits="userSpaceOnUse" id="linearGradient2829" inkscape:collect="always" x1="261.50107" x2="200.17728" xlink:href="#linearGradient1563" y1="77.652245" y2="31.10997"/> + <linearGradient gradientTransform="matrix(0.479981,0,0,0.479981,33.177757,62.637707)" gradientUnits="userSpaceOnUse" id="linearGradient2831" inkscape:collect="always" spreadMethod="reflect" x1="80.100487" x2="77.714729" xlink:href="#linearGradient3273" y1="44.807674" y2="101.4734"/> + <radialGradient cx="64.35347" cy="98.207405" fx="64.35347" fy="98.207405" gradientTransform="matrix(9.1358439e-2,-2.9656957e-8,4.5207376e-8,0.1392616,58.276716,94.261412)" gradientUnits="userSpaceOnUse" id="radialGradient2833" inkscape:collect="always" r="60.700505" xlink:href="#linearGradient3946"/> + <linearGradient gradientTransform="translate(-152,0)" gradientUnits="userSpaceOnUse" id="linearGradient2835" inkscape:collect="always" x1="216.88614" x2="216.88614" xlink:href="#linearGradient3379" y1="122.5867" y2="37.969955"/> + <radialGradient cx="121.58587" cy="52.85474" fx="121.58587" fy="52.85474" gradientTransform="matrix(2.2248115,-0.5961364,0.2773621,1.0351295,-163.57967,70.62501)" gradientUnits="userSpaceOnUse" id="radialGradient2837" inkscape:collect="always" r="3.1883843" xlink:href="#linearGradient1563"/> + <radialGradient cx="122.69361" cy="52.672272" fx="122.55822" fy="51.026066" gradientTransform="matrix(1.2538745,-0.4598801,0.2575547,0.7022291,-43.321636,71.69735)" gradientUnits="userSpaceOnUse" id="radialGradient2839" inkscape:collect="always" r="3.1883843" xlink:href="#linearGradient1563"/> + <radialGradient cx="121.58587" cy="52.85474" fx="121.58587" fy="52.85474" gradientTransform="matrix(2.2248115,-0.5961364,0.2773621,1.0351295,-163.57967,70.62501)" gradientUnits="userSpaceOnUse" id="radialGradient2841" inkscape:collect="always" r="3.1883843" xlink:href="#linearGradient1563"/> + <radialGradient cx="122.69361" cy="52.672272" fx="122.55822" fy="51.026066" gradientTransform="matrix(1.2538745,-0.4598801,0.2575547,0.7022291,-43.321636,71.69735)" gradientUnits="userSpaceOnUse" id="radialGradient2843" inkscape:collect="always" r="3.1883843" xlink:href="#linearGradient1563"/> + <linearGradient gradientTransform="translate(-152,0)" gradientUnits="userSpaceOnUse" id="linearGradient2845" inkscape:collect="always" x1="216.88614" x2="216.88614" xlink:href="#linearGradient3379" y1="122.5867" y2="37.969955"/> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient2847" inkscape:collect="always" spreadMethod="reflect" x1="28.637825" x2="31.289474" xlink:href="#linearGradient3844" y1="120.84999" y2="122.08743"/> + <radialGradient cx="64.35347" cy="106.71302" fx="64.35347" fy="106.71302" gradientTransform="matrix(0.4443044,1.2598841e-8,0,0.1825067,35.563425,89.646593)" gradientUnits="userSpaceOnUse" id="radialGradient2849" inkscape:collect="always" r="60.700505" xlink:href="#linearGradient3946"/> + <radialGradient cx="26.573795" cy="73.493042" fx="35.587811" fy="102.79941" gradientTransform="matrix(4.6812453,-5.2700969e-7,3.571426e-8,0.3172375,-85.242554,44.725131)" gradientUnits="userSpaceOnUse" id="radialGradient2851" inkscape:collect="always" r="60.700562" xlink:href="#linearGradient3946"/> + <linearGradient gradientTransform="matrix(0.479981,0,0,0.479981,33.177757,62.637707)" gradientUnits="userSpaceOnUse" id="linearGradient2853" inkscape:collect="always" spreadMethod="reflect" x1="80.100487" x2="77.714729" xlink:href="#linearGradient3273" y1="44.807674" y2="101.4734"/> + <linearGradient gradientTransform="translate(-152,0)" gradientUnits="userSpaceOnUse" id="linearGradient2855" inkscape:collect="always" x1="216.88614" x2="216.88614" xlink:href="#linearGradient3379" y1="122.5867" y2="37.969955"/> + <radialGradient cx="66.977158" cy="54.133701" fx="66.977158" fy="54.133701" gradientTransform="matrix(1.6011045,0,0,1.0874708,-40.260269,-12.584491)" gradientUnits="userSpaceOnUse" id="radialGradient3635" inkscape:collect="always" r="41.380203" xlink:href="#linearGradient3629"/> + <filter id="filter3653" inkscape:collect="always"> + <feGaussianBlur id="feGaussianBlur3655" inkscape:collect="always" stdDeviation="2.160955"/> + </filter> + <radialGradient cx="64.111018" cy="72.034855" fx="64.111018" fy="72.034855" gradientTransform="matrix(1,0,0,0.6792004,0,23.108756)" gradientUnits="userSpaceOnUse" id="radialGradient3659" inkscape:collect="always" r="41.380203" xlink:href="#linearGradient3629"/> + <radialGradient cx="66.890625" cy="94.021507" fx="66.890625" fy="94.021507" gradientTransform="matrix(1.3950344,0,0,0.9475079,-26.4241,-2.1179212)" gradientUnits="userSpaceOnUse" id="radialGradient3663" inkscape:collect="always" r="41.380203" xlink:href="#linearGradient3629"/> + </defs> + <sodipodi:namedview bordercolor="#666666" borderlayer="true" borderopacity="1.0" id="base" inkscape:current-layer="layer1" inkscape:cx="1.7230397" inkscape:cy="67.535605" inkscape:document-units="px" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:showpageshadow="true" inkscape:window-height="750" inkscape:window-width="991" inkscape:window-x="45" inkscape:window-y="0" inkscape:zoom="2.34375" pagecolor="#ffffff" showborder="true" showgrid="true"> + <inkscape:grid enabled="true" id="grid3665" spacingx="4px" spacingy="4px" type="xygrid" visible="true"/> + </sodipodi:namedview> + <g id="layer1" inkscape:groupmode="layer" inkscape:label="Livello 1"> + <path d="M 117.983,19 C 117.992,17.35 116.64999,16 114.99999,16 L 44.961007,16 L 38.375006,9.414 C 37.597005,8.636 36.061006,8 34.961,8 L 13.999998,8 C 11.799996,8 9.999999,9.8 9.999999,12 L 9.999999,19 C 9.999999,19 10.999999,104 7,104 L 121,104 C 116.99999,104 117.983,19 117.983,19 z" id="path15" style="fill:url(#XMLID_6_)"/> + <g id="g17" style="opacity:0.6;filter:url(#filter2807)" transform="matrix(1.0033404,0,0,1,-8.2374684,8)"> + <path d="M 132,95.146667 C 132,96.877333 128.4,98.293333 124,98.293333 L 20,98.293333 C 15.6,98.293333 12,96.877333 12,95.146667 C 12,93.416 15.6,92 20,92 L 124,92 C 128.4,92 132,93.416 132,95.146667 z" id="path19"/> + </g> + <path d="M 124.36598,101.004 C 124.27969,102.652 122.85389,104 121.19831,104 L 6.812906,104 C 5.157329,104 3.731522,102.652 3.644228,101.004 L 0.007982,30.992 C -0.112423,29.347 1.143808,28 2.799384,28 L 125.21183,28 C 126.86741,28 128.11762,29.346 127.9912,30.991 L 124.36598,101.004 z" id="path30" style="opacity:0.9;fill:url(#linearGradient3109);fill-opacity:1"/> + <path d="M 10.580094,28 C 10.551086,23.609 10.516087,20.392 10.500078,19 L 10.500078,12 C 10.500078,10.07 12.07033,8.5 14.000627,8.5 L 34.964921,8.5 C 35.937077,8.5 37.339294,9.081 38.026407,9.768 L 44.759457,16.5 L 115.01648,16.5 C 115.68059,16.5 116.30469,16.76 116.77576,17.233 C 117.24683,17.706 117.50487,18.333 117.50087,18.997 C 117.50087,18.997 117.57288,18.925 117.60989,18.888 C 117.48787,19.495 117.47487,21.062 117.44687,25.161 L 117.43687,28 L 117.92894,28 C 117.95994,22.468 117.99995,19 117.99995,19 C 118.00896,17.35 116.66674,16 115.01648,16 L 44.966498,16 L 38.379463,9.414 C 37.60134,8.636 36.065099,8 34.964921,8 L 14.000627,8 C 11.80028,8 10,9.8 10,12 L 10,19 C 10,19 10.041009,22.468 10.073018,28 L 10.580094,28 z" id="path32" style="fill:#5293ee;fill-opacity:1"/> + <path d="M 9.8848616,22 C 9.8938916,23.75 9.9029216,25.755 9.9109516,28 L 118.09511,28 C 118.10414,25.755 118.11317,23.75 118.1212,22 L 9.8848616,22 z" id="path50" style="fill:url(#XMLID_9_);opacity:0.5"/> + <path clip-path="url(#clipPath2844)" d="M 12.8125,28.5 C 12.153269,28.5 11.52721,28.754751 11.09375,29.21875 C 10.661289,29.68375 10.452847,30.312749 10.5,30.96875 C 10.5,30.968937 10.559992,32.232788 10.5625,32.28125 C 10.647737,31.886257 10.815287,31.518165 11.09375,31.21875 C 11.52721,30.754751 12.153269,30.5 12.8125,30.5 L 135.21875,30.5 C 135.87797,30.500001 136.47579,30.75575 136.90625,31.21875 C 137.18342,31.516877 137.35439,31.883216 137.4375,32.28125 L 137.5,30.96875 C 137.55117,30.30075 137.3367,29.68175 136.90625,29.21875 C 136.47579,28.75575 135.87797,28.500001 135.21875,28.5 L 12.8125,28.5 z" id="path2788" style="fill:url(#linearGradient2828);fill-opacity:1;filter:url(#filter2848)" transform="translate(-10,0)"/> + <path d="M 125.21268,28 L 2.799403,28 C 1.143815,28 -0.1124237,29.347 0.007982,30.992 L 3.645263,101.004 C 3.731547,102.652 5.157364,104 6.812952,104 L 121.19913,104 C 122.85472,104 124.28053,102.652 124.36682,101.004 L 127.99106,30.991 C 128.11849,29.346 126.86827,28 125.21268,28 z M 123.86613,100.978 C 123.79288,102.369 122.59585,103.5 121.19913,103.5 L 6.812952,103.5 C 5.415236,103.5 4.2192,102.368 4.145947,100.979 C 4.145947,100.979 0.508666,30.967 0.508666,30.957 C 0.461513,30.301 0.673223,29.685 1.105684,29.22 C 1.539144,28.756 2.140172,28.501 2.799403,28.501 L 125.21268,28.501 C 125.8719,28.501 126.47293,28.756 126.90339,29.219 C 127.33384,29.682 127.54254,30.298 127.49137,30.966 L 123.86613,100.978 z" id="path2836" style="fill:url(#linearGradient2838)"/> + <path d="M 65.931929,44.786008 C 55.175741,44.634267 51.043165,70.978907 35.902168,70.978907 L 97.750451,73.3925 C 81.772038,73.3925 79.337655,44.975127 65.931929,44.786008 z" id="path2857" sodipodi:nodetypes="cccs" style="fill:url(#radialGradient3635);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3653)" transform="matrix(1.0562371,0,0,1.0562371,-3.6968591,-4.2252662)"/> + <g id="g2758" inkscape:label="Layer 1" transform="matrix(0.6943204,0,0,0.6943204,21.245436,37.651516)"> + <g id="g3675"> + <path d="M 64.03125,8.2 C 56.162818,8.2100117 46.828561,34.754451 40.46875,39.3875 C 34.10894,44.020548 5.9844574,44.776082 3.5625,52.2625 C 1.1405426,59.748917 23.465249,76.813524 25.90625,84.29375 C 28.347251,91.77398 20.40967,118.7394 26.78125,123.35625 C 33.15283,127.9731 56.287818,112.02251 64.15625,112.0125 C 72.024682,112.00249 95.202691,127.89555 101.5625,123.2625 C 107.92231,118.62945 99.890544,91.686414 102.3125,84.2 C 104.73446,76.713583 127.03475,59.58648 124.59375,52.10625 C 122.15275,44.626021 94.027829,43.941849 87.65625,39.325 C 81.28467,34.708152 71.899685,8.1899879 64.03125,8.2 z M 64.03125,12.10625 C 64.208046,12.245423 65.56776,12.912264 67.15625,14.85625 C 68.97167,17.077947 71.031426,20.410059 73.0625,23.95 C 75.093573,27.48994 77.113982,31.248819 79.09375,34.5125 C 81.073519,37.776182 82.75512,40.528991 85.40625,42.45 C 88.057376,44.371009 91.18831,45.11637 94.90625,45.98125 C 98.624192,46.846129 102.81606,47.591152 106.8125,48.41875 C 110.80894,49.246347 114.60465,50.166787 117.28125,51.2 C 119.62327,52.104061 120.71845,53.200764 120.90625,53.325 C 120.82618,53.533062 120.57672,54.994782 119.21875,57.10625 C 117.66679,59.519356 115.1453,62.518181 112.40625,65.54375 C 109.66721,68.569316 106.71091,71.652346 104.21875,74.54375 C 101.72659,77.435155 99.632744,79.897501 98.625,83.0125 C 97.617256,86.127495 97.892393,89.334266 98.21875,93.1375 C 98.545107,96.940738 99.114622,101.17466 99.5625,105.23125 C 100.01038,109.28783 100.31178,113.17888 100.15625,116.04375 C 100.02016,118.55052 99.34151,119.89095 99.28125,120.10625 C 99.057443,120.09786 97.552762,120.37027 95.125,119.73125 C 92.350417,119.00093 88.723899,117.49504 85,115.825 C 81.276103,114.15497 77.426259,112.30169 73.90625,110.825 C 70.386242,109.3483 67.4302,108.13334 64.15625,108.1375 C 60.882303,108.14167 57.891241,109.3706 54.375,110.85625 C 50.858761,112.3419 47.032137,114.20799 43.3125,115.8875 C 39.592862,117.567 35.960216,119.05638 33.1875,119.79375 C 30.761373,120.43895 29.286908,120.19088 29.0625,120.2 C 29.004012,119.9864 28.29872,118.6439 28.15625,116.1375 C 27.993428,113.27303 28.281199,109.38271 28.71875,105.325 C 29.156299,101.2673 29.714573,97.035302 30.03125,93.23125 C 30.347928,89.427198 30.609418,86.187425 29.59375,83.075 C 28.578082,79.962573 26.468263,77.522553 23.96875,74.6375 C 21.469238,71.752452 18.527988,68.687339 15.78125,65.66875 C 13.034512,62.650158 10.495601,59.671649 8.9375,57.2625 C 7.5741618,55.154496 7.3592053,53.657399 7.28125,53.45 C 7.2962039,53.537785 8.2681026,52.326785 10.84375,51.325 C 13.517705,50.284977 17.34943,49.350265 21.34375,48.5125 C 25.33807,47.674737 29.534272,46.949339 33.25,46.075 C 36.96573,45.200663 40.103767,44.44025 42.75,42.5125 C 45.396234,40.584748 47.059794,37.812458 49.03125,34.54375 C 51.002705,31.275042 53.009191,27.526347 55.03125,23.98125 C 57.053308,20.436153 59.096493,17.08256 60.90625,14.85625 C 62.489787,12.908229 63.857465,12.244552 64.03125,12.10625 z" id="path3961" style="opacity:1;fill:url(#radialGradient2810);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80851269;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3259)"/> + <path d="M 153.09403,94.713757 C 144.53658,107.09689 92.616372,93.013297 78.414631,98.001518 C 64.21289,102.98974 32.50348,146.4474 18.082028,142.13539 C 3.6605746,137.82337 1.0106378,84.092245 -8.1220219,72.127031 C -17.254681,60.161818 -68.384124,43.433534 -68.739625,28.385431 C -69.095125,13.337327 -18.812666,-5.7867426 -10.255219,-18.169872 C -1.697772,-30.553002 -1.5880954,-84.349316 12.613645,-89.337536 C 26.815387,-94.325757 60.541592,-52.41396 74.963045,-48.101941 C 89.384498,-43.789923 140.58172,-60.30959 149.71438,-48.344376 C 158.84704,-36.379162 129.40853,8.6478227 129.76403,23.695927 C 130.11953,38.74403 161.65148,82.330628 153.09403,94.713757 z" id="path3574" inkscape:flatsided="false" inkscape:randomized="0" inkscape:rounded="0.20136392" sodipodi:arg1="0.60469864" sodipodi:arg2="1.2330172" sodipodi:cx="52.952892" sodipodi:cy="25.510532" sodipodi:r1="121.72647" sodipodi:r2="76.832565" sodipodi:sides="5" sodipodi:type="star" style="opacity:1;fill:url(#radialGradient2812);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80892944;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" transform="matrix(0.4934214,0.1726044,-0.1726044,0.4934214,42.377875,49.908537)"/> + <path d="M 64.03125,8 C 56.162818,8.0100117 46.828561,34.554451 40.46875,39.1875 C 34.10894,43.820548 5.984457,44.576082 3.5625,52.0625 C 1.140543,59.548917 23.465249,76.613524 25.90625,84.09375 C 28.347251,91.57398 20.40967,118.5394 26.78125,123.15625 C 33.15283,127.7731 56.287818,111.82251 64.15625,111.8125 C 72.024682,111.80249 95.202691,127.69555 101.5625,123.0625 C 107.92231,118.42945 99.890544,91.486414 102.3125,84 C 104.73446,76.513583 127.03475,59.38648 124.59375,51.90625 C 122.15275,44.426021 94.027829,43.741849 87.65625,39.125 C 81.28467,34.508152 71.899685,7.9899879 64.03125,8 z M 64.03125,11.90625 C 64.208046,12.045423 65.56776,12.712264 67.15625,14.65625 C 68.97167,16.877947 71.031426,20.210059 73.0625,23.75 C 75.093573,27.28994 77.113982,31.048819 79.09375,34.3125 C 81.073519,37.576182 82.75512,40.328991 85.40625,42.25 C 88.057376,44.171009 91.18831,44.91637 94.90625,45.78125 C 98.624192,46.646129 102.81606,47.391152 106.8125,48.21875 C 110.80894,49.046347 114.60465,49.966787 117.28125,51 C 119.62327,51.904061 120.71845,53.000764 120.90625,53.125 C 120.82618,53.333062 120.57672,54.794782 119.21875,56.90625 C 117.66679,59.319356 115.1453,62.318181 112.40625,65.34375 C 109.66721,68.369316 106.71091,71.452346 104.21875,74.34375 C 101.72659,77.235155 99.632744,79.697501 98.625,82.8125 C 97.617256,85.927495 97.892393,89.134266 98.21875,92.9375 C 98.545107,96.740738 99.114622,100.97466 99.5625,105.03125 C 100.01038,109.08783 100.31178,112.97888 100.15625,115.84375 C 100.02016,118.35052 99.34151,119.69095 99.28125,119.90625 C 99.057443,119.89786 97.552762,120.17027 95.125,119.53125 C 92.350417,118.80093 88.723899,117.29504 85,115.625 C 81.276103,113.95497 77.426259,112.10169 73.90625,110.625 C 70.386242,109.1483 67.4302,107.93334 64.15625,107.9375 C 60.882303,107.94167 57.891241,109.1706 54.375,110.65625 C 50.858761,112.1419 47.032137,114.00799 43.3125,115.6875 C 39.592862,117.367 35.960216,118.85638 33.1875,119.59375 C 30.761373,120.23895 29.286908,119.99088 29.0625,120 C 29.004012,119.7864 28.29872,118.4439 28.15625,115.9375 C 27.993428,113.07303 28.281199,109.18271 28.71875,105.125 C 29.156299,101.0673 29.714573,96.835302 30.03125,93.03125 C 30.347928,89.227198 30.609418,85.987425 29.59375,82.875 C 28.578082,79.762573 26.468263,77.322553 23.96875,74.4375 C 21.469238,71.552452 18.527988,68.487339 15.78125,65.46875 C 13.034512,62.450158 10.495601,59.471649 8.9375,57.0625 C 7.574162,54.954496 7.359205,53.457399 7.28125,53.25 C 7.296204,53.337785 8.268103,52.126785 10.84375,51.125 C 13.517705,50.084977 17.34943,49.150265 21.34375,48.3125 C 25.33807,47.474737 29.534272,46.749339 33.25,45.875 C 36.96573,45.000663 40.103767,44.24025 42.75,42.3125 C 45.396234,40.384748 47.059794,37.612458 49.03125,34.34375 C 51.002705,31.075042 53.009191,27.326347 55.03125,23.78125 C 57.053308,20.236153 59.096493,16.88256 60.90625,14.65625 C 62.489787,12.708229 63.857465,12.044552 64.03125,11.90625 z" id="path2304" style="opacity:1;fill:url(#linearGradient2814);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80851269;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"/> + <path d="M 60.98796,9.471226 C 62.846491,8.2143022 64.889907,8.0204702 67.219338,9.471226 L 64.037358,15.614216 L 60.98796,9.471226 z" id="path3409" sodipodi:nodetypes="cccc" style="fill:url(#linearGradient2816);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3838)"/> + <path d="M 64.039064,11.90625 C 63.865274,12.044552 62.497594,12.708229 60.914064,14.65625 C 59.104304,16.88256 57.061124,20.236153 55.039064,23.78125 C 53.017004,27.326347 51.010514,31.075042 49.039064,34.34375 C 47.067604,37.612458 45.404044,40.384748 42.757814,42.3125 C 40.111574,44.24025 36.973544,45.000663 33.257814,45.875 C 29.542084,46.749339 25.345884,47.474737 21.351564,48.3125 C 17.357244,49.150265 13.525514,50.084977 10.851564,51.125 C 8.2759131,52.126785 7.3040131,53.337785 7.2890631,53.25 C 7.3670131,53.457399 7.5819731,54.954496 8.9453131,57.0625 C 10.503414,59.471649 13.042324,62.450158 15.789064,65.46875 C 18.535804,68.487339 21.477054,71.552452 23.976564,74.4375 C 26.476074,77.322553 28.585894,79.762573 29.601564,82.875 C 29.865144,83.682722 30.019904,84.511238 30.132814,85.34375 C 32.540654,85.431079 34.961934,85.5 37.414064,85.5 C 64.456484,85.5 88.974124,80.107134 106.91406,71.34375 C 108.71383,69.370041 110.60784,67.338911 112.41406,65.34375 C 115.15311,62.318181 117.67459,59.319356 119.22656,56.90625 C 120.58453,54.794782 120.83398,53.333062 120.91406,53.125 C 120.72626,53.000764 119.63107,51.904061 117.28906,51 C 114.61246,49.966787 110.81674,49.046347 106.82031,48.21875 C 102.82387,47.391152 98.631994,46.646129 94.914064,45.78125 C 91.196124,44.91637 88.065184,44.171009 85.414064,42.25 C 82.762934,40.328991 81.081334,37.576182 79.101564,34.3125 C 77.121794,31.048819 75.101384,27.28994 73.070314,23.75 C 71.039234,20.210059 68.979484,16.877947 67.164064,14.65625 C 65.575574,12.712264 64.215854,12.045423 64.039064,11.90625 z" id="path3370" style="opacity:1;fill:url(#radialGradient2818);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80892944;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"/> + <path d="M 44.96875,33.9375 L 44.1875,35.21875 C 44.177097,35.219516 44.166653,35.219516 44.15625,35.21875 L 42.8125,36.9375 L 41.53125,38.46875 C 41.521947,38.480223 41.511473,38.490697 41.5,38.5 L 40.03125,39.71875 C 40.021947,39.730223 40.011473,39.740697 40,39.75 L 37.125,41.03125 C 37.115697,41.042723 37.105223,41.053197 37.09375,41.0625 L 33.875,41.96875 L 33.375,45.625 L 35.125,45.21875 L 35.125,45.25 L 39.71875,43.75 L 39.75,43.75 L 42.8125,42.0625 L 42.875,42.03125 L 45.78125,39.09375 L 45.8125,39.0625 L 48.96875,34.03125 L 44.96875,33.9375 z" id="path3667" inkscape:original="M 44.84375 33.71875 L 44 35.09375 L 42.65625 36.8125 L 41.375 38.34375 L 39.90625 39.5625 L 37.03125 40.84375 L 33.6875 41.78125 L 33.09375 45.9375 L 35.1875 45.4375 L 39.8125 43.9375 L 42.96875 42.21875 L 45.96875 39.21875 L 49.375 33.8125 L 44.84375 33.71875 z " inkscape:radius="-0.21269609" sodipodi:type="inkscape:offset" style="opacity:0.64356432;fill:url(#radialGradient2820);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3663)" transform="translate(0,0.3)"/> + <path d="M 64.039064,11.90625 C 63.865274,12.044552 62.497594,12.708229 60.914064,14.65625 C 59.104304,16.88256 57.061124,20.236153 55.039064,23.78125 C 53.017004,27.326347 51.010514,31.075042 49.039064,34.34375 C 47.067604,37.612458 45.404044,40.384748 42.757814,42.3125 C 40.111574,44.24025 36.973544,45.000663 33.257814,45.875 C 29.542084,46.749339 25.345884,47.474737 21.351564,48.3125 C 17.357244,49.150265 13.525514,50.084977 10.851564,51.125 C 8.2759131,52.126785 7.3040131,53.337785 7.2890631,53.25 C 7.3670131,53.457399 7.5819731,54.954496 8.9453131,57.0625 C 10.503414,59.471649 13.042324,62.450158 15.789064,65.46875 C 18.535804,68.487339 21.477054,71.552452 23.976564,74.4375 C 26.476074,77.322553 28.585894,79.762573 29.601564,82.875 C 29.865144,83.682722 30.019904,84.511238 30.132814,85.34375 C 32.540654,85.431079 34.961934,85.5 37.414064,85.5 C 64.456484,85.5 88.974124,80.107134 106.91406,71.34375 C 108.71383,69.370041 110.60784,67.338911 112.41406,65.34375 C 115.15311,62.318181 117.67459,59.319356 119.22656,56.90625 C 120.58453,54.794782 120.83398,53.333062 120.91406,53.125 C 120.72626,53.000764 119.63107,51.904061 117.28906,51 C 114.61246,49.966787 110.81674,49.046347 106.82031,48.21875 C 102.82387,47.391152 98.631994,46.646129 94.914064,45.78125 C 91.196124,44.91637 88.065184,44.171009 85.414064,42.25 C 82.762934,40.328991 81.081334,37.576182 79.101564,34.3125 C 77.121794,31.048819 75.101384,27.28994 73.070314,23.75 C 71.039234,20.210059 68.979484,16.877947 67.164064,14.65625 C 65.575574,12.712264 64.215854,12.045423 64.039064,11.90625 z" id="path2910" style="opacity:1;fill:url(#linearGradient2823);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80892944;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"/> + <path d="M 44.96875,33.9375 L 44.1875,35.21875 C 44.177097,35.219516 44.166653,35.219516 44.15625,35.21875 L 42.8125,36.9375 L 41.53125,38.46875 C 41.521947,38.480223 41.511473,38.490697 41.5,38.5 L 40.03125,39.71875 C 40.021947,39.730223 40.011473,39.740697 40,39.75 L 37.125,41.03125 C 37.115697,41.042723 37.105223,41.053197 37.09375,41.0625 L 33.875,41.96875 L 33.375,45.625 L 35.125,45.21875 L 35.125,45.25 L 39.71875,43.75 L 39.75,43.75 L 42.8125,42.0625 L 42.875,42.03125 L 45.78125,39.09375 L 45.8125,39.0625 L 48.96875,34.03125 L 44.96875,33.9375 z" id="path3671" inkscape:original="M 44.84375 33.71875 L 44 35.09375 L 42.65625 36.8125 L 41.375 38.34375 L 39.90625 39.5625 L 37.03125 40.84375 L 33.6875 41.78125 L 33.09375 45.9375 L 35.1875 45.4375 L 39.8125 43.9375 L 42.96875 42.21875 L 45.96875 39.21875 L 49.375 33.8125 L 44.84375 33.71875 z " inkscape:radius="-0.21269609" sodipodi:type="inkscape:offset" style="opacity:0.64356432;fill:url(#radialGradient2825);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3663)" transform="matrix(-1,0,0,1,128.125,0.3)"/> + <g id="g3339" transform="translate(-132.29928,0)"> + <path d="M 196.34375,11.90625 C 196.16996,12.044552 194.80228,12.708229 193.21875,14.65625 C 191.40899,16.88256 189.36581,20.236153 187.34375,23.78125 C 185.32169,27.326347 183.3152,31.075042 181.34375,34.34375 C 179.37229,37.612458 177.70873,40.384748 175.0625,42.3125 C 172.41626,44.24025 169.27823,45.000663 165.5625,45.875 C 161.84677,46.749339 157.65057,47.474737 153.65625,48.3125 C 149.66193,49.150265 145.8302,50.084977 143.15625,51.125 C 140.5806,52.126785 139.6087,53.337785 139.59375,53.25 C 139.62377,53.329884 139.71528,53.638731 139.84375,54.0625 C 140.2595,53.69998 141.25985,52.862595 143.15625,52.125 C 145.8302,51.084977 149.66193,50.150265 153.65625,49.3125 C 157.65057,48.474737 161.84677,47.749339 165.5625,46.875 C 169.27823,46.000663 172.41626,45.24025 175.0625,43.3125 C 177.70873,41.384748 179.37229,38.612458 181.34375,35.34375 C 183.3152,32.075042 185.32169,28.326347 187.34375,24.78125 C 189.36581,21.236153 191.40899,17.88256 193.21875,15.65625 C 194.80228,13.708229 196.16996,13.044552 196.34375,12.90625 C 196.52054,13.045423 197.88026,13.712264 199.46875,15.65625 C 201.28417,17.877947 203.34392,21.210059 205.375,24.75 C 207.40607,28.28994 209.42648,32.048819 211.40625,35.3125 C 213.38602,38.576182 215.06762,41.328991 217.71875,43.25 C 220.36987,45.171009 223.50081,45.91637 227.21875,46.78125 C 230.93668,47.646129 235.12856,48.391152 239.125,49.21875 C 243.12143,50.046347 246.91715,50.966787 249.59375,52 C 251.51448,52.74144 252.56925,53.579608 253,53.9375 C 253.13371,53.522484 253.18802,53.204851 253.21875,53.125 C 253.03095,53.000764 251.93576,51.904061 249.59375,51 C 246.91715,49.966787 243.12143,49.046347 239.125,48.21875 C 235.12856,47.391152 230.93668,46.646129 227.21875,45.78125 C 223.50081,44.91637 220.36987,44.171009 217.71875,42.25 C 215.06762,40.328991 213.38602,37.576182 211.40625,34.3125 C 209.42648,31.048819 207.40607,27.28994 205.375,23.75 C 203.34392,20.210059 201.28417,16.877947 199.46875,14.65625 C 197.88026,12.712264 196.52054,12.045423 196.34375,11.90625 z" id="path3317" style="opacity:1;fill:url(#linearGradient2827);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80892944;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"/> + <path d="M 246.78125,49.937636 C 247.42469,50.142466 248.03845,50.379526 248.59375,50.593886 C 250.93576,51.497946 252.03095,52.594656 252.21875,52.718886 C 252.13867,52.926956 251.88922,54.388676 250.53125,56.500136 C 248.97928,58.913246 246.4578,61.912066 243.71875,64.937636 C 241.91253,66.932796 240.01852,68.963926 238.21875,70.937636 C 220.27881,79.701026 195.76117,85.093886 168.71875,85.093886 C 166.59433,85.093886 164.49568,85.039506 162.40625,84.968886 C 162.4184,85.051736 162.42625,85.135936 162.4375,85.218886 C 164.84534,85.306216 167.26662,85.375136 169.71875,85.375136 C 196.76117,85.375136 221.27881,79.982276 239.21875,71.218886 C 241.01852,69.245176 242.91253,67.214046 244.71875,65.218886 C 247.4578,62.193316 249.97928,59.194496 251.53125,56.781386 C 252.88922,54.669926 253.13867,53.208206 253.21875,53.000136 C 253.03095,52.875906 251.93576,51.779196 249.59375,50.875136 C 248.75868,50.552786 247.80629,50.238636 246.78125,49.937636 z" id="path3325" sodipodi:nodetypes="cscsscsccscsscsc" style="opacity:1;fill:url(#linearGradient2829);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80892944;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"/> + </g> + <path d="M 25.190679,119.77989 C 26.414679,122.74238 27.241162,124.11897 31.289475,123.31542 L 30.638356,120.21008 L 29.079766,120.3986 L 28.261711,118.57341 L 25.190679,119.77989 z" id="path3842" sodipodi:nodetypes="cccccc" style="opacity:0.7715356;fill:url(#linearGradient2831);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3928)"/> + <path d="M 26.03125,94.25 C 24.983755,105.1142 22.21942,119.85075 26.78125,123.15625 C 33.15283,127.7731 56.287818,111.82251 64.15625,111.8125 C 72.024682,111.80249 95.202691,127.69555 101.5625,123.0625 C 106.10279,119.75495 103.30815,105.10184 102.21875,94.25 L 98.34375,94.25 C 98.677864,97.707156 99.164649,101.42777 99.5625,105.03125 C 100.01038,109.08783 100.31178,112.97888 100.15625,115.84375 C 100.02016,118.35052 99.34151,119.69095 99.28125,119.90625 C 99.057443,119.89786 97.552762,120.17027 95.125,119.53125 C 92.350417,118.80093 88.723899,117.29504 85,115.625 C 81.276103,113.95497 77.426259,112.10169 73.90625,110.625 C 70.386242,109.1483 67.4302,107.93334 64.15625,107.9375 C 60.882303,107.94167 57.891241,109.1706 54.375,110.65625 C 50.858761,112.1419 47.032137,114.00799 43.3125,115.6875 C 39.592862,117.367 35.960216,118.85638 33.1875,119.59375 C 30.761373,120.23895 29.286908,119.99088 29.0625,120 C 29.004012,119.7864 28.29872,118.4439 28.15625,115.9375 C 27.993428,113.07303 28.281199,109.18271 28.71875,105.125 C 29.110886,101.48845 29.580993,97.733027 29.90625,94.25 L 26.03125,94.25 z" id="path3936" style="opacity:1;fill:url(#radialGradient2833);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80851269;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"/> + <path d="M 64.125001,11.90625 C 63.951211,12.044552 62.583531,12.708229 61.000001,14.65625 C 59.190241,16.88256 57.147061,20.236153 55.125001,23.78125 C 53.102941,27.326347 51.096451,31.075042 49.125001,34.34375 C 47.153541,37.612458 45.489981,40.384748 42.843751,42.3125 C 40.197511,44.24025 37.059481,45.000663 33.343751,45.875 C 29.628021,46.749339 25.431821,47.474737 21.437501,48.3125 C 17.443181,49.150265 13.611451,50.084977 10.937501,51.125 C 8.3618506,52.126785 7.3899506,53.337785 7.3750006,53.25 C 7.4529506,53.457399 7.6679106,54.954496 9.0312506,57.0625 C 10.589351,59.471649 13.128261,62.450158 15.875001,65.46875 C 18.621741,68.487339 21.562991,71.552452 24.062501,74.4375 C 26.562011,77.322553 28.671831,79.762573 29.687501,82.875 C 30.703171,85.987425 30.441681,89.227198 30.125001,93.03125 C 29.808321,96.835302 29.250051,101.0673 28.812501,105.125 C 28.374951,109.18271 28.087181,113.07303 28.250001,115.9375 C 28.392471,118.4439 29.097761,119.7864 29.156251,120 C 29.380661,119.99088 30.855121,120.23895 33.281251,119.59375 C 36.053961,118.85638 39.686611,117.367 43.406251,115.6875 C 47.125881,114.00799 50.952511,112.1419 54.468751,110.65625 C 57.984991,109.1706 60.976051,107.94167 64.250001,107.9375 C 67.523951,107.93334 70.479991,109.1483 74.000001,110.625 C 77.520011,112.10169 81.369851,113.95497 85.093751,115.625 C 88.817651,117.29504 92.444151,118.80093 95.218751,119.53125 C 97.646511,120.17027 99.151181,119.89786 99.375001,119.90625 C 99.435261,119.69095 100.1139,118.35052 100.25,115.84375 C 100.40553,112.97888 100.10412,109.08783 99.656251,105.03125 C 99.208371,100.97466 98.638841,96.740738 98.312501,92.9375 C 97.986141,89.134266 97.710991,85.927495 98.718751,82.8125 C 99.726491,79.697501 101.82033,77.235155 104.3125,74.34375 C 106.80466,71.452346 109.76095,68.369316 112.5,65.34375 C 115.23905,62.318181 117.76053,59.319356 119.3125,56.90625 C 120.67047,54.794782 120.91992,53.333062 121,53.125 C 120.8122,53.000764 119.71701,51.904061 117.375,51 C 114.6984,49.966787 110.90268,49.046347 106.90625,48.21875 C 102.90981,47.391152 98.717931,46.646129 95.000001,45.78125 C 91.282061,44.91637 88.151121,44.171009 85.500001,42.25 C 82.848871,40.328991 81.167271,37.576182 79.187501,34.3125 C 77.207731,31.048819 75.187321,27.28994 73.156251,23.75 C 71.125171,20.210059 69.065421,16.877947 67.250001,14.65625 C 65.661511,12.712264 64.301791,12.045423 64.125001,11.90625 z" id="path3375" sodipodi:nodetypes="cssssssssssssssscssssssscssssssscsssssssc" style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient2835);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3391)"/> + <g id="g3612" transform="matrix(-1,0,0,1,128.17175,0)"> + <path d="M 122.34464,49.937924 L 118.89749,52.943128 L 119.6046,54.97606 L 123.93563,55.771555 C 124.26838,53.827011 124.96313,51.882468 122.34464,49.937924 z" id="path3614" sodipodi:nodetypes="ccccc" style="opacity:0.60891089;fill:url(#radialGradient2837);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3564)"/> + <path d="M 122.34464,49.937924 L 118.89749,52.943128 L 119.6046,54.97606 L 123.93563,55.771555 C 124.26838,53.827011 124.96313,51.882468 122.34464,49.937924 z" id="path3616" sodipodi:nodetypes="ccccc" style="opacity:0.60891089;fill:url(#radialGradient2839);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3604)"/> + </g> + <g id="g3608"> + <path d="M 122.34464,49.937924 L 118.89749,52.943128 L 119.6046,54.97606 L 123.93563,55.771555 C 124.26838,53.827011 124.96313,51.882468 122.34464,49.937924 z" id="path3374" sodipodi:nodetypes="ccccc" style="opacity:0.60891089;fill:url(#radialGradient2841);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3564)"/> + <path d="M 122.34464,49.937924 L 118.89749,52.943128 L 119.6046,54.97606 L 123.93563,55.771555 C 124.26838,53.827011 124.96313,51.882468 122.34464,49.937924 z" id="path3568" sodipodi:nodetypes="ccccc" style="opacity:0.60891089;fill:url(#radialGradient2843);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3604)"/> + </g> + <path d="M 64.125001,11.90625 C 63.951211,12.044552 62.583531,12.708229 61.000001,14.65625 C 59.190241,16.88256 57.147061,20.236153 55.125001,23.78125 C 53.102941,27.326347 51.096451,31.075042 49.125001,34.34375 C 47.153541,37.612458 45.489981,40.384748 42.843751,42.3125 C 40.197511,44.24025 37.059481,45.000663 33.343751,45.875 C 29.628021,46.749339 25.431821,47.474737 21.437501,48.3125 C 17.443181,49.150265 13.611451,50.084977 10.937501,51.125 C 8.3618506,52.126785 7.3899506,53.337785 7.3750006,53.25 C 7.4529506,53.457399 7.6679106,54.954496 9.0312506,57.0625 C 10.589351,59.471649 13.128261,62.450158 15.875001,65.46875 C 18.621741,68.487339 21.562991,71.552452 24.062501,74.4375 C 26.562011,77.322553 28.671831,79.762573 29.687501,82.875 C 30.703171,85.987425 30.441681,89.227198 30.125001,93.03125 C 29.808321,96.835302 29.250051,101.0673 28.812501,105.125 C 28.374951,109.18271 28.087181,113.07303 28.250001,115.9375 C 28.392471,118.4439 29.097761,119.7864 29.156251,120 C 29.380661,119.99088 30.855121,120.23895 33.281251,119.59375 C 36.053961,118.85638 39.686611,117.367 43.406251,115.6875 C 47.125881,114.00799 50.952511,112.1419 54.468751,110.65625 C 57.984991,109.1706 60.976051,107.94167 64.250001,107.9375 C 67.523951,107.93334 70.479991,109.1483 74.000001,110.625 C 77.520011,112.10169 81.369851,113.95497 85.093751,115.625 C 88.817651,117.29504 92.444151,118.80093 95.218751,119.53125 C 97.646511,120.17027 99.151181,119.89786 99.375001,119.90625 C 99.435261,119.69095 100.1139,118.35052 100.25,115.84375 C 100.40553,112.97888 100.10412,109.08783 99.656251,105.03125 C 99.208371,100.97466 98.638841,96.740738 98.312501,92.9375 C 97.986141,89.134266 97.710991,85.927495 98.718751,82.8125 C 99.726491,79.697501 101.82033,77.235155 104.3125,74.34375 C 106.80466,71.452346 109.76095,68.369316 112.5,65.34375 C 115.23905,62.318181 117.76053,59.319356 119.3125,56.90625 C 120.67047,54.794782 120.91992,53.333062 121,53.125 C 120.8122,53.000764 119.71701,51.904061 117.375,51 C 114.6984,49.966787 110.90268,49.046347 106.90625,48.21875 C 102.90981,47.391152 98.717931,46.646129 95.000001,45.78125 C 91.282061,44.91637 88.151121,44.171009 85.500001,42.25 C 82.848871,40.328991 81.167271,37.576182 79.187501,34.3125 C 77.207731,31.048819 75.187321,27.28994 73.156251,23.75 C 71.125171,20.210059 69.065421,16.877947 67.250001,14.65625 C 65.661511,12.712264 64.301791,12.045423 64.125001,11.90625 z" id="path3395" sodipodi:nodetypes="cssssssssssssssscssssssscssssssscsssssssc" style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient2845);stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3401)"/> + <path d="M 25.190679,119.77989 C 26.414679,122.74238 27.241162,124.11897 31.289475,123.31542 L 30.638356,120.21008 L 29.079766,120.3986 L 28.261711,118.57341 L 25.190679,119.77989 z" id="path3932" sodipodi:nodetypes="cccccc" style="opacity:0.7715356;fill:url(#linearGradient2847);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3928)" transform="matrix(-1,0,0,1,128.10515,0)"/> + <path d="M 26.03125,94.25 C 24.983755,105.1142 22.21942,119.85075 26.78125,123.15625 C 33.15283,127.7731 56.287818,110.82251 64.15625,110.8125 C 72.024682,110.80249 95.202691,127.69555 101.5625,123.0625 C 106.10279,119.75495 103.30815,105.10184 102.21875,94.25 L 98.34375,94.25 C 98.677864,97.707156 99.164649,101.42777 99.5625,105.03125 C 100.01038,109.08783 100.31178,112.97888 100.15625,115.84375 C 100.02016,118.35052 99.34151,119.69095 99.28125,119.90625 C 99.057443,119.89786 97.552762,120.17027 95.125,119.53125 C 92.350417,118.80093 88.723899,117.29504 85,115.625 C 81.276103,113.95497 77.426259,112.10169 73.90625,110.625 C 70.386242,109.1483 67.4302,107.93334 64.15625,107.9375 C 60.882303,107.94167 57.891241,109.1706 54.375,110.65625 C 50.858761,112.1419 47.032137,114.00799 43.3125,115.6875 C 39.592862,117.367 35.960216,118.85638 33.1875,119.59375 C 30.761373,120.23895 29.286908,119.99088 29.0625,120 C 29.004012,119.7864 28.29872,118.4439 28.15625,115.9375 C 27.993428,113.07303 28.281199,109.18271 28.71875,105.125 C 29.110886,101.48845 29.580993,97.733027 29.90625,94.25 L 26.03125,94.25 z" id="path3265" sodipodi:nodetypes="csssccsscssssssscsscc" style="opacity:1;fill:url(#radialGradient2849);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80851269;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3285)"/> + <path d="M 3.96875,51.25 C 3.8072482,51.513327 3.653679,51.78066 3.5625,52.0625 C 1.4104994,58.714465 18.791507,72.91663 24.40625,81.25 C 25.066744,82.219734 25.881994,83.560003 26.151902,85.050699 C 27.656842,84.748586 29.576041,82.642021 28.90625,81.25 C 27.768648,78.87567 26.012193,76.796136 23.96875,74.4375 C 21.469238,71.552452 18.527988,68.487339 15.78125,65.46875 C 13.034512,62.450158 10.495601,59.471649 8.9375,57.0625 C 7.574162,54.954496 7.359205,53.457399 7.28125,53.25 C 7.2955626,53.33402 8.1966214,52.223338 10.53125,51.25 L 3.96875,51.25 z M 117.875,51.25 C 119.79897,52.094675 120.73559,53.012104 120.90625,53.125 C 120.82618,53.333062 120.57672,54.794782 119.21875,56.90625 C 117.66679,59.319356 115.1453,62.318181 112.40625,65.34375 C 109.66721,68.369316 106.71091,71.452346 104.21875,74.34375 C 102.16137,76.730721 100.3775,78.839259 99.25,81.25 C 98.389358,83.690958 101.19084,84.749904 102.08854,84.829728 C 102.41731,83.373922 103.07445,82.301223 103.75,81.25 C 109.28341,72.913848 126.77026,58.575986 124.59375,51.90625 C 124.52034,51.681299 124.39982,51.462951 124.28125,51.25 L 117.875,51.25 z" id="rect3289" sodipodi:nodetypes="cscccssssccccssscccscc" style="opacity:0.84158415;fill:url(#radialGradient2851);fill-opacity:1;stroke:none;stroke-width:6.1420002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter3362)"/> + </g> + <g id="g3701"> + <path d="M 64.03125,8.2 C 56.162818,8.2100117 46.828561,34.754451 40.46875,39.3875 C 34.10894,44.020548 5.9844574,44.776082 3.5625,52.2625 C 1.1405426,59.748917 23.465249,76.813524 25.90625,84.29375 C 28.347251,91.77398 20.40967,118.7394 26.78125,123.35625 C 33.15283,127.9731 56.287818,112.02251 64.15625,112.0125 C 72.024682,112.00249 95.202691,127.89555 101.5625,123.2625 C 107.92231,118.62945 99.890544,91.686414 102.3125,84.2 C 104.73446,76.713583 127.03475,59.58648 124.59375,52.10625 C 122.15275,44.626021 94.027829,43.941849 87.65625,39.325 C 81.28467,34.708152 71.899685,8.1899879 64.03125,8.2 z M 64.03125,12.10625 C 64.208046,12.245423 65.56776,12.912264 67.15625,14.85625 C 68.97167,17.077947 71.031426,20.410059 73.0625,23.95 C 75.093573,27.48994 77.113982,31.248819 79.09375,34.5125 C 81.073519,37.776182 82.75512,40.528991 85.40625,42.45 C 88.057376,44.371009 91.18831,45.11637 94.90625,45.98125 C 98.624192,46.846129 102.81606,47.591152 106.8125,48.41875 C 110.80894,49.246347 114.60465,50.166787 117.28125,51.2 C 119.62327,52.104061 120.71845,53.200764 120.90625,53.325 C 120.82618,53.533062 120.57672,54.994782 119.21875,57.10625 C 117.66679,59.519356 115.1453,62.518181 112.40625,65.54375 C 109.66721,68.569316 106.71091,71.652346 104.21875,74.54375 C 101.72659,77.435155 99.632744,79.897501 98.625,83.0125 C 97.617256,86.127495 97.892393,89.334266 98.21875,93.1375 C 98.545107,96.940738 99.114622,101.17466 99.5625,105.23125 C 100.01038,109.28783 100.31178,113.17888 100.15625,116.04375 C 100.02016,118.55052 99.34151,119.89095 99.28125,120.10625 C 99.057443,120.09786 97.552762,120.37027 95.125,119.73125 C 92.350417,119.00093 88.723899,117.49504 85,115.825 C 81.276103,114.15497 77.426259,112.30169 73.90625,110.825 C 70.386242,109.3483 67.4302,108.13334 64.15625,108.1375 C 60.882303,108.14167 57.891241,109.3706 54.375,110.85625 C 50.858761,112.3419 47.032137,114.20799 43.3125,115.8875 C 39.592862,117.567 35.960216,119.05638 33.1875,119.79375 C 30.761373,120.43895 29.286908,120.19088 29.0625,120.2 C 29.004012,119.9864 28.29872,118.6439 28.15625,116.1375 C 27.993428,113.27303 28.281199,109.38271 28.71875,105.325 C 29.156299,101.2673 29.714573,97.035302 30.03125,93.23125 C 30.347928,89.427198 30.609418,86.187425 29.59375,83.075 C 28.578082,79.962573 26.468263,77.522553 23.96875,74.6375 C 21.469238,71.752452 18.527988,68.687339 15.78125,65.66875 C 13.034512,62.650158 10.495601,59.671649 8.9375,57.2625 C 7.5741618,55.154496 7.3592053,53.657399 7.28125,53.45 C 7.2962039,53.537785 8.2681026,52.326785 10.84375,51.325 C 13.517705,50.284977 17.34943,49.350265 21.34375,48.5125 C 25.33807,47.674737 29.534272,46.949339 33.25,46.075 C 36.96573,45.200663 40.103767,44.44025 42.75,42.5125 C 45.396234,40.584748 47.059794,37.812458 49.03125,34.54375 C 51.002705,31.275042 53.009191,27.526347 55.03125,23.98125 C 57.053308,20.436153 59.096493,17.08256 60.90625,14.85625 C 62.489787,12.908229 63.857465,12.244552 64.03125,12.10625 z" id="path3703" style="opacity:1;fill:url(#radialGradient3263);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80851269;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3259)"/> + <path d="M 153.09403,94.713757 C 144.53658,107.09689 92.616372,93.013297 78.414631,98.001518 C 64.21289,102.98974 32.50348,146.4474 18.082028,142.13539 C 3.6605746,137.82337 1.0106378,84.092245 -8.1220219,72.127031 C -17.254681,60.161818 -68.384124,43.433534 -68.739625,28.385431 C -69.095125,13.337327 -18.812666,-5.7867426 -10.255219,-18.169872 C -1.697772,-30.553002 -1.5880954,-84.349316 12.613645,-89.337536 C 26.815387,-94.325757 60.541592,-52.41396 74.963045,-48.101941 C 89.384498,-43.789923 140.58172,-60.30959 149.71438,-48.344376 C 158.84704,-36.379162 129.40853,8.6478227 129.76403,23.695927 C 130.11953,38.74403 161.65148,82.330628 153.09403,94.713757 z" id="path3705" inkscape:flatsided="false" inkscape:randomized="0" inkscape:rounded="0.20136392" sodipodi:arg1="0.60469864" sodipodi:arg2="1.2330172" sodipodi:cx="52.952892" sodipodi:cy="25.510532" sodipodi:r1="121.72647" sodipodi:r2="76.832565" sodipodi:sides="5" sodipodi:type="star" style="opacity:1;fill:url(#radialGradient2906);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80892944;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" transform="matrix(0.4934214,0.1726044,-0.1726044,0.4934214,42.377875,49.908537)"/> + <path d="M 64.03125,8 C 56.162818,8.0100117 46.828561,34.554451 40.46875,39.1875 C 34.10894,43.820548 5.984457,44.576082 3.5625,52.0625 C 1.140543,59.548917 23.465249,76.613524 25.90625,84.09375 C 28.347251,91.57398 20.40967,118.5394 26.78125,123.15625 C 33.15283,127.7731 56.287818,111.82251 64.15625,111.8125 C 72.024682,111.80249 95.202691,127.69555 101.5625,123.0625 C 107.92231,118.42945 99.890544,91.486414 102.3125,84 C 104.73446,76.513583 127.03475,59.38648 124.59375,51.90625 C 122.15275,44.426021 94.027829,43.741849 87.65625,39.125 C 81.28467,34.508152 71.899685,7.9899879 64.03125,8 z M 64.03125,11.90625 C 64.208046,12.045423 65.56776,12.712264 67.15625,14.65625 C 68.97167,16.877947 71.031426,20.210059 73.0625,23.75 C 75.093573,27.28994 77.113982,31.048819 79.09375,34.3125 C 81.073519,37.576182 82.75512,40.328991 85.40625,42.25 C 88.057376,44.171009 91.18831,44.91637 94.90625,45.78125 C 98.624192,46.646129 102.81606,47.391152 106.8125,48.21875 C 110.80894,49.046347 114.60465,49.966787 117.28125,51 C 119.62327,51.904061 120.71845,53.000764 120.90625,53.125 C 120.82618,53.333062 120.57672,54.794782 119.21875,56.90625 C 117.66679,59.319356 115.1453,62.318181 112.40625,65.34375 C 109.66721,68.369316 106.71091,71.452346 104.21875,74.34375 C 101.72659,77.235155 99.632744,79.697501 98.625,82.8125 C 97.617256,85.927495 97.892393,89.134266 98.21875,92.9375 C 98.545107,96.740738 99.114622,100.97466 99.5625,105.03125 C 100.01038,109.08783 100.31178,112.97888 100.15625,115.84375 C 100.02016,118.35052 99.34151,119.69095 99.28125,119.90625 C 99.057443,119.89786 97.552762,120.17027 95.125,119.53125 C 92.350417,118.80093 88.723899,117.29504 85,115.625 C 81.276103,113.95497 77.426259,112.10169 73.90625,110.625 C 70.386242,109.1483 67.4302,107.93334 64.15625,107.9375 C 60.882303,107.94167 57.891241,109.1706 54.375,110.65625 C 50.858761,112.1419 47.032137,114.00799 43.3125,115.6875 C 39.592862,117.367 35.960216,118.85638 33.1875,119.59375 C 30.761373,120.23895 29.286908,119.99088 29.0625,120 C 29.004012,119.7864 28.29872,118.4439 28.15625,115.9375 C 27.993428,113.07303 28.281199,109.18271 28.71875,105.125 C 29.156299,101.0673 29.714573,96.835302 30.03125,93.03125 C 30.347928,89.227198 30.609418,85.987425 29.59375,82.875 C 28.578082,79.762573 26.468263,77.322553 23.96875,74.4375 C 21.469238,71.552452 18.527988,68.487339 15.78125,65.46875 C 13.034512,62.450158 10.495601,59.471649 8.9375,57.0625 C 7.574162,54.954496 7.359205,53.457399 7.28125,53.25 C 7.296204,53.337785 8.268103,52.126785 10.84375,51.125 C 13.517705,50.084977 17.34943,49.150265 21.34375,48.3125 C 25.33807,47.474737 29.534272,46.749339 33.25,45.875 C 36.96573,45.000663 40.103767,44.24025 42.75,42.3125 C 45.396234,40.384748 47.059794,37.612458 49.03125,34.34375 C 51.002705,31.075042 53.009191,27.326347 55.03125,23.78125 C 57.053308,20.236153 59.096493,16.88256 60.90625,14.65625 C 62.489787,12.708229 63.857465,12.044552 64.03125,11.90625 z" id="path3707" style="opacity:1;fill:url(#linearGradient2475);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80851269;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"/> + <path d="M 60.98796,9.471226 C 62.846491,8.2143022 64.889907,8.0204702 67.219338,9.471226 L 64.037358,15.614216 L 60.98796,9.471226 z" id="path3709" sodipodi:nodetypes="cccc" style="fill:url(#linearGradient3800);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3838)"/> + <path d="M 64.039064,11.90625 C 63.865274,12.044552 62.497594,12.708229 60.914064,14.65625 C 59.104304,16.88256 57.061124,20.236153 55.039064,23.78125 C 53.017004,27.326347 51.010514,31.075042 49.039064,34.34375 C 47.067604,37.612458 45.404044,40.384748 42.757814,42.3125 C 40.111574,44.24025 36.973544,45.000663 33.257814,45.875 C 29.542084,46.749339 25.345884,47.474737 21.351564,48.3125 C 17.357244,49.150265 13.525514,50.084977 10.851564,51.125 C 8.2759131,52.126785 7.3040131,53.337785 7.2890631,53.25 C 7.3670131,53.457399 7.5819731,54.954496 8.9453131,57.0625 C 10.503414,59.471649 13.042324,62.450158 15.789064,65.46875 C 18.535804,68.487339 21.477054,71.552452 23.976564,74.4375 C 26.476074,77.322553 28.585894,79.762573 29.601564,82.875 C 29.865144,83.682722 30.019904,84.511238 30.132814,85.34375 C 32.540654,85.431079 34.961934,85.5 37.414064,85.5 C 64.456484,85.5 88.974124,80.107134 106.91406,71.34375 C 108.71383,69.370041 110.60784,67.338911 112.41406,65.34375 C 115.15311,62.318181 117.67459,59.319356 119.22656,56.90625 C 120.58453,54.794782 120.83398,53.333062 120.91406,53.125 C 120.72626,53.000764 119.63107,51.904061 117.28906,51 C 114.61246,49.966787 110.81674,49.046347 106.82031,48.21875 C 102.82387,47.391152 98.631994,46.646129 94.914064,45.78125 C 91.196124,44.91637 88.065184,44.171009 85.414064,42.25 C 82.762934,40.328991 81.081334,37.576182 79.101564,34.3125 C 77.121794,31.048819 75.101384,27.28994 73.070314,23.75 C 71.039234,20.210059 68.979484,16.877947 67.164064,14.65625 C 65.575574,12.712264 64.215854,12.045423 64.039064,11.90625 z" id="path3711" style="opacity:1;fill:url(#radialGradient3372);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80892944;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"/> + <path d="M 44.96875,33.9375 L 44.1875,35.21875 C 44.177097,35.219516 44.166653,35.219516 44.15625,35.21875 L 42.8125,36.9375 L 41.53125,38.46875 C 41.521947,38.480223 41.511473,38.490697 41.5,38.5 L 40.03125,39.71875 C 40.021947,39.730223 40.011473,39.740697 40,39.75 L 37.125,41.03125 C 37.115697,41.042723 37.105223,41.053197 37.09375,41.0625 L 33.875,41.96875 L 33.375,45.625 L 35.125,45.21875 L 35.125,45.25 L 39.71875,43.75 L 39.75,43.75 L 42.8125,42.0625 L 42.875,42.03125 L 45.78125,39.09375 L 45.8125,39.0625 L 48.96875,34.03125 L 44.96875,33.9375 z" id="path3713" inkscape:original="M 44.84375 33.71875 L 44 35.09375 L 42.65625 36.8125 L 41.375 38.34375 L 39.90625 39.5625 L 37.03125 40.84375 L 33.6875 41.78125 L 33.09375 45.9375 L 35.1875 45.4375 L 39.8125 43.9375 L 42.96875 42.21875 L 45.96875 39.21875 L 49.375 33.8125 L 44.84375 33.71875 z " inkscape:radius="-0.21269609" sodipodi:type="inkscape:offset" style="opacity:0.64356432;fill:url(#radialGradient3669);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3663)" transform="translate(0,0.3)"/> + <path d="M 64.039064,11.90625 C 63.865274,12.044552 62.497594,12.708229 60.914064,14.65625 C 59.104304,16.88256 57.061124,20.236153 55.039064,23.78125 C 53.017004,27.326347 51.010514,31.075042 49.039064,34.34375 C 47.067604,37.612458 45.404044,40.384748 42.757814,42.3125 C 40.111574,44.24025 36.973544,45.000663 33.257814,45.875 C 29.542084,46.749339 25.345884,47.474737 21.351564,48.3125 C 17.357244,49.150265 13.525514,50.084977 10.851564,51.125 C 8.2759131,52.126785 7.3040131,53.337785 7.2890631,53.25 C 7.3670131,53.457399 7.5819731,54.954496 8.9453131,57.0625 C 10.503414,59.471649 13.042324,62.450158 15.789064,65.46875 C 18.535804,68.487339 21.477054,71.552452 23.976564,74.4375 C 26.476074,77.322553 28.585894,79.762573 29.601564,82.875 C 29.865144,83.682722 30.019904,84.511238 30.132814,85.34375 C 32.540654,85.431079 34.961934,85.5 37.414064,85.5 C 64.456484,85.5 88.974124,80.107134 106.91406,71.34375 C 108.71383,69.370041 110.60784,67.338911 112.41406,65.34375 C 115.15311,62.318181 117.67459,59.319356 119.22656,56.90625 C 120.58453,54.794782 120.83398,53.333062 120.91406,53.125 C 120.72626,53.000764 119.63107,51.904061 117.28906,51 C 114.61246,49.966787 110.81674,49.046347 106.82031,48.21875 C 102.82387,47.391152 98.631994,46.646129 94.914064,45.78125 C 91.196124,44.91637 88.065184,44.171009 85.414064,42.25 C 82.762934,40.328991 81.081334,37.576182 79.101564,34.3125 C 77.121794,31.048819 75.101384,27.28994 73.070314,23.75 C 71.039234,20.210059 68.979484,16.877947 67.164064,14.65625 C 65.575574,12.712264 64.215854,12.045423 64.039064,11.90625 z" id="path3715" style="opacity:1;fill:url(#linearGradient3315);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80892944;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"/> + <path d="M 44.96875,33.9375 L 44.1875,35.21875 C 44.177097,35.219516 44.166653,35.219516 44.15625,35.21875 L 42.8125,36.9375 L 41.53125,38.46875 C 41.521947,38.480223 41.511473,38.490697 41.5,38.5 L 40.03125,39.71875 C 40.021947,39.730223 40.011473,39.740697 40,39.75 L 37.125,41.03125 C 37.115697,41.042723 37.105223,41.053197 37.09375,41.0625 L 33.875,41.96875 L 33.375,45.625 L 35.125,45.21875 L 35.125,45.25 L 39.71875,43.75 L 39.75,43.75 L 42.8125,42.0625 L 42.875,42.03125 L 45.78125,39.09375 L 45.8125,39.0625 L 48.96875,34.03125 L 44.96875,33.9375 z" id="path3717" inkscape:original="M 44.84375 33.71875 L 44 35.09375 L 42.65625 36.8125 L 41.375 38.34375 L 39.90625 39.5625 L 37.03125 40.84375 L 33.6875 41.78125 L 33.09375 45.9375 L 35.1875 45.4375 L 39.8125 43.9375 L 42.96875 42.21875 L 45.96875 39.21875 L 49.375 33.8125 L 44.84375 33.71875 z " inkscape:radius="-0.21269609" sodipodi:type="inkscape:offset" style="opacity:0.64356432;fill:url(#radialGradient3673);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3663)" transform="matrix(-1,0,0,1,128.125,0.3)"/> + <g id="g3719" transform="translate(-132.29928,0)"> + <path d="M 196.34375,11.90625 C 196.16996,12.044552 194.80228,12.708229 193.21875,14.65625 C 191.40899,16.88256 189.36581,20.236153 187.34375,23.78125 C 185.32169,27.326347 183.3152,31.075042 181.34375,34.34375 C 179.37229,37.612458 177.70873,40.384748 175.0625,42.3125 C 172.41626,44.24025 169.27823,45.000663 165.5625,45.875 C 161.84677,46.749339 157.65057,47.474737 153.65625,48.3125 C 149.66193,49.150265 145.8302,50.084977 143.15625,51.125 C 140.5806,52.126785 139.6087,53.337785 139.59375,53.25 C 139.62377,53.329884 139.71528,53.638731 139.84375,54.0625 C 140.2595,53.69998 141.25985,52.862595 143.15625,52.125 C 145.8302,51.084977 149.66193,50.150265 153.65625,49.3125 C 157.65057,48.474737 161.84677,47.749339 165.5625,46.875 C 169.27823,46.000663 172.41626,45.24025 175.0625,43.3125 C 177.70873,41.384748 179.37229,38.612458 181.34375,35.34375 C 183.3152,32.075042 185.32169,28.326347 187.34375,24.78125 C 189.36581,21.236153 191.40899,17.88256 193.21875,15.65625 C 194.80228,13.708229 196.16996,13.044552 196.34375,12.90625 C 196.52054,13.045423 197.88026,13.712264 199.46875,15.65625 C 201.28417,17.877947 203.34392,21.210059 205.375,24.75 C 207.40607,28.28994 209.42648,32.048819 211.40625,35.3125 C 213.38602,38.576182 215.06762,41.328991 217.71875,43.25 C 220.36987,45.171009 223.50081,45.91637 227.21875,46.78125 C 230.93668,47.646129 235.12856,48.391152 239.125,49.21875 C 243.12143,50.046347 246.91715,50.966787 249.59375,52 C 251.51448,52.74144 252.56925,53.579608 253,53.9375 C 253.13371,53.522484 253.18802,53.204851 253.21875,53.125 C 253.03095,53.000764 251.93576,51.904061 249.59375,51 C 246.91715,49.966787 243.12143,49.046347 239.125,48.21875 C 235.12856,47.391152 230.93668,46.646129 227.21875,45.78125 C 223.50081,44.91637 220.36987,44.171009 217.71875,42.25 C 215.06762,40.328991 213.38602,37.576182 211.40625,34.3125 C 209.42648,31.048819 207.40607,27.28994 205.375,23.75 C 203.34392,20.210059 201.28417,16.877947 199.46875,14.65625 C 197.88026,12.712264 196.52054,12.045423 196.34375,11.90625 z" id="path3721" style="opacity:1;fill:url(#linearGradient3369);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80892944;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"/> + <path d="M 246.78125,49.937636 C 247.42469,50.142466 248.03845,50.379526 248.59375,50.593886 C 250.93576,51.497946 252.03095,52.594656 252.21875,52.718886 C 252.13867,52.926956 251.88922,54.388676 250.53125,56.500136 C 248.97928,58.913246 246.4578,61.912066 243.71875,64.937636 C 241.91253,66.932796 240.01852,68.963926 238.21875,70.937636 C 220.27881,79.701026 195.76117,85.093886 168.71875,85.093886 C 166.59433,85.093886 164.49568,85.039506 162.40625,84.968886 C 162.4184,85.051736 162.42625,85.135936 162.4375,85.218886 C 164.84534,85.306216 167.26662,85.375136 169.71875,85.375136 C 196.76117,85.375136 221.27881,79.982276 239.21875,71.218886 C 241.01852,69.245176 242.91253,67.214046 244.71875,65.218886 C 247.4578,62.193316 249.97928,59.194496 251.53125,56.781386 C 252.88922,54.669926 253.13867,53.208206 253.21875,53.000136 C 253.03095,52.875906 251.93576,51.779196 249.59375,50.875136 C 248.75868,50.552786 247.80629,50.238636 246.78125,49.937636 z" id="path3723" sodipodi:nodetypes="cscsscsccscsscsc" style="opacity:1;fill:url(#linearGradient3345);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80892944;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"/> + </g> + <path d="M 25.190679,119.77989 C 26.414679,122.74238 27.241162,124.11897 31.289475,123.31542 L 30.638356,120.21008 L 29.079766,120.3986 L 28.261711,118.57341 L 25.190679,119.77989 z" id="path3725" sodipodi:nodetypes="cccccc" style="opacity:0.7715356;fill:url(#linearGradient2853);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3928)"/> + <path d="M 26.03125,94.25 C 24.983755,105.1142 22.21942,119.85075 26.78125,123.15625 C 33.15283,127.7731 56.287818,111.82251 64.15625,111.8125 C 72.024682,111.80249 95.202691,127.69555 101.5625,123.0625 C 106.10279,119.75495 103.30815,105.10184 102.21875,94.25 L 98.34375,94.25 C 98.677864,97.707156 99.164649,101.42777 99.5625,105.03125 C 100.01038,109.08783 100.31178,112.97888 100.15625,115.84375 C 100.02016,118.35052 99.34151,119.69095 99.28125,119.90625 C 99.057443,119.89786 97.552762,120.17027 95.125,119.53125 C 92.350417,118.80093 88.723899,117.29504 85,115.625 C 81.276103,113.95497 77.426259,112.10169 73.90625,110.625 C 70.386242,109.1483 67.4302,107.93334 64.15625,107.9375 C 60.882303,107.94167 57.891241,109.1706 54.375,110.65625 C 50.858761,112.1419 47.032137,114.00799 43.3125,115.6875 C 39.592862,117.367 35.960216,118.85638 33.1875,119.59375 C 30.761373,120.23895 29.286908,119.99088 29.0625,120 C 29.004012,119.7864 28.29872,118.4439 28.15625,115.9375 C 27.993428,113.07303 28.281199,109.18271 28.71875,105.125 C 29.110886,101.48845 29.580993,97.733027 29.90625,94.25 L 26.03125,94.25 z" id="path3727" style="opacity:1;fill:url(#radialGradient3956);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80851269;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"/> + <path d="M 64.125001,11.90625 C 63.951211,12.044552 62.583531,12.708229 61.000001,14.65625 C 59.190241,16.88256 57.147061,20.236153 55.125001,23.78125 C 53.102941,27.326347 51.096451,31.075042 49.125001,34.34375 C 47.153541,37.612458 45.489981,40.384748 42.843751,42.3125 C 40.197511,44.24025 37.059481,45.000663 33.343751,45.875 C 29.628021,46.749339 25.431821,47.474737 21.437501,48.3125 C 17.443181,49.150265 13.611451,50.084977 10.937501,51.125 C 8.3618506,52.126785 7.3899506,53.337785 7.3750006,53.25 C 7.4529506,53.457399 7.6679106,54.954496 9.0312506,57.0625 C 10.589351,59.471649 13.128261,62.450158 15.875001,65.46875 C 18.621741,68.487339 21.562991,71.552452 24.062501,74.4375 C 26.562011,77.322553 28.671831,79.762573 29.687501,82.875 C 30.703171,85.987425 30.441681,89.227198 30.125001,93.03125 C 29.808321,96.835302 29.250051,101.0673 28.812501,105.125 C 28.374951,109.18271 28.087181,113.07303 28.250001,115.9375 C 28.392471,118.4439 29.097761,119.7864 29.156251,120 C 29.380661,119.99088 30.855121,120.23895 33.281251,119.59375 C 36.053961,118.85638 39.686611,117.367 43.406251,115.6875 C 47.125881,114.00799 50.952511,112.1419 54.468751,110.65625 C 57.984991,109.1706 60.976051,107.94167 64.250001,107.9375 C 67.523951,107.93334 70.479991,109.1483 74.000001,110.625 C 77.520011,112.10169 81.369851,113.95497 85.093751,115.625 C 88.817651,117.29504 92.444151,118.80093 95.218751,119.53125 C 97.646511,120.17027 99.151181,119.89786 99.375001,119.90625 C 99.435261,119.69095 100.1139,118.35052 100.25,115.84375 C 100.40553,112.97888 100.10412,109.08783 99.656251,105.03125 C 99.208371,100.97466 98.638841,96.740738 98.312501,92.9375 C 97.986141,89.134266 97.710991,85.927495 98.718751,82.8125 C 99.726491,79.697501 101.82033,77.235155 104.3125,74.34375 C 106.80466,71.452346 109.76095,68.369316 112.5,65.34375 C 115.23905,62.318181 117.76053,59.319356 119.3125,56.90625 C 120.67047,54.794782 120.91992,53.333062 121,53.125 C 120.8122,53.000764 119.71701,51.904061 117.375,51 C 114.6984,49.966787 110.90268,49.046347 106.90625,48.21875 C 102.90981,47.391152 98.717931,46.646129 95.000001,45.78125 C 91.282061,44.91637 88.151121,44.171009 85.500001,42.25 C 82.848871,40.328991 81.167271,37.576182 79.187501,34.3125 C 77.207731,31.048819 75.187321,27.28994 73.156251,23.75 C 71.125171,20.210059 69.065421,16.877947 67.250001,14.65625 C 65.661511,12.712264 64.301791,12.045423 64.125001,11.90625 z" id="path3729" sodipodi:nodetypes="cssssssssssssssscssssssscssssssscsssssssc" style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient2855);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3391)"/> + <g id="g3731" transform="matrix(-1,0,0,1,128.17175,0)"> + <path d="M 122.34464,49.937924 L 118.89749,52.943128 L 119.6046,54.97606 L 123.93563,55.771555 C 124.26838,53.827011 124.96313,51.882468 122.34464,49.937924 z" id="path3733" sodipodi:nodetypes="ccccc" style="opacity:0.60891089;fill:url(#radialGradient3618);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3564)"/> + <path d="M 122.34464,49.937924 L 118.89749,52.943128 L 119.6046,54.97606 L 123.93563,55.771555 C 124.26838,53.827011 124.96313,51.882468 122.34464,49.937924 z" id="path3735" sodipodi:nodetypes="ccccc" style="opacity:0.60891089;fill:url(#radialGradient3620);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3604)"/> + </g> + <g id="g3737"> + <path d="M 122.34464,49.937924 L 118.89749,52.943128 L 119.6046,54.97606 L 123.93563,55.771555 C 124.26838,53.827011 124.96313,51.882468 122.34464,49.937924 z" id="path3739" sodipodi:nodetypes="ccccc" style="opacity:0.60891089;fill:url(#radialGradient3382);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3564)"/> + <path d="M 122.34464,49.937924 L 118.89749,52.943128 L 119.6046,54.97606 L 123.93563,55.771555 C 124.26838,53.827011 124.96313,51.882468 122.34464,49.937924 z" id="path3741" sodipodi:nodetypes="ccccc" style="opacity:0.60891089;fill:url(#radialGradient3570);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3604)"/> + </g> + <path d="M 64.125001,11.90625 C 63.951211,12.044552 62.583531,12.708229 61.000001,14.65625 C 59.190241,16.88256 57.147061,20.236153 55.125001,23.78125 C 53.102941,27.326347 51.096451,31.075042 49.125001,34.34375 C 47.153541,37.612458 45.489981,40.384748 42.843751,42.3125 C 40.197511,44.24025 37.059481,45.000663 33.343751,45.875 C 29.628021,46.749339 25.431821,47.474737 21.437501,48.3125 C 17.443181,49.150265 13.611451,50.084977 10.937501,51.125 C 8.3618506,52.126785 7.3899506,53.337785 7.3750006,53.25 C 7.4529506,53.457399 7.6679106,54.954496 9.0312506,57.0625 C 10.589351,59.471649 13.128261,62.450158 15.875001,65.46875 C 18.621741,68.487339 21.562991,71.552452 24.062501,74.4375 C 26.562011,77.322553 28.671831,79.762573 29.687501,82.875 C 30.703171,85.987425 30.441681,89.227198 30.125001,93.03125 C 29.808321,96.835302 29.250051,101.0673 28.812501,105.125 C 28.374951,109.18271 28.087181,113.07303 28.250001,115.9375 C 28.392471,118.4439 29.097761,119.7864 29.156251,120 C 29.380661,119.99088 30.855121,120.23895 33.281251,119.59375 C 36.053961,118.85638 39.686611,117.367 43.406251,115.6875 C 47.125881,114.00799 50.952511,112.1419 54.468751,110.65625 C 57.984991,109.1706 60.976051,107.94167 64.250001,107.9375 C 67.523951,107.93334 70.479991,109.1483 74.000001,110.625 C 77.520011,112.10169 81.369851,113.95497 85.093751,115.625 C 88.817651,117.29504 92.444151,118.80093 95.218751,119.53125 C 97.646511,120.17027 99.151181,119.89786 99.375001,119.90625 C 99.435261,119.69095 100.1139,118.35052 100.25,115.84375 C 100.40553,112.97888 100.10412,109.08783 99.656251,105.03125 C 99.208371,100.97466 98.638841,96.740738 98.312501,92.9375 C 97.986141,89.134266 97.710991,85.927495 98.718751,82.8125 C 99.726491,79.697501 101.82033,77.235155 104.3125,74.34375 C 106.80466,71.452346 109.76095,68.369316 112.5,65.34375 C 115.23905,62.318181 117.76053,59.319356 119.3125,56.90625 C 120.67047,54.794782 120.91992,53.333062 121,53.125 C 120.8122,53.000764 119.71701,51.904061 117.375,51 C 114.6984,49.966787 110.90268,49.046347 106.90625,48.21875 C 102.90981,47.391152 98.717931,46.646129 95.000001,45.78125 C 91.282061,44.91637 88.151121,44.171009 85.500001,42.25 C 82.848871,40.328991 81.167271,37.576182 79.187501,34.3125 C 77.207731,31.048819 75.187321,27.28994 73.156251,23.75 C 71.125171,20.210059 69.065421,16.877947 67.250001,14.65625 C 65.661511,12.712264 64.301791,12.045423 64.125001,11.90625 z" id="path3743" sodipodi:nodetypes="cssssssssssssssscssssssscssssssscsssssssc" style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3385);stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3401)"/> + <path d="M 25.190679,119.77989 C 26.414679,122.74238 27.241162,124.11897 31.289475,123.31542 L 30.638356,120.21008 L 29.079766,120.3986 L 28.261711,118.57341 L 25.190679,119.77989 z" id="path3745" sodipodi:nodetypes="cccccc" style="opacity:0.7715356;fill:url(#linearGradient3934);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3928)" transform="matrix(-1,0,0,1,128.10515,0)"/> + <path d="M 26.03125,94.25 C 24.983755,105.1142 22.21942,119.85075 26.78125,123.15625 C 33.15283,127.7731 56.287818,110.82251 64.15625,110.8125 C 72.024682,110.80249 95.202691,127.69555 101.5625,123.0625 C 106.10279,119.75495 103.30815,105.10184 102.21875,94.25 L 98.34375,94.25 C 98.677864,97.707156 99.164649,101.42777 99.5625,105.03125 C 100.01038,109.08783 100.31178,112.97888 100.15625,115.84375 C 100.02016,118.35052 99.34151,119.69095 99.28125,119.90625 C 99.057443,119.89786 97.552762,120.17027 95.125,119.53125 C 92.350417,118.80093 88.723899,117.29504 85,115.625 C 81.276103,113.95497 77.426259,112.10169 73.90625,110.625 C 70.386242,109.1483 67.4302,107.93334 64.15625,107.9375 C 60.882303,107.94167 57.891241,109.1706 54.375,110.65625 C 50.858761,112.1419 47.032137,114.00799 43.3125,115.6875 C 39.592862,117.367 35.960216,118.85638 33.1875,119.59375 C 30.761373,120.23895 29.286908,119.99088 29.0625,120 C 29.004012,119.7864 28.29872,118.4439 28.15625,115.9375 C 27.993428,113.07303 28.281199,109.18271 28.71875,105.125 C 29.110886,101.48845 29.580993,97.733027 29.90625,94.25 L 26.03125,94.25 z" id="path3747" sodipodi:nodetypes="csssccsscssssssscsscc" style="opacity:1;fill:url(#radialGradient3267);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:14.80851269;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3285)"/> + <path d="M 3.96875,51.25 C 3.8072482,51.513327 3.653679,51.78066 3.5625,52.0625 C 1.4104994,58.714465 18.791507,72.91663 24.40625,81.25 C 25.066744,82.219734 25.881994,83.560003 26.151902,85.050699 C 27.656842,84.748586 29.576041,82.642021 28.90625,81.25 C 27.768648,78.87567 26.012193,76.796136 23.96875,74.4375 C 21.469238,71.552452 18.527988,68.487339 15.78125,65.46875 C 13.034512,62.450158 10.495601,59.471649 8.9375,57.0625 C 7.574162,54.954496 7.359205,53.457399 7.28125,53.25 C 7.2955626,53.33402 8.1966214,52.223338 10.53125,51.25 L 3.96875,51.25 z M 117.875,51.25 C 119.79897,52.094675 120.73559,53.012104 120.90625,53.125 C 120.82618,53.333062 120.57672,54.794782 119.21875,56.90625 C 117.66679,59.319356 115.1453,62.318181 112.40625,65.34375 C 109.66721,68.369316 106.71091,71.452346 104.21875,74.34375 C 102.16137,76.730721 100.3775,78.839259 99.25,81.25 C 98.389358,83.690958 101.19084,84.749904 102.08854,84.829728 C 102.41731,83.373922 103.07445,82.301223 103.75,81.25 C 109.28341,72.913848 126.77026,58.575986 124.59375,51.90625 C 124.52034,51.681299 124.39982,51.462951 124.28125,51.25 L 117.875,51.25 z" id="path3749" sodipodi:nodetypes="cscccssssccccssscccscc" style="opacity:0.84158415;fill:url(#radialGradient3300);fill-opacity:1;stroke:none;stroke-width:6.1420002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter3362)"/> + </g> + </g> + </g> +</svg> diff --git a/resources/multimc/scalable/checkupdate.svg b/resources/multimc/scalable/checkupdate.svg new file mode 100644 index 00000000..fc09cb4c --- /dev/null +++ b/resources/multimc/scalable/checkupdate.svg @@ -0,0 +1,167 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --><svg height="48px" id="svg7270" inkscape:output_extension="org.inkscape.output.svg.inkscape" inkscape:version="0.46" sodipodi:docname="system-software-update.svg" sodipodi:version="0.32" width="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <metadata> + <rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <cc:Work rdf:about=""> + <dc:title></dc:title> + <dc:description></dc:description> + <dc:subject> + <rdf:Bag> + <rdf:li>unsorted</rdf:li> + </rdf:Bag> + </dc:subject> + <dc:publisher> + <cc:Agent rdf:about="http://www.openclipart.org/"> + <dc:title>Open Clip Art Library, Source: GNOME-Colors, Source: GNOME-Colors, Source: GNOME-Colors, Source: GNOME-Colors, Source: GNOME-Colors</dc:title> + </cc:Agent> + </dc:publisher> + <dc:creator> + <cc:Agent> + <dc:title></dc:title> + </cc:Agent> + </dc:creator> + <dc:rights> + <cc:Agent> + <dc:title></dc:title> + </cc:Agent> + </dc:rights> + <dc:date></dc:date> + <dc:format>image/svg+xml</dc:format> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <cc:license rdf:resource="http://creativecommons.org/licenses/GPL/2.0/"/> + <dc:language>en</dc:language> + </cc:Work> + </rdf:RDF> + </metadata> + <defs id="defs7272"> + <linearGradient id="linearGradient4873" inkscape:collect="always"> + <stop id="stop4875" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop4877" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/> + </linearGradient> + <linearGradient gradientTransform="matrix(1.5436745,0,0,1.5436393,-63.017183,37.419463)" gradientUnits="userSpaceOnUse" id="linearGradient2704" inkscape:collect="always" x1="62.771355" x2="62.579906" xlink:href="#linearGradient4873" y1="-13.185048" y2="7.4599638"/> + <linearGradient id="linearGradient3811"> + <stop id="stop3813" offset="0" style="stop-color:#42770c;stop-opacity:1"/> + <stop id="stop3815" offset="1" style="stop-color:#789e2d;stop-opacity:1"/> + </linearGradient> + <linearGradient gradientTransform="matrix(0.7287372,0,0,0.7287206,15.796514,14.228326)" gradientUnits="userSpaceOnUse" id="linearGradient3927" inkscape:collect="always" x1="15.046636" x2="15.046636" xlink:href="#linearGradient3811" y1="44.787998" y2="3.8851264"/> + <linearGradient id="linearGradient5106"> + <stop id="stop5108" offset="0" style="stop-color:#a7cc5c;stop-opacity:1"/> + <stop id="stop5110" offset="1" style="stop-color:#789e2d;stop-opacity:1"/> + </linearGradient> + <radialGradient cx="62.200348" cy="-8.5060539" fx="62.200348" fy="-8.5060539" gradientTransform="matrix(-5.9025587,-9.7773057e-8,3.8757273e-8,-2.3442794,400.1412,4.1903282)" gradientUnits="userSpaceOnUse" id="radialGradient2707" inkscape:collect="always" r="9.7552834" xlink:href="#linearGradient5106"/> + <linearGradient id="linearGradient10691" inkscape:collect="always"> + <stop id="stop10693" offset="0" style="stop-color:#000000;stop-opacity:1;"/> + <stop id="stop10695" offset="1" style="stop-color:#000000;stop-opacity:0;"/> + </linearGradient> + <radialGradient cx="6.702713" cy="73.615715" fx="6.702713" fy="73.615715" gradientTransform="scale(1.902215,0.525703)" gradientUnits="userSpaceOnUse" id="radialGradient3042" inkscape:collect="always" r="7.228416" xlink:href="#linearGradient10691"/> + <linearGradient id="linearGradient3540" inkscape:collect="always"> + <stop id="stop3542" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop3544" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/> + </linearGradient> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient7581" inkscape:collect="always" x1="322.26392" x2="329.12961" xlink:href="#linearGradient3540" y1="55.34375" y2="64.329506"/> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient7579" inkscape:collect="always" x1="325.65164" x2="328.24478" xlink:href="#linearGradient3497" y1="62.475075" y2="61.084908"/> + <linearGradient id="linearGradient7088"> + <stop id="stop7090" offset="0" style="stop-color:#c17d11;stop-opacity:1;"/> + <stop id="stop7092" offset="1" style="stop-color:#e9b96e;stop-opacity:1"/> + </linearGradient> + <linearGradient gradientTransform="matrix(0.1516675,0,0,0.1638445,300.96358,54.165417)" gradientUnits="userSpaceOnUse" id="linearGradient7577" inkscape:collect="always" x1="251.94502" x2="161.94502" xlink:href="#linearGradient7088" y1="18.836056" y2="46.195984"/> + <linearGradient gradientTransform="matrix(0.8365572,0,0,1,52.219983,0)" gradientUnits="userSpaceOnUse" id="linearGradient7575" inkscape:collect="always" x1="334.77948" x2="327.34198" xlink:href="#linearGradient3582" y1="69.490768" y2="69.490768"/> + <linearGradient id="linearGradient3532" inkscape:collect="always"> + <stop id="stop3534" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop3536" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/> + </linearGradient> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient7573" inkscape:collect="always" x1="316.42142" x2="304.1875" xlink:href="#linearGradient3532" y1="58.144356" y2="67.203125"/> + <linearGradient id="linearGradient3516" inkscape:collect="always"> + <stop id="stop3518" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop3520" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/> + </linearGradient> + <radialGradient cx="318.26694" cy="81.264877" fx="318.26694" fy="81.264877" gradientTransform="matrix(11.694835,-3.1336215,0.2338827,0.8728621,-3435.8358,1012.645)" gradientUnits="userSpaceOnUse" id="radialGradient7571" inkscape:collect="always" r="15.375" xlink:href="#linearGradient3516"/> + <linearGradient id="linearGradient3497" inkscape:collect="always"> + <stop id="stop3499" offset="0" style="stop-color:#c17d11;stop-opacity:1;"/> + <stop id="stop3501" offset="1" style="stop-color:#c17d11;stop-opacity:0;"/> + </linearGradient> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient7569" inkscape:collect="always" x1="317" x2="313.625" xlink:href="#linearGradient3497" y1="65.25" y2="62.475075"/> + <linearGradient id="linearGradient7000" inkscape:collect="always"> + <stop id="stop7002" offset="0" style="stop-color:#eeeeec;stop-opacity:1"/> + <stop id="stop7005" offset="1" style="stop-color:#e9b96e;stop-opacity:1"/> + </linearGradient> + <radialGradient cx="93.23716" cy="132.00948" fx="93.23716" fy="132.00948" gradientTransform="matrix(0.194642,-0.362756,0.2778653,0.17262,263.08914,83.463419)" gradientUnits="userSpaceOnUse" id="radialGradient7567" inkscape:collect="always" r="48.719242" xlink:href="#linearGradient7000"/> + <linearGradient id="linearGradient3582" inkscape:collect="always"> + <stop id="stop3584" offset="0" style="stop-color:#000000;stop-opacity:1;"/> + <stop id="stop3586" offset="1" style="stop-color:#000000;stop-opacity:0;"/> + </linearGradient> + <linearGradient gradientTransform="matrix(0.914635,0,0,1,27.274119,0)" gradientUnits="userSpaceOnUse" id="linearGradient7565" inkscape:collect="always" x1="314.81003" x2="321.78522" xlink:href="#linearGradient3582" y1="69.553268" y2="69.490768"/> + <linearGradient id="linearGradient3757" inkscape:collect="always"> + <stop id="stop3759" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop3761" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/> + </linearGradient> + <radialGradient cx="321.375" cy="70.5" fx="321.375" fy="70.5" gradientTransform="matrix(1,0,0,0.4274194,0,40.366935)" gradientUnits="userSpaceOnUse" id="radialGradient7563" inkscape:collect="always" r="15.5" xlink:href="#linearGradient3757"/> + <linearGradient id="linearGradient3737"> + <stop id="stop3739" offset="0" style="stop-color:#faefde;stop-opacity:1"/> + <stop id="stop3741" offset="0.68321055" style="stop-color:#e9b96e;stop-opacity:1"/> + <stop id="stop3743" offset="1" style="stop-color:#e9b96e;stop-opacity:0"/> + </linearGradient> + <radialGradient cx="320.7493" cy="70.499977" fx="320.7493" fy="70.499977" gradientTransform="matrix(1.1851374,0,0,0.1612901,-56.76846,59.129051)" gradientUnits="userSpaceOnUse" id="radialGradient7561" inkscape:collect="always" r="15.500023" xlink:href="#linearGradient3737"/> + <linearGradient id="linearGradient3712" inkscape:collect="always"> + <stop id="stop3714" offset="0" style="stop-color:#e9b96e;stop-opacity:1;"/> + <stop id="stop3716" offset="1" style="stop-color:#e9b96e;stop-opacity:0;"/> + </linearGradient> + <radialGradient cx="321.7785" cy="96.847473" fx="321.7785" fy="96.847473" gradientTransform="matrix(4.6140944,0,0,0.6613562,-1154.7032,27.949324)" gradientUnits="userSpaceOnUse" id="radialGradient7559" inkscape:collect="always" r="15.5" xlink:href="#linearGradient3712"/> + <linearGradient id="linearGradient5967"> + <stop id="stop5969" offset="0" style="stop-color:#c17d11;stop-opacity:1;"/> + <stop id="stop5971" offset="1" style="stop-color:#e9b96e;stop-opacity:1"/> + </linearGradient> + <linearGradient gradientTransform="matrix(0.1549758,0,0,0.1517241,299.35074,56.193103)" gradientUnits="userSpaceOnUse" id="linearGradient7557" inkscape:collect="always" x1="174.01562" x2="30" xlink:href="#linearGradient5967" y1="236" y2="64"/> + <linearGradient id="linearGradient6977"> + <stop id="stop7039" offset="0" style="stop-color:#ebd3ad;stop-opacity:1;"/> + <stop id="stop6981" offset="1" style="stop-color:#e9b96e;stop-opacity:1"/> + </linearGradient> + <linearGradient gradientTransform="matrix(0.159975,0,0,0.1765787,298.70076,53.371862)" gradientUnits="userSpaceOnUse" id="linearGradient7555" inkscape:collect="always" x1="52" x2="52" xlink:href="#linearGradient6977" y1="40.482288" y2="76.67421"/> + <linearGradient id="linearGradient3703"> + <stop id="stop3705" offset="0" style="stop-color:black;stop-opacity:0;"/> + <stop id="stop3711" offset="0.5" style="stop-color:black;stop-opacity:1;"/> + <stop id="stop3707" offset="1" style="stop-color:black;stop-opacity:0;"/> + </linearGradient> + <linearGradient gradientTransform="matrix(1.179548,0,0,1,-4.219389,0)" gradientUnits="userSpaceOnUse" id="linearGradient7462" inkscape:collect="always" x1="17.554192" x2="17.554192" xlink:href="#linearGradient3703" y1="46.000275" y2="34.999718"/> + <radialGradient cx="5" cy="41.5" fx="5" fy="41.5" gradientTransform="matrix(0.99001,0,0,1.1,-14.88523,-86.15)" gradientUnits="userSpaceOnUse" id="radialGradient7460" inkscape:collect="always" r="5" xlink:href="#linearGradient3681"/> + <linearGradient id="linearGradient3681" inkscape:collect="always"> + <stop id="stop3683" offset="0" style="stop-color:black;stop-opacity:1;"/> + <stop id="stop3685" offset="1" style="stop-color:black;stop-opacity:0;"/> + </linearGradient> + <radialGradient cx="5" cy="41.5" fx="5" fy="41.5" gradientTransform="matrix(0.990017,0,0,1.1,32.1147,-5.15)" gradientUnits="userSpaceOnUse" id="radialGradient7458" inkscape:collect="always" r="5" xlink:href="#linearGradient3681"/> + </defs> + <sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="layer1" inkscape:cx="24" inkscape:cy="24" inkscape:document-units="px" inkscape:grid-bbox="true" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="690" inkscape:window-width="641" inkscape:window-x="0" inkscape:window-y="331" inkscape:zoom="7" pagecolor="#ffffff" showgrid="true"/> + <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1"> + <g id="g3713" style="opacity:0.4" transform="matrix(1.000001,0,0,1.2727273,-5e-6,-12.545454)"> + <rect height="11" id="rect1907" style="opacity:1;fill:url(#radialGradient7458);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1" width="4.9352183" x="37.064781" y="35"/> + <rect height="11" id="rect3689" style="opacity:1;fill:url(#radialGradient7460);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1" transform="scale(-1,-1)" width="4.9351835" x="-9.9351835" y="-46"/> + <rect height="11" id="rect3693" style="opacity:1;fill:url(#linearGradient7462);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1" width="27.129599" x="9.9351835" y="35"/> + </g> + <g id="g4045" style="display:inline;enable-background:new" transform="translate(-296.00045,-50)"> + <path d="M 322.875,54.40625 C 322.64926,54.465917 322.49407,54.672835 322.5,54.90625 L 322.59375,61.5 L 318.40625,61.5 L 318.4375,58.9375 C 318.44168,58.796741 318.39241,58.648956 318.28125,58.5625 C 318.17008,58.476044 318.0104,58.461295 317.875,58.5 L 306.5,61.5 C 306.35947,61.54996 306.25368,61.667506 306.21875,61.8125 L 306.15625,62.03125 C 306.05939,62.200213 305.96316,62.375835 305.90625,62.5625 L 303.5625,70.09375 C 303.51406,70.207689 303.5,70.305686 303.5,70.4375 C 303.4981,70.458668 303.5019,70.478889 303.5,70.5 L 303.5,90.84375 C 303.5,91.371002 303.93699,92.499999 304.46875,92.5 L 334.53125,92.5 C 335.06301,92.5 335.5,91.371004 335.5,90.84375 L 335.5,70.5 L 335.4375,70.09375 L 335.40625,70 C 335.40291,69.966972 335.41634,69.938782 335.40625,69.90625 L 332.9375,61.78125 C 332.9115,61.684204 332.85709,61.597145 332.78125,61.53125 L 323.3125,54.5 C 323.18929,54.402174 323.02747,54.367498 322.875,54.40625 z" id="path3678" sodipodi:nodetypes="cccccsccccccsccccccccccccc" style="fill:url(#linearGradient7555);fill-opacity:1;fill-rule:evenodd;stroke:#8f5902;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.69999992;stroke-opacity:1;display:inline;enable-background:new"/> + <rect height="1" id="rect3606" style="opacity:0.18918918;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.50000001;stroke-opacity:1;display:inline;enable-background:new" width="23.340202" x="309" y="66"/> + <path d="M 304.92985,70 C 304.41471,70 304,70.406014 304,70.910345 L 304,90.482758 L 304,91.089654 C 304,91.593985 304.41471,91.999999 304.92985,92 L 334.07015,92 C 334.5853,92 335,91.593984 335,91.089654 L 335,70.910345 C 335,70.406014 334.5853,70 334.07015,70 L 304.92985,70 z" id="path3628" sodipodi:nodetypes="cccccccccc" style="fill:url(#linearGradient7557);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.69999992;stroke-opacity:1;display:inline;enable-background:new"/> + <path d="M 304.92985,70 C 304.41471,70 304,70.406014 304,70.910345 L 304,90.482758 L 304,91.089654 C 304,91.593985 304.41471,91.999999 304.92985,92 L 334.07015,92 C 334.5853,92 335,91.593984 335,91.089654 L 335,70.910345 C 335,70.406014 334.5853,70 334.07015,70 L 304.92985,70 z" id="path3702" sodipodi:nodetypes="cccccccccc" style="opacity:0.81531528;fill:url(#radialGradient7559);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.69999992;stroke-opacity:1;display:inline;enable-background:new"/> + <path d="M 304.71875,68 L 304.03125,70.25 C 304.03158,70.260414 304.03158,70.270836 304.03125,70.28125 C 304.00957,70.33225 304,70.341241 304,70.4375 C 304.00033,70.447914 304.00033,70.458336 304,70.46875 C 304.00297,70.435653 303.99952,70.489668 304,70.5 C 304.00048,70.510332 304.0049,70.47686 304,70.53125 L 304,73 L 335,73 L 335,70.5625 L 335,70.5 L 334.96875,70.25 L 334.9375,70.15625 L 334.28125,68 L 304.71875,68 z" id="path3723" style="opacity:0.5;fill:url(#radialGradient7561);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.69999992;stroke-opacity:1;display:inline;enable-background:new"/> + <rect height="1" id="rect3746" style="opacity:0.62330568;fill:url(#radialGradient7563);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.50000001;stroke-opacity:1;display:inline;enable-background:new" width="31" x="304" y="70"/> + <path d="M 307.9375,61.90625 C 307.82039,61.90625 307.7549,61.954412 307.65625,62.09375 C 307.55761,62.233088 307.47013,62.458403 307.40625,62.6875 L 305.28125,70.09375 L 323.5,70.09375 L 323.5,61.90625 L 307.9375,61.90625 z" id="path3558" style="opacity:0.36936939;fill:url(#linearGradient7565);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.69999992;stroke-opacity:1;display:inline;enable-background:new"/> + <rect height="1" id="rect3602" style="opacity:0.39639641;fill:#c17d11;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.50000001;stroke-opacity:1" width="23.340202" x="309" y="65"/> + <path d="M 317.875,59.09375 L 306.71875,62.03125 L 304.25,69.8125 L 317.75,66.875 L 317.875,59.09375 z" id="path3466" inkscape:original="M 318 58.9375 L 306.625 61.9375 L 304.0625 70 L 317.875 66.96875 L 318 58.9375 z " inkscape:radius="-0.11941363" sodipodi:type="inkscape:offset" style="fill:url(#radialGradient7567);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:new"/> + <path d="M 317.875,58.5 L 306.5,61.5 C 306.35947,61.54996 306.25368,61.667506 306.21875,61.8125 L 303.65625,69.875 C 303.61173,70.021945 303.64677,70.181469 303.74877,70.296228 C 303.85078,70.410987 304.0051,70.464488 304.15625,70.4375 L 317.96875,67.40625 C 318.1724,67.360088 318.31583,67.177536 318.3125,66.96875 L 318.4375,58.9375 C 318.44168,58.796741 318.37845,58.662433 318.2673,58.575977 C 318.15614,58.489521 318.0104,58.461295 317.875,58.5 L 317.875,58.5 z" id="path3489" inkscape:original="M 318 58.9375 L 306.625 61.9375 L 304.0625 70 L 317.875 66.96875 L 318 58.9375 z " inkscape:radius="0.44133759" sodipodi:type="inkscape:offset" style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7569);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:new"/> + <path d="M 323.65625,56.125 L 323.71875,61.46875 C 323.73018,61.77333 323.61637,62.069302 323.40382,62.287756 C 323.19127,62.506209 322.89853,62.628083 322.59375,62.625 L 318.40625,62.625 C 318.10702,62.627829 317.81923,62.510212 317.60763,62.298617 C 317.39604,62.087022 317.27842,61.799227 317.28125,61.5 L 317.3125,59.78125 L 307.1875,62.4375 C 307.18765,62.447916 307.18765,62.458334 307.1875,62.46875 C 307.1693,62.511683 307.14843,62.553432 307.125,62.59375 C 307.03546,62.749944 306.98033,62.837024 306.96875,62.875 C 306.9689,62.885416 306.9689,62.895834 306.96875,62.90625 L 304.625,70.4375 C 304.625,70.405959 304.63178,70.465233 304.625,70.5 L 304.625,70.53125 C 304.64058,70.357706 304.64449,70.377244 304.625,70.59375 L 304.625,90.84375 C 304.625,90.799502 304.68196,91.178267 304.78125,91.375 L 334.21875,91.375 C 334.31804,91.178267 334.375,90.799504 334.375,90.84375 L 334.375,70.5 L 334.375,70.4375 L 334.34375,70.34375 C 334.32611,70.272049 334.31564,70.198772 334.3125,70.125 L 331.9375,62.3125 L 323.65625,56.125 z" id="path3512" inkscape:original="M 322.875 54.40625 C 322.64926 54.465917 322.49407 54.672835 322.5 54.90625 L 322.59375 61.5 L 318.40625 61.5 L 318.4375 58.9375 C 318.44168 58.796741 318.39241 58.648956 318.28125 58.5625 C 318.17008 58.476044 318.0104 58.461295 317.875 58.5 L 306.5 61.5 C 306.35947 61.54996 306.25368 61.667506 306.21875 61.8125 L 306.15625 62.03125 C 306.05939 62.200213 305.96316 62.375835 305.90625 62.5625 L 303.5625 70.09375 C 303.51406 70.207689 303.5 70.305686 303.5 70.4375 C 303.4981 70.458668 303.5019 70.478889 303.5 70.5 L 303.5 90.84375 C 303.5 91.371002 303.93699 92.499999 304.46875 92.5 L 334.53125 92.5 C 335.06301 92.5 335.5 91.371004 335.5 90.84375 L 335.5 70.5 L 335.4375 70.09375 L 335.40625 70 C 335.40291 69.966972 335.41634 69.938782 335.40625 69.90625 L 332.9375 61.78125 C 332.9115 61.684204 332.85709 61.597145 332.78125 61.53125 L 323.3125 54.5 C 323.18929 54.402174 323.02747 54.367498 322.875 54.40625 z " inkscape:radius="-1.1144003" sodipodi:type="inkscape:offset" style="opacity:0.36936939;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient7571);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.69999992;stroke-opacity:1;display:inline;enable-background:new"/> + <path d="M 317.5625,59.5 L 306.96875,62.28125 L 304.6875,69.40625 L 317.4375,66.59375 L 317.5625,59.5 z" id="path3524" inkscape:original="M 318 58.9375 L 306.625 61.9375 L 304.0625 70 L 317.875 66.96875 L 318 58.9375 z " inkscape:radius="-0.43543664" sodipodi:type="inkscape:offset" style="opacity:0.53153154;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7573);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:new"/> + <path d="M 323.0625,61.90625 L 323.0625,70.09375 L 333.71875,70.09375 L 331.59375,62.5625 C 331.53244,62.342161 331.46293,62.136199 331.375,62.03125 C 331.28708,61.926301 331.20816,61.90625 331.0625,61.90625 L 323.0625,61.90625 z" id="path3593" style="opacity:0.36936939;fill:url(#linearGradient7575);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.69999992;stroke-opacity:1;display:inline;enable-background:new"/> + <g id="g3562"> + <path d="M 323,54.90625 L 323.125,63.03125 L 334.9375,70.0625 L 332.46875,61.9375 L 323,54.90625 z" id="path3468" inkscape:original="M 323 54.90625 L 323.125 63.03125 L 334.9375 70.0625 L 332.46875 61.9375 L 323 54.90625 z " inkscape:radius="-0.0019137046" sodipodi:type="inkscape:offset" style="fill:url(#linearGradient7577);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:new"/> + <path d="M 322.875,54.40625 C 322.64926,54.465917 322.49407,54.672835 322.5,54.90625 L 322.625,63.03125 C 322.62421,63.211268 322.71951,63.378038 322.875,63.46875 L 334.6875,70.5 C 334.86776,70.596275 335.08831,70.574158 335.24586,70.444006 C 335.40342,70.313855 335.46677,70.101441 335.40625,69.90625 L 332.9375,61.78125 C 332.9115,61.684204 332.85709,61.597145 332.78125,61.53125 L 323.3125,54.5 C 323.18929,54.402174 323.02747,54.367498 322.875,54.40625 z" id="path3491" inkscape:original="M 323 54.90625 L 323.125 63.03125 L 334.9375 70.0625 L 332.46875 61.9375 L 323 54.90625 z " inkscape:radius="0.50389111" sodipodi:type="inkscape:offset" style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7579);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:new"/> + <path d="M 323.46875,55.84375 L 323.59375,62.75 L 334.125,69.03125 L 332.03125,62.21875 L 323.46875,55.84375 z" id="path3526" inkscape:original="M 323 54.90625 L 323.125 63.03125 L 334.9375 70.0625 L 332.46875 61.9375 L 323 54.90625 z " inkscape:radius="-0.47827792" sodipodi:type="inkscape:offset" style="opacity:0.25225226;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7581);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:new"/> + <path d="M 323,54.90625 L 323.125,63.03125 L 334.9375,70.0625 L 324.0625,62.81342 L 324,56.49908 L 332.46875,61.9375 L 323,54.90625 z" id="path3548" sodipodi:nodetypes="ccccccc" style="opacity:0.36936939;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:new"/> + </g> + <rect height="1" id="rect3604" style="opacity:0.20720723;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.50000001;stroke-opacity:1;display:inline;enable-background:new" width="3" x="319" y="62"/> + </g> + <path d="M 26.5,38.700001 A 13.75,3.8 0 1 1 -1,38.700001 A 13.75,3.8 0 1 1 26.5,38.700001 z" id="path2858" sodipodi:cx="12.75" sodipodi:cy="38.700001" sodipodi:rx="13.75" sodipodi:ry="3.8" sodipodi:type="arc" style="opacity:0.5;fill:url(#radialGradient3042);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" transform="matrix(1.0181818,0,0,1.0526316,20.018182,3.2631562)"/> + <path d="M 47.500174,31.999486 C 47.500174,40.007969 41.007746,46.500175 33.000183,46.500175 C 24.991885,46.500175 18.499825,40.007895 18.499825,31.999486 C 18.499825,23.99137 24.991885,17.499825 33.000183,17.499825 C 41.007746,17.499825 47.500174,23.99137 47.500174,31.999486 L 47.500174,31.999486 z" id="path6495" style="fill:url(#radialGradient2707);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3927);stroke-width:0.9996503;stroke-miterlimit:4;stroke-dasharray:none"/> + <path d="M 46.500204,31.99952 C 46.500204,39.455718 40.455512,45.500205 33.00017,45.500205 C 25.544146,45.500205 19.499795,39.45565 19.499795,31.99952 C 19.499795,24.543666 25.544146,18.499795 33.00017,18.499795 C 40.455512,18.499795 46.500204,24.543666 46.500204,31.99952 L 46.500204,31.99952 z" id="path8655" style="opacity:0.6;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient2704);stroke-width:0.99959099;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> + <path d="M 23.5,32.5 L 33,22.5 L 42.5,32.5 L 36.75,32.5 L 36.75,41.5 L 29.25,41.5 L 29.25,32.5 L 23.5,32.5 z" id="path4236" sodipodi:nodetypes="cccccccc" style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"/> + </g> +</svg> diff --git a/resources/icons/console.svg b/resources/multimc/scalable/console.svg index ec14ab68..ec14ab68 100644 --- a/resources/icons/console.svg +++ b/resources/multimc/scalable/console.svg diff --git a/resources/icons/console_error.svg b/resources/multimc/scalable/console_error.svg index a71c6b35..a71c6b35 100644 --- a/resources/icons/console_error.svg +++ b/resources/multimc/scalable/console_error.svg diff --git a/resources/multimc/scalable/new.svg b/resources/multimc/scalable/new.svg new file mode 100644 index 00000000..c9cff358 --- /dev/null +++ b/resources/multimc/scalable/new.svg @@ -0,0 +1,127 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --><svg height="48" id="svg249" inkscape:export-filename="/home/luca/Desktop/flare-16.png" inkscape:export-xdpi="30" inkscape:export-ydpi="30" inkscape:output_extension="org.inkscape.output.svg.inkscape" inkscape:version="0.45+0.46pre0" sodipodi:docbase="/home/dobey/Projects/gnome-icon-theme/scalable/actions" sodipodi:docname="document-new.svg" sodipodi:version="0.32" version="1.0" width="48" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <metadata> + <rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <cc:Work rdf:about=""> + <dc:title>New Document</dc:title> + <dc:description></dc:description> + <dc:subject> + <rdf:Bag> + <rdf:li>regular</rdf:li> + <rdf:li>plaintext</rdf:li> + <rdf:li>text</rdf:li> + <rdf:li>document</rdf:li> + </rdf:Bag> + </dc:subject> + <dc:publisher> + <cc:Agent rdf:about="http://www.openclipart.org/"> + <dc:title>Source: GNOME Icon Theme, Source: GNOME Icon Theme, Source: GNOME Icon Theme, Source: GNOME Icon Theme, Source: GNOME Icon Theme</dc:title> + </cc:Agent> + </dc:publisher> + <dc:creator> + <cc:Agent> + <dc:title>Jakub Steiner</dc:title> + </cc:Agent> + </dc:creator> + <dc:rights> + <cc:Agent> + <dc:title>Jakub Steiner</dc:title> + </cc:Agent> + </dc:rights> + <dc:date></dc:date> + <dc:format>image/svg+xml</dc:format> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <cc:license rdf:resource="http://creativecommons.org/licenses/GPL/2.0/"/> + <dc:language>en</dc:language> + </cc:Work> + </rdf:RDF> + </metadata> + <defs id="defs3"> + <linearGradient id="linearGradient3656" inkscape:collect="always"> + <stop id="stop3658" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop3660" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/> + </linearGradient> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4253" inkscape:collect="always" x1="-26.753757" x2="-24.75" xlink:href="#linearGradient3656" y1="11.566258" y2="9.687501"/> + <linearGradient id="linearGradient3520" inkscape:collect="always"> + <stop id="stop3522" offset="0" style="stop-color:#000000;stop-opacity:0.41295547"/> + <stop id="stop3524" offset="1" style="stop-color:#000000;stop-opacity:0;"/> + </linearGradient> + <linearGradient gradientTransform="matrix(0.9223058,0,0,0.9185751,-92.447368,1.3256997)" gradientUnits="userSpaceOnUse" id="linearGradient4273" inkscape:collect="always" x1="-18.588562" x2="-28.789402" xlink:href="#linearGradient3520" y1="11.052948" y2="14.069944"/> + <linearGradient id="linearGradient3671"> + <stop id="stop3673" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop3691" offset="0.47533694" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop3675" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/> + </linearGradient> + <radialGradient cx="-26.305403" cy="10.108011" fx="-26.305403" fy="10.108011" gradientTransform="matrix(0.4073362,-0.2798276,0.7510293,1.0932492,-115.18484,-8.4378699)" gradientUnits="userSpaceOnUse" id="radialGradient4276" inkscape:collect="always" r="7.0421038" xlink:href="#linearGradient3671"/> + <linearGradient id="linearGradient3741" inkscape:collect="always"> + <stop id="stop3743" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop3745" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/> + </linearGradient> + <radialGradient cx="4" cy="5.2999997" fx="4" fy="5.2999997" gradientTransform="matrix(1.8860258,0,0,1.1764706,-3.5441033,-4.2352941)" gradientUnits="userSpaceOnUse" id="radialGradient4247" inkscape:collect="always" r="17" xlink:href="#linearGradient3741"/> + <linearGradient id="linearGradient3613" inkscape:collect="always"> + <stop id="stop3615" offset="0" style="stop-color:#888a85;stop-opacity:1"/> + <stop id="stop3617" offset="1" style="stop-color:#babdb6;stop-opacity:1"/> + </linearGradient> + <linearGradient gradientTransform="translate(-90,0)" gradientUnits="userSpaceOnUse" id="linearGradient4282" inkscape:collect="always" x1="-47.5" x2="-62.75" xlink:href="#linearGradient3613" y1="49.020683" y2="-22.502075"/> + <linearGradient id="linearGradient3683"> + <stop id="stop3685" offset="0" style="stop-color:#f6f6f5;stop-opacity:1;"/> + <stop id="stop3689" offset="1" style="stop-color:#d3d7cf;stop-opacity:1"/> + </linearGradient> + <radialGradient cx="-30.249996" cy="35.357208" fx="-30.249996" fy="35.357208" gradientTransform="matrix(3.9957492,0,0,1.9350367,0.62141,-31.167422)" gradientUnits="userSpaceOnUse" id="radialGradient4280" inkscape:collect="always" r="18.000002" xlink:href="#linearGradient3683"/> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4241" inkscape:collect="always" x1="25.058096" x2="25.058096" xlink:href="#linearGradient3702" y1="47.027729" y2="39.999443"/> + <radialGradient cx="4.9929786" cy="43.5" fx="4.9929786" fy="43.5" gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)" gradientUnits="userSpaceOnUse" id="radialGradient4239" inkscape:collect="always" r="2.5" xlink:href="#linearGradient3688"/> + <radialGradient cx="4.9929786" cy="43.5" fx="4.9929786" fy="43.5" gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)" gradientUnits="userSpaceOnUse" id="radialGradient4237" inkscape:collect="always" r="2.5" xlink:href="#linearGradient3688"/> + <linearGradient id="linearGradient3702"> + <stop id="stop3704" offset="0" style="stop-color:black;stop-opacity:0;"/> + <stop id="stop3710" offset="0.5" style="stop-color:black;stop-opacity:1;"/> + <stop id="stop3706" offset="1" style="stop-color:black;stop-opacity:0;"/> + </linearGradient> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4235" inkscape:collect="always" x1="25.058096" x2="25.058096" xlink:href="#linearGradient3702" y1="47.027729" y2="39.999443"/> + <radialGradient cx="4.9929786" cy="43.5" fx="4.9929786" fy="43.5" gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)" gradientUnits="userSpaceOnUse" id="radialGradient4233" inkscape:collect="always" r="2.5" xlink:href="#linearGradient3688"/> + <linearGradient id="linearGradient3688" inkscape:collect="always"> + <stop id="stop3690" offset="0" style="stop-color:black;stop-opacity:1;"/> + <stop id="stop3692" offset="1" style="stop-color:black;stop-opacity:0;"/> + </linearGradient> + <radialGradient cx="4.9929786" cy="43.5" fx="4.9929786" fy="43.5" gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)" gradientUnits="userSpaceOnUse" id="radialGradient4231" inkscape:collect="always" r="2.5" xlink:href="#linearGradient3688"/> + <linearGradient id="linearGradient2378"> + <stop id="stop2380" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/> + <stop id="stop4146" offset="0.25" style="stop-color:#fefede;stop-opacity:0.91836733;"/> + <stop id="stop2386" offset="0.5" style="stop-color:#f5f328;stop-opacity:1;"/> + <stop id="stop2382" offset="1" style="stop-color:#f5f32d;stop-opacity:0.12234043;"/> + </linearGradient> + <radialGradient cx="38.658855" cy="9.3411446" fx="38.658855" fy="9.3411446" gradientUnits="userSpaceOnUse" id="radialGradient3271" inkscape:collect="always" r="8.341651" xlink:href="#linearGradient2378"/> + </defs> + <sodipodi:namedview bordercolor="#666666" borderopacity="0.3254902" id="base" inkscape:current-layer="layer5" inkscape:cx="40.26271" inkscape:cy="28.37649" inkscape:document-units="px" inkscape:grid-bbox="true" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:showpageshadow="false" inkscape:window-height="939" inkscape:window-width="929" inkscape:window-x="751" inkscape:window-y="91" inkscape:zoom="1" pagecolor="#ffffff" showborder="true" showgrid="false"/> + <g id="layer6" inkscape:groupmode="layer" inkscape:label="Shadow"/> + <g id="layer1" inkscape:groupmode="layer" inkscape:label="Base" style="display:inline"/> + <g id="layer5" inkscape:groupmode="layer" inkscape:label="Text" style="display:inline"> + <g id="g4425" style="display:inline" transform="translate(150,0)"> + <rect height="48" id="rect2503" style="opacity:0;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;display:inline" width="48" x="-150" y="0"/> + <g id="g4408"> + <g id="g3697" inkscape:label="Shadow" style="opacity:0.65587045;display:inline" transform="matrix(1.0464281,0,0,0.8888889,-151.18571,5.7222396)"> + <g id="g3699" style="opacity:0.4" transform="matrix(1.052632,0,0,1.285713,-1.263158,-13.42854)"> + <rect height="7" id="rect3701" style="opacity:1;fill:url(#radialGradient4231);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" width="5" x="38" y="40"/> + <rect height="7" id="rect3703" style="opacity:1;fill:url(#radialGradient4233);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" transform="scale(-1,-1)" width="5" x="-10" y="-47"/> + <rect height="7.0000005" id="rect3705" style="opacity:1;fill:url(#linearGradient4235);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" width="28" x="10" y="40"/> + </g> + </g> + <g id="g3713" inkscape:label="Shadow" style="display:inline" transform="matrix(0.9548466,0,0,0.5555562,-148.98776,19.888875)"> + <g id="g3715" style="opacity:0.4" transform="matrix(1.052632,0,0,1.285713,-1.263158,-13.42854)"> + <rect height="7" id="rect3717" style="opacity:1;fill:url(#radialGradient4237);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" width="5" x="38" y="40"/> + <rect height="7" id="rect3719" style="opacity:1;fill:url(#radialGradient4239);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" transform="scale(-1,-1)" width="5" x="-10" y="-47"/> + <rect height="7.0000005" id="rect3721" style="opacity:1;fill:url(#linearGradient4241);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" width="28" x="10" y="40"/> + </g> + </g> + <path d="M -141.47614,3.5 C -141.47614,3.5 -124,3.5 -122.5,3.5 C -118.62295,3.5729425 -116,6 -113.5,8.5 C -111,11 -108.89232,13.752625 -108.5,17.5 C -108.5,19 -108.5,42.476142 -108.5,42.476142 C -108.5,43.597359 -109.40264,44.5 -110.52385,44.5 L -141.47614,44.5 C -142.59736,44.5 -143.5,43.597359 -143.5,42.476142 L -143.5,5.523858 C -143.5,4.402641 -142.59736,3.5 -141.47614,3.5 z" id="path3499" sodipodi:nodetypes="ccsccccccc" style="fill:url(#radialGradient4280);fill-opacity:1;stroke:url(#linearGradient4282);stroke-width:1;stroke-miterlimit:4;display:inline"/> + <path d="M 8.53125,4 C 7.6730803,4 7,4.6730802 7,5.53125 L 7,42.46875 C 7,43.32692 7.6730802,44 8.53125,44 L 39.46875,44 C 40.326919,44 41,43.326918 41,42.46875 C 41,42.46875 41,19 41,17.5 C 41,16.10803 40.513021,13.200521 38.65625,11.34375 C 36.65625,9.34375 35.65625,8.34375 33.65625,6.34375 C 31.799479,4.4869792 28.89197,4 27.5,4 C 26,4 8.53125,4 8.53125,4 z" id="path3735" inkscape:original="M 8.53125 3.5 C 7.410033 3.5 6.5 4.4100329 6.5 5.53125 L 6.5 42.46875 C 6.5 43.589967 7.4100329 44.5 8.53125 44.5 L 39.46875 44.5 C 40.589967 44.5 41.5 43.589966 41.5 42.46875 C 41.5 42.46875 41.5 19 41.5 17.5 C 41.5 16 41 13 39 11 C 37 9 36 8 34 6 C 32 4 29 3.5 27.5 3.5 C 26 3.5 8.5312499 3.5 8.53125 3.5 z " inkscape:radius="-0.4861359" sodipodi:type="inkscape:offset" style="opacity:0.68016196;fill:url(#radialGradient4247);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;display:inline" transform="translate(-150,0)"/> + <path d="M -122.5,4 C -123.88889,4 -122.54207,4.4970883 -121.15625,5.125 C -119.77043,5.7529117 -116.18337,8.3400517 -117,12 C -112.67669,11.569417 -110.32087,15.122378 -110,16.28125 C -109.67913,17.440122 -109,18.888889 -109,17.5 C -108.97167,13.694419 -111.84543,11.068299 -113.84375,8.84375 C -115.84207,6.6192012 -118.84621,4.4767615 -122.5,4 z" id="path3666" sodipodi:nodetypes="ccccczc" style="fill:url(#radialGradient4276);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;display:inline"/> + <path d="M -121.39912,5.0143528 C -120.47682,5.0143528 -118.39068,11.210015 -119.31298,15.343603 C -115.01802,14.915844 -110.4596,15.43178 -110,16.28125 C -110.32087,15.122378 -112.67669,11.569417 -117,12 C -116.13534,8.124761 -120.18657,5.3827023 -121.39912,5.0143528 z" id="path3625" sodipodi:nodetypes="ccccc" style="opacity:0.87854249;fill:url(#linearGradient4273);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;display:inline"/> + <path d="M -51.46875,4.5 C -52.051916,4.5 -52.5,4.9480842 -52.5,5.53125 L -52.5,42.46875 C -52.5,43.051915 -52.051914,43.5 -51.46875,43.5 L -20.53125,43.5 C -19.948085,43.5 -19.5,43.051914 -19.5,42.46875 C -19.5,42.46875 -19.5,19 -19.5,17.5 C -19.5,16.220971 -19.980469,13.394531 -21.6875,11.6875 C -23.6875,9.6875 -24.6875,8.6875 -26.6875,6.6875 C -28.394531,4.9804687 -31.220971,4.5 -32.5,4.5 C -34,4.5 -51.46875,4.5 -51.46875,4.5 z" id="path3650" inkscape:original="M -51.46875 3.5 C -52.589967 3.5 -53.5 4.4100329 -53.5 5.53125 L -53.5 42.46875 C -53.5 43.589967 -52.589966 44.5 -51.46875 44.5 L -20.53125 44.5 C -19.410033 44.5 -18.5 43.589966 -18.5 42.46875 C -18.5 42.46875 -18.5 19 -18.5 17.5 C -18.5 16 -19 13 -21 11 C -23 9 -24 8 -26 6 C -28 4 -31 3.5 -32.5 3.5 C -34 3.5 -51.468749 3.5 -51.46875 3.5 z " inkscape:radius="-0.99436891" sodipodi:type="inkscape:offset" style="fill:none;fill-opacity:1;stroke:url(#linearGradient4253);stroke-width:1;stroke-miterlimit:4;display:inline" transform="translate(-90,0)"/> + </g> + </g> + <g id="g14103"> + <path d="M 47.000506 9.3411446 A 8.341651 8.341651 0 1 1 30.317204,9.3411446 A 8.341651 8.341651 0 1 1 47.000506 9.3411446 z" id="path2388" sodipodi:cx="38.658855" sodipodi:cy="9.3411446" sodipodi:rx="8.341651" sodipodi:ry="8.341651" sodipodi:type="arc" style="fill:url(#radialGradient3271);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" transform="matrix(1.14985,0,0,1.14985,-7.595328,0.490895)"/> + <path d="M 44.520054,15.50279 C 44.012883,16.381236 39.925351,15.341967 38.998703,15.754538 C 38.072055,16.167108 36.109289,19.900142 35.117113,19.689249 C 34.124936,19.478355 33.850222,15.26973 33.171495,14.515926 C 32.492767,13.762123 28.335913,13.048993 28.229885,12.040207 C 28.123857,11.031421 32.041607,9.4696164 32.548778,8.5911701 C 33.055949,7.7127238 32.449637,3.5389508 33.376285,3.1263806 C 34.302933,2.7138103 36.998949,5.957187 37.991126,6.1680807 C 38.983302,6.3789743 42.765436,4.5125708 43.444163,5.2663741 C 44.122891,6.0201775 41.871371,9.5864995 41.977399,10.595285 C 42.083426,11.604071 45.027225,14.624343 44.520054,15.50279 z " id="path1345" inkscape:flatsided="false" inkscape:randomized="0" inkscape:rounded="0.18352206" sodipodi:arg1="0.52359878" sodipodi:arg2="1.1519173" sodipodi:cx="36.9375" sodipodi:cy="11.125" sodipodi:r1="8.755579" sodipodi:r2="5.0676599" sodipodi:sides="5" sodipodi:type="star" style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" transform="matrix(0.674116,0.299577,-0.299577,0.674116,15.46413,-7.192469)"/> + </g> + </g> +</svg> diff --git a/resources/icons/toolbar_svg/news.svg b/resources/multimc/scalable/news.svg index 67a370df..67a370df 100644 --- a/resources/icons/toolbar_svg/news.svg +++ b/resources/multimc/scalable/news.svg diff --git a/resources/multimc/scalable/viewfolder.svg b/resources/multimc/scalable/viewfolder.svg new file mode 100644 index 00000000..4ba0ed0a --- /dev/null +++ b/resources/multimc/scalable/viewfolder.svg @@ -0,0 +1,122 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --><svg height="128" id="svg2811" inkscape:export-filename="/home/david/document-open.png" inkscape:export-xdpi="22.5" inkscape:export-ydpi="22.5" inkscape:output_extension="org.inkscape.output.svgz.inkscape" inkscape:version="0.45.1" sodipodi:docbase="/home/jakob/dev/kde/src/kdebase/runtime/pics/oxygen/scalable/actions" sodipodi:docname="document-open-folder.svgz" sodipodi:version="0.32" version="1.0" width="128" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <metadata> + <rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <cc:Work rdf:about=""> + <dc:title></dc:title> + <dc:description></dc:description> + <dc:subject> + <rdf:Bag> + <rdf:li>unsorted</rdf:li> + </rdf:Bag> + </dc:subject> + <dc:publisher> + <cc:Agent rdf:about="http://www.openclipart.org/"> + <dc:title>Open Clip Art Library, Source: Oxygen Icons, Source: Oxygen Icons, Source: Oxygen Icons, Source: Oxygen Icons</dc:title> + </cc:Agent> + </dc:publisher> + <dc:creator> + <cc:Agent> + <dc:title></dc:title> + </cc:Agent> + </dc:creator> + <dc:rights> + <cc:Agent> + <dc:title></dc:title> + </cc:Agent> + </dc:rights> + <dc:date></dc:date> + <dc:format>image/svg+xml</dc:format> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/ or http://creativecommons.org/licenses/LGPL/2.1/"/> + <dc:language>en</dc:language> + </cc:Work> + </rdf:RDF> + </metadata> + <sodipodi:namedview bordercolor="#666666" borderopacity="1.0" gridempspacing="2" gridspacingx="4px" gridspacingy="4px" gridtolerance="10000" guidetolerance="10.0" id="base" inkscape:current-layer="svg2811" inkscape:cx="64" inkscape:cy="64" inkscape:grid-bbox="true" inkscape:grid-points="true" inkscape:guide-bbox="true" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="736" inkscape:window-width="825" inkscape:window-x="0" inkscape:window-y="0" inkscape:zoom="1" objecttolerance="10.0" pagecolor="#ffffff" showborder="false" showgrid="false" showguides="true"/> + <defs id="defs2813"> + <linearGradient gradientTransform="matrix(1.0033808,0,0,1,-8.2378002,8)" gradientUnits="userSpaceOnUse" id="linearGradient2937" x1="122.74438" x2="122.39215" y1="96.721588" y2="20.043535"> + <stop id="stop2939" offset="0" style="stop-color:#72b4f4;stop-opacity:1"/> + <stop id="stop2941" offset="0.13053299" style="stop-color:#b3d9ff;stop-opacity:1"/> + <stop id="stop2943" offset="0.34621301" style="stop-color:#b3d9ff;stop-opacity:1"/> + <stop id="stop2945" offset="0.72006166" style="stop-color:#71a8f5;stop-opacity:1"/> + <stop id="stop2947" offset="1" style="stop-color:#508ed9;stop-opacity:1"/> + </linearGradient> + <linearGradient gradientTransform="translate(242.00093,332.5)" gradientUnits="userSpaceOnUse" id="linearGradient2927" x1="-178" x2="-178" y1="-228.3945" y2="-304.61469"> + <stop id="stop2929" offset="0" style="stop-color:#cfe7ff;stop-opacity:1"/> + <stop id="stop2931" offset="0.1" style="stop-color:#71a8f5;stop-opacity:1"/> + <stop id="stop2933" offset="1" style="stop-color:#2c72c7;stop-opacity:1"/> + </linearGradient> + <linearGradient id="linearGradient2822"> + <stop id="stop2824" offset="0" style="stop-color:#ffffff;stop-opacity:1"/> + <stop id="stop2826" offset="1" style="stop-color:#ffffff;stop-opacity:0"/> + </linearGradient> + <linearGradient gradientTransform="matrix(1.0033404,0,0,1,-8.2374684,8)" gradientUnits="userSpaceOnUse" id="XMLID_9_" x1="71.999496" x2="71.999496" y1="14.2578" y2="19.9583"> + <stop id="stop46" offset="0.25" style="stop-color:#71a8f5;stop-opacity:0"/> + <stop id="stop48" offset="1" style="stop-color:#0057ae;stop-opacity:1"/> + </linearGradient> + <filter height="1.768" id="filter2807" width="1.0512" x="-0.025599999" y="-0.384"> + <feGaussianBlur id="feGaussianBlur2809" inkscape:collect="always" stdDeviation="1.28"/> + </filter> + <linearGradient gradientTransform="translate(-6.999995,8)" gradientUnits="userSpaceOnUse" id="XMLID_6_" x1="72.000504" x2="72.000504" y1="96" y2="0.00048828119"> + <stop id="stop7" offset="0" style="stop-color:#00479e;stop-opacity:1"/> + <stop id="stop9" offset="0.0769" style="stop-color:#2c72c7;stop-opacity:1"/> + <stop id="stop11" offset="0.58579999" style="stop-color:#6ea1df;stop-opacity:1"/> + <stop id="stop13" offset="0.96450001" style="stop-color:#adcbee;stop-opacity:1"/> + </linearGradient> + <linearGradient gradientTransform="matrix(1.0033808,0,0,1,-8.2378,8)" gradientUnits="userSpaceOnUse" id="linearGradient3109" x1="122.74438" x2="122.74438" xlink:href="#linearGradient2937" y1="96" y2="20"/> + <linearGradient gradientTransform="translate(242.00093,332.5)" gradientUnits="userSpaceOnUse" id="linearGradient2923" x1="-168.99216" x2="-168.99216" xlink:href="#linearGradient2822" y1="-300.5" y2="-296.48441"/> + <linearGradient gradientTransform="translate(242.00093,332.5)" gradientUnits="userSpaceOnUse" id="linearGradient2925" x1="-178" x2="-178" xlink:href="#linearGradient2927" y1="-228.5" y2="-304.61469"/> + <linearGradient gradientTransform="translate(242.00093,364.5)" gradientUnits="userSpaceOnUse" id="linearGradient2197" inkscape:collect="always" x1="-168.99216" x2="-168.99216" xlink:href="#linearGradient2822" y1="-300.5" y2="-296.48441"/> + <linearGradient gradientTransform="matrix(1,0,0,0.7368421,242.00093,284.36842)" gradientUnits="userSpaceOnUse" id="linearGradient2201" inkscape:collect="always" x1="-178" x2="-178" xlink:href="#linearGradient2927" y1="-228.5" y2="-304.61469"/> + <linearGradient gradientTransform="matrix(1.0033404,0,0,1,-7.2374684,40)" gradientUnits="userSpaceOnUse" id="linearGradient2204" inkscape:collect="always" x1="71.999496" x2="71.999496" xlink:href="#XMLID_9_" y1="14.2578" y2="19.9583"/> + <linearGradient gradientTransform="matrix(1.0033808,0,0,0.7368421,-8.2378,45.263158)" gradientUnits="userSpaceOnUse" id="linearGradient2207" inkscape:collect="always" x1="122.74438" x2="122.74438" xlink:href="#linearGradient2937" y1="96" y2="20"/> + <linearGradient gradientTransform="translate(-6.999995,20)" gradientUnits="userSpaceOnUse" id="linearGradient2212" inkscape:collect="always" x1="72.000504" x2="72.000504" xlink:href="#XMLID_6_" y1="96" y2="0.00048828119"/> + <filter id="filter2770" inkscape:collect="always"> + <feGaussianBlur id="feGaussianBlur2772" inkscape:collect="always" stdDeviation="2.0786429"/> + </filter> + <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient10213" inkscape:collect="always" x1="98.617439" x2="91.228737" xlink:href="#linearGradient10207" y1="106.41443" y2="99.254974"/> + <radialGradient cx="102" cy="112.3047" fx="102" fy="112.3047" gradientTransform="matrix(1.295034,1.3831431e-7,-1.3627884e-7,1.2946006,-30.093452,-33.119615)" gradientUnits="userSpaceOnUse" id="radialGradient9437" inkscape:collect="always" r="139.55859" xlink:href="#XMLID_8_"/> + <clipPath clipPathUnits="userSpaceOnUse" id="clipPath7084"> + <path d="M 72,88 L 40,120 L 32,120 L 32,80 L 72,80 L 72,88 z" id="path7086" style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/> + </clipPath> + <filter height="1.3839999" id="filter6697" inkscape:collect="always" width="1.3839999" x="-0.19200002" y="-0.19199999"> + <feGaussianBlur id="feGaussianBlur6699" inkscape:collect="always" stdDeviation="1.9447689"/> + </filter> + <radialGradient cx="102" cy="112.3047" gradientUnits="userSpaceOnUse" id="XMLID_8_" r="139.55859"> + <stop id="stop41" offset="0" style="stop-color:#b7b8b9;stop-opacity:1;"/> + <stop id="stop47" offset="0.18851049" style="stop-color:#ECECEC"/> + <stop id="stop49" offset="0.25718147" style="stop-color:#FAFAFA"/> + <stop id="stop51" offset="0.30111277" style="stop-color:#FFFFFF"/> + <stop id="stop53" offset="0.5313" style="stop-color:#FAFAFA"/> + <stop id="stop55" offset="0.8449" style="stop-color:#EBECEC"/> + <stop id="stop57" offset="1" style="stop-color:#E1E2E3"/> + </radialGradient> + <linearGradient gradientUnits="userSpaceOnUse" id="XMLID_12_" x1="96" x2="88.000198" y1="104" y2="96.000198"> + <stop id="stop83" offset="0" style="stop-color:#888A85"/> + <stop id="stop85" offset="0.0072" style="stop-color:#8C8E89"/> + <stop id="stop87" offset="0.0673" style="stop-color:#ABACA9"/> + <stop id="stop89" offset="0.1347" style="stop-color:#C5C6C4"/> + <stop id="stop91" offset="0.2652576" style="stop-color:#DBDBDA"/> + <stop id="stop93" offset="0.37646064" style="stop-color:#EBEBEB"/> + <stop id="stop95" offset="0.48740286" style="stop-color:#F7F7F6"/> + <stop id="stop97" offset="0.6324091" style="stop-color:#FDFDFD"/> + <stop id="stop99" offset="1" style="stop-color:#FFFFFF"/> + </linearGradient> + <linearGradient id="linearGradient10207"> + <stop id="stop10209" offset="0" style="stop-color:#a2a2a2;stop-opacity:1;"/> + <stop id="stop10211" offset="1" style="stop-color:#ffffff;stop-opacity:1;"/> + </linearGradient> + <linearGradient gradientTransform="matrix(1.0172054,0,0,1.5,246.03226,514.75)" gradientUnits="userSpaceOnUse" id="linearGradient3385" inkscape:collect="always" x1="-168.99216" x2="-168.99216" xlink:href="#linearGradient2822" y1="-300.5" y2="-296.48441"/> + <linearGradient gradientTransform="matrix(1,0,0,0.7368421,242.00093,284.36842)" gradientUnits="userSpaceOnUse" id="linearGradient3387" inkscape:collect="always" x1="-178" x2="-178" xlink:href="#linearGradient2927" y1="-232.84966" y2="-304.61469"/> + </defs> + <path d="M 118.983,31 C 118.992,29.35 117.64999,28 115.99999,28 L 40.961007,28 C 40.961007,28 32.061006,20 30.961,20 L 14.999998,20 C 12.799996,20 10.999999,21.8 10.999999,24 L 10.999999,31 C 10.999999,31 11.999999,116 8,116 L 122,116 C 117.99999,116 118.983,31 118.983,31 z " id="path15" style="fill:url(#linearGradient2212)"/> + <g id="g17" style="opacity:0.6;filter:url(#filter2807)" transform="matrix(1.0033404,0,0,1,-8.2374684,20)"> + <path d="M 132,96 C 132,98.2 128.4,100 124,100 L 20,100 C 15.6,100 12,98.2 12,96 C 12,93.8 15.6,92 20,92 L 124,92 C 128.4,92 132,93.8 132,96 z " id="path19"/> + </g> + <path d="M 10.884862,54 C 10.893892,55.75 10.902922,57.755 10.910952,60 L 119.09511,60 C 119.10414,57.755 119.11317,55.75 119.1212,54 L 10.884862,54 z " id="path50" style="opacity:0.5;fill:url(#linearGradient2204)"/> + <path d="M 119.99722,31 C 120.00622,29.35 118.66422,28 117.01422,28 L 42.975222,28 L 36.389222,21.414 C 35.611222,20.636 34.075222,20 32.975222,20 L 12.014222,20 C 9.8142222,20 8.0142222,21.8 8.0142222,24 C 8.0142222,24 7.9822222,54.499299 8.0142222,60.031299 L 12.014222,60.031299 C 12.014222,53.222299 12.014222,24 12.014222,24 L 32.901222,23.997 C 33.083222,24.019 33.470222,24.179 33.560222,24.243 L 41.318222,32 C 41.318222,32 114.02722,32 115.99922,32 C 115.99922,32.435 116.00022,56.400299 116.00222,60.031299 L 120.01422,60.031299 C 120.04522,54.499299 119.99722,31 119.99722,31 z " id="path2896" sodipodi:nodetypes="ccccccccccccccccc" style="fill:#5e95e3;fill-opacity:1"/> + <path d="M 124.36598,113.79242 C 124.27969,115.00674 122.85389,116 121.19831,116 L 6.812906,116 C 5.157329,116 3.731522,115.00674 3.644228,113.79242 L 0.007982,62.204632 C -0.112423,60.992526 1.143808,60 2.799384,60 L 125.21183,60 C 126.86741,60 128.11762,60.991789 127.9912,62.203895 L 124.36598,113.79242 z " id="path30" style="opacity:0.9;fill:url(#linearGradient2207);fill-opacity:1"/> + <path d="M 125.21293,60 L 2.7999261,60 C 1.1449261,60 -0.11207393,60.992526 0.0079260701,62.204632 L 3.6439261,113.79242 C 3.7309261,115.00674 5.1569261,116 6.8129261,116 L 121.19793,116 C 122.85393,116 124.27993,115.00674 124.36593,113.79242 L 127.99093,62.203895 C 128.11893,60.991789 126.86793,60 125.21293,60 z M 120.41393,113.05263 C 118.87493,113.05263 9.1349261,113.05263 7.5979261,113.05263 C 7.2299261,107.83726 4.5229261,70.627562 4.0659261,64.149246 C 6.5189261,64.149246 121.45793,64.149246 123.93493,64.149246 C 123.81393,65.85872 120.49293,111.92821 120.41393,113.05263 z " id="path2894" sodipodi:nodetypes="cccccccccccccc" style="fill:url(#linearGradient3387)"/> + <path d="M 4,64 C 4.0273488,64.775875 4.1802721,68.801119 4.2225137,70 C 7.123925,70 122.78934,70 125.71499,70 C 125.74343,69.191222 125.93026,64.204735 125.9375,64 C 123.41788,64 6.4952049,64 4,64 z " id="path2908" style="fill:url(#linearGradient3385);fill-opacity:1;opacity:0.835"/> +</svg> diff --git a/resources/icons/instances_svg/clucker.svg b/resources/sources/clucker.svg index 0c1727eb..0c1727eb 100644 --- a/resources/icons/instances_svg/clucker.svg +++ b/resources/sources/clucker.svg diff --git a/resources/icons/instances_svg/creeper.svg b/resources/sources/creeper.svg index 2a2e39b6..2a2e39b6 100644 --- a/resources/icons/instances_svg/creeper.svg +++ b/resources/sources/creeper.svg diff --git a/resources/icons/instances_svg/enderpearl.svg b/resources/sources/enderpearl.svg index ac9378f5..ac9378f5 100644 --- a/resources/icons/instances_svg/enderpearl.svg +++ b/resources/sources/enderpearl.svg diff --git a/resources/icons/instances_svg/ftb-glow.svg b/resources/sources/ftb-glow.svg index be78c78e..be78c78e 100644 --- a/resources/icons/instances_svg/ftb-glow.svg +++ b/resources/sources/ftb-glow.svg diff --git a/resources/icons/instances_svg/ftb-logo.svg b/resources/sources/ftb-logo.svg index 8cf73567..8cf73567 100644 --- a/resources/icons/instances_svg/ftb-logo.svg +++ b/resources/sources/ftb-logo.svg diff --git a/resources/icons/instances_svg/gear.svg b/resources/sources/gear.svg index c0169aec..c0169aec 100644 --- a/resources/icons/instances_svg/gear.svg +++ b/resources/sources/gear.svg diff --git a/resources/icons/instances_svg/herobrine.svg b/resources/sources/herobrine.svg index 7392ba36..7392ba36 100644 --- a/resources/icons/instances_svg/herobrine.svg +++ b/resources/sources/herobrine.svg diff --git a/resources/icons/instances_svg/magitech.svg b/resources/sources/magitech.svg index c6dd6bc0..c6dd6bc0 100644 --- a/resources/icons/instances_svg/magitech.svg +++ b/resources/sources/magitech.svg diff --git a/resources/icons/instances_svg/meat.svg b/resources/sources/meat.svg index 69a20073..69a20073 100644 --- a/resources/icons/instances_svg/meat.svg +++ b/resources/sources/meat.svg diff --git a/resources/icons/instances_svg/netherstar.svg b/resources/sources/netherstar.svg index 4046e4ec..4046e4ec 100644 --- a/resources/icons/instances_svg/netherstar.svg +++ b/resources/sources/netherstar.svg diff --git a/resources/icons/instances_svg/pskeleton.svg b/resources/sources/pskeleton.svg index c2783df8..c2783df8 100644 --- a/resources/icons/instances_svg/pskeleton.svg +++ b/resources/sources/pskeleton.svg diff --git a/resources/icons/instances_svg/skeleton.svg b/resources/sources/skeleton.svg index 5d55f272..5d55f272 100644 --- a/resources/icons/instances_svg/skeleton.svg +++ b/resources/sources/skeleton.svg diff --git a/resources/icons/instances_svg/squarecreeper.svg b/resources/sources/squarecreeper.svg index a1b0f4d1..a1b0f4d1 100644 --- a/resources/icons/instances_svg/squarecreeper.svg +++ b/resources/sources/squarecreeper.svg diff --git a/resources/sources/status-bad.svg b/resources/sources/status-bad.svg new file mode 100644 index 00000000..54334e06 --- /dev/null +++ b/resources/sources/status-bad.svg @@ -0,0 +1,262 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + 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="64" + height="64" + id="svg2" + version="1.1" + inkscape:version="0.48.4 r9939" + sodipodi:docname="status-bad.svg" + inkscape:export-filename="/home/peterix/projects/MultiMC4/src/resources/insticons/enderpearl.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45"> + <defs + id="defs4"> + <linearGradient + id="linearGradient4245"> + <stop + id="stop4247" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + style="stop-color:#106810;stop-opacity:1" + offset="0.89412045" + id="stop4251" /> + <stop + id="stop4249" + offset="1" + style="stop-color:#199c19;stop-opacity:0" /> + </linearGradient> + <linearGradient + id="linearGradient4239"> + <stop + id="stop4241" + offset="0" + style="stop-color:#513000;stop-opacity:1;" /> + <stop + id="stop4243" + offset="1" + style="stop-color:#eea700;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient4030"> + <stop + id="stop4032" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop4034" + offset="1" + style="stop-color:#0c493f;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient3954"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3956" /> + <stop + style="stop-color:#199c19;stop-opacity:1;" + offset="1" + id="stop3958" /> + </linearGradient> + <filter + inkscape:collect="always" + id="filter3884"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.505" + id="feGaussianBlur3886" /> + </filter> + <filter + inkscape:collect="always" + id="filter3898" + x="-0.20110182" + width="1.4022036" + y="-0.20210065" + height="1.4042013"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="1.0604979" + id="feGaussianBlur3900" /> + </filter> + <filter + inkscape:collect="always" + id="filter3916" + x="-0.11491533" + width="1.2298307" + y="-0.11548609" + height="1.2309722"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.6059988" + id="feGaussianBlur3918" /> + </filter> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4239" + id="radialGradient4024" + gradientUnits="userSpaceOnUse" + cx="37.15184" + cy="33.513309" + fx="37.15184" + fy="33.513309" + r="20" + gradientTransform="matrix(-1.2888095,0.63917683,-0.44430494,-0.89587535,99.563439,45.881313)" /> + <filter + inkscape:collect="always" + id="filter4110" + x="-0.17716113" + width="1.3543223" + y="-0.17804105" + height="1.3560821"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.93424815" + id="feGaussianBlur4112" /> + </filter> + <linearGradient + id="linearGradient3954-9"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3956-4" /> + <stop + style="stop-color:#0f5f52;stop-opacity:1;" + offset="1" + id="stop3958-2" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3954" + id="radialGradient4230" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.1486906,1.2798015,-0.74419869,0.66795831,19.056258,-30.328315)" + cx="32" + cy="32" + fx="32" + fy="32" + r="20" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3954" + id="radialGradient4250" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.1486906,1.2798015,-0.74419869,0.66795831,19.056258,-30.328315)" + cx="32" + cy="32" + fx="32" + fy="32" + r="20" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.35355339" + inkscape:cx="-1038.0652" + inkscape:cy="556.75939" + inkscape:document-units="px" + inkscape:current-layer="g4116" + showgrid="false" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1612" + inkscape:window-height="1026" + inkscape:window-x="1677" + inkscape:window-y="-4" + inkscape:window-maximized="1" + inkscape:snap-global="true" + inkscape:snap-bbox="true"> + <inkscape:grid + type="xygrid" + id="grid2985" + empspacing="2" + visible="true" + enabled="true" + snapvisiblegridlinesonly="true" /> + <sodipodi:guide + orientation="0,1" + position="11.25,96.5" + id="guide4252" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-988.36218)"> + <g + id="g4116" + transform="matrix(1.3594572,0,0,1.3553409,-10.875658,-362.67325)"> + <path + transform="matrix(1.1769403,0,0,1.1769403,-6.1232836,982.70009)" + d="M 52,32 C 52,43.045695 43.045695,52 32,52 20.954305,52 12,43.045695 12,32 12,20.954305 20.954305,12 32,12 c 11.045695,0 20,8.954305 20,20 z" + sodipodi:ry="20" + sodipodi:rx="20" + sodipodi:cy="32" + sodipodi:cx="32" + id="path3014" + style="fill:url(#radialGradient4024);fill-opacity:1;stroke:none" + sodipodi:type="arc" /> + <path + sodipodi:nodetypes="ssccs" + inkscape:connector-curvature="0" + id="path3866" + transform="matrix(1.1769403,0,0,1.1769403,-5.6620909,982.68843)" + d="m 28,16 c -6.627417,0 -12,5.372583 -12,12 0,0.20181 0.0214,0.394383 0.03125,0.59375 C 20,20 22,22 28.65625,16.03125 28.436252,16.019242 28.222996,16 28,16 z" + style="fill:#ffbf00;fill-opacity:1;stroke:none;filter:url(#filter3884)" /> + <path + transform="matrix(1.487885,0,0,1.487885,-10.597031,-493.22036)" + style="fill:#ffef00;fill-opacity:1;stroke:none;filter:url(#filter3898)" + d="m 28,1004.3622 c -6.627417,0 -12,5.3726 -12,12 0,0.2018 0.0214,0.3944 0.03125,0.5937 3.96875,-8.5937 5.96875,-6.5937 12.625,-12.5625 -0.219998,-0.012 -0.433254,-0.031 -0.65625,-0.031 z" + id="path3888" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ssccs" /> + <path + sodipodi:nodetypes="ssccs" + inkscape:connector-curvature="0" + id="path3902" + d="m 28,1004.3622 c -6.627417,0 -12,5.3726 -12,12 0,0.2018 0.0214,0.3944 0.03125,0.5937 3.96875,-8.5937 5.96875,-6.5937 12.625,-12.5625 -0.219998,-0.012 -0.433254,-0.031 -0.65625,-0.031 z" + style="fill:#ffdd00;fill-opacity:1;stroke:none;filter:url(#filter3916)" + transform="matrix(-1.8359746,0,0,-1.8359746,81.432966,2885.3572)" /> + <path + transform="matrix(-1.1914115,0,0,-1.1914115,69.087304,2235.4229)" + style="fill:#f4ecd7;fill-opacity:1;stroke:none;filter:url(#filter3916);opacity:0.7518797" + d="m 28,1004.3622 c -6.627417,0 -12,5.3726 -12,12 0,0.2018 0.0214,0.3944 0.03125,0.5937 3.96875,-8.5937 5.96875,-6.5937 12.625,-12.5625 -0.219998,-0.012 -0.433254,-0.031 -0.65625,-0.031 z" + id="path3920" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ssccs" /> + <path + sodipodi:nodetypes="csccsc" + inkscape:connector-curvature="0" + id="path3964" + d="m 28,1004.3622 c -6.627417,0 -12,5.3726 -12,12 0,0.2018 0.0214,0.3944 0.03125,0.5937 5.570868,-4.4816 8.905966,-4.4575 12.625,-12.5625 -0.219998,-0.012 -0.433254,-0.031 -0.65625,-0.031 z" + style="fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4110);opacity:0.69924812" + transform="matrix(0.58516297,0,0,0.58516297,6.7391969,416.10681)" /> + </g> + </g> +</svg> diff --git a/resources/sources/status-good.svg b/resources/sources/status-good.svg new file mode 100644 index 00000000..3b311806 --- /dev/null +++ b/resources/sources/status-good.svg @@ -0,0 +1,293 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + 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="64" + height="64" + id="svg2" + version="1.1" + inkscape:version="0.48.4 r9939" + sodipodi:docname="enderpearl.svg" + inkscape:export-filename="/home/peterix/projects/MultiMC4/src/resources/insticons/enderpearl.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45"> + <defs + id="defs4"> + <linearGradient + id="linearGradient4245"> + <stop + id="stop4247" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + style="stop-color:#106810;stop-opacity:1" + offset="0.89412045" + id="stop4251" /> + <stop + id="stop4249" + offset="1" + style="stop-color:#199c19;stop-opacity:0" /> + </linearGradient> + <linearGradient + id="linearGradient4239"> + <stop + id="stop4241" + offset="0" + style="stop-color:#043400;stop-opacity:1" /> + <stop + id="stop4243" + offset="1" + style="stop-color:#199c19;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient4030"> + <stop + id="stop4032" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop4034" + offset="1" + style="stop-color:#0c493f;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient3954"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3956" /> + <stop + style="stop-color:#199c19;stop-opacity:1;" + offset="1" + id="stop3958" /> + </linearGradient> + <filter + inkscape:collect="always" + id="filter3884"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.505" + id="feGaussianBlur3886" /> + </filter> + <filter + inkscape:collect="always" + id="filter3898" + x="-0.20110182" + width="1.4022036" + y="-0.20210065" + height="1.4042013"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="1.0604979" + id="feGaussianBlur3900" /> + </filter> + <filter + inkscape:collect="always" + id="filter3916" + x="-0.11491533" + width="1.2298307" + y="-0.11548609" + height="1.2309722"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.6059988" + id="feGaussianBlur3918" /> + </filter> + <filter + inkscape:collect="always" + id="filter3992"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="1.44" + id="feGaussianBlur3994" /> + </filter> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4239" + id="radialGradient4024" + gradientUnits="userSpaceOnUse" + cx="37.15184" + cy="33.513309" + fx="37.15184" + fy="33.513309" + r="20" + gradientTransform="matrix(-1.2888095,0.63917683,-0.44430494,-0.89587535,99.563439,45.881313)" /> + <filter + inkscape:collect="always" + id="filter4082" + x="-0.13465964" + width="1.2693193" + y="-0.12490681" + height="1.2498136"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="1.763901" + id="feGaussianBlur4084" /> + </filter> + <filter + inkscape:collect="always" + id="filter4110" + x="-0.17716113" + width="1.3543223" + y="-0.17804105" + height="1.3560821"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.93424815" + id="feGaussianBlur4112" /> + </filter> + <linearGradient + id="linearGradient3954-9"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3956-4" /> + <stop + style="stop-color:#0f5f52;stop-opacity:1;" + offset="1" + id="stop3958-2" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3954" + id="radialGradient4230" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.1486906,1.2798015,-0.74419869,0.66795831,19.056258,-30.328315)" + cx="32" + cy="32" + fx="32" + fy="32" + r="20" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3954" + id="radialGradient4250" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.1486906,1.2798015,-0.74419869,0.66795831,19.056258,-30.328315)" + cx="32" + cy="32" + fx="32" + fy="32" + r="20" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4245" + id="radialGradient4231" + cx="11.428607" + cy="52.782928" + fx="11.428607" + fy="52.782928" + r="22.333248" + gradientTransform="matrix(0,-0.99787164,0.98982309,1.711883e-6,-20.245763,43.404188)" + gradientUnits="userSpaceOnUse" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="8" + inkscape:cx="30.78415" + inkscape:cy="28.132388" + inkscape:document-units="px" + inkscape:current-layer="g4116" + showgrid="false" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1612" + inkscape:window-height="1026" + inkscape:window-x="1677" + inkscape:window-y="-4" + inkscape:window-maximized="1" + inkscape:snap-global="true" + inkscape:snap-bbox="true"> + <inkscape:grid + type="xygrid" + id="grid2985" + empspacing="2" + visible="true" + enabled="true" + snapvisiblegridlinesonly="true" /> + <sodipodi:guide + orientation="0,1" + position="11.25,96.5" + id="guide4252" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-988.36218)"> + <g + id="g4116" + transform="matrix(1.3594572,0,0,1.3553409,-10.875658,-362.67325)"> + <path + transform="matrix(1.1769403,0,0,1.1769403,-6.1232836,982.70009)" + d="M 52,32 C 52,43.045695 43.045695,52 32,52 20.954305,52 12,43.045695 12,32 12,20.954305 20.954305,12 32,12 c 11.045695,0 20,8.954305 20,20 z" + sodipodi:ry="20" + sodipodi:rx="20" + sodipodi:cy="32" + sodipodi:cx="32" + id="path3014" + style="fill:url(#radialGradient4024);fill-opacity:1;stroke:none" + sodipodi:type="arc" /> + <path + sodipodi:nodetypes="ssccs" + inkscape:connector-curvature="0" + id="path3866" + transform="matrix(1.1769403,0,0,1.1769403,-5.6620909,982.68843)" + d="m 28,16 c -6.627417,0 -12,5.372583 -12,12 0,0.20181 0.0214,0.394383 0.03125,0.59375 C 20,20 22,22 28.65625,16.03125 28.436252,16.019242 28.222996,16 28,16 z" + style="fill:#08ff00;fill-opacity:1;stroke:none;filter:url(#filter3884)" /> + <path + transform="matrix(1.487885,0,0,1.487885,-10.597031,-493.22036)" + style="fill:#14ff00;fill-opacity:1;stroke:none;filter:url(#filter3898)" + d="m 28,1004.3622 c -6.627417,0 -12,5.3726 -12,12 0,0.2018 0.0214,0.3944 0.03125,0.5937 3.96875,-8.5937 5.96875,-6.5937 12.625,-12.5625 -0.219998,-0.012 -0.433254,-0.031 -0.65625,-0.031 z" + id="path3888" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ssccs" /> + <path + sodipodi:nodetypes="ssccs" + inkscape:connector-curvature="0" + id="path3902" + d="m 28,1004.3622 c -6.627417,0 -12,5.3726 -12,12 0,0.2018 0.0214,0.3944 0.03125,0.5937 3.96875,-8.5937 5.96875,-6.5937 12.625,-12.5625 -0.219998,-0.012 -0.433254,-0.031 -0.65625,-0.031 z" + style="fill:#56ff00;fill-opacity:1;stroke:none;filter:url(#filter3916)" + transform="matrix(-1.8359746,0,0,-1.8359746,81.432966,2885.3572)" /> + <path + transform="matrix(-1.1914115,0,0,-1.1914115,69.087304,2235.4229)" + style="fill:#d7f4d7;fill-opacity:1;stroke:none;filter:url(#filter3916)" + d="m 28,1004.3622 c -6.627417,0 -12,5.3726 -12,12 0,0.2018 0.0214,0.3944 0.03125,0.5937 3.96875,-8.5937 5.96875,-6.5937 12.625,-12.5625 -0.219998,-0.012 -0.433254,-0.031 -0.65625,-0.031 z" + id="path3920" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ssccs" /> + <path + sodipodi:nodetypes="csccsc" + inkscape:connector-curvature="0" + id="path3964" + d="m 28,1004.3622 c -6.627417,0 -12,5.3726 -12,12 0,0.2018 0.0214,0.3944 0.03125,0.5937 5.570868,-4.4816 8.905966,-4.4575 12.625,-12.5625 -0.219998,-0.012 -0.433254,-0.031 -0.65625,-0.031 z" + style="fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4110)" + transform="matrix(0.58516297,0,0,0.58516297,6.7391969,416.10681)" /> + </g> + </g> +</svg> diff --git a/resources/sources/status-terrible.svg b/resources/sources/status-terrible.svg new file mode 100644 index 00000000..b0de7bfd --- /dev/null +++ b/resources/sources/status-terrible.svg @@ -0,0 +1,262 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + 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="64" + height="64" + id="svg2" + version="1.1" + inkscape:version="0.48.4 r9939" + sodipodi:docname="status-terrible.svg" + inkscape:export-filename="/home/peterix/projects/MultiMC4/src/resources/insticons/enderpearl.png" + inkscape:export-xdpi="45" + inkscape:export-ydpi="45"> + <defs + id="defs4"> + <linearGradient + id="linearGradient4245"> + <stop + id="stop4247" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + style="stop-color:#106810;stop-opacity:1" + offset="0.89412045" + id="stop4251" /> + <stop + id="stop4249" + offset="1" + style="stop-color:#199c19;stop-opacity:0" /> + </linearGradient> + <linearGradient + id="linearGradient4239"> + <stop + id="stop4241" + offset="0" + style="stop-color:#510000;stop-opacity:1;" /> + <stop + id="stop4243" + offset="1" + style="stop-color:#ee0000;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient4030"> + <stop + id="stop4032" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop4034" + offset="1" + style="stop-color:#0c493f;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient3954"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3956" /> + <stop + style="stop-color:#199c19;stop-opacity:1;" + offset="1" + id="stop3958" /> + </linearGradient> + <filter + inkscape:collect="always" + id="filter3884"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.505" + id="feGaussianBlur3886" /> + </filter> + <filter + inkscape:collect="always" + id="filter3898" + x="-0.20110182" + width="1.4022036" + y="-0.20210065" + height="1.4042013"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="1.0604979" + id="feGaussianBlur3900" /> + </filter> + <filter + inkscape:collect="always" + id="filter3916" + x="-0.11491533" + width="1.2298307" + y="-0.11548609" + height="1.2309722"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.6059988" + id="feGaussianBlur3918" /> + </filter> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4239" + id="radialGradient4024" + gradientUnits="userSpaceOnUse" + cx="37.15184" + cy="33.513309" + fx="37.15184" + fy="33.513309" + r="20" + gradientTransform="matrix(-1.2888095,0.63917683,-0.44430494,-0.89587535,99.563439,45.881313)" /> + <filter + inkscape:collect="always" + id="filter4110" + x="-0.17716113" + width="1.3543223" + y="-0.17804105" + height="1.3560821"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.93424815" + id="feGaussianBlur4112" /> + </filter> + <linearGradient + id="linearGradient3954-9"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3956-4" /> + <stop + style="stop-color:#0f5f52;stop-opacity:1;" + offset="1" + id="stop3958-2" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3954" + id="radialGradient4230" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.1486906,1.2798015,-0.74419869,0.66795831,19.056258,-30.328315)" + cx="32" + cy="32" + fx="32" + fy="32" + r="20" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3954" + id="radialGradient4250" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.1486906,1.2798015,-0.74419869,0.66795831,19.056258,-30.328315)" + cx="32" + cy="32" + fx="32" + fy="32" + r="20" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.5" + inkscape:cx="-732.84524" + inkscape:cy="332.3527" + inkscape:document-units="px" + inkscape:current-layer="g4116" + showgrid="false" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1612" + inkscape:window-height="1026" + inkscape:window-x="1677" + inkscape:window-y="-4" + inkscape:window-maximized="1" + inkscape:snap-global="true" + inkscape:snap-bbox="true"> + <inkscape:grid + type="xygrid" + id="grid2985" + empspacing="2" + visible="true" + enabled="true" + snapvisiblegridlinesonly="true" /> + <sodipodi:guide + orientation="0,1" + position="11.25,96.5" + id="guide4252" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-988.36218)"> + <g + id="g4116" + transform="matrix(1.3594572,0,0,1.3553409,-10.875658,-362.67325)"> + <path + transform="matrix(1.1769403,0,0,1.1769403,-6.1232836,982.70009)" + d="M 52,32 C 52,43.045695 43.045695,52 32,52 20.954305,52 12,43.045695 12,32 12,20.954305 20.954305,12 32,12 c 11.045695,0 20,8.954305 20,20 z" + sodipodi:ry="20" + sodipodi:rx="20" + sodipodi:cy="32" + sodipodi:cx="32" + id="path3014" + style="fill:url(#radialGradient4024);fill-opacity:1;stroke:none" + sodipodi:type="arc" /> + <path + sodipodi:nodetypes="ssccs" + inkscape:connector-curvature="0" + id="path3866" + transform="matrix(1.1769403,0,0,1.1769403,-5.6620909,982.68843)" + d="m 28,16 c -6.627417,0 -12,5.372583 -12,12 0,0.20181 0.0214,0.394383 0.03125,0.59375 C 20,20 22,22 28.65625,16.03125 28.436252,16.019242 28.222996,16 28,16 z" + style="fill:#ff8f8f;fill-opacity:1;stroke:none;filter:url(#filter3884)" /> + <path + transform="matrix(1.487885,0,0,1.487885,-10.597031,-493.22036)" + style="fill:#ff7878;fill-opacity:1;stroke:none;filter:url(#filter3898)" + d="m 28,1004.3622 c -6.627417,0 -12,5.3726 -12,12 0,0.2018 0.0214,0.3944 0.03125,0.5937 3.96875,-8.5937 5.96875,-6.5937 12.625,-12.5625 -0.219998,-0.012 -0.433254,-0.031 -0.65625,-0.031 z" + id="path3888" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ssccs" /> + <path + sodipodi:nodetypes="ssccs" + inkscape:connector-curvature="0" + id="path3902" + d="m 28,1004.3622 c -6.627417,0 -12,5.3726 -12,12 0,0.2018 0.0214,0.3944 0.03125,0.5937 3.96875,-8.5937 5.96875,-6.5937 12.625,-12.5625 -0.219998,-0.012 -0.433254,-0.031 -0.65625,-0.031 z" + style="fill:#ff5252;fill-opacity:1;stroke:none;filter:url(#filter3916)" + transform="matrix(-1.8359746,0,0,-1.8359746,81.432966,2885.3572)" /> + <path + transform="matrix(-1.1914115,0,0,-1.1914115,69.087304,2235.4229)" + style="fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3916);opacity:0.75187970000000004" + d="m 28,1004.3622 c -6.627417,0 -12,5.3726 -12,12 0,0.2018 0.0214,0.3944 0.03125,0.5937 3.96875,-8.5937 5.96875,-6.5937 12.625,-12.5625 -0.219998,-0.012 -0.433254,-0.031 -0.65625,-0.031 z" + id="path3920" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ssccs" /> + <path + sodipodi:nodetypes="csccsc" + inkscape:connector-curvature="0" + id="path3964" + d="m 28,1004.3622 c -6.627417,0 -12,5.3726 -12,12 0,0.2018 0.0214,0.3944 0.03125,0.5937 5.570868,-4.4816 8.905966,-4.4575 12.625,-12.5625 -0.219998,-0.012 -0.433254,-0.031 -0.65625,-0.031 z" + style="fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4110);opacity:0.69924812" + transform="matrix(0.58516297,0,0,0.58516297,6.7391969,416.10681)" /> + </g> + </g> +</svg> diff --git a/resources/icons/instances_svg/steve.svg b/resources/sources/steve.svg index 2233272c..2233272c 100644 --- a/resources/icons/instances_svg/steve.svg +++ b/resources/sources/steve.svg diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 2d851404..7aeae59f 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -84,9 +84,23 @@ if(MultiMC_CODE_COVERAGE) add_custom_target(MultiMC_RUN_TESTS DEPENDS MultiMC_GENERATE_COVERAGE_HTML) endif(MultiMC_CODE_COVERAGE) +set(MultiMC_TEST_DATA_PATH "${CMAKE_CURRENT_BINARY_DIR}/data") +if(UNIX) + # on unix we get the third / from the filename + set(MultiMC_TEST_DATA_PATH "file://${MultiMC_TEST_DATA_PATH}") +else() + # we don't on windows, so we have to add it ourselves + set(MultiMC_TEST_DATA_PATH "file:///${MultiMC_TEST_DATA_PATH}") +endif() +file(GLOB data_files "data/*") +foreach(data_file ${data_files}) + get_filename_component(filename ${data_file} NAME) + configure_file( + ${data_file} + ${CMAKE_CURRENT_BINARY_DIR}/data/${filename} + @ONLY + NEWLINE_STYLE LF + ) +endforeach() -add_custom_target(MultiMC_Test_Data - ALL - COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_CURRENT_BINARY_DIR}/data - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/data ${CMAKE_CURRENT_BINARY_DIR}/data -) +configure_file(test_config.h.in test_config.h @ONLY) diff --git a/tests/TestUtil.h b/tests/TestUtil.h index 57d1fdf2..e9099b15 100644 --- a/tests/TestUtil.h +++ b/tests/TestUtil.h @@ -7,6 +7,8 @@ #include "MultiMC.h" +#include "test_config.h" + struct TestsInternal { static QByteArray readFile(const QString &fileName) diff --git a/tests/data/1.json b/tests/data/1.json index f9f99b22..0f2d6ced 100644 --- a/tests/data/1.json +++ b/tests/data/1.json @@ -8,7 +8,7 @@ "Sources": [ { "SourceType": "http", - "Url": "$PWD/tests/data/fileOneA" + "Url": "@MultiMC_TEST_DATA_PATH@/fileOneA" } ], "Executable": true, @@ -20,7 +20,7 @@ "Sources": [ { "SourceType": "http", - "Url": "$PWD/tests/data/fileTwo" + "Url": "@MultiMC_TEST_DATA_PATH@/fileTwo" } ], "Executable": false, @@ -32,7 +32,7 @@ "Sources": [ { "SourceType": "http", - "Url": "$PWD/tests/data/fileThree" + "Url": "@MultiMC_TEST_DATA_PATH@/fileThree" } ], "Executable": false, diff --git a/tests/data/2.json b/tests/data/2.json index bb59b9b6..6e2b0d3c 100644 --- a/tests/data/2.json +++ b/tests/data/2.json @@ -8,7 +8,7 @@ "Sources": [ { "SourceType": "http", - "Url": "$PWD/tests/data/fileOneB" + "Url": "@MultiMC_TEST_DATA_PATH@/fileOneB" } ], "Executable": true, @@ -20,7 +20,7 @@ "Sources": [ { "SourceType": "http", - "Url": "$PWD/tests/data/fileTwo" + "Url": "@MultiMC_TEST_DATA_PATH@/fileTwo" } ], "Executable": false, diff --git a/tests/data/channels.json b/tests/data/channels.json index d7446274..3ad504b0 100644 --- a/tests/data/channels.json +++ b/tests/data/channels.json @@ -5,13 +5,13 @@ "id": "develop", "name": "Develop", "description": "The channel called \"develop\"", - "url": "$PWD/tests/data/" + "url": "@MultiMC_TEST_DATA_PATH@" }, { "id": "stable", "name": "Stable", "description": "It's stable at least", - "url": "$PWD/tests/data/" + "url": "@MultiMC_TEST_DATA_PATH@" }, { "id": "42", diff --git a/tests/test_config.h.in b/tests/test_config.h.in new file mode 100644 index 00000000..69dd38e7 --- /dev/null +++ b/tests/test_config.h.in @@ -0,0 +1,3 @@ +#pragma once + +#define MultiMC_TEST_DATA_PATH "@MultiMC_TEST_DATA_PATH@" diff --git a/tests/tst_UpdateChecker.cpp b/tests/tst_UpdateChecker.cpp index 1e5e682f..0dcb242f 100644 --- a/tests/tst_UpdateChecker.cpp +++ b/tests/tst_UpdateChecker.cpp @@ -1,6 +1,9 @@ #include <QTest> #include <QSignalSpy> +#include "depends/settings/settingsobject.h" +#include "depends/settings/setting.h" + #include "TestUtil.h" #include "logic/updater/UpdateChecker.h" @@ -20,6 +23,19 @@ QDebug operator<<(QDebug dbg, const UpdateChecker::ChannelListEntry &c) return dbg.maybeSpace(); } +class ResetSetting +{ +public: + ResetSetting(std::shared_ptr<Setting> setting) : setting(setting), oldValue(setting->get()) {} + ~ResetSetting() + { + setting->set(oldValue); + } + + std::shared_ptr<Setting> setting; + QVariant oldValue; +}; + class UpdateCheckerTest : public QObject { Q_OBJECT @@ -76,24 +92,27 @@ slots: << true << true << (QList<UpdateChecker::ChannelListEntry>() - << UpdateChecker::ChannelListEntry{"develop", "Develop", "The channel called \"develop\"", "$PWD/tests/data/"} - << UpdateChecker::ChannelListEntry{"stable", "Stable", "It's stable at least", "$PWD/tests/data/"} + << UpdateChecker::ChannelListEntry{"develop", "Develop", "The channel called \"develop\"", MultiMC_TEST_DATA_PATH} + << UpdateChecker::ChannelListEntry{"stable", "Stable", "It's stable at least", MultiMC_TEST_DATA_PATH} << UpdateChecker::ChannelListEntry{"42", "The Channel", "This is the channel that is going to answer all of your questions", "https://dent.me/tea"}); } void tst_ChannelListParsing() { + ResetSetting resetUpdateChannel(MMC->settings()->getSetting("UpdateChannel")); + QFETCH(QString, channel); QFETCH(QString, channelUrl); QFETCH(bool, hasChannels); QFETCH(bool, valid); QFETCH(QList<UpdateChecker::ChannelListEntry>, result); + MMC->settings()->set("UpdateChannel", channel); + UpdateChecker checker; QSignalSpy channelListLoadedSpy(&checker, SIGNAL(channelListLoaded())); QVERIFY(channelListLoadedSpy.isValid()); - checker.setCurrentChannel(channel); checker.setChannelListUrl(channelUrl); checker.updateChanList(); @@ -112,8 +131,7 @@ slots: QCOMPARE(checker.hasChannels(), hasChannels); QCOMPARE(checker.getChannelList(), result); } - // FIXME: fix, comment, explain what it does. -/* + void tst_UpdateChecking_data() { QTest::addColumn<QString>("channel"); @@ -126,19 +144,19 @@ slots: << 2 << (QList<QVariant>() << QString() << "1.0.3" << 3); } - */ -/* void tst_UpdateChecking() { + ResetSetting resetUpdateChannel(MMC->settings()->getSetting("UpdateChannel")); + QFETCH(QString, channel); QFETCH(QString, channelUrl); QFETCH(int, currentBuild); QFETCH(QList<QVariant>, result); + MMC->settings()->set("UpdateChannel", channel); MMC->m_version.build = currentBuild; UpdateChecker checker; - checker.setCurrentChannel(channel); checker.setChannelListUrl(channelUrl); QSignalSpy updateAvailableSpy(&checker, SIGNAL(updateAvailable(QString,QString,int))); @@ -158,7 +176,6 @@ slots: res[0] = checker.m_channels[0].url; QCOMPARE(updateAvailableSpy.first(), res); } - */ }; QTEST_GUILESS_MAIN_MULTIMC(UpdateCheckerTest) diff --git a/translations/mmc_de.ts b/translations/mmc_de.ts index 42047378..7bca2272 100644 --- a/translations/mmc_de.ts +++ b/translations/mmc_de.ts @@ -1,51 +1,95 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> -<TS version="2.0" language="de"> +<TS version="2.1" language="de"> <context> <name>AboutDialog</name> <message> - <location filename="../gui/aboutdialog.ui" line="20"/> <source>Dialog</source> - <translation>Dialog</translation> + <translation type="vanished">Dialog</translation> </message> <message> - <location filename="../gui/aboutdialog.ui" line="86"/> + <location filename="../gui/dialogs/AboutDialog.ui" line="+89"/> <source>MultiMC</source> <translation>MultiMC</translation> </message> <message> - <location filename="../gui/aboutdialog.ui" line="108"/> + <location line="+22"/> <source>About</source> <translation>Über</translation> </message> <message> - <location filename="../gui/aboutdialog.ui" line="114"/> <source>MultiMC is a custom launcher that makes managing Minecraft easier by allowing you to have multiple installations of Minecraft at once.</source> - <translation>MultiMC ist ein alternativer Launcher, der das Management von Minecraft vereinfacht, indem er es dir erlaubt, mehrere Installationen von Minecraft zu verwalten.</translation> + <translation type="vanished">MultiMC ist ein alternativer Launcher, der das Management von Minecraft vereinfacht, indem er es dir erlaubt, mehrere Installationen von Minecraft zu verwalten.</translation> </message> <message> - <location filename="../gui/aboutdialog.ui" line="133"/> + <location line="-91"/> + <source>About MultiMC</source> + <translation>Über MultiMC</translation> + </message> + <message> + <location line="+100"/> + <source><html><head/><body><p>MultiMC is a custom launcher that makes managing Minecraft easier by allowing you to have multiple instances of Minecraft at once.</p></body></html></source> + <translation><html><head/><body><p>MultiMC ist ein alternativer Launcher, der das Management von Minecraft vereinfacht, indem er es dir erlaubt, mehrere Installationen von Minecraft zu verwalten.</p></body></html></translation> + </message> + <message> + <location line="+19"/> <source>© 2013 MultiMC Contributors</source> - <translation>© 2013 MultiMC Contributors</translation> + <translation>© 2013 MultiMC-Mitwirkende</translation> </message> <message> - <location filename="../gui/aboutdialog.ui" line="148"/> + <location line="+15"/> <source><html><head/><body><p><a href="http://github.com/Forkk/MultiMC5"><span style=" text-decoration: underline; color:#0000ff;">http://github.com/MultiMC/MultiMC5</span></a></p></body></html></source> <translation></translation> </message> <message> - <location filename="../gui/aboutdialog.ui" line="190"/> + <location line="+28"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">MultiMC</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Andrew Okin &lt;</span><a href="mailto:forkk@forkk.net"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">forkk@forkk.net</span></a><span style=" font-size:10pt;">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Petr Mrázek &lt;</span><a href="mailto:peterix@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">peterix@gmail.com</span></a><span style=" font-size:10pt;">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Sky &lt;</span><a href="https://www.twitter.com/drayshak"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">@drayshak</span></a><span style=" font-size:10pt;">&gt;</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt; font-weight:600;">With thanks to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Orochimarufan &lt;</span><a href="mailto:orochimarufan.x3@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">orochimarufan.x3@gmail.com</span></a><span style=" font-size:10pt;">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">TakSuyu &lt;</span><a href="mailto:taksuyu@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">taksuyu@gmail.com</span></a><span style=" font-size:10pt;">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Kilobyte &lt;</span><a href="mailto:stiepen22@gmx.de"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">stiepen22@gmx.de</span></a><span style=" font-size:10pt;">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Jan (02JanDal) &lt;</span><a href="mailto:02jandal@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">02jandal@gmail.com</span></a><span style=" font-size:10pt;">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Robotbrain &lt;</span><a href="https://twitter.com/skylordelros"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">@skylordelros</span></a><span style=" font-size:10pt;">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Rootbear75 &lt;</span><a href="https://twitter.com/rootbear75"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">@rootbear75</span></a><span style=" font-size:10pt;">&gt; (build server)</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">MultiMC</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Andrew Okin &lt;</span><a href="mailto:forkk@forkk.net"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">forkk@forkk.net</span></a><span style=" font-size:10pt;">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Petr Mrázek &lt;</span><a href="mailto:peterix@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">peterix@gmail.com</span></a><span style=" font-size:10pt;">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Sky &lt;</span><a href="https://www.twitter.com/drayshak"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">@drayshak</span></a><span style=" font-size:10pt;">&gt;</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt; font-weight:600;">Mit dank an</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Orochimarufan &lt;</span><a href="mailto:orochimarufan.x3@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">orochimarufan.x3@gmail.com</span></a><span style=" font-size:10pt;">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">TakSuyu &lt;</span><a href="mailto:taksuyu@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">taksuyu@gmail.com</span></a><span style=" font-size:10pt;">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Kilobyte &lt;</span><a href="mailto:stiepen22@gmx.de"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">stiepen22@gmx.de</span></a><span style=" font-size:10pt;">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Jan (02JanDal) &lt;</span><a href="mailto:02jandal@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">02jandal@gmail.com</span></a><span style=" font-size:10pt;">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Robotbrain &lt;</span><a href="https://twitter.com/skylordelros"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">@skylordelros</span></a><span style=" font-size:10pt;">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Rootbear75 &lt;</span><a href="https://twitter.com/rootbear75"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">@rootbear75</span></a><span style=" font-size:10pt;">&gt; (bau server)</span></p></body></html></translation> + </message> + <message> + <location line="+25"/> <source>No Language file loaded.</source> - <extracomment>Hey, Translator, You are free to put a reference to you here :)</extracomment> - <translation>Deutsche Sprachdatei von Kilobyte (siehe oben).</translation> + <extracomment>Hey, Translator, feel free to put credit to you here</extracomment> + <translation>Deutsche Sprachdatei von Kilobyte (siehe oben). Aktualisiert von xnrand (nsfw auf IRC), Jan und ACGaming.</translation> </message> <message> - <location filename="../gui/aboutdialog.ui" line="224"/> + <location line="+39"/> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2012 MultiMC Contributors</span></p> +</style></head><body style=" font-family:'DejaVu Sans Mono'; font-size:7.8pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:18pt; font-weight:600;">MultiMC</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2012-2014 MultiMC Contributors</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">you may not use this file except in compliance with the License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">You may obtain a copy of the License at</span></p> @@ -58,39 +102,271 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">See the License for the specific language governing permissions and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">limitations under the License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">MultiMC uses QSLog, </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright (c) 2010, Razvan Petru</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">All rights reserved.</span></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:18pt; font-weight:600;">QSLog</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Copyright (c) 2010, Razvan Petru</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">All rights reserved.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Redistribution and use in source and binary forms, with or without modification,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">are permitted provided that the following conditions are met:</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">* Redistributions of source code must retain the above copyright notice, this</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> list of conditions and the following disclaimer.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">* Redistributions in binary form must reproduce the above copyright notice, this</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> list of conditions and the following disclaimer in the documentation and/or other</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> materials provided with the distribution.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">* The name of the contributors may not be used to endorse or promote products</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> derived from this software without specific prior written permission.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot; AND</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">OF THE POSSIBILITY OF SUCH DAMAGE.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:18pt; font-weight:600;">Group View (instance view)</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> /*</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * Copyright (C) 2007 Rafael Fernández López &lt;ereslibre@kde.org&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * Copyright (C) 2007 John Tapsell &lt;tapsell@kde.org&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> *</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * This library is free software; you can redistribute it and/or</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * modify it under the terms of the GNU Library General Public</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * License as published by the Free Software Foundation; either</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * version 2 of the License, or (at your option) any later version.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> *</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * This library is distributed in the hope that it will be useful,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * Library General Public License for more details.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> *</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * You should have received a copy of the GNU Library General Public License</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * along with this library; see the file COPYING.LIB. If not, write to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * Boston, MA 02110-1301, USA.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> */</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:18pt; font-weight:600;">Pack200</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">The GNU General Public License (GPL)</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Version 2, June 1991</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">+ &quot;CLASSPATH&quot; EXCEPTION TO THE GPL</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Certain source files distributed by Oracle America and/or its affiliates are</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">subject to the following clarification and special exception to the GPL, but</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">only where Oracle has expressly included in the particular source file's header</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">the words &quot;Oracle designates this particular file as subject to the &quot;Classpath&quot;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">exception as provided by Oracle in the LICENSE file that accompanied this code.&quot;</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> Linking this library statically or dynamically with other modules is making</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> a combined work based on this library. Thus, the terms and conditions of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> the GNU General Public License cover the whole combination.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> As a special exception, the copyright holders of this library give you</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> permission to link this library with independent modules to produce an</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> executable, regardless of the license terms of these independent modules,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> and to copy and distribute the resulting executable under terms of your</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> choice, provided that you also meet, for each linked independent module,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> the terms and conditions of the license of that module. An independent</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> module is a module which is not derived from or based on this library. If</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> you modify this library, you may extend this exception to your version of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> the library, but you are not obligated to do so. If you do not wish to do</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> so, delete this exception statement from your version.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:18pt; font-weight:600;">Quazip</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Copyright (C) 2005-2011 Sergey A. Tachenov</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This program is free software; you can redistribute it and/or modify it</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">under the terms of the GNU Lesser General Public License as published by</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">the Free Software Foundation; either version 2 of the License, or (at</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">your option) any later version.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This program is distributed in the hope that it will be useful, but</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">General Public License for more details.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">You should have received a copy of the GNU Lesser General Public License</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">along with this program; if not, write to the Free Software Foundation,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">See COPYING file for the full LGPL text.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Original ZIP package is copyrighted by Gilles Vollant, see</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">quazip/(un)zip.h files for details, basically it's zlib license.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:18pt; font-weight:600;">xz-minidec</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">/*</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * XZ decompressor</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> *</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * Authors: Lasse Collin &lt;lasse.collin@tukaani.org&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * Igor Pavlov &lt;http://7-zip.org/&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> *</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * This file has been put into the public domain.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * You can do whatever you want with this file.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> */</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'DejaVu Sans Mono'; font-size:7.8pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:18pt; font-weight:600;">MultiMC</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2012-2014 MultiMC Contributors</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">you may not use this file except in compliance with the License.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">You may obtain a copy of the License at</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Redistribution and use in source and binary forms, with or without modification,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">are permitted provided that the following conditions are met:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;"> http://www.apache.org/licenses/LICENSE-2.0</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">* Redistributions of source code must retain the above copyright notice, this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;"> list of conditions and the following disclaimer.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">* Redistributions in binary form must reproduce the above copyright notice, this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;"> list of conditions and the following disclaimer in the documentation and/or other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;"> materials provided with the distribution.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">* The name of the contributors may not be used to endorse or promote products</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;"> derived from this software without specific prior written permission.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Unless required by applicable law or agreed to in writing, software</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">See the License for the specific language governing permissions and</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">limitations under the License.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot; AND</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">OF THE POSSIBILITY OF SUCH DAMAGE.</span></p></body></html></source> - <translation></translation> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:18pt; font-weight:600;">QSLog</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Copyright (c) 2010, Razvan Petru</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">All rights reserved.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Redistribution and use in source and binary forms, with or without modification,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">are permitted provided that the following conditions are met:</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">* Redistributions of source code must retain the above copyright notice, this</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> list of conditions and the following disclaimer.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">* Redistributions in binary form must reproduce the above copyright notice, this</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> list of conditions and the following disclaimer in the documentation and/or other</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> materials provided with the distribution.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">* The name of the contributors may not be used to endorse or promote products</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> derived from this software without specific prior written permission.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot; AND</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">OF THE POSSIBILITY OF SUCH DAMAGE.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:18pt; font-weight:600;">Group View (instance view)</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> /*</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * Copyright (C) 2007 Rafael Fernández López &lt;ereslibre@kde.org&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * Copyright (C) 2007 John Tapsell &lt;tapsell@kde.org&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> *</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * This library is free software; you can redistribute it and/or</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * modify it under the terms of the GNU Library General Public</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * License as published by the Free Software Foundation; either</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * version 2 of the License, or (at your option) any later version.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> *</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * This library is distributed in the hope that it will be useful,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * Library General Public License for more details.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> *</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * You should have received a copy of the GNU Library General Public License</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * along with this library; see the file COPYING.LIB. If not, write to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * Boston, MA 02110-1301, USA.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> */</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:18pt; font-weight:600;">Pack200</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">The GNU General Public License (GPL)</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Version 2, June 1991</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">+ &quot;CLASSPATH&quot; EXCEPTION TO THE GPL</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Certain source files distributed by Oracle America and/or its affiliates are</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">subject to the following clarification and special exception to the GPL, but</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">only where Oracle has expressly included in the particular source file's header</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">the words &quot;Oracle designates this particular file as subject to the &quot;Classpath&quot;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">exception as provided by Oracle in the LICENSE file that accompanied this code.&quot;</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> Linking this library statically or dynamically with other modules is making</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> a combined work based on this library. Thus, the terms and conditions of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> the GNU General Public License cover the whole combination.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> As a special exception, the copyright holders of this library give you</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> permission to link this library with independent modules to produce an</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> executable, regardless of the license terms of these independent modules,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> and to copy and distribute the resulting executable under terms of your</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> choice, provided that you also meet, for each linked independent module,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> the terms and conditions of the license of that module. An independent</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> module is a module which is not derived from or based on this library. If</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> you modify this library, you may extend this exception to your version of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> the library, but you are not obligated to do so. If you do not wish to do</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> so, delete this exception statement from your version.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:18pt; font-weight:600;">Quazip</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Copyright (C) 2005-2011 Sergey A. Tachenov</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This program is free software; you can redistribute it and/or modify it</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">under the terms of the GNU Lesser General Public License as published by</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">the Free Software Foundation; either version 2 of the License, or (at</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">your option) any later version.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This program is distributed in the hope that it will be useful, but</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">General Public License for more details.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">You should have received a copy of the GNU Lesser General Public License</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">along with this program; if not, write to the Free Software Foundation,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">See COPYING file for the full LGPL text.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Original ZIP package is copyrighted by Gilles Vollant, see</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">quazip/(un)zip.h files for details, basically it's zlib license.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:18pt; font-weight:600;">xz-minidec</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">/*</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * XZ decompressor</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> *</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * Authors: Lasse Collin &lt;lasse.collin@tukaani.org&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * Igor Pavlov &lt;http://7-zip.org/&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> *</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * This file has been put into the public domain.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> * You can do whatever you want with this file.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> */</span></p></body></html></translation> + </message> + <message> + <location line="+140"/> + <source>Forking/Redistribution</source> + <translation>Abspaltung/Weiterverbreitung</translation> + </message> + <message> + <location line="+6"/> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:11pt;">We keep MultiMC open source because we think it's important to be able to see the source code for a project like this, and we do so using the Apache license.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:11pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:11pt;">Part of the reason for using the Apache license is we don't want people using the &quot;MultiMC&quot; name when redistributing the project. This means people must take the time to go through the source code and remove all references to &quot;MultiMC&quot;, including but not limited to the project icon and the title of windows, (no *MultiMC-fork* in the title).</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:11pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:11pt;">The Apache license covers reasonable use for the name - a mention of the project's origins in the About dialog and the license is acceptable. However, it should be abundantly clear that the project is a fork </span><span style=" font-family:'Bitstream Vera Sans'; font-size:11pt; font-weight:600;">without</span><span style=" font-family:'Bitstream Vera Sans'; font-size:11pt;"> implying that you have our blessing.</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:11pt;">Wir wollen, dass MultiMC Open Source bleibt, da wir glauben, dass es wichtig ist, den Quellcode von einem Projekt wie diesem, einzusehen. Daher verbreiten wir MultiMC unter der Apache-Lizenz</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:11pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:11pt;">Eine der Gründe, warum wir die Apache-Lizenz gewählt haben, ist, dass wir nicht wollen, dass der &quot;MultiMC&quot;-Name beim Weiterverbreiten benutzt wird. Dies bedeutet, dass Leute sich die Zeit nehmen müssen, den Code durchzugehen und alle Referenzen zu &quot;MultiMC&quot;, miteinbegriffen aber nicht begrenzt zu dem &quot;MultiMC&quot;-Logo und den Fenstertiteln (kein *MultiMC-fork* im Titel)</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:11pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:11pt;">Die Apache-Lizenz gibt Ihnen ein angemessenes Recht, den Namen zu benutzen - eine Bemerkung im Über-Dialog und in der Lizenz ist akzeptabel. Es sollte allerdings klar sein, dass das Projekt eine Abspaltung </span><span style=" font-family:'Bitstream Vera Sans'; font-size:11pt; font-weight:600;">ohne</span><span style=" font-family:'Bitstream Vera Sans'; font-size:11pt;"> unserem Segen ist</span></p></body></html></translation> </message> <message> <source><html><head/><body><p><a href="http://github.com/Forkk/MultiMC5"><span style=" text-decoration: underline; color:#0000ff;">http://github.com/Forkk/MultiMC5</span></a></p></body></html></source> <translation type="obsolete"><html><head/><body><p><a href="http://github.com/Forkk/MultiMC5"><span style=" text-decoration: underline; color:#0000ff;">http://github.com/Forkk/MultiMC5</span></a></p></body></html></translation> </message> <message> - <location filename="../gui/aboutdialog.ui" line="167"/> + <location line="-219"/> <source>Credits</source> <translation>Dank an</translation> </message> @@ -112,7 +388,7 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Deutsche Übersetzung: Kilobyte &lt;<a href="mailto:stiepen22@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">stiepen22@gmx.de</span></a>&gt;</p></body></html></translation> </message> <message> - <location filename="../gui/aboutdialog.ui" line="209"/> + <location line="+53"/> <source>License</source> <translation>Lizenz</translation> </message> @@ -201,83 +477,289 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">POSSIBILITY OF SUCH DAMAGE.</span></p></body></html></translation> </message> <message> - <location filename="../gui/aboutdialog.ui" line="278"/> + <location line="+193"/> <source>About Qt</source> <translation>Über Qt</translation> </message> <message> - <location filename="../gui/aboutdialog.ui" line="298"/> + <location line="+20"/> <source>Close</source> <translation>Schließen</translation> </message> </context> <context> + <name>AccountListDialog</name> + <message> + <location filename="../gui/dialogs/AccountListDialog.ui" line="+14"/> + <source>Manage Accounts</source> + <translation>Kontoverwaltung</translation> + </message> + <message> + <location line="+6"/> + <source><html><head/><body><p>Welcome! If you're new here, you can click the &quot;Add&quot; button to add your Mojang or Minecraft account.</p></body></html></source> + <translation><html><head/><body><p>Willkommen! Solltest du neu sein, kannst du die &quot;Hinzufügen&quot;-Schaltfläche drucken um dein Mojang- oder Minecraft-Konto hinzuzufügen</p></body></html></translation> + </message> + <message> + <location line="+17"/> + <source>&Add</source> + <translation>&Hinzufügen</translation> + </message> + <message> + <location line="+7"/> + <source>&Remove</source> + <translation>&Entfernen</translation> + </message> + <message> + <location line="+20"/> + <source><html><head/><body><p>Set the currently selected account as the active account. The active account is the account that is used to log in (unless it is overridden in an instance-specific setting).</p></body></html></source> + <translation><html><head/><body><p>Mache das ausgewählten Konto zum voreingestellten Konto. Das voreingestellte Konto ist das Konto das zum Einloggen benutzt wird (es sei denn es wird von einer Instanz-spezifischen Einstellung überschrieben).</p></body></html></translation> + </message> + <message> + <location line="+3"/> + <source>&Set Default</source> + <translation>&Benutze als Voreinstellung</translation> + </message> + <message> + <location line="+7"/> + <source>Set no default account. This will cause MultiMC to prompt you to select an account every time you launch an instance that doesn't have its own default set.</source> + <translation>Mache die Voreinstellung rückgängig. Wenn kein Konto voreingestellt ist, wird MultiMC dich bei jedem Start einer Instanz fragen, welches Konto benutzt werden soll, es sei denn, die Instanz hat ein instanzspezifisches Konto eingestellt.</translation> + </message> + <message> + <location line="+3"/> + <source>&No Default</source> + <translation>&Keine Voreinstellung</translation> + </message> + <message> + <location filename="../gui/dialogs/AccountListDialog.cpp" line="+71"/> + <source>Please enter your Mojang or Minecraft account username and password to add your account.</source> + <translation>Bitte gib Benutzernamen und Passwort deines Mojang- oder Minecraft-Kontos an, um es hinzuzufügen.</translation> + </message> + <message> + <location line="+84"/> + <source>Login error.</source> + <translation>Loginfehler.</translation> + </message> +</context> +<context> + <name>AccountSelectDialog</name> + <message> + <location filename="../gui/dialogs/AccountSelectDialog.ui" line="+14"/> + <source>Select an Account</source> + <translation>Wähle ein Konto</translation> + </message> + <message> + <location line="+6"/> + <source>Select an account.</source> + <translation>Wähle ein Konto.</translation> + </message> + <message> + <location line="+12"/> + <source>Use as default?</source> + <translation>Als Voreinstellung benutzen?</translation> + </message> + <message> + <location line="+7"/> + <source>Use as default for this instance only?</source> + <translation>Nur für diese Instanz als Voreinstellung benutzen?</translation> + </message> +</context> +<context> + <name>AssetsMigrateTask</name> + <message> + <location filename="../logic/assets/AssetsMigrateTask.cpp" line="+19"/> + <source>Migrating legacy assets...</source> + <translation>Migriere bestehende Daten...</translation> + </message> +</context> +<context> + <name>AuthenticateTask</name> + <message> + <location filename="../logic/auth/flows/AuthenticateTask.cpp" line="+197"/> + <source>Authenticating: Sending request...</source> + <translation>Authentifizierung: Sende Anfrage...</translation> + </message> + <message> + <location line="+2"/> + <source>Authenticating: Processing response...</source> + <translation>Authentifizierung: Bearbeite Antwort...</translation> + </message> +</context> +<context> <name>ConsoleWindow</name> <message> - <location filename="../gui/consolewindow.ui" line="14"/> + <location filename="../gui/ConsoleWindow.ui" line="+14"/> <source>MultiMC Console</source> <translation>MultiMC-Konsole</translation> </message> <message> - <location filename="../gui/consolewindow.ui" line="68"/> + <location line="+34"/> + <source>Upload Log</source> + <translation>Log hochladen</translation> + </message> + <message> + <location line="+20"/> + <source>&Kill Minecraft</source> + <translation>&Minecraft töten</translation> + </message> + <message> + <location line="+7"/> + <source>&Close</source> + <translation>&Schließen</translation> + </message> + <message> <source>Kill Minecraft</source> - <translation>Minecraft Killen</translation> + <translation type="vanished">Minecraft töten</translation> </message> <message> - <location filename="../gui/consolewindow.ui" line="75"/> <source>Close</source> - <translation>Schließen</translation> + <translation type="vanished">Schließen</translation> </message> <message> - <location filename="../gui/consolewindow.cpp" line="93"/> + <location filename="../gui/ConsoleWindow.cpp" line="+161"/> <source>Kill Minecraft?</source> - <extracomment>Main question of the kill confirmation dialog</extracomment> - <translation>Minecraft Killen?</translation> + <translation>Minecraft töten?</translation> </message> <message> - <location filename="../gui/consolewindow.cpp" line="94"/> + <location line="+1"/> <source>This can cause the instance to get corrupted and should only be used if Minecraft is frozen for some reason</source> <translation>Dies kann diese Instanz beschädigen und sollte daher nur genutzt werden, wenn Minecraft eingefroren ist</translation> </message> </context> <context> + <name>CopyInstanceDialog</name> + <message> + <location filename="../gui/dialogs/CopyInstanceDialog.ui" line="+17"/> + <source>Copy Instance</source> + <translation>Kopiere Instanz</translation> + </message> + <message> + <location line="+57"/> + <source>Name</source> + <translation>Name</translation> + </message> +</context> +<context> + <name>DownloadUpdateTask</name> + <message> + <location filename="../logic/updater/DownloadUpdateTask.cpp" line="+80"/> + <source>Finding information about the current version...</source> + <translation>Finde Informationen zur benutzten Version...</translation> + </message> + <message> + <location line="+21"/> + <source>Loading version information...</source> + <translation>Lade Versionsinformationen...</translation> + </message> + <message> + <location line="+50"/> + <source>Failed to download version info files.</source> + <translation>Laden der Versionsdateien ist fehlgeschlagen.</translation> + </message> + <message> + <location line="+5"/> + <source>Reading file list for new version...</source> + <translation>Bearbeite die Dateiliste der neuen Version...</translation> + </message> + <message> + <location line="+15"/> + <source>Reading file list for current version...</source> + <translation>Bearbeite die Dateiliste der benutzten Version...</translation> + </message> + <message> + <location line="+90"/> + <source>Failed to process update lists...</source> + <translation>Fehler beim Bearbeiten der Updateliste...</translation> + </message> + <message> + <location line="+12"/> + <source>Downloading %1 update files.</source> + <translation>%1 Dateien werden heruntergeladen.</translation> + </message> + <message> + <location line="+14"/> + <source>Processing file lists - figuring out how to install the update...</source> + <translation>Bearbeite Dateilisten - Rechne aus, wie das Update installiert werden soll...</translation> + </message> + <message> + <location line="+206"/> + <source>Failed to write update script file.</source> + <translation>Fehler beim Schreiben des Updatescripts.</translation> + </message> + <message> + <location line="+43"/> + <source>Failed to download update files.</source> + <translation>Fehler beim Herunterladen der Updatedateien.</translation> + </message> +</context> +<context> + <name>EditAccountDialog</name> + <message> + <location filename="../gui/dialogs/EditAccountDialog.ui" line="+14"/> + <source>Edit Account</source> + <translation>Bearbeite Konto</translation> + </message> + <message> + <location line="+6"/> + <source>Message label placeholder.</source> + <translation>Message label placeholder.</translation> + </message> + <message> + <location line="+13"/> + <source>Email / Username</source> + <translation>E-Mail / Benutzername</translation> + </message> + <message> + <location line="+10"/> + <source>Password</source> + <translation>Passwort</translation> + </message> +</context> +<context> <name>EditNotesDialog</name> <message> - <location filename="../gui/EditNotesDialog.ui" line="14"/> + <location filename="../gui/dialogs/EditNotesDialog.ui" line="+14"/> <source>Edit Notes</source> <translation>Notizen bearbeiten</translation> </message> <message> - <location filename="../gui/EditNotesDialog.cpp" line="15"/> + <location filename="../gui/dialogs/EditNotesDialog.cpp" line="+30"/> <source>Edit notes of %1</source> <translation>Notizen von %1 bearbeiten</translation> </message> </context> <context> + <name>ForgeListLoadTask</name> + <message> + <location filename="../logic/lists/ForgeVersionList.cpp" line="+161"/> + <source>Fetching Forge version lists...</source> + <translation>Lade die Forge-Versionslisten...</translation> + </message> +</context> +<context> <name>IconPickerDialog</name> <message> - <location filename="../gui/IconPickerDialog.ui" line="14"/> + <location filename="../gui/dialogs/IconPickerDialog.ui" line="+14"/> <source>Pick icon</source> <translation>Symbol auswählen</translation> </message> <message> - <location filename="../gui/IconPickerDialog.cpp" line="44"/> + <location filename="../gui/dialogs/IconPickerDialog.cpp" line="+64"/> <source>Add Icon</source> <translation>Symbol hinzufügen</translation> </message> <message> - <location filename="../gui/IconPickerDialog.cpp" line="45"/> + <location line="+2"/> <source>Remove Icon</source> <translation>Symbol entfernen</translation> </message> <message> - <location filename="../gui/IconPickerDialog.cpp" line="91"/> + <location line="+37"/> <source>Select Icons</source> <extracomment>The title of the select icons open file dialog</extracomment> <translation>Symbol auswählen</translation> </message> <message> - <location filename="../gui/IconPickerDialog.cpp" line="93"/> + <location line="+3"/> <source>Icons</source> <extracomment>The type of icon files</extracomment> <translation>Symbole</translation> @@ -286,140 +768,190 @@ p, li { white-space: pre-wrap; } <context> <name>InstanceSettings</name> <message> - <location filename="../gui/instancesettings.ui" line="27"/> + <location filename="../gui/dialogs/InstanceSettings.ui" line="+14"/> + <source>Instance Settings</source> + <translation>Instanzeinstellungen</translation> + </message> + <message> + <location line="+13"/> <source>Minecraft</source> <translation></translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="36"/> + <location line="+9"/> <source>Window Size</source> <translation>Fenstergröße</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="48"/> + <location line="+12"/> <source>Start Minecraft maximized?</source> <translation>Minecraft maximiert starten?</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="57"/> + <location line="+9"/> <source>Window height:</source> <translation>Fensterhöhe:</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="64"/> + <location line="+7"/> <source>Window width:</source> <translation>Fensterbreite:</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="108"/> + <location line="+44"/> <source>Console Settings</source> <translation>Konsoleneinstellungen</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="120"/> + <location line="+12"/> <source>Show console while the game is running?</source> - <translation>Konsole anzeigen wenn das Spiel läuft?</translation> + <translation>Konsole anzeigen, während das Spiel läuft?</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="127"/> + <location line="+7"/> <source>Automatically close console when the game quits?</source> <translation>Konsole automatisch schließen, nachdem das Spiel beendet wurde?</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="140"/> + <location line="+159"/> + <source>Browse...</source> + <translation>Durchsuchen...</translation> + </message> + <message> + <location line="+7"/> + <source>Auto-detect...</source> + <translation>Auto-Erkennung...</translation> + </message> + <message> <source>Account Settings</source> - <translation>Konteneinstellungen</translation> + <translation type="vanished">Konteneinstellungen</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="155"/> <source>Login automatically when an instance icon is double clicked?</source> - <translation>Automatisch einloggen, wenn das Instanzsymbol doppelt gecklickt wurde?</translation> + <translation type="vanished">Automatisch einloggen, wenn das Instanzsymbol doppelt gecklickt wurde?</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="182"/> + <location line="-142"/> <source>Java</source> <translation>Java</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="191"/> + <location line="+9"/> <source>Memory</source> <translation>Arbeitsspeicher</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="219"/> + <location line="+28"/> <source>Minimum memory allocation:</source> - <translation>Min. Arbeitspeicher:</translation> + <translation>Min. Arbeitsspeicher:</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="226"/> + <location line="+7"/> <source>Maximum memory allocation:</source> - <translation>Max. Arbeitspeicher:</translation> + <translation>Max. Arbeitsspeicher:</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="265"/> + <location line="+39"/> <source>PermGen:</source> <translation>PermGen:</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="278"/> + <location line="+13"/> <source>Java Settings</source> <translation>Java-Einstellungen</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="290"/> + <location line="+12"/> + <source>Test</source> + <translation>Teste</translation> + </message> + <message> + <location line="+7"/> <source>Java path:</source> <translation>Java-Pfad:</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="300"/> + <location line="+7"/> <source>JVM arguments:</source> <translation>JVM-Argumente:</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="307"/> <source>Auto-detect</source> - <translation>Automatisch erkennen</translation> + <translation type="vanished">Automatisch erkennen</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="323"/> + <location line="+33"/> <source>Custom Commands</source> <translation>Eigene Befehle</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="338"/> + <location line="+15"/> <source>Post-exit command:</source> - <translation>Nach-abschluss-Befehl:</translation> + <translation>Nach-Abschluss-Befehl:</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="345"/> + <location line="+7"/> <source>Pre-launch command:</source> <translation>Vor-Start-Befehl:</translation> </message> <message> - <location filename="../gui/instancesettings.ui" line="367"/> + <location line="+22"/> <source>Pre-launch command runs before the instance launches and post-exit command runs after it exits. Both will be run in MultiMC's working directory with INST_ID, INST_DIR, and INST_NAME as environment variables.</source> - <translation>Vor-Start wird ausgeführt, bevor die Instanz startet, Nach-Ende nachdem die Instanz beendet wurde. Beide werden Im ausführungsverzeichnis von MultiMC gestartet. Verfügbare Umgebungsvariablen: INST_ID, INST_DIR, INST_NAME.</translation> + <translation>Vor-Start-Befehle werden ausgeführt, bevor die Instanz startet, Nach-Ende-Befehle nachdem die Instanz beendet wurde. Beide werden im Hauptverzeichnis von MultiMC gestartet. Verfügbare Umgebungsvariablen: INST_ID, INST_DIR, INST_NAME.</translation> + </message> + <message> + <location filename="../gui/dialogs/InstanceSettings.cpp" line="+195"/> + <source>Select a Java version</source> + <translation>Wähle eine Java-Version</translation> + </message> + <message> + <location line="+13"/> + <source>Find Java executable</source> + <translation>Java-Programm finden</translation> + </message> + <message> + <location line="+26"/> + <source>Java test success</source> + <translation>Java-Test erfolgreich abgeschlossen</translation> + </message> + <message> + <location line="+5"/> + <source>Java test failure</source> + <translation>Java-Test fehlgeschlagen</translation> + </message> + <message> + <location line="+1"/> + <source>The specified java binary didn't work. You should use the auto-detect feature, or set the path to the java executable.</source> + <translation>Das ausgewählte Java-Programm hat nicht funktioniert. Du solltest die Auto-Erkennung benutzen, oder den Pfad zum Java-Programm angeben.</translation> + </message> +</context> +<context> + <name>JavaListLoadTask</name> + <message> + <location filename="../logic/lists/JavaVersionList.cpp" line="+175"/> + <source>Detecting Java installations...</source> + <translation>Suche nach Java-Installationen...</translation> </message> </context> <context> <name>LWJGLSelectDialog</name> <message> - <location filename="../gui/lwjglselectdialog.ui" line="14"/> - <source>Dialog</source> - <translation></translation> + <location filename="../gui/dialogs/LwjglSelectDialog.ui" line="+14"/> + <source>Manage Lwjgl Versions</source> + <translation>LWJGL-Versionsverwaltung</translation> </message> <message> - <location filename="../gui/lwjglselectdialog.ui" line="20"/> + <location line="+6"/> <source>Status label...</source> <translation></translation> </message> <message> - <location filename="../gui/lwjglselectdialog.ui" line="32"/> + <location line="+12"/> <source>&Refresh</source> - <translation>Anktualisie&ren</translation> + <translation>&Aktualisieren</translation> </message> <message> - <location filename="../gui/lwjglselectdialog.cpp" line="59"/> + <location filename="../gui/dialogs/LwjglSelectDialog.cpp" line="+61"/> <source>Loading LWJGL version list...</source> <translation>Lade LWJGL-Versionsliste...</translation> </message> @@ -427,550 +959,788 @@ p, li { white-space: pre-wrap; } <context> <name>LegacyModEditDialog</name> <message> - <location filename="../gui/LegacyModEditDialog.ui" line="14"/> - <source>Dialog</source> - <translation></translation> + <location filename="../gui/dialogs/LegacyModEditDialog.ui" line="+14"/> + <source>Edit Mods</source> + <translation>Mods bearbeiten</translation> </message> <message> - <location filename="../gui/LegacyModEditDialog.ui" line="24"/> + <location line="+10"/> <source>Jar Mods</source> <translation>Jar-Mods</translation> </message> <message> - <location filename="../gui/LegacyModEditDialog.ui" line="42"/> - <location filename="../gui/LegacyModEditDialog.ui" line="108"/> - <location filename="../gui/LegacyModEditDialog.ui" line="163"/> - <location filename="../gui/LegacyModEditDialog.ui" line="221"/> + <location line="+20"/> + <location line="+77"/> + <location line="+69"/> + <location line="+70"/> <source>&Add</source> <translation>&Hinzufügen</translation> </message> <message> - <location filename="../gui/LegacyModEditDialog.ui" line="49"/> - <location filename="../gui/LegacyModEditDialog.ui" line="115"/> - <location filename="../gui/LegacyModEditDialog.ui" line="170"/> - <location filename="../gui/LegacyModEditDialog.ui" line="228"/> + <location line="-209"/> + <location line="+77"/> + <location line="+69"/> + <location line="+70"/> <source>&Remove</source> <translation>&Entfernen</translation> </message> <message> - <location filename="../gui/LegacyModEditDialog.ui" line="56"/> + <location line="-209"/> <source>MCForge</source> <translation></translation> </message> <message> - <location filename="../gui/LegacyModEditDialog.ui" line="76"/> + <location line="+20"/> <source>Move &Up</source> - <translation>&Nach Oben</translation> + <translation>Bewege &nach oben</translation> </message> <message> - <location filename="../gui/LegacyModEditDialog.ui" line="83"/> + <location line="+7"/> <source>Move &Down</source> - <translation>Nach &Unten</translation> + <translation>Bewege &nach unten</translation> </message> <message> - <location filename="../gui/LegacyModEditDialog.ui" line="93"/> + <location line="+19"/> <source>Core Mods</source> <translation>Coremods</translation> </message> <message> - <location filename="../gui/LegacyModEditDialog.ui" line="135"/> - <location filename="../gui/LegacyModEditDialog.ui" line="190"/> - <location filename="../gui/LegacyModEditDialog.ui" line="248"/> + <location line="+44"/> + <location line="+69"/> + <location line="+70"/> <source>&View Folder</source> <translation>&Ordner öffnen</translation> </message> <message> - <location filename="../gui/LegacyModEditDialog.ui" line="145"/> + <location line="-117"/> <source>Loader Mods</source> <translation>Normale Mods</translation> </message> <message> - <location filename="../gui/LegacyModEditDialog.ui" line="203"/> + <location line="+72"/> <source>Texture Packs</source> - <translation>Texturenpacks</translation> + <translation>Texturenpakete</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.cpp" line="249"/> - <location filename="../gui/LegacyModEditDialog.cpp" line="246"/> + <location filename="../gui/dialogs/OneSixModEditDialog.cpp" line="+303"/> + <location filename="../gui/dialogs/LegacyModEditDialog.cpp" line="+258"/> <source>Select Loader Mods</source> <extracomment>Title of regular mod selection dialog</extracomment> <translation>Mods auswählen</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.cpp" line="276"/> + <location line="+27"/> <source>Select Resource Packs</source> - <translation>Resourcenpacks auswählen</translation> + <translation>Ressourcenpakete auswählen</translation> </message> <message> - <location filename="../gui/LegacyModEditDialog.cpp" line="188"/> + <location filename="../gui/dialogs/LegacyModEditDialog.cpp" line="-58"/> <source>Select Core Mods</source> <extracomment>Title of core mod selection dialog</extracomment> - <translation>Coremodsauswählen</translation> + <translation>Coremods auswählen</translation> </message> <message> - <location filename="../gui/LegacyModEditDialog.cpp" line="235"/> + <location line="+10"/> + <source>Select Forge version</source> + <translation>Wähle Forge-Version</translation> + </message> + <message> + <location line="+37"/> <source>Select Jar Mods</source> <extracomment>Title of jar mod selection dialog</extracomment> <translation>Jarmods auswählen</translation> </message> <message> - <location filename="../gui/LegacyModEditDialog.cpp" line="257"/> + <location line="+22"/> <source>Select Texture Packs</source> <extracomment>Title of texture pack selection dialog</extracomment> - <translation>Texturenpacks auswählen</translation> + <translation>Texturenpakete auswählen</translation> </message> </context> <context> - <name>LoginDialog</name> + <name>LegacyUpdate</name> <message> - <location filename="../gui/logindialog.ui" line="14"/> - <source>Login</source> - <translation>Einloggen</translation> + <location filename="../logic/LegacyUpdate.cpp" line="+79"/> + <source>Downloading new LWJGL...</source> + <translation>LWJGL wird heruntergeladen...</translation> </message> <message> - <location filename="../gui/logindialog.ui" line="20"/> - <source><span style=" color:#ff0000;">Error</span></source> - <translation></translation> + <location line="+68"/> + <source>Installing new LWJGL...</source> + <translation>Neues LWJGL wird installiert...</translation> + </message> + <message> + <location line="+76"/> + <source>Installing new LWJGL - extracting </source> + <translation>Das neue LWJGL wird installiert - entpacken</translation> + </message> + <message> + <location line="+30"/> + <source>Checking for jar updates...</source> + <translation>Suche nach Jar-Änderungen...</translation> + </message> + <message> + <location line="+10"/> + <source>Downloading new minecraft.jar ...</source> + <translation>Neue minecraft.jar wird heruntergeladen...</translation> + </message> + <message> + <location line="+34"/> + <source>Installing mods: Adding </source> + <translation>Mod-Installation: Hinzufügen </translation> + </message> + <message> + <location line="+86"/> + <source>Installing mods: Backing up minecraft.jar ...</source> + <translation>Mod-Installation: Erstellen einer Sicherheitskopie von minecraft.jar...</translation> + </message> + <message> + <location line="+25"/> + <source>Installing mods: Opening minecraft.jar ...</source> + <translation>Mod-Installation: minecraft.jar wird geöffnet...</translation> + </message> + <message> + <location line="+14"/> + <source>Installing mods: Adding mod files...</source> + <translation>Mod-Installation: Mod-Dateien werden hinzugefügt...</translation> + </message> +</context> +<context> + <name>LoginDialog</name> + <message> + <source>Login</source> + <translation type="vanished">Einloggen</translation> </message> <message> - <location filename="../gui/logindialog.ui" line="29"/> <source>Username:</source> - <translation>Nutzername:</translation> + <translation type="vanished">Nutzername:</translation> </message> <message> - <location filename="../gui/logindialog.ui" line="43"/> <source>Password:</source> - <translation>Passwort:</translation> + <translation type="vanished">Passwort:</translation> </message> <message> - <location filename="../gui/logindialog.ui" line="53"/> <source>Password</source> - <translation>Passwort</translation> + <translation type="vanished">Passwort</translation> </message> <message> - <location filename="../gui/logindialog.ui" line="66"/> <source>Forget</source> - <translation>Vergessen</translation> + <translation type="vanished">Vergessen</translation> </message> <message> - <location filename="../gui/logindialog.ui" line="83"/> <source>&Remember Username?</source> - <translation>&Nutzernamen speichern?</translation> + <translation type="vanished">&Nutzernamen speichern?</translation> </message> <message> - <location filename="../gui/logindialog.ui" line="96"/> <source>R&emember Password?</source> - <translation>&Passwort speichern?</translation> + <translation type="vanished">&Passwort speichern?</translation> </message> <message> - <location filename="../gui/logindialog.cpp" line="28"/> <source>Offline Once</source> <extracomment>Use offline mode one time</extracomment> - <translation>Einmal Offline</translation> + <translation type="vanished">Einmal Offline-Modus verwenden</translation> </message> <message> - <location filename="../gui/logindialog.cpp" line="37"/> <source>Name</source> <extracomment>The username during login (placeholder)</extracomment> - <translation>Name</translation> + <translation type="vanished">Name</translation> </message> </context> <context> <name>LoginTask</name> <message> - <location filename="../logic/net/LoginTask.cpp" line="41"/> - <location filename="../logic/net/LoginTask.cpp" line="135"/> <source>Logging in...</source> - <translation>Einloggen...</translation> + <translation type="vanished">Einloggen...</translation> </message> <message> <source>Failed to parse Minecraft version string.</source> <translation type="obsolete">Konnte Minecraft-Versionsstring nicht parsen.</translation> </message> <message> - <location filename="../logic/net/LoginTask.cpp" line="124"/> <source>Invalid username or password.</source> - <translation>Falsche Kombination von Nutzernamen und Passwort.</translation> + <translation type="vanished">Falscher Nutzername oder Passwort.</translation> </message> <message> - <location filename="../logic/net/LoginTask.cpp" line="126"/> <source>Launcher outdated, please update.</source> - <translation>Veralteter Launcher, Bitte lade ein Update herunter.</translation> + <translation type="vanished">Veralteter Launcher, bitte lade ein Update herunter.</translation> </message> <message> - <location filename="../logic/net/LoginTask.cpp" line="93"/> - <location filename="../logic/net/LoginTask.cpp" line="128"/> - <location filename="../logic/net/LoginTask.cpp" line="205"/> - <location filename="../logic/net/LoginTask.cpp" line="232"/> <source>Login failed: %1</source> - <translation>Login fehlgeschlagen: %1</translation> + <translation type="vanished">Login fehlgeschlagen: %1</translation> </message> <message> - <location filename="../logic/net/LoginTask.cpp" line="77"/> - <location filename="../logic/net/LoginTask.cpp" line="189"/> <source>The login servers are currently unavailable. Check http://help.mojang.com/ for more info.</source> - <translation>Derzeit kann auf die Login-Server nicht zugegriffe werden. Für weitere Informationen siehe http://help.mojang.com/.</translation> + <translation type="vanished">Derzeit kann auf die Login-Server nicht zugegriffen werden. Für weitere Informationen siehe http://help.mojang.com/.</translation> </message> <message> - <location filename="../logic/net/LoginTask.cpp" line="82"/> - <location filename="../logic/net/LoginTask.cpp" line="194"/> <source>Login failed: Unknown HTTP error %1 occurred.</source> - <translation>Login fehlgeschlagen. Unbekannter HTTP-Fehler: %1.</translation> + <translation type="vanished">Login fehlgeschlagen. Unbekannter HTTP-Fehler: %1.</translation> </message> <message> - <location filename="../logic/net/LoginTask.cpp" line="89"/> - <location filename="../logic/net/LoginTask.cpp" line="201"/> <source>Login canceled.</source> - <translation>Login abgebrochen.</translation> + <translation type="vanished">Login abgebrochen.</translation> </message> +</context> +<context> + <name>MCModInfoFrame</name> <message> - <location filename="../logic/net/LoginTask.cpp" line="238"/> - <source>Login failed: BAD FORMAT #1</source> - <translatorcomment>Login fehlgeschlagen: UNGÜLTIGES FORMAT #1</translatorcomment> - <translation></translation> + <location filename="../gui/widgets/MCModInfoFrame.ui" line="+26"/> + <source>Frame</source> + <translation>Frame</translation> + </message> + <message> + <location line="+6"/> + <location filename="../gui/widgets/MCModInfoFrame.cpp" line="+54"/> + <source>Select a mod to view title and authors...</source> + <translation>Wähle eine Modifikation aus, um Titel und Autor(en) zu sehen...</translation> + </message> + <message> + <location line="+19"/> + <location filename="../gui/widgets/MCModInfoFrame.cpp" line="+1"/> + <source>Select a mod to view description...</source> + <translation>Wähle eine Modifikation aus, um die Beschreibung zu sehen...</translation> + </message> + <message> + <location filename="../gui/widgets/MCModInfoFrame.cpp" line="-11"/> + <source>No description provided in mcmod.info</source> + <translation>mcmod.info wurde mit keiner Beschreibung versehen</translation> + </message> +</context> +<context> + <name>MCVListLoadTask</name> + <message> + <location filename="../logic/lists/MinecraftVersionList.cpp" line="+142"/> + <source>Loading instance version list...</source> + <translation>Lade Liste von Minecraft-Versionen...</translation> </message> </context> <context> <name>MainWindow</name> <message> - <location filename="../gui/mainwindow.ui" line="14"/> + <location filename="../gui/MainWindow.ui" line="+14"/> <source>MultiMC 5</source> <translation>MultiMC 5</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="40"/> + <location line="+30"/> <source>Main Toolbar</source> <translation>Haupt-Werkzeugleiste</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="80"/> + <location line="+41"/> <source>Instance Toolbar</source> <translation>Instanz-Werkzeugleiste</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="123"/> + <location line="+40"/> + <source>News Toolbar</source> + <translation>Nachrichten-Werkzeugleiste</translation> + </message> + <message> + <location line="+34"/> <source>Add Instance</source> <translation>Instanz hinzufügen</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="126"/> - <location filename="../gui/mainwindow.ui" line="129"/> + <location line="+3"/> + <location line="+3"/> + <location line="+332"/> <source>Add a new instance.</source> <translation>Neue Instanz erstellen.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="138"/> + <location line="-323"/> <source>View Instance Folder</source> <translation>Instanzordner öffnen</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="141"/> - <location filename="../gui/mainwindow.ui" line="144"/> + <location line="+3"/> + <location line="+3"/> <source>Open the instance folder in a file browser.</source> <translation>Instanzordner im Dateimanager öffnen.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="153"/> + <location line="+9"/> <source>Refresh</source> <translation>Aktualisieren</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="156"/> - <location filename="../gui/mainwindow.ui" line="159"/> + <location line="+3"/> + <location line="+3"/> <source>Reload the instance list.</source> - <translation>Instanzliste neu Laden.</translation> + <translation>Instanzliste neuladen.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="168"/> + <location line="+9"/> <source>View Central Mods Folder</source> - <translation>Zenstralen Modordner öffnen</translation> + <translation>Zenstralen Mod-Ordner öffnen</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="171"/> - <location filename="../gui/mainwindow.ui" line="174"/> + <location line="+3"/> + <location line="+3"/> <source>Open the central mods folder in a file browser.</source> - <translation>Zentralen Modordner in einem Dateimanager öffnen.</translation> + <translation>Zentralen Mod-Ordner in einem Dateimanager öffnen.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="183"/> + <location line="+9"/> <source>Check for Updates</source> <translation>Auf Updates überprüfen</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="186"/> - <location filename="../gui/mainwindow.ui" line="189"/> + <location line="+3"/> + <location line="+3"/> <source>Check for new updates for MultiMC</source> <translation>Auf Updates für MultiMC prüfen</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="198"/> - <location filename="../gui/mainwindow.ui" line="325"/> + <location line="+9"/> + <location line="+133"/> <source>Settings</source> <translation>Einstellungen</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="201"/> - <location filename="../gui/mainwindow.ui" line="204"/> + <location line="-130"/> + <location line="+3"/> <source>Change settings.</source> <translation>Einstellungen ändern.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="216"/> + <location line="+12"/> <source>Report a Bug</source> <translation>Fehler melden</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="219"/> - <location filename="../gui/mainwindow.ui" line="222"/> + <location line="+3"/> + <location line="+3"/> <source>Open the bug tracker to report a bug with MultiMC.</source> - <translation>Fehler-Verfolgung öffnen, um einen Fehler zu melden (Bitte auf Englisch ;))</translation> + <translation>Fehler-Verfolgung öffnen, um einen Fehler zu melden (Bitte auf Englisch ;)).</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="231"/> <source>News</source> - <translation>Neuigkeiten</translation> + <translation type="vanished">Neuigkeiten</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="234"/> - <location filename="../gui/mainwindow.ui" line="237"/> <source>Open the MultiMC dev blog to read news about MultiMC.</source> - <translation>Den MultiMC Entwicklerblog öffnen und Neuigkeiten über MultiMC erfahren.</translation> + <translation type="vanished">Den MultiMC-Entwicklerblog öffnen, um Neuigkeiten über MultiMC zu erhalten.</translation> + </message> + <message> + <location line="+9"/> + <source>More News</source> + <translation>Mehr Nachrichten</translation> + </message> + <message> + <location line="+3"/> + <source>More news...</source> + <translation>Mehr Nachrichten...</translation> + </message> + <message> + <location line="+3"/> + <location line="+3"/> + <source>Open the MultiMC development blog to read more news about MultiMC.</source> + <translation>Öffne den MultiMC-Entwicklerblog, um weitere Neuigkeiten über MultiMC zu erhalten.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="246"/> - <location filename="../gui/mainwindow.ui" line="252"/> + <location line="+9"/> + <location line="+6"/> <source>About MultiMC</source> <translation>Über MultiMC</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="249"/> + <location line="-3"/> <source>View information about MultiMC.</source> <translation>Informationen über MultiMC anzeigen.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="260"/> + <location line="+11"/> <source>Play</source> <translation>Spielen</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="263"/> - <location filename="../gui/mainwindow.ui" line="266"/> + <location line="+3"/> + <location line="+3"/> <source>Launch the selected instance.</source> <translation>Die ausgewählte Instanz starten.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="271"/> + <location line="+5"/> <source>Instance Name</source> <translation>Instanzname</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="274"/> - <location filename="../gui/mainwindow.ui" line="277"/> + <location line="+3"/> + <location line="+3"/> <source>Rename the selected instance.</source> <translation>Ausgewählte Instanz umbenennen.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="282"/> + <location line="+5"/> <source>Change Group</source> <translation>Gruppe ändern</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="285"/> - <location filename="../gui/mainwindow.ui" line="288"/> + <location line="+3"/> + <location line="+3"/> <source>Change the selected instance's group.</source> <translation>Die Gruppe der ausgewählten Instanz ändern.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="300"/> + <location line="+12"/> <source>Change Icon</source> <translation>Symbol ändern</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="303"/> - <location filename="../gui/mainwindow.ui" line="306"/> + <location line="+3"/> + <location line="+3"/> <source>Change the selected instance's icon.</source> <translation>Das Symbol der ausgewählten Instanz ändern.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="311"/> + <location line="+8"/> <source>Edit Notes</source> <translation>Notizen bearbeiten</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="314"/> - <location filename="../gui/mainwindow.ui" line="317"/> + <location line="+3"/> + <location line="+3"/> <source>Edit the notes for the selected instance.</source> <translation>Notizen für die ausgewählte Instanz bearbeiten.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="328"/> - <location filename="../gui/mainwindow.ui" line="331"/> + <location line="+11"/> + <location line="+3"/> <source>Change settings for the selected instance.</source> <translation>Einstellungen für die ausgewählte Instanz bearbeiten.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="339"/> + <location line="+8"/> <source>Make Shortcut</source> <translation>Verknüpfung erstellen</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="342"/> - <location filename="../gui/mainwindow.ui" line="345"/> + <location line="+3"/> + <location line="+3"/> <source>Make a shortcut on the desktop for the selected instance.</source> <translation>Erstellt eine Verknüpfung für die ausgewählte Instanz auf dem Desktop.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="353"/> + <location line="+8"/> <source>Manage Saves</source> <translation>Speicherstände verwalten</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="356"/> - <location filename="../gui/mainwindow.ui" line="359"/> + <location line="+3"/> + <location line="+3"/> <source>Manage saves for the selected instance.</source> <translation>Die Speicherstände der ausgewählten Instanz verwalten.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="364"/> + <location line="+5"/> <source>Edit Mods</source> <translation>Mods bearbeiten</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="367"/> - <location filename="../gui/mainwindow.ui" line="370"/> + <location line="+3"/> + <location line="+3"/> <source>Edit the mods for the selected instance.</source> <translation>Die Mods der ausgewähten Instanz bearbeiten.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="378"/> + <location line="+5"/> <source>Change Version</source> <translation>Version ändern</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="381"/> - <location filename="../gui/mainwindow.ui" line="384"/> + <location line="+3"/> + <location line="+3"/> <source>Change the selected instance's Minecraft version.</source> <translation>Die Minecraftversion der ausgewählten Instanz ändern.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="392"/> + <location line="+8"/> <source>Change LWJGL</source> <translation>LWJGL ändern</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="395"/> - <location filename="../gui/mainwindow.ui" line="398"/> + <location line="+3"/> + <location line="+3"/> <source>Change the version of LWJGL for the selected instance to use.</source> <translation>Die zu benutzende Version von LWJGL für die aktuelle Instanz ändern.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="403"/> + <location line="+5"/> <source>Instance Folder</source> <translation>Instanzordner</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="406"/> - <location filename="../gui/mainwindow.ui" line="409"/> + <location line="+3"/> + <location line="+3"/> <source>Open the selected instance's root folder in a file browser.</source> - <translation>Den Wurzelordner der Aktuellen Instanz im Dateimanager öffnen.</translation> + <translation>Das Hauptverzeichnis der aktuellen Instanz im Dateimanager öffnen.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="414"/> + <location line="+5"/> <source>Delete</source> <translation>Löschen</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="417"/> - <location filename="../gui/mainwindow.ui" line="420"/> + <location line="+3"/> + <location line="+3"/> <source>Delete the selected instance.</source> <translation>Ausgewählte Instanz löschen.</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="425"/> + <location line="+5"/> <source>Config Folder</source> - <translation>Konfig-ordner</translation> + <translation>Konfig-Ordner</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="428"/> + <location line="+3"/> <source>Open the instance's config folder</source> <translation>Den Konfigurationsordner im Dateimanager anzeigen</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="440"/> + <location line="+12"/> <source>Meow</source> <translation>Miau</translation> </message> <message> - <location filename="../gui/mainwindow.ui" line="443"/> + <location line="+3"/> <source><html><head/><body><p align="center"><span style=" font-weight:600; color:#ff0004;">Catnarok!</span></p><p align="center">Or just a cat with a ball of yarn?</p><p align="center"><span style=" font-style:italic;">WHO KNOWS?!</span></p><p align="center"><img src=":/icons/instances/tnt"/></p></body></html></source> <translation></translation> </message> <message> + <location line="+9"/> + <source>Copy Instance</source> + <translation>Kopiere Instanz</translation> + </message> + <message> + <location line="+3"/> + <source>Copy the selected instance.</source> + <translation>Kopiere die ausgewählte Instanz.</translation> + </message> + <message> + <location line="+8"/> + <location filename="../gui/MainWindow.cpp" line="+201"/> + <source>Manage Accounts</source> + <translation>Verwalte Konten</translation> + </message> + <message> + <location line="+3"/> + <source>Manage your Mojang or Minecraft accounts.</source> + <translation>Verwalte deine Mojang- und Minecraft-Konten.</translation> + </message> + <message> <source><html><head/><body><p align="center"><span style=" font-weight:600; color:#ff0004;">Catnatok!</span></p><p align="center">Or just a cat with a ball of yarn?</p><p align="center"><span style=" font-style:italic;">WHO KNOWS?!</span></p><p align="center"><img src=":/icons/instances/tnt"/></p></body></html></source> <translation type="obsolete"><html><head/><body><p align="center"><span style=" font-weight:600; color:#ff0004;">Catnatok!</span></p><p align="center">Or just a cat with a ball of yarn?</p><p align="center"><span style=" font-style:italic;">WHO KNOWS?!</span></p><p align="center"><img src=":/icons/instances/tnt"/></p></body></html></translation> </message> <message> - <location filename="../gui/mainwindow.cpp" line="313"/> + <location filename="../gui/MainWindow.cpp" line="-9"/> + <source>No instance selected</source> + <translation>Keine Instanz ausgewählt</translation> + </message> + <message> + <location line="+17"/> + <source>Accounts</source> + <translation>Konten</translation> + </message> + <message> + <location line="+67"/> + <source>No update found.</source> + <translation>Keine neue Version gefunden.</translation> + </message> + <message> + <location line="+1"/> + <source>No MultiMC update was found! +You are using the latest version.</source> + <translation>Es wurde kein Update für MultiMC gefunden! +Du verwendest bereits die neueste Version.</translation> + </message> + <message> + <location line="+52"/> + <source>No accounts added!</source> + <translation>Keine Konten angegeben!</translation> + </message> + <message> + <location line="+37"/> + <source>No Default Account</source> + <translation>Kein voreingestelltes Konto</translation> + </message> + <message> + <location line="+95"/> + <source>Loading news...</source> + <translation>Nachrichten werden geladen...</translation> + </message> + <message> + <location line="+13"/> + <source>No news available.</source> + <translation>Keine Nachrichten verfügbar.</translation> + </message> + <message> + <location line="+105"/> + <location line="+7"/> + <location line="+7"/> + <location line="+12"/> + <location line="+8"/> + <location line="+37"/> + <location line="+7"/> + <location line="+7"/> + <location line="+436"/> + <source>Error</source> + <translation>Fehler</translation> + </message> + <message> + <location line="-486"/> + <location line="+487"/> + <source>MultiMC cannot download Minecraft or update instances unless you have at least one account added. +Please add your Mojang or Minecraft account.</source> + <translation>MultiMC kann Minecraft nicht herunterladen und keine Instanzen aktualisieren, solange du kein Konto erstellt hast. +Bitte füge dein Mojang- oder Minecraft-Konto hinzu.</translation> + </message> + <message> + <location line="-390"/> <source>Group name</source> <translation>Gruppenname</translation> </message> <message> - <location filename="../gui/mainwindow.cpp" line="313"/> + <location line="+0"/> <source>Enter a new group name.</source> <translation>Neuen Gruppennamen eingeben.</translation> </message> <message> - <location filename="../gui/mainwindow.cpp" line="398"/> + <location line="+91"/> + <source>CAREFUL</source> + <translation>ACHTUNG</translation> + </message> + <message> + <location line="+0"/> + <source>This is permanent! Are you sure? +About to delete: </source> + <translation>Die Änderung ist dauerhaft! Bist du dir sicher? +Die folgende Instanz löschen:</translation> + </message> + <message> + <location line="+17"/> <source>Instance name</source> <translation>Instanzname</translation> </message> <message> - <location filename="../gui/mainwindow.cpp" line="398"/> + <location line="+0"/> <source>Enter a new instance name.</source> <translation>Neuen Instanznamen eingeben.</translation> </message> <message> - <location filename="../gui/mainwindow.cpp" line="580"/> + <location line="+89"/> + <source>No Accounts</source> + <translation>Keine Konten</translation> + </message> + <message> + <location line="+1"/> + <source>In order to play Minecraft, you must have at least one Mojang or Minecraft account logged in to MultiMC.Would you like to open the account manager to add an account now?</source> + <translation>Um Minecraft spielen zu können, musst du mindestens ein Mojang- oder Minecraft-Konto in MultiMC hinterlegen. Möchtest du die Kontoverwaltung öffnen, um ein Konto hinzuzufügen?</translation> + </message> + <message> + <location line="+14"/> + <source>Which account would you like to use?</source> + <translation>Welches Konto möchtest du benutzen?</translation> + </message> + <message> + <location line="+17"/> + <source>Your account is currently not logged in. Please enter your password to log in again.</source> + <translation>Dein Konto ist momentan nicht angemeldet. Bitte gib dein Passwort an, um dich anzumelden.</translation> + </message> + <message> + <location line="+7"/> + <source>Play Offline</source> + <translation>Offline spielen</translation> + </message> + <message> + <location line="+90"/> + <source>Error updating instance</source> + <translation>Fehler beim Aktualisieren der Instanz</translation> + </message> + <message> + <location line="+30"/> <source>MultiMC Shortcut</source> <translation>MultiMC-Verknüpfung</translation> </message> <message> - <location filename="../gui/mainwindow.cpp" line="580"/> + <location line="+0"/> <source>Enter a Shortcut Name.</source> <translation>Verknüpfungsnamen eingeben.</translation> </message> <message> - <location filename="../gui/mainwindow.cpp" line="588"/> + <location line="+8"/> <source>Not useful</source> <translation>Sinnlos</translation> </message> <message> - <location filename="../gui/mainwindow.cpp" line="589"/> + <location line="+1"/> <source>A Dummy Shortcut was created. it will not do anything productive</source> <translation>Eine Dummy-Verknüpfung wurde erstellt. Sie wird jedoch absolut nichts bewirken</translation> </message> <message> - <location filename="../gui/mainwindow.cpp" line="665"/> + <location line="+16"/> + <source>Change Minecraft version</source> + <translation>Minecraft-Version ändern</translation> + </message> + <message> + <location line="+18"/> + <source>Are you sure?</source> + <translation>Bist du sicher?</translation> + </message> + <message> + <location line="+1"/> + <source>This will remove any library/version customization you did previously. This includes things like Forge install and similar.</source> + <translation>Dies wird sämtliche Bibliotheken-/Versions-Anpassungen, die du vorgenommen hast, entfernen. Dies schließt Dinge wie Forge mit ein.</translation> + </message> + <message> + <location line="+40"/> + <source>Instance settings</source> + <translation>Instanzeinstellungen</translation> + </message> + <message> + <location line="+38"/> <source>Rename Instance</source> <translation>Instanz umbenennen</translation> </message> + <message> + <location line="+77"/> + <source>Select a Java version</source> + <translation>Wähle eine Java-Version</translation> + </message> + <message> + <location line="+10"/> + <source>Invalid version selected</source> + <translation>Ungültige Version ausgewählt</translation> + </message> + <message> + <location line="+1"/> + <source>You didn't select a valid Java version, so MultiMC will select the default. You can change this in the settings dialog.</source> + <translation>Du hast keine gültige Java-Version ausgewählt, daher wird MultiMC die Voreinstellung benutzen. Du kannst dies in den Einstellungen ändern.</translation> + </message> </context> <context> <name>MinecraftProcess</name> <message> - <location filename="../logic/MinecraftProcess.cpp" line="123"/> + <location filename="../logic/MinecraftProcess.cpp" line="+139"/> <source>Minecraft exited with exitcode %1.</source> <extracomment>Message displayed on instance exit</extracomment> - <translation>Minecraft wurde mit exitcode %1 beendet.</translation> + <translation>Minecraft wurde mit Status %1 beendet.</translation> + </message> + <message> + <location line="+5"/> + <source>Minecraft crashed with exitcode %1.</source> + <extracomment>Message displayed on instance crashed</extracomment> + <translation>Minecraft ist mit dem Status %1 abgestürzt</translation> </message> <message> - <location filename="../logic/MinecraftProcess.cpp" line="126"/> + <location line="+6"/> <source>Minecraft was killed by user.</source> <extracomment>Message displayed after the instance exits due to kill request</extracomment> - <translation>Minecraft wurde durch den nutzer gekillt.</translation> + <translation>Minecraft wurde durch den Nutzer getötet.</translation> </message> <message> - <location filename="../logic/MinecraftProcess.cpp" line="175"/> + <location line="+52"/> <source>Could not launch minecraft!</source> <extracomment>Error message displayed if instace can't start</extracomment> <translation>Konnte Minecraft nicht starten!</translation> @@ -980,15 +1750,15 @@ p, li { white-space: pre-wrap; } <name>MultiMC</name> <message> <source>display this help and exit.</source> - <translation type="obsolete">Zeigt diese Hilfe und beended das Programm.</translation> + <translation type="obsolete">Zeigt diese Hilfe und beendet das Programm.</translation> </message> <message> <source>display program version and exit.</source> - <translation type="obsolete">Zeigt die programmversion an und beendet das Programm.</translation> + <translation type="obsolete">Zeigt die Programmversion an und beendet das Programm.</translation> </message> <message> <source>use the supplied directory as MultiMC root instead of the binary location (use '.' for current)</source> - <translation type="obsolete">Benutze das angegebene Verzeichnis als Arbeitsverzeichnis anstelle des speicherorts. (Benutze '.' um das aktuele Verzeichnis zu verwenden)</translation> + <translation type="obsolete">Benutze das angegebene Verzeichnis als Hauptverzeichnis anstelle des Speicherorts. (Benutze '.', um das aktuelle Verzeichnis zu verwenden)</translation> </message> <message> <source>replaces the given file with the running executable</source> @@ -996,27 +1766,27 @@ p, li { white-space: pre-wrap; } </message> <message> <source><path></source> - <translation type="obsolete"><pfad></translation> + <translation type="obsolete"><Pfad></translation> </message> <message> <source>doesn't restart MultiMC after installing updates</source> - <translation type="obsolete">MultiMC nach dem Update nicht neu starten</translation> + <translation type="obsolete">MultiMC nach dem Update nicht neustarten</translation> </message> <message> <source>tries to launch the given instance</source> - <translation type="obsolete">Versucht die angegebene Instanz zu starten</translation> + <translation type="obsolete">Versucht, die angegebene Instanz zu starten</translation> </message> <message> <source><inst></source> - <translation type="obsolete"><instanz></translation> + <translation type="obsolete"><Instanz></translation> </message> <message> <source>CommandLineError: </source> - <translation type="obsolete">KommandoZeilenFehler:</translation> + <translation type="obsolete">Kommandozeilenfehler:</translation> </message> <message> <source>Try '%1 -h' to get help on MultiMC's command line parameters.</source> - <translation type="obsolete">Versuche '%1 -h' um Hilfe zu MultiMCs Kommandozeilenparametern zu bekommen.</translation> + <translation type="obsolete">Versuche '%1 -h', um Hilfe zu MultiMCs Kommandozeilenparametern zu bekommen.</translation> </message> <message> <source>Performing MultiMC update: </source> @@ -1030,362 +1800,632 @@ p, li { white-space: pre-wrap; } <context> <name>NewInstanceDialog</name> <message> - <location filename="../gui/newinstancedialog.ui" line="17"/> + <location filename="../gui/dialogs/NewInstanceDialog.ui" line="+17"/> <source>New Instance</source> <translation>Neue Instanz</translation> </message> <message> - <location filename="../gui/newinstancedialog.ui" line="74"/> + <location line="+57"/> <source>Name</source> <translation>Name</translation> </message> <message> - <location filename="../gui/newinstancedialog.ui" line="90"/> + <location line="+16"/> <source>Version:</source> <translation>Version:</translation> </message> <message> - <location filename="../gui/newinstancedialog.ui" line="104"/> + <location line="+14"/> <source>...</source> <translation>...</translation> </message> + <message> + <location filename="../gui/dialogs/NewInstanceDialog.cpp" line="+99"/> + <source>Change Minecraft version</source> + <translation>Ändere die Minecraft-Version...</translation> + </message> +</context> +<context> + <name>NewsEntry</name> + <message> + <location filename="../logic/news/NewsEntry.cpp" line="+24"/> + <location line="+36"/> + <source>Untitled</source> + <translation>Unbennant</translation> + </message> + <message> + <location line="-35"/> + <location line="+36"/> + <source>No content.</source> + <translation>Kein Eintrag.</translation> + </message> + <message> + <location line="-34"/> + <location line="+36"/> + <source>Unknown Author</source> + <translation>Unbekannter Autor</translation> + </message> +</context> +<context> + <name>OneSixFTBInstanceForge</name> + <message> + <location filename="../logic/OneSixFTBInstance.cpp" line="+37"/> + <source>Downloading Forge...</source> + <translation>Forge wird heruntergeladen...</translation> + </message> + <message> + <location line="+18"/> + <source>Installing Forge...</source> + <translation>Forge wird installiert...</translation> + </message> + <message> + <location line="+5"/> + <source>Couldn't load the version config</source> + <translation>Fehlschlag beim Laden der Versions-Konfiguration</translation> + </message> + <message> + <location line="+8"/> + <source>Couldn't install Forge</source> + <translation>Fehler beim Installieren von Forge</translation> + </message> </context> <context> <name>OneSixModEditDialog</name> <message> - <location filename="../gui/OneSixModEditDialog.ui" line="14"/> <source>Dialog</source> <translatorcomment>Am i really responsible for this?</translatorcomment> - <translation>Edit Mods</translation> + <translation type="vanished">Edit Mods</translation> </message> <message> <source>Library</source> <translation type="obsolete">Bibliothek</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.ui" line="158"/> + <location filename="../gui/dialogs/OneSixModEditDialog.ui" line="+179"/> <source>Loader Mods</source> <translation>Mods</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.ui" line="122"/> - <location filename="../gui/OneSixModEditDialog.ui" line="176"/> - <location filename="../gui/OneSixModEditDialog.ui" line="231"/> + <location line="-50"/> + <location line="+80"/> + <location line="+67"/> <source>&Add</source> <translation>&Hinzufügen</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.ui" line="33"/> + <location line="-262"/> + <source>Manage Mods</source> + <translation>Verwalte Mods</translation> + </message> + <message> + <location line="+19"/> <source>Version</source> <translation>Version</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.ui" line="53"/> + <location line="+20"/> <source>Main Class:</source> <translation>Hauptklasse:</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.ui" line="73"/> + <location line="+20"/> <source>Replace any current custom version with Minecraft Forge</source> <translation>Die aktuelle benutzerdefinierte Version mit Minecraft Forge ersetzen</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.ui" line="76"/> + <location line="+3"/> <source>Install Forge</source> - <translation>Forge Installieren</translation> + <translation>Forge installieren</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.ui" line="83"/> + <location line="+7"/> + <source>Install LiteLoader</source> + <translation>Installiere LiteLoader</translation> + </message> + <message> + <location line="+7"/> <source>Create an customized copy of the base version</source> - <translation>Eine modifizierbare Kopie der Version erstellen</translation> + <translation>Eine modifizierte Kopie der Version erstellen</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.ui" line="86"/> + <location line="+3"/> <source>Customize</source> <translation>Benutzerdefiniert</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.ui" line="96"/> + <location line="+10"/> <source>Revert to original base version</source> <translation>Benutzerdefinierte Einstellungen zurücksetzen</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.ui" line="99"/> + <location line="+3"/> <source>Revert</source> <translation>Zurücksetzen</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.ui" line="119"/> + <location line="+20"/> <source>Add new libraries</source> - <translation></translation> + <translation>Füge neue Bibliotheken hinzu</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.ui" line="132"/> + <location line="+13"/> <source>Remove selected libraries</source> - <translation></translation> + <translation>Entferne ausgewählte Bibliotheken</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.ui" line="135"/> - <location filename="../gui/OneSixModEditDialog.ui" line="183"/> - <location filename="../gui/OneSixModEditDialog.ui" line="238"/> + <location line="+3"/> + <location line="+74"/> + <location line="+67"/> <source>&Remove</source> <translation>&Entfernen</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.ui" line="203"/> - <location filename="../gui/OneSixModEditDialog.ui" line="258"/> + <location line="-127"/> + <source>Open custom.json</source> + <translation>Öffne custom.json</translation> + </message> + <message> + <location line="+80"/> + <location line="+67"/> <source>&View Folder</source> <translation>&Ordner öffnen</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.ui" line="213"/> + <location line="-45"/> <source>Resource Packs</source> - <translation>Resourcenpacks</translation> + <translation>Ressourcenpakete</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.cpp" line="108"/> - <location filename="../gui/OneSixModEditDialog.cpp" line="131"/> + <location filename="../gui/dialogs/OneSixModEditDialog.cpp" line="-205"/> + <location line="+34"/> <source>Revert?</source> <translation>Zurücksetzen?</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.cpp" line="108"/> + <location line="-34"/> <source>Do you want to revert the version of this instance to its original configuration?</source> <translation>Möchtest du wirklich die Version dieser Instanz zurücksetzen?</translation> </message> <message> - <location filename="../gui/OneSixModEditDialog.cpp" line="132"/> + <location line="+20"/> + <source>Error</source> + <translation>Fehler</translation> + </message> + <message> + <location line="+0"/> + <source>Unable to open custom.json, check the settings</source> + <translation>Fehler beim Öffnen der custom.json-Datei, überprüfe deine Einstellungen</translation> + </message> + <message> + <location line="+7"/> + <source>Select Forge version</source> + <translation>Wähle Forge-Version</translation> + </message> + <message> + <location line="+8"/> <source>This will revert any changes you did to the version up to this point. Is that OK?</source> - <translation>Dies wird alle Änderungen, die du vorgenommen hast zurücksetzen. Bist du damit einverstanden?</translation> + <translation>Dies wird alle Änderungen, die du vorgenommen hast, zurücksetzen. Bist du damit einverstanden?</translation> + </message> + <message> + <location line="+69"/> + <location line="+15"/> + <source>LiteLoader</source> + <translation>LiteLoader</translation> + </message> + <message> + <location line="-14"/> + <source>There is no information available on how to install LiteLoader into this version of Minecraft</source> + <translation>Es gibt momentan keine Informationen zur Installation von LiteLoader für diese Version von Minecraft</translation> + </message> + <message> + <location line="+15"/> + <source>For reasons unknown, the LiteLoader installation failed. Check your MultiMC log files for details.</source> + <translation>Aus unbekannten Gründen ist die Installation von LiteLoader fehlgeschlagen. Sieh dir die MultiMC-Logdateien an, um weitere Details zu erhalten.</translation> + </message> +</context> +<context> + <name>OneSixUpdate</name> + <message> + <location filename="../logic/OneSixUpdate.cpp" line="+60"/> + <location line="+32"/> + <source>Testing the Java installation...</source> + <translation>Java-Installation wird getestet...</translation> + </message> + <message> + <location line="+39"/> + <source>Getting the version files from Mojang...</source> + <translation>Versionsdateien von Mojang werden heruntergeladen...</translation> + </message> + <message> + <location line="+68"/> + <source>Updating assets index...</source> + <translation>Datenindex wird aktualisiert...</translation> + </message> + <message> + <location line="+51"/> + <source>Getting the assets files from Mojang...</source> + <translation>Daten werden von Mojang geholt...</translation> + </message> + <message> + <location line="+34"/> + <source>Getting the library files from Mojang...</source> + <translation>Bibliotheken werden von Mojang geholt...</translation> + </message> + <message> + <location line="+88"/> + <source>Preparing for launch...</source> + <translation>Start wird vorbereitet...</translation> </message> </context> <context> <name>ProgressDialog</name> <message> - <location filename="../gui/ProgressDialog.ui" line="26"/> + <location filename="../gui/dialogs/ProgressDialog.ui" line="+26"/> <source>Please wait...</source> <translation>Bitte warten...</translation> </message> <message> - <location filename="../gui/ProgressDialog.ui" line="32"/> + <location line="+6"/> <source>Task Status...</source> <translation>Aufgabenstatus...</translation> </message> + <message> + <location line="+26"/> + <source>Skip</source> + <translation>Überspringen</translation> + </message> +</context> +<context> + <name>QObject</name> + <message> + <location filename="../logic/NagUtils.cpp" line="+26"/> + <source>JVM arguments warning</source> + <translation>JVM-Argument-Warnung</translation> + </message> + <message> + <location line="+1"/> + <source>You tried to manually set a JVM memory option (using "-XX:PermSize", "-Xmx" or "-Xms") - there are dedicated boxes for these in the settings (Java tab, in the Memory group at the top). +Your manual settings will be overridden by the dedicated options. +This message will be displayed until you remove them from the JVM arguments.</source> + <translation>Du hast versucht, eine JVM-Arbeitsspeicheroption manuell anzugeben ("-XX:PermSize", "-Xmx" oder "-Xms") - es gibt hierfür vorgesehene Felder in den Einstellungen (Java-Reiter, im Arbeitsspeicher-Bereich oben). +Deine manuellen Einstellungen werden von den vorgesehenen überschrieben. +Diese Mitteilung wird so lange angezeigt, bis du die Option entfernt hast.</translation> + </message> + <message> + <location filename="../gui/dialogs/ModEditDialogCommon.cpp" line="+53"/> + <source>How sad!</source> + <translation>Wie schade!</translation> + </message> + <message> + <location line="+1"/> + <source>The mod author didn't provide a website link for this mod.</source> + <translation>Der Autor der Modifikation hat keine URL hinterlegt.</translation> + </message> +</context> +<context> + <name>RefreshTask</name> + <message> + <location filename="../logic/auth/flows/RefreshTask.cpp" line="+148"/> + <source>Refreshing login token...</source> + <translation>Erneuerung des Login-Tokens...</translation> + </message> + <message> + <location line="+2"/> + <source>Refreshing login token: Processing response...</source> + <translation>Erneuerung des Login-Tokens: Verarbeite Antwort...</translation> + </message> </context> <context> <name>SettingsDialog</name> <message> - <location filename="../gui/settingsdialog.ui" line="20"/> + <location filename="../gui/dialogs/SettingsDialog.ui" line="+20"/> <source>Settings</source> <translation>Einstellungen</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="40"/> + <location line="+20"/> <source>General</source> - <translation>Generell</translation> + <translation>Allgemein</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="49"/> + <location line="+9"/> <source>Sorting Mode</source> <translation>Sortiermodus</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="55"/> + <location line="+6"/> <source>By last launched</source> <translation>Nach letzem Start</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="65"/> + <location line="+10"/> <source>By name</source> <translation>Nach Namen</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="78"/> + <location line="+13"/> <source>Update Settings</source> <translation>Updateeinstellungen</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="84"/> + <location line="+6"/> <source>Use development builds?</source> - <translation>Entwicklerversionen benutzen?</translation> + <translation>Entwicklungsversionen benutzen?</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="91"/> + <location line="+7"/> <source>Check for updates when MultiMC starts?</source> <translation>Beim Start nach Updates suchen?</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="101"/> + <location line="+97"/> <source>Folders</source> <translation>Ordner</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="107"/> + <location line="+6"/> <source>Instances:</source> <translation>Instanzen:</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="117"/> - <location filename="../gui/settingsdialog.ui" line="134"/> - <location filename="../gui/settingsdialog.ui" line="151"/> + <location line="-69"/> + <location line="+46"/> + <location line="+33"/> + <location line="+20"/> + <location line="+14"/> + <location line="+17"/> + <location line="+26"/> + <location line="+289"/> <source>...</source> <translation>...</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="124"/> + <location line="-469"/> + <source>FTB</source> + <translation>FTB</translation> + </message> + <message> + <location line="+31"/> + <source>Launcher:</source> + <translation>Launcher:</translation> + </message> + <message> + <location line="+14"/> + <source>Track FTB instances</source> + <translation>FTB-Instanzen beobachten</translation> + </message> + <message> + <location line="+32"/> + <source>Files:</source> + <translation>Dateien:</translation> + </message> + <message> + <location line="+33"/> <source>Mods:</source> <translation>Mods:</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="141"/> + <location line="+20"/> <source>LWJGL:</source> <translation>LWJGL:</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="175"/> + <location line="+17"/> + <source>Icons:</source> + <translation>Symbole:</translation> + </message> + <message> + <location line="+17"/> + <source>External Editors (leave empty for system default)</source> + <translation>Externe Editor-Anwendungen (leer lassen, um die System-Voreinstellung zu benutzen)</translation> + </message> + <message> + <location line="+9"/> + <source>JSON Editor:</source> + <translation>JSON-Editor:</translation> + </message> + <message> + <location line="+31"/> <source>Minecraft</source> <translation>Minecraft</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="181"/> + <location line="+6"/> <source>Window Size</source> <translation>Fenstergröße</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="187"/> + <location line="+6"/> <source>Start Minecraft maximized?</source> <translation>Minecraft maximiert starten?</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="196"/> + <location line="+9"/> <source>Window height:</source> <translation>Fensterhöhe:</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="203"/> + <location line="+7"/> <source>Window width:</source> <translation>Fensterbreite:</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="244"/> + <location line="+41"/> <source>Console Settings</source> <translation>Konsoleneinstellungen</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="250"/> + <location line="+6"/> <source>Show console while the game is running?</source> - <translation>Konsole anzeigen wenn das Spiel läuft?</translation> + <translation>Konsole anzeigen, während das Spiel läuft?</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="257"/> + <location line="+7"/> <source>Automatically close console when the game quits?</source> <translation>Konsole automatisch schließen, nachdem das Spiel beendet wurde?</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="267"/> <source>Login automatically when an instance icon is double clicked?</source> - <translation>Automatisch einloggen, wenn das Instanzsymbol doppelt gecklickt wurde?</translation> + <translation type="vanished">Automatisch einloggen, wenn das Instanzsymbol doppelt geklickt wurde?</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="288"/> + <location line="+24"/> <source>Java</source> <translation>Java</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="294"/> + <location line="+6"/> <source>Memory</source> <translation>Arbeitsspeicher</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="316"/> + <location line="+22"/> <source>Minimum memory allocation:</source> <translation>Min. Arbeitspeicher:</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="323"/> + <location line="+7"/> <source>Maximum memory allocation:</source> <translation>Max. Arbeitspeicher:</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="346"/> + <location line="+23"/> <source>PermGen:</source> <translation>PermGen:</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="372"/> + <location line="+26"/> <source>Java Settings</source> <translation>Java-Einstellungen</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="378"/> + <location line="+12"/> <source>Java path:</source> <translation>Java-Pfad:</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="385"/> + <location line="+13"/> + <source>Auto-detect...</source> + <translation>Auto-Erkennung:</translation> + </message> + <message> + <location line="+13"/> + <source>Test</source> + <translation>Test</translation> + </message> + <message> + <location line="+13"/> <source>JVM arguments:</source> <translation>JVM-Argumente:</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="398"/> <source>Browse...</source> - <translation>Durchsuchen...</translation> + <translation type="vanished">Durchsuchen...</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="417"/> <source>Auto-detect</source> - <translation>Automatisch erkennen</translation> + <translation type="vanished">Automatisch erkennen</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="427"/> + <location line="+39"/> <source>Custom Commands</source> <translation>Eigene Befehle</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="433"/> + <location line="+6"/> <source>Post-exit command:</source> - <translation>Nach-abschluss-Befehl:</translation> + <translation>Nach-Abschluss-Befehl:</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="440"/> + <location line="+7"/> <source>Pre-launch command:</source> <translation>Vor-Start-Befehl:</translation> </message> <message> - <location filename="../gui/settingsdialog.ui" line="462"/> + <location line="+22"/> <source>Pre-launch command runs before the instance launches and post-exit command runs after it exits. Both will be run in MultiMC's working directory with INST_ID, INST_DIR, and INST_NAME as environment variables.</source> - <translation>Vor-Start wird ausgeführt, bevor die Instanz startet, Nach-Ende nachdem die Instanz beendet wurde. Beide werden Im ausführungsverzeichnis von MultiMC gestartet. Verfügbare Umgebungsvariablen: INST_ID, INST_DIR, INST_NAME.</translation> + <translation>Der Vor-Start-Befehl wird ausgeführt, bevor die Instanz startet, der Nach-Ende-Befehl, nachdem die Instanz beendet wurde. Beide werden im Hauptverzeichnis von MultiMC gestartet. Verfügbare Umgebungsvariablen: INST_ID, INST_DIR, INST_NAME.</translation> </message> <message> - <location filename="../gui/settingsdialog.cpp" line="53"/> + <location filename="../gui/dialogs/SettingsDialog.cpp" line="+77"/> + <source>FTB Launcher Directory</source> + <translation>FTB-Launcher-Ordner</translation> + </message> + <message> + <location line="+13"/> + <source>FTB Directory</source> + <translation>FTB-Ordner</translation> + </message> + <message> + <location line="+13"/> <source>Instance Directory</source> <translation>Instanz-Ordner</translation> </message> <message> - <location filename="../gui/settingsdialog.cpp" line="61"/> + <location line="+12"/> + <source>Icons Directory</source> + <translation>Symbolordner</translation> + </message> + <message> + <location line="+13"/> <source>Mods Directory</source> <translation>Modordner</translation> </message> <message> - <location filename="../gui/settingsdialog.cpp" line="69"/> + <location line="+13"/> <source>LWJGL Directory</source> <translation>LWJGL-Ordner</translation> </message> <message> - <location filename="../gui/settingsdialog.cpp" line="103"/> + <location line="+14"/> + <source>JSON Editor</source> + <translation>JSON-Editor</translation> + </message> + <message> + <location line="+23"/> + <source>Invalid</source> + <translation>Ungültig</translation> + </message> + <message> + <location line="+0"/> + <source>The file chosen does not seem to be an executable</source> + <translation>Die ausgewählte Datei scheint keine Anwendung zu sein</translation> + </message> + <message> + <location line="+34"/> <source>Development builds</source> - <translation>Entwicklerversionen</translation> + <translation>Entwicklungsversionen</translation> </message> <message> - <location filename="../gui/settingsdialog.cpp" line="104"/> + <location line="+1"/> <source>Development builds contain experimental features and may be unstable. Are you sure you want to enable them?</source> - <translation>Entwicklerversionen enthalten experimentelle Features und können instabil sein. Möchtest du sie dennoch aktivieren?</translation> + <translation>Entwicklungsversionen enthalten experimentelle Features und können instabil sein. Möchtest du sie dennoch aktivieren?</translation> </message> <message> - <location filename="../gui/settingsdialog.cpp" line="195"/> + <location line="+132"/> + <source>Select a Java version</source> + <translation>Wähle eine Java-Version</translation> + </message> + <message> + <location line="+13"/> <source>Find Java executable</source> <translatorcomment>Umm... this translation is a bit meh</translatorcomment> - <translation type="unfinished">Java-Anwendung finden</translation> + <translation>Java-Anwendung finden</translation> + </message> + <message> + <location line="+27"/> + <source>Java test success</source> + <translation>Java-Test erfolgreich abgeschlossen</translation> + </message> + <message> + <location line="+5"/> + <source>Java test failure</source> + <translation>Java-Test fehlgeschlagen</translation> + </message> + <message> + <location line="+1"/> + <source>The specified java binary didn't work. You should use the auto-detect feature, or set the path to the java executable.</source> + <translation>Das ausgewählte Java-Program hat nicht funktioniert. Du solltest die Auto-Erkennung benutzen oder den Pfad zum Java-Programm angeben.</translation> </message> </context> <context> @@ -1400,11 +2440,51 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>UpdateDialog</name> + <message> + <location filename="../gui/dialogs/UpdateDialog.ui" line="+14"/> + <source>MultiMC Update</source> + <translation>Neue MultiMC-Version</translation> + </message> + <message> + <location line="+10"/> + <source>A new MultiMC update is available!</source> + <translation>Eine neue Version von MultiMC ist verfügbar!</translation> + </message> + <message> + <location line="+16"/> + <source>Update now</source> + <translation>Jetzt herunterladen</translation> + </message> + <message> + <location line="+7"/> + <source>Update after MultiMC closes</source> + <translation>Herunterladen, wenn MultiMC geschlossen wird</translation> + </message> + <message> + <location line="+13"/> + <source>Don't update yet</source> + <translation>Noch nicht herunterladen</translation> + </message> +</context> +<context> + <name>ValidateTask</name> + <message> + <location filename="../logic/auth/flows/ValidateTask.cpp" line="+58"/> + <source>Validating access token: Sending request...</source> + <translation>Validiere Zugriffstoken: Sende Anfrage...</translation> + </message> + <message> + <location line="+2"/> + <source>Validating access token: Processing response...</source> + <translation>Validiere Zugriffstoken: Bearbeite Antwort...</translation> + </message> +</context> +<context> <name>VersionSelectDialog</name> <message> - <location filename="../gui/versionselectdialog.ui" line="14"/> <source>Dialog</source> - <translation>Dialog</translation> + <translation type="vanished">Dialog</translation> </message> <message> <source>Show &snapshots?</source> @@ -1412,17 +2492,65 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Show &Nostalgia?</source> - <translation type="obsolete">'&Nostalgia'-Versionen anzeigen?</translation> + <translation type="obsolete">'&Nostalgie'-Versionen anzeigen?</translation> </message> <message> - <location filename="../gui/versionselectdialog.ui" line="47"/> + <location filename="../gui/dialogs/VersionSelectDialog.ui" line="+14"/> + <source>Choose Version</source> + <translation>Wähle Version</translation> + </message> + <message> + <location line="+33"/> <source>Reloads the version list.</source> <translation>Instanzliste aktualisieren.</translation> </message> <message> - <location filename="../gui/versionselectdialog.ui" line="50"/> + <location line="+3"/> <source>&Refresh</source> <translation>&Aktualisieren</translation> </message> </context> +<context> + <name>YggdrasilTask</name> + <message> + <location filename="../logic/auth/YggdrasilTask.cpp" line="+98"/> + <source><b>SSL Handshake failed.</b><br/>There might be a few causes for it:<br/><ul><li>You use Windows XP and need to <a href="http://www.microsoft.com/en-us/download/details.aspx?id=38918">update your root certificates</a></li><li>Some device on your network is interfering with SSL traffic. In that case, you have bigger worries than Minecraft not starting.</li><li>Possibly something else. Check the MultiMC log file for details</li></ul></source> + <translation><b>SSL-Handshake fehlgeschlagen.</b><br/>Es kann mehrere Erklärungen geben:<br/><ul><li>Du benutzt Windows XP und musst <a href="http://www.microsoft.com/en-us/download/details.aspx?id=38918">dein Stammzertifikat aktualisieren</a></li><li>Ein Gerät in deinem Netzwerk mischt sich in den SSL-Verkehr ein. In diesem Fall hast du größere Probleme, als das, dass Minecraft nicht gestartet werden kann.</li><li>Möglicherweise etwas anderes. Prüfe die MultiMC-Logdatei für Details</li></ul></translation> + </message> + <message> + <location line="+47"/> + <source>An unknown error occurred when processing the response from the authentication server.</source> + <translation>Ein unbekannter Fehler ist beim Bearbeiten der Antwort des Authentifizierungs-Servers aufgetreten.</translation> + </message> + <message> + <location line="+5"/> + <source>Failed to parse Yggdrasil JSON response: %1 at offset %2.</source> + <translation>Fehler beim Bearbeiten der Yggdrasil-JSON-Antwort: %1 bei %2.</translation> + </message> + <message> + <location line="+26"/> + <source>An unknown error occurred when trying to communicate with the authentication server: %1</source> + <translation>Ein unbekannter Fehler ist bei der Kommunikation mit den Authentifizierungs-Servern aufgetreten: %1</translation> + </message> + <message> + <location line="+20"/> + <source>An unknown Yggdrasil error occurred.</source> + <translation>Ein unbekannter Yggdrasil-Fehler ist aufgetreten.</translation> + </message> + <message> + <location line="+9"/> + <source>Sending request to auth servers...</source> + <translation>Sende Anfrage an die Authentifizierungs-Server...</translation> + </message> + <message> + <location line="+2"/> + <source>Processing response from servers...</source> + <translation>Bearbeite Antwort des Authentifizierungs-Servers...</translation> + </message> + <message> + <location line="+2"/> + <source>Processing. Please wait...</source> + <translation>Bearbeite. Bitte warten...</translation> + </message> +</context> </TS> |