Browse Source

Fixed book skin fonts, started dat_manager refactor

Ivan Arkhipov 6 years ago
parent
commit
6e7ae18a4d
24 changed files with 1713 additions and 155 deletions
  1. 4 4
      Legacy.pro
  2. 0 1
      config.cpp
  3. 0 6
      gui.cpp
  4. 0 17
      gui.h
  5. 13 7
      helper.cpp
  6. 3 14
      helper.h
  7. 31 0
      lotromanager.cpp
  8. 54 0
      lotromanager.h
  9. 49 26
      main.cpp
  10. 32 12
      mainwindow.cpp
  11. 2 2
      mainwindow.h
  12. 52 37
      mainwindow.ui
  13. 4 4
      network.cpp
  14. 1 1
      res/styles/lotro/skin.ini
  15. 1 0
      styles/book/readme.css
  16. 246 0
      styles/book/skin.ini
  17. 203 0
      styles/book/style.css
  18. 9 0
      styles/lotro/readme.css
  19. 273 0
      styles/lotro/skin.ini
  20. 227 0
      styles/lotro/style.css
  21. 2 0
      styles/vintage/readme.css
  22. 230 0
      styles/vintage/skin.ini
  23. 248 0
      styles/vintage/style.css
  24. 29 24
      ui_mainwindow.h

+ 4 - 4
Legacy.pro

@@ -33,8 +33,8 @@ SOURCES += \
     network.cpp \
     helper.cpp \
     downloadmanager.cpp \
-    gui.cpp \
-    filesystem.cpp
+    filesystem.cpp \
+    lotromanager.cpp
 
 HEADERS += \
         mainwindow.h \
@@ -43,8 +43,8 @@ HEADERS += \
     network.h \
     helper.h \
     downloadmanager.h \
-    gui.h \
-    filesystem.h
+    filesystem.h \
+    lotromanager.h
 
 FORMS += \
         mainwindow.ui

+ 0 - 1
config.cpp

