|
@@ -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();
|
|
|
+}
|