mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/MI-38.git
synced 2026-01-24 00:05:39 +03:00
289 lines
9.3 KiB
C++
289 lines
9.3 KiB
C++
#include "exportdialog.h"
|
|
#include "ui_exportdialog.h"
|
|
#include <QDebug>
|
|
#include <QFileDialog>
|
|
#include <QTimer>
|
|
#include <QCloseEvent>
|
|
#include <QMessageBox>
|
|
|
|
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)
|
|
{
|
|
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_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;i<item->childCount();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;i<tree->topLevelItemCount();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;i<treeItem->childCount();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();
|
|
}
|
|
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::hidelabels() {
|
|
ui->lblS1000D_result->setText("");
|
|
ui->lblSCORM_result->setText("");
|
|
}
|
|
|
|
void ExportDialog::on_cbPackageList_currentIndexChanged(int index)
|
|
{
|
|
if(ignore_cbPackageList_events) return;
|
|
|
|
QList<QTreeWidgetItem*> treeList;
|
|
for(int i=0;i<ui->dlgTree->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;i<treeItem->childCount();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 newPackName)
|
|
{
|
|
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<QTreeWidgetItem*> treeList;
|
|
for(int i=0;i<ui->dlgTree->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;i<treeItem->childCount();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<QTreeWidgetItem*> treeList;
|
|
for(int i=0;i<ui->dlgTree->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;i<treeItem->childCount();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;
|
|
}
|