@@ -232,7 +232,6 @@ void AConfig::deleteSection(QString section){
 }
 
 QStringList AConfig::getLotroPath(){
-    App *app = &App::getInstance();
     QStringList paths;
 
     //#if defined(Q_WS_WIN)

+ 0 - 6
gui.cpp

@@ -1,6 +0,0 @@
-#include "gui.h"
-
-GUI::GUI(QWidget *parent) : QMainWindow(parent)
-{
-
-}

+ 0 - 17
gui.h

@@ -1,17 +0,0 @@
-#ifndef GUI_H
-#define GUI_H
-
-#include <QMainWindow>
-
-class GUI : public QMainWindow
-{
-    Q_OBJECT
-public:
-    explicit GUI(QWidget *parent = nullptr);
-
-signals:
-
-public slots:
-};
-
-#endif // GUI_H

+ 13 - 7
helper.cpp

@@ -140,11 +140,16 @@ void Helper::setAbout(){
     App *app = &App::getInstance();
     app->logSectionStart("О нас");
     qInfo("%s:%i: %s", __FILE__, __LINE__, "Размещаем информацию о хороших людях.");
+
     app->window->ui->programmerslist->setText("Gi1dor, coder");
     app->window->ui->designerslist->setText("Чирик, valyot, Quilanar, Eodoro");
-    app->window->ui->translatorslist->setText("Arissa, unnamedartist, valyot, Чирик, Eodoro, Ferdik, Tukbard, Alcassar, Satenskyhou, Quilanar, Коралан, Invizet, taiki_exe, Rhymer, Takhizis, Lauraldo, seventhgate027, Kerita, Хилко, Leodgar, Juolukka, Auruman, Drazgar, Tondred, Foldoren, Exildil, Anormir, Василий Волков, Andoriel, Felicer, noldohini, Gi1dor, Progylkin, Arkwendir, Bara Norkins, Siltier, Maxsikr, Nahkrin, Nick_os, Razverg, ENDrain, ToX4SHOW, Jeyolin, Frenni, Коралан, Palmuch, Marty");
-    app->window->ui->programmerslist->setText("Gi1dor, coder");
-    app->window->ui->helperslist->setText("Menelhad, Мурзилка, Pastor, Alvees, Mirta, иван петров, vensys, Arkelas, Чеширская Улыбка, Shanishka70 ");
+
+    app->window->ui->translatorslist->setText("<b>Переводчики:</b> Pioneer, kitkatik134, Anadomiel, Progylkin, Drazgar, Rhymer, Влад Блюденов, "
+                                              "Buddy, Quilanar, Ferdik, Alcassar, Чирик, Tukbard<br><br>"
+                                              "<b>Модераторы:</b> Eodoro, unnamedartist, Marty, valyot, Invizet");
+
+    app->window->ui->helperslist->setText("Menelhad, Мурзилка, Pastor, Alvees, Mirta, иван петров, vensys, "
+                                          "Arkelas, Чеширская Улыбка, Shanishka70");
 }
 
 void Helper::findSkins(){
@@ -186,7 +191,7 @@ void Helper::applyShadow(QWidget * obj, QString color, int blur, int offset_x, i
 }
 
 void Helper::myDialogBox(QString text, QString info, QString okText, QString cancelText, QString image, QString okAnswer, QString cancelAnswer,
-                        int w, int h, bool textshadow = false, bool is_cancel = false){
+                        int w, int h, bool, bool is_cancel){
 
     App *app = &App::getInstance();
 
@@ -340,8 +345,8 @@ void Helper::prepareMicroPatch(){
     if (date == "false" || date == "-1")
         date = QDate::currentDate().toString("yyyy-MM-dd");
 
-    QTime time = QTime::currentTime();
-    int seconds = QTime(0, 0, 0).secsTo(time);
+    //QTime time = QTime::currentTime();
+    //int seconds = QTime(0, 0, 0).secsTo(time);
     //int timestamp = app->helper->dateToTimestamp(date + " " + time.toString("hh:mm:ss"), "yyyy-MM-dd hh:mm:ss") - seconds - 1209600;
     int timestamp = app->helper->dateToTimestamp(date, "yyyy-MM-dd") - 1209600;
 
@@ -577,7 +582,8 @@ void Helper::applyPatch(QString name){
         qInfo("%s:%i: %s%d", __FILE__, __LINE__, "Файлов в обновлении: ", indb);
         for(int i = 0; i<=indb; i++){
             processFile();
-            if (label != nullptr) label->setText("Применение ... " + QString::fromLatin1("%1").arg(i*100/indb, 3, 'f', 1) + "%");
+            if (label != nullptr)
+                label->setText(QString("Применение ... ") + QString::fromLatin1("%1").arg(i*100.0/indb, 3, 'f', 1) + QString("%"));
         }
         if(label != nullptr)label->setText("Готово");
         //for (int i = 0; i < 5; i++) app->datfiles[i].CommitChanges();

+ 3 - 14
helper.h

@@ -26,34 +26,23 @@ class Helper:public QObject {
     void hideAll();
     void setAbout();
     void findSkins();
-    void prepareMicroPatch();
     void saveLocale(int locale, QPushButton *button);
     QString getSkinName();
     void setState(QString state);
     void applyShadow(QWidget *obj, QString color, int blur, int offset_x, int offset_y);
     void myDialogBox(QString text, QString info, QString okText, QString cancelText, QString image,
-                   QString okAnswer, QString cancelAnswer, int w, int h, bool textshadow, bool is_cancel);
+                   QString okAnswer, QString cancelAnswer, int w, int h, bool textshadow = false, bool is_cancel = false);
     int dateToTimestamp(QString customDateString, QString format);
     void addComboItem(QComboBox* combo, QString itemName, QIcon* icon);
     bool setGameLocale(QString locale);
-    void startGame();
 
-    bool openDatFile(int id);
-    void closeDatFile(int id);
-    void applyPatch(QString name);
-    void processFile();
+
     const char *stringToChar(QString val);
-    void applyGlobal();
-    bool isDatReady();
     void replaceSkin(QString name);
-    void applyMicroPatch();
-    void installMicroPatch();
-    void applyLoadscreens();
-    int checkDatFile();
+
     QByteArray ba;
     QString dialog_ok_answer;
     QString dialog_cancel_answer;
-    LOTRO_DAT::LOCALE dat_locale;
 
 private slots:
     void handleFinisheddd();

+ 31 - 0
lotromanager.cpp

@@ -0,0 +1,31 @@
+#include "lotromanager.h"
+#include "app.h"
+#include "filesystem.h"
+
+LotroManager::LotroManager(QObject *parent) : QObject(parent)
+{
+
+}
+
+void LotroManager::startGame(){
+    App *app = &App::getInstance();
+    app->config->saveAllDatFiles();
+    QStringList args;
+    args << "-skiprawdownload" << "-nosplash";
+    if (dat_locale == PATCHED)
+        args << "-disablePatch";
+
+    QFile f(app->config->getValue("Local", "folder") + "/TurbineLauncher.exe");
+    QProcess process;
+    if(FileSystem::fileExists(f.fileName())){
+        if(f.fileName().contains(" ")) f.setFileName("\"" + f.fileName() + "\"");
+        process.startDetached(f.fileName(), args);
+        process.waitForFinished(-1);
+        process.deleteLater();
+        QApplication::quit();
+    } else {
+        QString text = "Запуск не удался";
+        QString info = "Не удалось запустить игру. Во время запуска произшла непредвиденная ошибка (возможно, не найден файл TurbineLauncher.exe в папке с игрой. Проверьте в 'Настройках', что у вас указан верный путь к игре, и повторите попытку запуска).";
+        app->helper->myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "", "", 400, 160, true, false);
+    }
+}

+ 54 - 0
lotromanager.h

@@ -0,0 +1,54 @@
+#ifndef LOTROMANAGER_H
+#define LOTROMANAGER_H
+
+#include <QObject>
+
+#include <LotroDat.h>
+
+class LotroManager : public QObject
+{
+    Q_OBJECT
+private:
+    explicit LotroManager(QObject *parent = nullptr);
+
+public:
+    static LotroManager& getInstance() {
+       static LotroManager instance;
+       return instance;
+    }
+
+    void startGame();
+
+    bool openDatFile(int id);
+
+    void closeDatFile(int id);
+
+    void applyPatch(QString name);
+
+    void applyGlobal();
+
+    bool isDatReady();
+
+    int checkDatFile();
+
+    void applyMicroPatch();
+
+    void applyLoadscreens();
+
+private:
+    void processFile();
+
+    void installMicroPatch();
+
+    void prepareMicroPatch();
+
+
+private:
+    LOTRO_DAT::LOCALE dat_locale_;
+
+signals:
+
+public slots:
+};
+
+#endif // LOTROMANAGER_H

+ 49 - 26
main.cpp

@@ -1,10 +1,13 @@
 #include "app.h"
+#include "filesystem.h"
+
 #include <QApplication>
 #include <QFile>
 #include <QTextCodec>
 #include <QLockFile>
 #include <QtGlobal>
-#include <QtGlobal>
+#include <QDebug>
+#include <QScreen>
 #include <stdio.h>
 #include <stdlib.h>
 
@@ -33,20 +36,53 @@ void myMessageOutput(QtMsgType type, const QMessageLogContext &, const QString &
         abort();
     }
 }
+
 int main(int argc, char *argv[]){
     //if (argc <= 1 || (argc > 1 && std::string(argv[1]) != std::string("-S") && std::string(argv[1]) != "-prelaunched"))
     //    return 0;
 
-//    if (app->config->getValue("General", "dpiscale") == "-1") {
-//        QApplication a(argc, argv);
-//        qDebug() << "No value. Detected " << ((QGuiApplication*)QCoreApplication::instance())->primaryScreen()->physicalDotsPerInch();
-//        app->config->setValue("General", "dpiscale", QString::number(((QGuiApplication*)QCoreApplication::instance())->primaryScreen()->physicalDotsPerInch()));
-//        a.exit(0);
-//        return 0;
-//    } else {
-//        qDebug() << app->config->getValue("general", "dpiscale").toLatin1();
-//        qputenv("QT_SCALE_FACTOR", app->config->getValue("general", "dpiscale").toLatin1());
-//    }
+   // QApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true);
+
+    float scale_factor = 1;
+
+    if (!FileSystem::fileExists("dpi.stml")) {
+        QApplication a(argc, argv);
+        std::vector<float> dpi_scales = {1, 1.25, 1.5, 2, 2.5};
+
+        float current_dpi = ((QGuiApplication*)QCoreApplication::instance())->primaryScreen()->physicalDotsPerInch() / 96.0;
+
+        qDebug() << "No value. Detected " << current_dpi;
+
+        float best_scale = 1;
+        for (float scale : dpi_scales) {
+            qDebug() << "Looking at " << scale << " Current diff = " << std::abs(current_dpi - scale) << ", best diff = " << std::abs(current_dpi - best_scale);
+            if (std::abs(current_dpi - scale) < std::abs(current_dpi - best_scale))
+                best_scale = scale;
+        }
+
+        qDebug() << "Using dpi scale factor " << best_scale;
+
+        QFile file("dpi.stml");
+        file.open(QIODevice::WriteOnly);
+        QTextStream writeStream(&file);
+        writeStream << best_scale;
+        file.close();
+
+        QMessageBox msgBox;
+        msgBox.setIcon(QMessageBox::Information);
+        msgBox.setText("Первоначальная настройка завершена. Пожалуйста, перезапустите приложение");
+        msgBox.exec();
+        a.exit(0);
+        return 0;
+    } else {
+        QFile file("dpi.stml");
+        file.open(QIODevice::ReadOnly);
+        QString dpi = file.readLine();
+        scale_factor = dpi.toDouble();
+        qDebug() << dpi;
+        qputenv("QT_SCALE_FACTOR", dpi.toLatin1());
+        //qputenv("QT_SCREEN_SCALE_FACTORS", dpi.toLatin1());
+    }
 
     freopen("log.txt", "w", stdout);
     freopen("log.txt", "a", stderr);
@@ -60,7 +96,7 @@ int main(int argc, char *argv[]){
     QApplication a(argc, argv);
 
     QLockFile lockFile(QDir::temp().absoluteFilePath("rulotro.lock"));
-    if(!lockFile.tryLock(100)){
+    if(!lockFile.tryLock(1)){
         QMessageBox msgBox;
         msgBox.setIcon(QMessageBox::Warning);
         msgBox.setText("Приложение уже запущено.\nРазрешено запускать только один экземпляр приложения.");
@@ -68,21 +104,8 @@ int main(int argc, char *argv[]){
         return 1;
     }
 
-    MainWindow w;
-    App *app = &App::getInstance();
-
-    app->logSectionStart("Начинаем работать");
-
-    QFile styleF;
-    QString skin = app->helper->getSkinName();
-    styleF.setFileName(app->app_folder + "styles/" + skin + "/style.css");
-    styleF.open(QFile::ReadOnly);
-    QString qssStr = styleF.readAll();
-
-    qApp->setStyleSheet(qssStr);
+    MainWindow w(scale_factor);
 
-    w.show();
-    //QFuture<void> future = QtConcurrent::run(w, &MainWindow::doStartPreparations);
     auto result = a.exec();
 
     lockFile.unlock();

+ 32 - 12
mainwindow.cpp

@@ -1,18 +1,25 @@
 #include "app.h"
 
-App *App::instance;
-
 #include <QBitmap>
 #include <QFutureWatcher>
+#include <QPainter>
+#include <QImage>
 
 #include "filesystem.h"
-MainWindow::MainWindow( QMainWindow* parent ) :
+
+MainWindow::MainWindow( double scale_factor, QMainWindow* parent) :
     QMainWindow( parent, Qt::Window | Qt::FramelessWindowHint),
     ui( new Ui::MainWindow ), dx( 0 ), dy( 0 ) {
     ui->setupUi(this);
+    scale_factor_ = scale_factor;
+
+    //setAttribute( Qt::WA_NoSystemBackground, true);
 
     App *app = &App::getInstance();
-    if(!FileSystem::fileExists(QApplication::applicationDirPath() + "/settings.ini")) app->config->saveConfig();
+
+    if(!FileSystem::fileExists(QApplication::applicationDirPath() + "/settings.ini"))
+        app->config->saveConfig();
+
     QString skin = app->helper->getSkinName();
     setWindowIcon(QIcon(":/res/styles/" + skin + "/icon6.png"));
     QCoreApplication::setOrganizationName(ORGANIZATION_NAME);
@@ -27,21 +34,26 @@ MainWindow::MainWindow( QMainWindow* parent ) :
     app->config->loadConfig();
     app->config->loadSkin();
     app->helper->hideAll();
-    app->helper->loadNews();
-    app->network->getFootMessage();
-    app->network->getServers();
-    app->network->getCoupon();
     app->helper->loadHelp();
     app->helper->setAbout();
     app->helper->findSkins();
     //app->helper->setPatchsDates();
 
+    app->logSectionStart("Начинаем работать");
+
+    QFile styleF;
+    styleF.setFileName(app->app_folder + "styles/" + skin + "/style.css");
+    styleF.open(QFile::ReadOnly);
+    QString qssStr = styleF.readAll();
+
+    qApp->setStyleSheet(qssStr);
+
     app->logSectionStart("Запуск Наследия");
     qInfo("%s:%i: %s", __FILE__, __LINE__, "Оформляем главное окно.");
     QPixmap maskPix(":/res/styles/" + skin + "/bg.png");
     QPixmap maskPixLocal(app->app_folder + "styles/" + skin + "/bg.png");
     maskPix = maskPix.isNull() ? maskPixLocal : maskPix;
-    this->setMask(maskPix.mask());
+    setMask(maskPix.mask());
 
     qInfo("%s:%i: %s", __FILE__, __LINE__, "Устанавливаем анимации.");
     QMovie * movie = new QMovie(":/res/styles/" + skin + "/loader.gif");
@@ -50,14 +62,22 @@ MainWindow::MainWindow( QMainWindow* parent ) :
     movie->setScaledSize(QSize(ui->loader->width(), ui->loader->height()));
     movie->start();
 
-    connect(app->window->ui->skinSelect, SIGNAL(currentIndexChanged(int)), this, SLOT(saveSkin()));
-    connect(this, SIGNAL(datFileChecked(int)), this, SLOT(PostDatFileCheckTransactions(int)));
-
     app->helper->setState("busy");
     ui->hintLabel->setText("Проверка .dat файла...");
     ui->exthintLabel->setText("Выполняется предварительная проверка файлов данных. Пожалуйста, подождите..");
 
+    show();
+
+    connect(app->window->ui->skinSelect, SIGNAL(currentIndexChanged(int)), this, SLOT(saveSkin()));
+    connect(this, SIGNAL(datFileChecked(int)), this, SLOT(PostDatFileCheckTransactions(int)));
+
+    app->helper->loadNews();
+    app->network->getFootMessage();
+    app->network->getServers();
+    app->network->getCoupon();
+
     QFuture<void> future = QtConcurrent::run([=]() {
+        qInfo("%s:%i: %s", __FILE__, __LINE__, "Инициализация закончена.");
         // Проверяем файл локализации
         int result = app->helper->checkDatFile();
         emit(datFileChecked(result));

+ 2 - 2
mainwindow.h

@@ -16,13 +16,13 @@ class MainWindow : public QMainWindow
 
 public:
     Ui::MainWindow *ui;
-    explicit MainWindow(QMainWindow *parent = 0);
+    explicit MainWindow(double scale_factor, QMainWindow *parent = 0);
     ~MainWindow();
     bool eventFilter(QObject *obj, QEvent *event);
 
     QString hint = "";
     QString exthint = "";
-
+    double scale_factor_;
 
 signals:
     void datFileChecked(int result);

+ 52 - 37
mainwindow.ui

@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>448</width>
-    <height>303</height>
+    <width>990</width>
+    <height>986</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -251,9 +251,9 @@
     <widget class="QLabel" name="textsStatus">
      <property name="geometry">
       <rect>
-       <x>230</x>
+       <x>210</x>
        <y>5</y>
-       <width>241</width>
+       <width>131</width>
        <height>35</height>
       </rect>
      </property>
@@ -264,9 +264,9 @@
     <widget class="QLabel" name="soundsStatus">
      <property name="geometry">
       <rect>
-       <x>230</x>
+       <x>210</x>
        <y>40</y>
-       <width>221</width>
+       <width>131</width>
        <height>35</height>
       </rect>
      </property>
@@ -277,9 +277,9 @@
     <widget class="QLabel" name="imagesStatus">
      <property name="geometry">
       <rect>
-       <x>230</x>
+       <x>210</x>
        <y>75</y>
-       <width>221</width>
+       <width>131</width>
        <height>35</height>
       </rect>
      </property>
@@ -290,9 +290,9 @@
     <widget class="QLabel" name="loadscreensStatus">
      <property name="geometry">
       <rect>
-       <x>230</x>
+       <x>210</x>
        <y>110</y>
-       <width>231</width>
+       <width>131</width>
        <height>35</height>
       </rect>
      </property>
@@ -303,9 +303,9 @@
     <widget class="QLabel" name="fontsStatus">
      <property name="geometry">
       <rect>
-       <x>230</x>
+       <x>210</x>
        <y>145</y>
-       <width>221</width>
+       <width>131</width>
        <height>35</height>
       </rect>
      </property>
@@ -316,9 +316,9 @@
     <widget class="QLabel" name="videosStatus">
      <property name="geometry">
       <rect>
-       <x>230</x>
+       <x>210</x>
        <y>180</y>
-       <width>221</width>
+       <width>121</width>
        <height>35</height>
       </rect>
      </property>
@@ -336,7 +336,7 @@
       </rect>
      </property>
      <property name="text">
-      <string>Перевод текстов от команды Наследия</string>
+      <string>Русификация текстов</string>
      </property>
     </widget>
     <widget class="QLabel" name="label">
@@ -349,7 +349,7 @@
       </rect>
      </property>
      <property name="text">
-      <string>Русские звуковые файлы от Mail.ru</string>
+      <string>Русификация озвучки</string>
      </property>
     </widget>
     <widget class="QLabel" name="label_4">
@@ -362,7 +362,7 @@
       </rect>
      </property>
      <property name="text">
-      <string>Русские карты от нашей команды</string>
+      <string>Русификация карт</string>
      </property>
     </widget>
     <widget class="QLabel" name="label_8">
@@ -375,7 +375,7 @@
       </rect>
      </property>
      <property name="text">
-      <string>Наша версия заставочных экранов</string>
+      <string>Пакет загрузочных экранов</string>
      </property>
     </widget>
     <widget class="QLabel" name="label_6">
@@ -388,7 +388,7 @@
       </rect>
      </property>
      <property name="text">
-      <string>Временная версия шрифтов для U22</string>
+      <string>Специальный пакет шрифтов</string>
      </property>
     </widget>
     <widget class="QLabel" name="label_7">
@@ -722,20 +722,20 @@
       <property name="geometry">
        <rect>
         <x>10</x>
-        <y>90</y>
-        <width>301</width>
+        <y>60</y>
+        <width>321</width>
         <height>17</height>
        </rect>
       </property>
       <property name="text">
-       <string>Загружать свежие обновления при каждом запуске</string>
+       <string>Загружать микрообновления при каждом запуске</string>
       </property>
      </widget>
      <widget class="QPushButton" name="repairButton">
       <property name="geometry">
        <rect>
         <x>10</x>
-        <y>60</y>
+        <y>80</y>
         <width>321</width>
         <height>28</height>
        </rect>
@@ -1029,25 +1029,31 @@
      <rect>
       <x>430</x>
       <y>470</y>
-      <width>461</width>
+      <width>441</width>
       <height>231</height>
      </rect>
     </property>
     <property name="title">
      <string/>
     </property>
+    <property name="flat">
+     <bool>false</bool>
+    </property>
     <widget class="QLabel" name="helperslist">
      <property name="geometry">
       <rect>
        <x>10</x>
-       <y>201</y>
-       <width>401</width>
+       <y>162</y>
+       <width>371</width>
        <height>31</height>
       </rect>
      </property>
      <property name="text">
       <string>TextLabel</string>
      </property>
+     <property name="alignment">
+      <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+     </property>
      <property name="wordWrap">
       <bool>true</bool>
      </property>
@@ -1056,7 +1062,7 @@
      <property name="geometry">
       <rect>
        <x>10</x>
-       <y>35</y>
+       <y>40</y>
        <width>361</width>
        <height>21</height>
       </rect>
@@ -1069,14 +1075,17 @@
      <property name="geometry">
       <rect>
        <x>10</x>
-       <y>92</y>
-       <width>400</width>
-       <height>91</height>
+       <y>106</y>
+       <width>371</width>
+       <height>31</height>
       </rect>
      </property>
      <property name="text">
       <string>TextLabel</string>
      </property>
+     <property name="alignment">
+      <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+     </property>
      <property name="wordWrap">
       <bool>true</bool>
      </property>
@@ -1085,14 +1094,17 @@
      <property name="geometry">
       <rect>
        <x>10</x>
-       <y>20</y>
-       <width>401</width>
+       <y>19</y>
+       <width>361</width>
        <height>16</height>
       </rect>
      </property>
      <property name="text">
       <string>TextLabel</string>
      </property>
+     <property name="alignment">
+      <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+     </property>
     </widget>
     <widget class="QLabel" name="programmers">
      <property name="geometry">
@@ -1111,7 +1123,7 @@
      <property name="geometry">
       <rect>
        <x>10</x>
-       <y>181</y>
+       <y>145</y>
        <width>366</width>
        <height>21</height>
       </rect>
@@ -1124,26 +1136,29 @@
      <property name="geometry">
       <rect>
        <x>10</x>
-       <y>56</y>
-       <width>401</width>
+       <y>59</y>
+       <width>361</width>
        <height>16</height>
       </rect>
      </property>
      <property name="text">
       <string>TextLabel</string>
      </property>
+     <property name="alignment">
+      <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+     </property>
     </widget>
     <widget class="QLabel" name="translators">
      <property name="geometry">
       <rect>
        <x>10</x>
-       <y>73</y>
+       <y>85</y>
        <width>361</width>
        <height>21</height>
       </rect>
      </property>
      <property name="text">
-      <string>Принимали участие в переводе</string>
+      <string>Принимают участие в переводе:</string>
      </property>
     </widget>
    </widget>

+ 4 - 4
network.cpp

@@ -97,7 +97,7 @@ QString ANetwork::getFootMessage(){
         QString day = list[2];
         QString month = " " + list[3];
         app->window->ui->footYellow->show();
-        app->window->ui->footYellow->setText("Внимание! Плановая профилактика игровых серверов состоится " + day + month + " с " + list[0] +" до " + list[1] + " (МСК).");
+        app->window->ui->footYellow->setText("Профилактика игровых серверов состоится " + day + month + " с " + list[0] +" до " + list[1] + " (МСК).");
     } else {
         qInfo("%s:%i: %s", __FILE__, __LINE__, "Сообщения о профилактике отсутствуют.");
     }
@@ -278,10 +278,10 @@ QString ANetwork::getMicroPath(int timestamp){
     QDir dir(microfolder);
     if(!dir.exists()) QDir().mkdir(microfolder);
     QString baseurl = app->config->getValue("Network", "update");
-    QString url = baseurl + "/" + QString::number(timestamp);
-    qInfo("%s:%i: %s%s", __FILE__, __LINE__, "Стартуем загрузку ", app->helper->stringToChar(url + "/1"));
+    QString url = baseurl + "/1/" + QString::number(timestamp);
+    qInfo("%s:%i: %s%s", __FILE__, __LINE__, "Стартуем загрузку ", url.toStdString().c_str());
     QNetworkAccessManager m_NetworkMngr;
-    QNetworkReply *reply= m_NetworkMngr.get(QNetworkRequest(url + "/1"));
+    QNetworkReply *reply= m_NetworkMngr.get(QNetworkRequest(url));
     QEventLoop loop;
     QObject::connect(reply, SIGNAL(finished()),&loop, SLOT(quit()));
     loop.exec();

+ 1 - 1
res/styles/lotro/skin.ini

@@ -220,7 +220,7 @@ top=183
 width=254
 height=26
 left=22
-top=85
+top=80
 
 [checkMicro]
 width=294

+ 1 - 0
styles/book/readme.css

@@ -0,0 +1 @@
+.title {color:#453425; font-size:14px; font:"Sans Serif"; font-weight:bold;}

+ 246 - 0
styles/book/skin.ini

@@ -0,0 +1,246 @@
+[mainWindow]
+width=800
+height=452
+left=0
+top=0
+
+[minimizeButton]
+width=18
+height=18
+left=725
+top=30
+
+[closeButton]
+width=18
+height=18
+left=750
+top=30
+
+[mainButton]
+width=150
+height=28
+left=525
+top=155
+
+[optButton]
+width=150
+height=28
+left=525
+top=270
+
+[newsButton]
+width=150
+height=28
+left=620
+top=100
+
+[helpButton]
+width=150
+height=28
+left=620
+top=215
+
+[aboutButton]
+width=150
+height=28
+left=625
+top=323
+
+[enterButton]
+width=150
+height=28
+left=525
+top=370
+text=\x412\x43e\x439\x442\x438
+
+[titleLabel]
+width=130
+height=30
+left=223
+top=75
+
+[hintLabel]
+width=330
+height=20
+left=130
+top=360
+
+[exthintLabel]
+width=370
+height=20
+left=130
+top=375
+
+[mainbox]
+width=370
+height=230
+left=150
+top=115
+
+[mainboxImage]
+width=130
+height=255
+left=430
+top=2050
+
+[optbox]
+width=350
+height=240
+left=135
+top=115
+
+[optboxImage]
+width=100
+height=240
+left=50
+top=2150
+
+[newsbox]
+width=430
+height=230
+left=115
+top=120
+
+[newsboxImage]
+width=100
+height=245
+left=445
+top=2150
+
+[helpbox]
+width=400
+height=250
+left=120
+top=115
+
+[helpboxImage]
+width=120
+height=230
+left=30
+top=2200
+
+[aboutbox]
+width=400
+height=240
+left=125
+top=110
+
+[aboutboxImage]
+width=75
+height=235
+left=460
+top=2200
+
+[dialogHeader]
+width=400
+height=28
+left=0
+top=0
+align=center
+
+[okButton]
+width=100
+height=35
+left=0
+top=0
+
+[cancelButton]
+width=100
+height=35
+left=0
+top=0
+
+[serversbox]
+width=800
+height=65
+left=21
+top=414
+
+[couponButton]
+width=150
+height=48
+left=380
+top=75
+
+[couponTitle]
+width=150
+height=18
+left=380
+top=75
+
+[footRed]
+width=570
+height=18
+left=100
+top=400
+
+[footYellow]
+width=570
+height=18
+left=100
+top=400
+
+[loader]
+width=69
+height=28
+left=385
+top=340
+
+[labelVersion]
+width=150
+height=24
+left=32
+top=437
+
+[goOriginal]
+width=70
+height=70
+left=45
+top=40
+text=del
+shadow=1
+shcolor=#111
+shblur=7
+shx=2
+shy=2
+
+[goLocal]
+width=70
+height=70
+left=130
+top=40
+text=del
+shadow=1
+shcolor=#111
+shblur=7
+shx=2
+shy=2
+
+[goCancel]
+width=70
+height=70
+left=215
+top=40
+text=del
+shadow=1
+shcolor=#111
+shblur=7
+shx=2
+shy=2
+
+[repairButton]
+width=300
+height=26
+left=10
+top=60
+
+[mainTitle]
+width=570
+height=29
+left=80
+top=29
+
+[htmlColors]
+a=#453425
+h3=#453425
+p=#111

+ 203 - 0
styles/book/style.css

@@ -0,0 +1,203 @@
+QMainWindow {
+	background-color: transparent;
+	background-image: url(:/res/styles/book/bg.png);
+	min-width:800px;
+	min-height:582px;
+	
+}
+
+QLabel, QCheckBox { color: #333; font: 8pt "Arial";	}
+
+QGroupBox{
+	border:none;
+	font: 11pt "TrebushetMS";
+	font-weight:bold;
+}
+
+QGroupBox::title { color: #453425;	 }
+QTextBrowser { border:none; }
+
+QPushButton {
+	border-image: url(:/res/styles/vintage/button2.png) 0 0 0 0 stretch stretch;
+	color: #EFE1AF;/*#F8E600*/
+	font: 12pt "Segoe Print";
+	padding:5px;
+}
+
+QPushButton:hover { color: #F9EA20; }
+QPushButton:pressed { background-color: transparent; }
+QPushButton:hover:!pressed{ border: 1px solid red; }
+ 
+ 
+QLabel#titleLabel {
+	color: #453425; /*#FBB540*/
+	font: 16pt "Segoe Script";
+	 
+}
+
+ QLabel#mainTitle {
+	color: #453425; /*#FBB540*/
+	font: 18pt "Segoe Script";
+	font-weight:bold;	 
+}
+ 
+QLabel#hintLabel{
+	color: #453425;
+	font: 11pt "TrebushetMS";
+	font-weight:bold;
+} 
+
+QLabel#hintLabel, QLabel#news1Title, QLabel#news2Title, QLabel#news3Title , QLabel#news4Title{
+	color: #453425;
+	font: 11pt "TrebushetMS";
+	font-weight:bold;
+	text-decoration:none;
+}
+
+QLabel#news1Image, QLabel#news2Image, QLabel#news3Image , QLabel#news4Image{
+	border-image: url(:/res/styles/vintage/plane.png);
+	padding:3px;
+}
+
+ QLabel#exthintLabel{
+	color: #333;
+	font: 8pt "Arial";	 
+ }  
+ 
+ QLabel#textsTitle, QLabel#imagesTitle, QLabel#soundsTitle, QLabel#loadscreensTitle, QLabel#fontsTitle, QLabel#videosTitle{
+	color: #453425;
+	font: 11pt "TrebushetMS";
+	font-weight:bold;
+ }  
+ 
+QLabel#textsStatus, QLabel#imagesStatus, QLabel#soundsStatus, QLabel#loadscreensStatus, QLabel#fontsStatus, QLabel#videosStatus{
+	color: #333;
+	font: 10pt "TrebushetMS";
+}   
+ 
+QPushButton#lotropathButton{
+	font: 10pt "MS Shell Dlg 2";
+	color: #453425;
+	border-image: url(:/res/styles/vintage/folder.png);
+	
+} 
+
+/*QLabel#mainboxImage{ border-image: url(:/res/styles/vintage/gandalf.png); } 
+QLabel#optboxImage{ border-image: url(:/res/styles/vintage/boromir.png); }  
+QLabel#newsboxImage{ border-image: url(:/res/styles/vintage/saruman.png); }
+QLabel#helpboxImage{ border-image: url(:/res/styles/vintage/elrond.png); }  
+QLabel#aboutboxImage{ border-image: url(:/res/styles/vintage/eowin.png); }*/
+  
+
+QTextBrowser {
+	background:transparent;
+	color:#000;
+	font: 10pt "TrebushetMS";	
+}
+
+ QLabel#programmers, QLabel#designers, QLabel#translators, QLabel#helpers, QLabel#moderators{
+	color: #453425;
+	font: 11pt "TrebushetMS";
+	font-weight:bold;
+ } 
+
+QLabel#skinLabel{
+	color: #453425;
+	font: 11pt "TrebushetMS";
+	font-weight:bold;
+} 
+
+QPushButton#minimizeButton { border-image: url(:/res/styles/vintage/minimize.png) 0 0 0 0 stretch stretch; }
+QPushButton#closeButton { border-image: url(:/res/styles/vintage/close.png) 0 0 0 0 stretch stretch; }
+
+QGroupBox#dialogbox{ background:rgba(0,0,0,0.4); }
+QGroupBox#dialog{ border-image: url(:/res/styles/book/start_window.png); }
+
+QGroupBox QLabel#dialogHeader, QGroupBox#startframe QLabel#goHeader{
+	padding-left:7px;
+	color: #453425;
+	font: 11pt "TrebushetMS";
+	font-weight:bold;
+	margin-left:8px;
+	margin-right:8px;
+	margin-top:5px;
+}
+
+QGroupBox#startframe QLabel#goHeader{ margin-left:105px; }
+
+QGroupBox QLabel#dialogImage{ margin:3px; }
+
+QGroupBox QLabel#dialogInfo{	
+	margin:7px;
+	padding:7px;
+	font: 10pt "TrebushetMS";
+	color:#333;
+}
+
+QPushButton#okButton, QPushButton#cancelButton { margin-top:7px; }
+
+QLabel#Arkenstone, QLabel#Belegaer, QLabel#Brandywine, QLabel#Crickhollow, QLabel#Evernight, QLabel#Gladden, QLabel#Gwaihir,
+QLabel#Lamannia, QLabel#Landroval, QLabel#Laurelin, QLabel#Sirannon, QLabel#Bullroarer, QLabel#Crickhollow { 
+	border-image: url(:/res/styles/vintage/plane2.png);
+	background-color: #555555; /*#8A0808 #173B0B*/
+	color:#E8D575;
+}
+
+QPushButton#couponButton{
+	font:14px;
+	color: #333;
+	border-image: none;
+	background:transparent;
+	
+} 
+
+QPushButton#couponButton:hover{ border:none; } 
+
+QLabel#couponTitle{	color: #333;font-weight:bold;}
+QLabel#lotropathLabel{ border:#BFBFBF solid 1px;border-width: 1px; background-color:rgba(19,0,0,0.25); padding-left:2px; }
+QLabel#footRed, QLabel#footYellow{font-size:13px; background: rgba(255,255,255,0.1); color: #000; padding-left:5px;}
+QLabel#loader{ background:transparent;}
+
+QPushButton#enButton{ border-image: url(:/res/styles/vintage/flag_en.png) 0 0 0 0 stretch stretch;} 
+QPushButton#deButton{ border-image: url(:/res/styles/vintage/flag_de.png) 0 0 0 0 stretch stretch;}
+QPushButton#frButton{ border-image: url(:/res/styles/vintage/flag_fr.png) 0 0 0 0 stretch stretch;}
+QPushButton#enButton:disabled, QPushButton#deButton:disabled, QPushButton#frButton:disabled{border-width: 1px; background-color: rgba(255,255,255,0.4);} 
+
+
+QComboBox, QListView::item:selected{
+	color:#001;
+	background-color:rgba(0,0,0,0.1);
+	padding:1px;
+	subcontrol-origin: padding;
+}
+
+QComboBox::drop-down{border-width:1px;}
+QComboBox::down-arrow{border-image:url(:/res/styles/vintage/downarrow.png);}
+QComboBox QAbstractItemView::item{ padding:5px; }
+
+QPushButton#goCancel{ border-image: url(:/res/styles/book/gocancel.png) 0 0 0 0 stretch stretch;}
+QPushButton#goLocal{ border-image: url(:/res/styles/book/gorur.png) 0 0 0 0 stretch stretch;}
+QPushButton#goEnButton{ border-image: url(:/res/styles/book/goenr.png) 0 0 0 0 stretch stretch;}
+QPushButton#goDeButton{ border-image: url(:/res/styles/book/goder.png) 0 0 0 0 stretch stretch;}
+QPushButton#goFrButton{ border-image: url(:/res/styles/book/gofrr.png) 0 0 0 0 stretch stretch;}
+
+QGroupBox#startbox{
+	background:rgba(0,0,0,0.4);
+}
+
+QGroupBox#startframe{
+	background:rgba(0,0,0,0.4);
+	border-image: url(:/res/styles/book/start_window.png) 0 0 0 0 stretch stretch;
+}
+
+QGroupBox#startframe QLabel#goTitle{
+	/*border-image: url(:/res/styles/vintage/header.png);*/
+	color: #4B2708;
+	font: 11pt "TrebushetMS";
+}
+
+
+
+QLabel#goHint{ color:#4B2708; }
+
+QLabel#labelVersion{ color:#111; }

