#include "mainwindow.h" #include "filesystem.h" #include "aconfig.h" #include "anetwork.h" #include "gameres.h" #include "downloadmanager.h" #include "skin.h" #include #include #include #include #include #include #include #include MainWindow::MainWindow( QMainWindow* parent ) : QMainWindow(parent, Qt::Window | Qt::FramelessWindowHint) , ui(new Ui::MainWindow) , dx(0) , dy(0) {} void MainWindow::setupWindow() { ui->setupUi(this); QString skin = Skin::getInstance()->getSkinName(); setWindowIcon(QIcon(":/res/styles/" + skin + "/icon6.png")); QCoreApplication::setOrganizationName(ORGANIZATION_NAME); QCoreApplication::setOrganizationDomain(ORGANIZATION_DOMAIN); QCoreApplication::setApplicationName(APPLICATION_NAME); setWindowTitle("ВКО: Наследие"); // Проводим подготовку к запуску loadConfig(); Skin::getInstance()->loadSkin(); loadNews(); ANetwork::getInstance()->getFootMessage(); ANetwork::getInstance()->getServers(); ANetwork::getInstance()->getCoupon(); loadHelp(); setAbout(); Skin::getInstance()->findSkins(); qInfo("%s:%i: %s", __FILE__, __LINE__, "Оформляем главное окно."); QPixmap maskPix(":/res/styles/" + skin + "/bg.png"); QPixmap maskPixLocal(QApplication::applicationDirPath() + " /styles/" + skin + "/bg.png"); maskPix = maskPix.isNull() ? maskPixLocal : maskPix; this->setMask(maskPix.mask()); qInfo("%s:%i: %s", __FILE__, __LINE__, "Устанавливаем анимации."); QMovie * movie = new QMovie(":/res/styles/" + skin + "/loader.gif"); ui->loader->setMovie(movie); 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 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 = "Внимание! Присутствующие в вашем игровом клиенте файлы локализации не являются оригинальными, поскольку были модифицированы другой программой.
Мы настоятельно рекомендуем перекачать оригинальные версии файлов, поскольку правильная работа Наследия с данными файлами не гарантируется!"; 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){ combo->insertItem(0, itemName); combo->setItemIcon(0, *icon); } void MainWindow::saveLocale(int locale, QPushButton * button){ QString file; if(locale == 0) file = "client_local_English.dat"; if(locale == 1) file = "client_local_DE.dat"; if(locale == 2) file = "client_local_FR.dat"; if(FileSystem::fileExists(AConfig::getInstance()->getValue("Local", "folder") + "/" + file)){ ui->enButton->setEnabled(true); ui->deButton->setEnabled(true); ui->frButton->setEnabled(true); button->setEnabled(false); AConfig::getInstance()->setValue("Local", "file", file); } else { QString text = "Данная локализация отсутствует"; QString info = "В настоящий момент вы не можете выбрать данную опцию, поскольку файл " + file + " отсутствует в вашем игровом клиенте. Чтобы скачать его, запустите официальный лаунчер, выберите желаемый язык в верхней правой части окна и дождитесь, когда загрузка необходимых файлов завершится."; myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "", "", 400, 220, true, false); } } void MainWindow::loadConfig() { qInfo("%s:%i: %s", __FILE__, __LINE__, "Находим каталог с игрой"); ui->lotropathLabel->setText(AConfig::getInstance()->getValue("Local", "folder") != "-1" ? AConfig::getInstance()->getValue("Local", "folder") : "Выберите папку с игрой"); qInfo("%s:%i: %s", __FILE__, __LINE__, "Проверяем активность патча \"Шрифты\""); ui->checkFonts->setChecked(AConfig::getInstance()->getValue("Editor", "fonts") == "true" ? true : false); qInfo("%s:%i: %s", __FILE__, __LINE__, "Проверяем активность патча \"Тексты\""); ui->checkTexts->setChecked(AConfig::getInstance()->getValue("Editor", "texts")== "true" ? true : false); qInfo("%s:%i: %s", __FILE__, __LINE__, "Проверяем активность патча \"Карты\""); ui->checkMaps->setChecked(AConfig::getInstance()->getValue("Editor", "images") == "true" ? true : false); qInfo("%s:%i: %s", __FILE__, __LINE__, "Проверяем активность патча \"Звуки\""); ui->checkSounds->setChecked(AConfig::getInstance()->getValue("Editor", "sounds")== "true" ? true : false); ui->checkVideos->setChecked(AConfig::getInstance()->getValue("Editor", "videos") == "true" ? true : false); qInfo("%s:%i: %s", __FILE__, __LINE__, "Проверяем активность патча \"Заставки\""); ui->checkScreens->setChecked(AConfig::getInstance()->getValue("Editor", "screens")== "true" ? true : false); qInfo("%s:%i: %s", __FILE__, __LINE__, "Проверяем активность микрообновлений"); ui->checkMicro->setChecked(AConfig::getInstance()->getValue("Updates", "micro")== "true" ? true : false); qInfo("%s:%i: %s", __FILE__, __LINE__, "Выполнено."); } void MainWindow::loadNews(){ qInfo("Загружаем новости"); qInfo("%s:%i: %s", __FILE__, __LINE__, "Загрузка новостей с сайта"); QString response = ANetwork::getInstance()->query(AConfig::getInstance()->getValue("Network", "news")); if (response == "error"){ qInfo("%s:%i: %s", __FILE__, __LINE__, "Отсутствует связь с сервером. Прервано."); return; } QStringList data = response.split(":::"); qInfo("%s:%i: %s%s", __FILE__, __LINE__, "Получено новостей - ", QString::number(data.count()).toStdString().c_str()); int counter = 1; foreach(QString news, data){ qInfo("%s:%i: %s%s", __FILE__, __LINE__, "Начинаем размещение новости №", QString::number(counter).toStdString().c_str()); QStringList item = news.split("|"); QLabel* image = ui->newsbox->findChild("news" + QString::number(counter) + "Image"); QLabel* title = ui->newsbox->findChild("news" + QString::number(counter) + "Title"); QLabel* teaser = ui->newsbox->findChild("news" + QString::number(counter) + "Teaser"); qInfo("%s:%i: %s", __FILE__, __LINE__, "Устанавливаем миниатюру новости"); QByteArray bytes = ANetwork::getInstance()->query_binary(item[0]); QImage img(36, 36, QImage::Format_Indexed8); img.loadFromData(bytes); QString skin = Skin::getInstance()->getSkinName(); if(img.bits() == nullptr){ qInfo("%s:%i: %s", __FILE__, __LINE__, "Миниатюра не найдена, устанавливаем заглушку"); img.load(":/res/styles/" + skin + "/nophoto.jpg"); } image->setPixmap(QPixmap::fromImage(img)); qInfo("%s:%i: %s", __FILE__, __LINE__, "Применяем HTML-цвета"); QString hrefcolor = htmlColors.contains("a") ? htmlColors.lowerBound("a").value() : "blue"; QString html = "" + item[1] + ""; qInfo("%s:%i: %s", __FILE__, __LINE__, "Размещаем тексты"); title->setText(html); teaser->setText(item[2]); counter = counter + 1; } qInfo("%s:%i: %s", __FILE__, __LINE__, "Выполнено."); } void MainWindow::loadHelp(){ qInfo("Создание справки"); QFile file(QApplication::applicationDirPath() + "/readme.html"); if(file.open(QFile::ReadOnly | QFile::Text)){ qInfo("%s:%i: %s", __FILE__, __LINE__, "Справка загружена. Устанавливаем HTML-цвета и выводим."); ui->textBrowser->setHtml(""); QString content = file.readAll(); stylehtml = ""; ui->textBrowser->setHtml(stylehtml + content); ui->textBrowser->document()->setDefaultStyleSheet(styleF.readAll()); qInfo("%s:%i: %s", __FILE__, __LINE__, "Выполнено."); } else { qWarning("%s:%i: %s", __FILE__, __LINE__, "Не удалось получить информацию с сервера"); qInfo("%s:%i: %s", __FILE__, __LINE__, "Выполнено."); } } MainWindow::~MainWindow() { delete ui; } void MainWindow::applyShadow(QWidget * obj, QString color, int blur, int offset_x, int offset_y){ QGraphicsDropShadowEffect *pLabelTextShadowEffect = new QGraphicsDropShadowEffect(obj); pLabelTextShadowEffect->setColor(QColor(color)); pLabelTextShadowEffect->setBlurRadius(blur); pLabelTextShadowEffect->setOffset(offset_x, offset_y); obj->setGraphicsEffect(pLabelTextShadowEffect); } void MainWindow::closeEvent(QCloseEvent *e) { if (state_ == "busy") e->ignore(); } void MainWindow::mouseMoveEvent( QMouseEvent* e ) { if( e->buttons() | Qt::LeftButton ) { QPoint pt=mapFromGlobal(QCursor::pos()); QWidget* child=childAt(pt); if (child == 0) { setGeometry(pos().x() + ( e->x() - dx ), pos().y() + ( e->y() - dy ), width(), height()); return; } QString cname = child->metaObject()->className(); if (cname != "QPushButton" && cname != "QComboBox"){ // отключаем перетягивание при наведение на активные элементы setGeometry(pos().x() + ( e->x() - dx ), pos().y() + ( e->y() - dy ), width(), height()); } else { dx = e->x(); dy = e->y(); } } } void MainWindow::mousePressEvent( QMouseEvent* e ) { if( e->button() == Qt::LeftButton ) { dx = e->x(); dy = e->y(); setCursor( Qt::OpenHandCursor ); } } void MainWindow::mouseReleaseEvent( QMouseEvent* e ) { if( e->button() == Qt::LeftButton ) { setCursor( Qt::ArrowCursor ); dx = e->x(); dy = e->y(); } } void MainWindow::minimize() { setWindowState(Qt::WindowMinimized); } bool MainWindow::eventFilter(QObject *obj, QEvent *event){ if(state_ == "busy") return false; if(obj->objectName() == "mainButton"){ this->ui->hintLabel->setText("Применение патчей"); this->ui->exthintLabel->setText("На данной странице показан список патчей и прогресс их применения"); } if(obj->objectName() == "optButton"){ this->ui->hintLabel->setText("Настройки лаунчера"); this->ui->exthintLabel->setText("Управление параметрами применения патчей и запуском игры"); } if(obj->objectName() == "newsButton"){ this->ui->hintLabel->setText("Новости проекта"); this->ui->exthintLabel->setText("Актуальная информация из нашего цеха русификации LotRO"); } if(obj->objectName() == "helpButton"){ this->ui->hintLabel->setText("Справочная информация"); this->ui->exthintLabel->setText("Полезная информация о программе русификации, настройках и использовании"); } if(obj->objectName() == "aboutButton"){ this->ui->hintLabel->setText("О нас"); this->ui->exthintLabel->setText("Информация о разработчиках, переводчиках и других хороших людях"); } if(obj->objectName() == "enterButton"){ this->ui->hintLabel->setText("Запуск игры"); this->ui->exthintLabel->setText("Создание портала в мир Средиземья"); } if(obj->objectName() == "couponButton"){ this->ui->hintLabel->setText("Купон скидки"); this->ui->exthintLabel->setText("Нажмите, чтобы скопировать код купона в буфер обмена"); } return false; } void MainWindow::on_mainButton_clicked(){ checkTab("mainbox"); ui->titleLabel->setText("Патчи"); if(state_ != "busy") ANetwork::getInstance()->getPatches(); } void MainWindow::on_optButton_clicked(){ checkTab("optbox"); ui->titleLabel->setText("Настройки"); } void MainWindow::on_newsButton_clicked(){ checkTab("newsbox"); ui->titleLabel->setText("Новости"); } void MainWindow::on_helpButton_clicked(){ checkTab("helpbox"); ui->titleLabel->setText("Справка"); } void MainWindow::on_aboutButton_clicked(){ checkTab("aboutbox"); ui->titleLabel->setText("О нас"); } void MainWindow::on_enterButton_clicked(){ ui->startbox->setGeometry(0, 0, width(), height()); QSettings settings(Skin::getInstance()->getSkinFile(), QSettings::IniFormat); settings.beginGroup("mainWindow"); int left = (settings.value("width").toInt() - ui->startframe->width())/2; int top = (settings.value("height").toInt() - ui->startframe->height())/2; ui->startframe->setGeometry(QRect(left, top, ui->startframe->width(), ui->startframe->height())); settings.endGroup(); QString file = AConfig::getInstance()->getValue("Local", "file"); if (file == "client_local_English.dat") file = "goenr.png"; if (file == "client_local_DE.dat") file = "goderr.png"; if (file == "client_local_FR.dat") file = "gofrr.png"; QString skin = Skin::getInstance()->getSkinName(); QString bname = ":/res/styles/" + skin + "/" + file; QPixmap isset(bname); bname = isset.isNull() ? app_folder + "styles/" + skin + "/" + file : bname; ui->goOriginal->setStyleSheet("QPushButton#goOriginal { border-image: url(" + bname + ") 0 0 0 0 stretch stretch;}"); ui->startbox->show(); } void MainWindow::on_goCancel_clicked(){ ui->startbox->hide(); } void MainWindow::on_goOriginal_clicked(){ ui->goProgress->show(); GameRes::getInstance()->setGameLocale("Original"); //connect(GameRes::getInstance(), SIGNAL(GameRes::getInstance()->setGameLocaleFinished()), GameRes::getInstance(), SLOT(GameRes::getInstance()->startGame())); } void MainWindow::on_goLocal_clicked(){ ui->goProgress->show(); GameRes::getInstance()->setGameLocale("RU"); //connect(GameRes::getInstance(), SIGNAL(GameRes::getInstance()->setGameLocaleFinished()), GameRes::getInstance(), SLOT(GameRes::getInstance()->startGame())); } void MainWindow::on_minimizeButton_clicked(){ setWindowState(Qt::WindowMinimized); } void MainWindow::on_closeButton_clicked(){ this->close(); } void MainWindow::on_couponButton_clicked(){ QApplication::clipboard()->setText(ui->couponButton->text()); ui->exthintLabel->setText("Код скопирован."); } void MainWindow::on_enButton_clicked(){ saveLocale(0, ui->enButton); AConfig::getInstance()->setValue("Local", "lang", "en"); } void MainWindow::on_deButton_clicked(){ saveLocale(1, this->ui->deButton); AConfig::getInstance()->setValue("Local", "lang", "de"); } void MainWindow::on_frButton_clicked(){ saveLocale(2, this->ui->frButton); AConfig::getInstance()->setValue("Local", "lang", "fr"); } void MainWindow::saveSkin(){ QString new_theme = ui->skinSelect->currentText(); if(Skin::getInstance()->getSkinName() != new_theme){ AConfig::getInstance()->setValue("Global", "current_theme", new_theme); Skin::getInstance()->replaceSkin(new_theme); } } void MainWindow::on_checkFonts_stateChanged(int arg1){ AConfig::getInstance()->setValue("Editor", "fonts", arg1 ? "true" : "false"); } void MainWindow::on_checkTexts_stateChanged(int arg1){ AConfig::getInstance()->setValue("Editor", "texts", arg1 ? "true" : "false");; DownloadManager::getInstance()->abortDownload("texts"); } void MainWindow::on_checkSounds_stateChanged(int arg1){ AConfig::getInstance()->setValue("Editor", "sounds", arg1 ? "true" : "false"); DownloadManager::getInstance()->abortDownload("sounds"); } void MainWindow::on_checkMaps_stateChanged(int arg1){ AConfig::getInstance()->setValue("Editor", "images", arg1 ? "true" : "false"); DownloadManager::getInstance()->abortDownload("images"); } void MainWindow::on_checkScreens_stateChanged(int arg1){ AConfig::getInstance()->setValue("Editor", "screens", arg1 ? "true" : "false"); DownloadManager::getInstance()->abortDownload("screens"); } void MainWindow::on_checkVideos_stateChanged(int arg1){ AConfig::getInstance()->setValue("Editor", "videos", arg1 ? "true" : "false"); DownloadManager::getInstance()->abortDownload("videos"); } void MainWindow::on_checkMicro_stateChanged(int arg1){ AConfig::getInstance()->setValue("Updates", "micro", arg1 ? "true" : "false"); } void MainWindow::on_lotropathButton_clicked(){ QString path = QFileDialog::getExistingDirectory(0, "Выберите папку с игрой"); if(path != "" && FileSystem::fileExists(path + "/TurbineLauncher.exe")) { ui->lotropathLabel->setText(path); AConfig::getInstance()->setValue("Local", "folder", path); } else { QString text = "Выбрана неверная папка"; QString info = "

Убедитесь, что выбранный вами каталог является папкой игры и содержит такие файлы как TurbineLauncher.exe и client_local_English.dat.

"; myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "", "", 400, 160, true, false); } } void MainWindow::on_designButton_clicked(){ Skin::getInstance()->replaceSkin(Skin::getInstance()->getSkinName()); } void MainWindow::on_repairButton_clicked(){ AConfig::getInstance()->deleteSection("Applied"); GameRes::getInstance()->applyAll(); checkTab("mainbox"); } void MainWindow::on_okButton_clicked(){ 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 = "Найдены следующие папки в которых установлена игра:




Выберите нужную папку и нажмите «Далее»
"; 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 = dialog_cancel_answer.split(" "); foreach(QString command, commands){ if(command == "close") this->ui->dialogbox->hide(); } } void MainWindow::checkTab(QString tabname){ QList boxes = findChildren (); foreach (QGroupBox * box, boxes){ if(box->parent()->objectName() == "centralWidget"){ QLabel* boximage = findChild(box->objectName() + "Image"); if(box->objectName() == tabname){ box->show(); if(boximage != nullptr) boximage->show(); } else { box->hide(); if(boximage != nullptr) boximage->hide(); } } } ui->serversbox->show(); } void MainWindow::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){ if(okAnswer == "") okAnswer = "close"; dialog_ok_answer = okAnswer; if(cancelAnswer == "") cancelAnswer = "close"; dialog_cancel_answer = cancelAnswer; ui->okButton->setText(okText); ui->cancelButton->setText(cancelText); ui->dialogbox->setGeometry(0, 0, width(), height()); QSettings settings(Skin::getInstance()->getSkinFile(), QSettings::IniFormat ); settings.beginGroup("mainWindow"); int left = (settings.value("width").toInt() - w)/2; int top = (settings.value("height").toInt() - h)/2; ui->dialog->setGeometry(QRect(left, top, w, h)); settings.endGroup(); int image_height = ui->dialog->rect().height() - ui->dialogHeader->rect().height(); ui->dialogImage->setGeometry(0, ui->dialogHeader->rect().bottom(), image_height/2 ,image_height ); QString skin = Skin::getInstance()->getSkinName(); QString iconpath = ""; iconpath = FileSystem::fileExists("styles/" + skin + "/" + image) ? "styles/" + skin + "/" + image : ":/res/styles/" + skin + "/" + image; QPixmap icon(iconpath); ui->dialogImage->setPixmap(icon.scaled(ui->dialogImage->width(), ui->dialogImage->height())); if(icon.isNull()){ ui->dialogImage->setGeometry(QRect(10, 10, 10, 10)); } ui->dialogHeader->setGeometry( ui->dialogHeader->rect().left(), ui->dialogHeader->rect().top(), ui->dialog->rect().width(), ui->dialogHeader->rect().height() ); ui->dialogInfo->setGeometry(ui->dialogImage->rect().right(), ui->dialogHeader->rect().bottom(), ui->dialog->rect().width() - ui->dialogImage->rect().width()-7, image_height - ui->cancelButton->height() ); if(is_cancel){ ui->cancelButton->setGeometry( ui->dialog->rect().left() + ui->dialog->width() - ui->cancelButton->width() - 20, ui->dialog->rect().bottom() - ui->cancelButton->height() - 10, ui->cancelButton->width(), ui->cancelButton->height() ); ui->okButton->setGeometry( ui->dialog->rect().left() + ui->dialog->width() - ui->cancelButton->width() - ui->cancelButton->width() - 40, ui->dialog->rect().bottom() - ui->cancelButton->height() - 10, ui->cancelButton->width(), ui->cancelButton->height() ); } else { ui->cancelButton->setGeometry(-1000,-1000, ui->cancelButton->width(), ui->cancelButton->height()); ui->okButton->setGeometry( ui->dialog->rect().left() + ui->dialog->width() - ui->cancelButton->width() - 20, ui->dialog->rect().bottom() - ui->cancelButton->height() - 10, ui->cancelButton->width(), ui->cancelButton->height() ); } ui->dialogHeader->setText(text); ui->dialogInfo->setText(info); ui->dialogImage->setText(""); ui->dialogbox->show(); } void MainWindow::setAbout(){ qInfo("%s:%i: %s", __FILE__, __LINE__, "Размещаем информацию о хороших людях."); ui->programmerslist->setText("Gi1dor, coder"); ui->designerslist->setText("Чирик, valyot, Quilanar, Eodoro"); 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(); }