Browse Source

Build stamp 09.05.2019 (testing)

Ivan Arkhipov 5 years ago
parent
commit
d545b76bc6
34 changed files with 1852 additions and 948 deletions
  1. 2 0
      src/Legacy-advanced/models/lotrodatmanager.cpp
  2. 10 3
      src/Legacy/Legacy.pro
  3. 3 21
      src/Legacy/constants.h
  4. 171 0
      src/Legacy/fonts.cpp
  5. 70 0
      src/Legacy/fonts.h
  6. 2 11
      src/Legacy/main.cpp
  7. 6 0
      src/Legacy/models/internallogicmanager.cpp
  8. 56 0
      src/Legacy/models/internallogicmanager.h
  9. 114 30
      src/Legacy/models/lotrodatmanager.cpp
  10. 13 8
      src/Legacy/models/lotrodatmanager.h
  11. 48 6
      src/Legacy/models/patchdownloader.cpp
  12. 10 3
      src/Legacy/models/patchdownloader.h
  13. 3 0
      src/Legacy/object_script.Legacy.Debug
  14. 3 0
      src/Legacy/object_script.Legacy.Release
  15. 56 2
      src/Legacy/widgets/aboutwidget.cpp
  16. 15 0
      src/Legacy/widgets/aboutwidget.h
  17. 50 54
      src/Legacy/widgets/aboutwidget.ui
  18. 12 0
      src/Legacy/widgets/chooseversiondialog.cpp
  19. 6 0
      src/Legacy/widgets/chooseversiondialog.h
  20. 330 303
      src/Legacy/widgets/chooseversiondialog.ui
  21. 20 0
      src/Legacy/widgets/dialogwindow.cpp
  22. 25 0
      src/Legacy/widgets/dialogwindow.h
  23. 251 0
      src/Legacy/widgets/dialogwindow.ui
  24. 11 1
      src/Legacy/widgets/helpwidget.cpp
  25. 6 0
      src/Legacy/widgets/helpwidget.h
  26. 13 13
      src/Legacy/widgets/helpwidget.ui
  27. 71 30
      src/Legacy/widgets/mainwindow.cpp
  28. 10 1
      src/Legacy/widgets/mainwindow.h
  29. 1 1
      src/Legacy/widgets/mainwindow.ui
  30. 41 61
      src/Legacy/widgets/settingswidget.cpp
  31. 225 285
      src/Legacy/widgets/settingswidget.ui
  32. 69 43
      src/Legacy/widgets/statuswidget.cpp
  33. 7 4
      src/Legacy/widgets/statuswidget.h
  34. 122 68
      src/Legacy/widgets/statuswidget.ui

+ 2 - 0
src/Legacy-advanced/models/lotrodatmanager.cpp

@@ -19,6 +19,8 @@ LotroDatManager::LotroDatManager(QSettings* app_settings_, QObject *parent) :
 
     qRegisterMetaType<LOTRO_DAT::FILE_TYPE>();
     qRegisterMetaType<LOTRO_DAT::SubfileData>();