+ 9 - 0
styles/lotro/readme.css

@@ -0,0 +1,9 @@
+.title{
+    color: #f7d77a; 
+    font: 11px "Microsoft Sans Serif";
+    margin-top:20px;
+}
+
+p{
+    margin-top:5px;
+}

+ 273 - 0
styles/lotro/skin.ini

@@ -0,0 +1,273 @@
+[mainWindow]
+width=800
+height=582
+left=0
+top=0
+
+[minimizeButton]
+width=30
+height=25
+left=710
+top=72
+
+[closeButton]
+width=30
+height=25
+left=740
+top=72
+
+[mainButton]
+width=136
+height=26
+left=597
+top=261
+
+[optButton]
+width=136
+height=26
+left=597
+top=300
+
+[newsButton]
+width=136
+height=26
+left=597
+top=339
+
+[helpButton]
+width=136
+height=26
+left=597
+top=377
+
+[aboutButton]
+width=136
+height=26
+left=597
+top=414
+
+[enterButton]
+width=87
+height=25
+left=620
+top=460
+text=del
+
+[titleLabel]
+width=130
+height=30
+left=243
+top=185
+
+[hintLabel]
+width=290
+height=20
+left=97
+top=460
+
+[exthintLabel]
+width=430
+height=20
+left=97
+top=477
+
+[mainbox]
+width=450
+height=230
+left=135
+top=215
+
+[mainboxImage]
+width=130
+height=255
+left=450
+top=190
+
+[optbox]
+width=350
+height=240
+left=125
+top=210
+
+[optboxImage]
+width=100
+height=240
+left=70ы
+top=190
+
+[newsbox]
+width=430
+height=230
+left=80
+top=225
+
+[newsboxImage]
+width=100
+height=245
+left=475
+top=190
+
+[helpbox]
+width=460
+height=250
+left=87
+top=215
+
+[helpboxImage]
+width=120
+height=230
+left=87
+top=200
+
+[aboutbox]
+width=460
+height=240
+left=90
+top=220
+
+[aboutboxImage]
+width=75
+height=235
+left=490
+top=195
+
+[dialogHeader]
+width=400
+height=45
+left=0
+top=0
+align=center
+
+[okButton]
+width=114
+height=29
+left=0
+top=0
+
+[cancelButton]
+width=114
+height=29
+left=0
+top=0
+
+[serversbox]
+width=800
+height=65
+left=21
+top=514
+
+[couponButton]
+width=150
+height=48
+left=591
+top=167
+
+[couponTitle]
+width=150
+height=18
+left=591
+top=162
+
+[footRed]
+width=570
+height=18
+left=62
+top=502
+
+[footYellow]
+width=570
+height=18
+left=50
+top=502
+
+[loader]
+width=34
+height=34
+left=516
+top=459
+
+[labelVersion]
+width=150
+height=24
+left=325
+top=540
+
+[textBrowser]
+width=470
+height=210
+left=10
+top=10
+
+[translatorslist]
+width=450
+height=110
+left=10
+top=75
+
+[helpers]
+width=420
+height=18
+left=10
+top=168
+
+[helperslist]
+width=420
+height=36
+left=10
+top=183
+
+[repairButton]
+width=254
+height=26
+left=22
+top=85
+
+[checkMicro]
+width=294
+height=28
+left=10
+top=59
+
+[goOriginal]
+width=94
+height=56
+left=55
+top=33
+
+[goLocal]
+width=94
+height=56
+left=180
+top=33
+
+[goCancel]
+width=114
+height=26
+left=110
+top=128
+text=\x41e\x442\x43c\x435\x43d\x430
+
+[goTitle]
+width=270
+height=26
+left=30
+top=88
+text=\x412\x44b\x431\x435\x440\x438\x442\x435 \x44f\x437\x44b\x43a \x434\x43b\x44f \x43f\x440\x43e\x434\x43e\x43b\x436\x435\x43d\x438\x44f
+
+[dialogInfo]
+width=100%
+height=100%
+left=20
+top=40
+
+[htmlColors]
+a=#f7d77a[htmlColors]
+a=#f7d77a
+h3=#f7d77a
+p=#FFF
+
+[designButton]
+width=144
+height=29
+left=-400
+top=120

