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

183 lines
5.1 KiB
C++
Executable File

/**
* @RDE_HEADER@
* Data Plugin for AudioVideoSystem
* $Id$
* $HeadURL$
* $Author$
* Created by Patric Karwat, SLSE, 2016-08-17
*/
#include "avm_data_plugin.h"
#include <AudioVideoManagement/Shared/plugin_settings.h>
#include <AudioVideoManagement/logger.h>
#include <AudioVideoManagement/ava_control.h>
#include <AudioVideoManagement/ava_session.h>
#include <AudioVideoManagement/ava_state.h>
#include <AudioVideoManagement/ava_types.h>
#include <AudioVideoManagement/stream_name_mapping.h>
#include <AudioVideoManagement/avs_menus.h>
#include <AudioVideoManagement/avs_dialog.h>
#include <AudioVideoManagement/vd_session.h>
#include <AudioVideoManagement/Shared/avs_app.h>
#include <AudioVideoManagement/stream_name_mapping.h>
#include <OperatorManagement/opm.hpp>
#include <QMap>
#include <QPair>
#include <QtGlobal>
#include <LtsSession/lts_session_data_dds.h>
#include <LtsSession/lts_session.h>
#include <LtsSession/lts_session_data.h>
#include <StyleManager/style_manager.h>
#include <ngltranslator/ngltranslator.h>
#include <QDebug>
using namespace AudioVideoManagement;
namespace
{
AvaGuiStyle determineGuiStyle()
{
LtsUtils::StyleManager *styleManager = LtsUtils::StyleManager::getInstance();
if (styleManager->currentStyleName() == QStringLiteral("rme.dark"))
return AvaGuiStyle::Dark;
return AvaGuiStyle::Light;
}
} // anonymous namespace
namespace AudioVideoManagement
{
DataPlugin::DataPlugin()
: m_pluginSettings(new PluginSettings)
{}
DataPlugin::~DataPlugin() = default;
std::shared_ptr<DataPluginBase::Interface> DataPlugin::createDataInterface(LtsSession::LtsSessionDataDds *session)
{
Q_ASSERT(session);
int exerciseId = session->exerciseId();
return std::make_shared<DataInterfaceImpl>(session, AvmExerciseContextHandle(&m_exerciseContext, exerciseId, session), &m_avsSessionContext);
}
DataInterfaceImpl::DataInterfaceImpl(LtsSession::LtsSessionDataDds *session, AvmExerciseContextHandle &&exerciseContextHandle, AvsSessionContext *sessionContext)
: m_exerciseContextHandle(std::move(exerciseContextHandle))
, m_session(qobject_cast<LtsSession::LtsSession *>(session))
{
Q_ASSERT(session);
Q_ASSERT(session->partitionType() == IDL::PartitionType::Exercise ||
session->partitionType() == IDL::PartitionType::Replay ||
session->partitionType() == IDL::PartitionType::Global);
Q_ASSERT(sessionContext);
if (session->exerciseId() > 0 && sessionContext->canAcquire(session->exerciseId()))
{
LtsSessionData::LtsSessionData *sessionData = LtsSessionData::LtsSessionData::getInstance();
m_avsSessionContextHandle = AvsSessionContextHandle(sessionContext, session->exerciseId(),
sessionData->getOperatorId(),
QString::fromLatin1(NGL::translationLocale()),
determineGuiStyle(), m_exerciseContextHandle);
}
}
DataInterfaceImpl::~DataInterfaceImpl() = default;
AvaSession *DataInterfaceImpl::avaSession()
{
return m_avsSessionContextHandle.avaSession();
}
AvaState *DataInterfaceImpl::avaState()
{
return m_avsSessionContextHandle.avaState();
}
StreamNameMapping *DataInterfaceImpl::streamNameMapping()
{
return m_exerciseContextHandle.streamNameMapping();
}
AvsMenus *DataInterfaceImpl::menus()
{
return m_avsSessionContextHandle.menus();
}
VdSession *DataInterfaceImpl::vdSession()
{
return m_avsSessionContextHandle.vdSession();
}
bool DataInterfaceImpl::vdSessionEstablished() const
{
return m_avsSessionContextHandle.vdSession()->isEstablished();
};
void DataInterfaceImpl::showCamera(QWidget *irreplacableWidget, int mountingPointId)
{
if (!m_avsSessionContextHandle)
return;
// build list of irreplacable widgets by the dependency tree of its dependencies and their dependencies' dependencies
QVector<QWidget *> irreplacableWidgets {m_session->baseLayoutWidget(), irreplacableWidget};
LtsSession::LtsSession *dependency = m_session->dependency();
int runaway = 100;
while (dependency && runaway > 0)
{
irreplacableWidgets += dependency->baseLayoutWidget();
dependency = dependency->dependency();
runaway--;
}
qWarning() << "irreplacableWidgets count" << irreplacableWidgets.count() << "from" << m_session;
for (QWidget *w : irreplacableWidgets)
qWarning() << "irre" << w;
m_avsSessionContextHandle.liveVideoApp()->show(irreplacableWidgets);
QString streamName = streamNameMapping()->internalName(mountingPointId);
m_avsSessionContextHandle.avaSession()->control()->chooseStreamOverview(AvsDialog::VIDEO_1, {streamName});
}
void DataInterfaceImpl::showAnnouncementUnit(int mountingPointId)
{
if (!m_avsSessionContextHandle)
return;
m_avsSessionContextHandle.menus()->setAnnouncementUnit(mountingPointId);
}
void DataInterfaceImpl::showOrCloseAvsApp()
{
if (!m_avsSessionContextHandle)
return;
auto liveVideoApp = m_avsSessionContextHandle.liveVideoApp();
qWarning() << "showOrCloseAvsApp" << liveVideoApp->isVisible();
if (liveVideoApp->isActive())
liveVideoApp->hide(true /* and close */);
else
liveVideoApp->show();
}
} // namespace AudioVideoManagement