Procházet zdrojové kódy

refactor. Need to make correct responds and gameres uses

Ivan Arkhipov před 6 roky
rodič
revize
be4f0cfcd9
6 změnil soubory, kde provedl 226 přidání a 159 odebrání
  1. 2 1
      anetwork.cpp
  2. 27 40
      gameres.cpp
  3. 6 15
      gameres.h
  4. 5 2
      main.cpp
  5. 182 100
      mainwindow.cpp
  6. 4 1
      mainwindow.h

+ 2 - 1
anetwork.cpp

@@ -18,7 +18,8 @@
 
 #include <string>
 
-ANetwork::ANetwork() {}
+ANetwork::ANetwork() {
+}
 
 void ANetwork::getPatches() {
     QUrlQuery query;

+ 27 - 40
gameres.cpp

@@ -16,7 +16,7 @@ GameRes::GameRes() {}
 
 // Public functions
 
-void GameRes::openDatFile(int id) {
+int GameRes::openDatFile(int id) {
     QStringList dat_files;
     dat_files << AConfig::getInstance()->getValue("Local", "file")
               << "client_general.dat"
@@ -24,24 +24,20 @@ void GameRes::openDatFile(int id) {
               << "client_surface.dat"
               << "client_highres.dat";
 
-    if (dat_files[id] == nullptr) {
-        emit openDatFileFinished(-100); // -100 = incorrect id
-        return;
-    }
+    if (dat_files[id] == nullptr)
+        return -100; // -100 = incorrect id
+
 
     std::string filename = (AConfig::getInstance()->getValue("Local", "folder") + "/" + dat_files[id]).toStdString();
 
     qDebug("%s:%i: %s%s", __FILE__, __LINE__, "Инициализация dat-файла. Открываем файл ", filename.c_str());
     int dat_state = GameRes::getInstance()->datfiles_[id].InitDatFile(filename, 0);
     qDebug("%s:%i: %s%d", __FILE__, __LINE__, "Состояние dat-файла: ", dat_state);
-
-    emit openDatFileFinished(dat_state);
+    return dat_state;
 }
 
-void GameRes::closeDatFile(int id) {
-    int result = datfiles_[id].CloseDatFile();
-    emit closeDatFileFinished(result);
-    return;
+int GameRes::closeDatFile(int id) {
+    return datfiles_[id].CloseDatFile();
 }
 
 void GameRes::applyPatch(QString name) {
@@ -52,7 +48,7 @@ void GameRes::applyPatch(QString name) {
     QDir dir(QApplication::applicationDirPath() + "/data");
 
     if (!dir.exists()) {
-        emit applyAllFinished(-100); // -100 - not found data folder
+        //emit applyAllFinished(-100); // -100 - not found data folder
         return;
     }
 
@@ -77,8 +73,6 @@ void GameRes::applyPatch(QString name) {
         AConfig::getInstance()->setValue("Applied", name, paths.first());
         db_.CloseDatabase();
     }
-
-    emit applyPatchFinished(0);
 }
 
 void GameRes::setGameLocale(QString locale) {
@@ -92,7 +86,7 @@ void GameRes::setGameLocale(QString locale) {
     if(locale == "RU" && locale_ != PATCHED) {qDebug()<< "Current locale Original"; datfiles_[0].SetLocale(PATCHED); locale_ = PATCHED;}
     if(locale == "Original" && locale_ != ORIGINAL) {qDebug()<< "Current locale RU"; datfiles_[0].SetLocale(ORIGINAL); locale_ = ORIGINAL;}
     closeDatFile(0);
-    emit setGameLocaleFinished(0);
+    return;
 }
 
 void GameRes::saveAllDatFiles(){
@@ -101,7 +95,7 @@ void GameRes::saveAllDatFiles(){
     }
 }
 
-void GameRes::startGame() {
+int GameRes::startGame() {
     saveAllDatFiles();
 
     QStringList args;
@@ -118,21 +112,16 @@ void GameRes::startGame() {
         process.startDetached(f.fileName(), args);
         process.waitForFinished(-1);
         process.deleteLater();
-        emit startGameFinished(0);
         QApplication::quit();
+        return 0;
     } else {
         //QString text = "Запуск не удался";
         //QString info = "Не удалось запустить игру. Во время запуска произшла непредвиденная ошибка (возможно, не найден файл TurbineLauncher.exe в папке с игрой. Проверьте в 'Настройках', что у вас указан верный путь к игре, и повторите попытку запуска).";
         //app->helper->myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "", "", 400, 160, true, false);
-        emit startGameFinished(-100);
+        return -100;
     }
 }
 
-int GameRes::dateToTimestamp(QString customDateString, QString format) {
-    int timestamp = QDateTime::fromString(customDateString, format).toTime_t();
-    return timestamp;
-}
-
 void GameRes::installMicroPatch() {
     QString date = AConfig::getInstance()->getValue("Updates", "update");
 
@@ -149,7 +138,7 @@ void GameRes::installMicroPatch() {
 
 void GameRes::applyAll() {
     // Применяем патч с заставочными экранами
-    if(AConfig::getInstance()->getValue("Editor", "screens") == "true") {
+    if (AConfig::getInstance()->getValue("Editor", "screens") == "true") {
         applyLoadscreens();
     }
 
@@ -179,26 +168,19 @@ void GameRes::applyAll() {
 
     if(AConfig::getInstance()->getValue("Updates", "micro") == "true")
         installMicroPatch();
-
-    emit applyAllFinished(0);
 }
 
-void GameRes::checkDatFile() {
+int GameRes::checkDatFile() {
     openDatFile(0);
-    if(datfiles_[0].CheckIfUpdatedByGame()){
-        emit checkDatFileFinished(1);
-        return;
-    }
+    if(datfiles_[0].CheckIfUpdatedByGame())
+        return 1;
 
-    if(datfiles_[0].CheckIfNotPatched() && AConfig::getInstance()->getValue("Local", "runfirst") == "1"){
-        emit checkDatFileFinished(2);
-        return;
-    }
+    if(datfiles_[0].CheckIfNotPatched() && AConfig::getInstance()->getValue("Local", "runfirst") == "1")
+        return 2;
 
-    if(datfiles_[0].CheckIfPatchedByOldLauncher()){
-        emit checkDatFileFinished(3);
-        return;
-    }
+    if(datfiles_[0].CheckIfPatchedByOldLauncher())
+        return 3;
+    return 0;
 }
 
 QStringList GameRes::getLotroPath(){
@@ -269,7 +251,7 @@ void GameRes::applyMicroPatch(QString filename) {
 
     QDir dir("/data/micro");
     FileSystem::clearFolder(dir);
-    emit installMicroPatchFinished(0);
+    //emit installMicroPatchFinished(0);
 }
 
 void GameRes::applyLoadscreens() {
@@ -341,3 +323,8 @@ std::string GameRes::getDatPath(int id){
     //std::string file = (app->config->getValue("Local", "folder") + "/" + dats.at(id)).toStdString();
     return (AConfig::getInstance()->getValue("Local", "folder") + "/" + dats.at(id)).toStdString();
 }
+
+int GameRes::dateToTimestamp(QString customDateString, QString format) {
+    int timestamp = QDateTime::fromString(customDateString, format).toTime_t();
+    return timestamp;
+}

+ 6 - 15
gameres.h

@@ -20,15 +20,15 @@ public:
 
     // Basic public functions
 public slots:
-    void openDatFile(int id);               // Opens .dat file by its id (0-local_English.dat)
+    int openDatFile(int id);               // Opens .dat file by its id (0-local_English.dat)
 
-    void closeDatFile(int id);              // Closes .dat file by its id
+    int closeDatFile(int id);              // Closes .dat file by its id
 
     void applyPatch(QString name);          // Applies patch by its name (sounds/texts/images/videos/textures/loadscreens)
 
     void setGameLocale(QString locale);     // Sets locale by its name (Original/RU)
 
-    void startGame();                       // Starts detatched game application process
+    int startGame();                       // Starts detatched game application process
 
     void installMicroPatch();               // Installs latest micro-patch
 
@@ -36,23 +36,15 @@ public slots:
 
     bool isBusy() {return false;}                        // !!!!TO BE DONE Returns true if operations with game res are working now
 
-    void checkDatFile();                    // Checks and returns information if dat file is clear/updated
+    int checkDatFile();                    // Checks and returns information if dat file is clear/updated
 
     QStringList getLotroPath();             // Returns path to LotRO files
 
     void saveAllDatFiles();                 // Saves and closes all .dat files
 
-signals:
-    // Signals for every public function finish. Gives result int value.
-    void openDatFileFinished(int result);
-    void closeDatFileFinished(int result);
-    void applyPatchFinished(int result);
-    void setGameLocaleFinished(int result);
-    void startGameFinished(int result);
-    void installMicroPatchFinished(int result);
-    void applyAllFinished(int result);
-    void checkDatFileFinished(int result);
+    std::string getDatPath(int id);
 
+signals:
     // Signals for gui updating - describe process of patching.
     void startedPatching(QString patchname);
     void updatedPatchPercent(int percent);
@@ -64,7 +56,6 @@ private:
     void applyLoadscreens();
     bool isDatReady(); // Checks if file is ready to write data
 
-    std::string getDatPath(int id);
 
 private slots:
     void applyMicroPatch(QString filename);

+ 5 - 2
main.cpp

@@ -1,5 +1,7 @@
 #include "mainwindow.h"
 #include "skin.h"
+#include "filesystem.h"
+#include "aconfig.h"
 
 #include <QApplication>
 #include <QFile>
@@ -70,8 +72,8 @@ int main(int argc, char *argv[]){
         return 1;
     }
 
-    MainWindow::getInstance()->show();
-    MainWindow::getInstance()->setupWindow();
+    if(!FileSystem::fileExists(QApplication::applicationDirPath() + "/settings.ini"))
+        AConfig::getInstance()->saveConfig();
 
     QFile styleF;
     QString skin = Skin::getInstance()->getSkinName();
@@ -81,6 +83,7 @@ int main(int argc, char *argv[]){
 
     qApp->setStyleSheet(qssStr);
 
+    MainWindow::getInstance()->setupWindow();
     MainWindow::getInstance()->show();
 
     auto result = a.exec();

+ 182 - 100
mainwindow.cpp

@@ -13,22 +13,17 @@
 #include <QCloseEvent>
 #include <QClipboard>
 #include <QFileDialog>
+#include <QFuture>
+#include <QtConcurrent/QtConcurrent>
 
 MainWindow::MainWindow( QMainWindow* parent )
     : QMainWindow(parent, Qt::Window | Qt::FramelessWindowHint)
     , ui(new Ui::MainWindow)
     , dx(0)
-    , dy(0) {
-
-
-
-}
+    , dy(0) {}
 
 void MainWindow::setupWindow() {
     ui->setupUi(this);
-    if(!FileSystem::fileExists(QApplication::applicationDirPath() + "/settings.ini"))
-        AConfig::getInstance()->saveConfig();
-    loadConfig();
 
     QString skin = Skin::getInstance()->getSkinName();
     setWindowIcon(QIcon(":/res/styles/" + skin + "/icon6.png"));
@@ -38,6 +33,7 @@ void MainWindow::setupWindow() {
     setWindowTitle("ВКО: Наследие");
 
     // Проводим подготовку к запуску
+    loadConfig();
     Skin::getInstance()->loadSkin();
     loadNews();
 
@@ -48,7 +44,6 @@ void MainWindow::setupWindow() {
     loadHelp();
     setAbout();
     Skin::getInstance()->findSkins();
-    //app->helper->setPatchsDates();
 
     qInfo("%s:%i: %s", __FILE__, __LINE__, "Оформляем главное окно.");
     QPixmap maskPix(":/res/styles/" + skin + "/bg.png");
@@ -63,7 +58,42 @@ void MainWindow::setupWindow() {
     movie->setScaledSize(QSize(ui->loader->width(), ui->loader->height()));
     movie->start();
 
+    hideAll();
+    checkTab("mainbox");
+
     connect(ui->skinSelect, SIGNAL(currentIndexChanged(int)), this, SLOT(saveSkin()));
+
+    // Если это первый запуск то показываем мастер
+    if(AConfig::getInstance()->getValue("Local", "runfirst") == "-1"){
+        qInfo("%s:%i: %s", __FILE__, __LINE__, "Показываем мастер начальных настроек.");
+        setState("runfirst");
+    } else {
+        setState("free");
+    }
+
+    QFuture<void> future = QtConcurrent::run([=]() {
+        setState("busy");
+        // Проверяем файл локализации в отдельном потоке.
+        int result = GameRes::getInstance()->checkDatFile();
+
+        if (result == 2) {
+            QString text = "Файлы локализации отсутствуют";
+            QString info = "Текущий файл локализации не содержит патчей. Возможно это первый запуск «Наследия» с данным игровым клиентом, или клиент был обновлён игровым лаунчером. Применить выбранные патчи в данному файлу?";
+            myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "applypaths", "", 420, 200, true, true);
+        }
+
+        if (result == 3) {
+            QString text = "Файлы локализации не являются оригинальными";
+            QString info = "Внимание! Присутствующие в вашем игровом клиенте файлы локализации не являются оригинальными, поскольку были модифицированы другой программой.<br/><strong>Мы настоятельно рекомендуем перекачать оригинальные версии файлов, поскольку правильная работа Наследия с данными файлами не гарантируется!</strong>";
+            myDialogBox(text, info, "Перекачать", "Не надо", "gandalf.png", "loaddatfile", "", 550, 200, true, true);
+        }
+
+        setState("free");
+        // Если приготовления выполнены загружаем патчи
+        if(state_ == "free"){
+            ANetwork::getInstance()->getPatches();
+        }
+    });
 }
 
 void MainWindow::addComboItem(QComboBox* combo, QString itemName, QIcon* icon){
@@ -204,7 +234,7 @@ void MainWindow::applyShadow(QWidget * obj, QString color, int blur, int offset_
 }
 
 void MainWindow::closeEvent(QCloseEvent *e) {
-    if (state == "busy") e->ignore();
+    if (state_ == "busy") e->ignore();
 }
 
 void MainWindow::mouseMoveEvent( QMouseEvent* e ) {
@@ -246,7 +276,7 @@ void MainWindow::minimize() {
 }
 
 bool MainWindow::eventFilter(QObject *obj, QEvent *event){
-    if(state == "busy") return false;
+    if(state_ == "busy") return false;
 
     if(obj->objectName() == "mainButton"){
         this->ui->hintLabel->setText("Применение патчей");
@@ -282,7 +312,7 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event){
 void MainWindow::on_mainButton_clicked(){
     checkTab("mainbox");
     ui->titleLabel->setText("Патчи");
-    if(state != "busy") ANetwork::getInstance()->getPatches();
+    if(state_ != "busy") ANetwork::getInstance()->getPatches();
 }
 
 void MainWindow::on_optButton_clicked(){
@@ -437,99 +467,92 @@ void MainWindow::on_repairButton_clicked(){
 }
 
 void MainWindow::on_okButton_clicked(){
-    //QStringList commands = app->helper->dialog_ok_answer.split(" ");
-//    foreach(QString command, commands){
-//        if(command == "close"){
-//            ui->dialogbox->hide();
-//        }
-
-//        if(command == "gamefind"){
-//            QStringList folders = app->config->getLotroPath();
-//            if(folders.count() > 1){
-//                QString text = "Результаты поиска";
-//                QString info = "Найдены следующие папки в которых установлена игра:<br/><br/><br/><br/><br/>Выберите нужную папку и нажмите «Далее»<br/>";
-//                app->helper->myDialogBox(text, info, "Далее", "Отмена", "gandalf.png", "writefolder", "", 530, 200, true, false);
-//                ui->dialogList->setGeometry(QRect(
-//                    ui->dialogImage->rect().right() + 10,
-//                    ui->dialogHeader->rect().bottom()+40, 417, 50));
-
-//                foreach(QString f, folders) new QListWidgetItem(f, ui->dialogList);
-//                ui->dialogList->show();
-
-//            } else {
-//                if(folders.count() == 1){
-//                    ui->lotropathLabel->setText(folders.first());
-//                    app->config->setValue("Local", "folder", folders.first());
-//                    this->ui->dialogbox->hide();
-//                    QString text = "Завершающий этап";
-//                    QString info = "Необходимые приготовления завершены. Сейчас вы будете перенаправлены в раздел «Настройки», где сможете выбрать патчи, которые хотите установить. После этого перейдите в раздел «Патчи» для начала их загрузки и применения.";
-//                    app->helper->myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "close gotooptions", "",400, 200, true, false);
-//                } else {
-//                    QString text = "Завершающий этап";
-//                    QString info = "Обнаружить каталог игры автоматически не удалось. Сейчас вы будете перенаправлены в раздел «Настройки», где сможете вручную выбрать каталог игры и патчи, которые хотите установить. После этого перейдите в раздел «Патчи» для начала их загрузки и применения.";
-//                    app->helper->myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "close gotooptions", "",450, 200, true, false);
-//                }
-
-//            }
-
-//            qDebug() << folders;
-//        }
-
-//        if(command == "writefolder"){
-//            if(ui->dialogList->currentItem()){
-//                QString path = ui->dialogList->currentItem()->text();qDebug() << path;
-//                ui->lotropathLabel->setText(path);
-//                app->config->setValue("Local", "folder", path);
-//                ui->dialogList->clear();
-//                ui->dialogList->hide();
-//                this->ui->dialogbox->hide();
-//                QString text = "Завершающий этап";
-//                QString info = "Необходимые приготовления завершены. Сейчас вы будете перенаправлены в раздел «Настройки», где сможете выбрать патчи, которые хотите установить. После этого перейдите в раздел «Патчи» для начала их загрузки и применения.";
-//                app->helper->myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "close gotooptions", "",400, 200, true, false);
-
-//            } else {
-//                break;
-//            }
-
-//        }
-
-//        if(command == "gotooptions"){
-//            app->helper->checkTab("optbox");
-//            app->config->setValue("Local", "runfirst", "1");
-//            app->helper->setState("free");
-//        }
-
-//        if(command == "applypaths"){
-//            app->ready = true;
-//            app->config->deleteSection("Applied");
-//            app->network->getPaths();
-//            app->helper->checkTab("mainbox");
-//        }
-
-//        if(command == "loaddatfile"){
-//            app->config->deleteSection("Applied");
-//            QString filename = app->config->getDatPath(0);
-//            qInfo("%s:%i: %s%s", __FILE__, __LINE__, "Удаляем файл: ", app->helper->stringToChar(filename));
-//            app->helper->closeDatFile(0);
-//            if(QFile::remove(filename)){
-//                app->helper->startGame();
-//                qApp->exit();
-//            }
-
-//        }
-//    }
+    QStringList commands = dialog_ok_answer.split(" ");
+    foreach(QString command, commands){
+        if(command == "close"){
+            ui->dialogbox->hide();
+        }
 
+        if(command == "gamefind"){
+            QStringList folders = GameRes::getInstance()->getLotroPath();
+            if(folders.count() > 1){
+                QString text = "Результаты поиска";
+                QString info = "Найдены следующие папки в которых установлена игра:<br/><br/><br/><br/><br/>Выберите нужную папку и нажмите «Далее»<br/>";
+                myDialogBox(text, info, "Далее", "Отмена", "gandalf.png", "writefolder", "", 530, 200, true, false);
+                ui->dialogList->setGeometry(QRect(
+                    ui->dialogImage->rect().right() + 10,
+                    ui->dialogHeader->rect().bottom()+40, 417, 50));
 
+                foreach(QString f, folders) new QListWidgetItem(f, ui->dialogList);
+                ui->dialogList->show();
+
+            } else {
+                if(folders.count() == 1){
+                    ui->lotropathLabel->setText(folders.first());
+                    AConfig::getInstance()->setValue("Local", "folder", folders.first());
+                    this->ui->dialogbox->hide();
+                    QString text = "Завершающий этап";
+                    QString info = "Необходимые приготовления завершены. Сейчас вы будете перенаправлены в раздел «Настройки», где сможете выбрать патчи, которые хотите установить. После этого перейдите в раздел «Патчи» для начала их загрузки и применения.";
+                    myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "close gotooptions", "",400, 200, true, false);
+                } else {
+                    QString text = "Завершающий этап";
+                    QString info = "Обнаружить каталог игры автоматически не удалось. Сейчас вы будете перенаправлены в раздел «Настройки», где сможете вручную выбрать каталог игры и патчи, которые хотите установить. После этого перейдите в раздел «Патчи» для начала их загрузки и применения.";
+                    myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "close gotooptions", "",450, 200, true, false);
+                }
+            }
+            qDebug() << folders;
+        }
+
+        if(command == "writefolder"){
+            if(ui->dialogList->currentItem()){
+                QString path = ui->dialogList->currentItem()->text();qDebug() << path;
+                ui->lotropathLabel->setText(path);
+                AConfig::getInstance()->setValue("Local", "folder", path);
+                ui->dialogList->clear();
+                ui->dialogList->hide();
+                this->ui->dialogbox->hide();
+                QString text = "Завершающий этап";
+                QString info = "Необходимые приготовления завершены. Сейчас вы будете перенаправлены в раздел «Настройки», где сможете выбрать патчи, которые хотите установить. После этого перейдите в раздел «Патчи» для начала их загрузки и применения.";
+                myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "close gotooptions", "",400, 200, true, false);
+            } else {
+                break;
+            }
+
+        }
+
+        if(command == "gotooptions"){
+            checkTab("optbox");
+            AConfig::getInstance()->setValue("Local", "runfirst", "1");
+            setState("free");
+        }
+
+        if(command == "applypaths"){
+            ready = true;
+            AConfig::getInstance()->deleteSection("Applied");
+            ANetwork::getInstance()->getPatches();
+            checkTab("mainbox");
+        }
+
+        if(command == "loaddatfile"){
+            AConfig::getInstance()->deleteSection("Applied");
+            QString filename = GameRes::getInstance()->getDatPath(0).c_str();
+            qInfo("%s:%i: %s%s", __FILE__, __LINE__, "Удаляем файл: ", filename.toStdString().c_str());
+            GameRes::getInstance()->closeDatFile(0);
+            if(QFile::remove(filename)){
+                GameRes::getInstance()->startGame();
+                qApp->exit();
+            }
+        }
+    }
 }
 
 void MainWindow::on_cancelButton_clicked(){
-//    QStringList commands = app->helper->dialog_cancel_answer.split(" ");
-//    foreach(QString command, commands){
-//        if(command == "close") this->ui->dialogbox->hide();
-//    }
+    QStringList commands = dialog_cancel_answer.split(" ");
+    foreach(QString command, commands){
+        if(command == "close") this->ui->dialogbox->hide();
+    }
 }
 
-
 void MainWindow::checkTab(QString tabname){
     QList<QGroupBox *> boxes = findChildren<QGroupBox *> ();
     foreach (QGroupBox * box, boxes){
@@ -551,9 +574,9 @@ void MainWindow::myDialogBox(QString text, QString info, QString okText, QString
                         int w, int h, bool textshadow = false, bool is_cancel = false){
 
     if(okAnswer == "") okAnswer = "close";
-    //app->helper->dialog_ok_answer = okAnswer;
+    dialog_ok_answer = okAnswer;
     if(cancelAnswer == "") cancelAnswer = "close";
-    //app->helper->dialog_cancel_answer = cancelAnswer;
+    dialog_cancel_answer = cancelAnswer;
 
     ui->okButton->setText(okText);
     ui->cancelButton->setText(cancelText);
@@ -633,3 +656,62 @@ void MainWindow::setAbout(){
     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");
     ui->helperslist->setText("Menelhad, Мурзилка, Pastor, Alvees, Mirta, иван петров, vensys, Arkelas, Чеширская Улыбка, Shanishka70 ");
 }
+
+void MainWindow::setState(QString state){
+    if (state == "busy"){
+        ui->closeButton->setEnabled(false);
+        ui->enterButton->setEnabled(false);
+        ui->lotropathButton->setEnabled(false);
+        ui->repairButton->setEnabled(false);
+        state_ = "busy";
+        ui->loader->show();
+    }
+
+    if(state == "free"){
+        ui->closeButton->setEnabled(true);
+        ui->enterButton->setEnabled(true);
+        ui->lotropathButton->setEnabled(true);
+        ui->repairButton->setEnabled(true);
+        state_ = "free";
+        ui->loader->hide();
+    }
+
+    if(state == "nofolder"){
+        ui->enterButton->setEnabled(false);
+        state_ = "nofolder";
+        ui->loader->hide();
+    }
+
+    if(state == "runfirst"){
+        ui->enterButton->setEnabled(false);
+        ui->repairButton->setEnabled(false);
+        state_ = "runfirst";
+        ui->loader->hide();
+        QString info = "Вы запускаете программу русификации LotRO впервые. Мастер установки поможет вам настроить программу для ее дальнейшего использования. Сейчас будет осуществлена попытка автоматически определить каталог с игрой. Для продолжения нажмите «Далее».";
+        myDialogBox("Добро пожаловать!", info, "Далее", "Отмена", "gandalf.png", "close gamefind", "", 400, 200, true, false);
+    }
+}
+
+void MainWindow::hideAll() {
+        qInfo("%s:%i: %s", __FILE__, __LINE__, "Прячем ненужные элементы.");
+        ui->optbox->hide();
+        ui->optboxImage->hide();
+        ui->newsbox->hide();
+        ui->newsboxImage->hide();
+        ui->helpbox->hide();
+        ui->helpboxImage->hide();
+        ui->aboutbox->hide();
+        ui->aboutboxImage->hide();
+        ui->dialogbox->hide();
+        ui->loader->hide();
+        ui->dialogList->hide();
+        ui->startbox->hide();
+        qInfo("%s:%i: %s", __FILE__, __LINE__, "Устанавливаем всплывающие подсказки.");
+        ui->goOriginal->setToolTip("Запуск оригинальной версии игры");
+        ui->goLocal->setToolTip("Запуск русской версии игры");
+        ui->goCancel->setToolTip("Вернуться обратно");
+        ui->goProgress->hide();
+        ui->goHint->hide();
+        ui->footRed->hide();
+        ui->footYellow->hide();
+}

+ 4 - 1
mainwindow.h

@@ -95,8 +95,11 @@ private:
     QString exthint = "";
     int dx;
     int dy;
-    QString state;
+    QString state_;
     QString app_folder;
+    QString dialog_ok_answer;
+    QString dialog_cancel_answer;
+    bool ready;
 };
 
 #endif // MainWindow_H