+ 227 - 0
styles/lotro/style.css

@@ -0,0 +1,227 @@
+QMainWindow {
+	background-color: transparent;
+	background-image: url(:res/styles/lotro/bg.png);
+	min-width:800px;
+	min-height:582px;
+}
+
+QLabel, QCheckBox {
+	font: 12px "TrebushetMS";	
+	color: #FFF;
+}
+
+QGroupBox{ 
+	background-color:transparent;
+	border:none;
+	font: 15px "Microsoft Sans Serif";
+}
+
+QGroupBox::title {
+	color: #f7d77a;
+	font: 15px "Microsoft Sans Serif";
+
+}
+
+QTextBrowser {
+	border:none;
+}
+
+QPushButton {
+	background-color: transparent;
+	background-image:url(:res/styles/lotro/button.png) stretch; 
+	color: #FFF;/*#F8E600*/
+	font: 16px "Lucida Sans Unicode";
+
+}
+
+QPushButton:hover { color: #f2ce2e; }
+QPushButton:pressed { background-color: transparent; }
+QPushButton:hover:!pressed{ border: 1px solid transparent; }
+ 
+QPushButton#enterButton { border-image: url(:res/styles/lotro/enter.png) 0 0 0 0 stretch stretch; background:none; }  
+QPushButton#enterButton:hover { border-image: url(:res/styles/lotro/enter_hover.png) 0 0 0 0 stretch stretch; } 
+
+
+QLabel#titleLabel {
+	color: #FFF;
+	font: 18px "Lucida Sans Unicode";
+}
+ 
+QLabel#hintLabel, QLabel#news1Title, QLabel#news2Title, QLabel#news3Title , QLabel#news4Title{
+	font: 18px "Microsoft Sans Serif";
+}
+
+QLabel#hintLabel{
+	color: #f7d77a;
+	font: 16px "Lucida Sans Unicode";
+}
+
+QLabel#news1Image, QLabel#news2Image, QLabel#news3Image , QLabel#news4Image{
+	border-image: url(:res/styles/vintage/plane.png);
+	padding:3px;
+}
+
+ QLabel#exthintLabel{
+	color: rgb(255, 255, 255);
+	font: 12px "Microsoft Sans Serif";	 
+}  
+
+ QLabel#textsTitle, QLabel#imagesTitle, QLabel#soundsTitle, QLabel#loadscreensTitle, QLabel#fontsTitle, QLabel#videosTitle{
+	color: #f7d77a;
+	font: 15px "Microsoft Sans Serif";
+}  
+
+QLabel#textsStatus, QLabel#imagesStatus, QLabel#soundsStatus, QLabel#loadscreensStatus, QLabel#fontsStatus, QLabel#videosStatus{
+	color: #FFF;
+	font: 14px "TrebushetMS";
+}   
+
+QPushButton#lotropathButton{
+	background:none; 
+	border-image: url(:res/styles/vintage/folder.png);
+} 
+
+/*QLabel#mainboxImage{ border-image: url(:res/styles/vintage/gandalf.png); } 
+QLabel#opxboxImage{ border-image: url(:res/styles/vintage/boromir.png); }  
+QLabel#newsboxImage{ border-image: url(:res/styles/vintage/saruman.png); }
+QLabel#helpboxImage{ border-image: url(:res/styles/vintage/elrond.png); }  
+QLabel#aboutboxImage{ border-image: url(:res/styles/vintage/eowin.png); }*/
+  
+QTextBrowser {
+	background:transparent;
+	color:#FFF;
+	font: 14px "TrebushetMS";	
+}
+
+ QLabel#programmers, QLabel#designers, QLabel#translators, QLabel#helpers, QLabel#moderators{
+	color: #f7d77a;
+	font: 15px "Microsoft Sans Serif";
+	text-decoration:none;
+} 
+
+QLabel#skinLabel{
+	color: #f7d77a;
+	font: 15px "Microsoft Sans Serif";
+} 
+
+QPushButton#minimizeButton { background:none; border-image: url(:res/styles/lotro/minimize.png) 0 0 0 0 stretch stretch; }
+QPushButton#closeButton { background:none; border-image: url(:res/styles/lotro/quit.png) 0 0 0 0 stretch stretch; }
+
+QGroupBox#dialogbox{
+	background:rgba(0,0,0,0.4);
+}
+
+QGroupBox#dialog{
+	border-image: url(:res/styles/lotro/start_window_eodoro.png);
+}
+
+QGroupBox QLabel#dialogHeader{
+	padding-left:7px;
+	color: red;
+	font: 16px "Microsoft Sans Serif";
+	margin-left:5px;
+	margin-right:5px;
+	margin-top:3px;
+	text-align:center;
+}
+
+QGroupBox QLabel#dialogImage{ margin:3px; }
+
+QGroupBox QLabel#dialogInfo{	
+	margin:7px;
+	padding:7px;
+	font: 14px "TrebushetMS";
+	color:#FFF;
+}
+
+QPushButton#okButton, QPushButton#cancelButton {
+	background:none; 
+	background-color:transparent;
+	border-image: url(:res/styles/lotro/button_dialog.png) 0 0 5 0 stretch stretch;
+}
+
+QLabel#Arkenstone, QLabel#Belegaer, QLabel#Brandywine, QLabel#Crickhollow, QLabel#Evernight, QLabel#Gladden, QLabel#Gwaihir,
+QLabel#Lamannia, QLabel#Landroval, QLabel#Laurelin, QLabel#Sirannon, QLabel#Bullroarer, QLabel#Crickhollow { 
+	border-image: url(:res/styles/vintage/plane2.png);
+	background-color: #555555; /*#8A0808 #173B0B*/
+}
+
+QPushButton#couponButton{
+	font: 19px "Lucida Sans Unicode";
+	color: #f2ce2e;
+	border-image: none;
+	background:transparent;
+} 
+
+QPushButton#couponButton:hover{ border:none; } 
+
+QLabel#couponTitle{	
+	font: 12px "Lucida Sans Unicode";
+	color: #FFF;
+}
+
+QLabel#lotropathLabel{ 
+		border:#BFBFBF solid 1px;border-width: 1px;
+	background-color:rgba(19,0,0,0.25); padding-left:2px; 
+}
+
+QLabel#footRed{	color: red;font-weight:bold;}
+QLabel#footYellow{	color: #FFDC20;font-weight:bold;}
+QLabel#loader{ background:transparent;}
+
+QPushButton#enButton{ background:none; border-image: url(:res/styles/vintage/flag_en.png) 0 0 0 0 stretch stretch;} 
+QPushButton#deButton{ background:none; border-image: url(:res/styles/vintage/flag_de.png) 0 0 0 0 stretch stretch;}
+QPushButton#frButton{ background:none; border-image: url(:res/styles/vintage/flag_fr.png) 0 0 0 0 stretch stretch;}
+QPushButton#enButton:disabled, QPushButton#deButton:disabled, QPushButton#frButton:disabled{border-width: 1px; background-color: rgba(255,255,255,0.4);} 
+
+
+QComboBox, QListView::item:selected{
+	color:#FFFFFF;
+	background-color:rgba(0,0,0,0.1);
+	padding:1px;
+	subcontrol-origin: padding;
+}
+
+QComboBox::drop-down{border-width:1px;}
+QComboBox::down-arrow{border-image:url(:res/styles/vintage/downarrow.png);}
+QComboBox QAbstractItemView::item{ padding:5px; }
+
+QPushButton#goCancel{ background-color:transparent; background-image: url(:res/styles/lotro/button_dialog.png) 0 0 0 0 stretch stretch;}
+QPushButton#goLocal{ background:none; border-image: url(:res/styles/lotro/gorur.png) 0 0 0 0 stretch stretch;}
+QPushButton#goOriginal{ background:none;}
+QPushButton#goEnButton{ background:none; border-image: url(:res/styles/lotro/goenr.png) 0 0 0 0 stretch stretch;}
+QPushButton#goDeButton{ background:none; border-image: url(:res/styles/lotro/goder.png) 0 0 0 0 stretch stretch;}
+QPushButton#goFrButton{ background:none; border-image: url(:res/styles/lotro/gofrr.png) 0 0 0 0 stretch stretch;}
+
+QGroupBox#startbox{
+	background:rgba(0,0,0,0.4);
+}
+
+QGroupBox#startframe{
+	background:rgba(0,0,0,0.4);
+	border-image: url(:res/styles/lotro/start_window_eodoro.png) 0 0 0 0 stretch stretch;
+}
+
+QGroupBox#startframe QLabel#goTitle{
+	color: #FFF;
+	font: 15px "TrebushetMS";
+	margin-top:10px;
+}
+
+QGroupBox#startframe QLabel#goHeader{
+	padding-left:7px;
+	color: #FFF;
+	font: 15px "TrebushetMS";
+	font-weight:bold;
+	margin-left:105px;
+	margin-right:5px;
+}
+
+QLabel#goHint{ color:#FFF; }
+
+QPushButton#repairButton{ 
+	background:none;
+	background-color:transparent;
+	border-image: url(:res/styles/lotro/button_long.png) 0 0 0 0 stretch stretch;
+	padding-bottom:2px;
+}

