diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp index 301e84b..fa413dc 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp @@ -102,10 +102,20 @@ void ConnectorToServer::setLoginName(QString name) versionSelectWidget->setAuthor(name); } +ServerSettings ConnectorToServer::getServerSettings() +{ + return serverSettings; +} + +bool ConnectorToServer::getIsConnected() +{ + return client->getIsConnected(); +} + void ConnectorToServer::SetConnectToServer() { + serverSettings = *dataParser->getServerSettings(); emit sigSetConnect(dataParser->getServerSettings(),connectionThread); - } QByteArray ConnectorToServer::getListTaskFimArray() diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.h b/InstructorsAndTrainees/connectorToServer/connectortoserver.h index c235ddf..bda85da 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.h +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.h @@ -15,6 +15,7 @@ #include "computer.h" #include "classroom.h" #include "streamingversiondata.h" +#include "Datas.h" class ConnectorToServer : public QObject { @@ -62,6 +63,9 @@ public: void activateLoadAnimation(bool flag); void setLoginName(QString name); + + ServerSettings getServerSettings(); + bool getIsConnected(); public slots: /*void slot_AnswerQueryToDB(QList* listInstructors, QList* listTrainees, @@ -105,8 +109,7 @@ signals: void signal_InitMessanger(QList listTrainees); void signal_msgFromClientReady(QString login, QString text); - void sigSendAnswerToServer(QByteArray array); - + void sigSendAnswerToServer(QByteArray array); private: void initialize(); @@ -135,6 +138,8 @@ private: QByteArray listTaskFimArray; QByteArray listTaskAmmArray; + + ServerSettings serverSettings; }; #endif // CONNECTORTOSERVER_H diff --git a/InstructorsAndTrainees/dialogsettings.cpp b/InstructorsAndTrainees/dialogsettings.cpp index ae0d4a7..138e56a 100644 --- a/InstructorsAndTrainees/dialogsettings.cpp +++ b/InstructorsAndTrainees/dialogsettings.cpp @@ -1,21 +1,66 @@ #include "dialogsettings.h" #include "ui_dialogsettings.h" +#include "tools.h" +#include +#include +#include -DialogSettings::DialogSettings(QWidget *parent) : +DialogSettings::DialogSettings(bool serverIsConnected, QWidget *parent) : QDialog(parent), - ui(new Ui::DialogSettings) + ui(new Ui::DialogSettings), + settings(nullptr) { ui->setupUi(this); - ui->btnUpdateStyle->setObjectName("btnUpdateStyle"); + ui->btnSave->setObjectName("btnSave"); + + + /* Создаем строку для регулярного выражения */ + QString ipRange = "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])"; + /* Создаем регулярное выражение с применением строки, как + * повторяющегося элемента + */ + QRegExp ipRegex ("^" + ipRange + + "\\." + ipRange + + "\\." + ipRange + + "\\." + ipRange + "$"); + /* Создаем Валидатор регулярного выражения с применением + * созданного регулярного выражения + */ + QRegExpValidator *ipValidator = new QRegExpValidator(ipRegex, this); + /* Устанавливаем Валидатор на QLineEdit */ + ui->editAddress->setValidator(ipValidator); + + + settings = new ServerSettings; //Задаём два пункта с текстом локалей в комбобоксе ui->cmbLanguage->addItems(QStringList() << "English" << "Русский"); + + if(loadSettings()) + { + if(settings->Language == "ENG") + ui->cmbLanguage->setCurrentText("English"); + else + ui->cmbLanguage->setCurrentText("Русский"); + + ui->editAddress->setText(settings->Address); + ui->editPort->setText(settings->Port); + ui->checkAutoStart->setChecked(settings->isAutoStart); + } + + if(serverIsConnected) + { + ui->editAddress->setEnabled(false); + ui->editPort->setEnabled(false); + ui->checkAutoStart->setEnabled(false); + } } DialogSettings::~DialogSettings() { delete ui; + delete settings; } void DialogSettings::changeEvent(QEvent *event) @@ -29,17 +74,128 @@ void DialogSettings::changeEvent(QEvent *event) void DialogSettings::on_cmbLanguage_currentIndexChanged(const QString &arg1) { - QString language; - if(arg1 == QStringLiteral("English")) - language = QString("en_EN"); - else - language = QString("ru_RU"); - - emit signal_LanguageChanged(language); } void DialogSettings::on_btnUpdateStyle_clicked() { emit signal_UpdateStyleSheet(); } + +bool DialogSettings::loadSettings() +{ + QFile file(settingsName); + if(! file.open(QIODevice::ReadOnly)) + return false; + + QXmlStreamReader xmlReader(&file); + + while (!xmlReader.atEnd()){ + + if(xmlReader.isStartElement()){ + + if(xmlReader.name() == "ServerSettings") + { + + foreach(const QXmlStreamAttribute &attr, xmlReader.attributes()){ + QString name = attr.name().toString(); + QString value = attr.value().toString(); + + if(name == "Address"){ + settings->Address = value; + } + + if(name == "Port"){ + settings->Port = value; + } + + if(name == "Language"){ + settings->Language = value; + } + + if(name == "AutoStart"){ + settings->isAutoStart = value.toInt(); + } + + } + } + } + + xmlReader.readNext(); + } + + file.close(); + + return true; +} + +bool DialogSettings::saveSettings() +{ + QFile file(settingsName); + + if(! file.open(QIODevice::WriteOnly)) + return false; + + QXmlStreamWriter xmlWriter(&file); + + xmlWriter.setAutoFormatting(true); + xmlWriter.writeStartDocument(); + + xmlWriter.writeStartElement("ServerSettingsContainer"); + xmlWriter.writeStartElement("ServerSettings"); + + xmlWriter.writeAttribute("Address", settings->Address); + xmlWriter.writeAttribute("Port", settings->Port); + xmlWriter.writeAttribute("Language", settings->Language); + xmlWriter.writeAttribute("AutoStart", QString::number(settings->isAutoStart)); + + xmlWriter.writeEndElement(); + xmlWriter.writeEndElement(); + + xmlWriter.writeEndDocument(); + + file.close(); + + return true; +} + +void DialogSettings::on_btnSave_clicked() +{ + if(ui->cmbLanguage->currentText() == QStringLiteral("English")) + { + settings->Language = "ENG"; + } + else + { + settings->Language = "RUS"; + } + + settings->Address = ui->editAddress->text(); + settings->Port = ui->editPort->text(); + settings->isAutoStart = ui->checkAutoStart->isChecked(); + + saveSettings(); + + QString language; + + if(settings->Language == "ENG") + language = QString("en_EN"); + else + language = QString("ru_RU"); + + emit signal_LanguageChanged(language); + + this->close(); +} + +void DialogSettings::on_DialogSettings_rejected() +{ + QString language; + + if(settings->Language == "ENG") + language = QString("en_EN"); + else + language = QString("ru_RU"); + + emit signal_LanguageChanged(language); +} diff --git a/InstructorsAndTrainees/dialogsettings.h b/InstructorsAndTrainees/dialogsettings.h index cfcd813..874fd7e 100644 --- a/InstructorsAndTrainees/dialogsettings.h +++ b/InstructorsAndTrainees/dialogsettings.h @@ -4,6 +4,7 @@ #include #include #include +#include "Datas.h" namespace Ui { class DialogSettings; @@ -14,7 +15,7 @@ class DialogSettings : public QDialog Q_OBJECT public: - explicit DialogSettings(QWidget *parent = nullptr); + explicit DialogSettings(bool serverIsConnected, QWidget *parent = nullptr); ~DialogSettings(); protected: @@ -28,12 +29,21 @@ signals: private slots: void on_cmbLanguage_currentIndexChanged(const QString &arg1); - void on_btnUpdateStyle_clicked(); + void on_btnSave_clicked(); + + void on_DialogSettings_rejected(); + +private: + bool loadSettings(); + bool saveSettings(); + private: Ui::DialogSettings *ui; QTranslator qtLanguageTranslator; + + ServerSettings *settings; }; #endif // DIALOGSETTINGS_H diff --git a/InstructorsAndTrainees/dialogsettings.ui b/InstructorsAndTrainees/dialogsettings.ui index 2aca2a7..8788199 100644 --- a/InstructorsAndTrainees/dialogsettings.ui +++ b/InstructorsAndTrainees/dialogsettings.ui @@ -13,6 +13,10 @@ Settings + + + :/resources/icons/settings.png:/resources/icons/settings.png + @@ -44,7 +48,128 @@ - + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Server + + + + + + + + + + Address + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 150 + 16777215 + + + + + + + + + + + + Port + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 70 + 16777215 + + + + + + + + + + + + Auto Start + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + @@ -60,7 +185,33 @@ - + + + + + + 58 + 58 + + + + Save + + + + :/resources/icons/circleGreen.png:/resources/icons/circleGreen.png + + + + 32 + 32 + + + + Qt::ToolButtonTextUnderIcon + + + diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index a542075..b0c4309 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -37,6 +37,10 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : qDebug() << "InstructorsAndTraineesWidget init thread ID " << QThread::currentThreadId(); + updateMyStyleSheet(); + + on_btnSettings_clicked(); + connectorToServer = new ConnectorToServer(this); connect(connectorToServer,&ConnectorToServer::sigLoginResult,this,&InstructorsAndTraineesWidget::checkLoginResult); connect(connectorToServer,&ConnectorToServer::sigDeLoginResult,this,&InstructorsAndTraineesWidget::checkDeLoginResult); @@ -108,9 +112,7 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : ui->btnAuthorizationInstructor->setEnabled(false); - ui->btnAssignTask->setEnabled(false); - - updateMyStyleSheet(); + ui->btnAssignTask->setEnabled(false); } InstructorsAndTraineesWidget::~InstructorsAndTraineesWidget() @@ -147,6 +149,7 @@ void InstructorsAndTraineesWidget::changeEvent(QEvent *event) */ updateLabelLoggedInInstructor(loginInstructorLoggedInLocal, nameInstructorLoggedInLocal); + updateLabelServer(); } } @@ -262,6 +265,9 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state) ui->btnAuthorizationInstructor->setEnabled(true); ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGreen.png"))); + + ServerSettings serverSettings = connectorToServer->getServerSettings(); + ui->lblServer->setText(serverSettings.Address + ":" +serverSettings.Port); } else {//Сервер отключен @@ -271,6 +277,7 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state) ui->btnAuthorizationInstructor->setChecked(false); ui->btnSetVersion->hide(); ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png"))); + ui->lblServer->setText(tr("none")); viewerInstructors->setAuthComplited(false); viewerTrainees->setAuthComplited(false); @@ -414,6 +421,20 @@ void InstructorsAndTraineesWidget::updateLabelLoggedInInstructor(QString login, } } +void InstructorsAndTraineesWidget::updateLabelServer() +{ + if(!connectorToServer) + return; + + if(connectorToServer->getIsConnected()) + { + ServerSettings serverSettings = connectorToServer->getServerSettings(); + ui->lblServer->setText(serverSettings.Address + ":" +serverSettings.Port); + } + else + ui->lblServer->setText(tr("none")); +} + void InstructorsAndTraineesWidget::on_btnSetVersion_clicked() { connectorToServer->showVersionSelect(); @@ -449,7 +470,11 @@ void InstructorsAndTraineesWidget::on_tabWidget_currentChanged(int index) void InstructorsAndTraineesWidget::on_btnSettings_clicked() { - DialogSettings dlg(this); + bool serverIsConnected = false; + if(connectorToServer) + serverIsConnected = connectorToServer->getIsConnected(); + + DialogSettings dlg(serverIsConnected, this); connect(&dlg, &DialogSettings::signal_LanguageChanged, this, &InstructorsAndTraineesWidget::slot_LanguageChanged); connect(&dlg, &DialogSettings::signal_UpdateStyleSheet, this, &InstructorsAndTraineesWidget::slot_UpdateStyleSheet); diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.h b/InstructorsAndTrainees/instructorsandtraineeswidget.h index 205c460..b659ac5 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.h +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.h @@ -86,6 +86,7 @@ private: bool deAuthorizationInstructor(QString login); bool authorizationIsCompleted(); void updateLabelLoggedInInstructor(QString login, QString name); + void updateLabelServer(); private: Ui::InstructorsAndTraineesWidget *ui; diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.ui b/InstructorsAndTrainees/instructorsandtraineeswidget.ui index 6c16896..1226e2d 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.ui +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.ui @@ -104,6 +104,20 @@ + + + + Server: + + + + + + + none + + + diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp index 9866334..1c34827 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp @@ -114,7 +114,13 @@ void AMMtasksWidget::changeEvent(QEvent *event) reSetHeadTreeWidget(); - //slot_NeedUpdateUI(); + if(type == TypeList::listCommon) + { + //slot_NeedUpdateUI(); + } + else if(type == TypeList::listForTrainee) + if(idTraineeSelected) + slot_UpdateTasksAMMforTrainee(idTraineeSelected); } } diff --git a/InstructorsAndTrainees/tasks/fimtaskswidget.cpp b/InstructorsAndTrainees/tasks/fimtaskswidget.cpp index 84fb28a..c73b51d 100644 --- a/InstructorsAndTrainees/tasks/fimtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/fimtaskswidget.cpp @@ -113,7 +113,13 @@ void FIMtasksWidget::changeEvent(QEvent *event) reSetHeadTreeWidget(); - //slot_NeedUpdateUI(); + if(type == TypeList::listCommon) + { + //slot_NeedUpdateUI(); + } + else if(type == TypeList::listForTrainee) + if(idTraineeSelected) + fillTree(); } }