From 5bb981659387318f43164508188fdc8ac9a54361 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Fri, 21 Nov 2025 14:05:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=9F=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B0=D1=8E=D1=82=D1=81=D1=8F=20=D0=B2=20=D0=B2?= =?UTF-8?q?=D0=B8=D0=B4=D0=B5=20=D0=B2=D1=8B=D0=BF=D0=B0=D0=B4=D0=B0=D1=8E?= =?UTF-8?q?=D1=89=D0=B5=D0=B3=D0=BE=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B0?= =?UTF-8?q?=20(=D0=BD=D0=B0=D0=B7=D0=BD-=D0=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FILES/CSS/styleSheetMain.css | 11 +-- InstructorsAndTrainees/CMakeLists.txt | 4 ++ .../messanger/messangerwidget.ui | 6 +- .../messanger/tabdialogmessenger.cpp | 2 + .../tasks/ammtaskswidget.cpp | 19 +++-- .../tasks/fimtaskswidget.cpp | 2 +- InstructorsAndTrainees/tasks/listsubproc.cpp | 8 +-- .../tasks/subprocitemwidget.cpp | 40 +++++++++++ .../tasks/subprocitemwidget.h | 25 +++++++ .../tasks/subprocitemwidget.ui | 54 +++++++++++++++ .../tasks/tasktreepreparation.cpp | 36 ++++++---- .../tasks/tasktreepreparation.h | 4 +- .../InstructorsAndTraineesWidget_ru_RU.qm | Bin 22221 -> 22546 bytes .../InstructorsAndTraineesWidget_ru_RU.ts | 65 +++++++++++------- 14 files changed, 214 insertions(+), 62 deletions(-) create mode 100644 InstructorsAndTrainees/tasks/subprocitemwidget.cpp create mode 100644 InstructorsAndTrainees/tasks/subprocitemwidget.h create mode 100644 InstructorsAndTrainees/tasks/subprocitemwidget.ui diff --git a/FILES/CSS/styleSheetMain.css b/FILES/CSS/styleSheetMain.css index 2434ab2..675a54f 100644 --- a/FILES/CSS/styleSheetMain.css +++ b/FILES/CSS/styleSheetMain.css @@ -160,16 +160,17 @@ QTreeWidget::item { } /*Бранчи*/ QTreeWidget::branch:has-siblings:!adjoins-item { - border-image: url(:/resources/icons/vline.png) 0; - + border-image: url(:/resources/icons/vline.png) 0; } QTreeWidget::branch:has-siblings:adjoins-item { - border-image: url(:/resources/icons/branch-more.png) 0; - + border-image: url(:/resources/icons/branch-more.png) 0; } QTreeWidget::branch:!has-children:!has-siblings:adjoins-item { border-image: url(:/resources/icons/branch-end.png) 0; } +QTreeWidget#treeWidget_AMMforTrainee::branch:!has-children:!has-siblings:adjoins-item { + border-image: none; +} QTreeWidget::branch:closed:has-children:!has-siblings, QTreeWidget::branch:closed:has-children:has-siblings { border-image: none; @@ -294,7 +295,7 @@ QTabBar QToolButton { /* the scroll buttons are tool buttons */ QListWidget::item { /*padding: -5px;*/ } -QListWidget { +QListWidget#oneDialogMessenger { /*background: #ddeeff;*/ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, diff --git a/InstructorsAndTrainees/CMakeLists.txt b/InstructorsAndTrainees/CMakeLists.txt index cf5c377..b1f98d9 100644 --- a/InstructorsAndTrainees/CMakeLists.txt +++ b/InstructorsAndTrainees/CMakeLists.txt @@ -128,6 +128,10 @@ add_library(InstructorsAndTrainees SHARED tasks/listsubproc.h tasks/listsubproc.ui + tasks/subprocitemwidget.cpp + tasks/subprocitemwidget.h + tasks/subprocitemwidget.ui + widgets/newversionwidget.cpp widgets/newversionwidget.h widgets/newversionwidget.ui diff --git a/InstructorsAndTrainees/messanger/messangerwidget.ui b/InstructorsAndTrainees/messanger/messangerwidget.ui index 04b4c7d..4c8a2a0 100644 --- a/InstructorsAndTrainees/messanger/messangerwidget.ui +++ b/InstructorsAndTrainees/messanger/messangerwidget.ui @@ -85,7 +85,7 @@ - :/resources/icons/circleGray.png + :/resources/icons/circleGray.png @@ -128,7 +128,7 @@ Send - + :/resources/icons/sendMsg.png:/resources/icons/sendMsg.png @@ -149,7 +149,7 @@ - + diff --git a/InstructorsAndTrainees/messanger/tabdialogmessenger.cpp b/InstructorsAndTrainees/messanger/tabdialogmessenger.cpp index b62f52b..2c1db93 100644 --- a/InstructorsAndTrainees/messanger/tabdialogmessenger.cpp +++ b/InstructorsAndTrainees/messanger/tabdialogmessenger.cpp @@ -8,6 +8,8 @@ OneDialogMessenger::OneDialogMessenger(User userLocalGUI, User userRemote, QWidget *parent): QListWidget(parent) { + this->setObjectName("oneDialogMessenger"); + this->userLocalGUI = userLocalGUI; this->userRemote = userRemote; diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp index 9a842b1..f4c4d9d 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp @@ -25,11 +25,13 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre flOnlyActive(false), lastCurrentID(0) { - ui->setupUi(this); + ui->setupUi(this); qDebug() << "AMMtasksWidget init thread ID " << QThread::currentThreadId(); treeWidget = new QTreeWidget(); + if(type == TypeListTreeAMMFIM::listForTrainee) + treeWidget->setObjectName("treeWidget_AMMforTrainee"); ui->horizontalLayout_Tree->addWidget(treeWidget); //connect(treeWidget, &QTreeWidget::currentItemChanged, this, &AMMtasksWidget::on_treeWidgetItemClicked); @@ -39,8 +41,8 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre preparationTreeWidget(); threadPreparation = new QThread(); - taskTreePreparation = new TaskAMMFIMTreePreparation(type); - taskTreePreparation->moveToThread(threadPreparation); + taskTreePreparation = new TaskAMMFIMTreePreparation(type, treeWidget); + //taskTreePreparation->moveToThread(threadPreparation); threadPreparation->start(); threadPreparation->setPriority(QThread::HighestPriority); connect(this, &AMMtasksWidget::signal_prepareAMMListItems, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_prepareAMMListItems); @@ -281,11 +283,14 @@ void AMMtasksWidget::loadTasksAMM(bool flRequestFirst) void AMMtasksWidget::slot_AMMlistItemsReady(QList listItems) { - //Обновление дерева - treeWidget->clear(); + if(type != TypeListTreeAMMFIM::listForTrainee) + { + //Обновление дерева + treeWidget->clear(); - for(QTreeWidgetItem * item : listItems) - treeWidget->addTopLevelItem(item); + for(QTreeWidgetItem * item : listItems) + treeWidget->addTopLevelItem(item); + } /* QTreeWidgetItem * item = treeWidget->topLevelItem(0); diff --git a/InstructorsAndTrainees/tasks/fimtaskswidget.cpp b/InstructorsAndTrainees/tasks/fimtaskswidget.cpp index 2afa32d..0b8e37a 100644 --- a/InstructorsAndTrainees/tasks/fimtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/fimtaskswidget.cpp @@ -38,7 +38,7 @@ FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre preparationTreeWidget(); threadPreparation = new QThread(); - taskTreePreparation = new TaskAMMFIMTreePreparation(type); + taskTreePreparation = new TaskAMMFIMTreePreparation(type, treeWidget); taskTreePreparation->moveToThread(threadPreparation); threadPreparation->start(); threadPreparation->setPriority(QThread::HighestPriority); diff --git a/InstructorsAndTrainees/tasks/listsubproc.cpp b/InstructorsAndTrainees/tasks/listsubproc.cpp index f1e047a..e26be0d 100644 --- a/InstructorsAndTrainees/tasks/listsubproc.cpp +++ b/InstructorsAndTrainees/tasks/listsubproc.cpp @@ -152,8 +152,8 @@ void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode) { QList list = connectorToServer->getListSubProcForDMCode(dmCode); - if(!list.count()) - on_btnAssign_clicked(); + /*if(!list.count()) + on_btnAssign_clicked();*/ for(SubProc subProc : list) { @@ -177,12 +177,12 @@ void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode) item->setFlags(item->flags() | Qt::ItemIsUserCheckable); item->setCheckState(ColumnsTreeSubProc::clmnSP_title, Qt::Unchecked); - item->setFlags(item->flags() ^ Qt::ItemIsEnabled); + //item->setFlags(item->flags() ^ Qt::ItemIsEnabled); #ifdef PROJECT_TYPE_DEBUG treeWidget->addTopLevelItem(item); #else - + item->setFlags(item->flags() ^ Qt::ItemIsEnabled); #endif } } diff --git a/InstructorsAndTrainees/tasks/subprocitemwidget.cpp b/InstructorsAndTrainees/tasks/subprocitemwidget.cpp new file mode 100644 index 0000000..9e191b1 --- /dev/null +++ b/InstructorsAndTrainees/tasks/subprocitemwidget.cpp @@ -0,0 +1,40 @@ +#include "subprocitemwidget.h" +#include "ui_subprocitemwidget.h" + +SubProcItemWidget::SubProcItemWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::SubProcItemWidget) +{ + ui->setupUi(this); +} + +SubProcItemWidget::~SubProcItemWidget() +{ + delete ui; +} + +void SubProcItemWidget::setListSubProc(const QList &list) +{ + int totalHeight = 0; + + for (SubProc subProc : list) + {/*Подпроцедуры*/ + ui->listWidget->addItem(QString("* %1\n [%2]").arg(subProc.getTitle(), subProc.getDmCode())); + + //Делаем item невыделяемым + QListWidgetItem* item = ui->listWidget->item(ui->listWidget->count() - 1); + item->setFlags(item->flags() ^ Qt::ItemIsSelectable); + } + + //Определяем минимальную высоту списка + for(int row = 0; row < ui->listWidget->count(); ++row) + { + totalHeight += ui->listWidget->sizeHintForRow(row); // Высота каждой строки + totalHeight += 10; + } + + // Добавляем отступы фрейма (рамки) + totalHeight += ui->listWidget->frameWidth() * 2; + + ui->listWidget->setMaximumHeight(totalHeight); +} diff --git a/InstructorsAndTrainees/tasks/subprocitemwidget.h b/InstructorsAndTrainees/tasks/subprocitemwidget.h new file mode 100644 index 0000000..bec2fe5 --- /dev/null +++ b/InstructorsAndTrainees/tasks/subprocitemwidget.h @@ -0,0 +1,25 @@ +#ifndef SUBPROCITEMWIDGET_H +#define SUBPROCITEMWIDGET_H + +#include +#include "module.h" + +namespace Ui { +class SubProcItemWidget; +} + +class SubProcItemWidget : public QWidget +{ + Q_OBJECT + +public: + explicit SubProcItemWidget(QWidget *parent = nullptr); + ~SubProcItemWidget(); + + void setListSubProc(const QList& list); + +private: + Ui::SubProcItemWidget *ui; +}; + +#endif // SUBPROCITEMWIDGET_H diff --git a/InstructorsAndTrainees/tasks/subprocitemwidget.ui b/InstructorsAndTrainees/tasks/subprocitemwidget.ui new file mode 100644 index 0000000..6dd1583 --- /dev/null +++ b/InstructorsAndTrainees/tasks/subprocitemwidget.ui @@ -0,0 +1,54 @@ + + + SubProcItemWidget + + + + 0 + 0 + 400 + 300 + + + + + 0 + 0 + + + + Form + + + + + + + + Subprocedures allowed to be run by the trainee in automatic mode: + + + + + + + + 0 + 0 + + + + QFrame::NoFrame + + + QFrame::Sunken + + + + + + + + + + diff --git a/InstructorsAndTrainees/tasks/tasktreepreparation.cpp b/InstructorsAndTrainees/tasks/tasktreepreparation.cpp index e6cb82d..b6943bd 100644 --- a/InstructorsAndTrainees/tasks/tasktreepreparation.cpp +++ b/InstructorsAndTrainees/tasks/tasktreepreparation.cpp @@ -1,12 +1,16 @@ #include #include #include "tasktreepreparation.h" +#include "subprocitemwidget.h" + +#include -TaskAMMFIMTreePreparation::TaskAMMFIMTreePreparation(TypeListTreeAMMFIM type, QObject *parent) : +TaskAMMFIMTreePreparation::TaskAMMFIMTreePreparation(TypeListTreeAMMFIM type, QTreeWidget* treeWidget, QObject *parent) : QObject(parent), flagStop(false), - type(type) + type(type), + treeWidget(treeWidget) { qDebug() << "TaskAMMFIMTreePreparation init thread ID " << QThread::currentThreadId(); } @@ -477,6 +481,9 @@ void TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee(QListclear(); + mtxAccess.lock(); this->listTasksAMM = listTasks; @@ -491,6 +498,9 @@ void TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee(QListaddTopLevelItem(item); + item->setIcon(0, QIcon(":/resources/icons/procedure.png")); item->setText(ColumnsTreeAMM::clmnAMM_PMorDM, text); @@ -520,26 +530,22 @@ void TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee(QListsetToolTip(0, text); + if(type == TypeListTreeAMMFIM::listForTrainee) { - for (int j = 0; j < task.listSubProc.count(); j++) - {/*Подпроцедуры*/ - SubProc subProc = task.listSubProc.at(j); - + //Подпроцедуры + if(task.listSubProc.count()) + { QTreeWidgetItem* itemSubProc = new QTreeWidgetItem(); + itemSubProc->setFlags(itemSubProc->flags() ^ Qt::ItemIsSelectable); - itemSubProc->setText(ColumnsTreeAMM::clmnAMM_PMorDM, subProc.getTitle()); - - itemSubProc->setIcon(ColumnsTreeAMM::clmnAMM_PMorDM, QIcon(":/resources/icons/link.png")); - itemSubProc->setToolTip(ColumnsTreeAMM::clmnAMM_PMorDM, subProc.getTitle()); - - itemSubProc->setText(ColumnsTreeAMM::clmnAMM_code, subProc.getDmCode()); - - itemSubProc->setText(ColumnsTreeAMM::clmnAMM_canplay, subProc.getModeListStr()); + SubProcItemWidget* itemWidget = new SubProcItemWidget(); + itemWidget->setListSubProc(task.listSubProc); + //itemWidget->setAutoFillBackground(true); item->addChild(itemSubProc); + treeWidget->setItemWidget(itemSubProc, 0, itemWidget); } - } listItemsAll.append(item); diff --git a/InstructorsAndTrainees/tasks/tasktreepreparation.h b/InstructorsAndTrainees/tasks/tasktreepreparation.h index dd2ec0c..81f3309 100644 --- a/InstructorsAndTrainees/tasks/tasktreepreparation.h +++ b/InstructorsAndTrainees/tasks/tasktreepreparation.h @@ -36,7 +36,7 @@ class TaskAMMFIMTreePreparation : public QObject { Q_OBJECT public: - explicit TaskAMMFIMTreePreparation(TypeListTreeAMMFIM type, QObject *parent = nullptr); + explicit TaskAMMFIMTreePreparation(TypeListTreeAMMFIM type, QTreeWidget* treeWidget, QObject *parent = nullptr); ~TaskAMMFIMTreePreparation(); public: @@ -83,6 +83,8 @@ private: QMutex mtxAccess; int countItems = 0; + + QTreeWidget* treeWidget; }; #endif // TASKTREEPREPARATION_H diff --git a/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.qm b/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.qm index e706762e40778e2c53bfc315e03c69b0d7776fe0..eaf4dafc2ecd00f686fced9a99386ea7ccd8910d 100644 GIT binary patch delta 539 zcmX@RmT}Ss#t9;f6DEr4N%`z!U|@}AU~oOjz`*X$z+j;Pp*?0zjMekJaU?>5KbNqtP9`Ote^+0)x5D4vYc;eMGDYp;? zmTSEX3_h+9+CL0J2PjPTWt_(3r#AU1qaTw`^<-0~JSD#f#zZEd5kkip>r_-27(}=k zm%n3TU=Z(OJbva01B36($w!&gqSc4hWs^7ffLmH8f%hwS81mM|vIRg=%M=qdR>=ICgVVqoyps&$K>^X@?2IoEx)~-uNN%x<7%z zlsK7}t&GWQ-Q-p_H7;Lo?tkTc3=G~KleeQRx9ay|sOc@k_v;m7b zkThlS0AgDfJD`{mP|hBx#u~`?pX{I|&TPZtJUPnIn$HnvcmdGx)RfYq)Z)oI94&+} L?c4m;_W=h0G`yBk delta 367 zcmbQVf${8G#t9;f4HHH6q`W&B7+9kj7+g;>FtGbGFj#0nX!q2Kv3g#<=NTBh?lLeq z$UZaw}!TEa80-($NAhcTumxQGP z1B2-*2<=qCWuyC(fx%N}vMgH}lV|1RscdRoK4RSe%K3m{5Удалить - + actual актуально - + update required требуется обновление - - + + DM code DM код - - + + ID ID - - + + Procedure AMM Процедура AMM - - + + Canplay Режимы - - + + Status Статус - + The deletion will be irrevocable. Delete it anyway? Удаление будет безвозвратным. Всё равно удалить? - + Assign this task? Назначить эту задачу? @@ -1199,33 +1199,46 @@ Delete it anyway? Хорошо + + SubProcItemWidget + + + Form + Форма + + + + Subprocedures allowed to be run by the trainee in automatic mode: + Подпроцедуры, которые разрешено выполнять обучаемому в автоматическом режиме: + + TaskAMMFIMTreePreparation - - - + + + completed выполнена - - - + + + failed неверно - - - + + + checkup на проверке - - - + + + new новая