+ 2 - 0
styles/vintage/readme.css

@@ -0,0 +1,2 @@
+.title {color:#F7B754; font-size:14px; font:"Arial"; font-weight:bold;}
+p { margin-top:5px; font-size:12px; font:"Arial";}

+ 230 - 0
styles/vintage/skin.ini

@@ -0,0 +1,230 @@
+[mainWindow]
+width=800
+height=582
+left=0
+top=0
+
+[minimizeButton]
+width=18
+height=18
+left=725
+top=70
+
+[closeButton]
+width=18
+height=18
+left=750
+top=70
+
+[mainButton]
+width=150
+height=28
+left=595
+top=265
+
+[optButton]
+width=150
+height=28
+left=595
+top=308
+
+[newsButton]
+width=150
+height=28
+left=595
+top=351
+
+[helpButton]
+width=150
+height=28
+left=595
+top=394
+
+[aboutButton]
+width=150
+height=28
+left=595
+top=437
+
+[enterButton]
+width=180
+height=48
+left=580
+top=470
+
+[titleLabel]
+width=130
+height=30
+left=243
+top=177
+
+[hintLabel]
+width=290
+height=20
+left=60
+top=475
+
+[exthintLabel]
+width=430
+height=20
+left=60
+top=490
+
+[mainbox]
+width=450
+height=230
+left=80
+top=223
+
+[mainboxImage]
+width=130
+height=255
+left=430
+top=205
+
+[optbox]
+width=350
+height=240
+left=160
+top=220
+
+[optboxImage]
+width=100
+height=240
+left=50
+top=215
+
+[newsbox]
+width=430
+height=230
+left=40
+top=230
+
+[newsboxImage]
+width=100
+height=245
+left=445
+top=215
+
+[helpbox]
+width=400
+height=250
+left=140
+top=220
+
+[helpboxImage]
+width=120
+height=230
+left=30
+top=220
+
+[aboutbox]
+width=400
+height=240
+left=50
+top=220
+
+[aboutboxImage]
+width=75
+height=235
+left=460
+top=220
+
+[dialogHeader]
+width=400
+height=28
+left=0
+top=0
+
+[okButton]
+width=100
+height=35
+left=0
+top=0
+
+[cancelButton]
+width=100
+height=35
+left=0
+top=0
+
+[serversbox]
+width=800
+height=65
+left=21
+top=514
+
+[couponButton]
+width=150
+height=48
+left=593
+top=150
+
+[couponTitle]
+width=150
+height=18
+left=593
+top=150
+
+[footRed]
+width=550
+height=18
+left=140
+top=543
+
+[footYellow]
+width=570
+height=18
+left=123
+top=543
+
+[loader]
+width=57
+height=57
+left=480
+top=465
+
+[labelVersion]
+width=150
+height=24
+left=475
+top=146
+shadow=1
+shcolor=#111
+
+[goTitle]
+width=291
+height=20
+left=20
+top=125
+shadow=1
+shcolor=#999
+shblur=1
+shx=1
+shy=1
+
+[goOriginal]
+width=91
+height=91
+left=20
+top=31
+text=del
+
+[goLocal]
+width=91
+height=91
+left=120
+top=31
+text=del
+
+[goCancel]
+width=91
+height=91
+left=220
+top=31
+text=del
+
+[htmlColors]
+a=#F7B754
+h3=#F7B754
+p=#FFF

+ 248 - 0
styles/vintage/style.css

@@ -0,0 +1,248 @@
+QMainWindow {
+	background-color: transparent;
+	background-image: url(:/res/styles/vintage/bg.png);
+	min-width:800px;
+	min-height:582px;
+	
+}
+
+QLabel, QCheckBox {
+	color: #FFF;
+	font: 8pt "Arial";	
+}
+
+QGroupBox{
+	border:none;
+	font: 11pt "TrebushetMS";
+	font-weight:bold;
+}
+
+QGroupBox::title {
+	color: #F7B754;	
+}
+
+QTextBrowser {
+	border:none;
+}
+
+
+QPushButton {
+	border-image: url(:/res/styles/vintage/button2.png) 0 0 0 0 stretch stretch;
+	color: #EFE1AF;/*#F8E600*/
+	font: 12pt "Segoe Print";
+	padding:5px;
+}
+
+QPushButton:hover { color: #F9EA20; }
+QPushButton:pressed { background-color: transparent; }
+QPushButton:hover:!pressed{ border: 1px solid red; }
+ 
+QPushButton#enterButton { border-image: url(:/res/styles/vintage/enter.png) 0 0 0 0 stretch stretch; }  
+QPushButton#enterButton:hover { border-image: url(:/res/styles/vintage/enter_hover.png) 0 0 0 0 stretch stretch; } 
+ 
+QLabel#titleLabel {
+	color: #ECE7C4; /*#FBB540*/
+	font: 14pt "Segoe Script";
+	font-weight:bold;	 
+}
+ 
+ 
+QLabel#hintLabel{
+	color: #FBB540;
+	font: 11pt "TrebushetMS";
+	font-weight:bold;
+} 
+ 
+QLabel#hintLabel, QLabel#news1Title, QLabel#news2Title, QLabel#news3Title , QLabel#news4Title{
+	color: #F7B754;
+	font: 11pt "TrebushetMS";
+	font-weight:bold;
+	text-decoration:none;
+}
+
+QLabel#news1Image, QLabel#news2Image, QLabel#news3Image , QLabel#news4Image{
+	border-image: url(:/res/styles/vintage/plane.png);
+	padding:3px;
+}
+
+ QLabel#exthintLabel{
+	color: rgb(255, 255, 255);
+	font: 8pt "Arial";	 
+ }  
+ 
+ QLabel#textsTitle, QLabel#imagesTitle, QLabel#soundsTitle, QLabel#loadscreensTitle, QLabel#fontsTitle, QLabel#videosTitle{
+	color: #F7B754;
+	font: 11pt "TrebushetMS";
+	font-weight:bold;
+ }  
+ 
+QLabel#textsStatus, QLabel#imagesStatus, QLabel#soundsStatus, QLabel#loadscreensStatus, QLabel#fontsStatus, QLabel#videosStatus{
+	color: #FFF;
+	font: 10pt "TrebushetMS";
+}   
+ 
+QPushButton#lotropathButton{
+	font: 10pt "MS Shell Dlg 2";
+	color: rgb(255, 255, 255);
+	border-image: url(:/res/styles/vintage/folder.png);
+	
+} 
+
+QLabel#mainboxImage{ border-image: url(:/res/styles/vintage/gandalf.png); } 
+QLabel#optboxImage{ border-image: url(:/res/styles/vintage/boromir.png); }  
+QLabel#newsboxImage{ border-image: url(:/res/styles/vintage/saruman.png); }
+QLabel#helpboxImage{ border-image: url(:/res/styles/vintage/elrond.png); }  
+QLabel#aboutboxImage{ border-image: url(:/res/styles/vintage/eowin.png); }
+  
+
+QTextBrowser {
+	background:transparent;
+	color:#FFF;
+	font: 10pt "TrebushetMS";	
+}
+
+ QLabel#programmers, QLabel#designers, QLabel#translators, QLabel#helpers, QLabel#moderators{
+	color: #F7B754;
+	font: 11pt "TrebushetMS";
+	font-weight:bold;
+ } 
+
+QLabel#skinLabel{
+	color: #F7B754;
+	font: 11pt "TrebushetMS";
+	font-weight:bold;
+} 
+
+QPushButton#minimizeButton { border-image: url(:/res/styles/vintage/minimize.png) 0 0 0 0 stretch stretch; }
+QPushButton#closeButton { border-image: url(:/res/styles/vintage/close.png) 0 0 0 0 stretch stretch; }
+
+/*QMessageBox {
+	background:transparent;
+	border-image: url(:/res/styles/vintage/message.png);
+	color: #F7B754;
+	font: 11pt "TrebushetMS";
+	
+	
+}
+
+QMessageBox QLabel {
+    color: #FFF;font: 9pt "TrebushetMS";
+	background-color:rgba(0,0,0,0.4);
+	padding:7px;
+	margin-top:30px;
+}
+
+
+QMessageBox QPushButton {
+	border-image: url(:/res/styles/vintage/msgbutton.png);
+	min-width:50px;
+	max-height:24px;
+}*/
+
+QGroupBox#dialogbox{
+	background:rgba(0,0,0,0.4);
+}
+
+QGroupBox#dialog{
+	border-image: url(:/res/styles/vintage/start_window.png);
+}
+
+QGroupBox QLabel#dialogHeader{
+	border-image: url(:/res/styles/vintage/window_header_brown.png);
+	padding-left:7px;
+	color: #F2DA84;
+	font: 11pt "TrebushetMS";
+	font-weight:bold;
+	margin-left:5px;
+	margin-right:5px;
+	margin-top:3px;
+}
+
+QGroupBox QLabel#dialogImage{ margin:3px; }
+
+QGroupBox QLabel#dialogInfo{	
+	margin:7px;
+	padding:7px;
+	font: 10pt "TrebushetMS";
+	color:#333;
+	/*background-color:rgba(0,0,0,0.3)*/
+}
+
+QPushButton#okButton, QPushButton#cancelButton { margin-top:7px; }
+
+QLabel#Arkenstone, QLabel#Belegaer, QLabel#Brandywine, QLabel#Crickhollow, QLabel#Evernight, QLabel#Gladden, QLabel#Gwaihir,
+QLabel#Lamannia, QLabel#Landroval, QLabel#Laurelin, QLabel#Sirannon, QLabel#Bullroarer, QLabel#Crickhollow { 
+	border-image: url(:/res/styles/vintage/plane2.png);
+	background-color: #555555; /*#8A0808 #173B0B*/
+}
+
+QPushButton#couponButton{
+	font: 14pt "MS Shell Dlg 2";
+	color: #FFFFE6;
+	border-image: none;
+	background:transparent;
+	font-weight:bold;
+	
+} 
+
+QPushButton#couponButton:hover{ border:none; } 
+
+QLabel#couponTitle{	color: #FFFFE6;font-weight:bold;}
+QLabel#lotropathLabel{ border:#BFBFBF solid 1px;border-width: 1px; background-color:rgba(19,0,0,0.25); padding-left:2px; }
+QLabel#footRed{	color: red;font-weight:bold;}
+QLabel#footYellow{	color: #FFDC20;font-weight:bold;}
+QLabel#loader{ background:transparent;}
+
+QPushButton#enButton{ border-image: url(:/res/styles/vintage/flag_en.png) 0 0 0 0 stretch stretch;} 
+QPushButton#deButton{ border-image: url(:/res/styles/vintage/flag_de.png) 0 0 0 0 stretch stretch;}
+QPushButton#frButton{ border-image: url(:/res/styles/vintage/flag_fr.png) 0 0 0 0 stretch stretch;}
+QPushButton#enButton:disabled, QPushButton#deButton:disabled, QPushButton#frButton:disabled{border-width: 1px; background-color: rgba(255,255,255,0.4);} 
+
+
+QComboBox, QListView::item:selected{
+	color:#FFFFFF;
+	background-color:rgba(0,0,0,0.1);
+	padding:1px;
+	subcontrol-origin: padding;
+}
+
+QComboBox::drop-down{border-width:1px;}
+QComboBox::down-arrow{border-image:url(:/res/styles/vintage/downarrow.png);}
+QComboBox QAbstractItemView::item{ padding:5px; }
+
+QPushButton#goCancel{ border-image: url(:/res/styles/vintage/gocancel.png) 0 0 0 0 stretch stretch;}
+QPushButton#goLocal{ border-image: url(:/res/styles/vintage/gorur.png) 0 0 0 0 stretch stretch;}
+QPushButton#goEnButton{ border-image: url(:/res/styles/vintage/goenr.png) 0 0 0 0 stretch stretch;}
+QPushButton#goDeButton{ border-image: url(:/res/styles/vintage/goder.png) 0 0 0 0 stretch stretch;}
+QPushButton#goFrButton{ border-image: url(:/res/styles/vintage/gofrr.png) 0 0 0 0 stretch stretch;}
+
+QGroupBox#startbox{
+	background:rgba(0,0,0,0.4);
+}
+
+QGroupBox#startframe{
+	background:rgba(0,0,0,0.4);
+	border-image: url(:/res/styles/vintage/start_window.png) 0 0 0 0 stretch stretch;
+}
+
+QGroupBox#startframe QLabel#goTitle{
+	/*border-image: url(:/res/styles/vintage/header.png);*/
+	color: #4B2708;
+	font: 11pt "TrebushetMS";
+	font-weight:bold;
+}
+
+QGroupBox#startframe QLabel#goHeader{
+	border-image: url(:/res/styles/vintage/window_header_brown.png) 0 0 0 0 stretch stretch;
+	padding-left:7px;
+	color: #F2DA84;
+	font: 11pt "TrebushetMS";
+	font-weight:bold;
+	margin-left:5px;
+	margin-right:5px;
+	margin-top:3px;
+}
+
+QLabel#goHint{ color:#4B2708; }
+
+

