From 9e4cef015d2e2b748b5898a8b793b77a1fe32619 Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Mon, 19 Dec 2022 19:12:44 +0200
Subject: [PATCH 001/197] Initial test version of selectable translations for
launcher.
---
launcher/CMakeLists.txt | 6 +-
launcher/lobby/lobby_moc.ui | 4 +-
launcher/lobby/lobbyroomrequest_moc.ui | 17 +-
launcher/main.cpp | 5 +
launcher/mainwindow_moc.cpp | 51 +-
launcher/mainwindow_moc.h | 4 +-
launcher/mainwindow_moc.ui | 315 +++++---
launcher/modManager/cmodlistview_moc.ui | 12 +-
launcher/settingsView/csettingsview_moc.cpp | 18 +-
launcher/settingsView/csettingsview_moc.h | 2 -
launcher/settingsView/csettingsview_moc.ui | 839 ++++++++++----------
launcher/translation/launcher_uk.ts | 536 +++++++++++++
12 files changed, 1210 insertions(+), 599 deletions(-)
create mode 100644 launcher/translation/launcher_uk.ts
diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt
index 5764c38a1..319b1ea06 100644
--- a/launcher/CMakeLists.txt
+++ b/launcher/CMakeLists.txt
@@ -87,6 +87,10 @@ else()
qt5_wrap_ui(launcher_UI_HEADERS ${launcher_FORMS})
endif()
+find_package(Qt5LinguistTools)
+set(launcher_TS translation/launcher_pl.ts translation/launcher_ru.ts translation/launcher_uk.ts)
+qt5_add_translation( QM_FILES ${launcher_TS} )
+
if(WIN32)
set(launcher_ICON VCMI_launcher.rc)
endif()
@@ -94,7 +98,7 @@ endif()
if(BUILD_SINGLE_APP)
add_library(vcmilauncher STATIC ${launcher_SRCS} ${launcher_HEADERS} ${launcher_UI_HEADERS})
else()
- add_executable(vcmilauncher WIN32 ${launcher_SRCS} ${launcher_HEADERS} ${launcher_UI_HEADERS} ${launcher_ICON})
+ add_executable(vcmilauncher WIN32 ${QM_FILES} ${launcher_SRCS} ${launcher_HEADERS} ${launcher_UI_HEADERS} ${launcher_ICON})
endif()
if(WIN32)
diff --git a/launcher/lobby/lobby_moc.ui b/launcher/lobby/lobby_moc.ui
index 44d410903..e859f7f7c 100644
--- a/launcher/lobby/lobby_moc.ui
+++ b/launcher/lobby/lobby_moc.ui
@@ -11,7 +11,7 @@
- Form
+
-
@@ -52,7 +52,7 @@
-
- 127.0.0.1:5002
+ 127.0.0.1:5002
diff --git a/launcher/lobby/lobbyroomrequest_moc.ui b/launcher/lobby/lobbyroomrequest_moc.ui
index b9ef935fe..a05741970 100644
--- a/launcher/lobby/lobbyroomrequest_moc.ui
+++ b/launcher/lobby/lobbyroomrequest_moc.ui
@@ -51,39 +51,42 @@
0
+
+ 2
+
-
- 2
+ 2
-
- 3
+ 3
-
- 4
+ 4
-
- 5
+ 5
-
- 6
+ 6
-
- 7
+ 7
-
- 8
+ 8
diff --git a/launcher/main.cpp b/launcher/main.cpp
index 7180cb1d9..8cb856c22 100644
--- a/launcher/main.cpp
+++ b/launcher/main.cpp
@@ -32,6 +32,11 @@ int main(int argc, char * argv[])
{
#endif
QApplication vcmilauncher(argc, argv);
+
+ //QTranslator translator;
+ //translator.load("./launcher_uk.qm");
+ //vcmilauncher.installTranslator(&translator);
+
MainWindow mainWindow;
mainWindow.show();
result = vcmilauncher.exec();
diff --git a/launcher/mainwindow_moc.cpp b/launcher/mainwindow_moc.cpp
index 5b71b9043..38951556a 100644
--- a/launcher/mainwindow_moc.cpp
+++ b/launcher/mainwindow_moc.cpp
@@ -68,41 +68,13 @@ MainWindow::MainWindow(QWidget * parent)
move(position);
}
- //set default margins
-
- auto width = ui->startGameTitle->fontMetrics().boundingRect(ui->startGameTitle->text()).width();
- if(ui->startGameButton->iconSize().width() < width)
- {
- ui->startGameButton->setIconSize(QSize(width, width));
- }
- auto tab_icon_size = ui->tabSelectList->iconSize();
- if(tab_icon_size.width() < width)
- {
- ui->tabSelectList->setIconSize(QSize(width, width + tab_icon_size.height() - tab_icon_size.width()));
- ui->tabSelectList->setGridSize(QSize(width, width));
- // 4 is a dirty hack to make it look right
- ui->tabSelectList->setMaximumWidth(width + 4);
- }
ui->tabListWidget->setCurrentIndex(0);
ui->settingsView->isExtraResolutionsModEnabled = ui->modlistView->isExtraResolutionsModEnabled();
ui->settingsView->setDisplayList();
connect(ui->modlistView, &CModListView::extraResolutionsEnabledChanged,
ui->settingsView, &CSettingsView::fillValidResolutions);
-
- connect(ui->tabSelectList, &QListWidget::currentRowChanged, [this](int i) {
-#ifdef Q_OS_IOS
- if(auto widget = qApp->focusWidget())
- widget->clearFocus();
-#endif
- ui->tabListWidget->setCurrentIndex(i);
- });
-#ifdef Q_OS_IOS
- QScroller::grabGesture(ui->tabSelectList, QScroller::LeftMouseButtonGesture);
- ui->tabSelectList->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
-#endif
-
if(settings["launcher"]["updateOnStartup"].Bool())
UpdateDialog::showUpdateDialog(false);
}
@@ -122,12 +94,25 @@ void MainWindow::on_startGameButton_clicked()
startGame({});
}
-void MainWindow::on_tabSelectList_currentRowChanged(int currentRow)
-{
- ui->startGameButton->setEnabled(currentRow != TabRows::LOBBY);
-}
-
const CModList & MainWindow::getModList() const
{
return ui->modlistView->getModList();
}
+
+void MainWindow::on_modslistButton_clicked()
+{
+ ui->startGameButton->setEnabled(true);
+ ui->tabListWidget->setCurrentIndex(TabRows::MODS);
+}
+
+void MainWindow::on_settingsButton_clicked()
+{
+ ui->startGameButton->setEnabled(true);
+ ui->tabListWidget->setCurrentIndex(TabRows::SETTINGS);
+}
+
+void MainWindow::on_lobbyButton_clicked()
+{
+ ui->startGameButton->setEnabled(false);
+ ui->tabListWidget->setCurrentIndex(TabRows::LOBBY);
+}
diff --git a/launcher/mainwindow_moc.h b/launcher/mainwindow_moc.h
index 0603790de..189f3f4f3 100644
--- a/launcher/mainwindow_moc.h
+++ b/launcher/mainwindow_moc.h
@@ -46,5 +46,7 @@ public slots:
void on_startGameButton_clicked();
private slots:
- void on_tabSelectList_currentRowChanged(int currentRow);
+ void on_modslistButton_clicked();
+ void on_settingsButton_clicked();
+ void on_lobbyButton_clicked();
};
diff --git a/launcher/mainwindow_moc.ui b/launcher/mainwindow_moc.ui
index 01918642a..76f8cbfe1 100644
--- a/launcher/mainwindow_moc.ui
+++ b/launcher/mainwindow_moc.ui
@@ -31,153 +31,129 @@
- -
-
+
-
+
-
- 89
+
+ 1
0
- 89
- 89
+ 0
+ 0
-
- Qt::ScrollBarAlwaysOff
+
+ Settings
-
- Qt::ScrollBarAlwaysOff
-
-
- QAbstractScrollArea::AdjustToContents
-
-
- QAbstractItemView::NoEditTriggers
-
-
- false
-
-
- QAbstractItemView::NoDragDrop
-
-
- QAbstractItemView::SelectItems
+
+
+ icons:menu-settings.pngicons:menu-settings.png
- 89
- 89
+ 60
+ 60
-
- QListView::Static
-
-
- QListView::TopToBottom
-
-
- false
-
-
- QListView::Adjust
-
-
-
- 100
- 100
-
-
-
- QListView::IconMode
-
-
+
true
-
+
false
-
-
-
- Mods
-
-
-
- icons:menu-mods.pngicons:menu-mods.png
-
-
- -
-
- Settings
-
-
-
- icons:menu-settings.pngicons:menu-settings.png
-
-
- -
-
- Lobby
-
-
-
- icons:menu-lobby.pngicons:menu-lobby.png
-
-
+
+ true
+
+
+ Qt::ToolButtonTextUnderIcon
+
+
+ true
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 80
+ 0
+
+
+
+
-
-
+
+
+
+ 1
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+ Lobby
+
+
+
+ icons:menu-lobby.pngicons:menu-lobby.png
+
+
+
+ 60
+ 60
+
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+ Qt::ToolButtonTextUnderIcon
+
+
+ true
+
+
+
+ -
+
+
+
+ 1
+ 0
+
+
+
+
+ 0
+ 0
+
+
+ 75
true
- Start game
-
-
- Qt::AlignCenter
-
-
-
- -
-
-
- true
-
-
-
- 0
- 0
-
-
-
- 0
-
-
-
-
-
-
- -
-
-
-
- 89
- 0
-
-
-
-
- 89
- 89
-
-
-
- Play
+
@@ -198,6 +174,104 @@
Qt::ToolButtonIconOnly
+
+ false
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ Start game
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ true
+
+
+
+ 10
+ 0
+
+
+
+ 0
+
+
+
+
+
+
+ -
+
+
+
+ 1
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+ Mods
+
+
+
+ icons:menu-mods.pngicons:menu-mods.png
+
+
+
+ 60
+ 60
+
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ Qt::ToolButtonTextUnderIcon
+
+
+ true
+
+
+
+ -
+
+
+ QFrame::Plain
+
+
+ 1
+
+
+ 0
+
+
+ Qt::Vertical
+
@@ -225,7 +299,6 @@
- tabSelectList
startGameButton
diff --git a/launcher/modManager/cmodlistview_moc.ui b/launcher/modManager/cmodlistview_moc.ui
index 50542e75d..5e546e279 100644
--- a/launcher/modManager/cmodlistview_moc.ui
+++ b/launcher/modManager/cmodlistview_moc.ui
@@ -6,12 +6,12 @@
0
0
- 596
+ 680
342
- Form
+
@@ -252,11 +252,11 @@
true
- <!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" /><meta charset="utf-8" /><style type="text/css">
+ <!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:10pt; font-weight:400; font-style:normal;">
-<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:11pt;"><br /></p></body></html>
+</style></head><body style=" font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;">
+<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:'Ubuntu'; font-size:11pt;"><br /></p></body></html>
true
diff --git a/launcher/settingsView/csettingsview_moc.cpp b/launcher/settingsView/csettingsview_moc.cpp
index fbae12bec..f19164771 100644
--- a/launcher/settingsView/csettingsview_moc.cpp
+++ b/launcher/settingsView/csettingsview_moc.cpp
@@ -72,12 +72,10 @@ void CSettingsView::loadSettings()
#ifdef Q_OS_IOS
ui->comboBoxFullScreen->setCurrentIndex(true);
- ui->checkBoxFullScreen->setChecked(false);
- for (auto widget : std::initializer_list{ui->comboBoxFullScreen, ui->checkBoxFullScreen})
- widget->setDisabled(true);
+ ui->comboBoxFullScreen->setDisabled(true);
#else
ui->comboBoxFullScreen->setCurrentIndex(settings["video"]["fullscreen"].Bool());
- ui->checkBoxFullScreen->setChecked(settings["video"]["realFullscreen"].Bool());
+ //ui->checkBoxFullScreen->setChecked(settings["video"]["realFullscreen"].Bool());
#endif
ui->comboBoxFriendlyAI->setCurrentText(QString::fromStdString(settings["server"]["friendlyAI"].String()));
@@ -192,14 +190,10 @@ void CSettingsView::on_comboBoxResolution_currentTextChanged(const QString & arg
void CSettingsView::on_comboBoxFullScreen_currentIndexChanged(int index)
{
- Settings node = settings.write["video"]["fullscreen"];
- node->Bool() = index;
-}
-
-void CSettingsView::on_checkBoxFullScreen_stateChanged(int state)
-{
- Settings node = settings.write["video"]["realFullscreen"];
- node->Bool() = state;
+ Settings nodeFullscreen = settings.write["video"]["fullscreen"];
+ Settings nodeRealFullscreen = settings.write["video"]["realFullscreen"];
+ nodeFullscreen->Bool() = index != 0;
+ nodeFullscreen->Bool() = index == 2;
}
void CSettingsView::on_comboBoxAutoCheck_currentIndexChanged(int index)
diff --git a/launcher/settingsView/csettingsview_moc.h b/launcher/settingsView/csettingsview_moc.h
index fba5bd2c6..6ca30a741 100644
--- a/launcher/settingsView/csettingsview_moc.h
+++ b/launcher/settingsView/csettingsview_moc.h
@@ -32,8 +32,6 @@ public slots:
void fillValidResolutions(bool isExtraResolutionsModEnabled);
private slots:
- void on_checkBoxFullScreen_stateChanged(int state);
-
void on_comboBoxResolution_currentTextChanged(const QString & arg1);
void on_comboBoxFullScreen_currentIndexChanged(int index);
diff --git a/launcher/settingsView/csettingsview_moc.ui b/launcher/settingsView/csettingsview_moc.ui
index a9c12aadb..27568bafa 100644
--- a/launcher/settingsView/csettingsview_moc.ui
+++ b/launcher/settingsView/csettingsview_moc.ui
@@ -11,7 +11,7 @@
- Form
+
@@ -26,47 +26,67 @@
0
- -
-
-
-
- true
-
+
-
+
+
+ false
- AI on the map
+ Change
- -
-
-
-
- true
-
-
+
-
+
- Video
+ Open
- -
-
+
-
+
- Show intro
+ User data directory
- -
-
-
- 1024
+
-
+
+
+ Qt::Horizontal
-
- 65535
+
+ QSizePolicy::Fixed
-
- 3030
+
+
+ 8
+ 20
+
+
+
+
+ -
+
+
+ 1
+
+
-
+
+ Off
+
+
+ -
+
+ On
+
+
+
+
+ -
+
+
+ Open
@@ -79,28 +99,7 @@
- /usr/share/vcmi
-
-
-
- -
-
-
- Heroes III character set
-
-
-
- -
-
-
- Real fullscreen mode
-
-
-
- -
-
-
- Resolution
+ /usr/share/vcmi
@@ -111,22 +110,63 @@
- -
-
-
- false
+
-
+
+
+ BattleAI
-
-
- 150
- 0
-
+
-
+
+ BattleAI
+
+
+ -
+
+ StupidAI
+
+
+
+
+ -
+
+
+ 1024
+
+
+ 65535
+
+
+ 3030
+
+
+
+ -
+
+
+
+ 75
+ true
+
- /home/user/.vcmi
+ Repositories
-
- true
+
+
+ -
+
+
+ -
+
+
+ Check for updates
+
+
+
+ -
+
+
+ Neutral AI
@@ -145,12 +185,25 @@
On
+ -
+
+ Real
+
+
- -
+
-
+
+
+ Open
+
+
+
+ -
+ 75
true
@@ -159,210 +212,8 @@
- -
-
-
- QPlainTextEdit::NoWrap
-
-
- http://downloads.vcmi.eu/Mods/repository.json
-
-
-
- -
-
-
- Open
-
-
-
- -
-
-
- Player AI
-
-
-
- -
-
-
-
- true
-
-
-
- Repositories
-
-
-
- -
-
-
-
-
- VCAI
-
-
- -
-
- Nullkiller
-
-
-
-
- -
-
-
- Display index
-
-
-
- -
-
-
- 1
-
-
-
-
- Off
-
-
- -
-
- On
-
-
-
-
- -
-
-
-
-
- BattleAI
-
-
- -
-
- StupidAI
-
-
-
-
- -
-
-
- false
-
-
- BattleAI
-
-
-
-
- BattleAI
-
-
- -
-
- StupidAI
-
-
-
-
- -
-
-
- Qt::Horizontal
-
-
- QSizePolicy::Fixed
-
-
-
- 8
- 20
-
-
-
-
- -
-
-
- Open
-
-
-
- -
-
-
-
- true
-
-
-
- Launcher Settings
-
-
-
- -
-
-
- Extra data directory
-
-
-
- -
-
-
-
- 0
- 22
-
-
-
- Enemy AI
-
-
-
- -
-
-
- false
-
-
- Change
-
-
-
- -
-
-
- -
-
-
- Neutral AI
-
-
-
- -
-
-
- -
-
-
- Qt::Vertical
-
-
- QSizePolicy::Fixed
-
-
-
- 56
- 8
-
-
-
-
- -
-
+
-
+
false
@@ -373,158 +224,21 @@
- /home/user/.vcmi
+ /home/user/.vcmi
true
- -
-
-
- 1
-
-
-
-
- Off
-
-
- -
-
- On
-
-
-
-
- -
-
-
- 1
-
-
-
-
- Off
-
-
- -
-
- On
-
-
-
-
- -
-
-
- false
-
-
- BattleAI
-
-
-
-
- BattleAI
-
-
- -
-
- StupidAI
-
-
-
-
- -
-
-
- Qt::Vertical
-
-
- QSizePolicy::Fixed
-
-
-
- 20
- 8
-
-
-
-
- -
-
-
-
- true
- true
- false
-
-
+
-
+
- AI in the battlefield
+ Player AI
- -
-
-
- Check repositories on startup
-
-
-
- -
-
-
-
- 0
- 22
-
-
-
- Friendly AI
-
-
-
- -
-
-
- Log files directory
-
-
-
- -
-
-
-
- true
-
-
-
- Data Directories
-
-
-
- -
-
-
- User data directory
-
-
-
- -
-
-
- Open
-
-
-
- -
-
-
- Network port
-
-
-
- -
+
-
-
@@ -558,34 +272,331 @@
- -
+
-
+
+
+
+ 0
+ 22
+
+
+
+ Friendly AI
+
+
+
+ -
+
+
+ Resolution
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ AI on the map
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Fixed
+
+
+
+ 20
+ 8
+
+
+
+
+ -
+
+
+ -
Autosave
- -
-
+
-
+
- Check for updates
+ Display index
- -
+
-
+
+
+ false
+
+
+
+ 150
+ 0
+
+
+
+ /home/user/.vcmi
+
+
+ true
+
+
+
+ -
+
+
+ Check repositories on startup
+
+
+
+ -
+
+
+ Network port
+
+
+
+ -
+
+
+ VCAI
+
+
-
+
+ VCAI
+
+
+ -
+
+ Nullkiller
+
+
+
+
+ -
+
+
+ false
+
+
+ BattleAI
+
+
-
+
+ BattleAI
+
+
+ -
+
+ StupidAI
+
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ Data Directories
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ Video
+
+
+
+ -
+
+
+ Heroes III character set
+
+
+
+ -
+
+
+ false
+
+
+ BattleAI
+
+
-
+
+ BattleAI
+
+
+ -
+
+ StupidAI
+
+
+
+
+ -
+
+
+ Extra data directory
+
+
+
+ -
+
+
+ 1
+
+
-
+
+ Off
+
+
+ -
+
+ On
+
+
+
+
+ -
+
+
+ Log files directory
+
+
+
+ -
+
+
+ QPlainTextEdit::NoWrap
+
+
+ http://downloads.vcmi.eu/Mods/repository.json
+
+
+
+ -
+
+
+ Show intro
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ Launcher Settings
+
+
+
+ -
Build version
- -
+
-
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Fixed
+
+
+
+ 56
+ 8
+
+
+
+
+ -
+
+
+
+ 0
+ 22
+
+
+
+ Enemy AI
+
+
+
+ -
+
+
+ 1
+
+
-
+
+ Off
+
+
+ -
+
+ On
+
+
+
+
+ -
+ -
+
+
+
+ 75
+ true
+ true
+ false
+
+
+
+ AI in the battlefield
+
+
+
diff --git a/launcher/translation/launcher_uk.ts b/launcher/translation/launcher_uk.ts
new file mode 100644
index 000000000..17ea2be7a
--- /dev/null
+++ b/launcher/translation/launcher_uk.ts
@@ -0,0 +1,536 @@
+
+
+
+
+ CModListView
+
+
+
+ Фільтр
+
+
+
+
+ Усі модифікації
+
+
+
+
+ Усі доступні
+
+
+
+
+ Встановлені
+
+
+
+
+ Доступні оновлення
+
+
+
+
+ Активні
+
+
+
+
+ Неактивні
+
+
+
+
+ Завантажити та оновити репозиторії
+
+
+
+
+
+ Опис
+
+
+
+
+ Зміни
+
+
+
+
+ Знімки
+
+
+
+
+ Показати подробиці
+
+
+
+
+ Видалити
+
+
+
+
+ Активувати
+
+
+
+
+ Деактивувати
+
+
+
+
+ Оновити
+
+
+
+
+ Встановити
+
+
+
+
+ %p% (%v КБ з %m КБ)
+
+
+
+
+ Відмінити
+
+
+
+
+ Назва модифікації
+
+
+
+
+ Встановлена версія
+
+
+
+
+ Найновіша версія
+
+
+
+
+ Розмір для завантаження
+
+
+
+
+ Автори
+
+
+
+
+ Ліцензія
+
+
+
+
+ Домашня сторінка
+
+
+
+
+
+ Сумісність
+
+
+
+
+
+ Необхідна версія VCMI
+
+
+
+
+ Підтримувана версія VCMI
+
+
+
+
+ Підтримувані версії VCMI
+
+
+
+
+ Необхідні модифікації
+
+
+
+
+ Конфліктуючі модифікації
+
+
+
+
+ Цю модифікацію не можна встановити чи активувати, оскільки відсутні наступні залежності
+
+
+
+
+ Цю модифікацію не можна ввімкнути, оскільки наступні модифікації несумісні з цією модифікацією
+
+
+
+
+ Цю модифікацію не можна відключити, оскільки вона необхідна для запуску наступних модифікацій
+
+
+
+
+ Цю модифікацію не можна видалити або оновити, оскільки вона необхідна для запуску наступних модифікацій
+
+
+
+
+ Це вкладена модифікація, і її не можна встановити або видалити окремо від батьківської модифікації
+
+
+
+
+ Примітки
+
+
+
+
+ Знімок екрану %1
+
+
+
+ CSettingsView
+
+
+
+ Змінити
+
+
+
+
+
+
+ Відкрити
+
+
+
+
+ Тека даних користувача
+
+
+
+
+
+
+
+ Вимкнено
+
+
+
+
+
+
+
+ Увімкнено
+
+
+
+
+ Повноекранний режим
+
+
+
+
+ Штучний інтелект на полі бою
+
+
+
+
+ Репозиторії
+
+
+
+
+ Оновити зараз
+
+
+
+
+ Нейтральний ШІ
+
+
+
+
+ Повний
+
+
+
+
+ Загальні налаштування
+
+
+
+
+ ШІ гравців
+
+
+
+
+ Центральноєвропейська (Windows 1250)
+
+
+
+
+ Кирилиця (Windows 1251)
+
+
+
+
+ Західноєвропейська (Windows 1252)
+
+
+
+
+ Спрощена китайська (GBK)
+
+
+
+
+ Спрощена китайська (GB2312)
+
+
+
+
+ Корейська (Windows 949)
+
+
+
+
+ Дружній ШІ
+
+
+
+
+ Роздільна здатність
+
+
+
+
+ Штучний інтелект на карті пригод
+
+
+
+
+ Автозбереження
+
+
+
+
+ Дісплей
+
+
+
+
+ Перевірка репозиторіїв при запуску
+
+
+
+
+ Мережевий порт
+
+
+
+
+ Теки даних гри
+
+
+
+
+ Графіка
+
+
+
+
+ Кодування Heroes III
+
+
+
+
+ Додаткова тека даних
+
+
+
+
+ Тека файлів журналу
+
+
+
+
+ Вступні відео
+
+
+
+
+ Налаштування лаунчера
+
+
+
+
+ Версія збірки
+
+
+
+
+ Ворожий ШІ
+
+
+
+ ImageViewer
+
+
+
+ Перегляд зображень
+
+
+
+ Lobby
+
+
+
+ Підключитися
+
+
+
+
+ Ім'я користувача
+
+
+
+
+ Сервер
+
+
+
+
+ Сесія
+
+
+
+
+ Гравці
+
+
+
+
+ Створити кімнату
+
+
+
+
+ Приєднатися до кімнати
+
+
+
+
+ Готовність!
+
+
+
+
+ Модифікації, що не збігаються
+
+
+
+
+ Вийти з кімнати
+
+
+
+
+ Виключити гравця
+
+
+
+
+ Гравці у кімнаті
+
+
+
+ LobbyRoomRequest
+
+
+
+ Налаштування кімнати
+
+
+
+
+ Назва кімнати
+
+
+
+
+ Максимум гравців
+
+
+
+
+ Пароль (за бажанням)
+
+
+
+ MainWindow
+
+
+
+ VCMI Launcher
+
+
+
+
+ Модифікації
+
+
+
+
+ Налаштування
+
+
+
+
+ Лобі
+
+
+
+
+ Грати!
+
+
+
+
+ Грати!
+
+
+
+ UpdateDialog
+
+
+
+ У вас встановлена остання версія
+
+
+
+
+ Закрити
+
+
+
+
+ Перевіряти наявність оновлень при запуску
+
+
+
From 1696db8a3c6617462541a95d94d144c8b97d21b6 Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Sun, 25 Dec 2022 13:19:16 +0200
Subject: [PATCH 002/197] Launcher translation upgrade, still WIP:
- launcher can be re-translated without restart
- mod info (name/description/etc) can have localized versions
---
Mods/vcmi/mod.json | 7 +
launcher/CMakeLists.txt | 3 +-
launcher/lobby/lobby_moc.cpp | 8 +
launcher/lobby/lobby_moc.h | 1 +
launcher/lobby/lobbyroomrequest_moc.cpp | 8 +
launcher/lobby/lobbyroomrequest_moc.h | 1 +
launcher/main.cpp | 4 -
launcher/mainwindow_moc.cpp | 21 +
launcher/mainwindow_moc.h | 3 +
launcher/mainwindow_moc.ui | 225 +++---
launcher/modManager/cmodlist.cpp | 29 +-
launcher/modManager/cmodlistmodel_moc.cpp | 24 +-
launcher/modManager/cmodlistview_moc.cpp | 13 +-
launcher/modManager/cmodlistview_moc.h | 1 +
launcher/modManager/imageviewer_moc.cpp | 8 +
launcher/modManager/imageviewer_moc.h | 1 +
launcher/settingsView/csettingsview_moc.cpp | 27 +
launcher/settingsView/csettingsview_moc.h | 3 +
launcher/settingsView/csettingsview_moc.ui | 725 ++++++++++----------
launcher/translation/launcher_uk.ts | 554 +++++++++++++--
20 files changed, 1153 insertions(+), 513 deletions(-)
diff --git a/Mods/vcmi/mod.json b/Mods/vcmi/mod.json
index 5c07c3150..2c212544f 100644
--- a/Mods/vcmi/mod.json
+++ b/Mods/vcmi/mod.json
@@ -1,6 +1,13 @@
{
"name" : "VCMI essential files",
"description" : "Essential files required for VCMI to run correctly",
+
+ "translation_uk" : {
+ "name" : "VCMI - ключові файли",
+ "description" : "Ключові файли необхідні для повноцінної роботи VCMI",
+ "author" : "Команда VCMI",
+ "modType" : "Графіка",
+ },
"version" : "1.0",
"author" : "VCMI Team",
diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt
index 319b1ea06..acfa79e0e 100644
--- a/launcher/CMakeLists.txt
+++ b/launcher/CMakeLists.txt
@@ -88,7 +88,7 @@ else()
endif()
find_package(Qt5LinguistTools)
-set(launcher_TS translation/launcher_pl.ts translation/launcher_ru.ts translation/launcher_uk.ts)
+set(launcher_TS translation/launcher_en.ts translation/launcher_pl.ts translation/launcher_ru.ts translation/launcher_uk.ts)
qt5_add_translation( QM_FILES ${launcher_TS} )
if(WIN32)
@@ -160,4 +160,5 @@ else()
install(FILES "eu.vcmi.VCMI.metainfo.xml" DESTINATION share/metainfo)
endif()
endif()
+
install(DIRECTORY icons DESTINATION ${ICONS_DESTINATION})
diff --git a/launcher/lobby/lobby_moc.cpp b/launcher/lobby/lobby_moc.cpp
index ca3218c3b..5dc57b79d 100644
--- a/launcher/lobby/lobby_moc.cpp
+++ b/launcher/lobby/lobby_moc.cpp
@@ -35,6 +35,14 @@ Lobby::Lobby(QWidget *parent) :
ui->kickButton->setVisible(false);
}
+void Lobby::changeEvent(QEvent *event)
+{
+ if ( event->type() == QEvent::LanguageChange)
+ {
+ ui->retranslateUi(this);
+ }
+}
+
Lobby::~Lobby()
{
delete ui;
diff --git a/launcher/lobby/lobby_moc.h b/launcher/lobby/lobby_moc.h
index 364500223..4fdce76e0 100644
--- a/launcher/lobby/lobby_moc.h
+++ b/launcher/lobby/lobby_moc.h
@@ -19,6 +19,7 @@ class Lobby : public QWidget
{
Q_OBJECT
+ void changeEvent(QEvent *event) override;
public:
explicit Lobby(QWidget *parent = nullptr);
~Lobby();
diff --git a/launcher/lobby/lobbyroomrequest_moc.cpp b/launcher/lobby/lobbyroomrequest_moc.cpp
index ec42e182d..d8e10e524 100644
--- a/launcher/lobby/lobbyroomrequest_moc.cpp
+++ b/launcher/lobby/lobbyroomrequest_moc.cpp
@@ -27,6 +27,14 @@ LobbyRoomRequest::LobbyRoomRequest(SocketLobby & socket, const QString & room, c
show();
}
+void LobbyRoomRequest::changeEvent(QEvent *event)
+{
+ if ( event->type() == QEvent::LanguageChange)
+ {
+ ui->retranslateUi(this);
+ }
+}
+
LobbyRoomRequest::~LobbyRoomRequest()
{
delete ui;
diff --git a/launcher/lobby/lobbyroomrequest_moc.h b/launcher/lobby/lobbyroomrequest_moc.h
index 4595c5ef5..eff7161e4 100644
--- a/launcher/lobby/lobbyroomrequest_moc.h
+++ b/launcher/lobby/lobbyroomrequest_moc.h
@@ -21,6 +21,7 @@ class LobbyRoomRequest : public QDialog
{
Q_OBJECT
+ void changeEvent(QEvent *event) override;
public:
explicit LobbyRoomRequest(SocketLobby & socket, const QString & room, const QMap & mods, QWidget *parent = nullptr);
~LobbyRoomRequest();
diff --git a/launcher/main.cpp b/launcher/main.cpp
index 8cb856c22..acc5f0cde 100644
--- a/launcher/main.cpp
+++ b/launcher/main.cpp
@@ -33,10 +33,6 @@ int main(int argc, char * argv[])
#endif
QApplication vcmilauncher(argc, argv);
- //QTranslator translator;
- //translator.load("./launcher_uk.qm");
- //vcmilauncher.installTranslator(&translator);
-
MainWindow mainWindow;
mainWindow.show();
result = vcmilauncher.exec();
diff --git a/launcher/mainwindow_moc.cpp b/launcher/mainwindow_moc.cpp
index 38951556a..5ec14e8a2 100644
--- a/launcher/mainwindow_moc.cpp
+++ b/launcher/mainwindow_moc.cpp
@@ -79,6 +79,14 @@ MainWindow::MainWindow(QWidget * parent)
UpdateDialog::showUpdateDialog(false);
}
+void MainWindow::changeEvent(QEvent *event)
+{
+ if ( event->type() == QEvent::LanguageChange)
+ {
+ ui->retranslateUi(this);
+ }
+}
+
MainWindow::~MainWindow()
{
//save window settings
@@ -116,3 +124,16 @@ void MainWindow::on_lobbyButton_clicked()
ui->startGameButton->setEnabled(false);
ui->tabListWidget->setCurrentIndex(TabRows::LOBBY);
}
+
+void MainWindow::updateTranslation()
+{
+ std::string languageCode = settings["general"]["language"].String();
+
+ QString translationFile = "./launcher_" + QString::fromStdString(languageCode) + ".qm";
+
+ qApp->removeTranslator(&translator);
+ if (!translator.load(translationFile))
+ logGlobal->error("Failed to load translation");
+ if (!qApp->installTranslator(&translator))
+ logGlobal->error("Failed to install translator");
+}
diff --git a/launcher/mainwindow_moc.h b/launcher/mainwindow_moc.h
index 189f3f4f3..1ac2a85a8 100644
--- a/launcher/mainwindow_moc.h
+++ b/launcher/mainwindow_moc.h
@@ -26,6 +26,7 @@ class MainWindow : public QMainWindow
{
Q_OBJECT
+ QTranslator translator;
private:
Ui::MainWindow * ui;
void load();
@@ -35,12 +36,14 @@ private:
MODS = 0, SETTINGS = 1, LOBBY = 2
};
+ void changeEvent(QEvent *event) override;
public:
explicit MainWindow(QWidget * parent = 0);
~MainWindow();
const CModList & getModList() const;
+ void updateTranslation();
public slots:
void on_startGameButton_clicked();
diff --git a/launcher/mainwindow_moc.ui b/launcher/mainwindow_moc.ui
index 76f8cbfe1..e54677155 100644
--- a/launcher/mainwindow_moc.ui
+++ b/launcher/mainwindow_moc.ui
@@ -31,6 +31,22 @@
+ -
+
+
+ QFrame::Plain
+
+
+ 1
+
+
+ 0
+
+
+ Qt::Vertical
+
+
+
-
@@ -75,64 +91,42 @@
- -
-
-
- Qt::Vertical
-
-
-
- 80
- 0
-
-
-
-
- -
-
-
-
- 1
- 0
-
-
-
-
- 0
- 0
-
+
-
+
+
+
+ 75
+ true
+
- Lobby
+ Start game
-
-
- icons:menu-lobby.pngicons:menu-lobby.png
-
-
-
- 60
- 60
-
-
-
- true
-
-
- false
-
-
- true
-
-
- Qt::ToolButtonTextUnderIcon
-
-
- true
+
+ Qt::AlignCenter
- -
+
-
+
+
+ true
+
+
+
+ 10
+ 0
+
+
+
+ 0
+
+
+
+
+
+
+ -
@@ -179,39 +173,48 @@
- -
-
-
-
- 75
- true
-
-
-
- Start game
-
-
- Qt::AlignCenter
-
-
-
- -
-
-
- true
-
+
-
+
-
- 10
+
+ 1
0
-
- 0
+
+
+ 0
+ 0
+
+
+
+ Lobby
+
+
+
+ icons:menu-lobby.pngicons:menu-lobby.png
+
+
+
+ 60
+ 60
+
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+ Qt::ToolButtonTextUnderIcon
+
+
+ true
-
-
-
-
@@ -258,20 +261,60 @@
- -
-
-
- QFrame::Plain
-
-
- 1
-
-
- 0
-
+
-
+
Qt::Vertical
+
+
+ 80
+ 0
+
+
+
+
+ -
+
+
+
+ 1
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 75
+ true
+
+
+
+ Editor
+
+
+
+ 60
+ 60
+
+
+
+ false
+
+
+ false
+
+
+ Qt::ToolButtonIconOnly
+
+
+ false
+
diff --git a/launcher/modManager/cmodlist.cpp b/launcher/modManager/cmodlist.cpp
index e08c99ce4..0146c983c 100644
--- a/launcher/modManager/cmodlist.cpp
+++ b/launcher/modManager/cmodlist.cpp
@@ -10,6 +10,7 @@
#include "StdInc.h"
#include "cmodlist.h"
+#include "../lib/CConfigHandler.h"
#include "../../lib/JsonNode.h"
#include "../../lib/filesystem/CFileInputStream.h"
#include "../../lib/GameConstants.h"
@@ -157,23 +158,35 @@ QString CModEntry::getName() const
QVariant CModEntry::getValue(QString value) const
{
+ QString lang = QString::fromStdString(settings["general"]["language"].String());
+ QString langValue = "translation_" + lang;
+
+ // Priorities
+ // 1) data from newest version
+ // 2) data from preferred language
+
+ bool useRepositoryData = repository.contains(value);
+
if(repository.contains(value) && localData.contains(value))
{
// value is present in both repo and locally installed. Select one from latest version
QString installedVer = localData["installedVersion"].toString();
QString availableVer = repository["latestVersion"].toString();
- if(compareVersions(installedVer, availableVer))
- return repository[value];
- else
- return localData[value];
+ useRepositoryData = compareVersions(installedVer, availableVer);
}
- if(repository.contains(value))
- return repository[value];
+ auto & storage = useRepositoryData ? repository : localData;
- if(localData.contains(value))
- return localData[value];
+ if (storage.contains(langValue))
+ {
+ auto langStorage = storage[langValue].toMap();
+ if (langStorage.contains(value))
+ return langStorage[value];
+ }
+
+ if (storage.contains(value))
+ return storage[value];
return QVariant();
}
diff --git a/launcher/modManager/cmodlistmodel_moc.cpp b/launcher/modManager/cmodlistmodel_moc.cpp
index fb2d3f1e0..59e325241 100644
--- a/launcher/modManager/cmodlistmodel_moc.cpp
+++ b/launcher/modManager/cmodlistmodel_moc.cpp
@@ -25,16 +25,6 @@ static const QString names[ModFields::COUNT] =
"author"
};
-static const QString header[ModFields::COUNT] =
-{
- "Name",
- "", // status icon
- "", // status icon
- "Type",
- "Version",
- "Size",
- "Author"
-};
}
namespace ModStatus
@@ -155,13 +145,25 @@ Qt::ItemFlags CModListModel::flags(const QModelIndex &) const
QVariant CModListModel::headerData(int section, Qt::Orientation orientation, int role) const
{
+ static const QString header[ModFields::COUNT] =
+ {
+ QT_TR_NOOP("Name"),
+ QT_TR_NOOP(""), // status icon
+ QT_TR_NOOP(""), // status icon
+ QT_TR_NOOP("Type"),
+ QT_TR_NOOP("Version"),
+ QT_TR_NOOP("Size"),
+ QT_TR_NOOP("Author")
+ };
+
if(role == Qt::DisplayRole && orientation == Qt::Horizontal)
- return ModFields::header[section];
+ return QCoreApplication::translate("ModFields", header[section].toStdString().c_str());
return QVariant();
}
void CModListModel::reloadRepositories()
{
+ //emit headerDataChanged(Qt::Horizontal, 0, -1 );
beginResetModel();
endResetModel();
}
diff --git a/launcher/modManager/cmodlistview_moc.cpp b/launcher/modManager/cmodlistview_moc.cpp
index 00f115633..f977d3bac 100644
--- a/launcher/modManager/cmodlistview_moc.cpp
+++ b/launcher/modManager/cmodlistview_moc.cpp
@@ -34,6 +34,15 @@ void CModListView::setupModModel()
this, &CModListView::extraResolutionsEnabledChanged);
}
+void CModListView::changeEvent(QEvent *event)
+{
+ if ( event->type() == QEvent::LanguageChange)
+ {
+ ui->retranslateUi(this);
+ modModel->reloadRepositories();
+ }
+}
+
void CModListView::setupFilterModel()
{
filterModel = new CModFilterModel(modModel, this);
@@ -227,8 +236,8 @@ QString CModListView::genModInfoText(CModEntry & mod)
QString textTemplate = prefix + "
%2
";
QString listTemplate = "%1: %2
";
QString noteTemplate = "%1
";
- QString compatibleString = prefix + "Mod is compatible";
- QString incompatibleString = redPrefix + "Mod is incompatible";
+ QString compatibleString = prefix + tr("Mod is compatible") + "";
+ QString incompatibleString = redPrefix + tr("Mod is incompatible") + "";
QString supportedVersions = redPrefix + "%2 %3 %4";
QString result;
diff --git a/launcher/modManager/cmodlistview_moc.h b/launcher/modManager/cmodlistview_moc.h
index 688a79d05..dec1c9e8e 100644
--- a/launcher/modManager/cmodlistview_moc.h
+++ b/launcher/modManager/cmodlistview_moc.h
@@ -64,6 +64,7 @@ class CModListView : public QWidget
QString genChangelogText(CModEntry & mod);
QString genModInfoText(CModEntry & mod);
+ void changeEvent(QEvent *event) override;
signals:
void extraResolutionsEnabledChanged(bool enabled);
diff --git a/launcher/modManager/imageviewer_moc.cpp b/launcher/modManager/imageviewer_moc.cpp
index 8022250a9..107419073 100644
--- a/launcher/modManager/imageviewer_moc.cpp
+++ b/launcher/modManager/imageviewer_moc.cpp
@@ -20,6 +20,14 @@ ImageViewer::ImageViewer(QWidget * parent)
ui->setupUi(this);
}
+void ImageViewer::changeEvent(QEvent *event)
+{
+ if ( event->type() == QEvent::LanguageChange)
+ {
+ ui->retranslateUi(this);
+ }
+}
+
ImageViewer::~ImageViewer()
{
delete ui;
diff --git a/launcher/modManager/imageviewer_moc.h b/launcher/modManager/imageviewer_moc.h
index 6e26efee2..771a4e9a4 100644
--- a/launcher/modManager/imageviewer_moc.h
+++ b/launcher/modManager/imageviewer_moc.h
@@ -21,6 +21,7 @@ class ImageViewer : public QDialog
{
Q_OBJECT
+ void changeEvent(QEvent *event) override;
public:
explicit ImageViewer(QWidget * parent = 0);
~ImageViewer();
diff --git a/launcher/settingsView/csettingsview_moc.cpp b/launcher/settingsView/csettingsview_moc.cpp
index f19164771..b06b2f95e 100644
--- a/launcher/settingsView/csettingsview_moc.cpp
+++ b/launcher/settingsView/csettingsview_moc.cpp
@@ -11,6 +11,8 @@
#include "csettingsview_moc.h"
#include "ui_csettingsview_moc.h"
+#include "mainwindow_moc.h"
+
#include "../jsonutils.h"
#include "../launcherdirs.h"
#include "../updatedialog_moc.h"
@@ -44,6 +46,15 @@ static const std::string knownEncodingsList[] = //TODO: remove hardcode
"CP949" // extension of EUC-KR.
};
+/// List of tags of languages that can be selected from Launcher (and have translation for Launcher)
+static const std::string languageTagList[] =
+{
+ "en", // english
+ "pl", // polish
+ "ru", // russian
+ "uk", // ukrainian
+};
+
void CSettingsView::setDisplayList()
{
QStringList list;
@@ -301,3 +312,19 @@ void CSettingsView::on_updatesButton_clicked()
UpdateDialog::showUpdateDialog(true);
}
+
+void CSettingsView::on_comboBoxLanguage_currentIndexChanged(int index)
+{
+ Settings node = settings.write["general"]["language"];
+ node->String() = languageTagList[index];
+
+ dynamic_cast(qApp->activeWindow())->updateTranslation();
+}
+
+void CSettingsView::changeEvent(QEvent *event)
+{
+ if ( event->type() == QEvent::LanguageChange)
+ {
+ ui->retranslateUi(this);
+ }
+}
diff --git a/launcher/settingsView/csettingsview_moc.h b/launcher/settingsView/csettingsview_moc.h
index 6ca30a741..1d54b3ffa 100644
--- a/launcher/settingsView/csettingsview_moc.h
+++ b/launcher/settingsView/csettingsview_moc.h
@@ -25,6 +25,7 @@ public:
void loadSettings();
void setDisplayList();
+ void changeEvent(QEvent *event) override;
bool isExtraResolutionsModEnabled{};
@@ -68,6 +69,8 @@ private slots:
void on_updatesButton_clicked();
+ void on_comboBoxLanguage_currentIndexChanged(int index);
+
private:
Ui::CSettingsView * ui;
diff --git a/launcher/settingsView/csettingsview_moc.ui b/launcher/settingsView/csettingsview_moc.ui
index 27568bafa..20eb49c43 100644
--- a/launcher/settingsView/csettingsview_moc.ui
+++ b/launcher/settingsView/csettingsview_moc.ui
@@ -26,67 +26,35 @@
0
- -
-
+
-
+
false
-
- Change
-
-
-
- -
-
-
- Open
-
-
-
- -
-
-
- User data directory
-
-
-
- -
-
-
- Qt::Horizontal
-
-
- QSizePolicy::Fixed
-
-
+
- 8
- 20
+ 150
+ 0
-
-
- -
-
-
- 1
+
+ /home/user/.vcmi
+
+
+ true
-
-
-
- Off
-
-
- -
-
- On
-
-
- -
-
+
-
+
+
+
+ 75
+ true
+
+
- Open
+ Launcher Settings
@@ -103,6 +71,47 @@
+ -
+
+
+ false
+
+
+ Change
+
+
+
+ -
+
+
+ 1
+
+
-
+
+ Off
+
+
+ -
+
+ On
+
+
+
+
+ -
+
+
+ Open
+
+
+
+ -
+
+
+ Heroes III character set
+
+
+
-
@@ -110,37 +119,57 @@
- -
-
-
- BattleAI
+
-
+
+
+ 1
-
- BattleAI
+ Off
-
- StupidAI
+ On
- -
-
-
- 1024
-
-
- 65535
-
-
- 3030
+
-
+
+
+ Log files directory
- -
+
-
+
+
+ false
+
+
+
+ 150
+ 0
+
+
+
+ /home/user/.vcmi
+
+
+ true
+
+
+
+ -
+
+
+ Autosave
+
+
+
+ -
@@ -153,20 +182,123 @@
- -
-
-
- -
+
-
Check for updates
- -
-
+
-
+
+
+ -
+
- Neutral AI
+ Check repositories on startup
+
+
+
+ -
+
+
+ Open
+
+
+
+ -
+
+
+ Player AI
+
+
+
+ -
+
+
+ Display index
+
+
+
+ -
+
+
+
+ 75
+ true
+ true
+ false
+
+
+
+ AI in the battlefield
+
+
+
+ -
+
+
+ QPlainTextEdit::NoWrap
+
+
+ http://downloads.vcmi.eu/Mods/repository.json
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ General
+
+
+
+ -
+
+
+ Show intro
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Fixed
+
+
+
+ 20
+ 8
+
+
+
+
+ -
+
+
+ Build version
+
+
+
+ -
+
+
+ Extra data directory
+
+
+
+ -
+
+
+ Resolution
@@ -192,15 +324,25 @@
- -
-
-
- Open
+
-
+
+
+ 1
+
-
+
+ Off
+
+
+ -
+
+ On
+
+
- -
-
+
-
+
75
@@ -208,37 +350,137 @@
- General
+ AI on the map
- -
-
-
- false
+
-
+
+
+ VCAI
-
+
-
+
+ VCAI
+
+
+ -
+
+ Nullkiller
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
- 150
- 0
+ 8
+ 20
+
+
+ -
+
+
+ -
+
- /home/user/.vcmi
-
-
- true
+ Open
- -
-
+
-
+
+
+
+ 75
+ true
+
+
- Player AI
+ Video
- -
+
-
+
+
+
+ 75
+ true
+
+
+
+ Data Directories
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Fixed
+
+
+
+ 56
+ 8
+
+
+
+
+ -
+
+
+ User data directory
+
+
+
+ -
+
+
+ Network port
+
+
+
+ -
+
+
+ 1024
+
+
+ 65535
+
+
+ 3030
+
+
+
+ -
+
+
+ VCMI Language
+
+
+
+ -
+
+
+
+
+
+
+ -
-
@@ -272,127 +514,39 @@
- -
-
-
-
- 0
- 22
-
-
-
- Friendly AI
-
-
-
- -
-
-
- Resolution
-
-
-
- -
-
-
-
- 75
- true
-
-
-
- AI on the map
-
-
-
- -
-
-
- Qt::Vertical
-
-
- QSizePolicy::Fixed
-
-
-
- 20
- 8
-
-
-
-
- -
-
-
- -
-
-
- Autosave
-
-
-
- -
-
-
- Display index
-
-
-
- -
-
-
- false
-
-
-
- 150
- 0
-
-
-
- /home/user/.vcmi
-
-
- true
-
-
-
- -
-
-
- Check repositories on startup
-
-
-
- -
-
-
- Network port
-
-
-
- -
-
-
- VCAI
-
+
-
+
-
- VCAI
+ English
-
- Nullkiller
+ Polska (Polish)
+
+
+ -
+
+ Русский (Russian)
+
+
+ -
+
+ Українська (Ukrainian)
- -
-
-
- false
+
-
+
+
+ Neutral AI
+
+
+ -
+
BattleAI
@@ -408,36 +562,16 @@
- -
-
-
-
- 75
- true
-
+
-
+
+
+
+ 0
+ 22
+
- Data Directories
-
-
-
- -
-
-
-
- 75
- true
-
-
-
- Video
-
-
-
- -
-
-
- Heroes III character set
+ Friendly AI
@@ -461,91 +595,27 @@
- -
-
-
- Extra data directory
+
-
+
+
+ false
-
-
- -
-
-
- 1
+
+ BattleAI
-
- Off
+ BattleAI
-
- On
+ StupidAI
- -
-
-
- Log files directory
-
-
-
- -
-
-
- QPlainTextEdit::NoWrap
-
-
- http://downloads.vcmi.eu/Mods/repository.json
-
-
-
- -
-
-
- Show intro
-
-
-
- -
-
-
-
- 75
- true
-
-
-
- Launcher Settings
-
-
-
- -
-
-
- Build version
-
-
-
- -
-
-
- Qt::Vertical
-
-
- QSizePolicy::Fixed
-
-
-
- 56
- 8
-
-
-
-
- -
+
-
@@ -558,45 +628,6 @@
- -
-
-
- 1
-
-
-
-
- Off
-
-
- -
-
- On
-
-
-
-
- -
-
-
-
-
-
-
- -
-
-
-
- 75
- true
- true
- false
-
-
-
- AI in the battlefield
-
-
-
diff --git a/launcher/translation/launcher_uk.ts b/launcher/translation/launcher_uk.ts
index 17ea2be7a..84f955f8c 100644
--- a/launcher/translation/launcher_uk.ts
+++ b/launcher/translation/launcher_uk.ts
@@ -1,389 +1,750 @@
+
+ CModListModel
+
+
+
+
+
+
+
+
+
+
+ Назва
+
+
+
+
+
+ Тип
+
+
+
+
+
+ Версія
+
+
+
+
+
+ Розмір
+
+
+
+
+
+ Автори
+
+
CModListView
+
Фільтр
+
Усі модифікації
+
Усі доступні
+
Встановлені
+
Доступні оновлення
+
Активні
+
Неактивні
+
- Завантажити та оновити репозиторії
+ Оновити репозиторії
-
+
+
Опис
+
Зміни
+
Знімки
+
Показати подробиці
+
Видалити
+
Активувати
+
Деактивувати
+
Оновити
+
Встановити
+
%p% (%v КБ з %m КБ)
+
Відмінити
+
+
+
+
+
+
+
+
+
+
Назва модифікації
+
+
+
+
+
+
+
+
+
+
Встановлена версія
+
+
+
+
+
+
+
+
+
+
Найновіша версія
+
+
+
+
+
+
+
+
+
+
Розмір для завантаження
+
+
+
+
+
+
+
+
+
+
Автори
+
+
+
+
+
+
+
+
+
+
Ліцензія
+
+
+
+
+
+
+
+
+
+
Домашня сторінка
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Сумісність
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Необхідна версія VCMI
+
+
+
+
+
+
+
+
+
+
Підтримувана версія VCMI
+
+
+
+
+
+
+
+
+
+
Підтримувані версії VCMI
+
+
+
+
+
+
+
+
+
+
Необхідні модифікації
+
+
+
+
+
+
+
+
+
+
Конфліктуючі модифікації
+
+
+
+
+
+
+
+
+
+
Цю модифікацію не можна встановити чи активувати, оскільки відсутні наступні залежності
+
+
+
+
+
+
+
+
+
+
Цю модифікацію не можна ввімкнути, оскільки наступні модифікації несумісні з цією модифікацією
+
+
+
+
+
+
+
+
+
+
Цю модифікацію не можна відключити, оскільки вона необхідна для запуску наступних модифікацій
+
+
+
+
+
+
+
+
+
+
Цю модифікацію не можна видалити або оновити, оскільки вона необхідна для запуску наступних модифікацій
+
+
+
+
+
+
+
+
+
+
Це вкладена модифікація, і її не можна встановити або видалити окремо від батьківської модифікації
+
+
+
+
+
+
+
+
+
+
Примітки
+
+
+
+
+
+
+
+
+
+
Знімок екрану %1
+
+
+
+
+
+
+
+ Модифікація сумісна
+
+
+
+
+
+
+
+
+ Модифікація несумісна
+
CSettingsView
-
+
+
Змінити
-
-
-
+
+
+
+
Відкрити
-
+
+
Тека даних користувача
-
-
-
-
+
+
+
+
+
Вимкнено
-
-
-
-
+
+
+
+
+
Увімкнено
-
+
+
Повноекранний режим
-
+
+
Штучний інтелект на полі бою
-
+
+
Репозиторії
-
+
+
Оновити зараз
-
+
+
Нейтральний ШІ
-
+
+
Повний
-
+
+
Загальні налаштування
-
+
+
ШІ гравців
-
+
+
+
+ Мова VCMI
+
+
+
+
Центральноєвропейська (Windows 1250)
-
+
+
Кирилиця (Windows 1251)
-
+
+
Західноєвропейська (Windows 1252)
-
+
+
Спрощена китайська (GBK)
-
+
+
Спрощена китайська (GB2312)
-
+
+
Корейська (Windows 949)
-
+
+
+
+ English (Англійська)
+
+
+
+
+
+ Polska (Польська)
+
+
+
+
+
+ Русский (Російська)
+
+
+
+
+
+ Українська
+
+
+
+
Дружній ШІ
-
+
+
Роздільна здатність
-
+
+
Штучний інтелект на карті пригод
-
+
+
Автозбереження
-
+
+
Дісплей
-
+
+
Перевірка репозиторіїв при запуску
-
+
+
Мережевий порт
-
+
+
Теки даних гри
-
+
+
Графіка
-
+
+
Кодування Heroes III
-
+
+
Додаткова тека даних
-
+
+
Тека файлів журналу
-
+
+
Вступні відео
-
+
+
Налаштування лаунчера
-
+
+
Версія збірки
-
+
+
Ворожий ШІ
@@ -391,6 +752,7 @@
ImageViewer
+
Перегляд зображень
@@ -399,61 +761,73 @@
Lobby
+
Підключитися
+
Ім'я користувача
+
Сервер
+
Сесія
+
Гравці
+
Створити кімнату
+
Приєднатися до кімнати
+
Готовність!
+
Модифікації, що не збігаються
+
Вийти з кімнати
+
Виключити гравця
+
Гравці у кімнаті
@@ -462,21 +836,25 @@
LobbyRoomRequest
+
Налаштування кімнати
+
Назва кімнати
+
Максимум гравців
+
Пароль (за бажанням)
@@ -485,27 +863,44 @@
MainWindow
+
VCMI Launcher
-
+
+
Модифікації
-
+
+
+
+ Редактор
+
+
+
+
+
+ Редактор мап
+
+
+
+
Налаштування
-
+
+
Лобі
-
+
+
Грати!
@@ -515,19 +910,80 @@
Грати!
+
+ ModFields
+
+
+
+
+
+
+
+
+
+ Назва
+
+
+
+
+
+
+
+
+
+
+ Тип
+
+
+
+
+
+
+
+
+
+
+ Версія
+
+
+
+
+
+
+
+
+
+
+ Розмір
+
+
+
+
+
+
+
+
+
+
+ Автори
+
+
UpdateDialog
+
У вас встановлена остання версія
+
Закрити
+
Перевіряти наявність оновлень при запуску
From a481961c57623c41e8e8f0e82cd85128fc4bb417 Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Sun, 25 Dec 2022 21:41:45 +0200
Subject: [PATCH 003/197] Added dummy files for WIP translations
---
launcher/translation/english.ts | 992 ++++++++++++++++++
launcher/translation/polish.ts | 992 ++++++++++++++++++
launcher/translation/russian.ts | 992 ++++++++++++++++++
.../{launcher_uk.ts => ukrainian.ts} | 0
4 files changed, 2976 insertions(+)
create mode 100644 launcher/translation/english.ts
create mode 100644 launcher/translation/polish.ts
create mode 100644 launcher/translation/russian.ts
rename launcher/translation/{launcher_uk.ts => ukrainian.ts} (100%)
diff --git a/launcher/translation/english.ts b/launcher/translation/english.ts
new file mode 100644
index 000000000..bd2e8fe44
--- /dev/null
+++ b/launcher/translation/english.ts
@@ -0,0 +1,992 @@
+
+
+
+
+ CModListModel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CModListView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CSettingsView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ImageViewer
+
+
+
+
+
+
+
+
+ Lobby
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LobbyRoomRequest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MainWindow
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ModFields
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UpdateDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/launcher/translation/polish.ts b/launcher/translation/polish.ts
new file mode 100644
index 000000000..723608b37
--- /dev/null
+++ b/launcher/translation/polish.ts
@@ -0,0 +1,992 @@
+
+
+
+
+ CModListModel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CModListView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CSettingsView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ English (Angielski)
+
+
+
+
+
+ Polska
+
+
+
+
+
+ Русский (Rosyjski)
+
+
+
+
+
+ Українська (Ukraiński)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ImageViewer
+
+
+
+
+
+
+
+
+ Lobby
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LobbyRoomRequest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MainWindow
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ModFields
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UpdateDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/launcher/translation/russian.ts b/launcher/translation/russian.ts
new file mode 100644
index 000000000..8402c54ca
--- /dev/null
+++ b/launcher/translation/russian.ts
@@ -0,0 +1,992 @@
+
+
+
+
+ CModListModel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CModListView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CSettingsView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ English (Английский)
+
+
+
+
+
+ Polska (Польский)
+
+
+
+
+
+ Русский
+
+
+
+
+
+ Українська (Украинский)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ImageViewer
+
+
+
+
+
+
+
+
+ Lobby
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LobbyRoomRequest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MainWindow
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ModFields
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UpdateDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/launcher/translation/launcher_uk.ts b/launcher/translation/ukrainian.ts
similarity index 100%
rename from launcher/translation/launcher_uk.ts
rename to launcher/translation/ukrainian.ts
From a0c78e8ecbdfbd8b298c1da44c22ce64396f1c9b Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Sun, 25 Dec 2022 21:58:20 +0200
Subject: [PATCH 004/197] Added german translation by Laserlicht
---
Mods/vcmi/mod.json | 9 +-
launcher/settingsView/csettingsview_moc.cpp | 9 +-
launcher/settingsView/csettingsview_moc.ui | 5 +
launcher/translation/german.ts | 992 ++++++++++++++++++++
4 files changed, 1010 insertions(+), 5 deletions(-)
create mode 100644 launcher/translation/german.ts
diff --git a/Mods/vcmi/mod.json b/Mods/vcmi/mod.json
index 2c212544f..a78ad2887 100644
--- a/Mods/vcmi/mod.json
+++ b/Mods/vcmi/mod.json
@@ -2,7 +2,14 @@
"name" : "VCMI essential files",
"description" : "Essential files required for VCMI to run correctly",
- "translation_uk" : {
+ "german" : {
+ "name" : "VCMI - grundlegende Dateien",
+ "description" : "Grundlegende Dateien, die für die korrekte Ausführung von VCMI erforderlich sind",
+ "author" : "VCMI-Team",
+ "modType" : "Grafik",
+ },
+
+ "ukrainian" : {
"name" : "VCMI - ключові файли",
"description" : "Ключові файли необхідні для повноцінної роботи VCMI",
"author" : "Команда VCMI",
diff --git a/launcher/settingsView/csettingsview_moc.cpp b/launcher/settingsView/csettingsview_moc.cpp
index b06b2f95e..74d98a02f 100644
--- a/launcher/settingsView/csettingsview_moc.cpp
+++ b/launcher/settingsView/csettingsview_moc.cpp
@@ -49,10 +49,11 @@ static const std::string knownEncodingsList[] = //TODO: remove hardcode
/// List of tags of languages that can be selected from Launcher (and have translation for Launcher)
static const std::string languageTagList[] =
{
- "en", // english
- "pl", // polish
- "ru", // russian
- "uk", // ukrainian
+ "english",
+ "german",
+ "polish",
+ "russian",
+ "ukrainian",
};
void CSettingsView::setDisplayList()
diff --git a/launcher/settingsView/csettingsview_moc.ui b/launcher/settingsView/csettingsview_moc.ui
index 20eb49c43..016576c32 100644
--- a/launcher/settingsView/csettingsview_moc.ui
+++ b/launcher/settingsView/csettingsview_moc.ui
@@ -521,6 +521,11 @@
English
+ -
+
+ Deutsch (German)
+
+
-
Polska (Polish)
diff --git a/launcher/translation/german.ts b/launcher/translation/german.ts
new file mode 100644
index 000000000..0dd3c5ffe
--- /dev/null
+++ b/launcher/translation/german.ts
@@ -0,0 +1,992 @@
+
+
+
+
+ CModListModel
+
+
+
+
+
+
+
+
+
+
+ Name
+
+
+
+
+
+ Typ
+
+
+
+
+
+ Version
+
+
+
+
+
+ Größe
+
+
+
+
+
+ Autor
+
+
+
+ CModListView
+
+
+
+
+ Filter
+
+
+
+
+
+ Alle Mods
+
+
+
+
+
+ Herunterladbar
+
+
+
+
+
+ Installiert
+
+
+
+
+
+ Aktualisierbar
+
+
+
+
+
+ Aktiv
+
+
+
+
+
+ Inaktiv
+
+
+
+
+
+ Repositories herunterladen && aktualisieren
+
+
+
+
+
+
+ Beschreibung
+
+
+
+
+
+ Änderungslog
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+ Details anzeigen
+
+
+
+
+
+ Deinstallieren
+
+
+
+
+
+ Aktivieren
+
+
+
+
+
+ Deaktivieren
+
+
+
+
+
+ Aktualisieren
+
+
+
+
+
+ Installieren
+
+
+
+
+
+ %p% (%v КB von %m КB)
+
+
+
+
+
+ Abbrechen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Mod-Name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Installierte Version
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Letzte Version
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Downloadgröße
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Autoren
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lizenz
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Home
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Kompatibilität
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Benötigte VCMI Version
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Unterstützte VCMI Version
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Unterstützte VCMI Versionen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Benötigte Mods
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Mods mit Konflikt
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Diese Mod kann nicht installiert oder aktiviert werden, da die folgenden Abhängigkeiten nicht vorhanden sind
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Diese Mod kann nicht aktiviert werden, da folgende Mods nicht mit dieser Mod kompatibel sind
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Diese Mod kann nicht deaktiviert werden, da sie zum Ausführen der folgenden Mods erforderlich ist
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Diese Mod kann nicht deinstalliert oder aktualisiert werden, da sie für die folgenden Mods erforderlich ist
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dies ist eine Submod und kann nicht separat von der Hauptmod installiert oder deinstalliert werden
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Anmerkungen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Screenshot %1
+
+
+
+
+
+
+
+
+ Mod ist kompatibel
+
+
+
+
+
+
+
+
+ Mod ist inkompatibel
+
+
+
+ CSettingsView
+
+
+
+
+ Ändern
+
+
+
+
+
+
+
+ Öffnen
+
+
+
+
+
+ Verzeichnis der Benutzerdaten
+
+
+
+
+
+
+
+
+ Aus
+
+
+
+
+
+
+
+
+ An
+
+
+
+
+
+ Vollbild
+
+
+
+
+
+ KI auf dem Schlachtfeld
+
+
+
+
+
+ Repositories
+
+
+
+
+
+ Nach Aktualisierungen suchen
+
+
+
+
+
+ Neutrale KI
+
+
+
+
+
+ Vollständig
+
+
+
+
+
+ Allgemein
+
+
+
+
+
+ Spieler-KI
+
+
+
+
+
+ VCMI-Sprache
+
+
+
+
+
+ Mitteleuropäisch (Windows 1250)
+
+
+
+
+
+ Kyrillische Schrift (Windows 1251)
+
+
+
+
+
+ Westeuropäisch (Windows 1252)
+
+
+
+
+
+ Vereinfachtes Chinesisch (GBK)
+
+
+
+
+
+ Vereinfachtes Chinesisch (GB2312)
+
+
+
+
+
+ Koreanisch (Windows 949)
+
+
+
+
+
+ English (Englisch)
+
+
+
+
+
+ Polska (Polnisch)
+
+
+
+
+
+ Русский (Russisch)
+
+
+
+
+
+ Українська (Ukrainisch)
+
+
+
+
+
+ Freundliche KI
+
+
+
+
+
+ Auflösung
+
+
+
+
+
+ KI auf der Karte
+
+
+
+
+
+ Autospeichern
+
+
+
+
+
+ Anzeige-Index
+
+
+
+
+
+ Repositories beim Start prüfen
+
+
+
+
+
+ Netzwerk-Port
+
+
+
+
+
+ Daten-Verzeichnisse
+
+
+
+
+
+ Video
+
+
+
+
+
+ Heroes III Zeichensatz
+
+
+
+
+
+ Zusätzliches Daten-Verzeichnis
+
+
+
+
+
+ Verzeichnis der Log-Dateien
+
+
+
+
+
+ Intro anzeigen
+
+
+
+
+
+ Launcher-Einstellungen
+
+
+
+
+
+ Version des Builds
+
+
+
+
+
+ Feindliche KI
+
+
+
+ ImageViewer
+
+
+
+
+ Bildbetrachter
+
+
+
+ Lobby
+
+
+
+
+ Verbinden
+
+
+
+
+
+ Benutzername
+
+
+
+
+
+ Server
+
+
+
+
+
+ Sitzung
+
+
+
+
+
+ Spieler
+
+
+
+
+
+ Neuer Raum
+
+
+
+
+
+ Raum beitreten
+
+
+
+
+
+ Bereit
+
+
+
+
+
+ Mods stimmen nicht überein
+
+
+
+
+
+ Verlassen
+
+
+
+
+
+ Spieler kicken
+
+
+
+
+
+ Spieler im Raum
+
+
+
+ LobbyRoomRequest
+
+
+
+
+ Raumeinstellungen
+
+
+
+
+
+ Raumname
+
+
+
+
+
+ Maximale Spieler
+
+
+
+
+
+ Passwort (optional)
+
+
+
+ MainWindow
+
+
+
+
+ VCMI Launcher
+
+
+
+
+
+ Mods
+
+
+
+
+
+ Editor
+
+
+
+
+
+ Karteneditor
+
+
+
+
+
+ Einstellungen
+
+
+
+
+
+ Lobby
+
+
+
+
+
+ Spiel starten
+
+
+
+
+ Spielen
+
+
+
+ ModFields
+
+
+
+
+
+
+
+
+
+ Name
+
+
+
+
+
+
+
+
+
+
+ Typ
+
+
+
+
+
+
+
+
+
+
+ Version
+
+
+
+
+
+
+
+
+
+
+ Größe
+
+
+
+
+
+
+
+
+
+
+ Autor
+
+
+
+ UpdateDialog
+
+
+
+
+ Sie haben die neueste Version
+
+
+
+
+
+ Beenden
+
+
+
+
+
+ Nach Aktualisierungen beim Starten prüfen
+
+
+
From b012cd949037510bbbc6fceddf91f559d490f316 Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Sun, 25 Dec 2022 22:18:14 +0200
Subject: [PATCH 005/197] Compiled launcher translations are now in
launcher/translations/ dir
---
CMakeLists.txt | 4 ++--
launcher/CMakeLists.txt | 22 +++++++++++++++-------
launcher/mainwindow_moc.cpp | 2 +-
launcher/modManager/cmodlist.cpp | 3 +--
4 files changed, 19 insertions(+), 12 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 95fe102a4..759095988 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -316,8 +316,8 @@ find_package(TBB REQUIRED)
if(ENABLE_LAUNCHER OR ENABLE_EDITOR)
# Widgets finds its own dependencies (QtGui and QtCore).
- find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Network)
- find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network)
+ find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Network LinguistTools)
+ find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network LinguistTools)
endif()
if(ENABLE_LUA)
diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt
index acfa79e0e..6883e4e9a 100644
--- a/launcher/CMakeLists.txt
+++ b/launcher/CMakeLists.txt
@@ -62,6 +62,13 @@ set(launcher_FORMS
lobby/lobbyroomrequest_moc.ui
)
+set(launcher_TS
+ translation/english.ts
+ translation/german.ts
+ translation/polish.ts
+ translation/russian.ts
+ translation/ukrainian.ts)
+
if(APPLE_IOS)
list(APPEND launcher_SRCS
ios/main.m
@@ -83,13 +90,13 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
if(TARGET Qt6::Core)
qt_wrap_ui(launcher_UI_HEADERS ${launcher_FORMS})
+ qt_add_translation( launcher_QM ${launcher_TS} )
else()
+ set_source_files_properties(${launcher_TS} PROPERTIES OUTPUT_LOCATION ${CMAKE_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}/launcher/translations)
qt5_wrap_ui(launcher_UI_HEADERS ${launcher_FORMS})
+ qt5_add_translation( launcher_QM ${launcher_TS} )
endif()
-find_package(Qt5LinguistTools)
-set(launcher_TS translation/launcher_en.ts translation/launcher_pl.ts translation/launcher_ru.ts translation/launcher_uk.ts)
-qt5_add_translation( QM_FILES ${launcher_TS} )
if(WIN32)
set(launcher_ICON VCMI_launcher.rc)
@@ -98,7 +105,7 @@ endif()
if(BUILD_SINGLE_APP)
add_library(vcmilauncher STATIC ${launcher_SRCS} ${launcher_HEADERS} ${launcher_UI_HEADERS})
else()
- add_executable(vcmilauncher WIN32 ${QM_FILES} ${launcher_SRCS} ${launcher_HEADERS} ${launcher_UI_HEADERS} ${launcher_ICON})
+ add_executable(vcmilauncher WIN32 ${launcher_QM} ${launcher_SRCS} ${launcher_HEADERS} ${launcher_UI_HEADERS} ${launcher_ICON})
endif()
if(WIN32)
@@ -130,7 +137,7 @@ vcmi_set_output_dir(vcmilauncher "")
enable_pch(vcmilauncher)
if(APPLE_IOS)
- set(ICONS_DESTINATION ${DATA_DIR})
+ set(RESOURCES_DESTINATION ${DATA_DIR})
# workaround https://github.com/conan-io/conan-center-index/issues/13332
if(USING_CONAN)
@@ -144,7 +151,7 @@ if(APPLE_IOS)
)
endif()
else()
- set(ICONS_DESTINATION ${DATA_DIR}/launcher)
+ set(RESOURCES_DESTINATION ${DATA_DIR}/launcher)
# Copy to build directory for easier debugging
add_custom_command(TARGET vcmilauncher POST_BUILD
@@ -161,4 +168,5 @@ else()
endif()
endif()
-install(DIRECTORY icons DESTINATION ${ICONS_DESTINATION})
+install(DIRECTORY icons DESTINATION ${RESOURCES_DESTINATION})
+install(DIRECTORY ts DESTINATION ${RESOURCES_DESTINATION})
diff --git a/launcher/mainwindow_moc.cpp b/launcher/mainwindow_moc.cpp
index 5ec14e8a2..a88c3845f 100644
--- a/launcher/mainwindow_moc.cpp
+++ b/launcher/mainwindow_moc.cpp
@@ -129,7 +129,7 @@ void MainWindow::updateTranslation()
{
std::string languageCode = settings["general"]["language"].String();
- QString translationFile = "./launcher_" + QString::fromStdString(languageCode) + ".qm";
+ QString translationFile = "./launcher/translations/" + QString::fromStdString(languageCode) + ".qm";
qApp->removeTranslator(&translator);
if (!translator.load(translationFile))
diff --git a/launcher/modManager/cmodlist.cpp b/launcher/modManager/cmodlist.cpp
index 0146c983c..fbee206c8 100644
--- a/launcher/modManager/cmodlist.cpp
+++ b/launcher/modManager/cmodlist.cpp
@@ -158,8 +158,7 @@ QString CModEntry::getName() const
QVariant CModEntry::getValue(QString value) const
{
- QString lang = QString::fromStdString(settings["general"]["language"].String());
- QString langValue = "translation_" + lang;
+ QString langValue = QString::fromStdString(settings["general"]["language"].String());
// Priorities
// 1) data from newest version
From 4cd91ffbed839e22dafcac78c89edf8bdd674fa3 Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Sun, 25 Dec 2022 23:06:22 +0200
Subject: [PATCH 006/197] Save & load language selection
---
config/schemas/settings.json | 6 +++++-
launcher/mainwindow_moc.cpp | 1 +
launcher/settingsView/csettingsview_moc.cpp | 8 +++++++-
3 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/config/schemas/settings.json b/config/schemas/settings.json
index 9baa638c6..34a721a61 100644
--- a/config/schemas/settings.json
+++ b/config/schemas/settings.json
@@ -17,7 +17,7 @@
"type" : "object",
"default": {},
"additionalProperties" : false,
- "required" : [ "playerName", "showfps", "music", "sound", "encoding", "swipe", "saveRandomMaps", "saveFrequency", "notifications", "extraDump" ],
+ "required" : [ "playerName", "showfps", "music", "sound", "encoding", "language", "swipe", "saveRandomMaps", "saveFrequency", "notifications", "extraDump" ],
"properties" : {
"playerName" : {
"type":"string",
@@ -51,6 +51,10 @@
"type":"string",
"default" : "Maps/Arrogance"
},
+ "language" : {
+ "type":"string",
+ "default" : "english"
+ },
"lastSave" : {
"type":"string",
"default" : "NEWGAME"
diff --git a/launcher/mainwindow_moc.cpp b/launcher/mainwindow_moc.cpp
index a88c3845f..35591185e 100644
--- a/launcher/mainwindow_moc.cpp
+++ b/launcher/mainwindow_moc.cpp
@@ -51,6 +51,7 @@ MainWindow::MainWindow(QWidget * parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
load(); // load FS before UI
+ updateTranslation(); // load translation
ui->setupUi(this);
diff --git a/launcher/settingsView/csettingsview_moc.cpp b/launcher/settingsView/csettingsview_moc.cpp
index 74d98a02f..73befdcad 100644
--- a/launcher/settingsView/csettingsview_moc.cpp
+++ b/launcher/settingsView/csettingsview_moc.cpp
@@ -114,6 +114,11 @@ void CSettingsView::loadSettings()
if(encodingIndex < ui->comboBoxEncoding->count())
ui->comboBoxEncoding->setCurrentIndex((int)encodingIndex);
ui->comboBoxAutoSave->setCurrentIndex(settings["general"]["saveFrequency"].Integer() > 0 ? 1 : 0);
+
+ std::string language = settings["general"]["language"].String();
+ size_t languageIndex = boost::range::find(languageTagList, language) - languageTagList;
+ if(languageIndex < ui->comboBoxLanguage->count())
+ ui->comboBoxLanguage->setCurrentIndex((int)languageIndex);
}
void CSettingsView::fillValidResolutions(bool isExtraResolutionsModEnabled)
@@ -319,7 +324,8 @@ void CSettingsView::on_comboBoxLanguage_currentIndexChanged(int index)
Settings node = settings.write["general"]["language"];
node->String() = languageTagList[index];
- dynamic_cast(qApp->activeWindow())->updateTranslation();
+ if ( qApp->activeWindow() && dynamic_cast(qApp->activeWindow()) )
+ dynamic_cast(qApp->activeWindow())->updateTranslation();
}
void CSettingsView::changeEvent(QEvent *event)
From b38752bde1d65183570386a3f4b4655b70ae5957 Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Sun, 25 Dec 2022 23:08:39 +0200
Subject: [PATCH 007/197] Editor can be started from Launcher (disabled for
ios)
---
launcher/main.cpp | 5 +++++
launcher/main.h | 1 +
launcher/mainwindow_moc.cpp | 9 +++++++++
launcher/mainwindow_moc.h | 1 +
lib/VCMIDirs.cpp | 4 ++++
lib/VCMIDirs.h | 7 +++++--
6 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/launcher/main.cpp b/launcher/main.cpp
index acc5f0cde..68064f70b 100644
--- a/launcher/main.cpp
+++ b/launcher/main.cpp
@@ -64,6 +64,11 @@ void startGame(const QStringList & args)
#endif
}
+void startEditor(const QStringList & args)
+{
+ startExecutable(pathToQString(VCMIDirs::get().editorPath()), args);
+}
+
#ifndef Q_OS_IOS
void startExecutable(QString name, const QStringList & args)
{
diff --git a/launcher/main.h b/launcher/main.h
index 371d68e7f..ee7f1ea3f 100644
--- a/launcher/main.h
+++ b/launcher/main.h
@@ -10,6 +10,7 @@
#pragma once
void startGame(const QStringList & args);
+void startEditor(const QStringList & args);
#ifdef VCMI_IOS
extern "C" void launchGame(int argc, char * argv[]);
diff --git a/launcher/mainwindow_moc.cpp b/launcher/mainwindow_moc.cpp
index 35591185e..f9221cc1a 100644
--- a/launcher/mainwindow_moc.cpp
+++ b/launcher/mainwindow_moc.cpp
@@ -69,6 +69,10 @@ MainWindow::MainWindow(QWidget * parent)
move(position);
}
+#ifdef Q_OS_IOS
+ ui->startEditorButton->hide();
+#endif
+
ui->tabListWidget->setCurrentIndex(0);
ui->settingsView->isExtraResolutionsModEnabled = ui->modlistView->isExtraResolutionsModEnabled();
@@ -103,6 +107,11 @@ void MainWindow::on_startGameButton_clicked()
startGame({});
}
+void MainWindow::on_startEditorButton_clicked()
+{
+ startEditor({});
+}
+
const CModList & MainWindow::getModList() const
{
return ui->modlistView->getModList();
diff --git a/launcher/mainwindow_moc.h b/launcher/mainwindow_moc.h
index 1ac2a85a8..9165431db 100644
--- a/launcher/mainwindow_moc.h
+++ b/launcher/mainwindow_moc.h
@@ -52,4 +52,5 @@ private slots:
void on_modslistButton_clicked();
void on_settingsButton_clicked();
void on_lobbyButton_clicked();
+ void on_startEditorButton_clicked();
};
diff --git a/lib/VCMIDirs.cpp b/lib/VCMIDirs.cpp
index f56a6549b..a6031be1d 100644
--- a/lib/VCMIDirs.cpp
+++ b/lib/VCMIDirs.cpp
@@ -158,6 +158,7 @@ class VCMIDirsWIN32 final : public IVCMIDirs
std::vector dataPaths() const override;
bfs::path clientPath() const override;
+ bfs::path editorPath() const override;
bfs::path serverPath() const override;
bfs::path libraryPath() const override;
@@ -348,6 +349,7 @@ std::vector VCMIDirsWIN32::dataPaths() const
}
bfs::path VCMIDirsWIN32::clientPath() const { return binaryPath() / "VCMI_client.exe"; }
+bfs::path VCMIDirsWIN32::editorPath() const { return binaryPath() / "VCMI_editor.exe"; }
bfs::path VCMIDirsWIN32::serverPath() const { return binaryPath() / "VCMI_server.exe"; }
bfs::path VCMIDirsWIN32::libraryPath() const { return "."; }
@@ -359,6 +361,7 @@ class IVCMIDirsUNIX : public IVCMIDirs
{
public:
bfs::path clientPath() const override;
+ bfs::path editorPath() const override;
bfs::path serverPath() const override;
virtual bool developmentMode() const;
@@ -371,6 +374,7 @@ bool IVCMIDirsUNIX::developmentMode() const
}
bfs::path IVCMIDirsUNIX::clientPath() const { return binaryPath() / "vcmiclient"; }
+bfs::path IVCMIDirsUNIX::editorPath() const { return binaryPath() / "vcmieditor"; }
bfs::path IVCMIDirsUNIX::serverPath() const { return binaryPath() / "vcmiserver"; }
#ifdef VCMI_APPLE
diff --git a/lib/VCMIDirs.h b/lib/VCMIDirs.h
index 50b385f5d..33d38af73 100644
--- a/lib/VCMIDirs.h
+++ b/lib/VCMIDirs.h
@@ -35,10 +35,13 @@ public:
// Paths to global system-wide data directories. First items have higher priority
virtual std::vector dataPaths() const = 0;
- // Full path to client executable, including server name (e.g. /usr/bin/vcmiclient)
+ // Full path to client executable, including name (e.g. /usr/bin/vcmiclient)
virtual boost::filesystem::path clientPath() const = 0;
- // Full path to server executable, including server name (e.g. /usr/bin/vcmiserver)
+ // Full path to editor executable, including name (e.g. /usr/bin/vcmieditor)
+ virtual boost::filesystem::path editorPath() const = 0;
+
+ // Full path to server executable, including name (e.g. /usr/bin/vcmiserver)
virtual boost::filesystem::path serverPath() const = 0;
// Path where vcmi libraries can be found (in AI and Scripting subdirectories)
From 20dec34484af1b907f112e14af1962b3967e02ba Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Sun, 25 Dec 2022 23:09:15 +0200
Subject: [PATCH 008/197] Attempt to make translations optional (MXE...)
---
CMakeLists.txt | 9 +++++++--
launcher/CMakeLists.txt | 14 ++++++++++----
2 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 759095988..81debe3c0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -52,6 +52,7 @@ option(ENABLE_ERM "Enable compilation of ERM scripting module" OFF)
option(ENABLE_LUA "Enable compilation of LUA scripting module" OFF)
option(ENABLE_LAUNCHER "Enable compilation of launcher" ON)
option(ENABLE_EDITOR "Enable compilation of map editor" ON)
+option(ENABLE_TRANSLATIONS "Enable generation of translations for launcher and editor" ON)
if(APPLE_IOS)
set(BUNDLE_IDENTIFIER_PREFIX "" CACHE STRING "Bundle identifier prefix")
set(APP_DISPLAY_NAME "VCMI" CACHE STRING "App name on the home screen")
@@ -316,8 +317,12 @@ find_package(TBB REQUIRED)
if(ENABLE_LAUNCHER OR ENABLE_EDITOR)
# Widgets finds its own dependencies (QtGui and QtCore).
- find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Network LinguistTools)
- find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network LinguistTools)
+ find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Network OPTIONAL_COMPONENTS LinguistTools)
+ find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network OPTIONAL_COMPONENTS LinguistTools)
+
+ if (NOT DEFINED Qt5LinguistTools_DIR)
+ set(ENABLE_TRANSLATIONS OFF)
+ endif()
endif()
if(ENABLE_LUA)
diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt
index 6883e4e9a..7f9610f5d 100644
--- a/launcher/CMakeLists.txt
+++ b/launcher/CMakeLists.txt
@@ -90,11 +90,15 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
if(TARGET Qt6::Core)
qt_wrap_ui(launcher_UI_HEADERS ${launcher_FORMS})
- qt_add_translation( launcher_QM ${launcher_TS} )
+ if (ENABLE_TRANSLATIONS)
+ qt_add_translation( launcher_QM ${launcher_TS} )
+ endif()
else()
- set_source_files_properties(${launcher_TS} PROPERTIES OUTPUT_LOCATION ${CMAKE_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}/launcher/translations)
qt5_wrap_ui(launcher_UI_HEADERS ${launcher_FORMS})
- qt5_add_translation( launcher_QM ${launcher_TS} )
+ if (ENABLE_TRANSLATIONS)
+ set_source_files_properties(${launcher_TS} PROPERTIES OUTPUT_LOCATION ${CMAKE_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}/launcher/translations)
+ qt5_add_translation( launcher_QM ${launcher_TS} )
+ endif()
endif()
@@ -169,4 +173,6 @@ else()
endif()
install(DIRECTORY icons DESTINATION ${RESOURCES_DESTINATION})
-install(DIRECTORY ts DESTINATION ${RESOURCES_DESTINATION})
+if (ENABLE_TRANSLATIONS)
+ install(DIRECTORY translation DESTINATION ${RESOURCES_DESTINATION})
+endif()
From 82f13701118130fcd89ca9104f8e6fdfd8f0c100 Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Sun, 25 Dec 2022 23:23:44 +0200
Subject: [PATCH 009/197] Linguist tools are now optional
---
CMakeLists.txt | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8f65ffa24..587e02029 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -329,10 +329,12 @@ endif()
if(ENABLE_LAUNCHER OR ENABLE_EDITOR)
# Widgets finds its own dependencies (QtGui and QtCore).
- find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Network OPTIONAL_COMPONENTS LinguistTools)
- find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network OPTIONAL_COMPONENTS LinguistTools)
+ find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Network )
+ find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network )
- if (NOT DEFINED Qt5LinguistTools_DIR)
+ find_package(QT NAMES Qt6 Qt5 COMPONENTS LinguistTools )
+ find_package(Qt${QT_VERSION_MAJOR} COMPONENTS LinguistTools)
+ if (NOT Qt5LinguistTools_DIR)
set(ENABLE_TRANSLATIONS OFF)
endif()
endif()
From 9fb426edc1dfed7a40968d890c0b4ad2124be6bd Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Sun, 25 Dec 2022 23:42:06 +0200
Subject: [PATCH 010/197] Do not use translator without translator tools
---
CMakeLists.txt | 3 +++
launcher/mainwindow_moc.cpp | 2 ++
launcher/mainwindow_moc.h | 2 ++
3 files changed, 7 insertions(+)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 587e02029..d9945a1ca 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -337,6 +337,9 @@ if(ENABLE_LAUNCHER OR ENABLE_EDITOR)
if (NOT Qt5LinguistTools_DIR)
set(ENABLE_TRANSLATIONS OFF)
endif()
+ if (ENABLE_TRANSLATIONS)
+ add_definitions(-DENABLE_QT_TRANSLATIONS)
+ endif()
endif()
if(ENABLE_NULLKILLER_AI)
diff --git a/launcher/mainwindow_moc.cpp b/launcher/mainwindow_moc.cpp
index f9221cc1a..d1a86d1d7 100644
--- a/launcher/mainwindow_moc.cpp
+++ b/launcher/mainwindow_moc.cpp
@@ -137,6 +137,7 @@ void MainWindow::on_lobbyButton_clicked()
void MainWindow::updateTranslation()
{
+#ifdef ENABLE_QT_TRANSLATIONS
std::string languageCode = settings["general"]["language"].String();
QString translationFile = "./launcher/translations/" + QString::fromStdString(languageCode) + ".qm";
@@ -146,4 +147,5 @@ void MainWindow::updateTranslation()
logGlobal->error("Failed to load translation");
if (!qApp->installTranslator(&translator))
logGlobal->error("Failed to install translator");
+#endif
}
diff --git a/launcher/mainwindow_moc.h b/launcher/mainwindow_moc.h
index 9165431db..f6733c504 100644
--- a/launcher/mainwindow_moc.h
+++ b/launcher/mainwindow_moc.h
@@ -26,7 +26,9 @@ class MainWindow : public QMainWindow
{
Q_OBJECT
+#ifdef ENABLE_QT_TRANSLATIONS
QTranslator translator;
+#endif
private:
Ui::MainWindow * ui;
void load();
From 9d2704adc37736ed6039125620e84d4d6442d33c Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Mon, 26 Dec 2022 00:03:00 +0200
Subject: [PATCH 011/197] Updated mod.json schema to include localization
support
---
config/schemas/mod.json | 54 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 54 insertions(+)
diff --git a/config/schemas/mod.json b/config/schemas/mod.json
index 012c3f762..f77fdea91 100644
--- a/config/schemas/mod.json
+++ b/config/schemas/mod.json
@@ -4,7 +4,41 @@
"title" : "VCMI mod file format",
"description" : "Format used to define main mod file (mod.json) in VCMI",
"required" : [ "name", "description", "version", "author", "contact", "modType" ],
+ "definitions" : {
+ "localizeable" : {
+ "type":"object",
+ "additionalProperties" : false,
+ "required" : [ "name", "description", "author", "modType" ],
+ "properties":{
+ "name": {
+ "type":"string",
+ "description": "Short name of your mod. No more than 2-3 words"
+ },
+ "description": {
+ "type":"string",
+ "description": "More lengthy description of mod. No hard limit"
+ },
+ "modType" : {
+ "type":"string",
+ "description": "Type of mod, e.g. Town, Artifacts, Graphical."
+ },
+ "author" : {
+ "type":"string",
+ "description": "Author of the mod. Can be nickname, real name or name of team"
+ },
+ "changelog" : {
+ "type":"object",
+ "description": "List of changes/new features in each version",
+ "additionalProperties" : {
+ "type" : "array",
+ "items" : { "type":"string" }
+ }
+ }
+ }
+ }
+ },
+
"additionalProperties" : false,
"properties":{
"name": {
@@ -78,6 +112,26 @@
"type":"boolean",
"description": "If set to true, mod will not be enabled automatically on install"
},
+
+ "english" : {
+ "$ref" : "#/definitions/localizeable"
+ },
+
+ "german" : {
+ "$ref" : "#/definitions/localizeable"
+ },
+
+ "polish" : {
+ "$ref" : "#/definitions/localizeable"
+ },
+
+ "russian" : {
+ "$ref" : "#/definitions/localizeable"
+ },
+
+ "ukrainian" : {
+ "$ref" : "#/definitions/localizeable"
+ },
"artifacts": {
"type":"array",
From 1f0ad8e149eaddd7962a7e592add078ab1a0762e Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Mon, 26 Dec 2022 00:10:31 +0200
Subject: [PATCH 012/197] Regenerated translations
---
launcher/translation/english.ts | 44 +++++++++++++++++++++++++++----
launcher/translation/german.ts | 44 +++++++++++++++++++++++++++----
launcher/translation/polish.ts | 44 +++++++++++++++++++++++++++----
launcher/translation/russian.ts | 44 +++++++++++++++++++++++++++----
launcher/translation/ukrainian.ts | 44 +++++++++++++++++++++++++++----
5 files changed, 195 insertions(+), 25 deletions(-)
diff --git a/launcher/translation/english.ts b/launcher/translation/english.ts
index bd2e8fe44..e4d00b8b5 100644
--- a/launcher/translation/english.ts
+++ b/launcher/translation/english.ts
@@ -10,30 +10,35 @@
+
+
+
+
+
@@ -169,6 +174,7 @@
+
@@ -184,6 +190,7 @@
+
@@ -199,6 +206,7 @@
+
@@ -214,6 +222,7 @@
+
@@ -229,6 +238,7 @@
+
@@ -244,6 +254,7 @@
+
@@ -259,6 +270,7 @@
+
@@ -285,6 +297,8 @@
+
+
@@ -311,6 +325,8 @@
+
+
@@ -326,6 +342,7 @@
+
@@ -341,6 +358,7 @@
+
@@ -356,6 +374,7 @@
+
@@ -371,6 +390,7 @@
+
@@ -386,6 +406,7 @@
+
@@ -401,6 +422,7 @@
+
@@ -416,6 +438,7 @@
+
@@ -431,6 +454,7 @@
+
@@ -446,6 +470,7 @@
+
@@ -461,6 +486,7 @@
+
@@ -476,6 +502,7 @@
+
@@ -485,6 +512,7 @@
+
@@ -494,6 +522,7 @@
+
@@ -557,7 +586,7 @@
-
+
@@ -630,24 +659,29 @@
+
+
+
+
+
-
+
-
+
-
+
@@ -737,7 +771,7 @@
-
+
diff --git a/launcher/translation/german.ts b/launcher/translation/german.ts
index 0dd3c5ffe..8e7ded6c3 100644
--- a/launcher/translation/german.ts
+++ b/launcher/translation/german.ts
@@ -10,30 +10,35 @@
+
Name
+
Typ
+
Version
+
Größe
+
@@ -169,6 +174,7 @@
+
Mod-Name
@@ -184,6 +190,7 @@
+
Installierte Version
@@ -199,6 +206,7 @@
+
Letzte Version
@@ -214,6 +222,7 @@
+
Downloadgröße
@@ -229,6 +238,7 @@
+
Autoren
@@ -244,6 +254,7 @@
+
Lizenz
@@ -259,6 +270,7 @@
+
Home
@@ -285,6 +297,8 @@
+
+
Kompatibilität
@@ -311,6 +325,8 @@
+
+
Benötigte VCMI Version
@@ -326,6 +342,7 @@
+
Unterstützte VCMI Version
@@ -341,6 +358,7 @@
+
Unterstützte VCMI Versionen
@@ -356,6 +374,7 @@
+
Benötigte Mods
@@ -371,6 +390,7 @@
+
Mods mit Konflikt
@@ -386,6 +406,7 @@
+
Diese Mod kann nicht installiert oder aktiviert werden, da die folgenden Abhängigkeiten nicht vorhanden sind
@@ -401,6 +422,7 @@
+
Diese Mod kann nicht aktiviert werden, da folgende Mods nicht mit dieser Mod kompatibel sind
@@ -416,6 +438,7 @@
+
Diese Mod kann nicht deaktiviert werden, da sie zum Ausführen der folgenden Mods erforderlich ist
@@ -431,6 +454,7 @@
+
Diese Mod kann nicht deinstalliert oder aktualisiert werden, da sie für die folgenden Mods erforderlich ist
@@ -446,6 +470,7 @@
+
Dies ist eine Submod und kann nicht separat von der Hauptmod installiert oder deinstalliert werden
@@ -461,6 +486,7 @@
+
Anmerkungen
@@ -476,6 +502,7 @@
+
Screenshot %1
@@ -485,6 +512,7 @@
+
Mod ist kompatibel
@@ -494,6 +522,7 @@
+
Mod ist inkompatibel
@@ -563,7 +592,7 @@
Nach Aktualisierungen suchen
-
+
Neutrale KI
@@ -636,24 +665,29 @@
+
+ Deutsch
+
+
+
Polska (Polnisch)
-
+
Русский (Russisch)
-
+
Українська (Ukrainisch)
-
+
Freundliche KI
@@ -743,7 +777,7 @@
Version des Builds
-
+
Feindliche KI
diff --git a/launcher/translation/polish.ts b/launcher/translation/polish.ts
index 723608b37..2ef17dd5e 100644
--- a/launcher/translation/polish.ts
+++ b/launcher/translation/polish.ts
@@ -10,30 +10,35 @@
+
+
+
+
+
@@ -169,6 +174,7 @@
+
@@ -184,6 +190,7 @@
+
@@ -199,6 +206,7 @@
+
@@ -214,6 +222,7 @@
+
@@ -229,6 +238,7 @@
+
@@ -244,6 +254,7 @@
+
@@ -259,6 +270,7 @@
+
@@ -285,6 +297,8 @@
+
+
@@ -311,6 +325,8 @@
+
+
@@ -326,6 +342,7 @@
+
@@ -341,6 +358,7 @@
+
@@ -356,6 +374,7 @@
+
@@ -371,6 +390,7 @@
+
@@ -386,6 +406,7 @@
+
@@ -401,6 +422,7 @@
+
@@ -416,6 +438,7 @@
+
@@ -431,6 +454,7 @@
+
@@ -446,6 +470,7 @@
+
@@ -461,6 +486,7 @@
+
@@ -476,6 +502,7 @@
+
@@ -485,6 +512,7 @@
+
@@ -494,6 +522,7 @@
+
@@ -557,7 +586,7 @@
-
+
@@ -630,24 +659,29 @@
+
+
+
+
+
Polska
-
+
Русский (Rosyjski)
-
+
Українська (Ukraiński)
-
+
@@ -737,7 +771,7 @@
-
+
diff --git a/launcher/translation/russian.ts b/launcher/translation/russian.ts
index 8402c54ca..5bb6e94cd 100644
--- a/launcher/translation/russian.ts
+++ b/launcher/translation/russian.ts
@@ -10,30 +10,35 @@
+
+
+
+
+
@@ -169,6 +174,7 @@
+
@@ -184,6 +190,7 @@
+
@@ -199,6 +206,7 @@
+
@@ -214,6 +222,7 @@
+
@@ -229,6 +238,7 @@
+
@@ -244,6 +254,7 @@
+
@@ -259,6 +270,7 @@
+
@@ -285,6 +297,8 @@
+
+
@@ -311,6 +325,8 @@
+
+
@@ -326,6 +342,7 @@
+
@@ -341,6 +358,7 @@
+
@@ -356,6 +374,7 @@
+
@@ -371,6 +390,7 @@
+
@@ -386,6 +406,7 @@
+
@@ -401,6 +422,7 @@
+
@@ -416,6 +438,7 @@
+
@@ -431,6 +454,7 @@
+
@@ -446,6 +470,7 @@
+
@@ -461,6 +486,7 @@
+
@@ -476,6 +502,7 @@
+
@@ -485,6 +512,7 @@
+
@@ -494,6 +522,7 @@
+
@@ -557,7 +586,7 @@
-
+
@@ -630,24 +659,29 @@
+
+ Deutsch (Немецкий)
+
+
+
Polska (Польский)
-
+
Русский
-
+
Українська (Украинский)
-
+
@@ -737,7 +771,7 @@
-
+
diff --git a/launcher/translation/ukrainian.ts b/launcher/translation/ukrainian.ts
index 84f955f8c..d9fdff7ce 100644
--- a/launcher/translation/ukrainian.ts
+++ b/launcher/translation/ukrainian.ts
@@ -10,30 +10,35 @@
+
Назва
+
Тип
+
Версія
+
Розмір
+
@@ -169,6 +174,7 @@
+
Назва модифікації
@@ -184,6 +190,7 @@
+
Встановлена версія
@@ -199,6 +206,7 @@
+
Найновіша версія
@@ -214,6 +222,7 @@
+
Розмір для завантаження
@@ -229,6 +238,7 @@
+
Автори
@@ -244,6 +254,7 @@
+
Ліцензія
@@ -259,6 +270,7 @@
+
Домашня сторінка
@@ -285,6 +297,8 @@
+
+
Сумісність
@@ -311,6 +325,8 @@
+
+
Необхідна версія VCMI
@@ -326,6 +342,7 @@
+
Підтримувана версія VCMI
@@ -341,6 +358,7 @@
+
Підтримувані версії VCMI
@@ -356,6 +374,7 @@
+
Необхідні модифікації
@@ -371,6 +390,7 @@
+
Конфліктуючі модифікації
@@ -386,6 +406,7 @@
+
Цю модифікацію не можна встановити чи активувати, оскільки відсутні наступні залежності
@@ -401,6 +422,7 @@
+
Цю модифікацію не можна ввімкнути, оскільки наступні модифікації несумісні з цією модифікацією
@@ -416,6 +438,7 @@
+
Цю модифікацію не можна відключити, оскільки вона необхідна для запуску наступних модифікацій
@@ -431,6 +454,7 @@
+
Цю модифікацію не можна видалити або оновити, оскільки вона необхідна для запуску наступних модифікацій
@@ -446,6 +470,7 @@
+
Це вкладена модифікація, і її не можна встановити або видалити окремо від батьківської модифікації
@@ -461,6 +486,7 @@
+
Примітки
@@ -476,6 +502,7 @@
+
Знімок екрану %1
@@ -485,6 +512,7 @@
+
Модифікація сумісна
@@ -494,6 +522,7 @@
+
Модифікація несумісна
@@ -563,7 +592,7 @@
Оновити зараз
-
+
Нейтральний ШІ
@@ -636,24 +665,29 @@
+
+ Deutsch (Німецька)
+
+
+
Polska (Польська)
-
+
Русский (Російська)
-
+
Українська
-
+
Дружній ШІ
@@ -743,7 +777,7 @@
Версія збірки
-
+
Ворожий ШІ
From e5cb322eb0209996b6455872a568f10661505ad9 Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Mon, 26 Dec 2022 00:16:16 +0200
Subject: [PATCH 013/197] Add qt5 translation tools into Linux CI
---
CI/linux/before_install.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/CI/linux/before_install.sh b/CI/linux/before_install.sh
index ce49cc637..1b4d7fa3e 100644
--- a/CI/linux/before_install.sh
+++ b/CI/linux/before_install.sh
@@ -5,7 +5,7 @@ sudo apt-get update
# Dependencies
sudo apt-get install libboost-all-dev
sudo apt-get install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev
-sudo apt-get install qtbase5-dev
+sudo apt-get install qtbase5-dev
sudo apt-get install ninja-build zlib1g-dev libavformat-dev libswscale-dev libtbb-dev libluajit-5.1-dev
# Optional dependencies
-sudo apt-get install libminizip-dev libfuzzylite-dev
+sudo apt-get install libminizip-dev libfuzzylite-dev qttools5-dev
From 5dea5fcd859e8565b924118d930a60175747cc9b Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Mon, 26 Dec 2022 00:22:20 +0200
Subject: [PATCH 014/197] Fix ios build
---
launcher/main.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/launcher/main.cpp b/launcher/main.cpp
index 68064f70b..21fee7634 100644
--- a/launcher/main.cpp
+++ b/launcher/main.cpp
@@ -66,7 +66,9 @@ void startGame(const QStringList & args)
void startEditor(const QStringList & args)
{
+#ifndef Q_OS_IOS
startExecutable(pathToQString(VCMIDirs::get().editorPath()), args);
+#endif
}
#ifndef Q_OS_IOS
From 1963f3c7f193d92f4d9dcb63c60aea817b21a264 Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Mon, 26 Dec 2022 13:12:22 +0200
Subject: [PATCH 015/197] MXE update test
---
CI/mxe/before_install.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/CI/mxe/before_install.sh b/CI/mxe/before_install.sh
index 102df868d..1f5d667ef 100644
--- a/CI/mxe/before_install.sh
+++ b/CI/mxe/before_install.sh
@@ -5,8 +5,8 @@ sudo add-apt-repository 'deb http://security.ubuntu.com/ubuntu bionic-security m
sudo apt-get install -qq nsis ninja-build libssl1.0.0
# MXE repository was too slow for Travis far too often
-wget -nv https://github.com/vcmi/vcmi-deps-mxe/releases/download/2021-02-20/mxe-i686-w64-mingw32.shared-2021-01-22.tar
-tar -xvf mxe-i686-w64-mingw32.shared-2021-01-22.tar
+wget -nv https://github.com/vcmi/vcmi-deps-mxe/releases/download/2022-12-26/mxe-i686-w64-mingw32.shared-2022-12-26.tar
+tar -xvf mxe-i686-w64-mingw32.shared-2022-12-26.tar
sudo dpkg -i mxe-*.deb
sudo apt-get install -f --yes
From e9c08612adab99d3345ebff18ca55e6c27bd23e7 Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Mon, 26 Dec 2022 13:57:55 +0200
Subject: [PATCH 016/197] Added MXE update instructions
---
CI/mxe/before_install.sh | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/CI/mxe/before_install.sh b/CI/mxe/before_install.sh
index 1f5d667ef..d1a3b96d8 100644
--- a/CI/mxe/before_install.sh
+++ b/CI/mxe/before_install.sh
@@ -1,5 +1,14 @@
#!/bin/sh
+# steps to upgrade MXE dependencies:
+# 1) Use Debian/Ubuntu system or install one (virtual machines will work too)
+# 2) update following script to include any new dependencies
+# You can also run it to upgrade existing ones, but don't expect much
+# MXE repository only provides ancient versions for the sake of "stability"
+# https://github.com/vcmi/vcmi-deps-mxe/blob/master/mirror-mxe.sh
+# 3) make release in vcmi-deps-mxe repository using resulting tar archive
+# 4) update paths to tar archive in this script
+
# Install nsis for installer creation
sudo add-apt-repository 'deb http://security.ubuntu.com/ubuntu bionic-security main'
sudo apt-get install -qq nsis ninja-build libssl1.0.0
From bbb1d36bce9dad4d3e31601813fcac3e6349aa1b Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Tue, 27 Dec 2022 12:28:05 +0200
Subject: [PATCH 017/197] Fix formatting
---
CMakeLists.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d9945a1ca..4a91dedb0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -334,10 +334,10 @@ if(ENABLE_LAUNCHER OR ENABLE_EDITOR)
find_package(QT NAMES Qt6 Qt5 COMPONENTS LinguistTools )
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS LinguistTools)
- if (NOT Qt5LinguistTools_DIR)
+ if(NOT Qt5LinguistTools_DIR)
set(ENABLE_TRANSLATIONS OFF)
endif()
- if (ENABLE_TRANSLATIONS)
+ if(ENABLE_TRANSLATIONS)
add_definitions(-DENABLE_QT_TRANSLATIONS)
endif()
endif()
From b6f13ea50c067f8e0f3b0bf5bfc5b78e5d7dc208 Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Tue, 27 Dec 2022 12:28:40 +0200
Subject: [PATCH 018/197] Fix formatting
---
launcher/CMakeLists.txt | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt
index 93797558a..8aac6b418 100644
--- a/launcher/CMakeLists.txt
+++ b/launcher/CMakeLists.txt
@@ -90,12 +90,12 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
if(TARGET Qt6::Core)
qt_wrap_ui(launcher_UI_HEADERS ${launcher_FORMS})
- if (ENABLE_TRANSLATIONS)
+ if(ENABLE_TRANSLATIONS)
qt_add_translation( launcher_QM ${launcher_TS} )
endif()
else()
qt5_wrap_ui(launcher_UI_HEADERS ${launcher_FORMS})
- if (ENABLE_TRANSLATIONS)
+ if(ENABLE_TRANSLATIONS)
set_source_files_properties(${launcher_TS} PROPERTIES OUTPUT_LOCATION ${CMAKE_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}/launcher/translations)
qt5_add_translation( launcher_QM ${launcher_TS} )
endif()
@@ -173,6 +173,6 @@ else()
endif()
install(DIRECTORY icons DESTINATION ${RESOURCES_DESTINATION})
-if (ENABLE_TRANSLATIONS)
+if(ENABLE_TRANSLATIONS)
install(DIRECTORY translation DESTINATION ${RESOURCES_DESTINATION})
endif()
From 954ea9d5a9a86b79caa15ba9a17ac0c9d01dd3ac Mon Sep 17 00:00:00 2001
From: nordsoft
Date: Wed, 28 Dec 2022 01:14:10 +0400
Subject: [PATCH 019/197] Implement lasso brush
---
mapeditor/icons/brush-3.png | Bin 0 -> 1485 bytes
mapeditor/mainwindow.cpp | 16 ++++++++++
mapeditor/mainwindow.h | 2 ++
mapeditor/mainwindow.ui | 8 +++--
mapeditor/mapview.cpp | 58 ++++++++++++++++++++++++++++++++++++
5 files changed, 82 insertions(+), 2 deletions(-)
create mode 100644 mapeditor/icons/brush-3.png
diff --git a/mapeditor/icons/brush-3.png b/mapeditor/icons/brush-3.png
new file mode 100644
index 0000000000000000000000000000000000000000..19800c069ae5ce13875e18b5b7a04665709f4358
GIT binary patch
literal 1485
zcmV;;1v2`HP)Hg1+lHrgWSWcKdPn90sKGrRqvPeo9CG3uKX#J{(IASm?@+di}}l?o-=)F3E6
zwD^Ni=!>T7nL9I?X}YoAW$t|Qo$sD|?zw001?ah|SeB6#0T!CBEf+H4bBB+JJu8re
zhoBb*p;u8ID_yBf0ya+zcePvJL&AGs+11_tpRKn>9TgyPA7ZoSs0)aX0r00)%XR^J
z`jH<$>RKN5V(7OqK*TS4xZz{h!*f1C3ECFkK$#7nA@pGN!$;%jYv
zwjAKwmYb0gKL(K8-kPtb5${A?tlI~wzMrJ6wTdBr=Y%%%EaEMQ&o}4FQ^DA)s*}Z>
z!FI&AHCpoWI|RUqx?7s@$8!5^Q=anY1z>%X@i5{QA6kNcMelpE>R6eCYFpmMsVT
zrI(b06~u#xf1yS}_UGdMvD``!0~u->P=lA4?YN`hilQ
z|3tHka)7T{2CGqwjZfMwx$5irQN_*|e4l)UHmiYuz74Yp1t^#>hrJ3-SOXDcC_o0^
z7T9R1gAN8V6s;5)ieI5-7aQlmJn}lUna#nz!j%5V$X|o`xX!dHWQRV27P1=rj;t2b
zW$~+pTw@bIek?ZvKPDL<64`^#UNTAck#RBsB6*5DP4<%UA_FqU$I>2EH_cM;u)Q~SI+rg`Rn{L
z_AC5qq~L$#SMj%U$6Cz0vP{G5Y*=%5RT^yu;}-DInZ=349rJPVM6C3K^oO)8y(fJr{l>k`ead~!ea?NsT>_Ci%bnxC;Vy6=
zb6>{xYV#Ue-+LB$7`JEXmTRm^AtP)R9u{)KHsMiWGV&)32xCG~*nyU<>-!d;FP=Re
z4r3qYr~6#KE>;1F`>_J_P5xC?ROxV(DIHdCO*p$HRQI@7^PwV@Pvuf+
z5K}u-6REM(K@W$srgorh0{i?O)v0c>QtHxU-hBdD(>iYJ4b2sIOVX2K8m~4gmYVA5
zh^QEb$V`rCQ-|7ZS{nuL-t>?3n=-o(6I(7vocj#GzCZEo`!3>+v;dYIfPu#&ZWzzX
z2i^rZ^Mu;6+rb@?NPG+6)c5T6zxpzGe*M(x+{AON=PiJ>H#?ob-|uwRK0yDg0B4PV
z0id6JRRdfL?*IS*IAvH#W=%~1DgXcg2mk?xX#fNO00031000^Q000000-yo_1ONa4
z0RR91AfN*P1ONa40RR91AOHXW0FO>U$p8QWD@jB_R9Fe^R9g
zAT3pYI%z6R9NRJ4N_jtT0&fBjCva@g|2iBY|Hm1&S|o^H!X35N_JlLN&p4`yPv{WP
zxM^mND6Y)LTY$;vh(;RLy8@1{K)iGwB-wL!H|EoBqk+Y~FkmGhK#RnuV48s@-eYg1
z*{E0Wp4+>(7yNSqqUpIj*$epxU?s*RhPVg6wLl2427|gOj#qG}IQdimJ<)(zA{lQn
z@Vt~NE(H4v4`{t?&5Rw1W@l&sdsydr>~oEujQ22%RiEs>J)L-2h)BeY%BmDShe%GN
z78Y?9Mv;z7NX*-5Q;5_0Zq57^;MD&L#;b81qn|xQkYMjE6R{Z9F9{=2
nbS81lKs2|d|ETzu4I+{sT-1)tsZ|@Y00000NkvXXu0mjfTsXM{
literal 0
HcmV?d00001
diff --git a/mapeditor/mainwindow.cpp b/mapeditor/mainwindow.cpp
index b8408b0f5..4bdbcc98e 100644
--- a/mapeditor/mainwindow.cpp
+++ b/mapeditor/mainwindow.cpp
@@ -839,6 +839,22 @@ void MainWindow::on_toolArea_clicked(bool checked)
ui->tabWidget->setCurrentIndex(0);
}
+void MainWindow::on_toolLasso_clicked(bool checked)
+{
+ ui->toolBrush->setChecked(false);
+ ui->toolBrush2->setChecked(false);
+ ui->toolBrush4->setChecked(false);
+ ui->toolArea->setChecked(false);
+ //ui->toolLasso->setChecked(false);
+
+ if(checked)
+ ui->mapView->selectionTool = MapView::SelectionTool::Lasso;
+ else
+ ui->mapView->selectionTool = MapView::SelectionTool::None;
+
+ ui->tabWidget->setCurrentIndex(0);
+}
+
void MainWindow::on_actionErase_triggered()
{
on_toolErase_clicked();
diff --git a/mapeditor/mainwindow.h b/mapeditor/mainwindow.h
index ccd410aa8..d367525bd 100644
--- a/mapeditor/mainwindow.h
+++ b/mapeditor/mainwindow.h
@@ -87,6 +87,8 @@ private slots:
void on_toolBrush2_clicked(bool checked);
void on_toolBrush4_clicked(bool checked);
+
+ void on_toolLasso_clicked(bool checked);
void on_inspectorWidget_itemChanged(QTableWidgetItem *item);
diff --git a/mapeditor/mainwindow.ui b/mapeditor/mainwindow.ui
index 766114052..6e7522956 100644
--- a/mapeditor/mainwindow.ui
+++ b/mapeditor/mainwindow.ui
@@ -642,7 +642,7 @@
-
- false
+ true
@@ -663,7 +663,11 @@
- O
+
+
+
+
+ icons:brush-3.pngicons:brush-3.png
true
diff --git a/mapeditor/mapview.cpp b/mapeditor/mapview.cpp
index e24a990cb..6d91481ae 100644
--- a/mapeditor/mapview.cpp
+++ b/mapeditor/mapview.cpp
@@ -155,6 +155,14 @@ void MapView::mouseMoveEvent(QMouseEvent *mouseEvent)
}
sc->selectionTerrainView.draw();
break;
+
+ case MapView::SelectionTool::Lasso:
+ if(mouseEvent->buttons() == Qt::LeftButton)
+ {
+ sc->selectionTerrainView.select(tile);
+ sc->selectionTerrainView.draw();
+ }
+ break;
case MapView::SelectionTool::None:
if(mouseEvent->buttons() & Qt::RightButton)
@@ -247,6 +255,7 @@ void MapView::mousePressEvent(QMouseEvent *event)
break;
case MapView::SelectionTool::Area:
+ case MapView::SelectionTool::Lasso:
if(event->button() == Qt::RightButton)
break;
@@ -329,6 +338,55 @@ void MapView::mouseReleaseEvent(QMouseEvent *event)
switch(selectionTool)
{
+ case MapView::SelectionTool::Lasso: {
+ if(event->button() == Qt::RightButton)
+ break;
+
+ //key: y position of tile
+ //value.first: x position of left tile
+ //value.second: x postiion of right tile
+ std::map> selectionRangeMapX, selectionRangeMapY;
+ for(auto & t : sc->selectionTerrainView.selection())
+ {
+ auto pairIter = selectionRangeMapX.find(t.y);
+ if(pairIter == selectionRangeMapX.end())
+ selectionRangeMapX[t.y] = std::make_pair(t.x, t.x);
+ else
+ {
+ pairIter->second.first = std::min(pairIter->second.first, t.x);
+ pairIter->second.second = std::max(pairIter->second.second, t.x);
+ }
+
+ pairIter = selectionRangeMapY.find(t.x);
+ if(pairIter == selectionRangeMapY.end())
+ selectionRangeMapY[t.x] = std::make_pair(t.y, t.y);
+ else
+ {
+ pairIter->second.first = std::min(pairIter->second.first, t.y);
+ pairIter->second.second = std::max(pairIter->second.second, t.y);
+ }
+ }
+
+ std::set selectionByX, selectionByY;
+ std::vector finalSelection;
+ for(auto & selectionRange : selectionRangeMapX)
+ {
+ for(int i = selectionRange.second.first; i < selectionRange.second.second; ++i)
+ selectionByX.insert(int3(i, selectionRange.first, sc->level));
+ }
+ for(auto & selectionRange : selectionRangeMapY)
+ {
+ for(int i = selectionRange.second.first; i < selectionRange.second.second; ++i)
+ selectionByY.insert(int3(selectionRange.first, i, sc->level));
+ }
+ std::set_intersection(selectionByX.begin(), selectionByX.end(), selectionByY.begin(), selectionByY.end(), std::back_inserter(finalSelection));
+ for(auto & lassoTile : finalSelection)
+ sc->selectionTerrainView.select(lassoTile);
+
+ sc->selectionTerrainView.draw();
+ break;
+ }
+
case MapView::SelectionTool::None:
if(event->button() == Qt::RightButton)
break;
From 2687b7af7f5acaa13f3cda9aa770565c4a4b701f Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Wed, 28 Dec 2022 12:28:59 +0200
Subject: [PATCH 020/197] Increased default width of lobby room creation window
---
launcher/lobby/lobbyroomrequest_moc.ui | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/launcher/lobby/lobbyroomrequest_moc.ui b/launcher/lobby/lobbyroomrequest_moc.ui
index a05741970..5b8db9b7b 100644
--- a/launcher/lobby/lobbyroomrequest_moc.ui
+++ b/launcher/lobby/lobbyroomrequest_moc.ui
@@ -9,7 +9,7 @@
0
0
- 193
+ 227
188
From 60f25f7a0c7582bd3381089c30e69efb92e6e286 Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Wed, 28 Dec 2022 12:29:26 +0200
Subject: [PATCH 021/197] Added Polish translation by dydzio
---
launcher/translation/polish.ts | 276 +++++++++++++++------------------
1 file changed, 121 insertions(+), 155 deletions(-)
diff --git a/launcher/translation/polish.ts b/launcher/translation/polish.ts
index 2ef17dd5e..713da4449 100644
--- a/launcher/translation/polish.ts
+++ b/launcher/translation/polish.ts
@@ -7,42 +7,37 @@
-
+ Pola modów
-
-
+ Nazwa
-
-
+ Typ
-
-
+ Wersja
-
-
+ Rosmiar
-
-
+ Autor
@@ -51,116 +46,116 @@
-
+ Filtruj
-
+ Wszystkie mody
-
+ Dostępny do pobrania
-
+ Zainstalowany
-
+ Można zaktualizować
-
+ Aktywny
-
+ Nieaktywny
-
+ Pobierz i odśwież repozytoria
-
+ Opis
-
+ Lista zmian
-
+ Zrzuty ekranu
-
+ Pokaż szczegóły
-
+ Odinstaluj
-
+ Włącz
-
+ Wyłącz
-
+ Zaktualizuj
-
+ Zainstaluj
-
+ %p% (%v KB z %m KB)
-
+ Przerwij
@@ -174,9 +169,8 @@
-
-
+ Nazwa moda
@@ -190,9 +184,8 @@
-
-
+ Zainstalowana wersja
@@ -206,9 +199,8 @@
-
-
+ Najnowsza wersja
@@ -222,9 +214,8 @@
-
-
+ Rozmiar pobierania
@@ -238,9 +229,8 @@
-
-
+ Autorzy
@@ -254,9 +244,8 @@
-
-
+ Licencja
@@ -270,9 +259,8 @@
-
-
+ Źródło
@@ -297,10 +285,8 @@
-
-
-
+ Kompatybilność
@@ -325,10 +311,8 @@
-
-
-
+ Wymagana wersja VCMI
@@ -342,9 +326,8 @@
-
-
+ Wspierana wersja VCMI
@@ -358,9 +341,8 @@
-
-
+ Wspierane wersje VCMI
@@ -374,9 +356,8 @@
-
-
+ Wymagane mody
@@ -390,9 +371,8 @@
-
-
+ Konfliktujące mody
@@ -406,9 +386,8 @@
-
-
+ Ten mod nie może zostać zainstalowany lub włączony ponieważ następujące zależności nie zostały spełnione
@@ -422,9 +401,8 @@
-
-
+ Ten mod nie może zostać włączony ponieważ następujące mody są z nim niekompatybilne
@@ -438,9 +416,8 @@
-
-
+ Ten mod nie może zostać wyłączony ponieważ jest wymagany by do uruchomienia następujących modów
@@ -454,9 +431,8 @@
-
-
+ Ten mod nie może zostać odinstalowany lub zaktualizowany ponieważ jest wymagany do uruchomienia następujących modów
@@ -470,9 +446,8 @@
-
-
+ To jest moduł składowy innego moda i nie może być zainstalowany lub odinstalowany oddzielnie od moda nadrzędnego
@@ -486,9 +461,8 @@
-
-
+ Uwagi
@@ -502,9 +476,8 @@
-
-
+ Zrzut ekranu %1
@@ -512,9 +485,8 @@
-
-
+ Mod jest kompatybilny
@@ -522,9 +494,8 @@
-
-
+ Mod jest niekompatybilny
@@ -533,7 +504,7 @@
-
+ Zmień
@@ -541,13 +512,13 @@
-
+ Otwórz
-
+ Katalog danych użytkownika
@@ -556,7 +527,7 @@
-
+ Włączony
@@ -565,91 +536,91 @@
-
+ Wyłączony
-
+ Pełny ekran
-
+ Repozytoria
-
+ Sprawdź czy są aktualizacje
-
+
-
+ AI jednostek neutralnych
-
+ Prawdziwy
-
+ Ogólne
-
+ AI graczy
-
+ Język VCMI
-
+ Środkowoeuropejski (Windows 1250)
-
+ Cyrylica (Windows 1251)
-
+ Wschodnioeuropejski (Windows 1252)
-
+ Uproszczony chiński (GBK)
-
+ Uproszczony chiński (GB2312)
-
+ Koreański (Windows 949)
@@ -659,128 +630,123 @@
-
-
-
-
-
Polska
-
+
Русский (Rosyjski)
-
+
Українська (Ukraiński)
-
+
-
+ AI sojuszników
-
+ Rozdzielczość
-
+ AI na mapie przygody
-
+ Autozapis
-
+ Numer wyświetlacza
-
+ Sprawdź repozytoria przy starcie
-
+ Port sieciowy
-
+ Katalogi z danymi
-
+ Obraz
-
+ Zestaw znaków w grze
-
+ Katalog danych dodatkowych
-
+ Katalog logów
-
+ Pokaż intro
-
+ Ustawienia Launchera
-
+ Wersja programu
-
+
-
+ AI wrogich graczy
-
+ AI na polu bitwy
@@ -789,7 +755,7 @@
-
+ Wyświetlacz obrazków
@@ -798,73 +764,73 @@
-
+ Połącz
-
+ Nazwa użytkownika
-
+ Serwer
-
+ Sesja
-
+ Gracze
-
+ Nowy pokój
-
+ Dołącz
-
+ Zgłoś gotowość
-
+ Niezgodność modów
-
+ Wyjdź
-
+ Wyrzuć gracza
-
+ Gracze w pokoju
@@ -873,25 +839,25 @@
-
+ Ustawienia pokoju
-
+ Nazwa pokoju
-
+ Maks. ilość graczy
-
+ Hasło (opcjonalnie)
@@ -900,48 +866,48 @@
-
+ VCMI Launcher (program startowy)
-
+ Ustawienia
-
+ Uruchom grę
-
+ Lobby
-
+ Mody
-
+ Edytor
-
+ Edytor map
-
+ Graj
@@ -955,7 +921,7 @@
-
+ Nazwa
@@ -966,7 +932,7 @@
-
+ Rodzaj
@@ -977,7 +943,7 @@
-
+ Wersja
@@ -988,7 +954,7 @@
-
+ Rozmiar
@@ -999,7 +965,7 @@
-
+ Autor
@@ -1008,19 +974,19 @@
-
+ Posiadasz obecnie aktualną wersję
-
+ Zamknij
-
+ Sprawdź aktualizacje przy uruchomieniu
From 42ecf05c47cca48bc0e1c3bd355dd00f925abcc8 Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Wed, 28 Dec 2022 12:40:39 +0200
Subject: [PATCH 022/197] Regenerated translations
---
launcher/translation/english.ts | 422 -----------------------------
launcher/translation/german.ts | 422 -----------------------------
launcher/translation/polish.ts | 408 +---------------------------
launcher/translation/russian.ts | 422 -----------------------------
launcher/translation/ukrainian.ts | 426 +-----------------------------
5 files changed, 12 insertions(+), 2088 deletions(-)
diff --git a/launcher/translation/english.ts b/launcher/translation/english.ts
index e4d00b8b5..4dbc6d084 100644
--- a/launcher/translation/english.ts
+++ b/launcher/translation/english.ts
@@ -4,42 +4,26 @@
CModListModel
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -48,480 +32,209 @@
CModListView
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -530,7 +243,6 @@
CSettingsView
-
@@ -539,12 +251,10 @@
-
-
@@ -554,7 +264,6 @@
-
@@ -563,96 +272,80 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -664,120 +357,100 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -786,7 +459,6 @@
ImageViewer
-
@@ -795,73 +467,61 @@
Lobby
-
-
-
-
-
-
-
-
-
-
-
-
@@ -870,25 +530,21 @@
LobbyRoomRequest
-
-
-
-
@@ -897,127 +553,49 @@
MainWindow
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ModFields
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
UpdateDialog
-
-
-
diff --git a/launcher/translation/german.ts b/launcher/translation/german.ts
index 8e7ded6c3..fa27590e4 100644
--- a/launcher/translation/german.ts
+++ b/launcher/translation/german.ts
@@ -4,42 +4,26 @@
CModListModel
-
-
-
-
-
-
-
-
Name
-
-
Typ
-
-
Version
-
-
Größe
-
-
Autor
@@ -48,480 +32,209 @@
CModListView
-
Filter
-
Alle Mods
-
Herunterladbar
-
Installiert
-
Aktualisierbar
-
Aktiv
-
Inaktiv
-
Repositories herunterladen && aktualisieren
-
Beschreibung
-
Änderungslog
-
Screenshots
-
Details anzeigen
-
Deinstallieren
-
Aktivieren
-
Deaktivieren
-
Aktualisieren
-
Installieren
-
%p% (%v КB von %m КB)
-
Abbrechen
-
-
-
-
-
-
-
-
-
-
-
Mod-Name
-
-
-
-
-
-
-
-
-
-
-
Installierte Version
-
-
-
-
-
-
-
-
-
-
-
Letzte Version
-
-
-
-
-
-
-
-
-
-
-
Downloadgröße
-
-
-
-
-
-
-
-
-
-
-
Autoren
-
-
-
-
-
-
-
-
-
-
-
Lizenz
-
-
-
-
-
-
-
-
-
-
-
Home
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Kompatibilität
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Benötigte VCMI Version
-
-
-
-
-
-
-
-
-
-
-
Unterstützte VCMI Version
-
-
-
-
-
-
-
-
-
-
-
Unterstützte VCMI Versionen
-
-
-
-
-
-
-
-
-
-
-
Benötigte Mods
-
-
-
-
-
-
-
-
-
-
-
Mods mit Konflikt
-
-
-
-
-
-
-
-
-
-
-
Diese Mod kann nicht installiert oder aktiviert werden, da die folgenden Abhängigkeiten nicht vorhanden sind
-
-
-
-
-
-
-
-
-
-
-
Diese Mod kann nicht aktiviert werden, da folgende Mods nicht mit dieser Mod kompatibel sind
-
-
-
-
-
-
-
-
-
-
-
Diese Mod kann nicht deaktiviert werden, da sie zum Ausführen der folgenden Mods erforderlich ist
-
-
-
-
-
-
-
-
-
-
-
Diese Mod kann nicht deinstalliert oder aktualisiert werden, da sie für die folgenden Mods erforderlich ist
-
-
-
-
-
-
-
-
-
-
-
Dies ist eine Submod und kann nicht separat von der Hauptmod installiert oder deinstalliert werden
-
-
-
-
-
-
-
-
-
-
-
Anmerkungen
-
-
-
-
-
-
-
-
-
-
-
Screenshot %1
-
-
-
-
-
Mod ist kompatibel
-
-
-
-
-
Mod ist inkompatibel
@@ -530,7 +243,6 @@
CSettingsView
-
Ändern
@@ -539,12 +251,10 @@
-
Öffnen
-
Verzeichnis der Benutzerdaten
@@ -554,7 +264,6 @@
-
Aus
@@ -563,102 +272,85 @@
-
An
-
Vollbild
-
KI auf dem Schlachtfeld
-
Repositories
-
Nach Aktualisierungen suchen
-
Neutrale KI
-
Vollständig
-
Allgemein
-
Spieler-KI
-
VCMI-Sprache
-
Mitteleuropäisch (Windows 1250)
-
Kyrillische Schrift (Windows 1251)
-
Westeuropäisch (Windows 1252)
-
Vereinfachtes Chinesisch (GBK)
-
Vereinfachtes Chinesisch (GB2312)
-
Koreanisch (Windows 949)
-
English (Englisch)
@@ -670,115 +362,96 @@
-
Polska (Polnisch)
-
Русский (Russisch)
-
Українська (Ukrainisch)
-
Freundliche KI
-
Auflösung
-
KI auf der Karte
-
Autospeichern
-
Anzeige-Index
-
Repositories beim Start prüfen
-
Netzwerk-Port
-
Daten-Verzeichnisse
-
Video
-
Heroes III Zeichensatz
-
Zusätzliches Daten-Verzeichnis
-
Verzeichnis der Log-Dateien
-
Intro anzeigen
-
Launcher-Einstellungen
-
Version des Builds
-
Feindliche KI
@@ -786,7 +459,6 @@
ImageViewer
-
Bildbetrachter
@@ -795,73 +467,61 @@
Lobby
-
Verbinden
-
Benutzername
-
Server
-
Sitzung
-
Spieler
-
Neuer Raum
-
Raum beitreten
-
Bereit
-
Mods stimmen nicht überein
-
Verlassen
-
Spieler kicken
-
Spieler im Raum
@@ -870,25 +530,21 @@
LobbyRoomRequest
-
Raumeinstellungen
-
Raumname
-
Maximale Spieler
-
Passwort (optional)
@@ -897,127 +553,49 @@
MainWindow
-
VCMI Launcher
-
Mods
-
Editor
-
-
-
- Karteneditor
-
-
-
Einstellungen
-
Lobby
-
Spiel starten
-
-
-
- Spielen
-
-
-
- ModFields
-
-
-
-
-
-
-
-
-
- Name
-
-
-
-
-
-
-
-
-
-
- Typ
-
-
-
-
-
-
-
-
-
-
- Version
-
-
-
-
-
-
-
-
-
-
- Größe
-
-
-
-
-
-
-
-
-
-
- Autor
-
UpdateDialog
-
Sie haben die neueste Version
-
Beenden
-
Nach Aktualisierungen beim Starten prüfen
diff --git a/launcher/translation/polish.ts b/launcher/translation/polish.ts
index 713da4449..4fedabb7b 100644
--- a/launcher/translation/polish.ts
+++ b/launcher/translation/polish.ts
@@ -4,37 +4,26 @@
CModListModel
-
-
-
- Pola modów
-
-
-
Nazwa
-
Typ
-
Wersja
-
Rosmiar
-
Autor
@@ -43,456 +32,209 @@
CModListView
-
Filtruj
-
Wszystkie mody
-
Dostępny do pobrania
-
Zainstalowany
-
Można zaktualizować
-
Aktywny
-
Nieaktywny
-
Pobierz i odśwież repozytoria
-
Opis
-
Lista zmian
-
Zrzuty ekranu
-
Pokaż szczegóły
-
Odinstaluj
-
Włącz
-
Wyłącz
-
Zaktualizuj
-
Zainstaluj
-
%p% (%v KB z %m KB)
-
Przerwij
-
-
-
-
-
-
-
-
-
-
Nazwa moda
-
-
-
-
-
-
-
-
-
-
Zainstalowana wersja
-
-
-
-
-
-
-
-
-
-
Najnowsza wersja
-
-
-
-
-
-
-
-
-
-
Rozmiar pobierania
-
-
-
-
-
-
-
-
-
-
Autorzy
-
-
-
-
-
-
-
-
-
-
Licencja
-
-
-
-
-
-
-
-
-
-
Źródło
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Kompatybilność
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Wymagana wersja VCMI
-
-
-
-
-
-
-
-
-
-
Wspierana wersja VCMI
-
-
-
-
-
-
-
-
-
-
Wspierane wersje VCMI
-
-
-
-
-
-
-
-
-
-
Wymagane mody
-
-
-
-
-
-
-
-
-
-
Konfliktujące mody
-
-
-
-
-
-
-
-
-
-
Ten mod nie może zostać zainstalowany lub włączony ponieważ następujące zależności nie zostały spełnione
-
-
-
-
-
-
-
-
-
-
Ten mod nie może zostać włączony ponieważ następujące mody są z nim niekompatybilne
-
-
-
-
-
-
-
-
-
-
Ten mod nie może zostać wyłączony ponieważ jest wymagany by do uruchomienia następujących modów
-
-
-
-
-
-
-
-
-
-
Ten mod nie może zostać odinstalowany lub zaktualizowany ponieważ jest wymagany do uruchomienia następujących modów
-
-
-
-
-
-
-
-
-
-
To jest moduł składowy innego moda i nie może być zainstalowany lub odinstalowany oddzielnie od moda nadrzędnego
-
-
-
-
-
-
-
-
-
-
Uwagi
-
-
-
-
-
-
-
-
-
-
Zrzut ekranu %1
-
-
-
-
Mod jest kompatybilny
-
-
-
-
Mod jest niekompatybilny
@@ -501,7 +243,6 @@
CSettingsView
-
Zmień
@@ -510,12 +251,10 @@
-
Otwórz
-
Katalog danych użytkownika
@@ -525,7 +264,6 @@
-
Włączony
@@ -534,216 +272,185 @@
-
Wyłączony
-
Pełny ekran
-
Repozytoria
-
Sprawdź czy są aktualizacje
-
-
+
AI jednostek neutralnych
-
Prawdziwy
-
Ogólne
-
AI graczy
-
Język VCMI
-
Środkowoeuropejski (Windows 1250)
-
Cyrylica (Windows 1251)
-
Wschodnioeuropejski (Windows 1252)
-
Uproszczony chiński (GBK)
-
Uproszczony chiński (GB2312)
-
Koreański (Windows 949)
-
English (Angielski)
-
+
+ Deutsch (Niemiecki)
+
+
+
Polska
-
-
+
Русский (Rosyjski)
-
-
+
Українська (Ukraiński)
-
-
+
AI sojuszników
-
Rozdzielczość
-
AI na mapie przygody
-
Autozapis
-
Numer wyświetlacza
-
Sprawdź repozytoria przy starcie
-
Port sieciowy
-
Katalogi z danymi
-
Obraz
-
Zestaw znaków w grze
-
Katalog danych dodatkowych
-
Katalog logów
-
Pokaż intro
-
Ustawienia Launchera
-
Wersja programu
-
-
+
AI wrogich graczy
-
AI na polu bitwy
@@ -752,7 +459,6 @@
ImageViewer
-
Wyświetlacz obrazków
@@ -761,73 +467,61 @@
Lobby
-
Połącz
-
Nazwa użytkownika
-
Serwer
-
Sesja
-
Gracze
-
Nowy pokój
-
Dołącz
-
Zgłoś gotowość
-
Niezgodność modów
-
Wyjdź
-
Wyrzuć gracza
-
Gracze w pokoju
@@ -836,25 +530,21 @@
LobbyRoomRequest
-
Ustawienia pokoju
-
Nazwa pokoju
-
Maks. ilość graczy
-
Hasło (opcjonalnie)
@@ -863,127 +553,49 @@
MainWindow
-
VCMI Launcher (program startowy)
-
Ustawienia
-
Uruchom grę
-
Lobby
-
Mody
-
Edytor
-
-
-
-
- Edytor map
-
-
-
-
- Graj
-
-
-
- ModFields
-
-
-
-
-
-
-
-
-
- Nazwa
-
-
-
-
-
-
-
-
-
-
- Rodzaj
-
-
-
-
-
-
-
-
-
-
- Wersja
-
-
-
-
-
-
-
-
-
-
- Rozmiar
-
-
-
-
-
-
-
-
-
-
- Autor
-
UpdateDialog
-
Posiadasz obecnie aktualną wersję
-
Zamknij
-
Sprawdź aktualizacje przy uruchomieniu
diff --git a/launcher/translation/russian.ts b/launcher/translation/russian.ts
index 5bb6e94cd..e855f9981 100644
--- a/launcher/translation/russian.ts
+++ b/launcher/translation/russian.ts
@@ -4,42 +4,26 @@
CModListModel
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -48,480 +32,209 @@
CModListView
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -530,7 +243,6 @@
CSettingsView
-
@@ -539,12 +251,10 @@
-
-
@@ -554,7 +264,6 @@
-
@@ -563,96 +272,80 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
English (Английский)
@@ -664,120 +357,100 @@
-
Polska (Польский)
-
Русский
-
Українська (Украинский)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -786,7 +459,6 @@
ImageViewer
-
@@ -795,73 +467,61 @@
Lobby
-
-
-
-
-
-
-
-
-
-
-
-
@@ -870,25 +530,21 @@
LobbyRoomRequest
-
-
-
-
@@ -897,127 +553,49 @@
MainWindow
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ModFields
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
UpdateDialog
-
-
-
diff --git a/launcher/translation/ukrainian.ts b/launcher/translation/ukrainian.ts
index d9fdff7ce..0ceb04e55 100644
--- a/launcher/translation/ukrainian.ts
+++ b/launcher/translation/ukrainian.ts
@@ -4,42 +4,26 @@
CModListModel
-
-
-
-
-
-
-
-
Назва
-
-
Тип
-
-
Версія
-
-
Розмір
-
-
Автори
@@ -48,480 +32,209 @@
CModListView
-
Фільтр
-
Усі модифікації
-
Усі доступні
-
Встановлені
-
Доступні оновлення
-
Активні
-
Неактивні
-
Оновити репозиторії
-
Опис
-
Зміни
-
Знімки
-
Показати подробиці
-
Видалити
-
Активувати
-
Деактивувати
-
Оновити
-
Встановити
-
%p% (%v КБ з %m КБ)
-
Відмінити
-
-
-
-
-
-
-
-
-
-
-
Назва модифікації
-
-
-
-
-
-
-
-
-
-
-
Встановлена версія
-
-
-
-
-
-
-
-
-
-
-
Найновіша версія
-
-
-
-
-
-
-
-
-
-
-
Розмір для завантаження
-
-
-
-
-
-
-
-
-
-
-
Автори
-
-
-
-
-
-
-
-
-
-
-
Ліцензія
-
-
-
-
-
-
-
-
-
-
-
Домашня сторінка
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Сумісність
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Необхідна версія VCMI
-
-
-
-
-
-
-
-
-
-
-
Підтримувана версія VCMI
-
-
-
-
-
-
-
-
-
-
-
Підтримувані версії VCMI
-
-
-
-
-
-
-
-
-
-
-
Необхідні модифікації
-
-
-
-
-
-
-
-
-
-
-
Конфліктуючі модифікації
-
-
-
-
-
-
-
-
-
-
-
Цю модифікацію не можна встановити чи активувати, оскільки відсутні наступні залежності
-
-
-
-
-
-
-
-
-
-
-
Цю модифікацію не можна ввімкнути, оскільки наступні модифікації несумісні з цією модифікацією
-
-
-
-
-
-
-
-
-
-
-
Цю модифікацію не можна відключити, оскільки вона необхідна для запуску наступних модифікацій
-
-
-
-
-
-
-
-
-
-
-
Цю модифікацію не можна видалити або оновити, оскільки вона необхідна для запуску наступних модифікацій
-
-
-
-
-
-
-
-
-
-
-
Це вкладена модифікація, і її не можна встановити або видалити окремо від батьківської модифікації
-
-
-
-
-
-
-
-
-
-
-
Примітки
-
-
-
-
-
-
-
-
-
-
-
Знімок екрану %1
-
-
-
-
-
Модифікація сумісна
-
-
-
-
-
Модифікація несумісна
@@ -530,7 +243,6 @@
CSettingsView
-
Змінити
@@ -539,12 +251,10 @@
-
Відкрити
-
Тека даних користувача
@@ -554,7 +264,6 @@
-
Вимкнено
@@ -563,102 +272,85 @@
-
Увімкнено
-
Повноекранний режим
-
Штучний інтелект на полі бою
-
Репозиторії
-
Оновити зараз
-
Нейтральний ШІ
-
Повний
-
Загальні налаштування
-
ШІ гравців
-
Мова VCMI
-
Центральноєвропейська (Windows 1250)
-
Кирилиця (Windows 1251)
-
Західноєвропейська (Windows 1252)
-
Спрощена китайська (GBK)
-
Спрощена китайська (GB2312)
-
Корейська (Windows 949)
-
English (Англійська)
@@ -670,115 +362,96 @@
-
Polska (Польська)
-
Русский (Російська)
-
Українська
-
Дружній ШІ
-
Роздільна здатність
-
Штучний інтелект на карті пригод
-
Автозбереження
-
Дісплей
-
Перевірка репозиторіїв при запуску
-
Мережевий порт
-
Теки даних гри
-
Графіка
-
Кодування Heroes III
-
Додаткова тека даних
-
Тека файлів журналу
-
Вступні відео
-
Налаштування лаунчера
-
Версія збірки
-
Ворожий ШІ
@@ -786,7 +459,6 @@
ImageViewer
-
Перегляд зображень
@@ -795,73 +467,61 @@
Lobby
-
Підключитися
-
Ім'я користувача
-
Сервер
-
Сесія
-
Гравці
-
Створити кімнату
-
Приєднатися до кімнати
-
- Готовність!
+ Готовність
-
Модифікації, що не збігаються
-
Вийти з кімнати
-
Виключити гравця
-
Гравці у кімнаті
@@ -870,25 +530,21 @@
LobbyRoomRequest
-
Налаштування кімнати
-
Назва кімнати
-
Максимум гравців
-
Пароль (за бажанням)
@@ -897,127 +553,49 @@
MainWindow
-
VCMI Launcher
-
Модифікації
-
Редактор
-
-
-
- Редактор мап
-
-
-
Налаштування
-
Лобі
-
- Грати!
-
-
-
-
- Грати!
-
-
-
- ModFields
-
-
-
-
-
-
-
-
-
- Назва
-
-
-
-
-
-
-
-
-
-
- Тип
-
-
-
-
-
-
-
-
-
-
- Версія
-
-
-
-
-
-
-
-
-
-
- Розмір
-
-
-
-
-
-
-
-
-
-
- Автори
+ Грати
UpdateDialog
-
У вас встановлена остання версія
-
Закрити
-
Перевіряти наявність оновлень при запуску
From 858fb97f42d75d6e383fa0330bb0ea95350b62c2 Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Wed, 28 Dec 2022 17:56:22 +0200
Subject: [PATCH 023/197] Added -DENABLED_LAUNCHER and -DENABLED_EDITOR defines
---
CMakeLists.txt | 2 ++
launcher/main.cpp | 16 ++++++++--------
launcher/mainwindow_moc.cpp | 2 +-
3 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4a91dedb0..cbc87f20c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -474,9 +474,11 @@ if(NOT TARGET minizip::minizip)
endif()
if(ENABLE_LAUNCHER)
+ add_definitions(-DENABLE_LAUNCHER)
add_subdirectory(launcher)
endif()
if(ENABLE_EDITOR)
+ add_definitions(-DENABLE_EDITOR)
add_subdirectory(mapeditor)
endif()
add_subdirectory(client)
diff --git a/launcher/main.cpp b/launcher/main.cpp
index 21fee7634..dcd1f4cd8 100644
--- a/launcher/main.cpp
+++ b/launcher/main.cpp
@@ -63,14 +63,14 @@ void startGame(const QStringList & args)
startExecutable(pathToQString(VCMIDirs::get().clientPath()), args);
#endif
}
-
-void startEditor(const QStringList & args)
-{
-#ifndef Q_OS_IOS
- startExecutable(pathToQString(VCMIDirs::get().editorPath()), args);
-#endif
-}
-
+
+void startEditor(const QStringList & args)
+{
+#ifdef ENABLE_EDITOR
+ startExecutable(pathToQString(VCMIDirs::get().mapEditorPath()), args);
+#endif
+}
+
#ifndef Q_OS_IOS
void startExecutable(QString name, const QStringList & args)
{
diff --git a/launcher/mainwindow_moc.cpp b/launcher/mainwindow_moc.cpp
index d1a86d1d7..32a5b305d 100644
--- a/launcher/mainwindow_moc.cpp
+++ b/launcher/mainwindow_moc.cpp
@@ -69,7 +69,7 @@ MainWindow::MainWindow(QWidget * parent)
move(position);
}
-#ifdef Q_OS_IOS
+#ifndef ENABLE_EDITOR
ui->startEditorButton->hide();
#endif
From f9575d66906a043e1aefd421671fb9d1bfb29ab7 Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Wed, 28 Dec 2022 17:57:03 +0200
Subject: [PATCH 024/197] Added languages validation to settings schema
---
config/schemas/settings.json | 1 +
1 file changed, 1 insertion(+)
diff --git a/config/schemas/settings.json b/config/schemas/settings.json
index 34a721a61..dc52f17f4 100644
--- a/config/schemas/settings.json
+++ b/config/schemas/settings.json
@@ -53,6 +53,7 @@
},
"language" : {
"type":"string",
+ "enum" : [ "english", "german", "polish", "russian", "ukrainian" ],
"default" : "english"
},
"lastSave" : {
From cd6a894417b750055beafc36565c6aedf4e38e6a Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Wed, 28 Dec 2022 17:58:39 +0200
Subject: [PATCH 025/197] Call method from parent class after processing event
---
launcher/lobby/lobby_moc.cpp | 1 +
launcher/lobby/lobbyroomrequest_moc.cpp | 3 ++-
launcher/mainwindow_moc.cpp | 1 +
launcher/modManager/cmodlistview_moc.cpp | 1 +
launcher/modManager/imageviewer_moc.cpp | 1 +
launcher/settingsView/csettingsview_moc.cpp | 1 +
6 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/launcher/lobby/lobby_moc.cpp b/launcher/lobby/lobby_moc.cpp
index 5dc57b79d..0122d6801 100644
--- a/launcher/lobby/lobby_moc.cpp
+++ b/launcher/lobby/lobby_moc.cpp
@@ -41,6 +41,7 @@ void Lobby::changeEvent(QEvent *event)
{
ui->retranslateUi(this);
}
+ QWidget::changeEvent(event);
}
Lobby::~Lobby()
diff --git a/launcher/lobby/lobbyroomrequest_moc.cpp b/launcher/lobby/lobbyroomrequest_moc.cpp
index d8e10e524..f8feed9cd 100644
--- a/launcher/lobby/lobbyroomrequest_moc.cpp
+++ b/launcher/lobby/lobbyroomrequest_moc.cpp
@@ -29,10 +29,11 @@ LobbyRoomRequest::LobbyRoomRequest(SocketLobby & socket, const QString & room, c
void LobbyRoomRequest::changeEvent(QEvent *event)
{
- if ( event->type() == QEvent::LanguageChange)
+ if (event->type() == QEvent::LanguageChange)
{
ui->retranslateUi(this);
}
+ QDialog::changeEvent(event);
}
LobbyRoomRequest::~LobbyRoomRequest()
diff --git a/launcher/mainwindow_moc.cpp b/launcher/mainwindow_moc.cpp
index 32a5b305d..52c464d05 100644
--- a/launcher/mainwindow_moc.cpp
+++ b/launcher/mainwindow_moc.cpp
@@ -90,6 +90,7 @@ void MainWindow::changeEvent(QEvent *event)
{
ui->retranslateUi(this);
}
+ QMainWindow::changeEvent(event);
}
MainWindow::~MainWindow()
diff --git a/launcher/modManager/cmodlistview_moc.cpp b/launcher/modManager/cmodlistview_moc.cpp
index f977d3bac..28b547c72 100644
--- a/launcher/modManager/cmodlistview_moc.cpp
+++ b/launcher/modManager/cmodlistview_moc.cpp
@@ -41,6 +41,7 @@ void CModListView::changeEvent(QEvent *event)
ui->retranslateUi(this);
modModel->reloadRepositories();
}
+ QWidget::changeEvent(event);
}
void CModListView::setupFilterModel()
diff --git a/launcher/modManager/imageviewer_moc.cpp b/launcher/modManager/imageviewer_moc.cpp
index 107419073..e8a9b5814 100644
--- a/launcher/modManager/imageviewer_moc.cpp
+++ b/launcher/modManager/imageviewer_moc.cpp
@@ -26,6 +26,7 @@ void ImageViewer::changeEvent(QEvent *event)
{
ui->retranslateUi(this);
}
+ QDialog::changeEvent(event);
}
ImageViewer::~ImageViewer()
diff --git a/launcher/settingsView/csettingsview_moc.cpp b/launcher/settingsView/csettingsview_moc.cpp
index 73befdcad..a13b076eb 100644
--- a/launcher/settingsView/csettingsview_moc.cpp
+++ b/launcher/settingsView/csettingsview_moc.cpp
@@ -334,4 +334,5 @@ void CSettingsView::changeEvent(QEvent *event)
{
ui->retranslateUi(this);
}
+ QWidget::changeEvent(event);
}
From 5f4a99843506d255b621f233fe31539e3a39a63d Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Wed, 28 Dec 2022 17:59:16 +0200
Subject: [PATCH 026/197] editorPath -> mapEditorPath
---
launcher/main.cpp | 16 ++++++++--------
lib/VCMIDirs.cpp | 8 ++++----
lib/VCMIDirs.h | 2 +-
3 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/launcher/main.cpp b/launcher/main.cpp
index dcd1f4cd8..e6b866724 100644
--- a/launcher/main.cpp
+++ b/launcher/main.cpp
@@ -63,14 +63,14 @@ void startGame(const QStringList & args)
startExecutable(pathToQString(VCMIDirs::get().clientPath()), args);
#endif
}
-
-void startEditor(const QStringList & args)
-{
-#ifdef ENABLE_EDITOR
- startExecutable(pathToQString(VCMIDirs::get().mapEditorPath()), args);
-#endif
-}
-
+
+void startEditor(const QStringList & args)
+{
+#ifdef ENABLE_EDITOR
+ startExecutable(pathToQString(VCMIDirs::get().mapEditorPath()), args);
+#endif
+}
+
#ifndef Q_OS_IOS
void startExecutable(QString name, const QStringList & args)
{
diff --git a/lib/VCMIDirs.cpp b/lib/VCMIDirs.cpp
index a6031be1d..4a2501ee6 100644
--- a/lib/VCMIDirs.cpp
+++ b/lib/VCMIDirs.cpp
@@ -158,7 +158,7 @@ class VCMIDirsWIN32 final : public IVCMIDirs
std::vector dataPaths() const override;
bfs::path clientPath() const override;
- bfs::path editorPath() const override;
+ bfs::path mapEditorPath() const override;
bfs::path serverPath() const override;
bfs::path libraryPath() const override;
@@ -349,7 +349,7 @@ std::vector VCMIDirsWIN32::dataPaths() const
}
bfs::path VCMIDirsWIN32::clientPath() const { return binaryPath() / "VCMI_client.exe"; }
-bfs::path VCMIDirsWIN32::editorPath() const { return binaryPath() / "VCMI_editor.exe"; }
+bfs::path VCMIDirsWIN32::mapEditorPath() const { return binaryPath() / "VCMI_editor.exe"; }
bfs::path VCMIDirsWIN32::serverPath() const { return binaryPath() / "VCMI_server.exe"; }
bfs::path VCMIDirsWIN32::libraryPath() const { return "."; }
@@ -361,7 +361,7 @@ class IVCMIDirsUNIX : public IVCMIDirs
{
public:
bfs::path clientPath() const override;
- bfs::path editorPath() const override;
+ bfs::path mapEditorPath() const override;
bfs::path serverPath() const override;
virtual bool developmentMode() const;
@@ -374,7 +374,7 @@ bool IVCMIDirsUNIX::developmentMode() const
}
bfs::path IVCMIDirsUNIX::clientPath() const { return binaryPath() / "vcmiclient"; }
-bfs::path IVCMIDirsUNIX::editorPath() const { return binaryPath() / "vcmieditor"; }
+bfs::path IVCMIDirsUNIX::mapEditorPath() const { return binaryPath() / "vcmieditor"; }
bfs::path IVCMIDirsUNIX::serverPath() const { return binaryPath() / "vcmiserver"; }
#ifdef VCMI_APPLE
diff --git a/lib/VCMIDirs.h b/lib/VCMIDirs.h
index 33d38af73..bf35b4c0b 100644
--- a/lib/VCMIDirs.h
+++ b/lib/VCMIDirs.h
@@ -39,7 +39,7 @@ public:
virtual boost::filesystem::path clientPath() const = 0;
// Full path to editor executable, including name (e.g. /usr/bin/vcmieditor)
- virtual boost::filesystem::path editorPath() const = 0;
+ virtual boost::filesystem::path mapEditorPath() const = 0;
// Full path to server executable, including name (e.g. /usr/bin/vcmiserver)
virtual boost::filesystem::path serverPath() const = 0;
From df3d62c5bc62fe8e1d2c2c156d9a51f2ef1dba51 Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Wed, 28 Dec 2022 18:04:27 +0200
Subject: [PATCH 027/197] Formatting fix
---
launcher/modManager/cmodlistmodel_moc.cpp | 1 -
launcher/settingsView/csettingsview_moc.cpp | 5 ++---
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/launcher/modManager/cmodlistmodel_moc.cpp b/launcher/modManager/cmodlistmodel_moc.cpp
index 59e325241..7e9622f26 100644
--- a/launcher/modManager/cmodlistmodel_moc.cpp
+++ b/launcher/modManager/cmodlistmodel_moc.cpp
@@ -163,7 +163,6 @@ QVariant CModListModel::headerData(int section, Qt::Orientation orientation, int
void CModListModel::reloadRepositories()
{
- //emit headerDataChanged(Qt::Horizontal, 0, -1 );
beginResetModel();
endResetModel();
}
diff --git a/launcher/settingsView/csettingsview_moc.cpp b/launcher/settingsView/csettingsview_moc.cpp
index a13b076eb..58723bdad 100644
--- a/launcher/settingsView/csettingsview_moc.cpp
+++ b/launcher/settingsView/csettingsview_moc.cpp
@@ -87,7 +87,6 @@ void CSettingsView::loadSettings()
ui->comboBoxFullScreen->setDisabled(true);
#else
ui->comboBoxFullScreen->setCurrentIndex(settings["video"]["fullscreen"].Bool());
- //ui->checkBoxFullScreen->setChecked(settings["video"]["realFullscreen"].Bool());
#endif
ui->comboBoxFriendlyAI->setCurrentText(QString::fromStdString(settings["server"]["friendlyAI"].String()));
@@ -209,8 +208,8 @@ void CSettingsView::on_comboBoxFullScreen_currentIndexChanged(int index)
{
Settings nodeFullscreen = settings.write["video"]["fullscreen"];
Settings nodeRealFullscreen = settings.write["video"]["realFullscreen"];
- nodeFullscreen->Bool() = index != 0;
- nodeFullscreen->Bool() = index == 2;
+ nodeFullscreen->Bool() = (index != 0);
+ nodeRealFullscreen->Bool() = (index == 2);
}
void CSettingsView::on_comboBoxAutoCheck_currentIndexChanged(int index)
From d11abdcdef0e04f435d1915da380e14586edeb7f Mon Sep 17 00:00:00 2001
From: Ivan Savenko
Date: Wed, 28 Dec 2022 22:19:45 +0200
Subject: [PATCH 028/197] Updated icons with larger versions for scaling
---
launcher/icons/menu-game.png | Bin 5482 -> 47461 bytes
launcher/icons/menu-lobby.png | Bin 7352 -> 46771 bytes
launcher/icons/menu-mods.png | Bin 2986 -> 17265 bytes
launcher/icons/menu-settings.png | Bin 4474 -> 27531 bytes
4 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/launcher/icons/menu-game.png b/launcher/icons/menu-game.png
index 5f632e2b71bab48cd3c01d300a8146267c7c193a..6d2c83cbed60ab1e550173f29db3aeafdef73c3a 100644
GIT binary patch
literal 47461
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