+
+
 }
 
 void LotroDatManager::initialiseDatFile(QString file_path) {

+ 10 - 3
src/Legacy/Legacy.pro

@@ -30,7 +30,10 @@ SOURCES += \
     widgets/serverstatuswidget.cpp \
     models/selfupdater.cpp \
     widgets/chooseversiondialog.cpp \
-    widgets/weeklycodewidget.cpp
+    widgets/weeklycodewidget.cpp \
+    widgets/dialogwindow.cpp \
+    fonts.cpp \
+    models/internallogicmanager.cpp
 
 HEADERS += \
     models/downloader.h \
@@ -49,7 +52,10 @@ HEADERS += \
     models/selfupdater.h \
     widgets/chooseversiondialog.h \
     widgets/weeklycodewidget.h \
-    constants.h
+    constants.h \
+    widgets/dialogwindow.h \
+    fonts.h \
+    models/internallogicmanager.h
 
 FORMS += \
     widgets/helpwidget.ui \
@@ -60,7 +66,8 @@ FORMS += \
     widgets/newspiece.ui \
     widgets/serverstatuswidget.ui \
     widgets/chooseversiondialog.ui \
-    widgets/weeklycodewidget.ui
+    widgets/weeklycodewidget.ui \
+    widgets/dialogwindow.ui
 
 win32:RC_ICONS = $${PROJECT_ROOT_PATH}/resources/appicon.ico
 

+ 3 - 21
src/Legacy/constants.h

@@ -1,32 +1,14 @@
 #ifndef CONSTANTS_H
 #define CONSTANTS_H
 
+#include <fonts.h>
+
 const double default_window_width = 1000;
 const double default_window_height = 648;
-//10   11   13   16   17   19   20
-const double default_pixels_in_14_pt = 23;//14;
-const double default_pixels_in_13_pt = 21;//14;
-const double default_pixels_in_12_pt = 20;//14;
-const double default_pixels_in_11_pt = 19;//13;
-const double default_pixels_in_10_pt = 17;//12;
-const double default_pixels_in_9_pt = 16;//11;
-const double default_pixels_in_8_pt = 14;//9;
-const double default_pixels_in_7_pt = 12;//8;
-const double default_pixels_in_6_pt = 10;//7;
 
 // Defined and should be updated only by MainWindow!!!
+
 extern double window_height;
 extern double window_width;
 
-
-extern int pixels_in_14_pt;
-extern int pixels_in_13_pt;
-extern int pixels_in_12_pt;
-extern int pixels_in_11_pt;
-extern int pixels_in_10_pt;
-extern int pixels_in_9_pt;
-extern int pixels_in_8_pt;
-extern int pixels_in_7_pt;
-extern int pixels_in_6_pt;
-
 #endif // CONSTANTS_H

+ 171 - 0
src/Legacy/fonts.cpp

@@ -0,0 +1,171 @@
+#include "fonts.h"
+// Global. Fonts
+
+QFont garamond_6pt;
+QFont garamond_7pt;
+QFont garamond_8pt;
+QFont garamond_9pt;
+QFont garamond_10pt;
+QFont garamond_11pt;
+QFont garamond_12pt;
+QFont garamond_13pt;
+QFont garamond_14pt;
+QFont garamond_15pt;
+QFont garamond_16pt;
+
+QFont trajan_6pt;
+QFont trajan_7pt;
+QFont trajan_8pt;
+QFont trajan_9pt;
+QFont trajan_10pt;
+QFont trajan_11pt;
+QFont trajan_12pt;
+
+QFont crimson_6pt;
+QFont crimson_7pt;
+QFont crimson_8pt;
+QFont crimson_9pt;
+QFont crimson_10pt;
+QFont crimson_11pt;
+QFont crimson_12pt;
+QFont crimson_13pt;
+QFont crimson_14pt;
+QFont crimson_15pt;
+QFont crimson_16pt;
+
+//10   11   13   16   17   19   20
+int pixels_in_16_pt = 26;//14;
+int pixels_in_15_pt = 24;//14;
+int pixels_in_14_pt = 23;//14;
+int pixels_in_13_pt = 21;//14;
+int pixels_in_12_pt = 20;//14;
+int pixels_in_11_pt = 19;//13;
+int pixels_in_10_pt = 17;//12;
+int pixels_in_9_pt = 16;//11;
+int pixels_in_8_pt = 15;//9;
+int pixels_in_7_pt = 11;//8;
+int pixels_in_6_pt = 10;//7;
+
+void constructFonts() {
+    garamond_6pt = QFont("EB Garamond");
+    garamond_7pt = QFont("EB Garamond");
+    garamond_8pt = QFont("EB Garamond");
+    garamond_9pt = QFont("EB Garamond");
+    garamond_10pt = QFont("EB Garamond");
+    garamond_11pt = QFont("EB Garamond");
+    garamond_12pt = QFont("EB Garamond");
+    garamond_13pt = QFont("EB Garamond");
+    garamond_14pt = QFont("EB Garamond");
+    garamond_15pt = QFont("EB Garamond");
+    garamond_16pt = QFont("EB Garamond");
+
+    garamond_6pt.setStyleStrategy(QFont::PreferAntialias);
+    garamond_7pt.setStyleStrategy(QFont::PreferAntialias);
+    garamond_8pt.setStyleStrategy(QFont::PreferAntialias);
+    garamond_9pt.setStyleStrategy(QFont::PreferAntialias);
+    garamond_10pt.setStyleStrategy(QFont::PreferAntialias);
+    garamond_11pt.setStyleStrategy(QFont::PreferAntialias);
+    garamond_12pt.setStyleStrategy(QFont::PreferAntialias);
+    garamond_13pt.setStyleStrategy(QFont::PreferAntialias);
+    garamond_14pt.setStyleStrategy(QFont::PreferAntialias);
+    garamond_15pt.setStyleStrategy(QFont::PreferAntialias);
+    garamond_16pt.setStyleStrategy(QFont::PreferAntialias);
+
+    garamond_6pt.setLetterSpacing(QFont::AbsoluteSpacing, 1);
+    garamond_7pt.setLetterSpacing(QFont::AbsoluteSpacing, 1);
+    garamond_8pt.setLetterSpacing(QFont::AbsoluteSpacing, 1);
+    garamond_9pt.setLetterSpacing(QFont::AbsoluteSpacing, 1);
+    garamond_10pt.setLetterSpacing(QFont::AbsoluteSpacing, 1);
+    garamond_11pt.setLetterSpacing(QFont::AbsoluteSpacing, 1);
+    garamond_12pt.setLetterSpacing(QFont::AbsoluteSpacing, 1);
+    garamond_13pt.setLetterSpacing(QFont::AbsoluteSpacing, 1);
+    garamond_14pt.setLetterSpacing(QFont::AbsoluteSpacing, 1);
+    garamond_15pt.setLetterSpacing(QFont::AbsoluteSpacing, 1);
+    garamond_16pt.setLetterSpacing(QFont::AbsoluteSpacing, 1);
+
+    trajan_6pt = QFont("Trajan Pro 3");
+    trajan_7pt = QFont("Trajan Pro 3");
+    trajan_8pt = QFont("Trajan Pro 3");
+    trajan_9pt = QFont("Trajan Pro 3");
+    trajan_10pt = QFont("Trajan Pro 3");
+    trajan_11pt = QFont("Trajan Pro 3");
+    trajan_12pt = QFont("Trajan Pro 3");
+
+    trajan_6pt.setStyleStrategy(QFont::PreferAntialias);
+    trajan_7pt.setStyleStrategy(QFont::PreferAntialias);
+    trajan_8pt.setStyleStrategy(QFont::PreferAntialias);
+    trajan_9pt.setStyleStrategy(QFont::PreferAntialias);
+    trajan_10pt.setStyleStrategy(QFont::PreferAntialias);
+    trajan_11pt.setStyleStrategy(QFont::PreferAntialias);
+    trajan_12pt.setStyleStrategy(QFont::PreferAntialias);
+
+    crimson_6pt = QFont("Crimson Text");
+    crimson_7pt = QFont("Crimson Text");
+    crimson_8pt = QFont("Crimson Text");
+    crimson_9pt = QFont("Crimson Text");
+    crimson_10pt = QFont("Crimson Text");
+    crimson_11pt = QFont("Crimson Text");
+    crimson_12pt = QFont("Crimson Text");
+    crimson_13pt = QFont("Crimson Text");
+    crimson_14pt = QFont("Crimson Text");
+    crimson_15pt = QFont("Crimson Text");
+    crimson_16pt = QFont("Crimson Text");
+
+    crimson_6pt.setStyleStrategy(QFont::PreferAntialias);
+    crimson_7pt.setStyleStrategy(QFont::PreferAntialias);
+    crimson_8pt.setStyleStrategy(QFont::PreferAntialias);
+    crimson_9pt.setStyleStrategy(QFont::PreferAntialias);
+    crimson_10pt.setStyleStrategy(QFont::PreferAntialias);
+    crimson_11pt.setStyleStrategy(QFont::PreferAntialias);
+    crimson_12pt.setStyleStrategy(QFont::PreferAntialias);
+    crimson_13pt.setStyleStrategy(QFont::PreferAntialias);
+    crimson_14pt.setStyleStrategy(QFont::PreferAntialias);
+    crimson_15pt.setStyleStrategy(QFont::PreferAntialias);
+    crimson_16pt.setStyleStrategy(QFont::PreferAntialias);
+}
+
+void updateFonts(double coefficient) {
+    pixels_in_16_pt = round(default_pixels_in_16_pt * coefficient + 0.0001);
+    pixels_in_15_pt = round(default_pixels_in_15_pt * coefficient + 0.0001);
+    pixels_in_14_pt = round(default_pixels_in_14_pt * coefficient + 0.0001);
+    pixels_in_13_pt = round(default_pixels_in_13_pt * coefficient + 0.0001);
+    pixels_in_12_pt = round(default_pixels_in_12_pt * coefficient + 0.0001);
+    pixels_in_11_pt = round(default_pixels_in_11_pt * coefficient + 0.0001);
+    pixels_in_10_pt = round(default_pixels_in_10_pt * coefficient + 0.0001);
+    pixels_in_9_pt = round(default_pixels_in_9_pt * coefficient + 0.0001);
+    pixels_in_8_pt = round(default_pixels_in_8_pt * coefficient + 0.0001);
+    pixels_in_7_pt = round(default_pixels_in_7_pt * coefficient + 0.0001);
+    pixels_in_6_pt = round(default_pixels_in_6_pt * coefficient + 0.0001);
+
+    garamond_6pt.setPixelSize(pixels_in_6_pt);
+    garamond_7pt.setPixelSize(pixels_in_7_pt);
+    garamond_8pt.setPixelSize(pixels_in_8_pt);
+    garamond_9pt.setPixelSize(pixels_in_9_pt);
+    garamond_10pt.setPixelSize(pixels_in_10_pt);
+    garamond_11pt.setPixelSize(pixels_in_11_pt);
+    garamond_12pt.setPixelSize(pixels_in_12_pt);
+    garamond_13pt.setPixelSize(pixels_in_13_pt);
+    garamond_14pt.setPixelSize(pixels_in_14_pt);
+    garamond_15pt.setPixelSize(pixels_in_14_pt);
+    garamond_16pt.setPixelSize(pixels_in_14_pt);
+
+    trajan_6pt.setPixelSize(pixels_in_6_pt);
+    trajan_7pt.setPixelSize(pixels_in_7_pt);
+    trajan_8pt.setPixelSize(pixels_in_8_pt);
+    trajan_9pt.setPixelSize(pixels_in_9_pt);
+    trajan_10pt.setPixelSize(pixels_in_10_pt);
+    trajan_11pt.setPixelSize(pixels_in_11_pt);
+    trajan_12pt.setPixelSize(pixels_in_12_pt);
+
+    crimson_6pt.setPixelSize(pixels_in_6_pt);
+    crimson_7pt.setPixelSize(pixels_in_7_pt);
+    crimson_8pt.setPixelSize(pixels_in_8_pt);
+    crimson_9pt.setPixelSize(pixels_in_9_pt);
+    crimson_10pt.setPixelSize(pixels_in_10_pt);
+    crimson_11pt.setPixelSize(pixels_in_11_pt);
+    crimson_12pt.setPixelSize(pixels_in_12_pt);
+    crimson_13pt.setPixelSize(pixels_in_13_pt);
+    crimson_14pt.setPixelSize(pixels_in_14_pt);
+    crimson_15pt.setPixelSize(pixels_in_14_pt);
+    crimson_16pt.setPixelSize(pixels_in_14_pt);
+}

+ 70 - 0
src/Legacy/fonts.h

@@ -0,0 +1,70 @@
+#ifndef FONTS_H
+#define FONTS_H
+
+#include <QFont>
+
+// Fonts (automatically scaled on window resize)
+
+extern QFont garamond_6pt;
+extern QFont garamond_7pt;
+extern QFont garamond_8pt;
+extern QFont garamond_9pt;
+extern QFont garamond_10pt;
+extern QFont garamond_11pt;
+extern QFont garamond_12pt;
+extern QFont garamond_13pt;
+extern QFont garamond_14pt;
+extern QFont garamond_15pt;
+extern QFont garamond_16pt;
+
+extern QFont trajan_6pt;
+extern QFont trajan_7pt;
+extern QFont trajan_8pt;
+extern QFont trajan_9pt;
+extern QFont trajan_10pt;
+extern QFont trajan_11pt;
+extern QFont trajan_12pt;
+
+extern QFont crimson_6pt;
+extern QFont crimson_7pt;
+extern QFont crimson_8pt;
+extern QFont crimson_9pt;
+extern QFont crimson_10pt;
+extern QFont crimson_11pt;
+extern QFont crimson_12pt;
+extern QFont crimson_13pt;
+extern QFont crimson_14pt;
+extern QFont crimson_15pt;
+extern QFont crimson_16pt;
+
+// Font sizes
+
+const double default_pixels_in_16_pt = 26;//14;
+const double default_pixels_in_15_pt = 24;//14;
+const double default_pixels_in_14_pt = 23;//14;
+const double default_pixels_in_13_pt = 21;//14;
+const double default_pixels_in_12_pt = 20;//14;
+const double default_pixels_in_11_pt = 19;//13;
+const double default_pixels_in_10_pt = 17;//12;
+const double default_pixels_in_9_pt = 16;//11;
+const double default_pixels_in_8_pt = 14;//9;
+const double default_pixels_in_7_pt = 12;//8;
+const double default_pixels_in_6_pt = 10;//7;
+
+extern int pixels_in_16_pt;
+extern int pixels_in_15_pt;
+extern int pixels_in_14_pt;
+extern int pixels_in_13_pt;
+extern int pixels_in_12_pt;
+extern int pixels_in_11_pt;
+extern int pixels_in_10_pt;
+extern int pixels_in_9_pt;
+extern int pixels_in_8_pt;
+extern int pixels_in_7_pt;
+extern int pixels_in_6_pt;
+
+void constructFonts();
+
+void updateFonts(double coefficient);
+
+#endif // FONTS_H

+ 2 - 11
src/Legacy/main.cpp

@@ -14,17 +14,6 @@
 double window_height = 1000;
 double window_width = 648;
 
-//10   11   13   16   17   19   20
-int pixels_in_14_pt = 23;//14;
-int pixels_in_13_pt = 21;//14;
-int pixels_in_12_pt = 20;//14;
-int pixels_in_11_pt = 19;//13;
-int pixels_in_10_pt = 17;//12;
-int pixels_in_9_pt = 16;//11;
-int pixels_in_8_pt = 15;//9;
-int pixels_in_7_pt = 11;//8;
-int pixels_in_6_pt = 10;//7;
-
 int main(int argc, char *argv[])
 {
     setlocale(LC_ALL,"Russian");
@@ -46,6 +35,8 @@ int main(int argc, char *argv[])
     QResource::registerResource(QApplication::applicationDirPath() + "/data02.gtr");
 
     QFontDatabase::addApplicationFont(":/fonts/trajan.ttf");
+    QFontDatabase::addApplicationFont(":/fonts/CrimsonText.ttf");
+    QFontDatabase::addApplicationFont(":/fonts/EBGaramond.ttf");
 
     qDebug() << "Starting main frame initialisation...";
 

+ 6 - 0
src/Legacy/models/internallogicmanager.cpp

@@ -0,0 +1,6 @@
+#include "internallogicmanager.h"
+
+InternalLogicManager::InternalLogicManager(QObject *parent) : QObject(parent)
+{
+
+}

+ 56 - 0
src/Legacy/models/internallogicmanager.h

@@ -0,0 +1,56 @@
+#ifndef INTERNALLOGICMANAGER_H
+#define INTERNALLOGICMANAGER_H
+
+#include <QObject>
+
+#include "models/patchdownloader.h"
+#include "models/lotrodatmanager.h"
+#include "models/filesystem.h"
+
+/*
+Stage 1 - check if user opened application for the first time - then we need to show
+          hello messages.
+
+Stage 2 - check if lotro folder is correct (there's file LotroLauncher.exe in it).
+          If no - then show him settings (ask to find lotro folder) where user can set it.
+
+Stage 3 - check if there are client_local_English.dat and client_general.dat files.
+          If no - then remove file and show message that we need to download them.
+
+Stage 4 - try to open client_local_English.dat and client_general.dat. If at least one of them
+          fails to open at all - show that there may be other processes taken ownage.
+
+Stage 5 - if .dat files are opened, but there was an error telling that file has incorrect version -
+          remove file and show message that we need to download them.
+
+--- After this assuming that .dat files are correct and opened.
+
+Stage 6 - if user runs for the first time, then ask to create backup
+
+Stage 7 - check that user has chosen patches options. Otherwise move user to settings with enabled
+          position of choosing (this skips stage 8 and goes to st.9)
+
+Stage 8 - if there are flags that patches already applied but this is not true with .dat - ask to
+          apply them once more
+
+Stage 9 - All settings are checked and set. If user is for the first time - show message "ready to begin"
+          Start check for updates. Start check for updates timer.
+*/
+
+class InternalLogicManager : public QObject
+{
+    Q_OBJECT
+public:
+    explicit InternalLogicManager(PatchDownloader* patch_downloader, LotroDatManager *lotro_mgr, QObject *parent = nullptr);
+
+signals:
+
+public slots:
+
+
+
+private:
+    int state_;
+};
+
+#endif // INTERNALLOGICMANAGER_H

+ 114 - 30
src/Legacy/models/lotrodatmanager.cpp

@@ -15,8 +15,8 @@
 Q_DECLARE_METATYPE(LOTRO_DAT::DatLocaleManager::LOCALE)
 Q_DECLARE_METATYPE(QVector<QVariant>)
 
-LotroDatManager::LotroDatManager(QSettings* settings, PatchDownloader* downloader, QObject *parent) :
-    QObject(parent), app_settings(settings), patch_downloader(downloader) {
+LotroDatManager::LotroDatManager(QSettings* settings, QObject *parent) :
+    QObject(parent), app_settings(settings) {
 
     qRegisterMetaType<QVector<QVariant>>();
     qRegisterMetaType<LOTRO_DAT::DatLocaleManager::LOCALE>();
@@ -32,6 +32,16 @@ bool LotroDatManager::NotPatched()
     return !client_local_file.GetStatusModule().CheckIfNotPatched() && !client_local_file.GetStatusModule().CheckIfNotPatched();
 }
 
+unsigned LotroDatManager::getPercent()
+{
+    return client_local_file.GetStatusModule().GetPercentage();
+}
+
+QString LotroDatManager::getCurrentInstallingPatchName()
+{
+    return current_installing_patch_name;
+}
+
 void LotroDatManager::InitialiseManager()
 {
     qDebug() << "Initialising .dat manager";
@@ -52,18 +62,10 @@ void LotroDatManager::InitialiseManager()
 
     if (!QFile::setPermissions((game_folder + "/client_local_" + locale_prefix + ".dat"), QFileDevice::Permission(0x6666))) {
         qDebug() << "Unable to update permissions on client_local_* file!";
-
-        emit caughtError(QString("InitialiseManager"), {"PermissionsError"});
-        emit processFinished("InitialiseManager");
-        return;
     }
 
     if (!QFile::setPermissions((game_folder + "/client_general.dat"), QFileDevice::Permission(0x6666))) {
         qDebug() << "Unable to update permissions on client_general* file!";
-
-        emit caughtError(QString("InitialiseManager"), {"PermissionsError"});
-        emit processFinished("InitialiseManager");
-        return;
     }
 
     // Initialising client_local_*.dat file and client_general.dat
@@ -160,23 +162,44 @@ void LotroDatManager::ChangeTranslationLanguage()
 
 void LotroDatManager::InstallActivePatches()
 {
-    InstallPatches();   // Installing means inserting necessary data
+    SetupAllPatches();   // Setup means inserting necessary data
     ApplyTexts();       // Applying means activating patched data
     ApplyImages();
     ApplySounds();
-    InstallLoadscreens();
-    InstallVideos();
 }
 
-void LotroDatManager::InstallPatches()
+void LotroDatManager::SetupAllPatches()
 {
-    emit processStarted("InstallPatches");
-    const QStringList all_patch_names = {"sound", "text", "image", "texture"};
     foreach (QString patch_name, all_patch_names) {
-        if (app_settings->value("patch_databases/" + patch_name, "Disabled").toString() == "Disabled")
+        if (app_settings->value("PatchDatabasesDownload/" + patch_name, "Disabled").toString() == "Disabled") {
+            continue;
+        }
+
+        emit processStarted("SetupPatch", {patch_name});
+        current_installing_patch_name = patch_name;
+
+        if (patch_name == "video") {
+            InstallVideos();
+            app_settings->setValue("PatchApplied/" + patch_name, "True");
+            current_installing_patch_name = "none";
+            emit processFinished("SetupPatch", {patch_name});
+            return;
+        }
+
+        if (patch_name == "loadscreen") {
+            InstallLoadscreens();
+            app_settings->setValue("PatchApplied/" + patch_name, "True");
+            current_installing_patch_name = "none";
+            emit processFinished("SetupPatch", {patch_name});
+            return;
+        }
+
+        QString database_path = app_settings->value("PatchPath/" + patch_name, "none").toString(); //patch_downloader->getDatabasePathByPatchName(patch_name);
+        if (database_path == "none") {
+            qDebug() << __FUNCTION__ << "Database for " << patch_name << " has no database path! Skipping!";
             continue;
+        }
 
-        QString database_path = patch_downloader->getDatabasePathByPatchName(patch_name);
         LOTRO_DAT::Database db;
         if (!db.InitDatabase(database_path.toStdString())) {
             emit caughtError("InstallPatches", {"ErrorInitDatabase"});
@@ -190,15 +213,18 @@ void LotroDatManager::InstallPatches()
             emit caughtError("InstallPatches", {"ErrorCannotPatch", "client_general"});
 
         db.CloseDatabase();
+
+        app_settings->setValue("PatchApplied/" + patch_name, "True");
+        current_installing_patch_name = "none";
+        emit processFinished("SetupPatch", {patch_name});
     }
-    emit processFinished("InstallPatches");
 }
 
 void LotroDatManager::InstallLoadscreens()
 {
     emit processStarted("InstallLoadscreens");
 
-    if (app_settings->value("patch_databases/loadscreen", "Disabled").toString() == "Disabled")
+    if (app_settings->value("PatchDatabasesDownload/loadscreen", "Disabled").toString() == "Disabled")
         return;
 
     QString game_folder = app_settings->value("General/game_folder_path", QString()).toString();
@@ -233,7 +259,12 @@ void LotroDatManager::InstallLoadscreens()
               << "lotro_generic_teleport_screen_10.jpg";
 
 
-    QString database_path = patch_downloader->getDatabasePathByPatchName("loadscreen");
+    QString database_path = app_settings->value("PatchPath/loadscreen", "none").toString();
+    if (database_path == "none") {
+        qDebug() << __FUNCTION__ << "No path to loadscreens patch found!";
+        return;
+    }
+
     LOTRO_DAT::Database db;
     if (!db.InitDatabase(database_path.toStdString())) {
         emit caughtError("InstallLoadscreens", {"ErrorInitDatabase"});
@@ -257,12 +288,16 @@ void LotroDatManager::InstallLoadscreens()
 void LotroDatManager::InstallVideos()
 {
     emit processStarted("InstallVideos");
-    if (app_settings->value("patch_databases/video", "Disabled").toString() == "Disabled")
+    if (app_settings->value("PatchDatabasesDownload/video", "Disabled").toString() == "Disabled")
         return;
 
     QString game_folder = app_settings->value("General/game_folder_path", QString()).toString();
 
-    QString database_path = patch_downloader->getDatabasePathByPatchName("loadscreen");
+    QString database_path = app_settings->value("PatchPath/video", "none").toString();
+    if (database_path == "none") {
+        qDebug() << __FUNCTION__ << "No path to videos patch found!";
+        return;
+    }
 
     LOTRO_DAT::Database db;
     if (!db.InitDatabase(database_path.toStdString())) {
@@ -315,7 +350,56 @@ void LotroDatManager::InstallVideos()
 
 void LotroDatManager::InstallUpdates()
 {
-    // TODO
+    emit processStarted("InstallUpdates");
+    foreach (QString patch_name, all_patch_names) {
+        if (app_settings->value("PatchDatabasesDownload/" + patch_name, "Disabled").toString() == "Disabled" ||
+                app_settings->value("PatchApplied/" + patch_name, "False").toString() == "True") {
+            continue;
+        }
+
+        emit processStarted("SetupPatch", {patch_name});
+        current_installing_patch_name = patch_name;
+
+        if (patch_name == "video") {
+            InstallVideos();
+            app_settings->setValue("PatchApplied/" + patch_name, "True");
+            current_installing_patch_name = "none";
+            emit processFinished("SetupPatch", {patch_name});
+            return;
+        }
+
+        if (patch_name == "loadscreen") {
+            InstallLoadscreens();
+            app_settings->setValue("PatchApplied/" + patch_name, "True");
+            current_installing_patch_name = "none";
+            emit processFinished("SetupPatch", {patch_name});
+            return;
+        }
+
+        QString database_path = app_settings->value("PatchPath/" + patch_name, "none").toString(); //patch_downloader->getDatabasePathByPatchName(patch_name);
+        if (database_path == "none") {
+            qDebug() << __FUNCTION__ << "Database for " << patch_name << " has no database path! Skipping!";
+            continue;
+        }
+
+        LOTRO_DAT::Database db;
+        if (!db.InitDatabase(database_path.toStdString())) {
+            emit caughtError("InstallPatches", {"ErrorInitDatabase"});
+            continue;
+        }
+
+        if (client_local_file.GetPatcher().PatchAllDatabase(&db).result != LOTRO_DAT::SUCCESS)
+            emit caughtError("InstallPatches", {"ErrorCannotPatch", "client_local"});
+
+        if (client_general_file.GetPatcher().PatchAllDatabase(&db).result != LOTRO_DAT::SUCCESS)
+            emit caughtError("InstallPatches", {"ErrorCannotPatch", "client_general"});
+
+        db.CloseDatabase();
+
+        app_settings->setValue("PatchApplied/" + patch_name, "True");
+        current_installing_patch_name = "none";
+        emit processFinished("SetupPatch", {patch_name});
+    }
 }
 
 void LotroDatManager::InstallMicroPatch()
@@ -352,19 +436,19 @@ void LotroDatManager::RemoveBackup()
 
 void LotroDatManager::ApplyTexts()
 {
-    if (app_settings->value("patch_options/texts_general", "Disabled").toString() == "Enabled") {
+    if (app_settings->value("PatchApplyOptions/texts_general", "Disabled").toString() == "Enabled") {
         client_local_file.GetLocaleManager().EnableCategory(100);
     } else {
         client_local_file.GetLocaleManager().DisableCategory(100);
     }
 
-    if (app_settings->value("patch_options/texts_emotes", "Disabled").toString() == "Enabled") {
+    if (app_settings->value("PatchApplyOptions/texts_emotes", "Disabled").toString() == "Enabled") {
         client_local_file.GetLocaleManager().EnableCategory(101);
     } else {
         client_local_file.GetLocaleManager().DisableCategory(101);
     }
 
-    if (app_settings->value("patch_options/texts_items", "Disabled").toString() == "Enabled") {
+    if (app_settings->value("PatchApplyOptions/texts_items", "Disabled").toString() == "Enabled") {
         client_local_file.GetLocaleManager().EnableCategory(102);
     } else {
         client_local_file.GetLocaleManager().DisableCategory(102);
@@ -372,7 +456,7 @@ void LotroDatManager::ApplyTexts()
 }
 
 void LotroDatManager::ApplyImages() {
-    if (app_settings->value("patch_options/maps", "Disabled").toString() == "Enabled") {
+    if (app_settings->value("PatchApplyOptions/maps", "Disabled").toString() == "Enabled") {
         client_local_file.GetLocaleManager().EnableCategory(200);
     } else {
         client_local_file.GetLocaleManager().DisableCategory(200);
@@ -381,13 +465,13 @@ void LotroDatManager::ApplyImages() {
 
 void LotroDatManager::ApplySounds() {
     emit processStarted("ApplySounds");
-    if (app_settings->value("patch_options/sounds", "Disabled").toString() == "Enabled") {
+    if (app_settings->value("PatchApplyOptions/sounds", "Disabled").toString() == "Enabled") {
         client_local_file.GetLocaleManager().EnableCategory(300);
     } else {
         client_local_file.GetLocaleManager().DisableCategory(300);
     }
 
-    if (app_settings->value("patch_options/video", "Disabled").toString() == "Enabled") {
+    if (app_settings->value("PatchApplyOptions/video", "Disabled").toString() == "Enabled") {
         client_local_file.GetLocaleManager().EnableCategory(103);
     } else {
         client_local_file.GetLocaleManager().DisableCategory(103);

+ 13 - 8
src/Legacy/models/lotrodatmanager.h

@@ -16,7 +16,7 @@ class LotroDatManager : public QObject
     Q_OBJECT
 
 public:
-    explicit LotroDatManager(QSettings* settings, PatchDownloader* downloader, QObject *parent = nullptr);
+    explicit LotroDatManager(QSettings* settings, QObject *parent = nullptr);
 
     bool Initialised();
 
@@ -25,7 +25,9 @@ public:
 // TODO:
 //    bool IsRusificationActive();
 
-//    int getPercent();
+    unsigned getPercent();
+
+    QString getCurrentInstallingPatchName();
 
 public slots:
     void InitialiseManager();
@@ -38,11 +40,7 @@ public slots:
 
     void InstallActivePatches();
 
-    void InstallPatches();
-
-    void InstallLoadscreens();
-
-    void InstallVideos();
+    void SetupAllPatches();
 
     void InstallUpdates();
 
@@ -59,6 +57,8 @@ private:
     void ApplyTexts();
     void ApplyImages();
     void ApplySounds();
+    void InstallLoadscreens();
+    void InstallVideos();
 
 signals:
     // general signals. First argument is process_name, second - processed values
@@ -68,10 +68,15 @@ signals:
     void caughtError(QString, QVector<QVariant>);
 
 private:
+    const QStringList all_patch_names = {"sound", "text", "image", "loadscreen", "texture", "font", "video"};
+
+    QString current_installing_patch_name;
+    int video_percent;
+    int loadscreens_percent;
+
     LOTRO_DAT::DatFile client_local_file;
     LOTRO_DAT::DatFile client_general_file;
     QSettings* app_settings;
-    PatchDownloader* patch_downloader;
 };
 
 #endif // LEGACYAPP_H

+ 48 - 6
src/Legacy/models/patchdownloader.cpp

@@ -7,8 +7,11 @@
 #include <QVariant>
 #include <QDebug>
 
+Q_DECLARE_METATYPE(QList<PatchDownloadData>)
+
 PatchDownloader::PatchDownloader(QSettings *settings, QObject *parent) : QObject(parent), patch_download_dir(QApplication::applicationDirPath() + "/data")
 {
+    qRegisterMetaType<QList<PatchDownloadData>>();
     app_settings = settings;
     active_downloads_number = 0;
 
@@ -99,6 +102,22 @@ void PatchDownloader::onDownloaderCompleted(Downloader *downloader_ptr)
         downloader_ptr->targetFile->deleteLater();
     }
 
+    QString patch_finished_download_name = "none";
+
+    foreach (QString patch_name, downloads_list.keys()) {
+        if (downloads_list[patch_name] == downloader_ptr)
+            patch_finished_download_name = patch_name;
+    }
+
+    if (patch_finished_download_name != "none") {
+        QString patch_filepath = patch_download_dir.absolutePath() + "/" + patch_data[patch_finished_download_name].url.fileName();
+        app_settings->setValue("PatchDownloadTime/" + patch_data[patch_finished_download_name].name, QDate::currentDate().toString("dd.MM.yyyy"));
+        app_settings->setValue("PatchApplied/" + patch_data[patch_finished_download_name].name, "False");
+        app_settings->setValue("PatchPath/" + patch_data[patch_finished_download_name].name, patch_filepath);
+
+        emit changePatchStatus(patch_finished_download_name, "Загрузка завершена");
+    }
+
     active_downloads_number--;
 
     if (active_downloads_number == 0) {
@@ -108,6 +127,7 @@ void PatchDownloader::onDownloaderCompleted(Downloader *downloader_ptr)
 
 void PatchDownloader::onDownloaderProgressChanged(Downloader*)
 {
+
     quint64 totalSize = 0;
     quint64 downloadedSize = 0;
     quint64 summary_speed = 0;
@@ -124,9 +144,19 @@ void PatchDownloader::onDownloaderProgressChanged(Downloader*)
 
     time_elapsed = (totalSize - downloadedSize) / qMax(quint64(1), summary_speed);
 
-    emit progressChanged(downloadedSize, totalSize,
-                         Downloader::getSpeedFormatted(summary_speed),
-                         Downloader::getElapsedTimeFormatted(time_elapsed));
+    QList<PatchDownloadData> download_data;
+    download_data << PatchDownloadData({"general", downloadedSize, totalSize, Downloader::getSpeedFormatted(summary_speed), Downloader::getElapsedTimeFormatted(time_elapsed)});
+
+    foreach (QString patch_name, downloads_list.keys()) {
+        Downloader* patch_download = downloads_list[patch_name];
+        if (patch_download->isStarted()) {
+            download_data << PatchDownloadData({patch_name, patch_download->getBytesDownloaded(), patch_download->getBytesTotal(),
+                             Downloader::getSpeedFormatted(patch_download->getSpeed()),
+                             Downloader::getElapsedTimeFormatted(patch_download->getElapsedTime())});
+        }
+    }
+
+    emit progressChanged(download_data);
 }
 
 int PatchDownloader::versionFromPatchFilename(QString filename)
@@ -218,21 +248,33 @@ bool PatchDownloader::DownloadMissingPatches()
     foreach (Patch patch, patch_data) {
         QString patch_filepath = patch_download_dir.absolutePath() + "/" + patch.url.fileName();
 
-        qDebug() << "Patch" << patch.name << "is marked as" << app_settings->value("patch_databases/" + patch.name, "Disabled");
-        if (app_settings->value("patch_databases/" + patch.name, "Disabled").toString() != "Enabled")
+        qDebug() << "Patch" << patch.name << "is marked as" << app_settings->value("PatchDatabasesDownload/" + patch.name, "Disabled");
+
+        if (app_settings->value("PatchDatabasesDownload/" + patch.name, "Disabled").toString() != "Enabled") {
+            emit changePatchStatus(patch.name, "Отключены");
             continue;
+        }
 
         if (FileSystem::fileExists(patch_filepath)) {
-            if (FileSystem::fileHash(patch_filepath, QCryptographicHash::Md5) == patch.md5_hash)
+            if (FileSystem::fileHash(patch_filepath, QCryptographicHash::Md5) == patch.md5_hash) {
+                app_settings->setValue("PatchPath/" + patch.name, patch_filepath);
+                QString download_date = app_settings->value("PatchDownloadTime/" + patch.name, "-1").toString();
+                emit changePatchStatus(patch.name, "Актуальная версия (" + download_date + ")");
                 continue;
+            }
+
+            app_settings->setValue("PatchPath/" + patch.name, "none");
 
             if (!QFile::remove(patch_filepath)) {
                 qDebug() << __FUNCTION__ << "Unable to remove file " << patch_filepath;
+                emit changePatchStatus(patch.name, "Ошибка обновления 0x1");
                 emit removeFileError(patch_filepath);
                 continue;
             }
         }
 
+        emit changePatchStatus(patch.name, "Ожидает скачивания");
+
         if (!download_started) {
             download_started = true;
             qDebug() << "Started downloads of PatchDownloader!";

+ 10 - 3
src/Legacy/models/patchdownloader.h

@@ -16,6 +16,14 @@ struct Patch {
     QString name;
 };
 
+struct PatchDownloadData {
+    QString patch_name;
+    quint64 bytesDownloaded;
+    quint64 bytesTotal;
+    QString download_speed_formatted;
+    QString elapsed_time_formatted;
+};
+
 class PatchDownloader : public QObject
 {
     Q_OBJECT
@@ -45,10 +53,9 @@ signals:
 
     void downloadCompleted();
     void downloadStarted();
-    void progressChanged(quint64 bytesDownloaded, quint64 bytesTotal,
-                         QString download_speed_formatted,
-                         QString elapsed_time_formatted);
+    void progressChanged(QList<PatchDownloadData>);
 
+    void changePatchStatus(QString patch_name, QString status);
     void patchDateChanged(QString patch_name, QDate patch_date);
 
 private:

+ 3 - 0
src/Legacy/object_script.Legacy.Debug

@@ -18,6 +18,8 @@ INPUT(
 ./..\..\build\debug\Legacy\obj\selfupdater.o
 ./..\..\build\debug\Legacy\obj\chooseversiondialog.o
 ./..\..\build\debug\Legacy\obj\weeklycodewidget.o
+./..\..\build\debug\Legacy\obj\dialogwindow.o
+./..\..\build\debug\Legacy\obj\fonts.o
 ./..\..\build\debug\Legacy\obj\legacy_plugin_import.o
 ./..\..\build\debug\Legacy\obj\moc_downloader.o
 ./..\..\build\debug\Legacy\obj\moc_filesystem.o
@@ -35,4 +37,5 @@ INPUT(
 ./..\..\build\debug\Legacy\obj\moc_selfupdater.o
 ./..\..\build\debug\Legacy\obj\moc_chooseversiondialog.o
 ./..\..\build\debug\Legacy\obj\moc_weeklycodewidget.o
+./..\..\build\debug\Legacy\obj\moc_dialogwindow.o
 );

+ 3 - 0
src/Legacy/object_script.Legacy.Release

@@ -16,6 +16,8 @@ INPUT(
 ./..\..\build\release\Legacy\obj\selfupdater.o
 ./..\..\build\release\Legacy\obj\chooseversiondialog.o
 ./..\..\build\release\Legacy\obj\weeklycodewidget.o
+./..\..\build\release\Legacy\obj\dialogwindow.o
+./..\..\build\release\Legacy\obj\fonts.o
 ./..\..\build\release\Legacy\obj\legacy_plugin_import.o
 ./..\..\build\release\Legacy\obj\moc_downloader.o
 ./..\..\build\release\Legacy\obj\moc_filesystem.o
@@ -33,4 +35,5 @@ INPUT(
 ./..\..\build\release\Legacy\obj\moc_selfupdater.o
 ./..\..\build\release\Legacy\obj\moc_chooseversiondialog.o
 ./..\..\build\release\Legacy\obj\moc_weeklycodewidget.o
+./..\..\build\release\Legacy\obj\moc_dialogwindow.o
 );

+ 56 - 2
src/Legacy/widgets/aboutwidget.cpp

@@ -1,12 +1,14 @@
-#include "widgets/AboutWidget.h"
-#include "ui_AboutWidget.h"
+#include "widgets/aboutwidget.h"
+#include "ui_aboutwidget.h"
 #include "models/filesystem.h"
 #include "models/lotrodatmanager.h"
 #include "widgets/mainwindow.h"
+#include "constants.h"
 
 #include <QDebug>
 #include <QFileDialog>
 #include <QMessageBox>
+#include <QDesktopServices>
 
 AboutWidget::AboutWidget(QSettings* settings, PatchDownloader* patch_downloader, LotroDatManager* lotro_dat_manager, QWidget *parent) :
     QWidget(parent), app_settings(settings), lotro_manager(lotro_dat_manager),
@@ -19,3 +21,55 @@ AboutWidget::~AboutWidget()
 {
     delete ui;
 }
+
+void AboutWidget::updateFontsSizes()
+{
+    ui->widget_name_label->setFont(trajan_9pt);
+
+    ui->goto_bugs->setFont(trajan_8pt);
+    ui->goto_donate->setFont(trajan_8pt);
+    ui->goto_forum->setFont(trajan_8pt);
+    ui->goto_site->setFont(trajan_8pt);
+
+    ui->powered_by->setFont(trajan_10pt);
+    ui->server_size->setFont(trajan_8pt);
+    ui->client_side->setFont(trajan_8pt);
+}
+
+void AboutWidget::resizeEvent(QResizeEvent *event)
+{
+    double coefficient = window_width / default_window_width;
+
+    ui->left_panel->move(QPoint(40, 75) * coefficient);
+    ui->left_panel->resize(QSize(240, 440) * coefficient);
+
+    ui->widget_name_label->move(QPoint(45, 33)* coefficient);
+    ui->widget_name_label->resize(QSize(180, 21) * coefficient);
+
+    ui->endevir_icon->setMinimumSize({50 * coefficient, 50 * coefficient});
+    ui->coder_icon->setMinimumSize({50 * coefficient, 50 * coefficient});
+
+    updateFontsSizes();
+}
+
+void AboutWidget::on_goto_site_clicked()
+{
+    QDesktopServices::openUrl(QUrl(app_settings->value("General/site_url", "http://translate.lotros.ru/").toString()));
+}
+
+
+
+void AboutWidget::on_goto_forum_clicked()
+{
+    QDesktopServices::openUrl(QUrl(app_settings->value("General/forum_url", "http://lotros.ru/").toString()));
+}
+
+void AboutWidget::on_goto_bugs_clicked()
+{
+    QDesktopServices::openUrl(QUrl(app_settings->value("General/bugs_url", "http://translate.lotros.ru/bugs/add").toString()));
+}
+
+void AboutWidget::on_goto_donate_clicked()
+{
+    QDesktopServices::openUrl(QUrl(app_settings->value("General/donate_url", "http://translate.lotros.ru/donate").toString()));
+}

+ 15 - 0
src/Legacy/widgets/aboutwidget.h

@@ -20,6 +20,21 @@ public:
     explicit AboutWidget(QSettings* settings, PatchDownloader* patch_downloader, LotroDatManager* lotro_dat_manager, QWidget *parent = 0);
     ~AboutWidget();
 
+public slots:
+    void updateFontsSizes();
+
+protected:
+    void resizeEvent(QResizeEvent *event) override;
+
+private slots:
+    void on_goto_site_clicked();
+
+    void on_goto_forum_clicked();
+
+    void on_goto_bugs_clicked();
+
+    void on_goto_donate_clicked();
+
 private:
     QSettings* app_settings;
     PatchDownloader* patch_updater;

+ 50 - 54
src/Legacy/widgets/aboutwidget.ui

@@ -16,12 +16,12 @@
   <property name="styleSheet">
    <string notr="true">color: white;</string>
   </property>
-  <widget class="QLabel" name="order_label">
+  <widget class="QLabel" name="widget_name_label">
    <property name="geometry">
     <rect>
      <x>45</x>
      <y>33</y>
-     <width>201</width>
+     <width>180</width>
      <height>21</height>
     </rect>
    </property>
@@ -36,24 +36,39 @@
     <string>НАСЛЕДИЕ v 2.0.0</string>
    </property>
   </widget>
-  <widget class="QWidget" name="checkpoints_list" native="true">
+  <widget class="QWidget" name="left_panel" native="true">
    <property name="geometry">
     <rect>
-     <x>25</x>
+     <x>40</x>
      <y>70</y>
-     <width>265</width>
+     <width>240</width>
      <height>451</height>
     </rect>
    </property>
    <layout class="QGridLayout" name="gridLayout">
+    <property name="leftMargin">
+     <number>0</number>
+    </property>
+    <property name="topMargin">
+     <number>0</number>
+    </property>
+    <property name="rightMargin">
+     <number>0</number>
+    </property>
+    <property name="bottomMargin">
+     <number>0</number>
+    </property>
     <item row="0" column="0" colspan="3">
-     <widget class="QPushButton" name="create_backup_button">
+     <widget class="QPushButton" name="goto_site">
       <property name="font">
        <font>
         <family>Trajan Pro 3</family>
         <pointsize>8</pointsize>
        </font>
       </property>
+      <property name="cursor">
+       <cursorShape>PointingHandCursor</cursorShape>
+      </property>
       <property name="autoFillBackground">
        <bool>false</bool>
       </property>
@@ -65,16 +80,9 @@ border: 1px solid qlineargradient(spread:reflect, x1:1, y1:1, x2:0, y2:1, stop:0
 }
  
 QPushButton:pressed {
-    background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
-                                      stop: 0 #caccd3, stop: 1 #f6f7fa);
-}
- 
-QPushButton:flat {
-    border: none; /* no border for a flat push button */
-}
- 
-QPushButton:default {
-    border-color: navy; /* make the default button prominent */
+background-color:rgba(0,0,0,20);
+border-radius: 5px;
+border: 1px solid qlineargradient(spread:reflect, x1:1, y1:1, x2:0, y2:1, stop:0 rgba(33, 24, 12, 255), stop:0.5 rgba(126, 97, 61, 255), stop:1 rgba(33, 24, 1, 255));
 }</string>
       </property>
       <property name="text">
@@ -83,13 +91,16 @@ QPushButton:default {
      </widget>
     </item>
     <item row="2" column="0" colspan="3">
-     <widget class="QPushButton" name="create_backup_button_3">
+     <widget class="QPushButton" name="goto_bugs">
       <property name="font">
        <font>
         <family>Trajan Pro 3</family>
         <pointsize>8</pointsize>
        </font>
       </property>
+      <property name="cursor">
+       <cursorShape>PointingHandCursor</cursorShape>
+      </property>
       <property name="autoFillBackground">
        <bool>false</bool>
       </property>
@@ -101,16 +112,9 @@ border: 1px solid qlineargradient(spread:reflect, x1:1, y1:1, x2:0, y2:1, stop:0
 }
  
 QPushButton:pressed {
-    background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
-                                      stop: 0 #caccd3, stop: 1 #f6f7fa);
-}
- 
-QPushButton:flat {
-    border: none; /* no border for a flat push button */
-}
- 
-QPushButton:default {
-    border-color: navy; /* make the default button prominent */
+background-color:rgba(0,0,0,20);
+border-radius: 5px;
+border: 1px solid qlineargradient(spread:reflect, x1:1, y1:1, x2:0, y2:1, stop:0 rgba(33, 24, 12, 255), stop:0.5 rgba(126, 97, 61, 255), stop:1 rgba(33, 24, 1, 255));
 }</string>
       </property>
       <property name="text">
@@ -119,13 +123,16 @@ QPushButton:default {
      </widget>
     </item>
     <item row="1" column="0" colspan="3">
-     <widget class="QPushButton" name="create_backup_button_2">
+     <widget class="QPushButton" name="goto_forum">
       <property name="font">
        <font>
         <family>Trajan Pro 3</family>
         <pointsize>8</pointsize>
        </font>
       </property>
+      <property name="cursor">
+       <cursorShape>PointingHandCursor</cursorShape>
+      </property>
       <property name="autoFillBackground">
        <bool>false</bool>
       </property>
@@ -137,16 +144,9 @@ border: 1px solid qlineargradient(spread:reflect, x1:1, y1:1, x2:0, y2:1, stop:0
 }
  
 QPushButton:pressed {
-    background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
-                                      stop: 0 #caccd3, stop: 1 #f6f7fa);
-}
- 
-QPushButton:flat {
-    border: none; /* no border for a flat push button */
-}
- 
-QPushButton:default {
-    border-color: navy; /* make the default button prominent */
+background-color:rgba(0,0,0,20);
+border-radius: 5px;
+border: 1px solid qlineargradient(spread:reflect, x1:1, y1:1, x2:0, y2:1, stop:0 rgba(33, 24, 12, 255), stop:0.5 rgba(126, 97, 61, 255), stop:1 rgba(33, 24, 1, 255));
 }</string>
       </property>
       <property name="text">
@@ -155,13 +155,16 @@ QPushButton:default {
      </widget>
     </item>
     <item row="3" column="0" colspan="3">
-     <widget class="QPushButton" name="create_backup_button_4">
+     <widget class="QPushButton" name="goto_donate">
       <property name="font">
        <font>
         <family>Trajan Pro 3</family>
         <pointsize>8</pointsize>
        </font>
       </property>
+      <property name="cursor">
+       <cursorShape>PointingHandCursor</cursorShape>
+      </property>
       <property name="autoFillBackground">
        <bool>false</bool>
       </property>
@@ -173,16 +176,9 @@ border: 1px solid qlineargradient(spread:reflect, x1:1, y1:1, x2:0, y2:1, stop:0
 }
  
 QPushButton:pressed {
-    background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
-                                      stop: 0 #caccd3, stop: 1 #f6f7fa);
-}
- 
-QPushButton:flat {
-    border: none; /* no border for a flat push button */
-}
- 
-QPushButton:default {
-    border-color: navy; /* make the default button prominent */
+background-color:rgba(0,0,0,20);
+border-radius: 5px;
+border: 1px solid qlineargradient(spread:reflect, x1:1, y1:1, x2:0, y2:1, stop:0 rgba(33, 24, 12, 255), stop:0.5 rgba(126, 97, 61, 255), stop:1 rgba(33, 24, 1, 255));
 }</string>
       </property>
       <property name="text">
@@ -204,7 +200,7 @@ QPushButton:default {
      </spacer>
     </item>
     <item row="6" column="0" colspan="2">
-     <widget class="QLabel" name="label_3">
+     <widget class="QLabel" name="client_side">
       <property name="font">
        <font>
         <family>Trajan Pro 3</family>
@@ -223,7 +219,7 @@ QPushButton:default {
      </widget>
     </item>
     <item row="5" column="0" colspan="3">
-     <widget class="QLabel" name="label_2">
+     <widget class="QLabel" name="powered_by">
       <property name="font">
        <font>
         <family>Trajan Pro 3</family>
@@ -239,7 +235,7 @@ QPushButton:default {
      </widget>
     </item>
     <item row="8" column="0" colspan="2">
-     <widget class="QLabel" name="label_8">
+     <widget class="QLabel" name="server_size">
       <property name="font">
        <font>
         <family>Trajan Pro 3</family>
@@ -258,7 +254,7 @@ QPushButton:default {
      </widget>
     </item>
     <item row="8" column="2">
-     <widget class="QLabel" name="label_7">
+     <widget class="QLabel" name="coder_icon">
       <property name="sizePolicy">
        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
         <horstretch>0</horstretch>
@@ -289,7 +285,7 @@ QPushButton:default {
      </widget>
     </item>
     <item row="6" column="2">
-     <widget class="QLabel" name="label_9">
+     <widget class="QLabel" name="endevir_icon">
       <property name="sizePolicy">
        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
         <horstretch>0</horstretch>

+ 12 - 0
src/Legacy/widgets/chooseversiondialog.cpp

@@ -4,6 +4,7 @@
 #include "models/lotrodatmanager.h"
 #include "models/patchdownloader.h"
 #include "widgets/mainwindow.h"
+#include "constants.h"
 
 ChooseVersionDialog::ChooseVersionDialog(QSettings *settings, PatchDownloader *patch_downloader, LotroDatManager *lotro_dat_manager, QWidget *parent) :
     QWidget(parent), app_settings(settings), lotro_manager(lotro_dat_manager),
@@ -13,6 +14,7 @@ ChooseVersionDialog::ChooseVersionDialog(QSettings *settings, PatchDownloader *p
     ui->setupUi(this);
     ui->wait_widget->hide();
     ui->cancel_widget->show();
+
 }
 
 ChooseVersionDialog::~ChooseVersionDialog()
@@ -20,6 +22,16 @@ ChooseVersionDialog::~ChooseVersionDialog()
     delete ui;
 }
 
+void ChooseVersionDialog::updateFontsSizes()
+{
+    ui->label_title->setFont(garamond_12pt);
+}
+
+void ChooseVersionDialog::resizeEvent(QResizeEvent *event)
+{
+    updateFontsSizes();
+}
+
 void ChooseVersionDialog::show()
 {
     QString locale_prefix = app_settings->value("General/original_locale", "English").toString();

+ 6 - 0
src/Legacy/widgets/chooseversiondialog.h

@@ -20,6 +20,12 @@ public:
     explicit ChooseVersionDialog(QSettings* settings, PatchDownloader* patch_downloader, LotroDatManager* lotro_dat_manager, QWidget *parent = 0);
     ~ChooseVersionDialog();
 
+public slots:
+    void updateFontsSizes();
+
+protected:
+    void resizeEvent(QResizeEvent *event) override;
+
 public slots:
     void show();
 

+ 330 - 303
src/Legacy/widgets/chooseversiondialog.ui

@@ -20,205 +20,229 @@
    <string>Выбор версии игры</string>
   </property>
   <layout class="QGridLayout" name="gridLayout_3">
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <property name="spacing">
+    <number>0</number>
+   </property>
    <item row="0" column="0">
-    <widget class="QWidget" name="contents" native="true">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
+    <widget class="QWidget" name="dialog_background" native="true">
+     <property name="styleSheet">
+      <string notr="true">QWidget#dialog_background{
+background-color: rgba(20, 20, 20, 150);
+}</string>
      </property>
-     <layout class="QGridLayout" name="gridLayout">
-      <property name="leftMargin">
-       <number>0</number>
-      </property>
-      <property name="topMargin">
-       <number>0</number>
-      </property>
-      <property name="rightMargin">
-       <number>0</number>
-      </property>
-      <property name="bottomMargin">
-       <number>0</number>
-      </property>
-      <property name="spacing">
-       <number>0</number>
-      </property>
+     <layout class="QGridLayout" name="gridLayout_4">
       <item row="0" column="0">
-       <widget class="QWidget" name="widget_2" native="true">
-        <property name="minimumSize">
-         <size>
-          <width>26</width>
-          <height>26</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>26</width>
-          <height>26</height>
-         </size>
-        </property>
-        <property name="styleSheet">
-         <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-topleft.png);</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <widget class="QWidget" name="widget_7" native="true">
-        <property name="styleSheet">
-         <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-top.png);</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="2">
-       <widget class="QWidget" name="widget_9" native="true">
-        <property name="minimumSize">
-         <size>
-          <width>26</width>
-          <height>26</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>26</width>
-          <height>26</height>
-         </size>
-        </property>
-        <property name="styleSheet">
-         <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-topright.png);</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0">
-       <widget class="QWidget" name="widget_4" native="true">
-        <property name="styleSheet">
-         <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-left.png);</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="1">
-       <widget class="QWidget" name="content_area" native="true">
-        <property name="styleSheet">
-         <string notr="true">QWidget#content_area{
-	border-image: url(:/backgrounds/strong_translucent-background.png);
-}</string>
+       <widget class="QWidget" name="contents" native="true">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
         </property>
-        <layout class="QGridLayout" name="gridLayout_2">
+        <layout class="QGridLayout" name="gridLayout">
          <property name="leftMargin">
-          <number>11</number>
+          <number>0</number>
          </property>
          <property name="topMargin">
-          <number>11</number>
+          <number>0</number>
          </property>
          <property name="rightMargin">
-          <number>11</number>
+          <number>0</number>
+         </property>
+         <property name="bottomMargin">
+          <number>0</number>
+         </property>
+         <property name="spacing">
+          <number>0</number>
          </property>
-         <item row="0" column="0" colspan="2">
-          <widget class="QLabel" name="label_title">
-           <property name="sizePolicy">
-            <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
+         <item row="0" column="0">
+          <widget class="QWidget" name="widget_2" native="true">
+           <property name="minimumSize">
+            <size>
+             <width>26</width>
+             <height>26</height>
+            </size>
            </property>
-           <property name="font">
-            <font>
-             <family>Aniron</family>
-             <weight>75</weight>
-             <bold>true</bold>
-            </font>
+           <property name="maximumSize">
+            <size>
+             <width>26</width>
+             <height>26</height>
+            </size>
            </property>
            <property name="styleSheet">
-            <string notr="true">color: white; </string>
+            <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-topleft.png);</string>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="1">
+          <widget class="QWidget" name="widget_7" native="true">
+           <property name="styleSheet">
+            <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-top.png);</string>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="2">
+          <widget class="QWidget" name="widget_9" native="true">
+           <property name="minimumSize">
+            <size>
+             <width>26</width>
+             <height>26</height>
+            </size>
            </property>
-           <property name="text">
-            <string>Выберите версию игры</string>
+           <property name="maximumSize">
+            <size>
+             <width>26</width>
+             <height>26</height>
+            </size>
            </property>
-           <property name="alignment">
-            <set>Qt::AlignCenter</set>
+           <property name="styleSheet">
+            <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-topright.png);</string>
            </property>
           </widget>
          </item>
-         <item row="2" column="0" colspan="2">
-          <widget class="QWidget" name="cancel_widget" native="true">
-           <property name="sizePolicy">
-            <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
+         <item row="1" column="0">
+          <widget class="QWidget" name="widget_4" native="true">
+           <property name="styleSheet">
+            <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-left.png);</string>
            </property>
-           <layout class="QHBoxLayout" name="horizontalLayout_2">
-            <property name="spacing">
-             <number>0</number>
-            </property>
+          </widget>
+         </item>
+         <item row="1" column="1">
+          <widget class="QWidget" name="content_area" native="true">
+           <property name="styleSheet">
+            <string notr="true">QWidget#content_area{
+	border-image: url(:/backgrounds/strong_translucent-background.png);
+}</string>
+           </property>
+           <layout class="QGridLayout" name="gridLayout_2">
             <property name="leftMargin">
-             <number>0</number>
+             <number>11</number>
             </property>
             <property name="topMargin">
-             <number>0</number>
+             <number>11</number>
             </property>
             <property name="rightMargin">
-             <number>0</number>
-            </property>
-            <property name="bottomMargin">
-             <number>0</number>
+             <number>11</number>
             </property>
-            <item>
-             <widget class="QPushButton" name="cancel">
+            <item row="0" column="0" colspan="2">
+             <widget class="QLabel" name="label_title">
               <property name="sizePolicy">
-               <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+               <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
                 <horstretch>0</horstretch>
                 <verstretch>0</verstretch>
                </sizepolicy>
               </property>
-              <property name="text">
-               <string>Вернуться</string>
+              <property name="font">
+               <font>
+                <family>EB Garamond</family>
+                <pointsize>12</pointsize>
+                <weight>50</weight>
+                <bold>false</bold>
+               </font>
               </property>
-             </widget>
-            </item>
-           </layout>
-          </widget>
-         </item>
-         <item row="1" column="0" colspan="2">
-          <widget class="QWidget" name="widget" native="true">
-           <layout class="QHBoxLayout" name="horizontalLayout">
-            <property name="spacing">
-             <number>7</number>
-            </property>
-            <property name="leftMargin">
-             <number>0</number>
-            </property>
-            <property name="topMargin">
-             <number>0</number>
-            </property>
-            <property name="rightMargin">
-             <number>0</number>
-            </property>
-            <property name="bottomMargin">
-             <number>0</number>
-            </property>
-            <item>
-             <widget class="QPushButton" name="start_original">
-              <property name="minimumSize">
-               <size>
-                <width>120</width>
-                <height>70</height>
-               </size>
+              <property name="styleSheet">
+               <string notr="true">color: white; </string>
               </property>
-              <property name="maximumSize">
-               <size>
-                <width>129</width>
-                <height>70</height>
-               </size>
+              <property name="text">
+               <string>ВЫБЕРИТЕ ВЕРСИЮ ИГРЫ</string>
               </property>
-              <property name="cursor">
-               <cursorShape>PointingHandCursor</cursorShape>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
               </property>
-              <property name="toolTip">
-               <string>Запустить оригинальную версию</string>
+             </widget>
+            </item>
+            <item row="2" column="0" colspan="2">
+             <widget class="QWidget" name="cancel_widget" native="true">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
               </property>
-              <property name="styleSheet">
-               <string notr="true">QWidget#start_original{
+              <layout class="QHBoxLayout" name="horizontalLayout_2">
+               <property name="spacing">
+                <number>0</number>
+               </property>
+               <property name="leftMargin">
+                <number>0</number>
+               </property>
+               <property name="topMargin">
+                <number>0</number>
+               </property>
+               <property name="rightMargin">
+                <number>0</number>
+               </property>
+               <property name="bottomMargin">
+                <number>0</number>
+               </property>
+               <item>
+                <widget class="QPushButton" name="cancel">
+                 <property name="sizePolicy">
+                  <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                   <horstretch>0</horstretch>
+                   <verstretch>0</verstretch>
+                  </sizepolicy>
+                 </property>
+                 <property name="text">
+                  <string>Вернуться</string>
+                 </property>
+                </widget>
+               </item>
+              </layout>
+             </widget>
+            </item>
+            <item row="1" column="0" colspan="2">
+             <widget class="QWidget" name="widget" native="true">
+              <layout class="QHBoxLayout" name="horizontalLayout">
+               <property name="spacing">
+                <number>7</number>
+               </property>
+               <property name="leftMargin">
+                <number>0</number>
+               </property>
+               <property name="topMargin">
+                <number>0</number>
+               </property>
+               <property name="rightMargin">
+                <number>0</number>
+               </property>
+               <property name="bottomMargin">
+                <number>0</number>
+               </property>
+               <item>
+                <widget class="QPushButton" name="start_original">
+                 <property name="minimumSize">
+                  <size>
+                   <width>120</width>
+                   <height>70</height>
+                  </size>
+                 </property>
+                 <property name="maximumSize">
+                  <size>
+                   <width>129</width>
+                   <height>70</height>
+                  </size>
+                 </property>
+                 <property name="cursor">
+                  <cursorShape>PointingHandCursor</cursorShape>
+                 </property>
+                 <property name="toolTip">
+                  <string>Запустить оригинальную версию</string>
+                 </property>
+                 <property name="styleSheet">
+                  <string notr="true">QWidget#start_original{
 	border: 0;
 	border-image: url(:/buttons/run_English.png);
 }
@@ -227,37 +251,37 @@ QWidget#start_original:hover{
 	border: 3px;
 	border-image: url(:/buttons/run_English.png);
 }</string>
-              </property>
-              <property name="text">
-               <string/>
-              </property>
-              <property name="flat">
-               <bool>true</bool>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QPushButton" name="start_patched">
-              <property name="minimumSize">
-               <size>
-                <width>120</width>
-                <height>70</height>
-               </size>
-              </property>
-              <property name="maximumSize">
-               <size>
-                <width>120</width>
-                <height>70</height>
-               </size>
-              </property>
-              <property name="cursor">
-               <cursorShape>PointingHandCursor</cursorShape>
-              </property>
-              <property name="toolTip">
-               <string>Запустить русифицированную версию</string>
-              </property>
-              <property name="styleSheet">
-               <string notr="true">QWidget#start_patched{
+                 </property>
+                 <property name="text">
+                  <string/>
+                 </property>
+                 <property name="flat">
+                  <bool>true</bool>
+                 </property>
+                </widget>
+               </item>
+               <item>
+                <widget class="QPushButton" name="start_patched">
+                 <property name="minimumSize">
+                  <size>
+                   <width>120</width>
+                   <height>70</height>
+                  </size>
+                 </property>
+                 <property name="maximumSize">
+                  <size>
+                   <width>120</width>
+                   <height>70</height>
+                  </size>
+                 </property>
+                 <property name="cursor">
+                  <cursorShape>PointingHandCursor</cursorShape>
+                 </property>
+                 <property name="toolTip">
+                  <string>Запустить русифицированную версию</string>
+                 </property>
+                 <property name="styleSheet">
+                  <string notr="true">QWidget#start_patched{
 	border: 0;
 	border-image: url(:/buttons/run_RU.png);
 }
@@ -266,126 +290,129 @@ QWidget#start_patched:hover{
 	border: 3px;
 	border-image: url(:/buttons/run_RU.png);
 }</string>
+                 </property>
+                 <property name="text">
+                  <string/>
+                 </property>
+                 <property name="flat">
+                  <bool>true</bool>
+                 </property>
+                </widget>
+               </item>
+              </layout>
+             </widget>
+            </item>
+            <item row="4" column="0">
+             <widget class="QWidget" name="wait_widget" native="true">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
               </property>
-              <property name="text">
-               <string/>
-              </property>
-              <property name="flat">
-               <bool>true</bool>
-              </property>
+              <layout class="QVBoxLayout" name="verticalLayout">
+               <property name="spacing">
+                <number>0</number>
+               </property>
+               <property name="leftMargin">
+                <number>0</number>
+               </property>
+               <property name="topMargin">
+                <number>0</number>
+               </property>
+               <property name="rightMargin">
+                <number>0</number>
+               </property>
+               <property name="bottomMargin">
+                <number>0</number>
+               </property>
+               <item>
+                <widget class="QLabel" name="label">
+                 <property name="styleSheet">
+                  <string notr="true">color:white</string>
+                 </property>
+                 <property name="text">
+                  <string>Подоготовка к запуску, пожалуйста, подождите...</string>
+                 </property>
+                 <property name="alignment">
+                  <set>Qt::AlignCenter</set>
+                 </property>
+                </widget>
+               </item>
+               <item>
+                <widget class="QProgressBar" name="progressBar">
+                 <property name="maximum">
+                  <number>0</number>
+                 </property>
+                 <property name="value">
+                  <number>-1</number>
+                 </property>
+                 <property name="textVisible">
+                  <bool>false</bool>
+                 </property>
+                </widget>
+               </item>
+              </layout>
              </widget>
             </item>
            </layout>
           </widget>
          </item>
-         <item row="4" column="0">
-          <widget class="QWidget" name="wait_widget" native="true">
-           <property name="sizePolicy">
-            <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
+         <item row="1" column="2">
+          <widget class="QWidget" name="widget_10" native="true">
+           <property name="styleSheet">
+            <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-right.png);</string>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="0">
+          <widget class="QWidget" name="widget_3" native="true">
+           <property name="minimumSize">
+            <size>
+             <width>26</width>
+             <height>26</height>
+            </size>
+           </property>
+           <property name="maximumSize">
+            <size>
+             <width>26</width>
+             <height>26</height>
+            </size>
+           </property>
+           <property name="styleSheet">
+            <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-botleft.png);</string>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="1">
+          <widget class="QWidget" name="widget_6" native="true">
+           <property name="styleSheet">
+            <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-bottom.png);</string>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="2">
+          <widget class="QWidget" name="widget_8" native="true">
+           <property name="minimumSize">
+            <size>
+             <width>26</width>
+             <height>26</height>
+            </size>
+           </property>
+           <property name="maximumSize">
+            <size>
+             <width>26</width>
+             <height>26</height>
+            </size>
+           </property>
+           <property name="styleSheet">
+            <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-botright.png);</string>
            </property>
-           <layout class="QVBoxLayout" name="verticalLayout">
-            <property name="spacing">
-             <number>0</number>
-            </property>
-            <property name="leftMargin">
-             <number>0</number>
-            </property>
-            <property name="topMargin">
-             <number>0</number>
-            </property>
-            <property name="rightMargin">
-             <number>0</number>
-            </property>
-            <property name="bottomMargin">
-             <number>0</number>
-            </property>
-            <item>
-             <widget class="QLabel" name="label">
-              <property name="styleSheet">
-               <string notr="true">color:white</string>
-              </property>
-              <property name="text">
-               <string>Подоготовка к запуску, пожалуйста, подождите...</string>
-              </property>
-              <property name="alignment">
-               <set>Qt::AlignCenter</set>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QProgressBar" name="progressBar">
-              <property name="maximum">
-               <number>0</number>
-              </property>
-              <property name="value">
-               <number>-1</number>
-              </property>
-              <property name="textVisible">
-               <bool>false</bool>
-              </property>
-             </widget>
-            </item>
-           </layout>
           </widget>
          </item>
         </layout>
        </widget>
       </item>
-      <item row="1" column="2">
-       <widget class="QWidget" name="widget_10" native="true">
-        <property name="styleSheet">
-         <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-right.png);</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="0">
-       <widget class="QWidget" name="widget_3" native="true">
-        <property name="minimumSize">
-         <size>
-          <width>26</width>
-          <height>26</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>26</width>
-          <height>26</height>
-         </size>
-        </property>
-        <property name="styleSheet">
-         <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-botleft.png);</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="1">
-       <widget class="QWidget" name="widget_6" native="true">
-        <property name="styleSheet">
-         <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-bottom.png);</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="2">
-       <widget class="QWidget" name="widget_8" native="true">
-        <property name="minimumSize">
-         <size>
-          <width>26</width>
-          <height>26</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>26</width>
-          <height>26</height>
-         </size>
-        </property>
-        <property name="styleSheet">
-         <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-botright.png);</string>
-        </property>
-       </widget>
-      </item>
      </layout>
     </widget>
    </item>

+ 20 - 0
src/Legacy/widgets/dialogwindow.cpp

@@ -0,0 +1,20 @@
+#include "widgets/dialogwindow.h"
+#include "ui_dialogwindow.h"
+
+DialogWindow::DialogWindow(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::DialogWindow)
+{
+    ui->setupUi(this);
+    hide();
+}
+
+DialogWindow::~DialogWindow()
+{
+    delete ui;
+}
+
+void DialogWindow::on_button_clicked()
+{
+    hide();
+}

+ 25 - 0
src/Legacy/widgets/dialogwindow.h

@@ -0,0 +1,25 @@
+#ifndef DIALOGWINDOW_H
+#define DIALOGWINDOW_H
+
+#include <QWidget>
+
+namespace Ui {
+class DialogWindow;
+}
+
+class DialogWindow : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit DialogWindow(QWidget *parent = 0);
+    ~DialogWindow();
+
+private slots:
+    void on_button_clicked();
+
+private:
+    Ui::DialogWindow *ui;
+};
+
+#endif // DIALOGWINDOW_H

+ 251 - 0
src/Legacy/widgets/dialogwindow.ui

@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>DialogWindow</class>
+ <widget class="QWidget" name="DialogWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1062</width>
+    <height>928</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <property name="autoFillBackground">
+   <bool>true</bool>
+  </property>
+  <property name="styleSheet">
+   <string notr="true"/>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_3">
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <property name="spacing">
+    <number>0</number>
+   </property>
+   <item row="0" column="0">
+    <widget class="QWidget" name="dialog_background" native="true">
+     <property name="styleSheet">
+      <string notr="true">QWidget#dialog_background{
+background-color: rgba(20, 0, 0, 70);
+}</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_6">
+      <item row="0" column="0">
+       <widget class="QWidget" name="widget" native="true">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <layout class="QGridLayout" name="gridLayout_4">
+         <property name="leftMargin">
+          <number>0</number>
+         </property>
+         <property name="topMargin">
+          <number>0</number>
+         </property>
+         <property name="rightMargin">
+          <number>0</number>
+         </property>
+         <property name="bottomMargin">
+          <number>0</number>
+         </property>
+         <property name="spacing">
+          <number>0</number>
+         </property>
+         <item row="0" column="0">
+          <widget class="QWidget" name="widget_11" native="true">
+           <property name="minimumSize">
+            <size>
+             <width>26</width>
+             <height>26</height>
+            </size>
+           </property>
+           <property name="maximumSize">
+            <size>
+             <width>26</width>
+             <height>26</height>
+            </size>
+           </property>
+           <property name="styleSheet">
+            <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-topleft.png);</string>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="1">
+          <widget class="QWidget" name="widget_12" native="true">
+           <property name="styleSheet">
+            <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-top.png);</string>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="2">
+          <widget class="QWidget" name="widget_13" native="true">
+           <property name="minimumSize">
+            <size>
+             <width>26</width>
+             <height>26</height>
+            </size>
+           </property>
+           <property name="maximumSize">
+            <size>
+             <width>26</width>
+             <height>26</height>
+            </size>
+           </property>
+           <property name="styleSheet">
+            <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-topright.png);</string>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="0">
+          <widget class="QWidget" name="widget_14" native="true">
+           <property name="styleSheet">
+            <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-left.png);</string>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="1">
+          <widget class="QWidget" name="content_area" native="true">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="styleSheet">
+            <string notr="true">QWidget#content_area{
+	border-image: url(:/backgrounds/strong_translucent-background.png);
+}</string>
+           </property>
+           <layout class="QGridLayout" name="gridLayout_5">
+            <property name="leftMargin">
+             <number>11</number>
+            </property>
+            <property name="topMargin">
+             <number>0</number>
+            </property>
+            <property name="rightMargin">
+             <number>0</number>
+            </property>
+            <property name="bottomMargin">
+             <number>0</number>
+            </property>
+            <property name="spacing">
+             <number>0</number>
+            </property>
+            <item row="0" column="0" rowspan="3">
+             <widget class="QLabel" name="message">
+              <property name="minimumSize">
+               <size>
+                <width>300</width>
+                <height>0</height>
+               </size>
+              </property>
+              <property name="font">
+               <font>
+                <family>EB Garamond</family>
+                <pointsize>12</pointsize>
+               </font>
+              </property>
+              <property name="styleSheet">
+               <string notr="true">color:white; background: transparent;</string>
+              </property>
+              <property name="text">
+               <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Приветствую!&lt;/p&gt;&lt;p&gt;Добро пожаловать в Наследие версии 2.0.0!&lt;/p&gt;&lt;p&gt;Пройдёмся по настройкам и приступим к установке русификации.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+              </property>
+              <property name="wordWrap">
+               <bool>true</bool>
+              </property>
+             </widget>
+            </item>
+            <item row="3" column="0">
+             <widget class="QPushButton" name="button">
+              <property name="text">
+               <string>Ок, хуле</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </widget>
+         </item>
+         <item row="1" column="2">
+          <widget class="QWidget" name="widget_15" native="true">
+           <property name="styleSheet">
+            <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-right.png);</string>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="0">
+          <widget class="QWidget" name="widget_16" native="true">
+           <property name="minimumSize">
+            <size>
+             <width>26</width>
+             <height>26</height>
+            </size>
+           </property>
+           <property name="maximumSize">
+            <size>
+             <width>26</width>
+             <height>26</height>
+            </size>
+           </property>
+           <property name="styleSheet">
+            <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-botleft.png);</string>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="1">
+          <widget class="QWidget" name="widget_17" native="true">
+           <property name="styleSheet">
+            <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-bottom.png);</string>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="2">
+          <widget class="QWidget" name="widget_18" native="true">
+           <property name="minimumSize">
+            <size>
+             <width>26</width>
+             <height>26</height>
+            </size>
+           </property>
+           <property name="maximumSize">
+            <size>
+             <width>26</width>
+             <height>26</height>
+            </size>
+           </property>
+           <property name="styleSheet">
+            <string notr="true">border-image: url(:/backgrounds/strong_translucent-border-botright.png);</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 11 - 1
src/Legacy/widgets/helpwidget.cpp

@@ -3,7 +3,7 @@
 #include <QDebug>
 #include <QScrollBar>
 
-HelpWidget::HelpWidget(QSettings* settings, PatchDownloader* patch_downloader, LotroDatManager* lotro_dat_manager, QWidget *parent) :
+HelpWidget::HelpWidget(QSettings*, PatchDownloader*, LotroDatManager*, QWidget *parent) :
     QWidget(parent),
     ui(new Ui::HelpWidget)
 {
@@ -20,6 +20,16 @@ HelpWidget::~HelpWidget()
     delete ui;
 }
 
+void HelpWidget::updateFontsSizes()
+{
+
+}
+
+void HelpWidget::resizeEvent(QResizeEvent *event)
+{
+
+}
+
 void HelpWidget::handleContentScrolling(int value)
 {
     if (scrollAreaContentsAnimation && scrollAreaContentsAnimation->state() == QAbstractAnimation::Running)

+ 6 - 0
src/Legacy/widgets/helpwidget.h

@@ -23,6 +23,12 @@ public:
 
     ~HelpWidget();
 
+public slots:
+    void updateFontsSizes();
+
+protected:
+    void resizeEvent(QResizeEvent *event) override;
+
 
 private slots:
     void handleContentScrolling(int value);

+ 13 - 13
src/Legacy/widgets/helpwidget.ui

@@ -490,9 +490,9 @@ QScrollBar:vertical {
     <property name="geometry">
      <rect>
       <x>0</x>
-      <y>-719</y>
-      <width>636</width>
-      <height>1160</height>
+      <y>0</y>
+      <width>630</width>
+      <height>2172</height>
      </rect>
     </property>
     <property name="sizePolicy">
@@ -539,8 +539,8 @@ border-radius: 0px;
          <widget class="QLabel" name="label_6">
           <property name="font">
            <font>
-            <family>Trajan Pro 3</family>
-            <pointsize>9</pointsize>
+            <family>Crimson Text</family>
+            <pointsize>11</pointsize>
            </font>
           </property>
           <property name="text">
@@ -571,8 +571,8 @@ border-radius: 0px;
          <widget class="QLabel" name="label_7">
           <property name="font">
            <font>
-            <family>Trajan Pro 3</family>
-            <pointsize>9</pointsize>
+            <family>Crimson Text</family>
+            <pointsize>11</pointsize>
            </font>
           </property>
           <property name="text">
@@ -602,8 +602,8 @@ border-radius: 0px;
          <widget class="QLabel" name="label_8">
           <property name="font">
            <font>
-            <family>Trajan Pro 3</family>
-            <pointsize>9</pointsize>
+            <family>Crimson Text</family>
+            <pointsize>11</pointsize>
            </font>
           </property>
           <property name="text">
@@ -632,8 +632,8 @@ border-radius: 0px;
          <widget class="QLabel" name="label_9">
           <property name="font">
            <font>
-            <family>Trajan Pro 3</family>
-            <pointsize>9</pointsize>
+            <family>Crimson Text</family>
+            <pointsize>11</pointsize>
            </font>
           </property>
           <property name="text">
@@ -662,8 +662,8 @@ border-radius: 0px;
          <widget class="QLabel" name="label_10">
           <property name="font">
            <font>
-            <family>Trajan Pro 3</family>
-            <pointsize>9</pointsize>
+            <family>Crimson Text</family>
+            <pointsize>11</pointsize>
            </font>
           </property>
           <property name="text">

+ 71 - 30
src/Legacy/widgets/mainwindow.cpp

@@ -6,6 +6,7 @@
 #include "models/lotrodatmanager.h"
 
 #include "widgets/chooseversiondialog.h"
+#include "widgets/dialogwindow.h"
 
 #include <QBitmap>
 #include <QPainter>
@@ -21,13 +22,18 @@
 #include <QFontDatabase>
 #include <QNetworkAccessManager>
 
+#include <ui_statuswidget.h>
+namespace Ui {
+class StatusWidget;
+}
+
+
 MainWindow::MainWindow(QWidget *parent) :
     QMainWindow(parent, Qt::Window | Qt::FramelessWindowHint),
     ui(new Ui::MainWindow), menuHoverWidget(nullptr), menuHoverWidgetAnimation(nullptr)
 {
-//    setObjectName("ApplicationMainWindow");
+    constructFonts();
     ui->setupUi(this);
-    ui->centralWidget->setStyleSheet(styleSheet());
 
     currently_active_entry = ui->menuentry_1;
     currently_hover_entry = nullptr;
@@ -38,20 +44,24 @@ MainWindow::MainWindow(QWidget *parent) :
     qDebug() << "Creating patch downloader instance & thread";
     lotro_functions_thread = new QThread();
     patch_updater = new PatchDownloader(settings);
-    lotro_manager = new LotroDatManager(settings, patch_updater);
+    lotro_manager = new LotroDatManager(settings);
+
+    connect(patch_updater, &PatchDownloader::checkForUpdatesStarted, this, &MainWindow::onPatchDownloaderStarted, Qt::BlockingQueuedConnection);
+    connect(patch_updater, &PatchDownloader::checkForUpdatesFinished, this, &MainWindow::onPatchDownloaderFinished, Qt::BlockingQueuedConnection);
+    connect(lotro_manager, &LotroDatManager::processStarted, this, &MainWindow::onLotroManagerStarted, Qt::BlockingQueuedConnection);
+    connect(lotro_manager, &LotroDatManager::processFinished, this, &MainWindow::onLotroManagerFinished, Qt::BlockingQueuedConnection);
+    connect(lotro_manager, &LotroDatManager::caughtError, this, &MainWindow::onLotroManagerErrorOccured, Qt::BlockingQueuedConnection);
 
-    QObject::connect(lotro_functions_thread, &QThread::finished, patch_updater, &QObject::deleteLater, Qt::QueuedConnection);
-    QObject::connect(lotro_functions_thread, &QThread::finished, lotro_manager, &QObject::deleteLater, Qt::QueuedConnection);
+    connect(lotro_functions_thread, &QThread::finished, patch_updater, &QObject::deleteLater, Qt::QueuedConnection);
+    connect(lotro_functions_thread, &QThread::finished, lotro_manager, &QObject::deleteLater, Qt::QueuedConnection);
     patch_updater->moveToThread(lotro_functions_thread);
     lotro_manager->moveToThread(lotro_functions_thread);
     lotro_functions_thread->start();
 
     qDebug() << "Initialising lotro manager...";
     QMetaObject::invokeMethod(lotro_manager, "InitialiseManager", Qt::QueuedConnection);
-    qDebug() << "Starting check for patch updates...";
-    QMetaObject::invokeMethod(patch_updater, "checkForUpdates", Qt::QueuedConnection);
 
-    status_widget = new StatusWidget(settings, patch_updater, lotro_manager, this);    
+    status_widget = new StatusWidget(settings, patch_updater, lotro_manager, this);
     settings_widget = new SettingsWidget(settings, patch_updater, lotro_manager, this);
     help_widget = new HelpWidget(settings, patch_updater, lotro_manager, this);
     about_widget = new AboutWidget(settings, patch_updater, lotro_manager, this);
@@ -61,6 +71,9 @@ MainWindow::MainWindow(QWidget *parent) :
     choose_locale_dialog->hide();
     connect(choose_locale_dialog, &ChooseVersionDialog::cancelled, this, &MainWindow::hideChooseVersionDialog);
 
+    dialog_window = new DialogWindow(this);
+    dialog_window->resize(size());
+
     ui->content_layout->addWidget(status_widget);
     ui->content_layout->addWidget(settings_widget);
     ui->content_layout->addWidget(help_widget);
@@ -91,6 +104,9 @@ MainWindow::MainWindow(QWidget *parent) :
 
     qDebug() << "Finishing main frame initialisation";
     show();
+    dialog_window->show();
+
+    QMetaObject::invokeMethod(patch_updater, "checkForUpdates");
 }
 
 void MainWindow::mousePressEvent(QMouseEvent *event)
@@ -105,7 +121,6 @@ void MainWindow::mouseMoveEvent(QMouseEvent *event)
 {
     if (event->buttons() & Qt::LeftButton) {
         move(event->globalPos() - dragPosition);
-//        choose_locale_dialog->move(this->rect().center() - choose_locale_dialog->rect().center());
         event->accept();
     }
 }
@@ -126,15 +141,8 @@ void MainWindow::resizeEvent(QResizeEvent * event)
     window_width = width;
     window_height = height;
 
-    pixels_in_14_pt = round(default_pixels_in_14_pt * window_width * dpi / (default_window_width * default_dpi)+ 0.0001);
-    pixels_in_13_pt = round(default_pixels_in_13_pt * window_width * dpi / (default_window_width * default_dpi)+ 0.0001);
-    pixels_in_12_pt = round(default_pixels_in_12_pt * window_width * dpi / (default_window_width * default_dpi)+ 0.0001);
-    pixels_in_11_pt = round(default_pixels_in_11_pt * window_width * dpi / (default_window_width * default_dpi)+ 0.0001);
-    pixels_in_10_pt = round(default_pixels_in_10_pt * window_width * dpi / (default_window_width * default_dpi) + 0.0001);
-    pixels_in_9_pt = round(default_pixels_in_9_pt * window_width * dpi / (default_window_width * default_dpi) + 0.0001);
-    pixels_in_8_pt = round(default_pixels_in_8_pt * window_width * dpi / (default_window_width * default_dpi) + 0.0001);
-    pixels_in_7_pt = round(default_pixels_in_7_pt * window_width * dpi / (default_window_width * default_dpi) + 0.0001);
-    pixels_in_6_pt = round(default_pixels_in_6_pt * window_width * dpi / (default_window_width * default_dpi) + 0.0001);
+    // window_width * dpi / (default_window_width * default_dpi)
+    updateFonts(window_width / default_window_width);
 
 //    qDebug() << "AAAAAAAAAAAAAA: " << pixels_in_6_pt << " " << pixels_in_7_pt << " " << pixels_in_8_pt << " " << pixels_in_9_pt << " " << pixels_in_10_pt << " " << pixels_in_11_pt << " " << pixels_in_12_pt;
 
@@ -154,6 +162,12 @@ void MainWindow::resizeEvent(QResizeEvent * event)
 
     ui->closeButton->setMinimumSize(width * 20 / default_window_width, height * 20 / default_window_height);
     ui->minimizeButton->setMinimumSize(width * 20 / default_window_width, height * 20 / default_window_height);
+
+    choose_locale_dialog->move({0, 0});
+    choose_locale_dialog->resize(event->size());
+
+    dialog_window->move({0, 0});
+    dialog_window->resize(size());
     updateFontSizes();
 }
 
@@ -238,6 +252,36 @@ void MainWindow::onHoverMenuentry(MenuEntry *hovered_entry)
     }
 }
 