+ 29 - 24
ui_mainwindow.h

@@ -151,7 +151,7 @@ public:
     {
         if (MainWindow->objectName().isEmpty())
             MainWindow->setObjectName(QStringLiteral("MainWindow"));
-        MainWindow->resize(448, 303);
+        MainWindow->resize(990, 986);
         MainWindow->setStyleSheet(QStringLiteral(""));
         centralWidget = new QWidget(MainWindow);
         centralWidget->setObjectName(QStringLiteral("centralWidget"));
@@ -213,22 +213,22 @@ public:
         videosTitle->setGeometry(QRect(10, 180, 111, 21));
         textsStatus = new QLabel(mainbox);
         textsStatus->setObjectName(QStringLiteral("textsStatus"));
-        textsStatus->setGeometry(QRect(230, 5, 241, 35));
+        textsStatus->setGeometry(QRect(210, 5, 131, 35));
         soundsStatus = new QLabel(mainbox);
         soundsStatus->setObjectName(QStringLiteral("soundsStatus"));
-        soundsStatus->setGeometry(QRect(230, 40, 221, 35));
+        soundsStatus->setGeometry(QRect(210, 40, 131, 35));
         imagesStatus = new QLabel(mainbox);
         imagesStatus->setObjectName(QStringLiteral("imagesStatus"));
-        imagesStatus->setGeometry(QRect(230, 75, 221, 35));
+        imagesStatus->setGeometry(QRect(210, 75, 131, 35));
         loadscreensStatus = new QLabel(mainbox);
         loadscreensStatus->setObjectName(QStringLiteral("loadscreensStatus"));
-        loadscreensStatus->setGeometry(QRect(230, 110, 231, 35));
+        loadscreensStatus->setGeometry(QRect(210, 110, 131, 35));
         fontsStatus = new QLabel(mainbox);
         fontsStatus->setObjectName(QStringLiteral("fontsStatus"));
-        fontsStatus->setGeometry(QRect(230, 145, 221, 35));
+        fontsStatus->setGeometry(QRect(210, 145, 131, 35));
         videosStatus = new QLabel(mainbox);
         videosStatus->setObjectName(QStringLiteral("videosStatus"));
-        videosStatus->setGeometry(QRect(230, 180, 221, 35));
+        videosStatus->setGeometry(QRect(210, 180, 121, 35));
         label_3 = new QLabel(mainbox);
         label_3->setObjectName(QStringLiteral("label_3"));
         label_3->setGeometry(QRect(10, 23, 221, 16));
@@ -326,10 +326,10 @@ public:
         checkVideos->setStyleSheet(QStringLiteral(""));
         checkMicro = new QCheckBox(patchsbox);
         checkMicro->setObjectName(QStringLiteral("checkMicro"));
-        checkMicro->setGeometry(QRect(10, 90, 301, 17));
+        checkMicro->setGeometry(QRect(10, 60, 321, 17));
         repairButton = new QPushButton(patchsbox);
         repairButton->setObjectName(QStringLiteral("repairButton"));
-        repairButton->setGeometry(QRect(10, 60, 321, 28));
+        repairButton->setGeometry(QRect(10, 80, 321, 28));
         repairButton->setCursor(QCursor(Qt::PointingHandCursor));
         skinSelect = new QComboBox(optbox);
         skinSelect->setObjectName(QStringLiteral("skinSelect"));
@@ -400,33 +400,38 @@ public:
         textBrowser->setGeometry(QRect(10, 0, 411, 221));
         aboutbox = new QGroupBox(centralWidget);
         aboutbox->setObjectName(QStringLiteral("aboutbox"));
-        aboutbox->setGeometry(QRect(430, 470, 461, 231));
+        aboutbox->setGeometry(QRect(430, 470, 441, 231));
+        aboutbox->setFlat(false);
         helperslist = new QLabel(aboutbox);
         helperslist->setObjectName(QStringLiteral("helperslist"));
-        helperslist->setGeometry(QRect(10, 201, 401, 31));
+        helperslist->setGeometry(QRect(10, 162, 371, 31));
+        helperslist->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter);
         helperslist->setWordWrap(true);
         designers = new QLabel(aboutbox);
         designers->setObjectName(QStringLiteral("designers"));
