/** * @RDE_HEADER@ * $Id$ * $HeadURL$ * $Author$ * Created by Philipp Last, SLSE, 2017-10-26 */ #include "ppm_msdl_edit.h" #include "ui_ppm_msdl_edit.h" #include "msdl/msdl_import.h" #include "msdl/msdl_export.h" #include #include #include #include #include #include #include namespace ParticipantManagement { MSDLEdit::MSDLEdit(LtsSession::LtsSession *session, QWidget *parent) : LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::OkApplyCancel) , m_actionRemove(nullptr) , m_actionEdit(nullptr) , m_ppmDtc(nullptr) , m_ppmFtc(nullptr) , m_ppmGuiCbxIfc(nullptr) , m_session(session) , m_pTreehandlerSystem(nullptr) , m_pTreehandlerImport(nullptr) , m_pModelSystem(nullptr) , m_pModelImport(nullptr) , m_ui(new Ui::MSDLDialog) , m_logger(getLogger("MSDLEdit")) { m_ui->setupUi(this); m_buttonBox->connectButton(LtsWidgets::DialogButton::Add, this, &MSDLEdit::onAddItem); m_buttonBox->connectButton(LtsWidgets::DialogButton::Edit, this, &MSDLEdit::onEditItem); connect(m_ui->m_pushButton_Import, &QPushButton::clicked, this, &MSDLEdit::onImport); connect(m_ui->m_pushButton_Export, &QPushButton::clicked, this, &MSDLEdit::onExport); connect(m_ui->m_pushButton_distypeEditor, &QPushButton::clicked, this, &MSDLEdit::onDistypeEditor); setOnlineHelpFilename(QStringLiteral("Situation-Import-Export_MSDL")); m_ui->m_treeViewEdit_Right->treeView()->setDragDropMode(QAbstractItemView::DragOnly); m_ui->m_treeViewEdit_Right->treeView()->setSelectionMode(QAbstractItemView::SingleSelection); m_ui->m_treeViewEdit_Right->treeView()->setDragEnabled(true); m_ui->m_treeViewEdit_Left->treeView()->setDragDropMode(QAbstractItemView::DropOnly); m_ui->m_treeViewEdit_Left->treeView()->setAcceptDrops(true); m_ui->m_treeViewEdit_Left->treeView()->setDropIndicatorShown(true); } MSDLEdit::~MSDLEdit() { delete m_pTreehandlerImport; delete m_pTreehandlerSystem; delete m_ui; } void MSDLEdit::retranslate() { translate(m_ui, tr("MSDL Import/Export")); m_ppmGuiCbxIfc->fillPartyComboBox(m_ui->cbParty, ForeignGuiComboboxInterface::CbxPartyFilter::Normal); } void MSDLEdit::onDistypeEditor() { ParticipantManagement::DistypeEditor dialog(this, m_ppmDtc, m_ppmFtc); dialog.exec(); } void MSDLEdit::onImport() { m_pModelImport->resetModel(); m_pModelImport->setMimeType(QStringLiteral("MSDLDialog")); m_pModelSystem->setMimeType(QStringLiteral("MSDLDialog")); msdl::ImportMsdl dialog(m_pModelImport, QModelIndex(), this, m_session); dialog.exec(); // TODO: use show(), use signals & slots ! m_pTreehandlerImport->beautifyTreeView(false); } void MSDLEdit::onExport() { msdl::ExportMsdl dialog(m_session, this); dialog.exec(); // TODO: use show(), use signals & slots ! } bool MSDLEdit::init(const std::shared_ptr &dtc, const std::shared_ptr &ftc, const std::shared_ptr &ppmGuiCbxIfc) { if (!dtc || !ftc || !ppmGuiCbxIfc) { m_ui->m_pushButton_Import->setEnabled(false); m_ui->m_pushButton_Export->setEnabled(false); m_ui->m_pushButton_distypeEditor->setEnabled(false); return false; } m_ppmDtc = dtc; m_ppmFtc = ftc; m_ppmGuiCbxIfc = ppmGuiCbxIfc; m_session->getForeignDataInterface(m_asb); m_pModelImport = new ParticipantEditModel(this, m_ppmDtc, m_asb); m_ui->m_treeViewEdit_Right->setModel(m_pModelImport); m_pModelSystem = new ParticipantEditModel(this, m_ppmDtc, m_asb); connect(m_pModelSystem, &ParticipantEditModel::internalDataChanged, this, &MSDLEdit::slotChangesMade); m_ui->m_treeViewEdit_Left->setModel(m_pModelSystem); m_ui->m_treeViewEdit_Left->setContextMenuPolicy(Qt::CustomContextMenu); m_actionRemove = new QAction(QIcon(QLatin1String("icon:remove.svg")), tr("Remove"), this); m_actionEdit = new QAction(QIcon(QLatin1String("icon:edit.svg")), tr("Edit"), this); connect(m_ui->cbParty, static_cast(&LtsWidgets::LtsComboBox::currentIndexChanged), this, &MSDLEdit::onPartyChanged); m_ppmGuiCbxIfc->fillPartyComboBox(m_ui->cbParty, ForeignGuiComboboxInterface::CbxPartyFilter::Normal); m_pTreehandlerSystem = new ParticipantTreeEditHandler(m_ui->m_treeViewEdit_Left, m_ppmDtc, m_ppmFtc, false); connect(m_actionRemove, &QAction::triggered, m_pTreehandlerSystem, &ParticipantTreeEditHandler::onRemoveItem); connect(m_actionEdit, &QAction::triggered, this, &MSDLEdit::onEditItem); m_buttonBox->connectButton(LtsWidgets::DialogButton::Remove, m_pTreehandlerSystem, &ParticipantTreeEditHandler::onRemoveItem); connect(m_pTreehandlerSystem, &ParticipantTreeEditHandler::signalDoubleClicked, this, &MSDLEdit::onEditItem); connect(m_pTreehandlerSystem, &ParticipantTreeEditHandler::signalSelectionChanged, this, &MSDLEdit::onEnaDisa); connect(m_pTreehandlerSystem, &ParticipantTreeEditHandler::signalChangesMade, this, &MSDLEdit::onEnaDisa); // Editing not allowed, just enable context menu (Collapse/Expand item) m_pTreehandlerImport = new ParticipantTreeEditHandler(m_ui->m_treeViewEdit_Right, m_ppmDtc, m_ppmFtc, false); onPartyChanged(); onEnaDisa(); return true; } void MSDLEdit::onPartyChanged() { const int newPartyId = m_ui->cbParty->currentData().toInt(); if (hasUnsavedChanges()) { switch (askApplyDiscardCancel()) { case LtsWidgets::Button::Apply: if (!apply()) return; break; case LtsWidgets::Button::Cancel: m_ui->cbParty->setCurrentIndex(m_ui->cbParty->findData(m_pModelSystem->partyId(), Qt::UserRole)); return; case LtsWidgets::Button::Discard: __unchange__(); // can't call resetChanges() by myself :( break; default: break; } } // DEBUG_LOG(m_logger) << LOGFUNCTION << " onPartyChanged !!! -> newPartyId=" << newPartyId; // m_ui->cbParty->setEnabled(false); // will be re-enabled with reply (::lock, ::unlock) // tryLockTopicNew(QStringLiteral("LockParty"), newPartyId); m_pTreehandlerSystem->partyHasChanged(newPartyId, false); } bool MSDLEdit::apply() { return m_pTreehandlerSystem->onApplyChanges(); } void MSDLEdit::lock() { m_ui->cbParty->setEnabled(true); // true!! } void MSDLEdit::unlock() { m_ui->cbParty->setEnabled(true); } void MSDLEdit::tableColumnOrganiserSetting() { //LtsColumnOrganiser m_ui->m_treeViewEdit_Left->setColumnsOrganiserEnabled(identifier(), true); m_ui->m_treeViewEdit_Right->setColumnsOrganiserEnabled(identifier(), true); } void MSDLEdit::onEnaDisa() { bool enableAdd = false; bool enableEdit = false; bool enableRemove = false; if (m_pTreehandlerSystem->isSelectedIndexValid()) { if (m_pTreehandlerSystem->isContainer()) //only add to units enableAdd = true; if (m_pTreehandlerSystem->isSelectedIndexRemovable()) enableRemove = true; enableEdit = true; } m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Add, enableAdd); m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Edit, enableEdit); m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Remove, enableRemove); m_actionRemove->setEnabled(enableRemove); m_actionEdit->setEnabled(enableEdit); } void MSDLEdit::onAddItem() { ParticipantEditItem *newItemDlg = new ParticipantEditItem(false, m_session, this); newItemDlg->setAttribute(Qt::WA_DeleteOnClose); if (!newItemDlg->init(m_pTreehandlerSystem->selectedIndexView(), m_ui->cbParty->currentData().toInt(), m_ppmDtc, m_ppmGuiCbxIfc, m_asb)) { newItemDlg->deleteLater(); return; } connect(newItemDlg, &ParticipantEditItem::addItem, m_pModelSystem, &ParticipantEditModel::onInsertRow); newItemDlg->show(); onEnaDisa(); } void MSDLEdit::onEditItem() { if (!m_pTreehandlerSystem->isSelectedIndexValid()) return; ParticipantManagement::ParticipantData data = m_pTreehandlerSystem->getSelectedData(); ParticipantEditItem *newItemDlg = new ParticipantEditItem(false, m_session, this); if (!newItemDlg->init(m_pTreehandlerSystem->selectedIndexView(), m_ui->cbParty->currentData().toInt(), m_ppmDtc, m_ppmGuiCbxIfc, m_asb, data)) { newItemDlg->deleteLater(); return; } connect(newItemDlg, &ParticipantEditItem::updateItem, m_pModelSystem, &ParticipantEditModel::onUpdateRow); newItemDlg->exec(); onEnaDisa(); } } //namespace ParticipantManagement