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 e706762..eaf4daf 100644 Binary files a/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.qm and b/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.qm differ diff --git a/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.ts b/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.ts index e30577c..2ee04c6 100644 --- a/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.ts +++ b/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.ts @@ -34,55 +34,55 @@ Удалить - + 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 новая