/** * @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 #include #include #include #include #include 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 &avmDtc, const std::shared_ptr &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(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 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 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