280 lines
9.0 KiB
C++
Executable File
280 lines
9.0 KiB
C++
Executable File
/**
|
|
* @RDE_HEADER@
|
|
* Interface of Participant
|
|
* $Id$
|
|
* $HeadURL$
|
|
* $Author$
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
// Own
|
|
#include <Map/abstract_map_object.h>
|
|
|
|
|
|
// Qt
|
|
#include <QString>
|
|
#include <QColor>
|
|
#include <QVector>
|
|
|
|
//----------------------------------------------------------------------------
|
|
namespace SituationMap
|
|
{
|
|
|
|
|
|
/**
|
|
* @brief The Participant class supports Participant and their wide range of parameters.
|
|
*
|
|
*/
|
|
class Participant : public virtual AbstractMapObject
|
|
{
|
|
|
|
using BaseClass = AbstractMapObject;
|
|
|
|
public:
|
|
|
|
/*! \name TextModifier */
|
|
//@{
|
|
/**
|
|
* @brief The TextModifier enum contains some standard Text Modifier (MIL2525, APP6)
|
|
*/
|
|
enum class TextModifier
|
|
{
|
|
EF_ReinforcedReduced = 0, ///< E -> FrameShapeModifier; F-> reinforced of reduced
|
|
M_HigherFormation, ///< Tactical Identifier (right handed)
|
|
T_UniqueDesignation, ///< Designator (left handed)
|
|
W_DateTimeGroup,
|
|
XY_AltitudeLocation,
|
|
V_Type,
|
|
Z_Speed,
|
|
G_StaffComments,
|
|
H_AdditionalInformation,
|
|
JKLNP,
|
|
END ///< This MUST mark the end, Do NOT use on interface
|
|
};
|
|
|
|
// Some helper functions:
|
|
static inline QLatin1String toString(TextModifier value) ///< 'EF_ReinforcedReduced', ...
|
|
{
|
|
switch (value)
|
|
{
|
|
case TextModifier::EF_ReinforcedReduced:
|
|
return QLatin1String("EF_ReinforcedReduced");
|
|
case TextModifier::M_HigherFormation:
|
|
return QLatin1String("M_HigherFormation");
|
|
case TextModifier::T_UniqueDesignation:
|
|
return QLatin1String("T_UniqueDesignation");
|
|
case TextModifier::W_DateTimeGroup:
|
|
return QLatin1String("W_DateTimeGroup");
|
|
case TextModifier::XY_AltitudeLocation:
|
|
return QLatin1String("XY_AltitudeLocation");
|
|
case TextModifier::V_Type:
|
|
return QLatin1String("V_Type");
|
|
case TextModifier::Z_Speed:
|
|
return QLatin1String("Z_Speed");
|
|
case TextModifier::G_StaffComments:
|
|
return QLatin1String("G_StaffComments");
|
|
case TextModifier::H_AdditionalInformation:
|
|
return QLatin1String("H_AdditionalInformation");
|
|
case TextModifier::JKLNP:
|
|
return QLatin1String("JKLNP");
|
|
case TextModifier::END:
|
|
break;
|
|
} //switch
|
|
return QLatin1String("ERROR-TextModifier");
|
|
}
|
|
|
|
static inline QLatin1String toDisplayString(TextModifier value) ///< 'ReinforcedReduced', ...
|
|
{
|
|
switch (value)
|
|
{
|
|
case TextModifier::EF_ReinforcedReduced:
|
|
return QLatin1String("ReinforcedReduced");
|
|
case TextModifier::M_HigherFormation:
|
|
return QLatin1String("HigherFormation");
|
|
case TextModifier::T_UniqueDesignation:
|
|
return QLatin1String("UniqueDesignation");
|
|
case TextModifier::W_DateTimeGroup:
|
|
return QLatin1String("DateTimeGroup");
|
|
case TextModifier::XY_AltitudeLocation:
|
|
return QLatin1String("AltitudeLocation");
|
|
case TextModifier::V_Type:
|
|
return QLatin1String("Type");
|
|
case TextModifier::Z_Speed:
|
|
return QLatin1String("Speed");
|
|
case TextModifier::G_StaffComments:
|
|
return QLatin1String("StaffComments");
|
|
case TextModifier::H_AdditionalInformation:
|
|
return QLatin1String("AdditionalInformation");
|
|
case TextModifier::JKLNP:
|
|
return QLatin1String("JKLNP");
|
|
case TextModifier::END:
|
|
break;
|
|
} //switch
|
|
return QLatin1String("ERROR-TextModifier");
|
|
}
|
|
|
|
static QVector<TextModifier> textModifiers() ///< only relevant TextModifier items -> without 'END'
|
|
{
|
|
return
|
|
{
|
|
TextModifier::EF_ReinforcedReduced,
|
|
TextModifier::M_HigherFormation,
|
|
TextModifier::T_UniqueDesignation,
|
|
TextModifier::W_DateTimeGroup
|
|
};
|
|
}
|
|
//@}
|
|
|
|
|
|
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
* Don't use "= default" because of bug in VS2015 JT 2016/11/7
|
|
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
|
Participant() : BaseClass() {;} ///< Contructor
|
|
|
|
virtual ~Participant() = default; ///< Destructor
|
|
|
|
/*! \name Origin*/
|
|
//@{
|
|
virtual Point3D origin() const = 0;
|
|
virtual bool setOrigin(const Point3D &origin) = 0;
|
|
|
|
virtual void setPositions(const PositionCont &posCont) = 0; ///< To enable using as AES item (template@AdapterDds)
|
|
//@}
|
|
|
|
/*! \name Symbol Display*/
|
|
//@{
|
|
virtual float userSymbolOpacity() const = 0;
|
|
virtual void setUserSymbolOpacity(float userSymbolOpacity) = 0;
|
|
virtual SymbolDataToRender symbolDataToRender(bool ignoreForcedColor = true) const = 0;
|
|
virtual QImage actualImage() const = 0;
|
|
virtual AdvancedSymbology::SymbologyType symbologyType() const = 0;
|
|
//@}
|
|
|
|
/*! \name Text Modifier*/
|
|
//@{
|
|
virtual QString textModifier(TextModifier textModifier) const = 0;
|
|
virtual void setTextModifier(TextModifier textModifier, const QString &text) = 0;
|
|
virtual bool textModifierVisibility(TextModifier textModifier) const = 0;
|
|
virtual void setTextModifierVisibility(TextModifier textModifier, bool visible) = 0;
|
|
//@}
|
|
|
|
/*! \name Graphical Modifier*/
|
|
//@{
|
|
virtual Injury injury() const = 0;
|
|
virtual QColor injuryColor() const = 0;
|
|
virtual bool setInjury(Injury injury, const QColor &injuryColor) = 0; ///< Attention: Qt::red is an int
|
|
virtual int injuryPartyId() const = 0;
|
|
virtual bool setInjury(Injury injury, int partyId) = 0; ///< Attention: Qt::red is an int
|
|
|
|
virtual bool additionalSymbol(AdditionalSymbolType additionalSymbolType) const = 0;
|
|
|
|
/*!
|
|
* \brief setAdditionalSymbol
|
|
* \param additionalSymbolType to set
|
|
* \param newState new value
|
|
* \return true if changed, otherwise false
|
|
*/
|
|
virtual bool setAdditionalSymbol(AdditionalSymbolType additionalSymbolType, bool newState) = 0;
|
|
|
|
virtual bool isMarked() const = 0;
|
|
/*!
|
|
* \brief setMarked
|
|
* \param marked new value
|
|
* \return true if changed, otherwise false
|
|
*/
|
|
virtual bool setMarked(bool marked) = 0;
|
|
//@}
|
|
|
|
/*! \name Ranges*/
|
|
//@{
|
|
virtual QVector<int> ranges() const = 0;
|
|
virtual bool setRanges(const QVector<int> &ranges) = 0;
|
|
|
|
virtual bool isRangesVisible() const = 0;
|
|
virtual void setRangesVisibility(bool visible) = 0;
|
|
//@}
|
|
|
|
/*! \name DirectionIndicator like Turret Alignment*/
|
|
//@{
|
|
struct DirectionIndicatorData
|
|
{
|
|
double directionDegree = 0.0; ///< degree, clockwise (0 means 12 on a analog clock)
|
|
int lineWidth = 2; ///< px @ sizeL==default
|
|
Qt::PenStyle lineStyle = Qt::SolidLine;
|
|
QColor color; ///< invalid, means partyColor
|
|
};
|
|
|
|
virtual void setDirectionIndicator(int key, const DirectionIndicatorData &data) = 0;
|
|
virtual void removeDirectionIndicator(int key = -1) = 0;
|
|
|
|
virtual bool isDirectionIndicatorsVisible() const = 0;
|
|
virtual void setDirectionIndicatorsVisibility(bool visible) = 0;
|
|
//@}
|
|
|
|
|
|
/*! \name Designation*/
|
|
//@{
|
|
struct DesignationData
|
|
{
|
|
Point3D spotLocation;
|
|
int code;
|
|
|
|
bool isNull() const { return spotLocation.isNull(); }
|
|
|
|
bool operator==(const DesignationData& other) const
|
|
{
|
|
return this->spotLocation == other.spotLocation && this->code == other.code;
|
|
}
|
|
bool operator!=(const DesignationData& other) const
|
|
{
|
|
return !(*this == other);
|
|
}
|
|
};
|
|
|
|
virtual bool setDesignations(const QVector<DesignationData> &designations) = 0;
|
|
//@}
|
|
|
|
|
|
/*! \name Movement Track
|
|
* First of all you have the enable the MovementTrack using enableMovementTrack().
|
|
* \n Then you can optionally preset a couple of positions using setMovementTrack() or addToMovementTrack() to an MovementTrackContainer.
|
|
* \n Afterwards movement - transmitted by setOrigin() and a following updateView() - will be added to the MovementTrackContainer.
|
|
* \n If you hide the track by setMovementTrackVisibility() the movement will still be tracked until you disable the MovementTrack.
|
|
*
|
|
* <b>Behaviour if you enabled the MovementTrack and update the origin (using setOrigin()):</b>
|
|
* - <b>Every</b> position (different to last position) is added to track.
|
|
* \n There is currently no <b>minimum movement</b> required to be added to the track.
|
|
* - The number of positions in the track is unlimited.
|
|
* - There is no time-awareness of the positions.
|
|
*/
|
|
//@{
|
|
virtual bool isMovementTrackEnabled() const = 0;
|
|
virtual void setMovementTrackEnabled(bool enable) = 0;
|
|
|
|
virtual void setMovementTrack(const PositionCont &movementTrack) = 0;
|
|
virtual void addToMovementTrack(const Point3D &addToMovementTrack) = 0;
|
|
virtual PositionCont movementTrack() const = 0;
|
|
virtual int sizeOfMovementTrack() const = 0;
|
|
|
|
virtual bool isMovementTrackVisible() const = 0;
|
|
virtual void setMovementTrackVisibility(bool visible) = 0;
|
|
//@}
|
|
|
|
|
|
private:
|
|
// Forbid some overloaded methods without effects of this object:
|
|
// virtual QString identifier() const { return QString(); }
|
|
// virtual void setIdentifier(const QString& identifier) { Q_UNUSED(identifier); }
|
|
|
|
// virtual bool visibility(ObjectAppearance appearance) const { Q_UNUSED(appearance); return true;}
|
|
// virtual void setVisibility(ObjectAppearance appearance, bool visibility) { Q_UNUSED(appearance); Q_UNUSED(visibility); };
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // namespace SituationMap
|
|
|