-        designers->setGeometry(QRect(10, 35, 361, 21));
+        designers->setGeometry(QRect(10, 40, 361, 21));
         translatorslist = new QLabel(aboutbox);
         translatorslist->setObjectName(QStringLiteral("translatorslist"));
-        translatorslist->setGeometry(QRect(10, 92, 400, 91));
+        translatorslist->setGeometry(QRect(10, 106, 371, 31));
+        translatorslist->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter);
         translatorslist->setWordWrap(true);
         programmerslist = new QLabel(aboutbox);
         programmerslist->setObjectName(QStringLiteral("programmerslist"));
-        programmerslist->setGeometry(QRect(10, 20, 401, 16));
+        programmerslist->setGeometry(QRect(10, 19, 361, 16));
+        programmerslist->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter);
         programmers = new QLabel(aboutbox);
         programmers->setObjectName(QStringLiteral("programmers"));
         programmers->setGeometry(QRect(10, 0, 361, 21));
         helpers = new QLabel(aboutbox);
         helpers->setObjectName(QStringLiteral("helpers"));
-        helpers->setGeometry(QRect(10, 181, 366, 21));
+        helpers->setGeometry(QRect(10, 145, 366, 21));
         designerslist = new QLabel(aboutbox);
         designerslist->setObjectName(QStringLiteral("designerslist"));
