mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-28 19:55:48 +03:00
Объединенные ячейки списка
This commit is contained in:
@@ -50,6 +50,8 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre
|
||||
connect(taskTreePreparation, &TaskAMMFIMTreePreparation::signal_listAMMItemsReady, this, &AMMtasksWidget::slot_AMMlistItemsReady);
|
||||
connect(this, &AMMtasksWidget::signal_stopParserPreparation, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_stopParserPreparation);
|
||||
|
||||
connect(this->connectorToServer, &ConnectorToServer::signal_UpdateSubProcForDMCode, this, &AMMtasksWidget::slot_UpdateSubProcForDMCode);
|
||||
|
||||
waitAnimationWidget = new WaitAnimationWidget;
|
||||
QMovie *movie = new QMovie(":/resources/icons/762.gif");
|
||||
waitAnimationWidget->setParent(this);
|
||||
@@ -68,12 +70,6 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre
|
||||
|
||||
if(type == TypeListTreeAMMFIM::listCommon)
|
||||
{
|
||||
//ui->horizontalLayout_3->addWidget(ui->btnAssignTask);
|
||||
//ui->horizontalLayout_3->addWidget(ui->btnOnlyActive);
|
||||
//ui->horizontalLayout_3->addWidget(ui->btnCheck);
|
||||
//ui->horizontalLayout_3->addWidget(ui->btnDelete);
|
||||
//ui->horizontalLayout_3->setAlignment(Qt::AlignmentFlag::AlignLeft);
|
||||
|
||||
ui->btnDelete->setVisible(false);
|
||||
ui->btnCheck->setVisible(false);
|
||||
}
|
||||
@@ -85,12 +81,7 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre
|
||||
ui->label_DocsActualed->setVisible(false);
|
||||
ui->label_Actual->setVisible(false);
|
||||
ui->btnDocsUpdating->setVisible(false);
|
||||
|
||||
//ui->verticalLayout->setAlignment(Qt::AlignmentFlag::AlignBottom);
|
||||
//ui->horizontalLayout_3->setAlignment(Qt::AlignmentFlag::AlignLeft);
|
||||
}
|
||||
|
||||
//ui->btnCheck->setVisible(false);
|
||||
}
|
||||
|
||||
AMMtasksWidget::~AMMtasksWidget()
|
||||
@@ -306,6 +297,58 @@ void AMMtasksWidget::slot_AMMlistItemsReady(QList<QTreeWidgetItem *> listItems)
|
||||
ui->btnOnlyActive->setEnabled(true);
|
||||
}
|
||||
|
||||
void AMMtasksWidget::slot_UpdateSubProcForDMCode(QString dmCode)
|
||||
{
|
||||
if(lastSelectedTask.ammProcedure.dmCode == dmCode)
|
||||
{//Его ждем
|
||||
QList<SubProc> list = connectorToServer->getListSubProcForDMCode(dmCode);
|
||||
lastSelectedTask.listSubProc = list;
|
||||
|
||||
waitAnimationWidget->hideWithStop();
|
||||
|
||||
if(lastSelectedTask.listSubProc.count())
|
||||
{
|
||||
dlgListSubProc = new DialogListSubProc(this);
|
||||
dlgListSubProc->setTask(&lastSelectedTask);
|
||||
|
||||
switch( dlgListSubProc->exec() )
|
||||
{
|
||||
case QDialog::Accepted:
|
||||
{
|
||||
//Здесь нужно забрать список отмеченных подпроцедур
|
||||
lastSelectedTask.listSubProc.clear();
|
||||
dlgListSubProc->getListCheckedSubProc(&lastSelectedTask.listSubProc);
|
||||
|
||||
if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warningYesNo, tr("Assign this task?")).exec() == QDialog::Accepted)
|
||||
{
|
||||
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE, idTraineeSelected, &lastSelectedTask);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case QDialog::Rejected:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if(dlgListSubProc)
|
||||
{
|
||||
delete dlgListSubProc;
|
||||
dlgListSubProc = nullptr;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lastSelectedTask.listSubProc.clear();
|
||||
|
||||
if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warningYesNo, tr("Assign this task?")).exec() == QDialog::Accepted)
|
||||
{
|
||||
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE, idTraineeSelected, &lastSelectedTask);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AMMtasksWidget::preparationTreeWidget()
|
||||
{
|
||||
treeWidget->setColumnCount(clmnAMM_count);
|
||||
@@ -409,46 +452,24 @@ void AMMtasksWidget::assignTaskAMMtoTrainee()
|
||||
|
||||
if(taskNew.getID())
|
||||
{
|
||||
//QList<SubProc> listSubProc;
|
||||
|
||||
if(selectSubProcForAssignTaskAMM(taskNew, &taskNew.listSubProc))
|
||||
{
|
||||
if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warningYesNo, tr("Assign this task?")).exec() == QDialog::Accepted)
|
||||
{
|
||||
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE, idTraineeSelected, &taskNew);
|
||||
}
|
||||
}
|
||||
{}
|
||||
}
|
||||
}
|
||||
|
||||
bool AMMtasksWidget::selectSubProcForAssignTaskAMM(TaskAmmFim taskNew, QList<SubProc>* listSubProc)
|
||||
{
|
||||
bool result = false;
|
||||
lastSelectedTask = taskNew;
|
||||
|
||||
dlgListSubProc = new DialogListSubProc(connectorToServer, this);
|
||||
dlgListSubProc->setTask(&taskNew);
|
||||
waitAnimationWidget->showWithPlay();
|
||||
|
||||
switch( dlgListSubProc->exec() )
|
||||
if(! connectorToServer->sendQueryListSubProc(lastSelectedTask.ammProcedure.dmCode))
|
||||
{
|
||||
case QDialog::Accepted:
|
||||
{
|
||||
//Здесь нужно забрать список отмеченных подпроцедур
|
||||
result = dlgListSubProc->getListCheckedSubProc(listSubProc);
|
||||
break;
|
||||
}
|
||||
case QDialog::Rejected:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
waitAnimationWidget->hideWithStop();
|
||||
return false;
|
||||
}
|
||||
|
||||
if(dlgListSubProc)
|
||||
{
|
||||
delete dlgListSubProc;
|
||||
dlgListSubProc = nullptr;
|
||||
}
|
||||
|
||||
return result;
|
||||
return true;
|
||||
}
|
||||
|
||||
void AMMtasksWidget::setCurrentTask(int id)
|
||||
|
||||
@@ -79,6 +79,8 @@ Q_SIGNALS:
|
||||
|
||||
public Q_SLOTS:
|
||||
void slot_AMMlistItemsReady(QList<QTreeWidgetItem*> listItems);
|
||||
public slots:
|
||||
void slot_UpdateSubProcForDMCode(QString dmCode);
|
||||
|
||||
private:
|
||||
Ui::AMMtasksWidget *ui;
|
||||
@@ -100,6 +102,12 @@ private:
|
||||
bool flOnlyActive; //AMM
|
||||
|
||||
int lastCurrentID;
|
||||
|
||||
TaskAmmFim lastSelectedTask;
|
||||
|
||||
CustomDelegate* delegate;
|
||||
|
||||
QStyle* style;
|
||||
};
|
||||
|
||||
#endif // AMMTASKSWIDGET_H
|
||||
|
||||
41
InstructorsAndTrainees/tasks/customdelegate.cpp
Normal file
41
InstructorsAndTrainees/tasks/customdelegate.cpp
Normal file
@@ -0,0 +1,41 @@
|
||||
#include "customdelegate.h"
|
||||
|
||||
CustomDelegate::CustomDelegate(QObject *parent):
|
||||
QItemDelegate(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CustomDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
|
||||
{
|
||||
bool mergeCell = index.data(UserRole_MergeCell).toBool();
|
||||
|
||||
if (mergeCell && index.column() == 0)
|
||||
{
|
||||
QModelIndex nextColumnIndex = index.siblingAtColumn(index.column() + 1);
|
||||
if (!nextColumnIndex.isValid())
|
||||
{
|
||||
QItemDelegate::paint(painter, option, index);
|
||||
return;
|
||||
}
|
||||
|
||||
QRect mergedRect(option.rect.x(),
|
||||
option.rect.y(),
|
||||
option.rect.width() * 2,
|
||||
option.rect.height());
|
||||
|
||||
painter->save();
|
||||
painter->setClipRect(mergedRect);
|
||||
drawBackground(painter, option, index);
|
||||
drawDisplay(painter, option, mergedRect, index.data(Qt::DisplayRole).toString());
|
||||
|
||||
painter->restore();
|
||||
} else {
|
||||
QItemDelegate::paint(painter, option, index);
|
||||
}
|
||||
}
|
||||
|
||||
QSize CustomDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
|
||||
{
|
||||
return QItemDelegate::sizeHint(option, index);
|
||||
}
|
||||
31
InstructorsAndTrainees/tasks/customdelegate.h
Normal file
31
InstructorsAndTrainees/tasks/customdelegate.h
Normal file
@@ -0,0 +1,31 @@
|
||||
#ifndef CUSTOMDELEGATE_H
|
||||
#define CUSTOMDELEGATE_H
|
||||
|
||||
#include <QApplication>
|
||||
#include <QTreeWidget>
|
||||
#include <QTreeWidgetItem>
|
||||
#include <QStyledItemDelegate>
|
||||
#include <QPainter>
|
||||
#include <QStyle>
|
||||
#include <QItemDelegate>
|
||||
|
||||
enum UserRoles {
|
||||
UserRole_MergeCell = Qt::UserRole + 1 // Пользовательская роль для хранения признака объединения
|
||||
};
|
||||
|
||||
class CustomDelegate : public QItemDelegate
|
||||
{
|
||||
public:
|
||||
//using QStyledItemDelegate::QStyledItemDelegate;
|
||||
|
||||
CustomDelegate(QObject *parent = nullptr);
|
||||
|
||||
void paint(QPainter *painter,
|
||||
const QStyleOptionViewItem &option,
|
||||
const QModelIndex &index) const override;
|
||||
|
||||
QSize sizeHint(const QStyleOptionViewItem &option,
|
||||
const QModelIndex &index) const override;
|
||||
};
|
||||
|
||||
#endif // CUSTOMDELEGATE_H
|
||||
@@ -1,7 +1,7 @@
|
||||
#include <QHBoxLayout>
|
||||
#include "dialoglistsubproc.h"
|
||||
|
||||
DialogListSubProc::DialogListSubProc(ConnectorToServer* connectorToServer, QWidget *parent) :
|
||||
DialogListSubProc::DialogListSubProc(QWidget *parent) :
|
||||
QDialog(parent,
|
||||
Qt::WindowSystemMenuHint
|
||||
| Qt::WindowMaximizeButtonHint
|
||||
@@ -9,7 +9,7 @@ DialogListSubProc::DialogListSubProc(ConnectorToServer* connectorToServer, QWidg
|
||||
| Qt::WindowCloseButtonHint),
|
||||
listSubProcCtrl(nullptr)
|
||||
{
|
||||
listSubProcCtrl = new ListSubProc(connectorToServer, this);
|
||||
listSubProcCtrl = new ListSubProc(this);
|
||||
connect(listSubProcCtrl, &ListSubProc::signal_Accepted, this, &DialogListSubProc::slot_Accepted);
|
||||
|
||||
QHBoxLayout *layout = new QHBoxLayout(this);
|
||||
|
||||
@@ -11,7 +11,7 @@ class DialogListSubProc : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
DialogListSubProc(ConnectorToServer* connectorToServer, QWidget *parent = nullptr);
|
||||
DialogListSubProc(QWidget *parent = nullptr);
|
||||
~DialogListSubProc();
|
||||
|
||||
void closeEvent(QCloseEvent *event) override;
|
||||
|
||||
@@ -2,11 +2,9 @@
|
||||
#include "listsubproc.h"
|
||||
#include "ui_listsubproc.h"
|
||||
|
||||
ListSubProc::ListSubProc(ConnectorToServer* connectorToServer, QWidget *parent) :
|
||||
ListSubProc::ListSubProc(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::ListSubProc),
|
||||
connectorToServer(connectorToServer),
|
||||
waitAnimationWidget(nullptr),
|
||||
treeWidget(nullptr)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
@@ -17,19 +15,10 @@ ListSubProc::ListSubProc(ConnectorToServer* connectorToServer, QWidget *parent)
|
||||
ui->horizontalLayout_Tree->addWidget(treeWidget);
|
||||
|
||||
preparationTreeWidget();
|
||||
|
||||
waitAnimationWidget = new WaitAnimationWidget;
|
||||
QMovie *movie = new QMovie(":/resources/icons/762.gif");
|
||||
waitAnimationWidget->setParent(this);
|
||||
waitAnimationWidget->initialize(movie,this);
|
||||
|
||||
connect(this->connectorToServer, &ConnectorToServer::signal_UpdateSubProcForDMCode, this, &ListSubProc::slot_UpdateSubProcForDMCode);
|
||||
}
|
||||
|
||||
ListSubProc::~ListSubProc()
|
||||
{
|
||||
waitAnimationWidget->hideWithStop();
|
||||
delete waitAnimationWidget;
|
||||
delete treeWidget;
|
||||
delete ui;
|
||||
}
|
||||
@@ -42,9 +31,6 @@ void ListSubProc::closeEvent(QCloseEvent *event)
|
||||
void ListSubProc::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
setWidthColumnsTree();
|
||||
|
||||
QSize size = event->size();
|
||||
waitAnimationWidget->resize(size);
|
||||
}
|
||||
|
||||
void ListSubProc::changeEvent(QEvent *event)
|
||||
@@ -65,10 +51,39 @@ void ListSubProc::setTask(TaskAmmFim *task)
|
||||
ui->lbl_Title->setText(task->ammProcedure.title);
|
||||
ui->lbl_DMCode->setText(task->ammProcedure.dmCode);
|
||||
|
||||
waitAnimationWidget->showWithPlay();
|
||||
QList<SubProc> list = task->listSubProc;
|
||||
|
||||
if(! connectorToServer->sendQueryListSubProc(this->task.ammProcedure.dmCode))
|
||||
waitAnimationWidget->hideWithStop();
|
||||
for(SubProc subProc : list)
|
||||
{
|
||||
QTreeWidgetItem* item = new QTreeWidgetItem(treeWidget);
|
||||
//item->setIcon(0, QIcon(":/resources/icons/link.png"));
|
||||
item->setText(ColumnsTreeSubProc::clmnSP_title, subProc.getTitle());
|
||||
item->setText(ColumnsTreeSubProc::clmnSP_code, subProc.getDmCode());
|
||||
item->setText(ColumnsTreeSubProc::clmnSP_canplay, subProc.getModeListStr());
|
||||
item->setToolTip(ColumnsTreeSubProc::clmnSP_title, subProc.getTitle());
|
||||
|
||||
ModeList modeList = subProc.getModeList();
|
||||
if(modeList.autoM && (modeList.demo || modeList.train || modeList.exam))
|
||||
{
|
||||
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
|
||||
item->setCheckState(ColumnsTreeSubProc::clmnSP_title, Qt::Checked);
|
||||
|
||||
treeWidget->addTopLevelItem(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
|
||||
item->setCheckState(ColumnsTreeSubProc::clmnSP_title, Qt::Unchecked);
|
||||
|
||||
//item->setFlags(item->flags() ^ Qt::ItemIsEnabled);
|
||||
|
||||
#ifdef PROJECT_TYPE_DEBUG
|
||||
treeWidget->addTopLevelItem(item);
|
||||
#else
|
||||
item->setFlags(item->flags() ^ Qt::ItemIsEnabled);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool ListSubProc::getListCheckedSubProc(QList<SubProc>* listSubProc)
|
||||
@@ -146,51 +161,6 @@ int ListSubProc::calculateWidth_0Column()
|
||||
return width0Column;
|
||||
}
|
||||
|
||||
void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode)
|
||||
{
|
||||
if(this->task.ammProcedure.dmCode == dmCode)
|
||||
{
|
||||
QList<SubProc> list = connectorToServer->getListSubProcForDMCode(dmCode);
|
||||
|
||||
/*if(!list.count())
|
||||
on_btnAssign_clicked();*/
|
||||
|
||||
for(SubProc subProc : list)
|
||||
{
|
||||
QTreeWidgetItem* item = new QTreeWidgetItem(treeWidget);
|
||||
//item->setIcon(0, QIcon(":/resources/icons/link.png"));
|
||||
item->setText(ColumnsTreeSubProc::clmnSP_title, subProc.getTitle());
|
||||
item->setText(ColumnsTreeSubProc::clmnSP_code, subProc.getDmCode());
|
||||
item->setText(ColumnsTreeSubProc::clmnSP_canplay, subProc.getModeListStr());
|
||||
item->setToolTip(ColumnsTreeSubProc::clmnSP_title, subProc.getTitle());
|
||||
|
||||
ModeList modeList = subProc.getModeList();
|
||||
if(modeList.autoM && (modeList.demo || modeList.train || modeList.exam))
|
||||
{
|
||||
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
|
||||
item->setCheckState(ColumnsTreeSubProc::clmnSP_title, Qt::Checked);
|
||||
|
||||
treeWidget->addTopLevelItem(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
|
||||
item->setCheckState(ColumnsTreeSubProc::clmnSP_title, Qt::Unchecked);
|
||||
|
||||
//item->setFlags(item->flags() ^ Qt::ItemIsEnabled);
|
||||
|
||||
#ifdef PROJECT_TYPE_DEBUG
|
||||
treeWidget->addTopLevelItem(item);
|
||||
#else
|
||||
item->setFlags(item->flags() ^ Qt::ItemIsEnabled);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
waitAnimationWidget->hideWithStop();
|
||||
}
|
||||
}
|
||||
|
||||
void ListSubProc::on_btnAssign_clicked()
|
||||
{
|
||||
emit signal_Accepted();
|
||||
|
||||
@@ -22,7 +22,7 @@ class ListSubProc : public QWidget
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ListSubProc(ConnectorToServer* connectorToServer, QWidget *parent = nullptr);
|
||||
explicit ListSubProc(QWidget *parent = nullptr);
|
||||
~ListSubProc();
|
||||
|
||||
void closeEvent(QCloseEvent *event) override;
|
||||
@@ -38,9 +38,6 @@ private:
|
||||
void setWidthColumnsTree();
|
||||
int calculateWidth_0Column();
|
||||
|
||||
public slots:
|
||||
void slot_UpdateSubProcForDMCode(QString dmCode);
|
||||
|
||||
private slots:
|
||||
void on_btnAssign_clicked();
|
||||
|
||||
@@ -50,12 +47,8 @@ signals:
|
||||
private:
|
||||
Ui::ListSubProc *ui;
|
||||
|
||||
ConnectorToServer* connectorToServer;
|
||||
|
||||
TaskAmmFim task;
|
||||
|
||||
WaitAnimationWidget *waitAnimationWidget;
|
||||
|
||||
QTreeWidget* treeWidget;
|
||||
QList<int> listWidthColumn;
|
||||
};
|
||||
|
||||
@@ -19,7 +19,7 @@ void SubProcItemWidget::setListSubProc(const QList<SubProc> &list)
|
||||
|
||||
for (SubProc subProc : list)
|
||||
{/*Подпроцедуры*/
|
||||
ui->listWidget->addItem(QString("* %1\n [%2]").arg(subProc.getTitle(), subProc.getDmCode()));
|
||||
ui->listWidget->addItem(QString("- %1 [%2]").arg(subProc.getTitle(), subProc.getDmCode()));
|
||||
|
||||
//Делаем item невыделяемым
|
||||
QListWidgetItem* item = ui->listWidget->item(ui->listWidget->count() - 1);
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<width>700</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
||||
@@ -497,10 +497,14 @@ void TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee(QList<TaskAmm
|
||||
QString code = task.ammProcedure.dmCode;
|
||||
QString status = task.status;
|
||||
|
||||
item = new QTreeWidgetItem();
|
||||
item = new QTreeWidgetItem(treeWidget);
|
||||
|
||||
//item->setData(0, UserRole_MergeCell, false);
|
||||
|
||||
treeWidget->addTopLevelItem(item);
|
||||
|
||||
//treeWidget->setFirstItemColumnSpanned(item, true);
|
||||
|
||||
item->setIcon(0, QIcon(":/resources/icons/procedure.png"));
|
||||
|
||||
item->setText(ColumnsTreeAMM::clmnAMM_PMorDM, text);
|
||||
@@ -543,9 +547,13 @@ void TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee(QList<TaskAmm
|
||||
itemWidget->setListSubProc(task.listSubProc);
|
||||
//itemWidget->setAutoFillBackground(true);
|
||||
|
||||
//itemSubProc->setData(0, UserRole_MergeCell, true);
|
||||
|
||||
item->addChild(itemSubProc);
|
||||
treeWidget->setItemWidget(itemSubProc, 0, itemWidget);
|
||||
}
|
||||
|
||||
itemSubProc->setFirstColumnSpanned(true);
|
||||
}
|
||||
}
|
||||
|
||||
listItemsAll.append(item);
|
||||
|
||||
Reference in New Issue
Block a user