/** * @RDE_HEADER@ * DefaultAvMenus * $Id$ * $HeadURL$ * $Author$ * Created by Christian Fröbel, NLSE, 2018-03-14 */ #pragma once #include "exercise_context.h" #include "handler_video_team.h" #include #include #include #include #include #include class QTimer; namespace InfrastructureManagement { namespace Interface { class Dtc; } class MainStructureElement; } namespace AudioVideoManagement { namespace Interface { class Dts; } class Stream; class AvMenuEntry; /** * Will be instantiated for each Exercise. * It observes the Exercise for new and removed streams and publishes * the default Announcement- and VideoMenu accordingly. * @author Christian Fröbel */ class DefaultAvMenus : public QObject { Q_OBJECT public: DefaultAvMenus(const ExerciseContext &context, Interface::Dts *dts, HandlerVideoTeam *handlerVideoTeams, InfrastructureManagement::Interface::Dtc *ismDtc); virtual ~DefaultAvMenus() override; void onStreamChanged(const Stream &stream); void onStreamRemoved(int32_t streamId); private slots: void onStreamMvsChanged(); void onMainStructureElementChanged(const InfrastructureManagement::MainStructureElement &data, DataModification modType); void updateMenus(); void removeMenus(); private: void updateMenu(bool isAudio); QString getDisplayNameForBuilding(const InfrastructureManagement::MainStructureElement &data); std::vector subMenuForBuilding(const InfrastructureManagement::MainStructureElement &building, bool isAudio); std::vector streamsForBuilding(const InfrastructureManagement::MainStructureElement &building, bool isAudio); LOGGER_T m_logger; int32_t menuStructId(bool isAudio); bool m_isInitialized; QMap m_buildingDisplayNameForId; //For filtering all onMainStructureElementEvents that are not necessary ExerciseContext m_context; Interface::Dts *m_dts; HandlerVideoTeam *m_videoTeamHandler; InfrastructureManagement::Interface::Dtc *m_ismDtc; std::map m_streams; //!< stream-Id -> Stream std::unique_ptr m_timer; }; } // namespace AudioVideoManagement