#include "exportdialog.h" #include "ui_exportdialog.h" #include #include #include #include #include ExportDialog::ExportDialog(QWidget *parent, S1000D_Manager* _SM) : QDialog(parent), ui(new Ui::ExportDialog) { ui->setupUi(this); ui->dlgTree->setFocus(); SM = _SM; flagCanSetCheck = true; } ExportDialog::~ExportDialog() { delete ui; } void ExportDialog::on_btnCloseDlg_clicked() { this->close(); } void ExportDialog::closeEvent(QCloseEvent *event) { SM->SavePackagesXML(); QString packFNCheck = ""; QStringList packFNList; foreach(S1000D_Manager::PackageStruct pack, SM->packages) if(packFNList.contains(pack.exportFileName)) {packFNCheck = pack.exportFileName; break;} else packFNList.append(pack.exportFileName); if (packFNCheck == "") { //SM->SavePackagesXML(); event->accept(); } else { QMessageBox::warning(this, tr("Предупреждение"), tr("Дублирование имен файлов пакетов конфигурации.\n"), QMessageBox::Ok, QMessageBox::Ok); //event->ignore(); } } void ExportDialog::on_btnExportS1000D_clicked() { Q_EMIT actionS1000Dexport(); } void ExportDialog::on_btnExportSCORM_clicked() { Q_EMIT actionSCORMexport(); } void ExportDialog::on_btnExportEDL_clicked() { Q_EMIT actionEDLexport(); } void ExportDialog::on_btnExportSingleSCORM_clicked() { Q_EMIT actionSingleSCORMexport(); } void ExportDialog::on_dlgTree_itemChanged(QTreeWidgetItem *item, int) { QString nm = item->text(0); if(item->checkState(0) == Qt::Checked) { if(item->parent() != nullptr) item->parent()->setCheckState(0, Qt::Checked); } else { for(int i=0;ichildCount();i++) item->child(i)->setCheckState(0, Qt::Unchecked); } if(ui->cbPackageList->currentIndex() < 0) return; if(ui->cbPackageList->currentText() != ui->cbPackageList->itemText(ui->cbPackageList->currentIndex())) return; if(!flagCanSetCheck) return; if(item->checkState(0) == Qt::Checked) { if(!SM->items[item->data(0, Qt::UserRole).toInt()].inPackages.contains(SM->packages[ui->cbPackageList->currentIndex()].cfgName)) SM->items[item->data(0, Qt::UserRole).toInt()].inPackages.append(SM->packages[ui->cbPackageList->currentIndex()].cfgName); } else { if(SM->items[item->data(0, Qt::UserRole).toInt()].inPackages.contains(SM->packages[ui->cbPackageList->currentIndex()].cfgName)) SM->items[item->data(0, Qt::UserRole).toInt()].inPackages.removeOne(SM->packages[ui->cbPackageList->currentIndex()].cfgName); } } void ExportDialog::fillTree(QTreeWidget* tree) { ui->dlgTree->clear(); flagCanSetCheck = false; for(int i=0;itopLevelItemCount();i++) { QTreeWidgetItem* newItem = new QTreeWidgetItem(); ui->dlgTree->addTopLevelItem(newItem); fillTreeItem(tree->topLevelItem(i), newItem); } flagCanSetCheck = true; ui->dlgTree->expandAll(); ui->cbPackageList->setCurrentIndex(0); } void ExportDialog::fillTreeItem(QTreeWidgetItem* treeItem, QTreeWidgetItem* dlgItem) { QString txt = treeItem->text(0); txt.replace("\n", " "); dlgItem->setText(0, txt); dlgItem->setData(0, Qt::UserRole, treeItem->data(0, Qt::UserRole)); dlgItem->setFlags(dlgItem->flags() | Qt::ItemIsUserCheckable); dlgItem->setCheckState(0, Qt::Checked); dlgItem->setIcon(0, treeItem->icon(0)); for(int i=0;ichildCount();i++) { QTreeWidgetItem* newItem = new QTreeWidgetItem(); dlgItem->addChild(newItem); fillTreeItem(treeItem->child(i), newItem); } } QTreeWidget* ExportDialog::getDlgTreeWidget() { return ui->dlgTree; } void ExportDialog::setPackName(QString packname) { ui->lePackName->setText(packname); } QString ExportDialog::getPackName() { return ui->lePackName->text(); } void ExportDialog::setPackDir(QString packdir) { ui->lePackDir->setText(packdir); } QString ExportDialog::getPackDir() { return ui->lePackDir->text(); } void ExportDialog::setPackTitle(QString packtitle) { ui->lePackTitle->setText(packtitle); } QString ExportDialog::getPackTitle() { return ui->lePackTitle->text(); } int ExportDialog::getEDType() { return ui->cbEDType->currentIndex(); } void ExportDialog::on_btnChooseDir_clicked() { QString dir = QFileDialog::getExistingDirectory(this, tr("Выберите папку размещения пакета"), getPackDir()); if(dir != "") ui->lePackDir->setText(dir); } void ExportDialog::setS1000Dlabel(QString text, QString color) { ui->lblS1000D_result->setText(text); ui->lblS1000D_result->setStyleSheet("QLabel { color: "+color+"; }"); QTimer::singleShot(3000, this, SLOT(hidelabels())); } void ExportDialog::setSCORMlabel(QString text, QString color) { ui->lblSCORM_result->setText(text); ui->lblSCORM_result->setStyleSheet("QLabel { color: "+color+"; }"); QTimer::singleShot(3000, this, SLOT(hidelabels())); } void ExportDialog::setEDLlabel(QString text, QString color) { ui->lblEDL_result->setText(text); ui->lblEDL_result->setStyleSheet("QLabel { color: "+color+"; }"); QTimer::singleShot(3000, this, SLOT(hidelabels())); } void ExportDialog::setSingleSCORMlabel(QString text, QString color) { ui->lblSingleSCORM_result->setText(text); ui->lblSingleSCORM_result->setStyleSheet("QLabel { color: "+color+"; }"); QTimer::singleShot(3000, this, SLOT(hidelabels())); } void ExportDialog::hidelabels() { ui->lblS1000D_result->setText(""); ui->lblSCORM_result->setText(""); ui->lblEDL_result->setText(""); ui->lblSingleSCORM_result->setText(""); } void ExportDialog::on_cbPackageList_currentIndexChanged(int index) { if(ignore_cbPackageList_events) return; QList treeList; for(int i=0;idlgTree->topLevelItemCount();i++) treeList.append(ui->dlgTree->topLevelItem(i)); QTreeWidgetItem* treeItem; while(!treeList.isEmpty()) { treeItem = treeList.takeFirst(); flagCanSetCheck = false; if(index >= 0) { if(SM->items[treeItem->data(0, Qt::UserRole).toInt()].inPackages.contains(SM->packages[index].cfgName, Qt::CaseInsensitive)) treeItem->setCheckState(0, Qt::Checked); else treeItem->setCheckState(0, Qt::Unchecked); } else treeItem->setCheckState(0, Qt::Checked); flagCanSetCheck = true; for(int i=0;ichildCount();i++) treeList.append(treeItem->child(i)); } curPackIndex = index; ignore_cbPackageList_events = true; if(index >= 0) { ui->lePackTitle->setText(SM->packages[index].title); ui->lePackName->setText(SM->packages[index].exportFileName); } else { //ui->lePackTitle->setText(); //ui->lePackName->setText(); } ignore_cbPackageList_events = false; } void ExportDialog::setPackageListIndex(int ind) { on_cbPackageList_currentIndexChanged(ind); } void ExportDialog::on_cbPackageList_currentTextChanged(QString _) { if(ignore_cbPackageList_events) return; ui->btnPackageAdd->setEnabled(true); } void ExportDialog::fillPackageList() { ignore_cbPackageList_events = true; ui->cbPackageList->clear(); foreach(S1000D_Manager::PackageStruct pack, SM->packages) ui->cbPackageList->addItem(pack.cfgName); ignore_cbPackageList_events = false; } void ExportDialog::on_btnPackageAdd_clicked() { foreach(S1000D_Manager::PackageStruct pack, SM->packages) { if(pack.cfgName == ui->cbPackageList->currentText()) { QMessageBox::warning(this, tr("Ошибка"), tr("Дублирование имен пакетов конфигурации.\n"), QMessageBox::Ok, QMessageBox::Ok); return; } } S1000D_Manager::PackageStruct pack; pack.cfgName = ui->cbPackageList->currentText(); pack.title = ui->lePackTitle->text(); pack.exportFileName = ui->lePackName->text(); SM->packages.append(pack); QList treeList; for(int i=0;idlgTree->topLevelItemCount();i++) treeList.append(ui->dlgTree->topLevelItem(i)); QTreeWidgetItem* treeItem; while(!treeList.isEmpty()) { treeItem = treeList.takeFirst(); if(treeItem->checkState(0) == Qt::Checked) if(!SM->items[treeItem->data(0, Qt::UserRole).toInt()].inPackages.contains(pack.cfgName)) SM->items[treeItem->data(0, Qt::UserRole).toInt()].inPackages.append(pack.cfgName); for(int i=0;ichildCount();i++) treeList.append(treeItem->child(i)); } fillPackageList(); ui->cbPackageList->setCurrentIndex(SM->packages.count()-1); ui->btnPackageAdd->setEnabled(false); ui->lePackName->setFocus(); } void ExportDialog::on_btnPackageDel_clicked() { if(ui->cbPackageList->currentIndex() < 0) return; QList treeList; for(int i=0;idlgTree->topLevelItemCount();i++) treeList.append(ui->dlgTree->topLevelItem(i)); QTreeWidgetItem* treeItem; while(!treeList.isEmpty()) { treeItem = treeList.takeFirst(); if(SM->items[treeItem->data(0, Qt::UserRole).toInt()].inPackages.contains(SM->packages[ui->cbPackageList->currentIndex()].cfgName, Qt::CaseInsensitive)) SM->items[treeItem->data(0, Qt::UserRole).toInt()].inPackages.removeOne(SM->packages[ui->cbPackageList->currentIndex()].cfgName); for(int i=0;ichildCount();i++) treeList.append(treeItem->child(i)); } SM->packages.removeAt(ui->cbPackageList->currentIndex()); ui->cbPackageList->removeItem(ui->cbPackageList->currentIndex()); } void ExportDialog::on_cbPackageList_editTextChanged(const QString &arg1) { ui->btnPackageAdd->setEnabled(true); } void ExportDialog::on_lePackName_textEdited(const QString &arg1) { if(curPackIndex == -1) return; SM->packages[curPackIndex].exportFileName = arg1; } void ExportDialog::on_lePackTitle_textEdited(const QString &arg1) { if(curPackIndex == -1) return; SM->packages[curPackIndex].title = arg1; }