+
+void MainWindow::onPatchDownloaderStarted() {
+    qDebug() << "Patch downloader started!";
+}
+
+void MainWindow::onPatchDownloaderFinished() {
+    qDebug() << "Patch downloader finished!";
+
+    if (lotro_manager->Initialised()) {
+        QMetaObject::invokeMethod(lotro_manager, "InstallUpdates", Qt::QueuedConnection);
+    }
+    return;
+}
+
+void MainWindow::onLotroManagerStarted(QString operation, QVector<QVariant> data) {
+    qDebug() << "LotroManager: Started operation " << operation << " with parameters " << data;
+    return;
+}
+
+void MainWindow::onLotroManagerFinished(QString operation, QVector<QVariant> data) {
+    qDebug() << "LotroManager: Finished operation " << operation << " with parameters " << data;
+//    if (operation == "")
+    return;
+}
+
+void MainWindow::onLotroManagerErrorOccured(QString, QVector<QVariant>) {
+
+}
+
+
 void MainWindow::setupWindowBackgroundAndMask(QPixmap background)
 {
     if (!qApp)
@@ -315,30 +359,27 @@ void MainWindow::hideAllContentWidgets()
     about_widget->hide();
 }
 
-
 void MainWindow::showChooseVersionDialog()
 {
-    QGraphicsBlurEffect *effect = new QGraphicsBlurEffect();
-    effect->setBlurRadius(10);
-    effect->setBlurHints(QGraphicsBlurEffect::QualityHint);
-    ui->content_area->setGraphicsEffect(effect);
+//    QGraphicsBlurEffect *effect = new QGraphicsBlurEffect();
+//    effect->setBlurRadius(10);
+//    effect->setBlurHints(QGraphicsBlurEffect::QualityHint);
+//    ui->content_area->setGraphicsEffect(effect);
     choose_locale_dialog->show();
 }
 
 void MainWindow::hideChooseVersionDialog()
 {
-    ui->content_area->setGraphicsEffect(nullptr);
+//    ui->content_area->setGraphicsEffect(nullptr);
     choose_locale_dialog->hide();
 }
 
 void MainWindow::updateFontSizes()
 {
-    QFont font = QFont(ui->menuentry_1->font());
-    font.setPixelSize(pixels_in_10_pt);
-    ui->menuentry_1->setFont(font);
-    ui->menuentry_2->setFont(font);
-    ui->menuentry_3->setFont(font);
-    ui->menuentry_4->setFont(font);
+    ui->menuentry_1->setFont(trajan_10pt);
+    ui->menuentry_2->setFont(trajan_10pt);
+    ui->menuentry_3->setFont(trajan_10pt);
+    ui->menuentry_4->setFont(trajan_10pt);
 }
 
 void MainWindow::on_closeButton_clicked()

