Page MenuHomePhabricator (Chris)

No OneTemporary

Authored By
Unknown
Size
46 KB
Referenced Files
None
Subscribers
None
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

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)

Event Timeline