/** * @RDE_HEADER@ * AudioVideoManagement - Static Meteo Data Edit Dialog * $Id$ * $HeadURL$ * $Author$ * Created by hjl, SLSE, 2016-10-17 */ #include "avm_menu_edit.h" #include "ui_avm_menu_edit.h" #include namespace AudioVideoManagement { MenuEdit::MenuEdit(QWidget *parent) : LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::OkApplyCancel) , m_ftc(nullptr) , m_ui(new Ui::MenuEdit) , m_availStreamsModel(nullptr) , m_usedStreamsModel(nullptr) , m_isAudio(false) , m_logger(getLogger("AudioVideoManagementEdit")) , m_requestHelper(new LtsUtils::RequestHelper(this)) { m_ui->setupUi(this); } // end of ctor() //----------------------------------------------------------------------------- MenuEdit::~MenuEdit() { delete m_ui; } // end of dtor() //----------------------------------------------------------------------------- void MenuEdit::retranslate() { if (m_isAudio) translate(m_ui, tr("Edit Audio Menu: %1").arg(m_name)); else translate(m_ui, tr("Edit Video Menu: %1").arg(m_name)); } // end of retranslate() //----------------------------------------------------------------------------- bool MenuEdit::init(LtsSession::LtsSession *session, const std::shared_ptr &dtc, const std::shared_ptr &ftc, const std::shared_ptr &ismDtc, StreamNameMapping *streamNameMapping, const MenuStruct &ms) { DEBUG_LOG(m_logger) << "MenuEdit::init()"; if (!ftc || !dtc) { ERROR_LOG(m_logger) << "MenuEdit::init() Invalid shared_ptr!"; return false; } m_ftc = ftc; m_isAudio = ms.isAudio(); m_name = QString::fromStdString(ms.name()); m_availStreamsModel = new AvailableStreamsModel(dtc, ismDtc, session, streamNameMapping, this, m_isAudio); m_ui->availTreeView->setModel(m_availStreamsModel); m_usedStreamsModel = new UsedStreamsModel(dtc, ismDtc, ms, streamNameMapping, this); m_ui->menuTreeView->setModel(m_usedStreamsModel); m_ui->menuTreeView->expandAll(); connect(m_ui->menuTreeView, &QTreeView::clicked, this, &MenuEdit::onStreamSelected); connect(m_usedStreamsModel, &UsedStreamsModel::modelDataChanged, this, &MenuEdit::slotChangesMade); connect(m_usedStreamsModel, &UsedStreamsModel::modelDataChanged, this, &MenuEdit::onModelDataChanged); m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Remove); connect(m_buttonBox->getButton(LtsWidgets::DialogButton::Remove), &QPushButton::clicked, this, &MenuEdit::onRemove); onStreamSelected(QModelIndex()); // Z. Zt. keine Aufloesung nach Add/Edit verfuegbar if (m_isAudio) setOnlineHelpFilename(QStringLiteral("Situation-Audio_Menu")); else setOnlineHelpFilename(QStringLiteral("Situation-Video_Menu")); if (ms.id() <= 0) m_buttonBox->setButtonVisible(LtsWidgets::DialogButton::Apply, false); return true; } // end of init() //----------------------------------------------------------------------------- bool MenuEdit::apply() { MenuStruct ms = m_usedStreamsModel->getMenuStruct(); ms.isAudio(m_isAudio); bool ret = m_requestHelper->startSingleRequest([this, ms]() { // Send modified data via FTC call return m_ftc->modifyMenuStructRequest(ms, this); }); return ret; } // end of accept() //----------------------------------------------------------------------------- void MenuEdit::onRemove() { if (0 == m_ui->menuTreeView->selectionModel()->selectedIndexes().size()) { QModelIndex index = m_ui->menuTreeView->currentIndex(); if (!index.isValid()) return; slotChangesMade(); DEBUG_LOG(m_logger) << "index row: " << index.row(); m_usedStreamsModel->removeRow(index.row(), index.parent()); // TODO: muss hier nicht auch etwas aus dem dds geloescht werden? (mw) } else { while (m_ui->menuTreeView->selectionModel()->selectedIndexes().size() > 0) { QModelIndex index = m_ui->menuTreeView->selectionModel()->selectedIndexes().front(); if (!index.isValid()) return; slotChangesMade(); DEBUG_LOG(m_logger) << "index row: " << index.row(); m_usedStreamsModel->removeRow(index.row(), index.parent()); // TODO: muss hier nicht auch etwas aus dem dds geloescht werden? (mw) } } } void MenuEdit::onModelDataChanged() { INFO_LOG(m_logger) << "onModelDataChanged"; m_ui->menuTreeView->expandAll(); } void MenuEdit::onStreamSelected(const QModelIndex &idx) { m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Remove, idx.isValid()); } } // namespace AudioVideoManagement