-        designerslist->setGeometry(QRect(10, 56, 401, 16));
+        designerslist->setGeometry(QRect(10, 59, 361, 16));
+        designerslist->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter);
         translators = new QLabel(aboutbox);
         translators->setObjectName(QStringLiteral("translators"));
-        translators->setGeometry(QRect(10, 73, 361, 21));
+        translators->setGeometry(QRect(10, 85, 361, 21));
         helpboxImage = new QLabel(centralWidget);
         helpboxImage->setObjectName(QStringLiteral("helpboxImage"));
         helpboxImage->setGeometry(QRect(20, 330, 47, 21));
@@ -644,11 +649,11 @@ public:
         loadscreensStatus->setText(QApplication::translate("MainWindow", "\320\236\321\200\320\270\320\263\320\270\320\275\320\260\320\273", Q_NULLPTR));
         fontsStatus->setText(QApplication::translate("MainWindow", "\320\236\321\200\320\270\320\263\320\270\320\275\320\260\320\273", Q_NULLPTR));
         videosStatus->setText(QApplication::translate("MainWindow", "\320\241\320\272\320\276\321\200\320\276 \320\277\320\276\321\217\320\262\320\270\321\202\321\201\321\217", Q_NULLPTR));
-        label_3->setText(QApplication::translate("MainWindow", "\320\237\320\265\321\200\320\265\320\262\320\276\320\264 \321\202\320\265\320\272\321\201\321\202\320\276\320\262 \320\276\321\202 \320\272\320\276\320\274\320\260\320\275\320\264\321\213 \320\235\320\260\321\201\320\273\320\265\320\264\320\270\321\217", Q_NULLPTR));
-        label->setText(QApplication::translate("MainWindow", "\320\240\321\203\321\201\321\201\320\272\320\270\320\265 \320\267\320\262\321\203\320\272\320\276\320\262\321\213\320\265 \321\204\320\260\320\271\320\273\321\213 \320\276\321\202 Mail.ru", Q_NULLPTR));
-        label_4->setText(QApplication::translate("MainWindow", "\320\240\321\203\321\201\321\201\320\272\320\270\320\265 \320\272\320\260\321\200\321\202\321\213 \320\276\321\202 \320\275\320\260\321\210\320\265\320\271 \320\272\320\276\320\274\320\260\320\275\320\264\321\213", Q_NULLPTR));
-        label_8->setText(QApplication::translate("MainWindow", "\320\235\320\260\321\210\320\260 \320\262\320\265\321\200\321\201\320\270\321\217 \320\267\320\260\321\201\321\202\320\260\320\262\320\276\321\207\320\275\321\213\321\205 \321\215\320\272\321\200\320\260\320\275\320\276\320\262", Q_NULLPTR));
-        label_6->setText(QApplication::translate("MainWindow", "\320\222\321\200\320\265\320\274\320\265\320\275\320\275\320\260\321\217 \320\262\320\265\321\200\321\201\320\270\321\217 \321\210\321\200\320\270\321\204\321\202\320\276\320\262 \320\264\320\273\321\217 U22", Q_NULLPTR));
+        label_3->setText(QApplication::translate("MainWindow", "\320\240\321\203\321\201\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217 \321\202\320\265\320\272\321\201\321\202\320\276\320\262", Q_NULLPTR));
+        label->setText(QApplication::translate("MainWindow", "\320\240\321\203\321\201\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217 \320\276\320\267\320\262\321\203\321\207\320\272\320\270", Q_NULLPTR));
+        label_4->setText(QApplication::translate("MainWindow", "\320\240\321\203\321\201\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217 \320\272\320\260\321\200\321\202", Q_NULLPTR));
+        label_8->setText(QApplication::translate("MainWindow", "\320\237\320\260\320\272\320\265\321\202 \320\267\320\260\320\263\321\200\321\203\320\267\320\276\321\207\320\275\321\213\321\205 \321\215\320\272\321\200\320\260\320\275\320\276\320\262", Q_NULLPTR));
+        label_6->setText(QApplication::translate("MainWindow", "\320\241\320\277\320\265\321\206\320\270\320\260\320\273\321\214\320\275\321\213\320\271 \320\277\320\260\320\272\320\265\321\202 \321\210\321\200\320\270\321\204\321\202\320\276\320\262", Q_NULLPTR));
         label_7->setText(QApplication::translate("MainWindow", "\320\237\320\260\320\272\320\265\321\202 \321\200\321\203\321\201\321\201\320\272\320\270\321\205 \320\262\320\270\320\264\320\265\320\276\321\200\320\276\320\273\320\270\320\272\320\276\320\262", Q_NULLPTR));
         optbox->setTitle(QString());
         lotrofolderbox->setTitle(QApplication::translate("MainWindow", "\320\236\321\201\320\275\320\276\320\262\320\275\321\213\320\265 \320\275\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270", Q_NULLPTR));
@@ -665,7 +670,7 @@ public:
         checkMaps->setText(QApplication::translate("MainWindow", "\320\232\320\260\321\200\321\202\321\213", Q_NULLPTR));
         checkScreens->setText(QApplication::translate("MainWindow", "\320\227\320\260\321\201\321\202\320\260\320\262\320\272\320\270", Q_NULLPTR));
         checkVideos->setText(QApplication::translate("MainWindow", "\320\222\320\270\320\264\320\265\320\276\321\200\320\276\320\273\320\270\320\272\320\270", Q_NULLPTR));
-        checkMicro->setText(QApplication::translate("MainWindow", "\320\227\320\260\320\263\321\200\321\203\320\266\320\260\321\202\321\214 \321\201\320\262\320\265\320\266\320\270\320\265 \320\276\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\321\217 \320\277\321\200\320\270 \320\272\320\260\320\266\320\264\320\276\320\274 \320\267\320\260\320\277\321\203\321\201\320\272\320\265", Q_NULLPTR));
+        checkMicro->setText(QApplication::translate("MainWindow", "\320\227\320\260\320\263\321\200\321\203\320\266\320\260\321\202\321\214 \320\274\320\270\320\272\321\200\320\276\320\276\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\321\217 \320\277\321\200\320\270 \320\272\320\260\320\266\320\264\320\276\320\274 \320\267\320\260\320\277\321\203\321\201\320\272\320\265", Q_NULLPTR));
         repairButton->setText(QApplication::translate("MainWindow", "\320\237\321\200\320\270\320\274\320\265\320\275\320\270\321\202\321\214 \320\277\320\260\321\202\321\207\320\270 \320\267\320\260\320\275\320\276\320\262\320\276", Q_NULLPTR));
         skinLabel->setText(QApplication::translate("MainWindow", "\320\242\320\265\320\274\320\260 \320\276\321\204\320\276\321\200\320\274\320\273\320\265\320\275\320\270\321\217", Q_NULLPTR));
         optboxImage->setText(QString());
@@ -693,7 +698,7 @@ public:
         programmers->setText(QApplication::translate("MainWindow", "\320\242\320\265\321\205\320\275\320\270\321\207\320\265\321\201\320\272\320\260\321\217 \320\270 \320\277\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\260\321\217 \321\207\320\260\321\201\321\202\321\214", Q_NULLPTR));
         helpers->setText(QApplication::translate("MainWindow", "\320\237\320\276\320\274\320\276\320\263\320\260\320\273\320\270 \321\201\320\273\320\276\320\262\320\276\320\274 \320\270 \320\264\320\265\320\273\320\276\320\274", Q_NULLPTR));
         designerslist->setText(QApplication::translate("MainWindow", "TextLabel", Q_NULLPTR));
-        translators->setText(QApplication::translate("MainWindow", "\320\237\321\200\320\270\320\275\320\270\320\274\320\260\320\273\320\270 \321\203\321\207\320\260\321\201\321\202\320\270\320\265 \320\262 \320\277\320\265\321\200\320\265\320\262\320\276\320\264\320\265", Q_NULLPTR));
+        translators->setText(QApplication::translate("MainWindow", "\320\237\321\200\320\270\320\275\320\270\320\274\320\260\321\216\321\202 \321\203\321\207\320\260\321\201\321\202\320\270\320\265 \320\262 \320\277\320\265\321\200\320\265\320\262\320\276\320\264\320\265:", Q_NULLPTR));
         helpboxImage->setText(QString());
         aboutboxImage->setText(QString());
         minimizeButton->setText(QString());