+ 10 - 1
src/Legacy/widgets/mainwindow.h

@@ -23,6 +23,7 @@ class MenuEntry;
 class LotroDatManager;
 // class NetworkUpdater;
 class PatchDownloader;
+class DialogWindow;
 
 class MainWindow : public QMainWindow
 {
@@ -62,6 +63,13 @@ private slots:
 
     void setupWindowBackgroundAndMask(QPixmap background);
 
+    void onPatchDownloaderStarted();
+    void onPatchDownloaderFinished();
+
+    void onLotroManagerStarted(QString, QVector<QVariant>);
+    void onLotroManagerFinished(QString, QVector<QVariant>);
+    void onLotroManagerErrorOccured(QString, QVector<QVariant>);
+
 private:
     void makeConnections();
 
@@ -92,6 +100,7 @@ private:
     AboutWidget *about_widget;
 
     ChooseVersionDialog *choose_locale_dialog;
+    DialogWindow *dialog_window;
 
     QWidget* menuHoverWidget;
     QPropertyAnimation* menuHoverWidgetAnimation;
@@ -104,7 +113,7 @@ private:
     QBitmap current_mask;
     QTimer background_update_timer;
 
-    const int MAX_PIXMAP_ID = 14;
+    const int MAX_PIXMAP_ID = 21;
 };
 
 

