/** * @RDE_HEADER@ * HMI Plugin for AudioVideoManagement - Menu Edit Overview Dialog * $Id$ * $HeadURL$ * $Author$ * Created by Patric Karwat, SLSE, 2016-10-05 */ #include "avm_menu_edit_view.h" #include "ui_avm_menu_edit_view.h" #include "avm_menu_edit.h" #include "avm_new_menu_struct.h" #include #include #include #include #include namespace AudioVideoManagement { MenuEditView::MenuEditView(const QString &menuGroup, LtsSession::LtsSession *session, QWidget *parent) : LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::CloseOnly) , m_menuGroup(menuGroup) , m_model(nullptr) , m_isAudio(false) , m_dtc(nullptr) , m_ftc(nullptr) , m_session(session) , m_requestHelper(new LtsUtils::RequestHelper(this)) , m_ui(new Ui::MenuEditView) , m_logger(getLogger("AudioVideoManagementDialog")) { m_ui->setupUi(this); m_ui->widget->setSelectionMode(QAbstractItemView::SingleSelection); // connects fuer Widgetaenderungen connect(m_ui->widget, &LtsDataView::LtsDataView::signalSelectionChanged, this, &MenuEditView::onSelectionChanged); connect(m_ui->widget, &LtsDataView::LtsDataView::signalDoubleClicked, this, &MenuEditView::onEditMenuStruct); // Edit-Button erzeugen m_buttonBox->connectButton(LtsWidgets::DialogButton::Edit, this, &MenuEditView::onEditMenuStruct); m_buttonBox->connectButton(LtsWidgets::DialogButton::Remove, this, &MenuEditView::onRemoveMenuStruct); m_buttonBox->connectButton(LtsWidgets::DialogButton::Add, this, &MenuEditView::onAddMenuStruct); m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Edit, false); m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Remove, false); m_buttonBox->connectButton(LtsWidgets::DialogButton::Print, this, &MenuEditView::onPrint); } // end of ctor() //----------------------------------------------------------------------------- MenuEditView::~MenuEditView() { delete m_ui; } // end of dtor() //----------------------------------------------------------------------------- void MenuEditView::retranslate() { if (m_isAudio) translate(m_ui, tr("Audio Menu")); else translate(m_ui, tr("Video Menu")); } // end of retranslate() //----------------------------------------------------------------------------- bool MenuEditView::init(const std::shared_ptr &dtc, const std::shared_ptr &ftc, const std::shared_ptr &ismDtc, StreamNameMapping *streamNameMapping, bool isAudio) { Q_ASSERT(dtc); Q_ASSERT(ftc); Q_ASSERT(ismDtc); Q_ASSERT(streamNameMapping); m_dtc = dtc; m_ftc = ftc; m_ismDtc = ismDtc; m_streamNameMapping = streamNameMapping; m_model = new MenuViewModel(this); m_model->initModel(m_dtc, isAudio); m_ui->widget->setModel(m_model); m_isAudio = isAudio; #ifndef LTS_DEBUG m_ui->widget->hideColumn(0); #endif m_ui->widget->setSortIndicator(1, Qt::AscendingOrder); // Save/Load from Library Button m_buttonBox->connectLibraryButton(this, &MenuEditView::onImportButtonClicked, &MenuEditView::onExportButtonClicked); if (!m_session->getForeignGuiInterface(m_flmGui)) m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Library, false); if (m_isAudio) setOnlineHelpFilename(QStringLiteral("Situation-Audio_Menu")); else setOnlineHelpFilename(QStringLiteral("Situation-Video_Menu")); return true; } // end of init() //----------------------------------------------------------------------------- void MenuEditView::onSelectionChanged() { const QModelIndex idx = m_ui->widget->currentIndex(); int row = idx.row(); m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Edit, (row >= 0)); m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Remove, (row >= 0)); } void MenuEditView::onAddMenuStruct() { NewMenuStruct *newDialog = new NewMenuStruct(this); connect(newDialog, &NewMenuStruct::newName, this, [this](const QString & name) { MenuStruct ms; ms.name(name.toStdString()); ms.isAudio(m_isAudio); MenuEdit *dialog = new MenuEdit(this); dialog->init(m_session, m_dtc, m_ftc, m_ismDtc, m_streamNameMapping, ms); addDialog(dialog, m_menuGroup, QLatin1String("avmNewMenu") + name, LtsWidgets::LayoutArea::eDialogTab); }); newDialog->show(); connect(newDialog, &NewMenuStruct::accepted, newDialog, &NewMenuStruct::deleteLater); } // end of onAddMenuStruct() //----------------------------------------------------------------------------- void MenuEditView::onEditMenuStruct() { const QModelIndex idx = m_ui->widget->currentIndex(); int row = idx.row(); if (row < 0) return; AudioVideoManagement::MenuStruct ms = m_model->getRowData(row); ms.isAudio(m_isAudio); DEBUG_LOG(m_logger) << "---onEditMenuStruct () " << " id: " << ms.id() << " name: " << ms.name(); MenuEdit *dialog = new MenuEdit(this); dialog->init(m_session, m_dtc, m_ftc, m_ismDtc, m_streamNameMapping, ms); addDialog(dialog, m_menuGroup, QLatin1String("avmMenuEdit") + QString::number(ms.id()), LtsWidgets::LayoutArea::eDialogTab); } //----------------------------------------------------------------------------- void MenuEditView::onRemoveMenuStruct() { const QModelIndex idx = m_ui->widget->currentIndex(); if (!idx.isValid()) return; const AudioVideoManagement::MenuStruct ms = m_model->getRowData(idx.row()); const Core::RemoveElementRequest req(ms.id()); m_requestHelper->startSingleRequest([req, this]() { return m_ftc->removeMenuStructRequest(req, this); }); if (m_model->rowCount() == 0) { m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Edit, false); m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Remove, false); } } //----------------------------------------------------------------------------- void MenuEditView::onPrint() { LtsPrinting::printView(m_session, this, m_ui->widget->treeView()); } void MenuEditView::tableColumnOrganiserSetting() { //LtsColumnOrganiser m_ui->widget->setColumnsOrganiserEnabled(identifier(), true); } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // library void MenuEditView::onExportButtonClicked() { const QModelIndex idx = m_ui->widget->currentIndex(); int row = idx.row(); if (row < 0) return; QByteArray byteArray = m_model->modelToJson(row); int fileId = m_flmGui->saveFileContent(this, FileManagement::FileType::Xml, m_session->exerciseId(), byteArray); if (fileId > 0) DEBUG_LOG(m_logger) << "Saved file with id = " << fileId; else ERROR_LOG(m_logger) << "Could not save file in library "; } void MenuEditView::onImportButtonClicked() { DEBUG_LOG(m_logger) << " onImportButtonClicked() "; QByteArray content; int fileId = m_flmGui->loadFileContent(this, content, {FileManagement::FileType::Xml}, m_session->exerciseId(), FileManagement::toString(FileManagement::XmlType::AVMMenuEditView)); if (fileId > 0) { if (!m_flmGui->isXmlType(content, FileManagement::toString(FileManagement::XmlType::AVMMenuEditView))) { QHash texts({{LtsWidgets::Button::Yes, tr("Ok")}}); LtsWidgets::LtsMessageDialog::showMessage(this, tr("Invalid xml file content"), windowTitle(), LtsWidgets::Behaviour::Modal, LtsWidgets::Button::Yes, texts); } else { const QVector menuStructs = m_model->jsonToMenuStructs(content); for (const AudioVideoManagement::MenuStruct &request : menuStructs) { m_requestHelper->startSingleRequest([this, request]() { return m_ftc->modifyMenuStructRequest(request, this); }); } } INFO_LOG(m_logger) << "--- onImportButtonClicked() "; } } } // namespace AudioVideoManagement