|
@@ -2,8 +2,8 @@
|
|
#include "statuswidget.h"
|
|
#include "statuswidget.h"
|
|
|
|
|
|
#include "models/patchdownloader.h"
|
|
#include "models/patchdownloader.h"
|
|
-
|
|
|
|
-#include "widgets/mainwindow.h"
|
|
|
|
|
|
+#include "models/settings.h"
|
|
|
|
+#include "legacyapplication.h"
|
|
|
|
|
|
#include "constants.h"
|
|
#include "constants.h"
|
|
|
|
|
|
@@ -45,6 +45,8 @@ StatusWidget::StatusWidget(QWidget *parent)
|
|
connect(&PatchInstaller::instance(), &PatchInstaller::successfullyInitialized, this, &StatusWidget::showComponentsStatus);
|
|
connect(&PatchInstaller::instance(), &PatchInstaller::successfullyInitialized, this, &StatusWidget::showComponentsStatus);
|
|
connect(&PatchInstaller::instance(), &PatchInstaller::deinitialized, this, &StatusWidget::hideComponentsStatus);
|
|
connect(&PatchInstaller::instance(), &PatchInstaller::deinitialized, this, &StatusWidget::hideComponentsStatus);
|
|
|
|
|
|
|
|
+ connect(&LegacyApplication::instance(), &LegacyApplication::ErrorStatusChanged, this, &StatusWidget::onErrorStatusChanged);
|
|
|
|
+
|
|
connect(ui->b_components_status, &TranslationComponents::needToPatch, this, &StatusWidget::onTranslationComponentsNeedToPatch);
|
|
connect(ui->b_components_status, &TranslationComponents::needToPatch, this, &StatusWidget::onTranslationComponentsNeedToPatch);
|
|
connect(ui->b_components_status, &TranslationComponents::noNeedToPatch, this, &StatusWidget::onTranslationComponentsNoNeedToPatch);
|
|
connect(ui->b_components_status, &TranslationComponents::noNeedToPatch, this, &StatusWidget::onTranslationComponentsNoNeedToPatch);
|
|
|
|
|
|
@@ -76,12 +78,6 @@ void StatusWidget::updateFontsSizes()
|
|
|
|
|
|
void StatusWidget::setToolTipMessage(QString message, StatusWidget::ToolTipState state)
|
|
void StatusWidget::setToolTipMessage(QString message, StatusWidget::ToolTipState state)
|
|
{
|
|
{
|
|
- if (state == E_RANDOM) {
|
|
|
|
- random_tooltip_generator_timer_.start();
|
|
|
|
- } else {
|
|
|
|
- random_tooltip_generator_timer_.stop();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
tooltip_messages_[state] = message;
|
|
tooltip_messages_[state] = message;
|
|
tooltip_state_ = ToolTipState(int(tooltip_state_) | int(state));
|
|
tooltip_state_ = ToolTipState(int(tooltip_state_) | int(state));
|
|
|
|
|
|
@@ -118,12 +114,6 @@ void StatusWidget::unsetToolTipMessage(StatusWidget::ToolTipState state)
|
|
message_id = "E_PROCESS";
|
|
message_id = "E_PROCESS";
|
|
}
|
|
}
|
|
|
|
|
|
- if (showing_state == E_RANDOM) {
|
|
|
|
- random_tooltip_generator_timer_.start();
|
|
|
|
- } else {
|
|
|
|
- random_tooltip_generator_timer_.stop();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if (!tooltip_widgets_.contains(message_id)) {
|
|
if (!tooltip_widgets_.contains(message_id)) {
|
|
createTooltipMessageWidget(message_id);
|
|
createTooltipMessageWidget(message_id);
|
|
}
|
|
}
|
|
@@ -133,59 +123,31 @@ void StatusWidget::unsetToolTipMessage(StatusWidget::ToolTipState state)
|
|
|
|
|
|
void StatusWidget::onErrorStatusChanged(AppErrorStatus status)
|
|
void StatusWidget::onErrorStatusChanged(AppErrorStatus status)
|
|
{
|
|
{
|
|
|
|
+ QString init_error_type_message;
|
|
|
|
+
|
|
if (status == E_NO_ERRORS) {
|
|
if (status == E_NO_ERRORS) {
|
|
- init_error_type_message_ = "";
|
|
|
|
- unsetToolTipMessage(E_ERROR);
|
|
|
|
|
|
+ setToolTipMessage("Запуск прошёл успешно!", E_ERROR);
|
|
ui->news_list->updateNewsWidget();
|
|
ui->news_list->updateNewsWidget();
|
|
ui->server_status_widget->updateServerStatus();
|
|
ui->server_status_widget->updateServerStatus();
|
|
ui->weekly_code_widget->updateWeeklyCodeWidget();
|
|
ui->weekly_code_widget->updateWeeklyCodeWidget();
|
|
return;
|
|
return;
|
|
|
|
+ } else if (status == E_WRONG_GAME_FOLDER) {
|
|
|
|
+ const QString game_path = Settings::getValue("Lotro/game_path").toString();
|
|
|
|
+ if (game_path == "none") {
|
|
|
|
+ init_error_type_message = "Добро пожаловать в Наследие!\nПожалуйста, выберите папку с игрой.";
|
|
|
|
+ } else {
|
|
|
|
+ init_error_type_message = "Добро пожаловать в Наследие!\nНе найдены файлы игры, пожалуйста, выберите корректную папку с игрой!";
|
|
|
|
+ }
|
|
|
|
+ } else if (status == E_DAT_FILES_MISSING) {
|
|
|
|
+ init_error_type_message = "Некоторые файлы данных игры не найдены.\nНажмите на кнопку \"Исправить\", чтобы запустить лаунчер игры, который автоматически перекачает нужные файлы.";
|
|
|
|
+ } else if (status == E_WRONG_FILE_PERMISSIONS) {
|
|
|
|
+ init_error_type_message = "Недостаточно прав для изменения файлов игры.\nПопробуйте запустить Наследие от имени администратора.";
|
|
|
|
+ } else if (status == E_DAT_FILE_INCORRECT) {
|
|
|
|
+ init_error_type_message = "Некоторые файлы игры несовместимы с этой версией Наследия.\nНажмите на кнопку \"Исправить\", чтобы запустить лаунчер игры, который автоматически скачает нужные файлы.";
|
|
|
|
+ } else if (status == E_NO_SERVER_CONNECTION) {
|
|
|
|
+ init_error_type_message = "Нет связи с серверами Наследия.\nПожалуйста, проверьте соединение с Интернетом.";
|
|
}
|
|
}
|
|
-
|
|
|
|
- error_timeout_message_ = "Повторная попытка инициализации через 10 секунд";
|
|
|
|
- if (status & E_WRONG_GAME_FOLDER) {
|
|
|
|
- init_error_type_message_ = "Ошибка инициализации: некорректная папка с игрой!\n";
|
|
|
|
- setToolTipMessage(init_error_type_message_ + error_timeout_message_, E_ERROR);
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (status & E_DAT_FILES_MISSING) {
|
|
|
|
- init_error_type_message_ = "Ошибка инициализации: отсутствуют файлы данных игры!\n";
|
|
|
|
- setToolTipMessage(init_error_type_message_ + error_timeout_message_, E_ERROR);
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (status & E_WRONG_FILE_PERMISSIONS) {
|
|
|
|
- init_error_type_message_ = "Ошибка инициализации: недостаточно прав для изменения файлов данных!\n";
|
|
|
|
- setToolTipMessage(init_error_type_message_ + error_timeout_message_, E_ERROR);
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (status & E_CANNOT_ACCESS_DAT_FILES) {
|
|
|
|
- init_error_type_message_ = "Ошибка инициализации: нет доступа к файлам данных!\n";
|
|
|
|
- setToolTipMessage(init_error_type_message_ + error_timeout_message_, E_ERROR);
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (status & E_DAT_FILE_INCORRECT) {
|
|
|
|
- init_error_type_message_ = "Ошибка инициализации: формат файла данных устарел или некорректен!\n";
|
|
|
|
- setToolTipMessage(init_error_type_message_ + error_timeout_message_, E_ERROR);
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (status & E_NO_SERVER_CONNECTION) {
|
|
|
|
- init_error_type_message_ = "Ошибка инициализации: нет связи с сервером Наследия!\n";
|
|
|
|
- setToolTipMessage(init_error_type_message_ + error_timeout_message_, E_ERROR);
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void StatusWidget::onSecondsToNextTryToInitChanged(size_t seconds_elapsed)
|
|
|
|
-{
|
|
|
|
- if (!init_error_type_message_.isEmpty()) {
|
|
|
|
- error_timeout_message_ = "Повторная попытка инициализации через " + QString::number(seconds_elapsed) + " секунд";
|
|
|
|
- setToolTipMessage(init_error_type_message_ + error_timeout_message_, E_ERROR);
|
|
|
|
- }
|
|
|
|
|
|
+ setToolTipMessage(init_error_type_message, E_ERROR);
|
|
}
|
|
}
|
|
|
|
|
|
void StatusWidget::resizeEvent(QResizeEvent *)
|
|
void StatusWidget::resizeEvent(QResizeEvent *)
|
|
@@ -371,17 +333,29 @@ void StatusWidget::on_check_for_updates_button_clicked()
|
|
|
|
|
|
void StatusWidget::showComponentsStatus() {
|
|
void StatusWidget::showComponentsStatus() {
|
|
_components_status_opacity_animation->disconnect();
|
|
_components_status_opacity_animation->disconnect();
|
|
|
|
+ if (_components_status_opacity_animation->state() == QAbstractAnimation::Running) {
|
|
|
|
+ _components_status_opacity_animation->pause();
|
|
|
|
+ }
|
|
ui->b_components_status->show();
|
|
ui->b_components_status->show();
|
|
- _components_status_opacity_animation->stop();
|
|
|
|
_components_status_opacity_animation->setEndValue(1);
|
|
_components_status_opacity_animation->setEndValue(1);
|
|
- _components_status_opacity_animation->start();
|
|
|
|
|
|
+ if (_components_status_opacity_animation->state() == QAbstractAnimation::Stopped) {
|
|
|
|
+ _components_status_opacity_animation->start();
|
|
|
|
+ } else {
|
|
|
|
+ _components_status_opacity_animation->resume();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
void StatusWidget::hideComponentsStatus() {
|
|
void StatusWidget::hideComponentsStatus() {
|
|
if (this->isVisible()) {
|
|
if (this->isVisible()) {
|
|
- _components_status_opacity_animation->stop();
|
|
|
|
|
|
+ if (_components_status_opacity_animation->state() == QAbstractAnimation::Running) {
|
|
|
|
+ _components_status_opacity_animation->pause();
|
|
|
|
+ }
|
|
_components_status_opacity_animation->setEndValue(0);
|
|
_components_status_opacity_animation->setEndValue(0);
|
|
- _components_status_opacity_animation->start();
|
|
|
|
|
|
+ if (_components_status_opacity_animation->state() == QAbstractAnimation::Stopped) {
|
|
|
|
+ _components_status_opacity_animation->start();
|
|
|
|
+ } else {
|
|
|
|
+ _components_status_opacity_animation->resume();
|
|
|
|
+ }
|
|
connect(_components_status_opacity_animation, &QPropertyAnimation::finished, ui->b_components_status, &QWidget::hide);
|
|
connect(_components_status_opacity_animation, &QPropertyAnimation::finished, ui->b_components_status, &QWidget::hide);
|
|
}
|
|
}
|
|
}
|
|
}
|