Files
RRJClient/mainwindow.cpp
2025-12-17 16:39:23 +03:00

350 lines
8.6 KiB
C++

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFontDatabase>
#include <QMessageBox>
#include <QMovie>
#include <QMutexLocker>
#include <QPaintEvent>
#include <QPainter>
#include <QTimer>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent),
ui(new Ui::MainWindow),
bottomRightPosition(QRect(530,506,250,40)),
offlinePosition(240,340,300,40)
{
ui->setupUi(this);
setAttribute(Qt::WA_TranslucentBackground);
setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
background.load(":/resource/SSJ_backgroundDarkSM.png");
timer = new QTimer;
}
void MainWindow::paintEvent(QPaintEvent*) {
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
QPainterPath path;
path.addRoundedRect(rect(), 8, 8);
painter.setClipPath(path);
if (!background.isNull())
{
int x = (width() - background.width()) / 2;
int y = (height() - background.height()) / 2;
painter.drawPixmap(x, y, background);
}
}
void MainWindow::initialize(ResourceManager *resourceManager)
{
bindConnection();
this->resourceManager = resourceManager;
ui->LanguageWidget->hide();
}
void MainWindow::setStartState()
{
show();
setInlineDebug(tr("Инициализация..."));
QString title = tr("Тренажер процедур технического обслуживания самолета RRJ-95NEW-100");
ui->headerLabel->setText(title);
ui->versionLayoutWidget->hide();
setUpUi();
}
void MainWindow::updateInitInformation(QString fullSize,QString currentSize)
{
QString info = tr("Инициализация...");
info.append(currentSize);
info.append("/");
info.append(fullSize);
setInlineDebug(info);
}
void MainWindow::bindConnection()
{
connect(timer,&QTimer::timeout,this,&MainWindow::slotDisableNotify);
}
void MainWindow::loadCompleteState()
{
ui->inlineTextDebug->setText(tr("Обновление завершено"));
ui->offlineStartButton->setEnabled(true);
ui->autostartCheckBox->hide();
ui->offlineStartButton->show();
}
bool MainWindow::getIsAutoStart()
{
return ui->autostartCheckBox->isChecked();
}
void MainWindow::setLastVersionState()
{
setInlineDebug(tr("Установлена последняя версия"));
ui->unsafeChangingButton->hide();
ui->offlineStartButton->setEnabled(true);
}
void MainWindow::setNeedUpdateState(const QString& notifyText)
{
setInlineDebug(notifyText);
ui->autostartCheckBox->show();
}
void MainWindow::showError(ErrorsEnum errorNum)
{
if (errorNum == ErrorsEnum::BLOCKED)
{
serverNotifyShow(tr("Сервер заблокирован"));
}
else if (errorNum == ErrorsEnum::DISABLE)
{
showConnectionEmpty();
}
else if (errorNum == ErrorsEnum::LOGIN_OR_PASS)
{
serverNotifyShow(tr("Неверный логин/пароль"));
}
else if (errorNum == ErrorsEnum::ARCHIVED)
{
serverNotifyShow(tr("Пользователь в архиве"));
}
else if (errorNum == ErrorsEnum::ALREADYLOGIN)
{
serverNotifyShow(tr("Пользователь уже в сети"));
}
}
void MainWindow::serverNotifyShow(QString text, int durationMS)
{
ui->notificationLabel->setText(text);
ui->notificationLabel->show();
timer->start(durationMS);
}
void MainWindow::setLoginSuccessState()
{
ui->settingsButton->hide();
ui->offlineStartButton->show();
ui->versionLayoutWidget->show();
}
void MainWindow::setStartOfflineButton(bool isAvailable)
{
ui->offlineStartButton->setEnabled(isAvailable);
}
void MainWindow::setClientVersionName(const QString& versionName)
{
ui->valueClientVersion->setText(versionName);
}
void MainWindow::showConnectionEmpty()
{
QPalette palette = ui->notificationLabel->palette();
palette.setColor(ui->notificationLabel->foregroundRole(),Qt::red);
ui->notificationLabel->setText(tr("Соединение отсутсвует"));
ui->offlineStartButton->show();
ui->offlineStartButton->setGeometry(offlinePosition);
ui->offlineStartButton->raise();
ui->settingsButton->show();
ui->unsafeChangingButton->hide();
}
void MainWindow::disableUnsaveButton(bool flag)
{
if(!flag) ui->unsafeChangingButton->show();
else ui->unsafeChangingButton->hide();
}
void MainWindow::slotConnectionState(bool flag)
{
ui->notificationLabel->show();
QPalette palette = ui->notificationLabel->palette();
ui->versionLayoutWidget->hide();
setInlineDebug("");
if(flag)
{
palette.setColor(ui->notificationLabel->foregroundRole(),Qt::green);
ui->notificationLabel->setText(tr("Соединение установлено"));
ui->offlineStartButton->show();
ui->offlineStartButton->setGeometry(bottomRightPosition);
}
else
{
showConnectionEmpty();
}
ui->notificationLabel->setPalette(palette);
timer->start(3000);
}
void MainWindow::slotServerDisconnect()
{
ui->autostartCheckBox->hide();
ui->inlineTextDebug->setText("");
slotConnectionState(false);
}
void MainWindow::slotDisableNotify()
{
ui->notificationLabel->hide();
QPalette palette = ui->notificationLabel->palette();
palette.setColor(ui->notificationLabel->foregroundRole(), Qt::black);
ui->notificationLabel->setPalette(palette);
timer->stop();
}
void MainWindow::showOfflineButton(bool flag)
{
if (flag)
ui->offlineStartButton->show();
else
ui->offlineStartButton->hide();
}
void MainWindow::on_settingsButton_clicked()
{
emit sigShowSettings(true);
ui->offlineStartButton->hide();
}
void MainWindow::on_languageComboBox_activated(const QString &arg1)
{
emit sigChangeLanguage(arg1);
ui->retranslateUi(this);
}
void MainWindow::loadToServer()
{
ui->mainFrame->show();
ui->inlineTextDebug->setText(tr("Отправка файлов..."));
ui->offlineStartButton->setEnabled(false);
ui->unsafeChangingButton->hide();
}
void MainWindow::undoCurrentChanges()
{
ui->mainFrame->show();
ui->offlineStartButton->setEnabled(false);
ui->unsafeChangingButton->hide();
}
void MainWindow::on_unsafeChangingButton_clicked()
{
emit sigShowUpdateInfo();
}
void MainWindow::on_exitButton_clicked()
{
emit sigExit();
delete ui;
exit(0);
}
void MainWindow::slotShowUpdateInfo()
{
ui->unsafeChangingButton->show();
ui->offlineStartButton->setGeometry(bottomRightPosition);
}
void MainWindow::setUpUi()
{
ui->notificationLabel->hide();
ui->unsafeChangingButton->hide();
ui->offlineStartButton->show();
ui->offlineStartButton->setEnabled(false);
ui->offlineStartButton->setGeometry(bottomRightPosition);
ui->settingsButton->setIcon(*resourceManager->getSettingsIcon());
QSize cautionIconSize(30,30);
ui->unsafeChangingButton->setIcon(*resourceManager->getUnsavedIcon());
ui->unsafeChangingButton->setIconSize(cautionIconSize);
QSize iconSize(20,20);
ui->exitButton->setIcon(*resourceManager->getCloseIcon());
ui->exitButton->setIconSize(iconSize);
ui->displayGroupWidget->show();
ui->autostartCheckBox->hide();
}
void MainWindow::slotCommonWidgetState()
{
disableUnsaveButton(true);
setInlineDebug(tr("Загрузка..."));
}
void MainWindow::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return)
{
if (!entryWidget->getLoginWidgetIsHidden())
{
emit sigTryLogin();
}
}
}
void MainWindow::showMainFrame(bool flag)
{
if (flag) ui->mainFrame->show();
else ui->mainFrame->hide();
}
void MainWindow::setInlineDebug(QString value)
{
ui->inlineTextDebug->setText(value);
}
void MainWindow::setServerVersion(StreamingVersionData *version)
{
ui->valueServerVersion->setText(version->getViewName());
}
QHBoxLayout *MainWindow::getDisplayLayout() const
{
return ui->displayLayout;
}
void MainWindow::addWidgetToChangeGroup(CommonButtonGroupWidget *commonWidgetGroup)
{
ui->changButtonGroup->addWidget(commonWidgetGroup);
}
void MainWindow::addWidgetToInteractiveGroup(EntryWidget *entryWidget)
{
ui->interactiveGroup->addWidget(entryWidget);
this->entryWidget = entryWidget;
}
void MainWindow::setLoadSettings(Settings *serverSettings)
{
ui->retranslateUi(this);
ui->languageComboBox->setCurrentText(serverSettings->Language);
ui->autostartCheckBox->setChecked(serverSettings->isAutoStart);
}
void MainWindow::on_offlineStartButton_clicked()
{
emit sigStartOffline();
}