+ 1 - 1
src/Legacy/widgets/mainwindow.ui

@@ -39,7 +39,7 @@
     <bool>false</bool>
    </property>
    <property name="styleSheet">
-    <string notr="true">border-image: url(:/backgrounds/bg1.png);</string>
+    <string notr="true">/*border-image: url(:/backgrounds/bg1.png);*/</string>
    </property>
    <widget class="QWidget" name="content_area" native="true">
     <property name="geometry">

+ 41 - 61
src/Legacy/widgets/settingswidget.cpp

@@ -39,78 +39,59 @@ SettingsWidget::~SettingsWidget()
 
 void SettingsWidget::updateFontsSizes()
 {
-    QFont trajan_9pt = ui->frame_title->font();
-    trajan_9pt.setPixelSize(pixels_in_9_pt);
+    ui->frame_title->setFont(trajan_10pt);
+    ui->group_label_1->setFont(trajan_8pt);
+    ui->group_label_2->setFont(trajan_8pt);
+    ui->group_label_3->setFont(trajan_8pt);
+    ui->group_label_4->setFont(trajan_8pt);
 
-    ui->frame_title->setFont(trajan_9pt);
-    ui->group_label_1->setFont(trajan_9pt);
-    ui->group_label_2->setFont(trajan_9pt);
-    ui->group_label_3->setFont(trajan_9pt);
-    ui->group_label_4->setFont(trajan_9pt);
-
-    QFont trajan_8pt = ui->sub_entry_1_tip->font();
-    trajan_8pt.setPixelSize(pixels_in_8_pt);
-
-    ui->sub_entry_1_tip->setFont(trajan_8pt);
-    ui->sub_entry_2_tip->setFont(trajan_8pt);
-    ui->sub_entry_3_tip->setFont(trajan_8pt);
+    ui->sub_entry_1_title->setFont(garamond_11pt);
+    ui->sub_entry_2_title->setFont(garamond_11pt);
+    ui->sub_entry_3_title->setFont(garamond_11pt);
+    ui->sub_entry_4_title->setFont(garamond_11pt);
 
     ui->backup_create_button->setFont(trajan_8pt);
     ui->backup_restore_button->setFont(trajan_8pt);
     ui->backup_remove_button->setFont(trajan_8pt);
     ui->reinstall_rusification_button->setFont(trajan_8pt);
 
-    QFont trajan_11pt = ui->sub_entry_1_title->font();
-    trajan_11pt.setPixelSize(pixels_in_11_pt);
-
-    ui->sub_entry_1_title->setFont(trajan_11pt);
-    ui->sub_entry_2_title->setFont(trajan_11pt);
-    ui->sub_entry_3_title->setFont(trajan_11pt);
-    ui->sub_entry_4_title->setFont(trajan_11pt);
-
     ui->patch_apply_button->setFont(trajan_11pt);
 
-    QFont garamond_11pt = ui->game_folder_label->font();
-    garamond_11pt.setPixelSize(pixels_in_11_pt);
-
-    ui->game_folder_label->setFont(garamond_11pt);
-    ui->game_folder_path->setFont(garamond_11pt);
-    ui->lotro_base_language_label->setFont(garamond_11pt);
-    ui->lotro_base_language_combobox->setFont(garamond_11pt);
+    ui->game_folder_label->setFont(crimson_11pt);
+    ui->game_folder_path->setFont(crimson_11pt);
+    ui->lotro_base_language_label->setFont(crimson_11pt);
+    ui->lotro_base_language_combobox->setFont(crimson_11pt);
     ui->lotro_base_language_combobox->insertItem(ui->lotro_base_language_combobox->count(), ""); // is needed to invoke elements resize
     ui->lotro_base_language_combobox->removeItem(ui->lotro_base_language_combobox->count() - 1);
 
-    ui->skiprawdownload_checkbox->setFont(garamond_11pt);
-    ui->nosplashscreen_checkbox->setFont(garamond_11pt);
-    ui->backup_status_label->setFont(garamond_11pt);
-    ui->backup_status_value->setFont(garamond_11pt);
-    ui->backup_creation_time_label->setFont(garamond_11pt);
-    ui->backup_creation_time_value->setFont(garamond_11pt);
-    ui->backup_path_label->setFont(garamond_11pt);
-    ui->backup_path_value->setFont(garamond_11pt);
-
-    ui->patch_emotes_checkbox->setFont(garamond_11pt);
-    ui->patch_fonts_checkbox->setFont(garamond_11pt);
-    ui->patch_items_checkbox->setFont(garamond_11pt);
-    ui->patch_loadscreens_checkbox->setFont(garamond_11pt);
-    ui->patch_maps_checkbox->setFont(garamond_11pt);
-    ui->patch_sounds_checkbox->setFont(garamond_11pt);
-    ui->patch_textures_checkbox->setFont(garamond_11pt);
-    ui->patch_video_checkbox->setFont(garamond_11pt);
-    ui->patch_texts_checkbox->setFont(garamond_11pt);
-
-    ui->micropatch_checkbox->setFont(garamond_11pt);
-    ui->interface_scale_label->setFont(garamond_11pt);
-    ui->interface_scale_combobox->setFont(garamond_11pt);
+    ui->skiprawdownload_checkbox->setFont(crimson_11pt);
+    ui->nosplashscreen_checkbox->setFont(crimson_11pt);
+    ui->backup_status_label->setFont(crimson_11pt);
+    ui->backup_status_value->setFont(crimson_11pt);
+    ui->backup_creation_time_label->setFont(crimson_11pt);
+    ui->backup_creation_time_value->setFont(crimson_11pt);
+    ui->backup_path_label->setFont(crimson_11pt);
+    ui->backup_path_value->setFont(crimson_11pt);
+
+    ui->patch_emotes_checkbox->setFont(crimson_11pt);
+    ui->patch_fonts_checkbox->setFont(crimson_11pt);
+    ui->patch_items_checkbox->setFont(crimson_11pt);
+    ui->patch_loadscreens_checkbox->setFont(crimson_11pt);
+    ui->patch_maps_checkbox->setFont(crimson_11pt);
+    ui->patch_sounds_checkbox->setFont(crimson_11pt);
+    ui->patch_textures_checkbox->setFont(crimson_11pt);
+    ui->patch_video_checkbox->setFont(crimson_11pt);
+    ui->patch_texts_checkbox->setFont(crimson_11pt);
+
+    ui->micropatch_checkbox->setFont(crimson_11pt);
+    ui->interface_scale_label->setFont(crimson_11pt);
+    ui->interface_scale_combobox->setFont(crimson_11pt);
     ui->interface_scale_combobox->insertItem(ui->interface_scale_combobox->count(), "250%"); // is needed to invoke elements resize
     ui->interface_scale_combobox->removeItem(ui->interface_scale_combobox->count() - 1);
-    QFont garamond_13pt = ui->texts_block_label->font();
-    garamond_13pt.setPixelSize(pixels_in_13_pt);
-
 
-    ui->texts_block_label->setFont(garamond_13pt);
-    ui->graphics_block_label->setFont(garamond_13pt);
-    ui->sounds_block_label->setFont(garamond_13pt);
+    ui->texts_block_label->setFont(crimson_12pt);
+    ui->graphics_block_label->setFont(crimson_12pt);
+    ui->sounds_block_label->setFont(crimson_12pt);
 }
 
 void SettingsWidget::setStatusToBlock(int block_id, SettingsWidget::E_STATUS status)
