/** * @RDE_HEADER@ * Data Plugin for AudioVideoSystem * $Id$ * $HeadURL$ * $Author$ * Created by Patric Karwat, SLSE, 2016-08-17 */ #include "avm_data_plugin.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include 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 DataPlugin::createDataInterface(LtsSession::LtsSessionDataDds *session) { Q_ASSERT(session); int exerciseId = session->exerciseId(); return std::make_shared(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(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 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