04.07.2022

This commit is contained in:
Plotnikov
2022-07-04 13:15:35 +03:00
parent 5fad2bcf6b
commit 696daa0b2e
7224 changed files with 3814576 additions and 0 deletions

View File

@@ -0,0 +1,288 @@
#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;
}