@@ -154,14 +135,13 @@ void SettingsWidget::resizeEvent(QResizeEvent *event)
     ui->patch_apply_button->setMinimumHeight(double(55) * coefficient);
 }
 
-void SettingsWidget::handleLotroManagerStarted(QString, QVector<QVariant>)
+void SettingsWidget::handleLotroManagerStarted(QString process_name, QVector<QVariant> data)
 {
-
 }
 
-void SettingsWidget::handleLotroManagerFinished(QString, QVector<QVariant>)
+void SettingsWidget::handleLotroManagerFinished(QString process_name, QVector<QVariant> data)
 {
-
+//    if (process_name == "")
 }
 
 void SettingsWidget::handleCheckForUpdatesStarted()

+ 225 - 285
src/Legacy/widgets/settingswidget.ui

@@ -36,12 +36,12 @@
    <property name="font">
     <font>
      <family>Trajan Pro 3</family>
-     <pointsize>9</pointsize>
+     <pointsize>10</pointsize>
      <kerning>false</kerning>
     </font>
    </property>
    <property name="text">
-    <string>ГРУППЫ НАСТРОЕК</string>
+    <string>группы настроек</string>
    </property>
   </widget>
   <widget class="QWidget" name="checkpoints_list" native="true">
@@ -74,7 +74,7 @@
       <property name="sizeHint" stdset="0">
        <size>
         <width>20</width>
-        <height>40</height>
+        <height>60</height>
        </size>
       </property>
      </spacer>
@@ -290,9 +290,9 @@ QScrollBar:vertical {
     <property name="geometry">
      <rect>
       <x>0</x>
-      <y>-447</y>
-      <width>656</width>
-      <height>1249</height>
+      <y>0</y>
+      <width>650</width>
+      <height>984</height>
      </rect>
     </property>
     <property name="sizePolicy">
@@ -326,6 +326,12 @@ border-radius: 0px;
      </property>
      <item>
       <widget class="QWidget" name="sub_entry_1" native="true">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
        <property name="styleSheet">
         <string notr="true">QWidget#sub_entry_1{
 	background-color: rgba(31, 19, 7, 155);
@@ -335,7 +341,64 @@ border-radius: 0px;
 }</string>
        </property>
        <layout class="QGridLayout" name="gridLayout">
-        <item row="2" column="0">
+        <item row="3" column="0">
+         <widget class="QCheckBox" name="skiprawdownload_checkbox">
+          <property name="font">
+           <font>
+            <family>Crimson Text</family>
+            <pointsize>11</pointsize>
+           </font>
+          </property>
+          <property name="text">
+           <string>Пропустить проверку видеороликов и экранов загрузки (ускоряет запуск игры)</string>
+          </property>
+          <property name="checked">
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="0">
+         <widget class="QLabel" name="sub_entry_1_title">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="font">
+           <font>
+            <family>EB Garamond</family>
+            <pointsize>10</pointsize>
+           </font>
+          </property>
+          <property name="text">
+           <string>● ПАРАМЕТРЫ КЛИЕНТА ИГРЫ ●</string>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignCenter</set>
+          </property>
+          <property name="wordWrap">
+           <bool>false</bool>
+          </property>
+         </widget>
+        </item>
+        <item row="4" column="0">
+         <widget class="QCheckBox" name="nosplashscreen_checkbox">
+          <property name="font">
+           <font>
+            <family>Crimson Text</family>
+            <pointsize>11</pointsize>
+           </font>
+          </property>
+          <property name="text">
+           <string>Пропускать заставочный экран при запуске игры</string>
+          </property>
+          <property name="checked">
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="0">
          <widget class="QWidget" name="widget" native="true">
           <layout class="QHBoxLayout" name="horizontalLayout">
            <property name="leftMargin">
@@ -354,7 +417,7 @@ border-radius: 0px;
             <widget class="QLabel" name="game_folder_label">
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
               </font>
              </property>
@@ -377,7 +440,7 @@ background-color: none;</string>
              </property>
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
               </font>
              </property>
@@ -419,64 +482,7 @@ background-color: none;</string>
           </layout>
          </widget>
         </item>
-        <item row="0" column="0">
-         <widget class="QLabel" name="sub_entry_1_title">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="font">
-           <font>
-            <family>Trajan Pro 3</family>
-            <pointsize>11</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>♦ параметры клиента игры ♦</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-          <property name="wordWrap">
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="5" column="0">
-         <widget class="QCheckBox" name="nosplashscreen_checkbox">
-          <property name="font">
-           <font>
-            <family>EB Garamond</family>
-            <pointsize>11</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>Пропускать заставочный экран при запуске игры</string>
-          </property>
-          <property name="checked">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="4" column="0">
-         <widget class="QCheckBox" name="skiprawdownload_checkbox">
-          <property name="font">
-           <font>
-            <family>EB Garamond</family>
-            <pointsize>11</pointsize>
-           </font>
-          </property>
-          <property name="text">
-           <string>Пропустить проверку видеороликов и экранов загрузки (ускоряет запуск игры)</string>
-          </property>
-          <property name="checked">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="3" column="0">
+        <item row="2" column="0">
          <widget class="QWidget" name="widget_5" native="true">
           <property name="sizePolicy">
            <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
@@ -512,7 +518,7 @@ background-color: none;</string>
             <widget class="QLabel" name="lotro_base_language_label">
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
               </font>
              </property>
@@ -525,7 +531,7 @@ background-color: none;</string>
             <widget class="QComboBox" name="lotro_base_language_combobox">
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
               </font>
              </property>
@@ -576,23 +582,6 @@ border-radius: 3px;</string>
           </layout>
          </widget>
         </item>
-        <item row="1" column="0">
-         <widget class="QLabel" name="sub_entry_1_tip">
-          <property name="font">
-           <font>
-            <family>Trajan Pro 3</family>
-            <pointsize>8</pointsize>
-            <italic>false</italic>
-           </font>
-          </property>
-          <property name="text">
-           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; color:#eeffaf;&quot;&gt;Нажмите на иконку папки, чтобы указать расположение игры.&lt;br/&gt;Затем выберите язык, поверх которого будет устанавливаться русификация. На этом языке будут отображаться ещё не вошедшие в перевод данные игры&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-          </property>
-          <property name="wordWrap">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
        </layout>
       </widget>
      </item>
@@ -623,12 +612,15 @@ border-radius: 3px;</string>
           </property>
           <property name="font">
            <font>
-            <family>Trajan Pro 3</family>
-            <pointsize>11</pointsize>
+            <family>EB Garamond</family>
+            <pointsize>10</pointsize>
+            <weight>50</weight>
+            <bold>false</bold>
+            <kerning>false</kerning>
            </font>
           </property>
           <property name="text">
-           <string>♦ параметры резервной копии ♦</string>
+           <string>● ПАРАМЕТРЫ РЕЗЕРВНОЙ КОПИИ ●</string>
           </property>
           <property name="alignment">
            <set>Qt::AlignCenter</set>
@@ -638,12 +630,12 @@ border-radius: 3px;</string>
           </property>
          </widget>
         </item>
-        <item row="4" column="0">
-         <widget class="QWidget" name="widget_6" native="true">
+        <item row="1" column="0">
+         <widget class="QWidget" name="widget_2" native="true">
           <property name="styleSheet">
            <string notr="true">background:transparent;</string>
           </property>
-          <layout class="QGridLayout" name="gridLayout_8">
+          <layout class="QGridLayout" name="gridLayout_3">
            <property name="leftMargin">
             <number>0</number>
            </property>
@@ -656,17 +648,17 @@ border-radius: 3px;</string>
            <property name="bottomMargin">
             <number>0</number>
            </property>
-           <item row="1" column="0">
-            <widget class="QLabel" name="backup_creation_time_label">
+           <item row="0" column="0">
+            <widget class="QLabel" name="backup_status_label">
              <property name="sizePolicy">
-              <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+              <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
                <horstretch>0</horstretch>
                <verstretch>0</verstretch>
               </sizepolicy>
              </property>
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
               </font>
              </property>
@@ -675,15 +667,15 @@ border-radius: 3px;</string>
 background-color: none;</string>
              </property>
              <property name="text">
-              <string>Время создания:</string>
+              <string>Статус копии:</string>
              </property>
              <property name="alignment">
               <set>Qt::AlignCenter</set>
              </property>
             </widget>
            </item>
-           <item row="1" column="1">
-            <widget class="QLabel" name="backup_creation_time_value">
+           <item row="0" column="1">
+            <widget class="QLabel" name="backup_status_value">
              <property name="sizePolicy">
               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
                <horstretch>0</horstretch>
@@ -692,7 +684,7 @@ background-color: none;</string>
              </property>
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
               </font>
              </property>
@@ -712,11 +704,11 @@ background-color: none;</string>
          </widget>
         </item>
         <item row="3" column="0">
-         <widget class="QWidget" name="widget_7" native="true">
+         <widget class="QWidget" name="widget_6" native="true">
           <property name="styleSheet">
            <string notr="true">background:transparent;</string>
           </property>
-          <layout class="QGridLayout" name="gridLayout_7">
+          <layout class="QGridLayout" name="gridLayout_8">
            <property name="leftMargin">
             <number>0</number>
            </property>
@@ -730,7 +722,7 @@ background-color: none;</string>
             <number>0</number>
            </property>
            <item row="1" column="0">
-            <widget class="QLabel" name="backup_path_label">
+            <widget class="QLabel" name="backup_creation_time_label">
              <property name="sizePolicy">
               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
                <horstretch>0</horstretch>
@@ -739,7 +731,7 @@ background-color: none;</string>
              </property>
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
               </font>
              </property>
@@ -748,7 +740,7 @@ background-color: none;</string>
 background-color: none;</string>
              </property>
              <property name="text">
-              <string>Расположение:</string>
+              <string>Время создания:</string>
              </property>
              <property name="alignment">
               <set>Qt::AlignCenter</set>
@@ -756,7 +748,7 @@ background-color: none;</string>
             </widget>
            </item>
            <item row="1" column="1">
-            <widget class="QLabel" name="backup_path_value">
+            <widget class="QLabel" name="backup_creation_time_value">
              <property name="sizePolicy">
               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
                <horstretch>0</horstretch>
@@ -765,7 +757,7 @@ background-color: none;</string>
              </property>
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
               </font>
              </property>
@@ -774,7 +766,7 @@ background-color: none;</string>
 background-color: none;</string>
              </property>
              <property name="text">
-              <string>E:/Programming/SourceRepos/Legacy_v2/bin/Release/test/some_more_charactacters</string>
+              <string>Активна</string>
              </property>
              <property name="alignment">
               <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@@ -785,11 +777,11 @@ background-color: none;</string>
          </widget>
         </item>
         <item row="2" column="0">
-         <widget class="QWidget" name="widget_2" native="true">
+         <widget class="QWidget" name="widget_7" native="true">
           <property name="styleSheet">
            <string notr="true">background:transparent;</string>
           </property>
-          <layout class="QGridLayout" name="gridLayout_3">
+          <layout class="QGridLayout" name="gridLayout_7">
            <property name="leftMargin">
             <number>0</number>
            </property>
@@ -802,17 +794,17 @@ background-color: none;</string>
            <property name="bottomMargin">
             <number>0</number>
            </property>
-           <item row="0" column="0">
-            <widget class="QLabel" name="backup_status_label">
+           <item row="1" column="0">
+            <widget class="QLabel" name="backup_path_label">
              <property name="sizePolicy">
