diff --git a/Core/UpdateController.cpp b/Core/UpdateController.cpp index 1d5fcf4..33ca9ef 100644 --- a/Core/UpdateController.cpp +++ b/Core/UpdateController.cpp @@ -3,18 +3,18 @@ #include -UpdateController::UpdateController(DataParserOutput *dataParserOut, SendSystem *sendSystem, QObject *parent) : +UpdateController::UpdateController(QObject *parent) : QObject(parent), versionContainer(nullptr) { - this->sendSystem = sendSystem; - this->dataParserOut = dataParserOut; applicationFolderPath = QDir::currentPath() + applicationFolderName; } -void UpdateController::initialize(VersionContainer *versionContainer) +void UpdateController::initialize(VersionContainer *versionContainer,DataParserOutput *dataParserOut, SendSystem *sendSystem) { this->versionContainer = versionContainer; + this->sendSystem = sendSystem; + this->dataParserOut = dataParserOut; } void UpdateController::calculateCommonHash() diff --git a/Core/UpdateController.h b/Core/UpdateController.h index 4a4d28f..dd6b34b 100644 --- a/Core/UpdateController.h +++ b/Core/UpdateController.h @@ -26,17 +26,16 @@ class UpdateController : public QObject Q_OBJECT public: - explicit UpdateController(DataParserOutput *dataParser, SendSystem *sendSystem, - QObject *parent = 0); + explicit UpdateController(QObject *parent = 0); - void initialize(VersionContainer *versionContainer); + void initialize(VersionContainer *versionContainer,DataParserOutput *dataParser, SendSystem *sendSystem); void calculateCommonHash(); void calculateStreamingHash(); ~UpdateController(); void updateFilesOnServer(QList *fileSendList); - void checkCanUpdate(); + signals: void sigUpdateComplete(bool flag); private: diff --git a/Core/dataparser.cpp b/Core/dataparser.cpp index e809901..1108633 100644 --- a/Core/dataparser.cpp +++ b/Core/dataparser.cpp @@ -132,27 +132,27 @@ void DataParser::xmlParser(const QByteArray& array) postProcessSystem->startCompare(); } - if (value == "BASEDELETETRY") - { - emit sigNotify(tr("Нельзя удалять базовую версию")); - } +// if (value == "BASEDELETETRY") +// { +// emit sigNotify(tr("Нельзя удалять базовую версию")); +// } - if (value == "TRYACTIVEDELETE") - { - emit sigNotify(tr("Нельзя удалять активную версию")); - } +// if (value == "TRYACTIVEDELETE") +// { +// emit sigNotify(tr("Нельзя удалять активную версию")); +// } - if (value == "DUPLICATEVERNAME") - { - emit sigNotify(tr("Такое имя уже существет")); - } +// if (value == "DUPLICATEVERNAME") +// { +// emit sigNotify(tr("Такое имя уже существет")); +// } - if (value == "UNCHANGEABLE") - { - emit sigNotify(tr("Нельзя выгружать в базовую версию")); - postProcessSystem->showUpdateList(); - //emit recognizeSystem->sigShowUpdateList(); - } +// if (value == "UNCHANGEABLE") +// { +// emit sigNotify(tr("Нельзя выгружать в базовую версию")); +// postProcessSystem->showUpdateList(); +// //emit recognizeSystem->sigShowUpdateList(); +// } if (value == "CHANGEABLE") { diff --git a/Core/dataparseroutput.cpp b/Core/dataparseroutput.cpp index f351b3d..1e9a531 100644 --- a/Core/dataparseroutput.cpp +++ b/Core/dataparseroutput.cpp @@ -256,7 +256,7 @@ void DataParserOutput::addRunData(QList displays) } -void DataParserOutput::saveClientSettrings(const QString& language, bool isAutoStart) +void DataParserOutput::saveClientSettings(const QString& language, bool isAutoStart) { QFile file(settingsName); file.open(QIODevice::ReadOnly | QIODevice::Text); diff --git a/Core/dataparseroutput.h b/Core/dataparseroutput.h index 135d562..b7e0ab5 100644 --- a/Core/dataparseroutput.h +++ b/Core/dataparseroutput.h @@ -22,7 +22,7 @@ public: void createAuthData(ServerAuthorization *serverAuth); void createAuthDataOffline(const QString& username,const QString& pass); void addRunData(QList displays); - void saveClientSettrings(const QString& language, bool isAutoStart); + void saveClientSettings(const QString& language, bool isAutoStart); QList *xmlFileDataParse(const QByteArray& array,const QString& filter = ""); QByteArray xmlAnswer_notify(const QString& code); QByteArray xmlAnswer(const QList& listTag, const QString& elemUp1 = "", const QString& elemUp2 = ""); diff --git a/Core/externalexecuter.cpp b/Core/externalexecuter.cpp index 5f451ab..f26e19c 100644 --- a/Core/externalexecuter.cpp +++ b/Core/externalexecuter.cpp @@ -27,3 +27,13 @@ bool ExternalExecuter::findApp() return false; } + +bool ExternalExecuter::getIsAutoStart() const +{ + return isAutoStart; +} + +void ExternalExecuter::setIsAutoStart(bool value) +{ + isAutoStart = value; +} diff --git a/Core/externalexecuter.h b/Core/externalexecuter.h index 4932d23..750eba2 100644 --- a/Core/externalexecuter.h +++ b/Core/externalexecuter.h @@ -20,8 +20,12 @@ public: void callApp(); bool findApp(); + bool getIsAutoStart() const; + void setIsAutoStart(bool value); + private: QString programPath; + bool isAutoStart; }; #endif // EXTERNALEXECUTER_H diff --git a/Core/hashcomparer.cpp b/Core/hashcomparer.cpp index 7af5e0e..13f97ec 100644 --- a/Core/hashcomparer.cpp +++ b/Core/hashcomparer.cpp @@ -8,9 +8,11 @@ HashComparer::HashComparer(QObject *) : } -void HashComparer::initialize(VersionContainer *versionContainer) +void HashComparer::initialize(VersionContainer *versionContainer,UpdateNotifyWidget* updateWidget) { this->versionContainer = versionContainer; + this->updateWidget = updateWidget; + filesForUpdate = new QList; } void HashComparer::CompareDeltas(QList *serverStreamingHash, QList localStreamingHash) @@ -47,11 +49,6 @@ void HashComparer::showDeltas() emit sigHaveDelta(); } -void HashComparer::setWidget(UpdateNotifyWidget* updateWidget) -{ - this->updateWidget = updateWidget; -} - quint16 HashComparer::getFileUpdateCount() const { return filesForUpdate->count(); diff --git a/Core/hashcomparer.h b/Core/hashcomparer.h index e9c7984..facc2a4 100644 --- a/Core/hashcomparer.h +++ b/Core/hashcomparer.h @@ -13,12 +13,11 @@ class HashComparer :public QObject Q_OBJECT public: explicit HashComparer(QObject *parent = nullptr); - void initialize(VersionContainer *versionContainer); + void initialize(VersionContainer *versionContainer,UpdateNotifyWidget* updateWidget); void CompareDeltas(QList *serverStreamingHash, QList localStreamingHash); ~HashComparer() = default; void showDeltas(); - void setWidget(UpdateNotifyWidget *updateWidget); quint16 getFileUpdateCount() const; QList *getFilesForUpdate() const; signals: diff --git a/Core/recognizesystem.cpp b/Core/recognizesystem.cpp index 600d878..a80b216 100644 --- a/Core/recognizesystem.cpp +++ b/Core/recognizesystem.cpp @@ -1,6 +1,5 @@ #include "Core/recognizesystem.h" - RecognizeSystem::RecognizeSystem(QObject *parent): QObject(parent), versionContainer(nullptr), diff --git a/Core/recognizesystem.h b/Core/recognizesystem.h index 883a5a0..8e3201f 100644 --- a/Core/recognizesystem.h +++ b/Core/recognizesystem.h @@ -27,7 +27,6 @@ public: void recognize(QTcpSocket *socket); void showServerDataList(QList *showServerDataList); - signals: void sigUpdateBytesAvailable(); void sigLoadComplete(); diff --git a/Core/screenchecker.cpp b/Core/screenchecker.cpp index 51f35ea..92aaddf 100644 --- a/Core/screenchecker.cpp +++ b/Core/screenchecker.cpp @@ -1,13 +1,10 @@ #include "screenchecker.h" #include -ScreenChecker::ScreenChecker(QWidget *mainWidget,DataParserOutput *dataParserOut, QHBoxLayout *layout, QObject *parent) : +ScreenChecker::ScreenChecker(QObject *parent) : QObject(parent) { screenCount = 0; - this->mainWidget = mainWidget; - this->layout = layout; - this->dataParserOutput = dataParserOut; } void ScreenChecker::check() @@ -129,6 +126,12 @@ QString ScreenChecker::getScreenCount() const return QString::number(screenCount); } +void ScreenChecker::initialize(DataParserOutput *dataParserOutput, QHBoxLayout *layout) +{ + this->layout = layout; + this->dataParserOutput = dataParserOutput; +} + ScreenChecker::~ScreenChecker() { for (auto & button : buttons) diff --git a/Core/screenchecker.h b/Core/screenchecker.h index 42b8bd9..a665870 100644 --- a/Core/screenchecker.h +++ b/Core/screenchecker.h @@ -22,7 +22,8 @@ class ScreenChecker : public QObject Q_OBJECT public: - explicit ScreenChecker(QWidget *mainWidget,DataParserOutput *dataParserOutput, QHBoxLayout *layout,QObject *parent = nullptr); + explicit ScreenChecker(QObject *parent = nullptr); + void initialize(DataParserOutput *dataParserOutput, QHBoxLayout *layout); ~ScreenChecker(); void check(); QString getScreenCount() const; diff --git a/Core/tools.h b/Core/tools.h index 4cbd5df..e90ca20 100644 --- a/Core/tools.h +++ b/Core/tools.h @@ -29,6 +29,9 @@ static QString cmd_GetServerHash = "GETSERVERDATALIST"; static QString cmd_Disable = "DISABLE"; static QString baseNamePackage = "base"; +static QString instructorTypeName = "instructor"; +static QString traineeTypeName = "trainee"; + enum PacketType{ TYPE_NONE = 0, TYPE_UNITY = 1, diff --git a/RRJClient.pro b/RRJClient.pro index c2e58dd..a58f024 100644 --- a/RRJClient.pro +++ b/RRJClient.pro @@ -36,12 +36,14 @@ SOURCES += \ Widgets\commonbuttongroupwidget.cpp \ Widgets\entrywidget.cpp \ Widgets\instructorbuttongroupwidget.cpp \ + bootstrap.cpp \ + coremanager.cpp \ main.cpp \ mainwindow.cpp \ mywinheader.cpp \ Widgets\newversionwidget.cpp \ Widgets\updatenotifywidget.cpp \ - Widgets\versionselectwidget.cpp \ + widgetmanager.cpp HEADERS += \ Core/dataparseroutput.h \ @@ -66,11 +68,13 @@ HEADERS += \ Widgets\commonbuttongroupwidget.h \ Widgets\entrywidget.h \ Widgets\instructorbuttongroupwidget.h \ + bootstrap.h \ + coremanager.h \ mainwindow.h \ mywinheader.h \ Widgets\newversionwidget.h \ Widgets\updatenotifywidget.h \ - Widgets\versionselectwidget.h \ + widgetmanager.h FORMS += \ Widgets/waitanimationwidget.ui \ @@ -80,7 +84,6 @@ FORMS += \ mainwindow.ui \ Widgets\newversionwidget.ui \ Widgets\updatenotifywidget.ui \ - Widgets\versionselectwidget.ui \ TRANSLATIONS = QtLanguage_ru.ts\ QtLanguage_eng.ts diff --git a/StaticData/authData.xml b/StaticData/authData.xml index 9429aff..4032548 100644 --- a/StaticData/authData.xml +++ b/StaticData/authData.xml @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/StaticData/clientHash.xml b/StaticData/clientHash.xml index 8eefb9b..eb8a436 100644 --- a/StaticData/clientHash.xml +++ b/StaticData/clientHash.xml @@ -12,10 +12,6 @@ - - - - @@ -37,6 +33,7 @@ + @@ -61,15 +58,14 @@ - - - + + - + @@ -192,11 +188,11 @@ - + - + diff --git a/StaticData/serverHash.xml b/StaticData/serverHash.xml index 4458cc5..b2b799f 100644 --- a/StaticData/serverHash.xml +++ b/StaticData/serverHash.xml @@ -12,10 +12,6 @@ - - - - @@ -45,15 +41,14 @@ - - - + + - + @@ -176,11 +171,11 @@ - + - + diff --git a/StaticData/settings.xml b/StaticData/settings.xml index 445760a..98ae85f 100644 --- a/StaticData/settings.xml +++ b/StaticData/settings.xml @@ -1,5 +1,5 @@ - - + + diff --git a/StaticData/temp.xml b/StaticData/temp.xml index ed93f70..021a729 100644 --- a/StaticData/temp.xml +++ b/StaticData/temp.xml @@ -1,2 +1,2 @@ - + diff --git a/Widgets/commonbuttongroupwidget.cpp b/Widgets/commonbuttongroupwidget.cpp index be632f5..6c30ae8 100644 --- a/Widgets/commonbuttongroupwidget.cpp +++ b/Widgets/commonbuttongroupwidget.cpp @@ -8,18 +8,14 @@ CommonButtonGroupWidget::CommonButtonGroupWidget(QWidget *parent) : ui->setupUi(this); } -void CommonButtonGroupWidget::initialize(ExternalExecuter *extExec,SendSystem *sendSystem) +void CommonButtonGroupWidget::initialize() { - externalExecuter = extExec; - this->sendSystem = sendSystem; ui->loadingProgressBar->setValue(0); ui->loadingProgressBar->hide(); ui->updateButton->hide(); ui->startButton->hide(); - ui->startButton->setEnabled(false); - - connect(this,&CommonButtonGroupWidget::sigSendPacket,sendSystem,&SendSystem::sendPacketType,Qt::AutoConnection); - connect(this,&CommonButtonGroupWidget::sigSendXMLAnswer,sendSystem,&SendSystem::xmlAnswer,Qt::AutoConnection); + ui->startButton->setEnabled(false); + show(); } void CommonButtonGroupWidget::updateProgressBar(float value) @@ -41,6 +37,7 @@ void CommonButtonGroupWidget::lastVerInstalledState() show(); ui->updateButton->hide(); ui->loadingProgressBar->hide(); + ui->startButton->setEnabled(true); ui->startButton->show(); } @@ -88,8 +85,7 @@ void CommonButtonGroupWidget::on_updateButton_clicked() void CommonButtonGroupWidget::on_startButton_clicked() { - externalExecuter->callApp(); - emit sigSendXMLAnswer(cmd_Disable); + emit sigStartUnityClient(); } CommonButtonGroupWidget::~CommonButtonGroupWidget() diff --git a/Widgets/commonbuttongroupwidget.h b/Widgets/commonbuttongroupwidget.h index 6b7fdcb..49e25a5 100644 --- a/Widgets/commonbuttongroupwidget.h +++ b/Widgets/commonbuttongroupwidget.h @@ -8,17 +8,13 @@ namespace Ui { class CommonButtonGroupWidget; } -class TCPClient; -class ExternalExecuter; -class SendSystem; - class CommonButtonGroupWidget : public QWidget { Q_OBJECT public: explicit CommonButtonGroupWidget(QWidget *parent = nullptr); - void initialize(ExternalExecuter *extExec,SendSystem *sendSystem); + void initialize(); void loadCompleteState(); void lastVerInstalledState(); void disconnectState(); @@ -32,6 +28,7 @@ signals: void sigSendPacket(PacketType packet); void sigSendXMLAnswer(QString answer); void sigUpdateCommonWidget(); + void sigStartUnityClient(); private slots: void on_updateButton_clicked(); @@ -42,8 +39,6 @@ public: private: Ui::CommonButtonGroupWidget *ui; - ExternalExecuter *externalExecuter; - SendSystem *sendSystem; }; #endif // COMMONBUTTONGROUPWIDGET_H diff --git a/Widgets/updatenotifywidget.cpp b/Widgets/updatenotifywidget.cpp index 0ead3a2..afec169 100644 --- a/Widgets/updatenotifywidget.cpp +++ b/Widgets/updatenotifywidget.cpp @@ -12,9 +12,8 @@ UpdateNotifyWidget::UpdateNotifyWidget(QWidget *) : // setAttribute(Qt::WA_ShowModal,true); } -void UpdateNotifyWidget::initialize(VersionContainer *verContainer,QPoint startPos) +void UpdateNotifyWidget::initialize(QPoint startPos) { - this->versionContainer = verContainer; currentLoadingCount = 0; hide(); @@ -23,6 +22,11 @@ void UpdateNotifyWidget::initialize(VersionContainer *verContainer,QPoint startP move(pos); } +void UpdateNotifyWidget::setVersionContainer(VersionContainer *versionContainer) +{ + this->versionContainer = versionContainer; +} + void UpdateNotifyWidget::addToList(FileData fileData) { QString itemName = fileData.path; diff --git a/Widgets/updatenotifywidget.h b/Widgets/updatenotifywidget.h index 3ba71a9..c9251c6 100644 --- a/Widgets/updatenotifywidget.h +++ b/Widgets/updatenotifywidget.h @@ -11,7 +11,7 @@ namespace Ui { class UpdateNotifyWidget; } -class InstructorButtonGroupWidget; + class UpdateNotifyWidget : public QWidget { @@ -19,14 +19,14 @@ class UpdateNotifyWidget : public QWidget public: explicit UpdateNotifyWidget(QWidget *parent = nullptr); - void initialize(VersionContainer *versionContainer,QPoint startPos); + void initialize(QPoint startPos); void addToList(FileData fileData); void showWithFill(); ~UpdateNotifyWidget(); void showTryChangeBase(); - + void setVersionContainer(VersionContainer *versionContainer); signals: void sigLoadToServerBehaviour(); void sigUndoCurrentChanges(); diff --git a/Widgets/versionselectwidget.cpp b/Widgets/versionselectwidget.cpp deleted file mode 100644 index 36d1e17..0000000 --- a/Widgets/versionselectwidget.cpp +++ /dev/null @@ -1,105 +0,0 @@ -#include "versionselectwidget.h" -#include "ui_versionselectwidget.h" -#include "Widgets/newversionwidget.h" - -#include - -VersionSelectWidget::VersionSelectWidget(QWidget *parent) : - QWidget(parent), - ui(new Ui::VersionSelectWidget), - selectedVersion(nullptr) -{ - ui->setupUi(this); -} - -void VersionSelectWidget::initialize(SendSystem *sendSystem,VersionContainer *versionContainer,NotifyController *notifyController) -{ - connect(this,&VersionSelectWidget::sigSendSwitchVersion,sendSystem,&SendSystem::sendChangeVersion,Qt::AutoConnection); - connect(this,&VersionSelectWidget::sigSendCopyVersion,sendSystem,&SendSystem::sendCopyVersion,Qt::AutoConnection); - connect(this,&VersionSelectWidget::sigSendDeleteVersion,sendSystem,&SendSystem::sendDeleteVersion,Qt::AutoConnection); - connect(this,&VersionSelectWidget::sigSendNotify,notifyController,&NotifyController::showWarning,Qt::AutoConnection); - this->versionContainer = versionContainer; - hide(); -} - -void VersionSelectWidget::fillView(QList *serverData) -{ - show(); - ui->verListView->clear(); - serverDataList = serverData; - ui->verValue->setText(versionContainer->getServerVersionData()->getViewName()); - - foreach(StreamingVersionData *data,*serverData) - { - ui->verListView->addItem(data->getViewName()); - } -} - -void VersionSelectWidget::on_verListView_itemDoubleClicked(QListWidgetItem *item) -{ - foreach(StreamingVersionData *data,*serverDataList) - { - if(data->getViewName() == item->text()) - { - QString info = "Имя версии: " + data->getViewName() + "\n"; - info.append("Создан: " + data->getCreateData().toString()); - ui->infoValue->setText(info); - selectedVersion = data; - } - } -} - -void VersionSelectWidget::on_createDuplicateButton_clicked() -{ - NewVersionWidget *newVersionWidget = new NewVersionWidget; - newVersionWidget->initialize(selectedVersion->getViewName()); - newVersionWidget->show(); - - connect(newVersionWidget,&NewVersionWidget::sigSendCopy,this,&VersionSelectWidget::sendCopyEmit); -} - -void VersionSelectWidget::sendCopyEmit(QString newName) -{ - QString result = selectedVersion->getViewName() + ";" + newName; - - if (selectedVersion == nullptr) - { - sigSendNotify(tr("Версия не выбрана")); - return; - } - - //versionContainer->setLocalVersionData(selectedVersion); - emit sigSendCopyVersion(result); -} - -void VersionSelectWidget::on_DeleteVersionButton_clicked() -{ - if (selectedVersion == nullptr) - { - sigSendNotify(tr("Версия не выбрана")); - return; - } - - emit sigSendDeleteVersion(selectedVersion); -} - -void VersionSelectWidget::on_switchServerVersionButton_clicked() -{ - if (selectedVersion == nullptr) - { - sigSendNotify(tr("Версия не выбрана")); - return; - } - - versionContainer->setServerVersionData(selectedVersion); - ui->verValue->setText(selectedVersion->getViewName()); - emit sigSendSwitchVersion(selectedVersion); -} - - - -VersionSelectWidget::~VersionSelectWidget() -{ - delete ui; -} - diff --git a/Widgets/versionselectwidget.h b/Widgets/versionselectwidget.h deleted file mode 100644 index cb47045..0000000 --- a/Widgets/versionselectwidget.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef VERSIONSELECTWIDGET_H -#define VERSIONSELECTWIDGET_H - -#include -#include - -#include -#include -#include -#include -namespace Ui { -class VersionSelectWidget; -} - -class VersionSelectWidget : public QWidget -{ - Q_OBJECT - -public: - explicit VersionSelectWidget(QWidget *parent = nullptr); - - void initialize(SendSystem *sendSystem,VersionContainer *versionContainer,NotifyController *notifyController); - void fillView(QList *serverData); - - ~VersionSelectWidget(); -private slots: - void on_verListView_itemDoubleClicked(QListWidgetItem *item); - void on_createDuplicateButton_clicked(); - void on_DeleteVersionButton_clicked(); - void on_switchServerVersionButton_clicked(); - void sendCopyEmit(QString newName); - -signals: - void sigSendDeleteVersion(StreamingVersionData *streaming); - void sigSendSwitchVersion(StreamingVersionData *selectVersion); - void sigSendCopyVersion(QString versionPair); - void sigSendNotify(QString message); - -private: - Ui::VersionSelectWidget *ui; - SendSystem *sendSystem; - QList *serverDataList; - VersionContainer *versionContainer; - NotifyController *notifyController; - StreamingVersionData *selectedVersion; -}; - -#endif // VERSIONSELECTWIDGET_H diff --git a/Widgets/versionselectwidget.ui b/Widgets/versionselectwidget.ui deleted file mode 100644 index 8f00f27..0000000 --- a/Widgets/versionselectwidget.ui +++ /dev/null @@ -1,240 +0,0 @@ - - - VersionSelectWidget - - - - 0 - 0 - 786 - 229 - - - - - 0 - 0 - - - - Form - - - false - - - - - 0 - 0 - 301 - 171 - - - - - - - - Calibri - 12 - - - - Qt::PreventContextMenu - - - Доступные версии на сервере - - - - - - - - - - - - 0 - 180 - 781 - 41 - - - - - 6 - - - - - QLayout::SetMinimumSize - - - 0 - - - - - - 0 - 0 - - - - - 9 - - - - Создать копию - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 9 - - - - Удалить - - - - - - - - - - 0 - 0 - - - - - 9 - - - - Переключить версию сервера - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 170 - 20 - - - - - - - - - - 310 - 0 - 471 - 131 - - - - - QLayout::SetDefaultConstraint - - - - - - 0 - 0 - - - - Информация: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - - Тут будет информация о версии... - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - 310 - 140 - 471 - 31 - - - - - - - Текущая версия сервера: - - - - - - - none - - - - - - - - - diff --git a/Widgets/waitanimationwidget.cpp b/Widgets/waitanimationwidget.cpp index 159d59f..070cb29 100644 --- a/Widgets/waitanimationwidget.cpp +++ b/Widgets/waitanimationwidget.cpp @@ -9,10 +9,16 @@ WaitAnimationWidget::WaitAnimationWidget(QWidget *parent) : ui->setupUi(this); } -void WaitAnimationWidget::setMovie(QMovie *movie) +void WaitAnimationWidget::initialize(ResourceManager *resourceManager) { - ui->MovieLabel->setMovie(movie); - loadingMovie = movie; + loadingMovie = resourceManager->getMovie(); + ui->MovieLabel->setMovie(loadingMovie); +} + +void WaitAnimationWidget::slotActivateLoadingAnimation(bool flag) +{ + if (flag)showWithPlay(); + else hideWithStop(); } void WaitAnimationWidget::showWithPlay() @@ -31,3 +37,5 @@ WaitAnimationWidget::~WaitAnimationWidget() { delete ui; } + + diff --git a/Widgets/waitanimationwidget.h b/Widgets/waitanimationwidget.h index 9502d47..7c360d9 100644 --- a/Widgets/waitanimationwidget.h +++ b/Widgets/waitanimationwidget.h @@ -3,6 +3,7 @@ #include #include +#include namespace Ui { class WaitAnimationWidget; @@ -14,11 +15,14 @@ class WaitAnimationWidget : public QWidget public: explicit WaitAnimationWidget(QWidget *parent = nullptr); - void setMovie(QMovie *movie); + void initialize(ResourceManager *resourceManager); void showWithPlay(); void hideWithStop(); ~WaitAnimationWidget(); +public slots: + void slotActivateLoadingAnimation(bool flag); + private: Ui::WaitAnimationWidget *ui; QMovie *loadingMovie; diff --git a/bootstrap.cpp b/bootstrap.cpp new file mode 100644 index 0000000..41df1d8 --- /dev/null +++ b/bootstrap.cpp @@ -0,0 +1,21 @@ +#include "bootstrap.h" + +Bootstrap::Bootstrap(QObject *parent) : QObject(parent) +{ + widgetManager = new WidgetManager; + coreManager = new CoreManager; + workerThread = new QThread; + animationThread = new QThread; +} + +void Bootstrap::initialize() +{ + qRegisterMetaType("PacketType"); + + widgetManager->initialize(); + coreManager->initialize(widgetManager, workerThread); + + widgetManager->start(); +} + + diff --git a/bootstrap.h b/bootstrap.h new file mode 100644 index 0000000..fde6ed7 --- /dev/null +++ b/bootstrap.h @@ -0,0 +1,26 @@ +#ifndef BOOTSTRAP_H +#define BOOTSTRAP_H + +#include "coremanager.h" +#include "widgetmanager.h" + +#include + +class Bootstrap : public QObject +{ + Q_OBJECT +public: + explicit Bootstrap(QObject *parent = nullptr); + void initialize(); + ~Bootstrap(){} +signals: + +private: + CoreManager *coreManager; + WidgetManager *widgetManager; + + QThread *workerThread; + QThread *animationThread; +}; + +#endif // BOOTSTRAP_H diff --git a/coremanager.cpp b/coremanager.cpp new file mode 100644 index 0000000..844597c --- /dev/null +++ b/coremanager.cpp @@ -0,0 +1,387 @@ +#include "coremanager.h" + +CoreManager::CoreManager(QObject *parent) : + QObject(parent), + isRecovery(false) +{ + client = new TCPClient; + dataParser = new DataParser; + dataParserOutput = new DataParserOutput; + updateController = new UpdateController; + recognizeSystem = new RecognizeSystem; + screenChecker = new ScreenChecker; + externalExecuter = new ExternalExecuter; + sendSystem = new SendSystem; + hashComparer = new HashComparer; + versionContainer = new VersionContainer; + resourceManager = new ResourceManager; + postProcessorSystem = new PostProcessorSystem; +} + +void CoreManager::initialize(WidgetManager *widgetManager,QThread *workerThread) +{ + this->workerThread = workerThread; + this->widgetManager = widgetManager; + + client->moveToThread(workerThread); + dataParser->moveToThread(workerThread); + dataParserOutput->moveToThread(workerThread); + sendSystem->moveToThread(workerThread); + updateController->moveToThread(workerThread); + recognizeSystem->moveToThread(workerThread); + postProcessorSystem->moveToThread(workerThread); + hashComparer->moveToThread(workerThread); + versionContainer->moveToThread(workerThread); //проверить работоспособность + resourceManager->moveToThread(workerThread); //проверить работоспособность + + workerThread->start(); + //workerThread->setPriority(QThread::HighestPriority); + + binding(); + initializeSystems(); + initializeWidgets(); + + loadStaticData(); +} + +void CoreManager::loadStaticData() +{ + ServerSettings *currentSettings = dataParser->getClientSettings(); + setLanguage(currentSettings->Language); + + emit sigSetLoadSettings(currentSettings); +} + +void CoreManager::binding() +{ + connect(recognizeSystem,&RecognizeSystem::sigSetInineDebug,widgetManager,&WidgetManager::slotInlineDebug,Qt::AutoConnection); + connect(recognizeSystem,&RecognizeSystem::sigAnimationActivated,widgetManager,&WidgetManager::slotActivateLoadAnimation,Qt::AutoConnection); + + connect(this,&CoreManager::sigInitializeClient,client,&TCPClient::initialize,Qt::AutoConnection); + connect(this,&CoreManager::sigSetConnect,client,&TCPClient::setConnect,Qt::AutoConnection); + connect(this,&CoreManager::sigSendCommand,sendSystem,&SendSystem::sendPacketType,Qt::AutoConnection); + connect(this,&CoreManager::sigSendCheckUpdate,sendSystem,&SendSystem::sendCheckHash,Qt::AutoConnection); + connect(this,&CoreManager::sigSendXMLAnswer,sendSystem,&SendSystem::xmlAnswer,Qt::AutoConnection); + connect(this,&CoreManager::sigSendAutorization,sendSystem,&SendSystem::sendClientAutorization); + connect(this,&CoreManager::sigSendCheckUpdate,updateController,&UpdateController::checkCanUpdate,Qt::AutoConnection); + connect(this,&CoreManager::sigGetConnected,client,&TCPClient::getIsConnected); + connect(this,&CoreManager::sigCalculateHash,updateController,&UpdateController::calculateCommonHash); + + connect(this,&CoreManager::sigSetLoadSettings,widgetManager,&WidgetManager::slotSetLoadSettings,Qt::AutoConnection); + + connect(postProcessorSystem,&PostProcessorSystem::sigCallUpdateList,this,&CoreManager::callUpdateList,Qt::AutoConnection); + connect(postProcessorSystem,&PostProcessorSystem::sigSocketDisabled,this,&CoreManager::lostConnection,Qt::AutoConnection); + connect(postProcessorSystem,&PostProcessorSystem::sigServerBlocked,this,&CoreManager::serverBlocked,Qt::AutoConnection); + connect(postProcessorSystem,&PostProcessorSystem::sigStartCompare,hashComparer,&HashComparer::CompareDeltas,Qt::AutoConnection); // ОПАСНОСТЬ + connect(postProcessorSystem,&PostProcessorSystem::sigSaveLoginData,this,&CoreManager::checkLoginResult,Qt::AutoConnection); + connect(postProcessorSystem,&PostProcessorSystem::sigShowUpdateList,this,&CoreManager::checkUpdateInfo,Qt::AutoConnection); + + connect(versionContainer,&VersionContainer::sigSetServerVersion,this,&CoreManager::setServerVersion); + + connect(recognizeSystem,&RecognizeSystem::sigUpdateBytesAvailable,this,&CoreManager::calcUpdateProgress,Qt::AutoConnection); + connect(recognizeSystem,&RecognizeSystem::sigLoadComplete,this,&CoreManager::loadComplete); + connect(recognizeSystem,&RecognizeSystem::sigNeedUpdate,this,&CoreManager::checkNeedUpdate); + connect(recognizeSystem,&RecognizeSystem::sigCheckUpdate,this,&CoreManager::checkUpdate,Qt::AutoConnection); + + connect(hashComparer,&HashComparer::sigCallCheck,this,&CoreManager::checkUpdate); + connect(hashComparer,&HashComparer::sigHaveDelta,this,&CoreManager::checkUpdateInfo); + + connect(updateController,&UpdateController::sigUpdateComplete,widgetManager,&WidgetManager::setCompeteState);//ОПАСНОСТЬ + + connect(client,&TCPClient::sigConnectionState,widgetManager,&WidgetManager::setConnectionState,Qt::AutoConnection);//ОПАСНОСТЬ + connect(client,&TCPClient::sigServerDisconnect,widgetManager,&WidgetManager::setServerDisconnectState,Qt::AutoConnection);//ОПАСНОСТЬ + + connect(sendSystem,&SendSystem::sigSend,this,&CoreManager::calcUpdateProgress); + + connect(sendSystem,&SendSystem::sigGetXmlAnswer,dataParserOutput,&DataParserOutput::xmlAnswer_notify,Qt::DirectConnection);//ОПАСНОСТЬ + connect(dataParser,&DataParser::sigNotify,widgetManager->getNotifyController(),&NotifyController::showWarning,Qt::AutoConnection);//ОПАСНОСТЬ + connect(dataParser,&DataParser::sigUpdateFilesOnServer,updateController,&UpdateController::updateFilesOnServer,Qt::AutoConnection);//ОПАСНОСТЬ +} + +void CoreManager::initializeSystems() +{ + updateController->initialize(versionContainer,dataParserOutput,sendSystem); + screenChecker->initialize(dataParserOutput,widgetManager->getMainWindow()->getDisplayLayout()); + hashComparer->initialize(versionContainer,widgetManager->getUpdateWidget()); + postProcessorSystem->initialize(dataParserOutput,hashComparer,versionContainer,updateController); + dataParser->initialize(postProcessorSystem); + recognizeSystem->initialize(dataParser,versionContainer,postProcessorSystem); + resourceManager->painting(); + + emit sigCalculateHash(); + emit sigInitializeClient(recognizeSystem,sendSystem); + + screenChecker->check(); + + emit sigSetConnect(dataParser->getClientSettings()); +} + +void CoreManager::initializeWidgets() +{ + widgetManager->getMainWindow()->initialize(resourceManager); + widgetManager->getWaitAnimationWidget()->initialize(resourceManager); + widgetManager->getUpdateWidget()->setVersionContainer(versionContainer); + + connect(widgetManager->getUpdateWidget(),&UpdateNotifyWidget::sigLoadToServerBehaviour,this,&CoreManager::loadToServer,Qt::AutoConnection); + connect(widgetManager->getUpdateWidget(),&UpdateNotifyWidget::sigUndoCurrentChanges,this,&CoreManager::undoCurrentChanges,Qt::AutoConnection); + connect(widgetManager->getUpdateWidget(),&UpdateNotifyWidget::sigStartUnityClient,this,&CoreManager::startUnityClient,Qt::AutoConnection); + + connect(widgetManager->getEntryWidget(),&EntryWidget::sigTryLogin,this,&CoreManager::tryLogin,Qt::AutoConnection); + connect(widgetManager->getEntryWidget(),&EntryWidget::sigSaveServerSettings,this,&CoreManager::saveServerSettingsWithConnect,Qt::AutoConnection); + + connect(widgetManager->getInstructorButtonGroupWiget(),&InstructorButtonGroupWidget::sigLoadToServer,this,&CoreManager::loadToServer, Qt::AutoConnection); + connect(widgetManager->getInstructorButtonGroupWiget(),&InstructorButtonGroupWidget::sigUndoCurrentChanges,this,&CoreManager::undoCurrentChanges, Qt::AutoConnection); + connect(widgetManager->getInstructorButtonGroupWiget(),&InstructorButtonGroupWidget::sigStartUnityClient,this,&CoreManager::startUnityClient, Qt::AutoConnection); + + connect(widgetManager->getCommonButtonGroupWidget(),&CommonButtonGroupWidget::sigSendPacket,sendSystem,&SendSystem::sendPacketType,Qt::AutoConnection); + connect(widgetManager->getCommonButtonGroupWidget(),&CommonButtonGroupWidget::sigSendXMLAnswer,sendSystem,&SendSystem::xmlAnswer,Qt::AutoConnection); + connect(widgetManager->getCommonButtonGroupWidget(),&CommonButtonGroupWidget::sigStartUnityClient,this,&CoreManager::startUnityClient,Qt::AutoConnection); + + connect(widgetManager->getMainWindow(),&MainWindow::sigChangeLanguage,this,&CoreManager::setLanguage,Qt::AutoConnection); + connect(widgetManager->getMainWindow(),&MainWindow::sigShowUpdateInfo,this,&CoreManager::checkUpdateInfo,Qt::AutoConnection); + connect(widgetManager->getMainWindow(),&MainWindow::sigExit,this,&CoreManager::exit,Qt::AutoConnection); + connect(widgetManager->getMainWindow(),&MainWindow::sigTryLogin,this,&CoreManager::tryLogin,Qt::AutoConnection); + connect(widgetManager->getMainWindow(),&MainWindow::sigStartOffline,this,&CoreManager::startOffline,Qt::AutoConnection); + +} + +RecognizeSystem *CoreManager::getRecognizeSystem() const +{ + return recognizeSystem; +} + +void CoreManager::callUpdateList() +{ + emit sigSendXMLAnswer(cmd_GetServerHash); +} + +void CoreManager::lostConnection() +{ + widgetManager->setLostConnectionState(); +} + +void CoreManager::serverBlocked() +{ + widgetManager->getMainWindow()->serverBlocked(); +} + +void CoreManager::setServerVersion(StreamingVersionData *version) +{ + widgetManager->getMainWindow()->setServerVersion(version); +} + +void CoreManager::setLocalVersion() +{ + ServerSettings *currentSettings = dataParser->getClientSettings(); + StreamingVersionData *version = new StreamingVersionData; + version->setName(currentSettings->LocalVersionName); + version->setIsChangeable(currentSettings->versionData.getIsChangeable()); + + versionContainer->setLocalVersionData(version); +} + +void CoreManager::checkLoginResult(ServerAuthorization *auth) +{ + if (auth->Result) + { + checkAccessType(auth->AccessType); + dataParserOutput->createAuthData(auth); + setLocalVersion(); + widgetManager->setLoginSuccess(); + widgetManager->getMainWindow()->setClientVersionName(versionContainer->getLocalVersion()); + } + else + { + widgetManager->setLoginFailed(); + } + +} + +void CoreManager::tryLogin() +{ + if (!client->getIsConnected()) + { + widgetManager->getMainWindow()->showConnectionEmpty(); + return; + } + + widgetManager->getEntryWidget()->loginIsActive(false); + ClientAutorization *auth = widgetManager->getEntryWidget()->getAuthData(); + dataParserOutput->createAuthMessage(auth); + emit sigSendAutorization(); +} + +void CoreManager::checkUpdate() +{ + emit sigSendCheckUpdate(); + widgetManager->getMainWindow()->setInlineDebug(tr("Проверка обновлений...")); +} + +void CoreManager::checkAccessType(const QString& accessType) +{ + if (accessType == traineeTypeName) + { + checkUpdate(); + } + else + { + emit sigSendXMLAnswer(cmd_CheckVersionList); + } +} + +void CoreManager::checkUpdateInfo() +{ + fileCountForUpdate = hashComparer->getFileUpdateCount(); + widgetManager->showUpdateInfo(); +} + +void CoreManager::checkNeedUpdate(bool isNeedUpdate,quint64 size, quint64 fileCount,quint64 deleteCount) +{ + filesLoaded = 0; + fileCountForUpdate = fileCount; + QString availableSizeText; + + if (isNeedUpdate && isRecovery) + { + widgetManager->setRecoveryState(); + } + else if(isNeedUpdate) + { + widgetManager->setNeedUpdateState(size,fileCount,deleteCount); + setLocalVersion(); + } + else + { + widgetManager->setLastVersionState(); + checkAutoStart(); + dataParserOutput->changeVersion(versionContainer->getServerVersionData()); + setLocalVersion(); + } +} + +void CoreManager::calcUpdateProgress() +{ + filesLoaded++; + float value = 100 / ((float)fileCountForUpdate / filesLoaded); + widgetManager->getCommonButtonGroupWidget()->updateProgressBar(value); +} + +void CoreManager::checkAutoStart() +{ + if (externalExecuter->getIsAutoStart()) + { + startUnityClient(); + } +} + +void CoreManager::startUnityClient() +{ + externalExecuter->callApp(); + emit sigSendXMLAnswer(cmd_Disable); +} + +VersionContainer *CoreManager::getVersionContainer() const +{ + return versionContainer; +} + +void CoreManager::loadComplete() +{ + widgetManager->setLoadCompleteState(); + externalExecuter->findApp(); + externalExecuter->setIsAutoStart(widgetManager->getMainWindow()->getIsAutoStart()); + dataParserOutput->changeVersion(versionContainer->getServerVersionData()); + setLocalVersion(); + checkAutoStart(); +} + +void CoreManager::loadToServer() +{ + widgetManager->setSendFileToServerState(); + emit sigSendCheckUpdate(); +} + +void CoreManager::undoCurrentChanges() +{ + isRecovery = true; + emit sigSendCheckUpdate(); + widgetManager->setUndoCurrentChangesState(); + emit sigSendCommand(PacketType::TYPE_UPDATE); + //тут был таймер + isRecovery = false; + + widgetManager->activateLoadingAnimation(false); +} + +void CoreManager::startOffline() +{ + QString username = "offlineUser"; + QString password = "000000"; + + dataParserOutput->createAuthDataOffline(username,password); + startUnityClient(); +} + +void CoreManager::saveServerSettingsWithConnect() +{ + widgetManager->activateLoadingAnimation(true); + EntryWidget *entryWidget = widgetManager->getEntryWidget(); + + entryWidget->isActive(false); + ServerSettings *settings = entryWidget->getServerSettings(); + settings->LocalVersionName = dataParser->getClientSettings()->LocalVersionName; + dataParserOutput->createServerSettings(settings); + + if(client->getIsConnected()) + { + entryWidget->loginIsActive(true); + widgetManager->getMainWindow()->showOfflineButton(true); + widgetManager->activateLoadingAnimation(false); + } + else + { + emit sigSetConnect(settings); + } +} + +void CoreManager::checkAppAvailable() +{ + bool isAvailable = externalExecuter->findApp(); + widgetManager->activateStartButtons(isAvailable); +} + +void CoreManager::setLanguage(const QString& language) +{ + if (language == "RUS") + { + translator.load("QtLanguage_ru_RU","."); + } + else if(language == "ENG") + { + translator.load("QtLanguage_eng_EN","."); + } + qApp->installTranslator(&translator); + + dataParserOutput->saveClientSettings(language,widgetManager->getMainWindow()->getIsAutoStart()); +} + +void CoreManager::exit() +{ + emit sigSendXMLAnswer(cmd_Disable); + client->disconnect(); + + workerThread->quit(); + workerThread->wait(); + + delete workerThread; +} + +ResourceManager *CoreManager::getResourceManager() const +{ + return resourceManager; +} + +SendSystem *CoreManager::getSendSystem() const +{ + return sendSystem; +} diff --git a/coremanager.h b/coremanager.h new file mode 100644 index 0000000..df5cb0c --- /dev/null +++ b/coremanager.h @@ -0,0 +1,103 @@ +#ifndef COREMANAGER_H +#define COREMANAGER_H + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +class CoreManager : public QObject +{ + Q_OBJECT +public: + explicit CoreManager(QObject *parent = nullptr); + ~CoreManager(){} + void initialize(WidgetManager *widgetManager,QThread *workerThread); + void checkUpdateInfo(); + void checkAutoStart(); + void setLanguage(const QString &language); + + VersionContainer *getVersionContainer() const; + SendSystem *getSendSystem() const; + ResourceManager *getResourceManager() const; + RecognizeSystem *getRecognizeSystem() const; + + void loadToServer(); + void undoCurrentChanges(); + void startUnityClient(); + void tryLogin(); + void startOffline(); + + void saveServerSettingsWithConnect(); + + + void checkAppAvailable(); + void exit(); + void initializeWidgets(); + +signals: + void sigInitializeClient(RecognizeSystem *recognize,SendSystem *sendSystem); + void sigSendCommand(PacketType packetType); + void sigSendXMLAnswer(QString answer); + void sigSetConnect(ServerSettings* serverSettings); + void sigCalculateHash(); + void sigSendAutorization(); + void sigSendCheckUpdate(); + bool sigGetConnected(); + + void sigSetLoadSettings(ServerSettings *serverSettings); + +private: + QTranslator translator; + TCPClient *client; + DataParser *dataParser; + DataParserOutput *dataParserOutput; + UpdateController *updateController; + RecognizeSystem *recognizeSystem; + ScreenChecker *screenChecker; + ExternalExecuter *externalExecuter; + SendSystem *sendSystem; + HashComparer *hashComparer; + VersionContainer *versionContainer; + ResourceManager *resourceManager; + PostProcessorSystem *postProcessorSystem; + + WidgetManager *widgetManager; + + QThread *workerThread; + + quint16 fileCountForUpdate; + quint16 filesLoaded; + bool isRecovery; + bool autostart; + + + void loadStaticData(); + void binding(); + void initializeSystems(); + void callUpdateList(); + void lostConnection(); + void serverBlocked(); + void checkLoginResult(ServerAuthorization *auth); + void checkAccessType(const QString &accessType); + void setServerVersion(StreamingVersionData *version); + void calcUpdateProgress(); + void loadComplete(); + void setLocalVersion(); + void checkNeedUpdate(bool flag, quint64 size, quint64 fileCount, quint64 deleteCount); + void checkUpdate(); + +}; + +#endif // COREMANAGER_H diff --git a/main.cpp b/main.cpp index a08f5af..29fc11e 100644 --- a/main.cpp +++ b/main.cpp @@ -1,3 +1,4 @@ +#include "bootstrap.h" #include "mainwindow.h" #include @@ -12,9 +13,7 @@ int main(int argc, char *argv[]) file.open(QFile::ReadOnly); a.setStyleSheet(file.readAll()); a.setWindowIcon(QIcon(":/resource/Icons/planeCustom.png")); - MainWindow w; - - w.initialize(); - w.show(); + Bootstrap bootstrap; + bootstrap.initialize(); return a.exec(); } diff --git a/mainwindow.cpp b/mainwindow.cpp index b3d363d..4e3fe97 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -8,7 +8,6 @@ #include #include #include -#include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), @@ -17,70 +16,9 @@ MainWindow::MainWindow(QWidget *parent) offlinePosition(240,340,300,40) { ui->setupUi(this); - isRecovery = false; setAttribute(Qt::WA_TranslucentBackground); setWindowFlags(windowFlags() | Qt::FramelessWindowHint); _background.load(":/resource/SSJ_backgroundDarkSM.png"); -} - -void MainWindow::createObjects() -{ - qRegisterMetaType("PacketType"); - updateWidget = new UpdateNotifyWidget; - - QMutex *mutex = new QMutex; - QMutexLocker locker(mutex); - - updateWidget->setParent(this); - commonButtonGroupWidget = new CommonButtonGroupWidget; - instructorButtonGroup = new InstructorButtonGroupWidget; - - entryWidget = new EntryWidget; - versionSelectWidget = new VersionSelectWidget; - waitAnimationWidget = new WaitAnimationWidget; - waitAnimationWidget->setParent(this); - - ui->changButtonGroup->addWidget(commonButtonGroupWidget); - ui->interactiveGroup->addWidget(entryWidget); - - workerThread = new QThread; - animationThread = new QThread; - - client = new TCPClient; - client->moveToThread(workerThread); - - notifyController = new NotifyController; - notifyController->setParent(this); - - dataParser = new DataParser; - dataParser->moveToThread(workerThread); - - dataParserOutput = new DataParserOutput; - dataParser->moveToThread(workerThread); - - sendSystem = new SendSystem; - sendSystem->moveToThread(workerThread); - - updateController = new UpdateController(dataParserOutput,sendSystem); - updateController->moveToThread(workerThread); - - recognizeSystem = new RecognizeSystem; - recognizeSystem->moveToThread(workerThread); - - postProcessorSystem = new PostProcessorSystem; - postProcessorSystem->moveToThread(workerThread); - - screenChecker = new ScreenChecker(this,dataParserOutput,ui->displayLayout); - externalExecuter = new ExternalExecuter; - - hashComparer = new HashComparer(dataParser); - hashComparer->moveToThread(workerThread); - - versionContainer = new VersionContainer; - resourceManager = new ResourceManager; - - workerThread->start(); - workerThread->setPriority(QThread::HighestPriority); timer = new QTimer; } @@ -101,178 +39,53 @@ void MainWindow::paintEvent(QPaintEvent*) { } } -void MainWindow::initialize() +void MainWindow::initialize(ResourceManager *resourceManager) { - createObjects(); - loadStaticData(); bindConnection(); - - updateWidget->initialize(versionContainer,pos()); - entryWidget->initialize(); - versionSelectWidget->initialize(sendSystem,versionContainer,notifyController); - hashComparer->initialize(versionContainer); - updateController->initialize(versionContainer); - postProcessorSystem->initialize(dataParserOutput,hashComparer,versionContainer,updateController); - dataParser->initialize(postProcessorSystem); - recognizeSystem->initialize(dataParser, versionContainer, postProcessorSystem); - resourceManager->painting(); - commonButtonGroupWidget->initialize(externalExecuter,sendSystem); - commonButtonGroupWidget->show(); + this->resourceManager = resourceManager; ui->LanguageWidget->hide(); - setUpUi(); +} +void MainWindow::setStartState() +{ + show(); setInlineDebug(tr("Инициализация...")); - emit sigCalculateHash(); - emit sigInitializeClient(recognizeSystem,sendSystem); - - screenChecker->check(); - - emit sigSetConnect(dataParser->getClientSettings(),workerThread); - checkAppAvailable(); - - //post QString title = tr("Тренажер процедур технического обслуживания самолета RRJ-95NEW-100"); ui->headerLabel->setText(title); ui->versionLayoutWidget->hide(); + setUpUi(); } void MainWindow::bindConnection() { connect(timer,&QTimer::timeout,this,&MainWindow::slotDisableNotify); - - connect(this,&MainWindow::sigInitializeClient,client,&TCPClient::initialize,Qt::AutoConnection); - connect(this,&MainWindow::sigSetConnect,client,&TCPClient::setConnect,Qt::AutoConnection); - connect(this,&MainWindow::sigSendCommand,sendSystem,&SendSystem::sendPacketType,Qt::AutoConnection); - connect(this,&MainWindow::sigSendCheck,sendSystem,&SendSystem::sendCheckHash,Qt::AutoConnection); - connect(this,&MainWindow::sigSendXMLAnswer,sendSystem,&SendSystem::xmlAnswer,Qt::AutoConnection); - connect(this,&MainWindow::sigSendAutorization,sendSystem,&SendSystem::sendClientAutorization); - connect(this,&MainWindow::sigSendCheckUpdate,updateController,&UpdateController::checkCanUpdate,Qt::AutoConnection); - connect(this,&MainWindow::sigGetConnected,client,&TCPClient::getIsConnected); - connect(this,&MainWindow::sigCalculateHash,updateController,&UpdateController::calculateCommonHash); - - connect(postProcessorSystem,&PostProcessorSystem::sigCallUpdateList,this,&MainWindow::callUpdateList,Qt::AutoConnection); - connect(postProcessorSystem,&PostProcessorSystem::sigSocketDisabled,this,&MainWindow::lostConnection,Qt::AutoConnection); - connect(postProcessorSystem,&PostProcessorSystem::sigServerBlocked,this,&MainWindow::serverBlocked,Qt::AutoConnection); - connect(postProcessorSystem,&PostProcessorSystem::sigStartCompare,hashComparer,&HashComparer::CompareDeltas,Qt::AutoConnection); // ОПАСНОСТЬ - connect(postProcessorSystem,&PostProcessorSystem::sigSaveLoginData,this,&MainWindow::checkLoginResult,Qt::AutoConnection); - connect(postProcessorSystem,&PostProcessorSystem::sigShowUpdateList,this,&MainWindow::showUpdateInfo,Qt::AutoConnection); - - connect(versionContainer,&VersionContainer::sigSetServerVersion,this,&MainWindow::setServerVersion); - - connect(recognizeSystem,&RecognizeSystem::sigUpdateBytesAvailable,this,&MainWindow::updateProgress,Qt::AutoConnection); - connect(recognizeSystem,&RecognizeSystem::sigLoadComplete,this,&MainWindow::loadComplete); - connect(recognizeSystem,&RecognizeSystem::sigNeedUpdate,this,&MainWindow::setNeedUpdate); - connect(recognizeSystem,&RecognizeSystem::sigCheckUpdate,this,&MainWindow::checkUpdate,Qt::AutoConnection); - connect(recognizeSystem,&RecognizeSystem::sigSetInineDebug,this,&MainWindow::setInlineDebug,Qt::AutoConnection); - - connect(recognizeSystem,&RecognizeSystem::sigAnimationActivated,this,&MainWindow::activateLoadingAnimation,Qt::AutoConnection); - - connect(updateWidget,&UpdateNotifyWidget::sigLoadToServerBehaviour,this,&MainWindow::loadToServer,Qt::AutoConnection); - connect(updateWidget,&UpdateNotifyWidget::sigUndoCurrentChanges,this,&MainWindow::undoCurrentChanges,Qt::AutoConnection); - connect(updateWidget,&UpdateNotifyWidget::sigStartUnityClient,this,&MainWindow::startUnityClient,Qt::AutoConnection); - connect(updateWidget,&UpdateNotifyWidget::sigShowMainFrame,this,&MainWindow::showMainFrame,Qt::AutoConnection); - - connect(hashComparer,&HashComparer::sigCallCheck,this,&MainWindow::checkUpdate); - connect(hashComparer,&HashComparer::sigHaveDelta,this,&MainWindow::showUpdateInfo); - - connect(updateController,&UpdateController::sigUpdateComplete,this,&MainWindow::showCompleteDialogBox); - - connect(client,&TCPClient::sigConnectionState,this,&MainWindow::slotConnectionState,Qt::AutoConnection); - connect(client,&TCPClient::sigServerDisconnect,this,&MainWindow::slotServerDisconnect); - - connect(sendSystem,&SendSystem::sigSend,this,&MainWindow::updateProgress); - - connect(sendSystem,&SendSystem::sigGetXmlAnswer,dataParserOutput,&DataParserOutput::xmlAnswer_notify,Qt::DirectConnection);//ОПАСНОСТЬ - - connect(commonButtonGroupWidget,&CommonButtonGroupWidget::sigUpdateCommonWidget,this,&MainWindow::commonWidgetState); - connect(entryWidget,&EntryWidget::sigTryLogin,this,&MainWindow::login,Qt::AutoConnection); - connect(entryWidget,&EntryWidget::sigSaveServerSettings,this,&MainWindow::saveServerSettingsWithConnect,Qt::AutoConnection); - - connect(instructorButtonGroup,&InstructorButtonGroupWidget::sigLoadToServer,this,&MainWindow::loadToServer, Qt::AutoConnection); - connect(instructorButtonGroup,&InstructorButtonGroupWidget::sigUndoCurrentChanges,this,&MainWindow::undoCurrentChanges, Qt::AutoConnection); - connect(instructorButtonGroup,&InstructorButtonGroupWidget::sigStartUnityClient,this,&MainWindow::startUnityClient, Qt::AutoConnection); - - connect(dataParser,&DataParser::sigNotify,notifyController,&NotifyController::showWarning,Qt::AutoConnection);//ОПАСНОСТЬ - connect(dataParser,&DataParser::sigUpdateFilesOnServer,updateController,&UpdateController::updateFilesOnServer,Qt::AutoConnection);//ОПАСНОСТЬ } -void MainWindow::updateProgress() +void MainWindow::loadCompleteState() { - filesLoaded++; - float value = 100 / ((float)fileCountForUpdate / filesLoaded); - commonButtonGroupWidget->updateProgressBar(value); -} - -void MainWindow::loadComplete() -{ - externalExecuter->findApp(); - commonButtonGroupWidget->loadCompleteState(); - autoStart(); ui->inlineTextDebug->setText(tr("Обновление завершено")); ui->offlineStartButton->setEnabled(true); ui->autostartCheckBox->hide(); ui->offlineStartButton->show(); - - dataParserOutput->changeVersion(versionContainer->getServerVersionData()); - setTitle(); } -void MainWindow::setNeedUpdate(bool flag,quint64 size, quint64 fileCount,quint64 deleteCount) +bool MainWindow::getIsAutoStart() { - fileCountForUpdate = 0; - filesLoaded = 0; - fileCountForUpdate = fileCount; - QString availableSizeText; - - if (flag && isRecovery) - { - ui->inlineTextDebug->setText(tr("Восстановление версии...")); - - } - else if(flag) - { - QString result; - if(fileCount > 0) - { - result = tr("Доступно обновление: ") + Tools::convertFileSize(size); - //result += tr("Количество файлов: ") + QString::number(fileCount); - } - else - { - result = tr("Файлов к удалению: ") + QString::number(deleteCount); - } - - ui->inlineTextDebug->setText(result); - commonButtonGroupWidget->needUpdateState(flag); - ui->autostartCheckBox->show(); - activateLoadingAnimation(false); - setTitle(); - } - else - { - ui->inlineTextDebug->setText(tr("Установлена последняя версия")); - autoStart(); - commonButtonGroupWidget->lastVerInstalledState(); - ui->unsafeChangingButton->hide(); - ui->offlineStartButton->setEnabled(true); - dataParserOutput->changeVersion(versionContainer->getServerVersionData()); - activateLoadingAnimation(false); - setTitle(); - } + return ui->autostartCheckBox->isChecked(); } -void MainWindow:: showServerListWidget(QList *serverData) +void MainWindow::setLastVersionState() { - entryWidget->hide(); - activateLoadingAnimation(false); - versionSelectWidget->fillView(serverData); + setInlineDebug(tr("Установлена последняя версия")); + ui->unsafeChangingButton->hide(); + ui->offlineStartButton->setEnabled(true); } -void MainWindow::lostConnection() +void MainWindow::setNeedUpdateState(const QString& notifyText) { - commonButtonGroupWidget->updateProgressBar(0); - slotConnectionState(false); + setInlineDebug(notifyText); + ui->autostartCheckBox->show(); } void MainWindow::serverBlocked() @@ -287,109 +100,47 @@ void MainWindow::serverBlocked() timer->start(3000); } -void MainWindow::checkLoginResult(ServerAuthorization *serverAuth) +void MainWindow::setLoginSuccessState() { - if (serverAuth->Result) - { - - if (serverAuth->AccessType != "instructor") //временно для отладки загрузки на сервер - { - checkUpdate(); - } - else - { - emit sigSendXMLAnswer(cmd_CheckVersionList); - } - - dataParserOutput->createAuthData(serverAuth); - entryWidget->loginIsActive(false); - //ui->LanguageWidget->hide(); - ui->settingsButton->hide(); - ui->offlineStartButton->show(); - activateLoadingAnimation(true); - setTitle(); - } - else - { - entryWidget->loginIsActive(true); - ui->notificationLabel->setText(tr("Неверный логин/пароль")); - timer->setInterval(3000); - timer->start(); - - QPalette palette = ui->notificationLabel->palette(); - palette.setColor(ui->notificationLabel->foregroundRole(), Qt::red); - - ui->notificationLabel->setPalette(palette); - ui->notificationLabel->show(); - } - + ui->settingsButton->hide(); + ui->offlineStartButton->show(); + ui->versionLayoutWidget->show(); } -void MainWindow::checkAppAvailable() +void MainWindow::setLoginFailedState() +{ + ui->notificationLabel->setText(tr("Неверный логин/пароль")); + timer->setInterval(3000); + timer->start(); + + QPalette palette = ui->notificationLabel->palette(); + palette.setColor(ui->notificationLabel->foregroundRole(), Qt::red); + + ui->notificationLabel->setPalette(palette); + ui->notificationLabel->show(); +} + +void MainWindow::setStartOfflineButton(bool isAvailable) { - bool isAvailable = externalExecuter->findApp(); - commonButtonGroupWidget->startButtonActive(isAvailable); ui->offlineStartButton->setEnabled(isAvailable); } -void MainWindow::checkLanguage(QString language) +void MainWindow::setClientVersionName(const QString& versionName) { - if (language == "RUS") - { - translator.load("QtLanguage_ru_RU","."); - } - else if(language == "ENG") - { - translator.load("QtLanguage_eng_EN","."); - } - - qApp->installTranslator(&translator); - ui->retranslateUi(this); + ui->valueClientVersion->setText(versionName); } -void MainWindow::autoStart() -{ - if(ui->autostartCheckBox->isChecked()){ - startUnityClient(); - } -} - -void MainWindow::setTitle() -{ - ui->versionLayoutWidget->show(); - ServerSettings *currentSettings = dataParser->getClientSettings(); - StreamingVersionData *versionData = new StreamingVersionData; - versionData->setName(currentSettings->LocalVersionName); - versionData->setIsChangeable(currentSettings->versionData.getIsChangeable()); - versionContainer->setLocalVersionData(versionData); - - ui->valueClientVersion->setText(versionContainer->getLocalVersion()); - //title.append(" (" + currentSettings->LocalVersionName + ")"); -} - -void MainWindow::loadStaticData() -{ - ServerSettings *currentSettings = dataParser->getClientSettings(); - entryWidget->fillSettings(currentSettings); - ui->languageComboBox->setCurrentText(currentSettings->Language); - ui->autostartCheckBox->setChecked(currentSettings->isAutoStart); - - checkLanguage(currentSettings->Language); -} void MainWindow::showConnectionEmpty() { QPalette palette = ui->notificationLabel->palette(); palette.setColor(ui->notificationLabel->foregroundRole(),Qt::red); ui->notificationLabel->setText(tr("Соединение отсутсвует")); - entryWidget->connectionEmptyState(); - updateWidget->hide(); ui->offlineStartButton->show(); ui->offlineStartButton->setGeometry(offlinePosition); ui->offlineStartButton->raise(); ui->settingsButton->show(); ui->unsafeChangingButton->hide(); - versionSelectWidget->hide(); } void MainWindow::disableUnsaveButton(bool flag) @@ -404,14 +155,12 @@ void MainWindow::slotConnectionState(bool flag) QPalette palette = ui->notificationLabel->palette(); ui->versionLayoutWidget->hide(); - activateLoadingAnimation(false); setInlineDebug(""); if(flag) { palette.setColor(ui->notificationLabel->foregroundRole(),Qt::green); ui->notificationLabel->setText(tr("Соединение установлено")); - entryWidget->loginIsActive(true); ui->offlineStartButton->show(); ui->offlineStartButton->setGeometry(bottomRightPosition); @@ -427,7 +176,6 @@ void MainWindow::slotConnectionState(bool flag) void MainWindow::slotServerDisconnect() { - commonButtonGroupWidget->disconnectState(); ui->autostartCheckBox->hide(); ui->inlineTextDebug->setText(""); slotConnectionState(false); @@ -444,63 +192,23 @@ void MainWindow::slotDisableNotify() timer->stop(); } -void MainWindow::callUpdateList() +void MainWindow::showOfflineButton(bool flag) { - hashComparer->setWidget(updateWidget); - emit sigSendXMLAnswer(cmd_GetServerHash); -} - - -void MainWindow::login() -{ - if (!client->getIsConnected()) - { - showConnectionEmpty(); - return; - } - - entryWidget->loginIsActive(false); - ClientAutorization *autorization = entryWidget->getAuthData(); - dataParserOutput->createAuthMessage(autorization); - emit sigSendAutorization(); - -} - -void MainWindow::saveServerSettingsWithConnect() -{ - activateLoadingAnimation(true); - entryWidget->isActive(false); - ServerSettings *settings = entryWidget->getServerSettings(); - settings->LocalVersionName = dataParser->getClientSettings()->LocalVersionName; - dataParserOutput->createServerSettings(settings); - - if(client->getIsConnected()) - { - entryWidget->loginIsActive(true); + if (flag) ui->offlineStartButton->show(); - activateLoadingAnimation(false); - } else - { - emit sigSetConnect(settings,workerThread); - } - - //TODO: не заполняется 2 поля (автостарт и язык) - + ui->offlineStartButton->hide(); } void MainWindow::on_settingsButton_clicked() { - entryWidget->settingsState(); - entryWidget->isActive(true); + emit sigShowSettings(true); ui->offlineStartButton->hide(); } void MainWindow::on_languageComboBox_activated(const QString &arg1) { - qDebug() << arg1; - dataParserOutput->saveClientSettrings(arg1,ui->autostartCheckBox->isChecked()); - checkLanguage(arg1); + emit sigChangeLanguage(arg1); ui->retranslateUi(this); } @@ -508,96 +216,40 @@ void MainWindow::loadToServer() { ui->mainFrame->show(); ui->inlineTextDebug->setText(tr("Отправка файлов...")); - commonButtonGroupWidget->showProgressBar(true); ui->offlineStartButton->setEnabled(false); - updateWidget->hide(); ui->unsafeChangingButton->hide(); - - emit sigSendCheckUpdate(); } void MainWindow::undoCurrentChanges() { - isRecovery = true; - emit sigSendCheck(); ui->mainFrame->show(); - - commonButtonGroupWidget->showProgressBar(false); ui->offlineStartButton->setEnabled(false); - updateWidget->hide(); - - activateLoadingAnimation(true); - //delay QTime dieTime= QTime::currentTime().addSecs(10); while (QTime::currentTime() < dieTime) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); - activateLoadingAnimation(true); - - emit sigSendCommand(PacketType::TYPE_UPDATE); ui->unsafeChangingButton->hide(); - - isRecovery = false; - activateLoadingAnimation(false); } void MainWindow::on_unsafeChangingButton_clicked() { - showUpdateInfo(); - updateWidget->show(); + emit sigShowUpdateInfo(); } void MainWindow::on_exitButton_clicked() { - emit sigSendXMLAnswer(cmd_Disable); - client->disconnect(); - - workerThread->quit(); - workerThread->wait(); - - delete workerThread; + emit sigExit(); delete ui; exit(0); } -void MainWindow::checkUpdate() -{ - emit sigSendCheck(); - ui->inlineTextDebug->setText(tr("Проверка обновлений...")); -} - void MainWindow::showUpdateInfo() { - activateLoadingAnimation(false); - updateWidget->showWithFill(); - showMainFrame(false); ui->unsafeChangingButton->show(); - entryWidget->hide(); - commonButtonGroupWidget->show(); ui->offlineStartButton->setGeometry(bottomRightPosition); - fileCountForUpdate = hashComparer->getFileUpdateCount(); - - filesLoaded = 0; -} - -void MainWindow::showCompleteDialogBox() -{ - ui->inlineTextDebug->setText(tr("Загрузка завершена")); - activateLoadingAnimation(true); -} - -void MainWindow::startUnityClient() -{ - externalExecuter->callApp(); - emit sigSendXMLAnswer(cmd_Disable); -} - -void MainWindow::setCurrentVersionName(StreamingVersionData *version) -{ - versionContainer->setLocalVersionData(version); } void MainWindow::setUpUi() @@ -615,16 +267,12 @@ void MainWindow::setUpUi() ui->unsafeChangingButton->setIcon(*resourceManager->getUnsavedIcon()); ui->unsafeChangingButton->setIconSize(cautionIconSize); - waitAnimationWidget->setMovie(resourceManager->getMovie()); - QSize iconSize(20,20); ui->exitButton->setIcon(*resourceManager->getCloseIcon()); ui->exitButton->setIconSize(iconSize); ui->displayGroupWidget->show(); ui->autostartCheckBox->hide(); - - activateLoadingAnimation(true); } void MainWindow::commonWidgetState() @@ -637,20 +285,8 @@ void MainWindow::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) { - if (entryWidget->isLoginFieldsFill()) return; - login(); - } -} - -void MainWindow::activateLoadingAnimation(bool flag) -{ - if (flag) - { - waitAnimationWidget->showWithPlay(); - } - else - { - waitAnimationWidget->hideWithStop(); + emit sigTryLogin(); + //if (entryWidget->isLoginFieldsFill()) return; } } @@ -670,24 +306,30 @@ void MainWindow::setServerVersion(StreamingVersionData *version) ui->valueServerVersion->setText(version->getViewName()); } -MainWindow::~MainWindow() +QHBoxLayout *MainWindow::getDisplayLayout() const { - workerThread->quit(); - workerThread->wait(); + return ui->displayLayout; +} - emit sigSendXMLAnswer(cmd_Disable); +void MainWindow::addWidgetToChangeGroup(CommonButtonGroupWidget *commonWidgetGroup) +{ + ui->changButtonGroup->addWidget(commonWidgetGroup); +} - delete workerThread; - delete ui; +void MainWindow::addWidgetToInteractiveGroup(EntryWidget *entryWidget) +{ + ui->interactiveGroup->addWidget(entryWidget); +} + +void MainWindow::setLoadSettings(ServerSettings *serverSettings) +{ + ui->retranslateUi(this); + + ui->languageComboBox->setCurrentText(serverSettings->Language); + ui->autostartCheckBox->setChecked(serverSettings->isAutoStart); } void MainWindow::on_offlineStartButton_clicked() { - QString username = "offlineUser"; - QString password = "000000"; - - dataParserOutput->createAuthDataOffline(username,password); - startUnityClient(); - - + emit sigStartOffline(); } diff --git a/mainwindow.h b/mainwindow.h index 86c9642..14cadc9 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -3,23 +3,13 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include + #include -#include -#include #include -#include -#include +#include + +#include #include #include "mywinheader.h" @@ -34,113 +24,67 @@ class MainWindow : public QMainWindow public: MainWindow(QWidget *parent = nullptr); - void callUpdateList(); - void checkUpdate(); - ~MainWindow(); + ~MainWindow(){}; + + void initialize(ResourceManager *resourceManager); + void addWidgetToChangeGroup(CommonButtonGroupWidget *commonWidgetGroup); + void addWidgetToInteractiveGroup(EntryWidget *entryWidget); + void setLoadSettings(ServerSettings *serverSettings); + void setLoginSuccessState(); + void setLoginFailedState(); + void setClientVersionName(const QString &versionName); - void initialize(); - void bindConnection(); - void login(); - void saveServerSettingsWithConnect(); void loadToServer(); void undoCurrentChanges(); - void startUnityClient(); - void setCurrentVersionName(StreamingVersionData *version); void disableUnsaveButton(bool flag); - void activateLoadingAnimation(bool flag); void showMainFrame(bool flag); - - void showWarning(QString text); + void loadCompleteState(); void setInlineDebug(QString value); -signals: - void sigInitializeClient(RecognizeSystem *recognize,SendSystem *sendSystem); - void sigRecognize(UpdateController* updateController, - DataParser* dataParser, - MainWindow* mainWindow, - HashComparer* hashComparer, - TCPClient *tcpClient); - - void sigSendCommand(PacketType packetType); - void sigSendXMLAnswer(QString answer); - void sigSetConnect(ServerSettings* serverSettings,QThread *thread); - void sigCalculateHash(); - void sigSendAutorization(); - void sigSendCheck(); - bool sigGetConnected(); - void sigSendCheckUpdate(); - + bool getIsAutoStart(); + void setNeedUpdateState(const QString ¬ifyText); + void setLastVersionState(); + void showConnectionEmpty(); + void showOfflineButton(bool flag); + void setStartOfflineButton(bool isAvailable); + void setStartState(); + void serverBlocked(); + QHBoxLayout *getDisplayLayout() const; public slots: - void showUpdateInfo(); - void showCompleteDialogBox(); + void slotShowUpdateInfo(); void slotConnectionState(bool flag); void slotServerDisconnect(); - void updateProgress(); - void loadComplete(); - void lostConnection(); - void serverBlocked(); - void checkLoginResult(ServerAuthorization * serverAuth); - void setNeedUpdate(bool flag,quint64 size,quint64 fileCount,quint64 deleteCount); - void showServerListWidget(QList *serverData); + void slotCommonWidgetState(); + void setServerVersion(StreamingVersionData *version); +signals: + void sigShowSettings(bool isActive); + void sigChangeLanguage(const QString& arg1); + void sigShowUpdateInfo(); + void sigExit(); + void sigTryLogin(); + void sigStartOffline(); private slots: void on_settingsButton_clicked(); void on_languageComboBox_activated(const QString &arg1); - void slotDisableNotify(); void on_exitButton_clicked(); void on_offlineStartButton_clicked(); void on_unsafeChangingButton_clicked(); + void slotDisableNotify(); private: Ui::MainWindow *ui; - MyWinHeader *header; - UpdateNotifyWidget *updateWidget; - CommonButtonGroupWidget *commonButtonGroupWidget; - EntryWidget *entryWidget; - VersionSelectWidget *versionSelectWidget; - WaitAnimationWidget *waitAnimationWidget; - InstructorButtonGroupWidget *instructorButtonGroup; - - QTranslator translator; - TCPClient *client; - DataParser *dataParser; - DataParserOutput *dataParserOutput; - UpdateController *updateController; - RecognizeSystem *recognizeSystem; - ScreenChecker *screenChecker; - ExternalExecuter *externalExecuter; - SendSystem *sendSystem; - HashComparer *hashComparer; - VersionContainer *versionContainer; ResourceManager *resourceManager; - NotifyController *notifyController; - PostProcessorSystem *postProcessorSystem; - QThread *workerThread; - QThread *animationThread; QTimer *timer; - QList *updateList; - QPixmap _background; + QPixmap background; QRect bottomRightPosition; QRect offlinePosition; - - int fileCountForUpdate; - int filesLoaded; - bool isRecovery; - - void checkAppAvailable(); - void checkLanguage(QString language); - void autoStart(); - void loadStaticData(); void bindClient(); - void createObjects(); - void showConnectionEmpty(); - void setTitle(); + void bindConnection(); void setUpUi(); - void commonWidgetState(); - void setServerVersion(StreamingVersionData *version); void paintEvent(QPaintEvent *event); protected: virtual void keyPressEvent(QKeyEvent *event); diff --git a/widgetmanager.cpp b/widgetmanager.cpp new file mode 100644 index 0000000..2a722b0 --- /dev/null +++ b/widgetmanager.cpp @@ -0,0 +1,226 @@ + +#include "widgetmanager.h" + +WidgetManager::WidgetManager(QObject *parent) : QObject(parent) +{ + mainWindow = new MainWindow; + updateWidget = new UpdateNotifyWidget; + commonButtonGroupWidget = new CommonButtonGroupWidget; + entryWidget = new EntryWidget; + waitAnimationWidget = new WaitAnimationWidget; + instructorButtonGroupWiget = new InstructorButtonGroupWidget; + notifyController = new NotifyController; +} + + +void WidgetManager::initialize() +{ + updateWidget->setParent(mainWindow); + waitAnimationWidget->setParent(mainWindow); + notifyController->setParent(mainWindow); + + mainWindow->addWidgetToChangeGroup(commonButtonGroupWidget); + mainWindow->addWidgetToInteractiveGroup(entryWidget); + + updateWidget->initialize(mainWindow->pos()); + entryWidget->initialize(); + commonButtonGroupWidget->initialize(); + //activateLoadingAnimation(true); + + binding(); +} + +void WidgetManager::binding() +{ + connect(updateWidget,&UpdateNotifyWidget::sigShowMainFrame,this,&WidgetManager::showMainFrame,Qt::AutoConnection); + connect(commonButtonGroupWidget,&CommonButtonGroupWidget::sigUpdateCommonWidget,mainWindow,&MainWindow::commonWidgetState); + connect(mainWindow,&MainWindow::sigShowSettings,this,&WidgetManager::showSettings,Qt::AutoConnection); +} +void WidgetManager::slotSetLoadSettings(ServerSettings *settings) +{ + mainWindow->setLoadSettings(settings); + entryWidget->fillSettings(settings); +} + +void WidgetManager::setLostConnectionState() +{ + commonButtonGroupWidget->updateProgressBar(0); + mainWindow->slotConnectionState(false); + waitAnimationWidget->hideWithStop(); + entryWidget->connectionEmptyState(); + updateWidget->hide(); +} + +void WidgetManager::setLoginSuccess() +{ + entryWidget->loginIsActive(false); + mainWindow->setLoginSuccessState(); + activateLoadingAnimation(false); +} + +void WidgetManager::setLoginFailed() +{ + entryWidget->loginIsActive(true); + mainWindow->setLoginFailedState(); + activateLoadingAnimation(false); +} + +void WidgetManager::showUpdateInfo() +{ + waitAnimationWidget->hideWithStop(); + updateWidget->showWithFill(); + + mainWindow->showMainFrame(true); + mainWindow->showUpdateInfo(); + entryWidget->hide(); + commonButtonGroupWidget->hide(); +} + +void WidgetManager::setLoadCompleteState() +{ + commonButtonGroupWidget->loadCompleteState(); + mainWindow->loadCompleteState(); +} + +void WidgetManager::setCompeteState() +{ + mainWindow->setInlineDebug(tr("Загрузка завершена")); + waitAnimationWidget->hideWithStop(); +} + +void WidgetManager::activateLoadingAnimation(bool flag) +{ + if (flag) waitAnimationWidget->showWithPlay(); + else waitAnimationWidget->hideWithStop(); +} + +void WidgetManager::setNeedUpdateState(quint64 size, quint64 fileCount,quint64 deleteCount) +{ + QString result; + if(fileCount > 0) + { + result = tr("Доступно обновление: ") + Tools::convertFileSize(size); + //result += tr("Количество файлов: ") + QString::number(fileCount); + } + else + { + result = tr("Файлов к удалению: ") + QString::number(deleteCount); + } + + mainWindow->setNeedUpdateState(result); + commonButtonGroupWidget->needUpdateState(true); + waitAnimationWidget->hideWithStop(); + +} + +void WidgetManager::setRecoveryState() +{ + mainWindow->setInlineDebug(tr("Восстановление версии...")); +} + +void WidgetManager::setLastVersionState() +{ + mainWindow->setLastVersionState(); + commonButtonGroupWidget->lastVerInstalledState(); + waitAnimationWidget->hideWithStop(); +} + +void WidgetManager::setConnectionState(bool isConnected) +{ + mainWindow->slotConnectionState(isConnected); + if (isConnected) + { + entryWidget->loginIsActive(true); + } + waitAnimationWidget->hideWithStop(); +} + +void WidgetManager::setSendFileToServerState() +{ + mainWindow->loadToServer(); + commonButtonGroupWidget->showProgressBar(true); + updateWidget->hide(); +} + +void WidgetManager::start() +{ + waitAnimationWidget->showWithPlay(); + mainWindow->setStartState(); + waitAnimationWidget->hideWithStop(); +} + +void WidgetManager::setServerDisconnectState() +{ + commonButtonGroupWidget->disconnectState(); + mainWindow->slotServerDisconnect(); +} + +void WidgetManager::setUndoCurrentChangesState() +{ + mainWindow->undoCurrentChanges(); + commonButtonGroupWidget->showProgressBar(false); + updateWidget->hide(); + waitAnimationWidget->showWithPlay(); +} + +void WidgetManager::showMainFrame(bool flag) +{ + mainWindow->showMainFrame(flag); +} + +void WidgetManager::activateStartButtons(bool isAvailable) +{ + commonButtonGroupWidget->startButtonActive(isAvailable); + mainWindow->setStartOfflineButton(isAvailable); +} + +void WidgetManager::showSettings(bool isActive) +{ + entryWidget->settingsState(); + entryWidget->isActive(isActive); +} + +void WidgetManager::slotInlineDebug(const QString& text) +{ + mainWindow->setInlineDebug(text); +} + +void WidgetManager::slotActivateLoadAnimation(bool flag) +{ + waitAnimationWidget->slotActivateLoadingAnimation(flag); +} + +NotifyController *WidgetManager::getNotifyController() const +{ + return notifyController; +} + +MainWindow *WidgetManager::getMainWindow() const +{ + return mainWindow; +} + +UpdateNotifyWidget *WidgetManager::getUpdateWidget() const +{ + return updateWidget; +} + +CommonButtonGroupWidget *WidgetManager::getCommonButtonGroupWidget() const +{ + return commonButtonGroupWidget; +} + +EntryWidget *WidgetManager::getEntryWidget() const +{ + return entryWidget; +} + +WaitAnimationWidget *WidgetManager::getWaitAnimationWidget() const +{ + return waitAnimationWidget; +} + +InstructorButtonGroupWidget *WidgetManager::getInstructorButtonGroupWiget() const +{ + return instructorButtonGroupWiget; +} diff --git a/widgetmanager.h b/widgetmanager.h new file mode 100644 index 0000000..17c7216 --- /dev/null +++ b/widgetmanager.h @@ -0,0 +1,69 @@ +#ifndef WIDGETMANAGER_H +#define WIDGETMANAGER_H + +#include "mainwindow.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +class WidgetManager : public QObject +{ + Q_OBJECT +public: + explicit WidgetManager(QObject *parent = nullptr); + + void initialize(); + MainWindow *getMainWindow() const; + UpdateNotifyWidget *getUpdateWidget() const; + CommonButtonGroupWidget *getCommonButtonGroupWidget() const; + EntryWidget *getEntryWidget() const; + WaitAnimationWidget *getWaitAnimationWidget() const; + InstructorButtonGroupWidget *getInstructorButtonGroupWiget() const; + NotifyController *getNotifyController() const; + + + void setLostConnectionState(); + void setLoginSuccess(); + void setLoginFailed(); + void showUpdateInfo(); + void setLoadCompleteState(); + void setNeedUpdateState(quint64 size, quint64 fileCount,quint64 deleteCount); + void setRecoveryState(); + void setLastVersionState(); + void activateLoadingAnimation(bool flag); + void setCompeteState(); + void setConnectionState(bool isConnected); + void setServerDisconnectState(); + void setSendFileToServerState(); + void start(); + + void setUndoCurrentChangesState(); + void showMainFrame(bool flag); + void activateStartButtons(bool isAvailable); + void slotInlineDebug(const QString &text); +public slots: + void showSettings(bool isActive); + void slotSetLoadSettings(ServerSettings *settings); + void slotActivateLoadAnimation(bool flag); +signals: + +private: + MainWindow *mainWindow; + UpdateNotifyWidget *updateWidget; + CommonButtonGroupWidget *commonButtonGroupWidget; + EntryWidget *entryWidget; + WaitAnimationWidget *waitAnimationWidget; + InstructorButtonGroupWidget *instructorButtonGroupWiget; + NotifyController *notifyController; + + void binding(); + +}; + +#endif // WIDGETMANAGER_H