#include #include "editortrainees.h" #include "ui_editortrainees.h" #include "dialogeditgroup.h" #include "dialogedittrainee.h" EditorTrainees::EditorTrainees(DataBaseTrainees* db, bool adminMode, QWidget *parent) : //QDialog(parent), TraineesView(db, CommonView::TypeView::control, parent), ui(new Ui::EditorTrainees) { ui->setupUi((QDialog*)this); preparationTreeWidget(ui->treeWidget); setNotLoggedInVisible(true); loadTraineesFromDB(); } EditorTrainees::~EditorTrainees() { delete ui; } void EditorTrainees::on_btnNewGroup_clicked() { QString nameGroup = dbTrainees->newGroup(); loadTraineesFromDB(); setCurrentGroup(nameGroup); } void EditorTrainees::on_btnDeleteGroup_clicked() { QTreeWidgetItem *treeItemCurrent = ui->treeWidget->currentItem(); if(treeItemCurrent != nullptr) { QTreeWidgetItem *treeItemParent = treeItemCurrent->parent(); if(treeItemParent == nullptr) {//Выбрана группа QString name = treeItemCurrent->text(0); if(dbTrainees->deleteGroup(name)) {//Удалено loadTraineesFromDB(); } else QMessageBox::critical(this, tr("Editing error!"), tr("The group is not empty.\nIt is not possible to delete a non-empty group.")); } } } void EditorTrainees::on_btnNewTrainee_clicked() { QTreeWidgetItem *treeItemCurrent = ui->treeWidget->currentItem(); if(treeItemCurrent != nullptr) { QTreeWidgetItem *treeItemParent = treeItemCurrent->parent(); if(treeItemParent == nullptr) {//Выбрана группа. Можно добавить Обучаемого QString nameGroup = treeItemCurrent->text(0); dbTrainees->newTrainee(nameGroup); loadTraineesFromDB(); setCurrentGroup(nameGroup); } } } void EditorTrainees::on_btnDeleteTrainee_clicked() { QTreeWidgetItem *treeItemCurrent = ui->treeWidget->currentItem(); if(treeItemCurrent != nullptr) { QTreeWidgetItem *treeItemParent = treeItemCurrent->parent(); if(treeItemParent != nullptr) {//Выбран обучаемый QString name = treeItemCurrent->text(0); QString nameGroup = treeItemParent->text(0); if(QMessageBox::warning(this, tr("Attention!"), tr("The deletion will be irrevocable.\nDelete anyway?"), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) { dbTrainees->deleteTrainee(name); loadTraineesFromDB(); setCurrentGroup(nameGroup); } } } } void EditorTrainees::on_btnToOrFromArchiveTrainee_clicked() { QTreeWidgetItem *treeItemCurrent = ui->treeWidget->currentItem(); if(treeItemCurrent != nullptr) { QTreeWidgetItem *treeItemParent = treeItemCurrent->parent(); if(treeItemParent != nullptr) {//Выбран обучаемый QString name = treeItemCurrent->text(0); if(dbTrainees->isArchived(name)) {//Архивный dbTrainees->fromeArchiveTrainee(name); loadTraineesFromDB(); setCurrentTrainee(name); } else {//Не Архивный dbTrainees->toArchiveTrainee(name); if(!archiveVisible) ui->btnArchive->click(); loadTraineesFromDB(); setCurrentTrainee(name); } } } } void EditorTrainees::on_btnEdit_clicked() { QTreeWidgetItem *treeItemCurrent = ui->treeWidget->currentItem(); if(treeItemCurrent == nullptr) return; QTreeWidgetItem *treeItemParent = treeItemCurrent->parent(); if(treeItemParent == nullptr) {//Выбрана группа QString nameGroup = treeItemCurrent->text(0); DialogEditGroup dlg(this); dlg.setName(nameGroup); switch( dlg.exec() ) { case QDialog::Accepted: { if(dbTrainees->editGroup(nameGroup, dlg.getName())) { loadTraineesFromDB(); setCurrentGroup(dlg.getName()); } else QMessageBox::critical(this, tr("Editing error!"), tr("An existing group name has been entered.\nThe changes will not be accepted.")); break; } case QDialog::Rejected: break; default: break; } } else {//Выбран обучаемый QString name = treeItemCurrent->text(0); DialogEditTrainee dlg(this); dlg.setTrainee(dbTrainees->getTrainee(name)); switch( dlg.exec() ) { case QDialog::Accepted: { if(dbTrainees->editTrainee(name, dlg.getTrainee())) { loadTraineesFromDB(); setCurrentTrainee(dlg.getTrainee().getName()); } else QMessageBox::critical(this, tr("Editing error!"), tr("An existing trainee's name or login has been entered.\nThe changes will not be accepted.")); break; } case QDialog::Rejected: break; default: break; } } } void EditorTrainees::on_btnArchive_clicked() { bool state = ui->btnArchive->isChecked(); setArchiveVisible(state); loadTraineesFromDB(); } void EditorTrainees::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) { //Определяем доступность и функционал кнопок для выбранного элемента if(current == nullptr) return; QTreeWidgetItem *treeItemParent = current->parent(); if(treeItemParent == nullptr) {//Выбрана группа ui->btnNewGroup->setEnabled(true); ui->btnDeleteGroup->setEnabled(true); ui->btnNewTrainee->setEnabled(true); ui->btnDeleteTrainee->setEnabled(false); ui->btnToOrFromArchiveTrainee->setEnabled(false); ui->btnEdit->setEnabled(true); ui->btnArchive->setEnabled(true); ui->btnToOrFromArchiveTrainee->setText(tr("To archive")); ui->btnToOrFromArchiveTrainee->setIcon(QIcon(QStringLiteral(":/icons/traineeArchive.png"))); } else {//Выбран обучаемый QString name = current->text(0); ui->btnNewGroup->setEnabled(false); ui->btnDeleteGroup->setEnabled(false); ui->btnNewTrainee->setEnabled(false); if(dbTrainees->isArchived(name)) {//Архивный ui->btnDeleteTrainee->setEnabled(true); ui->btnToOrFromArchiveTrainee->setText(tr("From archive")); ui->btnToOrFromArchiveTrainee->setIcon(QIcon(QStringLiteral(":/icons/traineeFromArchive.png"))); } else {//Не Архивный ui->btnDeleteTrainee->setEnabled(false); ui->btnToOrFromArchiveTrainee->setText(tr("To archive")); ui->btnToOrFromArchiveTrainee->setIcon(QIcon(QStringLiteral(":/icons/traineeArchive.png"))); } ui->btnToOrFromArchiveTrainee->setEnabled(true); ui->btnEdit->setEnabled(true); ui->btnArchive->setEnabled(true); } } void EditorTrainees::setCurrentGroup(QString nameGroup) { for(int i = 0; i < treeWidget->topLevelItemCount(); i++) { QTreeWidgetItem * item = treeWidget->topLevelItem(i); if(item != nullptr) if(item->text(0) == nameGroup) { treeWidget->setCurrentItem(item); break; } } } void EditorTrainees::setCurrentTrainee(QString name) { for(int i = 0; i < treeWidget->topLevelItemCount(); i++) { QTreeWidgetItem * item = treeWidget->topLevelItem(i); if(item != nullptr) { for (int j = 0; j < item->childCount(); j++) { QTreeWidgetItem * itemChild = item->child(j); if(itemChild != nullptr) if(itemChild->text(0) == name) { treeWidget->setCurrentItem(itemChild); break; } }//for (int j = 0; j < item->childCount(); j++) } }//for(int i = 0; i < treeWidget->topLevelItemCount(); i++) }