-              <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+              <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
                <horstretch>0</horstretch>
                <verstretch>0</verstretch>
               </sizepolicy>
              </property>
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
               </font>
              </property>
@@ -821,15 +813,15 @@ background-color: none;</string>
 background-color: none;</string>
              </property>
              <property name="text">
-              <string>Статус копии:</string>
+              <string>Расположение:</string>
              </property>
              <property name="alignment">
               <set>Qt::AlignCenter</set>
              </property>
             </widget>
            </item>
-           <item row="0" column="1">
-            <widget class="QLabel" name="backup_status_value">
+           <item row="1" column="1">
+            <widget class="QLabel" name="backup_path_value">
              <property name="sizePolicy">
               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
                <horstretch>0</horstretch>
@@ -838,7 +830,7 @@ background-color: none;</string>
              </property>
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
               </font>
              </property>
@@ -847,7 +839,7 @@ background-color: none;</string>
 background-color: none;</string>
              </property>
              <property name="text">
-              <string>Активна</string>
+              <string>E:/Programming/SourceRepos/Legacy_v2/bin/Release/test/some_more_charactacters</string>
              </property>
              <property name="alignment">
               <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@@ -857,7 +849,7 @@ background-color: none;</string>
           </layout>
          </widget>
         </item>
-        <item row="5" column="0">
+        <item row="4" column="0">
          <widget class="QWidget" name="widget_8" native="true">
           <property name="sizePolicy">
            <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
@@ -922,7 +914,7 @@ QPushButton:default {
 }</string>
              </property>
              <property name="text">
-              <string>Пересоздать копию</string>
+              <string>Cоздать копию</string>
              </property>
             </widget>
            </item>
