Files
qt5-legatus-legacy/Lts/Plugins/AudioVideoManagement/Gui/AVMenuEdit/avm_menu_edit.cpp
T
2026-08-13 18:33:10 +02:00

160 lines
4.7 KiB
C++
Executable File

/**
* @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 <AudioVideoManagement/avm_dtc.h>
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<AudioVideoManagement::Interface::Dtc> &dtc,
const std::shared_ptr<AudioVideoManagement::Interface::Ftc> &ftc,
const std::shared_ptr<InfrastructureManagement::Interface::Dtc> &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