/** * Handler for Video Overlays * $Id$ * $HeadURL$ * $Author$ * Created by hjl, SLSE, 2016-07-07 */ #pragma once #include #include #include "avs_interface.h" #include "handler_participant_data.h" #include "handler_infrastructure_data.h" #include "logger.h" namespace VideoOverlayManagement { // Forwarddeclarations class AvsInterface; class HandlerOverlays : public QObject { Q_OBJECT public: explicit HandlerOverlays(AvsInterface *avsIf, const std::shared_ptr &handlerParticipantData, const std::shared_ptr &handlerInfrastructureData, int exerciseId, QObject *parent = nullptr); ~HandlerOverlays(); bool init(); Q_SIGNALS: /** * Emits when a participant position was changed to another room (internal signal/slot) * @param[in] roomId Id of the room where the participant association to be change * @param[in] participants List of all participants assigned to roomId */ void participantsInRoomMapChanged(int roomId, const QSet &participants); private Q_SLOTS: /** * Handle incoming position changed signals * @param[in] oldRoomId ID of the room where the participant was at the last message. * @param[in] newRoomId ID of the room where the participant was at this message. * @param[in] participantId Id of the participant who is assigned to the message */ void onParticipantPositionChanged(int oldRoomId, int newRoomId, int participantId); /** * Build the video overlay string based on the given data * @param[in] roomId Id of the room to get information about camera availability * @param[in] participants List of all participants assigned to roomId */ void onParticipantsInRoomMapChanged(int roomId, const QSet &participants); private: // methodes /** * Initialize 'participantsInRoomMap' */ void initParticipantsInRoomMap(); /** * Add participant in 'participantsInRoomMap' for the given roomId entry * and emits onParticipantsInRoomMapChanged(...) to build the video overlay string * @param[in] roomId Id of the room which entry will to be modified * @param[in] participantId Id of the participant who has to be modified */ void addPartIdToParticipantsInRoomMap(int roomId, int participantId); /** * Remove participant in 'participantsInRoomMap' for the given roomId entry * and emits onParticipantsInRoomMapChanged(...) to build the video overlay string * @param[in] roomId Id of the room which entry will to be modified * @param[in] participantId Id of the participant who has to be remove */ void removePartIdFromParticipantsInRoomMap(int roomId, int participantId); /** * Returns the 'context' name used for AVS output * @returns returns the context name */ QString getContextName() const; /** * Returns the name for the overlay template used for AVS output * @returns overlay template name */ QString getOverlayTemplateName() const; /** * Convert the given list of participants to their assigned equipment number * @param[in] participants Set of participant ids to get the equipment number for * @returns Converted QSet (if an participantId could not be converted the entry will be empty) */ QSet convertParticipantIdsToEquipmentNo(const QSet &participants) const; /** * Returns a comma separated string with equipment numbers for the given list of participantIds/equipment numbers * @param[in] data Set of participant ids or equipment numbers to get the string for * @param[in] isParticipantIds true means data are participantIds otherwise equipment numbers * @returns String with equipment numbers (if an participantId could not be converted the entry will be empty) */ QString getAllEquipmentNumbers(QSet data, bool isParticipantIds) const; private: // attributes AvsInterface *m_avsIf; ///< Pointer to AVS-Interface std::shared_ptr m_handlerParticipantData; ///< Pointer to participant data handler std::shared_ptr m_handlerInfrastructureData; ///< Pointer to infrastructure data handler int m_exerciseId; ///< Exercise id NGL::INGLLogger &m_logger; ///< Interface to the Logging-Facility QMap> m_participantsInRoomMap; ///< Includes all participants (player) in one room (roomId, Set) }; } // namespace VideoOverlayManagement