From bd0f52c6136113b360b5eb12043fd3f86f95ebf0 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Mon, 17 Nov 2025 16:10:31 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BF=D0=B8=D1=81=D0=BA=D0=B8=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B0=D1=8E=D1=82=D1=81?= =?UTF-8?q?=D1=8F=20=D0=B2=20=D0=B2=D0=B8=D0=B4=D0=B5=20=D0=B4=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tasks/dialoglistsubproc.cpp | 2 +- InstructorsAndTrainees/tasks/listsubproc.cpp | 93 ++++++++++++++++++- InstructorsAndTrainees/tasks/listsubproc.h | 21 ++++- InstructorsAndTrainees/tasks/listsubproc.ui | 2 +- ServerLMS/Systems/processingsystem.cpp | 3 - 5 files changed, 113 insertions(+), 8 deletions(-) diff --git a/InstructorsAndTrainees/tasks/dialoglistsubproc.cpp b/InstructorsAndTrainees/tasks/dialoglistsubproc.cpp index 5075d8f..d961de5 100644 --- a/InstructorsAndTrainees/tasks/dialoglistsubproc.cpp +++ b/InstructorsAndTrainees/tasks/dialoglistsubproc.cpp @@ -15,7 +15,7 @@ DialogListSubProc::DialogListSubProc(ConnectorToServer* connectorToServer, QWidg layout->addWidget(listSubProc); this->setWindowTitle(tr("List subprocedures")); - this->setMinimumSize(400, 200); + this->setMinimumSize(1400, 700); this->setModal(true); } diff --git a/InstructorsAndTrainees/tasks/listsubproc.cpp b/InstructorsAndTrainees/tasks/listsubproc.cpp index e4df52c..9532ac0 100644 --- a/InstructorsAndTrainees/tasks/listsubproc.cpp +++ b/InstructorsAndTrainees/tasks/listsubproc.cpp @@ -1,3 +1,4 @@ +#include #include "listsubproc.h" #include "ui_listsubproc.h" @@ -5,10 +6,16 @@ ListSubProc::ListSubProc(ConnectorToServer* connectorToServer, QWidget *parent) QWidget(parent), ui(new Ui::ListSubProc), connectorToServer(connectorToServer), - waitAnimationWidget(nullptr) + waitAnimationWidget(nullptr), + treeWidget(nullptr) { ui->setupUi(this); + treeWidget = new QTreeWidget(); + ui->horizontalLayout_Tree->addWidget(treeWidget); + + preparationTreeWidget(); + waitAnimationWidget = new WaitAnimationWidget; QMovie *movie = new QMovie(":/resources/icons/762.gif"); waitAnimationWidget->setParent(this); @@ -21,6 +28,7 @@ ListSubProc::~ListSubProc() { waitAnimationWidget->hideWithStop(); delete waitAnimationWidget; + delete treeWidget; delete ui; } @@ -31,10 +39,23 @@ void ListSubProc::closeEvent(QCloseEvent *event) void ListSubProc::resizeEvent(QResizeEvent *event) { + setWidthColumnsTree(); + QSize size = event->size(); waitAnimationWidget->resize(size); } +void ListSubProc::changeEvent(QEvent *event) +{ + // В случае получения события изменения языка приложения + if (event->type() == QEvent::LanguageChange) + {// переведём окно заново + ui->retranslateUi(this); + + reSetHeadTreeWidget(); + } +} + void ListSubProc::setTask(TaskAmmFim *task) { this->task = *task; @@ -48,6 +69,68 @@ void ListSubProc::setTask(TaskAmmFim *task) waitAnimationWidget->hideWithStop(); } +void ListSubProc::preparationTreeWidget() +{ + treeWidget->setColumnCount(ColumnsTreeSubProc::clmnSP_count); + + reSetHeadTreeWidget(); + +#ifdef PROJECT_TYPE_DEBUG + treeWidget->setColumnHidden(ColumnsTreeSubProc::clmnSP_canplay, false); +#else + treeWidget->setColumnHidden(ColumnsTreeSubProc::clmnSP_canplay, true); +#endif +} + +void ListSubProc::reSetHeadTreeWidget() +{ + QStringList listHeaders; + listHeaders = QStringList{tr("Subprocedure"), tr("DM code"), tr("Canplay")}; + treeWidget->setHeaderLabels(listHeaders); +} + +void ListSubProc::setWidthColumnsTree() +{ + listWidthColumn.clear(); + + treeWidget->setColumnWidth(ColumnsTreeSubProc::clmnSP_title, 100); + listWidthColumn.append(100); + treeWidget->setColumnWidth(ColumnsTreeSubProc::clmnSP_code, 250); + listWidthColumn.append(250); + treeWidget->setColumnWidth(ColumnsTreeSubProc::clmnSP_canplay, 50); + listWidthColumn.append(50); + + treeWidget->setColumnWidth(ColumnsTreeSubProc::clmnSP_title, calculateWidth_0Column()); +} + +int ListSubProc::calculateWidth_0Column() +{ + int widthHeader = treeWidget->width() - 25; + int width0Column = 0; + int widthSB = 0; + if(treeWidget->verticalScrollBar()->isVisible()) + widthSB = treeWidget->verticalScrollBar()->size().width(); + int cntColumns = treeWidget->columnCount(); + int widthRightColumns = 0; + for (int i = 1; i < cntColumns; i++) + { + if(! treeWidget->isColumnHidden(i)) + {//Колонка не скрыта + int w = listWidthColumn.at(i); + widthRightColumns += w; + } + } + width0Column = widthHeader - widthRightColumns - widthSB; + + return width0Column; +} + +QString ListSubProc::buildCanplay(ModeList modeList) +{ + QString canplay = QString("%1/%2/%3/%4").arg(modeList.demo?"+":"-", modeList.train?"+":"-", modeList.exam?"+":"-", modeList.autoM?"+":"-"); + return canplay; +} + void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode) { if(this->task.ammProcedure.dmCode == dmCode) @@ -56,7 +139,13 @@ void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode) for(SubProc subProc : list) { - ui->listWidget->addItem(subProc.dmCode); + QTreeWidgetItem* item = new QTreeWidgetItem(treeWidget); + item->setIcon(0, QIcon(":/resources/icons/procedure.png")); + item->setText(ColumnsTreeSubProc::clmnSP_title, subProc.title); + item->setText(ColumnsTreeSubProc::clmnSP_code, subProc.dmCode); + item->setText(ColumnsTreeSubProc::clmnSP_canplay, buildCanplay(subProc.modeList)); + + treeWidget->addTopLevelItem(item); } waitAnimationWidget->hideWithStop(); diff --git a/InstructorsAndTrainees/tasks/listsubproc.h b/InstructorsAndTrainees/tasks/listsubproc.h index 4b80b01..46b7e42 100644 --- a/InstructorsAndTrainees/tasks/listsubproc.h +++ b/InstructorsAndTrainees/tasks/listsubproc.h @@ -3,7 +3,15 @@ #include #include -#include "connectorToServer.h" +#include +#include "connectortoserver.h" + +enum ColumnsTreeSubProc{ + clmnSP_title = 0, + clmnSP_code, + clmnSP_canplay, + clmnSP_count +}; namespace Ui { class ListSubProc; @@ -19,9 +27,17 @@ public: void closeEvent(QCloseEvent *event) override; void resizeEvent(QResizeEvent *event) override; + void changeEvent(QEvent * event) override; void setTask(TaskAmmFim* task); +private: + void preparationTreeWidget(); + void reSetHeadTreeWidget(); + void setWidthColumnsTree(); + int calculateWidth_0Column(); + QString buildCanplay(ModeList modeList); + public slots: void slot_UpdateSubProcForDMCode(QString dmCode); @@ -33,6 +49,9 @@ private: TaskAmmFim task; WaitAnimationWidget *waitAnimationWidget; + + QTreeWidget* treeWidget; + QList listWidthColumn; }; #endif // LISTSUBPROC_H diff --git a/InstructorsAndTrainees/tasks/listsubproc.ui b/InstructorsAndTrainees/tasks/listsubproc.ui index c853c6d..72a46b7 100644 --- a/InstructorsAndTrainees/tasks/listsubproc.ui +++ b/InstructorsAndTrainees/tasks/listsubproc.ui @@ -44,7 +44,7 @@ - + diff --git a/ServerLMS/Systems/processingsystem.cpp b/ServerLMS/Systems/processingsystem.cpp index 25de1e9..b0292c1 100644 --- a/ServerLMS/Systems/processingsystem.cpp +++ b/ServerLMS/Systems/processingsystem.cpp @@ -530,9 +530,6 @@ void ProcessingSystem::processingClientQueryListSubProc(ClientHandler *client, Q QByteArray arrayAnswer = dataParser->getDocsAnswerParser()->listSubProc(list, dmCode); //client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM); client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM); - - int i = 0; - i++; } void ProcessingSystem::processingSendMessage(ClientMessage clientMessage)