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

226 lines
7.1 KiB
C++
Executable File

/**
* @RDE_HEADER@
* The MvsDialog provides interactions for TVC assignment
* $Id$
* $HeadURL$
* $Author$
* Created by Hannes Baeuerle, SLSE, 2017-07-24
*/
#include "avm_mvs_dialog.h"
#include "ui_avm_mvs_dialog.h"
#include "avm_mvs_edit_dialog.h"
#include <PluginInterfaces/gui_plugin_interface.h>
#include <LtsUtilsGuiDds/request_helper.h>
#include <FileManagement/flm_translation.h>
#include <LtsSession/lts_session.h>
#include <LtsPrinting/printing.h>
#include <QTreeView>
namespace AudioVideoManagement
{
MvsDialog::MvsDialog(const QString &menuGroup, LtsSession::LtsSession *session, QWidget *parent)
: LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::CloseOnly)
, m_session(session)
, m_ui(new Ui::MvsDialog)
, m_menuGroup(menuGroup)
, m_model(nullptr)
, m_requestHelper(new LtsUtils::RequestHelper(this))
, m_avmDtc(nullptr)
, m_avmFtc(nullptr)
, m_logger(getLogger("MvsDialog"))
{
m_ui->setupUi(this);
setOnlineHelpFilename(QStringLiteral("Situation-Configuration_Video_Teams"));
}
MvsDialog::~MvsDialog()
{
delete m_ui;
}
void MvsDialog::retranslate()
{
translate(m_ui, tr("Configure Mobile Video Teams"));
}
void MvsDialog::tableColumnOrganiserSetting()
{
//LtsColumnOrganiser
m_ui->dataView->setColumnsOrganiserEnabled(identifier(), true);
}
bool MvsDialog::init(const std::shared_ptr<AudioVideoManagement::Interface::Dtc> &avmDtc, const std::shared_ptr<AudioVideoManagement::Interface::Ftc> &avmFtc)
{
delete m_model;
m_model = new MvsModel(this);
m_avmDtc = avmDtc;
m_avmFtc = avmFtc;
if (!m_model->init(m_session->exerciseId(), avmDtc))
{
delete m_model;
m_model = nullptr;
ERROR_LOG(m_logger) << "Could not init model";
return false;
}
m_ui->dataView->setModel(m_model);
m_buttonBox->connectButton(LtsWidgets::DialogButton::Add, this, &MvsDialog::onAddClicked);
m_buttonBox->connectButton(LtsWidgets::DialogButton::Edit, this, &MvsDialog::onEditClicked);
m_buttonBox->connectButton(LtsWidgets::DialogButton::Remove, this, &MvsDialog::onRemoveClicked);
m_buttonBox->connectButton(LtsWidgets::DialogButton::Print, this, &MvsDialog::onPrint);
connect(m_ui->dataView, &LtsDataView::LtsDataView::signalSelectionChanged,
this, &MvsDialog::onSelectionChanged);
onSelectionChanged();
connect(m_ui->dataView, &LtsDataView::LtsDataView::signalDoubleClicked,
this, &MvsDialog::onEditClicked);
// Save/Load from Library Button
m_buttonBox->connectLibraryButton(this,
&MvsDialog::onImportButtonClicked,
&MvsDialog::onExportButtonClicked);
if (!m_session->getForeignGuiInterface<FileManagement::ForeignGuiInterface>(m_flmGui))
m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Library, false);
return true;
}
void MvsDialog::onVideoTeamModifyReply(const Core::FunctionReplyObject &replyObject)
{
m_requestHelper->requestReply(replyObject);
}
void MvsDialog::onAddClicked()
{
EditVideoTeamDialog *dialog = new EditVideoTeamDialog(m_avmDtc, m_session->exerciseId(), this);
connect(dialog, &EditVideoTeamDialog::modifyRequest, this, [this](const AudioVideoManagement::VideoTeamModifyRequest & request)
{
m_requestHelper->startSingleRequest([this, request]()
{
return m_avmFtc->videoTeamModifyRequest(request, this);
});
});
addDialog(dialog, m_menuGroup, QStringLiteral("NewVideoTeam"), LtsWidgets::LayoutArea::eDialogTab);
}
void MvsDialog::onEditClicked()
{
QModelIndex currentIndex = m_ui->dataView->currentIndex();
if (!currentIndex.isValid())
return;
AudioVideoManagement::VideoTeam config = m_model->getRowData(currentIndex.row());
EditVideoTeamDialog *dialog = new EditVideoTeamDialog(config.id(),
m_avmDtc,
m_session->exerciseId(),
config,
this);
connect(dialog, &EditVideoTeamDialog::modifyRequest, this, [this](const AudioVideoManagement::VideoTeamModifyRequest & request)
{
m_requestHelper->startSingleRequest([this, request]()
{
return m_avmFtc->videoTeamModifyRequest(request, this);
});
});
addDialog(dialog, m_menuGroup, QStringLiteral("EditVideoTeam%1").arg(config.id()), LtsWidgets::LayoutArea::eDialogTab);
}
void MvsDialog::onRemoveClicked()
{
QModelIndex currentIndex = m_ui->dataView->currentIndex();
if (!currentIndex.isValid())
return;
AudioVideoManagement::VideoTeamModifyRequest request;
const VideoTeam team = m_model->getRowData(currentIndex.row());
request.id(team.id());
request.name(team.name());
request.ssrc(team.ssrc());
request.streamName(team.streamName());
request.vtPort(team.vtPort());
request.exerciseId(0);
m_requestHelper->startSingleRequest([this, request]()
{
return m_avmFtc->videoTeamModifyRequest(request, this);
});
m_model->removeRow(currentIndex.row());
}
void MvsDialog::onSelectionChanged()
{
QModelIndex currentIndex = m_ui->dataView->currentIndex();
m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Edit, currentIndex.isValid());
m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Remove, currentIndex.isValid());
}
void MvsDialog::onPrint()
{
LtsPrinting::printView(m_session, this, m_ui->dataView->treeView());
}
//-----------------------------------------------------------------------------
// library
void MvsDialog::onExportButtonClicked()
{
QByteArray byteArray = m_model->modelToJson();
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 MvsDialog::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::AVMMvsDialog));
if (fileId > 0)
{
if (!m_flmGui->isXmlType(content, FileManagement::toString(FileManagement::XmlType::AVMMvsDialog)))
{
QHash<LtsWidgets::Button, QString> 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<VideoTeamModifyRequest> requests = m_model->jsonToVideoTeamVector(content);
for (const auto &request : requests)
{
m_requestHelper->startSingleRequest([this, request]()
{
return m_avmFtc->videoTeamModifyRequest(request, this);
});
}
INFO_LOG(m_logger) << "--- onImportButtonClicked() ";
}
}
}
}// namespace AudioVideoManagement