/** * @RDE_HEADER@ * StreamNameMapping * $Id$ * $HeadURL$ * $Author$ * Created by Christian Fröbel, NLSE, 2018-03-12 */ #pragma once #include "avm_export.h" #include #include #include #include #include #include enum class DataModification; namespace AudioVideoManagement { namespace Interface { class Dtc; } class StreamName; /** * In AVS, the names of audio and video streams need to be unique within a given exercise. * As the stream name used internally by AVS is not necessarily what the user wants * to see in the GUI, we define a mapping from internalName to displayName. * * The internalName is assigned by the AVM Service. Here, the stream name will probably * contain the MountingPoint-Id. * The displayName is determined by properties of the MountingPoint. * * For each MountingPoint the AVS service will publish the corresponding internal- * and displayName and thus serves as the source of this mapping. * * @author Christian Fröbel */ class AVM_COMMON_EXPORT StreamNameMapping : public QObject { Q_OBJECT public: struct Names { QString internal; QString display; }; /** * Don't use directly, use create() instead. * Only provided for UnitTests. */ StreamNameMapping() = default; static StreamNameMapping *create(Interface::Dtc *dtc); QString internalName(int32_t mountingPointId) const; QString internalName(const QString &displayName); QString displayName(int32_t mountingPointId) const; /** The internalName might contain a source specifier "(S)" or "(L)" at the end. */ QString displayName(const QString &internalName) const; std::vector allNames() const; signals: void changed(int32_t mountingPointId, const QString &internalName, const QString &displayName); private slots: void onStreamNameChanged(const StreamName &streamName, DataModification modType); private: void define(int32_t mountingPointId, const Names &names); void remove(int32_t mountingPointId); /** Used to extract the effective streamName if it contains a source specifier "(S)" or "(L)". */ const QRegExp m_extractor{QStringLiteral("(.*)(\\([SL]\\))"), Qt::CaseInsensitive}; std::map m_mpToNames; //!< MountingPoint-Id -> internal AVS name std::map m_internalToDisplay; }; } // namespace AudioVideoManagement