@@ -930,8 +922,8 @@ QPushButton:default {
             <widget class="QPushButton" name="backup_restore_button">
              <property name="font">
               <font>
-               <family>Trajan Pro 3</family>
-               <pointsize>8</pointsize>
+               <family>EB Garamond</family>
+               <pointsize>9</pointsize>
               </font>
              </property>
              <property name="autoFillBackground">
@@ -1007,31 +999,6 @@ QPushButton:default {
           </layout>
          </widget>
         </item>
-        <item row="1" column="0">
-         <widget class="QLabel" name="sub_entry_2_tip">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="font">
-           <font>
-            <family>Trajan Pro 3</family>
-            <pointsize>8</pointsize>
-            <weight>50</weight>
-            <italic>false</italic>
-            <bold>false</bold>
-           </font>
-          </property>
-          <property name="text">
-           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; color:#eeffaf;&quot;&gt;Создайте резервную копию перед установкой русификации. Так вы сможете в случае ошибок быстро восстановить данные.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-          </property>
-          <property name="wordWrap">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
        </layout>
       </widget>
      </item>
@@ -1056,12 +1023,12 @@ QPushButton:default {
           </property>
           <property name="font">
            <font>
-            <family>Trajan Pro 3</family>
-            <pointsize>11</pointsize>
+            <family>EB Garamond</family>
+            <pointsize>10</pointsize>
            </font>
           </property>
           <property name="text">
-           <string>♦ выбор компонентов русификации ♦</string>
+           <string>● ВЫБОР КОМПОНЕНТОВ РУСИФИКАЦИИ ●</string>
           </property>
           <property name="alignment">
            <set>Qt::AlignCenter</set>
@@ -1071,28 +1038,45 @@ QPushButton:default {
           </property>
          </widget>
         </item>
-        <item row="1" column="0" colspan="2">
-         <widget class="QLabel" name="sub_entry_3_tip">
-          <property name="font">
-           <font>
-            <family>Trajan Pro 3</family>
-            <pointsize>8</pointsize>
-            <italic>false</italic>
-            <kerning>true</kerning>
-           </font>
+        <item row="1" column="1">
+         <widget class="QWidget" name="patch_texts_icon" native="true">
+          <property name="minimumSize">
+           <size>
+            <width>80</width>
+            <height>80</height>
+           </size>
           </property>
-          <property name="mouseTracking">
-           <bool>false</bool>
+          <property name="maximumSize">
+           <size>
+            <width>80</width>
+            <height>80</height>
+           </size>
           </property>
-          <property name="text">
-           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; color:#eeffaf;&quot;&gt;Вы можете самостоятельно выбрать, какие компоненты русификации устанавливать, а какие - нет. &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+          <property name="styleSheet">
+           <string notr="true">border-image: url(:/patch_icons/teksty-photo-normal.png);</string>
           </property>
-          <property name="wordWrap">
-           <bool>true</bool>
+         </widget>
+        </item>
+        <item row="2" column="1">
+         <widget class="QWidget" name="patch_graphics_icon" native="true">
+          <property name="minimumSize">
+           <size>
+            <width>80</width>
+            <height>80</height>
+           </size>
+          </property>
+          <property name="maximumSize">
+           <size>
+            <width>80</width>
+            <height>80</height>
+           </size>
+          </property>
+          <property name="styleSheet">
+           <string notr="true">border-image: url(:/patch_icons/karty-photo-normal.png);</string>
           </property>
          </widget>
         </item>
-        <item row="4" column="0">
+        <item row="3" column="0">
          <widget class="QWidget" name="sounds_block" native="true">
           <layout class="QVBoxLayout" name="verticalLayout_4">
            <property name="spacing">
@@ -1114,8 +1098,8 @@ QPushButton:default {
             <widget class="QLabel" name="sounds_block_label">
              <property name="font">
               <font>
-               <family>EB Garamond</family>
-               <pointsize>13</pointsize>
+               <family>Crimson Text</family>
+               <pointsize>12</pointsize>
               </font>
              </property>
              <property name="text">
@@ -1130,7 +1114,7 @@ QPushButton:default {
             <widget class="QCheckBox" name="patch_sounds_checkbox">
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
                <kerning>true</kerning>
               </font>
@@ -1144,7 +1128,7 @@ QPushButton:default {
             <widget class="QCheckBox" name="patch_video_checkbox">
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
                <kerning>true</kerning>
               </font>
@@ -1157,7 +1141,7 @@ QPushButton:default {
           </layout>
          </widget>
         </item>
-        <item row="5" column="0" colspan="2">
+        <item row="4" column="0" colspan="2">
          <widget class="QWidget" name="apply_block" native="true">
           <layout class="QHBoxLayout" name="horizontalLayout_6">
            <property name="spacing">
@@ -1252,66 +1236,9 @@ QPushButton:pressed {
           </layout>
          </widget>
         </item>
-        <item row="2" column="1">
-         <widget class="QWidget" name="patch_texts_icon" native="true">
-          <property name="minimumSize">
-           <size>
-            <width>80</width>
-            <height>80</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>80</width>
-            <height>80</height>
-           </size>
-          </property>
-          <property name="styleSheet">
-           <string notr="true">border-image: url(:/patch_icons/teksty-photo-normal.png);</string>
-          </property>
-         </widget>
-        </item>
-        <item row="3" column="1">
-         <widget class="QWidget" name="patch_graphics_icon" native="true">
-          <property name="minimumSize">
-           <size>
-            <width>80</width>
-            <height>80</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>80</width>
-            <height>80</height>
-           </size>
-          </property>
-          <property name="styleSheet">
-           <string notr="true">border-image: url(:/patch_icons/karty-photo-normal.png);</string>
-          </property>
-         </widget>
-        </item>
-        <item row="4" column="1">
-         <widget class="QWidget" name="patch_sounds_icon" native="true">
-          <property name="minimumSize">
-           <size>
-            <width>80</width>
-            <height>80</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>80</width>
-            <height>80</height>
-           </size>
-          </property>
-          <property name="styleSheet">
-           <string notr="true">border-image: url(:/patch_icons/zvuki-photo-normal.png);</string>
-          </property>
-         </widget>
-        </item>
         <item row="2" column="0">
-         <widget class="QWidget" name="texts_block" native="true">
-          <layout class="QVBoxLayout" name="verticalLayout">
+         <widget class="QWidget" name="graphics_block" native="true">
+          <layout class="QVBoxLayout" name="verticalLayout_3">
            <property name="spacing">
             <number>0</number>
            </property>
@@ -1325,15 +1252,15 @@ QPushButton:pressed {
             <number>0</number>
            </property>
            <item>
-            <widget class="QLabel" name="texts_block_label">
+            <widget class="QLabel" name="graphics_block_label">
              <property name="font">
               <font>
-               <family>EB Garamond</family>
-               <pointsize>13</pointsize>
+               <family>Crimson Text</family>
+               <pointsize>12</pointsize>
               </font>
              </property>
              <property name="text">
-              <string>Тексты</string>
+              <string>Графика</string>
              </property>
              <property name="alignment">
               <set>Qt::AlignCenter</set>
@@ -1341,67 +1268,53 @@ QPushButton:pressed {
             </widget>
            </item>
            <item>
-            <widget class="QCheckBox" name="patch_fonts_checkbox">
-             <property name="font">
-              <font>
-               <family>EB Garamond</family>
-               <pointsize>11</pointsize>
-               <kerning>true</kerning>
-              </font>
-             </property>
-             <property name="text">
-              <string>Шрифты</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QCheckBox" name="patch_texts_checkbox">
+            <widget class="QCheckBox" name="patch_maps_checkbox">
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
                <kerning>true</kerning>
               </font>
              </property>
              <property name="text">
-              <string>Основные тексты</string>
+              <string>Карты</string>
              </property>
             </widget>
            </item>
            <item>
-            <widget class="QCheckBox" name="patch_items_checkbox">
+            <widget class="QCheckBox" name="patch_textures_checkbox">
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
                <kerning>true</kerning>
               </font>
              </property>
              <property name="text">
-              <string>Перевод предметов (отключите, если пользуетесь аукционом)</string>
+              <string>Текстуры</string>
              </property>
             </widget>
            </item>
            <item>
-            <widget class="QCheckBox" name="patch_emotes_checkbox">
+            <widget class="QCheckBox" name="patch_loadscreens_checkbox">
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
                <kerning>true</kerning>
               </font>
              </property>
              <property name="text">
-              <string>Перевод эмоций</string>
+              <string>Загрузочные экраны</string>
              </property>
             </widget>
            </item>
           </layout>
          </widget>
         </item>
-        <item row="3" column="0">
-         <widget class="QWidget" name="graphics_block" native="true">
-          <layout class="QVBoxLayout" name="verticalLayout_3">
+        <item row="1" column="0">
+         <widget class="QWidget" name="texts_block" native="true">
+          <layout class="QVBoxLayout" name="verticalLayout">
            <property name="spacing">
             <number>0</number>
            </property>
@@ -1415,15 +1328,15 @@ QPushButton:pressed {
             <number>0</number>
            </property>
            <item>
-            <widget class="QLabel" name="graphics_block_label">
+            <widget class="QLabel" name="texts_block_label">
              <property name="font">
               <font>
-               <family>EB Garamond</family>
-               <pointsize>13</pointsize>
+               <family>Crimson Text</family>
+               <pointsize>12</pointsize>
               </font>
              </property>
              <property name="text">
-              <string>Графика</string>
+              <string>Тексты</string>
              </property>
              <property name="alignment">
               <set>Qt::AlignCenter</set>
@@ -1431,50 +1344,83 @@ QPushButton:pressed {
             </widget>
            </item>
            <item>
-            <widget class="QCheckBox" name="patch_maps_checkbox">
+            <widget class="QCheckBox" name="patch_fonts_checkbox">
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
                <kerning>true</kerning>
               </font>
              </property>
              <property name="text">
-              <string>Карты</string>
+              <string>Шрифты</string>
              </property>
             </widget>
            </item>
            <item>
-            <widget class="QCheckBox" name="patch_textures_checkbox">
+            <widget class="QCheckBox" name="patch_texts_checkbox">
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
                <kerning>true</kerning>
               </font>
              </property>
              <property name="text">
-              <string>Текстуры</string>
+              <string>Основные тексты</string>
              </property>
             </widget>
            </item>
            <item>
-            <widget class="QCheckBox" name="patch_loadscreens_checkbox">
+            <widget class="QCheckBox" name="patch_items_checkbox">
              <property name="font">
               <font>
-               <family>EB Garamond</family>
+               <family>Crimson Text</family>
                <pointsize>11</pointsize>
                <kerning>true</kerning>
               </font>
              </property>
              <property name="text">
-              <string>Загрузочные экраны</string>
+              <string>Перевод предметов (отключите, если пользуетесь аукционом)</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QCheckBox" name="patch_emotes_checkbox">
+             <property name="font">
+              <font>
+               <family>Crimson Text</family>
+               <pointsize>11</pointsize>
+               <kerning>true</kerning>
+              </font>
+             </property>
+             <property name="text">
+              <string>Перевод эмоций</string>
              </property>
             </widget>
            </item>
           </layout>
          </widget>
         </item>
+        <item row="3" column="1">
+         <widget class="QWidget" name="patch_sounds_icon" native="true">
+          <property name="minimumSize">
+           <size>
+            <width>80</width>
+            <height>80</height>
+           </size>
+          </property>
+          <property name="maximumSize">
+           <size>
+            <width>80</width>
+            <height>80</height>
+           </size>
+          </property>
+          <property name="styleSheet">
+           <string notr="true">border-image: url(:/patch_icons/zvuki-photo-normal.png);</string>
+          </property>
+         </widget>
+        </item>
        </layout>
       </widget>
      </item>
@@ -1508,7 +1454,7 @@ QPushButton:pressed {
           </property>
           <property name="font">
            <font>
-            <family>EB Garamond</family>
+            <family>Crimson Text</family>
             <pointsize>11</pointsize>
            </font>
           </property>
@@ -1558,20 +1504,14 @@ QPushButton:default {
         </item>
         <item row="0" column="0" colspan="3">
          <widget class="QLabel" name="sub_entry_4_title">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
           <property name="font">
            <font>
-            <family>Trajan Pro 3</family>
+            <family>EB Garamond</family>
             <pointsize>10</pointsize>
            </font>
           </property>
           <property name="text">
-           <string>♦ настройки наследия ♦</string>
+           <string>● НАСТРОЙКИ НАСЛЕДИЯ ●</string>
           </property>
           <property name="alignment">
            <set>Qt::AlignHCenter|Qt::AlignTop</set>
@@ -1597,7 +1537,7 @@ QPushButton:default {
           </property>
           <property name="font">
            <font>
-            <family>EB Garamond</family>
+            <family>Crimson Text</family>
             <pointsize>11</pointsize>
            </font>
           </property>
@@ -1672,7 +1612,7 @@ border-radius: 3px;</string>
          <widget class="QCheckBox" name="micropatch_checkbox">
           <property name="font">
            <font>
-            <family>EB Garamond</family>
+            <family>Crimson Text</family>
             <pointsize>11</pointsize>
            </font>
           </property>

+ 69 - 43
src/Legacy/widgets/statuswidget.cpp

@@ -11,15 +11,17 @@
 #include <QMessageBox>
 
 StatusWidget::StatusWidget(QSettings* settings, PatchDownloader* patch_downloader, LotroDatManager* lotro_dat_manager, QWidget *parent) :
-    QWidget(parent), patch_updater(patch_downloader), lotro_manager(lotro_dat_manager), app_settings(settings),
+    QWidget(parent), app_settings(settings), patch_updater(patch_downloader), lotro_manager(lotro_dat_manager),
     ui(new Ui::StatusWidget)
 {
 
     ui->setupUi(this);
+    last_progress_update_time.start();
 
-    connect(patch_updater, &PatchDownloader::downloadStarted, this, &StatusWidget::onPatchDownloaderStarted, Qt::QueuedConnection);
+    connect(patch_updater, &PatchDownloader::checkForUpdatesStarted, this, &StatusWidget::onPatchDownloaderStarted, Qt::QueuedConnection);
     connect(patch_updater, &PatchDownloader::progressChanged, this, &StatusWidget::onPatchDownloaderProgressChanged, Qt::QueuedConnection);
-    connect(patch_updater, &PatchDownloader::downloadCompleted, this, &StatusWidget::onPatchDownloaderFinished, Qt::QueuedConnection);
+    connect(patch_updater, &PatchDownloader::checkForUpdatesFinished, this, &StatusWidget::onPatchDownloaderFinished, Qt::QueuedConnection);
+    connect(patch_updater, &PatchDownloader::changePatchStatus, this, &StatusWidget::updatePatchStatus);
 
     connect(ui->weekly_code_widget, &WeeklyCodeWidget::showCompletedTooltip, this, &StatusWidget::setToolTipToWeeklyCodeComplete);
     connect(ui->weekly_code_widget, &WeeklyCodeWidget::showHelpTooltip, this, &StatusWidget::setToolTipToWeeklyCodeHelp);
@@ -74,74 +76,101 @@ void StatusWidget::updateFontsSizes()
     QFont pt8_font = QFont(ui->images_label->font());
     pt8_font.setPixelSize(pixels_in_8_pt);
 
-    ui->progress_label->setFont(pt9_font);
-    ui->game_button->setFont(pt11_font);
-    ui->news_label->setFont(pt10_font);
-    ui->news_tooltip->setFont(pt10_font);
-
-    ui->images_label->setFont(pt8_font);
-    ui->images_status->setFont(pt8_font);
-    ui->sounds_label->setFont(pt8_font);
-    ui->sounds_status->setFont(pt8_font);
-    ui->texts_label->setFont(pt8_font);
-    ui->texts_status->setFont(pt8_font);
-    ui->videos_label->setFont(pt8_font);
-    ui->videos_status->setFont(pt8_font);
-
-    ui->weekly_code_tooltip_1->setFont(pt10_font);
-    ui->weekly_code_tooltip_2->setFont(pt10_font);
+    ui->progress_label->setFont(crimson_10pt);
+    ui->game_button->setFont(trajan_11pt);
+    ui->news_label->setFont(trajan_10pt);
+    ui->news_tooltip->setFont(garamond_10pt);
+
+    ui->images_label->setFont(crimson_11pt);
+    ui->images_status->setFont(crimson_11pt);
+    ui->sounds_label->setFont(crimson_11pt);
+    ui->sounds_status->setFont(crimson_11pt);
+    ui->texts_label->setFont(crimson_11pt);
+    ui->texts_status->setFont(crimson_11pt);
+    ui->videos_label->setFont(crimson_11pt);
+    ui->videos_status->setFont(crimson_11pt);
+
+    ui->weekly_code_tooltip_1->setFont(garamond_10pt);
+    ui->weekly_code_tooltip_2->setFont(garamond_10pt);
 }
 
 void StatusWidget::resizeEvent(QResizeEvent *event)
 {
     double coefficient = window_width / default_window_width;
-    ui->game_button->move(QPoint(840, 460) * coefficient);
+    ui->game_button->move(QPoint(820, 460) * coefficient);
     ui->game_button->resize(QSize(150, 60) * coefficient);
-    ui->progressBar->move(QPoint(330, 480) * coefficient);
-    ui->progressBar->resize(QSize(501, 40) * coefficient);
-    ui->progress_label->move(QPoint(330, 450) * coefficient);
-    ui->progress_label->resize(QSize(501, 31) * coefficient);
+    ui->progressBar->move(QPoint(320, 480) * coefficient);
+    ui->progressBar->resize(QSize(470, 40) * coefficient);
+    ui->progress_label->move(QPoint(330, 390) * coefficient);
+    ui->progress_label->resize(QSize(380, 90) * coefficient);
     ui->news_label->move(QPoint(45, 33)* coefficient);
     ui->news_label->resize(QSize(180, 21) * coefficient);
     ui->news_scroll_area->move(QPoint(40, 75) * coefficient);
-    ui->news_scroll_area->resize(QSize(250, 440) * coefficient);
+    ui->news_scroll_area->resize(QSize(240, 440) * coefficient);
     ui->server_status_widget->move(QPoint(820, 90) * coefficient);
     ui->server_status_widget->resize(QSize(155, 320) * coefficient);
     ui->weekly_code_widget->move(QPoint(810, 13) * coefficient);
     ui->weekly_code_widget->resize(QSize(173, 57) * coefficient);
-    ui->galadriel_widget->move(QPoint(305, 20) * coefficient);
+    ui->galadriel_widget->move(QPoint(320, 20) * coefficient);
     ui->galadriel_widget->resize(QSize(531, 461) * coefficient);
 
-    ui->news_tooltip->move(QPoint(70, 30) * coefficient);
-    ui->news_tooltip->resize(QSize(371, 101) * coefficient);
-    ui->patches_status->move(QPoint(70, 30) * coefficient);
-    ui->patches_status->resize(QSize(371, 101) * coefficient);
-    ui->weekly_code_tooltip_1->move(QPoint(70, 30) * coefficient);
-    ui->weekly_code_tooltip_2->resize(QSize(371, 101) * coefficient);
+    ui->news_tooltip->move(QPoint(38, 13) * coefficient);
+    ui->news_tooltip->resize(QSize(365, 114) * coefficient);
+    ui->weekly_code_tooltip_1->move(QPoint(38, 13) * coefficient);
+    ui->weekly_code_tooltip_1->resize(QSize(365, 114) * coefficient);
+    ui->weekly_code_tooltip_2->move(QPoint(38, 13) * coefficient);
+    ui->weekly_code_tooltip_2->resize(QSize(365, 114) * coefficient);
+
+    ui->patches_status->move(QPoint(38, 13) * coefficient);
+    ui->patches_status->resize(QSize(365, 114) * coefficient);
+
     updateFontsSizes();
 }
 
 void StatusWidget::onPatchDownloaderStarted()
 {
     qDebug() << "Status widget received DownloadStarted signal!";
-    ui->progress_label->setText("Загрузка обновлений патчей...");
+    ui->game_button->setDisabled(true);
+    ui->progress_label->setText("Проверка обновлений...");
     ui->progressBar->setValue(0);
 }
 
 void StatusWidget::onPatchDownloaderFinished()
 {
-    ui->progress_label->setText("Загрузка обновлений патчей завершена!");
+    ui->progress_label->setText("Все патчи загружены!");
     ui->progressBar->setValue(100);
+    ui->game_button->setDisabled(false);
+}
+
+void StatusWidget::onPatchDownloaderProgressChanged(QList<PatchDownloadData> patches_data)
+{
+    if (last_progress_update_time.elapsed() < 200) {
+        return;
+    } else {
+        last_progress_update_time.restart();
+    }
+
+    foreach (PatchDownloadData data, patches_data) {
+        if (data.patch_name == "general") {
+            ui->progress_label->setText("Скачивание переводов " + data.download_speed_formatted + ".\nЗагружено "
+                                       + Downloader::getSizeFormatted(data.bytesDownloaded) + " из " + Downloader::getSizeFormatted(data.bytesTotal)
+                                       + " (" + QString::number(double(data.bytesDownloaded) * 100.0 / double(data.bytesTotal), 'f', 1) + "%) "
+                                       + "\nОставшееся время: " + data.elapsed_time_formatted);
+            ui->progressBar->setValue(data.bytesDownloaded * 100 / data.bytesTotal);
+        } else {
+            updatePatchStatus(data.patch_name, "Скачивание " + QString::number(double(data.bytesDownloaded) * 100.0 / double(data.bytesTotal), 'f', 1) + "% (" + data.download_speed_formatted + ")");
+        }
+    }
 }
 
-void StatusWidget::onPatchDownloaderProgressChanged(quint64 bytesDownloaded, quint64 bytesTotal, QString download_speed_formatted, QString elapsed_time_formatted)
+void StatusWidget::updatePatchStatus(QString patch_name, QString status)
 {
-    ui->progress_label->setText("Загрузка " + download_speed_formatted + ". Загружено "
-                               + Downloader::getSizeFormatted(bytesDownloaded) + " из " + Downloader::getSizeFormatted(bytesTotal)
-                               + " (" + QString::number(bytesDownloaded * 100 / bytesTotal) + "%) ");
-                               //+ "\nОставшееся время: " + elapsed_time_formatted);
+    QString status_label_name = patch_name + "s_status";
+    QLabel* status_label = findChild<QLabel*>(status_label_name);
+    if (!status_label)
+        return;
 
-    ui->progressBar->setValue(bytesDownloaded * 100 / bytesTotal + 5);
+    status_label->setText(status);
 }
 
 void StatusWidget::on_game_button_clicked()
@@ -174,9 +203,6 @@ void StatusWidget::fadeBetweenToolTips(QWidget* next_tooltip)
 {
     if (active_tooltip) {
         QPropertyAnimation* active_tooltip_anim = tooltip_animations[active_tooltip->objectName()];
-    //    if (active_tooltip_anim->state() == QAbstractAnimation::Running) {
-    //        active_tooltip_anim->pause();
-    //    }
 
         active_tooltip_anim->setDirection(QAbstractAnimation::Backward);
 

+ 7 - 4
src/Legacy/widgets/statuswidget.h

@@ -7,11 +7,12 @@
 #include <QMap>
 #include <QGraphicsOpacityEffect>
 
+#include "models/patchdownloader.h"
+
 namespace Ui {
 class StatusWidget;
 }
 
-class PatchDownloader;
 class LotroDatManager;
 
 class StatusWidget : public QWidget
@@ -31,9 +32,9 @@ protected:
 private slots:
     void onPatchDownloaderStarted();
     void onPatchDownloaderFinished();
-    void onPatchDownloaderProgressChanged(quint64 bytesDownloaded, quint64 bytesTotal,
-                                          QString download_speed_formatted,
-                                          QString elapsed_time_formatted);
+    void onPatchDownloaderProgressChanged(QList<PatchDownloadData>);
+
+    void updatePatchStatus(QString patch_name, QString status);
 
     void on_game_button_clicked();
 
@@ -56,6 +57,8 @@ private:
     QMap<QString, QGraphicsOpacityEffect*> tooltip_effects;
     QMap<QString, QPropertyAnimation*> tooltip_animations;
     QWidget* active_tooltip;
+
+    QTime last_progress_update_time;
 };
 
 #endif // STATUSWIDGET_H

+ 122 - 68
src/Legacy/widgets/statuswidget.ui

@@ -47,9 +47,9 @@ color: white;
   <widget class="QScrollArea" name="news_scroll_area">
    <property name="geometry">
     <rect>
-     <x>40</x>
+     <x>45</x>
      <y>75</y>
-     <width>250</width>
+     <width>240</width>
      <height>440</height>
     </rect>
    </property>
@@ -111,7 +111,7 @@ QScrollBar:vertical {
      <rect>
       <x>0</x>
       <y>0</y>
-      <width>250</width>
+      <width>240</width>
       <height>440</height>
      </rect>
     </property>
@@ -146,7 +146,7 @@ QScrollBar:vertical {
   <widget class="QWidget" name="galadriel_widget" native="true">
    <property name="geometry">
     <rect>
-     <x>305</x>
+     <x>320</x>
      <y>20</y>
      <width>531</width>
      <height>461</height>
@@ -160,24 +160,24 @@ border-image: url(:/characters/galadriel_with_text.png);
    <widget class="QLabel" name="weekly_code_tooltip_1">
     <property name="geometry">
      <rect>
-      <x>60</x>
-      <y>30</y>
-      <width>381</width>
-      <height>101</height>
+      <x>38</x>
+      <y>13</y>
+      <width>365</width>
+      <height>114</height>
      </rect>
     </property>
     <property name="font">
      <font>
-      <family>Trajan Pro 3</family>
+      <family>EB Garamond</family>
       <pointsize>12</pointsize>
-      <italic>true</italic>
+      <italic>false</italic>
      </font>
     </property>
     <property name="styleSheet">
      <string/>
     </property>
     <property name="text">
-     <string>Кликните по еженедельному коду, чтобы скопировать его в буфер обмена</string>
+     <string>КЛИКНИТЕ ПО ЕЖЕНЕДЕЛЬНОМУ КОДУ, ЧТОБЫ СКОПИРОВАТЬ ЕГО В БУФЕР ОБМЕНА</string>
     </property>
     <property name="alignment">
      <set>Qt::AlignCenter</set>
@@ -189,24 +189,24 @@ border-image: url(:/characters/galadriel_with_text.png);
    <widget class="QLabel" name="news_tooltip">
     <property name="geometry">
      <rect>
-      <x>60</x>
-      <y>30</y>
-      <width>381</width>
-      <height>101</height>
+      <x>38</x>
+      <y>13</y>
+      <width>365</width>
+      <height>114</height>
      </rect>
     </property>
     <property name="font">
      <font>
-      <family>Trajan Pro 3</family>
+      <family>EB Garamond</family>
       <pointsize>12</pointsize>
-      <italic>true</italic>
+      <italic>false</italic>
      </font>
     </property>
     <property name="styleSheet">
      <string notr="true"/>
     </property>
     <property name="text">
-     <string>Кликайте по заголовку новости, чтобы открыть её в браузере</string>
+     <string>НАЖМИТЕ НА ЗАГОЛОВОК НОВОСТИ, ЧТОБЫ ОТКРЫТЬ ЕЁ В БРАУЗЕРЕ</string>
     </property>
     <property name="alignment">
      <set>Qt::AlignCenter</set>
@@ -218,15 +218,15 @@ border-image: url(:/characters/galadriel_with_text.png);
    <widget class="QLabel" name="weekly_code_tooltip_2">
     <property name="geometry">
      <rect>
-      <x>60</x>
-      <y>30</y>
-      <width>381</width>
-      <height>101</height>
+      <x>38</x>
+      <y>13</y>
+      <width>365</width>
+      <height>114</height>
      </rect>
     </property>
     <property name="font">
      <font>
-      <family>Trajan Pro 3</family>
+      <family>EB Garamond</family>
       <pointsize>12</pointsize>
       <italic>false</italic>
      </font>
@@ -235,7 +235,7 @@ border-image: url(:/characters/galadriel_with_text.png);
      <string/>
     </property>
     <property name="text">
-     <string>Еженедельный код успешно скопирован в буфер обмена!</string>
+     <string>ЕЖЕНЕДЕЛЬНЫЙ КОД СКОПИРОВАН В БУФЕР ОБМЕНА</string>
     </property>
     <property name="alignment">
      <set>Qt::AlignCenter</set>
@@ -247,21 +247,21 @@ border-image: url(:/characters/galadriel_with_text.png);
    <widget class="QWidget" name="patches_status" native="true">
     <property name="geometry">
      <rect>
-      <x>80</x>
-      <y>30</y>
-      <width>371</width>
-      <height>101</height>
+      <x>38</x>
+      <y>13</y>
+      <width>365</width>
+      <height>114</height>
      </rect>
     </property>
     <layout class="QGridLayout" name="gridLayout">
      <property name="leftMargin">
-      <number>0</number>
+      <number>11</number>
      </property>
      <property name="topMargin">
       <number>0</number>
      </property>
      <property name="rightMargin">
-      <number>0</number>
+      <number>11</number>
      </property>
      <property name="bottomMargin">
       <number>0</number>
@@ -272,6 +272,19 @@ border-image: url(:/characters/galadriel_with_text.png);
      <property name="verticalSpacing">
       <number>5</number>
      </property>
+     <item row="0" column="1" rowspan="4">
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
      <item row="0" column="0">
       <widget class="QLabel" name="texts_label">
        <property name="sizePolicy">
@@ -282,8 +295,8 @@ border-image: url(:/characters/galadriel_with_text.png);
        </property>
        <property name="font">
         <font>
-         <family>Trajan Pro 3</family>
-         <pointsize>8</pointsize>
+         <family>Crimson Text</family>
+         <pointsize>11</pointsize>
         </font>
        </property>
        <property name="text">
@@ -291,16 +304,22 @@ border-image: url(:/characters/galadriel_with_text.png);
        </property>
       </widget>
      </item>
-     <item row="0" column="1">
+     <item row="0" column="2">
       <widget class="QLabel" name="texts_status">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
        <property name="font">
         <font>
-         <family>Trajan Pro 3</family>
-         <pointsize>8</pointsize>
+         <family>Crimson Text</family>
+         <pointsize>11</pointsize>
         </font>
        </property>
        <property name="text">
-        <string>скачивание 95.6% (956.2кб/с)</string>
+        <string>получение информации...</string>
        </property>
       </widget>
      </item>
@@ -314,8 +333,8 @@ border-image: url(:/characters/galadriel_with_text.png);
        </property>
        <property name="font">
         <font>
-         <family>Trajan Pro 3</family>
-         <pointsize>8</pointsize>
+         <family>Crimson Text</family>
+         <pointsize>11</pointsize>
         </font>
        </property>
        <property name="text">
@@ -323,21 +342,27 @@ border-image: url(:/characters/galadriel_with_text.png);
        </property>
       </widget>
      </item>
-     <item row="1" column="1">
+     <item row="1" column="2">
       <widget class="QLabel" name="images_status">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
        <property name="font">
         <font>
-         <family>Trajan Pro 3</family>
-         <pointsize>8</pointsize>
+         <family>Crimson Text</family>
+         <pointsize>11</pointsize>
         </font>
        </property>
        <property name="text">
-        <string>Установка: 32.2%</string>
+        <string>получение информации...</string>
        </property>
       </widget>
      </item>
-     <item row="2" column="0">
-      <widget class="QLabel" name="sounds_label">
+     <item row="2" column="2">
+      <widget class="QLabel" name="sounds_status">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
          <horstretch>0</horstretch>
@@ -346,25 +371,31 @@ border-image: url(:/characters/galadriel_with_text.png);
        </property>
        <property name="font">
         <font>
-         <family>Trajan Pro 3</family>
-         <pointsize>8</pointsize>
+         <family>Crimson Text</family>
+         <pointsize>11</pointsize>
         </font>
        </property>
        <property name="text">
-        <string>Озвучка:</string>
+        <string>получение информации...</string>
        </property>
       </widget>
      </item>
-     <item row="2" column="1">
-      <widget class="QLabel" name="sounds_status">
+     <item row="2" column="0">
+      <widget class="QLabel" name="sounds_label">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
        <property name="font">
         <font>
-         <family>Trajan Pro 3</family>
-         <pointsize>8</pointsize>
+         <family>Crimson Text</family>
+         <pointsize>11</pointsize>
         </font>
        </property>
        <property name="text">
-        <string>Ожидание установки...</string>
+        <string>Озвучка:</string>
        </property>
       </widget>
      </item>
@@ -378,8 +409,8 @@ border-image: url(:/characters/galadriel_with_text.png);
        </property>
        <property name="font">
         <font>
-         <family>Trajan Pro 3</family>
-         <pointsize>8</pointsize>
+         <family>Crimson Text</family>
+         <pointsize>11</pointsize>
         </font>
        </property>
        <property name="text">
@@ -387,19 +418,38 @@ border-image: url(:/characters/galadriel_with_text.png);
        </property>
       </widget>
      </item>
-     <item row="3" column="1">
+     <item row="3" column="2">
       <widget class="QLabel" name="videos_status">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
        <property name="font">
         <font>
-         <family>Trajan Pro 3</family>
-         <pointsize>8</pointsize>
+         <family>Crimson Text</family>
+         <pointsize>11</pointsize>
         </font>
        </property>
        <property name="text">
-        <string>скачивание 35.6% (956.кб/с)</string>
+        <string>получение информации...</string>
        </property>
       </widget>
      </item>
+     <item row="0" column="3" rowspan="4">
+      <spacer name="horizontalSpacer_2">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
     </layout>
    </widget>
   </widget>
@@ -446,6 +496,10 @@ QPushButton#game_button:pressed {
 	border-image: url(:/buttons/button_big_pressed.png);
 }
 
+QPushButton#game_button:disabled {
+	color: white;
+	border-image: url(:/buttons/button_big_disabled.png);
+}
 </string>
    </property>
    <property name="text">
@@ -467,10 +521,10 @@ QPushButton#game_button:pressed {
   <widget class="QLabel" name="progress_label">
    <property name="geometry">
     <rect>
-     <x>300</x>
-     <y>450</y>
-     <width>501</width>
-     <height>31</height>
+     <x>330</x>
+     <y>390</y>
+     <width>380</width>
+     <height>90</height>
     </rect>
    </property>
    <property name="sizePolicy">
@@ -482,16 +536,16 @@ QPushButton#game_button:pressed {
    <property name="font">
     <font>
      <family>Trajan Pro 3</family>
-     <pointsize>8</pointsize>
+     <pointsize>9</pointsize>
      <weight>50</weight>
      <bold>false</bold>
     </font>
    </property>
    <property name="text">
-    <string>Русификация... 72.6%</string>
+    <string>Все операции выполнены</string>
    </property>
    <property name="alignment">
-    <set>Qt::AlignCenter</set>
+    <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
    </property>
    <property name="wordWrap">
     <bool>true</bool>
@@ -500,9 +554,9 @@ QPushButton#game_button:pressed {
   <widget class="QProgressBar" name="progressBar">
    <property name="geometry">
     <rect>
-     <x>300</x>
+     <x>320</x>
      <y>480</y>
-     <width>501</width>
+     <width>470</width>
      <height>40</height>
     </rect>
    </property>
@@ -537,7 +591,7 @@ margin-bottom:7px;
     <number>100</number>
    </property>
    <property name="value">
-    <number>72</number>
+    <number>0</number>
    </property>
    <property name="textVisible">
     <bool>false</bool>