diff --git a/DOCS/Алексей/Board.md b/DOCS/Алексей/Board.md index 5507615..59fe3b9 100644 --- a/DOCS/Алексей/Board.md +++ b/DOCS/Алексей/Board.md @@ -13,6 +13,7 @@ kanban-plugin: board ## bugs - [ ] При старт стопе не сканится шэред дата +- [ ] GUI server: при неподключенном сервере, отключать попытку изменить версию ## feature client Unity diff --git a/InstructorsAndTrainees/CMakeLists.txt b/InstructorsAndTrainees/CMakeLists.txt index 8e13872..bb9f9f3 100644 --- a/InstructorsAndTrainees/CMakeLists.txt +++ b/InstructorsAndTrainees/CMakeLists.txt @@ -60,7 +60,12 @@ add_library(InstructorsAndTrainees SHARED connectorToServer/Core/tools.cpp connectorToServer/Core/tools.h connectorToServer/Core/FileData.h + connectorToServer/Core/notifycontroller.cpp + connectorToServer/Core/notifycontroller.h + connectorToServer/Core/versioncontainer.cpp + connectorToServer/Core/versioncontainer.h connectorToServer/Datas.h + connectorToServer/streamingversiondata.h messanger/messangerwidget.cpp messanger/messangerwidget.h messanger/messangerwidget.ui @@ -74,6 +79,16 @@ add_library(InstructorsAndTrainees SHARED docTasks/fimtaskswidget.ui docTasks/tasksAmmFim.cpp docTasks/tasksAmmFim.h + widgets/newversionwidget.cpp + widgets/newversionwidget.h + widgets/newversionwidget.ui + widgets/versionselectwidget.cpp + widgets/versionselectwidget.h + widgets/versionselectwidget.ui + widgets/waitanimationwidget.cpp + widgets/waitanimationwidget.h + widgets/waitanimationwidget.ui + resources.qrc ) diff --git a/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp b/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp index 1a1a735..82ebfbf 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp @@ -6,6 +6,7 @@ #include "instructor.h" #include "trainee.h" #include "group.h" +#include "streamingversiondata.h" #include @@ -327,7 +328,8 @@ ServerSettings *DataParser::getServerSettings() if(xmlReader.isStartElement()){ - if(xmlReader.name() == "ServerSettings"){ + if(xmlReader.name() == "ServerSettings") + { foreach(const QXmlStreamAttribute &attr, xmlReader.attributes()){ QString name = attr.name().toString(); diff --git a/InstructorsAndTrainees/connectorToServer/Core/notifycontroller.cpp b/InstructorsAndTrainees/connectorToServer/Core/notifycontroller.cpp new file mode 100644 index 0000000..7c09e24 --- /dev/null +++ b/InstructorsAndTrainees/connectorToServer/Core/notifycontroller.cpp @@ -0,0 +1,16 @@ +#include "notifycontroller.h" + +NotifyController::NotifyController(QObject *parent) : QObject(parent) +{ + +} + +void NotifyController::showWarning(QString text) +{ + QMessageBox warning; + warning.setText(text); + + warning.setIcon(QMessageBox::Warning); + warning.setWindowTitle(tr("Ошибка")); + warning.exec(); +} diff --git a/InstructorsAndTrainees/connectorToServer/Core/notifycontroller.h b/InstructorsAndTrainees/connectorToServer/Core/notifycontroller.h new file mode 100644 index 0000000..1b08ef9 --- /dev/null +++ b/InstructorsAndTrainees/connectorToServer/Core/notifycontroller.h @@ -0,0 +1,18 @@ +#ifndef NOTIFYCONTROLLER_H +#define NOTIFYCONTROLLER_H + +#include +#include + +class NotifyController : public QObject +{ + Q_OBJECT +public: + explicit NotifyController(QObject *parent = nullptr); + + void showWarning(QString text); +signals: + +}; + +#endif // NOTIFYCONTROLLER_H diff --git a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp index 05adfa5..4764af1 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp @@ -254,6 +254,17 @@ void RecognizeSystem::recognize(QTcpSocket *socket) packetType = PacketType::TYPE_NONE; } + + if(packetType == PacketType::BUSY) + { + emit sigAnimationActivated(true); + } + + if(packetType == PacketType::FREE) + { + emit sigAnimationActivated(false); + } + //xml-ответы на запросы к БД switch(packetType) { @@ -337,6 +348,21 @@ void RecognizeSystem::xmlParser(QByteArray array) { emit sigStartCompare(); } + + if (value == "BASEDELETETRY") + { + emit sigNotify(tr("Нельзя удалять базовую версию")); + } + + if (value == "TRYACTIVEDELETE") + { + emit sigNotify(tr("Нельзя удалять активную версию")); + } + + if (value == "DUPLICATEVERNAME") + { + emit sigNotify(tr("Такое имя уже существет")); + } } } } @@ -414,6 +440,74 @@ void RecognizeSystem::xmlParser(QByteArray array) } emit sigDeAuth(serverDeAuth); + + } + + + if(xmlReader.name() == "VersionList") + { + QList *serverStreamingVersionDataList = new QList; + xmlReader.readNext(); + + while (!xmlReader.atEnd()) + { + if(xmlReader.isStartElement()) + { + if(xmlReader.name() == "VersionData") + { + StreamingVersionData *data = new StreamingVersionData; + + foreach(const QXmlStreamAttribute &attr,xmlReader.attributes()) + { + QString name = attr.name().toString(); + QString value = attr.value().toString(); + + if(name == "Version") + data->setName(value); + else if(name == "Created") + data->setCreateData(QDateTime::fromString(value)); + else if(name == "isChangeable") + { + data->setIsChangeable(value.toInt()); + } + } + + serverStreamingVersionDataList->append(data); + } + } + + xmlReader.readNext(); + } + + emit sigShowServerDataList(serverStreamingVersionDataList); + } + + if(xmlReader.name() == "VersionData") + { + StreamingVersionData *serverVersion = new StreamingVersionData; + foreach(const QXmlStreamAttribute &attr,xmlReader.attributes()) + { + QString name = attr.name().toString(); + QString value = attr.value().toString(); + + if (name == "Version") + { + serverVersion->setName(value); + } + + if (name == "Created") + { + serverVersion->setCreateData(QDateTime::fromString(value)); + } + + if (name == "isChangeable") + { + serverVersion->setIsChangeable(value.toInt()); + } + + } + + emit sigSetVersion(serverVersion); } xmlReader.readNext(); diff --git a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h index a01e22d..961f334 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h +++ b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h @@ -4,6 +4,7 @@ #include #include #include +#include //#include #include #include "dataparser.h" @@ -48,9 +49,12 @@ signals: void sigAnswerQueryToDB_ListComputers(QList listComputers); void sigAnswerQueryToDB_ListClassrooms(QList listClassrooms); void sigAnswerQueryToDB_ListTasks(QList listTasks); - void sigAnswerQueryTasksXML_FIM(QList listTaskFim); void sigAnswerQueryTasksXML_AMM(QList listTaskAmm); + void sigShowServerDataList(QList *versions); + void sigSetVersion(StreamingVersionData* serverVersion); + void sigNotify(QString text); + void sigAnimationActivated(bool flag); private: QList *folderList; diff --git a/InstructorsAndTrainees/connectorToServer/Core/sendsystem.cpp b/InstructorsAndTrainees/connectorToServer/Core/sendsystem.cpp index 051dbf2..dadaaf7 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/sendsystem.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/sendsystem.cpp @@ -129,6 +129,43 @@ void SendSystem::sendFinish() socket->waitForReadyRead(100); } +void SendSystem::sendChangeVersion(StreamingVersionData *streamingVersion) +{ + QDataStream stream(socket); + stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); + stream << PacketType::CHANGE_DATA_VERSION; + stream << streamingVersion->getViewName(); + + socket->waitForReadyRead(100); +} + +void SendSystem::sendDeleteVersion(StreamingVersionData *streamingVersion) +{ + QDataStream stream(socket); + stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); + stream << PacketType::DELETE_DATA_VERSION; + stream << streamingVersion->getViewName(); + + socket->waitForReadyRead(100); +} + +void SendSystem::sendCopyVersion(QString versionName) +{ + QDataStream stream(socket); + stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); + stream << PacketType::COPY_VERSION; + + stream << versionName; +} + +void SendSystem::sendPacketType(PacketType packetType) +{ + QDataStream stream(socket); + QByteArray data; + stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); + + stream << packetType; +} SendSystem::~SendSystem() { diff --git a/InstructorsAndTrainees/connectorToServer/Core/sendsystem.h b/InstructorsAndTrainees/connectorToServer/Core/sendsystem.h index b260776..1e22eef 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/sendsystem.h +++ b/InstructorsAndTrainees/connectorToServer/Core/sendsystem.h @@ -5,6 +5,9 @@ #include #include +#include +#include "Core/tools.h" + class SendSystem :public QObject { Q_OBJECT @@ -19,6 +22,10 @@ public: void sendXMLAnswer(QByteArray array); ~SendSystem(); void sendFinish(); + void sendChangeVersion(StreamingVersionData *streamingVersion); + void sendDeleteVersion(StreamingVersionData *streamingVersion); + void sendCopyVersion(QString versionName); + void sendPacketType(PacketType packetType); signals: void sigSend(); diff --git a/InstructorsAndTrainees/connectorToServer/Core/tools.h b/InstructorsAndTrainees/connectorToServer/Core/tools.h index d64b155..cb040f0 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/tools.h +++ b/InstructorsAndTrainees/connectorToServer/Core/tools.h @@ -19,6 +19,8 @@ static QString displayTemp = staticDataFolderName + "/displayData.xml"; static QString streamingHashFilename = staticDataFolderName + "/streamingHash.xml"; static QString serverHash = staticDataFolderName + "/serverHash.xml"; +static QString cmd_CheckVersionList = "CHECKVERSIONLIST"; + enum PacketType{ TYPE_NONE = 0, TYPE_UNITY = 1, @@ -31,6 +33,7 @@ enum PacketType{ TYPE_XMLANSWER = 8, TYPE_QT = 9, TYPE_DISABLE = 11, + TYPE_CHECKVERSION = 13, TYPE_XMLANSWER_MESSAGE_FOR_GUI = 90, @@ -44,7 +47,14 @@ enum PacketType{ //xml-ответы на запросы AdditionalFiles TYPE_XMLANSWER_QUERY_TASKS_XML_FIM = 130, - TYPE_XMLANSWER_QUERY_TASKS_XML_AMM = 131 + TYPE_XMLANSWER_QUERY_TASKS_XML_AMM = 131, + + HASH_READY = 150, + CHANGE_DATA_VERSION = 151, + COPY_VERSION = 152, + DELETE_DATA_VERSION = 153, + BUSY = 154, + FREE = 155 }; Q_DECLARE_METATYPE(PacketType) diff --git a/InstructorsAndTrainees/connectorToServer/Core/versioncontainer.cpp b/InstructorsAndTrainees/connectorToServer/Core/versioncontainer.cpp new file mode 100644 index 0000000..1c8bd1c --- /dev/null +++ b/InstructorsAndTrainees/connectorToServer/Core/versioncontainer.cpp @@ -0,0 +1,42 @@ +#include "versioncontainer.h" + +VersionContainer::VersionContainer(QObject *parent) : + QObject(parent) +{ + +} + +VersionContainer::~VersionContainer() +{ + +} + +QString VersionContainer::getServerVersion() const +{ + return serverVersionData->getViewName(); +} + +QString VersionContainer::getLocalVersion() const +{ + return localVersionData->getViewName(); +} + +StreamingVersionData *VersionContainer::getLocalVersionData() const +{ + return localVersionData; +} + +void VersionContainer::setLocalVersionData(StreamingVersionData *value) +{ + localVersionData = value; +} + +StreamingVersionData *VersionContainer::getServerVersionData() const +{ + return serverVersionData; +} + +void VersionContainer::setServerVersionData(StreamingVersionData *value) +{ + serverVersionData = value; +} diff --git a/InstructorsAndTrainees/connectorToServer/Core/versioncontainer.h b/InstructorsAndTrainees/connectorToServer/Core/versioncontainer.h new file mode 100644 index 0000000..8b12c77 --- /dev/null +++ b/InstructorsAndTrainees/connectorToServer/Core/versioncontainer.h @@ -0,0 +1,30 @@ +#ifndef VERSIONCONTAINER_H +#define VERSIONCONTAINER_H + +#include +#include "connectorToServer/streamingversiondata.h" + +class VersionContainer : public QObject +{ + Q_OBJECT +public: + explicit VersionContainer(QObject *parent = nullptr); + ~VersionContainer(); + + QString getServerVersion() const; + QString getLocalVersion() const; + + + StreamingVersionData *getLocalVersionData() const; + void setLocalVersionData(StreamingVersionData *value); + + StreamingVersionData *getServerVersionData() const; + void setServerVersionData(StreamingVersionData *value); + +private: + StreamingVersionData *localVersionData; + StreamingVersionData *serverVersionData; + +}; + +#endif // VERSIONCONTAINER_H diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp index de0f798..7742ca5 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp @@ -7,7 +7,11 @@ ConnectorToServer::ConnectorToServer(QObject *parent) : client(nullptr), dataParser(nullptr), sendSystem(nullptr), - recognizeSystem(nullptr) + recognizeSystem(nullptr), + versionSelectWidget(nullptr), + versionContainer(nullptr), + notifyController(nullptr), + waitAnimationWidget(nullptr) { initialize(); } @@ -96,6 +100,7 @@ bool ConnectorToServer::sendQueryTasksXML(QString type) void ConnectorToServer::SetConnectToServer() { emit sigSetConnect(dataParser->getServerSettings(),connectionThread); + } QList ConnectorToServer::getListTaskFim() @@ -249,6 +254,12 @@ int ConnectorToServer::getIdTraineeByLogin(QString login) return 0; } +void ConnectorToServer::showVersionSelect() +{ + QByteArray answer = dataParser->xmlAnswer_notify(cmd_CheckVersionList); + emit sigSendAnswerToServer(answer); +} + /* void ConnectorToServer::slot_AnswerQueryToDB(QList* listInstructors, QList* listTrainees, @@ -316,6 +327,11 @@ void ConnectorToServer::slot_msgToClientReady(QString login, QString text) sendMessageForClient(id, login, text); } +void ConnectorToServer::showServerList(QList *serverList) +{ + versionSelectWidget->fillView(serverList); +} + void ConnectorToServer::initialize() { createObjects(); @@ -325,6 +341,22 @@ void ConnectorToServer::initialize() emit sigInitializeClient(recognizeSystem,sendSystem,connectionThread); emit sigSetConnect(dataParser->getServerSettings(),connectionThread); + +// QByteArray answer = dataParser->xmlAnswer_notify() +// sendSystem->sendXMLAnswer() + +} + +void ConnectorToServer::activateLoadAnimation(bool flag) +{ + if (flag) + { + waitAnimationWidget->showWithPlay(); + } + else + { + waitAnimationWidget->hideWithStop(); + } } void ConnectorToServer::bindConnection() @@ -332,10 +364,13 @@ void ConnectorToServer::bindConnection() connect(this,&ConnectorToServer::sigInitializeClient,client,&TCPClient::initialize,Qt::AutoConnection); connect(this,&ConnectorToServer::sigSetConnect,client,&TCPClient::setConnect,Qt::AutoConnection); connect(this,&ConnectorToServer::signal_sendXMLmsgGUItoServer,sendSystem,&SendSystem::sendXMLmsgGUItoServer); + connect(this,&ConnectorToServer::sigSendAnswerToServer,sendSystem,&SendSystem::sendXMLAnswer,Qt::AutoConnection); connect(recognizeSystem,&RecognizeSystem::sigAuth,this,&ConnectorToServer::sigLoginResult); connect(recognizeSystem,&RecognizeSystem::sigDeAuth,this,&ConnectorToServer::sigDeLoginResult); connect(recognizeSystem,&RecognizeSystem::signal_MessageForGUI,this,&ConnectorToServer::signal_msgFromClientReady); + connect(recognizeSystem,&RecognizeSystem::sigShowServerDataList,this,&ConnectorToServer::showServerList); + connect (recognizeSystem,&RecognizeSystem::sigSetVersion,versionContainer,&VersionContainer::setServerVersionData); //connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB,this,&ConnectorToServer::slot_AnswerQueryToDB); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListInstructors,this,&ConnectorToServer::slot_AnswerQueryToDB_ListInstructors); @@ -347,8 +382,11 @@ void ConnectorToServer::bindConnection() connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_FIM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_FIM); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_AMM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_AMM); + connect(recognizeSystem,&RecognizeSystem::sigAnimationActivated,this,&ConnectorToServer::activateLoadAnimation,Qt::AutoConnection); - connect(client,&TCPClient::signal_ConnectedToServer,this,&ConnectorToServer::signal_ConnectedToServer); + connect(client,&TCPClient::signal_ConnectedToServer,this,&ConnectorToServer::signal_ConnectedToServer,Qt::AutoConnection); + + connect(recognizeSystem,&RecognizeSystem::sigNotify,notifyController,&NotifyController::showWarning,Qt::AutoConnection); } void ConnectorToServer::createObjects() @@ -360,12 +398,25 @@ void ConnectorToServer::createObjects() dataParser = new DataParser; + waitAnimationWidget = new WaitAnimationWidget; + sendSystem = new SendSystem; sendSystem->moveToThread(connectionThread); recognizeSystem = new RecognizeSystem; recognizeSystem->moveToThread(connectionThread); + notifyController = new NotifyController; + versionContainer = new VersionContainer; + versionSelectWidget = new VersionSelectWidget; + versionSelectWidget->initialize(sendSystem,versionContainer,notifyController); + + QMovie *movie = new QMovie(":/resources/icons/762.gif"); + + waitAnimationWidget->setParent(versionSelectWidget); + waitAnimationWidget->initialize(movie,versionSelectWidget); + waitAnimationWidget->moveToThread(connectionThread); + connectionThread->start(); connectionThread->setPriority(QThread::HighestPriority); } diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.h b/InstructorsAndTrainees/connectorToServer/connectortoserver.h index 9f158c7..5167542 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.h +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.h @@ -2,6 +2,8 @@ #define CONNECTORTOSERVER_H #include +#include +#include #include "Core\tcpclient.h" #include "Core\dataparser.h" #include "Core\sendsystem.h" @@ -12,6 +14,7 @@ #include "computer.h" #include "classroom.h" #include "task.h" +#include "streamingversiondata.h" class ConnectorToServer : public QObject { @@ -54,7 +57,9 @@ public: Group getGroup(int id); int getIdTraineeByLogin(QString login); + void showVersionSelect(); + void activateLoadAnimation(bool flag); public slots: /*void slot_AnswerQueryToDB(QList* listInstructors, QList* listTrainees, @@ -71,6 +76,7 @@ public slots: void slot_AnswerQueryTasksXML_AMM(QList listTaskAmm); void slot_msgToClientReady(QString login, QString text); + void showServerList(QList *serverList); signals: void sigSetConnect(ServerSettings* serverSettings,QThread *thread); @@ -93,6 +99,7 @@ signals: void signal_InitMessanger(QList listTrainees); void signal_msgFromClientReady(QString login, QString text); + void sigSendAnswerToServer(QByteArray array); private: @@ -106,6 +113,10 @@ private: DataParser *dataParser; SendSystem *sendSystem; RecognizeSystem *recognizeSystem; + VersionSelectWidget *versionSelectWidget; + VersionContainer *versionContainer; + NotifyController *notifyController; + WaitAnimationWidget *waitAnimationWidget; //Списочная модель БД СУО QList listInstructors; diff --git a/InstructorsAndTrainees/connectorToServer/streamingversiondata.h b/InstructorsAndTrainees/connectorToServer/streamingversiondata.h new file mode 100644 index 0000000..d190385 --- /dev/null +++ b/InstructorsAndTrainees/connectorToServer/streamingversiondata.h @@ -0,0 +1,74 @@ +#ifndef STREAMINGVERSIONDATA_H +#define STREAMINGVERSIONDATA_H + +#include +#include + +class StreamingVersionData +{ +public: + + StreamingVersionData(){} + + StreamingVersionData(QString absoltePath,QString viewName,QDateTime data,qint32 size) + { + this->absolutePath = absoltePath; + this->viewName = viewName; + this->createData = data; + this->size = size; + } + + void setName(QString viewName) + { + this->viewName = viewName; + } + + void setCreateData(QDateTime data) + { + this->createData = data; + } + + ~StreamingVersionData(); + + QString getAbsolutPath() const + { + return absolutePath; + } + + QString getViewName() const + { + return viewName; + } + + QDateTime getCreateData() const + { + return createData; + } + + qint32 getSize() const + { + return size; + } + + bool getIsChangeable() const + { + return isChangeable; + } + void setIsChangeable(bool value) + { + isChangeable = value; + } + + +private: + QString absolutePath; + QString viewName; + QDateTime createData; + bool isChangeable; + qint32 size; +}; + +#endif // STREAMINGVERSIONDATA_H + + + diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index d849704..42bda85 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -68,7 +68,7 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : ui->verticalLayout_1->addWidget(viewerInstructors); ui->verticalLayout_2->addWidget(docTasksWidget); ui->verticalLayout_2->addWidget(fIMtasksWidget); - + ui->btnSetVersion->hide(); viewerTrainees->setMinimumHeight(800); viewerInstructors->setMinimumSize(1800, 300); messangerWidget->setMinimumSize(500, 600); @@ -170,7 +170,7 @@ void InstructorsAndTraineesWidget::checkLoginResult(ServerAuthorization *serverA viewerTrainees->setAuthComplited(true); Q_EMIT signal_NeedUpdateUI(true, true); - + ui->btnSetVersion->show(); ui->btnAuthorizationInstructor->setText(tr("Deauthorization Instructor")); updateLabelLoggedInInstructor(serverAuth->Login, serverAuth->ClientName); @@ -200,7 +200,6 @@ void InstructorsAndTraineesWidget::checkDeLoginResult(ServerDeAuthorization *ser Q_EMIT signal_NeedUpdateUI(true, false); ui->btnAuthorizationInstructor->setText(tr("Authorization Instructor")); - updateLabelLoggedInInstructor("",""); QMessageBox::information(this, tr("Instructor deauthorization"), tr("Successfully!")); @@ -225,7 +224,7 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state) {//Сервер отключен ui->btnConnectionToServer->setEnabled(true); ui->btnAuthorizationInstructor->setEnabled(false); - + ui->btnSetVersion->hide(); ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png"))); } } @@ -325,3 +324,8 @@ void InstructorsAndTraineesWidget::on_btnUpdateStyleSheet_clicked() { updateMyStyleSheet(); } + +void InstructorsAndTraineesWidget::on_btnSetVersion_clicked() +{ + connectorToServer->showVersionSelect(); +} diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.h b/InstructorsAndTrainees/instructorsandtraineeswidget.h index 5f0beaa..29e524d 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.h +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.h @@ -63,6 +63,8 @@ private Q_SLOTS: void on_btnAuthorizationInstructor_clicked(); void on_btnUpdateStyleSheet_clicked(); + void on_btnSetVersion_clicked(); + private: //Авторизация инструктора локальная bool authorizationInstructorDialog(QWidget* parent = nullptr); diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.ui b/InstructorsAndTrainees/instructorsandtraineeswidget.ui index 164f714..7b72e42 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.ui +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.ui @@ -203,6 +203,19 @@ + + + + + 58 + 58 + + + + ChangeVersion + + + diff --git a/InstructorsAndTrainees/resources.qrc b/InstructorsAndTrainees/resources.qrc index 56c11bf..d15df9e 100644 --- a/InstructorsAndTrainees/resources.qrc +++ b/InstructorsAndTrainees/resources.qrc @@ -40,5 +40,6 @@ resources/icons/task.png resources/icons/procedure.png resources/icons/malfunction.png + resources/icons/762.gif diff --git a/InstructorsAndTrainees/resources/icons/762.gif b/InstructorsAndTrainees/resources/icons/762.gif new file mode 100644 index 0000000..d1a1bca Binary files /dev/null and b/InstructorsAndTrainees/resources/icons/762.gif differ diff --git a/InstructorsAndTrainees/widgets/newversionwidget.cpp b/InstructorsAndTrainees/widgets/newversionwidget.cpp new file mode 100644 index 0000000..980781e --- /dev/null +++ b/InstructorsAndTrainees/widgets/newversionwidget.cpp @@ -0,0 +1,37 @@ +#include "newversionwidget.h" +#include "ui_newversionwidget.h" + +NewVersionWidget::NewVersionWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::NewVersionWidget) +{ + ui->setupUi(this); + setWindowFlags(Qt::SubWindow); + setAttribute(Qt::WA_ShowModal,true); +} + +void NewVersionWidget::initialize(VersionSelectWidget *versionSelectWidget, QString prevName) +{ + this->versionSelectWidget = versionSelectWidget; + ui->prevVerValue->setText(prevName); +} + + +void NewVersionWidget::on_createButton_clicked() +{ + if(ui->lineEdit->text() != "") + { + versionSelectWidget->sendCopyEmit(ui->lineEdit->text()); + hide(); + } +} + +void NewVersionWidget::on_cancelButton_clicked() +{ + hide(); +} + +NewVersionWidget::~NewVersionWidget() +{ + delete ui; +} diff --git a/InstructorsAndTrainees/widgets/newversionwidget.h b/InstructorsAndTrainees/widgets/newversionwidget.h new file mode 100644 index 0000000..dbc62e5 --- /dev/null +++ b/InstructorsAndTrainees/widgets/newversionwidget.h @@ -0,0 +1,31 @@ +#ifndef NEWVERSIONWIDGET_H +#define NEWVERSIONWIDGET_H + +#include +#include + +namespace Ui { +class NewVersionWidget; +} + +class VersionSelectWidget; +class NewVersionWidget : public QWidget +{ + Q_OBJECT + +public: + explicit NewVersionWidget(QWidget *parent = nullptr); + void initialize(VersionSelectWidget *versionSelectWidget,QString prevName); + ~NewVersionWidget(); + +private slots: + void on_createButton_clicked(); + + void on_cancelButton_clicked(); + +private: + Ui::NewVersionWidget *ui; + VersionSelectWidget *versionSelectWidget; +}; + +#endif // NEWVERSIONWIDGET_H diff --git a/InstructorsAndTrainees/widgets/newversionwidget.ui b/InstructorsAndTrainees/widgets/newversionwidget.ui new file mode 100644 index 0000000..9ba102e --- /dev/null +++ b/InstructorsAndTrainees/widgets/newversionwidget.ui @@ -0,0 +1,219 @@ + + + NewVersionWidget + + + + 0 + 0 + 325 + 200 + + + + + 0 + 0 + + + + Создать копию... + + + true + + + + + + + + + true + + + + 0 + 0 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + 0 + + + + Базовая версия: + + + + + + + TextLabel + + + + + + + + + 6 + + + 5 + + + 5 + + + 20 + + + 5 + + + + + Новое название: + + + + + + + + 0 + 0 + + + + + 150 + 30 + + + + + 60 + 30 + + + + + + + + + + 6 + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Создать + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Отмена + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 40 + 20 + + + + + + + + + + + + + + diff --git a/InstructorsAndTrainees/widgets/versionselectwidget.cpp b/InstructorsAndTrainees/widgets/versionselectwidget.cpp new file mode 100644 index 0000000..2f76f3c --- /dev/null +++ b/InstructorsAndTrainees/widgets/versionselectwidget.cpp @@ -0,0 +1,107 @@ +#include "versionselectwidget.h" +#include "ui_versionselectwidget.h" +#include "ui_versionselectwidget.h" + +#include + +VersionSelectWidget::VersionSelectWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::VersionSelectWidget), + selectedVersion(nullptr) +{ + ui->setupUi(this); + setWindowFlags(Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint); + setAttribute(Qt::WA_ShowModal,true); +} + +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(); + setWindowTitle(tr("Управление версиями")); +} + +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(this,selectedVersion->getViewName()); + newVersionWidget->show(); +} + +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/InstructorsAndTrainees/widgets/versionselectwidget.h b/InstructorsAndTrainees/widgets/versionselectwidget.h new file mode 100644 index 0000000..b2dedb7 --- /dev/null +++ b/InstructorsAndTrainees/widgets/versionselectwidget.h @@ -0,0 +1,50 @@ +#ifndef VERSIONSELECTWIDGET_H +#define VERSIONSELECTWIDGET_H + +#include +#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); + void sendCopyEmit(QString newName); + + ~VersionSelectWidget(); +private slots: + void on_verListView_itemDoubleClicked(QListWidgetItem *item); + void on_createDuplicateButton_clicked(); + void on_DeleteVersionButton_clicked(); + void on_switchServerVersionButton_clicked(); + +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/InstructorsAndTrainees/widgets/versionselectwidget.ui b/InstructorsAndTrainees/widgets/versionselectwidget.ui new file mode 100644 index 0000000..6dbca69 --- /dev/null +++ b/InstructorsAndTrainees/widgets/versionselectwidget.ui @@ -0,0 +1,239 @@ + + + VersionSelectWidget + + + + 0 + 0 + 606 + 229 + + + + + 0 + 0 + + + + Form + + + false + + + + + 0 + 0 + 301 + 171 + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + Calibri + 12 + + + + Qt::PreventContextMenu + + + Доступные версии на сервере + + + + + + + + + + + + 0 + 180 + 601 + 41 + + + + + 6 + + + + + QLayout::SetMinimumSize + + + 5 + + + 0 + + + + + + 0 + 0 + + + + + 9 + + + + Создать копию + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 9 + + + + Удалить + + + + + + + + + + 0 + 0 + + + + + 9 + + + + Переключить версию сервера + + + + + + + + + 310 + 0 + 291 + 131 + + + + + QLayout::SetDefaultConstraint + + + + + + 0 + 0 + + + + Информация: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + Тут будет информация о версии... + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + 310 + 140 + 291 + 31 + + + + + + + Текущая версия сервера: + + + + + + + none + + + + + + + + + diff --git a/InstructorsAndTrainees/widgets/waitanimationwidget.cpp b/InstructorsAndTrainees/widgets/waitanimationwidget.cpp new file mode 100644 index 0000000..547a79f --- /dev/null +++ b/InstructorsAndTrainees/widgets/waitanimationwidget.cpp @@ -0,0 +1,35 @@ +#include "waitanimationwidget.h" +#include "ui_waitanimationwidget.h" + +WaitAnimationWidget::WaitAnimationWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::WaitAnimationWidget), + loadingMovie(nullptr) +{ + ui->setupUi(this); +} + +void WaitAnimationWidget::initialize(QMovie *movie,QWidget *parent) +{ + ui->MovieLabel->setMovie(movie); + loadingMovie = movie; + setFixedSize(parent->width(),parent->height()); + hide(); +} + +void WaitAnimationWidget::showWithPlay() +{ + show(); + loadingMovie->start(); +} + +void WaitAnimationWidget::hideWithStop() +{ + hide(); + loadingMovie->stop(); +} + +WaitAnimationWidget::~WaitAnimationWidget() +{ + delete ui; +} diff --git a/InstructorsAndTrainees/widgets/waitanimationwidget.h b/InstructorsAndTrainees/widgets/waitanimationwidget.h new file mode 100644 index 0000000..e9ea6a9 --- /dev/null +++ b/InstructorsAndTrainees/widgets/waitanimationwidget.h @@ -0,0 +1,27 @@ +#ifndef WAITANIMATIONWIDGET_H +#define WAITANIMATIONWIDGET_H + +#include +#include + +namespace Ui { +class WaitAnimationWidget; +} + +class WaitAnimationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit WaitAnimationWidget(QWidget *parent = nullptr); + void initialize(QMovie *movie,QWidget *parent); + void showWithPlay(); + void hideWithStop(); + ~WaitAnimationWidget(); + +private: + Ui::WaitAnimationWidget *ui; + QMovie *loadingMovie; +}; + +#endif // WAITANIMATIONWIDGET_H diff --git a/InstructorsAndTrainees/widgets/waitanimationwidget.ui b/InstructorsAndTrainees/widgets/waitanimationwidget.ui new file mode 100644 index 0000000..4819a89 --- /dev/null +++ b/InstructorsAndTrainees/widgets/waitanimationwidget.ui @@ -0,0 +1,73 @@ + + + WaitAnimationWidget + + + + 0 + 0 + 635 + 293 + + + + + 0 + 0 + + + + Form + + + false + + + background-color:rgba(0,0,0,50%); + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + 0 + 0 + + + + background-color:rgba(0,0,0,50%) + + + + + + :/resources/icons/762.gif + + + Qt::AlignCenter + + + + + + + + + + + +