Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F130395
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
46 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/data/locale/ru.po b/data/locale/ru.po
new file mode 100644
index 0000000..2c4dda5
--- /dev/null
+++ b/data/locale/ru.po
@@ -0,0 +1,1025 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# Artem Krosheninnikov <artem.krosheninnikov@gmail.com>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: meandmyshadow 0.4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-03 16:20+0200\n"
+"PO-Revision-Date: 2012-07-11 02:15+0400\n"
+"Last-Translator: Artem Krosheninnikov <artem.krosheninnikov@gmail.com>\n"
+"Language-Team: русский <>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+
+#: ../src/Addons.cpp:40 ../src/TitleMenu.cpp:50
+msgid "Addons"
+msgstr "Дополнения"
+
+#: ../src/Addons.cpp:58
+msgid "Unable to initialize addon menu:"
+msgstr "Не удалось инициализировать меню дополнений"
+
+#: ../src/Addons.cpp:66 ../src/Addons.cpp:115 ../src/LevelEditSelect.cpp:69
+#: ../src/LevelSelect.cpp:186
+msgid "Back"
+msgstr "Назад"
+
+#: ../src/Addons.cpp:97
+msgid "Levels"
+msgstr "Уровни"
+
+#: ../src/Addons.cpp:98
+msgid "Level Packs"
+msgstr "Наборы уровней"
+
+#: ../src/Addons.cpp:99
+msgid "Themes"
+msgstr "Темы"
+
+#: ../src/Addons.cpp:119 ../src/Addons.cpp:595
+msgid "Install"
+msgstr "Установить"
+
+#: ../src/Addons.cpp:123
+msgid "Update"
+msgstr "Обновить"
+
+#: ../src/Addons.cpp:400 ../src/Addons.cpp:417 ../src/Addons.cpp:434
+#: ../src/Addons.cpp:461 ../src/Addons.cpp:478 ../src/Addons.cpp:492
+msgid "ERROR: Unable to download addon!"
+msgstr "ОШИБКА: Не удалось загрузить дополнение!"
+
+#: ../src/Addons.cpp:400 ../src/Addons.cpp:417 ../src/Addons.cpp:434
+#: ../src/Addons.cpp:461 ../src/Addons.cpp:478 ../src/Addons.cpp:492
+msgid "ERROR:"
+msgstr "ОШИБКА:"
+
+#: ../src/Addons.cpp:590
+msgid "Uninstall"
+msgstr "Удалить"
+
+# TRANSLATORS: Font used in GUI:
+# - Use "knewave" for languages using Latin and Latin-derived alphabets
+# - "DroidSansFallback" can be used for non-Latin writing systems
+#: ../src/Functions.cpp:592 ../src/Functions.cpp:593 ../src/Functions.cpp:594
+msgid "knewave"
+msgstr "DroidSansFallback"
+
+# TRANSLATORS: Font used for normal text:
+# - Use "Blokletters-Viltstift" for languages using Latin and Latin-derived alphabets
+# - "DroidSansFallback" can be used for non-Latin writing systems
+#: ../src/Functions.cpp:598
+msgid "Blokletters-Viltstift"
+msgstr "DroidSansFallback"
+
+#: ../src/Functions.cpp:1132 ../src/Functions.cpp:1159
+#: ../src/Functions.cpp:1523 ../src/InputManager.cpp:196
+#: ../src/LevelEditor.cpp:1017 ../src/LevelEditor.cpp:1630
+#: ../src/LevelEditor.cpp:1687 ../src/LevelEditor.cpp:1750
+#: ../src/LevelEditor.cpp:1830 ../src/LevelEditor.cpp:1936
+#: ../src/LevelEditor.cpp:1996 ../src/LevelEditSelect.cpp:175
+#: ../src/LevelEditSelect.cpp:215 ../src/LevelEditSelect.cpp:263
+msgid "OK"
+msgstr "ОК"
+
+#: ../src/Functions.cpp:1133 ../src/Functions.cpp:1145
+#: ../src/Functions.cpp:1155 ../src/Functions.cpp:1527
+#: ../src/LevelEditor.cpp:1021 ../src/LevelEditor.cpp:1634
+#: ../src/LevelEditor.cpp:1691 ../src/LevelEditor.cpp:1754
+#: ../src/LevelEditor.cpp:1834 ../src/LevelEditor.cpp:1940
+#: ../src/LevelEditor.cpp:2000 ../src/LevelEditSelect.cpp:179
+#: ../src/LevelEditSelect.cpp:219 ../src/LevelEditSelect.cpp:267
+#: ../src/TitleMenu.cpp:451
+msgid "Cancel"
+msgstr "Отмена"
+
+#: ../src/Functions.cpp:1137
+msgid "Abort"
+msgstr "Прервать"
+
+#: ../src/Functions.cpp:1138 ../src/Functions.cpp:1154
+msgid "Retry"
+msgstr "Попробовать снова"
+
+#: ../src/Functions.cpp:1139
+msgid "Ignore"
+msgstr "Игнорировать"
+
+#: ../src/Functions.cpp:1143 ../src/Functions.cpp:1149
+msgid "Yes"
+msgstr "Да"
+
+#: ../src/Functions.cpp:1144 ../src/Functions.cpp:1150
+msgid "No"
+msgstr "Нет"
+
+# TRANSLATORS: Filename is coming before this text
+#: ../src/Functions.cpp:1291
+#, c-format
+msgid ""
+"%s already exists.\n"
+"Do you want to overwrite it?"
+msgstr ""
+"%s уже существует.\n"
+"Вы хотите перезаписать его?"
+
+#: ../src/Functions.cpp:1291
+msgid "Overwrite Prompt"
+msgstr "Перезапись"
+
+#: ../src/Functions.cpp:1312 ../src/Functions.cpp:1330
+#, c-format
+msgid "Can't open file %s."
+msgstr "Невозможно открыть файл %s."
+
+#: ../src/Functions.cpp:1312 ../src/Functions.cpp:1330
+msgid "Error"
+msgstr "Ошибка"
+
+#: ../src/Functions.cpp:1464
+msgid "Save File"
+msgstr "Сохранить файл"
+
+#: ../src/Functions.cpp:1464
+msgid "Load File"
+msgstr "Загрузить файл"
+
+#: ../src/Functions.cpp:1468
+msgid "Search In"
+msgstr "Искать в"
+
+#: ../src/Functions.cpp:1478
+msgid "File Name"
+msgstr "Название файла"
+
+# TRANSLATORS: Please do not remove %s or %d from your translation:
+# - %d means the level number in a levelpack
+# - %s means the name of current level
+#: ../src/Game.cpp:233 ../src/Game.cpp:830
+#, c-format
+msgid "Level %d %s"
+msgstr "Уровень %d %s"
+
+# TRANSLATORS: Please do not remove %s from your translation:
+# - %s will be replaced with current action key
+#: ../src/Game.cpp:657
+#, c-format
+msgid "Press %s key to save the game."
+msgstr "Чтобы сохранить игру, нажмите клавишу %s."
+
+# TRANSLATORS: Please do not remove %s from your translation:
+# - %s will be replaced with current action key
+#: ../src/Game.cpp:662
+#, c-format
+msgid "Press %s key to swap the position of player and shadow."
+msgstr "Чтобы поменять позицию игрока и тени, нажмите клавишу %s."
+
+# TRANSLATORS: Please do not remove %s from your translation:
+# - %s will be replaced with current action key
+#: ../src/Game.cpp:667
+#, c-format
+msgid "Press %s key to activate the switch."
+msgstr "Чтобы активировать переключатель, нажмите клавишу %s."
+
+# TRANSLATORS: Please do not remove %s from your translation:
+# - %s will be replaced with current action key
+#: ../src/Game.cpp:672
+#, c-format
+msgid "Press %s key to teleport."
+msgstr "Чтобы телепортироваться, нажмите клавишу %s."
+
+# TRANSLATORS: Please do not remove %s from your translation:
+# - first %s means currently configured key to restart game
+# - Second %s means configured key to load from last save
+#: ../src/Game.cpp:713
+#, c-format
+msgid "Press %s to restart current level or press %s to load the game."
+msgstr ""
+"Чтобы перезапустить этот уровень, нажмите %s, или нажмите %s, чтобы "
+"загрузить игру."
+
+# TRANSLATORS: Please do not remove %s from your translation:
+# - %s will be replaced with currently configured key to restart game
+#: ../src/Game.cpp:725
+#, c-format
+msgid "Press %s to restart current level."
+msgstr "Чтобы перезапустить этот уровень, нажмите %s."
+
+#: ../src/Game.cpp:739
+msgid "Your shadow has died."
+msgstr "Ваша тень умерла."
+
+#: ../src/Game.cpp:782
+#, c-format
+msgid "%d recordings"
+msgstr "%d записей"
+
+# TRANSLATORS: This is caption for finished level
+#: ../src/Game.cpp:822
+msgid "You've finished:"
+msgstr "Вы завершили:"
+
+# TRANSLATORS: Please do not remove %-.2f from your translation:
+# - %-.2f means time in seconds
+# - s is shortened form of a second. Try to keep it so.
+#: ../src/Game.cpp:1002
+#, c-format
+msgid "Time: %-.2fs"
+msgstr "Время: %-.2fs"
+
+# TRANSLATORS: Please do not remove %-.2f from your translation:
+# - %-.2f means time in seconds
+# - s is shortened form of a second. Try to keep it so.
+#: ../src/Game.cpp:1011
+#, c-format
+msgid "Best time: %-.2fs"
+msgstr "Лучшее время: %-.2fs"
+
+#: ../src/Game.cpp:1022
+#, c-format
+msgid "Target time: %-.2fs"
+msgstr "Необходимое время: %-.2fs"
+
+# TRANSLATORS: Please do not remove %d from your translation:
+# - %d means the number of recordings user has made
+#: ../src/Game.cpp:1043
+#, c-format
+msgid "Recordings: %d"
+msgstr "Записей: %d"
+
+# TRANSLATORS: Please do not remove %d from your translation:
+# - %d means the number of recordings user has made
+#: ../src/Game.cpp:1051
+#, c-format
+msgid "Best recordings: %d"
+msgstr "Лучшая запись: %d"
+
+#: ../src/Game.cpp:1061
+#, c-format
+msgid "Target recordings: %d"
+msgstr "Необходимо записей: %d"
+
+# TRANSLATORS: Please do not remove %s from your translation:
+# - %s will be replaced with name of a prize medal (gold, silver or bronze)
+#: ../src/Game.cpp:1074
+#, c-format
+msgid "You earned the %s medal"
+msgstr "Вы получили %s медаль"
+
+#: ../src/Game.cpp:1074
+msgid "GOLD"
+msgstr "золотую"
+
+#: ../src/Game.cpp:1074
+msgid "SILVER"
+msgstr "серебряную"
+
+#: ../src/Game.cpp:1074
+msgid "BRONZE"
+msgstr "бронзовую"
+
+# TRANSLATORS: used as return to the level selector menu
+#: ../src/Game.cpp:1089
+msgid "Menu"
+msgstr "Меню"
+
+# TRANSLATORS: used as restart level
+#: ../src/Game.cpp:1096 ../src/InputManager.cpp:41
+msgid "Restart"
+msgstr "Снова"
+
+# TRANSLATORS: used as next level
+#: ../src/Game.cpp:1103
+msgid "Next"
+msgstr "Далее"
+
+#: ../src/Game.cpp:1146
+msgid "Game replay is done."
+msgstr "Воспроизведение завершено."
+
+#: ../src/Game.cpp:1146
+msgid "Game Replay"
+msgstr "Воспроизведение игры"
+
+#: ../src/Game.cpp:1303 ../src/Game.cpp:1305
+msgid "Congratulations"
+msgstr "Поздравляем"
+
+#: ../src/Game.cpp:1305
+msgid "You have finished the levelpack!"
+msgstr "Вы закончили этот набор уровней!"
+
+#: ../src/InputManager.cpp:40
+msgid "Up (in menu)"
+msgstr "Вверх (в меню)"
+
+#: ../src/InputManager.cpp:40
+msgid "Down (in menu)"
+msgstr "Вниз (в меню)"
+
+#: ../src/InputManager.cpp:40
+msgid "Left"
+msgstr "Влево"
+
+#: ../src/InputManager.cpp:40
+msgid "Right"
+msgstr "Вправо"
+
+#: ../src/InputManager.cpp:40
+msgid "Jump"
+msgstr "Прыжок"
+
+#: ../src/InputManager.cpp:40
+msgid "Action"
+msgstr "Действие"
+
+#: ../src/InputManager.cpp:40
+msgid "Space (Record)"
+msgstr "Пробел (запись)"
+
+#: ../src/InputManager.cpp:41
+msgid "Escape"
+msgstr "Выход"
+
+#: ../src/InputManager.cpp:41
+msgid "Tab (View shadow/Level prop.)"
+msgstr "Tab (смотреть на тень/настройки уровня)"
+
+#: ../src/InputManager.cpp:41
+msgid "Save game (in editor)"
+msgstr "Сохранить игру (в редакторе)"
+
+#: ../src/InputManager.cpp:41
+msgid "Load game"
+msgstr "Загрузить игру"
+
+#: ../src/InputManager.cpp:41
+msgid "Swap (in editor)"
+msgstr "Перестановка (в редакторе)"
+
+#: ../src/InputManager.cpp:42
+msgid "Teleport (in editor)"
+msgstr "Телепорт (в редакторе)"
+
+#: ../src/InputManager.cpp:42
+msgid "Suicide (in editor)"
+msgstr "Смерть (в редакторе)"
+
+#: ../src/InputManager.cpp:42
+msgid "Shift (in editor)"
+msgstr "Сдвиг (в редакторе)"
+
+#: ../src/InputManager.cpp:42
+msgid "Next block type (in Editor)"
+msgstr "Следующий вид блока (в редакторе)"
+
+#: ../src/InputManager.cpp:43
+msgid "Previous block type (in editor)"
+msgstr "Предыдущий вид блока (в редакторе)"
+
+#: ../src/InputManager.cpp:43
+msgid "Select (in menu)"
+msgstr "Выбрать (в меню)"
+
+#: ../src/InputManager.cpp:163 ../src/TitleMenu.cpp:430
+msgid "Config Keys"
+msgstr "Настройка клавиш"
+
+#: ../src/InputManager.cpp:166
+msgid "Select an item and press a key to config it."
+msgstr "Выберите действие и нажмите нужную клавишу, чтобы настроить его"
+
+#: ../src/InputManager.cpp:179
+msgid "Primary key"
+msgstr "Основные клавиши"
+
+#: ../src/InputManager.cpp:180
+msgid "Alternative key"
+msgstr "Альтернативные клавиши"
+
+#: ../src/InputManager.cpp:186
+msgid "Unset the key"
+msgstr "Сбросить настройку"
+
+#: ../src/InputManager.cpp:300
+msgid "(Not set)"
+msgstr "(Не настроено)"
+
+#: ../src/LevelEditor.cpp:121
+msgid "Toolbox"
+msgstr "Инструментарий"
+
+#: ../src/LevelEditor.cpp:180
+msgid "Block"
+msgstr "Блок"
+
+#: ../src/LevelEditor.cpp:180
+msgid "Player Start"
+msgstr "Точка начала"
+
+#: ../src/LevelEditor.cpp:180
+msgid "Shadow Start"
+msgstr "Точка начала тени"
+
+#: ../src/LevelEditor.cpp:181
+msgid "Exit"
+msgstr "Выход"
+
+#: ../src/LevelEditor.cpp:181
+msgid "Shadow Block"
+msgstr "Блок для тени"
+
+#: ../src/LevelEditor.cpp:181
+msgid "Spikes"
+msgstr "Шипы"
+
+#: ../src/LevelEditor.cpp:182
+msgid "Checkpoint"
+msgstr "Контрольная точка"
+
+#: ../src/LevelEditor.cpp:182 ../src/LevelEditSelect.cpp:258
+msgid "Swap"
+msgstr "Перестановка"
+
+#: ../src/LevelEditor.cpp:182 ../src/LevelEditor.cpp:1976
+msgid "Fragile"
+msgstr "Хрупкий блок"
+
+#: ../src/LevelEditor.cpp:183
+msgid "Moving Block"
+msgstr "Движущийся блок"
+
+#: ../src/LevelEditor.cpp:183
+msgid "Moving Shadow Block"
+msgstr "Движущийся блок для тени"
+
+#: ../src/LevelEditor.cpp:183
+msgid "Moving Spikes"
+msgstr "Движущиеся шипы"
+
+#: ../src/LevelEditor.cpp:184
+msgid "Teleporter"
+msgstr "Телепорт"
+
+#: ../src/LevelEditor.cpp:184 ../src/LevelEditor.cpp:1884
+msgid "Button"
+msgstr "Кнопка"
+
+#: ../src/LevelEditor.cpp:184 ../src/LevelEditor.cpp:1886
+msgid "Switch"
+msgstr "Переключатель"
+
+#: ../src/LevelEditor.cpp:185
+msgid "Conveyor Belt"
+msgstr "Конвейер"
+
+#: ../src/LevelEditor.cpp:185
+msgid "Shadow Conveyor Belt"
+msgstr "Конвейер для тени"
+
+#: ../src/LevelEditor.cpp:185
+msgid "Notification Block"
+msgstr "Блок оповещения"
+
+#: ../src/LevelEditor.cpp:185
+#, fuzzy
+msgid "Collectable"
+msgstr "Бонус"
+
+#: ../src/LevelEditor.cpp:529
+msgid "Are you sure you want to quit?"
+msgstr "Вы действительно хотите выйти?"
+
+#: ../src/LevelEditor.cpp:529
+msgid "Quit prompt"
+msgstr "Выход"
+
+#: ../src/LevelEditor.cpp:957 ../src/LevelEditor.cpp:959
+#: ../src/LevelEditor.cpp:2609 ../src/LevelEditor.cpp:2611
+#, c-format
+msgid "Level \"%s\" saved"
+msgstr "Уровень \"%s\" сохранен"
+
+#: ../src/LevelEditor.cpp:957 ../src/LevelEditor.cpp:959
+#: ../src/LevelEditor.cpp:2609 ../src/LevelEditor.cpp:2611
+msgid "Saved"
+msgstr "Сохранено"
+
+#: ../src/LevelEditor.cpp:972 ../src/LevelEditor.cpp:2732
+msgid "Level settings"
+msgstr "Настройки уровня"
+
+#: ../src/LevelEditor.cpp:976 ../src/LevelEditSelect.cpp:154
+msgid "Name:"
+msgstr "Название:"
+
+#: ../src/LevelEditor.cpp:982
+msgid "Theme:"
+msgstr "Тема:"
+
+#: ../src/LevelEditor.cpp:997
+msgid "Target time (s):"
+msgstr "Необходимое время (с):"
+
+#: ../src/LevelEditor.cpp:1008
+msgid "Target recordings:"
+msgstr "Необходимо записей:"
+
+#: ../src/LevelEditor.cpp:1576 ../src/LevelEditor.cpp:1793
+msgid "Defined"
+msgstr "Настроен"
+
+#: ../src/LevelEditor.cpp:1579 ../src/LevelEditor.cpp:1796
+#: ../src/LevelEditor.cpp:1878
+msgid "None"
+msgstr "Нет"
+
+#: ../src/LevelEditor.cpp:1586
+msgid "Moving block"
+msgstr "Движущийся блок"
+
+#: ../src/LevelEditor.cpp:1589
+msgid "Moving shadow block"
+msgstr "Движущийся блок для тени"
+
+#: ../src/LevelEditor.cpp:1592
+msgid "Moving spikes"
+msgstr "Движущиеся шипы"
+
+#: ../src/LevelEditor.cpp:1599 ../src/LevelEditor.cpp:1736
+msgid "Enabled"
+msgstr "Включено"
+
+#: ../src/LevelEditor.cpp:1605
+msgid "Loop"
+msgstr "По кругу"
+
+#: ../src/LevelEditor.cpp:1611
+msgid "Path"
+msgstr "Путь"
+
+#: ../src/LevelEditor.cpp:1671
+msgid "Notification block"
+msgstr "Блок оповещения"
+
+#: ../src/LevelEditor.cpp:1674
+msgid "Enter message here:"
+msgstr "Введите сообщение:"
+
+#: ../src/LevelEditor.cpp:1728
+msgid "Shadow Conveyor belt"
+msgstr "Конвейер для тени"
+
+#: ../src/LevelEditor.cpp:1730
+msgid "Conveyor belt"
+msgstr "Конвейер"
+
+#: ../src/LevelEditor.cpp:1742
+msgid "Enter speed here:"
+msgstr "Введите скорость:"
+
+#: ../src/LevelEditor.cpp:1800
+msgid "Portal"
+msgstr "Портал"
+
+#: ../src/LevelEditor.cpp:1803
+msgid "Activate on touch"
+msgstr "Активировать по прикосновению"
+
+#: ../src/LevelEditor.cpp:1809 ../src/LevelEditor.cpp:1914
+msgid "Targets:"
+msgstr "Цели:"
+
+#: ../src/LevelEditor.cpp:1875
+#, c-format
+msgid "%d Defined"
+msgstr "%d определена(ы)"
+
+#: ../src/LevelEditor.cpp:1891
+msgid "Behaviour:"
+msgstr "Поведение:"
+
+#: ../src/LevelEditor.cpp:1897
+msgid "On"
+msgstr "Вкл"
+
+#: ../src/LevelEditor.cpp:1898
+msgid "Off"
+msgstr "Выкл"
+
+#: ../src/LevelEditor.cpp:1899
+msgid "Toggle"
+msgstr "Переключать"
+
+#: ../src/LevelEditor.cpp:1979
+msgid "State:"
+msgstr "Состояние:"
+
+#: ../src/LevelEditor.cpp:1985
+msgid "Complete"
+msgstr "Целый"
+
+#: ../src/LevelEditor.cpp:1986
+msgid "One step"
+msgstr "На два шага"
+
+#: ../src/LevelEditor.cpp:1987
+msgid "Two steps"
+msgstr "На один шаг"
+
+#: ../src/LevelEditor.cpp:1988
+msgid "Gone"
+msgstr "Разрушен"
+
+#: ../src/LevelEditor.cpp:2717
+msgid "Select"
+msgstr "Выбрать"
+
+#: ../src/LevelEditor.cpp:2720
+msgid "Add"
+msgstr "Добавить"
+
+#: ../src/LevelEditor.cpp:2723
+msgid "Delete"
+msgstr "Удалить"
+
+#: ../src/LevelEditor.cpp:2726
+msgid "Configure"
+msgstr "Настройки"
+
+#: ../src/LevelEditor.cpp:2729 ../src/LevelPlaySelect.cpp:65
+#: ../src/TitleMenu.cpp:47
+msgid "Play"
+msgstr "Играть"
+
+#: ../src/LevelEditor.cpp:2735
+msgid "Save level"
+msgstr "Сохранить уровень"
+
+#: ../src/LevelEditor.cpp:2738
+msgid "Back to menu"
+msgstr "Назад в меню"
+
+#: ../src/LevelEditor.cpp:2776 ../src/LevelEditor.cpp:2782
+#, c-format
+msgid "Movespeed: %s"
+msgstr "Скорость: %s"
+
+#: ../src/LevelEditSelect.cpp:41 ../src/TitleMenu.cpp:49
+msgid "Map Editor"
+msgstr "Редактор карт"
+
+#: ../src/LevelEditSelect.cpp:78
+msgid "New Levelpack"
+msgstr "Новый набор уровней"
+
+#: ../src/LevelEditSelect.cpp:83
+msgid "Pack Properties"
+msgstr "Свойства набора"
+
+#: ../src/LevelEditSelect.cpp:88
+msgid "Remove Pack"
+msgstr "Удалить набор"
+
+#: ../src/LevelEditSelect.cpp:93
+msgid "Move Map"
+msgstr "Переместить карту"
+
+#: ../src/LevelEditSelect.cpp:99
+msgid "Remove Map"
+msgstr "Удалить карту"
+
+#: ../src/LevelEditSelect.cpp:104
+msgid "Edit Map"
+msgstr "Редактировать карту"
+
+#: ../src/LevelEditSelect.cpp:151
+msgid "Properties"
+msgstr "Свойства"
+
+#: ../src/LevelEditSelect.cpp:161
+msgid "Description:"
+msgstr "Описание:"
+
+#: ../src/LevelEditSelect.cpp:168
+msgid "Congratulation text:"
+msgstr "Текст поздравления:"
+
+#: ../src/LevelEditSelect.cpp:203 ../src/LevelEditSelect.cpp:371
+msgid "Add level"
+msgstr "Добавить уровень"
+
+#: ../src/LevelEditSelect.cpp:206
+msgid "File name:"
+msgstr "Название файла:"
+
+#: ../src/LevelEditSelect.cpp:243
+msgid "Move level"
+msgstr "Переместить уровень"
+
+#: ../src/LevelEditSelect.cpp:246
+msgid "Level: "
+msgstr "Уровень:"
+
+#: ../src/LevelEditSelect.cpp:256
+msgid "Before"
+msgstr "До:"
+
+#: ../src/LevelEditSelect.cpp:257
+msgid "After"
+msgstr "После:"
+
+#: ../src/LevelEditSelect.cpp:439
+msgid "Are you sure?"
+msgstr "Вы уверены?"
+
+#: ../src/LevelEditSelect.cpp:439
+msgid "Remove prompt"
+msgstr "Удаление"
+
+#: ../src/LevelEditSelect.cpp:579
+msgid "No file name given for the new level."
+msgstr "Новому уровню не было присвоено имени файла."
+
+#: ../src/LevelEditSelect.cpp:579
+msgid "Missing file name"
+msgstr "Отсутствует имя файла"
+
+#: ../src/LevelEditSelect.cpp:656
+msgid "The entered level number isn't valid!"
+msgstr "Введенный номер уровня некорректен!"
+
+#: ../src/LevelEditSelect.cpp:656
+msgid "Illegal number"
+msgstr "Некорректный номер"
+
+#: ../src/LevelPlaySelect.cpp:43
+msgid "Select Level"
+msgstr "Выберите уровень"
+
+#: ../src/LevelPlaySelect.cpp:92
+msgid "Choose a level"
+msgstr "Выберите уровень"
+
+#: ../src/LevelPlaySelect.cpp:93 ../src/LevelPlaySelect.cpp:231
+#: ../src/LevelPlaySelect.cpp:242
+msgid "Time:"
+msgstr "Время:"
+
+#: ../src/LevelPlaySelect.cpp:94 ../src/LevelPlaySelect.cpp:240
+#: ../src/LevelPlaySelect.cpp:243
+msgid "Recordings:"
+msgstr "Записей:"
+
+#: ../src/TitleMenu.cpp:48
+msgid "Options"
+msgstr "Опции"
+
+#: ../src/TitleMenu.cpp:51
+msgid "Quit"
+msgstr "Выход"
+
+#: ../src/TitleMenu.cpp:109
+msgid "Enable internet in order to install addons."
+msgstr "Чтобы устанавливать дополнения, разрешите подключение к интернету."
+
+#: ../src/TitleMenu.cpp:109
+msgid "Internet disabled"
+msgstr "Подключение к интернету запрещено"
+
+#: ../src/TitleMenu.cpp:188
+msgid "Settings"
+msgstr "Настройки"
+
+#: ../src/TitleMenu.cpp:236
+msgid "Music"
+msgstr "Музыка"
+
+#: ../src/TitleMenu.cpp:244
+msgid "Sound"
+msgstr "Звуки"
+
+#: ../src/TitleMenu.cpp:252
+msgid "Fullscreen"
+msgstr "На весь экран"
+
+#: ../src/TitleMenu.cpp:257
+msgid "Resolution"
+msgstr "Разрешение"
+
+#: ../src/TitleMenu.cpp:339
+msgid "Language"
+msgstr "Язык"
+
+# TRANSLATORS: as detect user's language automatically
+#: ../src/TitleMenu.cpp:348
+msgid "Auto-Detect"
+msgstr "Автоопределение"
+
+#: ../src/TitleMenu.cpp:376
+msgid "Theme"
+msgstr "Тема"
+
+#: ../src/TitleMenu.cpp:409
+msgid "Level themes"
+msgstr "Тема уровней"
+
+#: ../src/TitleMenu.cpp:414
+msgid "Internet"
+msgstr "Интернет"
+
+#: ../src/TitleMenu.cpp:420
+msgid "Internet proxy"
+msgstr "Интернет-прокси"
+
+# TRANSLATORS: Used for button which clear any level progress like unlocked levels and highscores.
+#: ../src/TitleMenu.cpp:437
+msgid "Clear Progress"
+msgstr "Очистить прогресс"
+
+#: ../src/TitleMenu.cpp:456
+msgid "Save Changes"
+msgstr "Сохранить изменения"
+
+#: ../src/TitleMenu.cpp:564
+msgid "Do you really want to reset level progress?"
+msgstr "Вы действительно хотите очистить прогресс?"
+
+#: ../src/TitleMenu.cpp:564
+msgid "Warning"
+msgstr "Предупреждение"
+
+# TRANSLATORS: name of a key
+msgid "backspace"
+msgstr "backspace"
+
+# TRANSLATORS: name of a key
+msgid "tab"
+msgstr "tab"
+
+# TRANSLATORS: name of a key
+msgid "clear"
+msgstr "clear"
+
+# TRANSLATORS: name of a key
+msgid "return"
+msgstr "return"
+
+# TRANSLATORS: name of a key
+msgid "pause"
+msgstr "pause"
+
+# TRANSLATORS: name of a key
+msgid "escape"
+msgstr "escape"
+
+# TRANSLATORS: name of a key
+msgid "space"
+msgstr "space"
+
+# TRANSLATORS: name of a key
+msgid "delete"
+msgstr "delete"
+
+# TRANSLATORS: name of a key
+msgid "enter"
+msgstr "enter"
+
+# TRANSLATORS: name of a key
+msgid "equals"
+msgstr "equals"
+
+# TRANSLATORS: name of a key
+msgid "up"
+msgstr "вверх"
+
+# TRANSLATORS: name of a key
+msgid "down"
+msgstr "вниз"
+
+# TRANSLATORS: name of a key
+msgid "right"
+msgstr "вправо"
+
+# TRANSLATORS: name of a key
+msgid "left"
+msgstr "влево"
+
+# TRANSLATORS: name of a key
+msgid "insert"
+msgstr "insert"
+
+# TRANSLATORS: name of a key
+msgid "home"
+msgstr "home"
+
+# TRANSLATORS: name of a key
+msgid "end"
+msgstr "end"
+
+# TRANSLATORS: name of a key
+msgid "page up"
+msgstr "page up"
+
+# TRANSLATORS: name of a key
+msgid "page down"
+msgstr "page down"
+
+# TRANSLATORS: name of a key
+msgid "numlock"
+msgstr "numlock"
+
+# TRANSLATORS: name of a key
+msgid "caps lock"
+msgstr "caps lock"
+
+# TRANSLATORS: name of a key
+msgid "scroll lock"
+msgstr "scroll lock"
+
+# TRANSLATORS: name of a key
+msgid "right shift"
+msgstr "right shift"
+
+# TRANSLATORS: name of a key
+msgid "left shift"
+msgstr "left shift"
+
+# TRANSLATORS: name of a key
+msgid "right ctrl"
+msgstr "right ctrl"
+
+# TRANSLATORS: name of a key
+msgid "left ctrl"
+msgstr "left ctrl"
+
+# TRANSLATORS: name of a key
+msgid "right alt"
+msgstr "right alt"
+
+# TRANSLATORS: name of a key
+msgid "left alt"
+msgstr "left alt"
+
+# TRANSLATORS: name of a key
+msgid "right meta"
+msgstr "right meta"
+
+# TRANSLATORS: name of a key
+msgid "left meta"
+msgstr "left meta"
+
+# TRANSLATORS: name of a key
+msgid "left super"
+msgstr "left super"
+
+# TRANSLATORS: name of a key
+msgid "right super"
+msgstr "right super"
+
+# TRANSLATORS: name of a key
+msgid "alt gr"
+msgstr "alt gr"
+
+# TRANSLATORS: name of a key
+msgid "compose"
+msgstr "compose"
+
+# TRANSLATORS: name of a key
+msgid "help"
+msgstr "help"
+
+# TRANSLATORS: name of a key
+msgid "print screen"
+msgstr "print screen"
+
+# TRANSLATORS: name of a key
+msgid "sys req"
+msgstr "sys req"
+
+# TRANSLATORS: name of a key
+msgid "break"
+msgstr "break"
+
+# TRANSLATORS: name of a key
+msgid "menu"
+msgstr "menu"
+
+# TRANSLATORS: name of a key
+msgid "power"
+msgstr "power"
+
+# TRANSLATORS: name of a key
+msgid "euro"
+msgstr "euro"
+
+# TRANSLATORS: name of a key
+msgid "undo"
+msgstr "undo"
diff --git a/src/Addons.cpp b/src/Addons.cpp
index b135d49..447cc06 100644
--- a/src/Addons.cpp
+++ b/src/Addons.cpp
@@ -1,598 +1,603 @@
/****************************************************************************
** Copyright (C) 2011 Luka Horvat <redreaper132 at gmail.com>
** Copyright (C) 2011 Edward Lii <edward_iii at myway.com>
** Copyright (C) 2011 O. Bahri Gordebak <gordebak at gmail.com>
**
**
** This file may be used under the terms of the GNU General Public
** License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of
** this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
**
****************************************************************************/
#include "Addons.h"
#include "GameState.h"
#include "Functions.h"
#include "FileManager.h"
#include "Globals.h"
#include "Objects.h"
#include "GUIObject.h"
#include "GUIScrollBar.h"
#include "GUIListBox.h"
#include "POASerializer.h"
#include "InputManager.h"
#include <string>
#include <sstream>
#include <iostream>
#include <SDL/SDL_ttf.h>
#include <SDL/SDL.h>
using namespace std;
Addons::Addons(){
//Render the title.
SDL_Color black={0,0,0};
title=TTF_RenderUTF8_Blended(fontTitle,_("Addons"),black);
FILE* addon=fopen((getUserPath(USER_CACHE)+"addons").c_str(),"wb");
action=NONE;
addons=NULL;
//Clear the GUI if any.
if(GUIObjectRoot){
delete GUIObjectRoot;
GUIObjectRoot=NULL;
}
//Try to get(download) the addonsList.
if(getAddonsList(addon)==false) {
//It failed so we show the error message.
GUIObjectRoot=new GUIObject(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
GUIObject* obj=new GUIObject(90,96,200,32,GUIObjectLabel,_("Unable to initialize addon menu:"));
obj->name="lbl";
GUIObjectRoot->childControls.push_back(obj);
obj=new GUIObject(120,130,200,32,GUIObjectLabel,error.c_str());
obj->name="lbl";
GUIObjectRoot->childControls.push_back(obj);
obj=new GUIObject(90,550,200,32,GUIObjectButton,_("Back"));
obj->name="cmdBack";
obj->eventCallback=this;
GUIObjectRoot->childControls.push_back(obj);
return;
}
//Now create the GUI.
createGUI();
}
Addons::~Addons(){
delete addons;
//Free the title surface.
SDL_FreeSurface(title);
//If the GUIObjectRoot exist delete it.
if(GUIObjectRoot){
delete GUIObjectRoot;
GUIObjectRoot=NULL;
}
}
void Addons::createGUI(){
//Downloaded the addons file now we can create the GUI.
GUIObjectRoot=new GUIObject(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
//Create list of categories
GUISingleLineListBox *listTabs=new GUISingleLineListBox((SCREEN_WIDTH-360)/2,100,360,36);
listTabs->name="lstTabs";
listTabs->item.push_back(_("Levels"));
listTabs->item.push_back(_("Level Packs"));
listTabs->item.push_back(_("Themes"));
listTabs->value=0;
listTabs->eventCallback=this;
GUIObjectRoot->childControls.push_back(listTabs);
//Create the list for the addons.
//By default levels will be selected.
list=new GUIListBox(SCREEN_WIDTH*0.1,160,SCREEN_WIDTH*0.8,SCREEN_HEIGHT-220);
list->item=addonsToList("levels");
list->name="lstAddons";
list->eventCallback=this;
list->value=-1;
GUIObjectRoot->childControls.push_back(list);
type="levels";
//And the buttons at the bottom of the screen.
GUIObject* obj=new GUIObject(SCREEN_WIDTH*0.3,SCREEN_HEIGHT-50,-1,32,GUIObjectButton,_("Back"),0,true,true,GUIGravityCenter);
obj->name="cmdBack";
obj->eventCallback=this;
GUIObjectRoot->childControls.push_back(obj);
actionButton=new GUIObject(SCREEN_WIDTH*0.7,SCREEN_HEIGHT-50,-1,32,GUIObjectButton,_("Install"),0,false,true,GUIGravityCenter);
actionButton->name="cmdInstall";
actionButton->eventCallback=this;
GUIObjectRoot->childControls.push_back(actionButton);
updateButton=new GUIObject(SCREEN_WIDTH*0.5,SCREEN_HEIGHT-50,-1,32,GUIObjectButton,_("Update"),0,false,false,GUIGravityCenter);
updateButton->name="cmdUpdate";
updateButton->eventCallback=this;
GUIObjectRoot->childControls.push_back(updateButton);
}
bool Addons::getAddonsList(FILE* file){
//First we download the file.
if(downloadFile("http://meandmyshadow.sourceforge.net/game/addons04",file)==false){
- error="ERROR: unable to download addons file!";
- cerr<<error<<endl;
+ //NOTE: We keep the console output English so we put the string literal here twice.
+ cerr<<"ERROR: unable to download addons file!"<<endl;
+ error=_("ERROR: unable to download addons file!");
return false;
}
fclose(file);
//Load the downloaded file.
ifstream addonFile;
addonFile.open((getUserPath(USER_CACHE)+"addons").c_str());
if(!addonFile.good()) {
- error="ERROR: unable to load addon_list file!";
- cerr<<error<<endl;
+ //NOTE: We keep the console output English so we put the string literal here twice.
+ cerr<<"ERROR: unable to load addon_list file!"<<endl;
+ error=_("ERROR: unable to load addon_list file!");
return false;
}
//Parse the addonsfile.
TreeStorageNode obj;
{
POASerializer objSerializer;
if(!objSerializer.readNode(addonFile,&obj,true)){
- error="ERROR: Invalid file format of addons file!";
- cerr<<error<<endl;
+ //NOTE: We keep the console output English so we put the string literal here twice.
+ cerr<<"ERROR: Invalid file format of addons file!"<<endl;
+ error=_("ERROR: Invalid file format of addons file!");
return false;
}
}
//Also load the installed_addons file.
ifstream iaddonFile;
iaddonFile.open((getUserPath(USER_CONFIG)+"installed_addons").c_str());
if(!iaddonFile) {
//The installed_addons file doesn't exist, so we create it.
ofstream iaddons;
iaddons.open((getUserPath(USER_CONFIG)+"installed_addons").c_str());
iaddons<<" "<<endl;
iaddons.close();
//Also load the installed_addons file.
iaddonFile.open((getUserPath(USER_CONFIG)+"installed_addons").c_str());
if(!iaddonFile) {
- error="ERROR: Unable to create the installed_addons file.";
- cerr<<error<<endl;
+ //NOTE: We keep the console output English so we put the string literal here twice.
+ cerr<<"ERROR: Unable to create the installed_addons file."<<endl;
+ error=_("ERROR: Unable to create the installed_addons file.");
return false;
}
}
//And parse the installed_addons file.
TreeStorageNode obj1;
{
POASerializer objSerializer;
if(!objSerializer.readNode(iaddonFile,&obj1,true)){
- error="ERROR: Invalid file format of the installed_addons!";
- cerr<<error<<endl;
+ //NOTE: We keep the console output English so we put the string literal here twice.
+ cerr<<"ERROR: Invalid file format of the installed_addons!"<<endl;
+ error=_("ERROR: Invalid file format of the installed_addons!");
return false;
}
}
//Fill the vector.
addons = new std::vector<Addon>;
fillAddonList(*addons,obj,obj1);
//Close the files.
iaddonFile.close();
addonFile.close();
return true;
}
void Addons::fillAddonList(std::vector<Addons::Addon> &list, TreeStorageNode &addons, TreeStorageNode &installed_addons){
//Loop through the blocks of the addons file.
//These should contain the types levels, levelpacks, themes.
for(unsigned int i=0;i<addons.subNodes.size();i++){
TreeStorageNode* block=addons.subNodes[i];
if(block==NULL) continue;
string type;
type=block->name;
//Now loop the entries(subNodes) of the block.
for(unsigned int i=0;i<block->subNodes.size();i++){
TreeStorageNode* entry=block->subNodes[i];
if(entry==NULL) continue;
if(entry->name=="entry" && entry->value.size()==1){
//The entry is valid so create a new Addon.
Addon addon = *(new Addon);
addon.type=type;
addon.name=entry->value[0];
addon.file=entry->attributes["file"][0];
if(!entry->attributes["folder"].empty()){
addon.folder=entry->attributes["folder"][0];
}
addon.author=entry->attributes["author"][0];
addon.version=atoi(entry->attributes["version"][0].c_str());
addon.upToDate=false;
addon.installed=false;
//Check if the addon is already installed.
for(unsigned int i=0;i<installed_addons.subNodes.size();i++){
TreeStorageNode* installed=installed_addons.subNodes[i];
if(installed==NULL) continue;
if(installed->name=="entry" && installed->value.size()==3){
if(addon.type.compare(installed->value[0])==0 && addon.name.compare(installed->value[1])==0) {
addon.installed=true;
addon.installedVersion=atoi(installed->value[2].c_str());
if(addon.installedVersion>=addon.version) {
addon.upToDate=true;
}
}
}
}
//Finally put him in the list.
list.push_back(addon);
}
}
}
}
std::vector<std::string> Addons::addonsToList(const std::string &type){
std::vector<std::string> result;
for(unsigned int i=0;i<addons->size();i++) {
//Check if the addon is from the right type.
if((*addons)[i].type==type) {
string entry = (*addons)[i].name + " by " + (*addons)[i].author;
if((*addons)[i].installed) {
if((*addons)[i].upToDate) {
entry += " *";
} else {
entry += " +";
}
}
result.push_back(entry);
}
}
return result;
}
bool Addons::saveInstalledAddons(){
if(!addons) return false;
//Open the file.
ofstream iaddons;
iaddons.open((getUserPath(USER_CONFIG)+"installed_addons").c_str());
if(!iaddons) return false;
//Loop all the levels.
TreeStorageNode installed;
for(unsigned int i=0;i<addons->size();i++) {
//Check if the level is installed or not.
if((*addons)[i].installed) {
TreeStorageNode *entry=new TreeStorageNode;
entry->name="entry";
entry->value.push_back((*addons)[i].type);
entry->value.push_back((*addons)[i].name);
char version[64];
sprintf(version,"%d",(*addons)[i].installedVersion);
entry->value.push_back(version);
installed.subNodes.push_back(entry);
}
}
//And write away the file.
POASerializer objSerializer;
objSerializer.writeNode(&installed,iaddons,true,true);
return true;
}
void Addons::handleEvents(){
//Check if we should quit.
if(event.type==SDL_QUIT){
//Save the installed addons before exiting.
saveInstalledAddons();
setNextState(STATE_EXIT);
}
//Check if escape is pressed, if so return to the main menu.
if(inputMgr.isKeyUpEvent(INPUTMGR_ESCAPE)){
setNextState(STATE_MENU);
}
}
void Addons::logic(){}
void Addons::render(){
//We only need to draw the menu background.
applySurface(0,0,menuBackground,screen,NULL);
//Draw the title.
applySurface((SCREEN_WIDTH-title->w)/2,40-TITLE_FONT_RAISE,title,screen,NULL);
}
void Addons::resize(){
//Delete the gui (if any).
if(GUIObjectRoot){
delete GUIObjectRoot;
GUIObjectRoot=NULL;
}
//Now create a new one.
createGUI();
}
void Addons::GUIEventCallback_OnEvent(std::string name,GUIObject* obj,int eventType){
if(name=="lstTabs"){
if(obj->value==0){
list->item=addonsToList("levels");
type="levels";
}else if(obj->value==1){
list->item=addonsToList("levelpacks");
type="levelpacks";
}else{
list->item=addonsToList("themes");
type="themes";
}
list->value=0;
GUIEventCallback_OnEvent("lstAddons",list,GUIEventChange);
}else if(name=="lstAddons"){
//Get the addon struct that belongs to it.
Addon *addon=NULL;
if(!list->item.empty()) {
string entry = list->item[list->value];
if(type.compare("levels")==0) {
for(unsigned int i=0;i<addons->size();i++) {
std::string prefix=(*addons)[i].name;
if(!entry.compare(0, prefix.size(), prefix)) {
addon=&(*addons)[i];
}
}
} else if(type.compare("levelpacks")==0) {
for(unsigned int i=0;i<addons->size();i++) {
std::string prefix=(*addons)[i].name;
if(!entry.compare(0, prefix.size(), prefix)) {
addon=&(*addons)[i];
}
}
} else if(type.compare("themes")==0) {
for(unsigned int i=0;i<addons->size();i++) {
std::string prefix=(*addons)[i].name;
if(!entry.compare(0, prefix.size(), prefix)) {
addon=&(*addons)[i];
}
}
}
}
selected=addon;
updateActionButton();
updateUpdateButton();
}else if(name=="cmdBack"){
saveInstalledAddons();
setNextState(STATE_MENU);
}else if(name=="cmdUpdate"){
//First remove the addon and then install it again.
if(type.compare("levels")==0) {
if(downloadFile(selected->file,(getUserPath(USER_DATA)+"/levels/"))!=false){
selected->upToDate=true;
selected->installedVersion=selected->version;
list->item=addonsToList("levels");
updateActionButton();
updateUpdateButton();
}else{
cerr<<"ERROR: Unable to download addon!"<<endl;
msgBox(_("ERROR: Unable to download addon!"),MsgBoxOKOnly,_("ERROR:"));
return;
}
}else if(type.compare("levelpacks")==0) {
if(!removeDirectory((getUserPath(USER_DATA)+"levelpacks/"+selected->folder+"/").c_str())){
cerr<<"ERROR: Unable to remove the directory "<<(getUserPath(USER_DATA)+"levelpacks/"+selected->folder+"/")<<"."<<endl;
return;
}
if(downloadFile(selected->file,(getUserPath(USER_CACHE)+"/tmp/"))!=false){
extractFile(getUserPath(USER_CACHE)+"/tmp/"+fileNameFromPath(selected->file,true),getUserPath(USER_DATA)+"/levelpacks/"+selected->folder+"/");
selected->upToDate=true;
selected->installedVersion=selected->version;
list->item=addonsToList("levelpacks");
updateActionButton();
updateUpdateButton();
}else{
cerr<<"ERROR: Unable to download addon!"<<endl;
msgBox(_("ERROR: Unable to download addon!"),MsgBoxOKOnly,_("ERROR:"));
return;
}
}else if(type.compare("themes")==0) {
if(!removeDirectory((getUserPath(USER_DATA)+"themes/"+selected->folder+"/").c_str())){
cerr<<"ERROR: Unable to remove the directory "<<(getUserPath(USER_DATA)+"themes/"+selected->folder+"/")<<"."<<endl;
return;
}
if(downloadFile(selected->file,(getUserPath(USER_CACHE)+"/tmp/"))!=false){
extractFile((getUserPath(USER_CACHE)+"/tmp/"+fileNameFromPath(selected->file,true)),(getUserPath(USER_DATA)+"/themes/"+selected->folder+"/"));
selected->upToDate=true;
selected->installedVersion=selected->version;
list->item=addonsToList("themes");
updateActionButton();
updateUpdateButton();
}else{
cerr<<"ERROR: Unable to download addon!"<<endl;
msgBox(_("ERROR: Unable to download addon!"),MsgBoxOKOnly,_("ERROR:"));
return;
}
}
}else if(name=="cmdInstall"){
switch(action) {
case NONE:
break;
case INSTALL:
//Download the addon.
if(type.compare("levels")==0) {
if(downloadFile(selected->file,getUserPath(USER_DATA)+"/levels/")!=false){
selected->upToDate=true;
selected->installed=true;
selected->installedVersion=selected->version;
list->item=addonsToList("levels");
updateActionButton();
;
//And add the level to the levels levelpack.
LevelPack* levelsPack=getLevelPackManager()->getLevelPack("Levels");
levelsPack->addLevel(getUserPath(USER_DATA)+"/levels/"+fileNameFromPath(selected->file));
levelsPack->setLocked(levelsPack->getLevelCount()-1);
}else{
cerr<<"ERROR: Unable to download addon!"<<endl;
msgBox(_("ERROR: Unable to download addon!"),MsgBoxOKOnly,_("ERROR:"));
return;
}
}else if(type.compare("levelpacks")==0) {
if(downloadFile(selected->file,getUserPath(USER_CACHE)+"/tmp/")!=false){
extractFile(getUserPath(USER_CACHE)+"/tmp/"+fileNameFromPath(selected->file,true),getUserPath(USER_DATA)+"/levelpacks/"+selected->folder+"/");
selected->upToDate=true;
selected->installed=true;
selected->installedVersion=selected->version;
list->item=addonsToList("levelpacks");
updateActionButton();
updateUpdateButton();
//And add the levelpack to the levelpackManager.
getLevelPackManager()->loadLevelPack(getUserPath(USER_DATA)+"/levelpacks/"+selected->folder);
}else{
cerr<<"ERROR: Unable to download addon!"<<endl;
msgBox(_("ERROR: Unable to download addon!"),MsgBoxOKOnly,_("ERROR:"));
return;
}
}else if(type.compare("themes")==0) {
if(downloadFile(selected->file,getUserPath(USER_CACHE)+"/tmp/")!=false){
extractFile(getUserPath(USER_CACHE)+"/tmp/"+fileNameFromPath(selected->file,true),getUserPath(USER_DATA)+"/themes/"+selected->folder+"/");
selected->upToDate=true;
selected->installed=true;
selected->installedVersion=selected->version;
list->item=addonsToList("themes");
updateActionButton();
updateUpdateButton();
}else{
cerr<<"ERROR: Unable to download addon!"<<endl;
msgBox(_("ERROR: Unable to download addon!"),MsgBoxOKOnly,_("ERROR:"));
return;
}
}
break;
case UNINSTALL:
//Uninstall the addon.
if(type.compare("levels")==0) {
if(remove((getUserPath(USER_DATA)+"levels/"+fileNameFromPath(selected->file)).c_str())){
cerr<<"ERROR: Unable to remove the file "<<(getUserPath(USER_DATA) + "levels/" + fileNameFromPath(selected->file))<<"."<<endl;
return;
}
selected->upToDate=false;
selected->installed=false;
list->item=addonsToList("levels");
updateActionButton();
updateUpdateButton();
//And remove the level from the levels levelpack.
LevelPack* levelsPack=getLevelPackManager()->getLevelPack("Levels");
for(int i=0;i<levelsPack->getLevelCount();i++){
if(levelsPack->getLevelFile(i)==(getUserPath(USER_DATA)+"levels/"+fileNameFromPath(selected->file))){
//Remove the level and break out of the loop.
levelsPack->removeLevel(i);
break;
}
}
}else if(type.compare("levelpacks")==0) {
if(!removeDirectory((getUserPath(USER_DATA)+"levelpacks/"+selected->folder+"/").c_str())){
cerr<<"ERROR: Unable to remove the directory "<<(getUserPath(USER_DATA)+"levelpacks/"+selected->folder+"/")<<"."<<endl;
return;
}
selected->upToDate=false;
selected->installed=false;
list->item=addonsToList("levelpacks");
updateActionButton();
updateUpdateButton();
//And remove the levelpack from the levelpack manager.
getLevelPackManager()->removeLevelPack(selected->folder);
}else if(type.compare("themes")==0) {
if(!removeDirectory((getUserPath(USER_DATA)+"themes/"+selected->folder+"/").c_str())){
cerr<<"ERROR: Unable to remove the directory "<<(getUserPath(USER_DATA)+"themes/"+selected->folder+"/")<<"."<<endl;
return;
}
selected->upToDate=false;
selected->installed=false;
list->item=addonsToList("themes");
updateActionButton();
updateUpdateButton();
}
break;
}
}
}
void Addons::updateUpdateButton(){
//some sanity check
if(selected==NULL){
updateButton->enabled=false;
return;
}
//Check if the selected addon is installed.
if(selected->installed){
//It is installed, but is it uptodate?
if(selected->upToDate){
//The addon is installed and there is no need to show the button.
updateButton->enabled=false;
updateButton->visible=false;
}else{
//Otherwise show the button
updateButton->enabled=true;
updateButton->visible=true;
}
}else{
//The addon isn't installed so we can only install it.
updateButton->enabled=false;
}
}
void Addons::updateActionButton(){
//some sanity check
if(selected==NULL){
actionButton->enabled=false;
action = NONE;
return;
}
//Check if the selected addon is installed.
if(selected->installed){
//It is installed, but is it uptodate?
actionButton->enabled=true;
actionButton->caption=_("Uninstall");
action = UNINSTALL;
}else{
//The addon isn't installed so we can only install it.
actionButton->enabled=true;
actionButton->caption=_("Install");
action = INSTALL;
}
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Mon, Jun 15, 11:28 PM (2 w, 3 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
69781
Default Alt Text
(46 KB)
Attached To
Mode
R79 meandmyshadow
Attached
Detach File
Event Timeline